<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/63610>63610</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Flang] Compilation of DATA statement for large COMPLEX arrays needs a lot of memory
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
yus3710-fj
</td>
</tr>
</table>
<pre>
This is an issue from Fujitsu testsuite.
Flang-new terminates abnormally when compiling the following program.
When I checked with the `top` command, `%MEM` gradually increased to 100%.
It seems that a lot of memory was used.
There is no problem with gfortran compiling on the same machine.
The following are the test program, Flang-new and gfortran compilation result, and the stack trace of Flang-new.
```fortran
! test.f90
complex(kind=8),dimension(1000) :: a8
complex(kind=8),dimension(1000,1000) :: b8
complex(kind=16),dimension(1000) :: a16
complex(kind=16),dimension(1000,1000) :: b16
data a8/1000*(0.0,0.0)/,a16/1000*(0.0,0.0)/
data b8/1000000*(0.0,0.0)/,b16/1000000*(0.0,0.0)/
end
```
```
$ flang-new -v test.f90
flang-new version 17.0.0 (https://github.com/llvm/llvm-project.git 93af6bdcaf4d499e9d4c1da5aa82f92f0acc1dbd)
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /path/to/install/bin
Found candidate GCC installation: /usr/lib/gcc/aarch64-redhat-linux/8
Selected GCC installation: /usr/lib/gcc/aarch64-redhat-linux/8
Candidate multilib: .;@m64
Selected multilib: .;@m64
"/path/to/install/bin/flang-new" -fc1 -triple aarch64-unknown-linux-gnu -emit-obj -fcolor-diagnostics -mrelocation-model pic -pic-level 2 -pic-is-pie -target-cpu generic -target-feature +neon -target-feature +v8a -o /tmp/test-6a351b.o -x f95-cpp-input test.f90
flang-new: error: unable to execute command: Killed
flang-new: error: flang frontend command failed due to signal (use -v to see invocation)
flang-new version 17.0.0 (https://github.com/llvm/llvm-project.git 93af6bdcaf4d499e9d4c1da5aa82f92f0acc1dbd)
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /path/to/install/bin
flang-new: note: diagnostic msg:
********************
PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
flang-new: note: diagnostic msg: /tmp/test-7d3e84
flang-new: note: diagnostic msg: /tmp/test-7d3e84.sh
flang-new: note: diagnostic msg:
********************
```
```
$ gfortran -v test.f90
Driving: gfortran -v test.f90 -l gfortran -l m -shared-libgcc
Using built-in specs.
COLLECT_GCC=gfortran
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/aarch64-redhat-linux/8/lto-wrapper
Target: aarch64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-gnu-indirect-function --build=aarch64-redhat-linux
Thread model: posix
gcc version 8.3.1 20190507 (Red Hat 8.3.1-4) (GCC)
:
$
```
```
#0 llvm::rotr<unsigned long, void> (V=2994594782533612773, R=44)
at /path/to/llvm-project/llvm/include/llvm/ADT/bit.h:378
#1 0x00007ffff0406d07 in llvm::hashing::detail::hash_state::mix_32_bytes (s=0x555573085270 "0\272eXUU",
a=@0x7fffffffa0a8: 2994594782533612773, b=@0x7fffffffa0b0: 2397334626997450193)
at /path/to/llvm-project/llvm/include/llvm/ADT/Hashing.h:295
#2 0x00007ffff0406ec3 in llvm::hashing::detail::hash_state::mix (this=0x7fffffffa090, s=0x555573085270 "0\272eXUU")
at /path/to/llvm-project/llvm/include/llvm/ADT/Hashing.h:310
#3 0x00007ffff0406c30 in llvm::hashing::detail::hash_state::create (s=0x555573085270 "0\272eXUU",
seed=18397679294719823053) at /path/to/llvm-project/llvm/include/llvm/ADT/Hashing.h:283
#4 0x00007ffff04a1366 in llvm::hashing::detail::hash_combine_range_impl<llvm::Constant* const> (first=0x555573085270,
last=0x5555730871b0) at /path/to/llvm-project/llvm/include/llvm/ADT/Hashing.h:468
#5 0x00007ffff049c677 in llvm::hash_combine_range<llvm::Constant* const*> (first=0x555573085270, last=0x5555730871b0)
at /path/to/llvm-project/llvm/include/llvm/ADT/Hashing.h:492
#6 0x00007ffff04a7c86 in llvm::ConstantAggrKeyType<llvm::ConstantArray>::getHash (this=0x7fffffffa1b8)
at /path/to/llvm-project/llvm/lib/IR/ConstantsContext.h:338
#7 0x00007ffff04a274b in llvm::ConstantUniqueMap<llvm::ConstantArray>::MapInfo::getHashValue (Val={...})
at /path/to/llvm-project/llvm/lib/IR/ConstantsContext.h:549
#8 0x00007ffff049d449 in llvm::ConstantUniqueMap<llvm::ConstantArray>::getOrCreate (this=0x5555555d8b70,
Ty=0x555558681880, V=...) at /path/to/llvm-project/llvm/lib/IR/ConstantsContext.h:599
#9 0x00007ffff048abd7 in llvm::ConstantArray::get (Ty=0x555558681880, V=...)
at /path/to/llvm-project/llvm/lib/IR/Constants.cpp:1238
#10 0x00007ffff0467493 in llvm::ConstantFoldInsertValueInstruction (Agg=0x555a2c3138e0, Val=0x55555852ccd0, Idxs=...)
at /path/to/llvm-project/llvm/lib/IR/ConstantFold.cpp:802
#11 0x00007ffff062802a in llvm::ConstantFolder::FoldInsertValue (this=0x7fffffffba78, Agg=0x555a2c3138e0,
Val=0x55555852ccd0, IdxList=...) at /path/to/llvm-project/llvm/include/llvm/IR/ConstantFolder.h:145
#12 0x00007fffe1460a71 in llvm::IRBuilderBase::CreateInsertValue (this=0x7fffffffba00, Agg=0x555a2c3138e0,
Val=0x55555852ccd0, Idxs=..., Name=...) at /path/to/llvm-project/llvm/include/llvm/IR/IRBuilder.h:2436
#13 0x00007fffe1436283 in convertOperationImpl (opInst=..., builder=..., moduleTranslation=...)
at /path/to/install/tools/mlir/include/mlir/Dialect/LLVMIR/LLVMConversions.inc:207
#14 0x00007fffe144f82d in (anonymous namespace)::LLVMDialectLLVMIRTranslationInterface::convertOperation (
this=0x5555555ee360, op=0x555563908280, builder=..., moduleTranslation=...)
at /path/to/llvm-project/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp:384
#15 0x00007fffe550ed13 in mlir::LLVM::ModuleTranslation::convertOperation (this=0x7fffffffbcc0, op=..., builder=...)
at /path/to/llvm-project/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp:612
#16 0x00007fffe550fb60 in mlir::LLVM::ModuleTranslation::convertGlobals (this=0x7fffffffbcc0)
at /path/to/llvm-project/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp:760
#17 0x00007fffe551435a in mlir::translateModuleToLLVMIR (module=0x5555584d0a10, llvmContext=..., name=...)
at /path/to/llvm-project/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp:1403
#18 0x00007ffff6c74542 in Fortran::frontend::CodeGenAction::generateLLVMIR (this=0x5555555a1080)
at /path/to/llvm-project/flang/lib/Frontend/FrontendActions.cpp:721
#19 0x00007ffff6c75b4a in Fortran::frontend::CodeGenAction::executeAction (this=0x5555555a1080)
at /path/to/llvm-project/flang/lib/Frontend/FrontendActions.cpp:965
#20 0x00007ffff6c6d1d8 in Fortran::frontend::FrontendAction::execute (this=0x5555555a1080)
at /path/to/llvm-project/flang/lib/Frontend/FrontendAction.cpp:112
#21 0x00007ffff6c46f01 in Fortran::frontend::CompilerInstance::executeAction (this=0x55555558e630, act=...)
at /path/to/llvm-project/flang/lib/Frontend/CompilerInstance.cpp:167
#22 0x00007ffff7566a35 in Fortran::frontend::executeCompilerInvocation (flang=0x55555558e630)
at /path/to/llvm-project/flang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:174
#23 0x00005555555631a0 in fc1_main (argv=...,
argv0=0x7fffffffe30f "/path/to/install/bin/flang-new")
at /path/to/llvm-project/flang/tools/flang-driver/fc1_main.cpp:67
#24 0x0000555555558031 in executeFC1Tool (argV=...)
at /path/to/llvm-project/flang/tools/flang-driver/driver.cpp:68
#25 0x0000555555558506 in main (argc=22, argv=0x7fffffffdfe8)
at /path/to/llvm-project/flang/tools/flang-driver/driver.cpp:111
```
The following is a similar program but an array size is smaller.
```fortran
! small_test.f90
complex :: a(100)
data a/100*(0.0,0.0)/
end
```
That can be compiled normally, but Flang generates large MLIR with LLVM dialect.
I suspect this is the cause of the abnormal termination.
```
$ flang-new -Xflang -save-temps small_test.f90
$ cat small_test-llvmir.mlir
module attributes {dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<i16, dense<[16, 32]> : vector<2xi32>>, #dlti.dl_entry<i64, dense<64> : vector<2xi32>>, #dlti.dl_entry<i128, dense<128> : vector<2xi32>>, #dlti.dl_entry<!llvm.ptr, dense<64> : vector<4xi32>>, #dlti.dl_entry<i1, dense<8> : vector<2xi32>>, #dlti.dl_entry<f16, dense<16> : vector<2xi32>>, #dlti.dl_entry<i32, dense<32> : vector<2xi32>>, #dlti.dl_entry<f64, dense<64> : vector<2xi32>>, #dlti.dl_entry<i8, dense<[8, 32]> : vector<2xi32>>, #dlti.dl_entry<f128, dense<128> : vector<2xi32>>, #dlti.dl_entry<"dlti.stack_alignment", 128 : i32>, #dlti.dl_entry<"dlti.endianness", "little">>, fir.defaultkind = "a1c4d8i4l4r4", fir.kindmap = "", llvm.data_layout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128", llvm.target_triple = "aarch64-unknown-linux-gnu"} {
llvm.func @_QQmain() {
llvm.return
}
llvm.mlir.global internal @_QFEa() {addr_space = 0 : i32} : !llvm.array<100 x struct<(f32, f32)>> {
%0 = llvm.mlir.constant(0.000000e+00 : f32) : f32
%1 = llvm.mlir.undef : !llvm.array<100 x struct<(f32, f32)>>
%2 = llvm.mlir.undef : !llvm.struct<(f32, f32)>
%3 = llvm.insertvalue %0, %2[0] : !llvm.struct<(f32, f32)>
%4 = llvm.insertvalue %0, %3[1] : !llvm.struct<(f32, f32)>
%5 = llvm.insertvalue %4, %1[0] : !llvm.array<100 x struct<(f32, f32)>>
%6 = llvm.insertvalue %4, %5[1] : !llvm.array<100 x struct<(f32, f32)>>
%7 = llvm.insertvalue %4, %6[2] : !llvm.array<100 x struct<(f32, f32)>>
%8 = llvm.insertvalue %4, %7[3] : !llvm.array<100 x struct<(f32, f32)>>
%9 = llvm.insertvalue %4, %8[4] : !llvm.array<100 x struct<(f32, f32)>>
%10 = llvm.insertvalue %4, %9[5] : !llvm.array<100 x struct<(f32, f32)>>
%11 = llvm.insertvalue %4, %10[6] : !llvm.array<100 x struct<(f32, f32)>>
:
%103 = llvm.insertvalue %4, %102[98] : !llvm.array<100 x struct<(f32, f32)>>
%104 = llvm.insertvalue %4, %103[99] : !llvm.array<100 x struct<(f32, f32)>>
llvm.return %104 : !llvm.array<100 x struct<(f32, f32)>>
}
llvm.mlir.global external constant @_QQEnvironmentDefaults() {addr_space = 0 : i32} : !llvm.ptr<struct<(i32, ptr<array<0 x struct<(ptr<i8>, ptr<i8>)>>>)>> {
%0 = llvm.mlir.null : !llvm.ptr<struct<(i32, ptr<array<0 x struct<(ptr<i8>, ptr<i8>)>>>)>>
llvm.return %0 : !llvm.ptr<struct<(i32, ptr<array<0 x struct<(ptr<i8>, ptr<i8>)>>>)>>
}
llvm.func @llvm.stacksave() -> !llvm.ptr<i8> attributes {sym_visibility = "private"}
llvm.func @llvm.stackrestore(!llvm.ptr<i8>) attributes {sym_visibility = "private"}
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkW0tzo7j2_zTKRoULJJ6LLBw77knd9O25PZnHLiWLg61pEPwlkU7m0_9LAgx27LjzmLmL25VOjBDnnN95S8hMa7GRAJcoukLR8oK1Zlury6dW0yTwveLPi3WdP13ebYXGQmMmsdC6BVyousKr9k9hdIsNaKNbYWCG_CXy593vVcnkxpPwHRtQlZDMgMZsLWtVsbJ8wt-3IDGvq0aUQm6w2QIu6rKsv9urRtUbxaqe4O926g3mW-DfIMffhdm6-Sj2Td2g2Ld0KiZzRBZ2EJHo8_VnO75RLG8dOyG5AqYhx6bGgW_n9NRvDNYAlcZmywxmuKwNrgtcQVWrJ_ydadxqyPew3W1BgVWIrK2o6xKqTqpNUSuj2BRYLZ2smlWAK8a3QsIhrQlwpsBNtzodtGBRjdpkMj9kw4yoJVag29LYyXaK42kY_4aNYhwsoh2NPf5WX-6np9mPksDJMCsyvxuxrEp4RCT9JmSO6DJFJENkkYsKpBa1RCQNfKvYDNt_iM4RnWOWvvbxxY5KT2J9ikQQvyjCIEEQv_r5nQyDCAON7nfODLPIyKqbN0ck9Wf2Ofc7Q2SFyMIyfmnGSGo9kHqB2npH7WWC3W-Q-YF5j1-SEBc71_IeDmw-3noAZRWEg2Tmz3yMSLo1ptFWPVa61UaYbbue8bpCZFWWD8Mfr1H1n8DNbCMMzigr4nXOWRHmYZZBloc8yFnEWEqKjBQ-4zzI17mF08UGUxswzohM8W0ceq38Juvv0iuFbB-9jWyHIFLAclzVOZR2elNr8diHt9SGlSXkS6HsLURWDTNbRFamRmQlutuIrNai9_1V3coccyZzkTMD-NNigftpLtJ6Kq1WFqRYW_icI7IahFSQb5npZERk1bvvL1ACN5B_FL3FTsCqLY2wD9I5niF6hUK_isMDri9NwoiQF_VCVjtXQIRgr-AB9owSTQmnTYM9qITx6vWf9oG6rJWXC7aRtTaCa-xVCsqaOxV4znK4ERx7jeBeCQ9QYtJdCO01ArBnnDd4vGnxBiQoO7kfK4CZVgFG5EpCLY-NP6QMe7VVtKka-xu08WJGo2A9q7H3iIss8njTeEI2rTkVCFZ7oFTtXKmVbF2CLSjwCLw1sKtDdI7_JazTvfS4G7WlVBqwDtc9iwsmSshx3jrKtj6z0gZcq8FFaG3LFRbyodfdLlr-N6N1T7eyNmD_jn6GK71xhPp8946fSXr9-fZ6_ss1nt_dzRc_4bufrvHqy-3tl99v_v0Jr25ur3_Bd1_c8NWvn_DX65-_fL2zyu-eVdComoO2zYiuW8UBkVTbamPNz7SuuWA2ZFUrseZKNGY3QQF2MQM5ZmZH8kd1sOf7SU4hDd9NYKa3bzHER5njbHnb9UrPqttSiQchnVDHJmGvnIyXuMKe3jIFuVeKtU3Qjsiv2rZt61aUxhMS6wa47vurxZfb2-vF3f2nxQLR5Wavvxru3d59uf_96_znn6-_IrqcVgGbUs5XArIqTe19V6xpQJ0Kw72nOva1LMSmVX037WrCDJEVH8ax54HLbt66ro02ijXjkDV0yzagEV1yRBYckSv3sxgwkkVpaux5jYJCPO6QYc-zKc6G9ojVKRWRVWXV7AlZ1Ccm2FvY86zA3rrdtKpEdGkT2y6vrdvNX6Is2axD3Ce4YXQE0NlxvDYuIVk4LhWNN9ySw_nIUkFp1w_jvaGgDiLpJ22g8v7qhvpJ9_f8kd0zA4_CYM_Lhe40KNat_C5k7sEjh8amcT0-tJGt10rxfy3Y4gncTFQv5DdQnvW33BP5wHvDuVexP2vl9anfq2X5NNztH9oyvfW0eSrBuqOtzwPVpmw3Qo7XQgpTCCk8phTbkRG63IdQNY_7QgtrW-DGK1rJ3aLE60RFdHnaGV8oBxvOd8UsndFZgIkfZH7kJ7aofYUc_8RMd8cLXb9OUhtu9lPf2dBdrgl_LGVQH7uS6Dp_VRuF6KKVbp2c47KWG7vEeqhFjui15fcbokuSZWGUhUlKIkrjgCQJtbNsTIfhrkDaRQkzhzVtWnjHciwkL9scxoH58s6VPTOz4UqTdCdvgP1HuyhIiqIo_NCPcz_BQk5QWMt3mQ7ReQ6GiXK8ca8Nc8ka0XklHu8puV8_2cW6Kzp06T9GURQl1E8jkthmgvgoWpCEwB-__uoax8UEng3c0PcfnTBFUTCfpdaoJzS0fj5_7bv5NEsoDWMSZ1kSRn6Q0Y_U40-dRpwuSRbtdEkOdQmcvl2XVoVmKzotjggzu2zDP6bbvwcyDUZ3p4eQOfXfCJkrsOuRtziOBnBL8pRmSZxkJAuTIEsJ9SPqGp8PNHdKd9jDfewsoHH8Guy8rtZCwr1icgP3ompKRBfjw4va9qvSIDLH3H7uU0YhlP18oKE9fZTsYEYSrP0P1kQYj0kk2tdExuPkSBLZB3wGK5mfg3sS5d_i9GFGdnDjA8MnPD0w_IBnvtmof8HT3VNzHO_clkhEr7vRDRjL8njgB-v0Tdi6PYGbr4isBq56YVeNj30xoKMdkwNgJAnXx4H96jqMz6z5AVifWXMji3oP42-sbF2s_8ZsI4aSq9lshpLl3wIxCrMdxPTAVfMwzN4PcQPmi1rsEtjOelH3L0_XBxF69zTeT-M0SFPn0rYdsIp4RaieBZ-N4LN98Clb58kJx-3g9dgsprMS9-DeI_eMN7YfD8jEJwN_X-g4CTN6XOhVXeY3UoMyzr1upDaq7VpJRNL5ZjMgYITTgKbQIXAeOCCLCOe5G7_JH_UhuPc5pZWvh5j6YzoJ9nuwmKQ-YacRgurGDtAezRprlqQWywnsI6oXlHArXJp9pVs-S6nPNAHK-WcQjg1UMO2gIAhjnyXBviZuvl7ZNQGoK6b7xqGLu_OqcHvz71LFzh8W-N-sgo_Syg5T12KENB41Qvc1QmOSOu_ntXwAZb40oNxG3k3VuI2-urmRo70WbnPBucwwUNV5W8KdYlIPO8g_4OPj3pmp61LbFXcp1B6ifmApWNlhvr397bPDZz8snLx2LaZnQnKL009GmOE-zLBISW5hIpIyWcunqm41lqwC3TAOVlhneku5Z9hxm-C6kQZUYWd37eWBwizpHvFhugagsTN53eyGY5r5Kely3gfp9MBFev11eaPfh5ko8YRe7-pnwPsUQ4f9OavfaYcGUeRDHjg3ckx3quzr9XM0pxT4PMo4HzV33AU_UCfPJO2hx8Eku8YH0It17L8N-qeyXrNSvwD8H8CWTDYbgmQfWxDSiO1jMz0B6On17mIxdF47yXVh7rOga63Lh6pvIkY7ymnK-_uBBqE_rrWCvb4t5kkYhcQiXfWbhg7s8DpkKJo5fAI556Mh3asfZmBUwmHss8BPX2lIt3e9A7gaZBg_dhIM3U1CghFWdgArWofs9bD6N0hz_iwu_zFUWTzZB_H3UcV5kKdnUO1T3YP1zwIavG-SQkiwjyeMCz84a6WqESUo905KDkXorKFSiKmLQMbNW2LtJMhDeQaY8ViEyd7-VRLFMaPRGZg9oJH68GLRLd2dMM_RvR_QXV3bXuT6FPcBXTKWQDJ0Ur0sMQ2YqwMFD-4r1vcaavOwS3gTKdXmwd9L90D94pUvvt-Ge2i3Okq5Eg9gk-kg9FDwJlYM93FGqU-ds_amWi0Cq70e7bPl2wfI1n0YJBtXciQ6lCzy3b7JRPsc0aXb3MO9KUaV5wW8cgfkNXIGQXB8S__IOSuhMcNaVKJkajhnhdetwUzi7qWHFn-5I166YmUJ6gfPTLnZ90dPTu3OI3WnjHZ66A4TdWd7XjjXc_JET4-OGcyZxGvoD4VBjoezdl0HZ7oDYHgooBqXtpDjz7c3X7vTa7ak4rxrUofDcVi3ugFuXIdt9WG2gDlrtTtSZi-GM327c342eI9q6-iZoz-6YxCeZg_gGagafVSJ9inOzOSeZ11FqJnrTdycrhvCzBgl1q17hZFc5aURs7y8tygwokuMCJ2OIbqYjIA06gnRhQhiq7UcpF2iLlB01Q1QgqKl29akc_wA3NQK0QV5FJS4naRrdwTxCL04nNKLw7fQCEg6JWIvX08FkcAqbtYYdUai8AckmpJ4izTFvp6D-C16oWRKw81-tRwfYZ_0wGXS93hM8UHWJm7IHQW9Z6XYyAqk6d6-4ICkjmBP5WUSIHPBpASt-6cRIaUwpgR7vROiEGqWQ8Ha0nwTMu9DjrCAh3kqwjJUYf-8nWmnVKwZZvV3nIPavHhfsqe6NcNt8CrbsHgiRXRu_1Pi2Ui1TVB_ZS03j0PPBQudByT1pEVnx35xKh05dIfE7vtzbIOgJ88uEYKSpU0pQ_1yRIpWcoxC__4__7FFEFkW2WSWm6TAtEoOz6FkuUfCZrDZxq1MsZAGlDvxZUmurtlIkOW5unebJ05Wf2c6K5U7ndNFNus2fheB7-NH3G2gOjumRRcp7k_WmWyKB2NEIt8RH-Xiu_c6ti65f4DIld-x70jtPk4JBQeEWplD8XZB92iTs7RfpDYlRUdSwu0_PvT7j5HfOXlEUHTlo2j5w_TxHoPwLANqy8vbGUQnGYQ9g-AYgle6yZRjfJZjdAzSOzgmZznGKLoiH8gxPcsxQdEV_UCO2VmOKYquwg_haJ3CP8svQ9FV9GH8gvN-6qPoKv4olY5nf4aM5J8O9lEEG-5Z-oF2DfzTKWBka5NAln0U20nVGUV4Z-Z9qWzBY1-2hnLRl8Rr-SBU7XqOZdcU6NcXtMadwZpK2bd83Y0BzCGU7q7tFa7Hyf3lAG3yeVIJj5RB2Zblf0Gokxb1_4vCHDrC0AL1dYvxb3Yx19vZ6w6BTOV0HA6Wafqpun8QWqxFKczT0Iw1SjwwA13rdYanAm1q1bF9xq17w_cmhuOH_XXsRX5J84xm7AIugzhN_ZRGNL7YXvpJQhlQP4wJoYRAAUUUEB5yRiNSBPRCXBKfUD-mbieFRjMWZQQgDEMS-BkJYhT6UDFRzhyMWm0u3NfuLmMaB_5FydZQaveVPULsGtrdtCJHywt16XZQ1u1GW-0IbfRIxQhTuu_6uZ0Am2sWky-Q1QVezu_m2B3oshGLi1r1mwSLL59_vr3-o9sb0VgC5Prwu3IXrSovX_dFA0RWTniNyMqB-_8AAAD__x6WrzY">