<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/101381>101381</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
clang segfault when printing function candidates for compile error
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Majeux
</td>
</tr>
</table>
<pre>
I ran into a specific compilation error that triggered a segfault in clang when calling a template function with specific arguments. It seems to segfault when trying to output candidates for the function.
Minimum working example:
```cpp
struct A { };
template <typename T, class... Types>
void test(T t, Types... args) { }
int main() {
test<A, int, A>(A(42), 1, 42); // Segfault
return 1;
}
```
I originally encountered it on clang 18.1.6. On Godbolt (https://godbolt.org/z/sbGdaddPb) I found it produces a segfault on 18.1.0 and 17.0.1, but not on 16.0.0.
Not all calls to `test` cause a segfault. The following outputted a diagnostic message as expected:
```cpp
struct A { };
template <typename T, class... Types>
void test(T t, Types... args) { }
int main() {
test<A, A>(A(42), 42); // Ok, diagnostic
test<A, A, int>(A(42), 42, 1); // Ok, diagnostic
test<A, int, A>(A(42), 1, A(42)); // Ok, diagnostic
test<A, int, A>(A(42), 1, 42); // Segfault
return 1;
}
```
Output:
```
crash.cpp:7:21: error: no matching conversion for functional-style cast from 'int' to 'A'
7 | test<A, int, A>(A(42), 1, 42); // Segfault
| ^~~~~
crash.cpp:1:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'int' to 'const A' for 1st argument
1 | struct A { };
| ^
crash.cpp:1:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'int' to 'A' for 1st argument
1 | struct A { };
| ^
crash.cpp:1:8: note: candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided
crash.cpp:7:5: error: no matching function for call to 'test'
7 | test<A, int, A>(A(42), 1, 42); // Segfault
| ^~~~~~~~~~~~~~~
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: /usr/lib/llvm-18/bin/clang -cc1 -triple x86_64-pc-linux-gnu -emit-obj -mrelax-all -dumpdir a- -disable-free -clear-ast-before-backend -disable-llvm-
verifier -discard-value-names -main-file-name crash.cpp -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -m
constructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fdebug-compilation-dir=/home/max/Documents/notes/tuple/clang -fcoverage-compil
ation-dir=/home/max/Documents/notes/tuple/clang -resource-dir /usr/lib/llvm-18/lib/clang/18 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/1
4 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/x86_64-linux-gnu/c++/14 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../i
nclude/c++/14/backward -internal-isystem /usr/lib/llvm-18/lib/clang/18/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/14/.
./../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdepreca
ted-macro -ferror-limit 19 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fcxx-exceptions -fexceptions -fcolor-diagnostics -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/crash
-c0e064.o -x c++ crash.cpp
1. crash.cpp:7:33: current parser token ')'
2. crash.cpp:6:12: parsing function body 'main'
3. crash.cpp:6:12: in compound statement ('{}')
#0 0x00007af6917a103a llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/lib/llvm-18/bin/../lib/libLLVM.so.18.1+0xda103a)
#1 0x00007af69179f064 llvm::sys::RunSignalHandlers() (/usr/lib/llvm-18/bin/../lib/libLLVM.so.18.1+0xd9f064)
#2 0x00007af6917a16fb (/usr/lib/llvm-18/bin/../lib/libLLVM.so.18.1+0xda16fb)
#3 0x00007af690245320 (/lib/x86_64-linux-gnu/libc.so.6+0x45320)
#4 0x00007af699bcaf4e (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18.1+0x19caf4e)
#5 0x00007af699b9f8a0 clang::OverloadCandidateSet::NoteCandidates(clang::Sema&, llvm::ArrayRef<clang::Expr*>, llvm::ArrayRef<clang::OverloadCandidate*>, llvm::StringRef, clan
g::SourceLocation) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18.1+0x199f8a0)
#6 0x00007af699bb3adc clang::OverloadCandidateSet::NoteCandidates(std::pair<clang::SourceLocation, clang::PartialDiagnostic>, clang::Sema&, clang::OverloadCandidateDisplayKin
d, llvm::ArrayRef<clang::Expr*>, llvm::StringRef, clang::SourceLocation, llvm::function_ref<bool (clang::OverloadCandidate&)>) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18.
1+0x19b3adc)
#7 0x00007af699bb9ca6 (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18.1+0x19b9ca6)
#8 0x00007af699bb947f clang::Sema::BuildOverloadedCallExpr(clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr
*>, clang::SourceLocation, clang::Expr*, bool, bool) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18.1+0x19b947f)
#9 0x00007af6998bf5cd clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*,
bool, bool) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18.1+0x16bf5cd)
#10 0x00007af6998d92b3 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*)
(/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18.1+0x16d92b3)
#11 0x00007af698ddcaba clang::Parser::ParsePostfixExpressionSuffix(clang::ActionResult<clang::Expr*, true>) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18.1+0xbdcaba)
#12 0x00007af698de0094 clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) (/usr/lib/llvm-18/bin/../lib/li
bclang-cpp.so.18.1+0xbe0094)
#13 0x00007af698dd9b62 clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18.1+0xbd9b62)
#14 0x00007af698dd9a3d clang::Parser::ParseExpression(clang::Parser::TypeCastState) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18.1+0xbd9a3d)
#15 0x00007af698e3c529 clang::Parser::ParseExprStatement(clang::Parser::ParsedStmtContext) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18.1+0xc3c529)
#16 0x00007af698e3a846 clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation
*, clang::ParsedAttributes&, clang::ParsedAttributes&) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18.1+0xc3a846)
#17 0x00007af698e3a21f clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*) (/usr/lib/ll
vm-18/bin/../lib/libclang-cpp.so.18.1+0xc3a21f)
#18 0x00007af698e42a90 clang::Parser::ParseCompoundStatementBody(bool) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18.1+0xc42a90)
#19 0x00007af698e43b93 clang::Parser::ParseFunctionStatementBody(clang::Decl*, clang::Parser::ParseScope&) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18.1+0xc43b93)
#20 0x00007af698e5ec55 clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*) (/usr/li
b/llvm-18/bin/../lib/libclang-cpp.so.18.1+0xc5ec55)
#21 0x00007af698da7f48 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::SourceLocation*, clang::Parser::ForRan
geInit*) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18.1+0xba7f48)
#22 0x00007af698e5dccf clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) (/usr
/lib/llvm-18/bin/../lib/libclang-cpp.so.18.1+0xc5dccf)
#23 0x00007af698e5d697 clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier)
(/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18.1+0xc5d697)
#24 0x00007af698e5c8eb clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) (/usr/lib/llvm-18/bin/../lib/libcla
ng-cpp.so.18.1+0xc5c8eb)
#25 0x00007af698e5ad5a clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.1
8.1+0xc5ad5a)
#26 0x00007af698d922de clang::ParseAST(clang::Sema&, bool, bool) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18.1+0xb922de)
#27 0x00007af69abf3189 clang::FrontendAction::Execute() (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18.1+0x29f3189)
#28 0x00007af69ab6aa44 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18.1+0x296aa44)
#29 0x00007af69ac6eb1e clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18.1+0x2a6eb1e)
#30 0x0000573e9efb1686 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/lib/llvm-18/bin/clang+0x14686)
#31 0x0000573e9efae935 (/usr/lib/llvm-18/bin/clang+0x11935)
#32 0x0000573e9efadae8 clang_main(int, char**, llvm::ToolContext const&) (/usr/lib/llvm-18/bin/clang+0x10ae8)
#33 0x0000573e9efbb8ba main (/usr/lib/llvm-18/bin/clang+0x1e8ba)
#34 0x00007af69022a1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#35 0x00007af69022a28b call_init ./csu/../csu/libc-start.c:128:20
#36 0x00007af69022a28b __libc_start_main ./csu/../csu/libc-start.c:347:5
#37 0x0000573e9efab295 _start (/usr/lib/llvm-18/bin/clang+0xe295)
clang: error: unable to execute command: Segmentation fault (core dumped)
clang: error: clang frontend command failed due to signal (use -v to see invocation)
Ubuntu clang version 18.1.6 (++20240518023429+1118c2e05e67-1~exp1~20240518143527.144)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
clang: note: diagnostic msg:
********************
PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang: note: diagnostic msg: /tmp/crash-2fd7d8.cpp
clang: note: diagnostic msg: /tmp/crash-2fd7d8.sh
clang: note: diagnostic msg:
********************
```
Source and run script:
[crash.zip](https://github.com/user-attachments/files/16445463/crash.zip)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcW1FT4zqy_jXmReWULTuJ88BDIGQOtcwyNXDOPlKy1A46Y1teSWbCPsxvvyXJjqNgMsDknLv3UhQkttTq71OruyW3iVJ8UwOcB9OLYLo6I61-FPL8M_kT2u1ZLtjz-TWSpEa81gIRpBqgvOAUUVE1vCSaixqBlEIi_Ug00pJvNiCBmbawKUhbasRrREtSb9D3R6gRJWXJ6w0iSEPVlEQDKtqaWknfuX4cxiBy01ZQazVB1xopgEohLQa5VpyWz0aaFki0umk1oqRmnBENChVWrUH-JIhWQbR0fz_zmldthb4L-c1IgC2pmhKCpLsfzCL3S5vGXVFatlSjJQrmFyiYr4LkYl_gDk6QXOrnBmpSAboP8KVBr9RkMkH3zw2oILlyHZ4EZ0iD0gHO7pE2LW0D05LIjQrwYjfU3ji81qgivA5w1rVw152o5HJpBPHayluawXC2DHCW4gAvzLXY_HHfkgvkfgK8DvAa3XXUdgIRQhJ0K2sUD1h3yvT8uK_XSEi-4TUpy2cENRVtra0hcI1EbwBxNoknswm6rdEnwXJRahTg7FHrRhnerRIbd2Mi5CbA6_8EeK3yT4ww9iU3cK9RIdraim2kYC0FtW9ronaDRIjUDMXzSTSxePNWo1q4-7NJNIk8W_in0IiUpbVNa2PBLLJsziJESatgb4gJujcmJcpSfDd248xOW5NnnGxqoTSnqAKlyAYQUQi2DVAN7P-JaY3Z1IE5Id-sbr-ZNnvkDPblC-4Md1y-tdyXNvtG4T9bEHtX-jFeGeC_YbW5v7fW9F6alftKJVGPE2NiyXIeJEscB8nSOWvzoRaoIpo-Ghumon4CqYwLNj6z95ekDJV-LgFRojQqpKhQgOcW7NyuEjxfBng-6D9HwfwSvZf6t7KDrPRgevXjx48fLzEaeJlDpo0bHyKBwedWmJDG4ZiYwKum5JRrREXzvN_AGL7xFE-c5DYcGKa-1eJ77dE0RoaVYixpbmmMld7FsAFFbFG8uuAHoD0d06uTYa3EE5wI6y-i_IsAMnBh4ChGCf9uuQSFoiHF6GNEjL4TZSLLE2fAxhfS9NV1tEtkDDEmmHRkOU_cL5S_cZUMP67Bl5ur5d0VUm1ecY0IytsNktAIqY2mB4GY68c2n1BRBXhdlk_9v7CR4k-gOsBrrlQLyuhhoi2vadkysCmX5QzlhH7TklAwABoJjRQUlAKGlGilu2x6EqUE5cQEUdnWSFHJG91F6DtN6DfE2qrZObpogr5IsZGk2pvAZGk4aZU0avK8VzbOArzOTUhbuxwkpDRGoZa8KQFts9nDLA0bGpa8brfhpm5RCBXXocj_RGEloSTb0ExkaDRgXCISopBxZYwpLCQACmkJRIZE6TCHQkgIDWyo2dDOatJFZpC84CDtTUokC59I2UJoQrpCoYm-YcFLdwHtTM_pIqjNuMNKMChRwykKG07DEp6gRNh94SpsOKCwKiSpIGwEN4lYkKwsiqIi-jEEKWuBwqJoQipqM0M6SFaiRmFRi1CaBIvXm9C0RWHVrYJhSYWk5EQZdYu2_s5rFmoDUwXJCqNQE7kBHdKmNfSGsxSFuq3BXthADdKozSBvzU7B3OL1JkhWG5ajsLDXw73dRci4UT7A60dRQYDXFdkGeL0StF-4a-MizH_dmvx9N88FFU8gyQY6cQ7GLwqV4CzXSHjd3tx32yXA6zhDoZ0EE1C5elYaqqGvs83JZNdtQ2mA151l7szSyEn7hgd_uoVnhgzwhf1dxw5u-rcNPdJrT5u_XA8Hd4wI08WsyO9EsmNa_GwSB7RHpQhKyrc1fS9sB3EE_EiPl8PD1nygL9V4fQqP937_EHZ9NxIo6bc1LKwIlcYV2XgaltzEpXiBwmJTtzTsUpAgWaUTPIlRWKhvvAkFkyF9BPot5HW4qQqz2LfbELYUGrO-jWfyvlBRChkOOby5RhiTim9QuHp4-HR5-fDb8o-rh9W_ll_X-OFyff2wvPscJKsYhSaEr3XVGGsw_tgpH9IIolk6ESjcos7cBn_t2sQTF5EPM4gksSlNKyXUGjVEKpBIi29Qm2zBRv0uWcATr_PMpEbYdDadvJQjF-zZ9Hb7t657MqLAIIPX9hzH7qeVJhqM80N28zc3e7_5qtOmy9lwEqFoG0VRNCfFbBHPSRwlBNncIFkGyVI9K_fhi-S1tpH73oX_bGgkyfcHobQEUgV4tkt9Fm7goxF8b62UPL-5-ePzRImJ2fAH-CLaMquPp3DsK7woolk6pvDXtr7jm5qUv5GalSBVvwX-ZZ3skJ5O-JDEWZGfBPysyL2Bkv2BIpxOExx1Azk5I46j5Dk1cmdWqO3iyUz3ZS5ySooU3q28daohbRoPQbyw0rzhpv5wiyIjkTtMcvN2-wSyFIRd9tuDO9Duzj-Fht1VM517ve6gIp3tDbawlJI8f4UiSC73ml5tGxlgl5X_vPULdca63mnJ643p6w5wage3183mFzddqvcRG3yNXUuex-7MZzdPCKMfZFdp5u40xORW-6QcIrrcH-ILkZqTcjUcrzi6xmfrmG4rrpqSPP-Dd3yyX5neF3P0KpahT--KH6QdJReiRL7djZjHzO7qrk4xz13M6WbbTqY32_OD2V5QMjuZcVlp3nDZ4XDpvHgxrfbTRctL1nMD7JKUpZsXb81S0djl5E9IP4H-1d9rk6iXT8BuhPjWNuOtjk3m59buaY5YjTtz29nOWw1-TxVjIcP_0y10S7U3FwtvLrK8mFJ2ZC5OMAO_xu0vsNqB_ou4nVnqdtyaDCPyuWULnCfj3C6pvq3_D3M7GNRpuLRUeVx66VrGGCU5OYgWCuTe5y9C6YJvjYqgzFbhri0KvvXJXVq3_BVUW-pxQvAl0rKFEzlihy-32nvwsA8PomiRHoV3SZQesPmo9hubdvb7P3jNXrqWw9i53_X-ubHD3Gkbjw67Lj9AiAP8Gi0WtUdLcjDri3yGj9KytI-tzW7lLeQcIDzd_Bo9PSDpIRCSsKNA_nfVJ4nvybxkO4OETvHip-rf9RvH1xHYz-xOV_pS1Bq2H9rtjaOgVkkPxewABcnS2VEUOwS3cgW0JNI6wWWhQS61ljxvXYq7lx1WpCz_APt4wU91daU7f5Lg1rqTY2tvhJhjbnmXcYxIZPuqjo552OJ0U2AY9qZgfjgFOC4-MAX_DZy_7gC78_yP8IXjwuMr8_lKMVlEx-NCd2yz4-1CsOcAZ6fNdqhVxNN0caBpki-So5quu03RoaZ7fcyMv2LVno24FOmUlmvV38eHIx_fFOh0-iZ8Kyh4zfWoJ-f1prdqId9infddvcd1XQj3LPN4rxuiYVjjN1zpUbvt4vJH2bJkeGwdpGtkXqTZUWSGhk9StM2rJN01QF-CHegbX7Q_d4Ejy_pVOtdCft2dysB1zcfp_HDktTx5ROIDs2OUHneYhpBbuWd8190h_EgUfn9oeNHi6OQsKQWl7lzZHkifqA7ir6xSy4ZHV3JI12wx_yldXVDxWHt1yZ6ctEN7e0naSTdX1HLikZYekEYzyH-S3TmT8iPy30DUhxZa9wBwjAqD1KPiINGdEjY9vs28F80NPEHpQpV3pNeQf7fwRR8kJTtHZ_fgIynJcCrwWbC2hOuqEbLP8U8Q4xzYgQMD0ePAT5PZAmMGLzhY3t2_enL-15yw5FYRT1MvmyR5kcSZty1ZSxMTaua2-f3GHmhrqPzQU5xx1fDCDu3plvm6zQhJvR39pS09AHldK01qCp52ncIewQdgTpnu4IVVz9Pfy-cInUEeg3_2YzUdYDztImh2DOYp4yUmVq19vXcPIqfzBBZQ5PEsmyFK44eufHX83P-RyD6d2h2CedfwJXoSnL1Z_a464CLaxuks8zZBu0ePnYoEFsn0fSLjReLlW7snh71IRqDLt3rcXRWZQWVBLP3TwXshyi6D2ssr34k0IuBlL7vnjP1k5FlObB3x--RC5h-X-c8aI4xJTAl6eDCG8qA0kfqBkrK00JGxI6ra3qTUs2LQ2EKeRpeddR12mjwGyXKeBskyGQadHg6Ks9zW8j2YZOFwHPfRCA-t8Am1T9ezIFniaBA6GxPqIRkDMSo8SV0N4k72_MAocryYIif1XfwDXgzW1q_toc6xrUleAtICgfMJiIqqIjUzN-9gY_Z27n0QV4JpHISQYCv3gB0RbK-govN7vVRUEF4CQ6y1Yyr7cN4IbRWg8Mm9CAKI7zmkboTf87bWbSe2r2F1bx44Pi4CfIEjnEbTOItwkuJFgC_iOM4ohmgKs3kY_4BtE__oG8VpMsXzSbznO-9tkZtRf6SEsGvyKIEwZGv1bMWGUHzbvSxh3GRZAltx6RUu5v3Dyx1Nff3r_qsFyt7ZOw766O9eLXlXGbq8v19e_obuf7tC69ubm9t_Xf_zE1pf31zdoftbe_ni90_o69WX26_3QV-P-WWssjOzLxm8Wt25ayAB2bpGYIgMtexvwe8V5YS4YHOWDbU3H5bQF_i8fQpONRFjNf5u32p53CNvV_I_vXClPf_hTTBdvXyZZr-Gt1UgQ6I1oY99lWPBS1vlGM_SdJrOkp4LK6-39TN2nrBFsiBncB7PMU7TxWwxP3s8j8l8CoymUZqmpIimESWznMR5OiMQpxE54-d2Cc2T2Cyi6XxSzPIim-eLKSQJTrMiSCOoCC8nxi1NhNyc2ZLi8ziKkyw-K0kOpbIvp2HceSocTFdn8tz6sbzdqCCNSq60GkRorks4d-vff1mskbzWXtXUwdtirlIUnHM6a2V5_vGa6A7D0zn-nwAAAP__L2qX6g">