<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/122211>122211</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Mlir] --affine-super-vectorizer-test="vector-shape-ratio=4,8" crashes in VectorUtils.cpp:247: bool mlir::matcher::operatesOnSuperVectorsOf
</td>
</tr>
<tr>
<th>Labels</th>
<td>
crash,
mlir:vector
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Emilyaxe
</td>
</tr>
</table>
<pre>
git version: e4372c4454c9
system: `Ubuntu 18.04.6 LTS`
reproduce with: `mlir-opt a.mlir --affine-super-vectorizer-test="vector-shape-ratio=4,8"`
a.mlir:
```
module {
llvm.func @malloc(i64) -> !llvm.ptr attributes {sym_visibility = "private"}
llvm.mlir.global private constant @__constant_1x6x6xi32(dense<0> : tensor<1x6x6xi32>) {addr_space = 0 : i32, alignment = 64 : i64, sym_visibility = "private"} : !llvm.array<1 x array<6 x array<6 x i32>>>
llvm.mlir.global private constant @__constant_1x6x1xi32_1(dense<-331> : tensor<1x6x1xi32>) {addr_space = 0 : i32, alignment = 64 : i64, sym_visibility = "private"} : !llvm.array<1 x array<6 x array<1 x i32>>>
llvm.mlir.global private constant @__constant_1x6x1xi32_0(dense<-6552> : tensor<1x6x1xi32>) {addr_space = 0 : i32, alignment = 64 : i64, sym_visibility = "private"} : !llvm.array<1 x array<6 x array<1 x i32>>>
llvm.mlir.global private constant @__constant_6xf32(dense<-3.310000e+02> : tensor<6xf32>) {addr_space = 0 : i32, alignment = 64 : i64, sym_visibility = "private"} : !llvm.array<6 x f32>
llvm.mlir.global private constant @__constant_1x6x1xi32(dense<0> : tensor<1x6x1xi32>) {addr_space = 0 : i32, alignment = 64 : i64, sym_visibility = "private"} : !llvm.array<1 x array<6 x array<1 x i32>>>
func.func private @printMemrefI32(memref<*xi32>)
func.func private @printMemrefF32(memref<*xf32>)
func.func private @main() {
%0 = llvm.mlir.constant(6 : index) : i64
%1 = llvm.mlir.undef : !llvm.struct<(i64, ptr)>
%2 = llvm.mlir.constant(3 : index) : i64
%3 = llvm.mlir.constant(0 : index) : i64
%4 = llvm.mlir.undef : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%5 = llvm.mlir.constant(64 : index) : i64
%6 = llvm.mlir.zero : !llvm.ptr
%7 = llvm.mlir.constant(2 : index) : i64
%8 = llvm.mlir.constant(1 : index) : i64
%cst = arith.constant 0.000000e+00 : f32
%c0_i32 = arith.constant 0 : i32
%c0 = arith.constant 0 : index
%9 = llvm.mlir.constant(0 : i64) : i64
%10 = builtin.unrealized_conversion_cast %9 : i64 to index
%11 = llvm.getelementptr %6[2] : (!llvm.ptr) -> !llvm.ptr, i32
%12 = llvm.ptrtoint %11 : !llvm.ptr to i64
%13 = llvm.add %12, %5 : i64
%14 = llvm.call @malloc(%13) : (i64) -> !llvm.ptr
%15 = llvm.ptrtoint %14 : !llvm.ptr to i64
%16 = llvm.sub %5, %8 : i64
%17 = llvm.add %15, %16 : i64
%18 = llvm.urem %17, %5 : i64
%19 = llvm.sub %17, %18 : i64
%20 = llvm.inttoptr %19 : i64 to !llvm.ptr
%21 = llvm.insertvalue %14, %4[0] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%22 = llvm.insertvalue %20, %21[1] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%23 = llvm.insertvalue %3, %22[2] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%24 = llvm.insertvalue %8, %23[3, 0] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%25 = llvm.insertvalue %7, %24[3, 1] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%26 = llvm.insertvalue %8, %25[3, 2] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%27 = llvm.insertvalue %7, %26[4, 0] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%28 = llvm.insertvalue %8, %27[4, 1] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%29 = llvm.insertvalue %8, %28[4, 2] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%30 = builtin.unrealized_conversion_cast %29 : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)> to memref<1x2x1xi32>
%31 = vector.transfer_read %30[%c0, %c0, %c0], %c0_i32 {in_bounds = [true, true, true]} : memref<1x2x1xi32>, vector<1x2x1xi32>
return
}
}
```
stack trace:
```
mlir-opt: /data/szy/MLIR/llvm-release/llvm-project/mlir/lib/Dialect/Vector/Utils/VectorUtils.cpp:247: bool mlir::matcher::operatesOnSuperVectorsOf(Operation &, VectorType): Assertion `(ratio || !mustDivide) && "vector.transfer operation in which super-vector size is not an" " integer multiple of sub-vector size"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
#0 0x0000560f9d1f9ce8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x11f2ce8)
#1 0x0000560f9d1f77fe llvm::sys::RunSignalHandlers() (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x11f07fe)
#2 0x0000560f9d1fa67d SignalHandler(int) Signals.cpp:0:0
#3 0x00007f4d4fa7e420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
#4 0x00007f4d4f0bb00b raise /build/glibc-LcI20x/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
#5 0x00007f4d4f09a859 abort /build/glibc-LcI20x/glibc-2.31/stdlib/abort.c:81:7
#6 0x00007f4d4f09a729 get_sysdep_segment_value /build/glibc-LcI20x/glibc-2.31/intl/loadmsgcat.c:509:8
#7 0x00007f4d4f09a729 _nl_load_domain /build/glibc-LcI20x/glibc-2.31/intl/loadmsgcat.c:970:34
#8 0x00007f4d4f0abfd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
#9 0x0000560f9faf823a mlir::matcher::operatesOnSuperVectorsOf(mlir::Operation&, mlir::VectorType) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x3af123a)
#10 0x0000560fa0329c40 std::_Function_handler<bool (mlir::Operation&), (anonymous namespace)::VectorizerTestPass::testVectorShapeRatio(llvm::raw_ostream&)::$_0>::_M_invoke(std::_Any_data const&, mlir::Operation&) TestVectorizationUtils.cpp:0:0
#11 0x0000560fa0104c29 mlir::affine::NestedPattern::matchOne(mlir::Operation*, llvm::SmallVectorImpl<mlir::affine::NestedMatch>*) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x40fdc29)
#12 0x0000560f9d30f93e void mlir::detail::walk<mlir::ForwardIterator>(mlir::Operation*, llvm::function_ref<void (mlir::Operation*)>, mlir::WalkOrder) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x130893e)
#13 0x0000560fa0326e2a (anonymous namespace)::VectorizerTestPass::runOnOperation() TestVectorizationUtils.cpp:0:0
#14 0x0000560fa0154496 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x414d496)
#15 0x0000560fa0154dc0 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x414ddc0)
#16 0x0000560fa015a31e auto void mlir::parallelForEach<__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_0>(mlir::MLIRContext*, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_0&&)::'lambda'(__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>&&)::operator()<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&>(__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>&&) const Pass.cpp:0:0
#17 0x0000560fa015b27e std::_Function_handler<void (), llvm::LogicalResult mlir::failableParallelForEach<__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, void mlir::parallelForEach<__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_0>(mlir::MLIRContext*, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_0&&)::'lambda'(__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>&&)>(mlir::MLIRContext*, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_0&&)::'lambda'()>::_M_invoke(std::_Any_data const&) Pass.cpp:0:0
#18 0x0000560fa015ad18 std::_Function_handler<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> (), std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<std::function<void ()>>>, void>>::_M_invoke(std::_Any_data const&) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x4153d18)
#19 0x0000560fa015ac77 std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x4153c77)
#20 0x00007f4d4fa7b4df __pthread_once_slow /build/glibc-LcI20x/glibc-2.31/nptl/pthread_once.c:118:7
#21 0x0000560fa015aff9 std::__future_base::_Deferred_state<std::thread::_Invoker<std::tuple<std::function<void ()>>>, void>::_M_complete_async() (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x4153ff9)
#22 0x0000560fa015b185 std::__basic_future<void>::wait() const (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x4154185)
#23 0x0000560fa3378f75 llvm::StdThreadPool::processTasks(llvm::ThreadPoolTaskGroup*) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x7371f75)
#24 0x0000560fa337a6cb void* llvm::thread::ThreadProxy<std::tuple<llvm::StdThreadPool::grow(int)::$_0>>(void*) ThreadPool.cpp:0:0
#25 0x00007f4d4fa72609 start_thread /build/glibc-LcI20x/glibc-2.31/nptl/pthread_create.c:478:7
#26 0x00007f4d4f197353 __clone /build/glibc-LcI20x/glibc-2.31/misc/../sysdeps/unix/sysv/linux/x86_64/clone.S:97:0
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsXF9T27q2_zTiRUNGlvz3gYcQyL3MtJdOYe_76JFtOdGpI_tIMiT99Gck2Y4TEqB0h_bszQwttixp_dZv_fGSrIEqxReCsQsQXILg6oy2elnLi-sVrzZ0zc6yuthcLLiGD0wqXgtAppD5JMK57wd-ngA0BWiqNkqzlXkGQvRH1grdQi-eIH8Swk_3dyBErp9kjayLNmfwketl139VcXleNxrSibmE5-e0LLlg56ptmDx_YLmuJf_O5LlmSgNyBTB2jedqSRt2LqnmNSBXPsCzGGA8iHMTWjFoalrtj7lZ1UVbMQiiS4CmEFbVw2pStiKHwEcrWlV1DnDMQx_gBJ4Dcg0B9mynRktItZY8azVTZgK1WaUPXPGMV1xvICBXEGDcSP5ANTNooqutDINnsqjqjFaw6wLzWihNhTay07S_S711uA7XnGCA44IJxQCZIQuFTKFmQtUSkNm2F7k2YEF0SYtCpqqhObNgkB1g55lBWvGFWDEjjFzB0HfPjJ4z-ApFbPeeCiol3RgIcA3763DvugPmft7Kgmf0S70RD-eEeAep8H5PKry_lgo0piIMAvyP4yJclzuBcU4mxEMIIQbwJXrKh-v_y7gw-ncAfsryL6aC_yKbm3Trcm6vPfBRI7nQn9lKsvLGqruy14DMAJ5udbMsvjTB_OkE5csTrCgXAMcdgbYfhAAHyLKwtVxvHIDj0FEnCra2wzoeh6He3tBWFKzc4U9p2ebagow7EzRaGpydx9h58HEI5CgEgANyfBx6Abr_Q9At5g76rPel3geI8YHQt_wfbt3VNniGcP8F2OHe2O9M1juoDURHTnRcDH5BSnx8qPfC0Fy5sKOS6-UwEKIJQkMWc7YxLrsdhlJO8MGRQ2iPOj_T0SIbuiYveogrhZ66tpORtbzSXExaIRmt-HdWmOTVlYxpTo22ToodD3W9j8AbBcmCaVYxk5pMtWXMCYJLDII-58RjKx4o0KzzjZnwRpHTaKlrLvQgdMcpLLIdBUfBQ4vCzWYEdB46jjNvFC05raqdYtLO1XN4vLgcSQ6OgPZfBj3yf9VmFmuHOT5gw-ipin13LzzQf-T3rWQrN8chTrr-yRM0Q3fvAB48SrVcaF13XuDt-M9BzrA3HqqY1A-0apmjrRPpg-ASbZ3pJFkMjiDho5Aw6iBhDwSX3jtiIkcxkR4S3o25k0Pyj0KKe0gEBJcW33uaLziKq_dh7Pe43tOE4ct8BT2u97Rj9DJfJp37723H-GW-oh7Xe9oxeRlX3ON6RzuSH3mxD2-106DSNRyqeG-Nt4ucLVqX992u0ERLKlTJZCoZLZwyILi0FVFH6fgiuBquXXEVXXKRZnUrCuVWPsGlli0zvXZ-B1f9MugwOjzrAB2ALZlupbAKuP2h7v-9bSqlaf4NaklzBsh0rwNA037rzLE_L6imAM_V9w3A88-fbr4CPDcWOZesYlSx_raR9b9YrgGe2_0xPK94BvD8itPKNf_pcOP5H5pXamiwd5O8aQCZYj8yUrO6rmC3ywbIdEV1vmTdTd0wSTVTt-KubZh0c6jbEuD41j7itYAAh4Yp9_B-0zBr9CmcKhMMtkeIAI5tdwiiGYiMtbxVq_QVf-AFs0WVmSWEw87g4AOwHiRxAR-XPF_C8b4iVPw7g1xBUWtIBTCva4whF5otmISrttK8qRisS6jabDzILINxBEvKK1ZMAJp--XQ9vbs23VZcQwqzdgEla2qpjQcvtW6U4QXPAZ4vuF622SSvV51NnpqGK9Uywz2kooBc5FVbMKiXDOaSqiXMaP7NesbElZ8EQbQ2i4cgRGVSeGWSs9gmFmcNtVHu4otZIt8Zz7q3joXjbSdJH9NaacnoqjMMN6uAxFXdb3Awk0AK89usqueDv-JLtPa8Eucs7lbjABNvT4EoKtkhBb624o4vBK3-l4qiYlL16_WTYERRybYY8R5GGkYF3EFjanvHmWvuAwbZf24W0s0SlX7hlzRiPkYwTSVTupYslbrTxcXlOg7T0D-vuGjX5wvRugeNXpr8NlH1BDmsvm8qyh6pvyMDZRlCGZSUK_NyGXReVDzLzz_lNxith1s8IZ6h0OIHeD6ZmLuNKlhjHLIVfO0aHiwU0ZpbO_UkB2QaeIBMvQ5GsAsjoXGQQJrVVsfXwdCF48GOshJiIyHqJIT7EiKcwAXTqUOcKrYwa8m0f7G-SigX2mhe1bRYqUVOndwAmdwUd4KjQ4JTUaVmVFrUK8rFz8lLIuM1pFtgknhXIM3KInyFp-TGR0LrI4SURbj1kWTszSUtY0zoG7L5dsSQ17vssX2yk-BPEaqElh4m1Clnssk4H1JEcJL7CCpdODzpvBW5QZouu7glM_sye0afxFUKMRW12KzqVkFBV8zur7q31qAn_87kPVP6C1Vd0tJMaffsbkkb9tV-s3ou9XbzAeynyO6aWtSfUy4e6m8ma29VmYpNarh0-8dPqN9TAt4PUPh32z5-r_dpyjDo7TDoIT_HyWhe95nOXf8fU5oVX6jWTIqR99wKdozQqUG51f9uRavKwbpZNRUgs-ckfTaT2ypreiJ_8lFZ5MbkvT_tpn6CyoQw-FDzYkRJwTTllbt-pNW3HS3mtXyksrjRhgJTFl6_kpqyd1VXZVqZzwxNuupz-_z_afXtVhZMnuo1SVCcELbliuzFXsgwfWvkyFbcipGG8Q_5sL_rw4HvJ-ERg9029_VtYwRPC9pYC3Xyd8i2yJyJjhtv-2QqaLVRXH2mgi6YXQaZPGN-t8J-fC9OWGT5nl_4Sbi1TLDPR5GjH-bjC29YxZ-Etuk6qHk8Cb2VoPEgI-pGmJWmebebtcr0uQ5OsnvQYf9CJRP6RpR1nzZPlkk8vyhytLVBuGcDSjwGaavr_XTSUEmrilXzWl5Tk-9maboQbZqv113qT0UtV7RK-ZBUZj9qzFFwTdVG5Db74tjZIBls-9lQ1dE8vHqGBe5phY4k2v3099B0-Fa541Z_naDhxT6OIeNqs1pottYd1R8G_xUG_2D97xVmdnto1BZVdJUVFOAI4PjD2O9v7B17uKWleYnb3aBTax66rPth9l9mdldxQTPxgZI92iuPMhyx5xfu_YqoW6JvV06f6gXPafWVqbbSo_xSUl7RrDJF4EeB9cu9YvZR9_6eZvmoe_9hBv9g_e8VZh91729m7MEeH_nv9zPOB-v_qPzXxaGz9Gs_rCXHVi3x_qZu4cXPr1qGh63g_25Z2uid1jQtW91KlmZUdd--UreQcS1js73U17VcsYppI_p6tFh6do57qr6limn9c4C7JVpn7jej3hnsjj90fW6s7XbQ6Lap2Lih_4q2t17cX4b0DT_oFSf5bhCQwou33w2SfRfLo-h5Nu801a7hTzyoVNTGpGOVRtT8Bk7ZfdXtPwOd7rNMQPIoGujFaO9UTuYXJUzT7qBNWoucpaqqH197pkM09kzHeLw91eF5cXd8xUj19o1alsnzHF6xkknJilQZ6-74_CljovOevF41xmIpNan3dEevjHnKcvv9HeP9bSEvDsZEZVTxvKNrlHDs00fKdQfVbT2dBrDvxcEW8M5HcEKiuIyC8YEHXdxbe30xbm6bGlnnTCmTddXO4ZBtR_Psf2TdNqcLjIhEXhmNFPH3FKFhnjm_wNORQmPv6wDLer055IDPsrCQ9eNwim78Nu98Mu5E23MAw9inr2Qc7AU0DpEJLSp16rC-MZJzyah2sexH41jePYrmJREJCEzTvKrFq0-erbjKX3vmzp33AnhuJUzu7JGxnoDxWeKz4oIUCUnoGbvwIhKSBPtBdLa8iApGWex5XhAUHmZBgaifB0GZx6UXe6g84xcY4QB5KEHE871o4hd-hhIcUi9MojzygI_YivJqYs9-13JxZk-uXngYY887q2jGKmX_vADG9uSqPTg7Axh3ZV9X5GIMgqszeWH9NGsXCvio4kqr7cSa68r-pYLPZmRw9fN_KsCdpWUKcgH_0jPOZ62sLt5-5rcj7-EC_ycAAP__-Sr8BQ">