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

    <tr>
        <th>Summary</th>
        <td>
            [MLIR] Failed to convert memref to spirv with assertion `elementCount && "ArrayType needs at least one element"' 
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    This bug has been fixed.

test case:
```
//mlir-opt test.mlir-convert-memref-to-spirv

#map0 = affine_map<(d0, d1) -> (d0 + d1)>
#map1 = affine_map<(d0, d1) -> (d0 * 2 + d1)>
#map2 = affine_map<(d0, d1) -> (d0 * 2 + d1 * 2)>
module {
 func.func @main(%30:index,%34:index,%35:index,%38:index,%39:index,%67:memref<17x7x0x165xf32>) {
    %68 = memref.alloc() {alignment = 128 : i64} : memref<17x7x0x165xf32>
    scf.parallel (%arg0, %arg1, %arg2, %arg3) = (%34, %34, %34, %34) to (%30, %38, %34, %39) step (%35, %35, %35, %35) {
 %107 = memref.load %67[%arg0, %arg1, %arg2, %arg3] : memref<17x7x0x165xf32>
      %108 = math.exp %107 : f32
 memref.store %108, %68[%arg0, %arg1, %arg2, %arg3] : memref<17x7x0x165xf32>
      scf.yield
    }
    return
 }
}
```
Crash :
```
mlir-opt: /llvm/mlir/lib/Dialect/SPIRV/IR/SPIRVTypes.cpp:56: static mlir::spirv::ArrayType mlir::spirv::ArrayType::get(mlir::Type, unsigned int, unsigned int): Assertion `elementCount && "ArrayType needs at least one element"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: mlir-opt test.mlir-convert-memref-to-spirv
 #0 0x000000000047f3aa llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /llvm/llvm/lib/Support/Unix/Signals.inc:569:11
 #1 0x000000000047f55b PrintStackTraceSignalHandler(void*) /llvm/llvm/lib/Support/Unix/Signals.inc:636:1
 #2 0x000000000047dbd6 llvm::sys::RunSignalHandlers() /llvm/llvm/lib/Support/Signals.cpp:103:5
 #3 0x000000000047fc85 SignalHandler(int) /llvm/llvm/lib/Support/Unix/Signals.inc:407:1
 #4 0x00007f6898d30980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
 #5 0x00007f6897c20e87 raise /build/glibc-CVJwZb/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
 #6 0x00007f6897c227f1 abort /build/glibc-CVJwZb/glibc-2.27/stdlib/abort.c:81:0
 #7 0x00007f6897c123fa __assert_fail_base /build/glibc-CVJwZb/glibc-2.27/assert/assert.c:89:0
 #8 0x00007f6897c12472 (/lib/x86_64-linux-gnu/libc.so.6+0x30472)
 #9 0x0000000001f9959f mlir::spirv::ArrayType::get(mlir::Type, unsigned int, unsigned int) /llvm/mlir/lib/Dialect/SPIRV/IR/SPIRVTypes.cpp:57:32
#10 0x0000000002f921f0 convertMemrefType(mlir::spirv::TargetEnv const&, mlir::SPIRVTypeConverter::Options const&, mlir::MemRefType) /llvm/mlir/lib/Dialect/SPIRV/Transforms/SPIRVConversion.cpp:480:20
#11 0x0000000002f91c69 mlir::SPIRVTypeConverter::SPIRVTypeConverter(mlir::spirv::TargetEnvAttr, mlir::SPIRVTypeConverter::Options)::$_6::operator()(mlir::MemRefType) const /llvm/mlir/lib/Dialect/SPIRV/Transforms/SPIRVConversion.cpp:523:12
#12 0x0000000002f91b71 std::enable_if<llvm::is_invocable<mlir::SPIRVTypeConverter::SPIRVTypeConverter(mlir::spirv::TargetEnvAttr, mlir::SPIRVTypeConverter::Options)::$_6, mlir::MemRefType>::value, std::function<llvm::Optional<mlir::LogicalResult> (mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>>::type mlir::TypeConverter::wrapCallback<mlir::MemRefType, mlir::SPIRVTypeConverter::SPIRVTypeConverter(mlir::spirv::TargetEnvAttr, mlir::SPIRVTypeConverter::Options)::$_6>(mlir::SPIRVTypeConverter::SPIRVTypeConverter(mlir::spirv::TargetEnvAttr, mlir::SPIRVTypeConverter::Options)::$_6&&)::'lambda'(mlir::MemRefType, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)::operator()(mlir::MemRefType, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>) const /llvm/mlir/include/mlir/Transforms/DialectConversion.h:253:42
#13 0x0000000002f91afb std::enable_if<llvm::is_invocable<mlir::SPIRVTypeConverter::SPIRVTypeConverter(mlir::spirv::TargetEnvAttr, mlir::SPIRVTypeConverter::Options)::$_6, mlir::MemRefType, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>>::value, std::function<llvm::Optional<mlir::LogicalResult> (mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>>::type mlir::TypeConverter::wrapCallback<mlir::MemRefType, std::enable_if<llvm::is_invocable<mlir::SPIRVTypeConverter::SPIRVTypeConverter(mlir::spirv::TargetEnvAttr, mlir::SPIRVTypeConverter::Options)::$_6, mlir::MemRefType>::value, std::function<llvm::Optional<mlir::LogicalResult> (mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>>::type mlir::TypeConverter::wrapCallback<mlir::MemRefType, mlir::SPIRVTypeConverter::SPIRVTypeConverter(mlir::spirv::TargetEnvAttr, mlir::SPIRVTypeConverter::Options)::$_6>(mlir::SPIRVTypeConverter::SPIRVTypeConverter(mlir::spirv::TargetEnvAttr, mlir::SPIRVTypeConverter::Options)::$_6&&)::'lambda'(mlir::MemRefType, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>(mlir::SPIRVTypeConverter::SPIRVTypeConverter(mlir::spirv::TargetEnvAttr, mlir::SPIRVTypeConverter::Options)::$_6&&)::'lambda'(mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)::operator()(mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>) const /llvm/mlir/include/mlir/Transforms/DialectConversion.h:287:14
#14 0x0000000002f91943 std::_Function_handler<llvm::Optional<mlir::LogicalResult> (mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>), std::enable_if<llvm::is_invocable<mlir::SPIRVTypeConverter::SPIRVTypeConverter(mlir::spirv::TargetEnvAttr, mlir::SPIRVTypeConverter::Options)::$_6, mlir::MemRefType, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>>::value, std::function<llvm::Optional<mlir::LogicalResult> (mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>>::type mlir::TypeConverter::wrapCallback<mlir::MemRefType, std::enable_if<llvm::is_invocable<mlir::SPIRVTypeConverter::SPIRVTypeConverter(mlir::spirv::TargetEnvAttr, mlir::SPIRVTypeConverter::Options)::$_6, mlir::MemRefType>::value, std::function<llvm::Optional<mlir::LogicalResult> (mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>>::type mlir::TypeConverter::wrapCallback<mlir::MemRefType, mlir::SPIRVTypeConverter::SPIRVTypeConverter(mlir::spirv::TargetEnvAttr, mlir::SPIRVTypeConverter::Options)::$_6>(mlir::SPIRVTypeConverter::SPIRVTypeConverter(mlir::spirv::TargetEnvAttr, mlir::SPIRVTypeConverter::Options)::$_6&&)::'lambda'(mlir::MemRefType, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>(mlir::SPIRVTypeConverter::SPIRVTypeConverter(mlir::spirv::TargetEnvAttr, mlir::SPIRVTypeConverter::Options)::$_6&&)::'lambda'(mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>::_M_invoke(std::_Any_data const&, mlir::Type&&, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>&&) /usr/lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/std_function.h:301:9
#15 0x0000000002a9d6d3 std::function<llvm::Optional<mlir::LogicalResult> (mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>::operator()(mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>) const /usr/lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/std_function.h:706:14
#16 0x0000000002a7d915 mlir::TypeConverter::convertType(mlir::Type, llvm::SmallVectorImpl<mlir::Type>&) /llvm/mlir/lib/Transforms/Utils/DialectConversion.cpp:2969:13
#17 0x0000000002a7d2db mlir::detail::ConversionPatternRewriterImpl::remapValues(llvm::StringRef, llvm::Optional<mlir::Location>, mlir::PatternRewriter&, mlir::ValueRange, llvm::SmallVectorImpl<mlir::Value>&) /llvm/mlir/lib/Transforms/Utils/DialectConversion.cpp:1272:40
#18 0x0000000002a81702 mlir::ConversionPattern::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&) const /llvm/mlir/lib/Transforms/Utils/DialectConversion.cpp:1700:27
#19 0x000000000379264f mlir::PatternApplicator::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&, llvm::function_ref<bool (mlir::Pattern const&)>, llvm::function_ref<void (mlir::Pattern const&)>, llvm::function_ref<mlir::LogicalResult (mlir::Pattern const&)>) /llvm/mlir/lib/Rewrite/PatternApplicator.cpp:201:25
#20 0x0000000002a8b540 (anonymous namespace)::OperationLegalizer::legalizeWithPattern(mlir::Operation*, mlir::ConversionPatternRewriter&) /llvm/mlir/lib/Transforms/Utils/DialectConversion.cpp:1986:21
#21 0x0000000002a8ac5b (anonymous namespace)::OperationLegalizer::legalize(mlir::Operation*, mlir::ConversionPatternRewriter&) /llvm/mlir/lib/Transforms/Utils/DialectConversion.cpp:1894:17
#22 0x0000000002a8a17f (anonymous namespace)::OperationConverter::convert(mlir::ConversionPatternRewriter&, mlir::Operation*) /llvm/mlir/lib/Transforms/Utils/DialectConversion.cpp:2407:26
#23 0x0000000002a8366b (anonymous namespace)::OperationConverter::convertOperations(llvm::ArrayRef<mlir::Operation*>, llvm::function_ref<void (mlir::Diagnostic&)>) /llvm/mlir/lib/Transforms/Utils/DialectConversion.cpp:2456:16
#24 0x0000000002a83337 mlir::applyPartialConversion(llvm::ArrayRef<mlir::Operation*>, mlir::ConversionTarget&, mlir::FrozenRewritePatternSet const&, llvm::DenseSet<mlir::Operation*, llvm::DenseMapInfo<mlir::Operation*, void>>*) /llvm/mlir/lib/Transforms/Utils/DialectConversion.cpp:3270:22
#25 0x0000000002a838b2 mlir::applyPartialConversion(mlir::Operation*, mlir::ConversionTarget&, mlir::FrozenRewritePatternSet const&, llvm::DenseSet<mlir::Operation*, llvm::DenseMapInfo<mlir::Operation*, void>>*) /llvm/mlir/lib/Transforms/Utils/DialectConversion.cpp:3276:10
#26 0x00000000026c88d5 (anonymous namespace)::ConvertMemRefToSPIRVPass::runOnOperation() /llvm/mlir/lib/Conversion/MemRefToSPIRV/MemRefToSPIRVPass.cpp:55:14
#27 0x00000000029e4e5a mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) /llvm/mlir/lib/Pass/Pass.cpp:471:21
#28 0x00000000029e5454 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) /llvm/mlir/lib/Pass/Pass.cpp:534:16
#29 0x00000000029e6d1c mlir::PassManager::runPasses(mlir::Operation*, mlir::AnalysisManager) /llvm/mlir/lib/Pass/Pass.cpp:837:10
#30 0x00000000029e6c3c mlir::PassManager::run(mlir::Operation*) /llvm/mlir/lib/Pass/Pass.cpp:817:60
#31 0x00000000029de27c performActions(llvm::raw_ostream&, bool, bool, llvm::SourceMgr&, mlir::MLIRContext*, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>) /llvm/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:84:17
#32 0x00000000029ddfa3 processBuffer(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, bool, bool, bool, bool, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, llvm::ThreadPool*) /llvm/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:124:12
#33 0x00000000029dddaf mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool)::$_0::operator()(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const /llvm/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:164:12
#34 0x00000000029ddccd mlir::LogicalResult llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::callback_fn<mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool)::$_0>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) /llvm/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:12
#35 0x0000000002b0ad09 llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::operator()(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const /llvm/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:12
#36 0x0000000002b0a2e5 mlir::splitAndProcessBuffer(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool) /llvm/mlir/lib/Support/ToolUtilities.cpp:28:12
#37 0x00000000029dd039 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool) /llvm/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:169:10
#38 0x00000000029dd17a mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::PassPipelineCLParser const&, mlir::DialectRegistry&, bool, bool, bool, bool, bool) /llvm/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:187:10
#39 0x00000000029ddae6 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) /llvm/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:269:14
#40 0x0000000000411f4e main /llvm/mlir/tools/mlir-opt/mlir-opt.cpp:247:7
#41 0x00007f6897c03c87 __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:344:0
#42 0x0000000000411dda _start (/llvm/mlir/build/bin/mlir-opt+0x411dda)
Aborted (core dumped)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsXFtP47q3_zTmxaJK7FwfeCiF6szRoEHAniPtl8pJnNZnp06O7TDt_vRHtpPmUgotMBpm_iAEceLLWr919SUhUrIlp_QC-JfAvzojtVqV4uKSkuJvWq224iwps-3Fw4pJmNRLuCISJpRymLMNzSbAuQLO1P5VVCqYEkkBbu6AwGl-bRHNAZqvCybOy0pBXX9iSmnJH6lQ52u6FjQ_V-W5rJh47HcOEF6TyoEAX0GS54zTxZpUAM8AijIHoBnMXIBieA7wNTT3IECX9ibA1_1O3NM6mUJ0sCv02q5sod_huszqgkIQXtoyzGueTvQfCDxnTRgHKALIxw7AU8YzugFopsveqOyPytGoHA_LQQjw1AIP8MwNN-HG2biBv8kx0sShuEcThFA3iQzbttGEFEWZGtpMTVKwJV9TrkwdF-m6U8gCD4RX5vKZsXaDyDSfVESQoqAFtHwTsTSw2ku3u0TdJTY04KumCfaaR09fxFCVcAdqcz_aqxnrmlLRqq3rt0-evOjDBZDvOmEfrKIkGbSo-5dHc-Ufjxy0gzYSImo1oZuqI2QKdQNbuyFJqlLQplUzaBD9NOq0ZLeMFllPo8KrriCoqgVv8WufdBdDjzITRK7gIX_TehpNHUDzonhcN_5Hl1gC0PyKkYKmCqD5_e2Xu-8Azb_ctYWHbUXlJK0qgKd-oDuRiiiWQtMDngI8tW7KXE6FIFvd5IXHtrikCqCoq2meoBmsuXHHGWRc7Ze16cKplFQoVnIIAocWVNvarKy1waEAoAAChDpiOKWZhETBghKpYMkpbNoAhAAKYU5YsXPkt1-vp_fXUNbJmilIjMcXtCqF0rayUqqSml7jx5dMrepkkpbrDlv977wS5f9aTJmUNZUAzSHhmoW0qDMK1YrC1AguIek_SpCUNsPfK5L-A7N6Xe1E6kys3tyKcinIGhKxrDX10qjciaEEAoQd6Gyc3Y8X5pgQaMi3IttKe3ErGFeGoAdNIUBRV0mQH4tSKkHJ2mA-a8QDh0jstOy-rjSGAM3_4myjb7AlJ4WcMJ4a5dKCdd2OSHdMpO8ncESR7eO_CM8KKgCKHkuWATR9PRkB1kreowKNqMiSLHgKqruaD4iRbTR4iYx2fGtjroM1GN34eIxCGvlwzPabkPeccMiy1wwZ5kEURxl24siBi4WgxksuhLJBoOl9EwWLwDsvGK8350te2weVWglKsoksJw5Al87GRXHkaOvdDeP3hwlT5NAohIIwqR3xPKlZkWkLK1iSns--__ePv5NdEU1QCNBcGj4Amk8murSVGa20pdWWTbmVj4YaXuui6XpidM0FeOp0lAQjSlCYu5AkpeH0OEpUZtEwrcwg0WiQcDiIi3BO4GJBjCdbaA-0SMjxvNt2uws7ZDwcMhoP6YXoCNmlWmqBkRp2vBANpBb39dHN49iP85_p7d8ctLRyt-Fee5WB70N5jNzcgY3HvDEO01IWPcnUAxFLqq75o24iVeP5uqq78We2R9rc_1bpaCUPtLqh67t23BM4fhCEy7wUa9netKNKVvKGfS_SqTJyOv7dEf9uGsRHMPDE_ZcgmiolTkLHBncTXL1FYC_LigqiSmHd6WDMIWoG2XfFzkfaF7s93UFj7JLQhVJllh7KSVLQBdP5XxchmFww_lim-hnAsw-J9CFlxNf21iMpamOsO171nEz3NGDVdk6KAZtfyyVLSXFHZV2oZiK47wW6Tu7XpCi-01SV4su6GvbVEmXtp2tjXM2dSbyfqGzmly0rapidPgHRD0GqGSkKnZgNOuzr2zFY_wqTuR4M8YEoQ_Z3dy8syDrJCNDB7IBN_3StOMG__GRaDnmvZrrQ3Ri4rcar9RzXSjt7X7str-e28NhtkTz5k93Wz5XWp1M87BT_YKX6FPtnLPyDY-HvDtbHSBl-v2QhMos_XpcseONkIfZw5-sW88bZLVbN6tNv4fT-7ND0me985juf-c5nvvObh_DPfOfj5TuN5SxujCP7hwIUdbnAlG8XGVHkwKq2JTHYG_T9CW0g0ylRLbtV32WaPr3JEU78idPuG43-dFlUCtCl-d3VT5iSdrdn0TpBk0VhxwV4GndJlD9IokicBRn-nR3ox0p7f4mMQycYZcrBUMhhFrv-8-Gl2Wba22B6PX4Hd4sGuf9fihVPzwHsTgeK7e477pgLx8yhLOkxl1FFWGGvu-5uiVJU8Dv6QzBFG8p1FUHXpPquMwk5OERwrwTjSy3zAfcHbCEl1mquh35mNOqeHzLj3hG-PAFj0-Z9QXZRiMx2ewdyNAQ5ckMH9QjfA9beXhOVrqY8axgeaNI3Y6QaJTR9GaUXds1OYy90zFZj2LE32CvGYYwCL9-naFpVBUuNZ3ln9vrCbm15Yc9nJWVZDJ1p00EvlsWNph3s5LFk2Zs7OeDsj-v3oGbuwJvvodzavIlZyN-JCzkjbUx8z9FkEF7y7bqsJeRkTWVlTgLFI4F8pUtSsH9bT1c0xf9hatUq73GCPOhN3tMU40g7c-R2zLsj5knqJ29l_iNxHMWeMdKOYzTm2A3zozl-OrANGH6erT4AQ2jeKaTZY00o6BjGI4ZxEBwv4qcZ3j0ehrUnM5kBlyd7litGlryUiqXHmP-JUJmTnW4PKm8MFcZhT2CkqortLRGKkaLr7lUQPKUvdi61pyZzUf5LWy1qdOqeqsHsoyPginJJ76k6TMB-9RtSfeF5-WwTc8TQLiq8n7ZiFJrg2W3aIn8sgihBx4jgNI_zHwm10fYuDUPDRD5IoyjzX3IMs92JsTuaP5Rmjn9LZHMaVNT8G--xEz1DfV9680F_47Luvz2b5A8nI2iYr8fUoz45kK9_qx7Kb5XubJqRapd3iZqPcg4p9zTnsE5NOSm2kskbwsmSmiUQnWSdcKTPDjjvcemF7ihMRyM2fc_3TmbzllW0YHwcn3XVHfXPhqhX8T3MVqX8wqUS5hy3nlPvpbP9Cs28xzxoaL8lgnKlTag1yucsZB9a-85M3-fHI2iDzE1HFLU87oAkUpoZ3auAOoHaCIdDmx0eYdfUpvglap-h8xRSXE1K0CNlmDrGGUVhCisqtEeapvvZwf7J-VZh2v-9OWpZi5TeLPc18ubrl7tZyRXdqD0P-7opxlD7X8owytK42XX7fgma3xRMfKvUDWGtr41GOefwND2KsywnGFaiTKmUl3Wem_XV55DaraHVnP1fTReVGu5A3tB1KbZtV736Gc1JXahFRguq6OE2TbjZl8lhGb0f2n35NvHrji6ZVGK7F3QfzAH7W0PNs8HxGEG5yBsedR2-d6AllZH-3L3XxYeR2K-RyEt6Yv_3lvidA8upvwKosbheWhA6SpeCsS55Y11K0wweEsprpPghoNstlKfNBuIi58M9xE-beYPNXGvMSr78Vfjsm8re61bdtkJzY3r1AND8_uFre2qGFNcbJYg0OwqeP7KT4ZQvcUjmxH-APfwmnu51QgyikRCDsRAR9QcvSBVMTXl2O0p6PrbJfwiJvVhjz4EcimPdG5E6ov2lWMEU270yhsYiDcfxy8HxZy70er_-xvQiHk0Fo7F43JB8cPEMoW7n9LOvt0RIKg6cp_iFmEfj6Xc8xpzQ4CDmzfJHuiJ2oWM0Wx1sAh_H7tvYQVaFutUzb_RCvOvmHoVrwvj-OGp_hPZyt56u0epmvZ47fA_XwWkUwsWiYEm6kIoItWiHOubN31TW7TkGe2kemn7MW8DY87rXgPXwaMxclhFoB27fBh5w2BKRaOH1-Lx0Nrbx7oXgaVIKRc1ORVoKar5aQLPd492nKM6yC5zFOCZn9MINwjDyndCNzlYXDnWiJCJpSKMsTj0vJ0lIUZK71ItwGOdn7AI5CDvYwS7GEY4mKQlx6AXIzdwUp1kOPIeuCSsmmodJKZZn5oMLF4Hr-t5ZQRJaSPNdH4Q4_QHNQ4AQ8K_OxIVuc57USwk8p2BSya4XxVRhPgh08_XLHfCv4Nx8IwKqsn1ZuPnYh75jzoHBH0ytIHnfL1Oc1aK4eP03JwwK_x8AAP__3Mg8cw">