<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/67914>67914</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Assertion in `clang::InitializationSequence::Perform`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
c++,
clang:frontend,
crash-on-invalid
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Endilll
</td>
</tr>
</table>
<pre>
The following crash is a byproduct of reduction of #45566 (https://godbolt.org/z/xKTYT1vxd):
```cpp
template < typename, int >
struct Mask;
template < int, class >
struct conditional {
using type = Mask< int, 16 >;
};
template < class _Then >
struct conditional< 0, _Then > {
using type = _Then;
};
template < int _Bp, class, class _Then >
using conditional_t = typename conditional< _Bp, _Then >::type;
template < typename, int >
struct Array;
template < typename, int, bool, typename >
struct StaticArrayImpl;
template < typename Value_, int Size_ >
struct Mask : StaticArrayImpl< Value_, Size_, 1, Mask< Value_, Size_ > > {
template < typename T1 >
Mask(T1) {}
};
template < typename T >
void load(typename T::MaskType mask) {
T::load_(mask);
}
template < typename Value_, int IsMask_, typename Derived_ >
struct StaticArrayImpl< Value_, 32, IsMask_, Derived_ > {
using Array1 = conditional_t< IsMask_, void, Array< Value_, 16 > >;
template < typename Mask >
static Derived_ load_(Mask mask) {
return Derived_{load< Array1 >(mask.a1), Mask{}};
}
Array1 a1;
};
template < typename Derived_ >
struct KMaskBase;
template < typename Derived_ >
struct StaticArrayImpl< float, 16, 0, Derived_ > {
template < typename Mask >
static Derived_ load_(Mask mask);
};
template < typename Derived_ >
struct StaticArrayImpl< float, 16, 1, Mask< float, 16 > > : KMaskBase< Derived_ > {};
template < typename Derived_ >
struct StaticArrayImpl< int, 16, 1, Derived_ > {};
template < typename Value_, int Size_ >
struct Array : StaticArrayImpl< Value_, Size_, 0, Array< Value_, Size_ > > {
using MaskType = Mask< Value_, Size_ >;
};
void test11_load_masked() {
load< Array< float, 32 > >{} == 0;
}
```
Post-17 trunk crash:
```
<source>:56:8: error: partial specialization of 'StaticArrayImpl' does not use any of its template parameters
56 | struct StaticArrayImpl< float, 16, 1, Mask< float, 16 > > : KMaskBase< Derived_ > {};
| ^
<source>:67:29: error: expected ';' after expression
67 | load< Array< float, 32 > >{} == 0;
| ^
| ;
<source>:67:32: error: expected expression
67 | load< Array< float, 32 > >{} == 0;
| ^
<source>:67:3: warning: expression result unused [-Wunused-value]
67 | load< Array< float, 32 > >{} == 0;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:40:46: error: no matching constructor for initialization of 'Mask<float, 32>'
40 | return Derived_{load< Array1 >(mask.a1), Mask{}};
| ^ ~~
<source>:31:6: note: in instantiation of function template specialization 'StaticArrayImpl<float, 32, false, Array<float, 32>>::load_<Mask<float, 32>>' requested here
31 | T::load_(mask);
| ^
<source>:67:3: note: in instantiation of function template specialization 'load<Array<float, 32>>' requested here
67 | load< Array< float, 32 > >{} == 0;
| ^
<source>:26:3: note: candidate constructor template not viable: requires 1 argument, but 0 were provided
26 | Mask(T1) {}
| ^ ~~
<source>:24:8: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0 were provided
24 | struct Mask : StaticArrayImpl< Value_, Size_, 1, Mask< Value_, Size_ > > {
| ^~~~
<source>:24:8: note: candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 0 were provided
24 | struct Mask : StaticArrayImpl< Value_, Size_, 1, Mask< Value_, Size_ > > {
| ^~~~
clang++: /root/llvm-project/clang/lib/Sema/SemaInit.cpp:8617:
clang::ExprResult clang::InitializationSequence::Perform(clang::Sema&, const clang::InitializedEntity&, const clang::InitializationKind&, clang::MultiExprArg, clang::QualType*):
Assertion `Kind.getKind() == InitializationKind::IK_Copy || Kind.isExplicitCast() || Kind.getKind() == InitializationKind::IK_DirectList' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0. Program arguments: /opt/compiler-explorer/clang-assertions-trunk/bin/clang++ -gdwarf-4 -g -o /app/output.s -mllvm --x86-asm-syntax=intel -S --gcc-toolchain=/opt/compiler-explorer/gcc-snapshot -fcolor-diagnostics -fno-crash-diagnostics <source>
1. <eof> parser at end of file
2. <source>:30:6: instantiating function definition 'load<Array<float, 32>>'
3. <source>:39:19: instantiating function definition 'StaticArrayImpl<float, 32, false, Array<float, 32>>::load_<Mask<float, 32>>'
4. <source>:26:3: instantiating function definition 'Mask<float, 16>::Mask<Mask<int, 16>>'
#0 0x000000000370a448 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x370a448)
#1 0x000000000370810c llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x370810c)
#2 0x0000000003650d78 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
#3 0x00007f6a4322d420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
#4 0x00007f6a42cf000b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4300b)
#5 0x00007f6a42ccf859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
#6 0x00007f6a42ccf729 (/lib/x86_64-linux-gnu/libc.so.6+0x22729)
#7 0x00007f6a42ce0fd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
#8 0x00000000065b43d2 clang::InitializationSequence::Perform(clang::Sema&, clang::InitializedEntity const&, clang::InitializationKind const&, llvm::MutableArrayRef<clang::Expr*>, clang::QualType*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x65b43d2)
#9 0x00000000062527c4 BuildImplicitBaseInitializer(clang::Sema&, clang::CXXConstructorDecl*, ImplicitInitializerKind, clang::CXXBaseSpecifier*, bool, clang::CXXCtorInitializer*&) SemaDeclCXX.cpp:0:0
#10 0x000000000629fe84 clang::Sema::SetCtorInitializers(clang::CXXConstructorDecl*, bool, llvm::ArrayRef<clang::CXXCtorInitializer*>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x629fe84)
#11 0x00000000062f06f7 clang::Sema::DefineImplicitDefaultConstructor(clang::SourceLocation, clang::CXXConstructorDecl*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x62f06f7)
#12 0x0000000005fb30a1 clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5fb30a1)
#13 0x000000000659f845 PerformConstructorInitialization(clang::Sema&, clang::InitializedEntity const&, clang::InitializationKind const&, llvm::MutableArrayRef<clang::Expr*>, clang::InitializationSequence::Step const&, bool&, bool, bool, clang::SourceLocation, clang::SourceLocation) SemaInit.cpp:0:0
#14 0x00000000065b344c clang::InitializationSequence::Perform(clang::Sema&, clang::InitializedEntity const&, clang::InitializationKind const&, llvm::MutableArrayRef<clang::Expr*>, clang::QualType*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x65b344c)
#15 0x00000000062527c4 BuildImplicitBaseInitializer(clang::Sema&, clang::CXXConstructorDecl*, ImplicitInitializerKind, clang::CXXBaseSpecifier*, bool, clang::CXXCtorInitializer*&) SemaDeclCXX.cpp:0:0
#16 0x000000000629fe84 clang::Sema::SetCtorInitializers(clang::CXXConstructorDecl*, bool, llvm::ArrayRef<clang::CXXCtorInitializer*>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x629fe84)
#17 0x00000000062a65ce clang::Sema::ActOnMemInitializers(clang::Decl*, clang::SourceLocation, llvm::ArrayRef<clang::CXXCtorInitializer*>, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x62a65ce)
#18 0x00000000069f7792 clang::Sema::InstantiateMemInitializers(clang::CXXConstructorDecl*, clang::CXXConstructorDecl const*, clang::MultiLevelTemplateArgumentList const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x69f7792)
#19 0x00000000069fd8de clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x69fd8de)
#20 0x00000000069fbd4f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x69fbd4f)
#21 0x00000000069fdbce clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x69fdbce)
#22 0x00000000069fbd4f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x69fbd4f)
#23 0x00000000069fdbce clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x69fdbce)
#24 0x00000000069fbd4f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x69fbd4f)
#25 0x0000000005fd6b69 clang::Sema::ActOnEndOfTranslationUnitFragment(clang::Sema::TUFragmentKind) (.part.0) Sema.cpp:0:0
#26 0x0000000005fd7342 clang::Sema::ActOnEndOfTranslationUnit() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5fd7342)
#27 0x0000000005e6dae3 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5e6dae3)
#28 0x0000000005e61cca clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5e61cca)
#29 0x0000000004964be8 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4964be8)
#30 0x00000000041ca839 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x41ca839)
#31 0x000000000414be7e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x414be7e)
#32 0x00000000042a97ce clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x42a97ce)
#33 0x0000000000bde956 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xbde956)
#34 0x0000000000bd621a ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#35 0x0000000003fa9a49 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#36 0x0000000003651224 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3651224)
#37 0x0000000003faa03f clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#38 0x0000000003f72385 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3f72385)
#39 0x0000000003f72ded clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3f72ded)
#40 0x0000000003f7ad15 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3f7ad15)
#41 0x0000000000bdbdfc clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xbdbdfc)
#42 0x0000000000ad6491 main (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xad6491)
#43 0x00007f6a42cd1083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#44 0x0000000000bd5cfe _start (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xbd5cfe)
clang++: error: clang frontend command failed with exit code 134 (use -v to see invocation)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsW0lz27iX_zT0BSUXCVJcDj7Ist2TTlLJxO7uzEkFkqCECQWwAdCR-zCffQoguICiFDkt5V-9uBJrIfje7_3eCpJGQpA1xfjGmd8687srVMsN4zf3NCdlWV6lLH-5edpgULCyZF8JXYOMI7EBRAAE0peKs7zOJGAF4Fi9I4yqDw70g_k8DIED442UlXD8hQMfHPiwZnnKSnnN-NqBD3848GH39ul_nrznXe7ARC1z7xx34YRu8y-rquYbibdViSQGjr8E8qXCFG2xA5eAUAkc_75ZJSRXeN4j8cXxb42s_fMJlerUrERC7J2cMZoTZQkqgRMZIaAWynqlGDj-ndHQSfJCLaZTGd0dU9_oXT1tMD2mXS11lfRu5QDPGJBecyoAxdnqtuo46MkYgWqUDDCtpNbWOmAM1wjtpfgLx1-o1cfgfMudC87RyysEqJeUsVK9dkjHQh8lkiTTot9sq_IU8eBXVNZ41cJ8JH_g1WTsAcdf7CtYDs7X5-rIUb_aaBodb1xuuX0a15PXwwCNNBg_eQ5M9KnR3UlR0YvrpT0zkoOSodyBcX-8cavS86Tib6sVJgOYZoU6ceXA2CywwvOVZL8RSt3Kcukd5uQZ5_s-OEq9D9XvgbyhmL2M10I8HfRWGiiZAxmKJ_VqQnWor6kNVn0A4Kg7TQh1DhXanB5nS6tet08-x7LmtFvuRLfagf6yN-beOOUaqSDpQrCJlUGUADByFWhlIO_UYvNtd71Vym-ROKlIvMrrRcmQKdDqt3vE3Wf0xfmY-bZJVv0YHOtrh78YEjxh_wVAdm2xg_i9Wk8puVr1K2queyBTDxVdUwq6ejccACbOPuJ-XU4lFtLzVjpyVMRgVVztFAZWxlqu9WFXTjSLCo0C5E5U13aKaj5-ZELOvAhIXtMvzSC3P3CZj_5SsJpnuOnh89DxF7EiGHPOuHpTIS4JKoGocEZQSf5A_fAXjd0AI5AzLABlEtQCA0Rf1EoiRZ91FeJoiyXmouUAzEPgREvwH8oFoH8UAPPjzO8n2Qkjx1_o4bWnB-8qnEmcKzaURBgBVEjM1QGOhSCMdlrCyGj5M07fQzv505nQL-_DZsIqH05bdXkrjpLtKzBfEaeErg0uAwdwLOpSgprWQrE_v5391ryfPatMdeYmNy6A9_8O_UwaErjqV2jxSxnYIpltzNDdBD7joGAcEErkXqKZYB8g1r096tAFbhcTZx0LBmYDAA6Y6HvKYY1hEqtXQgGhQiIqSWdGUdNm49iVglFNmSgotslwCQpUCjws6yNK2q1I06795TRxmjvA8e81FirMN5jjzmLfM1R-Y7jtk_DbMfxneTEePGz0YXPOXnUOWQvDsbUZojnJlUXDIO_MVF3imaC01IsVfMKxAB5AfF1vsdnf1RK44CvmGFScPZMc5wYSDA2gg_ugEWpwOIJh0Da-49jV7miDAdlWJcmI2sVXL8MFCsGfNAsAGAzb4WX3mRO971Ah-16OtuwZ_z04ssjRv7MS0bUDb9U_fwEc-MAZkw58KMvn7azi7H9xpj6adQ8lSR348Ii3yLy8oUReZ1WlqA29qJvTmhN0_bnfVfxT0-0G376x2sSjyn2qPKWOfcS8YHzrwHhwQqNUz0_aGZPCcH5PJZEv31yotb4lNG9X9mve16UkCvSCr0eH_rtGpZqsHbgYXgVcCIF5U-pCVwm9XmPZCG_m5aYcTShvQL1dLVUeOtFSeUkLIOJ-18TfEgnZzd39gtdquCMcZ_IdUcIiUCBS4vx6GAof390vHu-BqNMtkQCBtF4DjivGJZAMjK6OErmp0-uMbU2o7EcMEaLGwoEPANEcEJqVdY6BSqzmymyKsi-So0w3w4rjirMMCzULmZyFS30mEoJlBKm2wGsKRMZJJQ3wR4myLyCvt1XnCvfacZOPnK052nbJKExss0rHMttWpMR8hndVyTjmbXzPUOtHMdN7Dwc-pIT24a_SBMzW-VfEi1kAZmswY0ouqiolvZZVLa8FmG0VF2A228XhDIntTLxQiXaOf0eoxCWYPYLZbJ1lM8lYmW0Qocp9x-CpxYKiSmyYBLMiYyXjs5ygNWVCkkyAWUHZTBNrfW1VQM2Pp_hx_CVmhSoSFeICc4AkwDTXzZyUpvVCs9IalNx2UBpMAXTdjwA5LvT8d3LXb3T5U7pUfnnJycp-5OjVoA4mUPdDxEmgxzq8sINhDpmX_kKFjQE40HeBu3PbHz9yURDEQGelFiRehCmrnFCpc-apSby4X8TR1xUTkmO0NRVRa0yALjBnyRwH3ro7A09Vzw6_N8Ife242hX9ZYkTr6gN9JGuKSgfGNdW3hXJQMqXlEmgVGAsttNCGczePYrBUqfcJZ-wZ85cG3n8hmpdKaWyYtNYsGZV417ZOV__vVPhGRVSEKPAhzAPogtWKYyEZxysujZ1NN97F4SoMZiWh9W62pnVzoJIbjlF-Ldi1q23xggC6liXBUA3MCtd1U8AREfgE-ZmSHGrJge-6qSV5bkvOinieAJSyk5APJEMYzxNLcjiWHHVeP1lmBG2ZkS0Tu0Uevk6m7xd5aMmMh1ESztPAz-HZxp8jg08z8hxZ2E0G1so-297XUo21ukZ-woXjL0ejnJp9VAE6MhidOw0NfxbBiUUwnMMoC8BtTcr8jRncb5HAPT_8FDqXnz8v-0H_DmelNmgJWpkDec30NT5dKX1U29-CYG5Obm_xjRRJxi14C40nAQqaUr38_Hm_PKhy6dqmJwWOAzC2zbyTIzXCpuGgwS3mPjCmI2LaEBUf54-CxtIuChQVnk1F4YZFNE3Fneq7uPXjHS5QXcrlcFdnhYdu6e9YptPltCi5gMHaHstgq_vMi9R3kTdtMK_pb0RuHuuiIBnBpvM_Vk3nP2pr7_R2bFlx7Xh9W6DZclzGx8Yiy2TfLqVJEQdzYGrkwA92hfsrFc9jveBR4spS1iRmOMzRifpyNH7HB5uSM9jJj-pNMOplfhBk__ay7-9lij8rwuf_3F4W_tvLWioimwoUzjM8TcUikx_oe7w9zMXA-hMr_WspaWm9ADXacosae5pOiihK4DQ1b7pdNz5K0MFgObqmrTPjlfqS4Tv8jMsnc3NgYS49vSNCDqrT-dlqyLDYSkZs5XF-IJAGbD2YTn_XXZ94xUTUn7yXdPbrJexX5g3th-7I_jQPimn7TXf6iGlO6PrN8M6WipfLYVaQLMze2GfpoeT_e_gstTMcwr-gz_x_uM-Cv6DP5vb-KQ_TMDnSZO9p_qF44oiKUqP9hRL5wNG6ucW3N4Tpd0-_tCuasUrbdV0hLq_ddiaaHIZgOAIX-cGBNncQXHs_6NzbMo3FYtIaV-Y4zBH2h2A_6lsLg_dPrNItsgneIXcfKvR7jT9Kbg8fauFPnNWVHkvu90fcno_3LK9LtbtnXO1zJb5MtzVmWjzEIx68LEN7PCwenw7O7BfOXAPJwmxNCEESBimOrcmH5fgnTBe62LTbJZzVEpuvLhJlBsgQqX1vI_AyFPtWvj5wRiWm-QTUC4FsMFggPRtkkOII23Q2apvC126Nx4wetuoisWxwWoZYXTiAKInsjmYg9_Y8d30qPmbvRXbSBp9lgNWS3TTHyTwEWeattkjJiKf3OxvE-8neXA-wvusenL-EHQ1Ky4xgZEYIPQRa8pfek64UA2Met6gsf8X6Mlhz73PfptG1ESXD3ISy9ic5J8-YT_Yn32qefoESFCSg-cuLE68Y6iUZKssUZV9WBbULfqPbxNDSW7LtFrWPMPRJPelDIc06VnV_5TPgR3JC16aNNA7uTlitst3O85oPKRIkWwm93LBoLVZfrCRHRIr28EgcKkuVE4wPjqslg2FNB1HDuT7FgVGJtmmOHBgNLq7G7U3Nn1k67Y9wdCvSgzAYuGLqhmNz5FNNH1GByxeLzh99sdcgtiI_GoUYcn1rpvzHhchoeDwYC7FNXAT9eH6QOO07tNcxWzatYj46US04dGH2yNKFNewMbDtrQDVmWwGVjHnJcf5aXn5mqThMys8sHV3lGdbZ_dLcxUGFCO8f7TiVRxMsP4bNHOdDNgN3xCbKvYNRdjd4bw0OExPDIS_8QDbPX94aeiz-vFFjT_PC3EppJ5QWvy4rC1MUvt22zz6TKGQWdGs2dFEeBokHFOhz625EW7p9-wmN3HNjH6xWJUlVJUZcrgZATn0OJHBjaycXjKeueVZg0Mg_P79KeKd9eHj4dxb6e1CY3QDITPQ2T2-Cr0RuAN7px7hzDDw_UDBrgcHsGUgGBMaADEb0ZPQnVFf5jZ8nfoKu8I0XJqEXxi5MrjY3mRe5SewnGfSTKHezEKM8RUmcYw8VKXavyA10oe-5ruf5QeQm17mLYIGKJAojGOA0cAIXbxEpr1XkXjO-vtLPg96EUeIFVyVKcSn03_JDmLW0QAcu1WeTua3V_QH9eCOjM0KfUUn0gfndFb_RT56m9Vo4gVsSIUWvVRJZ4pv--VyiH9F95b3L0L2qeXnz_Y_Aaqv_PwAA__9U4ac3">