<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/149919>149919</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[SPIR-V] Unimplemented implicit down-cast error for `AddUint64` vec2 case
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
kmpeng
</td>
</tr>
</table>
<pre>
Code that reproduces the error:
```hlsl
// RUN: %clang-dxc -spirv -fspv-target-env=vulkan1.3 -T cs_6_5 %s
StructuredBuffer<uint4> In : register(t0);
RWStructuredBuffer<uint4> Out : register(u1);
[numthreads(1,1,1)]
void main() {
Out[1].xy = AddUint64(In[1].xy, In[1].xy);
}
```
<br>
The crash is happening in `SPIRVLegalizePointerCast::transformLoad()`
https://github.com/llvm/llvm-project/blob/b66084acd9f6052ed9061ef4ec39e7c8a176f01d/llvm/lib/Target/SPIRV/SPIRVLegalizePointerCast.cpp#L148
on the load instruction `%HighA.i = load i32, ptr addrspace(11) %12, align 4` because `FromTy = i8` and `ToTy = i32`, which means `SAT`, `SVT`, `SST`, `DVT` are all `nullptr`.
<br>
Relevant IR dump:
```llvm
entry:
%0 = call i32 (...) @llvm.spv.const.composite.i32(i8 73, i8 110, i8 0)
%1 = call i32 @llvm.spv.track.constant.i32.i32(i32 %0, metadata [3 x i8] c"In\00")
call void @llvm.spv.assign.type.i32(i32 %1, metadata [3 x i8] poison)
call void @llvm.spv.init.global.p0.i32(ptr @.str, i32 %1)
%2 = call i32 (...) @llvm.spv.const.composite.i32(i8 79, i8 117, i8 116, i8 0)
%3 = call i32 @llvm.spv.track.constant.i32.i32(i32 %2, metadata [4 x i8] c"Out\00")
call void @llvm.spv.assign.type.i32(i32 %3, metadata [4 x i8] poison)
call void @llvm.spv.init.global.p0.i32(ptr @.str.2, i32 %3)
%"reg2mem alloca point" = call i32 @llvm.spv.bitcast.i32.i32(i32 0)
call void @llvm.spv.assign.name.i32(i32 %"reg2mem alloca point", metadata !3)
call void @llvm.spv.assign.type.i32(i32 %"reg2mem alloca point", metadata i32 poison)
%4 = tail call target("spirv.VulkanBuffer", [0 x <4 x i32>], 12, 0) @llvm.spv.resource.handlefrombinding.tspirv.VulkanBuffer_a0v4i32_12_0t(i32 0, i32 0, i32 1, i32 0, i1 false, ptr nonnull @.str)
call void @llvm.spv.assign.type.tspirv.VulkanBuffer_a0v4i32_12_0t(target("spirv.VulkanBuffer", [0 x <4 x i32>], 12, 0) %4, metadata target("spirv.VulkanBuffer", [0 x <4 x i32>], 12, 0) poison)
%5 = tail call target("spirv.VulkanBuffer", [0 x <4 x i32>], 12, 1) @llvm.spv.resource.handlefrombinding.tspirv.VulkanBuffer_a0v4i32_12_1t(i32 0, i32 1, i32 1, i32 0, i1 false, ptr nonnull @.str.2)
call void @llvm.spv.assign.type.tspirv.VulkanBuffer_a0v4i32_12_1t(target("spirv.VulkanBuffer", [0 x <4 x i32>], 12, 1) %5, metadata target("spirv.VulkanBuffer", [0 x <4 x i32>], 12, 1) poison)
%6 = tail call noundef align 16 dereferenceable(16) ptr addrspace(11) @llvm.spv.resource.getpointer.p11.tspirv.VulkanBuffer_a0v4i32_12_0t(target("spirv.VulkanBuffer", [0 x <4 x i32>], 12, 0) %4, i32 1)
call void @llvm.spv.assign.ptr.type.p11(ptr addrspace(11) %6, metadata <4 x i32> poison, i32 11)
%7 = call ptr addrspace(11) @llvm.spv.ptrcast.p11.p11(ptr addrspace(11) %6, metadata i32 poison, i32 11)
call void @llvm.spv.assign.ptr.type.p11(ptr addrspace(11) %7, metadata i32 poison, i32 11)
%8 = call ptr addrspace(11) (i1, ptr addrspace(11), ...) @llvm.spv.gep.p11.p11(i1 false, ptr addrspace(11) %6, i32 0, i32 0)
call void @llvm.spv.assign.ptr.type.p11(ptr addrspace(11) %8, metadata i32 poison, i32 11)
%9 = load i32, ptr addrspace(11) %8, align 16
call void @llvm.spv.assign.type.i32(i32 %9, metadata i32 poison)
%LowA.i = load i32, ptr addrspace(11) %7, align 16
call void @llvm.spv.assign.name.i32(i32 %9, metadata !4)
call void @llvm.spv.assign.type.i32(i32 %9, metadata i32 poison)
%10 = call ptr addrspace(11) @llvm.spv.ptrcast.p11.p11(ptr addrspace(11) %6, metadata i8 poison, i32 11)
call void @llvm.spv.assign.ptr.type.p11(ptr addrspace(11) %6, metadata i8 poison, i32 11)
%11 = call ptr addrspace(11) (i1, ptr addrspace(11), ...) @llvm.spv.gep.p11.p11(i1 true, ptr addrspace(11) %6, i64 4)
call void @llvm.spv.assign.ptr.type.p11(ptr addrspace(11) %11, metadata i8 poison, i32 11)
%12 = call ptr addrspace(11) @llvm.spv.ptrcast.p11.p11(ptr addrspace(11) %11, metadata i32 poison, i32 11)
call void @llvm.spv.assign.ptr.type.p11(ptr addrspace(11) %12, metadata i32 poison, i32 11)
%HighA.i = load i32, ptr addrspace(11) %12, align 4
...
```
Crash stack:
```
Stack dump:
0. Program arguments: /home/kaitlinpeng/llvm-build-debug/bin/clang-dxc -spirv -fspv-target-env=vulkan1.3 -T cs_6_5 clang/test/CodeGenHLSL/builtins/TestFile.hlsl
1. <eof> parser at end of file
2. Code generation
3. Running pass 'Function Pass Manager' on module 'clang/test/CodeGenHLSL/builtins/TestFile.hlsl'.
4. Running pass 'SPIRV legalize bitcast pass' on function '@main'
Process 64581 stopped and restarted: thread 1 received signal: SIGCHLD
#0 0x000055555d3a4211 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/kaitlinpeng/llvm-project/llvm/lib/Support/Unix/Signals.inc:834:11
#1 0x000055555d3a479b PrintStackTraceSignalHandler(void*) /home/kaitlinpeng/llvm-project/llvm/lib/Support/Unix/Signals.inc:918:1
#2 0x000055555d3a24e6 llvm::sys::RunSignalHandlers() /home/kaitlinpeng/llvm-project/llvm/lib/Support/Signals.cpp:104:5
#3 0x000055555d3a3a8e llvm::sys::CleanupOnSignal(unsigned long) /home/kaitlinpeng/llvm-project/llvm/lib/Support/Unix/Signals.inc:374:1
#4 0x000055555d2c6627 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) /home/kaitlinpeng/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:0:7
#5 0x000055555d2c6a15 CrashRecoverySignalHandler(int) /home/kaitlinpeng/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:391:1
#6 0x00007ffff7845330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#7 0x00007ffff789eb2c pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x9eb2c)
#8 0x00007ffff784527e raise (/lib/x86_64-linux-gnu/libc.so.6+0x4527e)
#9 0x00007ffff78288ff abort (/lib/x86_64-linux-gnu/libc.so.6+0x288ff)
#10 0x000055555d2d16a0 llvm::install_out_of_memory_new_handler() /home/kaitlinpeng/llvm-project/llvm/lib/Support/ErrorHandling.cpp:225:0
#11 0x000055555b26c296 (anonymous namespace)::SPIRVLegalizePointerCast::transformLoad(llvm::IRBuilder<llvm::ConstantFolder, llvm::IRBuilderDefaultInserter>&, llvm::LoadInst*, llvm::Value*, llvm::Value*) /home/kaitlinpeng/llvm-project/llvm/lib/Target/SPIRV/SPIRVLegalizePointerCast.cpp:0:7
#12 0x000055555b26be47 (anonymous namespace)::SPIRVLegalizePointerCast::legalizePointerCast(llvm::IntrinsicInst*) /home/kaitlinpeng/llvm-project/llvm/lib/Target/SPIRV/SPIRVLegalizePointerCast.cpp:284:9
#13 0x000055555b26bb64 (anonymous namespace)::SPIRVLegalizePointerCast::runOnFunction(llvm::Function&) /home/kaitlinpeng/llvm-project/llvm/lib/Target/SPIRV/SPIRVLegalizePointerCast.cpp:338:28
#14 0x000055555cb30bda llvm::FPPassManager::runOnFunction(llvm::Function&) /home/kaitlinpeng/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1398:23
#15 0x000055555cb355b2 llvm::FPPassManager::runOnModule(llvm::Module&) /home/kaitlinpeng/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1444:16
#16 0x000055555cb3148b (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /home/kaitlinpeng/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1513:23
#17 0x000055555cb3100a llvm::legacy::PassManagerImpl::run(llvm::Module&) /home/kaitlinpeng/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:531:16
#18 0x000055555cb35891 llvm::legacy::PassManager::run(llvm::Module&) /home/kaitlinpeng/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1640:3
#19 0x000055555e22ad04 (anonymous namespace)::EmitAssemblyHelper::RunCodegenPipeline(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>&, std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>>&) /home/kaitlinpeng/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1260:19
#20 0x000055555e2246fe (anonymous namespace)::EmitAssemblyHelper::emitAssembly(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) /home/kaitlinpeng/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1286:7
#21 0x000055555e223be8 clang::emitBackendOutput(clang::CompilerInstance&, clang::CodeGenOptions&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) /home/kaitlinpeng/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1449:3
#22 0x000055555e24bc1f clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) /home/kaitlinpeng/llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:316:3
#23 0x0000555561117978 clang::ParseAST(clang::Sema&, bool, bool) /home/kaitlinpeng/llvm-project/clang/lib/Parse/ParseAST.cpp:190:12
#24 0x000055555eb47a83 clang::ASTFrontendAction::ExecuteAction() /home/kaitlinpeng/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1344:1
#25 0x000055555e24fb70 clang::CodeGenAction::ExecuteAction() /home/kaitlinpeng/llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:1112:5
#26 0x000055555eb47466 clang::FrontendAction::Execute() /home/kaitlinpeng/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1226:7
#27 0x000055555ea6101e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /home/kaitlinpeng/llvm-project/clang/lib/Frontend/CompilerInstance.cpp:1056:23
#28 0x000055555ed4b647 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /home/kaitlinpeng/llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:299:8
#29 0x000055555b0a1a78 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /home/kaitlinpeng/llvm-project/clang/tools/driver/cc1_main.cpp:297:13
#30 0x000055555b094792 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) /home/kaitlinpeng/llvm-project/clang/tools/driver/driver.cpp:223:5
#31 0x000055555b0952d0 clang_main(int, char**, llvm::ToolContext const&)::$_0::operator()(llvm::SmallVectorImpl<char const*>&) const /home/kaitlinpeng/llvm-project/clang/tools/driver/driver.cpp:368:9
#32 0x000055555b09529d int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<clang_main(int, char**, llvm::ToolContext const&)::$_0>(long, llvm::SmallVectorImpl<char const*>&) /home/kaitlinpeng/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:5
#33 0x000055555e8bef11 llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::operator()(llvm::SmallVectorImpl<char const*>&) const /home/kaitlinpeng/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:5
#34 0x000055555e8bbe88 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::$_0::operator()() const /home/kaitlinpeng/llvm-project/clang/lib/Driver/Job.cpp:436:34
#35 0x000055555e8bbe55 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::$_0>(long) /home/kaitlinpeng/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:5
#36 0x000055555beff6d9 llvm::function_ref<void ()>::operator()() const /home/kaitlinpeng/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:5
#37 0x000055555d2c641a llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) /home/kaitlinpeng/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:427:3
#38 0x000055555e8bb7eb clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const /home/kaitlinpeng/llvm-project/clang/lib/Driver/Job.cpp:436:7
#39 0x000055555e8506d3 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const /home/kaitlinpeng/llvm-project/clang/lib/Driver/Compilation.cpp:196:15
#40 0x000055555e8508d7 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const /home/kaitlinpeng/llvm-project/clang/lib/Driver/Compilation.cpp:251:13
#41 0x000055555e86d822 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) /home/kaitlinpeng/llvm-project/clang/lib/Driver/Driver.cpp:2245:7
#42 0x000055555b094268 clang_main(int, char**, llvm::ToolContext const&) /home/kaitlinpeng/llvm-project/clang/tools/driver/driver.cpp:406:9
#43 0x000055555b0c8b05 main /home/kaitlinpeng/llvm-build-debug/tools/clang/tools/driver/clang-driver.cpp:17:3
#44 0x00007ffff782a1ca (/lib/x86_64-linux-gnu/libc.so.6+0x2a1ca)
#45 0x00007ffff782a28b __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28b)
#46 0x000055555b092f65 _start (/home/kaitlinpeng/llvm-build-debug/bin/clang-dxc+0x5b3ef65)
clang-dxc: error: clang frontend command failed with exit code 134 (use -v to see invocation)
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsXF1T47yS_jXiRkXKkr8vuAhhcoa35t2hgJm9TMl2O9HiSF5ZZmB__ZZkO_4gQMKEOafqnCmm4khW6-mnW61W28Cqiq8FwAXyL5F_dcZqvZHq4mFbglifJTJ7vljIDLDeMI0VlEpmdQoV1hvAoJRUyJ0jZ44Cp_nZFFVhvtMlokt8--O_kDvHiPppwcT6PHtK8XlVcvWIz_OqfDzXTK1Bn4N4RO7VY108MEFmLj6_x2m1Cla-GVoZec78Tqs61bWC7LLOc1DIXdRcaA-5X_C1wGYeBWteaVCIRtpBNEbuJXLmt__91tDvtZ6OrclurPnxL0W91RsFLKsQjQiii_Z_jPwr5MwfJc_wlnGBaIRojFFohmIjGvmXBPlXs6dnjNwrPM-yH1zowEM0uhZ9J6ILPP7ezR9eDdk11-4iUcj90oC73wBOFas2mFd4w8oSBBdrzAVGgXN3c3378xusWcH_D24kFxrUglXamMyda8VElUu1_SZZ1iBvZthoXVbmHmvDNdebOpmlcovosigeu4_zUsn_gVQjukwKmZiPIHAij6VZnAeOTyGLnYBA7kHqxhCmESNhkDskG8jhZty99QFElxZv97kH9ywtS0Tdb8SLkDOXwjphIVmGuaisibm0iiPqf-XrzXzGLevNLS41LJdaYZZlqipZCsaaxFqM-sR2s4KvBfZQ4OAEUlZXYOQtldzeNxbkkeljIjPt97JrdamddoF_bXi6wVtgorImmN-3HebLz-GXu8GXK9uDmQLMisK0iLooSq1Q4MzGRr-FAh6Z0Pj6Fmf1tpysP8usMweh1XPThY12joWZGuHcpRjRaDabWc09O2RWlY-zVApDstyWsuIaZpayiEc4dA1OHmFCnPbKLq9WOJkIH4jUiqUPjWAmtJHYSbUofCtuC5plTDOM_EsXPxmO_SucIkrNmlg4DqK0m87OYhfccJomis30cwlj-eR1-aXklRRvy-WC69m6kAkrZqXTijYuhDxnVmllydjNtCOE_h7b8Y7tcHcVTHhH1Hc_Tjud0uKNaLeB67d4d1-f4BS8z-iAebenBFGqYE23sDXrSKbMzCY0olOLDOZKuE5NcBmT5BykuGDbieKvIxgzQkkH-0hmD5zA3D1mGlHfsyxoxotmVt1G3ghRanfl2U-7Bbe7ZCMS-ZcOfsLIXVgbutTEIf_KdDUx05l6toJK1iqF2YaJrIBcyW3CRcbFeqZfTrNizqPHXboidOXonv7GvrsLMm4hOGdFBV1IF1KYiNmvy0O99hBAp6SJ-t7ITieU_cLc_qeYm5zO3OSFucmHzD07IkwdAumURFHf_wSDk70GDyYGF7IWGeRtVkMCnIGCHBSIFFhS2PwnsJL2Z0X7jLwGXTYp2awk5J-1floXOcDopVaN4UujVPRq_heM4_MQxo7odt7hVh_2G8v7JJZa2a3GEHcUnGE0n4I4ifbhwdMh6kfv6kwjTl7Ntk3HnnxoDeWAmOmKf52k6XZxQlaiY1iJDz9rRP1RgwQfSa_i9_f6b_LXUeef8DhMLzOfeJrgeB_MHQ9Qjjh_ZtlFn7vqDp7NqEz-zKrTqj5k0QUePsy-h3JByDFk0E-y_xTFZ8dd8nrWvkft3yxqOHPrAZN6UvezsGWkSrP0YVJTsMU3lj4M6g3ODNt_N0quFdtiptb1FoSumnLfciO3gOjygXFdcFGCWHdlo6TmRXaeQVKbpoQLRJcfLQ7acYguNVQa0eVCZvAPEF-_3X0zomteaC4qRJf3UOklL2DWVidJix65C5C53eGZqkBhpjGIDMsc57wA5Mxpe6etga5BgGKaS4Gcudv23NbCltxKVlUY0XBZi6YOdWMa_maCrU2OE2Ip8FZmdQHmro8hp6GxnvfKzLZshou2bobbc63tbufPO2yIhshzmpJliJz5jZIpVBUOPD8iuNKyLCGzVS4FlWZKQ2YM2xRBMcEKUuCPkGHj7KwwfXfX_1h8_XbVHMRdBztPjuM4vvmXucyjhGBbm7K1x-q5ai5uFBfaOte9any3v0mxXytZaQVsi2gTdcw5N37bv_qy5KjIeFeXpVSm-YfgT6bBIq9mXKTInUeuh9w5IS18MoUfxgmeYG0EfLVnHoVoZEIBovNPAhiTyABs8dEJPupBsI_e21qMYFZdhfq3AHbI0tJEA-IY6vwWmTtB5rII9iFbFMBEXX5v8SEa1cI-ichwIQ2WT2HRDb0Bi94IK02DgIZmF2VCiuetrCtsspw2qMYtbhMlbyGVj6CeF1JoeNLX27Joehua7T1mNzXuusAnVmwfgtYUDnLnYaucP1WOER-Pxk4d-CSr6w10bkwG5ActvjDP8zyMPN91HWzds5X5FAWrwDsvuKifzteibjrSWSVnAaKXzpMdsqv9ueFYYAwJTXHZhKzVAy-K46Tb8b30aAqXhoAV4xUcC5qG0IuNx2JpFOU5ZolU-jixdmAj1oSvcfilGQmYM1iFXFSaFcVK1nol89UWtlI9rwT8Wm123vD7rvBFKamse3Gxbn2AUt_6aQNzFGYTGqQ0Dt5bgMc91Op1vr69NJmHffjXty7aEvlS2i66wHtGXEHO6kJfiwqUBvscptmP-nvNdNfC7OXzccdPVph8-tXWj5F83COzPjAY0umE9AS8d6Pe26QXezpG1AutuKh4umPoz2hNIxPtuzXhTvVOAu_39Fa1-C66fG-kcd8Y_CllXTeyKrfajva2NHGdJGMDB1zemPS0y04_X5vrW0SXBnz6PJi4yyDc2GJ3W-z-BLsx1wHY_7bZ9Qh51_RJuD3PphNBizuY4CZelLznYX__yyjjE3dohHCqjOMMHaiwYtokvhfWp0KqFn8Qve-SoSWiqQdFMXkf_D8DOAk8E5w71uMhcKCUZc67QerLlut5VcE2KZ6_QlF2itzWwpwr1yBueAkFF8admoOn7b9k6QOIbN6u7QWudNb01IL_bw2rUo83S3MgK38prmHVHcsGg7Jml1xlUICGdwa6X_pd9L1p76Usvte6rO1J-NA5J6P6CQ82YndGb6zYHtERXba8_dC86IxIA2NE0m411JlY0Qty-KgVYdD-L2e_BX6Jx6RU9dYkU8ds9MeQHQV9OkPJhGs3gWiIyvDXCmncYUziQm5LXoC6tnlgCq1Pju6wWL6XhubqReZ3Z3Kb9S3k4-Yuasz3k9QbbZwm1RV_hFvIF0LfTKz3mLdHZ-PPd8-Vhm1rg38Tu3te3EdKSsd295KU5G-hGpzP780hobCFvB-CTxxifnffHltPEy3aq8bgXa5GgoEmw8Q0IISEcTjy4BumKpjf3Y9x3sGWtc6YSFn0nx9EbGfpPud39x3rsY1stMU6Sish8UIWuXjM3lIZ-nYu3gS3J0hrDZ3XH3O4HKPshA8uR8wS1-sqPAauP3GSPAmdPWv7U6C-7QKEENqWzQzQYMqrFwRDoG-Q-ql0UjqMtaOcEFhAHAL4rWC6l9HX1fqNBTfQZIpiV6f0g0GCS0c5ImReEnjhUJkWdi_tUabspQovN5CPh79OiXu7kJevIujOt7EJiO2Jj45Sx8RhhJkwkpJV-2ZyH9bnSrFns2O5i3TDFLbvCRrcbWgftdEFPr6yvXu8IWVRIbrMFH80O8Oyw7PTILSLtlFh_NQgcWIvjCnuWFiQhpaBIndbVhQ_IdWyPXjs0WeyXRsZbXzv7vuI071QrLnYVbncfm2PHyYkTuzTrA1CnWnaQrEBb3meH4S56UTUWznNpSxBMS3b6t1HmIqbltOy4QZRX4YZP7qwbMQZ5kIP9O0eU62U9VHT-SFlbLZiBqSsKBKWPqxyYW4-MfVfDDhb2h_lhYcyftyRkou0qDPoG-ZX94gu7-6_dVUaVnx50opVsw1y514wcMRRBQyiBPLRQ7mT0_7H_fFjHAXxgCNvwlEC0SgZa128Cf0LspDbLRPZdEPeG2t3GbcsGwyjXLs_R-xy7N2A1Sp9eiKk-ZKwiqcmH-cG06Lx3MHNpmGlFeO66ron4pr3ho1h-n5zy7xPIuc77t-PMh8OG82md9UFjb9k0kYMz7X5sdfaxH9hE99v3rx41Xmb9zIahG9Egf_YdBi-_mQsGiW8CeR5kMXHmfP3_fAE4SKcPmX1yLBKuu9p6K44d8dysDWdQ9X-zIezHg37I6kbTVdcCMm_dRQ8cWhrD1TuuNwb-U6Qua_ybI8B7MX5ryN_dCqZDDQ3DPKXxRtzDG-djwoMp6FioMauxBDY5w8NJ54z5STKwmM5-Usm1euE_CWTb7zSI0LeSk12LlMyrprM6BgOh7Xuz2WS-mRwnPLGpdEoyCJKX0N9NbgenTv3HHlfs8AfZPKDB-wdd1fj45rn94vSm55QPBpEpzivnfZU5TlBf6ryxg-3nTRKHN_-SvIxL2N2E75-em_e0xzCIINtw_Mmb7MwkrIj32MxQ3bvsXj-VCCNErxamTEr-17iqtXxqClolPRTBBNr0zzwcSO8lfvBd1ntZH7iQh74zXR9lzvf_fJ841k4b0s_OG2dPme8gAz_4nqD4YkbT8oAE9c-DqwrwOePWEtcAWA-KE3Fwxd3z7ILN4vdmJ3BBQl9l7gBceOzzQU1jYGbkow5bpx6HovCLHU8CEInoQ6c8QvqUN8JKaGU-G4884gfRqFHnZz5bhY5yHNgy3gxs28-S7U-41VVwwXx4pjEZwVLoKjsHxWgVMAvbHsRpci_OlMXLXvrCnlOwStd9WI014X9awR3N9e35z-Rf4V_CL4tC9iC0JBhc81TrnEmf4lz-4qr5RLnUmEUOP3v2AcOfoSU4pRVcFar4uLo32y3qM0SaNV6vKD_HwAA__-KVvPg">