<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=http://email.email.llvm.org/c/eJzlWltv47oR_jXOC2FDN-vykAfHSfZskUWCTboo-mJQFGXrRBJVkkri_fVnSEq2KDu76Vn1tEADJZFIavjNN8PhkGLKsv3lzIufdoVAcLEakZZzWkskeVs_z7xk5lzPnFX3N3TMRZqmK_H8oiZlm1E089dCZmWRLnYz_2b42gsrMjTzVjn0JIrvdCOR-H4UHV2ZGwQ_nMqW16jCZcmIaq7b-Vd90-sREPMoKK0EKotnigqQvWNtmaGUIopFUe4Ra2RRFd9xWlIkGcJI4qKcE-hj5q1R2kr0Wsgdmt_76vnu7tsXxFrZtFIgCcTM_LH6WFSmRGnU1qLY1jRDJau3Gu0KlPXRLHDOVne6Nq3YIY7f-mcFp9e7b8IaxMmhBXBzVvvXHeWgKfq0Xv8i7r6n36vGgjLq8JZxJFhFkeoWXEYzZmwA9NZMGlMMeEaioaTIC3W_RwC4VoYCh1MFRb3telugmxeoknyvypSpMnAc6HZ5BRcpMQAFlP6qaoVUwmfLa3WFDsoYFbrrV8aflRm1SdfqFUQ4FjslsQDZO4re4hClmDzTOjPNFFuookLgLT1lraMMS1wiyjnjysL6RgnsBKmyHBABn4C7oTxnvNIEGMvSElywxrIAvuDCplQUkoLu_BleO-iku3u4u1k93iDRphUwhcFLt0B3w7hU8ndSNtq-3i1cW9ChTReEVfBQli_9v3nD2e-USHgshGipgBuEQel-yCoyNDlaC8kxoYq6BjrijAAfAEuwlpti9SYWgpECS6iA-IAE4UUjFwbyowQhKGur5sChA1XJA2dbjiuE-batILQIM0JuYVjCX0DdAG18Tt-aknHKVZky27yLQLdpUfdlM-8KLjTfojlTIjDEIRCknX4h0LxSaqP5HCw8B2efi30tYYj510UtaYnmj1C3JWQuGSvJDoNg__qHSFRjUeMGYopE85wwqJhnBd7WTMiCQJd5zeaaQ7v43tcB0ZDXh0NX0QHFlOVQhhrMBeUIS6Q8keUoh-5NS0-1XDOw0ZbWlGu_MTW-qvna1rVy6AbsATxEt21NtGs9qIIvuAZHBviRcrWKZS0EPniyAHlRZ7bgnMB_wBC5Xn2aQ0v4hz7XAqxhunikJdV3nfy871v1EDibf7p5pW5NLIFI6CDnzYGf5TLxs9QNndzN0QMHk2iPeVJu9wihCJe_gYuVCnispgyYMSAsIVMlFmrO8VeO_j3Idm3ZS5rlDtJDQMcJsRfmZl1SXLfNfW2knQl_IC3-FaeEy3nzlxrBMcwDRM-C6CQ4yLwBxLXyna-UsBfK92sGfvomTY1h4-atAEQxsDUZyEBjsED6Ix6jBKbPMzw-mLhgHobQYB6FMTUhjwqBBTEYQoyzmOQ0nKQz19WyrM6WttGwm-T5gA8TiTd6TtiYOcGLj9VPr0UNkZXBqJl54eTkBBqOhTcc403jeLLOQJbVWTTsLKHUC8hyQA7EjieI9VTesVcKw7ybs_XTWiddQ6rOtFSN-pLPdc46Do8vPap04RtEIcY_V00JcW1Qd_0Nl60JccqmxgyTcOF5WlWLi9giPvcTGsTox-odiHhif46KKXUKfA3Z0imxdQr8NPCH7PcTAMwMV21RZpSbilIB_Vy_sGeVav-6ma8gfSdXkBc-92NpNdUYCnyt1XERAlOJPU_loRtS-hG137OnKgIV7EBw6qiH6HD8_xdRoDW0KHBHlqe5-yEKXgrIZE_GtipQmcOAgMmsp5BZ0O1pNo_iKCMfhm7BHiY70yPXwCzk9tybZw7OoneQf4aHYenRPSwNirIQcgNrC0gc1XJlPa7KqF5p6JIassyNWiKDqlbTAQ_KKXNIwqh1o5M0FWcHZfAG7cr-1_CY0TWhKbWlLFMGI1N6GL_nhGNTrnSw6KwpLHMesvvpvVEjtFRYjlQISOT9VAXo5b7-ggmssmmP1lLhpK7XYQGLILmIE0en-iPhpzm_QmjlOklGcgfW_yAK16zeV6wVqMawmG_0ajY55CQg84lNgRpkKRm9vPMgrRwJB1GQRsO8YCRZLdsGmM6COeXu1xOaWOOy7G8lNDjOwnyZDIDfPiis_QrzvwCZaEQW5GQEOXJz9wOQv-iFsW3wrmhKuArNEK7njODGQTiM9yXdYrLvlltH4CbR7cD_x0ErTBZoOzMIYuLCgmywI3dTFTAb6a2we70dA0AG1dfHvZGbegue36VDgya_UQyT8iPFnOzuTfi3MqdBU7Ux8onWP2llcs6fNLqDu3NNBhFPqgT1K83t4p711UhgR8LqME8JmZmati7-1dJNI-0ZkOPXTfPKYXbcwPxGcWW9lNEct6WaIUsq6U9e9G-QnusmWmfG2sqWG1hZFnGoE9P8jPZrYLKt-tFmNjKeOK5FqXey_l4XI_9YPT71ex8TTm-BxmcpYCVbJI-WOU2GCjyoPTlAY8N7pBW2VvLTruiXvsZhAQ3GTGPinRkDnZ91-zGUtJL2rhdPySP0bsGz0wSckXDpDuHdcmXOwzgY4psQmU91xxYyeysERxHGI-JMXyqdxDWh57l7X5Xp_NOnGpyF3sob0hSHS3DZYZw1OI9KvDCCTzGfKDndutHPNSgLdTzam6Mp-C8h7qZSe-zDyWrFOd6rYOqvyQ7z46rW5Oh2WZ_TTwfedTU2C3wyAo_VV6ee57X7pAf6QIXT3adTTbSPZLx4ofxsfjjaFE_cZZgstbKDKabfWd9wzVf3GVWna9CHbqK-IqlvN5u8VjiODmD67pxh7YI_VLjOxuPwrF2OhWZixKMNtsN82E83g-lqsyFvQLJ5SNV6Rs1NestHs2Q1VgUbyXGhPgmZ6pE4_VWwWzN29abL1TEErw4bYuadmReVuEozrD5CHNgCXbt9_r-x9LxJ3PFGvR_6H9qo_9rWjzin5d5i9MfWm3AvH2AO_Xn0wSFxoyiM0f-5a0xDdqa5tMi2N28guCQZfpds3S8-mRB7C1gRfPSiavBeDvuDpqvJN4x9onW0SAhGJJClm_-7JMCwFO8zALV3hbWT-OPvAQc3aXChPKT7RvVR0npfmp47RY3FnZ1IxXkATd7DeT24txKBMxnAe5z_tdxNw5omxWLNSvJikhA385BKNqbJEhwt0OqxT8yiPHBo6nqJk_posymLVMUxzOVm0D2Uwt-3ONyEwbws6vZtvq1bU0EWgi1Cs9COQIjVyziRglQLIyN_qvxHiTz0ad5xg1l_pEXd6EKUd2kvWNZYuDveok_M0LdCDcaMokjvvbWCovmLOpoiKEXFICvtOuoT0u6EF9UHZqJ-9u2P2lxkl36W-Am-wK3cMX75Cae8oOVX_FJQftHy8vLPH31Z-kvHvdhdekFC4pxmTuhBPE8pgTmSpCnNUtd13HB5UeKUluJSnTryvJq-Ii0C7mfL64tfR1Bceo7nOa7vup4T-stF7qXLMMrDLMg8h8bJDDwMnKlcKDkLxrcX_FKLTNutgEq1ZS6OlVjokwxUAwaEspAlvbwFAS3XB966828UqcxFHYrbD05m6cNY9jGsCw34UqP9A_ZOUpM>53501</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Failure to optimize very easy tail-call when calling malloc
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
GabrielRavier
</td>
</tr>
</table>
<pre>
(This is on current trunk)
```cpp
#include <stdlib.h>
void *f(size_t sz)
{
return malloc(sz);
}
```
seems like it should be easily optimizable to a tail-call, but with -O3, LLVM outputs this:
```asm
f(unsigned long): # @f(unsigned long)
push rax
call malloc
pop rcx
ret
```
whereas GCC outputs this:
```asm
f(unsigned long):
jmp malloc
```
For some reason LLVM seems to not like a tail-call specifically when it is calling malloc. Even trying to add `[[clang::musttail]]` does not work, with Clang crashing in the x86 backend with this message:
```
fatal error: error in backend: failed to perform tail call elimination on a call site marked musttail
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-trunk/bin/clang++ -g -o /app/output.s -mllvm --x86-asm-syntax=intel -S --gcc-toolchain=/opt/compiler-explorer/gcc-snapshot -fcolor-diagnostics -fno-crash-diagnostics -O3 <source>
1. <eof> parser at end of file
2. Code generation
3. Running pass 'Function Pass Manager' on module '<source>'.
4. Running pass 'X86 DAG->DAG Instruction Selection' on function '@_Z1fm'
#0 0x00005593db160f1f PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
#1 0x00005593db15edf0 llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x355edf0)
#2 0x00005593db09a4d2 llvm::CrashRecoveryContext::HandleExit(int) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x349a4d2)
#3 0x00005593db1579be llvm::sys::Process::Exit(int, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x35579be)
#4 0x00005593d8d8cfe6 (/opt/compiler-explorer/clang-trunk/bin/clang+++0x118cfe6)
#5 0x00005593db0a19ff llvm::report_fatal_error(llvm::Twine const&, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x34a19ff)
#6 0x00005593db0a1b88 (/opt/compiler-explorer/clang-trunk/bin/clang+++0x34a1b88)
#7 0x00005593d9ee24c5 llvm::X86TargetLowering::LowerCall(llvm::TargetLowering::CallLoweringInfo&, llvm::SmallVectorImpl<llvm::SDValue>&) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x22e24c5)
#8 0x00005593dbf39e48 llvm::TargetLowering::LowerCallTo(llvm::TargetLowering::CallLoweringInfo&) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4339e48)
#9 0x00005593dbf43b43 llvm::SelectionDAGBuilder::lowerInvokable(llvm::TargetLowering::CallLoweringInfo&, llvm::BasicBlock const*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4343b43)
#10 0x00005593dbf616ee llvm::SelectionDAGBuilder::LowerCallTo(llvm::CallBase const&, llvm::SDValue, bool, bool, llvm::BasicBlock const*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x43616ee)
#11 0x00005593dbf4ef1e llvm::SelectionDAGBuilder::visitCall(llvm::CallInst const&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x434ef1e)
#12 0x00005593dbf787dc llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x43787dc)
#13 0x00005593dbfd0ad7 llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void>, false, true>, llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void>, false, true>, bool&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x43d0ad7)
#14 0x00005593dbfd2aac llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x43d2aac)
#15 0x00005593dbfd4c72 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (.part.890) SelectionDAGISel.cpp:0:0
#16 0x00005593d9dcf060 (anonymous namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) X86ISelDAGToDAG.cpp:0:0
#17 0x00005593da474b78 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x2874b78)
#18 0x00005593da8d6f59 llvm::FPPassManager::runOnFunction(llvm::Function&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x2cd6f59)
#19 0x00005593da8d71f1 llvm::FPPassManager::runOnModule(llvm::Module&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x2cd71f1)
#20 0x00005593da8d8467 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x2cd8467)
#21 0x00005593db48c134 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream> >) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x388c134)
#22 0x00005593dc0e08ef clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x44e08ef)
#23 0x00005593dcf75fe9 clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5375fe9)
#24 0x00005593dc0e0ac2 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x44e0ac2)
#25 0x00005593dbadc651 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3edc651)
#26 0x00005593dba77aa2 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3e77aa2)
#27 0x00005593dbba6523 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3fa6523)
#28 0x00005593d8d8eb24 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x118eb24)
#29 0x00005593d8d8aadd ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
#30 0x00005593db915695 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#31 0x00005593db09a363 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x349a363)
#32 0x00005593db917768 clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, bool*) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3d17768)
#33 0x00005593db8eb9da clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3ceb9da)
#34 0x00005593db8ec51f clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3cec51f)
#35 0x00005593db8f4ec5 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3cf4ec5)
#36 0x00005593d8c9c1d2 main (/opt/compiler-explorer/clang-trunk/bin/clang+++0x109c1d2)
#37 0x00007f40eb1290b3 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x270b3)
#38 0x00005593d8d8a65a _start (/opt/compiler-explorer/clang-trunk/bin/clang+++0x118a65a)
clang-14: error: clang frontend command failed with exit code 70 (use -v to see invocation)
Compiler returned: 70
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzlWltv2zoS_jXOC2FDN-vykAfHSXq6SJGgyRaLfTEoirJ1Iolakkri_vozJCVblJ02e6o9u8AWbiuR1Mw33wyHQ0opy_aXMy9-2hUCwY_ViLSc01oiydv6eeYlM-d65qy6f0PH_EjTdC2eX9SkbDOKZv5ayKws0sVu5t8MH3thRYZm3ioHTaL4TjcSie9H0dGVuUDwh1PZ8hpVuCwZUcP1OP-qH3o9AmJuBaWVQGXxTFEBsnesLTOUUkSxKMo9Yo0squI7TkuKJEMYSVyUcwI6Zt4apa1Er4Xcofm9r-7v7r59QayVTSsFkkDMzB-bj0VlWpRFbS2KbU0zVLJ6q9GuwFgfzQLnbHdna9OKHeL4rb9XcHq7-yGsQZwcRgA3Z61_3VEOlqJP6_Uv4u41_V41FpSRwlvGkWAVRUothIxmzPgA6K2ZNK4Y8IxEQ0mRF-p6jwBwrRwFAacainrbaVugmxfoknyv2pSrMggcULu8gh8pMQAFlP6qaoVUwmfLa_ULHZQxKrTqV8aflRu1S9fqEUQ4FjslsQDZO4re4hClmDzTOjPDFFuookLgLT1lraMMS1wiyjnjysP6QgnsBKm2HBABn4C7oTxnvNIEGM_SEkKwxrIAvuCHTasoJAXb-TM8drBJq3u4u1k93iDRphUwhSFKt0B3w7hU8ndSNtq_3i38tmBDmy4Iq-CmLF_6_-YNZ79TIuG2EKKlAi4QBqP7KavI0ORoKyTHhCrqGlDEGQE-AJZgLTfN6kksBCMFltAB-QEJwotGLgzkRwlCUNZWzYFDB7qSB862HFcI821bQWoRZobcwrSEfwF1A7TxOX1rSsYpV23KbfMuA92mRd23zbwr-KH5Fs2ZEoEhD4EgHfQLgeaVMhvN5-DhOQT7XOxrCVPMvy5qSUs0f4S-LSFzyVhJdhgE-9c_RKIGixo3kFMkmueEQcc8K_C2ZkIWBFTmNZtrDu3me18nRENenw5dRQc0U5ZDG2owF5QjLJGKRJajHNSbkZ4auWbgoy2tKddxY3p81fO1rWsV0A34A3iIbtua6NB6UA1fcA2BDPAjFWoVy1pIfHBnAfKizm3BOYH_gClyvfo0h5HwH_pcC_CGUfFIS6qvOvl5r1tpCJzNP928Upcml0AmdJDz5sCf5TLxs9QNndzN0QMHl-iIeVJh9wipCJe_QYiVCnislgxYMSAtIdMlFmrN8VeO_nuQ7dqylzTLHaSngM4TYi_MxbqkuG6b-9pIO5P-QFr8K0EJP-fNX2oExzQPED0LopPgIPMGENcqdr5Swl4o368ZxOmbND2GjZu3AhDFwNZkIAONwQLpj3iMElg-z_D4YPKCuRlCg3UU5tSEPCoEFsRgCDHOYpLTcBJlrqtlWcqWttOwm-T5gA-TiTd6TdiYNcGLj91Pr0UNmZXBrJl54eTkBBqOhTcc403jeDJlIMtSFg2VJZR6AVkOyIHc8QS5nso79kphmndrtr5b66JrSNWZkWpQ3_K5zlnH4fGhR1UufIMsxPjnqikhrw36rr_hsjUpTvnUuGESLjxPm2pxEVvE535Cgxj92LwDEU_sz1ExpU2BryFbNiW2TYGfBv6Q_X4BgJXhqi3KjHLTUSqgn-sX9qxK7V938xWU7-QK6sLnfi6tpppDga-tOm5CYCmx16k8dENKP2L2e_5UTWCCnQhOA_WQHY7__0UUaAstCtyR52nufoiClwIq2ZO5rRpU5TAgYDLvKWQWdHuZzaM4ysiHoVuwh8XO9Mg1MAu5vfbmmYOz6B3kn-Fm2HoMD8uCoiyE3MDeAgpHtV1Zj7syqncauqWGKnOjtshgqjV0wIMKyhyKMGpd6CJN5dlBGzxBu7b_NTxmdk3oSu0py5XByJUexu8F4diVK50sOm8Ky52H6n76aNQILROWIxMCEnk_NQG03NdfMIFdNu3RWiac9PU2LGATJBdx4uhSfyT8tOZXCK1aJ8lI7sD-H0ThmtX7irUC1Rg2843ezSaHmgRkPrEpUIMsJaOXdx6kVSPhIArSaFgXjCSrbdsA01kwp9z9ekETa1yW_62CBsdZmC-TAfDbB4W132H-FyATjciCnIwgR27ufgDyF70xth3eNU0JV6EZwvWcEdw4CIf5vqRbTPbddusI3BS6Hfj_OGiFyQJtVwZBTFzYkA1O5G6qAlYjfRR2r49jAMig-_p4NnJTbyHyu3JoMOQ3imFRfqSYk929Sf9W5TQYqg5GPtH6J6NMzfmTQXdwdW7IIONJVaB-pbnd3LO-GgnsSFgd1ikhM9PT1sW_WrpppL0Ccvy6aV45rI4bWN8orqyHMprjtlQrZEkl_cmD_g3Sa91E-8xYe9kKA6vKIg51YpqfsX4NTLZVP9vMQcYTx7Uo9UnW3-tiFB-rx6f-7GPC5S3Q-CwDrGKL5NEyp8nQgAd1JgdobHiPtMLWTn7aHf3S1zgsoMGYaUy8M3Ogi7PuPIaSVtI-9OIpeQTtFjy7TMAZCZfuEN4tV-48zIMhvgmR-VQrtpDZRyE4ijAeEWd0qXIS14Se5-59U6aLT59qcBZ6q25IUxwuIWSHedbgPBrxwgg-xXxi5HT7Rj_XoCzU8ehsjqYQv4S4m0qdsQ8XqxXneK-Sqb8mO8yPu1pTo9ttfU0_HXjX1dgs8MkIPFZvnXqe1-6TnugDE05Pn04t0TGS8eKF8rP14ehQPHGXYbLUxg6WmP5kfcM1X91rVF2ugQ49RL1FUu9uNnmtcBwDwOjugmHtQjxUuM7G8_CsX46NZmHEowO2w3rYLzeD5WqzIW9AsrlJ1X5GrU36yEezZA1WDRvJcaFeCZnukTj9VrDbM3b9RuXqmIJXhwMx88zMi0pcpRlWLyEObIGt3Tn_31h63iXu-KDeD_0PHdR_betHnNNybzH6Y-9NeJYPMIfxPHrhkLhRFMbo_zw0piE701xaZNuHN5Bckgy_S7bWi08WxN4DVgYfPagGvFfD_mDoavIDY59oGy0SghEJZOnm_y4JMC3F-wxA711hnST--H3AIUwaXKgI6d5RfZS0Ppam505RY3FnF1JxHsCQ93BeD66tQuBMBfAe538td9OwpkmxWLOKvJgkxM08pIqNaaoERwu0NPaFWZQHDk1dL3FSH202ZZGqPIa53AzUQyv8-xaHmzCYl0Xdvs23dWs6yEKwRWg22hEIsbSMCykotTAy8qeqf5TIg07zjBvM-k9a1IVuRHlX9oJnjYe7z1v0FzP0rVCTMaMo0mdvraBo_qI-TRGUomJQlXaK-oK0-8KL6g9mon717T-1ucgu_SzxE3whC1nSy1tQ2XL91Vb3ERdFavlVX3btB58X6S-K7G-JLlpeXv7572SW_tJxL3aXsbvEaRomHvGjOI2IG6TwS5wwpjQkIb4ocUpLcak-UfK8mr4iLQKuZ8vri-LSczzPcX3X9ZzQXy5yL12GUR5mQeY5NE5mEEwQN-VC4Vgwvr3glxpS2m4FdKrTcXHsxEJ_tEC1OpCPW7lj_PITTnlBy6_4paD8QgO41Ab8ARJ5PNQ">