<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/112922>112922</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [clang] Assertion in `llvm::LoopVectorizationPlanner::computeBestVF()`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          bcornille
      </td>
    </tr>
</table>

<pre>
    When building the METIS (v5.1.0) library (GKLib) an assertion is thrown during LoopVectorize. This error was introduced within the past few days (see git sha of broken and working versions below).

#### Error:
```shell
clang: /mnt/thera/cicd/actions_work/ActionsRunner/ActionsRunner/trunk_repos/llvm-project/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:7457: llvm::VectorizationFactor llvm::LoopVectorizationPlanner::computeBestVF(): Assertion `(BestFactor.Width == LegacyVF.Width || planContainsAdditionalSimplifications(getPlanFor(BestFactor.Width), CostCtx, OrigLoop)) && " VPlan cost model and legacy cost model disagreed"' failed.
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: /share/contrib-modules/Core/llvm/2024-10-16/bin/clang -I/home/bcornill/libraries/metis-5.1.0/GKlib/. -I/home/bcornill/libraries/metis-5.1.0/GKlib/test -DLINUX -D_FILE_OFFSET_BITS=64 -DNDEBUG -DNDEBUG2 -DHAVE_EXECINFO_H -DHAVE_GETLINE -O3 -MD -MT CMakeFiles/GKlib.dir/blas.c.o -MF CMakeFiles/GKlib.dir/blas.c.o.d -o CMakeFiles/GKlib.dir/blas.c.o -c /home/bcornill/libraries/metis-5.1.0/GKlib/blas.c
1.      <eof> parser at end of file
2.      Optimizer
3.      Running pass "function<eager-inv>(float2int,lower-constant-intrinsics,chr,loop(loop-rotate<header-duplication;no-prepare-for-lto>,loop-deletion),loop-distribute,inject-tli-mappings,loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>,infer-alignment,loop-load-elim,instcombine<max-iterations=1;no-verify-fixpoint>,simplifycfg<bonus-inst-threshold=1;forward-switch-cond;switch-range-to-icmp;switch-to-lookup;no-keep-loops;hoist-common-insts;no-hoist-loads-stores-with-cond-faulting;sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,slp-vectorizer,vector-combine,instcombine<max-iterations=1;no-verify-fixpoint>,loop-unroll<O3>,transform-warning,sroa<preserve-cfg>,infer-alignment,instcombine<max-iterations=1;no-verify-fixpoint>,loop-mssa(licm<allowspeculation>),alignment-from-assumptions,loop-sink,instsimplify,div-rem-pairs,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;speculate-unpredictables>)" on module "/home/bcornill/libraries/metis-5.1.0/GKlib/blas.c"
4. Running pass "loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>" on function "gk_dargmax_n"
 #0 0x00007fa15911cc8b llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin/../lib/libLLVMSupport.so.20.0git+0x1c2c8b)
 #1 0x00007fa15911a664 llvm::sys::CleanupOnSignal(unsigned long) (/share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin/../lib/libLLVMSupport.so.20.0git+0x1c0664)
 #2 0x00007fa1590227f8 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007fa1615e0dd0 __restore_rt sigaction.c:0:0
 #4 0x00007fa15821e70f raise (/lib64/libc.so.6+0x3770f)
 #5 0x00007fa158208b25 abort (/lib64/libc.so.6+0x21b25)
 #6 0x00007fa1582089f9 _nl_load_domain.cold.0 loadmsgcat.c:0:0
 #7 0x00007fa158216cc6 .annobin___GI___assert_fail.end assert.c:0:0
 #8 0x00007fa15db3af1b llvm::LoopVectorizationPlanner::computeBestVF() (/share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin/../lib/libLLVMVectorize.so.20.0git+0xb5f1b)
 #9 0x00007fa15db52d46 llvm::LoopVectorizePass::processLoop(llvm::Loop*) (/share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin/../lib/libLLVMVectorize.so.20.0git+0xcdd46)
