<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/69110>69110</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
opt, llc and clang++ version 18: program crashes when optimizing bitcode file
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
bluefish43
</td>
</tr>
</table>
<pre>
The `opt` utlity crashes when optimizing the bitcode file:
```
$ target/debug/apolloc build main.ap -o main.ll --output-type=llvm-ir -O3 -v
VERBOSE Reading input file `main.ap`
VERBOSE Creating directory `./tmp`
VERBOSE Writing output bitcode to `./tmp/main.bc`
VERBOSE Executing command `opt ./tmp/main.bc -o ./tmp/opt.bc -O3`
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: opt ./tmp/main.bc -o ./tmp/opt.bc -O3
#0 0x00007f473ea3a446 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xd2c446)
#1 0x00007f473ea38400 llvm::sys::RunSignalHandlers() (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xd2a400)
#2 0x00007f473ea3ab0b (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xd2cb0b)
#3 0x00007f473d7e2520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x00007f473ebccc07 llvm::StructType::getTypeAtIndex(llvm::Value const*) const (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xebec07)
#5 0x00007f473f46801e (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x175a01e)
#6 0x00007f473f460e77 (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x1752e77)
#7 0x00007f473f4615f8 (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x17535f8)
#8 0x00007f473eba3c87 llvm::Module::materializeAll() (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xe95c87)
#9 0x00007f473f458725 llvm::BitcodeModule::getModuleImpl(llvm::LLVMContext&, bool, bool, bool, llvm::ParserCallbacks) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x174a725)
#10 0x00007f473f45f04a llvm::BitcodeModule::parseModule(llvm::LLVMContext&, llvm::ParserCallbacks) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x175104a)
#11 0x00007f473f45f241 llvm::parseBitcodeFile(llvm::MemoryBufferRef, llvm::LLVMContext&, llvm::ParserCallbacks) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x1751241)
#12 0x00007f473ec42cd9 llvm::parseIR(llvm::MemoryBufferRef, llvm::SMDiagnostic&, llvm::LLVMContext&, llvm::ParserCallbacks) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xf34cd9)
#13 0x00007f473ec4326d llvm::parseIRFile(llvm::StringRef, llvm::SMDiagnostic&, llvm::LLVMContext&, llvm::ParserCallbacks) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xf3526d)
#14 0x0000563c2aec7e66 main (/usr/lib/llvm-18/bin/opt+0x29e66)
#15 0x00007f473d7c9d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#16 0x00007f473d7c9e40 call_init ./csu/../csu/libc-start.c:128:20
#17 0x00007f473d7c9e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#18 0x0000563c2aeb5f65 _start (/usr/lib/llvm-18/bin/opt+0x17f65)
VERBOSE Removing directory `./tmp`
Error: opt was terminated by a signal
```
llc and clang++ crash aswell:
```
$ target/debug/apolloc build main.ap -o main.ll --output-type=s -O3 -v
VERBOSE Reading input file `main.ap`
VERBOSE Creating directory `./tmp`
VERBOSE Writing output bitcode to `./tmp/main.bc`
VERBOSE Executing command `llc ./tmp/main.bc -o main.ll -O3`
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: llc ./tmp/main.bc -o main.ll -O3
#0 0x00007fb8d441a446 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xd2c446)
#1 0x00007fb8d4418400 llvm::sys::RunSignalHandlers() (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xd2a400)
#2 0x00007fb8d441ab0b (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xd2cb0b)
#3 0x00007fb8d31c2520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x00007fb8d45acc07 llvm::StructType::getTypeAtIndex(llvm::Value const*) const (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xebec07)
#5 0x00007fb8d4e4801e (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x175a01e)
#6 0x00007fb8d4e40e77 (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x1752e77)
#7 0x00007fb8d4e415f8 (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x17535f8)
#8 0x00007fb8d4583c87 llvm::Module::materializeAll() (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xe95c87)
#9 0x00007fb8d4e38725 llvm::BitcodeModule::getModuleImpl(llvm::LLVMContext&, bool, bool, bool, llvm::ParserCallbacks) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x174a725)
#10 0x00007fb8d4e3f04a llvm::BitcodeModule::parseModule(llvm::LLVMContext&, llvm::ParserCallbacks) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x175104a)
#11 0x00007fb8d4e3f241 llvm::parseBitcodeFile(llvm::MemoryBufferRef, llvm::LLVMContext&, llvm::ParserCallbacks) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x1751241)
#12 0x00007fb8d4622cd9 llvm::parseIR(llvm::MemoryBufferRef, llvm::SMDiagnostic&, llvm::LLVMContext&, llvm::ParserCallbacks) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xf34cd9)
#13 0x00007fb8d462326d llvm::parseIRFile(llvm::StringRef, llvm::SMDiagnostic&, llvm::LLVMContext&, llvm::ParserCallbacks) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xf3526d)
#14 0x0000555bd89a304f main (/usr/lib/llvm-18/bin/llc+0x1004f)
#15 0x00007fb8d31a9d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#16 0x00007fb8d31a9e40 call_init ./csu/../csu/libc-start.c:128:20
#17 0x00007fb8d31a9e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#18 0x0000555bd899f3c5 _start (/usr/lib/llvm-18/bin/llc+0xc3c5)
Error: llc was terminated by a signal
```
```
$ target/debug/apolloc build main.ap -o main.ll --output-type=obj -O3 -v
VERBOSE Reading input file `main.ap`
VERBOSE Creating directory `./tmp`
VERBOSE Writing output bitcode to `./tmp/main.bc`
VERBOSE Executing command `clang++ ./tmp/main.bc -o main.ll -O3 -c`
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: clang++ ./tmp/main.bc -o main.ll -O3 -c
#0 0x00007f45287ac446 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xd2c446)
#1 0x00007f45287aa400 llvm::sys::RunSignalHandlers() (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xd2a400)
#2 0x00007f45286fb8a0 (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xc7b8a0)
#3 0x00007f4527552520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x00007f452893ec07 llvm::StructType::getTypeAtIndex(llvm::Value const*) const (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xebec07)
#5 0x00007f45291da01e (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x175a01e)
#6 0x00007f45291d2e77 (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x1752e77)
#7 0x00007f45291d35f8 (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x17535f8)
#8 0x00007f4528915c87 llvm::Module::materializeAll() (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xe95c87)
#9 0x00007f45291ca725 llvm::BitcodeModule::getModuleImpl(llvm::LLVMContext&, bool, bool, bool, llvm::ParserCallbacks) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x174a725)
#10 0x00007f45291d104a llvm::BitcodeModule::parseModule(llvm::LLVMContext&, llvm::ParserCallbacks) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x175104a)
#11 0x00007f45291d1241 llvm::parseBitcodeFile(llvm::MemoryBufferRef, llvm::LLVMContext&, llvm::ParserCallbacks) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x1751241)
#12 0x00007f45289b4cd9 llvm::parseIR(llvm::MemoryBufferRef, llvm::SMDiagnostic&, llvm::LLVMContext&, llvm::ParserCallbacks) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xf34cd9)
#13 0x00007f453127d80d clang::CodeGenAction::loadModule(llvm::MemoryBufferRef) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x1e3480d)
#14 0x00007f453127e492 clang::CodeGenAction::ExecuteAction() (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x1e35492)
#15 0x00007f4531cc8785 clang::FrontendAction::Execute() (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x287f785)
#16 0x00007f4531c42014 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x27f9014)
#17 0x00007f4531d421d0 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x28f91d0)
#18 0x0000565440d26191 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/lib/llvm-18/bin/clang+0x13191)
#19 0x0000565440d236c5 (/usr/lib/llvm-18/bin/clang+0x106c5)
#20 0x00007f4531903439 (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x24ba439)
#21 0x00007f45286fb63c llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xc7b63c)
#22 0x00007f4531902dae clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x24b9dae)
#23 0x00007f45318cb8a1 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x24828a1)
#24 0x00007f45318cbaee clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x2482aee)
#25 0x00007f45318e74bc clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x249e4bc)
#26 0x0000565440d23024 clang_main(int, char**, llvm::ToolContext const&) (/usr/lib/llvm-18/bin/clang+0x10024)
#27 0x0000565440d300f2 main (/usr/lib/llvm-18/bin/clang+0x1d0f2)
#28 0x00007f4527539d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#29 0x00007f4527539e40 call_init ./csu/../csu/libc-start.c:128:20
#30 0x00007f4527539e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#31 0x0000565440d200d5 _start (/usr/lib/llvm-18/bin/clang+0xd0d5)
clang++: error: clang frontend command failed with exit code 139 (use -v to see invocation)
Ubuntu clang version 18.0.0 (++20231014042238+64e7207ea5c7-1~exp1~20231014042353.1244)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-18/bin
clang++: note: diagnostic msg: Error generating preprocessed source(s) - no preprocessable inputs.
VERBOSE Removing directory `./tmp`
Error: clang++ exited with non-zero exit code: 1
```
And this is the input file, "main.ap", that is outputting the bitcode that makes opt, llc and clang++ crash:
```
extern "C" function printf(_format: string, ...): i32
extern "C" function strlen(__s: string): u64
extern "C" function malloc(size: u64): *none
extern "C" function free(ptr: *none): *none
struct String {
ptr: *u8,
len: u32,
cap: u32,
}
function disposeString(input: String): none {
free(input.ptr as *none);
}
struct Person {
name: string,
age: i32,
}
function main(): i32 {
var b = Person {
name: "Hello",
age: -13,
};
printf("Hello, world!\n");
return 0;
}
```
This seems to be a problem specifically about using GEP on a struct field, because if you use the code below as the input file instead:
```
extern "C" function printf(_format: string, ...): i32
function main(): i32 {
printf("Hello, world!\n");
return 0;
}
```
It runs successfully:
```
$ target/debug/apolloc build main.ap -o main.ll --output-type=llvm-ir -O3 -v
VERBOSE Reading input file `main.ap`
VERBOSE Creating directory `./tmp`
VERBOSE Writing output bitcode to `./tmp/main.bc`
VERBOSE Executing command `opt ./tmp/main.bc -o ./tmp/opt.bc -O3`
VERBOSE Executing command `llvm-dis ./tmp/opt.bc -o main.ll`
VERBOSE Removing directory `./tmp`
```
And generates this output file:
```
; ModuleID = './tmp/opt.bc'
source_filename = "main.ap"
target triple = "x86_64-linux-gnu"
@0 = private unnamed_addr constant [15 x i8] c"Hello, world!\0A\00", align 1
declare i32 @__gxx_personality_v0(...)
declare void @exit(i32) local_unnamed_addr
; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #0
define i32 @main() local_unnamed_addr {
%1 = tail call i32 @printf(ptr nonnull @0)
ret i32 0
}
; Function Attrs: noreturn
define i32 @__apolloc_rt_entrypoint(i32 %0, ptr nocapture readnone %1, ptr nocapture readnone %2) local_unnamed_addr #1 personality ptr @__gxx_personality_v0 {
%4 = tail call i32 @printf(ptr nonnull @0)
tail call void @exit(i32 0)
unreachable
}
attributes #0 = { nofree nounwind }
attributes #1 = { noreturn }
```
And this is the minimal code example that generates that error:
```
extern "C" function free(ptr: *none): *none
struct String {
ptr: *u8,
len: u32,
cap: u32,
}
function disposeString(input: String): none {
free(input.ptr as *none);
}
function main(): i32 {
return 0;
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkXN9z4yjy_2uUF8ouhH4_5MFxkru52q2dmsx3v48uhJDNLQIVoIy9D_e3X4FkSzh2JtlxcjOzW1sZG0Hz6abp7g8owVqztaD0OkhuguT2CndmI9V1yTtaM72Jo6tSVrvrzxsKghTK1gQpBJ3hzOwAUVhvqAZfNlQA2RrWsD-ZWAOzoaBkhsiKgppxGkSLAN4GcBGkcPi__4piYLBaUxOg-4qW3TpA97iVnEsCyo7xCjSYiTluwUz2HzkHs5nsTNuZmdm1NIhuOX9sZkyB2W8RmD32kn-_-3Tz28Md-ERxZREx0XbGYbFaDEIPOPa9l4piY7tXTFFipNrZ3vMA3Zvmae__V8x17tEcFDZyOgjdu8lK8mT43ZaSzgkgsmmwqAb7gidDrfJjo2yNa_stOoj8-Mvd4uEO6K5smAEYlN0aKNpKZSyajTGttkuA7gN0v2Zm05VzIpsA3VvTDf_MWiX_TYldCaZ1R3WA7oFFxQThndVrQ_sFByUmfxiFCZ330z8YTP4AVde0h4WGc-D--6jkWuEGYLXuGiqMxQFep6STBwIUQQC3EEKY1XEWURzhOE6B0yBaBNFC73T_4aNiwjhMny3IAOVjJ4W_rKQ2iuImQGmAloAJE6ACBCgP0H2nlTUHK_dGCW1ryUSA7ufz8RErf_nl919nYT7Xch4G6AZuK0TiOA1QMQIOjwDnMYSnAH_qxANbC8z_iUXFqdIOzEUw4RhCDxM6NmIJy4soX8LSmyiaTlRlFCUIDhP1crZ5ukrjGWei287WousfECs0dUJjO8STGXvgS0IIzCYGfTCqI-aziwr2-5q6LwvzQVR06_nB75h3FBAptAnQwhrbff52S9CSEph5qJMp6jpOcxjSb58ozBIMQ-rNlB7NBGmWXWQmRDNfp-xopjCp84vMFCV17s2U-2uOI5JP1_xXWXV8WO8GG6oY5uxPuuD8UpuIFgnJfe0LX_skz1AywXTTZ4IptDU1_dcPTcs9T7TzLaUwdGuGiFRKyU_9O475iJWmaok5t6FYX0TNMItxhpKDnjZ-wSM9axjj5_VsLbKh4Xkt31qbJIQx9rQJj7VBcTiB4aAPKt2zI_y_0kaq3U1X11R9orWvwP9CORSHnnJ-XCcxIlVxrNyHTy_X6eHXW4bXQmrDyBOl3lvhOopJVXj6Rkf6Riitnur7ZB0fjGJi_b1rm6C08rTdJ74kjQjClGQ0TV09_ILZbMluxaKCpqknNfFTNCmqAoLVymbhlTZYmRXBnK_cPBYy0d0evd7pira2RhSt4UPqPh403wTRIsmDaBGm46zp8aw0hsCNYYKZ44n6j1b6zEmfEysOWaEIjkKzU0I9VU5pcVJ4lBUW9ig7941fJnWagF7qK8wfZnU6RteRnzTy8auM404pqfaV8xesgaGqYQIbWoFyBzDQrnw8ybE4J66MJxyLdYBuAnQzlPFYf6Gcvy030z8FK7M2PElYDmr_uGTsRbqd4GBlXsVx-ANxsB7w98XBBiO-PQcr8yoKyWU5mAWf4B-Ng1nUNH4PDtbP9B4crJ_pPTiYW_P8--JgTvvo5-dgvZ4_CwcbtPk5OZhVLkV_Hw7W6_s34WBJUlZ5gSMY1y_lYJyT3msgjOszHMylaPzeHGyY9bIcbCL00hysN35RR-QVHGxvfhKRMbgeSJWtgF9Jqt6EK8ny3z8FW5oyza8xCzAj_3PiZKNJq2irJKFa0wpo2am-2Y7EWkvCnFuoTgBNFGvNs2TrJM96rVVOXXslKM8w-XEoVw8Yf1eUy2JK6zLH8NsnIpmVc-7aK0FZklz42itBeRHRH4xyxQkqwgq_x7WXmwm9x7WXmyl6j2svu-Zh8l1RLqc9wT895epXOfxJKNegzc9Judw2KeO_DeWKkyhEWZXD_dG-g7GUFf0HFQtimBR9E5e4OuGaT8zwesBu3hlpWwc57xeJRnEOTzOnPWgaF-groPvCkg5Nfy2knYGXxAU6dw2WRCEheZYnU3j3yq65qE7guyAylGd1lvuBKPWRxQiGsW-4pmWcqg9CGywIPW2786pYJ74Q-qwuYBh76DMPfRWjsIJT9APOUYlHSfBTzE-U7AuXy9i8LsIKeqjH274kjmGF0rAIASGhI6_eDloohXd260RLssFqLKuiOxsb_Da0BI-SVS8Gv6cLcBtGYeEHveIIYpSS5HUiYUo8T0PQW6sCRnF0IRPHJY4jL4ih8LgYTyMyCaVLS88-USIfqdrt4-2BMeCa8p23DnUnnDuvlFsLa-YeeuFW4gKBmGQWoqcDOjIYqjCdOnel2CNVg0LLcNnT4-PgcdKZtBn6ydaqhXkQLU-dnkV3g6cdBqxWZLsNw_5LiTUjK-26Dy7qdbYNK6Mws_y0f3wkDnNud6RUk-e2y2Isz76BQ5zxlqLC1LO0n_JyUuY4PGtpFyvwkzi9N78XWI4GuuOLYb-65P6yrguvfL2sMXKUY2_ro_jYGJied7szxviXLPV5S_xLlr8wbTxLTLyvwZz_7s6VXEk_8dYWM-so7mDh5cYbXOoNTYip709-us9pFpfkHNzbyWcvXZ3IU-dM_44mvFTILmhc-uEuPU45EA2VyD4v7kG7MLMYgsSo9Wcp-RDLJ671ykwIIfJKDJT5sCIIa_TSM_mJ3ArWXkmIcv8UJ3qXU3lUHM96gVN5__hwL_Qyp_KHk769V0BYveJUflyAClZjOTI5KA2iBaD7Y3rXDuqhgj0cONeYcVqBL8xsAN0y610VBWFfvnSagtkjMBJoSgGbVJjDZP9XdsJ0g-xHqjSTAoT5HM6HUzsLA0EUhTCMYYxQZNvSmGYIZhQnJJuF_6HbNvzPpFOURPMQxaOrfu7vBqIFGE7_WjI5AOy7bBTFFWhkRbnt2ErNtv0jV_hyTqtb5gzxrFlPmVBIY6kBqA7UFjTaRhbg7kDAmgqq-kuDk-fguaOzMyDk5DkuOe2vJPT8m95pmx6M2wXcL6aQYvYnVXJcVds7PHkBsxAVMBumAdPuhH-8KrFRKEBof1uCkG0wG2xs1_7Wwxz_ypJ73OA_qAbu7b0lOPsS3bm35-jWUGWjEFoGCIF9iQpaxYSpA5Svaqka7HxiKNHQEszt3rN7DLAIPS9IG8WpjburlZ4KcaO7NH5-dONKO7uy7E-6H9GPDdBCSEGfH18rm1Tz1qjpkBMC-p_anVCDvnQFQXYznCkCAEYRXR6g5fjAameBRchrJrg9bg6y2-lkB5AV063U9GGwTO6cwg5-mNrKYvUhDcq57vPWKIC1p-LNyWkHHT9SpaXwBQrcUG-hx0d4TffL_TV1hjw7Oog_ySNWoARBdPsUwn7-AKF_Us5lvwvGoRMgszDyHlkw0XS59v47ylqCL1LxKkBhkCyFk114YxQ1nRIAnrCcv2k-2x2sKW20jdglBRi0SpacNkC3lLCa2WS4A7iUnQGdts70j7uPQAqAwWD_mlGLZQlKSrAN_6wGO9kB-9Hd_dkNXlIuv9hl9WMFYEIbiqs339SvWNk3NfgHA1QnNNAdsSG97jjfve37wPxv_7uaX3nR-LGZVUyfEHGw6RNJL8u3JzLmkPep7nPnYJtnf2E3ugHDhc6tizUByo6hBigbIqIrH1ZWno1AQ_9pKnbdeqcCRrGWHzo9vSX1tk4QQ-i6too9YkNBJ-wU1QpX1XDohoUBQXITJmALWB4kt4Cc2UJwYX_AoTbAnK3FocxwPytKOFa035kxXK3W2-2qdVEWc2Z2q0cYoHzY5yfG9SdSMbSFjE0sNtgXgEuC-WoK3NMwugH3-wCxMEbpPlnZ5ASE7MQXJip_Gtta0XoP8xA5bAoTkuDWdJNettyUgu_GEHUCkXv_wFepZuJgiTFwnRw7pqcAJaFbL4MZd5TmDEohOs5t--QG3MYz1x2eTJDnLNVHwVOwV6shbq2UWVFh1K6Vjr7mrgNKoHslxDObNVdfKqAkfP7xmdXtX42YuI0TccafjowX_2XjjWOeeiGYGrkTimKysWX9STNjYxQrOxst3EspbqNmN8cuCQ7D_AHhZMCQn85lpeNivmGCNZj3qZtucWPjhKvRpwEMmwNVfFXyfutS9kerY19ab76gyLiqrqOqiAp8Ra_DtMiiPEwydLW5juscpbDIsjCjFSlqGsIowwnNkxiHZZZeseuBTidhnKAEzeMK0wJHWVgUKIIlsn7cYMbnNmPOpVpfude9rtMiDOEVxyXl2v1FC4QGzoaC5PZKXbsMW3ZrHcSQM230KMEww-n1M4xvPB9wDH14y-vcH8GY_gGMq07x67_-BpvT6r8BAAD__0bksbQ">