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

    <tr>
        <th>Summary</th>
        <td>
            Clang frontend segfault during consteval evaluation
        </td>
    </tr>

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

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

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

<pre>
    I first came across this [on Godbolt](https://godbolt.org/z/v4a65W7nz), but was able to duplicate it on macOS using Clang 14 built using Homebrew with the [proposed LLVM 14 patch](https://github.com/Homebrew/homebrew-core/pull/97618). According to Godbolt, Clang 12 and up crash on this input.

I had to slightly modify `creduce-clang-crash.py` to get it to work with the stack traces I was getting, but hopefully it still worked as intended.

Original test.cpp, compiled using `/usr/local/opt/llvm/bin/clang++ -std=c++20 test.cpp`:

```cpp
#include <array>
#include <tuple>

template <template <typename> typename finish_result = std::add_const>
consteval auto transform_array(const auto &arr, auto func) {
  using arr_type = std::remove_reference_t<decltype(arr)>;
  using value_type = typename arr_type::value_type;
  constexpr auto rows = std::tuple_size_v<arr_type>;
  using transform_result = decltype(func(std::declval<value_type>()));
  using result_type = typename finish_result<transform_result>::type;
  return [&arr, func ]<std::size_t... Is>(std::index_sequence<Is...>) {
    return std::array<result_type, rows>{func(arr[Is])...};
  }
  (std::make_index_sequence<rows>());
}

template <auto arr> consteval auto transpose() {
  constexpr auto inner = []<typename T, std::size_t R, std::size_t C>(
                             std::array<const std::array<T, C>, R>) {
    return []<std::size_t... Is>(std::index_sequence<Is...>) {
      return std::array<const std::array<T, R>, C>{
          transform_array(arr, [](const auto &row) { return row[Is]; })...};
    }
    (std::make_index_sequence<C>());
  };
  return inner(arr);
}

constexpr std::array<const std::array<const double, 3>, 3> cin = {
    {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}};
auto in = cin;
auto cout = transpose<cin>();
```

Backtrace for original input:

```
Stack dump:
0.      Program arguments: /usr/local/Cellar/llvm/14.0.0/bin/clang-14 -cc1 -triple x86_64-apple-macosx10.15.0 -Wundef-prefix=TARGET_OS_ -Werror=undef-prefix -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj -mrelax-all --mrelax-relocations -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name test.cpp -mrelocation-model pic -pic-level 2 -mframe-pointer=all -ffp-contract=on -fno-rounding-math -funwind-tables=2 -fcompatibility-qualified-id-block-type-checking -fvisibility-inlines-hidden-static-local-var -target-cpu penryn -tune-cpu generic -mllvm -treat-scalable-fixed-error-as-warning -debugger-tuning=lldb -target-linker-version 609.8 -fcoverage-compilation-dir=/tmp/crash -resource-dir /usr/local/Cellar/llvm/14.0.0/lib/clang/14.0.0 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk -stdlib=libc++ -internal-isystem /usr/local/opt/llvm/bin/../include/c++/v1 -internal-isystem /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/local/include -internal-isystem /usr/local/Cellar/llvm/14.0.0/lib/clang/14.0.0/include -internal-externc-isystem /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include -std=c++20 -fdeprecated-macro -fdebug-compilation-dir=/tmp/crash -ferror-limit 19 -stack-protector 1 -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fgnuc-version=4.2.1 -fno-implicit-modules -fcxx-exceptions -fexceptions -fmax-type-align=16 -fcolor-diagnostics -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /var/folders/38/7n17x4m55w523lmdfxz5yxtr0000gn/T/test-ea69c0.o -x c++ test.cpp
1.      test.cpp:32:28: current parser token ')'
2.      test.cpp:17:36: instantiating function definition 'transpose<{{{{1.000000e+00, 2.000000e+00, 3.000000e+00}}, {{4.000000e+00, 5.000000e+00, 6.000000e+00}}, {{7.000000e+00, 8.000000e+00, 9.000000e+00}}}}>'
3.      test.cpp:18:26: instantiating function definition 'transpose()::(anonymous class)::operator()<const double, 3UL, 3UL>'
4.      test.cpp:20:12: instantiating function definition 'transpose()::(anonymous class)::operator()(std::array<const std::array<const double, 3UL>, 3UL>)::(anonymous class)::operator()<0UL, 1UL, 2UL>'
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0  libLLVM.dylib            0x000000010f992b54 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 43
1  libLLVM.dylib            0x000000010f992f5b SignalHandler(int) + 168
2  libsystem_platform.dylib 0x00007fff6ad515fd _sigtramp + 29
3  libsystem_platform.dylib 000000000000000000 _sigtramp + 18446603338723813920
4  libclang-cpp.dylib       0x000000010cff813c EvaluateInPlace(clang::APValue&, (anonymous namespace)::EvalInfo&, (anonymous namespace)::LValue const&, clang::Expr const*, bool) + 198
5  libclang-cpp.dylib       0x000000010cff7df2 clang::Expr::EvaluateAsConstantExpr(clang::Expr::EvalResult&, clang::ASTContext const&, clang::Expr::ConstantExprKind) const + 386
6  libclang-cpp.dylib       0x000000010d5a1bf7 clang::Sema::PopExpressionEvaluationContext() + 1597
7  libclang-cpp.dylib       0x000000010cdd1f5a clang::EnterExpressionEvaluationContext::~EnterExpressionEvaluationContext() + 18
8  libclang-cpp.dylib       0x000000010d8c8970 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) + 3278
9  libclang-cpp.dylib       0x000000010d3828fc clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) + 74
10 libclang-cpp.dylib       0x000000010d8495e8 clang::Sema::DeduceReturnType(clang::FunctionDecl*, clang::SourceLocation, bool) + 220
11 libclang-cpp.dylib       0x000000010d56d724 clang::Sema::DiagnoseUseOfDecl(clang::NamedDecl*, llvm::ArrayRef<clang::SourceLocation>, clang::ObjCInterfaceDecl const*, bool, bool, clang::ObjCInterfaceDecl*) + 1174
12 libclang-cpp.dylib       0x000000010d792506 CreateFunctionRefExpr(clang::Sema&, clang::FunctionDecl*, clang::NamedDecl*, clang::Expr const*, bool, clang::SourceLocation, clang::DeclarationNameLoc const&) + 122
13 libclang-cpp.dylib       0x000000010d797e0c clang::Sema::BuildCallToObjectOfClassType(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation) + 2764
14 libclang-cpp.dylib       0x000000010d571eec clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) + 928
15 libclang-cpp.dylib       0x000000010d588653 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) + 79
16 libclang-cpp.dylib       0x000000010d89b3de clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) + 376
17 libclang-cpp.dylib       0x000000010d8adecc clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformReturnStmt(clang::ReturnStmt*) + 24
18 libclang-cpp.dylib       0x000000010d8a8bfb clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) + 299
19 libclang-cpp.dylib       0x000000010d8923ce clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) + 76
20 libclang-cpp.dylib       0x000000010d8c87b8 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) + 2838
21 libclang-cpp.dylib       0x000000010d3828fc clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) + 74
22 libclang-cpp.dylib       0x000000010d8495e8 clang::Sema::DeduceReturnType(clang::FunctionDecl*, clang::SourceLocation, bool) + 220
23 libclang-cpp.dylib       0x000000010d56d724 clang::Sema::DiagnoseUseOfDecl(clang::NamedDecl*, llvm::ArrayRef<clang::SourceLocation>, clang::ObjCInterfaceDecl const*, bool, bool, clang::ObjCInterfaceDecl*) + 1174
24 libclang-cpp.dylib       0x000000010d792506 CreateFunctionRefExpr(clang::Sema&, clang::FunctionDecl*, clang::NamedDecl*, clang::Expr const*, bool, clang::SourceLocation, clang::DeclarationNameLoc const&) + 122
25 libclang-cpp.dylib       0x000000010d797e0c clang::Sema::BuildCallToObjectOfClassType(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation) + 2764
26 libclang-cpp.dylib       0x000000010d571eec clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) + 928
27 libclang-cpp.dylib       0x000000010d588653 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) + 79
28 libclang-cpp.dylib       0x000000010d89b3de clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) + 376
29 libclang-cpp.dylib       0x000000010d8adecc clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformReturnStmt(clang::ReturnStmt*) + 24
30 libclang-cpp.dylib       0x000000010d8a8bfb clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) + 299
31 libclang-cpp.dylib       0x000000010d8923ce clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) + 76
32 libclang-cpp.dylib       0x000000010d8c87b8 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) + 2838
33 libclang-cpp.dylib       0x000000010d3828fc clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) + 74
34 libclang-cpp.dylib       0x000000010d8495e8 clang::Sema::DeduceReturnType(clang::FunctionDecl*, clang::SourceLocation, bool) + 220
35 libclang-cpp.dylib       0x000000010d56d724 clang::Sema::DiagnoseUseOfDecl(clang::NamedDecl*, llvm::ArrayRef<clang::SourceLocation>, clang::ObjCInterfaceDecl const*, bool, bool, clang::ObjCInterfaceDecl*) + 1174
36 libclang-cpp.dylib       0x000000010d790c22 FinishOverloadedCallExpr(clang::Sema&, clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, clang::OverloadCandidateSet*, clang::OverloadCandidate**, clang::OverloadingResult, bool) + 190
37 libclang-cpp.dylib       0x000000010d790b0e clang::Sema::BuildOverloadedCallExpr(clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) + 494
38 libclang-cpp.dylib       0x000000010d571d31 clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) + 485
39 libclang-cpp.dylib       0x000000010d588653 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) + 79
40 libclang-cpp.dylib       0x000000010ce0120f clang::Parser::ParsePostfixExpressionSuffix(clang::ActionResult<clang::Expr*, true>) + 2901
41 libclang-cpp.dylib       0x000000010ce02be0 clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) + 1122
42 libclang-cpp.dylib       0x000000010ce0547f clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) + 11521
43 libclang-cpp.dylib       0x000000010ce00653 clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, clang::Parser::TypeCastState, bool, bool*) + 41
44 libclang-cpp.dylib       0x000000010cdff497 clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState) + 187
45 libclang-cpp.dylib       0x000000010cde0dfe clang::Parser::ParseDeclarationAfterDeclaratorAndAttributes(clang::Declarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::ForRangeInit*) + 2804
46 libclang-cpp.dylib       0x000000010cddef56 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::SourceLocation*, clang::Parser::ForRangeInit*) + 2086
47 libclang-cpp.dylib       0x000000010ce6354c clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributesWithRange&, clang::ParsingDeclSpec&, clang::AccessSpecifier) + 822
48 libclang-cpp.dylib       0x000000010ce62fa2 clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributesWithRange&, clang::ParsingDeclSpec*, clang::AccessSpecifier) + 284
49 libclang-cpp.dylib       0x000000010ce6273a clang::Parser::ParseExternalDeclaration(clang::ParsedAttributesWithRange&, clang::ParsingDeclSpec*) + 2150
50 libclang-cpp.dylib       0x000000010ce61482 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, bool) + 1118
51 libclang-cpp.dylib       0x000000010cdcd563 clang::ParseAST(clang::Sema&, bool, bool) + 528
52 libclang-cpp.dylib       0x000000010e1767f3 clang::FrontendAction::Execute() + 77
53 libclang-cpp.dylib       0x000000010e11628c clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 706
54 libclang-cpp.dylib       0x000000010e1cae13 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 515
55 clang-14                 0x000000010cc99819 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 2351
56 clang-14                 0x000000010cc977f2 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) + 265
57 clang-14                 0x000000010cc97237 main + 8084
58 libdyld.dylib            0x00007fff6ab58cc9 start + 1
59 libdyld.dylib            0x0000000000000048 start + 18446603338725880704
clang-14: error: unable to execute command: Segmentation fault: 11
clang-14: error: clang frontend command failed due to signal (use -v to see invocation)
Homebrew clang version 14.0.0
Target: x86_64-apple-darwin19.6.0
Thread model: posix
InstalledDir: /usr/local/opt/llvm/bin
```

[Preprocessed input: test-1cba74.cpp](https://github.com/llvm/llvm-project/files/8474936/test-1cba74-cpp.txt)

[Crash script: test-1cba74.sh](https://github.com/llvm/llvm-project/files/8474941/test-1cba74-sh.txt)

Input processed using `creduce-clang-crash.py` (raw form [here](https://github.com/llvm/llvm-project/files/8474945/test-1cba74.reduced-cpp.txt)):

```cpp
using ::a __attribute__((using_if_exists;
            template < class , b... > struct c {       }
         template < a... n > using index_sequence = c< a, n... >;
         template < class b, b d > using __make_integer_sequence =     __make_integer_seq< c, b, d >;
         template < a e > using f = make_integer_sequence< a, e >;
         template < class , g > struct array {       }
         consteval auto h(auto , auto ) {       }
         template < auto arr > auto i() {
  []<typename j, a k, a l>(array<const array<j, l>, k>) {
    []<a... m>(stdindex_sequence<m...>) {
      array{h(arr, [] { m })...};
    }
    (f<l>());
  }
  (arr);        }
         array< const array< double, 3 >, 3 > cin = i< cin >
```

This appears to result in a slightly different stack trace and a different parser state, but not sure if that is relevant.

[Backtrace for reduced input: clang-14_2022-04-12-123520_rp-2.crash.txt](https://github.com/llvm/llvm-project/files/8474961/clang-14_2022-04-12-123520_rp-2.crash.txt)

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzlXFtz4zay_jWeFxRVvIrkgx9k2U5c6zkzNXKSc_ZFBYGgxJgiGZC05fz67QbAmyjJnE2ymT3jkiUSl0Z3o9H9ASSwyaO36wcSJ6KsCKN7TigTeVmSapeU5Mq7yTPyQx5t8rS68m6v7GBXVUV55Syu7Hv4bFXWLBdbuPsd_l9cOvd-8TO4Dq_sJdnUFXmlJaGblJMqJ1FdpAmjFSdJRYD4nrJPK1KXSbYly5TCt-VCpSStdOKP-Z5vBH8lr0m1A7Y4clWIvMhLHpHHx58_Yo2CVmx3kkOoVW9mLN_DTUMLLnf60mC54HBf1GkKP6E_twJgfUYWDHIi5AC4blQAAmkmbUKziNQFYYKWO5REaizJirqaXZm3V-ZCfT-QHY2QRpkm212VvpF9HiXxG7mam0zwqGbcYEjTkJRmxRtkYPktr1BHcPWai-dO_LKi7JlUgjJekgepXChaAaeNvnd5wWOQ5w3rl1WSppIEqIsihxXPIh4NmPwkkm2S0ZRUvKxmrCiQFOisSFKopToC2AIF1aWA7zRnFNWVFxXepS-o3U2SwbeU5cq-gQ8xyiq6cm6ZurXNjjzQchZ9DjBFfjBXpdhOkrG0jqDHnSUVgr5dOXen8iqwKd7lye-K74sUzQzz-9dvBc_AzqE4aa7B_LOk3K0FL2uwO-CYSMYX8KFRtGZ5VlYtfXnHX0BZtIbOgY7IyjgX-7Vi0Q5kAZV5Zc8hFZUpb-M6A12E5Mq_UbSI1i0UWiM3w7YF3-cvHNiKueAZ42tgYhlxlmJRaEiSDpEx54gecFfzjmIraNOOot-V6hFQ4h0KoVgW-Ws55Epqe10mv_P1i-oYTWLMRqebnmp7Aih9BC1pzAKmgGqftTsoIr2J_By3oSifkHXQqdjzR8xIhqVAQwUIXtUiQy_T9R4yStC9OMuWWamBajabkYdSMdlmJTDADuuS_1Zjt0GlhxLKyUKDzm8b68xNmfmyJxW2j72A1f0brTLky7uBhtHlhUjcv-3JgHfNZY-vPX3m6xFzDfFWyw2dlsp4SEnbQCZgGJ0aEOidFcG-vEe2lWQZF7LTUNlSu23vPaHYR7omX04lLjXvrU7P_o20rEbqKFm2rcguoc3z3day_ecaxXmzuMTwF83wUhnKsT7Gfkrbthbi2G-BVWjGGm4wpbE550ba2AnTGxjfFPNbnrQ9RWY0KqXJ9FzfaUvt7GyqBlVylNcAU1ApjlamIw08yZSV-gMpb-BjYSFblUR9LDHdxV8Pv-Zdoo-_AX6FmKg-Df96OMhWoLVhOstr5Tm7kQUMY6lGb60amiDaV8YNwAWJFgj0PsmbSC-RyrkgrG5XEmlE9b5oy5kAG8LPIt8Kuofxv633PKsQbZERNljyNKWigweWOzNn5hAnGADdDMYsYlQigbBCDsF8PXcNWsCNAdgwLw-WObO8mUmMX2owndgoIB4mB9DH0-LLD3dP60-rNeRxIXLwRrf9MpAccbhEuBkZ-eZXZiQlNeqSbnmvyoUyfJ9UmEiMveApPRgUsJTR3MA3yFolYDvEiKAaGI8RCw4VWcqpMGhZGRsOaufGBlQJuKsrh1oxXrhI4gScICYzKiJDBj4DXSDQ3NMkM2LAYDKhRU-KG920AXCSp6RIGDHgy0j5C9zaUCaGPuJGkSPiQzkl73FcAOTN0CCg928BtxpxlhsiB8VBOIUmAWYaEGVeYaAaFbIK3XsL9GLEg9DkJkmT6s34raYp8h4ZSWRsgJtnA523wXacPWNgNuKXpGxKJ1maZLw0dkkU8QxwIRACXtFUQGSQvwJj4pXBippABBBvwFdVZ1wmbDkMepRvj0pDW-G0MkBfqdJ4cgAuZG-Cxo1XKjLZfsQ39XbLBRJCdOzcpmm0aZsChp4hE7qgBDWSuRnOAiklpEDnGwr-Kh1HCSoQrLaCsQC2KzE_9H-Z1wLwO2R_hf2nyabDyTqZgNW9lSLPKyT0mGwEFeCj72-xNwHOI51lvt_DpOMRFPmU52kJSavbf-DPR5xE_a8aKGX0LHE3tgISJxvWgHFpBzD0ZVMQzMcsn4Dz4N7te421kWtFDCd61mmKf5D3EU8Nzp_A_ldp_CRpfsAL9lfI0zZ2PCcy4p4D2uP0WyaB7U4wwViZfZqAoyJWiNTB0YD_yyvOKvD30EuxHJ0lFs4YOAspJU4B9bAtk21GIboCb-C8tglILoxtmm9AIRHQgCEFc08D-DtAI0a8zWrWDBtgyZ3ZM0t5kWSPk3twmeCT6hQ9WMwOB2iP8UK7yXhwswcvKr0G-JItErPmcgimIFOU0G2Ww_SVQcnb9fqH5XL94-Lnu_XtL4sv9_Z6ef-wXqw-YiViIGS5f5GdH-dpBMzBlQPB8d7PLP_g7j3v1bOddB_Fh9-9t0MlTPjbooU_oU7BsxqczkNmzkD9B9IMmnbCKqOfhdGvTXIWjg1fEIIh_LFawBytIgUVJfjzKgdvDzz5Etb4qrp9VN3ykcYcqycAP2hWJRTn8XK6gSqCuRLOYuQlUOnHfwU_NAiZmfIPBuiNaUpEMkpxhikKfihkgohlVN4bpcwvUvBH5YNRSniKggZCd62WnGMtoX7tf0dLGhwt5GJQQLM8e9vndUnAEZRlm4UjmoKZN8XHWPCnx-anx6Z7xKaNKxqW_Z9iswervxbaajm6q39DR6bSiaV-7KFqOtwoV60QvpZv-02eEoVrgArPSnQ4b3lNdvSFE4mGVCGYQQnEwpAnyOfF04-AWUnJK7n4xbOXROQZok6CuAGwKi4Brlf_9_Hm0-PDP---rLGKXkKT2AcvkkqLokAsIRARsN4seoOr_hzRPCgbNS0zDkN747mSNz27eyvVxWcBhKWYT4isQaCukKCva3BbgFEgBs1RPVBWTqXAn7iO9iTTWYi9DVmhi05_hIiTyulPj6I111NfW5JUgWuNE3Wc7GnqiqQfx_GcRp7lxRFZg9sHG4Q-QiqgHTX4LhEZ_R0RsQLXnc9Nx3EC33YCywltPZNwJVm9zFkUA5l74rI4hlqM3CEKhnjzkH1OlXpV7Jb6XXz-GTGy1u3AaKV5FbKGNlyk9JDF-bTSj5KyWqbQNXoN3-GEUuct5ForRP62G0LdDd5kUf0oto_pd1yj_ItymStfIvMGahiW_qKWtEY8L1ZPQAIid3VJKnXVb-sfgP5RNOU8UEAnmCsB59MEjDxqbWK_39SK76keP3mBrfASMYSWFq40q83CEarVC7VT8SfqNYqs2KMDCRHdXWpOeT__7t2CPb50bwcTlRGwIPTN08p4aMMFv9ex4rYNFcNOX8n5xqOe-h31ZFeZpQMLPf5VIji2r4UIJwrhBHYQs9NCiDr7BXz9qo5jQIBce8dVMRq-YxE619mESlzyxkXgPIlIE3LuGr59V7tQc6Lq3dDjwWmub-Xzly9ybelJrUlfVuhFQfratRvXZ1kTh8s88m33DJsKCvOfSv4pVtz0-fwfcGRRj8lOoQvEAF-kMs9zrsBAL__T5tflA46FGHoP6Z7wet3vpYqyih4xVttx9jSN-KHtmXOyxNl-OzJAmLEvlJoaebbL3XestPcd_Tu938tEslTIHGwGSvW8r1aHbWttOFO14XPzzOC7qZM0WtI0fcqhC2Di9yleIn4bm_SK5Zh0SuIpFt5Z1sdarg2dNrCG3MiyjinqseLPG9NwJw4W3-L8PWWcsJNvS_pzTJzy1mHzhMPyJqooCOaec1pFC7CQ7L9YRToQaMxqzScGgnDjRLxP8Elw_tQ8F8FJ9WV4-KQfgHUBG9eP7xpams5pvXapLf-OrxGV5U8UgEacsb9cABUOV9W-GorQT2-FsJuRG0yVIdjEm7--E_J9gUvaYymGOSMcb4eNVYVTrcp2GD89zlb1pqzGLPSa7qV-BACfPOIaYyPiQj9feUzKahRAGuOxp8IgFvibMzDob0KgduA0c9eJIOnbQqD2RCDzNyNQeyLC-H4QqD0RZnwfCNSeiCi-CwRqTwQT3zECtSfCle8HgdpTwc-3ikDtqWDnG0agzlQg9N-CQJ2JoOjvRqDOVBj0LSNQZyJI-rYQqDMRyPzNCNSZumbx3SBQZyLM8EOTwTTjXr7L_OmFizQHF3wOXJwEoV8VT3_K8KWm9IVHj3n-XBffVtQdKlprY0mzKInAcaz4CZ82KiWLnCuVZNvmSdrx473GlCeCH-i4jXnGKUt8-G5n_n_qtlO-1w2bsTARPQHkjiAmfkeQ2w08raKJ-Oz7gdzuNLTHuGnZZtwn-Fm-odW7_pyXVZwcuge_MoAfjt460HN_vZnktJYqUfNelLZD09LcToNywK294eZFbpe0rDpWh0z2C2M5ea8e5R8b2HGU6FdFFIDVAb5UfFy1F86aJQR3GgQE-TzXv9wb35R8nt104DR4CAKaRwPwzxfwD0rlNiJNw44simM39C-KtCjxHVKcKEwR7IjR5oWK5r26aViRRdyMYn6Rrd4i2CIGRNbc52KRRYuqEsmmrng55LQrdNmI5HXUzQXj_NwbNv1a97n4AhlQPhnMYQNTB0N3GjBkUcRjb_6u-D-IvC7GXQE4B3NXBWdjfjsNtO-9XHTXxwFiirxm8zaROw1PMT53PJe9K-8n0Zs-PujXuk-YYq_7ccomeTzdcxdVtWAMrB3z5DaORryg9YvToA1IZ8fUnmrMAyFPzpH_iIzH3XlGRjtoLHYaNkEZfYdelPHuoDqsJ-ufKpfm3PI0mPemgoi55QaXu-cpL-TKyXhm-qmgv9X8cyWGsKEdnRIn3WkBBnMOq3nLzJsIHyIGU-hx9Fmsns5OFE_BTq9Z6fWmhXVu-XM_HrR7L3K5z1zBpgYocVZX7bZQBHPa53vToiu3rDnI0W9nqfaoC7V-xPigJd34cD1jyFhvNcvUHsmbFhe5xSi3nCFUlc12PL20PvJ4_W_Ac2eanqUBv-cpwrhB7viv3-MsDAMrJIxZa9wsNngRuY_Cd7T3PEkD8EEaJOBSU3-YOJ5GCk2ceZ8Z349t0qhhaT1Jo-qxtNrD_ONnuTPlAQLnSc7aHrHnjTL8ye3bMD9HRSg3bDY-ypN-GHoyOve6tXo3euMFQAWPWBDqrddGA-F79bs_8Pm9-v1XomF2ZvpNoG8kAq0QvRNxQeqsOSeDKyXiIQy40QgzV3yLEEtaFImpnIgswEtcoCcTSaxtviEGleW5DlEtm5L7f1JcZKxLTowXmcY5SXr2q2dd7WEcinCzd07vqJJFnuTuOmx8sJczouI1yaxwNm8L7gSnEZHbF7F4kZcw6VJnZuDISIHF20SK8f5GtfPbX6-8m8-CFyLHKAZCN_te5dYew2Ib6rtyC8d7h4fo1uROBSCHDzlxt1GCGyTt-8D13dCZN3uJFF3pP6pD1eqvZWkpt2-VTCTFiJny_YNMJvACMH_IS7k7wcoDaoN02mmP-jh_NAlwJugrbibe497xHRf8T-HXG_I7UwxEfR329nCcOzVECyC9DSXrNW2wwnotA08gC6yTeM0PSYlbl0c75Qnpn3SApl7inhWIkbivHzeElzDRZxVhcne8-htseh8ToVg1k5UVh8Nt8GrjtyyIDWW6oTFzJzjbSNZI1CO-Xuut9hXfcjFsBf_G-ZKcJIRf0YTGKeG9FmNJ-2SrrVR8skhYetvXtNzLdFHbR4dQ7PAZnjrJYNkcaRB-RXfp4y0kD2pz_vg0i_GhFb_K1siz-knVBv3hPqzmThZNdSh-PnUKREte2s6-PU1idIDC_uwxEqox_2Z3fNqD1MR--hEOiCHSC-c0dGeNtAczkLOablRAhhrpb1EjzQ410j9_IZGV5M3dBY__hAcxQdThgH0xlumzZ6Ae7Q5hipJYnqpT9c9Tkmc60V6e3s1Ztksq4CyzHOrg5rUkJtWOAuESmkjB9rLhyU-g6uHZC9qjdSGoidlr27Rtw3QNy4aP49nmWhSGPVNuF53fn-Bg51bv1IX3W2zixIfo2olCJ6QfqqRK-fVyCClKvpVQBMCEQEfQjUPebp_5UIv0-quZT8qyltx7LmCnD7trP2R0zizm-67tBGbsmC53XZOGUTzfRMz-kNINT8trZeIfkmuU0XQt2_It05rPqO24myD05ozSwLTolWvCPChJZ9gwHmH2QVxLHjb1toTMFONDl0nlIhfnDX1wC7tcXFdlYM8DN_gg-b2WzP4L1ml_Yg">