#10 0x00007fa15db55ed1 llvm::LoopVectorizePass::runImpl(llvm::Function&) (/share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin/../lib/libLLVMVectorize.so.20.0git+0xd0ed1)
#11 0x00007fa15db56517 llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin/../lib/libLLVMVectorize.so.20.0git+0xd1517)
#12 0x00007fa155d90a9e llvm::detail::PassModel<llvm::Function, llvm::LoopVectorizePass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin/../lib/../lib/libLLVMPasses.so.20.0git+0x76a9e)
#13 0x00007fa15998eab7 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin/../lib/libLLVMCore.so.20.0git+0x323ab7)
#14 0x00007fa16434e17e llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin/../lib/libLLVMX86CodeGen.so.20.0git+0xa917e)
#15 0x00007fa15998ce55 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin/../lib/libLLVMCore.so.20.0git+0x321e55)
#16 0x00007fa16434e56e llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin/../lib/libLLVMX86CodeGen.so.20.0git+0xa956e)
#17 0x00007fa15998d9bc llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin/../lib/libLLVMCore.so.20.0git+0x3229bc)
#18 0x00007fa15faab288 (anonymous namespace)::EmitAssemblyHelper::RunOptimizationPipeline(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>>&, clang::BackendConsumer*) BackendUtil.cpp:0:0
#19 0x00007fa15faaeb9c clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, 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*) (/share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin/../lib/libclangCodeGen.so.20.0git+0x111b9c)
#20 0x00007fa15ffdd293 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin/../lib/libclangCodeGen.so.20.0git+0x640293)
#21 0x00007fa150c5592c clang::ParseAST(clang::Sema&, bool, bool) (/share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin/../lib/../lib/libclangParse.so.20.0git+0x3c92c)
#22 0x00007fa15d75dee9 clang::FrontendAction::Execute() (/share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin/../lib/libclangFrontend.so.20.0git+0x138ee9)
#23 0x00007fa15d6ceb05 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin/../lib/libclangFrontend.so.20.0git+0xa9b05)
#24 0x00007fa1613cad83 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin/../lib/libclangFrontendTool.so.20.0git+0x4d83)
#25 0x00000000004141c7 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/share/contrib-modules/Core/llvm/2024-10-16/bin/clang+0x4141c7)
#26 0x000000000040b96a ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#27 0x00007fa15d135049 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::'lambda'()>(long) Job.cpp:0:0
#28 0x00007fa159022cb4 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin/../lib/libLLVMSupport.so.20.0git+0xc8cb4)
#29 0x00007fa15d13589e clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#30 0x00007fa15d0f22fc clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin/../lib/libclangDriver.so.20.0git+0x922fc)
#31 0x00007fa15d0f33fd clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin/../lib/libclangDriver.so.20.0git+0x933fd)
#32 0x00007fa15d1039c4 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin/../lib/libclangDriver.so.20.0git+0xa39c4)
#33 0x0000000000410b5b clang_main(int, char**, llvm::ToolContext const&) (/share/contrib-modules/Core/llvm/2024-10-16/bin/clang+0x410b5b)
#34 0x000000000040b074 main (/share/contrib-modules/Core/llvm/2024-10-16/bin/clang+0x40b074)
#35 0x00007fa15820a6a3 __libc_start_main (/lib64/libc.so.6+0x236a3)
#36 0x000000000040b0be _start (/share/contrib-modules/Core/llvm/2024-10-16/bin/clang+0x40b0be)
clang: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 20.0.0git (https://github.com/llvm/llvm-project ae68d532f810e217c747b10b26aeea3bb84c3844)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin
Build config: +assertions
Configuration file: /share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin/clang.cfg
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/blas-9fe25d.c
clang: note: diagnostic msg: /tmp/blas-9fe25d.sh
clang: note: diagnostic msg:

********************
```
#### Reproducer:
[gklib-blas.tar.gz](https://github.com/user-attachments/files/17437550/gklib-blas.tar.gz)

#### Broken Versions:
```shell
>> clang --version
clang version 20.0.0git (https://github.com/llvm/llvm-project ae68d532f810e217c747b10b26aeea3bb84c3844)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin
Build config: +assertions
Configuration file: /share/contrib-modules/Core/llvm/2024-10-16_20.0-0/bin/clang.cfg

>> clang --version
clang version 20.0.0git (https://github.com/llvm/llvm-project af90e7c5161de9a36af768dd5c9d73464e0eed64)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /share/contrib-modules/Core/llvm/2024-10-18_20.0-0/bin
Build config: +assertions
Configuration file: /share/contrib-modules/Core/llvm/2024-10-18_20.0-0/bin/clang.cfg
```

#### Working version:
```shell
>> clang --version
clang version 20.0.0git (https://github.com/llvm/llvm-project 48deb3568eb2452ff385b04b8f71c34121f47387)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /share/contrib-modules/Core/llvm/2024-10-13_20.0-0/bin
Build config: +assertions
Configuration file: /share/contrib-modules/Core/llvm/2024-10-13_20.0-0/bin/clang.cfg
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzse11z4yjT9q_RnFBySciSpYMcOI49k70zm6lJZnbPVAhaNm8Q6AWUj_31T4Fkx3KcTOZrZ-9nn6ns2kbQdF990TQIiDF8LQFOgvQ0SM_ekM5ulD6pqNKSCwFvKsUeTv7YgERVxwXjco3sBtD75fX5FQpwfptO4kkU4AIJXmmiH1zh2_9c8MqVEYmIMaAtVxJxg-xGqzuJWKedoAul2s9ArdL8L5ig6w03CLRWGt0Rg7i0WrGOAkN33G649B23xFhUwx1i5MG4vgwAWnOLzIYgVaNKqxuQiEiG7pS-cd3cgjZcSYMqEOouwMUkiM6CaD78Hye7P7R0vQfJ9lEW9X9mA0L0ZVQQuQ6SOQrwqpE2wCu7AU0CvKKcsgCvCHXGmtL1HuDVvP_5sZMS9JHfVnfyptTQKhPglRC3Tdhq9f-A2uGn-3Bgrq41kaZWunEVd7AFeDWGkbZtkMxn03TmtPQSknmQzLc1iOvfaan03tN9Gb7GB0G8hv4pVU3bWTgFYz-vApwHuHDC5zvXOphw7p73kid_cGY3KEjOguQMXcCa0IfPq23pbBHMFqgVRC6UtIRLM2eMO0FEXPGmFbzm1GthApyvwTplVkof6cJpghdooYxd2Hv39VLztbPGPylQgLMAZyjAGH12YhBVxqJGMRCeJMLrtl_KuCFrDcACjAM8QzXhAtjAmQ8Xy_nVEpmuarhFBFXdGjnnaYusQhtrW-Mgw6sAr9bcbrpqQlWz58qxg7kxHTh_el24pKJj4HlONTEbVBF6YzWh4CxrNbRaUTAGGDKq032xa0mMUZQTCwzpTiJDNW_toPKVJfQGsa5pd8SOJuiDVmtNGkT0umtAWjNw2myIdqSiSlrNq7BRrBNexYXyDwZDcISnYRyFcRbgVcWla-KGBgrPA7zaqMbV3YaRnsOaaO4lNWC5CYfAsXr7n57fk29vasFYFJ5dnP_-6U8UnpWr84tleblaXS2vy9Pz66sgOcumKDz7_Wx5-unt7gtG4dm7-edlufxzuTj_fXVZvtuWvF1eX5z_vkThZYLC92cofH-NFu_JDax4j4bvesK4G8OVIGZCJwqF71dfrjVhKFSvEUbRN8LRi-hdHU-Q_xckC1B1kCxRS7QBjYhFIJkLmTUX0FfGQ-XL1vKG_wW6L06GYhe0XEBtiXGhF9ed9NHMySZr0CGXt0GyDHBeC0Us5i4-LoS6Ax1SJY0l0oYurHNpODUBXtCN9jXccM3dR6iVJRaCZLEBwkCHrGvFEAyC5FSq0I0CoiGslQ6FVb4_LyFkIMDX8zGhL-LGsbizbqRw6UZdaAUPG9K2XK7Ntt7tLpwmC6mcjqAFkFvfDQUWKike-v53VQ8e9YpwWYMOieBr6UbVVr5QhIUgeOOrGEtVU3HpemvIfcgt6CHcJWfxthvN64ew5vetcjh66aYPjg-0XgfJolKyM6ETF9qNBrNRgg0CaqXviGahueOWbhz4LEhOh1-ayDWEVoWcupiwLbYqFErddG2vwA2A01u5gHa6UdzYkKqmUdL3aPpKfbmzzoTGKg0mdHO17zCsSScsd7PlqeHy5rC5aYF2glgIK6HojS8a7OvbV5pIuuk7eqzcyVYD49SSyg2eHhex50LHqP5HuIX5u0D3DuykVkIEyeIy6UvtdjYO74h2o8KpoRUJkkWrwYC-hdC76TgrvlefxhjihgynTZAsiBDqbguRHynLfhDsugxrrZqQGNM17TCx9oKcZwZ9tugHeMH4baihCVvCtatqCReUCDFQ-NU8lCr8Kio6Tz9l44iKO9Yd0Om1VHRdfBcbX6Ri4RINJVE_bSKfQnxPDMe4D8HTyZPo-0MDl1d6G8-d9PVNyYheN-S-lDstUICTCEX3URRFs5rEaRHHlObVXiJpHkz_5YPm0vrc47pPYPLHSprclcpYDaTx-dkC-anCZWv5N-UgJY4mURjtUpHJZJc2C15dXHx-f9W1LkubGDVxddfcBvg0uo8pprlbqjwaGB8YSLJseszAhQAiu_ZSXvG1JCLAeSf9YoohoVw8-CXmRFk2HZmDR-ZEGM_qHC1cdvkRqLoF_dDr_45IJlzwzAdfjOq4RB3u7bC6iPx_uy6SvS6yOIWIsQiVpQY_DkttkeHrfl00oU-bT_c1zHEMs6hGmnADA4CCV84o90mdxZm3NZnNonpkajoWFOUVThGpXHL-kiAcVzgdCcoOBRV1gUopShdeSqYawuWEKsEmEXJFjVlTYo_ZNjuwLaM0QxMipaq4LMvy7XlZlv0SuXQLjQn02Tzoo-LyfXGsSkgdV9-zivuJDH1ckR5wtErreDziirFVKWbT7Bmr4AMxw_gb1kIXQ_I4qh7g-S-yjjI2zXbWuXASHViXAou_bJ3u5HnTipFlq22-7WLmL7GORcDikXXxgXVZGs9eZd3zli322s8lEQ-Gm_dEuhVGkCyONHIT2C9DJE7j2QiRUcBNWRGRAvYsYuCSqWGOJMa8VwzEcbtGSDxF8puAcn__XR546gxnPZhDT8wyUsDIE8lo6ityINU-Nz36L1n1LwF4QNW1PMQ0wQmpxvTen62zaTKFePYj6P3TnPHvcuKfebZQDN6CPHQlKeLZeHikB8ODQprumfTeq3Ottuo7D80Zaa3Sx8HpG3wVNEOTX8buGNJ0hEl2yO40-zp2b0FYvBLJb4DqOXL-o_F_iZhpNibm7ICYrKjoK0LFMej_FyN6nNG4qOgIzNGSoSakwnnutCJSyYdGdQZJ0oBp_Rq96I1YNtzOjYGmEg_vQLTbFcTHTg5bw_3qgrcg_P5avn0tFiTzU0JvQLL5Lmwby_onneT_v4OytWPINLkr2zvNLZTbPYG9Rgz85k3pd3fhCw2HkJ-9pttrpcRlZ9vOrnhPm9f0edBqv8OnGCyUNF3jFtV-OTKUfrJcPF1IO18VB76CqqD7Yp1fBiG9DmPkzzhZS2Usp2Yp194xh4q987vqV0A03Vz2O4HIb80_rToM1y_UuiZ6DfYLlS6IXB-r8gjrldVcrj9CfSxyeviO4Ts_khqcS6s7w2_hI9QLaT8ceP22HpYgzn1XD8ZCM2QJfz9NX0GZnxM-fLfPhOM4jqtiFELwaAVb14zhInlJ9Z5pfj_Jv7TuN6U_SX7A1_nV9bCv9FOD5UvWZtMIF8nI2tGKNqJpWuDRIPxAtIH51fXYlitoyMDqSinx-Pk3rIm8Gl6tJ_MBLfDYl6PVKZulDKDYt26lnUd2Q6sPO_dA_Su0n7hl5FXYdv6Ek0kOUIzsGK3tWEahitJx9GpaLkCf-9eOFEaWbONG_rzhP52Qz9lKiioa5aR4tOKKE0pYPhp-g1GPFt-q4YXpyMAniPz0CLM10c2Zh2ZOWT4edtvVSP9vGk9jOkOUxmVD-Dgrm2tNHtxUkSzohujtjDLfxtRRGV6gW8XZdxo7PuPQG-A1HJmQjU2IqiIjaOudRXzt48GeIVcNEaLf0_F7fcfsOZgnnYwhZu7NpAVimt-CPppV4FE6zeIkjaaFB2VP7vbVT6k9rv7p9qDPkBxTIkRF6E1ZS6fpI7H6vgeSLeKFahoi2WHoOOq_3fSp2v74z2jifEwKdhPmrkFZ0vv7OO5_VMRw6iZX_4rPoziq7ApKqwm3Zvv4QBwRwg0at7TdPXdV5o-B3BOox9w3CfBMkKZiJMCzR6hwvn3585uqjvsjP3wjQ6v9F0zH3rvs0u8rUoN4GMH5sut-xVsomtNqOhoZxSEF8wLQv5lCzimTlmjbn518jivjt60sqjGu6bPA-QBPnszbWzRHs8FBQ1fhuez9harzUcqzZ9vPmlLO-jh3QLjCwbJPuPFLXBbVSVKzr8XtN1WZ50H7TVUX3Njn1jNPQvuOJy3hjiL94ahX47y_0PzVaDswR2iPk8o4Sgo6fc6ys73vo8zlSMrynJf-RrR_aoJ0HF_i4BvhmxzkRlGVVr0t2-xoa58PW_Mh6Hw5bfih-ZDTaqT29DAfimZT5BT-of16saN-D88BkIwkqCwd6qWxRNtyT4lnzgQkGRnlp8mT5C6qAPXifrQ51eN26O64OQwn03u3o3pIrREdqNufUvYn5RHcc-dmBihOpk65zgAKb5FVyAAgvrdA2O9me1AeOTJ6Orq2X3emGRHIcpYmuM7jCHA8o7PprIqjCmcEgCRVlU9pkk8fHdZvIDnL7vOszKZhJ2-kupOh4LK7D9eyG-ptNBDWn9F2tVtl-H3_yK9ohAB2xvU3H2MeD1cv97TjwgeFmg9H_k93txlMX2XhH3b9yb3-JO2PUWDgxITW6wMmSGV9J2y324ca44PawNXv-Nu7FzGcdJ9fX88X79D1uyVaXV5cXP5x_vtbtDq_WF6h60tffPrpLfq4_HD58Xqnw4djJ9Vz098Ieea0-q6CBuQTKWCI2J3IL5vvULdNO5ydC4sacMq2x6C_tbnZfCX6P8oH26snRy6pfHTgso7C3k2V9HR9I3gV-mODlujJ-q8gPXt5-HYGdEisJXTT3wDAq3o4kB7PpsksTR0Zn8rdRcWnqp32t28-Dzdugpdu0vST7BDPwnAIPv8Xj_5L4tHf6sS6iGBG0ziLGRQkyUg9y3LGUlqwWTLNphABsOwf58T8Vzsx_5ITD8LM0xH9x_gS3T9gRE9zBlWSZjlUeJriuk7ytIqmVV7PYppMYxzX01mSz_5pZEh-NRmS15LhDTtJWJEU5A2cxDNc4CyNs9mbzUmcRtO4njGS52mUpDRLKoJJioHM6iiOszf8xPUWR3EepziLZhMGjEJU1XVS05SyaTCNoCFcTJxyE6XXb_wVuJM4xgXGbwSpQBh_GRXjISnGQXr2Rp94DlTd2gTTSHBjzaMIy63wN1j7FunZ3s1E7i8nfscRWYdHp8XJt9_tG2y7PcH_EwAA___k7kNH">