<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/114794>114794</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Clang-20 Crash: not a non-type template argument UNREACHABLE executed at /root/llvm-project/clang/lib/Sema/SemaTemplate.cpp:7688!
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
iamanonymouscs
</td>
</tr>
</table>
<pre>
### Description
I encountered a crash in Clang-20 when compiling the following code snippet:
```cpp
#include <iostream>
template <bool compare>
struct outer
{
template <bool compare_with,bool second>
struct inner // unspecialized compare != compare_with
{
static inline void test()
{
std::cout << "invert" << std::endl;
// call version with inverted template value
inner<! compare_with, ! second>::test();
}
};
template <bool second> // specialization compare == compare_with
struct inner<compare,second>
{
static inline void test()
{
std::cout << "second: " << second << std::endl;
}
};
};
int main(int argc,char* argv[],char** envp)
{
// expected output:
// invert
// second: true
outer<false>::inner<true,false>::test();
// expected output:
// second: false
outer<true>::inner<true,false>::test();
return 0;
}
template <bool B1> struct outer {
template <bool B2, bool B3>
struct inner {
static int f() { return inner<!B2,!B3>::N; };
};
template <bool B3>
struct inner<B1,B3> {
static const int N = 1;
};
};
int i = outer<false>::inner<true,false>::f();
template <bool B1> struct outer {
template <bool B2>
struct inner {
static int f() { return inner<!B2>::N; };
};
template <>
struct inner<B1> {
static const int N = 1;
};
};
int i = outer<false>::inner<true>::f();
template <typename T> struct outer {
template <typename T2, typename U>
struct inner {
static int f() { return inner<T,int>::N; };
};
template <typename U>
struct inner<T,U> {
static const int N = 1;
};
};
int i = outer<int>::inner<double,int>::f();
```
### Command
The compilation command used was:
```sh
clang++ -fno-rtlib-add-rpath -fno-ident -std=c++23 -Wall -Wextra -fno-strict-aliasing -fwrapv -g -fsanitize=address test.cpp
```
### Error Message
```sh
<source>:26:14: warning: unused parameter 'argc' [-Wunused-parameter]
26 | int main(int argc,char* argv[],char** envp)
| ^
<source>:26:25: warning: unused parameter 'argv' [-Wunused-parameter]
26 | int main(int argc,char* argv[],char** envp)
| ^
<source>:26:39: warning: unused parameter 'envp' [-Wunused-parameter]
26 | int main(int argc,char* argv[],char** envp)
| ^
<source>:40:27: error: redefinition of 'outer'
40 | template <bool B1> struct outer {
| ^
<source>:4:8: note: previous definition is here
4 | struct outer
| ^
<source>:52:42: error: no member named 'f' in 'outer<false>::inner<true, false>'
52 | int i = outer<false>::inner<true,false>::f();
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
<source>:54:27: error: redefinition of 'outer'
54 | template <bool B1> struct outer {
| ^
<source>:4:8: note: previous definition is here
4 | struct outer
| ^
<source>:66:5: error: redefinition of 'i'
66 | int i = outer<false>::inner<true>::f();
| ^
<source>:52:5: note: previous definition is here
52 | int i = outer<false>::inner<true,false>::f();
| ^
<source>:66:23: error: too few template arguments for class template 'inner'
66 | int i = outer<false>::inner<true>::f();
| ^
<source>:7:10: note: template is declared here
6 | template <bool compare_with,bool second>
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7 | struct inner // unspecialized compare != compare_with
| ^
<source>:68:20: error: template parameter has a different kind in template redeclaration
68 | template <typename T> struct outer {
| ^
<source>:3:16: note: previous template declaration is here
3 | template <bool compare>
| ^
<source>:80:5: error: redefinition of 'i'
80 | int i = outer<int>::inner<double,int>::f();
| ^
<source>:52:5: note: previous definition is here
52 | int i = outer<false>::inner<true,false>::f();
| ^
not a non-type template argument
UNREACHABLE executed at /root/llvm-project/clang/lib/Sema/SemaTemplate.cpp:7688!
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 -fno-verbose-asm -S --gcc-toolchain=/opt/compiler-explorer/gcc-snapshot -fcolor-diagnostics -fno-crash-diagnostics -fno-rtlib-add-rpath -fno-ident -std=c++23 -Wall -Wextra -fno-strict-aliasing -fwrapv -g -fsanitize=address <source>
1. <source>:80:21: current parser token 'inner'
2. <source>:4:8: instantiating class definition 'outer<int>'
#0 0x0000000003be87b8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3be87b8)
#1 0x0000000003be64bc llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3be64bc)
#2 0x0000000003b33df8 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
#3 0x00007f77ff642520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x00007f77ff6969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
#5 0x00007f77ff642476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
#6 0x00007f77ff6287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
#7 0x0000000003b3f71a (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3b3f71a)
#8 0x0000000007244d04 clang::Sema::BuildExpressionFromNonTypeTemplateArgument(clang::TemplateArgument const&, clang::SourceLocation) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x7244d04)
#9 0x000000000747c1c3 (anonymous namespace)::TemplateInstantiator::transformNonTypeTemplateParmRef(clang::Decl*, clang::NonTypeTemplateParmDecl const*, clang::SourceLocation, clang::TemplateArgument, std::optional<unsigned int>) SemaTemplateInstantiate.cpp:0:0
#10 0x000000000748df0d (anonymous namespace)::TemplateInstantiator::TransformDeclRefExpr(clang::DeclRefExpr*) SemaTemplateInstantiate.cpp:0:0
#11 0x000000000746252d clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#12 0x0000000007481983 (anonymous namespace)::TemplateInstantiator::TransformTemplateArgument(clang::TemplateArgumentLoc const&, clang::TemplateArgumentLoc&, bool) SemaTemplateInstantiate.cpp:0:0
#13 0x0000000007485065 bool clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTemplateArguments<clang::TemplateArgumentLoc const*>(clang::TemplateArgumentLoc const*, clang::TemplateArgumentLoc const*, clang::TemplateArgumentListInfo&, bool) (.constprop.0) SemaTemplateInstantiate.cpp:0:0
#14 0x0000000007485507 clang::Sema::SubstTemplateArguments(llvm::ArrayRef<clang::TemplateArgumentLoc>, clang::MultiLevelTemplateArgumentList const&, clang::TemplateArgumentListInfo&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x7485507)
#15 0x000000000751cabb clang::TemplateDeclInstantiator::InstantiateClassTemplatePartialSpecialization(clang::ClassTemplateDecl*, clang::ClassTemplatePartialSpecializationDecl*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x751cabb)
#16 0x000000000748717b clang::Sema::InstantiateClass(clang::SourceLocation, clang::CXXRecordDecl*, clang::CXXRecordDecl*, clang::MultiLevelTemplateArgumentList const&, clang::TemplateSpecializationKind, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x748717b)
#17 0x0000000007488e6e clang::Sema::InstantiateClassTemplateSpecialization(clang::SourceLocation, clang::ClassTemplateSpecializationDecl*, clang::TemplateSpecializationKind, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x7488e6e)
#18 0x000000000754af0f void llvm::function_ref<void ()>::callback_fn<clang::Sema::RequireCompleteTypeImpl(clang::SourceLocation, clang::QualType, clang::Sema::CompleteTypeKind, clang::Sema::TypeDiagnoser*)::'lambda'()>(long) SemaType.cpp:0:0
#19 0x00000000081be4d1 clang::StackExhaustionHandler::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x81be4d1)
#20 0x00000000075543b7 clang::Sema::RequireCompleteTypeImpl(clang::SourceLocation, clang::QualType, clang::Sema::CompleteTypeKind, clang::Sema::TypeDiagnoser*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x75543b7)
#21 0x0000000007554705 clang::Sema::RequireCompleteType(clang::SourceLocation, clang::QualType, clang::Sema::CompleteTypeKind, clang::Sema::TypeDiagnoser&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x7554705)
#22 0x00000000068e9f6c clang::Sema::RequireCompleteDeclContext(clang::CXXScopeSpec&, clang::DeclContext*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x68e9f6c)
#23 0x0000000007251146 clang::Sema::LookupTemplateName(clang::LookupResult&, clang::Scope*, clang::CXXScopeSpec&, clang::QualType, bool, clang::Sema::RequiredTemplateKind, clang::Sema::AssumedTemplateKind*, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x7251146)
#24 0x0000000007252709 clang::Sema::isTemplateName(clang::Scope*, clang::CXXScopeSpec&, bool, clang::UnqualifiedId const&, clang::OpaquePtr<clang::QualType>, bool, clang::OpaquePtr<clang::TemplateName>&, bool&, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x7252709)
#25 0x0000000006776d3e clang::Parser::ParseOptionalCXXScopeSpecifier(clang::CXXScopeSpec&, clang::OpaquePtr<clang::QualType>, bool, bool, bool*, bool, clang::IdentifierInfo const**, bool, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6776d3e)
#26 0x00000000066e8603 clang::Parser::TryAnnotateTypeOrScopeToken(clang::ImplicitTypenameContext) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x66e8603)
#27 0x000000000675c63e clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x675c63e)
#28 0x000000000675e567 clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, clang::Parser::TypeCastState, bool, bool*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x675e567)
#29 0x000000000675e5f9 clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x675e5f9)
#30 0x0000000006717f28 clang::Parser::ParseDeclarationAfterDeclaratorAndAttributes(clang::Declarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::ForRangeInit*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6717f28)
#31 0x0000000006726f89 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::Parser::ParsedTemplateInfo&, clang::SourceLocation*, clang::Parser::ForRangeInit*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6726f89)
#32 0x00000000066e6fae clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x66e6fae)
#33 0x00000000066e776e clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x66e776e)
#34 0x00000000066eef03 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x66eef03)
#35 0x00000000066efded clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x66efded)
#36 0x00000000066e230a clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x66e230a)
#37 0x0000000004560df8 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4560df8)
#38 0x000000000481b949 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x481b949)
#39 0x000000000479abbe clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x479abbe)
#40 0x00000000049016de clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x49016de)
#41 0x0000000000ce5b8f cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xce5b8f)
#42 0x0000000000cdd84a ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#43 0x00000000045a3f79 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
#44 0x0000000003b342a4 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3b342a4)
#45 0x00000000045a456f 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
#46 0x000000000456a8dd clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x456a8dd)
#47 0x000000000456b9cd 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+++0x456b9cd)
#48 0x0000000004572d85 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4572d85)
#49 0x0000000000ce2a29 clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xce2a29)
#50 0x0000000000bafbc4 main (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xbafbc4)
#51 0x00007f77ff629d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#52 0x00007f77ff629e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#53 0x0000000000cdd2fe _start (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xcdd2fe)
clang++: error: clang frontend command failed with exit code 134 (use -v to see invocation)
Compiler returned: 134
```
The issue can also be reproduced on Compiler Explorer:https://godbolt.org/z/91cMa4abK
Please let me know if you need any more details.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkXEtz47aW_jX0BiUXCT618EKW7Xs7t9Pd03Ym2blAEJQwpgAGAP3IYn77FACKIihRshypb09dVdKmSDy-850HDh4UkpIuGCFXXnztxTcXqFFLLq4oWiHG2duKNxLLi5wXb1ceDO1_4IZILGitKGeef-P5s0-AMMwbpoggBUAACySXgDIwrxBbTKAPXpaEAcxXNa0oWwC1JKDkVcVf9DfMCwIko3VNlBfObJvtv4lv_8N13d6BIWW4agoCvHBOuVSCoJUX3varKbKqK6RMkZzzynSNBOmKSSUarABvFBFtxfTaXgAwVvvxhaqlB-09STBnRdcgAG2TlDEiwObjwTsP3oGGyZpgiir6FynWDQIPBl5447bfNtfDo9tGimJAWUUZAc-cFkARqTyYeXC6KbapI1WhmQxnmDdKy-GFc-BBSNkzEcqDcH2vK0hYUXlhr88OOkZVBZ6JkJQzoCEC2wopNkw9o6oh_bqGBt0HDIb0aal79Jnee9L0MXjpTftFX4XjGuqaW4Pu2EbaTDeEhzcjhPfV54XztcHA-Zaij9aMUwGM6mbd0Qz09WNuHtbWbqaca_MvZQqsEGUezPQlEgvswTleIuHBmf76bCPB5qa-T9hz3cnTE6clm7zWBGt74I2qm40PdwVaixne3UisRGc-1ifDeYkqSToDWevFFISDhzus51iEGyi26fbpGozp9u9iEUQ1ggHfUc--qHUdaIvuxyptS2Cj9e0aUDuYvQyNO_QstRef3GYcQ1agtPhNoRZzz51NF_pv2Mn8xQuvW7sDrklubuwD3Uc68MPrwIPztsAYZsyZVAb5F-3gINiDY7dHUFPvA5ZXdqoGp9fkudT3AbX14Y3jsvr6SVR1hIrUW00YWhHwcISWNpWMz3VffzuD3h48OKdMncDhdsIc6FD39tsPVWNftjWKgjd5RQaCl8PQus4PnaSxy1TnfLVCrOg_fFiSNhHtMgNdBDSSFOAFyU0Cum5atikC1smsB689eA0mJeMToSqaT1BRTESN1BLYu7QgTIGJGapvsC0PQwAmv-s8avI7eVUC2aJSCYrVBFUUSZ0IT8oXgepnMNGXEjGq6F_EC29QUQgiJTCpxSWua_Au6W-F4AL8SqRECzIilBfOJW8Ebv0FJl44CyI9Dr4gwShb6MuGGXZqJNCKGK-Aqc0cUuDF15PfbYFJV0AnEGtrgAnw0jk4QeLRZqXpHDgfL74dlwXG75Pl-d8my1744fQd8G3DP4MqRj9jQka-ljTVkhFtrfpCkIKUVBs_Z4CXWkIbJ2DadR75pvPjx9lDoEeBeuEs0-gYV0T_rQV5pryRoAeWSrAkojcPikxv25PNw9qPoe4UOsQwDlZklRMBdAQvNDGl1jtlG44OZC-ge9ojM4adWZwuEdqI-L-HPqMcRB8zjjj6iHH8XHZxoNtEB4f4EDO0z0qSHK_lce2uMe613_hYYs5siXvZhKFDp-IclORlY0VILJoVYUqCkguAKyRlz8RgakGdjfCDQmg_Cfw-4x06qknHFRKkGBhisttT3rXg9W7_Xrt5Vy9tzcfNjT-4UHZQudo9oe8qdy3wZhxdIgkQKGhZEqETuCfKCh1Zu6LavzSHaLPuqQnMthh832xiJNyMSaGNM0h2-lPXdw_fdsgJ92p6h1rHkGT-0aEn80c84cN5vxso_18FIQcw4wogwDibaKvZDja21G9fvt_O5v-cXX--BeSV4EaRAiClXUZwrjx4V1XPq0kt-P8QrL-2U5W7iuYevLsnK9T-eWg70JMIHTOSLNOuZXr59vl2dn8LZJOvqEaVNwsgSM2FAoqDpVK1mRwZN11QtWzyS8xXbefbGKiUDZHapZHxJLtmr_T0y2wP5Ag_KYGwSUtqQWrBMZE6uW1VCOemJpKSY4q0yKJhwG49XFrI9wrhJ1A0q7qbtvmXnj_9JvhCoNUmZttV1TteG3bM9I-ICXmtKy501LaMTZCURGijkBMlGvbkwbtc58l3ztxvUbwgUU4iM0_jul1U17p1s7Z4KcFkpbkAk8lrlkyQXE3kG1Po1QtvKFOkspO_ZyJyLol-Dib3YDJZYDxRnFd4qXPz8GYvXl1YMlTLJVdgUmJecTEpKFowLhXF0vZhmN6-PZy47pu3nmDa6nilUVKglbQrrugwPwO4ESYG10hIIoDiT4RtD7FwRyNdOkaZVIgpipTZYTKjdc_ne_lyG2a6cOXB0Af-q7_-hDnJ0jwDxsqNc8s3aS--CcqUscEHa8jZppBAL4_rzSmYaGPWHcEpMJHhJJbowWv_tYXX222AYTDAn0Q53oV_XhHEmvoru6cLhioPZg0z-4EFqLju5RxoNRgHLXTRhmFRZmCuLfc7wfyZiDcL75-IFZXuNGuZdMrMOVPkVbWBzTf_d12EbRdpmaZlmUQwhn4rmg2Rr1nymESTirLmdbJgjX2ALyW_TAxwU8WBHbltTpNpiUGtloKg4vGJVtVxHZj6TgfxEHSUJmAhDRfHgo_SxGk7cduGWVqGAOU61h_VsqnotJwOtFmmATq9FZlmnX6zfr8pjKLCj4CtaGzdDILm6rqhVXH7WuvYRDm7E3z1hbOHt5qsR8fZevSFWa-F4VO7Cto6d78nE48-c2wzxdM7USudI_7UET9KcYBD3W-3jW_WDGRtwtTUFehTFytNOueFMyUQkyUXQ2K-IbH6TkqXlxuCK7NG5LCwo6YuuCZtWHxImvNwWy-9rVBuDiKgygvnXfRax_Qp6Cc9GznJdpjQYdN3ScyK0i8-TuLDmkQt93dSapPbZq57MDsabuDCTWAMC4c2QUgHwuz-fECS24Ew21J8FD4csB1Ms79hsh3A45z4M8djfryjaFtIz5yOFjcciBv7SWx3as-tsqEg0gvn76NkZrzonfwNXfrvFKVSfWIlH_DtwezStFALXl_6R6sgGqog9tPdY8R9k0u1zVs_wZsJgd50MDxEpuHQEffXplL0M3km1S7B322PfZJOP8hYejanPmAYxA5_cYBRnu9CqOPatof21DPX-XhvaFAUVffOiR3X6pzyu8ebw0129U7PlaXC4SoZ2FoapPluWxvy4oq-d2Cc__GHzn9FMcLJ_sd_zwxdcv9FWTFw1RNboybQYTgdMJyRhLyP4d0iHMP7eCu7qf53kaY5cUhz0-Q4QqVf2mNrm8hWNgzr9h-FiW7m6Xo9qx1bMKqqHOGnx5K58W9D-nfyZ0MFmfNVXRFFdDL4aVVXR7D8Xw2qdLVhqth10W97zeXOgrrAjV0FIW2uYh94MK3QKi-Qnv93IsJsPf01w8tbPTKeOEl3FuQkKgIHgEL46fZ1iRqpxVtPYO36QMN-p2p535QlxZS06wj3dnjfT9F7NXV6i2pl7FsUdJPmOI7CfGRQ_ckt4vSjguHCISsYkpX68bvJ-hmIOkuqYXlwiHImB0lGpmWC30WUjr_tWtAgh_jjj3vMaxOCt0c1p9o5rKGVwRHSnRLAOAiiZLeQnzl_aur1KPIFrQbGYJ9_J7Kpdq1IaLl3pgd7GOmbkB2gRiykVUCxRrfXnGZSNqth2dk5B0FLq8N7NOAdpv50N1wqxzl_P6s76PuN_dmgipaUFJ-KsVTra43-bMg3JdwxttOMnVjsaH2koiOLrtxDN5xonVgHmmJHB85cIknTpAid7O2bWfvvXX9t13n6_Gr-xDFufhyj7t_ZCNmfCsKUQaJnY70p7my8rdOHF8ugQ7EzBUkSkiV-OEbxg3ibMcYVskPCV2FIfOBPZJAX6xGbYqoe2l3uLmieXiSL2BEpda0mxskBq5kjqTZrva4o_cK6nPnu5uSOd4xR91abbu41eTvN5gzaNpI71GQDakicpOel5qfiQ4vr8DHd4qOc7uVjZt6F09Pf97AykPI8IpVOzHT3JZM0SEuY7RXpZnMiZFYqItbfuZixYqaUoHmjiNxelbaF9tu9uS42i2-b2Lev1h0X3xFbkE-MnivTssQ4zAUuczAps_3GoEn4h-BNvW0BlC300_E80pLXBcZtKhzqj6P48HbTMB_50eQbbh3y4WAcSkq0P2hrEr-Ku3Zye0PKT0wRYXeoj-fyYIm9Cp1hTKTsJRvnGOc0Iw5l4YCyNE0OU9Z6usNce-DhBxA3tLsfQpzmxSEuGhBHyvGcx1zfvlrT6hH4Y8g6Bx1aWoeOeEBHWZBiLx0PvDYrwnYZMzucOneB0myF3O6IT91k6ldeNBX5tKq5WA-b51hOaMV0eBimwjD00RYPs_uHwQzPHJxLfkT6biE5mJ1cN4oTvyid0X7OC_IPwmbG1e2tW3s4sL3Vvk52WqQtEAepk3pGWZBPI2d0vRN6LGTFDqhnAmkxOCCdfDBKpyjPiUun7dZuFmCym9Fxqc5iyy3OviCRkwVGUz9ICkeQFvJGnucuN8j2yXuWoNTicwRwkjEfkzjPSoBx8Ni-lLR7j3WJhLstPQfuPTg3GxnnkcOidMSArhhFkUUIrMmfBw8mUvSEuV-hqvpvghUXZtl7l0yJu76v22jzyF5uPQWFoM9E7NyUiEI3bKCwTKen3OGxfbc2NA_Wr1gOnHqnDned2enxowRli3YYsQruKjw-4tfXILBfciQpfpSmeMuiU1jfeFQCUXvSQT8eNIeqSvsEF73nushsME21nJsqh3aKfuH5bn1EgwNxEURRTxW7DjG266oNu0clqd4cOn_0lk-L2LH8eGBiUZyU4D_ZRMzJlBoJZQ-ljNpCMhjSUVYUo8RtXlIexnXDphPMBxXNG80jk_E9RWeDZeBOthMnEFpsx6CGqU4-xUfz8gvP5Tgpv_B861DDvtDc2UGN6PqU-BE8tsbyQ9jUZDlsuulYnMIii8eQ3_SuncRhR8YwpoUfyOYZ0llDj8PfdJCfQATbdPZx89r0Ov_YrPQfHrZPnpNoZH3osZMb-jkqcxyZd71P3bdt2uk7GJwpnxbTIw_ZmypOm3DYJol88Pioqz1KhYR67An37l5I5PYSDjM5WBJg2z-5zkzjXe_9x_036sx9ULYzjO5HKkpEK1LYH-Eir1TZn04LwkjDbCQBk2egOJCEANpL-9vO1hl_--sixPzcURBGe35M4mFJgHmRC2DEAKokBzkB5mWtosGkAJyBrtnbNSvhbPC2GC9yXqlLLhYevPvLg3fTAP-KIpT_q331rCJIElARBVYEPDH-AmgJ3ngDGCEFQOwNrLggoCAK0UpeXhRXYTENp-iCXAVp6Kcw833_YnmFktBHWY6DcAp9FMdlmQcRItMyLKZJHKcX9Ar6MAoCPwrCKAmzy4DA2C-TKA9TmAdx6EU-WSFaXWp31ogvjPxXQRCl0-iiQjmppPm5PAhb7UEvvrkQV-b9t7xZSC_yKyqV3DShqKrIVfdreCbn0-SDQ-__gXO_-nfRiOrq4-_2taw8X8H_CwAA__8S509L">