From 3ea8d691e889945dfa12d50d7fa232e6286506d1 Mon Sep 17 00:00:00 2001 From: Alfie Richards Date: Mon, 14 Apr 2025 14:11:29 +0000 Subject: [PATCH 001/216] fmv: Redirect to specific target Adds an optimisation in FMV to redirect to a specific target if possible. A call is redirected to a specific target if both: - the caller can always call the callee version - and, it is possible to rule out all higher priority versions of the callee fmv set. That is estabilished either by the callee being the highest priority version, or each higher priority version of the callee implying that, were it resolved, a higher priority version of the caller would have been selected. For this logic, introduces the new TARGET_OPTION_FUNCTIONS_B_RESOLVABLE_FROM_A hook. Adds a full implementation for Aarch64, and a weaker default version for other targets. This allows the target to replace the previous optimisation as the new one is able to cover the same case where two function sets implement the same versions. gcc/ChangeLog: * config/aarch64/aarch64.cc (aarch64_functions_b_resolvable_from_a): New function. (TARGET_OPTION_FUNCTIONS_B_RESOLVABLE_FROM_A): New define. * doc/tm.texi: Regenerate. * doc/tm.texi.in: Add documentation for TARGET_OPTION_FUNCTIONS_B_RESOLVABLE_FROM_A. * multiple_target.cc (redirect_to_specific_clone): Add new optimisation logic. (ipa_target_clone): Remove check for TARGET_HAS_FMV_TARGET_ATTRIBUTE. * target.def: Document new hook.. * attribs.cc: (functions_b_resolvable_from_a) New function. * attribs.h: (functions_b_resolvable_from_a) New function. gcc/testsuite/ChangeLog: * g++.target/aarch64/fmv-selection1.C: New test. * g++.target/aarch64/fmv-selection2.C: New test. * g++.target/aarch64/fmv-selection3.C: New test. * g++.target/aarch64/fmv-selection4.C: New test. * g++.target/aarch64/fmv-selection5.C: New test. * g++.target/aarch64/fmv-selection6.C: New test. * g++.target/aarch64/fmv-selection7.C: New test. --- gcc/attribs.cc | 22 ++++ gcc/attribs.h | 1 + gcc/config/aarch64/aarch64.cc | 28 +++++ gcc/doc/tm.texi | 19 +++ gcc/doc/tm.texi.in | 2 + gcc/multiple_target.cc | 114 ++++++++++++------ gcc/target.def | 22 ++++ .../g++.target/aarch64/fmv-selection1.C | 40 ++++++ .../g++.target/aarch64/fmv-selection2.C | 40 ++++++ .../g++.target/aarch64/fmv-selection3.C | 25 ++++ .../g++.target/aarch64/fmv-selection4.C | 30 +++++ .../g++.target/aarch64/fmv-selection5.C | 28 +++++ .../g++.target/aarch64/fmv-selection6.C | 27 +++++ .../g++.target/aarch64/fmv-selection7.C | 65 ++++++++++ 14 files changed, 425 insertions(+), 38 deletions(-) create mode 100644 gcc/testsuite/g++.target/aarch64/fmv-selection1.C create mode 100644 gcc/testsuite/g++.target/aarch64/fmv-selection2.C create mode 100644 gcc/testsuite/g++.target/aarch64/fmv-selection3.C create mode 100644 gcc/testsuite/g++.target/aarch64/fmv-selection4.C create mode 100644 gcc/testsuite/g++.target/aarch64/fmv-selection5.C create mode 100644 gcc/testsuite/g++.target/aarch64/fmv-selection6.C create mode 100644 gcc/testsuite/g++.target/aarch64/fmv-selection7.C diff --git a/gcc/attribs.cc b/gcc/attribs.cc index 29b88b8d8360..7d7f8f36a7fc 100644 --- a/gcc/attribs.cc +++ b/gcc/attribs.cc @@ -1086,6 +1086,28 @@ make_attribute (string_slice name, string_slice arg_name, tree chain) return attr; } +/* Default implementation of TARGET_OPTION_FUNCTIONS_B_RESOLVABLE_FROM_A. + Used to check very basically if DECL_B is callable from DECL_A. + For now this checks if the version strings are the same. */ + +bool +functions_b_resolvable_from_a (tree decl_a, tree decl_b, + tree base ATTRIBUTE_UNUSED) +{ + const char *attr_name = TARGET_HAS_FMV_TARGET_ATTRIBUTE + ? "target" + : "target_version"; + + tree attr_a = lookup_attribute (attr_name, DECL_ATTRIBUTES (decl_a)); + tree attr_b = lookup_attribute (attr_name, DECL_ATTRIBUTES (decl_b)); + + gcc_assert (attr_b); + if (!attr_a) + return false; + + return attribute_value_equal (attr_a, attr_b); +} + /* Comparator function to be used in qsort routine to sort attribute specification strings to "target". */ diff --git a/gcc/attribs.h b/gcc/attribs.h index c4a4fb0e50b0..b6f3d5a0f9bb 100644 --- a/gcc/attribs.h +++ b/gcc/attribs.h @@ -56,6 +56,7 @@ extern struct scoped_attributes * extern char *sorted_attr_string (tree); extern tree make_dispatcher_decl (const tree); extern bool is_function_default_version (const tree); +extern bool functions_b_resolvable_from_a (tree, tree, tree); extern void handle_ignored_attributes_option (vec *); /* Return a type like TTYPE except that its TYPE_ATTRIBUTES diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index 9ccee4b8f3fa..031da8638602 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -20640,6 +20640,30 @@ aarch64_compare_version_priority (tree decl1, tree decl2) return compare_feature_masks (mask1, mask2); } +/* Implement TARGET_OPTION_FUNCTIONS_B_RESOLVABLE_FROM_A. */ + +bool +aarch64_functions_b_resolvable_from_a (tree decl_a, tree decl_b, tree baseline) +{ + auto baseline_isa = aarch64_get_isa_flags + (TREE_TARGET_OPTION (aarch64_fndecl_options (baseline))); + auto isa_a = baseline_isa; + auto isa_b = baseline_isa; + + auto a_version = get_target_version (decl_a); + auto b_version = get_target_version (decl_b); + if (a_version.is_valid ()) + aarch64_parse_fmv_features (a_version, &isa_a, NULL, NULL); + if (b_version.is_valid ()) + aarch64_parse_fmv_features (b_version, &isa_b, NULL, NULL); + + /* Are there any bits of b that arent in a. */ + if (isa_b & (~isa_a)) + return false; + + return true; +} + /* Build the struct __ifunc_arg_t type: struct __ifunc_arg_t @@ -32854,6 +32878,10 @@ aarch64_libgcc_floating_mode_supported_p #undef TARGET_COMPARE_VERSION_PRIORITY #define TARGET_COMPARE_VERSION_PRIORITY aarch64_compare_version_priority +#undef TARGET_OPTION_FUNCTIONS_B_RESOLVABLE_FROM_A +#define TARGET_OPTION_FUNCTIONS_B_RESOLVABLE_FROM_A \ + aarch64_functions_b_resolvable_from_a + #undef TARGET_GENERATE_VERSION_DISPATCHER_BODY #define TARGET_GENERATE_VERSION_DISPATCHER_BODY \ aarch64_generate_version_dispatcher_body diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index 218bf3abbde8..981bb2dca0ea 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -10983,6 +10983,25 @@ This target hook returns @code{true} if the target/target-version strings @var{fn1} and @var{fn2} imply the same function version. @end deftypefn +@deftypefn {Target Hook} bool TARGET_OPTION_FUNCTIONS_B_RESOLVABLE_FROM_A (tree @var{decl_a}, tree @var{decl_v}, tree @var{base}) +@var{decl_b} is a function declaration with a function multi-versioning +(FMV) attribute; this attribute is either @code{target} or +@code{target_version}, depending on @code{TARGET_HAS_FMV_TARGET_ATTRIBUTE}. +@var{decl_a} is a function declaration that may or may not have an FMV +attribute. + +Return true if we have enough information to determine that the +requirements of @var{decl_b}'s FMV attribute are met whenever @var{decl_a} +is executed, given that the target supports all features required by +function declaration @var{base}. + +The default implementation just checks whether @var{decl_a} has the same +FMV attribute as @var{decl_b}. This is conservatively correct, +but ports can do better by taking the relationships between architecture +features into account. For example, on AArch64, @code{sve} is present +whenever @code{sve2} is present. +@end deftypefn + @deftypefn {Target Hook} bool TARGET_CAN_INLINE_P (tree @var{caller}, tree @var{callee}) This target hook returns @code{false} if the @var{caller} function cannot inline @var{callee}, based on target specific information. By diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in index 57653a133a65..842ea1244c89 100644 --- a/gcc/doc/tm.texi.in +++ b/gcc/doc/tm.texi.in @@ -7142,6 +7142,8 @@ with the target specific attributes. The default value is @code{','}. @hook TARGET_OPTION_SAME_FUNCTION_VERSIONS +@hook TARGET_OPTION_FUNCTIONS_B_RESOLVABLE_FROM_A + @hook TARGET_CAN_INLINE_P @hook TARGET_UPDATE_IPA_FN_TARGET_INFO diff --git a/gcc/multiple_target.cc b/gcc/multiple_target.cc index e85d7e71442d..02353d9dca62 100644 --- a/gcc/multiple_target.cc +++ b/gcc/multiple_target.cc @@ -423,61 +423,100 @@ expand_target_clones (struct cgraph_node *node, bool definition) return true; } -/* When NODE is a target clone, consider all callees and redirect - to a clone with equal target attributes. That prevents multiple - multi-versioning dispatches and a call-chain can be optimized. - - This optimisation might pick the wrong version in some cases, since knowing - that we meet the target requirements for a matching callee version does not - tell us that we won't also meet the target requirements for a higher - priority callee version at runtime. Since this is longstanding behaviour - for x86 and powerpc, we preserve it for those targets, but skip the optimisation - for targets that use the "target_version" attribute for multi-versioning. */ +/* When NODE is part of an FMV function set, consider all callees and check if + any can provably always resolve a certain version and then call that version + directly. */ static void redirect_to_specific_clone (cgraph_node *node) { - cgraph_function_version_info *fv = node->function_version (); - if (fv == NULL) - return; - - gcc_assert (TARGET_HAS_FMV_TARGET_ATTRIBUTE); - tree attr_target = lookup_attribute ("target", DECL_ATTRIBUTES (node->decl)); - if (attr_target == NULL_TREE) + if (!targetm.compare_version_priority || !optimize) return; /* We need to remember NEXT_CALLER as it could be modified in the loop. */ for (cgraph_edge *e = node->callees; e ; e = e->next_callee) { - cgraph_function_version_info *fv2 = e->callee->function_version (); - if (!fv2) + /* Only if this is a call to a dispatched symbol. */ + if (!e->callee->dispatcher_function) continue; - tree attr_target2 = lookup_attribute ("target", - DECL_ATTRIBUTES (e->callee->decl)); + cgraph_function_version_info *callee_v + = e->callee->function_version (); + cgraph_function_version_info *caller_v + = e->caller->function_version (); + + gcc_assert (callee_v); - /* Function is not calling proper target clone. */ - if (attr_target2 == NULL_TREE - || !attribute_value_equal (attr_target, attr_target2)) + /* Find the default nodes for both callee and caller (if present). */ + cgraph_function_version_info *callee_default_v = callee_v->next; + cgraph_function_version_info *caller_default_v = caller_v; + if (caller_v) { - while (fv2->prev != NULL) - fv2 = fv2->prev; + while (caller_default_v->prev) + caller_default_v = caller_default_v->prev; + if (!is_function_default_version (caller_default_v->this_node->decl)) + caller_default_v = NULL; + } + + /* If this is not the TU that contains the definition of the default + version we are not guaranteed to have visibility of all versions + so cannot reason about them. */ + if (!callee_default_v + || !callee_default_v->this_node->binds_to_current_def_p ()) + continue; + + cgraph_function_version_info *highest_callable_fn = NULL; + for (cgraph_function_version_info *ver = callee_v->next; + ver; + ver = ver->next) + if (targetm.target_option.functions_b_resolvable_from_a + (node->decl, ver->this_node->decl, node->decl)) + highest_callable_fn = ver; - /* Try to find a clone with equal target attribute. */ - for (; fv2 != NULL; fv2 = fv2->next) + if (!highest_callable_fn) + continue; + + bool inlinable = true; + + /* If there are higher priority versions of callee and caller has no + more version information, then not callable. */ + if (highest_callable_fn->next) + { + /* If this is not the TU where the callee default is defined then + cannot reason about the caller versions. */ + if (!caller_default_v + || !caller_default_v->this_node->binds_to_current_def_p ()) + continue; + + /* If every higher priority version would imply a higher priority + version of caller would have been selected, then this is + callable. */ + for (cgraph_function_version_info *callee_ver + = highest_callable_fn->next; + callee_ver; callee_ver = callee_ver->next) { - cgraph_node *callee = fv2->this_node; - attr_target2 = lookup_attribute ("target", - DECL_ATTRIBUTES (callee->decl)); - if (attr_target2 != NULL_TREE - && attribute_value_equal (attr_target, attr_target2)) + bool is_possible = true; + for (cgraph_function_version_info *caller_ver = caller_v->next; + caller_ver; caller_ver = caller_ver->next) + if (targetm.target_option.functions_b_resolvable_from_a + (callee_ver->this_node->decl, caller_ver->this_node->decl, + node->decl)) + { + is_possible = false; + break; + } + if (is_possible) { - e->redirect_callee (callee); - cgraph_edge::redirect_call_stmt_to_callee (e); + inlinable = false; break; } } } + if (inlinable) + { + e->redirect_callee (highest_callable_fn->this_node); + cgraph_edge::redirect_call_stmt_to_callee (e); + } } } @@ -566,9 +605,8 @@ ipa_target_clone (bool early) for (unsigned i = 0; i < to_dispatch.length (); i++) create_dispatcher_calls (to_dispatch[i]); - if (TARGET_HAS_FMV_TARGET_ATTRIBUTE) - FOR_EACH_FUNCTION (node) - redirect_to_specific_clone (node); + FOR_EACH_FUNCTION (node) + redirect_to_specific_clone (node); return 0; } diff --git a/gcc/target.def b/gcc/target.def index b6f95f3ac7a7..3e58dcf54a98 100644 --- a/gcc/target.def +++ b/gcc/target.def @@ -6934,6 +6934,28 @@ DEFHOOK bool, (string_slice fn1, string_slice fn2), hook_stringslice_stringslice_unreachable) +/* Checks if we can be certain that function DECL_A could resolve DECL_B. */ +DEFHOOK +(functions_b_resolvable_from_a, + "@var{decl_b} is a function declaration with a function multi-versioning\n\ +(FMV) attribute; this attribute is either @code{target} or\n\ +@code{target_version}, depending on @code{TARGET_HAS_FMV_TARGET_ATTRIBUTE}.\n\ +@var{decl_a} is a function declaration that may or may not have an FMV\n\ +attribute.\n\ +\n\ +Return true if we have enough information to determine that the\n\ +requirements of @var{decl_b}'s FMV attribute are met whenever @var{decl_a}\n\ +is executed, given that the target supports all features required by\n\ +function declaration @var{base}.\n\ +\n\ +The default implementation just checks whether @var{decl_a} has the same\n\ +FMV attribute as @var{decl_b}. This is conservatively correct,\n\ +but ports can do better by taking the relationships between architecture\n\ +features into account. For example, on AArch64, @code{sve} is present\n\ +whenever @code{sve2} is present.", + bool, (tree decl_a, tree decl_v, tree base), + functions_b_resolvable_from_a) + /* Function to determine if one function can inline another function. */ #undef HOOK_PREFIX #define HOOK_PREFIX "TARGET_" diff --git a/gcc/testsuite/g++.target/aarch64/fmv-selection1.C b/gcc/testsuite/g++.target/aarch64/fmv-selection1.C new file mode 100644 index 000000000000..4ee54466c133 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/fmv-selection1.C @@ -0,0 +1,40 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O2 -march=armv8-a" } */ + +__attribute__((target_version("default"))) +__attribute__((optimize("O0"))) +int foo () +{ + return 1; +} + +__attribute__((target_version("rng"))) +__attribute__((optimize("O0"))) +int foo () +{ + return 2; +} + +__attribute__((target_version("flagm"))) +__attribute__((optimize("O0"))) +int foo () +{ + return 3; +} + +__attribute__((target_version("rng+flagm"))) +__attribute__((optimize("O0"))) +int foo () +{ + return 4; +} + +int bar() +{ + return foo (); +} + +/* Cannot optimize */ +/* { dg-final { scan-assembler-times "\n\tb\t_Z3foov\n" 1 } } */ + diff --git a/gcc/testsuite/g++.target/aarch64/fmv-selection2.C b/gcc/testsuite/g++.target/aarch64/fmv-selection2.C new file mode 100644 index 000000000000..f580dac4458a --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/fmv-selection2.C @@ -0,0 +1,40 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O2 -march=armv8-a+rng+flagm" } */ + +__attribute__((target_version("default"))) +__attribute__((optimize("O0"))) +int foo () +{ + return 1; +} + +__attribute__((target_version("rng"))) +__attribute__((optimize("O0"))) +int foo () +{ + return 2; +} + +__attribute__((target_version("flagm"))) +__attribute__((optimize("O0"))) +int foo () +{ + return 3; +} + +__attribute__((target_version("rng+flagm"))) +__attribute__((optimize("O0"))) +int foo () +{ + return 4; +} + +int bar() +{ + return foo (); +} + +/* Can optimize to highest priority function */ +/* { dg-final { scan-assembler-times "\n\tb\t_Z3foov\._MrngMflagm\n" 1 } } */ + diff --git a/gcc/testsuite/g++.target/aarch64/fmv-selection3.C b/gcc/testsuite/g++.target/aarch64/fmv-selection3.C new file mode 100644 index 000000000000..6b52fd4f644c --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/fmv-selection3.C @@ -0,0 +1,25 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O2 -march=armv8-a" } */ + +__attribute__((target_version("default"))) +__attribute__((optimize("O0"))) +int foo () +{ return 1; } + +__attribute__((target_version("rng"))) +int foo (); +__attribute__((target_version("flagm"))) +int foo (); +__attribute__((target_version("rng+flagm"))) +int foo (); + +__attribute__((target_version("rng+flagm"))) +int bar() +{ + return foo (); +} + +/* Cannot optimize */ +/* { dg-final { scan-assembler-times "\n\tb\t_Z3foov\._MrngMflagm\n" 1 } } */ + diff --git a/gcc/testsuite/g++.target/aarch64/fmv-selection4.C b/gcc/testsuite/g++.target/aarch64/fmv-selection4.C new file mode 100644 index 000000000000..155145dcd885 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/fmv-selection4.C @@ -0,0 +1,30 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O2 -march=armv8-a" } */ + +__attribute__((target_version("default"))) +__attribute__((optimize("O0"))) +int foo () +{ return 1; } + +__attribute__((target_version("rng"))) +int foo (); +__attribute__((target_version("flagm"))) +int foo (); +__attribute__((target_version("rng+flagm"))) +int foo (); + +__attribute__((target_version("default"))) +int bar() +{ + return foo (); +} + +__attribute__((target_version("rng"))) +int bar(); + +__attribute__((target_version("flagm"))) +int bar(); + +/* { dg-final { scan-assembler-times "\n\tb\t_Z3foov\.default\n" 1 } } */ + diff --git a/gcc/testsuite/g++.target/aarch64/fmv-selection5.C b/gcc/testsuite/g++.target/aarch64/fmv-selection5.C new file mode 100644 index 000000000000..4d6d38e3754a --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/fmv-selection5.C @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O2 -march=armv8-a" } */ + +__attribute__((target_version("default"))) +__attribute__((optimize("O0"))) +int foo () +{ return 1; } + +__attribute__((target_version("rng"))) +int foo (); +__attribute__((target_version("flagm"))) +int foo (); +__attribute__((target_version("rng+flagm"))) +int foo (); + +__attribute__((target_version("default"))) +int bar() +{ + return foo (); +} + +__attribute__((target_version("flagm"))) +int bar(); + +/* { dg-final { scan-assembler-times "\n\tb\t_Z3foov\.default\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\tb\t_Z3foov\n" 1 } } */ + diff --git a/gcc/testsuite/g++.target/aarch64/fmv-selection6.C b/gcc/testsuite/g++.target/aarch64/fmv-selection6.C new file mode 100644 index 000000000000..db384e16c099 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/fmv-selection6.C @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O2 -march=armv8-a+rng" } */ + +__attribute__((target_version("default"))) +__attribute__((optimize("O0"))) +int foo () +{ return 1; } + +__attribute__((target_version("rng"))) +int foo (); +__attribute__((target_version("flagm"))) +int foo (); +__attribute__((target_version("rng+flagm"))) +int foo (); + +__attribute__((target_version("default"))) +int bar() +{ + return foo (); +} + +__attribute__((target_version("flagm"))) +int bar(); + +/* { dg-final { scan-assembler-times "\n\tb\t_Z3foov\._Mrng\n" 1 } } */ + diff --git a/gcc/testsuite/g++.target/aarch64/fmv-selection7.C b/gcc/testsuite/g++.target/aarch64/fmv-selection7.C new file mode 100644 index 000000000000..41e7462ebb10 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/fmv-selection7.C @@ -0,0 +1,65 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O2 -march=armv8-a" } */ + +[[gnu::optimize("O0")]] +[[gnu::target_version ("default")]] +int bar () { + return 1; +} + +[[gnu::optimize("O0")]] +[[gnu::target ("+sve2")]] +[[gnu::target_version ("sve")]] +int bar (); + +[[gnu::target ("+sve")]] +int foo () { + return bar(); +} + +/* { dg-final { scan-assembler-times "\n\tb\t_Z3barv\._Msve\n" 1 } } */ + +[[gnu::target_version ("default")]] +int bar2 () { + return 1; +} + +[[gnu::target_version ("sve2")]] +int bar2 (); + +[[gnu::target_version ("default")]] +int foo2 (); + +[[gnu::target_version ("sve")]] +[[gnu::target ("+sve2")]] +int foo2 () { + return bar2(); +} + +/* { dg-final { scan-assembler-times "\n\tb\t_Z4bar2v\._Msve2\n" 1 } } */ + +[[gnu::target_version ("default")]] +int bar3 () { + return 1; +} + +[[gnu::target_version ("sve")]] +int bar3 (); + +[[gnu::target ("+rng")]] +[[gnu::target_version ("sve2")]] +int bar3 (); + +[[gnu::target_version ("default")]] +int foo3 (); + +[[gnu::target_version ("sve")]] +int foo3 () { + return bar3 (); +} + +[[gnu::target_version ("sve2+rng")]] +int foo3 (); + +/* { dg-final { scan-assembler-times "\n\tb\t_Z4bar3v\n" 1 } } */ From 2f5f3eef1d5796defc37ebb46f7ad44d894c14cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Dumont?= Date: Mon, 22 Sep 2025 18:54:46 +0200 Subject: [PATCH 002/216] libstdc++: std::inplace_vector implementation cleaup Remove duplicated std::swap implementation. libstdc++-v3/ChangeLog * include/std/inplace_vector: (std::swap(inplace_vector<>&, inplace_vector<>&)): Remove the duplicated implementation at std namespace level. Keep the friend inline one. (inplace_vector::assign(initializer_list<>)): Add missing return statement. --- libstdc++-v3/include/std/inplace_vector | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/libstdc++-v3/include/std/inplace_vector b/libstdc++-v3/include/std/inplace_vector index 91ceace08f5b..7aa6f9d4ab28 100644 --- a/libstdc++-v3/include/std/inplace_vector +++ b/libstdc++-v3/include/std/inplace_vector @@ -823,6 +823,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __detail::__synth3way); } + // [inplace.vector.special], specialized algorithms constexpr friend void swap(inplace_vector& __x, inplace_vector& __y) noexcept(is_nothrow_swappable_v<_Tp> && is_nothrow_move_constructible_v<_Tp>) @@ -907,13 +908,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } }; - // [inplace.vector.special], specialized algorithms - template - constexpr void - swap(inplace_vector<_Tp, _Nm>& __x, inplace_vector<_Tp, _Nm>& __y) - noexcept(noexcept(__x.swap(__y))) - { __x.swap(__y); } - // specialization for zero capacity, that is required to be trivally copyable // and empty regardless of _Tp. template @@ -992,6 +986,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { if (__il.size() != 0) __throw_bad_alloc(); + return *this; } template<__any_input_iterator _InputIterator> From 4c1d8818dee177b4f6c3adbf747873a0443d02b6 Mon Sep 17 00:00:00 2001 From: Martin Uecker Date: Sat, 13 Sep 2025 08:37:32 +0200 Subject: [PATCH 003/216] c: Fix regression related to DECL_NONLOCAL on aarch64 [PR121933] The recent patch r16-3747-gafa74d37e81 to detect the use of non-local context by nested functions caused regressions on aarch64, because DECL_NONLOCAL was set on labels. Fix this by setting it only to the same types of decls as before. PR target/121933 gcc/c/ChangeLog: * c-typeck.cc (mark_decl_used): Set DECL_NONLOCAL only for VAR_DECL, FUNC_DECL, PARM_DECL. --- gcc/c/c-typeck.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc index b96215adc768..9b2aeea50f4a 100644 --- a/gcc/c/c-typeck.cc +++ b/gcc/c/c-typeck.cc @@ -3696,7 +3696,8 @@ mark_decl_used (tree ref, bool address) if (static_p) C_DECL_USED (ref) = 1; - if (nonloc_p) + if (nonloc_p && (VAR_OR_FUNCTION_DECL_P (ref) + || TREE_CODE (ref) == PARM_DECL)) DECL_NONLOCAL (ref) = 1; /* Nothing to do anymore. */ From 233d3121c3a64e1e39590f5bd545469b05b9024d Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Tue, 30 Sep 2025 17:23:31 -0400 Subject: [PATCH 004/216] diagnostics: simplifying output-spec.cc No functional change intended. gcc/ChangeLog: * diagnostics/output-spec.cc: Rename "parsed_arg" to "scheme_and_kvs" throughout. Rename "unparsed_arg" to "unparsed_spec" throughout, and make a member of output_spec::context rather than passing it around. * diagnostics/output-spec.h: Likewise. * libgdiagnostics.cc: Likewise. * opts-diagnostic.cc: Likewise. Signed-off-by: David Malcolm --- gcc/diagnostics/output-spec.cc | 166 +++++++++++++++------------------ gcc/diagnostics/output-spec.h | 24 +++-- gcc/libgdiagnostics.cc | 7 +- gcc/opts-diagnostic.cc | 26 +++--- 4 files changed, 110 insertions(+), 113 deletions(-) diff --git a/gcc/diagnostics/output-spec.cc b/gcc/diagnostics/output-spec.cc index 8ec638a83bf1..33a5f0d317e8 100644 --- a/gcc/diagnostics/output-spec.cc +++ b/gcc/diagnostics/output-spec.cc @@ -75,13 +75,11 @@ class output_factory virtual std::unique_ptr make_sink (const context &ctxt, diagnostics::context &dc, - const char *unparsed_arg, - const scheme_name_and_params &parsed_arg) const = 0; + const scheme_name_and_params &scheme_and_kvs) const = 0; protected: bool parse_bool_value (const context &ctxt, - const char *unparsed_arg, const std::string &key, const std::string &value, bool &out) const @@ -101,7 +99,7 @@ class output_factory ctxt.report_error ("%<%s%s%>:" " unexpected value %qs for key %qs; expected %qs or %qs", - ctxt.get_option_name (), unparsed_arg, + ctxt.get_option_name (), ctxt.get_unparsed_spec (), value.c_str (), key.c_str (), "yes", "no"); @@ -112,7 +110,6 @@ class output_factory template bool parse_enum_value (const context &ctxt, - const char *unparsed_arg, const std::string &key, const std::string &value, const std::array, NumValues> &value_names, @@ -132,7 +129,7 @@ class output_factory ctxt.report_error ("%<%s%s%>:" " unexpected value %qs for key %qs; known values: %e", - ctxt.get_option_name (), unparsed_arg, + ctxt.get_option_name (), ctxt.get_unparsed_spec (), value.c_str (), key.c_str (), &e); @@ -148,8 +145,7 @@ class output_factory std::unique_ptr make_sink (const context &ctxt, diagnostics::context &dc, - const char *unparsed_arg, - const scheme_name_and_params &parsed_arg); + const scheme_name_and_params &scheme_and_kvs); const scheme_handler *get_scheme_handler (const std::string &scheme_name); @@ -165,8 +161,7 @@ class text_scheme_handler : public output_factory::scheme_handler std::unique_ptr make_sink (const context &ctxt, diagnostics::context &dc, - const char *unparsed_arg, - const scheme_name_and_params &parsed_arg) const final override; + const scheme_name_and_params &scheme_and_kvs) const final override; }; class sarif_scheme_handler : public output_factory::scheme_handler @@ -177,8 +172,7 @@ class sarif_scheme_handler : public output_factory::scheme_handler std::unique_ptr make_sink (const context &ctxt, diagnostics::context &dc, - const char *unparsed_arg, - const scheme_name_and_params &parsed_arg) const final override; + const scheme_name_and_params &scheme_and_kvs) const final override; private: static std::unique_ptr @@ -193,8 +187,7 @@ class html_scheme_handler : public output_factory::scheme_handler std::unique_ptr make_sink (const context &ctxt, diagnostics::context &dc, - const char *unparsed_arg, - const scheme_name_and_params &parsed_arg) const final override; + const scheme_name_and_params &scheme_and_kvs) const final override; }; /* struct context. */ @@ -209,8 +202,7 @@ context::report_error (const char *gmsgid, ...) const } void -context::report_unknown_key (const char *unparsed_arg, - const std::string &key, +context::report_unknown_key (const std::string &key, const std::string &scheme_name, auto_vec &known_keys) const { @@ -218,13 +210,12 @@ context::report_unknown_key (const char *unparsed_arg, report_error ("%<%s%s%>:" " unknown key %qs for format %qs; known keys: %e", - get_option_name (), unparsed_arg, + get_option_name (), get_unparsed_spec (), key.c_str (), scheme_name.c_str (), &e); } void -context::report_missing_key (const char *unparsed_arg, - const std::string &key, +context::report_missing_key (const std::string &key, const std::string &scheme_name, const char *metavar) const { @@ -232,7 +223,7 @@ context::report_missing_key (const char *unparsed_arg, ("%<%s%s%>:" " missing required key %qs for format %qs;" " try %<%s%s:%s=%s%>", - get_option_name (), unparsed_arg, + get_option_name (), get_unparsed_spec (), key.c_str (), scheme_name.c_str (), get_option_name (), scheme_name.c_str (), key.c_str (), metavar); } @@ -250,12 +241,13 @@ context::open_output_file (label_text &&filename) const } static std::unique_ptr -parse (const context &ctxt, const char *unparsed_arg) +parse (const context &ctxt) { scheme_name_and_params result; - if (const char *const colon = strchr (unparsed_arg, ':')) + const char *const unparsed_spec = ctxt.get_unparsed_spec (); + if (const char *const colon = strchr (unparsed_spec, ':')) { - result.m_scheme_name = std::string (unparsed_arg, colon - unparsed_arg); + result.m_scheme_name = std::string (unparsed_spec, colon - unparsed_spec); /* Expect zero of more of KEY=VALUE,KEY=VALUE, etc .*/ const char *iter = colon + 1; const char *last_separator = ":"; @@ -271,7 +263,7 @@ parse (const context &ctxt, const char *unparsed_arg) " expected KEY=VALUE-style parameter for format %qs" " after %qs;" " got %qs", - ctxt.get_option_name (), unparsed_arg, + ctxt.get_option_name (), ctxt.get_unparsed_spec (), result.m_scheme_name.c_str (), last_separator, iter); @@ -295,20 +287,19 @@ parse (const context &ctxt, const char *unparsed_arg) } } else - result.m_scheme_name = unparsed_arg; + result.m_scheme_name = unparsed_spec; return std::make_unique (std::move (result)); } std::unique_ptr -context::parse_and_make_sink (const char *unparsed_arg, - diagnostics::context &dc) +context::parse_and_make_sink (diagnostics::context &dc) { - auto parsed_arg = parse (*this, unparsed_arg); + auto parsed_arg = parse (*this); if (!parsed_arg) return nullptr; output_factory factory; - return factory.make_sink (*this, dc, unparsed_arg, *parsed_arg); + return factory.make_sink (*this, dc, *parsed_arg); } /* class output_factory::scheme_handler. */ @@ -334,10 +325,9 @@ output_factory::get_scheme_handler (const std::string &scheme_name) std::unique_ptr output_factory::make_sink (const context &ctxt, diagnostics::context &dc, - const char *unparsed_arg, - const scheme_name_and_params &parsed_arg) + const scheme_name_and_params &scheme_and_kvs) { - auto scheme_handler = get_scheme_handler (parsed_arg.m_scheme_name); + auto scheme_handler = get_scheme_handler (scheme_and_kvs.m_scheme_name); if (!scheme_handler) { auto_vec strings; @@ -346,12 +336,12 @@ output_factory::make_sink (const context &ctxt, pp_markup::comma_separated_quoted_strings e (strings); ctxt.report_error ("%<%s%s%>:" " unrecognized format %qs; known formats: %e", - ctxt.get_option_name (), unparsed_arg, - parsed_arg.m_scheme_name.c_str (), &e); + ctxt.get_option_name (), ctxt.get_unparsed_spec (), + scheme_and_kvs.m_scheme_name.c_str (), &e); return nullptr; } - return scheme_handler->make_sink (ctxt, dc, unparsed_arg, parsed_arg); + return scheme_handler->make_sink (ctxt, dc, scheme_and_kvs); } /* class text_scheme_handler : public output_factory::scheme_handler. */ @@ -359,40 +349,39 @@ output_factory::make_sink (const context &ctxt, std::unique_ptr text_scheme_handler::make_sink (const context &ctxt, diagnostics::context &dc, - const char *unparsed_arg, - const scheme_name_and_params &parsed_arg) const + const scheme_name_and_params &scheme_and_kvs) const { bool show_color = pp_show_color (dc.get_reference_printer ()); bool show_nesting = true; bool show_locations_in_nesting = true; bool show_levels = false; - for (auto& iter : parsed_arg.m_kvs) + for (auto& iter : scheme_and_kvs.m_kvs) { const std::string &key = iter.first; const std::string &value = iter.second; if (key == "color") { - if (!parse_bool_value (ctxt, unparsed_arg, key, value, show_color)) + if (!parse_bool_value (ctxt, key, value, show_color)) return nullptr; continue; } if (key == "show-nesting") { - if (!parse_bool_value (ctxt, unparsed_arg, key, value, + if (!parse_bool_value (ctxt, key, value, show_nesting)) return nullptr; continue; } if (key == "show-nesting-locations") { - if (!parse_bool_value (ctxt, unparsed_arg, key, value, + if (!parse_bool_value (ctxt, key, value, show_locations_in_nesting)) return nullptr; continue; } if (key == "show-nesting-levels") { - if (!parse_bool_value (ctxt, unparsed_arg, key, value, show_levels)) + if (!parse_bool_value (ctxt, key, value, show_levels)) return nullptr; continue; } @@ -403,8 +392,7 @@ text_scheme_handler::make_sink (const context &ctxt, known_keys.safe_push ("show-nesting"); known_keys.safe_push ("show-nesting-locations"); known_keys.safe_push ("show-nesting-levels"); - ctxt.report_unknown_key (unparsed_arg, key, get_scheme_name (), - known_keys); + ctxt.report_unknown_key (key, get_scheme_name (), known_keys); return nullptr; } @@ -418,16 +406,16 @@ text_scheme_handler::make_sink (const context &ctxt, /* class sarif_scheme_handler : public output_factory::scheme_handler. */ std::unique_ptr -sarif_scheme_handler::make_sink (const context &ctxt, - diagnostics::context &dc, - const char *unparsed_arg, - const scheme_name_and_params &parsed_arg) const +sarif_scheme_handler:: +make_sink (const context &ctxt, + diagnostics::context &dc, + const scheme_name_and_params &scheme_and_kvs) const { label_text filename; enum sarif_serialization_kind serialization_kind = sarif_serialization_kind::json; sarif_generation_options sarif_gen_opts; - for (auto& iter : parsed_arg.m_kvs) + for (auto& iter : scheme_and_kvs.m_kvs) { const std::string &key = iter.first; const std::string &value = iter.second; @@ -443,7 +431,7 @@ sarif_scheme_handler::make_sink (const context &ctxt, {{{"json", sarif_serialization_kind::json}}}; if (!parse_enum_value - (ctxt, unparsed_arg, + (ctxt, key, value, value_names, serialization_kind)) @@ -458,7 +446,7 @@ sarif_scheme_handler::make_sink (const context &ctxt, {"2.2-prerelease", sarif_version::v2_2_prerelease_2024_08_08}}}; if (!parse_enum_value - (ctxt, unparsed_arg, + (ctxt, key, value, value_names, sarif_gen_opts.m_version)) @@ -467,7 +455,7 @@ sarif_scheme_handler::make_sink (const context &ctxt, } if (key == "state-graphs") { - if (!parse_bool_value (ctxt, unparsed_arg, key, value, + if (!parse_bool_value (ctxt, key, value, sarif_gen_opts.m_state_graph)) return nullptr; continue; @@ -479,8 +467,7 @@ sarif_scheme_handler::make_sink (const context &ctxt, known_keys.safe_push ("serialization"); known_keys.safe_push ("state-graphs"); known_keys.safe_push ("version"); - ctxt.report_unknown_key (unparsed_arg, key, get_scheme_name (), - known_keys); + ctxt.report_unknown_key (key, get_scheme_name (), known_keys); return nullptr; } @@ -493,8 +480,7 @@ sarif_scheme_handler::make_sink (const context &ctxt, const char *basename = ctxt.get_base_filename (); if (!basename) { - ctxt.report_missing_key (unparsed_arg, - "file", + ctxt.report_missing_key ("file", get_scheme_name (), "FILENAME"); return nullptr; @@ -535,20 +521,20 @@ make_sarif_serialization_object (enum sarif_serialization_kind kind) /* class html_scheme_handler : public output_factory::scheme_handler. */ std::unique_ptr -html_scheme_handler::make_sink (const context &ctxt, - diagnostics::context &dc, - const char *unparsed_arg, - const scheme_name_and_params &parsed_arg) const +html_scheme_handler:: +make_sink (const context &ctxt, + diagnostics::context &dc, + const scheme_name_and_params &scheme_and_kvs) const { label_text filename; html_generation_options html_gen_opts; - for (auto& iter : parsed_arg.m_kvs) + for (auto& iter : scheme_and_kvs.m_kvs) { const std::string &key = iter.first; const std::string &value = iter.second; if (key == "css") { - if (!parse_bool_value (ctxt, unparsed_arg, key, value, + if (!parse_bool_value (ctxt, key, value, html_gen_opts.m_css)) return nullptr; continue; @@ -560,28 +546,28 @@ html_scheme_handler::make_sink (const context &ctxt, } if (key == "javascript") { - if (!parse_bool_value (ctxt, unparsed_arg, key, value, + if (!parse_bool_value (ctxt, key, value, html_gen_opts.m_javascript)) return nullptr; continue; } if (key == "show-state-diagrams") { - if (!parse_bool_value (ctxt, unparsed_arg, key, value, + if (!parse_bool_value (ctxt, key, value, html_gen_opts.m_show_state_diagrams)) return nullptr; continue; } if (key == "show-state-diagrams-dot-src") { - if (!parse_bool_value (ctxt, unparsed_arg, key, value, + if (!parse_bool_value (ctxt, key, value, html_gen_opts.m_show_state_diagrams_dot_src)) return nullptr; continue; } if (key == "show-state-diagrams-sarif") { - if (!parse_bool_value (ctxt, unparsed_arg, key, value, + if (!parse_bool_value (ctxt, key, value, html_gen_opts.m_show_state_diagrams_sarif)) return nullptr; continue; @@ -595,8 +581,7 @@ html_scheme_handler::make_sink (const context &ctxt, known_keys.safe_push ("show-state-diagrams"); known_keys.safe_push ("show-state-diagram-dot-src"); known_keys.safe_push ("show-state-diagram-sarif"); - ctxt.report_unknown_key (unparsed_arg, key, get_scheme_name (), - known_keys); + ctxt.report_unknown_key (key, get_scheme_name (), known_keys); return nullptr; } @@ -609,8 +594,7 @@ html_scheme_handler::make_sink (const context &ctxt, const char *basename = ctxt.get_base_filename (); if (!basename) { - ctxt.report_missing_key (unparsed_arg, - "file", + ctxt.report_missing_key ("file", get_scheme_name (), "FILENAME"); return nullptr; @@ -668,12 +652,14 @@ struct parser_test test_spec_context (diagnostics::context &dc, line_maps *location_mgr, location_t loc, - const char *option_name) + const char *option_name, + const char *unparsed_arg) : dc_spec_context (dc, location_mgr, location_mgr, loc, - option_name) + option_name, + unparsed_arg) { } @@ -684,18 +670,18 @@ struct parser_test } }; - parser_test () + parser_test (const char *unparsed_spec) : m_dc (), - m_ctxt (m_dc, line_table, UNKNOWN_LOCATION, "-fOPTION="), + m_ctxt (m_dc, line_table, UNKNOWN_LOCATION, "-fOPTION=", unparsed_spec), m_fmt (m_dc.get_sink (0)) { pp_buffer (m_fmt.get_printer ())->m_flush_p = false; } std::unique_ptr - parse (const char *unparsed_arg) + parse () { - return diagnostics::output_spec::parse (m_ctxt, unparsed_arg); + return diagnostics::output_spec::parse (m_ctxt); } bool execution_failed_p () const @@ -725,8 +711,8 @@ test_output_arg_parsing () /* Minimal correct example. */ { - parser_test pt; - auto result = pt.parse ("foo"); + parser_test pt ("foo"); + auto result = pt.parse (); ASSERT_EQ (result->m_scheme_name, "foo"); ASSERT_EQ (result->m_kvs.size (), 0); ASSERT_FALSE (pt.execution_failed_p ()); @@ -734,8 +720,8 @@ test_output_arg_parsing () /* Stray trailing colon with no key/value pairs. */ { - parser_test pt; - auto result = pt.parse ("foo:"); + parser_test pt ("foo:"); + auto result = pt.parse (); ASSERT_EQ (result, nullptr); ASSERT_TRUE (pt.execution_failed_p ()); ASSERT_STREQ (pt.get_diagnostic_text (), @@ -747,8 +733,8 @@ test_output_arg_parsing () /* No key before '='. */ { - parser_test pt; - auto result = pt.parse ("foo:="); + parser_test pt ("foo:="); + auto result = pt.parse (); ASSERT_EQ (result, nullptr); ASSERT_TRUE (pt.execution_failed_p ()); ASSERT_STREQ (pt.get_diagnostic_text (), @@ -760,8 +746,8 @@ test_output_arg_parsing () /* No value for key. */ { - parser_test pt; - auto result = pt.parse ("foo:key,"); + parser_test pt ("foo:key,"); + auto result = pt.parse (); ASSERT_EQ (result, nullptr); ASSERT_TRUE (pt.execution_failed_p ()); ASSERT_STREQ (pt.get_diagnostic_text (), @@ -773,8 +759,8 @@ test_output_arg_parsing () /* Correct example, with one key/value pair. */ { - parser_test pt; - auto result = pt.parse ("foo:key=value"); + parser_test pt ("foo:key=value"); + auto result = pt.parse (); ASSERT_EQ (result->m_scheme_name, "foo"); ASSERT_EQ (result->m_kvs.size (), 1); ASSERT_EQ (result->m_kvs[0].first, "key"); @@ -784,8 +770,8 @@ test_output_arg_parsing () /* Stray trailing comma. */ { - parser_test pt; - auto result = pt.parse ("foo:key=value,"); + parser_test pt ("foo:key=value,"); + auto result = pt.parse (); ASSERT_EQ (result, nullptr); ASSERT_TRUE (pt.execution_failed_p ()); ASSERT_STREQ (pt.get_diagnostic_text (), @@ -797,8 +783,8 @@ test_output_arg_parsing () /* Correct example, with two key/value pairs. */ { - parser_test pt; - auto result = pt.parse ("foo:color=red,shape=circle"); + parser_test pt ("foo:color=red,shape=circle"); + auto result = pt.parse (); ASSERT_EQ (result->m_scheme_name, "foo"); ASSERT_EQ (result->m_kvs.size (), 2); ASSERT_EQ (result->m_kvs[0].first, "color"); diff --git a/gcc/diagnostics/output-spec.h b/gcc/diagnostics/output-spec.h index c84d237de499..e24002bc8ae4 100644 --- a/gcc/diagnostics/output-spec.h +++ b/gcc/diagnostics/output-spec.h @@ -34,22 +34,19 @@ class context { public: std::unique_ptr - parse_and_make_sink (const char *, - diagnostics::context &dc); + parse_and_make_sink (diagnostics::context &dc); void report_error (const char *gmsgid, ...) const ATTRIBUTE_GCC_DIAG(2,3); void - report_unknown_key (const char *unparsed_arg, - const std::string &key, + report_unknown_key (const std::string &key, const std::string &scheme_name, auto_vec &known_keys) const; void - report_missing_key (const char *unparsed_arg, - const std::string &key, + report_missing_key (const std::string &key, const std::string &scheme_name, const char *metavar) const; @@ -59,6 +56,9 @@ class context const char * get_option_name () const { return m_option_name; } + const char * + get_unparsed_spec () const { return m_unparsed_spec; } + line_maps * get_affected_location_mgr () const { return m_affected_location_mgr; } @@ -72,13 +72,20 @@ class context protected: context (const char *option_name, + const char *unparsed_spec, line_maps *affected_location_mgr) : m_option_name (option_name), + m_unparsed_spec (unparsed_spec), m_affected_location_mgr (affected_location_mgr) { } + // e.g. "-fdiagnostics-add-output=" const char *m_option_name; + + // e.g. "scheme:foo=bar,key=value" + const char *m_unparsed_spec; + line_maps *m_affected_location_mgr; }; @@ -91,8 +98,9 @@ struct dc_spec_context : public output_spec::context line_maps *affected_location_mgr, line_maps *control_location_mgr, location_t loc, - const char *option_name) - : context (option_name, affected_location_mgr), + const char *option_name, + const char *unparsed_spec) + : context (option_name, unparsed_spec, affected_location_mgr), m_dc (dc), m_control_location_mgr (control_location_mgr), m_loc (loc) diff --git a/gcc/libgdiagnostics.cc b/gcc/libgdiagnostics.cc index cceddff9d690..6b269a1d1fe8 100644 --- a/gcc/libgdiagnostics.cc +++ b/gcc/libgdiagnostics.cc @@ -2481,9 +2481,10 @@ struct spec_context : public diagnostics::output_spec::context { public: spec_context (const char *option_name, + const char *unparsed_spec, diagnostic_manager &affected_mgr, diagnostic_manager &control_mgr) - : context (option_name, affected_mgr.get_line_table ()), + : context (option_name, unparsed_spec, affected_mgr.get_line_table ()), m_control_mgr (control_mgr) {} @@ -2519,8 +2520,8 @@ diagnostic_manager_add_sink_from_spec (diagnostic_manager *affected_mgr, FAIL_IF_NULL (spec); FAIL_IF_NULL (control_mgr); - spec_context ctxt (option_name, *affected_mgr, *control_mgr); - auto inner_sink = ctxt.parse_and_make_sink (spec, affected_mgr->get_dc ()); + spec_context ctxt (option_name, spec, *affected_mgr, *control_mgr); + auto inner_sink = ctxt.parse_and_make_sink (affected_mgr->get_dc ()); if (!inner_sink) return -1; affected_mgr->get_dc ().add_sink (std::move (inner_sink)); diff --git a/gcc/opts-diagnostic.cc b/gcc/opts-diagnostic.cc index 0e0296ab5aa7..6f459ec46173 100644 --- a/gcc/opts-diagnostic.cc +++ b/gcc/opts-diagnostic.cc @@ -47,12 +47,14 @@ struct opt_spec_context : public diagnostics::output_spec::dc_spec_context diagnostics::context &dc, line_maps *location_mgr, location_t loc, - const char *option_name) + const char *option_name, + const char *option_value) : dc_spec_context (dc, location_mgr, location_mgr, loc, - option_name), + option_name, + option_value), m_opts (opts) {} @@ -72,17 +74,17 @@ struct opt_spec_context : public diagnostics::output_spec::dc_spec_context void handle_OPT_fdiagnostics_add_output_ (const gcc_options &opts, diagnostics::context &dc, - const char *arg, + const char *unparsed_spec, location_t loc) { - gcc_assert (arg); + gcc_assert (unparsed_spec); gcc_assert (line_table); const char *const option_name = "-fdiagnostics-add-output="; DIAGNOSTICS_LOG_SCOPE_PRINTF2 (dc.get_logger (), - "handling: %s%s", option_name, arg); - opt_spec_context ctxt (opts, dc, line_table, loc, option_name); - auto sink = ctxt.parse_and_make_sink (arg, dc); + "handling: %s%s", option_name, unparsed_spec); + opt_spec_context ctxt (opts, dc, line_table, loc, option_name, unparsed_spec); + auto sink = ctxt.parse_and_make_sink (dc); if (!sink) return; @@ -93,17 +95,17 @@ handle_OPT_fdiagnostics_add_output_ (const gcc_options &opts, void handle_OPT_fdiagnostics_set_output_ (const gcc_options &opts, diagnostics::context &dc, - const char *arg, + const char *unparsed_spec, location_t loc) { - gcc_assert (arg); + gcc_assert (unparsed_spec); gcc_assert (line_table); const char *const option_name = "-fdiagnostics-set-output="; DIAGNOSTICS_LOG_SCOPE_PRINTF2 (dc.get_logger (), - "handling: %s%s", option_name, arg); - opt_spec_context ctxt (opts, dc, line_table, loc, option_name); - auto sink = ctxt.parse_and_make_sink (arg, dc); + "handling: %s%s", option_name, unparsed_spec); + opt_spec_context ctxt (opts, dc, line_table, loc, option_name, unparsed_spec); + auto sink = ctxt.parse_and_make_sink (dc); if (!sink) return; From 393fd020badfbef0aab005868106286df31051dd Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Tue, 30 Sep 2025 17:23:31 -0400 Subject: [PATCH 005/216] diagnostics::output_spec: move class scheme_handler Simplification; no functional change intended. gcc/ChangeLog: * diagnostics/output-spec.cc: Move class scheme_handler out from inside class output_factory. Signed-off-by: David Malcolm --- gcc/diagnostics/output-spec.cc | 174 +++++++++++++++++---------------- 1 file changed, 88 insertions(+), 86 deletions(-) diff --git a/gcc/diagnostics/output-spec.cc b/gcc/diagnostics/output-spec.cc index 33a5f0d317e8..cdc196bfa0f6 100644 --- a/gcc/diagnostics/output-spec.cc +++ b/gcc/diagnostics/output-spec.cc @@ -47,6 +47,8 @@ along with GCC; see the file COPYING3. If not see namespace diagnostics { namespace output_spec { +class scheme_handler; + /* Decls. */ struct scheme_name_and_params @@ -62,84 +64,6 @@ struct scheme_name_and_params class output_factory { public: - class scheme_handler - { - public: - scheme_handler (std::string scheme_name) - : m_scheme_name (std::move (scheme_name)) - {} - virtual ~scheme_handler () {} - - const std::string &get_scheme_name () const { return m_scheme_name; } - - virtual std::unique_ptr - make_sink (const context &ctxt, - diagnostics::context &dc, - const scheme_name_and_params &scheme_and_kvs) const = 0; - - protected: - bool - parse_bool_value (const context &ctxt, - const std::string &key, - const std::string &value, - bool &out) const - { - if (value == "yes") - { - out = true; - return true; - } - else if (value == "no") - { - out = false; - return true; - } - else - { - ctxt.report_error - ("%<%s%s%>:" - " unexpected value %qs for key %qs; expected %qs or %qs", - ctxt.get_option_name (), ctxt.get_unparsed_spec (), - value.c_str (), - key.c_str (), - "yes", "no"); - - return false; - } - } - template - bool - parse_enum_value (const context &ctxt, - const std::string &key, - const std::string &value, - const std::array, NumValues> &value_names, - EnumType &out) const - { - for (auto &iter : value_names) - if (value == iter.first) - { - out = iter.second; - return true; - } - - auto_vec known_values; - for (auto iter : value_names) - known_values.safe_push (iter.first); - pp_markup::comma_separated_quoted_strings e (known_values); - ctxt.report_error - ("%<%s%s%>:" - " unexpected value %qs for key %qs; known values: %e", - ctxt.get_option_name (), ctxt.get_unparsed_spec (), - value.c_str (), - key.c_str (), - &e); - return false; - } - - private: - const std::string m_scheme_name; - }; - output_factory (); std::unique_ptr @@ -153,7 +77,85 @@ class output_factory std::vector> m_scheme_handlers; }; -class text_scheme_handler : public output_factory::scheme_handler +class scheme_handler +{ +public: + scheme_handler (std::string scheme_name) + : m_scheme_name (std::move (scheme_name)) + {} + virtual ~scheme_handler () {} + + const std::string &get_scheme_name () const { return m_scheme_name; } + + virtual std::unique_ptr + make_sink (const context &ctxt, + diagnostics::context &dc, + const scheme_name_and_params &scheme_and_kvs) const = 0; + +protected: + bool + parse_bool_value (const context &ctxt, + const std::string &key, + const std::string &value, + bool &out) const + { + if (value == "yes") + { + out = true; + return true; + } + else if (value == "no") + { + out = false; + return true; + } + else + { + ctxt.report_error + ("%<%s%s%>:" + " unexpected value %qs for key %qs; expected %qs or %qs", + ctxt.get_option_name (), ctxt.get_unparsed_spec (), + value.c_str (), + key.c_str (), + "yes", "no"); + + return false; + } + } + template + bool + parse_enum_value (const context &ctxt, + const std::string &key, + const std::string &value, + const std::array, NumValues> &value_names, + EnumType &out) const + { + for (auto &iter : value_names) + if (value == iter.first) + { + out = iter.second; + return true; + } + + auto_vec known_values; + for (auto iter : value_names) + known_values.safe_push (iter.first); + pp_markup::comma_separated_quoted_strings e (known_values); + ctxt.report_error + ("%<%s%s%>:" + " unexpected value %qs for key %qs; known values: %e", + ctxt.get_option_name (), ctxt.get_unparsed_spec (), + value.c_str (), + key.c_str (), + &e); + return false; + } + +private: + const std::string m_scheme_name; +}; + +class text_scheme_handler : public scheme_handler { public: text_scheme_handler () : scheme_handler ("text") {} @@ -164,7 +166,7 @@ class text_scheme_handler : public output_factory::scheme_handler const scheme_name_and_params &scheme_and_kvs) const final override; }; -class sarif_scheme_handler : public output_factory::scheme_handler +class sarif_scheme_handler : public scheme_handler { public: sarif_scheme_handler () : scheme_handler ("sarif") {} @@ -179,7 +181,7 @@ class sarif_scheme_handler : public output_factory::scheme_handler make_sarif_serialization_object (enum sarif_serialization_kind); }; -class html_scheme_handler : public output_factory::scheme_handler +class html_scheme_handler : public scheme_handler { public: html_scheme_handler () : scheme_handler ("experimental-html") {} @@ -302,7 +304,7 @@ context::parse_and_make_sink (diagnostics::context &dc) return factory.make_sink (*this, dc, *parsed_arg); } -/* class output_factory::scheme_handler. */ +/* class scheme_handler. */ /* class output_factory. */ @@ -313,7 +315,7 @@ output_factory::output_factory () m_scheme_handlers.push_back (std::make_unique ()); } -const output_factory::scheme_handler * +const scheme_handler * output_factory::get_scheme_handler (const std::string &scheme_name) { for (auto &iter : m_scheme_handlers) @@ -344,7 +346,7 @@ output_factory::make_sink (const context &ctxt, return scheme_handler->make_sink (ctxt, dc, scheme_and_kvs); } -/* class text_scheme_handler : public output_factory::scheme_handler. */ +/* class text_scheme_handler : public scheme_handler. */ std::unique_ptr text_scheme_handler::make_sink (const context &ctxt, @@ -403,7 +405,7 @@ text_scheme_handler::make_sink (const context &ctxt, return sink; } -/* class sarif_scheme_handler : public output_factory::scheme_handler. */ +/* class sarif_scheme_handler : public scheme_handler. */ std::unique_ptr sarif_scheme_handler:: @@ -518,7 +520,7 @@ make_sarif_serialization_object (enum sarif_serialization_kind kind) } } -/* class html_scheme_handler : public output_factory::scheme_handler. */ +/* class html_scheme_handler : public scheme_handler. */ std::unique_ptr html_scheme_handler:: From 01ae4b1bfee07b1f7593ee09a40cac1ec5210524 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Tue, 30 Sep 2025 17:23:31 -0400 Subject: [PATCH 006/216] diagnostics::output_spec: refactor per-sink key-value handling No functional change intended. gcc/ChangeLog: * diagnostics/output-spec.cc: Add comments. Introduce a "struct decoded_args" within each scheme_handler subclass, and split out per-scheme key-value parsing from each make_sink implementation into new per-scheme decode_kv member functions. Signed-off-by: David Malcolm --- gcc/diagnostics/output-spec.cc | 350 ++++++++++++++++++--------------- 1 file changed, 192 insertions(+), 158 deletions(-) diff --git a/gcc/diagnostics/output-spec.cc b/gcc/diagnostics/output-spec.cc index cdc196bfa0f6..29f53771fb7e 100644 --- a/gcc/diagnostics/output-spec.cc +++ b/gcc/diagnostics/output-spec.cc @@ -42,7 +42,10 @@ along with GCC; see the file COPYING3. If not see #include "diagnostics/output-spec.h" /* A namespace for handling the DSL of the arguments of - -fdiagnostics-add-output= and -fdiagnostics-set-output=. */ + -fdiagnostics-add-output= and -fdiagnostics-set-output= + which look like: + SCHEME[:KEY=VALUE(,KEY=VALUE)*] + We call this an output spec. */ namespace diagnostics { namespace output_spec { @@ -51,6 +54,12 @@ class scheme_handler; /* Decls. */ +/* A class for the result of the first stage of parsing an output spec, + where values are represented as untyped strings. + The scheme might not exist. + The keys have not been validated against the scheme. + The values have not been validated against their keys. */ + struct scheme_name_and_params { std::string m_scheme_name; @@ -158,17 +167,38 @@ class scheme_handler class text_scheme_handler : public scheme_handler { public: + struct decoded_args + { + bool m_show_color; + bool m_show_nesting; + bool m_show_locations_in_nesting; + bool m_show_levels; + }; + text_scheme_handler () : scheme_handler ("text") {} std::unique_ptr make_sink (const context &ctxt, diagnostics::context &dc, const scheme_name_and_params &scheme_and_kvs) const final override; + + bool + decode_kv (const context &ctxt, + const std::string &key, + const std::string &value, + decoded_args &out_opts) const; }; class sarif_scheme_handler : public scheme_handler { public: + struct decoded_args + { + label_text m_filename; + enum sarif_serialization_kind m_serialization_kind; + sarif_generation_options m_generation_opts; + }; + sarif_scheme_handler () : scheme_handler ("sarif") {} std::unique_ptr @@ -176,6 +206,12 @@ class sarif_scheme_handler : public scheme_handler diagnostics::context &dc, const scheme_name_and_params &scheme_and_kvs) const final override; + bool + decode_kv (const context &ctxt, + const std::string &key, + const std::string &value, + decoded_args &out_opts) const; + private: static std::unique_ptr make_sarif_serialization_object (enum sarif_serialization_kind); @@ -184,12 +220,24 @@ class sarif_scheme_handler : public scheme_handler class html_scheme_handler : public scheme_handler { public: + struct decoded_args + { + label_text m_filename; + html_generation_options m_html_gen_opts; + }; + html_scheme_handler () : scheme_handler ("experimental-html") {} std::unique_ptr make_sink (const context &ctxt, diagnostics::context &dc, const scheme_name_and_params &scheme_and_kvs) const final override; + + bool + decode_kv (const context &ctxt, + const std::string &key, + const std::string &value, + decoded_args &opts_out) const; }; /* struct context. */ @@ -353,58 +401,53 @@ text_scheme_handler::make_sink (const context &ctxt, diagnostics::context &dc, const scheme_name_and_params &scheme_and_kvs) const { - bool show_color = pp_show_color (dc.get_reference_printer ()); - bool show_nesting = true; - bool show_locations_in_nesting = true; - bool show_levels = false; + decoded_args opts; + opts.m_show_color = pp_show_color (dc.get_reference_printer ()); + opts.m_show_nesting = true; + opts.m_show_locations_in_nesting = true; + opts.m_show_levels = false; for (auto& iter : scheme_and_kvs.m_kvs) { const std::string &key = iter.first; const std::string &value = iter.second; - if (key == "color") - { - if (!parse_bool_value (ctxt, key, value, show_color)) - return nullptr; - continue; - } - if (key == "show-nesting") - { - if (!parse_bool_value (ctxt, key, value, - show_nesting)) - return nullptr; - continue; - } - if (key == "show-nesting-locations") - { - if (!parse_bool_value (ctxt, key, value, - show_locations_in_nesting)) - return nullptr; - continue; - } - if (key == "show-nesting-levels") - { - if (!parse_bool_value (ctxt, key, value, show_levels)) - return nullptr; - continue; - } - - /* Key not found. */ - auto_vec known_keys; - known_keys.safe_push ("color"); - known_keys.safe_push ("show-nesting"); - known_keys.safe_push ("show-nesting-locations"); - known_keys.safe_push ("show-nesting-levels"); - ctxt.report_unknown_key (key, get_scheme_name (), known_keys); - return nullptr; + if (!decode_kv (ctxt, key, value, opts)) + return nullptr; } auto sink = std::make_unique (dc); - sink->set_show_nesting (show_nesting); - sink->set_show_locations_in_nesting (show_locations_in_nesting); - sink->set_show_nesting_levels (show_levels); + sink->set_show_nesting (opts.m_show_nesting); + sink->set_show_locations_in_nesting (opts.m_show_locations_in_nesting); + sink->set_show_nesting_levels (opts.m_show_levels); + // FIXME: what about show_color? return sink; } +bool +text_scheme_handler::decode_kv (const context &ctxt, + const std::string &key, + const std::string &value, + decoded_args &opts_out) const +{ + if (key == "color") + return parse_bool_value (ctxt, key, value, opts_out.m_show_color); + if (key == "show-nesting") + return parse_bool_value (ctxt, key, value, opts_out.m_show_nesting); + if (key == "show-nesting-locations") + return parse_bool_value (ctxt, key, value, + opts_out.m_show_locations_in_nesting); + if (key == "show-nesting-levels") + return parse_bool_value (ctxt, key, value, opts_out.m_show_levels); + + /* Key not found. */ + auto_vec known_keys; + known_keys.safe_push ("color"); + known_keys.safe_push ("show-nesting"); + known_keys.safe_push ("show-nesting-locations"); + known_keys.safe_push ("show-nesting-levels"); + ctxt.report_unknown_key (key, get_scheme_name (), known_keys); + return false; +} + /* class sarif_scheme_handler : public scheme_handler. */ std::unique_ptr @@ -413,69 +456,20 @@ make_sink (const context &ctxt, diagnostics::context &dc, const scheme_name_and_params &scheme_and_kvs) const { - label_text filename; - enum sarif_serialization_kind serialization_kind - = sarif_serialization_kind::json; - sarif_generation_options sarif_gen_opts; + decoded_args opts; + opts.m_serialization_kind = sarif_serialization_kind::json; + for (auto& iter : scheme_and_kvs.m_kvs) { const std::string &key = iter.first; const std::string &value = iter.second; - if (key == "file") - { - filename = label_text::take (xstrdup (value.c_str ())); - continue; - } - if (key == "serialization") - { - static const std::array, - (size_t)sarif_serialization_kind::num_values> value_names - {{{"json", sarif_serialization_kind::json}}}; - - if (!parse_enum_value - (ctxt, - key, value, - value_names, - serialization_kind)) - return nullptr; - continue; - } - if (key == "version") - { - static const std::array, - (size_t)sarif_version::num_versions> value_names - {{{"2.1", sarif_version::v2_1_0}, - {"2.2-prerelease", sarif_version::v2_2_prerelease_2024_08_08}}}; - - if (!parse_enum_value - (ctxt, - key, value, - value_names, - sarif_gen_opts.m_version)) - return nullptr; - continue; - } - if (key == "state-graphs") - { - if (!parse_bool_value (ctxt, key, value, - sarif_gen_opts.m_state_graph)) - return nullptr; - continue; - } - - /* Key not found. */ - auto_vec known_keys; - known_keys.safe_push ("file"); - known_keys.safe_push ("serialization"); - known_keys.safe_push ("state-graphs"); - known_keys.safe_push ("version"); - ctxt.report_unknown_key (key, get_scheme_name (), known_keys); - return nullptr; + if (!decode_kv (ctxt, key, value, opts)) + return nullptr; } output_file output_file_; - if (filename.get ()) - output_file_ = ctxt.open_output_file (std::move (filename)); + if (opts.m_filename.get ()) + output_file_ = ctxt.open_output_file (std::move (opts.m_filename)); else // Default filename { @@ -491,21 +485,71 @@ make_sink (const context &ctxt, = open_sarif_output_file (dc, ctxt.get_affected_location_mgr (), basename, - serialization_kind); + opts.m_serialization_kind); } if (!output_file_) return nullptr; - auto serialization_obj = make_sarif_serialization_object (serialization_kind); + auto serialization_obj + = make_sarif_serialization_object (opts.m_serialization_kind); auto sink = make_sarif_sink (dc, *ctxt.get_affected_location_mgr (), std::move (serialization_obj), - sarif_gen_opts, + opts.m_generation_opts, std::move (output_file_)); + return sink; } +bool +sarif_scheme_handler::decode_kv (const context &ctxt, + const std::string &key, + const std::string &value, + decoded_args &opts_out) const +{ + if (key == "file") + { + opts_out.m_filename = label_text::take (xstrdup (value.c_str ())); + return true; + } + if (key == "serialization") + { + static const std::array, + (size_t)sarif_serialization_kind::num_values> value_names + {{{"json", sarif_serialization_kind::json}}}; + return parse_enum_value + (ctxt, + key, value, + value_names, + opts_out.m_serialization_kind); + } + if (key == "version") + { + static const std::array, + (size_t)sarif_version::num_versions> value_names + {{{"2.1", sarif_version::v2_1_0}, + {"2.2-prerelease", sarif_version::v2_2_prerelease_2024_08_08}}}; + return parse_enum_value + (ctxt, + key, value, + value_names, + opts_out.m_generation_opts.m_version); + } + if (key == "state-graphs") + return parse_bool_value (ctxt, key, value, + opts_out.m_generation_opts.m_state_graph); + + /* Key not found. */ + auto_vec known_keys; + known_keys.safe_push ("file"); + known_keys.safe_push ("serialization"); + known_keys.safe_push ("state-graphs"); + known_keys.safe_push ("version"); + ctxt.report_unknown_key (key, get_scheme_name (), known_keys); + return false; +} + std::unique_ptr sarif_scheme_handler:: make_sarif_serialization_object (enum sarif_serialization_kind kind) @@ -528,68 +572,18 @@ make_sink (const context &ctxt, diagnostics::context &dc, const scheme_name_and_params &scheme_and_kvs) const { - label_text filename; - html_generation_options html_gen_opts; + decoded_args opts; for (auto& iter : scheme_and_kvs.m_kvs) { const std::string &key = iter.first; const std::string &value = iter.second; - if (key == "css") - { - if (!parse_bool_value (ctxt, key, value, - html_gen_opts.m_css)) - return nullptr; - continue; - } - if (key == "file") - { - filename = label_text::take (xstrdup (value.c_str ())); - continue; - } - if (key == "javascript") - { - if (!parse_bool_value (ctxt, key, value, - html_gen_opts.m_javascript)) - return nullptr; - continue; - } - if (key == "show-state-diagrams") - { - if (!parse_bool_value (ctxt, key, value, - html_gen_opts.m_show_state_diagrams)) - return nullptr; - continue; - } - if (key == "show-state-diagrams-dot-src") - { - if (!parse_bool_value (ctxt, key, value, - html_gen_opts.m_show_state_diagrams_dot_src)) - return nullptr; - continue; - } - if (key == "show-state-diagrams-sarif") - { - if (!parse_bool_value (ctxt, key, value, - html_gen_opts.m_show_state_diagrams_sarif)) - return nullptr; - continue; - } - - /* Key not found. */ - auto_vec known_keys; - known_keys.safe_push ("css"); - known_keys.safe_push ("file"); - known_keys.safe_push ("javascript"); - known_keys.safe_push ("show-state-diagrams"); - known_keys.safe_push ("show-state-diagram-dot-src"); - known_keys.safe_push ("show-state-diagram-sarif"); - ctxt.report_unknown_key (key, get_scheme_name (), known_keys); - return nullptr; + if (!decode_kv (ctxt, key, value, opts)) + return nullptr; } output_file output_file_; - if (filename.get ()) - output_file_ = ctxt.open_output_file (std::move (filename)); + if (opts.m_filename.get ()) + output_file_ = ctxt.open_output_file (std::move (opts.m_filename)); else // Default filename { @@ -612,11 +606,51 @@ make_sink (const context &ctxt, auto sink = make_html_sink (dc, *ctxt.get_affected_location_mgr (), - html_gen_opts, + opts.m_html_gen_opts, std::move (output_file_)); return sink; } +bool +html_scheme_handler::decode_kv (const context &ctxt, + const std::string &key, + const std::string &value, + decoded_args &opts_out) const +{ + if (key == "css") + return parse_bool_value (ctxt, key, value, opts_out.m_html_gen_opts.m_css); + if (key == "file") + { + opts_out.m_filename = label_text::take (xstrdup (value.c_str ())); + return true; + } + if (key == "javascript") + return parse_bool_value (ctxt, key, value, + opts_out.m_html_gen_opts.m_javascript); + if (key == "show-state-diagrams") + return parse_bool_value (ctxt, key, value, + opts_out.m_html_gen_opts.m_show_state_diagrams); + if (key == "show-state-diagrams-dot-src") + return parse_bool_value + (ctxt, key, value, + opts_out.m_html_gen_opts.m_show_state_diagrams_dot_src); + if (key == "show-state-diagrams-sarif") + return parse_bool_value + (ctxt, key, value, + opts_out.m_html_gen_opts.m_show_state_diagrams_sarif); + + /* Key not found. */ + auto_vec known_keys; + known_keys.safe_push ("css"); + known_keys.safe_push ("file"); + known_keys.safe_push ("javascript"); + known_keys.safe_push ("show-state-diagrams"); + known_keys.safe_push ("show-state-diagram-dot-src"); + known_keys.safe_push ("show-state-diagram-sarif"); + ctxt.report_unknown_key (key, get_scheme_name (), known_keys); + return false; +} + } // namespace output_spec #if CHECKING_P From 5b5dba90232bd31caa072c1e26fd8c11bfe0a5f0 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Tue, 30 Sep 2025 17:23:32 -0400 Subject: [PATCH 007/216] diagnostics::output_spec: fix "color" in "text" output scheme The previous refactoring highlighted that we were ignoring the "color" key within the "text" output scheme for diagnostics. Fixed thusly. gcc/ChangeLog: * diagnostics/output-spec.cc (text_scheme_handler::make_sink): Use the value of the "color" to determine if the sink's printer is colorized. Signed-off-by: David Malcolm --- gcc/diagnostics/output-spec.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/diagnostics/output-spec.cc b/gcc/diagnostics/output-spec.cc index 29f53771fb7e..28ea044fcc70 100644 --- a/gcc/diagnostics/output-spec.cc +++ b/gcc/diagnostics/output-spec.cc @@ -418,7 +418,7 @@ text_scheme_handler::make_sink (const context &ctxt, sink->set_show_nesting (opts.m_show_nesting); sink->set_show_locations_in_nesting (opts.m_show_locations_in_nesting); sink->set_show_nesting_levels (opts.m_show_levels); - // FIXME: what about show_color? + pp_show_color (sink->get_printer ()) = opts.m_show_color; return sink; } From f45eeaf94d2d125ba5fb99460b8dc157499b357e Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Tue, 30 Sep 2025 17:23:32 -0400 Subject: [PATCH 008/216] testsuite: remove redundant import in sarif.py I believe I stopped using this in r16-2211-ga5d9debedd2f46. gcc/testsuite/ChangeLog: * lib/sarif.py: Remove import of ET. Signed-off-by: David Malcolm --- gcc/testsuite/lib/sarif.py | 1 - 1 file changed, 1 deletion(-) diff --git a/gcc/testsuite/lib/sarif.py b/gcc/testsuite/lib/sarif.py index d75a87ec73a2..f0b3ddd9745d 100644 --- a/gcc/testsuite/lib/sarif.py +++ b/gcc/testsuite/lib/sarif.py @@ -1,6 +1,5 @@ import json import os -import xml.etree.ElementTree as ET def sarif_from_env(): # return parsed JSON content a SARIF_PATH file From 54eeaf3fd7a418426caeee5a8864fd418c2643d1 Mon Sep 17 00:00:00 2001 From: GCC Administrator Date: Wed, 1 Oct 2025 00:20:51 +0000 Subject: [PATCH 009/216] Daily bump. --- gcc/ChangeLog | 108 ++++++++++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/ada/ChangeLog | 6 +++ gcc/c/ChangeLog | 6 +++ gcc/fortran/ChangeLog | 15 ++++++ gcc/testsuite/ChangeLog | 41 +++++++++++++++ libgcc/ChangeLog | 6 +++ libstdc++-v3/ChangeLog | 8 +++ 8 files changed, 191 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 63fd0f27d032..65a07a13ce62 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,111 @@ +2025-09-30 David Malcolm + + * diagnostics/output-spec.cc (text_scheme_handler::make_sink): Use + the value of the "color" to determine if the sink's printer is + colorized. + +2025-09-30 David Malcolm + + * diagnostics/output-spec.cc: Add comments. Introduce a + "struct decoded_args" within each scheme_handler subclass, + and split out per-scheme key-value parsing from each make_sink + implementation into new per-scheme decode_kv member functions. + +2025-09-30 David Malcolm + + * diagnostics/output-spec.cc: Move class scheme_handler out from + inside class output_factory. + +2025-09-30 David Malcolm + + * diagnostics/output-spec.cc: Rename "parsed_arg" to + "scheme_and_kvs" throughout. Rename "unparsed_arg" to + "unparsed_spec" throughout, and make a member of + output_spec::context rather than passing it around. + * diagnostics/output-spec.h: Likewise. + * libgdiagnostics.cc: Likewise. + * opts-diagnostic.cc: Likewise. + +2025-09-30 Alfie Richards + + * config/aarch64/aarch64.cc (aarch64_functions_b_resolvable_from_a): New + function. + (TARGET_OPTION_FUNCTIONS_B_RESOLVABLE_FROM_A): New define. + * doc/tm.texi: Regenerate. + * doc/tm.texi.in: Add documentation for + TARGET_OPTION_FUNCTIONS_B_RESOLVABLE_FROM_A. + * multiple_target.cc (redirect_to_specific_clone): Add new optimisation + logic. + (ipa_target_clone): Remove check for TARGET_HAS_FMV_TARGET_ATTRIBUTE. + * target.def: Document new hook.. + * attribs.cc: (functions_b_resolvable_from_a) New function. + * attribs.h: (functions_b_resolvable_from_a) New function. + +2025-09-30 Jakub Jelinek + + * auto-profile.h (maybe_hot_afdo_count_p): Fix comment typos, + possiby -> possibly and ture -> true. + * gimplify.cc (build_asan_poison_call_expr): Change "of a for" + to "memory of the" in a comment. + * ipa-devirt.cc (add_type_duplicate): Fix comment typo, + mangles -> mangled. + * auto-profile.cc: Fix comment typo, -fauto-profile-inlinig + -> -fauto-profile-inlining. + (maybe_hot_afdo_count_p): Fix comment typos, possiby -> possibly + and ture -> true. + (function_instance::removed_icall_target): Fix comment typo, + Reutrn -> Return. + (function_instance::in_worklist_): Fix comment typo, Ture -> True. + (function_instance::offline): Fix comment typo, tolevel -> toplevel. + (function_instance::match): Fix comment typo, craeate_gcov -> + create_gcov. + (autofdo_source_profile::offline_external_functions): Fix comment + typos, tolevel -> toplevel and porfile -> profile. + (autofdo_source_profile::get_function_instance_by_inline_stack): Fix + comment typo, chekcing -> checking. + (struct scale): Fix comment typo, scalle -> scale. + * gimple.h (currently_expanding_gimple_stmt): Fix comment typo, + comminucating -> communicating. + * tree.h (canonical_type_used_p): Fix comment typo, ture -> true. + * tree-ssa-alias.cc (types_equal_for_same_type_for_tbaa_p): Likewise. + * ipa-profile.cc (contains_hot_call_p): Likewise. + * cfgexpand.cc (add_scope_conflicts_2): Fix comment typos, + Querry -> Query, referendd -> referenced and Querrying -> Querying. + * ipa-param-manipulation.cc (currently_expanding_gimple_stmt): Fix + comment typo, comminucating -> communicating. + * ipa-prop.cc (ipa_cst_ref_desc::refcount): Fix comment typo, + if -> is. + * tree-if-conv.cc (version_loop_for_if_conversion): Fix comment typos, + porfile -> profile and confistency -> consistency. + * fold-const.cc: Change size_int_wide in comment to size_int as + size_int_wide doesn't exit for 21 years. + +2025-09-30 Jan Hubicka + + * auto-profile.cc (function_instance::match): Sanity check + that gimple PHI has no location. + * tree-cfg.cc (assign_discriminators): Also remap locations + of gimple PHI arguments. + +2025-09-30 Jan Hubicka + + * basic-block.h (GCOV_COMPUTE_SCALE): Remove. + * ipa-profile.cc (ipa_profile_generate_summary): Use + profile-count scaling. + * sched-rgn.cc (compute_trg_info): Likewise. + +2025-09-30 Jan Hubicka + + * auto-profile.cc (stmt_loc_used_by_debug_info): New function. + (autofdo_source_profile::get_count_info): Use it. + (afdo_set_bb_count): Likewise. + (afdo_vpt_for_early_inline): Likewise. + +2025-09-30 Andre Vieira + + * gimple-lower-bitint.cc (bitint_precision_kind): Fix inconsistency in + results between first and consecutive calls to this function. + 2025-09-28 liuhongt PR target/121970 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index c5ef3a27f88c..ce6a0ae64fbc 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20250930 +20251001 diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 16653d21e55b..db7a3d17c819 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2025-09-30 Eric Botcazou + + PR ada/117517 + * sem_attr.adb (Resolve_Attribute) : Try to + resolve the reducer first. Fix casing of error message. + 2025-09-29 Tonu Naks * doc/gnat_rm/implementation_advice.rst: PolyORB diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index ef985ba3d61b..dea31130b258 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,9 @@ +2025-09-30 Martin Uecker + + PR target/121933 + * c-typeck.cc (mark_decl_used): Set DECL_NONLOCAL + only for VAR_DECL, FUNC_DECL, PARM_DECL. + 2025-09-26 Alejandro Colomar * c-decl.cc (c_scope): Rename {warned > had}_forward_parm_decls. diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 31a19ed469b5..ad537f7f2119 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,18 @@ +2025-09-30 Paul Thomas + + PR fortran/102241 + * gfortran.h: Add symbol attribute 'pdt_comp'. + * module.cc : Add 'pdt_comp' to 'ab_attribute' and 'attr_bits'. + (mio_symbol_attribute): Set 'pdt_comp'. + * resolve.cc (resolve_component): If a PDT component is found + in a non-PDT type, generate the PDT instance, if necessary, and + set the 'pdt_comp' attribute. Fix some whitespace issues. + * trans-decl.cc (gfc_get_symbol_decl, gfc_trans_deferred_vars): + If 'pdt_comp' set, initialize the PDT components. + * trans-stmt.cc (gfc_trans_deallocate): Verify that a typespec + parameter list is available for PDT components of ordinary + derived types. + 2025-09-27 Paul Thomas PR fortran/87908 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a4c4a17edf77..a7d81add5ed2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,44 @@ +2025-09-30 David Malcolm + + * lib/sarif.py: Remove import of ET. + +2025-09-30 Alfie Richards + + * g++.target/aarch64/fmv-selection1.C: New test. + * g++.target/aarch64/fmv-selection2.C: New test. + * g++.target/aarch64/fmv-selection3.C: New test. + * g++.target/aarch64/fmv-selection4.C: New test. + * g++.target/aarch64/fmv-selection5.C: New test. + * g++.target/aarch64/fmv-selection6.C: New test. + * g++.target/aarch64/fmv-selection7.C: New test. + +2025-09-30 Jakub Jelinek + + * gcc.dg/vect/tsvc/vect-tsvc-s1244.c (s1244): Fix comment typo, + ture -> true. + * gcc.dg/vect/tsvc/vect-tsvc-s2244.c (s2244): Likewise. + +2025-09-30 Eric Botcazou + + * gnat.dg/reduce1.adb: New test. + +2025-09-30 Paul Thomas + + PR fortran/105380 + PR fortran/102241 + * gfortran.dg/pdt_49.f03: New test. + * gfortran.dg/pdt_11.f03: Deallocate 'o_fdef'. + * gfortran.dg/pdt_15.f03: Reinstate final 'pop_8' and update + the tree dump counts. + * gfortran.dg/pdt_20.f03: Deallocate 'x'. + * gfortran.dg/pdt_23.f03: Deallocate 'x'. + * gfortran.dg/pdt_3.f03: Eliminate the temporary 'matrix' and + use w%d directly in the allocation. Change the TODO comment and + comment on memory leak in allocation. + * gfortran.dg/pdt_39.f03: Comments on memory leaks. + * gfortran.dg/pdt_40.f03: Deallocate 'foo' and bar%x. + * gfortran.dg/pdt_50.f03: New test. + 2025-09-29 YunQiang Su * gcc.target/mips/pr99217-2.c: New test. diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 7e401bb1619d..f9059af52fb7 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,9 @@ +2025-09-30 Andre Vieira + + * config/t-softfp: Don't use softfp_wrap for bitint functions. + (softfp_cflags): New parameter that is passed to the building of bitint + functions. + 2025-09-25 John David Anglin * config/pa/sync-libfuncs.c (atomic_store_8): Fix asm. diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index b215b3a80522..0403156b5896 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,11 @@ +2025-09-30 François Dumont + + * include/std/inplace_vector: + (std::swap(inplace_vector<>&, inplace_vector<>&)): Remove the duplicated + implementation at std namespace level. Keep the friend inline one. + (inplace_vector::assign(initializer_list<>)): Add missing return + statement. + 2025-09-27 Jonathan Wakely * testsuite/20_util/allocator_traits/members/allocate_hint.cc: From 37d794253e77d0a5aa682387a04b63411e9c2cf1 Mon Sep 17 00:00:00 2001 From: Paul Thomas Date: Wed, 1 Oct 2025 08:14:00 +0100 Subject: [PATCH 010/216] Fortran: Generic interface checking with use associated PDTs [PR122089] 2025-10-01 Paul Thomas gcc/fortran PR fortran/122089 * decl.cc (gfc_get_pdt_instance): If the pdt_template is use associated, 'module' field should be copied to this instance. gcc/testsuite/ PR fortran/122089 * gfortran.dg/pdt_51.f03: New test. --- gcc/fortran/decl.cc | 2 + gcc/testsuite/gfortran.dg/pdt_51.f03 | 57 ++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/pdt_51.f03 diff --git a/gcc/fortran/decl.cc b/gcc/fortran/decl.cc index a891dc86eae9..f00f0e11378c 100644 --- a/gcc/fortran/decl.cc +++ b/gcc/fortran/decl.cc @@ -4076,6 +4076,8 @@ gfc_get_pdt_instance (gfc_actual_arglist *param_list, gfc_symbol **sym, /* Start building the new instance of the parameterized type. */ gfc_copy_attr (&instance->attr, &pdt->attr, &pdt->declared_at); + if (pdt->attr.use_assoc) + instance->module = pdt->module; instance->attr.pdt_template = 0; instance->attr.pdt_type = 1; instance->declared_at = gfc_current_locus; diff --git a/gcc/testsuite/gfortran.dg/pdt_51.f03 b/gcc/testsuite/gfortran.dg/pdt_51.f03 new file mode 100644 index 000000000000..46697bf1c09a --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pdt_51.f03 @@ -0,0 +1,57 @@ +! { dg-do compile } +! { dg-options "-fdump-tree-original" } +! +! Test the fix for PR122089 in which the generic interface checking failed. +! +! Contributed by Damian Rouson +! +module tensor_m + implicit none + + type tensor_t(k) + integer, kind :: k = kind(1.) + real(k) values_ + contains + generic :: values => double_precision_values + procedure double_precision_values + end type + +contains + function double_precision_values(self) + class(tensor_t(kind(1D0))) self + double precision double_precision_values + double_precision_values = self%values_ + end function +end module + +module input_output_pair_m + use tensor_m, only : tensor_t + implicit none + + type input_output_pair_t(k) + integer, kind :: k = kind(1.) + type(tensor_t(k)) inputs_ + end type + + interface + module subroutine double_precision_write_to_stdout(input_output_pairs) + implicit none + type(input_output_pair_t(kind(1D0))) input_output_pairs + end subroutine + end interface +end module + +submodule(input_output_pair_m) input_output_pair_s + implicit none +contains + module procedure double_precision_write_to_stdout + print *, input_output_pairs%inputs_%values() + end procedure +end submodule + + use input_output_pair_m + type(input_output_pair_t(kind(1d0))) :: tgt + tgt%inputs_%values_ = 42d0 + call double_precision_write_to_stdout(tgt) +end +! { dg-final { scan-tree-dump-times "double_precision_write_to_stdout \\(&tgt\\);" 1 "original" } } From 71c80dde7d718f579d2ca616bb4ae38bbdccf2e4 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 1 Oct 2025 11:58:38 +0100 Subject: [PATCH 011/216] libstdc++: Fix spelling of "Polymorphic" in a test libstdc++-v3/ChangeLog: * testsuite/std/memory/polymorphic/copy.cc: Fix spelling of typedef. --- .../testsuite/std/memory/polymorphic/copy.cc | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/libstdc++-v3/testsuite/std/memory/polymorphic/copy.cc b/libstdc++-v3/testsuite/std/memory/polymorphic/copy.cc index bea05acfcab7..d66cc0657b39 100644 --- a/libstdc++-v3/testsuite/std/memory/polymorphic/copy.cc +++ b/libstdc++-v3/testsuite/std/memory/polymorphic/copy.cc @@ -44,14 +44,14 @@ struct Derived : Base using __gnu_test::tracker_allocator; using Counter = __gnu_test::tracker_allocator_counter; -using Polymorhic = std::polymorphic>; -const Polymorhic src(std::in_place_type, 1, 2, 3); +using Polymorphic = std::polymorphic>; +const Polymorphic src(std::in_place_type, 1, 2, 3); constexpr void test_ctor() { Counter::reset(); - Polymorhic i1(src); + Polymorphic i1(src); VERIFY( *i1 == *src ); VERIFY( &*i1 != &*src ); VERIFY( Counter::get_allocation_count() >= sizeof(Derived) ); @@ -60,7 +60,7 @@ test_ctor() VERIFY( Counter::get_destruct_count() == 0 ); Counter::reset(); - Polymorhic i2(std::allocator_arg, {}, src); + Polymorphic i2(std::allocator_arg, {}, src); VERIFY( *i2 == *src ); VERIFY( &*i2 != &*src ); VERIFY( Counter::get_allocation_count() >= sizeof(Derived) ); @@ -73,7 +73,7 @@ constexpr void test_assign() { Counter::reset(); - Polymorhic i1(std::in_place_type); + Polymorphic i1(std::in_place_type); const size_t holderSize = Counter::get_allocation_count(); VERIFY( holderSize >= sizeof(Derived) ); Counter::reset(); @@ -101,26 +101,26 @@ test_assign() constexpr void test_valueless() { - Polymorhic e(std::in_place_type); + Polymorphic e(std::in_place_type); auto(std::move(e)); VERIFY( e.valueless_after_move() ); Counter::reset(); - Polymorhic i1(e); + Polymorphic i1(e); VERIFY( i1.valueless_after_move() ); VERIFY( Counter::get_allocation_count() == 0 ); VERIFY( Counter::get_deallocation_count() == 0 ); VERIFY( Counter::get_construct_count() == 0 ); VERIFY( Counter::get_destruct_count() == 0 ); - Polymorhic i2(std::allocator_arg, {}, e); + Polymorphic i2(std::allocator_arg, {}, e); VERIFY( i2.valueless_after_move() ); VERIFY( Counter::get_allocation_count() == 0 ); VERIFY( Counter::get_deallocation_count() == 0 ); VERIFY( Counter::get_construct_count() == 0 ); VERIFY( Counter::get_destruct_count() == 0 ); - Polymorhic i3(src); + Polymorphic i3(src); Counter::reset(); i3 = e; VERIFY( i3.valueless_after_move() ); From a52f635700681ddfd85d1ea5b0580ec780c78d58 Mon Sep 17 00:00:00 2001 From: Alejandro Colomar Date: Sat, 27 Sep 2025 10:20:44 +0200 Subject: [PATCH 012/216] c: Regenerate c.opt.urls This was regenerated with (slightly simplified): $ make bootstrap && make html && cd gcc && make regenerate-opt-urls; Fixes: 33c35b7f4c18 (2025-09-26; "c, objc: Add -Wmultiple-parameter-fwd-decl-lists") gcc/c-family/ChangeLog: * c.opt.urls: Regenerate Signed-off-by: Alejandro Colomar --- gcc/c-family/c.opt.urls | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gcc/c-family/c.opt.urls b/gcc/c-family/c.opt.urls index e09d51d8afb9..6c01a7d7ccc6 100644 --- a/gcc/c-family/c.opt.urls +++ b/gcc/c-family/c.opt.urls @@ -595,6 +595,9 @@ UrlSuffix(gcc/Warning-Options.html#index-Wmultichar) Wmultiple-inheritance UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wmultiple-inheritance) +Wmultiple-parameter-fwd-decl-lists +UrlSuffix(gcc/Warning-Options.html#index-Wmultiple-parameter-fwd-decl-lists) + Wmultistatement-macros UrlSuffix(gcc/Warning-Options.html#index-Wmultistatement-macros) From c6865e7e15bc9a1337df00d2ca03604e1712a2dd Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Wed, 1 Oct 2025 11:26:45 +0200 Subject: [PATCH 013/216] tree-optimization/122110 - do not reject all bit-precision reductions We can handle bitwise-operation reductions and reductions on mask vectors just fine. PR tree-optimization/122110 * tree-vect-loop.cc (vectorizable_reduction): Relax restriction to mode-precision operations. --- gcc/tree-vect-loop.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index 18360375e297..1d549e4a03e2 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -7187,7 +7187,11 @@ vectorizable_reduction (loop_vec_info loop_vinfo, return false; /* Do not try to vectorize bit-precision reductions. */ - if (!type_has_mode_precision_p (op.type)) + if (!VECTOR_BOOLEAN_TYPE_P (vectype_out) + && !type_has_mode_precision_p (op.type) + && op.code != BIT_AND_EXPR + && op.code != BIT_IOR_EXPR + && op.code != BIT_XOR_EXPR) return false; /* Lane-reducing ops also never can be used in a SLP reduction group From f4409fd79463803267a2dfe28c1d9736241ab356 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 30 Sep 2025 10:49:08 +0100 Subject: [PATCH 014/216] libstdc++: Suppress -Wclass-memaccess warnings in bits/stl_uninitialized.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Running the testsuite with warnings enabled gives: FAIL: 20_util/specialized_algorithms/uninitialized_copy/58982.cc -std=gnu++26 (test for excess errors) Excess errors: .../libstdc++-v3/include/bits/stl_uninitialized.h:293: warning: 'void* __builtin_memcpy(void*, const void*, long unsigned int)' writing to an object of type 'struct T' with no trivial copy-assignment; use copy-initialization instead [-Wclass-memaccess] This is because -Wclass-memaccess warns about using memcpy on types which have a deleted assignment, even though those can be trivially copyable and so using memcpy on them is technically valid. Where these warnings occur in bits/stl_uninitialized.h we're only using memcpy after checking for trivially copyable (and any other relevant conditions) so we can be confident that we're using it safely. We also don't actually care about assignment here because we're only constructing new objects, not copying over existing ones (which is what std::copy does, but not std::uninitialized_copy). Uses of memcpy in the C++98 code don't need to have -Wclass-memaccess suppressed, because there are no deleted functions in C++98 so there are no types which are trivially copyable but trigger the warning. libstdc++-v3/ChangeLog: * include/bits/stl_uninitialized.h (uninitialized_copy) (uninitialized_fill, uninitialized_fill_n): Use pragmas to suppress -Wclass-memaccess warnings. Reviewed-by: Tomasz Kamiński --- libstdc++-v3/include/bits/stl_uninitialized.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libstdc++-v3/include/bits/stl_uninitialized.h b/libstdc++-v3/include/bits/stl_uninitialized.h index 0398b65fa140..70a564659814 100644 --- a/libstdc++-v3/include/bits/stl_uninitialized.h +++ b/libstdc++-v3/include/bits/stl_uninitialized.h @@ -236,6 +236,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wc++17-extensions" +#pragma GCC diagnostic ignored "-Wclass-memaccess" /** * @brief Copies the range [first,last) into result. * @param __first An input iterator. @@ -427,6 +428,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #if __cplusplus >= 201103L #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wc++17-extensions" +#pragma GCC diagnostic ignored "-Wclass-memaccess" #if __glibcxx_raw_memory_algorithms >= 202411L // >= C++26 if consteval { return std::__do_uninit_fill(__first, __last, __x); @@ -529,6 +531,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wc++17-extensions" +#pragma GCC diagnostic ignored "-Wclass-memaccess" // _GLIBCXX_RESOLVE_LIB_DEFECTS // DR 1339. uninitialized_fill_n should return the end of its range /** From b304532350f54e4d14ed64f2ce5dc9139135521b Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 30 Sep 2025 17:10:42 +0100 Subject: [PATCH 015/216] libstdc++: Add missing parentheses to tests with wrong precedence MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These tests are currently evaluated as (err == failbit)|eofbit which is not what we want. It should be err == (failbit|eofbit). libstdc++-v3/ChangeLog: * testsuite/22_locale/time_get/get/char/3.cc: Add parentheses to x == y|z expression. * testsuite/22_locale/time_get/get/wchar_t/3.cc: Likewise. * testsuite/28_regex/algorithms/regex_match/multiline.cc: Likewise. Reviewed-by: Tomasz Kamiński --- libstdc++-v3/testsuite/22_locale/time_get/get/char/3.cc | 2 +- libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/3.cc | 2 +- .../testsuite/28_regex/algorithms/regex_match/multiline.cc | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get/char/3.cc b/libstdc++-v3/testsuite/22_locale/time_get/get/char/3.cc index 48a5f12e26e8..49bcd2adbcb1 100644 --- a/libstdc++-v3/testsuite/22_locale/time_get/get/char/3.cc +++ b/libstdc++-v3/testsuite/22_locale/time_get/get/char/3.cc @@ -226,7 +226,7 @@ test01() format = "%e"; ret = tget.get(iter(iss), end, iss, err, &time, format.data(), format.data()+format.size()); - VERIFY( err == ios_base::failbit|ios_base::eofbit ); + VERIFY( err == (ios_base::failbit|ios_base::eofbit) ); VERIFY( ret == end ); iss.str("35"); diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/3.cc b/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/3.cc index b7eb5bcb204a..4b1b6e4924e6 100644 --- a/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/3.cc +++ b/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/3.cc @@ -226,7 +226,7 @@ test01() format = L"%e"; ret = tget.get(iter(iss), end, iss, err, &time, format.data(), format.data()+format.size()); - VERIFY( err == ios_base::failbit|ios_base::eofbit ); + VERIFY( err == (ios_base::failbit|ios_base::eofbit) ); VERIFY( ret == end ); iss.str(L"35"); diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/multiline.cc b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/multiline.cc index a1982fc8f786..f4b3cf03a225 100644 --- a/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/multiline.cc +++ b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/multiline.cc @@ -27,11 +27,11 @@ test01() VERIFY(std::regex_search("x\nab\nx", ml)); ml.assign("a$\n^b$\n^c", ECMAScript|__multiline); - VERIFY( ml.flags() == ECMAScript|__multiline ); + VERIFY( ml.flags() == (ECMAScript|__multiline) ); VERIFY( regex_search("a\nb\nc", ml) ); ml.assign("a$\n^b$\n^c", ECMAScript|__multiline|icase); - VERIFY( ml.flags() == ECMAScript|__multiline|icase ); + VERIFY( ml.flags() == (ECMAScript|__multiline|icase) ); VERIFY( regex_search("A\nB\nC", ml) ); } From 081b7738b695cd553a6aeda22370524844c00e81 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 30 Sep 2025 17:13:03 +0100 Subject: [PATCH 016/216] libstdc++: Fix incorrect overriders in filebuf tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These test facets were failing to override the members in the std::codecvt base class. libstdc++-v3/ChangeLog: * testsuite/27_io/basic_filebuf/seekoff/wchar_t/9875_seekoff.cc (Cvt::do_length): Fix signature to override virtual function in base. * testsuite/27_io/basic_filebuf/seekpos/wchar_t/9875_seekpos.cc: (Cvt::do_length): Likewise. * testsuite/27_io/basic_filebuf/underflow/char/1.cc (NoconvCvt::do_in): Likewise. * testsuite/27_io/basic_filebuf/underflow/wchar_t/11603.cc (checksumcvt::do_length): Likewise. Reviewed-by: Tomasz Kamiński --- .../27_io/basic_filebuf/seekoff/wchar_t/9875_seekoff.cc | 2 +- .../27_io/basic_filebuf/seekpos/wchar_t/9875_seekpos.cc | 2 +- libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/1.cc | 2 +- .../testsuite/27_io/basic_filebuf/underflow/wchar_t/11603.cc | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/9875_seekoff.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/9875_seekoff.cc index 052d80fceb72..474a49f83dce 100644 --- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/9875_seekoff.cc +++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/9875_seekoff.cc @@ -66,7 +66,7 @@ class Cvt : public std::codecvt virtual int do_length(std::mbstate_t&, const char* from, const char* end, - std::size_t max) + std::size_t max) const { std::size_t len = (end - from) / sizeof(wchar_t); return std::min(len, max) * sizeof(wchar_t); diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/9875_seekpos.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/9875_seekpos.cc index 5767f8aa2a9a..f0d3b59f7b23 100644 --- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/9875_seekpos.cc +++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/9875_seekpos.cc @@ -66,7 +66,7 @@ class Cvt : public std::codecvt virtual int do_length(std::mbstate_t&, const char* from, const char* end, - std::size_t max) + std::size_t max) const { std::size_t len = (end - from) / sizeof(wchar_t); return std::min(len, max) * sizeof(wchar_t); diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/1.cc index a0396a4cf1f7..6d4c71fe9a53 100644 --- a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/1.cc +++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/1.cc @@ -35,7 +35,7 @@ class NoconvCvt : public std::codecvt virtual result do_in(state_type&, const char* from, const char*, const char*& from_next, - char* to, char*, char*& to_next) + char* to, char*, char*& to_next) const { from_next = from; to_next = to; diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11603.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11603.cc index fcd95a9d5e85..c62ad020b0af 100644 --- a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11603.cc +++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11603.cc @@ -119,7 +119,7 @@ class checksumcvt : public std::codecvt { return width; } virtual int - do_length(const StateT&, const extern_type* from, + do_length(StateT&, const extern_type* from, const extern_type* end, size_t max) const { size_t len = std::min(max, From d5c5c1a136142e3cffe3e30c333c84c153fcdb5d Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 30 Sep 2025 12:10:15 +0100 Subject: [PATCH 017/216] libstdc++: Fix -Wmismatched-delete bug in std::unique_ptr test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit libstdc++-v3/ChangeLog: * testsuite/20_util/unique_ptr/modifiers/93562.cc: Define a separate deleter for array cases. Reviewed-by: Tomasz Kamiński --- .../20_util/unique_ptr/modifiers/93562.cc | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/93562.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/93562.cc index 95df7afb9644..044357888ea6 100644 --- a/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/93562.cc +++ b/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/93562.cc @@ -76,11 +76,32 @@ test03() VERIFY(p2.get_deleter().id == -1); } +namespace B +{ + struct Deleter + { + Deleter& operator=(const Deleter&) = delete; + + void operator()(int* p) const noexcept { delete[] p; } + + // found by ADL + friend void swap(Deleter& lhs, Deleter& rhs) noexcept + { std::swap(lhs.id, rhs.id); } + + int id; + }; + + static_assert(!std::is_move_assignable::value, "not assignable"); +#if __cplusplus >= 201703L + static_assert(std::is_swappable_v, "but swappable"); +#endif +} // namespace B + void test04() { - std::unique_ptr p1(new int[1]{1}, { -1 }); - std::unique_ptr p2(new int[2]{2, 2}, { -2 }); + std::unique_ptr p1(new int[1]{1}, { -1 }); + std::unique_ptr p2(new int[2]{2, 2}, { -2 }); int* const pi1 = p1.get(); int* const pi2 = p2.get(); // This type must swappable even though the deleter is not move-assignable: From 1e13fb44f1474b7d57e7144d3fff38e9c769b92d Mon Sep 17 00:00:00 2001 From: Andrew MacLeod Date: Tue, 30 Sep 2025 15:59:38 -0400 Subject: [PATCH 018/216] Fix off by one in range_from_loop_direction. When bounds_of_var_in_loop was converted to range_from_loop_direction, the final check returned FALSE when the beginning and end bounds were the same... The new code was using wi::gt_p, when it should have been wi::ge_p when checking for the fail condition. PR tree-optimization/120560 gcc/ * vr-values.cc (range_from_loop_direction): Use wi::ge_p rather than wi::gt_p. gcc/testsuite/ * gcc.dg/pr120560.c: New. --- gcc/testsuite/gcc.dg/pr120560.c | 13 +++++++++++++ gcc/vr-values.cc | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr120560.c diff --git a/gcc/testsuite/gcc.dg/pr120560.c b/gcc/testsuite/gcc.dg/pr120560.c new file mode 100644 index 000000000000..deb3c18f0b16 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr120560.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fno-tree-ccp -fdump-tree-evrp" } */ +int main() { + int a = -1, b = 2, c = 1; + if (a >= 0) + c = 0; + while (1) { + if (-b + c - 7 >= 0) + return 0; + b = b - 1000 - 2147482648; + } +} +/* { dg-final { scan-tree-dump "return 0" "evrp" } } */ diff --git a/gcc/vr-values.cc b/gcc/vr-values.cc index ff11656559bf..44dff35bcf29 100644 --- a/gcc/vr-values.cc +++ b/gcc/vr-values.cc @@ -278,14 +278,14 @@ range_from_loop_direction (irange &r, tree type, r.set_varying (type); else if (dir == EV_DIR_GROWS) { - if (wi::gt_p (begin.lower_bound (), end.upper_bound (), sign)) + if (wi::ge_p (begin.lower_bound (), end.upper_bound (), sign)) r.set_varying (type); else r = int_range<1> (type, begin.lower_bound (), end.upper_bound ()); } else { - if (wi::gt_p (end.lower_bound (), begin.upper_bound (), sign)) + if (wi::ge_p (end.lower_bound (), begin.upper_bound (), sign)) r.set_varying (type); else r = int_range<1> (type, end.lower_bound (), begin.upper_bound ()); From f739d07b45ae13dbbb350516be0a0c6dfb783ea0 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 1 Oct 2025 13:11:38 +0100 Subject: [PATCH 019/216] libstdc++: Fix sizeof(wide-string)-1 bug in std::regex test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This uses sizeof on a wide string to get the length, which is wrong because each wchar_t is more than one byte. This was presumably copied from a narrow char test. libstdc++-v3/ChangeLog: * testsuite/28_regex/basic_regex/assign/wchar_t/pstring.cc: Use wcslen(cs) instead of sizeof(cs)-1. Reviewed-by: Tomasz Kamiński --- .../testsuite/28_regex/basic_regex/assign/wchar_t/pstring.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libstdc++-v3/testsuite/28_regex/basic_regex/assign/wchar_t/pstring.cc b/libstdc++-v3/testsuite/28_regex/basic_regex/assign/wchar_t/pstring.cc index 2e9dea13a774..91e55129908c 100644 --- a/libstdc++-v3/testsuite/28_regex/basic_regex/assign/wchar_t/pstring.cc +++ b/libstdc++-v3/testsuite/28_regex/basic_regex/assign/wchar_t/pstring.cc @@ -23,6 +23,7 @@ // [28.8.3] class template basic_regex assign() #include +#include // Tests assign operation from a Pascal-style counted-string. void test01() @@ -31,7 +32,7 @@ void test01() const wchar_t cs[] = L"aab"; test_type re; - re.assign(cs, sizeof(cs)-1, std::regex_constants::basic); + re.assign(cs, std::wcslen(cs), std::regex_constants::basic); } int From 39b810b095343df8f0420b3ad7e7469dac0454f8 Mon Sep 17 00:00:00 2001 From: Richard Earnshaw Date: Tue, 23 Sep 2025 17:36:20 +0100 Subject: [PATCH 020/216] toplevel: unify the GCC and GDB/binutils .editorconfig files Both GCC and GDB/binutils now have root editorconfig files. It would make sense to unify them as this sets the general tone for these projects. ChangeLog: * .editorconfig: Unify the GCC and GDB/binutils root config. --- .editorconfig | 122 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 113 insertions(+), 9 deletions(-) diff --git a/.editorconfig b/.editorconfig index af1a28411da9..e5e9997f44fa 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,38 +1,142 @@ -# top-most EditorConfig file for gcc +# Copyright 2025 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# This file helps editors auto-configure whitespace settings. +# +# See here for more information about the format and editor support: +# +# https://editorconfig.org/ + +# This file is common to the GCC and GDB/Binutils projects. If you +# update one, please sync it with the other. + +# top-most EditorConfig file root = true [*] end_of_line = lf insert_final_newline = true +tab_width = 8 -[*.{h,cc}] +# EditorConfig files +[.editorconfig] charset = utf-8 -indent_style = tab -indent_size = 2 -tab_width = 8 trim_trailing_whitespace = true -[{Makefile,ChangeLog}*] +# Makefile +[{Makefile,*.mk,*.am}*] indent_style = tab indent_size = 8 trim_trailing_whitespace = true +# ChangeLogs [ChangeLog*] +indent_style = tab +indent_size = 8 +trim_trailing_whitespace = true +charset = utf-8 + +# C/C++ +[*.{c,h,cc}] charset = utf-8 +indent_style = tab +indent_size = 2 +trim_trailing_whitespace = true +# GCC .def files. These are generally C fragments that get included +# one or more times +[gcc/**.def] +charset = utf-8 +indent_style = tab +indent_size = 2 +trim_trailing_whitespace = true + +# Texinfo files [*.texi] charset = utf-8 indent_size = 2 -tab_width = 8 trim_trailing_whitespace = true +# Expect / TCL +[*.{exp,tcl}] +indent_style = tab +indent_size = 4 +trim_trailing_whitespace = true + +# Python [*.py] indent_style = space indent_size = 4 trim_trailing_whitespace = true -[*.exp] +# Assembler +[*.{s,S,asm}] +indent_style = tab +indent_size = 8 +trim_trailing_whitespace = true + +# GCC Machine description files +[gcc/config/**.md] +indent_style = tab +indent_size = 2 +trim_trailing_whitespace = true + +# Awk +[*.awk] +indent_style = tab +indent_size = 2 +trim_trailing_whitespace = true + +# Autoconf +[*.{ac,m4}] +indent_style = tab +indent_size = 2 +trim_trailing_whitespace = true + +# Shell scripts +[*.sh] indent_style = tab indent_size = 4 -tab_width = 8 +trim_trailing_whitespace = true + +# Ada +[*.ad[bs]] +indent_style = space +indent_size = 3 +trim_trailing_whitespace = true + +# D +[*.d] +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true + +# Go +[*.go] +indent_style = tab +indent_size = 8 +trim_trailing_whitespace = true + +# Fortran +[*.[Ff]90] +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true + +# Cobol +[*.cbl] +indent_style = space +indent_size = 2 trim_trailing_whitespace = true From bae9c5e7c6efc0cbed9ea98c4c58bf7ed341f68d Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Wed, 1 Oct 2025 16:51:26 +0200 Subject: [PATCH 021/216] Propagate unlikely executed BBs even on measured profiles While looking into AutoFDO porfiles I noticed that sometimes we lost precise zero counts due to inlining and merging basic blocks. Propagating precise zero counts should be safe even for measured profiles and thus this patch enables it. gcc/ChangeLog: * predict.cc (unlikely_executed_stmt_p): Remove redundant check. (rebuild_frequencies): Also recompute unlikely bbs when profile is present or consistent. --- gcc/predict.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/gcc/predict.cc b/gcc/predict.cc index 5639d81d2770..895c5f959d02 100644 --- a/gcc/predict.cc +++ b/gcc/predict.cc @@ -852,7 +852,7 @@ unlikely_executed_stmt_p (gimple *stmt) heuristics. */ if (gimple_bb (stmt)->count.reliable_p () && gimple_bb (stmt)->count.nonzero_p ()) - return gimple_bb (stmt)->count == profile_count::zero (); + return false; /* NORETURN attribute alone is not strong enough: exit() may be quite likely executed once during program run. */ if (gimple_call_fntype (stmt) @@ -4521,6 +4521,9 @@ rebuild_frequencies (void) && (!uninitialized_count_found || uninitialized_probablity_found) && !cfun->cfg->count_max.very_large_p ()) { + /* Propagating zero counts should be safe and may + help hot/cold splitting. */ + determine_unlikely_bbs (); if (dump_file) fprintf (dump_file, "Profile is consistent\n"); return; @@ -4545,6 +4548,9 @@ rebuild_frequencies (void) for a given run, we would only propagate the error further. */ if (feedback_found && !uninitialized_count_found) { + /* Propagating zero counts should be safe and may + help hot/cold splitting. */ + determine_unlikely_bbs (); if (dump_file) fprintf (dump_file, "Profile is inconsistent but read from profile feedback;" From 8498ef3d0758012bf3e355a61a0f89aff7513851 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Wed, 1 Oct 2025 16:56:15 +0200 Subject: [PATCH 022/216] Improve profile update in merge_blocks When merging blocks we currently alway use count of the first basic block. In some cases we merge block containing call to cold noreturn function (thus having count 0 (reliable)) with earlier block with weaker form of profile. In this case we can still preserve reliable count of 0. The patch also makes block merging to pick higher of the counts if quality is the same. This should reduce chances of losing track of hot code in broken profiles. gcc/ChangeLog: * cfghooks.cc (merge_blocks): Choose more reliable or higher BB count. --- gcc/cfghooks.cc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/gcc/cfghooks.cc b/gcc/cfghooks.cc index 5f7fc2723745..8b3346898aa2 100644 --- a/gcc/cfghooks.cc +++ b/gcc/cfghooks.cc @@ -817,6 +817,15 @@ merge_blocks (basic_block a, basic_block b) if (!cfg_hooks->merge_blocks) internal_error ("%s does not support merge_blocks", cfg_hooks->name); + /* Pick the more reliable count. If both qualities agrees, pick the larger + one since turning mistakely hot code to cold is more harmful. */ + if (a->count.initialized_p ()) + a->count = b->count; + else if (a->count.quality () < b->count.quality ()) + a->count = b->count; + else if (a->count.quality () == b->count.quality ()) + a->count = a->count.max (b->count); + cfg_hooks->merge_blocks (a, b); if (current_loops != NULL) From f77e2fbf8297c293d23bf60e0b04d4d56b6ddc24 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Wed, 1 Oct 2025 17:06:41 +0200 Subject: [PATCH 023/216] make autprofiledbootstrap with LTO meaningful currently autoprofiled bootstrap produces auto-profiles for cc1 and cc1plus binaries. Those are used to build respective frontend files. For backend cc1plus.fda is used. This does not work well with LTO bootstrap where cc1plus backend is untrained since it is used only for parsing and ealry opts. As a result all binaries gets most of the backend optimized for size rather then speed. This patch adds lto1.fda and then combines all of cc1, cc1plus and lto1 into all.fda that is used compiling common modules. This is more or less equivalent to what -fprofile-use effectively uses modulo that with -fprofile-use we know number of runs of evety object file and scale accordingly at LTO time. gcc/ChangeLog: * Makefile.in (ALL_FDAS): New variable. (ALL_HOST_BACKEND_OBJ): Use all.fda instead of cc1plus.fda (all.fda): New target gcc/c/ChangeLog: * Make-lang.in: Add c_FDAS (create_fdas_for_cc1): Be sure that build fails if create_gcov fails. gcc/cp/ChangeLog: * Make-lang.in: Add c++_FDAS (create_fdas_for_cc1plus): Be sure that build fails if create_gcov fails. gcc/lto/ChangeLog: * Make-lang.in: Add lto_FDAS; enable FDA collection (create_fdas_for_lto1): Be sure that build fails if create_gcov fails. --- gcc/Makefile.in | 10 ++++++++-- gcc/c/Make-lang.in | 5 +++-- gcc/cp/Make-lang.in | 6 ++++-- gcc/lto/Make-lang.in | 19 ++++++++----------- 4 files changed, 23 insertions(+), 17 deletions(-) diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 4503dab60372..6a9d6204c869 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1908,6 +1908,9 @@ OBJS-libcommon-target = $(common_out_object_file) prefix.o \ # This lists all host objects for the front ends. ALL_HOST_FRONTEND_OBJS = $(foreach v,$(CONFIG_LANGUAGES),$($(v)_OBJS)) +# All auto-profile files +ALL_FDAS = $(foreach v,$(CONFIG_LANGUAGES),$($(v)_FDAS)) + ALL_HOST_BACKEND_OBJS = $(GCC_OBJS) $(OBJS) $(OBJS-libcommon) \ $(OBJS-libcommon-target) main.o c-family/cppspec.o \ $(COLLECT2_OBJS) $(EXTRA_GCC_OBJS) $(GCOV_OBJS) $(GCOV_DUMP_OBJS) \ @@ -1918,8 +1921,8 @@ ALL_HOST_BACKEND_OBJS = $(GCC_OBJS) $(OBJS) $(OBJS-libcommon) \ # is likely the most exercised during the build ifeq ($(if $(wildcard ../stage_current),$(shell cat \ ../stage_current)),stageautofeedback) -$(ALL_HOST_BACKEND_OBJS): ALL_COMPILERFLAGS += -fauto-profile=cc1plus.fda -$(ALL_HOST_BACKEND_OBJS): cc1plus.fda +$(ALL_HOST_BACKEND_OBJS): ALL_COMPILERFLAGS += -fauto-profile=all.fda +$(ALL_HOST_BACKEND_OBJS): all.fda endif # This lists all host object files, whether they are included in this @@ -4744,6 +4747,9 @@ paranoia.o: $(srcdir)/../contrib/paranoia.cc $(CONFIG_H) $(SYSTEM_H) $(TREE_H) paranoia: paranoia.o real.o $(LIBIBERTY) g++ -o $@ paranoia.o real.o $(LIBIBERTY) +all.fda: $(ALL_FDAS) + $(PROFILE_MERGER) $(ALL_FDAS) --output_file all.fda -gcov_version 2 + # These exist for maintenance purposes. CTAGS=@CTAGS@ diff --git a/gcc/c/Make-lang.in b/gcc/c/Make-lang.in index 2517b64439fe..f09fc99467b9 100644 --- a/gcc/c/Make-lang.in +++ b/gcc/c/Make-lang.in @@ -58,6 +58,7 @@ C_AND_OBJC_OBJS = attribs.o c/c-errors.o c/c-decl.o c/c-typeck.o \ # Language-specific object files for C. C_OBJS = c/c-lang.o c-family/stub-objc.o $(C_AND_OBJC_OBJS) c_OBJS = $(C_OBJS) cc1-checksum.o c/gccspec.o +c_FDAS = cc1.fda # Use strict warnings for this front end. c-warn = $(STRICT_WARN) @@ -101,7 +102,7 @@ create_fdas_for_cc1: ../stage1-gcc/cc1$(exeext) ../prev-gcc/$(PERF_DATA) echo $$perf_path; \ if [ -f $$perf_path ]; then \ profile_name=cc1_$$component_in_prev.fda; \ - $(CREATE_GCOV) -binary ../stage1-gcc/cc1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2; \ + $(CREATE_GCOV) -binary ../stage1-gcc/cc1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2 || exit 1; \ fi; \ done; @@ -111,7 +112,7 @@ create_fdas_for_cc1: ../stage1-gcc/cc1$(exeext) ../prev-gcc/$(PERF_DATA) echo $$perf_path; \ if [ -f $$perf_path ]; then \ profile_name=cc1_$$component_in_prev_target.fda; \ - $(CREATE_GCOV) -binary ../prev-gcc/cc1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2; \ + $(CREATE_GCOV) -binary ../prev-gcc/cc1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2 || exit 1; \ fi; \ done; diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in index dae3c6846e04..70cfe2b16636 100644 --- a/gcc/cp/Make-lang.in +++ b/gcc/cp/Make-lang.in @@ -123,6 +123,8 @@ CXX_OBJS = cp/cp-lang.o c-family/stub-objc.o $(CXX_AND_OBJCXX_OBJS) c++_OBJS = $(CXX_OBJS) cc1plus-checksum.o cp/g++spec.o +c++_FDAS = cc1plus.fda + # Use strict warnings for this front end. cp-warn = $(STRICT_WARN) @@ -199,7 +201,7 @@ create_fdas_for_cc1plus: ../stage1-gcc/cc1plus$(exeext) ../prev-gcc/$(PERF_DATA) echo $$perf_path; \ if [ -f $$perf_path ]; then \ profile_name=cc1plus_$$component_in_prev.fda; \ - $(CREATE_GCOV) -binary ../stage1-gcc/cc1plus$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2; \ + $(CREATE_GCOV) -binary ../stage1-gcc/cc1plus$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2 || exit 1; \ fi; \ done; @@ -209,7 +211,7 @@ create_fdas_for_cc1plus: ../stage1-gcc/cc1plus$(exeext) ../prev-gcc/$(PERF_DATA) echo $$perf_path; \ if [ -f $$perf_path ]; then \ profile_name=cc1plus_$$component_in_prev_target.fda; \ - $(CREATE_GCOV) -binary ../prev-gcc/cc1plus$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2; \ + $(CREATE_GCOV) -binary ../prev-gcc/cc1plus$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2 || exit 1; \ fi; \ done; diff --git a/gcc/lto/Make-lang.in b/gcc/lto/Make-lang.in index 553e6ddd0d2b..2af8bba44ca9 100644 --- a/gcc/lto/Make-lang.in +++ b/gcc/lto/Make-lang.in @@ -26,18 +26,15 @@ LTO_DUMP_INSTALL_NAME := $(shell echo lto-dump|sed '$(program_transform_name)') # The LTO-specific object files inclued in $(LTO_EXE). LTO_OBJS = lto/lto-lang.o lto/lto.o lto/lto-object.o attribs.o lto/lto-partition.o lto/lto-symtab.o lto/lto-common.o lto_OBJS = $(LTO_OBJS) +lto_FDAS = lto1.fda LTO_DUMP_OBJS = lto/lto-lang.o lto/lto-object.o attribs.o lto/lto-partition.o lto/lto-symtab.o lto/lto-dump.o lto/lto-common.o lto_dump_OBJS = $(LTO_DUMP_OBJS) -# this is only useful in a LTO bootstrap, but this does not work right -# now. Should reenable after this is fixed, but only when LTO bootstrap -# is enabled. - -#ifeq ($(if $(wildcard ../stage_current),$(shell cat \ -# ../stage_current)),stageautofeedback) -#$(LTO_OBJS): CFLAGS += -fauto-profile=lto1.fda -#$(LTO_OBJS): lto1.fda -#endif +ifeq ($(if $(wildcard ../stage_current),$(shell cat \ + ../stage_current)),stageautofeedback) +$(LTO_OBJS): CFLAGS += -fauto-profile=lto1.fda +$(LTO_OBJS): lto1.fda +endif # Rules @@ -118,7 +115,7 @@ create_fdas_for_lto1: ../stage1-gcc/lto1$(exeext) ../prev-gcc/$(PERF_DATA) echo $$perf_path; \ if [ -f $$perf_path ]; then \ profile_name=lto1_$$component_in_prev.fda; \ - $(CREATE_GCOV) -binary ../stage1-gcc/lto1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2; \ + $(CREATE_GCOV) -binary ../stage1-gcc/lto1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2 || exit 1; \ fi; \ done; @@ -128,7 +125,7 @@ create_fdas_for_lto1: ../stage1-gcc/lto1$(exeext) ../prev-gcc/$(PERF_DATA) echo $$perf_path; \ if [ -f $$perf_path ]; then \ profile_name=lto1_$$component_in_prev_target.fda; \ - $(CREATE_GCOV) -binary ../prev-gcc/lto1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2; \ + $(CREATE_GCOV) -binary ../prev-gcc/lto1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2 || exit 1; \ fi; \ done; From aa214a9d6bda35b324a1e48ba1ae5aa80f5aaa07 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Wed, 1 Oct 2025 17:18:44 +0200 Subject: [PATCH 024/216] Fix handling of goto locuses and phi args in auto-profile afdo_set_bb_count had code that, only if no count was determined in the BB itself, looked into its outgoing edges and tried to determine counts based on location of phi args. This is not quite correct, since value detemrined is the count of edge which may be lower than count of BB. This patchs moves the logic into afdo_unscaled_edge_count and extends it to also use goto_locus. BB profile is infered only if BB has single successor and otherwise the edge counts are stored into correct location in afdo_calculate_branch_prob. gcc/ChangeLog: * auto-profile.cc (afdo_unscaled_edge_count): New function based on part of ... (afdo_set_bb_count): ... this function; use it here. (afdo_calculate_branch_prob): Try to determine edge counts using phi args and goto locuses. --- gcc/auto-profile.cc | 111 ++++++++++++++++++++++++++++---------------- 1 file changed, 71 insertions(+), 40 deletions(-) diff --git a/gcc/auto-profile.cc b/gcc/auto-profile.cc index 8c8d9bed8c51..1da729e46669 100644 --- a/gcc/auto-profile.cc +++ b/gcc/auto-profile.cc @@ -2972,6 +2972,48 @@ update_count_by_afdo_count (profile_count *count, profile_count c) *count = c; } +/* Try to determine unscaled count of edge E. + Return -1 if nothing is known. */ + +static gcov_type +afdo_unscaled_edge_count (edge e) +{ + gcov_type max_count = -1; + basic_block bb_succ = e->dest; + count_info info; + if (afdo_source_profile->get_count_info (e->goto_locus, &info)) + { + if (info.count > max_count) + max_count = info.count; + if (dump_file && info.count) + { + fprintf (dump_file, + " goto location of edge %i->%i with count %" PRIu64"\n", + e->src->index, e->dest->index, (int64_t)info.count); + } + } + for (gphi_iterator gpi = gsi_start_phis (bb_succ); + !gsi_end_p (gpi); gsi_next (&gpi)) + { + gphi *phi = gpi.phi (); + location_t phi_loc + = gimple_phi_arg_location_from_edge (phi, e); + if (afdo_source_profile->get_count_info (phi_loc, &info)) + { + if (info.count > max_count) + max_count = info.count; + if (dump_file && info.count) + { + fprintf (dump_file, + " phi op of edge %i->%i with count %" PRIu64": ", + e->src->index, e->dest->index, (int64_t)info.count); + print_gimple_stmt (dump_file, phi, 0, TDF_SLIM); + } + } + } + return max_count; +} + /* For a given BB, set its execution count. Attach value profile if a stmt is not in PROMOTED, because we only want to promote an indirect call once. Return TRUE if BB is annotated. */ @@ -2980,8 +3022,7 @@ static bool afdo_set_bb_count (basic_block bb, hash_set &zero_bbs) { gimple_stmt_iterator gsi; - gcov_type max_count = 0; - bool has_annotated = false; + gcov_type max_count = -1; if (dump_file) fprintf (dump_file, " Looking up AFDO count of bb %i\n", bb->index); @@ -3001,7 +3042,6 @@ afdo_set_bb_count (basic_block bb, hash_set &zero_bbs) (int64_t)info.count); print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM); } - has_annotated = true; gcall *call = dyn_cast (gsi_stmt (gsi)); /* TODO; if inlined early and indirect call was not optimized out, we will end up speculating again. Early inliner should remove @@ -3012,44 +3052,11 @@ afdo_set_bb_count (basic_block bb, hash_set &zero_bbs) } } - if (!has_annotated) - { - /* For an empty BB with all debug stmt which assigne a value with - constant, check successors PHIs corresponding to the block and - use those counts. */ - edge tmp_e; - edge_iterator tmp_ei; - FOR_EACH_EDGE (tmp_e, tmp_ei, bb->succs) - { - basic_block bb_succ = tmp_e->dest; - for (gphi_iterator gpi = gsi_start_phis (bb_succ); - !gsi_end_p (gpi); - gsi_next (&gpi)) - { - gphi *phi = gpi.phi (); - location_t phi_loc - = gimple_phi_arg_location_from_edge (phi, tmp_e); - count_info info; - if (afdo_source_profile->get_count_info (phi_loc, &info) - && info.count != 0) - { - if (info.count > max_count) - max_count = info.count; - if (dump_file && info.count) - { - fprintf (dump_file, - " phi op in BB %i with count %" PRIu64": ", - bb_succ->index, (int64_t)info.count); - print_gimple_stmt (dump_file, phi, 0, TDF_SLIM); - } - has_annotated = true; - } - } - } + if (max_count == -1 && single_succ_p (bb)) + max_count = afdo_unscaled_edge_count (single_succ_edge (bb)); - if (!has_annotated) - return false; - } + if (max_count == -1) + return false; if (max_count) { @@ -3778,6 +3785,30 @@ afdo_calculate_branch_prob (bb_set *annotated_bb) { gcc_assert (e->aux == NULL); e->aux = new edge_info (); + gcov_type c = afdo_unscaled_edge_count (e); + if (c == 0 && e->count () == profile_count::zero ()) + { + AFDO_EINFO (e)->set_count (profile_count::zero ()); + if (dump_file) + fprintf (dump_file, + " Annotating edge %i->%i with count 0;" + " static profile aggress", + e->src->index, e->dest->index); + } + else if (c > 0) + { + AFDO_EINFO (e)->set_count + (profile_count::from_gcov_type + (c * autofdo::afdo_count_scale).afdo ()); + if (dump_file) + { + fprintf (dump_file, + " Annotating edge %i->%i with count ", + e->src->index, e->dest->index); + AFDO_EINFO (e)->get_count ().dump (dump_file); + fprintf (dump_file, "\n"); + } + } } } From 16980f46939cde58b22fae372252b449f0158216 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Wed, 1 Oct 2025 17:58:00 +0200 Subject: [PATCH 025/216] Add --parm auto-profile-bbs This patch adds a parameter that controls whether BB profile is read from auto-profile or we just scale guessed profile according to known counts. This is mostly useful as a first aid when auto-profile goes wrong. Once we fix enough bugs I think it may be removed but so far it is quite useful, so I decided to push it. gcc/ChangeLog: * auto-profile.cc (determine_scale): Break out from ... (afdo_adjust_guessed_profile): ... here. (scale_bb_profile): New function. (afdo_annotate_cfg): Use it. * params.opt (auto-profile-bbs): New parmaeter. * doc/invoke.texi (auto-profile-bbs): Document. --- gcc/auto-profile.cc | 174 +++++++++++++++++++++++++++++++------------- gcc/doc/invoke.texi | 5 ++ gcc/params.opt | 4 + 3 files changed, 132 insertions(+), 51 deletions(-) diff --git a/gcc/auto-profile.cc b/gcc/auto-profile.cc index 1da729e46669..a2be7556c3fe 100644 --- a/gcc/auto-profile.cc +++ b/gcc/auto-profile.cc @@ -3514,6 +3514,109 @@ scale_bbs (const vec &bbs, sreal scale) } } +/* Determine scaling factor by taking robust average of SCALES + and taking into account limits. + MAX_COUNT is maximal guessed count to be scaled while MAC_COUNT_IN_FN + is maximal count in function determined by auto-fdo. */ + +sreal +determine_scale (vec *scales, profile_count max_count, + profile_count max_count_in_fn) +{ + scales->qsort (cmp); + + uint64_t overall_weight = 0; + for (scale &e : *scales) + overall_weight += e.weight; + + uint64_t cummulated = 0, weight_sum = 0; + sreal scale_sum = 0; + for (scale &e : *scales) + { + uint64_t prev = cummulated; + cummulated += e.weight; + if (cummulated >= overall_weight / 4 + && prev <= 3 * overall_weight / 4) + { + scale_sum += e.scale * e.weight; + weight_sum += e.weight; + if (dump_file) + fprintf (dump_file, " accounting scale %.16f, weight %" PRId64 "\n", + e.scale.to_double (), e.weight); + } + else if (dump_file) + fprintf (dump_file, " ignoring scale %.16f, weight %" PRId64 "\n", + e.scale.to_double (), e.weight); + } + sreal scale = scale_sum / (sreal)weight_sum; + + /* Avoid scaled regions to have very large counts. + Otherwise they may dominate ipa-profile's histogram computing cutoff + of hot basic blocks. */ + if (max_count * scale > max_count_in_fn.guessed_local ().apply_scale (128, 1)) + { + if (dump_file) + { + fprintf (dump_file, "Scaling by %.16f produces max count ", + scale.to_double ()); + (max_count * scale).dump (dump_file); + fprintf (dump_file, " that exceeds max count in fn "); + max_count_in_fn.dump (dump_file); + fprintf (dump_file, "; capping\n"); + } + scale = max_count_in_fn.guessed_local ().to_sreal_scale (max_count); + } + return scale; +} + +/* Scale profile of the whole function to approximately match auto-profile. */ + +bool +scale_bb_profile () +{ + const function_instance *s + = afdo_source_profile->get_function_instance_by_decl + (current_function_decl); + + /* In the first pass only store non-zero counts. */ + gcov_type head_count = s->head_count () * autofdo::afdo_count_scale; + hash_set zero_bbs; + auto_vec bbs (n_basic_blocks_for_fn (cfun)); + auto_vec scales; + basic_block bb; + profile_count max_count = profile_count::zero (); + profile_count max_count_in_fn = profile_count::zero (); + bbs.quick_push (ENTRY_BLOCK_PTR_FOR_FN (cfun)); + bbs.quick_push (EXIT_BLOCK_PTR_FOR_FN (cfun)); + if (head_count > 0) + { + profile_count entry_count = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count; + max_count = entry_count; + update_count_by_afdo_count (&entry_count, head_count); + max_count_in_fn = entry_count; + add_scale (&scales, entry_count, ENTRY_BLOCK_PTR_FOR_FN (cfun)->count); + } + FOR_EACH_BB_FN (bb, cfun) + { + profile_count cnt = bb->count; + bbs.safe_push (bb); + max_count = max_count.max (bb->count); + if (afdo_set_bb_count (bb, zero_bbs)) + { + std::swap (cnt, bb->count); + max_count_in_fn = max_count_in_fn.max (cnt); + add_scale (&scales, cnt, bb->count); + } + } + if (scales.length ()) + { + sreal scale = determine_scale (&scales, max_count, max_count_in_fn); + scale_bbs (bbs, scale); + return true; + } + return false; +} + /* In case given basic block was fully optimized out, AutoFDO will have no data about it. In this case try to preserve static profile. Identify connected components (in undirected form of CFG) which has @@ -3723,47 +3826,7 @@ afdo_adjust_guessed_profile (bb_set *annotated_bb) continue; } gcc_checking_assert (scales.length ()); - scales.qsort (cmp); - - uint64_t overall_weight = 0; - for (scale &e : scales) - overall_weight += e.weight; - - uint64_t cummulated = 0, weight_sum = 0; - sreal scale_sum = 0; - for (scale &e : scales) - { - uint64_t prev = cummulated; - cummulated += e.weight; - if (cummulated >= overall_weight / 4 - && prev <= 3 * overall_weight / 4) - { - scale_sum += e.scale * e.weight; - weight_sum += e.weight; - if (dump_file) - fprintf (dump_file, " accounting scale %.16f, weight %" PRId64 "\n", - e.scale.to_double (), e.weight); - } - else if (dump_file) - fprintf (dump_file, " ignoring scale %.16f, weight %" PRId64 "\n", - e.scale.to_double (), e.weight); - } - sreal scale = scale_sum / (sreal)weight_sum; - - /* Avoid scaled regions to have very large counts. - Otherwise they may dominate ipa-profile's histogram computing cutoff - of hot basic blocks. */ - if (max_count * scale > max_count_in_fn.guessed_local ()) - { - if (dump_file) - { - fprintf (dump_file, "Scaling by %.16f produces max count ", - scale.to_double ()); - (max_count * scale).dump (dump_file); - fprintf (dump_file, " that exceeds max count in fn; capping\n"); - } - scale = max_count_in_fn.guessed_local ().to_sreal_scale (max_count); - } + sreal scale = determine_scale (&scales, max_count, max_count_in_fn); scale_bbs (bbs, scale); } } @@ -3913,21 +3976,30 @@ afdo_annotate_cfg (void) s->dump (dump_file); fprintf (dump_file, "\n"); } - - /* In the first pass only store non-zero counts. */ - gcov_type head_count = s->head_count () * autofdo::afdo_count_scale; - bool profile_found = head_count > 0; + bool profile_found = false; hash_set zero_bbs; - FOR_EACH_BB_FN (bb, cfun) + gcov_type head_count = s->head_count () * autofdo::afdo_count_scale; + + if (!param_auto_profile_bbs) { - if (afdo_set_bb_count (bb, zero_bbs)) + if (scale_bb_profile ()) + return; + } + else + { + /* In the first pass only store non-zero counts. */ + profile_found = head_count > 0; + FOR_EACH_BB_FN (bb, cfun) { - if (bb->count.quality () == AFDO) + if (afdo_set_bb_count (bb, zero_bbs)) { - gcc_assert (bb->count.nonzero_p ()); - profile_found = true; + if (bb->count.quality () == AFDO) + { + gcc_assert (bb->count.nonzero_p ()); + profile_found = true; + } + set_bb_annotated (bb, &annotated_bb); } - set_bb_annotated (bb, &annotated_bb); } } /* Exit without clobbering static profile if there was no diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 99607a09b89c..492ca2914323 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -16245,6 +16245,11 @@ In each case, the @var{value} is an integer. The following choices of @var{name} are recognized for all targets: @table @gcctabopt +@item auto-profile-bbs +If non-zero and used together with @option{-fauto-profile}, the auto-profile +will be used to determine basic block profile. If zero, then only function +level profile will be read. + @item phiopt-factor-max-stmts-live When factoring statements out of if/then/else, this is the max # of statements after the defining statement to be allow to extend the lifetime of a name diff --git a/gcc/params.opt b/gcc/params.opt index ae617094db65..1f6297de1638 100644 --- a/gcc/params.opt +++ b/gcc/params.opt @@ -66,6 +66,10 @@ Enable asan stack protection. Common Joined UInteger Var(param_asan_use_after_return) Init(1) IntegerRange(0, 1) Param Optimization Enable asan detection of use-after-return bugs. +-param=auto-profile-bbs= +Common Joined UInteger Var(param_auto_profile_bbs) Init(1) IntegerRange(0, 1) Param Optimization +Build basic block profile using auto profile + -param=cycle-accurate-model= Common Joined UInteger Var(param_cycle_accurate_model) Init(1) IntegerRange(0, 1) Param Optimization Whether the scheduling description is mostly a cycle-accurate model of the target processor and is likely to be spill aggressively to fill any pipeline bubbles. From 8a16ca964180e6d6c4f86150cbda83ceb498b64a Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Wed, 1 Oct 2025 18:14:48 +0200 Subject: [PATCH 026/216] Improve dumps of afdo_calculate_branch_prob gcc/ChangeLog: * auto-profile.cc (afdo_calculate_branch_prob): Improve dump file. --- gcc/auto-profile.cc | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/gcc/auto-profile.cc b/gcc/auto-profile.cc index a2be7556c3fe..6971204ddf55 100644 --- a/gcc/auto-profile.cc +++ b/gcc/auto-profile.cc @@ -3902,24 +3902,41 @@ afdo_calculate_branch_prob (bb_set *annotated_bb) } if (!all_known || !total_count.nonzero_p ()) continue; + if (dump_file) + { + fprintf (dump_file, "Total count of bb %i is ", bb->index); + total_count.dump (dump_file); + fprintf (dump_file, "\n"); + } FOR_EACH_EDGE (e, ei, bb->succs) if (AFDO_EINFO (e)->is_annotated ()) { + profile_count cnt = AFDO_EINFO (e)->get_count (); /* If probability is 1, preserve reliable static prediction (This is, for example the case of single fallthru edge or single fallthru plus unlikely EH edge.) */ - if (AFDO_EINFO (e)->get_count () == total_count + if (cnt == total_count && e->probability == profile_probability::always ()) ; - else if (AFDO_EINFO (e)->get_count ().nonzero_p ()) + else if (cnt.nonzero_p ()) e->probability - = AFDO_EINFO (e)->get_count ().probability_in (total_count); + = cnt.probability_in (total_count); /* If probability is zero, preserve reliable static prediction. */ else if (e->probability.nonzero_p () || e->probability.quality () == GUESSED) e->probability = profile_probability::never ().afdo (); + if (dump_file) + { + fprintf (dump_file, " probability of edge %i->%i" + " with count ", + e->src->index, e->dest->index); + cnt.dump (dump_file); + fprintf (dump_file, " set to "); + e->probability.dump (dump_file); + fprintf (dump_file, "\n"); + } } } afdo_adjust_guessed_profile (annotated_bb); From f2586a4a6c8ae21775fecb57f46ddbaa83af49f3 Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Mon, 29 Sep 2025 18:46:45 +0200 Subject: [PATCH 027/216] m68k: fix adddi3/subdi3 with POST_INC/PRE_DEC destination This part has never been exercised until r15-1579-g792f97b44ffc5e. PR target/122066 * config/m68k/m68k.md (adddi3, subdi3): Strip POST_INC and PRE_DEC when generating high part of the destination operand. * gcc.c-torture/compile/pr122066.c: New test. --- gcc/config/m68k/m68k.md | 16 +++++++++------- gcc/testsuite/gcc.c-torture/compile/pr122066.c | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr122066.c diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md index c96937f0b2ca..7f345bfa123b 100644 --- a/gcc/config/m68k/m68k.md +++ b/gcc/config/m68k/m68k.md @@ -2442,14 +2442,15 @@ gcc_assert (GET_CODE (operands[0]) == MEM); if (GET_CODE (XEXP (operands[0], 0)) == POST_INC) { - operands[1] = gen_rtx_MEM (SImode, - plus_constant (Pmode, - XEXP(operands[0], 0), -8)); + operands[1] + = gen_rtx_MEM (SImode, + plus_constant (Pmode, + XEXP (XEXP (operands[0], 0), 0), -8)); return "move%.l %0,%3\;add%.l %R2,%0\;addx%.l %2,%3\;move%.l %3,%1"; } else if (GET_CODE (XEXP (operands[0], 0)) == PRE_DEC) { - operands[1] = XEXP(operands[0], 0); + operands[1] = XEXP (XEXP (operands[0], 0), 0); return "add%.l %R2,%0\;move%.l %0,%3\;addx%.l %2,%3\;move%.l %3,%1"; } else @@ -2949,13 +2950,14 @@ if (GET_CODE (XEXP (operands[0], 0)) == POST_INC) { operands[1] - = gen_rtx_MEM (SImode, plus_constant (Pmode, - XEXP (operands[0], 0), -8)); + = gen_rtx_MEM (SImode, + plus_constant (Pmode, + XEXP (XEXP (operands[0], 0), 0), -8)); return "move%.l %0,%3\;sub%.l %R2,%0\;subx%.l %2,%3\;move%.l %3,%1"; } else if (GET_CODE (XEXP (operands[0], 0)) == PRE_DEC) { - operands[1] = XEXP(operands[0], 0); + operands[1] = XEXP (XEXP (operands[0], 0), 0); return "sub%.l %R2,%0\;move%.l %0,%3\;subx%.l %2,%3\;move%.l %3,%1"; } else diff --git a/gcc/testsuite/gcc.c-torture/compile/pr122066.c b/gcc/testsuite/gcc.c-torture/compile/pr122066.c new file mode 100644 index 000000000000..5fecb7f02b8a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr122066.c @@ -0,0 +1,18 @@ +/* PR target/122066 -- adddi3/subdi3 mishandle POST_INC/PRE_DEC dest on m68k */ + +struct { + long long wp_ssd[3]; + long long wp_sum[3]; +} m_lowres; +void calcAdaptiveQuantFrame() { + for (int i = 0; i < 3; i++) { + long sum = m_lowres.wp_sum[i]; + long long ssd = m_lowres.wp_ssd[i]; + m_lowres.wp_ssd[i] = ssd - sum; + } + for (int i = 0; i < 3; i++) { + long sum = m_lowres.wp_sum[i]; + long long ssd = m_lowres.wp_ssd[i]; + m_lowres.wp_ssd[i] = ssd + sum; + } +} From b12d5a6ba64f09b9bbe57e6f49665df9b8b6fab0 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Tue, 30 Sep 2025 21:14:12 +0200 Subject: [PATCH 028/216] Fortran: UBSAN uninitialized stride for missing optional argument [PR122080] PR fortran/122080 gcc/fortran/ChangeLog: * trans-array.cc (gfc_conv_array_parameter): Wrap the derivation of bounds and strides for the descriptor of an optional dummy array argument by a test on argument presence when it is supposed to be passed to an optional argument. gcc/testsuite/ChangeLog: * gfortran.dg/ubsan/missing_optional_dummy_9.f90: New test. --- gcc/fortran/trans-array.cc | 9 ++++++++ .../ubsan/missing_optional_dummy_9.f90 | 22 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/ubsan/missing_optional_dummy_9.f90 diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc index 0111c9566f41..db34de44401b 100644 --- a/gcc/fortran/trans-array.cc +++ b/gcc/fortran/trans-array.cc @@ -9446,6 +9446,15 @@ gfc_conv_array_parameter (gfc_se *se, gfc_expr *expr, bool g77, gfc_add_expr_to_block (&se->pre, tmp); } + else if (pass_optional && full_array_var && sym->as && sym->as->rank != 0) + { + /* Perform calculation of bounds and strides of optional array dummy + only if the argument is present. */ + tmp = build3_v (COND_EXPR, gfc_conv_expr_present (sym), + gfc_finish_block (&se->pre), + build_empty_stmt (input_location)); + gfc_add_expr_to_block (&se->pre, tmp); + } } /* Deallocate the allocatable components of structures that are diff --git a/gcc/testsuite/gfortran.dg/ubsan/missing_optional_dummy_9.f90 b/gcc/testsuite/gfortran.dg/ubsan/missing_optional_dummy_9.f90 new file mode 100644 index 000000000000..06b0004d5738 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/ubsan/missing_optional_dummy_9.f90 @@ -0,0 +1,22 @@ +! { dg-do compile } +! { dg-options "-O2 -fdump-tree-original -fdump-tree-optimized -fsanitize=undefined" } +! +! PR fortran/122080 - UBSAN: uninitialized stride for missing actual argument +! +! Contributed by Henri Menke + +subroutine outer (optarr) + real, optional, intent(in) :: optarr(:,:) + interface + subroutine inner (optarr) + real, optional, intent(in) :: optarr(:,:) + end subroutine inner + end interface + call inner (optarr) +end subroutine outer + +! There will be 2 remaining UBSAN checks of stride wrapped by a check +! for argument presence: +! +! { dg-final { scan-tree-dump-times "if \\(optarr.0 != 0B\\)" 1 "original" } } +! { dg-final { scan-tree-dump-times "UBSAN_CHECK_SUB (.)* stride" 2 "optimized" } } From 88e9cc95abd8fe3a7f506f1791b08c32d36cd760 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Dumont?= Date: Wed, 1 Oct 2025 07:09:36 +0200 Subject: [PATCH 029/216] libstdc++: Avoid _GLIBCXX20_CONSTEXPR in C++ >= 20 code sections libstdc++-v3/ChangeLog: * include/std/vector (std::erase_if, std::erase): Replace _GLIBCXX20_CONSTEXPR with 'constexpr' and remove implied 'inline' keyword. * include/std/string (std::erase_if, std::erase): Likewise. --- libstdc++-v3/include/std/string | 6 ++---- libstdc++-v3/include/std/vector | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/libstdc++-v3/include/std/string b/libstdc++-v3/include/std/string index 4b84aeaa857b..97ded057a87b 100644 --- a/libstdc++-v3/include/std/string +++ b/libstdc++-v3/include/std/string @@ -95,8 +95,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template - _GLIBCXX20_CONSTEXPR - inline typename basic_string<_CharT, _Traits, _Alloc>::size_type + constexpr typename basic_string<_CharT, _Traits, _Alloc>::size_type erase_if(basic_string<_CharT, _Traits, _Alloc>& __cont, _Predicate __pred) { using namespace __gnu_cxx; @@ -110,8 +109,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template - _GLIBCXX20_CONSTEXPR - inline typename basic_string<_CharT, _Traits, _Alloc>::size_type + constexpr typename basic_string<_CharT, _Traits, _Alloc>::size_type erase(basic_string<_CharT, _Traits, _Alloc>& __cont, const _Up& __value) { return std::erase_if(__cont, __gnu_cxx::__ops::__equal_to(__value)); } diff --git a/libstdc++-v3/include/std/vector b/libstdc++-v3/include/std/vector index cdc30cbff6de..3146f283944a 100644 --- a/libstdc++-v3/include/std/vector +++ b/libstdc++-v3/include/std/vector @@ -112,8 +112,7 @@ namespace std _GLIBCXX_VISIBILITY(default) _GLIBCXX_BEGIN_NAMESPACE_VERSION template - _GLIBCXX20_CONSTEXPR - inline typename vector<_Tp, _Alloc>::size_type + constexpr typename vector<_Tp, _Alloc>::size_type erase_if(vector<_Tp, _Alloc>& __cont, _Predicate __pred) { using namespace __gnu_cxx; @@ -134,8 +133,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template - _GLIBCXX20_CONSTEXPR - inline typename vector<_Tp, _Alloc>::size_type + constexpr typename vector<_Tp, _Alloc>::size_type erase(vector<_Tp, _Alloc>& __cont, const _Up& __value) { return std::erase_if(__cont, __gnu_cxx::__ops::__equal_to(__value)); } From c866a8a88242833f64fe25e04e4ad4c097daec34 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Wed, 1 Oct 2025 15:12:49 -0600 Subject: [PATCH 030/216] [RISC-V][PR target/122106] Add missing predicate on crc expanders This is a minor bug in the CRC code for RISC-V. Essentially in the expander we have an operand without a predicate. So it matches anything. But that operand really has to be a CONST_INT. So this patch adds the missing predicate. I noticed we had constraints on our define_expand. It doesn't hurt anything, but they're never used and can easily get out of date, so this removes the unnecessary constraints. Tested on riscv32-elf and riscv64-elf. Bootstrap & regression test on the Pioneer is in flight and should finish in the next few hours. Pushing to the trunk once CI confirms it's OK. PR target/122106 gcc/ * config/riscv/bitmanip.md (crc expanders): Add predicate for polynomial argument. Drop unnecessary constraints. gcc/testsuite/ * gcc.target/riscv/pr122106.c: New test. --- gcc/config/riscv/bitmanip.md | 16 ++++++++-------- gcc/testsuite/gcc.target/riscv/pr122106.c | 3 +++ 2 files changed, 11 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/pr122106.c diff --git a/gcc/config/riscv/bitmanip.md b/gcc/config/riscv/bitmanip.md index 5fd139ac9c14..59b71ed263b0 100644 --- a/gcc/config/riscv/bitmanip.md +++ b/gcc/config/riscv/bitmanip.md @@ -1218,13 +1218,13 @@ ;; Reversed CRC 8, 16, 32 for TARGET_64 (define_expand "crc_rev4" ;; return value (calculated CRC) - [(set (match_operand:ANYI 0 "register_operand" "=r") + [(set (match_operand:ANYI 0 "register_operand") ;; initial CRC - (unspec:ANYI [(match_operand:ANYI 1 "register_operand" "r") + (unspec:ANYI [(match_operand:ANYI 1 "register_operand") ;; data - (match_operand:ANYI1 2 "register_operand" "r") + (match_operand:ANYI1 2 "register_operand") ;; polynomial without leading 1 - (match_operand:ANYI 3)] + (match_operand:ANYI 3 "const_int_operand")] UNSPEC_CRC_REV))] /* We don't support the case when data's size is bigger than CRC's size. */ "mode >= mode" @@ -1258,13 +1258,13 @@ ;; CRC 8, 16, (32 for TARGET_64) (define_expand "crc4" ;; return value (calculated CRC) - [(set (match_operand:SUBX 0 "register_operand" "=r") + [(set (match_operand:SUBX 0 "register_operand") ;; initial CRC - (unspec:SUBX [(match_operand:SUBX 1 "register_operand" "r") + (unspec:SUBX [(match_operand:SUBX 1 "register_operand") ;; data - (match_operand:SUBX1 2 "register_operand" "r") + (match_operand:SUBX1 2 "register_operand") ;; polynomial without leading 1 - (match_operand:SUBX 3)] + (match_operand:SUBX 3 "const_int_operand")] UNSPEC_CRC))] /* We don't support the case when data's size is bigger than CRC's size. */ "(TARGET_ZBKC || TARGET_ZBC || TARGET_ZVBC) diff --git a/gcc/testsuite/gcc.target/riscv/pr122106.c b/gcc/testsuite/gcc.target/riscv/pr122106.c new file mode 100644 index 000000000000..b0345b029701 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr122106.c @@ -0,0 +1,3 @@ +/* { dg-do compile } */ + +short foo() { return __builtin_rev_crc16_data16(0, 0, 0); } From f2d9f6635e33ddcc1999fceb1b025635e1b646f9 Mon Sep 17 00:00:00 2001 From: Iain Sandoe Date: Wed, 17 Sep 2025 16:28:41 +0100 Subject: [PATCH 031/216] c++, contracts: Abstract interfaces to constexpr [NFC]. We want to move to having different representations of the contract semantic for C++26, since that wants values outside the range that can be accommodated using the cxx2a mechanisms. First part, abstract the interfaces to constexpr, so that they do not see the underlying source of data. gcc/cp/ChangeLog: * constexpr.cc (cxx_eval_constant_expression): Use revised interfaces to determine if contracts are ignored and, if not, whether they are evaluated. * contracts.h (contract_ignored_p, contract_evaluated_p): New. Signed-off-by: Iain Sandoe --- gcc/cp/constexpr.cc | 5 ++--- gcc/cp/contracts.h | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc index 6ebe6ebaef63..558ef6ed4717 100644 --- a/gcc/cp/constexpr.cc +++ b/gcc/cp/constexpr.cc @@ -10162,14 +10162,13 @@ cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t, case PRECONDITION_STMT: case POSTCONDITION_STMT: { - contract_semantic semantic = get_contract_semantic (t); - if (semantic == CCS_IGNORE) + if (contract_ignored_p (t)) break; if (!cxx_eval_assert (ctx, CONTRACT_CONDITION (t), G_("contract predicate is false in " "constant expression"), - EXPR_LOCATION (t), checked_contract_p (semantic), + EXPR_LOCATION (t), contract_evaluated_p (t), non_constant_p, overflow_p)) *non_constant_p = true; r = void_node; diff --git a/gcc/cp/contracts.h b/gcc/cp/contracts.h index ead07d19fb7b..54eacd9a4c5a 100644 --- a/gcc/cp/contracts.h +++ b/gcc/cp/contracts.h @@ -334,4 +334,19 @@ set_contract_semantic (tree t, contract_semantic semantic) } +/* Will this contract be ignored. */ + +inline bool +contract_ignored_p (const_tree contract) +{ + return (get_contract_semantic (contract) <= CCS_IGNORE); +} + +/* Will this contract be evaluated? */ + +inline bool +contract_evaluated_p (const_tree contract) +{ + return (get_contract_semantic (contract) >= CCS_NEVER); +} #endif /* ! GCC_CP_CONTRACT_H */ From ef45d6489f112fa66ce26ed156d3d90968f409a3 Mon Sep 17 00:00:00 2001 From: Gaius Mulley Date: Wed, 1 Oct 2025 23:04:56 +0100 Subject: [PATCH 032/216] PR modula2/122009: ldtoa_ldtoa correct parameter type from int to bool This is an obvious fix which corrects a parameter type so that it matches the prototype. gcc/m2/ChangeLog: PR modula2/122009 * pge-boot/Gldtoa.cc (ldtoa_ldtoa): Change int to bool for parameter sign. Signed-off-by: Gaius Mulley --- gcc/m2/pge-boot/Gldtoa.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/m2/pge-boot/Gldtoa.cc b/gcc/m2/pge-boot/Gldtoa.cc index 0a43de0fa1ae..9fa2fd2745db 100644 --- a/gcc/m2/pge-boot/Gldtoa.cc +++ b/gcc/m2/pge-boot/Gldtoa.cc @@ -63,7 +63,7 @@ ldtoa_strtold (void *s, bool *error) } char * -ldtoa_ldtoa (long double d, int mode, int ndigits, int *decpt, int *sign) +ldtoa_ldtoa (long double d, int mode, int ndigits, int *decpt, bool *sign) { char format[50]; char *p; From 790bbb9ca6b7ef871a092c6f5622c7eb9c7306bb Mon Sep 17 00:00:00 2001 From: GCC Administrator Date: Thu, 2 Oct 2025 00:19:36 +0000 Subject: [PATCH 033/216] Daily bump. --- ChangeLog | 4 +++ gcc/ChangeLog | 62 +++++++++++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/c-family/ChangeLog | 4 +++ gcc/c/ChangeLog | 5 ++++ gcc/cp/ChangeLog | 12 ++++++++ gcc/fortran/ChangeLog | 14 ++++++++++ gcc/lto/ChangeLog | 5 ++++ gcc/m2/ChangeLog | 6 ++++ gcc/testsuite/ChangeLog | 25 +++++++++++++++++ libstdc++-v3/ChangeLog | 47 +++++++++++++++++++++++++++++++ 11 files changed, 185 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 31d659802b9a..7bacb91597e9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2025-10-01 Richard Earnshaw + + * .editorconfig: Unify the GCC and GDB/binutils root config. + 2025-09-23 Richard Earnshaw * .editorconfig: Fix glob patterns. diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 65a07a13ce62..81c5f800ad1f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,65 @@ +2025-10-01 Jeff Law + + PR target/122106 + * config/riscv/bitmanip.md (crc expanders): Add predicate for + polynomial argument. Drop unnecessary constraints. + +2025-10-01 Andreas Schwab + + PR target/122066 + * config/m68k/m68k.md (adddi3, subdi3): Strip POST_INC and PRE_DEC + when generating high part of the destination operand. + +2025-10-01 Jan Hubicka + + * auto-profile.cc (afdo_calculate_branch_prob): Improve dump file. + +2025-10-01 Jan Hubicka + + * auto-profile.cc (determine_scale): Break out from ... + (afdo_adjust_guessed_profile): ... here. + (scale_bb_profile): New function. + (afdo_annotate_cfg): Use it. + * params.opt (auto-profile-bbs): New parmaeter. + * doc/invoke.texi (auto-profile-bbs): Document. + +2025-10-01 Jan Hubicka + + * auto-profile.cc (afdo_unscaled_edge_count): New function based on + part of ... + (afdo_set_bb_count): ... this function; use it here. + (afdo_calculate_branch_prob): Try to determine edge counts using + phi args and goto locuses. + +2025-10-01 Jan Hubicka + + * Makefile.in (ALL_FDAS): New variable. + (ALL_HOST_BACKEND_OBJ): Use all.fda instead of cc1plus.fda + (all.fda): New target + +2025-10-01 Jan Hubicka + + * cfghooks.cc (merge_blocks): Choose more reliable or higher BB + count. + +2025-10-01 Jan Hubicka + + * predict.cc (unlikely_executed_stmt_p): Remove redundant check. + (rebuild_frequencies): Also recompute unlikely bbs when profile is + present or consistent. + +2025-10-01 Andrew MacLeod + + PR tree-optimization/120560 + * vr-values.cc (range_from_loop_direction): Use wi::ge_p rather + than wi::gt_p. + +2025-10-01 Richard Biener + + PR tree-optimization/122110 + * tree-vect-loop.cc (vectorizable_reduction): Relax restriction + to mode-precision operations. + 2025-09-30 David Malcolm * diagnostics/output-spec.cc (text_scheme_handler::make_sink): Use diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index ce6a0ae64fbc..924403eec65b 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20251001 +20251002 diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index bf15d94c1bd4..9054428d0140 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,7 @@ +2025-10-01 Alejandro Colomar + + * c.opt.urls: Regenerate + 2025-09-26 Alejandro Colomar * c.opt: Add -Wmultiple-parameter-fwd-decl-lists diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index dea31130b258..72634fa53efb 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,8 @@ +2025-10-01 Jan Hubicka + + * Make-lang.in: Add c_FDAS + (create_fdas_for_cc1): Be sure that build fails if create_gcov fails. + 2025-09-30 Martin Uecker PR target/121933 diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 98b48ff0a86d..ab3878be2d9b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,15 @@ +2025-10-01 Iain Sandoe + + * constexpr.cc (cxx_eval_constant_expression): Use revised + interfaces to determine if contracts are ignored and, if not, + whether they are evaluated. + * contracts.h (contract_ignored_p, contract_evaluated_p): New. + +2025-10-01 Jan Hubicka + + * Make-lang.in: Add c++_FDAS + (create_fdas_for_cc1plus): Be sure that build fails if create_gcov fails. + 2025-09-27 Jason Merrill PR c++/112632 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index ad537f7f2119..1453a2a8df82 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,17 @@ +2025-10-01 Harald Anlauf + + PR fortran/122080 + * trans-array.cc (gfc_conv_array_parameter): Wrap the derivation of + bounds and strides for the descriptor of an optional dummy array + argument by a test on argument presence when it is supposed to be + passed to an optional argument. + +2025-10-01 Paul Thomas + + PR fortran/122089 + * decl.cc (gfc_get_pdt_instance): If the pdt_template is use + associated, 'module' field should be copied to this instance. + 2025-09-30 Paul Thomas PR fortran/102241 diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index 4da9ca313532..55e08838fb4f 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,3 +1,8 @@ +2025-10-01 Jan Hubicka + + * Make-lang.in: Add lto_FDAS; enable FDA collection + (create_fdas_for_lto1): Be sure that build fails if create_gcov fails. + 2025-04-15 Kyrylo Tkachov * lto-partition.cc (add_node_references_to_partition): Define. diff --git a/gcc/m2/ChangeLog b/gcc/m2/ChangeLog index b9e2b4d1d232..1e9f73325155 100644 --- a/gcc/m2/ChangeLog +++ b/gcc/m2/ChangeLog @@ -1,3 +1,9 @@ +2025-10-01 Gaius Mulley + + PR modula2/122009 + * pge-boot/Gldtoa.cc (ldtoa_ldtoa): Change int to bool for + parameter sign. + 2025-09-21 Mark Wielaard * lang.opt.urls: Regenerate. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a7d81add5ed2..7562dc2e953c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,28 @@ +2025-10-01 Jeff Law + + PR target/122106 + * gcc.target/riscv/pr122106.c: New test. + +2025-10-01 Harald Anlauf + + PR fortran/122080 + * gfortran.dg/ubsan/missing_optional_dummy_9.f90: New test. + +2025-10-01 Andreas Schwab + + PR target/122066 + * gcc.c-torture/compile/pr122066.c: New test. + +2025-10-01 Andrew MacLeod + + PR tree-optimization/120560 + * gcc.dg/pr120560.c: New. + +2025-10-01 Paul Thomas + + PR fortran/122089 + * gfortran.dg/pdt_51.f03: New test. + 2025-09-30 David Malcolm * lib/sarif.py: Remove import of ET. diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 0403156b5896..3e0426c96e29 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,50 @@ +2025-10-01 François Dumont + + * include/std/vector (std::erase_if, std::erase): Replace _GLIBCXX20_CONSTEXPR + with 'constexpr' and remove implied 'inline' keyword. + * include/std/string (std::erase_if, std::erase): Likewise. + +2025-10-01 Jonathan Wakely + + * testsuite/28_regex/basic_regex/assign/wchar_t/pstring.cc: Use + wcslen(cs) instead of sizeof(cs)-1. + +2025-10-01 Jonathan Wakely + + * testsuite/20_util/unique_ptr/modifiers/93562.cc: Define a + separate deleter for array cases. + +2025-10-01 Jonathan Wakely + + * testsuite/27_io/basic_filebuf/seekoff/wchar_t/9875_seekoff.cc + (Cvt::do_length): Fix signature to override virtual function in + base. + * testsuite/27_io/basic_filebuf/seekpos/wchar_t/9875_seekpos.cc: + (Cvt::do_length): Likewise. + * testsuite/27_io/basic_filebuf/underflow/char/1.cc + (NoconvCvt::do_in): Likewise. + * testsuite/27_io/basic_filebuf/underflow/wchar_t/11603.cc + (checksumcvt::do_length): Likewise. + +2025-10-01 Jonathan Wakely + + * testsuite/22_locale/time_get/get/char/3.cc: Add parentheses to + x == y|z expression. + * testsuite/22_locale/time_get/get/wchar_t/3.cc: Likewise. + * testsuite/28_regex/algorithms/regex_match/multiline.cc: + Likewise. + +2025-10-01 Jonathan Wakely + + * include/bits/stl_uninitialized.h (uninitialized_copy) + (uninitialized_fill, uninitialized_fill_n): Use pragmas to + suppress -Wclass-memaccess warnings. + +2025-10-01 Jonathan Wakely + + * testsuite/std/memory/polymorphic/copy.cc: Fix spelling of + typedef. + 2025-09-30 François Dumont * include/std/inplace_vector: From b40ef6e9dc096c8c19399e94947a1965258a6942 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 2 Oct 2025 06:13:41 +0800 Subject: [PATCH 034/216] Sync toplevel files from binutils-gdb commit 28ea7ae220a0343ff7fe531ec761bd77d00dcb1c Author: Matthieu Longo Date: Tue May 28 10:49:45 2024 +0100 autoupdate: replace old version of AC_INIT by the new one - old AC_INIT by AC_INIT + AC_CONFIG_SRC_DIR https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.72/autoconf.html#index-AC_005fINIT-3 commit 29496481662736f0a24bfc1daf31dbfc9d2bb7ee Author: Matthieu Longo Date: Tue May 28 10:49:43 2024 +0100 autoupdate: replace obsolete macros AC_CANONICAL_SYSTEM - AC_CANONICAL_SYSTEM by: * AC_CANONICAL_HOST where host, and host_alias are needed * AC_CANONICAL_TARGET where target_alias is needed https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.72/autoconf.html#index-AC_005fCANONICAL_005fTARGET-1 commit d9639e091c77689b10363ecb197466deaa161ade Author: Maciej W. Rozycki Date: Mon Apr 28 18:53:30 2025 +0100 Fix 64-bit BFD detection causing build failures We have a discrepancy with 64-bit BFD handling across our component subdirectories leading to link failures such as: ld: ../opcodes/.libs/libopcodes.a(disassemble.o): in function `disassembler': disassemble.c:(.text+0x65): undefined reference to `print_insn_alpha' ld: disassemble.c:(.text+0x105): undefined reference to `print_insn_ia64' ld: disassemble.c:(.text+0x11d): undefined reference to `print_insn_loongarch' ld: disassemble.c:(.text+0x1a1): undefined reference to `print_insn_big_mips' [...] with some configurations having a 32-bit host and 64-bit BFD, such as: `--host=i386-linux-gnu --target=riscv64-linux-gnu --enable-targets=all'. This is ultimately due to how 64-bit BFD is enabled for bfd/ itself and other subdirectorses and has been a regression from commit 1d5269c994bf ("unify 64-bit bfd checks"). For bfd/ the BFD_64_BIT autoconf macro from config/bfd64.m4 is used combined with this logic in bfd/configure.ac: case ${host64}-${target64}-${want64} in *true*) wordsize=64 bfd64_libs='$(BFD64_LIBS)' all_backends='$(BFD64_BACKENDS) $(BFD32_BACKENDS)' [...] ;; false-false-false) wordsize=32 all_backends='$(BFD32_BACKENDS)' ;; esac where the value of ${wordsize} switches between 32-bit and 64-bit BFD via these pieces: #define BFD_ARCH_SIZE @wordsize@ and: #if BFD_ARCH_SIZE >= 64 #define BFD64 #endif in bfd/bfd-in.h, which ultimately becomes a part of "bfd.h". Then ${host64} is determined in bfd/configure.ac from the host's word size, via the host's pointer size: if test "x${ac_cv_sizeof_void_p}" = "x8"; then host64=true fi And ${target64} is determined in bfd/configure.ac from the target's word size: if test ${target_size} = 64; then target64=true fi Where multiple targets have been requested with `--enable-targets=all' the presence of any 64-bit target will set "true" here. Finally ${want64} is set according to `--enable-64-bit-bfd' user option with an arrangement involving BFD_64_BIT: BFD_64_BIT if test $enable_64_bit_bfd = yes ; then want64=true else want64=false fi which also, redundantly, checks and sets its result upon the host's word size. Lastly ${want64} is also selectively set by target fragments in bfd/config.bfd, which mostly if not completely overlaps with ${target64} setting as described above. Conversely other subdirectories only rely on BFD_64_BIT, so they fail to notice that BFD is 64-bit and do not enable their 64-bit handling where the host requested is 32-bit and 64-bit BFD has been enabled other than with `--enable-64-bit-bfd'. One consequence is opcodes/disassemble.c enables calls to its numerous own 64-bit backends by checking the BFD64 macro from "bfd.h", however does not actually enable said backends in its Makefile. Hence the link errors quoted above. Address the problem then by moving the `--enable-64-bit-bfd' option back to bfd/configure.ac and remove the call to BFD_64_BIT from there and then rewrite the macro in terms of checking for the presence of BFD64 macro in "bfd.h", which is the canonical way of determining whether BFD is 64-bit or not. Rather than running `grep' directly on ../bfd/bfd-in3.h as the opcodes/ fragment used to before the problematic commit: if grep '#define BFD_ARCH_SIZE 64' ../bfd/bfd-in3.h > /dev/null; then run the preprocessor on "bfd.h", which allows to invoke the macro from configure.ac files placed in subdirectories located at deeper levels, by relying on the preprocessor's search path. This requires however that the invokers rely on `all-bfd' rather than `configure-bfd' for their `configure' invocation stage, because "bfd.h" is made by `make all' rather than `configure' in bfd/. Do not cache the result of this check however, as reconfiguring a tree such as to flip `--enable-64-bit-bfd' on or to change a secondary target may affect BFD64 and we have no access to information about secondary targets in BFD_64_BIT. Also remove the ENABLE_BFD_64_BIT automake conditional, as it's not used anywhere. Last but not least remove the hack from gdb/configure.ac to fail builds for `mips*-*-*' hosts where `--enable-targets=all' has been requested, but `--enable-64-bit-bfd' has not as it's no longer needed. Such builds complete successfully now, having enabled 64-bit BFD implicitly. Tested-By: Guinevere Larsen Tested-By: Luis Machado Approved-By: Alan Modra Approved-By: Luis Machado * Makefile.def: Synced from binutils-gdb. * Makefile.in: Regenerated. commit 319719bb2921e978738acd408e6b16dabf0e7f5e Author: Tom Tromey Date: Thu Mar 21 17:12:23 2024 -0600 Revert "Pass GUILE down to subdirectories" This reverts commit b7e5a29602143b53267efcd9c8d5ecc78cd5a62f. This patch caused problems for some users when building gdb, because it would cause 'guild' to be invoked with the wrong versin of guile. On the whole it seems simpler to just back this out. I'm checking this in to the binutils-gdb repository in the interest of fixing the build for Andrew. No one has responded to the identical patch sent to gcc-patches, but I will ping it there. commit da48217f315084097ef25226c0acab3bbd55ebd3 Author: Simon Marchi Date: Thu Mar 14 13:39:18 2024 -0400 gdbserver/linux: probe for libiconv in configure Make gdbserver's build system locate libiconv when building for Linux. Commit 07b3255c3bae ("Filter invalid encodings from Linux thread names") make libiconv madantory for building gdbserver on Linux. While trying to cross-compile gdb for xtensa-fsf-linux-uclibc (with a toolchain generated with crosstool-ng), I got: /home/smarchi/src/binutils-gdb/gdbserver/linux-low.cc:48:10: fatal error: iconv.h: No such file or directory 48 | #include | ^~~~~~~~~ I downloaded GNU libiconv, built it for that host, and installed it in an arbitrary directory. I had to modify the gdbserver build system to locate libiconv and use it, the result is this patch. I eventually found that crosstool-ng has a config option to make uclibc provide an implementation of iconv, which is of course much easier. But given that this patch is now written, I think it would be worth merging it, it could help some people who do not have iconv built-in their libc in the future (and may not have the luxury of rebuilding their libc like I do). Using AM_ICONV in configure.ac adds these options for configure (the same we have for gdb): --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir --with-libiconv-type=TYPE type of library to search for (auto/static/shared) It sets the `LIBICONV` variable with whatever is needed to link with libiconv, and adds the necessary `-I` flag to `CPPFLAGS`. To avoid unnecessarily linking against libiconv on hosts that don't need it, set `MAYBE_LIBICONV` with the contents of `LIBICONV` only if the host is Linux, and use `MAYBE_LIBICONV` in `Makefile.in`. Since libiconv is a hard requirement for Linux hosts, error out if it is not found. The bits in acinclude.m4 are similar to what we have in gdb/acinclude.m4. Update the top-level build system to support building against an in-tree libiconv (I did not test this part though). Something tells me that the all-gdbserver dependency on all-libiconv is unnecessary, since there is already a dependency of configure-gdbserver on all-libiconv (and all-gdbserver surely depends on configure-gdbserver). I just copied what's done for GDB though. * Makefile.def: Synced from binutils-gdb. * Makefile.tpl: Likewise. * configure.ac: Likewise. * Makefile.in: Regenerated. * configure: Likewise. config/ * acx.m4: Synced from binutils-gdb. * lthostflags.m4: Likewise. libbacktrace/ * configure.ac: Synced from binutils-gdb. * configure: Regenerated. zlib/ * configure.ac: Synced from binutils-gdb. * configure: Regenerated. Signed-off-by: H.J. Lu --- Makefile.def | 7 +++--- Makefile.in | 50 +++++++++++++++++++-------------------- Makefile.tpl | 7 ++---- config/acx.m4 | 4 ++-- config/lthostflags.m4 | 2 +- configure | 2 +- configure.ac | 7 +++--- libbacktrace/configure | 5 ++-- libbacktrace/configure.ac | 3 ++- zlib/configure | 5 ++-- zlib/configure.ac | 2 +- 11 files changed, 45 insertions(+), 49 deletions(-) diff --git a/Makefile.def b/Makefile.def index fa60f6ea0b90..e5b95d7f705f 100644 --- a/Makefile.def +++ b/Makefile.def @@ -313,7 +313,6 @@ flags_to_pass = { flag= GNATBIND ; }; flags_to_pass = { flag= GNATMAKE ; }; flags_to_pass = { flag= GDC ; }; flags_to_pass = { flag= GDCFLAGS ; }; -flags_to_pass = { flag= GUILE ; }; // Target tools flags_to_pass = { flag= AR_FOR_TARGET ; }; @@ -463,9 +462,11 @@ dependencies = { module=all-gdb; on=all-libbacktrace; }; // Host modules specific to gdbserver. dependencies = { module=configure-gdbserver; on=all-gnulib; }; +dependencies = { module=configure-gdbserver; on=all-libiconv; }; dependencies = { module=all-gdbserver; on=all-gdbsupport; }; dependencies = { module=all-gdbserver; on=all-gnulib; }; dependencies = { module=all-gdbserver; on=all-libiberty; }; +dependencies = { module=all-gdbserver; on=all-libiconv; }; dependencies = { module=configure-libgui; on=configure-tcl; }; dependencies = { module=configure-libgui; on=configure-tk; }; @@ -524,7 +525,7 @@ dependencies = { module=install-bfd; on=install-libsframe; }; dependencies = { module=install-strip-bfd; on=install-strip-libsframe; }; // libopcodes depends on libbfd -dependencies = { module=configure-opcodes; on=configure-bfd; hard=true; }; +dependencies = { module=configure-opcodes; on=all-bfd; hard=true; }; dependencies = { module=install-opcodes; on=install-bfd; }; dependencies = { module=install-strip-opcodes; on=install-strip-bfd; }; @@ -550,8 +551,8 @@ dependencies = { module=install-gprofng; on=install-opcodes; }; dependencies = { module=install-gprofng; on=install-bfd; }; dependencies = { module=configure-ld; on=configure-gettext; }; +dependencies = { module=configure-ld; on=all-bfd; }; dependencies = { module=all-ld; on=all-libiberty; }; -dependencies = { module=all-ld; on=all-bfd; }; dependencies = { module=all-ld; on=all-opcodes; }; dependencies = { module=all-ld; on=all-build-bison; }; dependencies = { module=all-ld; on=all-build-flex; }; diff --git a/Makefile.in b/Makefile.in index 12d4395d8e2f..8d406d124a12 100644 --- a/Makefile.in +++ b/Makefile.in @@ -3,7 +3,7 @@ # # Makefile for directory with subdirs to build. # Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, -# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2023 +# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 # Free Software Foundation # # This file is free software; you can redistribute it and/or modify @@ -144,8 +144,7 @@ BASE_EXPORTS = \ M4="$(M4)"; export M4; \ SED="$(SED)"; export SED; \ AWK="$(AWK)"; export AWK; \ - MAKEINFO="$(MAKEINFO)"; export MAKEINFO; \ - GUILE="$(GUILE)"; export GUILE; + MAKEINFO="$(MAKEINFO)"; export MAKEINFO; # This is the list of variables to export in the environment when # configuring subdirectories for the build system. @@ -460,8 +459,6 @@ CRAB1_LIBS = @CRAB1_LIBS@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ -GUILE = guile - # Pass additional PGO and LTO compiler options to the PGO build. BUILD_CFLAGS = $(PGO_BUILD_CFLAGS) $(PGO_BUILD_LTO_CFLAGS) override CFLAGS += $(BUILD_CFLAGS) @@ -891,7 +888,6 @@ BASE_FLAGS_TO_PASS = \ "GNATMAKE=$(GNATMAKE)" \ "GDC=$(GDC)" \ "GDCFLAGS=$(GDCFLAGS)" \ - "GUILE=$(GUILE)" \ "AR_FOR_TARGET=$(AR_FOR_TARGET)" \ "AS_FOR_TARGET=$(AS_FOR_TARGET)" \ "CC_FOR_TARGET=$(CC_FOR_TARGET)" \ @@ -68682,16 +68678,16 @@ install-strip-ld: maybe-install-strip-bfd install-strip-ld: maybe-install-strip-libctf install-bfd: maybe-install-libsframe install-strip-bfd: maybe-install-strip-libsframe -configure-opcodes: configure-bfd -configure-stage1-opcodes: configure-stage1-bfd -configure-stage2-opcodes: configure-stage2-bfd -configure-stage3-opcodes: configure-stage3-bfd -configure-stage4-opcodes: configure-stage4-bfd -configure-stageprofile-opcodes: configure-stageprofile-bfd -configure-stagetrain-opcodes: configure-stagetrain-bfd -configure-stagefeedback-opcodes: configure-stagefeedback-bfd -configure-stageautoprofile-opcodes: configure-stageautoprofile-bfd -configure-stageautofeedback-opcodes: configure-stageautofeedback-bfd +configure-opcodes: all-bfd +configure-stage1-opcodes: all-stage1-bfd +configure-stage2-opcodes: all-stage2-bfd +configure-stage3-opcodes: all-stage3-bfd +configure-stage4-opcodes: all-stage4-bfd +configure-stageprofile-opcodes: all-stageprofile-bfd +configure-stagetrain-opcodes: all-stagetrain-bfd +configure-stagefeedback-opcodes: all-stagefeedback-bfd +configure-stageautoprofile-opcodes: all-stageautoprofile-bfd +configure-stageautofeedback-opcodes: all-stageautofeedback-bfd install-opcodes: maybe-install-bfd install-strip-opcodes: maybe-install-strip-bfd configure-gas: maybe-configure-gettext @@ -68756,6 +68752,16 @@ configure-stagetrain-ld: maybe-configure-stagetrain-gettext configure-stagefeedback-ld: maybe-configure-stagefeedback-gettext configure-stageautoprofile-ld: maybe-configure-stageautoprofile-gettext configure-stageautofeedback-ld: maybe-configure-stageautofeedback-gettext +configure-ld: maybe-all-bfd +configure-stage1-ld: maybe-all-stage1-bfd +configure-stage2-ld: maybe-all-stage2-bfd +configure-stage3-ld: maybe-all-stage3-bfd +configure-stage4-ld: maybe-all-stage4-bfd +configure-stageprofile-ld: maybe-all-stageprofile-bfd +configure-stagetrain-ld: maybe-all-stagetrain-bfd +configure-stagefeedback-ld: maybe-all-stagefeedback-bfd +configure-stageautoprofile-ld: maybe-all-stageautoprofile-bfd +configure-stageautofeedback-ld: maybe-all-stageautofeedback-bfd all-ld: maybe-all-libiberty all-stage1-ld: maybe-all-stage1-libiberty all-stage2-ld: maybe-all-stage2-libiberty @@ -68766,16 +68772,6 @@ all-stagetrain-ld: maybe-all-stagetrain-libiberty all-stagefeedback-ld: maybe-all-stagefeedback-libiberty all-stageautoprofile-ld: maybe-all-stageautoprofile-libiberty all-stageautofeedback-ld: maybe-all-stageautofeedback-libiberty -all-ld: maybe-all-bfd -all-stage1-ld: maybe-all-stage1-bfd -all-stage2-ld: maybe-all-stage2-bfd -all-stage3-ld: maybe-all-stage3-bfd -all-stage4-ld: maybe-all-stage4-bfd -all-stageprofile-ld: maybe-all-stageprofile-bfd -all-stagetrain-ld: maybe-all-stagetrain-bfd -all-stagefeedback-ld: maybe-all-stagefeedback-bfd -all-stageautoprofile-ld: maybe-all-stageautoprofile-bfd -all-stageautofeedback-ld: maybe-all-stageautofeedback-bfd all-ld: maybe-all-opcodes all-stage1-ld: maybe-all-stage1-opcodes all-stage2-ld: maybe-all-stage2-opcodes @@ -69249,7 +69245,9 @@ all-gdb: maybe-all-opcodes all-gdb: maybe-all-libdecnumber all-gdb: maybe-all-libctf all-gdb: maybe-all-libbacktrace +configure-gdbserver: maybe-all-libiconv all-gdbserver: maybe-all-libiberty +all-gdbserver: maybe-all-libiconv configure-gdbsupport: maybe-configure-gettext all-gdbsupport: maybe-all-gettext configure-gprof: maybe-configure-gettext diff --git a/Makefile.tpl b/Makefile.tpl index ddcca5589137..7e74c7219298 100644 --- a/Makefile.tpl +++ b/Makefile.tpl @@ -6,7 +6,7 @@ in # # Makefile for directory with subdirs to build. # Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, -# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2023 +# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 # Free Software Foundation # # This file is free software; you can redistribute it and/or modify @@ -147,8 +147,7 @@ BASE_EXPORTS = \ M4="$(M4)"; export M4; \ SED="$(SED)"; export SED; \ AWK="$(AWK)"; export AWK; \ - MAKEINFO="$(MAKEINFO)"; export MAKEINFO; \ - GUILE="$(GUILE)"; export GUILE; + MAKEINFO="$(MAKEINFO)"; export MAKEINFO; # This is the list of variables to export in the environment when # configuring subdirectories for the build system. @@ -463,8 +462,6 @@ CRAB1_LIBS = @CRAB1_LIBS@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ -GUILE = guile - # Pass additional PGO and LTO compiler options to the PGO build. BUILD_CFLAGS = $(PGO_BUILD_CFLAGS) $(PGO_BUILD_LTO_CFLAGS) override CFLAGS += $(BUILD_CFLAGS) diff --git a/config/acx.m4 b/config/acx.m4 index c45e55e7f517..db54ccf1c7c1 100644 --- a/config/acx.m4 +++ b/config/acx.m4 @@ -107,9 +107,9 @@ AC_SUBST([target_subdir]) []dnl #### -# _NCN_TOOL_PREFIXES: Some stuff that oughtta be done in AC_CANONICAL_SYSTEM +# _NCN_TOOL_PREFIXES: Some stuff that oughtta be done in AC_CANONICAL_TARGET # or AC_INIT. -# These demand that AC_CANONICAL_SYSTEM be called beforehand. +# These demand that AC_CANONICAL_HOST and AC_CANONICAL_TARGET be called beforehand. AC_DEFUN([_NCN_TOOL_PREFIXES], [ncn_tool_prefix= test -n "$host_alias" && ncn_tool_prefix=$host_alias- diff --git a/config/lthostflags.m4 b/config/lthostflags.m4 index bc0f59ee79e0..4a389a75ea83 100644 --- a/config/lthostflags.m4 +++ b/config/lthostflags.m4 @@ -10,7 +10,7 @@ dnl Defines and AC_SUBSTs lt_host_flags AC_DEFUN([ACX_LT_HOST_FLAGS], [ -AC_REQUIRE([AC_CANONICAL_SYSTEM]) +AC_REQUIRE([AC_CANONICAL_HOST]) case $host in *-cygwin* | *-mingw*) diff --git a/configure b/configure index ccec3f21cd85..549aae7f3e3e 100755 --- a/configure +++ b/configure @@ -2343,6 +2343,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + progname=$0 # if PWD already has a value, it is probably wrong. if test -n "$PWD" ; then PWD=`${PWDCMD-pwd}`; fi @@ -2538,7 +2539,6 @@ test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- - test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. diff --git a/configure.ac b/configure.ac index 89ebe4041b61..15dccb651145 100644 --- a/configure.ac +++ b/configure.ac @@ -32,7 +32,8 @@ m4_include([ltversion.m4]) m4_include([lt~obsolete.m4]) m4_include([config/isl.m4]) -AC_INIT(move-if-change) +AC_INIT +AC_CONFIG_SRCDIR([move-if-change]) AC_DISABLE_OPTION_CHECKING progname=$0 @@ -70,14 +71,14 @@ ACX_NONCANONICAL_TARGET dnl Autoconf 2.5x and later will set a default program prefix if dnl --target was used, even if it was the same as --host. Disable -dnl that behavior. This must be done before AC_CANONICAL_SYSTEM +dnl that behavior. This must be done before AC_CANONICAL_TARGET dnl to take effect. test "$host_noncanonical" = "$target_noncanonical" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_transform_name=s,y,y, -AC_CANONICAL_SYSTEM +AC_CANONICAL_TARGET AC_ARG_PROGRAM m4_pattern_allow([^AS_FOR_TARGET$])dnl diff --git a/libbacktrace/configure b/libbacktrace/configure index 85be043009af..f1b68d6731f7 100755 --- a/libbacktrace/configure +++ b/libbacktrace/configure @@ -2739,7 +2739,6 @@ test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- - target_alias=${target_alias-$host_alias} # Expand $ac_aux_dir to an absolute path. @@ -11636,7 +11635,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11639 "configure" +#line 11638 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11742,7 +11741,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11745 "configure" +#line 11744 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libbacktrace/configure.ac b/libbacktrace/configure.ac index 6549cdeacf4f..0a5e04fcdf77 100644 --- a/libbacktrace/configure.ac +++ b/libbacktrace/configure.ac @@ -37,7 +37,8 @@ if test -n "${with_target_subdir}"; then AM_ENABLE_MULTILIB(, ..) fi -AC_CANONICAL_SYSTEM +AC_CANONICAL_HOST +AC_CANONICAL_TARGET target_alias=${target_alias-$host_alias} AC_USE_SYSTEM_EXTENSIONS diff --git a/zlib/configure b/zlib/configure index 202c15f3b513..ac76e60ff337 100755 --- a/zlib/configure +++ b/zlib/configure @@ -2425,7 +2425,6 @@ test -n "$target_alias" && NONENONEs,x,x, && program_prefix=${target_alias}- - # This works around an automake problem. mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs" @@ -10854,7 +10853,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10857 "configure" +#line 10856 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -10960,7 +10959,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10963 "configure" +#line 10962 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/zlib/configure.ac b/zlib/configure.ac index 736b760cdf57..434bfcb072a4 100644 --- a/zlib/configure.ac +++ b/zlib/configure.ac @@ -7,7 +7,7 @@ if test -n "${with_target_subdir}"; then AM_ENABLE_MULTILIB(, ..) fi -AC_CANONICAL_SYSTEM +AC_CANONICAL_TARGET # This works around an automake problem. mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs" From 6051a849aa1e8ed444ee71161d90fd800469121d Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 2 Oct 2025 08:08:09 +0800 Subject: [PATCH 035/216] Sync toplevel files from binutils-gdb commit aef88b83384976e96a8fb287a001588a2277ecd5 Author: H.J. Lu Date: Thu Oct 2 08:53:45 2025 +0800 binutils/GCC: Quote ${COMPILER_FOR_TARGET} Replace if test x${COMPILER_FOR_TARGET} = x"\$(CC)"; then with if test x"${COMPILER_FOR_TARGET}" = x"\$(CC)"; then since COMPILER_FOR_TARGET may contain spaces when configuring GCC. commit 76a693c087c30e8108852928c717399011c6166d Author: H.J. Lu Date: Tue Sep 30 11:23:58 2025 +0800 binutils: Use AC_TRY_COMPILE to check target clang/gcc Use AC_TRY_COMPILE to check for the working target clang and gcc when configuring for cross tools. commit 77c74294bfc5005204a2de3cc64bbdb2f877be29 Author: H.J. Lu Date: Fri Sep 26 08:03:01 2025 +0800 binutils: Pass target plugin file to target ar/nm/ranlib There are 2 kinds of binutils tests: 1. Tests of binutils object files and libraries using the build tools, like CC, AR, NM and RANLIB. 2. Tests of binutils programs as the target tools, like CC_FOR_TARGET, AR_FOR_TARGET, NM_FOR_TARGET and RANLIB_FOR_TARGET. Set AR_PLUGIN_OPTION_FOR_TARGET, NM_PLUGIN_OPTION_FOR_TARGET and RANLIB_PLUGIN_OPTION_FOR_TARGET to the target compiler plugin file for target ar/nm/ranlib. commit 10deea6e2fc1b9ec5818b5fa1bc510c63ff5b2e2 Author: H.J. Lu Date: Tue Sep 23 04:24:00 2025 +0800 Binutils/GCC: Add clang LTO support to AR, NM and RANLIB Add CLANG_PLUGIN_FILE to find the clang plugin file and pass it to --plugin for ar, nm and ranlib so that binutils can be built with clang LTO. Run CLANG_PLUGIN_FILE before GCC_PLUGIN_OPTION since GCC_PLUGIN_OPTION may return the wrong PLUGIN_OPTION with clang. commit 1fcb94ed750db2ac30d0f0ecc04fa0c7833dd10f Author: Rainer Orth Date: Thu Sep 18 16:17:14 2025 +0200 Remove remnants of Solaris/PowerPC support When removing Solaris/PowerPC support, I missed a couple of references. This patch removes them. Tested with crosses to ppc-unknown-linux-gnu and powerpc-ibm-aix7. ChangeLog: * Makefile.in: Regenerated. * configure: Likewise. * Makefile.tpl: Synced from binutils-gdb. * configure.ac: Likewise. * libtool.m4: Likewise. config/ChangeLog: * clang-plugin.m4: Synced from binutils-gdb. * gcc-plugin.m4: Likewise. libbacktrace/ChangeLog: * Makefile.in: Regenerated. * aclocal.m4: Likewise. * configure: Likewise. libiberty/ChangeLog: * aclocal.m4: Regenerated. * configure: Likewise. * configure.ac: Synced from binutils-gdb. zlib/ChangeLog: * Makefile.in: Regenerated. * aclocal.m4: Likewise. * configure: Likewise. Signed-off-by: H.J. Lu --- Makefile.in | 8 +- Makefile.tpl | 8 +- config/clang-plugin.m4 | 114 ++++++ config/gcc-plugin.m4 | 43 +++ configure | 758 +++++++++++++++++++++++++++++++++++- configure.ac | 40 +- libbacktrace/Makefile.in | 3 + libbacktrace/aclocal.m4 | 2 + libbacktrace/configure | 405 +++++++++++++++++++- libiberty/aclocal.m4 | 1 + libiberty/configure | 548 +++++++++++++++++++------- libiberty/configure.ac | 43 ++- libtool.m4 | 49 +-- zlib/Makefile.in | 3 + zlib/aclocal.m4 | 2 + zlib/configure | 809 ++++++++++++++++++++++++++++----------- 16 files changed, 2410 insertions(+), 426 deletions(-) create mode 100644 config/clang-plugin.m4 diff --git a/Makefile.in b/Makefile.in index 8d406d124a12..621e8dedc099 100644 --- a/Makefile.in +++ b/Makefile.in @@ -433,7 +433,7 @@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ LD = @LD@ LIPO = @LIPO@ -NM = @NM@ +NM = @NM@ @NM_PLUGIN_OPTION@ OBJDUMP = @OBJDUMP@ OTOOL = @OTOOL@ RANLIB = @RANLIB@ @RANLIB_PLUGIN_OPTION@ @@ -664,7 +664,7 @@ do-compare3 = $(do-compare) # Programs producing files for the TARGET machine # ----------------------------------------------- -AR_FOR_TARGET=@AR_FOR_TARGET@ +AR_FOR_TARGET=@AR_FOR_TARGET@ @AR_PLUGIN_OPTION_FOR_TARGET@ AS_FOR_TARGET=@AS_FOR_TARGET@ CC_FOR_TARGET=$(STAGE_CC_WRAPPER) @CC_FOR_TARGET@ @@ -684,11 +684,11 @@ DSYMUTIL_FOR_TARGET=@DSYMUTIL_FOR_TARGET@ LD_FOR_TARGET=@LD_FOR_TARGET@ LIPO_FOR_TARGET=@LIPO_FOR_TARGET@ -NM_FOR_TARGET=@NM_FOR_TARGET@ +NM_FOR_TARGET=@NM_FOR_TARGET@ @NM_PLUGIN_OPTION_FOR_TARGET@ OBJDUMP_FOR_TARGET=@OBJDUMP_FOR_TARGET@ OBJCOPY_FOR_TARGET=@OBJCOPY_FOR_TARGET@ OTOOL_FOR_TARGET=@OTOOL_FOR_TARGET@ -RANLIB_FOR_TARGET=@RANLIB_FOR_TARGET@ +RANLIB_FOR_TARGET=@RANLIB_FOR_TARGET@ @RANLIB_PLUGIN_OPTION_FOR_TARGET@ READELF_FOR_TARGET=@READELF_FOR_TARGET@ STRIP_FOR_TARGET=@STRIP_FOR_TARGET@ WINDRES_FOR_TARGET=@WINDRES_FOR_TARGET@ diff --git a/Makefile.tpl b/Makefile.tpl index 7e74c7219298..2ac4d5b46686 100644 --- a/Makefile.tpl +++ b/Makefile.tpl @@ -436,7 +436,7 @@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ LD = @LD@ LIPO = @LIPO@ -NM = @NM@ +NM = @NM@ @NM_PLUGIN_OPTION@ OBJDUMP = @OBJDUMP@ OTOOL = @OTOOL@ RANLIB = @RANLIB@ @RANLIB_PLUGIN_OPTION@ @@ -587,7 +587,7 @@ do-compare3 = $(do-compare) # Programs producing files for the TARGET machine # ----------------------------------------------- -AR_FOR_TARGET=@AR_FOR_TARGET@ +AR_FOR_TARGET=@AR_FOR_TARGET@ @AR_PLUGIN_OPTION_FOR_TARGET@ AS_FOR_TARGET=@AS_FOR_TARGET@ CC_FOR_TARGET=$(STAGE_CC_WRAPPER) @CC_FOR_TARGET@ @@ -607,11 +607,11 @@ DSYMUTIL_FOR_TARGET=@DSYMUTIL_FOR_TARGET@ LD_FOR_TARGET=@LD_FOR_TARGET@ LIPO_FOR_TARGET=@LIPO_FOR_TARGET@ -NM_FOR_TARGET=@NM_FOR_TARGET@ +NM_FOR_TARGET=@NM_FOR_TARGET@ @NM_PLUGIN_OPTION_FOR_TARGET@ OBJDUMP_FOR_TARGET=@OBJDUMP_FOR_TARGET@ OBJCOPY_FOR_TARGET=@OBJCOPY_FOR_TARGET@ OTOOL_FOR_TARGET=@OTOOL_FOR_TARGET@ -RANLIB_FOR_TARGET=@RANLIB_FOR_TARGET@ +RANLIB_FOR_TARGET=@RANLIB_FOR_TARGET@ @RANLIB_PLUGIN_OPTION_FOR_TARGET@ READELF_FOR_TARGET=@READELF_FOR_TARGET@ STRIP_FOR_TARGET=@STRIP_FOR_TARGET@ WINDRES_FOR_TARGET=@WINDRES_FOR_TARGET@ diff --git a/config/clang-plugin.m4 b/config/clang-plugin.m4 new file mode 100644 index 000000000000..cc051fe48e32 --- /dev/null +++ b/config/clang-plugin.m4 @@ -0,0 +1,114 @@ +# clang-plugin.m4 -*- Autoconf -*- +# Check clang plugin file. + +dnl Copyright (C) 2025 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl +dnl +dnl CLANG_PLUGIN_FILE +dnl (SHELL-CODE_HANDLER) +dnl +AC_DEFUN([CLANG_PLUGIN_FILE],[dnl + AC_CACHE_CHECK([for clang], clang_cv_is_clang, [ + AC_EGREP_CPP(yes, [ +#ifdef __clang__ + yes +#endif + ], clang_cv_is_clang=yes, clang_cv_is_clang=no)]) + plugin_file= + if test $clang_cv_is_clang = yes; then + AC_MSG_CHECKING([for clang plugin file]) + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + AC_CHECK_TOOL(LLVM_CONFIG, llvm-config) + if test "$?" != 0; then + AC_MSG_ERROR([Required tool 'llvm-config' not found on PATH.]) + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + AC_MSG_ERROR([Couldn't find clang plugin file for $CC.]) + fi + dnl Check if ${AR} $plugin_option rc works. + AC_CHECK_TOOL(AR, ar) + if test "${AR}" = "" ; then + AC_MSG_ERROR([Required archive tool 'ar' not found on PATH.]) + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + AC_MSG_WARN([Failed: $AR $plugin_option rc]) + plugin_file= + fi + rm -f conftest.* + AC_MSG_RESULT($plugin_file) + fi + $1="$plugin_file" +]) + +dnl +dnl +dnl CLANG_PLUGIN_FILE_FOR_TARGET +dnl (SHELL-CODE_HANDLER) +dnl +AC_DEFUN([CLANG_PLUGIN_FILE_FOR_TARGET],[dnl + COMPILER_FOR_TARGET="${CC_FOR_TARGET}" + if test x"${COMPILER_FOR_TARGET}" = x"\$(CC)"; then + COMPILER_FOR_TARGET="$CC" + fi + saved_CC="$CC" + CC="$COMPILER_FOR_TARGET" + AC_CACHE_CHECK([for clang for target], clang_target_cv_working, [ + AC_TRY_COMPILE([ +#ifndef __clang__ +#error Not clang +#endif + ], + [], + clang_target_cv_working=yes, clang_target_cv_working=no)]) + CC="$saved_CC" + plugin_file= + if test $clang_target_cv_working = yes; then + AC_MSG_CHECKING([for clang plugin file for target]) + plugin_names="LLVMgold.so" + dnl Check if the host compiler is used. + for plugin in $plugin_names; do + plugin_file=`${COMPILER_FOR_TARGET} ${CFLAGS_FOR_TARGET} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + GCC_TARGET_TOOL(llvm-config, LLVM_CONFIG_FOR_TARGET, LLVM_CONFIG) + if test "$?" != 0; then + AC_MSG_ERROR([Required target tool 'llvm-config' not found.]) + fi + clang_lib_dir=`$LLVM_CONFIG_FOR_TARGET --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + fi + if test x$plugin_file != x$plugin; then + break; + fi + plugin_file= + done + if test -n $plugin_file; then + AC_MSG_RESULT($plugin_file) + else + AC_MSG_RESULT([no]) + fi + fi + $1="$plugin_file" +]) diff --git a/config/gcc-plugin.m4 b/config/gcc-plugin.m4 index c30cfdd8fadb..0382147b3818 100644 --- a/config/gcc-plugin.m4 +++ b/config/gcc-plugin.m4 @@ -169,3 +169,46 @@ else AC_MSG_RESULT([no]) fi ]) + +dnl +dnl +dnl GCC_PLUGIN_OPTION_FOR_TARGET +dnl (SHELL-CODE_HANDLER) +dnl +AC_DEFUN([GCC_PLUGIN_OPTION_FOR_TARGET],[dnl +COMPILER_FOR_TARGET="${CC_FOR_TARGET}" +dnl Check if the host compiler is used. +if test x"${COMPILER_FOR_TARGET}" = x"\$(CC)"; then + COMPILER_FOR_TARGET="$CC" +fi +saved_CC="$CC" +CC="$COMPILER_FOR_TARGET" +AC_CACHE_CHECK([for gcc for target], gcc_target_cv_working, [ + AC_TRY_COMPILE( + [], + [], + gcc_target_cv_working=yes, + gcc_target_cv_working=no)]) +CC="$saved_CC" +AC_MSG_CHECKING([for -plugin option]) +plugin_option= +if test $gcc_target_cv_working = yes; then + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" + for plugin in $plugin_names; do + plugin_so=`${COMPILER_FOR_TARGET} ${CFLAGS_FOR_TARGET} --print-prog-name $plugin` + if test x$plugin_so = x$plugin; then + plugin_so=`${COMPILER_FOR_TARGET} ${CFLAGS_FOR_TARGET} --print-file-name $plugin` + fi + if test x$plugin_so != x$plugin; then + plugin_option="--plugin $plugin_so" + break + fi + done +fi +if test -n "$plugin_option"; then + $1="$plugin_option" + AC_MSG_RESULT($plugin_option) +else + AC_MSG_RESULT([no]) +fi +]) diff --git a/configure b/configure index 549aae7f3e3e..54b71af5d3be 100755 --- a/configure +++ b/configure @@ -596,6 +596,10 @@ MAINTAINER_MODE_TRUE COMPILER_NM_FOR_TARGET COMPILER_LD_FOR_TARGET COMPILER_AS_FOR_TARGET +RANLIB_PLUGIN_OPTION_FOR_TARGET +NM_PLUGIN_OPTION_FOR_TARGET +AR_PLUGIN_OPTION_FOR_TARGET +LLVM_CONFIG_FOR_TARGET FLAGS_FOR_TARGET RAW_CXX_FOR_TARGET WINDMC_FOR_TARGET @@ -621,7 +625,12 @@ GCC_FOR_TARGET CXX_FOR_TARGET CC_FOR_TARGET RANLIB_PLUGIN_OPTION +NM_PLUGIN_OPTION AR_PLUGIN_OPTION +LLVM_CONFIG +EGREP +GREP +CPP PKG_CONFIG_PATH GDCFLAGS READELF @@ -893,6 +902,7 @@ OBJCOPY OBJDUMP OTOOL READELF +CPP CC_FOR_TARGET CXX_FOR_TARGET GCC_FOR_TARGET @@ -1693,6 +1703,7 @@ Some influential environment variables: OBJDUMP OBJDUMP for the host OTOOL OTOOL for the host READELF READELF for the host + CPP C preprocessor CC_FOR_TARGET CC for the target CXX_FOR_TARGET @@ -1985,6 +1996,43 @@ fi as_fn_set_status $ac_retval } # ac_fn_c_try_link + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. @@ -4104,10 +4152,6 @@ case "${target}" in # always build newlib. skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'` ;; - # This is temporary until we can link against shared libraries - powerpcle-*-solaris*) - noconfigdirs="$noconfigdirs gdb sim tcl tk itcl" - ;; powerpc-*-beos*) noconfigdirs="$noconfigdirs gdb" ;; @@ -14221,7 +14265,529 @@ fi GDCFLAGS=${GDCFLAGS-${CFLAGS}} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong PLUGIN_OPTION with clang. +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + PLUGIN_FILE="$plugin_file" + +if test -n "$PLUGIN_FILE"; then + PLUGIN_OPTION="--plugin $PLUGIN_FILE" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 $as_echo_n "checking for -plugin option... " >&6; } plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" @@ -14348,12 +14914,17 @@ else $as_echo "no" >&6; } fi +fi AR_PLUGIN_OPTION= +NM_PLUGIN_OPTION= RANLIB_PLUGIN_OPTION= if test -n "$PLUGIN_OPTION"; then if $AR --help 2>&1 | grep -q "\--plugin"; then AR_PLUGIN_OPTION="$PLUGIN_OPTION" fi + if $NM --help 2>&1 | grep -q "\--plugin"; then + NM_PLUGIN_OPTION="$PLUGIN_OPTION" + fi if $RANLIB --help 2>&1 | grep -q "\--plugin"; then RANLIB_PLUGIN_OPTION="$PLUGIN_OPTION" fi @@ -14361,6 +14932,7 @@ fi + # Target tools. # Check whether --with-build-time-tools was given. @@ -20024,6 +20596,182 @@ AR_FOR_TARGET=${AR_FOR_TARGET}${extra_arflags_for_target} RANLIB_FOR_TARGET=${RANLIB_FOR_TARGET}${extra_ranlibflags_for_target} NM_FOR_TARGET=${NM_FOR_TARGET}${extra_nmflags_for_target} +# Try CLANG_PLUGIN_FILE_FOR_TARGET first since GCC_PLUGIN_OPTION_FOR_TARGET +# may return the wrong PLUGIN_OPTION_FOR_TARGET with clang. + COMPILER_FOR_TARGET="${CC_FOR_TARGET}" + if test x"${COMPILER_FOR_TARGET}" = x"\$(CC)"; then + COMPILER_FOR_TARGET="$CC" + fi + saved_CC="$CC" + CC="$COMPILER_FOR_TARGET" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang for target" >&5 +$as_echo_n "checking for clang for target... " >&6; } +if ${clang_target_cv_working+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifndef __clang__ +#error Not clang +#endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + clang_target_cv_working=yes +else + clang_target_cv_working=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_target_cv_working" >&5 +$as_echo "$clang_target_cv_working" >&6; } + CC="$saved_CC" + plugin_file= + if test $clang_target_cv_working = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file for target" >&5 +$as_echo_n "checking for clang plugin file for target... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${COMPILER_FOR_TARGET} ${CFLAGS_FOR_TARGET} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target llvm-config" >&5 +$as_echo_n "checking where to find the target llvm-config... " >&6; } +if test "x${build}" != "x${host}" ; then + if expr "x$LLVM_CONFIG_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path + ac_dir=`dirname $LLVM_CONFIG_FOR_TARGET` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } + else + # Canadian cross, just use what we found + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } + fi +else + if expr "x$LLVM_CONFIG_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path + ac_dir=`dirname $LLVM_CONFIG_FOR_TARGET` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } + elif test "x$target" = "x$host"; then + # We can use an host tool + LLVM_CONFIG_FOR_TARGET='$(LLVM_CONFIG)' + { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5 +$as_echo "host tool" >&6; } + else + # We need a cross tool + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } + fi +fi + + if test "$?" != 0; then + as_fn_error $? "Required target tool 'llvm-config' not found." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG_FOR_TARGET --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + fi + if test x$plugin_file != x$plugin; then + break; + fi + plugin_file= + done + if test -n $plugin_file; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + fi + PLUGIN_FILE_FOR_TARGET="$plugin_file" + +if test -n "$PLUGIN_FILE_FOR_TARGET"; then + PLUGIN_OPTION_FOR_TARGET="--plugin $PLUGIN_FILE_FOR_TARGET" +else + COMPILER_FOR_TARGET="${CC_FOR_TARGET}" +if test x"${COMPILER_FOR_TARGET}" = x"\$(CC)"; then + COMPILER_FOR_TARGET="$CC" +fi +saved_CC="$CC" +CC="$COMPILER_FOR_TARGET" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc for target" >&5 +$as_echo_n "checking for gcc for target... " >&6; } +if ${gcc_target_cv_working+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gcc_target_cv_working=yes +else + gcc_target_cv_working=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_target_cv_working" >&5 +$as_echo "$gcc_target_cv_working" >&6; } +CC="$saved_CC" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } +plugin_option= +if test $gcc_target_cv_working = yes; then + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" + for plugin in $plugin_names; do + plugin_so=`${COMPILER_FOR_TARGET} ${CFLAGS_FOR_TARGET} --print-prog-name $plugin` + if test x$plugin_so = x$plugin; then + plugin_so=`${COMPILER_FOR_TARGET} ${CFLAGS_FOR_TARGET} --print-file-name $plugin` + fi + if test x$plugin_so != x$plugin; then + plugin_option="--plugin $plugin_so" + break + fi + done +fi +if test -n "$plugin_option"; then + PLUGIN_OPTION_FOR_TARGET="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi +if test -n "$PLUGIN_OPTION_FOR_TARGET"; then + AR_PLUGIN_OPTION_FOR_TARGET="$PLUGIN_OPTION_FOR_TARGET" + NM_PLUGIN_OPTION_FOR_TARGET="$PLUGIN_OPTION_FOR_TARGET" + RANLIB_PLUGIN_OPTION_FOR_TARGET="$PLUGIN_OPTION_FOR_TARGET" +else + AR_PLUGIN_OPTION_FOR_TARGET= + NM_PLUGIN_OPTION_FOR_TARGET= + RANLIB_PLUGIN_OPTION_FOR_TARGET= +fi + + + + # When building target libraries, except in a Canadian cross, we use # the same toolchain as the compiler we just built. COMPILER_AS_FOR_TARGET='$(AS_FOR_TARGET)' diff --git a/configure.ac b/configure.ac index 15dccb651145..2996a124206a 100644 --- a/configure.ac +++ b/configure.ac @@ -24,6 +24,7 @@ m4_include(config/override.m4) m4_include(config/proginstall.m4) m4_include(config/elf.m4) m4_include(config/ax_cxx_compile_stdcxx.m4) +m4_include(config/clang-plugin.m4) m4_include(config/gcc-plugin.m4) m4_include([libtool.m4]) m4_include([ltoptions.m4]) @@ -1320,10 +1321,6 @@ case "${target}" in # always build newlib. skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'` ;; - # This is temporary until we can link against shared libraries - powerpcle-*-solaris*) - noconfigdirs="$noconfigdirs gdb sim tcl tk itcl" - ;; powerpc-*-beos*) noconfigdirs="$noconfigdirs gdb" ;; @@ -4016,18 +4013,30 @@ AC_SUBST(GDCFLAGS) GDCFLAGS=${GDCFLAGS-${CFLAGS}} AC_SUBST(PKG_CONFIG_PATH) -GCC_PLUGIN_OPTION(PLUGIN_OPTION) +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong PLUGIN_OPTION with clang. +CLANG_PLUGIN_FILE(PLUGIN_FILE) +if test -n "$PLUGIN_FILE"; then + PLUGIN_OPTION="--plugin $PLUGIN_FILE" +else + GCC_PLUGIN_OPTION(PLUGIN_OPTION) +fi AR_PLUGIN_OPTION= +NM_PLUGIN_OPTION= RANLIB_PLUGIN_OPTION= if test -n "$PLUGIN_OPTION"; then if $AR --help 2>&1 | grep -q "\--plugin"; then AR_PLUGIN_OPTION="$PLUGIN_OPTION" fi + if $NM --help 2>&1 | grep -q "\--plugin"; then + NM_PLUGIN_OPTION="$PLUGIN_OPTION" + fi if $RANLIB --help 2>&1 | grep -q "\--plugin"; then RANLIB_PLUGIN_OPTION="$PLUGIN_OPTION" fi fi AC_SUBST(AR_PLUGIN_OPTION) +AC_SUBST(NM_PLUGIN_OPTION) AC_SUBST(RANLIB_PLUGIN_OPTION) # Target tools. @@ -4122,6 +4131,27 @@ AR_FOR_TARGET=${AR_FOR_TARGET}${extra_arflags_for_target} RANLIB_FOR_TARGET=${RANLIB_FOR_TARGET}${extra_ranlibflags_for_target} NM_FOR_TARGET=${NM_FOR_TARGET}${extra_nmflags_for_target} +# Try CLANG_PLUGIN_FILE_FOR_TARGET first since GCC_PLUGIN_OPTION_FOR_TARGET +# may return the wrong PLUGIN_OPTION_FOR_TARGET with clang. +CLANG_PLUGIN_FILE_FOR_TARGET(PLUGIN_FILE_FOR_TARGET) +if test -n "$PLUGIN_FILE_FOR_TARGET"; then + PLUGIN_OPTION_FOR_TARGET="--plugin $PLUGIN_FILE_FOR_TARGET" +else + GCC_PLUGIN_OPTION_FOR_TARGET(PLUGIN_OPTION_FOR_TARGET) +fi +if test -n "$PLUGIN_OPTION_FOR_TARGET"; then + AR_PLUGIN_OPTION_FOR_TARGET="$PLUGIN_OPTION_FOR_TARGET" + NM_PLUGIN_OPTION_FOR_TARGET="$PLUGIN_OPTION_FOR_TARGET" + RANLIB_PLUGIN_OPTION_FOR_TARGET="$PLUGIN_OPTION_FOR_TARGET" +else + AR_PLUGIN_OPTION_FOR_TARGET= + NM_PLUGIN_OPTION_FOR_TARGET= + RANLIB_PLUGIN_OPTION_FOR_TARGET= +fi +AC_SUBST(AR_PLUGIN_OPTION_FOR_TARGET) +AC_SUBST(NM_PLUGIN_OPTION_FOR_TARGET) +AC_SUBST(RANLIB_PLUGIN_OPTION_FOR_TARGET) + # When building target libraries, except in a Canadian cross, we use # the same toolchain as the compiler we just built. COMPILER_AS_FOR_TARGET='$(AS_FOR_TARGET)' diff --git a/libbacktrace/Makefile.in b/libbacktrace/Makefile.in index 9a9b8a441dda..43d9bb54260e 100644 --- a/libbacktrace/Makefile.in +++ b/libbacktrace/Makefile.in @@ -171,7 +171,9 @@ TESTS = $(am__append_4) $(MAKETESTS) $(am__EXEEXT_17) subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -904,6 +906,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libbacktrace/aclocal.m4 b/libbacktrace/aclocal.m4 index 528e61739304..df92f64c55b9 100644 --- a/libbacktrace/aclocal.m4 +++ b/libbacktrace/aclocal.m4 @@ -853,7 +853,9 @@ AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([../config/cet.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/enable.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/multi.m4]) m4_include([../config/override.m4]) diff --git a/libbacktrace/configure b/libbacktrace/configure index f1b68d6731f7..b956afe8c345 100755 --- a/libbacktrace/configure +++ b/libbacktrace/configure @@ -691,6 +691,7 @@ LIPO NMEDIT DSYMUTIL AR +LLVM_CONFIG OBJDUMP LN_S NM @@ -6605,8 +6606,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -6617,7 +6876,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -6712,17 +7083,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -6929,9 +7298,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -11635,7 +12010,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11638 "configure" +#line 12013 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11741,7 +12116,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11744 "configure" +#line 12119 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libiberty/aclocal.m4 b/libiberty/aclocal.m4 index 364fb6bc3b46..5151f5fee189 100644 --- a/libiberty/aclocal.m4 +++ b/libiberty/aclocal.m4 @@ -14,6 +14,7 @@ m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_include([../config/acx.m4]) m4_include([../config/cet.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/enable.m4]) m4_include([../config/gcc-plugin.m4]) m4_include([../config/hwcaps.m4]) diff --git a/libiberty/configure b/libiberty/configure index 02fbaabe89e7..8996b6ea5e14 100755 --- a/libiberty/configure +++ b/libiberty/configure @@ -640,6 +640,9 @@ INSTALL_PROGRAM OUTPUT_OPTION NO_MINUS_C_MINUS_O ac_libiberty_warn_cflags +RANLIB_PLUGIN_OPTION +AR_PLUGIN_OPTION +LLVM_CONFIG EGREP GREP CPP @@ -650,8 +653,6 @@ CPPFLAGS LDFLAGS CFLAGS CC -RANLIB_PLUGIN_OPTION -AR_PLUGIN_OPTION RANLIB AR host_os @@ -2947,144 +2948,6 @@ else fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 -$as_echo_n "checking for -plugin option... " >&6; } - -plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" -plugin_option= -for plugin in $plugin_names; do - plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` - if test x$plugin_so = x$plugin; then - plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` - fi - if test x$plugin_so != x$plugin; then - plugin_option="--plugin $plugin_so" - break - fi -done -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="${ac_tool_prefix}ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_AR="ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_AR" = x; then - AR="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -else - AR="$ac_cv_prog_AR" -fi - -if test "${AR}" = "" ; then - as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 -fi -touch conftest.c -${AR} $plugin_option rc conftest.a conftest.c -if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - plugin_option= -fi -rm -f conftest.* -if test -n "$plugin_option"; then - PLUGIN_OPTION="$plugin_option" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 -$as_echo "$plugin_option" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - -if test -n "$PLUGIN_OPTION"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - AR_PLUGIN_OPTION="$PLUGIN_OPTION" - - fi - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB_PLUGIN_OPTION="$PLUGIN_OPTION" - - fi -fi - # Add --enable-multilib to configure. # Default to --enable-multilib # Check whether --enable-multilib was given. @@ -4616,6 +4479,411 @@ fi ac_c_preproc_warn_flag=yes +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong PLUGIN_OPTION with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + PLUGIN_FILE="$plugin_file" + +if test -n "$PLUGIN_FILE"; then + PLUGIN_OPTION="--plugin $PLUGIN_FILE" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + +plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= +for plugin in $plugin_names; do + plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` + if test x$plugin_so = x$plugin; then + plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` + fi + if test x$plugin_so != x$plugin; then + plugin_option="--plugin $plugin_so" + break + fi +done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + PLUGIN_OPTION="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi +if test -n "$PLUGIN_OPTION"; then + case "$AR" in + *"$PLUGIN_OPTION"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then + AR_PLUGIN_OPTION="$PLUGIN_OPTION" + + fi + ;; + esac + case "$RANLIB" in + *"$PLUGIN_OPTION"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB_PLUGIN_OPTION="$PLUGIN_OPTION" + + fi + ;; + esac +fi + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' diff --git a/libiberty/configure.ac b/libiberty/configure.ac index 3de5eca0df2b..199fa192fe4c 100644 --- a/libiberty/configure.ac +++ b/libiberty/configure.ac @@ -114,18 +114,6 @@ dnl to call AC_CHECK_PROG. AC_CHECK_TOOL(AR, ar) AC_CHECK_TOOL(RANLIB, ranlib, :) -GCC_PLUGIN_OPTION(PLUGIN_OPTION) -if test -n "$PLUGIN_OPTION"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - AR_PLUGIN_OPTION="$PLUGIN_OPTION" - AC_SUBST(AR_PLUGIN_OPTION) - fi - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB_PLUGIN_OPTION="$PLUGIN_OPTION" - AC_SUBST(RANLIB_PLUGIN_OPTION) - fi -fi - dnl When switching to automake, replace the following with AM_ENABLE_MULTILIB. # Add --enable-multilib to configure. # Default to --enable-multilib @@ -176,6 +164,37 @@ AC_USE_SYSTEM_EXTENSIONS AC_SYS_LARGEFILE AC_PROG_CPP_WERROR +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong PLUGIN_OPTION with clang. +CLANG_PLUGIN_FILE(PLUGIN_FILE) +if test -n "$PLUGIN_FILE"; then + PLUGIN_OPTION="--plugin $PLUGIN_FILE" +else + GCC_PLUGIN_OPTION(PLUGIN_OPTION) +fi +if test -n "$PLUGIN_OPTION"; then + case "$AR" in + *"$PLUGIN_OPTION"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then + AR_PLUGIN_OPTION="$PLUGIN_OPTION" + AC_SUBST(AR_PLUGIN_OPTION) + fi + ;; + esac + case "$RANLIB" in + *"$PLUGIN_OPTION"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB_PLUGIN_OPTION="$PLUGIN_OPTION" + AC_SUBST(RANLIB_PLUGIN_OPTION) + fi + ;; + esac +fi + ACX_PROG_CC_WARNING_OPTS([-W -Wall -Wwrite-strings -Wc++-compat \ -Wstrict-prototypes \ -Wshadow=local], [ac_libiberty_warn_cflags]) diff --git a/libtool.m4 b/libtool.m4 index add2d4a1e23d..0e639dc98b24 100644 --- a/libtool.m4 +++ b/libtool.m4 @@ -1372,32 +1372,27 @@ need_locks="$enable_libtool_lock" # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], -[plugin_option= -plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" -for plugin in $plugin_names; do - plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` - if test x$plugin_so = x$plugin; then - plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` - fi - if test x$plugin_so != x$plugin; then - plugin_option="--plugin $plugin_so" - break - fi -done - +[ +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. +CLANG_PLUGIN_FILE(plugin_file) +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + GCC_PLUGIN_OPTION(plugin_option) +fi AC_CHECK_TOOL(AR, ar, false) test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - AC_MSG_WARN([Failed: $AR $plugin_option rc]) - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru _LT_DECL([], [AR], [1], [The archiver]) @@ -1410,9 +1405,15 @@ _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) diff --git a/zlib/Makefile.in b/zlib/Makefile.in index 80fe3b691166..23b5afe576d0 100644 --- a/zlib/Makefile.in +++ b/zlib/Makefile.in @@ -93,8 +93,10 @@ target_triplet = @target@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -305,6 +307,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/zlib/aclocal.m4 b/zlib/aclocal.m4 index f3676e70476c..b8f66c523266 100644 --- a/zlib/aclocal.m4 +++ b/zlib/aclocal.m4 @@ -1168,8 +1168,10 @@ AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([../config/cet.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) m4_include([../config/enable.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/multi.m4]) m4_include([../config/override.m4]) diff --git a/zlib/configure b/zlib/configure index ac76e60ff337..9aae63551026 100755 --- a/zlib/configure +++ b/zlib/configure @@ -643,7 +643,6 @@ toolexeclibdir toolexecdir ENABLE_DARWIN_AT_RPATH_FALSE ENABLE_DARWIN_AT_RPATH_TRUE -CPP OTOOL64 OTOOL LIPO @@ -651,6 +650,8 @@ NMEDIT DSYMUTIL RANLIB AR +LLVM_CONFIG +CPP OBJDUMP LN_S NM @@ -1573,6 +1574,43 @@ fi } # ac_fn_c_try_compile +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. @@ -1650,43 +1688,6 @@ $as_echo "$ac_res" >&6; } } # ac_fn_c_check_header_compile -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes @@ -5523,29 +5524,190 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= -plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" -for plugin in $plugin_names; do - plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` - if test x$plugin_so = x$plugin; then - plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` - fi - if test x$plugin_so != x$plugin; then - plugin_option="--plugin $plugin_so" - break - fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -5554,7 +5716,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="${ac_tool_prefix}ar" + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -5564,10 +5726,10 @@ IFS=$as_save_IFS fi fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -5575,17 +5737,124 @@ fi fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -5614,7 +5883,7 @@ $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then - AR="false" + AR="" else case $cross_compiling:$ac_tool_warned in yes:) @@ -5628,19 +5897,257 @@ else AR="$ac_cv_prog_AR" fi -test -z "$AR" && AR=ar -if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" touch conftest.c - $AR $plugin_option rc conftest.a conftest.c + ${AR} $plugin_option rc conftest.a conftest.c if test "$?" != 0; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else - AR="$AR $plugin_option" + plugin_file= fi rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + +plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= +for plugin in $plugin_names; do + plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` + if test x$plugin_so = x$plugin; then + plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` + fi + if test x$plugin_so != x$plugin; then + plugin_option="--plugin $plugin_so" + break + fi +done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +if test -n "$plugin_option"; then + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then + AR="$AR $plugin_option" + fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -5847,9 +6354,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -7007,144 +7520,6 @@ $as_echo "$lt_cv_ld_force_load" >&6; } ;; esac -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : @@ -10853,7 +11228,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10856 "configure" +#line 11231 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -10959,7 +11334,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10962 "configure" +#line 11337 "configure" #include "confdefs.h" #if HAVE_DLFCN_H From 0e91910c0708a60b3ac521a4ea74e44301109f4a Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Wed, 1 Oct 2025 14:16:50 +0200 Subject: [PATCH 036/216] tree-optimization/122079 - PRE antic_compute doesn't converge The following fixes another case of us pruning from the value set based on the expression set after expression removal when the maximum expression set is involved. PR tree-optimization/122079 * tree-ssa-pre.cc (prune_clobbered_mems): Do not prune values when the maximum expression set is involved. * gcc.dg/torture/pr122079-1.c: New testcase. --- gcc/testsuite/gcc.dg/torture/pr122079-1.c | 27 +++++++++++++++++++++++ gcc/tree-ssa-pre.cc | 8 +++++-- 2 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr122079-1.c diff --git a/gcc/testsuite/gcc.dg/torture/pr122079-1.c b/gcc/testsuite/gcc.dg/torture/pr122079-1.c new file mode 100644 index 000000000000..0af01a581a17 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr122079-1.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-fcode-hoisting" } */ + +int a, b, c; +void e(int *f) { + int d = 0; + if (f) + goto g; + goto h; +i: + d = 1 + f[0]; +j: + if (c) + goto h; +k: + if (b) + goto i; + if (a) + goto j; +g: + if (d + f[0]) + goto k; +h: + int l[] = {f[0]}; + if (a) + e(l); +} diff --git a/gcc/tree-ssa-pre.cc b/gcc/tree-ssa-pre.cc index 64ffaca21aba..d08caab952a1 100644 --- a/gcc/tree-ssa-pre.cc +++ b/gcc/tree-ssa-pre.cc @@ -2049,8 +2049,12 @@ prune_clobbered_mems (bitmap_set_t set, basic_block block, bool clean_traps) the bitmap_find_leader way to see if there's still an expression for it. For some ratio of to be removed values and number of values/expressions in the set this might be faster than rebuilding - the value-set. */ - if (any_removed) + the value-set. + Note when there's a MAX solution on one edge (clean_traps) do not + prune values as we need to consider the resulting expression set MAX + as well. This avoids a later growing ANTIC_IN value-set during + iteration, when the explicitly represented expression set grows. */ + if (any_removed && !clean_traps) { bitmap_clear (&set->values); FOR_EACH_EXPR_ID_IN_SET (set, i, bi) From 0f8c6f479e65af985d4d374cc9b3405327124d66 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Wed, 1 Oct 2025 14:55:17 +0200 Subject: [PATCH 037/216] tree-optimization/122079 - PRE antic compute doesn't converge The following re-instantiates the pruning of the ANTIC_IN value set by the previous iterations one by reverting part of r16-3945-gc30f58c3f7ec25. The earlier fixes made sure the initial value set is appropriately big to not cause this to lose optimizations. But it seems to be still required for correctness given iteration order means we combine ANTIC_IN sets from different generations which can be prone to oscillations in CFG cycles. PR tree-optimization/122079 * tree-ssa-pre.cc (compute_antic_aux): Re-instantiate ANTIC_IN value pruning by the old solution. * gcc.dg/torture/pr122079-2.c: New testcase. * gcc.dg/torture/pr122079-3.c: Likewise. --- gcc/testsuite/gcc.dg/torture/pr122079-2.c | 27 +++++++++++++++++++++++ gcc/testsuite/gcc.dg/torture/pr122079-3.c | 27 +++++++++++++++++++++++ gcc/tree-ssa-pre.cc | 27 +++++++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/torture/pr122079-2.c create mode 100644 gcc/testsuite/gcc.dg/torture/pr122079-3.c diff --git a/gcc/testsuite/gcc.dg/torture/pr122079-2.c b/gcc/testsuite/gcc.dg/torture/pr122079-2.c new file mode 100644 index 000000000000..40c36b0fefff --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr122079-2.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ + +int a, b, *c = &a, d, e, f; +void g(int *p) { a = p[0]; } +int main() { + int h = 0; +i: + d = c[0]; + c[0] = h; + if (a) + goto j; +k: + h = c[0] - 1; + while (1) { + if (b) + goto i; + if (f) + goto k; + j: + if (!e) { + int m[] = {c[0]}; + g(m); + break; + } + } + return 0; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr122079-3.c b/gcc/testsuite/gcc.dg/torture/pr122079-3.c new file mode 100644 index 000000000000..df95c7181997 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr122079-3.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-fno-tree-loop-im" } */ + +int a, b, c; +void d(int[]); +void e(int f[][2]) { +g: + b = f[0][1]; + if (c) + goto h; +i: + if (a) + goto g; + if (f[1][1]) + goto j; +h: + if (f[1][1]) + goto i; + goto k; +j: + b--; + if (b + f[0][1]) + goto i; +k: + int l[] = {f[0][1]}; + d(l); +} diff --git a/gcc/tree-ssa-pre.cc b/gcc/tree-ssa-pre.cc index d08caab952a1..2a7dcbee52ce 100644 --- a/gcc/tree-ssa-pre.cc +++ b/gcc/tree-ssa-pre.cc @@ -2084,6 +2084,7 @@ compute_antic_aux (basic_block block, bool block_has_abnormal_pred_edge) edge e; edge_iterator ei; + bool was_visited = BB_VISITED (block); bool changed = ! BB_VISITED (block); bool any_max_on_edge = false; @@ -2219,6 +2220,32 @@ compute_antic_aux (basic_block block, bool block_has_abnormal_pred_edge) /* clean (ANTIC_IN (block)) is defered to after the iteration converged because it can cause non-convergence, see for example PR81181. */ + if (was_visited + && bitmap_and_into (&ANTIC_IN (block)->values, &old->values)) + { + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf (dump_file, "warning: intersecting with old ANTIC_IN " + "shrinks the set\n"); + /* Prune expressions not in the value set. */ + bitmap_iterator bi; + unsigned int i; + unsigned int to_clear = -1U; + FOR_EACH_EXPR_ID_IN_SET (ANTIC_IN (block), i, bi) + { + if (to_clear != -1U) + { + bitmap_clear_bit (&ANTIC_IN (block)->expressions, to_clear); + to_clear = -1U; + } + pre_expr expr = expression_for_id (i); + unsigned int value_id = get_expr_value_id (expr); + if (!bitmap_bit_p (&ANTIC_IN (block)->values, value_id)) + to_clear = i; + } + if (to_clear != -1U) + bitmap_clear_bit (&ANTIC_IN (block)->expressions, to_clear); + } + if (!bitmap_set_equal (old, ANTIC_IN (block))) changed = true; From 5f08e49653f5c04df39faef23bba4abfb555e053 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 2 Oct 2025 15:36:51 +0800 Subject: [PATCH 038/216] Regenerate aclocal.m4/configure/Makefile.in Regenerate aclocal.m4/configure/Makefile.in for commit 6051a849aa1e8ed444ee71161d90fd800469121d Author: H.J. Lu Date: Thu Oct 2 08:08:09 2025 +0800 Sync toplevel files from binutils-gdb gcc/ * aclocal.m4: Regenerated. * configure: Likewise. libcc1/ * Makefile.in: Regenerated. * aclocal.m4: Likewise. * configure: Likewise. Signed-off-by: H.J. Lu --- gcc/aclocal.m4 | 1 + gcc/configure | 405 +++++++++++++++++++++++++++++++++++++++++++-- libcc1/Makefile.in | 13 +- libcc1/aclocal.m4 | 11 +- libcc1/configure | 405 +++++++++++++++++++++++++++++++++++++++++++-- 5 files changed, 794 insertions(+), 41 deletions(-) diff --git a/gcc/aclocal.m4 b/gcc/aclocal.m4 index 762e9490b6a8..e44fc5fb2ab6 100644 --- a/gcc/aclocal.m4 +++ b/gcc/aclocal.m4 @@ -69,6 +69,7 @@ m4_include([../ltversion.m4]) m4_include([../lt~obsolete.m4]) m4_include([../config/acx.m4]) m4_include([../config/cet.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/codeset.m4]) m4_include([../config/depstand.m4]) m4_include([../config/dfp.m4]) diff --git a/gcc/configure b/gcc/configure index d6cc7fc17ca0..38d8cd919cba 100755 --- a/gcc/configure +++ b/gcc/configure @@ -758,6 +758,7 @@ LIPO NMEDIT DSYMUTIL STRIP +LLVM_CONFIG OBJDUMP ac_ct_DUMPBIN DUMPBIN @@ -16455,8 +16456,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -16467,7 +16726,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -16562,17 +16933,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -16779,9 +17148,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -21484,7 +21859,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 21487 "configure" +#line 21862 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -21590,7 +21965,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 21593 "configure" +#line 21968 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libcc1/Makefile.in b/libcc1/Makefile.in index 9d56a8323b05..6d5ae7212ffd 100644 --- a/libcc1/Makefile.in +++ b/libcc1/Makefile.in @@ -92,17 +92,17 @@ target_triplet = @target@ @DARWIN_DYNAMIC_LOOKUP_TRUE@am__append_1 = -Wl,-undefined,dynamic_lookup subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ - $(top_srcdir)/../config/cet.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/../libtool.m4 \ + $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \ + $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \ + $(top_srcdir)/../config/acx.m4 $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/override.m4 \ - $(top_srcdir)/../config/warnings.m4 \ - $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \ - $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \ - $(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/configure.ac + $(top_srcdir)/../config/warnings.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ @@ -284,6 +284,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libcc1/aclocal.m4 b/libcc1/aclocal.m4 index 2348721062e4..b5654982e9b1 100644 --- a/libcc1/aclocal.m4 +++ b/libcc1/aclocal.m4 @@ -1167,16 +1167,17 @@ AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR +m4_include([../libtool.m4]) +m4_include([../ltoptions.m4]) +m4_include([../ltsugar.m4]) +m4_include([../ltversion.m4]) +m4_include([../lt~obsolete.m4]) m4_include([../config/acx.m4]) m4_include([../config/cet.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) m4_include([../config/enable.m4]) m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/override.m4]) m4_include([../config/warnings.m4]) -m4_include([../libtool.m4]) -m4_include([../ltoptions.m4]) -m4_include([../ltsugar.m4]) -m4_include([../ltversion.m4]) -m4_include([../lt~obsolete.m4]) diff --git a/libcc1/configure b/libcc1/configure index ea689a353c8e..685f2abe178e 100755 --- a/libcc1/configure +++ b/libcc1/configure @@ -660,6 +660,7 @@ NMEDIT DSYMUTIL RANLIB AR +LLVM_CONFIG OBJDUMP LN_S NM @@ -5861,8 +5862,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -5873,7 +6132,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -5968,17 +6339,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -6185,9 +6554,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -10890,7 +11265,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10893 "configure" +#line 11268 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -10996,7 +11371,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10999 "configure" +#line 11374 "configure" #include "confdefs.h" #if HAVE_DLFCN_H From 73888cefe6da6531c590216c74ea5e04521897cb Mon Sep 17 00:00:00 2001 From: Alfie Richards Date: Wed, 2 Apr 2025 13:37:02 +0000 Subject: [PATCH 039/216] c: Add target_version attribute support. This commit introduces support for the target_version attribute in the c frontend, following the behavior defined in the Arm C Language Extension. Key changes include: - During pushdecl, the compiler now checks whether the current symbol is part of a multiversioned set. - New versions are added to the function multiversioning (FMV) set, and the symbol binding is updated to include the default version (if present). This means the binding for a multiversioned symbol will always reference the default version (if present), as it defines the scope and signature for the entire set. - Pre-existing versions are merged with their previous version (or diagnosed). - Lookup logic is adjusted to prevent resolving non-default versions. - start_decl and start_function are updated to handle marking and mangling of versioned functions. - c_parse_final_cleanups now includes a call to process_same_body_aliases. This has no functional impact other than setting cpp_implicit_aliases_done on all nodes, which is necessary for certain shared FMV logic. gcc/c/ChangeLog: * c-decl.cc (maybe_mark_function_versioned): New function. (merge_decls): Preserve DECL_FUNCTION_VERSIONED in merging. (duplicate_decls): Add check and diagnostic for unmergable version decls. (pushdecl): Add FMV target_version logic. (lookup_name): Don't resolve non-default versions. (start_decl): Mark and mangle versioned functions. (start_function): Mark and mangle versioned functions. (c_parse_final_cleanups): Add call to process_same_body_aliases. gcc/testsuite/ChangeLog: * gcc.target/aarch64/mv-1.c: New test. * gcc.target/aarch64/mv-and-mvc1.c: New test. * gcc.target/aarch64/mv-and-mvc2.c: New test. * gcc.target/aarch64/mv-and-mvc3.c: New test. * gcc.target/aarch64/mv-and-mvc4.c: New test. * gcc.target/aarch64/mv-symbols1.c: New test. * gcc.target/aarch64/mv-symbols10.c: New test. * gcc.target/aarch64/mv-symbols11.c: New test. * gcc.target/aarch64/mv-symbols12.c: New test. * gcc.target/aarch64/mv-symbols13.c: New test. * gcc.target/aarch64/mv-symbols14.c: New test. * gcc.target/aarch64/mv-symbols2.c: New test. * gcc.target/aarch64/mv-symbols3.c: New test. * gcc.target/aarch64/mv-symbols4.c: New test. * gcc.target/aarch64/mv-symbols5.c: New test. * gcc.target/aarch64/mv-symbols6.c: New test. * gcc.target/aarch64/mv-symbols7.c: New test. * gcc.target/aarch64/mv-symbols8.c: New test. * gcc.target/aarch64/mv-symbols9.c: New test. * gcc.target/aarch64/mvc-symbols1.c: New test. * gcc.target/aarch64/mvc-symbols2.c: New test. * gcc.target/aarch64/mvc-symbols3.c: New test. * gcc.target/aarch64/mvc-symbols4.c: New test. --- gcc/c/c-decl.cc | 112 ++++++++++++++++++ gcc/testsuite/gcc.target/aarch64/mv-1.c | 43 +++++++ .../gcc.target/aarch64/mv-and-mvc1.c | 37 ++++++ .../gcc.target/aarch64/mv-and-mvc2.c | 28 +++++ .../gcc.target/aarch64/mv-and-mvc3.c | 40 +++++++ .../gcc.target/aarch64/mv-and-mvc4.c | 37 ++++++ .../gcc.target/aarch64/mv-symbols1.c | 38 ++++++ .../gcc.target/aarch64/mv-symbols10.c | 42 +++++++ .../gcc.target/aarch64/mv-symbols11.c | 16 +++ .../gcc.target/aarch64/mv-symbols12.c | 27 +++++ .../gcc.target/aarch64/mv-symbols13.c | 28 +++++ .../gcc.target/aarch64/mv-symbols14.c | 34 ++++++ .../gcc.target/aarch64/mv-symbols2.c | 28 +++++ .../gcc.target/aarch64/mv-symbols3.c | 27 +++++ .../gcc.target/aarch64/mv-symbols4.c | 31 +++++ .../gcc.target/aarch64/mv-symbols5.c | 36 ++++++ .../gcc.target/aarch64/mv-symbols6.c | 20 ++++ .../gcc.target/aarch64/mv-symbols7.c | 47 ++++++++ .../gcc.target/aarch64/mv-symbols8.c | 47 ++++++++ .../gcc.target/aarch64/mv-symbols9.c | 44 +++++++ .../gcc.target/aarch64/mvc-symbols1.c | 25 ++++ .../gcc.target/aarch64/mvc-symbols2.c | 15 +++ .../gcc.target/aarch64/mvc-symbols3.c | 19 +++ .../gcc.target/aarch64/mvc-symbols4.c | 12 ++ 24 files changed, 833 insertions(+) create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-1.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-and-mvc1.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-and-mvc2.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-and-mvc3.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-and-mvc4.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols1.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols10.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols11.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols12.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols13.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols14.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols2.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols3.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols4.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols5.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols6.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols7.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols8.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols9.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mvc-symbols1.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mvc-symbols2.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mvc-symbols3.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mvc-symbols4.c diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc index 7e4c7c2ac3f6..825487529d06 100644 --- a/gcc/c/c-decl.cc +++ b/gcc/c/c-decl.cc @@ -2086,6 +2086,29 @@ previous_tag (tree type) return NULL_TREE; } +/* Subroutine to mark functions as versioned when using the attribute + 'target_version'. */ + +static void +maybe_mark_function_versioned (tree decl) +{ + if (!DECL_FUNCTION_VERSIONED (decl)) + { + /* We need to insert function version now to make sure the correct + pre-mangled assembler name is recorded. */ + cgraph_node *node = cgraph_node::get_create (decl); + + if (!node->function_version ()) + node->insert_new_function_version (); + + DECL_FUNCTION_VERSIONED (decl) = 1; + + tree mangled_name + = targetm.mangle_decl_assembler_name (decl, DECL_NAME (decl)); + SET_DECL_ASSEMBLER_NAME (decl, mangled_name); + } +} + /* Subroutine of duplicate_decls. Compare NEWDECL to OLDDECL. Returns true if the caller should proceed to merge the two, false if OLDDECL should simply be discarded. As a side effect, issues @@ -2505,6 +2528,10 @@ diagnose_mismatched_decls (tree newdecl, tree olddecl, "but not here"); } } + /* Check if these are unmergable overlapping FMV declarations. */ + if (!TARGET_HAS_FMV_TARGET_ATTRIBUTE + && diagnose_versioned_decls (olddecl, newdecl)) + return false; } else if (VAR_P (newdecl)) { @@ -2971,6 +2998,12 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype) if (TREE_CODE (newdecl) == FUNCTION_DECL) { + if (DECL_FUNCTION_VERSIONED (olddecl) + || DECL_FUNCTION_VERSIONED (newdecl)) + { + maybe_mark_function_versioned (olddecl); + maybe_mark_function_versioned (newdecl); + } /* If we're redefining a function previously defined as extern inline, make sure we emit debug info for the inline before we throw it away, in case it was inlined into a function that @@ -3370,6 +3403,53 @@ pushdecl (tree x) TREE_TYPE (b_use->decl) = b_use->u.type; } } + + /* Check if x is part of a FMV set with b_use. */ + if (b_use && TREE_CODE (b_use->decl) == FUNCTION_DECL + && TREE_CODE (x) == FUNCTION_DECL && DECL_FILE_SCOPE_P (b_use->decl) + && DECL_FILE_SCOPE_P (x) + && disjoint_version_decls (x, b_use->decl) + && comptypes (vistype, type) != 0) + { + maybe_mark_function_versioned (b_use->decl); + maybe_mark_function_versioned (b->decl); + maybe_mark_function_versioned (x); + + cgraph_node *b_node = cgraph_node::get_create (b_use->decl); + cgraph_function_version_info *b_v = b_node->function_version (); + if (!b_v) + b_v = b_node->insert_new_function_version (); + + /* Check if this new node conflicts with any previous functions + in the set. */ + cgraph_function_version_info *version = b_v; + for (; version; version = version->next) + if (!disjoint_version_decls (version->this_node->decl, x)) + { + /* The decls define overlapping version, so attempt to merge + or diagnose the conflict. */ + if (duplicate_decls (x, version->this_node->decl)) + return version->this_node->decl; + else + return error_mark_node; + } + + /* This is a new version to be added to FMV structure. */ + cgraph_node::add_function_version (b_v, x); + + /* Get the first node from the structure. */ + cgraph_function_version_info *default_v = b_v; + while (default_v->prev) + default_v = default_v->prev; + /* Always use the default node for the bindings. */ + b_use->decl = default_v->this_node->decl; + b->decl = default_v->this_node->decl; + + /* Node is not a duplicate, so no need to do the rest of the + checks. */ + return x; + } + if (duplicate_decls (x, b_use->decl)) { if (b_use != b) @@ -4494,6 +4574,12 @@ tree lookup_name (tree name) { struct c_binding *b = I_SYMBOL_BINDING (name); + /* Do not resolve non-default function versions. */ + if (b + && TREE_CODE (b->decl) == FUNCTION_DECL + && DECL_FUNCTION_VERSIONED (b->decl) + && !is_function_default_version (b->decl)) + return NULL_TREE; if (b && !b->invisible) { maybe_record_typedef_use (b->decl); @@ -5776,6 +5862,17 @@ start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs, && VAR_OR_FUNCTION_DECL_P (decl)) objc_check_global_decl (decl); + /* To enable versions to be created across TU's we mark and mangle all + non-default versioned functions. */ + if (TREE_CODE (decl) == FUNCTION_DECL + && !TARGET_HAS_FMV_TARGET_ATTRIBUTE + && get_target_version (decl).is_valid ()) + { + maybe_mark_function_versioned (decl); + if (current_scope != file_scope) + error ("versioned declarations are only allowed at file scope"); + } + /* Add this decl to the current scope. TEM may equal DECL or it may be a previous decl of the same name. */ if (do_push) @@ -10754,6 +10851,17 @@ start_function (struct c_declspecs *declspecs, struct c_declarator *declarator, warn_parm_array_mismatch (origloc, old_decl, parms); } + /* To enable versions to be created across TU's we mark and mangle all + non-default versioned functions. */ + if (TREE_CODE (decl1) == FUNCTION_DECL + && !TARGET_HAS_FMV_TARGET_ATTRIBUTE + && get_target_version (decl1).is_valid ()) + { + maybe_mark_function_versioned (decl1); + if (current_scope != file_scope) + error ("versioned definitions are only allowed at file scope"); + } + /* Record the decl so that the function name is defined. If we already have a decl for this name, and it is a FUNCTION_DECL, use the old decl. */ @@ -13585,6 +13693,10 @@ c_parse_final_cleanups (void) c_write_global_declarations_1 (BLOCK_VARS (DECL_INITIAL (t))); c_write_global_declarations_1 (BLOCK_VARS (ext_block)); + /* Call this to set cpp_implicit_aliases_done on all nodes. This is + important for function multiversioning aliases to get resolved. */ + symtab->process_same_body_aliases (); + if (!in_lto_p) free_attr_access_data (); diff --git a/gcc/testsuite/gcc.target/aarch64/mv-1.c b/gcc/testsuite/gcc.target/aarch64/mv-1.c new file mode 100644 index 000000000000..6f095ecd7a73 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-1.c @@ -0,0 +1,43 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("default"))) int +foo () +{ + return 1; +} + +__attribute__ ((target_version ("rng"))) int +foo () +{ + return 2; +} + +__attribute__ ((target_version ("flagm"))) int +foo () +{ + return 3; +} + +__attribute__ ((target_version ("rng+flagm"))) int +foo () +{ + return 4; +} + +int +bar () +{ + return foo (); +} + +/* Check usage of the first two FMV features, in case of off-by-one errors. */ +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mrng:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MrngMflagm:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mflagm:\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-and-mvc1.c b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc1.c new file mode 100644 index 000000000000..39ed306eec25 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc1.c @@ -0,0 +1,37 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__((target_version("default"))) +int foo () +{ + return 0; +} + +__attribute__((target_clones("dotprod", "sve+sve2"))) +int foo () +{ + return 1; +} + +__attribute__((target_clones("sve", "sve2"))) +int foo () +{ + return 2; +} + +int bar() +{ + return foo (); +} + + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Msve:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Msve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-and-mvc2.c b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc2.c new file mode 100644 index 000000000000..17c7cbdd02da --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc2.c @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__((target_version("default"))) +int foo (); + +__attribute__((target_clones("dotprod", "sve+sve2"))) +int foo () +{ + return 1; +} + +__attribute__((target_clones("sve", "sve2"))) +int foo () +{ + return 2; +} + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Msve:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Msve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 0 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-and-mvc3.c b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc3.c new file mode 100644 index 000000000000..8325c8e06999 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc3.c @@ -0,0 +1,40 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__((target_clones("dotprod", "sve+sve2"))) +int foo (); + +__attribute__((target_version("default"))) +int foo () +{ + return 0; +} + +__attribute__((target_clones("sve", "sve2"))) +int foo () +{ + return 2; +} + +int bar() +{ + return foo (); +} + + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Msve:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Msve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ +// { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, foo\.default\n" 1 } } +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, foo\._Mdotprod\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, foo\._MsveMsve2\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, foo\._Msve\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, foo\._Msve2\n" 1 } } */ + diff --git a/gcc/testsuite/gcc.target/aarch64/mv-and-mvc4.c b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc4.c new file mode 100644 index 000000000000..951c9500d747 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc4.c @@ -0,0 +1,37 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__((target_version("dotprod"))) +int foo () +{ + return 0; +} + +__attribute__((target_clones("default", "sve+sve2"))) +int foo () +{ + return 1; +} + +__attribute__((target_clones("sve", "sve2"))) +int foo () +{ + return 2; +} + +int bar() +{ + return foo (); +} + + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Msve:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Msve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols1.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols1.c new file mode 100644 index 000000000000..798227826e50 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols1.c @@ -0,0 +1,38 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +// Basic case of fmv correctness with all functions and use in one TU. + +__attribute__ ((target_version ("default"))) int +foo () +{ + return 1; +} + +__attribute__ ((target_version ("dotprod"))) int +foo () +{ + return 3; +} +__attribute__ ((target_version ("sve+sve2"))) int +foo () +{ + return 5; +} + +int +bar () +{ + return foo (); +} + +/* When updating any of the symbol names in these tests, make sure to also + update any tests for their absence in mv-symbolsN.C */ + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols10.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols10.c new file mode 100644 index 000000000000..d5256389d7bb --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols10.c @@ -0,0 +1,42 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +int +foo (); + +int +foo () +{ + return 1; +} + +__attribute__ ((target_version ("dotprod"))) int +foo () +{ + return 3; +} +__attribute__ ((target_version ("sve+sve2"))) int +foo () +{ + return 5; +} + +int +bar () +{ + return foo (); +} + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\._MsveMsve2\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\._Mdotprod\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\.default\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols11.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols11.c new file mode 100644 index 000000000000..fd3dc345a599 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols11.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +// Check that types can be combined + +__attribute__ ((target_version ("default"))) int +foo (int a, int (*b)[4]) { return 1; } + +__attribute__ ((target_version ("dotprod"))) int +foo (int a, int (*b)[]) { return 3; } + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols12.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols12.c new file mode 100644 index 000000000000..1a0b667eb5f1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols12.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("default"))) int +foo () { return 1; } + +__attribute__ ((target_version ("dotprod"))) int +foo () { return 3; } + +int bar () +{ + int (*test)() = foo; + + test(); +} + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\], foo\._Mdotprod\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\], foo\.default\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, foo\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols13.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols13.c new file mode 100644 index 000000000000..308dace64a78 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols13.c @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("default"))) int +foo (); + +int bar () +{ + int (*test)() = foo; + + test(); +} + +__attribute__ ((target_version ("dotprod"))) int +foo () { return 3; } + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\], foo\._Mdotprod\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\], foo\.default\n" 0 } } */ + +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, foo\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 0 } } */ + diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols14.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols14.c new file mode 100644 index 000000000000..d1af69fe31d9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols14.c @@ -0,0 +1,34 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +int foo (); + +__attribute__ ((target_version ("default"))) int +foo () +{ + return 1; +} + +__attribute__ ((target_version ("dotprod"))) int +foo () +{ + return 3; +} + +int +bar () +{ + return foo (); +} + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\._Mdotprod\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\.default\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols2.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols2.c new file mode 100644 index 000000000000..a8732caf2140 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols2.c @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +// FMV correctness with definitions but no call + +__attribute__ ((target_version ("default"))) int +foo () +{ + return 1; +} + +__attribute__ ((target_version ("dotprod"))) int +foo () +{ + return 3; +} +__attribute__ ((target_version ("sve+sve2"))) int +foo () +{ + return 5; +} + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols3.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols3.c new file mode 100644 index 000000000000..962bae935773 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols3.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +// FMV correctness with declarations but no implementation + +__attribute__ ((target_version ("default"))) int +foo (); + +__attribute__ ((target_version ("dotprod"))) int +foo (); + +__attribute__ ((target_version ("sve+sve2"))) int +foo (); + +int +bar () +{ + return foo (); +} + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 0 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols4.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols4.c new file mode 100644 index 000000000000..a476800b2c53 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols4.c @@ -0,0 +1,31 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +// FMV correctness with a default implementation and declarations of other +// versions + +__attribute__ ((target_version ("default"))) int +foo () +{ + return 1; +} + +__attribute__ ((target_version ("dotprod"))) int +foo (); + +__attribute__ ((target_version ("sve+sve2"))) int +foo (); + +int +bar () +{ + return foo (); +} + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols5.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols5.c new file mode 100644 index 000000000000..4df20009f795 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols5.c @@ -0,0 +1,36 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +// FMV correctness with default declaration, and implementations of other +// versions. + +__attribute__ ((target_version ("default"))) int +foo (); + +__attribute__ ((target_version ("dotprod"))) int +foo () +{ + return 3; +} +__attribute__ ((target_version ("sve+sve2"))) int +foo () +{ + return 5; +} + +int +bar () +{ + return foo (); +} + +/* When updating any of the symbol names in these tests, make sure to also + update any tests for their absence in mvc-symbolsN.C */ + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 0 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols6.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols6.c new file mode 100644 index 000000000000..cbf8bcaf8e16 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols6.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("default"))) int +foo () +{ + return 1; +} + +int bar() +{ + return foo(); +} + +/* { dg-final { scan-assembler-times "\nfoo:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 0 } } */ +/* { dg-final { scan-assembler-times "bl\tfoo.default\n" 1 } } */ +/* { dg-final { scan-assembler-times ".global\tfoo\n" 1 } } */ +/* { dg-final { scan-assembler-times ".set\tfoo,foo.default\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols7.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols7.c new file mode 100644 index 000000000000..2ea4d2ebf0fb --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols7.c @@ -0,0 +1,47 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("dotprod"))) int +foo (); + +__attribute__ ((target_version ("sve+sve2"))) int +foo (); + +__attribute__ ((target_version ("default"))) int +foo (); + +int +bar () +{ + return foo (); +} + +__attribute__ ((target_version ("sve+sve2"))) int +foo () +{ + return 5; +} +__attribute__ ((target_version ("dotprod"))) int +foo () +{ + return 3; +} +__attribute__ ((target_version ("default"))) int +foo () +{ + return 1; +} + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\._MsveMsve2\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\._Mdotprod\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\.default\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols8.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols8.c new file mode 100644 index 000000000000..3e3eaf21aa9e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols8.c @@ -0,0 +1,47 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("dotprod"))) int +foo (); + +__attribute__ ((target_version ("sve+sve2"))) int +foo (); + +__attribute__ ((target_version ("default"))) int +foo (); + +__attribute__ ((target_version ("sve+sve2"))) int +foo () +{ + return 5; +} +__attribute__ ((target_version ("dotprod"))) int +foo () +{ + return 3; +} +__attribute__ ((target_version ("default"))) int +foo () +{ + return 1; +} + +int +bar () +{ + return foo (); +} + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\._MsveMsve2\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\._Mdotprod\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\.default\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols9.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols9.c new file mode 100644 index 000000000000..8e0864f1663f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols9.c @@ -0,0 +1,44 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("dotprod"))) int +foo (); +__attribute__ ((target_version ("sve+sve2"))) int +foo (); + +int +foo () +{ + return 1; +} + +__attribute__ ((target_version ("dotprod"))) int +foo () +{ + return 3; +} +__attribute__ ((target_version ("sve+sve2"))) int +foo () +{ + return 5; +} + +int +bar () +{ + return foo (); +} + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\._MsveMsve2\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\._Mdotprod\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\.default\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mvc-symbols1.c b/gcc/testsuite/gcc.target/aarch64/mvc-symbols1.c new file mode 100644 index 000000000000..3ad15e5bb73d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mvc-symbols1.c @@ -0,0 +1,25 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_clones ("default", "dotprod", "sve+sve2"))) int +foo () +{ + return 1; +} + +int +bar () +{ + return foo (); +} + +/* When updating any of the symbol names in these tests, make sure to also + update any tests for their absence in mvc-symbolsN.C */ + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mvc-symbols2.c b/gcc/testsuite/gcc.target/aarch64/mvc-symbols2.c new file mode 100644 index 000000000000..78385ed904bb --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mvc-symbols2.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_clones ("default", "dotprod", "sve+sve2"))) int +foo () +{ + return 1; +} + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mvc-symbols3.c b/gcc/testsuite/gcc.target/aarch64/mvc-symbols3.c new file mode 100644 index 000000000000..1cbe3fd08509 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mvc-symbols3.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_clones ("default", "dotprod", "sve+sve2"))) int +foo (); + +int +bar () +{ + return foo (); +} + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 0 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mvc-symbols4.c b/gcc/testsuite/gcc.target/aarch64/mvc-symbols4.c new file mode 100644 index 000000000000..abaf60f91c3e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mvc-symbols4.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_clones ("default", "dotprod", "sve+sve2"))) int +foo (); + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 0 } } */ From 8cf1bc6b5d561458bbad85505f59ab85a65932c4 Mon Sep 17 00:00:00 2001 From: Alfie Richards Date: Wed, 2 Apr 2025 14:24:00 +0000 Subject: [PATCH 040/216] c: aarch64: Add FMV diagnostic tests. Adds c fmv diagnostic tests for aarch64. This mostly tests c front end code, but has to be target specific as FMV requires specifying target extensions. gcc/testsuite/ChangeLog: * gcc.target/aarch64/mv-and-mvc-error1.c: New test. * gcc.target/aarch64/mv-and-mvc-error2.c: New test. * gcc.target/aarch64/mv-and-mvc-error3.c: New test. * gcc.target/aarch64/mv-error1.c: New test. * gcc.target/aarch64/mv-error2.c: New test. * gcc.target/aarch64/mv-error3.c: New test. * gcc.target/aarch64/mv-error4.c: New test. * gcc.target/aarch64/mv-error5.c: New test. * gcc.target/aarch64/mv-error6.c: New test. * gcc.target/aarch64/mv-error7.c: New test. * gcc.target/aarch64/mv-error8.c: New test. * gcc.target/aarch64/mv-error9.c: New test. * gcc.target/aarch64/mv-error10.c: New test. * gcc.target/aarch64/mvc-error1.c: New test. * gcc.target/aarch64/mvc-error2.c: New test. * gcc.target/aarch64/mvc-warning1.c: New test. --- .../gcc.target/aarch64/mv-and-mvc-error1.c | 9 +++++++++ .../gcc.target/aarch64/mv-and-mvc-error2.c | 9 +++++++++ .../gcc.target/aarch64/mv-and-mvc-error3.c | 8 ++++++++ gcc/testsuite/gcc.target/aarch64/mv-error1.c | 18 +++++++++++++++++ gcc/testsuite/gcc.target/aarch64/mv-error10.c | 13 ++++++++++++ gcc/testsuite/gcc.target/aarch64/mv-error2.c | 9 +++++++++ gcc/testsuite/gcc.target/aarch64/mv-error3.c | 12 +++++++++++ gcc/testsuite/gcc.target/aarch64/mv-error4.c | 9 +++++++++ gcc/testsuite/gcc.target/aarch64/mv-error5.c | 8 ++++++++ gcc/testsuite/gcc.target/aarch64/mv-error6.c | 20 +++++++++++++++++++ gcc/testsuite/gcc.target/aarch64/mv-error7.c | 11 ++++++++++ gcc/testsuite/gcc.target/aarch64/mv-error8.c | 12 +++++++++++ gcc/testsuite/gcc.target/aarch64/mv-error9.c | 12 +++++++++++ gcc/testsuite/gcc.target/aarch64/mvc-error1.c | 9 +++++++++ gcc/testsuite/gcc.target/aarch64/mvc-error2.c | 9 +++++++++ .../gcc.target/aarch64/mvc-warning1.c | 13 ++++++++++++ 16 files changed, 181 insertions(+) create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-and-mvc-error1.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-and-mvc-error2.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-and-mvc-error3.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-error1.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-error10.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-error2.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-error3.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-error4.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-error5.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-error6.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-error7.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-error8.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-error9.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mvc-error1.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mvc-error2.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mvc-warning1.c diff --git a/gcc/testsuite/gcc.target/aarch64/mv-and-mvc-error1.c b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc-error1.c new file mode 100644 index 000000000000..b08de29dd3ca --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc-error1.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("dotprod"))) int +foo () { return 3; } /* { dg-message "previous definition of .foo \\\[\\\[target_version\\(.dotprod.\\)\\\]\\\]. with type .int\\(void\\)." } */ + +__attribute__ ((target_clones ("dotprod", "sve"))) int +foo () { return 1; } /* { dg-error "redefinition of .foo \\\[\\\[target_clones\\(.dotprod., .sve.\\)\\\]\\\]." } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-and-mvc-error2.c b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc-error2.c new file mode 100644 index 000000000000..d34b246efc55 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc-error2.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("default"))) int +foo () { return 1; } /* { dg-message "previous definition of .foo \\\[\\\[target_version\\(.default.\\)\\\]\\\]. with type .int\\(void\\)." } */ + +__attribute__ ((target_clones ("dotprod", "sve"))) float +foo () { return 3; } /* { dg-error "conflicting types for .foo \\\[\\\[target_clones\\(.dotprod., .sve.\\)\\\]\\\].; have .float\\(void\\)." } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-and-mvc-error3.c b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc-error3.c new file mode 100644 index 000000000000..a6a45bdf7aa9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc-error3.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +float foo () { return 1; } /* { dg-message "previous definition of .foo." } */ + +__attribute__ ((target_clones ("default", "dotprod", "sve"))) float +foo () { return 3; } /* { dg-error "redefinition of .foo \\\[\\\[target_clones\\(.default., .dotprod., .sve.\\)\\\]\\\]." } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-error1.c b/gcc/testsuite/gcc.target/aarch64/mv-error1.c new file mode 100644 index 000000000000..61c9af276e6e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-error1.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("default"))) int +foo (); + +__attribute__ ((target_version ("default"))) int +foo () { return 1; } /* { dg-message "previous definition of .foo \\\[\\\[target_version\\(.default.\\)\\\]\\\]. with type .int\\(void\\)." } */ + +__attribute__ ((target_version ("dotprod"))) float +foo () { return 3; } /* { dg-error "conflicting types for .foo \\\[\\\[target_version\\(.dotprod.\\)\\\]\\\].; have .float\\(void\\)." } */ + +__attribute__ ((target_version ("sve"))) int +foo2 () { return 1; } /* { dg-message "previous definition of .foo2 \\\[\\\[target_version\\(.sve.\\)\\\]\\\]. with type .int\\(void\\)." } */ + +__attribute__ ((target_version ("dotprod"))) float +foo2 () { return 3; } /* { dg-error "conflicting types for .foo2 \\\[\\\[target_version\\(.dotprod.\\)\\\]\\\].; have .float\\(void\\)." } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-error10.c b/gcc/testsuite/gcc.target/aarch64/mv-error10.c new file mode 100644 index 000000000000..218f103a8f43 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-error10.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +void +bar () +{ + __attribute__ ((target_version ("dotprod"))) int + foo1 (); /* { dg-message "versioned declarations are only allowed at file scope" } */ + + __attribute__ ((target_version ("simd"))) int + foo2 () { return 1; } /* { dg-message "versioned definitions are only allowed at file scope" } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/mv-error2.c b/gcc/testsuite/gcc.target/aarch64/mv-error2.c new file mode 100644 index 000000000000..19d961d0a5a6 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-error2.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("dotprod"))) float +foo () { return 3; } /* { dg-message "previous definition of .foo \\\[\\\[target_version\\(.dotprod.\\)\\\]\\\]. with type .float\\(void\\)." } */ + +__attribute__ ((target_version ("dotprod"))) float +foo () { return 3; } /* { dg-error "redefinition of .foo \\\[\\\[target_version\\(.dotprod.\\)\\\]\\\]." } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-error3.c b/gcc/testsuite/gcc.target/aarch64/mv-error3.c new file mode 100644 index 000000000000..451ce028c655 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-error3.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("dotprod"))) float +foo () { return 3; } + +__attribute__ ((target_version ("default"))) float +foo () { return 3; } /* { dg-message "previous definition of .foo \\\[\\\[target_version\\(.default.\\)\\\]\\\]. with type .float\\(void\\)." } */ + +__attribute__ ((target_version ("default"))) float +foo () { return 3; } /* { dg-error "redefinition of .foo \\\[\\\[target_version\\(.default.\\)\\\]\\\]." } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-error4.c b/gcc/testsuite/gcc.target/aarch64/mv-error4.c new file mode 100644 index 000000000000..44d3195590d2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-error4.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("test"))) float +foo () { return 3; } /* { dg-error "invalid feature modifier .test. of value .test. in .target_version. attribute" } */ + +__attribute__ ((target_version ("sve+test"))) float +foo2 () { return 3; } /* { dg-error "invalid feature modifier .test. of value .sve.test. in .target_version. attribute" } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-error5.c b/gcc/testsuite/gcc.target/aarch64/mv-error5.c new file mode 100644 index 000000000000..776b80a45b65 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-error5.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("sve+sve2"))) int +foo(); /* { dg-message "previous declaration of .foo \\\[\\\[target_version\\(.sve\\\+sve2.\\)\\\]\\\]. with type .int\\(void\\)." } */ + +int bar () { return foo (); } /* { dg-error "implicit declaration of function .foo." } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-error6.c b/gcc/testsuite/gcc.target/aarch64/mv-error6.c new file mode 100644 index 000000000000..afc71a44e735 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-error6.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("sve+sve2"))) int +foo () { + return 1; +} + +__attribute__ ((target_version ("sve"))) int +foo () { /* { dg-message "previous definition of .foo \\\[\\\[target_version\\(.sve.\\)\\\]\\\]. with type .int\\(void\\)." } */ + return 1; +} + +int bar () { return foo (); } /* { dg-error "implicit declaration of function .foo." } */ + +__attribute__ ((target_version ("sve+sve2"))) int +foo2(); /* { dg-message "previous declaration of .foo2 \\\[\\\[target_version\\(.sve\\\+sve2.\\)\\\]\\\]. with type .int\\(void\\)." } */ + +int bar2 () { return foo2 (); } /* { dg-error "implicit declaration of function .foo2." } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-error7.c b/gcc/testsuite/gcc.target/aarch64/mv-error7.c new file mode 100644 index 000000000000..68db9783ce62 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-error7.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("dotprod"))) int +foo (); /* { dg-message "previous declaration of .foo \\\[\\\[target_version\\(.dotprod.\\)\\\]\\\]. with type .int\\(void\\)." } */ + +__attribute__ ((target_version ("sve+sve2"))) int +foo (); + +int bar () { return foo (); } /* { dg-error "implicit declaration of function .foo." } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-error8.c b/gcc/testsuite/gcc.target/aarch64/mv-error8.c new file mode 100644 index 000000000000..7599df189e41 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-error8.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("default"))) int +foo (int a, int (*b)[4]) { return 1; } + +int bar(void) { + __attribute__ ((target_version ("dotprod"))) int + foo (int a, int (*b)[5]) { return 3; } /* { dg-error "versioned definitions are only allowed at file scope" } */ + + return 1; +} diff --git a/gcc/testsuite/gcc.target/aarch64/mv-error9.c b/gcc/testsuite/gcc.target/aarch64/mv-error9.c new file mode 100644 index 000000000000..dc982e9d4151 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-error9.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("dotprod"))) int +foo (); /* { dg-message "previous declaration of .foo \\\[\\\[target_version\\(.dotprod.\\)\\\]\\\]. with type .int\\(void\\)." } */ + +int +bar () +{ + return foo (); /* { dg-error "implicit declaration of function .foo." } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/mvc-error1.c b/gcc/testsuite/gcc.target/aarch64/mvc-error1.c new file mode 100644 index 000000000000..482d0a71e672 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mvc-error1.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_clones ("default, dotprod"))) float +foo (); /* { dg-message "previous declaration of .foo \\\[\\\[target_clones\\(.default., .dotprod.\\)\\\]\\\]." } */ + +__attribute__ ((target_clones ("dotprod", "sve"))) float +foo () { return 3; } /* { dg-error ".foo \\\[\\\[target_clones\\(.dotprod., .sve.\\)\\\]\\\]. conflicts with overlapping .target_clone. declaration" } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mvc-error2.c b/gcc/testsuite/gcc.target/aarch64/mvc-error2.c new file mode 100644 index 000000000000..482d0a71e672 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mvc-error2.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_clones ("default, dotprod"))) float +foo (); /* { dg-message "previous declaration of .foo \\\[\\\[target_clones\\(.default., .dotprod.\\)\\\]\\\]." } */ + +__attribute__ ((target_clones ("dotprod", "sve"))) float +foo () { return 3; } /* { dg-error ".foo \\\[\\\[target_clones\\(.dotprod., .sve.\\)\\\]\\\]. conflicts with overlapping .target_clone. declaration" } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mvc-warning1.c b/gcc/testsuite/gcc.target/aarch64/mvc-warning1.c new file mode 100644 index 000000000000..1bae38cceeb3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mvc-warning1.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__((target_clones("default", "dotprod", "sve+sve2"))) +int foo () { + return 1; +} + +__attribute__((target_clones("invalid1"))) +int foo () { /* { dg-warning "invalid feature modifier .invalid1. in version .invalid1. for .target_clones. attribute" } */ + return 2; +} From 264a575765e0985fdc8a00b16c1d5bb4a46ed4db Mon Sep 17 00:00:00 2001 From: Alfie Richards Date: Tue, 30 Sep 2025 12:25:25 +0000 Subject: [PATCH 041/216] c: fmv: Prevent FMV being combined with other cloning/renaming extensions. This patch adds exclusions and diagnostics to prevent function multi-versioning being used with omp simd pragmas and renaming extensions. This behaviour is forbidden by the ACLE as the expected behaviour is not clear. gcc/c-family/ChangeLog: * c-attribs.cc (attr_target_clones_exclusions): Add simd and omp exclusions. (attr_target_version_exclusions): New definition with simd and omp exclusions. (attr_omp_declare_simd_exclusions): New definition with target_version and clones exclusions. (attr_simd_exclusions): Ditto. (c_common_gnu_attributes): Add new target_version, simd, and omp declare simd variables. gcc/c/ChangeLog: * c-decl.cc (maybe_mark_function_versioned): Add diagnostic. * c-parser.cc (c_finish_omp_declare_simd): Add diagnostic. gcc/testsuite/ChangeLog: * gcc.target/aarch64/mv-error11.c: New test. * gcc.target/aarch64/mv-error12.c: New test. --- gcc/c-family/c-attribs.cc | 30 +++++++++++++++++-- gcc/c/c-decl.cc | 6 ++++ gcc/c/c-parser.cc | 7 +++++ gcc/testsuite/gcc.target/aarch64/mv-error11.c | 9 ++++++ gcc/testsuite/gcc.target/aarch64/mv-error12.c | 13 ++++++++ 5 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-error11.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-error12.c diff --git a/gcc/c-family/c-attribs.cc b/gcc/c-family/c-attribs.cc index df9ff9947a89..5bc5183f421d 100644 --- a/gcc/c-family/c-attribs.cc +++ b/gcc/c-family/c-attribs.cc @@ -249,6 +249,29 @@ static const struct attribute_spec::exclusions attr_target_clones_exclusions[] = ATTR_EXCL ("always_inline", true, true, true), ATTR_EXCL ("target", TARGET_HAS_FMV_TARGET_ATTRIBUTE, TARGET_HAS_FMV_TARGET_ATTRIBUTE, TARGET_HAS_FMV_TARGET_ATTRIBUTE), + ATTR_EXCL ("omp declare simd", true, true, true), + ATTR_EXCL ("simd", true, true, true), + ATTR_EXCL (NULL, false, false, false), +}; + +static const struct attribute_spec::exclusions attr_target_version_exclusions[] = +{ + ATTR_EXCL ("omp declare simd", true, true, true), + ATTR_EXCL ("simd", true, true, true), + ATTR_EXCL (NULL, false, false, false), +}; + +static const struct attribute_spec::exclusions attr_omp_declare_simd_exclusions[] = +{ + ATTR_EXCL ("target_version", true, true, true), + ATTR_EXCL ("target_clones", true, true, true), + ATTR_EXCL (NULL, false, false, false), +}; + +static const struct attribute_spec::exclusions attr_simd_exclusions[] = +{ + ATTR_EXCL ("target_version", true, true, true), + ATTR_EXCL ("target_clones", true, true, true), ATTR_EXCL (NULL, false, false, false), }; @@ -536,7 +559,7 @@ const struct attribute_spec c_common_gnu_attributes[] = attr_target_exclusions }, { "target_version", 1, 1, true, false, false, false, handle_target_version_attribute, - NULL }, + attr_target_version_exclusions}, { "target_clones", 1, -1, true, false, false, false, handle_target_clones_attribute, attr_target_clones_exclusions }, @@ -563,7 +586,8 @@ const struct attribute_spec c_common_gnu_attributes[] = { "returns_nonnull", 0, 0, false, true, true, false, handle_returns_nonnull_attribute, NULL }, { "omp declare simd", 0, -1, true, false, false, false, - handle_omp_declare_simd_attribute, NULL }, + handle_omp_declare_simd_attribute, + attr_omp_declare_simd_exclusions }, { "omp declare variant base", 0, -1, true, false, false, false, handle_omp_declare_variant_attribute, NULL }, { "omp declare variant variant", 0, -1, true, false, false, false, @@ -572,7 +596,7 @@ const struct attribute_spec c_common_gnu_attributes[] = false, false, handle_omp_declare_variant_attribute, NULL }, { "simd", 0, 1, true, false, false, false, - handle_simd_attribute, NULL }, + handle_simd_attribute, attr_simd_exclusions }, { "omp declare target", 0, -1, true, false, false, false, handle_omp_declare_target_attribute, NULL }, { "omp declare target link", 0, 0, true, false, false, false, diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc index 825487529d06..632bbf057a33 100644 --- a/gcc/c/c-decl.cc +++ b/gcc/c/c-decl.cc @@ -2094,6 +2094,12 @@ maybe_mark_function_versioned (tree decl) { if (!DECL_FUNCTION_VERSIONED (decl)) { + /* Check if the name of the function has been overridden. */ + if (DECL_ASSEMBLER_NAME_SET_P (decl) + && IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))[0] == '*') + error_at (DECL_SOURCE_LOCATION (decl), + "cannot use function multiversioning on a renamed function"); + /* We need to insert function version now to make sure the correct pre-mangled assembler name is recorded. */ cgraph_node *node = cgraph_node::get_create (decl); diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc index df44a915ed4f..7c2452644bde 100644 --- a/gcc/c/c-parser.cc +++ b/gcc/c/c-parser.cc @@ -27776,6 +27776,13 @@ c_finish_omp_declare_simd (c_parser *parser, tree fndecl, tree parms, clauses[0].type = CPP_EOF; return; } + if (DECL_FUNCTION_VERSIONED (fndecl)) + { + error_at (DECL_SOURCE_LOCATION (fndecl), + "%<#pragma omp declare %s%> cannot be used with function " + "multi-versioning", kind); + return; + } if (parms == NULL_TREE) parms = DECL_ARGUMENTS (fndecl); diff --git a/gcc/testsuite/gcc.target/aarch64/mv-error11.c b/gcc/testsuite/gcc.target/aarch64/mv-error11.c new file mode 100644 index 000000000000..0fdd66012d30 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-error11.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +int fn () asm("name"); +int fn () { return 1; } /* { dg-error "cannot use function multiversioning on a renamed function" } */ +int fn [[gnu::target_version("sve")]] () { return 1; } + +int fn2 [[gnu::target_version("sve")]] () asm("name"); /* { dg-warning ".asm. declaration ignored due to conflict with previous rename" } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-error12.c b/gcc/testsuite/gcc.target/aarch64/mv-error12.c new file mode 100644 index 000000000000..45da85a67b96 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-error12.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-fopenmp" } */ +/* { dg-require-ifunc "" } */ + +#pragma omp declare simd +int fn [[gnu::target_version("sve")]] () { return 1; } /* { dg-error ".#pragma omp declare simd. cannot be used with function multi-versioning" } */ + +#pragma omp declare simd +int fn2 () { return 1; } + +int fn2 [[gnu::target_version("sve")]] (); /* { dg-warning "ignoring attribute .target_version. because it conflicts with attribute .omp declare simd." } */ + +int fn3 [[gnu::target_version("sve")]] [[gnu::simd]] () { return 1; } /* { dg-warning "ignoring attribute .simd. because it conflicts with attribute .target_version." } */ From c34ccc8ba23aa7cbf5e2d88186abf0c384a675a3 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Thu, 2 Oct 2025 06:25:47 -0600 Subject: [PATCH 042/216] [RISC-V][PR target/122051] Fix pmode_reg_or_uimm5_operand for thead vector For this bug we're failing during vsetvl insertion, but the real problem happens earlier. Basically the slide instructions are using pmode_reg_or_uimm5_operand which has an implementation that was appropriate when we integrated RVV, but which is bogus once thead vector was added. It was just a thin wrapper around vector_length_operand. vector_length_operand rejects most constants when thead vector is enabled. LRA saw the rK constraint, so it figured the (const_int 1) was a sensible substitution for the relevant operand. It was only during vsetvl insertion that we made another change to the insn and tried to recognize it and boom things blew up. This patch makes pmode_reg_or_uimm5_operand independent of vector_length_operand and everything is happy again. Tested on riscv32-elf (verifying the selector properly skips the test) and riscv64-elf where the ICE could be seen. Bootstrap on the Pioneer and BPI just started a short while ago, so no data for another 7/24 hours respectively, but not expecting issues. PR target/122051 gcc/ * config/riscv/predicates.md (pmode_reg_or_uimm5_operand): Implement directly rather than using vector_length_operand. gcc/testsuite/ * gcc.target/riscv/pr122051.c: New test. --- gcc/config/riscv/predicates.md | 11 +++++------ gcc/testsuite/gcc.target/riscv/pr122051.c | 24 +++++++++++++++++++++++ 2 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/pr122051.c diff --git a/gcc/config/riscv/predicates.md b/gcc/config/riscv/predicates.md index 777e71b14e38..056f9e219092 100644 --- a/gcc/config/riscv/predicates.md +++ b/gcc/config/riscv/predicates.md @@ -607,13 +607,12 @@ (define_predicate "ge_operator" (match_code "ge,geu")) -;; pmode_reg_or_uimm5_operand can be used by vsll.vx/vsrl.vx/vsra.vx instructions. -;; Since it has the same predicate with vector_length_operand which allows register -;; or immediate (0 ~ 31), we define this predicate same as vector_length_operand here. -;; We don't use vector_length_operand directly to predicate vsll.vx/vsrl.vx/vsra.vx -;; since it may be confusing. +;; pmode_reg_or_uimm5_operand can be used by vsll.vx/vsrl.vx/vsra.vx instructions +;; It is *not* equivalent to vector_length_operand due to the vector_length_operand +;; needing to conditionalize some behavior on XTHEADVECTOR. (define_special_predicate "pmode_reg_or_uimm5_operand" - (match_operand 0 "vector_length_operand")) + (ior (match_operand 0 "pmode_register_operand") + (match_operand 0 "const_csr_operand"))) (define_special_predicate "pmode_reg_or_0_operand" (ior (match_operand 0 "const_0_operand") diff --git a/gcc/testsuite/gcc.target/riscv/pr122051.c b/gcc/testsuite/gcc.target/riscv/pr122051.c new file mode 100644 index 000000000000..c2f4b877d5ea --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr122051.c @@ -0,0 +1,24 @@ +/* { dg-do compile { target int128 } } */ +/* { dg-additional-options "-mrvv-vector-bits=zvl -mcpu=xt-c920 -w" } */ + +typedef __attribute__((__vector_size__(4))) char B; +typedef __attribute__((__vector_size__(16))) long V; +typedef __attribute__((__vector_size__(32))) double W; +typedef __attribute__((__vector_size__(32))) char U; +unsigned u; +B o; +char *p; +int q; +V v; +W w; + +void +foo(__int128, __int128, __int128, __int128, B a, B b, B c, B d, B e, B f, B g, B h) { + do { + w -= q; + v ^= u; + } while (__builtin_memcmp(p, 1 + p, 7)); + o = ((U)w)[0] + c + d + e + f + g + h + a + b; +} + + From 14010053dac93f64e34b4b71804bec7ec984b595 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Thu, 2 Oct 2025 15:25:08 +0200 Subject: [PATCH 043/216] Fix handling of uninitialized counts in merge_blocks gcc/ChangeLog: * cfghooks.cc (merge_blocks): Fix typo in the previous change. Co-authored-by: H.J. Lu --- gcc/cfghooks.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/cfghooks.cc b/gcc/cfghooks.cc index 8b3346898aa2..25bc5d4b2732 100644 --- a/gcc/cfghooks.cc +++ b/gcc/cfghooks.cc @@ -819,7 +819,7 @@ merge_blocks (basic_block a, basic_block b) /* Pick the more reliable count. If both qualities agrees, pick the larger one since turning mistakely hot code to cold is more harmful. */ - if (a->count.initialized_p ()) + if (!a->count.initialized_p ()) a->count = b->count; else if (a->count.quality () < b->count.quality ()) a->count = b->count; From 328dc7f2dd1ab1e60633647f9a1fb2ec717a9afc Mon Sep 17 00:00:00 2001 From: Gaius Mulley Date: Thu, 2 Oct 2025 14:36:42 +0100 Subject: [PATCH 044/216] PR modula2/122009: Rename local variables to avoid warnings and add const char This patch renames local variables in M2WIDESET.mod to avoid compile time warnings. It also fixes the parameter declaration in BuildEnumerator to include the const modifier. gcc/m2/ChangeLog: PR modula2/122009 * gm2-compiler/M2GCCDeclare.mod (PrintKnown): Remove. * gm2-gcc/m2type.cc (m2type_BuildEnumerator): Add const modifier. * gm2-gcc/m2type.def (BuildEnumerator): Use ConstCharStar type. * gm2-gcc/m2type.h (m2type_BuildEnumerator): Add const modifier. * gm2-libs/M2WIDESET.mod (ShiftLeftByteBit): Rename variable to as toIdx. Rename variable from as fromIdx. (ShiftRightByteBit): Rename variable to as toIdx. Rename variable from as fromIdx. (RotateLeft): Rename variable to as toIdx. Rename variable from as fromIdx. (ArithShiftLeftBit): Rename set to setb. (ArithShiftRightBit): Rename set to setb. Signed-off-by: Gaius Mulley --- gcc/m2/gm2-compiler/M2GCCDeclare.mod | 13 --- gcc/m2/gm2-gcc/m2type.cc | 2 +- gcc/m2/gm2-gcc/m2type.def | 2 +- gcc/m2/gm2-gcc/m2type.h | 2 +- gcc/m2/gm2-libs/M2WIDESET.mod | 116 +++++++++++++-------------- 5 files changed, 61 insertions(+), 74 deletions(-) diff --git a/gcc/m2/gm2-compiler/M2GCCDeclare.mod b/gcc/m2/gm2-compiler/M2GCCDeclare.mod index 710976e449eb..24634fda3584 100644 --- a/gcc/m2/gm2-compiler/M2GCCDeclare.mod +++ b/gcc/m2/gm2-compiler/M2GCCDeclare.mod @@ -4446,19 +4446,6 @@ BEGIN END PrintString ; -(* - PrintKnown - -*) - -PROCEDURE PrintKnown (sym: CARDINAL) ; -BEGIN - IF GccKnowsAbout (sym) - THEN - printf0 ("[gcc]") - END -END PrintKnown ; - - (* PrintVerboseFromList - prints the, i, th element in the list, l. *) diff --git a/gcc/m2/gm2-gcc/m2type.cc b/gcc/m2/gm2-gcc/m2type.cc index 535ab143053f..184b506aa693 100644 --- a/gcc/m2/gm2-gcc/m2type.cc +++ b/gcc/m2/gm2-gcc/m2type.cc @@ -2213,7 +2213,7 @@ gm2_build_enumerator (location_t location, tree name, tree value) enumvalues, list. It returns a copy of the value. */ tree -m2type_BuildEnumerator (location_t location, char *name, tree value, +m2type_BuildEnumerator (location_t location, const char *name, tree value, tree *enumvalues) { tree id = get_identifier (name); diff --git a/gcc/m2/gm2-gcc/m2type.def b/gcc/m2/gm2-gcc/m2type.def index 8a72652f22c8..6f64c98c1b78 100644 --- a/gcc/m2/gm2-gcc/m2type.def +++ b/gcc/m2/gm2-gcc/m2type.def @@ -173,7 +173,7 @@ PROCEDURE BuildPointerType (totype: tree) : tree ; It returns a copy of the value. --fixme-- why do this? *) -PROCEDURE BuildEnumerator (location: location_t; name: CharStar; value: tree; +PROCEDURE BuildEnumerator (location: location_t; name: ConstCharStar; value: tree; VAR enumvalues: tree) : tree ; diff --git a/gcc/m2/gm2-gcc/m2type.h b/gcc/m2/gm2-gcc/m2type.h index afd97f763143..68015a01e145 100644 --- a/gcc/m2/gm2-gcc/m2type.h +++ b/gcc/m2/gm2-gcc/m2type.h @@ -183,7 +183,7 @@ EXTERN tree m2type_BuildStartEnumeration (location_t location, char *name, bool ispacked); EXTERN tree m2type_BuildEndEnumeration (location_t location, tree enumtype, tree enumvalues); -EXTERN tree m2type_BuildEnumerator (location_t location, char *name, +EXTERN tree m2type_BuildEnumerator (location_t location, const char *name, tree value, tree *enumvalues); EXTERN tree m2type_BuildPointerType (tree totype); EXTERN tree m2type_BuildConstPointerType (tree totype); diff --git a/gcc/m2/gm2-libs/M2WIDESET.mod b/gcc/m2/gm2-libs/M2WIDESET.mod index f1b1bed3b3f3..93df428cb2ff 100644 --- a/gcc/m2/gm2-libs/M2WIDESET.mod +++ b/gcc/m2/gm2-libs/M2WIDESET.mod @@ -490,21 +490,21 @@ PROCEDURE ShiftLeftByteBit (VAR dest: ARRAY OF BYTE; src: ARRAY OF BYTE; highbit: CARDINAL; byteshift, bitshift: CARDINAL) ; VAR - top, bot, mid : BYTESET ; - i, h, from, to: CARDINAL ; + top, bot, mid : BYTESET ; + i, h, fromIdx, toIdx: CARDINAL ; BEGIN (* Copy the bytes into dest at the mostly correct position (modulo byte position). *) - to := 0 ; - from := 0 ; - WHILE to < byteshift DO - dest[to] := BYTE (0) ; - INC (to) + toIdx := 0 ; + fromIdx := 0 ; + WHILE toIdx < byteshift DO + dest[toIdx] := BYTE (0) ; + INC (toIdx) END ; - WHILE to <= HIGH (dest) DO - dest[to] := src[from] ; - INC (to) ; - INC (from) + WHILE toIdx <= HIGH (dest) DO + dest[toIdx] := src[fromIdx] ; + INC (toIdx) ; + INC (fromIdx) END ; (* And adjust by bit shifting. *) IF bitshift > 0 @@ -567,12 +567,12 @@ PROCEDURE ShiftRightByteBit (VAR dest: ARRAY OF BYTE; src: ARRAY OF BYTE; highbit: CARDINAL; byteshift, bitshift: CARDINAL) ; VAR - top, bot, mid : BYTESET ; - i, h, to, from: CARDINAL ; + top, bot, mid : BYTESET ; + i, h, toIdx, fromIdx: CARDINAL ; BEGIN (* Copy the bytes. *) - to := 0 ; - from := byteshift ; + toIdx := 0 ; + fromIdx := byteshift ; IF EnableDebugging THEN printf ("HIGH (dest) = %d\n", HIGH (dest)) @@ -580,15 +580,15 @@ BEGIN IF byteshift <= HIGH (dest) THEN h := HIGH (dest) - byteshift ; - WHILE to <= h DO - dest[to] := src[from] ; - INC (to) ; - INC (from) + WHILE toIdx <= h DO + dest[toIdx] := src[fromIdx] ; + INC (toIdx) ; + INC (fromIdx) END END ; - WHILE to <= HIGH (dest) DO - dest[to] := BYTE (0) ; - INC (to) + WHILE toIdx <= HIGH (dest) DO + dest[toIdx] := BYTE (0) ; + INC (toIdx) END ; (* And bit shift the remainder. *) IF EnableDebugging @@ -691,7 +691,7 @@ VAR next : BOOLEAN ; mask, unused, - set : BYTESET ; + setb : BYTESET ; BEGIN IF EnableDebugging THEN @@ -704,14 +704,14 @@ BEGIN bytes. *) i := 0 ; WHILE i < high DO - set := dest[i] ; - next := MSB IN set ; - set := SHIFT (set, 1) ; (* Shift left. *) + setb := dest[i] ; + next := MSB IN setb ; + setb := SHIFT (setb, 1) ; (* Shift left. *) IF carry THEN - INCL (set, 0) (* Set bit 0. *) + INCL (setb, 0) (* Set bit 0. *) END ; - dest[i] := set ; + dest[i] := setb ; carry := next ; IF EnableDebugging THEN @@ -722,27 +722,27 @@ BEGIN END ; (* Last byte special case as there may be some unused bits which must be preserved. *) - set := dest[high] ; + setb := dest[high] ; unused := BYTESET {} ; (* Will contain all top unused bits of dest[high]. *) mask := - BYTESET {} ; topbit := (highbit+1) MOD TBITSIZE (BYTE) ; WHILE topbit # 0 DO EXCL (mask, topbit) ; - IF topbit IN set + IF topbit IN setb THEN - EXCL (set, topbit) ; + EXCL (setb, topbit) ; INCL (unused, topbit) END ; topbit := (topbit+1) MOD TBITSIZE (BYTE) END ; - set := SHIFT (set, 1) ; (* Left shift. *) + setb := SHIFT (setb, 1) ; (* Left shift. *) IF carry THEN - INCL (set, 0) (* Set bit 0. *) + INCL (setb, 0) (* Set bit 0. *) END ; - set := set * mask ; (* Remove all unused bits. *) - set := set + unused ; (* Restore original unused bits. *) - dest[high] := set ; + setb := setb * mask ; (* Remove all unused bits. *) + setb := setb + unused ; (* Restore original unused bits. *) + dest[high] := setb ; IF EnableDebugging THEN printf ("ArithShiftLeft shifted byte dest[%d]\n", high); @@ -785,32 +785,32 @@ VAR next : BOOLEAN ; mask, unused, - set : BYTESET ; + setb : BYTESET ; BEGIN high := HIGH (dest) ; (* Clear any unused bits in the highest byte, but save them into unused. *) - set := dest[high] ; + setb := dest[high] ; unused := BYTESET {} ; topbit := (highbit+1) MOD TBITSIZE (BYTE) ; mask := - BYTESET {} ; WHILE topbit # 0 DO EXCL (mask, topbit) ; - IF topbit IN set + IF topbit IN setb THEN - EXCL (set, topbit) ; + EXCL (setb, topbit) ; INCL (unused, topbit) END ; topbit := (topbit+1) MOD TBITSIZE (BYTE) END ; (* Start at the top and work down to byte 0. *) - set := set * mask ; (* Ignore unused bits. *) - next := 0 IN set ; (* Next carry. *) - set := SHIFT (set, -1) ; (* Shift right by 1 bit. *) + setb := setb * mask ; (* Ignore unused bits. *) + next := 0 IN setb ; (* Next carry. *) + setb := SHIFT (setb, -1) ; (* Shift right by 1 bit. *) IF carry THEN - INCL (set, highbit MOD TBITSIZE (BYTE)) + INCL (setb, highbit MOD TBITSIZE (BYTE)) END ; - dest[high] := set + unused ; (* First byte is a special case as we + dest[high] := setb + unused ; (* First byte is a special case as we have to preserve the unused bits. *) (* Now we ripple through the remaining bytes, propagating local carry between bytes. *) @@ -818,14 +818,14 @@ BEGIN WHILE i > 0 DO prev := next ; DEC (i) ; - set := dest[i] ; - next := 0 IN set ; - set := SHIFT (set, -1) ; + setb := dest[i] ; + next := 0 IN setb ; + setb := SHIFT (setb, -1) ; IF prev THEN - INCL (set, MSB) + INCL (setb, MSB) END ; - dest[i] := set + dest[i] := setb END END ArithShiftRightBit ; @@ -914,7 +914,7 @@ VAR high, highplus1, highbitplus1, - from, to : CARDINAL ; + fromIdx, toIdx: CARDINAL ; BEGIN IF EnableDebugging THEN @@ -925,21 +925,21 @@ BEGIN (* Copy the contents rotating on byte granularity, then arithmetically shift the remaining number of bits. *) high := HIGH (dest) ; - from := 0 ; + fromIdx := 0 ; highplus1 := high + 1 ; highbitplus1 := highbit + 1 ; - to := RotateCount DIV TBITSIZE (BYTE) ; (* Byte level granularity. *) + toIdx := RotateCount DIV TBITSIZE (BYTE) ; (* Byte level granularity. *) REPEAT - dest[to] := src[from] ; + dest[toIdx] := src[fromIdx] ; IF EnableDebugging THEN printf ("RotateLeft after partial byte movement: dest[%d] := src[%d]\n", - to, from); + toIdx, fromIdx); DumpSet (dest, highbit) END ; - from := (from + 1) MOD highplus1 ; - to := (to + 1) MOD highplus1 ; - UNTIL from = 0 ; + fromIdx := (fromIdx + 1) MOD highplus1 ; + toIdx := (toIdx + 1) MOD highplus1 ; + UNTIL fromIdx = 0 ; IF EnableDebugging THEN From e5ae5b5ba6f2af408717034d82c40839642667b0 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Thu, 2 Oct 2025 14:41:01 +0200 Subject: [PATCH 045/216] Disallow mask reduction vectorization When you trick bool pattern recognition to use a mask type for a reduction PHI you'll figure we're not ready to handle this because epilogue creation isn't expecting this yet. The following reverts part of the last change and makes this explicit. * tree-vect-loop.cc (vectorizable_reduction): Do not allow mask reductions. --- gcc/tree-vect-loop.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index 1d549e4a03e2..df45adbe035d 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -7177,6 +7177,15 @@ vectorizable_reduction (loop_vec_info loop_vinfo, tree vectype_out = SLP_TREE_VECTYPE (slp_for_stmt_info); VECT_REDUC_INFO_VECTYPE (reduc_info) = vectype_out; + /* We do not handle mask reductions correctly in the epilogue. */ + if (VECTOR_BOOLEAN_TYPE_P (vectype_out)) + { + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, + "mask reduction not supported.\n"); + return false; + } + gimple_match_op op; if (!gimple_extract_op (stmt_info->stmt, &op)) gcc_unreachable (); @@ -7187,8 +7196,7 @@ vectorizable_reduction (loop_vec_info loop_vinfo, return false; /* Do not try to vectorize bit-precision reductions. */ - if (!VECTOR_BOOLEAN_TYPE_P (vectype_out) - && !type_has_mode_precision_p (op.type) + if (!type_has_mode_precision_p (op.type) && op.code != BIT_AND_EXPR && op.code != BIT_IOR_EXPR && op.code != BIT_XOR_EXPR) From 8f076a05a8dac3f11fc2de0a005ef89bc7f79925 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Thu, 2 Oct 2025 10:44:54 -0400 Subject: [PATCH 046/216] testsuite: fix typo in comment in gcc.dg/plugin/start_unit_plugin.cc gcc/testsuite/ChangeLog: * gcc.dg/plugin/start_unit_plugin.cc: Fix typo in comment. Signed-off-by: David Malcolm --- gcc/testsuite/gcc.dg/plugin/start_unit_plugin.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/testsuite/gcc.dg/plugin/start_unit_plugin.cc b/gcc/testsuite/gcc.dg/plugin/start_unit_plugin.cc index 7b4f40e0e9df..3b3406e5864c 100644 --- a/gcc/testsuite/gcc.dg/plugin/start_unit_plugin.cc +++ b/gcc/testsuite/gcc.dg/plugin/start_unit_plugin.cc @@ -2,7 +2,7 @@ * By the time a PLUGIN_START_UNIT callback is invoked, the frontend * initialization should have completed. At least the different *_type_nodes * should have been created. This plugin creates an artificial global - * interger variable. + * integer variable. * */ #include "gcc-plugin.h" From df7525d352379b4179a5872b7779d2a55c51891b Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Thu, 2 Oct 2025 10:44:54 -0400 Subject: [PATCH 047/216] diagnostics::output_spec: support client-specific keys This patch adds the ability for users of diagnostics::output_spec to add custom key/values pairs to -fdiagnostics-{add,set}-output=SCHEME:KEY=VALUE The intent is for allow e.g. capturing compiler-specific information in SARIF sinks (CFGs, inheritance hierarchies, etc) gcc/ChangeLog: * diagnostics/output-spec.cc: (scheme_handler::parse_bool_value): Convert to... (key_handler::parse_bool_value): ...this. (scheme_handler::parse_enum_value): Convert to... (key_handler::parse_enum_value): ...this. (struct text_scheme_handler::decoded_args): Eliminate, moving fields into class text_scheme_handler. (text_scheme_handler::text_scheme_handler): Initialize the new fields. Add a "dc" param and use it to initialize m_show_color. (struct sarif_scheme_handler::decoded_args): Eliminate, moving fields into class sarif_scheme_handler. (sarif_scheme_handler::sarif_scheme_handler): Initialize the new fields. (struct html_scheme_handler::decoded_args): Eliminate, moving fields into class html_scheme_handler. (html_scheme_handler::html_scheme_handler): Initialize the new fields. (context::report_unknown_key): Get keys from scheme rather than passing them in. Support client keys. (context::parse_and_make_sink): Pass dc to output_factory ctor. (output_factory::output_factory): Pass dc to text_scheme_handler. (output_factory::get_scheme_handler): Make return non-const. (output_factory::make_sink): Move key-handling here, rather than in individual sinks. (context::handle_kv): New. (text_scheme_handler::make_sink): Eliminate key decoding. (text_scheme_handler::decode_kv): Convert to... (text_scheme_handler::maybe_handle_kv): ...this... (text_scheme_handler::get_keys): ...and this. (sarif_scheme_handler::make_sink): Eliminate key decoding. (sarif_scheme_handler::decode_kv): Convert to... (sarif_scheme_handler::maybe_handle_kv): ...this... (sarif_scheme_handler::get_keys): ...and this. (html_scheme_handler::make_sink): Eliminate key decoding. (html_scheme_handler::decode_kv): Convert to... (html_scheme_handler::maybe_handle_kv): ...this... (html_scheme_handler::get_keys): ...and this. (struct selftest::parser_test): Add "client_keys" arg, and update for new param ordering. (selftest::parser_test::parse_and_make_sink): New. (selftest::test_output_arg_parsing): Move auto-fixes to caller. (class selftest::test_key_handler): New. (selftest::test_client_arg_parsing): New test. (selftest::output_spec_cc_tests): Call it. * diagnostics/output-spec.h (class key_handler): New. (class scheme_handler): Move here from output-spec.cc. (context::report_unknown_key): Simplify params. (context::handle_kv): Update params. (context::context): Add "client_keys" param. (context::m_client_keys): New field. (struct dc_spec_context): Update order of params. Add "client_keys" param. * libgdiagnostics.cc (spec_context::spec_context): Pass nullptr for client keys. * opts-diagnostic.cc (opt_spec_context::opt_spec_context): Likewise. Update for new param ordering. Signed-off-by: David Malcolm --- gcc/diagnostics/output-spec.cc | 585 +++++++++++++++++++-------------- gcc/diagnostics/output-spec.h | 88 ++++- gcc/libgdiagnostics.cc | 3 +- gcc/opts-diagnostic.cc | 9 +- 4 files changed, 418 insertions(+), 267 deletions(-) diff --git a/gcc/diagnostics/output-spec.cc b/gcc/diagnostics/output-spec.cc index 28ea044fcc70..dfde7f0bdf30 100644 --- a/gcc/diagnostics/output-spec.cc +++ b/gcc/diagnostics/output-spec.cc @@ -73,171 +73,160 @@ struct scheme_name_and_params class output_factory { public: - output_factory (); + output_factory (diagnostics::context &dc); std::unique_ptr make_sink (const context &ctxt, diagnostics::context &dc, const scheme_name_and_params &scheme_and_kvs); - const scheme_handler *get_scheme_handler (const std::string &scheme_name); + scheme_handler *get_scheme_handler (const std::string &scheme_name); private: std::vector> m_scheme_handlers; }; -class scheme_handler +enum key_handler::result +key_handler::parse_bool_value (const context &ctxt, + const std::string &key, + const std::string &value, + bool &out) const { -public: - scheme_handler (std::string scheme_name) - : m_scheme_name (std::move (scheme_name)) - {} - virtual ~scheme_handler () {} - - const std::string &get_scheme_name () const { return m_scheme_name; } - - virtual std::unique_ptr - make_sink (const context &ctxt, - diagnostics::context &dc, - const scheme_name_and_params &scheme_and_kvs) const = 0; + if (value == "yes") + { + out = true; + return result::ok; + } + else if (value == "no") + { + out = false; + return result::ok; + } + else + { + ctxt.report_error + ("%<%s%s%>:" + " unexpected value %qs for key %qs; expected %qs or %qs", + ctxt.get_option_name (), ctxt.get_unparsed_spec (), + value.c_str (), + key.c_str (), + "yes", "no"); + return result::malformed_value; + } +} -protected: - bool - parse_bool_value (const context &ctxt, - const std::string &key, - const std::string &value, - bool &out) const - { - if (value == "yes") - { - out = true; - return true; - } - else if (value == "no") - { - out = false; - return true; - } - else +template +key_handler::result +key_handler::parse_enum_value (const context &ctxt, + const std::string &key, + const std::string &value, + const std::array, + NumValues> &value_names, + EnumType &out) const +{ + for (auto &iter : value_names) + if (value == iter.first) { - ctxt.report_error - ("%<%s%s%>:" - " unexpected value %qs for key %qs; expected %qs or %qs", - ctxt.get_option_name (), ctxt.get_unparsed_spec (), - value.c_str (), - key.c_str (), - "yes", "no"); - - return false; + out = iter.second; + return result::ok; } - } - template - bool - parse_enum_value (const context &ctxt, - const std::string &key, - const std::string &value, - const std::array, NumValues> &value_names, - EnumType &out) const - { - for (auto &iter : value_names) - if (value == iter.first) - { - out = iter.second; - return true; - } - - auto_vec known_values; - for (auto iter : value_names) - known_values.safe_push (iter.first); - pp_markup::comma_separated_quoted_strings e (known_values); - ctxt.report_error - ("%<%s%s%>:" - " unexpected value %qs for key %qs; known values: %e", - ctxt.get_option_name (), ctxt.get_unparsed_spec (), - value.c_str (), - key.c_str (), - &e); - return false; - } -private: - const std::string m_scheme_name; -}; + auto_vec known_values; + for (auto iter : value_names) + known_values.safe_push (iter.first); + pp_markup::comma_separated_quoted_strings e (known_values); + ctxt.report_error + ("%<%s%s%>:" + " unexpected value %qs for key %qs; known values: %e", + ctxt.get_option_name (), ctxt.get_unparsed_spec (), + value.c_str (), + key.c_str (), + &e); + return result::malformed_value; +} class text_scheme_handler : public scheme_handler { public: - struct decoded_args + text_scheme_handler (diagnostics::context &dc) + : scheme_handler ("text"), + m_show_color (pp_show_color (dc.get_reference_printer ())), + m_show_nesting (true), + m_show_locations_in_nesting (true), + m_show_levels (false) { - bool m_show_color; - bool m_show_nesting; - bool m_show_locations_in_nesting; - bool m_show_levels; - }; - - text_scheme_handler () : scheme_handler ("text") {} + } std::unique_ptr make_sink (const context &ctxt, - diagnostics::context &dc, - const scheme_name_and_params &scheme_and_kvs) const final override; + diagnostics::context &dc) final override; + + enum result + maybe_handle_kv (const context &ctxt, + const std::string &key, + const std::string &value) final override; + + void + get_keys (auto_vec &out) const final override; - bool - decode_kv (const context &ctxt, - const std::string &key, - const std::string &value, - decoded_args &out_opts) const; +private: + bool m_show_color; + bool m_show_nesting; + bool m_show_locations_in_nesting; + bool m_show_levels; }; class sarif_scheme_handler : public scheme_handler { public: - struct decoded_args + sarif_scheme_handler () + : scheme_handler ("sarif"), + m_serialization_kind (sarif_serialization_kind::json) { - label_text m_filename; - enum sarif_serialization_kind m_serialization_kind; - sarif_generation_options m_generation_opts; - }; - - sarif_scheme_handler () : scheme_handler ("sarif") {} + } std::unique_ptr make_sink (const context &ctxt, - diagnostics::context &dc, - const scheme_name_and_params &scheme_and_kvs) const final override; + diagnostics::context &dc) final override; - bool - decode_kv (const context &ctxt, - const std::string &key, - const std::string &value, - decoded_args &out_opts) const; + enum result + maybe_handle_kv (const context &ctxt, + const std::string &key, + const std::string &value) final override; + + void + get_keys (auto_vec &out) const final override; private: static std::unique_ptr make_sarif_serialization_object (enum sarif_serialization_kind); + + label_text m_filename; + enum sarif_serialization_kind m_serialization_kind; + sarif_generation_options m_generation_opts; }; class html_scheme_handler : public scheme_handler { public: - struct decoded_args - { - label_text m_filename; - html_generation_options m_html_gen_opts; - }; - html_scheme_handler () : scheme_handler ("experimental-html") {} std::unique_ptr make_sink (const context &ctxt, - diagnostics::context &dc, - const scheme_name_and_params &scheme_and_kvs) const final override; + diagnostics::context &dc) final override; + + enum result + maybe_handle_kv (const context &ctxt, + const std::string &key, + const std::string &value) final override; - bool - decode_kv (const context &ctxt, - const std::string &key, - const std::string &value, - decoded_args &opts_out) const; + void + get_keys (auto_vec &out) const final override; + +private: + label_text m_filename; + html_generation_options m_html_gen_opts; }; /* struct context. */ @@ -253,15 +242,38 @@ context::report_error (const char *gmsgid, ...) const void context::report_unknown_key (const std::string &key, - const std::string &scheme_name, - auto_vec &known_keys) const + const scheme_handler &scheme) const { - pp_markup::comma_separated_quoted_strings e (known_keys); + auto_vec scheme_key_vec; + scheme.get_keys (scheme_key_vec); + + pp_markup::comma_separated_quoted_strings e_scheme_keys (scheme_key_vec); + + const char *scheme_name = scheme.get_scheme_name ().c_str (); + + if (m_client_keys) + { + auto_vec client_key_vec; + m_client_keys->get_keys (client_key_vec); + if (!client_key_vec.is_empty ()) + { + pp_markup::comma_separated_quoted_strings e_client_keys + (client_key_vec); + report_error + ("%<%s%s%>:" + " unknown key %qs for output scheme %qs;" + " scheme keys: %e; client keys: %e", + get_option_name (), get_unparsed_spec (), + key.c_str (), scheme_name, + &e_scheme_keys, &e_client_keys); + } + } + report_error ("%<%s%s%>:" - " unknown key %qs for format %qs; known keys: %e", + " unknown key %qs for output scheme %qs; scheme keys: %e", get_option_name (), get_unparsed_spec (), - key.c_str (), scheme_name.c_str (), &e); + key.c_str (), scheme_name, &e_scheme_keys); } void @@ -348,7 +360,7 @@ context::parse_and_make_sink (diagnostics::context &dc) if (!parsed_arg) return nullptr; - output_factory factory; + output_factory factory (dc); return factory.make_sink (*this, dc, *parsed_arg); } @@ -356,14 +368,14 @@ context::parse_and_make_sink (diagnostics::context &dc) /* class output_factory. */ -output_factory::output_factory () +output_factory::output_factory (diagnostics::context &dc) { - m_scheme_handlers.push_back (std::make_unique ()); + m_scheme_handlers.push_back (std::make_unique (dc)); m_scheme_handlers.push_back (std::make_unique ()); m_scheme_handlers.push_back (std::make_unique ()); } -const scheme_handler * +scheme_handler * output_factory::get_scheme_handler (const std::string &scheme_name) { for (auto &iter : m_scheme_handlers) @@ -391,61 +403,91 @@ output_factory::make_sink (const context &ctxt, return nullptr; } - return scheme_handler->make_sink (ctxt, dc, scheme_and_kvs); -} - -/* class text_scheme_handler : public scheme_handler. */ - -std::unique_ptr -text_scheme_handler::make_sink (const context &ctxt, - diagnostics::context &dc, - const scheme_name_and_params &scheme_and_kvs) const -{ - decoded_args opts; - opts.m_show_color = pp_show_color (dc.get_reference_printer ()); - opts.m_show_nesting = true; - opts.m_show_locations_in_nesting = true; - opts.m_show_levels = false; + /* Parse key/value pairs. */ for (auto& iter : scheme_and_kvs.m_kvs) { const std::string &key = iter.first; const std::string &value = iter.second; - if (!decode_kv (ctxt, key, value, opts)) + if (!ctxt.handle_kv (key, value, *scheme_handler)) return nullptr; } + return scheme_handler->make_sink (ctxt, dc); +} + +bool +context::handle_kv (const std::string &key, + const std::string &value, + scheme_handler &scheme) const +{ + auto result = scheme.maybe_handle_kv (*this, key, value); + switch (result) + { + default: gcc_unreachable (); + case key_handler::result::ok: + return true; + case key_handler::result::malformed_value: + return false; + case key_handler::result::unrecognized: + /* Key recognized by the scheme; try the client keys. */ + if (m_client_keys) + { + result = m_client_keys->maybe_handle_kv (*this, key, value); + switch (result) + { + default: gcc_unreachable (); + case key_handler::result::ok: + return true; + case key_handler::result::malformed_value: + return false; + case key_handler::result::unrecognized: + break; + } + } + report_unknown_key (key, scheme); + return false; + } +} + +/* class text_scheme_handler : public scheme_handler. */ + +std::unique_ptr +text_scheme_handler::make_sink (const context &, + diagnostics::context &dc) +{ auto sink = std::make_unique (dc); - sink->set_show_nesting (opts.m_show_nesting); - sink->set_show_locations_in_nesting (opts.m_show_locations_in_nesting); - sink->set_show_nesting_levels (opts.m_show_levels); - pp_show_color (sink->get_printer ()) = opts.m_show_color; + sink->set_show_nesting (m_show_nesting); + sink->set_show_locations_in_nesting (m_show_locations_in_nesting); + sink->set_show_nesting_levels (m_show_levels); + pp_show_color (sink->get_printer ()) = m_show_color; return sink; } -bool -text_scheme_handler::decode_kv (const context &ctxt, - const std::string &key, - const std::string &value, - decoded_args &opts_out) const +enum key_handler::result +text_scheme_handler::maybe_handle_kv (const context &ctxt, + const std::string &key, + const std::string &value) { if (key == "color") - return parse_bool_value (ctxt, key, value, opts_out.m_show_color); + return parse_bool_value (ctxt, key, value, m_show_color); if (key == "show-nesting") - return parse_bool_value (ctxt, key, value, opts_out.m_show_nesting); + return parse_bool_value (ctxt, key, value, m_show_nesting); if (key == "show-nesting-locations") return parse_bool_value (ctxt, key, value, - opts_out.m_show_locations_in_nesting); + m_show_locations_in_nesting); if (key == "show-nesting-levels") - return parse_bool_value (ctxt, key, value, opts_out.m_show_levels); - - /* Key not found. */ - auto_vec known_keys; - known_keys.safe_push ("color"); - known_keys.safe_push ("show-nesting"); - known_keys.safe_push ("show-nesting-locations"); - known_keys.safe_push ("show-nesting-levels"); - ctxt.report_unknown_key (key, get_scheme_name (), known_keys); - return false; + return parse_bool_value (ctxt, key, value, m_show_levels); + + return result::unrecognized; +} + +void +text_scheme_handler::get_keys (auto_vec &out) const +{ + out.safe_push ("color"); + out.safe_push ("show-nesting"); + out.safe_push ("show-nesting-locations"); + out.safe_push ("show-nesting-levels"); } /* class sarif_scheme_handler : public scheme_handler. */ @@ -453,23 +495,11 @@ text_scheme_handler::decode_kv (const context &ctxt, std::unique_ptr sarif_scheme_handler:: make_sink (const context &ctxt, - diagnostics::context &dc, - const scheme_name_and_params &scheme_and_kvs) const + diagnostics::context &dc) { - decoded_args opts; - opts.m_serialization_kind = sarif_serialization_kind::json; - - for (auto& iter : scheme_and_kvs.m_kvs) - { - const std::string &key = iter.first; - const std::string &value = iter.second; - if (!decode_kv (ctxt, key, value, opts)) - return nullptr; - } - output_file output_file_; - if (opts.m_filename.get ()) - output_file_ = ctxt.open_output_file (std::move (opts.m_filename)); + if (m_filename.get ()) + output_file_ = ctxt.open_output_file (std::move (m_filename)); else // Default filename { @@ -485,33 +515,32 @@ make_sink (const context &ctxt, = open_sarif_output_file (dc, ctxt.get_affected_location_mgr (), basename, - opts.m_serialization_kind); + m_serialization_kind); } if (!output_file_) return nullptr; auto serialization_obj - = make_sarif_serialization_object (opts.m_serialization_kind); + = make_sarif_serialization_object (m_serialization_kind); auto sink = make_sarif_sink (dc, *ctxt.get_affected_location_mgr (), std::move (serialization_obj), - opts.m_generation_opts, + m_generation_opts, std::move (output_file_)); return sink; } -bool -sarif_scheme_handler::decode_kv (const context &ctxt, - const std::string &key, - const std::string &value, - decoded_args &opts_out) const +enum key_handler::result +sarif_scheme_handler::maybe_handle_kv (const context &ctxt, + const std::string &key, + const std::string &value) { if (key == "file") { - opts_out.m_filename = label_text::take (xstrdup (value.c_str ())); - return true; + m_filename = label_text::take (xstrdup (value.c_str ())); + return result::ok; } if (key == "serialization") { @@ -522,7 +551,7 @@ sarif_scheme_handler::decode_kv (const context &ctxt, (ctxt, key, value, value_names, - opts_out.m_serialization_kind); + m_serialization_kind); } if (key == "version") { @@ -534,20 +563,22 @@ sarif_scheme_handler::decode_kv (const context &ctxt, (ctxt, key, value, value_names, - opts_out.m_generation_opts.m_version); + m_generation_opts.m_version); } if (key == "state-graphs") return parse_bool_value (ctxt, key, value, - opts_out.m_generation_opts.m_state_graph); - - /* Key not found. */ - auto_vec known_keys; - known_keys.safe_push ("file"); - known_keys.safe_push ("serialization"); - known_keys.safe_push ("state-graphs"); - known_keys.safe_push ("version"); - ctxt.report_unknown_key (key, get_scheme_name (), known_keys); - return false; + m_generation_opts.m_state_graph); + + return result::unrecognized; +} + +void +sarif_scheme_handler::get_keys (auto_vec &out) const +{ + out.safe_push ("file"); + out.safe_push ("serialization"); + out.safe_push ("state-graphs"); + out.safe_push ("version"); } std::unique_ptr @@ -569,21 +600,11 @@ make_sarif_serialization_object (enum sarif_serialization_kind kind) std::unique_ptr html_scheme_handler:: make_sink (const context &ctxt, - diagnostics::context &dc, - const scheme_name_and_params &scheme_and_kvs) const + diagnostics::context &dc) { - decoded_args opts; - for (auto& iter : scheme_and_kvs.m_kvs) - { - const std::string &key = iter.first; - const std::string &value = iter.second; - if (!decode_kv (ctxt, key, value, opts)) - return nullptr; - } - output_file output_file_; - if (opts.m_filename.get ()) - output_file_ = ctxt.open_output_file (std::move (opts.m_filename)); + if (m_filename.get ()) + output_file_ = ctxt.open_output_file (std::move (m_filename)); else // Default filename { @@ -606,49 +627,47 @@ make_sink (const context &ctxt, auto sink = make_html_sink (dc, *ctxt.get_affected_location_mgr (), - opts.m_html_gen_opts, + m_html_gen_opts, std::move (output_file_)); return sink; } -bool -html_scheme_handler::decode_kv (const context &ctxt, - const std::string &key, - const std::string &value, - decoded_args &opts_out) const +enum key_handler::result +html_scheme_handler::maybe_handle_kv (const context &ctxt, + const std::string &key, + const std::string &value) { if (key == "css") - return parse_bool_value (ctxt, key, value, opts_out.m_html_gen_opts.m_css); + return parse_bool_value (ctxt, key, value, m_html_gen_opts.m_css); if (key == "file") { - opts_out.m_filename = label_text::take (xstrdup (value.c_str ())); - return true; + m_filename = label_text::take (xstrdup (value.c_str ())); + return result::ok; } if (key == "javascript") return parse_bool_value (ctxt, key, value, - opts_out.m_html_gen_opts.m_javascript); + m_html_gen_opts.m_javascript); if (key == "show-state-diagrams") return parse_bool_value (ctxt, key, value, - opts_out.m_html_gen_opts.m_show_state_diagrams); + m_html_gen_opts.m_show_state_diagrams); if (key == "show-state-diagrams-dot-src") - return parse_bool_value - (ctxt, key, value, - opts_out.m_html_gen_opts.m_show_state_diagrams_dot_src); + return parse_bool_value (ctxt, key, value, + m_html_gen_opts.m_show_state_diagrams_dot_src); if (key == "show-state-diagrams-sarif") - return parse_bool_value - (ctxt, key, value, - opts_out.m_html_gen_opts.m_show_state_diagrams_sarif); - - /* Key not found. */ - auto_vec known_keys; - known_keys.safe_push ("css"); - known_keys.safe_push ("file"); - known_keys.safe_push ("javascript"); - known_keys.safe_push ("show-state-diagrams"); - known_keys.safe_push ("show-state-diagram-dot-src"); - known_keys.safe_push ("show-state-diagram-sarif"); - ctxt.report_unknown_key (key, get_scheme_name (), known_keys); - return false; + return parse_bool_value (ctxt, key, value, + m_html_gen_opts.m_show_state_diagrams_sarif); + return result::unrecognized; +} + +void +html_scheme_handler::get_keys (auto_vec &out) const +{ + out.safe_push ("css"); + out.safe_push ("file"); + out.safe_push ("javascript"); + out.safe_push ("show-state-diagrams"); + out.safe_push ("show-state-diagrams-dot-src"); + out.safe_push ("show-state-diagrams-sarif"); } } // namespace output_spec @@ -685,17 +704,19 @@ struct parser_test class test_spec_context : public diagnostics::output_spec::dc_spec_context { public: - test_spec_context (diagnostics::context &dc, + test_spec_context (const char *option_name, + const char *unparsed_spec, + diagnostics::output_spec::key_handler *client_keys, line_maps *location_mgr, - location_t loc, - const char *option_name, - const char *unparsed_arg) - : dc_spec_context (dc, + diagnostics::context &dc, + location_t loc) + : dc_spec_context (option_name, + unparsed_spec, + client_keys, location_mgr, + dc, location_mgr, - loc, - option_name, - unparsed_arg) + loc) { } @@ -706,9 +727,15 @@ struct parser_test } }; - parser_test (const char *unparsed_spec) + parser_test (const char *unparsed_spec, + diagnostics::output_spec::key_handler *client_keys = nullptr) : m_dc (), - m_ctxt (m_dc, line_table, UNKNOWN_LOCATION, "-fOPTION=", unparsed_spec), + m_ctxt ("-fOPTION=", + unparsed_spec, + client_keys, + line_table, + m_dc, + UNKNOWN_LOCATION), m_fmt (m_dc.get_sink (0)) { pp_buffer (m_fmt.get_printer ())->m_flush_p = false; @@ -720,6 +747,12 @@ struct parser_test return diagnostics::output_spec::parse (m_ctxt); } + std::unique_ptr + parse_and_make_sink () + { + return m_ctxt.parse_and_make_sink (m_dc); + } + bool execution_failed_p () const { return m_dc.execution_failed_p (); @@ -742,9 +775,6 @@ struct parser_test static void test_output_arg_parsing () { - auto_fix_quotes fix_quotes; - auto_fix_progname fix_progname; - /* Minimal correct example. */ { parser_test pt ("foo"); @@ -831,12 +861,59 @@ test_output_arg_parsing () } } +class test_key_handler : public diagnostics::output_spec::key_handler +{ +public: + test_key_handler () + : m_verbose (false), + m_strict (false) + { + } + + enum result + maybe_handle_kv (const diagnostics::output_spec::context &ctxt, + const std::string &key, + const std::string &value) final override + { + if (key == "verbose") + return parse_bool_value (ctxt, key, value, m_verbose); + if (key == "strict") + return parse_bool_value (ctxt, key, value, m_strict); + return result::unrecognized; + } + + void + get_keys (auto_vec &out_known_keys) const final override + { + out_known_keys.safe_push ("verbose"); + out_known_keys.safe_push ("strict"); + } + + bool m_verbose; + bool m_strict; +}; + +static void +test_client_arg_parsing () +{ + test_key_handler client_keys; + parser_test pt ("text:verbose=yes,strict=no", &client_keys); + auto result = pt.parse_and_make_sink (); + ASSERT_TRUE (result.get ()); + ASSERT_TRUE (client_keys.m_verbose); + ASSERT_FALSE (client_keys.m_strict); +} + /* Run all of the selftests within this file. */ void output_spec_cc_tests () { + auto_fix_quotes fix_quotes; + auto_fix_progname fix_progname; + test_output_arg_parsing (); + test_client_arg_parsing (); } } // namespace diagnostics::selftest diff --git a/gcc/diagnostics/output-spec.h b/gcc/diagnostics/output-spec.h index e24002bc8ae4..bfc42c0c2de7 100644 --- a/gcc/diagnostics/output-spec.h +++ b/gcc/diagnostics/output-spec.h @@ -27,12 +27,71 @@ along with GCC; see the file COPYING3. If not see namespace diagnostics { namespace output_spec { +class context; + +/* An abstract base class for schemes, and for client-specific keys. */ + +class key_handler +{ +public: + enum class result + { + ok, + unrecognized, + malformed_value + }; + + /* Attempt to decode KEY and VALUE, storing the decoded value. */ + virtual enum result + maybe_handle_kv (const context &ctxt, + const std::string &key, + const std::string &value) = 0; + + virtual void + get_keys (auto_vec &out) const = 0; + + enum result + parse_bool_value (const context &ctxt, + const std::string &key, + const std::string &value, + bool &out) const; + + template + enum result + parse_enum_value (const context &ctxt, + const std::string &key, + const std::string &value, + const std::array, + NumValues> &value_names, + EnumType &out) const; +}; + +/* Abstract subclass for handling particular schemes and their keys. */ + +class scheme_handler : public key_handler +{ +public: + scheme_handler (std::string scheme_name) + : m_scheme_name (std::move (scheme_name)) + {} + virtual ~scheme_handler () {} + + const std::string &get_scheme_name () const { return m_scheme_name; } + + virtual std::unique_ptr + make_sink (const context &ctxt, + diagnostics::context &dc) = 0; + +private: + const std::string m_scheme_name; +}; + /* An abstract base class for handling the DSL of -fdiagnostics-add-output= and -fdiagnostics-set-output=. */ class context { - public: +public: std::unique_ptr parse_and_make_sink (diagnostics::context &dc); @@ -42,8 +101,7 @@ class context void report_unknown_key (const std::string &key, - const std::string &scheme_name, - auto_vec &known_keys) const; + const scheme_handler &scheme) const; void report_missing_key (const std::string &key, @@ -70,12 +128,19 @@ class context virtual const char * get_base_filename () const = 0; + bool + handle_kv (const std::string &key, + const std::string &value, + scheme_handler &scheme) const; + protected: context (const char *option_name, const char *unparsed_spec, + key_handler *client_keys, line_maps *affected_location_mgr) : m_option_name (option_name), m_unparsed_spec (unparsed_spec), + m_client_keys (client_keys), m_affected_location_mgr (affected_location_mgr) { } @@ -86,6 +151,9 @@ class context // e.g. "scheme:foo=bar,key=value" const char *m_unparsed_spec; + // Optional borrowed ptr to client-specific keys + key_handler *m_client_keys; + line_maps *m_affected_location_mgr; }; @@ -94,13 +162,17 @@ class context struct dc_spec_context : public output_spec::context { public: - dc_spec_context (diagnostics::context &dc, + dc_spec_context (const char *option_name, + const char *unparsed_spec, + key_handler *client_keys, line_maps *affected_location_mgr, + diagnostics::context &dc, line_maps *control_location_mgr, - location_t loc, - const char *option_name, - const char *unparsed_spec) - : context (option_name, unparsed_spec, affected_location_mgr), + location_t loc) + : context (option_name, + unparsed_spec, + client_keys, + affected_location_mgr), m_dc (dc), m_control_location_mgr (control_location_mgr), m_loc (loc) diff --git a/gcc/libgdiagnostics.cc b/gcc/libgdiagnostics.cc index 6b269a1d1fe8..46714ff2aa5e 100644 --- a/gcc/libgdiagnostics.cc +++ b/gcc/libgdiagnostics.cc @@ -2484,7 +2484,8 @@ struct spec_context : public diagnostics::output_spec::context const char *unparsed_spec, diagnostic_manager &affected_mgr, diagnostic_manager &control_mgr) - : context (option_name, unparsed_spec, affected_mgr.get_line_table ()), + : context (option_name, unparsed_spec, nullptr, + affected_mgr.get_line_table ()), m_control_mgr (control_mgr) {} diff --git a/gcc/opts-diagnostic.cc b/gcc/opts-diagnostic.cc index 6f459ec46173..a230c2119a9f 100644 --- a/gcc/opts-diagnostic.cc +++ b/gcc/opts-diagnostic.cc @@ -49,12 +49,13 @@ struct opt_spec_context : public diagnostics::output_spec::dc_spec_context location_t loc, const char *option_name, const char *option_value) - : dc_spec_context (dc, + : dc_spec_context (option_name, + option_value, + nullptr, location_mgr, + dc, location_mgr, - loc, - option_name, - option_value), + loc), m_opts (opts) {} From 60c6f92fb192352d784ab3153a9e11c19a3216a0 Mon Sep 17 00:00:00 2001 From: Aurelien Jarno Date: Thu, 2 Oct 2025 09:05:34 -0600 Subject: [PATCH 048/216] [PATCH v2] RISC-V: fix __builtin_round NaN handling [PR target/121652] __builtin_round() fails to correctly generate invalid exceptions for NaN inputs when -ftrapping-math is used (which is the default). According to the specification, an invalid exception should be raised for sNaN, but not for qNaN. Commit f12a27216952 ("RISC-V: fix __builtin_round clobbering FP...") attempted to avoid raising an invalid exception for qNaN by saving and restoring the FP exception flags. However this inadvertently suppressed the invalid exception for sNaN as well. Instead of saving/restoring fflags, this patch uses the same approach than the well tested GLIBC round implementation. When flag_trapping_math is enabled, it first checks whether the input is a NaN using feq.s/d. In that case it adds the input value with itself to possibly convert sNaN into qNaN. With this change, the glibc testsuite passes again. The generated code with -ftrapping-math now looks like: convert_float_to_float_round feq.s a5,fa0,fa0 beqz a5,.L6 auipc a5,0x0 flw fa4,42(a5) fabs.s fa5,fa0 flt.s a5,fa5,fa4 beqz a5,.L5 fcvt.w.s a5,fa0,rmm fcvt.s.w fa5,a5 fsgnj.s fa0,fa5,fa0 ret .L6: fadd.s fa0,fa0,fa0 .L5: ret With -fno-trapping-math, the additional checks are omitted so the resulting code is unchanged. In addition this fixes the following failures: FAIL: gcc.target/riscv/rvv/autovec/vls/math-nearbyint-1.c -O3 -ftree-vectorize -mrvv-vector-bits=scalable scan-assembler-times frflags\\s+[atx][0-9]+ 32 FAIL: gcc.target/riscv/rvv/autovec/vls/math-nearbyint-1.c -O3 -ftree-vectorize -mrvv-vector-bits=scalable scan-assembler-times fsflags\\s+[atx][0-9]+ 32 Fixes: f652a35877e3 ("This is almost exclusively Jivan's work....") Fixes: f12a27216952 ("RISC-V: fix __builtin_round clobbering FP...") PR target/121652 gcc/ChangeLog: * config/riscv/riscv.md (round_pattern): special case NaN input instead of saving/restoring fflags. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/vls/math-nearbyint-1.c: Adjust scan pattern for fewer instances of frflags/fsrflags. --- gcc/config/riscv/riscv.md | 39 ++++++++++++------- .../riscv/rvv/autovec/vls/math-nearbyint-1.c | 4 +- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/gcc/config/riscv/riscv.md b/gcc/config/riscv/riscv.md index 843a048e9d8c..78a01ef30c75 100644 --- a/gcc/config/riscv/riscv.md +++ b/gcc/config/riscv/riscv.md @@ -2322,27 +2322,38 @@ else { rtx reg; - rtx label = gen_label_rtx (); + rtx label1 = gen_label_rtx (); + rtx label2 = gen_label_rtx (); + rtx label3 = gen_label_rtx (); rtx end_label = gen_label_rtx (); rtx abs_reg = gen_reg_rtx (mode); rtx coeff_reg = gen_reg_rtx (mode); rtx tmp_reg = gen_reg_rtx (mode); - rtx fflags = gen_reg_rtx (SImode); riscv_emit_move (tmp_reg, operands[1]); + + if (flag_trapping_math) + { + /* Check if the input is a NaN. */ + riscv_expand_conditional_branch (label1, EQ, + operands[1], operands[1]); + + emit_jump_insn (gen_jump (label3)); + emit_barrier (); + + emit_label (label1); + } + riscv_emit_move (coeff_reg, riscv_vector::get_fp_rounding_coefficient (mode)); emit_insn (gen_abs2 (abs_reg, operands[1])); - /* fp compare can set invalid flag for NaN, so backup fflags. */ - if (flag_trapping_math) - emit_insn (gen_riscv_frflags (fflags)); - riscv_expand_conditional_branch (label, LT, abs_reg, coeff_reg); + riscv_expand_conditional_branch (label2, LT, abs_reg, coeff_reg); emit_jump_insn (gen_jump (end_label)); emit_barrier (); - emit_label (label); + emit_label (label2); switch (mode) { case SFmode: @@ -2361,15 +2372,17 @@ emit_insn (gen_copysign3 (tmp_reg, abs_reg, operands[1])); - emit_label (end_label); + emit_jump_insn (gen_jump (end_label)); + emit_barrier (); - /* Restore fflags, but after label. This is slightly different - than glibc implementation which only needs to restore under - the label, since it checks for NaN first, meaning following fp - compare can't raise fp exceptons and thus not clobber fflags. */ if (flag_trapping_math) - emit_insn (gen_riscv_fsflags (fflags)); + { + emit_label (label3); + /* Generate a qNaN from an sNaN if needed. */ + emit_insn (gen_add3 (tmp_reg, operands[1], operands[1])); + } + emit_label (end_label); riscv_emit_move (operands[0], tmp_reg); } diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-nearbyint-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-nearbyint-1.c index 89af160112c9..bb62ce2ef8a8 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-nearbyint-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-nearbyint-1.c @@ -54,5 +54,5 @@ DEF_OP_V (nearbyint, 512, double, __builtin_nearbyint) /* { dg-final { scan-tree-dump-not "4096,4096" "optimized" } } */ /* { dg-final { scan-assembler-times {vfcvt\.x\.f\.v\s+v[0-9]+,\s*v[0-9]+,\s*v0\.t} 30 } } */ /* { dg-final { scan-assembler-times {vfcvt\.f\.x\.v\s+v[0-9]+,\s*v[0-9]+,\s*v0\.t} 30 } } */ -/* { dg-final { scan-assembler-times {frflags\s+[atx][0-9]+} 32 } } */ -/* { dg-final { scan-assembler-times {fsflags\s+[atx][0-9]+} 32 } } */ +/* { dg-final { scan-assembler-times {frflags\s+[atx][0-9]+} 30 } } */ +/* { dg-final { scan-assembler-times {fsflags\s+[atx][0-9]+} 30 } } */ From a0dde67dd7de04ab26825cecf7cf28e131e19265 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Thu, 2 Oct 2025 18:06:03 +0000 Subject: [PATCH 049/216] c: Add more C2y tests of initializer constraints Add further tests of C2y requirements on initializers that became constraints (so requiring diagnostics rather than violations being undefined behavior) in N3346. (Some of the tests for invalid string initializers might not cover all theoretically possible cases, e.g. where char is 64-bit, but should work on all currently supported targets.) Tested for x86_64-pc-linux-gnu. * gcc.dg/c2y-init-2.c, gcc.dg/c2y-init-3.c: New tests. --- gcc/testsuite/gcc.dg/c2y-init-2.c | 33 ++++++++++ gcc/testsuite/gcc.dg/c2y-init-3.c | 106 ++++++++++++++++++++++++++++++ 2 files changed, 139 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/c2y-init-2.c create mode 100644 gcc/testsuite/gcc.dg/c2y-init-3.c diff --git a/gcc/testsuite/gcc.dg/c2y-init-2.c b/gcc/testsuite/gcc.dg/c2y-init-2.c new file mode 100644 index 000000000000..cf62eaa6730a --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-init-2.c @@ -0,0 +1,33 @@ +/* Test invalid initializers that are consistent with the syntax: undefined + behavior ("shall" in Semantics not Constraints) before C2y, constraint + violation in C2y. Structure and union cases. */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +struct s1 { int a, b; }; +struct s2 { struct s1 x; }; +struct s3 { struct s2 x; }; +union u1 { int a; }; +union u2 { union u1 x; }; +union u3 { union u2 x; }; + +struct s1 s1v; +volatile struct s2 s2v; +union u1 u1v; +const union u2 u2v; + +void +f () +{ + struct s1 ts1a = {}, ts1b = s1v, ts1c = { 1, 2 }; + const struct s2 ts2a = {}, ts2b = s2v, ts2c = { s1v }, ts2d = { 1 }; + volatile struct s3 ts3a = { s2v }, ts3b = { s1v }; + union u1 tu1a = {}, tu1b = u1v, tu1c = { 1 }; + const union u2 tu2a = {}, tu2b = u2v, tu2c = { u1v }, tu2d = { 1 }; + volatile union u3 tu3a = { u2v }, tu3b = { u1v }; + struct s2 es2a = 1; /* { dg-error "invalid initializer" } */ + struct s2 es2b = s1v; /* { dg-error "invalid initializer" } */ + struct s1 es1a = s2v; /* { dg-error "invalid initializer" } */ + union u2 eu2a = u1v; /* { dg-error "invalid initializer" } */ + union u1 eu1a = 1; /* { dg-error "invalid initializer" } */ +} diff --git a/gcc/testsuite/gcc.dg/c2y-init-3.c b/gcc/testsuite/gcc.dg/c2y-init-3.c new file mode 100644 index 000000000000..1dd060705e28 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-init-3.c @@ -0,0 +1,106 @@ +/* Test invalid initializers that are consistent with the syntax: undefined + behavior ("shall" in Semantics not Constraints) before C2y, constraint + violation in C2y. Array cases. */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +typedef __WCHAR_TYPE__ wchar_t; +typedef __CHAR8_TYPE__ char8_t; +typedef __CHAR16_TYPE__ char16_t; +typedef __CHAR32_TYPE__ char32_t; + +const char c1[] = "", c2[] = { "" }, c3[] = { "", }; +char c4[] = u8"", c5[] = { u8"" }, c6[] = { u8"", }; + +signed char sc1[] = "", sc2[] = { "" }, sc3[] = { "", }; +volatile signed char sc4[] = u8"", sc5[] = { u8"" }, sc6[] = { u8"", }; + +unsigned char uc1[] = "", uc2[] = { "" }, uc3[] = { "", }; +unsigned char uc4[] = u8"", uc5[] = { u8"" }, uc6[] = { u8"", }; + +char8_t c8_1[] = "", c8_2[] = { "" }, c8_3[] = { "", }; +char8_t c8_4[] = u8"", c8_5[] = { u8"" }, c8_6[] = { u8"", }; + +wchar_t w1[] = L"", w2[] = { L"" }, w3[] = { L"", }; +char16_t c16_1[] = u"", c16_2[] = { u"" }, c16_3[] = { u"", }; +char32_t c32_1[] = U"", c32_2[] = { U"" }, c32_3[] = { U"", }; + +int ia[] = { 1, 2, 3 }; + +_Atomic char ac[] = ""; /* { dg-error "inappropriate type" } */ +_Atomic wchar_t aw[] = L""; /* { dg-error "inappropriate type" } */ +_Atomic char8_t ac8[] = u8""; /* { dg-error "inappropriate type" } */ +_Atomic char16_t ac16[] = u""; /* { dg-error "inappropriate type" } */ +_Atomic char32_t ac32[] = U""; /* { dg-error "inappropriate type" } */ + +#if __WCHAR_WIDTH__ > __SCHAR_WIDTH__ +typedef char char_not_wchar; +typedef wchar_t wchar_not_char; +#else +typedef long long int char_not_wchar; +typedef long long int wchar_not_char; +#endif +char_not_wchar cnw[] = L""; /* { dg-error "cannot initialize|inappropriate type" } */ +char_not_wchar cnwb[] = { L"" }; /* { dg-error "cannot initialize|inappropriate type" } */ +wchar_not_char wnc[] = ""; /* { dg-error "cannot initialize|inappropriate type" } */ +wchar_not_char wncb[] = { "" }; /* { dg-error "cannot initialize|inappropriate type" } */ +wchar_not_char wnc8[] = u8""; /* { dg-error "cannot initialize|inappropriate type" } */ +wchar_not_char wnc8b[] = { u8"" }; /* { dg-error "cannot initialize|inappropriate type" } */ + +#if __INT_LEAST16_WIDTH__ > __SCHAR_WIDTH__ +typedef char char_not_char16; +typedef char16_t char16_not_char; +#else +typedef long long int char_not_char16; +typedef long long int char16_not_char; +#endif +char_not_char16 cn16[] = u""; /* { dg-error "cannot initialize|inappropriate type" } */ +char_not_char16 cn16b[] = { u"" }; /* { dg-error "cannot initialize|inappropriate type" } */ +char16_not_char c16nc[] = ""; /* { dg-error "cannot initialize|inappropriate type" } */ +char16_not_char c16ncb[] = { "" }; /* { dg-error "cannot initialize|inappropriate type" } */ +char16_not_char c16nc8[] = u8""; /* { dg-error "cannot initialize|inappropriate type" } */ +char16_not_char c16nc8b[] = { u8"" }; /* { dg-error "cannot initialize|inappropriate type" } */ + +#if __INT_LEAST32_WIDTH__ > __SCHAR_WIDTH__ +typedef char char_not_char32; +typedef char32_t char32_not_char; +#else +typedef long long int char_not_char32; +typedef long long int char32_not_char; +#endif +char_not_char32 cn32[] = U""; /* { dg-error "cannot initialize|inappropriate type" } */ +char_not_char32 cn32b[] = { U"" }; /* { dg-error "cannot initialize|inappropriate type" } */ +char32_not_char c32nc[] = ""; /* { dg-error "cannot initialize|inappropriate type" } */ +char32_not_char c32ncb[] = { "" }; /* { dg-error "cannot initialize|inappropriate type" } */ +char32_not_char c32nc8[] = u8""; /* { dg-error "cannot initialize|inappropriate type" } */ +char32_not_char c32nc8b[] = { u8"" }; /* { dg-error "cannot initialize|inappropriate type" } */ + +#if __WCHAR_WIDTH__ == __INT_LEAST16_WIDTH__ +typedef long long int wchar_not_char16; +typedef long long int char16_not_wchar; +#else +typedef wchar_t wchar_not_char16; +typedef char16_t char16_not_wchar; +#endif +wchar_not_char16 wcn16[] = u""; /* { dg-error "cannot initialize|inappropriate type" } */ +wchar_not_char16 wcn16b[] = { u"" }; /* { dg-error "cannot initialize|inappropriate type" } */ +char16_not_wchar c16nwc[] = L""; /* { dg-error "cannot initialize|inappropriate type" } */ +char16_not_wchar c16nwcb[] = { L"" }; /* { dg-error "cannot initialize|inappropriate type" } */ + +#if __WCHAR_WIDTH__ == __INT_LEAST32_WIDTH__ +typedef long long int wchar_not_char32; +typedef long long int char32_not_wchar; +#else +typedef wchar_t wchar_not_char32; +typedef char32_t char32_not_wchar; +#endif +wchar_not_char32 wcn32[] = U""; /* { dg-error "cannot initialize|inappropriate type" } */ +wchar_not_char32 wcn32b[] = { U"" }; /* { dg-error "cannot initialize|inappropriate type" } */ +char32_not_wchar c32nwc[] = L""; /* { dg-error "cannot initialize|inappropriate type" } */ +char32_not_wchar c32nwcb[] = { L"" }; /* { dg-error "cannot initialize|inappropriate type" } */ + +void +f () +{ + int ic[] = ia; /* { dg-error "invalid initializer" } */ +} From e4ab1f87805a6555bc327538d67067f3a690eddc Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Thu, 2 Oct 2025 18:19:13 -0400 Subject: [PATCH 050/216] diagnostics: generalize state graph code to use json::property instances In r16-1631-g2334d30cd8feac I added support for capturing state information from -fanalyzer in the form of embedded XML strings in SARIF output. In r16-2211-ga5d9debedd2f46 I rewrote this so the state was captured in the form of a SARIF directed graph, using various custom types. I want to add the ability to capture other kinds of graph in our SARIF output (e.g. inheritance hierarchies, CFGs, etc), so the following patch reworks the state graph handling code to minimize the use of custom types. Instead, the patch introduces various json::property types, and describes the state graph serialization in terms of instances of these properties, rather than hardcoding string attribute names in readers and writers. The custom SARIF properties live in a new "gcc/custom-sarif-properties/" directory. The "experimental-html" scheme keys "show-state-diagrams-dot-src" and "show-state-diagrams-sarif" become "show-graph-dot-src" and "show-graph-dot-src" in preparation for new kinds of graph in the output. contrib/ChangeLog: * gcc.doxy (INPUT): Add gcc/custom-sarif-properties gcc/ChangeLog: * Makefile.in (OBJS-libcommon): Add custom-sarif-properties/digraphs.o and custom-sarif-properties/state-graphs.o. Remove diagnostics/state-graphs.o. * configure: Regenerate. * configure.ac: Add custom-sarif-properties to subdir iteration. * custom-sarif-properties/digraphs.cc: New file. * custom-sarif-properties/digraphs.h: New file. * custom-sarif-properties/state-graphs.cc: New file. * custom-sarif-properties/state-graphs.h: New file. * diagnostics/diagnostics-selftests.cc (run_diagnostics_selftests): Drop call of state_graphs_cc_tests. * diagnostics/diagnostics-selftests.h (state_graphs_cc_tests): Delete decl. * diagnostics/digraphs.cc: Include "custom-sarif-properties/digraphs.h". Move include of "selftest.h" to within CHECKING_P section. (using digraph_object): New. (namespace properties): New. (diagnostics::digraphs::object::get_attr): Delete. (diagnostics::digraphs::object::set_attr): Delete. (diagnostics::digraphs::object::set_json_attr): Delete. (digraph_object::get_property): New definitions, for various property types. (digraph_object::set_property): Likewise. (digraph_object::maybe_get_property): New. (digraph_object::get_property_as_tristate): New. (digraph_object::ensure_property_bag): New. (digraph::get_graph_kind): New. (digraph::set_graph_kind): New. Add include of "custom-sarif-properties/state-graphs.h". (selftest::test_simple_graph): Rewrite to use json::property instances rather than string attribute names. (selftest::test_property_objects): New test. (selftest::digraphs_cc_tests): Call it. * diagnostics/digraphs.h: Include "tristate.h". (object::get_attr): Delete. (object::set_attr): Delete. (object::get_property): New decls. (object::set_property): New decls. (object::maybe_get_property): New. (object::get_property_as_tristate): New. (object::set_json_attr): Delete. (object::ensure_property_bag): New. (graph::get_graph_kind): New. (graph::set_graph_kind): New. * diagnostics/html-sink.cc (html_generation_options::html_generation_options): Update for field renamings. (html_generation_options::dump): Likewise. (html_builder::maybe_make_state_diagram): Likewise. (html_builder::add_graph): Show SARIF and .dot src inline, if requested. * diagnostics/html-sink.h (html_generation_options::m_show_state_diagrams_sarif): Rename to... (html_generation_options::m_show_graph_sarif): ...this. (html_generation_options::m_show_state_diagrams_dot_src): Rename to... (html_generation_options::m_show_graph_dot_src0): ...this. * diagnostics/output-spec.cc (html_scheme_handler::maybe_handle_kv): Rename keys. (html_scheme_handler::get_keys): Likewise. * diagnostics/state-graphs-to-dot.cc: : Reimplement throughout to use json::property instances found within custom_sarif_properties throughout, rather than types in diagnostics::state_graphs. * diagnostics/state-graphs.cc: Deleted file. * diagnostics/state-graphs.h: Delete almost all, except decl of diagnostics::state_graphs::make_dot_graph. * doc/invoke.texi: Update for changes to "experimental-html" sink keys. * json.cc (json::object::set_string): New. (json::object::set_integer): New. (json::object::set_bool): New. (json::object::set_array_of_string): New. * json.h: Include "label-text.h". (struct json::property): New template. (json::string_property): New. (json::integer_property): New. (json::bool_property): New. (json::json_property): New. (using json::array_of_string_property): New. (struct json::enum_traits): New. (enum_json::property): New. (json::value::dyn_cast_array): New vfunc. (json::value::dyn_cast_integer_number): New vfunc. (json::value::set_string): New. (json::value::set_integer): New. (json::value::set_bool): New. (json::value::set_array_of_string): New. (json::value::maybe_get_enum): New. (json::value::set_enum): New. (json::array::dyn_cast_array): New. (json::integer_number::dyn_cast_integer_number): New. (object::maybe_get_enum): New. (object::set_enum): New. gcc/analyzer/ChangeLog: * ana-state-to-diagnostic-state.cc: Reimplement throughout to use json::property instances found within custom_sarif_properties throughout, rather than types in diagnostics::state_graphs. * ana-state-to-diagnostic-state.h: Likewise. * checker-event.cc: Likewise. * sm-malloc.cc: Likewise. gcc/testsuite/ChangeLog: * gcc.dg/plugin/diagnostic_plugin_test_graphs.cc (report_diag_with_graphs): Port from set_attr to set_property. Signed-off-by: David Malcolm --- contrib/gcc.doxy | 2 +- gcc/Makefile.in | 3 +- gcc/analyzer/ana-state-to-diagnostic-state.cc | 163 +++++++------- gcc/analyzer/ana-state-to-diagnostic-state.h | 23 +- gcc/analyzer/checker-event.cc | 9 +- gcc/analyzer/sm-malloc.cc | 29 ++- gcc/configure | 2 +- gcc/configure.ac | 2 +- gcc/custom-sarif-properties/digraphs.cc | 28 +++ gcc/custom-sarif-properties/digraphs.h | 37 ++++ gcc/custom-sarif-properties/state-graphs.cc | 157 ++++++++++++++ gcc/custom-sarif-properties/state-graphs.h | 97 +++++++++ gcc/diagnostics/diagnostics-selftests.cc | 1 - gcc/diagnostics/diagnostics-selftests.h | 1 - gcc/diagnostics/digraphs.cc | 199 ++++++++++++++---- gcc/diagnostics/digraphs.h | 62 ++++-- gcc/diagnostics/html-sink.cc | 62 ++++-- gcc/diagnostics/html-sink.h | 9 +- gcc/diagnostics/output-spec.cc | 12 +- gcc/diagnostics/state-graphs-to-dot.cc | 139 ++++++------ gcc/diagnostics/state-graphs.cc | 156 -------------- gcc/diagnostics/state-graphs.h | 108 ---------- gcc/doc/invoke.texi | 8 +- gcc/json.cc | 25 +++ gcc/json.h | 82 ++++++++ .../plugin/diagnostic_plugin_test_graphs.cc | 5 +- 26 files changed, 900 insertions(+), 521 deletions(-) create mode 100644 gcc/custom-sarif-properties/digraphs.cc create mode 100644 gcc/custom-sarif-properties/digraphs.h create mode 100644 gcc/custom-sarif-properties/state-graphs.cc create mode 100644 gcc/custom-sarif-properties/state-graphs.h delete mode 100644 gcc/diagnostics/state-graphs.cc diff --git a/contrib/gcc.doxy b/contrib/gcc.doxy index 15952046f256..56e3845d00d4 100644 --- a/contrib/gcc.doxy +++ b/contrib/gcc.doxy @@ -478,7 +478,7 @@ WARN_LOGFILE = # directories like "/usr/src/myproject". Separate the files or directories # with spaces. -INPUT = gcc gcc/analyzer gcc/diagnostics gcc/text-art +INPUT = gcc gcc/analyzer gcc/custom-sarif-properties gcc/diagnostics gcc/text-art # This tag can be used to specify the character encoding of the source files that # doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 6a9d6204c869..098bafbce537 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1852,6 +1852,8 @@ OBJS = \ # Objects in libcommon.a, potentially used by all host binaries and with # no target dependencies. OBJS-libcommon = \ + custom-sarif-properties/digraphs.o \ + custom-sarif-properties/state-graphs.o \ diagnostic-global-context.o \ diagnostics/buffering.o \ diagnostics/changes.o \ @@ -1871,7 +1873,6 @@ OBJS-libcommon = \ diagnostics/paths.o \ diagnostics/paths-output.o \ diagnostics/source-printing.o \ - diagnostics/state-graphs.o \ diagnostics/state-graphs-to-dot.o \ diagnostics/selftest-context.o \ diagnostics/selftest-logical-locations.o \ diff --git a/gcc/analyzer/ana-state-to-diagnostic-state.cc b/gcc/analyzer/ana-state-to-diagnostic-state.cc index 996538c37852..39acf26bdd50 100644 --- a/gcc/analyzer/ana-state-to-diagnostic-state.cc +++ b/gcc/analyzer/ana-state-to-diagnostic-state.cc @@ -39,38 +39,55 @@ along with GCC; see the file COPYING3. If not see namespace ana { -using namespace ::diagnostics::state_graphs; +namespace node_properties = custom_sarif_properties::state_graphs::node; static void -set_wi_attr (state_node_ref state_node, - const char *attr_name, +set_wi_attr (diagnostics::digraphs::node &state_node, + const json::string_property &property, const wide_int_ref &w, signop sgn) { pretty_printer pp; pp_wide_int (&pp, w, sgn); - state_node.set_attr (attr_name, pp_formatted_text (&pp)); + state_node.set_property (property, pp_formatted_text (&pp)); } static void -set_type_attr (state_node_ref state_node, const_tree type) +set_type_attr (diagnostics::digraphs::node &state_node, + const_tree type) { gcc_assert (type); pretty_printer pp; pp_format_decoder (&pp) = default_tree_printer; pp_printf (&pp, "%T", type); - state_node.set_type (pp_formatted_text (&pp)); + state_node.set_property (node_properties::type, + pp_formatted_text (&pp)); } static void -set_bits_attr (state_node_ref state_node, +set_bits_attr (diagnostics::digraphs::node & state_node, bit_range bits) { pretty_printer pp; bits.dump_to_pp (&pp); - state_node.set_attr ("bits", pp_formatted_text (&pp)); + state_node.set_property (node_properties::bits, + pp_formatted_text (&pp)); } +static void +set_value_attrs (diagnostics::digraphs::node &state_node, + const svalue &sval) +{ + state_node.set_property (node_properties::value, + sval.to_json ()); + pretty_printer pp; + pp_format_decoder (&pp) = default_tree_printer; + sval.dump_to_pp (&pp, true); + state_node.set_property (node_properties::value_str, + pp_formatted_text (&pp)); +} + + // class analyzer_state_graph : public diagnostics::digraphs::digraph analyzer_state_graph::analyzer_state_graph (const program_state &state, @@ -141,34 +158,34 @@ analyzer_state_graph::analyzer_state_graph (const program_state &state, /* Ensure we have a node for the dst region. This could lead to additional pending edges. */ - auto dst_node = get_or_create_state_node (item.m_dst_reg); - add_edge (nullptr, item.m_src_node.m_node, dst_node.m_node); + auto &dst_node = get_or_create_state_node (item.m_dst_reg); + add_edge (nullptr, item.m_src_node, dst_node); } } -state_node_ref +diagnostics::digraphs::node & analyzer_state_graph::get_or_create_state_node (const region ®) { auto existing = m_region_to_state_node_map.find (®); if (existing != m_region_to_state_node_map.end ()) return *existing->second; - auto ref = create_and_add_state_node (reg); - m_region_to_state_node_map[®] = &ref.m_node; - return ref; + auto &state_node = create_and_add_state_node (reg); + m_region_to_state_node_map[®] = &state_node; + return state_node; } -state_node_ref +diagnostics::digraphs::node & analyzer_state_graph::create_and_add_state_node (const region ®) { auto node = create_state_node (reg); - state_node_ref result = *node; + diagnostics::digraphs::node &result = *node; if (auto parent_reg = reg.get_parent_region ()) if (parent_reg->get_kind () != RK_ROOT) { - auto parent_state_node = get_or_create_state_node (*parent_reg); - parent_state_node.m_node.add_child (std::move (node)); + auto &parent_state_node = get_or_create_state_node (*parent_reg); + parent_state_node.add_child (std::move (node)); return result; } add_node (std::move (node)); @@ -264,19 +281,18 @@ analyzer_state_graph::make_node_id (const region ®) std::unique_ptr analyzer_state_graph:: -make_state_node (diagnostics::state_graphs::node_kind kind, +make_state_node (enum node_properties::kind kind, std::string id) { auto node = std::make_unique (*this, std::move (id)); - state_node_ref node_ref (*node); - node_ref.set_node_kind (kind); + node->set_property (node_properties::kind, kind); return node; } std::unique_ptr analyzer_state_graph:: make_memspace_state_node (const region ®, - diagnostics::state_graphs::node_kind kind) + enum node_properties::kind kind) { return make_state_node (kind, make_node_id (reg)); } @@ -296,7 +312,7 @@ analyzer_state_graph::create_state_node (const region ®) const frame_region &frame_reg = static_cast (reg); - node = make_state_node (diagnostics::state_graphs::node_kind::stack_frame, + node = make_state_node (node_properties::kind::stack_frame, make_node_id (reg)); node->set_logical_loc (m_logical_loc_mgr.key_from_tree (frame_reg.get_fndecl ())); @@ -304,58 +320,59 @@ analyzer_state_graph::create_state_node (const region ®) pretty_printer pp; pp_format_decoder (&pp) = default_tree_printer; pp_printf (&pp, "%E", frame_reg.get_fndecl ()); - node->set_attr (STATE_NODE_PREFIX, "function", - pp_formatted_text (&pp)); + node->set_property (node_properties::function, + pp_formatted_text (&pp)); } } break; case RK_GLOBALS: node = make_memspace_state_node (reg, - diagnostics::state_graphs::node_kind::globals); + node_properties::kind::globals); break; case RK_CODE: node = make_memspace_state_node (reg, - diagnostics::state_graphs::node_kind::code); + node_properties::kind::code); break; case RK_FUNCTION: node = make_memspace_state_node (reg, - diagnostics::state_graphs::node_kind::function); + node_properties::kind::function); // TODO break; case RK_STACK: node = make_memspace_state_node (reg, - diagnostics::state_graphs::node_kind::stack); + node_properties::kind::stack); break; case RK_HEAP: node = make_memspace_state_node (reg, - diagnostics::state_graphs::node_kind::heap_); + node_properties::kind::heap_); break; case RK_THREAD_LOCAL: node = make_memspace_state_node (reg, - diagnostics::state_graphs::node_kind::thread_local_); + node_properties::kind::thread_local_); break; case RK_ROOT: gcc_unreachable (); break; case RK_SYMBOLIC: node = make_memspace_state_node (reg, - diagnostics::state_graphs::node_kind::other); + node_properties::kind::other); break; case RK_DECL: { - node = make_state_node (diagnostics::state_graphs::node_kind::variable, + node = make_state_node (node_properties::kind::variable, make_node_id (reg)); const decl_region &decl_reg = static_cast (reg); - state_node_ref node_ref (*node); + { pretty_printer pp; pp_format_decoder (&pp) = default_tree_printer; pp_printf (&pp, "%E", decl_reg.get_decl ()); - node_ref.set_name (pp_formatted_text (&pp)); + node->set_property (node_properties::name, + pp_formatted_text (&pp)); } set_type_attr (*node, TREE_TYPE (decl_reg.get_decl ())); } @@ -377,14 +394,14 @@ analyzer_state_graph::create_state_node (const region ®) case RK_ERRNO: case RK_PRIVATE: case RK_UNKNOWN: - node = make_state_node (diagnostics::state_graphs::node_kind::other, + node = make_state_node (node_properties::kind::other, make_node_id (reg)); break; case RK_HEAP_ALLOCATED: case RK_ALLOCA: node = make_memspace_state_node (reg, - diagnostics::state_graphs::node_kind::dynalloc_buffer); + node_properties::kind::dynalloc_buffer); set_attr_for_dynamic_extents (reg, *node); break; } @@ -425,9 +442,9 @@ create_state_nodes_for_binding_cluster (const binding_cluster &cluster, get_or_create_state_node (*reg); } - auto ref = get_or_create_state_node (*cluster.get_base_region ()); + auto &ref = get_or_create_state_node (*cluster.get_base_region ()); - ref.m_node.add_child (create_state_node_for_conc_bindings (conc_bindings)); + ref.add_child (create_state_node_for_conc_bindings (conc_bindings)); const region *typed_reg = cluster.get_base_region (); if (!typed_reg->get_type ()) @@ -455,23 +472,18 @@ create_state_nodes_for_binding_cluster (const binding_cluster &cluster, std::unique_ptr analyzer_state_graph::create_state_node_for_conc_bindings (const concrete_bindings_t &conc_bindings) { - auto node = make_state_node (diagnostics::state_graphs::node_kind::other, + auto node = make_state_node (node_properties::kind::other, make_node_id ("concrete-bindings")); for (auto iter : conc_bindings) { const bit_range bits = iter.first; const svalue *sval = iter.second; auto binding_state_node - = make_state_node (diagnostics::state_graphs::node_kind::other, + = make_state_node (node_properties::kind::other, make_node_id ("binding")); set_bits_attr (*binding_state_node, bits); - { - pretty_printer pp; - pp_format_decoder (&pp) = default_tree_printer; - sval->dump_to_pp (&pp, true); - binding_state_node->set_attr (STATE_NODE_PREFIX, "value", - pp_formatted_text (&pp)); - } + gcc_assert (sval); + set_value_attrs (*binding_state_node, *sval); node->add_child (std::move (binding_state_node)); } return node; @@ -496,27 +508,28 @@ analyzer_state_graph::get_bit_range_within_base_region (const region ®, void analyzer_state_graph:: -populate_state_node_for_typed_region (state_node_ref node, +populate_state_node_for_typed_region (diagnostics::digraphs::node &state_node, const region ®, const concrete_bindings_t &conc_bindings, bool create_all) { const_tree reg_type = reg.get_type (); gcc_assert (reg_type); - set_type_attr (node, reg_type); + set_type_attr (state_node, reg_type); bit_range bits (0, 0); if (get_bit_range_within_base_region (reg, bits)) { - set_bits_attr (node, bits); + set_bits_attr (state_node, bits); auto search = conc_bindings.find (bits); if (search != conc_bindings.end ()) { const svalue *bound_sval = search->second; - node.set_json_attr ("value", bound_sval->to_json ()); + gcc_assert (bound_sval); + set_value_attrs (state_node, *bound_sval); if (const region *dst_reg = bound_sval->maybe_get_region ()) - m_pending_edges.push_back ({node, *dst_reg}); + m_pending_edges.push_back ({state_node, *dst_reg}); } } @@ -555,9 +568,10 @@ populate_state_node_for_typed_region (state_node_ref node, { auto child_state_node = make_state_node - (diagnostics::state_graphs::node_kind::element, + (node_properties::kind::element, make_node_id (*child_reg)); - set_wi_attr (*child_state_node, "index", idx, UNSIGNED); + set_wi_attr (*child_state_node, + node_properties::index, idx, UNSIGNED); // Recurse: gcc_assert (element_type); @@ -565,7 +579,7 @@ populate_state_node_for_typed_region (state_node_ref node, *child_reg, conc_bindings, create_all); - node.m_node.add_child (std::move (child_state_node)); + state_node.add_child (std::move (child_state_node)); } } } @@ -587,11 +601,12 @@ populate_state_node_for_typed_region (state_node_ref node, { auto child_state_node = make_state_node - (diagnostics::state_graphs::node_kind::padding, + (node_properties::kind::padding, make_node_id (*child_reg)); - set_wi_attr (*child_state_node, "num_bits", + set_wi_attr (*child_state_node, + node_properties::num_bits, item.m_bit_range.m_size_in_bits, SIGNED); - node.m_node.add_child (std::move (child_state_node)); + state_node.add_child (std::move (child_state_node)); } } else @@ -600,27 +615,27 @@ populate_state_node_for_typed_region (state_node_ref node, = m_mgr.get_field_region (®, const_cast (item.m_field)); if (show_child_state_node_for_child_region_p (*child_reg, - conc_bindings, - create_all)) + conc_bindings, + create_all)) { auto child_state_node = make_state_node - (diagnostics::state_graphs::node_kind::field, + (node_properties::kind::field, make_node_id (*child_reg)); { pretty_printer pp; pp_format_decoder (&pp) = default_tree_printer; pp_printf (&pp, "%D", item.m_field); - child_state_node->set_attr (STATE_NODE_PREFIX, "name", - pp_formatted_text (&pp)); + child_state_node->set_property (node_properties::name, + pp_formatted_text (&pp)); } // Recurse: populate_state_node_for_typed_region (*child_state_node, - *child_reg, - conc_bindings, - create_all); - node.m_node.add_child (std::move (child_state_node)); + *child_reg, + conc_bindings, + create_all); + state_node.add_child (std::move (child_state_node)); } } } @@ -630,8 +645,9 @@ populate_state_node_for_typed_region (state_node_ref node, } void -analyzer_state_graph::set_attr_for_dynamic_extents (const region ®, - state_node_ref node_ref) +analyzer_state_graph:: +set_attr_for_dynamic_extents (const region ®, + diagnostics::digraphs::node &state_node) { const svalue *sval = m_state.m_region_model->get_dynamic_extents (®); if (sval) @@ -642,15 +658,16 @@ analyzer_state_graph::set_attr_for_dynamic_extents (const region ®, pp_wide_int (&pp, wi::to_wide (cst), UNSIGNED); else sval->dump_to_pp (&pp, true); - node_ref.set_attr ("dynamic-extents", pp_formatted_text (&pp)); + state_node.set_property (state_node_properties::dynamic_extents, + pp_formatted_text (&pp)); } } bool analyzer_state_graph:: show_child_state_node_for_child_region_p (const region ®, - const concrete_bindings_t &conc_bindings, - bool create_all) + const concrete_bindings_t &conc_bindings, + bool create_all) { if (create_all) return true; diff --git a/gcc/analyzer/ana-state-to-diagnostic-state.h b/gcc/analyzer/ana-state-to-diagnostic-state.h index 3a5ccc1b4306..eec3d56b3011 100644 --- a/gcc/analyzer/ana-state-to-diagnostic-state.h +++ b/gcc/analyzer/ana-state-to-diagnostic-state.h @@ -23,34 +23,38 @@ along with GCC; see the file COPYING3. If not see #include "diagnostics/state-graphs.h" #include "tree-logical-location.h" +#include "custom-sarif-properties/state-graphs.h" namespace ana { +namespace state_node_properties = custom_sarif_properties::state_graphs::node; + class analyzer_state_graph : public diagnostics::digraphs::digraph { public: analyzer_state_graph (const program_state &state, const extrinsic_state &ext_state); - diagnostics::state_graphs::state_node_ref + diagnostics::digraphs::node & get_or_create_state_node (const region ®); private: + struct pending_edge { - diagnostics::state_graphs::state_node_ref m_src_node; + diagnostics::digraphs::node & m_src_node; const region &m_dst_reg; }; - - diagnostics::state_graphs::state_node_ref + + diagnostics::digraphs::node & create_and_add_state_node (const region ®); std::unique_ptr - make_state_node (diagnostics::state_graphs::node_kind kind, + make_state_node (enum state_node_properties::kind kind, std::string id); std::unique_ptr make_memspace_state_node (const region ®, - enum diagnostics::state_graphs::node_kind kind); + enum state_node_properties::kind kind); std::unique_ptr create_state_node (const region ®); @@ -71,14 +75,14 @@ class analyzer_state_graph : public diagnostics::digraphs::digraph bit_range &out); void - populate_state_node_for_typed_region (diagnostics::state_graphs::state_node_ref, + populate_state_node_for_typed_region (diagnostics::digraphs::node &, const region ®, const concrete_bindings_t &conc_bindings, bool create_all); void set_attr_for_dynamic_extents (const region ®, - diagnostics::state_graphs::state_node_ref); + diagnostics::digraphs::node &); bool show_child_state_node_for_child_region_p (const region ®, @@ -95,7 +99,8 @@ class analyzer_state_graph : public diagnostics::digraphs::digraph const program_state &m_state; const extrinsic_state &m_ext_state; region_model_manager &m_mgr; - std::map m_region_to_state_node_map; + std::map m_region_to_state_node_map; std::map m_types_for_untyped_regions; unsigned m_next_id; std::vector m_pending_edges; diff --git a/gcc/analyzer/checker-event.cc b/gcc/analyzer/checker-event.cc index 4eac9450469f..790ebc714380 100644 --- a/gcc/analyzer/checker-event.cc +++ b/gcc/analyzer/checker-event.cc @@ -29,6 +29,7 @@ along with GCC; see the file COPYING3. If not see #include "tree-logical-location.h" #include "diagnostics/sarif-sink.h" #include "diagnostics/state-graphs.h" +#include "custom-sarif-properties/state-graphs.h" #include "analyzer/analyzer-logging.h" #include "analyzer/sm.h" @@ -242,9 +243,11 @@ checker_event::maybe_make_diagnostic_state_graph (bool debug) const pretty_printer pp; text_art::theme *theme = global_dc->get_diagram_theme (); text_art::dump_to_pp (*state, theme, &pp); - result->set_attr (STATE_GRAPH_PREFIX, - "analyzer/program_state/", - pp_formatted_text (&pp)); + const json::string_property program_state_property + (custom_sarif_properties::state_graphs::graph::prefix, + "analyzer/program_state/"); + result->set_property (program_state_property, + pp_formatted_text (&pp)); } return result; diff --git a/gcc/analyzer/sm-malloc.cc b/gcc/analyzer/sm-malloc.cc index a6b14219068a..b25e2adf015e 100644 --- a/gcc/analyzer/sm-malloc.cc +++ b/gcc/analyzer/sm-malloc.cc @@ -2735,7 +2735,7 @@ malloc_state_machine::transition_ptr_sval_non_null (region_model *model, smap->set_state (model, new_ptr_sval, m_free.m_nonnull, nullptr, ext_state); } -static enum diagnostics::state_graphs::node_dynalloc_state +static enum custom_sarif_properties::state_graphs::node::dynalloc_state get_dynalloc_state_for_state (enum resource_state rs) { switch (rs) @@ -2746,17 +2746,17 @@ get_dynalloc_state_for_state (enum resource_state rs) case RS_NULL: case RS_NON_HEAP: case RS_STOP: - return diagnostics::state_graphs::node_dynalloc_state::unknown; + return state_node_properties::dynalloc_state::unknown; case RS_ASSUMED_NON_NULL: - return diagnostics::state_graphs::node_dynalloc_state::nonnull; + return state_node_properties::dynalloc_state::nonnull; case RS_UNCHECKED: - return diagnostics::state_graphs::node_dynalloc_state::unchecked; + return state_node_properties::dynalloc_state::unchecked; case RS_NONNULL: - return diagnostics::state_graphs::node_dynalloc_state::nonnull; + return state_node_properties::dynalloc_state::nonnull; case RS_FREED: - return diagnostics::state_graphs::node_dynalloc_state::freed; + return state_node_properties::dynalloc_state::freed; } } @@ -2768,24 +2768,23 @@ add_state_to_state_graph (analyzer_state_graph &out_state_graph, { if (const region *reg = sval.maybe_get_region ()) { - auto reg_node = out_state_graph.get_or_create_state_node (*reg); + auto ®_node = out_state_graph.get_or_create_state_node (*reg); auto alloc_state = as_a_allocation_state (state); gcc_assert (alloc_state); - reg_node.set_dynalloc_state - (get_dynalloc_state_for_state (alloc_state->m_rs)); + reg_node.set_property (state_node_properties::dynalloc_state, + get_dynalloc_state_for_state (alloc_state->m_rs)); + if (alloc_state->m_deallocators) { pretty_printer pp; alloc_state->m_deallocators->dump_to_pp (&pp); - reg_node.m_node.set_attr (STATE_NODE_PREFIX, - "expected-deallocators", - pp_formatted_text (&pp)); + reg_node.set_property (state_node_properties::expected_deallocators, + pp_formatted_text (&pp)); } if (alloc_state->m_deallocator) - reg_node.m_node.set_attr (STATE_NODE_PREFIX, - "deallocator", - alloc_state->m_deallocator->m_name); + reg_node.set_property (state_node_properties::deallocator, + alloc_state->m_deallocator->m_name); } } diff --git a/gcc/configure b/gcc/configure index 38d8cd919cba..a742ad7e64cb 100755 --- a/gcc/configure +++ b/gcc/configure @@ -36868,7 +36868,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} "depdir":C) $SHELL $ac_aux_dir/mkinstalldirs $DEPDIR ;; "gccdepdir":C) ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/mkinstalldirs build/$DEPDIR - for lang in $subdirs c-family common analyzer diagnostics text-art rtl-ssa sym-exec + for lang in $subdirs c-family common analyzer custom-sarif-properties diagnostics text-art rtl-ssa sym-exec do ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/mkinstalldirs $lang/$DEPDIR done ;; diff --git a/gcc/configure.ac b/gcc/configure.ac index 19975fa5be5b..253d3ff28e9b 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -1368,7 +1368,7 @@ AC_CHECK_HEADERS(ext/hash_map) ZW_CREATE_DEPDIR AC_CONFIG_COMMANDS([gccdepdir],[ ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/mkinstalldirs build/$DEPDIR - for lang in $subdirs c-family common analyzer diagnostics text-art rtl-ssa sym-exec + for lang in $subdirs c-family common analyzer custom-sarif-properties diagnostics text-art rtl-ssa sym-exec do ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/mkinstalldirs $lang/$DEPDIR done], [subdirs="$subdirs" ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR]) diff --git a/gcc/custom-sarif-properties/digraphs.cc b/gcc/custom-sarif-properties/digraphs.cc new file mode 100644 index 000000000000..30ca2b6cdd02 --- /dev/null +++ b/gcc/custom-sarif-properties/digraphs.cc @@ -0,0 +1,28 @@ +/* Extra properties for digraphs in SARIF property bags. + Copyright (C) 2025 Free Software Foundation, Inc. + Contributed by David Malcolm . + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "json.h" +#include "custom-sarif-properties/digraphs.h" + +const json::string_property custom_sarif_properties::digraphs::digraph::kind + ("gcc/digraphs/graph/kind"); diff --git a/gcc/custom-sarif-properties/digraphs.h b/gcc/custom-sarif-properties/digraphs.h new file mode 100644 index 000000000000..93817ed97bd5 --- /dev/null +++ b/gcc/custom-sarif-properties/digraphs.h @@ -0,0 +1,37 @@ +/* Extra properties for digraphs in SARIF property bags. + Copyright (C) 2025 Free Software Foundation, Inc. + Contributed by David Malcolm . + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +#ifndef GCC_CUSTOM_SARIF_PROPERTIES_DIGRAPHS_H +#define GCC_CUSTOM_SARIF_PROPERTIES_DIGRAPHS_H + +/* SARIF property names relating to digraphs. */ + +namespace custom_sarif_properties { + namespace digraphs { + namespace digraph { + /* A hint about the kind of graph we have, + and thus what kinds of nodes and edges to expect. */ + extern const json::string_property kind; + // string; values: "cfg" + } + } +} + +#endif /* ! GCC_CUSTOM_SARIF_PROPERTIES_DIGRAPHS_H */ diff --git a/gcc/custom-sarif-properties/state-graphs.cc b/gcc/custom-sarif-properties/state-graphs.cc new file mode 100644 index 000000000000..3e0e58a4216c --- /dev/null +++ b/gcc/custom-sarif-properties/state-graphs.cc @@ -0,0 +1,157 @@ +/* Properties for capturing state graphs in SARIF property bags. + Copyright (C) 2025 Free Software Foundation, Inc. + Contributed by David Malcolm . + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "json.h" +#include "custom-sarif-properties/state-graphs.h" + +/* graph. */ +namespace graph = custom_sarif_properties::state_graphs::graph; +#define STATE_GRAPH_PREFIX "gcc/diagnostic_state_graph/" +const char *const graph::prefix = STATE_GRAPH_PREFIX; +#undef STATE_GRAPH_PREFIX + +/* node. */ +namespace node = custom_sarif_properties::state_graphs::node; +#define STATE_NODE_PREFIX "gcc/diagnostic_state_node/" + +const json::enum_property node::kind + (STATE_NODE_PREFIX "kind"); + +const json::string_property node::function (STATE_NODE_PREFIX "function"); + +const json::string_property node::dynamic_extents + (STATE_NODE_PREFIX "dynamic-extents"); + +const json::string_property node::name (STATE_NODE_PREFIX "name"); +const json::string_property node::type (STATE_NODE_PREFIX "type"); +const json::json_property node::value (STATE_NODE_PREFIX "value"); +const json::string_property node::value_str (STATE_NODE_PREFIX "value_str"); + +const json::string_property node::index (STATE_NODE_PREFIX "index"); + +const json::string_property node::bits (STATE_NODE_PREFIX "bits"); + +const json::string_property node::num_bits (STATE_NODE_PREFIX "num_bits"); + +const json::string_property node::deallocator (STATE_NODE_PREFIX "deallocator"); + +const json::string_property node::expected_deallocators + (STATE_NODE_PREFIX "expected-deallocators"); + +const json::enum_property node::dynalloc_state + (STATE_NODE_PREFIX "dynalloc-state"); + +#undef STATE_NODE_PREFIX + + +/* edge. */ +namespace edge_props = custom_sarif_properties::state_graphs::edge; +#define STATE_EDGE_PREFIX "gcc/diagnostic_state_edge/" +extern const char *const edge_props::prefix = STATE_EDGE_PREFIX; +#undef STATE_EDGE_PREFIX + +// Traits for enum node:kind + +template<> +enum node::kind +json::enum_traits::get_unknown_value () +{ + return node::kind::other; +} + +static const char * const node_kind_strs[] = { + "globals", + "code", + "function", + "stack", + "stack-frame", + "heap", + "thread-local", + "dynalloc-buffer", + "variable", + "field", + "padding", + "element", + "other", +}; + +template<> +bool +json::enum_traits:: +maybe_get_value_from_string (const char *str, + enum_t &out) +{ + for (size_t i = 0; i < ARRAY_SIZE (node_kind_strs); ++i) + if (!strcmp (node_kind_strs[i], str)) + { + out = static_cast (i); + return true; + } + return false; +} + +template<> +const char * +json::enum_traits::get_string_for_value (enum_t value) +{ + return node_kind_strs[static_cast (value)]; +} + +// Traits for enum node:dynalloc_state + +template<> +enum node::dynalloc_state +json::enum_traits::get_unknown_value () +{ + return node::dynalloc_state::unknown; +} + +static const char * const dynalloc_state_strs[] = { + "unknown", + "nonnull", + "unchecked", + "freed" +}; + +template<> +bool +json::enum_traits:: +maybe_get_value_from_string (const char *str, + enum_t &out) +{ + for (size_t i = 0; i < ARRAY_SIZE (dynalloc_state_strs); ++i) + if (!strcmp (dynalloc_state_strs[i], str)) + { + out = static_cast (i); + return true; + } + return false; +} + +template<> +const char * +json::enum_traits:: +get_string_for_value (enum_t value) +{ + return dynalloc_state_strs[static_cast (value)]; +} diff --git a/gcc/custom-sarif-properties/state-graphs.h b/gcc/custom-sarif-properties/state-graphs.h new file mode 100644 index 000000000000..6ae9ad891354 --- /dev/null +++ b/gcc/custom-sarif-properties/state-graphs.h @@ -0,0 +1,97 @@ +/* Properties for capturing state graphs in SARIF property bags. + Copyright (C) 2025 Free Software Foundation, Inc. + Contributed by David Malcolm . + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +#include "json.h" + +#ifndef GCC_DIAGNOSTICS_SARIF_PROPERTIES_STATE_GRAPHS_H +#define GCC_DIAGNOSTICS_SARIF_PROPERTIES_STATE_GRAPHS_H + +/* SARIF property names relating to GCC's CFGs. */ + +namespace custom_sarif_properties { + namespace state_graphs { + namespace graph { + extern const char *const prefix; + } + namespace node { + + enum class kind + { + // Memory regions + globals, + code, + function, // code within a particular function + stack, + stack_frame, + heap_, + thread_local_, + + /* Dynamically-allocated buffer, + on heap or stack (depending on parent). */ + dynalloc_buffer, + + variable, + + field, // field within a struct or union + padding, // padding bits in a struct or union + element, // element within an array + + other // anything else + }; + + enum class dynalloc_state + { + unknown, + nonnull, + unchecked, + freed + }; + + extern const json::enum_property kind; + + extern const json::string_property function; + extern const json::string_property dynamic_extents; + extern const json::string_property name; + extern const json::string_property type; + /* The value of a memory region, expressed as a json::value. */ + extern const json::json_property value; + /* The value of a memory region, expressed as a string. */ + extern const json::string_property value_str; + + /* For element nodes, the index within the array. */ + extern const json::string_property index; + + /* The range of bits or bytes within the base region. */ + extern const json::string_property bits; + + /* The size of a padding region. */ + extern const json::string_property num_bits; + + extern const json::string_property deallocator; + extern const json::string_property expected_deallocators; + extern const json::enum_property dynalloc_state; + } + namespace edge { + extern const char *const prefix; + } + } +} + +#endif /* ! GCC_DIAGNOSTICS_SARIF_PROPERTIES_STATE_GRAPHS_H */ diff --git a/gcc/diagnostics/diagnostics-selftests.cc b/gcc/diagnostics/diagnostics-selftests.cc index 94a212a6c93a..757655bb1728 100644 --- a/gcc/diagnostics/diagnostics-selftests.cc +++ b/gcc/diagnostics/diagnostics-selftests.cc @@ -46,7 +46,6 @@ run_diagnostics_selftests () sarif_sink_cc_tests (); digraphs_cc_tests (); output_spec_cc_tests (); - state_graphs_cc_tests (); lazy_paths_cc_tests (); paths_output_cc_tests (); changes_cc_tests (); diff --git a/gcc/diagnostics/diagnostics-selftests.h b/gcc/diagnostics/diagnostics-selftests.h index 994ebad52804..5a68a049d3e9 100644 --- a/gcc/diagnostics/diagnostics-selftests.h +++ b/gcc/diagnostics/diagnostics-selftests.h @@ -44,7 +44,6 @@ extern void paths_output_cc_tests (); extern void sarif_sink_cc_tests (); extern void selftest_logical_locations_cc_tests (); extern void source_printing_cc_tests (); -extern void state_graphs_cc_tests (); } /* end of namespace diagnostics::selftest. */ diff --git a/gcc/diagnostics/digraphs.cc b/gcc/diagnostics/digraphs.cc index 4a2ea4fca3c7..60d3e8ccfc7a 100644 --- a/gcc/diagnostics/digraphs.cc +++ b/gcc/diagnostics/digraphs.cc @@ -30,13 +30,15 @@ along with GCC; see the file COPYING3. If not see #include "graphviz.h" #include "diagnostics/digraphs.h" #include "diagnostics/sarif-sink.h" +#include "custom-sarif-properties/digraphs.h" -#include "selftest.h" - +using digraph_object = diagnostics::digraphs::object; using digraph = diagnostics::digraphs::digraph; using digraph_node = diagnostics::digraphs::node; using digraph_edge = diagnostics::digraphs::edge; +namespace properties = custom_sarif_properties::digraphs; + namespace { class conversion_to_dot @@ -171,66 +173,145 @@ conversion_to_dot::has_edges_p (const digraph_node &input_node) // class object +/* String properties. */ + const char * -diagnostics::digraphs::object:: -get_attr (const char *key_prefix, const char *key) const +digraph_object::get_property (const json::string_property &property) const { if (!m_property_bag) return nullptr; - std::string prefixed_key = std::string (key_prefix) + key; - if (json::value *jv = m_property_bag->get (prefixed_key.c_str ())) + if (json::value *jv = m_property_bag->get (property.m_key.get ())) if (json::string *jstr = jv->dyn_cast_string ()) return jstr->get_string (); return nullptr; } void -diagnostics::digraphs::object:: -set_attr (const char *key_prefix, const char *key, const char *value) +digraph_object::set_property (const json::string_property &property, + const char *utf8_value) +{ + auto &bag = ensure_property_bag (); + bag.set_string (property.m_key.get (), utf8_value); +} + +/* Integer properties. */ + +bool +digraph_object::maybe_get_property (const json::integer_property &property, + long &out_value) const +{ + if (!m_property_bag) + return false; + if (json::value *jv = m_property_bag->get (property.m_key.get ())) + if (json::integer_number *jnum = jv->dyn_cast_integer_number ()) + { + out_value = jnum->get (); + return true; + } + return false; +} + +void +digraph_object::set_property (const json::integer_property &property, long value) +{ + auto &bag = ensure_property_bag (); + bag.set_integer (property.m_key.get (), value); +} + +/* Bool properties. */ +void +digraph_object::set_property (const json::bool_property &property, bool value) +{ + auto &bag = ensure_property_bag (); + bag.set_bool (property.m_key.get (), value); +} + +tristate +digraph_object:: +get_property_as_tristate (const json::bool_property &property) const +{ + if (m_property_bag) + { + if (json::value *jv = m_property_bag->get (property.m_key.get ())) + switch (jv->get_kind ()) + { + default: + break; + case json::JSON_TRUE: + return tristate (true); + case json::JSON_FALSE: + return tristate (false); + } + } + return tristate::unknown (); +} + +/* Array-of-string properties. */ +json::array * +digraph_object::get_property (const json::array_of_string_property &property) const { - set_json_attr (key_prefix, key, std::make_unique (value)); + if (m_property_bag) + if (json::value *jv = m_property_bag->get (property.m_key.get ())) + if (json::array *arr = jv->dyn_cast_array ()) + return arr; + return nullptr; +} + +/* json::value properties. */ +const json::value * +digraph_object::get_property (const json::json_property &property) const +{ + if (m_property_bag) + return m_property_bag->get (property.m_key.get ()); + return nullptr; } void -diagnostics::digraphs::object:: -set_json_attr (const char *key_prefix, const char *key, std::unique_ptr value) +digraph_object::set_property (const json::json_property &property, + std::unique_ptr value) +{ + auto &bag = ensure_property_bag (); + bag.set (property.m_key.get (), std::move (value)); +} + +json::object & +digraph_object::ensure_property_bag () { - std::string prefixed_key = std::string (key_prefix) + key; if (!m_property_bag) - m_property_bag = std::make_unique (); - m_property_bag->set (prefixed_key.c_str (), std::move (value)); + m_property_bag = std::make_unique ( ); + return *m_property_bag; } // class digraph DEBUG_FUNCTION void -diagnostics::digraphs::digraph::dump () const +digraph::dump () const { make_json_sarif_graph ()->dump (); } std::unique_ptr -diagnostics::digraphs::digraph::make_json_sarif_graph () const +digraph::make_json_sarif_graph () const { return make_sarif_graph (*this, nullptr, nullptr); } std::unique_ptr -diagnostics::digraphs::digraph::make_dot_graph () const +digraph::make_dot_graph () const { - conversion_to_dot to_dot; - return to_dot.make_dot_graph_from_diagnostic_graph (*this); + conversion_to_dot converter; + return converter.make_dot_graph_from_diagnostic_graph (*this); } -std::unique_ptr -diagnostics::digraphs::digraph::clone () const +std::unique_ptr +digraph::clone () const { auto result = std::make_unique (); if (get_property_bag ()) result->set_property_bag (get_property_bag ()->clone_as_object ()); - std::map node_mapping; + std::map node_mapping; for (auto &iter : m_nodes) result->add_node (iter->clone (*result, node_mapping)); @@ -241,10 +322,10 @@ diagnostics::digraphs::digraph::clone () const } void -diagnostics::digraphs::digraph::add_edge (const char *id, - node &src_node, - node &dst_node, - const char *label) +digraph::add_edge (const char *id, + node &src_node, + node &dst_node, + const char *label) { auto e = std::make_unique (*this, id, @@ -263,7 +344,7 @@ diagnostics::digraphs::digraph::add_edge (const char *id, to edges by id (SARIF 2.1.0's §3.43.2 edgeId property). */ std::string -diagnostics::digraphs::digraph::make_edge_id (const char *edge_id) +digraph::make_edge_id (const char *edge_id) { /* If we have an id, use it. */ if (edge_id) @@ -284,27 +365,38 @@ diagnostics::digraphs::digraph::make_edge_id (const char *edge_id) } } +const char * +digraph::get_graph_kind () const +{ + return get_property (properties::digraph::kind); +} + +void +digraph::set_graph_kind (const char *kind) +{ + set_property (properties::digraph::kind, kind); +} + // class node DEBUG_FUNCTION void -diagnostics::digraphs::node::dump () const +digraph_node::dump () const { to_json_sarif_node ()->dump (); } std::unique_ptr -diagnostics::digraphs::node::to_json_sarif_node () const +digraph_node::to_json_sarif_node () const { return make_sarif_node (*this, nullptr, nullptr); } -std::unique_ptr -diagnostics::digraphs::node::clone (digraph &new_graph, - std::map &node_mapping) const +std::unique_ptr +digraph_node::clone (digraph &new_graph, + std::map &node_mapping) const { auto result - = std::make_unique (new_graph, - get_id ()); + = std::make_unique (new_graph, get_id ()); node_mapping.insert ({const_cast (this), result.get ()}); result->set_logical_loc (m_logical_loc); @@ -353,6 +445,9 @@ diagnostics::digraphs::edge::to_json_sarif_edge () const #if CHECKING_P +#include "selftest.h" +#include "custom-sarif-properties/state-graphs.h" + namespace diagnostics { namespace selftest { @@ -391,16 +486,17 @@ test_simple_graph () #define KEY_PREFIX "/placeholder/" auto g = std::make_unique (); g->set_description ("test graph"); - g->set_attr (KEY_PREFIX, "date", "1066"); + g->set_property (json::string_property (KEY_PREFIX, "date"), "1066"); auto a = std::make_unique (*g, "a"); auto b = std::make_unique (*g, "b"); - b->set_attr (KEY_PREFIX, "color", "red"); + b->set_property (json::string_property (KEY_PREFIX, "color"), "red"); auto c = std::make_unique (*g, "c"); c->set_label ("I am a node label"); auto e = std::make_unique (*g, nullptr, *a, *c); - e->set_attr (KEY_PREFIX, "status", "copacetic"); + e->set_property (json::string_property (KEY_PREFIX, "status"), + "copacetic"); e->set_label ("I am an edge label"); g->add_edge (std::move (e)); @@ -449,6 +545,34 @@ test_simple_graph () } } +static void +test_property_objects () +{ + namespace state_node_properties = custom_sarif_properties::state_graphs::node; + + digraph g; + digraph_node node (g, "a"); + + ASSERT_EQ (node.get_property (state_node_properties::kind), + state_node_properties::kind::other); + node.set_property (state_node_properties::kind, + state_node_properties::kind::stack); + ASSERT_EQ (node.get_property (state_node_properties::kind), + state_node_properties::kind::stack); + + ASSERT_EQ (node.get_property (state_node_properties::dynalloc_state), + state_node_properties::dynalloc_state::unknown); + node.set_property (state_node_properties::dynalloc_state, + state_node_properties::dynalloc_state::freed); + ASSERT_EQ (node.get_property (state_node_properties::dynalloc_state), + state_node_properties::dynalloc_state::freed); + + ASSERT_EQ (node.get_property (state_node_properties::type), nullptr); + node.set_property (state_node_properties::type, "const char *"); + ASSERT_STREQ (node.get_property (state_node_properties::type), + "const char *"); +} + /* Run all of the selftests within this file. */ void @@ -456,6 +580,7 @@ digraphs_cc_tests () { test_empty_graph (); test_simple_graph (); + test_property_objects (); } } // namespace diagnostics::selftest diff --git a/gcc/diagnostics/digraphs.h b/gcc/diagnostics/digraphs.h index 7193ee48c3fa..485a18917ca0 100644 --- a/gcc/diagnostics/digraphs.h +++ b/gcc/diagnostics/digraphs.h @@ -22,6 +22,7 @@ along with GCC; see the file COPYING3. If not see #define GCC_DIAGNOSTICS_DIGRAPHS_H #include "json.h" +#include "tristate.h" #include "diagnostics/logical-locations.h" class graphviz_out; @@ -55,23 +56,57 @@ class edge; class object { public: - const char * - get_attr (const char *key_prefix, - const char *key) const; - + /* String properties. */ + const char *get_property (const json::string_property &property) const; + void set_property (const json::string_property &property, + const char *utf8_value); + + /* Integer properties. */ + bool maybe_get_property (const json::integer_property &property, long &out) const; + void set_property (const json::integer_property &property, long value); + + /* Bool properties. */ + tristate + get_property_as_tristate (const json::bool_property &property) const; + void set_property (const json::bool_property &property, bool value); + + /* Array-of-string properties. */ + json::array * + get_property (const json::array_of_string_property &property) const; + + /* enum properties. */ + template + EnumType + get_property (const json::enum_property &property) const + { + if (m_property_bag) + { + EnumType result; + if (m_property_bag->maybe_get_enum (property, result)) + return result; + } + return json::enum_traits::get_unknown_value (); + } + template void - set_attr (const char *key_prefix, - const char *key, - const char *value); + set_property (const json::enum_property &property, + EnumType value) + { + auto &bag = ensure_property_bag (); + bag.set_enum (property, value); + } - void - set_json_attr (const char *key_prefix, - const char *key, - std::unique_ptr value); + /* json::value properties. */ + const json::value *get_property (const json::json_property &property) const; + void set_property (const json::json_property &property, + std::unique_ptr value); json::object * get_property_bag () const { return m_property_bag.get (); } + json::object & + ensure_property_bag (); + void set_property_bag (std::unique_ptr property_bag) { @@ -188,6 +223,9 @@ class digraph : public object std::unique_ptr clone () const; + const char *get_graph_kind () const; + void set_graph_kind (const char *); + private: void add_node_id (std::string node_id, node &new_node) @@ -300,7 +338,7 @@ class node : public object clone (digraph &new_graph, std::map &node_mapping) const; - private: +private: std::string m_id; std::unique_ptr m_label; std::vector> m_children; diff --git a/gcc/diagnostics/html-sink.cc b/gcc/diagnostics/html-sink.cc index d3fb107e6145..99d3b9d5dab5 100644 --- a/gcc/diagnostics/html-sink.cc +++ b/gcc/diagnostics/html-sink.cc @@ -57,8 +57,8 @@ html_generation_options::html_generation_options () : m_css (true), m_javascript (true), m_show_state_diagrams (false), - m_show_state_diagrams_sarif (false), - m_show_state_diagrams_dot_src (false) + m_show_graph_sarif (false), + m_show_graph_dot_src (false) { } @@ -68,8 +68,8 @@ html_generation_options::dump (FILE *outfile, int indent) const DIAGNOSTICS_DUMPING_EMIT_BOOL_FIELD (m_css); DIAGNOSTICS_DUMPING_EMIT_BOOL_FIELD (m_javascript); DIAGNOSTICS_DUMPING_EMIT_BOOL_FIELD (m_show_state_diagrams); - DIAGNOSTICS_DUMPING_EMIT_BOOL_FIELD (m_show_state_diagrams_sarif); - DIAGNOSTICS_DUMPING_EMIT_BOOL_FIELD (m_show_state_diagrams_dot_src); + DIAGNOSTICS_DUMPING_EMIT_BOOL_FIELD (m_show_graph_sarif); + DIAGNOSTICS_DUMPING_EMIT_BOOL_FIELD (m_show_graph_dot_src); } class html_builder; @@ -640,7 +640,7 @@ html_builder::maybe_make_state_diagram (const paths::event &event) the debug version. */ auto state_graph = event.maybe_make_diagnostic_state_graph - (m_html_gen_opts.m_show_state_diagrams_sarif); + (m_html_gen_opts.m_show_graph_sarif); if (!state_graph) return nullptr; @@ -652,7 +652,7 @@ html_builder::maybe_make_state_diagram (const paths::event &event) auto wrapper = std::make_unique ("div", false); xml::printer xp (*wrapper); - if (m_html_gen_opts.m_show_state_diagrams_sarif) + if (m_html_gen_opts.m_show_graph_sarif) { // For debugging, show the SARIF src inline: pretty_printer pp; @@ -660,7 +660,7 @@ html_builder::maybe_make_state_diagram (const paths::event &event) print_pre_source (xp, pp_formatted_text (&pp)); } - if (m_html_gen_opts.m_show_state_diagrams_dot_src) + if (m_html_gen_opts.m_show_graph_dot_src) { // For debugging, show the dot src inline: pretty_printer pp; @@ -1278,21 +1278,41 @@ void html_builder::add_graph (const digraphs::digraph &dg, xml::element &parent_element) { + auto div = std::make_unique ("div", false); + div->set_attr ("class", "gcc-directed-graph"); + xml::printer xp (*div); + + if (m_html_gen_opts.m_show_graph_sarif) + { + // For debugging, show the SARIF src inline: + pretty_printer pp; + dg.make_json_sarif_graph ()->print (&pp, true); + print_pre_source (xp, pp_formatted_text (&pp)); + } + if (auto dot_graph = dg.make_dot_graph ()) - if (auto svg_element = dot::make_svg_from_graph (*dot_graph)) - { - auto div = std::make_unique ("div", false); - div->set_attr ("class", "gcc-directed-graph"); - xml::printer xp (*div); - if (const char *description = dg.get_description ()) - { - xp.push_tag ("h2", true); - xp.add_text (description); - xp.pop_tag ("h2"); - } - xp.append (std::move (svg_element)); - parent_element.add_child (std::move (div)); - } + { + if (m_html_gen_opts.m_show_graph_dot_src) + { + // For debugging, show the dot src inline: + pretty_printer pp; + dot::writer w (pp); + dot_graph->print (w); + print_pre_source (xp, pp_formatted_text (&pp)); + } + + if (auto svg_element = dot::make_svg_from_graph (*dot_graph)) + { + if (const char *description = dg.get_description ()) + { + xp.push_tag ("h2", true); + xp.add_text (description); + xp.pop_tag ("h2"); + } + xp.append (std::move (svg_element)); + parent_element.add_child (std::move (div)); + } + } } void diff --git a/gcc/diagnostics/html-sink.h b/gcc/diagnostics/html-sink.h index d25ceea4b832..ad68e6fa3a67 100644 --- a/gcc/diagnostics/html-sink.h +++ b/gcc/diagnostics/html-sink.h @@ -40,11 +40,12 @@ struct html_generation_options // If true, attempt to show state diagrams at events bool m_show_state_diagrams; - // If true, show the SARIF form of the state with such diagrams - bool m_show_state_diagrams_sarif; + /* If true, show the SARIF form of the state with such diagrams, + and of other graphs. */ + bool m_show_graph_sarif; - // If true, show the .dot source used for the diagram - bool m_show_state_diagrams_dot_src; + // If true, show the .dot source used for such graphs + bool m_show_graph_dot_src; }; extern diagnostics::output_file diff --git a/gcc/diagnostics/output-spec.cc b/gcc/diagnostics/output-spec.cc index dfde7f0bdf30..f7cce0acce84 100644 --- a/gcc/diagnostics/output-spec.cc +++ b/gcc/diagnostics/output-spec.cc @@ -650,12 +650,12 @@ html_scheme_handler::maybe_handle_kv (const context &ctxt, if (key == "show-state-diagrams") return parse_bool_value (ctxt, key, value, m_html_gen_opts.m_show_state_diagrams); - if (key == "show-state-diagrams-dot-src") + if (key == "show-graph-dot-src") return parse_bool_value (ctxt, key, value, - m_html_gen_opts.m_show_state_diagrams_dot_src); - if (key == "show-state-diagrams-sarif") + m_html_gen_opts.m_show_graph_dot_src); + if (key == "show-graph-sarif") return parse_bool_value (ctxt, key, value, - m_html_gen_opts.m_show_state_diagrams_sarif); + m_html_gen_opts.m_show_graph_sarif); return result::unrecognized; } @@ -666,8 +666,8 @@ html_scheme_handler::get_keys (auto_vec &out) const out.safe_push ("file"); out.safe_push ("javascript"); out.safe_push ("show-state-diagrams"); - out.safe_push ("show-state-diagrams-dot-src"); - out.safe_push ("show-state-diagrams-sarif"); + out.safe_push ("show-graph-dot-src"); + out.safe_push ("show-graph-sarif"); } } // namespace output_spec diff --git a/gcc/diagnostics/state-graphs-to-dot.cc b/gcc/diagnostics/state-graphs-to-dot.cc index 2d80e6b283f6..8a3ad246d1aa 100644 --- a/gcc/diagnostics/state-graphs-to-dot.cc +++ b/gcc/diagnostics/state-graphs-to-dot.cc @@ -27,6 +27,7 @@ along with GCC; see the file COPYING3. If not see #include "system.h" #include "coretypes.h" +#include "custom-sarif-properties/state-graphs.h" #include "diagnostics/state-graphs.h" #include "graphviz.h" #include "xml.h" @@ -36,6 +37,8 @@ along with GCC; see the file COPYING3. If not see using namespace diagnostics; using namespace diagnostics::state_graphs; +namespace state_node_properties = custom_sarif_properties::state_graphs::node; + static int get_depth (const digraphs::node &n) { @@ -47,28 +50,28 @@ get_depth (const digraphs::node &n) } static const char * -get_color_for_dynalloc_state (enum node_dynalloc_state dynalloc_st) +get_color_for_dynalloc_state (enum state_node_properties::dynalloc_state dynalloc_st) { switch (dynalloc_st) { default: gcc_unreachable (); break; - case node_dynalloc_state::unknown: - case node_dynalloc_state::nonnull: + case state_node_properties::dynalloc_state::unknown: + case state_node_properties::dynalloc_state::nonnull: return nullptr; - case node_dynalloc_state::unchecked: + case state_node_properties::dynalloc_state::unchecked: return "#ec7a08"; // pf-orange-400 - case node_dynalloc_state::freed: + case state_node_properties::dynalloc_state::freed: return "#cc0000"; // pf-red-100 } } static void set_color_for_dynalloc_state (dot::attr_list &attrs, - enum node_dynalloc_state state) + enum state_node_properties::dynalloc_state state) { if (const char *color = get_color_for_dynalloc_state (state)) attrs.add (dot::id ("color"), dot::id (color)); @@ -106,7 +109,7 @@ class state_diagram : public dot::graph = std::make_unique (dot::id ("cluster_memory_regions")); for (size_t i = 0; i < input_state_graph.get_num_nodes (); ++i) on_input_state_node (*root_cluster, - state_node_ref (input_state_graph.get_node (i))); + input_state_graph.get_node (i)); add_stmt (std::move (root_cluster)); /* Now create dot edges for edges in input_stage_graph. */ @@ -126,7 +129,8 @@ class state_diagram : public dot::graph auto e = std::make_unique (src_port_id->second, dst_port_id->second); set_color_for_dynalloc_state - (e->m_attrs, state_node_ref (dst_node).get_dynalloc_state ()); + (e->m_attrs, + dst_node.get_property (state_node_properties::dynalloc_state)); add_stmt (std::move (e)); } @@ -147,9 +151,9 @@ class state_diagram : public dot::graph } dot::id - make_id (state_node_ref state_node, bool cluster) + make_id (const diagnostics::digraphs::node &state_node, bool cluster) { - std::string input_node_id = state_node.m_node.get_id (); + std::string input_node_id = state_node.get_id (); if (cluster) return std::string ("cluster_") + input_node_id; else @@ -157,44 +161,44 @@ class state_diagram : public dot::graph } bool - starts_node_p (state_node_ref state_node) + starts_node_p (const diagnostics::digraphs::node &state_node) { - switch (state_node.get_node_kind ()) + switch (state_node.get_property (state_node_properties::kind)) { default: return false; - case node_kind::stack: + case state_node_properties::kind::stack: /* We want all frames in the stack in the same table, so they are grouped. */ - case node_kind::dynalloc_buffer: - case node_kind::variable: + case state_node_properties::kind::dynalloc_buffer: + case state_node_properties::kind::variable: return true; } } const char * - get_label_for_node (state_node_ref state_node) + get_label_for_node (const diagnostics::digraphs::node &state_node) { - switch (state_node.get_node_kind ()) + switch (state_node.get_property (state_node_properties::kind)) { default: return nullptr; - case node_kind::globals: + case state_node_properties::kind::globals: return _("Globals"); - case node_kind::code: + case state_node_properties::kind::code: return _("Code"); - case node_kind::stack: + case state_node_properties::kind::stack: return _("Stack"); - case node_kind::heap_: + case state_node_properties::kind::heap_: return _("Heap"); } } void on_input_state_node (dot::subgraph &parent_subgraph, - state_node_ref state_node) + const diagnostics::digraphs::node &state_node) { dot::id sg_id = make_id (state_node, true); @@ -207,7 +211,7 @@ class state_diagram : public dot::graph xp.set_attr ("cellborder", "1"); xp.set_attr ("cellspacing", "0"); - const int max_depth = get_depth (state_node.m_node); + const int max_depth = get_depth (state_node); const int num_columns = max_depth + 2; dot::id id_of_dot_node = make_id (state_node, false); @@ -233,9 +237,9 @@ class state_diagram : public dot::graph child_subgraph->add_attr (dot::id ("label"), dot::id (label)); // recurse: - for (size_t i = 0; i < state_node.m_node.get_num_children (); ++i) + for (size_t i = 0; i < state_node.get_num_children (); ++i) on_input_state_node (*child_subgraph, - state_node.m_node.get_child (i)); + state_node.get_child (i)); parent_subgraph.m_stmt_list.add_stmt (std::move (child_subgraph)); } } @@ -246,10 +250,10 @@ class state_diagram : public dot::graph add_title_tr (const dot::id &id_of_dot_node, xml::printer &xp, int num_columns, - state_node_ref state_node, + const diagnostics::digraphs::node &state_node, std::string heading, enum style styl, - enum node_dynalloc_state dynalloc_state) + enum state_node_properties::dynalloc_state dynalloc_state) { xp.push_tag ("tr", true); xp.push_tag ("td", false); @@ -298,48 +302,49 @@ class state_diagram : public dot::graph void on_node_in_table (const dot::id &id_of_dot_node, xml::printer &xp, - state_node_ref state_node, + const diagnostics::digraphs::node &state_node, int max_depth, int depth, int num_columns) { bool recurse = true; - auto input_node_kind = state_node.get_node_kind (); + auto input_node_kind = state_node.get_property (state_node_properties::kind); switch (input_node_kind) { - case node_kind::padding: - case node_kind::other: + case state_node_properties::kind::padding: + case state_node_properties::kind::other: return; - case node_kind::stack: + case state_node_properties::kind::stack: add_title_tr (id_of_dot_node, xp, num_columns, state_node, "Stack", style::h1, - node_dynalloc_state::unknown); + state_node_properties::dynalloc_state::unknown); break; - case node_kind::stack_frame: + case state_node_properties::kind::stack_frame: if (auto logical_loc = state_node.get_logical_loc ()) if (const char *function = m_logical_loc_mgr.get_short_name (logical_loc)) add_title_tr (id_of_dot_node, xp, num_columns, state_node, std::string ("Frame: ") + function, style::h2, - node_dynalloc_state::unknown); + state_node_properties::dynalloc_state::unknown); break; - case node_kind::dynalloc_buffer: + case state_node_properties::kind::dynalloc_buffer: { - enum node_dynalloc_state dynalloc_st - = state_node.get_dynalloc_state (); - const char *extents = state_node.get_dynamic_extents (); - const char *type = state_node.get_type (); + enum state_node_properties::dynalloc_state dynalloc_st + = state_node.get_property (state_node_properties::dynalloc_state); + const char *extents + = state_node.get_property (state_node_properties::dynamic_extents); + const char *type = state_node.get_property (state_node_properties::type); pretty_printer pp; switch (dynalloc_st) { default: gcc_unreachable (); - case node_dynalloc_state::unknown: - case node_dynalloc_state::nonnull: + case state_node_properties::dynalloc_state::unknown: + case state_node_properties::dynalloc_state::nonnull: if (type) { if (extents) @@ -356,7 +361,7 @@ class state_diagram : public dot::graph } break; - case node_dynalloc_state::unchecked: + case state_node_properties::dynalloc_state::unchecked: if (type) { if (extents) @@ -371,7 +376,7 @@ class state_diagram : public dot::graph } break; - case node_dynalloc_state::freed: + case state_node_properties::dynalloc_state::freed: // TODO: show deallocator // TODO: show deallocation event pp_printf (&pp, "Freed buffer"); @@ -404,9 +409,10 @@ class state_diagram : public dot::graph { default: break; - case node_kind::variable: + case state_node_properties::kind::variable: { - const char *name = state_node.get_name (); + const char *name + = state_node.get_property (state_node_properties::name); gcc_assert (name); xp.push_tag ("td", false); maybe_add_dst_port (id_of_dot_node, xp, state_node); @@ -416,9 +422,10 @@ class state_diagram : public dot::graph xp.pop_tag ("td"); } break; - case node_kind::element: + case state_node_properties::kind::element: { - const char *index = state_node.get_index (); + const char *index + = state_node.get_property (state_node_properties::index); gcc_assert (index); xp.push_tag ("td", false); maybe_add_dst_port (id_of_dot_node, xp, state_node); @@ -430,9 +437,10 @@ class state_diagram : public dot::graph xp.pop_tag ("td"); } break; - case node_kind::field: + case state_node_properties::kind::field: { - const char *name = state_node.get_name (); + const char *name + = state_node.get_property (state_node_properties::name); gcc_assert (name); xp.push_tag ("td", false); maybe_add_dst_port (id_of_dot_node, xp, state_node); @@ -445,7 +453,8 @@ class state_diagram : public dot::graph break; } - if (const char *type = state_node.get_type ()) + if (const char *type + = state_node.get_property (state_node_properties::type)) { xp.push_tag ("td", false); xp.set_attr ("align", "right"); @@ -455,7 +464,8 @@ class state_diagram : public dot::graph xp.pop_tag ("td"); } - if (const char *value = state_node.get_value ()) + if (const char *value + = state_node.get_property (state_node_properties::value_str)) { xp.push_tag ("td", false); xp.set_attr ("align", "left"); @@ -466,15 +476,16 @@ class state_diagram : public dot::graph xp.pop_tag ("td"); recurse = false; } + xp.pop_tag ("tr"); } break; } if (recurse) - for (size_t i = 0; i < state_node.m_node.get_num_children (); ++i) + for (size_t i = 0; i < state_node.get_num_children (); ++i) on_node_in_table (id_of_dot_node, xp, - state_node.m_node.get_child (i), + state_node.get_child (i), max_depth, depth + 1, num_columns); } @@ -497,9 +508,9 @@ class state_diagram : public dot::graph void maybe_add_src_port (const dot::id &id_of_dot_node, xml::printer &xp, - state_node_ref state_node) + const diagnostics::digraphs::node &state_node) { - auto iter = m_src_nodes.find (&state_node.m_node); + auto iter = m_src_nodes.find (&state_node); if (iter == m_src_nodes.end ()) return; @@ -507,7 +518,7 @@ class state_diagram : public dot::graph dot::node_id node_id (id_of_dot_node, dot::port (src_id, dot::compass_pt::e)); - m_src_node_to_port_id.insert ({&state_node.m_node, node_id}); + m_src_node_to_port_id.insert ({&state_node, node_id}); xp.set_attr ("port", src_id.m_str); } @@ -517,9 +528,9 @@ class state_diagram : public dot::graph void maybe_add_dst_port (const dot::id &id_of_dot_node, xml::printer &xp, - state_node_ref state_node) + const diagnostics::digraphs::node &state_node) { - auto iter = m_dst_nodes.find (&state_node.m_node); + auto iter = m_dst_nodes.find (&state_node); if (iter == m_dst_nodes.end ()) return; @@ -527,7 +538,7 @@ class state_diagram : public dot::graph dot::node_id node_id (id_of_dot_node, dot::port (dst_id/*, dot::compass_pt::w*/)); - m_dst_node_to_port_id.insert ({&state_node.m_node, node_id}); + m_dst_node_to_port_id.insert ({&state_node, node_id}); xp.set_attr ("port", dst_id.m_str); } @@ -535,11 +546,11 @@ class state_diagram : public dot::graph const logical_locations::manager &m_logical_loc_mgr; /* All nodes involved in edges (and thus will need a port). */ - std::set m_src_nodes; - std::set m_dst_nodes; + std::set m_src_nodes; + std::set m_dst_nodes; - std::map m_src_node_to_port_id; - std::map m_dst_node_to_port_id; + std::map m_src_node_to_port_id; + std::map m_dst_node_to_port_id; }; std::unique_ptr diff --git a/gcc/diagnostics/state-graphs.cc b/gcc/diagnostics/state-graphs.cc deleted file mode 100644 index 5941c4138214..000000000000 --- a/gcc/diagnostics/state-graphs.cc +++ /dev/null @@ -1,156 +0,0 @@ -/* Extensions to diagnostics::digraphs to support state graphs. - Copyright (C) 2025 Free Software Foundation, Inc. - Contributed by David Malcolm . - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -. */ - -#define INCLUDE_ALGORITHM -#define INCLUDE_MAP -#define INCLUDE_SET -#define INCLUDE_STRING -#define INCLUDE_VECTOR -#include "config.h" -#include "system.h" -#include "coretypes.h" - -#include "diagnostics/state-graphs.h" -#include "selftest.h" - -using namespace diagnostics::state_graphs; - -const char * const node_kind_strs[] = { - "globals", - "code", - "function", - "stack", - "stack-frame", - "heap", - "thread-local", - "dynalloc-buffer", - "variable", - "field", - "padding", - "element", - "other", -}; - -const char * -diagnostics::state_graphs::node_kind_to_str (enum node_kind k) -{ - return node_kind_strs[static_cast (k)]; -} - -// struct state_node_ref - -enum node_kind -state_node_ref::get_node_kind () const -{ - const char *value = get_attr ("kind"); - if (!value) - return node_kind::other; - - for (size_t i = 0; i < ARRAY_SIZE (node_kind_strs); ++i) - if (!strcmp (node_kind_strs[i], value)) - return static_cast (i); - - return node_kind::other; -} - -void -state_node_ref::set_node_kind (enum node_kind k) -{ - set_attr ("kind", node_kind_to_str (k)); -} - -const char * const dynalloc_state_strs[] = { - "unknown", - "nonnull", - "unchecked", - "freed" -}; - -enum node_dynalloc_state -state_node_ref::get_dynalloc_state () const -{ - const char *value = get_attr ("dynalloc-state"); - if (!value) - return node_dynalloc_state::unknown; - - for (size_t i = 0; i < ARRAY_SIZE (dynalloc_state_strs); ++i) - if (!strcmp (dynalloc_state_strs[i], value)) - return static_cast (i); - - return node_dynalloc_state::unknown; -} - -void -state_node_ref::set_dynalloc_state (enum node_dynalloc_state s) const -{ - set_attr ("dynalloc-state", - dynalloc_state_strs[static_cast (s)]); -} - -const char * -state_node_ref::get_dynamic_extents () const -{ - return m_node.get_attr (STATE_NODE_PREFIX, "dynamic-extents"); -} - -void -state_node_ref::set_json_attr (const char *key, - std::unique_ptr value) const -{ - m_node.set_json_attr (STATE_NODE_PREFIX, key, std::move (value)); -} - -#if CHECKING_P - -namespace diagnostics { -namespace selftest { - -static void -test_node_attrs () -{ - digraphs::digraph g; - digraphs::node n (g, "a"); - state_node_ref node_ref (n); - - ASSERT_EQ (node_ref.get_node_kind (), node_kind::other); - node_ref.set_node_kind (node_kind::stack); - ASSERT_EQ (node_ref.get_node_kind (), node_kind::stack); - - ASSERT_EQ (node_ref.get_dynalloc_state (), node_dynalloc_state::unknown); - node_ref.set_dynalloc_state (node_dynalloc_state::freed); - ASSERT_EQ (node_ref.get_dynalloc_state (), node_dynalloc_state::freed); - - ASSERT_EQ (node_ref.get_type (), nullptr); - node_ref.set_type ("const char *"); - ASSERT_STREQ (node_ref.get_type (), "const char *"); -} - -/* Run all of the selftests within this file. */ - -void -state_graphs_cc_tests () -{ - test_node_attrs (); -} - -} // namespace diagnostics::selftest -} // namespace diagnostics - -#endif /* CHECKING_P */ diff --git a/gcc/diagnostics/state-graphs.h b/gcc/diagnostics/state-graphs.h index ad18f82b5b73..21aded03ff6b 100644 --- a/gcc/diagnostics/state-graphs.h +++ b/gcc/diagnostics/state-graphs.h @@ -22,7 +22,6 @@ along with GCC; see the file COPYING3. If not see #define GCC_DIAGNOSTICS_STATE_GRAPHS_H #include "diagnostics/digraphs.h" -#include "diagnostics/logical-locations.h" /* diagnostics::digraphs provides support for directed graphs. @@ -34,118 +33,11 @@ along with GCC; see the file COPYING3. If not see in these nodes to stash extra properties (e.g. what kind of memory region a node is e.g. stack vs heap). */ -class sarif_graph; namespace dot { class graph; } namespace diagnostics { namespace state_graphs { -enum class node_kind -{ - // Memory regions - globals, - code, - function, // code within a particular function - stack, - stack_frame, - heap_, - thread_local_, - - /* Dynamically-allocated buffer, - on heap or stack (depending on parent). */ - dynalloc_buffer, - - variable, - - field, // field within a struct or union - padding, // padding bits in a struct or union - element, // element within an array - - other // anything else -}; - -extern const char * -node_kind_to_str (enum node_kind); - -enum class node_dynalloc_state -{ - unknown, - nonnull, - unchecked, - freed -}; - -/* Prefixes to use in SARIF property bags. */ -#define STATE_GRAPH_PREFIX "gcc/diagnostic_state_graph/" -#define STATE_NODE_PREFIX "gcc/diagnostic_state_node/" -#define STATE_EDGE_PREFIX "gcc/diagnostic_state_edge/" - -/* A wrapper around a node that gets/sets attributes, using - the node's property bag for storage, so that the data roundtrips - through SARIF. */ - -struct state_node_ref -{ - state_node_ref (diagnostics::digraphs::node &node) - : m_node (node) - {} - - enum node_kind - get_node_kind () const; - void - set_node_kind (enum node_kind); - - // For node_kind::stack_frame, this will be the function - logical_locations::key - get_logical_loc () const - { - return m_node.get_logical_loc (); - } - - // For node_kind::dynalloc_buffer - enum node_dynalloc_state - get_dynalloc_state () const; - - void - set_dynalloc_state (enum node_dynalloc_state) const; - - const char * - get_dynamic_extents () const; - - const char * - get_name () const { return get_attr ("name"); } - void - set_name (const char *name) const { set_attr ("name", name); } - - const char * - get_type () const { return get_attr ("type"); } - void - set_type (const char *type) const { set_attr ("type", type); } - - const char * - get_value () const { return get_attr ("value"); } - - const char * - get_index () const { return get_attr ("index"); } - - const char * - get_attr (const char *key) const - { - return m_node.get_attr (STATE_NODE_PREFIX, key); - } - - void - set_attr (const char *key, const char *value) const - { - return m_node.set_attr (STATE_NODE_PREFIX, key, value); - } - - void - set_json_attr (const char *key, std::unique_ptr value) const; - - diagnostics::digraphs::node &m_node; -}; - extern std::unique_ptr make_dot_graph (const diagnostics::digraphs::digraph &state_graph, const logical_locations::manager &logical_loc_mgr); diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 492ca2914323..81a495b416f0 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -6271,16 +6271,16 @@ These are visible by pressing ``j'' and ``k'' to single-step forward and backward through events. Enabling this option will slow down HTML generation. -@item show-state-diagrams-dot-src=@r{[}yes@r{|}no@r{]} +@item show-graph-dot-src=@r{[}yes@r{|}no@r{]} This is a debugging feature and defaults to @code{no}. -If @code{show-state-diagrams-dot-src=yes} +If @code{show-graph-dot-src=yes} then if @code{show-state-diagrams=yes}, the generated state diagrams will also show the .dot source input to GraphViz used for the diagram. -@item show-state-diagrams-sarif=@r{[}yes@r{|}no@r{]} +@item show-graph-sarif=@r{[}yes@r{|}no@r{]} This is a debugging feature and defaults to @code{no}. -If @code{show-state-diagrams-sarif=yes} +If @code{show-graph-sarif=yes} then if @code{show-state-diagrams=yes}, the generated state diagrams will also show a SARIF representation of the state. diff --git a/gcc/json.cc b/gcc/json.cc index 7153f087a001..14ff76bd0366 100644 --- a/gcc/json.cc +++ b/gcc/json.cc @@ -394,6 +394,31 @@ object::set_bool (const char *key, bool v) set (key, new json::literal (v)); } +void +object::set_string (const string_property &property, const char *utf8_value) +{ + set_string (property.m_key.get (), utf8_value); +} + +void +object::set_integer (const integer_property &property, long value) +{ + set_integer (property.m_key.get (), value); +} + +void +object::set_bool (const bool_property &property, bool value) +{ + set_bool (property.m_key.get (), value); +} + +void +object::set_array_of_string (const array_of_string_property &property, + std::unique_ptr value) +{ + set (property.m_key.get (), std::move (value)); +} + /* Subroutine of json::compare for comparing a pairs of objects. */ int diff --git a/gcc/json.h b/gcc/json.h index c706f2a4fe9f..c53715ecb2ca 100644 --- a/gcc/json.h +++ b/gcc/json.h @@ -21,6 +21,8 @@ along with GCC; see the file COPYING3. If not see #ifndef GCC_JSON_H #define GCC_JSON_H +#include "label-text.h" + /* Implementation of JSON, a lightweight data-interchange format. See http://www.json.org/ @@ -116,6 +118,41 @@ struct token } // namespace json::pointer +/* Typesafe way to work with properties in JSON objects. */ + +template +struct property +{ + explicit property (const char *key) + : m_key (label_text::borrow (key)) + {} + + explicit property (const char *key_prefix, const char *key) + : m_key (label_text::take (concat (key_prefix, key, nullptr))) + {} + + label_text m_key; +}; + +using string_property = property; +using integer_property = property; +using bool_property = property; +using json_property = property; +using array_of_string_property = property; + +template +struct enum_traits +{ + typedef EnumType enum_t; + + static enum_t get_unknown_value (); + static bool maybe_get_value_from_string (const char *, enum_t &out); + static const char *get_string_for_value (enum_t value); +}; + +template +using enum_property = property>; + /* Base class of JSON value. */ class value @@ -130,6 +167,8 @@ class value void DEBUG_FUNCTION dump () const; virtual object *dyn_cast_object () { return nullptr; } + virtual array *dyn_cast_array () { return nullptr; } + virtual integer_number *dyn_cast_integer_number () { return nullptr; } virtual string *dyn_cast_string () { return nullptr; } static int compare (const json::value &val_a, const json::value &val_b); @@ -183,6 +222,19 @@ class object : public value /* Set to literal true/false. */ void set_bool (const char *key, bool v); + /* Typesafe access to properties by name (such as from a schema). */ + void set_string (const string_property &property, const char *utf8_value); + void set_integer (const integer_property &property, long value); + void set_bool (const bool_property &property, bool value); + void set_array_of_string (const array_of_string_property &property, + std::unique_ptr value); + template + bool maybe_get_enum (const enum_property &property, + EnumType &out) const; + template + void set_enum (const enum_property &property, + EnumType value); + static int compare (const json::object &obj_a, const json::object &obj_b); size_t get_num_keys () const { return m_keys.length (); } @@ -210,6 +262,8 @@ class array : public value void print (pretty_printer *pp, bool formatted) const final override; std::unique_ptr clone () const final override; + array *dyn_cast_array () final override { return this; } + void append (value *v); void append_string (const char *utf8_value); @@ -269,6 +323,8 @@ class integer_number : public value void print (pretty_printer *pp, bool formatted) const final override; std::unique_ptr clone () const final override; + integer_number *dyn_cast_integer_number () final override { return this; } + long get () const { return m_value; } private: @@ -317,6 +373,32 @@ class literal : public value enum kind m_kind; }; + +template +inline bool +object::maybe_get_enum (const enum_property &property, + EnumType &out) const +{ + if (value *jv = get (property.m_key.get ())) + if (string *jstr = jv->dyn_cast_string ()) + { + if (enum_traits::maybe_get_value_from_string + (jstr->get_string (), out)) + return true; + } + return false; +} + +template +inline void +object::set_enum (const enum_property &property, + EnumType value) +{ + const char *str + = json::enum_traits::get_string_for_value (value); + set_string (property.m_key.get (), str); +} + } // namespace json template <> diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_graphs.cc b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_graphs.cc index 7398a2908258..8ba576ec81c4 100644 --- a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_graphs.cc +++ b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_graphs.cc @@ -210,9 +210,8 @@ report_diag_with_graphs (location_t loc) g->set_description (desc); auto a = std::make_unique (*g, "a"); auto b = std::make_unique (*g, "b"); -#define KEY_PREFIX "/placeholder-prefix/" - b->set_attr (KEY_PREFIX, "color", "red"); -#undef KEY_PREFIX + const json::string_property color ("/placeholder-prefix/color"); + b->set_property (color, "red"); auto c = std::make_unique (*g, "c"); c->set_label ("I am a node label"); From e4e6a42ae93a6a721de4d9d09be1fee6cea7fa09 Mon Sep 17 00:00:00 2001 From: Paul Thomas Date: Fri, 3 Oct 2025 07:29:50 +0100 Subject: [PATCH 051/216] Fortran: Error in nested PDTs with undefined KIND exprs. [122109] 2025-10-03 Paul Thomas gcc/fortran PR fortran/122089 * decl.cc (gfc_get_pdt_instance): If gfc_extract_int is true an error has occurred because the kind expr was not provided. Use the template in this case and return MATCH_YES. gcc/testsuite/ PR fortran/122089 * gfortran.dg/pdt_52.f03: New test. * gfortran.dg/pdt_53.f03: New test. * gfortran.dg/pdt_54.f03: New test. --- gcc/fortran/decl.cc | 10 +++++++- gcc/testsuite/gfortran.dg/pdt_52.f03 | 36 ++++++++++++++++++++++++++++ gcc/testsuite/gfortran.dg/pdt_53.f03 | 28 ++++++++++++++++++++++ gcc/testsuite/gfortran.dg/pdt_54.f03 | 28 ++++++++++++++++++++++ 4 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/pdt_52.f03 create mode 100644 gcc/testsuite/gfortran.dg/pdt_53.f03 create mode 100644 gcc/testsuite/gfortran.dg/pdt_54.f03 diff --git a/gcc/fortran/decl.cc b/gcc/fortran/decl.cc index f00f0e11378c..3761b6589e81 100644 --- a/gcc/fortran/decl.cc +++ b/gcc/fortran/decl.cc @@ -4038,7 +4038,15 @@ gfc_get_pdt_instance (gfc_actual_arglist *param_list, gfc_symbol **sym, } kind_value = 0; - gfc_extract_int (kind_expr, &kind_value); + /* This can come about during the parsing of nested pdt_templates. An + error arises because the KIND parameter expression has not been + provided. Use the template instead of an incorrect instance. */ + if (gfc_extract_int (kind_expr, &kind_value)) + { + gfc_free_actual_arglist (type_param_spec_list); + return MATCH_YES; + } + sprintf (name + strlen (name), "_%d", kind_value); if (!name_seen && actual_param) diff --git a/gcc/testsuite/gfortran.dg/pdt_52.f03 b/gcc/testsuite/gfortran.dg/pdt_52.f03 new file mode 100644 index 000000000000..5acdecbdf3ce --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pdt_52.f03 @@ -0,0 +1,36 @@ +! { dg-do compile } +! +! Test the fix for PR122089 in which an error occured in compiling the module +! because a spurious REAL(KIND=0) was being produced for 'values_'. +! +! Other failures are indicated by the comments. For reasons that are not to me, +! they didn't fail when combined with this test. +! +! Contributed by Damian Rouson +! +module tensor_m + implicit none + + type tensor_t(k) + integer, kind :: k = kind(1.) + real(k), allocatable :: values_ ! ICE if not allocatable + end type + + type input_output_pair_t(k) + integer, kind :: k + type(tensor_t(k)) inputs_, expected_outputs_ ! ICE if 2nd component dropped + end type + + type mini_batch_t(k) + integer, kind :: k + type(input_output_pair_t(k)) input_output_pairs_ + end type + +end module tensor_m + + use tensor_m + type (mini_batch_t(k = kind(1d0))) :: x + allocate (x%input_output_pairs_%inputs_%values_, source = 42d0) + print *, kind (x%input_output_pairs_%inputs_%values_), x%input_output_pairs_%inputs_%values_ + deallocate (x%input_output_pairs_%inputs_%values_) +end diff --git a/gcc/testsuite/gfortran.dg/pdt_53.f03 b/gcc/testsuite/gfortran.dg/pdt_53.f03 new file mode 100644 index 000000000000..9f3b4ca82ab8 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pdt_53.f03 @@ -0,0 +1,28 @@ +! { dg-do compile } +! +! Test the fix for PR122089 in which an error occured in compiling the module +! because a spurious REAL(KIND=0) was being produced for 'values_'. +! +! This is a variant of pdt_52.f03. See the comments in that test. +! +! Contributed by Damian Rouson +! +module tensor_m + implicit none + + type tensor_t(k) + integer, kind :: k = kind(1.) + real(k) :: values_ ! Used to ICE + end type + + type input_output_pair_t(k) + integer, kind :: k + type(tensor_t(k)) inputs_, expected_outputs_ + end type + + type mini_batch_t(k) + integer, kind :: k + type(input_output_pair_t(k)) input_output_pairs_ + end type + +end module tensor_m diff --git a/gcc/testsuite/gfortran.dg/pdt_54.f03 b/gcc/testsuite/gfortran.dg/pdt_54.f03 new file mode 100644 index 000000000000..9631dad2f5e2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pdt_54.f03 @@ -0,0 +1,28 @@ +! { dg-do compile } +! +! Test the fix for PR122089 in which an error occured in compiling the module +! because a spurious REAL(KIND=0) was being produced for 'values_'. +! +! This is a variant of pdt_52.f03. See the comments in that test. +! +! Contributed by Damian Rouson +! +module tensor_m + implicit none + + type tensor_t(k) + integer, kind :: k = kind(1.) + real(k), allocatable :: values_ + end type + + type input_output_pair_t(k) + integer, kind :: k + type(tensor_t(k)) inputs_ ! Used to ICE if 2nd component dropped + end type + + type mini_batch_t(k) + integer, kind :: k + type(input_output_pair_t(k)) input_output_pairs_ + end type + +end module tensor_m From deb7e9312adc029db91a8bd51e599d6e00d63314 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Kami=C5=84ski?= Date: Wed, 1 Oct 2025 13:47:25 +0200 Subject: [PATCH 052/216] libstdc++: Add C++2020 Implementation status table. This is derived from Table of Content of the ISO/IEC 14882:2020. Section are included up to depth limit of 3 in majority of the cases. libstdc++-v3/ChangeLog: * doc/html/manual/index.html: Regenerated. * doc/html/manual/status.html: Regenerated. * doc/xml/manual/status_cxx2020.xml: Added status table. Reviewed-by: Jonathan Wakely --- libstdc++-v3/doc/html/manual/index.html | 2 +- libstdc++-v3/doc/html/manual/status.html | 104 +- .../doc/xml/manual/status_cxx2020.xml | 4415 +++++++++++++++++ 3 files changed, 4515 insertions(+), 6 deletions(-) diff --git a/libstdc++-v3/doc/html/manual/index.html b/libstdc++-v3/doc/html/manual/index.html index 816a87a291cb..fb61205678f2 100644 --- a/libstdc++-v3/doc/html/manual/index.html +++ b/libstdc++-v3/doc/html/manual/index.html @@ -145,7 +145,7 @@
21.10. Non-unique Mapping Containers
21.11. Point Iterator Hierarchy
21.12. Invalidation Guarantee Tags Hierarchy
21.13. Container Tag Hierarchy
21.14. Hash functions, ranged-hash functions, and range-hashing functions
21.15. Insert hash sequence diagram
21.16. Insert hash sequence diagram with a null policy
21.17. Hash policy class diagram
21.18. Balls and bins
21.19. Insert resize sequence diagram
21.20. Standard resize policy trigger sequence diagram
21.21. Standard resize policy size sequence - diagram
21.22. Tree node invariants
21.23. Tree node invalidation
21.24. A tree and its update policy
21.25. Restoring node invariants
21.26. Insert update sequence
21.27. Useless update path
21.28. A PATRICIA trie
21.29. A trie and its update policy
21.30. A simple list
21.31. The counter algorithm
21.32. Underlying Priority-Queue Data-Structures.
21.33. Priority-Queue Data-Structure Tags.
B.1. Configure and Build File Dependencies

List of Tables

1.1. C++ 1998/2003 Implementation Status
1.2. C++ 2011 Implementation Status
1.3. C++ 2014 Implementation Status
1.4. C++ Technical Specifications Implementation Status
1.5. C++ 2017 Library Features
1.6. C++ 2017 Implementation Status
1.7. C++ Technical Specifications Implementation Status
1.8. Support for Extended ABI Tags
1.9. C++ 2020 Library Features
1.10. C++ 2023 Library Features
1.11. C++ TR1 Implementation Status
1.12. C++ TR 24733 Implementation Status
1.13. C++ Special Functions Implementation Status
3.1. C++ Command Options
3.2. C++ 1998 Library Headers
3.3. C++ 1998 Library Headers for C Library Facilities
3.4. C++ 1998 Deprecated Library Header
3.5. C++ 2011 Library Headers
3.6. C++ 2011 Library Headers for C Library Facilities
3.7. C++ 2014 Library Header
3.8. C++ 2017 Library Headers
3.9. C++ 2020 Library Headers
3.10. C++ 2020 Obsolete Headers
3.11. C++ 2023 Library Headers
3.12. C++ 2026 Library Headers
3.13. File System TS Header
3.14. Library Fundamentals TS Headers
3.15. Networking TS Headers
3.16. C++ TR 1 Library Headers
3.17. C++ TR 1 Library Headers for C Library Facilities
3.18. C++ TR 24733 Decimal Floating-Point Header
3.19. C++ ABI Headers
3.20. Extension Headers
3.21. Extension Debug Headers
3.22. Extension Parallel Headers
17.1. Debugging Containers
17.2. Debugging Containers C++11
18.1. Parallel Algorithms
20.1. Bitmap Allocator Memory Map
B.1. Doxygen Prerequisites
B.2. HTML to Doxygen Markup Comparison
B.3. Docbook Prerequisites
B.4. HTML to Docbook XML Markup Comparison
B.5. Docbook XML Element Use
B.6. Extension Allocators
B.7. Extension Allocators Continued

List of Tables

1.1. C++ 1998/2003 Implementation Status
1.2. C++ 2011 Implementation Status
1.3. C++ 2014 Implementation Status
1.4. C++ Technical Specifications Implementation Status
1.5. C++ 2017 Library Features
1.6. C++ 2017 Implementation Status
1.7. C++ Technical Specifications Implementation Status
1.8. Support for Extended ABI Tags
1.9. C++ 2020 Library Features
1.10. C++ 2020 Implementation Status
1.11. C++ 2023 Library Features
1.12. C++ TR1 Implementation Status
1.13. C++ TR 24733 Implementation Status
1.14. C++ Special Functions Implementation Status
3.1. C++ Command Options
3.2. C++ 1998 Library Headers
3.3. C++ 1998 Library Headers for C Library Facilities
3.4. C++ 1998 Deprecated Library Header
3.5. C++ 2011 Library Headers
3.6. C++ 2011 Library Headers for C Library Facilities
3.7. C++ 2014 Library Header
3.8. C++ 2017 Library Headers
3.9. C++ 2020 Library Headers
3.10. C++ 2020 Obsolete Headers
3.11. C++ 2023 Library Headers
3.12. C++ 2026 Library Headers
3.13. File System TS Header
3.14. Library Fundamentals TS Headers
3.15. Networking TS Headers
3.16. C++ TR 1 Library Headers
3.17. C++ TR 1 Library Headers for C Library Facilities
3.18. C++ TR 24733 Decimal Floating-Point Header
3.19. C++ ABI Headers
3.20. Extension Headers
3.21. Extension Debug Headers
3.22. Extension Parallel Headers
17.1. Debugging Containers
17.2. Debugging Containers C++11
18.1. Parallel Algorithms
20.1. Bitmap Allocator Memory Map
B.1. Doxygen Prerequisites
B.2. HTML to Doxygen Markup Comparison
B.3. Docbook Prerequisites
B.4. HTML to Docbook XML Markup Comparison
B.5. Docbook XML Element Use
B.6. Extension Allocators
B.7. Extension Allocators Continued

List of Equations

21.1. Ranged Hash Function
21.2. Range-Hashing, Division Method
21.3. Division via Prime Modulo
21.4. Division via Bit Mask
21.5. A Standard String Hash Function
21.6. Only k String DNA Hash diff --git a/libstdc++-v3/doc/html/manual/status.html b/libstdc++-v3/doc/html/manual/status.html index 164faebbf371..465bc6ccafe9 100644 --- a/libstdc++-v3/doc/html/manual/status.html +++ b/libstdc++-v3/doc/html/manual/status.html @@ -1759,7 +1759,101 @@ Note 2: The C++20 calendar types are supported since 11.1, time zones and UTC are supported since 13.1, and chrono::parse is supported since 14.1. -

Implementation Specific Behavior

For behaviour which is also specified by previous standards, +

+The following status table is based on the table of contents of +ISO/IEC 14882:2020. +Some subclauses are not shown in the table where the content is unchanged +since C++17 and the implementation is complete. +

Table 1.10. C++ 2020 Implementation Status

SectionDescriptionStatusComments
+ 17 + + Language support library +
17.1General  
17.2Common definitions  
17.2.1Header <cstddef> synopsisY 
17.2.2Header <cstdlib> synopsisY 
17.2.3Null pointersY 
17.2.4Sizes, alignments, and offsetsY 
17.2.5byte type operationsY 
17.3Implementation properties  
17.3.1General  
17.3.2Header <version> synopsisY 
17.3.3Header <limits> synopsisY 
17.3.4Floating-point type properties  
17.3.4.1Type float_round_styleN 
17.3.4.2Type float_denorm_styleN 
17.3.5Class template numeric_limitsY 
17.3.6Header <climits> synopsisY 
17.3.7Header <cfloat> synopsisY 
17.4Integer types  
17.4.1General  
17.4.2Header <cstdint> synopsisY 
17.5Startup and terminationPartialC library dependency for quick_exit, at_quick_exit
17.6Dynamic memory managementY 
17.7Type identificationY 
17.8Source location  
17.8.1Header <source_location> synopsisY 
17.8.2Class source_locationY 
17.9Exception handlingY 
17.10Initializer listsY 
17.11Comparisons  
17.11.1Header <compare> synopsisY 
17.11.2Comparison category typesY 
17.11.3Class template common_comparison_categoryY 
17.11.4Concept three_way_comparableY 
17.11.5Result of three-way comparisonY 
17.11.6Comparison algorithmsY 
17.12Coroutines  
17.12.1General  
17.12.2Header <coroutine> synopsisY 
17.12.3Coroutine traitsY 
17.12.4Class template coroutine_handleY 
17.12.5No-op coroutinesY 
17.13Other runtime supportY 
+ 18 + + Concepts library +
18.1General  
18.2Equality preservation  
18.3Header <concepts> synopsisY 
18.4Language-related concepts  
18.4.1General  
18.4.2Concept same_asY 
18.4.3Concept derived_fromY 
18.4.4Concept convertible_toY 
18.4.5Concept common_reference_withY 
18.4.6Concept common_withY 
18.4.7Arithmetic concepts  
18.4.8Concept assignable_fromY 
18.4.9Concept swappableY 
18.4.10Concept destructibleY 
18.4.11Concept constructible_fromY 
18.4.12Concept default_initializableY 
18.4.13Concept move_constructibleY 
18.4.14Concept copy_constructibleY 
18.5Comparison concepts  
18.5.1General  
18.5.2Boolean testabilityY 
18.5.3Concept equality_comparableY 
18.5.4Concept totally_orderedY 
18.6Object conceptsY 
18.7Callable concepts  
18.7.1General  
18.7.2Concept invocableY 
18.7.3Concept regular_invocableY 
18.7.4Concept predicateY 
18.7.5Concept relationY 
18.7.6Concept equivalence_relationY 
18.7.7Concept strict_weak_orderY 
+ 19 + + Diagnostics library +
19.1General  
19.2Exception classesY 
19.3AssertionsY 
19.4Error numbersY 
19.5System error support  
19.5.1General  
19.5.2Header <system_error> synopsisY 
19.5.3Class error_categoryY 
19.5.4Class error_codeY 
19.5.5Class error_conditionY 
19.5.6Comparison operator functionsY 
19.5.7System error hash supportY 
19.5.8Class system_errorY 
+ 20 + + General utilities library +
20.1General  
20.2Utility components  
20.2.1Header <utility> synopsisY 
20.2.2swapY 
20.2.3exchangeY 
20.2.4Forward/move helpersY 
20.2.5Function template as_constY 
20.2.6Function template declvalY 
20.2.7Integer comparison functionsY 
20.3Compile-time integer sequencesY 
20.4PairsY 
20.5TuplesY 
20.6Optional objectsY 
20.7VariantsY 
20.8Storage for any typeY 
20.9BitsetsY 
20.10MemoryY 
20.11Smart pointers  
20.11.1Class template unique_ptrY 
20.11.2Class bad_weak_ptrY 
20.11.3Class template shared_ptrYUses code from boost::shared_ptr.
20.11.4Class template weak_ptrY 
20.11.5Class template owner_lessY 
20.11.6Class template enable_shared_from_thisY 
20.11.7Smart pointer hash supportY 
20.12Memory resources  
20.12.1Header <memory_resource> synopsisY 
20.12.2Class memory_resourceY 
20.12.3Class template polymorphic_allocatorY 
20.12.4Access to program-wide memory_resource objectsY 
20.12.5Pool resource classesY 
20.12.6Class monotonic_buffer_resourceY 
20.13Class template scoped_allocator_adaptorY 
20.14Function objects  
20.14.1General  
20.14.2Header <functional> synopsisY 
20.14.3Definitions  
20.14.4Requirements  
20.14.5Function template invokeY 
20.14.6Class template reference_wrapperY 
20.14.7Arithmetic operationsY 
20.14.8ComparisonsY 
20.14.9Concept-constrained comparisonsY 
20.14.10Logical operationsY 
20.14.11Bitwise operationsY 
20.14.12Class identityY 
20.14.13Function template not_fnY 
20.14.14Function template bind_frontY 
20.14.15Function object bindersY 
20.14.16Function template mem_fnY 
20.14.17Polymorphic function wrappers  
20.14.17.1General  
20.14.17.2Class bad_function_callY 
20.14.17.3Class template functionY 
20.14.18SearchersY 
20.15Metaprogramming and type traits  
20.15.1General  
20.15.2RequirementsY 
20.15.3Header <type_traits> synopsisY 
20.15.4Helper classesY 
20.15.5Unary type traitsY 
20.15.6Type property queriesY 
20.15.7Relationships between typesY 
20.15.8Transformations between typesY 
20.15.9Logical operator traitsY 
20.15.10Member relationshipsY 
20.15.11Constant evaluation contextY 
20.16Compile-time rational arithmeticY 
20.17Class type_indexY 
20.18Execution policiesY 
20.19Primitive numeric conversions  
20.19.1Header <charconv> synopsisY 
20.19.2Primitive numeric output conversionY + Floating-point types up to 64-bit are formatted using + Ryu. + Types with greater precision are formatted using the C library + (sprintf and conditionally + strfromf128). + For powerpc64le-unknown-linux-gnu __sprintfieee128 + must be provided by Glibc. +
20.19.3Primitive numeric input conversionY + Floating-point types up to 64-bit are parsed using + fast_float. + Types with greater precision are parsed using the C library + (strtold). + For powerpc64le-unknown-linux-gnu __strtoieee128 + must be provided by Glibc. +
20.20Formatting  
20.20.1Header <format> synopsisY 
20.20.2Format string  
20.20.2.1 In generalY 
20.20.2.2Standard format specifiersY 
20.20.3Error reportingY 
20.20.4Formatting functionsY 
20.20.5FormatterY 
20.20.5.1Formatter requirements  
20.20.5.2Formatter specializationsY 
20.20.5.3Class template basic_format_parse_contextY 
20.20.5.4Class template basic_format_contextY 
20.20.6Arguments  
20.20.6.1Class template basic_format_argY 
20.20.6.2Class template format-arg-storeY 
20.20.6.3Class template basic_format_argsY 
20.20.7Class format_errorY 
+ 21 + + Strings library +
21.1General  
21.2Character traitsY 
21.3String classesY 
21.4String view classesY 
21.5Null-terminated sequence utilitiesPartialC library dependency.
+ 22 + + Containers library +
22.1General  
22.2Container requirementsY 
22.3Sequence containersY 
22.4Associative containersY 
22.5Unordered associative containersY 
22.6Container adaptorsY 
22.7Views  
22.7.1General  
22.7.2Header <span> synopsisY 
22.7.3Class template spanY 
+ 23 + + Iterators library +
23.1General  
23.2Header <iterator> synopsisY 
23.3Iterator requirements  
23.3.1In generalY 
23.3.2Associated typesY 
23.3.3Customization pointsY 
23.3.4Iterator conceptsY 
23.3.5C++17 iterator requirementsY 
23.3.6Indirect callable requirementsY 
23.3.7Common algorithm requirementsY 
23.4Iterator primitives  
23.4.1General  
23.4.2Standard iterator tagsY 
23.4.3Iterator operationsY 
23.4.4Range iterator operationsY 
23.5Iterator adaptors  
23.5.1Reverse iteratorsY 
23.5.2Insert iteratorsY 
23.5.3Move iterators and sentinelsY 
23.5.4Common iteratorsY 
23.5.5Default sentinelY 
23.5.6Counted iteratorsY 
23.5.7 Unreachable sentinelY 
23.6 Stream iteratorsY 
23.6.1General  
23.6.2 Class template istream_iteratorY 
23.6.3Class template ostream_iteratorY 
23.6.4Class template istreambuf_iteratorY 
23.6.5Class template ostreambuf_iteratorY 
23.7Range accessY 
+ 24 + + Ranges library +
24.1General  
24.2Header <ranges> synopsisY 
24.3Range accessY 
24.4Range requirements  
24.4.1General  
24.4.2RangesY 
24.4.3Sized rangesY 
24.4.4ViewsY 
24.4.5Other range refinementsY 
24.5Range utilities  
24.5.1General  
24.5.2Helper conceptsY 
24.5.3View interfaceY 
24.5.4Sub-rangesY 
24.5.5Dangling iterator handlingY 
24.6Range factories  
24.6.1General  
24.6.2Empty viewY 
24.6.3Single viewY 
24.6.4Iota viewY 
24.6.5Istream viewY 
24.7Range adaptors  
24.7.1General  
24.7.2Range adaptor objectsY 
24.7.3Semiregular wrapperY 
24.7.4All viewY 
24.7.5Filter viewY 
24.7.6Transform viewY 
24.7.7Take viewY 
24.7.8Take while viewY 
24.7.9Drop viewY 
24.7.10Drop while viewY 
24.7.11Join viewY 
24.7.12Split viewY 
24.7.13Counted viewY 
24.7.14Common viewY 
24.7.15Reverse viewY 
24.7.16Elements viewY 
+ 25 + + Algorithms library +
25.1General  
25.2Algorithms requirementsY 
25.3Parallel algorithms Using PSTL
25.4Header <algorithm> synopsisY 
25.5Algorithm result typesY 
25.6Non-modifying sequence operations  
25.6.1All ofY 
25.6.2Any ofY 
25.6.3None ofY 
25.6.4For eachY 
25.6.5FindY 
25.6.6Find endY 
25.6.7Find firstY 
25.6.8Adjacent findY 
25.6.9CountY 
25.6.10MismatchY 
25.6.11EqualY 
25.6.12Is permutationY 
25.6.13SearchY 
25.7Mutating sequence operations  
25.7.1CopyY 
25.7.2MoveY 
25.7.3SwapY 
25.7.4TransformY 
25.7.5ReplaceY 
25.7.6FillY 
25.7.7GenerateY 
25.7.8RemoveY 
25.7.9UniqueY 
25.7.10ReverseY 
25.7.11RotateY 
25.7.12SampleY 
25.7.13ShuffleY 
25.7.14ShiftY 
25.8Sorting and related operations  
25.8.1GeneralY 
25.8.2SortingY 
25.8.3Nth elementY 
25.8.4Binary searchY 
25.8.5PartitionsY 
25.8.6MergeY 
25.8.7Set operations on sorted structuresY 
25.8.8Heap operationsY 
25.8.9Minimum and maximumY 
25.8.10Bounded valueY 
25.8.11Lexicographical comparisonY 
25.8.12Three-way comparison algorithmsY 
25.8.13Permutation generatorsY 
25.9Header <numeric> synopsisY 
25.10Generalized numeric operations  
25.10.1General  
25.10.2Definitions  
25.10.3AccumulateY 
25.10.4ReduceY 
25.10.5Inner productY 
25.10.6Transform reduceY 
25.10.7Partial sumY 
25.10.8Exclusive scanY 
25.10.9Inclusive scanY 
25.10.10Transform exclusive scanY 
25.10.11Transform inclusive scanY 
25.10.12Adjacent differenceY 
25.10.13IotaY 
25.10.14Greatest common divisorY 
25.10.15Least common multipleY 
25.10.16MidpointY 
25.11Specialized <memory> algorithms  
25.11.1General  
25.11.2Special memory conceptsY 
25.11.3uninitialized_default_constructY 
25.11.4uninitialized_value_constructY 
25.11.5uninitialized_copyY 
25.11.6uninitialized_moveY 
25.11.7uninitialized_fillY 
25.11.8construct_atY 
25.11.9destroyY 
25.12C library algorithmsY 
+ 26 + + Numerics library +
26.1General  
26.2Numeric type requirementsY 
26.3The floating-point environmentY 
26.4Complex numbersY 
26.5Bit manipulation  
26.5.1General  
26.5.2Header <bit> synopsisY 
26.5.3Function template bit_castY 
26.5.4Integral powers of 2Y 
26.5.5RotatingY 
26.5.6CountingY 
26.5.7EndianY 
26.6Random number generationY 
26.7Numeric arraysY 
26.8Mathematical functions for floating-point typesY 
26.9Numbers  
26.9.1Header <numbers> synopsisY 
26.9.2Mathematical constantsY 
+ 27 + + Time library +
27.1General  
27.2Header <chrono> synopsisY 
27.3Cpp17Clock requirementsY 
27.4Time-related traits  
27.4.1treat_as_floating_pointY 
27.4.2duration_valuesY 
27.4.3Specializations of common_typeY 
27.4.4Class template is_clockY 
27.5Class template duration  
27.5.1GeneralY 
27.5.2ConstructorsY 
27.5.3ObserverY 
27.5.4ArithmeticY 
27.5.5Special valuesY 
27.5.6Non-member arithmeticY 
27.5.7ComparisonsY 
27.5.8ConversionsY 
27.5.9Suffixes for duration literalsY 
27.5.10AlgorithmsY 
27.5.11I/OY 
27.6Class template time_pointY 
27.7Clocks  
27.7.1GeneralY 
27.7.2Class system_clockY 
27.7.3Class utc_clockY 
27.7.4Class tai_clockY 
27.7.5Class gps_clockY 
27.7.6Type file_clockY 
27.7.7Class steady_clockY 
27.7.8Class high_resolution_clockY 
27.7.9Local timeY 
27.7.10time_point conversionsY 
27.8The civil calendar  
27.8.1In general  
27.8.2Class last_specY 
27.8.3Class dayY 
27.8.4Class monthY 
27.8.5Class yearY 
27.8.6Class weekdayY 
27.8.7Class weekday_indexedY 
27.8.8Class weekday_lastY 
27.8.9Class month_dayY 
27.8.10Class month_day_lastY 
27.8.11Class month_weekdayY 
27.8.12Class month_weekday_lastY 
27.8.13Class year_monthY 
27.8.14Class year_month_dayY 
27.8.15Class year_month_day_lastY 
27.8.16Class year_month_weekdayY 
27.8.17Class year_month_weekday_lastY 
27.9Class template hh_mm_ssY 
27.1012/24 hours functionsY 
27.11Time zones  
27.11.1In general  
27.11.2Time zone databaseY 
27.11.3Exception classesY 
27.11.4Information classesY 
27.11.5Class time_zoneY 
27.11.6Class template zoned_traitsY 
27.11.7Class template zoned_timeY 
27.11.8Class leap_secondY 
27.11.9Class time_zone_linkY 
27.12FormattingY 
27.13ParsingY 
27.14Header <ctime> synopsisY 
+ 28 + + Localization library +
28.1General  
28.2Header <locale> synopsisY 
28.3Locales  
28.3.1Class localeY 
28.3.2locale globalsY 
28.3.3Convenience interfaces  
28.3.3.1Character classificationY 
28.3.3.2Character conversionsY 
28.4Standard locale categories  
28.4.1General  
28.4.2The ctype categoryY 
28.4.3The numeric categoryY 
28.4.4The numeric punctuation facetY 
28.4.5The collate categoryY 
28.4.6The time categoryY 
28.4.7The monetary categoryY 
28.4.8The message retrieval categoryY 
28.5C library localesY 
+ 29 + + Input/output library +
29.1 GeneralY 
29.2Iostreams requirements  
29.2.1Imbue limitationsY 
29.2.2Positioning type limitationsY 
29.2.3Thread safetyPartial 
29.3Forward declarationsY 
29.4Standard iostream objectsY 
29.5Iostreams base classesY 
29.6Stream buffersY 
29.7Formatting and manipulatorsY 
29.8String-based streamsY 
29.9File-based streamsY 
29.10Synchronized output streams  
29.10.1Header <syncstream> synopsisY 
29.10.2Class template basic_syncbufY 
29.10.3Class template basic_osyncstreamY 
29.11File systems  
29.11.1General  
29.11.2ConformanceY 
29.11.3RequirementsY 
29.11.4Header <filesystem> synopsisY 
29.11.5Error reportingY 
29.11.6Class pathY 
29.11.7Class filesystem_errorY 
29.11.8Enumerations  
29.11.8.1Enum path::formatY 
29.11.8.2Enum class file_typeY 
29.11.8.3Enum class copy_optionsY 
29.11.8.4Enum class permsY 
29.11.8.5Enum class perm_optionsY 
29.11.8.6Enum class directory_optionsY 
29.11.9Class file_statusY 
29.11.10Class directory_entryY 
29.11.11Class directory_iteratorY 
29.11.12Class recursive_directory_iteratorY 
29.11.13Filesystem operation functionsY 
29.12C library files  
29.12.1Header <cstdio> synopsisY 
29.12.2Header <cinttypes> synopsisY 
+ 30 + + Regular expressions library +
30.1GeneralY 
30.2RequirementsY 
30.3Header <regex> synopsisY 
30.4Namespace std::regex_constantsY 
30.5Class regex_errorY 
30.6Class template regex_traitsPartialtransform_primary is not correctly implemented
30.7Class template basic_regexY 
30.8Class template sub_matchY 
30.9Class template match_resultsY 
30.10Regular expression algorithmsY 
30.11Regular expression iteratorsY 
30.12Modified ECMAScript regular expression grammarY 
+ 31 + + Atomics library +
31.1GeneralY 
31.2Header <atomic> synopsisY 
31.3Type aliasesY 
31.4Order and consistencyY 
31.5Lock-free propertyY 
31.6Waiting and notifyingPartialWaiting and notifying is not supported for volatile objects.
31.7Class template atomic_ref  
31.7.1GeneralY 
31.7.2OperationsPartial + volatile-qualified overloads for wait, + notify_one, and notify_all are not provided. +
31.7.3Specializations for integral typesY 
31.7.4Specializations for floating-point typesY 
31.7.5Partial specialization for pointersY 
31.8Class template atomic  
31.8.1GeneralY 
31.8.2Operations on atomic typesPartialWaiting and notifying is not supported for volatile objects.
31.8.3Specializations for integersY 
31.8.4Specializations for floating-point typesY 
31.8.5Partial specialization for pointersY 
31.8.6Member operators common to integers and pointers to objectsY 
31.8.7Partial specializations for smart pointers  
31.8.7.1GeneralY 
31.8.7.2Partial specialization for shared_ptrY 
31.8.7.3Partial specialization for weak_ptrY 
31.9Non-member functionsY 
31.10Flag type and operationsY 
31.11FencesY 
+ 32 + + Threads library +
32.1GeneralY 
32.2RequirementsY 
32.3Stop tokens  
32.3.1IntroductionY 
32.3.2Header <stop_token> synopsisY 
32.3.3Class stop_tokenY 
32.3.4Class stop_sourceY 
32.3.5Class template stop_callbackY 
32.4Threads  
32.4.1General  
32.4.2Header <thread> synopsisY 
32.4.3Class threadPartialthread::id comparisons not well-defined
32.4.4Class jthreadY 
32.4.5Namespace this_threadY 
32.5Mutual exclusion  
32.5.1General  
32.5.2Header <mutex> synopsis  
32.5.3Header <shared_mutex> synopsis  
32.5.4Mutex requirements  
32.5.4.1In general  
32.5.4.2Mutex typesY 
32.5.4.3Timed mutex typesY 
32.5.4.4Shared mutex typesY 
32.5.4.5Shared timed mutex typesY 
32.5.5LocksY 
32.5.6Generic locking algorithmsY 
32.5.7Call once  
32.5.7.1Struct once_flagY 
32.5.7.2Function call_oncePartialException support is broken. + See PR + 66146. +
32.6Condition variablesY 
32.7SemaphoreY 
32.7.1General  
32.7.2Header <semaphore> synopsisY 
32.7.3Class template counting_semaphoreY 
32.8Coordination types  
32.8.1General  
32.8.2Latches  
32.8.2.1General  
32.8.2.2Header <latch> synopsisY 
32.8.2.3Class latchY 
32.8.3Barriers  
32.8.3.1General  
32.8.3.2Header <barrier> synopsisY 
32.8.3.3Class template barrierY 
32.9FuturesY 
+ Appendix D + + Compatibility features +
D.10C headers  
D.10.1GeneralY 
D.10.2Header <complex.h> synopsisY 
D.10.3Header <iso646.h> synopsisY 
D.10.4Header <stdalign.h> synopsisY 
D.10.5Header <stdbool.h> synopsisY 
D.10.6Header <tgmath.h> synopsisY 
D.10.7Other C headersY 
D.12Relational operatorsY 
D.13char* streamsY 
D.13.1Header <strstream> synopsisY 
D.13.2Class strstreambufY 
D.13.3Class istrstreamY 
D.13.4Class ostrstreamY 
D.13.5Class strstreamY 
D.14Deprecated type traitsY 
D.15TupleY 
D.16VariantY 
D.17Deprecated iterator class templateY 
D.18Deprecated move_iterator accessY 
D.19Deprecated shared_ptr atomic accessY 
D.20Deprecated basic_string capacityY 
D.21Deprecated standard code conversion facets  
D.21.1GeneralY 
D.21.2Header <codecvt> synopsisY 
D.21.3RequirementsY 
D.22Deprecated convenience conversion interfaces  
D.22.1GeneralY 
D.22.2Class template wstring_convertY 
D.22.3Class template wbuffer_convertY 
D.23Deprecated locale category facetsY 
D.24Deprecated filesystem path factory functionsY 
D.25Deprecated atomic operations  
D.25.1GeneralY 
D.25.2Volatile accessY 
D.25.3Non-member functionsY 
D.25.4Operations on atomic typesY 
D.25.5Flag type and operationsY 

Implementation Specific Behavior

For behaviour which is also specified by previous standards, see C++ 1998/2003 Implementation Specific Behavior, C++ 2011 Implementation Specific Behavior, and @@ -1840,7 +1934,7 @@ SD-6: Feature-testing recommendations for C++ (where applicable) or any notes about the implementation. -

Table 1.10. C++ 2023 Library Features

Library FeatureProposalStatusSD-6 Feature Test / Notes
+

Table 1.11. C++ 2023 Library Features

Library FeatureProposalStatusSD-6 Feature Test / Notes
Ranges and Views
Range constructor for std::string_view @@ -2320,7 +2414,7 @@

This page describes the TR1 support in mainline GCC, not in any particular release. -

Table 1.11. C++ TR1 Implementation Status

SectionDescriptionStatusComments
2General Utilities
2.1Reference wrappers  
2.1.1Additions to header <functional> synopsisY 
2.1.2Class template reference_wrapper  
2.1.2.1reference_wrapper construct/copy/destroyY 
2.1.2.2reference_wrapper assignmentY 
2.1.2.3reference_wrapper accessY 
2.1.2.4reference_wrapper invocationY 
2.1.2.5reference_wrapper helper functionsY 
2.2Smart pointers  
2.2.1Additions to header <memory> synopsisY 
2.2.2Class bad_weak_ptrY 
2.2.3Class template shared_ptr  +

Table 1.12. C++ TR1 Implementation Status

SectionDescriptionStatusComments
2General Utilities
2.1Reference wrappers  
2.1.1Additions to header <functional> synopsisY 
2.1.2Class template reference_wrapper  
2.1.2.1reference_wrapper construct/copy/destroyY 
2.1.2.2reference_wrapper assignmentY 
2.1.2.3reference_wrapper accessY 
2.1.2.4reference_wrapper invocationY 
2.1.2.5reference_wrapper helper functionsY 
2.2Smart pointers  
2.2.1Additions to header <memory> synopsisY 
2.2.2Class bad_weak_ptrY 
2.2.3Class template shared_ptr 

Uses code from boost::shared_ptr. @@ -2341,7 +2435,7 @@

This page describes the TR 24733 support in mainline GCC, not in any particular release. -

Table 1.12. C++ TR 24733 Implementation Status

SectionDescriptionStatusComments
+

Table 1.13. C++ TR 24733 Implementation Status

SectionDescriptionStatusComments
0 Introduction @@ -2381,7 +2475,7 @@ hypergeometric functions and confluent hypergeometric functions from TR1 are also provided, defined in namespace __gnu_cxx. -

Table 1.13. C++ Special Functions Implementation Status

SectionDescriptionStatusComments
7Macro namesPartialNo diagnostic for inconsistent definitions of +

Table 1.14. C++ Special Functions Implementation Status

SectionDescriptionStatusComments
7Macro namesPartialNo diagnostic for inconsistent definitions of __STDCPP_WANT_MATH_SPEC_FUNCS__
8Mathematical special functionsY 
8.1Additions to header <cmath> synopsisY 
8.1.1associated Laguerre polynomialsY 
8.1.2associated Legendre functionsY 
8.1.3beta functionY 
8.1.4(complete) elliptic integral of the first kindY 
8.1.5(complete) elliptic integral of the second kindY 
8.1.6(complete) elliptic integral of the third kindY 
8.1.7regular modified cylindrical Bessel functionsY 
8.1.8cylindrical Bessel functions (of the first kind)Y 
8.1.9irregular modified cylindrical Bessel functionsY 
8.1.10cylindrical Neumann functionsY 
8.1.11(incomplete) elliptic integral of the first kindY 
8.1.12(incomplete) elliptic integral of the second kindY 
8.1.13(incomplete) elliptic integral of the third kindY 
8.1.14exponential integralY 
8.1.15Hermite polynomialsY 
8.1.16Laguerre polynomialsY 
8.1.17Legendre polynomialsY 
8.1.18Riemann zeta functionY 
8.1.19spherical Bessel functions (of the first kind)Y 
8.1.20spherical associated Legendre functionsY 
8.1.21spherical Neumann functionsY 
8.2Additions to header <math.h>Y 
8.3The header <ctgmath>PartialConflicts with C++ 2011 requirements.
8.4The header <tgmath.h>NConflicts with C++ 2011 requirements.

Implementation Specific Behavior

For behaviour which is specified by the 2011 standard, see C++ 2011 Implementation Specific Behavior. This section documents behaviour which diff --git a/libstdc++-v3/doc/xml/manual/status_cxx2020.xml b/libstdc++-v3/doc/xml/manual/status_cxx2020.xml index 9cee44fd438c..ab44d726fb48 100644 --- a/libstdc++-v3/doc/xml/manual/status_cxx2020.xml +++ b/libstdc++-v3/doc/xml/manual/status_cxx2020.xml @@ -1453,6 +1453,4421 @@ time zones and UTC are supported since 13.1, and chrono::parse is supported since 14.1. + +The following status table is based on the table of contents of +ISO/IEC 14882:2020. +Some subclauses are not shown in the table where the content is unchanged +since C++17 and the implementation is complete. + + + +C++ 2020 Implementation Status + + + + + + + + + Section + Description + Status + Comments + + + + + + + + 17 + + + Language support library + + + + + 17.1 + General + + + + + + 17.2 + Common definitions + + + + + + 17.2.1 + Header <cstddef> synopsis + Y + + + + + 17.2.2 + Header <cstdlib> synopsis + Y + + + + + 17.2.3 + Null pointers + Y + + + + + 17.2.4 + Sizes, alignments, and offsets + Y + + + + + 17.2.5 + byte type operations + Y + + + + + 17.3 + Implementation properties + + + + + + 17.3.1 + General + + + + + + 17.3.2 + Header <version> synopsis + Y + + + + + 17.3.3 + Header <limits> synopsis + Y + + + + + 17.3.4 + Floating-point type properties + + + + + + + 17.3.4.1 + Type float_round_style + N + + + + + + 17.3.4.2 + Type float_denorm_style + N + + + + + 17.3.5 + Class template numeric_limits + Y + + + + + 17.3.6 + Header <climits> synopsis + Y + + + + + 17.3.7 + Header <cfloat> synopsis + Y + + + + + 17.4 + Integer types + + + + + + 17.4.1 + General + + + + + + 17.4.2 + Header <cstdint> synopsis + Y + + + + + + 17.5 + Startup and termination + Partial + C library dependency for quick_exit, at_quick_exit + + + + 17.6 + Dynamic memory management + Y + + + + 17.7 + Type identification + Y + + + + + 17.8 + Source location + + + + + + 17.8.1 + Header <source_location> synopsis + Y + + + + + 17.8.2 + Class source_location + Y + + + + + 17.9 + Exception handling + Y + + + + + 17.10 + Initializer lists + Y + + + + + 17.11 + Comparisons + + + + + + 17.11.1 + Header <compare> synopsis + Y + + + + + 17.11.2 + Comparison category types + Y + + + + + 17.11.3 + Class template common_comparison_category + Y + + + + + 17.11.4 + Concept three_way_comparable + Y + + + + + 17.11.5 + Result of three-way comparison + Y + + + + + 17.11.6 + Comparison algorithms + Y + + + + + 17.12 + Coroutines + + + + + + 17.12.1 + General + + + + + + 17.12.2 + Header <coroutine> synopsis + Y + + + + + 17.12.3 + Coroutine traits + Y + + + + + 17.12.4 + Class template coroutine_handle + Y + + + + + 17.12.5 + No-op coroutines + Y + + + + + 17.13 + Other runtime support + Y + + + + + + 18 + + + Concepts library + + + + + 18.1 + General + + + + + + 18.2 + Equality preservation + + + + + + 18.3 + Header <concepts> synopsis + Y + + + + + 18.4 + Language-related concepts + + + + + + 18.4.1 + General + + + + + + 18.4.2 + Concept same_as + Y + + + + + 18.4.3 + Concept derived_from + Y + + + + + 18.4.4 + Concept convertible_to + Y + + + + + 18.4.5 + Concept common_reference_with + Y + + + + + 18.4.6 + Concept common_with + Y + + + + + 18.4.7 + Arithmetic concepts + + + + + + 18.4.8 + Concept assignable_from + Y + + + + + 18.4.9 + Concept swappable + Y + + + + + 18.4.10 + Concept destructible + Y + + + + + 18.4.11 + Concept constructible_from + Y + + + + + 18.4.12 + Concept default_initializable + Y + + + + + 18.4.13 + Concept move_constructible + Y + + + + + 18.4.14 + Concept copy_constructible + Y + + + + + 18.5 + Comparison concepts + + + + + + 18.5.1 + General + + + + + + 18.5.2 + Boolean testability + Y + + + + + 18.5.3 + Concept equality_comparable + Y + + + + + 18.5.4 + Concept totally_ordered + Y + + + + + 18.6 + Object concepts + Y + + + + + 18.7 + Callable concepts + + + + + + 18.7.1 + General + + + + + + 18.7.2 + Concept invocable + Y + + + + + 18.7.3 + Concept regular_invocable + Y + + + + + 18.7.4 + Concept predicate + Y + + + + + 18.7.5 + Concept relation + Y + + + + + 18.7.6 + Concept equivalence_relation + Y + + + + + 18.7.7 + Concept strict_weak_order + Y + + + + + + 19 + + + Diagnostics library + + + + + 19.1 + General + + + + + + 19.2 + Exception classes + Y + + + + + 19.3 + Assertions + Y + + + + + 19.4 + Error numbers + Y + + + + + 19.5 + System error support + + + + + + 19.5.1 + General + + + + + + 19.5.2 + Header <system_error> synopsis + Y + + + + + 19.5.3 + Class error_category + Y + + + + + 19.5.4 + Class error_code + Y + + + + + 19.5.5 + Class error_condition + Y + + + + + 19.5.6 + Comparison operator functions + Y + + + + + 19.5.7 + System error hash support + Y + + + + + 19.5.8 + Class system_error + Y + + + + + + 20 + + + General utilities library + + + + + 20.1 + General + + + + + + 20.2 + Utility components + + + + + + 20.2.1 + Header <utility> synopsis + Y + + + + + 20.2.2 + swap + Y + + + + + 20.2.3 + exchange + Y + + + + + 20.2.4 + Forward/move helpers + Y + + + + + 20.2.5 + Function template as_const + Y + + + + + 20.2.6 + Function template declval + Y + + + + + 20.2.7 + Integer comparison functions + Y + + + + + 20.3 + Compile-time integer sequences + Y + + + + + 20.4 + Pairs + Y + + + + + 20.5 + Tuples + Y + + + + + 20.6 + Optional objects + Y + + + + + 20.7 + Variants + Y + + + + + 20.8 + Storage for any type + Y + + + + + 20.9 + Bitsets + Y + + + + + 20.10 + Memory + Y + + + + + 20.11 + Smart pointers + + + + + + 20.11.1 + Class template unique_ptr + Y + + + + + 20.11.2 + Class bad_weak_ptr + Y + + + + + 20.11.3 + Class template shared_ptr + Y + Uses code from boost::shared_ptr. + + + + 20.11.4 + Class template weak_ptr + Y + + + + + 20.11.5 + Class template owner_less + Y + + + + + 20.11.6 + Class template enable_shared_from_this + Y + + + + + 20.11.7 + Smart pointer hash support + Y + + + + + 20.12 + Memory resources + + + + + + 20.12.1 + Header <memory_resource> synopsis + Y + + + + + 20.12.2 + Class memory_resource + Y + + + + + 20.12.3 + Class template polymorphic_allocator + Y + + + + + 20.12.4 + Access to program-wide memory_resource objects + Y + + + + + 20.12.5 + Pool resource classes + Y + + + + + 20.12.6 + Class monotonic_buffer_resource + Y + + + + + 20.13 + Class template scoped_allocator_adaptor + Y + + + + + 20.14 + Function objects + + + + + + 20.14.1 + General + + + + + + 20.14.2 + Header <functional> synopsis + Y + + + + + 20.14.3 + Definitions + + + + + + 20.14.4 + Requirements + + + + + + 20.14.5 + Function template invoke + Y + + + + + 20.14.6 + Class template reference_wrapper + Y + + + + + 20.14.7 + Arithmetic operations + Y + + + + + 20.14.8 + Comparisons + Y + + + + + 20.14.9 + Concept-constrained comparisons + Y + + + + + 20.14.10 + Logical operations + Y + + + + + 20.14.11 + Bitwise operations + Y + + + + + 20.14.12 + Class identity + Y + + + + + 20.14.13 + Function template not_fn + Y + + + + + 20.14.14 + Function template bind_front + Y + + + + + 20.14.15 + Function object binders + Y + + + + + 20.14.16 + Function template mem_fn + Y + + + + + 20.14.17 + Polymorphic function wrappers + + + + + + 20.14.17.1 + General + + + + + + 20.14.17.2 + Class bad_function_call + Y + + + + + 20.14.17.3 + Class template function + Y + + + + + 20.14.18 + Searchers + Y + + + + + 20.15 + Metaprogramming and type traits + + + + + + 20.15.1 + General + + + + + + 20.15.2 + Requirements + Y + + + + + 20.15.3 + Header <type_traits> synopsis + Y + + + + + 20.15.4 + Helper classes + Y + + + + + 20.15.5 + Unary type traits + Y + + + + + 20.15.6 + Type property queries + Y + + + + + 20.15.7 + Relationships between types + Y + + + + + 20.15.8 + Transformations between types + Y + + + + + 20.15.9 + Logical operator traits + Y + + + + + 20.15.10 + Member relationships + Y + + + + + 20.15.11 + Constant evaluation context + Y + + + + + 20.16 + Compile-time rational arithmetic + Y + + + + + 20.17 + Class type_index + Y + + + + + 20.18 + Execution policies + Y + + + + + 20.19 + Primitive numeric conversions + + + + + + 20.19.1 + Header <charconv> synopsis + Y + + + + + 20.19.2 + Primitive numeric output conversion + Y + + Floating-point types up to 64-bit are formatted using + Ryu. + Types with greater precision are formatted using the C library + (sprintf and conditionally + strfromf128). + For powerpc64le-unknown-linux-gnu __sprintfieee128 + must be provided by Glibc. + + + + + 20.19.3 + Primitive numeric input conversion + Y + + Floating-point types up to 64-bit are parsed using + fast_float. + Types with greater precision are parsed using the C library + (strtold). + For powerpc64le-unknown-linux-gnu __strtoieee128 + must be provided by Glibc. + + + + + 20.20 + Formatting + + + + + + 20.20.1 + Header <format> synopsis + Y + + + + + 20.20.2 + Format string + + + + + + 20.20.2.1 + In general + Y + + + + + 20.20.2.2 + Standard format specifiers + Y + + + + + 20.20.3 + Error reporting + Y + + + + + 20.20.4 + Formatting functions + Y + + + + + 20.20.5 + Formatter + Y + + + + + 20.20.5.1 + Formatter requirements + + + + + + 20.20.5.2 + Formatter specializations + Y + + + + + 20.20.5.3 + Class template basic_format_parse_context + Y + + + + + 20.20.5.4 + Class template basic_format_context + Y + + + + + 20.20.6 + Arguments + + + + + + 20.20.6.1 + Class template basic_format_arg + Y + + + + + 20.20.6.2 + Class template format-arg-store + Y + + + + + 20.20.6.3 + Class template basic_format_args + Y + + + + + 20.20.7 + Class format_error + Y + + + + + + 21 + + + Strings library + + + + + 21.1 + General + + + + + + 21.2 + Character traits + Y + + + + + 21.3 + String classes + Y + + + + + 21.4 + String view classes + Y + + + + + + 21.5 + Null-terminated sequence utilities + Partial + C library dependency. + + + + + 22 + + + Containers library + + + + + 22.1 + General + + + + + + 22.2 + Container requirements + Y + + + + + 22.3 + Sequence containers + Y + + + + + 22.4 + Associative containers + Y + + + + + 22.5 + Unordered associative containers + Y + + + + + 22.6 + Container adaptors + Y + + + + + 22.7 + Views + + + + + + 22.7.1 + General + + + + + + 22.7.2 + Header <span> synopsis + Y + + + + + 22.7.3 + Class template span + Y + + + + + + 23 + + + Iterators library + + + + + 23.1 + General + + + + + + 23.2 + Header <iterator> synopsis + Y + + + + + 23.3 + Iterator requirements + + + + + + 23.3.1 + In general + Y + + + + + 23.3.2 + Associated types + Y + + + + + 23.3.3 + Customization points + Y + + + + + 23.3.4 + Iterator concepts + Y + + + + + 23.3.5 + C++17 iterator requirements + Y + + + + + 23.3.6 + Indirect callable requirements + Y + + + + + 23.3.7 + Common algorithm requirements + Y + + + + + 23.4 + Iterator primitives + + + + + + 23.4.1 + General + + + + + + 23.4.2 + Standard iterator tags + Y + + + + + 23.4.3 + Iterator operations + Y + + + + + 23.4.4 + Range iterator operations + Y + + + + + 23.5 + Iterator adaptors + + + + + + 23.5.1 + Reverse iterators + Y + + + + + 23.5.2 + Insert iterators + Y + + + + + 23.5.3 + Move iterators and sentinels + Y + + + + + 23.5.4 + Common iterators + Y + + + + + 23.5.5 + Default sentinel + Y + + + + + 23.5.6 + Counted iterators + Y + + + + + 23.5.7 + Unreachable sentinel + Y + + + + + 23.6 + Stream iterators + Y + + + + + 23.6.1 + General + + + + + + 23.6.2 + Class template istream_iterator + Y + + + + + 23.6.3 + Class template ostream_iterator + Y + + + + + 23.6.4 + Class template istreambuf_iterator + Y + + + + + 23.6.5 + Class template ostreambuf_iterator + Y + + + + + 23.7 + Range access + Y + + + + + + 24 + + + Ranges library + + + + + 24.1 + General + + + + + + 24.2 + Header <ranges> synopsis + Y + + + + + 24.3 + Range access + Y + + + + + 24.4 + Range requirements + + + + + + 24.4.1 + General + + + + + + 24.4.2 + Ranges + Y + + + + + 24.4.3 + Sized ranges + Y + + + + + 24.4.4 + Views + Y + + + + + 24.4.5 + Other range refinements + Y + + + + + 24.5 + Range utilities + + + + + + 24.5.1 + General + + + + + + 24.5.2 + Helper concepts + Y + + + + + 24.5.3 + View interface + Y + + + + + 24.5.4 + Sub-ranges + Y + + + + + 24.5.5 + Dangling iterator handling + Y + + + + + 24.6 + Range factories + + + + + + 24.6.1 + General + + + + + + 24.6.2 + Empty view + Y + + + + + 24.6.3 + Single view + Y + + + + + 24.6.4 + Iota view + Y + + + + + 24.6.5 + Istream view + Y + + + + + 24.7 + Range adaptors + + + + + + 24.7.1 + General + + + + + + 24.7.2 + Range adaptor objects + Y + + + + + 24.7.3 + Semiregular wrapper + Y + + + + + 24.7.4 + All view + Y + + + + + 24.7.5 + Filter view + Y + + + + + 24.7.6 + Transform view + Y + + + + + 24.7.7 + Take view + Y + + + + + 24.7.8 + Take while view + Y + + + + + 24.7.9 + Drop view + Y + + + + + 24.7.10 + Drop while view + Y + + + + + 24.7.11 + Join view + Y + + + + + 24.7.12 + Split view + Y + + + + + 24.7.13 + Counted view + Y + + + + + 24.7.14 + Common view + Y + + + + + 24.7.15 + Reverse view + Y + + + + + 24.7.16 + Elements view + Y + + + + + + 25 + + + Algorithms library + + + + + 25.1 + General + + + + + + 25.2 + Algorithms requirements + Y + + + + + 25.3 + Parallel algorithms + + Using PSTL + + + + 25.4 + Header <algorithm> synopsis + Y + + + + + 25.5 + Algorithm result types + Y + + + + + 25.6 + Non-modifying sequence operations + + + + + + 25.6.1 + All of + Y + + + + + 25.6.2 + Any of + Y + + + + + 25.6.3 + None of + Y + + + + + 25.6.4 + For each + Y + + + + + 25.6.5 + Find + Y + + + + + 25.6.6 + Find end + Y + + + + + 25.6.7 + Find first + Y + + + + + 25.6.8 + Adjacent find + Y + + + + + 25.6.9 + Count + Y + + + + + 25.6.10 + Mismatch + Y + + + + + 25.6.11 + Equal + Y + + + + + 25.6.12 + Is permutation + Y + + + + + 25.6.13 + Search + Y + + + + + 25.7 + Mutating sequence operations + + + + + + 25.7.1 + Copy + Y + + + + + 25.7.2 + Move + Y + + + + + 25.7.3 + Swap + Y + + + + + 25.7.4 + Transform + Y + + + + + 25.7.5 + Replace + Y + + + + + 25.7.6 + Fill + Y + + + + + 25.7.7 + Generate + Y + + + + + 25.7.8 + Remove + Y + + + + + 25.7.9 + Unique + Y + + + + + 25.7.10 + Reverse + Y + + + + + 25.7.11 + Rotate + Y + + + + + 25.7.12 + Sample + Y + + + + + 25.7.13 + Shuffle + Y + + + + + 25.7.14 + Shift + Y + + + + + 25.8 + Sorting and related operations + + + + + + 25.8.1 + General + Y + + + + + 25.8.2 + Sorting + Y + + + + + 25.8.3 + Nth element + Y + + + + + 25.8.4 + Binary search + Y + + + + + 25.8.5 + Partitions + Y + + + + + 25.8.6 + Merge + Y + + + + + 25.8.7 + Set operations on sorted structures + Y + + + + + 25.8.8 + Heap operations + Y + + + + + 25.8.9 + Minimum and maximum + Y + + + + + 25.8.10 + Bounded value + Y + + + + + 25.8.11 + Lexicographical comparison + Y + + + + + 25.8.12 + Three-way comparison algorithms + Y + + + + + 25.8.13 + Permutation generators + Y + + + + + 25.9 + Header <numeric> synopsis + Y + + + + + 25.10 + Generalized numeric operations + + + + + + 25.10.1 + General + + + + + + 25.10.2 + Definitions + + + + + + 25.10.3 + Accumulate + Y + + + + + 25.10.4 + Reduce + Y + + + + + 25.10.5 + Inner product + Y + + + + + 25.10.6 + Transform reduce + Y + + + + + 25.10.7 + Partial sum + Y + + + + + 25.10.8 + Exclusive scan + Y + + + + + 25.10.9 + Inclusive scan + Y + + + + + 25.10.10 + Transform exclusive scan + Y + + + + + 25.10.11 + Transform inclusive scan + Y + + + + + 25.10.12 + Adjacent difference + Y + + + + + 25.10.13 + Iota + Y + + + + + 25.10.14 + Greatest common divisor + Y + + + + + 25.10.15 + Least common multiple + Y + + + + + 25.10.16 + Midpoint + Y + + + + + 25.11 + Specialized <memory> algorithms + + + + + + 25.11.1 + General + + + + + + 25.11.2 + Special memory concepts + Y + + + + + 25.11.3 + uninitialized_default_construct + Y + + + + + 25.11.4 + uninitialized_value_construct + Y + + + + + 25.11.5 + uninitialized_copy + Y + + + + + 25.11.6 + uninitialized_move + Y + + + + + 25.11.7 + uninitialized_fill + Y + + + + + 25.11.8 + construct_at + Y + + + + + 25.11.9 + destroy + Y + + + + + 25.12 + C library algorithms + Y + + + + + + 26 + + + Numerics library + + + + + + 26.1 + General + + + + + + 26.2 + Numeric type requirements + Y + + + + + 26.3 + The floating-point environment + Y + + + + + 26.4 + Complex numbers + Y + + + + + 26.5 + Bit manipulation + + + + + + 26.5.1 + General + + + + + + 26.5.2 + Header <bit> synopsis + Y + + + + + 26.5.3 + Function template bit_cast + Y + + + + + 26.5.4 + Integral powers of 2 + Y + + + + + 26.5.5 + Rotating + Y + + + + + 26.5.6 + Counting + Y + + + + + 26.5.7 + Endian + Y + + + + + 26.6 + Random number generation + Y + + + + + 26.7 + Numeric arrays + Y + + + + + 26.8 + Mathematical functions for floating-point types + Y + + + + + 26.9 + Numbers + + + + + + 26.9.1 + Header <numbers> synopsis + Y + + + + + 26.9.2 + Mathematical constants + Y + + + + + + 27 + + + Time library + + + + + 27.1 + General + + + + + + 27.2 + Header <chrono> synopsis + Y + + + + + 27.3 + Cpp17Clock requirements + Y + + + + + 27.4 + Time-related traits + + + + + + 27.4.1 + treat_as_floating_point + Y + + + + + 27.4.2 + duration_values + Y + + + + + 27.4.3 + Specializations of common_type + Y + + + + + 27.4.4 + Class template is_clock + Y + + + + + 27.5 + Class template duration + + + + + + 27.5.1 + General + Y + + + + + 27.5.2 + Constructors + Y + + + + + 27.5.3 + Observer + Y + + + + + 27.5.4 + Arithmetic + Y + + + + + 27.5.5 + Special values + Y + + + + + 27.5.6 + Non-member arithmetic + Y + + + + + 27.5.7 + Comparisons + Y + + + + + 27.5.8 + Conversions + Y + + + + + 27.5.9 + Suffixes for duration literals + Y + + + + + 27.5.10 + Algorithms + Y + + + + + 27.5.11 + I/O + Y + + + + + 27.6 + Class template time_point + Y + + + + + 27.7 + Clocks + + + + + + 27.7.1 + General + Y + + + + + 27.7.2 + Class system_clock + Y + + + + + 27.7.3 + Class utc_clock + Y + + + + + 27.7.4 + Class tai_clock + Y + + + + + 27.7.5 + Class gps_clock + Y + + + + + 27.7.6 + Type file_clock + Y + + + + + 27.7.7 + Class steady_clock + Y + + + + + 27.7.8 + Class high_resolution_clock + Y + + + + + 27.7.9 + Local time + Y + + + + + 27.7.10 + time_point conversions + Y + + + + + 27.8 + The civil calendar + + + + + + 27.8.1 + In general + + + + + + 27.8.2 + Class last_spec + Y + + + + + 27.8.3 + Class day + Y + + + + + 27.8.4 + Class month + Y + + + + + 27.8.5 + Class year + Y + + + + + 27.8.6 + Class weekday + Y + + + + + 27.8.7 + Class weekday_indexed + Y + + + + + 27.8.8 + Class weekday_last + Y + + + + + 27.8.9 + Class month_day + Y + + + + + 27.8.10 + Class month_day_last + Y + + + + + 27.8.11 + Class month_weekday + Y + + + + + 27.8.12 + Class month_weekday_last + Y + + + + + 27.8.13 + Class year_month + Y + + + + + 27.8.14 + Class year_month_day + Y + + + + + 27.8.15 + Class year_month_day_last + Y + + + + + 27.8.16 + Class year_month_weekday + Y + + + + + 27.8.17 + Class year_month_weekday_last + Y + + + + + 27.9 + Class template hh_mm_ss + Y + + + + + 27.10 + 12/24 hours functions + Y + + + + + 27.11 + Time zones + + + + + + 27.11.1 + In general + + + + + + 27.11.2 + Time zone database + Y + + + + + 27.11.3 + Exception classes + Y + + + + + 27.11.4 + Information classes + Y + + + + + 27.11.5 + Class time_zone + Y + + + + + 27.11.6 + Class template zoned_traits + Y + + + + + 27.11.7 + Class template zoned_time + Y + + + + + 27.11.8 + Class leap_second + Y + + + + + 27.11.9 + Class time_zone_link + Y + + + + + 27.12 + Formatting + Y + + + + + 27.13 + Parsing + Y + + + + + 27.14 + Header <ctime> synopsis + Y + + + + + + 28 + + + Localization library + + + + + 28.1 + General + + + + + + 28.2 + Header <locale> synopsis + Y + + + + + 28.3 + Locales + + + + + + 28.3.1 + Class locale + Y + + + + + 28.3.2 + locale globals + Y + + + + + 28.3.3 + Convenience interfaces + + + + + + 28.3.3.1 + Character classification + Y + + + + + 28.3.3.2 + Character conversions + Y + + + + + 28.4 + Standard locale categories + + + + + + 28.4.1 + General + + + + + + 28.4.2 + The ctype category + Y + + + + + 28.4.3 + The numeric category + Y + + + + + 28.4.4 + The numeric punctuation facet + Y + + + + + 28.4.5 + The collate category + Y + + + + + 28.4.6 + The time category + Y + + + + + 28.4.7 + The monetary category + Y + + + + + 28.4.8 + The message retrieval category + Y + + + + + 28.5 + C library locales + Y + + + + + + 29 + + + Input/output library + + + + + + + 29.1 + General + Y + + + + + 29.2 + Iostreams requirements + + + + + + 29.2.1 + Imbue limitations + Y + + + + + 29.2.2 + Positioning type limitations + Y + + + + + + 29.2.3 + Thread safety + Partial + + + + + 29.3 + Forward declarations + Y + + + + + 29.4 + Standard iostream objects + Y + + + + + 29.5 + Iostreams base classes + Y + + + + + 29.6 + Stream buffers + Y + + + + + 29.7 + Formatting and manipulators + Y + + + + + 29.8 + String-based streams + Y + + + + + 29.9 + File-based streams + Y + + + + + 29.10 + Synchronized output streams + + + + + + 29.10.1 + Header <syncstream> synopsis + Y + + + + + 29.10.2 + Class template basic_syncbuf + Y + + + + + 29.10.3 + Class template basic_osyncstream + Y + + + + + 29.11 + File systems + + + + + + 29.11.1 + General + + + + + + 29.11.2 + Conformance + Y + + + + + 29.11.3 + Requirements + Y + + + + + 29.11.4 + Header <filesystem> synopsis + Y + + + + + 29.11.5 + Error reporting + Y + + + + + 29.11.6 + Class path + Y + + + + + 29.11.7 + Class filesystem_error + Y + + + + + 29.11.8 + Enumerations + + + + + + 29.11.8.1 + Enum path::format + Y + + + + + 29.11.8.2 + Enum class file_type + Y + + + + + 29.11.8.3 + Enum class copy_options + Y + + + + + 29.11.8.4 + Enum class perms + Y + + + + + 29.11.8.5 + Enum class perm_options + Y + + + + + 29.11.8.6 + Enum class directory_options + Y + + + + + 29.11.9 + Class file_status + Y + + + + + 29.11.10 + Class directory_entry + Y + + + + + 29.11.11 + Class directory_iterator + Y + + + + + 29.11.12 + Class recursive_directory_iterator + Y + + + + + 29.11.13 + Filesystem operation functions + Y + + + + + 29.12 + C library files + + + + + + 29.12.1 + Header <cstdio> synopsis + Y + + + + + 29.12.2 + Header <cinttypes> synopsis + Y + + + + + + 30 + + + Regular expressions library + + + + + + 30.1 + General + Y + + + + + 30.2 + Requirements + Y + + + + + 30.3 + Header <regex> synopsis + Y + + + + + 30.4 + Namespace std::regex_constants + Y + + + + + 30.5 + Class regex_error + Y + + + + + + 30.6 + Class template regex_traits + Partial + transform_primary is not correctly implemented + + + + 30.7 + Class template basic_regex + Y + + + + + 30.8 + Class template sub_match + Y + + + + + 30.9 + Class template match_results + Y + + + + + 30.10 + Regular expression algorithms + Y + + + + + 30.11 + Regular expression iterators + Y + + + + + 30.12 + Modified ECMAScript regular expression grammar + Y + + + + + + 31 + + + Atomics library + + + + + + 31.1 + General + Y + + + + + 31.2 + Header <atomic> synopsis + Y + + + + + 31.3 + Type aliases + Y + + + + + 31.4 + Order and consistency + Y + + + + + 31.5 + Lock-free property + Y + + + + + + 31.6 + Waiting and notifying + Partial + Waiting and notifying is not supported for volatile objects. + + + + 31.7 + Class template atomic_ref + + + + + + 31.7.1 + General + Y + + + + + + 31.7.2 + Operations + Partial + + volatile-qualified overloads for wait, + notify_one, and notify_all are not provided. + + + + + 31.7.3 + Specializations for integral types + Y + + + + + 31.7.4 + Specializations for floating-point types + Y + + + + + 31.7.5 + Partial specialization for pointers + Y + + + + + 31.8 + Class template atomic + + + + + + 31.8.1 + General + Y + + + + + + 31.8.2 + Operations on atomic types + Partial + Waiting and notifying is not supported for volatile objects. + + + + 31.8.3 + Specializations for integers + Y + + + + + 31.8.4 + Specializations for floating-point types + Y + + + + + 31.8.5 + Partial specialization for pointers + Y + + + + + 31.8.6 + Member operators common to integers and pointers to objects + Y + + + + + 31.8.7 + Partial specializations for smart pointers + + + + + + 31.8.7.1 + General + Y + + + + + 31.8.7.2 + Partial specialization for shared_ptr + Y + + + + + 31.8.7.3 + Partial specialization for weak_ptr + Y + + + + + 31.9 + Non-member functions + Y + + + + + 31.10 + Flag type and operations + Y + + + + + 31.11 + Fences + Y + + + + + + 32 + + + Threads library + + + + + 32.1 + General + Y + + + + + 32.2 + Requirements + Y + + + + + 32.3 + Stop tokens + + + + + + 32.3.1 + Introduction + Y + + + + + 32.3.2 + Header <stop_token> synopsis + Y + + + + + 32.3.3 + Class stop_token + Y + + + + + 32.3.4 + Class stop_source + Y + + + + + 32.3.5 + Class template stop_callback + Y + + + + + 32.4 + Threads + + + + + + 32.4.1 + General + + + + + + 32.4.2 + Header <thread> synopsis + Y + + + + + + 32.4.3 + Class thread + Partial + thread::id comparisons not well-defined + + + + 32.4.4 + Class jthread + Y + + + + + 32.4.5 + Namespace this_thread + Y + + + + + 32.5 + Mutual exclusion + + + + + + 32.5.1 + General + + + + + + 32.5.2 + Header <mutex> synopsis + + + + + + 32.5.3 + Header <shared_mutex> synopsis + + + + + + 32.5.4 + Mutex requirements + + + + + + 32.5.4.1 + In general + + + + + + 32.5.4.2 + Mutex types + Y + + + + + 32.5.4.3 + Timed mutex types + Y + + + + + 32.5.4.4 + Shared mutex types + Y + + + + + 32.5.4.5 + Shared timed mutex types + Y + + + + + 32.5.5 + Locks + Y + + + + + 32.5.6 + Generic locking algorithms + Y + + + + + 32.5.7 + Call once + + + + + + 32.5.7.1 + Struct once_flag + Y + + + + + + 32.5.7.2 + Function call_once + Partial + Exception support is broken. + See PR + 66146. + + + + + 32.6 + Condition variables + Y + + + + + 32.7 + Semaphore + Y + + + + + 32.7.1 + General + + + + + + 32.7.2 + Header <semaphore> synopsis + Y + + + + + 32.7.3 + Class template counting_semaphore + Y + + + + + 32.8 + Coordination types + + + + + + 32.8.1 + General + + + + + + 32.8.2 + Latches + + + + + + 32.8.2.1 + General + + + + + + 32.8.2.2 + Header <latch> synopsis + Y + + + + + 32.8.2.3 + Class latch + Y + + + + + 32.8.3 + Barriers + + + + + + 32.8.3.1 + General + + + + + + 32.8.3.2 + Header <barrier> synopsis + Y + + + + + 32.8.3.3 + Class template barrier + Y + + + + + 32.9 + Futures + Y + + + + + + Appendix D + + + Compatibility features + + + + + D.10 + C headers + + + + + + D.10.1 + General + Y + + + + + D.10.2 + Header <complex.h> synopsis + Y + + + + + D.10.3 + Header <iso646.h> synopsis + Y + + + + + D.10.4 + Header <stdalign.h> synopsis + Y + + + + + D.10.5 + Header <stdbool.h> synopsis + Y + + + + + D.10.6 + Header <tgmath.h> synopsis + Y + + + + + D.10.7 + Other C headers + Y + + + + + D.12 + Relational operators + Y + + + + + D.13 + char* streams + Y + + + + + D.13.1 + Header <strstream> synopsis + Y + + + + + D.13.2 + Class strstreambuf + Y + + + + + D.13.3 + Class istrstream + Y + + + + + D.13.4 + Class ostrstream + Y + + + + + D.13.5 + Class strstream + Y + + + + + D.14 + Deprecated type traits + Y + + + + + D.15 + Tuple + Y + + + + + D.16 + Variant + Y + + + + + D.17 + Deprecated iterator class template + Y + + + + + D.18 + Deprecated move_iterator access + Y + + + + + D.19 + Deprecated shared_ptr atomic access + Y + + + + + D.20 + Deprecated basic_string capacity + Y + + + + + D.21 + Deprecated standard code conversion facets + + + + + + D.21.1 + General + Y + + + + + D.21.2 + Header <codecvt> synopsis + Y + + + + + D.21.3 + Requirements + Y + + + + + D.22 + Deprecated convenience conversion interfaces + + + + + + D.22.1 + General + Y + + + + + D.22.2 + Class template wstring_convert + Y + + + + + D.22.3 + Class template wbuffer_convert + Y + + + + + D.23 + Deprecated locale category facets + Y + + + + + D.24 + Deprecated filesystem path factory functions + Y + + + + + D.25 + Deprecated atomic operations + + + + + + D.25.1 + General + Y + + + + + D.25.2 + Volatile access + Y + + + + + D.25.3 + Non-member functions + Y + + + + + D.25.4 + Operations on atomic types + Y + + + + + D.25.5 + Flag type and operations + Y + + + + + +
+

Implementation Specific Behavior For behaviour which is also specified by previous standards, From b989a663a5f268866a4d98cc3751ae0678fc394b Mon Sep 17 00:00:00 2001 From: Richard Earnshaw Date: Wed, 1 Oct 2025 14:48:44 +0100 Subject: [PATCH 053/216] aarch64: testsuite: fix several duplicate test names This patch fixes many, though not all, of the aarch64-specific duplicate testnames. Similarly to the arm port, most of these are a mix of duplicate scan-assembler tests that have been addressed by converting the code to use check-function-bodies, or outright bugs in the test. There are a couple of files that still contain duplicates gcc/testsuite/ChangeLog: * gcc.target/aarch64/asm-flag-1.c: Scan for lt. * gcc.target/aarch64/vector-compare-5.c: Use scan-tree-dump-times. * gcc.target/aarch64/simd/fold_to_highpart_5.c: Scan for sabal2 and uabal2. * gcc.target/aarch64/sve/mixed_size_6.c: Scan for absence of index with 2. * gcc.target/aarch64/declare-simd-2.c: Scan for _ZGVnM4ul2v_f05 and_ZGVnN8ul2v_f05 * gcc.target/aarch64/sve/arith_1.c: Remove duplicate scan-assembler patterns. * gcc.target/aarch64/sve/cond_fmaxnm_1.c: Likewise. * gcc.target/aarch64/sve/cond_fmaxnm_5.c: Likewise. * gcc.target/aarch64/sve/cond_fminnm_1.c: Likewise. * gcc.target/aarch64/sve/cond_fminnm_5.c: Likewise * gcc.target/aarch64/sve/pcs/annotate_1.c: Likewise. * gcc.target/aarch64/sve/uzp1_1.c: Likewise. * gcc.target/aarch64/sve/uzp2_1.c: Likewise. * gcc.target/aarch64/scalar_intrinsics.c: Scan for ursra. * gcc.target/aarch64/singleton_intrinsics_1.c: Likewise. * gcc.target/aarch64/sve/cond_fmaxnm_3.c: Fix register modifiers in scan patterns. * gcc.target/aarch64/sve/cond_fmaxnm_7.c: Likewise. * gcc.target/aarch64/sve/cond_fminnm_3.c: Likewise. * gcc.target/aarch64/sve/cond_fminnm_7.c: Likewise. * gcc.target/aarch64/sve/cond_fmul_3.c: Likewise. * gcc.target/aarch64/sve/cond_fsubr_3.c: Likewise. * gcc.target/aarch64/ldp_stp_18.c: Fix typos in scan patterns. * gcc.target/aarch64/sve/pcs/return_6.c: Likewise. * gcc.target/aarch64/ror_2.c: Adjust constants to ensure scan-assembler patterns are unique. * gcc.target/aarch64/sve/struct_move_3.c: Likewise. * gcc.target/aarch64/sve/struct_move_6.c: Likewise. * gcc.target/aarch64/builtin_pld_pli.c: Use check-function-bodies * gcc.target/aarch64/csinc-1.c: Likewise. * gcc.target/aarch64/csneg-1.c: Likewise. * gcc.target/aarch64/flt_mov_immediate_1.c: Likewise. * gcc.target/aarch64/scalar_shift_1.c: Likewise. --- gcc/testsuite/gcc.target/aarch64/asm-flag-1.c | 2 +- .../gcc.target/aarch64/builtin_pld_pli.c | 72 ++++++----- gcc/testsuite/gcc.target/aarch64/csinc-1.c | 43 ++++++- gcc/testsuite/gcc.target/aarch64/csneg-1.c | 44 +++++-- .../gcc.target/aarch64/declare-simd-2.c | 7 +- .../gcc.target/aarch64/flt_mov_immediate_1.c | 50 +++++--- gcc/testsuite/gcc.target/aarch64/ldp_stp_18.c | 4 +- gcc/testsuite/gcc.target/aarch64/ror_2.c | 12 +- .../gcc.target/aarch64/scalar_intrinsics.c | 2 +- .../gcc.target/aarch64/scalar_shift_1.c | 114 +++++++++++++----- .../aarch64/simd/fold_to_highpart_5.c | 4 +- .../aarch64/singleton_intrinsics_1.c | 2 +- .../gcc.target/aarch64/sve/arith_1.c | 2 +- .../gcc.target/aarch64/sve/cond_fmaxnm_1.c | 4 - .../gcc.target/aarch64/sve/cond_fmaxnm_3.c | 4 +- .../gcc.target/aarch64/sve/cond_fmaxnm_5.c | 4 - .../gcc.target/aarch64/sve/cond_fmaxnm_7.c | 4 +- .../gcc.target/aarch64/sve/cond_fminnm_1.c | 4 - .../gcc.target/aarch64/sve/cond_fminnm_3.c | 4 +- .../gcc.target/aarch64/sve/cond_fminnm_5.c | 4 - .../gcc.target/aarch64/sve/cond_fminnm_7.c | 4 +- .../gcc.target/aarch64/sve/cond_fmul_3.c | 4 +- .../gcc.target/aarch64/sve/cond_fsubr_3.c | 4 +- .../gcc.target/aarch64/sve/mixed_size_6.c | 4 +- .../gcc.target/aarch64/sve/pcs/annotate_1.c | 1 - .../gcc.target/aarch64/sve/pcs/return_6.c | 2 +- .../gcc.target/aarch64/sve/struct_move_3.c | 12 +- .../gcc.target/aarch64/sve/struct_move_6.c | 12 +- gcc/testsuite/gcc.target/aarch64/sve/uzp1_1.c | 3 - gcc/testsuite/gcc.target/aarch64/sve/uzp2_1.c | 3 - .../gcc.target/aarch64/vector-compare-5.c | 10 +- 31 files changed, 283 insertions(+), 162 deletions(-) diff --git a/gcc/testsuite/gcc.target/aarch64/asm-flag-1.c b/gcc/testsuite/gcc.target/aarch64/asm-flag-1.c index 49901e59c38e..7b07cdd77210 100644 --- a/gcc/testsuite/gcc.target/aarch64/asm-flag-1.c +++ b/gcc/testsuite/gcc.target/aarch64/asm-flag-1.c @@ -30,6 +30,6 @@ void f(char *out) /* { dg-final { scan-assembler "cset.*, hi" } } */ /* { dg-final { scan-assembler "cset.*, ls" } } */ /* { dg-final { scan-assembler "cset.*, ge" } } */ -/* { dg-final { scan-assembler "cset.*, ls" } } */ +/* { dg-final { scan-assembler "cset.*, lt" } } */ /* { dg-final { scan-assembler "cset.*, gt" } } */ /* { dg-final { scan-assembler "cset.*, le" } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/builtin_pld_pli.c b/gcc/testsuite/gcc.target/aarch64/builtin_pld_pli.c index 8cbaa97c00ca..0e60baf057b9 100644 --- a/gcc/testsuite/gcc.target/aarch64/builtin_pld_pli.c +++ b/gcc/testsuite/gcc.target/aarch64/builtin_pld_pli.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=armv8-a -O2" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ #include @@ -38,23 +39,27 @@ prefetch_for_read_write (void *a) __pldx (PST, SLC, KEEP, a); __pldx (PST, SLC, STRM, a); } - -/* { dg-final { scan-assembler "prfm\tPLDL1KEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLDL1STRM, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLDL2KEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLDL2STRM, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLDL3KEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLDL3STRM, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLDSLCKEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLDSLCSTRM, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPSTL1KEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPSTL1STRM, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPSTL2KEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPSTL2STRM, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPSTL3KEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPSTL3STRM, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPSTSLCKEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPSTSLCSTRM, \\\[x\[0-9\]+\\\]" } } */ +/* +** prefetch_for_read_write: +** ... +** prfm\tPLDL1KEEP, \[x[0-9]+\] +** prfm\tPLDL1STRM, \[x[0-9]+\] +** prfm\tPLDL2KEEP, \[x[0-9]+\] +** prfm\tPLDL2STRM, \[x[0-9]+\] +** prfm\tPLDL3KEEP, \[x[0-9]+\] +** prfm\tPLDL3STRM, \[x[0-9]+\] +** prfm\tPLDSLCKEEP, \[x[0-9]+\] +** prfm\tPLDSLCSTRM, \[x[0-9]+\] +** prfm\tPSTL1KEEP, \[x[0-9]+\] +** prfm\tPSTL1STRM, \[x[0-9]+\] +** prfm\tPSTL2KEEP, \[x[0-9]+\] +** prfm\tPSTL2STRM, \[x[0-9]+\] +** prfm\tPSTL3KEEP, \[x[0-9]+\] +** prfm\tPSTL3STRM, \[x[0-9]+\] +** prfm\tPSTSLCKEEP, \[x[0-9]+\] +** prfm\tPSTSLCSTRM, \[x[0-9]+\] +** ... +*/ void prefetch_simple (void *a) @@ -62,9 +67,13 @@ prefetch_simple (void *a) __pld (a); __pli (a); } - -/* { dg-final { scan-assembler "prfm\tPLDL1KEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLIL1KEEP, \\\[x\[0-9\]+\\\]" } } */ +/* +** prefetch_simple: +** ... +** prfm\tPLDL1KEEP, \[x[0-9]+\] +** prfm\tPLIL1KEEP, \[x[0-9]+\] +** ... +*/ void prefetch_instructions (void *a) @@ -78,13 +87,16 @@ prefetch_instructions (void *a) __plix (SLC, KEEP, a); __plix (SLC, STRM, a); } - -/* { dg-final { scan-assembler "prfm\tPLIL1KEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLIL1STRM, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLIL2KEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLIL2STRM, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLIL3KEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLIL3STRM, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLISLCKEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLISLCSTRM, \\\[x\[0-9\]+\\\]" } } */ - +/* +** prefetch_instructions: +** ... +** prfm\tPLIL1KEEP, \[x[0-9]+\] +** prfm\tPLIL1STRM, \[x[0-9]+\] +** prfm\tPLIL2KEEP, \[x[0-9]+\] +** prfm\tPLIL2STRM, \[x[0-9]+\] +** prfm\tPLIL3KEEP, \[x[0-9]+\] +** prfm\tPLIL3STRM, \[x[0-9]+\] +** prfm\tPLISLCKEEP, \[x[0-9]+\] +** prfm\tPLISLCSTRM, \[x[0-9]+\] +** ... +*/ diff --git a/gcc/testsuite/gcc.target/aarch64/csinc-1.c b/gcc/testsuite/gcc.target/aarch64/csinc-1.c index 132a0f67939b..53e1ae2c7d98 100644 --- a/gcc/testsuite/gcc.target/aarch64/csinc-1.c +++ b/gcc/testsuite/gcc.target/aarch64/csinc-1.c @@ -1,16 +1,22 @@ /* { dg-do compile } */ /* { dg-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ unsigned int test_csinc32_ifcvt(unsigned int w0, unsigned int w1, unsigned int w2) { - /* { dg-final { scan-assembler "csinc\tw\[0-9\]*.*ne" } } */ if (w0 == w1) ++ w2; return w2; } +/* +** test_csinc32_ifcvt: +** cmp\tw0, w1 +** cinc\tw0, w2, eq +** ret +*/ unsigned int test_csinc32_condasn1(unsigned int w0, @@ -19,10 +25,15 @@ test_csinc32_condasn1(unsigned int w0, unsigned int w3) { unsigned int w4; - /* { dg-final { scan-assembler "csinc\tw\[0-9\]*.*ne" } } */ w4 = (w0 == w1) ? (w3 + 1) : w2; return w4; } +/* +** test_csinc32_condasn1: +** cmp\tw0, w1 +** csinc\tw0, w2, w3, ne +** ret +*/ unsigned int test_csinc32_condasn2(unsigned int w0, @@ -31,21 +42,31 @@ test_csinc32_condasn2(unsigned int w0, unsigned int w3) { unsigned int w4; - /* { dg-final { scan-assembler "csinc\tw\[0-9\]*.*eq" } } */ w4 = (w0 == w1) ? w2 : (w3 + 1); return w4; } +/* +** test_csinc32_condasn2: +** cmp\tw0, w1 +** csinc\tw0, w2, w3, eq +** ret +*/ unsigned long long test_csinc64_ifcvt(unsigned long long x0, unsigned long long x1, unsigned long long x2) { - /* { dg-final { scan-assembler "csinc\tx\[0-9\]*.*ne" } } */ if (x0 == x1) ++ x2; return x2; } +/* +** test_csinc64_ifcvt: +** cmp\tx0, x1 +** cinc\tx0, x2, eq +** ret +*/ unsigned long long test_csinc64_condasn1(unsigned long long x0, @@ -54,10 +75,15 @@ test_csinc64_condasn1(unsigned long long x0, unsigned long long x3) { unsigned long long x4; - /* { dg-final { scan-assembler "csinc\tx\[0-9\]*.*ne" } } */ x4 = (x0 == x1) ? (x3 + 1) : x2; return x4; } +/* +** test_csinc64_condasn1: +** cmp\tx0, x1 +** csinc\tx0, x2, x3, ne +** ret +*/ unsigned long long test_csinc64_condasn2(unsigned long long x0, @@ -66,7 +92,12 @@ test_csinc64_condasn2(unsigned long long x0, unsigned long long x3) { unsigned long long x4; - /* { dg-final { scan-assembler "csinc\tx\[0-9\]*.*eq" } } */ x4 = (x0 == x1) ? x2 : (x3 + 1); return x4; } +/* +** test_csinc64_condasn2: +** cmp\tx0, x1 +** csinc\tx0, x2, x3, eq +** ret +*/ diff --git a/gcc/testsuite/gcc.target/aarch64/csneg-1.c b/gcc/testsuite/gcc.target/aarch64/csneg-1.c index 4860d64c9353..2533e7b56fe8 100644 --- a/gcc/testsuite/gcc.target/aarch64/csneg-1.c +++ b/gcc/testsuite/gcc.target/aarch64/csneg-1.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ int test_csneg32_condasn1(int w0, @@ -8,10 +9,15 @@ test_csneg32_condasn1(int w0, int w3) { int w4; - /* { dg-final { scan-assembler "csneg\tw\[0-9\]*.*ne" } } */ w4 = (w0 == w1) ? -w3 : w2; return w4; } +/* +** test_csneg32_condasn1: +** cmp\tw0, w1 +** csneg\tw0, w2, w3, ne +** ret +*/ int test_csneg32_condasn2(int w0, @@ -20,10 +26,15 @@ test_csneg32_condasn2(int w0, int w3) { int w4; - /* { dg-final { scan-assembler "csneg\tw\[0-9\]*.*eq" } } */ w4 = (w0 == w1) ? w3 : -w2; return w4; } +/* +** test_csneg32_condasn2: +** cmp\tw0, w1 +** csneg\tw0, w3, w2, eq +** ret +*/ long long test_csneg64_condasn1(long long x0, @@ -32,10 +43,15 @@ test_csneg64_condasn1(long long x0, long long x3) { long long x4; - /* { dg-final { scan-assembler "csneg\tx\[0-9\]*.*ne" } } */ x4 = (x0 == x1) ? -x3 : x2; return x4; } +/* +** test_csneg64_condasn1: +** cmp\tx0, x1 +** csneg\tx0, x2, x3, ne +** ret +*/ long long test_csneg64_condasn2(long long x0, @@ -44,27 +60,41 @@ test_csneg64_condasn2(long long x0, long long x3) { long long x4; - /* { dg-final { scan-assembler "csneg\tx\[0-9\]*.*eq" } } */ x4 = (x0 == x1) ? x3 : -x2; return x4; } +/* +** test_csneg64_condasn2: +** cmp\tx0, x1 +** csneg\tx0, x3, x2, eq +** ret +*/ int test_csneg_cmp(int x) { - /* { dg-final { scan-assembler "csneg\tw\[0-9\]" } } */ if (x > 3) x = -x; return x; } +/* +** test_csneg_cmp: +** cmp\tw0, 3 +** csneg\tw0, w0, w0, le +** ret +*/ unsigned long long test_csneg_uxtw (unsigned int a, unsigned int b, unsigned int c) { - /* { dg-final { scan-assembler "csneg\tw\[0-9\]*.*ne" } } */ - /* { dg-final { scan-assembler-not "uxtw\tw\[0-9\]*.*" } } */ unsigned int val; val = a ? b: -c; return val; } +/* +** test_csneg_uxtw: +** cmp\tw0, 0 +** csneg\tw0, w1, w2, ne +** ret +*/ diff --git a/gcc/testsuite/gcc.target/aarch64/declare-simd-2.c b/gcc/testsuite/gcc.target/aarch64/declare-simd-2.c index 2f4d3a866e55..595a17297b82 100644 --- a/gcc/testsuite/gcc.target/aarch64/declare-simd-2.c +++ b/gcc/testsuite/gcc.target/aarch64/declare-simd-2.c @@ -51,11 +51,10 @@ void f05 (short a, short *b, short c) *b += a + c; } -/* { dg-final { scan-assembler {_ZGVnN4ul2v_f05:} } } */ -/* { dg-final { scan-assembler {_ZGVnN4ul2v_f05:} } } */ -/* { dg-final { scan-assembler {_ZGVnM8ul2v_f05:} } } */ +/* { dg-final { scan-assembler {_ZGVnM4ul2v_f05:} } } */ /* { dg-final { scan-assembler {_ZGVnM8ul2v_f05:} } } */ +/* { dg-final { scan-assembler {_ZGVnN4ul2v_f05:} } } */ +/* { dg-final { scan-assembler {_ZGVnN8ul2v_f05:} } } */ #ifdef __cplusplus } #endif - diff --git a/gcc/testsuite/gcc.target/aarch64/flt_mov_immediate_1.c b/gcc/testsuite/gcc.target/aarch64/flt_mov_immediate_1.c index 7b92a5ae40fb..36a1e3452042 100644 --- a/gcc/testsuite/gcc.target/aarch64/flt_mov_immediate_1.c +++ b/gcc/testsuite/gcc.target/aarch64/flt_mov_immediate_1.c @@ -1,52 +1,74 @@ /* { dg-do compile } */ /* { dg-options "-O3" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ float f0(void) { float x = 0.0f; return x; } +/* +** f0: +** movi\tv0.2s, #?0 +** ret +*/ float fn1(void) { float x = -0.0f; return x; } +/* +** fn1: +** movi\tv0.2s, 0x80, lsl 24 +** ret +*/ float f1(void) { float x = 256.0f; return x; } +/* +** f1: +** mov\t(w[0-9]+), 1132462080 +** fmov\ts0, \1 +** ret +*/ float f2(void) { float x = 123256.0f; return x; } +/* +** f2: +** mov\t(w[0-9]+), 48128 +** movk\t\1, 0x47f0, lsl 16 +** fmov\ts0, \1 +** ret +*/ float f3(void) { float x = 2.0f; return x; } +/* +** f3: +** fmov\ts0, 2\.0e\+0 +** ret +*/ float f4(void) { float x = -20000.1; return x; } - - -/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.2s, ?#0" 1 } } */ -/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.2s, 0x80, lsl 24" 1 } } */ -/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.2s, 0x80, lsl 24" 1 } } */ - -/* { dg-final { scan-assembler-times "mov\tw\[0-9\]+, 48128" 1 } } */ -/* { dg-final { scan-assembler-times "movk\tw\[0-9\]+, 0x47f0, lsl 16" 1 } } */ - -/* { dg-final { scan-assembler-times "fmov\ts\[0-9\]+, 2\\\.0e\\\+0" 1 } } */ - -/* { dg-final { scan-assembler-times "mov\tw\[0-9\]+, 16435" 1 } } */ -/* { dg-final { scan-assembler-times "movk\tw\[0-9\]+, 0xc69c, lsl 16" 1 } } */ - +/* +** f4: +** mov\t(w[0-9]+), 16435 +** movk\t\1, 0xc69c, lsl 16 +** fmov\ts0, \1 +** ret +*/ diff --git a/gcc/testsuite/gcc.target/aarch64/ldp_stp_18.c b/gcc/testsuite/gcc.target/aarch64/ldp_stp_18.c index ea9fffc22082..49aa0b20ab7d 100644 --- a/gcc/testsuite/gcc.target/aarch64/ldp_stp_18.c +++ b/gcc/testsuite/gcc.target/aarch64/ldp_stp_18.c @@ -107,7 +107,7 @@ CONS4_FN (1, double); CONS4_FN (2, double); /* -** cons2_8_double: +** cons4_4_double: ** ... ** stp q[0-9]+, .* ** ret @@ -115,7 +115,7 @@ CONS4_FN (2, double); CONS4_FN (4, double); /* -** cons2_8_double: +** cons4_8_double: ** ... ** stp q[0-9]+, .* ** ret diff --git a/gcc/testsuite/gcc.target/aarch64/ror_2.c b/gcc/testsuite/gcc.target/aarch64/ror_2.c index 796c1222230e..fbea839454ae 100644 --- a/gcc/testsuite/gcc.target/aarch64/ror_2.c +++ b/gcc/testsuite/gcc.target/aarch64/ror_2.c @@ -175,8 +175,8 @@ tst2 (unsigned x, unsigned y) int tst3 (unsigned x, unsigned y) { - /* { dg-final { scan-assembler "tst\tw\[0-9\]+, w\[0-9\]+, ror 20\n" } } */ - return ((unsigned long)x & ROR (y, 20)) == 0; + /* { dg-final { scan-assembler "tst\tw\[0-9\]+, w\[0-9\]+, ror 21\n" } } */ + return ((unsigned long)x & ROR (y, 21)) == 0; } int @@ -189,15 +189,15 @@ bics1 (unsigned x, unsigned y) int bics2 (unsigned x, unsigned y) { - /* { dg-final { scan-assembler "bics\twzr, w\[0-9\]+, w\[0-9\]+, ror 21\n" } } */ - return (x & ~ROR (y, 21)) == 0; + /* { dg-final { scan-assembler "bics\twzr, w\[0-9\]+, w\[0-9\]+, ror 22\n" } } */ + return (x & ~ROR (y, 22)) == 0; } int bics3 (unsigned x, unsigned y) { - /* { dg-final { scan-assembler "bics\twzr, w\[0-9\]+, w\[0-9\]+, ror 21\n" } } */ - return (x & (unsigned long)~ROR (y, 21)) == 0; + /* { dg-final { scan-assembler "bics\twzr, w\[0-9\]+, w\[0-9\]+, ror 23\n" } } */ + return (x & (unsigned long)~ROR (y, 23)) == 0; } /* { dg-final { scan-assembler-not "cmp" } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c b/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c index dcf9dc777ade..094aaff7b1c1 100644 --- a/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c +++ b/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c @@ -913,7 +913,7 @@ test_vrsrad_n_s64 (int64_t a, int64_t b) return vrsrad_n_s64 (a, b, 3); } -/* { dg-final { scan-assembler-times "\\tsrsra\\td\[0-9\]+" 1 } } */ +/* { dg-final { scan-assembler-times "\\tursra\\td\[0-9\]+" 1 } } */ uint64_t test_vrsrad_n_u64 (uint64_t a, uint64_t b) diff --git a/gcc/testsuite/gcc.target/aarch64/scalar_shift_1.c b/gcc/testsuite/gcc.target/aarch64/scalar_shift_1.c index 7be1b12a75bf..e715f19aa5de 100644 --- a/gcc/testsuite/gcc.target/aarch64/scalar_shift_1.c +++ b/gcc/testsuite/gcc.target/aarch64/scalar_shift_1.c @@ -1,6 +1,6 @@ /* { dg-do run } */ /* { dg-options "-O2 -fno-inline -save-temps" } */ - +/* { dg-final { check-function-bodies "**" "" "" } } */ extern void abort (); #define force_simd_di(v) asm volatile ("mov %d0, %1.d[0]" :"=w" (v) :"w" (v) :) @@ -23,8 +23,13 @@ test_lshift_left_sisd_di (UInt64x1 b, UInt64x1 c) force_simd_di (a); return a; } -/* { dg-final { scan-assembler "shl\td\[0-9\]+,\ d\[0-9\]+,\ 8" } } */ -/* { dg-final { scan-assembler "ushl\td\[0-9\]+,\ d\[0-9\]+,\ d\[0-9\]+" } } */ +/* +** test_lshift_left_sisd_di: +** ... +** shl\t(d[0-9]+), d[0-9]+, 8 +** ushl\td[0-9]+, \1, d[0-9]+ +** ... +*/ UInt32x1 test_lshift_left_sisd_si (UInt32x1 b, UInt32x1 c) @@ -38,8 +43,13 @@ test_lshift_left_sisd_si (UInt32x1 b, UInt32x1 c) force_simd_si (a); return a; } -/* { dg-final { scan-assembler "shl\tv\[0-9\]+\.2s,\ v\[0-9\]+\.2s,\ 4" } } */ -/* "ushl\tv\[0-9\]+\.2s,\ v\[0-9\]+\.2s,\ v\[0-9\]+\.2s" (counted later) */ +/* +** test_lshift_left_sisd_si: +** ... +** shl\t(v[0-9]+\.2s), v[0-9]+\.2s, 4 +** ushl\tv[0-9]+\.2s, \1, v[0-9]+\.2s +** ... +*/ UInt64x1 test_lshift_right_sisd_di (UInt64x1 b, UInt64x1 c) @@ -53,9 +63,14 @@ test_lshift_right_sisd_di (UInt64x1 b, UInt64x1 c) force_simd_di (a); return a; } -/* { dg-final { scan-assembler "ushr\td\[0-9\]+,\ d\[0-9\]+,\ 8" } } */ -/* "neg\td\[0-9\]+,\ d\[0-9\]+" (counted later) */ -/* { dg-final { scan-assembler "ushl\td\[0-9\]+,\ d\[0-9\]+,\ d\[0-9\]+" } } */ +/* +** test_lshift_right_sisd_di: +** ... +** ushr\t(d[0-9]+), d[0-9]+, 8 +** neg\t(d[0-9]+), d[0-9]+ +** ushl\td[0-9]+, \1, \2 +** ... +*/ UInt64x1 test_lshift_right_sisd_si (UInt32x1 b, UInt32x1 c) @@ -69,9 +84,14 @@ test_lshift_right_sisd_si (UInt32x1 b, UInt32x1 c) force_simd_si (a); return a; } -/* { dg-final { scan-assembler "ushr\tv\[0-9\]+\.2s,\ v\[0-9\]+\.2s,\ 4" } } */ -/* "neg\td\[0-9\]+,\ d\[0-9\]+" (counted later) */ -/* { dg-final { scan-assembler-times "ushl\tv\[0-9\]+\.2s,\ v\[0-9\]+\.2s,\ v\[0-9\]+\.2s" 2 } } */ +/* +** test_lshift_right_sisd_si: +** ... +** ushr\t(v[0-9]+\.2s), v[0-9]+\.2s, 4 +** neg\td([0-9]+), d[0-9]+ +** ushl\tv[0-9]+\.2s, \1, v\2\.2s +** ... +*/ Int64x1 test_ashift_right_sisd_di (Int64x1 b, Int64x1 c) @@ -85,9 +105,14 @@ test_ashift_right_sisd_di (Int64x1 b, Int64x1 c) force_simd_di (a); return a; } -/* { dg-final { scan-assembler "sshr\td\[0-9\]+,\ d\[0-9\]+,\ 8" } } */ -/* "neg\td\[0-9\]+,\ d\[0-9\]+" (counted later) */ -/* { dg-final { scan-assembler "sshl\td\[0-9\]+,\ d\[0-9\]+,\ d\[0-9\]+" } } */ +/* +** test_ashift_right_sisd_di: +** ... +** sshr\t(d[0-9]+), d[0-9]+, 8 +** neg\t(d[0-9]+), d[0-9]+ +** sshl\td[0-9]+, \1, \2 +** ... +*/ Int32x1 test_ashift_right_sisd_si (Int32x1 b, Int32x1 c) @@ -101,10 +126,14 @@ test_ashift_right_sisd_si (Int32x1 b, Int32x1 c) force_simd_si (a); return a; } -/* { dg-final { scan-assembler "sshr\tv\[0-9\]+\.2s,\ v\[0-9\]+\.2s,\ 4" } } */ -/* { dg-final { scan-assembler-times "neg\td\[0-9\]+,\ d\[0-9\]+" 4 } } */ -/* { dg-final { scan-assembler "sshl\tv\[0-9\]+\.2s,\ v\[0-9\]+\.2s,\ v\[0-9\]+\.2s" } } */ - +/* +** test_ashift_right_sisd_si: +** ... +** sshr\t(v[0-9]+\.2s), v[0-9]+\.2s, 4 +** neg\td([0-9]+), d[0-9]+ +** sshl\tv[0-9]+\.2s, \1, v\2\.2s +** ... +*/ /* The following are to make sure if the integer instructions lsl/lsr/asr are generated in non-vector scenarios */ @@ -118,8 +147,12 @@ test_lshift_left_int_di (UInt64x1 b, UInt64x1 c) a = a << c; return a; } -/* { dg-final { scan-assembler "lsl\tx\[0-9\]+,\ x\[0-9\]+,\ 8" } } */ -/* { dg-final { scan-assembler "lsl\tx\[0-9\]+,\ x\[0-9\]+,\ x\[0-9\]+" } } */ +/* +** test_lshift_left_int_di: +** lsl\t(x[0-9]+), x0, 8 +** lsl\tx0, \1, x1 +** ret +*/ UInt32x1 test_lshift_left_int_si (UInt32x1 b, UInt32x1 c) @@ -130,8 +163,12 @@ test_lshift_left_int_si (UInt32x1 b, UInt32x1 c) a = a << c; return a; } -/* { dg-final { scan-assembler "lsl\tw\[0-9\]+,\ w\[0-9\]+,\ 4" } } */ -/* { dg-final { scan-assembler "lsl\tw\[0-9\]+,\ w\[0-9\]+,\ w\[0-9\]+" } } */ +/* +** test_lshift_left_int_si: +** lsl\t(w[0-9]+), w0, 4 +** lsl\tw0, \1, w1 +** ret +*/ UInt64x1 test_lshift_right_int_di (UInt64x1 b, UInt64x1 c) @@ -142,8 +179,12 @@ test_lshift_right_int_di (UInt64x1 b, UInt64x1 c) a = a >> c; return a; } -/* { dg-final { scan-assembler "lsr\tx\[0-9\]+,\ x\[0-9\]+,\ 8" } } */ -/* { dg-final { scan-assembler "lsr\tx\[0-9\]+,\ x\[0-9\]+,\ x\[0-9\]+" } } */ +/* +** test_lshift_right_int_di: +** lsr\t(x[0-9]+), x0, 8 +** lsr\tx0, \1, x1 +** ret +*/ UInt32x1 test_lshift_right_int_si (UInt32x1 b, UInt32x1 c) @@ -154,8 +195,12 @@ test_lshift_right_int_si (UInt32x1 b, UInt32x1 c) a = a >> c; return a; } -/* { dg-final { scan-assembler "lsr\tw\[0-9\]+,\ w\[0-9\]+,\ 4" } } */ -/* { dg-final { scan-assembler "lsr\tw\[0-9\]+,\ w\[0-9\]+,\ w\[0-9\]+" } } */ +/* +** test_lshift_right_int_si: +** lsr\t(w[0-9]+), w0, 4 +** lsr\tw0, \1, w1 +** ret +*/ Int64x1 test_ashift_right_int_di (Int64x1 b, Int64x1 c) @@ -166,8 +211,12 @@ test_ashift_right_int_di (Int64x1 b, Int64x1 c) a = a >> c; return a; } -/* { dg-final { scan-assembler "asr\tx\[0-9\]+,\ x\[0-9\]+,\ 8" } } */ -/* { dg-final { scan-assembler "asr\tx\[0-9\]+,\ x\[0-9\]+,\ x\[0-9\]+" } } */ +/* +** test_ashift_right_int_di: +** asr\t(x[0-9]+), x0, 8 +** asr\tx0, \1, x1 +** ret +*/ Int32x1 test_ashift_right_int_si (Int32x1 b, Int32x1 c) @@ -178,8 +227,12 @@ test_ashift_right_int_si (Int32x1 b, Int32x1 c) a = a >> c; return a; } -/* { dg-final { scan-assembler "asr\tw\[0-9\]+,\ w\[0-9\]+,\ 4" } } */ -/* { dg-final { scan-assembler "asr\tw\[0-9\]+,\ w\[0-9\]+,\ w\[0-9\]+" } } */ +/* +** test_ashift_right_int_si: +** asr\t(w[0-9]+), w0, 4 +** asr\tw0, \1, w1 +** ret +*/ #define CHECK(var,val) \ do \ @@ -225,4 +278,3 @@ main () return 0; } - diff --git a/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_5.c b/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_5.c index 4f39b675bff1..1b7252757821 100644 --- a/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_5.c +++ b/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_5.c @@ -68,8 +68,8 @@ /* { dg-final { scan-assembler-times {ssubl2\t} 3} } */ /* { dg-final { scan-assembler-times {usubl2\t} 3} } */ -/* { dg-final { scan-assembler-times {sabdl2\t} 3} } */ -/* { dg-final { scan-assembler-times {uabdl2\t} 3} } */ +/* { dg-final { scan-assembler-times {sabal2\t} 3} } */ +/* { dg-final { scan-assembler-times {uabal2\t} 3} } */ /* { dg-final { scan-assembler-times {saddw2\t} 3} } */ /* { dg-final { scan-assembler-times {uaddw2\t} 3} } */ diff --git a/gcc/testsuite/gcc.target/aarch64/singleton_intrinsics_1.c b/gcc/testsuite/gcc.target/aarch64/singleton_intrinsics_1.c index 1f21bd33e739..27360150b582 100644 --- a/gcc/testsuite/gcc.target/aarch64/singleton_intrinsics_1.c +++ b/gcc/testsuite/gcc.target/aarch64/singleton_intrinsics_1.c @@ -298,7 +298,7 @@ test_vrsra_n_s64 (int64x1_t a, int64x1_t b) return vrsra_n_s64 (a, b, 3); } -/* { dg-final { scan-assembler-times "\\tsrsra\\td\[0-9\]+" 1 } } */ +/* { dg-final { scan-assembler-times "\\tursra\\td\[0-9\]+" 1 } } */ uint64x1_t test_vrsra_n_u64 (uint64x1_t a, uint64x1_t b) diff --git a/gcc/testsuite/gcc.target/aarch64/sve/arith_1.c b/gcc/testsuite/gcc.target/aarch64/sve/arith_1.c index c2e1f6c7eaeb..785b4cc9335f 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/arith_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/arith_1.c @@ -85,7 +85,7 @@ DO_ARITH_OPS (int64_t, -, minus) /* { dg-final { scan-assembler-not {\tadd\tz[0-9]+\.d, z[0-9]+\.d, #-1\n} } } */ /* { dg-final { scan-assembler-times {\tsub\tz[0-9]+\.d, z[0-9]+\.d, #1\n} 1 } } */ -/* { dg-final { scan-assembler-not {\tsub\tz[0-9]+\.b, z[0-9]+\.b, #1\n} } } */ +/* Asserted above { scan-assembler-not {\tsub\tz[0-9]+\.b, z[0-9]+\.b, #1\n} } */ /* { dg-final { scan-assembler-not {\tsub\tz[0-9]+\.b, z[0-9]+\.b, #5\n} } } */ /* { dg-final { scan-assembler-not {\tsub\tz[0-9]+\.b, z[0-9]+\.b, #255\n} } } */ /* { dg-final { scan-assembler-not {\tsub\tz[0-9]+\.b, z[0-9]+\.b, #256\n} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_1.c b/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_1.c index d0db0900ece3..e68d5a4a237f 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_1.c @@ -38,10 +38,6 @@ TEST_ALL (DEF_LOOP) /* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, #1\.0\n} 1 } } */ /* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, #1\.0\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.h, #1\.0\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, #1\.0\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, #1\.0\n} 1 } } */ - /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.h, #2\.0} 1 } } */ /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.s, #2\.0} 1 } } */ /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.d, #2\.0} 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_3.c b/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_3.c index 741f8f6d08e6..0ef89914b8be 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_3.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_3.c @@ -47,8 +47,8 @@ TEST_ALL (DEF_LOOP) /* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, z[0-9]+\.d\n} 1 } } */ /* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ -/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ -/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ +/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.s, p[0-7], z[0-9]+\.s, z[0-9]+\.s\n} 3 } } */ +/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.d, p[0-7], z[0-9]+\.d, z[0-9]+\.d\n} 3 } } */ /* { dg-final { scan-assembler-not {\tmovprfx\t} } } */ /* { dg-final { scan-assembler-not {\tmov\tz} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_5.c b/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_5.c index 4bae7e02de4b..836cd2c067ec 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_5.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_5.c @@ -11,10 +11,6 @@ /* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, #1\.0\n} 1 } } */ /* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, #1\.0\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.h, #1\.0\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, #1\.0\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, #1\.0\n} 1 } } */ - /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.h, #2\.0} 1 } } */ /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.s, #2\.0} 1 } } */ /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.d, #2\.0} 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_7.c b/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_7.c index 30f07f62ddb7..9331d9e5ccf6 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_7.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_7.c @@ -20,8 +20,8 @@ /* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, z[0-9]+\.d\n} 1 } } */ /* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ -/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ -/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ +/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.s, p[0-7], z[0-9]+\.s, z[0-9]+\.s\n} 3 } } */ +/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.d, p[0-7], z[0-9]+\.d, z[0-9]+\.d\n} 3 } } */ /* { dg-final { scan-assembler-not {\tmovprfx\t} } } */ /* { dg-final { scan-assembler-not {\tmov\tz} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_1.c b/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_1.c index d667b20884eb..f6f58391621d 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_1.c @@ -12,10 +12,6 @@ /* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, #1\.0\n} 1 } } */ /* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, #1\.0\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.h, #1\.0\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, #1\.0\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, #1\.0\n} 1 } } */ - /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.h, #2\.0} 1 } } */ /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.s, #2\.0} 1 } } */ /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.d, #2\.0} 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_3.c b/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_3.c index d39dd1825bd1..01d96ec1eb79 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_3.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_3.c @@ -21,8 +21,8 @@ /* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, z[0-9]+\.d\n} 1 } } */ /* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ -/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ -/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ +/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.s, p[0-7], z[0-9]+\.s, z[0-9]+\.s\n} 3 } } */ +/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.d, p[0-7], z[0-9]+\.d, z[0-9]+\.d\n} 3 } } */ /* { dg-final { scan-assembler-not {\tmovprfx\t} } } */ /* { dg-final { scan-assembler-not {\tmov\tz} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_5.c b/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_5.c index 290c4beac246..9865f08818a6 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_5.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_5.c @@ -12,10 +12,6 @@ /* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, #1\.0\n} 1 } } */ /* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, #1\.0\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.h, #1\.0\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, #1\.0\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, #1\.0\n} 1 } } */ - /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.h, #2\.0} 1 } } */ /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.s, #2\.0} 1 } } */ /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.d, #2\.0} 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_7.c b/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_7.c index 347a1a3540b8..eae52cd284ce 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_7.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_7.c @@ -21,8 +21,8 @@ /* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, z[0-9]+\.d\n} 1 } } */ /* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ -/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ -/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ +/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.s, p[0-7], z[0-9]+\.s, z[0-9]+\.s\n} 3 } } */ +/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.d, p[0-7], z[0-9]+\.d, z[0-9]+\.d\n} 3 } } */ /* { dg-final { scan-assembler-not {\tmovprfx\t} } } */ /* { dg-final { scan-assembler-not {\tmov\tz} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/cond_fmul_3.c b/gcc/testsuite/gcc.target/aarch64/sve/cond_fmul_3.c index 4da147e15680..549950d2e157 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/cond_fmul_3.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/cond_fmul_3.c @@ -43,8 +43,8 @@ TEST_ALL (DEF_LOOP) /* { dg-final { scan-assembler-times {\tfmul\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, z[0-9]+\.d\n} 1 } } */ /* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ -/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ -/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ +/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.s, p[0-7], z[0-9]+\.s, z[0-9]+\.s\n} 3 } } */ +/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.d, p[0-7], z[0-9]+\.d, z[0-9]+\.d\n} 3 } } */ /* { dg-final { scan-assembler-not {\tmovprfx\t} } } */ /* { dg-final { scan-assembler-not {\tmov\tz} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/cond_fsubr_3.c b/gcc/testsuite/gcc.target/aarch64/sve/cond_fsubr_3.c index 328af5741ef7..91eee805bbb6 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/cond_fsubr_3.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/cond_fsubr_3.c @@ -43,8 +43,8 @@ TEST_ALL (DEF_LOOP) /* { dg-final { scan-assembler-times {\tfsub\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, z[0-9]+\.d\n} 1 } } */ /* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ -/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ -/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ +/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.s, p[0-7], z[0-9]+\.s, z[0-9]+\.s\n} 3 } } */ +/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.d, p[0-7], z[0-9]+\.d, z[0-9]+\.d\n} 3 } } */ /* { dg-final { scan-assembler-not {\tmovprfx\t} } } */ /* { dg-final { scan-assembler-not {\tmov\tz} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/mixed_size_6.c b/gcc/testsuite/gcc.target/aarch64/sve/mixed_size_6.c index 837edecf7d07..da778204454f 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/mixed_size_6.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/mixed_size_6.c @@ -39,9 +39,9 @@ f3 (uint64_t *restrict ptr1, uint32_t *restrict ptr2, uint32_t start) } /* { dg-final { scan-assembler {\tindex\tz[0-9]+\.d, x[0-9]+, #1\n} } } */ -/* { dg-final { scan-assembler {\tindex\tz[0-9]+\.d, x[0-9]+, #1\n} } } */ +/* { dg-final { scan-assembler {\tindex\tz[0-9]+\.d, x[0-9]+, #2\n} } } */ /* { dg-final { scan-assembler {\tindex\tz[0-9]+\.d, x[0-9]+, #4\n} } } */ /* { dg-final { scan-assembler-not {\tindex\tz[0-9]+\.d, w[0-9]+, #1\n} } } */ -/* { dg-final { scan-assembler-not {\tindex\tz[0-9]+\.d, w[0-9]+, #1\n} } } */ +/* { dg-final { scan-assembler-not {\tindex\tz[0-9]+\.d, w[0-9]+, #2\n} } } */ /* { dg-final { scan-assembler-not {\tindex\tz[0-9]+\.d, w[0-9]+, #4\n} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pcs/annotate_1.c b/gcc/testsuite/gcc.target/aarch64/sve/pcs/annotate_1.c index a85d068607aa..6430980add47 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/pcs/annotate_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/pcs/annotate_1.c @@ -96,7 +96,6 @@ svfloat64x4_t ret_f64x4 (void) { return svundef4_f64 (); } /* { dg-final { scan-assembler {\t\.variant_pcs\tret_s8x3\n} } } */ /* { dg-final { scan-assembler {\t\.variant_pcs\tret_s16x3\n} } } */ -/* { dg-final { scan-assembler {\t\.variant_pcs\tret_s16x3\n} } } */ /* { dg-final { scan-assembler {\t\.variant_pcs\tret_s32x3\n} } } */ /* { dg-final { scan-assembler {\t\.variant_pcs\tret_s64x3\n} } } */ /* { dg-final { scan-assembler {\t\.variant_pcs\tret_u8x3\n} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pcs/return_6.c b/gcc/testsuite/gcc.target/aarch64/sve/pcs/return_6.c index 81c0a4163faa..bf7308dd567b 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/pcs/return_6.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/pcs/return_6.c @@ -55,7 +55,7 @@ CALLEE (s8, svint8_t) CALLEE (u8, svuint8_t) /* -** callee_u8: +** callee_mf8: ** ( ** ld1 ({v.*}), \[x0\] ** st1 \1, \[x8\] diff --git a/gcc/testsuite/gcc.target/aarch64/sve/struct_move_3.c b/gcc/testsuite/gcc.target/aarch64/sve/struct_move_3.c index 19011384f9b8..d6092e791d85 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/struct_move_3.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/struct_move_3.c @@ -37,7 +37,7 @@ typedef struct { vnx2df a[4]; } vnx8df; TEST_TYPE (vnx64qi, z0, z4) TEST_TYPE (vnx32hi, z6, z2) TEST_TYPE (vnx16si, z12, z16) -TEST_TYPE (vnx8di, z17, z13) +TEST_TYPE (vnx8di, z17, z12) TEST_TYPE (vnx32hf, z18, z1) TEST_TYPE (vnx16sf, z20, z16) TEST_TYPE (vnx8df, z24, z28) @@ -92,11 +92,11 @@ TEST_TYPE (vnx8df, z24, z28) /* { dg-final { scan-assembler {\tld1d\tz19.d, p[0-7]/z, \[x0, #2, mul vl\]\n} } } */ /* { dg-final { scan-assembler {\tld1d\tz20.d, p[0-7]/z, \[x0, #3, mul vl\]\n} } } */ /* { dg-final { scan-assembler { test vnx8di 1 z17\n} } } */ -/* { dg-final { scan-assembler {\tmov\tz13.d, z17.d\n} } } */ -/* { dg-final { scan-assembler {\tmov\tz14.d, z18.d\n} } } */ -/* { dg-final { scan-assembler {\tmov\tz15.d, z19.d\n} } } */ -/* { dg-final { scan-assembler {\tmov\tz16.d, z20.d\n} } } */ -/* { dg-final { scan-assembler { test vnx8di 2 z17, z17, z13\n} } } */ +/* { dg-final { scan-assembler {\tmov\tz12.d, z17.d\n} } } */ +/* { dg-final { scan-assembler {\tmov\tz13.d, z18.d\n} } } */ +/* { dg-final { scan-assembler {\tmov\tz14.d, z19.d\n} } } */ +/* { dg-final { scan-assembler {\tmov\tz15.d, z20.d\n} } } */ +/* { dg-final { scan-assembler { test vnx8di 2 z17, z17, z12\n} } } */ /* { dg-final { scan-assembler {\tst1d\tz17.d, p[0-7], \[x0, #4, mul vl\]\n} } } */ /* { dg-final { scan-assembler {\tst1d\tz18.d, p[0-7], \[x0, #5, mul vl\]\n} } } */ /* { dg-final { scan-assembler {\tst1d\tz19.d, p[0-7], \[x0, #6, mul vl\]\n} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/struct_move_6.c b/gcc/testsuite/gcc.target/aarch64/sve/struct_move_6.c index 8336e3f1eddf..12b714481e3d 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/struct_move_6.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/struct_move_6.c @@ -34,7 +34,7 @@ typedef struct { vnx2df a[4]; } vnx8df; TEST_TYPE (vnx64qi, z0, z4) TEST_TYPE (vnx32hi, z6, z2) TEST_TYPE (vnx16si, z12, z16) -TEST_TYPE (vnx8di, z17, z13) +TEST_TYPE (vnx8di, z17, z12) TEST_TYPE (vnx16sf, z20, z16) TEST_TYPE (vnx8df, z24, z28) @@ -88,11 +88,11 @@ TEST_TYPE (vnx8df, z24, z28) /* { dg-final { scan-assembler {\tldr\tz19, \[x0, #2, mul vl\]\n} } } */ /* { dg-final { scan-assembler {\tldr\tz20, \[x0, #3, mul vl\]\n} } } */ /* { dg-final { scan-assembler { test vnx8di 1 z17\n} } } */ -/* { dg-final { scan-assembler {\tmov\tz13.d, z17.d\n} } } */ -/* { dg-final { scan-assembler {\tmov\tz14.d, z18.d\n} } } */ -/* { dg-final { scan-assembler {\tmov\tz15.d, z19.d\n} } } */ -/* { dg-final { scan-assembler {\tmov\tz16.d, z20.d\n} } } */ -/* { dg-final { scan-assembler { test vnx8di 2 z17, z17, z13\n} } } */ +/* { dg-final { scan-assembler {\tmov\tz12.d, z17.d\n} } } */ +/* { dg-final { scan-assembler {\tmov\tz13.d, z18.d\n} } } */ +/* { dg-final { scan-assembler {\tmov\tz14.d, z19.d\n} } } */ +/* { dg-final { scan-assembler {\tmov\tz15.d, z20.d\n} } } */ +/* { dg-final { scan-assembler { test vnx8di 2 z17, z17, z12\n} } } */ /* { dg-final { scan-assembler {\tstr\tz17, \[x0, #4, mul vl\]\n} } } */ /* { dg-final { scan-assembler {\tstr\tz18, \[x0, #5, mul vl\]\n} } } */ /* { dg-final { scan-assembler {\tstr\tz19, \[x0, #6, mul vl\]\n} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/uzp1_1.c b/gcc/testsuite/gcc.target/aarch64/sve/uzp1_1.c index 84c6c6f1c606..83451db9b44b 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/uzp1_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/uzp1_1.c @@ -32,9 +32,6 @@ UZP1 (vnx8hf, ((vnx8hi) { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30 })); /* { dg-final { scan-assembler-not {\ttbl\t} } } */ -/* { dg-final { scan-assembler-not {\ttbl\t} } } */ -/* { dg-final { scan-assembler-not {\ttbl\t} } } */ -/* { dg-final { scan-assembler-not {\ttbl\t} } } */ /* { dg-final { scan-assembler-times {\tuzp1\tz[0-9]+\.d, z[0-9]+\.d, z[0-9]+\.d\n} 2 } } */ /* { dg-final { scan-assembler-times {\tuzp1\tz[0-9]+\.s, z[0-9]+\.s, z[0-9]+\.s\n} 2 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/uzp2_1.c b/gcc/testsuite/gcc.target/aarch64/sve/uzp2_1.c index 1336cafc5c7e..bfdee4073f75 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/uzp2_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/uzp2_1.c @@ -31,9 +31,6 @@ UZP2 (vnx8hf, ((vnx8hi) { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31 })); /* { dg-final { scan-assembler-not {\ttbl\t} } } */ -/* { dg-final { scan-assembler-not {\ttbl\t} } } */ -/* { dg-final { scan-assembler-not {\ttbl\t} } } */ -/* { dg-final { scan-assembler-not {\ttbl\t} } } */ /* { dg-final { scan-assembler-times {\tuzp2\tz[0-9]+\.d, z[0-9]+\.d, z[0-9]+\.d\n} 2 } } */ /* { dg-final { scan-assembler-times {\tuzp2\tz[0-9]+\.s, z[0-9]+\.s, z[0-9]+\.s\n} 2 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/vector-compare-5.c b/gcc/testsuite/gcc.target/aarch64/vector-compare-5.c index a1a601dc1958..7becd56f10c1 100644 --- a/gcc/testsuite/gcc.target/aarch64/vector-compare-5.c +++ b/gcc/testsuite/gcc.target/aarch64/vector-compare-5.c @@ -53,15 +53,13 @@ n (v4i *x, v4i const *y, v4i *z, v4i *t) } +/* { dg-final { scan-tree-dump-times "\\s*\\*tD\\.\\d+\\s*=\\s*\\{\\s*-1(?:,\\s*-1){3}\\s*\\}\\s*;" 1 "original" } } */ +/* { dg-final { scan-tree-dump-times "\\s*\\*tD\\.\\d+\\s*=\\s*\\{\\s*0(?:,\\s*0){3}\\s*\\}\\s*;" 3 "original" } } */ +/* { dg-final { scan-tree-dump-times "\\s*\\*zD\\.\\d+\\s*=\\s*\\{\\s*-1(?:,\\s*-1){3}\\s*\\}\\s*;" 2 "original" } } */ + /* { dg-final { scan-tree-dump ".*\\*zD\\.\\d+\\s*=\\s*VEC_COND_EXPR\\s*<\\s*\\*xD\\.\\d+\\s*>=\\s*VIEW_CONVERT_EXPR\\(\\*yD\\.\\d+\\)\\s*,\\s*\\{\\s*-1(,\\s*-1){3}\\s*\\}\\s*,\\s*\\{\\s*0(,\\s*0){3}\\s*\\}\\s*>\\s*;" "original" } } */ -/* { dg-final { scan-tree-dump ".*\\*tD\\.\\d+\\s*=\\s*\\{\\s*-1(,\\s*-1){3}\\s*\\}\\s*;" "original" } } */ /* { dg-final { scan-tree-dump ".*\\*zD\\.\\d+\\s*=\\s*VEC_COND_EXPR\\s*<\\s*\\*xD\\.\\d+\\s*==\\s*VIEW_CONVERT_EXPR\\(\\*yD\\.\\d+\\)\\s*,\\s*\\{\\s*-1(,\\s*-1){3}\\s*\\}\\s*,\\s*\\{\\s*0(,\\s*0){3}\\s*\\}\\s*>\\s*;" "original" } } */ /* { dg-final { scan-tree-dump ".*\\*tD\\.\\d+\\s*=\\s*VEC_COND_EXPR\\s*<\\s*\\*xD\\.\\d+\\s*<\\s*VIEW_CONVERT_EXPR\\(\\*yD\\.\\d+\\)\\s*,\\s*\\{\\s*-1(,\\s*-1){3}\\s*\\}\\s*,\\s*\\{\\s*0(,\\s*0){3}\\s*\\}\\s*>\\s*;" "original" } } */ -/* { dg-final { scan-tree-dump ".*\\*zD\\.\\d+\\s*=\\s*\\{\\s*-1(,\\s*-1){3}\\s*\\}\\s*;" "original" } } */ -/* { dg-final { scan-tree-dump ".*\\*tD\\.\\d+\\s*=\\s*\\{\\s*0(,\\s*0){3}\\s*\\}\\s*;" "original" } } */ /* { dg-final { scan-tree-dump ".*\\*zD\\.\\d+\\s*=\\s*VEC_COND_EXPR\\s*<\\s*\\*xD\\.\\d+\\s*<=\\s*VIEW_CONVERT_EXPR\\(\\*yD\\.\\d+\\)\\s*,\\s*\\{\\s*-1(,\\s*-1){3}\\s*\\}\\s*,\\s*\\{\\s*0(,\\s*0){3}\\s*\\}\\s*>\\s*;" "original" } } */ -/* { dg-final { scan-tree-dump ".*\\*tD\\.\\d+\\s*=\\s*\\{\\s*0(,\\s*0){3}\\s*\\}\\s*;" "original" } } */ /* { dg-final { scan-tree-dump ".*\\*zD\\.\\d+\\s*=\\s*VEC_COND_EXPR\\s*<\\s*\\*xD\\.\\d+\\s*!=\\s*VIEW_CONVERT_EXPR\\(\\*yD\\.\\d+\\)\\s*,\\s*\\{\\s*-1(,\\s*-1){3}\\s*\\}\\s*,\\s*\\{\\s*0(,\\s*0){3}\\s*\\}\\s*>\\s*;" "original" } } */ /* { dg-final { scan-tree-dump ".*\\*tD\\.\\d+\\s*=\\s*VEC_COND_EXPR\\s*<\\s*\\*xD\\.\\d+\\s*>=\\s*VIEW_CONVERT_EXPR\\(\\*yD\\.\\d+\\)\\s*,\\s*\\{\\s*-1(,\\s*-1){3}\\s*\\}\\s*,\\s*\\{\\s*0(,\\s*0){3}\\s*\\}\\s*>\\s*;" "original" } } */ -/* { dg-final { scan-tree-dump ".*\\*zD\\.\\d+\\s*=\\s*\\{\\s*-1(,\\s*-1){3}\\s*\\}\\s*;" "original" } } */ -/* { dg-final { scan-tree-dump ".*\\*tD\\.\\d+\\s*=\\s*\\{\\s*0(,\\s*0){3}\\s*\\}\\s*;" "original" } } */ From 554a54b97ea935802bc66679ebb882ad61adf897 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Fri, 19 Sep 2025 23:02:35 -0700 Subject: [PATCH 054/216] fab/forwprop: Move memcmp->memcmp_eq to forwprop This moves from the memcmp->memcmp_eq to forwprop by checking PROP_last_full_fold. Note this means at -Og, we no longer optimize some memcmp. That will be fixed when I exchange fab/copyprop for a (late) forwprop. Bootstrapped and tested on x86_64-linux-gnu. gcc/ChangeLog: * tree-ssa-ccp.cc (optimize_memcmp_eq): Remove. (pass_fold_builtins::execute): Remove handling of memcmp. * tree-ssa-forwprop.cc (simplify_builtin_memcmp): Add folding of memcmp to memcmp_eq for PROP_last_full_fold. Signed-off-by: Andrew Pinski --- gcc/tree-ssa-ccp.cc | 34 ---------------------------------- gcc/tree-ssa-forwprop.cc | 10 +++++++++- 2 files changed, 9 insertions(+), 35 deletions(-) diff --git a/gcc/tree-ssa-ccp.cc b/gcc/tree-ssa-ccp.cc index 4165e596033f..1fbc3de2bfe7 100644 --- a/gcc/tree-ssa-ccp.cc +++ b/gcc/tree-ssa-ccp.cc @@ -4205,36 +4205,6 @@ class pass_fold_builtins : public gimple_opt_pass }; // class pass_fold_builtins -/* Optimize memcmp STMT into memcmp_eq if it is only used with - `== 0` or `!= 0`. */ - -static void -optimize_memcmp_eq (gcall *stmt) -{ - /* Make sure memcmp arguments are the correct type. */ - if (gimple_call_num_args (stmt) != 3) - return; - tree arg1 = gimple_call_arg (stmt, 0); - tree arg2 = gimple_call_arg (stmt, 1); - tree len = gimple_call_arg (stmt, 2); - - if (!POINTER_TYPE_P (TREE_TYPE (arg1))) - return; - if (!POINTER_TYPE_P (TREE_TYPE (arg2))) - return; - if (!INTEGRAL_TYPE_P (TREE_TYPE (len))) - return; - /* The return value of the memcmp has to be used - equality comparison to zero. */ - tree res = gimple_call_lhs (stmt); - - if (!res || !use_in_zero_equality (res)) - return; - - gimple_call_set_fndecl (stmt, builtin_decl_explicit (BUILT_IN_MEMCMP_EQ)); - update_stmt (stmt); -} - unsigned int pass_fold_builtins::execute (function *fun) { @@ -4291,10 +4261,6 @@ pass_fold_builtins::execute (function *fun) gsi_next (&i); continue; - case BUILT_IN_MEMCMP: - optimize_memcmp_eq (as_a(stmt)); - break; - case BUILT_IN_UNREACHABLE: if (optimize_unreachable (i)) cfg_changed = true; diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc index 4c438a0f86c9..917f3d90f6c2 100644 --- a/gcc/tree-ssa-forwprop.cc +++ b/gcc/tree-ssa-forwprop.cc @@ -1842,7 +1842,15 @@ simplify_builtin_memcmp (gimple_stmt_iterator *gsi_p, gcall *stmt) return true; } } - return false; + + /* Replace memcmp with memcmp_eq if the above fails. */ + if (DECL_FUNCTION_CODE (gimple_call_fndecl (stmt)) == BUILT_IN_MEMCMP_EQ) + return false; + if (!(cfun->curr_properties & (PROP_last_full_fold))) + return false; + gimple_call_set_fndecl (stmt, builtin_decl_explicit (BUILT_IN_MEMCMP_EQ)); + update_stmt (stmt); + return true; } /* Optimizes builtin memchrs for small constant sizes with a const string. From aca8f47ffe98ed0f410c8e9cbe376749f68e4e71 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Sun, 21 Sep 2025 22:30:18 -0700 Subject: [PATCH 055/216] fab: Manaully build gimple rather than depend on gimplifier for stdarg functions This code dates before gimple tuples was around. So it uses both MODIFY_EXPR and INDIRECT_REF :). For `__builtin_va_start(ptr, 0)` it exands into: ``` _t = __builtin_next_arg (0); *ptr = _t; ``` We need to get a new VDEF for the next arg call so we don't need to do a ssa update too. For `__builtin_va_copy(ptr, b)`, it expands into: ``` *ptr = b; ``` Which is still a store. For `__builtin_va_end(ptr)`, we change it into a GIMPLE_NOP. Before optimize_stdarg_builtin would return a tree and then pass_fold_builtins::execute would set todo to include TODO_update_address_taken for a non-null result. Since now optimize_stdarg_builtin returns a bool, the path that had set the todo is no longer taken (the result variable is still NULL). Setting the todo to include TODO_update_address_taken when the call to optimize_stdarg_builtin succeeds to be able to get the same effect as before. That is: before we had: ``` result = optimize_stdarg_builtin(...); ... if (!result) continue; todo |= TODO_update_address_taken; ``` Now after this change we have: result = NULL_TREE; ... if (optimize_stdarg_builtin(...)) todo |= TODO_update_address_taken; if (!result) continue; ``` Also since optimize_stdarg_builtin will remove the part of taking an address of a local variable and in this case fab is the last pass where this happens, TODO_update_address_taken is needed to change the va args in some cases to not forced to memory variables. Note this code will be moved into gimple_fold later on. This is part of the reason for updating this code. The other side is this simplifies the code too. Changes since v1: * v2: expand commit message. gcc/ChangeLog: * tree-ssa-ccp.cc (optimize_stdarg_builtin): Mannually create the gimple statements instead of depending on the gimplifier. (pass_fold_builtins::execute): Handle updated call to optimize_stdarg_builtin. Signed-off-by: Andrew Pinski --- gcc/tree-ssa-ccp.cc | 87 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 66 insertions(+), 21 deletions(-) diff --git a/gcc/tree-ssa-ccp.cc b/gcc/tree-ssa-ccp.cc index 1fbc3de2bfe7..c9ffd2af85c2 100644 --- a/gcc/tree-ssa-ccp.cc +++ b/gcc/tree-ssa-ccp.cc @@ -3175,14 +3175,16 @@ optimize_stack_restore (gimple_stmt_iterator i) /* If va_list type is a simple pointer and nothing special is needed, optimize __builtin_va_start (&ap, 0) into ap = __builtin_next_arg (0), __builtin_va_end (&ap) out as NOP and __builtin_va_copy into a simple - pointer assignment. */ + pointer assignment. Returns true if a change happened. */ -static tree -optimize_stdarg_builtin (gimple *call) +static bool +optimize_stdarg_builtin (gimple_stmt_iterator *gsi, gimple *call) { tree callee, lhs, rhs, cfun_va_list; bool va_list_simple_ptr; location_t loc = gimple_location (call); + gimple *nstmt0, *nstmt; + tree tlhs, oldvdef, newvdef; callee = gimple_call_fndecl (call); @@ -3197,48 +3199,90 @@ optimize_stdarg_builtin (gimple *call) if (!va_list_simple_ptr || targetm.expand_builtin_va_start != NULL || !builtin_decl_explicit_p (BUILT_IN_NEXT_ARG)) - return NULL_TREE; + return false; if (gimple_call_num_args (call) != 2) - return NULL_TREE; + return false; lhs = gimple_call_arg (call, 0); if (!POINTER_TYPE_P (TREE_TYPE (lhs)) || TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (lhs))) != TYPE_MAIN_VARIANT (cfun_va_list)) - return NULL_TREE; + return false; + /* Create `tlhs = __builtin_next_arg(0);`. */ + tlhs = make_ssa_name (cfun_va_list); + nstmt0 = gimple_build_call (builtin_decl_explicit (BUILT_IN_NEXT_ARG), 1, integer_zero_node); + lhs = fold_build2 (MEM_REF, cfun_va_list, lhs, build_zero_cst (TREE_TYPE (lhs))); + gimple_call_set_lhs (nstmt0, tlhs); + gimple_set_location (nstmt0, loc); + gimple_move_vops (nstmt0, call); + gsi_replace (gsi, nstmt0, false); + oldvdef = gimple_vdef (nstmt0); + newvdef = make_ssa_name (gimple_vop (cfun), nstmt0); + gimple_set_vdef (nstmt0, newvdef); + + /* Create `*lhs = tlhs;`. */ + nstmt = gimple_build_assign (lhs, tlhs); + gimple_set_location (nstmt, loc); + gimple_set_vuse (nstmt, newvdef); + gimple_set_vdef (nstmt, oldvdef); + SSA_NAME_DEF_STMT (oldvdef) = nstmt; + gsi_insert_after (gsi, nstmt, GSI_NEW_STMT); - lhs = build_fold_indirect_ref_loc (loc, lhs); - rhs = build_call_expr_loc (loc, builtin_decl_explicit (BUILT_IN_NEXT_ARG), - 1, integer_zero_node); - rhs = fold_convert_loc (loc, TREE_TYPE (lhs), rhs); - return build2 (MODIFY_EXPR, TREE_TYPE (lhs), lhs, rhs); + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "Simplified\n "); + print_gimple_stmt (dump_file, call, 0, dump_flags); + fprintf (dump_file, "into\n "); + print_gimple_stmt (dump_file, nstmt0, 0, dump_flags); + fprintf (dump_file, " "); + print_gimple_stmt (dump_file, nstmt, 0, dump_flags); + } + return true; case BUILT_IN_VA_COPY: if (!va_list_simple_ptr) - return NULL_TREE; + return false; if (gimple_call_num_args (call) != 2) - return NULL_TREE; + return false; lhs = gimple_call_arg (call, 0); if (!POINTER_TYPE_P (TREE_TYPE (lhs)) || TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (lhs))) != TYPE_MAIN_VARIANT (cfun_va_list)) - return NULL_TREE; - - lhs = build_fold_indirect_ref_loc (loc, lhs); + return false; rhs = gimple_call_arg (call, 1); if (TYPE_MAIN_VARIANT (TREE_TYPE (rhs)) != TYPE_MAIN_VARIANT (cfun_va_list)) - return NULL_TREE; + return false; - rhs = fold_convert_loc (loc, TREE_TYPE (lhs), rhs); - return build2 (MODIFY_EXPR, TREE_TYPE (lhs), lhs, rhs); + lhs = fold_build2 (MEM_REF, cfun_va_list, lhs, build_zero_cst (TREE_TYPE (lhs))); + nstmt = gimple_build_assign (lhs, rhs); + gimple_set_location (nstmt, loc); + gimple_move_vops (nstmt, call); + gsi_replace (gsi, nstmt, false); + + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "Simplified\n "); + print_gimple_stmt (dump_file, call, 0, dump_flags); + fprintf (dump_file, "into\n "); + print_gimple_stmt (dump_file, nstmt, 0, dump_flags); + } + return true; case BUILT_IN_VA_END: /* No effect, so the statement will be deleted. */ - return integer_zero_node; + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "Removed\n "); + print_gimple_stmt (dump_file, call, 0, dump_flags); + } + unlink_stmt_vdef (call); + release_defs (call); + gsi_replace (gsi, gimple_build_nop (), true); + return true; default: gcc_unreachable (); @@ -4426,7 +4470,8 @@ pass_fold_builtins::execute (function *fun) case BUILT_IN_VA_END: case BUILT_IN_VA_COPY: /* These shouldn't be folded before pass_stdarg. */ - result = optimize_stdarg_builtin (stmt); + if (optimize_stdarg_builtin (&i, stmt)) + todoflags |= TODO_update_address_taken; break; default:; From 3eadb2d22a65bf146cd33566c89f6b3c27dc8d23 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Mon, 22 Sep 2025 22:25:29 -0700 Subject: [PATCH 056/216] fab/gimple-fold: Move removal of ASSUME internal function to gimple fold [PR121762] This moves the removal of the ASSUME internal function to gimple fold. The only thing is fab for -Og support until fab is removed either needs to stay or changed over to a fold_stmt. I decided to change over to a fold_stmt for internal function calls. I am almost positive this won't change much either way. Bootstrapped and tested on x86_64-linux-gnu. PR tree-optimization/121762 gcc/ChangeLog: * gimple-fold.cc (gimple_fold_call): Remove ASSUME internal function calls when PROP_last_full_fold is set. * tree-ssa-ccp.cc (pass_fold_builtins::execute): Handling folding of all internal functions. Signed-off-by: Andrew Pinski --- gcc/gimple-fold.cc | 6 ++++++ gcc/tree-ssa-ccp.cc | 29 +++++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc index 37ca0853ec82..a12fb5e8eab1 100644 --- a/gcc/gimple-fold.cc +++ b/gcc/gimple-fold.cc @@ -5886,6 +5886,12 @@ gimple_fold_call (gimple_stmt_iterator *gsi, bool inplace) tree overflow = NULL_TREE; switch (gimple_call_internal_fn (stmt)) { + case IFN_ASSUME: + /* Remove .ASSUME calls during the last fold since it is no + longer needed. */ + if (cfun->curr_properties & PROP_last_full_fold) + replace_call_with_value (gsi, NULL_TREE); + break; case IFN_BUILTIN_EXPECT: result = fold_builtin_expect (gimple_location (stmt), gimple_call_arg (stmt, 0), diff --git a/gcc/tree-ssa-ccp.cc b/gcc/tree-ssa-ccp.cc index c9ffd2af85c2..6d9cbd82d07e 100644 --- a/gcc/tree-ssa-ccp.cc +++ b/gcc/tree-ssa-ccp.cc @@ -4278,9 +4278,34 @@ pass_fold_builtins::execute (function *fun) callee = gimple_call_fndecl (stmt); if (!callee - && gimple_call_internal_p (stmt, IFN_ASSUME)) + && gimple_call_internal_p (stmt)) { - gsi_remove (&i, true); + if (!fold_stmt (&i)) + { + gsi_next (&i); + continue; + } + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "Simplified\n "); + print_gimple_stmt (dump_file, stmt, 0, dump_flags); + } + + old_stmt = stmt; + stmt = gsi_stmt (i); + update_stmt (stmt); + + if (maybe_clean_or_replace_eh_stmt (old_stmt, stmt) + && gimple_purge_dead_eh_edges (bb)) + cfg_changed = true; + + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "to\n "); + print_gimple_stmt (dump_file, stmt, 0, dump_flags); + fprintf (dump_file, "\n"); + } + gsi_next (&i); continue; } if (!callee || !fndecl_built_in_p (callee, BUILT_IN_NORMAL)) From 4440e022d220c19358745a1ba7ccf6ae054ce347 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Mon, 22 Sep 2025 15:26:00 -0700 Subject: [PATCH 057/216] fab: rewrite optimize_stack_restore call check [PR122033] The call check in optimize_stack_restore is not the same as what is described in the comment before the function. It has never been the same even. It has always allowed all nromal builtins but not target builtins while the comment says no calls. This rewrites it to allow the following. * a restore right before a noreturn is fine to be removed as the noreturn function will do the restore (or exit the program). * Internal functions are ok because they will turn into an instruction or 2 * Still specifically reject alloca and __scrub_leave * simple or inexpensive builtins (including target builtins) This will both reject some more locations but also accepts more locations due to the internal and target and noreturn function calls checks. Bootstrapped and tested on x86_64-linux-gnu. Changes since v1: * v2: Add comment about why restoring before calls is important. PR tree-optimization/122033 gcc/ChangeLog: * tree-ssa-ccp.cc (optimize_stack_restore): Rewrite the call check. Update comment in the front to new rules on calls. * tree.h (fndecl_builtin_alloc_p): New function. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/pr122033-1.c: New test. * gcc.dg/tree-ssa/pr122033-2.c: New test. Signed-off-by: Andrew Pinski --- gcc/testsuite/gcc.dg/tree-ssa/pr122033-1.c | 18 +++++++++ gcc/testsuite/gcc.dg/tree-ssa/pr122033-2.c | 23 +++++++++++ gcc/tree-ssa-ccp.cc | 46 ++++++++++++++++------ gcc/tree.h | 9 +++++ 4 files changed, 84 insertions(+), 12 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr122033-1.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr122033-2.c diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr122033-1.c b/gcc/testsuite/gcc.dg/tree-ssa/pr122033-1.c new file mode 100644 index 000000000000..4ef8c6c3150f --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr122033-1.c @@ -0,0 +1,18 @@ +/* PR middle-end/122033 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +void bar1 (char *, int); +void bar3(void) __attribute__((noreturn)); +void foo1 (int size) +{ + { + char temp[size]; + temp[size-1] = '\0'; + bar1 (temp, size); + } + bar3 (); +} + +/* { dg-final { scan-tree-dump-not "__builtin_stack_save" "optimized"} } */ +/* { dg-final { scan-tree-dump-not "__builtin_stack_restore" "optimized"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr122033-2.c b/gcc/testsuite/gcc.dg/tree-ssa/pr122033-2.c new file mode 100644 index 000000000000..f429324f64c7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr122033-2.c @@ -0,0 +1,23 @@ +/* PR middle-end/122033 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +void g(int*); +void h(); +double t; +void f(int a, int b) +{ + { + int array0[a]; + { + int array1[b]; + g(array0); + g(array1); + } + t = __builtin_sin(t); + } + h (); +} + +/* { dg-final { scan-tree-dump-times "__builtin_stack_save" 2 "optimized"} } */ +/* { dg-final { scan-tree-dump-times "__builtin_stack_restore" 2 "optimized"} } */ diff --git a/gcc/tree-ssa-ccp.cc b/gcc/tree-ssa-ccp.cc index 6d9cbd82d07e..51e133e860de 100644 --- a/gcc/tree-ssa-ccp.cc +++ b/gcc/tree-ssa-ccp.cc @@ -3091,7 +3091,12 @@ make_pass_ccp (gcc::context *ctxt) if there is another __builtin_stack_restore in the same basic block and no calls or ASM_EXPRs are in between, or if this block's only outgoing edge is to EXIT_BLOCK and there are no calls or - ASM_EXPRs after this __builtin_stack_restore. */ + ASM_EXPRs after this __builtin_stack_restore. + Note restore right before a noreturn function is not needed. + And skip some cheap calls that will most likely become an instruction. + Restoring the stack before a call is important to be able to keep + stack usage down so that call does not run out of stack. */ + static tree optimize_stack_restore (gimple_stmt_iterator i) @@ -3111,26 +3116,43 @@ optimize_stack_restore (gimple_stmt_iterator i) for (gsi_next (&i); !gsi_end_p (i); gsi_next (&i)) { stmt = gsi_stmt (i); - if (gimple_code (stmt) == GIMPLE_ASM) + if (is_a (stmt)) return NULL_TREE; - if (gimple_code (stmt) != GIMPLE_CALL) + gcall *call = dyn_cast(stmt); + if (!call) + continue; + + /* We can remove the restore in front of noreturn + calls. Since the restore will happen either + via an unwind/longjmp or not at all. */ + if (gimple_call_noreturn_p (call)) + break; + + /* Internal calls are ok, to bypass + check first since fndecl will be null. */ + if (gimple_call_internal_p (call)) continue; - callee = gimple_call_fndecl (stmt); + callee = gimple_call_fndecl (call); + /* Non-builtin calls are not ok. */ if (!callee - || !fndecl_built_in_p (callee, BUILT_IN_NORMAL) - /* All regular builtins are ok, just obviously not alloca. */ - || ALLOCA_FUNCTION_CODE_P (DECL_FUNCTION_CODE (callee)) - /* Do not remove stack updates before strub leave. */ - || fndecl_built_in_p (callee, BUILT_IN___STRUB_LEAVE)) + || !fndecl_built_in_p (callee)) + return NULL_TREE; + + /* Do not remove stack updates before strub leave. */ + if (fndecl_built_in_p (callee, BUILT_IN___STRUB_LEAVE) + /* Alloca calls are not ok either. */ + || fndecl_builtin_alloc_p (callee)) return NULL_TREE; if (fndecl_built_in_p (callee, BUILT_IN_STACK_RESTORE)) goto second_stack_restore; - } - if (!gsi_end_p (i)) - return NULL_TREE; + /* If not a simple or inexpensive builtin, then it is not ok either. */ + if (!is_simple_builtin (callee) + && !is_inexpensive_builtin (callee)) + return NULL_TREE; + } /* Allow one successor of the exit block, or zero successors. */ switch (EDGE_COUNT (bb->succs)) diff --git a/gcc/tree.h b/gcc/tree.h index 4c8ad9842ff0..6e46374357c1 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -7005,6 +7005,15 @@ fndecl_built_in_p (const_tree node, built_in_function name1, F... names) name1, names...)); } +/* Returns true if the function decl NODE is an alloca. */ +inline bool +fndecl_builtin_alloc_p (const_tree node) +{ + if (!fndecl_built_in_p (node, BUILT_IN_NORMAL)) + return false; + return ALLOCA_FUNCTION_CODE_P (DECL_FUNCTION_CODE (node)); +} + /* A struct for encapsulating location information about an operator and the operation built from it. From a8326b0c20383b4f10c8a5a3c8c4887fd54d4335 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Tue, 23 Sep 2025 11:37:35 -0700 Subject: [PATCH 058/216] fab/forwprop: Move optimize stack restore to forwprop [PR121762] This moves the removal of redundant stack restore from fab to forwprop. There is a possibility of removing some of the redundant stack restores before the last folding but that is for a different patch. Changes since v1: * v2: the additional comment change. Bootstrapped and tested on x86_64-linux-gnu. PR tree-optimization/121762 gcc/ChangeLog: * tree-ssa-ccp.cc (optimize_stack_restore): Move to tree-ssa-forwprop.cc. (pass_fold_builtins::execute): Don't call optimize_stack_restore. * tree-ssa-forwprop.cc (optimize_stack_restore): New function from tree-ssa-ccp.cc. Return bool instead of value, use replace_call_with_value istead of returning integer_zero_node. (simplify_builtin_call): Call optimize_stack_restore. Signed-off-by: Andrew Pinski --- gcc/tree-ssa-ccp.cc | 116 --------------------------------------- gcc/tree-ssa-forwprop.cc | 112 +++++++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+), 116 deletions(-) diff --git a/gcc/tree-ssa-ccp.cc b/gcc/tree-ssa-ccp.cc index 51e133e860de..739d3be91293 100644 --- a/gcc/tree-ssa-ccp.cc +++ b/gcc/tree-ssa-ccp.cc @@ -3085,115 +3085,6 @@ make_pass_ccp (gcc::context *ctxt) return new pass_ccp (ctxt); } - - -/* Try to optimize out __builtin_stack_restore. Optimize it out - if there is another __builtin_stack_restore in the same basic - block and no calls or ASM_EXPRs are in between, or if this block's - only outgoing edge is to EXIT_BLOCK and there are no calls or - ASM_EXPRs after this __builtin_stack_restore. - Note restore right before a noreturn function is not needed. - And skip some cheap calls that will most likely become an instruction. - Restoring the stack before a call is important to be able to keep - stack usage down so that call does not run out of stack. */ - - -static tree -optimize_stack_restore (gimple_stmt_iterator i) -{ - tree callee; - gimple *stmt; - - basic_block bb = gsi_bb (i); - gimple *call = gsi_stmt (i); - - if (gimple_code (call) != GIMPLE_CALL - || gimple_call_num_args (call) != 1 - || TREE_CODE (gimple_call_arg (call, 0)) != SSA_NAME - || !POINTER_TYPE_P (TREE_TYPE (gimple_call_arg (call, 0)))) - return NULL_TREE; - - for (gsi_next (&i); !gsi_end_p (i); gsi_next (&i)) - { - stmt = gsi_stmt (i); - if (is_a (stmt)) - return NULL_TREE; - gcall *call = dyn_cast(stmt); - if (!call) - continue; - - /* We can remove the restore in front of noreturn - calls. Since the restore will happen either - via an unwind/longjmp or not at all. */ - if (gimple_call_noreturn_p (call)) - break; - - /* Internal calls are ok, to bypass - check first since fndecl will be null. */ - if (gimple_call_internal_p (call)) - continue; - - callee = gimple_call_fndecl (call); - /* Non-builtin calls are not ok. */ - if (!callee - || !fndecl_built_in_p (callee)) - return NULL_TREE; - - /* Do not remove stack updates before strub leave. */ - if (fndecl_built_in_p (callee, BUILT_IN___STRUB_LEAVE) - /* Alloca calls are not ok either. */ - || fndecl_builtin_alloc_p (callee)) - return NULL_TREE; - - if (fndecl_built_in_p (callee, BUILT_IN_STACK_RESTORE)) - goto second_stack_restore; - - /* If not a simple or inexpensive builtin, then it is not ok either. */ - if (!is_simple_builtin (callee) - && !is_inexpensive_builtin (callee)) - return NULL_TREE; - } - - /* Allow one successor of the exit block, or zero successors. */ - switch (EDGE_COUNT (bb->succs)) - { - case 0: - break; - case 1: - if (single_succ_edge (bb)->dest != EXIT_BLOCK_PTR_FOR_FN (cfun)) - return NULL_TREE; - break; - default: - return NULL_TREE; - } - second_stack_restore: - - /* If there's exactly one use, then zap the call to __builtin_stack_save. - If there are multiple uses, then the last one should remove the call. - In any case, whether the call to __builtin_stack_save can be removed - or not is irrelevant to removing the call to __builtin_stack_restore. */ - if (has_single_use (gimple_call_arg (call, 0))) - { - gimple *stack_save = SSA_NAME_DEF_STMT (gimple_call_arg (call, 0)); - if (is_gimple_call (stack_save)) - { - callee = gimple_call_fndecl (stack_save); - if (callee && fndecl_built_in_p (callee, BUILT_IN_STACK_SAVE)) - { - gimple_stmt_iterator stack_save_gsi; - tree rhs; - - stack_save_gsi = gsi_for_stmt (stack_save); - rhs = build_int_cst (TREE_TYPE (gimple_call_arg (call, 0)), 0); - replace_call_with_value (&stack_save_gsi, rhs); - } - } - } - - /* No effect, so the statement will be deleted. */ - return integer_zero_node; -} - /* If va_list type is a simple pointer and nothing special is needed, optimize __builtin_va_start (&ap, 0) into ap = __builtin_next_arg (0), __builtin_va_end (&ap) out as NOP and __builtin_va_copy into a simple @@ -4345,13 +4236,6 @@ pass_fold_builtins::execute (function *fun) switch (DECL_FUNCTION_CODE (callee)) { - case BUILT_IN_STACK_RESTORE: - result = optimize_stack_restore (i); - if (result) - break; - gsi_next (&i); - continue; - case BUILT_IN_UNREACHABLE: if (optimize_unreachable (i)) cfg_changed = true; diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc index 917f3d90f6c2..941b01f3d0e2 100644 --- a/gcc/tree-ssa-forwprop.cc +++ b/gcc/tree-ssa-forwprop.cc @@ -2132,6 +2132,116 @@ simplify_builtin_memcpy_memset (gimple_stmt_iterator *gsi_p, gcall *stmt2) } } + +/* Try to optimize out __builtin_stack_restore. Optimize it out + if there is another __builtin_stack_restore in the same basic + block and no calls or ASM_EXPRs are in between, or if this block's + only outgoing edge is to EXIT_BLOCK and there are no calls or + ASM_EXPRs after this __builtin_stack_restore. + Note restore right before a noreturn function is not needed. + And skip some cheap calls that will most likely become an instruction. + Restoring the stack before a call is important to be able to keep + stack usage down so that call does not run out of stack. */ + + +static bool +optimize_stack_restore (gimple_stmt_iterator *gsi, gimple *call) +{ + if (!(cfun->curr_properties & PROP_last_full_fold)) + return false; + tree callee; + gimple *stmt; + + basic_block bb = gsi_bb (*gsi); + + if (gimple_call_num_args (call) != 1 + || TREE_CODE (gimple_call_arg (call, 0)) != SSA_NAME + || !POINTER_TYPE_P (TREE_TYPE (gimple_call_arg (call, 0)))) + return false; + + gimple_stmt_iterator i = *gsi; + for (gsi_next (&i); !gsi_end_p (i); gsi_next (&i)) + { + stmt = gsi_stmt (i); + if (is_a (stmt)) + return false; + gcall *call = dyn_cast(stmt); + if (!call) + continue; + + /* We can remove the restore in front of noreturn + calls. Since the restore will happen either + via an unwind/longjmp or not at all. */ + if (gimple_call_noreturn_p (call)) + break; + + /* Internal calls are ok, to bypass + check first since fndecl will be null. */ + if (gimple_call_internal_p (call)) + continue; + + callee = gimple_call_fndecl (call); + /* Non-builtin calls are not ok. */ + if (!callee + || !fndecl_built_in_p (callee)) + return false; + + /* Do not remove stack updates before strub leave. */ + if (fndecl_built_in_p (callee, BUILT_IN___STRUB_LEAVE) + /* Alloca calls are not ok either. */ + || fndecl_builtin_alloc_p (callee)) + return false; + + if (fndecl_built_in_p (callee, BUILT_IN_STACK_RESTORE)) + goto second_stack_restore; + + /* If not a simple or inexpensive builtin, then it is not ok either. */ + if (!is_simple_builtin (callee) + && !is_inexpensive_builtin (callee)) + return false; + } + + /* Allow one successor of the exit block, or zero successors. */ + switch (EDGE_COUNT (bb->succs)) + { + case 0: + break; + case 1: + if (single_succ_edge (bb)->dest != EXIT_BLOCK_PTR_FOR_FN (cfun)) + return false; + break; + default: + return false; + } + second_stack_restore: + + /* If there's exactly one use, then zap the call to __builtin_stack_save. + If there are multiple uses, then the last one should remove the call. + In any case, whether the call to __builtin_stack_save can be removed + or not is irrelevant to removing the call to __builtin_stack_restore. */ + if (has_single_use (gimple_call_arg (call, 0))) + { + gimple *stack_save = SSA_NAME_DEF_STMT (gimple_call_arg (call, 0)); + if (is_gimple_call (stack_save)) + { + callee = gimple_call_fndecl (stack_save); + if (callee && fndecl_built_in_p (callee, BUILT_IN_STACK_SAVE)) + { + gimple_stmt_iterator stack_save_gsi; + tree rhs; + + stack_save_gsi = gsi_for_stmt (stack_save); + rhs = build_int_cst (TREE_TYPE (gimple_call_arg (call, 0)), 0); + replace_call_with_value (&stack_save_gsi, rhs); + } + } + } + + /* No effect, so the statement will be deleted. */ + replace_call_with_value (gsi, NULL_TREE); + return true; +} + /* *GSI_P is a GIMPLE_CALL to a builtin function. Optimize memcpy (p, "abcd", 4); @@ -2163,6 +2273,8 @@ simplify_builtin_call (gimple_stmt_iterator *gsi_p, tree callee2, bool full_walk switch (DECL_FUNCTION_CODE (callee2)) { + case BUILT_IN_STACK_RESTORE: + return optimize_stack_restore (gsi_p, as_a(stmt2)); case BUILT_IN_MEMCMP: case BUILT_IN_MEMCMP_EQ: return simplify_builtin_memcmp (gsi_p, as_a(stmt2)); From 415f21fed2c5411cc6a378317f7142b22a623358 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Tue, 23 Sep 2025 12:14:47 -0700 Subject: [PATCH 059/216] fab/forwprop: Move optimize_unreachable to forwprop [PR121762] This moves the optimize_unreachable to forwprop from fab. There is a slightly optimization here in that the first statement is checked and outside of the main fold loop. And if the statement is __builtin_unreachable, then call optimize_unreachable. Changes since v1: * v2: simplified the check for BUILT_IN_UNREACHABLE to just use gimple_call_builtin_p. Move the code after checking for not executable blocks. Bootstrapped and tested on x86_64-linux-gnu. PR tree-optimization/121762 gcc/ChangeLog: * tree-ssa-ccp.cc (optimize_unreachable): Move to tree-ssa-forwprop.cc (pass_fold_builtins::execute): Remove handling of __builtin_unreachable. * tree-ssa-forwprop.cc (optimize_unreachable): New function from tree-ssa-ccp.cc. Change argument to bb. Remove check on first statement being the __builtin_unreachable since it is handled already. (pass_forwprop::execute): Handle first statement as being __builtin_unreachable by calling optimize_unreachable. Signed-off-by: Andrew Pinski --- gcc/tree-ssa-ccp.cc | 58 ---------------------------------------- gcc/tree-ssa-forwprop.cc | 58 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/gcc/tree-ssa-ccp.cc b/gcc/tree-ssa-ccp.cc index 739d3be91293..b69a8b64a61b 100644 --- a/gcc/tree-ssa-ccp.cc +++ b/gcc/tree-ssa-ccp.cc @@ -3202,58 +3202,6 @@ optimize_stdarg_builtin (gimple_stmt_iterator *gsi, gimple *call) } } -/* Attemp to make the block of __builtin_unreachable I unreachable by changing - the incoming jumps. Return true if at least one jump was changed. */ - -static bool -optimize_unreachable (gimple_stmt_iterator i) -{ - basic_block bb = gsi_bb (i); - gimple_stmt_iterator gsi; - gimple *stmt; - edge_iterator ei; - edge e; - bool ret; - - if (flag_sanitize & SANITIZE_UNREACHABLE) - return false; - gsi = gsi_start_nondebug_after_labels_bb (bb); - /* Only handle the case that __builtin_unreachable is the first - statement in the block. We rely on DCE to remove stmts - without side-effects before __builtin_unreachable. */ - if (*gsi != *i) - return false; - - ret = false; - FOR_EACH_EDGE (e, ei, bb->preds) - { - gsi = gsi_last_bb (e->src); - if (gsi_end_p (gsi)) - continue; - - stmt = gsi_stmt (gsi); - if (gcond *cond_stmt = dyn_cast (stmt)) - { - if (e->flags & EDGE_TRUE_VALUE) - gimple_cond_make_false (cond_stmt); - else if (e->flags & EDGE_FALSE_VALUE) - gimple_cond_make_true (cond_stmt); - else - gcc_unreachable (); - update_stmt (cond_stmt); - } - else - { - /* Todo: handle other cases. Note that unreachable switch case - statements have already been removed. */ - continue; - } - - ret = true; - } - - return ret; -} /* Convert _1 = __atomic_fetch_or_* (ptr_6, 1, _3); @@ -4235,12 +4183,6 @@ pass_fold_builtins::execute (function *fun) tree result = NULL_TREE; switch (DECL_FUNCTION_CODE (callee)) { - - case BUILT_IN_UNREACHABLE: - if (optimize_unreachable (i)) - cfg_changed = true; - break; - case BUILT_IN_ATOMIC_ADD_FETCH_1: case BUILT_IN_ATOMIC_ADD_FETCH_2: case BUILT_IN_ATOMIC_ADD_FETCH_4: diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc index 941b01f3d0e2..9307e2162078 100644 --- a/gcc/tree-ssa-forwprop.cc +++ b/gcc/tree-ssa-forwprop.cc @@ -4906,6 +4906,49 @@ class pass_forwprop : public gimple_opt_pass bool m_full_walk = false; }; // class pass_forwprop +/* Attemp to make the BB block of __builtin_unreachable unreachable by changing + the incoming jumps. Return true if at least one jump was changed. */ + +static bool +optimize_unreachable (basic_block bb) +{ + gimple_stmt_iterator gsi; + gimple *stmt; + edge_iterator ei; + edge e; + bool ret; + + ret = false; + FOR_EACH_EDGE (e, ei, bb->preds) + { + gsi = gsi_last_bb (e->src); + if (gsi_end_p (gsi)) + continue; + + stmt = gsi_stmt (gsi); + if (gcond *cond_stmt = dyn_cast (stmt)) + { + if (e->flags & EDGE_TRUE_VALUE) + gimple_cond_make_false (cond_stmt); + else if (e->flags & EDGE_FALSE_VALUE) + gimple_cond_make_true (cond_stmt); + else + gcc_unreachable (); + update_stmt (cond_stmt); + } + else + { + /* Todo: handle other cases. Note that unreachable switch case + statements have already been removed. */ + continue; + } + + ret = true; + } + + return ret; +} + unsigned int pass_forwprop::execute (function *fun) { @@ -4973,6 +5016,21 @@ pass_forwprop::execute (function *fun) if (!any) continue; + /* Remove conditions that go directly to unreachable when this is the last forwprop. */ + if (last_p + && !(flag_sanitize & SANITIZE_UNREACHABLE)) + { + gimple_stmt_iterator gsi; + gsi = gsi_start_nondebug_after_labels_bb (bb); + if (!gsi_end_p (gsi) + && gimple_call_builtin_p (*gsi, BUILT_IN_UNREACHABLE) + && optimize_unreachable (bb)) + { + cfg_changed = true; + continue; + } + } + /* Record degenerate PHIs in the lattice. */ for (gphi_iterator si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next (&si)) From 6eff00d2fc3b709d27f7c3727168e1f8336246a5 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Tue, 23 Sep 2025 12:58:37 -0700 Subject: [PATCH 060/216] fab/gimple-fold/forwprop: Move va_args folding to gimple_fold [PR121762] This moves the va_args functions folding to gimple-fold. Right now this is still kept for the last folding but later it can move sometime after stdargs pass is run by checking PROP_gimple_lva instead. Also for forwprop, if a folding happens for the last folding we need to maybe update the variables as non-addressable like what is done in fab. It was originally added in fab for __builtin_sincos->__builtin_cexpi folding (PR39643). After the removal of fab, this will also be the last pass which updates address taken too. PR tree-optimization/121762 gcc/ChangeLog: * gimple-fold.cc (gimple_fold_builtin_stdarg): New function, moved from tree-ssa-ccp.cc (optimize_stdarg_builtin). (gimple_fold_builtin): Call gimple_fold_builtin_stdarg for va_start, va_copy and va_end. * tree-ssa-ccp.cc (optimize_stdarg_builtin): Remove. (pass_fold_builtins::execute): Remove handling of va_start, va_copy and va_end. * tree-ssa-forwprop.cc (pass_forwprop::execute): Update todos if fold_stmt return true if last forwprop to include TODO_update_address_taken. Signed-off-by: Andrew Pinski --- gcc/gimple-fold.cc | 125 ++++++++++++++++++++++++++++++++++++++ gcc/tree-ssa-ccp.cc | 126 --------------------------------------- gcc/tree-ssa-forwprop.cc | 5 ++ 3 files changed, 130 insertions(+), 126 deletions(-) diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc index a12fb5e8eab1..2f64de2fb414 100644 --- a/gcc/gimple-fold.cc +++ b/gcc/gimple-fold.cc @@ -5252,6 +5252,127 @@ gimple_fold_builtin_assume_aligned (gimple_stmt_iterator *gsi) return true; } +/* If va_list type is a simple pointer and nothing special is needed, + optimize __builtin_va_start (&ap, 0) into ap = __builtin_next_arg (0), + __builtin_va_end (&ap) out as NOP and __builtin_va_copy into a simple + pointer assignment. Returns true if a change happened. */ + +static bool +gimple_fold_builtin_stdarg (gimple_stmt_iterator *gsi, gcall *call) +{ + /* These shouldn't be folded before pass_stdarg. */ + if (!(cfun->curr_properties & PROP_last_full_fold)) + return false; + + tree callee, lhs, rhs, cfun_va_list; + bool va_list_simple_ptr; + location_t loc = gimple_location (call); + gimple *nstmt0, *nstmt; + tree tlhs, oldvdef, newvdef; + + callee = gimple_call_fndecl (call); + + cfun_va_list = targetm.fn_abi_va_list (callee); + va_list_simple_ptr = POINTER_TYPE_P (cfun_va_list) + && (TREE_TYPE (cfun_va_list) == void_type_node + || TREE_TYPE (cfun_va_list) == char_type_node); + + switch (DECL_FUNCTION_CODE (callee)) + { + case BUILT_IN_VA_START: + if (!va_list_simple_ptr + || targetm.expand_builtin_va_start != NULL + || !builtin_decl_explicit_p (BUILT_IN_NEXT_ARG)) + return false; + + if (gimple_call_num_args (call) != 2) + return false; + + lhs = gimple_call_arg (call, 0); + if (!POINTER_TYPE_P (TREE_TYPE (lhs)) + || TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (lhs))) + != TYPE_MAIN_VARIANT (cfun_va_list)) + return false; + /* Create `tlhs = __builtin_next_arg(0);`. */ + tlhs = make_ssa_name (cfun_va_list); + nstmt0 = gimple_build_call (builtin_decl_explicit (BUILT_IN_NEXT_ARG), 1, integer_zero_node); + lhs = fold_build2 (MEM_REF, cfun_va_list, lhs, build_zero_cst (TREE_TYPE (lhs))); + gimple_call_set_lhs (nstmt0, tlhs); + gimple_set_location (nstmt0, loc); + gimple_move_vops (nstmt0, call); + gsi_replace (gsi, nstmt0, false); + oldvdef = gimple_vdef (nstmt0); + newvdef = make_ssa_name (gimple_vop (cfun), nstmt0); + gimple_set_vdef (nstmt0, newvdef); + + /* Create `*lhs = tlhs;`. */ + nstmt = gimple_build_assign (lhs, tlhs); + gimple_set_location (nstmt, loc); + gimple_set_vuse (nstmt, newvdef); + gimple_set_vdef (nstmt, oldvdef); + SSA_NAME_DEF_STMT (oldvdef) = nstmt; + gsi_insert_after (gsi, nstmt, GSI_NEW_STMT); + + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "Simplified\n "); + print_gimple_stmt (dump_file, call, 0, dump_flags); + fprintf (dump_file, "into\n "); + print_gimple_stmt (dump_file, nstmt0, 0, dump_flags); + fprintf (dump_file, " "); + print_gimple_stmt (dump_file, nstmt, 0, dump_flags); + } + return true; + + case BUILT_IN_VA_COPY: + if (!va_list_simple_ptr) + return false; + + if (gimple_call_num_args (call) != 2) + return false; + + lhs = gimple_call_arg (call, 0); + if (!POINTER_TYPE_P (TREE_TYPE (lhs)) + || TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (lhs))) + != TYPE_MAIN_VARIANT (cfun_va_list)) + return false; + rhs = gimple_call_arg (call, 1); + if (TYPE_MAIN_VARIANT (TREE_TYPE (rhs)) + != TYPE_MAIN_VARIANT (cfun_va_list)) + return false; + + lhs = fold_build2 (MEM_REF, cfun_va_list, lhs, build_zero_cst (TREE_TYPE (lhs))); + nstmt = gimple_build_assign (lhs, rhs); + gimple_set_location (nstmt, loc); + gimple_move_vops (nstmt, call); + gsi_replace (gsi, nstmt, false); + + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "Simplified\n "); + print_gimple_stmt (dump_file, call, 0, dump_flags); + fprintf (dump_file, "into\n "); + print_gimple_stmt (dump_file, nstmt, 0, dump_flags); + } + return true; + + case BUILT_IN_VA_END: + /* No effect, so the statement will be deleted. */ + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "Removed\n "); + print_gimple_stmt (dump_file, call, 0, dump_flags); + } + unlink_stmt_vdef (call); + release_defs (call); + gsi_replace (gsi, gimple_build_nop (), true); + return true; + + default: + gcc_unreachable (); + } +} + /* Fold the non-target builtin at *GSI and return whether any simplification was made. */ @@ -5270,6 +5391,10 @@ gimple_fold_builtin (gimple_stmt_iterator *gsi) enum built_in_function fcode = DECL_FUNCTION_CODE (callee); switch (fcode) { + case BUILT_IN_VA_START: + case BUILT_IN_VA_END: + case BUILT_IN_VA_COPY: + return gimple_fold_builtin_stdarg (gsi, stmt); case BUILT_IN_BCMP: return gimple_fold_builtin_bcmp (gsi); case BUILT_IN_BCOPY: diff --git a/gcc/tree-ssa-ccp.cc b/gcc/tree-ssa-ccp.cc index b69a8b64a61b..2d16395ac68e 100644 --- a/gcc/tree-ssa-ccp.cc +++ b/gcc/tree-ssa-ccp.cc @@ -3085,124 +3085,6 @@ make_pass_ccp (gcc::context *ctxt) return new pass_ccp (ctxt); } -/* If va_list type is a simple pointer and nothing special is needed, - optimize __builtin_va_start (&ap, 0) into ap = __builtin_next_arg (0), - __builtin_va_end (&ap) out as NOP and __builtin_va_copy into a simple - pointer assignment. Returns true if a change happened. */ - -static bool -optimize_stdarg_builtin (gimple_stmt_iterator *gsi, gimple *call) -{ - tree callee, lhs, rhs, cfun_va_list; - bool va_list_simple_ptr; - location_t loc = gimple_location (call); - gimple *nstmt0, *nstmt; - tree tlhs, oldvdef, newvdef; - - callee = gimple_call_fndecl (call); - - cfun_va_list = targetm.fn_abi_va_list (callee); - va_list_simple_ptr = POINTER_TYPE_P (cfun_va_list) - && (TREE_TYPE (cfun_va_list) == void_type_node - || TREE_TYPE (cfun_va_list) == char_type_node); - - switch (DECL_FUNCTION_CODE (callee)) - { - case BUILT_IN_VA_START: - if (!va_list_simple_ptr - || targetm.expand_builtin_va_start != NULL - || !builtin_decl_explicit_p (BUILT_IN_NEXT_ARG)) - return false; - - if (gimple_call_num_args (call) != 2) - return false; - - lhs = gimple_call_arg (call, 0); - if (!POINTER_TYPE_P (TREE_TYPE (lhs)) - || TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (lhs))) - != TYPE_MAIN_VARIANT (cfun_va_list)) - return false; - /* Create `tlhs = __builtin_next_arg(0);`. */ - tlhs = make_ssa_name (cfun_va_list); - nstmt0 = gimple_build_call (builtin_decl_explicit (BUILT_IN_NEXT_ARG), 1, integer_zero_node); - lhs = fold_build2 (MEM_REF, cfun_va_list, lhs, build_zero_cst (TREE_TYPE (lhs))); - gimple_call_set_lhs (nstmt0, tlhs); - gimple_set_location (nstmt0, loc); - gimple_move_vops (nstmt0, call); - gsi_replace (gsi, nstmt0, false); - oldvdef = gimple_vdef (nstmt0); - newvdef = make_ssa_name (gimple_vop (cfun), nstmt0); - gimple_set_vdef (nstmt0, newvdef); - - /* Create `*lhs = tlhs;`. */ - nstmt = gimple_build_assign (lhs, tlhs); - gimple_set_location (nstmt, loc); - gimple_set_vuse (nstmt, newvdef); - gimple_set_vdef (nstmt, oldvdef); - SSA_NAME_DEF_STMT (oldvdef) = nstmt; - gsi_insert_after (gsi, nstmt, GSI_NEW_STMT); - - if (dump_file && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, "Simplified\n "); - print_gimple_stmt (dump_file, call, 0, dump_flags); - fprintf (dump_file, "into\n "); - print_gimple_stmt (dump_file, nstmt0, 0, dump_flags); - fprintf (dump_file, " "); - print_gimple_stmt (dump_file, nstmt, 0, dump_flags); - } - return true; - - case BUILT_IN_VA_COPY: - if (!va_list_simple_ptr) - return false; - - if (gimple_call_num_args (call) != 2) - return false; - - lhs = gimple_call_arg (call, 0); - if (!POINTER_TYPE_P (TREE_TYPE (lhs)) - || TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (lhs))) - != TYPE_MAIN_VARIANT (cfun_va_list)) - return false; - rhs = gimple_call_arg (call, 1); - if (TYPE_MAIN_VARIANT (TREE_TYPE (rhs)) - != TYPE_MAIN_VARIANT (cfun_va_list)) - return false; - - lhs = fold_build2 (MEM_REF, cfun_va_list, lhs, build_zero_cst (TREE_TYPE (lhs))); - nstmt = gimple_build_assign (lhs, rhs); - gimple_set_location (nstmt, loc); - gimple_move_vops (nstmt, call); - gsi_replace (gsi, nstmt, false); - - if (dump_file && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, "Simplified\n "); - print_gimple_stmt (dump_file, call, 0, dump_flags); - fprintf (dump_file, "into\n "); - print_gimple_stmt (dump_file, nstmt, 0, dump_flags); - } - return true; - - case BUILT_IN_VA_END: - /* No effect, so the statement will be deleted. */ - if (dump_file && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, "Removed\n "); - print_gimple_stmt (dump_file, call, 0, dump_flags); - } - unlink_stmt_vdef (call); - release_defs (call); - gsi_replace (gsi, gimple_build_nop (), true); - return true; - - default: - gcc_unreachable (); - } -} - - /* Convert _1 = __atomic_fetch_or_* (ptr_6, 1, _3); _7 = ~_1; @@ -4339,14 +4221,6 @@ pass_fold_builtins::execute (function *fun) false); break; - case BUILT_IN_VA_START: - case BUILT_IN_VA_END: - case BUILT_IN_VA_COPY: - /* These shouldn't be folded before pass_stdarg. */ - if (optimize_stdarg_builtin (&i, stmt)) - todoflags |= TODO_update_address_taken; - break; - default:; } diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc index 9307e2162078..2c6e1eab9cdb 100644 --- a/gcc/tree-ssa-forwprop.cc +++ b/gcc/tree-ssa-forwprop.cc @@ -5463,6 +5463,11 @@ pass_forwprop::execute (function *fun) if (fold_stmt (&gsi, fwprop_ssa_val, simple_dce_worklist)) { changed = true; + /* There is no updating of the address + taken after the last forwprop so update + the addresses when a folding happened. */ + if (last_p) + todoflags |= TODO_update_address_taken; stmt = gsi_stmt (gsi); /* Cleanup the CFG if we simplified a condition to true or false. */ From d7a3038e2be0bc6e29d077cd7e2534ef3048fd5c Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Tue, 23 Sep 2025 16:43:36 -0700 Subject: [PATCH 061/216] fab: Use a macro for the atomic/sync builtins case This is a small cleanup to make it easier to move this part of fab to somewhere else. And it makes it easier to understand which builtins are being used here and also less repeated code. Bootstrapped and tested on x86_64-linux-gnu. gcc/ChangeLog: * tree-ssa-ccp.cc (CASE_ATOMIC): New defined. (CASE_ATOMIC_CMP0): New define. (CASE_ATOMIC_BIT_TEST_AND): New defined. (pass_fold_builtins::execute): Use CASE_ATOMIC, CASE_ATOMIC_CMP0, and CASE_ATOMIC_BIT_TEST_AND. Signed-off-by: Andrew Pinski --- gcc/tree-ssa-ccp.cc | 171 +++++++++----------------------------------- 1 file changed, 35 insertions(+), 136 deletions(-) diff --git a/gcc/tree-ssa-ccp.cc b/gcc/tree-ssa-ccp.cc index 2d16395ac68e..021eb22eadd6 100644 --- a/gcc/tree-ssa-ccp.cc +++ b/gcc/tree-ssa-ccp.cc @@ -4065,85 +4065,45 @@ pass_fold_builtins::execute (function *fun) tree result = NULL_TREE; switch (DECL_FUNCTION_CODE (callee)) { - case BUILT_IN_ATOMIC_ADD_FETCH_1: - case BUILT_IN_ATOMIC_ADD_FETCH_2: - case BUILT_IN_ATOMIC_ADD_FETCH_4: - case BUILT_IN_ATOMIC_ADD_FETCH_8: - case BUILT_IN_ATOMIC_ADD_FETCH_16: - optimize_atomic_op_fetch_cmp_0 (&i, - IFN_ATOMIC_ADD_FETCH_CMP_0, - true); - break; - case BUILT_IN_SYNC_ADD_AND_FETCH_1: - case BUILT_IN_SYNC_ADD_AND_FETCH_2: - case BUILT_IN_SYNC_ADD_AND_FETCH_4: - case BUILT_IN_SYNC_ADD_AND_FETCH_8: - case BUILT_IN_SYNC_ADD_AND_FETCH_16: - optimize_atomic_op_fetch_cmp_0 (&i, - IFN_ATOMIC_ADD_FETCH_CMP_0, - false); - break; - - case BUILT_IN_ATOMIC_SUB_FETCH_1: - case BUILT_IN_ATOMIC_SUB_FETCH_2: - case BUILT_IN_ATOMIC_SUB_FETCH_4: - case BUILT_IN_ATOMIC_SUB_FETCH_8: - case BUILT_IN_ATOMIC_SUB_FETCH_16: - optimize_atomic_op_fetch_cmp_0 (&i, - IFN_ATOMIC_SUB_FETCH_CMP_0, - true); - break; - case BUILT_IN_SYNC_SUB_AND_FETCH_1: - case BUILT_IN_SYNC_SUB_AND_FETCH_2: - case BUILT_IN_SYNC_SUB_AND_FETCH_4: - case BUILT_IN_SYNC_SUB_AND_FETCH_8: - case BUILT_IN_SYNC_SUB_AND_FETCH_16: - optimize_atomic_op_fetch_cmp_0 (&i, - IFN_ATOMIC_SUB_FETCH_CMP_0, - false); +#define CASE_ATOMIC(NAME) \ + case BUILT_IN_##NAME##_1: \ + case BUILT_IN_##NAME##_2: \ + case BUILT_IN_##NAME##_4: \ + case BUILT_IN_##NAME##_8: \ + case BUILT_IN_##NAME##_16 +#define CASE_ATOMIC_CMP0(ATOMIC, SYNC) \ + CASE_ATOMIC(ATOMIC_##ATOMIC): \ + optimize_atomic_op_fetch_cmp_0 (&i, \ + IFN_ATOMIC_##ATOMIC##_CMP_0, \ + true); \ + break; \ + CASE_ATOMIC(SYNC_##SYNC): \ + optimize_atomic_op_fetch_cmp_0 (&i, \ + IFN_ATOMIC_##ATOMIC##_CMP_0, \ + false); \ break; - case BUILT_IN_ATOMIC_FETCH_OR_1: - case BUILT_IN_ATOMIC_FETCH_OR_2: - case BUILT_IN_ATOMIC_FETCH_OR_4: - case BUILT_IN_ATOMIC_FETCH_OR_8: - case BUILT_IN_ATOMIC_FETCH_OR_16: - optimize_atomic_bit_test_and (&i, - IFN_ATOMIC_BIT_TEST_AND_SET, - true, false); - break; - case BUILT_IN_SYNC_FETCH_AND_OR_1: - case BUILT_IN_SYNC_FETCH_AND_OR_2: - case BUILT_IN_SYNC_FETCH_AND_OR_4: - case BUILT_IN_SYNC_FETCH_AND_OR_8: - case BUILT_IN_SYNC_FETCH_AND_OR_16: - optimize_atomic_bit_test_and (&i, - IFN_ATOMIC_BIT_TEST_AND_SET, - false, false); - break; - case BUILT_IN_ATOMIC_FETCH_XOR_1: - case BUILT_IN_ATOMIC_FETCH_XOR_2: - case BUILT_IN_ATOMIC_FETCH_XOR_4: - case BUILT_IN_ATOMIC_FETCH_XOR_8: - case BUILT_IN_ATOMIC_FETCH_XOR_16: - optimize_atomic_bit_test_and - (&i, IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT, true, false); - break; - case BUILT_IN_SYNC_FETCH_AND_XOR_1: - case BUILT_IN_SYNC_FETCH_AND_XOR_2: - case BUILT_IN_SYNC_FETCH_AND_XOR_4: - case BUILT_IN_SYNC_FETCH_AND_XOR_8: - case BUILT_IN_SYNC_FETCH_AND_XOR_16: - optimize_atomic_bit_test_and - (&i, IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT, false, false); + CASE_ATOMIC_CMP0(ADD_FETCH, ADD_AND_FETCH) + CASE_ATOMIC_CMP0(SUB_FETCH, SUB_AND_FETCH) + CASE_ATOMIC_CMP0(AND_FETCH, AND_AND_FETCH) + CASE_ATOMIC_CMP0(OR_FETCH, OR_AND_FETCH) +#define CASE_ATOMIC_BIT_TEST_AND(ATOMIC, SYNC, FN, AFTER) \ + CASE_ATOMIC(ATOMIC_##ATOMIC): \ + optimize_atomic_bit_test_and (&i, \ + IFN_ATOMIC_BIT_TEST_AND_##FN, \ + true, AFTER); \ + break; \ + CASE_ATOMIC(SYNC_##SYNC): \ + optimize_atomic_bit_test_and (&i, \ + IFN_ATOMIC_BIT_TEST_AND_##FN, \ + false, AFTER); \ break; + CASE_ATOMIC_BIT_TEST_AND(FETCH_OR, FETCH_AND_OR, SET, false) + CASE_ATOMIC_BIT_TEST_AND(FETCH_XOR, FETCH_AND_XOR, COMPLEMENT, false) + CASE_ATOMIC_BIT_TEST_AND(FETCH_AND, FETCH_AND_AND, RESET, false) - case BUILT_IN_ATOMIC_XOR_FETCH_1: - case BUILT_IN_ATOMIC_XOR_FETCH_2: - case BUILT_IN_ATOMIC_XOR_FETCH_4: - case BUILT_IN_ATOMIC_XOR_FETCH_8: - case BUILT_IN_ATOMIC_XOR_FETCH_16: + CASE_ATOMIC(ATOMIC_XOR_FETCH): if (optimize_atomic_bit_test_and (&i, IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT, true, true)) break; @@ -4151,11 +4111,7 @@ pass_fold_builtins::execute (function *fun) IFN_ATOMIC_XOR_FETCH_CMP_0, true); break; - case BUILT_IN_SYNC_XOR_AND_FETCH_1: - case BUILT_IN_SYNC_XOR_AND_FETCH_2: - case BUILT_IN_SYNC_XOR_AND_FETCH_4: - case BUILT_IN_SYNC_XOR_AND_FETCH_8: - case BUILT_IN_SYNC_XOR_AND_FETCH_16: + CASE_ATOMIC(SYNC_XOR_AND_FETCH): if (optimize_atomic_bit_test_and (&i, IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT, false, true)) break; @@ -4164,63 +4120,6 @@ pass_fold_builtins::execute (function *fun) false); break; - case BUILT_IN_ATOMIC_FETCH_AND_1: - case BUILT_IN_ATOMIC_FETCH_AND_2: - case BUILT_IN_ATOMIC_FETCH_AND_4: - case BUILT_IN_ATOMIC_FETCH_AND_8: - case BUILT_IN_ATOMIC_FETCH_AND_16: - optimize_atomic_bit_test_and (&i, - IFN_ATOMIC_BIT_TEST_AND_RESET, - true, false); - break; - case BUILT_IN_SYNC_FETCH_AND_AND_1: - case BUILT_IN_SYNC_FETCH_AND_AND_2: - case BUILT_IN_SYNC_FETCH_AND_AND_4: - case BUILT_IN_SYNC_FETCH_AND_AND_8: - case BUILT_IN_SYNC_FETCH_AND_AND_16: - optimize_atomic_bit_test_and (&i, - IFN_ATOMIC_BIT_TEST_AND_RESET, - false, false); - break; - - case BUILT_IN_ATOMIC_AND_FETCH_1: - case BUILT_IN_ATOMIC_AND_FETCH_2: - case BUILT_IN_ATOMIC_AND_FETCH_4: - case BUILT_IN_ATOMIC_AND_FETCH_8: - case BUILT_IN_ATOMIC_AND_FETCH_16: - optimize_atomic_op_fetch_cmp_0 (&i, - IFN_ATOMIC_AND_FETCH_CMP_0, - true); - break; - case BUILT_IN_SYNC_AND_AND_FETCH_1: - case BUILT_IN_SYNC_AND_AND_FETCH_2: - case BUILT_IN_SYNC_AND_AND_FETCH_4: - case BUILT_IN_SYNC_AND_AND_FETCH_8: - case BUILT_IN_SYNC_AND_AND_FETCH_16: - optimize_atomic_op_fetch_cmp_0 (&i, - IFN_ATOMIC_AND_FETCH_CMP_0, - false); - break; - - case BUILT_IN_ATOMIC_OR_FETCH_1: - case BUILT_IN_ATOMIC_OR_FETCH_2: - case BUILT_IN_ATOMIC_OR_FETCH_4: - case BUILT_IN_ATOMIC_OR_FETCH_8: - case BUILT_IN_ATOMIC_OR_FETCH_16: - optimize_atomic_op_fetch_cmp_0 (&i, - IFN_ATOMIC_OR_FETCH_CMP_0, - true); - break; - case BUILT_IN_SYNC_OR_AND_FETCH_1: - case BUILT_IN_SYNC_OR_AND_FETCH_2: - case BUILT_IN_SYNC_OR_AND_FETCH_4: - case BUILT_IN_SYNC_OR_AND_FETCH_8: - case BUILT_IN_SYNC_OR_AND_FETCH_16: - optimize_atomic_op_fetch_cmp_0 (&i, - IFN_ATOMIC_OR_FETCH_CMP_0, - false); - break; - default:; } From e8a360e79a783250d6466636f6256c75dbb457b2 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Tue, 23 Sep 2025 21:08:24 -0700 Subject: [PATCH 062/216] fab/isel: Move atomic optimizations to isel from fab [PR121762] These atomic optimizations that are currently in fab are really an instruction selection like optimizations so let's move them to gimple-isel.cc. Note since this is the last manual optimization left in fab, I have simplified the code to only fold internal and normal builtins. The next patch will remove all of fab. Bootstrapped and tested on x86_64-linux-gnu. PR tree-optimization/121762 gcc/ChangeLog: * gimple-isel.cc (gimple_nop_atomic_bit_test_and_p): New decl. (gimple_nop_convert): Likewise. (convert_atomic_bit_not): Moved from tree-ssa-ccp.cc. (optimize_atomic_bit_test_and): Likewise. (optimize_atomic_op_fetch_cmp_0): Likewise. (gimple_isel_builtin_call): New function. (CASE_ATOMIC): Moved from tree-ssa-ccp.cc. (CASE_ATOMIC_CMP0): Likewise. (CASE_ATOMIC_BIT_TEST_AND): Likewise. (pass_gimple_isel::execute): For calls just call gimple_isel_builtin_call. * tree-ssa-ccp.cc (convert_atomic_bit_not): Move to gimple-isel.cc. (gimple_nop_atomic_bit_test_and_p): Likewise. (gimple_nop_convert): Likewise. (optimize_atomic_bit_test_and): Likewise. (optimize_atomic_op_fetch_cmp_0): Likewise. (pass_fold_builtins::execute): Just call fold_stmt for internal or normal bultin calls. (CASE_ATOMIC): Move to gimple-isel.cc. (CASE_ATOMIC_CMP0): Likewise. (CASE_ATOMIC_BIT_TEST_AND): Likewise. Signed-off-by: Andrew Pinski --- gcc/gimple-isel.cc | 956 ++++++++++++++++++++++++++++++++++++++++ gcc/tree-ssa-ccp.cc | 1005 +------------------------------------------ 2 files changed, 963 insertions(+), 998 deletions(-) diff --git a/gcc/gimple-isel.cc b/gcc/gimple-isel.cc index 0d2efcba547d..b5dc579ff467 100644 --- a/gcc/gimple-isel.cc +++ b/gcc/gimple-isel.cc @@ -39,6 +39,7 @@ along with GCC; see the file COPYING3. If not see #include "optabs.h" #include "gimple-fold.h" #include "internal-fn.h" +#include "fold-const.h" /* Expand all ARRAY_REF(VIEW_CONVERT_EXPR) gimple assignments into calls to internal function based on vector type of selected expansion. @@ -349,6 +350,15 @@ maybe_duplicate_comparison (gassign *stmt, basic_block bb) } } +/* match.pd function to match atomic_bit_test_and pattern which + has nop_convert: + _1 = __atomic_fetch_or_4 (&v, 1, 0); + _2 = (int) _1; + _5 = _2 & 1; + */ +extern bool gimple_nop_atomic_bit_test_and_p (tree, tree *, + tree (*) (tree)); +extern bool gimple_nop_convert (tree, tree*, tree (*) (tree)); namespace { @@ -382,6 +392,947 @@ class pass_gimple_isel : public gimple_opt_pass }; // class pass_gimple_isel + +/* Convert + _1 = __atomic_fetch_or_* (ptr_6, 1, _3); + _7 = ~_1; + _5 = (_Bool) _7; + to + _1 = __atomic_fetch_or_* (ptr_6, 1, _3); + _8 = _1 & 1; + _5 = _8 == 0; + and convert + _1 = __atomic_fetch_and_* (ptr_6, ~1, _3); + _7 = ~_1; + _4 = (_Bool) _7; + to + _1 = __atomic_fetch_and_* (ptr_6, ~1, _3); + _8 = _1 & 1; + _4 = (_Bool) _8; + + USE_STMT is the gimplt statement which uses the return value of + __atomic_fetch_or_*. LHS is the return value of __atomic_fetch_or_*. + MASK is the mask passed to __atomic_fetch_or_*. + */ + +static gimple * +convert_atomic_bit_not (enum internal_fn fn, gimple *use_stmt, + tree lhs, tree mask) +{ + tree and_mask; + if (fn == IFN_ATOMIC_BIT_TEST_AND_RESET) + { + /* MASK must be ~1. */ + if (!operand_equal_p (build_int_cst (TREE_TYPE (lhs), + ~HOST_WIDE_INT_1), mask, 0)) + return nullptr; + and_mask = build_int_cst (TREE_TYPE (lhs), 1); + } + else + { + /* MASK must be 1. */ + if (!operand_equal_p (build_int_cst (TREE_TYPE (lhs), 1), mask, 0)) + return nullptr; + and_mask = mask; + } + + tree use_lhs = gimple_assign_lhs (use_stmt); + + use_operand_p use_p; + gimple *use_not_stmt; + + if (!single_imm_use (use_lhs, &use_p, &use_not_stmt) + || !is_gimple_assign (use_not_stmt)) + return nullptr; + + if (!CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (use_not_stmt))) + return nullptr; + + tree use_not_lhs = gimple_assign_lhs (use_not_stmt); + if (TREE_CODE (TREE_TYPE (use_not_lhs)) != BOOLEAN_TYPE) + return nullptr; + + gimple_stmt_iterator gsi; + tree var = make_ssa_name (TREE_TYPE (lhs)); + /* use_stmt need to be removed after use_nop_stmt, + so use_lhs can be released. */ + gimple *use_stmt_removal = use_stmt; + use_stmt = gimple_build_assign (var, BIT_AND_EXPR, lhs, and_mask); + gsi = gsi_for_stmt (use_not_stmt); + gsi_insert_before (&gsi, use_stmt, GSI_NEW_STMT); + lhs = gimple_assign_lhs (use_not_stmt); + gimple *g = gimple_build_assign (lhs, EQ_EXPR, var, + build_zero_cst (TREE_TYPE (mask))); + gsi_insert_after (&gsi, g, GSI_NEW_STMT); + gsi = gsi_for_stmt (use_not_stmt); + gsi_remove (&gsi, true); + gsi = gsi_for_stmt (use_stmt_removal); + gsi_remove (&gsi, true); + return use_stmt; +} + +/* Optimize + mask_2 = 1 << cnt_1; + _4 = __atomic_fetch_or_* (ptr_6, mask_2, _3); + _5 = _4 & mask_2; + to + _4 = .ATOMIC_BIT_TEST_AND_SET (ptr_6, cnt_1, 0, _3); + _5 = _4; + If _5 is only used in _5 != 0 or _5 == 0 comparisons, 1 + is passed instead of 0, and the builtin just returns a zero + or 1 value instead of the actual bit. + Similarly for __sync_fetch_and_or_* (without the ", _3" part + in there), and/or if mask_2 is a power of 2 constant. + Similarly for xor instead of or, use ATOMIC_BIT_TEST_AND_COMPLEMENT + in that case. And similarly for and instead of or, except that + the second argument to the builtin needs to be one's complement + of the mask instead of mask. */ + +static bool +optimize_atomic_bit_test_and (gimple_stmt_iterator *gsip, + enum internal_fn fn, bool has_model_arg, + bool after) +{ + gimple *call = gsi_stmt (*gsip); + tree lhs = gimple_call_lhs (call); + use_operand_p use_p; + gimple *use_stmt; + tree mask; + optab optab; + + if (!flag_inline_atomics + || optimize_debug + || !gimple_call_builtin_p (call, BUILT_IN_NORMAL) + || !lhs + || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs) + || !single_imm_use (lhs, &use_p, &use_stmt) + || !is_gimple_assign (use_stmt) + || !gimple_vdef (call)) + return false; + + switch (fn) + { + case IFN_ATOMIC_BIT_TEST_AND_SET: + optab = atomic_bit_test_and_set_optab; + break; + case IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT: + optab = atomic_bit_test_and_complement_optab; + break; + case IFN_ATOMIC_BIT_TEST_AND_RESET: + optab = atomic_bit_test_and_reset_optab; + break; + default: + return false; + } + + tree bit = nullptr; + + mask = gimple_call_arg (call, 1); + tree_code rhs_code = gimple_assign_rhs_code (use_stmt); + if (rhs_code != BIT_AND_EXPR) + { + if (rhs_code != NOP_EXPR && rhs_code != BIT_NOT_EXPR) + return false; + + tree use_lhs = gimple_assign_lhs (use_stmt); + if (TREE_CODE (use_lhs) == SSA_NAME + && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (use_lhs)) + return false; + + tree use_rhs = gimple_assign_rhs1 (use_stmt); + if (lhs != use_rhs) + return false; + + if (optab_handler (optab, TYPE_MODE (TREE_TYPE (lhs))) + == CODE_FOR_nothing) + return false; + + gimple *g; + gimple_stmt_iterator gsi; + tree var; + int ibit = -1; + + if (rhs_code == BIT_NOT_EXPR) + { + g = convert_atomic_bit_not (fn, use_stmt, lhs, mask); + if (!g) + return false; + use_stmt = g; + ibit = 0; + } + else if (TREE_CODE (TREE_TYPE (use_lhs)) == BOOLEAN_TYPE) + { + tree and_mask; + if (fn == IFN_ATOMIC_BIT_TEST_AND_RESET) + { + /* MASK must be ~1. */ + if (!operand_equal_p (build_int_cst (TREE_TYPE (lhs), + ~HOST_WIDE_INT_1), + mask, 0)) + return false; + + /* Convert + _1 = __atomic_fetch_and_* (ptr_6, ~1, _3); + _4 = (_Bool) _1; + to + _1 = __atomic_fetch_and_* (ptr_6, ~1, _3); + _5 = _1 & 1; + _4 = (_Bool) _5; + */ + and_mask = build_int_cst (TREE_TYPE (lhs), 1); + } + else + { + and_mask = build_int_cst (TREE_TYPE (lhs), 1); + if (!operand_equal_p (and_mask, mask, 0)) + return false; + + /* Convert + _1 = __atomic_fetch_or_* (ptr_6, 1, _3); + _4 = (_Bool) _1; + to + _1 = __atomic_fetch_or_* (ptr_6, 1, _3); + _5 = _1 & 1; + _4 = (_Bool) _5; + */ + } + var = make_ssa_name (TREE_TYPE (use_rhs)); + replace_uses_by (use_rhs, var); + g = gimple_build_assign (var, BIT_AND_EXPR, use_rhs, + and_mask); + gsi = gsi_for_stmt (use_stmt); + gsi_insert_before (&gsi, g, GSI_NEW_STMT); + use_stmt = g; + ibit = 0; + } + else if (TYPE_PRECISION (TREE_TYPE (use_lhs)) + <= TYPE_PRECISION (TREE_TYPE (use_rhs))) + { + gimple *use_nop_stmt; + if (!single_imm_use (use_lhs, &use_p, &use_nop_stmt) + || (!is_gimple_assign (use_nop_stmt) + && gimple_code (use_nop_stmt) != GIMPLE_COND)) + return false; + /* Handle both + _4 = _5 < 0; + and + if (_5 < 0) + */ + tree use_nop_lhs = nullptr; + rhs_code = ERROR_MARK; + if (is_gimple_assign (use_nop_stmt)) + { + use_nop_lhs = gimple_assign_lhs (use_nop_stmt); + rhs_code = gimple_assign_rhs_code (use_nop_stmt); + } + if (!use_nop_lhs || rhs_code != BIT_AND_EXPR) + { + /* Also handle + if (_5 < 0) + */ + if (use_nop_lhs + && TREE_CODE (use_nop_lhs) == SSA_NAME + && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (use_nop_lhs)) + return false; + if (use_nop_lhs && rhs_code == BIT_NOT_EXPR) + { + /* Handle + _7 = ~_2; + */ + g = convert_atomic_bit_not (fn, use_nop_stmt, lhs, + mask); + if (!g) + return false; + /* Convert + _1 = __atomic_fetch_or_4 (ptr_6, 1, _3); + _2 = (int) _1; + _7 = ~_2; + _5 = (_Bool) _7; + to + _1 = __atomic_fetch_or_4 (ptr_6, ~1, _3); + _8 = _1 & 1; + _5 = _8 == 0; + and convert + _1 = __atomic_fetch_and_4 (ptr_6, ~1, _3); + _2 = (int) _1; + _7 = ~_2; + _5 = (_Bool) _7; + to + _1 = __atomic_fetch_and_4 (ptr_6, 1, _3); + _8 = _1 & 1; + _5 = _8 == 0; + */ + gsi = gsi_for_stmt (use_stmt); + gsi_remove (&gsi, true); + use_stmt = g; + ibit = 0; + } + else + { + tree cmp_rhs1, cmp_rhs2; + if (use_nop_lhs) + { + /* Handle + _4 = _5 < 0; + */ + if (TREE_CODE (TREE_TYPE (use_nop_lhs)) + != BOOLEAN_TYPE) + return false; + cmp_rhs1 = gimple_assign_rhs1 (use_nop_stmt); + cmp_rhs2 = gimple_assign_rhs2 (use_nop_stmt); + } + else + { + /* Handle + if (_5 < 0) + */ + rhs_code = gimple_cond_code (use_nop_stmt); + cmp_rhs1 = gimple_cond_lhs (use_nop_stmt); + cmp_rhs2 = gimple_cond_rhs (use_nop_stmt); + } + if (rhs_code != GE_EXPR && rhs_code != LT_EXPR) + return false; + if (use_lhs != cmp_rhs1) + return false; + if (!integer_zerop (cmp_rhs2)) + return false; + + tree and_mask; + + unsigned HOST_WIDE_INT bytes + = tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (use_rhs))); + ibit = bytes * BITS_PER_UNIT - 1; + unsigned HOST_WIDE_INT highest + = HOST_WIDE_INT_1U << ibit; + + if (fn == IFN_ATOMIC_BIT_TEST_AND_RESET) + { + /* Get the signed maximum of the USE_RHS type. */ + and_mask = build_int_cst (TREE_TYPE (use_rhs), + highest - 1); + if (!operand_equal_p (and_mask, mask, 0)) + return false; + + /* Convert + _1 = __atomic_fetch_and_4 (ptr_6, 0x7fffffff, _3); + _5 = (signed int) _1; + _4 = _5 < 0 or _5 >= 0; + to + _1 = __atomic_fetch_and_4 (ptr_6, 0x7fffffff, _3); + _6 = _1 & 0x80000000; + _4 = _6 != 0 or _6 == 0; + and convert + _1 = __atomic_fetch_and_4 (ptr_6, 0x7fffffff, _3); + _5 = (signed int) _1; + if (_5 < 0 or _5 >= 0) + to + _1 = __atomic_fetch_and_4 (ptr_6, 0x7fffffff, _3); + _6 = _1 & 0x80000000; + if (_6 != 0 or _6 == 0) + */ + and_mask = build_int_cst (TREE_TYPE (use_rhs), + highest); + } + else + { + /* Get the signed minimum of the USE_RHS type. */ + and_mask = build_int_cst (TREE_TYPE (use_rhs), + highest); + if (!operand_equal_p (and_mask, mask, 0)) + return false; + + /* Convert + _1 = __atomic_fetch_or_4 (ptr_6, 0x80000000, _3); + _5 = (signed int) _1; + _4 = _5 < 0 or _5 >= 0; + to + _1 = __atomic_fetch_or_4 (ptr_6, 0x80000000, _3); + _6 = _1 & 0x80000000; + _4 = _6 != 0 or _6 == 0; + and convert + _1 = __atomic_fetch_or_4 (ptr_6, 0x80000000, _3); + _5 = (signed int) _1; + if (_5 < 0 or _5 >= 0) + to + _1 = __atomic_fetch_or_4 (ptr_6, 0x80000000, _3); + _6 = _1 & 0x80000000; + if (_6 != 0 or _6 == 0) + */ + } + var = make_ssa_name (TREE_TYPE (use_rhs)); + gimple* use_stmt_removal = use_stmt; + g = gimple_build_assign (var, BIT_AND_EXPR, use_rhs, + and_mask); + gsi = gsi_for_stmt (use_nop_stmt); + gsi_insert_before (&gsi, g, GSI_NEW_STMT); + use_stmt = g; + rhs_code = rhs_code == GE_EXPR ? EQ_EXPR : NE_EXPR; + tree const_zero = build_zero_cst (TREE_TYPE (use_rhs)); + if (use_nop_lhs) + g = gimple_build_assign (use_nop_lhs, rhs_code, + var, const_zero); + else + g = gimple_build_cond (rhs_code, var, const_zero, + nullptr, nullptr); + gsi_insert_after (&gsi, g, GSI_NEW_STMT); + gsi = gsi_for_stmt (use_nop_stmt); + gsi_remove (&gsi, true); + gsi = gsi_for_stmt (use_stmt_removal); + gsi_remove (&gsi, true); + } + } + else + { + tree match_op[3]; + gimple *g; + if (!gimple_nop_atomic_bit_test_and_p (use_nop_lhs, + &match_op[0], NULL) + || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (match_op[2]) + || !single_imm_use (match_op[2], &use_p, &g) + || !is_gimple_assign (g)) + return false; + mask = match_op[0]; + if (TREE_CODE (match_op[1]) == INTEGER_CST) + { + ibit = tree_log2 (match_op[1]); + gcc_assert (ibit >= 0); + } + else + { + g = SSA_NAME_DEF_STMT (match_op[1]); + gcc_assert (is_gimple_assign (g)); + bit = gimple_assign_rhs2 (g); + } + /* Convert + _1 = __atomic_fetch_or_4 (ptr_6, mask, _3); + _2 = (int) _1; + _5 = _2 & mask; + to + _1 = __atomic_fetch_or_4 (ptr_6, mask, _3); + _6 = _1 & mask; + _5 = (int) _6; + and convert + _1 = ~mask_7; + _2 = (unsigned int) _1; + _3 = __atomic_fetch_and_4 (ptr_6, _2, 0); + _4 = (int) _3; + _5 = _4 & mask_7; + to + _1 = __atomic_fetch_and_* (ptr_6, ~mask_7, _3); + _12 = _3 & mask_7; + _5 = (int) _12; + + and Convert + _1 = __atomic_fetch_and_4 (ptr_6, ~mask, _3); + _2 = (short int) _1; + _5 = _2 & mask; + to + _1 = __atomic_fetch_and_4 (ptr_6, ~mask, _3); + _8 = _1 & mask; + _5 = (short int) _8; + */ + gimple_seq stmts = NULL; + match_op[1] = gimple_convert (&stmts, + TREE_TYPE (use_rhs), + match_op[1]); + var = gimple_build (&stmts, BIT_AND_EXPR, + TREE_TYPE (use_rhs), use_rhs, match_op[1]); + gsi = gsi_for_stmt (use_stmt); + gsi_remove (&gsi, true); + release_defs (use_stmt); + use_stmt = gimple_seq_last_stmt (stmts); + gsi = gsi_for_stmt (use_nop_stmt); + gsi_insert_seq_before (&gsi, stmts, GSI_SAME_STMT); + gimple_assign_set_rhs_with_ops (&gsi, CONVERT_EXPR, var); + update_stmt (use_nop_stmt); + } + } + else + return false; + + if (!bit) + { + if (ibit < 0) + gcc_unreachable (); + bit = build_int_cst (TREE_TYPE (lhs), ibit); + } + } + else if (optab_handler (optab, TYPE_MODE (TREE_TYPE (lhs))) + == CODE_FOR_nothing) + return false; + + tree use_lhs = gimple_assign_lhs (use_stmt); + if (!use_lhs) + return false; + + if (!bit) + { + if (TREE_CODE (mask) == INTEGER_CST) + { + if (fn == IFN_ATOMIC_BIT_TEST_AND_RESET) + mask = const_unop (BIT_NOT_EXPR, TREE_TYPE (mask), mask); + mask = fold_convert (TREE_TYPE (lhs), mask); + int ibit = tree_log2 (mask); + if (ibit < 0) + return false; + bit = build_int_cst (TREE_TYPE (lhs), ibit); + } + else if (TREE_CODE (mask) == SSA_NAME) + { + gimple *g = SSA_NAME_DEF_STMT (mask); + tree match_op; + if (gimple_nop_convert (mask, &match_op, NULL)) + { + mask = match_op; + if (TREE_CODE (mask) != SSA_NAME) + return false; + g = SSA_NAME_DEF_STMT (mask); + } + if (!is_gimple_assign (g)) + return false; + + if (fn == IFN_ATOMIC_BIT_TEST_AND_RESET) + { + if (gimple_assign_rhs_code (g) != BIT_NOT_EXPR) + return false; + mask = gimple_assign_rhs1 (g); + if (TREE_CODE (mask) != SSA_NAME) + return false; + g = SSA_NAME_DEF_STMT (mask); + } + + if (!is_gimple_assign (g) + || gimple_assign_rhs_code (g) != LSHIFT_EXPR + || !integer_onep (gimple_assign_rhs1 (g))) + return false; + bit = gimple_assign_rhs2 (g); + } + else + return false; + + tree cmp_mask; + if (gimple_assign_rhs1 (use_stmt) == lhs) + cmp_mask = gimple_assign_rhs2 (use_stmt); + else + cmp_mask = gimple_assign_rhs1 (use_stmt); + + tree match_op; + if (gimple_nop_convert (cmp_mask, &match_op, NULL)) + cmp_mask = match_op; + + if (!operand_equal_p (cmp_mask, mask, 0)) + return false; + } + + bool use_bool = true; + bool has_debug_uses = false; + imm_use_iterator iter; + gimple *g; + + if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (use_lhs)) + use_bool = false; + FOR_EACH_IMM_USE_STMT (g, iter, use_lhs) + { + enum tree_code code = ERROR_MARK; + tree op0 = NULL_TREE, op1 = NULL_TREE; + if (is_gimple_debug (g)) + { + has_debug_uses = true; + continue; + } + else if (is_gimple_assign (g)) + switch (gimple_assign_rhs_code (g)) + { + case COND_EXPR: + op1 = gimple_assign_rhs1 (g); + code = TREE_CODE (op1); + if (TREE_CODE_CLASS (code) != tcc_comparison) + break; + op0 = TREE_OPERAND (op1, 0); + op1 = TREE_OPERAND (op1, 1); + break; + case EQ_EXPR: + case NE_EXPR: + code = gimple_assign_rhs_code (g); + op0 = gimple_assign_rhs1 (g); + op1 = gimple_assign_rhs2 (g); + break; + default: + break; + } + else if (gimple_code (g) == GIMPLE_COND) + { + code = gimple_cond_code (g); + op0 = gimple_cond_lhs (g); + op1 = gimple_cond_rhs (g); + } + + if ((code == EQ_EXPR || code == NE_EXPR) + && op0 == use_lhs + && integer_zerop (op1)) + { + use_operand_p use_p; + int n = 0; + FOR_EACH_IMM_USE_ON_STMT (use_p, iter) + n++; + if (n == 1) + continue; + } + + use_bool = false; + break; + } + + tree new_lhs = make_ssa_name (TREE_TYPE (lhs)); + tree flag = build_int_cst (TREE_TYPE (lhs), use_bool); + if (has_model_arg) + g = gimple_build_call_internal (fn, 5, gimple_call_arg (call, 0), + bit, flag, gimple_call_arg (call, 2), + gimple_call_fn (call)); + else + g = gimple_build_call_internal (fn, 4, gimple_call_arg (call, 0), + bit, flag, gimple_call_fn (call)); + gimple_call_set_lhs (g, new_lhs); + gimple_set_location (g, gimple_location (call)); + gimple_move_vops (g, call); + bool throws = stmt_can_throw_internal (cfun, call); + gimple_call_set_nothrow (as_a (g), + gimple_call_nothrow_p (as_a (call))); + gimple_stmt_iterator gsi = *gsip; + gsi_insert_after (&gsi, g, GSI_NEW_STMT); + edge e = NULL; + if (throws) + { + maybe_clean_or_replace_eh_stmt (call, g); + if (after || (use_bool && has_debug_uses)) + e = find_fallthru_edge (gsi_bb (gsi)->succs); + } + if (after) + { + /* The internal function returns the value of the specified bit + before the atomic operation. If we are interested in the value + of the specified bit after the atomic operation (makes only sense + for xor, otherwise the bit content is compile time known), + we need to invert the bit. */ + tree mask_convert = mask; + gimple_seq stmts = NULL; + if (!use_bool) + mask_convert = gimple_convert (&stmts, TREE_TYPE (lhs), mask); + new_lhs = gimple_build (&stmts, BIT_XOR_EXPR, TREE_TYPE (lhs), new_lhs, + use_bool ? build_int_cst (TREE_TYPE (lhs), 1) + : mask_convert); + if (throws) + { + gsi_insert_seq_on_edge_immediate (e, stmts); + gsi = gsi_for_stmt (gimple_seq_last (stmts)); + } + else + gsi_insert_seq_after (&gsi, stmts, GSI_NEW_STMT); + } + if (use_bool && has_debug_uses) + { + tree temp = NULL_TREE; + if (!throws || after || single_pred_p (e->dest)) + { + temp = build_debug_expr_decl (TREE_TYPE (lhs)); + tree t = build2 (LSHIFT_EXPR, TREE_TYPE (lhs), new_lhs, bit); + g = gimple_build_debug_bind (temp, t, g); + if (throws && !after) + { + gsi = gsi_after_labels (e->dest); + gsi_insert_before (&gsi, g, GSI_SAME_STMT); + } + else + gsi_insert_after (&gsi, g, GSI_NEW_STMT); + } + FOR_EACH_IMM_USE_STMT (g, iter, use_lhs) + if (is_gimple_debug (g)) + { + use_operand_p use_p; + if (temp == NULL_TREE) + gimple_debug_bind_reset_value (g); + else + FOR_EACH_IMM_USE_ON_STMT (use_p, iter) + SET_USE (use_p, temp); + update_stmt (g); + } + } + SSA_NAME_OCCURS_IN_ABNORMAL_PHI (new_lhs) + = SSA_NAME_OCCURS_IN_ABNORMAL_PHI (use_lhs); + replace_uses_by (use_lhs, new_lhs); + gsi = gsi_for_stmt (use_stmt); + gsi_remove (&gsi, true); + release_defs (use_stmt); + gsi_remove (gsip, true); + release_ssa_name (lhs); + return true; +} + +/* Optimize + _4 = __atomic_add_fetch_* (ptr_6, arg_2, _3); + _5 = _4 == 0; + to + _4 = .ATOMIC_ADD_FETCH_CMP_0 (EQ_EXPR, ptr_6, arg_2, _3); + _5 = _4; + Similarly for __sync_add_and_fetch_* (without the ", _3" part + in there). */ + +static bool +optimize_atomic_op_fetch_cmp_0 (gimple_stmt_iterator *gsip, + enum internal_fn fn, bool has_model_arg) +{ + gimple *call = gsi_stmt (*gsip); + tree lhs = gimple_call_lhs (call); + use_operand_p use_p; + gimple *use_stmt; + + if (!flag_inline_atomics + || !gimple_call_builtin_p (call, BUILT_IN_NORMAL) + || !lhs + || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs) + || !single_imm_use (lhs, &use_p, &use_stmt) + || !gimple_vdef (call)) + return false; + + optab optab; + switch (fn) + { + case IFN_ATOMIC_ADD_FETCH_CMP_0: + optab = atomic_add_fetch_cmp_0_optab; + break; + case IFN_ATOMIC_SUB_FETCH_CMP_0: + optab = atomic_sub_fetch_cmp_0_optab; + break; + case IFN_ATOMIC_AND_FETCH_CMP_0: + optab = atomic_and_fetch_cmp_0_optab; + break; + case IFN_ATOMIC_OR_FETCH_CMP_0: + optab = atomic_or_fetch_cmp_0_optab; + break; + case IFN_ATOMIC_XOR_FETCH_CMP_0: + optab = atomic_xor_fetch_cmp_0_optab; + break; + default: + return false; + } + + if (optab_handler (optab, TYPE_MODE (TREE_TYPE (lhs))) + == CODE_FOR_nothing) + return false; + + tree use_lhs = lhs; + if (gimple_assign_cast_p (use_stmt)) + { + use_lhs = gimple_assign_lhs (use_stmt); + if (!tree_nop_conversion_p (TREE_TYPE (use_lhs), TREE_TYPE (lhs)) + || (!INTEGRAL_TYPE_P (TREE_TYPE (use_lhs)) + && !POINTER_TYPE_P (TREE_TYPE (use_lhs))) + || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (use_lhs) + || !single_imm_use (use_lhs, &use_p, &use_stmt)) + return false; + } + enum tree_code code = ERROR_MARK; + tree op0 = NULL_TREE, op1 = NULL_TREE; + if (is_gimple_assign (use_stmt)) + switch (gimple_assign_rhs_code (use_stmt)) + { + case COND_EXPR: + op1 = gimple_assign_rhs1 (use_stmt); + code = TREE_CODE (op1); + if (TREE_CODE_CLASS (code) == tcc_comparison) + { + op0 = TREE_OPERAND (op1, 0); + op1 = TREE_OPERAND (op1, 1); + } + break; + default: + code = gimple_assign_rhs_code (use_stmt); + if (TREE_CODE_CLASS (code) == tcc_comparison) + { + op0 = gimple_assign_rhs1 (use_stmt); + op1 = gimple_assign_rhs2 (use_stmt); + } + break; + } + else if (gimple_code (use_stmt) == GIMPLE_COND) + { + code = gimple_cond_code (use_stmt); + op0 = gimple_cond_lhs (use_stmt); + op1 = gimple_cond_rhs (use_stmt); + } + + switch (code) + { + case LT_EXPR: + case LE_EXPR: + case GT_EXPR: + case GE_EXPR: + if (!INTEGRAL_TYPE_P (TREE_TYPE (use_lhs)) + || TREE_CODE (TREE_TYPE (use_lhs)) == BOOLEAN_TYPE + || TYPE_UNSIGNED (TREE_TYPE (use_lhs))) + return false; + /* FALLTHRU */ + case EQ_EXPR: + case NE_EXPR: + if (op0 == use_lhs && integer_zerop (op1)) + break; + return false; + default: + return false; + } + + int encoded; + switch (code) + { + /* Use special encoding of the operation. We want to also + encode the mode in the first argument and for neither EQ_EXPR + etc. nor EQ etc. we can rely it will fit into QImode. */ + case EQ_EXPR: encoded = ATOMIC_OP_FETCH_CMP_0_EQ; break; + case NE_EXPR: encoded = ATOMIC_OP_FETCH_CMP_0_NE; break; + case LT_EXPR: encoded = ATOMIC_OP_FETCH_CMP_0_LT; break; + case LE_EXPR: encoded = ATOMIC_OP_FETCH_CMP_0_LE; break; + case GT_EXPR: encoded = ATOMIC_OP_FETCH_CMP_0_GT; break; + case GE_EXPR: encoded = ATOMIC_OP_FETCH_CMP_0_GE; break; + default: gcc_unreachable (); + } + + tree new_lhs = make_ssa_name (boolean_type_node); + gimple *g; + tree flag = build_int_cst (TREE_TYPE (lhs), encoded); + if (has_model_arg) + g = gimple_build_call_internal (fn, 5, flag, + gimple_call_arg (call, 0), + gimple_call_arg (call, 1), + gimple_call_arg (call, 2), + gimple_call_fn (call)); + else + g = gimple_build_call_internal (fn, 4, flag, + gimple_call_arg (call, 0), + gimple_call_arg (call, 1), + gimple_call_fn (call)); + gimple_call_set_lhs (g, new_lhs); + gimple_set_location (g, gimple_location (call)); + gimple_move_vops (g, call); + bool throws = stmt_can_throw_internal (cfun, call); + gimple_call_set_nothrow (as_a (g), + gimple_call_nothrow_p (as_a (call))); + gimple_stmt_iterator gsi = *gsip; + gsi_insert_after (&gsi, g, GSI_SAME_STMT); + if (throws) + maybe_clean_or_replace_eh_stmt (call, g); + if (is_gimple_assign (use_stmt)) + switch (gimple_assign_rhs_code (use_stmt)) + { + case COND_EXPR: + gimple_assign_set_rhs1 (use_stmt, new_lhs); + break; + default: + gsi = gsi_for_stmt (use_stmt); + if (tree ulhs = gimple_assign_lhs (use_stmt)) + if (useless_type_conversion_p (TREE_TYPE (ulhs), + boolean_type_node)) + { + gimple_assign_set_rhs_with_ops (&gsi, SSA_NAME, new_lhs); + break; + } + gimple_assign_set_rhs_with_ops (&gsi, NOP_EXPR, new_lhs); + break; + } + else if (gimple_code (use_stmt) == GIMPLE_COND) + { + gcond *use_cond = as_a (use_stmt); + gimple_cond_set_code (use_cond, NE_EXPR); + gimple_cond_set_lhs (use_cond, new_lhs); + gimple_cond_set_rhs (use_cond, boolean_false_node); + } + + update_stmt (use_stmt); + if (use_lhs != lhs) + { + gsi = gsi_for_stmt (SSA_NAME_DEF_STMT (use_lhs)); + gsi_remove (&gsi, true); + release_ssa_name (use_lhs); + } + gsi_remove (gsip, true); + release_ssa_name (lhs); + return true; +} + +/* Process builtin CALL located at GSI. + Currently it is only fgr atomic functions optimizations from above. */ +static void +gimple_isel_builtin_call (gcall *call, gimple_stmt_iterator *gsi) +{ + /* Don't handle these in non optimization mode or optimize debug mode. */ + if (!optimize || optimize_debug) + return; + + if (!gimple_call_builtin_p (call, BUILT_IN_NORMAL)) + return; + + tree callee = gimple_call_fndecl (call); + + switch (DECL_FUNCTION_CODE (callee)) + { +#define CASE_ATOMIC(NAME) \ + case BUILT_IN_##NAME##_1: \ + case BUILT_IN_##NAME##_2: \ + case BUILT_IN_##NAME##_4: \ + case BUILT_IN_##NAME##_8: \ + case BUILT_IN_##NAME##_16 +#define CASE_ATOMIC_CMP0(ATOMIC, SYNC) \ + CASE_ATOMIC(ATOMIC_##ATOMIC): \ + optimize_atomic_op_fetch_cmp_0 (gsi, \ + IFN_ATOMIC_##ATOMIC##_CMP_0, \ + true); \ + break; \ + CASE_ATOMIC(SYNC_##SYNC): \ + optimize_atomic_op_fetch_cmp_0 (gsi, \ + IFN_ATOMIC_##ATOMIC##_CMP_0, \ + false); \ + break; + + + CASE_ATOMIC_CMP0(ADD_FETCH, ADD_AND_FETCH) + CASE_ATOMIC_CMP0(SUB_FETCH, SUB_AND_FETCH) + CASE_ATOMIC_CMP0(AND_FETCH, AND_AND_FETCH) + CASE_ATOMIC_CMP0(OR_FETCH, OR_AND_FETCH) +#define CASE_ATOMIC_BIT_TEST_AND(ATOMIC, SYNC, FN, AFTER) \ + CASE_ATOMIC(ATOMIC_##ATOMIC): \ + optimize_atomic_bit_test_and (gsi, \ + IFN_ATOMIC_BIT_TEST_AND_##FN, \ + true, AFTER); \ + break; \ + CASE_ATOMIC(SYNC_##SYNC): \ + optimize_atomic_bit_test_and (gsi, \ + IFN_ATOMIC_BIT_TEST_AND_##FN, \ + false, AFTER); \ + break; + CASE_ATOMIC_BIT_TEST_AND(FETCH_OR, FETCH_AND_OR, SET, false) + CASE_ATOMIC_BIT_TEST_AND(FETCH_XOR, FETCH_AND_XOR, COMPLEMENT, false) + CASE_ATOMIC_BIT_TEST_AND(FETCH_AND, FETCH_AND_AND, RESET, false) + + CASE_ATOMIC(ATOMIC_XOR_FETCH): + if (optimize_atomic_bit_test_and + (gsi, IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT, true, true)) + break; + optimize_atomic_op_fetch_cmp_0 (gsi, + IFN_ATOMIC_XOR_FETCH_CMP_0, + true); + break; + CASE_ATOMIC(SYNC_XOR_AND_FETCH): + if (optimize_atomic_bit_test_and + (gsi, IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT, false, true)) + break; + optimize_atomic_op_fetch_cmp_0 (gsi, + IFN_ATOMIC_XOR_FETCH_CMP_0, + false); + break; + + default:; + } +} + /* Iterate all gimple statements and perform pre RTL expansion GIMPLE massaging to improve instruction selection. */ @@ -411,6 +1362,11 @@ pass_gimple_isel::execute (struct function *fun) if (gsi_end_p (gsi)) break; + if (gcall *call = dyn_cast (*gsi)) + { + gimple_isel_builtin_call (call, &gsi); + continue; + } gassign *stmt = dyn_cast (*gsi); if (!stmt) continue; diff --git a/gcc/tree-ssa-ccp.cc b/gcc/tree-ssa-ccp.cc index 021eb22eadd6..c884fdfffd01 100644 --- a/gcc/tree-ssa-ccp.cc +++ b/gcc/tree-ssa-ccp.cc @@ -3085,882 +3085,6 @@ make_pass_ccp (gcc::context *ctxt) return new pass_ccp (ctxt); } -/* Convert - _1 = __atomic_fetch_or_* (ptr_6, 1, _3); - _7 = ~_1; - _5 = (_Bool) _7; - to - _1 = __atomic_fetch_or_* (ptr_6, 1, _3); - _8 = _1 & 1; - _5 = _8 == 0; - and convert - _1 = __atomic_fetch_and_* (ptr_6, ~1, _3); - _7 = ~_1; - _4 = (_Bool) _7; - to - _1 = __atomic_fetch_and_* (ptr_6, ~1, _3); - _8 = _1 & 1; - _4 = (_Bool) _8; - - USE_STMT is the gimplt statement which uses the return value of - __atomic_fetch_or_*. LHS is the return value of __atomic_fetch_or_*. - MASK is the mask passed to __atomic_fetch_or_*. - */ - -static gimple * -convert_atomic_bit_not (enum internal_fn fn, gimple *use_stmt, - tree lhs, tree mask) -{ - tree and_mask; - if (fn == IFN_ATOMIC_BIT_TEST_AND_RESET) - { - /* MASK must be ~1. */ - if (!operand_equal_p (build_int_cst (TREE_TYPE (lhs), - ~HOST_WIDE_INT_1), mask, 0)) - return nullptr; - and_mask = build_int_cst (TREE_TYPE (lhs), 1); - } - else - { - /* MASK must be 1. */ - if (!operand_equal_p (build_int_cst (TREE_TYPE (lhs), 1), mask, 0)) - return nullptr; - and_mask = mask; - } - - tree use_lhs = gimple_assign_lhs (use_stmt); - - use_operand_p use_p; - gimple *use_not_stmt; - - if (!single_imm_use (use_lhs, &use_p, &use_not_stmt) - || !is_gimple_assign (use_not_stmt)) - return nullptr; - - if (!CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (use_not_stmt))) - return nullptr; - - tree use_not_lhs = gimple_assign_lhs (use_not_stmt); - if (TREE_CODE (TREE_TYPE (use_not_lhs)) != BOOLEAN_TYPE) - return nullptr; - - gimple_stmt_iterator gsi; - tree var = make_ssa_name (TREE_TYPE (lhs)); - /* use_stmt need to be removed after use_nop_stmt, - so use_lhs can be released. */ - gimple *use_stmt_removal = use_stmt; - use_stmt = gimple_build_assign (var, BIT_AND_EXPR, lhs, and_mask); - gsi = gsi_for_stmt (use_not_stmt); - gsi_insert_before (&gsi, use_stmt, GSI_NEW_STMT); - lhs = gimple_assign_lhs (use_not_stmt); - gimple *g = gimple_build_assign (lhs, EQ_EXPR, var, - build_zero_cst (TREE_TYPE (mask))); - gsi_insert_after (&gsi, g, GSI_NEW_STMT); - gsi = gsi_for_stmt (use_not_stmt); - gsi_remove (&gsi, true); - gsi = gsi_for_stmt (use_stmt_removal); - gsi_remove (&gsi, true); - return use_stmt; -} - -/* match.pd function to match atomic_bit_test_and pattern which - has nop_convert: - _1 = __atomic_fetch_or_4 (&v, 1, 0); - _2 = (int) _1; - _5 = _2 & 1; - */ -extern bool gimple_nop_atomic_bit_test_and_p (tree, tree *, - tree (*) (tree)); -extern bool gimple_nop_convert (tree, tree*, tree (*) (tree)); - -/* Optimize - mask_2 = 1 << cnt_1; - _4 = __atomic_fetch_or_* (ptr_6, mask_2, _3); - _5 = _4 & mask_2; - to - _4 = .ATOMIC_BIT_TEST_AND_SET (ptr_6, cnt_1, 0, _3); - _5 = _4; - If _5 is only used in _5 != 0 or _5 == 0 comparisons, 1 - is passed instead of 0, and the builtin just returns a zero - or 1 value instead of the actual bit. - Similarly for __sync_fetch_and_or_* (without the ", _3" part - in there), and/or if mask_2 is a power of 2 constant. - Similarly for xor instead of or, use ATOMIC_BIT_TEST_AND_COMPLEMENT - in that case. And similarly for and instead of or, except that - the second argument to the builtin needs to be one's complement - of the mask instead of mask. */ - -static bool -optimize_atomic_bit_test_and (gimple_stmt_iterator *gsip, - enum internal_fn fn, bool has_model_arg, - bool after) -{ - gimple *call = gsi_stmt (*gsip); - tree lhs = gimple_call_lhs (call); - use_operand_p use_p; - gimple *use_stmt; - tree mask; - optab optab; - - if (!flag_inline_atomics - || optimize_debug - || !gimple_call_builtin_p (call, BUILT_IN_NORMAL) - || !lhs - || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs) - || !single_imm_use (lhs, &use_p, &use_stmt) - || !is_gimple_assign (use_stmt) - || !gimple_vdef (call)) - return false; - - switch (fn) - { - case IFN_ATOMIC_BIT_TEST_AND_SET: - optab = atomic_bit_test_and_set_optab; - break; - case IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT: - optab = atomic_bit_test_and_complement_optab; - break; - case IFN_ATOMIC_BIT_TEST_AND_RESET: - optab = atomic_bit_test_and_reset_optab; - break; - default: - return false; - } - - tree bit = nullptr; - - mask = gimple_call_arg (call, 1); - tree_code rhs_code = gimple_assign_rhs_code (use_stmt); - if (rhs_code != BIT_AND_EXPR) - { - if (rhs_code != NOP_EXPR && rhs_code != BIT_NOT_EXPR) - return false; - - tree use_lhs = gimple_assign_lhs (use_stmt); - if (TREE_CODE (use_lhs) == SSA_NAME - && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (use_lhs)) - return false; - - tree use_rhs = gimple_assign_rhs1 (use_stmt); - if (lhs != use_rhs) - return false; - - if (optab_handler (optab, TYPE_MODE (TREE_TYPE (lhs))) - == CODE_FOR_nothing) - return false; - - gimple *g; - gimple_stmt_iterator gsi; - tree var; - int ibit = -1; - - if (rhs_code == BIT_NOT_EXPR) - { - g = convert_atomic_bit_not (fn, use_stmt, lhs, mask); - if (!g) - return false; - use_stmt = g; - ibit = 0; - } - else if (TREE_CODE (TREE_TYPE (use_lhs)) == BOOLEAN_TYPE) - { - tree and_mask; - if (fn == IFN_ATOMIC_BIT_TEST_AND_RESET) - { - /* MASK must be ~1. */ - if (!operand_equal_p (build_int_cst (TREE_TYPE (lhs), - ~HOST_WIDE_INT_1), - mask, 0)) - return false; - - /* Convert - _1 = __atomic_fetch_and_* (ptr_6, ~1, _3); - _4 = (_Bool) _1; - to - _1 = __atomic_fetch_and_* (ptr_6, ~1, _3); - _5 = _1 & 1; - _4 = (_Bool) _5; - */ - and_mask = build_int_cst (TREE_TYPE (lhs), 1); - } - else - { - and_mask = build_int_cst (TREE_TYPE (lhs), 1); - if (!operand_equal_p (and_mask, mask, 0)) - return false; - - /* Convert - _1 = __atomic_fetch_or_* (ptr_6, 1, _3); - _4 = (_Bool) _1; - to - _1 = __atomic_fetch_or_* (ptr_6, 1, _3); - _5 = _1 & 1; - _4 = (_Bool) _5; - */ - } - var = make_ssa_name (TREE_TYPE (use_rhs)); - replace_uses_by (use_rhs, var); - g = gimple_build_assign (var, BIT_AND_EXPR, use_rhs, - and_mask); - gsi = gsi_for_stmt (use_stmt); - gsi_insert_before (&gsi, g, GSI_NEW_STMT); - use_stmt = g; - ibit = 0; - } - else if (TYPE_PRECISION (TREE_TYPE (use_lhs)) - <= TYPE_PRECISION (TREE_TYPE (use_rhs))) - { - gimple *use_nop_stmt; - if (!single_imm_use (use_lhs, &use_p, &use_nop_stmt) - || (!is_gimple_assign (use_nop_stmt) - && gimple_code (use_nop_stmt) != GIMPLE_COND)) - return false; - /* Handle both - _4 = _5 < 0; - and - if (_5 < 0) - */ - tree use_nop_lhs = nullptr; - rhs_code = ERROR_MARK; - if (is_gimple_assign (use_nop_stmt)) - { - use_nop_lhs = gimple_assign_lhs (use_nop_stmt); - rhs_code = gimple_assign_rhs_code (use_nop_stmt); - } - if (!use_nop_lhs || rhs_code != BIT_AND_EXPR) - { - /* Also handle - if (_5 < 0) - */ - if (use_nop_lhs - && TREE_CODE (use_nop_lhs) == SSA_NAME - && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (use_nop_lhs)) - return false; - if (use_nop_lhs && rhs_code == BIT_NOT_EXPR) - { - /* Handle - _7 = ~_2; - */ - g = convert_atomic_bit_not (fn, use_nop_stmt, lhs, - mask); - if (!g) - return false; - /* Convert - _1 = __atomic_fetch_or_4 (ptr_6, 1, _3); - _2 = (int) _1; - _7 = ~_2; - _5 = (_Bool) _7; - to - _1 = __atomic_fetch_or_4 (ptr_6, ~1, _3); - _8 = _1 & 1; - _5 = _8 == 0; - and convert - _1 = __atomic_fetch_and_4 (ptr_6, ~1, _3); - _2 = (int) _1; - _7 = ~_2; - _5 = (_Bool) _7; - to - _1 = __atomic_fetch_and_4 (ptr_6, 1, _3); - _8 = _1 & 1; - _5 = _8 == 0; - */ - gsi = gsi_for_stmt (use_stmt); - gsi_remove (&gsi, true); - use_stmt = g; - ibit = 0; - } - else - { - tree cmp_rhs1, cmp_rhs2; - if (use_nop_lhs) - { - /* Handle - _4 = _5 < 0; - */ - if (TREE_CODE (TREE_TYPE (use_nop_lhs)) - != BOOLEAN_TYPE) - return false; - cmp_rhs1 = gimple_assign_rhs1 (use_nop_stmt); - cmp_rhs2 = gimple_assign_rhs2 (use_nop_stmt); - } - else - { - /* Handle - if (_5 < 0) - */ - rhs_code = gimple_cond_code (use_nop_stmt); - cmp_rhs1 = gimple_cond_lhs (use_nop_stmt); - cmp_rhs2 = gimple_cond_rhs (use_nop_stmt); - } - if (rhs_code != GE_EXPR && rhs_code != LT_EXPR) - return false; - if (use_lhs != cmp_rhs1) - return false; - if (!integer_zerop (cmp_rhs2)) - return false; - - tree and_mask; - - unsigned HOST_WIDE_INT bytes - = tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (use_rhs))); - ibit = bytes * BITS_PER_UNIT - 1; - unsigned HOST_WIDE_INT highest - = HOST_WIDE_INT_1U << ibit; - - if (fn == IFN_ATOMIC_BIT_TEST_AND_RESET) - { - /* Get the signed maximum of the USE_RHS type. */ - and_mask = build_int_cst (TREE_TYPE (use_rhs), - highest - 1); - if (!operand_equal_p (and_mask, mask, 0)) - return false; - - /* Convert - _1 = __atomic_fetch_and_4 (ptr_6, 0x7fffffff, _3); - _5 = (signed int) _1; - _4 = _5 < 0 or _5 >= 0; - to - _1 = __atomic_fetch_and_4 (ptr_6, 0x7fffffff, _3); - _6 = _1 & 0x80000000; - _4 = _6 != 0 or _6 == 0; - and convert - _1 = __atomic_fetch_and_4 (ptr_6, 0x7fffffff, _3); - _5 = (signed int) _1; - if (_5 < 0 or _5 >= 0) - to - _1 = __atomic_fetch_and_4 (ptr_6, 0x7fffffff, _3); - _6 = _1 & 0x80000000; - if (_6 != 0 or _6 == 0) - */ - and_mask = build_int_cst (TREE_TYPE (use_rhs), - highest); - } - else - { - /* Get the signed minimum of the USE_RHS type. */ - and_mask = build_int_cst (TREE_TYPE (use_rhs), - highest); - if (!operand_equal_p (and_mask, mask, 0)) - return false; - - /* Convert - _1 = __atomic_fetch_or_4 (ptr_6, 0x80000000, _3); - _5 = (signed int) _1; - _4 = _5 < 0 or _5 >= 0; - to - _1 = __atomic_fetch_or_4 (ptr_6, 0x80000000, _3); - _6 = _1 & 0x80000000; - _4 = _6 != 0 or _6 == 0; - and convert - _1 = __atomic_fetch_or_4 (ptr_6, 0x80000000, _3); - _5 = (signed int) _1; - if (_5 < 0 or _5 >= 0) - to - _1 = __atomic_fetch_or_4 (ptr_6, 0x80000000, _3); - _6 = _1 & 0x80000000; - if (_6 != 0 or _6 == 0) - */ - } - var = make_ssa_name (TREE_TYPE (use_rhs)); - gimple* use_stmt_removal = use_stmt; - g = gimple_build_assign (var, BIT_AND_EXPR, use_rhs, - and_mask); - gsi = gsi_for_stmt (use_nop_stmt); - gsi_insert_before (&gsi, g, GSI_NEW_STMT); - use_stmt = g; - rhs_code = rhs_code == GE_EXPR ? EQ_EXPR : NE_EXPR; - tree const_zero = build_zero_cst (TREE_TYPE (use_rhs)); - if (use_nop_lhs) - g = gimple_build_assign (use_nop_lhs, rhs_code, - var, const_zero); - else - g = gimple_build_cond (rhs_code, var, const_zero, - nullptr, nullptr); - gsi_insert_after (&gsi, g, GSI_NEW_STMT); - gsi = gsi_for_stmt (use_nop_stmt); - gsi_remove (&gsi, true); - gsi = gsi_for_stmt (use_stmt_removal); - gsi_remove (&gsi, true); - } - } - else - { - tree match_op[3]; - gimple *g; - if (!gimple_nop_atomic_bit_test_and_p (use_nop_lhs, - &match_op[0], NULL) - || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (match_op[2]) - || !single_imm_use (match_op[2], &use_p, &g) - || !is_gimple_assign (g)) - return false; - mask = match_op[0]; - if (TREE_CODE (match_op[1]) == INTEGER_CST) - { - ibit = tree_log2 (match_op[1]); - gcc_assert (ibit >= 0); - } - else - { - g = SSA_NAME_DEF_STMT (match_op[1]); - gcc_assert (is_gimple_assign (g)); - bit = gimple_assign_rhs2 (g); - } - /* Convert - _1 = __atomic_fetch_or_4 (ptr_6, mask, _3); - _2 = (int) _1; - _5 = _2 & mask; - to - _1 = __atomic_fetch_or_4 (ptr_6, mask, _3); - _6 = _1 & mask; - _5 = (int) _6; - and convert - _1 = ~mask_7; - _2 = (unsigned int) _1; - _3 = __atomic_fetch_and_4 (ptr_6, _2, 0); - _4 = (int) _3; - _5 = _4 & mask_7; - to - _1 = __atomic_fetch_and_* (ptr_6, ~mask_7, _3); - _12 = _3 & mask_7; - _5 = (int) _12; - - and Convert - _1 = __atomic_fetch_and_4 (ptr_6, ~mask, _3); - _2 = (short int) _1; - _5 = _2 & mask; - to - _1 = __atomic_fetch_and_4 (ptr_6, ~mask, _3); - _8 = _1 & mask; - _5 = (short int) _8; - */ - gimple_seq stmts = NULL; - match_op[1] = gimple_convert (&stmts, - TREE_TYPE (use_rhs), - match_op[1]); - var = gimple_build (&stmts, BIT_AND_EXPR, - TREE_TYPE (use_rhs), use_rhs, match_op[1]); - gsi = gsi_for_stmt (use_stmt); - gsi_remove (&gsi, true); - release_defs (use_stmt); - use_stmt = gimple_seq_last_stmt (stmts); - gsi = gsi_for_stmt (use_nop_stmt); - gsi_insert_seq_before (&gsi, stmts, GSI_SAME_STMT); - gimple_assign_set_rhs_with_ops (&gsi, CONVERT_EXPR, var); - update_stmt (use_nop_stmt); - } - } - else - return false; - - if (!bit) - { - if (ibit < 0) - gcc_unreachable (); - bit = build_int_cst (TREE_TYPE (lhs), ibit); - } - } - else if (optab_handler (optab, TYPE_MODE (TREE_TYPE (lhs))) - == CODE_FOR_nothing) - return false; - - tree use_lhs = gimple_assign_lhs (use_stmt); - if (!use_lhs) - return false; - - if (!bit) - { - if (TREE_CODE (mask) == INTEGER_CST) - { - if (fn == IFN_ATOMIC_BIT_TEST_AND_RESET) - mask = const_unop (BIT_NOT_EXPR, TREE_TYPE (mask), mask); - mask = fold_convert (TREE_TYPE (lhs), mask); - int ibit = tree_log2 (mask); - if (ibit < 0) - return false; - bit = build_int_cst (TREE_TYPE (lhs), ibit); - } - else if (TREE_CODE (mask) == SSA_NAME) - { - gimple *g = SSA_NAME_DEF_STMT (mask); - tree match_op; - if (gimple_nop_convert (mask, &match_op, NULL)) - { - mask = match_op; - if (TREE_CODE (mask) != SSA_NAME) - return false; - g = SSA_NAME_DEF_STMT (mask); - } - if (!is_gimple_assign (g)) - return false; - - if (fn == IFN_ATOMIC_BIT_TEST_AND_RESET) - { - if (gimple_assign_rhs_code (g) != BIT_NOT_EXPR) - return false; - mask = gimple_assign_rhs1 (g); - if (TREE_CODE (mask) != SSA_NAME) - return false; - g = SSA_NAME_DEF_STMT (mask); - } - - if (!is_gimple_assign (g) - || gimple_assign_rhs_code (g) != LSHIFT_EXPR - || !integer_onep (gimple_assign_rhs1 (g))) - return false; - bit = gimple_assign_rhs2 (g); - } - else - return false; - - tree cmp_mask; - if (gimple_assign_rhs1 (use_stmt) == lhs) - cmp_mask = gimple_assign_rhs2 (use_stmt); - else - cmp_mask = gimple_assign_rhs1 (use_stmt); - - tree match_op; - if (gimple_nop_convert (cmp_mask, &match_op, NULL)) - cmp_mask = match_op; - - if (!operand_equal_p (cmp_mask, mask, 0)) - return false; - } - - bool use_bool = true; - bool has_debug_uses = false; - imm_use_iterator iter; - gimple *g; - - if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (use_lhs)) - use_bool = false; - FOR_EACH_IMM_USE_STMT (g, iter, use_lhs) - { - enum tree_code code = ERROR_MARK; - tree op0 = NULL_TREE, op1 = NULL_TREE; - if (is_gimple_debug (g)) - { - has_debug_uses = true; - continue; - } - else if (is_gimple_assign (g)) - switch (gimple_assign_rhs_code (g)) - { - case COND_EXPR: - op1 = gimple_assign_rhs1 (g); - code = TREE_CODE (op1); - if (TREE_CODE_CLASS (code) != tcc_comparison) - break; - op0 = TREE_OPERAND (op1, 0); - op1 = TREE_OPERAND (op1, 1); - break; - case EQ_EXPR: - case NE_EXPR: - code = gimple_assign_rhs_code (g); - op0 = gimple_assign_rhs1 (g); - op1 = gimple_assign_rhs2 (g); - break; - default: - break; - } - else if (gimple_code (g) == GIMPLE_COND) - { - code = gimple_cond_code (g); - op0 = gimple_cond_lhs (g); - op1 = gimple_cond_rhs (g); - } - - if ((code == EQ_EXPR || code == NE_EXPR) - && op0 == use_lhs - && integer_zerop (op1)) - { - use_operand_p use_p; - int n = 0; - FOR_EACH_IMM_USE_ON_STMT (use_p, iter) - n++; - if (n == 1) - continue; - } - - use_bool = false; - break; - } - - tree new_lhs = make_ssa_name (TREE_TYPE (lhs)); - tree flag = build_int_cst (TREE_TYPE (lhs), use_bool); - if (has_model_arg) - g = gimple_build_call_internal (fn, 5, gimple_call_arg (call, 0), - bit, flag, gimple_call_arg (call, 2), - gimple_call_fn (call)); - else - g = gimple_build_call_internal (fn, 4, gimple_call_arg (call, 0), - bit, flag, gimple_call_fn (call)); - gimple_call_set_lhs (g, new_lhs); - gimple_set_location (g, gimple_location (call)); - gimple_move_vops (g, call); - bool throws = stmt_can_throw_internal (cfun, call); - gimple_call_set_nothrow (as_a (g), - gimple_call_nothrow_p (as_a (call))); - gimple_stmt_iterator gsi = *gsip; - gsi_insert_after (&gsi, g, GSI_NEW_STMT); - edge e = NULL; - if (throws) - { - maybe_clean_or_replace_eh_stmt (call, g); - if (after || (use_bool && has_debug_uses)) - e = find_fallthru_edge (gsi_bb (gsi)->succs); - } - if (after) - { - /* The internal function returns the value of the specified bit - before the atomic operation. If we are interested in the value - of the specified bit after the atomic operation (makes only sense - for xor, otherwise the bit content is compile time known), - we need to invert the bit. */ - tree mask_convert = mask; - gimple_seq stmts = NULL; - if (!use_bool) - mask_convert = gimple_convert (&stmts, TREE_TYPE (lhs), mask); - new_lhs = gimple_build (&stmts, BIT_XOR_EXPR, TREE_TYPE (lhs), new_lhs, - use_bool ? build_int_cst (TREE_TYPE (lhs), 1) - : mask_convert); - if (throws) - { - gsi_insert_seq_on_edge_immediate (e, stmts); - gsi = gsi_for_stmt (gimple_seq_last (stmts)); - } - else - gsi_insert_seq_after (&gsi, stmts, GSI_NEW_STMT); - } - if (use_bool && has_debug_uses) - { - tree temp = NULL_TREE; - if (!throws || after || single_pred_p (e->dest)) - { - temp = build_debug_expr_decl (TREE_TYPE (lhs)); - tree t = build2 (LSHIFT_EXPR, TREE_TYPE (lhs), new_lhs, bit); - g = gimple_build_debug_bind (temp, t, g); - if (throws && !after) - { - gsi = gsi_after_labels (e->dest); - gsi_insert_before (&gsi, g, GSI_SAME_STMT); - } - else - gsi_insert_after (&gsi, g, GSI_NEW_STMT); - } - FOR_EACH_IMM_USE_STMT (g, iter, use_lhs) - if (is_gimple_debug (g)) - { - use_operand_p use_p; - if (temp == NULL_TREE) - gimple_debug_bind_reset_value (g); - else - FOR_EACH_IMM_USE_ON_STMT (use_p, iter) - SET_USE (use_p, temp); - update_stmt (g); - } - } - SSA_NAME_OCCURS_IN_ABNORMAL_PHI (new_lhs) - = SSA_NAME_OCCURS_IN_ABNORMAL_PHI (use_lhs); - replace_uses_by (use_lhs, new_lhs); - gsi = gsi_for_stmt (use_stmt); - gsi_remove (&gsi, true); - release_defs (use_stmt); - gsi_remove (gsip, true); - release_ssa_name (lhs); - return true; -} - -/* Optimize - _4 = __atomic_add_fetch_* (ptr_6, arg_2, _3); - _5 = _4 == 0; - to - _4 = .ATOMIC_ADD_FETCH_CMP_0 (EQ_EXPR, ptr_6, arg_2, _3); - _5 = _4; - Similarly for __sync_add_and_fetch_* (without the ", _3" part - in there). */ - -static bool -optimize_atomic_op_fetch_cmp_0 (gimple_stmt_iterator *gsip, - enum internal_fn fn, bool has_model_arg) -{ - gimple *call = gsi_stmt (*gsip); - tree lhs = gimple_call_lhs (call); - use_operand_p use_p; - gimple *use_stmt; - - if (!flag_inline_atomics - || optimize_debug - || !gimple_call_builtin_p (call, BUILT_IN_NORMAL) - || !lhs - || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs) - || !single_imm_use (lhs, &use_p, &use_stmt) - || !gimple_vdef (call)) - return false; - - optab optab; - switch (fn) - { - case IFN_ATOMIC_ADD_FETCH_CMP_0: - optab = atomic_add_fetch_cmp_0_optab; - break; - case IFN_ATOMIC_SUB_FETCH_CMP_0: - optab = atomic_sub_fetch_cmp_0_optab; - break; - case IFN_ATOMIC_AND_FETCH_CMP_0: - optab = atomic_and_fetch_cmp_0_optab; - break; - case IFN_ATOMIC_OR_FETCH_CMP_0: - optab = atomic_or_fetch_cmp_0_optab; - break; - case IFN_ATOMIC_XOR_FETCH_CMP_0: - optab = atomic_xor_fetch_cmp_0_optab; - break; - default: - return false; - } - - if (optab_handler (optab, TYPE_MODE (TREE_TYPE (lhs))) - == CODE_FOR_nothing) - return false; - - tree use_lhs = lhs; - if (gimple_assign_cast_p (use_stmt)) - { - use_lhs = gimple_assign_lhs (use_stmt); - if (!tree_nop_conversion_p (TREE_TYPE (use_lhs), TREE_TYPE (lhs)) - || (!INTEGRAL_TYPE_P (TREE_TYPE (use_lhs)) - && !POINTER_TYPE_P (TREE_TYPE (use_lhs))) - || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (use_lhs) - || !single_imm_use (use_lhs, &use_p, &use_stmt)) - return false; - } - enum tree_code code = ERROR_MARK; - tree op0 = NULL_TREE, op1 = NULL_TREE; - if (is_gimple_assign (use_stmt)) - switch (gimple_assign_rhs_code (use_stmt)) - { - case COND_EXPR: - op1 = gimple_assign_rhs1 (use_stmt); - code = TREE_CODE (op1); - if (TREE_CODE_CLASS (code) == tcc_comparison) - { - op0 = TREE_OPERAND (op1, 0); - op1 = TREE_OPERAND (op1, 1); - } - break; - default: - code = gimple_assign_rhs_code (use_stmt); - if (TREE_CODE_CLASS (code) == tcc_comparison) - { - op0 = gimple_assign_rhs1 (use_stmt); - op1 = gimple_assign_rhs2 (use_stmt); - } - break; - } - else if (gimple_code (use_stmt) == GIMPLE_COND) - { - code = gimple_cond_code (use_stmt); - op0 = gimple_cond_lhs (use_stmt); - op1 = gimple_cond_rhs (use_stmt); - } - - switch (code) - { - case LT_EXPR: - case LE_EXPR: - case GT_EXPR: - case GE_EXPR: - if (!INTEGRAL_TYPE_P (TREE_TYPE (use_lhs)) - || TREE_CODE (TREE_TYPE (use_lhs)) == BOOLEAN_TYPE - || TYPE_UNSIGNED (TREE_TYPE (use_lhs))) - return false; - /* FALLTHRU */ - case EQ_EXPR: - case NE_EXPR: - if (op0 == use_lhs && integer_zerop (op1)) - break; - return false; - default: - return false; - } - - int encoded; - switch (code) - { - /* Use special encoding of the operation. We want to also - encode the mode in the first argument and for neither EQ_EXPR - etc. nor EQ etc. we can rely it will fit into QImode. */ - case EQ_EXPR: encoded = ATOMIC_OP_FETCH_CMP_0_EQ; break; - case NE_EXPR: encoded = ATOMIC_OP_FETCH_CMP_0_NE; break; - case LT_EXPR: encoded = ATOMIC_OP_FETCH_CMP_0_LT; break; - case LE_EXPR: encoded = ATOMIC_OP_FETCH_CMP_0_LE; break; - case GT_EXPR: encoded = ATOMIC_OP_FETCH_CMP_0_GT; break; - case GE_EXPR: encoded = ATOMIC_OP_FETCH_CMP_0_GE; break; - default: gcc_unreachable (); - } - - tree new_lhs = make_ssa_name (boolean_type_node); - gimple *g; - tree flag = build_int_cst (TREE_TYPE (lhs), encoded); - if (has_model_arg) - g = gimple_build_call_internal (fn, 5, flag, - gimple_call_arg (call, 0), - gimple_call_arg (call, 1), - gimple_call_arg (call, 2), - gimple_call_fn (call)); - else - g = gimple_build_call_internal (fn, 4, flag, - gimple_call_arg (call, 0), - gimple_call_arg (call, 1), - gimple_call_fn (call)); - gimple_call_set_lhs (g, new_lhs); - gimple_set_location (g, gimple_location (call)); - gimple_move_vops (g, call); - bool throws = stmt_can_throw_internal (cfun, call); - gimple_call_set_nothrow (as_a (g), - gimple_call_nothrow_p (as_a (call))); - gimple_stmt_iterator gsi = *gsip; - gsi_insert_after (&gsi, g, GSI_SAME_STMT); - if (throws) - maybe_clean_or_replace_eh_stmt (call, g); - if (is_gimple_assign (use_stmt)) - switch (gimple_assign_rhs_code (use_stmt)) - { - case COND_EXPR: - gimple_assign_set_rhs1 (use_stmt, new_lhs); - break; - default: - gsi = gsi_for_stmt (use_stmt); - if (tree ulhs = gimple_assign_lhs (use_stmt)) - if (useless_type_conversion_p (TREE_TYPE (ulhs), - boolean_type_node)) - { - gimple_assign_set_rhs_with_ops (&gsi, SSA_NAME, new_lhs); - break; - } - gimple_assign_set_rhs_with_ops (&gsi, NOP_EXPR, new_lhs); - break; - } - else if (gimple_code (use_stmt) == GIMPLE_COND) - { - gcond *use_cond = as_a (use_stmt); - gimple_cond_set_code (use_cond, NE_EXPR); - gimple_cond_set_lhs (use_cond, new_lhs); - gimple_cond_set_rhs (use_cond, boolean_false_node); - } - - update_stmt (use_stmt); - if (use_lhs != lhs) - { - gsi = gsi_for_stmt (SSA_NAME_DEF_STMT (use_lhs)); - gsi_remove (&gsi, true); - release_ssa_name (use_lhs); - } - gsi_remove (gsip, true); - release_ssa_name (lhs); - return true; -} - /* A simple pass that attempts to fold all builtin functions. This pass is run after we've propagated as many constants as we can. */ @@ -4008,8 +3132,6 @@ pass_fold_builtins::execute (function *fun) for (i = gsi_start_bb (bb); !gsi_end_p (i); ) { gimple *stmt, *old_stmt; - tree callee; - enum built_in_function fcode; stmt = gsi_stmt (i); @@ -4019,128 +3141,26 @@ pass_fold_builtins::execute (function *fun) continue; } - callee = gimple_call_fndecl (stmt); - if (!callee - && gimple_call_internal_p (stmt)) + /* Only fold internal calls + or normal builtins. */ + if (!gimple_call_internal_p (stmt) + && !gimple_call_builtin_p (stmt, BUILT_IN_NORMAL)) { - if (!fold_stmt (&i)) - { - gsi_next (&i); - continue; - } - if (dump_file && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, "Simplified\n "); - print_gimple_stmt (dump_file, stmt, 0, dump_flags); - } - - old_stmt = stmt; - stmt = gsi_stmt (i); - update_stmt (stmt); - - if (maybe_clean_or_replace_eh_stmt (old_stmt, stmt) - && gimple_purge_dead_eh_edges (bb)) - cfg_changed = true; - - if (dump_file && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, "to\n "); - print_gimple_stmt (dump_file, stmt, 0, dump_flags); - fprintf (dump_file, "\n"); - } gsi_next (&i); continue; } - if (!callee || !fndecl_built_in_p (callee, BUILT_IN_NORMAL)) + if (!fold_stmt (&i)) { gsi_next (&i); continue; } - - fcode = DECL_FUNCTION_CODE (callee); - if (fold_stmt (&i)) - ; - else - { - tree result = NULL_TREE; - switch (DECL_FUNCTION_CODE (callee)) - { -#define CASE_ATOMIC(NAME) \ - case BUILT_IN_##NAME##_1: \ - case BUILT_IN_##NAME##_2: \ - case BUILT_IN_##NAME##_4: \ - case BUILT_IN_##NAME##_8: \ - case BUILT_IN_##NAME##_16 -#define CASE_ATOMIC_CMP0(ATOMIC, SYNC) \ - CASE_ATOMIC(ATOMIC_##ATOMIC): \ - optimize_atomic_op_fetch_cmp_0 (&i, \ - IFN_ATOMIC_##ATOMIC##_CMP_0, \ - true); \ - break; \ - CASE_ATOMIC(SYNC_##SYNC): \ - optimize_atomic_op_fetch_cmp_0 (&i, \ - IFN_ATOMIC_##ATOMIC##_CMP_0, \ - false); \ - break; - - - CASE_ATOMIC_CMP0(ADD_FETCH, ADD_AND_FETCH) - CASE_ATOMIC_CMP0(SUB_FETCH, SUB_AND_FETCH) - CASE_ATOMIC_CMP0(AND_FETCH, AND_AND_FETCH) - CASE_ATOMIC_CMP0(OR_FETCH, OR_AND_FETCH) -#define CASE_ATOMIC_BIT_TEST_AND(ATOMIC, SYNC, FN, AFTER) \ - CASE_ATOMIC(ATOMIC_##ATOMIC): \ - optimize_atomic_bit_test_and (&i, \ - IFN_ATOMIC_BIT_TEST_AND_##FN, \ - true, AFTER); \ - break; \ - CASE_ATOMIC(SYNC_##SYNC): \ - optimize_atomic_bit_test_and (&i, \ - IFN_ATOMIC_BIT_TEST_AND_##FN, \ - false, AFTER); \ - break; - CASE_ATOMIC_BIT_TEST_AND(FETCH_OR, FETCH_AND_OR, SET, false) - CASE_ATOMIC_BIT_TEST_AND(FETCH_XOR, FETCH_AND_XOR, COMPLEMENT, false) - CASE_ATOMIC_BIT_TEST_AND(FETCH_AND, FETCH_AND_AND, RESET, false) - - CASE_ATOMIC(ATOMIC_XOR_FETCH): - if (optimize_atomic_bit_test_and - (&i, IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT, true, true)) - break; - optimize_atomic_op_fetch_cmp_0 (&i, - IFN_ATOMIC_XOR_FETCH_CMP_0, - true); - break; - CASE_ATOMIC(SYNC_XOR_AND_FETCH): - if (optimize_atomic_bit_test_and - (&i, IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT, false, true)) - break; - optimize_atomic_op_fetch_cmp_0 (&i, - IFN_ATOMIC_XOR_FETCH_CMP_0, - false); - break; - - default:; - } - - if (!result) - { - gsi_next (&i); - continue; - } - - gimplify_and_update_call_from_tree (&i, result); - } - - todoflags |= TODO_update_address_taken; - if (dump_file && (dump_flags & TDF_DETAILS)) { fprintf (dump_file, "Simplified\n "); print_gimple_stmt (dump_file, stmt, 0, dump_flags); } - old_stmt = stmt; + old_stmt = stmt; stmt = gsi_stmt (i); update_stmt (stmt); @@ -4154,18 +3174,7 @@ pass_fold_builtins::execute (function *fun) print_gimple_stmt (dump_file, stmt, 0, dump_flags); fprintf (dump_file, "\n"); } - - /* Retry the same statement if it changed into another - builtin, there might be new opportunities now. */ - if (gimple_code (stmt) != GIMPLE_CALL) - { - gsi_next (&i); - continue; - } - callee = gimple_call_fndecl (stmt); - if (!callee - || !fndecl_built_in_p (callee, fcode)) - gsi_next (&i); + gsi_next (&i); } } From e9ba0f896efd1ef4f713923304e95eb3b2490f54 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Tue, 23 Sep 2025 21:36:00 -0700 Subject: [PATCH 063/216] Remove fold_builtin pass [PR121762] After moving the last optimization out of fab, we can finally remove this pass. For -Og, we remove this pass and also swaps out the copy_prop for a forwprop (which does an integrated copy prop too). A few testcases needed to be updated. Most is just s/fab1/optimized/ except for pr79691.c which needed a slight change in the scaning of the optimized dump; to find `return 9;` instead of `= 9;`. Bootstrappd and tested on x86_64-linux-gnu. PR tree-optimization/121762 gcc/ChangeLog: * passes.def: Remove both pass_fold_builtin. Swap out pass_copy_prop for pass_forwprop with full_walk = false and last=true. * tree-pass.h (make_pass_fold_builtins): Remove. * tree-ssa-ccp.cc (class pass_fold_builtins): Delete. (pass_fold_builtins::execute): Delete. (make_pass_fold_builtins): Remove. * doc/passes.texi (Folding built-in functions): Remove. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/builtin-fprintf-1.c: Update to scan optimized. * gcc.dg/tree-ssa/builtin-fprintf-chk-1.c: Likewise. * gcc.dg/tree-ssa/builtin-printf-1.c: Likewise. * gcc.dg/tree-ssa/builtin-printf-chk-1.c: Likewise. * gcc.dg/tree-ssa/builtin-vfprintf-1.c: Likewise. * gcc.dg/tree-ssa/builtin-vfprintf-chk-1.c: Likewise. * gcc.dg/tree-ssa/builtin-vprintf-1.c: Likewise. * gcc.dg/tree-ssa/builtin-vprintf-chk-1.c: Likewise. * gcc.dg/tree-ssa/ssa-ccp-10.c: Likewise. * gcc.dg/builtin-unreachable-5.c: Likewise. * gcc.dg/builtin-unreachable-6.c: Likewise. * gcc.dg/builtin-unreachable-6a.c: Likewise. * gcc.dg/builtin-unreachable-7.c: Likewise. * gcc.dg/pr78408-2.c: Change fab1 to forwprop1 as that optimization was moved there a while back. * gcc.dg/tree-ssa/pr79691.c: Udpate scanning for 9 constant to return. Signed-off-by: Andrew Pinski --- gcc/doc/passes.texi | 6 - gcc/passes.def | 8 +- gcc/testsuite/gcc.dg/builtin-unreachable-5.c | 10 +- gcc/testsuite/gcc.dg/builtin-unreachable-6.c | 6 +- gcc/testsuite/gcc.dg/builtin-unreachable-6a.c | 6 +- gcc/testsuite/gcc.dg/builtin-unreachable-7.c | 8 +- gcc/testsuite/gcc.dg/pr78408-2.c | 4 +- .../gcc.dg/tree-ssa/builtin-fprintf-1.c | 20 ++-- .../gcc.dg/tree-ssa/builtin-fprintf-chk-1.c | 20 ++-- .../gcc.dg/tree-ssa/builtin-printf-1.c | 22 ++-- .../gcc.dg/tree-ssa/builtin-printf-chk-1.c | 22 ++-- .../gcc.dg/tree-ssa/builtin-vfprintf-1.c | 16 +-- .../gcc.dg/tree-ssa/builtin-vfprintf-chk-1.c | 16 +-- .../gcc.dg/tree-ssa/builtin-vprintf-1.c | 16 +-- .../gcc.dg/tree-ssa/builtin-vprintf-chk-1.c | 16 +-- gcc/testsuite/gcc.dg/tree-ssa/pr79691.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-10.c | 4 +- gcc/tree-pass.h | 1 - gcc/tree-ssa-ccp.cc | 108 ------------------ 19 files changed, 96 insertions(+), 215 deletions(-) diff --git a/gcc/doc/passes.texi b/gcc/doc/passes.texi index 282fc1a6a12b..f6db15d5a5fc 100644 --- a/gcc/doc/passes.texi +++ b/gcc/doc/passes.texi @@ -735,12 +735,6 @@ cannot be used for branch prediction (though adapting it would not be difficult). The pass is located in @file{tree-vrp.cc} and is described by @code{pass_vrp}. -@item Folding built-in functions - -This pass simplifies built-in functions, as applicable, with constant -arguments or with inferable string lengths. It is located in -@file{tree-ssa-ccp.cc} and is described by @code{pass_fold_builtins}. - @item Split critical edges This pass identifies critical edges and inserts empty basic blocks diff --git a/gcc/passes.def b/gcc/passes.def index 3f828477b687..fac04cd86c7d 100644 --- a/gcc/passes.def +++ b/gcc/passes.def @@ -369,7 +369,6 @@ along with GCC; see the file COPYING3. If not see NEXT_PASS (pass_forwprop, /*full_walk=*/false, /*last=*/true); NEXT_PASS (pass_sink_code, true /* unsplit edges */); NEXT_PASS (pass_phiopt, false /* early_p */); - NEXT_PASS (pass_fold_builtins); NEXT_PASS (pass_optimize_widening_mul); NEXT_PASS (pass_store_merging); /* If DCE is not run before checking for uninitialized uses, @@ -405,12 +404,9 @@ along with GCC; see the file COPYING3. If not see NEXT_PASS (pass_ccp, true /* nonzero_p */); NEXT_PASS (pass_post_ipa_warn); NEXT_PASS (pass_object_sizes); - /* Fold remaining builtins. */ - NEXT_PASS (pass_fold_builtins); NEXT_PASS (pass_strlen); - /* Copy propagation also copy-propagates constants, this is necessary - to forward object-size and builtin folding results properly. */ - NEXT_PASS (pass_copy_prop); + /* Fold remaining builtins. */ + NEXT_PASS (pass_forwprop, /*full_walk=*/false, /*last=*/true); NEXT_PASS (pass_dce); /* Profile count may overflow as a result of inlinining very large loop nests. This pass should run before any late pass that makes diff --git a/gcc/testsuite/gcc.dg/builtin-unreachable-5.c b/gcc/testsuite/gcc.dg/builtin-unreachable-5.c index ba87bdd735e2..91e6dcc3db13 100644 --- a/gcc/testsuite/gcc.dg/builtin-unreachable-5.c +++ b/gcc/testsuite/gcc.dg/builtin-unreachable-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fab1" } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ int foo (int a) @@ -16,7 +16,7 @@ foo (int a) return a > 0; } -/* { dg-final { scan-tree-dump-times "if \\(" 0 "fab1" } } */ -/* { dg-final { scan-tree-dump-times "goto" 0 "fab1" } } */ -/* { dg-final { scan-tree-dump-times "L1:" 0 "fab1" } } */ -/* { dg-final { scan-tree-dump-times "__builtin_unreachable" 0 "fab1" } } */ +/* { dg-final { scan-tree-dump-times "if \\(" 0 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "goto" 0 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "L1:" 0 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "__builtin_unreachable" 0 "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/builtin-unreachable-6.c b/gcc/testsuite/gcc.dg/builtin-unreachable-6.c index 4c3b9bbaefd0..c896ad4e39ce 100644 --- a/gcc/testsuite/gcc.dg/builtin-unreachable-6.c +++ b/gcc/testsuite/gcc.dg/builtin-unreachable-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fab1 -fno-tree-dominator-opts -fno-tree-vrp" } */ +/* { dg-options "-O2 -fdump-tree-optimized -fno-tree-dominator-opts -fno-tree-vrp" } */ /* { dg-require-effective-target label_values } */ void @@ -17,5 +17,5 @@ foo (int b, int c) goto *x; } -/* { dg-final { scan-tree-dump-times "lab:" 1 "fab1" } } */ -/* { dg-final { scan-tree-dump-times "__builtin_unreachable" 1 "fab1" } } */ +/* { dg-final { scan-tree-dump-times "lab:" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "__builtin_unreachable" 1 "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/builtin-unreachable-6a.c b/gcc/testsuite/gcc.dg/builtin-unreachable-6a.c index f527f2edc3b2..53062352d420 100644 --- a/gcc/testsuite/gcc.dg/builtin-unreachable-6a.c +++ b/gcc/testsuite/gcc.dg/builtin-unreachable-6a.c @@ -1,7 +1,7 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fab1" } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ #include "builtin-unreachable-6.c" -/* { dg-final { scan-tree-dump-times "lab:" 1 "fab1" } } */ -/* { dg-final { scan-tree-dump-not "__builtin_unreachable" "fab1" } } */ +/* { dg-final { scan-tree-dump-times "lab:" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-not "__builtin_unreachable" "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/builtin-unreachable-7.c b/gcc/testsuite/gcc.dg/builtin-unreachable-7.c index a6c078fef285..0ff60b6550be 100644 --- a/gcc/testsuite/gcc.dg/builtin-unreachable-7.c +++ b/gcc/testsuite/gcc.dg/builtin-unreachable-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fab1 -fno-tree-dominator-opts -fno-tree-vrp" } */ +/* { dg-options "-O2 -fdump-tree-optimized -fno-tree-dominator-opts -fno-tree-vrp" } */ /* { dg-require-effective-target label_values } */ void foo (int b, int c) @@ -18,7 +18,7 @@ void foo (int b, int c) /* Fab should still able to remove the conditional but leave the bb there. */ -/* { dg-final { scan-tree-dump-times "lab:" 1 "fab1" } } */ -/* { dg-final { scan-tree-dump-times "__builtin_unreachable" 1 "fab1" } } */ -/* { dg-final { scan-tree-dump-not "if " "fab1" } } */ +/* { dg-final { scan-tree-dump-times "lab:" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "__builtin_unreachable" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-not "if " "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/pr78408-2.c b/gcc/testsuite/gcc.dg/pr78408-2.c index 89c9b7eae435..cad1285f70e4 100644 --- a/gcc/testsuite/gcc.dg/pr78408-2.c +++ b/gcc/testsuite/gcc.dg/pr78408-2.c @@ -1,7 +1,7 @@ /* PR c/78408 */ /* { dg-do compile { target size32plus } } */ -/* { dg-options "-O2 -fdump-tree-fab1-details" } */ -/* { dg-final { scan-tree-dump-not "after previous" "fab1" } } */ +/* { dg-options "-O2 -fdump-tree-forwprop1-details" } */ +/* { dg-final { scan-tree-dump-not "after previous" "forwprop1" } } */ struct S { char a[32]; }; struct T { char a[65536]; }; diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-1.c b/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-1.c index 9e4501490dbb..31d7f70e4418 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fab1" } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ typedef struct { int i; } FILE; FILE *fp; @@ -29,12 +29,12 @@ void test (void) vi9 = 0; } -/* { dg-final { scan-tree-dump "vi0.*fwrite.*\"hello\".*1, 5, fp.*vi1" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi1.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi2" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi2.*fputc.*fp.*vi3" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi4.*fwrite.*\"hello\".*1, 5, fp.*vi5" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi5.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi6" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi6.*fputc.*fp.*vi7" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi7.*fputc.*fp.*vi8" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi8.*fprintf.*fp.*\"%d%d\".*vi9" "fab1"} } */ +/* { dg-final { scan-tree-dump "vi0.*fwrite.*\"hello\".*1, 5, fp.*vi1" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi1.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi2" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi2.*fputc.*fp.*vi3" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi4.*fwrite.*\"hello\".*1, 5, fp.*vi5" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi5.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi6" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi6.*fputc.*fp.*vi7" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi7.*fputc.*fp.*vi8" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi8.*fprintf.*fp.*\"%d%d\".*vi9" "optimized"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-chk-1.c b/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-chk-1.c index f3de73acd86c..f4f18e8bebbf 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-chk-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-chk-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fab1" } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ typedef struct { int i; } FILE; FILE *fp; @@ -29,12 +29,12 @@ void test (void) vi9 = 0; } -/* { dg-final { scan-tree-dump "vi0.*fwrite.*\"hello\".*1, 5, fp.*vi1" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi1.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi2" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi2.*fputc.*fp.*vi3" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi4.*fwrite.*\"hello\".*1, 5, fp.*vi5" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi5.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi6" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi6.*fputc.*fp.*vi7" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi7.*fputc.*fp.*vi8" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi8.*__fprintf_chk.*fp.*1.*\"%d%d\".*vi9" "fab1"} } */ +/* { dg-final { scan-tree-dump "vi0.*fwrite.*\"hello\".*1, 5, fp.*vi1" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi1.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi2" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi2.*fputc.*fp.*vi3" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi4.*fwrite.*\"hello\".*1, 5, fp.*vi5" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi5.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi6" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi6.*fputc.*fp.*vi7" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi7.*fputc.*fp.*vi8" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi8.*__fprintf_chk.*fp.*1.*\"%d%d\".*vi9" "optimized"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-1.c b/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-1.c index bd119e0e55bd..056edea65d2d 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fab1" } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ extern int printf (const char *, ...); volatile int vi0, vi1, vi2, vi3, vi4, vi5, vi6, vi7, vi8, vi9, via; @@ -29,13 +29,13 @@ void test (void) via = 0; } -/* { dg-final { scan-tree-dump "vi0.*printf.*\"hello\".*vi1" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi4.*printf.*\"hello\".*vi5" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi5.*puts.*\"hello\".*vi6" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi6.*putchar.*vi7" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi7 ={v} 0\[^\(\)\]*vi8 ={v} 0" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi8.*putchar.*vi9" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi9.*puts.*\"hello\\\\n\".*via" "fab1"} } */ +/* { dg-final { scan-tree-dump "vi0.*printf.*\"hello\".*vi1" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi4.*printf.*\"hello\".*vi5" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi5.*puts.*\"hello\".*vi6" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi6.*putchar.*vi7" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi7 ={v} 0\[^\(\)\]*vi8 ={v} 0" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi8.*putchar.*vi9" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi9.*puts.*\"hello\\\\n\".*via" "optimized"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-chk-1.c b/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-chk-1.c index a0c0ef946f38..1a9690fde125 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-chk-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-chk-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fab1" } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ extern int __printf_chk (int, const char *, ...); volatile int vi0, vi1, vi2, vi3, vi4, vi5, vi6, vi7, vi8, vi9, via; @@ -29,13 +29,13 @@ void test (void) via = 0; } -/* { dg-final { scan-tree-dump "vi0.*__printf_chk.*1.*\"hello\".*vi1" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi4.*__printf_chk.*1.*\"hello\".*vi5" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi5.*puts.*\"hello\".*vi6" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi6.*putchar.*vi7" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi7 ={v} 0\[^\(\)\]*vi8 ={v} 0" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi8.*putchar.*vi9" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi9.*puts.*\"hello\\\\n\".*via" "fab1"} } */ +/* { dg-final { scan-tree-dump "vi0.*__printf_chk.*1.*\"hello\".*vi1" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi4.*__printf_chk.*1.*\"hello\".*vi5" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi5.*puts.*\"hello\".*vi6" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi6.*putchar.*vi7" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi7 ={v} 0\[^\(\)\]*vi8 ={v} 0" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi8.*putchar.*vi9" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi9.*puts.*\"hello\\\\n\".*via" "optimized"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-1.c b/gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-1.c index 29b4a4b4ebe7..3124309198c6 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fab1" } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ #include @@ -29,10 +29,10 @@ test (va_list ap1, va_list ap2, va_list ap3, va_list ap4, va_list ap5, vi7 = 0; } -/* { dg-final { scan-tree-dump "vi0.*fwrite.*\"hello\".*1, 5, fp.*vi1" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi1.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi2" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi2.*fputc.*fp.*vi3" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi4.*vfprintf.*\"%s\".*vi5" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi5.*vfprintf.*\"%c\".*vi6" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi6.*vfprintf.*\"%s\\\\n\".*vi7" "fab1"} } */ +/* { dg-final { scan-tree-dump "vi0.*fwrite.*\"hello\".*1, 5, fp.*vi1" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi1.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi2" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi2.*fputc.*fp.*vi3" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi4.*vfprintf.*\"%s\".*vi5" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi5.*vfprintf.*\"%c\".*vi6" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi6.*vfprintf.*\"%s\\\\n\".*vi7" "optimized"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-chk-1.c b/gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-chk-1.c index c91c70921b50..15ee7f979526 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-chk-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-chk-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fab1" } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ #include @@ -29,10 +29,10 @@ test (va_list ap1, va_list ap2, va_list ap3, va_list ap4, va_list ap5, vi7 = 0; } -/* { dg-final { scan-tree-dump "vi0.*fwrite.*\"hello\".*1, 5, fp.*vi1" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi1.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi2" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi2.*fputc.*fp.*vi3" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi4.*__vfprintf_chk.*fp.*1.*\"%s\".*vi5" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi5.*__vfprintf_chk.*fp.*1.*\"%c\".*vi6" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi6.*__vfprintf_chk.*fp.*1.*\"%s\\\\n\".*vi7" "fab1"} } */ +/* { dg-final { scan-tree-dump "vi0.*fwrite.*\"hello\".*1, 5, fp.*vi1" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi1.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi2" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi2.*fputc.*fp.*vi3" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi4.*__vfprintf_chk.*fp.*1.*\"%s\".*vi5" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi5.*__vfprintf_chk.*fp.*1.*\"%c\".*vi6" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi6.*__vfprintf_chk.*fp.*1.*\"%s\\\\n\".*vi7" "optimized"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-1.c b/gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-1.c index 023384a3b819..ed7a4ae05592 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fab1" } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ #include @@ -27,10 +27,10 @@ test (va_list ap1, va_list ap2, va_list ap3, va_list ap4, va_list ap5, vi7 = 0; } -/* { dg-final { scan-tree-dump "vi0.*vprintf.*\"hello\".*vi1" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi4.*vprintf.*\"%s\".*vi5" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi5.*vprintf.*\"%c\".*vi6" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi6.*vprintf.*\"%s\\\\n\".*vi7" "fab1"} } */ +/* { dg-final { scan-tree-dump "vi0.*vprintf.*\"hello\".*vi1" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi4.*vprintf.*\"%s\".*vi5" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi5.*vprintf.*\"%c\".*vi6" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi6.*vprintf.*\"%s\\\\n\".*vi7" "optimized"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-chk-1.c b/gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-chk-1.c index 2b21f7b70e22..b86fe33f0edd 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-chk-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-chk-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fab1" } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ #include @@ -27,10 +27,10 @@ test (va_list ap1, va_list ap2, va_list ap3, va_list ap4, va_list ap5, vi7 = 0; } -/* { dg-final { scan-tree-dump "vi0.*__vprintf_chk.*1.*\"hello\".*vi1" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi4.*__vprintf_chk.*1.*\"%s\".*vi5" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi5.*__vprintf_chk.*1.*\"%c\".*vi6" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi6.*__vprintf_chk.*1.*\"%s\\\\n\".*vi7" "fab1"} } */ +/* { dg-final { scan-tree-dump "vi0.*__vprintf_chk.*1.*\"hello\".*vi1" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi4.*__vprintf_chk.*1.*\"%s\".*vi5" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi5.*__vprintf_chk.*1.*\"%c\".*vi6" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi6.*__vprintf_chk.*1.*\"%s\\\\n\".*vi7" "optimized"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr79691.c b/gcc/testsuite/gcc.dg/tree-ssa/pr79691.c index bf889318c063..43770c95bcab 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr79691.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr79691.c @@ -34,4 +34,4 @@ int f4 (int i) /* { dg-final { scan-tree-dump-times "sprintf" 1 "optimized" } } { dg-final { scan-tree-dump-times "snprintf" 1 "optimized" } } - { dg-final { scan-tree-dump " = 9;" "optimized" } } */ + { dg-final { scan-tree-dump "return 9;" "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-10.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-10.c index d6126a3e8efe..dc87a56de06e 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-10.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-10.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O1 -fdump-tree-fab1" } */ +/* { dg-options "-O1 -fdump-tree-optimized" } */ /* Check that we fold strlen of equally long strings, and that we do not fail to terminate when there is a nontrivial cycle in the corresponding @@ -32,4 +32,4 @@ void foo(int i) } /* There should be no calls to strlen. */ -/* { dg-final { scan-tree-dump-times "strlen" 0 "fab1"} } */ +/* { dg-final { scan-tree-dump-times "strlen" 0 "optimized"} } */ diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h index 61cec52c6248..410341d47119 100644 --- a/gcc/tree-pass.h +++ b/gcc/tree-pass.h @@ -447,7 +447,6 @@ extern gimple_opt_pass *make_pass_warn_access (gcc::context *ctxt); extern gimple_opt_pass *make_pass_warn_printf (gcc::context *ctxt); extern gimple_opt_pass *make_pass_warn_recursion (gcc::context *ctxt); extern gimple_opt_pass *make_pass_strlen (gcc::context *ctxt); -extern gimple_opt_pass *make_pass_fold_builtins (gcc::context *ctxt); extern gimple_opt_pass *make_pass_post_ipa_warn (gcc::context *ctxt); extern gimple_opt_pass *make_pass_stdarg (gcc::context *ctxt); extern gimple_opt_pass *make_pass_early_warn_uninitialized (gcc::context *ctxt); diff --git a/gcc/tree-ssa-ccp.cc b/gcc/tree-ssa-ccp.cc index c884fdfffd01..6de02e5c7dcb 100644 --- a/gcc/tree-ssa-ccp.cc +++ b/gcc/tree-ssa-ccp.cc @@ -3085,114 +3085,6 @@ make_pass_ccp (gcc::context *ctxt) return new pass_ccp (ctxt); } -/* A simple pass that attempts to fold all builtin functions. This pass - is run after we've propagated as many constants as we can. */ - -namespace { - -const pass_data pass_data_fold_builtins = -{ - GIMPLE_PASS, /* type */ - "fab", /* name */ - OPTGROUP_NONE, /* optinfo_flags */ - TV_NONE, /* tv_id */ - ( PROP_cfg | PROP_ssa ), /* properties_required */ - 0, /* properties_provided */ - 0, /* properties_destroyed */ - 0, /* todo_flags_start */ - TODO_update_ssa, /* todo_flags_finish */ -}; - -class pass_fold_builtins : public gimple_opt_pass -{ -public: - pass_fold_builtins (gcc::context *ctxt) - : gimple_opt_pass (pass_data_fold_builtins, ctxt) - {} - - /* opt_pass methods: */ - opt_pass * clone () final override { return new pass_fold_builtins (m_ctxt); } - unsigned int execute (function *) final override; - -}; // class pass_fold_builtins - -unsigned int -pass_fold_builtins::execute (function *fun) -{ - bool cfg_changed = false; - basic_block bb; - unsigned int todoflags = 0; - - /* Set last full fold prop if not already set. */ - fun->curr_properties |= PROP_last_full_fold; - - FOR_EACH_BB_FN (bb, fun) - { - gimple_stmt_iterator i; - for (i = gsi_start_bb (bb); !gsi_end_p (i); ) - { - gimple *stmt, *old_stmt; - - stmt = gsi_stmt (i); - - if (gimple_code (stmt) != GIMPLE_CALL) - { - gsi_next (&i); - continue; - } - - /* Only fold internal calls - or normal builtins. */ - if (!gimple_call_internal_p (stmt) - && !gimple_call_builtin_p (stmt, BUILT_IN_NORMAL)) - { - gsi_next (&i); - continue; - } - if (!fold_stmt (&i)) - { - gsi_next (&i); - continue; - } - if (dump_file && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, "Simplified\n "); - print_gimple_stmt (dump_file, stmt, 0, dump_flags); - } - - old_stmt = stmt; - stmt = gsi_stmt (i); - update_stmt (stmt); - - if (maybe_clean_or_replace_eh_stmt (old_stmt, stmt) - && gimple_purge_dead_eh_edges (bb)) - cfg_changed = true; - - if (dump_file && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, "to\n "); - print_gimple_stmt (dump_file, stmt, 0, dump_flags); - fprintf (dump_file, "\n"); - } - gsi_next (&i); - } - } - - /* Delete unreachable blocks. */ - if (cfg_changed) - todoflags |= TODO_cleanup_cfg; - - return todoflags; -} - -} // anon namespace - -gimple_opt_pass * -make_pass_fold_builtins (gcc::context *ctxt) -{ - return new pass_fold_builtins (ctxt); -} - /* A simple pass that emits some warnings post IPA. */ namespace { From f864e4b54a13420f37dc3710aeb9f8a6f9e63b9c Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Fri, 3 Oct 2025 08:41:53 -0600 Subject: [PATCH 064/216] [RISC-V][PR rtl-optimization/121937] Don't call neg_poly_int_rtx with a vector mode Fun little bug. We're asked to simplify this: (vec_select:HI (if_then_else:V2HI (unspec:V2BI [ (const_vector:V2BI [ (const_int 0 [0]) (const_int 1 [0x1]) ]) (const_int 2 [0x2]) (const_int 0 [0]) repeated x3 (reg:SI 66 vl) (reg:SI 67 vtype) ] UNSPEC_VPREDICATE) (const_vector:V2HI [ (const_int 0 [0]) (const_int -1 [0xffffffffffffffff]) ]) (const_vector:V2HI [ (const_int -1 [0xffffffffffffffff]) (const_int 0 [0]) ])) (parallel [ (const_int 0 [0]) ])) That triggers some fairly obscure code in combine which realizes the arms are STORE_FLAG_VALUE computabble. So we ask for a simplified conditional of the condition against (const_int 0): 3610 return simplify_context ().simplify_gen_relational (code, mode, op_mode, (gdb) p debug_rtx (op0) (unspec:V2BI [ (const_vector:V2BI [ (const_int 0 [0]) (const_int 1 [0x1]) ]) (const_int 2 [0x2]) (const_int 0 [0]) repeated x3 (reg:SI 66 vl) (reg:SI 67 vtype) ] UNSPEC_VPREDICATE) $50 = void (gdb) p debug_rtx (op1) (const_int 0 [0]) CODE will be EQ. So that eventually we'll try that as a simplification using MINUS with those two operands. That ultimately lands us in simplify_binary_operation_1 which (of course) tries to simplify x - 0 to x. But that fails because we test (const_int 0) against CONST0_RTX (V2BI) which, of course, false. We then stumble down into this code: /* Don't let a relocatable value get a negative coeff. */ if (poly_int_rtx_p (op1) && GET_MODE (op0) != VOIDmode) return simplify_gen_binary (PLUS, mode, op0, neg_poly_int_rtx (mode, op1)); Where MODE is V2BI. That's not a scalar mode and we try to get the precision of V2BI in the bowels of neg_poly_int_rtx, which looks like: return GET_MODE_PRECISION (as_a (x.second)); Where x.second is the mode, V2BI. Since V2BI is not a scalar mode it blows up as seen in the BZ. The immediate and direct fix is to guard that code with a check that we've got a scalar mode. I looked at passing a more suitable zero node as well as improving the checks to simplify x - 0 -> x for this case. While the RTL does simplify in the expected ways, nothing really comes out of the RTL simplification (ie, the final assembly code is the same). So I decided against including those hacks (they really didn't feel all that clean to me). There's just not a compelling reason for them. Anyway, bootstrapped and regression tested on x86_64. Verified it fixes the riscv fault and doesn't regress riscv64-elf and riscv32-elf. Bootstrap on riscv native targets will fire up overnight. PR rtl-optimization/121937 gcc/ * simplify-rtx.cc (simplify_context::simplify_binary_operation_1): Make sure we've got a scalar_int_mode before calling neg_poly_int_rtx. gcc/testsuite/ * gcc.target/riscv/pr121937.c: New test. --- gcc/simplify-rtx.cc | 4 +- gcc/testsuite/gcc.target/riscv/pr121937.c | 66 +++++++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/riscv/pr121937.c diff --git a/gcc/simplify-rtx.cc b/gcc/simplify-rtx.cc index 46f1df6fab46..c4de035b44fd 100644 --- a/gcc/simplify-rtx.cc +++ b/gcc/simplify-rtx.cc @@ -3465,7 +3465,9 @@ simplify_context::simplify_binary_operation_1 (rtx_code code, return plus_constant (mode, op0, trunc_int_for_mode (-offset, mode)); /* Don't let a relocatable value get a negative coeff. */ - if (poly_int_rtx_p (op1) && GET_MODE (op0) != VOIDmode) + if (is_a (mode) + && poly_int_rtx_p (op1) + && GET_MODE (op0) != VOIDmode) return simplify_gen_binary (PLUS, mode, op0, neg_poly_int_rtx (mode, op1)); diff --git a/gcc/testsuite/gcc.target/riscv/pr121937.c b/gcc/testsuite/gcc.target/riscv/pr121937.c new file mode 100644 index 000000000000..3c0389c09346 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr121937.c @@ -0,0 +1,66 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-w -march=rv64gcv -mabi=lp64d" { target rv64 } } */ +/* { dg-additional-options "-w -march=rv32gcv -mabi=ilp32" { target rv32 } } */ + +#include +#define BS_VEC(type, num) type __attribute__((vector_size(num * sizeof(type)))) +typedef int16_t int16; +typedef uint16_t uint16; +typedef int32_t int32; +typedef uint64_t uint64; +int32_t g_69, g_539; +int32_t *g_68; +void func_59(int32_t p_60) { + BS_VEC(uint64, 2) BS_VAR_4; + BS_VEC(int16, 8) BS_VAR_6; + uint64 *LOCAL_CHECKSUM; + int32_t *l_108 = &g_69; + int64_t l_829 = 10; + int32_t l_844 = -1; + for (; g_69;) { + int32_t l_924; + if (p_60 * 2u) { + BS_LABEL_0: + *LOCAL_CHECKSUM ^= BS_VAR_4[3]; + for (l_924 = 3; l_924; l_924 -= 1) { + BS_VEC(uint64, 8) + BS_TEMP_600 = -__builtin_convertvector(BS_VAR_6, BS_VEC(uint64, 8)); + BS_VEC(uint64, 8) + BS_TEMP_601 = __builtin_convertvector((BS_VEC(int32, 8)){p_60}, + BS_VEC(uint64, 8)); + BS_VAR_4[356358257141730375] = + __builtin_convertvector( + __builtin_shufflevector((BS_VEC(uint16, 2))0, + (BS_VEC(uint16, 2))0, 1, 3, 0, 1, 2, 0, + 0, 2, 0, 0, 1, 2, 3, 3, 3, 2), + BS_VEC(uint64, 16))[BS_VAR_6[4]] > + (BS_VEC(uint64, 8)){0, BS_TEMP_600[1] ? BS_TEMP_601[1] + : 0}[l_829 != 0]; + } + } + if (*l_108) + *g_68 |= g_539; + __asm goto("" : : : : BS_LABEL_0); + BS_VEC(int16, 4) + BS_TEMP_681 = __builtin_shufflevector( + (BS_VEC(int16, 2))__builtin_shufflevector( + __builtin_convertvector( + __builtin_shufflevector(BS_VAR_6, BS_VAR_6, 8, 6, 5, 8, 1, 3, 6, + 2, 0, 1, 2, 5, 8, 6, 5, 1, 5, 0, 3, 5, + 8, 2, 2, 4, 6, 0, 6, 4, 3, 3, 1, 2), + BS_VEC(uint16, 32)), + __builtin_convertvector((BS_VEC(int32, 32)){}, BS_VEC(uint16, 32)), + 42, 52) - + __builtin_convertvector((BS_VEC(int32, 2)){l_844}, + BS_VEC(uint16, 2)) * + ~0, + ~(0 < __builtin_shufflevector( + __builtin_convertvector((BS_VEC(int32, 16)){p_60}, + BS_VEC(uint16, 16)), + (BS_VEC(uint16, 16)){20489, 3, 2, 4}, 19, 6)), + 1, 2, 0, 3); + BS_VAR_6[0] = + BS_TEMP_681[0] ^ BS_TEMP_681[1] ^ BS_TEMP_681[2] ^ BS_TEMP_681[3]; + } +} + From 8cd2db265e73c55f20c05bddf23d3e0165488b2c Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Fri, 3 Oct 2025 11:04:53 -0400 Subject: [PATCH 065/216] Revert: r16-4193 ("diagnostics: generalize state graph code to use json::property instances") This reverts commit e4ab1f87805a6555bc327538d67067f3a690eddc. Patch r16-4193-ge4ab1f87805a65 seems to have broken the build with GCC 5.5 (PR bootstrap/122151). Sorry about this. Signed-off-by: David Malcolm --- contrib/gcc.doxy | 2 +- gcc/Makefile.in | 3 +- gcc/analyzer/ana-state-to-diagnostic-state.cc | 163 +++++++------- gcc/analyzer/ana-state-to-diagnostic-state.h | 23 +- gcc/analyzer/checker-event.cc | 9 +- gcc/analyzer/sm-malloc.cc | 29 +-- gcc/configure | 2 +- gcc/configure.ac | 2 +- gcc/custom-sarif-properties/digraphs.cc | 28 --- gcc/custom-sarif-properties/digraphs.h | 37 ---- gcc/custom-sarif-properties/state-graphs.cc | 157 -------------- gcc/custom-sarif-properties/state-graphs.h | 97 --------- gcc/diagnostics/diagnostics-selftests.cc | 1 + gcc/diagnostics/diagnostics-selftests.h | 1 + gcc/diagnostics/digraphs.cc | 199 ++++-------------- gcc/diagnostics/digraphs.h | 62 ++---- gcc/diagnostics/html-sink.cc | 62 ++---- gcc/diagnostics/html-sink.h | 9 +- gcc/diagnostics/output-spec.cc | 12 +- gcc/diagnostics/state-graphs-to-dot.cc | 139 ++++++------ gcc/diagnostics/state-graphs.cc | 156 ++++++++++++++ gcc/diagnostics/state-graphs.h | 108 ++++++++++ gcc/doc/invoke.texi | 8 +- gcc/json.cc | 25 --- gcc/json.h | 82 -------- .../plugin/diagnostic_plugin_test_graphs.cc | 5 +- 26 files changed, 521 insertions(+), 900 deletions(-) delete mode 100644 gcc/custom-sarif-properties/digraphs.cc delete mode 100644 gcc/custom-sarif-properties/digraphs.h delete mode 100644 gcc/custom-sarif-properties/state-graphs.cc delete mode 100644 gcc/custom-sarif-properties/state-graphs.h create mode 100644 gcc/diagnostics/state-graphs.cc diff --git a/contrib/gcc.doxy b/contrib/gcc.doxy index 56e3845d00d4..15952046f256 100644 --- a/contrib/gcc.doxy +++ b/contrib/gcc.doxy @@ -478,7 +478,7 @@ WARN_LOGFILE = # directories like "/usr/src/myproject". Separate the files or directories # with spaces. -INPUT = gcc gcc/analyzer gcc/custom-sarif-properties gcc/diagnostics gcc/text-art +INPUT = gcc gcc/analyzer gcc/diagnostics gcc/text-art # This tag can be used to specify the character encoding of the source files that # doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 098bafbce537..6a9d6204c869 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1852,8 +1852,6 @@ OBJS = \ # Objects in libcommon.a, potentially used by all host binaries and with # no target dependencies. OBJS-libcommon = \ - custom-sarif-properties/digraphs.o \ - custom-sarif-properties/state-graphs.o \ diagnostic-global-context.o \ diagnostics/buffering.o \ diagnostics/changes.o \ @@ -1873,6 +1871,7 @@ OBJS-libcommon = \ diagnostics/paths.o \ diagnostics/paths-output.o \ diagnostics/source-printing.o \ + diagnostics/state-graphs.o \ diagnostics/state-graphs-to-dot.o \ diagnostics/selftest-context.o \ diagnostics/selftest-logical-locations.o \ diff --git a/gcc/analyzer/ana-state-to-diagnostic-state.cc b/gcc/analyzer/ana-state-to-diagnostic-state.cc index 39acf26bdd50..996538c37852 100644 --- a/gcc/analyzer/ana-state-to-diagnostic-state.cc +++ b/gcc/analyzer/ana-state-to-diagnostic-state.cc @@ -39,55 +39,38 @@ along with GCC; see the file COPYING3. If not see namespace ana { -namespace node_properties = custom_sarif_properties::state_graphs::node; +using namespace ::diagnostics::state_graphs; static void -set_wi_attr (diagnostics::digraphs::node &state_node, - const json::string_property &property, +set_wi_attr (state_node_ref state_node, + const char *attr_name, const wide_int_ref &w, signop sgn) { pretty_printer pp; pp_wide_int (&pp, w, sgn); - state_node.set_property (property, pp_formatted_text (&pp)); + state_node.set_attr (attr_name, pp_formatted_text (&pp)); } static void -set_type_attr (diagnostics::digraphs::node &state_node, - const_tree type) +set_type_attr (state_node_ref state_node, const_tree type) { gcc_assert (type); pretty_printer pp; pp_format_decoder (&pp) = default_tree_printer; pp_printf (&pp, "%T", type); - state_node.set_property (node_properties::type, - pp_formatted_text (&pp)); + state_node.set_type (pp_formatted_text (&pp)); } static void -set_bits_attr (diagnostics::digraphs::node & state_node, +set_bits_attr (state_node_ref state_node, bit_range bits) { pretty_printer pp; bits.dump_to_pp (&pp); - state_node.set_property (node_properties::bits, - pp_formatted_text (&pp)); + state_node.set_attr ("bits", pp_formatted_text (&pp)); } -static void -set_value_attrs (diagnostics::digraphs::node &state_node, - const svalue &sval) -{ - state_node.set_property (node_properties::value, - sval.to_json ()); - pretty_printer pp; - pp_format_decoder (&pp) = default_tree_printer; - sval.dump_to_pp (&pp, true); - state_node.set_property (node_properties::value_str, - pp_formatted_text (&pp)); -} - - // class analyzer_state_graph : public diagnostics::digraphs::digraph analyzer_state_graph::analyzer_state_graph (const program_state &state, @@ -158,34 +141,34 @@ analyzer_state_graph::analyzer_state_graph (const program_state &state, /* Ensure we have a node for the dst region. This could lead to additional pending edges. */ - auto &dst_node = get_or_create_state_node (item.m_dst_reg); - add_edge (nullptr, item.m_src_node, dst_node); + auto dst_node = get_or_create_state_node (item.m_dst_reg); + add_edge (nullptr, item.m_src_node.m_node, dst_node.m_node); } } -diagnostics::digraphs::node & +state_node_ref analyzer_state_graph::get_or_create_state_node (const region ®) { auto existing = m_region_to_state_node_map.find (®); if (existing != m_region_to_state_node_map.end ()) return *existing->second; - auto &state_node = create_and_add_state_node (reg); - m_region_to_state_node_map[®] = &state_node; - return state_node; + auto ref = create_and_add_state_node (reg); + m_region_to_state_node_map[®] = &ref.m_node; + return ref; } -diagnostics::digraphs::node & +state_node_ref analyzer_state_graph::create_and_add_state_node (const region ®) { auto node = create_state_node (reg); - diagnostics::digraphs::node &result = *node; + state_node_ref result = *node; if (auto parent_reg = reg.get_parent_region ()) if (parent_reg->get_kind () != RK_ROOT) { - auto &parent_state_node = get_or_create_state_node (*parent_reg); - parent_state_node.add_child (std::move (node)); + auto parent_state_node = get_or_create_state_node (*parent_reg); + parent_state_node.m_node.add_child (std::move (node)); return result; } add_node (std::move (node)); @@ -281,18 +264,19 @@ analyzer_state_graph::make_node_id (const region ®) std::unique_ptr analyzer_state_graph:: -make_state_node (enum node_properties::kind kind, +make_state_node (diagnostics::state_graphs::node_kind kind, std::string id) { auto node = std::make_unique (*this, std::move (id)); - node->set_property (node_properties::kind, kind); + state_node_ref node_ref (*node); + node_ref.set_node_kind (kind); return node; } std::unique_ptr analyzer_state_graph:: make_memspace_state_node (const region ®, - enum node_properties::kind kind) + diagnostics::state_graphs::node_kind kind) { return make_state_node (kind, make_node_id (reg)); } @@ -312,7 +296,7 @@ analyzer_state_graph::create_state_node (const region ®) const frame_region &frame_reg = static_cast (reg); - node = make_state_node (node_properties::kind::stack_frame, + node = make_state_node (diagnostics::state_graphs::node_kind::stack_frame, make_node_id (reg)); node->set_logical_loc (m_logical_loc_mgr.key_from_tree (frame_reg.get_fndecl ())); @@ -320,59 +304,58 @@ analyzer_state_graph::create_state_node (const region ®) pretty_printer pp; pp_format_decoder (&pp) = default_tree_printer; pp_printf (&pp, "%E", frame_reg.get_fndecl ()); - node->set_property (node_properties::function, - pp_formatted_text (&pp)); + node->set_attr (STATE_NODE_PREFIX, "function", + pp_formatted_text (&pp)); } } break; case RK_GLOBALS: node = make_memspace_state_node (reg, - node_properties::kind::globals); + diagnostics::state_graphs::node_kind::globals); break; case RK_CODE: node = make_memspace_state_node (reg, - node_properties::kind::code); + diagnostics::state_graphs::node_kind::code); break; case RK_FUNCTION: node = make_memspace_state_node (reg, - node_properties::kind::function); + diagnostics::state_graphs::node_kind::function); // TODO break; case RK_STACK: node = make_memspace_state_node (reg, - node_properties::kind::stack); + diagnostics::state_graphs::node_kind::stack); break; case RK_HEAP: node = make_memspace_state_node (reg, - node_properties::kind::heap_); + diagnostics::state_graphs::node_kind::heap_); break; case RK_THREAD_LOCAL: node = make_memspace_state_node (reg, - node_properties::kind::thread_local_); + diagnostics::state_graphs::node_kind::thread_local_); break; case RK_ROOT: gcc_unreachable (); break; case RK_SYMBOLIC: node = make_memspace_state_node (reg, - node_properties::kind::other); + diagnostics::state_graphs::node_kind::other); break; case RK_DECL: { - node = make_state_node (node_properties::kind::variable, + node = make_state_node (diagnostics::state_graphs::node_kind::variable, make_node_id (reg)); const decl_region &decl_reg = static_cast (reg); - + state_node_ref node_ref (*node); { pretty_printer pp; pp_format_decoder (&pp) = default_tree_printer; pp_printf (&pp, "%E", decl_reg.get_decl ()); - node->set_property (node_properties::name, - pp_formatted_text (&pp)); + node_ref.set_name (pp_formatted_text (&pp)); } set_type_attr (*node, TREE_TYPE (decl_reg.get_decl ())); } @@ -394,14 +377,14 @@ analyzer_state_graph::create_state_node (const region ®) case RK_ERRNO: case RK_PRIVATE: case RK_UNKNOWN: - node = make_state_node (node_properties::kind::other, + node = make_state_node (diagnostics::state_graphs::node_kind::other, make_node_id (reg)); break; case RK_HEAP_ALLOCATED: case RK_ALLOCA: node = make_memspace_state_node (reg, - node_properties::kind::dynalloc_buffer); + diagnostics::state_graphs::node_kind::dynalloc_buffer); set_attr_for_dynamic_extents (reg, *node); break; } @@ -442,9 +425,9 @@ create_state_nodes_for_binding_cluster (const binding_cluster &cluster, get_or_create_state_node (*reg); } - auto &ref = get_or_create_state_node (*cluster.get_base_region ()); + auto ref = get_or_create_state_node (*cluster.get_base_region ()); - ref.add_child (create_state_node_for_conc_bindings (conc_bindings)); + ref.m_node.add_child (create_state_node_for_conc_bindings (conc_bindings)); const region *typed_reg = cluster.get_base_region (); if (!typed_reg->get_type ()) @@ -472,18 +455,23 @@ create_state_nodes_for_binding_cluster (const binding_cluster &cluster, std::unique_ptr analyzer_state_graph::create_state_node_for_conc_bindings (const concrete_bindings_t &conc_bindings) { - auto node = make_state_node (node_properties::kind::other, + auto node = make_state_node (diagnostics::state_graphs::node_kind::other, make_node_id ("concrete-bindings")); for (auto iter : conc_bindings) { const bit_range bits = iter.first; const svalue *sval = iter.second; auto binding_state_node - = make_state_node (node_properties::kind::other, + = make_state_node (diagnostics::state_graphs::node_kind::other, make_node_id ("binding")); set_bits_attr (*binding_state_node, bits); - gcc_assert (sval); - set_value_attrs (*binding_state_node, *sval); + { + pretty_printer pp; + pp_format_decoder (&pp) = default_tree_printer; + sval->dump_to_pp (&pp, true); + binding_state_node->set_attr (STATE_NODE_PREFIX, "value", + pp_formatted_text (&pp)); + } node->add_child (std::move (binding_state_node)); } return node; @@ -508,28 +496,27 @@ analyzer_state_graph::get_bit_range_within_base_region (const region ®, void analyzer_state_graph:: -populate_state_node_for_typed_region (diagnostics::digraphs::node &state_node, +populate_state_node_for_typed_region (state_node_ref node, const region ®, const concrete_bindings_t &conc_bindings, bool create_all) { const_tree reg_type = reg.get_type (); gcc_assert (reg_type); - set_type_attr (state_node, reg_type); + set_type_attr (node, reg_type); bit_range bits (0, 0); if (get_bit_range_within_base_region (reg, bits)) { - set_bits_attr (state_node, bits); + set_bits_attr (node, bits); auto search = conc_bindings.find (bits); if (search != conc_bindings.end ()) { const svalue *bound_sval = search->second; - gcc_assert (bound_sval); - set_value_attrs (state_node, *bound_sval); + node.set_json_attr ("value", bound_sval->to_json ()); if (const region *dst_reg = bound_sval->maybe_get_region ()) - m_pending_edges.push_back ({state_node, *dst_reg}); + m_pending_edges.push_back ({node, *dst_reg}); } } @@ -568,10 +555,9 @@ populate_state_node_for_typed_region (diagnostics::digraphs::node &state_node, { auto child_state_node = make_state_node - (node_properties::kind::element, + (diagnostics::state_graphs::node_kind::element, make_node_id (*child_reg)); - set_wi_attr (*child_state_node, - node_properties::index, idx, UNSIGNED); + set_wi_attr (*child_state_node, "index", idx, UNSIGNED); // Recurse: gcc_assert (element_type); @@ -579,7 +565,7 @@ populate_state_node_for_typed_region (diagnostics::digraphs::node &state_node, *child_reg, conc_bindings, create_all); - state_node.add_child (std::move (child_state_node)); + node.m_node.add_child (std::move (child_state_node)); } } } @@ -601,12 +587,11 @@ populate_state_node_for_typed_region (diagnostics::digraphs::node &state_node, { auto child_state_node = make_state_node - (node_properties::kind::padding, + (diagnostics::state_graphs::node_kind::padding, make_node_id (*child_reg)); - set_wi_attr (*child_state_node, - node_properties::num_bits, + set_wi_attr (*child_state_node, "num_bits", item.m_bit_range.m_size_in_bits, SIGNED); - state_node.add_child (std::move (child_state_node)); + node.m_node.add_child (std::move (child_state_node)); } } else @@ -615,27 +600,27 @@ populate_state_node_for_typed_region (diagnostics::digraphs::node &state_node, = m_mgr.get_field_region (®, const_cast (item.m_field)); if (show_child_state_node_for_child_region_p (*child_reg, - conc_bindings, - create_all)) + conc_bindings, + create_all)) { auto child_state_node = make_state_node - (node_properties::kind::field, + (diagnostics::state_graphs::node_kind::field, make_node_id (*child_reg)); { pretty_printer pp; pp_format_decoder (&pp) = default_tree_printer; pp_printf (&pp, "%D", item.m_field); - child_state_node->set_property (node_properties::name, - pp_formatted_text (&pp)); + child_state_node->set_attr (STATE_NODE_PREFIX, "name", + pp_formatted_text (&pp)); } // Recurse: populate_state_node_for_typed_region (*child_state_node, - *child_reg, - conc_bindings, - create_all); - state_node.add_child (std::move (child_state_node)); + *child_reg, + conc_bindings, + create_all); + node.m_node.add_child (std::move (child_state_node)); } } } @@ -645,9 +630,8 @@ populate_state_node_for_typed_region (diagnostics::digraphs::node &state_node, } void -analyzer_state_graph:: -set_attr_for_dynamic_extents (const region ®, - diagnostics::digraphs::node &state_node) +analyzer_state_graph::set_attr_for_dynamic_extents (const region ®, + state_node_ref node_ref) { const svalue *sval = m_state.m_region_model->get_dynamic_extents (®); if (sval) @@ -658,16 +642,15 @@ set_attr_for_dynamic_extents (const region ®, pp_wide_int (&pp, wi::to_wide (cst), UNSIGNED); else sval->dump_to_pp (&pp, true); - state_node.set_property (state_node_properties::dynamic_extents, - pp_formatted_text (&pp)); + node_ref.set_attr ("dynamic-extents", pp_formatted_text (&pp)); } } bool analyzer_state_graph:: show_child_state_node_for_child_region_p (const region ®, - const concrete_bindings_t &conc_bindings, - bool create_all) + const concrete_bindings_t &conc_bindings, + bool create_all) { if (create_all) return true; diff --git a/gcc/analyzer/ana-state-to-diagnostic-state.h b/gcc/analyzer/ana-state-to-diagnostic-state.h index eec3d56b3011..3a5ccc1b4306 100644 --- a/gcc/analyzer/ana-state-to-diagnostic-state.h +++ b/gcc/analyzer/ana-state-to-diagnostic-state.h @@ -23,38 +23,34 @@ along with GCC; see the file COPYING3. If not see #include "diagnostics/state-graphs.h" #include "tree-logical-location.h" -#include "custom-sarif-properties/state-graphs.h" namespace ana { -namespace state_node_properties = custom_sarif_properties::state_graphs::node; - class analyzer_state_graph : public diagnostics::digraphs::digraph { public: analyzer_state_graph (const program_state &state, const extrinsic_state &ext_state); - diagnostics::digraphs::node & + diagnostics::state_graphs::state_node_ref get_or_create_state_node (const region ®); private: - struct pending_edge { - diagnostics::digraphs::node & m_src_node; + diagnostics::state_graphs::state_node_ref m_src_node; const region &m_dst_reg; }; - - diagnostics::digraphs::node & + + diagnostics::state_graphs::state_node_ref create_and_add_state_node (const region ®); std::unique_ptr - make_state_node (enum state_node_properties::kind kind, + make_state_node (diagnostics::state_graphs::node_kind kind, std::string id); std::unique_ptr make_memspace_state_node (const region ®, - enum state_node_properties::kind kind); + enum diagnostics::state_graphs::node_kind kind); std::unique_ptr create_state_node (const region ®); @@ -75,14 +71,14 @@ class analyzer_state_graph : public diagnostics::digraphs::digraph bit_range &out); void - populate_state_node_for_typed_region (diagnostics::digraphs::node &, + populate_state_node_for_typed_region (diagnostics::state_graphs::state_node_ref, const region ®, const concrete_bindings_t &conc_bindings, bool create_all); void set_attr_for_dynamic_extents (const region ®, - diagnostics::digraphs::node &); + diagnostics::state_graphs::state_node_ref); bool show_child_state_node_for_child_region_p (const region ®, @@ -99,8 +95,7 @@ class analyzer_state_graph : public diagnostics::digraphs::digraph const program_state &m_state; const extrinsic_state &m_ext_state; region_model_manager &m_mgr; - std::map m_region_to_state_node_map; + std::map m_region_to_state_node_map; std::map m_types_for_untyped_regions; unsigned m_next_id; std::vector m_pending_edges; diff --git a/gcc/analyzer/checker-event.cc b/gcc/analyzer/checker-event.cc index 790ebc714380..4eac9450469f 100644 --- a/gcc/analyzer/checker-event.cc +++ b/gcc/analyzer/checker-event.cc @@ -29,7 +29,6 @@ along with GCC; see the file COPYING3. If not see #include "tree-logical-location.h" #include "diagnostics/sarif-sink.h" #include "diagnostics/state-graphs.h" -#include "custom-sarif-properties/state-graphs.h" #include "analyzer/analyzer-logging.h" #include "analyzer/sm.h" @@ -243,11 +242,9 @@ checker_event::maybe_make_diagnostic_state_graph (bool debug) const pretty_printer pp; text_art::theme *theme = global_dc->get_diagram_theme (); text_art::dump_to_pp (*state, theme, &pp); - const json::string_property program_state_property - (custom_sarif_properties::state_graphs::graph::prefix, - "analyzer/program_state/"); - result->set_property (program_state_property, - pp_formatted_text (&pp)); + result->set_attr (STATE_GRAPH_PREFIX, + "analyzer/program_state/", + pp_formatted_text (&pp)); } return result; diff --git a/gcc/analyzer/sm-malloc.cc b/gcc/analyzer/sm-malloc.cc index b25e2adf015e..a6b14219068a 100644 --- a/gcc/analyzer/sm-malloc.cc +++ b/gcc/analyzer/sm-malloc.cc @@ -2735,7 +2735,7 @@ malloc_state_machine::transition_ptr_sval_non_null (region_model *model, smap->set_state (model, new_ptr_sval, m_free.m_nonnull, nullptr, ext_state); } -static enum custom_sarif_properties::state_graphs::node::dynalloc_state +static enum diagnostics::state_graphs::node_dynalloc_state get_dynalloc_state_for_state (enum resource_state rs) { switch (rs) @@ -2746,17 +2746,17 @@ get_dynalloc_state_for_state (enum resource_state rs) case RS_NULL: case RS_NON_HEAP: case RS_STOP: - return state_node_properties::dynalloc_state::unknown; + return diagnostics::state_graphs::node_dynalloc_state::unknown; case RS_ASSUMED_NON_NULL: - return state_node_properties::dynalloc_state::nonnull; + return diagnostics::state_graphs::node_dynalloc_state::nonnull; case RS_UNCHECKED: - return state_node_properties::dynalloc_state::unchecked; + return diagnostics::state_graphs::node_dynalloc_state::unchecked; case RS_NONNULL: - return state_node_properties::dynalloc_state::nonnull; + return diagnostics::state_graphs::node_dynalloc_state::nonnull; case RS_FREED: - return state_node_properties::dynalloc_state::freed; + return diagnostics::state_graphs::node_dynalloc_state::freed; } } @@ -2768,23 +2768,24 @@ add_state_to_state_graph (analyzer_state_graph &out_state_graph, { if (const region *reg = sval.maybe_get_region ()) { - auto ®_node = out_state_graph.get_or_create_state_node (*reg); + auto reg_node = out_state_graph.get_or_create_state_node (*reg); auto alloc_state = as_a_allocation_state (state); gcc_assert (alloc_state); - reg_node.set_property (state_node_properties::dynalloc_state, - get_dynalloc_state_for_state (alloc_state->m_rs)); - + reg_node.set_dynalloc_state + (get_dynalloc_state_for_state (alloc_state->m_rs)); if (alloc_state->m_deallocators) { pretty_printer pp; alloc_state->m_deallocators->dump_to_pp (&pp); - reg_node.set_property (state_node_properties::expected_deallocators, - pp_formatted_text (&pp)); + reg_node.m_node.set_attr (STATE_NODE_PREFIX, + "expected-deallocators", + pp_formatted_text (&pp)); } if (alloc_state->m_deallocator) - reg_node.set_property (state_node_properties::deallocator, - alloc_state->m_deallocator->m_name); + reg_node.m_node.set_attr (STATE_NODE_PREFIX, + "deallocator", + alloc_state->m_deallocator->m_name); } } diff --git a/gcc/configure b/gcc/configure index a742ad7e64cb..38d8cd919cba 100755 --- a/gcc/configure +++ b/gcc/configure @@ -36868,7 +36868,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} "depdir":C) $SHELL $ac_aux_dir/mkinstalldirs $DEPDIR ;; "gccdepdir":C) ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/mkinstalldirs build/$DEPDIR - for lang in $subdirs c-family common analyzer custom-sarif-properties diagnostics text-art rtl-ssa sym-exec + for lang in $subdirs c-family common analyzer diagnostics text-art rtl-ssa sym-exec do ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/mkinstalldirs $lang/$DEPDIR done ;; diff --git a/gcc/configure.ac b/gcc/configure.ac index 253d3ff28e9b..19975fa5be5b 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -1368,7 +1368,7 @@ AC_CHECK_HEADERS(ext/hash_map) ZW_CREATE_DEPDIR AC_CONFIG_COMMANDS([gccdepdir],[ ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/mkinstalldirs build/$DEPDIR - for lang in $subdirs c-family common analyzer custom-sarif-properties diagnostics text-art rtl-ssa sym-exec + for lang in $subdirs c-family common analyzer diagnostics text-art rtl-ssa sym-exec do ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/mkinstalldirs $lang/$DEPDIR done], [subdirs="$subdirs" ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR]) diff --git a/gcc/custom-sarif-properties/digraphs.cc b/gcc/custom-sarif-properties/digraphs.cc deleted file mode 100644 index 30ca2b6cdd02..000000000000 --- a/gcc/custom-sarif-properties/digraphs.cc +++ /dev/null @@ -1,28 +0,0 @@ -/* Extra properties for digraphs in SARIF property bags. - Copyright (C) 2025 Free Software Foundation, Inc. - Contributed by David Malcolm . - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free -Software Foundation; either version 3, or (at your option) any later -version. - -GCC is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -. */ - -#include "config.h" -#include "system.h" -#include "coretypes.h" -#include "json.h" -#include "custom-sarif-properties/digraphs.h" - -const json::string_property custom_sarif_properties::digraphs::digraph::kind - ("gcc/digraphs/graph/kind"); diff --git a/gcc/custom-sarif-properties/digraphs.h b/gcc/custom-sarif-properties/digraphs.h deleted file mode 100644 index 93817ed97bd5..000000000000 --- a/gcc/custom-sarif-properties/digraphs.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Extra properties for digraphs in SARIF property bags. - Copyright (C) 2025 Free Software Foundation, Inc. - Contributed by David Malcolm . - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free -Software Foundation; either version 3, or (at your option) any later -version. - -GCC is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -. */ - -#ifndef GCC_CUSTOM_SARIF_PROPERTIES_DIGRAPHS_H -#define GCC_CUSTOM_SARIF_PROPERTIES_DIGRAPHS_H - -/* SARIF property names relating to digraphs. */ - -namespace custom_sarif_properties { - namespace digraphs { - namespace digraph { - /* A hint about the kind of graph we have, - and thus what kinds of nodes and edges to expect. */ - extern const json::string_property kind; - // string; values: "cfg" - } - } -} - -#endif /* ! GCC_CUSTOM_SARIF_PROPERTIES_DIGRAPHS_H */ diff --git a/gcc/custom-sarif-properties/state-graphs.cc b/gcc/custom-sarif-properties/state-graphs.cc deleted file mode 100644 index 3e0e58a4216c..000000000000 --- a/gcc/custom-sarif-properties/state-graphs.cc +++ /dev/null @@ -1,157 +0,0 @@ -/* Properties for capturing state graphs in SARIF property bags. - Copyright (C) 2025 Free Software Foundation, Inc. - Contributed by David Malcolm . - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free -Software Foundation; either version 3, or (at your option) any later -version. - -GCC is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -. */ - -#include "config.h" -#include "system.h" -#include "coretypes.h" -#include "json.h" -#include "custom-sarif-properties/state-graphs.h" - -/* graph. */ -namespace graph = custom_sarif_properties::state_graphs::graph; -#define STATE_GRAPH_PREFIX "gcc/diagnostic_state_graph/" -const char *const graph::prefix = STATE_GRAPH_PREFIX; -#undef STATE_GRAPH_PREFIX - -/* node. */ -namespace node = custom_sarif_properties::state_graphs::node; -#define STATE_NODE_PREFIX "gcc/diagnostic_state_node/" - -const json::enum_property node::kind - (STATE_NODE_PREFIX "kind"); - -const json::string_property node::function (STATE_NODE_PREFIX "function"); - -const json::string_property node::dynamic_extents - (STATE_NODE_PREFIX "dynamic-extents"); - -const json::string_property node::name (STATE_NODE_PREFIX "name"); -const json::string_property node::type (STATE_NODE_PREFIX "type"); -const json::json_property node::value (STATE_NODE_PREFIX "value"); -const json::string_property node::value_str (STATE_NODE_PREFIX "value_str"); - -const json::string_property node::index (STATE_NODE_PREFIX "index"); - -const json::string_property node::bits (STATE_NODE_PREFIX "bits"); - -const json::string_property node::num_bits (STATE_NODE_PREFIX "num_bits"); - -const json::string_property node::deallocator (STATE_NODE_PREFIX "deallocator"); - -const json::string_property node::expected_deallocators - (STATE_NODE_PREFIX "expected-deallocators"); - -const json::enum_property node::dynalloc_state - (STATE_NODE_PREFIX "dynalloc-state"); - -#undef STATE_NODE_PREFIX - - -/* edge. */ -namespace edge_props = custom_sarif_properties::state_graphs::edge; -#define STATE_EDGE_PREFIX "gcc/diagnostic_state_edge/" -extern const char *const edge_props::prefix = STATE_EDGE_PREFIX; -#undef STATE_EDGE_PREFIX - -// Traits for enum node:kind - -template<> -enum node::kind -json::enum_traits::get_unknown_value () -{ - return node::kind::other; -} - -static const char * const node_kind_strs[] = { - "globals", - "code", - "function", - "stack", - "stack-frame", - "heap", - "thread-local", - "dynalloc-buffer", - "variable", - "field", - "padding", - "element", - "other", -}; - -template<> -bool -json::enum_traits:: -maybe_get_value_from_string (const char *str, - enum_t &out) -{ - for (size_t i = 0; i < ARRAY_SIZE (node_kind_strs); ++i) - if (!strcmp (node_kind_strs[i], str)) - { - out = static_cast (i); - return true; - } - return false; -} - -template<> -const char * -json::enum_traits::get_string_for_value (enum_t value) -{ - return node_kind_strs[static_cast (value)]; -} - -// Traits for enum node:dynalloc_state - -template<> -enum node::dynalloc_state -json::enum_traits::get_unknown_value () -{ - return node::dynalloc_state::unknown; -} - -static const char * const dynalloc_state_strs[] = { - "unknown", - "nonnull", - "unchecked", - "freed" -}; - -template<> -bool -json::enum_traits:: -maybe_get_value_from_string (const char *str, - enum_t &out) -{ - for (size_t i = 0; i < ARRAY_SIZE (dynalloc_state_strs); ++i) - if (!strcmp (dynalloc_state_strs[i], str)) - { - out = static_cast (i); - return true; - } - return false; -} - -template<> -const char * -json::enum_traits:: -get_string_for_value (enum_t value) -{ - return dynalloc_state_strs[static_cast (value)]; -} diff --git a/gcc/custom-sarif-properties/state-graphs.h b/gcc/custom-sarif-properties/state-graphs.h deleted file mode 100644 index 6ae9ad891354..000000000000 --- a/gcc/custom-sarif-properties/state-graphs.h +++ /dev/null @@ -1,97 +0,0 @@ -/* Properties for capturing state graphs in SARIF property bags. - Copyright (C) 2025 Free Software Foundation, Inc. - Contributed by David Malcolm . - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free -Software Foundation; either version 3, or (at your option) any later -version. - -GCC is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -. */ - -#include "json.h" - -#ifndef GCC_DIAGNOSTICS_SARIF_PROPERTIES_STATE_GRAPHS_H -#define GCC_DIAGNOSTICS_SARIF_PROPERTIES_STATE_GRAPHS_H - -/* SARIF property names relating to GCC's CFGs. */ - -namespace custom_sarif_properties { - namespace state_graphs { - namespace graph { - extern const char *const prefix; - } - namespace node { - - enum class kind - { - // Memory regions - globals, - code, - function, // code within a particular function - stack, - stack_frame, - heap_, - thread_local_, - - /* Dynamically-allocated buffer, - on heap or stack (depending on parent). */ - dynalloc_buffer, - - variable, - - field, // field within a struct or union - padding, // padding bits in a struct or union - element, // element within an array - - other // anything else - }; - - enum class dynalloc_state - { - unknown, - nonnull, - unchecked, - freed - }; - - extern const json::enum_property kind; - - extern const json::string_property function; - extern const json::string_property dynamic_extents; - extern const json::string_property name; - extern const json::string_property type; - /* The value of a memory region, expressed as a json::value. */ - extern const json::json_property value; - /* The value of a memory region, expressed as a string. */ - extern const json::string_property value_str; - - /* For element nodes, the index within the array. */ - extern const json::string_property index; - - /* The range of bits or bytes within the base region. */ - extern const json::string_property bits; - - /* The size of a padding region. */ - extern const json::string_property num_bits; - - extern const json::string_property deallocator; - extern const json::string_property expected_deallocators; - extern const json::enum_property dynalloc_state; - } - namespace edge { - extern const char *const prefix; - } - } -} - -#endif /* ! GCC_DIAGNOSTICS_SARIF_PROPERTIES_STATE_GRAPHS_H */ diff --git a/gcc/diagnostics/diagnostics-selftests.cc b/gcc/diagnostics/diagnostics-selftests.cc index 757655bb1728..94a212a6c93a 100644 --- a/gcc/diagnostics/diagnostics-selftests.cc +++ b/gcc/diagnostics/diagnostics-selftests.cc @@ -46,6 +46,7 @@ run_diagnostics_selftests () sarif_sink_cc_tests (); digraphs_cc_tests (); output_spec_cc_tests (); + state_graphs_cc_tests (); lazy_paths_cc_tests (); paths_output_cc_tests (); changes_cc_tests (); diff --git a/gcc/diagnostics/diagnostics-selftests.h b/gcc/diagnostics/diagnostics-selftests.h index 5a68a049d3e9..994ebad52804 100644 --- a/gcc/diagnostics/diagnostics-selftests.h +++ b/gcc/diagnostics/diagnostics-selftests.h @@ -44,6 +44,7 @@ extern void paths_output_cc_tests (); extern void sarif_sink_cc_tests (); extern void selftest_logical_locations_cc_tests (); extern void source_printing_cc_tests (); +extern void state_graphs_cc_tests (); } /* end of namespace diagnostics::selftest. */ diff --git a/gcc/diagnostics/digraphs.cc b/gcc/diagnostics/digraphs.cc index 60d3e8ccfc7a..4a2ea4fca3c7 100644 --- a/gcc/diagnostics/digraphs.cc +++ b/gcc/diagnostics/digraphs.cc @@ -30,15 +30,13 @@ along with GCC; see the file COPYING3. If not see #include "graphviz.h" #include "diagnostics/digraphs.h" #include "diagnostics/sarif-sink.h" -#include "custom-sarif-properties/digraphs.h" -using digraph_object = diagnostics::digraphs::object; +#include "selftest.h" + using digraph = diagnostics::digraphs::digraph; using digraph_node = diagnostics::digraphs::node; using digraph_edge = diagnostics::digraphs::edge; -namespace properties = custom_sarif_properties::digraphs; - namespace { class conversion_to_dot @@ -173,145 +171,66 @@ conversion_to_dot::has_edges_p (const digraph_node &input_node) // class object -/* String properties. */ - const char * -digraph_object::get_property (const json::string_property &property) const +diagnostics::digraphs::object:: +get_attr (const char *key_prefix, const char *key) const { if (!m_property_bag) return nullptr; - if (json::value *jv = m_property_bag->get (property.m_key.get ())) + std::string prefixed_key = std::string (key_prefix) + key; + if (json::value *jv = m_property_bag->get (prefixed_key.c_str ())) if (json::string *jstr = jv->dyn_cast_string ()) return jstr->get_string (); return nullptr; } void -digraph_object::set_property (const json::string_property &property, - const char *utf8_value) -{ - auto &bag = ensure_property_bag (); - bag.set_string (property.m_key.get (), utf8_value); -} - -/* Integer properties. */ - -bool -digraph_object::maybe_get_property (const json::integer_property &property, - long &out_value) const -{ - if (!m_property_bag) - return false; - if (json::value *jv = m_property_bag->get (property.m_key.get ())) - if (json::integer_number *jnum = jv->dyn_cast_integer_number ()) - { - out_value = jnum->get (); - return true; - } - return false; -} - -void -digraph_object::set_property (const json::integer_property &property, long value) -{ - auto &bag = ensure_property_bag (); - bag.set_integer (property.m_key.get (), value); -} - -/* Bool properties. */ -void -digraph_object::set_property (const json::bool_property &property, bool value) -{ - auto &bag = ensure_property_bag (); - bag.set_bool (property.m_key.get (), value); -} - -tristate -digraph_object:: -get_property_as_tristate (const json::bool_property &property) const -{ - if (m_property_bag) - { - if (json::value *jv = m_property_bag->get (property.m_key.get ())) - switch (jv->get_kind ()) - { - default: - break; - case json::JSON_TRUE: - return tristate (true); - case json::JSON_FALSE: - return tristate (false); - } - } - return tristate::unknown (); -} - -/* Array-of-string properties. */ -json::array * -digraph_object::get_property (const json::array_of_string_property &property) const +diagnostics::digraphs::object:: +set_attr (const char *key_prefix, const char *key, const char *value) { - if (m_property_bag) - if (json::value *jv = m_property_bag->get (property.m_key.get ())) - if (json::array *arr = jv->dyn_cast_array ()) - return arr; - return nullptr; -} - -/* json::value properties. */ -const json::value * -digraph_object::get_property (const json::json_property &property) const -{ - if (m_property_bag) - return m_property_bag->get (property.m_key.get ()); - return nullptr; + set_json_attr (key_prefix, key, std::make_unique (value)); } void -digraph_object::set_property (const json::json_property &property, - std::unique_ptr value) -{ - auto &bag = ensure_property_bag (); - bag.set (property.m_key.get (), std::move (value)); -} - -json::object & -digraph_object::ensure_property_bag () +diagnostics::digraphs::object:: +set_json_attr (const char *key_prefix, const char *key, std::unique_ptr value) { + std::string prefixed_key = std::string (key_prefix) + key; if (!m_property_bag) - m_property_bag = std::make_unique ( ); - return *m_property_bag; + m_property_bag = std::make_unique (); + m_property_bag->set (prefixed_key.c_str (), std::move (value)); } // class digraph DEBUG_FUNCTION void -digraph::dump () const +diagnostics::digraphs::digraph::dump () const { make_json_sarif_graph ()->dump (); } std::unique_ptr -digraph::make_json_sarif_graph () const +diagnostics::digraphs::digraph::make_json_sarif_graph () const { return make_sarif_graph (*this, nullptr, nullptr); } std::unique_ptr -digraph::make_dot_graph () const +diagnostics::digraphs::digraph::make_dot_graph () const { - conversion_to_dot converter; - return converter.make_dot_graph_from_diagnostic_graph (*this); + conversion_to_dot to_dot; + return to_dot.make_dot_graph_from_diagnostic_graph (*this); } -std::unique_ptr -digraph::clone () const +std::unique_ptr +diagnostics::digraphs::digraph::clone () const { auto result = std::make_unique (); if (get_property_bag ()) result->set_property_bag (get_property_bag ()->clone_as_object ()); - std::map node_mapping; + std::map node_mapping; for (auto &iter : m_nodes) result->add_node (iter->clone (*result, node_mapping)); @@ -322,10 +241,10 @@ digraph::clone () const } void -digraph::add_edge (const char *id, - node &src_node, - node &dst_node, - const char *label) +diagnostics::digraphs::digraph::add_edge (const char *id, + node &src_node, + node &dst_node, + const char *label) { auto e = std::make_unique (*this, id, @@ -344,7 +263,7 @@ digraph::add_edge (const char *id, to edges by id (SARIF 2.1.0's §3.43.2 edgeId property). */ std::string -digraph::make_edge_id (const char *edge_id) +diagnostics::digraphs::digraph::make_edge_id (const char *edge_id) { /* If we have an id, use it. */ if (edge_id) @@ -365,38 +284,27 @@ digraph::make_edge_id (const char *edge_id) } } -const char * -digraph::get_graph_kind () const -{ - return get_property (properties::digraph::kind); -} - -void -digraph::set_graph_kind (const char *kind) -{ - set_property (properties::digraph::kind, kind); -} - // class node DEBUG_FUNCTION void -digraph_node::dump () const +diagnostics::digraphs::node::dump () const { to_json_sarif_node ()->dump (); } std::unique_ptr -digraph_node::to_json_sarif_node () const +diagnostics::digraphs::node::to_json_sarif_node () const { return make_sarif_node (*this, nullptr, nullptr); } -std::unique_ptr -digraph_node::clone (digraph &new_graph, - std::map &node_mapping) const +std::unique_ptr +diagnostics::digraphs::node::clone (digraph &new_graph, + std::map &node_mapping) const { auto result - = std::make_unique (new_graph, get_id ()); + = std::make_unique (new_graph, + get_id ()); node_mapping.insert ({const_cast (this), result.get ()}); result->set_logical_loc (m_logical_loc); @@ -445,9 +353,6 @@ diagnostics::digraphs::edge::to_json_sarif_edge () const #if CHECKING_P -#include "selftest.h" -#include "custom-sarif-properties/state-graphs.h" - namespace diagnostics { namespace selftest { @@ -486,17 +391,16 @@ test_simple_graph () #define KEY_PREFIX "/placeholder/" auto g = std::make_unique (); g->set_description ("test graph"); - g->set_property (json::string_property (KEY_PREFIX, "date"), "1066"); + g->set_attr (KEY_PREFIX, "date", "1066"); auto a = std::make_unique (*g, "a"); auto b = std::make_unique (*g, "b"); - b->set_property (json::string_property (KEY_PREFIX, "color"), "red"); + b->set_attr (KEY_PREFIX, "color", "red"); auto c = std::make_unique (*g, "c"); c->set_label ("I am a node label"); auto e = std::make_unique (*g, nullptr, *a, *c); - e->set_property (json::string_property (KEY_PREFIX, "status"), - "copacetic"); + e->set_attr (KEY_PREFIX, "status", "copacetic"); e->set_label ("I am an edge label"); g->add_edge (std::move (e)); @@ -545,34 +449,6 @@ test_simple_graph () } } -static void -test_property_objects () -{ - namespace state_node_properties = custom_sarif_properties::state_graphs::node; - - digraph g; - digraph_node node (g, "a"); - - ASSERT_EQ (node.get_property (state_node_properties::kind), - state_node_properties::kind::other); - node.set_property (state_node_properties::kind, - state_node_properties::kind::stack); - ASSERT_EQ (node.get_property (state_node_properties::kind), - state_node_properties::kind::stack); - - ASSERT_EQ (node.get_property (state_node_properties::dynalloc_state), - state_node_properties::dynalloc_state::unknown); - node.set_property (state_node_properties::dynalloc_state, - state_node_properties::dynalloc_state::freed); - ASSERT_EQ (node.get_property (state_node_properties::dynalloc_state), - state_node_properties::dynalloc_state::freed); - - ASSERT_EQ (node.get_property (state_node_properties::type), nullptr); - node.set_property (state_node_properties::type, "const char *"); - ASSERT_STREQ (node.get_property (state_node_properties::type), - "const char *"); -} - /* Run all of the selftests within this file. */ void @@ -580,7 +456,6 @@ digraphs_cc_tests () { test_empty_graph (); test_simple_graph (); - test_property_objects (); } } // namespace diagnostics::selftest diff --git a/gcc/diagnostics/digraphs.h b/gcc/diagnostics/digraphs.h index 485a18917ca0..7193ee48c3fa 100644 --- a/gcc/diagnostics/digraphs.h +++ b/gcc/diagnostics/digraphs.h @@ -22,7 +22,6 @@ along with GCC; see the file COPYING3. If not see #define GCC_DIAGNOSTICS_DIGRAPHS_H #include "json.h" -#include "tristate.h" #include "diagnostics/logical-locations.h" class graphviz_out; @@ -56,57 +55,23 @@ class edge; class object { public: - /* String properties. */ - const char *get_property (const json::string_property &property) const; - void set_property (const json::string_property &property, - const char *utf8_value); - - /* Integer properties. */ - bool maybe_get_property (const json::integer_property &property, long &out) const; - void set_property (const json::integer_property &property, long value); - - /* Bool properties. */ - tristate - get_property_as_tristate (const json::bool_property &property) const; - void set_property (const json::bool_property &property, bool value); - - /* Array-of-string properties. */ - json::array * - get_property (const json::array_of_string_property &property) const; - - /* enum properties. */ - template - EnumType - get_property (const json::enum_property &property) const - { - if (m_property_bag) - { - EnumType result; - if (m_property_bag->maybe_get_enum (property, result)) - return result; - } - return json::enum_traits::get_unknown_value (); - } - template + const char * + get_attr (const char *key_prefix, + const char *key) const; + void - set_property (const json::enum_property &property, - EnumType value) - { - auto &bag = ensure_property_bag (); - bag.set_enum (property, value); - } + set_attr (const char *key_prefix, + const char *key, + const char *value); - /* json::value properties. */ - const json::value *get_property (const json::json_property &property) const; - void set_property (const json::json_property &property, - std::unique_ptr value); + void + set_json_attr (const char *key_prefix, + const char *key, + std::unique_ptr value); json::object * get_property_bag () const { return m_property_bag.get (); } - json::object & - ensure_property_bag (); - void set_property_bag (std::unique_ptr property_bag) { @@ -223,9 +188,6 @@ class digraph : public object std::unique_ptr clone () const; - const char *get_graph_kind () const; - void set_graph_kind (const char *); - private: void add_node_id (std::string node_id, node &new_node) @@ -338,7 +300,7 @@ class node : public object clone (digraph &new_graph, std::map &node_mapping) const; -private: + private: std::string m_id; std::unique_ptr m_label; std::vector> m_children; diff --git a/gcc/diagnostics/html-sink.cc b/gcc/diagnostics/html-sink.cc index 99d3b9d5dab5..d3fb107e6145 100644 --- a/gcc/diagnostics/html-sink.cc +++ b/gcc/diagnostics/html-sink.cc @@ -57,8 +57,8 @@ html_generation_options::html_generation_options () : m_css (true), m_javascript (true), m_show_state_diagrams (false), - m_show_graph_sarif (false), - m_show_graph_dot_src (false) + m_show_state_diagrams_sarif (false), + m_show_state_diagrams_dot_src (false) { } @@ -68,8 +68,8 @@ html_generation_options::dump (FILE *outfile, int indent) const DIAGNOSTICS_DUMPING_EMIT_BOOL_FIELD (m_css); DIAGNOSTICS_DUMPING_EMIT_BOOL_FIELD (m_javascript); DIAGNOSTICS_DUMPING_EMIT_BOOL_FIELD (m_show_state_diagrams); - DIAGNOSTICS_DUMPING_EMIT_BOOL_FIELD (m_show_graph_sarif); - DIAGNOSTICS_DUMPING_EMIT_BOOL_FIELD (m_show_graph_dot_src); + DIAGNOSTICS_DUMPING_EMIT_BOOL_FIELD (m_show_state_diagrams_sarif); + DIAGNOSTICS_DUMPING_EMIT_BOOL_FIELD (m_show_state_diagrams_dot_src); } class html_builder; @@ -640,7 +640,7 @@ html_builder::maybe_make_state_diagram (const paths::event &event) the debug version. */ auto state_graph = event.maybe_make_diagnostic_state_graph - (m_html_gen_opts.m_show_graph_sarif); + (m_html_gen_opts.m_show_state_diagrams_sarif); if (!state_graph) return nullptr; @@ -652,7 +652,7 @@ html_builder::maybe_make_state_diagram (const paths::event &event) auto wrapper = std::make_unique ("div", false); xml::printer xp (*wrapper); - if (m_html_gen_opts.m_show_graph_sarif) + if (m_html_gen_opts.m_show_state_diagrams_sarif) { // For debugging, show the SARIF src inline: pretty_printer pp; @@ -660,7 +660,7 @@ html_builder::maybe_make_state_diagram (const paths::event &event) print_pre_source (xp, pp_formatted_text (&pp)); } - if (m_html_gen_opts.m_show_graph_dot_src) + if (m_html_gen_opts.m_show_state_diagrams_dot_src) { // For debugging, show the dot src inline: pretty_printer pp; @@ -1278,41 +1278,21 @@ void html_builder::add_graph (const digraphs::digraph &dg, xml::element &parent_element) { - auto div = std::make_unique ("div", false); - div->set_attr ("class", "gcc-directed-graph"); - xml::printer xp (*div); - - if (m_html_gen_opts.m_show_graph_sarif) - { - // For debugging, show the SARIF src inline: - pretty_printer pp; - dg.make_json_sarif_graph ()->print (&pp, true); - print_pre_source (xp, pp_formatted_text (&pp)); - } - if (auto dot_graph = dg.make_dot_graph ()) - { - if (m_html_gen_opts.m_show_graph_dot_src) - { - // For debugging, show the dot src inline: - pretty_printer pp; - dot::writer w (pp); - dot_graph->print (w); - print_pre_source (xp, pp_formatted_text (&pp)); - } - - if (auto svg_element = dot::make_svg_from_graph (*dot_graph)) - { - if (const char *description = dg.get_description ()) - { - xp.push_tag ("h2", true); - xp.add_text (description); - xp.pop_tag ("h2"); - } - xp.append (std::move (svg_element)); - parent_element.add_child (std::move (div)); - } - } + if (auto svg_element = dot::make_svg_from_graph (*dot_graph)) + { + auto div = std::make_unique ("div", false); + div->set_attr ("class", "gcc-directed-graph"); + xml::printer xp (*div); + if (const char *description = dg.get_description ()) + { + xp.push_tag ("h2", true); + xp.add_text (description); + xp.pop_tag ("h2"); + } + xp.append (std::move (svg_element)); + parent_element.add_child (std::move (div)); + } } void diff --git a/gcc/diagnostics/html-sink.h b/gcc/diagnostics/html-sink.h index ad68e6fa3a67..d25ceea4b832 100644 --- a/gcc/diagnostics/html-sink.h +++ b/gcc/diagnostics/html-sink.h @@ -40,12 +40,11 @@ struct html_generation_options // If true, attempt to show state diagrams at events bool m_show_state_diagrams; - /* If true, show the SARIF form of the state with such diagrams, - and of other graphs. */ - bool m_show_graph_sarif; + // If true, show the SARIF form of the state with such diagrams + bool m_show_state_diagrams_sarif; - // If true, show the .dot source used for such graphs - bool m_show_graph_dot_src; + // If true, show the .dot source used for the diagram + bool m_show_state_diagrams_dot_src; }; extern diagnostics::output_file diff --git a/gcc/diagnostics/output-spec.cc b/gcc/diagnostics/output-spec.cc index f7cce0acce84..dfde7f0bdf30 100644 --- a/gcc/diagnostics/output-spec.cc +++ b/gcc/diagnostics/output-spec.cc @@ -650,12 +650,12 @@ html_scheme_handler::maybe_handle_kv (const context &ctxt, if (key == "show-state-diagrams") return parse_bool_value (ctxt, key, value, m_html_gen_opts.m_show_state_diagrams); - if (key == "show-graph-dot-src") + if (key == "show-state-diagrams-dot-src") return parse_bool_value (ctxt, key, value, - m_html_gen_opts.m_show_graph_dot_src); - if (key == "show-graph-sarif") + m_html_gen_opts.m_show_state_diagrams_dot_src); + if (key == "show-state-diagrams-sarif") return parse_bool_value (ctxt, key, value, - m_html_gen_opts.m_show_graph_sarif); + m_html_gen_opts.m_show_state_diagrams_sarif); return result::unrecognized; } @@ -666,8 +666,8 @@ html_scheme_handler::get_keys (auto_vec &out) const out.safe_push ("file"); out.safe_push ("javascript"); out.safe_push ("show-state-diagrams"); - out.safe_push ("show-graph-dot-src"); - out.safe_push ("show-graph-sarif"); + out.safe_push ("show-state-diagrams-dot-src"); + out.safe_push ("show-state-diagrams-sarif"); } } // namespace output_spec diff --git a/gcc/diagnostics/state-graphs-to-dot.cc b/gcc/diagnostics/state-graphs-to-dot.cc index 8a3ad246d1aa..2d80e6b283f6 100644 --- a/gcc/diagnostics/state-graphs-to-dot.cc +++ b/gcc/diagnostics/state-graphs-to-dot.cc @@ -27,7 +27,6 @@ along with GCC; see the file COPYING3. If not see #include "system.h" #include "coretypes.h" -#include "custom-sarif-properties/state-graphs.h" #include "diagnostics/state-graphs.h" #include "graphviz.h" #include "xml.h" @@ -37,8 +36,6 @@ along with GCC; see the file COPYING3. If not see using namespace diagnostics; using namespace diagnostics::state_graphs; -namespace state_node_properties = custom_sarif_properties::state_graphs::node; - static int get_depth (const digraphs::node &n) { @@ -50,28 +47,28 @@ get_depth (const digraphs::node &n) } static const char * -get_color_for_dynalloc_state (enum state_node_properties::dynalloc_state dynalloc_st) +get_color_for_dynalloc_state (enum node_dynalloc_state dynalloc_st) { switch (dynalloc_st) { default: gcc_unreachable (); break; - case state_node_properties::dynalloc_state::unknown: - case state_node_properties::dynalloc_state::nonnull: + case node_dynalloc_state::unknown: + case node_dynalloc_state::nonnull: return nullptr; - case state_node_properties::dynalloc_state::unchecked: + case node_dynalloc_state::unchecked: return "#ec7a08"; // pf-orange-400 - case state_node_properties::dynalloc_state::freed: + case node_dynalloc_state::freed: return "#cc0000"; // pf-red-100 } } static void set_color_for_dynalloc_state (dot::attr_list &attrs, - enum state_node_properties::dynalloc_state state) + enum node_dynalloc_state state) { if (const char *color = get_color_for_dynalloc_state (state)) attrs.add (dot::id ("color"), dot::id (color)); @@ -109,7 +106,7 @@ class state_diagram : public dot::graph = std::make_unique (dot::id ("cluster_memory_regions")); for (size_t i = 0; i < input_state_graph.get_num_nodes (); ++i) on_input_state_node (*root_cluster, - input_state_graph.get_node (i)); + state_node_ref (input_state_graph.get_node (i))); add_stmt (std::move (root_cluster)); /* Now create dot edges for edges in input_stage_graph. */ @@ -129,8 +126,7 @@ class state_diagram : public dot::graph auto e = std::make_unique (src_port_id->second, dst_port_id->second); set_color_for_dynalloc_state - (e->m_attrs, - dst_node.get_property (state_node_properties::dynalloc_state)); + (e->m_attrs, state_node_ref (dst_node).get_dynalloc_state ()); add_stmt (std::move (e)); } @@ -151,9 +147,9 @@ class state_diagram : public dot::graph } dot::id - make_id (const diagnostics::digraphs::node &state_node, bool cluster) + make_id (state_node_ref state_node, bool cluster) { - std::string input_node_id = state_node.get_id (); + std::string input_node_id = state_node.m_node.get_id (); if (cluster) return std::string ("cluster_") + input_node_id; else @@ -161,44 +157,44 @@ class state_diagram : public dot::graph } bool - starts_node_p (const diagnostics::digraphs::node &state_node) + starts_node_p (state_node_ref state_node) { - switch (state_node.get_property (state_node_properties::kind)) + switch (state_node.get_node_kind ()) { default: return false; - case state_node_properties::kind::stack: + case node_kind::stack: /* We want all frames in the stack in the same table, so they are grouped. */ - case state_node_properties::kind::dynalloc_buffer: - case state_node_properties::kind::variable: + case node_kind::dynalloc_buffer: + case node_kind::variable: return true; } } const char * - get_label_for_node (const diagnostics::digraphs::node &state_node) + get_label_for_node (state_node_ref state_node) { - switch (state_node.get_property (state_node_properties::kind)) + switch (state_node.get_node_kind ()) { default: return nullptr; - case state_node_properties::kind::globals: + case node_kind::globals: return _("Globals"); - case state_node_properties::kind::code: + case node_kind::code: return _("Code"); - case state_node_properties::kind::stack: + case node_kind::stack: return _("Stack"); - case state_node_properties::kind::heap_: + case node_kind::heap_: return _("Heap"); } } void on_input_state_node (dot::subgraph &parent_subgraph, - const diagnostics::digraphs::node &state_node) + state_node_ref state_node) { dot::id sg_id = make_id (state_node, true); @@ -211,7 +207,7 @@ class state_diagram : public dot::graph xp.set_attr ("cellborder", "1"); xp.set_attr ("cellspacing", "0"); - const int max_depth = get_depth (state_node); + const int max_depth = get_depth (state_node.m_node); const int num_columns = max_depth + 2; dot::id id_of_dot_node = make_id (state_node, false); @@ -237,9 +233,9 @@ class state_diagram : public dot::graph child_subgraph->add_attr (dot::id ("label"), dot::id (label)); // recurse: - for (size_t i = 0; i < state_node.get_num_children (); ++i) + for (size_t i = 0; i < state_node.m_node.get_num_children (); ++i) on_input_state_node (*child_subgraph, - state_node.get_child (i)); + state_node.m_node.get_child (i)); parent_subgraph.m_stmt_list.add_stmt (std::move (child_subgraph)); } } @@ -250,10 +246,10 @@ class state_diagram : public dot::graph add_title_tr (const dot::id &id_of_dot_node, xml::printer &xp, int num_columns, - const diagnostics::digraphs::node &state_node, + state_node_ref state_node, std::string heading, enum style styl, - enum state_node_properties::dynalloc_state dynalloc_state) + enum node_dynalloc_state dynalloc_state) { xp.push_tag ("tr", true); xp.push_tag ("td", false); @@ -302,49 +298,48 @@ class state_diagram : public dot::graph void on_node_in_table (const dot::id &id_of_dot_node, xml::printer &xp, - const diagnostics::digraphs::node &state_node, + state_node_ref state_node, int max_depth, int depth, int num_columns) { bool recurse = true; - auto input_node_kind = state_node.get_property (state_node_properties::kind); + auto input_node_kind = state_node.get_node_kind (); switch (input_node_kind) { - case state_node_properties::kind::padding: - case state_node_properties::kind::other: + case node_kind::padding: + case node_kind::other: return; - case state_node_properties::kind::stack: + case node_kind::stack: add_title_tr (id_of_dot_node, xp, num_columns, state_node, "Stack", style::h1, - state_node_properties::dynalloc_state::unknown); + node_dynalloc_state::unknown); break; - case state_node_properties::kind::stack_frame: + case node_kind::stack_frame: if (auto logical_loc = state_node.get_logical_loc ()) if (const char *function = m_logical_loc_mgr.get_short_name (logical_loc)) add_title_tr (id_of_dot_node, xp, num_columns, state_node, std::string ("Frame: ") + function, style::h2, - state_node_properties::dynalloc_state::unknown); + node_dynalloc_state::unknown); break; - case state_node_properties::kind::dynalloc_buffer: + case node_kind::dynalloc_buffer: { - enum state_node_properties::dynalloc_state dynalloc_st - = state_node.get_property (state_node_properties::dynalloc_state); - const char *extents - = state_node.get_property (state_node_properties::dynamic_extents); - const char *type = state_node.get_property (state_node_properties::type); + enum node_dynalloc_state dynalloc_st + = state_node.get_dynalloc_state (); + const char *extents = state_node.get_dynamic_extents (); + const char *type = state_node.get_type (); pretty_printer pp; switch (dynalloc_st) { default: gcc_unreachable (); - case state_node_properties::dynalloc_state::unknown: - case state_node_properties::dynalloc_state::nonnull: + case node_dynalloc_state::unknown: + case node_dynalloc_state::nonnull: if (type) { if (extents) @@ -361,7 +356,7 @@ class state_diagram : public dot::graph } break; - case state_node_properties::dynalloc_state::unchecked: + case node_dynalloc_state::unchecked: if (type) { if (extents) @@ -376,7 +371,7 @@ class state_diagram : public dot::graph } break; - case state_node_properties::dynalloc_state::freed: + case node_dynalloc_state::freed: // TODO: show deallocator // TODO: show deallocation event pp_printf (&pp, "Freed buffer"); @@ -409,10 +404,9 @@ class state_diagram : public dot::graph { default: break; - case state_node_properties::kind::variable: + case node_kind::variable: { - const char *name - = state_node.get_property (state_node_properties::name); + const char *name = state_node.get_name (); gcc_assert (name); xp.push_tag ("td", false); maybe_add_dst_port (id_of_dot_node, xp, state_node); @@ -422,10 +416,9 @@ class state_diagram : public dot::graph xp.pop_tag ("td"); } break; - case state_node_properties::kind::element: + case node_kind::element: { - const char *index - = state_node.get_property (state_node_properties::index); + const char *index = state_node.get_index (); gcc_assert (index); xp.push_tag ("td", false); maybe_add_dst_port (id_of_dot_node, xp, state_node); @@ -437,10 +430,9 @@ class state_diagram : public dot::graph xp.pop_tag ("td"); } break; - case state_node_properties::kind::field: + case node_kind::field: { - const char *name - = state_node.get_property (state_node_properties::name); + const char *name = state_node.get_name (); gcc_assert (name); xp.push_tag ("td", false); maybe_add_dst_port (id_of_dot_node, xp, state_node); @@ -453,8 +445,7 @@ class state_diagram : public dot::graph break; } - if (const char *type - = state_node.get_property (state_node_properties::type)) + if (const char *type = state_node.get_type ()) { xp.push_tag ("td", false); xp.set_attr ("align", "right"); @@ -464,8 +455,7 @@ class state_diagram : public dot::graph xp.pop_tag ("td"); } - if (const char *value - = state_node.get_property (state_node_properties::value_str)) + if (const char *value = state_node.get_value ()) { xp.push_tag ("td", false); xp.set_attr ("align", "left"); @@ -476,16 +466,15 @@ class state_diagram : public dot::graph xp.pop_tag ("td"); recurse = false; } - xp.pop_tag ("tr"); } break; } if (recurse) - for (size_t i = 0; i < state_node.get_num_children (); ++i) + for (size_t i = 0; i < state_node.m_node.get_num_children (); ++i) on_node_in_table (id_of_dot_node, xp, - state_node.get_child (i), + state_node.m_node.get_child (i), max_depth, depth + 1, num_columns); } @@ -508,9 +497,9 @@ class state_diagram : public dot::graph void maybe_add_src_port (const dot::id &id_of_dot_node, xml::printer &xp, - const diagnostics::digraphs::node &state_node) + state_node_ref state_node) { - auto iter = m_src_nodes.find (&state_node); + auto iter = m_src_nodes.find (&state_node.m_node); if (iter == m_src_nodes.end ()) return; @@ -518,7 +507,7 @@ class state_diagram : public dot::graph dot::node_id node_id (id_of_dot_node, dot::port (src_id, dot::compass_pt::e)); - m_src_node_to_port_id.insert ({&state_node, node_id}); + m_src_node_to_port_id.insert ({&state_node.m_node, node_id}); xp.set_attr ("port", src_id.m_str); } @@ -528,9 +517,9 @@ class state_diagram : public dot::graph void maybe_add_dst_port (const dot::id &id_of_dot_node, xml::printer &xp, - const diagnostics::digraphs::node &state_node) + state_node_ref state_node) { - auto iter = m_dst_nodes.find (&state_node); + auto iter = m_dst_nodes.find (&state_node.m_node); if (iter == m_dst_nodes.end ()) return; @@ -538,7 +527,7 @@ class state_diagram : public dot::graph dot::node_id node_id (id_of_dot_node, dot::port (dst_id/*, dot::compass_pt::w*/)); - m_dst_node_to_port_id.insert ({&state_node, node_id}); + m_dst_node_to_port_id.insert ({&state_node.m_node, node_id}); xp.set_attr ("port", dst_id.m_str); } @@ -546,11 +535,11 @@ class state_diagram : public dot::graph const logical_locations::manager &m_logical_loc_mgr; /* All nodes involved in edges (and thus will need a port). */ - std::set m_src_nodes; - std::set m_dst_nodes; + std::set m_src_nodes; + std::set m_dst_nodes; - std::map m_src_node_to_port_id; - std::map m_dst_node_to_port_id; + std::map m_src_node_to_port_id; + std::map m_dst_node_to_port_id; }; std::unique_ptr diff --git a/gcc/diagnostics/state-graphs.cc b/gcc/diagnostics/state-graphs.cc new file mode 100644 index 000000000000..5941c4138214 --- /dev/null +++ b/gcc/diagnostics/state-graphs.cc @@ -0,0 +1,156 @@ +/* Extensions to diagnostics::digraphs to support state graphs. + Copyright (C) 2025 Free Software Foundation, Inc. + Contributed by David Malcolm . + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +#define INCLUDE_ALGORITHM +#define INCLUDE_MAP +#define INCLUDE_SET +#define INCLUDE_STRING +#define INCLUDE_VECTOR +#include "config.h" +#include "system.h" +#include "coretypes.h" + +#include "diagnostics/state-graphs.h" +#include "selftest.h" + +using namespace diagnostics::state_graphs; + +const char * const node_kind_strs[] = { + "globals", + "code", + "function", + "stack", + "stack-frame", + "heap", + "thread-local", + "dynalloc-buffer", + "variable", + "field", + "padding", + "element", + "other", +}; + +const char * +diagnostics::state_graphs::node_kind_to_str (enum node_kind k) +{ + return node_kind_strs[static_cast (k)]; +} + +// struct state_node_ref + +enum node_kind +state_node_ref::get_node_kind () const +{ + const char *value = get_attr ("kind"); + if (!value) + return node_kind::other; + + for (size_t i = 0; i < ARRAY_SIZE (node_kind_strs); ++i) + if (!strcmp (node_kind_strs[i], value)) + return static_cast (i); + + return node_kind::other; +} + +void +state_node_ref::set_node_kind (enum node_kind k) +{ + set_attr ("kind", node_kind_to_str (k)); +} + +const char * const dynalloc_state_strs[] = { + "unknown", + "nonnull", + "unchecked", + "freed" +}; + +enum node_dynalloc_state +state_node_ref::get_dynalloc_state () const +{ + const char *value = get_attr ("dynalloc-state"); + if (!value) + return node_dynalloc_state::unknown; + + for (size_t i = 0; i < ARRAY_SIZE (dynalloc_state_strs); ++i) + if (!strcmp (dynalloc_state_strs[i], value)) + return static_cast (i); + + return node_dynalloc_state::unknown; +} + +void +state_node_ref::set_dynalloc_state (enum node_dynalloc_state s) const +{ + set_attr ("dynalloc-state", + dynalloc_state_strs[static_cast (s)]); +} + +const char * +state_node_ref::get_dynamic_extents () const +{ + return m_node.get_attr (STATE_NODE_PREFIX, "dynamic-extents"); +} + +void +state_node_ref::set_json_attr (const char *key, + std::unique_ptr value) const +{ + m_node.set_json_attr (STATE_NODE_PREFIX, key, std::move (value)); +} + +#if CHECKING_P + +namespace diagnostics { +namespace selftest { + +static void +test_node_attrs () +{ + digraphs::digraph g; + digraphs::node n (g, "a"); + state_node_ref node_ref (n); + + ASSERT_EQ (node_ref.get_node_kind (), node_kind::other); + node_ref.set_node_kind (node_kind::stack); + ASSERT_EQ (node_ref.get_node_kind (), node_kind::stack); + + ASSERT_EQ (node_ref.get_dynalloc_state (), node_dynalloc_state::unknown); + node_ref.set_dynalloc_state (node_dynalloc_state::freed); + ASSERT_EQ (node_ref.get_dynalloc_state (), node_dynalloc_state::freed); + + ASSERT_EQ (node_ref.get_type (), nullptr); + node_ref.set_type ("const char *"); + ASSERT_STREQ (node_ref.get_type (), "const char *"); +} + +/* Run all of the selftests within this file. */ + +void +state_graphs_cc_tests () +{ + test_node_attrs (); +} + +} // namespace diagnostics::selftest +} // namespace diagnostics + +#endif /* CHECKING_P */ diff --git a/gcc/diagnostics/state-graphs.h b/gcc/diagnostics/state-graphs.h index 21aded03ff6b..ad18f82b5b73 100644 --- a/gcc/diagnostics/state-graphs.h +++ b/gcc/diagnostics/state-graphs.h @@ -22,6 +22,7 @@ along with GCC; see the file COPYING3. If not see #define GCC_DIAGNOSTICS_STATE_GRAPHS_H #include "diagnostics/digraphs.h" +#include "diagnostics/logical-locations.h" /* diagnostics::digraphs provides support for directed graphs. @@ -33,11 +34,118 @@ along with GCC; see the file COPYING3. If not see in these nodes to stash extra properties (e.g. what kind of memory region a node is e.g. stack vs heap). */ +class sarif_graph; namespace dot { class graph; } namespace diagnostics { namespace state_graphs { +enum class node_kind +{ + // Memory regions + globals, + code, + function, // code within a particular function + stack, + stack_frame, + heap_, + thread_local_, + + /* Dynamically-allocated buffer, + on heap or stack (depending on parent). */ + dynalloc_buffer, + + variable, + + field, // field within a struct or union + padding, // padding bits in a struct or union + element, // element within an array + + other // anything else +}; + +extern const char * +node_kind_to_str (enum node_kind); + +enum class node_dynalloc_state +{ + unknown, + nonnull, + unchecked, + freed +}; + +/* Prefixes to use in SARIF property bags. */ +#define STATE_GRAPH_PREFIX "gcc/diagnostic_state_graph/" +#define STATE_NODE_PREFIX "gcc/diagnostic_state_node/" +#define STATE_EDGE_PREFIX "gcc/diagnostic_state_edge/" + +/* A wrapper around a node that gets/sets attributes, using + the node's property bag for storage, so that the data roundtrips + through SARIF. */ + +struct state_node_ref +{ + state_node_ref (diagnostics::digraphs::node &node) + : m_node (node) + {} + + enum node_kind + get_node_kind () const; + void + set_node_kind (enum node_kind); + + // For node_kind::stack_frame, this will be the function + logical_locations::key + get_logical_loc () const + { + return m_node.get_logical_loc (); + } + + // For node_kind::dynalloc_buffer + enum node_dynalloc_state + get_dynalloc_state () const; + + void + set_dynalloc_state (enum node_dynalloc_state) const; + + const char * + get_dynamic_extents () const; + + const char * + get_name () const { return get_attr ("name"); } + void + set_name (const char *name) const { set_attr ("name", name); } + + const char * + get_type () const { return get_attr ("type"); } + void + set_type (const char *type) const { set_attr ("type", type); } + + const char * + get_value () const { return get_attr ("value"); } + + const char * + get_index () const { return get_attr ("index"); } + + const char * + get_attr (const char *key) const + { + return m_node.get_attr (STATE_NODE_PREFIX, key); + } + + void + set_attr (const char *key, const char *value) const + { + return m_node.set_attr (STATE_NODE_PREFIX, key, value); + } + + void + set_json_attr (const char *key, std::unique_ptr value) const; + + diagnostics::digraphs::node &m_node; +}; + extern std::unique_ptr make_dot_graph (const diagnostics::digraphs::digraph &state_graph, const logical_locations::manager &logical_loc_mgr); diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 81a495b416f0..492ca2914323 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -6271,16 +6271,16 @@ These are visible by pressing ``j'' and ``k'' to single-step forward and backward through events. Enabling this option will slow down HTML generation. -@item show-graph-dot-src=@r{[}yes@r{|}no@r{]} +@item show-state-diagrams-dot-src=@r{[}yes@r{|}no@r{]} This is a debugging feature and defaults to @code{no}. -If @code{show-graph-dot-src=yes} +If @code{show-state-diagrams-dot-src=yes} then if @code{show-state-diagrams=yes}, the generated state diagrams will also show the .dot source input to GraphViz used for the diagram. -@item show-graph-sarif=@r{[}yes@r{|}no@r{]} +@item show-state-diagrams-sarif=@r{[}yes@r{|}no@r{]} This is a debugging feature and defaults to @code{no}. -If @code{show-graph-sarif=yes} +If @code{show-state-diagrams-sarif=yes} then if @code{show-state-diagrams=yes}, the generated state diagrams will also show a SARIF representation of the state. diff --git a/gcc/json.cc b/gcc/json.cc index 14ff76bd0366..7153f087a001 100644 --- a/gcc/json.cc +++ b/gcc/json.cc @@ -394,31 +394,6 @@ object::set_bool (const char *key, bool v) set (key, new json::literal (v)); } -void -object::set_string (const string_property &property, const char *utf8_value) -{ - set_string (property.m_key.get (), utf8_value); -} - -void -object::set_integer (const integer_property &property, long value) -{ - set_integer (property.m_key.get (), value); -} - -void -object::set_bool (const bool_property &property, bool value) -{ - set_bool (property.m_key.get (), value); -} - -void -object::set_array_of_string (const array_of_string_property &property, - std::unique_ptr value) -{ - set (property.m_key.get (), std::move (value)); -} - /* Subroutine of json::compare for comparing a pairs of objects. */ int diff --git a/gcc/json.h b/gcc/json.h index c53715ecb2ca..c706f2a4fe9f 100644 --- a/gcc/json.h +++ b/gcc/json.h @@ -21,8 +21,6 @@ along with GCC; see the file COPYING3. If not see #ifndef GCC_JSON_H #define GCC_JSON_H -#include "label-text.h" - /* Implementation of JSON, a lightweight data-interchange format. See http://www.json.org/ @@ -118,41 +116,6 @@ struct token } // namespace json::pointer -/* Typesafe way to work with properties in JSON objects. */ - -template -struct property -{ - explicit property (const char *key) - : m_key (label_text::borrow (key)) - {} - - explicit property (const char *key_prefix, const char *key) - : m_key (label_text::take (concat (key_prefix, key, nullptr))) - {} - - label_text m_key; -}; - -using string_property = property; -using integer_property = property; -using bool_property = property; -using json_property = property; -using array_of_string_property = property; - -template -struct enum_traits -{ - typedef EnumType enum_t; - - static enum_t get_unknown_value (); - static bool maybe_get_value_from_string (const char *, enum_t &out); - static const char *get_string_for_value (enum_t value); -}; - -template -using enum_property = property>; - /* Base class of JSON value. */ class value @@ -167,8 +130,6 @@ class value void DEBUG_FUNCTION dump () const; virtual object *dyn_cast_object () { return nullptr; } - virtual array *dyn_cast_array () { return nullptr; } - virtual integer_number *dyn_cast_integer_number () { return nullptr; } virtual string *dyn_cast_string () { return nullptr; } static int compare (const json::value &val_a, const json::value &val_b); @@ -222,19 +183,6 @@ class object : public value /* Set to literal true/false. */ void set_bool (const char *key, bool v); - /* Typesafe access to properties by name (such as from a schema). */ - void set_string (const string_property &property, const char *utf8_value); - void set_integer (const integer_property &property, long value); - void set_bool (const bool_property &property, bool value); - void set_array_of_string (const array_of_string_property &property, - std::unique_ptr value); - template - bool maybe_get_enum (const enum_property &property, - EnumType &out) const; - template - void set_enum (const enum_property &property, - EnumType value); - static int compare (const json::object &obj_a, const json::object &obj_b); size_t get_num_keys () const { return m_keys.length (); } @@ -262,8 +210,6 @@ class array : public value void print (pretty_printer *pp, bool formatted) const final override; std::unique_ptr clone () const final override; - array *dyn_cast_array () final override { return this; } - void append (value *v); void append_string (const char *utf8_value); @@ -323,8 +269,6 @@ class integer_number : public value void print (pretty_printer *pp, bool formatted) const final override; std::unique_ptr clone () const final override; - integer_number *dyn_cast_integer_number () final override { return this; } - long get () const { return m_value; } private: @@ -373,32 +317,6 @@ class literal : public value enum kind m_kind; }; - -template -inline bool -object::maybe_get_enum (const enum_property &property, - EnumType &out) const -{ - if (value *jv = get (property.m_key.get ())) - if (string *jstr = jv->dyn_cast_string ()) - { - if (enum_traits::maybe_get_value_from_string - (jstr->get_string (), out)) - return true; - } - return false; -} - -template -inline void -object::set_enum (const enum_property &property, - EnumType value) -{ - const char *str - = json::enum_traits::get_string_for_value (value); - set_string (property.m_key.get (), str); -} - } // namespace json template <> diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_graphs.cc b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_graphs.cc index 8ba576ec81c4..7398a2908258 100644 --- a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_graphs.cc +++ b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_graphs.cc @@ -210,8 +210,9 @@ report_diag_with_graphs (location_t loc) g->set_description (desc); auto a = std::make_unique (*g, "a"); auto b = std::make_unique (*g, "b"); - const json::string_property color ("/placeholder-prefix/color"); - b->set_property (color, "red"); +#define KEY_PREFIX "/placeholder-prefix/" + b->set_attr (KEY_PREFIX, "color", "red"); +#undef KEY_PREFIX auto c = std::make_unique (*g, "c"); c->set_label ("I am a node label"); From 806d5417e0c04a15c48a7e876ebf435f06ecfccc Mon Sep 17 00:00:00 2001 From: Egas Ribeiro Date: Fri, 3 Oct 2025 01:56:52 +0100 Subject: [PATCH 066/216] c++: Fix ICE with struct in function parameter containing auto [PR122112] When parsing function parameters containing a struct declaration, initially auto_is_implicit_function_template_parm_p is set to true by cp_parser_parameter_declaration_clause. However, later when we enter class scope and scope_kind becomes sk_class, we don't set it to false, so cp_parser_simple_type_specifier will call synthesize_implicit_template_parm, which expects that current_binding_level->kind == sk_function_parms, triggering a failed assertion. This fix ensures that auto_is_implicit_function_template_parm_p isn't set when parsing a struct body definition. gcc/cp/ChangeLog: PR c++/122112 * parser.cc (cp_parser_parameter_declaration_clause): Don't enable auto_is_implicit_function_template_parm_p when entering class scope. gcc/testsuite/ChangeLog: PR c++/122112 * g++.dg/parse/auto-struct-param.C: New test. Signed-off-by: Egas Ribeiro --- gcc/cp/parser.cc | 7 +++++++ gcc/testsuite/g++.dg/parse/auto-struct-param.C | 4 ++++ 2 files changed, 11 insertions(+) create mode 100644 gcc/testsuite/g++.dg/parse/auto-struct-param.C diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index 8d1187f8cdae..04031486bb3b 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -28124,6 +28124,7 @@ cp_parser_class_specifier (cp_parser* parser) bool in_switch_statement_p; bool saved_in_unbraced_linkage_specification_p; bool saved_in_unbraced_export_declaration_p; + bool saved_auto_is_implicit_function_template_parm_p; tree old_scope = NULL_TREE; tree scope = NULL_TREE; cp_token *closing_brace; @@ -28181,6 +28182,10 @@ cp_parser_class_specifier (cp_parser* parser) saved_in_unbraced_export_declaration_p = parser->in_unbraced_export_declaration_p; parser->in_unbraced_export_declaration_p = false; + saved_auto_is_implicit_function_template_parm_p + = parser->auto_is_implicit_function_template_parm_p; + parser->auto_is_implicit_function_template_parm_p = false; + /* 'this' from an enclosing non-static member function is unavailable. */ tree saved_ccp = current_class_ptr; tree saved_ccr = current_class_ref; @@ -28571,6 +28576,8 @@ cp_parser_class_specifier (cp_parser* parser) = saved_in_unbraced_linkage_specification_p; parser->in_unbraced_export_declaration_p = saved_in_unbraced_export_declaration_p; + parser->auto_is_implicit_function_template_parm_p + = saved_auto_is_implicit_function_template_parm_p; current_class_ptr = saved_ccp; current_class_ref = saved_ccr; diff --git a/gcc/testsuite/g++.dg/parse/auto-struct-param.C b/gcc/testsuite/g++.dg/parse/auto-struct-param.C new file mode 100644 index 000000000000..78573c685036 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/auto-struct-param.C @@ -0,0 +1,4 @@ +// PR c++/122112 +// { dg-do compile { target c++20 } } + +void func(struct { auto x; }); // { dg-error "" } From a8ecf4580442e463c3a023b6724fb27e6b7e0804 Mon Sep 17 00:00:00 2001 From: Nathaniel Shead Date: Sat, 20 Sep 2025 23:12:17 +1000 Subject: [PATCH 067/216] c++/modules: Handle naming external TU-local entities in ADL This finishes the reworking of ADL handling for modules for PR117658. [basic.link] p18 says that we should diagnose any references to a TU-local entity from a different TU; with our fixed handling of ADL this is now possible to occur. To do this we need to generate fake bindings for these decls on stream-out so that importers know that we have a visible name in this namespace. We don't actually need (or want) to provide full DECLs though, as that could potentially involve streaming other TU-local entities, so we just build a TU_LOCAL_ENTITY for the decl on receipt. The patch also uses 'decl_as_string' to give a more descriptive name for these decls when erroring. We also need somewhere to store these decls. We only actually need the decls for diagnostics; for correctness we only need to know whether any such decls existed, so to not mess with the existing packing of bindings or usages of the OVERLOADs this patch adds a new map to the binding vector that can be looked up when diagnostics need to be generated. Finally, as specified this diagnostic is a pretty broad hammer, as any internal-linkage purview function will stop ADL in exported templates from working with that name. So this patch just makes it a pedwarn and provides an option to disable if needed. PR c++/117658 gcc/c-family/ChangeLog: * c.opt: New flag '-Wexternal-tu-local'. * c.opt.urls: Regenerate. gcc/cp/ChangeLog: * cp-tree.h (TU_LOCAL_ENTITY_NAME): Clarify meaning. * module.cc (depset::entity_kind): New enumerator, assert that we have enough bits reserved. (depset::disc_bits): Assert the discriminator has enough bits. (depset::entity_kind_name): Add 'tu-local' case, assert we have an entry for all relevant entry_kinds. (name_for_tu_local_decl): New function. (trees_out::tree_node): Use it. (depset::hash::make_dependency): Validate EK_TU_LOCAL. (depset::hash::add_binding_entity): Generate bindings for internal purview functions. (enum ct_bind_flags): New enum for TU-local decls. (depset::hash::find_dependencies): Handle EK_TU_LOCAL entities. (binding_cmp): Likewise. (sort_cluster): Likewise. (module_state::write_cluster): Likewise. (module_state::read_cluster): Likewise. * name-lookup.cc (append_imported_binding_slot): Propagate internal decl list when growing binding vector. (name_lookup::adl_namespace_fns): Diagnose if naming a TU-local entity from a different TU. (set_module_binding): Include any internal decls in binding. * name-lookup.h (struct module_tree_map_traits): New type. (struct tree_binding_vec): Add member 'internal_decls'. (BINDING_VECTOR_INTERNAL_DECLS): New getter. (MODULE_BINDING_INTERNAL_DECLS_P): New flag. (set_module_binding): Add parameter. gcc/ChangeLog: * doc/invoke.texi: Document '-Wno-external-tu-local'. gcc/testsuite/ChangeLog: * g++.dg/modules/adl-6_c.C: Adjust diagnostics. * g++.dg/modules/internal-14_c.C: Likewise. * g++.dg/modules/internal-15_a.C: New test. * g++.dg/modules/internal-15_b.C: New test. Signed-off-by: Nathaniel Shead Reviewed-by: Jason Merrill --- gcc/c-family/c.opt | 4 + gcc/c-family/c.opt.urls | 3 + gcc/cp/cp-tree.h | 3 +- gcc/cp/module.cc | 112 ++++++++++++++++--- gcc/cp/name-lookup.cc | 58 ++++++++-- gcc/cp/name-lookup.h | 16 ++- gcc/doc/invoke.texi | 28 ++++- gcc/testsuite/g++.dg/modules/adl-6_c.C | 5 +- gcc/testsuite/g++.dg/modules/internal-14_c.C | 2 +- gcc/testsuite/g++.dg/modules/internal-15_a.C | 28 +++++ gcc/testsuite/g++.dg/modules/internal-15_b.C | 13 +++ 11 files changed, 241 insertions(+), 31 deletions(-) create mode 100644 gcc/testsuite/g++.dg/modules/internal-15_a.C create mode 100644 gcc/testsuite/g++.dg/modules/internal-15_b.C diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index 4fd8770b65c3..abe0aa6b397a 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -761,6 +761,10 @@ Wexpansion-to-defined C ObjC C++ ObjC++ CPP(warn_expansion_to_defined) CppReason(CPP_W_EXPANSION_TO_DEFINED) Var(cpp_warn_expansion_to_defined) Init(0) Warning EnabledBy(Wextra || Wpedantic) Warn if \"defined\" is used outside #if. +Wexternal-tu-local +C++ ObjC++ Var(warn_tu_local) Warning Init(1) +Warn about naming a TU-local entity declared in another translation unit. + Wextra C ObjC C++ ObjC++ Warning ; in common.opt diff --git a/gcc/c-family/c.opt.urls b/gcc/c-family/c.opt.urls index 6c01a7d7ccc6..399f9f8a659e 100644 --- a/gcc/c-family/c.opt.urls +++ b/gcc/c-family/c.opt.urls @@ -376,6 +376,9 @@ UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wexceptions) Wexpansion-to-defined UrlSuffix(gcc/Warning-Options.html#index-Wexpansion-to-defined) +Wexternal-tu-local +UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wexternal-tu-local) + Wextra UrlSuffix(gcc/Warning-Options.html#index-Wextra) LangUrlSuffix_D(gdc/Warnings.html#index-Wextra) LangUrlSuffix_Fortran(gfortran/Error-and-Warning-Options.html#index-Wextra) diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 6ee945f3ebf9..643fa6f5bcda 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -1856,7 +1856,8 @@ struct GTY(()) tree_tu_local_entity { location_t loc; }; -/* The name of a translation-unit-local entity. */ +/* The human-readable name of a translation-unit-local entity as + an IDENTIFIER_NODE. */ #define TU_LOCAL_ENTITY_NAME(NODE) \ (((struct tree_tu_local_entity *)TU_LOCAL_ENTITY_CHECK (NODE))->name) diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc index be873c192955..5f814f39e72c 100644 --- a/gcc/cp/module.cc +++ b/gcc/cp/module.cc @@ -2341,6 +2341,7 @@ class depset { EK_PARTIAL, /* A partial specialization. */ EK_USING, /* A using declaration (at namespace scope). */ EK_NAMESPACE, /* A namespace. */ + EK_TU_LOCAL, /* A TU-local decl for ADL. */ EK_REDIRECT, /* Redirect to a template_decl. */ EK_EXPLICIT_HWM, EK_BINDING = EK_EXPLICIT_HWM, /* Implicitly encoded. */ @@ -2351,6 +2352,8 @@ class depset { EK_BITS = 3 /* Only need to encode below EK_EXPLICIT_HWM. */ }; + static_assert (EK_EXPLICIT_HWM < (1u << EK_BITS), + "not enough bits reserved for entity_kind"); private: /* Placement of bit fields in discriminator. */ @@ -2375,7 +2378,10 @@ class depset { awkward. */ DB_TYPE_SPEC_BIT, /* Specialization in the type table. */ DB_FRIEND_SPEC_BIT, /* An instantiated template friend. */ + DB_HWM, }; + static_assert (DB_HWM <= sizeof(discriminator) * CHAR_BIT, + "not enough bits in discriminator"); public: /* The first slot is special for EK_SPECIALIZATIONS it is a @@ -2700,7 +2706,9 @@ depset::entity_kind_name () const /* Same order as entity_kind. */ static const char *const names[] = {"decl", "specialization", "partial", "using", - "namespace", "redirect", "binding"}; + "namespace", "tu-local", "redirect", "binding"}; + static_assert (ARRAY_SIZE (names) == EK_EXPLICIT_HWM + 1, + "names must have an entry for every explicit entity_kind"); entity_kind kind = get_entity_kind (); gcc_checking_assert (kind < ARRAY_SIZE (names)); return names[kind]; @@ -9986,6 +9994,16 @@ trees_out::find_tu_local_decl (tree t) return cp_walk_tree_without_duplicates (&t, walker, this); } +/* Get the name for TU-local decl T to be used in diagnostics. */ + +static tree +name_for_tu_local_decl (tree t) +{ + int flags = (TFF_SCOPE | TFF_DECL_SPECIFIERS); + const char *str = decl_as_string (t, flags); + return get_identifier (str); +} + /* Stream out tree node T. We automatically create local back references, which is essentially a single pass lisp self-referential structure pretty-printer. */ @@ -10030,8 +10048,7 @@ trees_out::tree_node (tree t) && dump ("Writing TU-local entity:%d %C:%N", tag, TREE_CODE (t), t); } - /* TODO: Get a more descriptive name? */ - tree_node (DECL_NAME (local_decl)); + tree_node (name_for_tu_local_decl (local_decl)); if (state) state->write_location (*this, DECL_SOURCE_LOCATION (local_decl)); goto done; @@ -14194,6 +14211,8 @@ depset::hash::make_dependency (tree decl, entity_kind ek) gcc_checking_assert (!is_key_order ()); if (ek == EK_USING) gcc_checking_assert (TREE_CODE (decl) == OVERLOAD); + if (ek == EK_TU_LOCAL) + gcc_checking_assert (DECL_DECLARES_FUNCTION_P (decl)); if (TREE_CODE (decl) == TEMPLATE_DECL) /* The template should have copied these from its result decl. */ @@ -14394,7 +14413,8 @@ depset::hash::make_dependency (tree decl, entity_kind ek) dump (dumper::DEPEND) && dump ("%s on %s %C:%N found", ek == EK_REDIRECT ? "Redirect" - : for_binding ? "Binding" : "Dependency", + : (for_binding || ek == EK_TU_LOCAL) ? "Binding" + : "Dependency", dep->entity_kind_name (), TREE_CODE (decl), decl); return dep; @@ -14565,9 +14585,21 @@ depset::hash::add_binding_entity (tree decl, WMB_Flags flags, void *data_) than trying to clear out bindings after the fact. */ return false; + bool internal_decl = false; if (!header_module_p () && data->hash->is_tu_local_entity (decl)) - /* Ignore TU-local entitites. */ - return false; + { + /* A TU-local entity. For ADL we still need to create bindings + for internal-linkage functions attached to a named module. */ + if (DECL_DECLARES_FUNCTION_P (inner) + && DECL_LANG_SPECIFIC (inner) + && DECL_MODULE_ATTACH_P (inner)) + { + gcc_checking_assert (!DECL_MODULE_EXPORT_P (inner)); + internal_decl = true; + } + else + return false; + } if ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == TYPE_DECL) @@ -14662,8 +14694,13 @@ depset::hash::add_binding_entity (tree decl, WMB_Flags flags, void *data_) OVL_EXPORT_P (decl) = true; } - depset *dep = data->hash->make_dependency - (decl, flags & WMB_Using ? EK_USING : EK_FOR_BINDING); + entity_kind ek = EK_FOR_BINDING; + if (internal_decl) + ek = EK_TU_LOCAL; + else if (flags & WMB_Using) + ek = EK_USING; + + depset *dep = data->hash->make_dependency (decl, ek); if (flags & WMB_Hidden) dep->set_hidden_binding (); data->binding->deps.safe_push (dep); @@ -15114,9 +15151,12 @@ depset::hash::find_dependencies (module_state *module) walker.begin (); if (current->get_entity_kind () == EK_USING) walker.tree_node (OVL_FUNCTION (decl)); + else if (current->get_entity_kind () == EK_TU_LOCAL) + /* We only stream its name and location. */ + module->note_location (DECL_SOURCE_LOCATION (decl)); else if (TREE_VISITED (decl)) /* A global tree. */; - else if (item->get_entity_kind () == EK_NAMESPACE) + else if (current->get_entity_kind () == EK_NAMESPACE) { module->note_location (DECL_SOURCE_LOCATION (decl)); add_namespace_context (current, CP_DECL_CONTEXT (decl)); @@ -15231,6 +15271,12 @@ binding_cmp (const void *a_, const void *b_) return a_implicit ? -1 : +1; /* Implicit first. */ } + /* TU-local before non-TU-local. */ + bool a_internal = a->get_entity_kind () == depset::EK_TU_LOCAL; + bool b_internal = b->get_entity_kind () == depset::EK_TU_LOCAL; + if (a_internal != b_internal) + return a_internal ? -1 : +1; /* Internal first. */ + /* Hidden before non-hidden. */ bool a_hidden = a->is_hidden (); bool b_hidden = b->is_hidden (); @@ -15565,12 +15611,15 @@ sort_cluster (depset::hash *original, depset *scc[], unsigned size) use_lwm--; break; } - /* We must have copied a using, so move it too. */ + /* We must have copied a using or TU-local, so move it too. */ dep = scc[ix]; - gcc_checking_assert (dep->get_entity_kind () == depset::EK_USING); + gcc_checking_assert + (dep->get_entity_kind () == depset::EK_USING + || dep->get_entity_kind () == depset::EK_TU_LOCAL); /* FALLTHROUGH */ case depset::EK_USING: + case depset::EK_TU_LOCAL: if (--use_lwm != ix) { scc[ix] = scc[use_lwm]; @@ -16570,6 +16619,7 @@ enum ct_bind_flags cbf_export = 0x1, /* An exported decl. */ cbf_hidden = 0x2, /* A hidden (friend) decl. */ cbf_using = 0x4, /* A using decl. */ + cbf_internal = 0x8, /* A TU-local decl. */ }; /* DEP belongs to a different cluster, seed it to prevent @@ -16641,7 +16691,9 @@ module_state::write_cluster (elf_out *to, depset *scc[], unsigned size, gcc_checking_assert (dep->is_import () || TREE_VISITED (dep->get_entity ()) || (dep->get_entity_kind () - == depset::EK_USING)); + == depset::EK_USING) + || (dep->get_entity_kind () + == depset::EK_TU_LOCAL)); } } break; @@ -16654,6 +16706,7 @@ module_state::write_cluster (elf_out *to, depset *scc[], unsigned size, /* FALLTHROUGH */ case depset::EK_USING: + case depset::EK_TU_LOCAL: gcc_checking_assert (!b->is_import () && !b->is_unreached ()); dump (dumper::CLUSTER) @@ -16726,7 +16779,9 @@ module_state::write_cluster (elf_out *to, depset *scc[], unsigned size, depset *dep = b->deps[jx]; tree bound = dep->get_entity (); unsigned flags = 0; - if (dep->get_entity_kind () == depset::EK_USING) + if (dep->get_entity_kind () == depset::EK_TU_LOCAL) + flags |= cbf_internal; + else if (dep->get_entity_kind () == depset::EK_USING) { tree ovl = bound; bound = OVL_FUNCTION (bound); @@ -16752,7 +16807,13 @@ module_state::write_cluster (elf_out *to, depset *scc[], unsigned size, gcc_checking_assert (DECL_P (bound)); sec.i (flags); - sec.tree_node (bound); + if (flags & cbf_internal) + { + sec.tree_node (name_for_tu_local_decl (bound)); + write_location (sec, DECL_SOURCE_LOCATION (bound)); + } + else + sec.tree_node (bound); } /* Terminate the list. */ @@ -16761,6 +16822,7 @@ module_state::write_cluster (elf_out *to, depset *scc[], unsigned size, break; case depset::EK_USING: + case depset::EK_TU_LOCAL: dump () && dump ("Depset:%u %s %C:%N", ix, b->entity_kind_name (), TREE_CODE (decl), decl); break; @@ -16878,6 +16940,7 @@ module_state::read_cluster (unsigned snum) tree name = sec.tree_node (); tree decls = NULL_TREE; tree visible = NULL_TREE; + tree internal = NULL_TREE; tree type = NULL_TREE; bool dedup = false; bool global_p = is_header (); @@ -16893,6 +16956,23 @@ module_state::read_cluster (unsigned snum) if ((flags & cbf_hidden) && (flags & (cbf_using | cbf_export))) sec.set_overrun (); + if ((flags & cbf_internal) + && flags != cbf_internal) + sec.set_overrun (); + + if (flags & cbf_internal) + { + tree name = sec.tree_node (); + location_t loc = read_location (sec); + if (sec.get_overrun ()) + break; + + tree decl = make_node (TU_LOCAL_ENTITY); + TU_LOCAL_ENTITY_NAME (decl) = name; + TU_LOCAL_ENTITY_LOCATION (decl) = loc; + internal = tree_cons (NULL_TREE, decl, internal); + continue; + } tree decl = sec.tree_node (); if (sec.get_overrun ()) @@ -16987,7 +17067,7 @@ module_state::read_cluster (unsigned snum) } } - if (!decls) + if (!decls && !internal) sec.set_overrun (); if (sec.get_overrun ()) @@ -16996,7 +17076,7 @@ module_state::read_cluster (unsigned snum) dump () && dump ("Binding of %P", ns, name); if (!set_module_binding (ns, name, mod, global_p, is_module () || is_partition (), - decls, type, visible)) + decls, type, visible, internal)) sec.set_overrun (); } break; diff --git a/gcc/cp/name-lookup.cc b/gcc/cp/name-lookup.cc index 32af7a6aed94..8d7fc06f6988 100644 --- a/gcc/cp/name-lookup.cc +++ b/gcc/cp/name-lookup.cc @@ -353,6 +353,8 @@ append_imported_binding_slot (tree *slot, tree name, unsigned ix) tree new_vec = make_binding_vec (name, want); BINDING_VECTOR_NUM_CLUSTERS (new_vec) = have + 1; + BINDING_VECTOR_INTERNAL_DECLS (new_vec) + = BINDING_VECTOR_INTERNAL_DECLS (*slot); BINDING_VECTOR_GLOBAL_DUPS_P (new_vec) = BINDING_VECTOR_GLOBAL_DUPS_P (*slot); BINDING_VECTOR_PARTITION_DUPS_P (new_vec) @@ -1304,10 +1306,34 @@ name_lookup::adl_namespace_fns (tree scope, bitmap imports, } /* For lookups on the instantiation path we can see any - module-linkage declaration; otherwise we should only - see exported decls. */ + declarations visible at any point on the path; + otherwise we should only see exported decls. */ if (on_inst_path) - bind = STAT_DECL (bind); + { + /* If there are any internal functions visible, naming + them outside that module is ill-formed. */ + auto_diagnostic_group d; + if (MODULE_BINDING_INTERNAL_DECLS_P (bind) + && pedwarn (input_location, OPT_Wexternal_tu_local, + "overload set for argument-dependent " + "lookup of %<%D::%D%> in module %qs " + "contains TU-local entities", + scope, name, module_name (mod, false))) + { + tree *tu_locals + = BINDING_VECTOR_INTERNAL_DECLS (val)->get (mod); + gcc_checking_assert (tu_locals && *tu_locals); + for (tree t = *tu_locals; t; t = TREE_CHAIN (t)) + { + tree decl = TREE_VALUE (t); + inform (TU_LOCAL_ENTITY_LOCATION (decl), + "ignoring %qD declared here " + "with internal linkage", + TU_LOCAL_ENTITY_NAME (decl)); + } + } + bind = STAT_DECL (bind); + } else bind = STAT_VISIBLE (bind); } @@ -4427,18 +4453,21 @@ import_module_binding (tree ns, tree name, unsigned mod, unsigned snum) /* An import of MODULE is binding NS::NAME. There should be no existing binding for >= MODULE. GLOBAL_P indicates whether the bindings include global module entities. PARTITION_P is true if - it is part of the current module. VALUE and TYPE are the value - and type bindings. VISIBLE are the value bindings being exported. */ + it is part of the current module. VALUE and TYPE are the value + and type bindings. VISIBLE are the value bindings being exported. + INTERNAL is a TREE_LIST of any TU-local names visible for ADL. */ bool set_module_binding (tree ns, tree name, unsigned mod, bool global_p, - bool partition_p, tree value, tree type, tree visible) + bool partition_p, tree value, tree type, tree visible, + tree internal) { - if (!value) + if (!value && !internal) /* Bogus BMIs could give rise to nothing to bind. */ return false; - gcc_assert (TREE_CODE (value) != NAMESPACE_DECL + gcc_assert (!value + || TREE_CODE (value) != NAMESPACE_DECL || DECL_NAMESPACE_ALIAS (value)); gcc_checking_assert (mod); @@ -4450,7 +4479,7 @@ set_module_binding (tree ns, tree name, unsigned mod, bool global_p, return false; tree bind = value; - if (type || visible != bind || partition_p || global_p) + if (type || visible != bind || internal || partition_p || global_p) { bind = stat_hack (bind, type); STAT_VISIBLE (bind) = visible; @@ -4459,6 +4488,17 @@ set_module_binding (tree ns, tree name, unsigned mod, bool global_p, STAT_TYPE_VISIBLE_P (bind) = true; } + /* If this has internal declarations, track them for diagnostics. */ + if (internal) + { + if (!BINDING_VECTOR_INTERNAL_DECLS (*slot)) + BINDING_VECTOR_INTERNAL_DECLS (*slot) + = module_tree_map_t::create_ggc (); + bool existed = BINDING_VECTOR_INTERNAL_DECLS (*slot)->put (mod, internal); + gcc_checking_assert (!existed); + MODULE_BINDING_INTERNAL_DECLS_P (bind) = true; + } + /* Note if this is this-module and/or global binding. */ if (partition_p) MODULE_BINDING_PARTITION_P (bind) = true; diff --git a/gcc/cp/name-lookup.h b/gcc/cp/name-lookup.h index 5b142e748999..3815b8c1c968 100644 --- a/gcc/cp/name-lookup.h +++ b/gcc/cp/name-lookup.h @@ -142,15 +142,23 @@ struct GTY(()) binding_cluster #define BINDING_VECTOR_CLUSTER(NODE,IX) \ (((tree_binding_vec *)BINDING_VECTOR_CHECK (NODE))->vec[IX]) +struct module_tree_map_traits + : simple_hashmap_traits, tree> {}; +typedef hash_map module_tree_map_t; + struct GTY(()) tree_binding_vec { struct tree_base base; tree name; + module_tree_map_t *internal_decls; binding_cluster GTY((length ("%h.base.u.dependence_info.base"))) vec[1]; }; /* The name of a module vector. */ #define BINDING_VECTOR_NAME(NODE) \ (((tree_binding_vec *)BINDING_VECTOR_CHECK (NODE))->name) +/* A collection of internal functions for ADL in this binding. */ +#define BINDING_VECTOR_INTERNAL_DECLS(NODE) \ + (((tree_binding_vec *)BINDING_VECTOR_CHECK (NODE))->internal_decls) /* tree_binding_vec does uses base.u.dependence_info.base field for length. It does not have lang_flag etc available! */ @@ -166,6 +174,11 @@ struct GTY(()) tree_binding_vec { #define BINDING_VECTOR_PARTITION_DUPS_P(NODE) \ (BINDING_VECTOR_CHECK (NODE)->base.volatile_flag) +/* True if the binding slot has internal-linkage functions that should + cause ADL to error. */ +#define MODULE_BINDING_INTERNAL_DECLS_P(NODE) \ + (OVERLOAD_CHECK (NODE)->base.private_flag) + /* These two flags indicate the provenence of the bindings on this particular vector slot. We can of course determine this from slot number, but that's a relatively expensive lookup. This avoids @@ -491,7 +504,8 @@ extern bool import_module_binding (tree ctx, tree name, unsigned mod, unsigned snum); extern bool set_module_binding (tree ctx, tree name, unsigned mod, bool global_p, bool partition_p, - tree value, tree type, tree visible); + tree value, tree type, tree visible, + tree internal); extern void add_module_namespace_decl (tree ns, tree decl); enum WMB_Flags diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 492ca2914323..572a1ce6a243 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -272,7 +272,7 @@ in the following sections. -Woverloaded-virtual -Wno-pmf-conversions -Wself-move -Wsign-promo -Wsized-deallocation -Wsuggest-final-methods -Wsuggest-final-types -Wsuggest-override -Wno-template-body --Wno-template-id-cdtor -Wtemplate-names-tu-local +-Wno-template-id-cdtor -Wtemplate-names-tu-local -Wno-external-tu-local -Wno-terminate -Wno-vexing-parse -Wvirtual-inheritance -Wno-virtual-move-assign -Wvolatile} @@ -4759,6 +4759,32 @@ The presence of an explicit instantiation silences the warning. This flag is enabled by @option{-Wextra}. +@opindex Wexternal-tu-local +@opindex Wno-external-tu-local +@item -Wno-external-tu-local +Warn when naming a TU-local entity outside of the translation unit it +was declared in. Such declarations will be ignored during name lookup. +This can occur when performing ADL from a template declared in the same +TU as the internal function: + +@smallexample +export module M; +template void foo(T t) @{ + bar(t); +@} +struct S @{@} s; +static void bar(S) @{@} // internal linkage + +// instantiating foo(s) from outside this TU can see ::bar, +// but naming it there is ill-formed. +@end smallexample + +This can be worked around by making @code{bar} attached to the global +module, using @code{extern "C++"}. + +This warning is enabled by default, and is upgraded to an error by +@option{-pedantic-errors}. + @opindex Wterminate @opindex Wno-terminate @item -Wno-terminate @r{(C++ and Objective-C++ only)} diff --git a/gcc/testsuite/g++.dg/modules/adl-6_c.C b/gcc/testsuite/g++.dg/modules/adl-6_c.C index 99b6c4c043e8..2c675f5241a8 100644 --- a/gcc/testsuite/g++.dg/modules/adl-6_c.C +++ b/gcc/testsuite/g++.dg/modules/adl-6_c.C @@ -1,5 +1,5 @@ // PR c++/117658 -// { dg-additional-options "-fmodules" } +// { dg-additional-options "-fmodules -Wno-error=external-tu-local" } import N; @@ -22,7 +22,8 @@ void test() { apply_err(x); // error: R::g has internal linkage and cannot be used outside N // { dg-message "here" "" { target *-*-* } .-1 } - // { dg-error "'g'" "" { target *-*-* } 0 } + // { dg-warning "lookup of 'R::g'" "" { target *-*-* } 0 } + // { dg-error "'g' was not declared" "" { target *-*-* } 0 } auto y = make_Y(); f(y); // OK, I::B::f and I::A::Y have matching innermost non-inline namespace diff --git a/gcc/testsuite/g++.dg/modules/internal-14_c.C b/gcc/testsuite/g++.dg/modules/internal-14_c.C index 4f8e785ce872..50fb8e6f1a73 100644 --- a/gcc/testsuite/g++.dg/modules/internal-14_c.C +++ b/gcc/testsuite/g++.dg/modules/internal-14_c.C @@ -4,6 +4,6 @@ import m; int main() { - // { dg-error "instantiation exposes TU-local entity '(fun1|Dodgy)'" "" { target *-*-* } 0 } + // { dg-error "instantiation exposes TU-local entity '\[^']*(fun1|Dodgy)\[^']*'" "" { target *-*-* } 0 } fun2(123); // { dg-message "required from here" } } diff --git a/gcc/testsuite/g++.dg/modules/internal-15_a.C b/gcc/testsuite/g++.dg/modules/internal-15_a.C new file mode 100644 index 000000000000..03fec2a45415 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/internal-15_a.C @@ -0,0 +1,28 @@ +// { dg-additional-options "-fmodules -fdump-lang-module-graph -Wno-global-module" } +// { dg-module-cmi A } + +export module A; + +namespace N { + struct A {}; + void adl(A); + inline namespace inner { + static void adl(int); + } +} +namespace G { + struct B {}; + void adl(B); + namespace { + extern "C++" void adl(int); + } +} +void adl(double); + +template +inline void h(T t) { + adl(t); +} + +// { dg-final { scan-lang-dump {Binding on tu-local function_decl:'::N::inner::adl' found} module } } +// { dg-final { scan-lang-dump-not {'G::_GLOBAL__N_1::adl'} module } } diff --git a/gcc/testsuite/g++.dg/modules/internal-15_b.C b/gcc/testsuite/g++.dg/modules/internal-15_b.C new file mode 100644 index 000000000000..003d948b014c --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/internal-15_b.C @@ -0,0 +1,13 @@ +// { dg-additional-options "-fmodules -pedantic-errors" } + +module A; + +void other() { + adl(N::A{}); // OK, lookup occurs from here + h(0); // OK, doesn't consider N::inner::adl + + h(N::A{}); // { dg-message "required from here" } + // { dg-error "TU-local" "" { target *-*-* } 0 } + + h(G::B{}); // OK, G::adl is not attached to A +} From 5ee5a05da06078975a933be849431eee1d4c6989 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 3 Oct 2025 18:10:36 +0100 Subject: [PATCH 068/216] c++: concepts and conversions, take 2 [PR122127] My r16-4115 changed convert_template_argument (when called from instantiate_alias_template) to take the maybe_convert_nontype_argument path rather than convert_nontype_argument for this testcase. This meant not folding the use of the by-ref capture in the template argument to constant 1. When we come back to convert_template_argument again when substituting into resize<_Np> we strip the IMPLICIT_CONV_EXPR (since the types are the same) and take the convert_nontype_argument path, but at this point we've pushed into the alias template context and trying to fold away the capture fails because current_lambda_expr() is now null. Taking the convert_nontype_argument path in the same-type case where we would later strip an IMPLICIT_CONV_EXPR fixes the problem. Note that maybe_convert_nontype_argument already shares the same-type check with the stripping, but that isn't enough; it still doesn't fold away the capture proxy. PR c++/122127 PR c++/112632 gcc/cp/ChangeLog: * pt.cc (convert_template_argument): Don't add redundant IMPLICIT_CONV_EXPR. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/lambda/lambda-template18.C: New test. --- gcc/cp/pt.cc | 7 +++++-- gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template18.C | 11 +++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template18.C diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index bd60d515653b..9b32049e71be 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -8928,8 +8928,11 @@ convert_template_argument (tree parm, orig_arg = TREE_OPERAND (orig_arg, 0); if (!uses_template_parms (t) - && !(force_conv ? uses_template_parms (orig_arg) - : type_dependent_expression_p (orig_arg))) + && !type_dependent_expression_p (orig_arg) + && !(force_conv + && !(same_type_ignoring_top_level_qualifiers_p + (TREE_TYPE (orig_arg), t)) + && value_dependent_expression_p (orig_arg))) /* We used to call digest_init here. However, digest_init will report errors, which we don't want when complain is zero. More importantly, digest_init will try too diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template18.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template18.C new file mode 100644 index 000000000000..e5e6e6a875b9 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template18.C @@ -0,0 +1,11 @@ +// PR c++/122127 +// { dg-do compile { target c++11 } } + +template struct resize; +template using resize_t = resize<_Np>; +template struct basic_mask { + void _M_chunk() { + constexpr int __rem = 1; + [&] { resize_t<__rem>(); }(); + } +}; From f256a13f8aed833fe964a2ba541b7b30ad9b4a76 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Sat, 4 Oct 2025 09:50:39 +0200 Subject: [PATCH 069/216] c++, gimplify: Implement C++26 P2795R5 - Erroneous behavior for uninitialized reads [PR114457] The following patch implements the C++26 P2795R5 paper by enabling something like -ftrivial-auto-var-init=zero by default for -std=c++26/-std=gnu++26. There is an important difference between explicit -ftrivial-auto-var-init=zero and the implicitly enabled one, in particular the explicit one will try to clear padding bits on vars with explicit initializers, while the default C++26 mode does not - C++26 says that using the padding bits for anything but copying structures around is still undefined behavior rather than erroneous behavior. Users can still override the default C++26 behavior in both directions, with -ftrivial-auto-var-init=uninitialized even C++26 will act as C++23 with treating all uninitialized var reads (except for copying) as UB rather than EB, with -ftrivial-auto-var-init=zero it will also clear padding bits on explicit initialization and with -ftrivial-auto-var-init=pattern it will initialize to pattern with clearing padding bits in between. There are other changes that had to be implemented. First of all, we need to magicly preinitialize also temporary objects; this is implemented for both the C++26 implicit mode and explicit -ftrivial-auto-var-init={zero,pattern} by emitting .DEFERRED_INIT before construction of TARGET_EXPR temporaries (if they have void type initializers, i.e. are initialized by code rather than some value). Second needed change is dropping *this ={v} {CLOBBER(bob)}; statements at the start of the constructors for -flifetime-dse=2, that says the old content of *this is irrelevant, which is not true anymore for C++26, where we want to treat it like that for -W*uninitialized purposes, but at runtime actually initialize the values. Instead for -flifetime-dse=2 we emit such {CLOBBER(bob)} before calling whole object constructor (on TARGET_EXPR with void type initializer or on DECL_EXPR). And a separate patch added and another one will be adding more {CLOBBER(bob)} to new expressions. The third needed change is about gotos and switches across vacuous initialization. C++26 says those are still valid, but don't make an exception for those in the EB rules. The patch now includes redirecting of forward/backward gotos which cross vacuous initializations for -std=c++26 and -ftrivial-auto-var-init={zero,pattern} by adding an artificial if (0) { lab1: v1 = .DEFERRED_INIT (...); lab2: v2 = .DEFERRED_INIT (...); } etc. hunk before the user label (or for case labels moving the case label into it). Only one per adjacent set of labels, with perhaps multiple artificial labels in it. I believe (and testing seems to confirm that) that one only needs one set of such initialized vars per the adjacent label group, if some forward or backward jump crosses more vacuous inits, it will always cross a subset or superset of the others and when the vars are ordered right, it can jump into different positions in the same if (0). Furthermore, -Wimplicit-fallthrough and -Wswitch-unreachable warnings have been adjusted to deal with that. These changes mean that -Wtrivial-auto-var-init warning now doesn't make sense for C++, as there is nothing to warn about, all the switches and all the gotos are handled right for -ftrivial-auto-var-init= and are handled that way both for the implicit C++26 mode and for explicit -ftrivial-auto-var-init= options. The fourth change is to avoid regressions for code like struct A { int f, g; A () { f = g; // { dg-warning "g. is used uninitialized" } } } a; where with -flifetime-dse=2 -Wuninitialized we were able to warn about bugs like this because of the *this ={v} {CLOBBER(bob)}; statements at the start of the constructors, but with their removal wouldn't warn about it. Instead we now add a magic "clobber *this" attribute to the this PARM_DECL and use it in -W*uninitialized handling only as an implicit *this ={v} {CLOBBER(bob)}; at the start of the function. If a function is inlined, this disappears, but that shouldn't be a problem, either it is inlined into another constructor and that should have "clobber *this" for its this argument or it is inlined into whole object construction spot and there should be an explicit {CLOBBER(bob)} for the variable or temporary object. The fifth change is adding [[indeterminate]] attribute support and using it to avoid .DEFERRED_INIT calls (like [[gnu::uninitialized]] is handled). Some regressions caused by this patch had bugs filed (but for cases where those already didn't work before with explicit -ftrivial-auto-var-init=zero), those have been xfailed for now. See PR121975 and PR122044. 2025-10-04 Jakub Jelinek PR c++/114457 gcc/ * flag-types.h (enum auto_init_type): Add AUTO_INIT_CXX26. * tree.h (VACUOUS_INIT_LABEL_P): Define. * gimplify.cc (is_var_need_auto_init): Renamed to ... (var_needs_auto_init_p): ... this. Don't return true for vars with "indeterminate" attribute. Formatting fixes. (gimplify_decl_expr): Use var_needs_auto_init_p instead of is_var_need_auto_init. (emit_warn_switch_unreachable): Remove the flag_auto_var_init special cases. (warn_switch_unreachable_and_auto_init_r): Handle them here by doing just returning NULL. (last_stmt_in_scope): Don't skip just debug stmts to find the last stmt in seq, skip for flag_auto_var_init > AUTO_INIT_UNINITIALIZED also IFN_DEFERRED_INIT calls. (collect_fallthrough_labels): For flag_auto_var_init > AUTO_INIT_UNINITIALIZED ignore IFN_DEFERRED_INIT calls and GIMPLE_GOTOs to VACUOUS_INIT_LABEL_P. (should_warn_for_implicit_fallthrough): For flag_auto_var_init > AUTO_INIT_UNINITIALIZED also skip over IFN_DEFERRED_INIT calls. (expand_FALLTHROUGH_r): Likewise, and handle GIMPLE_GOTOs to VACUOUS_INIT_LABEL_P. (gimplify_init_constructor): Use var_needs_auto_init_p instead of is_var_need_auto_init and for flag_auto_var_init AUTO_INIT_CXX26 don't call gimple_add_padding_init_for_auto_var. (gimplify_target_expr): If var_needs_auto_init_p and init has void type, call gimple_add_init_for_auto_var and for AUTO_INIT_PATTERN also gimple_add_padding_init_for_auto_var. * tree-ssa-uninit.cc (maybe_warn_operand): Handle loads from *this at the start of the function with "clobber *this" attribute on the PARM_DECL. * ipa-split.cc (split_function): Remove "clobber *this" attribute from the first PARM_DECL (if any). * doc/invoke.texi (ftrivial-auto-var-init=): Adjust documentation. gcc/c-family/ * c-opts.cc (c_common_post_options): For C++26 set flag_auto_var_init to AUTO_INIT_CXX26 if not specified explicitly. For C++ disable warn_trivial_auto_var_init. gcc/cp/ * cp-tree.h: Implement C++26 P2795R5 - Erroneous behavior for uninitialized reads. (IF_STMT_VACUOUS_INIT_P): Define. (check_goto): Change argument type from tree to tree *. * call.cc (build_over_call): Add indeterminate attribute to TARGET_EXPR slots for indeterminate parameters. * constexpr.cc (cxx_eval_internal_function): Handle IFN_DEFERRED_INIT. (cxx_eval_store_expression): Temporarily work around PR121965 bug. * cp-gimplify.cc (genericize_if_stmt): Handle IF_STMT_VACUOUS_INIT_P. (maybe_emit_clobber_object_begin): New function. (cp_gimplify_expr): Call it for DECL_EXPRs and TARGET_EXPRs with void type non-NULL TARGET_EXPR_INITIAL. * decl.cc (struct named_label_fwd_direct_goto, struct named_label_bck_direct_goto): New types. (struct named_label_use_entry): Add direct_goto member. Formatting fix. (struct named_label_entry): Add direct_goto member. Turn bool members into bool : 1. Add has_bad_decls bitfield. (adjust_backward_gotos): New function. (pop_labels): For flag_auto_var_init > AUTO_INIT_UNINITIALIZED call adjust_backward_gotos if needed. (poplevel_named_label_1): For decl_jump_unsafe also set ent->has_bad_decls, and for decl_instrument_init_bypass_p decls push them into ent->bad_decls vector too. (duplicate_decls): Complain if indeterminate attribute on function parameter isn't present on the first function declaration. (decl_instrument_init_bypass_p): New function. (build_deferred_init_call): Likewise. (maybe_add_deferred_init_calls): Likewise. (adjust_backward_goto): Likewise. (check_previous_goto_1): Add direct_goto and case_label arguments. For decl_instrument_init_bypass_p decls seen if direct_goto || case_label move case label if needed, call maybe_add_deferred_init_calls and adjust GOTO_EXPR operands remembered in direct_goto. Change return type from bool to int, return 0 on error, 1 for success with no need to adjust vacuous inits and 2 for success with need to adjust those. (check_previous_goto): Adjust check_previous_goto_1 call, vec_free direct_goto vector. (check_switch_goto): Add case_label argument, adjust check_previous_goto_1 call. Change return type from bool to int. (check_goto_1): Remove computed argument, add declp argument. Don't reuse previous ent->uses if ent->binding_level != current_binding_level. Push declp into direct_goto vectors if needed. (check_goto): Remove decl argument, add declp argument. Adjust check_goto_1 calls. (finish_case_label): Call check_switch_goto up to twice, first time to detect errors and find out if second call will be needed, and after c_add_case_label second time if needed. In the first case pass NULL_TREE as new argument to it, in the second case r. (start_preparsed_function): Don't emit CLOBBER_OBJECT_BEGIN here for -flifetime-dse=2, instead add "clobber *this" attribute to current_class_ptr. * parser.cc (cp_parser_asm_label_list): Call check_goto only after the TREE_LIST is created and pass address of its TREE_VALUE to it instead of the label. * semantics.cc (finish_goto_stmt): Call check_goto only after build_stmt has been called and pass it address of its first operand rather than destination. * tree.cc (handle_indeterminate_attribute): New function. (cxx_gnu_attributes): Add entry for indeterminate attribute. gcc/testsuite/ * g++.dg/cpp1y/vla-initlist1.C: Remove dg-skip-if for powerpc. Initialize i to 43 for ctor from initializer_list and expect value 43 instead of 42. * g++.dg/cpp26/attr-indeterminate1.C: New test. * g++.dg/cpp26/attr-indeterminate2.C: New test. * g++.dg/cpp26/attr-indeterminate3.C: New test. * g++.dg/cpp26/attr-indeterminate4.C: New test. * g++.dg/cpp26/erroneous1.C: New test. * g++.dg/cpp26/erroneous2.C: New test. * g++.dg/cpp26/erroneous3.C: New test. * g++.dg/cpp26/erroneous4.C: New test. * g++.dg/opt/store-merging-1.C: Add -ftrivial-auto-var-init=uninitialized to dg-options. * g++.dg/uninit-pred-loop-1_b.C: Expect a warning for C++26. * g++.dg/warn/Wuninitialized-13.C: Expect warning on a different line. * c-c++-common/ubsan/vla-1.c: Add -ftrivial-auto-var-init=uninitialized to dg-options. * c-c++-common/uninit-17.c: For c++26 expect warning on a different line. * g++.dg/warn/Warray-bounds-20.C: Expect warning on a different line. * c-c++-common/analyzer/invalid-shift-1.c: Xfail for c++26 until PR122044 is fixed. * g++.dg/analyzer/exception-value-2.C: Skip for c++26 until PR122044 is fixed. * c-c++-common/goacc-gomp/nesting-1.c: Skip for c++26 until PR121975 is fixed. * c-c++-common/goacc/kernels-decompose-2.c: Likewise. * c-c++-common/goacc/kernels-decompose-pr100400-1-1.c: Likewise. * c-c++-common/goacc/kernels-decompose-pr100400-1-3.c: Likewise. * c-c++-common/goacc/kernels-decompose-pr104061-1-1.c: Likewise. * c-c++-common/goacc/kernels-decompose-pr104061-1-3.c: Likewise. * c-c++-common/goacc/kernels-decompose-pr104061-1-4.c: Likewise. * c-c++-common/goacc/kernels-decompose-pr104132-1.c: Likewise. * c-c++-common/goacc/kernels-decompose-pr104133-1.c: Likewise. * c-c++-common/goacc/kernels-decompose-pr104774-1.c: Likewise. * c-c++-common/goacc/mdc-1.c: Likewise. --- gcc/c-family/c-opts.cc | 10 + gcc/cp/call.cc | 45 +- gcc/cp/constexpr.cc | 10 + gcc/cp/cp-gimplify.cc | 69 +++ gcc/cp/cp-tree.h | 6 +- gcc/cp/decl.cc | 529 ++++++++++++++++-- gcc/cp/parser.cc | 2 +- gcc/cp/semantics.cc | 8 +- gcc/cp/tree.cc | 19 + gcc/doc/invoke.texi | 30 +- gcc/flag-types.h | 3 +- gcc/gimplify.cc | 173 ++++-- gcc/ipa-split.cc | 9 + .../c-c++-common/analyzer/invalid-shift-1.c | 4 +- .../c-c++-common/goacc-gomp/nesting-1.c | 11 +- .../c-c++-common/goacc/kernels-decompose-2.c | 3 + .../goacc/kernels-decompose-pr100400-1-1.c | 1 + .../goacc/kernels-decompose-pr100400-1-3.c | 1 + .../goacc/kernels-decompose-pr104061-1-1.c | 1 + .../goacc/kernels-decompose-pr104061-1-3.c | 1 + .../goacc/kernels-decompose-pr104061-1-4.c | 1 + .../goacc/kernels-decompose-pr104132-1.c | 1 + .../goacc/kernels-decompose-pr104133-1.c | 1 + .../goacc/kernels-decompose-pr104774-1.c | 1 + gcc/testsuite/c-c++-common/goacc/mdc-1.c | 1 + gcc/testsuite/c-c++-common/ubsan/vla-1.c | 2 +- gcc/testsuite/c-c++-common/uninit-17.c | 4 +- .../g++.dg/analyzer/exception-value-2.C | 2 + gcc/testsuite/g++.dg/cpp1y/vla-initlist1.C | 5 +- .../g++.dg/cpp26/attr-indeterminate1.C | 154 +++++ .../g++.dg/cpp26/attr-indeterminate2.C | 39 ++ .../g++.dg/cpp26/attr-indeterminate3.C | 21 + .../g++.dg/cpp26/attr-indeterminate4.C | 36 ++ gcc/testsuite/g++.dg/cpp26/erroneous1.C | 61 ++ gcc/testsuite/g++.dg/cpp26/erroneous2.C | 234 ++++++++ gcc/testsuite/g++.dg/cpp26/erroneous3.C | 158 ++++++ gcc/testsuite/g++.dg/cpp26/erroneous4.C | 37 ++ gcc/testsuite/g++.dg/opt/store-merging-1.C | 2 +- gcc/testsuite/g++.dg/uninit-pred-loop-1_b.C | 2 +- gcc/testsuite/g++.dg/warn/Warray-bounds-20.C | 12 +- gcc/testsuite/g++.dg/warn/Wuninitialized-13.C | 4 +- gcc/tree-ssa-uninit.cc | 25 +- gcc/tree.h | 13 + 43 files changed, 1616 insertions(+), 135 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp26/attr-indeterminate1.C create mode 100644 gcc/testsuite/g++.dg/cpp26/attr-indeterminate2.C create mode 100644 gcc/testsuite/g++.dg/cpp26/attr-indeterminate3.C create mode 100644 gcc/testsuite/g++.dg/cpp26/attr-indeterminate4.C create mode 100644 gcc/testsuite/g++.dg/cpp26/erroneous1.C create mode 100644 gcc/testsuite/g++.dg/cpp26/erroneous2.C create mode 100644 gcc/testsuite/g++.dg/cpp26/erroneous3.C create mode 100644 gcc/testsuite/g++.dg/cpp26/erroneous4.C diff --git a/gcc/c-family/c-opts.cc b/gcc/c-family/c-opts.cc index 0ec30e852158..54e397cda9a4 100644 --- a/gcc/c-family/c-opts.cc +++ b/gcc/c-family/c-opts.cc @@ -913,6 +913,16 @@ c_common_post_options (const char **pfilename) else flag_permitted_flt_eval_methods = PERMITTED_FLT_EVAL_METHODS_C11; + if (cxx_dialect >= cxx26) + SET_OPTION_IF_UNSET (&global_options, &global_options_set, + flag_auto_var_init, AUTO_INIT_CXX26); + + /* The -Wtrivial-auto-var-init warning is useless for C++, where we always + add .DEFERRED_INIT calls when some (vacuous) initializers are bypassed + through jumps from switch condition to case/default label. */ + if (c_dialect_cxx ()) + warn_trivial_auto_var_init = 0; + /* C23 Annex F does not permit certain built-in functions to raise "inexact". */ if (flag_isoc23) diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc index 97c8a48c8400..77dfa7d2982b 100644 --- a/gcc/cp/call.cc +++ b/gcc/cp/call.cc @@ -10488,6 +10488,7 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) unsigned int arg_index = 0; int conv_index = 0; int param_index = 0; + tree parmd = DECL_ARGUMENTS (fn); auto consume_object_arg = [&arg_index, &first_arg, args]() { @@ -10505,6 +10506,8 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) tree object_arg = consume_object_arg (); argarray[argarray_size++] = build_this (object_arg); parm = TREE_CHAIN (parm); + if (parmd) + parmd = DECL_CHAIN (parmd); /* We should never try to call the abstract constructor. */ gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn)); @@ -10513,6 +10516,8 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) argarray[argarray_size++] = (*args)[arg_index]; ++arg_index; parm = TREE_CHAIN (parm); + if (parmd) + parmd = DECL_CHAIN (parmd); } } /* Bypass access control for 'this' parameter. */ @@ -10600,6 +10605,8 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) argarray[argarray_size++] = converted_arg; parm = TREE_CHAIN (parm); + if (parmd) + parmd = DECL_CHAIN (parmd); } auto handle_arg = [fn, flags](tree type, @@ -10623,6 +10630,27 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) return val; }; + auto handle_indeterminate_arg = [](tree parmd, tree val) + { + if (parmd + && lookup_attribute (NULL, "indeterminate", DECL_ATTRIBUTES (parmd))) + { + STRIP_NOPS (val); + if (TREE_CODE (val) == ADDR_EXPR + && TREE_CODE (TREE_OPERAND (val, 0)) == TARGET_EXPR) + { + val = TARGET_EXPR_SLOT (TREE_OPERAND (val, 0)); + if (auto_var_p (val) && DECL_ARTIFICIAL (val)) + { + tree id = get_identifier ("indeterminate"); + DECL_ATTRIBUTES (val) + = tree_cons (build_tree_list (NULL_TREE, id), NULL_TREE, + DECL_ATTRIBUTES (val)); + } + } + } + }; + if (DECL_XOBJ_MEMBER_FUNCTION_P (fn)) { gcc_assert (cand->num_convs > 0); @@ -10636,8 +10664,13 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) if (val == error_mark_node) return error_mark_node; else - argarray[argarray_size++] = val; + { + argarray[argarray_size++] = val; + handle_indeterminate_arg (parmd, val); + } parm = TREE_CHAIN (parm); + if (parmd) + parmd = DECL_CHAIN (parmd); } gcc_assert (first_arg == NULL_TREE); @@ -10683,7 +10716,12 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) if (val == error_mark_node) return error_mark_node; else - argarray[argarray_size++] = val; + { + argarray[argarray_size++] = val; + handle_indeterminate_arg (parmd, val); + } + if (parmd) + parmd = DECL_CHAIN (parmd); } /* Default arguments */ @@ -10699,6 +10737,9 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) if (val == error_mark_node) return error_mark_node; argarray[argarray_size++] = val; + handle_indeterminate_arg (parmd, val); + if (parmd) + parmd = DECL_CHAIN (parmd); } /* Ellipsis */ diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc index 558ef6ed4717..016e3db927c9 100644 --- a/gcc/cp/constexpr.cc +++ b/gcc/cp/constexpr.cc @@ -3009,6 +3009,9 @@ cxx_eval_internal_function (const constexpr_ctx *ctx, tree t, vc_prvalue, non_constant_p, overflow_p, jump_target); + case IFN_DEFERRED_INIT: + return build_clobber (TREE_TYPE (t), CLOBBER_OBJECT_BEGIN); + case IFN_VEC_CONVERT: { tree arg = cxx_eval_constant_expression (ctx, CALL_EXPR_ARG (t, 0), @@ -7498,6 +7501,13 @@ cxx_eval_store_expression (const constexpr_ctx *ctx, tree t, bool preeval = SCALAR_TYPE_P (type) || TREE_CODE (t) == MODIFY_EXPR; if (preeval && !TREE_CLOBBER_P (init)) { + /* Ignore var = .DEFERRED_INIT (); for now, until PR121965 is fixed. */ + if (flag_auto_var_init > AUTO_INIT_UNINITIALIZED + && TREE_CODE (init) == CALL_EXPR + && CALL_EXPR_FN (init) == NULL_TREE + && CALL_EXPR_IFN (init) == IFN_DEFERRED_INIT) + return void_node; + /* Evaluate the value to be stored without knowing what object it will be stored in, so that any side-effects happen first. */ if (!SCALAR_TYPE_P (type)) diff --git a/gcc/cp/cp-gimplify.cc b/gcc/cp/cp-gimplify.cc index 2111dcadae7f..1662336e165c 100644 --- a/gcc/cp/cp-gimplify.cc +++ b/gcc/cp/cp-gimplify.cc @@ -200,6 +200,33 @@ genericize_if_stmt (tree *stmt_p) } } + if (IF_STMT_VACUOUS_INIT_P (stmt)) + { + gcc_checking_assert (integer_zerop (cond)); + gcc_checking_assert (!else_ || !TREE_SIDE_EFFECTS (else_)); + tree lab = create_artificial_label (UNKNOWN_LOCATION); + VACUOUS_INIT_LABEL_P (lab) = 1; + tree goto_expr = build_stmt (UNKNOWN_LOCATION, GOTO_EXPR, lab); + tree label_expr = build_stmt (UNKNOWN_LOCATION, LABEL_EXPR, lab); + if (TREE_CODE (then_) == STATEMENT_LIST) + { + tree_stmt_iterator i = tsi_start (then_); + tsi_link_before (&i, goto_expr, TSI_CONTINUE_LINKING); + i = tsi_last (then_); + tsi_link_after (&i, label_expr, TSI_CONTINUE_LINKING); + stmt = then_; + } + else + { + stmt = NULL_TREE; + append_to_statement_list (goto_expr, &stmt); + append_to_statement_list (then_, &stmt); + append_to_statement_list (label_expr, &stmt); + } + *stmt_p = stmt; + return; + } + if (!then_) then_ = build_empty_stmt (locus); if (!else_) @@ -603,6 +630,38 @@ cp_gimplify_arg (tree *arg_p, gimple_seq *pre_p, location_t call_location, } +/* Emit a decl = {CLOBBER(bob)}; stmt before DECL_EXPR or first + TARGET_EXPR gimplification for -flifetime-dse=2. */ + +static void +maybe_emit_clobber_object_begin (tree decl, gimple_seq *pre_p) +{ + if (VAR_P (decl) + && auto_var_p (decl) + && TREE_TYPE (decl) != error_mark_node + && DECL_NONTRIVIALLY_INITIALIZED_P (decl) + /* Don't do it if it is fully initialized. */ + && DECL_INITIAL (decl) == NULL_TREE + && !DECL_HAS_VALUE_EXPR_P (decl) + && !OPAQUE_TYPE_P (TREE_TYPE (decl)) + /* Nor going to have decl = .DEFERRED_INIT (...); added. */ + && (flag_auto_var_init == AUTO_INIT_UNINITIALIZED + || lookup_attribute ("uninitialized", DECL_ATTRIBUTES (decl)) + || lookup_attribute ("indeterminate", DECL_ATTRIBUTES (decl)))) + { + tree eltype = strip_array_types (TREE_TYPE (decl)); + if (RECORD_OR_UNION_TYPE_P (eltype) + && !is_empty_class (eltype)) + { + tree clobber + = build_clobber (TREE_TYPE (decl), CLOBBER_OBJECT_BEGIN); + gimple *g = gimple_build_assign (decl, clobber); + gimple_set_location (g, DECL_SOURCE_LOCATION (decl)); + gimple_seq_add_stmt_without_update (pre_p, g); + } + } +} + /* Do C++-specific gimplification. Args are as for gimplify_expr. */ int @@ -918,6 +977,10 @@ cp_gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) on the rhs of an assignment, as in constexpr-aggr1.C. */ gcc_checking_assert (!TARGET_EXPR_ELIDING_P (*expr_p) || !TREE_ADDRESSABLE (TREE_TYPE (*expr_p))); + if (flag_lifetime_dse > 1 + && TARGET_EXPR_INITIAL (*expr_p) + && VOID_TYPE_P (TREE_TYPE (TARGET_EXPR_INITIAL (*expr_p)))) + maybe_emit_clobber_object_begin (TARGET_EXPR_SLOT (*expr_p), pre_p); ret = GS_UNHANDLED; break; @@ -929,6 +992,12 @@ cp_gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) ret = GS_OK; break; + case DECL_EXPR: + if (flag_lifetime_dse > 1) + maybe_emit_clobber_object_begin (DECL_EXPR_DECL (*expr_p), pre_p); + ret = GS_UNHANDLED; + break; + case RETURN_EXPR: if (TREE_OPERAND (*expr_p, 0) && (TREE_CODE (TREE_OPERAND (*expr_p, 0)) == INIT_EXPR diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 643fa6f5bcda..5f8dfad7bf42 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -510,6 +510,7 @@ extern GTY(()) tree cp_global_trees[CPTI_MAX]; PACK_EXPANSION_FORCE_EXTRA_ARGS_P (in *_PACK_EXPANSION) LAMBDA_EXPR_STATIC_P (in LAMBDA_EXPR) TARGET_EXPR_ELIDING_P (in TARGET_EXPR) + IF_STMT_VACUOUS_INIT_P (IF_STMT) contract_semantic (in ASSERTION_, PRECONDITION_, POSTCONDITION_STMT) TYPENAME_IS_UNION_P (in TYPENAME_TYPE) 4: IDENTIFIER_MARKED (IDENTIFIER_NODEs) @@ -5687,6 +5688,9 @@ decl_template_parm_check (const_tree t, const char *f, int l, const char *fn) #define IF_SCOPE(NODE) TREE_OPERAND (IF_STMT_CHECK (NODE), 3) #define IF_STMT_CONSTEXPR_P(NODE) TREE_LANG_FLAG_0 (IF_STMT_CHECK (NODE)) #define IF_STMT_CONSTEVAL_P(NODE) TREE_LANG_FLAG_2 (IF_STMT_CHECK (NODE)) +/* True on artificial if (0) around .DEFERRED_INIT calls added for + !!flag_auto_var_init. */ +#define IF_STMT_VACUOUS_INIT_P(NODE) TREE_LANG_FLAG_3 (IF_STMT_CHECK (NODE)) /* Like PACK_EXPANSION_EXTRA_ARGS, for constexpr if. IF_SCOPE is used while building an IF_STMT; IF_STMT_EXTRA_ARGS is used after it is complete. */ @@ -7280,7 +7284,7 @@ extern tree duplicate_decls (tree, tree, extern void mark_label_addressed (tree); extern tree declare_local_label (tree); extern tree define_label (location_t, tree); -extern void check_goto (tree); +extern void check_goto (tree *); extern bool check_omp_return (void); extern tree make_typename_type (tree, tree, enum tag_types, tsubst_flags_t); extern tree build_typename_type (tree, tree, tree, tag_types); diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc index 7927b4375ec8..885be3b2cecf 100644 --- a/gcc/cp/decl.cc +++ b/gcc/cp/decl.cc @@ -76,6 +76,7 @@ enum bad_spec_place { static const char *redeclaration_error_message (tree, tree); static bool decl_jump_unsafe (tree); +static bool decl_instrument_init_bypass_p (tree); static void require_complete_types_for_parms (tree); static tree grok_reference_init (tree, tree, tree, int); static tree grokvardecl (tree, tree, tree, const cp_decl_specifier_seq *, @@ -173,6 +174,25 @@ vec *static_decls; /* vector of keyed classes. */ vec *keyed_classes; +/* Used in the direct_goto vector of named_label_use_entry for + addresses of the LABEL_DECLs within GOTO_EXPR or asm goto + for forward jumps. */ + +struct GTY(()) named_label_fwd_direct_goto { + tree *GTY((skip)) direct_goto; +}; + +/* Used in the direct_goto vector of named_label_use_entry for + addresses of the LABEL_DECLs within GOTO_EXPR or asm goto + for backward jumps. */ + +struct GTY(()) named_label_bck_direct_goto { + tree *GTY((skip)) direct_goto; + /* Number of the decl_instrument_init_bypass_p decls in bad_decls vector + at the time this backward goto has been seen. */ + unsigned n_bad_decls; +}; + /* Used only for jumps to as-yet undefined labels, since jumps to defined labels can have their validity checked immediately. */ @@ -188,7 +208,11 @@ struct GTY((chain_next ("%h.next"))) named_label_use_entry { tree names_in_scope; /* If the use is a possible destination of a computed goto, a vec of decls that aren't destroyed, filled in by poplevel_named_label_1. */ - vec *computed_goto; + vec *computed_goto; + /* If the use is a destination of normal goto, a vec of addresses of + LABEL_DECLs that might need changing for !!flag_auto_var_init + forward jumps across vacuous initializers. */ + vec *direct_goto; /* The location of the goto, for error reporting. */ location_t o_goto_locus; /* True if an OpenMP structured block scope has been closed since @@ -226,20 +250,29 @@ struct GTY((for_user)) named_label_entry { /* A list of uses of the label, before the label is defined. */ named_label_use_entry *uses; - /* True if we've seen &&label. Appalently we can't use TREE_ADDRESSABLE for + /* If the use is a destination of normal goto, a vec of addresses of + LABEL_DECLs that might need changing for !!flag_auto_var_init + backward jumps across vacuous initializers. */ + vec *direct_goto; + + /* True if we've seen &&label. Apparently we can't use TREE_ADDRESSABLE for this, it has a more specific meaning for LABEL_DECL. */ - bool addressed; + bool addressed : 1; /* The following bits are set after the label is defined, and are updated as scopes are popped. They indicate that a jump to the label will illegally enter a scope of the given flavor. */ - bool in_try_scope; - bool in_catch_scope; - bool in_omp_scope; - bool in_transaction_scope; - bool in_constexpr_if; - bool in_consteval_if; - bool in_stmt_expr; + bool in_try_scope : 1; + bool in_catch_scope : 1; + bool in_omp_scope : 1; + bool in_transaction_scope : 1; + bool in_constexpr_if : 1; + bool in_consteval_if : 1; + bool in_stmt_expr : 1; + + /* True if bad_decls chain contains any decl_jump_unsafe decls + (rather than just decl_instrument_init_bypass_p). */ + bool has_bad_decls : 1; }; #define named_labels cp_function_chain->x_named_labels @@ -403,6 +436,69 @@ sort_labels (const void *a, const void *b) return DECL_UID (label1) > DECL_UID (label2) ? -1 : +1; } +static void adjust_backward_goto (named_label_entry *, tree_stmt_iterator); +static named_label_entry *lookup_label_1 (tree, bool); + +/* Helper of pop_labels, called through cp_walk_tree. Adjust + LABEL_EXPRs of named labels, if they are targets of backwards + gotos jumping across vacuous initialization for + !!flag_auto_var_init. */ + +static tree +adjust_backward_gotos (tree *tp, int *walk_subtrees, void *data) +{ + tree t = *tp; + switch (TREE_CODE (t)) + { + case LABEL_EXPR: + /* In rare cases LABEL_EXPR can appear as the only substatement + of some other statement, e.g. if body etc. In that case, we know + there can't be an older if (0) wrapper with artificial initializers + before it. Replace the LABEL_EXPR statement with a STATEMENT_LIST + and insert the LABEL_EXPR into it, later on if (0) will be added + before that. */ + if (DECL_NAME (LABEL_EXPR_LABEL (t))) + { + named_label_entry *ent + = lookup_label_1 (DECL_NAME (LABEL_EXPR_LABEL (t)), false); + if (ent->direct_goto) + { + *tp = alloc_stmt_list (); + append_to_statement_list_force (t, tp); + adjust_backward_goto (ent, tsi_last (*tp)); + } + } + *walk_subtrees = 0; + break; + case STATEMENT_LIST: + { + tree_stmt_iterator i; + *walk_subtrees = 0; + /* In the common case, LABEL_EXPRs appear inside of a STATEMENT_LIST. + In that case pass the stmt iterator to adjust_backward_goto, so + that it can insert if (0) wrapper artificial initializers before + it or reuse the existing ones. */ + for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i)) + if (TREE_CODE (tsi_stmt (i)) != LABEL_EXPR) + cp_walk_tree (tsi_stmt_ptr (i), adjust_backward_gotos, + data, (hash_set *) data); + else if (DECL_NAME (LABEL_EXPR_LABEL (tsi_stmt (i)))) + { + named_label_entry *ent + = lookup_label_1 (DECL_NAME (LABEL_EXPR_LABEL (tsi_stmt (i))), + false); + if (ent->direct_goto) + adjust_backward_goto (ent, i); + } + break; + } + default: + if (TYPE_P (t)) + *walk_subtrees = 0; + } + return NULL_TREE; +} + /* At the end of a function, all labels declared within the function go out of scope. BLOCK is the top-level block for the function. */ @@ -420,8 +516,23 @@ pop_labels (tree block) table implementation changes. */ auto_vec labels (named_labels->elements ()); hash_table::iterator end (named_labels->end ()); - for (hash_table::iterator iter - (named_labels->begin ()); iter != end; ++iter) + + if (flag_auto_var_init > AUTO_INIT_UNINITIALIZED) + { + for (decltype (end) iter (named_labels->begin ()); iter != end; ++iter) + { + named_label_entry *ent = *iter; + if (ent->direct_goto) + { + hash_set pset; + cp_walk_tree (&DECL_SAVED_TREE (current_function_decl), + adjust_backward_gotos, &pset, &pset); + break; + } + } + } + + for (decltype (end) iter (named_labels->begin ()); iter != end; ++iter) { named_label_entry *ent = *iter; @@ -551,6 +662,11 @@ poplevel_named_label_1 (named_label_entry **slot, cp_binding_level *bl) ? DECL_CHAIN (decl) : TREE_CHAIN (decl))) if (decl_jump_unsafe (decl)) + { + vec_safe_push (ent->bad_decls, decl); + ent->has_bad_decls = true; + } + else if (decl_instrument_init_bypass_p (decl)) vec_safe_push (ent->bad_decls, decl); ent->binding_level = obl; @@ -2941,6 +3057,19 @@ duplicate_decls (tree newdecl, tree olddecl, bool hiding, bool was_hidden) { DECL_ATTRIBUTES (newarg) = (*targetm.merge_decl_attributes) (oldarg, newarg); + if (lookup_attribute (NULL, "indeterminate", + DECL_ATTRIBUTES (newarg)) + && !lookup_attribute (NULL, "indeterminate", + DECL_ATTRIBUTES (oldarg))) + { + auto_diagnostic_group d; + error_at (DECL_SOURCE_LOCATION (newarg), + "% attribute not specified " + "for parameter %qD on the first declaration of " + "its function", newarg); + inform (DECL_SOURCE_LOCATION (oldarg), + "earlier declaration"); + } DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg); } @@ -3744,6 +3873,259 @@ decl_jump_unsafe (tree decl) || variably_modified_type_p (type, NULL_TREE))); } +/* Returns true if decl is an automatic variable with vacuous initialization + except when it is [[indeterminate]] or [[gnu::uninitialized]]. + Jumps across such initialization need to be instrumented for + !!flag_auto_var_init. */ + +static bool +decl_instrument_init_bypass_p (tree decl) +{ + tree type = TREE_TYPE (decl); + + return (flag_auto_var_init > AUTO_INIT_UNINITIALIZED + && type != error_mark_node + && VAR_P (decl) + && !TREE_STATIC (decl) + && !DECL_EXTERNAL (decl) + && !(DECL_NONTRIVIALLY_INITIALIZED_P (decl) + || variably_modified_type_p (type, NULL_TREE)) + && !lookup_attribute (NULL, "indeterminate", DECL_ATTRIBUTES (decl)) + && !lookup_attribute ("uninitialized", DECL_ATTRIBUTES (decl)) + && !DECL_HAS_VALUE_EXPR_P (decl)); +} + +/* Build .DEFERRED_INIT call for DECL. */ + +static tree +build_deferred_init_call (tree decl) +{ + tree decl_size_arg = TYPE_SIZE_UNIT (TREE_TYPE (decl)); + tree init_type_arg = build_int_cst (integer_type_node, + (int) flag_auto_var_init); + location_t loc = DECL_SOURCE_LOCATION (decl); + tree decl_name; + + if (DECL_NAME (decl)) + decl_name = build_string_literal (DECL_NAME (decl)); + else + { + char decl_name_anonymous[3 + (HOST_BITS_PER_INT + 2) / 3]; + sprintf (decl_name_anonymous, "D.%u", DECL_UID (decl)); + decl_name = build_string_literal (decl_name_anonymous); + } + + tree call = build_call_expr_internal_loc (loc, IFN_DEFERRED_INIT, + TREE_TYPE (decl), 3, + decl_size_arg, init_type_arg, + decl_name); + tree ret = build2_loc (loc, MODIFY_EXPR, void_type_node, decl, call); + return build_stmt (loc, EXPR_STMT, ret); +} + +/* Emit before ITER (and any labels/case labels before it) code like + if (0) + { + l1: + v4 = .DEFERRED_INIT (sizeof (v4), ?, "v4"); + v3 = .DEFERRED_INIT (sizeof (v3), ?, "v3"); + v2 = .DEFERRED_INIT (sizeof (v2), ?, "v2"); + v1 = .DEFERRED_INIT (sizeof (v1), ?, "v1"); + } + and return l1 label, or if it already exists, assert it has the + .DEFERRED_INIT calls for the right decls in the right order and + amend it, either by adding extra labels in between or further + ,DEFERRED_INIT calls before the first label and extra label before + that. If CASE_LABEL is non-NULL, emit that CASE_LABEL_EXPR instead + of adding a label. DECLS points to an array of NDECLS VAR_DECLs + which should be initialized. */ + +static tree +maybe_add_deferred_init_calls (tree_stmt_iterator iter, tree case_label, + tree *decls, unsigned ndecls) +{ + tree lab = NULL_TREE; + for (; !tsi_end_p (iter); tsi_prev (&iter)) + { + switch (TREE_CODE (tsi_stmt (iter))) + { + case LABEL_EXPR: + case CASE_LABEL_EXPR: + case DEBUG_BEGIN_STMT: + continue; + default: + break; + } + break; + } + if (!tsi_end_p (iter) + && TREE_CODE (tsi_stmt (iter)) == IF_STMT + && IF_STMT_VACUOUS_INIT_P (tsi_stmt (iter))) + { + /* Found IF_STMT added for this or some adjacent + LABEL_EXPR/CASE_LABEL_EXPR by an earlier call to this function. + The decls are ordered so that we can always reuse it. Sometimes + by no modifications at all and just returning the right label + which was added already before, sometimes by adding a label in + between two previously added .DEFERRED_INIT calls and sometimes + by adding extra statements (.DEFERRED_INIT calls and LABEL_EXPR + before that) before the statements in IF_STMT body. */ + tree then_clause = THEN_CLAUSE (tsi_stmt (iter)); + iter = tsi_last (then_clause); + bool add = false; + for (unsigned int i = 0; i < ndecls; ++i) + { + tree decl = decls[i]; + if (!add) + { + /* Skip over labels/case labels after .DEFERRED_INIT for the + DECL we are looking for. */ + while (!tsi_end_p (iter) + && (TREE_CODE (tsi_stmt (iter)) == LABEL_EXPR + || (TREE_CODE (tsi_stmt (iter)) == CASE_LABEL_EXPR + && !case_label))) + tsi_prev (&iter); + if (tsi_end_p (iter)) + { + /* Reached the start, we'll need to prepend further + statements. */ + add = true; + iter = tsi_start (then_clause); + } + else + { + /* Found something, assert it is .DEFERRED_INIT for + DECL. */ + tree t = tsi_stmt (iter); + gcc_checking_assert (TREE_CODE (t) == EXPR_STMT); + t = EXPR_STMT_EXPR (t); + gcc_checking_assert (TREE_CODE (t) == MODIFY_EXPR + && TREE_OPERAND (t, 0) == decl + && (TREE_CODE (TREE_OPERAND (t, 1)) + == CALL_EXPR)); + t = TREE_OPERAND (t, 1); + gcc_checking_assert (CALL_EXPR_FN (t) == NULL_TREE + && (CALL_EXPR_IFN (t) + == IFN_DEFERRED_INIT)); + tsi_prev (&iter); + } + } + if (add) + { + /* If reached the start in this or some earlier iteration, + prepend .DEFERRED_INIT call for DECL. */ + tree t = build_deferred_init_call (decl); + STMT_IS_FULL_EXPR_P (t) = 1; + tsi_link_before (&iter, t, TSI_CONTINUE_LINKING); + } + } + if (!add) + { + /* If .DEFERRED_INIT calls for all the decls were already there, + skip over case labels and if we find a LABEL_EXPR, return + its label. */ + while (!tsi_end_p (iter) + && !case_label + && TREE_CODE (tsi_stmt (iter)) == CASE_LABEL_EXPR) + tsi_prev (&iter); + if (tsi_end_p (iter)) + { + /* Only case labels were found and we are looking for normal + label, we'll need to add it. */ + add = true; + iter = tsi_start (then_clause); + } + else if (!case_label + && TREE_CODE (tsi_stmt (iter)) == LABEL_EXPR) + /* Return existing label. */ + lab = LABEL_EXPR_LABEL (tsi_stmt (iter)); + else + { + /* We'll need to add a LABEL_EXPR or move CASE_LABEL_EXPR. */ + gcc_checking_assert (case_label + || (TREE_CODE (tsi_stmt (iter)) + == EXPR_STMT)); + add = true; + tsi_next (&iter); + gcc_checking_assert (!tsi_end_p (iter)); + } + } + if (add) + { + tree t; + if (case_label) + t = case_label; + else + { + lab = create_artificial_label (UNKNOWN_LOCATION); + t = build_stmt (UNKNOWN_LOCATION, LABEL_EXPR, lab); + } + tsi_link_before (&iter, t, TSI_CONTINUE_LINKING); + } + } + else + { + /* No IF_STMT created by this function found. Create it all + from scratch, so a LABEL_EXPR (or moved CASE_LABEL_EXPR) + followed by .DEFERRED_INIT calls inside of a new if (0). */ + tree new_then = push_stmt_list (); + if (!case_label) + { + lab = create_artificial_label (UNKNOWN_LOCATION); + add_stmt (build_stmt (UNKNOWN_LOCATION, LABEL_EXPR, lab)); + } + else + add_stmt (case_label); + for (unsigned int i = ndecls; i; --i) + add_stmt (build_deferred_init_call (decls[i - 1])); + new_then = pop_stmt_list (new_then); + tree stmt = build4 (IF_STMT, void_type_node, boolean_false_node, + new_then, void_node, NULL_TREE); + IF_STMT_VACUOUS_INIT_P (stmt) = 1; + if (tsi_end_p (iter)) + { + iter = tsi_start (iter.container); + tsi_link_before (&iter, stmt, TSI_SAME_STMT); + } + else + tsi_link_after (&iter, stmt, TSI_CONTINUE_LINKING); + } + return lab; +} + +/* Adjust backward gotos to named label ENT if they jump over vacuous + initializers if !!flag_auto_var_init. ITER is the location of + LABEL_EXPR for that named label. */ + +static void +adjust_backward_goto (named_label_entry *ent, tree_stmt_iterator iter) +{ + auto_vec decls; + unsigned int i, max_cnt = ent->direct_goto->last ().n_bad_decls; + tree decl; + FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, i, decl) + if (!decl_jump_unsafe (decl)) + { + gcc_checking_assert (decl_instrument_init_bypass_p (decl)); + decls.safe_push (decl); + if (decls.length () == max_cnt) + break; + } + named_label_bck_direct_goto *dgoto; + unsigned last = 0; + tree lab = NULL_TREE; + FOR_EACH_VEC_SAFE_ELT_REVERSE (ent->direct_goto, i, dgoto) + { + if (dgoto->n_bad_decls != last) + { + last = dgoto->n_bad_decls; + lab = maybe_add_deferred_init_calls (iter, NULL_TREE, + decls.address (), last); + } + *dgoto->direct_goto = lab; + } +} + /* A subroutine of check_previous_goto_1 and check_goto to identify a branch to the user. */ @@ -3771,13 +4153,19 @@ identify_goto (tree decl, location_t loc, const location_t *locus, is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for the jump context; NAMES are the names in scope in LEVEL at the jump context; LOCUS is the source position of the jump or 0. COMPUTED - is a vec of decls if the jump is a computed goto. Returns - true if all is well. */ + is a vec of decls if the jump is a computed goto. DIRECT_GOTO is a + vec of pointers to LABEL_DECLs that might need adjusting if vacuous + initializations are crossed for !!flag_auto_var_init. CASE_LABEL is + CASE_LABEL_EXPR to be moved if needed for the check_switch_goto case. + Returns non-zero if all is well, 2 if any vacuous initializers were + crossed. */ -static bool -check_previous_goto_1 (tree decl, cp_binding_level* level, tree names, +static int +check_previous_goto_1 (tree decl, cp_binding_level *level, tree names, bool exited_omp, const location_t *locus, - vec *computed) + vec *computed, + vec *direct_goto, + tree case_label) { auto_diagnostic_group d; cp_binding_level *b; @@ -3785,6 +4173,8 @@ check_previous_goto_1 (tree decl, cp_binding_level* level, tree names, int identified = 0; bool saw_eh = false, saw_omp = false, saw_tm = false, saw_cxif = false; bool saw_ceif = false, saw_se = false; + auto_vec vacuous_decls; + bool vacuous_inits = false; if (exited_omp) { @@ -3807,7 +4197,15 @@ check_previous_goto_1 (tree decl, cp_binding_level* level, tree names, { bool problem = decl_jump_unsafe (new_decls); if (! problem) - continue; + { + if (decl_instrument_init_bypass_p (new_decls)) + { + if (direct_goto || case_label) + vacuous_decls.safe_push (new_decls); + vacuous_inits = true; + } + continue; + } if (!identified) { @@ -3906,7 +4304,30 @@ check_previous_goto_1 (tree decl, cp_binding_level* level, tree names, } } - return !identified; + if (!vacuous_decls.is_empty () && !seen_error ()) + { + tree_stmt_iterator iter = tsi_last (cur_stmt_list); + if (case_label) + { + gcc_checking_assert (tsi_stmt (iter) == case_label); + tsi_delink (&iter); + iter = tsi_last (cur_stmt_list); + } + tree lab = maybe_add_deferred_init_calls (iter, case_label, + vacuous_decls.address (), + vacuous_decls.length ()); + if (lab) + { + unsigned int i; + named_label_fwd_direct_goto *dgoto; + FOR_EACH_VEC_SAFE_ELT (direct_goto, i, dgoto) + *dgoto->direct_goto = lab; + } + } + + if (identified) + return 0; + return vacuous_inits ? 2 : 1; } static void @@ -3914,24 +4335,27 @@ check_previous_goto (tree decl, struct named_label_use_entry *use) { check_previous_goto_1 (decl, use->binding_level, use->names_in_scope, use->in_omp_scope, - &use->o_goto_locus, use->computed_goto); + &use->o_goto_locus, use->computed_goto, + use->direct_goto, NULL_TREE); + vec_free (use->direct_goto); } -static bool -check_switch_goto (cp_binding_level* level) +static int +check_switch_goto (cp_binding_level *level, tree case_label) { return check_previous_goto_1 (NULL_TREE, level, level->names, - false, NULL, nullptr); + false, NULL, nullptr, nullptr, case_label); } -/* Check that a new jump to a label ENT is OK. COMPUTED is true - if this is a possible target of a computed goto. */ +/* Check that a new jump to a label ENT is OK. DECLP is a pointer + to a LABEL_DECL for direct gotos and NULL for computed gotos. */ void -check_goto_1 (named_label_entry *ent, bool computed) +check_goto_1 (named_label_entry *ent, tree *declp) { auto_diagnostic_group d; tree decl = ent->label_decl; + bool computed = declp == NULL; /* If the label hasn't been defined yet, defer checking. */ if (! DECL_INITIAL (decl)) @@ -3939,8 +4363,14 @@ check_goto_1 (named_label_entry *ent, bool computed) /* Don't bother creating another use if the last goto had the same data, and will therefore create the same set of errors. */ if (ent->uses + && ent->uses->binding_level == current_binding_level && ent->uses->names_in_scope == current_binding_level->names) - return; + { + if (declp && flag_auto_var_init > AUTO_INIT_UNINITIALIZED) + vec_safe_push (ent->uses->direct_goto, + named_label_fwd_direct_goto { declp }); + return; + } named_label_use_entry *new_use = ggc_alloc (); @@ -3949,6 +4379,10 @@ check_goto_1 (named_label_entry *ent, bool computed) new_use->o_goto_locus = input_location; new_use->in_omp_scope = false; new_use->computed_goto = computed ? make_tree_vector () : nullptr; + new_use->direct_goto = nullptr; + if (declp && flag_auto_var_init > AUTO_INIT_UNINITIALIZED) + vec_safe_push (new_use->direct_goto, + named_label_fwd_direct_goto { declp }); new_use->next = ent->uses; ent->uses = new_use; @@ -3959,11 +4393,12 @@ check_goto_1 (named_label_entry *ent, bool computed) int identified = 0; tree bad; unsigned ix; + unsigned n_bad_decls = 0; if (ent->in_try_scope || ent->in_catch_scope || ent->in_transaction_scope || ent->in_constexpr_if || ent->in_consteval_if || ent->in_omp_scope || ent->in_stmt_expr - || !vec_safe_is_empty (ent->bad_decls)) + || ent->has_bad_decls) { enum diagnostics::kind diag_kind = diagnostics::kind::permerror; if (ent->in_try_scope || ent->in_catch_scope || ent->in_constexpr_if @@ -3978,8 +4413,14 @@ check_goto_1 (named_label_entry *ent, bool computed) FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad) { bool problem = decl_jump_unsafe (bad); + if (!problem) + { + gcc_checking_assert (decl_instrument_init_bypass_p (bad)); + n_bad_decls++; + continue; + } - if (problem && DECL_ARTIFICIAL (bad)) + if (DECL_ARTIFICIAL (bad)) { /* Can't skip init of __exception_info. */ if (identified == 1) @@ -4086,16 +4527,21 @@ check_goto_1 (named_label_entry *ent, bool computed) break; } } + + if (n_bad_decls && declp) + vec_safe_push (ent->direct_goto, + named_label_bck_direct_goto { declp, n_bad_decls }); } -/* Check that a new jump to a label DECL is OK. Called by +/* Check that a new jump to a label *DECLP is OK. Called by finish_goto_stmt. */ void -check_goto (tree decl) +check_goto (tree *declp) { if (!named_labels) return; + tree decl = *declp; if (TREE_CODE (decl) != LABEL_DECL) { /* We don't know where a computed goto is jumping, @@ -4106,7 +4552,7 @@ check_goto (tree decl) { auto ent = *iter; if (ent->addressed) - check_goto_1 (ent, true); + check_goto_1 (ent, NULL); } } else @@ -4115,7 +4561,7 @@ check_goto (tree decl) named_label_entry **slot = named_labels->find_slot_with_hash (DECL_NAME (decl), hash, NO_INSERT); named_label_entry *ent = *slot; - check_goto_1 (ent, false); + check_goto_1 (ent, declp); } } @@ -4370,7 +4816,8 @@ finish_case_label (location_t loc, tree low_value, tree high_value) if (cond && TREE_CODE (cond) == TREE_LIST) cond = TREE_VALUE (cond); - if (!check_switch_goto (switch_stack->level)) + int chk_switch_goto = check_switch_goto (switch_stack->level, NULL_TREE); + if (!chk_switch_goto) return error_mark_node; type = SWITCH_STMT_TYPE (switch_stack->switch_stmt); @@ -4382,6 +4829,9 @@ finish_case_label (location_t loc, tree low_value, tree high_value) r = c_add_case_label (loc, switch_stack->cases, cond, low_value, high_value); + if (r != error_mark_node && chk_switch_goto == 2) + check_switch_goto (switch_stack->level, r); + /* After labels, make any new cleanups in the function go into their own new (temporary) binding contour. */ for (p = current_binding_level; @@ -19327,16 +19777,19 @@ start_preparsed_function (tree decl1, tree attrs, int flags) start_function_contracts (decl1); if (!processing_template_decl - && (flag_lifetime_dse > 1) + && flag_lifetime_dse > 1 && DECL_CONSTRUCTOR_P (decl1) - && !DECL_CLONED_FUNCTION_P (decl1) /* Clobbering an empty base is harmful if it overlays real data. */ && !is_empty_class (current_class_type) /* We can't clobber safely for an implicitly-defined default constructor because part of the initialization might happen before we enter the constructor, via AGGR_INIT_ZERO_FIRST (c++/68006). */ - && !implicit_default_ctor_p (decl1)) - finish_expr_stmt (build_clobber_this (CLOBBER_OBJECT_BEGIN)); + && !implicit_default_ctor_p (decl1) + && !lookup_attribute ("clobber *this", + DECL_ATTRIBUTES (current_class_ptr))) + DECL_ATTRIBUTES (current_class_ptr) + = tree_cons (get_identifier ("clobber *this"), NULL_TREE, + DECL_ATTRIBUTES (current_class_ptr)); if (!processing_template_decl && DECL_CONSTRUCTOR_P (decl1) diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index 04031486bb3b..362cddbaf692 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -31186,10 +31186,10 @@ cp_parser_asm_label_list (cp_parser* parser) if (TREE_CODE (label) == LABEL_DECL) { TREE_USED (label) = 1; - check_goto (label); name = build_string (IDENTIFIER_LENGTH (identifier), IDENTIFIER_POINTER (identifier)); labels = tree_cons (name, label, labels); + check_goto (&TREE_VALUE (labels)); } } /* If the next token is not a `,', then the list is diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc index 1937ace70b36..8d0210ef3b63 100644 --- a/gcc/cp/semantics.cc +++ b/gcc/cp/semantics.cc @@ -919,10 +919,12 @@ finish_goto_stmt (tree destination) } } - check_goto (destination); - add_stmt (build_predict_expr (PRED_GOTO, NOT_TAKEN)); - return add_stmt (build_stmt (input_location, GOTO_EXPR, destination)); + + tree stmt = build_stmt (input_location, GOTO_EXPR, destination); + check_goto (&TREE_OPERAND (stmt, 0)); + + return add_stmt (stmt); } /* Returns true if T corresponds to an assignment operator expression. */ diff --git a/gcc/cp/tree.cc b/gcc/cp/tree.cc index 03b58ff60059..c6ce7e988cee 100644 --- a/gcc/cp/tree.cc +++ b/gcc/cp/tree.cc @@ -5591,6 +5591,23 @@ handle_maybe_unused_attribute (tree *node, tree name, tree args, int flags, return ret; } +/* The C++26 [[indeterminate]] attribute. */ + +static tree +handle_indeterminate_attribute (tree *node, tree name, tree, int, + bool *no_add_attrs) +{ + if (TREE_CODE (*node) != PARM_DECL + && (!VAR_P (*node) || is_global_var (*node))) + { + pedwarn (input_location, OPT_Wattributes, + "%qE on declaration other than parameter or automatic variable", + name); + *no_add_attrs = true; + } + return NULL_TREE; +} + /* Table of valid C++ attributes. */ static const attribute_spec cxx_gnu_attributes[] = { @@ -5630,6 +5647,8 @@ static const attribute_spec std_attributes[] = handle_noreturn_attribute, attr_noreturn_exclusions }, { "carries_dependency", 0, 0, true, false, false, false, handle_carries_dependency_attribute, NULL }, + { "indeterminate", 0, 0, true, false, false, false, + handle_indeterminate_attribute, NULL }, { "pre", 0, -1, false, false, false, false, handle_contract_attribute, NULL }, { "post", 0, -1, false, false, false, false, diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 572a1ce6a243..f93fe43733dc 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -14751,27 +14751,25 @@ and @option{-fauto-profile}. @opindex ftrivial-auto-var-init @item -ftrivial-auto-var-init=@var{choice} -Initialize automatic variables with either a pattern or with zeroes to increase -the security and predictability of a program by preventing uninitialized memory -disclosure and use. +Initialize automatic variables or temporary objects with either a pattern or with +zeroes to increase the security and predictability of a program by preventing +uninitialized memory disclosure and use. GCC still considers an automatic variable that doesn't have an explicit initializer as uninitialized, @option{-Wuninitialized} and @option{-Wanalyzer-use-of-uninitialized-value} will still report -warning messages on such automatic variables and the compiler will -perform optimization as if the variable were uninitialized. +warning messages on such automatic variables or temporary objects and the +compiler will perform optimization as if the variable were uninitialized. With this option, GCC will also initialize any padding of automatic variables -that have structure or union types to zeroes. -However, the current implementation cannot initialize automatic variables that -are declared between the controlling expression and the first case of a -@code{switch} statement. Using @option{-Wtrivial-auto-var-init} to report all -such cases. +or temporary objects that have structure or union types to zeroes. +However, the current implementation cannot initialize automatic variables +whose initialization is bypassed through @code{switch} or @code{goto} +statement. Using @option{-Wtrivial-auto-var-init} to report all such cases. The three values of @var{choice} are: @itemize @bullet @item @samp{uninitialized} doesn't initialize any automatic variables. -This is C and C++'s default. @item @samp{pattern} Initialize automatic variables with values which will likely @@ -14785,7 +14783,10 @@ The values used for pattern initialization might be changed in the future. @samp{zero} Initialize automatic variables with zeroes. @end itemize -The default is @samp{uninitialized}. +The default is @samp{uninitialized} except for C++26, in which case +if @option{-ftrivial-auto-var-init=} is not specified at all automatic +variables or temporary objects are zero initialized, but zero initialization +of padding bits does not happen. Note that the initializer values, whether @samp{zero} or @samp{pattern}, refer to data representation (in memory or machine registers), rather @@ -14798,7 +14799,7 @@ with the bit patterns @code{0x00} or @code{0xFE}, depending on @var{choice}, whether or not these representations stand for values in that range, and even if they do, the interpretation of the value held by the variable will depend on the bias. A @samp{hardbool} variable that -uses say @code{0X5A} and @code{0xA5} for @code{false} and @code{true}, +uses say @code{0x5A} and @code{0xA5} for @code{false} and @code{true}, respectively, will trap with either @samp{choice} of trivial initializer, i.e., @samp{zero} initialization will not convert to the representation for @code{false}, even if it would for a @code{static} @@ -14809,7 +14810,8 @@ are initialized with @code{false} (zero), even when @samp{pattern} is requested. You can control this behavior for a specific variable by using the variable -attribute @code{uninitialized} (@pxref{Variable Attributes}). +attribute @code{uninitialized} standard attribute (@pxref{Variable Attributes}) +or the C++26 @code{[[indeterminate]]}. @opindex fvect-cost-model @item -fvect-cost-model=@var{model} diff --git a/gcc/flag-types.h b/gcc/flag-types.h index bf681c3e8153..44a90becb27a 100644 --- a/gcc/flag-types.h +++ b/gcc/flag-types.h @@ -288,7 +288,8 @@ enum vect_cost_model { enum auto_init_type { AUTO_INIT_UNINITIALIZED = 0, AUTO_INIT_PATTERN = 1, - AUTO_INIT_ZERO = 2 + AUTO_INIT_ZERO = 2, + AUTO_INIT_CXX26 = 3 }; /* Initialization of padding bits with zeros. */ diff --git a/gcc/gimplify.cc b/gcc/gimplify.cc index 9c5aa0638b73..d8725e4c5e20 100644 --- a/gcc/gimplify.cc +++ b/gcc/gimplify.cc @@ -2103,13 +2103,13 @@ gimple_add_padding_init_for_auto_var (tree decl, bool is_vla, /* Return true if the DECL need to be automaticly initialized by the compiler. */ static bool -is_var_need_auto_init (tree decl) +var_needs_auto_init_p (tree decl) { if (auto_var_p (decl) - && (TREE_CODE (decl) != VAR_DECL - || !DECL_HARD_REGISTER (decl)) - && (flag_auto_var_init > AUTO_INIT_UNINITIALIZED) - && (!lookup_attribute ("uninitialized", DECL_ATTRIBUTES (decl))) + && (TREE_CODE (decl) != VAR_DECL || !DECL_HARD_REGISTER (decl)) + && flag_auto_var_init > AUTO_INIT_UNINITIALIZED + && !lookup_attribute ("uninitialized", DECL_ATTRIBUTES (decl)) + && !lookup_attribute ("indeterminate", DECL_ATTRIBUTES (decl)) && !OPAQUE_TYPE_P (TREE_TYPE (decl)) && !is_empty_type (TREE_TYPE (decl))) return true; @@ -2222,7 +2222,7 @@ gimplify_decl_expr (tree *stmt_p, gimple_seq *seq_p) /* When there is no explicit initializer, if the user requested, We should insert an artifical initializer for this automatic variable. */ - else if (is_var_need_auto_init (decl) + else if (var_needs_auto_init_p (decl) && !decl_had_value_expr_p) { gimple_add_init_for_auto_var (decl, @@ -2316,27 +2316,6 @@ emit_warn_switch_unreachable (gimple *stmt) /* Don't warn for compiler-generated gotos. These occur in Duff's devices, for example. */ return NULL; - else if ((flag_auto_var_init > AUTO_INIT_UNINITIALIZED) - && ((gimple_call_internal_p (stmt, IFN_DEFERRED_INIT)) - || (gimple_call_builtin_p (stmt, BUILT_IN_CLEAR_PADDING) - && (bool) TREE_INT_CST_LOW (gimple_call_arg (stmt, 1))) - || (is_gimple_assign (stmt) - && gimple_assign_single_p (stmt) - && (TREE_CODE (gimple_assign_rhs1 (stmt)) == SSA_NAME) - && gimple_call_internal_p ( - SSA_NAME_DEF_STMT (gimple_assign_rhs1 (stmt)), - IFN_DEFERRED_INIT)))) - /* Don't warn for compiler-generated initializations for - -ftrivial-auto-var-init. - There are 3 cases: - case 1: a call to .DEFERRED_INIT; - case 2: a call to __builtin_clear_padding with the 2nd argument is - present and non-zero; - case 3: a gimple assign store right after the call to .DEFERRED_INIT - that has the LHS of .DEFERRED_INIT as the RHS as following: - _1 = .DEFERRED_INIT (4, 2, &"i1"[0]); - i1 = _1. */ - return NULL; else warning_at (gimple_location (stmt), OPT_Wswitch_unreachable, "statement will never be executed"); @@ -2384,6 +2363,18 @@ warn_switch_unreachable_and_auto_init_r (gimple_stmt_iterator *gsi_p, there will be non-debug stmts too, and we'll catch those. */ break; + case GIMPLE_ASSIGN: + /* See comment below in the GIMPLE_CALL case. */ + if (flag_auto_var_init > AUTO_INIT_UNINITIALIZED + && gimple_assign_single_p (stmt) + && TREE_CODE (gimple_assign_rhs1 (stmt)) == SSA_NAME) + { + gimple *g = SSA_NAME_DEF_STMT (gimple_assign_rhs1 (stmt)); + if (gimple_call_internal_p (g, IFN_DEFERRED_INIT)) + break; + } + goto do_default; + case GIMPLE_LABEL: /* Stop till the first Label. */ return integer_zero_node; @@ -2393,24 +2384,41 @@ warn_switch_unreachable_and_auto_init_r (gimple_stmt_iterator *gsi_p, *handled_ops_p = false; break; } - if (warn_trivial_auto_var_init - && flag_auto_var_init > AUTO_INIT_UNINITIALIZED + /* Don't warn for compiler-generated initializations for + -ftrivial-auto-var-init for -Wswitch-unreachable. Though + do warn for -Wtrivial-auto-var-init. + There are 3 cases: + case 1: a call to .DEFERRED_INIT; + case 2: a call to __builtin_clear_padding with the 2nd argument is + present and non-zero; + case 3: a gimple assign store right after the call to .DEFERRED_INIT + that has the LHS of .DEFERRED_INIT as the RHS as following: + _1 = .DEFERRED_INIT (4, 2, &"i1"[0]); + i1 = _1. + case 3 is handled above in the GIMPLE_ASSIGN case. */ + if (flag_auto_var_init > AUTO_INIT_UNINITIALIZED && gimple_call_internal_p (stmt, IFN_DEFERRED_INIT)) { - /* Get the variable name from the 3rd argument of call. */ - tree var_name = gimple_call_arg (stmt, 2); - var_name = TREE_OPERAND (TREE_OPERAND (var_name, 0), 0); - const char *var_name_str = TREE_STRING_POINTER (var_name); - - warning_at (gimple_location (stmt), OPT_Wtrivial_auto_var_init, - "%qs cannot be initialized with " - "%<-ftrivial-auto-var_init%>", - var_name_str); + if (warn_trivial_auto_var_init) + { + /* Get the variable name from the 3rd argument of call. */ + tree var_name = gimple_call_arg (stmt, 2); + var_name = TREE_OPERAND (TREE_OPERAND (var_name, 0), 0); + const char *var_name_str = TREE_STRING_POINTER (var_name); + + warning_at (gimple_location (stmt), OPT_Wtrivial_auto_var_init, + "%qs cannot be initialized with " + "%<-ftrivial-auto-var_init%>", var_name_str); + } break; } - + if (flag_auto_var_init > AUTO_INIT_UNINITIALIZED + && gimple_call_builtin_p (stmt, BUILT_IN_CLEAR_PADDING) + && (bool) TREE_INT_CST_LOW (gimple_call_arg (stmt, 1))) + break; /* Fall through. */ default: + do_default: /* check the first "real" statement (not a decl/lexical scope/...), issue warning if needed. */ if (warn_switch_unreachable && !unreachable_issued) @@ -2490,26 +2498,39 @@ last_stmt_in_scope (gimple *stmt) if (!stmt) return NULL; + auto last_stmt_in_seq = [] (gimple_seq s) + { + gimple_seq_node n; + for (n = gimple_seq_last (s); + n && (is_gimple_debug (n) + || (flag_auto_var_init > AUTO_INIT_UNINITIALIZED + && gimple_call_internal_p (n, IFN_DEFERRED_INIT))); + n = n->prev) + if (n == s) + return (gimple *) NULL; + return (gimple *) n; + }; + switch (gimple_code (stmt)) { case GIMPLE_BIND: { gbind *bind = as_a (stmt); - stmt = gimple_seq_last_nondebug_stmt (gimple_bind_body (bind)); + stmt = last_stmt_in_seq (gimple_bind_body (bind)); return last_stmt_in_scope (stmt); } case GIMPLE_TRY: { gtry *try_stmt = as_a (stmt); - stmt = gimple_seq_last_nondebug_stmt (gimple_try_eval (try_stmt)); + stmt = last_stmt_in_seq (gimple_try_eval (try_stmt)); gimple *last_eval = last_stmt_in_scope (stmt); if (gimple_stmt_may_fallthru (last_eval) && (last_eval == NULL || !gimple_call_internal_p (last_eval, IFN_FALLTHROUGH)) && gimple_try_kind (try_stmt) == GIMPLE_TRY_FINALLY) { - stmt = gimple_seq_last_nondebug_stmt (gimple_try_cleanup (try_stmt)); + stmt = last_stmt_in_seq (gimple_try_cleanup (try_stmt)); return last_stmt_in_scope (stmt); } else @@ -2662,8 +2683,16 @@ collect_fallthrough_labels (gimple_stmt_iterator *gsi_p, } else if (gimple_call_internal_p (gsi_stmt (*gsi_p), IFN_ASAN_MARK)) ; + else if (flag_auto_var_init > AUTO_INIT_UNINITIALIZED + && gimple_call_internal_p (gsi_stmt (*gsi_p), + IFN_DEFERRED_INIT)) + ; else if (gimple_code (gsi_stmt (*gsi_p)) == GIMPLE_PREDICT) ; + else if (flag_auto_var_init > AUTO_INIT_UNINITIALIZED + && gimple_code (gsi_stmt (*gsi_p)) == GIMPLE_GOTO + && VACUOUS_INIT_LABEL_P (gimple_goto_dest (gsi_stmt (*gsi_p)))) + ; else if (!is_gimple_debug (gsi_stmt (*gsi_p))) prev = gsi_stmt (*gsi_p); gsi_next (gsi_p); @@ -2700,9 +2729,13 @@ should_warn_for_implicit_fallthrough (gimple_stmt_iterator *gsi_p, tree label) { tree l; while (!gsi_end_p (gsi) - && gimple_code (gsi_stmt (gsi)) == GIMPLE_LABEL - && (l = gimple_label_label (as_a (gsi_stmt (gsi)))) - && !case_label_p (&gimplify_ctxp->case_labels, l)) + && ((gimple_code (gsi_stmt (gsi)) == GIMPLE_LABEL + && (l + = gimple_label_label (as_a (gsi_stmt (gsi)))) + && !case_label_p (&gimplify_ctxp->case_labels, l)) + || (flag_auto_var_init > AUTO_INIT_UNINITIALIZED + && gimple_call_internal_p (gsi_stmt (gsi), + IFN_DEFERRED_INIT)))) gsi_next_nondebug (&gsi); if (gsi_end_p (gsi) || gimple_code (gsi_stmt (gsi)) != GIMPLE_LABEL) return false; @@ -2715,7 +2748,10 @@ should_warn_for_implicit_fallthrough (gimple_stmt_iterator *gsi_p, tree label) /* Skip all immediately following labels. */ while (!gsi_end_p (gsi) && (gimple_code (gsi_stmt (gsi)) == GIMPLE_LABEL - || gimple_code (gsi_stmt (gsi)) == GIMPLE_PREDICT)) + || gimple_code (gsi_stmt (gsi)) == GIMPLE_PREDICT + || (flag_auto_var_init > AUTO_INIT_UNINITIALIZED + && gimple_call_internal_p (gsi_stmt (gsi), + IFN_DEFERRED_INIT)))) gsi_next_nondebug (&gsi); /* { ... something; default:; } */ @@ -2892,7 +2928,33 @@ expand_FALLTHROUGH_r (gimple_stmt_iterator *gsi_p, bool *handled_ops_p, gimple_stmt_iterator gsi2 = *gsi_p; stmt = gsi_stmt (gsi2); - if (gimple_code (stmt) == GIMPLE_GOTO && !gimple_has_location (stmt)) + if (flag_auto_var_init > AUTO_INIT_UNINITIALIZED + && gimple_code (stmt) == GIMPLE_GOTO + && VACUOUS_INIT_LABEL_P (gimple_goto_dest (stmt))) + { + /* Handle for C++ artificial -ftrivial-auto-var-init= + sequences. Those look like: + goto lab1; + lab2:; + v1 = .DEFERRED_INIT (...); + v2 = .DEFERRED_INIT (...); + lab3:; + v3 = .DEFERRED_INIT (...); + lab1:; + In this case, a case/default label can be either in between + the GIMPLE_GOTO and the corresponding GIMPLE_LABEL, if jumps + from the switch condition to the case/default label cross + vacuous initialization of some variables, or after the + corresponding GIMPLE_LABEL, if those jumps don't cross + any such initialization but there is an adjacent named label + which crosses such initialization. So, for the purpose of + this function, just ignore the goto but until reaching the + corresponding GIMPLE_LABEL allow also .DEFERRED_INIT + calls. */ + gsi_next (&gsi2); + } + else if (gimple_code (stmt) == GIMPLE_GOTO + && !gimple_has_location (stmt)) { /* Go on until the artificial label. */ tree goto_dest = gimple_goto_dest (stmt); @@ -2927,6 +2989,9 @@ expand_FALLTHROUGH_r (gimple_stmt_iterator *gsi_p, bool *handled_ops_p, } else if (gimple_call_internal_p (stmt, IFN_ASAN_MARK)) ; + else if (flag_auto_var_init > AUTO_INIT_UNINITIALIZED + && gimple_call_internal_p (stmt, IFN_DEFERRED_INIT)) + ; else if (!is_gimple_debug (stmt)) /* Anything else is not expected. */ break; @@ -6754,7 +6819,8 @@ gimplify_init_constructor (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p, && clear_padding_type_may_have_padding_p (type) && ((AGGREGATE_TYPE_P (type) && !cleared && !is_empty_ctor) || !AGGREGATE_TYPE_P (type)) - && is_var_need_auto_init (object)) + && var_needs_auto_init_p (object) + && flag_auto_var_init != AUTO_INIT_CXX26) gimple_add_padding_init_for_auto_var (object, false, pre_p); return ret; @@ -8461,6 +8527,7 @@ gimplify_target_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) if (init) { gimple_seq init_pre_p = NULL; + bool is_vla = false; /* TARGET_EXPR temps aren't part of the enclosing block, so add it to the temps list. Handle also variable length TARGET_EXPRs. */ @@ -8471,6 +8538,7 @@ gimplify_target_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) /* FIXME: this is correct only when the size of the type does not depend on expressions evaluated in init. */ gimplify_vla_decl (temp, &init_pre_p); + is_vla = true; } else { @@ -8482,6 +8550,15 @@ gimplify_target_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) gimple_add_tmp_var (temp); } + if (var_needs_auto_init_p (temp) && VOID_TYPE_P (TREE_TYPE (init))) + { + gimple_add_init_for_auto_var (temp, flag_auto_var_init, &init_pre_p); + if (flag_auto_var_init == AUTO_INIT_PATTERN + && !is_gimple_reg (temp) + && clear_padding_type_may_have_padding_p (TREE_TYPE (temp))) + gimple_add_padding_init_for_auto_var (temp, is_vla, &init_pre_p); + } + /* If TARGET_EXPR_INITIAL is void, then the mere evaluation of the expression is supposed to initialize the slot. */ if (VOID_TYPE_P (TREE_TYPE (init))) diff --git a/gcc/ipa-split.cc b/gcc/ipa-split.cc index 933ca16c9469..48f6a725ae8c 100644 --- a/gcc/ipa-split.cc +++ b/gcc/ipa-split.cc @@ -1400,6 +1400,15 @@ split_function (basic_block return_bb, class split_point *split_point, if (fndecl_built_in_p (node->decl)) set_decl_built_in_function (node->decl, NOT_BUILT_IN, 0); + /* Drop "clobber *this" attribute from first argument of the split + function if any. Code before that might be initializing the + members. */ + if (tree arg = DECL_ARGUMENTS (node->decl)) + if (lookup_attribute ("clobber *this", DECL_ATTRIBUTES (arg))) + DECL_ATTRIBUTES (arg) + = remove_attribute ("clobber *this", + copy_list (DECL_ATTRIBUTES (arg))); + /* If return_bb contains any clobbers that refer to SSA_NAMEs set in the split part, remove them. Also reset debug stmts that refer to SSA_NAMEs set in the split part. */ diff --git a/gcc/testsuite/c-c++-common/analyzer/invalid-shift-1.c b/gcc/testsuite/c-c++-common/analyzer/invalid-shift-1.c index 08e52728748b..1b67c075eb5b 100644 --- a/gcc/testsuite/c-c++-common/analyzer/invalid-shift-1.c +++ b/gcc/testsuite/c-c++-common/analyzer/invalid-shift-1.c @@ -12,10 +12,10 @@ _dl_hwcaps_subdirs_build_bitmask (int subdirs, int active) uint32_t mask; if (subdirs != 32) - mask = (1 << subdirs) - 1; /* { dg-message "shift by count \\('33'\\) >= precision of type \\('\[0-9\]+'\\)" } */ + mask = (1 << subdirs) - 1; /* { dg-message "shift by count \\('33'\\) >= precision of type \\('\[0-9\]+'\\)" "" { xfail c++26 } } */ else mask = -1; - return mask ^ ((1U << inactive) - 1); /* { dg-message "shift by negative count \\('-1'\\)" } */ + return mask ^ ((1U << inactive) - 1); /* { dg-message "shift by negative count \\('-1'\\)" "" { xfail c++26 } } */ } void f1 (int); diff --git a/gcc/testsuite/c-c++-common/goacc-gomp/nesting-1.c b/gcc/testsuite/c-c++-common/goacc-gomp/nesting-1.c index 9ef154ed218b..929dfca646df 100644 --- a/gcc/testsuite/c-c++-common/goacc-gomp/nesting-1.c +++ b/gcc/testsuite/c-c++-common/goacc-gomp/nesting-1.c @@ -1,10 +1,9 @@ -/* { dg-additional-options "--param=openacc-kernels=decompose" } - +/* { dg-additional-options "--param=openacc-kernels=decompose" } */ /* { dg-additional-options "-fopt-info-omp-note" } */ - -/* { dg-additional-options "--param=openacc-privatization=noisy" } - Prune a few: uninteresting, and potentially varying depending on GCC configuration (data types): - { dg-prune-output {note: variable 'D\.[0-9]+' declared in block isn't candidate for adjusting OpenACC privatization level: not addressable} } */ +/* { dg-additional-options "--param=openacc-privatization=noisy" } */ +/* { dg-skip-if "PR121975" { c++26 } { "*" } { "" } } */ +/* Prune a few: uninteresting, and potentially varying depending on GCC configuration (data types): */ +/* { dg-prune-output {note: variable 'D\.[0-9]+' declared in block isn't candidate for adjusting OpenACC privatization level: not addressable} } */ void diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-2.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-2.c index 3ce9490f02f9..5aac40c038a0 100644 --- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-2.c +++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-2.c @@ -1,10 +1,13 @@ /* Test OpenACC 'kernels' construct decomposition. */ +/* { dg-skip-if "PR121975" { c++26 } { "*" } { "" } } */ /* { dg-additional-options "-fopt-info-omp-all" } */ /* { dg-additional-options "--param=openacc-kernels=decompose" } /* { dg-additional-options "-O2" } for 'parloops'. */ +/* { dg-skip-if "PR121975" { c++26 } { "*" } { "" } } */ + /* { dg-additional-options "--param=openacc-privatization=noisy" } Prune a few: uninteresting, and potentially varying depending on GCC configuration (data types): { dg-prune-output {note: variable 'D\.[0-9]+' declared in block isn't candidate for adjusting OpenACC privatization level: not addressable} } */ diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100400-1-1.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100400-1-1.c index 57cb1a8cb87a..97fcaf7f28b3 100644 --- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100400-1-1.c +++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100400-1-1.c @@ -1,3 +1,4 @@ +/* { dg-skip-if "PR121975" { c++26 } { "*" } { "" } } */ /* { dg-additional-options "--param openacc-kernels=decompose" } */ /* { dg-additional-options "-g0" } */ diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100400-1-3.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100400-1-3.c index 9779f1036f60..f7c80692890b 100644 --- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100400-1-3.c +++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100400-1-3.c @@ -1,3 +1,4 @@ +/* { dg-skip-if "PR121975" { c++26 } { "*" } { "" } } */ /* { dg-additional-options "--param openacc-kernels=decompose" } */ /* { dg-additional-options "-fchecking" } diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-1.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-1.c index aa0fca7b6ed9..5bb68c1549cd 100644 --- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-1.c +++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-1.c @@ -1,3 +1,4 @@ +/* { dg-skip-if "PR121975" { c++26 } { "*" } { "" } } */ /* { dg-additional-options "--param openacc-kernels=decompose" } */ /* { dg-additional-options "-g0" } */ diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-3.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-3.c index 70c2ac5b5312..43e1cca6ec7e 100644 --- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-3.c +++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-3.c @@ -1,3 +1,4 @@ +/* { dg-skip-if "PR121975" { c++26 } { "*" } { "" } } */ /* { dg-additional-options "--param openacc-kernels=decompose" } */ /* { dg-additional-options "-fcompare-debug" } -- w/o debug compiled first. diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-4.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-4.c index d1cc1a97c9f0..97d7bed2d572 100644 --- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-4.c +++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-4.c @@ -1,3 +1,4 @@ +/* { dg-skip-if "PR121975" { c++26 } { "*" } { "" } } */ /* { dg-additional-options "--param openacc-kernels=decompose" } */ /* { dg-additional-options "-g -fcompare-debug" } -- w/ debug compiled first. diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104132-1.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104132-1.c index 2a663e0ea19a..9094a5710b4b 100644 --- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104132-1.c +++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104132-1.c @@ -1,3 +1,4 @@ +/* { dg-skip-if "PR121975" { c++26 } { "*" } { "" } } */ /* { dg-additional-options "--param openacc-kernels=decompose" } */ /* { dg-additional-options "-fopt-info-all-omp" } */ diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104133-1.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104133-1.c index 2724e22a5505..aa5dd346220a 100644 --- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104133-1.c +++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104133-1.c @@ -1,3 +1,4 @@ +/* { dg-skip-if "PR121975" { c++26 } { "*" } { "" } } */ /* { dg-additional-options "--param openacc-kernels=decompose" } */ /* { dg-additional-options "-fopt-info-all-omp" } */ diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104774-1.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104774-1.c index 3ef0c897bcda..e6d4c55ae6dc 100644 --- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104774-1.c +++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104774-1.c @@ -1,3 +1,4 @@ +/* { dg-skip-if "PR121975" { c++26 } { "*" } { "" } } */ /* { dg-additional-options "--param openacc-kernels=decompose" } */ /* { dg-additional-options "-fopt-info-all-omp" } */ diff --git a/gcc/testsuite/c-c++-common/goacc/mdc-1.c b/gcc/testsuite/c-c++-common/goacc/mdc-1.c index 923a4ea73a39..8d3e7bfc6cfc 100644 --- a/gcc/testsuite/c-c++-common/goacc/mdc-1.c +++ b/gcc/testsuite/c-c++-common/goacc/mdc-1.c @@ -3,6 +3,7 @@ /* TODO The tree dump scanning has certain expectations. { dg-do compile { target { lp64 || llp64 } } } */ +/* { dg-skip-if "PR121975" { c++26 } { "*" } { "" } } */ /* { dg-additional-options "-fdump-tree-omplower" } */ /* { dg-additional-options -Wuninitialized } */ diff --git a/gcc/testsuite/c-c++-common/ubsan/vla-1.c b/gcc/testsuite/c-c++-common/ubsan/vla-1.c index b29d904dea39..0073514a3fbb 100644 --- a/gcc/testsuite/c-c++-common/ubsan/vla-1.c +++ b/gcc/testsuite/c-c++-common/ubsan/vla-1.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-fsanitize=vla-bound -Wall -Wno-unused-variable -fno-stack-clash-protection" } */ +/* { dg-options "-fsanitize=vla-bound -Wall -Wno-unused-variable -fno-stack-clash-protection -ftrivial-auto-var-init=uninitialized" } */ typedef long int V; int x = -1; diff --git a/gcc/testsuite/c-c++-common/uninit-17.c b/gcc/testsuite/c-c++-common/uninit-17.c index b5495366c5bc..5dd49a9dab54 100644 --- a/gcc/testsuite/c-c++-common/uninit-17.c +++ b/gcc/testsuite/c-c++-common/uninit-17.c @@ -10,10 +10,10 @@ static void bar(int a, int *ptr) do { int b; - if (b < 40) { + if (b < 40) { /* { dg-warning "is used uninitialized" "" { target c++26 } } */ ptr[0] = b; } - b += 1; /* { dg-warning "is used uninitialized" } */ + b += 1; /* { dg-warning "is used uninitialized" "" { target { c || c++23_down } } } */ ptr++; } while (--a != 0); diff --git a/gcc/testsuite/g++.dg/analyzer/exception-value-2.C b/gcc/testsuite/g++.dg/analyzer/exception-value-2.C index ef9dd46b0768..5173f5381e83 100644 --- a/gcc/testsuite/g++.dg/analyzer/exception-value-2.C +++ b/gcc/testsuite/g++.dg/analyzer/exception-value-2.C @@ -1,3 +1,5 @@ +// { dg-skip-if "PR122044" { c++26 } { "*" } { "" } } + #include "../../gcc.dg/analyzer/analyzer-decls.h" struct foo {}; diff --git a/gcc/testsuite/g++.dg/cpp1y/vla-initlist1.C b/gcc/testsuite/g++.dg/cpp1y/vla-initlist1.C index ba485df65fe9..ce35c905452e 100644 --- a/gcc/testsuite/g++.dg/cpp1y/vla-initlist1.C +++ b/gcc/testsuite/g++.dg/cpp1y/vla-initlist1.C @@ -1,5 +1,4 @@ // { dg-do run { target c++11 } } -// { dg-skip-if "power overwrites two slots of array i" { "power*-*-*" } } // { dg-options "-Wno-vla" } #include @@ -7,7 +6,7 @@ struct A { int i; - A(std::initializer_list) { } + A(std::initializer_list) : i{43} { } A(int i): i{i} { } ~A() {} }; @@ -18,7 +17,7 @@ int main(int argc, char **argv) { int i[x] = { 42, 42, 42, 42 }; } { A a[x] = { argc }; - if (a[1].i != 42) + if (a[1].i != 43) __builtin_abort (); } } diff --git a/gcc/testsuite/g++.dg/cpp26/attr-indeterminate1.C b/gcc/testsuite/g++.dg/cpp26/attr-indeterminate1.C new file mode 100644 index 000000000000..58f6dc5865fe --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/attr-indeterminate1.C @@ -0,0 +1,154 @@ +// C++ 26 P2795R5 - Erroneous behaviour for uninitialized reads +// { dg-do compile { target c++11 } } + +int arr[2]; +struct S { int a, b; }; +S arr2[2]; + +void +foo ([[indeterminate]] int n, int n2 [[indeterminate]], int n3 [[indeterminate]] [2]) +{ + [[indeterminate]] int x1, x11, x12, x13; + int x14, x15 [[indeterminate]]; + [[indeterminate ("foobar")]] int x2; // { dg-error "'indeterminate' attribute does not take any arguments" } + // { dg-error "expected primary-expression before 'int'" "" { target *-*-* } .-1 } + [[indeterminate (0)]] int x3; // { dg-error "'indeterminate' attribute does not take any arguments" } + // { dg-error "expected primary-expression before 'int'" "" { target *-*-* } .-1 } + [[indeterminate ("foo", "bar", "baz")]] int x4;// { dg-error "'indeterminate' attribute does not take any arguments" } + // { dg-error "expected primary-expression before 'int'" "" { target *-*-* } .-1 } + [[indeterminate (0, 1, 2)]] int x5; // { dg-error "'indeterminate' attribute does not take any arguments" } + // { dg-error "expected primary-expression before 'int'" "" { target *-*-* } .-1 } + + auto a = [] [[indeterminate]] () {}; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } + auto b = [] constexpr [[indeterminate]] {}; // { dg-warning "'indeterminate' attribute does not apply to types" } + // { dg-error "parameter declaration before lambda declaration specifiers only optional with" "" { target c++20_down } .-1 } + // { dg-error "'constexpr' lambda only available with" "" { target c++14_down } .-2 } + auto c = [] noexcept [[indeterminate]] {}; // { dg-warning "'indeterminate' attribute does not apply to types" } + // { dg-error "parameter declaration before lambda exception specification only optional with" "" { target c++20_down } .-1 } + auto d = [] () [[indeterminate]] {}; // { dg-warning "'indeterminate' attribute does not apply to types" } + auto e = new int [n] [[indeterminate]]; // { dg-warning "attributes ignored on outermost array type in new expression" } + auto e2 = new int [n] [[indeterminate]] [42]; // { dg-warning "attributes ignored on outermost array type in new expression" } + auto f = new int [n][42] [[indeterminate]]; // { dg-warning "'indeterminate' attribute does not apply to types" } + [[indeterminate]]; // { dg-warning "attributes at the beginning of statement are ignored" } + [[indeterminate]] {} // { dg-warning "attributes at the beginning of statement are ignored" } + [[indeterminate]] if (true) {} // { dg-warning "attributes at the beginning of statement are ignored" } + [[indeterminate]] while (false) {} // { dg-warning "attributes at the beginning of statement are ignored" } + [[indeterminate]] goto lab; // { dg-warning "attributes at the beginning of statement are ignored" } + [[indeterminate]] lab:; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } + [[indeterminate]] try {} catch (int) {} // { dg-warning "attributes at the beginning of statement are ignored" } + if ([[indeterminate]] int x = 0) {} + switch (n) + { + [[indeterminate]] case 1: // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } + [[indeterminate]] break; // { dg-warning "attributes at the beginning of statement are ignored" } + [[indeterminate]] default: // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } + break; + } + for ([[indeterminate]] auto a : arr) {} + for ([[indeterminate]] auto [a, b] : arr2) {} // { dg-error "structured bindings only available with" "" { target c++14_down } } + [[indeterminate]] asm (""); // { dg-warning "attributes ignored on 'asm' declaration" } + try {} catch ([[indeterminate]] int x) {} + try {} catch ([[indeterminate]] int) {} + try {} catch (int [[indeterminate]] x) {} // { dg-warning "attribute ignored" } + try {} catch (int [[indeterminate]]) {} // { dg-warning "attribute ignored" } + try {} catch (int x [[indeterminate]]) {} +} + +[[indeterminate]] int bar (); // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } +using foobar [[indeterminate]] = int; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } +[[indeterminate]] int a; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } +[[indeterminate]] auto [b, c] = arr; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } + // { dg-error "structured bindings only available with" "" { target c++14_down } .-1 } +[[indeterminate]]; // { dg-warning "attribute ignored" } +inline [[indeterminate]] void baz () {} // { dg-warning "attribute ignored" } + // { dg-error "standard attributes in middle of decl-specifiers" "" { target *-*-* } .-1 } +constexpr [[indeterminate]] int qux () { return 0; } // { dg-warning "attribute ignored" } + // { dg-error "standard attributes in middle of decl-specifiers" "" { target *-*-* } .-1 } +int [[indeterminate]] d; // { dg-warning "attribute ignored" } +int const [[indeterminate]] e = 1; // { dg-warning "attribute ignored" } +struct A {} [[indeterminate]]; // { dg-warning "attribute ignored in declaration of 'struct A'" } +struct A [[indeterminate]]; // { dg-warning "attribute ignored" } +struct A [[indeterminate]] a1; // { dg-warning "attribute ignored" } +A [[indeterminate]] a2; // { dg-warning "attribute ignored" } +enum B { B0 } [[indeterminate]]; // { dg-warning "attribute ignored in declaration of 'enum B'" } +enum B [[indeterminate]]; // { dg-warning "attribute ignored" } +enum B [[indeterminate]] b1; // { dg-warning "attribute ignored" } +B [[indeterminate]] b2; // { dg-warning "attribute ignored" } +struct [[indeterminate]] C {}; // { dg-warning "'indeterminate' attribute does not apply to types" } +int f [[indeterminate]]; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } +int g[2] [[indeterminate]]; // { dg-warning "'indeterminate' attribute does not apply to types" } +int g2 [[indeterminate]] [2]; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } +int corge () [[indeterminate]]; // { dg-warning "'indeterminate' attribute does not apply to types" } +int *[[indeterminate]] h; // { dg-warning "'indeterminate' attribute does not apply to types" } +int & [[indeterminate]] i = f; // { dg-warning "'indeterminate' attribute does not apply to types" } +int && [[indeterminate]] j = 0; // { dg-warning "'indeterminate' attribute does not apply to types" } +int S::* [[indeterminate]] k; // { dg-warning "'indeterminate' attribute does not apply to types" } +auto l = sizeof (int [2] [[indeterminate]]); // { dg-warning "'indeterminate' attribute does not apply to types" } +int freddy ([[indeterminate]] int a, + [[indeterminate]] int, + [[indeterminate]] int c = 0, + [[indeterminate]] int = 0); +void +corge ([[indeterminate]] int a, + [[indeterminate]] int, + [[indeterminate]] int c = 0, + [[indeterminate]] int = 0) +{ +} +[[indeterminate]] void +garply () // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } +{ +} +int grault (int [[indeterminate]] a, // { dg-warning "attribute ignored" } + int [[indeterminate]], // { dg-warning "attribute ignored" } + int [[indeterminate]] c = 0, // { dg-warning "attribute ignored" } + int [[indeterminate]] = 0); // { dg-warning "attribute ignored" } +void +waldo (int [[indeterminate]] a, // { dg-warning "attribute ignored" } + int [[indeterminate]], // { dg-warning "attribute ignored" } + int [[indeterminate]] c = 0, // { dg-warning "attribute ignored" } + int [[indeterminate]] = 0) // { dg-warning "attribute ignored" } +{ +} +int plugh (int a [[indeterminate]], + int b [[indeterminate]] = 0); +void +thud (int a [[indeterminate]], + int b [[indeterminate]] = 0) +{ +} +enum [[indeterminate]] D { D0 }; // { dg-warning "'indeterminate' attribute does not apply to types" } +enum class [[indeterminate]] E { E0 }; // { dg-warning "'indeterminate' attribute does not apply to types" } +enum F {}; +enum [[indeterminate]] F; // { dg-warning "'indeterminate' attribute does not apply to types" } +enum G { + G0 [[indeterminate]], // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } + G1 [[indeterminate]] = 2 // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } +}; +namespace [[indeterminate]] H { using H0 = int; }// { dg-warning "'indeterminate' attribute directive ignored" } +namespace [[indeterminate]] {} // { dg-warning "'indeterminate' attribute directive ignored" } +[[indeterminate]] using namespace H; // { dg-warning "'indeterminate' attribute directive ignored" } +struct [[indeterminate]] I // { dg-warning "'indeterminate' attribute does not apply to types" } +{ + [[indeterminate]]; // { dg-error "declaration does not declare anything" } + [[indeterminate]] int i; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } + [[indeterminate]] int foo (); // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } + [[indeterminate]] int bar () { return 1; } // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } + [[indeterminate]] int : 0; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } + [[indeterminate]] int i2 : 5; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } + [[indeterminate]] static int i3; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } + static int i4; +}; +[[indeterminate]] int I::i4 = 0; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } +struct J : [[indeterminate]] C {}; // { dg-warning "attributes on base specifiers are ignored" } +#if __cpp_concepts >= 201907L +template +concept K [[indeterminate]] = requires { true; };// { dg-error "'indeterminate' on declaration other than parameter or automatic variable" "" { target c++20 } } +#endif +typedef int L [[indeterminate]]; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } +template +struct M {}; +template <> +struct [[indeterminate]] M { int m; }; // { dg-warning "'indeterminate' attribute does not apply to types" } +typedef int N[2] [[indeterminate]]; // { dg-warning "'indeterminate' attribute does not apply to types" } +typedef int O [[indeterminate]] [2]; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } diff --git a/gcc/testsuite/g++.dg/cpp26/attr-indeterminate2.C b/gcc/testsuite/g++.dg/cpp26/attr-indeterminate2.C new file mode 100644 index 000000000000..a2704c65b4cd --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/attr-indeterminate2.C @@ -0,0 +1,39 @@ +// C++ 26 P2795R5 - Erroneous behaviour for uninitialized reads +// { dg-do compile { target c++11 } } +// { dg-additional-options "-fdump-tree-gimple" } +// { dg-skip-if "" { c++26 } { "-ftrivial-auto-var-init=*" } { "" } } +// Expect .DEFERRED_INIT calls for the h, r and s variables (3) and +// temporaries for the second arguments to foo and baz calls (4). +// { dg-final { scan-tree-dump-times " = \\.DEFERRED_INIT \\\(" 7 "gimple" { target c++26 } } } + +struct S { S (); S (const S &); ~S (); int s; }; +void foo (S a [[indeterminate]], S b, S c [[indeterminate]] = S ()); +void foo (S d, S e, S f [[indeterminate]]); + +void +bar () +{ + S g [[indeterminate]], h; + foo (g, h, S ()); + foo (g, h); +} + +void +foo (S i [[indeterminate]], S j, S k) +{ +} + +void +baz ([[indeterminate]] S l, S m, [[indeterminate]] S n = S ()) +{ +} + +void baz (S o, S p, S q); + +void +qux () +{ + S r, s; + baz (r, s, s); + baz (r, s); +} diff --git a/gcc/testsuite/g++.dg/cpp26/attr-indeterminate3.C b/gcc/testsuite/g++.dg/cpp26/attr-indeterminate3.C new file mode 100644 index 000000000000..8f13390262fe --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/attr-indeterminate3.C @@ -0,0 +1,21 @@ +// C++ 26 P2795R5 - Erroneous behaviour for uninitialized reads +// { dg-do compile { target c++11 } } +// { dg-skip-if "" { c++26 } { "-ftrivial-auto-var-init=*" } { "" } } + +struct S { S (); S (const S &); ~S (); int s; }; +void foo (S u, S v [[indeterminate]], int); +void foo (S a, S b, S c = S ()); // { dg-message "earlier declaration" } +void foo (S d, S e, S f [[indeterminate]]); // { dg-error "'indeterminate' attribute not specified for parameter 'f' on the first declaration of its function" } + +void +foo (S i [[indeterminate]], S j, S k) // { dg-error "'indeterminate' attribute not specified for parameter 'i' on the first declaration of its function" } +{ +} + +void +bar (S l, S m, S n = S ()) // { dg-message "earlier declaration" } +{ +} + +void bar (S o [[indeterminate]], S p, [[indeterminate]]S q); // { dg-error "'indeterminate' attribute not specified for parameter 'o' on the first declaration of its function" } + // { dg-error "'indeterminate' attribute not specified for parameter 'q' on the first declaration of its function" "" { target *-*-* } .-1 } diff --git a/gcc/testsuite/g++.dg/cpp26/attr-indeterminate4.C b/gcc/testsuite/g++.dg/cpp26/attr-indeterminate4.C new file mode 100644 index 000000000000..946e01911dd2 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/attr-indeterminate4.C @@ -0,0 +1,36 @@ +// C++ 26 P2795R5 - Erroneous behaviour for uninitialized reads +// { dg-do compile { target c++11 } } +// { dg-additional-options "-ftrivial-auto-var-init=uninitialized -fdump-tree-gimple" } +// { dg-final { scan-tree-dump-not " = \\.DEFERRED_INIT \\\(" "gimple" } } + +struct S { S (); S (const S &); ~S (); int s; }; +void foo (S a [[indeterminate]], S b, S c [[indeterminate]] = S ()); +void foo (S d, S e, S f [[indeterminate]]); + +void +bar () +{ + S g [[indeterminate]], h; + foo (g, h, S ()); + foo (g, h); +} + +void +foo (S i [[indeterminate]], S j, S k) +{ +} + +void +baz ([[indeterminate]] S l, S m, [[indeterminate]] S n = S ()) +{ +} + +void baz (S o, S p, S q); + +void +qux () +{ + S r, s; + baz (r, s, s); + baz (r, s); +} diff --git a/gcc/testsuite/g++.dg/cpp26/erroneous1.C b/gcc/testsuite/g++.dg/cpp26/erroneous1.C new file mode 100644 index 000000000000..78769e65ca17 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/erroneous1.C @@ -0,0 +1,61 @@ +// C++ 26 P2795R5 - Erroneous behaviour for uninitialized reads +// { dg-do run { target c++26 } } +// { dg-skip-if "" { *-*-* } { "-ftrivial-auto-var-init=*" } { "" } } +// { dg-options "-O2 -Wuninitialized" } + +#define assert(x) if (!(x)) __builtin_abort () + +template +[[gnu::noipa]] T +baz (T &x) +{ + return x; +} + +[[gnu::noipa]] int +foo (bool b) +{ + unsigned char c; + unsigned char d = c; // no erroneous behavior, but d has an erroneous value + // { dg-warning "'c' is used uninitialized" "" { target *-*-* } .-1 } + + assert (c == d); // holds, both integral promotions have erroneous behavior + + unsigned char f = c; + unsigned char g = baz (f); + + assert (g == c); + + int e = d; // erroneous behavior + baz (e); + return b ? d : 0; // erroneous behavior if b is true +} + +[[gnu::noipa]] void +bar () +{ + int d1, d2; + + int e1 = d1; // erroneous behavior + int e2 = d1; // erroneous behavior + + assert (e1 == e2); // holds + assert (e1 == d1); // holds, erroneous behavior + assert (e2 == d1); // holds, erroneous behavior + + int f = d1; // { dg-warning "'d1' is used uninitialized" } + int g = baz (f); + assert (g == d1); + + __builtin_memcpy (&d2, &d1, sizeof (int)); // no erroneous behavior, but d2 has an erroneous value + assert (e1 == d2); // holds, erroneous behavior + assert (e2 == d2); // holds, erroneous behavior +} + +int +main () +{ + foo (false); + foo (true); + bar (); +} diff --git a/gcc/testsuite/g++.dg/cpp26/erroneous2.C b/gcc/testsuite/g++.dg/cpp26/erroneous2.C new file mode 100644 index 000000000000..e8c66f4d60a0 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/erroneous2.C @@ -0,0 +1,234 @@ +// C++ 26 P2795R5 - Erroneous behaviour for uninitialized reads +// { dg-do compile } +// { dg-skip-if "" { *-*-* } { "-ftrivial-auto-var-init=*" } { "" } } +// { dg-options "-O2 -fdump-tree-gimple" } +// All the s1..s24 variables and i1 need .DEFERRED_INIT call on their +// declarations. +// Plus, forward gotos to l1 & l2 labels need up to s1-s4 and s6-s9 vars to +// be .DEFERRED_INITed (and backward gotos up to that minus the first two). +// switch to case 15 skips over s12, switch to case 16/17 skip +// over s12 and s13 but the adjacent l3 label needs to also skip over s3-s4 +// and s6-s9 and s11. switch to case 18 skips over s12-s14 and switch to +// default in the same switch skips over s12-s15. +// goto l4; skips over s19 initialization. +// goto l5; skips over s20-s22 initialization. +// switch to case 32/33 skips over s23 but goto to adjacent l6 skips also +// over s20-s22. switch to default in that switch skips over s23-s24. +// { dg-final { scan-tree-dump-times " s1 = \.DEFERRED_INIT \\\(" 2 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s2 = \.DEFERRED_INIT \\\(" 2 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s3 = \.DEFERRED_INIT \\\(" 3 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s4 = \.DEFERRED_INIT \\\(" 3 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s5 = \.DEFERRED_INIT \\\(" 1 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s6 = \.DEFERRED_INIT \\\(" 3 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s7 = \.DEFERRED_INIT \\\(" 3 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s8 = \.DEFERRED_INIT \\\(" 3 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s9 = \.DEFERRED_INIT \\\(" 3 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s10 = \.DEFERRED_INIT \\\(" 1 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s11 = \.DEFERRED_INIT \\\(" 2 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s12 = \.DEFERRED_INIT \\\(" 5 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s13 = \.DEFERRED_INIT \\\(" 4 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s14 = \.DEFERRED_INIT \\\(" 3 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s15 = \.DEFERRED_INIT \\\(" 2 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s16 = \.DEFERRED_INIT \\\(" 1 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s17 = \.DEFERRED_INIT \\\(" 1 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s18 = \.DEFERRED_INIT \\\(" 1 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s19 = \.DEFERRED_INIT \\\(" 2 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s20 = \.DEFERRED_INIT \\\(" 3 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s21 = \.DEFERRED_INIT \\\(" 3 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s22 = \.DEFERRED_INIT \\\(" 3 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s23 = \.DEFERRED_INIT \\\(" 3 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s24 = \.DEFERRED_INIT \\\(" 2 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " i1 = \.DEFERRED_INIT \\\(" 1 "gimple" { target c++26 } } } + +struct S { int a, b, c; }; + +int +foo (int x) +{ + int r = 0; + if (x == 1) + goto l1; + S s1; + if (x == 2) + goto l1; + S s2; + { + S s10; + if (x == 12) + goto l1; + s10.a = 1; + r += s10.a; + int i1; + if (x == 13) + goto l1; + i1 = 2; + r += i1; + } + if (x == 3) + goto l2; + if (x == 4) + goto l1; + { + S s3; + if (x == 5) + goto l2; + S s4; + if (x == 6) + goto l1; + { + S s5; + if (x == 7) + goto l1; + s5.a = 5; + r += s5.a; + } + S s6; + { + S s7; + S s8; + if (x == 8) + goto l1; + S s9; + if (x == 9) + goto l2; + if (x == 10) + goto l2; + if (x == 11) + goto l2; + l1: + l2: + s1.a = 1; + s2.b = 2; + s3.c = 3; + s4.a = 4; + s6.b = 6; + s7.c = 7; + s8.a = 8; + s9.b = 9; + r += s1.a + s2.b + s3.c; + r += s4.a + s6.b + s7.c; + r += s8.a + s9.b; + if (x == 14) + goto l3; + S s11; + switch (x) + { + S s12; + case 15: + S s13; + // FALLTHRU + l3: + case 16: + case 17: + S s14; + s11.a = 1; + s12.b = 2; + s13.c = 3; + s14.a = 4; + r += s11.a + s12.b + s13.c; + r += s14.a; + return r; + case 18: + S s15; + s11.a = 1; + s12.b = 2; + s13.c = 3; + s14.a = 4; + s15.b = 5; + r += s11.a + s12.b + s13.c; + r += s14.a + s15.b; + return r; + default: + if (x != 19 && x != 20) + break; + S s16; + s11.a = 1; + s12.b = 2; + s13.c = 3; + s14.a = 4; + s15.b = 5; + s16.c = 6; + r += s11.a + s12.b + s13.c; + r += s14.a + s15.b + s16.c; + return r; + } + if (x == 21) + goto l3; + } + S s17; + if (x == 22) + goto l3; + if (x == 23) + goto l1; + if (x == 24) + goto l2; + s17.a = 1; + r += s17.a; + } + S s18; + if (x == 25) + { + S s19; + s19.c = 2; + r += s19.c; + if (x == 29) + l4:; + goto l3; + } + if (x == 26) + goto l1; + if (x == 27) + goto l2; + s18.b = 1; + r += s18.b; + if (x == 28) + goto l4; + { + S s20; + { + S s21; + if (x == 29) + goto l1; + S s22; + if (x == 30) + goto l2; + l5: + s20.a = 1; + s21.b = 2; + s22.c = 3; + r += s20.a + s21.b + s22.c; + switch (x) + { + case 31: + S s23; + // FALLTHRU + l6: + case 32: + case 33: + S s24; + s23.a = 1; + s24.b = 2; + r += s23.a + s24.b; + return r; + default: + if (x >= 34 && x <= 35) + return r; + break; + } + if (x == 34) + goto l5; + if (x == 35) + goto l6; + return r; + } + if (x == 36) + goto l5; + if (x == 37) + goto l6; + } + if (x == 38) + goto l5; + if (x == 39) + goto l6; + return r; +} diff --git a/gcc/testsuite/g++.dg/cpp26/erroneous3.C b/gcc/testsuite/g++.dg/cpp26/erroneous3.C new file mode 100644 index 000000000000..d48a08ed7d18 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/erroneous3.C @@ -0,0 +1,158 @@ +// C++ 26 P2795R5 - Erroneous behaviour for uninitialized reads +// { dg-do compile { target c++11 } } +// { dg-options "-Wimplicit-fallthrough -Wswitch-unreachable" } +// Make sure -Wimplicit-fallthrough and -Wswitch-unreachable +// are consistent between -std=c++23 and -std=c++26 even when +// the latter instruments jumps across vacuous initializations. + +int i; + +void +foo (int x) +{ + switch (x) + { + case 1: + int j; + ++i; // { dg-warning "this statement may fall through" } + case 2: // { dg-message "here" } + int k; + ++i; + // FALLTHRU + case 3: + int l; + ++i; + [[fallthrough]]; + default: + int m; + ++i; + j = 42; + k = 42; + l = 42; + m = 42; + i += (j - k) + (l - m); + break; + } +} + +void +bar (int x) +{ + if (x == 6) + goto l1; + if (x == 7) + goto l2; + if (x == 8) + goto l3; + if (x == 9) + goto l4; + if (x == 10) + goto l5; + if (x == 11) + goto l6; + int j; + j = 5; + i += j; + switch (x) + { + case 1: + l1: + ++i; // { dg-warning "this statement may fall through" } + case 2: // { dg-message "here" } + l2: + ++i; + // FALLTHRU + case 3: + l3: + ++i; + [[fallthrough]]; + default: + l4: + ++i; + break; + case 4: + ++i; // { dg-warning "this statement may fall through" } + case 5: // { dg-message "here" } + l5:; + ++i; // { dg-warning "this statement may fall through" } + case 6: // { dg-message "here" } + ++i; + case 7: + l6:; + } +} + +void +baz (int x) +{ + switch (x) + { + case 1: + int j [[indeterminate]]; + ++i; // { dg-warning "this statement may fall through" } + case 2: // { dg-message "here" } + int k [[indeterminate]]; + ++i; + // FALLTHRU + case 3: + int l [[indeterminate]]; + ++i; + [[fallthrough]]; + default: + int m [[indeterminate]]; + ++i; + j = 42; + k = 42; + l = 42; + m = 42; + i += (j - k) + (l - m); + break; + } +} + +void +qux (int x) +{ + if (x == 6) + goto l1; + if (x == 7) + goto l2; + if (x == 8) + goto l3; + if (x == 9) + goto l4; + if (x == 10) + goto l5; + if (x == 11) + goto l6; + int j [[indeterminate]]; + j = 5; + i += j; + switch (x) + { + case 1: + l1: + ++i; // { dg-warning "this statement may fall through" } + case 2: // { dg-message "here" } + l2: + ++i; + // FALLTHRU + case 3: + l3: + ++i; + [[fallthrough]]; + default: + l4: + ++i; + break; + case 4: + ++i; // { dg-warning "this statement may fall through" } + case 5: // { dg-message "here" } + l5:; + ++i; // { dg-warning "this statement may fall through" } + case 6: // { dg-message "here" } + ++i; + case 7: + l6:; + } +} diff --git a/gcc/testsuite/g++.dg/cpp26/erroneous4.C b/gcc/testsuite/g++.dg/cpp26/erroneous4.C new file mode 100644 index 000000000000..0863480dc2ea --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/erroneous4.C @@ -0,0 +1,37 @@ +// C++ 26 P2795R5 - Erroneous behaviour for uninitialized reads +// { dg-do compile { target c++23 } } +// Make sure we don't reject this in C++26 because of +// .DEFERRED_INIT calls. + +constexpr int +foo (int x) +{ + if (x == 6) + goto l1; + if (x == 7) + goto l2; + int i; + switch (x) + { + int j; + case 1: + i = 6; + return i; + case 2: + i = 4; + l1: + i = 5; + return i; + case 3: + l2: + i = 7; + return i; + default: + return 42; + } +} + +static_assert (foo (1) == 6); +static_assert (foo (2) == 5); +static_assert (foo (3) == 7); +static_assert (foo (4) == 42); diff --git a/gcc/testsuite/g++.dg/opt/store-merging-1.C b/gcc/testsuite/g++.dg/opt/store-merging-1.C index c7f294ec386c..8c4625283785 100644 --- a/gcc/testsuite/g++.dg/opt/store-merging-1.C +++ b/gcc/testsuite/g++.dg/opt/store-merging-1.C @@ -1,7 +1,7 @@ // PR target/92038 // { dg-do compile { target int32 } } // { dg-require-effective-target store_merge } -// { dg-options "-O2 -flifetime-dse=2 -fdump-tree-store-merging-details" } +// { dg-options "-O2 -flifetime-dse=2 -fdump-tree-store-merging-details -ftrivial-auto-var-init=uninitialized" } // { dg-final { scan-tree-dump "New sequence of \[12] stores to replace old one of 2 stores" "store-merging" } } struct S { S () : a (0), b (0) {} int a; char b; char c[3]; }; diff --git a/gcc/testsuite/g++.dg/uninit-pred-loop-1_b.C b/gcc/testsuite/g++.dg/uninit-pred-loop-1_b.C index b17b93601920..55b15b75cba5 100644 --- a/gcc/testsuite/g++.dg/uninit-pred-loop-1_b.C +++ b/gcc/testsuite/g++.dg/uninit-pred-loop-1_b.C @@ -13,7 +13,7 @@ int foo(int n) _err; }); - if (err == 0) return 17; + if (err == 0) return 17; /* { dg-warning "'_err' may be used uninitialized" "" { target c++26 } } */ } return 18; diff --git a/gcc/testsuite/g++.dg/warn/Warray-bounds-20.C b/gcc/testsuite/g++.dg/warn/Warray-bounds-20.C index 36f8046fed7b..643e8014d36e 100644 --- a/gcc/testsuite/g++.dg/warn/Warray-bounds-20.C +++ b/gcc/testsuite/g++.dg/warn/Warray-bounds-20.C @@ -26,7 +26,7 @@ struct D1: virtual B, virtual C /* The warning would ideally point to the assignment but instead points to the opening brace. */ D1 () - { // { dg-warning "\\\[-Warray-bounds" "brace" } + { ci = 0; // { dg-warning "\\\[-Warray-bounds" "assign" { xfail lp64 } } } }; @@ -35,11 +35,11 @@ void sink (void*); void warn_derived_ctor_access_new_decl () { - char a[sizeof (D1)]; // { dg-message "at offset 1 into object 'a' of size 40" "LP64 note" { target lp64} } - // { dg-message "at offset 1 into object 'a' of size 20" "LP64 note" { target ilp32} .-1 } + char a[sizeof (D1)]; // { dg-message "at offset 1 into object 'a' of size 40" "LP64 note" { target lp64 } } + // { dg-message "at offset 1 into object 'a' of size 20" "LP32 note" { target ilp32 } .-1 } char *p = a; ++p; - D1 *q = new (p) D1; // { dg-warning "-Warray-bounds" } + D1 *q = new (p) D1; // { dg-warning "\\\[-Warray-bounds" } sink (q); } @@ -47,14 +47,14 @@ void warn_derived_ctor_access_new_alloc () { char *p = (char*)operator new (sizeof (D1)); // { dg-message "at offset 1 into object of size \\d+ allocated by '\[^\n\r]*operator new\[^\n\r]*'" "note" } ++p; - D1 *q = new (p) D1; // { dg-warning "-Warray-bounds" } + D1 *q = new (p) D1; // { dg-warning "\\\[-Warray-bounds" } sink (q); } void warn_derived_ctor_access_new_array_decl () { char b[sizeof (D1) * 2]; // { dg-message "at offset \\d+ into object 'b' of size 80" "LP64 note" { target { lp64 } xfail { lp64 } } } - // { dg-message "at offset \\d+ into object 'b' of size 40" "LP64 note" { target { ilp32 } xfail { ilp32 } } .-1 } + // { dg-message "at offset \\d+ into object 'b' of size 40" "LP32 note" { target { ilp32 } xfail { ilp32 } } .-1 } char *p = b; ++p; D1 *q = new (p) D1[2]; diff --git a/gcc/testsuite/g++.dg/warn/Wuninitialized-13.C b/gcc/testsuite/g++.dg/warn/Wuninitialized-13.C index b74a2fa98ecb..47a75454cff5 100644 --- a/gcc/testsuite/g++.dg/warn/Wuninitialized-13.C +++ b/gcc/testsuite/g++.dg/warn/Wuninitialized-13.C @@ -8,12 +8,12 @@ struct shared_count { shared_count () { } shared_count (shared_count &r) - : pi (r.pi) { } // { dg-warning "\\\[-Wuninitialized" } + : pi (r.pi) { } int pi; }; // There's another (redundant) -Wuninitialized on the line below. -struct shared_ptr { +struct shared_ptr { // { dg-warning "\\\[-Wuninitialized" } int ptr; shared_count refcount; }; diff --git a/gcc/tree-ssa-uninit.cc b/gcc/tree-ssa-uninit.cc index cb82001770e8..45e789c9563e 100644 --- a/gcc/tree-ssa-uninit.cc +++ b/gcc/tree-ssa-uninit.cc @@ -641,6 +641,7 @@ maybe_warn_operand (ao_ref &ref, gimple *stmt, tree lhs, tree rhs, return NULL_TREE; bool found_alloc = false; + bool found_clobber_deref_this = false; if (fentry_reached) { @@ -662,12 +663,30 @@ maybe_warn_operand (ao_ref &ref, gimple *stmt, tree lhs, tree rhs, tree fndecl = gimple_call_fndecl (def_stmt); const built_in_function fncode = DECL_FUNCTION_CODE (fndecl); if (fncode == BUILT_IN_ALLOCA - || fncode == BUILT_IN_ALLOCA_WITH_ALIGN - || fncode == BUILT_IN_MALLOC) + || fncode == BUILT_IN_ALLOCA_WITH_ALIGN + || fncode == BUILT_IN_MALLOC) found_alloc = true; break; } + /* The C++ FE for -flifetime-dse=2 marks this parameters + of certain constructors with "clobber *this" attribute. + Emit uninitialized warnings if we read from what this points + to. This is similar to access (write_only, 1) attribute, + except it is a -Wuninitialized warning rather than + -Wmaybe-uninitialized and doesn't talk about access + attribute. */ + if (SSA_NAME_IS_DEFAULT_DEF (base) + && POINTER_TYPE_P (TREE_TYPE (base)) + && SSA_NAME_VAR (base) + && TREE_CODE (SSA_NAME_VAR (base)) == PARM_DECL + && lookup_attribute ("clobber *this", + DECL_ATTRIBUTES (SSA_NAME_VAR (base)))) + { + found_clobber_deref_this = true; + break; + } + if (!is_gimple_assign (def_stmt)) break; @@ -702,7 +721,7 @@ maybe_warn_operand (ao_ref &ref, gimple *stmt, tree lhs, tree rhs, /* Do not warn if it can be initialized outside this function. If we did not reach function entry then we found killing clobbers on all paths to entry. */ - if (!found_alloc && fentry_reached) + if ((!found_alloc && !found_clobber_deref_this) && fentry_reached) { if (TREE_CODE (base) == SSA_NAME) { diff --git a/gcc/tree.h b/gcc/tree.h index 6e46374357c1..4a4b8ef7f0a7 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -900,6 +900,19 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int, #define UNUSED_LABEL_P(NODE) \ (LABEL_DECL_CHECK (NODE)->base.default_def_flag) +/* Label used to goto around artificial .DEFERRED_INIT code for + C++ -ftrivial-auto-var-init= purposes with a goto around it. + VACUOUS_INIT_LABEL_P flag is used on the lab LABEL_DECL in: + goto lab; + lab1: + v1 = .DEFERRED_INIT (...); + v2 = .DEFERRED_INIT (...); + lab2: + v3 = .DEFERRED_INIT (...); + lab: */ +#define VACUOUS_INIT_LABEL_P(NODE) \ + (LABEL_DECL_CHECK (NODE)->base.nothrow_flag) + /* Nonzero means this expression is volatile in the C sense: its address should be of type `volatile WHATEVER *'. In other words, the declared item is volatile qualified. From 68073785e85857cf26d1b78bf2ac2f3e1af63e1b Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Sat, 4 Oct 2025 11:19:30 +0200 Subject: [PATCH 070/216] testsuite: Add 2 new tests The following patch adds a variant of constexpr-new23.C and constexpr-new4.C tests which are or could be affected by some of the discussed changes in new expression clobbers. 2025-10-04 Jakub Jelinek * g++.dg/cpp2a/constexpr-new28.C: New test. * g++.dg/cpp2a/constexpr-new29.C: New test. --- gcc/testsuite/g++.dg/cpp2a/constexpr-new28.C | 45 ++++++++++++++++++++ gcc/testsuite/g++.dg/cpp2a/constexpr-new29.C | 30 +++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp2a/constexpr-new28.C create mode 100644 gcc/testsuite/g++.dg/cpp2a/constexpr-new29.C diff --git a/gcc/testsuite/g++.dg/cpp2a/constexpr-new28.C b/gcc/testsuite/g++.dg/cpp2a/constexpr-new28.C new file mode 100644 index 000000000000..7828f307bc3f --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/constexpr-new28.C @@ -0,0 +1,45 @@ +// PR c++/115645 +// { dg-do compile { target c++20 } } + +using size_t = decltype(sizeof(0)); + +void* operator new(size_t, void* p) { return p; } +void* operator new[](size_t, void* p) { return p; } + +#define VERIFY(C) if (!(C)) throw + +namespace std { + template + constexpr T* construct_at(T* p) + { + if constexpr (__is_array(T)) + return ::new((void*)p) T[1](); + else + return ::new((void*)p) T(); + } +} + +struct S { + constexpr S () : s (0) {} + constexpr S (int x) : s (x) {} + constexpr bool operator== (int x) const { return s == x; } + int s; +}; + +constexpr void +test_array() +{ + S arr[1] { 99 }; + std::construct_at(&arr); + VERIFY( arr[0] == 0 ); + + union U { + long long x = -1; + S arr[4]; + } u; + + auto p = std::construct_at(&u.arr); + VERIFY( (*p)[0] == 0 ); +} + +static_assert( [] { test_array(); return true; }() ); diff --git a/gcc/testsuite/g++.dg/cpp2a/constexpr-new29.C b/gcc/testsuite/g++.dg/cpp2a/constexpr-new29.C new file mode 100644 index 000000000000..368018df0a10 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/constexpr-new29.C @@ -0,0 +1,30 @@ +// P0784R7 +// { dg-do compile { target c++20 } } +// { dg-additional-options "-fdelete-null-pointer-checks" } + +struct S +{ + constexpr S () : s (0) { s++; } + constexpr S (int x) : s (x) { s += 2; } + constexpr ~S () { if (s != 35) asm (""); s = 5; } + int s; +}; + +constexpr bool +foo (int n) +{ + S *p = new S (7); + if (p->s != 9) return false; + p->s = 35; + delete p; + p = new S[n] { 11, 13, 15 }; + if (p[0].s != 13 || p[1].s != 15 || p[2].s != 17) return false; + p[0].s = 35; + p[2].s = 35; + p[1].s = 35; + delete[] p; + return true; +} + +constexpr bool a = foo (3); +static_assert (a); From 70639fc6067b315b3527e17077eba72b74eb42b4 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Sat, 4 Oct 2025 11:28:27 +0200 Subject: [PATCH 071/216] Ada: Fix ineffective "use all" clause for type declared in nested package This is an issue reported 10 years ago for a new feature introduced in the language 20 years ago (Ada 2005): primitive subprograms of a type named in an use-all-type clause are not seen as (potentially) use-visible if the type is declared in a nested package, except in the specific case of enumeration literals; the fix just extends the processing done for enumeration literals. gcc/ada/ PR ada/64869 * sem_ch7.adb (Install_Private_Declarations): Also propagate the Current_Use_Clause from partial to full view. (Uninstall_Declarations): Extend implementation of RM 8.4(8.1/3) subclause to all primitive subprograms. gcc/testsuite/ * gnat.dg/use_type1.adb: New test. * gnat.dg/use_type2.adb: Likewise. --- gcc/ada/sem_ch7.adb | 104 +++++++++++++++++++++++++--- gcc/testsuite/gnat.dg/use_type1.adb | 16 +++++ gcc/testsuite/gnat.dg/use_type2.adb | 15 ++++ 3 files changed, 124 insertions(+), 11 deletions(-) create mode 100644 gcc/testsuite/gnat.dg/use_type1.adb create mode 100644 gcc/testsuite/gnat.dg/use_type2.adb diff --git a/gcc/ada/sem_ch7.adb b/gcc/ada/sem_ch7.adb index 42abc894a296..1d838e24bf48 100644 --- a/gcc/ada/sem_ch7.adb +++ b/gcc/ada/sem_ch7.adb @@ -2521,11 +2521,13 @@ package body Sem_Ch7 is and then Scope (Full_View (Id)) = Scope (Id) and then Ekind (Full_View (Id)) /= E_Incomplete_Type then + Full := Full_View (Id); + -- If there is a use-type clause on the private type, set the full -- view accordingly. - Set_In_Use (Full_View (Id), In_Use (Id)); - Full := Full_View (Id); + Set_In_Use (Full, In_Use (Id)); + Set_Current_Use_Clause (Full, Current_Use_Clause (Id)); if Is_Private_Base_Type (Full) and then Has_Private_Declaration (Full) @@ -2893,7 +2895,12 @@ package body Sem_Ch7 is -- When compiling a child unit this needs to be done recursively. function Type_In_Use (T : Entity_Id) return Boolean; - -- Check whether type or base type appear in an active use_type clause + -- Check whether type T is declared in P and appears in an active + -- use_type clause. + + function Type_Of_Primitive_In_Use_All (Id : Entity_Id) return Boolean; + -- Check whether the profile of primitive subprogram Id mentions a type + -- declared in P that appears in an active use-all-type clause. ------------------------------ -- Preserve_Full_Attributes -- @@ -3058,11 +3065,86 @@ package body Sem_Ch7 is ----------------- function Type_In_Use (T : Entity_Id) return Boolean is + BT : constant Entity_Id := Base_Type (T); begin - return Scope (Base_Type (T)) = P - and then (In_Use (T) or else In_Use (Base_Type (T))); + return Scope (BT) = P and then (In_Use (T) or else In_Use (BT)); end Type_In_Use; + ---------------------------------- + -- Type_Of_Primitive_In_Use_All -- + ---------------------------------- + + function Type_Of_Primitive_In_Use_All (Id : Entity_Id) return Boolean is + function Type_In_Use_All (T : Entity_Id) return Boolean; + -- Check whether type T is declared in P and appears in an active + -- use-all-type clause. + + --------------------- + -- Type_In_Use_All -- + --------------------- + + function Type_In_Use_All (T : Entity_Id) return Boolean is + begin + return Type_In_Use (T) + and then Nkind (Current_Use_Clause (T)) = N_Use_Type_Clause + and then All_Present (Current_Use_Clause (T)); + end Type_In_Use_All; + + -- Local variables + + F : Node_Id; + + -- Start of processing for Type_Of_Primitive_In_Use_All + + begin + -- The use-all-type clauses were introduced in Ada 2005 + + if Ada_Version <= Ada_95 then + return False; + end if; + + -- For enumeration literals, check type + + if Ekind (Id) = E_Enumeration_Literal then + return Type_In_Use_All (Etype (Id)); + end if; + + -- For functions, check return type + + if Ekind (Id) = E_Function then + declare + Typ : constant Entity_Id := + (if Ekind (Etype (Id)) = E_Anonymous_Access_Type + then Designated_Type (Etype (Id)) + else Etype (Id)); + begin + if Type_In_Use_All (Typ) then + return True; + end if; + end; + end if; + + -- For all subprograms, check formals + + F := First_Formal (Id); + while Present (F) loop + declare + Typ : constant Entity_Id := + (if Ekind (Etype (F)) = E_Anonymous_Access_Type + then Designated_Type (Etype (F)) + else Etype (F)); + begin + if Type_In_Use_All (Typ) then + return True; + end if; + end; + + Next_Formal (F); + end loop; + + return False; + end Type_Of_Primitive_In_Use_All; + -- Start of processing for Uninstall_Declarations begin @@ -3120,13 +3202,13 @@ package body Sem_Ch7 is elsif No (Etype (Id)) and then Serious_Errors_Detected /= 0 then null; - -- We need to avoid incorrectly marking enumeration literals as - -- non-visible when a visible use-all-type clause is in effect. + -- RM 8.4(8.1/3): Each primitive subprogram of T, including each + -- enumeration literal (if any), is potentially use-visible if T + -- is named in an active use-all-type clause. - elsif Type_In_Use (Etype (Id)) - and then Nkind (Current_Use_Clause (Etype (Id))) = - N_Use_Type_Clause - and then All_Present (Current_Use_Clause (Etype (Id))) + elsif (Ekind (Id) = E_Enumeration_Literal + or else (Is_Subprogram (Id) and then Is_Primitive (Id))) + and then Type_Of_Primitive_In_Use_All (Id) then null; diff --git a/gcc/testsuite/gnat.dg/use_type1.adb b/gcc/testsuite/gnat.dg/use_type1.adb new file mode 100644 index 000000000000..a32461014ae5 --- /dev/null +++ b/gcc/testsuite/gnat.dg/use_type1.adb @@ -0,0 +1,16 @@ +-- { dg-do compile } + +procedure Use_Type1 is + + package Nested is + type T is (X, Y, Z); + procedure Proc (Obj : T) is null; + end Nested; + + use all type Nested.T; + + Obj : Nested.T := X; + +begin + Proc (Obj); +end; diff --git a/gcc/testsuite/gnat.dg/use_type2.adb b/gcc/testsuite/gnat.dg/use_type2.adb new file mode 100644 index 000000000000..82996363d676 --- /dev/null +++ b/gcc/testsuite/gnat.dg/use_type2.adb @@ -0,0 +1,15 @@ +-- { dg-do compile } + +with Ada.Containers.Vectors; + +procedure Use_Type2 is + + package Vectors is new Ada.Containers.Vectors (Positive, Character); + + use all type Vectors.Vector; + + X : Vectors.Vector := To_Vector (0); + +begin + Append (X, 'A'); +end; From 4b4d5fc649a2678d539f6ed119ee2a1bb4db9a2e Mon Sep 17 00:00:00 2001 From: Zhongyao Chen Date: Sat, 4 Oct 2025 08:29:32 -0600 Subject: [PATCH 072/216] [PR target/118945][PATCH v3] RISC-V: Add 'prefer_agnostic' tune parameter for vector policies Improve RISC-V vector code generation by preferring tail-agnostic (ta) and mask-agnostic (ma) policies for vector instructions when merge operands are undefined. This optimization, controlled by a uarch-specific `prefer_agnostic` tuning parameter, reduces `vsetvl` instructions and avoids conservative undisturbed policy selections, addressing PR target/118945. Changes from v2: - more detailed comment. - refine the test to check for vsetvli ta/tu number explicitly. PR target/118945 gcc/ChangeLog: * config/riscv/riscv.cc (riscv_prefer_agnostic_p): New function. (riscv_tune_param): Add prefer_agnostic member. (various tune info structures): Initialize prefer_agnostic. * config/riscv/riscv-protos.h (riscv_prefer_agnostic_p): Add prototype. * config/riscv/riscv-v.cc (get_prefer_tail_policy, get_prefer_mask_policy): Use riscv_prefer_agnostic_p. * config/riscv/riscv-vsetvl.cc (vsetvl_info::get_demand_flags): demand policy for agnostic when prefer_agnostic is true. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/pr118945-1.c: New file. * gcc.target/riscv/rvv/autovec/pr118945-2.c: New file. --- gcc/config/riscv/riscv-protos.h | 1 + gcc/config/riscv/riscv-v.cc | 12 +++----- gcc/config/riscv/riscv-vsetvl.cc | 5 ++-- gcc/config/riscv/riscv.cc | 23 ++++++++++++++- .../gcc.target/riscv/rvv/autovec/pr118945-1.c | 15 ++++++++++ .../gcc.target/riscv/rvv/autovec/pr118945-2.c | 28 +++++++++++++++++++ 6 files changed, 73 insertions(+), 11 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118945-1.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118945-2.c diff --git a/gcc/config/riscv/riscv-protos.h b/gcc/config/riscv/riscv-protos.h index e4473f45d0e4..346d7a812fbd 100644 --- a/gcc/config/riscv/riscv-protos.h +++ b/gcc/config/riscv/riscv-protos.h @@ -832,6 +832,7 @@ extern bool th_print_operand_address (FILE *, machine_mode, rtx); #endif extern bool strided_load_broadcast_p (void); +extern bool riscv_prefer_agnostic_p (void); extern bool riscv_use_divmod_expander (void); void riscv_init_cumulative_args (CUMULATIVE_ARGS *, const_tree, rtx, tree, int); extern bool diff --git a/gcc/config/riscv/riscv-v.cc b/gcc/config/riscv/riscv-v.cc index 8021bc14e7c0..1d7d8a61b051 100644 --- a/gcc/config/riscv/riscv-v.cc +++ b/gcc/config/riscv/riscv-v.cc @@ -2140,10 +2140,8 @@ get_ma (rtx ma) enum tail_policy get_prefer_tail_policy () { - /* TODO: By default, we choose to use TAIL_ANY which allows - compiler pick up either agnostic or undisturbed. Maybe we - will have a compile option like -mprefer=agnostic to set - this value???. */ + if (riscv_prefer_agnostic_p ()) + return TAIL_AGNOSTIC; return TAIL_ANY; } @@ -2151,10 +2149,8 @@ get_prefer_tail_policy () enum mask_policy get_prefer_mask_policy () { - /* TODO: By default, we choose to use MASK_ANY which allows - compiler pick up either agnostic or undisturbed. Maybe we - will have a compile option like -mprefer=agnostic to set - this value???. */ + if (riscv_prefer_agnostic_p ()) + return MASK_AGNOSTIC; return MASK_ANY; } diff --git a/gcc/config/riscv/riscv-vsetvl.cc b/gcc/config/riscv/riscv-vsetvl.cc index 4fe0ae6d97b7..3586d0cdcc24 100644 --- a/gcc/config/riscv/riscv-vsetvl.cc +++ b/gcc/config/riscv/riscv-vsetvl.cc @@ -1144,9 +1144,10 @@ class vsetvl_info dflags |= demand_flags::DEMAND_LMUL_P; } - if (!m_ta) + /* Demand policy for agnostic if the uarch has a preference. */ + if (!m_ta || riscv_prefer_agnostic_p ()) dflags |= demand_flags::DEMAND_TAIL_POLICY_P; - if (!m_ma) + if (!m_ma || riscv_prefer_agnostic_p ()) dflags |= demand_flags::DEMAND_MASK_POLICY_P; } diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index 41ee4014c0dd..bf3bcad4d73b 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -317,6 +317,7 @@ struct riscv_tune_param const char *function_align; const char *jump_align; const char *loop_align; + bool prefer_agnostic; }; @@ -481,6 +482,7 @@ static const struct riscv_tune_param generic_tune_info = { NULL, /* function_align */ NULL, /* jump_align */ NULL, /* loop_align */ + false, /* prefer-agnostic. */ }; /* Costs to use when optimizing for rocket. */ @@ -505,6 +507,7 @@ static const struct riscv_tune_param rocket_tune_info = { NULL, /* function_align */ NULL, /* jump_align */ NULL, /* loop_align */ + false, /* prefer-agnostic. */ }; /* Costs to use when optimizing for Sifive 7 Series. */ @@ -529,6 +532,7 @@ static const struct riscv_tune_param sifive_7_tune_info = { NULL, /* function_align */ NULL, /* jump_align */ NULL, /* loop_align */ + false, /* prefer-agnostic. */ }; /* Costs to use when optimizing for Sifive p400 Series. */ @@ -553,6 +557,7 @@ static const struct riscv_tune_param sifive_p400_tune_info = { NULL, /* function_align */ NULL, /* jump_align */ NULL, /* loop_align */ + true, /* prefer-agnostic. */ }; /* Costs to use when optimizing for Sifive p600 Series. */ @@ -577,6 +582,7 @@ static const struct riscv_tune_param sifive_p600_tune_info = { NULL, /* function_align */ NULL, /* jump_align */ NULL, /* loop_align */ + true, /* prefer-agnostic. */ }; /* Costs to use when optimizing for T-HEAD c906. */ @@ -601,6 +607,7 @@ static const struct riscv_tune_param thead_c906_tune_info = { NULL, /* function_align */ NULL, /* jump_align */ NULL, /* loop_align */ + false, /* prefer-agnostic. */ }; /* Costs to use when optimizing for xiangshan nanhu. */ @@ -625,6 +632,7 @@ static const struct riscv_tune_param xiangshan_nanhu_tune_info = { NULL, /* function_align */ NULL, /* jump_align */ NULL, /* loop_align */ + true, /* prefer-agnostic. */ }; /* Costs to use when optimizing for a generic ooo profile. */ @@ -649,6 +657,7 @@ static const struct riscv_tune_param generic_ooo_tune_info = { NULL, /* function_align */ NULL, /* jump_align */ NULL, /* loop_align */ + true, /* prefer-agnostic. */ }; /* Costs to use when optimizing for Tenstorrent Ascalon 8 wide. */ @@ -673,6 +682,7 @@ static const struct riscv_tune_param tt_ascalon_d8_tune_info = { NULL, /* function_align */ NULL, /* jump_align */ NULL, /* loop_align */ + true, /* prefer-agnostic. */ }; /* Costs to use when optimizing for size. */ @@ -697,6 +707,7 @@ static const struct riscv_tune_param optimize_size_tune_info = { NULL, /* function_align */ NULL, /* jump_align */ NULL, /* loop_align */ + false, /* prefer-agnostic. */ }; /* Costs to use when optimizing for MIPS P8700 */ @@ -720,7 +731,8 @@ static const struct riscv_tune_param mips_p8700_tune_info = { NULL, /* vector cost */ NULL, /* function_align */ NULL, /* jump_align */ - NULL, /* loop_align */ + NULL, /* loop_align. */ + true, /* prefer-agnostic. */ }; static bool riscv_avoid_shrink_wrapping_separate (); @@ -12842,6 +12854,15 @@ strided_load_broadcast_p () return tune_param->use_zero_stride_load; } +/* Return TRUE if we should use the tail agnostic and mask agnostic policies for + vector code, false otherwise. */ + +bool +riscv_prefer_agnostic_p () +{ + return tune_param->prefer_agnostic; +} + /* Return TRUE if we should use the divmod expander, FALSE otherwise. This allows the behavior to be tuned for specific implementations as well as when optimizing for size. */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118945-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118945-1.c new file mode 100644 index 000000000000..fc37bef12586 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118945-1.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-mtune=generic-ooo -O3 -march=rv64gcv_zvl256b_zba -mabi=lp64d -mrvv-max-lmul=m2 -mrvv-vector-bits=scalable" } */ + +int test(int* in, int n) +{ + int accum = 0; + for (int i = 0; i < n; i++) + accum += in[i]; + + return accum; +} + +/* { dg-final { scan-assembler-times {vsetvli\s+[a-z0-9]+,\s*[a-z0-9]+,\s*e[0-9]+,\s*m[f0-9]+,\s*ta,\s*ma} 3 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-z0-9]+,\s*[a-z0-9]+,\s*e[0-9]+,\s*m[f0-9]+,\s*tu,\s*ma} 1 } } */ + diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118945-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118945-2.c new file mode 100644 index 000000000000..956574067ce1 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118945-2.c @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rva23u64 -mtune=generic-ooo -Ofast -S" } */ + +void vmult( + double* dst, + const double* src, + const unsigned int* rowstart, + const unsigned int* colnums, + const double* val, + const unsigned int n_rows +) { + const double* val_ptr = &val[rowstart[0]]; + const unsigned int* colnum_ptr = &colnums[rowstart[0]]; + double* dst_ptr = dst; + + for (unsigned int row = 0; row < n_rows; ++row) { + double s = 0.; + const double* const val_end_of_row = &val[rowstart[row + 1]]; + while (val_ptr != val_end_of_row) { + s += *val_ptr++ * src[*colnum_ptr++]; + } + *dst_ptr++ = s; + } +} + +/* { dg-final { scan-assembler-times {vsetvli\s+[a-z0-9]+,\s*[a-z0-9]+,\s*e[0-9]+,\s*m[f0-9]+,\s*ta,\s*ma} 4 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-z0-9]+,\s*[a-z0-9]+,\s*e[0-9]+,\s*m[f0-9]+,\s*tu,\s*ma} 1 } } */ + From e037693f66823c168ed7d37ae70b3cd5aa757b1e Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Sat, 4 Oct 2025 08:33:19 -0600 Subject: [PATCH 073/216] [RISC-V][PR target/122147] Avoid creating (subreg (mem)) in RISC-V port MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit So another fun bug. Utterly amazed we didn't trip over this in some form or another until now. We're generating a (subreg (mem)) expression during combine because "move_operand" accepts it as a valid operand. We've discouraged those kinds of expressions for a long time, even though they're generally expected to act like registers due to reloading. In this case reloading just goes into an infinite loop 🙁 Rather than try to fix this in LRA, let's just avoiding creating the problematical subreg to begin with. That's accomplished by being a bit more selective in what move_operand allows. I'm not particularly happy with what I saw in move_operand, but I'm inclined to let it be right now. Tested on rv32 and rv64. Bootstraps on the Pioneer and BPI will run later today. I'll push once the pre-commit CI system has done its thing. PR target/122147 gcc/ * config/riscv/predicates.md (move_operand): Only allow a REG as the operand of a SUBREG. gcc/testsuite/ * gcc.target/riscv/pr122147.c: New test. --- gcc/config/riscv/predicates.md | 7 +++++++ gcc/testsuite/gcc.target/riscv/pr122147.c | 14 ++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 gcc/testsuite/gcc.target/riscv/pr122147.c diff --git a/gcc/config/riscv/predicates.md b/gcc/config/riscv/predicates.md index 056f9e219092..f811a4e40ca7 100644 --- a/gcc/config/riscv/predicates.md +++ b/gcc/config/riscv/predicates.md @@ -334,6 +334,13 @@ && riscv_split_symbol_type (symbol_type) && symbol_type != SYMBOL_PCREL; + /* Be tight about the SUBREGs we accept. In particular, + (subreg (mem)) has been discouraged for decades. Just + allow (subreg (reg)) until such time as we see a strong + need to be more permissive. */ + case SUBREG: + return REG_P (SUBREG_REG (op)); + default: return true; } diff --git a/gcc/testsuite/gcc.target/riscv/pr122147.c b/gcc/testsuite/gcc.target/riscv/pr122147.c new file mode 100644 index 000000000000..14da321bc85f --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr122147.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-w -march=rv64gcv -mabi=lp64d" { target rv64 } } */ +/* { dg-additional-options "-w -march=rv32gcv -mabi=ilp32" { target rv32 } } */ + +typedef __attribute__((__vector_size__ (4))) _Float16 F; +_Complex char cc; +F f; + +void +foo () +{ + __builtin_memmove (&f, &cc, 2); + f *= f; +} From ab429ea91d50e5ddb8eb5bc2098c6a476860a01b Mon Sep 17 00:00:00 2001 From: Raphael Moreira Zinsly Date: Sat, 4 Oct 2025 08:36:48 -0600 Subject: [PATCH 074/216] [PATCH v2] RISC-V: Fix type of CFA during stack probe [PR122114] Changes since v1: - Limit test to rv64. -->8-- frame.total_size may not be a constant, this patch changes the type of the stored cfa offset to avoid errors trying to convert the frame size. PR target/122114 gcc/ChangeLog: * config/riscv/riscv.cc (riscv_allocate_and_probe_stack_space): Change initial_cfa_offset type. gcc/testsuite/ChangeLog: * gcc.target/riscv/pr122114.c: New test. --- gcc/config/riscv/riscv.cc | 3 +-- gcc/testsuite/gcc.target/riscv/pr122114.c | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/pr122114.c diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index bf3bcad4d73b..c81a2e4b4919 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -9039,8 +9039,7 @@ riscv_allocate_and_probe_stack_space (rtx temp1, HOST_WIDE_INT size) from the top of the frame, as it might be lowered before. To consider the correct SP addresses for the CFA notes, it is needed to correct them with the initial offset value. */ - HOST_WIDE_INT initial_cfa_offset - = cfun->machine->frame.total_size.to_constant () - size; + poly_int64 initial_cfa_offset = cfun->machine->frame.total_size - size; if (!frame_pointer_needed) { diff --git a/gcc/testsuite/gcc.target/riscv/pr122114.c b/gcc/testsuite/gcc.target/riscv/pr122114.c new file mode 100644 index 000000000000..ccb2ec912a74 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr122114.c @@ -0,0 +1,22 @@ +/* { dg-do compile { target { rv64 } } } */ +/* { dg-options "-O2 -fstack-clash-protection -march=rv64gcv_zvl256b -mabi=lp64d" } */ + +int pk_gen_i, pk_gen_j; +long pk_gen_buf[4]; +long pk_gen_t; + +void vec_mul(long *, long *, long *); +void uint64_is_zero_declassify(long); + +void pk_gen() { + long consts[128][13], prod[128][13]; + + vec_mul(prod[pk_gen_j], prod[pk_gen_j], consts[pk_gen_j]); + + for (; pk_gen_i;) { + for (; pk_gen_j; pk_gen_j++) + pk_gen_t |= pk_gen_buf[pk_gen_j]; + + uint64_is_zero_declassify(pk_gen_t); + } +} From 867f777cee9f44027a3724fbad266c5cfb3a311f Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Sat, 4 Oct 2025 17:06:16 +0200 Subject: [PATCH 075/216] widening_mul: Reset flow sensitive info in maybe_optimize_guarding_check [PR122104] In PR95852 I've added an optimization where next to just pattern recognizing r = x * y; r / x != y or r = x * y; r / x == y as .MUL_OVERFLOW or negation thereof it also recognizes r = x * y; x && (r / x != y) or r = x * y; !x || (r / x == y) by optimizing the guarding condition to always true/false. The problem with that is that some value ranges recorded for the SSA_NAMEs in the formerly conditional, now unconditional basic block can be invalid. This patch fixes it by calling reset_flow_sensitive_info_in_bb if we optimize the guarding condition. 2025-10-04 Jakub Jelinek PR tree-optimization/122104 * tree-ssa-math-opts.cc (maybe_optimize_guarding_check): Call reset_flow_sensitive_info_in_bb on bb when optimizing out the guarding condition. * gcc.target/i386/pr122104.c: New test. --- gcc/testsuite/gcc.target/i386/pr122104.c | 12 ++++++++++++ gcc/tree-ssa-math-opts.cc | 1 + 2 files changed, 13 insertions(+) create mode 100644 gcc/testsuite/gcc.target/i386/pr122104.c diff --git a/gcc/testsuite/gcc.target/i386/pr122104.c b/gcc/testsuite/gcc.target/i386/pr122104.c new file mode 100644 index 000000000000..be88933e3ec6 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr122104.c @@ -0,0 +1,12 @@ +/* PR tree-optimization/122104 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-widening_mul-alias" } */ +/* { dg-final { scan-tree-dump "\\.MUL_OVERFLOW" "widening_mul" } } */ +/* { dg-final { scan-tree-dump-not "# RANGE \\\[irange\\\] unsigned int \\\[1, " "widening_mul" } } */ + +int +foo (int x) +{ + int r = (unsigned) x * 35; + return x && ((unsigned) r / x) != 35U; +} diff --git a/gcc/tree-ssa-math-opts.cc b/gcc/tree-ssa-math-opts.cc index a9903b691a49..0db39f330ead 100644 --- a/gcc/tree-ssa-math-opts.cc +++ b/gcc/tree-ssa-math-opts.cc @@ -3834,6 +3834,7 @@ maybe_optimize_guarding_check (vec &mul_stmts, gimple *cond_stmt, else gimple_cond_make_false (zero_cond); update_stmt (zero_cond); + reset_flow_sensitive_info_in_bb (bb); *cfg_changed = true; } From 5193b9d250a8ecec669a87708a1a98abae94130f Mon Sep 17 00:00:00 2001 From: Matteo Nicoli Date: Sat, 4 Oct 2025 09:22:54 -0600 Subject: [PATCH 076/216] [PATCH][PR tree-optimization/117760] `a != b` implies that a or b is also non-zero Implements a match.pd pattern to optimize the cases found in PR 117760. PR tree-optimization/117760 gcc/ * match.pd: Add simplifications that exploit implied values after logical tests. gcc/testsuite * gcc.dg/int-bwise-opt-1.c: New test. * gcc.dg/int-bwise-opt-2.c: New test. --- gcc/match.pd | 28 +++++++++++++++++++++++ gcc/testsuite/gcc.dg/int-bwise-opt-1.c | 31 ++++++++++++++++++++++++++ gcc/testsuite/gcc.dg/int-bwise-opt-2.c | 15 +++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/int-bwise-opt-1.c create mode 100644 gcc/testsuite/gcc.dg/int-bwise-opt-2.c diff --git a/gcc/match.pd b/gcc/match.pd index b3fd26e18ddd..6f896aa7961c 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -6808,6 +6808,34 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) @2)) ) +#if GIMPLE +/* Given two integers a and b: + (a != b) & ((a|b) != 0) -> (a != b) + (a != b) | ((a|b) != 0) -> ((a|b) != 0) + (a == b) & ((a|b) == 0) -> ((a|b) == 0) + (a == b) | ((a|b) == 0) -> (a == b) + (a != b) & ((a|b) == 0) -> false + (a == b) | ((a|b) != 0) -> true */ +(simplify + (bit_and:c (ne:c @0 @1) (ne (bit_ior @0 @1) integer_zerop)) + (ne @0 @1)) +(simplify + (bit_ior:c (ne:c @0 @1) (ne (bit_ior @0 @1) integer_zerop)) + (ne (bit_ior @0 @1) { integer_zero_node; })) +(simplify + (bit_and:c (eq:c @0 @1) (eq (bit_ior @0 @1) integer_zerop)) + (eq (bit_ior @0 @1) { integer_zero_node; })) +(simplify + (bit_ior:c (eq:c @0 @1) (eq (bit_ior @0 @1) integer_zerop)) + (eq @0 @1)) +(simplify + (bit_and:c (ne:c @0 @1) (eq (bit_ior @0 @1) integer_zerop)) + { build_zero_cst (type); }) +(simplify + (bit_ior:c (eq:c @0 @1) (ne (bit_ior @0 @1) integer_zerop)) + { build_one_cst (type); }) +#endif + /* These was part of minmax phiopt. */ /* Optimize (a CMP b) ? minmax : minmax to minmax, c> */ diff --git a/gcc/testsuite/gcc.dg/int-bwise-opt-1.c b/gcc/testsuite/gcc.dg/int-bwise-opt-1.c new file mode 100644 index 000000000000..11ea9acb3fc2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/int-bwise-opt-1.c @@ -0,0 +1,31 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +int f1(int a, int b) +{ + return (a != b) & ((a | b) != 0); +} + +int f2(int a, int b) +{ + return (a == b) | ((a | b) == 0); +} + +int f3(int a, int b) +{ + return (a != b) & ((a | b) == 0); +} + +int f4(int a, int b) +{ + return (a == b) | ((a | b) != 0); +} + +/* { dg-final { scan-tree-dump-times "\\\|" 0 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "\&" 0 "optimized" } } */ + +/* f3 should fold to `1` (true). */ +/* { dg-final { scan-tree-dump-times "return 1;" 1 "optimized" } } */ + +/* f4 should fold to `0` (false). */ +/* { dg-final { scan-tree-dump-times "return 0;" 1 "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/int-bwise-opt-2.c b/gcc/testsuite/gcc.dg/int-bwise-opt-2.c new file mode 100644 index 000000000000..cc1a48b061a2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/int-bwise-opt-2.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +int f1(int a, int b) +{ + return (a != b) | ((a | b) != 0); +} + +int f2(int a, int b) +{ + return (a == b) & ((a | b) == 0); +} + + /* { dg-final { scan-tree-dump-times "a == b" 0 "optimized" } } */ + /* { dg-final { scan-tree-dump-times "a != b" 0 "optimized" } } */ From 14a825d4891f12ae0e2595b6b08a3555518f5dcb Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Fri, 3 Oct 2025 14:09:57 -0700 Subject: [PATCH 077/216] phiopt: allow store placement of `= {}` [PR122153] Currently cselim and cselim-limited are able to handle stores which have a rhs of a ssa name or a constant. This extends that support to also allow `= {}`. The sink pass will also commonalize the store but in some cases this is too late in the pipeline. Doing it in phiopt1 allows for better inlining estimates too. This is also the first step in improving/fixing PR 122083 such that we do an early inlining which is now not happening for GCC 15+. Bootstrapped and tested on x86_64-linux-gnu. PR tree-optimization/122153 gcc/ChangeLog: * tree-ssa-phiopt.cc (cond_if_else_store_replacement_1): Handle stores of empty constructors too. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/pr122153-1.c: New test. Signed-off-by: Andrew Pinski --- gcc/testsuite/gcc.dg/tree-ssa/pr122153-1.c | 30 +++++++++++++++ gcc/tree-ssa-phiopt.cc | 44 ++++++++++++++++------ 2 files changed, 62 insertions(+), 12 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr122153-1.c diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr122153-1.c b/gcc/testsuite/gcc.dg/tree-ssa/pr122153-1.c new file mode 100644 index 000000000000..d6e7527aaa6f --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr122153-1.c @@ -0,0 +1,30 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-phiopt1" } */ +/* PR tree-optimization/122153 */ +struct s1 +{ + int t; +}; +void g(struct s1*); +struct s1 f(int *a, int c, int d) +{ + struct s1 r; + int t1; + if (c < d) + { + r = (struct s1){}; + t1 = c; + } + else + { + r = (struct s1){}; + t1 = d; + } + g(&r); + r.t = t1; + return r; +} +/* the `r = {};` store should be commonialized out of the conditional + and produce a MIN_EXPR in phiopt1. */ + +/* { dg-final { scan-tree-dump "MIN_EXPR" "phiopt1" } } */ diff --git a/gcc/tree-ssa-phiopt.cc b/gcc/tree-ssa-phiopt.cc index e1c9e1296c0e..bdd1f7396da2 100644 --- a/gcc/tree-ssa-phiopt.cc +++ b/gcc/tree-ssa-phiopt.cc @@ -3645,6 +3645,7 @@ cond_if_else_store_replacement_1 (basic_block then_bb, basic_block else_bb, gimple_stmt_iterator gsi; gphi *newphi; gassign *new_stmt; + bool empty_constructor = false; if (then_assign == NULL || !gimple_assign_single_p (then_assign) @@ -3659,8 +3660,7 @@ cond_if_else_store_replacement_1 (basic_block then_bb, basic_block else_bb, return false; lhs = gimple_assign_lhs (then_assign); - if (!is_gimple_reg_type (TREE_TYPE (lhs)) - || !operand_equal_p (lhs, gimple_assign_lhs (else_assign), 0)) + if (!operand_equal_p (lhs, gimple_assign_lhs (else_assign), 0)) return false; lhs_base = get_base_address (lhs); @@ -3673,6 +3673,16 @@ cond_if_else_store_replacement_1 (basic_block then_bb, basic_block else_bb, then_locus = gimple_location (then_assign); else_locus = gimple_location (else_assign); + if (!is_gimple_reg_type (TREE_TYPE (lhs))) + { + if (!operand_equal_p (then_rhs, else_rhs)) + return false; + /* Currently only handle commoning of `= {}`. */ + if (TREE_CODE (then_rhs) != CONSTRUCTOR) + return false; + empty_constructor = true; + } + if (dump_file && (dump_flags & TDF_DETAILS)) { fprintf(dump_file, "factoring out stores:\n\tthen:\n"); @@ -3699,12 +3709,17 @@ cond_if_else_store_replacement_1 (basic_block then_bb, basic_block else_bb, /* 2) Create a PHI node at the join block, with one argument holding the old RHS, and the other holding the temporary where we stored the old memory contents. */ - name = make_temp_ssa_name (TREE_TYPE (lhs), NULL, "cstore"); - newphi = create_phi_node (name, join_bb); - add_phi_arg (newphi, then_rhs, EDGE_SUCC (then_bb, 0), then_locus); - add_phi_arg (newphi, else_rhs, EDGE_SUCC (else_bb, 0), else_locus); + if (empty_constructor) + name = unshare_expr (then_rhs); + else + { + name = make_temp_ssa_name (TREE_TYPE (lhs), NULL, "cstore"); + newphi = create_phi_node (name, join_bb); + add_phi_arg (newphi, then_rhs, EDGE_SUCC (then_bb, 0), then_locus); + add_phi_arg (newphi, else_rhs, EDGE_SUCC (else_bb, 0), else_locus); + } - new_stmt = gimple_build_assign (lhs, gimple_phi_result (newphi)); + new_stmt = gimple_build_assign (lhs, name); /* Update the vdef for the new store statement. */ tree newvphilhs = make_ssa_name (gimple_vop (cfun)); tree vdef = gimple_phi_result (vphi); @@ -3715,16 +3730,21 @@ cond_if_else_store_replacement_1 (basic_block then_bb, basic_block else_bb, update_stmt (vphi); if (dump_file && (dump_flags & TDF_DETAILS)) { - fprintf(dump_file, "to use phi:\n"); - print_gimple_stmt (dump_file, newphi, 0, - TDF_VOPS|TDF_MEMSYMS); - fprintf(dump_file, "\n"); + if (!empty_constructor) + { + fprintf(dump_file, "to use phi:\n"); + print_gimple_stmt (dump_file, newphi, 0, + TDF_VOPS|TDF_MEMSYMS); + fprintf(dump_file, "\n"); + } + else + fprintf(dump_file, "to:\n"); print_gimple_stmt (dump_file, new_stmt, 0, TDF_VOPS|TDF_MEMSYMS); fprintf(dump_file, "\n\n"); } - /* 3) Insert that PHI node. */ + /* 3) Insert that new store. */ gsi = gsi_after_labels (join_bb); if (gsi_end_p (gsi)) { From 7609f37f07e13970f69914afdba79cbd4de8cd5b Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Fri, 3 Oct 2025 17:51:33 -0700 Subject: [PATCH 078/216] forwprop: Refine when TODO_update_address_taken is set [PR122143] As requested in https://inbox.sourceware.org/gcc-patches/CAFiYyc162F+i=majzQqutFcq1y=DtRoJVC4z+V3gP8N7uTnFLA@mail.gmail.com/T/#u. This refines when TODO_update_address_taken is set so it only set when folding of a call. This should speed up compile time slightly if we don't fold a call during the last forwprop. Boostrapped and tested on x86_64-linux-gnu. PR tree-optimization/122143 gcc/ChangeLog: * tree-ssa-forwprop.cc (pass_forwprop::execute): Restrict setting TODO_update_address_taken only when the statement was a call before fold_stmt. Signed-off-by: Andrew Pinski --- gcc/tree-ssa-forwprop.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc index 2c6e1eab9cdb..ad09f7334cc6 100644 --- a/gcc/tree-ssa-forwprop.cc +++ b/gcc/tree-ssa-forwprop.cc @@ -5451,7 +5451,8 @@ pass_forwprop::execute (function *fun) do { gimple *orig_stmt = stmt = gsi_stmt (gsi); - bool was_noreturn = (is_gimple_call (stmt) + bool was_call = is_gimple_call (stmt); + bool was_noreturn = (was_call && gimple_call_noreturn_p (stmt)); changed = false; @@ -5465,8 +5466,10 @@ pass_forwprop::execute (function *fun) changed = true; /* There is no updating of the address taken after the last forwprop so update - the addresses when a folding happened. */ - if (last_p) + the addresses when a folding happened to a call. + The va_* builtins can remove taking of the address so + can the sincos->cexpi transformation. See PR 39643 and PR 20983. */ + if (was_call && last_p) todoflags |= TODO_update_address_taken; stmt = gsi_stmt (gsi); /* Cleanup the CFG if we simplified a condition to From e3431c6fd4691d5a0c48ee78869e5f9a79f217c3 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Fri, 3 Oct 2025 21:16:19 +0200 Subject: [PATCH 079/216] Fortran: fix issue with I/O of array pointer [PR107968] PR fortran/107968 gcc/fortran/ChangeLog: * trans-io.cc (gfc_trans_transfer): Also scalarize I/O of section of an array pointer. gcc/testsuite/ChangeLog: * gfortran.dg/implied_do_io_9.f90: New test. --- gcc/fortran/trans-io.cc | 4 +- gcc/testsuite/gfortran.dg/implied_do_io_9.f90 | 72 +++++++++++++++++++ 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/implied_do_io_9.f90 diff --git a/gcc/fortran/trans-io.cc b/gcc/fortran/trans-io.cc index df2fef70172a..9360bddb30a7 100644 --- a/gcc/fortran/trans-io.cc +++ b/gcc/fortran/trans-io.cc @@ -2646,7 +2646,9 @@ gfc_trans_transfer (gfc_code * code) && ((expr->symtree->n.sym->ts.type == BT_DERIVED && expr->ts.deferred) || (expr->symtree->n.sym->assoc && expr->symtree->n.sym->assoc->variable) - || gfc_expr_attr (expr).pointer)) + || gfc_expr_attr (expr).pointer + || (expr->symtree->n.sym->attr.pointer + && gfc_expr_attr (expr).target))) goto scalarize; /* With array-bounds checking enabled, force scalarization in some diff --git a/gcc/testsuite/gfortran.dg/implied_do_io_9.f90 b/gcc/testsuite/gfortran.dg/implied_do_io_9.f90 new file mode 100644 index 000000000000..5180b8ace66c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/implied_do_io_9.f90 @@ -0,0 +1,72 @@ +! { dg-do run } +! { dg-additional-options "-O2" } +! +! PR fortran/107968 +! +! Verify that array I/O optimization is not used for a section +! of an array pointer as the pointee can be non-contiguous +! +! Contributed by Nils Dreier + +PROGRAM foo + implicit none + + TYPE t_geographical_coordinates + REAL :: lon + REAL :: lat + END TYPE t_geographical_coordinates + + TYPE t_vertices + REAL, POINTER :: vlon(:) => null() + REAL, POINTER :: vlat(:) => null() + END TYPE t_vertices + + TYPE(t_geographical_coordinates), TARGET :: vertex(2) + TYPE(t_vertices), POINTER :: vertices_pointer + TYPE(t_vertices), TARGET :: vertices_target + + character(24) :: s0, s1, s2 + character(*), parameter :: fmt = '(2f8.3)' + + ! initialization + vertex%lon = [1,3] + vertex%lat = [2,4] + + ! obtain pointer to (non-contiguous) field + vertices_target%vlon => vertex%lon + + ! reference output of write + write (s0,fmt) vertex%lon + + ! set pointer vertices_pointer in a subroutine + CALL set_vertices_pointer(vertices_target) + + write (s1,fmt) vertices_pointer%vlon + write (s2,fmt) vertices_pointer%vlon(1:) + if (s1 /= s0 .or. s2 /= s0) then + print *, s0, s1, s2 + stop 3 + end if + +CONTAINS + + SUBROUTINE set_vertices_pointer(vertices) + TYPE(t_vertices), POINTER, INTENT(IN) :: vertices + + vertices_pointer => vertices + + write (s1,fmt) vertices %vlon + write (s2,fmt) vertices %vlon(1:) + if (s1 /= s0 .or. s2 /= s0) then + print *, s0, s1, s2 + stop 1 + end if + + write (s1,fmt) vertices_pointer%vlon + write (s2,fmt) vertices_pointer%vlon(1:) + if (s1 /= s0 .or. s2 /= s0) then + print *, s0, s1, s2 + stop 2 + end if + END SUBROUTINE set_vertices_pointer +END PROGRAM foo From 49aed8ceb5d3ee8af96ebd7edd5d250b682697cd Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Sun, 5 Oct 2025 10:25:14 +0200 Subject: [PATCH 080/216] Ada: Remove useless Makefile variable gcc/ada PR ada/118343 * Makefile.rtl (LLVM_BUILD): Delete. --- gcc/ada/Makefile.rtl | 6 ------ 1 file changed, 6 deletions(-) diff --git a/gcc/ada/Makefile.rtl b/gcc/ada/Makefile.rtl index 0fa2c51ceb6c..2ccb3aabe1cb 100644 --- a/gcc/ada/Makefile.rtl +++ b/gcc/ada/Makefile.rtl @@ -26,12 +26,6 @@ ifndef ADAC ADAC=$(CC) endif -ifeq ($(LLVM_CONFIG),) -LLVM_BUILD := $(shell $(ADAC) -v | grep ^llvm-gcc) -else -LLVM_BUILD := llvm-gcc -endif - # Objects needed only for tasking GNATRTL_TASKING_OBJS= \ a-dispat$(objext) \ From 57a2bdc28f8c24fa93ea2e6942e6a264afaeee5c Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Sun, 5 Oct 2025 10:42:25 +0200 Subject: [PATCH 081/216] Add testcase for PR ada/113536 gcc/testsuite/ PR ada/113536 * gnat.dg/reduce2.adb: New test. --- gcc/testsuite/gnat.dg/reduce2.adb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 gcc/testsuite/gnat.dg/reduce2.adb diff --git a/gcc/testsuite/gnat.dg/reduce2.adb b/gcc/testsuite/gnat.dg/reduce2.adb new file mode 100644 index 000000000000..0246709ec43a --- /dev/null +++ b/gcc/testsuite/gnat.dg/reduce2.adb @@ -0,0 +1,18 @@ +-- { dg-do compile } +-- { dg-options "-gnat2022" } + +procedure Reduce2 is + + subtype Value is Natural range 0 .. 255; + + function Do_Something (Accumulator : Value; Symbol : Character) return Value + is (((Accumulator + Character'Pos (Symbol)) * 17) mod 256); + + function Do_It_By_Reduction (S : String) return Value is + (S'Reduce (Do_Something, 0)); + + Test_It : constant Value := Do_It_By_Reduction ("Hello, world!"); + +begin + null; +end; From 865791ae8b1ed7f22a54adb0f9940ede3375c81f Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Sun, 5 Oct 2025 11:10:17 +0200 Subject: [PATCH 082/216] Ada: Report that -gnatyz is included in -gnatyg gcc/ada/ PR ada/112446 * usage.adb (Usage): Add 'z' to the list of 'g' style. --- gcc/ada/usage.adb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/ada/usage.adb b/gcc/ada/usage.adb index e59f32448d17..bf8417a92c85 100644 --- a/gcc/ada/usage.adb +++ b/gcc/ada/usage.adb @@ -674,7 +674,7 @@ begin Write_Line (" D check declared identifiers in mixed case"); Write_Line (" e check end/exit labels present"); Write_Line (" f check no form feeds/vertical tabs in source"); - Write_Line (" g check standard GNAT style rules, same as ydISux"); + Write_Line (" g check GNAT style rules, same as ydISuxz"); Write_Line (" h check no horizontal tabs in source"); Write_Line (" i check if-then layout"); Write_Line (" I check mode in"); From 6fdee070ff386bb5c284234afa3dfda9ba3d22db Mon Sep 17 00:00:00 2001 From: Franck Behaghel Date: Sun, 5 Oct 2025 12:17:10 +0200 Subject: [PATCH 083/216] Ada: Fix assertion failure on allocators for discriminated type with default This is an incorrect node sharing for allocators built for a discriminated type with default values. gcc/ada/ PR ada/110314 * sem_ch4.adb (Analyze_Allocator): Add call to New_Copy_Tree. gcc/testsuite/ * gnat.dg/allocator3.adb: New test. --- gcc/ada/sem_ch4.adb | 3 ++- gcc/testsuite/gnat.dg/allocator3.adb | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gnat.dg/allocator3.adb diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb index 61a53f56a98c..5704bf142c84 100644 --- a/gcc/ada/sem_ch4.adb +++ b/gcc/ada/sem_ch4.adb @@ -630,7 +630,8 @@ package body Sem_Ch4 is begin while Present (Discr) loop - Append (Discriminant_Default_Value (Discr), Constr); + Append_To (Constr, + New_Copy_Tree (Discriminant_Default_Value (Discr))); Next_Discriminant (Discr); end loop; diff --git a/gcc/testsuite/gnat.dg/allocator3.adb b/gcc/testsuite/gnat.dg/allocator3.adb new file mode 100644 index 000000000000..ac04344fbb1d --- /dev/null +++ b/gcc/testsuite/gnat.dg/allocator3.adb @@ -0,0 +1,23 @@ +-- { dg-do compile } + +with Ada.Containers.Synchronized_Queue_Interfaces; +with Ada.Containers.Unbounded_Synchronized_Queues; + +procedure Allocator3 is + + package Queue_Interfaces is + new Ada.Containers.Synchronized_Queue_Interfaces (Integer); + + package Synchronized_Queues is + new Ada.Containers.Unbounded_Synchronized_Queues (Queue_Interfaces); + + subtype Queue is Synchronized_Queues.Queue; + + type Access_Type is access all Queue; + + Q1 : Access_Type := new Queue; + Q2 : Access_Type := new Queue; + +begin + null; +end; From 000cde096d2f60b968890f3075e839bf19c7f4a2 Mon Sep 17 00:00:00 2001 From: Nathaniel Shead Date: Fri, 26 Sep 2025 22:03:24 +1000 Subject: [PATCH 084/216] c++/modules: Also check conflicting internal-linkage entities While investigating another issue I noticed that the condition in check_module_override seems incorrect: the wording in [basic.link] p11 has no exceptions for internal-linkage entities. gcc/cp/ChangeLog: * name-lookup.cc (check_module_override): Remove check for TREE_PUBLIC when checking mergeable entities. gcc/testsuite/ChangeLog: * g++.dg/modules/namespace-1_c.C: Adjust to expect errors. * g++.dg/modules/namespace-2_b.C: Likewise. * g++.dg/modules/namespace-3_a.C: Removed. * g++.dg/modules/namespace-3_b.C: Removed. Signed-off-by: Nathaniel Shead Reviewed-by: Jason Merrill --- gcc/cp/name-lookup.cc | 2 +- gcc/testsuite/g++.dg/modules/namespace-1_c.C | 14 ++++--------- gcc/testsuite/g++.dg/modules/namespace-2_b.C | 13 +----------- gcc/testsuite/g++.dg/modules/namespace-3_a.C | 21 -------------------- gcc/testsuite/g++.dg/modules/namespace-3_b.C | 12 ----------- 5 files changed, 6 insertions(+), 56 deletions(-) delete mode 100644 gcc/testsuite/g++.dg/modules/namespace-3_a.C delete mode 100644 gcc/testsuite/g++.dg/modules/namespace-3_b.C diff --git a/gcc/cp/name-lookup.cc b/gcc/cp/name-lookup.cc index 8d7fc06f6988..85c7fcc7a6e8 100644 --- a/gcc/cp/name-lookup.cc +++ b/gcc/cp/name-lookup.cc @@ -3882,7 +3882,7 @@ check_module_override (tree decl, tree mvec, bool hiding, } } - if (TREE_PUBLIC (scope) && TREE_PUBLIC (STRIP_TEMPLATE (decl)) + if (TREE_PUBLIC (scope) /* Namespaces are dealt with specially in make_namespace_finish. */ && !(TREE_CODE (decl) == NAMESPACE_DECL && !DECL_NAMESPACE_ALIAS (decl))) diff --git a/gcc/testsuite/g++.dg/modules/namespace-1_c.C b/gcc/testsuite/g++.dg/modules/namespace-1_c.C index 748ef5d79a4b..e4f81b6bea66 100644 --- a/gcc/testsuite/g++.dg/modules/namespace-1_c.C +++ b/gcc/testsuite/g++.dg/modules/namespace-1_c.C @@ -1,13 +1,7 @@ // { dg-additional-options "-fmodules-ts" } -// The indirect import of frob, with namespaces impl and ompl doesn't -// affect us. -static int impl; -import Frink; -static int ompl; +static int impl; // IF but no diagnostic required: impl@Frob not reachable from here + +import Frink; -void corge (int x) -{ - impl = x; - ompl = frab (x); -} +static int ompl; // { dg-error "different kind" } diff --git a/gcc/testsuite/g++.dg/modules/namespace-2_b.C b/gcc/testsuite/g++.dg/modules/namespace-2_b.C index 6ab5113c23ab..d71c630c75e6 100644 --- a/gcc/testsuite/g++.dg/modules/namespace-2_b.C +++ b/gcc/testsuite/g++.dg/modules/namespace-2_b.C @@ -2,16 +2,5 @@ import foo; -static int also_not_exported; // ok - -void X () -{ - implicit_export::bob (); -} - +static int also_not_exported; // { dg-error "different kind" } static int implicit_export; // { dg-error "different kind" } - -void Y () -{ - also_not_exported = 1; -} diff --git a/gcc/testsuite/g++.dg/modules/namespace-3_a.C b/gcc/testsuite/g++.dg/modules/namespace-3_a.C deleted file mode 100644 index 8e9508d7ff8c..000000000000 --- a/gcc/testsuite/g++.dg/modules/namespace-3_a.C +++ /dev/null @@ -1,21 +0,0 @@ -// Check namespace needed only by internal reference is not made visible -// { dg-additional-options "-fmodules-ts" } - -export module frob; -// { dg-module-cmi frob } - -namespace silent -{ - namespace inner - { - static int X () - { - return 1; - } - } -} - -export int f (int y) -{ - return y + silent::inner::X (); -} diff --git a/gcc/testsuite/g++.dg/modules/namespace-3_b.C b/gcc/testsuite/g++.dg/modules/namespace-3_b.C deleted file mode 100644 index f779ffe8c8f8..000000000000 --- a/gcc/testsuite/g++.dg/modules/namespace-3_b.C +++ /dev/null @@ -1,12 +0,0 @@ -// { dg-additional-options "-fmodules-ts" } - -import frob; - -int x = silent; // { dg-error "not declared" } - -static int silent; - -int user () -{ - return f (silent); -} From fa6544ef5f50a824cabeda4906453d4545fbf66f Mon Sep 17 00:00:00 2001 From: Nathaniel Shead Date: Fri, 26 Sep 2025 22:10:15 +1000 Subject: [PATCH 085/216] c++/modules: Avoid ICE when redefining a type reachable via import [PR122053] This shouldn't be an error (see PR c++/99000), but we can at least avoid the ICE by ensuring that we load any pending type definition before calling pushdecl, so that we error before committing to filling in the class definition. Something like this will probably still be helpful even for implementing textual deduplication as we now at least ensure check_module_override is called for this case. PR c++/122053 gcc/cp/ChangeLog: * name-lookup.cc (pushtag): Load any imported definition of type before calling pushdecl. gcc/testsuite/ChangeLog: * g++.dg/modules/pr122053_a.C: New test. * g++.dg/modules/pr122053_b.C: New test. Signed-off-by: Nathaniel Shead Reviewed-by: Jason Merrill --- gcc/cp/name-lookup.cc | 6 ++++++ gcc/testsuite/g++.dg/modules/pr122053_a.C | 10 ++++++++++ gcc/testsuite/g++.dg/modules/pr122053_b.C | 9 +++++++++ 3 files changed, 25 insertions(+) create mode 100644 gcc/testsuite/g++.dg/modules/pr122053_a.C create mode 100644 gcc/testsuite/g++.dg/modules/pr122053_b.C diff --git a/gcc/cp/name-lookup.cc b/gcc/cp/name-lookup.cc index 85c7fcc7a6e8..09d16db2ead8 100644 --- a/gcc/cp/name-lookup.cc +++ b/gcc/cp/name-lookup.cc @@ -8597,6 +8597,12 @@ pushtag (tree name, tree type, TAG_how how) } else { + /* If an import is going to provide a definition for this tag, + load it now so that we don't get confused later when processing + this tag's definition. */ + if (modules_p ()) + lazy_load_pendings (decl); + decl = do_pushdecl_with_scope (decl, b, /*hiding=*/(how == TAG_how::HIDDEN_FRIEND)); if (decl == error_mark_node) diff --git a/gcc/testsuite/g++.dg/modules/pr122053_a.C b/gcc/testsuite/g++.dg/modules/pr122053_a.C new file mode 100644 index 000000000000..2a8748c6be01 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/pr122053_a.C @@ -0,0 +1,10 @@ +// PR c++/122053 +// { dg-additional-options "-fmodules -Wno-global-module" } +// { dg-module-cmi M } + +module; +struct mytime { + long a, b; +}; +export module M; +export mytime foo(); diff --git a/gcc/testsuite/g++.dg/modules/pr122053_b.C b/gcc/testsuite/g++.dg/modules/pr122053_b.C new file mode 100644 index 000000000000..a7084b74040a --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/pr122053_b.C @@ -0,0 +1,9 @@ +// PR c++/122053 +// { dg-additional-options "-fmodules" } +// Test we don't ICE when redefining a type coming from an import. + +import M; +struct mytime { // { dg-bogus "conflicting" "PR99000" { xfail *-*-* } } + long a, b; +}; +mytime m = foo(); // { dg-bogus "" "PR99000" { xfail *-*-* } } From ddd69ed8f85e7ce488a8c7638cd3c958938dfa33 Mon Sep 17 00:00:00 2001 From: Pan Li Date: Fri, 26 Sep 2025 23:12:27 +0800 Subject: [PATCH 086/216] ISC-V: Add test for vec_duplicate + vwaddu.wv signed combine with GR2VR cost 0, 1 and 15 Add asm dump check and run test for vec_duplicate + vwaddu.wv combine to vwaddu.wx, with the GR2VR cost is 0, 2 and 15. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c: Add asm check for vwaddu.wx. * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h: Add test helper macros. * gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h: Add test helper macros and data. * gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_wx_run.h: New test. * gcc.target/riscv/rvv/autovec/vx_vf/wx_vwaddu-run-1-u64.c: New test. Signed-off-by: Pan Li --- .../riscv/rvv/autovec/vx_vf/vx-1-u16.c | 3 +- .../riscv/rvv/autovec/vx_vf/vx-1-u32.c | 3 +- .../riscv/rvv/autovec/vx_vf/vx-1-u64.c | 1 + .../riscv/rvv/autovec/vx_vf/vx-2-u16.c | 1 + .../riscv/rvv/autovec/vx_vf/vx-2-u32.c | 1 + .../riscv/rvv/autovec/vx_vf/vx-2-u64.c | 1 + .../riscv/rvv/autovec/vx_vf/vx-3-u16.c | 1 + .../riscv/rvv/autovec/vx_vf/vx-3-u32.c | 1 + .../riscv/rvv/autovec/vx_vf/vx-3-u64.c | 1 + .../riscv/rvv/autovec/vx_vf/vx_widen.h | 18 +++++ .../riscv/rvv/autovec/vx_vf/vx_widen_data.h | 77 ++++++++++++++++++- .../riscv/rvv/autovec/vx_vf/vx_widen_wx_run.h | 27 +++++++ .../rvv/autovec/vx_vf/wx_vwaddu-run-1-u64.c | 18 +++++ 13 files changed, 149 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_wx_run.h create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/wx_vwaddu-run-1-u64.c diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c index c86461beadf2..76ef2d3f0206 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c @@ -12,7 +12,7 @@ TEST_BINARY_VX_UNSIGNED_0(T) TEST_TERNARY_VX_UNSIGNED_0(T) TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) -/* { dg-final { scan-assembler-times {vadd.vx} 1 } } */ +/* { dg-final { scan-assembler-times {vadd.vx} 2 } } */ /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */ /* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */ /* { dg-final { scan-assembler-times {vand.vx} 1 } } */ @@ -32,3 +32,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-not {vwaddu.vx} } } */ /* { dg-final { scan-assembler-not {vwsubu.vx} } } */ /* { dg-final { scan-assembler-not {vwmulu.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.wx} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c index 90de1974ab1f..55fa57dec35d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c @@ -12,7 +12,7 @@ TEST_BINARY_VX_UNSIGNED_0(T) TEST_TERNARY_VX_UNSIGNED_0(T) TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) -/* { dg-final { scan-assembler-times {vadd.vx} 1 } } */ +/* { dg-final { scan-assembler-times {vadd.vx} 2 } } */ /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */ /* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */ /* { dg-final { scan-assembler-times {vand.vx} 1 } } */ @@ -32,3 +32,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-not {vwaddu.vx} } } */ /* { dg-final { scan-assembler-not {vwsubu.vx} } } */ /* { dg-final { scan-assembler-not {vwmulu.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.wx} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c index 522ddd19ccd4..d5176834494e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c @@ -35,3 +35,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-times {vwaddu.vx} 1 } } */ /* { dg-final { scan-assembler-times {vwsubu.vx} 1 } } */ /* { dg-final { scan-assembler-times {vwmulu.vx} 1 } } */ +/* { dg-final { scan-assembler-times {vwaddu.wx} 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c index 6ea17bb83d9b..a234505ce81c 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c @@ -32,3 +32,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-not {vwaddu.vx} } } */ /* { dg-final { scan-assembler-not {vwsubu.vx} } } */ /* { dg-final { scan-assembler-not {vwmulu.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.wx} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c index 8b8fba54b72a..a46c874d0a44 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c @@ -32,3 +32,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-not {vwaddu.vx} } } */ /* { dg-final { scan-assembler-not {vwsubu.vx} } } */ /* { dg-final { scan-assembler-not {vwmulu.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.wx} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c index 6f66de906a29..94ce774fc2aa 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c @@ -32,3 +32,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-not {vwaddu.vx} } } */ /* { dg-final { scan-assembler-not {vwsubu.vx} } } */ /* { dg-final { scan-assembler-not {vwmulu.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.wx} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c index cd129f1f50ea..a1278cec61d4 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c @@ -32,3 +32,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-not {vwaddu.vx} } } */ /* { dg-final { scan-assembler-not {vwsubu.vx} } } */ /* { dg-final { scan-assembler-not {vwmulu.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.wx} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c index 48aeed71eb9c..910fa6e31580 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c @@ -32,3 +32,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-not {vwaddu.vx} } } */ /* { dg-final { scan-assembler-not {vwsubu.vx} } } */ /* { dg-final { scan-assembler-not {vwmulu.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.wx} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c index b88c350acf3e..9ce0211603ec 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c @@ -32,3 +32,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-not {vwaddu.vx} } } */ /* { dg-final { scan-assembler-not {vwsubu.vx} } } */ /* { dg-final { scan-assembler-not {vwmulu.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.wx} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h index 998c05961ab0..03fba3c2a0c4 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h @@ -28,9 +28,27 @@ test_vx_widen_binary_##NAME##_##WT##_##NT##_case_0 (WT * restrict vd, \ #define RUN_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, NAME, vd, vs2, rs1, n) \ RUN_VX_WIDEN_BINARY_CASE_0(WT, NT, NAME, vd, vs2, rs1, n) +#define DEF_VX_WIDEN_BINARY_CASE_1(WT, NT, OP, NAME) \ +void \ +test_vx_widen_binary_##NAME##_##WT##_##NT##_case_1 (WT * restrict vd, \ + WT * restrict vs2, \ + NT rs1, unsigned n) \ +{ \ + for (unsigned i = 0; i < n; i++) \ + vd[i] = vs2[i] OP (WT)rs1; \ +} + +#define DEF_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, OP, NAME) \ + DEF_VX_WIDEN_BINARY_CASE_1(WT, NT, OP, NAME) +#define RUN_VX_WIDEN_BINARY_CASE_1(WT, NT, NAME, vd, vs2, rs1, n) \ + test_vx_widen_binary_##NAME##_##WT##_##NT##_case_1(vd, vs2, rs1, n) +#define RUN_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, NAME, vd, vs2, rs1, n) \ + RUN_VX_WIDEN_BINARY_CASE_1(WT, NT, NAME, vd, vs2, rs1, n) + #define TEST_WIDEN_BINARY_VX_UNSIGNED(WT, NT) \ DEF_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, +, add) \ DEF_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, -, sub) \ DEF_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, *, mul) \ + DEF_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, +, add) \ #endif diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h index 5b49083abe72..faf46a81e6ab 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h @@ -4,7 +4,7 @@ #define N 16 #define DEF_BINARY_WIDEN_STRUCT_0_NAME(WT, NT, NAME) \ - binary_widen_##WT##_##NT##_##NAME##_s + binary_widen_##WT##_##NT##_##NAME##_s_0 #define DEF_BINARY_WIDEN_STRUCT_0_NAME_WRAP(WT, NT, NAME) \ DEF_BINARY_WIDEN_STRUCT_0_NAME(WT, NT, NAME) @@ -14,7 +14,7 @@ DEF_BINARY_WIDEN_STRUCT_0_TYPE(WT, NT, NAME) #define DEF_BINARY_WIDEN_STRUCT_0_VAR(WT, NT, NAME) \ - binary_widen_##WT##_##NT##_##NAME##_data + binary_widen_##WT##_##NT##_##NAME##_data_0 #define DEF_BINARY_WIDEN_STRUCT_0_VAR_WRAP(WT, NT, NAME) \ DEF_BINARY_WIDEN_STRUCT_0_VAR(WT, NT, NAME) @@ -24,6 +24,27 @@ #define DEF_BINARY_WIDEN_STRUCT_0_DECL_WRAP(WT, NT, NAME) \ DEF_BINARY_WIDEN_STRUCT_0_DECL(WT, NT, NAME) +#define DEF_BINARY_WIDEN_STRUCT_1_NAME(WT, NT, NAME) \ + binary_widen_##WT##_##NT##_##NAME##_s_1 +#define DEF_BINARY_WIDEN_STRUCT_1_NAME_WRAP(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_1_NAME(WT, NT, NAME) + +#define DEF_BINARY_WIDEN_STRUCT_1_TYPE(WT, NT, NAME) \ + struct DEF_BINARY_WIDEN_STRUCT_1_NAME_WRAP(WT, NT, NAME) +#define DEF_BINARY_WIDEN_STRUCT_1_TYPE_WRAP(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_1_TYPE(WT, NT, NAME) + +#define DEF_BINARY_WIDEN_STRUCT_1_VAR(WT, NT, NAME) \ + binary_widen_##WT##_##NT##_##NAME##_data_1 +#define DEF_BINARY_WIDEN_STRUCT_1_VAR_WRAP(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_1_VAR(WT, NT, NAME) + +#define DEF_BINARY_WIDEN_STRUCT_1_DECL(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_1_TYPE_WRAP(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_1_VAR_WRAP(WT, NT, NAME) +#define DEF_BINARY_WIDEN_STRUCT_1_DECL_WRAP(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_1_DECL(WT, NT, NAME) + #define DEF_BINARY_WIDEN_STRUCT_0(WT, NT, NAME) \ DEF_BINARY_WIDEN_STRUCT_0_TYPE_WRAP(WT, NT, NAME) \ { \ @@ -39,6 +60,19 @@ DEF_BINARY_WIDEN_STRUCT_0_WRAP(uint64_t, uint32_t, add) DEF_BINARY_WIDEN_STRUCT_0_WRAP(uint64_t, uint32_t, sub) DEF_BINARY_WIDEN_STRUCT_0_WRAP(uint64_t, uint32_t, mul) +#define DEF_BINARY_WIDEN_STRUCT_1(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_1_TYPE_WRAP(WT, NT, NAME) \ + { \ + WT vs2[N]; \ + NT rs1; \ + WT expect[N]; \ + WT vd[N]; \ + }; +#define DEF_BINARY_WIDEN_STRUCT_1_WRAP(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_1(WT, NT, NAME) + +DEF_BINARY_WIDEN_STRUCT_1_WRAP(uint64_t, uint32_t, add) + DEF_BINARY_WIDEN_STRUCT_0_DECL_WRAP(uint64_t, uint32_t, add)[] = { { /* vs2 */ @@ -156,4 +190,43 @@ DEF_BINARY_WIDEN_STRUCT_0_DECL_WRAP(uint64_t, uint32_t, mul)[] = { }, }; +DEF_BINARY_WIDEN_STRUCT_1_DECL_WRAP(uint64_t, uint32_t, add)[] = { + { + /* vs2 */ + { + 1, 1, 1, 1, + 0, 0, 0, 0, + 2147483647, 2147483647, 2147483647, 2147483647, + 2147483649, 2147483649, 2147483649, 2147483649, + }, + /* rs1 */ + 2147483647, + /* expect */ + { + 2147483648, 2147483648, 2147483648, 2147483648, + 2147483647, 2147483647, 2147483647, 2147483647, + 4294967294, 4294967294, 4294967294, 4294967294, + 4294967296ull, 4294967296ull, 4294967296ull, 4294967296ull, + }, + }, + { + /* vs2 */ + { + 1, 1, 1, 1, + 0, 0, 0, 0, + 4294967295ull, 4294967295ull, 4294967295ull, 4294967295ull, + 4294967296ull, 4294967296ull, 4294967296ull, 4294967296ull, + }, + /* rs1 */ + 4294967295, + /* expect */ + { + 4294967296ull, 4294967296ull, 4294967296ull, 4294967296ull, + 4294967295ull, 4294967295ull, 4294967295ull, 4294967295ull, + 8589934590ull, 8589934590ull, 8589934590ull, 8589934590ull, + 8589934591ull, 8589934591ull, 8589934591ull, 8589934591ull, + }, + }, +}; + #endif diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_wx_run.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_wx_run.h new file mode 100644 index 000000000000..6edd48605044 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_wx_run.h @@ -0,0 +1,27 @@ +#ifndef HAVE_DEFINED_WX_WIDEN_RUN_H +#define HAVE_DEFINED_WX_WIDEN_RUN_H + +int +main () +{ + unsigned i, k; + + for (i = 0; i < sizeof (TEST_DATA) / sizeof (TEST_DATA[0]); i++) + { + DATA_TYPE *data = &TEST_DATA[i]; + WT *vs2 = data->vs2; + NT rs1 = data->rs1; + WT *expect = data->expect; + WT *vd = data->vd; + + TEST_RUN (WT, NT, NAME, vd, vs2, rs1, N); + + for (k = 0; k < N; k++) + if (vd[k] != expect[k]) + __builtin_abort (); + } + + return 0; +} + +#endif diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/wx_vwaddu-run-1-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/wx_vwaddu-run-1-u64.c new file mode 100644 index 000000000000..fe0ea7cb3c93 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/wx_vwaddu-run-1-u64.c @@ -0,0 +1,18 @@ +/* { dg-do run { target { riscv_v } } } */ +/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */ + +#include "vx_widen.h" +#include "vx_widen_data.h" + +#define WT uint64_t +#define NT uint32_t +#define NAME add +#define TEST_DATA DEF_BINARY_WIDEN_STRUCT_1_VAR_WRAP(WT, NT, NAME) +#define DATA_TYPE DEF_BINARY_WIDEN_STRUCT_1_TYPE_WRAP(WT, NT, NAME) + +DEF_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, +, NAME) + +#define TEST_RUN(WT, NT, NAME, vd, vs2, rs1, N) \ + RUN_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, NAME, vd, vs2, rs1, N) + +#include "vx_widen_wx_run.h" From 6e37a5ac736f4ee2ebed9f20187c43d172d1e7cb Mon Sep 17 00:00:00 2001 From: Pan Li Date: Thu, 25 Sep 2025 12:59:07 +0800 Subject: [PATCH 087/216] Match: Refactor unsigned SAT_MUL form 1 mul and widen-mul by for [NFC] Inspired by the previous patch, the form 1 of unsigned SAT_MUL can be mul or widen-mul based. So we can leverage the keyword for to group it, and avoid the pattern duplication. The below test suites are passed for this patch: 1. The rv64gcv fully regression tests. 2. The x86 bootstrap tests. 3. The x86 fully regression tests. gcc/ChangeLog: * match.pd: Refactor the form 1 of SAT_MUL by keyword for. Signed-off-by: Pan Li --- gcc/match.pd | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/gcc/match.pd b/gcc/match.pd index 6f896aa7961c..60bdd3338c20 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -3620,6 +3620,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) /* Saturation mult for unsigned integer. */ (if (INTEGRAL_TYPE_P (type) && TYPE_UNSIGNED (type)) + (for mult_op (mult widen_mult) (match (unsigned_integer_sat_mul @0 @1) /* SAT_U_MUL (X, Y) = { WT x = (WT)a * (WT)b; @@ -3630,9 +3631,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) return (T)x; } while WT is uint128_t, T is uint8_t, uint16_t, uint32_t or uint64_t. */ - (convert (min (widen_mult:c@3 (convert@4 @0) - (convert@5 @1)) - INTEGER_CST@2)) + (convert (min (mult_op:c@3 (convert@4 @0) (convert@5 @1)) INTEGER_CST@2)) (if (types_match (type, @0, @1)) (with { @@ -3640,24 +3639,16 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3)); unsigned cvt4_prec = TYPE_PRECISION (TREE_TYPE (@4)); unsigned cvt5_prec = TYPE_PRECISION (TREE_TYPE (@5)); - wide_int c2 = wi::to_wide (@2); - wide_int max = wi::mask (prec, false, widen_prec); - bool c2_is_max_p = wi::eq_p (c2, max); - bool widen_mult_p = cvt4_prec == cvt5_prec && widen_prec == cvt5_prec * 2; - } - (if (widen_prec > prec && c2_is_max_p && widen_mult_p))))) - (match (unsigned_integer_sat_mul @0 @1) - (convert (min (mult:c@3 (convert @0) (convert @1)) INTEGER_CST@2)) - (if (types_match (type, @0, @1)) - (with - { - unsigned prec = TYPE_PRECISION (type); - unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3)); - wide_int c2 = wi::to_wide (@2); + wide_int max = wi::mask (prec, false, widen_prec); - bool c2_is_max_p = wi::eq_p (c2, max); + bool c2_is_max_p = wi::eq_p (wi::to_wide (@2), max); + + bool widen_mult_p = mult_op == WIDEN_MULT_EXPR && cvt4_prec == cvt5_prec + && widen_prec == cvt5_prec * 2 && widen_prec > prec; + bool mult_p = mult_op == MULT_EXPR && cvt4_prec == cvt5_prec + && cvt4_prec == widen_prec && widen_prec > prec; } - (if (widen_prec > prec && c2_is_max_p))))) + (if (c2_is_max_p && (widen_mult_p || mult_p))))))) (match (unsigned_integer_sat_mul @0 @1) /* SAT_U_MUL (X, Y) = { T result; From 4e2a2d6ad2d1bfe1269bc78da4251814505eb42e Mon Sep 17 00:00:00 2001 From: Pan Li Date: Fri, 26 Sep 2025 23:08:20 +0800 Subject: [PATCH 088/216] RISC-V: Combine vec_duplicate + vwaddu.wv to vwaddu.wx on GR2VR cost This patch would like to combine the vec_duplicate + vwaddu.wv to the vwaddu.wx. From example as below code. The related pattern will depend on the cost of vec_duplicate from GR2VR. Then the late-combine will take action if the cost of GR2VR is zero, and reject the combination if the GR2VR cost is greater than zero. Assume we have asm code like below, GR2VR cost is 0. Before this patch: 11 beq a3,zero,.L8 12 vsetvli a5,zero,e32,m1,ta,ma 13 vmv.v.x v2,a2 ... 16 .L3: 17 vsetvli a5,a3,e32,m1,ta,ma ... 22 vwaddu.wv v1,v2,v3 ... 25 bne a3,zero,.L3 After this patch: 11 beq a3,zero,.L8 ... 14 .L3: 15 vsetvli a5,a3,e32,m1,ta,ma ... 20 vwaddu.wx v1,a2,v3 ... 23 bne a3,zero,.L3 Unfortunately, and similar as vwaddu.vv, only widening from uint32_t to uint64_t has the necessary zero-extend during combine, we loss the extend op after expand for any other types. gcc/ChangeLog: * config/riscv/autovec-opt.md (*widen_waddu_wx_): Add new pattern to match vwaddu.wx. Signed-off-by: Pan Li --- gcc/config/riscv/autovec-opt.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/gcc/config/riscv/autovec-opt.md b/gcc/config/riscv/autovec-opt.md index a5eb49cc81ed..d5950ebe3b6b 100644 --- a/gcc/config/riscv/autovec-opt.md +++ b/gcc/config/riscv/autovec-opt.md @@ -1911,6 +1911,26 @@ } [(set_attr "type" "viwalu")]) +(define_insn_and_split "*widen_waddu_wx_" + [(set (match_operand:VWEXTI_D 0 "register_operand") + (any_widen_binop:VWEXTI_D + (vec_duplicate:VWEXTI_D + (any_extend: + (match_operand: 2 "register_operand"))) + (match_operand:VWEXTI_D 1 "register_operand")))] + "TARGET_VECTOR && TARGET_64BIT && can_create_pseudo_p ()" + "#" + "&& 1" + [(const_int 0)] + { + insn_code icode = code_for_pred_single_widen_scalar (PLUS, ZERO_EXTEND, + mode); + riscv_vector::emit_vlmax_insn (icode, riscv_vector::BINARY_OP, operands); + + DONE; + } + [(set_attr "type" "viwalu")]) + ;; ============================================================================= ;; Combine vec_duplicate + op.vv to op.vf ;; Include From ac273977adbe769c9d31708a403122e3b46365d8 Mon Sep 17 00:00:00 2001 From: Sam James Date: Sun, 5 Oct 2025 17:12:21 +0100 Subject: [PATCH 089/216] *: regenerate autotools libatomic/ChangeLog: * Makefile.in: Regenerate. * aclocal.m4: Regenerate. * configure: Regenerate. * testsuite/Makefile.in: Regenerate. libcc1/ChangeLog: * Makefile.in: Regenerate. * aclocal.m4: Regenerate. libffi/ChangeLog: * Makefile.in: Regenerate. * aclocal.m4: Regenerate. * configure: Regenerate. * include/Makefile.in: Regenerate. * man/Makefile.in: Regenerate. * testsuite/Makefile.in: Regenerate. libgcobol/ChangeLog: * Makefile.in: Regenerate. * aclocal.m4: Regenerate. * configure: Regenerate. libgfortran/ChangeLog: * Makefile.in: Regenerate. * aclocal.m4: Regenerate. * configure: Regenerate. libgm2/ChangeLog: * Makefile.in: Regenerate. * aclocal.m4: Regenerate. * configure: Regenerate. * libm2cor/Makefile.in: Regenerate. * libm2iso/Makefile.in: Regenerate. * libm2log/Makefile.in: Regenerate. * libm2min/Makefile.in: Regenerate. * libm2pim/Makefile.in: Regenerate. libgomp/ChangeLog: * Makefile.in: Regenerate. * aclocal.m4: Regenerate. * configure: Regenerate. * testsuite/Makefile.in: Regenerate. libgrust/ChangeLog: * Makefile.in: Regenerate. * aclocal.m4: Regenerate. * configure: Regenerate. * libformat_parser/Makefile.in: Regenerate. * libproc_macro_internal/Makefile.in: Regenerate. libitm/ChangeLog: * Makefile.in: Regenerate. * aclocal.m4: Regenerate. * configure: Regenerate. * testsuite/Makefile.in: Regenerate. libobjc/ChangeLog: * aclocal.m4: Regenerate. * configure: Regenerate. libphobos/ChangeLog: * Makefile.in: Regenerate. * aclocal.m4: Regenerate. * configure: Regenerate. * libdruntime/Makefile.in: Regenerate. * src/Makefile.in: Regenerate. * testsuite/Makefile.in: Regenerate. libquadmath/ChangeLog: * Makefile.in: Regenerate. * aclocal.m4: Regenerate. * configure: Regenerate. libsanitizer/ChangeLog: * Makefile.in: Regenerate. * aclocal.m4: Regenerate. * asan/Makefile.in: Regenerate. * configure: Regenerate. * hwasan/Makefile.in: Regenerate. * interception/Makefile.in: Regenerate. * libbacktrace/Makefile.in: Regenerate. * lsan/Makefile.in: Regenerate. * sanitizer_common/Makefile.in: Regenerate. * tsan/Makefile.in: Regenerate. * ubsan/Makefile.in: Regenerate. libssp/ChangeLog: * Makefile.in: Regenerate. * aclocal.m4: Regenerate. * configure: Regenerate. libstdc++-v3/ChangeLog: * Makefile.in: Regenerate. * aclocal.m4: Regenerate. * configure: Regenerate. * doc/Makefile.in: Regenerate. * include/Makefile.in: Regenerate. * libsupc++/Makefile.in: Regenerate. * po/Makefile.in: Regenerate. * python/Makefile.in: Regenerate. * src/Makefile.in: Regenerate. * src/c++11/Makefile.in: Regenerate. * src/c++17/Makefile.in: Regenerate. * src/c++20/Makefile.in: Regenerate. * src/c++23/Makefile.in: Regenerate. * src/c++26/Makefile.in: Regenerate. * src/c++98/Makefile.in: Regenerate. * src/experimental/Makefile.in: Regenerate. * src/filesystem/Makefile.in: Regenerate. * src/libbacktrace/Makefile.in: Regenerate. * testsuite/Makefile.in: Regenerate. libvtv/ChangeLog: * Makefile.in: Regenerate. * aclocal.m4: Regenerate. * configure: Regenerate. * testsuite/Makefile.in: Regenerate. lto-plugin/ChangeLog: * Makefile.in: Regenerate. * aclocal.m4: Regenerate. * configure: Regenerate. --- libatomic/Makefile.in | 3 + libatomic/aclocal.m4 | 2 + libatomic/configure | 807 ++++++++++++++------ libatomic/testsuite/Makefile.in | 3 + libcc1/Makefile.in | 11 +- libcc1/aclocal.m4 | 10 +- libffi/Makefile.in | 3 + libffi/aclocal.m4 | 2 + libffi/configure | 805 +++++++++++++------ libffi/include/Makefile.in | 3 + libffi/man/Makefile.in | 3 + libffi/testsuite/Makefile.in | 3 + libgcobol/Makefile.in | 5 +- libgcobol/aclocal.m4 | 2 + libgcobol/configure | 405 +++++++++- libgfortran/Makefile.in | 5 +- libgfortran/aclocal.m4 | 2 + libgfortran/configure | 405 +++++++++- libgm2/Makefile.in | 3 + libgm2/aclocal.m4 | 2 + libgm2/configure | 405 +++++++++- libgm2/libm2cor/Makefile.in | 3 + libgm2/libm2iso/Makefile.in | 3 + libgm2/libm2log/Makefile.in | 3 + libgm2/libm2min/Makefile.in | 3 + libgm2/libm2pim/Makefile.in | 3 + libgomp/Makefile.in | 3 + libgomp/aclocal.m4 | 2 + libgomp/configure | 807 ++++++++++++++------ libgomp/testsuite/Makefile.in | 3 + libgrust/Makefile.in | 3 + libgrust/aclocal.m4 | 2 + libgrust/configure | 405 +++++++++- libgrust/libformat_parser/Makefile.in | 3 + libgrust/libproc_macro_internal/Makefile.in | 3 + libitm/Makefile.in | 3 + libitm/aclocal.m4 | 2 + libitm/configure | 807 ++++++++++++++------ libitm/testsuite/Makefile.in | 3 + libobjc/aclocal.m4 | 2 + libobjc/configure | 807 ++++++++++++++------ libphobos/Makefile.in | 3 + libphobos/aclocal.m4 | 2 + libphobos/configure | 405 +++++++++- libphobos/libdruntime/Makefile.in | 3 + libphobos/src/Makefile.in | 3 + libphobos/testsuite/Makefile.in | 3 + libquadmath/Makefile.in | 3 + libquadmath/aclocal.m4 | 2 + libquadmath/configure | 405 +++++++++- libsanitizer/Makefile.in | 3 + libsanitizer/aclocal.m4 | 2 + libsanitizer/asan/Makefile.in | 3 + libsanitizer/configure | 405 +++++++++- libsanitizer/hwasan/Makefile.in | 3 + libsanitizer/interception/Makefile.in | 3 + libsanitizer/libbacktrace/Makefile.in | 3 + libsanitizer/lsan/Makefile.in | 3 + libsanitizer/sanitizer_common/Makefile.in | 3 + libsanitizer/tsan/Makefile.in | 3 + libsanitizer/ubsan/Makefile.in | 3 + libssp/Makefile.in | 3 + libssp/aclocal.m4 | 2 + libssp/configure | 405 +++++++++- libstdc++-v3/Makefile.in | 3 + libstdc++-v3/aclocal.m4 | 2 + libstdc++-v3/configure | 413 +++++++++- libstdc++-v3/doc/Makefile.in | 3 + libstdc++-v3/include/Makefile.in | 3 + libstdc++-v3/libsupc++/Makefile.in | 3 + libstdc++-v3/po/Makefile.in | 3 + libstdc++-v3/python/Makefile.in | 3 + libstdc++-v3/src/Makefile.in | 3 + libstdc++-v3/src/c++11/Makefile.in | 3 + libstdc++-v3/src/c++17/Makefile.in | 3 + libstdc++-v3/src/c++20/Makefile.in | 3 + libstdc++-v3/src/c++23/Makefile.in | 3 + libstdc++-v3/src/c++26/Makefile.in | 3 + libstdc++-v3/src/c++98/Makefile.in | 3 + libstdc++-v3/src/experimental/Makefile.in | 3 + libstdc++-v3/src/filesystem/Makefile.in | 3 + libstdc++-v3/src/libbacktrace/Makefile.in | 3 + libstdc++-v3/testsuite/Makefile.in | 3 + libvtv/Makefile.in | 3 + libvtv/aclocal.m4 | 2 + libvtv/configure | 405 +++++++++- libvtv/testsuite/Makefile.in | 3 + lto-plugin/Makefile.in | 3 + lto-plugin/aclocal.m4 | 2 + lto-plugin/configure | 405 +++++++++- 90 files changed, 7461 insertions(+), 1260 deletions(-) diff --git a/libatomic/Makefile.in b/libatomic/Makefile.in index 4344ac4a2e8f..5f9de22d6c5a 100644 --- a/libatomic/Makefile.in +++ b/libatomic/Makefile.in @@ -104,7 +104,9 @@ target_triplet = @target@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/lthostflags.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -309,6 +311,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libatomic/aclocal.m4 b/libatomic/aclocal.m4 index 80e24219d7d1..91bff17e5ea6 100644 --- a/libatomic/aclocal.m4 +++ b/libatomic/aclocal.m4 @@ -1188,7 +1188,9 @@ AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([../config/acx.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/lthostflags.m4]) m4_include([../config/multi.m4]) diff --git a/libatomic/configure b/libatomic/configure index 67b3a6388d7f..0945b173f6cc 100755 --- a/libatomic/configure +++ b/libatomic/configure @@ -669,12 +669,13 @@ MAINTAINER_MODE_TRUE enable_static enable_shared lt_host_flags -CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL +LLVM_CONFIG +CPP OBJDUMP LN_S ac_ct_DUMPBIN @@ -1612,6 +1613,43 @@ fi } # ac_fn_c_try_compile +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. @@ -1689,43 +1727,6 @@ $as_echo "$ac_res" >&6; } } # ac_fn_c_check_header_compile -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes @@ -6160,29 +6161,191 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= -plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" -for plugin in $plugin_names; do - plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` - if test x$plugin_so = x$plugin; then - plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` - fi - if test x$plugin_so != x$plugin; then - plugin_option="--plugin $plugin_so" - break - fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -6191,7 +6354,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="${ac_tool_prefix}ar" + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -6201,10 +6364,10 @@ IFS=$as_save_IFS fi fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -6212,13 +6375,120 @@ fi fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then @@ -6251,7 +6521,7 @@ $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then - AR="false" + AR="" else case $cross_compiling:$ac_tool_warned in yes:) @@ -6265,19 +6535,257 @@ else AR="$ac_cv_prog_AR" fi -test -z "$AR" && AR=ar -if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" touch conftest.c - $AR $plugin_option rc conftest.a conftest.c + ${AR} $plugin_option rc conftest.a conftest.c if test "$?" != 0; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else - AR="$AR $plugin_option" + plugin_file= fi rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + +plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= +for plugin in $plugin_names; do + plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` + if test x$plugin_so = x$plugin; then + plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` + fi + if test x$plugin_so != x$plugin; then + plugin_option="--plugin $plugin_so" + break + fi +done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +if test -n "$plugin_option"; then + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then + AR="$AR $plugin_option" + fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -6484,9 +6992,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -6813,7 +7327,6 @@ fi - # Check whether --enable-libtool-lock was given. @@ -7639,144 +8152,6 @@ $as_echo "$lt_cv_ld_force_load" >&6; } ;; esac -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : @@ -11458,7 +11833,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11461 "configure" +#line 11836 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11564,7 +11939,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11567 "configure" +#line 11942 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libatomic/testsuite/Makefile.in b/libatomic/testsuite/Makefile.in index 247268f19490..f540a7523077 100644 --- a/libatomic/testsuite/Makefile.in +++ b/libatomic/testsuite/Makefile.in @@ -91,7 +91,9 @@ target_triplet = @target@ subdir = testsuite ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/lthostflags.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -171,6 +173,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libcc1/Makefile.in b/libcc1/Makefile.in index 6d5ae7212ffd..d154bd45c5e6 100644 --- a/libcc1/Makefile.in +++ b/libcc1/Makefile.in @@ -92,17 +92,18 @@ target_triplet = @target@ @DARWIN_DYNAMIC_LOOKUP_TRUE@am__append_1 = -Wl,-undefined,dynamic_lookup subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/../libtool.m4 \ - $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \ - $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \ - $(top_srcdir)/../config/acx.m4 $(top_srcdir)/../config/cet.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/cet.m4 \ $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/override.m4 \ - $(top_srcdir)/../config/warnings.m4 $(top_srcdir)/configure.ac + $(top_srcdir)/../config/warnings.m4 \ + $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \ + $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \ + $(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ diff --git a/libcc1/aclocal.m4 b/libcc1/aclocal.m4 index b5654982e9b1..171045274a53 100644 --- a/libcc1/aclocal.m4 +++ b/libcc1/aclocal.m4 @@ -1167,11 +1167,6 @@ AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR -m4_include([../libtool.m4]) -m4_include([../ltoptions.m4]) -m4_include([../ltsugar.m4]) -m4_include([../ltversion.m4]) -m4_include([../lt~obsolete.m4]) m4_include([../config/acx.m4]) m4_include([../config/cet.m4]) m4_include([../config/clang-plugin.m4]) @@ -1181,3 +1176,8 @@ m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/override.m4]) m4_include([../config/warnings.m4]) +m4_include([../libtool.m4]) +m4_include([../ltoptions.m4]) +m4_include([../ltsugar.m4]) +m4_include([../ltversion.m4]) +m4_include([../lt~obsolete.m4]) diff --git a/libffi/Makefile.in b/libffi/Makefile.in index 1003b58b9443..35c903548213 100644 --- a/libffi/Makefile.in +++ b/libffi/Makefile.in @@ -100,8 +100,10 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/asmcfi.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -356,6 +358,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libffi/aclocal.m4 b/libffi/aclocal.m4 index 736ec308d5b7..7d21fa0497c9 100644 --- a/libffi/aclocal.m4 +++ b/libffi/aclocal.m4 @@ -1190,8 +1190,10 @@ AC_SUBST([am__untar]) m4_include([../config/acx.m4]) m4_include([../config/asmcfi.m4]) m4_include([../config/cet.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) m4_include([../config/enable.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/multi.m4]) m4_include([../config/override.m4]) diff --git a/libffi/configure b/libffi/configure index f82a45b13bcb..3876ec06201a 100755 --- a/libffi/configure +++ b/libffi/configure @@ -671,7 +671,6 @@ READELF ENABLE_DARWIN_AT_RPATH_FALSE ENABLE_DARWIN_AT_RPATH_TRUE CXXCPP -CPP OTOOL64 OTOOL LIPO @@ -679,6 +678,8 @@ NMEDIT DSYMUTIL RANLIB AR +LLVM_CONFIG +CPP OBJDUMP LN_S NM @@ -1667,6 +1668,43 @@ fi } # ac_fn_cxx_try_compile +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. @@ -1744,43 +1782,6 @@ $as_echo "$ac_res" >&6; } } # ac_fn_c_check_header_compile -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes @@ -6390,29 +6391,190 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= -plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" -for plugin in $plugin_names; do - plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` - if test x$plugin_so = x$plugin; then - plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` - fi - if test x$plugin_so != x$plugin; then - plugin_option="--plugin $plugin_so" - break - fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -6421,7 +6583,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="${ac_tool_prefix}ar" + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -6431,10 +6593,10 @@ IFS=$as_save_IFS fi fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -6442,13 +6604,120 @@ fi fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then @@ -6481,7 +6750,7 @@ $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then - AR="false" + AR="" else case $cross_compiling:$ac_tool_warned in yes:) @@ -6495,19 +6764,257 @@ else AR="$ac_cv_prog_AR" fi -test -z "$AR" && AR=ar -if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" touch conftest.c - $AR $plugin_option rc conftest.a conftest.c + ${AR} $plugin_option rc conftest.a conftest.c if test "$?" != 0; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else - AR="$AR $plugin_option" + plugin_file= fi rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + +plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= +for plugin in $plugin_names; do + plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` + if test x$plugin_so = x$plugin; then + plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` + fi + if test x$plugin_so != x$plugin; then + plugin_option="--plugin $plugin_so" + break + fi +done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +if test -n "$plugin_option"; then + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then + AR="$AR $plugin_option" + fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -6714,9 +7221,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -7868,144 +8381,6 @@ $as_echo "$lt_cv_ld_force_load" >&6; } ;; esac -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : @@ -11688,7 +12063,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11691 "configure" +#line 12066 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11794,7 +12169,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11797 "configure" +#line 12172 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libffi/include/Makefile.in b/libffi/include/Makefile.in index 9759f0d91dca..df8b9f64caed 100644 --- a/libffi/include/Makefile.in +++ b/libffi/include/Makefile.in @@ -94,8 +94,10 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/asmcfi.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -228,6 +230,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libffi/man/Makefile.in b/libffi/man/Makefile.in index 18de1e836f5b..2770d403398f 100644 --- a/libffi/man/Makefile.in +++ b/libffi/man/Makefile.in @@ -93,8 +93,10 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/asmcfi.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -210,6 +212,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libffi/testsuite/Makefile.in b/libffi/testsuite/Makefile.in index 27d48a7ad7a5..28adf7112c84 100644 --- a/libffi/testsuite/Makefile.in +++ b/libffi/testsuite/Makefile.in @@ -93,8 +93,10 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/asmcfi.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -183,6 +185,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libgcobol/Makefile.in b/libgcobol/Makefile.in index 42dc82323077..61b9e8669d03 100644 --- a/libgcobol/Makefile.in +++ b/libgcobol/Makefile.in @@ -117,7 +117,9 @@ target_triplet = @target@ @BUILD_LIBGCOBOL_TRUE@@ENABLE_DARWIN_AT_RPATH_TRUE@ -Wl,-rpath,@loader_path subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/../config/clang-plugin.m4 \ + $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/lib-ld.m4 \ @@ -295,6 +297,7 @@ LIBQUADSPEC = @LIBQUADSPEC@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ diff --git a/libgcobol/aclocal.m4 b/libgcobol/aclocal.m4 index c3c69e6ce4b1..e28744caea2f 100644 --- a/libgcobol/aclocal.m4 +++ b/libgcobol/aclocal.m4 @@ -1167,7 +1167,9 @@ AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/iconv.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/lib-ld.m4]) diff --git a/libgcobol/configure b/libgcobol/configure index d130002b2b95..ecbfd33732a7 100755 --- a/libgcobol/configure +++ b/libgcobol/configure @@ -669,6 +669,7 @@ OTOOL LIPO NMEDIT DSYMUTIL +LLVM_CONFIG OBJDUMP LN_S ac_ct_DUMPBIN @@ -6747,8 +6748,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -6759,7 +7018,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -6854,17 +7225,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -7071,9 +7440,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -11810,7 +12185,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11813 "configure" +#line 12188 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11916,7 +12291,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11919 "configure" +#line 12294 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libgfortran/Makefile.in b/libgfortran/Makefile.in index dd88f8893b7f..ce828b2f8d0e 100644 --- a/libgfortran/Makefile.in +++ b/libgfortran/Makefile.in @@ -159,7 +159,9 @@ target_triplet = @target@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/../config/clang-plugin.m4 \ + $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/lthostflags.m4 \ @@ -835,6 +837,7 @@ LIBQUADSPEC = @LIBQUADSPEC@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libgfortran/aclocal.m4 b/libgfortran/aclocal.m4 index 89e5496db5ed..9cbf1a8922d9 100644 --- a/libgfortran/aclocal.m4 +++ b/libgfortran/aclocal.m4 @@ -1167,7 +1167,9 @@ AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/hwcaps.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/lthostflags.m4]) diff --git a/libgfortran/configure b/libgfortran/configure index 9898a94a372a..c6b00a9a2a4e 100755 --- a/libgfortran/configure +++ b/libgfortran/configure @@ -665,6 +665,7 @@ OTOOL LIPO NMEDIT DSYMUTIL +LLVM_CONFIG OBJDUMP LN_S NM @@ -7786,8 +7787,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -7798,7 +8057,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -7893,17 +8264,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -8110,9 +8479,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -12847,7 +13222,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12850 "configure" +#line 13225 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12953,7 +13328,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12956 "configure" +#line 13331 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libgm2/Makefile.in b/libgm2/Makefile.in index 9cd79824a53d..af46b30ad608 100644 --- a/libgm2/Makefile.in +++ b/libgm2/Makefile.in @@ -91,7 +91,9 @@ target_triplet = @target@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/no-executables.m4 \ @@ -215,6 +217,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libgm2/aclocal.m4 b/libgm2/aclocal.m4 index 19cfb0d1eb26..80a7ff961962 100644 --- a/libgm2/aclocal.m4 +++ b/libgm2/aclocal.m4 @@ -1188,7 +1188,9 @@ AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([../config/acx.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/multi.m4]) m4_include([../config/no-executables.m4]) diff --git a/libgm2/configure b/libgm2/configure index 8ffdb3116250..95fcbfe2ee5a 100755 --- a/libgm2/configure +++ b/libgm2/configure @@ -656,6 +656,7 @@ OTOOL LIPO NMEDIT DSYMUTIL +LLVM_CONFIG OBJDUMP ac_ct_DUMPBIN DUMPBIN @@ -9791,8 +9792,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -9803,7 +10062,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -9898,17 +10269,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -10115,9 +10484,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -14854,7 +15229,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 14857 "configure" +#line 15232 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -14960,7 +15335,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 14963 "configure" +#line 15338 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libgm2/libm2cor/Makefile.in b/libgm2/libm2cor/Makefile.in index f9952cff71a7..19efef15b829 100644 --- a/libgm2/libm2cor/Makefile.in +++ b/libgm2/libm2cor/Makefile.in @@ -109,7 +109,9 @@ target_triplet = @target@ subdir = libm2cor ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/no-executables.m4 \ @@ -292,6 +294,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libgm2/libm2iso/Makefile.in b/libgm2/libm2iso/Makefile.in index 308c023b9967..d6b143eaf234 100644 --- a/libgm2/libm2iso/Makefile.in +++ b/libgm2/libm2iso/Makefile.in @@ -109,7 +109,9 @@ target_triplet = @target@ subdir = libm2iso ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/no-executables.m4 \ @@ -318,6 +320,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libgm2/libm2log/Makefile.in b/libgm2/libm2log/Makefile.in index dcd5941ccd00..93dcc6639fd5 100644 --- a/libgm2/libm2log/Makefile.in +++ b/libgm2/libm2log/Makefile.in @@ -109,7 +109,9 @@ target_triplet = @target@ subdir = libm2log ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/no-executables.m4 \ @@ -281,6 +283,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libgm2/libm2min/Makefile.in b/libgm2/libm2min/Makefile.in index 93bf8a4586dc..2c6bb9a77f5c 100644 --- a/libgm2/libm2min/Makefile.in +++ b/libgm2/libm2min/Makefile.in @@ -109,7 +109,9 @@ target_triplet = @target@ subdir = libm2min ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/no-executables.m4 \ @@ -271,6 +273,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libgm2/libm2pim/Makefile.in b/libgm2/libm2pim/Makefile.in index abc826e62813..139aec94ec08 100644 --- a/libgm2/libm2pim/Makefile.in +++ b/libgm2/libm2pim/Makefile.in @@ -109,7 +109,9 @@ target_triplet = @target@ subdir = libm2pim ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/no-executables.m4 \ @@ -309,6 +311,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libgomp/Makefile.in b/libgomp/Makefile.in index 6d22b3d3bfd0..8dc2ace13a99 100644 --- a/libgomp/Makefile.in +++ b/libgomp/Makefile.in @@ -125,9 +125,11 @@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/ax_count_cpus.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/lthostflags.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -397,6 +399,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libgomp/aclocal.m4 b/libgomp/aclocal.m4 index 55d9d71895a2..94d1b0af1253 100644 --- a/libgomp/aclocal.m4 +++ b/libgomp/aclocal.m4 @@ -1169,9 +1169,11 @@ AC_SUBST([am__untar]) m4_include([../config/acx.m4]) m4_include([../config/ax_count_cpus.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) m4_include([../config/enable.m4]) m4_include([../config/futex.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/lthostflags.m4]) m4_include([../config/multi.m4]) diff --git a/libgomp/configure b/libgomp/configure index df1fc8df30e6..4136a0b8cd01 100755 --- a/libgomp/configure +++ b/libgomp/configure @@ -688,12 +688,13 @@ ENABLE_DARWIN_AT_RPATH_TRUE enable_static enable_shared lt_host_flags -CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL +LLVM_CONFIG +CPP OBJDUMP LN_S NM @@ -1636,6 +1637,43 @@ fi } # ac_fn_c_try_compile +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. @@ -1713,43 +1751,6 @@ $as_echo "$ac_res" >&6; } } # ac_fn_c_check_header_compile -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes @@ -6171,29 +6172,191 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= -plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" -for plugin in $plugin_names; do - plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` - if test x$plugin_so = x$plugin; then - plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` - fi - if test x$plugin_so != x$plugin; then - plugin_option="--plugin $plugin_so" - break - fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -6202,7 +6365,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="${ac_tool_prefix}ar" + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -6212,10 +6375,10 @@ IFS=$as_save_IFS fi fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -6223,13 +6386,120 @@ fi fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then @@ -6262,7 +6532,7 @@ $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then - AR="false" + AR="" else case $cross_compiling:$ac_tool_warned in yes:) @@ -6276,19 +6546,257 @@ else AR="$ac_cv_prog_AR" fi -test -z "$AR" && AR=ar -if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" touch conftest.c - $AR $plugin_option rc conftest.a conftest.c + ${AR} $plugin_option rc conftest.a conftest.c if test "$?" != 0; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else - AR="$AR $plugin_option" + plugin_file= fi rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + +plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= +for plugin in $plugin_names; do + plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` + if test x$plugin_so = x$plugin; then + plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` + fi + if test x$plugin_so != x$plugin; then + plugin_option="--plugin $plugin_so" + break + fi +done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +if test -n "$plugin_option"; then + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then + AR="$AR $plugin_option" + fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -6495,9 +7003,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -6824,7 +7338,6 @@ fi - # Check whether --enable-libtool-lock was given. @@ -7650,144 +8163,6 @@ $as_echo "$lt_cv_ld_force_load" >&6; } ;; esac -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : @@ -11469,7 +11844,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11472 "configure" +#line 11847 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11575,7 +11950,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11578 "configure" +#line 11953 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libgomp/testsuite/Makefile.in b/libgomp/testsuite/Makefile.in index 4155350cf80e..477bfdb83de3 100644 --- a/libgomp/testsuite/Makefile.in +++ b/libgomp/testsuite/Makefile.in @@ -92,9 +92,11 @@ subdir = testsuite ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/ax_count_cpus.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/lthostflags.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -175,6 +177,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libgrust/Makefile.in b/libgrust/Makefile.in index 6665f8da738f..767aa8b3ad9f 100644 --- a/libgrust/Makefile.in +++ b/libgrust/Makefile.in @@ -93,8 +93,10 @@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/no-executables.m4 \ @@ -210,6 +212,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libgrust/aclocal.m4 b/libgrust/aclocal.m4 index e66309232d25..afe66dff53b8 100644 --- a/libgrust/aclocal.m4 +++ b/libgrust/aclocal.m4 @@ -1249,8 +1249,10 @@ AC_SUBST([am__untar]) m4_include([../config/acx.m4]) m4_include([../config/cet.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) m4_include([../config/enable.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/multi.m4]) m4_include([../config/no-executables.m4]) diff --git a/libgrust/configure b/libgrust/configure index 14a391643c69..b6f7c3eac4cd 100755 --- a/libgrust/configure +++ b/libgrust/configure @@ -651,6 +651,7 @@ LIPO NMEDIT DSYMUTIL RANLIB +LLVM_CONFIG OBJDUMP LN_S NM @@ -7593,8 +7594,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -7605,7 +7864,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -7700,17 +8071,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -7917,9 +8286,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -12657,7 +13032,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12660 "configure" +#line 13035 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12763,7 +13138,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12766 "configure" +#line 13141 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libgrust/libformat_parser/Makefile.in b/libgrust/libformat_parser/Makefile.in index f6c400d81499..b64ca2a41474 100644 --- a/libgrust/libformat_parser/Makefile.in +++ b/libgrust/libformat_parser/Makefile.in @@ -92,8 +92,10 @@ subdir = libformat_parser ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/no-executables.m4 \ @@ -170,6 +172,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libgrust/libproc_macro_internal/Makefile.in b/libgrust/libproc_macro_internal/Makefile.in index 68aa46106899..cc03c1a174cd 100644 --- a/libgrust/libproc_macro_internal/Makefile.in +++ b/libgrust/libproc_macro_internal/Makefile.in @@ -92,8 +92,10 @@ subdir = libproc_macro_internal ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/no-executables.m4 \ @@ -170,6 +172,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libitm/Makefile.in b/libitm/Makefile.in index f02ad05efb19..cbca70267603 100644 --- a/libitm/Makefile.in +++ b/libitm/Makefile.in @@ -97,9 +97,11 @@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/asmcfi.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/mmap.m4 \ @@ -358,6 +360,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libitm/aclocal.m4 b/libitm/aclocal.m4 index 4f65f6944b74..4cb1a5f9098f 100644 --- a/libitm/aclocal.m4 +++ b/libitm/aclocal.m4 @@ -1189,9 +1189,11 @@ AC_SUBST([am__untar]) m4_include([../config/acx.m4]) m4_include([../config/asmcfi.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) m4_include([../config/enable.m4]) m4_include([../config/futex.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/hwcaps.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/mmap.m4]) diff --git a/libitm/configure b/libitm/configure index 9ba7fb03a578..a76c9f5040d2 100755 --- a/libitm/configure +++ b/libitm/configure @@ -665,12 +665,13 @@ ENABLE_DARWIN_AT_RPATH_TRUE enable_static enable_shared CXXCPP -CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL +LLVM_CONFIG +CPP OBJDUMP LN_S ac_ct_DUMPBIN @@ -1662,6 +1663,43 @@ fi } # ac_fn_cxx_try_compile +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. @@ -1739,43 +1777,6 @@ $as_echo "$ac_res" >&6; } } # ac_fn_c_check_header_compile -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes @@ -6832,29 +6833,191 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= -plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" -for plugin in $plugin_names; do - plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` - if test x$plugin_so = x$plugin; then - plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` - fi - if test x$plugin_so != x$plugin; then - plugin_option="--plugin $plugin_so" - break - fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -6863,7 +7026,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="${ac_tool_prefix}ar" + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -6873,10 +7036,10 @@ IFS=$as_save_IFS fi fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -6884,13 +7047,120 @@ fi fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then @@ -6923,7 +7193,7 @@ $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then - AR="false" + AR="" else case $cross_compiling:$ac_tool_warned in yes:) @@ -6937,19 +7207,257 @@ else AR="$ac_cv_prog_AR" fi -test -z "$AR" && AR=ar -if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" touch conftest.c - $AR $plugin_option rc conftest.a conftest.c + ${AR} $plugin_option rc conftest.a conftest.c if test "$?" != 0; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else - AR="$AR $plugin_option" + plugin_file= fi rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + +plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= +for plugin in $plugin_names; do + plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` + if test x$plugin_so = x$plugin; then + plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` + fi + if test x$plugin_so != x$plugin; then + plugin_option="--plugin $plugin_so" + break + fi +done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +if test -n "$plugin_option"; then + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then + AR="$AR $plugin_option" + fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -7156,9 +7664,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -7485,7 +7999,6 @@ fi - # Check whether --enable-libtool-lock was given. @@ -8311,144 +8824,6 @@ $as_echo "$lt_cv_ld_force_load" >&6; } ;; esac -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : @@ -12131,7 +12506,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12134 "configure" +#line 12509 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12237,7 +12612,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12240 "configure" +#line 12615 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libitm/testsuite/Makefile.in b/libitm/testsuite/Makefile.in index 41db3f5b85fd..2e0446333655 100644 --- a/libitm/testsuite/Makefile.in +++ b/libitm/testsuite/Makefile.in @@ -92,9 +92,11 @@ subdir = testsuite ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/asmcfi.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/mmap.m4 \ @@ -180,6 +182,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libobjc/aclocal.m4 b/libobjc/aclocal.m4 index 9ac0f645b52b..08cc6d0cd4b9 100644 --- a/libobjc/aclocal.m4 +++ b/libobjc/aclocal.m4 @@ -150,6 +150,8 @@ m4_include([../ltsugar.m4]) m4_include([../ltversion.m4]) m4_include([../lt~obsolete.m4]) m4_include([../config/cet.m4]) +m4_include([../config/clang-plugin.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lthostflags.m4]) m4_include([../config/multi.m4]) m4_include([../config/override.m4]) diff --git a/libobjc/configure b/libobjc/configure index 68172549137a..c7a5c8f0825a 100755 --- a/libobjc/configure +++ b/libobjc/configure @@ -640,7 +640,6 @@ extra_ldflags_libobjc ENABLE_DARWIN_AT_RPATH_FALSE ENABLE_DARWIN_AT_RPATH_TRUE SET_MAKE -CPP OTOOL64 OTOOL LIPO @@ -648,6 +647,8 @@ NMEDIT DSYMUTIL AWK STRIP +LLVM_CONFIG +CPP LN_S NM ac_ct_DUMPBIN @@ -1556,6 +1557,43 @@ fi } # ac_fn_c_try_compile +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. @@ -1633,43 +1671,6 @@ $as_echo "$ac_res" >&6; } } # ac_fn_c_check_header_compile -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes @@ -5506,29 +5507,190 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= -plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" -for plugin in $plugin_names; do - plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` - if test x$plugin_so = x$plugin; then - plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` - fi - if test x$plugin_so != x$plugin; then - plugin_option="--plugin $plugin_so" - break - fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -5537,7 +5699,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="${ac_tool_prefix}ar" + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -5547,10 +5709,10 @@ IFS=$as_save_IFS fi fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -5558,16 +5720,123 @@ fi fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_AR"; then + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -5597,7 +5866,7 @@ $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then - AR="false" + AR="" else case $cross_compiling:$ac_tool_warned in yes:) @@ -5611,19 +5880,257 @@ else AR="$ac_cv_prog_AR" fi -test -z "$AR" && AR=ar -if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" touch conftest.c - $AR $plugin_option rc conftest.a conftest.c + ${AR} $plugin_option rc conftest.a conftest.c if test "$?" != 0; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else - AR="$AR $plugin_option" + plugin_file= fi rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + +plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= +for plugin in $plugin_names; do + plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` + if test x$plugin_so = x$plugin; then + plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` + fi + if test x$plugin_so != x$plugin; then + plugin_option="--plugin $plugin_so" + break + fi +done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +if test -n "$plugin_option"; then + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then + AR="$AR $plugin_option" + fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -5830,9 +6337,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -7032,144 +7545,6 @@ $as_echo "$lt_cv_ld_force_load" >&6; } ;; esac -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : @@ -10876,7 +11251,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10879 "configure" +#line 11254 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -10982,7 +11357,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10985 "configure" +#line 11360 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libphobos/Makefile.in b/libphobos/Makefile.in index cd64fd531ca9..6a3c25fd8106 100644 --- a/libphobos/Makefile.in +++ b/libphobos/Makefile.in @@ -109,7 +109,9 @@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -249,6 +251,7 @@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBZ = @LIBZ@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libphobos/aclocal.m4 b/libphobos/aclocal.m4 index b2e1cbf0197e..68326d0b2859 100644 --- a/libphobos/aclocal.m4 +++ b/libphobos/aclocal.m4 @@ -874,7 +874,9 @@ AC_SUBST([am__untar]) m4_include([../config/acx.m4]) m4_include([../config/cet.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/enable.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/multi.m4]) m4_include([../config/override.m4]) diff --git a/libphobos/configure b/libphobos/configure index 4f5be7d4ff4e..70e92efab66e 100755 --- a/libphobos/configure +++ b/libphobos/configure @@ -719,6 +719,7 @@ OTOOL LIPO NMEDIT DSYMUTIL +LLVM_CONFIG OBJDUMP LN_S NM @@ -6835,8 +6836,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -6847,7 +7106,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -6942,17 +7313,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -7159,9 +7528,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -11864,7 +12239,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11867 "configure" +#line 12242 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11970,7 +12345,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11973 "configure" +#line 12348 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libphobos/libdruntime/Makefile.in b/libphobos/libdruntime/Makefile.in index 1c0fa546dbbf..6d490cf4a9b7 100644 --- a/libphobos/libdruntime/Makefile.in +++ b/libphobos/libdruntime/Makefile.in @@ -135,7 +135,9 @@ subdir = libdruntime ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -667,6 +669,7 @@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBZ = @LIBZ@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libphobos/src/Makefile.in b/libphobos/src/Makefile.in index 64cc9c3d0104..2bbd70f960ad 100644 --- a/libphobos/src/Makefile.in +++ b/libphobos/src/Makefile.in @@ -94,7 +94,9 @@ subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -402,6 +404,7 @@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBZ = @LIBZ@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libphobos/testsuite/Makefile.in b/libphobos/testsuite/Makefile.in index 3df08152b740..2f545f9d7239 100644 --- a/libphobos/testsuite/Makefile.in +++ b/libphobos/testsuite/Makefile.in @@ -94,7 +94,9 @@ subdir = testsuite ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -193,6 +195,7 @@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBZ = @LIBZ@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libquadmath/Makefile.in b/libquadmath/Makefile.in index ff3373064b17..ef7c3640bcb1 100644 --- a/libquadmath/Makefile.in +++ b/libquadmath/Makefile.in @@ -94,7 +94,9 @@ target_triplet = @target@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/lthostflags.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -360,6 +362,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libquadmath/aclocal.m4 b/libquadmath/aclocal.m4 index f15cc0b9f081..ca5c22a666f2 100644 --- a/libquadmath/aclocal.m4 +++ b/libquadmath/aclocal.m4 @@ -1168,7 +1168,9 @@ AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([../config/acx.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/lthostflags.m4]) m4_include([../config/multi.m4]) diff --git a/libquadmath/configure b/libquadmath/configure index f82dd3d0d6d4..c0d6c6abe9dd 100755 --- a/libquadmath/configure +++ b/libquadmath/configure @@ -662,6 +662,7 @@ NMEDIT DSYMUTIL RANLIB AR +LLVM_CONFIG OBJDUMP LN_S NM @@ -5859,8 +5860,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -5871,7 +6130,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -5966,17 +6337,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -6183,9 +6552,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -10922,7 +11297,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10925 "configure" +#line 11300 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11028,7 +11403,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11031 "configure" +#line 11406 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libsanitizer/Makefile.in b/libsanitizer/Makefile.in index f11219cae849..fa6fe9e26a3e 100644 --- a/libsanitizer/Makefile.in +++ b/libsanitizer/Makefile.in @@ -101,7 +101,9 @@ target_triplet = @target@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -263,6 +265,7 @@ LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@ LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libsanitizer/aclocal.m4 b/libsanitizer/aclocal.m4 index 6aa15694eba0..85284f527b2f 100644 --- a/libsanitizer/aclocal.m4 +++ b/libsanitizer/aclocal.m4 @@ -1188,7 +1188,9 @@ AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([../config/acx.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/libstdc++-raw-cxx.m4]) m4_include([../config/multi.m4]) diff --git a/libsanitizer/asan/Makefile.in b/libsanitizer/asan/Makefile.in index 54ee575bdf48..36d34fb5ba8c 100644 --- a/libsanitizer/asan/Makefile.in +++ b/libsanitizer/asan/Makefile.in @@ -96,7 +96,9 @@ target_triplet = @target@ subdir = asan ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -316,6 +318,7 @@ LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@ LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libsanitizer/configure b/libsanitizer/configure index 6bfd28916d21..d4d987d2acce 100755 --- a/libsanitizer/configure +++ b/libsanitizer/configure @@ -678,6 +678,7 @@ LIPO NMEDIT DSYMUTIL AR +LLVM_CONFIG OBJDUMP LN_S NM @@ -7446,8 +7447,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -7458,7 +7717,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -7553,17 +7924,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -7770,9 +8139,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -12475,7 +12850,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12478 "configure" +#line 12853 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12581,7 +12956,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12584 "configure" +#line 12959 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libsanitizer/hwasan/Makefile.in b/libsanitizer/hwasan/Makefile.in index 4ff5deccb7f5..9c44a14d3b10 100644 --- a/libsanitizer/hwasan/Makefile.in +++ b/libsanitizer/hwasan/Makefile.in @@ -95,7 +95,9 @@ target_triplet = @target@ subdir = hwasan ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -309,6 +311,7 @@ LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@ LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libsanitizer/interception/Makefile.in b/libsanitizer/interception/Makefile.in index 1f5a5ef2c860..c7a286c4367b 100644 --- a/libsanitizer/interception/Makefile.in +++ b/libsanitizer/interception/Makefile.in @@ -92,7 +92,9 @@ target_triplet = @target@ subdir = interception ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -235,6 +237,7 @@ LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@ LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libsanitizer/libbacktrace/Makefile.in b/libsanitizer/libbacktrace/Makefile.in index b9d6e008f2b3..d6898cfcb858 100644 --- a/libsanitizer/libbacktrace/Makefile.in +++ b/libsanitizer/libbacktrace/Makefile.in @@ -123,7 +123,9 @@ target_triplet = @target@ subdir = libbacktrace ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -285,6 +287,7 @@ LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@ LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libsanitizer/lsan/Makefile.in b/libsanitizer/lsan/Makefile.in index 7c1642a168ed..64e0cca3a3c3 100644 --- a/libsanitizer/lsan/Makefile.in +++ b/libsanitizer/lsan/Makefile.in @@ -94,7 +94,9 @@ target_triplet = @target@ subdir = lsan ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -280,6 +282,7 @@ LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@ LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libsanitizer/sanitizer_common/Makefile.in b/libsanitizer/sanitizer_common/Makefile.in index 1bc07e51639a..ef2b17401840 100644 --- a/libsanitizer/sanitizer_common/Makefile.in +++ b/libsanitizer/sanitizer_common/Makefile.in @@ -98,7 +98,9 @@ target_triplet = @target@ subdir = sanitizer_common ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -273,6 +275,7 @@ LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@ LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libsanitizer/tsan/Makefile.in b/libsanitizer/tsan/Makefile.in index 6c8ad7925141..5eadf0dc7375 100644 --- a/libsanitizer/tsan/Makefile.in +++ b/libsanitizer/tsan/Makefile.in @@ -95,7 +95,9 @@ target_triplet = @target@ subdir = tsan ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -309,6 +311,7 @@ LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@ LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libsanitizer/ubsan/Makefile.in b/libsanitizer/ubsan/Makefile.in index 345190eeb34e..0b1e98e7a9ef 100644 --- a/libsanitizer/ubsan/Makefile.in +++ b/libsanitizer/ubsan/Makefile.in @@ -94,7 +94,9 @@ target_triplet = @target@ subdir = ubsan ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -274,6 +276,7 @@ LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@ LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libssp/Makefile.in b/libssp/Makefile.in index febbc4e5e578..8d8be3e5f778 100644 --- a/libssp/Makefile.in +++ b/libssp/Makefile.in @@ -94,8 +94,10 @@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/lthostflags.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -262,6 +264,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libssp/aclocal.m4 b/libssp/aclocal.m4 index 68fc0a4a718a..47f54fc80cbb 100644 --- a/libssp/aclocal.m4 +++ b/libssp/aclocal.m4 @@ -1169,8 +1169,10 @@ AC_SUBST([am__untar]) m4_include([../config/acx.m4]) m4_include([../config/cet.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) m4_include([../config/enable.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/lthostflags.m4]) m4_include([../config/multi.m4]) diff --git a/libssp/configure b/libssp/configure index 0052e03650d1..72ffc5a35f70 100755 --- a/libssp/configure +++ b/libssp/configure @@ -648,6 +648,7 @@ NMEDIT DSYMUTIL RANLIB AR +LLVM_CONFIG OBJDUMP LN_S NM @@ -6101,8 +6102,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -6113,7 +6372,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -6208,17 +6579,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -6425,9 +6794,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -11164,7 +11539,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11167 "configure" +#line 11542 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11270,7 +11645,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11273 "configure" +#line 11648 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libstdc++-v3/Makefile.in b/libstdc++-v3/Makefile.in index 5beb3146ee6a..5d2570b31cb8 100644 --- a/libstdc++-v3/Makefile.in +++ b/libstdc++-v3/Makefile.in @@ -91,8 +91,10 @@ target_triplet = @target@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -263,6 +265,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/aclocal.m4 b/libstdc++-v3/aclocal.m4 index e5af3f62e1c2..0a19b02bf071 100644 --- a/libstdc++-v3/aclocal.m4 +++ b/libstdc++-v3/aclocal.m4 @@ -853,8 +853,10 @@ AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([../config/acx.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/enable.m4]) m4_include([../config/futex.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/hwcaps.m4]) m4_include([../config/iconv.m4]) m4_include([../config/lead-dot.m4]) diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index c0eaeb97c499..713038b390bf 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -802,6 +802,7 @@ OTOOL LIPO NMEDIT DSYMUTIL +LLVM_CONFIG OBJDUMP NM ac_ct_DUMPBIN @@ -7089,8 +7090,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -7101,7 +7360,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -7196,17 +7567,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -7413,9 +7782,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -12280,7 +12655,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12283 "configure" +#line 12658 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12386,7 +12761,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12389 "configure" +#line 12764 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -16048,7 +16423,7 @@ $as_echo "$glibcxx_cv_atomic_word" >&6; } # Fake what AC_TRY_COMPILE does. cat > conftest.$ac_ext << EOF -#line 16051 "configure" +#line 16426 "configure" #include "${glibcxx_srcdir}/config/$atomic_word_dir/atomic_word.h" int main() { @@ -16194,7 +16569,7 @@ $as_echo "mutex" >&6; } # unnecessary for this test. cat > conftest.$ac_ext << EOF -#line 16197 "configure" +#line 16572 "configure" int main() { _Decimal32 d1; @@ -16236,7 +16611,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu # unnecessary for this test. cat > conftest.$ac_ext << EOF -#line 16239 "configure" +#line 16614 "configure" template struct same { typedef T2 type; }; @@ -53544,7 +53919,7 @@ $as_echo "$glibcxx_cv_libbacktrace_atomics" >&6; } CXXFLAGS='-O0 -S' cat > conftest.$ac_ext << EOF -#line 53547 "configure" +#line 53922 "configure" #include int main() { diff --git a/libstdc++-v3/doc/Makefile.in b/libstdc++-v3/doc/Makefile.in index c19e3e3044c8..6e7a5a0f9084 100644 --- a/libstdc++-v3/doc/Makefile.in +++ b/libstdc++-v3/doc/Makefile.in @@ -91,8 +91,10 @@ target_triplet = @target@ subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -222,6 +224,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in index 133984784cd5..f07e2326816b 100644 --- a/libstdc++-v3/include/Makefile.in +++ b/libstdc++-v3/include/Makefile.in @@ -91,8 +91,10 @@ target_triplet = @target@ subdir = include ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -222,6 +224,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/libsupc++/Makefile.in b/libstdc++-v3/libsupc++/Makefile.in index b691915e396b..db5e83803d52 100644 --- a/libstdc++-v3/libsupc++/Makefile.in +++ b/libstdc++-v3/libsupc++/Makefile.in @@ -93,8 +93,10 @@ target_triplet = @target@ subdir = libsupc++ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -331,6 +333,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/po/Makefile.in b/libstdc++-v3/po/Makefile.in index 8e93445acd20..54d8eff693b1 100644 --- a/libstdc++-v3/po/Makefile.in +++ b/libstdc++-v3/po/Makefile.in @@ -91,8 +91,10 @@ target_triplet = @target@ subdir = po ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -222,6 +224,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/python/Makefile.in b/libstdc++-v3/python/Makefile.in index c527e6cf1866..105a3a64de21 100644 --- a/libstdc++-v3/python/Makefile.in +++ b/libstdc++-v3/python/Makefile.in @@ -92,8 +92,10 @@ target_triplet = @target@ subdir = python ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -252,6 +254,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/src/Makefile.in b/libstdc++-v3/src/Makefile.in index 106b96995aa6..f0ad019a71fd 100644 --- a/libstdc++-v3/src/Makefile.in +++ b/libstdc++-v3/src/Makefile.in @@ -92,8 +92,10 @@ target_triplet = @target@ subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -326,6 +328,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/src/c++11/Makefile.in b/libstdc++-v3/src/c++11/Makefile.in index 9d04548f1571..bd684bb4209c 100644 --- a/libstdc++-v3/src/c++11/Makefile.in +++ b/libstdc++-v3/src/c++11/Makefile.in @@ -92,8 +92,10 @@ target_triplet = @target@ subdir = src/c++11 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -295,6 +297,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/src/c++17/Makefile.in b/libstdc++-v3/src/c++17/Makefile.in index edbee94aaf91..6dff0d9491d5 100644 --- a/libstdc++-v3/src/c++17/Makefile.in +++ b/libstdc++-v3/src/c++17/Makefile.in @@ -92,8 +92,10 @@ target_triplet = @target@ subdir = src/c++17 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -269,6 +271,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/src/c++20/Makefile.in b/libstdc++-v3/src/c++20/Makefile.in index 104ee597b5ec..f481ad08edbe 100644 --- a/libstdc++-v3/src/c++20/Makefile.in +++ b/libstdc++-v3/src/c++20/Makefile.in @@ -92,8 +92,10 @@ target_triplet = @target@ subdir = src/c++20 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -264,6 +266,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/src/c++23/Makefile.in b/libstdc++-v3/src/c++23/Makefile.in index 715c14c6b815..fd9110ab8ad2 100644 --- a/libstdc++-v3/src/c++23/Makefile.in +++ b/libstdc++-v3/src/c++23/Makefile.in @@ -93,8 +93,10 @@ target_triplet = @target@ subdir = src/c++23 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -295,6 +297,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/src/c++26/Makefile.in b/libstdc++-v3/src/c++26/Makefile.in index 1c317d6ac7c2..13c3a03b236b 100644 --- a/libstdc++-v3/src/c++26/Makefile.in +++ b/libstdc++-v3/src/c++26/Makefile.in @@ -92,8 +92,10 @@ target_triplet = @target@ subdir = src/c++26 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -264,6 +266,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/src/c++98/Makefile.in b/libstdc++-v3/src/c++98/Makefile.in index 95e909b10493..c8df597f40d5 100644 --- a/libstdc++-v3/src/c++98/Makefile.in +++ b/libstdc++-v3/src/c++98/Makefile.in @@ -92,8 +92,10 @@ target_triplet = @target@ subdir = src/c++98 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -284,6 +286,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/src/experimental/Makefile.in b/libstdc++-v3/src/experimental/Makefile.in index f7b4ee299f33..8cb0acd4e68b 100644 --- a/libstdc++-v3/src/experimental/Makefile.in +++ b/libstdc++-v3/src/experimental/Makefile.in @@ -92,8 +92,10 @@ target_triplet = @target@ subdir = src/experimental ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -291,6 +293,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/src/filesystem/Makefile.in b/libstdc++-v3/src/filesystem/Makefile.in index 76ba905087b0..b138a079deb1 100644 --- a/libstdc++-v3/src/filesystem/Makefile.in +++ b/libstdc++-v3/src/filesystem/Makefile.in @@ -92,8 +92,10 @@ target_triplet = @target@ subdir = src/filesystem ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -297,6 +299,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/src/libbacktrace/Makefile.in b/libstdc++-v3/src/libbacktrace/Makefile.in index cde092464a40..34fec1ec9a85 100644 --- a/libstdc++-v3/src/libbacktrace/Makefile.in +++ b/libstdc++-v3/src/libbacktrace/Makefile.in @@ -123,8 +123,10 @@ target_triplet = @target@ subdir = src/libbacktrace ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -297,6 +299,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/testsuite/Makefile.in b/libstdc++-v3/testsuite/Makefile.in index 2e42d470645e..aeb3f716216f 100644 --- a/libstdc++-v3/testsuite/Makefile.in +++ b/libstdc++-v3/testsuite/Makefile.in @@ -91,8 +91,10 @@ target_triplet = @target@ subdir = testsuite ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -222,6 +224,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libvtv/Makefile.in b/libvtv/Makefile.in index 70b440347126..739b0b4e039c 100644 --- a/libvtv/Makefile.in +++ b/libvtv/Makefile.in @@ -95,7 +95,9 @@ target_triplet = @target@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/lthostflags.m4 \ @@ -310,6 +312,7 @@ LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@ LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libvtv/aclocal.m4 b/libvtv/aclocal.m4 index 7da4c3a5b9ba..ad58419afc9d 100644 --- a/libvtv/aclocal.m4 +++ b/libvtv/aclocal.m4 @@ -1168,7 +1168,9 @@ AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([../config/acx.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/libstdc++-raw-cxx.m4]) m4_include([../config/lthostflags.m4]) diff --git a/libvtv/configure b/libvtv/configure index a7889161c50b..1a29d899e3c4 100755 --- a/libvtv/configure +++ b/libvtv/configure @@ -651,6 +651,7 @@ OTOOL LIPO NMEDIT DSYMUTIL +LLVM_CONFIG OBJDUMP LN_S NM @@ -7340,8 +7341,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -7352,7 +7611,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -7447,17 +7818,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -7664,9 +8033,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -12369,7 +12744,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12372 "configure" +#line 12747 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12475,7 +12850,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12478 "configure" +#line 12853 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libvtv/testsuite/Makefile.in b/libvtv/testsuite/Makefile.in index cb804c442d68..167f8b17eca9 100644 --- a/libvtv/testsuite/Makefile.in +++ b/libvtv/testsuite/Makefile.in @@ -91,7 +91,9 @@ target_triplet = @target@ subdir = testsuite ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/lthostflags.m4 \ @@ -175,6 +177,7 @@ LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@ LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/lto-plugin/Makefile.in b/lto-plugin/Makefile.in index f6f5b020ff5f..d776474b9b93 100644 --- a/lto-plugin/Makefile.in +++ b/lto-plugin/Makefile.in @@ -93,8 +93,10 @@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/lthostflags.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -245,6 +247,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/lto-plugin/aclocal.m4 b/lto-plugin/aclocal.m4 index f1fc28d4f13e..5c10b8358883 100644 --- a/lto-plugin/aclocal.m4 +++ b/lto-plugin/aclocal.m4 @@ -1169,8 +1169,10 @@ AC_SUBST([am__untar]) m4_include([../config/acx.m4]) m4_include([../config/cet.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) m4_include([../config/enable.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/lthostflags.m4]) m4_include([../config/override.m4]) diff --git a/lto-plugin/configure b/lto-plugin/configure index 28f5dd79cd70..96f0a5b8e335 100755 --- a/lto-plugin/configure +++ b/lto-plugin/configure @@ -643,6 +643,7 @@ NMEDIT DSYMUTIL RANLIB AR +LLVM_CONFIG OBJDUMP LN_S NM @@ -7211,8 +7212,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -7223,7 +7482,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -7318,17 +7689,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -7535,9 +7904,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -12241,7 +12616,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12244 "configure" +#line 12619 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12347,7 +12722,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12350 "configure" +#line 12725 "configure" #include "confdefs.h" #if HAVE_DLFCN_H From 44a7163763cf66b0471c989d17791eda7cdaa09e Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 5 Oct 2025 18:26:43 +0200 Subject: [PATCH 090/216] contrib: Ignore commit b40ef6e9dc09 Sync toplevel files from binutils-gdb contrib/ChangeLog: * gcc-changelog/git_update_version.py (ignored_commits): Add commit b40ef6e9dc096c8c19399e94947a1965258a6942. --- contrib/gcc-changelog/git_update_version.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib/gcc-changelog/git_update_version.py b/contrib/gcc-changelog/git_update_version.py index b3ea33bb5161..09a42520624f 100755 --- a/contrib/gcc-changelog/git_update_version.py +++ b/contrib/gcc-changelog/git_update_version.py @@ -47,7 +47,8 @@ '72677e1119dc40aa680755d009e079ad49446c46', '10d76b7f1e5b63ad6d2b92940c39007913ced037', 'de3b277247ce98d189f121155b75f490725a42f6', - '13cf22eb557eb5e3d796822247d8d4957bdb25da'} + '13cf22eb557eb5e3d796822247d8d4957bdb25da', + 'b40ef6e9dc096c8c19399e94947a1965258a6942'} FORMAT = '%(asctime)s:%(levelname)s:%(name)s:%(message)s' logging.basicConfig(level=logging.INFO, format=FORMAT, From 7f57e04ce415cba84b164aaab3ecfcccde28584a Mon Sep 17 00:00:00 2001 From: GCC Administrator Date: Sun, 5 Oct 2025 16:50:51 +0000 Subject: [PATCH 091/216] Daily bump. --- ChangeLog | 8 + config/ChangeLog | 5 + contrib/ChangeLog | 16 ++ gcc/ChangeLog | 518 ++++++++++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/ada/ChangeLog | 23 ++ gcc/analyzer/ChangeLog | 21 ++ gcc/c-family/ChangeLog | 25 ++ gcc/c/ChangeLog | 16 ++ gcc/cp/ChangeLog | 122 ++++++++++ gcc/fortran/ChangeLog | 13 + gcc/m2/ChangeLog | 17 ++ gcc/testsuite/ChangeLog | 320 +++++++++++++++++++++++++ libatomic/ChangeLog | 7 + libbacktrace/ChangeLog | 6 + libcc1/ChangeLog | 11 + libffi/ChangeLog | 9 + libgcobol/ChangeLog | 6 + libgfortran/ChangeLog | 6 + libgm2/ChangeLog | 11 + libgomp/ChangeLog | 7 + libgrust/ChangeLog | 8 + libiberty/ChangeLog | 6 + libitm/ChangeLog | 7 + libobjc/ChangeLog | 5 + libphobos/ChangeLog | 9 + libquadmath/ChangeLog | 6 + libsanitizer/ChangeLog | 14 ++ libssp/ChangeLog | 6 + libstdc++-v3/ChangeLog | 28 +++ libvtv/ChangeLog | 7 + lto-plugin/ChangeLog | 6 + zlib/ChangeLog | 6 + 33 files changed, 1276 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 7bacb91597e9..53ae63bc9d9f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2025-10-02 H.J. Lu + + * Makefile.in: Regenerated. + * configure: Likewise. + * Makefile.tpl: Synced from binutils-gdb. + * configure.ac: Likewise. + * libtool.m4: Likewise. + 2025-10-01 Richard Earnshaw * .editorconfig: Unify the GCC and GDB/binutils root config. diff --git a/config/ChangeLog b/config/ChangeLog index 10bce27d8e91..473d9a0a1826 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,8 @@ +2025-10-02 H.J. Lu + + * clang-plugin.m4: Synced from binutils-gdb. + * gcc-plugin.m4: Likewise. + 2025-08-10 Ijaz, Abdul B * lib-link.m4: Handle dash in the library name for diff --git a/contrib/ChangeLog b/contrib/ChangeLog index 7bd3d6af459f..2938e98a104e 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,19 @@ +2025-10-05 Mark Wielaard + + * gcc-changelog/git_update_version.py (ignored_commits): Add + commit b40ef6e9dc096c8c19399e94947a1965258a6942. + +2025-10-03 David Malcolm + + Revert: + 2025-10-02 David Malcolm + + * gcc.doxy (INPUT): Add gcc/custom-sarif-properties + +2025-10-02 David Malcolm + + * gcc.doxy (INPUT): Add gcc/custom-sarif-properties + 2025-09-23 Jonathan Wakely * unicode/gen_libstdcxx_unicode_data.py: Fix comment type. diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 81c5f800ad1f..d2fd4b803276 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,521 @@ +2025-10-05 Pan Li + + * config/riscv/autovec-opt.md (*widen_waddu_wx_): Add new + pattern to match vwaddu.wx. + +2025-10-05 Pan Li + + * match.pd: Refactor the form 1 of SAT_MUL by keyword for. + +2025-10-04 Andrew Pinski + + PR tree-optimization/122143 + * tree-ssa-forwprop.cc (pass_forwprop::execute): Restrict setting + TODO_update_address_taken only when the statement was a call before fold_stmt. + +2025-10-04 Andrew Pinski + + PR tree-optimization/122153 + * tree-ssa-phiopt.cc (cond_if_else_store_replacement_1): Handle + stores of empty constructors too. + +2025-10-04 Matteo Nicoli + + PR tree-optimization/117760 + * match.pd: Add simplifications that exploit implied values after + logical tests. + +2025-10-04 Jakub Jelinek + + PR tree-optimization/122104 + * tree-ssa-math-opts.cc (maybe_optimize_guarding_check): Call + reset_flow_sensitive_info_in_bb on bb when optimizing out the + guarding condition. + +2025-10-04 Raphael Moreira Zinsly + + PR target/122114 + * config/riscv/riscv.cc + (riscv_allocate_and_probe_stack_space): Change initial_cfa_offset + type. + +2025-10-04 Jeff Law + + PR target/122147 + * config/riscv/predicates.md (move_operand): Only allow a REG as the + operand of a SUBREG. + +2025-10-04 Zhongyao Chen + + PR target/118945 + * config/riscv/riscv.cc (riscv_prefer_agnostic_p): New function. + (riscv_tune_param): Add prefer_agnostic member. + (various tune info structures): Initialize prefer_agnostic. + * config/riscv/riscv-protos.h (riscv_prefer_agnostic_p): Add + prototype. + * config/riscv/riscv-v.cc (get_prefer_tail_policy, + get_prefer_mask_policy): Use riscv_prefer_agnostic_p. + * config/riscv/riscv-vsetvl.cc (vsetvl_info::get_demand_flags): + demand policy for agnostic when prefer_agnostic is true. + +2025-10-04 Jakub Jelinek + + PR c++/114457 + * flag-types.h (enum auto_init_type): Add AUTO_INIT_CXX26. + * tree.h (VACUOUS_INIT_LABEL_P): Define. + * gimplify.cc (is_var_need_auto_init): Renamed to ... + (var_needs_auto_init_p): ... this. Don't return true for + vars with "indeterminate" attribute. Formatting fixes. + (gimplify_decl_expr): Use var_needs_auto_init_p instead of + is_var_need_auto_init. + (emit_warn_switch_unreachable): Remove the flag_auto_var_init + special cases. + (warn_switch_unreachable_and_auto_init_r): Handle them here + by doing just returning NULL. + (last_stmt_in_scope): Don't skip just debug stmts to find + the last stmt in seq, skip for + flag_auto_var_init > AUTO_INIT_UNINITIALIZED also IFN_DEFERRED_INIT + calls. + (collect_fallthrough_labels): For + flag_auto_var_init > AUTO_INIT_UNINITIALIZED ignore + IFN_DEFERRED_INIT calls and GIMPLE_GOTOs to + VACUOUS_INIT_LABEL_P. + (should_warn_for_implicit_fallthrough): For + flag_auto_var_init > AUTO_INIT_UNINITIALIZED also skip over + IFN_DEFERRED_INIT calls. + (expand_FALLTHROUGH_r): Likewise, and handle GIMPLE_GOTOs + to VACUOUS_INIT_LABEL_P. + (gimplify_init_constructor): Use var_needs_auto_init_p instead + of is_var_need_auto_init and for flag_auto_var_init + AUTO_INIT_CXX26 don't call gimple_add_padding_init_for_auto_var. + (gimplify_target_expr): If var_needs_auto_init_p and init has + void type, call gimple_add_init_for_auto_var and for + AUTO_INIT_PATTERN also gimple_add_padding_init_for_auto_var. + * tree-ssa-uninit.cc (maybe_warn_operand): Handle loads from *this + at the start of the function with "clobber *this" attribute on the + PARM_DECL. + * ipa-split.cc (split_function): Remove "clobber *this" attribute + from the first PARM_DECL (if any). + * doc/invoke.texi (ftrivial-auto-var-init=): Adjust documentation. + +2025-10-04 Nathaniel Shead + + PR c++/117658 + * doc/invoke.texi: Document '-Wno-external-tu-local'. + +2025-10-03 David Malcolm + + Revert: + 2025-10-03 David Malcolm + + * Makefile.in (OBJS-libcommon): Add + custom-sarif-properties/digraphs.o and + custom-sarif-properties/state-graphs.o. Remove + diagnostics/state-graphs.o. + * configure: Regenerate. + * configure.ac: Add custom-sarif-properties to subdir iteration. + * custom-sarif-properties/digraphs.cc: New file. + * custom-sarif-properties/digraphs.h: New file. + * custom-sarif-properties/state-graphs.cc: New file. + * custom-sarif-properties/state-graphs.h: New file. + * diagnostics/diagnostics-selftests.cc + (run_diagnostics_selftests): Drop call of state_graphs_cc_tests. + * diagnostics/diagnostics-selftests.h (state_graphs_cc_tests): + Delete decl. + * diagnostics/digraphs.cc: Include + "custom-sarif-properties/digraphs.h". Move include of + "selftest.h" to within CHECKING_P section. + (using digraph_object): New. + (namespace properties): New. + (diagnostics::digraphs::object::get_attr): Delete. + (diagnostics::digraphs::object::set_attr): Delete. + (diagnostics::digraphs::object::set_json_attr): Delete. + (digraph_object::get_property): New definitions, for various + property types. + (digraph_object::set_property): Likewise. + (digraph_object::maybe_get_property): New. + (digraph_object::get_property_as_tristate): New. + (digraph_object::ensure_property_bag): New. + (digraph::get_graph_kind): New. + (digraph::set_graph_kind): New. + Add include of "custom-sarif-properties/state-graphs.h". + (selftest::test_simple_graph): Rewrite to use json::property + instances rather than string attribute names. + (selftest::test_property_objects): New test. + (selftest::digraphs_cc_tests): Call it. + * diagnostics/digraphs.h: Include "tristate.h". + (object::get_attr): Delete. + (object::set_attr): Delete. + (object::get_property): New decls. + (object::set_property): New decls. + (object::maybe_get_property): New. + (object::get_property_as_tristate): New. + (object::set_json_attr): Delete. + (object::ensure_property_bag): New. + (graph::get_graph_kind): New. + (graph::set_graph_kind): New. + * diagnostics/html-sink.cc + (html_generation_options::html_generation_options): Update for + field renamings. + (html_generation_options::dump): Likewise. + (html_builder::maybe_make_state_diagram): Likewise. + (html_builder::add_graph): Show SARIF and .dot src inline, if + requested. + * diagnostics/html-sink.h + (html_generation_options::m_show_state_diagrams_sarif): Rename + to... + (html_generation_options::m_show_graph_sarif): ...this. + (html_generation_options::m_show_state_diagrams_dot_src): Rename + to... + (html_generation_options::m_show_graph_dot_src0): ...this. + * diagnostics/output-spec.cc + (html_scheme_handler::maybe_handle_kv): Rename keys. + (html_scheme_handler::get_keys): Likewise. + * diagnostics/state-graphs-to-dot.cc: : Reimplement throughout to + use json::property instances found within custom_sarif_properties + throughout, rather than types in diagnostics::state_graphs. + * diagnostics/state-graphs.cc: Deleted file. + * diagnostics/state-graphs.h: Delete almost all, except decl of + diagnostics::state_graphs::make_dot_graph. + * doc/invoke.texi: Update for changes to "experimental-html" sink + keys. + * json.cc (json::object::set_string): New. + (json::object::set_integer): New. + (json::object::set_bool): New. + (json::object::set_array_of_string): New. + * json.h: Include "label-text.h". + (struct json::property): New template. + (json::string_property): New. + (json::integer_property): New. + (json::bool_property): New. + (json::json_property): New. + (using json::array_of_string_property): New. + (struct json::enum_traits): New. + (enum_json::property): New. + (json::value::dyn_cast_array): New vfunc. + (json::value::dyn_cast_integer_number): New vfunc. + (json::value::set_string): New. + (json::value::set_integer): New. + (json::value::set_bool): New. + (json::value::set_array_of_string): New. + (json::value::maybe_get_enum): New. + (json::value::set_enum): New. + (json::array::dyn_cast_array): New. + (json::integer_number::dyn_cast_integer_number): New. + (object::maybe_get_enum): New. + (object::set_enum): New. + +2025-10-03 Jeff Law + + PR rtl-optimization/121937 + * simplify-rtx.cc (simplify_context::simplify_binary_operation_1): Make + sure we've got a scalar_int_mode before calling neg_poly_int_rtx. + +2025-10-03 Andrew Pinski + + PR tree-optimization/121762 + * passes.def: Remove both pass_fold_builtin. + Swap out pass_copy_prop for pass_forwprop with + full_walk = false and last=true. + * tree-pass.h (make_pass_fold_builtins): Remove. + * tree-ssa-ccp.cc (class pass_fold_builtins): Delete. + (pass_fold_builtins::execute): Delete. + (make_pass_fold_builtins): Remove. + * doc/passes.texi (Folding built-in functions): Remove. + +2025-10-03 Andrew Pinski + + PR tree-optimization/121762 + * gimple-isel.cc (gimple_nop_atomic_bit_test_and_p): New decl. + (gimple_nop_convert): Likewise. + (convert_atomic_bit_not): Moved from tree-ssa-ccp.cc. + (optimize_atomic_bit_test_and): Likewise. + (optimize_atomic_op_fetch_cmp_0): Likewise. + (gimple_isel_builtin_call): New function. + (CASE_ATOMIC): Moved from tree-ssa-ccp.cc. + (CASE_ATOMIC_CMP0): Likewise. + (CASE_ATOMIC_BIT_TEST_AND): Likewise. + (pass_gimple_isel::execute): For calls just call gimple_isel_builtin_call. + * tree-ssa-ccp.cc (convert_atomic_bit_not): Move to gimple-isel.cc. + (gimple_nop_atomic_bit_test_and_p): Likewise. + (gimple_nop_convert): Likewise. + (optimize_atomic_bit_test_and): Likewise. + (optimize_atomic_op_fetch_cmp_0): Likewise. + (pass_fold_builtins::execute): Just call fold_stmt for internal + or normal bultin calls. + (CASE_ATOMIC): Move to gimple-isel.cc. + (CASE_ATOMIC_CMP0): Likewise. + (CASE_ATOMIC_BIT_TEST_AND): Likewise. + +2025-10-03 Andrew Pinski + + * tree-ssa-ccp.cc (CASE_ATOMIC): New defined. + (CASE_ATOMIC_CMP0): New define. + (CASE_ATOMIC_BIT_TEST_AND): New defined. + (pass_fold_builtins::execute): Use CASE_ATOMIC, CASE_ATOMIC_CMP0, + and CASE_ATOMIC_BIT_TEST_AND. + +2025-10-03 Andrew Pinski + + PR tree-optimization/121762 + * gimple-fold.cc (gimple_fold_builtin_stdarg): New function, + moved from tree-ssa-ccp.cc (optimize_stdarg_builtin). + (gimple_fold_builtin): Call gimple_fold_builtin_stdarg for + va_start, va_copy and va_end. + * tree-ssa-ccp.cc (optimize_stdarg_builtin): Remove. + (pass_fold_builtins::execute): Remove handling of + va_start, va_copy and va_end. + * tree-ssa-forwprop.cc (pass_forwprop::execute): Update + todos if fold_stmt return true if last forwprop to include + TODO_update_address_taken. + +2025-10-03 Andrew Pinski + + PR tree-optimization/121762 + * tree-ssa-ccp.cc (optimize_unreachable): Move to tree-ssa-forwprop.cc + (pass_fold_builtins::execute): Remove handling of __builtin_unreachable. + * tree-ssa-forwprop.cc (optimize_unreachable): New function from + tree-ssa-ccp.cc. Change argument to bb. Remove check on first statement + being the __builtin_unreachable since it is handled already. + (pass_forwprop::execute): Handle first statement as being __builtin_unreachable + by calling optimize_unreachable. + +2025-10-03 Andrew Pinski + + PR tree-optimization/121762 + * tree-ssa-ccp.cc (optimize_stack_restore): Move to tree-ssa-forwprop.cc. + (pass_fold_builtins::execute): Don't call optimize_stack_restore. + * tree-ssa-forwprop.cc (optimize_stack_restore): New function from + tree-ssa-ccp.cc. Return bool instead of value, use replace_call_with_value + istead of returning integer_zero_node. + (simplify_builtin_call): Call optimize_stack_restore. + +2025-10-03 Andrew Pinski + + PR tree-optimization/122033 + * tree-ssa-ccp.cc (optimize_stack_restore): Rewrite the call check. + Update comment in the front to new rules on calls. + * tree.h (fndecl_builtin_alloc_p): New function. + +2025-10-03 Andrew Pinski + + PR tree-optimization/121762 + * gimple-fold.cc (gimple_fold_call): Remove ASSUME internal function + calls when PROP_last_full_fold is set. + * tree-ssa-ccp.cc (pass_fold_builtins::execute): Handling folding + of all internal functions. + +2025-10-03 Andrew Pinski + + * tree-ssa-ccp.cc (optimize_stdarg_builtin): Mannually create the + gimple statements instead of depending on the gimplifier. + (pass_fold_builtins::execute): Handle updated call to optimize_stdarg_builtin. + +2025-10-03 Andrew Pinski + + * tree-ssa-ccp.cc (optimize_memcmp_eq): Remove. + (pass_fold_builtins::execute): Remove handling of memcmp. + * tree-ssa-forwprop.cc (simplify_builtin_memcmp): Add folding + of memcmp to memcmp_eq for PROP_last_full_fold. + +2025-10-02 David Malcolm + + * Makefile.in (OBJS-libcommon): Add + custom-sarif-properties/digraphs.o and + custom-sarif-properties/state-graphs.o. Remove + diagnostics/state-graphs.o. + * configure: Regenerate. + * configure.ac: Add custom-sarif-properties to subdir iteration. + * custom-sarif-properties/digraphs.cc: New file. + * custom-sarif-properties/digraphs.h: New file. + * custom-sarif-properties/state-graphs.cc: New file. + * custom-sarif-properties/state-graphs.h: New file. + * diagnostics/diagnostics-selftests.cc + (run_diagnostics_selftests): Drop call of state_graphs_cc_tests. + * diagnostics/diagnostics-selftests.h (state_graphs_cc_tests): + Delete decl. + * diagnostics/digraphs.cc: Include + "custom-sarif-properties/digraphs.h". Move include of + "selftest.h" to within CHECKING_P section. + (using digraph_object): New. + (namespace properties): New. + (diagnostics::digraphs::object::get_attr): Delete. + (diagnostics::digraphs::object::set_attr): Delete. + (diagnostics::digraphs::object::set_json_attr): Delete. + (digraph_object::get_property): New definitions, for various + property types. + (digraph_object::set_property): Likewise. + (digraph_object::maybe_get_property): New. + (digraph_object::get_property_as_tristate): New. + (digraph_object::ensure_property_bag): New. + (digraph::get_graph_kind): New. + (digraph::set_graph_kind): New. + Add include of "custom-sarif-properties/state-graphs.h". + (selftest::test_simple_graph): Rewrite to use json::property + instances rather than string attribute names. + (selftest::test_property_objects): New test. + (selftest::digraphs_cc_tests): Call it. + * diagnostics/digraphs.h: Include "tristate.h". + (object::get_attr): Delete. + (object::set_attr): Delete. + (object::get_property): New decls. + (object::set_property): New decls. + (object::maybe_get_property): New. + (object::get_property_as_tristate): New. + (object::set_json_attr): Delete. + (object::ensure_property_bag): New. + (graph::get_graph_kind): New. + (graph::set_graph_kind): New. + * diagnostics/html-sink.cc + (html_generation_options::html_generation_options): Update for + field renamings. + (html_generation_options::dump): Likewise. + (html_builder::maybe_make_state_diagram): Likewise. + (html_builder::add_graph): Show SARIF and .dot src inline, if + requested. + * diagnostics/html-sink.h + (html_generation_options::m_show_state_diagrams_sarif): Rename + to... + (html_generation_options::m_show_graph_sarif): ...this. + (html_generation_options::m_show_state_diagrams_dot_src): Rename + to... + (html_generation_options::m_show_graph_dot_src0): ...this. + * diagnostics/output-spec.cc + (html_scheme_handler::maybe_handle_kv): Rename keys. + (html_scheme_handler::get_keys): Likewise. + * diagnostics/state-graphs-to-dot.cc: : Reimplement throughout to + use json::property instances found within custom_sarif_properties + throughout, rather than types in diagnostics::state_graphs. + * diagnostics/state-graphs.cc: Deleted file. + * diagnostics/state-graphs.h: Delete almost all, except decl of + diagnostics::state_graphs::make_dot_graph. + * doc/invoke.texi: Update for changes to "experimental-html" sink + keys. + * json.cc (json::object::set_string): New. + (json::object::set_integer): New. + (json::object::set_bool): New. + (json::object::set_array_of_string): New. + * json.h: Include "label-text.h". + (struct json::property): New template. + (json::string_property): New. + (json::integer_property): New. + (json::bool_property): New. + (json::json_property): New. + (using json::array_of_string_property): New. + (struct json::enum_traits): New. + (enum_json::property): New. + (json::value::dyn_cast_array): New vfunc. + (json::value::dyn_cast_integer_number): New vfunc. + (json::value::set_string): New. + (json::value::set_integer): New. + (json::value::set_bool): New. + (json::value::set_array_of_string): New. + (json::value::maybe_get_enum): New. + (json::value::set_enum): New. + (json::array::dyn_cast_array): New. + (json::integer_number::dyn_cast_integer_number): New. + (object::maybe_get_enum): New. + (object::set_enum): New. + +2025-10-02 Aurelien Jarno + + PR target/121652 + * config/riscv/riscv.md (round_pattern): special case NaN input + instead of saving/restoring fflags. + +2025-10-02 David Malcolm + + * diagnostics/output-spec.cc: (scheme_handler::parse_bool_value): + Convert to... + (key_handler::parse_bool_value): ...this. + (scheme_handler::parse_enum_value): Convert to... + (key_handler::parse_enum_value): ...this. + (struct text_scheme_handler::decoded_args): Eliminate, moving + fields into class text_scheme_handler. + (text_scheme_handler::text_scheme_handler): Initialize the new + fields. + Add a "dc" param and use it to initialize m_show_color. + (struct sarif_scheme_handler::decoded_args): Eliminate, moving + fields into class sarif_scheme_handler. + (sarif_scheme_handler::sarif_scheme_handler): Initialize the new + fields. + (struct html_scheme_handler::decoded_args): Eliminate, moving + fields into class html_scheme_handler. + (html_scheme_handler::html_scheme_handler): Initialize the new + fields. + (context::report_unknown_key): Get keys from scheme rather than + passing them in. Support client keys. + (context::parse_and_make_sink): Pass dc to output_factory ctor. + (output_factory::output_factory): Pass dc to text_scheme_handler. + (output_factory::get_scheme_handler): Make return non-const. + (output_factory::make_sink): Move key-handling here, rather than + in individual sinks. + (context::handle_kv): New. + (text_scheme_handler::make_sink): Eliminate key decoding. + (text_scheme_handler::decode_kv): Convert to... + (text_scheme_handler::maybe_handle_kv): ...this... + (text_scheme_handler::get_keys): ...and this. + (sarif_scheme_handler::make_sink): Eliminate key decoding. + (sarif_scheme_handler::decode_kv): Convert to... + (sarif_scheme_handler::maybe_handle_kv): ...this... + (sarif_scheme_handler::get_keys): ...and this. + (html_scheme_handler::make_sink): Eliminate key decoding. + (html_scheme_handler::decode_kv): Convert to... + (html_scheme_handler::maybe_handle_kv): ...this... + (html_scheme_handler::get_keys): ...and this. + (struct selftest::parser_test): Add "client_keys" arg, and update + for new param ordering. + (selftest::parser_test::parse_and_make_sink): New. + (selftest::test_output_arg_parsing): Move auto-fixes to caller. + (class selftest::test_key_handler): New. + (selftest::test_client_arg_parsing): New test. + (selftest::output_spec_cc_tests): Call it. + * diagnostics/output-spec.h (class key_handler): New. + (class scheme_handler): Move here from output-spec.cc. + (context::report_unknown_key): Simplify params. + (context::handle_kv): Update params. + (context::context): Add "client_keys" param. + (context::m_client_keys): New field. + (struct dc_spec_context): Update order of params. Add + "client_keys" param. + * libgdiagnostics.cc (spec_context::spec_context): Pass nullptr + for client keys. + * opts-diagnostic.cc (opt_spec_context::opt_spec_context): + Likewise. Update for new param ordering. + +2025-10-02 Richard Biener + + * tree-vect-loop.cc (vectorizable_reduction): Do not allow + mask reductions. + +2025-10-02 Jan Hubicka + H.J. Lu + + * cfghooks.cc (merge_blocks): Fix typo in the previous change. + +2025-10-02 Jeff Law + + PR target/122051 + * config/riscv/predicates.md (pmode_reg_or_uimm5_operand): Implement + directly rather than using vector_length_operand. + +2025-10-02 H.J. Lu + + * aclocal.m4: Regenerated. + * configure: Likewise. + +2025-10-02 Richard Biener + + PR tree-optimization/122079 + * tree-ssa-pre.cc (compute_antic_aux): Re-instantiate + ANTIC_IN value pruning by the old solution. + +2025-10-02 Richard Biener + + PR tree-optimization/122079 + * tree-ssa-pre.cc (prune_clobbered_mems): Do not prune + values when the maximum expression set is involved. + 2025-10-01 Jeff Law PR target/122106 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 924403eec65b..19b17599469d 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20251002 +20251005 diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index db7a3d17c819..bd489facd6c9 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,26 @@ +2025-10-05 Franck Behaghel + + PR ada/110314 + * sem_ch4.adb (Analyze_Allocator): Add call to New_Copy_Tree. + +2025-10-05 Eric Botcazou + + PR ada/112446 + * usage.adb (Usage): Add 'z' to the list of 'g' style. + +2025-10-05 Eric Botcazou + + PR ada/118343 + * Makefile.rtl (LLVM_BUILD): Delete. + +2025-10-04 Eric Botcazou + + PR ada/64869 + * sem_ch7.adb (Install_Private_Declarations): Also propagate the + Current_Use_Clause from partial to full view. + (Uninstall_Declarations): Extend implementation of RM 8.4(8.1/3) + subclause to all primitive subprograms. + 2025-09-30 Eric Botcazou PR ada/117517 diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog index 5e8a01c54c2e..d435387a4ded 100644 --- a/gcc/analyzer/ChangeLog +++ b/gcc/analyzer/ChangeLog @@ -1,3 +1,24 @@ +2025-10-03 David Malcolm + + Revert: + 2025-10-03 David Malcolm + + * ana-state-to-diagnostic-state.cc: Reimplement throughout to use + json::property instances found within custom_sarif_properties + throughout, rather than types in diagnostics::state_graphs. + * ana-state-to-diagnostic-state.h: Likewise. + * checker-event.cc: Likewise. + * sm-malloc.cc: Likewise. + +2025-10-02 David Malcolm + + * ana-state-to-diagnostic-state.cc: Reimplement throughout to use + json::property instances found within custom_sarif_properties + throughout, rather than types in diagnostics::state_graphs. + * ana-state-to-diagnostic-state.h: Likewise. + * checker-event.cc: Likewise. + * sm-malloc.cc: Likewise. + 2025-09-15 Alexandre Oliva * kf.cc (register_known_functions): Add __get_errno_ptr. diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 9054428d0140..465ab18c7d82 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,28 @@ +2025-10-04 Jakub Jelinek + + PR c++/114457 + * c-opts.cc (c_common_post_options): For C++26 set + flag_auto_var_init to AUTO_INIT_CXX26 if not specified explicitly. + For C++ disable warn_trivial_auto_var_init. + +2025-10-04 Nathaniel Shead + + PR c++/117658 + * c.opt: New flag '-Wexternal-tu-local'. + * c.opt.urls: Regenerate. + +2025-10-02 Alfie Richards + + * c-attribs.cc (attr_target_clones_exclusions): Add simd and omp + exclusions. + (attr_target_version_exclusions): New definition with simd and omp + exclusions. + (attr_omp_declare_simd_exclusions): New definition with target_version + and clones exclusions. + (attr_simd_exclusions): Ditto. + (c_common_gnu_attributes): Add new target_version, simd, and omp + declare simd variables. + 2025-10-01 Alejandro Colomar * c.opt.urls: Regenerate diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 72634fa53efb..1d25e9bb6c51 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,19 @@ +2025-10-02 Alfie Richards + + * c-decl.cc (maybe_mark_function_versioned): Add diagnostic. + * c-parser.cc (c_finish_omp_declare_simd): Add diagnostic. + +2025-10-02 Alfie Richards + + * c-decl.cc (maybe_mark_function_versioned): New function. + (merge_decls): Preserve DECL_FUNCTION_VERSIONED in merging. + (duplicate_decls): Add check and diagnostic for unmergable version decls. + (pushdecl): Add FMV target_version logic. + (lookup_name): Don't resolve non-default versions. + (start_decl): Mark and mangle versioned functions. + (start_function): Mark and mangle versioned functions. + (c_parse_final_cleanups): Add call to process_same_body_aliases. + 2025-10-01 Jan Hubicka * Make-lang.in: Add c_FDAS diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ab3878be2d9b..2b4812d975f2 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,125 @@ +2025-10-05 Nathaniel Shead + + PR c++/122053 + * name-lookup.cc (pushtag): Load any imported definition of type + before calling pushdecl. + +2025-10-05 Nathaniel Shead + + * name-lookup.cc (check_module_override): Remove check for + TREE_PUBLIC when checking mergeable entities. + +2025-10-04 Jakub Jelinek + + PR c++/114457 + * cp-tree.h: Implement C++26 P2795R5 - Erroneous behavior for + uninitialized reads. + (IF_STMT_VACUOUS_INIT_P): Define. + (check_goto): Change argument type from tree to tree *. + * call.cc (build_over_call): Add indeterminate attribute to + TARGET_EXPR slots for indeterminate parameters. + * constexpr.cc (cxx_eval_internal_function): Handle IFN_DEFERRED_INIT. + (cxx_eval_store_expression): Temporarily work around PR121965 bug. + * cp-gimplify.cc (genericize_if_stmt): Handle IF_STMT_VACUOUS_INIT_P. + (maybe_emit_clobber_object_begin): New function. + (cp_gimplify_expr): Call it for DECL_EXPRs and TARGET_EXPRs with + void type non-NULL TARGET_EXPR_INITIAL. + * decl.cc (struct named_label_fwd_direct_goto, + struct named_label_bck_direct_goto): New types. + (struct named_label_use_entry): Add direct_goto member. Formatting + fix. + (struct named_label_entry): Add direct_goto member. Turn bool members + into bool : 1. Add has_bad_decls bitfield. + (adjust_backward_gotos): New function. + (pop_labels): For flag_auto_var_init > AUTO_INIT_UNINITIALIZED + call adjust_backward_gotos if needed. + (poplevel_named_label_1): For decl_jump_unsafe also set + ent->has_bad_decls, and for decl_instrument_init_bypass_p decls + push them into ent->bad_decls vector too. + (duplicate_decls): Complain if indeterminate attribute on function + parameter isn't present on the first function declaration. + (decl_instrument_init_bypass_p): New function. + (build_deferred_init_call): Likewise. + (maybe_add_deferred_init_calls): Likewise. + (adjust_backward_goto): Likewise. + (check_previous_goto_1): Add direct_goto and case_label arguments. + For decl_instrument_init_bypass_p decls seen if + direct_goto || case_label move case label if needed, call + maybe_add_deferred_init_calls and adjust GOTO_EXPR operands remembered + in direct_goto. Change return type from bool to int, return 0 on + error, 1 for success with no need to adjust vacuous inits and 2 for + success with need to adjust those. + (check_previous_goto): Adjust check_previous_goto_1 call, vec_free + direct_goto vector. + (check_switch_goto): Add case_label argument, adjust + check_previous_goto_1 call. Change return type from bool to int. + (check_goto_1): Remove computed argument, add declp argument. Don't + reuse previous ent->uses if + ent->binding_level != current_binding_level. Push declp into + direct_goto vectors if needed. + (check_goto): Remove decl argument, add declp argument. Adjust + check_goto_1 calls. + (finish_case_label): Call check_switch_goto up to twice, first time + to detect errors and find out if second call will be needed, and + after c_add_case_label second time if needed. In the first case + pass NULL_TREE as new argument to it, in the second case r. + (start_preparsed_function): Don't emit CLOBBER_OBJECT_BEGIN here + for -flifetime-dse=2, instead add "clobber *this" attribute to + current_class_ptr. + * parser.cc (cp_parser_asm_label_list): Call check_goto only + after the TREE_LIST is created and pass address of its TREE_VALUE to + it instead of the label. + * semantics.cc (finish_goto_stmt): Call check_goto only after + build_stmt has been called and pass it address of its first operand + rather than destination. + * tree.cc (handle_indeterminate_attribute): New function. + (cxx_gnu_attributes): Add entry for indeterminate attribute. + +2025-10-04 Jason Merrill + + PR c++/122127 + PR c++/112632 + * pt.cc (convert_template_argument): Don't add redundant + IMPLICIT_CONV_EXPR. + +2025-10-04 Nathaniel Shead + + PR c++/117658 + * cp-tree.h (TU_LOCAL_ENTITY_NAME): Clarify meaning. + * module.cc (depset::entity_kind): New enumerator, assert that + we have enough bits reserved. + (depset::disc_bits): Assert the discriminator has enough bits. + (depset::entity_kind_name): Add 'tu-local' case, assert we + have an entry for all relevant entry_kinds. + (name_for_tu_local_decl): New function. + (trees_out::tree_node): Use it. + (depset::hash::make_dependency): Validate EK_TU_LOCAL. + (depset::hash::add_binding_entity): Generate bindings for + internal purview functions. + (enum ct_bind_flags): New enum for TU-local decls. + (depset::hash::find_dependencies): Handle EK_TU_LOCAL entities. + (binding_cmp): Likewise. + (sort_cluster): Likewise. + (module_state::write_cluster): Likewise. + (module_state::read_cluster): Likewise. + * name-lookup.cc (append_imported_binding_slot): Propagate + internal decl list when growing binding vector. + (name_lookup::adl_namespace_fns): Diagnose if naming a TU-local + entity from a different TU. + (set_module_binding): Include any internal decls in binding. + * name-lookup.h (struct module_tree_map_traits): New type. + (struct tree_binding_vec): Add member 'internal_decls'. + (BINDING_VECTOR_INTERNAL_DECLS): New getter. + (MODULE_BINDING_INTERNAL_DECLS_P): New flag. + (set_module_binding): Add parameter. + +2025-10-03 Egas Ribeiro + + PR c++/122112 + * parser.cc (cp_parser_parameter_declaration_clause): Don't + enable auto_is_implicit_function_template_parm_p when entering + class scope. + 2025-10-01 Iain Sandoe * constexpr.cc (cxx_eval_constant_expression): Use revised diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 1453a2a8df82..f9b4335bfecb 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,16 @@ +2025-10-04 Harald Anlauf + + PR fortran/107968 + * trans-io.cc (gfc_trans_transfer): Also scalarize I/O of section + of an array pointer. + +2025-10-03 Paul Thomas + + PR fortran/122089 + * decl.cc (gfc_get_pdt_instance): If gfc_extract_int is true an + error has occurred because the kind expr was not provided. Use + the template in this case and return MATCH_YES. + 2025-10-01 Harald Anlauf PR fortran/122080 diff --git a/gcc/m2/ChangeLog b/gcc/m2/ChangeLog index 1e9f73325155..60c19b663cf2 100644 --- a/gcc/m2/ChangeLog +++ b/gcc/m2/ChangeLog @@ -1,3 +1,20 @@ +2025-10-02 Gaius Mulley + + PR modula2/122009 + * gm2-compiler/M2GCCDeclare.mod (PrintKnown): Remove. + * gm2-gcc/m2type.cc (m2type_BuildEnumerator): Add const modifier. + * gm2-gcc/m2type.def (BuildEnumerator): Use ConstCharStar type. + * gm2-gcc/m2type.h (m2type_BuildEnumerator): Add const modifier. + * gm2-libs/M2WIDESET.mod (ShiftLeftByteBit): Rename variable to + as toIdx. + Rename variable from as fromIdx. + (ShiftRightByteBit): Rename variable to as toIdx. + Rename variable from as fromIdx. + (RotateLeft): Rename variable to as toIdx. + Rename variable from as fromIdx. + (ArithShiftLeftBit): Rename set to setb. + (ArithShiftRightBit): Rename set to setb. + 2025-10-01 Gaius Mulley PR modula2/122009 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7562dc2e953c..7b96dd733867 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,323 @@ +2025-10-05 Pan Li + + * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c: Add asm check + for vwaddu.wx. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h: Add test helper + macros. + * gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h: Add test + helper macros and data. + * gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_wx_run.h: New test. + * gcc.target/riscv/rvv/autovec/vx_vf/wx_vwaddu-run-1-u64.c: New test. + +2025-10-05 Nathaniel Shead + + PR c++/122053 + * g++.dg/modules/pr122053_a.C: New test. + * g++.dg/modules/pr122053_b.C: New test. + +2025-10-05 Nathaniel Shead + + * g++.dg/modules/namespace-1_c.C: Adjust to expect errors. + * g++.dg/modules/namespace-2_b.C: Likewise. + * g++.dg/modules/namespace-3_a.C: Removed. + * g++.dg/modules/namespace-3_b.C: Removed. + +2025-10-05 Franck Behaghel + + * gnat.dg/allocator3.adb: New test. + +2025-10-05 Eric Botcazou + + PR ada/113536 + * gnat.dg/reduce2.adb: New test. + +2025-10-04 Harald Anlauf + + PR fortran/107968 + * gfortran.dg/implied_do_io_9.f90: New test. + +2025-10-04 Andrew Pinski + + PR tree-optimization/122153 + * gcc.dg/tree-ssa/pr122153-1.c: New test. + +2025-10-04 Matteo Nicoli + + PR tree-optimization/117760 + * gcc.dg/int-bwise-opt-1.c: New test. + * gcc.dg/int-bwise-opt-2.c: New test. + +2025-10-04 Jakub Jelinek + + PR tree-optimization/122104 + * gcc.target/i386/pr122104.c: New test. + +2025-10-04 Raphael Moreira Zinsly + + PR target/122114 + * gcc.target/riscv/pr122114.c: New test. + +2025-10-04 Jeff Law + + PR target/122147 + * gcc.target/riscv/pr122147.c: New test. + +2025-10-04 Zhongyao Chen + + PR target/118945 + * gcc.target/riscv/rvv/autovec/pr118945-1.c: New file. + * gcc.target/riscv/rvv/autovec/pr118945-2.c: New file. + +2025-10-04 Eric Botcazou + + * gnat.dg/use_type1.adb: New test. + * gnat.dg/use_type2.adb: Likewise. + +2025-10-04 Jakub Jelinek + + * g++.dg/cpp2a/constexpr-new28.C: New test. + * g++.dg/cpp2a/constexpr-new29.C: New test. + +2025-10-04 Jakub Jelinek + + PR c++/114457 + * g++.dg/cpp1y/vla-initlist1.C: Remove dg-skip-if for powerpc. + Initialize i to 43 for ctor from initializer_list and expect value + 43 instead of 42. + * g++.dg/cpp26/attr-indeterminate1.C: New test. + * g++.dg/cpp26/attr-indeterminate2.C: New test. + * g++.dg/cpp26/attr-indeterminate3.C: New test. + * g++.dg/cpp26/attr-indeterminate4.C: New test. + * g++.dg/cpp26/erroneous1.C: New test. + * g++.dg/cpp26/erroneous2.C: New test. + * g++.dg/cpp26/erroneous3.C: New test. + * g++.dg/cpp26/erroneous4.C: New test. + * g++.dg/opt/store-merging-1.C: Add + -ftrivial-auto-var-init=uninitialized to dg-options. + * g++.dg/uninit-pred-loop-1_b.C: Expect a warning for C++26. + * g++.dg/warn/Wuninitialized-13.C: Expect warning on a different + line. + * c-c++-common/ubsan/vla-1.c: Add + -ftrivial-auto-var-init=uninitialized to dg-options. + * c-c++-common/uninit-17.c: For c++26 expect warning on a different + line. + * g++.dg/warn/Warray-bounds-20.C: Expect warning on a different line. + * c-c++-common/analyzer/invalid-shift-1.c: Xfail for c++26 until + PR122044 is fixed. + * g++.dg/analyzer/exception-value-2.C: Skip for c++26 until PR122044 + is fixed. + * c-c++-common/goacc-gomp/nesting-1.c: Skip for c++26 until PR121975 + is fixed. + * c-c++-common/goacc/kernels-decompose-2.c: Likewise. + * c-c++-common/goacc/kernels-decompose-pr100400-1-1.c: Likewise. + * c-c++-common/goacc/kernels-decompose-pr100400-1-3.c: Likewise. + * c-c++-common/goacc/kernels-decompose-pr104061-1-1.c: Likewise. + * c-c++-common/goacc/kernels-decompose-pr104061-1-3.c: Likewise. + * c-c++-common/goacc/kernels-decompose-pr104061-1-4.c: Likewise. + * c-c++-common/goacc/kernels-decompose-pr104132-1.c: Likewise. + * c-c++-common/goacc/kernels-decompose-pr104133-1.c: Likewise. + * c-c++-common/goacc/kernels-decompose-pr104774-1.c: Likewise. + * c-c++-common/goacc/mdc-1.c: Likewise. + +2025-10-04 Jason Merrill + + PR c++/122127 + PR c++/112632 + * g++.dg/cpp0x/lambda/lambda-template18.C: New test. + +2025-10-04 Nathaniel Shead + + PR c++/117658 + * g++.dg/modules/adl-6_c.C: Adjust diagnostics. + * g++.dg/modules/internal-14_c.C: Likewise. + * g++.dg/modules/internal-15_a.C: New test. + * g++.dg/modules/internal-15_b.C: New test. + +2025-10-03 Egas Ribeiro + + PR c++/122112 + * g++.dg/parse/auto-struct-param.C: New test. + +2025-10-03 David Malcolm + + Revert: + 2025-10-03 David Malcolm + + * gcc.dg/plugin/diagnostic_plugin_test_graphs.cc + (report_diag_with_graphs): Port from set_attr to set_property. + +2025-10-03 Jeff Law + + PR rtl-optimization/121937 + * gcc.target/riscv/pr121937.c: New test. + +2025-10-03 Andrew Pinski + + PR tree-optimization/121762 + * gcc.dg/tree-ssa/builtin-fprintf-1.c: Update to scan optimized. + * gcc.dg/tree-ssa/builtin-fprintf-chk-1.c: Likewise. + * gcc.dg/tree-ssa/builtin-printf-1.c: Likewise. + * gcc.dg/tree-ssa/builtin-printf-chk-1.c: Likewise. + * gcc.dg/tree-ssa/builtin-vfprintf-1.c: Likewise. + * gcc.dg/tree-ssa/builtin-vfprintf-chk-1.c: Likewise. + * gcc.dg/tree-ssa/builtin-vprintf-1.c: Likewise. + * gcc.dg/tree-ssa/builtin-vprintf-chk-1.c: Likewise. + * gcc.dg/tree-ssa/ssa-ccp-10.c: Likewise. + * gcc.dg/builtin-unreachable-5.c: Likewise. + * gcc.dg/builtin-unreachable-6.c: Likewise. + * gcc.dg/builtin-unreachable-6a.c: Likewise. + * gcc.dg/builtin-unreachable-7.c: Likewise. + * gcc.dg/pr78408-2.c: Change fab1 to forwprop1 as that + optimization was moved there a while back. + * gcc.dg/tree-ssa/pr79691.c: Udpate scanning for 9 + constant to return. + +2025-10-03 Andrew Pinski + + PR tree-optimization/122033 + * gcc.dg/tree-ssa/pr122033-1.c: New test. + * gcc.dg/tree-ssa/pr122033-2.c: New test. + +2025-10-03 Richard Earnshaw + + * gcc.target/aarch64/asm-flag-1.c: Scan for lt. + * gcc.target/aarch64/vector-compare-5.c: Use scan-tree-dump-times. + * gcc.target/aarch64/simd/fold_to_highpart_5.c: Scan for sabal2 + and uabal2. + * gcc.target/aarch64/sve/mixed_size_6.c: Scan for absence of + index with 2. + * gcc.target/aarch64/declare-simd-2.c: Scan for _ZGVnM4ul2v_f05 + and_ZGVnN8ul2v_f05 + * gcc.target/aarch64/sve/arith_1.c: Remove duplicate + scan-assembler patterns. + * gcc.target/aarch64/sve/cond_fmaxnm_1.c: Likewise. + * gcc.target/aarch64/sve/cond_fmaxnm_5.c: Likewise. + * gcc.target/aarch64/sve/cond_fminnm_1.c: Likewise. + * gcc.target/aarch64/sve/cond_fminnm_5.c: Likewise + * gcc.target/aarch64/sve/pcs/annotate_1.c: Likewise. + * gcc.target/aarch64/sve/uzp1_1.c: Likewise. + * gcc.target/aarch64/sve/uzp2_1.c: Likewise. + * gcc.target/aarch64/scalar_intrinsics.c: Scan for ursra. + * gcc.target/aarch64/singleton_intrinsics_1.c: Likewise. + * gcc.target/aarch64/sve/cond_fmaxnm_3.c: Fix register modifiers in + scan patterns. + * gcc.target/aarch64/sve/cond_fmaxnm_7.c: Likewise. + * gcc.target/aarch64/sve/cond_fminnm_3.c: Likewise. + * gcc.target/aarch64/sve/cond_fminnm_7.c: Likewise. + * gcc.target/aarch64/sve/cond_fmul_3.c: Likewise. + * gcc.target/aarch64/sve/cond_fsubr_3.c: Likewise. + * gcc.target/aarch64/ldp_stp_18.c: Fix typos in scan patterns. + * gcc.target/aarch64/sve/pcs/return_6.c: Likewise. + * gcc.target/aarch64/ror_2.c: Adjust constants to ensure + scan-assembler patterns are unique. + * gcc.target/aarch64/sve/struct_move_3.c: Likewise. + * gcc.target/aarch64/sve/struct_move_6.c: Likewise. + * gcc.target/aarch64/builtin_pld_pli.c: Use check-function-bodies + * gcc.target/aarch64/csinc-1.c: Likewise. + * gcc.target/aarch64/csneg-1.c: Likewise. + * gcc.target/aarch64/flt_mov_immediate_1.c: Likewise. + * gcc.target/aarch64/scalar_shift_1.c: Likewise. + +2025-10-03 Paul Thomas + + PR fortran/122089 + * gfortran.dg/pdt_52.f03: New test. + * gfortran.dg/pdt_53.f03: New test. + * gfortran.dg/pdt_54.f03: New test. + +2025-10-02 David Malcolm + + * gcc.dg/plugin/diagnostic_plugin_test_graphs.cc + (report_diag_with_graphs): Port from set_attr to set_property. + +2025-10-02 Joseph Myers + + * gcc.dg/c2y-init-2.c, gcc.dg/c2y-init-3.c: New tests. + +2025-10-02 Aurelien Jarno + + PR target/121652 + * gcc.target/riscv/rvv/autovec/vls/math-nearbyint-1.c: Adjust + scan pattern for fewer instances of frflags/fsrflags. + +2025-10-02 David Malcolm + + * gcc.dg/plugin/start_unit_plugin.cc: Fix typo in comment. + +2025-10-02 Jeff Law + + PR target/122051 + * gcc.target/riscv/pr122051.c: New test. + +2025-10-02 Alfie Richards + + * gcc.target/aarch64/mv-error11.c: New test. + * gcc.target/aarch64/mv-error12.c: New test. + +2025-10-02 Alfie Richards + + * gcc.target/aarch64/mv-and-mvc-error1.c: New test. + * gcc.target/aarch64/mv-and-mvc-error2.c: New test. + * gcc.target/aarch64/mv-and-mvc-error3.c: New test. + * gcc.target/aarch64/mv-error1.c: New test. + * gcc.target/aarch64/mv-error2.c: New test. + * gcc.target/aarch64/mv-error3.c: New test. + * gcc.target/aarch64/mv-error4.c: New test. + * gcc.target/aarch64/mv-error5.c: New test. + * gcc.target/aarch64/mv-error6.c: New test. + * gcc.target/aarch64/mv-error7.c: New test. + * gcc.target/aarch64/mv-error8.c: New test. + * gcc.target/aarch64/mv-error9.c: New test. + * gcc.target/aarch64/mv-error10.c: New test. + * gcc.target/aarch64/mvc-error1.c: New test. + * gcc.target/aarch64/mvc-error2.c: New test. + * gcc.target/aarch64/mvc-warning1.c: New test. + +2025-10-02 Alfie Richards + + * gcc.target/aarch64/mv-1.c: New test. + * gcc.target/aarch64/mv-and-mvc1.c: New test. + * gcc.target/aarch64/mv-and-mvc2.c: New test. + * gcc.target/aarch64/mv-and-mvc3.c: New test. + * gcc.target/aarch64/mv-and-mvc4.c: New test. + * gcc.target/aarch64/mv-symbols1.c: New test. + * gcc.target/aarch64/mv-symbols10.c: New test. + * gcc.target/aarch64/mv-symbols11.c: New test. + * gcc.target/aarch64/mv-symbols12.c: New test. + * gcc.target/aarch64/mv-symbols13.c: New test. + * gcc.target/aarch64/mv-symbols14.c: New test. + * gcc.target/aarch64/mv-symbols2.c: New test. + * gcc.target/aarch64/mv-symbols3.c: New test. + * gcc.target/aarch64/mv-symbols4.c: New test. + * gcc.target/aarch64/mv-symbols5.c: New test. + * gcc.target/aarch64/mv-symbols6.c: New test. + * gcc.target/aarch64/mv-symbols7.c: New test. + * gcc.target/aarch64/mv-symbols8.c: New test. + * gcc.target/aarch64/mv-symbols9.c: New test. + * gcc.target/aarch64/mvc-symbols1.c: New test. + * gcc.target/aarch64/mvc-symbols2.c: New test. + * gcc.target/aarch64/mvc-symbols3.c: New test. + * gcc.target/aarch64/mvc-symbols4.c: New test. + +2025-10-02 Richard Biener + + PR tree-optimization/122079 + * gcc.dg/torture/pr122079-2.c: New testcase. + * gcc.dg/torture/pr122079-3.c: Likewise. + +2025-10-02 Richard Biener + + PR tree-optimization/122079 + * gcc.dg/torture/pr122079-1.c: New testcase. + 2025-10-01 Jeff Law PR target/122106 diff --git a/libatomic/ChangeLog b/libatomic/ChangeLog index f9bbaae7f33f..1cc0e86c0452 100644 --- a/libatomic/ChangeLog +++ b/libatomic/ChangeLog @@ -1,3 +1,10 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + * testsuite/Makefile.in: Regenerate. + 2025-07-31 Yury Khrustalev * config/linux/aarch64/host-config.h (__ifunc_arg_t): diff --git a/libbacktrace/ChangeLog b/libbacktrace/ChangeLog index 4c1bc59e50db..fc2ba89aea8f 100644 --- a/libbacktrace/ChangeLog +++ b/libbacktrace/ChangeLog @@ -1,3 +1,9 @@ +2025-10-02 H.J. Lu + + * Makefile.in: Regenerated. + * aclocal.m4: Likewise. + * configure: Likewise. + 2025-09-28 Ian Lance Taylor * filetype.awk: Recognize PE bigobj objects at configure time. diff --git a/libcc1/ChangeLog b/libcc1/ChangeLog index bd1394ae4b6f..b82fc530cacb 100644 --- a/libcc1/ChangeLog +++ b/libcc1/ChangeLog @@ -1,3 +1,14 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + +2025-10-02 H.J. Lu + + * Makefile.in: Regenerated. + * aclocal.m4: Likewise. + * configure: Likewise. + 2025-07-25 David Malcolm * context.cc: Update usage of "diagnostic_info" to explicitly diff --git a/libffi/ChangeLog b/libffi/ChangeLog index aa96baa27144..fa099adcb70b 100644 --- a/libffi/ChangeLog +++ b/libffi/ChangeLog @@ -1,3 +1,12 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + * include/Makefile.in: Regenerate. + * man/Makefile.in: Regenerate. + * testsuite/Makefile.in: Regenerate. + 2024-10-24 Yang Yujie * src/loongarch64/ffi.c: Avoid defining floats diff --git a/libgcobol/ChangeLog b/libgcobol/ChangeLog index d6bd7e8121c8..a291753b8ce2 100644 --- a/libgcobol/ChangeLog +++ b/libgcobol/ChangeLog @@ -1,3 +1,9 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + 2025-09-05 Robert Dubner * common-defs.h (enum cbl_field_attr_t): Define register_e. diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index dc950cd17431..c4a8b8e982ce 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,9 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + 2025-09-02 Paul Thomas PR fortran/87669 diff --git a/libgm2/ChangeLog b/libgm2/ChangeLog index a7d26c880904..509c02e76164 100644 --- a/libgm2/ChangeLog +++ b/libgm2/ChangeLog @@ -1,3 +1,14 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + * libm2cor/Makefile.in: Regenerate. + * libm2iso/Makefile.in: Regenerate. + * libm2log/Makefile.in: Regenerate. + * libm2min/Makefile.in: Regenerate. + * libm2pim/Makefile.in: Regenerate. + 2025-09-19 Gaius Mulley * libm2pim/Makefile.am (M2MODS): Add M2Diagnostic.mod. diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index ea83d9e44418..66f26a62a10c 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,10 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + * testsuite/Makefile.in: Regenerate. + 2025-09-18 Tobias Burnus Sandra Loosemore diff --git a/libgrust/ChangeLog b/libgrust/ChangeLog index 71634f38be9e..dfb93f0dfa24 100644 --- a/libgrust/ChangeLog +++ b/libgrust/ChangeLog @@ -1,3 +1,11 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + * libformat_parser/Makefile.in: Regenerate. + * libproc_macro_internal/Makefile.in: Regenerate. + 2025-08-05 Marc Poulhiès * libproc_macro_internal/ffistring.h (FFIString__new): Likewise. diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 84edafa690d7..c60cf2859860 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,9 @@ +2025-10-02 H.J. Lu + + * aclocal.m4: Regenerated. + * configure: Likewise. + * configure.ac: Synced from binutils-gdb. + 2025-08-17 Nathaniel Shead PR c++/120503 diff --git a/libitm/ChangeLog b/libitm/ChangeLog index 4dab5b48ad72..fd20bb051fba 100644 --- a/libitm/ChangeLog +++ b/libitm/ChangeLog @@ -1,3 +1,10 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + * testsuite/Makefile.in: Regenerate. + 2025-05-09 David Malcolm PR other/116792 diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog index 723002ce4f6a..5ddf80e0e7e2 100644 --- a/libobjc/ChangeLog +++ b/libobjc/ChangeLog @@ -1,3 +1,8 @@ +2025-10-05 Sam James + + * aclocal.m4: Regenerate. + * configure: Regenerate. + 2024-09-23 Andrew Kreimer * Makefile.in: s/overrridden/overridden. diff --git a/libphobos/ChangeLog b/libphobos/ChangeLog index cabed28bb5d2..b803c615a015 100644 --- a/libphobos/ChangeLog +++ b/libphobos/ChangeLog @@ -1,3 +1,12 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + * libdruntime/Makefile.in: Regenerate. + * src/Makefile.in: Regenerate. + * testsuite/Makefile.in: Regenerate. + 2025-09-07 Sam James * configure.tgt: Add hppa[12]*-*-linux* as a supported target. diff --git a/libquadmath/ChangeLog b/libquadmath/ChangeLog index 00af00809826..63eb0ba6d5b3 100644 --- a/libquadmath/ChangeLog +++ b/libquadmath/ChangeLog @@ -1,3 +1,9 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + 2025-04-09 Jakub Jelinek * math/expq.c (C): Fix up THREEp96 constant. diff --git a/libsanitizer/ChangeLog b/libsanitizer/ChangeLog index 9151572ce8bb..8bfc854072b5 100644 --- a/libsanitizer/ChangeLog +++ b/libsanitizer/ChangeLog @@ -1,3 +1,17 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * asan/Makefile.in: Regenerate. + * configure: Regenerate. + * hwasan/Makefile.in: Regenerate. + * interception/Makefile.in: Regenerate. + * libbacktrace/Makefile.in: Regenerate. + * lsan/Makefile.in: Regenerate. + * sanitizer_common/Makefile.in: Regenerate. + * tsan/Makefile.in: Regenerate. + * ubsan/Makefile.in: Regenerate. + 2025-05-02 Florian Weimer Tom Stellard diff --git a/libssp/ChangeLog b/libssp/ChangeLog index d66e9f6fb652..37aafa3a86f3 100644 --- a/libssp/ChangeLog +++ b/libssp/ChangeLog @@ -1,3 +1,9 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + 2024-05-07 Rainer Orth * Makefile.am [LIBSSP_USE_SYMVER_SUN] (ssp.map-sun): Pass diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 3e0426c96e29..15fd68b01141 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,31 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + * doc/Makefile.in: Regenerate. + * include/Makefile.in: Regenerate. + * libsupc++/Makefile.in: Regenerate. + * po/Makefile.in: Regenerate. + * python/Makefile.in: Regenerate. + * src/Makefile.in: Regenerate. + * src/c++11/Makefile.in: Regenerate. + * src/c++17/Makefile.in: Regenerate. + * src/c++20/Makefile.in: Regenerate. + * src/c++23/Makefile.in: Regenerate. + * src/c++26/Makefile.in: Regenerate. + * src/c++98/Makefile.in: Regenerate. + * src/experimental/Makefile.in: Regenerate. + * src/filesystem/Makefile.in: Regenerate. + * src/libbacktrace/Makefile.in: Regenerate. + * testsuite/Makefile.in: Regenerate. + +2025-10-03 Tomasz Kamiński + + * doc/html/manual/index.html: Regenerated. + * doc/html/manual/status.html: Regenerated. + * doc/xml/manual/status_cxx2020.xml: Added status table. + 2025-10-01 François Dumont * include/std/vector (std::erase_if, std::erase): Replace _GLIBCXX20_CONSTEXPR diff --git a/libvtv/ChangeLog b/libvtv/ChangeLog index 4d1bd448bdce..c4f27708a554 100644 --- a/libvtv/ChangeLog +++ b/libvtv/ChangeLog @@ -1,3 +1,10 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + * testsuite/Makefile.in: Regenerate. + 2025-05-09 David Malcolm PR other/116792 diff --git a/lto-plugin/ChangeLog b/lto-plugin/ChangeLog index 18c1f5377881..9c4d232cf164 100644 --- a/lto-plugin/ChangeLog +++ b/lto-plugin/ChangeLog @@ -1,3 +1,9 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + 2025-03-06 Michal Jires * lto-plugin.c (cleanup_handler): Keep only files in ltrans diff --git a/zlib/ChangeLog b/zlib/ChangeLog index b0aebbc394fc..ebe9a0021086 100644 --- a/zlib/ChangeLog +++ b/zlib/ChangeLog @@ -1,3 +1,9 @@ +2025-10-02 H.J. Lu + + * Makefile.in: Regenerated. + * aclocal.m4: Likewise. + * configure: Likewise. + 2025-07-31 Sam James * configure: Regenerate. From 1fcdf214335fe047e42016a5915177f754a4f263 Mon Sep 17 00:00:00 2001 From: John David Anglin Date: Sun, 5 Oct 2025 12:52:28 -0400 Subject: [PATCH 092/216] hppa: Fix over alignment of 64-bit functions Both 32 and 64-bit assembly code needs 32-bit alignment. 2025-10-05 John David Anglin gcc/ChangeLog: * config/pa/pa.h (FUNCTION_BOUNDARY): Set to 32. --- gcc/config/pa/pa.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h index be845c83690b..6972faae8ec4 100644 --- a/gcc/config/pa/pa.h +++ b/gcc/config/pa/pa.h @@ -292,7 +292,7 @@ typedef struct GTY(()) machine_function #define PREFERRED_STACK_BOUNDARY (TARGET_64BIT ? 128 : 512) /* Allocation boundary (in *bits*) for the code of a function. */ -#define FUNCTION_BOUNDARY BITS_PER_WORD +#define FUNCTION_BOUNDARY 32 /* Alignment of field after `int : 0' in a structure. */ #define EMPTY_FIELD_BOUNDARY 32 From eb5a29677e9073eeff734b8bedd51fa7c3b5e6dc Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Sun, 5 Oct 2025 13:30:49 -0700 Subject: [PATCH 093/216] Disable some testcase for -Og Running the testsuite with ADDITIONAL_TORTURE_OPTIONS set include "-Og -g", there are a few extra failures in the torture testsuite. These 2 failures are expected so let's skip them in the same way for -O0. asm-inline.c is because inlining does not happen as much at -Og. restrict-8.c fails due to not building the points to aliasing info at -Og. gcc/testsuite/ChangeLog: * c-c++-common/torture/asm-inline.c: Disable at -Og. * gcc.dg/torture/restrict-8.c: Likewise. Signed-off-by: Andrew Pinski --- gcc/testsuite/c-c++-common/torture/asm-inline.c | 5 +++-- gcc/testsuite/gcc.dg/torture/restrict-8.c | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/gcc/testsuite/c-c++-common/torture/asm-inline.c b/gcc/testsuite/c-c++-common/torture/asm-inline.c index dea89658be44..03cb434173ff 100644 --- a/gcc/testsuite/c-c++-common/torture/asm-inline.c +++ b/gcc/testsuite/c-c++-common/torture/asm-inline.c @@ -1,6 +1,7 @@ /* { dg-do compile } */ -/* -O0 does no inlining, and -O3 does it too aggressively for this test: */ -/* { dg-skip-if "" { *-*-* } { "-O0" "-O3" } { "" } } +/* -O0 does no inlining, and -O3 does it too aggressively for this test: + -Og does not inline either. */ +/* { dg-skip-if "" { *-*-* } { "-O0" "-O3" "-Og" } { "" } } /* The normal asm is not inlined: */ /* { dg-final { scan-assembler-times "w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w" 2 } } */ /* But the asm inline is inlined: */ diff --git a/gcc/testsuite/gcc.dg/torture/restrict-8.c b/gcc/testsuite/gcc.dg/torture/restrict-8.c index 0118de0133c8..420ba2c64b3c 100644 --- a/gcc/testsuite/gcc.dg/torture/restrict-8.c +++ b/gcc/testsuite/gcc.dg/torture/restrict-8.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ -/* { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */ +/* -Og does not build the points-to aliasing info. */ +/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" } { "" } } */ /* { dg-options "-fdump-tree-fre1" } */ struct S { int i; void *p; int j; }; From a3727eb5e821d6a1916805029aeaed092e5e739d Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Sat, 4 Oct 2025 07:02:20 +0800 Subject: [PATCH 094/216] x86: Handle small OP size in setmem_epilogue_gen_val Since OP size passed to setmem_epilogue_gen_val may be smaller than the required vector size, duplicate it first before setting vector. gcc/ PR target/122150 * config/i386/i386-expand.cc (setmem_epilogue_gen_val): Duplicate OP if its size is smaller than MODE size. gcc/testsuite/ PR target/122150 * gcc.target/i386/pr122150.c: New test. Signed-off-by: H.J. Lu --- gcc/config/i386/i386-expand.cc | 25 +++++++++++++++++++++--- gcc/testsuite/gcc.target/i386/pr122150.c | 21 ++++++++++++++++++++ 2 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr122150.c diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc index c6f42275a3e5..0115af4d359e 100644 --- a/gcc/config/i386/i386-expand.cc +++ b/gcc/config/i386/i386-expand.cc @@ -8443,9 +8443,28 @@ setmem_epilogue_gen_val (void *op_p, void *prev_p, HOST_WIDE_INT, unsigned int op_size = GET_MODE_SIZE (op_mode); unsigned int size = GET_MODE_SIZE (mode); - unsigned int nunits = op_size / GET_MODE_SIZE (QImode); - machine_mode vec_mode - = mode_for_vector (QImode, nunits).require (); + unsigned int nunits; + machine_mode vec_mode; + if (op_size < size) + { + /* If OP size is smaller than MODE size, duplicate it. */ + nunits = size / GET_MODE_SIZE (QImode); + vec_mode = mode_for_vector (QImode, nunits).require (); + nunits = size / op_size; + gcc_assert (SCALAR_INT_MODE_P (op_mode)); + machine_mode dup_mode + = mode_for_vector (as_a (op_mode), + nunits).require (); + target = gen_reg_rtx (vec_mode); + op = gen_vec_duplicate (dup_mode, op); + rtx dup_op = gen_reg_rtx (dup_mode); + emit_move_insn (dup_op, op); + op = gen_rtx_SUBREG (vec_mode, dup_op, 0); + emit_move_insn (target, op); + return target; + } + nunits = op_size / GET_MODE_SIZE (QImode); + vec_mode = mode_for_vector (QImode, nunits).require (); target = gen_reg_rtx (vec_mode); op = gen_rtx_SUBREG (vec_mode, op, 0); emit_move_insn (target, op); diff --git a/gcc/testsuite/gcc.target/i386/pr122150.c b/gcc/testsuite/gcc.target/i386/pr122150.c new file mode 100644 index 000000000000..973c34d180ee --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr122150.c @@ -0,0 +1,21 @@ +/* { dg-do run } */ +/* { dg-options "-mstringop-strategy=unrolled_loop" } */ + +char c[2841]; + +__attribute__((noipa)) +void +foo (void) +{ + __builtin_memset (&c, 1, 2841); +} + +int +main (void) +{ + foo (); + for (unsigned i = 0; i < sizeof (c); i++) + if (c[i] != 1) + __builtin_abort(); + return 0; +} From 7762d809bf4ea08a7c74bd8b96ffb26e7fb923fd Mon Sep 17 00:00:00 2001 From: GCC Administrator Date: Mon, 6 Oct 2025 00:17:42 +0000 Subject: [PATCH 095/216] Daily bump. --- gcc/ChangeLog | 10 ++++++++++ gcc/DATESTAMP | 2 +- gcc/testsuite/ChangeLog | 10 ++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d2fd4b803276..7a03e9847e7d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2025-10-05 H.J. Lu + + PR target/122150 + * config/i386/i386-expand.cc (setmem_epilogue_gen_val): Duplicate + OP if its size is smaller than MODE size. + +2025-10-05 John David Anglin + + * config/pa/pa.h (FUNCTION_BOUNDARY): Set to 32. + 2025-10-05 Pan Li * config/riscv/autovec-opt.md (*widen_waddu_wx_): Add new diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 19b17599469d..aa218a9290f7 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20251005 +20251006 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7b96dd733867..5a2c3fd48c13 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2025-10-05 H.J. Lu + + PR target/122150 + * gcc.target/i386/pr122150.c: New test. + +2025-10-05 Andrew Pinski + + * c-c++-common/torture/asm-inline.c: Disable at -Og. + * gcc.dg/torture/restrict-8.c: Likewise. + 2025-10-05 Pan Li * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c: Add asm check From a7d8eca7244028990725ba01dd8a4ec6ebdac689 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Fri, 3 Oct 2025 09:54:45 -0700 Subject: [PATCH 096/216] Introduce fold_before_rtl_expansion_p [PR122142] As requested in https://inbox.sourceware.org/gcc-patches/CAFiYyc1jzZSZNhTas-DdMBFOzH1p96oGN=OVj6fyjt8HzDUyCA@mail.gmail.com/T/#u. This introduces fold_before_rtl_expansion_p to replace `(cfun->curr_properties & PROP_last_full_fold) != 0`. I am not a fan of include tree-pass.h in gimple-fold.h but that was the only way to reduce the number of changes. Bootrapped and tested on x86_64-linux-gnu. PR tree-optimization/122142 gcc/ChangeLog: * generic-match-head.cc: Include gimple-iterator.h and gimple-fold.h. * gimple-fold.cc (gimple_fold_builtin_constant_p): Use fold_before_rtl_expansion_p. (gimple_fold_builtin_assume_aligned): Likewise. (gimple_fold_builtin_stdarg): Likewise. (gimple_fold_call): Likewise. * gimple-fold.h: Include "tree-pass.h". (fold_before_rtl_expansion_p): New function. * match.pd: Use fold_before_rtl_expansion_p instead of `cfun->curr_properties & PROP_last_full_fold`. * tree-ssa-forwprop.cc (simplify_builtin_memcmp): Likewise. (optimize_stack_restore): Likewise. Signed-off-by: Andrew Pinski --- gcc/generic-match-head.cc | 2 ++ gcc/gimple-fold.cc | 11 +++++------ gcc/gimple-fold.h | 11 +++++++++++ gcc/match.pd | 6 +++--- gcc/tree-ssa-forwprop.cc | 4 ++-- 5 files changed, 23 insertions(+), 11 deletions(-) diff --git a/gcc/generic-match-head.cc b/gcc/generic-match-head.cc index aa1f9b6d2c87..ea4a958686db 100644 --- a/gcc/generic-match-head.cc +++ b/gcc/generic-match-head.cc @@ -45,6 +45,8 @@ along with GCC; see the file COPYING3. If not see #include "tree-pass.h" #include "attribs.h" #include "asan.h" +#include "gimple-iterator.h" +#include "gimple-fold.h" /* Routine to determine if the types T1 and T2 are effectively the same for GENERIC. If T1 or T2 is not a type, the test diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc index 2f64de2fb414..edcc04adc08c 100644 --- a/gcc/gimple-fold.cc +++ b/gcc/gimple-fold.cc @@ -38,6 +38,7 @@ along with GCC; see the file COPYING3. If not see #include "stor-layout.h" #include "dumpfile.h" #include "gimple-iterator.h" +#include "tree-pass.h" #include "gimple-fold.h" #include "gimplify.h" #include "tree-into-ssa.h" @@ -69,7 +70,6 @@ along with GCC; see the file COPYING3. If not see #include "varasm.h" #include "internal-fn.h" #include "gimple-range.h" -#include "tree-pass.h" enum strlen_range_kind { /* Compute the exact constant string length. */ @@ -5223,8 +5223,7 @@ gimple_fold_builtin_constant_p (gimple_stmt_iterator *gsi) /* Resolve __builtin_constant_p. If it hasn't been folded to integer_one_node by now, it's fairly certain that the value simply isn't constant. */ - if (!result - && (cfun->curr_properties & PROP_last_full_fold)) + if (!result && fold_before_rtl_expansion_p ()) result = integer_zero_node; if (!result) @@ -5239,7 +5238,7 @@ gimple_fold_builtin_constant_p (gimple_stmt_iterator *gsi) static bool gimple_fold_builtin_assume_aligned (gimple_stmt_iterator *gsi) { - if (!(cfun->curr_properties & PROP_last_full_fold)) + if (!fold_before_rtl_expansion_p ()) return false; gcall *call = as_a(gsi_stmt (*gsi)); @@ -5261,7 +5260,7 @@ static bool gimple_fold_builtin_stdarg (gimple_stmt_iterator *gsi, gcall *call) { /* These shouldn't be folded before pass_stdarg. */ - if (!(cfun->curr_properties & PROP_last_full_fold)) + if (!fold_before_rtl_expansion_p ()) return false; tree callee, lhs, rhs, cfun_va_list; @@ -6014,7 +6013,7 @@ gimple_fold_call (gimple_stmt_iterator *gsi, bool inplace) case IFN_ASSUME: /* Remove .ASSUME calls during the last fold since it is no longer needed. */ - if (cfun->curr_properties & PROP_last_full_fold) + if (fold_before_rtl_expansion_p ()) replace_call_with_value (gsi, NULL_TREE); break; case IFN_BUILTIN_EXPECT: diff --git a/gcc/gimple-fold.h b/gcc/gimple-fold.h index 3f617d1c4cd7..7244941722d8 100644 --- a/gcc/gimple-fold.h +++ b/gcc/gimple-fold.h @@ -22,6 +22,8 @@ along with GCC; see the file COPYING3. If not see #ifndef GCC_GIMPLE_FOLD_H #define GCC_GIMPLE_FOLD_H +#include "tree-pass.h" + extern tree canonicalize_constructor_val (tree, tree); extern tree get_symbol_constant_value (tree); struct c_strlen_data; @@ -280,4 +282,13 @@ extern tree gimple_simplify (combined_fn, tree, tree, tree, extern tree gimple_simplify (combined_fn, tree, tree, tree, tree, gimple_seq *, tree (*)(tree)); +/* Returns true if we are doing the fold before expansion to rtl. */ +inline bool +fold_before_rtl_expansion_p () +{ + if (!cfun) + return false; + return (cfun->curr_properties & PROP_last_full_fold) != 0; +} + #endif /* GCC_GIMPLE_FOLD_H */ diff --git a/gcc/match.pd b/gcc/match.pd index 60bdd3338c20..10a2c5e72d69 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -5259,7 +5259,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) expr_not_equal_to had a chance to match. Otherwise we'd do pretty much always just the second case. */ && cfun - && ((cfun->curr_properties & PROP_last_full_fold) != 0 + && (fold_before_rtl_expansion_p () || !flag_tree_vrp || optimize_debug)) (orotate @0 @@ -11830,7 +11830,7 @@ and, (plus:c (plus (rshift @0 integer_onep@1) (rshift @2 @1)) (bit_and (bit_ior @0 @2) integer_onep@3)) - (if (cfun && (cfun->curr_properties & PROP_last_full_fold) != 0 + (if (fold_before_rtl_expansion_p () && VECTOR_TYPE_P (type) && direct_internal_fn_supported_p (IFN_AVG_CEIL, type, OPTIMIZE_FOR_BOTH)) (IFN_AVG_CEIL @0 @2))) @@ -11839,7 +11839,7 @@ and, (minus (bit_ior @0 @2) (rshift (bit_xor @0 @2) integer_onep@1)) - (if (cfun && (cfun->curr_properties & PROP_last_full_fold) != 0 + (if (fold_before_rtl_expansion_p () && VECTOR_TYPE_P (type) && direct_internal_fn_supported_p (IFN_AVG_CEIL, type, OPTIMIZE_FOR_BOTH)) (IFN_AVG_CEIL @0 @2))) diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc index ad09f7334cc6..ee3bb401f31a 100644 --- a/gcc/tree-ssa-forwprop.cc +++ b/gcc/tree-ssa-forwprop.cc @@ -1846,7 +1846,7 @@ simplify_builtin_memcmp (gimple_stmt_iterator *gsi_p, gcall *stmt) /* Replace memcmp with memcmp_eq if the above fails. */ if (DECL_FUNCTION_CODE (gimple_call_fndecl (stmt)) == BUILT_IN_MEMCMP_EQ) return false; - if (!(cfun->curr_properties & (PROP_last_full_fold))) + if (!fold_before_rtl_expansion_p ()) return false; gimple_call_set_fndecl (stmt, builtin_decl_explicit (BUILT_IN_MEMCMP_EQ)); update_stmt (stmt); @@ -2147,7 +2147,7 @@ simplify_builtin_memcpy_memset (gimple_stmt_iterator *gsi_p, gcall *stmt2) static bool optimize_stack_restore (gimple_stmt_iterator *gsi, gimple *call) { - if (!(cfun->curr_properties & PROP_last_full_fold)) + if (!fold_before_rtl_expansion_p ()) return false; tree callee; gimple *stmt; From 96c4a32cfec8c4b4c677de114164192cfd8ae54d Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 6 Oct 2025 09:46:48 +0200 Subject: [PATCH 097/216] stmt: Handle %cc[name] in resolve_asm_operand_names [PR122133] Last year I've extended the asm template syntax in inline asm to support %cc0 etc., apparently the first 2 letter generic operand modifier. As the following testcase shows, I forgot to tweak the [foo] handling for it though. As final.cc will error on any % ISALPHA not followed by digit (with the exception of % c c digit), I think we can safely handle this for any 2 letters in between % and [, instead of hardcoding it for now only for %cc[ and changing it again next time we add something two-letter. 2025-10-06 Jakub Jelinek PR middle-end/122133 * stmt.cc (resolve_asm_operand_names): Handle % and 2 letters followed by open square. * c-c++-common/toplevel-asm-9.c: New test. --- gcc/stmt.cc | 5 ++++- gcc/testsuite/c-c++-common/toplevel-asm-9.c | 12 ++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/c-c++-common/toplevel-asm-9.c diff --git a/gcc/stmt.cc b/gcc/stmt.cc index 7942aa3e4848..f42878ae2077 100644 --- a/gcc/stmt.cc +++ b/gcc/stmt.cc @@ -849,7 +849,8 @@ resolve_asm_operand_names (tree string, tree outputs, tree inputs, tree labels) { if (c[1] == '[') break; - else if (ISALPHA (c[1]) && c[2] == '[') + else if (ISALPHA (c[1]) + && (c[2] == '[' || (ISALPHA (c[2]) && c[3] == '['))) break; else { @@ -873,6 +874,8 @@ resolve_asm_operand_names (tree string, tree outputs, tree inputs, tree labels) p += 1; else if (ISALPHA (p[1]) && p[2] == '[') p += 2; + else if (ISALPHA (p[1]) && ISALPHA (p[2]) && p[3] == '[') + p += 3; else { p += 1 + (p[1] == '%'); diff --git a/gcc/testsuite/c-c++-common/toplevel-asm-9.c b/gcc/testsuite/c-c++-common/toplevel-asm-9.c new file mode 100644 index 000000000000..a32187891aa1 --- /dev/null +++ b/gcc/testsuite/c-c++-common/toplevel-asm-9.c @@ -0,0 +1,12 @@ +/* PR middle-end/122133 */ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +extern int v[42], w; +int x[42], y; +void foo (void); +void bar (void) {} + +asm ("# %cc[foo]: %cc[v]: %cc[w]: %cc[bar] %cc[x] %cc[y]" + :: [foo] ":" (foo), [v] ":" (v), [w] ":" (&w), + [bar] "-i" (bar), [x] "-s" (x), [y] "-s" (&y)); From 1f1cd723c52deca6ea9aaa8c2b54e6c5b6478008 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Mon, 6 Oct 2025 09:06:45 +0200 Subject: [PATCH 098/216] tree-optimization/122158 - vector reduction epilog for bit-precision result The following makes sure to perform the vector element extraction using the element type and convert to the original, possibly bit-precision, result afterwards. I've also used gimple_build for the BIT_FIELD_REF since that simplifies the code. PR tree-optimization/122158 * tree-vect-loop.cc (vect_create_epilog_for_reduction): Handle bit-precision result. * gcc.dg/vect/pr122158.c: New testcase. --- gcc/testsuite/gcc.dg/vect/pr122158.c | 15 +++++++++++++++ gcc/tree-vect-loop.cc | 14 +++++--------- 2 files changed, 20 insertions(+), 9 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/vect/pr122158.c diff --git a/gcc/testsuite/gcc.dg/vect/pr122158.c b/gcc/testsuite/gcc.dg/vect/pr122158.c new file mode 100644 index 000000000000..5d0f7dac7dc0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr122158.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ + +int g_3, g_181, g_7; +void func_54(unsigned int, int *); +int func_24() +{ + int p_25; + int *l_49 = &g_3; + func_54(g_7, l_49); +} +void func_54(unsigned int p_55, int *p_56) +{ + for (g_181 = 27; g_181 != 9; --g_181) + p_55 || (*p_56 = 0); +} diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index df45adbe035d..73398e58fdc9 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -6049,8 +6049,6 @@ vect_create_epilog_for_reduction (loop_vec_info loop_vinfo, Create: va = vop } */ - tree rhs; - if (dump_enabled_p ()) dump_printf_loc (MSG_NOTE, vect_location, "Reduce using vector shifts\n"); @@ -6069,7 +6067,6 @@ vect_create_epilog_for_reduction (loop_vec_info loop_vinfo, new_temp = gimple_build (&stmts, code, vectype1, new_name, new_temp); } - gsi_insert_seq_before (&exit_gsi, stmts, GSI_SAME_STMT); /* 2.4 Extract the final scalar result. Create: s_out3 = extract_field */ @@ -6078,12 +6075,11 @@ vect_create_epilog_for_reduction (loop_vec_info loop_vinfo, dump_printf_loc (MSG_NOTE, vect_location, "extract scalar result\n"); - rhs = build3 (BIT_FIELD_REF, scalar_type, new_temp, - bitsize, bitsize_zero_node); - epilog_stmt = gimple_build_assign (new_scalar_dest, rhs); - new_temp = make_ssa_name (new_scalar_dest, epilog_stmt); - gimple_assign_set_lhs (epilog_stmt, new_temp); - gsi_insert_before (&exit_gsi, epilog_stmt, GSI_SAME_STMT); + new_temp = gimple_build (&stmts, BIT_FIELD_REF, TREE_TYPE (vectype1), + new_temp, bitsize, bitsize_zero_node); + new_temp = gimple_build (&stmts, VIEW_CONVERT_EXPR, + scalar_type, new_temp); + gsi_insert_seq_before (&exit_gsi, stmts, GSI_SAME_STMT); scalar_results.safe_push (new_temp); } else From 5f4baa41b6c8d7044797d5b942098cca79efd21e Mon Sep 17 00:00:00 2001 From: Tonu Naks Date: Thu, 18 Sep 2025 10:18:08 +0300 Subject: [PATCH 099/216] ada: Refine documentation of -gnatwr gcc/ada/ChangeLog: * doc/gnat_ugn/building_executable_programs_with_gnat.rst: refine description of -gnatwr * gnat_ugn.texi: Regenerate. --- .../doc/gnat_ugn/building_executable_programs_with_gnat.rst | 2 +- gcc/ada/gnat_ugn.texi | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst b/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst index 80f81a87ffb9..9893c5b77276 100644 --- a/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst +++ b/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst @@ -3755,7 +3755,7 @@ of the pragma in the :title:`GNAT_Reference_manual`). * Assignment of an item to itself. - * Type conversion that converts an expression to its own type. + * Type conversion that converts an expression to its own subtype. * Use of the attribute ``Base`` where ``typ'Base`` is the same as ``typ``. diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi index c92aaadd3b4c..86b2cbc5d3f7 100644 --- a/gcc/ada/gnat_ugn.texi +++ b/gcc/ada/gnat_ugn.texi @@ -19,7 +19,7 @@ @copying @quotation -GNAT User's Guide for Native Platforms , Sep 29, 2025 +GNAT User's Guide for Native Platforms , Oct 06, 2025 AdaCore @@ -12181,7 +12181,7 @@ is the current list of constructs regarded as redundant: Assignment of an item to itself. @item -Type conversion that converts an expression to its own type. +Type conversion that converts an expression to its own subtype. @item Use of the attribute @code{Base} where @code{typ'Base} is the same @@ -30333,8 +30333,8 @@ to permit their use in free software. @printindex ge -@anchor{d2}@w{ } @anchor{gnat_ugn/gnat_utility_programs switches-related-to-project-files}@w{ } +@anchor{d2}@w{ } @c %**end of body @bye From 725e4c5760a9ac29a29a28ca59352dcd97f3ea9f Mon Sep 17 00:00:00 2001 From: Ronan Desplanques Date: Wed, 24 Sep 2025 14:53:18 +0200 Subject: [PATCH 100/216] ada: Remove obsolete code This patch removes code that has been unused since the project manager infrastructure was retired. gcc/ada/ChangeLog: * fmap.ads (Add_Forbidden_File_Name): Remove obsolete code. * fmap.adb (Forbidden_Names, Add_Forbidden_File_Name, Mapped_Path_Name, Reset_Tables): Remove obsolete code. --- gcc/ada/fmap.adb | 22 ---------------------- gcc/ada/fmap.ads | 5 ----- 2 files changed, 27 deletions(-) diff --git a/gcc/ada/fmap.adb b/gcc/ada/fmap.adb index 4ca4f2330875..f5e0540e0f8f 100644 --- a/gcc/ada/fmap.adb +++ b/gcc/ada/fmap.adb @@ -106,23 +106,6 @@ package body Fmap is Last_In_Table : Int := 0; - package Forbidden_Names is new GNAT.HTable.Simple_HTable ( - Header_Num => Header_Num, - Element => Boolean, - No_Element => False, - Key => File_Name_Type, - Hash => Hash, - Equal => "="); - - ----------------------------- - -- Add_Forbidden_File_Name -- - ----------------------------- - - procedure Add_Forbidden_File_Name (Name : File_Name_Type) is - begin - Forbidden_Names.Set (Name, True); - end Add_Forbidden_File_Name; - --------------------- -- Add_To_File_Map -- --------------------- @@ -401,10 +384,6 @@ package body Fmap is Index : Int := No_Entry; begin - if Forbidden_Names.Get (File) then - return Error_File_Name; - end if; - Index := File_Hash_Table.Get (File); if Index = No_Entry then @@ -424,7 +403,6 @@ package body Fmap is Path_Mapping.Init; Unit_Hash_Table.Reset; File_Hash_Table.Reset; - Forbidden_Names.Reset; Last_In_Table := 0; end Reset_Tables; diff --git a/gcc/ada/fmap.ads b/gcc/ada/fmap.ads index 9fb77d8d5453..02f45882a037 100644 --- a/gcc/ada/fmap.ads +++ b/gcc/ada/fmap.ads @@ -70,9 +70,4 @@ package Fmap is procedure Reset_Tables; -- Initialize all the internal data structures - procedure Add_Forbidden_File_Name (Name : File_Name_Type); - -- Indicate that a source file name is forbidden. This is used when there - -- are excluded sources in projects (attributes Excluded_Source_Files or - -- Locally_Removed_Files). - end Fmap; From e77f62626f20fbe7aaf81f55f75e16b36632ff38 Mon Sep 17 00:00:00 2001 From: Ronan Desplanques Date: Thu, 25 Sep 2025 09:53:35 +0200 Subject: [PATCH 101/216] ada: Fix usage of Table.Table in Fmap Table.Table can be instantiated to use either 0-based or 1-based indexing, which can cause some confusion and make 0-based instances get used as 1-based ones. This was the case for two tables in Fmap before this patch. That did not cause any bugs but allocated an extra cell in the arrays that went unused. This patch also replaces Increment_Last-and-assignment combos with equivalent calls to Append. gcc/ada/ChangeLog: * fmap.adb (File_Mapping, Path_Mapping): Fix instantiations. (Add_To_File_Map): Use Table.Table.Append. --- gcc/ada/fmap.adb | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/gcc/ada/fmap.adb b/gcc/ada/fmap.adb index f5e0540e0f8f..4f20231365dd 100644 --- a/gcc/ada/fmap.adb +++ b/gcc/ada/fmap.adb @@ -58,7 +58,7 @@ package body Fmap is package File_Mapping is new Table.Table ( Table_Component_Type => Mapping, Table_Index_Type => Int, - Table_Low_Bound => 0, + Table_Low_Bound => 1, Table_Initial => 1_000, Table_Increment => 1_000, Table_Name => "Fmap.File_Mapping"); @@ -67,7 +67,7 @@ package body Fmap is package Path_Mapping is new Table.Table ( Table_Component_Type => Mapping, Table_Index_Type => Int, - Table_Low_Bound => 0, + Table_Low_Bound => 1, Table_Initial => 1_000, Table_Increment => 1_000, Table_Name => "Fmap.Path_Mapping"); @@ -121,19 +121,15 @@ package body Fmap is if Unit_Entry = No_Entry or else File_Mapping.Table (Unit_Entry).Fname /= File_Name then - File_Mapping.Increment_Last; + File_Mapping.Append ((Uname => Unit_Name, Fname => File_Name)); Unit_Hash_Table.Set (Unit_Name, File_Mapping.Last); - File_Mapping.Table (File_Mapping.Last) := - (Uname => Unit_Name, Fname => File_Name); end if; if File_Entry = No_Entry or else Path_Mapping.Table (File_Entry).Fname /= Path_Name then - Path_Mapping.Increment_Last; + Path_Mapping.Append ((Uname => Unit_Name, Fname => Path_Name)); File_Hash_Table.Set (File_Name, Path_Mapping.Last); - Path_Mapping.Table (Path_Mapping.Last) := - (Uname => Unit_Name, Fname => Path_Name); end if; end Add_To_File_Map; From 17e59eebf9ce02665a37cbeb51d9b4c2cf80d2ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Poulhi=C3=A8s?= Date: Tue, 16 Sep 2025 15:07:29 +0200 Subject: [PATCH 102/216] ada: Fix extended access and memory pool explicit deref Explicit dereference of an extended access with data allocation in a memory pool would crash the compiler. gcc/ada/ChangeLog: * gcc-interface/trans.cc (Attribute_to_gnu): Handle extended access. --- gcc/ada/gcc-interface/trans.cc | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/gcc/ada/gcc-interface/trans.cc b/gcc/ada/gcc-interface/trans.cc index e80002e31113..cdbd4828c825 100644 --- a/gcc/ada/gcc-interface/trans.cc +++ b/gcc/ada/gcc-interface/trans.cc @@ -1937,12 +1937,17 @@ Attribute_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_ptr = gnu_prefix; tree gnu_obj_type; - gnu_result_type = get_unpadded_type (Etype (gnat_node)); - - /* If this is fat pointer, the object must have been allocated with the - template in front of the array. So compute the template address; do - it by converting to a thin pointer. */ - if (TYPE_IS_FAT_POINTER_P (TREE_TYPE (gnu_ptr))) + if (Is_Extended_Access_Type (Etype (Prefix (gnat_node))) + && !Is_Constrained (Etype (gnat_node))) + gnu_result_type = get_unpadded_extended_type (Etype (gnat_node)); + else + gnu_result_type = get_unpadded_type (Etype (gnat_node)); + + /* If this is fat or extended pointer, the object must have been + allocated with the template in front of the array. So compute the + template address; do it by converting to a thin pointer. */ + if (TYPE_IS_FAT_POINTER_P (TREE_TYPE (gnu_ptr)) + || TYPE_IS_EXTENDED_POINTER_P (TREE_TYPE (gnu_ptr))) gnu_ptr = convert (build_pointer_type (TYPE_OBJECT_RECORD_TYPE From 022f2ed33cc4ec1353dd5b60a961d7529521bc31 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Wed, 24 Sep 2025 19:02:34 +0200 Subject: [PATCH 103/216] ada: Implement proper upcasting in more cases Upcasting (conversion from a tagged type extension to one of its parents) is represented as a simple N_Type_Conversion node in the expanded code, but translating it into a VIEW_CONVERT_EXPR is a bit problematic because source and target types of the GCC node are supposed to have the same size (at least in "non-pathological" cases). That's why Gigi attempts to build an explicit chain of references to the appropriate _Parent (sub)component instead, but it currently does that only for simple (i.e. non-discriminated) tagged types. This can be easily extended to discriminated tagged types in not-too-dynamic cases (an example is the ACATS c391002 test). gcc/ada/ChangeLog: * gcc-interface/utils.cc (convert): Also extract the _Parent field to implement upcasting in the case where only the sizes match. --- gcc/ada/gcc-interface/utils.cc | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/gcc/ada/gcc-interface/utils.cc b/gcc/ada/gcc-interface/utils.cc index eff58b107519..f176ca9eb65f 100644 --- a/gcc/ada/gcc-interface/utils.cc +++ b/gcc/ada/gcc-interface/utils.cc @@ -5343,10 +5343,20 @@ convert (tree type, tree expr) && !type_annotate_only) { tree child_etype = etype; + /* Loop through the nested _Parent fields until we find one with either + directly the right type (simple record case), or only the right size + (discriminated record case), and extract it to be the new expression. + Note that build_component_ref will automatically build the chain of + COMPONENT_REFs in the case where it is not the immediate parent. */ do { tree field = TYPE_FIELDS (child_etype); - if (DECL_NAME (field) == parent_name_id && TREE_TYPE (field) == type) - return build_component_ref (expr, field, false); + if (DECL_NAME (field) == parent_name_id) + { + if (TREE_TYPE (field) == type) + return build_component_ref (expr, field, false); + if (operand_equal_p (DECL_SIZE (field), TYPE_SIZE (type), 0)) + return convert (type, build_component_ref (expr, field, false)); + } child_etype = TREE_TYPE (field); } while (TREE_CODE (child_etype) == RECORD_TYPE); } From 8de9c3b0e92a07b9cfac6d33fd58362fe0a1786e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Poulhi=C3=A8s?= Date: Mon, 22 Sep 2025 10:57:13 +0200 Subject: [PATCH 104/216] ada: Fix handling of Extended_Access with array subtype MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For array subtypes, return the extended types corresponding to the array type. gcc/ada/ChangeLog: * gcc-interface/decl.cc (get_extended_unconstrained_array): Handle array subtype. Co-authored-by: Éric Botcazou --- gcc/ada/gcc-interface/decl.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gcc/ada/gcc-interface/decl.cc b/gcc/ada/gcc-interface/decl.cc index 9ade3fd8c4e9..7ebd43211953 100644 --- a/gcc/ada/gcc-interface/decl.cc +++ b/gcc/ada/gcc-interface/decl.cc @@ -5310,6 +5310,10 @@ get_extended_unconstrained_array (Entity_Id gnat_entity, tree gnu_type) gcc_assert (Is_Array_Type (gnat_entity) && TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE); + + if (Ekind (gnat_entity) == E_Array_Subtype) + return get_extended_unconstrained_array (Etype (gnat_entity), gnu_type); + tree gnu_extended_type = TYPE_EXTENDED_UNCONSTRAINED_ARRAY (gnu_type); /* Building the extended type is achieved by translating the array type From 9b102d2e1e32e59bb2b5b8060998236d277773c7 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Mon, 6 Oct 2025 09:53:07 +0200 Subject: [PATCH 105/216] tree-optimization/122131 - do not use re-align load for gathers As we now ask vect_supportable_dr_alignment for gathers avoid using (optimized) re-align instructions for them. PR tree-optimization/122131 * tree-vect-data-refs.cc (vect_supportable_dr_alignment): Do not use re-align loads for gathers. * gcc.target/powerpc/altivec-39.c: New testcase. --- gcc/testsuite/gcc.target/powerpc/altivec-39.c | 17 +++++++++++++++++ gcc/tree-vect-data-refs.cc | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/powerpc/altivec-39.c diff --git a/gcc/testsuite/gcc.target/powerpc/altivec-39.c b/gcc/testsuite/gcc.target/powerpc/altivec-39.c new file mode 100644 index 000000000000..3263eb7bbc61 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/altivec-39.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -maltivec" } */ +/* { dg-require-effective-target powerpc_altivec } */ + +char *sort_filesquote_name_buf_plimit; +int sort_filesquote_name_buf_width; +int *__ctype_b_loc() __attribute__((__const__)); +void sort_filesquote_name_buf(char* p) +{ + unsigned displayed_width = 0; + while (p < sort_filesquote_name_buf_plimit) { + if (__ctype_b_loc()[*p]) + displayed_width++; + p++; + } + sort_filesquote_name_buf_width = displayed_width; +} diff --git a/gcc/tree-vect-data-refs.cc b/gcc/tree-vect-data-refs.cc index a31ff93bbd3c..c40a52059112 100644 --- a/gcc/tree-vect-data-refs.cc +++ b/gcc/tree-vect-data-refs.cc @@ -6610,7 +6610,7 @@ vect_supportable_dr_alignment (vec_info *vinfo, dr_vec_info *dr_info, } } */ - if (DR_IS_READ (dr)) + if (DR_IS_READ (dr) && !is_gather_scatter) { if (can_implement_p (vec_realign_load_optab, mode) && (!targetm.vectorize.builtin_mask_for_load From ad2991b27490cabcf54d8926a52976ca19de3afc Mon Sep 17 00:00:00 2001 From: Jennifer Schmitz Date: Thu, 21 Aug 2025 10:01:49 -0700 Subject: [PATCH 106/216] aarch64: Fix ICE when op2 is zero for SVE2 saturating add intrinsics. When op2 in SVE2 saturating add intrinsics (svuqadd, svsqadd) is a zero vector and predication is _z, an ICE in vregs occurs, e.g. for svuint8_t foo (svbool_t pg, svuint8_t op1) { return svsqadd_u8_z (pg, op1, svdup_s8 (0)); } The insn failed to match the pattern (aarch64-sve2.md): ;; Predicated binary operations with no reverse form, merging with zero. ;; At present we don't generate these patterns via a cond_* optab, ;; so there's no correctness requirement to handle merging with an ;; independent value. (define_insn_and_rewrite "*cond__z" [(set (match_operand:SVE_FULL_I 0 "register_operand") (unspec:SVE_FULL_I [(match_operand: 1 "register_operand") (unspec:SVE_FULL_I [(match_operand 5) (unspec:SVE_FULL_I [(match_operand:SVE_FULL_I 2 "register_operand") (match_operand:SVE_FULL_I 3 "register_operand")] SVE2_COND_INT_BINARY_NOREV)] UNSPEC_PRED_X) (match_operand:SVE_FULL_I 4 "aarch64_simd_imm_zero")] UNSPEC_SEL))] "TARGET_SVE2" {@ [ cons: =0 , 1 , 2 , 3 ] [ &w , Upl , 0 , w ] movprfx\t%0., %1/z, %0.\;\t%0., %1/m, %0., %3. [ &w , Upl , w , w ] movprfx\t%0., %1/z, %2.\;\t%0., %1/m, %0., %3. } "&& !CONSTANT_P (operands[5])" { operands[5] = CONSTM1_RTX (mode); } [(set_attr "movprfx" "yes")] ) because operands[3] and operands[4] were both expanded into the same register operand containing a zero vector by define_expand "@cond_". This patch fixes the ICE by making a case distinction in function_expander::use_cond_insn that uses add_fixed_operand if fallback_arg == CONST0_RTX (mode), and otherwise add_input_operand (which was previously the default and allowed the expansion of the zero-vector fallback_arg to a register operand). The patch was bootstrapped and tested on aarch64-linux-gnu, no regression. OK for trunk? Alex Coplan pointed out in the bugzilla ticket that this ICE goes back to GCC 10. Shall we backport? Signed-off-by: Jennifer Schmitz Co-authored by: Richard Sandiford gcc/ PR target/121599 * config/aarch64/aarch64-sve-builtins.cc (function_expander::use_cond_insn): Use add_fixed_operand if fallback_arg == CONST0_RTX (mode). gcc/testsuite/ PR target/121599 * gcc.target/aarch64/sve2/pr121599.c: New test. --- gcc/config/aarch64/aarch64-sve-builtins.cc | 6 +++- .../gcc.target/aarch64/sve2/pr121599.c | 31 +++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/pr121599.c diff --git a/gcc/config/aarch64/aarch64-sve-builtins.cc b/gcc/config/aarch64/aarch64-sve-builtins.cc index 22d75197188d..4956e364929c 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins.cc @@ -4356,7 +4356,11 @@ function_expander::use_cond_insn (insn_code icode, unsigned int merge_argno) add_input_operand (icode, pred); for (unsigned int i = 0; i < nops; ++i) add_input_operand (icode, args[opno + i]); - add_input_operand (icode, fallback_arg); + if (fallback_arg == CONST0_RTX (mode) + && insn_operand_matches (icode, m_ops.length (), fallback_arg)) + add_fixed_operand (fallback_arg); + else + add_input_operand (icode, fallback_arg); return generate_insn (icode); } diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/pr121599.c b/gcc/testsuite/gcc.target/aarch64/sve2/pr121599.c new file mode 100644 index 000000000000..90c5ac97e4f8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/pr121599.c @@ -0,0 +1,31 @@ +/* PR target/121599. */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ + +#include + +/* +** foo: +** movi d([0-9]+), #0 +** movprfx z0\.b, p0/z, z0\.b +** usqadd z0\.b, p0/m, z0\.b, z\1\.b +** ret +*/ +svuint8_t foo (svbool_t pg, svuint8_t op1) +{ + return svsqadd_u8_z (pg, op1, svdup_s8 (0)); +} + +/* +** bar: +** movi d([0-9]+), #0 +** movprfx z0\.b, p0/z, z0\.b +** suqadd z0\.b, p0/m, z0\.b, z\1\.b +** ret +*/ +svint8_t bar (svbool_t pg, svint8_t op1) +{ + return svuqadd_n_s8_z (pg, op1, 0); +} + From e5731a4bc50e95245cb628505142e0adff0bb79e Mon Sep 17 00:00:00 2001 From: Georg-Johann Lay Date: Sun, 5 Oct 2025 20:56:56 +0200 Subject: [PATCH 107/216] AVR: Speed up IEEE double comparisons. IEEE double can be compared without first converting them to the internal representation. libgcc/config/avr/libf7/ * libf7-common.mk (g_xdd_cmp): Remove le, lt, ge, gt, ne, eq, unord. (F7_ASM_PARTS): Add D_cmp, D_eq, D_ne, D_ge, D_gt, D_le, D_lt, D_unord. * libf7-asm.sx (D_cmp, D_eq, D_ne, D_ge, D_gt, D_le, D_lt, D_unord): New modules. * f7-wraps.h: Rebuild. gcc/testsuite/ * gcc.target/avr/cmpdi-1.c: New test. --- gcc/testsuite/gcc.target/avr/cmpdi-1.c | 149 ++++++++++++++++++++ libgcc/config/avr/libf7/f7-wraps.h | 72 +--------- libgcc/config/avr/libf7/libf7-asm.sx | 178 ++++++++++++++++++++++++ libgcc/config/avr/libf7/libf7-common.mk | 3 +- 4 files changed, 330 insertions(+), 72 deletions(-) create mode 100644 gcc/testsuite/gcc.target/avr/cmpdi-1.c diff --git a/gcc/testsuite/gcc.target/avr/cmpdi-1.c b/gcc/testsuite/gcc.target/avr/cmpdi-1.c new file mode 100644 index 000000000000..e7f59c1a29e2 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/cmpdi-1.c @@ -0,0 +1,149 @@ +/* { dg-do run { target { ! avr_tiny } } } */ +/* { dg-additional-options { -std=gnu99 -Os -mcall-prologues } } */ + +typedef __INT8_TYPE__ int8_t; +typedef __UINT8_TYPE__ uint8_t; +typedef __UINT16_TYPE__ uint16_t; +typedef __UINT64_TYPE__ uint64_t; +typedef __INT64_TYPE__ int64_t; + +#define ARRAY_SIZE(X) (sizeof(X) / sizeof(*X)) + +const __flash uint64_t mant[] = + { + 0x0000000000000, + 0x0000000000001, + 0x0000000000100, + 0x0000000010000, + 0x0000001000000, + 0x0000100000000, + 0x0010000000000, + 0x1000000000000, + 0x00000000000ff, + 0x00000000000ff, + 0x000000000ffff, + 0x0000000ffffff, + 0x00000ffffffff, + 0x000ffffffffff, + 0x0ffffffffffff, + 0xfffffffffffff, + 0xfffffffffff00, + 0xfffffffff0000, + 0xfffffff000000, + 0xfffff00000000, + 0xfff0000000000, + 0xff00000000000, + 0xf000000000000, + 0x7ffffffffffff, + 0x8000000000000, + 0x8000000000001, + 0xffffffffffffe + }; + +const __flash uint16_t expo[] = + { + 0x000, + 0x001, + 0x002, + 0x7fe, + 0x7ff + }; + +#define SMASK ((uint64_t) 1 << 63) +#define xNAN 0x7f + +char d64_nan_p (uint64_t a) +{ + return (a & ~SMASK) > (uint64_t) 0x7ff << 52; +} + +int8_t cmp_d64 (uint64_t a, uint64_t b) +{ + if (d64_nan_p (a) || d64_nan_p (b)) + return xNAN; + + if (a & SMASK) a = SMASK - a; + if (b & SMASK) b = SMASK - b; + __asm ("" : "+r" (a)); + __asm ("" : "+r" (b)); + + return a == b + ? 0 + : (int64_t) a > (int64_t) b ? 1 : -1; +} + +extern int8_t eq (uint64_t, uint64_t) __asm("__eqdf2"); +extern int8_t ne (uint64_t, uint64_t) __asm("__nedf2"); +extern int8_t ge (uint64_t, uint64_t) __asm("__gedf2"); +extern int8_t gt (uint64_t, uint64_t) __asm("__gtdf2"); +extern int8_t le (uint64_t, uint64_t) __asm("__ledf2"); +extern int8_t lt (uint64_t, uint64_t) __asm("__ltdf2"); +extern int8_t unord (uint64_t, uint64_t) __asm("__unorddf2"); + +void test1 (uint64_t a, uint64_t b) +{ + int8_t d, c = cmp_d64 (a, b); + d = eq (a, b); + if (c == xNAN && d) __builtin_exit (1); + if (c != xNAN && d != (c == 0)) __builtin_exit (2); + + d = ne (a, b); + if (c == xNAN && d) __builtin_exit (3); + if (c != xNAN && d != (c != 0)) __builtin_exit (4); + + d = ge (a, b); + if (c == xNAN && d) __builtin_exit (5); + if (c != xNAN && d != (c >= 0)) __builtin_exit (6); + + d = gt (a, b); + if (c == xNAN && d) __builtin_exit (7); + if (c != xNAN && d != (c > 0)) __builtin_exit (8); + + d = le (a, b); + if (c == xNAN && d) __builtin_exit (9); + if (c != xNAN && d != (c <= 0)) __builtin_exit (10); + + d = lt (a, b); + if (c == xNAN && d) __builtin_exit (11); + if (c != xNAN && d != (c < 0)) __builtin_exit (12); + + d = unord (a, b); + if (c == xNAN && !d) __builtin_exit (13); + if (c != xNAN && d) __builtin_exit (14); +} + + +void testAB (uint64_t a, uint64_t b) +{ + test1 (a, b); + test1 (a, b ^ SMASK); + test1 (a ^ SMASK, b); + test1 (a ^ SMASK, b ^ SMASK); +} + +void testA (uint64_t a) +{ + for (uint8_t i = 0; i < ARRAY_SIZE (mant); ++i) + { + uint64_t b = mant[i]; + for (uint8_t j = 0; j < ARRAY_SIZE (expo); ++j) + testAB (a, b | ((uint64_t) expo[j] << 52)); + } +} + +void tests (void) +{ + for (uint8_t i = 0; i < ARRAY_SIZE (mant); ++i) + { + uint64_t a = mant[i]; + for (uint8_t j = 0; j < ARRAY_SIZE (expo); ++j) + testA (a | ((uint64_t) expo[j] << 52)); + } +} + + +int main (void) +{ + tests (); + return 0; +} diff --git a/libgcc/config/avr/libf7/f7-wraps.h b/libgcc/config/avr/libf7/f7-wraps.h index 409492ed1d29..7c39783aef05 100644 --- a/libgcc/config/avr/libf7/f7-wraps.h +++ b/libgcc/config/avr/libf7/f7-wraps.h @@ -79,77 +79,7 @@ _ENDF __divdf3 #endif /* F7MOD_D_div_ */ ;; Functions that usually live in libgcc: __df2 for in: -;; le lt ge gt ne eq unord - -;; bool __ledf2 (double, double) ; le -#ifdef F7MOD_D_le_ -_DEFUN __ledf2 - .global F7_NAME(le_impl) - ldi ZH, hi8(gs(F7_NAME(le_impl))) - ldi ZL, lo8(gs(F7_NAME(le_impl))) - F7jmp call_xdd -_ENDF __ledf2 -#endif /* F7MOD_D_le_ */ - -;; bool __ltdf2 (double, double) ; lt -#ifdef F7MOD_D_lt_ -_DEFUN __ltdf2 - .global F7_NAME(lt_impl) - ldi ZH, hi8(gs(F7_NAME(lt_impl))) - ldi ZL, lo8(gs(F7_NAME(lt_impl))) - F7jmp call_xdd -_ENDF __ltdf2 -#endif /* F7MOD_D_lt_ */ - -;; bool __gedf2 (double, double) ; ge -#ifdef F7MOD_D_ge_ -_DEFUN __gedf2 - .global F7_NAME(ge_impl) - ldi ZH, hi8(gs(F7_NAME(ge_impl))) - ldi ZL, lo8(gs(F7_NAME(ge_impl))) - F7jmp call_xdd -_ENDF __gedf2 -#endif /* F7MOD_D_ge_ */ - -;; bool __gtdf2 (double, double) ; gt -#ifdef F7MOD_D_gt_ -_DEFUN __gtdf2 - .global F7_NAME(gt_impl) - ldi ZH, hi8(gs(F7_NAME(gt_impl))) - ldi ZL, lo8(gs(F7_NAME(gt_impl))) - F7jmp call_xdd -_ENDF __gtdf2 -#endif /* F7MOD_D_gt_ */ - -;; bool __nedf2 (double, double) ; ne -#ifdef F7MOD_D_ne_ -_DEFUN __nedf2 - .global F7_NAME(ne_impl) - ldi ZH, hi8(gs(F7_NAME(ne_impl))) - ldi ZL, lo8(gs(F7_NAME(ne_impl))) - F7jmp call_xdd -_ENDF __nedf2 -#endif /* F7MOD_D_ne_ */ - -;; bool __eqdf2 (double, double) ; eq -#ifdef F7MOD_D_eq_ -_DEFUN __eqdf2 - .global F7_NAME(eq_impl) - ldi ZH, hi8(gs(F7_NAME(eq_impl))) - ldi ZL, lo8(gs(F7_NAME(eq_impl))) - F7jmp call_xdd -_ENDF __eqdf2 -#endif /* F7MOD_D_eq_ */ - -;; bool __unorddf2 (double, double) ; unord -#ifdef F7MOD_D_unord_ -_DEFUN __unorddf2 - .global F7_NAME(unord_impl) - ldi ZH, hi8(gs(F7_NAME(unord_impl))) - ldi ZL, lo8(gs(F7_NAME(unord_impl))) - F7jmp call_xdd -_ENDF __unorddf2 -#endif /* F7MOD_D_unord_ */ +;; (none) ;; Functions that usually live in libgcc: __ for in: ;; fixdfsi fixdfdi fixunsdfdi fixunsdfsi truncdfsf2 diff --git a/libgcc/config/avr/libf7/libf7-asm.sx b/libgcc/config/avr/libf7/libf7-asm.sx index a06792d155ff..186beb29cc5a 100644 --- a/libgcc/config/avr/libf7/libf7-asm.sx +++ b/libgcc/config/avr/libf7/libf7-asm.sx @@ -1727,6 +1727,184 @@ ENDF class_D #endif /* F7MOD_D_class_ */ +#ifdef F7MOD_D_cmp_ + +#define A0 18 +#define A1 A0 + 1 +#define A2 A0 + 2 +#define A3 A0 + 3 +#define A4 A0 + 4 +#define A5 A0 + 5 +#define A6 A0 + 6 +#define A7 A0 + 7 + +#define B0 10 +#define B1 B0 + 1 +#define B2 B0 + 2 +#define B3 B0 + 3 +#define B4 B0 + 4 +#define B5 B0 + 5 +#define B6 B0 + 6 +#define B7 B0 + 7 + +#define AA5 XH +#define AA6 ZL +#define AA7 ZH + +#define BB0 A0 +#define BB1 A1 +#define BB2 A2 +#define BB3 A3 +#define BB4 A4 +#define BB5 A5 +#define BB6 A6 +#define BB7 A7 + +;;; Helper for __df2 and __unorddf2. +;;; T = 1: Comparison is unordered. +;;; T = 0: Comparison is ordered, and Z, N, C, S flags are set according +;;; to compare (double A, double B) as if set by a signed int comparison. +;;; Note that f(+0) = f(-0) = 0. +;;; In any case, return R24 = 1. +DEFUN D_cmp + rcall D_cmp.map_i64 + brts 9f + ;; Save A somewhere else... + wmov AA6, A6 + mov AA5, A5 + push A4 + push A3 + push A2 + push A1 + mov r0, A0 + ;; ... so that we can use D_cmp.map_i64 on B. + wmov BB6, B6 + wmov BB4, B4 + wmov BB2, B2 + wmov BB0, B0 + rcall D_cmp.map_i64 + ;; Run the following code even when B is NaN (T=1) so as to pop the regs. + ;; In the non-NaN case, AA and BB can be compared like int64_t for the + ;; sake of comparing A and B as double. + CP r0, BB0 $ pop r0 + cpc r0, BB1 $ pop r0 + cpc r0, BB2 $ pop r0 + cpc r0, BB3 $ pop r0 + cpc r0, BB4 + cpc AA5, BB5 + cpc AA6, BB6 + cpc AA7, BB7 +9: ldi r24, 1 + ret + +;;; A is NaN: Set T=1. +;;; A is not a NaN: Set T=0, and map double A to int64_t such that +;;; f(A) f(B) iff A B, i.e. we can treat the result +;;; as int64_t for the matter of double comparison. +;;; Clobbers: XL. +D_cmp.map_i64: + bst A7, 7 + cbr A7, 0x80 + ;; If Inf < |A|, then we have a NaN. + CP __zero_reg__, A0 + cpc __zero_reg__, A1 + cpc __zero_reg__, A2 + cpc __zero_reg__, A3 + cpc __zero_reg__, A4 + cpc __zero_reg__, A5 + ldi XL, lo8(0x7ff0) $ cpc XL, A6 + ldi XL, hi8(0x7ff0) $ cpc XL, A7 + brlo .Lunord + brtc 9f + clt + .global __negdi2 + XJMP __negdi2 +.Lunord: + set +9: ret + +ENDF D_cmp +#endif /* F7MOD_D_cmp_ */ + + +;; bool __ledf2 (double, double); +#ifdef F7MOD_D_le_ +_DEFUN __ledf2 + F7call D_cmp + brts 0f + breq 1f + brlt 1f +0: ldi r24, 0 +1: ret +_ENDF __ledf2 +#endif /* F7MOD_D_le_ */ + +;; bool __ltdf2 (double, double); +#ifdef F7MOD_D_lt_ +_DEFUN __ltdf2 + F7call D_cmp + brts 0f + brlt 1f +0: ldi r24, 0 +1: ret +_ENDF __ltdf2 +#endif /* F7MOD_D_lt_ */ + +;; bool __gedf2 (double, double); +#ifdef F7MOD_D_ge_ +_DEFUN __gedf2 + F7call D_cmp + brts 0f + brge 1f +0: ldi r24, 0 +1: ret +_ENDF __gedf2 +#endif /* F7MOD_D_ge_ */ + +;; bool __gtdf2 (double, double); +#ifdef F7MOD_D_gt_ +_DEFUN __gtdf2 + F7call D_cmp + brts 0f + breq 0f + brge 1f +0: ldi r24, 0 +1: ret +_ENDF __gtdf2 +#endif /* F7MOD_D_gt_ */ + +;; bool __nedf2 (double, double); +#ifdef F7MOD_D_ne_ +_DEFUN __nedf2 + F7call D_cmp + brts 0f + brne 1f +0: ldi r24, 0 +1: ret +_ENDF __nedf2 +#endif /* F7MOD_D_ne_ */ + +;; bool __eqdf2 (double, double); +#ifdef F7MOD_D_eq_ +_DEFUN __eqdf2 + F7call D_cmp + brts 0f + breq 1f +0: ldi r24, 0 +1: ret +_ENDF __eqdf2 +#endif /* F7MOD_D_eq_ */ + +;; bool __unorddf2 (double, double); +#ifdef F7MOD_D_unord_ +_DEFUN __unorddf2 + F7call D_cmp + bld r24, 0 + ret +_ENDF __unorddf2 +#endif /* F7MOD_D_unord_ */ + + #ifdef F7MOD_call_dd_ ;; Provide double wrappers for functions that operate on f7_t and get f7_t*. diff --git a/libgcc/config/avr/libf7/libf7-common.mk b/libgcc/config/avr/libf7/libf7-common.mk index 644be2cf195f..0e6acfdbdf77 100644 --- a/libgcc/config/avr/libf7/libf7-common.mk +++ b/libgcc/config/avr/libf7/libf7-common.mk @@ -24,13 +24,14 @@ F7_ASM_PARTS += store_expo sqrt16 sqrt_approx div F7_ASM_PARTS += D_class D_fma D_powi F7_ASM_PARTS += D_isnan D_isinf D_isfinite D_signbit D_copysign D_neg D_fabs +F7_ASM_PARTS += D_cmp D_eq D_ne D_ge D_gt D_le D_lt D_unord F7_ASM_PARTS += call_dd call_ddd # Stuff that will be wrapped in f7-wraps.h (included by libf7-asm.sx) # and give f7_asm_D_*.o modules. g_ddd += add sub mul div -g_xdd_cmp += le lt ge gt ne eq unord +g_xdd_cmp += g_dx += floatunsidf floatsidf extendsfdf2 g_xd += fixdfsi fixdfdi fixunsdfdi fixunsdfsi truncdfsf2 From efb3cd64fdefab88c7787b16ad33be33f4c4a2a4 Mon Sep 17 00:00:00 2001 From: Georg-Johann Lay Date: Sun, 5 Oct 2025 20:56:56 +0200 Subject: [PATCH 108/216] AVR/LibF7: target/122177 - fix fmin / fmax return value for one NaN arg. fmin and fmax should return the non-NaN argument in the case where exactly one argument is a NaN. Moreover, IEEE double fmin and fmax can be performed without first converting the args to the internal representation and then converting back again. PR target/122177 libgcc/config/avr/libf7/ * libf7-common.mk (m_ddd): Remove: fmin, fmax. (F7_ASM_PARTS): Add: D_fminfmax. * libf7-asm.sx (D_fmanfmax): New module. * f7-wraps.h: Rebuild. gcc/testsuite/ * gcc.target/avr/fminfmax-1.c: New test. --- gcc/testsuite/gcc.target/avr/fminfmax-1.c | 116 ++++++++++++++++++++++ libgcc/config/avr/libf7/f7-wraps.h | 26 +---- libgcc/config/avr/libf7/libf7-asm.sx | 90 ++++++++++++++++- libgcc/config/avr/libf7/libf7-common.mk | 4 +- 4 files changed, 206 insertions(+), 30 deletions(-) create mode 100644 gcc/testsuite/gcc.target/avr/fminfmax-1.c diff --git a/gcc/testsuite/gcc.target/avr/fminfmax-1.c b/gcc/testsuite/gcc.target/avr/fminfmax-1.c new file mode 100644 index 000000000000..eba910cff8c3 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/fminfmax-1.c @@ -0,0 +1,116 @@ +/* { dg-do run { target { ! avr_tiny } } } */ +/* { dg-additional-options { -std=gnu99 -Os -mcall-prologues } } */ + +typedef __INT8_TYPE__ int8_t; +typedef __UINT8_TYPE__ uint8_t; +typedef __UINT16_TYPE__ uint16_t; +typedef __UINT64_TYPE__ uint64_t; +typedef __INT64_TYPE__ int64_t; + +#define ARRAY_SIZE(X) (sizeof(X) / sizeof(*X)) + +const __flash uint64_t vals[] = + { + // NaNs + 0xffffffffffffffff, + 0x7fffffffffffffff, + 0xfff0000000000001, + 0x7ff0000000000001, + + // Some non-NaN doubles, increasing in magnitude. + 0xfff0000000000000, // -Inf + 0xffefffffffffffff, + 0xffe0000000000000, + 0x8010000000000000, + 0x800fffffffffffff, + 0x800ffffffffffffe, + 0x8007fffffffffffe, + 0x8000000000000001, + 0x0000000000000000, + 0x0000000000000001, + 0x0007fffffffffffe, + 0x000ffffffffffffe, + 0x000fffffffffffff, + 0x0010000000000000, + 0x7fe0000000000000, + 0x7fefffffffffffff, + 0x7ff0000000000000 // +Inf + }; + +#define SMASK ((uint64_t) 1 << 63) + +char d64_nan_p (uint64_t a) +{ + return (a & ~SMASK) > (uint64_t) 0x7ff << 52; +} + +extern uint64_t xmin (uint64_t, uint64_t) __asm("__fmin"); +extern uint64_t xmax (uint64_t, uint64_t) __asm("__fmax"); + +void test_fmin (uint8_t i, uint8_t j) +{ + uint64_t a = vals[i]; + uint64_t b = vals[j]; + uint64_t m = xmin (a, b); + + char a_nan_p = d64_nan_p (a); + char b_nan_p = d64_nan_p (b); + + if (a_nan_p + b_nan_p == 2) + { + if (!d64_nan_p (m)) + __builtin_exit (__LINE__); + } + else + { + uint64_t r = 0?0 + : a_nan_p ? b + : b_nan_p ? a + : i < j ? a : b; + if (r != m) + __builtin_exit (__LINE__); + } +} + + +void test_fmax (uint8_t i, uint8_t j) +{ + uint64_t a = vals[i]; + uint64_t b = vals[j]; + uint64_t m = xmax (a, b); + + char a_nan_p = d64_nan_p (a); + char b_nan_p = d64_nan_p (b); + + if (a_nan_p + b_nan_p == 2) + { + if (!d64_nan_p (m)) + __builtin_exit (__LINE__); + } + else + { + uint64_t r = 0?0 + : a_nan_p ? b + : b_nan_p ? a + : i > j ? a : b; + if (r != m) + __builtin_exit (__LINE__); + } +} + + +void tests (void) +{ + for (uint8_t i = 0; i < ARRAY_SIZE (vals); ++i) + for (uint8_t j = 0; j < ARRAY_SIZE (vals); ++j) + { + test_fmin (i, j); + } +} + + +int main (void) +{ + tests (); + return 0; +} diff --git a/libgcc/config/avr/libf7/f7-wraps.h b/libgcc/config/avr/libf7/f7-wraps.h index 7c39783aef05..9033e962ad27 100644 --- a/libgcc/config/avr/libf7/f7-wraps.h +++ b/libgcc/config/avr/libf7/f7-wraps.h @@ -169,7 +169,7 @@ _ENDF __extendsfdf2 ;; Functions that usually live in libm: Depending on [long] double layout, ;; define and l as weak alias(es) of __ for in: -;; pow fmin fmax fmod hypot atan2 fdim +;; pow fmod hypot atan2 fdim ;; double __pow (double, double) #ifdef F7MOD_D_pow_ @@ -183,30 +183,6 @@ _DEFUN __pow _ENDF __pow #endif /* F7MOD_D_pow_ */ -;; double __fmin (double, double) -#ifdef F7MOD_D_fmin_ -_DEFUN __fmin - DALIAS fmin - LALIAS fminl - .global F7_NAME(fmin) - ldi ZH, hi8(gs(F7_NAME(fmin))) - ldi ZL, lo8(gs(F7_NAME(fmin))) - F7jmp call_ddd -_ENDF __fmin -#endif /* F7MOD_D_fmin_ */ - -;; double __fmax (double, double) -#ifdef F7MOD_D_fmax_ -_DEFUN __fmax - DALIAS fmax - LALIAS fmaxl - .global F7_NAME(fmax) - ldi ZH, hi8(gs(F7_NAME(fmax))) - ldi ZL, lo8(gs(F7_NAME(fmax))) - F7jmp call_ddd -_ENDF __fmax -#endif /* F7MOD_D_fmax_ */ - ;; double __fmod (double, double) #ifdef F7MOD_D_fmod_ _DEFUN __fmod diff --git a/libgcc/config/avr/libf7/libf7-asm.sx b/libgcc/config/avr/libf7/libf7-asm.sx index 186beb29cc5a..33e8f78006cf 100644 --- a/libgcc/config/avr/libf7/libf7-asm.sx +++ b/libgcc/config/avr/libf7/libf7-asm.sx @@ -1765,10 +1765,14 @@ ENDF class_D ;;; T = 0: Comparison is ordered, and Z, N, C, S flags are set according ;;; to compare (double A, double B) as if set by a signed int comparison. ;;; Note that f(+0) = f(-0) = 0. -;;; In any case, return R24 = 1. +;;; In any case: +;;; - return R24 = 1. +;;; - return R25.0 = isNaN (A) +;;; - return R25.1 = isNaN (B) DEFUN D_cmp rcall D_cmp.map_i64 - brts 9f + bld __tmp_reg__, 0 + push __tmp_reg__ ;; Save A somewhere else... wmov AA6, A6 mov AA5, A5 @@ -1794,7 +1798,14 @@ DEFUN D_cmp cpc AA5, BB5 cpc AA6, BB6 cpc AA7, BB7 -9: ldi r24, 1 + pop r25 + ;; R25.0 <=> A is NaN + ;; R25.1 <=> B is NaN + ;; T <=> comparison is unordered + bld r25, 1 + sbrc r25, 0 + set + ldi r24, 1 ret ;;; A is NaN: Set T=1. @@ -1904,6 +1915,79 @@ _DEFUN __unorddf2 _ENDF __unorddf2 #endif /* F7MOD_D_unord_ */ +#ifdef F7MOD_D_fminfmax_ +_DEFUN __fmin +DALIAS fmin +LALIAS fminl + inc __zero_reg__ + +_LABEL __fmax +DALIAS fmax +LALIAS fmaxl + ;; Push A[]. + push r25 + push r24 + push r23 + push r22 + push r21 + push r20 + push r19 + push r18 + ;; fmin or fmax + push __zero_reg__ + clr __zero_reg__ + + XCALL __gedf2 + + pop __tmp_reg__ + andi r25, 0x3 ; NaNs? + brne .Lnan + ;; No NaNs involved. + eor __tmp_reg__, r24 ; (f == fmin) ^ (A >= B) + brne 1f +2: + ;; Return B since the cases are: + ;; fmax && A < B + ;; fmin && A >= B +#ifdef __AVR_XMEGA__ + in XL, __SP_L__ + in XH, __SP_H__ + adiw XL, 8 + out __SP_L__, XL + out __SP_H__, XH +#else + pop r0 $ pop r0 $ pop r0 $ pop r0 + pop r0 $ pop r0 $ pop r0 $ pop r0 +#endif + wmov r24, r16 + wmov r22, r14 + wmov r20, r12 + wmov r18, r10 + ret +1: + ;; Return A since the cases are: + ;; fmax && A >= B + ;; fmin && A < B + pop r18 + pop r19 + pop r20 + pop r21 + pop r22 + pop r23 + pop r24 + pop r25 + ret + +.Lnan: + ;; There are NaNs. + ;; When only the 1st argument is a NaN, then return the 2nd argument + cpi r25, 0x1 + breq 2b + ;; When the 2nd argument is a NaN, then return the 1st argument. + ;; When both arguments are NaNs, then return NaN (e.g. the 1st argument). + rjmp 1b +_ENDF __fmax +#endif /* F7MOD_D_fminfmax_ */ #ifdef F7MOD_call_dd_ diff --git a/libgcc/config/avr/libf7/libf7-common.mk b/libgcc/config/avr/libf7/libf7-common.mk index 0e6acfdbdf77..2d3adaf45697 100644 --- a/libgcc/config/avr/libf7/libf7-common.mk +++ b/libgcc/config/avr/libf7/libf7-common.mk @@ -24,7 +24,7 @@ F7_ASM_PARTS += store_expo sqrt16 sqrt_approx div F7_ASM_PARTS += D_class D_fma D_powi F7_ASM_PARTS += D_isnan D_isinf D_isfinite D_signbit D_copysign D_neg D_fabs -F7_ASM_PARTS += D_cmp D_eq D_ne D_ge D_gt D_le D_lt D_unord +F7_ASM_PARTS += D_cmp D_eq D_ne D_ge D_gt D_le D_lt D_unord D_fminfmax F7_ASM_PARTS += call_dd call_ddd @@ -35,7 +35,7 @@ g_xdd_cmp += g_dx += floatunsidf floatsidf extendsfdf2 g_xd += fixdfsi fixdfdi fixunsdfdi fixunsdfsi truncdfsf2 -m_ddd += pow fmin fmax fmod hypot atan2 fdim +m_ddd += pow fmod hypot atan2 fdim m_ddx += ldexp frexp m_dd += sqrt cbrt exp exp10 pow10 log log10 log2 sin cos tan cotan asin acos atan m_dd += ceil floor trunc round sinh cosh tanh From 955217839f5cff7b64202eb08496e16a29d7acc4 Mon Sep 17 00:00:00 2001 From: Sam James Date: Wed, 14 Aug 2024 13:15:30 +0100 Subject: [PATCH 109/216] doc: mention STAGE1_CFLAGS STAGE1_CFLAGS can be used to accelerate the just-built stage1 compiler which especially improves its performance on some of the large generated files during bootstrap. It defaults to nothing (i.e. -O0). The downside is that if the native compiler is buggy, there's a greater risk of a failed bootstrap. Those with a modern native compiler, ideally a recent version of GCC, should be able to use -O1 or -O2 without issue to get a faster build. PR rtl-optimization/111619 * doc/install.texi (Building a native compiler): Discuss STAGE1_CFLAGS. --- gcc/doc/install.texi | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index fc771448274a..576b7eead5ec 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -3125,6 +3125,13 @@ Again, if the native compiler miscompiles the stage1 compiler, you may need to work around this by avoiding non-working parts of the stage1 compiler. Use @code{STAGE1_TFLAGS} to this end. +You can use @code{STAGE1_CFLAGS} to set the flags passed to the host compiler +when building the stage1 compiler. The default is to pass @option{-g}, but when +the host compiler is GCC, this results in a non-optimized build of the stage1 +compiler. You can speed up the bootstrap by using @samp{STAGE1_CFLAGS='-O2'} +at the increased risk of miscompiling the stage1 compiler when the host +compiler is buggy. + If you used the flag @option{--enable-languages=@dots{}} to restrict the compilers to be built, only those you've actually enabled will be built. This will of course only build those runtime libraries, for From 13f5a627dcab882fdf9183f96a8270c7f5229f95 Mon Sep 17 00:00:00 2001 From: Andrew MacLeod Date: Thu, 2 Oct 2025 11:51:01 -0400 Subject: [PATCH 110/216] If a range's bitmask changes, reflect it in the bounds. Rather than trying to be smart, if the bitmask changes, adjust all range bounds to satisfy the bitmask requirements. PR tree-optimization/121206 gcc/ * value-range.cc (irange::intersect_bitmask): Always call set_range_from_bitmask if the bitmask changes. gcc/testsuite * gcc.dg/pr121987.c: New. --- gcc/testsuite/gcc.dg/pr121987.c | 16 ++++++++++++++++ gcc/value-range.cc | 11 ++++------- 2 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr121987.c diff --git a/gcc/testsuite/gcc.dg/pr121987.c b/gcc/testsuite/gcc.dg/pr121987.c new file mode 100644 index 000000000000..04845a4d8caa --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr121987.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ +int a, b, c, d; +int main() { + unsigned long e = 10000000000; + unsigned f; + int g; + while (a) { + c = 1; + d = f; + f = ~(~(~(b && g) % a * ~e) << c); + b = e && f % e + ~f; + g = a; + } + return 0; +} diff --git a/gcc/value-range.cc b/gcc/value-range.cc index dc6909e77c54..d34a2623db44 100644 --- a/gcc/value-range.cc +++ b/gcc/value-range.cc @@ -2552,22 +2552,19 @@ irange::intersect_bitmask (const irange &r) { gcc_checking_assert (!undefined_p () && !r.undefined_p ()); + // If the bitmasks are the same, do nothing. if (m_bitmask == r.m_bitmask) return false; irange_bitmask bm = get_bitmask (); irange_bitmask save = bm; bm.intersect (r.get_bitmask ()); - // Use ths opportunity to make sure mask always reflects the - // best mask we have. - m_bitmask = bm; - // Updating m_bitmask may still yield a semantic bitmask (as - // returned by get_bitmask) which is functionally equivalent to what - // we originally had. In which case, there's still no change. - if (save == bm || save == get_bitmask ()) + // If the new mask is the same, there is no change. + if (m_bitmask == bm) return false; + m_bitmask = bm; if (!set_range_from_bitmask ()) normalize_kind (); if (flag_checking) From e04e815708789c8c2675742b323ba28786527640 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Thu, 2 Oct 2025 12:12:05 +0200 Subject: [PATCH 111/216] Fix description of --param auto-profile-bbs gcc/ChangeLog: * params.opt (-param=auto-profile-bbs=): Add missing full stop after description. --- gcc/params.opt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/params.opt b/gcc/params.opt index 1f6297de1638..f8884e976e7f 100644 --- a/gcc/params.opt +++ b/gcc/params.opt @@ -68,7 +68,7 @@ Enable asan detection of use-after-return bugs. -param=auto-profile-bbs= Common Joined UInteger Var(param_auto_profile_bbs) Init(1) IntegerRange(0, 1) Param Optimization -Build basic block profile using auto profile +Build basic block profile using auto profile. -param=cycle-accurate-model= Common Joined UInteger Var(param_cycle_accurate_model) Init(1) IntegerRange(0, 1) Param Optimization From 075310d3a3ef1a8b483b62d9535887b37f291ee4 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Mon, 6 Oct 2025 21:35:22 +0200 Subject: [PATCH 112/216] Update profile in tree-ssa-dce The profile mismatches uncovered by my merge_blocks change are actually caused by tree-ssa-dce not updating profile of blocks with no statements for whose it optimized away control dependencies. In most cases those basic blocks are merged or skipped as forwarders. I tried to simply set their count as uninitialized but that upsets verifier since in some cases we keep the block around (for example, when it is header of a loop). In all cases I debugged we optimized away an unnecesary loop and while merging old code picked porfile of loop preheader, while we now pick loop header. This is however not guaranteed and we may process blocks in different order and pick wrong profile. Since regions of dead basic blocks must be acyclic it is easy to propagate the frequencies as implemented by this patch. Bootstrapped/regtested x86_64-linux. Comitted gcc/ChangeLog: PR middle-end/122122 * tree-cfgcleanup.cc (tree_forwarder_block_p): Cleanup. * tree-ssa-dce.cc (propagate_counts): New function. (eliminate_unnecessary_stmts): Use it. --- gcc/tree-cfgcleanup.cc | 2 +- gcc/tree-ssa-dce.cc | 66 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/gcc/tree-cfgcleanup.cc b/gcc/tree-cfgcleanup.cc index 5aaa18df0c55..58e8af5efcf5 100644 --- a/gcc/tree-cfgcleanup.cc +++ b/gcc/tree-cfgcleanup.cc @@ -392,7 +392,7 @@ tree_forwarder_block_p (basic_block bb, bool phi_wanted) location_t locus; /* BB must have a single outgoing edge. */ - if (single_succ_p (bb) != 1 + if (!single_succ_p (bb) /* If PHI_WANTED is false, BB must not have any PHI nodes. Otherwise, BB must have PHI nodes. */ || gimple_seq_empty_p (phi_nodes (bb)) == phi_wanted diff --git a/gcc/tree-ssa-dce.cc b/gcc/tree-ssa-dce.cc index ba9cd6536aeb..438690883226 100644 --- a/gcc/tree-ssa-dce.cc +++ b/gcc/tree-ssa-dce.cc @@ -1457,6 +1457,70 @@ control_parents_preserved_p (basic_block bb) return true; } +/* If basic block is empty, we can remove conditionals that controls + its execution. However in some cases the empty BB can stay live + (such as when it was a header of empty loop). In this case we + need to update its count. Since regions of dead BBs are acyclic + we simply propagate counts forward from live BBs to dead ones. */ + +static void +propagate_counts () +{ + basic_block bb; + auto_vec queue; + hash_map cnt; + + FOR_EACH_BB_FN (bb, cfun) + if (!bitmap_bit_p (bb_contains_live_stmts, bb->index)) + { + int n = 0; + for (edge e : bb->preds) + if (e->src != ENTRY_BLOCK_PTR_FOR_FN (cfun) + && !bitmap_bit_p (bb_contains_live_stmts, e->src->index)) + n++; + if (!n) + queue.safe_push (bb); + cnt.put (bb, n); + } + while (!queue.is_empty ()) + { + basic_block bb = queue.pop (); + profile_count sum = profile_count::zero (); + + for (edge e : bb->preds) + { + sum += e->count (); + gcc_checking_assert (!cnt.get (e->src)); + } + /* If we have partial profile and some counts of incomming edges are + unknown, it is probably better to keep the existing count. + We could also propagate bi-directionally. */ + if (sum.initialized_p () && !(sum == bb->count)) + { + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "Updating count of empty bb %i from ", + bb->index); + bb->count.dump (dump_file); + fprintf (dump_file, " to "); + sum.dump (dump_file); + fprintf (dump_file, "\n"); + } + bb->count = sum; + } + cnt.remove (bb); + for (edge e : bb->succs) + if (int *n = cnt.get (e->dest)) + { + (*n)--; + if (!*n) + queue.safe_push (e->dest); + } + } + /* Do not check that all blocks has been processed, since for + empty infinite loops this is not the case. */ +} + /* Eliminate unnecessary statements. Any instruction not marked as necessary contributes nothing to the program, and can be deleted. */ @@ -1800,6 +1864,8 @@ eliminate_unnecessary_stmts (bool aggressive) } } } + if (bb_contains_live_stmts) + propagate_counts (); } if (bb_postorder) From e3a05e050226aaaa4e2a2e7aee1e5651212a68f6 Mon Sep 17 00:00:00 2001 From: Georg-Johann Lay Date: Mon, 6 Oct 2025 21:31:46 +0200 Subject: [PATCH 113/216] AVR/LibF7: Implement sincos. libgcc/config/avr/libf7/ * libf7-common.mk (F7_ASM_PARTS): Add D_sincos. * libf7-asm.sx: (D_sincos): New module implements sincos / sincosl. gcc/testsuite/ * gcc.target/avr/sincos-1.c: New test. --- gcc/testsuite/gcc.target/avr/sincos-1.c | 35 ++++++++++++++++ libgcc/config/avr/libf7/libf7-asm.sx | 53 +++++++++++++++++++++++++ libgcc/config/avr/libf7/libf7-common.mk | 2 +- 3 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/avr/sincos-1.c diff --git a/gcc/testsuite/gcc.target/avr/sincos-1.c b/gcc/testsuite/gcc.target/avr/sincos-1.c new file mode 100644 index 000000000000..3cf543cee2e6 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/sincos-1.c @@ -0,0 +1,35 @@ +/* { dg-do run { target { ! avr_tiny } } } */ +/* { dg-additional-options { -std=gnu99 -Os -mcall-prologues } } */ + +#if __SIZEOF_LONG_DOUBLE__ == 8 +typedef long double D; + +extern void sincosl (D, D*, D*); +extern D sinl (D); +extern D cosl (D); + +D s1, c1; + +int main (void) +{ + for (D x = -20; x < 20; x += 1.1) + { + sincosl (x, &s1, &c1); + + __asm ("" : "+r" (x) :: "memory"); + + if (s1 != sinl (x)) + __builtin_exit (1); + + if (c1 != cosl (x)) + __builtin_exit (2); + } + + return 0; +} +#else +int main (void) +{ + return 0; +} +#endif diff --git a/libgcc/config/avr/libf7/libf7-asm.sx b/libgcc/config/avr/libf7/libf7-asm.sx index 33e8f78006cf..bafb490c5c7e 100644 --- a/libgcc/config/avr/libf7/libf7-asm.sx +++ b/libgcc/config/avr/libf7/libf7-asm.sx @@ -1989,6 +1989,59 @@ LALIAS fmaxl _ENDF __fmax #endif /* F7MOD_D_fminfmax_ */ + +#ifdef F7MOD_D_sincos_ +;;; void sincos (double R18, double *R16, double *R14); +_DEFUN __sincos +DALIAS sincos +LALIAS sincosl + +#define n_pushed 4 +#define n_frame (2 * F7_SIZEOF) + do_prologue_saves n_pushed, n_frame + ;; Y = FramePointer + 1 + adiw Y, 1 + ;; R16 = frame-arg 1 + wmov r16, Y + ;; The double argument is in R18[]. + XCALL F7_NAME (set_double_impl) + ;; void f7_sincos (f7_t *ss, f7_t *cc, const f7_t *aa) + ;; Note that aa may equal ss or cc. + wmov r20, r16 ; aa + wmov r24, r16 ; ss = FP + 1 + subi r16, lo8(-F7_SIZEOF) + sbci r17, hi8(-F7_SIZEOF) + wmov r22, r16 ; cc = FP + 1 + F7_SIZEOF + XCALL F7_NAME (sincos) + + ;; double R18 = get_double (cc) + wmov r24, r16 + XCALL F7_NAME (get_double) + wmov XL, r14 ; double *pcos + rcall store.r18.X ; *pcos = R18 + + ;; double R18 = get_double (ss) + wmov r24, Y + XCALL F7_NAME (get_double) + ldd XL, Y + n_frame + 3 ; Saved R16 + ldd XH, Y + n_frame + 2 ; Saved R17 + rcall store.r18.X ; *psin = R18 + + do_epilogue_restores n_pushed, n_frame + +store.r18.X: + st X+, r18 + st X+, r19 + st X+, r20 + st X+, r21 + st X+, r22 + st X+, r23 + st X+, r24 + st X+, r25 + ret +_ENDF __sincos +#endif /* F7MOD_D_sincos_ */ + #ifdef F7MOD_call_dd_ ;; Provide double wrappers for functions that operate on f7_t and get f7_t*. diff --git a/libgcc/config/avr/libf7/libf7-common.mk b/libgcc/config/avr/libf7/libf7-common.mk index 2d3adaf45697..153266ba141e 100644 --- a/libgcc/config/avr/libf7/libf7-common.mk +++ b/libgcc/config/avr/libf7/libf7-common.mk @@ -22,7 +22,7 @@ F7_ASM_PARTS += addsub_mant_scaled store load F7_ASM_PARTS += to_integer to_unsigned clz normalize_with_carry normalize F7_ASM_PARTS += store_expo sqrt16 sqrt_approx div -F7_ASM_PARTS += D_class D_fma D_powi +F7_ASM_PARTS += D_class D_fma D_powi D_sincos F7_ASM_PARTS += D_isnan D_isinf D_isfinite D_signbit D_copysign D_neg D_fabs F7_ASM_PARTS += D_cmp D_eq D_ne D_ge D_gt D_le D_lt D_unord D_fminfmax From b667503f0396cf1845c89b9e0f8bdf1068cd4437 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Sat, 4 Oct 2025 10:16:20 -0700 Subject: [PATCH 114/216] cselim: Don't create a phi node if the rhs side are the same [PR122155] This is a small compile time optimization where if commonalizing stores that have the same rhs, a phi node does not need to be created. This uses the same code as what was added for the `= {};` case. The reason why it is a compile time optimization is that Copy prop later on will do the same thing so not creating a new phi and a new ssa name will have a small compile time improvement. Bootstrapped and tested on x86_64-linux-gnu. PR tree-optimization/122155 gcc/ChangeLog: * tree-ssa-phiopt.cc (cond_if_else_store_replacement_1): Don't create a phi if the 2 rhs are the same. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/cselim-3.c: New test. Signed-off-by: Andrew Pinski --- gcc/testsuite/gcc.dg/tree-ssa/cselim-3.c | 16 ++++++++++++++++ gcc/tree-ssa-phiopt.cc | 10 ++++------ 2 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/cselim-3.c diff --git a/gcc/testsuite/gcc.dg/tree-ssa/cselim-3.c b/gcc/testsuite/gcc.dg/tree-ssa/cselim-3.c new file mode 100644 index 000000000000..d0c8e6a9e18c --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/cselim-3.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-phiopt1-details-stats" } */ +/* PR tree-optimization/122155 */ + +void f(int *a, int b, int c) +{ + if (c) + *a = b; + else + *a = b; +} + +/* When commonalizing a store with the same rhs, a PHI does not need to be created. */ +/* { dg-final { scan-tree-dump "if-then-else store replacement: 1" "phiopt1" } } */ +/* { dg-final { scan-tree-dump-not "to use phi:" "phiopt1" } } */ +/* { dg-final { scan-tree-dump-not "PHI <" "phiopt1" } } */ diff --git a/gcc/tree-ssa-phiopt.cc b/gcc/tree-ssa-phiopt.cc index bdd1f7396da2..f1e56c9383fe 100644 --- a/gcc/tree-ssa-phiopt.cc +++ b/gcc/tree-ssa-phiopt.cc @@ -3643,9 +3643,8 @@ cond_if_else_store_replacement_1 (basic_block then_bb, basic_block else_bb, tree lhs_base, lhs, then_rhs, else_rhs, name; location_t then_locus, else_locus; gimple_stmt_iterator gsi; - gphi *newphi; + gphi *newphi = nullptr; gassign *new_stmt; - bool empty_constructor = false; if (then_assign == NULL || !gimple_assign_single_p (then_assign) @@ -3680,7 +3679,6 @@ cond_if_else_store_replacement_1 (basic_block then_bb, basic_block else_bb, /* Currently only handle commoning of `= {}`. */ if (TREE_CODE (then_rhs) != CONSTRUCTOR) return false; - empty_constructor = true; } if (dump_file && (dump_flags & TDF_DETAILS)) @@ -3709,8 +3707,8 @@ cond_if_else_store_replacement_1 (basic_block then_bb, basic_block else_bb, /* 2) Create a PHI node at the join block, with one argument holding the old RHS, and the other holding the temporary where we stored the old memory contents. */ - if (empty_constructor) - name = unshare_expr (then_rhs); + if (operand_equal_p (then_rhs, else_rhs)) + name = then_rhs; else { name = make_temp_ssa_name (TREE_TYPE (lhs), NULL, "cstore"); @@ -3730,7 +3728,7 @@ cond_if_else_store_replacement_1 (basic_block then_bb, basic_block else_bb, update_stmt (vphi); if (dump_file && (dump_flags & TDF_DETAILS)) { - if (!empty_constructor) + if (newphi) { fprintf(dump_file, "to use phi:\n"); print_gimple_stmt (dump_file, newphi, 0, From f7b0636b5f7258dc1e1cae641f2cdd3dab5032a8 Mon Sep 17 00:00:00 2001 From: GCC Administrator Date: Tue, 7 Oct 2025 00:21:28 +0000 Subject: [PATCH 115/216] Daily bump. --- gcc/ChangeLog | 71 +++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/ada/ChangeLog | 33 ++++++++++++++ gcc/testsuite/ChangeLog | 43 +++++++++++++++++++ libgcc/config/avr/libf7/ChangeLog | 21 +++++++++ 5 files changed, 169 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7a03e9847e7d..57513ed1536f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,74 @@ +2025-10-06 Andrew Pinski + + PR tree-optimization/122155 + * tree-ssa-phiopt.cc (cond_if_else_store_replacement_1): Don't + create a phi if the 2 rhs are the same. + +2025-10-06 Jan Hubicka + + PR middle-end/122122 + * tree-cfgcleanup.cc (tree_forwarder_block_p): Cleanup. + * tree-ssa-dce.cc (propagate_counts): New function. + (eliminate_unnecessary_stmts): Use it. + +2025-10-06 Jan Hubicka + + * params.opt (-param=auto-profile-bbs=): Add missing full stop after + description. + +2025-10-06 Andrew MacLeod + + PR tree-optimization/121206 + * value-range.cc (irange::intersect_bitmask): Always call + set_range_from_bitmask if the bitmask changes. + +2025-10-06 Sam James + + PR rtl-optimization/111619 + * doc/install.texi (Building a native compiler): Discuss STAGE1_CFLAGS. + +2025-10-06 Jennifer Schmitz + + PR target/121599 + * config/aarch64/aarch64-sve-builtins.cc + (function_expander::use_cond_insn): Use add_fixed_operand if + fallback_arg == CONST0_RTX (mode). + +2025-10-06 Richard Biener + + PR tree-optimization/122131 + * tree-vect-data-refs.cc (vect_supportable_dr_alignment): Do + not use re-align loads for gathers. + +2025-10-06 Richard Biener + + PR tree-optimization/122158 + * tree-vect-loop.cc (vect_create_epilog_for_reduction): Handle + bit-precision result. + +2025-10-06 Jakub Jelinek + + PR middle-end/122133 + * stmt.cc (resolve_asm_operand_names): Handle % and 2 letters followed + by open square. + +2025-10-06 Andrew Pinski + + PR tree-optimization/122142 + * generic-match-head.cc: Include gimple-iterator.h + and gimple-fold.h. + * gimple-fold.cc (gimple_fold_builtin_constant_p): Use + fold_before_rtl_expansion_p. + (gimple_fold_builtin_assume_aligned): Likewise. + (gimple_fold_builtin_stdarg): Likewise. + (gimple_fold_call): Likewise. + * gimple-fold.h: Include "tree-pass.h". + (fold_before_rtl_expansion_p): New function. + * match.pd: Use fold_before_rtl_expansion_p + instead of `cfun->curr_properties & PROP_last_full_fold`. + * tree-ssa-forwprop.cc (simplify_builtin_memcmp): Likewise. + (optimize_stack_restore): Likewise. + 2025-10-05 H.J. Lu PR target/122150 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index aa218a9290f7..6a36bef6ea5e 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20251006 +20251007 diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index bd489facd6c9..60703af11741 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,36 @@ +2025-10-06 Marc Poulhiès + Éric Botcazou + + * gcc-interface/decl.cc (get_extended_unconstrained_array): Handle + array subtype. + +2025-10-06 Eric Botcazou + + * gcc-interface/utils.cc (convert): Also extract the _Parent field + to implement upcasting in the case where only the sizes match. + +2025-10-06 Marc Poulhiès + + * gcc-interface/trans.cc (Attribute_to_gnu): Handle + extended access. + +2025-10-06 Ronan Desplanques + + * fmap.adb (File_Mapping, Path_Mapping): Fix instantiations. + (Add_To_File_Map): Use Table.Table.Append. + +2025-10-06 Ronan Desplanques + + * fmap.ads (Add_Forbidden_File_Name): Remove obsolete code. + * fmap.adb (Forbidden_Names, Add_Forbidden_File_Name, + Mapped_Path_Name, Reset_Tables): Remove obsolete code. + +2025-10-06 Tonu Naks + + * doc/gnat_ugn/building_executable_programs_with_gnat.rst: refine + description of -gnatwr + * gnat_ugn.texi: Regenerate. + 2025-10-05 Franck Behaghel PR ada/110314 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5a2c3fd48c13..6047199c9482 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,46 @@ +2025-10-06 Andrew Pinski + + PR tree-optimization/122155 + * gcc.dg/tree-ssa/cselim-3.c: New test. + +2025-10-06 Georg-Johann Lay + + * gcc.target/avr/sincos-1.c: New test. + +2025-10-06 Andrew MacLeod + + PR tree-optimization/121206 + * gcc.dg/pr121987.c: New. + +2025-10-06 Georg-Johann Lay + + PR target/122177 + * gcc.target/avr/fminfmax-1.c: New test. + +2025-10-06 Georg-Johann Lay + + * gcc.target/avr/cmpdi-1.c: New test. + +2025-10-06 Jennifer Schmitz + + PR target/121599 + * gcc.target/aarch64/sve2/pr121599.c: New test. + +2025-10-06 Richard Biener + + PR tree-optimization/122131 + * gcc.target/powerpc/altivec-39.c: New testcase. + +2025-10-06 Richard Biener + + PR tree-optimization/122158 + * gcc.dg/vect/pr122158.c: New testcase. + +2025-10-06 Jakub Jelinek + + PR middle-end/122133 + * c-c++-common/toplevel-asm-9.c: New test. + 2025-10-05 H.J. Lu PR target/122150 diff --git a/libgcc/config/avr/libf7/ChangeLog b/libgcc/config/avr/libf7/ChangeLog index b19b5b489bed..561a7536957b 100644 --- a/libgcc/config/avr/libf7/ChangeLog +++ b/libgcc/config/avr/libf7/ChangeLog @@ -1,3 +1,24 @@ +2025-10-06 Georg-Johann Lay + + * libf7-common.mk (F7_ASM_PARTS): Add D_sincos. + * libf7-asm.sx: (D_sincos): New module implements sincos / sincosl. + +2025-10-06 Georg-Johann Lay + + PR target/122177 + * libf7-common.mk (m_ddd): Remove: fmin, fmax. + (F7_ASM_PARTS): Add: D_fminfmax. + * libf7-asm.sx (D_fmanfmax): New module. + * f7-wraps.h: Rebuild. + +2025-10-06 Georg-Johann Lay + + * libf7-common.mk (g_xdd_cmp): Remove le, lt, ge, gt, ne, eq, unord. + (F7_ASM_PARTS): Add D_cmp, D_eq, D_ne, D_ge, D_gt, D_le, D_lt, D_unord. + * libf7-asm.sx (D_cmp, D_eq, D_ne, D_ge, D_gt, D_le, D_lt, D_unord): + New modules. + * f7-wraps.h: Rebuild. + 2025-05-27 Georg-Johann Lay PR target/120442 From 9242a89d088f44465554b25f6bd583bcc5b5e193 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 7 Oct 2025 08:28:04 +0800 Subject: [PATCH 116/216] x86: Swap %edx/%rdx with %eax/%rax for PR middle-end/122122 Swap %edx/%rdx with %eax/%rax after commit r16-4255-g075310d3a3ef1a8b483b62d9535887b37f291ee4 Author: Jan Hubicka Date: Mon Oct 6 21:35:22 2025 +0200 Update profile in tree-ssa-dce commit 8498ef3d0758012bf3e355a61a0f89aff7513851 Author: Jan Hubicka Date: Wed Oct 1 16:56:15 2025 +0200 Improve profile update in merge_blocks PR middle-end/122122 * gcc.target/i386/memcpy-pr120683-2.c: Swap %edx/%rdx with %eax/%rax after * gcc.target/i386/memcpy-pr120683-3.c: Likewise. * gcc.target/i386/memcpy-pr120683-4.c: Likewise. * gcc.target/i386/memcpy-pr120683-5.c: Likewise. * gcc.target/i386/memcpy-pr120683-6.c: Likewise. * gcc.target/i386/memcpy-pr120683-7.c: Likewise. * gcc.target/i386/pr111657-1.c: Likewise. Signed-off-by: H.J. Lu --- .../gcc.target/i386/memcpy-pr120683-2.c | 28 ++++++++-------- .../gcc.target/i386/memcpy-pr120683-3.c | 32 +++++++++---------- .../gcc.target/i386/memcpy-pr120683-4.c | 28 ++++++++-------- .../gcc.target/i386/memcpy-pr120683-5.c | 32 +++++++++---------- .../gcc.target/i386/memcpy-pr120683-6.c | 28 ++++++++-------- .../gcc.target/i386/memcpy-pr120683-7.c | 32 +++++++++---------- gcc/testsuite/gcc.target/i386/pr111657-1.c | 22 ++++++------- 7 files changed, 101 insertions(+), 101 deletions(-) diff --git a/gcc/testsuite/gcc.target/i386/memcpy-pr120683-2.c b/gcc/testsuite/gcc.target/i386/memcpy-pr120683-2.c index 0d0e34860e91..cd78ae860b6b 100644 --- a/gcc/testsuite/gcc.target/i386/memcpy-pr120683-2.c +++ b/gcc/testsuite/gcc.target/i386/memcpy-pr120683-2.c @@ -7,22 +7,22 @@ **foo: **.LFB[0-9]+: ** .cfi_startproc -** xorl %edx, %edx +** xorl %eax, %eax **.L[0-9]+: -** movl %edx, %eax -** addl \$64, %edx -** movdqa src\(%rax\), %xmm3 -** movdqa src\+16\(%rax\), %xmm2 -** movdqa src\+32\(%rax\), %xmm1 -** movdqa src\+48\(%rax\), %xmm0 -** movaps %xmm3, dest\(%rax\) -** movaps %xmm2, dest\+16\(%rax\) -** movaps %xmm1, dest\+32\(%rax\) -** movaps %xmm0, dest\+48\(%rax\) -** cmpl \$256, %edx +** movl %eax, %edx +** addl \$64, %eax +** movdqa src\(%rdx\), %xmm3 +** movdqa src\+16\(%rdx\), %xmm2 +** movdqa src\+32\(%rdx\), %xmm1 +** movdqa src\+48\(%rdx\), %xmm0 +** movaps %xmm3, dest\(%rdx\) +** movaps %xmm2, dest\+16\(%rdx\) +** movaps %xmm1, dest\+32\(%rdx\) +** movaps %xmm0, dest\+48\(%rdx\) +** cmpl \$256, %eax ** jb .L[0-9]+ -** movdqa src\(%rdx\), %xmm0 -** movaps %xmm0, dest\(%rdx\) +** movdqa src\(%rax\), %xmm0 +** movaps %xmm0, dest\(%rax\) ** ret **... */ diff --git a/gcc/testsuite/gcc.target/i386/memcpy-pr120683-3.c b/gcc/testsuite/gcc.target/i386/memcpy-pr120683-3.c index e5aca32a5880..ea3bcca61039 100644 --- a/gcc/testsuite/gcc.target/i386/memcpy-pr120683-3.c +++ b/gcc/testsuite/gcc.target/i386/memcpy-pr120683-3.c @@ -7,24 +7,24 @@ **foo: **.LFB[0-9]+: ** .cfi_startproc -** xorl %edx, %edx +** xorl %eax, %eax **.L[0-9]+: -** movl %edx, %eax -** addl \$64, %edx -** movdqa src\(%rax\), %xmm3 -** movdqa src\+16\(%rax\), %xmm2 -** movdqa src\+32\(%rax\), %xmm1 -** movdqa src\+48\(%rax\), %xmm0 -** movaps %xmm3, dest\(%rax\) -** movaps %xmm2, dest\+16\(%rax\) -** movaps %xmm1, dest\+32\(%rax\) -** movaps %xmm0, dest\+48\(%rax\) -** cmpl \$256, %edx +** movl %eax, %edx +** addl \$64, %eax +** movdqa src\(%rdx\), %xmm3 +** movdqa src\+16\(%rdx\), %xmm2 +** movdqa src\+32\(%rdx\), %xmm1 +** movdqa src\+48\(%rdx\), %xmm0 +** movaps %xmm3, dest\(%rdx\) +** movaps %xmm2, dest\+16\(%rdx\) +** movaps %xmm1, dest\+32\(%rdx\) +** movaps %xmm0, dest\+48\(%rdx\) +** cmpl \$256, %eax ** jb .L[0-9]+ -** movdqa src\(%rdx\), %xmm0 -** movaps %xmm0, dest\(%rdx\) -** movdqu src\+15\(%rdx\), %xmm0 -** movups %xmm0, dest\+15\(%rdx\) +** movdqa src\(%rax\), %xmm0 +** movaps %xmm0, dest\(%rax\) +** movdqu src\+15\(%rax\), %xmm0 +** movups %xmm0, dest\+15\(%rax\) ** ret **... */ diff --git a/gcc/testsuite/gcc.target/i386/memcpy-pr120683-4.c b/gcc/testsuite/gcc.target/i386/memcpy-pr120683-4.c index 27f7bedc7037..c2d595f877dc 100644 --- a/gcc/testsuite/gcc.target/i386/memcpy-pr120683-4.c +++ b/gcc/testsuite/gcc.target/i386/memcpy-pr120683-4.c @@ -7,22 +7,22 @@ **foo: **.LFB[0-9]+: ** .cfi_startproc -** xorl %edx, %edx +** xorl %eax, %eax **.L[0-9]+: -** movl %edx, %eax -** subl \$-128, %edx -** vmovdqa src\(%rax\), %ymm3 -** vmovdqa src\+32\(%rax\), %ymm2 -** vmovdqa src\+64\(%rax\), %ymm1 -** vmovdqa src\+96\(%rax\), %ymm0 -** vmovdqa %ymm3, dest\(%rax\) -** vmovdqa %ymm2, dest\+32\(%rax\) -** vmovdqa %ymm1, dest\+64\(%rax\) -** vmovdqa %ymm0, dest\+96\(%rax\) -** cmpl \$512, %edx +** movl %eax, %edx +** subl \$-128, %eax +** vmovdqa src\(%rdx\), %ymm3 +** vmovdqa src\+32\(%rdx\), %ymm2 +** vmovdqa src\+64\(%rdx\), %ymm1 +** vmovdqa src\+96\(%rdx\), %ymm0 +** vmovdqa %ymm3, dest\(%rdx\) +** vmovdqa %ymm2, dest\+32\(%rdx\) +** vmovdqa %ymm1, dest\+64\(%rdx\) +** vmovdqa %ymm0, dest\+96\(%rdx\) +** cmpl \$512, %eax ** jb .L[0-9]+ -** vmovdqa src\(%rdx\), %ymm0 -** vmovdqa %ymm0, dest\(%rdx\) +** vmovdqa src\(%rax\), %ymm0 +** vmovdqa %ymm0, dest\(%rax\) ** vzeroupper ** ret **... diff --git a/gcc/testsuite/gcc.target/i386/memcpy-pr120683-5.c b/gcc/testsuite/gcc.target/i386/memcpy-pr120683-5.c index 34a74080f21a..294d25c53e6d 100644 --- a/gcc/testsuite/gcc.target/i386/memcpy-pr120683-5.c +++ b/gcc/testsuite/gcc.target/i386/memcpy-pr120683-5.c @@ -7,24 +7,24 @@ **foo: **.LFB[0-9]+: ** .cfi_startproc -** xorl %edx, %edx +** xorl %eax, %eax **.L[0-9]+: -** movl %edx, %eax -** subl \$-128, %edx -** vmovdqa src\(%rax\), %ymm3 -** vmovdqa src\+32\(%rax\), %ymm2 -** vmovdqa src\+64\(%rax\), %ymm1 -** vmovdqa src\+96\(%rax\), %ymm0 -** vmovdqa %ymm3, dest\(%rax\) -** vmovdqa %ymm2, dest\+32\(%rax\) -** vmovdqa %ymm1, dest\+64\(%rax\) -** vmovdqa %ymm0, dest\+96\(%rax\) -** cmpl \$512, %edx +** movl %eax, %edx +** subl \$-128, %eax +** vmovdqa src\(%rdx\), %ymm3 +** vmovdqa src\+32\(%rdx\), %ymm2 +** vmovdqa src\+64\(%rdx\), %ymm1 +** vmovdqa src\+96\(%rdx\), %ymm0 +** vmovdqa %ymm3, dest\(%rdx\) +** vmovdqa %ymm2, dest\+32\(%rdx\) +** vmovdqa %ymm1, dest\+64\(%rdx\) +** vmovdqa %ymm0, dest\+96\(%rdx\) +** cmpl \$512, %eax ** jb .L[0-9]+ -** vmovdqa src\(%rdx\), %ymm0 -** vmovdqa %ymm0, dest\(%rdx\) -** vmovdqu src\+31\(%rdx\), %ymm0 -** vmovdqu %ymm0, dest\+31\(%rdx\) +** vmovdqa src\(%rax\), %ymm0 +** vmovdqa %ymm0, dest\(%rax\) +** vmovdqu src\+31\(%rax\), %ymm0 +** vmovdqu %ymm0, dest\+31\(%rax\) ** vzeroupper ** ret **... diff --git a/gcc/testsuite/gcc.target/i386/memcpy-pr120683-6.c b/gcc/testsuite/gcc.target/i386/memcpy-pr120683-6.c index aa5d90d62e4b..2013916f7b2b 100644 --- a/gcc/testsuite/gcc.target/i386/memcpy-pr120683-6.c +++ b/gcc/testsuite/gcc.target/i386/memcpy-pr120683-6.c @@ -7,22 +7,22 @@ **foo: **.LFB[0-9]+: ** .cfi_startproc -** xorl %edx, %edx +** xorl %eax, %eax **.L[0-9]+: -** movl %edx, %eax -** addl \$256, %edx -** vmovdqa64 src\(%rax\), %zmm3 -** vmovdqa64 src\+64\(%rax\), %zmm2 -** vmovdqa64 src\+128\(%rax\), %zmm1 -** vmovdqa64 src\+192\(%rax\), %zmm0 -** vmovdqa64 %zmm3, dest\(%rax\) -** vmovdqa64 %zmm2, dest\+64\(%rax\) -** vmovdqa64 %zmm1, dest\+128\(%rax\) -** vmovdqa64 %zmm0, dest\+192\(%rax\) -** cmpl \$1024, %edx +** movl %eax, %edx +** addl \$256, %eax +** vmovdqa64 src\(%rdx\), %zmm3 +** vmovdqa64 src\+64\(%rdx\), %zmm2 +** vmovdqa64 src\+128\(%rdx\), %zmm1 +** vmovdqa64 src\+192\(%rdx\), %zmm0 +** vmovdqa64 %zmm3, dest\(%rdx\) +** vmovdqa64 %zmm2, dest\+64\(%rdx\) +** vmovdqa64 %zmm1, dest\+128\(%rdx\) +** vmovdqa64 %zmm0, dest\+192\(%rdx\) +** cmpl \$1024, %eax ** jb .L[0-9]+ -** vmovdqa64 src\(%rdx\), %zmm0 -** vmovdqa64 %zmm0, dest\(%rdx\) +** vmovdqa64 src\(%rax\), %zmm0 +** vmovdqa64 %zmm0, dest\(%rax\) ** vzeroupper ** ret **... diff --git a/gcc/testsuite/gcc.target/i386/memcpy-pr120683-7.c b/gcc/testsuite/gcc.target/i386/memcpy-pr120683-7.c index 63d8a1521a16..30e2c3c6bef0 100644 --- a/gcc/testsuite/gcc.target/i386/memcpy-pr120683-7.c +++ b/gcc/testsuite/gcc.target/i386/memcpy-pr120683-7.c @@ -7,24 +7,24 @@ **foo: **.LFB[0-9]+: ** .cfi_startproc -** xorl %edx, %edx +** xorl %eax, %eax **.L[0-9]+: -** movl %edx, %eax -** addl \$256, %edx -** vmovdqa64 src\(%rax\), %zmm3 -** vmovdqa64 src\+64\(%rax\), %zmm2 -** vmovdqa64 src\+128\(%rax\), %zmm1 -** vmovdqa64 src\+192\(%rax\), %zmm0 -** vmovdqa64 %zmm3, dest\(%rax\) -** vmovdqa64 %zmm2, dest\+64\(%rax\) -** vmovdqa64 %zmm1, dest\+128\(%rax\) -** vmovdqa64 %zmm0, dest\+192\(%rax\) -** cmpl \$1024, %edx +** movl %eax, %edx +** addl \$256, %eax +** vmovdqa64 src\(%rdx\), %zmm3 +** vmovdqa64 src\+64\(%rdx\), %zmm2 +** vmovdqa64 src\+128\(%rdx\), %zmm1 +** vmovdqa64 src\+192\(%rdx\), %zmm0 +** vmovdqa64 %zmm3, dest\(%rdx\) +** vmovdqa64 %zmm2, dest\+64\(%rdx\) +** vmovdqa64 %zmm1, dest\+128\(%rdx\) +** vmovdqa64 %zmm0, dest\+192\(%rdx\) +** cmpl \$1024, %eax ** jb .L[0-9]+ -** vmovdqa src\(%rdx\), %ymm0 -** vmovdqa %ymm0, dest\(%rdx\) -** vmovdqu src\+31\(%rdx\), %ymm0 -** vmovdqu %ymm0, dest\+31\(%rdx\) +** vmovdqa src\(%rax\), %ymm0 +** vmovdqa %ymm0, dest\(%rax\) +** vmovdqu src\+31\(%rax\), %ymm0 +** vmovdqu %ymm0, dest\+31\(%rax\) ** vzeroupper ** ret **... diff --git a/gcc/testsuite/gcc.target/i386/pr111657-1.c b/gcc/testsuite/gcc.target/i386/pr111657-1.c index fa9f4cfe5c53..bb37e95a39b2 100644 --- a/gcc/testsuite/gcc.target/i386/pr111657-1.c +++ b/gcc/testsuite/gcc.target/i386/pr111657-1.c @@ -7,17 +7,17 @@ **bar: **... **.L[0-9]+: -** movl %edx, %eax -** addl \$32, %edx -** movq %gs:m\(%rax\), %r9 -** movq %gs:m\+8\(%rax\), %r8 -** movq %gs:m\+16\(%rax\), %rsi -** movq %gs:m\+24\(%rax\), %rcx -** movq %r9, \(%rdi,%rax\) -** movq %r8, 8\(%rdi,%rax\) -** movq %rsi, 16\(%rdi,%rax\) -** movq %rcx, 24\(%rdi,%rax\) -** cmpl \$224, %edx +** movl %eax, %edx +** addl \$32, %eax +** movq %gs:m\(%rdx\), %r9 +** movq %gs:m\+8\(%rdx\), %r8 +** movq %gs:m\+16\(%rdx\), %rsi +** movq %gs:m\+24\(%rdx\), %rcx +** movq %r9, \(%rdi,%rdx\) +** movq %r8, 8\(%rdi,%rdx\) +** movq %rsi, 16\(%rdi,%rdx\) +** movq %rcx, 24\(%rdi,%rdx\) +** cmpl \$224, %eax ** jb .L[0-9]+ **... */ From decd4277e97114922ce60786a4587a31545dba94 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Fri, 3 Oct 2025 20:18:07 -0700 Subject: [PATCH 117/216] phiopt/cselim: Improve cselim-limited to commonalize all stores [PR122083] cselim (and the phiopt's cselim-limited) can commonalize a single store which makes this too limited in some/many cases. Instead let's commonalize all trailing stores as much as possible (only in the same order). The change is smallish, basically the restriction on being the only store is removed from single_trailing_store_in_bb (renamed too). And also looping to remove all of the trailing stores instead of just doing one for the pass. Note sink will do the same optimization so doing it earlier seems like a good idea because it improve change inlining size estimates. For an example with this change, early inlining can happen for min_cmp in g++.dg/opt/pr122083-1.C now; that avoids a -Wnonnull warning as the memcmp with the null argument is optimized early. It can also catch some min in phiopt1 in some cases. Bootstrapped and tested on x86_64-linux-gnu. Changes since v1: * v2: For !flag_expensive_optimizations, handle the only store rather than just the last store. PR tree-optimization/122083 gcc/ChangeLog: * tree-ssa-phiopt.cc (single_trailing_store_in_bb): Rename to ... (trailing_store_in_bb): This and take new argument to check for only store. (cond_if_else_store_replacement_limited): Update to use trailing_store_in_bb. (cond_if_else_store_replacement): Loop until cond_if_else_store_replacement_limited returns false. (pass_phiopt::execute): Instead of calling cond_if_else_store_replacement_limited once, also loop on it. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/ssa-pre-19.c: Disable phiopt and cselim. * g++.dg/opt/pr122083-1.C: New test. * gcc.dg/tree-ssa/cselim-1.c: New test. * gcc.dg/tree-ssa/cselim-2.c: New test. Signed-off-by: Andrew Pinski --- gcc/testsuite/g++.dg/opt/pr122083-1.C | 50 +++++++++++++++++++ gcc/testsuite/gcc.dg/tree-ssa/cselim-1.c | 38 ++++++++++++++ gcc/testsuite/gcc.dg/tree-ssa/cselim-2.c | 38 ++++++++++++++ gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-19.c | 3 +- gcc/tree-ssa-phiopt.cc | 58 +++++++++++----------- 5 files changed, 156 insertions(+), 31 deletions(-) create mode 100644 gcc/testsuite/g++.dg/opt/pr122083-1.C create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/cselim-1.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/cselim-2.c diff --git a/gcc/testsuite/g++.dg/opt/pr122083-1.C b/gcc/testsuite/g++.dg/opt/pr122083-1.C new file mode 100644 index 000000000000..870089c8c12f --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr122083-1.C @@ -0,0 +1,50 @@ +// { dg-do compile { target c++20 } } +// { dg-options "-O2 -Wall" } + +// Make sure we don't get a -Wnonnull warning here. + +#include + + template + constexpr auto + min_cmp(Tp x, Tp y) + { + struct Res { + Tp M_min; + decltype(x <=> y) M_cmp; + }; + auto c = x <=> y; + if (c > 0) + return Res{y, c}; + return Res{x, c}; + } + + + template + auto + lexicographical_compare_three_way(InputIter1 first1, + InputIter1 last1, + InputIter2 first2, + InputIter2 last2) + -> decltype(*first1 <=> *first2) + { + const auto [len, lencmp] = + min_cmp(last1 - first1, last2 - first2); + if (len) + { + const auto blen = len * sizeof(*first1); + const auto c + = __builtin_memcmp(&*first1, &*first2, blen) <=> 0; + if (c != 0) + return c; + } + return lencmp; + } + +auto +test03() +{ + unsigned char a[2] = { 1, 2 }; + unsigned char* p = nullptr; + return lexicographical_compare_three_way(p, p, a, a+2); +} diff --git a/gcc/testsuite/gcc.dg/tree-ssa/cselim-1.c b/gcc/testsuite/gcc.dg/tree-ssa/cselim-1.c new file mode 100644 index 000000000000..0a9ff554c450 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/cselim-1.c @@ -0,0 +1,38 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-phiopt1-stats" } */ + +struct Loc { + int x[3]; +}; + +void bar (struct Loc *); + +int foo (int i, int j, int k, int b) +{ + struct Loc IND; + int res; + + if (b) + { + IND.x[0] = i; + IND.x[1] = j; + IND.x[2] = k-1; + } + else + { + IND.x[0] = i; + IND.x[1] = j; + IND.x[2] = k; + } + + /* This should be optimized to i + j + {k, k + 1}. */ + res = IND.x[0] + IND.x[1] + IND.x[2]; + + /* This is just to prevent SRA. */ + bar (&IND); + + return res; +} + +/* All three stores should be commonalized. */ +/* { dg-final { scan-tree-dump "if-then-else store replacement: 3" "phiopt1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/cselim-2.c b/gcc/testsuite/gcc.dg/tree-ssa/cselim-2.c new file mode 100644 index 000000000000..2964fcfe1ff2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/cselim-2.c @@ -0,0 +1,38 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-cselim-stats -fno-ssa-phiopt" } */ + +struct Loc { + int x[3]; +}; + +void bar (struct Loc *); + +int foo (int i, int j, int k, int b) +{ + struct Loc IND; + int res; + + if (b) + { + IND.x[0] = i; + IND.x[1] = j; + IND.x[2] = k-1; + } + else + { + IND.x[0] = i; + IND.x[1] = j; + IND.x[2] = k; + } + + /* This should be optimized to i + j + {k, k + 1}. */ + res = IND.x[0] + IND.x[1] + IND.x[2]; + + /* This is just to prevent SRA. */ + bar (&IND); + + return res; +} + +/* All three stores should be commonalized. */ +/* { dg-final { scan-tree-dump "if-then-else store replacement: 3" "cselim" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-19.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-19.c index bb6300d5c8d7..daa58328ec6d 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-19.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-19.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-pre-stats" } */ +/* Both phiopt and cselim can commonalize the stores so disable them too. */ +/* { dg-options "-O2 -fdump-tree-pre-stats -fno-ssa-phiopt -fno-tree-cselim" } */ struct Loc { int x[3]; diff --git a/gcc/tree-ssa-phiopt.cc b/gcc/tree-ssa-phiopt.cc index f1e56c9383fe..3d6673cfb901 100644 --- a/gcc/tree-ssa-phiopt.cc +++ b/gcc/tree-ssa-phiopt.cc @@ -3757,12 +3757,13 @@ cond_if_else_store_replacement_1 (basic_block then_bb, basic_block else_bb, return true; } -/* Return the single store in BB with VDEF or NULL if there are - other stores in the BB or loads following the store. VPHI is - where the only use of the vdef should be. */ +/* Return the last store in BB with VDEF or NULL if there are + loads following the store. VPHI is where the only use of the + vdef should be. If ONLYONESTORE is true, then the store is + the only store in the BB. */ static gimple * -single_trailing_store_in_bb (basic_block bb, tree vdef, gphi *vphi) +trailing_store_in_bb (basic_block bb, tree vdef, gphi *vphi, bool onlyonestore) { if (SSA_NAME_IS_DEFAULT_DEF (vdef)) return NULL; @@ -3771,12 +3772,14 @@ single_trailing_store_in_bb (basic_block bb, tree vdef, gphi *vphi) || gimple_code (store) == GIMPLE_PHI) return NULL; - /* Verify there is no other store in this BB. */ - if (!SSA_NAME_IS_DEFAULT_DEF (gimple_vuse (store)) + /* Verify there is no other store in this BB if requested. */ + if (onlyonestore + && !SSA_NAME_IS_DEFAULT_DEF (gimple_vuse (store)) && gimple_bb (SSA_NAME_DEF_STMT (gimple_vuse (store))) == bb && gimple_code (SSA_NAME_DEF_STMT (gimple_vuse (store))) != GIMPLE_PHI) return NULL; + /* Verify there is no load or store after the store, the vdef of the store should only be used by the vphi joining the 2 bbs. */ use_operand_p use_p; @@ -3796,20 +3799,22 @@ single_trailing_store_in_bb (basic_block bb, tree vdef, gphi *vphi) if (cond) goto THEN_BB; else goto ELSE_BB (edge E1) THEN_BB: ... - ONLY_STORE = Y; + STORE = Y; ... goto JOIN_BB; ELSE_BB: ... - ONLY_STORE = Z; + STORE = Z; ... fallthrough (edge E0) JOIN_BB: some more - Handles only the case with single store in THEN_BB and ELSE_BB. That is + Handles only the case with store in THEN_BB and ELSE_BB. That is cheap enough due to in phiopt and not worry about heurstics. Moving the store - out might provide an opportunity for a phiopt to happen. */ + out might provide an opportunity for a phiopt to happen. + At -O1 (!flag_expensive_optimizations), this only handles the only store in + the BBs. */ static bool cond_if_else_store_replacement_limited (basic_block then_bb, basic_block else_bb, @@ -3820,12 +3825,14 @@ cond_if_else_store_replacement_limited (basic_block then_bb, basic_block else_bb return false; tree then_vdef = PHI_ARG_DEF_FROM_EDGE (vphi, single_succ_edge (then_bb)); - gimple *then_assign = single_trailing_store_in_bb (then_bb, then_vdef, vphi); + gimple *then_assign = trailing_store_in_bb (then_bb, then_vdef, vphi, + !flag_expensive_optimizations); if (!then_assign) return false; tree else_vdef = PHI_ARG_DEF_FROM_EDGE (vphi, single_succ_edge (else_bb)); - gimple *else_assign = single_trailing_store_in_bb (else_bb, else_vdef, vphi); + gimple *else_assign = trailing_store_in_bb (else_bb, else_vdef, vphi, + !flag_expensive_optimizations); if (!else_assign) return false; @@ -3865,25 +3872,15 @@ cond_if_else_store_replacement (basic_block then_bb, basic_block else_bb, bool found, ok = false, res; tree then_lhs, else_lhs; basic_block blocks[3]; - - /* Handle the case with single store in THEN_BB and ELSE_BB. That is - cheap enough to always handle as it allows us to elide dependence - checking. */ gphi *vphi = get_virtual_phi (join_bb); if (!vphi) return false; - tree then_vdef = PHI_ARG_DEF_FROM_EDGE (vphi, single_succ_edge (then_bb)); - gimple *then_assign = single_trailing_store_in_bb (then_bb, then_vdef, vphi); - if (then_assign) - { - tree else_vdef = PHI_ARG_DEF_FROM_EDGE (vphi, single_succ_edge (else_bb)); - gimple *else_assign = single_trailing_store_in_bb (else_bb, else_vdef, - vphi); - if (else_assign) - return cond_if_else_store_replacement_1 (then_bb, else_bb, join_bb, - then_assign, else_assign, - vphi); - } + + /* Handle the case with trailing stores in THEN_BB and ELSE_BB. That is + cheap enough to always handle as it allows us to elide dependence + checking. */ + while (cond_if_else_store_replacement_limited (then_bb, else_bb, join_bb)) + ; /* If either vectorization or if-conversion is disabled then do not sink any stores. */ @@ -4557,10 +4554,11 @@ pass_phiopt::execute (function *) && !predictable_edge_p (EDGE_SUCC (bb, 1))) hoist_adjacent_loads (bb, bb1, bb2, bb3); - /* Try to see if there are only one store in each side of the if + /* Try to see if there are only store in each side of the if and try to remove that. */ if (EDGE_COUNT (bb3->preds) == 2) - cond_if_else_store_replacement_limited (bb1, bb2, bb3); + while (cond_if_else_store_replacement_limited (bb1, bb2, bb3)) + ; } gimple_stmt_iterator gsi; From d3e963d1ccc3500654bec4e2ac94360e864ed343 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Sun, 5 Oct 2025 09:08:15 -0700 Subject: [PATCH 118/216] match: Extend `-(a ptrdiff b)` pattern by allowing a nop conversion between the neg and ptrdiff [PR121921] When I tried to fix this before I didn't realize there was already a pattern for `-(a ptrdiff b) -> (b ptrdiff a)`, I had added a complex pattern to match `ptr0 - (ptr0 - ptr1)`. But with there being a pattern for `-(a ptrdiff b)`, we just need to extend the pattern to support a nop conversion inbetween the negative and the ptrdiff. Also the check for TYPE_OVERFLOW_UNDEFINED was wrong, in the case of `-(a - b) -> (b - a)`, the check is !TYPE_OVERFLOW_SANITIZED so this pattern should use the same check. Bootstrapped and tested on x86_64-linux-gnu. Changes since v1: * v2: Use the old type of the pointer_diff rather than ssizetype. PR tree-optimization/121921 gcc/ChangeLog: * match.pd (`-(a ptrdiff b)`): Extend for a nop_convert between the neg and ptrdiff. gcc/testsuite/ChangeLog: * gcc.dg/pr121921-1.c: New test. Signed-off-by: Andrew Pinski --- gcc/match.pd | 7 ++++--- gcc/testsuite/gcc.dg/pr121921-1.c | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr121921-1.c diff --git a/gcc/match.pd b/gcc/match.pd index 10a2c5e72d69..4d0a803eaef0 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -2133,9 +2133,10 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) && !HONOR_SIGNED_ZEROS (type))) (minus @1 @0))) (simplify - (negate (pointer_diff @0 @1)) - (if (TYPE_OVERFLOW_UNDEFINED (type)) - (pointer_diff @1 @0))) + (negate (nop_convert? (pointer_diff@2 @0 @1))) + (if (ANY_INTEGRAL_TYPE_P (type) && !TYPE_OVERFLOW_SANITIZED (type)) + (with { tree ptrdifftype = TREE_TYPE (@2); } + (convert (pointer_diff:ptrdifftype @1 @0))))) /* A - B -> A + (-B) if B is easily negatable. */ (simplify diff --git a/gcc/testsuite/gcc.dg/pr121921-1.c b/gcc/testsuite/gcc.dg/pr121921-1.c new file mode 100644 index 000000000000..828472abbd51 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr121921-1.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fdump-tree-cddce1" } */ + +/* PR tree-optimization/121921 */ + +int * +fx (int *b, int *e) +{ + __SIZE_TYPE__ p = b - e; + /* The first forwprop pass should optimize this to return e; */ + return b - p; +} + +/* { dg-final { scan-tree-dump "return e" "cddce1" } } */ + From bb23a04417f07e7dce19dd94b803556f07a61720 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Tue, 7 Oct 2025 09:51:37 +0200 Subject: [PATCH 119/216] Revert "Ada: Remove useless Makefile variable" This reverts commit 49aed8ceb5d3ee8af96ebd7edd5d250b682697cd. --- gcc/ada/Makefile.rtl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gcc/ada/Makefile.rtl b/gcc/ada/Makefile.rtl index 2ccb3aabe1cb..0fa2c51ceb6c 100644 --- a/gcc/ada/Makefile.rtl +++ b/gcc/ada/Makefile.rtl @@ -26,6 +26,12 @@ ifndef ADAC ADAC=$(CC) endif +ifeq ($(LLVM_CONFIG),) +LLVM_BUILD := $(shell $(ADAC) -v | grep ^llvm-gcc) +else +LLVM_BUILD := llvm-gcc +endif + # Objects needed only for tasking GNATRTL_TASKING_OBJS= \ a-dispat$(objext) \ From 3f2a291ef3a5bbf854454f2d2c8559d9f4cb292a Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 1 Oct 2025 13:31:59 +0100 Subject: [PATCH 120/216] libstdc++: Fix -Wformat warning in std::string The __throw_out_of_range_fmt function works like fprintf and so the arguments corresponding to %zu specifiers need to be size_t. The std::basic_string::size_type type is A::size_type which is not necessarily size_t. Add explicit casts to avoid a -Wformat warning with -Wsystem-headers. libstdc++-v3/ChangeLog: * include/bits/basic_string.h (basic_string::_M_check): Cast size_type arguments to size_t. --- libstdc++-v3/include/bits/basic_string.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h index 708104984d2d..8ae6569f5016 100644 --- a/libstdc++-v3/include/bits/basic_string.h +++ b/libstdc++-v3/include/bits/basic_string.h @@ -411,7 +411,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 if (__pos > this->size()) __throw_out_of_range_fmt(__N("%s: __pos (which is %zu) > " "this->size() (which is %zu)"), - __s, __pos, this->size()); + __s, (size_t)__pos, (size_t)this->size()); return __pos; } From 9af9532118c2c11b545700e74202b061396bb31c Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 1 Oct 2025 13:48:18 +0100 Subject: [PATCH 121/216] libstdc++: Fix -Wreorder warning in std::philox_engine libstdc++-v3/ChangeLog: * include/bits/random.h (philox_engine(result_type)): Reorder ctor-initializer-list to match declaration order. --- libstdc++-v3/include/bits/random.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libstdc++-v3/include/bits/random.h b/libstdc++-v3/include/bits/random.h index 4049a77fbf4c..ebc863e84534 100644 --- a/libstdc++-v3/include/bits/random.h +++ b/libstdc++-v3/include/bits/random.h @@ -1778,7 +1778,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION explicit philox_engine(result_type __value) - : _M_x{}, _M_y{}, _M_k{}, _M_i(__n - 1) + : _M_x{}, _M_k{}, _M_y{}, _M_i(__n - 1) { _M_k[0] = __value & max(); } /** @brief seed sequence constructor for %philox_engine From 5dce50b6a2d5f2723d886decba35a2c6758b5b9f Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Thu, 2 Oct 2025 16:37:33 +0100 Subject: [PATCH 122/216] libstdc++: Suppress -Wpessimizing-move warnings in shared_ptr tests libstdc++-v3/ChangeLog: * testsuite/20_util/shared_ptr/cons/move.cc: Add comment and dg-prune-output for -Wpessimizing-move warning. * testsuite/experimental/memory/shared_ptr/cons/move_ctor.cc: Likewise. --- libstdc++-v3/testsuite/20_util/shared_ptr/cons/move.cc | 2 ++ .../testsuite/experimental/memory/shared_ptr/cons/move_ctor.cc | 2 ++ 2 files changed, 4 insertions(+) diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/move.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/move.cc index 2dc161d641a2..e380d767d52a 100644 --- a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/move.cc +++ b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/move.cc @@ -140,6 +140,8 @@ test05() { reset_count_struct __attribute__((unused)) reset; + // The std::move here prevents copy elision, so we construct from a prvalue. + // { dg-prune-output "-Wpessimizing-move" } std::shared_ptr a(std::move(std::shared_ptr(new A))); VERIFY( a.use_count() == 1 ); VERIFY( A::ctor_count == 1 ); diff --git a/libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/move_ctor.cc b/libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/move_ctor.cc index f8ce58e4f094..e414b1f3cea0 100644 --- a/libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/move_ctor.cc +++ b/libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/move_ctor.cc @@ -106,6 +106,8 @@ test04() { reset_count_struct __attribute__((unused)) reset; + // The std::move here prevents copy elision, so we construct from a prvalue. + // { dg-prune-output "-Wpessimizing-move" } std::experimental::shared_ptr a(std::move(std::experimental ::shared_ptr (new A[5]))); From 20bf909f18783f144eabb323b5b55b627e9d650a Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 1 Oct 2025 13:51:55 +0100 Subject: [PATCH 123/216] libstdc++: Fix -Wmaybe-uninitialized warning in another test Like r16-4120-ge1b9ccaa10df01 this is a false positive, but we can just initialize the variable. libstdc++-v3/ChangeLog: * testsuite/std/time/parse/parse.cc: Initialize variable. --- libstdc++-v3/testsuite/std/time/parse/parse.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libstdc++-v3/testsuite/std/time/parse/parse.cc b/libstdc++-v3/testsuite/std/time/parse/parse.cc index 8bb0fd0bebab..78c761c115f6 100644 --- a/libstdc++-v3/testsuite/std/time/parse/parse.cc +++ b/libstdc++-v3/testsuite/std/time/parse/parse.cc @@ -309,7 +309,7 @@ test_modifiers() is >> parse("%5M", min); VERIFY( is.eof() && is.fail() ); - std::chrono::seconds s; + std::chrono::seconds s{}; is.clear(); is.str("000000000012345"); is >> parse("%12S", s); // Read more than 10 digits to check overflow logic. From 2f399316fca1cadfde3d9e8af92e029ef00bc2da Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 1 Oct 2025 13:53:14 +0100 Subject: [PATCH 124/216] libstdc++: Fix -Wparentheses warning in std::mul_sat libstdc++-v3/ChangeLog: * include/bits/sat_arith.h (mul_sat): Add parentheses around operands. --- libstdc++-v3/include/bits/sat_arith.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libstdc++-v3/include/bits/sat_arith.h b/libstdc++-v3/include/bits/sat_arith.h index 97545d272ca7..e036fc88e40b 100644 --- a/libstdc++-v3/include/bits/sat_arith.h +++ b/libstdc++-v3/include/bits/sat_arith.h @@ -87,7 +87,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __z; if constexpr (is_unsigned_v<_Tp>) return __gnu_cxx::__int_traits<_Tp>::__max; - else if (__x < 0 != __y < 0) + else if ((__x < 0) != (__y < 0)) return __gnu_cxx::__int_traits<_Tp>::__min; else return __gnu_cxx::__int_traits<_Tp>::__max; From a06d127372d935fdea6389d456350257c3b30184 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 1 Oct 2025 15:12:35 +0100 Subject: [PATCH 125/216] libstdc++: Initialize local variable in __gnu_cxx::rope This avoids -Wmaybe-uninitialized warnings. libstdc++-v3/ChangeLog: * include/ext/ropeimpl.h (rope::_S_fetch): Initialize variable. --- libstdc++-v3/include/ext/ropeimpl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libstdc++-v3/include/ext/ropeimpl.h b/libstdc++-v3/include/ext/ropeimpl.h index 320192706ff9..00b334cb4f4e 100644 --- a/libstdc++-v3/include/ext/ropeimpl.h +++ b/libstdc++-v3/include/ext/ropeimpl.h @@ -1355,7 +1355,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION case __detail::_S_substringfn: { _RopeFunction* __f = (_RopeFunction*)__r; - _CharT __result; + _CharT __result = _CharT(); (*(__f->_M_fn))(__i, 1, &__result); return __result; From 05d3dd6010a53e93e1693001eba4c88a7face53b Mon Sep 17 00:00:00 2001 From: Paul Thomas Date: Tue, 7 Oct 2025 13:30:43 +0100 Subject: [PATCH 126/216] Fortran: Fix ICE in pdt_1[3-5].f03 with -fcheck=all [PR102901] 2025-10-07 Paul Thomas gcc/fortran PR fortran/102901 * trans-array.cc (structure_alloc_comps): Do not use gfc_check_pdt_dummy with pointer or allocatable components. gcc/testsuite/ PR fortran/102901 * gfortran.dg/pdt_56.f03: Copy of pdt_13.f03 compiled with -fcheck=all. --- gcc/fortran/trans-array.cc | 6 +- gcc/testsuite/gfortran.dg/pdt_56.f03 | 96 ++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/pdt_56.f03 diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc index db34de44401b..9dd61f98ca76 100644 --- a/gcc/fortran/trans-array.cc +++ b/gcc/fortran/trans-array.cc @@ -11180,7 +11180,11 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl, tree dest, comp = gfc_class_data_get (comp); /* Recurse in to PDT components. */ - if ((c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS) + if (((c->ts.type == BT_DERIVED + && !c->attr.allocatable && !c->attr.pointer) + || (c->ts.type == BT_CLASS + && !CLASS_DATA (c)->attr.allocatable + && !CLASS_DATA (c)->attr.pointer)) && c->ts.u.derived && c->ts.u.derived->attr.pdt_type) { tmp = gfc_check_pdt_dummy (c->ts.u.derived, comp, diff --git a/gcc/testsuite/gfortran.dg/pdt_56.f03 b/gcc/testsuite/gfortran.dg/pdt_56.f03 new file mode 100644 index 000000000000..681d47937029 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pdt_56.f03 @@ -0,0 +1,96 @@ +! { dg-do compile } +! { dg-options "-fcheck=all" } +! +! Test the fix for PR102901, where pdt_13/14/15.f03 segfaulted in compilation +! with -fcheck=all. +! +! Reported by Tobias Burnus +! +! This is pdt_13.f03. +! +module precision_module + implicit none + integer, parameter :: sp = selected_real_kind(6, 37) + integer, parameter :: dp = selected_real_kind(15, 307) + integer, parameter :: qp = selected_real_kind( 30, 291) +end module precision_module + +module link_module + use precision_module + + type link(real_kind) + integer, kind :: real_kind + real (kind=real_kind) :: n + type (link(real_kind)), pointer :: next => NULL() + end type link + +contains + + function push_8 (self, arg) result(current) + real(dp) :: arg + type (link(real_kind=dp)), pointer :: self + type (link(real_kind=dp)), pointer :: current + + if (associated (self)) then + current => self + do while (associated (current%next)) + current => current%next + end do + + allocate (current%next) + current => current%next + else + allocate (current) + self => current + end if + + current%n = arg + current%next => NULL () + end function push_8 + + function pop_8 (self) result(res) + type (link(real_kind=dp)), pointer :: self + type (link(real_kind=dp)), pointer :: current => NULL() + type (link(real_kind=dp)), pointer :: previous => NULL() + real(dp) :: res + + res = 0.0_8 + if (associated (self)) then + current => self + do while (associated (current) .and. associated (current%next)) + previous => current + current => current%next + end do + + previous%next => NULL () + + res = current%n + if (associated (self, current)) then + deallocate (self) + else + deallocate (current) + end if + + end if + end function pop_8 + +end module link_module + +program ch2701 + use precision_module + use link_module + implicit none + integer, parameter :: wp = dp + type (link(real_kind=wp)), pointer :: root => NULL() + type (link(real_kind=wp)), pointer :: current + + current => push_8 (root, 1.0_8) + current => push_8 (root, 2.0_8) + current => push_8 (root, 3.0_8) + + if (int (pop_8 (root)) .ne. 3) STOP 1 + if (int (pop_8 (root)) .ne. 2) STOP 2 + if (int (pop_8 (root)) .ne. 1) STOP 3 + if (int (pop_8 (root)) .ne. 0) STOP 4 + +end program ch2701 From 34ef2eec90baff5a7b84806fb0c7a5cef16b5350 Mon Sep 17 00:00:00 2001 From: Raphael Moreira Zinsly Date: Tue, 7 Oct 2025 07:14:01 -0600 Subject: [PATCH 127/216] [PATCH] RISC-V: Fix slide pattern recognition [PR122124] Ensure the second pivot is really a pivot and it's not in OP1. PR target/122124 gcc/ChangeLog: * config/riscv/riscv-v.cc (shuffle_slide_patterns): Check if the second pivot is in OP1 and improve comments. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/pr122124.c: New test. --- gcc/config/riscv/riscv-v.cc | 5 +++-- .../gcc.target/riscv/rvv/autovec/pr122124.c | 21 +++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/pr122124.c diff --git a/gcc/config/riscv/riscv-v.cc b/gcc/config/riscv/riscv-v.cc index 1d7d8a61b051..ec713eea263b 100644 --- a/gcc/config/riscv/riscv-v.cc +++ b/gcc/config/riscv/riscv-v.cc @@ -3779,14 +3779,15 @@ shuffle_slide_patterns (struct expand_vec_perm_d *d) int pivot = -1; for (int i = 0; i < vlen; i++) { + /* The first pivot is in OP1. */ if (pivot == -1 && known_ge (d->perm[i], vec_len)) pivot = i; if (i > 0 && i != pivot && maybe_ne (d->perm[i], d->perm[i - 1] + 1)) { - if (pivot == -1 || len != 0) + /* A second pivot would indicate the vector length and is in OP0. */ + if (known_ge (d->perm[i], vec_len) || pivot == -1 || len != 0) return false; - /* A second pivot would indicate the vector length. */ len = i; } } diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr122124.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr122124.c new file mode 100644 index 000000000000..29d51b618548 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr122124.c @@ -0,0 +1,21 @@ +/* { dg-do run } */ +/* { dg-require-effective-target riscv_v_ok } */ +/* { dg-add-options riscv_v } */ +/* { dg-additional-options "-O0 -std=gnu99" } */ + +#include +#include +#define BS_VEC(type, num) type __attribute__((vector_size(num * sizeof(type)))) +uint16_t func_24() { + BS_VEC(uint32_t, 4) zero = {0}; + BS_VEC(uint8_t, 2) + BS_VAR_1 = __builtin_shufflevector( + (BS_VEC(uint8_t, 4))5, + __builtin_convertvector(zero, BS_VEC(uint8_t, 4)), 5, 0); + return BS_VAR_1[1]; +} +int main() { + printf("%u\n", func_24()); +} + +/* { dg-output "5" } */ From 62631c39a788161ff2f686adf355d10443e0d899 Mon Sep 17 00:00:00 2001 From: Robin Dapp Date: Tue, 7 Oct 2025 07:18:27 -0600 Subject: [PATCH 128/216] [PATCH] RISC-V: Detect wrap in shuffle_series_pattern [PR121845]. Hi, In shuffle_series_pattern we use series_p to determine if the permute mask is a simple series. This didn't take into account that series_p also returns true for e.g. {0, 3, 2, 1} where the step is 3 and the indices form a series modulo 4. We emit vid + vmul in order to synthesize a series. In order to be always correct we would need a vrem afterwards still which does not seem worth it. This patch adds the modulo for VLA permutes and punts if we wrap around for VLS permutes. I'm not really certain whether we'll really see a wrapping VLA series (certainly we haven't so far in the test suite) but as we observed a VLS one here now it appears conservatively correct to module the indices. Regtested on rv64gcv_zvl512b. Regards Robin PR target/121845 gcc/ChangeLog: * config/riscv/riscv-v.cc (shuffle_series_patterns): Modulo indices for VLA and punt when wrapping for VLS. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/pr121845.c: New test. --- gcc/config/riscv/riscv-v.cc | 38 ++++++++++++++++++- .../gcc.target/riscv/rvv/autovec/pr121845.c | 37 ++++++++++++++++++ 2 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121845.c diff --git a/gcc/config/riscv/riscv-v.cc b/gcc/config/riscv/riscv-v.cc index ec713eea263b..70f02fd01537 100644 --- a/gcc/config/riscv/riscv-v.cc +++ b/gcc/config/riscv/riscv-v.cc @@ -4230,6 +4230,9 @@ shuffle_series_patterns (struct expand_vec_perm_d *d) bool need_insert = false; bool have_series = false; + poly_int64 len = d->perm.length (); + bool need_modulo = !len.is_constant (); + /* Check for a full series. */ if (known_ne (step1, 0) && d->perm.series_p (0, 1, el1, step1)) have_series = true; @@ -4241,7 +4244,33 @@ shuffle_series_patterns (struct expand_vec_perm_d *d) need_insert = true; } - if (!have_series) + /* A permute like {0, 3, 2, 1} is recognized as series because series_p also + allows wrapping/modulo of the permute index. The step would be 3 and the + indices are correct modulo 4. As noted in expand_vec_perm vrgather does + not handle wrapping but rather zeros out-of-bounds indices. + This means we would need to emit an explicit modulo operation here which + does not seem worth it. We rather defer to the generic handling instead. + Even in the non-wrapping case it is doubtful whether + vid + vmul + vrgather + is preferable over + vle + vrgather. + If the permute mask can be reused there shouldn't be any difference and + otherwise it becomes a question of load bandwidth. */ + if (have_series && len.is_constant ()) + { + int64_t step = need_insert ? step2.to_constant () : step1.to_constant (); + int prec = GET_MODE_PRECISION (GET_MODE_INNER (d->vmode)); + wide_int wlen = wide_int::from (len.to_constant (), prec * 2, SIGNED); + wide_int wstep = wide_int::from (step, prec * 2, SIGNED); + wide_int result = wi::mul (wlen, wstep); + if (wi::gt_p (result, wlen, SIGNED)) + need_modulo = true; + } + + if (!have_series || (len.is_constant () && need_modulo)) return false; /* Disable shuffle if we can't find an appropriate integer index mode for @@ -4260,6 +4289,13 @@ shuffle_series_patterns (struct expand_vec_perm_d *d) expand_vec_series (series, gen_int_mode (need_insert ? el2 : el1, eltmode), gen_int_mode (need_insert ? step2 : step1, eltmode)); + if (need_modulo) + { + rtx mod = gen_const_vector_dup (sel_mode, len - 1); + series = expand_simple_binop (sel_mode, AND, series, mod, NULL, + 0, OPTAB_DIRECT); + } + /* Insert the remaining element if necessary. */ if (need_insert) { diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121845.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121845.c new file mode 100644 index 000000000000..84aca3cd8e74 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121845.c @@ -0,0 +1,37 @@ +/* { dg-do run } */ +/* { dg-require-effective-target riscv_v_ok } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O0" } */ + +#include +typedef uint32_t a; +typedef uint64_t uint64; + +uint64 b; +__attribute__ ((__vector_size__ (4 * sizeof (a)))) a f = {504339, 7, 3}; +uint64 *g = &b; + +int32_t * +c (uint8_t, int32_t *, uint32_t, uint32_t, int64_t); +int8_t +d () +{ + int32_t e; + c (0, &e, 0, 0, 1); + return 0; +} + +int32_t * +c (uint8_t, int32_t *j, uint32_t, uint32_t, int64_t) +{ + f = __builtin_shufflevector (f, f, 0, 3, 2, 1); + *g = f[2]; + return j; +} + +int +main () +{ + d (); + if (b != 3) + __builtin_abort (); +} From 26ada8fc9ee97c598e4295bf8729ba903c039976 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 7 Oct 2025 15:00:24 +0100 Subject: [PATCH 129/216] all: Fix "specifc", "costant" and "constat" typos in comments gcc/ChangeLog: * config/i386/i386-features.cc (general_scalar_chain::vector_const_cost): Fix spelling in comment. * ipa-prop.h (enum jump_func_type): Likewise. * tree-vectorizer.cc (try_vectorize_loop_1): Likewise. gcc/cp/ChangeLog: * module.cc (trees_out::lang_vals): Fix spelling in comment. gcc/jit/ChangeLog: * docs/_build/texinfo/libgccjit.texi: Fix spelling. * docs/internals/index.rst: Likewise. libgm2/ChangeLog: * configure.host: Fix spelling in comment. libstdc++-v3/ChangeLog: * configure.host: Fix spelling in comment. gcc/testsuite/ChangeLog: * gfortran.dg/dynamic_dispatch_9.f03: Fix spelling in comment. * gfortran.dg/use_only_3.inc: Likewise --- gcc/config/i386/i386-features.cc | 2 +- gcc/cp/module.cc | 2 +- gcc/ipa-prop.h | 2 +- gcc/jit/docs/_build/texinfo/libgccjit.texi | 2 +- gcc/jit/docs/internals/index.rst | 2 +- gcc/testsuite/gfortran.dg/dynamic_dispatch_9.f03 | 2 +- gcc/testsuite/gfortran.dg/use_only_3.inc | 2 +- gcc/tree-vectorizer.cc | 2 +- libgm2/configure.host | 4 ++-- libstdc++-v3/configure.host | 4 ++-- 10 files changed, 12 insertions(+), 12 deletions(-) diff --git a/gcc/config/i386/i386-features.cc b/gcc/config/i386/i386-features.cc index c313fb85f9ba..9348f55c2cd1 100644 --- a/gcc/config/i386/i386-features.cc +++ b/gcc/config/i386/i386-features.cc @@ -545,7 +545,7 @@ scalar_chain::build (bitmap candidates, unsigned insn_uid, bitmap disallowed) return true; } -/* Return a cost of building a vector costant +/* Return a cost of building a vector constant instead of using a scalar one. */ int diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc index 5f814f39e72c..103d7506da2d 100644 --- a/gcc/cp/module.cc +++ b/gcc/cp/module.cc @@ -7691,7 +7691,7 @@ trees_in::tree_node_bools (tree t) } -/* Write out the lang-specifc vals of node T. */ +/* Write out the lang-specific vals of node T. */ void trees_out::lang_vals (tree t) diff --git a/gcc/ipa-prop.h b/gcc/ipa-prop.h index 74c9a6378370..046e83a521f6 100644 --- a/gcc/ipa-prop.h +++ b/gcc/ipa-prop.h @@ -72,7 +72,7 @@ along with GCC; see the file COPYING3. If not see enum jump_func_type { IPA_JF_UNKNOWN = 0, /* newly allocated and zeroed jump functions default */ - IPA_JF_CONST, /* represented by field costant */ + IPA_JF_CONST, /* represented by field constant */ IPA_JF_PASS_THROUGH, /* represented by field pass_through */ IPA_JF_LOAD_AGG, /* represented by field load_agg */ IPA_JF_ANCESTOR /* represented by field ancestor */ diff --git a/gcc/jit/docs/_build/texinfo/libgccjit.texi b/gcc/jit/docs/_build/texinfo/libgccjit.texi index 487c57118148..5852070153a5 100644 --- a/gcc/jit/docs/_build/texinfo/libgccjit.texi +++ b/gcc/jit/docs/_build/texinfo/libgccjit.texi @@ -15740,7 +15740,7 @@ The jit testsuite detects if @code{RUN_UNDER_VALGRIND} is present in the environment (with any value). If it is present, it runs the test client code under valgrind@footnote{https://valgrind.org}, -specifcally, the default +specifically, the default memcheck@footnote{https://valgrind.org/docs/manual/mc-manual.html} tool with --leak-check=full@footnote{https://valgrind.org/docs/manual/mc-manual.html#opt.leak-check}. diff --git a/gcc/jit/docs/internals/index.rst b/gcc/jit/docs/internals/index.rst index 36dd5391ca6a..50efebda13b4 100644 --- a/gcc/jit/docs/internals/index.rst +++ b/gcc/jit/docs/internals/index.rst @@ -137,7 +137,7 @@ Running under valgrind The jit testsuite detects if :envvar:`RUN_UNDER_VALGRIND` is present in the environment (with any value). If it is present, it runs the test client code under `valgrind `_, -specifcally, the default +specifically, the default `memcheck `_ tool with `--leak-check=full diff --git a/gcc/testsuite/gfortran.dg/dynamic_dispatch_9.f03 b/gcc/testsuite/gfortran.dg/dynamic_dispatch_9.f03 index b9b1b1a6e069..0f807ba51049 100644 --- a/gcc/testsuite/gfortran.dg/dynamic_dispatch_9.f03 +++ b/gcc/testsuite/gfortran.dg/dynamic_dispatch_9.f03 @@ -1,6 +1,6 @@ ! { dg-do run } ! -! [OOP] Ensure that different specifc interfaces are +! [OOP] Ensure that different specific interfaces are ! handled properly by dynamic dispatch. ! ! Contributed by Salvatore Filippone diff --git a/gcc/testsuite/gfortran.dg/use_only_3.inc b/gcc/testsuite/gfortran.dg/use_only_3.inc index 7b860096b32d..7ef449e00082 100644 --- a/gcc/testsuite/gfortran.dg/use_only_3.inc +++ b/gcc/testsuite/gfortran.dg/use_only_3.inc @@ -397,7 +397,7 @@ END MODULE control_flags REAL(DP) :: ecutw = 0.0d0 REAL(DP) :: gcutw = 0.0d0 - ! values for costant cut-off computations + ! values for constant cut-off computations REAL(DP) :: ecfix = 0.0d0 ! value of the constant cut-off REAL(DP) :: ecutz = 0.0d0 ! height of the penalty function (above ecfix) diff --git a/gcc/tree-vectorizer.cc b/gcc/tree-vectorizer.cc index d7dc30bbeac5..97b6297fb145 100644 --- a/gcc/tree-vectorizer.cc +++ b/gcc/tree-vectorizer.cc @@ -1137,7 +1137,7 @@ try_vectorize_loop_1 (hash_table *&simduid_to_vf_htab, || ifn == IFN_MASK_STORE || ifn == IFN_MASK_CALL /* Don't keep the if-converted parts when the ifn with - specifc type is not supported by the backend. */ + specific type is not supported by the backend. */ || (direct_internal_fn_p (ifn) && !direct_internal_fn_supported_p (call, OPTIMIZE_FOR_SPEED))) diff --git a/libgm2/configure.host b/libgm2/configure.host index 2806fd6872b3..b96a37cab170 100644 --- a/libgm2/configure.host +++ b/libgm2/configure.host @@ -200,10 +200,10 @@ cpu_opt_ext_random=cpu/generic/opt/bits/opt_random.h # Set any OS-dependent bits. # Set the os_include_dir. -# Set the error_costants_dir. +# Set the error_constants_dir. # Set c_model, c_compatibility here. # If atomic ops and/or numeric limits are OS-specific rather than -# CPU-specifc, set those here too. +# CPU-specific, set those here too. # THIS TABLE IS SORTED. KEEP IT THAT WAY. case "${host_os}" in aix[56789]*) diff --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host index 87a1822c661a..ff97216167de 100644 --- a/libstdc++-v3/configure.host +++ b/libstdc++-v3/configure.host @@ -210,10 +210,10 @@ cpu_opt_ext_random=cpu/generic/opt/bits/opt_random.h # Set any OS-dependent bits. # Set the os_include_dir. -# Set the error_costants_dir. +# Set the error_constants_dir. # Set c_model, c_compatibility here. # If atomic ops and/or numeric limits are OS-specific rather than -# CPU-specifc, set those here too. +# CPU-specific, set those here too. # THIS TABLE IS SORTED. KEEP IT THAT WAY. case "${host_os}" in aix[56789]*) From 3cbd43d640d6384df85c171a0245488f0adc3145 Mon Sep 17 00:00:00 2001 From: Georg-Johann Lay Date: Tue, 7 Oct 2025 17:50:34 +0200 Subject: [PATCH 130/216] AVR: target/122187 - Don't clobber recog_data.operand[] in insn out. avr.cc::avr_out_extr() and avr.cc::avr_out_extr_not() changed xop for output, which spoiled the operand for the next invokation, running into an assertion. This patch makes a local copy of the operands. PR target/122187 gcc/ * config/avr/avr.cc (avr_out_extr, avr_out_extr_not): Make a local copy of the passed rtx[] operands. gcc/testsuite/ * gcc.target/avr/torture/pr122187.c: New test. --- gcc/config/avr/avr.cc | 18 ++++++++++-------- .../gcc.target/avr/torture/pr122187.c | 17 +++++++++++++++++ 2 files changed, 27 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/gcc.target/avr/torture/pr122187.c diff --git a/gcc/config/avr/avr.cc b/gcc/config/avr/avr.cc index 6c7ad4fec8ee..033bd09e7bfc 100644 --- a/gcc/config/avr/avr.cc +++ b/gcc/config/avr/avr.cc @@ -10142,16 +10142,17 @@ avr_out_insv (rtx_insn *insn, rtx xop[], int *plen) } -/* Output instructions to extract a bit to 8-bit register XOP[0]. - The input XOP[1] is a register or an 8-bit MEM in the lower I/O range. - XOP[2] is the const_int bit position. Return "". +/* Output instructions to extract a bit to 8-bit register OP[0]. + The input OP[1] is a register or an 8-bit MEM in the lower I/O range. + OP[2] is the const_int bit position. Return "". PLEN != 0: Set *PLEN to the code length in words. Don't output anything. PLEN == 0: Output instructions. */ const char * -avr_out_extr (rtx_insn *insn, rtx xop[], int *plen) +avr_out_extr (rtx_insn *insn, rtx op[], int *plen) { + rtx xop[] = { op[0], op[1], op[2] }; rtx dest = xop[0]; rtx src = xop[1]; int bit = INTVAL (xop[2]); @@ -10209,16 +10210,17 @@ avr_out_extr (rtx_insn *insn, rtx xop[], int *plen) } -/* Output instructions to extract a negated bit to 8-bit register XOP[0]. - The input XOP[1] is an 8-bit register or MEM in the lower I/O range. - XOP[2] is the const_int bit position. Return "". +/* Output instructions to extract a negated bit to 8-bit register OP[0]. + The input OP[1] is an 8-bit register or MEM in the lower I/O range. + OP[2] is the const_int bit position. Return "". PLEN != 0: Set *PLEN to the code length in words. Don't output anything. PLEN == 0: Output instructions. */ const char * -avr_out_extr_not (rtx_insn * /* insn */, rtx xop[], int *plen) +avr_out_extr_not (rtx_insn * /* insn */, rtx op[], int *plen) { + rtx xop[] = { op[0], op[1], op[2] }; rtx dest = xop[0]; rtx src = xop[1]; int bit = INTVAL (xop[2]); diff --git a/gcc/testsuite/gcc.target/avr/torture/pr122187.c b/gcc/testsuite/gcc.target/avr/torture/pr122187.c new file mode 100644 index 000000000000..0f781eb1a64d --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/torture/pr122187.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-additional-options { -std=c99 } } */ + +typedef __UINT32_TYPE__ uint32_t; +typedef __UINT16_TYPE__ uint16_t; +typedef __UINT8_TYPE__ uint8_t; + +#define PINB (*(volatile uint8_t*) (13 + __AVR_SFR_OFFSET__)) +#define PB1 1 + +uint16_t fun (void) +{ + uint16_t h = 0; + for (uint32_t s = 0; s < 0x10000; ++s) + h += (PINB >> PB1) & 1; + return h; +} From 8b5d577caa32145b24acb948117f628a044028be Mon Sep 17 00:00:00 2001 From: Alfie Richards Date: Wed, 13 Aug 2025 20:13:28 +0000 Subject: [PATCH 131/216] docs: Add documentation for TARGET_HAS_FMV_TARGET_ATTRIBUTE macro Adds documentation for the TARGET_HAS_FMV_TARGET_ATTRIBUTE macro hook. gcc/ChangeLog: * doc/tm.texi: Regenerate. * doc/tm.texi.in: Add documentation for TARGET_HAS_FMV_TARGET_ATTRIBUTE. --- gcc/doc/tm.texi | 10 ++++++++++ gcc/doc/tm.texi.in | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index 981bb2dca0ea..0d109391f0b1 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -10925,6 +10925,16 @@ the function declaration to hold a pointer to a target-specific @code{struct cl_target_option} structure. @end deftypefn +@defmac TARGET_HAS_FMV_TARGET_ATTRIBUTE +Define this macro to zero to use @code{target_version} attributes for function +multiversioning (FMV) rather than @code{target} attributes. + +Targets using @code{target_version} attributes will also have +"target_version" FMV semantics, which allow for FMV sets defined across TU's +and using a combination of @code{target_version} and @code{target_clones} +attributed declarations in the definition of a FMV function set. +@end defmac + @defmac TARGET_CLONES_ATTR_SEPARATOR Define this char-typed macro to select a character that separates each target specific attributes from the @code{attribute(target_clones("..."))} diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in index 842ea1244c89..b28519081587 100644 --- a/gcc/doc/tm.texi.in +++ b/gcc/doc/tm.texi.in @@ -7121,6 +7121,16 @@ on this implementation detail. @hook TARGET_OPTION_VALID_VERSION_ATTRIBUTE_P +@defmac TARGET_HAS_FMV_TARGET_ATTRIBUTE +Define this macro to zero to use @code{target_version} attributes for function +multiversioning (FMV) rather than @code{target} attributes. + +Targets using @code{target_version} attributes will also have +"target_version" FMV semantics, which allow for FMV sets defined across TU's +and using a combination of @code{target_version} and @code{target_clones} +attributed declarations in the definition of a FMV function set. +@end defmac + @defmac TARGET_CLONES_ATTR_SEPARATOR Define this char-typed macro to select a character that separates each target specific attributes from the @code{attribute(target_clones("..."))} From f4b60fe6d6a16f54347af476e88d534f3666ea08 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Sat, 4 Oct 2025 09:24:29 +0100 Subject: [PATCH 132/216] c++: new-expr clobber of constant-size array I previously tried to clobber an array as a whole, but fell back on a loop due to issues with std::construct_at following the resolution of LWG3436. But the loop seems to make life hard for the optimizers and it occurs to me that for a one-element array we can just clobber the element type. This also fixes some xfails in Warray-bounds-20.C. gcc/cp/ChangeLog: * init.cc (build_new_1): Clobber a constant-bound array as a whole. gcc/testsuite/ChangeLog: * g++.dg/warn/Warray-bounds-20.C: Remove xfails, add diags. --- gcc/cp/init.cc | 26 +++++++++++++++++--- gcc/testsuite/g++.dg/warn/Warray-bounds-20.C | 10 ++++---- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/gcc/cp/init.cc b/gcc/cp/init.cc index 3fe476d7eec7..912298728acd 100644 --- a/gcc/cp/init.cc +++ b/gcc/cp/init.cc @@ -3662,11 +3662,11 @@ build_new_1 (vec **placement, tree type, tree nelts, tree clobber_expr = NULL_TREE; if (do_clobber) { - tree clobber = build_clobber (elt_type, CLOBBER_OBJECT_BEGIN); - CONSTRUCTOR_IS_DIRECT_INIT (clobber) = true; - if (array_p) + if (array_p && TREE_CODE (cst_outer_nelts) != INTEGER_CST) { /* Clobber each element rather than the array at once. */ + tree clobber = build_clobber (elt_type, CLOBBER_OBJECT_BEGIN); + CONSTRUCTOR_IS_DIRECT_INIT (clobber) = true; tree maxindex = cp_build_binary_op (input_location, MINUS_EXPR, outer_nelts, integer_one_node, @@ -3677,7 +3677,25 @@ build_new_1 (vec **placement, tree type, tree nelts, } else { - tree targ = cp_build_fold_indirect_ref (data_addr); + tree targ = data_addr; + tree ttype = type; + /* Clobber the array as a whole, except that for a one-element array + just clobber the element type, to avoid problems with code like + construct_at that uses new T[1] for array T to get a pointer to + the array. */ + if (array_p && !integer_onep (cst_outer_nelts)) + { + tree dom + = compute_array_index_type (NULL_TREE, + CONST_CAST_TREE (cst_outer_nelts), + complain); + ttype = build_cplus_array_type (type, dom); + tree ptype = build_pointer_type (ttype); + targ = fold_convert (ptype, targ); + } + targ = cp_build_fold_indirect_ref (targ); + tree clobber = build_clobber (ttype, CLOBBER_OBJECT_BEGIN); + CONSTRUCTOR_IS_DIRECT_INIT (clobber) = true; clobber_expr = cp_build_init_expr (targ, clobber); } } diff --git a/gcc/testsuite/g++.dg/warn/Warray-bounds-20.C b/gcc/testsuite/g++.dg/warn/Warray-bounds-20.C index 643e8014d36e..a57499dd07ae 100644 --- a/gcc/testsuite/g++.dg/warn/Warray-bounds-20.C +++ b/gcc/testsuite/g++.dg/warn/Warray-bounds-20.C @@ -53,18 +53,18 @@ void warn_derived_ctor_access_new_alloc () void warn_derived_ctor_access_new_array_decl () { - char b[sizeof (D1) * 2]; // { dg-message "at offset \\d+ into object 'b' of size 80" "LP64 note" { target { lp64 } xfail { lp64 } } } - // { dg-message "at offset \\d+ into object 'b' of size 40" "LP32 note" { target { ilp32 } xfail { ilp32 } } .-1 } + char b[sizeof (D1) * 2]; // { dg-message "at offset \\d+ into object 'b' of size 80" "LP64 note" { target { lp64 } } } + // { dg-message "at offset \\d+ into object 'b' of size 40" "LP64 note" { target { ilp32 } } .-1 } char *p = b; ++p; - D1 *q = new (p) D1[2]; + D1 *q = new (p) D1[2]; // { dg-message "partly outside array bounds" } sink (q); } void warn_derived_ctor_access_new_array_alloc () { - char *p = new char[sizeof (D1) * 2]; // { dg-message "at offset \\d+ into object of size \\d+ allocated by '\[^\n\r]*operator new\[^\n\r]*" "note" { xfail *-*-* } } + char *p = new char[sizeof (D1) * 2]; // { dg-message "at offset \\d+ into object of size \\d+ allocated by '\[^\n\r]*operator new\[^\n\r]*" "note" } ++p; - D1 *q = new (p) D1[2]; + D1 *q = new (p) D1[2]; // { dg-message "partly outside array bounds" } sink (q); } From 3dcf3410a743867a0744d3a3d737b2e0b9c035ac Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Sat, 30 Aug 2025 11:46:31 -0700 Subject: [PATCH 133/216] libbid: Set rounding mode to round-to-nearest for _Decimal128 arithmetic Since _Decimal128 arithmetic requires the round-to-nearest rounding mode, define DFP_INIT_ROUNDMODE and DFP_RESTORE_ROUNDMODE, similar to FP_INIT_ROUNDMODE in sfp-machine.h, to set the rounding mode to round-to-nearest at _Decimal128 related arithmetic function entrances and restores it upon return. This doesn't require linking with libm when libgcc is used. libgcc/ PR target/120691 * Makefile.in (DECNUMINC): Add -I$(srcdir)/config/$(cpu_type). * config/i386/dfp-machine.h: New file. * config/i386/32/dfp-machine.h: Likewise. * config/i386/64/dfp-machine.h: Likewise. libgcc/config/libbid/ PR target/120691 * bid128_div.c: Run DFP_INIT_ROUNDMODE at function entrace and DFP_RESTORE_ROUNDMODE at function exit. * bid128_rem.c: Likewise. * bid128_sqrt.c: Likewise. * bid64_div.c (bid64_div): Likewise. * bid64_sqrt.c (bid64_sqrt): Likewise. * bid_conf.h: Include . * dfp-machine.h: New file. gcc/testsuite/ PR target/120691 * gcc.target/i386/pr120691.c: New test. Signed-off-by: H.J. Lu --- gcc/testsuite/gcc.target/i386/pr120691.c | 19 ++++ libgcc/Makefile.in | 3 +- libgcc/config/i386/32/dfp-machine.h | 30 +++++++ libgcc/config/i386/64/dfp-machine.h | 21 +++++ libgcc/config/i386/dfp-machine.h | 59 ++++++++++++ libgcc/config/libbid/bid128_div.c | 107 ++++++++++++++++++++++ libgcc/config/libbid/bid128_rem.c | 29 ++++++ libgcc/config/libbid/bid128_sqrt.c | 31 +++++++ libgcc/config/libbid/bid64_div.c | 110 +++++++++++++++++++++++ libgcc/config/libbid/bid64_sqrt.c | 29 ++++++ libgcc/config/libbid/bid_conf.h | 2 + libgcc/config/libbid/dfp-machine.h | 34 +++++++ 12 files changed, 473 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr120691.c create mode 100644 libgcc/config/i386/32/dfp-machine.h create mode 100644 libgcc/config/i386/64/dfp-machine.h create mode 100644 libgcc/config/i386/dfp-machine.h create mode 100644 libgcc/config/libbid/dfp-machine.h diff --git a/gcc/testsuite/gcc.target/i386/pr120691.c b/gcc/testsuite/gcc.target/i386/pr120691.c new file mode 100644 index 000000000000..9bbd61ed53d5 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr120691.c @@ -0,0 +1,19 @@ +/* { dg-do run } */ +/* { dg-options "-O0 -mfpmath=sse -msse2" } */ +/* { dg-require-effective-target sse2 } */ +/* { dg-require-effective-target fenv } */ +/* { dg-require-effective-target dfp } */ + +#include + +int main() { + fesetround( FE_UPWARD ); + _Decimal128 x1 = 9825, x2 = 10000 ; + + double c = (double) (x1 / x2); + + if (c != 0.9825) + __builtin_abort (); + + return 0 ; +} diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in index e258f943dddd..32a5a15813f8 100644 --- a/libgcc/Makefile.in +++ b/libgcc/Makefile.in @@ -232,7 +232,8 @@ version := $(shell @get_gcc_base_ver@ $(srcdir)/../gcc/BASE-VER) ifeq ($(decimal_float),yes) ifeq ($(enable_decimal_float),bid) -DECNUMINC = -I$(srcdir)/config/libbid -DENABLE_DECIMAL_BID_FORMAT +DECNUMINC = -I$(srcdir)/config/$(cpu_type) -I$(srcdir)/config/libbid \ + -DENABLE_DECIMAL_BID_FORMAT else DECNUMINC = -I$(srcdir)/../libdecnumber/$(enable_decimal_float) \ -I$(srcdir)/../libdecnumber diff --git a/libgcc/config/i386/32/dfp-machine.h b/libgcc/config/i386/32/dfp-machine.h new file mode 100644 index 000000000000..ef8fa4f3600c --- /dev/null +++ b/libgcc/config/i386/32/dfp-machine.h @@ -0,0 +1,30 @@ +#ifndef _SOFT_FLOAT +/* Get the rounding mode. */ +#define DFP_GET_ROUNDMODE \ + unsigned int _frnd_orig; \ + do \ + { \ + __asm__ __volatile__ ("fnstcw\t%0" : "=m" (_frnd_orig)); \ + _frnd_orig &= FP_RND_MASK; \ + } \ + while (0); + +/* Set the rounding mode. */ +#define DFP_SET_ROUNDMODE(round) \ + do \ + { \ + unsigned int _cw; \ + __asm__ __volatile__ ("fnstcw\t%0" : "=m" (_cw)); \ + _cw &= ~FP_RND_MASK; \ + _cw |= round; \ + __asm__ __volatile__ ("fldcw\t%0" :: "m" (_cw)); \ + if (__builtin_cpu_supports ("sse")) \ + { \ + __asm__ __volatile__ ("%vstmxcsr\t%0" : "=m" (_cw)); \ + _cw &= ~0x6000; \ + _cw |= round << 3; \ + __asm__ __volatile__ ("%vldmxcsr\t%0" :: "m" (_cw)); \ + } \ + } \ + while (0); +#endif diff --git a/libgcc/config/i386/64/dfp-machine.h b/libgcc/config/i386/64/dfp-machine.h new file mode 100644 index 000000000000..19cc16a9f96d --- /dev/null +++ b/libgcc/config/i386/64/dfp-machine.h @@ -0,0 +1,21 @@ +/* Get the rounding mode. */ +#define DFP_GET_ROUNDMODE \ + unsigned int _frnd_orig; \ + do \ + { \ + __asm__ __volatile__ ("%vstmxcsr\t%0" : "=m" (_frnd_orig)); \ + _frnd_orig &= FP_RND_MASK; \ + } \ + while (0); + +/* Set the rounding mode. */ +#define DFP_SET_ROUNDMODE(round) \ + do \ + { \ + unsigned int _cw; \ + __asm__ __volatile__ ("%vstmxcsr\t%0" : "=m" (_cw)); \ + _cw &= ~FP_RND_MASK; \ + _cw |= round; \ + __asm__ __volatile__ ("%vldmxcsr\t%0" :: "m" (_cw)); \ + } \ + while (0); diff --git a/libgcc/config/i386/dfp-machine.h b/libgcc/config/i386/dfp-machine.h new file mode 100644 index 000000000000..f6efacc7299e --- /dev/null +++ b/libgcc/config/i386/dfp-machine.h @@ -0,0 +1,59 @@ +/* Rounding mode macros for DFP libbid. x86 version. + Copyright (C) 2025 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + GCC is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + Under Section 7 of GPL version 3, you are granted additional + permissions described in the GCC Runtime Library Exception, version + 3.1, as published by the Free Software Foundation. + + You should have received a copy of the GNU General Public License and + a copy of the GCC Runtime Library Exception along with this program; + see the files COPYING3 and COPYING.RUNTIME respectively. If not, see + . */ + +#ifndef _X86_DFP_MACHINE_H +#define _X86_DFP_MACHINE_H + +#ifdef _SOFT_FLOAT +#include_next +#else +#include "config/i386/sfp-machine.h" + +#ifdef __x86_64__ +#include "config/i386/64/dfp-machine.h" +#else +#include "config/i386/32/dfp-machine.h" +#endif + +/* Initialize the rounding mode to round-to-nearest if needed. */ +#define DFP_INIT_ROUNDMODE \ + DFP_GET_ROUNDMODE; \ + do \ + { \ + if (_frnd_orig != FP_RND_NEAREST) \ + DFP_SET_ROUNDMODE (FP_RND_NEAREST); \ + } \ + while (0); + +/* Restore the rounding mode to round-to-nearest if changed. */ +#define DFP_RESTORE_ROUNDMODE \ + do \ + { \ + if (_frnd_orig != FP_RND_NEAREST) \ + DFP_SET_ROUNDMODE (_frnd_orig); \ + } \ + while (0); +#endif + +#endif /* _X86_DFP_MACHINE_H */ diff --git a/libgcc/config/libbid/bid128_div.c b/libgcc/config/libbid/bid128_div.c index 925bf14a3361..f05f9f468252 100644 --- a/libgcc/config/libbid/bid128_div.c +++ b/libgcc/config/libbid/bid128_div.c @@ -49,6 +49,9 @@ BID128_FUNCTION_ARG2 (bid128_div, x, y) fexcept_t binaryflags = 0; #endif + // Set the rounding mode to round-to-nearest (if different). + DFP_INIT_ROUNDMODE; + valid_y = unpack_BID128_value (&sign_y, &exponent_y, &CY, y); // unpack arguments, check for NaN or Infinity @@ -62,6 +65,8 @@ if ((x.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) { #endif res.w[1] = (CX.w[1]) & QUIET_MASK64; res.w[0] = CX.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is Infinity? @@ -75,6 +80,8 @@ if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { #endif res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is NaN? @@ -85,6 +92,8 @@ if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { res.w[1] = ((x.w[1] ^ y.w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -97,6 +106,8 @@ if ((y.w[1] & 0x7800000000000000ull) < 0x7800000000000000ull) { // x=y=0, return NaN res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // return 0 @@ -108,6 +119,8 @@ if ((y.w[1] & 0x7800000000000000ull) < 0x7800000000000000ull) { exponent_x = 0; res.w[1] |= (((UINT64) exponent_x) << 49); res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -122,6 +135,8 @@ if (!valid_y) { #endif res.w[1] = CY.w[1] & QUIET_MASK64; res.w[0] = CY.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is Infinity? @@ -129,6 +144,8 @@ if (!valid_y) { // return +/-0 res.w[1] = sign_x ^ sign_y; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is 0, return +/-Inf @@ -138,6 +155,8 @@ if (!valid_y) { res.w[1] = ((x.w[1] ^ y.w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS @@ -186,6 +205,8 @@ if (__unsigned_compare_gt_128 (CY, CX)) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // get number of decimal digits in CQ @@ -379,6 +400,8 @@ if (!CA4.w[0] && !CA4.w[1]) #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #endif @@ -469,6 +492,8 @@ if (diff_expon >= 0) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -477,6 +502,8 @@ get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif +// restore the rounding mode back if it has been changed +DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -500,6 +527,9 @@ TYPE0_FUNCTION_ARGTYPE1_ARGTYPE2 (UINT128, bid128dd_div, UINT64, x, fexcept_t binaryflags = 0; #endif + // Set the rounding mode to round-to-nearest (if different). + DFP_INIT_ROUNDMODE; + valid_y = unpack_BID64 (&sign_y, &exponent_y, &CY.w[0], y); // unpack arguments, check for NaN or Infinity @@ -519,6 +549,8 @@ if ((x & NAN_MASK64) == NAN_MASK64) { res.w[0] = (CX.w[0] & 0x0003ffffffffffffull); __mul_64x64_to_128 (res, res.w[0], power10_table_128[18].w[0]); res.w[1] |= ((CX.w[0]) & 0xfc00000000000000ull); + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is Infinity? @@ -532,6 +564,8 @@ if (((x) & 0x7800000000000000ull) == 0x7800000000000000ull) { #endif res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } if ((((y) & 0x7c00000000000000ull) != 0x7c00000000000000ull)) { @@ -539,6 +573,8 @@ if (((x) & 0x7800000000000000ull) == 0x7800000000000000ull) { res.w[1] = (((x) ^ (y)) & 0x8000000000000000ull) | 0x7800000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -551,6 +587,8 @@ if ((((y) & 0x7800000000000000ull) != 0x7800000000000000ull)) { // x=y=0, return NaN res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // return 0 @@ -566,6 +604,8 @@ else if (exponent_x < 0) exponent_x = 0; res.w[1] |= (((UINT64) exponent_x) << 49); res.w[0] = 0; +// restore the rounding mode back if it has been changed +DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -583,6 +623,8 @@ if (!valid_y) { res.w[0] = (CY.w[0] & 0x0003ffffffffffffull); __mul_64x64_to_128 (res, res.w[0], power10_table_128[18].w[0]); res.w[1] |= ((CY.w[0]) & 0xfc00000000000000ull); + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is Infinity? @@ -590,6 +632,8 @@ if (!valid_y) { // return +/-0 res.w[1] = sign_x ^ sign_y; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is 0, return +/-Inf @@ -599,6 +643,8 @@ if (!valid_y) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS @@ -647,6 +693,8 @@ if (__unsigned_compare_gt_128 (CY, CX)) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // get number of decimal digits in CQ @@ -843,6 +891,8 @@ __div_256_by_128 (&CQ, &CA4, CY); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #endif @@ -932,6 +982,8 @@ if (diff_expon >= 0) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -940,6 +992,8 @@ get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif +// restore the rounding mode back if it has been changed +DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -959,6 +1013,9 @@ BID128_FUNCTION_ARGTYPE1_ARG128 (bid128dq_div, UINT64, x, y) fexcept_t binaryflags = 0; #endif + // Set the rounding mode to round-to-nearest (if different) + DFP_INIT_ROUNDMODE; + valid_y = unpack_BID128_value (&sign_y, &exponent_y, &CY, y); // unpack arguments, check for NaN or Infinity @@ -978,6 +1035,8 @@ if ((x & NAN_MASK64) == NAN_MASK64) { res.w[0] = (CX.w[0] & 0x0003ffffffffffffull); __mul_64x64_to_128 (res, res.w[0], power10_table_128[18].w[0]); res.w[1] |= ((CX.w[0]) & 0xfc00000000000000ull); + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is Infinity? @@ -991,6 +1050,8 @@ if ((x & 0x7800000000000000ull) == 0x7800000000000000ull) { #endif res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } if (((y.w[1] & 0x7c00000000000000ull) != 0x7c00000000000000ull)) { @@ -998,6 +1059,8 @@ if ((x & 0x7800000000000000ull) == 0x7800000000000000ull) { res.w[1] = ((x ^ y.w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -1010,6 +1073,8 @@ if ((y.w[1] & INFINITY_MASK64) != INFINITY_MASK64) { // x=y=0, return NaN res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // return 0 @@ -1021,6 +1086,8 @@ if ((y.w[1] & INFINITY_MASK64) != INFINITY_MASK64) { exponent_x = 0; res.w[1] |= (((UINT64) exponent_x) << 49); res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -1037,6 +1104,8 @@ if (!valid_y) { #endif res.w[1] = CY.w[1] & QUIET_MASK64; res.w[0] = CY.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is Infinity? @@ -1044,6 +1113,8 @@ if (!valid_y) { // return +/-0 res.w[1] = sign_x ^ sign_y; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is 0, return +/-Inf @@ -1053,6 +1124,8 @@ if (!valid_y) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS @@ -1101,6 +1174,8 @@ if (__unsigned_compare_gt_128 (CY, CX)) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // get number of decimal digits in CQ @@ -1300,6 +1375,8 @@ __div_256_by_128 (&CQ, &CA4, CY); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #endif @@ -1389,6 +1466,8 @@ if (diff_expon >= 0) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -1396,6 +1475,8 @@ get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif +// restore the rounding mode back if it has been changed +DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -1415,6 +1496,8 @@ BID128_FUNCTION_ARG128_ARGTYPE2 (bid128qd_div, x, UINT64, y) fexcept_t binaryflags = 0; #endif + // Set the rounding mode to round-to-nearest (if different) + DFP_INIT_ROUNDMODE; valid_y = unpack_BID64 (&sign_y, &exponent_y, &CY.w[0], y); // unpack arguments, check for NaN or Infinity @@ -1428,6 +1511,8 @@ if ((x.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) { #endif res.w[1] = (CX.w[1]) & QUIET_MASK64; res.w[0] = CX.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is Infinity? @@ -1441,6 +1526,8 @@ if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { #endif res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is NaN? @@ -1451,6 +1538,8 @@ if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { res.w[1] = ((x.w[1] ^ y) & 0x8000000000000000ull) | 0x7800000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -1463,6 +1552,8 @@ if ((y & 0x7800000000000000ull) < 0x7800000000000000ull) { // x=y=0, return NaN res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // return 0 @@ -1474,6 +1565,8 @@ if ((y & 0x7800000000000000ull) < 0x7800000000000000ull) { exponent_x = 0; res.w[1] |= (((UINT64) exponent_x) << 49); res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -1490,6 +1583,8 @@ if (!valid_y) { res.w[0] = (CY.w[0] & 0x0003ffffffffffffull); __mul_64x64_to_128 (res, res.w[0], power10_table_128[18].w[0]); res.w[1] |= ((CY.w[0]) & 0xfc00000000000000ull); + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is Infinity? @@ -1497,6 +1592,8 @@ if (!valid_y) { // return +/-0 res.w[1] = ((x.w[1] ^ y) & 0x8000000000000000ull); res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is 0 @@ -1505,6 +1602,8 @@ if (!valid_y) { #endif res.w[1] = (sign_x ^ sign_y) | INFINITY_MASK64; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS @@ -1553,6 +1652,8 @@ if (__unsigned_compare_gt_128 (CY, CX)) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // get number of decimal digits in CQ @@ -1749,6 +1850,8 @@ __div_256_by_128 (&CQ, &CA4, CY); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #endif @@ -1838,6 +1941,8 @@ if (diff_expon >= 0) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -1846,6 +1951,8 @@ get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif +// restore the rounding mode back if it has been changed +DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } diff --git a/libgcc/config/libbid/bid128_rem.c b/libgcc/config/libbid/bid128_rem.c index f229b2869af3..1c6da70cf590 100644 --- a/libgcc/config/libbid/bid128_rem.c +++ b/libgcc/config/libbid/bid128_rem.c @@ -35,6 +35,9 @@ BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (UINT128, bid128_rem, x, y) int exponent_x, exponent_y, diff_expon, bin_expon_cx, scale, scale0; + // Set the rounding mode to round-to-nearest (if different) + DFP_INIT_ROUNDMODE; + // unpack arguments, check for NaN or Infinity valid_y = unpack_BID128_value (&sign_y, &exponent_y, &CY, y); @@ -52,6 +55,8 @@ if ((x.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) { #endif res.w[1] = CX.w[1] & QUIET_MASK64; res.w[0] = CX.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is Infinity? @@ -66,6 +71,8 @@ if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { #endif res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -79,6 +86,8 @@ if ((!CY.w[1]) && (!CY.w[0])) { // x=y=0, return NaN res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } if (valid_y || ((y.w[1] & NAN_MASK64) == INFINITY_MASK64)) { @@ -89,6 +98,8 @@ if (valid_y || ((y.w[1] & NAN_MASK64) == INFINITY_MASK64)) { res.w[1] = sign_x | (((UINT64) exponent_x) << 49); res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -103,6 +114,8 @@ if (!valid_y) { #endif res.w[1] = CY.w[1] & QUIET_MASK64; res.w[0] = CY.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is Infinity? @@ -110,6 +123,8 @@ if (!valid_y) { // return x res.w[1] = x.w[1]; res.w[0] = x.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is 0 @@ -119,6 +134,8 @@ if (!valid_y) { #endif res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -130,6 +147,8 @@ if (diff_expon <= 0) { if (diff_expon > 34) { // |x|<|y| in this case res = x; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // set exponent of y to exponent_x, scale coefficient_y @@ -139,6 +158,8 @@ if (diff_expon <= 0) { if (P256.w[2] || P256.w[3]) { // |x|<|y| in this case res = x; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -147,6 +168,8 @@ if (diff_expon <= 0) { if (__unsigned_compare_ge_128 (P256, CX2)) { // |x|<|y| in this case res = x; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -164,6 +187,8 @@ if (diff_expon <= 0) { } get_BID128_very_fast (&res, sign_x, exponent_x, CR); + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // 2^64 @@ -200,6 +225,8 @@ while (diff_expon > 0) { // check for remainder == 0 if (!CX.w[1] && !CX.w[0]) { get_BID128_very_fast (&res, sign_x, exponent_y, CX); + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -213,5 +240,7 @@ if ((__unsigned_compare_gt_128 (CX2, CY)) } get_BID128_very_fast (&res, sign_x, exponent_y, CX); +// restore the rounding mode back if it has been changed +DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } diff --git a/libgcc/config/libbid/bid128_sqrt.c b/libgcc/config/libbid/bid128_sqrt.c index b28038389ad1..71a033f54fe4 100644 --- a/libgcc/config/libbid/bid128_sqrt.c +++ b/libgcc/config/libbid/bid128_sqrt.c @@ -43,6 +43,9 @@ BID128_FUNCTION_ARG1 (bid128_sqrt, x) fexcept_t binaryflags = 0; #endif + // Set the rounding mode to round-to-nearest (if different) + DFP_INIT_ROUNDMODE; + // unpack arguments, check for NaN or Infinity if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { res.w[1] = CX.w[1]; @@ -54,6 +57,8 @@ if ((x.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) { __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[1] = CX.w[1] & QUIET_MASK64; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is Infinity? @@ -66,6 +71,8 @@ if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif } + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is 0 otherwise @@ -74,6 +81,8 @@ res.w[1] = sign_x | ((((UINT64) (exponent_x + DECIMAL_EXPONENT_BIAS_128)) >> 1) << 49); res.w[0] = 0; +// restore the rounding mode back if it has been changed +DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } if (sign_x) { @@ -82,6 +91,8 @@ if (sign_x) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS @@ -117,6 +128,8 @@ if (CS.w[0] * CS.w[0] == A10.w[0]) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -288,6 +301,8 @@ get_BID128_fast (&res, 0, #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif +// restore the rounding mode back if it has been changed +DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -302,10 +317,14 @@ BID128_FUNCTION_ARGTYPE1 (bid128d_sqrt, UINT64, x) int_float fx, f64; int exponent_x, bin_expon_cx; int digits, scale, exponent_q; + #ifdef UNCHANGED_BINARY_STATUS_FLAGS fexcept_t binaryflags = 0; #endif + // Set the rounding mode to round-to-nearest (if different) + DFP_INIT_ROUNDMODE; + // unpack arguments, check for NaN or Infinity // unpack arguments, check for NaN or Infinity CX.w[1] = 0; @@ -321,6 +340,8 @@ if ((x & 0x7c00000000000000ull) == 0x7c00000000000000ull) { res.w[0] = (CX.w[0] & 0x0003ffffffffffffull); __mul_64x64_to_128 (res, res.w[0], power10_table_128[18].w[0]); res.w[1] |= ((CX.w[0]) & 0xfc00000000000000ull); + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is Infinity? @@ -332,6 +353,8 @@ if ((x & 0x7800000000000000ull) == 0x7800000000000000ull) { __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif } + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is 0 otherwise @@ -342,6 +365,8 @@ res.w[1] = sign_x | ((((UINT64) (exponent_x + DECIMAL_EXPONENT_BIAS_128)) >> 1) << 49); res.w[0] = 0; +// restore the rounding mode back if it has been changed +DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } if (sign_x) { @@ -350,6 +375,8 @@ if (sign_x) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS @@ -387,6 +414,8 @@ if (CS.w[0] * CS.w[0] == A10.w[0]) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -558,6 +587,8 @@ get_BID128_fast (&res, 0, (exponent_q + DECIMAL_EXPONENT_BIAS_128) >> 1, #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif +// restore the rounding mode back if it has been changed +DFP_RESTORE_ROUNDMODE; BID_RETURN (res); diff --git a/libgcc/config/libbid/bid64_div.c b/libgcc/config/libbid/bid64_div.c index 69758482b89e..5de1a4596cc9 100644 --- a/libgcc/config/libbid/bid64_div.c +++ b/libgcc/config/libbid/bid64_div.c @@ -106,6 +106,9 @@ bid64_div (UINT64 x, y = *py; #endif + // Set the rounding mode to round-to-nearest (if different) + DFP_INIT_ROUNDMODE; + valid_x = unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x); valid_y = unpack_BID64 (&sign_y, &exponent_y, &coefficient_y, y); @@ -123,6 +126,8 @@ bid64_div (UINT64 x, if ((x & SNAN_MASK64) == SNAN_MASK64) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (coefficient_x & QUIET_MASK64); } // x is Infinity? @@ -134,9 +139,13 @@ bid64_div (UINT64 x, #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (NAN_MASK64); } } else { + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; // otherwise return +/-Inf BID_RETURN (((x ^ y) & 0x8000000000000000ull) | INFINITY_MASK64); @@ -149,6 +158,8 @@ bid64_div (UINT64 x, #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (NAN_MASK64); } if (((y & INFINITY_MASK64) != INFINITY_MASK64)) { @@ -163,6 +174,8 @@ bid64_div (UINT64 x, exponent_x = DECIMAL_MAX_EXPON_64; else if (exponent_x < 0) exponent_x = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN ((sign_x ^ sign_y) | (((UINT64) exponent_x) << 53)); } @@ -176,10 +189,14 @@ bid64_div (UINT64 x, if ((y & SNAN_MASK64) == SNAN_MASK64) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (coefficient_y & QUIET_MASK64); } // y is Infinity? if ((y & INFINITY_MASK64) == INFINITY_MASK64) { + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; // return +/-0 BID_RETURN (((x ^ y) & 0x8000000000000000ull)); } @@ -187,6 +204,8 @@ bid64_div (UINT64 x, #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN ((sign_x ^ sign_y) | INFINITY_MASK64); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS @@ -255,6 +274,8 @@ bid64_div (UINT64 x, #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // get decimal digits of Q @@ -424,6 +445,8 @@ bid64_div (UINT64 x, #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -494,6 +517,8 @@ bid64_div (UINT64 x, #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } else { // UF occurs @@ -510,6 +535,8 @@ bid64_div (UINT64 x, #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -532,6 +559,9 @@ unsigned rmode; fexcept_t binaryflags = 0; #endif +// Set the rounding mode to round-to-nearest (if different) +DFP_INIT_ROUNDMODE; + valid_y = unpack_BID128_value (&sign_y, &exponent_y, &CY, y); // unpack arguments, check for NaN or Infinity @@ -545,6 +575,8 @@ if (!unpack_BID64 (&sign_x, &exponent_x, &CX.w[0], (x))) { // test if x is NaN if (((x) & 0x7c00000000000000ull) == 0x7c00000000000000ull) { res = CX.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res & QUIET_MASK64); } // x is Infinity? @@ -557,12 +589,16 @@ if (!unpack_BID64 (&sign_x, &exponent_x, &CX.w[0], (x))) { __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res = 0x7c00000000000000ull; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } if (((y.w[1] & 0x7c00000000000000ull) != 0x7c00000000000000ull)) { // otherwise return +/-Inf res = (((x) ^ y.w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -574,6 +610,8 @@ if (!unpack_BID64 (&sign_x, &exponent_x, &CX.w[0], (x))) { #endif // x=y=0, return NaN res = 0x7c00000000000000ull; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // return 0 @@ -584,6 +622,8 @@ if (!unpack_BID64 (&sign_x, &exponent_x, &CX.w[0], (x))) { else if (exponent_x < 0) exponent_x = 0; res |= (((UINT64) exponent_x) << 53); + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -604,12 +644,16 @@ if (!valid_y) { amount = recip_scale[18]; __shr_128 (Tmp, Qh, amount); res = (CY.w[1] & 0xfc00000000000000ull) | Tmp.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is Infinity? if ((y.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { // return +/-0 res = sign_x ^ sign_y; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is 0, return +/-Inf @@ -618,6 +662,8 @@ if (!valid_y) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS @@ -680,6 +726,8 @@ if (__unsigned_compare_gt_128 (CY, CX)) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -823,6 +871,8 @@ if (!done) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -905,6 +955,8 @@ if (!done) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } else { // UF occurs @@ -921,6 +973,8 @@ if (!done) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -946,6 +1000,9 @@ unsigned rmode; fexcept_t binaryflags = 0; #endif +// Set the rounding mode to round-to-nearest (if different) +DFP_INIT_ROUNDMODE; + valid_y = unpack_BID64 (&sign_y, &exponent_y, &CY.w[0], (y)); // unpack arguments, check for NaN or Infinity @@ -964,6 +1021,8 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { amount = recip_scale[18]; __shr_128 (Tmp, Qh, amount); res = (CX.w[1] & 0xfc00000000000000ull) | Tmp.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is Infinity? @@ -976,12 +1035,16 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res = 0x7c00000000000000ull; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } if (((y & 0x7c00000000000000ull) != 0x7c00000000000000ull)) { // otherwise return +/-Inf res = ((x.w[1] ^ (y)) & 0x8000000000000000ull) | 0x7800000000000000ull; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -993,6 +1056,8 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { #endif // x=y=0, return NaN res = 0x7c00000000000000ull; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // return 0 @@ -1002,6 +1067,8 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res = 0x7c00000000000000ull; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } exponent_x = @@ -1012,6 +1079,8 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { else if (exponent_x < 0) exponent_x = 0; res = (sign_x ^ sign_y) | (((UINT64) exponent_x) << 53); + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -1025,12 +1094,16 @@ if (!valid_y) { if ((y & SNAN_MASK64) == SNAN_MASK64) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (CY.w[0] & QUIET_MASK64); } // y is Infinity? if (((y) & 0x7800000000000000ull) == 0x7800000000000000ull) { // return +/-0 res = sign_x ^ sign_y; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is 0, return +/-Inf @@ -1039,6 +1112,8 @@ if (!valid_y) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS @@ -1103,6 +1178,8 @@ if (__unsigned_compare_gt_128 (CY, CX)) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -1252,6 +1329,8 @@ if (!done) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -1337,6 +1416,8 @@ if (!done) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } else { // UF occurs @@ -1353,6 +1434,8 @@ if (!done) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -1383,6 +1466,9 @@ unsigned rmode; fexcept_t binaryflags = 0; #endif +// Set the rounding mode to round-to-nearest (if different) +DFP_INIT_ROUNDMODE; + valid_y = unpack_BID128_value (&sign_y, &exponent_y, &CY, y); // unpack arguments, check for NaN or Infinity @@ -1401,6 +1487,8 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { amount = recip_scale[18]; __shr_128 (Tmp, Qh, amount); res = (CX.w[1] & 0xfc00000000000000ull) | Tmp.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is Infinity? @@ -1413,6 +1501,8 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res = 0x7c00000000000000ull; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } if (((y.w[1] & 0x7c00000000000000ull) != 0x7c00000000000000ull)) { @@ -1420,6 +1510,8 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { res = ((x.w[1] ^ y. w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -1431,6 +1523,8 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { #endif // x=y=0, return NaN res = 0x7c00000000000000ull; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // return 0 @@ -1441,6 +1535,8 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { else if (exponent_x < 0) exponent_x = 0; res |= (((UINT64) exponent_x) << 53); + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -1460,12 +1556,16 @@ if (!valid_y) { amount = recip_scale[18]; __shr_128 (Tmp, Qh, amount); res = (CY.w[1] & 0xfc00000000000000ull) | Tmp.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is Infinity? if ((y.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { // return +/-0 res = sign_x ^ sign_y; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is 0, return +/-Inf @@ -1474,6 +1574,8 @@ if (!valid_y) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS @@ -1536,6 +1638,8 @@ if (__unsigned_compare_gt_128 (CY, CX)) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -1686,6 +1790,8 @@ if (!done) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -1772,6 +1878,8 @@ if (!done) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } else { // UF occurs @@ -1788,6 +1896,8 @@ if (!done) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } diff --git a/libgcc/config/libbid/bid64_sqrt.c b/libgcc/config/libbid/bid64_sqrt.c index 29f4cf1f819f..dbd06eaa153d 100644 --- a/libgcc/config/libbid/bid64_sqrt.c +++ b/libgcc/config/libbid/bid64_sqrt.c @@ -73,6 +73,7 @@ bid64_sqrt (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM int exponent_x, exponent_q, bin_expon_cx; int digits_x; int scale; + #ifdef UNCHANGED_BINARY_STATUS_FLAGS fexcept_t binaryflags = 0; #endif @@ -84,6 +85,9 @@ bid64_sqrt (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM x = *px; #endif + // Set the rounding mode to round-to-nearest (if different) + DFP_INIT_ROUNDMODE; + // unpack arguments, check for NaN or Infinity if (!unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x)) { // x is Inf. or NaN or 0 @@ -100,11 +104,15 @@ bid64_sqrt (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM if ((x & SNAN_MASK64) == SNAN_MASK64) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res & QUIET_MASK64); } // x is 0 exponent_x = (exponent_x + DECIMAL_EXPONENT_BIAS) >> 1; res = sign_x | (((UINT64) exponent_x) << 53); + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x<0? @@ -113,6 +121,8 @@ bid64_sqrt (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS @@ -141,6 +151,8 @@ bid64_sqrt (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // if exponent is odd, scale coefficient by 10 @@ -206,6 +218,8 @@ bid64_sqrt (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -224,6 +238,9 @@ int digits, scale, exponent_q = 0, exact = 1, amount, extra_digits; fexcept_t binaryflags = 0; #endif +// Set the rounding mode to round-to-nearest (if different) +DFP_INIT_ROUNDMODE; + // unpack arguments, check for NaN or Infinity if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { res = CX.w[1]; @@ -240,6 +257,8 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { amount = recip_scale[18]; __shr_128 (Tmp, Qh, amount); res = (CX.w[1] & 0xfc00000000000000ull) | Tmp.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is Infinity? @@ -251,6 +270,8 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif } + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is 0 otherwise @@ -264,6 +285,8 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { exponent_x = DECIMAL_MAX_EXPON_64; //res= sign_x | (((UINT64)exponent_x)<<53); res = get_BID64 (sign_x, exponent_x, 0, rnd_mode, pfpsf); + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } if (sign_x) { @@ -271,6 +294,8 @@ if (sign_x) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS @@ -312,6 +337,8 @@ if (CS.w[0] < 10000000000000000ull) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -546,6 +573,8 @@ res = get_BID64 (0, exponent_q, CS.w[0], rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif +// restore the rounding mode back if it has been changed +DFP_RESTORE_ROUNDMODE; BID_RETURN (res); diff --git a/libgcc/config/libbid/bid_conf.h b/libgcc/config/libbid/bid_conf.h index 0f39d58d3061..56f2b348ec03 100644 --- a/libgcc/config/libbid/bid_conf.h +++ b/libgcc/config/libbid/bid_conf.h @@ -559,6 +559,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #endif // #define HPUX_OS +#include + // If DECIMAL_CALL_BY_REFERENCE is defined then numerical arguments and results // are passed by reference otherwise they are passed by value (except that // a pointer is always passed to the status flags) diff --git a/libgcc/config/libbid/dfp-machine.h b/libgcc/config/libbid/dfp-machine.h new file mode 100644 index 000000000000..ae961157abba --- /dev/null +++ b/libgcc/config/libbid/dfp-machine.h @@ -0,0 +1,34 @@ +/* Rounding mode macros for DFP libbid. Dummy version. + Copyright (C) 2025 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + GCC is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + Under Section 7 of GPL version 3, you are granted additional + permissions described in the GCC Runtime Library Exception, version + 3.1, as published by the Free Software Foundation. + + You should have received a copy of the GNU General Public License and + a copy of the GCC Runtime Library Exception along with this program; + see the files COPYING3 and COPYING.RUNTIME respectively. If not, see + . */ + +#ifndef _DFP_MACHINE_H +#define _DFP_MACHINE_H + +/* Initialize the rounding mode to round-to-nearest if needed. */ +#define DFP_INIT_ROUNDMODE + +/* Restore the rounding mode to round-to-nearest if changed. */ +#define DFP_RESTORE_ROUNDMODE + +#endif /* _DFP_MACHINE_H */ From 84b4687eb445555c22db5ee5a71cb665ec7110d7 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Tue, 7 Oct 2025 23:04:54 +0000 Subject: [PATCH 134/216] c: Implement C2y handling of incomplete tentative definitions [PR26581] Before C2y, a tentative definition (file-scope, not extern, no initializer) with internal linkage and incomplete type was undefined behavior ("shall" outside Constraints violated). In C2y, this has changed to a constraint violation if the type has not been completed by the end of the translation unit, and is valid if the type has been completed by the end of the translation unit. This change originates from N3347 but the wording accepted into C2y was that from reflector message 26758. In GCC, the case of incomplete array types was a hard error with -pedantic, rather than a pedwarn, contrary to how -pedantic is supposed to behave; bug 26581 requested a change to allow this case with -pedantic (i.e. the change made in C2y). For incomplete structs and unions, GCC only diagnoses them if the type remains incomplete at the end of the translation unit; bug 88727 (*not* fixed here) requests the case where the type gets completed should also be diagnosed as a quality of implementation matter (and that bug is still applicable for pre-C2y langauge versions and -Wc23-c2y-compat). Change the handling of arrays following C2y; the previous error becomes a pedwarn_c23 while there is a new error at the end of the translation unit if the type remains incomplete there in C2y mode. There is an ambiguity in the wording in C2y for the case where the type gets completed only in an inner scope; I've raised that in reflector message 34118. Bootstrapped with no regressions for x86_64-pc-linux-gnu. PR c/26581 gcc/c/ * c-decl.cc (c_finish_incomplete_decl): Give error for tentative definition of incomplete array for C2y with internal linkage. (finish_decl): Do not set DO_DEFAULT based on -pedantic. Use pedwarn_c23 for missing array sizes for internal linkage. gcc/testsuite/ * gcc.dg/c23-incomplete-2.c, gcc.dg/c23-incomplete-3.c, gcc.dg/c23-incomplete-4.c, gcc.dg/c2y-incomplete-4.c, gcc.dg/c2y-incomplete-5.c: New tests. * gcc.dg/c23-thread-local-2.c, gcc.dg/c2y-incomplete-1.c: Update expected errors. --- gcc/c/c-decl.cc | 17 ++++++++----- gcc/testsuite/gcc.dg/c23-incomplete-2.c | 31 +++++++++++++++++++++++ gcc/testsuite/gcc.dg/c23-incomplete-3.c | 31 +++++++++++++++++++++++ gcc/testsuite/gcc.dg/c23-incomplete-4.c | 30 ++++++++++++++++++++++ gcc/testsuite/gcc.dg/c23-thread-local-2.c | 1 + gcc/testsuite/gcc.dg/c2y-incomplete-1.c | 2 +- gcc/testsuite/gcc.dg/c2y-incomplete-4.c | 28 ++++++++++++++++++++ gcc/testsuite/gcc.dg/c2y-incomplete-5.c | 29 +++++++++++++++++++++ 8 files changed, 161 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/c23-incomplete-2.c create mode 100644 gcc/testsuite/gcc.dg/c23-incomplete-3.c create mode 100644 gcc/testsuite/gcc.dg/c23-incomplete-4.c create mode 100644 gcc/testsuite/gcc.dg/c2y-incomplete-4.c create mode 100644 gcc/testsuite/gcc.dg/c2y-incomplete-5.c diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc index 632bbf057a33..d0dc5eeda39b 100644 --- a/gcc/c/c-decl.cc +++ b/gcc/c/c-decl.cc @@ -908,8 +908,12 @@ c_finish_incomplete_decl (tree decl) && !DECL_EXTERNAL (decl) && TYPE_DOMAIN (type) == NULL_TREE) { - warning_at (DECL_SOURCE_LOCATION (decl), - 0, "array %q+D assumed to have one element", decl); + if (flag_isoc2y && !TREE_PUBLIC (decl)) + error_at (DECL_SOURCE_LOCATION (decl), + "array size missing in %q+D", decl); + else + warning_at (DECL_SOURCE_LOCATION (decl), + 0, "array %q+D assumed to have one element", decl); complete_array_type (&TREE_TYPE (decl), NULL_TREE, true); @@ -5984,11 +5988,7 @@ finish_decl (tree decl, location_t init_loc, tree init, && !(TREE_PUBLIC (decl) && current_scope != file_scope)) { bool do_default - = (TREE_STATIC (decl) - /* Even if pedantic, an external linkage array - may have incomplete type at first. */ - ? pedantic && !TREE_PUBLIC (decl) - : !DECL_EXTERNAL (decl)); + = !TREE_STATIC (decl) && !DECL_EXTERNAL (decl); int failure = complete_array_type (&TREE_TYPE (decl), DECL_INITIAL (decl), do_default); @@ -6005,6 +6005,9 @@ finish_decl (tree decl, location_t init_loc, tree init, case 2: if (do_default) error ("array size missing in %q+D", decl); + else if (!TREE_PUBLIC (decl)) + pedwarn_c23 (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic, + "array size missing in %q+D", decl); break; case 3: diff --git a/gcc/testsuite/gcc.dg/c23-incomplete-2.c b/gcc/testsuite/gcc.dg/c23-incomplete-2.c new file mode 100644 index 000000000000..3b435a14567e --- /dev/null +++ b/gcc/testsuite/gcc.dg/c23-incomplete-2.c @@ -0,0 +1,31 @@ +/* Test tentative definitions with incomplete type: OK in C2y with internal + linkage if completed by the end of the translation unit, but not allowed in + C23. Note that incomplete structs and unions are not diagnosed for C23 when + completed by the end of the translation unit (bug 88727). */ +/* { dg-do compile } */ +/* { dg-options "-std=c23 -pedantic-errors" } */ + +struct s1; +struct s2; +union u1; +union u2; + +struct s1 v1; +struct s2 v2; /* { dg-error "storage size" } */ +int v3[]; +int v4[]; /* { dg-warning "assumed to have one element" } */ +union u1 v5; +union u2 v6; /* { dg-error "storage size" } */ + +static struct s1 sv1; +static struct s2 sv2; /* { dg-error "storage size" } */ +static int sv3[]; /* { dg-error "array size missing" } */ +static int sv4[]; /* { dg-error "array size missing" } */ +/* { dg-warning "assumed to have one element" "one element" { target *-*-* } .-1 } */ +static union u1 sv5; +static union u2 sv6; /* { dg-error "storage size" } */ + +struct s1 { int x; }; +union u1 { int y; }; +extern int v3[1]; +extern int sv3[1]; diff --git a/gcc/testsuite/gcc.dg/c23-incomplete-3.c b/gcc/testsuite/gcc.dg/c23-incomplete-3.c new file mode 100644 index 000000000000..ebb4cf93a833 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c23-incomplete-3.c @@ -0,0 +1,31 @@ +/* Test tentative definitions with incomplete type: OK in C2y with internal + linkage if completed by the end of the translation unit, but not allowed in + C23. Note that incomplete structs and unions are not diagnosed for C23 when + completed by the end of the translation unit (bug 88727). */ +/* { dg-do compile } */ +/* { dg-options "-std=c23 -pedantic" } */ + +struct s1; +struct s2; +union u1; +union u2; + +struct s1 v1; +struct s2 v2; /* { dg-error "storage size" } */ +int v3[]; +int v4[]; /* { dg-warning "assumed to have one element" } */ +union u1 v5; +union u2 v6; /* { dg-error "storage size" } */ + +static struct s1 sv1; +static struct s2 sv2; /* { dg-error "storage size" } */ +static int sv3[]; /* { dg-warning "array size missing" } */ +static int sv4[]; /* { dg-warning "array size missing" } */ +/* { dg-warning "assumed to have one element" "one element" { target *-*-* } .-1 } */ +static union u1 sv5; +static union u2 sv6; /* { dg-error "storage size" } */ + +struct s1 { int x; }; +union u1 { int y; }; +extern int v3[1]; +extern int sv3[1]; diff --git a/gcc/testsuite/gcc.dg/c23-incomplete-4.c b/gcc/testsuite/gcc.dg/c23-incomplete-4.c new file mode 100644 index 000000000000..6a8b6cc42305 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c23-incomplete-4.c @@ -0,0 +1,30 @@ +/* Test tentative definitions with incomplete type: OK in C2y with internal + linkage if completed by the end of the translation unit, but not allowed in + C23. Note that incomplete structs and unions are not diagnosed for C23 when + completed by the end of the translation unit (bug 88727). */ +/* { dg-do compile } */ +/* { dg-options "-std=c23 -pedantic-errors -Wno-c23-c2y-compat" } */ + +struct s1; +struct s2; +union u1; +union u2; + +struct s1 v1; +struct s2 v2; /* { dg-error "storage size" } */ +int v3[]; +int v4[]; /* { dg-warning "assumed to have one element" } */ +union u1 v5; +union u2 v6; /* { dg-error "storage size" } */ + +static struct s1 sv1; +static struct s2 sv2; /* { dg-error "storage size" } */ +static int sv3[]; +static int sv4[]; /* { dg-warning "assumed to have one element" } */ +static union u1 sv5; +static union u2 sv6; /* { dg-error "storage size" } */ + +struct s1 { int x; }; +union u1 { int y; }; +extern int v3[1]; +extern int sv3[1]; diff --git a/gcc/testsuite/gcc.dg/c23-thread-local-2.c b/gcc/testsuite/gcc.dg/c23-thread-local-2.c index 1d063f05e424..8fb34af5eeb7 100644 --- a/gcc/testsuite/gcc.dg/c23-thread-local-2.c +++ b/gcc/testsuite/gcc.dg/c23-thread-local-2.c @@ -25,6 +25,7 @@ static thread_local int f; /* { dg-error "redefinition" } */ rather than defaulting to size 1. */ thread_local int g[]; /* { dg-error "storage size" } */ static thread_local int h[]; /* { dg-error "array size missing" } */ +/* { dg-error "storage size" "storage size" { target *-*-* } .-1 } */ extern thread_local int i[]; thread_local int j[] = { 0 }; diff --git a/gcc/testsuite/gcc.dg/c2y-incomplete-1.c b/gcc/testsuite/gcc.dg/c2y-incomplete-1.c index 2d7b1812ac2e..4c3133d934df 100644 --- a/gcc/testsuite/gcc.dg/c2y-incomplete-1.c +++ b/gcc/testsuite/gcc.dg/c2y-incomplete-1.c @@ -10,7 +10,7 @@ f () struct s1 a; /* { dg-error "storage size" } */ int b[]; /* { dg-error "array size missing" } */ static struct s1 c; /* { dg-error "storage size" } */ - static int d[]; /* { dg-error "array size missing" } */ + static int d[]; /* { dg-error "storage size" } */ struct s2; struct s2 e; /* { dg-error "storage size" } */ static struct s2 g; /* { dg-error "storage size" } */ diff --git a/gcc/testsuite/gcc.dg/c2y-incomplete-4.c b/gcc/testsuite/gcc.dg/c2y-incomplete-4.c new file mode 100644 index 000000000000..a2708965ca50 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-incomplete-4.c @@ -0,0 +1,28 @@ +/* Test tentative definitions with incomplete type: OK in C2y with internal + linkage if completed by the end of the translation unit. */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +struct s1; +struct s2; +union u1; +union u2; + +struct s1 v1; +struct s2 v2; /* { dg-error "storage size" } */ +int v3[]; +int v4[]; /* { dg-warning "assumed to have one element" } */ +union u1 v5; +union u2 v6; /* { dg-error "storage size" } */ + +static struct s1 sv1; +static struct s2 sv2; /* { dg-error "storage size" } */ +static int sv3[]; +static int sv4[]; /* { dg-error "array size missing" } */ +static union u1 sv5; +static union u2 sv6; /* { dg-error "storage size" } */ + +struct s1 { int x; }; +union u1 { int y; }; +extern int v3[1]; +extern int sv3[1]; diff --git a/gcc/testsuite/gcc.dg/c2y-incomplete-5.c b/gcc/testsuite/gcc.dg/c2y-incomplete-5.c new file mode 100644 index 000000000000..4051cc01c21b --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-incomplete-5.c @@ -0,0 +1,29 @@ +/* Test tentative definitions with incomplete type: OK in C2y with internal + linkage if completed by the end of the translation unit. */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors -Wc23-c2y-compat" } */ + +struct s1; +struct s2; +union u1; +union u2; + +struct s1 v1; +struct s2 v2; /* { dg-error "storage size" } */ +int v3[]; +int v4[]; /* { dg-warning "assumed to have one element" } */ +union u1 v5; +union u2 v6; /* { dg-error "storage size" } */ + +static struct s1 sv1; +static struct s2 sv2; /* { dg-error "storage size" } */ +static int sv3[]; /* { dg-warning "array size missing" } */ +static int sv4[]; /* { dg-error "array size missing" } */ +/* { dg-warning "array size missing" "warning" { target *-*-* } .-1 } */ +static union u1 sv5; +static union u2 sv6; /* { dg-error "storage size" } */ + +struct s1 { int x; }; +union u1 { int y; }; +extern int v3[1]; +extern int sv3[1]; From 491cae7d301c6e798b2cd90fffe090e1c895f0e4 Mon Sep 17 00:00:00 2001 From: GCC Administrator Date: Wed, 8 Oct 2025 00:20:55 +0000 Subject: [PATCH 135/216] Daily bump. --- gcc/ChangeLog | 50 ++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/ada/ChangeLog | 8 ++++ gcc/c/ChangeLog | 8 ++++ gcc/cp/ChangeLog | 8 ++++ gcc/fortran/ChangeLog | 6 +++ gcc/jit/ChangeLog | 5 +++ gcc/testsuite/ChangeLog | 69 ++++++++++++++++++++++++++++++++++ libgcc/ChangeLog | 8 ++++ libgcc/config/libbid/ChangeLog | 12 ++++++ libgm2/ChangeLog | 4 ++ libstdc++-v3/ChangeLog | 34 +++++++++++++++++ 12 files changed, 213 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 57513ed1536f..0dec12e27852 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,53 @@ +2025-10-07 Alfie Richards + + * doc/tm.texi: Regenerate. + * doc/tm.texi.in: Add documentation for TARGET_HAS_FMV_TARGET_ATTRIBUTE. + +2025-10-07 Georg-Johann Lay + + PR target/122187 + * config/avr/avr.cc (avr_out_extr, avr_out_extr_not): + Make a local copy of the passed rtx[] operands. + +2025-10-07 Jonathan Wakely + + * config/i386/i386-features.cc + (general_scalar_chain::vector_const_cost): Fix spelling in + comment. + * ipa-prop.h (enum jump_func_type): Likewise. + * tree-vectorizer.cc (try_vectorize_loop_1): Likewise. + +2025-10-07 Robin Dapp + + PR target/121845 + * config/riscv/riscv-v.cc (shuffle_series_patterns): + Modulo indices for VLA and punt when wrapping for VLS. + +2025-10-07 Raphael Moreira Zinsly + + PR target/122124 + * config/riscv/riscv-v.cc (shuffle_slide_patterns): Check if + the second pivot is in OP1 and improve comments. + +2025-10-07 Andrew Pinski + + PR tree-optimization/121921 + * match.pd (`-(a ptrdiff b)`): Extend for a nop_convert + between the neg and ptrdiff. + +2025-10-07 Andrew Pinski + + PR tree-optimization/122083 + * tree-ssa-phiopt.cc (single_trailing_store_in_bb): Rename to ... + (trailing_store_in_bb): This and take new argument to check for + only store. + (cond_if_else_store_replacement_limited): Update to use + trailing_store_in_bb. + (cond_if_else_store_replacement): Loop until + cond_if_else_store_replacement_limited returns false. + (pass_phiopt::execute): Instead of calling cond_if_else_store_replacement_limited + once, also loop on it. + 2025-10-06 Andrew Pinski PR tree-optimization/122155 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 6a36bef6ea5e..b95af03f6e9b 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20251007 +20251008 diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 60703af11741..08d714855aba 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,11 @@ +2025-10-07 Eric Botcazou + + Revert: + 2025-10-05 Eric Botcazou + + PR ada/118343 + * Makefile.rtl (LLVM_BUILD): Delete. + 2025-10-06 Marc Poulhiès Éric Botcazou diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 1d25e9bb6c51..5b6a56e3c421 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,11 @@ +2025-10-07 Joseph Myers + + PR c/26581 + * c-decl.cc (c_finish_incomplete_decl): Give error for tentative + definition of incomplete array for C2y with internal linkage. + (finish_decl): Do not set DO_DEFAULT based on -pedantic. Use + pedwarn_c23 for missing array sizes for internal linkage. + 2025-10-02 Alfie Richards * c-decl.cc (maybe_mark_function_versioned): Add diagnostic. diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 2b4812d975f2..26434756b336 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +2025-10-07 Jason Merrill + + * init.cc (build_new_1): Clobber a constant-bound array as a whole. + +2025-10-07 Jonathan Wakely + + * module.cc (trees_out::lang_vals): Fix spelling in comment. + 2025-10-05 Nathaniel Shead PR c++/122053 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index f9b4335bfecb..b57bfb9d513a 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2025-10-07 Paul Thomas + + PR fortran/102901 + * trans-array.cc (structure_alloc_comps): Do not use + gfc_check_pdt_dummy with pointer or allocatable components. + 2025-10-04 Harald Anlauf PR fortran/107968 diff --git a/gcc/jit/ChangeLog b/gcc/jit/ChangeLog index fc42e5af841a..7e31500bae0b 100644 --- a/gcc/jit/ChangeLog +++ b/gcc/jit/ChangeLog @@ -1,3 +1,8 @@ +2025-10-07 Jonathan Wakely + + * docs/_build/texinfo/libgccjit.texi: Fix spelling. + * docs/internals/index.rst: Likewise. + 2025-08-13 David Malcolm PR jit/121516 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6047199c9482..ff10abf7b227 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,72 @@ +2025-10-07 Joseph Myers + + PR c/26581 + * gcc.dg/c23-incomplete-2.c, gcc.dg/c23-incomplete-3.c, + gcc.dg/c23-incomplete-4.c, gcc.dg/c2y-incomplete-4.c, + gcc.dg/c2y-incomplete-5.c: New tests. + * gcc.dg/c23-thread-local-2.c, gcc.dg/c2y-incomplete-1.c: Update + expected errors. + +2025-10-07 H.J. Lu + + PR target/120691 + * gcc.target/i386/pr120691.c: New test. + +2025-10-07 Jason Merrill + + * g++.dg/warn/Warray-bounds-20.C: Remove xfails, add diags. + +2025-10-07 Georg-Johann Lay + + PR target/122187 + * gcc.target/avr/torture/pr122187.c: New test. + +2025-10-07 Jonathan Wakely + + * gfortran.dg/dynamic_dispatch_9.f03: Fix spelling in comment. + * gfortran.dg/use_only_3.inc: Likewise + +2025-10-07 Robin Dapp + + PR target/121845 + * gcc.target/riscv/rvv/autovec/pr121845.c: New test. + +2025-10-07 Raphael Moreira Zinsly + + PR target/122124 + * gcc.target/riscv/rvv/autovec/pr122124.c: New test. + +2025-10-07 Paul Thomas + + PR fortran/102901 + * gfortran.dg/pdt_56.f03: Copy of pdt_13.f03 compiled with + -fcheck=all. + +2025-10-07 Andrew Pinski + + PR tree-optimization/121921 + * gcc.dg/pr121921-1.c: New test. + +2025-10-07 Andrew Pinski + + PR tree-optimization/122083 + * gcc.dg/tree-ssa/ssa-pre-19.c: Disable phiopt and cselim. + * g++.dg/opt/pr122083-1.C: New test. + * gcc.dg/tree-ssa/cselim-1.c: New test. + * gcc.dg/tree-ssa/cselim-2.c: New test. + +2025-10-07 H.J. Lu + + PR middle-end/122122 + * gcc.target/i386/memcpy-pr120683-2.c: Swap %edx/%rdx with + %eax/%rax after + * gcc.target/i386/memcpy-pr120683-3.c: Likewise. + * gcc.target/i386/memcpy-pr120683-4.c: Likewise. + * gcc.target/i386/memcpy-pr120683-5.c: Likewise. + * gcc.target/i386/memcpy-pr120683-6.c: Likewise. + * gcc.target/i386/memcpy-pr120683-7.c: Likewise. + * gcc.target/i386/pr111657-1.c: Likewise. + 2025-10-06 Andrew Pinski PR tree-optimization/122155 diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index f9059af52fb7..e539f31be44d 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,11 @@ +2025-10-07 H.J. Lu + + PR target/120691 + * Makefile.in (DECNUMINC): Add -I$(srcdir)/config/$(cpu_type). + * config/i386/dfp-machine.h: New file. + * config/i386/32/dfp-machine.h: Likewise. + * config/i386/64/dfp-machine.h: Likewise. + 2025-09-30 Andre Vieira * config/t-softfp: Don't use softfp_wrap for bitint functions. diff --git a/libgcc/config/libbid/ChangeLog b/libgcc/config/libbid/ChangeLog index e6727365456e..031c7a8bb38b 100644 --- a/libgcc/config/libbid/ChangeLog +++ b/libgcc/config/libbid/ChangeLog @@ -1,3 +1,15 @@ +2025-10-07 H.J. Lu + + PR target/120691 + * bid128_div.c: Run DFP_INIT_ROUNDMODE at function entrace and + DFP_RESTORE_ROUNDMODE at function exit. + * bid128_rem.c: Likewise. + * bid128_sqrt.c: Likewise. + * bid64_div.c (bid64_div): Likewise. + * bid64_sqrt.c (bid64_sqrt): Likewise. + * bid_conf.h: Include . + * dfp-machine.h: New file. + 2025-08-30 liuhongt Revert: diff --git a/libgm2/ChangeLog b/libgm2/ChangeLog index 509c02e76164..5e3460ff7c6e 100644 --- a/libgm2/ChangeLog +++ b/libgm2/ChangeLog @@ -1,3 +1,7 @@ +2025-10-07 Jonathan Wakely + + * configure.host: Fix spelling in comment. + 2025-10-05 Sam James * Makefile.in: Regenerate. diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 15fd68b01141..e8f244b9364e 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,37 @@ +2025-10-07 Jonathan Wakely + + * configure.host: Fix spelling in comment. + +2025-10-07 Jonathan Wakely + + * include/ext/ropeimpl.h (rope::_S_fetch): Initialize variable. + +2025-10-07 Jonathan Wakely + + * include/bits/sat_arith.h (mul_sat): Add parentheses around + operands. + +2025-10-07 Jonathan Wakely + + * testsuite/std/time/parse/parse.cc: Initialize variable. + +2025-10-07 Jonathan Wakely + + * testsuite/20_util/shared_ptr/cons/move.cc: Add comment and + dg-prune-output for -Wpessimizing-move warning. + * testsuite/experimental/memory/shared_ptr/cons/move_ctor.cc: + Likewise. + +2025-10-07 Jonathan Wakely + + * include/bits/random.h (philox_engine(result_type)): Reorder + ctor-initializer-list to match declaration order. + +2025-10-07 Jonathan Wakely + + * include/bits/basic_string.h (basic_string::_M_check): Cast + size_type arguments to size_t. + 2025-10-05 Sam James * Makefile.in: Regenerate. From 2a54db2d8baa1de9d552dfd561849f59737c062f Mon Sep 17 00:00:00 2001 From: Antoni Boucher Date: Fri, 21 Mar 2025 13:13:41 -0400 Subject: [PATCH 136/216] libgccjit: Add ability to get CPU features gcc/ChangeLog: PR jit/112466 * Makefile.in (tm_jit_file_list, tm_jit_include_list, TM_JIT_H, JIT_TARGET_DEF, JIT_TARGET_H, JIT_TARGET_OBJS): New variables. (tm_jit.h, cs-tm_jit.h, jit/jit-target-hooks-def.h, s-jit-target-hooks-def-h, default-jit.o): New rules. (s-tm-texi): Also check timestamp on jit-target.def. (generated_files): Add TM_JIT_H and jit/jit-target-hooks-def.h. (build/genhooks.o): Also depend on JIT_TARGET_DEF. * config.gcc (tm_jit_file, jit_target_objs, target_has_targetjitm): New variables. * config/i386/t-i386 (i386-jit.o): New rule. * configure: Regenerate. * configure.ac (tm_jit_file_list, tm_jit_include_list, jit_target_objs): Add substitutes. * doc/tm.texi: Regenerate. * doc/tm.texi.in (targetjitm): Document. (target_has_targetjitm): Document. * genhooks.cc: Include jit/jit-target.def. * config/default-jit.cc: New file. * config/i386/i386-jit.cc: New file. * config/i386/i386-jit.h: New file. gcc/jit/ChangeLog: PR jit/112466 * Make-lang.in (JIT_OBJS): New variable. * jit-playback.cc (replay): Include jit-target.h and initialize target. * jit-playback.h (class populate_target_info): New class. * jit-recording.cc (recording::context::populate_target_info): New method. * jit-recording.h (recording::context::populate_target_info): New method. (recording::context::m_populated_target_info): New field. * libgccjit.cc: Include jit-target.h. (struct gcc_jit_target_info): New struct. (gcc_jit_context_get_target_info, gcc_jit_target_info_release, gcc_jit_target_info_cpu_supports, gcc_jit_target_info_arch, gcc_jit_target_info_supports_target_dependent_type): New functions. * libgccjit.h (gcc_jit_context_get_target_info, gcc_jit_target_info_release, gcc_jit_target_info_cpu_supports, gcc_jit_target_info_arch, gcc_jit_target_info_supports_target_dependent_type): New functions. * libgccjit.map (LIBGCCJIT_ABI_35): New ABI tag. * docs/topics/compilation.rst: Add documentation for the functions gcc_jit_context_get_target_info, gcc_jit_target_info_release, gcc_jit_target_info_cpu_supports, gcc_jit_target_info_arch, gcc_jit_target_info_supports_target_dependent_type. * docs/topics/compatibility.rst (LIBGCCJIT_ABI_35): New ABI tag. * jit-target-def.h: New file. * jit-target.cc: New file. * jit-target.def: New file. * jit-target.h: New file. gcc/testsuite/ChangeLog: PR jit/112466 * jit.dg/all-non-failing-tests.h: Mention test-target-info.c. * jit.dg/test-target-info.c: New test. * jit.dg/test-error-target-info.c: New test. --- gcc/Makefile.in | 38 +++++++- gcc/config.gcc | 20 ++++ gcc/config/default-jit.cc | 30 ++++++ gcc/config/i386/i386-jit.cc | 71 ++++++++++++++ gcc/config/i386/i386-jit.h | 22 +++++ gcc/config/i386/t-i386 | 4 + gcc/configure | 14 +++ gcc/configure.ac | 14 +++ gcc/doc/tm.texi | 19 ++++ gcc/doc/tm.texi.in | 14 +++ gcc/genhooks.cc | 1 + gcc/jit/Make-lang.in | 8 +- gcc/jit/docs/topics/compatibility.rst | 13 +++ gcc/jit/docs/topics/compilation.rst | 56 +++++++++++ gcc/jit/jit-playback.cc | 2 + gcc/jit/jit-playback.h | 32 ++++++- gcc/jit/jit-recording.cc | 36 +++++++ gcc/jit/jit-recording.h | 15 +++ gcc/jit/jit-target-def.h | 20 ++++ gcc/jit/jit-target.cc | 96 +++++++++++++++++++ gcc/jit/jit-target.def | 42 ++++++++ gcc/jit/jit-target.h | 75 +++++++++++++++ gcc/jit/libgccjit.cc | 51 ++++++++++ gcc/jit/libgccjit.h | 57 +++++++++++ gcc/jit/libgccjit.map | 9 ++ gcc/testsuite/jit.dg/all-non-failing-tests.h | 3 + gcc/testsuite/jit.dg/test-error-target-info.c | 60 ++++++++++++ gcc/testsuite/jit.dg/test-target-info.c | 61 ++++++++++++ 28 files changed, 875 insertions(+), 8 deletions(-) create mode 100644 gcc/config/default-jit.cc create mode 100644 gcc/config/i386/i386-jit.cc create mode 100644 gcc/config/i386/i386-jit.h create mode 100644 gcc/jit/jit-target-def.h create mode 100644 gcc/jit/jit-target.cc create mode 100644 gcc/jit/jit-target.def create mode 100644 gcc/jit/jit-target.h create mode 100644 gcc/testsuite/jit.dg/test-error-target-info.c create mode 100644 gcc/testsuite/jit.dg/test-target-info.c diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 6a9d6204c869..e36e04a62eab 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -613,6 +613,8 @@ tm_d_file_list=@tm_d_file_list@ tm_d_include_list=@tm_d_include_list@ tm_rust_file_list=@tm_rust_file_list@ tm_rust_include_list=@tm_rust_include_list@ +tm_jit_file_list=@tm_jit_file_list@ +tm_jit_include_list=@tm_jit_include_list@ build_xm_file_list=@build_xm_file_list@ build_xm_include_list=@build_xm_include_list@ build_xm_defines=@build_xm_defines@ @@ -917,6 +919,7 @@ TCONFIG_H = tconfig.h $(xm_file_list) TM_P_H = tm_p.h $(tm_p_file_list) $(TREE_H) TM_D_H = tm_d.h $(tm_d_file_list) TM_RUST_H = tm_rust.h $(tm_rust_file_list) +TM_JIT_H = tm_jit.h $(tm_jit_file_list) GTM_H = tm.h $(tm_file_list) insn-constants.h TM_H = $(GTM_H) insn-flags.h $(OPTIONS_H) @@ -977,11 +980,13 @@ C_TARGET_DEF = c-family/c-target.def target-hooks-macros.h COMMON_TARGET_DEF = common/common-target.def target-hooks-macros.h D_TARGET_DEF = d/d-target.def target-hooks-macros.h RUST_TARGET_DEF = rust/rust-target.def target-hooks-macros.h +JIT_TARGET_DEF = jit/jit-target.def target-hooks-macros.h TARGET_H = $(TM_H) target.h $(TARGET_DEF) insn-modes.h insn-codes.h C_TARGET_H = c-family/c-target.h $(C_TARGET_DEF) COMMON_TARGET_H = common/common-target.h $(INPUT_H) $(COMMON_TARGET_DEF) D_TARGET_H = d/d-target.h $(D_TARGET_DEF) RUST_TARGET_H = rust/rust-target.h $(RUST_TARGET_DEF) +JIT_TARGET_H = jit/jit-target.h $(JIT_TARGET_DEF) MACHMODE_H = machmode.h mode-classes.def HOOKS_H = hooks.h HOSTHOOKS_DEF_H = hosthooks-def.h $(HOOKS_H) @@ -1297,6 +1302,9 @@ CXX_TARGET_OBJS=@cxx_target_objs@ # Target specific, D specific object file D_TARGET_OBJS=@d_target_objs@ +# Target specific, JIT specific object file +JIT_TARGET_OBJS=@jit_target_objs@ + # Target specific, Fortran specific object file FORTRAN_TARGET_OBJS=@fortran_target_objs@ @@ -2105,6 +2113,7 @@ tm.h: cs-tm.h ; @true tm_p.h: cs-tm_p.h ; @true tm_d.h: cs-tm_d.h ; @true tm_rust.h: cs-tm_rust.h ; @true +tm_jit.h: cs-tm_jit.h ; @true cs-config.h: Makefile TARGET_CPU_DEFAULT="" \ @@ -2144,6 +2153,11 @@ cs-tm_rust.h: Makefile HEADERS="$(tm_rust_include_list)" DEFINES="" \ $(SHELL) $(srcdir)/mkconfig.sh tm_rust.h +cs-tm_jit.h: Makefile + TARGET_CPU_DEFAULT="" \ + HEADERS="$(tm_jit_include_list)" DEFINES="" \ + $(SHELL) $(srcdir)/mkconfig.sh tm_jit.h + # Don't automatically run autoconf, since configure.ac might be accidentally # newer than configure. Also, this writes into the source directory which # might be on a read-only file system. If configured for maintainer mode @@ -2611,6 +2625,12 @@ default-d.o: config/default-d.cc $(COMPILE) $< $(POSTCOMPILE) +# Files used by the JIT language front end. + +default-jit.o: config/default-jit.cc + $(COMPILE) $< + $(POSTCOMPILE) + # Files used by the Rust language front end. default-rust.o: config/default-rust.cc @@ -2963,6 +2983,15 @@ s-rust-target-hooks-def-h: build/genhooks$(build_exeext) rust/rust-target-hooks-def.h $(STAMP) s-rust-target-hooks-def-h +jit/jit-target-hooks-def.h: s-jit-target-hooks-def-h; @true + +s-jit-target-hooks-def-h: build/genhooks$(build_exeext) + $(RUN_GEN) build/genhooks$(build_exeext) "JIT Target Hook" \ + > tmp-jit-target-hooks-def.h + $(SHELL) $(srcdir)/../move-if-change tmp-jit-target-hooks-def.h \ + jit/jit-target-hooks-def.h + $(STAMP) s-jit-target-hooks-def-h + # check if someone mistakenly only changed tm.texi. # We use a different pathname here to avoid a circular dependency. s-tm-texi: $(srcdir)/doc/../doc/tm.texi @@ -3160,8 +3189,8 @@ s-gtype: $(EXTRA_GTYPE_DEPS) build/gengtype$(build_exeext) \ -r gtype.state $(STAMP) s-gtype -generated_files = config.h tm.h $(TM_P_H) $(TM_D_H) $(TM_H) multilib.h \ - $(simple_generated_h) specs.h \ +generated_files = config.h tm.h $(TM_P_H) $(TM_D_H) $(TM_JIT_H) $(TM_H) \ + multilib.h $(simple_generated_h) specs.h \ tree-check.h genrtl.h insn-modes.h insn-modes-inline.h \ tm-preds.h tm-constrs.h \ $(ALL_GTFILES_H) gtype-desc.cc gtype-desc.h version.h \ @@ -3172,6 +3201,7 @@ generated_files = config.h tm.h $(TM_P_H) $(TM_D_H) $(TM_H) multilib.h \ c-family/c-target-hooks-def.h d/d-target-hooks-def.h \ $(TM_RUST_H) rust/rust-target-hooks-def.h \ case-cfn-macros.h \ + jit/jit-target-hooks-def.h case-cfn-macros.h \ cfn-operators.pd omp-device-properties.h # @@ -3305,8 +3335,8 @@ build/genrecog.o : genrecog.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) \ $(HASH_TABLE_H) inchash.h build/genhooks.o : genhooks.cc $(TARGET_DEF) $(C_TARGET_DEF) \ - $(COMMON_TARGET_DEF) $(D_TARGET_DEF) $(RUST_TARGET_DEF) $(BCONFIG_H) \ - $(SYSTEM_H) errors.h + $(COMMON_TARGET_DEF) $(D_TARGET_DEF) $(RUST_TARGET_DEF) $(JIT_TARGET_DEF) \ + $(BCONFIG_H) $(SYSTEM_H) errors.h build/genmddump.o : genmddump.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) build/genmatch.o : genmatch.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) \ diff --git a/gcc/config.gcc b/gcc/config.gcc index 9c8f4d05330b..a73bf9578e91 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -149,6 +149,9 @@ # d_target_objs List of extra target-dependent objects that be # linked into the D compiler only. # +# jit_target_objs List of extra target-dependent objects that be +# linked into the jit compiler only. +# # fortran_target_objs List of extra target-dependent objects that be # linked into the fortran compiler only. # @@ -210,6 +213,9 @@ # # target_has_targetrustm Set to yes or no depending on whether the target # has its own definition of targetrustm. +# +# target_has_targetjitm Set to yes or no depending on whether the target +# has its own definition of targetjitm. out_file= common_out_file= @@ -226,12 +232,14 @@ extra_options= c_target_objs= cxx_target_objs= d_target_objs= +jit_target_objs= fortran_target_objs= rust_target_objs= target_has_targetcm=no target_has_targetm_common=yes target_has_targetdm=no target_has_targetrustm=no +target_has_targetjitm=no tm_defines= xm_defines= # Set this to force installation and use of collect2. @@ -416,6 +424,7 @@ i[34567]86-*-* | x86_64-*-*) c_target_objs="i386-c.o" cxx_target_objs="i386-c.o" d_target_objs="i386-d.o" + jit_target_objs="i386-jit.o" extra_objs="x86-tune-sched.o x86-tune-sched-bd.o x86-tune-sched-atom.o x86-tune-sched-core.o i386-options.o i386-builtins.o i386-expand.o i386-features.o" target_gtfiles="\$(srcdir)/config/i386/i386-builtins.cc \$(srcdir)/config/i386/i386-expand.cc \$(srcdir)/config/i386/i386-options.cc" extra_options="${extra_options} fused-madd.opt" @@ -620,6 +629,12 @@ then rust_target_objs="${rust_target_objs} ${cpu_type}-rust.o" fi +tm_jit_file= +if test -f ${srcdir}/config/${cpu_type}/${cpu_type}-jit.h +then + tm_jit_file="${tm_jit_file} ${cpu_type}/${cpu_type}-jit.h" +fi + extra_modes= if test -f ${srcdir}/config/${cpu_type}/${cpu_type}-modes.def then @@ -3714,6 +3729,10 @@ if [ "$target_has_targetrustm" = "no" ]; then rust_target_objs="$rust_target_objs default-rust.o" fi +if [ "$target_has_targetjitm" = "no" ]; then + jit_target_objs="$jit_target_objs default-jit.o" +fi + # Support for --with-cpu and related options (and a few unrelated options, # too). case ${with_cpu} in @@ -6087,6 +6106,7 @@ case ${target} in c_target_objs="${c_target_objs} ${cpu_type}-c.o" cxx_target_objs="${cxx_target_objs} ${cpu_type}-c.o" d_target_objs="${d_target_objs} ${cpu_type}-d.o" + jit_target_objs="${jit_target_objs} ${cpu_type}-jit.o" tmake_file="${cpu_type}/t-${cpu_type} ${tmake_file}" ;; diff --git a/gcc/config/default-jit.cc b/gcc/config/default-jit.cc new file mode 100644 index 000000000000..a03308ef6dab --- /dev/null +++ b/gcc/config/default-jit.cc @@ -0,0 +1,30 @@ +/* Default JIT language target hooks initializer. + Copyright (C) 2023 Free Software Foundation, Inc. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +#define INCLUDE_STRING +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tm_jit.h" +#include "jit/jit-target.h" +#include "jit/jit-target-def.h" + +/* Do not include tm.h or tm_p.h here; definitions needed by the target + architecture to initialize targetjitm should instead be added to tm_jit.h. + */ + +struct gcc_targetjitm targetjitm = TARGETJITM_INITIALIZER; diff --git a/gcc/config/i386/i386-jit.cc b/gcc/config/i386/i386-jit.cc new file mode 100644 index 000000000000..c1e2929a4735 --- /dev/null +++ b/gcc/config/i386/i386-jit.cc @@ -0,0 +1,71 @@ +/* Subroutines for the JIT front end on the x86 architecture. + Copyright (C) 2023 Free Software Foundation, Inc. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +#define IN_TARGET_CODE 1 + +#define INCLUDE_STRING +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "target.h" +#include "tm.h" +#include "tm_jit.h" +#include "jit/jit-target.h" +#include "jit/jit-target-def.h" + +/* Implement TARGET_JIT_REGISTER_CPU_TARGET_INFO. */ + +#ifndef CROSS_DIRECTORY_STRUCTURE +extern const char *host_detect_local_cpu (int argc, const char **argv); +#endif + +#if TARGET_64BIT_DEFAULT +const char* x86_bits = "64"; +#else +const char* x86_bits = "32"; +#endif + +void +ix86_jit_register_target_info (void) +{ +#ifndef CROSS_DIRECTORY_STRUCTURE + const char *params[] = {"arch", x86_bits}; + const char* local_cpu = host_detect_local_cpu (2, params); + if (local_cpu) + { + std::string arch = local_cpu; + free (const_cast (local_cpu)); + + const char* arg = "-march="; + size_t arg_pos = arch.find (arg) + strlen (arg); + size_t end_pos = arch.find (" ", arg_pos); + + std::string cpu = arch.substr (arg_pos, end_pos - arg_pos); + jit_target_set_arch (cpu); + } +#endif + + if (targetm.scalar_mode_supported_p (TImode)) + { + jit_target_add_supported_target_dependent_type (GCC_JIT_TYPE_UINT128_T); + jit_target_add_supported_target_dependent_type (GCC_JIT_TYPE_INT128_T); + } + +#define ADD_TARGET_INFO jit_add_target_info +#include "i386-rust-and-jit.inc" +#undef ADD_TARGET_INFO +} diff --git a/gcc/config/i386/i386-jit.h b/gcc/config/i386/i386-jit.h new file mode 100644 index 000000000000..1d65001476ee --- /dev/null +++ b/gcc/config/i386/i386-jit.h @@ -0,0 +1,22 @@ +/* Definitions for the jit front end on the x86 architecture. + Copyright (C) 2023 Free Software Foundation, Inc. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +/* In i386-jit.cc. */ +extern void ix86_jit_register_target_info (void); + +/* Target hooks for jit language. */ +#define TARGET_JIT_REGISTER_CPU_TARGET_INFO ix86_jit_register_target_info diff --git a/gcc/config/i386/t-i386 b/gcc/config/i386/t-i386 index 2508f89cd06a..e5fc929c1fec 100644 --- a/gcc/config/i386/t-i386 +++ b/gcc/config/i386/t-i386 @@ -50,6 +50,10 @@ i386-rust.o: $(srcdir)/config/i386/i386-rust.cc $(COMPILE) $< $(POSTCOMPILE) +i386-jit.o: $(srcdir)/config/i386/i386-jit.cc + $(COMPILE) $< + $(POSTCOMPILE) + i386-options.o: $(srcdir)/config/i386/i386-options.cc $(COMPILE) $< $(POSTCOMPILE) diff --git a/gcc/configure b/gcc/configure index 38d8cd919cba..0fb09f430da6 100755 --- a/gcc/configure +++ b/gcc/configure @@ -651,6 +651,7 @@ GMPLIBS target_cpu_default rust_target_objs d_target_objs +jit_target_objs fortran_target_objs cxx_target_objs c_target_objs @@ -662,6 +663,8 @@ tm_rust_include_list tm_rust_file_list tm_d_include_list tm_d_file_list +tm_jit_include_list +tm_jit_file_list tm_p_include_list tm_p_file_list tm_defines @@ -15114,6 +15117,17 @@ for f in $tm_rust_file; do esac done +tm_jit_file_list= +tm_jit_include_list= +for f in $tm_jit_file; do + case $f in + * ) + tm_jit_file_list="${tm_jit_file_list} \$(srcdir)/config/$f" + tm_jit_include_list="${tm_jit_include_list} config/$f" + ;; + esac +done + xm_file_list= xm_include_list= for f in $xm_file; do diff --git a/gcc/configure.ac b/gcc/configure.ac index 19975fa5be5b..684639d4cafd 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -2443,6 +2443,17 @@ for f in $tm_rust_file; do esac done +tm_jit_file_list= +tm_jit_include_list= +for f in $tm_jit_file; do + case $f in + * ) + tm_jit_file_list="${tm_jit_file_list} \$(srcdir)/config/$f" + tm_jit_include_list="${tm_jit_include_list} config/$f" + ;; + esac +done + xm_file_list= xm_include_list= for f in $xm_file; do @@ -7596,6 +7607,8 @@ AC_SUBST(tm_d_file_list) AC_SUBST(tm_d_include_list) AC_SUBST(tm_rust_file_list) AC_SUBST(tm_rust_include_list) +AC_SUBST(tm_jit_file_list) +AC_SUBST(tm_jit_include_list) AC_SUBST(xm_file_list) AC_SUBST(xm_include_list) AC_SUBST(xm_defines) @@ -7605,6 +7618,7 @@ AC_SUBST(cxx_target_objs) AC_SUBST(fortran_target_objs) AC_SUBST(d_target_objs) AC_SUBST(rust_target_objs) +AC_SUBST(jit_target_objs) AC_SUBST(target_cpu_default) AC_SUBST_FILE(language_hooks) diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index 0d109391f0b1..6012cd93680d 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -126,6 +126,14 @@ If targets initialize @code{targetrustm} themselves, they should set @code{target_has_targetrustm=yes} in @file{config.gcc}; otherwise a default definition is used. +Similarly, there is a @code{targetjitm} variable for hooks that are +specific to the jit front end, documented as ``JIT Target Hook''. +This is declared in @file{jit/jit-target.h}, the initializer +@code{TARGETJITM_INITIALIZER} in @file{jit/jit-target-def.h}. If targets +initialize @code{targetjitm} themselves, they should set +@code{target_has_targetjitm=yes} in @file{config.gcc}; otherwise a default +definition is used. + @node Driver @section Controlling the Compilation Driver, @file{gcc} @cindex driver @@ -11396,6 +11404,17 @@ Similar to @code{TARGET_RUST_CPU_INFO}, but is used for configuration info relating to the target operating system. @end deftypefn +@node JIT Language and ABI +@section JIT ABI parameters +@cindex parameters, jit abi + +@deftypefn {JIT Target Hook} void TARGET_JIT_REGISTER_CPU_TARGET_INFO (void) +Register all target information keys relating to the target CPU using the +function @code{jit_add_target_info}, which takes a key and a value. The +keys added by this hook are made available at compile time by calling +get_target_info. +@end deftypefn + @node Named Address Spaces @section Adding support for named address spaces @cindex named address spaces diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in index b28519081587..7fcd2ff99890 100644 --- a/gcc/doc/tm.texi.in +++ b/gcc/doc/tm.texi.in @@ -126,6 +126,14 @@ If targets initialize @code{targetrustm} themselves, they should set @code{target_has_targetrustm=yes} in @file{config.gcc}; otherwise a default definition is used. +Similarly, there is a @code{targetjitm} variable for hooks that are +specific to the jit front end, documented as ``JIT Target Hook''. +This is declared in @file{jit/jit-target.h}, the initializer +@code{TARGETJITM_INITIALIZER} in @file{jit/jit-target-def.h}. If targets +initialize @code{targetjitm} themselves, they should set +@code{target_has_targetjitm=yes} in @file{config.gcc}; otherwise a default +definition is used. + @node Driver @section Controlling the Compilation Driver, @file{gcc} @cindex driver @@ -7302,6 +7310,12 @@ floating-point support; they are not included in this mechanism. @hook TARGET_RUST_OS_INFO +@node JIT Language and ABI +@section JIT ABI parameters +@cindex parameters, jit abi + +@hook TARGET_JIT_REGISTER_CPU_TARGET_INFO + @node Named Address Spaces @section Adding support for named address spaces @cindex named address spaces diff --git a/gcc/genhooks.cc b/gcc/genhooks.cc index b984bee69ea8..529417b50f22 100644 --- a/gcc/genhooks.cc +++ b/gcc/genhooks.cc @@ -36,6 +36,7 @@ static struct hook_desc hook_array[] = { #include "common/common-target.def" #include "d/d-target.def" #include "rust/rust-target.def" +#include "jit/jit-target.def" #undef DEFHOOK }; diff --git a/gcc/jit/Make-lang.in b/gcc/jit/Make-lang.in index 59afe264a856..0429137d694d 100644 --- a/gcc/jit/Make-lang.in +++ b/gcc/jit/Make-lang.in @@ -130,7 +130,7 @@ jit.serial = $(LIBGCCJIT_FILENAME) # Tell GNU make to ignore these if they exist. .PHONY: jit -jit_OBJS = attribs.o \ +JIT_OBJS = attribs.o \ jit/dummy-frontend.o \ jit/libgccjit.o \ jit/jit-logging.o \ @@ -139,13 +139,17 @@ jit_OBJS = attribs.o \ jit/jit-result.o \ jit/jit-tempdir.o \ jit/jit-builtins.o \ + jit/jit-target.o \ jit/jit-spec.o \ gcc.o ifneq (,$(findstring mingw,$(target))) -jit_OBJS += jit/jit-w32.o +JIT_OBJS += jit/jit-w32.o endif +# All language-specific object files for jit. +jit_OBJS = $(JIT_OBJS) $(JIT_TARGET_OBJS) + # Use strict warnings for this front end. jit-warn = $(STRICT_WARN) diff --git a/gcc/jit/docs/topics/compatibility.rst b/gcc/jit/docs/topics/compatibility.rst index 1c4b81bfff1a..19be33eb4b50 100644 --- a/gcc/jit/docs/topics/compatibility.rst +++ b/gcc/jit/docs/topics/compatibility.rst @@ -453,3 +453,16 @@ temporary variable: ``LIBGCCJIT_ABI_34`` covers the addition of * :func:`gcc_jit_context_set_output_ident` + +.. _LIBGCCJIT_ABI_35: + +``LIBGCCJIT_ABI_35`` +-------------------- +``LIBGCCJIT_ABI_35`` covers the addition of functions to query the target +information: + + * :func:`gcc_jit_context_get_target_info` + * :func:`gcc_jit_target_info_release` + * :func:`gcc_jit_target_info_cpu_supports` + * :func:`gcc_jit_target_info_arch` + * :func:`gcc_jit_target_info_supports_target_dependent_type` diff --git a/gcc/jit/docs/topics/compilation.rst b/gcc/jit/docs/topics/compilation.rst index 3d3a9ab4db33..80c80af510d2 100644 --- a/gcc/jit/docs/topics/compilation.rst +++ b/gcc/jit/docs/topics/compilation.rst @@ -199,3 +199,59 @@ The available kinds of output are: .. c:macro:: GCC_JIT_OUTPUT_KIND_EXECUTABLE Compile the context to an executable. + +Getting information about a target +********************************** + +You can query the target information by using the following API: + +.. function:: gcc_jit_target_info * \ + gcc_jit_context_get_target_info (gcc_jit_context *ctxt) + + Compute the information about a target. + + If the result is non-NULL, the caller becomes responsible for + calling :func:`gcc_jit_target_info_release` on it once they're done + with it. + +.. function:: void \ + gcc_jit_target_info_release (gcc_jit_target_info *info) + + This function releases all resources associated with the given target info. + +.. function:: int \ + gcc_jit_target_info_cpu_supports (gcc_jit_target_info *info, + const char *feature) + + Check if the specified target INFO supports the cpu FEATURE. + +.. function:: const char * \ + gcc_jit_target_info_arch (gcc_jit_target_info *info) + + Get the architecture of the currently running CPU, e.g. the value of -march + equivalent to -march=native. Ex.: znver3 + + The underlying buffer is only valid until the gcc_jit_target_info is + released. + +.. function:: int \ + gcc_jit_target_info_supports_target_dependent_type (gcc_jit_target_info *info, + enum gcc_jit_types type) + + Check if the specified target INFO supports target-dependent types like + 128-bit integers. + + The API entrypoints relating to the target info: + + * :c:func:`gcc_jit_context_get_target_info` + * :c:func:`gcc_jit_target_info_release` + * :c:func:`gcc_jit_target_info_cpu_supports` + * :c:func:`gcc_jit_target_info_arch` + * :c:func:`gcc_jit_target_info_supports_target_dependent_type` + + were added in :ref:`LIBGCCJIT_ABI_35`; you can test for their presence + using + + .. code-block:: c + + #ifdef LIBGCCJIT_HAVE_TARGET_INFO_API diff --git a/gcc/jit/jit-playback.cc b/gcc/jit/jit-playback.cc index 4473d8b55521..291ddeb2cca2 100644 --- a/gcc/jit/jit-playback.cc +++ b/gcc/jit/jit-playback.cc @@ -50,6 +50,7 @@ along with GCC; see the file COPYING3. If not see #include "jit-result.h" #include "jit-builtins.h" #include "jit-tempdir.h" +#include "jit-target.h" #ifdef _WIN32 #include "jit-w32.h" @@ -3605,6 +3606,7 @@ replay () JIT_LOG_SCOPE (get_logger ()); init_types (); + jit_target_init (); /* Replay the recorded events: */ timevar_push (TV_JIT_REPLAY); diff --git a/gcc/jit/jit-playback.h b/gcc/jit/jit-playback.h index b0625dca71f1..07dab6fa3895 100644 --- a/gcc/jit/jit-playback.h +++ b/gcc/jit/jit-playback.h @@ -29,6 +29,7 @@ along with GCC; see the file COPYING3. If not see #include "varasm.h" #include "jit-recording.h" +#include "jit-target.h" namespace diagnostics { @@ -57,9 +58,10 @@ set_variable_string_attribute ( /* playback::context is an abstract base class. - The two concrete subclasses are: + The three concrete subclasses are: - playback::compile_to_memory - - playback::compile_to_file. */ + - playback::compile_to_file. + - playback::populate_target_info */ class context : public log_user { @@ -326,6 +328,18 @@ class context : public log_user void add_top_level_asm (const char *asm_stmts); + target_info *get_target_info () + { + return &m_target_info; + } + + target_info *move_target_info () + { + target_info *info = new target_info {std::move (m_target_info)}; + m_target_info = target_info{}; + return info; + } + private: void dump_generated_code (); @@ -429,6 +443,8 @@ class context : public log_user auto_vec m_source_files; auto_vec > m_cached_locations; + + target_info m_target_info; }; class compile_to_memory : public context @@ -461,6 +477,18 @@ class compile_to_file : public context const char *m_output_path; }; +class populate_target_info : public context +{ + public: + populate_target_info (recording::context *ctxt) : context (ctxt) + { + } + + void postprocess (const char *) final override + { + } +}; + /* A temporary wrapper object. These objects are (mostly) only valid during replay. diff --git a/gcc/jit/jit-recording.cc b/gcc/jit/jit-recording.cc index 8da3cb059156..2f4ecc318251 100644 --- a/gcc/jit/jit-recording.cc +++ b/gcc/jit/jit-recording.cc @@ -1629,6 +1629,13 @@ recording::context::enable_dump (const char *dumpname, result * recording::context::compile () { + if (m_populated_target_info) + { + add_error (NULL, + "cannot compile after calling gcc_jit_context_get_target_info"); + return NULL; + } + JIT_LOG_SCOPE (get_logger ()); log_all_options (); @@ -1659,6 +1666,13 @@ void recording::context::compile_to_file (enum gcc_jit_output_kind output_kind, const char *output_path) { + if (m_populated_target_info) + { + add_error (NULL, + "cannot compile after calling gcc_jit_context_get_target_info"); + return; + } + JIT_LOG_SCOPE (get_logger ()); log_all_options (); @@ -1677,6 +1691,28 @@ recording::context::compile_to_file (enum gcc_jit_output_kind output_kind, replayer.compile (); } +void +recording::context::populate_target_info () +{ + JIT_LOG_SCOPE (get_logger ()); + + log_all_options (); + + if (errors_occurred ()) + return; + + add_driver_option ("-fsyntax-only"); + m_populated_target_info = true; + + /* Set up a populate_target_info playback context. */ + ::gcc::jit::playback::populate_target_info replayer (this); + + /* Use it. */ + replayer.compile (); + + m_target_info = replayer.move_target_info (); +} + /* Format the given error using printf's conventions, print it to stderr, and add it to the context. */ diff --git a/gcc/jit/jit-recording.h b/gcc/jit/jit-recording.h index 0ac9245c2df5..4d41faa0446a 100644 --- a/gcc/jit/jit-recording.h +++ b/gcc/jit/jit-recording.h @@ -23,6 +23,7 @@ along with GCC; see the file COPYING3. If not see #include "jit-common.h" #include "jit-logging.h" +#include "jit-target.h" #include "libgccjit.h" #include @@ -328,6 +329,16 @@ class context : public log_user compile_to_file (enum gcc_jit_output_kind output_kind, const char *output_path); + void + populate_target_info (); + + target_info *move_target_info () + { + target_info *info = m_target_info; + m_target_info = nullptr; + return info; + } + void add_error (location *loc, const char *fmt, ...) GNU_PRINTF(3, 4); @@ -412,7 +423,11 @@ class context : public log_user type *m_basic_types[NUM_GCC_JIT_TYPES]; type *m_FILE_type; + bool m_populated_target_info = false; + builtins_manager *m_builtins_manager; // lazily created + + target_info *m_target_info; }; diff --git a/gcc/jit/jit-target-def.h b/gcc/jit/jit-target-def.h new file mode 100644 index 000000000000..dcb342fafe7d --- /dev/null +++ b/gcc/jit/jit-target-def.h @@ -0,0 +1,20 @@ +/* jit-target-def.h -- Default initializers for jit target hooks. + Copyright (C) 2023 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 3, or (at your option) any + later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING3. If not see + . */ + +#include "jit/jit-target-hooks-def.h" +#include "tree.h" +#include "hooks.h" diff --git a/gcc/jit/jit-target.cc b/gcc/jit/jit-target.cc new file mode 100644 index 000000000000..40b47971c44c --- /dev/null +++ b/gcc/jit/jit-target.cc @@ -0,0 +1,96 @@ +/* jit-target.cc -- Target interface for the jit front end. + Copyright (C) 2023 Free Software Foundation, Inc. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +#define INCLUDE_STRING +#define INCLUDE_ALGORITHM +#include "config.h" +#include "system.h" +#include "coretypes.h" + +#include "tree.h" +#include "memmodel.h" +#include "fold-const.h" +#include "diagnostic.h" +#include "stor-layout.h" +#include "tm.h" +#include "tm_p.h" +#include "target.h" +#include "calls.h" + +#include "jit-playback.h" +#include "jit-target.h" + +/* Initialize all variables of the Target structure. */ + +void +jit_target_init () +{ + /* Initialize target info tables, the keys required by the language are added + last, so that the CPU handler can override. */ + targetjitm.jit_register_cpu_target_info (); +} + +/* Add a target info key:value to JIT_TARGET_INFO for use by + target_info::has_target_value (). */ + +void +jit_add_target_info (const char *key, const char *value) +{ + gcc_assert (gcc::jit::active_playback_ctxt != NULL); + target_info* jit_target_info + = gcc::jit::active_playback_ctxt->get_target_info (); + if (jit_target_info->m_info.find (key) == jit_target_info->m_info.end ()) + jit_target_info->m_info.insert ({key, {value}}); + else + jit_target_info->m_info[key].insert (value); +} + +void +jit_target_set_arch (std::string const& arch) +{ + gcc_assert (gcc::jit::active_playback_ctxt != NULL); + target_info* jit_target_info + = gcc::jit::active_playback_ctxt->get_target_info (); + jit_target_info->m_arch = arch; +} + +void +jit_target_add_supported_target_dependent_type (enum gcc_jit_types type_) +{ + gcc_assert (gcc::jit::active_playback_ctxt != NULL); + target_info* jit_target_info + = gcc::jit::active_playback_ctxt->get_target_info (); + jit_target_info->m_supported_target_dependent_types.insert (type_); +} + +target_info * +jit_get_target_info () +{ + gcc_assert (gcc::jit::active_playback_ctxt != NULL); + target_info* info = gcc::jit::active_playback_ctxt->move_target_info (); + return info; +} + +bool +target_info::has_target_value (const char *key, const char *value) +{ + if (m_info.find (key) == m_info.end ()) + return false; + + auto& set = m_info[key]; + return set.find (value) != set.end (); +} diff --git a/gcc/jit/jit-target.def b/gcc/jit/jit-target.def new file mode 100644 index 000000000000..5e657eb4e137 --- /dev/null +++ b/gcc/jit/jit-target.def @@ -0,0 +1,42 @@ +/* jit-target.def -- Target hook definitions for the jit front end. + Copyright (C) 2023 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 3, or (at your option) any + later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING3. If not see + . */ + +/* See target-hooks-macros.h for details of macros that should be + provided by the including file, and how to use them here. */ + +#include "target-hooks-macros.h" + +#undef HOOK_TYPE +#define HOOK_TYPE "JIT Target Hook" + +HOOK_VECTOR (TARGETJITM_INITIALIZER, gcc_targetjitm) + +#undef HOOK_PREFIX +#define HOOK_PREFIX "TARGET_" + +/* getTargetInfo keys relating to the target CPU. */ +DEFHOOK +(jit_register_cpu_target_info, + "Register all target information keys relating to the target CPU using the\n\ +function @code{jit_add_target_info}, which takes a key and a value. The\n\ +keys added by this hook are made available at compile time by calling\n\ +get_target_info.", + void, (void), + hook_void_void) + +/* Close the 'struct gcc_targetdm' definition. */ +HOOK_VECTOR_END (C90_EMPTY_HACK) diff --git a/gcc/jit/jit-target.h b/gcc/jit/jit-target.h new file mode 100644 index 000000000000..626ae8179ff1 --- /dev/null +++ b/gcc/jit/jit-target.h @@ -0,0 +1,75 @@ +/* jit-target.h -- Data structure definitions for target-specific jit behavior. + Copyright (C) 2023 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 3, or (at your option) any + later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING3. If not see + . */ + +#ifndef GCC_JIT_TARGET_H +#define GCC_JIT_TARGET_H + +#define DEFHOOKPOD(NAME, DOC, TYPE, INIT) TYPE NAME; +#define DEFHOOK(NAME, DOC, TYPE, PARAMS, INIT) TYPE (* NAME) PARAMS; +#define DEFHOOK_UNDOC DEFHOOK +#define HOOKSTRUCT(FRAGMENT) FRAGMENT + +#include "jit-target.def" +#include "libgccjit.h" + +#include +#include + +static size_t hash_cstr (const char *s) +{ + const size_t seed = 0; + return std::_Hash_bytes (s, std::strlen (s), seed); +} + +struct CStringHash { + size_t operator () (const char* const &string) const { + auto res = hash_cstr (string); + return res; + } +}; + +struct CStringEqual { + bool + operator () (const char *const &string1, const char *const &string2) const + { + return strcmp (string1, string2) == 0; + } +}; + +struct target_info { + public: + bool has_target_value (const char *key, const char *value); + + std::unordered_map, + CStringHash, CStringEqual> + m_info; + std::string m_arch; + std::unordered_set m_supported_target_dependent_types; +}; + +/* Each target can provide their own. */ +extern struct gcc_targetjitm targetjitm; + +extern void jit_target_init (); +extern void jit_target_set_arch (std::string const& arch); +extern void +jit_target_add_supported_target_dependent_type (enum gcc_jit_types type_); +extern void jit_add_target_info (const char *key, const char *value); +extern target_info * jit_get_target_info (); + +#endif /* GCC_JIT_TARGET_H */ diff --git a/gcc/jit/libgccjit.cc b/gcc/jit/libgccjit.cc index 725a5d53d06f..33369447074b 100644 --- a/gcc/jit/libgccjit.cc +++ b/gcc/jit/libgccjit.cc @@ -20,6 +20,7 @@ along with GCC; see the file COPYING3. If not see #include "config.h" #define INCLUDE_MUTEX +#define INCLUDE_STRING #include "system.h" #include "coretypes.h" #include "timevar.h" @@ -29,6 +30,7 @@ along with GCC; see the file COPYING3. If not see #include "libgccjit.h" #include "jit-recording.h" #include "jit-result.h" +#include "jit-target.h" /* The opaque types used by the public API are actually subclasses of the gcc::jit::recording classes. */ @@ -44,6 +46,10 @@ struct gcc_jit_result : public gcc::jit::result { }; +struct gcc_jit_target_info : public target_info +{ +}; + struct gcc_jit_object : public gcc::jit::recording::memento { }; @@ -3900,6 +3906,51 @@ gcc_jit_context_set_output_ident (gcc_jit_context *ctxt, ctxt->set_output_ident (output_ident); } +gcc_jit_target_info * +gcc_jit_context_get_target_info (gcc_jit_context *ctxt) +{ + RETURN_NULL_IF_FAIL (ctxt, NULL, NULL, "NULL context"); + JIT_LOG_FUNC (ctxt->get_logger ()); + + ctxt->log ("populate_target_info of ctxt: %p", (void *)ctxt); + + ctxt->populate_target_info (); + + return (gcc_jit_target_info*) ctxt->move_target_info (); +} + +void +gcc_jit_target_info_release (gcc_jit_target_info *info) +{ + RETURN_IF_FAIL (info, NULL, NULL, "NULL info"); + delete info; +} + +int +gcc_jit_target_info_cpu_supports (gcc_jit_target_info *info, + const char *feature) +{ + RETURN_VAL_IF_FAIL (info, 0, NULL, NULL, "NULL info"); + RETURN_VAL_IF_FAIL (feature, 0, NULL, NULL, "NULL feature"); + return info->has_target_value ("target_feature", feature); +} + +const char * +gcc_jit_target_info_arch (gcc_jit_target_info *info) +{ + RETURN_NULL_IF_FAIL (info, NULL, NULL, "NULL info"); + return info->m_arch.c_str (); +} + +int +gcc_jit_target_info_supports_target_dependent_type (gcc_jit_target_info *info, + enum gcc_jit_types type) +{ + RETURN_VAL_IF_FAIL (info, 0, NULL, NULL, "NULL info"); + return info->m_supported_target_dependent_types.find (type) + != info->m_supported_target_dependent_types.end (); +} + /* Public entrypoint. See description in libgccjit.h. After error-checking, the real work is done by the diff --git a/gcc/jit/libgccjit.h b/gcc/jit/libgccjit.h index bc9fcaee2453..a58551007931 100644 --- a/gcc/jit/libgccjit.h +++ b/gcc/jit/libgccjit.h @@ -57,6 +57,9 @@ typedef struct gcc_jit_context gcc_jit_context; /* A gcc_jit_result encapsulates the result of an in-memory compilation. */ typedef struct gcc_jit_result gcc_jit_result; +/* A gcc_jit_target_info encapsulates the target info. */ +typedef struct gcc_jit_target_info gcc_jit_target_info; + /* An object created within a context. Such objects are automatically cleaned up when the context is released. @@ -2131,6 +2134,60 @@ gcc_jit_function_add_string_attribute (gcc_jit_function *func, enum gcc_jit_fn_attribute attribute, const char* value); +/* Create a gcc_jit_target_info instance. + + This API entrypoint was added in LIBGCCJIT_ABI_35; you can test for its + presence using + #ifdef LIBGCCJIT_HAVE_TARGET_INFO_API +*/ +extern gcc_jit_target_info * +gcc_jit_context_get_target_info (gcc_jit_context *ctxt); + +/* Release a gcc_jit_target_info instance. + + This API entrypoint was added in LIBGCCJIT_ABI_35; you can test for its + presence using + #ifdef LIBGCCJIT_HAVE_TARGET_INFO_API +*/ +extern void +gcc_jit_target_info_release (gcc_jit_target_info *info); + +/* Returns non-zero if FEATURE is supported by the specified target. + + This API entrypoint was added in LIBGCCJIT_ABI_35; you can test for its + presence using + #ifdef LIBGCCJIT_HAVE_TARGET_INFO_API +*/ +extern int +gcc_jit_target_info_cpu_supports (gcc_jit_target_info *info, + const char *feature); + +/* Returns the ARCH of the currently running CPU. + + This API entrypoint was added in LIBGCCJIT_ABI_35; you can test for its + presence using + #ifdef LIBGCCJIT_HAVE_TARGET_INFO_API +*/ +extern const char * +gcc_jit_target_info_arch (gcc_jit_target_info *info); + +/* Returns non-zero if the target natively supports the target-dependent type + TYPE. + + This API entrypoint was added in LIBGCCJIT_ABI_35; you can test for its + presence using + #ifdef LIBGCCJIT_HAVE_TARGET_INFO_API +*/ +extern int +gcc_jit_target_info_supports_target_dependent_type (gcc_jit_target_info *info, + enum gcc_jit_types type); + +/* The target info API was added in LIBGCCJIT_ABI_35; you can test for its + presence using + #ifdef LIBGCCJIT_HAVE_TARGET_INFO_API +*/ +#define LIBGCCJIT_HAVE_TARGET_INFO_API + extern void gcc_jit_function_add_integer_array_attribute ( gcc_jit_function *func, diff --git a/gcc/jit/libgccjit.map b/gcc/jit/libgccjit.map index fcb6e6f2a55d..4662ca4b3c02 100644 --- a/gcc/jit/libgccjit.map +++ b/gcc/jit/libgccjit.map @@ -325,3 +325,12 @@ LIBGCCJIT_ABI_34 { global: gcc_jit_context_set_output_ident; } LIBGCCJIT_ABI_33; + +LIBGCCJIT_ABI_35 { + global: + gcc_jit_context_get_target_info; + gcc_jit_target_info_release; + gcc_jit_target_info_cpu_supports; + gcc_jit_target_info_arch; + gcc_jit_target_info_supports_target_dependent_type; +} LIBGCCJIT_ABI_34; diff --git a/gcc/testsuite/jit.dg/all-non-failing-tests.h b/gcc/testsuite/jit.dg/all-non-failing-tests.h index add5619aebd4..4aa18e3b7678 100644 --- a/gcc/testsuite/jit.dg/all-non-failing-tests.h +++ b/gcc/testsuite/jit.dg/all-non-failing-tests.h @@ -424,6 +424,9 @@ #undef create_code #undef verify_code +/* test-target-info.c: This can't be in the testcases array as it + is target-specific. */ + /* test-types.c */ #define create_code create_code_types #define verify_code verify_code_types diff --git a/gcc/testsuite/jit.dg/test-error-target-info.c b/gcc/testsuite/jit.dg/test-error-target-info.c new file mode 100644 index 000000000000..a2426458285d --- /dev/null +++ b/gcc/testsuite/jit.dg/test-error-target-info.c @@ -0,0 +1,60 @@ +/* { dg-do compile { target x86_64-*-* } } */ + +#include +#include + +#include "libgccjit.h" + +#define TEST_PROVIDES_MAIN +#include "harness.h" + +void +create_code (gcc_jit_context *ctxt, void *user_data) +{ +} + +void +verify_code (gcc_jit_context *ctxt, gcc_jit_result *result) +{ +} + +int +main (int argc, char **argv) +{ + /* This is the same as the main provided by harness.h, but calls gcc_jit_context_get_target_info. */ + gcc_jit_context *ctxt; + ctxt = gcc_jit_context_acquire (); + if (!ctxt) + { + fail ("gcc_jit_context_acquire failed"); + return -1; + } + gcc_jit_target_info* info = gcc_jit_context_get_target_info (ctxt); + gcc_jit_context_compile (ctxt); + + gcc_jit_target_info_release (info); + + /* Verify that the correct error message was emitted. */ + CHECK_STRING_VALUE (gcc_jit_context_get_last_error (ctxt), + "cannot compile after calling gcc_jit_context_get_target_info"); + + gcc_jit_context_release (ctxt); + + int i; + + for (i = 1; i <= 5; i++) + { + snprintf (test, sizeof (test), + "%s iteration %d of %d", + extract_progname (argv[0]), + i, 5); + + //printf ("ITERATION %d\n", i); + test_jit (argv[0], NULL); + //printf ("\n"); + } + + totals (); + + return 0; +} diff --git a/gcc/testsuite/jit.dg/test-target-info.c b/gcc/testsuite/jit.dg/test-target-info.c new file mode 100644 index 000000000000..edae18aa1143 --- /dev/null +++ b/gcc/testsuite/jit.dg/test-target-info.c @@ -0,0 +1,61 @@ +/* { dg-do compile { target x86_64-*-* } } */ + +#include +#include + +#include "libgccjit.h" + +#define TEST_PROVIDES_MAIN +#include "harness.h" + +void +create_code (gcc_jit_context *ctxt, void *user_data) +{ +} + +void +verify_code (gcc_jit_context *ctxt, gcc_jit_result *result) +{ +} + +int +main (int argc, char **argv) +{ + /* This is the same as the main provided by harness.h, but calls gcc_jit_context_get_target_info. */ + gcc_jit_context *ctxt; + ctxt = gcc_jit_context_acquire (); + if (!ctxt) + { + fail ("gcc_jit_context_acquire failed"); + return -1; + } + gcc_jit_target_info* info = gcc_jit_context_get_target_info (ctxt); + + int sse2_supported = gcc_jit_target_info_cpu_supports (info, "sse2"); + CHECK_VALUE (sse2_supported, 1); + + int supports_128bit_int = + gcc_jit_target_info_supports_target_dependent_type (info, + GCC_JIT_TYPE_INT128_T); + CHECK_VALUE (supports_128bit_int, 1); + gcc_jit_target_info_release (info); + gcc_jit_context_release (ctxt); + + int i; + + for (i = 1; i <= 5; i++) + { + snprintf (test, sizeof (test), + "%s iteration %d of %d", + extract_progname (argv[0]), + i, 5); + + //printf ("ITERATION %d\n", i); + test_jit (argv[0], NULL); + //printf ("\n"); + } + + totals (); + + return 0; +} From 82a865f3a7f078435ffbd05d415a082d0391286e Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Tue, 7 Oct 2025 14:31:18 +0200 Subject: [PATCH 137/216] tree-optimization/105490 - improve COND_EXPR bool pattern We miss to add a mask conversion from the mask producer to the appropriate mask for the condition operation. The following moves required helpers and adds the missing part of the pattern. That's required both for the case we have different mask element sizes and for the case we have a different number of elements because cond expression vectorization doesn't handle the mask having different nunits than the data vector. PR tree-optimization/105490 * tree-vect-patterns.cc (build_mask_conversion): Move earlier. (vect_convert_mask_for_vectype): Likewise. (vect_recog_bool_pattern): Remove redundant truth type construction. Add missing possibly required mask conversion. * gcc.dg/vect/vect-cond-14.c: New testcase. --- gcc/testsuite/gcc.dg/vect/vect-cond-14.c | 38 ++++++++++ gcc/tree-vect-patterns.cc | 95 +++++++++++++----------- 2 files changed, 88 insertions(+), 45 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/vect/vect-cond-14.c diff --git a/gcc/testsuite/gcc.dg/vect/vect-cond-14.c b/gcc/testsuite/gcc.dg/vect/vect-cond-14.c new file mode 100644 index 000000000000..754168c5646f --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-cond-14.c @@ -0,0 +1,38 @@ +#include "tree-vect.h" + +short a[256]; +short b[256]; +short c[256]; +_Bool pb[256]; + +void __attribute__((noipa)) +predicate_by_bool() +{ + for (int i = 0; i < 256; i++) + c[i] = pb[i] ? a[i] : b[i]; +} + +int +main () +{ + check_vect (); + +#pragma GCC novector + for (int i = 0; i < 256; i++) + { + a[i] = i; + b[i] = -i; + pb[i] = (i % 3) == 0; + } + + predicate_by_bool(); + +#pragma GCC novector + for (int i = 0; i < 256; i++) + if (c[i] != (pb[i] ? a[i] : b[i])) + abort (); + + return 0; +} + +/* { dg-final { scan-tree-dump "optimized: loop vectorized" "vect" { target { vect_unpack && vect_condition } } } } */ diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc index 782327235db1..dccd3c9806e6 100644 --- a/gcc/tree-vect-patterns.cc +++ b/gcc/tree-vect-patterns.cc @@ -5533,6 +5533,53 @@ vect_recog_gcond_pattern (vec_info *vinfo, return pattern_stmt; } + +/* A helper for vect_recog_mask_conversion_pattern. Build + conversion of MASK to a type suitable for masking VECTYPE. + Built statement gets required vectype and is appended to + a pattern sequence of STMT_VINFO. + + Return converted mask. */ + +static tree +build_mask_conversion (vec_info *vinfo, + tree mask, tree vectype, stmt_vec_info stmt_vinfo) +{ + gimple *stmt; + tree masktype, tmp; + + masktype = truth_type_for (vectype); + tmp = vect_recog_temp_ssa_var (TREE_TYPE (masktype), NULL); + stmt = gimple_build_assign (tmp, CONVERT_EXPR, mask); + append_pattern_def_seq (vinfo, stmt_vinfo, + stmt, masktype, TREE_TYPE (vectype)); + + return tmp; +} + + +/* Return MASK if MASK is suitable for masking an operation on vectors + of type VECTYPE, otherwise convert it into such a form and return + the result. Associate any conversion statements with STMT_INFO's + pattern. */ + +static tree +vect_convert_mask_for_vectype (tree mask, tree vectype, + stmt_vec_info stmt_info, vec_info *vinfo) +{ + tree mask_type = integer_type_for_mask (mask, vinfo); + if (mask_type) + { + tree mask_vectype = get_mask_type_for_scalar_type (vinfo, mask_type); + if (mask_vectype + && maybe_ne (TYPE_VECTOR_SUBPARTS (vectype), + TYPE_VECTOR_SUBPARTS (mask_vectype))) + mask = build_mask_conversion (vinfo, mask, vectype, stmt_info); + } + return mask; +} + + /* Function vect_recog_bool_pattern Try to find pattern like following: @@ -5691,10 +5738,12 @@ vect_recog_bool_pattern (vec_info *vinfo, if (!new_vectype) return NULL; - new_vectype = truth_type_for (new_vectype); append_pattern_def_seq (vinfo, stmt_vinfo, pattern_stmt, new_vectype, TREE_TYPE (var)); + lhs_var = vect_convert_mask_for_vectype (lhs_var, vectype, stmt_vinfo, + vinfo); + lhs = vect_recog_temp_ssa_var (TREE_TYPE (lhs), NULL); pattern_stmt = gimple_build_assign (lhs, COND_EXPR, lhs_var, @@ -5750,29 +5799,6 @@ vect_recog_bool_pattern (vec_info *vinfo, return NULL; } -/* A helper for vect_recog_mask_conversion_pattern. Build - conversion of MASK to a type suitable for masking VECTYPE. - Built statement gets required vectype and is appended to - a pattern sequence of STMT_VINFO. - - Return converted mask. */ - -static tree -build_mask_conversion (vec_info *vinfo, - tree mask, tree vectype, stmt_vec_info stmt_vinfo) -{ - gimple *stmt; - tree masktype, tmp; - - masktype = truth_type_for (vectype); - tmp = vect_recog_temp_ssa_var (TREE_TYPE (masktype), NULL); - stmt = gimple_build_assign (tmp, CONVERT_EXPR, mask); - append_pattern_def_seq (vinfo, stmt_vinfo, - stmt, masktype, TREE_TYPE (vectype)); - - return tmp; -} - /* Function vect_recog_mask_conversion_pattern @@ -6005,27 +6031,6 @@ vect_get_load_store_mask (stmt_vec_info stmt_info) gcc_unreachable (); } -/* Return MASK if MASK is suitable for masking an operation on vectors - of type VECTYPE, otherwise convert it into such a form and return - the result. Associate any conversion statements with STMT_INFO's - pattern. */ - -static tree -vect_convert_mask_for_vectype (tree mask, tree vectype, - stmt_vec_info stmt_info, vec_info *vinfo) -{ - tree mask_type = integer_type_for_mask (mask, vinfo); - if (mask_type) - { - tree mask_vectype = get_mask_type_for_scalar_type (vinfo, mask_type); - if (mask_vectype - && maybe_ne (TYPE_VECTOR_SUBPARTS (vectype), - TYPE_VECTOR_SUBPARTS (mask_vectype))) - mask = build_mask_conversion (vinfo, mask, vectype, stmt_info); - } - return mask; -} - /* Return the equivalent of: fold_convert (TYPE, VALUE) From 81aa79e97763b1fd4616812d69a92c5c26ba34a1 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Tue, 7 Oct 2025 15:32:45 +0200 Subject: [PATCH 138/216] Fixup store bool pattern I think the bool pattern recognition for a store from a bool we decided to represent with a mask type is a bit confused. The following streamlines it by using the mask to create a data 0/1 and first possibly converting the mask according to the vector data type we produce (that was missing and is noticable in PR110223). This alone doesn't fix the 2nd testcase from the PR, but is required. PR tree-optimization/110223 * tree-vect-patterns.cc (vect_recog_bool_pattern): Fix mistakes in the store-from-mask bool pattern. Add required mask conversions. --- gcc/tree-vect-patterns.cc | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc index dccd3c9806e6..55c50420e32a 100644 --- a/gcc/tree-vect-patterns.cc +++ b/gcc/tree-vect-patterns.cc @@ -5763,30 +5763,18 @@ vect_recog_bool_pattern (vec_info *vinfo, return NULL; tree type = integer_type_for_mask (var, vinfo); - tree cst0, cst1, new_vectype; - if (!type) return NULL; - if (TYPE_MODE (type) == TYPE_MODE (TREE_TYPE (vectype))) - type = TREE_TYPE (vectype); - - cst0 = build_int_cst (type, 0); - cst1 = build_int_cst (type, 1); - new_vectype = get_vectype_for_scalar_type (vinfo, type); + var = vect_convert_mask_for_vectype (var, vectype, stmt_vinfo, vinfo); - rhs = vect_recog_temp_ssa_var (type, NULL); + tree cst0 = build_int_cst (TREE_TYPE (vectype), 0); + tree cst1 = build_int_cst (TREE_TYPE (vectype), 1); + rhs = vect_recog_temp_ssa_var (TREE_TYPE (vectype), NULL); pattern_stmt = gimple_build_assign (rhs, COND_EXPR, var, cst1, cst0); - append_pattern_def_seq (vinfo, stmt_vinfo, pattern_stmt, new_vectype); + append_pattern_def_seq (vinfo, stmt_vinfo, pattern_stmt, vectype); lhs = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (vectype), lhs); - if (!useless_type_conversion_p (TREE_TYPE (lhs), TREE_TYPE (rhs))) - { - tree rhs2 = vect_recog_temp_ssa_var (TREE_TYPE (lhs), NULL); - gimple *cast_stmt = gimple_build_assign (rhs2, NOP_EXPR, rhs); - append_pattern_def_seq (vinfo, stmt_vinfo, cast_stmt); - rhs = rhs2; - } pattern_stmt = gimple_build_assign (lhs, SSA_NAME, rhs); pattern_stmt_info = vinfo->add_stmt (pattern_stmt); vinfo->move_dr (pattern_stmt_info, stmt_vinfo); From 39961581f247660c451018563f1407c614a19bd8 Mon Sep 17 00:00:00 2001 From: Paul Thomas Date: Wed, 8 Oct 2025 08:17:10 +0100 Subject: [PATCH 139/216] Fortran: Fix PDT parameter substitution [PR93175,PR102240,PR102686] 2025-10-08 Paul Thomas gcc/fortran PR fortran/93175 PR fortran/102240 PR fortran/102686 * array.cc (match_array_element_spec): For pdt templates, call gfc_correct_parm_expr to elimante extraneous symbols from the bound expressions. * decl.cc (correct_parm_expr, gfc_correct_parm_expr): New fcns that remove symbols that are not PDT parameters from the type specification expressions. (insert_parameter_exprs): Process function symbols as if they are variables in the substitution with parameter expressions. (gfc_get_pdt_instance): Make sure that the parameter list of PDT components is updated as the instance is built. Move the construction of pdt_strings down a bit in the function and remove the tie up with pdt_arrays. * gfortran.h: Add prototype for gfc_correct_parm_expr. * resolve.cc (resolve_component): Skip testing for constant specification expressions in pdt_template component string lengths and pdt_strings. * trans-array.cc (structure_alloc_comps): Remove testing for deferred parameters and instead make sure that components of PDT type have parameters substituted with the parameter exprs of the enclosing PDT. gcc/testsuite/ PR fortran/93175 PR fortran/102240 PR fortran/102686 * gfortran.dg/pdt_55.f03: New test. --- gcc/fortran/array.cc | 11 ++++ gcc/fortran/decl.cc | 91 +++++++++++++++++++------- gcc/fortran/gfortran.h | 1 + gcc/fortran/resolve.cc | 15 +++-- gcc/fortran/trans-array.cc | 8 +-- gcc/testsuite/gfortran.dg/pdt_55.f03 | 96 ++++++++++++++++++++++++++++ 6 files changed, 189 insertions(+), 33 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/pdt_55.f03 diff --git a/gcc/fortran/array.cc b/gcc/fortran/array.cc index fa177fa91f7e..8f0004992e81 100644 --- a/gcc/fortran/array.cc +++ b/gcc/fortran/array.cc @@ -566,6 +566,7 @@ match_array_element_spec (gfc_array_spec *as) gfc_expr **upper, **lower; match m; int rank; + bool is_pdt_template; rank = as->rank == -1 ? 0 : as->rank; lower = &as->lower[rank + as->corank - 1]; @@ -613,6 +614,13 @@ match_array_element_spec (gfc_array_spec *as) return AS_UNKNOWN; } + is_pdt_template = gfc_current_block () + && gfc_current_block ()->attr.pdt_template + && gfc_current_block ()->f2k_derived; + + if ((*upper)->expr_type != EXPR_CONSTANT && is_pdt_template) + gfc_correct_parm_expr (gfc_current_block (), upper); + if (gfc_match_char (':') == MATCH_NO) { *lower = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1); @@ -645,6 +653,9 @@ match_array_element_spec (gfc_array_spec *as) return AS_UNKNOWN; } + if ((*upper)->expr_type != EXPR_CONSTANT && is_pdt_template) + gfc_correct_parm_expr (gfc_current_block (), upper); + return AS_EXPLICIT; } diff --git a/gcc/fortran/decl.cc b/gcc/fortran/decl.cc index 3761b6589e81..ab43cec6f4ba 100644 --- a/gcc/fortran/decl.cc +++ b/gcc/fortran/decl.cc @@ -3790,6 +3790,48 @@ match_record_decl (char *name) } + /* In parsing a PDT, it is possible that one of the type parameters has the + same name as a previously declared symbol that is not a type parameter. + Intercept this now by looking for the symtree in f2k_derived. */ + +static bool +correct_parm_expr (gfc_expr* e, gfc_symbol* pdt, int* f ATTRIBUTE_UNUSED) +{ + if (!e || (e->expr_type != EXPR_VARIABLE && e->expr_type != EXPR_FUNCTION)) + return false; + + if (!(e->symtree->n.sym->attr.pdt_len + || e->symtree->n.sym->attr.pdt_kind)) + { + gfc_symtree *st; + st = gfc_find_symtree (pdt->f2k_derived->sym_root, + e->symtree->n.sym->name); + if (st && st->n.sym + && (st->n.sym->attr.pdt_len || st->n.sym->attr.pdt_kind)) + { + gfc_expr *new_expr; + gfc_set_sym_referenced (st->n.sym); + new_expr = gfc_get_expr (); + new_expr->ts = st->n.sym->ts; + new_expr->expr_type = EXPR_VARIABLE; + new_expr->symtree = st; + new_expr->where = e->where; + gfc_replace_expr (e, new_expr); + } + } + + return false; +} + + +void +gfc_correct_parm_expr (gfc_symbol *pdt, gfc_expr **bound) +{ + if (!*bound || (*bound)->expr_type == EXPR_CONSTANT) + return; + gfc_traverse_expr (*bound, pdt, &correct_parm_expr, 0); +} + /* This function uses the gfc_actual_arglist 'type_param_spec_list' as a source of expressions to substitute into the possibly parameterized expression 'e'. Using a list is inefficient but should not be too bad since the @@ -3801,12 +3843,13 @@ insert_parameter_exprs (gfc_expr* e, gfc_symbol* sym ATTRIBUTE_UNUSED, gfc_actual_arglist *param; gfc_expr *copy; - if (e->expr_type != EXPR_VARIABLE) + if (e->expr_type != EXPR_VARIABLE && e->expr_type != EXPR_FUNCTION) return false; gcc_assert (e->symtree); if (e->symtree->n.sym->attr.pdt_kind - || (*f != 0 && e->symtree->n.sym->attr.pdt_len)) + || (*f != 0 && e->symtree->n.sym->attr.pdt_len) + || (e->expr_type == EXPR_FUNCTION && e->symtree->n.sym)) { for (param = type_param_spec_list; param; param = param->next) if (strcmp (e->symtree->n.sym->name, param->name) == 0) @@ -4141,7 +4184,7 @@ gfc_get_pdt_instance (gfc_actual_arglist *param_list, gfc_symbol **sym, /* Now obtain the PDT instance for the extended type. */ c2->param_list = type_param_spec_list; m = gfc_get_pdt_instance (type_param_spec_list, &c2->ts.u.derived, - NULL); + &c2->param_list); type_param_spec_list = old_param_spec_list; c2->ts.u.derived->refs++; @@ -4205,20 +4248,6 @@ gfc_get_pdt_instance (gfc_actual_arglist *param_list, gfc_symbol **sym, } } - /* Similarly, set the string length if parameterized. */ - if (c1->ts.type == BT_CHARACTER - && c1->ts.u.cl->length - && gfc_derived_parameter_expr (c1->ts.u.cl->length)) - { - gfc_expr *e; - e = gfc_copy_expr (c1->ts.u.cl->length); - gfc_insert_kind_parameter_exprs (e); - gfc_simplify_expr (e, 1); - c2->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL); - c2->ts.u.cl->length = e; - c2->attr.pdt_string = 1; - } - /* Set up either the KIND/LEN initializer, if constant, or the parameterized expression. Use the template initializer if one is not already set in this instance. */ @@ -4283,7 +4312,8 @@ gfc_get_pdt_instance (gfc_actual_arglist *param_list, gfc_symbol **sym, gfc_free_expr (c2->as->upper[i]); c2->as->upper[i] = e; } - c2->attr.pdt_array = pdt_array ? 1 : c2->attr.pdt_string; + + c2->attr.pdt_array = 1; if (c1->initializer) { c2->initializer = gfc_copy_expr (c1->initializer); @@ -4292,6 +4322,20 @@ gfc_get_pdt_instance (gfc_actual_arglist *param_list, gfc_symbol **sym, } } + /* Similarly, set the string length if parameterized. */ + if (c1->ts.type == BT_CHARACTER + && c1->ts.u.cl->length + && gfc_derived_parameter_expr (c1->ts.u.cl->length)) + { + gfc_expr *e; + e = gfc_copy_expr (c1->ts.u.cl->length); + gfc_insert_kind_parameter_exprs (e); + gfc_simplify_expr (e, 1); + gfc_free_expr (c2->ts.u.cl->length); + c2->ts.u.cl->length = e; + c2->attr.pdt_string = 1; + } + /* Recurse into this function for PDT components. */ if ((c1->ts.type == BT_DERIVED || c1->ts.type == BT_CLASS) && c1->ts.u.derived && c1->ts.u.derived->attr.pdt_template) @@ -4304,15 +4348,18 @@ gfc_get_pdt_instance (gfc_actual_arglist *param_list, gfc_symbol **sym, /* Substitute the template parameters with the expressions from the specification list. */ for (;actual_param; actual_param = actual_param->next) - gfc_insert_parameter_exprs (actual_param->expr, - type_param_spec_list); + { + gfc_correct_parm_expr (pdt, &actual_param->expr); + gfc_insert_parameter_exprs (actual_param->expr, + type_param_spec_list); + } /* Now obtain the PDT instance for the component. */ old_param_spec_list = type_param_spec_list; - m = gfc_get_pdt_instance (params, &c2->ts.u.derived, NULL); + m = gfc_get_pdt_instance (params, &c2->ts.u.derived, + &c2->param_list); type_param_spec_list = old_param_spec_list; - c2->param_list = params; if (!(c2->attr.pointer || c2->attr.allocatable)) c2->initializer = gfc_default_initializer (&c2->ts); diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index 219c4b67ed81..a14202fda8fd 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -3462,6 +3462,7 @@ extern hash_map *gfc_vectorized_builtins; /* Handling Parameterized Derived Types */ bool gfc_insert_parameter_exprs (gfc_expr *, gfc_actual_arglist *); +void gfc_correct_parm_expr (gfc_symbol *, gfc_expr **); match gfc_get_pdt_instance (gfc_actual_arglist *, gfc_symbol **, gfc_actual_arglist **); diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc index 00b143c07db0..75270064ed43 100644 --- a/gcc/fortran/resolve.cc +++ b/gcc/fortran/resolve.cc @@ -16877,27 +16877,30 @@ resolve_component (gfc_component *c, gfc_symbol *sym) && gfc_find_typebound_proc (super_type, NULL, c->name, true, NULL)) { gfc_error ("Component %qs of %qs at %L has the same name as an" - " inherited type-bound procedure", - c->name, sym->name, &c->loc); + " inherited type-bound procedure", + c->name, sym->name, &c->loc); return false; } if (c->ts.type == BT_CHARACTER && !c->attr.proc_pointer && !c->ts.deferred) { + if (sym->attr.pdt_template || c->attr.pdt_string) + gfc_correct_parm_expr (sym, &c->ts.u.cl->length); + if (c->ts.u.cl->length == NULL - || (!resolve_charlen(c->ts.u.cl)) + || !resolve_charlen(c->ts.u.cl) || !gfc_is_constant_expr (c->ts.u.cl->length)) { gfc_error ("Character length of component %qs needs to " "be a constant specification expression at %L", c->name, c->ts.u.cl->length ? &c->ts.u.cl->length->where : &c->loc); - return false; - } + return false; + } if (c->ts.u.cl->length && c->ts.u.cl->length->ts.type != BT_INTEGER) - { + { if (!c->ts.u.cl->length->error) { gfc_error ("Character length expression of component %qs at %L " diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc index 9dd61f98ca76..b11ef57f9814 100644 --- a/gcc/fortran/trans-array.cc +++ b/gcc/fortran/trans-array.cc @@ -11084,17 +11084,15 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl, tree dest, && c->ts.u.derived && c->ts.u.derived->attr.pdt_type && !(c->attr.pointer || c->attr.allocatable)) { - bool is_deferred = false; gfc_actual_arglist *tail = c->param_list; for (; tail; tail = tail->next) - if (!tail->expr) - is_deferred = true; + if (tail->expr) + gfc_insert_parameter_exprs (tail->expr, pdt_param_list); - tail = is_deferred ? pdt_param_list : c->param_list; tmp = gfc_allocate_pdt_comp (c->ts.u.derived, comp, c->as ? c->as->rank : 0, - tail); + c->param_list); gfc_add_expr_to_block (&fnblock, tmp); } diff --git a/gcc/testsuite/gfortran.dg/pdt_55.f03 b/gcc/testsuite/gfortran.dg/pdt_55.f03 new file mode 100644 index 000000000000..bcdb1518fde3 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pdt_55.f03 @@ -0,0 +1,96 @@ +! { dg-do run } +! +! Test fix for PRs 102240, 102686 and 93175. +! +! PR102240 +! Contributed by Roland Wirth +! +MODULE m1 + IMPLICIT NONE + private + public r + INTEGER :: n0, n ! Symbols that confused the parameter substitution. + type t0(m0,n0) + INTEGER, kind :: m0 + INTEGER, LEN :: n0 + INTEGER(kind=m0) :: a0(n0*2) + end type t0 + + TYPE t(m,n) + INTEGER, kind :: m + INTEGER, LEN :: n + INTEGER(kind=m) :: a(n/8:(n/2 + 4)) + type(t0(m,n)) :: p ! During testing, getting this to work fixed PR93175. + END TYPE t +contains + subroutine r + type (t(kind(1_8), 8)) :: x + x%a = [1,2,3,4,5,6,7,8] + if (kind (x%a) /= kind(1_8)) stop 1 + if (sum (x%a) /= 36_8) stop 2 + if (size(x%p%a0) /= 16) stop 3 + end +END + +! PR102686 +! Contributed by Gerhard Steinmetz +! +module m2 + implicit none + private + public s +contains + pure integer function n() ! Confused the parameter substitution. + n = 1 + end + subroutine s + type t(n) + integer, len :: n = 2 + character(len=n) :: c ! ICE because function n() referenced rather than parameter. + end type + type (t(4)) :: c_type, c_type2 + c_type = t(4)("abcd") + if (len (c_type%c) /= 4) stop 4 + if (c_type%c /= "abcd") stop 5 + c_type2%c = "efgh" + if (len (c_type2%c) /= 4) stop 6 + if (c_type2%c /= "efgh") stop 7 + end +end + +! PR93175 +! Contributed by Rich Townsend +! +module m3 + private + public u + type :: matrix (k,n) + integer, kind :: k + integer, len :: n + real(k) :: a(n,n) + end type matrix + + type :: problem(n) + integer, len :: n + type(matrix(kind(0.D0),n)) :: m + end type problem + +contains + subroutine u + implicit none + type(problem(2)) :: p + + p%m%a = 1. + if (p%n /= 2) stop 8 + if (p%m%n /= 2) stop 9 + if (int (sum (p%m%a)) /= 4) stop 10 + end subroutine +end module m3 + + use m1 + use m2 + use m3 + call r + call s + call u +end From 7fb8339ca3239cc74983b82e4ba89c95b7489209 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 8 Oct 2025 09:49:25 +0200 Subject: [PATCH 140/216] testsuite: Fix up pr121987.c testcase for ilp32 [PR121206] The test FAILs on ilp32 targets with pr121987.c:5:21: warning: unsigned conversion from 'long long int' to 'long unsigned int' changes value from '10000000000' to '1410065408' [-Woverflow] excess error. Fixed by using unsigned long long instead of unsigned and using a suffix on the constant. Tested on x86_64-linux with -m32/-m64, additionally tested with older cc1 where it ICEd in both cases in upper_bound. 2025-10-08 Jakub Jelinek PR tree-optimization/121206 * gcc.dg/pr121987.c (main): Use unsigned long long type for e instead of unsigned long and use ULL suffix on the initializer. --- gcc/testsuite/gcc.dg/pr121987.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/testsuite/gcc.dg/pr121987.c b/gcc/testsuite/gcc.dg/pr121987.c index 04845a4d8caa..80bedcc67aa2 100644 --- a/gcc/testsuite/gcc.dg/pr121987.c +++ b/gcc/testsuite/gcc.dg/pr121987.c @@ -2,7 +2,7 @@ /* { dg-options "-O3" } */ int a, b, c, d; int main() { - unsigned long e = 10000000000; + unsigned long long e = 10000000000ULL; unsigned f; int g; while (a) { From bb22f7d4d63446c9095db32ca013a9b2182df7d9 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 8 Oct 2025 09:58:41 +0200 Subject: [PATCH 141/216] gimplify: Fix up __builtin_c[lt]zg gimplification [PR122188] The following testcase ICEs during gimplification. The problem is that save_expr sometimes doesn't create a SAVE_EXPR but returns the original complex tree (COND_EXPR) and the code then uses that tree in 2 different spots without unsharing. As this is done during gimplification it wasn't unshared when whole body is unshared and because gimplification is destructive, the first time we gimplify it we destruct it and second time we try to gimplify it we ICE on it. Now, we could replace one a use with unshare_expr (a), but because this is a gimplification hook, I think easier than trying to create a save_expr is just gimplify the argument, then we know it is is_gimple_val and so something without side-effects and can safely use it twice. That argument would be the first thing to gimplify after return GS_OK anyway, so it doesn't change argument sequencing etc. 2025-10-08 Jakub Jelinek PR c/122188 * c-gimplify.cc (c_gimplify_expr): Gimplify CALL_EXPR_ARG (*expr_p, 0) instead of calling save_expr on it. * c-c++-common/pr122188.c: New test. --- gcc/c-family/c-gimplify.cc | 5 ++++- gcc/testsuite/c-c++-common/pr122188.c | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/c-c++-common/pr122188.c diff --git a/gcc/c-family/c-gimplify.cc b/gcc/c-family/c-gimplify.cc index 131eca8297f8..6fcd45830562 100644 --- a/gcc/c-family/c-gimplify.cc +++ b/gcc/c-family/c-gimplify.cc @@ -1036,7 +1036,10 @@ c_gimplify_expr (tree *expr_p, gimple_seq *pre_p ATTRIBUTE_UNUSED, && call_expr_nargs (*expr_p) == 2 && TREE_CODE (CALL_EXPR_ARG (*expr_p, 1)) != INTEGER_CST) { - tree a = save_expr (CALL_EXPR_ARG (*expr_p, 0)); + tree a = CALL_EXPR_ARG (*expr_p, 0); + if (gimplify_expr (&a, pre_p, post_p, is_gimple_val, fb_rvalue) + == GS_ERROR) + return GS_ERROR; tree c = build_call_expr_loc (EXPR_LOCATION (*expr_p), fndecl, 1, a); *expr_p = build3_loc (EXPR_LOCATION (*expr_p), COND_EXPR, diff --git a/gcc/testsuite/c-c++-common/pr122188.c b/gcc/testsuite/c-c++-common/pr122188.c new file mode 100644 index 000000000000..8c3fa1c30e55 --- /dev/null +++ b/gcc/testsuite/c-c++-common/pr122188.c @@ -0,0 +1,15 @@ +/* PR c/122188 */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +int +foo (const unsigned x, int y) +{ + return __builtin_ctzg (x ? x : 4081577U, y); +} + +int +bar (const unsigned x, int y) +{ + return __builtin_clzg (x ? x : 4081577U, y); +} From d78bd76a49fb900db937d1bbabee7c5cb41ff4ba Mon Sep 17 00:00:00 2001 From: Alfie Richards Date: Tue, 7 Oct 2025 09:34:48 +0000 Subject: [PATCH 142/216] c: Fix i386 target attribute regression [PR 122180] My patch (r16-4182-g73888cefe6da65) broke another target (i386), which this patch fixes. The issue was the target_version code was incorrectly being triggered on targets that do not support target_version semantics (i386). PR target/122180 gcc/c/ChangeLog: * c-decl.cc (pushdecl): Add TARGET_HAS_FMV_TARGET_ATTRIBUTE check. gcc/testsuite/ChangeLog: * gcc.target/i386/pr122180.c: New test. --- gcc/c/c-decl.cc | 7 +++++-- gcc/testsuite/gcc.target/i386/pr122180.c | 7 +++++++ 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr122180.c diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc index d0dc5eeda39b..4a940d5eec33 100644 --- a/gcc/c/c-decl.cc +++ b/gcc/c/c-decl.cc @@ -3414,8 +3414,11 @@ pushdecl (tree x) } } - /* Check if x is part of a FMV set with b_use. */ - if (b_use && TREE_CODE (b_use->decl) == FUNCTION_DECL + /* Check if x is part of a FMV set with b_use. + FMV is only supported in c for targets with target_version + attributes. */ + if (!TARGET_HAS_FMV_TARGET_ATTRIBUTE + && b_use && TREE_CODE (b_use->decl) == FUNCTION_DECL && TREE_CODE (x) == FUNCTION_DECL && DECL_FILE_SCOPE_P (b_use->decl) && DECL_FILE_SCOPE_P (x) && disjoint_version_decls (x, b_use->decl) diff --git a/gcc/testsuite/gcc.target/i386/pr122180.c b/gcc/testsuite/gcc.target/i386/pr122180.c new file mode 100644 index 000000000000..6153d6c4c710 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr122180.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ + +static void s() __attribute__((target("avx"))); +static void s() { } +void f() { + s(); +} From c5bee7e24d5ccfbc2a1485834bd96c76b5207131 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Wed, 8 Oct 2025 11:13:15 +0200 Subject: [PATCH 143/216] Add missing menu item for JIT Language and ABI Build of gccint.texi is currently broken, the following fixes it. * doc/tm.texi.in (JIT Language and ABI): Add menu item. * doc/tm.texi: Re-generate. --- gcc/doc/tm.texi | 1 + gcc/doc/tm.texi.in | 1 + 2 files changed, 2 insertions(+) diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index 6012cd93680d..989e01fbd18a 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -56,6 +56,7 @@ through the macros defined in the @file{.h} file. * C++ ABI:: Controlling C++ ABI changes. * D Language and ABI:: Controlling D ABI changes. * Rust Language and ABI:: Controlling Rust ABI changes. +* JIT Language and ABI:: JIT ABI parameters * Named Address Spaces:: Adding support for named address spaces * Misc:: Everything else. @end menu diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in index 7fcd2ff99890..4838af8c0da9 100644 --- a/gcc/doc/tm.texi.in +++ b/gcc/doc/tm.texi.in @@ -56,6 +56,7 @@ through the macros defined in the @file{.h} file. * C++ ABI:: Controlling C++ ABI changes. * D Language and ABI:: Controlling D ABI changes. * Rust Language and ABI:: Controlling Rust ABI changes. +* JIT Language and ABI:: JIT ABI parameters * Named Address Spaces:: Adding support for named address spaces * Misc:: Everything else. @end menu From 8c71d18f540650e13ed8e324b595c11630ee6ce6 Mon Sep 17 00:00:00 2001 From: Luc Grosheintz Date: Mon, 29 Sep 2025 08:00:18 +0200 Subject: [PATCH 144/216] libstdc++: Implement std::layout_left_padded [PR110352]. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit adds a new layout layout_left_padded as standardized in N5014. It adds a purely internal feature testing macro padded_layouts and registers layout_left_padded in the std module. This commit implements LWG4372, because without it's not possible to properly test padded layouts with a dynamic padding value. It also implements LWG4314, for consistency with prior layouts. The implementation uses a _PaddedStorage to deduplicate most of the code shared between left- and right-padded layouts. It's implemented through aggregation rather than inheritence, because of a bug related to inheriting conditionally explicit ctors. The tests are written such that the canonical version works for layout_left_padded. A version for layout_right_padded is derived essentially by reversing the order of the extents. PR libstdc++/110352 libstdc++-v3/ChangeLog: * include/bits/version.def (padded_layouts): Add new internal feature testing macro. * include/bits/version.h: Regenerate. * include/std/mdspan (__fwd_prod): New overload. (layout_left_padded): Add declaration and implementation. (layout_right_padded): Add declaration only. (layout_left::mapping::mapping): New overload for left padded mappings. (__index_type_cast): New function that performs a checked cast to index_type. (__is_left_padded_mapping): New concept. (__is_right_padded_mapping): Ditto. (__standardized_mapping): Recognize left and right padded mappings. (_LeftPaddedIndices): Traits for left padded details. (_PaddedStorage): New class for implementing padded layouts. * src/c++23/std.cc.in (layout_left_padded): Add. * testsuite/23_containers/mdspan/layouts/class_mandate_neg.cc: Refactor and add tests for layout_left_padded. * testsuite/23_containers/mdspan/layouts/ctors.cc: Ditto. * testsuite/23_containers/mdspan/layouts/empty.cc: Ditto. * testsuite/23_containers/mdspan/layouts/mapping.cc: Ditto. * testsuite/23_containers/mdspan/layouts/padded.cc: Ditto. * testsuite/23_containers/mdspan/layouts/padded_neg.cc: Ditto. * testsuite/23_containers/mdspan/layouts/padded_traits.h: New traits. Reviewed-by: Tomasz Kamiński Signed-off-by: Luc Grosheintz --- libstdc++-v3/include/bits/version.def | 10 + libstdc++-v3/include/bits/version.h | 9 + libstdc++-v3/include/std/mdspan | 658 ++++++++++++++++- libstdc++-v3/src/c++23/std.cc.in | 8 +- .../mdspan/layouts/class_mandate_neg.cc | 1 + .../23_containers/mdspan/layouts/ctors.cc | 59 +- .../23_containers/mdspan/layouts/empty.cc | 20 +- .../23_containers/mdspan/layouts/mapping.cc | 107 ++- .../23_containers/mdspan/layouts/padded.cc | 673 ++++++++++++++++++ .../mdspan/layouts/padded_neg.cc | 324 +++++++++ .../mdspan/layouts/padded_traits.h | 73 ++ 11 files changed, 1925 insertions(+), 17 deletions(-) create mode 100644 libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded.cc create mode 100644 libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded_neg.cc create mode 100644 libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded_traits.h diff --git a/libstdc++-v3/include/bits/version.def b/libstdc++-v3/include/bits/version.def index 3a26234f87ed..9fe3ad2feda1 100644 --- a/libstdc++-v3/include/bits/version.def +++ b/libstdc++-v3/include/bits/version.def @@ -1062,6 +1062,16 @@ ftms = { cxxmin = 26; extra_cond = "__glibcxx_assume_aligned " "&& __glibcxx_is_sufficiently_aligned"; + }; +}; + +// Purely internal macro padded layouts. +ftms = { + name = padded_layouts; + no_stdname = true; // internal + values = { + v = 1; + cxxmin = 26; }; }; diff --git a/libstdc++-v3/include/bits/version.h b/libstdc++-v3/include/bits/version.h index 46e4c1121e7a..d9bf5c8145a0 100644 --- a/libstdc++-v3/include/bits/version.h +++ b/libstdc++-v3/include/bits/version.h @@ -1193,6 +1193,15 @@ #endif /* !defined(__cpp_lib_aligned_accessor) && defined(__glibcxx_want_aligned_accessor) */ #undef __glibcxx_want_aligned_accessor +#if !defined(__cpp_lib_padded_layouts) +# if (__cplusplus > 202302L) +# define __glibcxx_padded_layouts 1L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_padded_layouts) +# endif +# endif +#endif /* !defined(__cpp_lib_padded_layouts) && defined(__glibcxx_want_padded_layouts) */ +#undef __glibcxx_want_padded_layouts + #if !defined(__cpp_lib_ssize) # if (__cplusplus >= 202002L) # define __glibcxx_ssize 201902L diff --git a/libstdc++-v3/include/std/mdspan b/libstdc++-v3/include/std/mdspan index d9b5152b6938..7f14ca613f33 100644 --- a/libstdc++-v3/include/std/mdspan +++ b/libstdc++-v3/include/std/mdspan @@ -71,6 +71,27 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return true; } + template + constexpr _IndexType + __index_type_cast(_OIndexType&& __other) + { + if constexpr (std::is_integral_v<_OIndexType>) + { + __glibcxx_assert(cmp_less_equal(__other, + __gnu_cxx::__int_traits<_IndexType>::__max)); + if constexpr (std::is_signed_v<_OIndexType>) + __glibcxx_assert(__other >= 0); + return std::move(__other); + } + else + { + auto __ret = static_cast<_IndexType>(std::move(__other)); + if constexpr (std::is_signed_v<_IndexType>) + __glibcxx_assert(__ret >= 0); + return __ret; + } + } + template class _StaticExtents { @@ -261,6 +282,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __static_extents() noexcept { return _Extents::_Storage::_S_static_extents(); } + template + constexpr span + __static_extents(size_t __begin, size_t __end) noexcept + { + const auto& __sta_exts = __static_extents<_Extents>(); + return span(__sta_exts.data() + __begin, __end - __begin); + } + // Pre-compute: \prod_{i = 0}^r _Extents[i], for r = 0,..., n (exclusive) template constexpr auto __fwd_partial_prods = [] consteval @@ -476,6 +505,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } // Preconditions: _r < _Extents::rank() + template + constexpr typename _Extents::index_type + __fwd_prod(const _Extents& __exts, size_t __begin, size_t __end) noexcept + { + size_t __sta_prod = [__begin, __end] { + span __sta_exts = __static_extents<_Extents>(__begin, __end); + size_t __ret = 1; + for(auto __ext : __sta_exts) + if (__ext != dynamic_extent) + __ret *= __ext; + return __ret; + }(); + return __extents_prod(__exts, __sta_prod, __begin, __end); + } + template constexpr typename _Extents::index_type __fwd_prod(const _Extents& __exts, size_t __r) noexcept @@ -567,6 +611,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION class mapping; }; +#ifdef __glibcxx_padded_layouts + template + struct layout_left_padded + { + template + class mapping; + }; + + template + struct layout_right_padded + { + template + class mapping; + }; +#endif + namespace __mdspan { template @@ -669,10 +729,34 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION is_same_v, _Mapping>; + template typename _Layout, typename _Mapping> + concept __padded_mapping_of = __mapping_of< + _Layout<_Mapping::padding_value>, _Mapping>; + +#ifdef __glibcxx_padded_layouts + template + constexpr bool __is_left_padded_mapping = __padded_mapping_of< + layout_left_padded, _Mapping>; + + template + constexpr bool __is_right_padded_mapping = __padded_mapping_of< + layout_right_padded, _Mapping>; +#endif + + template + consteval size_t + __get_static_stride() + { return _PaddedMapping::_PaddedStorage::_S_static_stride; } + template concept __standardized_mapping = __mapping_of || __mapping_of - || __mapping_of; + || __mapping_of +#ifdef __glibcxx_padded_layouts + || __is_left_padded_mapping<_Mapping> + || __is_right_padded_mapping<_Mapping> +#endif + ; // A tag type to create internal ctors. class __internal_ctor @@ -726,6 +810,32 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION : mapping(__other.extents(), __mdspan::__internal_ctor{}) { __glibcxx_assert(*this == __other); } +#if __glibcxx_padded_layouts + template + requires __mdspan::__is_left_padded_mapping<_LeftpadMapping> + && is_constructible_v + constexpr + explicit(!is_convertible_v) + mapping(const _LeftpadMapping& __other) noexcept + : mapping(__other.extents(), __mdspan::__internal_ctor{}) + { + constexpr size_t __ostride_sta = __mdspan::__get_static_stride< + _LeftpadMapping>(); + + if constexpr (extents_type::rank() > 1) + { + if constexpr (extents_type::static_extent(0) != dynamic_extent + && __ostride_sta != dynamic_extent) + static_assert(extents_type::static_extent(0) == __ostride_sta); + else + __glibcxx_assert(__other.stride(1) + == __other.extents().extent(0)); + } + } +#endif // __glibcxx_padded_layouts + constexpr mapping& operator=(const mapping&) noexcept = default; @@ -1173,6 +1283,550 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION [[no_unique_address]] _Strides _M_strides; }; +#ifdef __glibcxx_padded_layouts + namespace __mdspan + { + constexpr size_t + __least_multiple(size_t __x, size_t __y) + { + if (__x <= 1) + return __y; + return (__y / __x + (__y % __x != 0)) * __x ; + } + + template + constexpr bool + __is_representable_least_multiple(size_t __x, size_t __y) + { + constexpr auto __y_max = __gnu_cxx::__int_traits<_IndexType>::__max; + if(std::cmp_greater(__y, __y_max)) + return false; + + if(__x <= 1) + return true; + + auto __max_delta = __y_max - static_cast<_IndexType>(__y); + auto __y_mod_x = __y % __x; + auto __delta = (__y_mod_x == 0) ? size_t(0) : (__x - __y_mod_x); + return std::cmp_less_equal(__delta, __max_delta); + } + + template + concept __valid_static_stride = (_Extents::rank() <= 1) + || (_PaddingValue == dynamic_extent) + || (_Extents::static_extent(_LayoutTraits::_S_ext_idx) == dynamic_extent) + || (__is_representable_least_multiple( + _PaddingValue, _Extents::static_extent(_LayoutTraits::_S_ext_idx))); + + template + consteval bool + __is_representable_padded_size() + { + using _IndexType = typename _Extents::index_type; + auto __sta_exts = __static_extents<_Extents>( + _LayoutTraits::_S_unpad_begin, _LayoutTraits::_S_unpad_end); + size_t __max = __gnu_cxx::__int_traits<_IndexType>::__max; + return __static_quotient(__sta_exts, __max / _PaddedStride) != 0; + } + + template + concept __valid_padded_size = (_Rank <= 1) + || (_PaddedStride == dynamic_extent) + || (!__all_static(__static_extents<_Extents>())) + || (__contains_zero(__static_extents<_Extents>())) + || (__is_representable_padded_size<_PaddedStride, _Extents, + _LayoutTraits>()); + + template + constexpr typename _Extents::index_type + __linear_index_leftpad(const _Extents& __exts, _Stride __stride, + _Indices... __indices) + { + // i0 + stride*(i1 + extents.extent(1)*...) + using _IndexType = typename _Extents::index_type; + _IndexType __res = 0; + if constexpr (sizeof...(__indices) > 0) + { + _IndexType __mult = 1; + + auto __update_rest = [&, __pos = 1u](_IndexType __idx) mutable + { + __res += __idx * __mult; + __mult *= __exts.extent(__pos); + ++__pos; + }; + + auto __update = [&](_IndexType __idx, auto... __rest) + { + __res += __idx; + __mult = __stride.extent(0); + (__update_rest(__rest), ...); + }; + __update(__indices...); + } + return __res; + } + + template + struct _LeftPaddedLayoutTraits + { + using _LayoutSame = layout_left; + using _LayoutOther = layout_right; + + constexpr static const size_t _S_ext_idx = 0; + constexpr static const size_t _S_stride_idx = 1; + constexpr static const size_t _S_unpad_begin = 1; + constexpr static const size_t _S_unpad_end = _Rank; + + template + constexpr static auto _S_make_padded_extent( + extents<_IndexType, _StaticStride> __stride, + const extents<_IndexType, _Extents...>& __exts) + { + auto __impl = [&](integer_sequence) + { + return extents<_IndexType, _StaticStride, + (_Extents...[_Is + 1])...>{ + __stride.extent(0), __exts.extent(_Is + 1)...}; + }; + return __impl(make_index_sequence()); + } + }; + + template + class _PaddedStorage + { + using _LayoutSame = typename _LayoutTraits::_LayoutSame; + + public: + using _IndexType = typename _Extents::index_type; + constexpr static size_t _S_rank = _Extents::rank(); + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4372. Weaken Mandates: for dynamic padding values in padded layouts + static_assert((_PaddingValue == dynamic_extent) + || (cmp_less_equal(_PaddingValue, + __gnu_cxx::__int_traits<_IndexType>::__max)), + "padding_value must be representable as index_type"); + + static_assert(__representable_size<_Extents, _IndexType>, + "The size of extents_type must be representable as index_type"); + + static_assert(__valid_static_stride<_Extents, _PaddingValue, + _LayoutTraits>, + "The padded stride must be representable as size_t"); + + static constexpr size_t _S_static_stride = [] consteval + { + constexpr size_t __rank = _Extents::rank(); + if constexpr (__rank <= 1) + return 0; + else + { + constexpr size_t __ext_idx = _LayoutTraits::_S_ext_idx; + constexpr size_t __sta_ext = _Extents::static_extent(__ext_idx); + if constexpr (__sta_ext == 0) + return size_t(0); + else if constexpr (_PaddingValue == dynamic_extent + || __sta_ext == dynamic_extent) + return dynamic_extent; + else + return __least_multiple(_PaddingValue, __sta_ext); + } + }(); + + static_assert(_S_static_stride == dynamic_extent + || cmp_less_equal(_S_static_stride, + __gnu_cxx::__int_traits<_IndexType>::__max), + "Padded stride must be representable as index_type"); + + static_assert(__valid_padded_size<_Extents, _S_static_stride, + _LayoutTraits>); + + constexpr + _PaddedStorage() noexcept + { + if constexpr (_S_rank > 1) + if constexpr (_S_static_stride == dynamic_extent + && _S_static_padextent() != dynamic_extent) + _M_stride = _Stride{_S_static_padextent()}; + } + + constexpr explicit + _PaddedStorage(const _Extents& __exts) + : _M_extents(__exts) + { + if constexpr (!__all_static(__static_extents<_Extents>())) + __glibcxx_assert(__is_representable_extents(_M_extents)); + + if constexpr (_S_rank > 1) + { + _IndexType __stride; + if constexpr (_PaddingValue == dynamic_extent) + __stride = _M_padextent(); + else if constexpr (_S_static_padextent() != dynamic_extent) + return; + else + { + __glibcxx_assert( + __is_representable_least_multiple<_IndexType>( + _PaddingValue, _M_padextent())); + + __stride = static_cast<_IndexType>( + __least_multiple(_PaddingValue, _M_padextent())); + + __glibcxx_assert(__is_representable_extents( + _LayoutTraits::_S_make_padded_extent( + std::dextents<_IndexType, 1>{__stride}, + _M_extents))); + } + _M_stride = _Stride{__stride}; + } + } + + constexpr explicit + _PaddedStorage(const _Extents& __exts, _IndexType __pad) + : _M_extents(__exts) + { + if constexpr (_PaddingValue != dynamic_extent) + __glibcxx_assert(cmp_equal(_PaddingValue, __pad)); + if constexpr (_S_rank > 1 && _S_static_stride == dynamic_extent) + { + __glibcxx_assert( + __is_representable_least_multiple<_IndexType>( + __pad, _M_padextent())); + + _M_stride = _Stride{static_cast<_IndexType>( + __least_multiple(__pad, _M_padextent()))}; + + __glibcxx_assert(__is_representable_extents( + _LayoutTraits::_S_make_padded_extent( + _M_stride, _M_extents))); + } + } + + template + constexpr explicit + _PaddedStorage(const typename _LayoutSame::mapping<_OExtents>& + __other) + : _PaddedStorage(_Extents(__other.extents())) + { + constexpr size_t __stride_idx = _LayoutTraits::_S_stride_idx; + constexpr size_t __ext_idx = _LayoutTraits::_S_ext_idx; + if constexpr (_S_rank > 1 && _PaddingValue != dynamic_extent) + { + static_assert(_S_static_stride == dynamic_extent + || _OExtents::static_extent(__ext_idx) == dynamic_extent + || _S_static_stride == _OExtents::static_extent(__ext_idx), + "The padded stride must be compatible with other"); + + if constexpr (_S_static_stride == dynamic_extent + || _OExtents::static_extent(__stride_idx) == dynamic_extent) + __glibcxx_assert(std::cmp_equal(_M_padstride(), + _M_padextent())); + } + } + + template + constexpr explicit + _PaddedStorage(const typename layout_stride::mapping<_OExtents>& + __other) + : _M_extents(__other.extents()) + { + __glibcxx_assert(cmp_less_equal(__other.required_span_size(), + __gnu_cxx::__int_traits<_IndexType> + ::__max)); + + constexpr size_t __stride_idx = _LayoutTraits::_S_stride_idx; + if constexpr (_S_rank > 1) + { + if constexpr (_PaddingValue != dynamic_extent) + __glibcxx_assert(cmp_equal(__other.stride(__stride_idx), + _M_calc_padstride()) + && "The padded stride must be compatible with other"); + if constexpr (_S_static_stride == dynamic_extent) + _M_stride = _Stride{__other.stride(__stride_idx)}; + } + } + + template + constexpr explicit + _PaddedStorage(_LayoutTraits::_LayoutSame, + const _SamePaddedMapping& __other) + : _M_extents(__other.extents()) + { + if constexpr (_S_rank > 1) + { + static_assert(_PaddingValue == dynamic_extent + || _SamePaddedMapping::padding_value == dynamic_extent + || _PaddingValue == _SamePaddedMapping::padding_value, + "If neither PaddingValue is dynamic_extent, then they must " + "be equal"); + + constexpr size_t __stride_idx = _LayoutTraits::_S_stride_idx; + if constexpr (_PaddingValue != dynamic_extent) + __glibcxx_assert(cmp_equal(__other.stride(__stride_idx), + _M_calc_padstride()) + && "The padded stride must be compatible with other"); + if constexpr (_S_static_stride == dynamic_extent) + _M_stride = _Stride{__other.stride(__stride_idx)}; + } + __glibcxx_assert(cmp_less_equal(__other.required_span_size(), + __gnu_cxx::__int_traits<_IndexType>::__max)); + } + + template + constexpr explicit + _PaddedStorage(_LayoutTraits::_LayoutOther, + const _OtherPaddedMapping& __other) noexcept + : _M_extents(__other.extents()) + { + __glibcxx_assert(cmp_less_equal(__other.required_span_size(), + __gnu_cxx::__int_traits<_IndexType>::__max)); + } + + static constexpr bool + _M_is_always_exhaustive() noexcept + { + if constexpr (_S_rank <= 1) + return true; + else + return _S_static_padextent() != dynamic_extent + && _S_static_stride != dynamic_extent + && _S_static_padextent() == _S_static_stride; + } + + constexpr bool + _M_is_exhaustive() const noexcept + { + if constexpr (_M_is_always_exhaustive()) + return true; + else + return cmp_equal(_M_padextent(), _M_padstride()); + } + + constexpr static size_t + _S_static_padextent() noexcept + { return _Extents::static_extent(_LayoutTraits::_S_ext_idx); } + + constexpr _IndexType + _M_padextent() const noexcept + { return _M_extents.extent(_LayoutTraits::_S_ext_idx); } + + constexpr _IndexType + _M_calc_padstride() const noexcept + { + if constexpr (_S_static_stride != dynamic_extent) + return _S_static_stride; + else if constexpr (_PaddingValue != dynamic_extent) + return __least_multiple(_PaddingValue, _M_padextent()); + else + return _M_padextent(); + } + + constexpr _IndexType + _M_padstride() const noexcept + { return _M_stride.extent(0); } + + constexpr _IndexType + _M_required_span_size() const noexcept + { + if constexpr (_S_rank == 0) + return 1; + else if (__mdspan::__empty(_M_extents)) + return 0; + else + { + size_t __stride = static_cast(_M_padstride()); + size_t __prod_rest = __mdspan::__fwd_prod(_M_extents, + _LayoutTraits::_S_unpad_begin, _LayoutTraits::_S_unpad_end); + size_t __delta = _M_padstride() - _M_padextent(); + return static_cast<_IndexType>(__stride * __prod_rest - __delta); + } + } + + template + constexpr bool + _M_equal(const _SamePaddedMapping& __other) const noexcept + { + return _M_extents == __other.extents() + && (_S_rank < 2 + || cmp_equal(_M_stride.extent(0), + __other.stride(_LayoutTraits::_S_stride_idx))); + } + + using _Stride = std::extents<_IndexType, _S_static_stride>; + [[no_unique_address]] _Stride _M_stride; + [[no_unique_address]] _Extents _M_extents; + }; + } + + template + template + class layout_left_padded<_PaddingValue>::mapping + { + public: + static constexpr size_t padding_value = _PaddingValue; + + using extents_type = _Extents; + using index_type = typename extents_type::index_type; + using size_type = typename extents_type::size_type; + using rank_type = typename extents_type::rank_type; + using layout_type = layout_left_padded; + + private: + static constexpr size_t _S_rank = extents_type::rank(); + using _PaddedStorage = __mdspan::_PaddedStorage<_PaddingValue, + _Extents, __mdspan::_LeftPaddedLayoutTraits<_S_rank>>; + [[no_unique_address]] _PaddedStorage _M_storage; + + consteval friend size_t + __mdspan::__get_static_stride(); + + constexpr index_type + _M_extent(size_t __r) const noexcept + { return _M_storage._M_extents.extent(__r); } + + constexpr index_type + _M_padstride() const noexcept + { return _M_storage._M_stride.extent(0); } + + public: + constexpr + mapping() noexcept + { } + + constexpr + mapping(const mapping&) noexcept = default; + + constexpr + mapping(const extents_type& __exts) + : _M_storage(__exts) + { } + + template<__mdspan::__valid_index_type _OIndexType> + constexpr mapping(const extents_type& __exts, _OIndexType __pad) + : _M_storage(__exts, + __mdspan::__index_type_cast(std::move(__pad))) + { } + + template + requires is_constructible_v + constexpr explicit(!is_convertible_v<_OExtents, extents_type>) + mapping(const layout_left::mapping<_OExtents>& __other) + : _M_storage(__other) + { } + + template + requires is_constructible_v<_OExtents, extents_type> + constexpr explicit(_OExtents::rank() > 0) + mapping(const typename layout_stride::mapping<_OExtents>& __other) + : _M_storage(__other) + { __glibcxx_assert(*this == __other); } + + template + requires __mdspan::__is_left_padded_mapping<_LeftpadMapping> + && is_constructible_v + constexpr explicit(_S_rank > 1 && (padding_value != dynamic_extent + || _LeftpadMapping::padding_value == dynamic_extent)) + mapping(const _LeftpadMapping& __other) + : _M_storage(layout_left{}, __other) + { } + + template + requires (__mdspan::__is_right_padded_mapping<_RightPaddedMapping> + || __mdspan::__mapping_of) + && (_S_rank <= 1) + && is_constructible_v + constexpr explicit(!is_convertible_v< + typename _RightPaddedMapping::extents_type, extents_type>) + mapping(const _RightPaddedMapping& __other) noexcept + : _M_storage(layout_right{}, __other) + { } + + constexpr mapping& + operator=(const mapping&) noexcept = default; + + constexpr const extents_type& + extents() const noexcept { return _M_storage._M_extents; } + + constexpr array + strides() const noexcept + { + array __ret; + if constexpr (_S_rank > 0) + __ret[0] = 1; + if constexpr (_S_rank > 1) + __ret[1] = _M_padstride(); + if constexpr (_S_rank > 2) + for(size_t __i = 2; __i < _S_rank; ++__i) + __ret[__i] = __ret[__i - 1] * _M_extent(__i - 1); + return __ret; + } + + constexpr index_type + required_span_size() const noexcept + { return _M_storage._M_required_span_size(); } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4314. Missing move in mdspan layout mapping::operator() + template<__mdspan::__valid_index_type... _Indices> + requires (sizeof...(_Indices) == _S_rank) + constexpr index_type + operator()(_Indices... __indices) const noexcept + { + return __mdspan::__linear_index_leftpad( + extents(), _M_storage._M_stride, + static_cast(std::move(__indices))...); + } + + static constexpr bool + is_always_exhaustive() noexcept + { return _PaddedStorage::_M_is_always_exhaustive(); } + + constexpr bool + is_exhaustive() noexcept + { return _M_storage._M_is_exhaustive(); } + + static constexpr bool + is_always_unique() noexcept { return true; } + + static constexpr bool + is_always_strided() noexcept { return true; } + + static constexpr bool + is_unique() noexcept { return true; } + + static constexpr bool + is_strided() noexcept { return true; } + + constexpr index_type + stride(rank_type __r) const noexcept + { + __glibcxx_assert(__r < _S_rank); + if (__r == 0) + return 1; + else + return static_cast( + static_cast(_M_padstride()) * + static_cast(__mdspan::__fwd_prod(extents(), 1, __r))); + } + + template + requires(__mdspan::__is_left_padded_mapping<_LeftpadMapping> + && _LeftpadMapping::extents_type::rank() == _S_rank) + friend constexpr bool + operator==(const mapping& __self, const _LeftpadMapping& __other) + noexcept + { return __self._M_storage._M_equal(__other); } + }; +#endif // __glibcxx_padded_layouts + template struct default_accessor { @@ -1370,7 +2024,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION mdspan(data_handle_type __handle, const mapping_type& __mapping, const accessor_type& __accessor) : _M_accessor(__accessor), _M_mapping(__mapping), - _M_handle(std::move(__handle)) + _M_handle(std::move(__handle)) { } template(); // { dg-error "require auto b7 = B<7, std::layout_stride, std::layout_stride>(); // { dg-error "required from" } // { dg-prune-output "must be representable as index_type" } +// { dg-prune-output "static assertion failed" } diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/ctors.cc b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/ctors.cc index 23c0a55dae19..8cba8094abcc 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/ctors.cc +++ b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/ctors.cc @@ -1,6 +1,7 @@ // { dg-do run { target c++23 } } #include +#include "padded_traits.h" #include #include @@ -27,7 +28,6 @@ template VERIFY(std::cmp_equal(m.stride(i), other.stride(i))); } - template constexpr void verify_convertible(From from) @@ -40,7 +40,10 @@ template constexpr void verify_nothrow_convertible(From from) { - static_assert(std::is_nothrow_constructible_v); + if constexpr (is_padded_layout) + static_assert(std::is_constructible_v); + else + static_assert(std::is_nothrow_constructible_v); verify_convertible(from); } @@ -57,7 +60,10 @@ template constexpr void verify_nothrow_constructible(From from) { - static_assert(std::is_nothrow_constructible_v); + if constexpr (is_padded_layout) + static_assert(std::is_constructible_v); + else + static_assert(std::is_nothrow_constructible_v); verify_constructible(from); } @@ -196,6 +202,16 @@ namespace from_extents // ctor: mapping(mapping) namespace from_same_layout { + template + constexpr void + verify_convertible(OExtents exts) + { + using Mapping = typename Layout::mapping; + using OMapping = typename Layout::mapping; + + ::verify_convertible(OMapping(exts)); + } + template constexpr void verify_nothrow_convertible(OExtents exts) @@ -223,8 +239,12 @@ namespace from_same_layout verify_nothrow_convertible>( std::extents{}); - verify_nothrow_constructible>( - std::extents{}); + if constexpr (!is_padded_layout) + verify_nothrow_constructible>( + std::extents{}); + else + verify_convertible>( + std::extents{}); assert_not_constructible< typename Layout::mapping>, @@ -234,8 +254,12 @@ namespace from_same_layout typename Layout::mapping>, typename Layout::mapping>>(); - verify_nothrow_constructible>( - std::extents{1}); + if constexpr (!is_padded_layout) + verify_nothrow_constructible>( + std::extents{1}); + else + verify_convertible>( + std::extents{1}); verify_nothrow_convertible>( std::extents{}); @@ -247,8 +271,12 @@ namespace from_same_layout verify_nothrow_constructible>( std::extents{1}); - verify_nothrow_convertible>( - std::extents{}); + if constexpr (!is_padded_layout) + verify_nothrow_convertible>( + std::extents{}); + else + verify_nothrow_constructible>( + std::extents{}); return true; } @@ -424,11 +452,24 @@ template from_stride::test_all(); } +template typename Layout> + constexpr void + test_padded_all() + { + test_all>(); + test_all>(); + test_all>(); + test_all>(); + } + int main() { test_all(); test_all(); +#if __cplusplus > 202302L + test_padded_all(); +#endif from_left_or_right::test_all(); from_left_or_right::test_all(); diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/empty.cc b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/empty.cc index cbc425f6c159..05188432f144 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/empty.cc +++ b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/empty.cc @@ -35,7 +35,8 @@ template { constexpr Int n1 = std::numeric_limits::max(); constexpr size_t n2 = std::dynamic_extent - 1; - constexpr size_t n = std::cmp_less(n1, n2) ? size_t(n1) : n2; + // Allow some room for padding. + constexpr size_t n = (std::cmp_less(n1, n2) ? size_t(n1) : n2) - 4; verify_all(typename Layout::mapping>{}); verify_all(typename Layout::mapping>{}); @@ -73,7 +74,8 @@ template { constexpr Int n1 = std::numeric_limits::max(); constexpr size_t n2 = std::dynamic_extent - 1; - constexpr Int n = std::cmp_less(n1, n2) ? n1 : Int(n2); + // Allow some room for padding. + constexpr Int n = (std::cmp_less(n1, n2) ? n1 : Int(n2)) - 4; verify_all(make_mapping( std::extents{n, n, n, n})); @@ -121,11 +123,25 @@ template return true; } +template typename Layout> + constexpr bool + test_padded_all() + { + static_assert(test_all>()); + static_assert(test_all>()); + static_assert(test_all>()); + static_assert(test_all>()); + return true; + } + int main() { static_assert(test_all()); static_assert(test_all()); static_assert(test_all()); +#if __cplusplus > 202302L + static_assert(test_padded_all()); +#endif return 0; } diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc index db15e2a48f34..10ce622523d7 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc +++ b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc @@ -2,6 +2,7 @@ #include #include "../int_like.h" +#include "padded_traits.h" #include #include @@ -370,6 +371,37 @@ template<> } }; +#if __cplusplus > 202302L +template + requires is_left_padded + struct TestStride2D + { + static constexpr void + run() + { + using Traits = LayoutTraits()>; + using Extents = typename Traits::extents_type>; + using Mapping = typename Layout::mapping; + constexpr size_t padding_value = Mapping::padding_value; + + Mapping m; + size_t effective_pad = (padding_value == 0 || padding_value == dyn) + ? size_t(1) : padding_value; + + constexpr auto i0 = is_left_padded ? 0 : 1; + VERIFY(m.stride(i0) == 1); + + // The next multiple of padding_value, that's greater or equal + // to exts.extent(0) is the unique value in the range: + // [exts.extent(0), exts.extent(0) + padding_value) + // that is divisible by padding_value. + auto stride = Traits::padded_stride(m); + VERIFY((stride % effective_pad) == 0); + VERIFY(3 <= stride && std::cmp_less(stride, 3 + effective_pad)); + } + }; +#endif + template constexpr void test_stride_2d() @@ -423,6 +455,40 @@ template<> } }; +#if __cplusplus > 202302L +template + requires is_left_padded + struct TestStride3D + { + static constexpr void + run() + { + using Traits = LayoutTraits()>; + using Extents = typename Traits::extents_type>; + using Mapping = typename Layout::mapping; + constexpr size_t padding_value = Mapping::padding_value; + + Mapping m; + size_t effective_pad = (padding_value == 0 || padding_value == dyn) + ? size_t(1) : padding_value; + + constexpr auto i0 = is_left_padded ? 0 : 2; + VERIFY(m.stride(i0) == 1); + + // The next multiple of padding_value, that's greater or equal + // to exts.extent(0) is the unique value in the range: + // [exts.extent(0), exts.extent(0) + padding_value) + // that is divisible by padding_value. + auto stride = Traits::padded_stride(m); + VERIFY((stride % effective_pad) == 0); + VERIFY(3 <= stride && std::cmp_less(stride, 3 + effective_pad)); + + constexpr auto i2 = is_left_padded ? 2 : 0; + VERIFY(stride * 5 == m.stride(i2)); + } + }; +#endif + template constexpr void test_stride_3d() @@ -451,7 +517,8 @@ template test_has_stride_0d() { using Mapping = typename Layout::mapping>; - constexpr bool expected = std::is_same_v; + constexpr bool expected = !(std::is_same_v + || std::is_same_v); static_assert(has_stride == expected); } @@ -595,16 +662,54 @@ template test_has_op_eq(); } +#if __cplusplus > 202302L +template typename Layout> + constexpr bool + test_padded_all() + { + test_all>(); + test_all>(); + test_all>(); + test_all>(); + test_all>(); + return true; + } + +template typename Layout> + constexpr bool + test_padded_has_op_eq() + { + using Traits = LayoutTraits()>; + test_has_op_eq, false>(); + test_has_op_eq, false>(); + test_has_op_eq, false>(); + // The next one looks strange, because it's neither. Somehow, the + // conversion rules seem to be playing a critical role again. + // test_has_op_eq, false>(); + + test_has_op_eq, Layout<6>, true>(); + test_has_op_eq, Layout, true>(); + return true; + } +#endif + int main() { test_all(); test_all(); test_all(); +#if __cplusplus > 202302L + test_padded_all(); +#endif test_has_op_eq(); test_has_op_eq(); test_has_op_eq(); +#if __cplusplus > 202302L + test_padded_has_op_eq(); +#endif + test_has_op_eq_peculiar(); return 0; } diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded.cc b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded.cc new file mode 100644 index 000000000000..d43b84ef875b --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded.cc @@ -0,0 +1,673 @@ +// { dg-do run { target c++26 } } +#include + +#include +#include "../int_like.h" +#include "padded_traits.h" +#include + +constexpr size_t dyn = std::dynamic_extent; + +template typename Layout> + constexpr bool + test_representable_padded_size() + { + using Traits = LayoutTraits()>; + { + using E = typename Traits::extents_type>; + [[maybe_unused]] typename Layout<1>::mapping m1; + } + + { + using E = typename Traits::extents_type>; + [[maybe_unused]] typename Layout<0>::mapping m1; + [[maybe_unused]] typename Layout<1>::mapping m2; + [[maybe_unused]] typename Layout<128>::mapping m3; + [[maybe_unused]] typename Layout<255>::mapping m4; + } + + { + using E = typename Traits::extents_type>; + [[maybe_unused]] typename Layout::mapping m1(E{}, 0); + [[maybe_unused]] typename Layout::mapping m2(E{}, 1); + [[maybe_unused]] typename Layout::mapping m3(E{}, 128); + [[maybe_unused]] typename Layout::mapping m4(E{}, 255); + } + + { + using E = typename Traits::extents_type>; + [[maybe_unused]] typename Layout<0>::mapping m1; + [[maybe_unused]] typename Layout<1>::mapping m2; + [[maybe_unused]] typename Layout<128>::mapping m3; + [[maybe_unused]] typename Layout<255>::mapping m4; + } + return true; + } + +template + constexpr void + test_default_ctor_single(auto canonical_strides) + { + using Traits = LayoutTraits()>; + using E = typename Traits::extents_type; + auto strides = Traits::make_array(canonical_strides); + + typename Layout::template mapping msta; + VERIFY(msta.stride(0) == strides[0]); + VERIFY(msta.stride(1) == strides[1]); + } + + +template typename Layout> + constexpr bool + test_default_ctor() + { + using E1 = std::extents; + test_default_ctor_single, E1>(std::array{1, 4}); + test_default_ctor_single, E1>(std::array{1, 3}); + + using E2 = std::extents; + test_default_ctor_single, E2>(std::array{1, 0}); + test_default_ctor_single, E2>(std::array{1, 0}); + return true; + } + +template typename Layout> + constexpr bool + test_from_exts() + { + using Traits = LayoutTraits()>; + auto exts = Traits::make_extents(std::dextents{3, 5}); + + typename Layout<0>::mapping m0_sta(exts); + VERIFY(Traits::padded_stride(m0_sta) == Traits::padded_extent(exts)); + + typename Layout<1>::mapping m1_sta(exts); + VERIFY(Traits::padded_stride(m1_sta) == Traits::padded_extent(exts)); + + typename Layout<2>::mapping m2_sta(exts); + VERIFY(Traits::padded_stride(m2_sta) == 4); + + typename Layout::mapping mdyn(exts); + VERIFY(Traits::padded_stride(mdyn) == Traits::padded_extent(exts)); + return true; + } + +template + constexpr bool + test_from_pad_single() + { + using Traits = LayoutTraits()>; + auto pad = 3; + auto exts = Traits::make_extents(std::dextents{pad + 1, 5, 7}); + typename Layout::mapping m(exts, CustomPadType{pad}); + VERIFY(std::cmp_equal(Traits::padded_stride(m), 2*pad)); + VERIFY(m.extents() == exts); + return true; + } + +template + constexpr void + test_from_pad() + { + test_from_pad_single(); + static_assert(test_from_pad_single()); + + test_from_pad_single(); + test_from_pad_single(); + test_from_pad_single(); + + using Extents = std::dims<3>; + using Mapping = Layout::template mapping; + static_assert(!std::is_constructible_v); + static_assert(!std::is_constructible_v); + } + +template typename Layout> + constexpr void + test_from_pad_all() + { + test_from_pad>(); + test_from_pad>(); + } + +constexpr bool +is_same_mapping(const auto& lhs, const auto& rhs) +{ + if (lhs.extents().rank() != rhs.extents().rank()) + return false; + + if (lhs.extents() != rhs.extents()) + return false; + + for (size_t i = 0; i < lhs.extents().rank(); ++i) + if (lhs.stride(i) != rhs.stride(i)) + return false; + return true; +} + +enum class ConversionRule +{ + Never, + Always, + Regular +}; + +template +consteval bool +should_convert(auto rule) +{ + if constexpr (rule == ConversionRule::Never) + return false; + if constexpr (rule == ConversionRule::Always) + return true; + else + return std::is_convertible_v; +} + +template + constexpr void + check_convertible(const From& m, auto conversion_rule) + { + VERIFY(is_same_mapping(m, To(m))); + constexpr bool expected = should_convert(conversion_rule); + static_assert(std::is_convertible_v == expected); + } + +template + constexpr void + check_convertible_variants(auto msta, auto conversion_rule) + { + using LayoutFrom = decltype(msta)::layout_type; + constexpr auto cregular = std::cw; + + // There's a twist when both mappings are left-padded. There's two distinct + // ctors: a defaulted copy ctor and a constrained template that enables + // construction from left-padded mappings even if their layout_type is + // different. The two ctors have different rules regarding conversion. + + if constexpr (!std::same_as) + check_convertible>(msta, conversion_rule); + else + check_convertible>(msta, cregular); + + check_convertible>(msta, conversion_rule); + + auto mdyn = typename LayoutFrom::mapping(msta); + check_convertible>(mdyn, conversion_rule); + if constexpr (!std::same_as) + check_convertible>(mdyn, conversion_rule); + else + check_convertible>(mdyn, cregular); + + static_assert(!std::is_constructible_v< + typename LayoutTo::mapping, typename LayoutFrom::mapping>); + }; + +template + constexpr void + test_from_same_1d() + { + using E1 = std::extents; + using E2 = std::extents; + using E3 = std::extents; + constexpr auto cr = std::cw; + + using Traits = LayoutTraits()>; + auto msta = typename Traits::layout_same::mapping(E1{}); + check_convertible_variants(msta, cr); + } + +template + constexpr void + test_from_same_2d() + { + using Traits = LayoutTraits()>; + using E1 = typename Traits::extents_type>; + using E2 = typename Traits::extents_type>; + using E3 = typename Traits::extents_type>; + constexpr auto cr = std::cw; + + auto msta = typename Traits::layout_same::mapping(E1{}); + check_convertible_variants(msta, cr); + } + +template typename Layout> +constexpr bool +test_from_same() +{ + auto check = [](PaddedLayout) + { + test_from_same_1d(); + test_from_same_2d(); + }; + + check(Layout<0>{}); + check(Layout<1>{}); + check(Layout<2>{}); + check(Layout<6>{}); + check(Layout{}); + + // rank == 1 is more permissive: + test_from_same_1d>(); + return true; +} + +template typename Layout, typename E1_, typename E2_, + typename E3_> + constexpr bool + test_from_stride_nd(auto strides_) + { + using Traits = LayoutTraits()>; + using E1 = typename Traits::extents_type; + using E2 = typename Traits::extents_type; + using E3 = typename Traits::extents_type; + auto strides = Traits::make_array(strides_); + + auto check = [&strides](PaddedLayout) + { + auto exts = E1{}; + constexpr auto cr = std::cw; + + auto m = std::layout_stride::mapping(exts, strides); + check_convertible_variants(m, cr); + }; + + check(Layout<0>{}); + check(Layout<1>{}); + check(Layout<2>{}); + check(Layout<6>{}); + check(Layout{}); + return true; + } + +template typename Layout> + constexpr bool + test_from_stride_2d() + { + using E1 = std::extents; + using E2 = std::dims<2>; + using E3 = std::extents; + + auto strides = std::array{1, 6}; + test_from_stride_nd(strides); + return true; + } + +template typename Layout> + constexpr bool + test_from_stride_3d() + { + using E1 = std::extents; + using E2 = std::dims<3>; + using E3 = std::extents; + + auto strides = std::array{1, 6, 6*5}; + test_from_stride_nd(strides); + return true; + } + +template typename Layout> + constexpr bool + test_from_stride() + { + test_from_stride_2d(); + test_from_stride_3d(); + return true; + } + +template typename Layout> + constexpr void + test_from_samepad_0d() + { + using E1 = std::extents; + using E2 = std::extents; + using E3 = std::extents; + + typename Layout<6>::mapping msta{E1{}}; + + auto check = [](To, auto m) + { + constexpr auto cr = std::cw; + check_convertible_variants(m, cr); + }; + + check(Layout<6>{}, msta); + check(Layout{}, msta); + } + +template typename Layout> + constexpr void + test_from_samepad_1d() + { + using E1 = std::extents; + using E2 = std::extents; + using E3 = std::extents; + + typename Layout<6>::mapping msta{E1{}}; + typename Layout::mapping mdyn{E1{}}; + + auto check = [](To, auto m) + { + constexpr auto cr = std::cw; + check_convertible_variants(m, cr); + }; + + // Remember, for rank <= 1 the padding_value is irrelevant. + check(Layout<6>{}, msta); + check(Layout<6>{}, mdyn); + check(Layout{}, msta); + check(Layout{}, mdyn); + } + +template typename Layout> + constexpr void + test_from_samepad_2d() + { + using Traits = LayoutTraits()>; + using E1 = typename Traits::extents_type>; + using E2 = typename Traits::extents_type>; + using E3 = typename Traits::extents_type>; + + typename Layout<6>::mapping msta{E1{}}; + typename Layout::mapping mdyn{E1{}}; + + constexpr auto calways = std::cw; + constexpr auto cnever = std::cw; + + auto check = [](To, auto m, auto cr) + { check_convertible_variants(m, cr); }; + + check(Layout<6>{}, msta, cnever); + check(Layout<6>{}, mdyn, cnever); + check(Layout{}, msta, calways); + check(Layout{}, mdyn, cnever); + } + +template typename Layout> + constexpr bool + test_from_samepad() + { + test_from_samepad_0d(); + test_from_samepad_1d(); + test_from_samepad_2d(); + return true; + } + +template typename Layout> + constexpr bool + test_from_other() + { + using Traits = LayoutTraits()>; + using E1 = std::extents; + using E2 = std::dims<1>; + using E3 = std::extents; + + auto check = [](PaddedLayout) + { + constexpr auto cr = std::cw; + + using layout_other = typename Traits::layout_other; + auto msta = typename layout_other::mapping(E1{}); + check_convertible_variants(msta, cr); + }; + + + // Remember, the padding_value has no effect for rank <= 1. + check(Layout<0>{}); + check(Layout<1>{}); + check(Layout<2>{}); + check(Layout<5>{}); + check(Layout<6>{}); + check(Layout{}); + return true; + } + +template typename Layout> + constexpr bool + test_to_same() + { + using Traits = LayoutTraits()>; + using E1 = typename Traits::extents_type>; + using E2 = typename Traits::extents_type>; + using E3 = typename Traits::extents_type>; + + auto check = [](auto msta) + { + constexpr auto cr = std::cw; + using LayoutSame = typename Traits::layout_same; + check_convertible_variants(msta, cr); + }; + + check(typename Layout<0>::mapping(E1{})); + check(typename Layout<2>::mapping(E1{})); + check(typename Layout<6>::mapping(E1{})); + check(typename Layout::mapping(E1{}, 0)); + check(typename Layout::mapping(E1{}, 2)); + check(typename Layout::mapping(E1{}, 6)); + return true; + } + +template typename Layout> + constexpr bool + test_never_to_other() + { + using Traits = LayoutTraits()>; + using E1 = std::extents; + using E2 = std::dims<1>; + + auto check = [](PaddedLayout, auto exts) + { + using LayoutOther = typename Traits::layout_other; + auto mr = typename LayoutOther::mapping(exts); + auto mlp = typename PaddedLayout::mapping{mr}; + static_assert(!std::is_constructible_v); + }; + + check(Layout<2>{}, E1{}); + check(Layout<2>{}, E2{E1{}}); + return true; + } + +template + constexpr void + test_strides() + { + auto check = [](auto exts) + { + auto m = typename Layout::mapping(exts); + using IndexType = typename decltype(m)::index_type; + constexpr size_t rank = decltype(m)::extents_type::rank(); + + auto strides = m.strides(); + static_assert(std::same_as>); + VERIFY(strides.size() == rank); + for (size_t i = 0; i < strides.size(); ++i) + VERIFY(strides[i] == m.stride(i)); + }; + + check(std::extents()); + check(std::extents(0)); + check(std::extents(3)); + check(std::extents(3, 5, 7)); + check(std::extents(3, 0, 7)); + } + +template typename Layout> + constexpr bool + test_strides_all() + { + test_strides>(); + test_strides>(); + test_strides>(); + test_strides>(); + return true; + } + +template typename Layout> + constexpr void + test_exhaustive_0d() + { + auto exts = std::extents{}; + + auto check = [](auto m) + { + static_assert(m.is_always_exhaustive()); + VERIFY(m.is_exhaustive()); + }; + + check(typename Layout<0>::mapping(exts)); + check(typename Layout<1>::mapping(exts)); + check(typename Layout<2>::mapping(exts)); + check(typename Layout::mapping(exts)); + } + +template typename Layout> +constexpr void + test_exhaustive_1d() + { + auto check_dyn_and_sta = [](PaddedLayout) + { + auto check = [](auto exts) + { + auto m = typename PaddedLayout::mapping(exts); + static_assert(m.is_always_exhaustive()); + VERIFY(m.is_exhaustive()); + }; + + check(std::extents(4)); + check(std::extents{}); + }; + + check_dyn_and_sta(Layout<1>{}); + check_dyn_and_sta(Layout<2>{}); + check_dyn_and_sta(Layout<6>{}); + check_dyn_and_sta(Layout{}); + } + +template typename Layout> + constexpr void + test_exhaustive_3d() + { + using Traits = LayoutTraits()>; + auto exts_dyn = Traits::make_extents(std::extents(4, 5, 7)); + auto exts_sta = Traits::make_extents(std::extents{}); + auto ctrue = std::cw; + auto cfalse= std::cw; + + auto check = [](auto m, auto static_expected, auto runtime_expected) + { + static_assert(m.is_always_exhaustive() == static_expected); + VERIFY(m.is_exhaustive() == runtime_expected); + }; + + check(typename Layout<0>::mapping(exts_sta), ctrue, true); + check(typename Layout<0>::mapping(exts_dyn), cfalse, true); + check(typename Layout<1>::mapping(exts_sta), ctrue, true); + check(typename Layout<1>::mapping(exts_dyn), cfalse, true); + check(typename Layout<2>::mapping(exts_sta), ctrue, true); + check(typename Layout<2>::mapping(exts_dyn), cfalse, true); + check(typename Layout<6>::mapping(exts_dyn), cfalse, false); + check(typename Layout<6>::mapping(exts_sta), cfalse, false); + check(typename Layout::mapping(exts_sta), cfalse, true); + check(typename Layout::mapping(exts_dyn, 2), cfalse, true); + check(typename Layout::mapping(exts_dyn, 3), cfalse, false); + } + +template typename Layout> + constexpr bool + test_exhaustive() + { + test_exhaustive_0d(); + test_exhaustive_1d(); + test_exhaustive_3d(); + return true; + } + +template typename Layout> + constexpr bool + test_op_eq() + { + // The generic cases are handled in layouts/mapping.cc. Here we check + // special cases related to non exhaustive layouts. + using Traits = LayoutTraits()>; + + auto exts_sta = Traits::make_extents(std::extents{}); + auto exts_dyn = std::dims<3>(exts_sta); + auto exts_other = Traits::make_extents(std::extents{}); + + auto m1 = typename Layout<0>::mapping(exts_sta); + auto m2 = typename Layout<7>::mapping(exts_sta); + + VERIFY(m1 == typename Layout<0>::mapping(exts_sta)); + VERIFY(m1 == typename Layout<1>::mapping(exts_sta)); + VERIFY(m1 == typename Layout<2>::mapping(exts_sta)); + VERIFY(m1 == typename Layout<6>::mapping(exts_sta)); + VERIFY(m1 != typename Layout<7>::mapping(exts_sta)); + VERIFY(m1 == typename Layout::mapping(exts_sta)); + VERIFY(m1 != typename Layout::mapping(exts_sta, 7)); + + VERIFY(m1 == typename Layout<0>::mapping(exts_dyn)); + VERIFY(m1 == typename Layout<1>::mapping(exts_dyn)); + VERIFY(m1 == typename Layout<2>::mapping(exts_dyn)); + VERIFY(m1 == typename Layout<6>::mapping(exts_dyn)); + VERIFY(m1 != typename Layout<7>::mapping(exts_dyn)); + VERIFY(m1 == typename Layout::mapping(exts_dyn)); + VERIFY(m1 != typename Layout::mapping(exts_dyn, 7)); + + VERIFY(m2 == typename Layout<7>::mapping(exts_sta)); + VERIFY(m2 == typename Layout::mapping(exts_sta, 7)); + VERIFY(m2 == typename Layout<7>::mapping(exts_dyn)); + VERIFY(m2 == typename Layout::mapping(exts_dyn, 7)); + + VERIFY(m2 != typename Layout<7>::mapping(exts_other)); + VERIFY(m2 != typename Layout::mapping(exts_other, 7)); + return true; + } + +template typename Layout> + constexpr bool + test_required_span_size_overflow() + { + using Traits = LayoutTraits()>; + using Extents = std::dextents; + auto exts = Traits::make_extents(Extents{64, 2}); + auto strides = Traits::make_array(std::array{1, 128}); + auto ms = std::layout_stride::mapping(exts, strides); + auto m = typename Layout::mapping(ms); + VERIFY(is_same_mapping(m, ms)); + VERIFY(m.required_span_size() == ms.required_span_size()); + return true; + } + +template typename Layout> + constexpr bool + test_all() + { + test_representable_padded_size(); + test_default_ctor(); + test_from_exts(); + test_from_stride(); + test_from_samepad(); + test_from_same(); + test_from_other(); + test_to_same(); + test_never_to_other(); + test_strides_all(); + test_exhaustive(); + test_op_eq(); + test_required_span_size_overflow(); + return true; + } + +int +main() +{ + test_all(); + static_assert(test_all()); + + test_from_pad_all(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded_neg.cc b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded_neg.cc new file mode 100644 index 000000000000..f0dbfe9d9c62 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded_neg.cc @@ -0,0 +1,324 @@ +// { dg-do compile { target c++26 } } +#include + +#include "padded_traits.h" +#include + +constexpr size_t dyn = std::dynamic_extent; + +template typename Layout> + constexpr bool + test_from_extens_representable_sta() + { + using E1 = std::extents; + auto m = typename Layout::mapping(E1{}); // { dg-error "required from" } + return true; + } +static_assert(test_from_extens_representable_sta()); // { dg-error "from here" } + +template typename Layout> + constexpr bool + test_from_extents_representable_padded_size() + { + using E1 = std::extents; + using E2 = std::dextents; + + auto m = typename Layout::mapping(E2{E1{}}); // { dg-error "expansion of" } + (void) m; + return true; + } +static_assert(test_from_extents_representable_padded_size()); // { dg-error "expansion of" } + +template typename Layout> + constexpr bool + test_from_extents_representable_stride() + { + using Traits = LayoutTraits()>; + using E1 = typename Traits::extents_type>; + auto m = typename Layout<128>::mapping(E1{129}); // { dg-error "expansion of" } + (void) m; + return true; + } +static_assert(test_from_extents_representable_stride()); // { dg-error "expansion of" } + +template typename Layout> + constexpr bool + test_from_pad_representable_stride() + { + using Traits = LayoutTraits()>; + auto exts = Traits::make_extents(std::dextents(129, 2)); + auto m = typename Layout::mapping(exts, 128); // { dg-error "expansion of" } + return true; + } +static_assert(test_from_pad_representable_stride()); // { dg-error "expansion of" } + +template typename Layout> + constexpr bool + test_from_pad_representable_padded_size() + { + using Traits = LayoutTraits()>; + auto exts = Traits::make_extents(std::dextents(64, 2)); + auto m = typename Layout::mapping(exts, 128); // { dg-error "expansion of" } + return true; + } +static_assert(test_from_pad_representable_padded_size()); // { dg-error "expansion of" } + +template typename Layout> + constexpr bool + test_from_left() + { + using Traits = LayoutTraits()>; + using LayoutSame = typename Traits::layout_same; + auto exts = Traits::make_extents(std::extents{4}); + auto ml = typename LayoutSame::mapping(exts); + + typename Layout<4>::mapping m(ml); // { dg-error "expansion of" } + return true; + } +static_assert(test_from_left()); // { dg-error "required from here" } + +template typename Layout> + constexpr bool + test_from_left_bad_runtime_stride() + { + using Traits = LayoutTraits()>; + auto exts = Traits::make_extents(std::extents{6, 4}); + auto ml = typename Traits::layout_same::mapping(exts); + + typename Layout<4>::mapping m(ml); // { dg-error "expansion of" } + (void) m; + return true; + } +static_assert(test_from_left_bad_runtime_stride()); // { dg-error "expansion of" } + +template typename Layout> + constexpr bool + test_from_left_representable_extents() + { + using Traits = LayoutTraits()>; + auto exts = Traits::make_extents(std::extents{8, 128}); + auto ml = typename Traits::layout_same::mapping(exts); + + typename Layout<8>::mapping> m(ml); // { dg-error "expansion of" } + return true; + } +static_assert(test_from_left_representable_extents()); // { dg-error "expansion of" } + +template typename Layout, size_t PaddingValue> + constexpr bool + test_pad_overflow() + { + auto exts = std::extents{4}; + auto n = size_t(1) << 9; + auto m = typename Layout::mapping(exts, n); + (void) m; + return true; + } +static_assert(test_pad_overflow()); // { dg-error "expansion of" } +static_assert(test_pad_overflow()); // { dg-error "expansion of" } + +template typename Layout, size_t PaddingValue> + constexpr bool + test_from_pad_negative() + { + auto exts = std::extents(4); + auto m = typename Layout::mapping(exts, -1); + (void) m; + return true; + } +static_assert(test_from_pad_negative()); // { dg-error "expansion of" } +static_assert(test_from_pad_negative()); // { dg-error "expansion of" } + +template typename Layout, size_t Pad> + constexpr bool + test_static_pad_same() + { + using Extents = std::extents; + using Mapping = typename Layout::mapping; + auto exts = Extents{4}; + auto m = Mapping(exts, Pad + 1); // { dg-error "expansion of" } + (void) m; + return true; + } +static_assert(test_static_pad_same()); // { dg-error "expansion of" } +static_assert(test_static_pad_same()); // { dg-error "expansion of" } + +template typename Layout> + constexpr bool + test_from_stride_wrong_stride0() + { + using Traits = LayoutTraits()>; + auto e = Traits::make_extents(std::extents{3, 5}); + auto s = Traits::make_array(std::array{2, 7}); + auto ms = std::layout_stride::mapping(e, s); + auto m = typename Layout::mapping(ms); // { dg-error "expansion of" } + (void) m; + return true; + } +static_assert(test_from_stride_wrong_stride0()); // { dg-error "expansion of" } + +template typename Layout> + constexpr bool + test_from_stride_wrong_stride1() + { + using Traits = LayoutTraits()>; + auto e = Traits::make_extents(std::extents(3, 5)); + auto s = Traits::make_array(std::array{1, 3}); + auto ms = std::layout_stride::mapping(e, s); + auto m = typename Layout<2>::mapping(ms); // { dg-error "expansion of" } + (void) m; + return true; + } +static_assert(test_from_stride_wrong_stride1()); // { dg-error "expansion of" } + +template typename Layout> + constexpr bool + test_from_stride_wrong_stride2() + { + using Traits = LayoutTraits()>; + auto e = Traits::make_extents(std::extents(3, 5, 7)); + auto s = Traits::make_array(std::array{1, 4, 21}); + auto ms = std::layout_stride::mapping(e, s); + auto m = typename Layout::mapping(ms); // here (not implemented) + (void) m; + return true; + } +static_assert(test_from_stride_wrong_stride2()); + +template typename Layout> + constexpr bool + test_from_stride_oversized() + { + using Traits = LayoutTraits()>; + auto exts = Traits::make_extents(std::extents{3, 6}); + auto s = Traits::make_array(std::array{1, 128}); + auto ms = std::layout_stride::mapping(exts, s); + + using Mapping = typename Layout::mapping>; + Mapping m(ms); // { dg-error "expansion of" } + (void) m; + return true; + } +static_assert(test_from_stride_oversized()); // { dg-error "expansion of" } + +template typename Layout> + constexpr bool + test_from_samepad_dyn() + { + using Traits = LayoutTraits()>; + auto e = Traits::make_extents(std::extents(3, 5)); + auto mlp = typename Layout::mapping(e); + auto m = typename Layout<2>::mapping(mlp); // { dg-error "expansion of" } + (void) m; + return true; + } +static_assert(test_from_samepad_dyn()); // { dg-error "expansion of" } + +template typename Layout> + constexpr bool + test_from_samepad_sta() + { + using Traits = LayoutTraits()>; + auto e = Traits::make_extents(std::extents{3, 5}); + auto mlp = typename Layout<3>::mapping(e); + auto m = typename Layout<2>::mapping(mlp); // { dg-error "expansion of" } + (void) m; + return true; + } +static_assert(test_from_samepad_sta()); // { dg-error "expansion of" } + +template typename Layout> + constexpr bool + test_from_samepad_oversized() + { + using Traits = LayoutTraits()>; + using E1 = typename Traits::extents_type>; + using E2 = typename Traits::extents_type>; + auto mlp = typename Layout::mapping(E1{}); + auto m = typename Layout::mapping(mlp); // { dg-error "expansion of" } + (void) m; + return true; + } +static_assert(test_from_samepad_oversized()); // { dg-error "expansion of" } + +template typename Layout, size_t RunId> + constexpr bool + test_to_same_not_exhaustive() + { + using Traits = LayoutTraits()>; + using E1 = typename Traits::extents_type>; + using E2 = typename Traits::extents_type>; + + [[maybe_unused]] auto msta = typename Layout<7>::mapping(E1{}); + if constexpr (RunId == 0) + { + auto m = typename Traits::layout_same::mapping(msta); // { dg-error "required from" } + (void) m; + } + if constexpr (RunId == 1) + { + auto m = typename Traits::layout_same::mapping(msta); // { dg-error "expansion of" } + (void) m; + } + + [[maybe_unused]] auto mdyn = typename Layout::mapping(E2{E1{}}, 7); + if constexpr (RunId == 2) + { + auto m = typename Traits::layout_same::mapping(mdyn); // { dg-error "expansion of" } + (void) m; + } + if constexpr (RunId == 3) + { + auto m = typename Traits::layout_same::mapping(mdyn); // { dg-error "expansion of" } + (void) m; + } + return true; + } +static_assert(test_to_same_not_exhaustive()); // { dg-error "expansion of" } +static_assert(test_to_same_not_exhaustive()); // { dg-error "expansion of" } +static_assert(test_to_same_not_exhaustive()); // { dg-error "expansion of" } +static_assert(test_to_same_not_exhaustive()); // { dg-error "expansion of" } + +template typename Layout> + constexpr bool + test_statically_bad_padding_value1() + { + using Traits = LayoutTraits()>; + constexpr auto N = std::numeric_limits::max() - 1; + using Extents = typename Traits::extents_type>; + typename Layout<10>::mapping m; // { dg-error "required from" } + return true; + } +static_assert(test_statically_bad_padding_value1()); // { dg-error "required from" } + +template typename Layout> + constexpr bool + test_statically_bad_padding_value2() + { + using Traits = LayoutTraits()>; + using Extents = typename Traits::extents_type>; + typename Layout<2>::mapping m; // { dg-error "required from" } + return true; + } +static_assert(test_statically_bad_padding_value2()); // { dg-error "required from" } + +template typename Layout> + constexpr bool + test_statically_oversized() + { + using Traits = LayoutTraits()>; + using Extents = typename Traits::extents_type>; + typename Layout<2>::mapping m; // { dg-error "required from" } + return true; + } +static_assert(test_statically_oversized()); // { dg-error "from here" } + +// { dg-prune-output "padding_value must be representable as index_type" } +// { dg-prune-output "non-constant condition for static assertion" } +// { dg-prune-output "called in a constant expression" } +// { dg-prune-output "no matching function" } +// { dg-prune-output "static assertion failed" } +// { dg-prune-output "__glibcxx_assert_fail()" } +// { dg-prune-output "must be compatible with other.stride" } +// { dg-prune-output "padding_value is dynamic_extent" } +// { dg-prune-output "_S_rank <= 1" } diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded_traits.h b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded_traits.h new file mode 100644 index 000000000000..9171d8c1ce1d --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded_traits.h @@ -0,0 +1,73 @@ +#ifndef TEST_MDSPAN_PADDED_TRAITS_H +#define TEST_MDSPAN_PADDED_TRAITS_H + +#include + +template + constexpr static bool is_left_padded = false; + +#if __cplusplus > 202302L +template + constexpr static bool is_left_padded> + = true; +#endif + +template + constexpr bool + is_padded_layout = is_left_padded; + +#if __cplusplus > 202302L + +enum class PaddingSide +{ + Left +}; + +struct DeducePaddingSide +{ + template typename Layout> + constexpr static PaddingSide + from_template() + { return PaddingSide::Left; } + + template + constexpr static PaddingSide + from_typename() + { return PaddingSide::Left; } +}; + +template + struct LayoutTraits; + +template<> + struct LayoutTraits + { + using layout_same = std::layout_left; + using layout_other = std::layout_right; + + template + using extents_type = Extents; + + template + constexpr static extents_type + make_extents(const Extents& exts) + { return exts; } + + template + constexpr static std::array + make_array(const std::array& expected) + { return expected; } + + template + constexpr static auto + padded_stride(const Mapping& m) + { return m.stride(1); } + + template + constexpr static auto + padded_extent(const Extents& exts) + { return exts.extent(0); } + }; + +#endif +#endif From bfd41adc6178abb55d2a019f0d7e755ee097f548 Mon Sep 17 00:00:00 2001 From: Luc Grosheintz Date: Mon, 29 Sep 2025 08:00:19 +0200 Subject: [PATCH 145/216] libstdc++: Implement std::layout_right_padded [PR110352]. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit adds the right padded layout as described in N5014, with LWG4372 (dynamic padding value) and LWG4314 (move in operator()). PR libstdc++/110352 libstdc++-v3/ChangeLog: * include/std/mdspan (_RightPaddedIndices): Traits for right padded layouts. (layout_right::mapping::mapping) New overload for right padded layouts. (layout_right_padded): Add implementation. * src/c++23/std.cc.in (layout_right_padded): Add. * testsuite/23_containers/mdspan/layouts/ctors.cc: Update test for right padded layouts. * testsuite/23_containers/mdspan/layouts/empty.cc: Ditto. * testsuite/23_containers/mdspan/layouts/mapping.cc: Ditto. * testsuite/23_containers/mdspan/layouts/padded.cc: Ditto. * testsuite/23_containers/mdspan/layouts/padded_neg.cc: Ditto. * testsuite/23_containers/mdspan/layouts/padded_traits.h: Ditto. Reviewed-by: Tomasz Kamiński Signed-off-by: Luc Grosheintz --- libstdc++-v3/include/std/mdspan | 248 ++++++++++++++++++ libstdc++-v3/src/c++23/std.cc.in | 5 +- .../23_containers/mdspan/layouts/ctors.cc | 1 + .../23_containers/mdspan/layouts/empty.cc | 1 + .../23_containers/mdspan/layouts/mapping.cc | 6 +- .../23_containers/mdspan/layouts/padded.cc | 4 + .../mdspan/layouts/padded_neg.cc | 28 ++ .../mdspan/layouts/padded_traits.h | 84 +++++- 8 files changed, 369 insertions(+), 8 deletions(-) diff --git a/libstdc++-v3/include/std/mdspan b/libstdc++-v3/include/std/mdspan index 7f14ca613f33..6714b19a8843 100644 --- a/libstdc++-v3/include/std/mdspan +++ b/libstdc++-v3/include/std/mdspan @@ -977,6 +977,34 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION : mapping(__other.extents(), __mdspan::__internal_ctor{}) { __glibcxx_assert(*this == __other); } +#if __glibcxx_padded_layouts + template + requires __mdspan::__is_right_padded_mapping<_RightPaddedMapping> + && is_constructible_v + constexpr + explicit(!is_convertible_v) + mapping(const _RightPaddedMapping& __other) noexcept + : mapping(__other.extents(), __mdspan::__internal_ctor{}) + { + constexpr size_t __rank = extents_type::rank(); + constexpr size_t __ostride_sta = __mdspan::__get_static_stride< + _RightPaddedMapping>(); + + if constexpr (__rank > 1) + { + if constexpr (extents_type::static_extent(__rank - 1) != dynamic_extent + && __ostride_sta != dynamic_extent) + static_assert(extents_type::static_extent(__rank - 1) + == __ostride_sta); + else + __glibcxx_assert(__other.stride(__rank - 2) + == __other.extents().extent(__rank - 1)); + } + } +#endif + constexpr mapping& operator=(const mapping&) noexcept = default; @@ -1370,6 +1398,37 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __res; } + template + constexpr typename _Extents::index_type + __linear_index_rightpad(const _Extents& __exts, _Stride __stride, + _Indices... __indices) + { + // i[n-1] + stride*(i[n-2] + extents.extent(n-2])*...) + using _IndexType = typename _Extents::index_type; + _IndexType __res = 0; + if constexpr (sizeof...(__indices) > 0) + { + _IndexType __mult = 1; + array<_IndexType, sizeof...(__indices)> __ind_arr{__indices...}; + + auto __update_rest = [&, __pos = __exts.rank()-1](_IndexType) mutable + { + --__pos; + __res += __ind_arr[__pos] * __mult; + __mult *= __exts.extent(__pos); + }; + + auto __update = [&](_IndexType, auto... __rest) + { + __res += __ind_arr[__exts.rank() - 1]; + __mult = __stride.extent(0); + (__update_rest(__rest), ...); + }; + __update(__indices...); + } + return __res; + } + template struct _LeftPaddedLayoutTraits { @@ -1396,6 +1455,31 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } }; + template + struct _RightPaddedLayoutTraits + { + using _LayoutSame = layout_right; + using _LayoutOther = layout_left; + + constexpr static size_t _S_ext_idx = _Rank - 1; + constexpr static size_t _S_stride_idx = _Rank - 2; + constexpr static size_t _S_unpad_begin = 0; + constexpr static size_t _S_unpad_end = _Rank - 1; + + template + constexpr static auto _S_make_padded_extent( + extents<_IndexType, _StaticStride> __stride, + const extents<_IndexType, _Extents...>& __exts) + { + auto __impl = [&](integer_sequence) + { + return extents<_IndexType, (_Extents...[_Is])..., _StaticStride>{ + __exts.extent(_Is)..., __stride.extent(0)}; + }; + return __impl(make_index_sequence()); + } + }; + template class _PaddedStorage { @@ -1825,6 +1909,170 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION noexcept { return __self._M_storage._M_equal(__other); } }; + + template + template + class layout_right_padded<_PaddingValue>::mapping { + public: + static constexpr size_t padding_value = _PaddingValue; + using extents_type = _Extents; + using index_type = typename extents_type::index_type; + using size_type = typename extents_type::size_type; + using rank_type = typename extents_type::rank_type; + using layout_type = layout_right_padded<_PaddingValue>; + + private: + static constexpr size_t _S_rank = extents_type::rank(); + using _PaddedStorage = __mdspan::_PaddedStorage<_PaddingValue, + _Extents, __mdspan::_RightPaddedLayoutTraits<_S_rank>>; + [[no_unique_address]] _PaddedStorage _M_storage; + + consteval friend size_t + __mdspan::__get_static_stride(); + + constexpr index_type + _M_extent(size_t __r) const noexcept + { return _M_storage._M_extents.extent(__r); } + + constexpr index_type + _M_padstride() const noexcept + { return _M_storage._M_stride.extent(0); } + + public: + constexpr + mapping() noexcept + { } + + constexpr + mapping(const mapping&) noexcept = default; + + constexpr + mapping(const extents_type& __exts) + : _M_storage(__exts) + { } + + template<__mdspan::__valid_index_type _OIndexType> + constexpr mapping(const extents_type& __exts, _OIndexType __pad) + : _M_storage(__exts, + __mdspan::__index_type_cast(std::move(__pad))) + { } + + template + requires is_constructible_v + constexpr explicit(!is_convertible_v<_OExtents, extents_type>) + mapping(const layout_right::mapping<_OExtents>& __other) + : _M_storage(__other) + { } + + template + requires is_constructible_v<_OExtents, extents_type> + constexpr explicit(_OExtents::rank() > 0) + mapping(const typename layout_stride::mapping<_OExtents>& __other) + : _M_storage(__other) + { __glibcxx_assert(*this == __other); } + + template + requires __mdspan::__is_right_padded_mapping<_RightPaddedMapping> + && is_constructible_v + constexpr explicit(_S_rank > 1 && (padding_value != dynamic_extent + || _RightPaddedMapping::padding_value == dynamic_extent)) + mapping(const _RightPaddedMapping& __other) + : _M_storage(layout_right{}, __other) + { } + + template + requires (__mdspan::__is_left_padded_mapping<_LeftPaddedMapping> + || __mdspan::__mapping_of) + && (_S_rank <= 1) + && is_constructible_v + constexpr explicit(!is_convertible_v< + typename _LeftPaddedMapping::extents_type, extents_type>) + mapping(const _LeftPaddedMapping& __other) noexcept + : _M_storage(layout_left{}, __other) + { } + + constexpr mapping& operator=(const mapping&) noexcept = default; + + constexpr const extents_type& + extents() const noexcept { return _M_storage._M_extents; } + + constexpr array + strides() const noexcept + { + array __ret; + if constexpr (_S_rank > 0) + __ret[_S_rank - 1] = 1; + if constexpr (_S_rank > 1) + __ret[_S_rank - 2] = _M_padstride(); + if constexpr (_S_rank > 2) + for(size_t __i = _S_rank - 2; __i > 0; --__i) + __ret[__i - 1] = __ret[__i] * _M_extent(__i); + return __ret; + } + + constexpr index_type + required_span_size() const noexcept + { return _M_storage._M_required_span_size(); } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4314. Missing move in mdspan layout mapping::operator() + template<__mdspan::__valid_index_type... _Indices> + requires (sizeof...(_Indices) == _S_rank) + constexpr index_type + operator()(_Indices... __indices) const noexcept + { + return __mdspan::__linear_index_rightpad( + extents(), _M_storage._M_stride, + static_cast(std::move(__indices))...); + } + + static constexpr bool + is_always_exhaustive() noexcept + { return _PaddedStorage::_M_is_always_exhaustive(); } + + constexpr bool + is_exhaustive() noexcept + { return _M_storage._M_is_exhaustive(); } + + static constexpr bool + is_always_unique() noexcept { return true; } + + static constexpr bool + is_always_strided() noexcept { return true; } + + static constexpr bool + is_unique() noexcept { return true; } + + static constexpr bool + is_strided() noexcept { return true; } + + constexpr index_type + stride(rank_type __r) const noexcept + { + __glibcxx_assert(__r < _S_rank); + if constexpr (_S_rank <= 1) + return 1; + else if (__r == _S_rank - 1) + return 1; + else if (__r == _S_rank - 2) + return _M_padstride(); + else + return static_cast( + static_cast(_M_padstride()) * + static_cast(__mdspan::__fwd_prod( + extents(), __r + 1, _S_rank - 1))); + } + + template + requires(__mdspan::__is_right_padded_mapping<_RightPaddedMapping> + && _RightPaddedMapping::extents_type::rank() == _S_rank) + friend constexpr bool + operator==(const mapping& __self, const _RightPaddedMapping& __other) + noexcept + { return __self._M_storage._M_equal(__other); } + }; #endif // __glibcxx_padded_layouts template diff --git a/libstdc++-v3/src/c++23/std.cc.in b/libstdc++-v3/src/c++23/std.cc.in index f10bab59e2ce..c1b4e4c88b76 100644 --- a/libstdc++-v3/src/c++23/std.cc.in +++ b/libstdc++-v3/src/c++23/std.cc.in @@ -1871,9 +1871,10 @@ export namespace std using std::mdspan; #if __glibcxx_padded_layouts using std::layout_left_padded; + using std::layout_right_padded; #endif - // FIXME layout_right_padded, strided_slice, submdspan_mapping_result, - // full_extent_t, full_extent, submdspan_extents, mdsubspan + // FIXME strided_slice, submdspan_mapping_result, full_extent_t, full_extent, + // submdspan_extents, mdsubspan } #endif diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/ctors.cc b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/ctors.cc index 8cba8094abcc..27065a0dfc6e 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/ctors.cc +++ b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/ctors.cc @@ -469,6 +469,7 @@ main() test_all(); #if __cplusplus > 202302L test_padded_all(); + test_padded_all(); #endif from_left_or_right::test_all(); diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/empty.cc b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/empty.cc index 05188432f144..8840d07879cc 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/empty.cc +++ b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/empty.cc @@ -142,6 +142,7 @@ main() static_assert(test_all()); #if __cplusplus > 202302L static_assert(test_padded_all()); + static_assert(test_padded_all()); #endif return 0; } diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc index 10ce622523d7..d1486e4e11c8 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc +++ b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc @@ -373,7 +373,7 @@ template<> #if __cplusplus > 202302L template - requires is_left_padded + requires is_left_padded || is_right_padded struct TestStride2D { static constexpr void @@ -457,7 +457,7 @@ template<> #if __cplusplus > 202302L template - requires is_left_padded + requires is_left_padded || is_right_padded struct TestStride3D { static constexpr void @@ -701,6 +701,7 @@ main() test_all(); #if __cplusplus > 202302L test_padded_all(); + test_padded_all(); #endif test_has_op_eq(); @@ -708,6 +709,7 @@ main() test_has_op_eq(); #if __cplusplus > 202302L test_padded_has_op_eq(); + test_padded_has_op_eq(); #endif test_has_op_eq_peculiar(); diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded.cc b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded.cc index d43b84ef875b..cf4821a3c74f 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded.cc +++ b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded.cc @@ -668,6 +668,10 @@ main() test_all(); static_assert(test_all()); + test_all(); + static_assert(test_all()); + test_from_pad_all(); + test_from_pad_all(); return 0; } diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded_neg.cc b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded_neg.cc index f0dbfe9d9c62..a758f74287f2 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded_neg.cc @@ -15,6 +15,7 @@ template typename Layout> return true; } static_assert(test_from_extens_representable_sta()); // { dg-error "from here" } +static_assert(test_from_extens_representable_sta()); // { dg-error "from here" } template typename Layout> constexpr bool @@ -28,6 +29,7 @@ template typename Layout> return true; } static_assert(test_from_extents_representable_padded_size()); // { dg-error "expansion of" } +static_assert(test_from_extents_representable_padded_size()); // { dg-error "expansion of" } template typename Layout> constexpr bool @@ -40,6 +42,7 @@ template typename Layout> return true; } static_assert(test_from_extents_representable_stride()); // { dg-error "expansion of" } +static_assert(test_from_extents_representable_stride()); // { dg-error "expansion of" } template typename Layout> constexpr bool @@ -51,6 +54,7 @@ template typename Layout> return true; } static_assert(test_from_pad_representable_stride()); // { dg-error "expansion of" } +static_assert(test_from_pad_representable_stride()); // { dg-error "expansion of" } template typename Layout> constexpr bool @@ -62,6 +66,7 @@ template typename Layout> return true; } static_assert(test_from_pad_representable_padded_size()); // { dg-error "expansion of" } +static_assert(test_from_pad_representable_padded_size()); // { dg-error "expansion of" } template typename Layout> constexpr bool @@ -76,6 +81,7 @@ template typename Layout> return true; } static_assert(test_from_left()); // { dg-error "required from here" } +static_assert(test_from_left()); // { dg-error "required from here" } template typename Layout> constexpr bool @@ -90,6 +96,7 @@ template typename Layout> return true; } static_assert(test_from_left_bad_runtime_stride()); // { dg-error "expansion of" } +static_assert(test_from_left_bad_runtime_stride()); // { dg-error "expansion of" } template typename Layout> constexpr bool @@ -103,6 +110,7 @@ template typename Layout> return true; } static_assert(test_from_left_representable_extents()); // { dg-error "expansion of" } +static_assert(test_from_left_representable_extents()); // { dg-error "expansion of" } template typename Layout, size_t PaddingValue> constexpr bool @@ -116,6 +124,8 @@ template typename Layout, size_t PaddingValue> } static_assert(test_pad_overflow()); // { dg-error "expansion of" } static_assert(test_pad_overflow()); // { dg-error "expansion of" } +static_assert(test_pad_overflow()); // { dg-error "expansion of" } +static_assert(test_pad_overflow()); // { dg-error "expansion of" } template typename Layout, size_t PaddingValue> constexpr bool @@ -128,6 +138,8 @@ template typename Layout, size_t PaddingValue> } static_assert(test_from_pad_negative()); // { dg-error "expansion of" } static_assert(test_from_pad_negative()); // { dg-error "expansion of" } +static_assert(test_from_pad_negative()); // { dg-error "expansion of" } +static_assert(test_from_pad_negative()); // { dg-error "expansion of" } template typename Layout, size_t Pad> constexpr bool @@ -142,6 +154,8 @@ template typename Layout, size_t Pad> } static_assert(test_static_pad_same()); // { dg-error "expansion of" } static_assert(test_static_pad_same()); // { dg-error "expansion of" } +static_assert(test_static_pad_same()); // { dg-error "expansion of" } +static_assert(test_static_pad_same()); // { dg-error "expansion of" } template typename Layout> constexpr bool @@ -156,6 +170,7 @@ template typename Layout> return true; } static_assert(test_from_stride_wrong_stride0()); // { dg-error "expansion of" } +static_assert(test_from_stride_wrong_stride0()); // { dg-error "expansion of" } template typename Layout> constexpr bool @@ -170,6 +185,7 @@ template typename Layout> return true; } static_assert(test_from_stride_wrong_stride1()); // { dg-error "expansion of" } +static_assert(test_from_stride_wrong_stride1()); // { dg-error "expansion of" } template typename Layout> constexpr bool @@ -184,6 +200,7 @@ template typename Layout> return true; } static_assert(test_from_stride_wrong_stride2()); +static_assert(test_from_stride_wrong_stride2()); template typename Layout> constexpr bool @@ -200,6 +217,7 @@ template typename Layout> return true; } static_assert(test_from_stride_oversized()); // { dg-error "expansion of" } +static_assert(test_from_stride_oversized()); // { dg-error "expansion of" } template typename Layout> constexpr bool @@ -213,6 +231,7 @@ template typename Layout> return true; } static_assert(test_from_samepad_dyn()); // { dg-error "expansion of" } +static_assert(test_from_samepad_dyn()); // { dg-error "expansion of" } template typename Layout> constexpr bool @@ -226,6 +245,7 @@ template typename Layout> return true; } static_assert(test_from_samepad_sta()); // { dg-error "expansion of" } +static_assert(test_from_samepad_sta()); // { dg-error "expansion of" } template typename Layout> constexpr bool @@ -240,6 +260,7 @@ template typename Layout> return true; } static_assert(test_from_samepad_oversized()); // { dg-error "expansion of" } +static_assert(test_from_samepad_oversized()); // { dg-error "expansion of" } template typename Layout, size_t RunId> constexpr bool @@ -278,6 +299,10 @@ static_assert(test_to_same_not_exhaustive()); // { d static_assert(test_to_same_not_exhaustive()); // { dg-error "expansion of" } static_assert(test_to_same_not_exhaustive()); // { dg-error "expansion of" } static_assert(test_to_same_not_exhaustive()); // { dg-error "expansion of" } +static_assert(test_to_same_not_exhaustive()); // { dg-error "expansion of" } +static_assert(test_to_same_not_exhaustive()); // { dg-error "expansion of" } +static_assert(test_to_same_not_exhaustive()); // { dg-error "expansion of" } +static_assert(test_to_same_not_exhaustive()); // { dg-error "expansion of" } template typename Layout> constexpr bool @@ -290,6 +315,7 @@ template typename Layout> return true; } static_assert(test_statically_bad_padding_value1()); // { dg-error "required from" } +static_assert(test_statically_bad_padding_value1()); // { dg-error "required from" } template typename Layout> constexpr bool @@ -301,6 +327,7 @@ template typename Layout> return true; } static_assert(test_statically_bad_padding_value2()); // { dg-error "required from" } +static_assert(test_statically_bad_padding_value2()); // { dg-error "required from" } template typename Layout> constexpr bool @@ -312,6 +339,7 @@ template typename Layout> return true; } static_assert(test_statically_oversized()); // { dg-error "from here" } +static_assert(test_statically_oversized()); // { dg-error "from here" } // { dg-prune-output "padding_value must be representable as index_type" } // { dg-prune-output "non-constant condition for static assertion" } diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded_traits.h b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded_traits.h index 9171d8c1ce1d..788ae82fcc49 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded_traits.h +++ b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded_traits.h @@ -12,15 +12,34 @@ template = true; #endif +template + constexpr static bool is_right_padded = false; + +#if __cplusplus > 202302L +template + constexpr static bool is_right_padded> + = true; +#endif + template constexpr bool - is_padded_layout = is_left_padded; + is_padded_layout = is_left_padded || is_right_padded; #if __cplusplus > 202302L +template + constexpr auto + dynamic_extents_array(const Extents& exts) + { + std::array ret; + for(size_t i = 0; i < Extents::rank(); ++i) + ret[i] = exts.extent(i); + return ret; + } enum class PaddingSide { - Left + Left, + Right }; struct DeducePaddingSide @@ -28,12 +47,22 @@ struct DeducePaddingSide template typename Layout> constexpr static PaddingSide from_template() - { return PaddingSide::Left; } + { + if constexpr (std::same_as, std::layout_left_padded<0>>) + return PaddingSide::Left; + else + return PaddingSide::Right; + } template constexpr static PaddingSide from_typename() - { return PaddingSide::Left; } + { + if constexpr (is_left_padded) + return PaddingSide::Left; + else + return PaddingSide::Right; + } }; template @@ -69,5 +98,52 @@ template<> { return exts.extent(0); } }; +template<> + struct LayoutTraits + { + using layout_same = std::layout_right; + using layout_other = std::layout_left; + + template + constexpr static auto + make_extents(const std::extents& exts) + { + constexpr size_t rank = sizeof...(Extents); + auto impl = [&](std::index_sequence) + { + auto dyn_exts = make_array(dynamic_extents_array(exts)); + return std::extents(dyn_exts); + }; + return impl(std::make_index_sequence()); + } + + template + using extents_type = decltype(make_extents(std::declval())); + + template + constexpr static std::array + make_array(std::array a) + { + std::ranges::reverse(a); + return a; + } + + template + constexpr static auto + padded_stride(const Mapping& m) + { + auto rank = Mapping::extents_type::rank(); + return m.stride(rank - 2); + } + + template + constexpr static auto + padded_extent(const Extents& exts) + { + auto rank = Extents::rank(); + return exts.extent(rank - 1); + } + }; + #endif #endif From 6b999bf40090f356c5bb5ff8a82e7e0dc4c4ae05 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Wed, 8 Oct 2025 11:38:12 +0200 Subject: [PATCH 146/216] Do not expect 8 byte vectorization with ia32 We are not considering ia32 to be TARGET_MMX_WITH_SSE so the testcase cannot work there. PR target/120091 gcc/testsuite/ * gcc.target/i386/pr119919.c: Only check for vectorization when !ia32. --- gcc/testsuite/gcc.target/i386/pr119919.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gcc/testsuite/gcc.target/i386/pr119919.c b/gcc/testsuite/gcc.target/i386/pr119919.c index e39819f682db..bf11f9171925 100644 --- a/gcc/testsuite/gcc.target/i386/pr119919.c +++ b/gcc/testsuite/gcc.target/i386/pr119919.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2 -msse2 -fdump-tree-vect-details -mtune=znver1" } */ + int a[9*9]; bool b[9]; void test() @@ -10,4 +11,4 @@ void test() } } -/* { dg-final { scan-tree-dump "loop vectorized using 8 byte vectors" "vect" } } */ +/* { dg-final { scan-tree-dump "loop vectorized using 8 byte vectors" "vect" { target { ! ia32 } } } } */ From 5733ecea0795b3b4f152dc33bb3aacd4ecfcf05f Mon Sep 17 00:00:00 2001 From: Luc Grosheintz Date: Tue, 30 Sep 2025 12:55:18 +0200 Subject: [PATCH 147/216] libstdc++: Improve and cleanup mdspan related code. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The improvement is that in __index_type_cast, we don't need to check at runtime if we know that _IndexType is smaller than _OIndexType. The cleanup is whitespace (overlength lines) in , grouping is_always_foo and is_foo together, and de-uglifying a variable in test code. libstdc++-v3/ChangeLog: * include/std/mdspan (__mdspan::__index_type_cast): Optimize by skipping a __glibcxx_assert if it's know at compile-time. (std::layout_left_padded, std::layout_righ_padded): Reorder is_always_strided and is_unique member functions. * testsuite/23_containers/mdspan/int_like.h: Rename _M_i to value. Reviewed-by: Jonathan Wakely Reviewed-by: Tomasz Kamiński Signed-off-by: Luc Grosheintz --- libstdc++-v3/include/std/mdspan | 42 ++++++++++++------- .../testsuite/23_containers/mdspan/int_like.h | 12 +++--- 2 files changed, 32 insertions(+), 22 deletions(-) diff --git a/libstdc++-v3/include/std/mdspan b/libstdc++-v3/include/std/mdspan index 6714b19a8843..8d2421819a55 100644 --- a/libstdc++-v3/include/std/mdspan +++ b/libstdc++-v3/include/std/mdspan @@ -77,11 +77,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { if constexpr (std::is_integral_v<_OIndexType>) { - __glibcxx_assert(cmp_less_equal(__other, - __gnu_cxx::__int_traits<_IndexType>::__max)); + constexpr _IndexType __index_type_max + = __gnu_cxx::__int_traits<_IndexType>::__max; + constexpr _OIndexType __oindex_type_max + = __gnu_cxx::__int_traits<_OIndexType>::__max; + + if constexpr (__index_type_max < __oindex_type_max) + __glibcxx_assert(cmp_less_equal(__other, __index_type_max)); + if constexpr (std::is_signed_v<_OIndexType>) __glibcxx_assert(__other >= 0); - return std::move(__other); + return static_cast<_IndexType>(__other); } else { @@ -821,8 +827,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION mapping(const _LeftpadMapping& __other) noexcept : mapping(__other.extents(), __mdspan::__internal_ctor{}) { - constexpr size_t __ostride_sta = __mdspan::__get_static_stride< - _LeftpadMapping>(); + constexpr size_t __ostride_sta + = __mdspan::__get_static_stride<_LeftpadMapping>(); if constexpr (extents_type::rank() > 1) { @@ -981,7 +987,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template requires __mdspan::__is_right_padded_mapping<_RightPaddedMapping> && is_constructible_v + typename _RightPaddedMapping::extents_type> constexpr explicit(!is_convertible_v) @@ -989,8 +995,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION : mapping(__other.extents(), __mdspan::__internal_ctor{}) { constexpr size_t __rank = extents_type::rank(); - constexpr size_t __ostride_sta = __mdspan::__get_static_stride< - _RightPaddedMapping>(); + constexpr size_t __ostride_sta + = __mdspan::__get_static_stride<_RightPaddedMapping>(); if constexpr (__rank > 1) { @@ -1441,7 +1447,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION constexpr static const size_t _S_unpad_end = _Rank; template - constexpr static auto _S_make_padded_extent( + constexpr static auto + _S_make_padded_extent( extents<_IndexType, _StaticStride> __stride, const extents<_IndexType, _Extents...>& __exts) { @@ -1467,7 +1474,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION constexpr static size_t _S_unpad_end = _Rank - 1; template - constexpr static auto _S_make_padded_extent( + constexpr static auto + _S_make_padded_extent( extents<_IndexType, _StaticStride> __stride, const extents<_IndexType, _Extents...>& __exts) { @@ -1792,7 +1800,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { } template<__mdspan::__valid_index_type _OIndexType> - constexpr mapping(const extents_type& __exts, _OIndexType __pad) + constexpr + mapping(const extents_type& __exts, _OIndexType __pad) : _M_storage(__exts, __mdspan::__index_type_cast(std::move(__pad))) { } @@ -1881,10 +1890,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION is_always_unique() noexcept { return true; } static constexpr bool - is_always_strided() noexcept { return true; } + is_unique() noexcept { return true; } static constexpr bool - is_unique() noexcept { return true; } + is_always_strided() noexcept { return true; } static constexpr bool is_strided() noexcept { return true; } @@ -1952,7 +1961,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { } template<__mdspan::__valid_index_type _OIndexType> - constexpr mapping(const extents_type& __exts, _OIndexType __pad) + constexpr + mapping(const extents_type& __exts, _OIndexType __pad) : _M_storage(__exts, __mdspan::__index_type_cast(std::move(__pad))) { } @@ -2040,10 +2050,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION is_always_unique() noexcept { return true; } static constexpr bool - is_always_strided() noexcept { return true; } + is_unique() noexcept { return true; } static constexpr bool - is_unique() noexcept { return true; } + is_always_strided() noexcept { return true; } static constexpr bool is_strided() noexcept { return true; } diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/int_like.h b/libstdc++-v3/testsuite/23_containers/mdspan/int_like.h index 310dd8ddf207..e9172c134559 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/int_like.h +++ b/libstdc++-v3/testsuite/23_containers/mdspan/int_like.h @@ -15,7 +15,7 @@ template public: explicit CustomIndexType(int i) - : _M_i(i) + : value(i) { } CustomIndexType() = delete; @@ -31,25 +31,25 @@ template constexpr operator int() const noexcept requires (Kind == CustomIndexKind::Const) - { return _M_i; } + { return value; } constexpr operator int() const requires (Kind == CustomIndexKind::Throwing) - { return _M_i; } + { return value; } constexpr operator int() noexcept requires (Kind == CustomIndexKind::Mutating) - { return _M_i; } + { return value; } constexpr operator int() && noexcept requires (Kind == CustomIndexKind::RValue) - { return _M_i; } + { return value; } private: - int _M_i; + int value; }; using IntLike = CustomIndexType; From 61061664e89410a023d21b486f37cf687124f8aa Mon Sep 17 00:00:00 2001 From: Luc Grosheintz Date: Thu, 2 Oct 2025 11:27:14 +0200 Subject: [PATCH 148/216] libstdc++: Implement strided_slice from . [PR110352] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds strided_slice as standardized in N5014. Also creates the internal feature testing macro for submdspan. PR libstdc++/110352 libstdc++-v3/ChangeLog: * include/bits/version.def (submdspan): New internal macro. * include/bits/version.h: Regenerate. * include/std/mdspan (strided_slice): New class. * src/c++23/std.cc.in (strided_slice): Add. * testsuite/23_containers/mdspan/submdspan/strided_slice.cc: New test. * testsuite/23_containers/mdspan/submdspan/strided_slice_neg.cc: New test. Reviewed-by: Jonathan Wakely Reviewed-by: Tomasz Kamiński Signed-off-by: Luc Grosheintz --- libstdc++-v3/include/bits/version.def | 9 ++++ libstdc++-v3/include/bits/version.h | 9 ++++ libstdc++-v3/include/std/mdspan | 21 +++++++++ libstdc++-v3/src/c++23/std.cc.in | 3 +- .../mdspan/submdspan/strided_slice.cc | 46 +++++++++++++++++++ .../mdspan/submdspan/strided_slice_neg.cc | 19 ++++++++ 6 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice.cc create mode 100644 libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice_neg.cc diff --git a/libstdc++-v3/include/bits/version.def b/libstdc++-v3/include/bits/version.def index 9fe3ad2feda1..7c91a18c6861 100644 --- a/libstdc++-v3/include/bits/version.def +++ b/libstdc++-v3/include/bits/version.def @@ -1075,6 +1075,15 @@ ftms = { }; }; +ftms = { + name = submdspan; + no_stdname = true; // TODO: change once complete + values = { + v = 1; + cxxmin = 26; + }; +}; + ftms = { name = ssize; values = { diff --git a/libstdc++-v3/include/bits/version.h b/libstdc++-v3/include/bits/version.h index d9bf5c8145a0..044d756de196 100644 --- a/libstdc++-v3/include/bits/version.h +++ b/libstdc++-v3/include/bits/version.h @@ -1202,6 +1202,15 @@ #endif /* !defined(__cpp_lib_padded_layouts) && defined(__glibcxx_want_padded_layouts) */ #undef __glibcxx_want_padded_layouts +#if !defined(__cpp_lib_submdspan) +# if (__cplusplus > 202302L) +# define __glibcxx_submdspan 1L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_submdspan) +# endif +# endif +#endif /* !defined(__cpp_lib_submdspan) && defined(__glibcxx_want_submdspan) */ +#undef __glibcxx_want_submdspan + #if !defined(__cpp_lib_ssize) # if (__cplusplus >= 202002L) # define __glibcxx_ssize 201902L diff --git a/libstdc++-v3/include/std/mdspan b/libstdc++-v3/include/std/mdspan index 8d2421819a55..7acc232024e9 100644 --- a/libstdc++-v3/include/std/mdspan +++ b/libstdc++-v3/include/std/mdspan @@ -44,6 +44,7 @@ #define __glibcxx_want_mdspan #define __glibcxx_want_aligned_accessor +#define __glibcxx_want_submdspan #include #ifdef __glibcxx_mdspan @@ -335,6 +336,26 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __exts._M_exts._M_dynamic_extents(__begin, __end); } } +#if __glibcxx_submdspan + template + struct strided_slice { + static_assert(__is_standard_integer<_OffsetType>::value + || __detail::__integral_constant_like<_OffsetType>); + static_assert(__is_standard_integer<_ExtentType>::value + || __detail::__integral_constant_like<_ExtentType>); + static_assert(__is_standard_integer<_StrideType>::value + || __detail::__integral_constant_like<_StrideType>); + + using offset_type = _OffsetType; + using extent_type = _ExtentType; + using stride_type = _StrideType; + + [[no_unique_address]] offset_type offset{}; + [[no_unique_address]] extent_type extent{}; + [[no_unique_address]] stride_type stride{}; + }; +#endif + template class extents { diff --git a/libstdc++-v3/src/c++23/std.cc.in b/libstdc++-v3/src/c++23/std.cc.in index c1b4e4c88b76..8da78fe955b7 100644 --- a/libstdc++-v3/src/c++23/std.cc.in +++ b/libstdc++-v3/src/c++23/std.cc.in @@ -1872,8 +1872,9 @@ export namespace std #if __glibcxx_padded_layouts using std::layout_left_padded; using std::layout_right_padded; + using strided_slice; #endif - // FIXME strided_slice, submdspan_mapping_result, full_extent_t, full_extent, + // FIXME submdspan_mapping_result, full_extent_t, full_extent, // submdspan_extents, mdsubspan } #endif diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice.cc b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice.cc new file mode 100644 index 000000000000..c43a82143214 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice.cc @@ -0,0 +1,46 @@ +// { dg-do run { target c++26 } } +#include + +#include +#include + +constexpr void +check_strided_slice(auto s, auto offset, auto extent, auto stride) +{ + using slice_type = std::strided_slice; + static_assert(std::same_as); + VERIFY(s.offset == offset); + VERIFY(s.extent == extent); + VERIFY(s.stride == stride); +} + +constexpr void +test_initializers(auto offset, auto extent, auto stride) +{ + auto check = [&](auto s) + { + check_strided_slice(s, offset, extent, stride); + }; + + check(std::strided_slice{.offset=offset, .extent=extent, .stride=stride}); + check(std::strided_slice{offset, extent, stride}); + check(std::strided_slice(offset, extent, stride)); +} + +constexpr bool +test_all() +{ + test_initializers(0, 1, 2); + test_initializers(std::integral_constant{}, size_t{1}, std::cw<2>); + test_initializers(-1, 2, 2); + return true; +} + +int +main() +{ + test_all(); + static_assert(test_all()); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice_neg.cc b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice_neg.cc new file mode 100644 index 000000000000..0f1d791d13aa --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice_neg.cc @@ -0,0 +1,19 @@ +// { dg-do compile { target c++26 } } +#include + +#include + +template + constexpr bool + test_invalid() + { + auto s1 = std::strided_slice(OffsetType{}, ExtentType{}, StrideType{}); // { dg-error "required from" } + return true; + } + +static_assert(test_invalid()); // { dg-error "required from" } +static_assert(test_invalid()); // { dg-error "required from" } +static_assert(test_invalid()); // { dg-error "required from" } +static_assert(test_invalid()); // { dg-error "required from" } + +// { dg-prune-output "static assertion failed" } From 15498d5f96378b019df9f255d3f32f76a44684c4 Mon Sep 17 00:00:00 2001 From: Luc Grosheintz Date: Thu, 2 Oct 2025 11:27:15 +0200 Subject: [PATCH 149/216] libstdc++: Implement full_extent_t. [PR110352] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add the class and updates the std module. PR libstdc++/110352 libstdc++-v3/ChangeLog: * include/std/mdspan (full_extent_t): New class. * src/c++23/std.cc.in (full_extent_t): Add. Reviewed-by: Jonathan Wakely Reviewed-by: Tomasz Kamiński Signed-off-by: Luc Grosheintz --- libstdc++-v3/include/std/mdspan | 7 +++++++ libstdc++-v3/src/c++23/std.cc.in | 5 +++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/include/std/mdspan b/libstdc++-v3/include/std/mdspan index 7acc232024e9..7f69626e4e86 100644 --- a/libstdc++-v3/include/std/mdspan +++ b/libstdc++-v3/include/std/mdspan @@ -337,6 +337,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } #if __glibcxx_submdspan + struct full_extent_t + { + explicit full_extent_t() = default; + }; + + inline constexpr full_extent_t full_extent{}; + template struct strided_slice { static_assert(__is_standard_integer<_OffsetType>::value diff --git a/libstdc++-v3/src/c++23/std.cc.in b/libstdc++-v3/src/c++23/std.cc.in index 8da78fe955b7..bfccf3cec956 100644 --- a/libstdc++-v3/src/c++23/std.cc.in +++ b/libstdc++-v3/src/c++23/std.cc.in @@ -1873,9 +1873,10 @@ export namespace std using std::layout_left_padded; using std::layout_right_padded; using strided_slice; + using full_extent_t; + using full_extent; #endif - // FIXME submdspan_mapping_result, full_extent_t, full_extent, - // submdspan_extents, mdsubspan + // FIXME submdspan_mapping_result, submdspan_extents, mdsubspan } #endif From e269268e45ba0befabdfc8a8c2f04dcbb44ccdf4 Mon Sep 17 00:00:00 2001 From: Luc Grosheintz Date: Thu, 2 Oct 2025 11:27:16 +0200 Subject: [PATCH 150/216] libstdc++: Implement submdspan_mapping_result. [PR110352] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implement the class submdspan_mapping_result and add it to the std module. PR libstdc++/110352 libstdc++-v3/ChangeLog: * include/std/mdspan (submdspan_mapping_result): New class. * src/c++23/std.cc.in (submdspan_mapping_result): Add. Reviewed-by: Jonathan Wakely Reviewed-by: Tomasz Kamiński Signed-off-by: Luc Grosheintz --- libstdc++-v3/include/std/mdspan | 7 +++++++ libstdc++-v3/src/c++23/std.cc.in | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/libstdc++-v3/include/std/mdspan b/libstdc++-v3/include/std/mdspan index 7f69626e4e86..d555b7f2580a 100644 --- a/libstdc++-v3/include/std/mdspan +++ b/libstdc++-v3/include/std/mdspan @@ -361,6 +361,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION [[no_unique_address]] extent_type extent{}; [[no_unique_address]] stride_type stride{}; }; + + template + struct submdspan_mapping_result + { + [[no_unique_address]] _Mapping mapping = _Mapping(); + size_t offset{}; + }; #endif template diff --git a/libstdc++-v3/src/c++23/std.cc.in b/libstdc++-v3/src/c++23/std.cc.in index bfccf3cec956..9cf5fa7dcb62 100644 --- a/libstdc++-v3/src/c++23/std.cc.in +++ b/libstdc++-v3/src/c++23/std.cc.in @@ -1875,8 +1875,9 @@ export namespace std using strided_slice; using full_extent_t; using full_extent; + using submdspan_mapping_result; #endif - // FIXME submdspan_mapping_result, submdspan_extents, mdsubspan + // FIXME submdspan_extents, mdsubspan } #endif From 8ba0bb5a4d46157fefd3a0085ff21cefe4056f96 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Wed, 8 Oct 2025 11:50:14 +0200 Subject: [PATCH 151/216] Adjust g++.dg/vect/pr64410.cc scan We are now vectorizing more loops in standard library functions. Restrict the dump scan to the loop we're interested in. PR testsuite/120100 * g++.dg/vect/pr64410.cc: Adjust. --- gcc/testsuite/g++.dg/vect/pr64410.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/testsuite/g++.dg/vect/pr64410.cc b/gcc/testsuite/g++.dg/vect/pr64410.cc index 407b893da4b8..dd0256c2fe06 100644 --- a/gcc/testsuite/g++.dg/vect/pr64410.cc +++ b/gcc/testsuite/g++.dg/vect/pr64410.cc @@ -51,4 +51,4 @@ main(int argc, char** argv) return 0; } -// { dg-final { scan-tree-dump "vectorized 1 loops in function" "vect" } } +// { dg-final { scan-tree-dump "pr64410.cc:46:29: optimized: loop vectorized" "vect" } } From 94f203a3695d9779b84f41e36a295a90e7ba2f16 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Wed, 8 Oct 2025 09:19:50 +0200 Subject: [PATCH 152/216] Check non-strictly vect_internal_def internal defs in integer_type_for_mask We are missing masks produced by inductions or reductions otherwise. * tree-vect-patterns.cc (integer_type_for_mask): Only reject vect_external_defs. --- gcc/tree-vect-patterns.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc index 55c50420e32a..8b4f9840181e 100644 --- a/gcc/tree-vect-patterns.cc +++ b/gcc/tree-vect-patterns.cc @@ -5452,8 +5452,10 @@ integer_type_for_mask (tree var, vec_info *vinfo) if (!VECT_SCALAR_BOOLEAN_TYPE_P (TREE_TYPE (var))) return NULL_TREE; - stmt_vec_info def_stmt_info = vect_get_internal_def (vinfo, var); - if (!def_stmt_info || !vect_use_mask_type_p (def_stmt_info)) + stmt_vec_info def_stmt_info = vinfo->lookup_def (var); + if (!def_stmt_info + || STMT_VINFO_DEF_TYPE (def_stmt_info) == vect_external_def + || !vect_use_mask_type_p (def_stmt_info)) return NULL_TREE; return build_nonstandard_integer_type (def_stmt_info->mask_precision, 1); From 055c6cc038ef6bba311eee2abdafaadb532ddd5b Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Tue, 7 Oct 2025 15:38:57 +0200 Subject: [PATCH 153/216] Add boolean pattern for bitwise ops As we consider bitwise operations possible mask operations we have to consider the case of only one operand arriving as mask. The following compensates for this by creating mask from the other operand and insert possibly required mask conversions. PR tree-optimization/110223 PR tree-optimization/122128 * tree-vect-patterns.cc (vect_recog_bool_pattern): Add compensation for mixed mask/data bitwise operations. * gcc.dg/vect/vect-bool-2.c: New testcase. * gcc.dg/vect/vect-bool-cmp-3.c: Likewise. * gcc.dg/vect/vect-bool-cmp-4.c: Likewise. --- gcc/testsuite/gcc.dg/vect/vect-bool-2.c | 17 ++++++ gcc/testsuite/gcc.dg/vect/vect-bool-cmp-3.c | 14 +++++ gcc/testsuite/gcc.dg/vect/vect-bool-cmp-4.c | 14 +++++ gcc/tree-vect-patterns.cc | 62 +++++++++++++++++++++ 4 files changed, 107 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/vect/vect-bool-2.c create mode 100644 gcc/testsuite/gcc.dg/vect/vect-bool-cmp-3.c create mode 100644 gcc/testsuite/gcc.dg/vect/vect-bool-cmp-4.c diff --git a/gcc/testsuite/gcc.dg/vect/vect-bool-2.c b/gcc/testsuite/gcc.dg/vect/vect-bool-2.c new file mode 100644 index 000000000000..88db018a4f51 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-bool-2.c @@ -0,0 +1,17 @@ +/* PR122128 */ +/* { dg-do compile } */ + +_Bool a[1024]; +signed char b[1024]; + +void foo () +{ + for (int i = 0; i < 1024; ++i) + { + bool x = a[i]; + bool y = b[i] < 17; + a[i] = x & y; + } +} + +/* { dg-final { scan-tree-dump "optimized: loop vectorized" "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-bool-cmp-3.c b/gcc/testsuite/gcc.dg/vect/vect-bool-cmp-3.c new file mode 100644 index 000000000000..4d96af65e928 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-bool-cmp-3.c @@ -0,0 +1,14 @@ +/* PR110223 */ +/* { dg-do compile } */ + +_Bool k[1024]; +_Bool res[1024]; + +int main () +{ + int i; + for (i = 0; i < 1024; i++) + res[i] = k[i] != (i == 0); +} + +/* { dg-final { scan-tree-dump "optimized: loop vectorized" "vect" { target vect_unpack } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-bool-cmp-4.c b/gcc/testsuite/gcc.dg/vect/vect-bool-cmp-4.c new file mode 100644 index 000000000000..162f22835daa --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-bool-cmp-4.c @@ -0,0 +1,14 @@ +/* PR110223 */ +/* { dg-do compile } */ + +_Bool k[1024]; +_Bool res[1024]; + +int main () +{ + char i; + for (i = 0; i < 64; i++) + res[i] = k[i] != (i == 0); +} + +/* { dg-final { scan-tree-dump "optimized: loop vectorized" "vect" } } */ diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc index 8b4f9840181e..5581f44a6a84 100644 --- a/gcc/tree-vect-patterns.cc +++ b/gcc/tree-vect-patterns.cc @@ -5754,6 +5754,68 @@ vect_recog_bool_pattern (vec_info *vinfo, *type_out = vectype; vect_pattern_detected ("vect_recog_bool_pattern", last_stmt); + return pattern_stmt; + } + else if (rhs_code == BIT_XOR_EXPR + || rhs_code == BIT_AND_EXPR + || rhs_code == BIT_IOR_EXPR) + { + tree lhs_type = integer_type_for_mask (lhs, vinfo); + if (!lhs_type) + return NULL; + vectype = get_mask_type_for_scalar_type (vinfo, lhs_type); + if (!vectype) + return NULL; + tree rhs2 = gimple_assign_rhs2 (last_stmt); + tree rhs1_type = integer_type_for_mask (var, vinfo); + tree rhs2_type = integer_type_for_mask (rhs2, vinfo); + if (rhs1_type && rhs2_type) + return NULL; + /* When one input is a mask and the other is not create a pattern + stmt sequence that creates a mask for the non-mask input and + convert it to one suitable for the output mask used. */ + if (rhs1_type && !rhs2_type) + { + tree rhs1_vectype = get_mask_type_for_scalar_type (vinfo, rhs1_type); + if (!rhs1_vectype) + return NULL; + tree rhs2_vectype = get_vectype_for_scalar_type (vinfo, + TREE_TYPE (rhs2)); + if (!rhs2_vectype) + return NULL; + tree new_vectype = truth_type_for (rhs2_vectype); + tree tem = vect_recog_temp_ssa_var (TREE_TYPE (new_vectype), NULL); + pattern_stmt = gimple_build_assign (tem, NE_EXPR, rhs2, + build_zero_cst + (TREE_TYPE (rhs2))); + append_pattern_def_seq (vinfo, stmt_vinfo, pattern_stmt, + new_vectype, TREE_TYPE (new_vectype)); + rhs2 = vect_convert_mask_for_vectype (tem, rhs1_vectype, + stmt_vinfo, vinfo); + } + else if (!rhs1_type && rhs2_type) + { + tree rhs2_vectype = get_mask_type_for_scalar_type (vinfo, rhs2_type); + if (!rhs2_vectype) + return NULL; + tree rhs1_vectype = get_vectype_for_scalar_type (vinfo, + TREE_TYPE (var)); + if (!rhs1_vectype) + return NULL; + tree new_vectype = truth_type_for (rhs1_vectype); + tree tem = vect_recog_temp_ssa_var (TREE_TYPE (new_vectype), NULL); + pattern_stmt = gimple_build_assign (tem, NE_EXPR, var, + build_zero_cst + (TREE_TYPE (var))); + append_pattern_def_seq (vinfo, stmt_vinfo, pattern_stmt, + new_vectype, TREE_TYPE (new_vectype)); + var = vect_convert_mask_for_vectype (tem, rhs2_vectype, + stmt_vinfo, vinfo); + } + lhs = vect_recog_temp_ssa_var (TREE_TYPE (lhs), NULL); + pattern_stmt = gimple_build_assign (lhs, rhs_code, var, rhs2); + vect_pattern_detected ("vect_recog_bool_pattern", last_stmt); + *type_out = vectype; return pattern_stmt; } else if (rhs_code == SSA_NAME From 9e2db0f899d3a660cc25918bcd9f5b6c874526fa Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 8 Oct 2025 10:14:27 +0100 Subject: [PATCH 154/216] libstdc++: Add missing include to std/time/format/format.cc libstdc++-v3/ChangeLog: * testsuite/std/time/format/format.cc: Include . --- libstdc++-v3/testsuite/std/time/format/format.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/libstdc++-v3/testsuite/std/time/format/format.cc b/libstdc++-v3/testsuite/std/time/format/format.cc index 00affb9e11a3..d1aee053acd4 100644 --- a/libstdc++-v3/testsuite/std/time/format/format.cc +++ b/libstdc++-v3/testsuite/std/time/format/format.cc @@ -2,6 +2,7 @@ // { dg-timeout-factor 2 } #include +#include #include void From 8b6a18ecaf44553230b90bf28adfb9fe9c9d5ab9 Mon Sep 17 00:00:00 2001 From: Trevor Gross Date: Sat, 13 Sep 2025 19:50:21 -0500 Subject: [PATCH 155/216] x86-64: mingw: Pass and return _Float16 in vector registers [PR115054] For MinGW on x86-64, GCC currently passes and returns `_Float16` in GPRs. Microsoft does not specify an ABI for the type so this is purely an extension; however, there are a few reasons the current ABI is not ideal: 1. `float` and `double` are both passed and returned in xmm registers under the MSVC ABI, there isn't any reason for `_Float16` to deviate. 2. `_Float16` is returned in xmm0 on Windows x86-32 by both GCC and Clang. 3. There is a platform-natural ABI with AVX512-FP16, which requires half-precision operands to be in vector registers. 4. System V uses vector registers for `_Float16`. Thus, update the `HFmode` ABI to both pass and return in vector registers, meaning its ABI is now identical to `float` and `double`. This is already Clang's behavior on both its x64 MSVC and MinGW targets, so the change here also resolves an ABI incompatibility (originally reported in linked issue). The results can be verified by evaluating the change in assembly output with this source: void pass_f16(_Float16 x, _Float16 *dst) { *dst = x; } void callee_f16(_Float16); void call_f16() { callee_f16(1.0); } _Float16 ret_f16(_Float16 *x) { return *x; } /* Check libcall ABI */ void extend_f16(_Float16 *x, _Float32 *dst) { *dst = (_Float32)*x; } void trunc_f16(_Float32 *x, _Float16 *dst) { *dst = (_Float16)*x; } /* Float varargs should be in vregs with a zeroed shadow GPR */ void va(_Float16, ...); void va_f16() { va(1.0f16, 2.0f16, 3.0f16, 4.0f16, 5.0f16); } While modifying the `function_value_ms_64` `switch` statement, a redundant condition and trailing whitespace in the 16-byte case is cleaned up. 2025-09-13 Trevor Gross gcc: PR target/115054 * config/i386/i386.cc (function_arg_ms_64, function_value_ms_64): Pass and return _Float16 in vector registers on Windows. Signed-off-by: Trevor Gross Signed-off-by: Jonathan Yong <10walls@gmail.com> --- gcc/config/i386/i386.cc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc index a091e9438287..587b2bd0c1d2 100644 --- a/gcc/config/i386/i386.cc +++ b/gcc/config/i386/i386.cc @@ -3493,8 +3493,10 @@ function_arg_ms_64 (const CUMULATIVE_ARGS *cum, machine_mode mode, regno = x86_64_ms_abi_int_parameter_registers[cum->regno]; - /* Only floating point modes are passed in anything but integer regs. */ - if (TARGET_SSE && (mode == SFmode || mode == DFmode)) + /* Only floating point modes less than 64 bits are passed in anything but + integer regs. Larger floating point types are excluded as the Windows + ABI requires vreg args can be shadowed in GPRs (for red zone / varargs). */ + if (TARGET_SSE && (mode == HFmode || mode == SFmode || mode == DFmode)) { if (named) { @@ -4316,7 +4318,6 @@ function_value_ms_64 (machine_mode orig_mode, machine_mode mode, { case 16: if (valtype != NULL_TREE - && !VECTOR_INTEGER_TYPE_P (valtype) && !VECTOR_INTEGER_TYPE_P (valtype) && !INTEGRAL_TYPE_P (valtype) && !VECTOR_FLOAT_TYPE_P (valtype)) @@ -4327,9 +4328,10 @@ function_value_ms_64 (machine_mode orig_mode, machine_mode mode, break; case 8: case 4: + case 2: if (valtype != NULL_TREE && AGGREGATE_TYPE_P (valtype)) break; - if (mode == SFmode || mode == DFmode) + if (mode == HFmode || mode == SFmode || mode == DFmode) regno = FIRST_SSE_REG; break; default: From 43f524c1c4f1aa79e3c443b45af9464a8b8943b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Kami=C5=84ski?= Date: Wed, 8 Oct 2025 15:14:04 +0200 Subject: [PATCH 156/216] libstdc++: Fix type in computation of _M_weekday_index. The value should use divide instead of modulo, as given 1st of month being weekday X (Mon, Tue, ...), 01 is always X[1], 08 is X[2], e.t.c. This values is currently not observable, as there is no user-accessible format specifier that will print it, however it may be exposed in future. libstdc++-v3/ChangeLog: * include/bits/chrono_io.h (_ChronoData::_M_fill_day): Replace '%' by '/'. --- libstdc++-v3/include/bits/chrono_io.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libstdc++-v3/include/bits/chrono_io.h b/libstdc++-v3/include/bits/chrono_io.h index 79a44d128b12..690c10d79ce5 100644 --- a/libstdc++-v3/include/bits/chrono_io.h +++ b/libstdc++-v3/include/bits/chrono_io.h @@ -463,7 +463,7 @@ namespace __format { _M_day = __d; __parts -= _ChronoParts::_Day; - _M_weekday_index = ((unsigned)__d + 6u) % 7u; + _M_weekday_index = ((unsigned)__d + 6u) / 7u; __parts -= _ChronoParts::_WeekdayIndex; return __parts; } From d52a81fdb3cec0de08bbcefd3c0a31817133b95f Mon Sep 17 00:00:00 2001 From: Antoni Boucher Date: Wed, 8 Oct 2025 09:49:13 -0400 Subject: [PATCH 157/216] Regenerate gcc/configure Use autoconf 2.69 to regenerate gcc/configure gcc/ChangeLog: * configure: Regenerate. --- gcc/configure | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/gcc/configure b/gcc/configure index 0fb09f430da6..c8184de6cf0c 100755 --- a/gcc/configure +++ b/gcc/configure @@ -649,9 +649,9 @@ ISLLIBS GMPINC GMPLIBS target_cpu_default +jit_target_objs rust_target_objs d_target_objs -jit_target_objs fortran_target_objs cxx_target_objs c_target_objs @@ -659,12 +659,12 @@ use_gcc_stdint xm_defines xm_include_list xm_file_list +tm_jit_include_list +tm_jit_file_list tm_rust_include_list tm_rust_file_list tm_d_include_list tm_d_file_list -tm_jit_include_list -tm_jit_file_list tm_p_include_list tm_p_file_list tm_defines @@ -21873,7 +21873,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 21862 "configure" +#line 21876 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -21979,7 +21979,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 21968 "configure" +#line 21982 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -34548,6 +34548,9 @@ fi + + + From d77b548fb647d52817d0c44d45bb817d166b7a19 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Wed, 8 Oct 2025 16:09:49 +0100 Subject: [PATCH 158/216] c++: clobber non-placement new And also add the clobber for non-placement new. For now let's limit the clobber of an array with non-constant bound to placement new in constant evaluation, where we need it to set the active member of a union. And catch some additional cases of there being no actual data to clobber. This changes the diagnostics in a couple of analyzer tests, but the new diagnostics are also valid. It also adds some -Wuninitialized warnings which seem like an improvement; the lines that now warn about an uninitialized vptr are correct, since trying to assign to a member of a virtual base reads the vptr of an object that was never created. gcc/cp/ChangeLog: * init.cc (build_new_1): Also clobber for non-placement new. Only loop clobber in constexpr. * expr.cc (wrap_with_if_consteval): New. * cp-tree.h (wrap_with_if_consteval): Declare. gcc/testsuite/ChangeLog: * g++.dg/analyzer/new-2.C: Adjust diags. * g++.dg/analyzer/noexcept-new.C: Adjust diags. * g++.dg/warn/Warray-bounds-23.C: Add warnings. * g++.dg/warn/Warray-bounds-24.C: Add warnings. * g++.dg/cpp26/constexpr-new4a.C: New test. --- gcc/cp/cp-tree.h | 1 + gcc/cp/expr.cc | 16 ++++++++ gcc/cp/init.cc | 39 +++++++++++++------- gcc/testsuite/g++.dg/analyzer/new-2.C | 4 +- gcc/testsuite/g++.dg/analyzer/noexcept-new.C | 12 +++--- gcc/testsuite/g++.dg/cpp26/constexpr-new4a.C | 21 +++++++++++ gcc/testsuite/g++.dg/warn/Warray-bounds-23.C | 6 +-- gcc/testsuite/g++.dg/warn/Warray-bounds-24.C | 6 +-- 8 files changed, 77 insertions(+), 28 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp26/constexpr-new4a.C diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 5f8dfad7bf42..7298d3b81bd7 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -7561,6 +7561,7 @@ extern tree mark_lvalue_use_nonread (tree); extern tree mark_type_use (tree); extern tree mark_discarded_use (tree); extern void mark_exp_read (tree); +extern tree wrap_with_if_consteval (tree); /* friend.cc */ extern int is_friend (tree, tree); diff --git a/gcc/cp/expr.cc b/gcc/cp/expr.cc index 32dc3eee78f9..f2e99397acac 100644 --- a/gcc/cp/expr.cc +++ b/gcc/cp/expr.cc @@ -430,3 +430,19 @@ fold_for_warn (tree x) return c_fully_fold (x, /*for_init*/false, /*maybe_constp*/NULL); } + +/* Make EXPR only execute during constant evaluation by wrapping it in a + statement-expression containing 'if consteval'. */ + +tree +wrap_with_if_consteval (tree expr) +{ + tree stmtex = begin_stmt_expr (); + tree ifcev = begin_if_stmt (); + IF_STMT_CONSTEVAL_P (ifcev) = true; + finish_if_stmt_cond (boolean_false_node, ifcev); + finish_expr_stmt (expr); + finish_then_clause (ifcev); + finish_if_stmt (ifcev); + return finish_stmt_expr (stmtex, /*no scope*/true); +} diff --git a/gcc/cp/init.cc b/gcc/cp/init.cc index 912298728acd..1b7f3e6b41c9 100644 --- a/gcc/cp/init.cc +++ b/gcc/cp/init.cc @@ -3557,15 +3557,17 @@ build_new_1 (vec **placement, tree type, tree nelts, alloc_expr = maybe_wrap_new_for_constexpr (alloc_expr, type, cookie_size); - bool std_placement = std_placement_new_fn_p (alloc_fn); + const bool std_placement = std_placement_new_fn_p (alloc_fn); - /* For std placement new, clobber the object if the constructor won't do it - in start_preparsed_function. This is most important for activating an - array in a union (c++/121068), but should also help the optimizers. */ + /* Clobber the object now that the constructor won't do it in + start_preparsed_function. This is most important for activating an array + in a union (c++/121068), but should also help the optimizers. */ const bool do_clobber - = (std_placement && flag_lifetime_dse > 1 + = (flag_lifetime_dse > 1 && !processing_template_decl && !is_empty_type (elt_type) + && !integer_zerop (TYPE_SIZE (type)) + && (!outer_nelts || !integer_zerop (cst_outer_nelts)) && (!*init || CLASS_TYPE_P (elt_type))); /* In the simple case, we can stop now. */ @@ -3665,15 +3667,24 @@ build_new_1 (vec **placement, tree type, tree nelts, if (array_p && TREE_CODE (cst_outer_nelts) != INTEGER_CST) { /* Clobber each element rather than the array at once. */ - tree clobber = build_clobber (elt_type, CLOBBER_OBJECT_BEGIN); - CONSTRUCTOR_IS_DIRECT_INIT (clobber) = true; - tree maxindex = cp_build_binary_op (input_location, - MINUS_EXPR, outer_nelts, - integer_one_node, - complain); - clobber_expr = build_vec_init (data_addr, maxindex, clobber, - /*valinit*/false, /*from_arr*/0, - complain, nullptr); + /* But for now, limit a clobber loop to placement new during + constant-evaluation, as cddce1 thinks it might be infinite, leading + to bogus warnings on Wstringop-overflow-4.C (2025-09-30). We + need it in constexpr for constexpr-new4a.C. */ + if (std_placement && current_function_decl + && maybe_constexpr_fn (current_function_decl)) + { + tree clobber = build_clobber (elt_type, CLOBBER_OBJECT_BEGIN); + CONSTRUCTOR_IS_DIRECT_INIT (clobber) = true; + tree maxindex = cp_build_binary_op (input_location, + MINUS_EXPR, outer_nelts, + integer_one_node, + complain); + clobber_expr = build_vec_init (data_addr, maxindex, clobber, + /*valinit*/false, /*from_arr*/0, + complain, nullptr); + clobber_expr = wrap_with_if_consteval (clobber_expr); + } } else { diff --git a/gcc/testsuite/g++.dg/analyzer/new-2.C b/gcc/testsuite/g++.dg/analyzer/new-2.C index 391d159a53ae..9337569e60bc 100644 --- a/gcc/testsuite/g++.dg/analyzer/new-2.C +++ b/gcc/testsuite/g++.dg/analyzer/new-2.C @@ -59,9 +59,9 @@ void test_nonthrowing () int z = *y + 2; /* { dg-warning "dereference of NULL 'y'" } */ /* { dg-bogus "use of uninitialized value '\\*y'" "" { target *-*-* } .-1 } */ - z = *x + 4; /* { dg-warning "dereference of possibly-NULL 'x'" } */ + z = *x + 4; /* { dg-warning "dereference of NULL 'x'" } */ /* { dg-warning "use of uninitialized value '\\*x'" "" { target *-*-* } .-1 } */ - z = arr[0] + 4; /* { dg-warning "dereference of possibly-NULL 'arr'" } */ + z = arr[0] + 4; /* { dg-warning "dereference of NULL 'arr'" } */ /* { dg-warning "use of uninitialized value '\\*arr'" "" { target *-*-* } .-1 } */ delete y; diff --git a/gcc/testsuite/g++.dg/analyzer/noexcept-new.C b/gcc/testsuite/g++.dg/analyzer/noexcept-new.C index f4bb4956d26d..11225431b57d 100644 --- a/gcc/testsuite/g++.dg/analyzer/noexcept-new.C +++ b/gcc/testsuite/g++.dg/analyzer/noexcept-new.C @@ -11,15 +11,15 @@ struct A void test_throwing () { - int* x = new int; + int* x = new int; /* { dg-warning "dereference of possibly-NULL" } */ int* y = new int(); /* { dg-warning "dereference of possibly-NULL" } */ - int* arr = new int[10]; + int* arr = new int[10]; /* { dg-warning "dereference of possibly-NULL" } */ A *a = new A(); /* { dg-warning "dereference of possibly-NULL" } */ int z = *y + 2; - z = *x + 4; /* { dg-warning "dereference of possibly-NULL 'x'" } */ + z = *x + 4; /* { dg-warning "use of uninitialized value '\\*x'" "" { target *-*-* } .-1 } */ - z = arr[0] + 4; /* { dg-warning "dereference of possibly-NULL 'arr'" } */ + z = arr[0] + 4; /* { dg-warning "use of uninitialized value '\\*arr'" "" { target *-*-* } .-1 } */ a->y = a->x + 3; @@ -37,9 +37,9 @@ void test_nonthrowing () int z = *y + 2; /* { dg-warning "dereference of NULL 'y'" } */ /* { dg-bogus "use of uninitialized value '\\*y'" "" { target *-*-* } .-1 } */ - z = *x + 4; /* { dg-warning "dereference of possibly-NULL 'x'" } */ + z = *x + 4; /* { dg-warning "dereference of NULL 'x'" } */ /* { dg-warning "use of uninitialized value '\\*x'" "" { target *-*-* } .-1 } */ - z = arr[0] + 4; /* { dg-warning "dereference of possibly-NULL 'arr'" } */ + z = arr[0] + 4; /* { dg-warning "dereference of NULL 'arr'" } */ /* { dg-warning "use of uninitialized value '\\*arr'" "" { target *-*-* } .-1 } */ delete y; diff --git a/gcc/testsuite/g++.dg/cpp26/constexpr-new4a.C b/gcc/testsuite/g++.dg/cpp26/constexpr-new4a.C new file mode 100644 index 000000000000..d621293f3a69 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/constexpr-new4a.C @@ -0,0 +1,21 @@ +// PR c++/121068 +// { dg-do compile { target c++26 } } + +constexpr void *operator new (__SIZE_TYPE__, void *p) { return p; } +constexpr void *operator new[] (__SIZE_TYPE__, void *p) { return p; } + +consteval int +foo(int n) +{ + using T = int; + union { T arr[3]; }; + new(arr) T[n]; // makes arr active + for (int i = 0; i < 3; ++i) + arr[i].~T(); + + new (arr + 2) T{10}; // A + + return 1; +}; + +constexpr int g = foo(3); diff --git a/gcc/testsuite/g++.dg/warn/Warray-bounds-23.C b/gcc/testsuite/g++.dg/warn/Warray-bounds-23.C index c43a7dea3efc..7f6a6395ac74 100644 --- a/gcc/testsuite/g++.dg/warn/Warray-bounds-23.C +++ b/gcc/testsuite/g++.dg/warn/Warray-bounds-23.C @@ -34,7 +34,7 @@ void test_D1_b0i () { { D1 *p = (D1*)new char[sizeof (D1)]; - p->b0i = __LINE__; + p->b0i = __LINE__; // { dg-warning -Wuninitialized } sink (p); } @@ -110,7 +110,7 @@ void test_D2_b0i () { { D2 *p = (D2*)new char[sizeof (D2)]; - p->b0i = __LINE__; + p->b0i = __LINE__; // { dg-warning -Wuninitialized } sink (p); } @@ -201,7 +201,7 @@ void test_D3_b0i () { { D3 *p = (D3*)new char[sizeof (D3)]; - p->b0i = __LINE__; + p->b0i = __LINE__; // { dg-warning -Wuninitialized } sink (p); } diff --git a/gcc/testsuite/g++.dg/warn/Warray-bounds-24.C b/gcc/testsuite/g++.dg/warn/Warray-bounds-24.C index 071453a485d7..068195ab1b06 100644 --- a/gcc/testsuite/g++.dg/warn/Warray-bounds-24.C +++ b/gcc/testsuite/g++.dg/warn/Warray-bounds-24.C @@ -34,7 +34,7 @@ void test_D1_b0a () { { D1 *p = (D1*)new char[sizeof (D1)]; - *p->b0a = __LINE__; // { dg-warning "-Warray-bounds" "pr99630" { xfail *-*-* } } + *p->b0a = __LINE__; // { dg-warning "-Wuninitialized" } sink (p); } @@ -110,7 +110,7 @@ void test_D2_b0a () { { D2 *p = (D2*)new char[sizeof (D2)]; - *p->b0a = __LINE__; // { dg-warning "-Warray-bounds" "pr99630" { xfail *-*-* } } + *p->b0a = __LINE__; // { dg-warning "-Wuninitialized" } sink (p); } @@ -201,7 +201,7 @@ void test_D3_b0a () { { D3 *p = (D3*)new char[sizeof (D3)]; - *p->b0a = __LINE__; // { dg-warning "-Warray-bounds" "pr99630" { xfail *-*-* } } + *p->b0a = __LINE__; // { dg-warning "-Wuninitialized" } sink (p); } From 0c0847158caa5d3bbfe3c5457b046d3d6b7e00a5 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 8 Oct 2025 17:54:11 +0200 Subject: [PATCH 159/216] Update to Unicode 17.0.0 The following patch updates GCC from Unicode 16.0.0 to 17.0.0. I've followed what the README says and updated also one script from glibc, but that needed another Unicode file - HangulSyllableType.txt - around as well, so I'm adding it. I've added one new test to named-universal-char-escape-1.c for randomly chosen character from new CJK block. Note, Unicode 17.0.0 authors forgot to adjust the 4-8 table, I've filed bugreports about that but the UnicodeData.txt changes for the range ends and the new range seems to match e.g. what is in the glyph tables, so the patch follows UnicodeData.txt and not 4-8 table here. Another thing was that makeuname2c.cc didn't handle correctly when the size of the generated string table modulo 77 was 76 or 77, in which case it forgot to emit a semicolon after the string literal and so failed to compile. And as can be seen in the emoji-data.txt diff, some properties like Extended_Pictographic have been removed from certain characters, e.g. from the Mahjong cards characters except U+1F004, and one libstdc++ test was testing that property exactly on U+1F000. Dunno why that was changed, but U+1F004 is the only colored one among tons of black and white ones. 2025-10-08 Jakub Jelinek contrib/ * unicode/README: Add HangulSyllableType.txt file to the list as newest utf8_gen.py from glibc now needs it. Adjust git commit hash and change unicode 16 version to 17. * unicode/from_glibc/utf8_gen.py: Updated from glibc. * unicode/DerivedCoreProperties.txt: Updated from Unicode 17.0.0. * unicode/emoji-data.txt: Likewise. * unicode/PropList.txt: Likewise. * unicode/GraphemeBreakProperty.txt: Likewise. * unicode/DerivedNormalizationProps.txt: Likewise. * unicode/NameAliases.txt: Likewise. * unicode/UnicodeData.txt: Likewise. * unicode/EastAsianWidth.txt: Likewise. * unicode/DerivedGeneralCategory.txt: Likewise. * unicode/HangulSyllableType.txt: New file. gcc/testsuite/ * c-c++-common/cpp/named-universal-char-escape-1.c: Add test for \N{CJK UNIFIED IDEOGRAPH-3340E}. libcpp/ * makeucnid.cc (write_copyright): Adjust copyright year. * makeuname2c.cc (generated_ranges): Adjust end points for a couple of ranges based on UnicodeData.txt Last changes and add a whole new CJK UNIFIED IDEOGRAPH- entry. None of these changes are in the 4-8 table, but clearly it has just been forgotten. (write_copyright): Adjust copyright year. (write_dict): Fix up condition when to print semicolon. * generated_cpp_wcwidth.h: Regenerate. * ucnid.h: Regenerate. * uname2c.h: Regenerate. libstdc++-v3/ * include/bits/unicode-data.h: Regenerate. * testsuite/ext/unicode/properties.cc: Test __is_extended_pictographic on U+1F004 rather than U+1F000. --- contrib/unicode/DerivedCoreProperties.txt | 599 +- contrib/unicode/DerivedGeneralCategory.txt | 203 +- contrib/unicode/DerivedNormalizationProps.txt | 87 +- contrib/unicode/EastAsianWidth.txt | 109 +- contrib/unicode/GraphemeBreakProperty.txt | 28 +- contrib/unicode/HangulSyllableType.txt | 858 + contrib/unicode/NameAliases.txt | 10 +- contrib/unicode/PropList.txt | 72 +- contrib/unicode/README | 7 +- contrib/unicode/UnicodeData.txt | 489 +- contrib/unicode/emoji-data.txt | 148 +- contrib/unicode/from_glibc/utf8_gen.py | 147 +- .../cpp/named-universal-char-escape-1.c | 1 + libcpp/generated_cpp_wcwidth.h | 206 +- libcpp/makeucnid.cc | 2 +- libcpp/makeuname2c.cc | 13 +- libcpp/ucnid.h | 67 +- libcpp/uname2c.h | 37071 ++++++++-------- libstdc++-v3/include/bits/unicode-data.h | 948 +- .../testsuite/ext/unicode/properties.cc | 2 +- 20 files changed, 21545 insertions(+), 19522 deletions(-) create mode 100644 contrib/unicode/HangulSyllableType.txt diff --git a/contrib/unicode/DerivedCoreProperties.txt b/contrib/unicode/DerivedCoreProperties.txt index 1075638f1a65..f327784bf395 100644 --- a/contrib/unicode/DerivedCoreProperties.txt +++ b/contrib/unicode/DerivedCoreProperties.txt @@ -1,6 +1,6 @@ -# DerivedCoreProperties-16.0.0.txt -# Date: 2024-05-31, 18:09:32 GMT -# © 2024 Unicode®, Inc. +# DerivedCoreProperties-17.0.0.txt +# Date: 2025-07-30, 23:55:08 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # @@ -178,6 +178,7 @@ FF5E ; Math # Sm FULLWIDTH TILDE FFE2 ; Math # Sm FULLWIDTH NOT SIGN FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW 10D8E..10D8F ; Math # Sm [2] GARAY PLUS SIGN..GARAY MINUS SIGN +1CEF0 ; Math # Sm MEDIUM SMALL WHITE CIRCLE WITH HORIZONTAL BAR 1D400..1D454 ; Math # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G 1D456..1D49C ; Math # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A 1D49E..1D49F ; Math # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D @@ -253,8 +254,9 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 1EEA5..1EEA9 ; Math # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH 1EEAB..1EEBB ; Math # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN 1EEF0..1EEF1 ; Math # Sm [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL +1F8D0..1F8D8 ; Math # Sm [9] LONG RIGHTWARDS ARROW OVER LONG LEFTWARDS ARROW..LONG LEFT RIGHT ARROW WITH DEPENDENT LOBE -# Total code points: 2312 +# Total code points: 2322 # ================================================ @@ -273,8 +275,8 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 01BC..01BF ; Alphabetic # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN 01C0..01C3 ; Alphabetic # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK 01C4..0293 ; Alphabetic # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL -0294 ; Alphabetic # Lo LATIN LETTER GLOTTAL STOP -0295..02AF ; Alphabetic # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +0294..0295 ; Alphabetic # Lo [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE +0296..02AF ; Alphabetic # L& [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL 02B0..02C1 ; Alphabetic # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP 02C6..02D1 ; Alphabetic # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON 02E0..02E4 ; Alphabetic # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP @@ -344,7 +346,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 0840..0858 ; Alphabetic # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN 0860..086A ; Alphabetic # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA 0870..0887 ; Alphabetic # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT -0889..088E ; Alphabetic # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0889..088F ; Alphabetic # Lo [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE 0897 ; Alphabetic # Mn ARABIC PEPET 08A0..08C8 ; Alphabetic # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF 08C9 ; Alphabetic # Lm ARABIC SMALL FARSI YEH @@ -477,7 +479,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 0C4A..0C4C ; Alphabetic # Mn [3] TELUGU VOWEL SIGN O..TELUGU VOWEL SIGN AU 0C55..0C56 ; Alphabetic # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK 0C58..0C5A ; Alphabetic # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA -0C5D ; Alphabetic # Lo TELUGU LETTER NAKAARA POLLU +0C5C..0C5D ; Alphabetic # Lo [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; Alphabetic # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C62..0C63 ; Alphabetic # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL 0C80 ; Alphabetic # Lo KANNADA SIGN SPACING CANDRABINDU @@ -497,7 +499,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 0CCA..0CCB ; Alphabetic # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO 0CCC ; Alphabetic # Mn KANNADA VOWEL SIGN AU 0CD5..0CD6 ; Alphabetic # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0CDD..0CDE ; Alphabetic # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA +0CDC..0CDE ; Alphabetic # Lo [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA 0CE0..0CE1 ; Alphabetic # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CE2..0CE3 ; Alphabetic # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL 0CF1..0CF2 ; Alphabetic # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA @@ -833,11 +835,8 @@ A771..A787 ; Alphabetic # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER A788 ; Alphabetic # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A78B..A78E ; Alphabetic # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; Alphabetic # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7CD ; Alphabetic # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE -A7D0..A7D1 ; Alphabetic # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G -A7D3 ; Alphabetic # L& LATIN SMALL LETTER DOUBLE THORN -A7D5..A7DC ; Alphabetic # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE -A7F2..A7F4 ; Alphabetic # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A790..A7DC ; Alphabetic # L& [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1..A7F4 ; Alphabetic # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; Alphabetic # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; Alphabetic # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9 ; Alphabetic # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -1020,6 +1019,7 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 108F4..108F5 ; Alphabetic # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW 10900..10915 ; Alphabetic # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU 10920..10939 ; Alphabetic # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C +10940..10959 ; Alphabetic # Lo [26] SIDETIC LETTER N01..SIDETIC LETTER N26 10980..109B7 ; Alphabetic # Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA 109BE..109BF ; Alphabetic # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN 10A00 ; Alphabetic # Lo KHAROSHTHI LETTER A @@ -1053,7 +1053,9 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 10EAB..10EAC ; Alphabetic # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK 10EB0..10EB1 ; Alphabetic # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE 10EC2..10EC4 ; Alphabetic # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW -10EFC ; Alphabetic # Mn ARABIC COMBINING ALEF OVERLAY +10EC5 ; Alphabetic # Lm ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW +10EC6..10EC7 ; Alphabetic # Lo [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW +10EFA..10EFC ; Alphabetic # Mn [3] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC COMBINING ALEF OVERLAY 10F00..10F1C ; Alphabetic # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F27 ; Alphabetic # Lo OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; Alphabetic # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN @@ -1239,6 +1241,12 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 11A97 ; Alphabetic # Mc SOYOMBO SIGN VISARGA 11A9D ; Alphabetic # Lo SOYOMBO MARK PLUTA 11AB0..11AF8 ; Alphabetic # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL +11B60 ; Alphabetic # Mn SHARADA VOWEL SIGN OE +11B61 ; Alphabetic # Mc SHARADA VOWEL SIGN OOE +11B62..11B64 ; Alphabetic # Mn [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E +11B65 ; Alphabetic # Mc SHARADA VOWEL SIGN SHORT O +11B66 ; Alphabetic # Mn SHARADA VOWEL SIGN CANDRA E +11B67 ; Alphabetic # Mc SHARADA VOWEL SIGN CANDRA O 11BC0..11BE0 ; Alphabetic # Lo [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO 11C00..11C08 ; Alphabetic # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L 11C0A..11C2E ; Alphabetic # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA @@ -1274,6 +1282,9 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 11D95 ; Alphabetic # Mn GUNJALA GONDI SIGN ANUSVARA 11D96 ; Alphabetic # Mc GUNJALA GONDI SIGN VISARGA 11D98 ; Alphabetic # Lo GUNJALA GONDI OM +11DB0..11DD8 ; Alphabetic # Lo [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH +11DD9 ; Alphabetic # Lm TOLONG SIKI SIGN SELA +11DDA..11DDB ; Alphabetic # Lo [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA 11EE0..11EF2 ; Alphabetic # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA 11EF3..11EF4 ; Alphabetic # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U 11EF5..11EF6 ; Alphabetic # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O @@ -1311,6 +1322,8 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 16D43..16D6A ; Alphabetic # Lo [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU 16D6B..16D6C ; Alphabetic # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT 16E40..16E7F ; Alphabetic # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EA0..16EB8 ; Alphabetic # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; Alphabetic # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY 16F00..16F4A ; Alphabetic # Lo [75] MIAO LETTER PA..MIAO LETTER RTE 16F4F ; Alphabetic # Mn MIAO SIGN CONSONANT MODIFIER BAR 16F50 ; Alphabetic # Lo MIAO LETTER NASALIZATION @@ -1320,9 +1333,11 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 16FE0..16FE1 ; Alphabetic # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK 16FE3 ; Alphabetic # Lm OLD CHINESE ITERATION MARK 16FF0..16FF1 ; Alphabetic # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY -17000..187F7 ; Alphabetic # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 -18800..18CD5 ; Alphabetic # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18CFF..18D08 ; Alphabetic # Lo [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 +16FF2..16FF3 ; Alphabetic # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER +16FF4..16FF6 ; Alphabetic # Nl [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS +17000..18CD5 ; Alphabetic # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5 +18CFF..18D1E ; Alphabetic # Lo [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E +18D80..18DF2 ; Alphabetic # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883 1AFF0..1AFF3 ; Alphabetic # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 1AFF5..1AFFB ; Alphabetic # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 1AFFD..1AFFE ; Alphabetic # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 @@ -1387,6 +1402,17 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 1E4EB ; Alphabetic # Lm NAG MUNDARI SIGN OJOD 1E5D0..1E5ED ; Alphabetic # Lo [30] OL ONAL LETTER O..OL ONAL LETTER EG 1E5F0 ; Alphabetic # Lo OL ONAL SIGN HODDOND +1E6C0..1E6DE ; Alphabetic # Lo [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO +1E6E0..1E6E2 ; Alphabetic # Lo [3] TAI YO LETTER AA..TAI YO LETTER UE +1E6E3 ; Alphabetic # Mn TAI YO SIGN UE +1E6E4..1E6E5 ; Alphabetic # Lo [2] TAI YO LETTER U..TAI YO LETTER AE +1E6E6 ; Alphabetic # Mn TAI YO SIGN AU +1E6E7..1E6ED ; Alphabetic # Lo [7] TAI YO LETTER O..TAI YO LETTER AUE +1E6EE..1E6EF ; Alphabetic # Mn [2] TAI YO SIGN AY..TAI YO SIGN ANG +1E6F0..1E6F4 ; Alphabetic # Lo [5] TAI YO LETTER AN..TAI YO LETTER AP +1E6F5 ; Alphabetic # Mn TAI YO SIGN OM +1E6FE ; Alphabetic # Lo TAI YO SYMBOL MUEANG +1E6FF ; Alphabetic # Lm TAI YO XAM LAI 1E7E0..1E7E6 ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO 1E7E8..1E7EB ; Alphabetic # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE 1E7ED..1E7EE ; Alphabetic # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -1432,16 +1458,15 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 1F150..1F169 ; Alphabetic # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z 1F170..1F189 ; Alphabetic # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z 20000..2A6DF ; Alphabetic # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF -2A700..2B739 ; Alphabetic # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 -2B740..2B81D ; Alphabetic # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D -2B820..2CEA1 ; Alphabetic # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 +2A700..2B81D ; Alphabetic # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEAD ; Alphabetic # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD 2CEB0..2EBE0 ; Alphabetic # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2EBF0..2EE5D ; Alphabetic # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 2F800..2FA1D ; Alphabetic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; Alphabetic # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -31350..323AF ; Alphabetic # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF +31350..33479 ; Alphabetic # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 -# Total code points: 142759 +# Total code points: 147421 # ================================================ @@ -1595,7 +1620,7 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 024B ; Lowercase # L& LATIN SMALL LETTER Q WITH HOOK TAIL 024D ; Lowercase # L& LATIN SMALL LETTER R WITH STROKE 024F..0293 ; Lowercase # L& [69] LATIN SMALL LETTER Y WITH STROKE..LATIN SMALL LETTER EZH WITH CURL -0295..02AF ; Lowercase # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +0296..02AF ; Lowercase # L& [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL 02B0..02B8 ; Lowercase # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y 02C0..02C1 ; Lowercase # Lm [2] MODIFIER LETTER GLOTTAL STOP..MODIFIER LETTER REVERSED GLOTTAL STOP 02E0..02E4 ; Lowercase # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP @@ -2073,13 +2098,14 @@ A7C3 ; Lowercase # L& LATIN SMALL LETTER ANGLICANA W A7C8 ; Lowercase # L& LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY A7CA ; Lowercase # L& LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY A7CD ; Lowercase # L& LATIN SMALL LETTER S WITH DIAGONAL STROKE +A7CF ; Lowercase # L& LATIN SMALL LETTER PHARYNGEAL VOICED FRICATIVE A7D1 ; Lowercase # L& LATIN SMALL LETTER CLOSED INSULAR G A7D3 ; Lowercase # L& LATIN SMALL LETTER DOUBLE THORN A7D5 ; Lowercase # L& LATIN SMALL LETTER DOUBLE WYNN A7D7 ; Lowercase # L& LATIN SMALL LETTER MIDDLE SCOTS S A7D9 ; Lowercase # L& LATIN SMALL LETTER SIGMOID S A7DB ; Lowercase # L& LATIN SMALL LETTER LAMBDA -A7F2..A7F4 ; Lowercase # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A7F1..A7F4 ; Lowercase # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F6 ; Lowercase # L& LATIN SMALL LETTER REVERSED HALF H A7F8..A7F9 ; Lowercase # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE A7FA ; Lowercase # L& LATIN LETTER SMALL CAPITAL TURNED M @@ -2105,6 +2131,7 @@ FF41..FF5A ; Lowercase # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH L 10D70..10D85 ; Lowercase # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA 118C0..118DF ; Lowercase # L& [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 16E60..16E7F ; Lowercase # L& [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EBB..16ED3 ; Lowercase # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY 1D41A..1D433 ; Lowercase # L& [26] MATHEMATICAL BOLD SMALL A..MATHEMATICAL BOLD SMALL Z 1D44E..1D454 ; Lowercase # L& [7] MATHEMATICAL ITALIC SMALL A..MATHEMATICAL ITALIC SMALL G 1D456..1D467 ; Lowercase # L& [18] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL ITALIC SMALL Z @@ -2139,7 +2166,7 @@ FF41..FF5A ; Lowercase # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH L 1E030..1E06D ; Lowercase # Lm [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE 1E922..1E943 ; Lowercase # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA -# Total code points: 2569 +# Total code points: 2595 # ================================================ @@ -2750,7 +2777,10 @@ A7C2 ; Uppercase # L& LATIN CAPITAL LETTER ANGLICANA W A7C4..A7C7 ; Uppercase # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY A7C9 ; Uppercase # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY A7CB..A7CC ; Uppercase # L& [2] LATIN CAPITAL LETTER RAMS HORN..LATIN CAPITAL LETTER S WITH DIAGONAL STROKE +A7CE ; Uppercase # L& LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE A7D0 ; Uppercase # L& LATIN CAPITAL LETTER CLOSED INSULAR G +A7D2 ; Uppercase # L& LATIN CAPITAL LETTER DOUBLE THORN +A7D4 ; Uppercase # L& LATIN CAPITAL LETTER DOUBLE WYNN A7D6 ; Uppercase # L& LATIN CAPITAL LETTER MIDDLE SCOTS S A7D8 ; Uppercase # L& LATIN CAPITAL LETTER SIGMOID S A7DA ; Uppercase # L& LATIN CAPITAL LETTER LAMBDA @@ -2767,6 +2797,7 @@ FF21..FF3A ; Uppercase # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH 10D50..10D65 ; Uppercase # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA 118A0..118BF ; Uppercase # L& [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO 16E40..16E5F ; Uppercase # L& [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y +16EA0..16EB8 ; Uppercase # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY 1D400..1D419 ; Uppercase # L& [26] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL BOLD CAPITAL Z 1D434..1D44D ; Uppercase # L& [26] MATHEMATICAL ITALIC CAPITAL A..MATHEMATICAL ITALIC CAPITAL Z 1D468..1D481 ; Uppercase # L& [26] MATHEMATICAL BOLD ITALIC CAPITAL A..MATHEMATICAL BOLD ITALIC CAPITAL Z @@ -2803,7 +2834,7 @@ FF21..FF3A ; Uppercase # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH 1F150..1F169 ; Uppercase # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z 1F170..1F189 ; Uppercase # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z -# Total code points: 1978 +# Total code points: 2006 # ================================================ @@ -2821,7 +2852,7 @@ FF21..FF3A ; Uppercase # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH 00F8..01BA ; Cased # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL 01BC..01BF ; Cased # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN 01C4..0293 ; Cased # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL -0295..02AF ; Cased # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +0296..02AF ; Cased # L& [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL 02B0..02B8 ; Cased # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y 02C0..02C1 ; Cased # Lm [2] MODIFIER LETTER GLOTTAL STOP..MODIFIER LETTER REVERSED GLOTTAL STOP 02E0..02E4 ; Cased # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP @@ -2911,11 +2942,8 @@ A722..A76F ; Cased # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN A770 ; Cased # Lm MODIFIER LETTER US A771..A787 ; Cased # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T A78B..A78E ; Cased # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT -A790..A7CD ; Cased # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE -A7D0..A7D1 ; Cased # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G -A7D3 ; Cased # L& LATIN SMALL LETTER DOUBLE THORN -A7D5..A7DC ; Cased # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE -A7F2..A7F4 ; Cased # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A790..A7DC ; Cased # L& [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1..A7F4 ; Cased # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; Cased # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F8..A7F9 ; Cased # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE A7FA ; Cased # L& LATIN LETTER SMALL CAPITAL TURNED M @@ -2949,6 +2977,8 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 10D70..10D85 ; Cased # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA 118A0..118DF ; Cased # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 16E40..16E7F ; Cased # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EA0..16EB8 ; Cased # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; Cased # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY 1D400..1D454 ; Cased # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G 1D456..1D49C ; Cased # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A 1D49E..1D49F ; Cased # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D @@ -2988,7 +3018,7 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 1F150..1F169 ; Cased # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z 1F170..1F189 ; Cased # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z -# Total code points: 4578 +# Total code points: 4632 # ================================================ @@ -3194,7 +3224,8 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 1AA7 ; Case_Ignorable # Lm TAI THAM SIGN MAI YAMOK 1AB0..1ABD ; Case_Ignorable # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW 1ABE ; Case_Ignorable # Me COMBINING PARENTHESES OVERLAY -1ABF..1ACE ; Case_Ignorable # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T +1ABF..1ADD ; Case_Ignorable # Mn [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW +1AE0..1AEB ; Case_Ignorable # Mn [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE 1B00..1B03 ; Case_Ignorable # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B34 ; Case_Ignorable # Mn BALINESE SIGN REREKAN 1B36..1B3A ; Case_Ignorable # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA @@ -3274,7 +3305,7 @@ A720..A721 ; Case_Ignorable # Sk [2] MODIFIER LETTER STRESS AND HIGH TONE.. A770 ; Case_Ignorable # Lm MODIFIER LETTER US A788 ; Case_Ignorable # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A789..A78A ; Case_Ignorable # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN -A7F2..A7F4 ; Case_Ignorable # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A7F1..A7F4 ; Case_Ignorable # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F8..A7F9 ; Case_Ignorable # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE A802 ; Case_Ignorable # Mn SYLOTI NAGRI SIGN DVISVARA A806 ; Case_Ignorable # Mn SYLOTI NAGRI SIGN HASANTA @@ -3350,7 +3381,8 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 10D69..10D6D ; Case_Ignorable # Mn [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK 10D6F ; Case_Ignorable # Lm GARAY REDUPLICATION MARK 10EAB..10EAC ; Case_Ignorable # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK -10EFC..10EFF ; Case_Ignorable # Mn [4] ARABIC COMBINING ALEF OVERLAY..ARABIC SMALL LOW WORD MADDA +10EC5 ; Case_Ignorable # Lm ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW +10EFA..10EFF ; Case_Ignorable # Mn [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA 10F46..10F50 ; Case_Ignorable # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW 10F82..10F85 ; Case_Ignorable # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW 11001 ; Case_Ignorable # Mn BRAHMI SIGN ANUSVARA @@ -3427,6 +3459,9 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 11A59..11A5B ; Case_Ignorable # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK 11A8A..11A96 ; Case_Ignorable # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA 11A98..11A99 ; Case_Ignorable # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER +11B60 ; Case_Ignorable # Mn SHARADA VOWEL SIGN OE +11B62..11B64 ; Case_Ignorable # Mn [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E +11B66 ; Case_Ignorable # Mn SHARADA VOWEL SIGN CANDRA E 11C30..11C36 ; Case_Ignorable # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L 11C38..11C3D ; Case_Ignorable # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA 11C3F ; Case_Ignorable # Mn BHAIKSUKI SIGN VIRAMA @@ -3442,6 +3477,7 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 11D90..11D91 ; Case_Ignorable # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI 11D95 ; Case_Ignorable # Mn GUNJALA GONDI SIGN ANUSVARA 11D97 ; Case_Ignorable # Mn GUNJALA GONDI VIRAMA +11DD9 ; Case_Ignorable # Lm TOLONG SIKI SIGN SELA 11EF3..11EF4 ; Case_Ignorable # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U 11F00..11F01 ; Case_Ignorable # Mn [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA 11F36..11F3A ; Case_Ignorable # Mn [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R @@ -3464,6 +3500,7 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 16FE0..16FE1 ; Case_Ignorable # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK 16FE3 ; Case_Ignorable # Lm OLD CHINESE ITERATION MARK 16FE4 ; Case_Ignorable # Mn KHITAN SMALL SCRIPT FILLER +16FF2..16FF3 ; Case_Ignorable # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER 1AFF0..1AFF3 ; Case_Ignorable # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 1AFF5..1AFFB ; Case_Ignorable # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 1AFFD..1AFFE ; Case_Ignorable # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 @@ -3497,6 +3534,11 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 1E4EB ; Case_Ignorable # Lm NAG MUNDARI SIGN OJOD 1E4EC..1E4EF ; Case_Ignorable # Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH 1E5EE..1E5EF ; Case_Ignorable # Mn [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR +1E6E3 ; Case_Ignorable # Mn TAI YO SIGN UE +1E6E6 ; Case_Ignorable # Mn TAI YO SIGN AU +1E6EE..1E6EF ; Case_Ignorable # Mn [2] TAI YO SIGN AY..TAI YO SIGN ANG +1E6F5 ; Case_Ignorable # Mn TAI YO SIGN OM +1E6FF ; Case_Ignorable # Lm TAI YO XAM LAI 1E8D0..1E8D6 ; Case_Ignorable # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS 1E944..1E94A ; Case_Ignorable # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA 1E94B ; Case_Ignorable # Lm ADLAM NASALIZATION MARK @@ -3505,13 +3547,14 @@ E0001 ; Case_Ignorable # Cf LANGUAGE TAG E0020..E007F ; Case_Ignorable # Cf [96] TAG SPACE..CANCEL TAG E0100..E01EF ; Case_Ignorable # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 2749 +# Total code points: 2794 # ================================================ # Derived Property: Changes_When_Lowercased (CWL) # Characters whose normalized forms are not stable under a toLowercase mapping. -# For more information, see D139 in Section 3.13, "Default Case Algorithms". +# For more information, see the definition of "isLowercase(X)" +# in the "Conformance" / "Default Case Algorithms" section of the core specification. # Changes_When_Lowercased(X) is true when toLowercase(toNFD(X)) != toNFD(X) 0041..005A ; Changes_When_Lowercased # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z @@ -4110,7 +4153,10 @@ A7C2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER ANGLICAN A7C4..A7C7 ; Changes_When_Lowercased # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY A7C9 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY A7CB..A7CC ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER RAMS HORN..LATIN CAPITAL LETTER S WITH DIAGONAL STROKE +A7CE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE A7D0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER CLOSED INSULAR G +A7D2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER DOUBLE THORN +A7D4 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER DOUBLE WYNN A7D6 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER MIDDLE SCOTS S A7D8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER SIGMOID S A7DA ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER LAMBDA @@ -4127,15 +4173,17 @@ FF21..FF3A ; Changes_When_Lowercased # L& [26] FULLWIDTH LATIN CAPITAL LETTE 10D50..10D65 ; Changes_When_Lowercased # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA 118A0..118BF ; Changes_When_Lowercased # L& [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO 16E40..16E5F ; Changes_When_Lowercased # L& [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y +16EA0..16EB8 ; Changes_When_Lowercased # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY 1E900..1E921 ; Changes_When_Lowercased # L& [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA -# Total code points: 1460 +# Total code points: 1488 # ================================================ # Derived Property: Changes_When_Uppercased (CWU) # Characters whose normalized forms are not stable under a toUppercase mapping. -# For more information, see D140 in Section 3.13, "Default Case Algorithms". +# For more information, see the definition of "isUppercase(X)" +# in the "Conformance" / "Default Case Algorithms" section of the core specification. # Changes_When_Uppercased(X) is true when toUppercase(toNFD(X)) != toNFD(X) 0061..007A ; Changes_When_Uppercased # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z @@ -4747,7 +4795,10 @@ A7C3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER ANGLICANA A7C8 ; Changes_When_Uppercased # L& LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY A7CA ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY A7CD ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH DIAGONAL STROKE +A7CF ; Changes_When_Uppercased # L& LATIN SMALL LETTER PHARYNGEAL VOICED FRICATIVE A7D1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER DOUBLE THORN +A7D5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER DOUBLE WYNN A7D7 ; Changes_When_Uppercased # L& LATIN SMALL LETTER MIDDLE SCOTS S A7D9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER SIGMOID S A7DB ; Changes_When_Uppercased # L& LATIN SMALL LETTER LAMBDA @@ -4767,15 +4818,17 @@ FF41..FF5A ; Changes_When_Uppercased # L& [26] FULLWIDTH LATIN SMALL LETTER 10D70..10D85 ; Changes_When_Uppercased # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA 118C0..118DF ; Changes_When_Uppercased # L& [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 16E60..16E7F ; Changes_When_Uppercased # L& [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EBB..16ED3 ; Changes_When_Uppercased # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY 1E922..1E943 ; Changes_When_Uppercased # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA -# Total code points: 1552 +# Total code points: 1580 # ================================================ # Derived Property: Changes_When_Titlecased (CWT) # Characters whose normalized forms are not stable under a toTitlecase mapping. -# For more information, see D141 in Section 3.13, "Default Case Algorithms". +# For more information, see the definition of "isTitlecase(X)" +# in the "Conformance" / "Default Case Algorithms" section of the core specification. # Changes_When_Titlecased(X) is true when toTitlecase(toNFD(X)) != toNFD(X) 0061..007A ; Changes_When_Titlecased # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z @@ -5386,7 +5439,10 @@ A7C3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER ANGLICANA A7C8 ; Changes_When_Titlecased # L& LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY A7CA ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY A7CD ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH DIAGONAL STROKE +A7CF ; Changes_When_Titlecased # L& LATIN SMALL LETTER PHARYNGEAL VOICED FRICATIVE A7D1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER DOUBLE THORN +A7D5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER DOUBLE WYNN A7D7 ; Changes_When_Titlecased # L& LATIN SMALL LETTER MIDDLE SCOTS S A7D9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER SIGMOID S A7DB ; Changes_When_Titlecased # L& LATIN SMALL LETTER LAMBDA @@ -5406,15 +5462,17 @@ FF41..FF5A ; Changes_When_Titlecased # L& [26] FULLWIDTH LATIN SMALL LETTER 10D70..10D85 ; Changes_When_Titlecased # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA 118C0..118DF ; Changes_When_Titlecased # L& [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 16E60..16E7F ; Changes_When_Titlecased # L& [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EBB..16ED3 ; Changes_When_Titlecased # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY 1E922..1E943 ; Changes_When_Titlecased # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA -# Total code points: 1479 +# Total code points: 1507 # ================================================ # Derived Property: Changes_When_Casefolded (CWCF) # Characters whose normalized forms are not stable under case folding. -# For more information, see D142 in Section 3.13, "Default Case Algorithms". +# For more information, see the definition of "isCasefolded(X)" +# in the "Conformance" / "Default Case Algorithms" section of the core specification. # Changes_When_Casefolded(X) is true when toCasefold(toNFD(X)) != toNFD(X) 0041..005A ; Changes_When_Casefolded # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z @@ -6022,7 +6080,10 @@ A7C2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER ANGLICAN A7C4..A7C7 ; Changes_When_Casefolded # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY A7C9 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY A7CB..A7CC ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER RAMS HORN..LATIN CAPITAL LETTER S WITH DIAGONAL STROKE +A7CE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE A7D0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER CLOSED INSULAR G +A7D2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER DOUBLE THORN +A7D4 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER DOUBLE WYNN A7D6 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER MIDDLE SCOTS S A7D8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER SIGMOID S A7DA ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER LAMBDA @@ -6042,15 +6103,17 @@ FF21..FF3A ; Changes_When_Casefolded # L& [26] FULLWIDTH LATIN CAPITAL LETTE 10D50..10D65 ; Changes_When_Casefolded # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA 118A0..118BF ; Changes_When_Casefolded # L& [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO 16E40..16E5F ; Changes_When_Casefolded # L& [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y +16EA0..16EB8 ; Changes_When_Casefolded # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY 1E900..1E921 ; Changes_When_Casefolded # L& [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA -# Total code points: 1533 +# Total code points: 1561 # ================================================ # Derived Property: Changes_When_Casemapped (CWCM) # Characters whose normalized forms are not stable under case mapping. -# For more information, see D143 in Section 3.13, "Default Case Algorithms". +# For more information, see the definition of "isCased(X)" +# in the "Conformance" / "Default Case Algorithms" section of the core specification. # Changes_When_Casemapped(X) is true when CWL(X), or CWT(X), or CWU(X) 0041..005A ; Changes_When_Casemapped # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z @@ -6156,9 +6219,7 @@ A779..A787 ; Changes_When_Casemapped # L& [15] LATIN CAPITAL LETTER INSULAR A78B..A78D ; Changes_When_Casemapped # L& [3] LATIN CAPITAL LETTER SALTILLO..LATIN CAPITAL LETTER TURNED H A790..A794 ; Changes_When_Casemapped # L& [5] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER C WITH PALATAL HOOK A796..A7AE ; Changes_When_Casemapped # L& [25] LATIN CAPITAL LETTER B WITH FLOURISH..LATIN CAPITAL LETTER SMALL CAPITAL I -A7B0..A7CD ; Changes_When_Casemapped # L& [30] LATIN CAPITAL LETTER TURNED K..LATIN SMALL LETTER S WITH DIAGONAL STROKE -A7D0..A7D1 ; Changes_When_Casemapped # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G -A7D6..A7DC ; Changes_When_Casemapped # L& [7] LATIN CAPITAL LETTER MIDDLE SCOTS S..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7B0..A7DC ; Changes_When_Casemapped # L& [45] LATIN CAPITAL LETTER TURNED K..LATIN CAPITAL LETTER LAMBDA WITH STROKE A7F5..A7F6 ; Changes_When_Casemapped # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H AB53 ; Changes_When_Casemapped # L& LATIN SMALL LETTER CHI AB70..ABBF ; Changes_When_Casemapped # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA @@ -6183,9 +6244,11 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 10D70..10D85 ; Changes_When_Casemapped # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA 118A0..118DF ; Changes_When_Casemapped # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 16E40..16E7F ; Changes_When_Casemapped # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EA0..16EB8 ; Changes_When_Casemapped # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; Changes_When_Casemapped # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY 1E900..1E943 ; Changes_When_Casemapped # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA -# Total code points: 2981 +# Total code points: 3037 # ================================================ @@ -6210,8 +6273,8 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 01BC..01BF ; ID_Start # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN 01C0..01C3 ; ID_Start # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK 01C4..0293 ; ID_Start # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL -0294 ; ID_Start # Lo LATIN LETTER GLOTTAL STOP -0295..02AF ; ID_Start # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +0294..0295 ; ID_Start # Lo [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE +0296..02AF ; ID_Start # L& [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL 02B0..02C1 ; ID_Start # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP 02C6..02D1 ; ID_Start # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON 02E0..02E4 ; ID_Start # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP @@ -6259,7 +6322,7 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 0840..0858 ; ID_Start # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN 0860..086A ; ID_Start # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA 0870..0887 ; ID_Start # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT -0889..088E ; ID_Start # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0889..088F ; ID_Start # Lo [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE 08A0..08C8 ; ID_Start # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF 08C9 ; ID_Start # Lm ARABIC SMALL FARSI YEH 0904..0939 ; ID_Start # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA @@ -6327,7 +6390,7 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 0C2A..0C39 ; ID_Start # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA 0C3D ; ID_Start # Lo TELUGU SIGN AVAGRAHA 0C58..0C5A ; ID_Start # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA -0C5D ; ID_Start # Lo TELUGU LETTER NAKAARA POLLU +0C5C..0C5D ; ID_Start # Lo [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; ID_Start # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C80 ; ID_Start # Lo KANNADA SIGN SPACING CANDRABINDU 0C85..0C8C ; ID_Start # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L @@ -6336,7 +6399,7 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 0CAA..0CB3 ; ID_Start # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA 0CB5..0CB9 ; ID_Start # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA 0CBD ; ID_Start # Lo KANNADA SIGN AVAGRAHA -0CDD..0CDE ; ID_Start # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA +0CDC..0CDE ; ID_Start # Lo [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA 0CE0..0CE1 ; ID_Start # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CF1..0CF2 ; ID_Start # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA 0D04..0D0C ; ID_Start # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L @@ -6561,11 +6624,8 @@ A771..A787 ; ID_Start # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER I A788 ; ID_Start # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A78B..A78E ; ID_Start # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; ID_Start # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7CD ; ID_Start # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE -A7D0..A7D1 ; ID_Start # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G -A7D3 ; ID_Start # L& LATIN SMALL LETTER DOUBLE THORN -A7D5..A7DC ; ID_Start # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE -A7F2..A7F4 ; ID_Start # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A790..A7DC ; ID_Start # L& [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1..A7F4 ; ID_Start # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; ID_Start # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; ID_Start # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9 ; ID_Start # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -6702,6 +6762,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 108F4..108F5 ; ID_Start # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW 10900..10915 ; ID_Start # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU 10920..10939 ; ID_Start # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C +10940..10959 ; ID_Start # Lo [26] SIDETIC LETTER N01..SIDETIC LETTER N26 10980..109B7 ; ID_Start # Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA 109BE..109BF ; ID_Start # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN 10A00 ; ID_Start # Lo KHAROSHTHI LETTER A @@ -6729,6 +6790,8 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 10E80..10EA9 ; ID_Start # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET 10EB0..10EB1 ; ID_Start # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE 10EC2..10EC4 ; ID_Start # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW +10EC5 ; ID_Start # Lm ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW +10EC6..10EC7 ; ID_Start # Lo [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW 10F00..10F1C ; ID_Start # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F27 ; ID_Start # Lo OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; ID_Start # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN @@ -6821,6 +6884,9 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 11D67..11D68 ; ID_Start # Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI 11D6A..11D89 ; ID_Start # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA 11D98 ; ID_Start # Lo GUNJALA GONDI OM +11DB0..11DD8 ; ID_Start # Lo [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH +11DD9 ; ID_Start # Lm TOLONG SIKI SIGN SELA +11DDA..11DDB ; ID_Start # Lo [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA 11EE0..11EF2 ; ID_Start # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA 11F02 ; ID_Start # Lo KAWI SIGN REPHA 11F04..11F10 ; ID_Start # Lo [13] KAWI LETTER A..KAWI LETTER O @@ -6847,14 +6913,18 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 16D43..16D6A ; ID_Start # Lo [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU 16D6B..16D6C ; ID_Start # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT 16E40..16E7F ; ID_Start # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EA0..16EB8 ; ID_Start # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; ID_Start # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY 16F00..16F4A ; ID_Start # Lo [75] MIAO LETTER PA..MIAO LETTER RTE 16F50 ; ID_Start # Lo MIAO LETTER NASALIZATION 16F93..16F9F ; ID_Start # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 16FE0..16FE1 ; ID_Start # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK 16FE3 ; ID_Start # Lm OLD CHINESE ITERATION MARK -17000..187F7 ; ID_Start # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 -18800..18CD5 ; ID_Start # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18CFF..18D08 ; ID_Start # Lo [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 +16FF2..16FF3 ; ID_Start # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER +16FF4..16FF6 ; ID_Start # Nl [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS +17000..18CD5 ; ID_Start # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5 +18CFF..18D1E ; ID_Start # Lo [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E +18D80..18DF2 ; ID_Start # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883 1AFF0..1AFF3 ; ID_Start # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 1AFF5..1AFFB ; ID_Start # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 1AFFD..1AFFE ; ID_Start # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 @@ -6912,6 +6982,13 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 1E4EB ; ID_Start # Lm NAG MUNDARI SIGN OJOD 1E5D0..1E5ED ; ID_Start # Lo [30] OL ONAL LETTER O..OL ONAL LETTER EG 1E5F0 ; ID_Start # Lo OL ONAL SIGN HODDOND +1E6C0..1E6DE ; ID_Start # Lo [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO +1E6E0..1E6E2 ; ID_Start # Lo [3] TAI YO LETTER AA..TAI YO LETTER UE +1E6E4..1E6E5 ; ID_Start # Lo [2] TAI YO LETTER U..TAI YO LETTER AE +1E6E7..1E6ED ; ID_Start # Lo [7] TAI YO LETTER O..TAI YO LETTER AUE +1E6F0..1E6F4 ; ID_Start # Lo [5] TAI YO LETTER AN..TAI YO LETTER AP +1E6FE ; ID_Start # Lo TAI YO SYMBOL MUEANG +1E6FF ; ID_Start # Lm TAI YO XAM LAI 1E7E0..1E7E6 ; ID_Start # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO 1E7E8..1E7EB ; ID_Start # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE 1E7ED..1E7EE ; ID_Start # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -6953,16 +7030,15 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 1EEA5..1EEA9 ; ID_Start # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH 1EEAB..1EEBB ; ID_Start # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN 20000..2A6DF ; ID_Start # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF -2A700..2B739 ; ID_Start # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 -2B740..2B81D ; ID_Start # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D -2B820..2CEA1 ; ID_Start # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 +2A700..2B81D ; ID_Start # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEAD ; ID_Start # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD 2CEB0..2EBE0 ; ID_Start # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2EBF0..2EE5D ; ID_Start # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 2F800..2FA1D ; ID_Start # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; ID_Start # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -31350..323AF ; ID_Start # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF +31350..33479 ; ID_Start # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 -# Total code points: 141269 +# Total code points: 145916 # ================================================ @@ -6991,8 +7067,8 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 01BC..01BF ; ID_Continue # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN 01C0..01C3 ; ID_Continue # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK 01C4..0293 ; ID_Continue # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL -0294 ; ID_Continue # Lo LATIN LETTER GLOTTAL STOP -0295..02AF ; ID_Continue # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +0294..0295 ; ID_Continue # Lo [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE +0296..02AF ; ID_Continue # L& [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL 02B0..02C1 ; ID_Continue # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP 02C6..02D1 ; ID_Continue # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON 02E0..02E4 ; ID_Continue # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP @@ -7068,7 +7144,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 0859..085B ; ID_Continue # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK 0860..086A ; ID_Continue # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA 0870..0887 ; ID_Continue # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT -0889..088E ; ID_Continue # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0889..088F ; ID_Continue # Lo [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE 0897..089F ; ID_Continue # Mn [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA 08A0..08C8 ; ID_Continue # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF 08C9 ; ID_Continue # Lm ARABIC SMALL FARSI YEH @@ -7218,7 +7294,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 0C4A..0C4D ; ID_Continue # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA 0C55..0C56 ; ID_Continue # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK 0C58..0C5A ; ID_Continue # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA -0C5D ; ID_Continue # Lo TELUGU LETTER NAKAARA POLLU +0C5C..0C5D ; ID_Continue # Lo [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; ID_Continue # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C62..0C63 ; ID_Continue # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL 0C66..0C6F ; ID_Continue # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE @@ -7240,7 +7316,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 0CCA..0CCB ; ID_Continue # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO 0CCC..0CCD ; ID_Continue # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA 0CD5..0CD6 ; ID_Continue # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0CDD..0CDE ; ID_Continue # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA +0CDC..0CDE ; ID_Continue # Lo [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA 0CE0..0CE1 ; ID_Continue # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CE2..0CE3 ; ID_Continue # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL 0CE6..0CEF ; ID_Continue # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE @@ -7457,7 +7533,8 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 1A90..1A99 ; ID_Continue # Nd [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE 1AA7 ; ID_Continue # Lm TAI THAM SIGN MAI YAMOK 1AB0..1ABD ; ID_Continue # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW -1ABF..1ACE ; ID_Continue # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T +1ABF..1ADD ; ID_Continue # Mn [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW +1AE0..1AEB ; ID_Continue # Mn [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE 1B00..1B03 ; ID_Continue # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B04 ; ID_Continue # Mc BALINESE SIGN BISAH 1B05..1B33 ; ID_Continue # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA @@ -7646,11 +7723,8 @@ A771..A787 ; ID_Continue # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTE A788 ; ID_Continue # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A78B..A78E ; ID_Continue # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; ID_Continue # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7CD ; ID_Continue # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE -A7D0..A7D1 ; ID_Continue # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G -A7D3 ; ID_Continue # L& LATIN SMALL LETTER DOUBLE THORN -A7D5..A7DC ; ID_Continue # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE -A7F2..A7F4 ; ID_Continue # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A790..A7DC ; ID_Continue # L& [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1..A7F4 ; ID_Continue # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; ID_Continue # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; ID_Continue # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9 ; ID_Continue # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -7857,6 +7931,7 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 108F4..108F5 ; ID_Continue # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW 10900..10915 ; ID_Continue # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU 10920..10939 ; ID_Continue # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C +10940..10959 ; ID_Continue # Lo [26] SIDETIC LETTER N01..SIDETIC LETTER N26 10980..109B7 ; ID_Continue # Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA 109BE..109BF ; ID_Continue # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN 10A00 ; ID_Continue # Lo KHAROSHTHI LETTER A @@ -7895,7 +7970,9 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 10EAB..10EAC ; ID_Continue # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK 10EB0..10EB1 ; ID_Continue # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE 10EC2..10EC4 ; ID_Continue # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW -10EFC..10EFF ; ID_Continue # Mn [4] ARABIC COMBINING ALEF OVERLAY..ARABIC SMALL LOW WORD MADDA +10EC5 ; ID_Continue # Lm ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW +10EC6..10EC7 ; ID_Continue # Lo [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW +10EFA..10EFF ; ID_Continue # Mn [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA 10F00..10F1C ; ID_Continue # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F27 ; ID_Continue # Lo OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; ID_Continue # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN @@ -8122,6 +8199,12 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 11A98..11A99 ; ID_Continue # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER 11A9D ; ID_Continue # Lo SOYOMBO MARK PLUTA 11AB0..11AF8 ; ID_Continue # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL +11B60 ; ID_Continue # Mn SHARADA VOWEL SIGN OE +11B61 ; ID_Continue # Mc SHARADA VOWEL SIGN OOE +11B62..11B64 ; ID_Continue # Mn [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E +11B65 ; ID_Continue # Mc SHARADA VOWEL SIGN SHORT O +11B66 ; ID_Continue # Mn SHARADA VOWEL SIGN CANDRA E +11B67 ; ID_Continue # Mc SHARADA VOWEL SIGN CANDRA O 11BC0..11BE0 ; ID_Continue # Lo [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO 11BF0..11BF9 ; ID_Continue # Nd [10] SUNUWAR DIGIT ZERO..SUNUWAR DIGIT NINE 11C00..11C08 ; ID_Continue # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L @@ -8162,6 +8245,10 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 11D97 ; ID_Continue # Mn GUNJALA GONDI VIRAMA 11D98 ; ID_Continue # Lo GUNJALA GONDI OM 11DA0..11DA9 ; ID_Continue # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE +11DB0..11DD8 ; ID_Continue # Lo [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH +11DD9 ; ID_Continue # Lm TOLONG SIKI SIGN SELA +11DDA..11DDB ; ID_Continue # Lo [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA +11DE0..11DE9 ; ID_Continue # Nd [10] TOLONG SIKI DIGIT ZERO..TOLONG SIKI DIGIT NINE 11EE0..11EF2 ; ID_Continue # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA 11EF3..11EF4 ; ID_Continue # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U 11EF5..11EF6 ; ID_Continue # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O @@ -8212,6 +8299,8 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 16D6B..16D6C ; ID_Continue # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT 16D70..16D79 ; ID_Continue # Nd [10] KIRAT RAI DIGIT ZERO..KIRAT RAI DIGIT NINE 16E40..16E7F ; ID_Continue # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EA0..16EB8 ; ID_Continue # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; ID_Continue # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY 16F00..16F4A ; ID_Continue # Lo [75] MIAO LETTER PA..MIAO LETTER RTE 16F4F ; ID_Continue # Mn MIAO SIGN CONSONANT MODIFIER BAR 16F50 ; ID_Continue # Lo MIAO LETTER NASALIZATION @@ -8222,9 +8311,11 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 16FE3 ; ID_Continue # Lm OLD CHINESE ITERATION MARK 16FE4 ; ID_Continue # Mn KHITAN SMALL SCRIPT FILLER 16FF0..16FF1 ; ID_Continue # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY -17000..187F7 ; ID_Continue # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 -18800..18CD5 ; ID_Continue # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18CFF..18D08 ; ID_Continue # Lo [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 +16FF2..16FF3 ; ID_Continue # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER +16FF4..16FF6 ; ID_Continue # Nl [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS +17000..18CD5 ; ID_Continue # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5 +18CFF..18D1E ; ID_Continue # Lo [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E +18D80..18DF2 ; ID_Continue # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883 1AFF0..1AFF3 ; ID_Continue # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 1AFF5..1AFFB ; ID_Continue # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 1AFFD..1AFFE ; ID_Continue # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 @@ -8315,6 +8406,17 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 1E5EE..1E5EF ; ID_Continue # Mn [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR 1E5F0 ; ID_Continue # Lo OL ONAL SIGN HODDOND 1E5F1..1E5FA ; ID_Continue # Nd [10] OL ONAL DIGIT ZERO..OL ONAL DIGIT NINE +1E6C0..1E6DE ; ID_Continue # Lo [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO +1E6E0..1E6E2 ; ID_Continue # Lo [3] TAI YO LETTER AA..TAI YO LETTER UE +1E6E3 ; ID_Continue # Mn TAI YO SIGN UE +1E6E4..1E6E5 ; ID_Continue # Lo [2] TAI YO LETTER U..TAI YO LETTER AE +1E6E6 ; ID_Continue # Mn TAI YO SIGN AU +1E6E7..1E6ED ; ID_Continue # Lo [7] TAI YO LETTER O..TAI YO LETTER AUE +1E6EE..1E6EF ; ID_Continue # Mn [2] TAI YO SIGN AY..TAI YO SIGN ANG +1E6F0..1E6F4 ; ID_Continue # Lo [5] TAI YO LETTER AN..TAI YO LETTER AP +1E6F5 ; ID_Continue # Mn TAI YO SIGN OM +1E6FE ; ID_Continue # Lo TAI YO SYMBOL MUEANG +1E6FF ; ID_Continue # Lm TAI YO XAM LAI 1E7E0..1E7E6 ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO 1E7E8..1E7EB ; ID_Continue # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE 1E7ED..1E7EE ; ID_Continue # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -8360,17 +8462,16 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 1EEAB..1EEBB ; ID_Continue # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN 1FBF0..1FBF9 ; ID_Continue # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE 20000..2A6DF ; ID_Continue # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF -2A700..2B739 ; ID_Continue # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 -2B740..2B81D ; ID_Continue # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D -2B820..2CEA1 ; ID_Continue # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 +2A700..2B81D ; ID_Continue # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEAD ; ID_Continue # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD 2CEB0..2EBE0 ; ID_Continue # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2EBF0..2EE5D ; ID_Continue # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 2F800..2FA1D ; ID_Continue # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; ID_Continue # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -31350..323AF ; ID_Continue # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF +31350..33479 ; ID_Continue # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 144541 +# Total code points: 149240 # ================================================ @@ -8393,8 +8494,8 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR 01BC..01BF ; XID_Start # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN 01C0..01C3 ; XID_Start # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK 01C4..0293 ; XID_Start # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL -0294 ; XID_Start # Lo LATIN LETTER GLOTTAL STOP -0295..02AF ; XID_Start # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +0294..0295 ; XID_Start # Lo [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE +0296..02AF ; XID_Start # L& [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL 02B0..02C1 ; XID_Start # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP 02C6..02D1 ; XID_Start # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON 02E0..02E4 ; XID_Start # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP @@ -8441,7 +8542,7 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR 0840..0858 ; XID_Start # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN 0860..086A ; XID_Start # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA 0870..0887 ; XID_Start # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT -0889..088E ; XID_Start # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0889..088F ; XID_Start # Lo [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE 08A0..08C8 ; XID_Start # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF 08C9 ; XID_Start # Lm ARABIC SMALL FARSI YEH 0904..0939 ; XID_Start # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA @@ -8509,7 +8610,7 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR 0C2A..0C39 ; XID_Start # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA 0C3D ; XID_Start # Lo TELUGU SIGN AVAGRAHA 0C58..0C5A ; XID_Start # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA -0C5D ; XID_Start # Lo TELUGU LETTER NAKAARA POLLU +0C5C..0C5D ; XID_Start # Lo [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; XID_Start # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C80 ; XID_Start # Lo KANNADA SIGN SPACING CANDRABINDU 0C85..0C8C ; XID_Start # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L @@ -8518,7 +8619,7 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR 0CAA..0CB3 ; XID_Start # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA 0CB5..0CB9 ; XID_Start # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA 0CBD ; XID_Start # Lo KANNADA SIGN AVAGRAHA -0CDD..0CDE ; XID_Start # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA +0CDC..0CDE ; XID_Start # Lo [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA 0CE0..0CE1 ; XID_Start # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CF1..0CF2 ; XID_Start # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA 0D04..0D0C ; XID_Start # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L @@ -8742,11 +8843,8 @@ A771..A787 ; XID_Start # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER A788 ; XID_Start # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A78B..A78E ; XID_Start # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; XID_Start # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7CD ; XID_Start # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE -A7D0..A7D1 ; XID_Start # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G -A7D3 ; XID_Start # L& LATIN SMALL LETTER DOUBLE THORN -A7D5..A7DC ; XID_Start # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE -A7F2..A7F4 ; XID_Start # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A790..A7DC ; XID_Start # L& [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1..A7F4 ; XID_Start # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; XID_Start # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; XID_Start # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9 ; XID_Start # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -8888,6 +8986,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 108F4..108F5 ; XID_Start # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW 10900..10915 ; XID_Start # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU 10920..10939 ; XID_Start # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C +10940..10959 ; XID_Start # Lo [26] SIDETIC LETTER N01..SIDETIC LETTER N26 10980..109B7 ; XID_Start # Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA 109BE..109BF ; XID_Start # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN 10A00 ; XID_Start # Lo KHAROSHTHI LETTER A @@ -8915,6 +9014,8 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 10E80..10EA9 ; XID_Start # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET 10EB0..10EB1 ; XID_Start # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE 10EC2..10EC4 ; XID_Start # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW +10EC5 ; XID_Start # Lm ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW +10EC6..10EC7 ; XID_Start # Lo [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW 10F00..10F1C ; XID_Start # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F27 ; XID_Start # Lo OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; XID_Start # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN @@ -9007,6 +9108,9 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 11D67..11D68 ; XID_Start # Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI 11D6A..11D89 ; XID_Start # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA 11D98 ; XID_Start # Lo GUNJALA GONDI OM +11DB0..11DD8 ; XID_Start # Lo [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH +11DD9 ; XID_Start # Lm TOLONG SIKI SIGN SELA +11DDA..11DDB ; XID_Start # Lo [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA 11EE0..11EF2 ; XID_Start # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA 11F02 ; XID_Start # Lo KAWI SIGN REPHA 11F04..11F10 ; XID_Start # Lo [13] KAWI LETTER A..KAWI LETTER O @@ -9033,14 +9137,18 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 16D43..16D6A ; XID_Start # Lo [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU 16D6B..16D6C ; XID_Start # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT 16E40..16E7F ; XID_Start # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EA0..16EB8 ; XID_Start # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; XID_Start # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY 16F00..16F4A ; XID_Start # Lo [75] MIAO LETTER PA..MIAO LETTER RTE 16F50 ; XID_Start # Lo MIAO LETTER NASALIZATION 16F93..16F9F ; XID_Start # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 16FE0..16FE1 ; XID_Start # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK 16FE3 ; XID_Start # Lm OLD CHINESE ITERATION MARK -17000..187F7 ; XID_Start # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 -18800..18CD5 ; XID_Start # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18CFF..18D08 ; XID_Start # Lo [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 +16FF2..16FF3 ; XID_Start # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER +16FF4..16FF6 ; XID_Start # Nl [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS +17000..18CD5 ; XID_Start # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5 +18CFF..18D1E ; XID_Start # Lo [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E +18D80..18DF2 ; XID_Start # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883 1AFF0..1AFF3 ; XID_Start # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 1AFF5..1AFFB ; XID_Start # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 1AFFD..1AFFE ; XID_Start # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 @@ -9098,6 +9206,13 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 1E4EB ; XID_Start # Lm NAG MUNDARI SIGN OJOD 1E5D0..1E5ED ; XID_Start # Lo [30] OL ONAL LETTER O..OL ONAL LETTER EG 1E5F0 ; XID_Start # Lo OL ONAL SIGN HODDOND +1E6C0..1E6DE ; XID_Start # Lo [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO +1E6E0..1E6E2 ; XID_Start # Lo [3] TAI YO LETTER AA..TAI YO LETTER UE +1E6E4..1E6E5 ; XID_Start # Lo [2] TAI YO LETTER U..TAI YO LETTER AE +1E6E7..1E6ED ; XID_Start # Lo [7] TAI YO LETTER O..TAI YO LETTER AUE +1E6F0..1E6F4 ; XID_Start # Lo [5] TAI YO LETTER AN..TAI YO LETTER AP +1E6FE ; XID_Start # Lo TAI YO SYMBOL MUEANG +1E6FF ; XID_Start # Lm TAI YO XAM LAI 1E7E0..1E7E6 ; XID_Start # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO 1E7E8..1E7EB ; XID_Start # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE 1E7ED..1E7EE ; XID_Start # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -9139,16 +9254,15 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 1EEA5..1EEA9 ; XID_Start # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH 1EEAB..1EEBB ; XID_Start # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN 20000..2A6DF ; XID_Start # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF -2A700..2B739 ; XID_Start # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 -2B740..2B81D ; XID_Start # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D -2B820..2CEA1 ; XID_Start # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 +2A700..2B81D ; XID_Start # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEAD ; XID_Start # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD 2CEB0..2EBE0 ; XID_Start # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2EBF0..2EE5D ; XID_Start # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 2F800..2FA1D ; XID_Start # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; XID_Start # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -31350..323AF ; XID_Start # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF +31350..33479 ; XID_Start # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 -# Total code points: 141246 +# Total code points: 145893 # ================================================ @@ -9174,8 +9288,8 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 01BC..01BF ; XID_Continue # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN 01C0..01C3 ; XID_Continue # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK 01C4..0293 ; XID_Continue # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL -0294 ; XID_Continue # Lo LATIN LETTER GLOTTAL STOP -0295..02AF ; XID_Continue # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +0294..0295 ; XID_Continue # Lo [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE +0296..02AF ; XID_Continue # L& [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL 02B0..02C1 ; XID_Continue # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP 02C6..02D1 ; XID_Continue # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON 02E0..02E4 ; XID_Continue # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP @@ -9250,7 +9364,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 0859..085B ; XID_Continue # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK 0860..086A ; XID_Continue # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA 0870..0887 ; XID_Continue # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT -0889..088E ; XID_Continue # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0889..088F ; XID_Continue # Lo [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE 0897..089F ; XID_Continue # Mn [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA 08A0..08C8 ; XID_Continue # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF 08C9 ; XID_Continue # Lm ARABIC SMALL FARSI YEH @@ -9400,7 +9514,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 0C4A..0C4D ; XID_Continue # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA 0C55..0C56 ; XID_Continue # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK 0C58..0C5A ; XID_Continue # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA -0C5D ; XID_Continue # Lo TELUGU LETTER NAKAARA POLLU +0C5C..0C5D ; XID_Continue # Lo [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; XID_Continue # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C62..0C63 ; XID_Continue # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL 0C66..0C6F ; XID_Continue # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE @@ -9422,7 +9536,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 0CCA..0CCB ; XID_Continue # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO 0CCC..0CCD ; XID_Continue # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA 0CD5..0CD6 ; XID_Continue # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0CDD..0CDE ; XID_Continue # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA +0CDC..0CDE ; XID_Continue # Lo [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA 0CE0..0CE1 ; XID_Continue # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CE2..0CE3 ; XID_Continue # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL 0CE6..0CEF ; XID_Continue # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE @@ -9639,7 +9753,8 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 1A90..1A99 ; XID_Continue # Nd [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE 1AA7 ; XID_Continue # Lm TAI THAM SIGN MAI YAMOK 1AB0..1ABD ; XID_Continue # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW -1ABF..1ACE ; XID_Continue # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T +1ABF..1ADD ; XID_Continue # Mn [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW +1AE0..1AEB ; XID_Continue # Mn [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE 1B00..1B03 ; XID_Continue # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B04 ; XID_Continue # Mc BALINESE SIGN BISAH 1B05..1B33 ; XID_Continue # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA @@ -9827,11 +9942,8 @@ A771..A787 ; XID_Continue # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETT A788 ; XID_Continue # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A78B..A78E ; XID_Continue # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; XID_Continue # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7CD ; XID_Continue # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE -A7D0..A7D1 ; XID_Continue # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G -A7D3 ; XID_Continue # L& LATIN SMALL LETTER DOUBLE THORN -A7D5..A7DC ; XID_Continue # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE -A7F2..A7F4 ; XID_Continue # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A790..A7DC ; XID_Continue # L& [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1..A7F4 ; XID_Continue # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; XID_Continue # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; XID_Continue # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9 ; XID_Continue # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -10044,6 +10156,7 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 108F4..108F5 ; XID_Continue # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW 10900..10915 ; XID_Continue # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU 10920..10939 ; XID_Continue # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C +10940..10959 ; XID_Continue # Lo [26] SIDETIC LETTER N01..SIDETIC LETTER N26 10980..109B7 ; XID_Continue # Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA 109BE..109BF ; XID_Continue # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN 10A00 ; XID_Continue # Lo KHAROSHTHI LETTER A @@ -10082,7 +10195,9 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 10EAB..10EAC ; XID_Continue # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK 10EB0..10EB1 ; XID_Continue # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE 10EC2..10EC4 ; XID_Continue # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW -10EFC..10EFF ; XID_Continue # Mn [4] ARABIC COMBINING ALEF OVERLAY..ARABIC SMALL LOW WORD MADDA +10EC5 ; XID_Continue # Lm ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW +10EC6..10EC7 ; XID_Continue # Lo [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW +10EFA..10EFF ; XID_Continue # Mn [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA 10F00..10F1C ; XID_Continue # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F27 ; XID_Continue # Lo OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; XID_Continue # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN @@ -10309,6 +10424,12 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 11A98..11A99 ; XID_Continue # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER 11A9D ; XID_Continue # Lo SOYOMBO MARK PLUTA 11AB0..11AF8 ; XID_Continue # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL +11B60 ; XID_Continue # Mn SHARADA VOWEL SIGN OE +11B61 ; XID_Continue # Mc SHARADA VOWEL SIGN OOE +11B62..11B64 ; XID_Continue # Mn [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E +11B65 ; XID_Continue # Mc SHARADA VOWEL SIGN SHORT O +11B66 ; XID_Continue # Mn SHARADA VOWEL SIGN CANDRA E +11B67 ; XID_Continue # Mc SHARADA VOWEL SIGN CANDRA O 11BC0..11BE0 ; XID_Continue # Lo [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO 11BF0..11BF9 ; XID_Continue # Nd [10] SUNUWAR DIGIT ZERO..SUNUWAR DIGIT NINE 11C00..11C08 ; XID_Continue # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L @@ -10349,6 +10470,10 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 11D97 ; XID_Continue # Mn GUNJALA GONDI VIRAMA 11D98 ; XID_Continue # Lo GUNJALA GONDI OM 11DA0..11DA9 ; XID_Continue # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE +11DB0..11DD8 ; XID_Continue # Lo [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH +11DD9 ; XID_Continue # Lm TOLONG SIKI SIGN SELA +11DDA..11DDB ; XID_Continue # Lo [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA +11DE0..11DE9 ; XID_Continue # Nd [10] TOLONG SIKI DIGIT ZERO..TOLONG SIKI DIGIT NINE 11EE0..11EF2 ; XID_Continue # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA 11EF3..11EF4 ; XID_Continue # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U 11EF5..11EF6 ; XID_Continue # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O @@ -10399,6 +10524,8 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 16D6B..16D6C ; XID_Continue # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT 16D70..16D79 ; XID_Continue # Nd [10] KIRAT RAI DIGIT ZERO..KIRAT RAI DIGIT NINE 16E40..16E7F ; XID_Continue # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EA0..16EB8 ; XID_Continue # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; XID_Continue # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY 16F00..16F4A ; XID_Continue # Lo [75] MIAO LETTER PA..MIAO LETTER RTE 16F4F ; XID_Continue # Mn MIAO SIGN CONSONANT MODIFIER BAR 16F50 ; XID_Continue # Lo MIAO LETTER NASALIZATION @@ -10409,9 +10536,11 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 16FE3 ; XID_Continue # Lm OLD CHINESE ITERATION MARK 16FE4 ; XID_Continue # Mn KHITAN SMALL SCRIPT FILLER 16FF0..16FF1 ; XID_Continue # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY -17000..187F7 ; XID_Continue # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 -18800..18CD5 ; XID_Continue # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18CFF..18D08 ; XID_Continue # Lo [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 +16FF2..16FF3 ; XID_Continue # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER +16FF4..16FF6 ; XID_Continue # Nl [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS +17000..18CD5 ; XID_Continue # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5 +18CFF..18D1E ; XID_Continue # Lo [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E +18D80..18DF2 ; XID_Continue # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883 1AFF0..1AFF3 ; XID_Continue # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 1AFF5..1AFFB ; XID_Continue # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 1AFFD..1AFFE ; XID_Continue # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 @@ -10502,6 +10631,17 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 1E5EE..1E5EF ; XID_Continue # Mn [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR 1E5F0 ; XID_Continue # Lo OL ONAL SIGN HODDOND 1E5F1..1E5FA ; XID_Continue # Nd [10] OL ONAL DIGIT ZERO..OL ONAL DIGIT NINE +1E6C0..1E6DE ; XID_Continue # Lo [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO +1E6E0..1E6E2 ; XID_Continue # Lo [3] TAI YO LETTER AA..TAI YO LETTER UE +1E6E3 ; XID_Continue # Mn TAI YO SIGN UE +1E6E4..1E6E5 ; XID_Continue # Lo [2] TAI YO LETTER U..TAI YO LETTER AE +1E6E6 ; XID_Continue # Mn TAI YO SIGN AU +1E6E7..1E6ED ; XID_Continue # Lo [7] TAI YO LETTER O..TAI YO LETTER AUE +1E6EE..1E6EF ; XID_Continue # Mn [2] TAI YO SIGN AY..TAI YO SIGN ANG +1E6F0..1E6F4 ; XID_Continue # Lo [5] TAI YO LETTER AN..TAI YO LETTER AP +1E6F5 ; XID_Continue # Mn TAI YO SIGN OM +1E6FE ; XID_Continue # Lo TAI YO SYMBOL MUEANG +1E6FF ; XID_Continue # Lm TAI YO XAM LAI 1E7E0..1E7E6 ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO 1E7E8..1E7EB ; XID_Continue # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE 1E7ED..1E7EE ; XID_Continue # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -10547,17 +10687,16 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 1EEAB..1EEBB ; XID_Continue # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN 1FBF0..1FBF9 ; XID_Continue # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE 20000..2A6DF ; XID_Continue # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF -2A700..2B739 ; XID_Continue # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 -2B740..2B81D ; XID_Continue # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D -2B820..2CEA1 ; XID_Continue # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 +2A700..2B81D ; XID_Continue # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEAD ; XID_Continue # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD 2CEB0..2EBE0 ; XID_Continue # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2EBF0..2EE5D ; XID_Continue # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 2F800..2FA1D ; XID_Continue # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; XID_Continue # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -31350..323AF ; XID_Continue # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF +31350..33479 ; XID_Continue # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 E0100..E01EF ; XID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 144522 +# Total code points: 149221 # ================================================ @@ -10778,7 +10917,8 @@ E01F0..E0FFF ; Default_Ignorable_Code_Point # Cn [3600] .... 085F ; Cn # 086B..086F ; Cn # [5] .. -088F ; Cn # 0892..0896 ; Cn # [5] .. 0984 ; Cn # 098D..098E ; Cn # [2] .. @@ -120,7 +119,7 @@ 0C49 ; Cn # 0C4E..0C54 ; Cn # [7] .. 0C57 ; Cn # -0C5B..0C5C ; Cn # [2] .. +0C5B ; Cn # 0C5E..0C5F ; Cn # [2] .. 0C64..0C65 ; Cn # [2] .. 0C70..0C76 ; Cn # [7] .. @@ -132,7 +131,7 @@ 0CC5 ; Cn # 0CC9 ; Cn # 0CCE..0CD4 ; Cn # [7] .. -0CD7..0CDC ; Cn # [6] .. +0CD7..0CDB ; Cn # [5] .. 0CDF ; Cn # 0CE4..0CE5 ; Cn # [2] .. 0CF0 ; Cn # @@ -228,7 +227,8 @@ 1A8A..1A8F ; Cn # [6] .. 1A9A..1A9F ; Cn # [6] .. 1AAE..1AAF ; Cn # [2] .. -1ACF..1AFF ; Cn # [49] .. +1ADE..1ADF ; Cn # [2] .. +1AEC..1AFF ; Cn # [20] .. 1B4D ; Cn # 1BF4..1BFB ; Cn # [8] .. 1C38..1C3A ; Cn # [3] .. @@ -257,13 +257,12 @@ 2072..2073 ; Cn # [2] .. 208F ; Cn # 209D..209F ; Cn # [3] .. -20C1..20CF ; Cn # [15] .. +20C2..20CF ; Cn # [14] .. 20F1..20FF ; Cn # [15] .. 218C..218F ; Cn # [4] .. 242A..243F ; Cn # [22] .. 244B..245F ; Cn # [21] .. 2B74..2B75 ; Cn # [2] .. -2B96 ; Cn # 2CF4..2CF8 ; Cn # [5] .. 2D26 ; Cn # 2D28..2D2C ; Cn # [5] .. @@ -294,10 +293,7 @@ A48D..A48F ; Cn # [3] .. A4C7..A4CF ; Cn # [9] .. A62C..A63F ; Cn # [20] .. A6F8..A6FF ; Cn # [8] .. -A7CE..A7CF ; Cn # [2] .. -A7D2 ; Cn # -A7D4 ; Cn # -A7DD..A7F1 ; Cn # [21] .. +A7DD..A7F0 ; Cn # [20] .. A82D..A82F ; Cn # [3] .. A83A..A83F ; Cn # [6] .. A878..A87F ; Cn # [8] .. @@ -333,9 +329,6 @@ FB3D ; Cn # FB3F ; Cn # FB42 ; Cn # FB45 ; Cn # -FBC3..FBD2 ; Cn # [16] .. -FD90..FD91 ; Cn # [2] .. -FDC8..FDCE ; Cn # [7] .. FDD0..FDEF ; Cn # [32] .. FE1A..FE1F ; Cn # [6] .. FE53 ; Cn # @@ -407,7 +400,7 @@ FFFE..FFFF ; Cn # [2] .. 108F6..108FA ; Cn # [5] .. 1091C..1091E ; Cn # [3] .. 1093A..1093E ; Cn # [5] .. -10940..1097F ; Cn # [64] .. +1095A..1097F ; Cn # [38] .. 109B8..109BB ; Cn # [4] .. 109D0..109D1 ; Cn # [2] .. 10A04 ; Cn # @@ -439,7 +432,8 @@ FFFE..FFFF ; Cn # [2] .. 10EAA ; Cn # 10EAE..10EAF ; Cn # [2] .. 10EB2..10EC1 ; Cn # [16] .. -10EC5..10EFB ; Cn # [55] .. +10EC8..10ECF ; Cn # [8] .. +10ED9..10EF9 ; Cn # [33] .. 10F28..10F2F ; Cn # [8] .. 10F5A..10F6F ; Cn # [22] .. 10F8A..10FAF ; Cn # [38] .. @@ -522,7 +516,8 @@ FFFE..FFFF ; Cn # [2] .. 11A48..11A4F ; Cn # [8] .. 11AA3..11AAF ; Cn # [13] .. 11AF9..11AFF ; Cn # [7] .. -11B0A..11BBF ; Cn # [182] .. +11B0A..11B5F ; Cn # [86] .. +11B68..11BBF ; Cn # [88] .. 11BE2..11BEF ; Cn # [14] .. 11BFA..11BFF ; Cn # [6] .. 11C09 ; Cn # @@ -544,7 +539,9 @@ FFFE..FFFF ; Cn # [2] .. 11D8F ; Cn # 11D92 ; Cn # 11D99..11D9F ; Cn # [7] .. -11DAA..11EDF ; Cn # [310] .. +11DAA..11DAF ; Cn # [6] .. +11DDC..11DDF ; Cn # [4] .. +11DEA..11EDF ; Cn # [246] .. 11EF9..11EFF ; Cn # [7] .. 11F11 ; Cn # 11F3B..11F3D ; Cn # [3] .. @@ -573,15 +570,17 @@ FFFE..FFFF ; Cn # [2] .. 16B78..16B7C ; Cn # [5] .. 16B90..16D3F ; Cn # [432] .. 16D7A..16E3F ; Cn # [198] .. -16E9B..16EFF ; Cn # [101] .. +16E9B..16E9F ; Cn # [5] .. +16EB9..16EBA ; Cn # [2] .. +16ED4..16EFF ; Cn # [44] .. 16F4B..16F4E ; Cn # [4] .. 16F88..16F8E ; Cn # [7] .. 16FA0..16FDF ; Cn # [64] .. 16FE5..16FEF ; Cn # [11] .. -16FF2..16FFF ; Cn # [14] .. -187F8..187FF ; Cn # [8] .. +16FF7..16FFF ; Cn # [9] .. 18CD6..18CFE ; Cn # [41] .. -18D09..1AFEF ; Cn # [8935] .. +18D1F..18D7F ; Cn # [97] .. +18DF3..1AFEF ; Cn # [8701] .. 1AFF4 ; Cn # 1AFFC ; Cn # 1AFFF ; Cn # @@ -596,8 +595,10 @@ FFFE..FFFF ; Cn # [2] .. 1BC89..1BC8F ; Cn # [7] .. 1BC9A..1BC9B ; Cn # [2] .. 1BCA4..1CBFF ; Cn # [3932] .. -1CCFA..1CCFF ; Cn # [6] .. -1CEB4..1CEFF ; Cn # [76] .. +1CCFD..1CCFF ; Cn # [3] .. +1CEB4..1CEB9 ; Cn # [6] .. +1CED1..1CEDF ; Cn # [15] .. +1CEF1..1CEFF ; Cn # [15] .. 1CF2E..1CF2F ; Cn # [2] .. 1CF47..1CF4F ; Cn # [9] .. 1CFC4..1CFFF ; Cn # [60] .. @@ -650,7 +651,10 @@ FFFE..FFFF ; Cn # [2] .. 1E300..1E4CF ; Cn # [464] .. 1E4FA..1E5CF ; Cn # [214] .. 1E5FB..1E5FE ; Cn # [4] .. -1E600..1E7DF ; Cn # [480] .. +1E600..1E6BF ; Cn # [192] .. +1E6DF ; Cn # +1E6F6..1E6FD ; Cn # [8] .. +1E700..1E7DF ; Cn # [224] .. 1E7E7 ; Cn # 1E7EC ; Cn # 1E7EF ; Cn # @@ -708,10 +712,9 @@ FFFE..FFFF ; Cn # [2] .. 1F249..1F24F ; Cn # [7] .. 1F252..1F25F ; Cn # [14] .. 1F266..1F2FF ; Cn # [154] .. -1F6D8..1F6DB ; Cn # [4] .. +1F6D9..1F6DB ; Cn # [3] .. 1F6ED..1F6EF ; Cn # [3] .. 1F6FD..1F6FF ; Cn # [3] .. -1F777..1F77A ; Cn # [4] .. 1F7DA..1F7DF ; Cn # [6] .. 1F7EC..1F7EF ; Cn # [4] .. 1F7F1..1F7FF ; Cn # [15] .. @@ -721,33 +724,34 @@ FFFE..FFFF ; Cn # [2] .. 1F888..1F88F ; Cn # [8] .. 1F8AE..1F8AF ; Cn # [2] .. 1F8BC..1F8BF ; Cn # [4] .. -1F8C2..1F8FF ; Cn # [62] .. -1FA54..1FA5F ; Cn # [12] .. +1F8C2..1F8CF ; Cn # [14] .. +1F8D9..1F8FF ; Cn # [39] .. +1FA58..1FA5F ; Cn # [8] .. 1FA6E..1FA6F ; Cn # [2] .. 1FA7D..1FA7F ; Cn # [3] .. -1FA8A..1FA8E ; Cn # [5] .. -1FAC7..1FACD ; Cn # [7] .. +1FA8B..1FA8D ; Cn # [3] .. +1FAC7 ; Cn # +1FAC9..1FACC ; Cn # [4] .. 1FADD..1FADE ; Cn # [2] .. -1FAEA..1FAEF ; Cn # [6] .. +1FAEB..1FAEE ; Cn # [4] .. 1FAF9..1FAFF ; Cn # [7] .. 1FB93 ; Cn # -1FBFA..1FFFF ; Cn # [1030] .. +1FBFB..1FFFF ; Cn # [1029] .. 2A6E0..2A6FF ; Cn # [32] .. -2B73A..2B73F ; Cn # [6] .. 2B81E..2B81F ; Cn # [2] .. -2CEA2..2CEAF ; Cn # [14] .. +2CEAE..2CEAF ; Cn # [2] .. 2EBE1..2EBEF ; Cn # [15] .. 2EE5E..2F7FF ; Cn # [2466] .. 2FA1E..2FFFF ; Cn # [1506] .. 3134B..3134F ; Cn # [5] .. -323B0..E0000 ; Cn # [711761] .. +3347A..E0000 ; Cn # [707463] .. E0002..E001F ; Cn # [30] .. E0080..E00FF ; Cn # [128] .. E01F0..EFFFF ; Cn # [65040] .. FFFFE..FFFFF ; Cn # [2] .. 10FFFE..10FFFF; Cn # [2] .. -# Total code points: 819533 +# Total code points: 814730 # ================================================ @@ -1355,7 +1359,10 @@ A7C2 ; Lu # LATIN CAPITAL LETTER ANGLICANA W A7C4..A7C7 ; Lu # [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY A7C9 ; Lu # LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY A7CB..A7CC ; Lu # [2] LATIN CAPITAL LETTER RAMS HORN..LATIN CAPITAL LETTER S WITH DIAGONAL STROKE +A7CE ; Lu # LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE A7D0 ; Lu # LATIN CAPITAL LETTER CLOSED INSULAR G +A7D2 ; Lu # LATIN CAPITAL LETTER DOUBLE THORN +A7D4 ; Lu # LATIN CAPITAL LETTER DOUBLE WYNN A7D6 ; Lu # LATIN CAPITAL LETTER MIDDLE SCOTS S A7D8 ; Lu # LATIN CAPITAL LETTER SIGMOID S A7DA ; Lu # LATIN CAPITAL LETTER LAMBDA @@ -1372,6 +1379,7 @@ FF21..FF3A ; Lu # [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAP 10D50..10D65 ; Lu # [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA 118A0..118BF ; Lu # [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO 16E40..16E5F ; Lu # [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y +16EA0..16EB8 ; Lu # [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY 1D400..1D419 ; Lu # [26] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL BOLD CAPITAL Z 1D434..1D44D ; Lu # [26] MATHEMATICAL ITALIC CAPITAL A..MATHEMATICAL ITALIC CAPITAL Z 1D468..1D481 ; Lu # [26] MATHEMATICAL BOLD ITALIC CAPITAL A..MATHEMATICAL BOLD ITALIC CAPITAL Z @@ -1405,7 +1413,7 @@ FF21..FF3A ; Lu # [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAP 1D7CA ; Lu # MATHEMATICAL BOLD CAPITAL DIGAMMA 1E900..1E921 ; Lu # [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA -# Total code points: 1858 +# Total code points: 1886 # ================================================ @@ -1556,7 +1564,7 @@ FF21..FF3A ; Lu # [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAP 024B ; Ll # LATIN SMALL LETTER Q WITH HOOK TAIL 024D ; Ll # LATIN SMALL LETTER R WITH STROKE 024F..0293 ; Ll # [69] LATIN SMALL LETTER Y WITH STROKE..LATIN SMALL LETTER EZH WITH CURL -0295..02AF ; Ll # [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +0296..02AF ; Ll # [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL 0371 ; Ll # GREEK SMALL LETTER HETA 0373 ; Ll # GREEK SMALL LETTER ARCHAIC SAMPI 0377 ; Ll # GREEK SMALL LETTER PAMPHYLIAN DIGAMMA @@ -2017,6 +2025,7 @@ A7C3 ; Ll # LATIN SMALL LETTER ANGLICANA W A7C8 ; Ll # LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY A7CA ; Ll # LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY A7CD ; Ll # LATIN SMALL LETTER S WITH DIAGONAL STROKE +A7CF ; Ll # LATIN SMALL LETTER PHARYNGEAL VOICED FRICATIVE A7D1 ; Ll # LATIN SMALL LETTER CLOSED INSULAR G A7D3 ; Ll # LATIN SMALL LETTER DOUBLE THORN A7D5 ; Ll # LATIN SMALL LETTER DOUBLE WYNN @@ -2041,6 +2050,7 @@ FF41..FF5A ; Ll # [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL 10D70..10D85 ; Ll # [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA 118C0..118DF ; Ll # [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 16E60..16E7F ; Ll # [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EBB..16ED3 ; Ll # [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY 1D41A..1D433 ; Ll # [26] MATHEMATICAL BOLD SMALL A..MATHEMATICAL BOLD SMALL Z 1D44E..1D454 ; Ll # [7] MATHEMATICAL ITALIC SMALL A..MATHEMATICAL ITALIC SMALL G 1D456..1D467 ; Ll # [18] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL ITALIC SMALL Z @@ -2074,7 +2084,7 @@ FF41..FF5A ; Ll # [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL 1DF25..1DF2A ; Ll # [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK 1E922..1E943 ; Ll # [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA -# Total code points: 2258 +# Total code points: 2283 # ================================================ @@ -2143,7 +2153,7 @@ A69C..A69D ; Lm # [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER C A717..A71F ; Lm # [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK A770 ; Lm # MODIFIER LETTER US A788 ; Lm # MODIFIER LETTER LOW CIRCUMFLEX ACCENT -A7F2..A7F4 ; Lm # [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A7F1..A7F4 ; Lm # [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F8..A7F9 ; Lm # [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE A9CF ; Lm # JAVANESE PANGRANGKEP A9E6 ; Lm # MYANMAR MODIFIER LETTER SHAN REDUPLICATION @@ -2159,21 +2169,25 @@ FF9E..FF9F ; Lm # [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAK 107B2..107BA ; Lm # [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 10D4E ; Lm # GARAY VOWEL LENGTH MARK 10D6F ; Lm # GARAY REDUPLICATION MARK +10EC5 ; Lm # ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW +11DD9 ; Lm # TOLONG SIKI SIGN SELA 16B40..16B43 ; Lm # [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM 16D40..16D42 ; Lm # [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA 16D6B..16D6C ; Lm # [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT 16F93..16F9F ; Lm # [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 16FE0..16FE1 ; Lm # [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK 16FE3 ; Lm # OLD CHINESE ITERATION MARK +16FF2..16FF3 ; Lm # [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER 1AFF0..1AFF3 ; Lm # [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 1AFF5..1AFFB ; Lm # [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 1AFFD..1AFFE ; Lm # [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 1E030..1E06D ; Lm # [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE 1E137..1E13D ; Lm # [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER 1E4EB ; Lm # NAG MUNDARI SIGN OJOD +1E6FF ; Lm # TAI YO XAM LAI 1E94B ; Lm # ADLAM NASALIZATION MARK -# Total code points: 404 +# Total code points: 410 # ================================================ @@ -2183,7 +2197,7 @@ FF9E..FF9F ; Lm # [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAK 00BA ; Lo # MASCULINE ORDINAL INDICATOR 01BB ; Lo # LATIN LETTER TWO WITH STROKE 01C0..01C3 ; Lo # [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK -0294 ; Lo # LATIN LETTER GLOTTAL STOP +0294..0295 ; Lo # [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE 05D0..05EA ; Lo # [27] HEBREW LETTER ALEF..HEBREW LETTER TAV 05EF..05F2 ; Lo # [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD 0620..063F ; Lo # [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE @@ -2203,7 +2217,7 @@ FF9E..FF9F ; Lm # [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAK 0840..0858 ; Lo # [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN 0860..086A ; Lo # [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA 0870..0887 ; Lo # [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT -0889..088E ; Lo # [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0889..088F ; Lo # [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE 08A0..08C8 ; Lo # [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF 0904..0939 ; Lo # [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA 093D ; Lo # DEVANAGARI SIGN AVAGRAHA @@ -2269,7 +2283,7 @@ FF9E..FF9F ; Lm # [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAK 0C2A..0C39 ; Lo # [16] TELUGU LETTER PA..TELUGU LETTER HA 0C3D ; Lo # TELUGU SIGN AVAGRAHA 0C58..0C5A ; Lo # [3] TELUGU LETTER TSA..TELUGU LETTER RRRA -0C5D ; Lo # TELUGU LETTER NAKAARA POLLU +0C5C..0C5D ; Lo # [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; Lo # [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C80 ; Lo # KANNADA SIGN SPACING CANDRABINDU 0C85..0C8C ; Lo # [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L @@ -2278,7 +2292,7 @@ FF9E..FF9F ; Lm # [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAK 0CAA..0CB3 ; Lo # [10] KANNADA LETTER PA..KANNADA LETTER LLA 0CB5..0CB9 ; Lo # [5] KANNADA LETTER VA..KANNADA LETTER HA 0CBD ; Lo # KANNADA SIGN AVAGRAHA -0CDD..0CDE ; Lo # [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA +0CDC..0CDE ; Lo # [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA 0CE0..0CE1 ; Lo # [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CF1..0CF2 ; Lo # [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA 0D04..0D0C ; Lo # [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L @@ -2504,6 +2518,7 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 108F4..108F5 ; Lo # [2] HATRAN LETTER SHIN..HATRAN LETTER TAW 10900..10915 ; Lo # [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU 10920..10939 ; Lo # [26] LYDIAN LETTER A..LYDIAN LETTER C +10940..10959 ; Lo # [26] SIDETIC LETTER N01..SIDETIC LETTER N26 10980..109B7 ; Lo # [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA 109BE..109BF ; Lo # [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN 10A00 ; Lo # KHAROSHTHI LETTER A @@ -2525,6 +2540,7 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 10E80..10EA9 ; Lo # [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET 10EB0..10EB1 ; Lo # [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE 10EC2..10EC4 ; Lo # [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW +10EC6..10EC7 ; Lo # [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW 10F00..10F1C ; Lo # [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F27 ; Lo # OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; Lo # [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN @@ -2616,6 +2632,8 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 11D67..11D68 ; Lo # [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI 11D6A..11D89 ; Lo # [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA 11D98 ; Lo # GUNJALA GONDI OM +11DB0..11DD8 ; Lo # [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH +11DDA..11DDB ; Lo # [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA 11EE0..11EF2 ; Lo # [19] MAKASAR LETTER KA..MAKASAR ANGKA 11F02 ; Lo # KAWI SIGN REPHA 11F04..11F10 ; Lo # [13] KAWI LETTER A..KAWI LETTER O @@ -2639,9 +2657,9 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 16D43..16D6A ; Lo # [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU 16F00..16F4A ; Lo # [75] MIAO LETTER PA..MIAO LETTER RTE 16F50 ; Lo # MIAO LETTER NASALIZATION -17000..187F7 ; Lo # [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 -18800..18CD5 ; Lo # [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18CFF..18D08 ; Lo # [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 +17000..18CD5 ; Lo # [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5 +18CFF..18D1E ; Lo # [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E +18D80..18DF2 ; Lo # [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883 1B000..1B122 ; Lo # [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU 1B132 ; Lo # HIRAGANA LETTER SMALL KO 1B150..1B152 ; Lo # [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO @@ -2660,6 +2678,12 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 1E4D0..1E4EA ; Lo # [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL 1E5D0..1E5ED ; Lo # [30] OL ONAL LETTER O..OL ONAL LETTER EG 1E5F0 ; Lo # OL ONAL SIGN HODDOND +1E6C0..1E6DE ; Lo # [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO +1E6E0..1E6E2 ; Lo # [3] TAI YO LETTER AA..TAI YO LETTER UE +1E6E4..1E6E5 ; Lo # [2] TAI YO LETTER U..TAI YO LETTER AE +1E6E7..1E6ED ; Lo # [7] TAI YO LETTER O..TAI YO LETTER AUE +1E6F0..1E6F4 ; Lo # [5] TAI YO LETTER AN..TAI YO LETTER AP +1E6FE ; Lo # TAI YO SYMBOL MUEANG 1E7E0..1E7E6 ; Lo # [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO 1E7E8..1E7EB ; Lo # [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE 1E7ED..1E7EE ; Lo # [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -2699,16 +2723,15 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 1EEA5..1EEA9 ; Lo # [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH 1EEAB..1EEBB ; Lo # [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN 20000..2A6DF ; Lo # [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF -2A700..2B739 ; Lo # [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 -2B740..2B81D ; Lo # [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D -2B820..2CEA1 ; Lo # [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 +2A700..2B81D ; Lo # [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEAD ; Lo # [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD 2CEB0..2EBE0 ; Lo # [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2EBF0..2EE5D ; Lo # [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 2F800..2FA1D ; Lo # [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; Lo # [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -31350..323AF ; Lo # [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF +31350..33479 ; Lo # [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 -# Total code points: 136477 +# Total code points: 141062 # ================================================ @@ -2856,7 +2879,8 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 1A73..1A7C ; Mn # [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN 1A7F ; Mn # TAI THAM COMBINING CRYPTOGRAMMIC DOT 1AB0..1ABD ; Mn # [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW -1ABF..1ACE ; Mn # [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T +1ABF..1ADD ; Mn # [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW +1AE0..1AEB ; Mn # [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE 1B00..1B03 ; Mn # [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B34 ; Mn # BALINESE SIGN REREKAN 1B36..1B3A ; Mn # [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA @@ -2938,7 +2962,7 @@ FE20..FE2F ; Mn # [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITL 10D24..10D27 ; Mn # [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI 10D69..10D6D ; Mn # [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK 10EAB..10EAC ; Mn # [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK -10EFC..10EFF ; Mn # [4] ARABIC COMBINING ALEF OVERLAY..ARABIC SMALL LOW WORD MADDA +10EFA..10EFF ; Mn # [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA 10F46..10F50 ; Mn # [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW 10F82..10F85 ; Mn # [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW 11001 ; Mn # BRAHMI SIGN ANUSVARA @@ -3013,6 +3037,9 @@ FE20..FE2F ; Mn # [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITL 11A59..11A5B ; Mn # [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK 11A8A..11A96 ; Mn # [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA 11A98..11A99 ; Mn # [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER +11B60 ; Mn # SHARADA VOWEL SIGN OE +11B62..11B64 ; Mn # [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E +11B66 ; Mn # SHARADA VOWEL SIGN CANDRA E 11C30..11C36 ; Mn # [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L 11C38..11C3D ; Mn # [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA 11C3F ; Mn # BHAIKSUKI SIGN VIRAMA @@ -3068,11 +3095,15 @@ FE20..FE2F ; Mn # [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITL 1E2EC..1E2EF ; Mn # [4] WANCHO TONE TUP..WANCHO TONE KOINI 1E4EC..1E4EF ; Mn # [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH 1E5EE..1E5EF ; Mn # [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR +1E6E3 ; Mn # TAI YO SIGN UE +1E6E6 ; Mn # TAI YO SIGN AU +1E6EE..1E6EF ; Mn # [2] TAI YO SIGN AY..TAI YO SIGN ANG +1E6F5 ; Mn # TAI YO SIGN OM 1E8D0..1E8D6 ; Mn # [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS 1E944..1E94A ; Mn # [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA E0100..E01EF ; Mn # [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 2020 +# Total code points: 2059 # ================================================ @@ -3262,6 +3293,9 @@ ABEC ; Mc # MEETEI MAYEK LUM IYEK 11A39 ; Mc # ZANABAZAR SQUARE SIGN VISARGA 11A57..11A58 ; Mc # [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU 11A97 ; Mc # SOYOMBO SIGN VISARGA +11B61 ; Mc # SHARADA VOWEL SIGN OOE +11B65 ; Mc # SHARADA VOWEL SIGN SHORT O +11B67 ; Mc # SHARADA VOWEL SIGN CANDRA O 11C2F ; Mc # BHAIKSUKI VOWEL SIGN AA 11C3E ; Mc # BHAIKSUKI SIGN VISARGA 11CA9 ; Mc # MARCHEN SUBJOINED LETTER YA @@ -3281,7 +3315,7 @@ ABEC ; Mc # MEETEI MAYEK LUM IYEK 1D165..1D166 ; Mc # [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM 1D16D..1D172 ; Mc # [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 -# Total code points: 468 +# Total code points: 471 # ================================================ @@ -3344,6 +3378,7 @@ FF10..FF19 ; Nd # [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE 11C50..11C59 ; Nd # [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE 11D50..11D59 ; Nd # [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE 11DA0..11DA9 ; Nd # [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE +11DE0..11DE9 ; Nd # [10] TOLONG SIKI DIGIT ZERO..TOLONG SIKI DIGIT NINE 11F50..11F59 ; Nd # [10] KAWI DIGIT ZERO..KAWI DIGIT NINE 16130..16139 ; Nd # [10] GURUNG KHEMA DIGIT ZERO..GURUNG KHEMA DIGIT NINE 16A60..16A69 ; Nd # [10] MRO DIGIT ZERO..MRO DIGIT NINE @@ -3359,7 +3394,7 @@ FF10..FF19 ; Nd # [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE 1E950..1E959 ; Nd # [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE 1FBF0..1FBF9 ; Nd # [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE -# Total code points: 760 +# Total code points: 770 # ================================================ @@ -3377,8 +3412,9 @@ A6E6..A6EF ; Nl # [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM 1034A ; Nl # GOTHIC LETTER NINE HUNDRED 103D1..103D5 ; Nl # [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED 12400..1246E ; Nl # [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM +16FF4..16FF6 ; Nl # [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS -# Total code points: 236 +# Total code points: 239 # ================================================ @@ -3900,6 +3936,7 @@ FF64..FF65 ; Po # [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDL 10AF0..10AF6 ; Po # [7] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION LINE FILLER 10B39..10B3F ; Po # [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION 10B99..10B9C ; Po # [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT +10ED0 ; Po # ARABIC BIBLICAL END OF VERSE 10F55..10F59 ; Po # [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT 10F86..10F89 ; Po # [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS 11047..1104D ; Po # [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS @@ -3951,7 +3988,7 @@ FF64..FF65 ; Po # [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDL 1E5FF ; Po # OL ONAL ABBREVIATION SIGN 1E95E..1E95F ; Po # [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK -# Total code points: 640 +# Total code points: 641 # ================================================ @@ -4011,6 +4048,7 @@ FF5E ; Sm # FULLWIDTH TILDE FFE2 ; Sm # FULLWIDTH NOT SIGN FFE9..FFEC ; Sm # [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW 10D8E..10D8F ; Sm # [2] GARAY PLUS SIGN..GARAY MINUS SIGN +1CEF0 ; Sm # MEDIUM SMALL WHITE CIRCLE WITH HORIZONTAL BAR 1D6C1 ; Sm # MATHEMATICAL BOLD NABLA 1D6DB ; Sm # MATHEMATICAL BOLD PARTIAL DIFFERENTIAL 1D6FB ; Sm # MATHEMATICAL ITALIC NABLA @@ -4022,8 +4060,9 @@ FFE9..FFEC ; Sm # [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW 1D7A9 ; Sm # MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA 1D7C3 ; Sm # MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL 1EEF0..1EEF1 ; Sm # [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL +1F8D0..1F8D8 ; Sm # [9] LONG RIGHTWARDS ARROW OVER LONG LEFTWARDS ARROW..LONG LEFT RIGHT ARROW WITH DEPENDENT LOBE -# Total code points: 950 +# Total code points: 960 # ================================================ @@ -4040,7 +4079,7 @@ FFE9..FFEC ; Sm # [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW 0BF9 ; Sc # TAMIL RUPEE SIGN 0E3F ; Sc # THAI CURRENCY SYMBOL BAHT 17DB ; Sc # KHMER CURRENCY SYMBOL RIEL -20A0..20C0 ; Sc # [33] EURO-CURRENCY SIGN..SOM SIGN +20A0..20C1 ; Sc # [34] EURO-CURRENCY SIGN..SAUDI RIYAL SIGN A838 ; Sc # NORTH INDIC RUPEE MARK FDFC ; Sc # RIAL SIGN FE69 ; Sc # SMALL DOLLAR SIGN @@ -4051,7 +4090,7 @@ FFE5..FFE6 ; Sc # [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN 1E2FF ; Sc # WANCHO NGUN SIGN 1ECB0 ; Sc # INDIC SIYAQ RUPEE MARK -# Total code points: 63 +# Total code points: 64 # ================================================ @@ -4174,8 +4213,7 @@ FFE3 ; Sk # FULLWIDTH MACRON 2B00..2B2F ; So # [48] NORTH EAST WHITE ARROW..WHITE VERTICAL ELLIPSE 2B45..2B46 ; So # [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW 2B4D..2B73 ; So # [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR -2B76..2B95 ; So # [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW -2B97..2BFF ; So # [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL +2B76..2BFF ; So # [138] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..HELLSCHREIBER PAUSE SYMBOL 2CE5..2CEA ; So # [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA 2E50..2E51 ; So # [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR 2E80..2E99 ; So # [26] CJK RADICAL REPEAT..CJK RADICAL RAP @@ -4203,8 +4241,10 @@ A828..A82B ; So # [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK- A836..A837 ; So # [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK A839 ; So # NORTH INDIC QUANTITY MARK AA77..AA79 ; So # [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO +FBC3..FBD2 ; So # [16] ARABIC LIGATURE JALLA WA-ALAA..ARABIC LIGATURE ALAYHI AR-RAHMAH FD40..FD4F ; So # [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH -FDCF ; So # ARABIC LIGATURE SALAAMUHU ALAYNAA +FD90..FD91 ; So # [2] ARABIC LIGATURE RAHMATU ALLAAHI ALAYH..ARABIC LIGATURE RAHMATU ALLAAHI ALAYHAA +FDC8..FDCF ; So # [8] ARABIC LIGATURE RAHIMAHU ALLAAH TAAALAA..ARABIC LIGATURE SALAAMUHU ALAYNAA FDFD..FDFF ; So # [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL FFE4 ; So # FULLWIDTH BROKEN BAR FFE8 ; So # HALFWIDTH FORMS LIGHT VERTICAL @@ -4218,6 +4258,7 @@ FFFC..FFFD ; So # [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 101D0..101FC ; So # [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND 10877..10878 ; So # [2] PALMYRENE LEFT-POINTING FLEURON..PALMYRENE RIGHT-POINTING FLEURON 10AC8 ; So # MANICHAEAN SIGN UD +10ED1..10ED8 ; So # [8] ARABIC LIGATURE ALAYHAA AS-SALAATU WAS-SALAAM..ARABIC LIGATURE NAWWARA ALLAAHU MARQADAH 1173F ; So # AHOM SYMBOL VI 11FD5..11FDC ; So # [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI 11FE1..11FF1 ; So # [17] TAMIL SIGN PAARAM..TAMIL SIGN VAKAIYARAA @@ -4225,7 +4266,10 @@ FFFC..FFFD ; So # [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 16B45 ; So # PAHAWH HMONG SIGN CIM TSOV ROG 1BC9C ; So # DUPLOYAN SIGN O WITH CROSS 1CC00..1CCEF ; So # [240] UP-POINTING GO-KART..OUTLINED LATIN CAPITAL LETTER Z +1CCFA..1CCFC ; So # [3] SNAKE SYMBOL..NOSE SYMBOL 1CD00..1CEB3 ; So # [436] BLOCK OCTANT-3..BLACK RIGHT TRIANGLE CARET +1CEBA..1CED0 ; So # [23] FRAGILE SYMBOL..LEUKOTHEA +1CEE0..1CEEF ; So # [16] GEOMANTIC FIGURE POPULUS..GEOMANTIC FIGURE VIA 1CF50..1CFC3 ; So # [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK 1D000..1D0F5 ; So # [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO 1D100..1D126 ; So # [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2 @@ -4258,11 +4302,10 @@ FFFC..FFFD ; So # [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 1F250..1F251 ; So # [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT 1F260..1F265 ; So # [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI 1F300..1F3FA ; So # [251] CYCLONE..AMPHORA -1F400..1F6D7 ; So # [728] RAT..ELEVATOR +1F400..1F6D8 ; So # [729] RAT..LANDSLIDE 1F6DC..1F6EC ; So # [17] WIRELESS..AIRPLANE ARRIVING 1F6F0..1F6FC ; So # [13] SATELLITE..ROLLER SKATE -1F700..1F776 ; So # [119] ALCHEMICAL SYMBOL FOR QUINTESSENCE..LUNAR ECLIPSE -1F77B..1F7D9 ; So # [95] HAUMEA..NINE POINTED WHITE STAR +1F700..1F7D9 ; So # [218] ALCHEMICAL SYMBOL FOR QUINTESSENCE..NINE POINTED WHITE STAR 1F7E0..1F7EB ; So # [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE 1F7F0 ; So # HEAVY EQUALS SIGN 1F800..1F80B ; So # [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD @@ -4272,18 +4315,20 @@ FFFC..FFFD ; So # [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 1F890..1F8AD ; So # [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS 1F8B0..1F8BB ; So # [12] ARROW POINTING UPWARDS THEN NORTH WEST..SOUTH WEST ARROW FROM BAR 1F8C0..1F8C1 ; So # [2] LEFTWARDS ARROW FROM DOWNWARDS ARROW..RIGHTWARDS ARROW FROM DOWNWARDS ARROW -1F900..1FA53 ; So # [340] CIRCLED CROSS FORMEE WITH FOUR DOTS..BLACK CHESS KNIGHT-BISHOP +1F900..1FA57 ; So # [344] CIRCLED CROSS FORMEE WITH FOUR DOTS..BLACK CHESS ALFIL 1FA60..1FA6D ; So # [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER 1FA70..1FA7C ; So # [13] BALLET SHOES..CRUTCH -1FA80..1FA89 ; So # [10] YO-YO..HARP -1FA8F..1FAC6 ; So # [56] SHOVEL..FINGERPRINT -1FACE..1FADC ; So # [15] MOOSE..ROOT VEGETABLE -1FADF..1FAE9 ; So # [11] SPLATTER..FACE WITH BAGS UNDER EYES -1FAF0..1FAF8 ; So # [9] HAND WITH INDEX FINGER AND THUMB CROSSED..RIGHTWARDS PUSHING HAND +1FA80..1FA8A ; So # [11] YO-YO..TROMBONE +1FA8E..1FAC6 ; So # [57] TREASURE CHEST..FINGERPRINT +1FAC8 ; So # HAIRY CREATURE +1FACD..1FADC ; So # [16] ORCA..ROOT VEGETABLE +1FADF..1FAEA ; So # [12] SPLATTER..DISTORTED FACE +1FAEF..1FAF8 ; So # [10] FIGHT CLOUD..RIGHTWARDS PUSHING HAND 1FB00..1FB92 ; So # [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK 1FB94..1FBEF ; So # [92] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE +1FBFA ; So # ALARM BELL SYMBOL -# Total code points: 7376 +# Total code points: 7468 # ================================================ diff --git a/contrib/unicode/DerivedNormalizationProps.txt b/contrib/unicode/DerivedNormalizationProps.txt index ce636abb537a..448ba69d6399 100644 --- a/contrib/unicode/DerivedNormalizationProps.txt +++ b/contrib/unicode/DerivedNormalizationProps.txt @@ -1,6 +1,6 @@ -# DerivedNormalizationProps-16.0.0.txt -# Date: 2024-04-30, 21:48:18 GMT -# © 2024 Unicode®, Inc. +# DerivedNormalizationProps-17.0.0.txt +# Date: 2025-01-27, 18:09:14 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # @@ -132,6 +132,7 @@ 33DD ; FC_NFKC; 0077 0062 # So SQUARE WB 33DE ; FC_NFKC; 0076 2215 006D # So SQUARE V OVER M 33DF ; FC_NFKC; 0061 2215 006D # So SQUARE A OVER M +A7F1 ; FC_NFKC; 0073 # Lm MODIFIER LETTER CAPITAL S A7F2 ; FC_NFKC; 0063 # Lm MODIFIER LETTER CAPITAL C A7F3 ; FC_NFKC; 0066 # Lm MODIFIER LETTER CAPITAL F A7F4 ; FC_NFKC; 0071 # Lm MODIFIER LETTER CAPITAL Q @@ -679,7 +680,7 @@ A7F8 ; FC_NFKC; 0127 # Lm MODIFIER LETTER CAPITAL H WITH STROKE 1F16C ; FC_NFKC; 006D 0072 # So RAISED MR SIGN 1F190 ; FC_NFKC; 0064 006A # So SQUARE DJ -# Total code points: 663 +# Total code points: 664 # ================================================ @@ -1515,7 +1516,7 @@ FB46..FB4E ; NFC_QC; N # Lo [9] HEBREW LETTER TSADI WITH DAGESH..HEBREW LET 32C0..33FF ; NFKD_QC; N # So [320] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE GAL A69C..A69D ; NFKD_QC; N # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN A770 ; NFKD_QC; N # Lm MODIFIER LETTER US -A7F2..A7F4 ; NFKD_QC; N # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A7F1..A7F4 ; NFKD_QC; N # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F8..A7F9 ; NFKD_QC; N # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE AB5C..AB5F ; NFKD_QC; N # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK AB69 ; NFKD_QC; N # Lm MODIFIER LETTER SMALL TURNED W @@ -1753,7 +1754,7 @@ FFED..FFEE ; NFKD_QC; N # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CI 1FBF0..1FBF9 ; NFKD_QC; N # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE 2F800..2FA1D ; NFKD_QC; N # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D -# Total code points: 17085 +# Total code points: 17086 # ================================================ @@ -1946,7 +1947,7 @@ FFED..FFEE ; NFKD_QC; N # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CI 32C0..33FF ; NFKC_QC; N # So [320] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE GAL A69C..A69D ; NFKC_QC; N # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN A770 ; NFKC_QC; N # Lm MODIFIER LETTER US -A7F2..A7F4 ; NFKC_QC; N # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A7F1..A7F4 ; NFKC_QC; N # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F8..A7F9 ; NFKC_QC; N # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE AB5C..AB5F ; NFKC_QC; N # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK AB69 ; NFKC_QC; N # Lm MODIFIER LETTER SMALL TURNED W @@ -2164,7 +2165,7 @@ FFED..FFEE ; NFKC_QC; N # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CI 1FBF0..1FBF9 ; NFKC_QC; N # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE 2F800..2FA1D ; NFKC_QC; N # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D -# Total code points: 4964 +# Total code points: 4965 # ================================================ @@ -5448,11 +5449,15 @@ A7C7 ; NFKC_CF; A7C8 # L& LATIN CAPITAL LETTER D WITH S A7C9 ; NFKC_CF; A7CA # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY A7CB ; NFKC_CF; 0264 # L& LATIN CAPITAL LETTER RAMS HORN A7CC ; NFKC_CF; A7CD # L& LATIN CAPITAL LETTER S WITH DIAGONAL STROKE +A7CE ; NFKC_CF; A7CF # L& LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE A7D0 ; NFKC_CF; A7D1 # L& LATIN CAPITAL LETTER CLOSED INSULAR G +A7D2 ; NFKC_CF; A7D3 # L& LATIN CAPITAL LETTER DOUBLE THORN +A7D4 ; NFKC_CF; A7D5 # L& LATIN CAPITAL LETTER DOUBLE WYNN A7D6 ; NFKC_CF; A7D7 # L& LATIN CAPITAL LETTER MIDDLE SCOTS S A7D8 ; NFKC_CF; A7D9 # L& LATIN CAPITAL LETTER SIGMOID S A7DA ; NFKC_CF; A7DB # L& LATIN CAPITAL LETTER LAMBDA A7DC ; NFKC_CF; 019B # L& LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1 ; NFKC_CF; 0073 # Lm MODIFIER LETTER CAPITAL S A7F2 ; NFKC_CF; 0063 # Lm MODIFIER LETTER CAPITAL C A7F3 ; NFKC_CF; 0066 # Lm MODIFIER LETTER CAPITAL F A7F4 ; NFKC_CF; 0071 # Lm MODIFIER LETTER CAPITAL Q @@ -7184,6 +7189,31 @@ FFF0..FFF8 ; NFKC_CF; # Cn [9] ...... -# Total code points: 10554 +# Total code points: 10583 # ================================================ @@ -11582,11 +11612,15 @@ A7C7 ; NFKC_SCF; A7C8 # L& LATIN CAPITAL LETTER D WITH A7C9 ; NFKC_SCF; A7CA # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY A7CB ; NFKC_SCF; 0264 # L& LATIN CAPITAL LETTER RAMS HORN A7CC ; NFKC_SCF; A7CD # L& LATIN CAPITAL LETTER S WITH DIAGONAL STROKE +A7CE ; NFKC_SCF; A7CF # L& LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE A7D0 ; NFKC_SCF; A7D1 # L& LATIN CAPITAL LETTER CLOSED INSULAR G +A7D2 ; NFKC_SCF; A7D3 # L& LATIN CAPITAL LETTER DOUBLE THORN +A7D4 ; NFKC_SCF; A7D5 # L& LATIN CAPITAL LETTER DOUBLE WYNN A7D6 ; NFKC_SCF; A7D7 # L& LATIN CAPITAL LETTER MIDDLE SCOTS S A7D8 ; NFKC_SCF; A7D9 # L& LATIN CAPITAL LETTER SIGMOID S A7DA ; NFKC_SCF; A7DB # L& LATIN CAPITAL LETTER LAMBDA A7DC ; NFKC_SCF; 019B # L& LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1 ; NFKC_SCF; 0073 # Lm MODIFIER LETTER CAPITAL S A7F2 ; NFKC_SCF; 0063 # Lm MODIFIER LETTER CAPITAL C A7F3 ; NFKC_SCF; 0066 # Lm MODIFIER LETTER CAPITAL F A7F4 ; NFKC_SCF; 0071 # Lm MODIFIER LETTER CAPITAL Q @@ -13318,6 +13352,31 @@ FFF0..FFF8 ; NFKC_SCF; # Cn [9] ...... -# Total code points: 10516 +# Total code points: 10545 # ================================================ @@ -16052,12 +16111,15 @@ A7C2 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER ANG A7C4..A7C7 ; Changes_When_NFKC_Casefolded # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY A7C9 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY A7CB..A7CC ; Changes_When_NFKC_Casefolded # L& [2] LATIN CAPITAL LETTER RAMS HORN..LATIN CAPITAL LETTER S WITH DIAGONAL STROKE +A7CE ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE A7D0 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER CLOSED INSULAR G +A7D2 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER DOUBLE THORN +A7D4 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER DOUBLE WYNN A7D6 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER MIDDLE SCOTS S A7D8 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER SIGMOID S A7DA ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER LAMBDA A7DC ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER LAMBDA WITH STROKE -A7F2..A7F4 ; Changes_When_NFKC_Casefolded # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A7F1..A7F4 ; Changes_When_NFKC_Casefolded # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F5 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER REVERSED HALF H A7F8..A7F9 ; Changes_When_NFKC_Casefolded # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE AB5C..AB5F ; Changes_When_NFKC_Casefolded # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK @@ -16199,6 +16261,7 @@ FFF0..FFF8 ; Changes_When_NFKC_Casefolded # Cn [9] ...... -# Total code points: 10554 +# Total code points: 10583 # EOF diff --git a/contrib/unicode/EastAsianWidth.txt b/contrib/unicode/EastAsianWidth.txt index 99f7a31ea5d8..3e46eb65df2e 100644 --- a/contrib/unicode/EastAsianWidth.txt +++ b/contrib/unicode/EastAsianWidth.txt @@ -1,6 +1,6 @@ -# EastAsianWidth-16.0.0.txt -# Date: 2024-04-30, 21:48:20 GMT -# © 2024 Unicode®, Inc. +# EastAsianWidth-17.0.0.txt +# Date: 2025-07-24, 00:12:54 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # @@ -180,8 +180,8 @@ 0252..0260 ; N # Ll [15] LATIN SMALL LETTER TURNED ALPHA..LATIN SMALL LETTER G WITH HOOK 0261 ; A # Ll LATIN SMALL LETTER SCRIPT G 0262..0293 ; N # Ll [50] LATIN LETTER SMALL CAPITAL G..LATIN SMALL LETTER EZH WITH CURL -0294 ; N # Lo LATIN LETTER GLOTTAL STOP -0295..02AF ; N # Ll [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +0294..0295 ; N # Lo [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE +0296..02AF ; N # Ll [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL 02B0..02C1 ; N # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP 02C2..02C3 ; N # Sk [2] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER RIGHT ARROWHEAD 02C4 ; A # Sk MODIFIER LETTER UP ARROWHEAD @@ -332,7 +332,7 @@ 0860..086A ; N # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA 0870..0887 ; N # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT 0888 ; N # Sk ARABIC RAISED ROUND DOT -0889..088E ; N # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0889..088F ; N # Lo [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE 0890..0891 ; N # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE 0897..089F ; N # Mn [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA 08A0..08C8 ; N # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF @@ -502,7 +502,7 @@ 0C4A..0C4D ; N # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA 0C55..0C56 ; N # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK 0C58..0C5A ; N # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA -0C5D ; N # Lo TELUGU LETTER NAKAARA POLLU +0C5C..0C5D ; N # Lo [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; N # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C62..0C63 ; N # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL 0C66..0C6F ; N # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE @@ -528,7 +528,7 @@ 0CCA..0CCB ; N # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO 0CCC..0CCD ; N # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA 0CD5..0CD6 ; N # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0CDD..0CDE ; N # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA +0CDC..0CDE ; N # Lo [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA 0CE0..0CE1 ; N # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CE2..0CE3 ; N # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL 0CE6..0CEF ; N # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE @@ -806,7 +806,8 @@ 1AA8..1AAD ; N # Po [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG 1AB0..1ABD ; N # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW 1ABE ; N # Me COMBINING PARENTHESES OVERLAY -1ABF..1ACE ; N # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T +1ABF..1ADD ; N # Mn [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW +1AE0..1AEB ; N # Mn [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE 1B00..1B03 ; N # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B04 ; N # Mc BALINESE SIGN BISAH 1B05..1B33 ; N # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA @@ -976,7 +977,7 @@ 20A9 ; H # Sc WON SIGN 20AA..20AB ; N # Sc [2] NEW SHEQEL SIGN..DONG SIGN 20AC ; A # Sc EURO SIGN -20AD..20C0 ; N # Sc [20] KIP SIGN..SOM SIGN +20AD..20C1 ; N # Sc [21] KIP SIGN..SAUDI RIYAL SIGN 20D0..20DC ; N # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE 20DD..20E0 ; N # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH 20E1 ; N # Mn COMBINING LEFT RIGHT ARROW ABOVE @@ -1351,8 +1352,7 @@ 2B55 ; W # So HEAVY LARGE CIRCLE 2B56..2B59 ; A # So [4] HEAVY OVAL WITH OVAL INSIDE..HEAVY CIRCLED SALTIRE 2B5A..2B73 ; N # So [26] SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR -2B76..2B95 ; N # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW -2B97..2BFF ; N # So [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL +2B76..2BFF ; N # So [138] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..HELLSCHREIBER PAUSE SYMBOL 2C00..2C5F ; N # L& [96] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI 2C60..2C7B ; N # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E 2C7C..2C7D ; N # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V @@ -1548,11 +1548,8 @@ A788 ; N # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A789..A78A ; N # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN A78B..A78E ; N # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; N # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7CD ; N # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE -A7D0..A7D1 ; N # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G -A7D3 ; N # Ll LATIN SMALL LETTER DOUBLE THORN -A7D5..A7DC ; N # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE -A7F2..A7F4 ; N # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A790..A7DC ; N # L& [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1..A7F4 ; N # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; N # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; N # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9 ; N # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -1709,13 +1706,15 @@ FB43..FB44 ; N # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETT FB46..FB4F ; N # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED FB50..FBB1 ; N # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM FBB2..FBC2 ; N # Sk [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE +FBC3..FBD2 ; N # So [16] ARABIC LIGATURE JALLA WA-ALAA..ARABIC LIGATURE ALAYHI AR-RAHMAH FBD3..FD3D ; N # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM FD3E ; N # Pe ORNATE LEFT PARENTHESIS FD3F ; N # Ps ORNATE RIGHT PARENTHESIS FD40..FD4F ; N # So [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH FD50..FD8F ; N # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM +FD90..FD91 ; N # So [2] ARABIC LIGATURE RAHMATU ALLAAHI ALAYH..ARABIC LIGATURE RAHMATU ALLAAHI ALAYHAA FD92..FDC7 ; N # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM -FDCF ; N # So ARABIC LIGATURE SALAAMUHU ALAYNAA +FDC8..FDCF ; N # So [8] ARABIC LIGATURE RAHIMAHU ALLAAH TAAALAA..ARABIC LIGATURE SALAAMUHU ALAYNAA FDF0..FDFB ; N # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU FDFC ; N # Sc RIAL SIGN FDFD..FDFF ; N # So [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL @@ -1904,6 +1903,7 @@ FFFD ; A # So REPLACEMENT CHARACTER 1091F ; N # Po PHOENICIAN WORD SEPARATOR 10920..10939 ; N # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C 1093F ; N # Po LYDIAN TRIANGULAR MARK +10940..10959 ; N # Lo [26] SIDETIC LETTER N01..SIDETIC LETTER N26 10980..1099F ; N # Lo [32] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2 109A0..109B7 ; N # Lo [24] MEROITIC CURSIVE LETTER A..MEROITIC CURSIVE LETTER DA 109BC..109BD ; N # No [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF @@ -1964,7 +1964,11 @@ FFFD ; A # So REPLACEMENT CHARACTER 10EAD ; N # Pd YEZIDI HYPHENATION MARK 10EB0..10EB1 ; N # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE 10EC2..10EC4 ; N # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW -10EFC..10EFF ; N # Mn [4] ARABIC COMBINING ALEF OVERLAY..ARABIC SMALL LOW WORD MADDA +10EC5 ; N # Lm ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW +10EC6..10EC7 ; N # Lo [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW +10ED0 ; N # Po ARABIC BIBLICAL END OF VERSE +10ED1..10ED8 ; N # So [8] ARABIC LIGATURE ALAYHAA AS-SALAATU WAS-SALAAM..ARABIC LIGATURE NAWWARA ALLAAHU MARQADAH +10EFA..10EFF ; N # Mn [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA 10F00..10F1C ; N # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F1D..10F26 ; N # No [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF 10F27 ; N # Lo OLD SOGDIAN LIGATURE AYIN-DALETH @@ -2235,6 +2239,12 @@ FFFD ; A # So REPLACEMENT CHARACTER 11AB0..11ABF ; N # Lo [16] CANADIAN SYLLABICS NATTILIK HI..CANADIAN SYLLABICS SPA 11AC0..11AF8 ; N # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL 11B00..11B09 ; N # Po [10] DEVANAGARI HEAD MARK..DEVANAGARI SIGN MINDU +11B60 ; N # Mn SHARADA VOWEL SIGN OE +11B61 ; N # Mc SHARADA VOWEL SIGN OOE +11B62..11B64 ; N # Mn [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E +11B65 ; N # Mc SHARADA VOWEL SIGN SHORT O +11B66 ; N # Mn SHARADA VOWEL SIGN CANDRA E +11B67 ; N # Mc SHARADA VOWEL SIGN CANDRA O 11BC0..11BE0 ; N # Lo [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO 11BE1 ; N # Po SUNUWAR SIGN PVO 11BF0..11BF9 ; N # Nd [10] SUNUWAR DIGIT ZERO..SUNUWAR DIGIT NINE @@ -2279,6 +2289,10 @@ FFFD ; A # So REPLACEMENT CHARACTER 11D97 ; N # Mn GUNJALA GONDI VIRAMA 11D98 ; N # Lo GUNJALA GONDI OM 11DA0..11DA9 ; N # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE +11DB0..11DD8 ; N # Lo [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH +11DD9 ; N # Lm TOLONG SIKI SIGN SELA +11DDA..11DDB ; N # Lo [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA +11DE0..11DE9 ; N # Nd [10] TOLONG SIKI DIGIT ZERO..TOLONG SIKI DIGIT NINE 11EE0..11EF2 ; N # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA 11EF3..11EF4 ; N # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U 11EF5..11EF6 ; N # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O @@ -2349,6 +2363,8 @@ FFFD ; A # So REPLACEMENT CHARACTER 16E40..16E7F ; N # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y 16E80..16E96 ; N # No [23] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN DIGIT THREE ALTERNATE FORM 16E97..16E9A ; N # Po [4] MEDEFAIDRIN COMMA..MEDEFAIDRIN EXCLAMATION OH +16EA0..16EB8 ; N # Lu [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; N # Ll [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY 16F00..16F4A ; N # Lo [75] MIAO LETTER PA..MIAO LETTER RTE 16F4F ; N # Mn MIAO SIGN CONSONANT MODIFIER BAR 16F50 ; N # Lo MIAO LETTER NASALIZATION @@ -2360,11 +2376,14 @@ FFFD ; A # So REPLACEMENT CHARACTER 16FE3 ; W # Lm OLD CHINESE ITERATION MARK 16FE4 ; W # Mn KHITAN SMALL SCRIPT FILLER 16FF0..16FF1 ; W # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY -17000..187F7 ; W # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 +16FF2..16FF3 ; W # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER +16FF4..16FF6 ; W # Nl [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS +17000..187FF ; W # Lo [6144] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187FF 18800..18AFF ; W # Lo [768] TANGUT COMPONENT-001..TANGUT COMPONENT-768 18B00..18CD5 ; W # Lo [470] KHITAN SMALL SCRIPT CHARACTER-18B00..KHITAN SMALL SCRIPT CHARACTER-18CD5 18CFF ; W # Lo KHITAN SMALL SCRIPT CHARACTER-18CFF -18D00..18D08 ; W # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 +18D00..18D1E ; W # Lo [31] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D1E +18D80..18DF2 ; W # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883 1AFF0..1AFF3 ; W # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 1AFF5..1AFFB ; W # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 1AFFD..1AFFE ; W # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 @@ -2385,7 +2404,12 @@ FFFD ; A # So REPLACEMENT CHARACTER 1BCA0..1BCA3 ; N # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP 1CC00..1CCEF ; N # So [240] UP-POINTING GO-KART..OUTLINED LATIN CAPITAL LETTER Z 1CCF0..1CCF9 ; N # Nd [10] OUTLINED DIGIT ZERO..OUTLINED DIGIT NINE +1CCFA..1CCFC ; N # So [3] SNAKE SYMBOL..NOSE SYMBOL 1CD00..1CEB3 ; N # So [436] BLOCK OCTANT-3..BLACK RIGHT TRIANGLE CARET +1CEBA..1CEBF ; N # So [6] FRAGILE SYMBOL..STRAWBERRY SYMBOL +1CEC0..1CED0 ; N # So [17] HEBE..LEUKOTHEA +1CEE0..1CEEF ; N # So [16] GEOMANTIC FIGURE POPULUS..GEOMANTIC FIGURE VIA +1CEF0 ; N # Sm MEDIUM SMALL WHITE CIRCLE WITH HORIZONTAL BAR 1CF00..1CF2D ; N # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT 1CF30..1CF46 ; N # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG 1CF50..1CFC3 ; N # So [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK @@ -2496,6 +2520,17 @@ FFFD ; A # So REPLACEMENT CHARACTER 1E5F0 ; N # Lo OL ONAL SIGN HODDOND 1E5F1..1E5FA ; N # Nd [10] OL ONAL DIGIT ZERO..OL ONAL DIGIT NINE 1E5FF ; N # Po OL ONAL ABBREVIATION SIGN +1E6C0..1E6DE ; N # Lo [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO +1E6E0..1E6E2 ; N # Lo [3] TAI YO LETTER AA..TAI YO LETTER UE +1E6E3 ; N # Mn TAI YO SIGN UE +1E6E4..1E6E5 ; N # Lo [2] TAI YO LETTER U..TAI YO LETTER AE +1E6E6 ; N # Mn TAI YO SIGN AU +1E6E7..1E6ED ; N # Lo [7] TAI YO LETTER O..TAI YO LETTER AUE +1E6EE..1E6EF ; N # Mn [2] TAI YO SIGN AY..TAI YO SIGN ANG +1E6F0..1E6F4 ; N # Lo [5] TAI YO LETTER AN..TAI YO LETTER AP +1E6F5 ; N # Mn TAI YO SIGN OM +1E6FE ; N # Lo TAI YO SYMBOL MUEANG +1E6FF ; N # Lm TAI YO XAM LAI 1E7E0..1E7E6 ; N # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO 1E7E8..1E7EB ; N # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE 1E7ED..1E7EE ; N # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -2623,14 +2658,13 @@ FFFD ; A # So REPLACEMENT CHARACTER 1F6CD..1F6CF ; N # So [3] SHOPPING BAGS..BED 1F6D0..1F6D2 ; W # So [3] PLACE OF WORSHIP..SHOPPING TROLLEY 1F6D3..1F6D4 ; N # So [2] STUPA..PAGODA -1F6D5..1F6D7 ; W # So [3] HINDU TEMPLE..ELEVATOR +1F6D5..1F6D8 ; W # So [4] HINDU TEMPLE..LANDSLIDE 1F6DC..1F6DF ; W # So [4] WIRELESS..RING BUOY 1F6E0..1F6EA ; N # So [11] HAMMER AND WRENCH..NORTHEAST-POINTING AIRPLANE 1F6EB..1F6EC ; W # So [2] AIRPLANE DEPARTURE..AIRPLANE ARRIVING 1F6F0..1F6F3 ; N # So [4] SATELLITE..PASSENGER SHIP 1F6F4..1F6FC ; W # So [9] SCOOTER..ROLLER SKATE -1F700..1F776 ; N # So [119] ALCHEMICAL SYMBOL FOR QUINTESSENCE..LUNAR ECLIPSE -1F77B..1F77F ; N # So [5] HAUMEA..ORCUS +1F700..1F77F ; N # So [128] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ORCUS 1F780..1F7D9 ; N # So [90] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NINE POINTED WHITE STAR 1F7E0..1F7EB ; W # So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE 1F7F0 ; W # So HEAVY EQUALS SIGN @@ -2641,31 +2675,32 @@ FFFD ; A # So REPLACEMENT CHARACTER 1F890..1F8AD ; N # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS 1F8B0..1F8BB ; N # So [12] ARROW POINTING UPWARDS THEN NORTH WEST..SOUTH WEST ARROW FROM BAR 1F8C0..1F8C1 ; N # So [2] LEFTWARDS ARROW FROM DOWNWARDS ARROW..RIGHTWARDS ARROW FROM DOWNWARDS ARROW +1F8D0..1F8D8 ; N # Sm [9] LONG RIGHTWARDS ARROW OVER LONG LEFTWARDS ARROW..LONG LEFT RIGHT ARROW WITH DEPENDENT LOBE 1F900..1F90B ; N # So [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT 1F90C..1F93A ; W # So [47] PINCHED FINGERS..FENCER 1F93B ; N # So MODERN PENTATHLON 1F93C..1F945 ; W # So [10] WRESTLERS..GOAL NET 1F946 ; N # So RIFLE 1F947..1F9FF ; W # So [185] FIRST PLACE MEDAL..NAZAR AMULET -1FA00..1FA53 ; N # So [84] NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP +1FA00..1FA57 ; N # So [88] NEUTRAL CHESS KING..BLACK CHESS ALFIL 1FA60..1FA6D ; N # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER 1FA70..1FA7C ; W # So [13] BALLET SHOES..CRUTCH -1FA80..1FA89 ; W # So [10] YO-YO..HARP -1FA8F..1FAC6 ; W # So [56] SHOVEL..FINGERPRINT -1FACE..1FADC ; W # So [15] MOOSE..ROOT VEGETABLE -1FADF..1FAE9 ; W # So [11] SPLATTER..FACE WITH BAGS UNDER EYES -1FAF0..1FAF8 ; W # So [9] HAND WITH INDEX FINGER AND THUMB CROSSED..RIGHTWARDS PUSHING HAND +1FA80..1FA8A ; W # So [11] YO-YO..TROMBONE +1FA8E..1FAC6 ; W # So [57] TREASURE CHEST..FINGERPRINT +1FAC8 ; W # So HAIRY CREATURE +1FACD..1FADC ; W # So [16] ORCA..ROOT VEGETABLE +1FADF..1FAEA ; W # So [12] SPLATTER..DISTORTED FACE +1FAEF..1FAF8 ; W # So [10] FIGHT CLOUD..RIGHTWARDS PUSHING HAND 1FB00..1FB92 ; N # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK 1FB94..1FBEF ; N # So [92] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE 1FBF0..1FBF9 ; N # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE +1FBFA ; N # So ALARM BELL SYMBOL 20000..2A6DF ; W # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF 2A6E0..2A6FF ; W # Cn [32] .. -2A700..2B739 ; W # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 -2B73A..2B73F ; W # Cn [6] .. -2B740..2B81D ; W # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D +2A700..2B81D ; W # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D 2B81E..2B81F ; W # Cn [2] .. -2B820..2CEA1 ; W # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 -2CEA2..2CEAF ; W # Cn [14] .. +2B820..2CEAD ; W # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD +2CEAE..2CEAF ; W # Cn [2] .. 2CEB0..2EBE0 ; W # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2EBE1..2EBEF ; W # Cn [15] .. 2EBF0..2EE5D ; W # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D @@ -2675,8 +2710,8 @@ FFFD ; A # So REPLACEMENT CHARACTER 2FA20..2FFFD ; W # Cn [1502] .. 30000..3134A ; W # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A 3134B..3134F ; W # Cn [5] .. -31350..323AF ; W # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF -323B0..3FFFD ; W # Cn [56398] .. +31350..33479 ; W # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 +3347A..3FFFD ; W # Cn [52100] .. E0001 ; N # Cf LANGUAGE TAG E0020..E007F ; N # Cf [96] TAG SPACE..CANCEL TAG E0100..E01EF ; A # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 diff --git a/contrib/unicode/GraphemeBreakProperty.txt b/contrib/unicode/GraphemeBreakProperty.txt index a863397ddaba..19b13571f347 100644 --- a/contrib/unicode/GraphemeBreakProperty.txt +++ b/contrib/unicode/GraphemeBreakProperty.txt @@ -1,6 +1,6 @@ -# GraphemeBreakProperty-16.0.0.txt -# Date: 2024-05-31, 18:09:38 GMT -# © 2024 Unicode®, Inc. +# GraphemeBreakProperty-17.0.0.txt +# Date: 2025-06-30, 06:20:23 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # @@ -30,12 +30,11 @@ 113D1 ; Prepend # Lo TULU-TIGALARI REPHA 1193F ; Prepend # Lo DIVES AKURU PREFIXED NASAL SIGN 11941 ; Prepend # Lo DIVES AKURU INITIAL RA -11A3A ; Prepend # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA 11A84..11A89 ; Prepend # Lo [6] SOYOMBO SIGN JIHVAMULIYA..SOYOMBO CLUSTER-INITIAL LETTER SA 11D46 ; Prepend # Lo MASARAM GONDI REPHA 11F02 ; Prepend # Lo KAWI SIGN REPHA -# Total code points: 28 +# Total code points: 27 # ================================================ @@ -243,7 +242,8 @@ E01F0..E0FFF ; Control # Cn [3600] .. 1A7F ; Extend # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT 1AB0..1ABD ; Extend # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW 1ABE ; Extend # Me COMBINING PARENTHESES OVERLAY -1ABF..1ACE ; Extend # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T +1ABF..1ADD ; Extend # Mn [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW +1AE0..1AEB ; Extend # Mn [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE 1B00..1B03 ; Extend # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B34 ; Extend # Mn BALINESE SIGN REREKAN 1B35 ; Extend # Mc BALINESE VOWEL SIGN TEDUNG @@ -339,7 +339,7 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT 10D24..10D27 ; Extend # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI 10D69..10D6D ; Extend # Mn [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK 10EAB..10EAC ; Extend # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK -10EFC..10EFF ; Extend # Mn [4] ARABIC COMBINING ALEF OVERLAY..ARABIC SMALL LOW WORD MADDA +10EFA..10EFF ; Extend # Mn [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA 10F46..10F50 ; Extend # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW 10F82..10F85 ; Extend # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW 11001 ; Extend # Mn BRAHMI SIGN ANUSVARA @@ -430,6 +430,9 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT 11A59..11A5B ; Extend # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK 11A8A..11A96 ; Extend # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA 11A98..11A99 ; Extend # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER +11B60 ; Extend # Mn SHARADA VOWEL SIGN OE +11B62..11B64 ; Extend # Mn [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E +11B66 ; Extend # Mn SHARADA VOWEL SIGN CANDRA E 11C30..11C36 ; Extend # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L 11C38..11C3D ; Extend # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA 11C3F ; Extend # Mn BHAIKSUKI SIGN VIRAMA @@ -489,13 +492,17 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT 1E2EC..1E2EF ; Extend # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI 1E4EC..1E4EF ; Extend # Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH 1E5EE..1E5EF ; Extend # Mn [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR +1E6E3 ; Extend # Mn TAI YO SIGN UE +1E6E6 ; Extend # Mn TAI YO SIGN AU +1E6EE..1E6EF ; Extend # Mn [2] TAI YO SIGN AY..TAI YO SIGN ANG +1E6F5 ; Extend # Mn TAI YO SIGN OM 1E8D0..1E8D6 ; Extend # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS 1E944..1E94A ; Extend # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA 1F3FB..1F3FF ; Extend # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 E0020..E007F ; Extend # Cf [96] TAG SPACE..CANCEL TAG E0100..E01EF ; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 2198 +# Total code points: 2237 # ================================================ @@ -646,6 +653,9 @@ ABEC ; SpacingMark # Mc MEETEI MAYEK LUM IYEK 11A39 ; SpacingMark # Mc ZANABAZAR SQUARE SIGN VISARGA 11A57..11A58 ; SpacingMark # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU 11A97 ; SpacingMark # Mc SOYOMBO SIGN VISARGA +11B61 ; SpacingMark # Mc SHARADA VOWEL SIGN OOE +11B65 ; SpacingMark # Mc SHARADA VOWEL SIGN SHORT O +11B67 ; SpacingMark # Mc SHARADA VOWEL SIGN CANDRA O 11C2F ; SpacingMark # Mc BHAIKSUKI VOWEL SIGN AA 11C3E ; SpacingMark # Mc BHAIKSUKI SIGN VISARGA 11CA9 ; SpacingMark # Mc MARCHEN SUBJOINED LETTER YA @@ -661,7 +671,7 @@ ABEC ; SpacingMark # Mc MEETEI MAYEK LUM IYEK 1612A..1612C ; SpacingMark # Mc [3] GURUNG KHEMA CONSONANT SIGN MEDIAL YA..GURUNG KHEMA CONSONANT SIGN MEDIAL HA 16F51..16F87 ; SpacingMark # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI -# Total code points: 378 +# Total code points: 381 # ================================================ diff --git a/contrib/unicode/HangulSyllableType.txt b/contrib/unicode/HangulSyllableType.txt new file mode 100644 index 000000000000..8c3cf4a73672 --- /dev/null +++ b/contrib/unicode/HangulSyllableType.txt @@ -0,0 +1,858 @@ +# HangulSyllableType-17.0.0.txt +# Date: 2025-01-27, 18:09:16 GMT +# © 2025 Unicode®, Inc. +# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +# For terms of use and license, see https://www.unicode.org/terms_of_use.html +# +# Unicode Character Database +# For documentation, see https://www.unicode.org/reports/tr44/ + +# ================================================ + +# Property: Hangul_Syllable_Type + +# All code points not explicitly listed for Hangul_Syllable_Type +# have the value Not_Applicable (NA). + +# @missing: 0000..10FFFF; Not_Applicable + +# ================================================ + +# Hangul_Syllable_Type=Leading_Jamo + +1100..115F ; L # Lo [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER +A960..A97C ; L # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH + +# Total code points: 125 + +# ================================================ + +# Hangul_Syllable_Type=Vowel_Jamo + +1160..11A7 ; V # Lo [72] HANGUL JUNGSEONG FILLER..HANGUL JUNGSEONG O-YAE +D7B0..D7C6 ; V # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E + +# Total code points: 95 + +# ================================================ + +# Hangul_Syllable_Type=Trailing_Jamo + +11A8..11FF ; T # Lo [88] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN +D7CB..D7FB ; T # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH + +# Total code points: 137 + +# ================================================ + +# Hangul_Syllable_Type=LV_Syllable + +AC00 ; LV # Lo HANGUL SYLLABLE GA +AC1C ; LV # Lo HANGUL SYLLABLE GAE +AC38 ; LV # Lo HANGUL SYLLABLE GYA +AC54 ; LV # Lo HANGUL SYLLABLE GYAE +AC70 ; LV # Lo HANGUL SYLLABLE GEO +AC8C ; LV # Lo HANGUL SYLLABLE GE +ACA8 ; LV # Lo HANGUL SYLLABLE GYEO +ACC4 ; LV # Lo HANGUL SYLLABLE GYE +ACE0 ; LV # Lo HANGUL SYLLABLE GO +ACFC ; LV # Lo HANGUL SYLLABLE GWA +AD18 ; LV # Lo HANGUL SYLLABLE GWAE +AD34 ; LV # Lo HANGUL SYLLABLE GOE +AD50 ; LV # Lo HANGUL SYLLABLE GYO +AD6C ; LV # Lo HANGUL SYLLABLE GU +AD88 ; LV # Lo HANGUL SYLLABLE GWEO +ADA4 ; LV # Lo HANGUL SYLLABLE GWE +ADC0 ; LV # Lo HANGUL SYLLABLE GWI +ADDC ; LV # Lo HANGUL SYLLABLE GYU +ADF8 ; LV # Lo HANGUL SYLLABLE GEU +AE14 ; LV # Lo HANGUL SYLLABLE GYI +AE30 ; LV # Lo HANGUL SYLLABLE GI +AE4C ; LV # Lo HANGUL SYLLABLE GGA +AE68 ; LV # Lo HANGUL SYLLABLE GGAE +AE84 ; LV # Lo HANGUL SYLLABLE GGYA +AEA0 ; LV # Lo HANGUL SYLLABLE GGYAE +AEBC ; LV # Lo HANGUL SYLLABLE GGEO +AED8 ; LV # Lo HANGUL SYLLABLE GGE +AEF4 ; LV # Lo HANGUL SYLLABLE GGYEO +AF10 ; LV # Lo HANGUL SYLLABLE GGYE +AF2C ; LV # Lo HANGUL SYLLABLE GGO +AF48 ; LV # Lo HANGUL SYLLABLE GGWA +AF64 ; LV # Lo HANGUL SYLLABLE GGWAE +AF80 ; LV # Lo HANGUL SYLLABLE GGOE +AF9C ; LV # Lo HANGUL SYLLABLE GGYO +AFB8 ; LV # Lo HANGUL SYLLABLE GGU +AFD4 ; LV # Lo HANGUL SYLLABLE GGWEO +AFF0 ; LV # Lo HANGUL SYLLABLE GGWE +B00C ; LV # Lo HANGUL SYLLABLE GGWI +B028 ; LV # Lo HANGUL SYLLABLE GGYU +B044 ; LV # Lo HANGUL SYLLABLE GGEU +B060 ; LV # Lo HANGUL SYLLABLE GGYI +B07C ; LV # Lo HANGUL SYLLABLE GGI +B098 ; LV # Lo HANGUL SYLLABLE NA +B0B4 ; LV # Lo HANGUL SYLLABLE NAE +B0D0 ; LV # Lo HANGUL SYLLABLE NYA +B0EC ; LV # Lo HANGUL SYLLABLE NYAE +B108 ; LV # Lo HANGUL SYLLABLE NEO +B124 ; LV # Lo HANGUL SYLLABLE NE +B140 ; LV # Lo HANGUL SYLLABLE NYEO +B15C ; LV # Lo HANGUL SYLLABLE NYE +B178 ; LV # Lo HANGUL SYLLABLE NO +B194 ; LV # Lo HANGUL SYLLABLE NWA +B1B0 ; LV # Lo HANGUL SYLLABLE NWAE +B1CC ; LV # Lo HANGUL SYLLABLE NOE +B1E8 ; LV # Lo HANGUL SYLLABLE NYO +B204 ; LV # Lo HANGUL SYLLABLE NU +B220 ; LV # Lo HANGUL SYLLABLE NWEO +B23C ; LV # Lo HANGUL SYLLABLE NWE +B258 ; LV # Lo HANGUL SYLLABLE NWI +B274 ; LV # Lo HANGUL SYLLABLE NYU +B290 ; LV # Lo HANGUL SYLLABLE NEU +B2AC ; LV # Lo HANGUL SYLLABLE NYI +B2C8 ; LV # Lo HANGUL SYLLABLE NI +B2E4 ; LV # Lo HANGUL SYLLABLE DA +B300 ; LV # Lo HANGUL SYLLABLE DAE +B31C ; LV # Lo HANGUL SYLLABLE DYA +B338 ; LV # Lo HANGUL SYLLABLE DYAE +B354 ; LV # Lo HANGUL SYLLABLE DEO +B370 ; LV # Lo HANGUL SYLLABLE DE +B38C ; LV # Lo HANGUL SYLLABLE DYEO +B3A8 ; LV # Lo HANGUL SYLLABLE DYE +B3C4 ; LV # Lo HANGUL SYLLABLE DO +B3E0 ; LV # Lo HANGUL SYLLABLE DWA +B3FC ; LV # Lo HANGUL SYLLABLE DWAE +B418 ; LV # Lo HANGUL SYLLABLE DOE +B434 ; LV # Lo HANGUL SYLLABLE DYO +B450 ; LV # Lo HANGUL SYLLABLE DU +B46C ; LV # Lo HANGUL SYLLABLE DWEO +B488 ; LV # Lo HANGUL SYLLABLE DWE +B4A4 ; LV # Lo HANGUL SYLLABLE DWI +B4C0 ; LV # Lo HANGUL SYLLABLE DYU +B4DC ; LV # Lo HANGUL SYLLABLE DEU +B4F8 ; LV # Lo HANGUL SYLLABLE DYI +B514 ; LV # Lo HANGUL SYLLABLE DI +B530 ; LV # Lo HANGUL SYLLABLE DDA +B54C ; LV # Lo HANGUL SYLLABLE DDAE +B568 ; LV # Lo HANGUL SYLLABLE DDYA +B584 ; LV # Lo HANGUL SYLLABLE DDYAE +B5A0 ; LV # Lo HANGUL SYLLABLE DDEO +B5BC ; LV # Lo HANGUL SYLLABLE DDE +B5D8 ; LV # Lo HANGUL SYLLABLE DDYEO +B5F4 ; LV # Lo HANGUL SYLLABLE DDYE +B610 ; LV # Lo HANGUL SYLLABLE DDO +B62C ; LV # Lo HANGUL SYLLABLE DDWA +B648 ; LV # Lo HANGUL SYLLABLE DDWAE +B664 ; LV # Lo HANGUL SYLLABLE DDOE +B680 ; LV # Lo HANGUL SYLLABLE DDYO +B69C ; LV # Lo HANGUL SYLLABLE DDU +B6B8 ; LV # Lo HANGUL SYLLABLE DDWEO +B6D4 ; LV # Lo HANGUL SYLLABLE DDWE +B6F0 ; LV # Lo HANGUL SYLLABLE DDWI +B70C ; LV # Lo HANGUL SYLLABLE DDYU +B728 ; LV # Lo HANGUL SYLLABLE DDEU +B744 ; LV # Lo HANGUL SYLLABLE DDYI +B760 ; LV # Lo HANGUL SYLLABLE DDI +B77C ; LV # Lo HANGUL SYLLABLE RA +B798 ; LV # Lo HANGUL SYLLABLE RAE +B7B4 ; LV # Lo HANGUL SYLLABLE RYA +B7D0 ; LV # Lo HANGUL SYLLABLE RYAE +B7EC ; LV # Lo HANGUL SYLLABLE REO +B808 ; LV # Lo HANGUL SYLLABLE RE +B824 ; LV # Lo HANGUL SYLLABLE RYEO +B840 ; LV # Lo HANGUL SYLLABLE RYE +B85C ; LV # Lo HANGUL SYLLABLE RO +B878 ; LV # Lo HANGUL SYLLABLE RWA +B894 ; LV # Lo HANGUL SYLLABLE RWAE +B8B0 ; LV # Lo HANGUL SYLLABLE ROE +B8CC ; LV # Lo HANGUL SYLLABLE RYO +B8E8 ; LV # Lo HANGUL SYLLABLE RU +B904 ; LV # Lo HANGUL SYLLABLE RWEO +B920 ; LV # Lo HANGUL SYLLABLE RWE +B93C ; LV # Lo HANGUL SYLLABLE RWI +B958 ; LV # Lo HANGUL SYLLABLE RYU +B974 ; LV # Lo HANGUL SYLLABLE REU +B990 ; LV # Lo HANGUL SYLLABLE RYI +B9AC ; LV # Lo HANGUL SYLLABLE RI +B9C8 ; LV # Lo HANGUL SYLLABLE MA +B9E4 ; LV # Lo HANGUL SYLLABLE MAE +BA00 ; LV # Lo HANGUL SYLLABLE MYA +BA1C ; LV # Lo HANGUL SYLLABLE MYAE +BA38 ; LV # Lo HANGUL SYLLABLE MEO +BA54 ; LV # Lo HANGUL SYLLABLE ME +BA70 ; LV # Lo HANGUL SYLLABLE MYEO +BA8C ; LV # Lo HANGUL SYLLABLE MYE +BAA8 ; LV # Lo HANGUL SYLLABLE MO +BAC4 ; LV # Lo HANGUL SYLLABLE MWA +BAE0 ; LV # Lo HANGUL SYLLABLE MWAE +BAFC ; LV # Lo HANGUL SYLLABLE MOE +BB18 ; LV # Lo HANGUL SYLLABLE MYO +BB34 ; LV # Lo HANGUL SYLLABLE MU +BB50 ; LV # Lo HANGUL SYLLABLE MWEO +BB6C ; LV # Lo HANGUL SYLLABLE MWE +BB88 ; LV # Lo HANGUL SYLLABLE MWI +BBA4 ; LV # Lo HANGUL SYLLABLE MYU +BBC0 ; LV # Lo HANGUL SYLLABLE MEU +BBDC ; LV # Lo HANGUL SYLLABLE MYI +BBF8 ; LV # Lo HANGUL SYLLABLE MI +BC14 ; LV # Lo HANGUL SYLLABLE BA +BC30 ; LV # Lo HANGUL SYLLABLE BAE +BC4C ; LV # Lo HANGUL SYLLABLE BYA +BC68 ; LV # Lo HANGUL SYLLABLE BYAE +BC84 ; LV # Lo HANGUL SYLLABLE BEO +BCA0 ; LV # Lo HANGUL SYLLABLE BE +BCBC ; LV # Lo HANGUL SYLLABLE BYEO +BCD8 ; LV # Lo HANGUL SYLLABLE BYE +BCF4 ; LV # Lo HANGUL SYLLABLE BO +BD10 ; LV # Lo HANGUL SYLLABLE BWA +BD2C ; LV # Lo HANGUL SYLLABLE BWAE +BD48 ; LV # Lo HANGUL SYLLABLE BOE +BD64 ; LV # Lo HANGUL SYLLABLE BYO +BD80 ; LV # Lo HANGUL SYLLABLE BU +BD9C ; LV # Lo HANGUL SYLLABLE BWEO +BDB8 ; LV # Lo HANGUL SYLLABLE BWE +BDD4 ; LV # Lo HANGUL SYLLABLE BWI +BDF0 ; LV # Lo HANGUL SYLLABLE BYU +BE0C ; LV # Lo HANGUL SYLLABLE BEU +BE28 ; LV # Lo HANGUL SYLLABLE BYI +BE44 ; LV # Lo HANGUL SYLLABLE BI +BE60 ; LV # Lo HANGUL SYLLABLE BBA +BE7C ; LV # Lo HANGUL SYLLABLE BBAE +BE98 ; LV # Lo HANGUL SYLLABLE BBYA +BEB4 ; LV # Lo HANGUL SYLLABLE BBYAE +BED0 ; LV # Lo HANGUL SYLLABLE BBEO +BEEC ; LV # Lo HANGUL SYLLABLE BBE +BF08 ; LV # Lo HANGUL SYLLABLE BBYEO +BF24 ; LV # Lo HANGUL SYLLABLE BBYE +BF40 ; LV # Lo HANGUL SYLLABLE BBO +BF5C ; LV # Lo HANGUL SYLLABLE BBWA +BF78 ; LV # Lo HANGUL SYLLABLE BBWAE +BF94 ; LV # Lo HANGUL SYLLABLE BBOE +BFB0 ; LV # Lo HANGUL SYLLABLE BBYO +BFCC ; LV # Lo HANGUL SYLLABLE BBU +BFE8 ; LV # Lo HANGUL SYLLABLE BBWEO +C004 ; LV # Lo HANGUL SYLLABLE BBWE +C020 ; LV # Lo HANGUL SYLLABLE BBWI +C03C ; LV # Lo HANGUL SYLLABLE BBYU +C058 ; LV # Lo HANGUL SYLLABLE BBEU +C074 ; LV # Lo HANGUL SYLLABLE BBYI +C090 ; LV # Lo HANGUL SYLLABLE BBI +C0AC ; LV # Lo HANGUL SYLLABLE SA +C0C8 ; LV # Lo HANGUL SYLLABLE SAE +C0E4 ; LV # Lo HANGUL SYLLABLE SYA +C100 ; LV # Lo HANGUL SYLLABLE SYAE +C11C ; LV # Lo HANGUL SYLLABLE SEO +C138 ; LV # Lo HANGUL SYLLABLE SE +C154 ; LV # Lo HANGUL SYLLABLE SYEO +C170 ; LV # Lo HANGUL SYLLABLE SYE +C18C ; LV # Lo HANGUL SYLLABLE SO +C1A8 ; LV # Lo HANGUL SYLLABLE SWA +C1C4 ; LV # Lo HANGUL SYLLABLE SWAE +C1E0 ; LV # Lo HANGUL SYLLABLE SOE +C1FC ; LV # Lo HANGUL SYLLABLE SYO +C218 ; LV # Lo HANGUL SYLLABLE SU +C234 ; LV # Lo HANGUL SYLLABLE SWEO +C250 ; LV # Lo HANGUL SYLLABLE SWE +C26C ; LV # Lo HANGUL SYLLABLE SWI +C288 ; LV # Lo HANGUL SYLLABLE SYU +C2A4 ; LV # Lo HANGUL SYLLABLE SEU +C2C0 ; LV # Lo HANGUL SYLLABLE SYI +C2DC ; LV # Lo HANGUL SYLLABLE SI +C2F8 ; LV # Lo HANGUL SYLLABLE SSA +C314 ; LV # Lo HANGUL SYLLABLE SSAE +C330 ; LV # Lo HANGUL SYLLABLE SSYA +C34C ; LV # Lo HANGUL SYLLABLE SSYAE +C368 ; LV # Lo HANGUL SYLLABLE SSEO +C384 ; LV # Lo HANGUL SYLLABLE SSE +C3A0 ; LV # Lo HANGUL SYLLABLE SSYEO +C3BC ; LV # Lo HANGUL SYLLABLE SSYE +C3D8 ; LV # Lo HANGUL SYLLABLE SSO +C3F4 ; LV # Lo HANGUL SYLLABLE SSWA +C410 ; LV # Lo HANGUL SYLLABLE SSWAE +C42C ; LV # Lo HANGUL SYLLABLE SSOE +C448 ; LV # Lo HANGUL SYLLABLE SSYO +C464 ; LV # Lo HANGUL SYLLABLE SSU +C480 ; LV # Lo HANGUL SYLLABLE SSWEO +C49C ; LV # Lo HANGUL SYLLABLE SSWE +C4B8 ; LV # Lo HANGUL SYLLABLE SSWI +C4D4 ; LV # Lo HANGUL SYLLABLE SSYU +C4F0 ; LV # Lo HANGUL SYLLABLE SSEU +C50C ; LV # Lo HANGUL SYLLABLE SSYI +C528 ; LV # Lo HANGUL SYLLABLE SSI +C544 ; LV # Lo HANGUL SYLLABLE A +C560 ; LV # Lo HANGUL SYLLABLE AE +C57C ; LV # Lo HANGUL SYLLABLE YA +C598 ; LV # Lo HANGUL SYLLABLE YAE +C5B4 ; LV # Lo HANGUL SYLLABLE EO +C5D0 ; LV # Lo HANGUL SYLLABLE E +C5EC ; LV # Lo HANGUL SYLLABLE YEO +C608 ; LV # Lo HANGUL SYLLABLE YE +C624 ; LV # Lo HANGUL SYLLABLE O +C640 ; LV # Lo HANGUL SYLLABLE WA +C65C ; LV # Lo HANGUL SYLLABLE WAE +C678 ; LV # Lo HANGUL SYLLABLE OE +C694 ; LV # Lo HANGUL SYLLABLE YO +C6B0 ; LV # Lo HANGUL SYLLABLE U +C6CC ; LV # Lo HANGUL SYLLABLE WEO +C6E8 ; LV # Lo HANGUL SYLLABLE WE +C704 ; LV # Lo HANGUL SYLLABLE WI +C720 ; LV # Lo HANGUL SYLLABLE YU +C73C ; LV # Lo HANGUL SYLLABLE EU +C758 ; LV # Lo HANGUL SYLLABLE YI +C774 ; LV # Lo HANGUL SYLLABLE I +C790 ; LV # Lo HANGUL SYLLABLE JA +C7AC ; LV # Lo HANGUL SYLLABLE JAE +C7C8 ; LV # Lo HANGUL SYLLABLE JYA +C7E4 ; LV # Lo HANGUL SYLLABLE JYAE +C800 ; LV # Lo HANGUL SYLLABLE JEO +C81C ; LV # Lo HANGUL SYLLABLE JE +C838 ; LV # Lo HANGUL SYLLABLE JYEO +C854 ; LV # Lo HANGUL SYLLABLE JYE +C870 ; LV # Lo HANGUL SYLLABLE JO +C88C ; LV # Lo HANGUL SYLLABLE JWA +C8A8 ; LV # Lo HANGUL SYLLABLE JWAE +C8C4 ; LV # Lo HANGUL SYLLABLE JOE +C8E0 ; LV # Lo HANGUL SYLLABLE JYO +C8FC ; LV # Lo HANGUL SYLLABLE JU +C918 ; LV # Lo HANGUL SYLLABLE JWEO +C934 ; LV # Lo HANGUL SYLLABLE JWE +C950 ; LV # Lo HANGUL SYLLABLE JWI +C96C ; LV # Lo HANGUL SYLLABLE JYU +C988 ; LV # Lo HANGUL SYLLABLE JEU +C9A4 ; LV # Lo HANGUL SYLLABLE JYI +C9C0 ; LV # Lo HANGUL SYLLABLE JI +C9DC ; LV # Lo HANGUL SYLLABLE JJA +C9F8 ; LV # Lo HANGUL SYLLABLE JJAE +CA14 ; LV # Lo HANGUL SYLLABLE JJYA +CA30 ; LV # Lo HANGUL SYLLABLE JJYAE +CA4C ; LV # Lo HANGUL SYLLABLE JJEO +CA68 ; LV # Lo HANGUL SYLLABLE JJE +CA84 ; LV # Lo HANGUL SYLLABLE JJYEO +CAA0 ; LV # Lo HANGUL SYLLABLE JJYE +CABC ; LV # Lo HANGUL SYLLABLE JJO +CAD8 ; LV # Lo HANGUL SYLLABLE JJWA +CAF4 ; LV # Lo HANGUL SYLLABLE JJWAE +CB10 ; LV # Lo HANGUL SYLLABLE JJOE +CB2C ; LV # Lo HANGUL SYLLABLE JJYO +CB48 ; LV # Lo HANGUL SYLLABLE JJU +CB64 ; LV # Lo HANGUL SYLLABLE JJWEO +CB80 ; LV # Lo HANGUL SYLLABLE JJWE +CB9C ; LV # Lo HANGUL SYLLABLE JJWI +CBB8 ; LV # Lo HANGUL SYLLABLE JJYU +CBD4 ; LV # Lo HANGUL SYLLABLE JJEU +CBF0 ; LV # Lo HANGUL SYLLABLE JJYI +CC0C ; LV # Lo HANGUL SYLLABLE JJI +CC28 ; LV # Lo HANGUL SYLLABLE CA +CC44 ; LV # Lo HANGUL SYLLABLE CAE +CC60 ; LV # Lo HANGUL SYLLABLE CYA +CC7C ; LV # Lo HANGUL SYLLABLE CYAE +CC98 ; LV # Lo HANGUL SYLLABLE CEO +CCB4 ; LV # Lo HANGUL SYLLABLE CE +CCD0 ; LV # Lo HANGUL SYLLABLE CYEO +CCEC ; LV # Lo HANGUL SYLLABLE CYE +CD08 ; LV # Lo HANGUL SYLLABLE CO +CD24 ; LV # Lo HANGUL SYLLABLE CWA +CD40 ; LV # Lo HANGUL SYLLABLE CWAE +CD5C ; LV # Lo HANGUL SYLLABLE COE +CD78 ; LV # Lo HANGUL SYLLABLE CYO +CD94 ; LV # Lo HANGUL SYLLABLE CU +CDB0 ; LV # Lo HANGUL SYLLABLE CWEO +CDCC ; LV # Lo HANGUL SYLLABLE CWE +CDE8 ; LV # Lo HANGUL SYLLABLE CWI +CE04 ; LV # Lo HANGUL SYLLABLE CYU +CE20 ; LV # Lo HANGUL SYLLABLE CEU +CE3C ; LV # Lo HANGUL SYLLABLE CYI +CE58 ; LV # Lo HANGUL SYLLABLE CI +CE74 ; LV # Lo HANGUL SYLLABLE KA +CE90 ; LV # Lo HANGUL SYLLABLE KAE +CEAC ; LV # Lo HANGUL SYLLABLE KYA +CEC8 ; LV # Lo HANGUL SYLLABLE KYAE +CEE4 ; LV # Lo HANGUL SYLLABLE KEO +CF00 ; LV # Lo HANGUL SYLLABLE KE +CF1C ; LV # Lo HANGUL SYLLABLE KYEO +CF38 ; LV # Lo HANGUL SYLLABLE KYE +CF54 ; LV # Lo HANGUL SYLLABLE KO +CF70 ; LV # Lo HANGUL SYLLABLE KWA +CF8C ; LV # Lo HANGUL SYLLABLE KWAE +CFA8 ; LV # Lo HANGUL SYLLABLE KOE +CFC4 ; LV # Lo HANGUL SYLLABLE KYO +CFE0 ; LV # Lo HANGUL SYLLABLE KU +CFFC ; LV # Lo HANGUL SYLLABLE KWEO +D018 ; LV # Lo HANGUL SYLLABLE KWE +D034 ; LV # Lo HANGUL SYLLABLE KWI +D050 ; LV # Lo HANGUL SYLLABLE KYU +D06C ; LV # Lo HANGUL SYLLABLE KEU +D088 ; LV # Lo HANGUL SYLLABLE KYI +D0A4 ; LV # Lo HANGUL SYLLABLE KI +D0C0 ; LV # Lo HANGUL SYLLABLE TA +D0DC ; LV # Lo HANGUL SYLLABLE TAE +D0F8 ; LV # Lo HANGUL SYLLABLE TYA +D114 ; LV # Lo HANGUL SYLLABLE TYAE +D130 ; LV # Lo HANGUL SYLLABLE TEO +D14C ; LV # Lo HANGUL SYLLABLE TE +D168 ; LV # Lo HANGUL SYLLABLE TYEO +D184 ; LV # Lo HANGUL SYLLABLE TYE +D1A0 ; LV # Lo HANGUL SYLLABLE TO +D1BC ; LV # Lo HANGUL SYLLABLE TWA +D1D8 ; LV # Lo HANGUL SYLLABLE TWAE +D1F4 ; LV # Lo HANGUL SYLLABLE TOE +D210 ; LV # Lo HANGUL SYLLABLE TYO +D22C ; LV # Lo HANGUL SYLLABLE TU +D248 ; LV # Lo HANGUL SYLLABLE TWEO +D264 ; LV # Lo HANGUL SYLLABLE TWE +D280 ; LV # Lo HANGUL SYLLABLE TWI +D29C ; LV # Lo HANGUL SYLLABLE TYU +D2B8 ; LV # Lo HANGUL SYLLABLE TEU +D2D4 ; LV # Lo HANGUL SYLLABLE TYI +D2F0 ; LV # Lo HANGUL SYLLABLE TI +D30C ; LV # Lo HANGUL SYLLABLE PA +D328 ; LV # Lo HANGUL SYLLABLE PAE +D344 ; LV # Lo HANGUL SYLLABLE PYA +D360 ; LV # Lo HANGUL SYLLABLE PYAE +D37C ; LV # Lo HANGUL SYLLABLE PEO +D398 ; LV # Lo HANGUL SYLLABLE PE +D3B4 ; LV # Lo HANGUL SYLLABLE PYEO +D3D0 ; LV # Lo HANGUL SYLLABLE PYE +D3EC ; LV # Lo HANGUL SYLLABLE PO +D408 ; LV # Lo HANGUL SYLLABLE PWA +D424 ; LV # Lo HANGUL SYLLABLE PWAE +D440 ; LV # Lo HANGUL SYLLABLE POE +D45C ; LV # Lo HANGUL SYLLABLE PYO +D478 ; LV # Lo HANGUL SYLLABLE PU +D494 ; LV # Lo HANGUL SYLLABLE PWEO +D4B0 ; LV # Lo HANGUL SYLLABLE PWE +D4CC ; LV # Lo HANGUL SYLLABLE PWI +D4E8 ; LV # Lo HANGUL SYLLABLE PYU +D504 ; LV # Lo HANGUL SYLLABLE PEU +D520 ; LV # Lo HANGUL SYLLABLE PYI +D53C ; LV # Lo HANGUL SYLLABLE PI +D558 ; LV # Lo HANGUL SYLLABLE HA +D574 ; LV # Lo HANGUL SYLLABLE HAE +D590 ; LV # Lo HANGUL SYLLABLE HYA +D5AC ; LV # Lo HANGUL SYLLABLE HYAE +D5C8 ; LV # Lo HANGUL SYLLABLE HEO +D5E4 ; LV # Lo HANGUL SYLLABLE HE +D600 ; LV # Lo HANGUL SYLLABLE HYEO +D61C ; LV # Lo HANGUL SYLLABLE HYE +D638 ; LV # Lo HANGUL SYLLABLE HO +D654 ; LV # Lo HANGUL SYLLABLE HWA +D670 ; LV # Lo HANGUL SYLLABLE HWAE +D68C ; LV # Lo HANGUL SYLLABLE HOE +D6A8 ; LV # Lo HANGUL SYLLABLE HYO +D6C4 ; LV # Lo HANGUL SYLLABLE HU +D6E0 ; LV # Lo HANGUL SYLLABLE HWEO +D6FC ; LV # Lo HANGUL SYLLABLE HWE +D718 ; LV # Lo HANGUL SYLLABLE HWI +D734 ; LV # Lo HANGUL SYLLABLE HYU +D750 ; LV # Lo HANGUL SYLLABLE HEU +D76C ; LV # Lo HANGUL SYLLABLE HYI +D788 ; LV # Lo HANGUL SYLLABLE HI + +# Total code points: 399 + +# ================================================ + +# Hangul_Syllable_Type=LVT_Syllable + +AC01..AC1B ; LVT # Lo [27] HANGUL SYLLABLE GAG..HANGUL SYLLABLE GAH +AC1D..AC37 ; LVT # Lo [27] HANGUL SYLLABLE GAEG..HANGUL SYLLABLE GAEH +AC39..AC53 ; LVT # Lo [27] HANGUL SYLLABLE GYAG..HANGUL SYLLABLE GYAH +AC55..AC6F ; LVT # Lo [27] HANGUL SYLLABLE GYAEG..HANGUL SYLLABLE GYAEH +AC71..AC8B ; LVT # Lo [27] HANGUL SYLLABLE GEOG..HANGUL SYLLABLE GEOH +AC8D..ACA7 ; LVT # Lo [27] HANGUL SYLLABLE GEG..HANGUL SYLLABLE GEH +ACA9..ACC3 ; LVT # Lo [27] HANGUL SYLLABLE GYEOG..HANGUL SYLLABLE GYEOH +ACC5..ACDF ; LVT # Lo [27] HANGUL SYLLABLE GYEG..HANGUL SYLLABLE GYEH +ACE1..ACFB ; LVT # Lo [27] HANGUL SYLLABLE GOG..HANGUL SYLLABLE GOH +ACFD..AD17 ; LVT # Lo [27] HANGUL SYLLABLE GWAG..HANGUL SYLLABLE GWAH +AD19..AD33 ; LVT # Lo [27] HANGUL SYLLABLE GWAEG..HANGUL SYLLABLE GWAEH +AD35..AD4F ; LVT # Lo [27] HANGUL SYLLABLE GOEG..HANGUL SYLLABLE GOEH +AD51..AD6B ; LVT # Lo [27] HANGUL SYLLABLE GYOG..HANGUL SYLLABLE GYOH +AD6D..AD87 ; LVT # Lo [27] HANGUL SYLLABLE GUG..HANGUL SYLLABLE GUH +AD89..ADA3 ; LVT # Lo [27] HANGUL SYLLABLE GWEOG..HANGUL SYLLABLE GWEOH +ADA5..ADBF ; LVT # Lo [27] HANGUL SYLLABLE GWEG..HANGUL SYLLABLE GWEH +ADC1..ADDB ; LVT # Lo [27] HANGUL SYLLABLE GWIG..HANGUL SYLLABLE GWIH +ADDD..ADF7 ; LVT # Lo [27] HANGUL SYLLABLE GYUG..HANGUL SYLLABLE GYUH +ADF9..AE13 ; LVT # Lo [27] HANGUL SYLLABLE GEUG..HANGUL SYLLABLE GEUH +AE15..AE2F ; LVT # Lo [27] HANGUL SYLLABLE GYIG..HANGUL SYLLABLE GYIH +AE31..AE4B ; LVT # Lo [27] HANGUL SYLLABLE GIG..HANGUL SYLLABLE GIH +AE4D..AE67 ; LVT # Lo [27] HANGUL SYLLABLE GGAG..HANGUL SYLLABLE GGAH +AE69..AE83 ; LVT # Lo [27] HANGUL SYLLABLE GGAEG..HANGUL SYLLABLE GGAEH +AE85..AE9F ; LVT # Lo [27] HANGUL SYLLABLE GGYAG..HANGUL SYLLABLE GGYAH +AEA1..AEBB ; LVT # Lo [27] HANGUL SYLLABLE GGYAEG..HANGUL SYLLABLE GGYAEH +AEBD..AED7 ; LVT # Lo [27] HANGUL SYLLABLE GGEOG..HANGUL SYLLABLE GGEOH +AED9..AEF3 ; LVT # Lo [27] HANGUL SYLLABLE GGEG..HANGUL SYLLABLE GGEH +AEF5..AF0F ; LVT # Lo [27] HANGUL SYLLABLE GGYEOG..HANGUL SYLLABLE GGYEOH +AF11..AF2B ; LVT # Lo [27] HANGUL SYLLABLE GGYEG..HANGUL SYLLABLE GGYEH +AF2D..AF47 ; LVT # Lo [27] HANGUL SYLLABLE GGOG..HANGUL SYLLABLE GGOH +AF49..AF63 ; LVT # Lo [27] HANGUL SYLLABLE GGWAG..HANGUL SYLLABLE GGWAH +AF65..AF7F ; LVT # Lo [27] HANGUL SYLLABLE GGWAEG..HANGUL SYLLABLE GGWAEH +AF81..AF9B ; LVT # Lo [27] HANGUL SYLLABLE GGOEG..HANGUL SYLLABLE GGOEH +AF9D..AFB7 ; LVT # Lo [27] HANGUL SYLLABLE GGYOG..HANGUL SYLLABLE GGYOH +AFB9..AFD3 ; LVT # Lo [27] HANGUL SYLLABLE GGUG..HANGUL SYLLABLE GGUH +AFD5..AFEF ; LVT # Lo [27] HANGUL SYLLABLE GGWEOG..HANGUL SYLLABLE GGWEOH +AFF1..B00B ; LVT # Lo [27] HANGUL SYLLABLE GGWEG..HANGUL SYLLABLE GGWEH +B00D..B027 ; LVT # Lo [27] HANGUL SYLLABLE GGWIG..HANGUL SYLLABLE GGWIH +B029..B043 ; LVT # Lo [27] HANGUL SYLLABLE GGYUG..HANGUL SYLLABLE GGYUH +B045..B05F ; LVT # Lo [27] HANGUL SYLLABLE GGEUG..HANGUL SYLLABLE GGEUH +B061..B07B ; LVT # Lo [27] HANGUL SYLLABLE GGYIG..HANGUL SYLLABLE GGYIH +B07D..B097 ; LVT # Lo [27] HANGUL SYLLABLE GGIG..HANGUL SYLLABLE GGIH +B099..B0B3 ; LVT # Lo [27] HANGUL SYLLABLE NAG..HANGUL SYLLABLE NAH +B0B5..B0CF ; LVT # Lo [27] HANGUL SYLLABLE NAEG..HANGUL SYLLABLE NAEH +B0D1..B0EB ; LVT # Lo [27] HANGUL SYLLABLE NYAG..HANGUL SYLLABLE NYAH +B0ED..B107 ; LVT # Lo [27] HANGUL SYLLABLE NYAEG..HANGUL SYLLABLE NYAEH +B109..B123 ; LVT # Lo [27] HANGUL SYLLABLE NEOG..HANGUL SYLLABLE NEOH +B125..B13F ; LVT # Lo [27] HANGUL SYLLABLE NEG..HANGUL SYLLABLE NEH +B141..B15B ; LVT # Lo [27] HANGUL SYLLABLE NYEOG..HANGUL SYLLABLE NYEOH +B15D..B177 ; LVT # Lo [27] HANGUL SYLLABLE NYEG..HANGUL SYLLABLE NYEH +B179..B193 ; LVT # Lo [27] HANGUL SYLLABLE NOG..HANGUL SYLLABLE NOH +B195..B1AF ; LVT # Lo [27] HANGUL SYLLABLE NWAG..HANGUL SYLLABLE NWAH +B1B1..B1CB ; LVT # Lo [27] HANGUL SYLLABLE NWAEG..HANGUL SYLLABLE NWAEH +B1CD..B1E7 ; LVT # Lo [27] HANGUL SYLLABLE NOEG..HANGUL SYLLABLE NOEH +B1E9..B203 ; LVT # Lo [27] HANGUL SYLLABLE NYOG..HANGUL SYLLABLE NYOH +B205..B21F ; LVT # Lo [27] HANGUL SYLLABLE NUG..HANGUL SYLLABLE NUH +B221..B23B ; LVT # Lo [27] HANGUL SYLLABLE NWEOG..HANGUL SYLLABLE NWEOH +B23D..B257 ; LVT # Lo [27] HANGUL SYLLABLE NWEG..HANGUL SYLLABLE NWEH +B259..B273 ; LVT # Lo [27] HANGUL SYLLABLE NWIG..HANGUL SYLLABLE NWIH +B275..B28F ; LVT # Lo [27] HANGUL SYLLABLE NYUG..HANGUL SYLLABLE NYUH +B291..B2AB ; LVT # Lo [27] HANGUL SYLLABLE NEUG..HANGUL SYLLABLE NEUH +B2AD..B2C7 ; LVT # Lo [27] HANGUL SYLLABLE NYIG..HANGUL SYLLABLE NYIH +B2C9..B2E3 ; LVT # Lo [27] HANGUL SYLLABLE NIG..HANGUL SYLLABLE NIH +B2E5..B2FF ; LVT # Lo [27] HANGUL SYLLABLE DAG..HANGUL SYLLABLE DAH +B301..B31B ; LVT # Lo [27] HANGUL SYLLABLE DAEG..HANGUL SYLLABLE DAEH +B31D..B337 ; LVT # Lo [27] HANGUL SYLLABLE DYAG..HANGUL SYLLABLE DYAH +B339..B353 ; LVT # Lo [27] HANGUL SYLLABLE DYAEG..HANGUL SYLLABLE DYAEH +B355..B36F ; LVT # Lo [27] HANGUL SYLLABLE DEOG..HANGUL SYLLABLE DEOH +B371..B38B ; LVT # Lo [27] HANGUL SYLLABLE DEG..HANGUL SYLLABLE DEH +B38D..B3A7 ; LVT # Lo [27] HANGUL SYLLABLE DYEOG..HANGUL SYLLABLE DYEOH +B3A9..B3C3 ; LVT # Lo [27] HANGUL SYLLABLE DYEG..HANGUL SYLLABLE DYEH +B3C5..B3DF ; LVT # Lo [27] HANGUL SYLLABLE DOG..HANGUL SYLLABLE DOH +B3E1..B3FB ; LVT # Lo [27] HANGUL SYLLABLE DWAG..HANGUL SYLLABLE DWAH +B3FD..B417 ; LVT # Lo [27] HANGUL SYLLABLE DWAEG..HANGUL SYLLABLE DWAEH +B419..B433 ; LVT # Lo [27] HANGUL SYLLABLE DOEG..HANGUL SYLLABLE DOEH +B435..B44F ; LVT # Lo [27] HANGUL SYLLABLE DYOG..HANGUL SYLLABLE DYOH +B451..B46B ; LVT # Lo [27] HANGUL SYLLABLE DUG..HANGUL SYLLABLE DUH +B46D..B487 ; LVT # Lo [27] HANGUL SYLLABLE DWEOG..HANGUL SYLLABLE DWEOH +B489..B4A3 ; LVT # Lo [27] HANGUL SYLLABLE DWEG..HANGUL SYLLABLE DWEH +B4A5..B4BF ; LVT # Lo [27] HANGUL SYLLABLE DWIG..HANGUL SYLLABLE DWIH +B4C1..B4DB ; LVT # Lo [27] HANGUL SYLLABLE DYUG..HANGUL SYLLABLE DYUH +B4DD..B4F7 ; LVT # Lo [27] HANGUL SYLLABLE DEUG..HANGUL SYLLABLE DEUH +B4F9..B513 ; LVT # Lo [27] HANGUL SYLLABLE DYIG..HANGUL SYLLABLE DYIH +B515..B52F ; LVT # Lo [27] HANGUL SYLLABLE DIG..HANGUL SYLLABLE DIH +B531..B54B ; LVT # Lo [27] HANGUL SYLLABLE DDAG..HANGUL SYLLABLE DDAH +B54D..B567 ; LVT # Lo [27] HANGUL SYLLABLE DDAEG..HANGUL SYLLABLE DDAEH +B569..B583 ; LVT # Lo [27] HANGUL SYLLABLE DDYAG..HANGUL SYLLABLE DDYAH +B585..B59F ; LVT # Lo [27] HANGUL SYLLABLE DDYAEG..HANGUL SYLLABLE DDYAEH +B5A1..B5BB ; LVT # Lo [27] HANGUL SYLLABLE DDEOG..HANGUL SYLLABLE DDEOH +B5BD..B5D7 ; LVT # Lo [27] HANGUL SYLLABLE DDEG..HANGUL SYLLABLE DDEH +B5D9..B5F3 ; LVT # Lo [27] HANGUL SYLLABLE DDYEOG..HANGUL SYLLABLE DDYEOH +B5F5..B60F ; LVT # Lo [27] HANGUL SYLLABLE DDYEG..HANGUL SYLLABLE DDYEH +B611..B62B ; LVT # Lo [27] HANGUL SYLLABLE DDOG..HANGUL SYLLABLE DDOH +B62D..B647 ; LVT # Lo [27] HANGUL SYLLABLE DDWAG..HANGUL SYLLABLE DDWAH +B649..B663 ; LVT # Lo [27] HANGUL SYLLABLE DDWAEG..HANGUL SYLLABLE DDWAEH +B665..B67F ; LVT # Lo [27] HANGUL SYLLABLE DDOEG..HANGUL SYLLABLE DDOEH +B681..B69B ; LVT # Lo [27] HANGUL SYLLABLE DDYOG..HANGUL SYLLABLE DDYOH +B69D..B6B7 ; LVT # Lo [27] HANGUL SYLLABLE DDUG..HANGUL SYLLABLE DDUH +B6B9..B6D3 ; LVT # Lo [27] HANGUL SYLLABLE DDWEOG..HANGUL SYLLABLE DDWEOH +B6D5..B6EF ; LVT # Lo [27] HANGUL SYLLABLE DDWEG..HANGUL SYLLABLE DDWEH +B6F1..B70B ; LVT # Lo [27] HANGUL SYLLABLE DDWIG..HANGUL SYLLABLE DDWIH +B70D..B727 ; LVT # Lo [27] HANGUL SYLLABLE DDYUG..HANGUL SYLLABLE DDYUH +B729..B743 ; LVT # Lo [27] HANGUL SYLLABLE DDEUG..HANGUL SYLLABLE DDEUH +B745..B75F ; LVT # Lo [27] HANGUL SYLLABLE DDYIG..HANGUL SYLLABLE DDYIH +B761..B77B ; LVT # Lo [27] HANGUL SYLLABLE DDIG..HANGUL SYLLABLE DDIH +B77D..B797 ; LVT # Lo [27] HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAH +B799..B7B3 ; LVT # Lo [27] HANGUL SYLLABLE RAEG..HANGUL SYLLABLE RAEH +B7B5..B7CF ; LVT # Lo [27] HANGUL SYLLABLE RYAG..HANGUL SYLLABLE RYAH +B7D1..B7EB ; LVT # Lo [27] HANGUL SYLLABLE RYAEG..HANGUL SYLLABLE RYAEH +B7ED..B807 ; LVT # Lo [27] HANGUL SYLLABLE REOG..HANGUL SYLLABLE REOH +B809..B823 ; LVT # Lo [27] HANGUL SYLLABLE REG..HANGUL SYLLABLE REH +B825..B83F ; LVT # Lo [27] HANGUL SYLLABLE RYEOG..HANGUL SYLLABLE RYEOH +B841..B85B ; LVT # Lo [27] HANGUL SYLLABLE RYEG..HANGUL SYLLABLE RYEH +B85D..B877 ; LVT # Lo [27] HANGUL SYLLABLE ROG..HANGUL SYLLABLE ROH +B879..B893 ; LVT # Lo [27] HANGUL SYLLABLE RWAG..HANGUL SYLLABLE RWAH +B895..B8AF ; LVT # Lo [27] HANGUL SYLLABLE RWAEG..HANGUL SYLLABLE RWAEH +B8B1..B8CB ; LVT # Lo [27] HANGUL SYLLABLE ROEG..HANGUL SYLLABLE ROEH +B8CD..B8E7 ; LVT # Lo [27] HANGUL SYLLABLE RYOG..HANGUL SYLLABLE RYOH +B8E9..B903 ; LVT # Lo [27] HANGUL SYLLABLE RUG..HANGUL SYLLABLE RUH +B905..B91F ; LVT # Lo [27] HANGUL SYLLABLE RWEOG..HANGUL SYLLABLE RWEOH +B921..B93B ; LVT # Lo [27] HANGUL SYLLABLE RWEG..HANGUL SYLLABLE RWEH +B93D..B957 ; LVT # Lo [27] HANGUL SYLLABLE RWIG..HANGUL SYLLABLE RWIH +B959..B973 ; LVT # Lo [27] HANGUL SYLLABLE RYUG..HANGUL SYLLABLE RYUH +B975..B98F ; LVT # Lo [27] HANGUL SYLLABLE REUG..HANGUL SYLLABLE REUH +B991..B9AB ; LVT # Lo [27] HANGUL SYLLABLE RYIG..HANGUL SYLLABLE RYIH +B9AD..B9C7 ; LVT # Lo [27] HANGUL SYLLABLE RIG..HANGUL SYLLABLE RIH +B9C9..B9E3 ; LVT # Lo [27] HANGUL SYLLABLE MAG..HANGUL SYLLABLE MAH +B9E5..B9FF ; LVT # Lo [27] HANGUL SYLLABLE MAEG..HANGUL SYLLABLE MAEH +BA01..BA1B ; LVT # Lo [27] HANGUL SYLLABLE MYAG..HANGUL SYLLABLE MYAH +BA1D..BA37 ; LVT # Lo [27] HANGUL SYLLABLE MYAEG..HANGUL SYLLABLE MYAEH +BA39..BA53 ; LVT # Lo [27] HANGUL SYLLABLE MEOG..HANGUL SYLLABLE MEOH +BA55..BA6F ; LVT # Lo [27] HANGUL SYLLABLE MEG..HANGUL SYLLABLE MEH +BA71..BA8B ; LVT # Lo [27] HANGUL SYLLABLE MYEOG..HANGUL SYLLABLE MYEOH +BA8D..BAA7 ; LVT # Lo [27] HANGUL SYLLABLE MYEG..HANGUL SYLLABLE MYEH +BAA9..BAC3 ; LVT # Lo [27] HANGUL SYLLABLE MOG..HANGUL SYLLABLE MOH +BAC5..BADF ; LVT # Lo [27] HANGUL SYLLABLE MWAG..HANGUL SYLLABLE MWAH +BAE1..BAFB ; LVT # Lo [27] HANGUL SYLLABLE MWAEG..HANGUL SYLLABLE MWAEH +BAFD..BB17 ; LVT # Lo [27] HANGUL SYLLABLE MOEG..HANGUL SYLLABLE MOEH +BB19..BB33 ; LVT # Lo [27] HANGUL SYLLABLE MYOG..HANGUL SYLLABLE MYOH +BB35..BB4F ; LVT # Lo [27] HANGUL SYLLABLE MUG..HANGUL SYLLABLE MUH +BB51..BB6B ; LVT # Lo [27] HANGUL SYLLABLE MWEOG..HANGUL SYLLABLE MWEOH +BB6D..BB87 ; LVT # Lo [27] HANGUL SYLLABLE MWEG..HANGUL SYLLABLE MWEH +BB89..BBA3 ; LVT # Lo [27] HANGUL SYLLABLE MWIG..HANGUL SYLLABLE MWIH +BBA5..BBBF ; LVT # Lo [27] HANGUL SYLLABLE MYUG..HANGUL SYLLABLE MYUH +BBC1..BBDB ; LVT # Lo [27] HANGUL SYLLABLE MEUG..HANGUL SYLLABLE MEUH +BBDD..BBF7 ; LVT # Lo [27] HANGUL SYLLABLE MYIG..HANGUL SYLLABLE MYIH +BBF9..BC13 ; LVT # Lo [27] HANGUL SYLLABLE MIG..HANGUL SYLLABLE MIH +BC15..BC2F ; LVT # Lo [27] HANGUL SYLLABLE BAG..HANGUL SYLLABLE BAH +BC31..BC4B ; LVT # Lo [27] HANGUL SYLLABLE BAEG..HANGUL SYLLABLE BAEH +BC4D..BC67 ; LVT # Lo [27] HANGUL SYLLABLE BYAG..HANGUL SYLLABLE BYAH +BC69..BC83 ; LVT # Lo [27] HANGUL SYLLABLE BYAEG..HANGUL SYLLABLE BYAEH +BC85..BC9F ; LVT # Lo [27] HANGUL SYLLABLE BEOG..HANGUL SYLLABLE BEOH +BCA1..BCBB ; LVT # Lo [27] HANGUL SYLLABLE BEG..HANGUL SYLLABLE BEH +BCBD..BCD7 ; LVT # Lo [27] HANGUL SYLLABLE BYEOG..HANGUL SYLLABLE BYEOH +BCD9..BCF3 ; LVT # Lo [27] HANGUL SYLLABLE BYEG..HANGUL SYLLABLE BYEH +BCF5..BD0F ; LVT # Lo [27] HANGUL SYLLABLE BOG..HANGUL SYLLABLE BOH +BD11..BD2B ; LVT # Lo [27] HANGUL SYLLABLE BWAG..HANGUL SYLLABLE BWAH +BD2D..BD47 ; LVT # Lo [27] HANGUL SYLLABLE BWAEG..HANGUL SYLLABLE BWAEH +BD49..BD63 ; LVT # Lo [27] HANGUL SYLLABLE BOEG..HANGUL SYLLABLE BOEH +BD65..BD7F ; LVT # Lo [27] HANGUL SYLLABLE BYOG..HANGUL SYLLABLE BYOH +BD81..BD9B ; LVT # Lo [27] HANGUL SYLLABLE BUG..HANGUL SYLLABLE BUH +BD9D..BDB7 ; LVT # Lo [27] HANGUL SYLLABLE BWEOG..HANGUL SYLLABLE BWEOH +BDB9..BDD3 ; LVT # Lo [27] HANGUL SYLLABLE BWEG..HANGUL SYLLABLE BWEH +BDD5..BDEF ; LVT # Lo [27] HANGUL SYLLABLE BWIG..HANGUL SYLLABLE BWIH +BDF1..BE0B ; LVT # Lo [27] HANGUL SYLLABLE BYUG..HANGUL SYLLABLE BYUH +BE0D..BE27 ; LVT # Lo [27] HANGUL SYLLABLE BEUG..HANGUL SYLLABLE BEUH +BE29..BE43 ; LVT # Lo [27] HANGUL SYLLABLE BYIG..HANGUL SYLLABLE BYIH +BE45..BE5F ; LVT # Lo [27] HANGUL SYLLABLE BIG..HANGUL SYLLABLE BIH +BE61..BE7B ; LVT # Lo [27] HANGUL SYLLABLE BBAG..HANGUL SYLLABLE BBAH +BE7D..BE97 ; LVT # Lo [27] HANGUL SYLLABLE BBAEG..HANGUL SYLLABLE BBAEH +BE99..BEB3 ; LVT # Lo [27] HANGUL SYLLABLE BBYAG..HANGUL SYLLABLE BBYAH +BEB5..BECF ; LVT # Lo [27] HANGUL SYLLABLE BBYAEG..HANGUL SYLLABLE BBYAEH +BED1..BEEB ; LVT # Lo [27] HANGUL SYLLABLE BBEOG..HANGUL SYLLABLE BBEOH +BEED..BF07 ; LVT # Lo [27] HANGUL SYLLABLE BBEG..HANGUL SYLLABLE BBEH +BF09..BF23 ; LVT # Lo [27] HANGUL SYLLABLE BBYEOG..HANGUL SYLLABLE BBYEOH +BF25..BF3F ; LVT # Lo [27] HANGUL SYLLABLE BBYEG..HANGUL SYLLABLE BBYEH +BF41..BF5B ; LVT # Lo [27] HANGUL SYLLABLE BBOG..HANGUL SYLLABLE BBOH +BF5D..BF77 ; LVT # Lo [27] HANGUL SYLLABLE BBWAG..HANGUL SYLLABLE BBWAH +BF79..BF93 ; LVT # Lo [27] HANGUL SYLLABLE BBWAEG..HANGUL SYLLABLE BBWAEH +BF95..BFAF ; LVT # Lo [27] HANGUL SYLLABLE BBOEG..HANGUL SYLLABLE BBOEH +BFB1..BFCB ; LVT # Lo [27] HANGUL SYLLABLE BBYOG..HANGUL SYLLABLE BBYOH +BFCD..BFE7 ; LVT # Lo [27] HANGUL SYLLABLE BBUG..HANGUL SYLLABLE BBUH +BFE9..C003 ; LVT # Lo [27] HANGUL SYLLABLE BBWEOG..HANGUL SYLLABLE BBWEOH +C005..C01F ; LVT # Lo [27] HANGUL SYLLABLE BBWEG..HANGUL SYLLABLE BBWEH +C021..C03B ; LVT # Lo [27] HANGUL SYLLABLE BBWIG..HANGUL SYLLABLE BBWIH +C03D..C057 ; LVT # Lo [27] HANGUL SYLLABLE BBYUG..HANGUL SYLLABLE BBYUH +C059..C073 ; LVT # Lo [27] HANGUL SYLLABLE BBEUG..HANGUL SYLLABLE BBEUH +C075..C08F ; LVT # Lo [27] HANGUL SYLLABLE BBYIG..HANGUL SYLLABLE BBYIH +C091..C0AB ; LVT # Lo [27] HANGUL SYLLABLE BBIG..HANGUL SYLLABLE BBIH +C0AD..C0C7 ; LVT # Lo [27] HANGUL SYLLABLE SAG..HANGUL SYLLABLE SAH +C0C9..C0E3 ; LVT # Lo [27] HANGUL SYLLABLE SAEG..HANGUL SYLLABLE SAEH +C0E5..C0FF ; LVT # Lo [27] HANGUL SYLLABLE SYAG..HANGUL SYLLABLE SYAH +C101..C11B ; LVT # Lo [27] HANGUL SYLLABLE SYAEG..HANGUL SYLLABLE SYAEH +C11D..C137 ; LVT # Lo [27] HANGUL SYLLABLE SEOG..HANGUL SYLLABLE SEOH +C139..C153 ; LVT # Lo [27] HANGUL SYLLABLE SEG..HANGUL SYLLABLE SEH +C155..C16F ; LVT # Lo [27] HANGUL SYLLABLE SYEOG..HANGUL SYLLABLE SYEOH +C171..C18B ; LVT # Lo [27] HANGUL SYLLABLE SYEG..HANGUL SYLLABLE SYEH +C18D..C1A7 ; LVT # Lo [27] HANGUL SYLLABLE SOG..HANGUL SYLLABLE SOH +C1A9..C1C3 ; LVT # Lo [27] HANGUL SYLLABLE SWAG..HANGUL SYLLABLE SWAH +C1C5..C1DF ; LVT # Lo [27] HANGUL SYLLABLE SWAEG..HANGUL SYLLABLE SWAEH +C1E1..C1FB ; LVT # Lo [27] HANGUL SYLLABLE SOEG..HANGUL SYLLABLE SOEH +C1FD..C217 ; LVT # Lo [27] HANGUL SYLLABLE SYOG..HANGUL SYLLABLE SYOH +C219..C233 ; LVT # Lo [27] HANGUL SYLLABLE SUG..HANGUL SYLLABLE SUH +C235..C24F ; LVT # Lo [27] HANGUL SYLLABLE SWEOG..HANGUL SYLLABLE SWEOH +C251..C26B ; LVT # Lo [27] HANGUL SYLLABLE SWEG..HANGUL SYLLABLE SWEH +C26D..C287 ; LVT # Lo [27] HANGUL SYLLABLE SWIG..HANGUL SYLLABLE SWIH +C289..C2A3 ; LVT # Lo [27] HANGUL SYLLABLE SYUG..HANGUL SYLLABLE SYUH +C2A5..C2BF ; LVT # Lo [27] HANGUL SYLLABLE SEUG..HANGUL SYLLABLE SEUH +C2C1..C2DB ; LVT # Lo [27] HANGUL SYLLABLE SYIG..HANGUL SYLLABLE SYIH +C2DD..C2F7 ; LVT # Lo [27] HANGUL SYLLABLE SIG..HANGUL SYLLABLE SIH +C2F9..C313 ; LVT # Lo [27] HANGUL SYLLABLE SSAG..HANGUL SYLLABLE SSAH +C315..C32F ; LVT # Lo [27] HANGUL SYLLABLE SSAEG..HANGUL SYLLABLE SSAEH +C331..C34B ; LVT # Lo [27] HANGUL SYLLABLE SSYAG..HANGUL SYLLABLE SSYAH +C34D..C367 ; LVT # Lo [27] HANGUL SYLLABLE SSYAEG..HANGUL SYLLABLE SSYAEH +C369..C383 ; LVT # Lo [27] HANGUL SYLLABLE SSEOG..HANGUL SYLLABLE SSEOH +C385..C39F ; LVT # Lo [27] HANGUL SYLLABLE SSEG..HANGUL SYLLABLE SSEH +C3A1..C3BB ; LVT # Lo [27] HANGUL SYLLABLE SSYEOG..HANGUL SYLLABLE SSYEOH +C3BD..C3D7 ; LVT # Lo [27] HANGUL SYLLABLE SSYEG..HANGUL SYLLABLE SSYEH +C3D9..C3F3 ; LVT # Lo [27] HANGUL SYLLABLE SSOG..HANGUL SYLLABLE SSOH +C3F5..C40F ; LVT # Lo [27] HANGUL SYLLABLE SSWAG..HANGUL SYLLABLE SSWAH +C411..C42B ; LVT # Lo [27] HANGUL SYLLABLE SSWAEG..HANGUL SYLLABLE SSWAEH +C42D..C447 ; LVT # Lo [27] HANGUL SYLLABLE SSOEG..HANGUL SYLLABLE SSOEH +C449..C463 ; LVT # Lo [27] HANGUL SYLLABLE SSYOG..HANGUL SYLLABLE SSYOH +C465..C47F ; LVT # Lo [27] HANGUL SYLLABLE SSUG..HANGUL SYLLABLE SSUH +C481..C49B ; LVT # Lo [27] HANGUL SYLLABLE SSWEOG..HANGUL SYLLABLE SSWEOH +C49D..C4B7 ; LVT # Lo [27] HANGUL SYLLABLE SSWEG..HANGUL SYLLABLE SSWEH +C4B9..C4D3 ; LVT # Lo [27] HANGUL SYLLABLE SSWIG..HANGUL SYLLABLE SSWIH +C4D5..C4EF ; LVT # Lo [27] HANGUL SYLLABLE SSYUG..HANGUL SYLLABLE SSYUH +C4F1..C50B ; LVT # Lo [27] HANGUL SYLLABLE SSEUG..HANGUL SYLLABLE SSEUH +C50D..C527 ; LVT # Lo [27] HANGUL SYLLABLE SSYIG..HANGUL SYLLABLE SSYIH +C529..C543 ; LVT # Lo [27] HANGUL SYLLABLE SSIG..HANGUL SYLLABLE SSIH +C545..C55F ; LVT # Lo [27] HANGUL SYLLABLE AG..HANGUL SYLLABLE AH +C561..C57B ; LVT # Lo [27] HANGUL SYLLABLE AEG..HANGUL SYLLABLE AEH +C57D..C597 ; LVT # Lo [27] HANGUL SYLLABLE YAG..HANGUL SYLLABLE YAH +C599..C5B3 ; LVT # Lo [27] HANGUL SYLLABLE YAEG..HANGUL SYLLABLE YAEH +C5B5..C5CF ; LVT # Lo [27] HANGUL SYLLABLE EOG..HANGUL SYLLABLE EOH +C5D1..C5EB ; LVT # Lo [27] HANGUL SYLLABLE EG..HANGUL SYLLABLE EH +C5ED..C607 ; LVT # Lo [27] HANGUL SYLLABLE YEOG..HANGUL SYLLABLE YEOH +C609..C623 ; LVT # Lo [27] HANGUL SYLLABLE YEG..HANGUL SYLLABLE YEH +C625..C63F ; LVT # Lo [27] HANGUL SYLLABLE OG..HANGUL SYLLABLE OH +C641..C65B ; LVT # Lo [27] HANGUL SYLLABLE WAG..HANGUL SYLLABLE WAH +C65D..C677 ; LVT # Lo [27] HANGUL SYLLABLE WAEG..HANGUL SYLLABLE WAEH +C679..C693 ; LVT # Lo [27] HANGUL SYLLABLE OEG..HANGUL SYLLABLE OEH +C695..C6AF ; LVT # Lo [27] HANGUL SYLLABLE YOG..HANGUL SYLLABLE YOH +C6B1..C6CB ; LVT # Lo [27] HANGUL SYLLABLE UG..HANGUL SYLLABLE UH +C6CD..C6E7 ; LVT # Lo [27] HANGUL SYLLABLE WEOG..HANGUL SYLLABLE WEOH +C6E9..C703 ; LVT # Lo [27] HANGUL SYLLABLE WEG..HANGUL SYLLABLE WEH +C705..C71F ; LVT # Lo [27] HANGUL SYLLABLE WIG..HANGUL SYLLABLE WIH +C721..C73B ; LVT # Lo [27] HANGUL SYLLABLE YUG..HANGUL SYLLABLE YUH +C73D..C757 ; LVT # Lo [27] HANGUL SYLLABLE EUG..HANGUL SYLLABLE EUH +C759..C773 ; LVT # Lo [27] HANGUL SYLLABLE YIG..HANGUL SYLLABLE YIH +C775..C78F ; LVT # Lo [27] HANGUL SYLLABLE IG..HANGUL SYLLABLE IH +C791..C7AB ; LVT # Lo [27] HANGUL SYLLABLE JAG..HANGUL SYLLABLE JAH +C7AD..C7C7 ; LVT # Lo [27] HANGUL SYLLABLE JAEG..HANGUL SYLLABLE JAEH +C7C9..C7E3 ; LVT # Lo [27] HANGUL SYLLABLE JYAG..HANGUL SYLLABLE JYAH +C7E5..C7FF ; LVT # Lo [27] HANGUL SYLLABLE JYAEG..HANGUL SYLLABLE JYAEH +C801..C81B ; LVT # Lo [27] HANGUL SYLLABLE JEOG..HANGUL SYLLABLE JEOH +C81D..C837 ; LVT # Lo [27] HANGUL SYLLABLE JEG..HANGUL SYLLABLE JEH +C839..C853 ; LVT # Lo [27] HANGUL SYLLABLE JYEOG..HANGUL SYLLABLE JYEOH +C855..C86F ; LVT # Lo [27] HANGUL SYLLABLE JYEG..HANGUL SYLLABLE JYEH +C871..C88B ; LVT # Lo [27] HANGUL SYLLABLE JOG..HANGUL SYLLABLE JOH +C88D..C8A7 ; LVT # Lo [27] HANGUL SYLLABLE JWAG..HANGUL SYLLABLE JWAH +C8A9..C8C3 ; LVT # Lo [27] HANGUL SYLLABLE JWAEG..HANGUL SYLLABLE JWAEH +C8C5..C8DF ; LVT # Lo [27] HANGUL SYLLABLE JOEG..HANGUL SYLLABLE JOEH +C8E1..C8FB ; LVT # Lo [27] HANGUL SYLLABLE JYOG..HANGUL SYLLABLE JYOH +C8FD..C917 ; LVT # Lo [27] HANGUL SYLLABLE JUG..HANGUL SYLLABLE JUH +C919..C933 ; LVT # Lo [27] HANGUL SYLLABLE JWEOG..HANGUL SYLLABLE JWEOH +C935..C94F ; LVT # Lo [27] HANGUL SYLLABLE JWEG..HANGUL SYLLABLE JWEH +C951..C96B ; LVT # Lo [27] HANGUL SYLLABLE JWIG..HANGUL SYLLABLE JWIH +C96D..C987 ; LVT # Lo [27] HANGUL SYLLABLE JYUG..HANGUL SYLLABLE JYUH +C989..C9A3 ; LVT # Lo [27] HANGUL SYLLABLE JEUG..HANGUL SYLLABLE JEUH +C9A5..C9BF ; LVT # Lo [27] HANGUL SYLLABLE JYIG..HANGUL SYLLABLE JYIH +C9C1..C9DB ; LVT # Lo [27] HANGUL SYLLABLE JIG..HANGUL SYLLABLE JIH +C9DD..C9F7 ; LVT # Lo [27] HANGUL SYLLABLE JJAG..HANGUL SYLLABLE JJAH +C9F9..CA13 ; LVT # Lo [27] HANGUL SYLLABLE JJAEG..HANGUL SYLLABLE JJAEH +CA15..CA2F ; LVT # Lo [27] HANGUL SYLLABLE JJYAG..HANGUL SYLLABLE JJYAH +CA31..CA4B ; LVT # Lo [27] HANGUL SYLLABLE JJYAEG..HANGUL SYLLABLE JJYAEH +CA4D..CA67 ; LVT # Lo [27] HANGUL SYLLABLE JJEOG..HANGUL SYLLABLE JJEOH +CA69..CA83 ; LVT # Lo [27] HANGUL SYLLABLE JJEG..HANGUL SYLLABLE JJEH +CA85..CA9F ; LVT # Lo [27] HANGUL SYLLABLE JJYEOG..HANGUL SYLLABLE JJYEOH +CAA1..CABB ; LVT # Lo [27] HANGUL SYLLABLE JJYEG..HANGUL SYLLABLE JJYEH +CABD..CAD7 ; LVT # Lo [27] HANGUL SYLLABLE JJOG..HANGUL SYLLABLE JJOH +CAD9..CAF3 ; LVT # Lo [27] HANGUL SYLLABLE JJWAG..HANGUL SYLLABLE JJWAH +CAF5..CB0F ; LVT # Lo [27] HANGUL SYLLABLE JJWAEG..HANGUL SYLLABLE JJWAEH +CB11..CB2B ; LVT # Lo [27] HANGUL SYLLABLE JJOEG..HANGUL SYLLABLE JJOEH +CB2D..CB47 ; LVT # Lo [27] HANGUL SYLLABLE JJYOG..HANGUL SYLLABLE JJYOH +CB49..CB63 ; LVT # Lo [27] HANGUL SYLLABLE JJUG..HANGUL SYLLABLE JJUH +CB65..CB7F ; LVT # Lo [27] HANGUL SYLLABLE JJWEOG..HANGUL SYLLABLE JJWEOH +CB81..CB9B ; LVT # Lo [27] HANGUL SYLLABLE JJWEG..HANGUL SYLLABLE JJWEH +CB9D..CBB7 ; LVT # Lo [27] HANGUL SYLLABLE JJWIG..HANGUL SYLLABLE JJWIH +CBB9..CBD3 ; LVT # Lo [27] HANGUL SYLLABLE JJYUG..HANGUL SYLLABLE JJYUH +CBD5..CBEF ; LVT # Lo [27] HANGUL SYLLABLE JJEUG..HANGUL SYLLABLE JJEUH +CBF1..CC0B ; LVT # Lo [27] HANGUL SYLLABLE JJYIG..HANGUL SYLLABLE JJYIH +CC0D..CC27 ; LVT # Lo [27] HANGUL SYLLABLE JJIG..HANGUL SYLLABLE JJIH +CC29..CC43 ; LVT # Lo [27] HANGUL SYLLABLE CAG..HANGUL SYLLABLE CAH +CC45..CC5F ; LVT # Lo [27] HANGUL SYLLABLE CAEG..HANGUL SYLLABLE CAEH +CC61..CC7B ; LVT # Lo [27] HANGUL SYLLABLE CYAG..HANGUL SYLLABLE CYAH +CC7D..CC97 ; LVT # Lo [27] HANGUL SYLLABLE CYAEG..HANGUL SYLLABLE CYAEH +CC99..CCB3 ; LVT # Lo [27] HANGUL SYLLABLE CEOG..HANGUL SYLLABLE CEOH +CCB5..CCCF ; LVT # Lo [27] HANGUL SYLLABLE CEG..HANGUL SYLLABLE CEH +CCD1..CCEB ; LVT # Lo [27] HANGUL SYLLABLE CYEOG..HANGUL SYLLABLE CYEOH +CCED..CD07 ; LVT # Lo [27] HANGUL SYLLABLE CYEG..HANGUL SYLLABLE CYEH +CD09..CD23 ; LVT # Lo [27] HANGUL SYLLABLE COG..HANGUL SYLLABLE COH +CD25..CD3F ; LVT # Lo [27] HANGUL SYLLABLE CWAG..HANGUL SYLLABLE CWAH +CD41..CD5B ; LVT # Lo [27] HANGUL SYLLABLE CWAEG..HANGUL SYLLABLE CWAEH +CD5D..CD77 ; LVT # Lo [27] HANGUL SYLLABLE COEG..HANGUL SYLLABLE COEH +CD79..CD93 ; LVT # Lo [27] HANGUL SYLLABLE CYOG..HANGUL SYLLABLE CYOH +CD95..CDAF ; LVT # Lo [27] HANGUL SYLLABLE CUG..HANGUL SYLLABLE CUH +CDB1..CDCB ; LVT # Lo [27] HANGUL SYLLABLE CWEOG..HANGUL SYLLABLE CWEOH +CDCD..CDE7 ; LVT # Lo [27] HANGUL SYLLABLE CWEG..HANGUL SYLLABLE CWEH +CDE9..CE03 ; LVT # Lo [27] HANGUL SYLLABLE CWIG..HANGUL SYLLABLE CWIH +CE05..CE1F ; LVT # Lo [27] HANGUL SYLLABLE CYUG..HANGUL SYLLABLE CYUH +CE21..CE3B ; LVT # Lo [27] HANGUL SYLLABLE CEUG..HANGUL SYLLABLE CEUH +CE3D..CE57 ; LVT # Lo [27] HANGUL SYLLABLE CYIG..HANGUL SYLLABLE CYIH +CE59..CE73 ; LVT # Lo [27] HANGUL SYLLABLE CIG..HANGUL SYLLABLE CIH +CE75..CE8F ; LVT # Lo [27] HANGUL SYLLABLE KAG..HANGUL SYLLABLE KAH +CE91..CEAB ; LVT # Lo [27] HANGUL SYLLABLE KAEG..HANGUL SYLLABLE KAEH +CEAD..CEC7 ; LVT # Lo [27] HANGUL SYLLABLE KYAG..HANGUL SYLLABLE KYAH +CEC9..CEE3 ; LVT # Lo [27] HANGUL SYLLABLE KYAEG..HANGUL SYLLABLE KYAEH +CEE5..CEFF ; LVT # Lo [27] HANGUL SYLLABLE KEOG..HANGUL SYLLABLE KEOH +CF01..CF1B ; LVT # Lo [27] HANGUL SYLLABLE KEG..HANGUL SYLLABLE KEH +CF1D..CF37 ; LVT # Lo [27] HANGUL SYLLABLE KYEOG..HANGUL SYLLABLE KYEOH +CF39..CF53 ; LVT # Lo [27] HANGUL SYLLABLE KYEG..HANGUL SYLLABLE KYEH +CF55..CF6F ; LVT # Lo [27] HANGUL SYLLABLE KOG..HANGUL SYLLABLE KOH +CF71..CF8B ; LVT # Lo [27] HANGUL SYLLABLE KWAG..HANGUL SYLLABLE KWAH +CF8D..CFA7 ; LVT # Lo [27] HANGUL SYLLABLE KWAEG..HANGUL SYLLABLE KWAEH +CFA9..CFC3 ; LVT # Lo [27] HANGUL SYLLABLE KOEG..HANGUL SYLLABLE KOEH +CFC5..CFDF ; LVT # Lo [27] HANGUL SYLLABLE KYOG..HANGUL SYLLABLE KYOH +CFE1..CFFB ; LVT # Lo [27] HANGUL SYLLABLE KUG..HANGUL SYLLABLE KUH +CFFD..D017 ; LVT # Lo [27] HANGUL SYLLABLE KWEOG..HANGUL SYLLABLE KWEOH +D019..D033 ; LVT # Lo [27] HANGUL SYLLABLE KWEG..HANGUL SYLLABLE KWEH +D035..D04F ; LVT # Lo [27] HANGUL SYLLABLE KWIG..HANGUL SYLLABLE KWIH +D051..D06B ; LVT # Lo [27] HANGUL SYLLABLE KYUG..HANGUL SYLLABLE KYUH +D06D..D087 ; LVT # Lo [27] HANGUL SYLLABLE KEUG..HANGUL SYLLABLE KEUH +D089..D0A3 ; LVT # Lo [27] HANGUL SYLLABLE KYIG..HANGUL SYLLABLE KYIH +D0A5..D0BF ; LVT # Lo [27] HANGUL SYLLABLE KIG..HANGUL SYLLABLE KIH +D0C1..D0DB ; LVT # Lo [27] HANGUL SYLLABLE TAG..HANGUL SYLLABLE TAH +D0DD..D0F7 ; LVT # Lo [27] HANGUL SYLLABLE TAEG..HANGUL SYLLABLE TAEH +D0F9..D113 ; LVT # Lo [27] HANGUL SYLLABLE TYAG..HANGUL SYLLABLE TYAH +D115..D12F ; LVT # Lo [27] HANGUL SYLLABLE TYAEG..HANGUL SYLLABLE TYAEH +D131..D14B ; LVT # Lo [27] HANGUL SYLLABLE TEOG..HANGUL SYLLABLE TEOH +D14D..D167 ; LVT # Lo [27] HANGUL SYLLABLE TEG..HANGUL SYLLABLE TEH +D169..D183 ; LVT # Lo [27] HANGUL SYLLABLE TYEOG..HANGUL SYLLABLE TYEOH +D185..D19F ; LVT # Lo [27] HANGUL SYLLABLE TYEG..HANGUL SYLLABLE TYEH +D1A1..D1BB ; LVT # Lo [27] HANGUL SYLLABLE TOG..HANGUL SYLLABLE TOH +D1BD..D1D7 ; LVT # Lo [27] HANGUL SYLLABLE TWAG..HANGUL SYLLABLE TWAH +D1D9..D1F3 ; LVT # Lo [27] HANGUL SYLLABLE TWAEG..HANGUL SYLLABLE TWAEH +D1F5..D20F ; LVT # Lo [27] HANGUL SYLLABLE TOEG..HANGUL SYLLABLE TOEH +D211..D22B ; LVT # Lo [27] HANGUL SYLLABLE TYOG..HANGUL SYLLABLE TYOH +D22D..D247 ; LVT # Lo [27] HANGUL SYLLABLE TUG..HANGUL SYLLABLE TUH +D249..D263 ; LVT # Lo [27] HANGUL SYLLABLE TWEOG..HANGUL SYLLABLE TWEOH +D265..D27F ; LVT # Lo [27] HANGUL SYLLABLE TWEG..HANGUL SYLLABLE TWEH +D281..D29B ; LVT # Lo [27] HANGUL SYLLABLE TWIG..HANGUL SYLLABLE TWIH +D29D..D2B7 ; LVT # Lo [27] HANGUL SYLLABLE TYUG..HANGUL SYLLABLE TYUH +D2B9..D2D3 ; LVT # Lo [27] HANGUL SYLLABLE TEUG..HANGUL SYLLABLE TEUH +D2D5..D2EF ; LVT # Lo [27] HANGUL SYLLABLE TYIG..HANGUL SYLLABLE TYIH +D2F1..D30B ; LVT # Lo [27] HANGUL SYLLABLE TIG..HANGUL SYLLABLE TIH +D30D..D327 ; LVT # Lo [27] HANGUL SYLLABLE PAG..HANGUL SYLLABLE PAH +D329..D343 ; LVT # Lo [27] HANGUL SYLLABLE PAEG..HANGUL SYLLABLE PAEH +D345..D35F ; LVT # Lo [27] HANGUL SYLLABLE PYAG..HANGUL SYLLABLE PYAH +D361..D37B ; LVT # Lo [27] HANGUL SYLLABLE PYAEG..HANGUL SYLLABLE PYAEH +D37D..D397 ; LVT # Lo [27] HANGUL SYLLABLE PEOG..HANGUL SYLLABLE PEOH +D399..D3B3 ; LVT # Lo [27] HANGUL SYLLABLE PEG..HANGUL SYLLABLE PEH +D3B5..D3CF ; LVT # Lo [27] HANGUL SYLLABLE PYEOG..HANGUL SYLLABLE PYEOH +D3D1..D3EB ; LVT # Lo [27] HANGUL SYLLABLE PYEG..HANGUL SYLLABLE PYEH +D3ED..D407 ; LVT # Lo [27] HANGUL SYLLABLE POG..HANGUL SYLLABLE POH +D409..D423 ; LVT # Lo [27] HANGUL SYLLABLE PWAG..HANGUL SYLLABLE PWAH +D425..D43F ; LVT # Lo [27] HANGUL SYLLABLE PWAEG..HANGUL SYLLABLE PWAEH +D441..D45B ; LVT # Lo [27] HANGUL SYLLABLE POEG..HANGUL SYLLABLE POEH +D45D..D477 ; LVT # Lo [27] HANGUL SYLLABLE PYOG..HANGUL SYLLABLE PYOH +D479..D493 ; LVT # Lo [27] HANGUL SYLLABLE PUG..HANGUL SYLLABLE PUH +D495..D4AF ; LVT # Lo [27] HANGUL SYLLABLE PWEOG..HANGUL SYLLABLE PWEOH +D4B1..D4CB ; LVT # Lo [27] HANGUL SYLLABLE PWEG..HANGUL SYLLABLE PWEH +D4CD..D4E7 ; LVT # Lo [27] HANGUL SYLLABLE PWIG..HANGUL SYLLABLE PWIH +D4E9..D503 ; LVT # Lo [27] HANGUL SYLLABLE PYUG..HANGUL SYLLABLE PYUH +D505..D51F ; LVT # Lo [27] HANGUL SYLLABLE PEUG..HANGUL SYLLABLE PEUH +D521..D53B ; LVT # Lo [27] HANGUL SYLLABLE PYIG..HANGUL SYLLABLE PYIH +D53D..D557 ; LVT # Lo [27] HANGUL SYLLABLE PIG..HANGUL SYLLABLE PIH +D559..D573 ; LVT # Lo [27] HANGUL SYLLABLE HAG..HANGUL SYLLABLE HAH +D575..D58F ; LVT # Lo [27] HANGUL SYLLABLE HAEG..HANGUL SYLLABLE HAEH +D591..D5AB ; LVT # Lo [27] HANGUL SYLLABLE HYAG..HANGUL SYLLABLE HYAH +D5AD..D5C7 ; LVT # Lo [27] HANGUL SYLLABLE HYAEG..HANGUL SYLLABLE HYAEH +D5C9..D5E3 ; LVT # Lo [27] HANGUL SYLLABLE HEOG..HANGUL SYLLABLE HEOH +D5E5..D5FF ; LVT # Lo [27] HANGUL SYLLABLE HEG..HANGUL SYLLABLE HEH +D601..D61B ; LVT # Lo [27] HANGUL SYLLABLE HYEOG..HANGUL SYLLABLE HYEOH +D61D..D637 ; LVT # Lo [27] HANGUL SYLLABLE HYEG..HANGUL SYLLABLE HYEH +D639..D653 ; LVT # Lo [27] HANGUL SYLLABLE HOG..HANGUL SYLLABLE HOH +D655..D66F ; LVT # Lo [27] HANGUL SYLLABLE HWAG..HANGUL SYLLABLE HWAH +D671..D68B ; LVT # Lo [27] HANGUL SYLLABLE HWAEG..HANGUL SYLLABLE HWAEH +D68D..D6A7 ; LVT # Lo [27] HANGUL SYLLABLE HOEG..HANGUL SYLLABLE HOEH +D6A9..D6C3 ; LVT # Lo [27] HANGUL SYLLABLE HYOG..HANGUL SYLLABLE HYOH +D6C5..D6DF ; LVT # Lo [27] HANGUL SYLLABLE HUG..HANGUL SYLLABLE HUH +D6E1..D6FB ; LVT # Lo [27] HANGUL SYLLABLE HWEOG..HANGUL SYLLABLE HWEOH +D6FD..D717 ; LVT # Lo [27] HANGUL SYLLABLE HWEG..HANGUL SYLLABLE HWEH +D719..D733 ; LVT # Lo [27] HANGUL SYLLABLE HWIG..HANGUL SYLLABLE HWIH +D735..D74F ; LVT # Lo [27] HANGUL SYLLABLE HYUG..HANGUL SYLLABLE HYUH +D751..D76B ; LVT # Lo [27] HANGUL SYLLABLE HEUG..HANGUL SYLLABLE HEUH +D76D..D787 ; LVT # Lo [27] HANGUL SYLLABLE HYIG..HANGUL SYLLABLE HYIH +D789..D7A3 ; LVT # Lo [27] HANGUL SYLLABLE HIG..HANGUL SYLLABLE HIH + +# Total code points: 10773 + +# EOF diff --git a/contrib/unicode/NameAliases.txt b/contrib/unicode/NameAliases.txt index 45744de96ac3..09df7d666f12 100644 --- a/contrib/unicode/NameAliases.txt +++ b/contrib/unicode/NameAliases.txt @@ -1,6 +1,6 @@ -# NameAliases-16.0.0.txt -# Date: 2024-04-24 -# © 2024 Unicode®, Inc. +# NameAliases-17.0.0.txt +# Date: 2025-04-23 +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # @@ -323,6 +323,10 @@ FEFF;ZWNBSP;abbreviation 122D5;CUNEIFORM SIGN NU11 OVER NU11 BUR OVER BUR;correction 12327;CUNEIFORM SIGN KALAM;correction 1680B;BAMUM LETTER PHASE-A MAEMGBIEE;correction +16881;BAMUM LETTER PHASE-B PUNGGAAM;correction +1688E;BAMUM LETTER PHASE-B NGGOM;correction +168DC;BAMUM LETTER PHASE-C SHETFON;correction +1697D;BAMUM LETTER PHASE-E NGGOP;correction 16E56;MEDEFAIDRIN CAPITAL LETTER H;correction 16E57;MEDEFAIDRIN CAPITAL LETTER NG;correction 16E76;MEDEFAIDRIN SMALL LETTER H;correction diff --git a/contrib/unicode/PropList.txt b/contrib/unicode/PropList.txt index fae2831e7a5f..e64b4224d727 100644 --- a/contrib/unicode/PropList.txt +++ b/contrib/unicode/PropList.txt @@ -1,6 +1,6 @@ -# PropList-16.0.0.txt -# Date: 2024-05-31, 18:09:48 GMT -# © 2024 Unicode®, Inc. +# PropList-17.0.0.txt +# Date: 2025-06-30, 06:19:01 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # @@ -702,7 +702,7 @@ FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA 10D24..10D27 ; Other_Alphabetic # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI 10D69 ; Other_Alphabetic # Mn GARAY VOWEL SIGN E 10EAB..10EAC ; Other_Alphabetic # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK -10EFC ; Other_Alphabetic # Mn ARABIC COMBINING ALEF OVERLAY +10EFA..10EFC ; Other_Alphabetic # Mn [3] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC COMBINING ALEF OVERLAY 11000 ; Other_Alphabetic # Mc BRAHMI SIGN CANDRABINDU 11001 ; Other_Alphabetic # Mn BRAHMI SIGN ANUSVARA 11002 ; Other_Alphabetic # Mc BRAHMI SIGN VISARGA @@ -809,6 +809,12 @@ FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA 11A59..11A5B ; Other_Alphabetic # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK 11A8A..11A96 ; Other_Alphabetic # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA 11A97 ; Other_Alphabetic # Mc SOYOMBO SIGN VISARGA +11B60 ; Other_Alphabetic # Mn SHARADA VOWEL SIGN OE +11B61 ; Other_Alphabetic # Mc SHARADA VOWEL SIGN OOE +11B62..11B64 ; Other_Alphabetic # Mn [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E +11B65 ; Other_Alphabetic # Mc SHARADA VOWEL SIGN SHORT O +11B66 ; Other_Alphabetic # Mn SHARADA VOWEL SIGN CANDRA E +11B67 ; Other_Alphabetic # Mc SHARADA VOWEL SIGN CANDRA O 11C2F ; Other_Alphabetic # Mc BHAIKSUKI VOWEL SIGN AA 11C30..11C36 ; Other_Alphabetic # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L 11C38..11C3D ; Other_Alphabetic # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA @@ -853,12 +859,16 @@ FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA 1E023..1E024 ; Other_Alphabetic # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS 1E026..1E02A ; Other_Alphabetic # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA 1E08F ; Other_Alphabetic # Mn COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +1E6E3 ; Other_Alphabetic # Mn TAI YO SIGN UE +1E6E6 ; Other_Alphabetic # Mn TAI YO SIGN AU +1E6EE..1E6EF ; Other_Alphabetic # Mn [2] TAI YO SIGN AY..TAI YO SIGN ANG +1E6F5 ; Other_Alphabetic # Mn TAI YO SIGN OM 1E947 ; Other_Alphabetic # Mn ADLAM HAMZA 1F130..1F149 ; Other_Alphabetic # So [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z 1F150..1F169 ; Other_Alphabetic # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z 1F170..1F189 ; Other_Alphabetic # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z -# Total code points: 1495 +# Total code points: 1510 # ================================================ @@ -871,21 +881,22 @@ FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA F900..FA6D ; Ideographic # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 16FE4 ; Ideographic # Mn KHITAN SMALL SCRIPT FILLER -17000..187F7 ; Ideographic # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 -18800..18CD5 ; Ideographic # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18CFF..18D08 ; Ideographic # Lo [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 +16FF2..16FF3 ; Ideographic # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER +16FF4..16FF6 ; Ideographic # Nl [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS +17000..18CD5 ; Ideographic # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5 +18CFF..18D1E ; Ideographic # Lo [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E +18D80..18DF2 ; Ideographic # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883 1B170..1B2FB ; Ideographic # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB 20000..2A6DF ; Ideographic # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF -2A700..2B739 ; Ideographic # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 -2B740..2B81D ; Ideographic # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D -2B820..2CEA1 ; Ideographic # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 +2A700..2B81D ; Ideographic # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEAD ; Ideographic # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD 2CEB0..2EBE0 ; Ideographic # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2EBF0..2EE5D ; Ideographic # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 2F800..2FA1D ; Ideographic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; Ideographic # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -31350..323AF ; Ideographic # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF +31350..33479 ; Ideographic # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 -# Total code points: 106477 +# Total code points: 110943 # ================================================ @@ -915,11 +926,11 @@ FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COM 0384..0385 ; Diacritic # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS 0483..0487 ; Diacritic # Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE 0559 ; Diacritic # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING -0591..05A1 ; Diacritic # Mn [17] HEBREW ACCENT ETNAHTA..HEBREW ACCENT PAZER -05A3..05BD ; Diacritic # Mn [27] HEBREW ACCENT MUNAH..HEBREW POINT METEG +0591..05BD ; Diacritic # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG 05BF ; Diacritic # Mn HEBREW POINT RAFE 05C1..05C2 ; Diacritic # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT -05C4 ; Diacritic # Mn HEBREW MARK UPPER DOT +05C4..05C5 ; Diacritic # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT +05C7 ; Diacritic # Mn HEBREW POINT QAMATS QATAN 064B..0652 ; Diacritic # Mn [8] ARABIC FATHATAN..ARABIC SUKUN 0657..0658 ; Diacritic # Mn [2] ARABIC INVERTED DAMMA..ARABIC MARK NOON GHUNNA 06DF..06E0 ; Diacritic # Mn [2] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO @@ -990,6 +1001,8 @@ FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COM 1AB0..1ABD ; Diacritic # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW 1ABE ; Diacritic # Me COMBINING PARENTHESES OVERLAY 1AC1..1ACB ; Diacritic # Mn [11] COMBINING LEFT PARENTHESIS ABOVE LEFT..COMBINING TRIPLE ACUTE ACCENT +1ACF..1ADD ; Diacritic # Mn [15] COMBINING DOUBLE CARON..COMBINING DOT-AND-RING BELOW +1AE0..1AEB ; Diacritic # Mn [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE 1B34 ; Diacritic # Mn BALINESE SIGN REREKAN 1B44 ; Diacritic # Mc BALINESE ADEG ADEG 1B6B..1B73 ; Diacritic # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG @@ -1009,6 +1022,7 @@ FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COM 1CF7 ; Diacritic # Mc VEDIC SIGN ATIKRAMA 1CF8..1CF9 ; Diacritic # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE 1D2C..1D6A ; Diacritic # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI +1D9B..1DBE ; Diacritic # Lm [36] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL EZH 1DC4..1DCF ; Diacritic # Mn [12] COMBINING MACRON-ACUTE..COMBINING ZIGZAG BELOW 1DF5..1DFF ; Diacritic # Mn [11] COMBINING UP TACK ABOVE..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW 1FBD ; Diacritic # Sk GREEK KORONIS @@ -1034,6 +1048,7 @@ A717..A71F ; Diacritic # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER A720..A721 ; Diacritic # Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE A788 ; Diacritic # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A789..A78A ; Diacritic # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN +A7F1 ; Diacritic # Lm MODIFIER LETTER CAPITAL S A7F8..A7F9 ; Diacritic # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE A806 ; Diacritic # Mn SYLOTI NAGRI SIGN HASANTA A82C ; Diacritic # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA @@ -1077,6 +1092,7 @@ FFE3 ; Diacritic # Sk FULLWIDTH MACRON 10D24..10D27 ; Diacritic # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI 10D4E ; Diacritic # Lm GARAY VOWEL LENGTH MARK 10D69..10D6D ; Diacritic # Mn [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK +10EFA ; Diacritic # Mn ARABIC DOUBLE VERTICAL BAR BELOW 10EFD..10EFF ; Diacritic # Mn [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA 10F46..10F50 ; Diacritic # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW 10F82..10F85 ; Diacritic # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW @@ -1120,6 +1136,7 @@ FFE3 ; Diacritic # Sk FULLWIDTH MACRON 11D42 ; Diacritic # Mn MASARAM GONDI SIGN NUKTA 11D44..11D45 ; Diacritic # Mn [2] MASARAM GONDI SIGN HALANTA..MASARAM GONDI VIRAMA 11D97 ; Diacritic # Mn GUNJALA GONDI VIRAMA +11DD9 ; Diacritic # Lm TOLONG SIKI SIGN SELA 11F41 ; Diacritic # Mc KAWI SIGN KILLER 11F42 ; Diacritic # Mn KAWI CONJOINER 11F5A ; Diacritic # Mn KAWI SIGN NUKTA @@ -1150,7 +1167,7 @@ FFE3 ; Diacritic # Sk FULLWIDTH MACRON 1E944..1E946 ; Diacritic # Mn [3] ADLAM ALIF LENGTHENER..ADLAM GEMINATION MARK 1E948..1E94A ; Diacritic # Mn [3] ADLAM CONSONANT MODIFIER..ADLAM NUKTA -# Total code points: 1178 +# Total code points: 1247 # ================================================ @@ -1190,14 +1207,16 @@ FF70 ; Extender # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND 113D3 ; Extender # Lo TULU-TIGALARI SIGN PLUTA 115C6..115C8 ; Extender # Po [3] SIDDHAM REPETITION MARK-1..SIDDHAM REPETITION MARK-3 11A98 ; Extender # Mn SOYOMBO GEMINATION MARK +11DD9 ; Extender # Lm TOLONG SIKI SIGN SELA 16B42..16B43 ; Extender # Lm [2] PAHAWH HMONG SIGN VOS NRUA..PAHAWH HMONG SIGN IB YAM 16FE0..16FE1 ; Extender # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK 16FE3 ; Extender # Lm OLD CHINESE ITERATION MARK +16FF2..16FF3 ; Extender # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER 1E13C..1E13D ; Extender # Lm [2] NYIAKENG PUACHUE HMONG SIGN XW XW..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER 1E5EF ; Extender # Mn OL ONAL SIGN IKIR 1E944..1E946 ; Extender # Mn [3] ADLAM ALIF LENGTHENER..ADLAM GEMINATION MARK -# Total code points: 59 +# Total code points: 62 # ================================================ @@ -1220,7 +1239,7 @@ FF70 ; Extender # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND 2C7C..2C7D ; Other_Lowercase # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V A69C..A69D ; Other_Lowercase # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN A770 ; Other_Lowercase # Lm MODIFIER LETTER US -A7F2..A7F4 ; Other_Lowercase # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A7F1..A7F4 ; Other_Lowercase # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F8..A7F9 ; Other_Lowercase # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE AB5C..AB5F ; Other_Lowercase # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK AB69 ; Other_Lowercase # Lm MODIFIER LETTER SMALL TURNED W @@ -1230,7 +1249,7 @@ AB69 ; Other_Lowercase # Lm MODIFIER LETTER SMALL TURNED W 107B2..107BA ; Other_Lowercase # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 1E030..1E06D ; Other_Lowercase # Lm [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE -# Total code points: 311 +# Total code points: 312 # ================================================ @@ -1359,15 +1378,14 @@ FA21 ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA21 FA23..FA24 ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA23..CJK COMPATIBILITY IDEOGRAPH-FA24 FA27..FA29 ; Unified_Ideograph # Lo [3] CJK COMPATIBILITY IDEOGRAPH-FA27..CJK COMPATIBILITY IDEOGRAPH-FA29 20000..2A6DF ; Unified_Ideograph # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF -2A700..2B739 ; Unified_Ideograph # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 -2B740..2B81D ; Unified_Ideograph # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D -2B820..2CEA1 ; Unified_Ideograph # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 +2A700..2B81D ; Unified_Ideograph # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEAD ; Unified_Ideograph # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD 2CEB0..2EBE0 ; Unified_Ideograph # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2EBF0..2EE5D ; Unified_Ideograph # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 30000..3134A ; Unified_Ideograph # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -31350..323AF ; Unified_Ideograph # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF +31350..33479 ; Unified_Ideograph # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 -# Total code points: 97680 +# Total code points: 101996 # ================================================ @@ -1809,9 +1827,7 @@ E0100..E01EF ; Variation_Selector # Mn [240] VARIATION SELECTOR-17..VARIATION S 2B47..2B4C ; Pattern_Syntax # Sm [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR 2B4D..2B73 ; Pattern_Syntax # So [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR 2B74..2B75 ; Pattern_Syntax # Cn [2] .. -2B76..2B95 ; Pattern_Syntax # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW -2B96 ; Pattern_Syntax # Cn -2B97..2BFF ; Pattern_Syntax # So [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL +2B76..2BFF ; Pattern_Syntax # So [138] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..HELLSCHREIBER PAUSE SYMBOL 2E00..2E01 ; Pattern_Syntax # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER 2E02 ; Pattern_Syntax # Pi LEFT SUBSTITUTION BRACKET 2E03 ; Pattern_Syntax # Pf RIGHT SUBSTITUTION BRACKET diff --git a/contrib/unicode/README b/contrib/unicode/README index a459f3496e08..a9840647f689 100644 --- a/contrib/unicode/README +++ b/contrib/unicode/README @@ -15,6 +15,7 @@ ftp://ftp.unicode.org/Public/UNIDATA/PropList.txt ftp://ftp.unicode.org/Public/UNIDATA/DerivedNormalizationProps.txt ftp://ftp.unicode.org/Public/UNIDATA/DerivedCoreProperties.txt ftp://ftp.unicode.org/Public/UNIDATA/NameAliases.txt +ftp://ftp.unicode.org/Public/UNIDATA/HangulSyllableType.txt Three additional files are needed for lookup tables in libstdc++: @@ -36,7 +37,7 @@ localedata/unicode-gen/unicode_utils.py localedata/unicode-gen/utf8_gen.py And the most recent versions added to GCC are from glibc git commit: -064c708c78cc2a6b5802dce73108fc0c1c6bfc80 +2642002380aafb71a1d3b569b6d7ebeab3284816 The script gen_wcwidth.py found here contains the GCC-specific code to map glibc's output to the lookup tables we require. This script should not need @@ -53,7 +54,7 @@ The procedure to update GCC's Unicode support is the following: 3. Run ./gen_wcwidth.py X.Y > ../../libcpp/generated_cpp_wcwidth.h (where X.Y is the version of the Unicode standard corresponding to the - Unicode data files being used, most recently, 16.0.0). + Unicode data files being used, most recently, 17.0.0). 4. Update Unicode Copyright years in libcpp/makeucnid.cc and in libcpp/makeuname2c.cc up to the year in which the Unicode @@ -68,7 +69,7 @@ The procedure to update GCC's Unicode support is the following: > ../../libcpp/ucnid.h 7. Read the corresponding Unicode's standard and update correspondingly - generated_ranges table in libcpp/makeuname2c.cc (in Unicode 16 all + generated_ranges table in libcpp/makeuname2c.cc (in Unicode 17 all the needed information was in Table 4-8). 8. Compile makeuname2c, e.g. with: diff --git a/contrib/unicode/UnicodeData.txt b/contrib/unicode/UnicodeData.txt index 64258a373953..fca68e3e154e 100644 --- a/contrib/unicode/UnicodeData.txt +++ b/contrib/unicode/UnicodeData.txt @@ -659,7 +659,7 @@ 0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7 0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;; 0294;LATIN LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;; -0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;; +0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Lo;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;; 0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;; 0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;; 0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;; @@ -2121,6 +2121,7 @@ 088C;ARABIC LETTER TAH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 088D;ARABIC LETTER KEHEH WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;; 088E;ARABIC VERTICAL TAIL;Lo;0;AL;;;;;N;;;;; +088F;ARABIC LETTER NOON WITH RING ABOVE;Lo;0;AL;;;;;N;;;;; 0890;ARABIC POUND MARK ABOVE;Cf;0;AN;;;;;N;;;;; 0891;ARABIC PIASTRE MARK ABOVE;Cf;0;AN;;;;;N;;;;; 0897;ARABIC PEPET;Mn;230;NSM;;;;;N;;;;; @@ -2862,6 +2863,7 @@ 0C58;TELUGU LETTER TSA;Lo;0;L;;;;;N;;;;; 0C59;TELUGU LETTER DZA;Lo;0;L;;;;;N;;;;; 0C5A;TELUGU LETTER RRRA;Lo;0;L;;;;;N;;;;; +0C5C;TELUGU ARCHAIC SHRII;Lo;0;L;;;;;N;;;;; 0C5D;TELUGU LETTER NAKAARA POLLU;Lo;0;L;;;;;N;;;;; 0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; @@ -2958,6 +2960,7 @@ 0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;; 0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;; +0CDC;KANNADA ARCHAIC SHRII;Lo;0;L;;;;;N;;;;; 0CDD;KANNADA LETTER NAKAARA POLLU;Lo;0;L;;;;;N;;;;; 0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;; 0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; @@ -6137,6 +6140,33 @@ 1ACC;COMBINING LATIN SMALL LETTER INSULAR G;Mn;230;NSM;;;;;N;;;;; 1ACD;COMBINING LATIN SMALL LETTER INSULAR R;Mn;230;NSM;;;;;N;;;;; 1ACE;COMBINING LATIN SMALL LETTER INSULAR T;Mn;230;NSM;;;;;N;;;;; +1ACF;COMBINING DOUBLE CARON;Mn;230;NSM;;;;;N;;;;; +1AD0;COMBINING VERTICAL-LINE-ACUTE;Mn;230;NSM;;;;;N;;;;; +1AD1;COMBINING GRAVE-VERTICAL-LINE;Mn;230;NSM;;;;;N;;;;; +1AD2;COMBINING VERTICAL-LINE-GRAVE;Mn;230;NSM;;;;;N;;;;; +1AD3;COMBINING ACUTE-VERTICAL-LINE;Mn;230;NSM;;;;;N;;;;; +1AD4;COMBINING VERTICAL-LINE-MACRON;Mn;230;NSM;;;;;N;;;;; +1AD5;COMBINING MACRON-VERTICAL-LINE;Mn;230;NSM;;;;;N;;;;; +1AD6;COMBINING VERTICAL-LINE-ACUTE-GRAVE;Mn;230;NSM;;;;;N;;;;; +1AD7;COMBINING VERTICAL-LINE-GRAVE-ACUTE;Mn;230;NSM;;;;;N;;;;; +1AD8;COMBINING MACRON-ACUTE-GRAVE;Mn;230;NSM;;;;;N;;;;; +1AD9;COMBINING SHARP SIGN;Mn;230;NSM;;;;;N;;;;; +1ADA;COMBINING FLAT SIGN;Mn;230;NSM;;;;;N;;;;; +1ADB;COMBINING DOWN TACK ABOVE;Mn;230;NSM;;;;;N;;;;; +1ADC;COMBINING DIAERESIS WITH RAISED LEFT DOT;Mn;230;NSM;;;;;N;;;;; +1ADD;COMBINING DOT-AND-RING BELOW;Mn;220;NSM;;;;;N;;;;; +1AE0;COMBINING LEFT TACK ABOVE;Mn;230;NSM;;;;;N;;;;; +1AE1;COMBINING RIGHT TACK ABOVE;Mn;230;NSM;;;;;N;;;;; +1AE2;COMBINING MINUS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;; +1AE3;COMBINING INVERTED BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;; +1AE4;COMBINING SQUARE ABOVE;Mn;230;NSM;;;;;N;;;;; +1AE5;COMBINING SEAGULL ABOVE;Mn;230;NSM;;;;;N;;;;; +1AE6;COMBINING DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;;;;; +1AE7;COMBINING DOUBLE ARCH ABOVE;Mn;230;NSM;;;;;N;;;;; +1AE8;COMBINING EQUALS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;; +1AE9;COMBINING LEFT ANGLE CENTRED ABOVE;Mn;230;NSM;;;;;N;;;;; +1AEA;COMBINING UPWARDS ARROW ABOVE;Mn;230;NSM;;;;;N;;;;; +1AEB;COMBINING DOUBLE RIGHTWARDS ARROW ABOVE;Mn;234;NSM;;;;;N;;;;; 1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;;;; 1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;;;; 1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;;;; @@ -7545,6 +7575,7 @@ 20BE;LARI SIGN;Sc;0;ET;;;;;N;;;;; 20BF;BITCOIN SIGN;Sc;0;ET;;;;;N;;;;; 20C0;SOM SIGN;Sc;0;ET;;;;;N;;;;; +20C1;SAUDI RIYAL SIGN;Sc;0;ET;;;;;N;;;;; 20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;; 20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;; 20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;; @@ -10239,6 +10270,7 @@ 2B93;NEWLINE RIGHT;So;0;ON;;;;;N;;;;; 2B94;FOUR CORNER ARROWS CIRCLING ANTICLOCKWISE;So;0;ON;;;;;N;;;;; 2B95;RIGHTWARDS BLACK ARROW;So;0;ON;;;;;N;;;;; +2B96;EQUALS SIGN WITH INFINITY ABOVE;So;0;ON;;;;;N;;;;; 2B97;SYMBOL FOR TYPE A ELECTRONICS;So;0;ON;;;;;N;;;;; 2B98;THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2B99;THREE-D RIGHT-LIGHTED UPWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; @@ -14274,10 +14306,14 @@ A7CA;LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C9;;A7C9 A7CB;LATIN CAPITAL LETTER RAMS HORN;Lu;0;L;;;;;N;;;;0264; A7CC;LATIN CAPITAL LETTER S WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A7CD; A7CD;LATIN SMALL LETTER S WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A7CC;;A7CC +A7CE;LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE;Lu;0;L;;;;;N;;;;A7CF; +A7CF;LATIN SMALL LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;;;A7CE;;A7CE A7D0;LATIN CAPITAL LETTER CLOSED INSULAR G;Lu;0;L;;;;;N;;;;A7D1; A7D1;LATIN SMALL LETTER CLOSED INSULAR G;Ll;0;L;;;;;N;;;A7D0;;A7D0 -A7D3;LATIN SMALL LETTER DOUBLE THORN;Ll;0;L;;;;;N;;;;; -A7D5;LATIN SMALL LETTER DOUBLE WYNN;Ll;0;L;;;;;N;;;;; +A7D2;LATIN CAPITAL LETTER DOUBLE THORN;Lu;0;L;;;;;N;;;;A7D3; +A7D3;LATIN SMALL LETTER DOUBLE THORN;Ll;0;L;;;;;N;;;A7D2;;A7D2 +A7D4;LATIN CAPITAL LETTER DOUBLE WYNN;Lu;0;L;;;;;N;;;;A7D5; +A7D5;LATIN SMALL LETTER DOUBLE WYNN;Ll;0;L;;;;;N;;;A7D4;;A7D4 A7D6;LATIN CAPITAL LETTER MIDDLE SCOTS S;Lu;0;L;;;;;N;;;;A7D7; A7D7;LATIN SMALL LETTER MIDDLE SCOTS S;Ll;0;L;;;;;N;;;A7D6;;A7D6 A7D8;LATIN CAPITAL LETTER SIGMOID S;Lu;0;L;;;;;N;;;;A7D9; @@ -14285,6 +14321,7 @@ A7D9;LATIN SMALL LETTER SIGMOID S;Ll;0;L;;;;;N;;;A7D8;;A7D8 A7DA;LATIN CAPITAL LETTER LAMBDA;Lu;0;L;;;;;N;;;;A7DB; A7DB;LATIN SMALL LETTER LAMBDA;Ll;0;L;;;;;N;;;A7DA;;A7DA A7DC;LATIN CAPITAL LETTER LAMBDA WITH STROKE;Lu;0;L;;;;;N;;;;019B; +A7F1;MODIFIER LETTER CAPITAL S;Lm;0;L; 0053;;;;N;;;;; A7F2;MODIFIER LETTER CAPITAL C;Lm;0;L; 0043;;;;N;;;;; A7F3;MODIFIER LETTER CAPITAL F;Lm;0;L; 0046;;;;N;;;;; A7F4;MODIFIER LETTER CAPITAL Q;Lm;0;L; 0051;;;;N;;;;; @@ -15925,6 +15962,22 @@ FBBF;ARABIC SYMBOL RING;Sk;0;AL;;;;;N;;;;; FBC0;ARABIC SYMBOL SMALL TAH ABOVE;Sk;0;AL;;;;;N;;;;; FBC1;ARABIC SYMBOL SMALL TAH BELOW;Sk;0;AL;;;;;N;;;;; FBC2;ARABIC SYMBOL WASLA ABOVE;Sk;0;AL;;;;;N;;;;; +FBC3;ARABIC LIGATURE JALLA WA-ALAA;So;0;ON;;;;;N;;;;; +FBC4;ARABIC LIGATURE DAAMAT BARAKAATUHUM;So;0;ON;;;;;N;;;;; +FBC5;ARABIC LIGATURE RAHMATU ALLAAHI TAAALAA ALAYH;So;0;ON;;;;;N;;;;; +FBC6;ARABIC LIGATURE RAHMATU ALLAAHI ALAYHIM;So;0;ON;;;;;N;;;;; +FBC7;ARABIC LIGATURE RAHMATU ALLAAHI ALAYHIMAA;So;0;ON;;;;;N;;;;; +FBC8;ARABIC LIGATURE RAHIMAHUM ALLAAHU TAAALAA;So;0;ON;;;;;N;;;;; +FBC9;ARABIC LIGATURE RAHIMAHUMAA ALLAAH;So;0;ON;;;;;N;;;;; +FBCA;ARABIC LIGATURE RAHIMAHUMAA ALLAAHU TAAALAA;So;0;ON;;;;;N;;;;; +FBCB;ARABIC LIGATURE RADI ALLAAHU TAAALAA ANHUM;So;0;ON;;;;;N;;;;; +FBCC;ARABIC LIGATURE HAFIZAHU ALLAAH;So;0;ON;;;;;N;;;;; +FBCD;ARABIC LIGATURE HAFIZAHU ALLAAHU TAAALAA;So;0;ON;;;;;N;;;;; +FBCE;ARABIC LIGATURE HAFIZAHUM ALLAAHU TAAALAA;So;0;ON;;;;;N;;;;; +FBCF;ARABIC LIGATURE HAFIZAHUMAA ALLAAHU TAAALAA;So;0;ON;;;;;N;;;;; +FBD0;ARABIC LIGATURE SALLALLAAHU TAAALAA ALAYHI WA-SALLAM;So;0;ON;;;;;N;;;;; +FBD1;ARABIC LIGATURE AJJAL ALLAAHU FARAJAHU ASH-SHAREEF;So;0;ON;;;;;N;;;;; +FBD2;ARABIC LIGATURE ALAYHI AR-RAHMAH;So;0;ON;;;;;N;;;;; FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL; 06AD;;;;N;;;;; @@ -16370,6 +16423,8 @@ FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL; 0645 FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0645 062C 0645;;;;N;;;;; FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL; 0645 062E 062C;;;;N;;;;; FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0645 062E 0645;;;;N;;;;; +FD90;ARABIC LIGATURE RAHMATU ALLAAHI ALAYH;So;0;ON;;;;;N;;;;; +FD91;ARABIC LIGATURE RAHMATU ALLAAHI ALAYHAA;So;0;ON;;;;;N;;;;; FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL; 0645 062C 062E;;;;N;;;;; FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0647 0645 062C;;;;N;;;;; FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0647 0645 0645;;;;N;;;;; @@ -16424,6 +16479,13 @@ FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0639 FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0635 0645 0645;;;;N;;;;; FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 0633 062E 064A;;;;N;;;;; FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0646 062C 064A;;;;N;;;;; +FDC8;ARABIC LIGATURE RAHIMAHU ALLAAH TAAALAA;So;0;ON;;;;;N;;;;; +FDC9;ARABIC LIGATURE RADI ALLAAHU TAAALAA ANH;So;0;ON;;;;;N;;;;; +FDCA;ARABIC LIGATURE RADI ALLAAHU TAAALAA ANHAA;So;0;ON;;;;;N;;;;; +FDCB;ARABIC LIGATURE RADI ALLAAHU TAAALAA ANHUMAA;So;0;ON;;;;;N;;;;; +FDCC;ARABIC LIGATURE SALLALLAHU ALAYHI WA-ALAA AALIHEE WA-SALLAM;So;0;ON;;;;;N;;;;; +FDCD;ARABIC LIGATURE AJJAL ALLAAHU TAAALAA FARAJAHU ASH-SHAREEF;So;0;ON;;;;;N;;;;; +FDCE;ARABIC LIGATURE KARRAMA ALLAAHU WAJHAH;So;0;ON;;;;;N;;;;; FDCF;ARABIC LIGATURE SALAAMUHU ALAYNAA;So;0;ON;;;;;N;;;;; FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL; 0635 0644 06D2;;;;N;;;;; FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL; 0642 0644 06D2;;;;N;;;;; @@ -18708,6 +18770,32 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10938;LYDIAN LETTER NN;Lo;0;R;;;;;N;;;;; 10939;LYDIAN LETTER C;Lo;0;R;;;;;N;;;;; 1093F;LYDIAN TRIANGULAR MARK;Po;0;R;;;;;N;;;;; +10940;SIDETIC LETTER N01;Lo;0;R;;;;;N;;;;; +10941;SIDETIC LETTER N02;Lo;0;R;;;;;N;;;;; +10942;SIDETIC LETTER N03;Lo;0;R;;;;;N;;;;; +10943;SIDETIC LETTER N04;Lo;0;R;;;;;N;;;;; +10944;SIDETIC LETTER N05;Lo;0;R;;;;;N;;;;; +10945;SIDETIC LETTER N06;Lo;0;R;;;;;N;;;;; +10946;SIDETIC LETTER N07;Lo;0;R;;;;;N;;;;; +10947;SIDETIC LETTER N08;Lo;0;R;;;;;N;;;;; +10948;SIDETIC LETTER N09;Lo;0;R;;;;;N;;;;; +10949;SIDETIC LETTER N10;Lo;0;R;;;;;N;;;;; +1094A;SIDETIC LETTER N11;Lo;0;R;;;;;N;;;;; +1094B;SIDETIC LETTER N12;Lo;0;R;;;;;N;;;;; +1094C;SIDETIC LETTER N13;Lo;0;R;;;;;N;;;;; +1094D;SIDETIC LETTER N14;Lo;0;R;;;;;N;;;;; +1094E;SIDETIC LETTER N15;Lo;0;R;;;;;N;;;;; +1094F;SIDETIC LETTER N16;Lo;0;R;;;;;N;;;;; +10950;SIDETIC LETTER N17;Lo;0;R;;;;;N;;;;; +10951;SIDETIC LETTER N18;Lo;0;R;;;;;N;;;;; +10952;SIDETIC LETTER N19;Lo;0;R;;;;;N;;;;; +10953;SIDETIC LETTER N20;Lo;0;R;;;;;N;;;;; +10954;SIDETIC LETTER N21;Lo;0;R;;;;;N;;;;; +10955;SIDETIC LETTER N22;Lo;0;R;;;;;N;;;;; +10956;SIDETIC LETTER N23;Lo;0;R;;;;;N;;;;; +10957;SIDETIC LETTER N24;Lo;0;R;;;;;N;;;;; +10958;SIDETIC LETTER N25;Lo;0;R;;;;;N;;;;; +10959;SIDETIC LETTER N26;Lo;0;R;;;;;N;;;;; 10980;MEROITIC HIEROGLYPHIC LETTER A;Lo;0;R;;;;;N;;;;; 10981;MEROITIC HIEROGLYPHIC LETTER E;Lo;0;R;;;;;N;;;;; 10982;MEROITIC HIEROGLYPHIC LETTER I;Lo;0;R;;;;;N;;;;; @@ -19541,6 +19629,20 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10EC2;ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;; 10EC3;ARABIC LETTER TAH WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;; 10EC4;ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;; +10EC5;ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW;Lm;0;AL;;;;;N;;;;; +10EC6;ARABIC LETTER THIN NOON;Lo;0;AL;;;;;N;;;;; +10EC7;ARABIC LETTER YEH WITH FOUR DOTS BELOW;Lo;0;AL;;;;;N;;;;; +10ED0;ARABIC BIBLICAL END OF VERSE;Po;0;ON;;;;;N;;;;; +10ED1;ARABIC LIGATURE ALAYHAA AS-SALAATU WAS-SALAAM;So;0;ON;;;;;N;;;;; +10ED2;ARABIC LIGATURE ALAYHIM AS-SALAATU WAS-SALAAM;So;0;ON;;;;;N;;;;; +10ED3;ARABIC LIGATURE ALAYHIMAA AS-SALAATU WAS-SALAAM;So;0;ON;;;;;N;;;;; +10ED4;ARABIC LIGATURE QADDASA ALLAAHU SIRRAH;So;0;ON;;;;;N;;;;; +10ED5;ARABIC LIGATURE QUDDISA SIRRUHUM;So;0;ON;;;;;N;;;;; +10ED6;ARABIC LIGATURE QUDDISA SIRRUHUMAA;So;0;ON;;;;;N;;;;; +10ED7;ARABIC LIGATURE QUDDISAT ASRAARUHUM;So;0;ON;;;;;N;;;;; +10ED8;ARABIC LIGATURE NAWWARA ALLAAHU MARQADAH;So;0;ON;;;;;N;;;;; +10EFA;ARABIC DOUBLE VERTICAL BAR BELOW;Mn;220;NSM;;;;;N;;;;; +10EFB;ARABIC SMALL LOW NOON;Mn;220;NSM;;;;;N;;;;; 10EFC;ARABIC COMBINING ALEF OVERLAY;Mn;0;NSM;;;;;N;;;;; 10EFD;ARABIC SMALL LOW WORD SAKTA;Mn;220;NSM;;;;;N;;;;; 10EFE;ARABIC SMALL LOW WORD QASR;Mn;220;NSM;;;;;N;;;;; @@ -21521,6 +21623,14 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 11B07;DEVANAGARI SIGN WESTERN NINE-LIKE BHALE;Po;0;L;;;;;N;;;;; 11B08;DEVANAGARI SIGN REVERSED NINE-LIKE BHALE;Po;0;L;;;;;N;;;;; 11B09;DEVANAGARI SIGN MINDU;Po;0;L;;;;;N;;;;; +11B60;SHARADA VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;; +11B61;SHARADA VOWEL SIGN OOE;Mc;0;L;;;;;N;;;;; +11B62;SHARADA VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;; +11B63;SHARADA VOWEL SIGN UUE;Mn;0;NSM;;;;;N;;;;; +11B64;SHARADA VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;; +11B65;SHARADA VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;; +11B66;SHARADA VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;; +11B67;SHARADA VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;; 11BC0;SUNUWAR LETTER DEVI;Lo;0;L;;;;;N;;;;; 11BC1;SUNUWAR LETTER TASLA;Lo;0;L;;;;;N;;;;; 11BC2;SUNUWAR LETTER EKO;Lo;0;L;;;;;N;;;;; @@ -21868,6 +21978,60 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 11DA7;GUNJALA GONDI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 11DA8;GUNJALA GONDI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 11DA9;GUNJALA GONDI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +11DB0;TOLONG SIKI LETTER I;Lo;0;L;;;;;N;;;;; +11DB1;TOLONG SIKI LETTER E;Lo;0;L;;;;;N;;;;; +11DB2;TOLONG SIKI LETTER U;Lo;0;L;;;;;N;;;;; +11DB3;TOLONG SIKI LETTER O;Lo;0;L;;;;;N;;;;; +11DB4;TOLONG SIKI LETTER A;Lo;0;L;;;;;N;;;;; +11DB5;TOLONG SIKI LETTER AA;Lo;0;L;;;;;N;;;;; +11DB6;TOLONG SIKI LETTER P;Lo;0;L;;;;;N;;;;; +11DB7;TOLONG SIKI LETTER PH;Lo;0;L;;;;;N;;;;; +11DB8;TOLONG SIKI LETTER B;Lo;0;L;;;;;N;;;;; +11DB9;TOLONG SIKI LETTER BH;Lo;0;L;;;;;N;;;;; +11DBA;TOLONG SIKI LETTER M;Lo;0;L;;;;;N;;;;; +11DBB;TOLONG SIKI LETTER T;Lo;0;L;;;;;N;;;;; +11DBC;TOLONG SIKI LETTER TH;Lo;0;L;;;;;N;;;;; +11DBD;TOLONG SIKI LETTER D;Lo;0;L;;;;;N;;;;; +11DBE;TOLONG SIKI LETTER DH;Lo;0;L;;;;;N;;;;; +11DBF;TOLONG SIKI LETTER N;Lo;0;L;;;;;N;;;;; +11DC0;TOLONG SIKI LETTER TT;Lo;0;L;;;;;N;;;;; +11DC1;TOLONG SIKI LETTER TTH;Lo;0;L;;;;;N;;;;; +11DC2;TOLONG SIKI LETTER DD;Lo;0;L;;;;;N;;;;; +11DC3;TOLONG SIKI LETTER DDH;Lo;0;L;;;;;N;;;;; +11DC4;TOLONG SIKI LETTER NN;Lo;0;L;;;;;N;;;;; +11DC5;TOLONG SIKI LETTER C;Lo;0;L;;;;;N;;;;; +11DC6;TOLONG SIKI LETTER CH;Lo;0;L;;;;;N;;;;; +11DC7;TOLONG SIKI LETTER J;Lo;0;L;;;;;N;;;;; +11DC8;TOLONG SIKI LETTER JH;Lo;0;L;;;;;N;;;;; +11DC9;TOLONG SIKI LETTER NY;Lo;0;L;;;;;N;;;;; +11DCA;TOLONG SIKI LETTER K;Lo;0;L;;;;;N;;;;; +11DCB;TOLONG SIKI LETTER KH;Lo;0;L;;;;;N;;;;; +11DCC;TOLONG SIKI LETTER G;Lo;0;L;;;;;N;;;;; +11DCD;TOLONG SIKI LETTER GH;Lo;0;L;;;;;N;;;;; +11DCE;TOLONG SIKI LETTER NG;Lo;0;L;;;;;N;;;;; +11DCF;TOLONG SIKI LETTER Y;Lo;0;L;;;;;N;;;;; +11DD0;TOLONG SIKI LETTER R;Lo;0;L;;;;;N;;;;; +11DD1;TOLONG SIKI LETTER L;Lo;0;L;;;;;N;;;;; +11DD2;TOLONG SIKI LETTER V;Lo;0;L;;;;;N;;;;; +11DD3;TOLONG SIKI LETTER NNY;Lo;0;L;;;;;N;;;;; +11DD4;TOLONG SIKI LETTER S;Lo;0;L;;;;;N;;;;; +11DD5;TOLONG SIKI LETTER H;Lo;0;L;;;;;N;;;;; +11DD6;TOLONG SIKI LETTER X;Lo;0;L;;;;;N;;;;; +11DD7;TOLONG SIKI LETTER RR;Lo;0;L;;;;;N;;;;; +11DD8;TOLONG SIKI LETTER RRH;Lo;0;L;;;;;N;;;;; +11DD9;TOLONG SIKI SIGN SELA;Lm;0;L;;;;;N;;;;; +11DDA;TOLONG SIKI SIGN HECAKA;Lo;0;L;;;;;N;;;;; +11DDB;TOLONG SIKI UNGGA;Lo;0;L;;;;;N;;;;; +11DE0;TOLONG SIKI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +11DE1;TOLONG SIKI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +11DE2;TOLONG SIKI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +11DE3;TOLONG SIKI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +11DE4;TOLONG SIKI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +11DE5;TOLONG SIKI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +11DE6;TOLONG SIKI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +11DE7;TOLONG SIKI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +11DE8;TOLONG SIKI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +11DE9;TOLONG SIKI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11EE0;MAKASAR LETTER KA;Lo;0;L;;;;;N;;;;; 11EE1;MAKASAR LETTER GA;Lo;0;L;;;;;N;;;;; 11EE2;MAKASAR LETTER NGA;Lo;0;L;;;;;N;;;;; @@ -22088,8 +22252,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 12035;CUNEIFORM SIGN ARAD TIMES KUR;Lo;0;L;;;;;N;;;;; 12036;CUNEIFORM SIGN ARKAB;Lo;0;L;;;;;N;;;;; 12037;CUNEIFORM SIGN ASAL2;Lo;0;L;;;;;N;;;;; -12038;CUNEIFORM SIGN ASH;Lo;0;L;;;;;N;;;;; -12039;CUNEIFORM SIGN ASH ZIDA TENU;Lo;0;L;;;;;N;;;;; +12038;CUNEIFORM SIGN ASH;Lo;0;L;;;;1;N;;;;; +12039;CUNEIFORM SIGN ASH ZIDA TENU;Lo;0;L;;;;1;N;;;;; 1203A;CUNEIFORM SIGN ASH KABA TENU;Lo;0;L;;;;;N;;;;; 1203B;CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP;Lo;0;L;;;;;N;;;;; 1203C;CUNEIFORM SIGN ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;; @@ -22153,7 +22317,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 12076;CUNEIFORM SIGN DIM2;Lo;0;L;;;;;N;;;;; 12077;CUNEIFORM SIGN DIN;Lo;0;L;;;;;N;;;;; 12078;CUNEIFORM SIGN DIN KASKAL U GUNU DISH;Lo;0;L;;;;;N;;;;; -12079;CUNEIFORM SIGN DISH;Lo;0;L;;;;;N;;;;; +12079;CUNEIFORM SIGN DISH;Lo;0;L;;;;1;N;;;;; 1207A;CUNEIFORM SIGN DU;Lo;0;L;;;;;N;;;;; 1207B;CUNEIFORM SIGN DU OVER DU;Lo;0;L;;;;;N;;;;; 1207C;CUNEIFORM SIGN DU GUNU;Lo;0;L;;;;;N;;;;; @@ -22582,12 +22746,12 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 12223;CUNEIFORM SIGN MA2;Lo;0;L;;;;;N;;;;; 12224;CUNEIFORM SIGN MAH;Lo;0;L;;;;;N;;;;; 12225;CUNEIFORM SIGN MAR;Lo;0;L;;;;;N;;;;; -12226;CUNEIFORM SIGN MASH;Lo;0;L;;;;;N;;;;; +12226;CUNEIFORM SIGN MASH;Lo;0;L;;;;1/2;N;;;;; 12227;CUNEIFORM SIGN MASH2;Lo;0;L;;;;;N;;;;; 12228;CUNEIFORM SIGN ME;Lo;0;L;;;;;N;;;;; 12229;CUNEIFORM SIGN MES;Lo;0;L;;;;;N;;;;; 1222A;CUNEIFORM SIGN MI;Lo;0;L;;;;;N;;;;; -1222B;CUNEIFORM SIGN MIN;Lo;0;L;;;;;N;;;;; +1222B;CUNEIFORM SIGN MIN;Lo;0;L;;;;2;N;;;;; 1222C;CUNEIFORM SIGN MU;Lo;0;L;;;;;N;;;;; 1222D;CUNEIFORM SIGN MU OVER MU;Lo;0;L;;;;;N;;;;; 1222E;CUNEIFORM SIGN MUG;Lo;0;L;;;;;N;;;;; @@ -22811,9 +22975,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 12308;CUNEIFORM SIGN TUM;Lo;0;L;;;;;N;;;;; 12309;CUNEIFORM SIGN TUR;Lo;0;L;;;;;N;;;;; 1230A;CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA;Lo;0;L;;;;;N;;;;; -1230B;CUNEIFORM SIGN U;Lo;0;L;;;;;N;;;;; +1230B;CUNEIFORM SIGN U;Lo;0;L;;;;1;N;;;;; 1230C;CUNEIFORM SIGN U GUD;Lo;0;L;;;;;N;;;;; -1230D;CUNEIFORM SIGN U U U;Lo;0;L;;;;;N;;;;; +1230D;CUNEIFORM SIGN U U U;Lo;0;L;;;;3;N;;;;; 1230E;CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR;Lo;0;L;;;;;N;;;;; 1230F;CUNEIFORM SIGN U OVER U SUR OVER SUR;Lo;0;L;;;;;N;;;;; 12310;CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED;Lo;0;L;;;;;N;;;;; @@ -22953,7 +23117,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 12396;CUNEIFORM SIGN SAG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 12397;CUNEIFORM SIGN TI2;Lo;0;L;;;;;N;;;;; 12398;CUNEIFORM SIGN UM TIMES ME;Lo;0;L;;;;;N;;;;; -12399;CUNEIFORM SIGN U U;Lo;0;L;;;;;N;;;;; +12399;CUNEIFORM SIGN U U;Lo;0;L;;;;2;N;;;;; 12400;CUNEIFORM NUMERIC SIGN TWO ASH;Nl;0;L;;;;2;N;;;;; 12401;CUNEIFORM NUMERIC SIGN THREE ASH;Nl;0;L;;;;3;N;;;;; 12402;CUNEIFORM NUMERIC SIGN FOUR ASH;Nl;0;L;;;;4;N;;;;; @@ -30124,6 +30288,56 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 16E98;MEDEFAIDRIN FULL STOP;Po;0;L;;;;;N;;;;; 16E99;MEDEFAIDRIN SYMBOL AIVA;Po;0;L;;;;;N;;;;; 16E9A;MEDEFAIDRIN EXCLAMATION OH;Po;0;L;;;;;N;;;;; +16EA0;BERIA ERFE CAPITAL LETTER ARKAB;Lu;0;L;;;;;N;;;;16EBB; +16EA1;BERIA ERFE CAPITAL LETTER BASIGNA;Lu;0;L;;;;;N;;;;16EBC; +16EA2;BERIA ERFE CAPITAL LETTER DARBAI;Lu;0;L;;;;;N;;;;16EBD; +16EA3;BERIA ERFE CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;16EBE; +16EA4;BERIA ERFE CAPITAL LETTER FITKO;Lu;0;L;;;;;N;;;;16EBF; +16EA5;BERIA ERFE CAPITAL LETTER GOWAY;Lu;0;L;;;;;N;;;;16EC0; +16EA6;BERIA ERFE CAPITAL LETTER HIRDEABO;Lu;0;L;;;;;N;;;;16EC1; +16EA7;BERIA ERFE CAPITAL LETTER I;Lu;0;L;;;;;N;;;;16EC2; +16EA8;BERIA ERFE CAPITAL LETTER DJAI;Lu;0;L;;;;;N;;;;16EC3; +16EA9;BERIA ERFE CAPITAL LETTER KOBO;Lu;0;L;;;;;N;;;;16EC4; +16EAA;BERIA ERFE CAPITAL LETTER LAKKO;Lu;0;L;;;;;N;;;;16EC5; +16EAB;BERIA ERFE CAPITAL LETTER MERI;Lu;0;L;;;;;N;;;;16EC6; +16EAC;BERIA ERFE CAPITAL LETTER NINI;Lu;0;L;;;;;N;;;;16EC7; +16EAD;BERIA ERFE CAPITAL LETTER GNA;Lu;0;L;;;;;N;;;;16EC8; +16EAE;BERIA ERFE CAPITAL LETTER NGAY;Lu;0;L;;;;;N;;;;16EC9; +16EAF;BERIA ERFE CAPITAL LETTER OI;Lu;0;L;;;;;N;;;;16ECA; +16EB0;BERIA ERFE CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;16ECB; +16EB1;BERIA ERFE CAPITAL LETTER ERIGO;Lu;0;L;;;;;N;;;;16ECC; +16EB2;BERIA ERFE CAPITAL LETTER ERIGO TAMURA;Lu;0;L;;;;;N;;;;16ECD; +16EB3;BERIA ERFE CAPITAL LETTER SERI;Lu;0;L;;;;;N;;;;16ECE; +16EB4;BERIA ERFE CAPITAL LETTER SHEP;Lu;0;L;;;;;N;;;;16ECF; +16EB5;BERIA ERFE CAPITAL LETTER TATASOUE;Lu;0;L;;;;;N;;;;16ED0; +16EB6;BERIA ERFE CAPITAL LETTER UI;Lu;0;L;;;;;N;;;;16ED1; +16EB7;BERIA ERFE CAPITAL LETTER WASSE;Lu;0;L;;;;;N;;;;16ED2; +16EB8;BERIA ERFE CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;16ED3; +16EBB;BERIA ERFE SMALL LETTER ARKAB;Ll;0;L;;;;;N;;;16EA0;;16EA0 +16EBC;BERIA ERFE SMALL LETTER BASIGNA;Ll;0;L;;;;;N;;;16EA1;;16EA1 +16EBD;BERIA ERFE SMALL LETTER DARBAI;Ll;0;L;;;;;N;;;16EA2;;16EA2 +16EBE;BERIA ERFE SMALL LETTER EH;Ll;0;L;;;;;N;;;16EA3;;16EA3 +16EBF;BERIA ERFE SMALL LETTER FITKO;Ll;0;L;;;;;N;;;16EA4;;16EA4 +16EC0;BERIA ERFE SMALL LETTER GOWAY;Ll;0;L;;;;;N;;;16EA5;;16EA5 +16EC1;BERIA ERFE SMALL LETTER HIRDEABO;Ll;0;L;;;;;N;;;16EA6;;16EA6 +16EC2;BERIA ERFE SMALL LETTER I;Ll;0;L;;;;;N;;;16EA7;;16EA7 +16EC3;BERIA ERFE SMALL LETTER DJAI;Ll;0;L;;;;;N;;;16EA8;;16EA8 +16EC4;BERIA ERFE SMALL LETTER KOBO;Ll;0;L;;;;;N;;;16EA9;;16EA9 +16EC5;BERIA ERFE SMALL LETTER LAKKO;Ll;0;L;;;;;N;;;16EAA;;16EAA +16EC6;BERIA ERFE SMALL LETTER MERI;Ll;0;L;;;;;N;;;16EAB;;16EAB +16EC7;BERIA ERFE SMALL LETTER NINI;Ll;0;L;;;;;N;;;16EAC;;16EAC +16EC8;BERIA ERFE SMALL LETTER GNA;Ll;0;L;;;;;N;;;16EAD;;16EAD +16EC9;BERIA ERFE SMALL LETTER NGAY;Ll;0;L;;;;;N;;;16EAE;;16EAE +16ECA;BERIA ERFE SMALL LETTER OI;Ll;0;L;;;;;N;;;16EAF;;16EAF +16ECB;BERIA ERFE SMALL LETTER PI;Ll;0;L;;;;;N;;;16EB0;;16EB0 +16ECC;BERIA ERFE SMALL LETTER ERIGO;Ll;0;L;;;;;N;;;16EB1;;16EB1 +16ECD;BERIA ERFE SMALL LETTER ERIGO TAMURA;Ll;0;L;;;;;N;;;16EB2;;16EB2 +16ECE;BERIA ERFE SMALL LETTER SERI;Ll;0;L;;;;;N;;;16EB3;;16EB3 +16ECF;BERIA ERFE SMALL LETTER SHEP;Ll;0;L;;;;;N;;;16EB4;;16EB4 +16ED0;BERIA ERFE SMALL LETTER TATASOUE;Ll;0;L;;;;;N;;;16EB5;;16EB5 +16ED1;BERIA ERFE SMALL LETTER UI;Ll;0;L;;;;;N;;;16EB6;;16EB6 +16ED2;BERIA ERFE SMALL LETTER WASSE;Ll;0;L;;;;;N;;;16EB7;;16EB7 +16ED3;BERIA ERFE SMALL LETTER AY;Ll;0;L;;;;;N;;;16EB8;;16EB8 16F00;MIAO LETTER PA;Lo;0;L;;;;;N;;;;; 16F01;MIAO LETTER BA;Lo;0;L;;;;;N;;;;; 16F02;MIAO LETTER YI PA;Lo;0;L;;;;;N;;;;; @@ -30280,8 +30494,13 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 16FE4;KHITAN SMALL SCRIPT FILLER;Mn;0;NSM;;;;;N;;;;; 16FF0;VIETNAMESE ALTERNATE READING MARK CA;Mc;6;L;;;;;N;;;;; 16FF1;VIETNAMESE ALTERNATE READING MARK NHAY;Mc;6;L;;;;;N;;;;; +16FF2;CHINESE SMALL SIMPLIFIED ER;Lm;0;L;;;;;N;;;;; +16FF3;CHINESE SMALL TRADITIONAL ER;Lm;0;L;;;;;N;;;;; +16FF4;YANGQIN SIGN SLOW ONE BEAT;Nl;0;L;;;;1;N;;;;; +16FF5;YANGQIN SIGN SLOW THREE HALF BEATS;Nl;0;L;;;;3/2;N;;;;; +16FF6;YANGQIN SIGN SLOW TWO BEATS;Nl;0;L;;;;2;N;;;;; 17000;;Lo;0;L;;;;;N;;;;; -187F7;;Lo;0;L;;;;;N;;;;; +187FF;;Lo;0;L;;;;;N;;;;; 18800;TANGUT COMPONENT-001;Lo;0;L;;;;;N;;;;; 18801;TANGUT COMPONENT-002;Lo;0;L;;;;;N;;;;; 18802;TANGUT COMPONENT-003;Lo;0;L;;;;;N;;;;; @@ -31522,7 +31741,122 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 18CD5;KHITAN SMALL SCRIPT CHARACTER-18CD5;Lo;0;L;;;;;N;;;;; 18CFF;KHITAN SMALL SCRIPT CHARACTER-18CFF;Lo;0;L;;;;;N;;;;; 18D00;;Lo;0;L;;;;;N;;;;; -18D08;;Lo;0;L;;;;;N;;;;; +18D1E;;Lo;0;L;;;;;N;;;;; +18D80;TANGUT COMPONENT-769;Lo;0;L;;;;;N;;;;; +18D81;TANGUT COMPONENT-770;Lo;0;L;;;;;N;;;;; +18D82;TANGUT COMPONENT-771;Lo;0;L;;;;;N;;;;; +18D83;TANGUT COMPONENT-772;Lo;0;L;;;;;N;;;;; +18D84;TANGUT COMPONENT-773;Lo;0;L;;;;;N;;;;; +18D85;TANGUT COMPONENT-774;Lo;0;L;;;;;N;;;;; +18D86;TANGUT COMPONENT-775;Lo;0;L;;;;;N;;;;; +18D87;TANGUT COMPONENT-776;Lo;0;L;;;;;N;;;;; +18D88;TANGUT COMPONENT-777;Lo;0;L;;;;;N;;;;; +18D89;TANGUT COMPONENT-778;Lo;0;L;;;;;N;;;;; +18D8A;TANGUT COMPONENT-779;Lo;0;L;;;;;N;;;;; +18D8B;TANGUT COMPONENT-780;Lo;0;L;;;;;N;;;;; +18D8C;TANGUT COMPONENT-781;Lo;0;L;;;;;N;;;;; +18D8D;TANGUT COMPONENT-782;Lo;0;L;;;;;N;;;;; +18D8E;TANGUT COMPONENT-783;Lo;0;L;;;;;N;;;;; +18D8F;TANGUT COMPONENT-784;Lo;0;L;;;;;N;;;;; +18D90;TANGUT COMPONENT-785;Lo;0;L;;;;;N;;;;; +18D91;TANGUT COMPONENT-786;Lo;0;L;;;;;N;;;;; +18D92;TANGUT COMPONENT-787;Lo;0;L;;;;;N;;;;; +18D93;TANGUT COMPONENT-788;Lo;0;L;;;;;N;;;;; +18D94;TANGUT COMPONENT-789;Lo;0;L;;;;;N;;;;; +18D95;TANGUT COMPONENT-790;Lo;0;L;;;;;N;;;;; +18D96;TANGUT COMPONENT-791;Lo;0;L;;;;;N;;;;; +18D97;TANGUT COMPONENT-792;Lo;0;L;;;;;N;;;;; +18D98;TANGUT COMPONENT-793;Lo;0;L;;;;;N;;;;; +18D99;TANGUT COMPONENT-794;Lo;0;L;;;;;N;;;;; +18D9A;TANGUT COMPONENT-795;Lo;0;L;;;;;N;;;;; +18D9B;TANGUT COMPONENT-796;Lo;0;L;;;;;N;;;;; +18D9C;TANGUT COMPONENT-797;Lo;0;L;;;;;N;;;;; +18D9D;TANGUT COMPONENT-798;Lo;0;L;;;;;N;;;;; +18D9E;TANGUT COMPONENT-799;Lo;0;L;;;;;N;;;;; +18D9F;TANGUT COMPONENT-800;Lo;0;L;;;;;N;;;;; +18DA0;TANGUT COMPONENT-801;Lo;0;L;;;;;N;;;;; +18DA1;TANGUT COMPONENT-802;Lo;0;L;;;;;N;;;;; +18DA2;TANGUT COMPONENT-803;Lo;0;L;;;;;N;;;;; +18DA3;TANGUT COMPONENT-804;Lo;0;L;;;;;N;;;;; +18DA4;TANGUT COMPONENT-805;Lo;0;L;;;;;N;;;;; +18DA5;TANGUT COMPONENT-806;Lo;0;L;;;;;N;;;;; +18DA6;TANGUT COMPONENT-807;Lo;0;L;;;;;N;;;;; +18DA7;TANGUT COMPONENT-808;Lo;0;L;;;;;N;;;;; +18DA8;TANGUT COMPONENT-809;Lo;0;L;;;;;N;;;;; +18DA9;TANGUT COMPONENT-810;Lo;0;L;;;;;N;;;;; +18DAA;TANGUT COMPONENT-811;Lo;0;L;;;;;N;;;;; +18DAB;TANGUT COMPONENT-812;Lo;0;L;;;;;N;;;;; +18DAC;TANGUT COMPONENT-813;Lo;0;L;;;;;N;;;;; +18DAD;TANGUT COMPONENT-814;Lo;0;L;;;;;N;;;;; +18DAE;TANGUT COMPONENT-815;Lo;0;L;;;;;N;;;;; +18DAF;TANGUT COMPONENT-816;Lo;0;L;;;;;N;;;;; +18DB0;TANGUT COMPONENT-817;Lo;0;L;;;;;N;;;;; +18DB1;TANGUT COMPONENT-818;Lo;0;L;;;;;N;;;;; +18DB2;TANGUT COMPONENT-819;Lo;0;L;;;;;N;;;;; +18DB3;TANGUT COMPONENT-820;Lo;0;L;;;;;N;;;;; +18DB4;TANGUT COMPONENT-821;Lo;0;L;;;;;N;;;;; +18DB5;TANGUT COMPONENT-822;Lo;0;L;;;;;N;;;;; +18DB6;TANGUT COMPONENT-823;Lo;0;L;;;;;N;;;;; +18DB7;TANGUT COMPONENT-824;Lo;0;L;;;;;N;;;;; +18DB8;TANGUT COMPONENT-825;Lo;0;L;;;;;N;;;;; +18DB9;TANGUT COMPONENT-826;Lo;0;L;;;;;N;;;;; +18DBA;TANGUT COMPONENT-827;Lo;0;L;;;;;N;;;;; +18DBB;TANGUT COMPONENT-828;Lo;0;L;;;;;N;;;;; +18DBC;TANGUT COMPONENT-829;Lo;0;L;;;;;N;;;;; +18DBD;TANGUT COMPONENT-830;Lo;0;L;;;;;N;;;;; +18DBE;TANGUT COMPONENT-831;Lo;0;L;;;;;N;;;;; +18DBF;TANGUT COMPONENT-832;Lo;0;L;;;;;N;;;;; +18DC0;TANGUT COMPONENT-833;Lo;0;L;;;;;N;;;;; +18DC1;TANGUT COMPONENT-834;Lo;0;L;;;;;N;;;;; +18DC2;TANGUT COMPONENT-835;Lo;0;L;;;;;N;;;;; +18DC3;TANGUT COMPONENT-836;Lo;0;L;;;;;N;;;;; +18DC4;TANGUT COMPONENT-837;Lo;0;L;;;;;N;;;;; +18DC5;TANGUT COMPONENT-838;Lo;0;L;;;;;N;;;;; +18DC6;TANGUT COMPONENT-839;Lo;0;L;;;;;N;;;;; +18DC7;TANGUT COMPONENT-840;Lo;0;L;;;;;N;;;;; +18DC8;TANGUT COMPONENT-841;Lo;0;L;;;;;N;;;;; +18DC9;TANGUT COMPONENT-842;Lo;0;L;;;;;N;;;;; +18DCA;TANGUT COMPONENT-843;Lo;0;L;;;;;N;;;;; +18DCB;TANGUT COMPONENT-844;Lo;0;L;;;;;N;;;;; +18DCC;TANGUT COMPONENT-845;Lo;0;L;;;;;N;;;;; +18DCD;TANGUT COMPONENT-846;Lo;0;L;;;;;N;;;;; +18DCE;TANGUT COMPONENT-847;Lo;0;L;;;;;N;;;;; +18DCF;TANGUT COMPONENT-848;Lo;0;L;;;;;N;;;;; +18DD0;TANGUT COMPONENT-849;Lo;0;L;;;;;N;;;;; +18DD1;TANGUT COMPONENT-850;Lo;0;L;;;;;N;;;;; +18DD2;TANGUT COMPONENT-851;Lo;0;L;;;;;N;;;;; +18DD3;TANGUT COMPONENT-852;Lo;0;L;;;;;N;;;;; +18DD4;TANGUT COMPONENT-853;Lo;0;L;;;;;N;;;;; +18DD5;TANGUT COMPONENT-854;Lo;0;L;;;;;N;;;;; +18DD6;TANGUT COMPONENT-855;Lo;0;L;;;;;N;;;;; +18DD7;TANGUT COMPONENT-856;Lo;0;L;;;;;N;;;;; +18DD8;TANGUT COMPONENT-857;Lo;0;L;;;;;N;;;;; +18DD9;TANGUT COMPONENT-858;Lo;0;L;;;;;N;;;;; +18DDA;TANGUT COMPONENT-859;Lo;0;L;;;;;N;;;;; +18DDB;TANGUT COMPONENT-860;Lo;0;L;;;;;N;;;;; +18DDC;TANGUT COMPONENT-861;Lo;0;L;;;;;N;;;;; +18DDD;TANGUT COMPONENT-862;Lo;0;L;;;;;N;;;;; +18DDE;TANGUT COMPONENT-863;Lo;0;L;;;;;N;;;;; +18DDF;TANGUT COMPONENT-864;Lo;0;L;;;;;N;;;;; +18DE0;TANGUT COMPONENT-865;Lo;0;L;;;;;N;;;;; +18DE1;TANGUT COMPONENT-866;Lo;0;L;;;;;N;;;;; +18DE2;TANGUT COMPONENT-867;Lo;0;L;;;;;N;;;;; +18DE3;TANGUT COMPONENT-868;Lo;0;L;;;;;N;;;;; +18DE4;TANGUT COMPONENT-869;Lo;0;L;;;;;N;;;;; +18DE5;TANGUT COMPONENT-870;Lo;0;L;;;;;N;;;;; +18DE6;TANGUT COMPONENT-871;Lo;0;L;;;;;N;;;;; +18DE7;TANGUT COMPONENT-872;Lo;0;L;;;;;N;;;;; +18DE8;TANGUT COMPONENT-873;Lo;0;L;;;;;N;;;;; +18DE9;TANGUT COMPONENT-874;Lo;0;L;;;;;N;;;;; +18DEA;TANGUT COMPONENT-875;Lo;0;L;;;;;N;;;;; +18DEB;TANGUT COMPONENT-876;Lo;0;L;;;;;N;;;;; +18DEC;TANGUT COMPONENT-877;Lo;0;L;;;;;N;;;;; +18DED;TANGUT COMPONENT-878;Lo;0;L;;;;;N;;;;; +18DEE;TANGUT COMPONENT-879;Lo;0;L;;;;;N;;;;; +18DEF;TANGUT COMPONENT-880;Lo;0;L;;;;;N;;;;; +18DF0;TANGUT COMPONENT-881;Lo;0;L;;;;;N;;;;; +18DF1;TANGUT COMPONENT-882;Lo;0;L;;;;;N;;;;; +18DF2;TANGUT COMPONENT-883;Lo;0;L;;;;;N;;;;; 1AFF0;KATAKANA LETTER MINNAN TONE-2;Lm;0;L;;;;;N;;;;; 1AFF1;KATAKANA LETTER MINNAN TONE-3;Lm;0;L;;;;;N;;;;; 1AFF2;KATAKANA LETTER MINNAN TONE-4;Lm;0;L;;;;;N;;;;; @@ -32629,6 +32963,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1CCF7;OUTLINED DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; 1CCF8;OUTLINED DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; 1CCF9;OUTLINED DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; +1CCFA;SNAKE SYMBOL;So;0;ON;;;;;N;;;;; +1CCFB;FLYING SAUCER SYMBOL;So;0;ON;;;;;N;;;;; +1CCFC;NOSE SYMBOL;So;0;ON;;;;;N;;;;; 1CD00;BLOCK OCTANT-3;So;0;ON;;;;;N;;;;; 1CD01;BLOCK OCTANT-23;So;0;ON;;;;;N;;;;; 1CD02;BLOCK OCTANT-123;So;0;ON;;;;;N;;;;; @@ -33065,6 +33402,46 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1CEB1;KEYHOLE;So;0;ON;;;;;N;;;;; 1CEB2;OLD PERSONAL COMPUTER WITH MONITOR IN PORTRAIT ORIENTATION;So;0;ON;;;;;N;;;;; 1CEB3;BLACK RIGHT TRIANGLE CARET;So;0;ON;;;;;N;;;;; +1CEBA;FRAGILE SYMBOL;So;0;ON;;;;;N;;;;; +1CEBB;OFFICE BUILDING SYMBOL;So;0;ON;;;;;N;;;;; +1CEBC;TREE SYMBOL;So;0;ON;;;;;N;;;;; +1CEBD;APPLE SYMBOL;So;0;ON;;;;;N;;;;; +1CEBE;CHERRY SYMBOL;So;0;ON;;;;;N;;;;; +1CEBF;STRAWBERRY SYMBOL;So;0;ON;;;;;N;;;;; +1CEC0;HEBE;So;0;ON;;;;;N;;;;; +1CEC1;IRIS;So;0;ON;;;;;N;;;;; +1CEC2;FLORA;So;0;ON;;;;;N;;;;; +1CEC3;METIS;So;0;ON;;;;;N;;;;; +1CEC4;PARTHENOPE;So;0;ON;;;;;N;;;;; +1CEC5;VICTORIA;So;0;ON;;;;;N;;;;; +1CEC6;EGERIA;So;0;ON;;;;;N;;;;; +1CEC7;IRENE;So;0;ON;;;;;N;;;;; +1CEC8;EUNOMIA;So;0;ON;;;;;N;;;;; +1CEC9;PSYCHE;So;0;ON;;;;;N;;;;; +1CECA;THETIS;So;0;ON;;;;;N;;;;; +1CECB;MELPOMENE;So;0;ON;;;;;N;;;;; +1CECC;FORTUNA;So;0;ON;;;;;N;;;;; +1CECD;ASTRONOMICAL SYMBOL FOR ASTEROID PROSERPINA;So;0;ON;;;;;N;;;;; +1CECE;BELLONA;So;0;ON;;;;;N;;;;; +1CECF;AMPHITRITE;So;0;ON;;;;;N;;;;; +1CED0;LEUKOTHEA;So;0;ON;;;;;N;;;;; +1CEE0;GEOMANTIC FIGURE POPULUS;So;0;ON;;;;;N;;;;; +1CEE1;GEOMANTIC FIGURE TRISTITIA;So;0;ON;;;;;N;;;;; +1CEE2;GEOMANTIC FIGURE ALBUS;So;0;ON;;;;;N;;;;; +1CEE3;GEOMANTIC FIGURE FORTUNA MAJOR;So;0;ON;;;;;N;;;;; +1CEE4;GEOMANTIC FIGURE RUBEUS;So;0;ON;;;;;N;;;;; +1CEE5;GEOMANTIC FIGURE ACQUISITIO;So;0;ON;;;;;N;;;;; +1CEE6;GEOMANTIC FIGURE CONJUNCTIO;So;0;ON;;;;;N;;;;; +1CEE7;GEOMANTIC FIGURE CAPUT DRACONIS;So;0;ON;;;;;N;;;;; +1CEE8;GEOMANTIC FIGURE LAETITIA;So;0;ON;;;;;N;;;;; +1CEE9;GEOMANTIC FIGURE CARCER;So;0;ON;;;;;N;;;;; +1CEEA;GEOMANTIC FIGURE AMISSIO;So;0;ON;;;;;N;;;;; +1CEEB;GEOMANTIC FIGURE PUELLA;So;0;ON;;;;;N;;;;; +1CEEC;GEOMANTIC FIGURE FORTUNA MINOR;So;0;ON;;;;;N;;;;; +1CEED;GEOMANTIC FIGURE PUER;So;0;ON;;;;;N;;;;; +1CEEE;GEOMANTIC FIGURE CAUDA DRACONIS;So;0;ON;;;;;N;;;;; +1CEEF;GEOMANTIC FIGURE VIA;So;0;ON;;;;;N;;;;; +1CEF0;MEDIUM SMALL WHITE CIRCLE WITH HORIZONTAL BAR;Sm;0;ON;;;;;N;;;;; 1CF00;ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF01;ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF02;ZNAMENNY COMBINING MARK TSATA ON LEFT;Mn;0;NSM;;;;;N;;;;; @@ -36004,6 +36381,61 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1E5F9;OL ONAL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1E5FA;OL ONAL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1E5FF;OL ONAL ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; +1E6C0;TAI YO LETTER LOW KO;Lo;0;L;;;;;N;;;;; +1E6C1;TAI YO LETTER HIGH KO;Lo;0;L;;;;;N;;;;; +1E6C2;TAI YO LETTER LOW KHO;Lo;0;L;;;;;N;;;;; +1E6C3;TAI YO LETTER HIGH KHO;Lo;0;L;;;;;N;;;;; +1E6C4;TAI YO LETTER GO;Lo;0;L;;;;;N;;;;; +1E6C5;TAI YO LETTER NGO;Lo;0;L;;;;;N;;;;; +1E6C6;TAI YO LETTER CO;Lo;0;L;;;;;N;;;;; +1E6C7;TAI YO LETTER LOW XO;Lo;0;L;;;;;N;;;;; +1E6C8;TAI YO LETTER HIGH XO;Lo;0;L;;;;;N;;;;; +1E6C9;TAI YO LETTER LOW NYO;Lo;0;L;;;;;N;;;;; +1E6CA;TAI YO LETTER HIGH NYO;Lo;0;L;;;;;N;;;;; +1E6CB;TAI YO LETTER DO;Lo;0;L;;;;;N;;;;; +1E6CC;TAI YO LETTER LOW TO;Lo;0;L;;;;;N;;;;; +1E6CD;TAI YO LETTER HIGH TO;Lo;0;L;;;;;N;;;;; +1E6CE;TAI YO LETTER THO;Lo;0;L;;;;;N;;;;; +1E6CF;TAI YO LETTER NO;Lo;0;L;;;;;N;;;;; +1E6D0;TAI YO LETTER BO;Lo;0;L;;;;;N;;;;; +1E6D1;TAI YO LETTER LOW PO;Lo;0;L;;;;;N;;;;; +1E6D2;TAI YO LETTER HIGH PO;Lo;0;L;;;;;N;;;;; +1E6D3;TAI YO LETTER PHO;Lo;0;L;;;;;N;;;;; +1E6D4;TAI YO LETTER LOW FO;Lo;0;L;;;;;N;;;;; +1E6D5;TAI YO LETTER HIGH FO;Lo;0;L;;;;;N;;;;; +1E6D6;TAI YO LETTER MO;Lo;0;L;;;;;N;;;;; +1E6D7;TAI YO LETTER YO;Lo;0;L;;;;;N;;;;; +1E6D8;TAI YO LETTER LO;Lo;0;L;;;;;N;;;;; +1E6D9;TAI YO LETTER VO;Lo;0;L;;;;;N;;;;; +1E6DA;TAI YO LETTER LOW HO;Lo;0;L;;;;;N;;;;; +1E6DB;TAI YO LETTER HIGH HO;Lo;0;L;;;;;N;;;;; +1E6DC;TAI YO LETTER QO;Lo;0;L;;;;;N;;;;; +1E6DD;TAI YO LETTER LOW KVO;Lo;0;L;;;;;N;;;;; +1E6DE;TAI YO LETTER HIGH KVO;Lo;0;L;;;;;N;;;;; +1E6E0;TAI YO LETTER AA;Lo;0;L;;;;;N;;;;; +1E6E1;TAI YO LETTER I;Lo;0;L;;;;;N;;;;; +1E6E2;TAI YO LETTER UE;Lo;0;L;;;;;N;;;;; +1E6E3;TAI YO SIGN UE;Mn;230;NSM;;;;;N;;;;; +1E6E4;TAI YO LETTER U;Lo;0;L;;;;;N;;;;; +1E6E5;TAI YO LETTER AE;Lo;0;L;;;;;N;;;;; +1E6E6;TAI YO SIGN AU;Mn;230;NSM;;;;;N;;;;; +1E6E7;TAI YO LETTER O;Lo;0;L;;;;;N;;;;; +1E6E8;TAI YO LETTER E;Lo;0;L;;;;;N;;;;; +1E6E9;TAI YO LETTER IA;Lo;0;L;;;;;N;;;;; +1E6EA;TAI YO LETTER UEA;Lo;0;L;;;;;N;;;;; +1E6EB;TAI YO LETTER UA;Lo;0;L;;;;;N;;;;; +1E6EC;TAI YO LETTER OO;Lo;0;L;;;;;N;;;;; +1E6ED;TAI YO LETTER AUE;Lo;0;L;;;;;N;;;;; +1E6EE;TAI YO SIGN AY;Mn;230;NSM;;;;;N;;;;; +1E6EF;TAI YO SIGN ANG;Mn;230;NSM;;;;;N;;;;; +1E6F0;TAI YO LETTER AN;Lo;0;L;;;;;N;;;;; +1E6F1;TAI YO LETTER AM;Lo;0;L;;;;;N;;;;; +1E6F2;TAI YO LETTER AK;Lo;0;L;;;;;N;;;;; +1E6F3;TAI YO LETTER AT;Lo;0;L;;;;;N;;;;; +1E6F4;TAI YO LETTER AP;Lo;0;L;;;;;N;;;;; +1E6F5;TAI YO SIGN OM;Mn;230;NSM;;;;;N;;;;; +1E6FE;TAI YO SYMBOL MUEANG;Lo;0;L;;;;;N;;;;; +1E6FF;TAI YO XAM LAI;Lm;0;L;;;;;N;;;;; 1E7E0;ETHIOPIC SYLLABLE HHYA;Lo;0;L;;;;;N;;;;; 1E7E1;ETHIOPIC SYLLABLE HHYU;Lo;0;L;;;;;N;;;;; 1E7E2;ETHIOPIC SYLLABLE HHYI;Lo;0;L;;;;;N;;;;; @@ -38079,6 +38511,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F6D5;HINDU TEMPLE;So;0;ON;;;;;N;;;;; 1F6D6;HUT;So;0;ON;;;;;N;;;;; 1F6D7;ELEVATOR;So;0;ON;;;;;N;;;;; +1F6D8;LANDSLIDE;So;0;ON;;;;;N;;;;; 1F6DC;WIRELESS;So;0;ON;;;;;N;;;;; 1F6DD;PLAYGROUND SLIDE;So;0;ON;;;;;N;;;;; 1F6DE;WHEEL;So;0;ON;;;;;N;;;;; @@ -38228,6 +38661,10 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F774;LOT OF FORTUNE;So;0;ON;;;;;N;;;;; 1F775;OCCULTATION;So;0;ON;;;;;N;;;;; 1F776;LUNAR ECLIPSE;So;0;ON;;;;;N;;;;; +1F777;VESTA FORM TWO;So;0;ON;;;;;N;;;;; +1F778;ASTRAEA FORM TWO;So;0;ON;;;;;N;;;;; +1F779;HYGIEA FORM TWO;So;0;ON;;;;;N;;;;; +1F77A;PARTHENOPE FORM TWO;So;0;ON;;;;;N;;;;; 1F77B;HAUMEA;So;0;ON;;;;;N;;;;; 1F77C;MAKEMAKE;So;0;ON;;;;;N;;;;; 1F77D;GONGGONG;So;0;ON;;;;;N;;;;; @@ -38498,6 +38935,15 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F8BB;SOUTH WEST ARROW FROM BAR;So;0;ON;;;;;N;;;;; 1F8C0;LEFTWARDS ARROW FROM DOWNWARDS ARROW;So;0;ON;;;;;N;;;;; 1F8C1;RIGHTWARDS ARROW FROM DOWNWARDS ARROW;So;0;ON;;;;;N;;;;; +1F8D0;LONG RIGHTWARDS ARROW OVER LONG LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +1F8D1;LONG RIGHTWARDS HARPOON OVER LONG LEFTWARDS HARPOON;Sm;0;ON;;;;;N;;;;; +1F8D2;LONG RIGHTWARDS HARPOON ABOVE SHORT LEFTWARDS HARPOON;Sm;0;ON;;;;;N;;;;; +1F8D3;SHORT RIGHTWARDS HARPOON ABOVE LONG LEFTWARDS HARPOON;Sm;0;ON;;;;;N;;;;; +1F8D4;LONG LEFTWARDS HARPOON ABOVE SHORT RIGHTWARDS HARPOON;Sm;0;ON;;;;;N;;;;; +1F8D5;SHORT LEFTWARDS HARPOON ABOVE LONG RIGHTWARDS HARPOON;Sm;0;ON;;;;;N;;;;; +1F8D6;LONG RIGHTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;; +1F8D7;LONG RIGHTWARDS ARROW WITH DOUBLE SLASH;Sm;0;ON;;;;;N;;;;; +1F8D8;LONG LEFT RIGHT ARROW WITH DEPENDENT LOBE;Sm;0;ON;;;;;N;;;;; 1F900;CIRCLED CROSS FORMEE WITH FOUR DOTS;So;0;ON;;;;;N;;;;; 1F901;CIRCLED CROSS FORMEE WITH TWO DOTS;So;0;ON;;;;;N;;;;; 1F902;CIRCLED CROSS FORMEE;So;0;ON;;;;;N;;;;; @@ -38838,6 +39284,10 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FA51;BLACK CHESS KNIGHT-QUEEN;So;0;ON;;;;;N;;;;; 1FA52;BLACK CHESS KNIGHT-ROOK;So;0;ON;;;;;N;;;;; 1FA53;BLACK CHESS KNIGHT-BISHOP;So;0;ON;;;;;N;;;;; +1FA54;WHITE CHESS FERZ;So;0;ON;;;;;N;;;;; +1FA55;WHITE CHESS ALFIL;So;0;ON;;;;;N;;;;; +1FA56;BLACK CHESS FERZ;So;0;ON;;;;;N;;;;; +1FA57;BLACK CHESS ALFIL;So;0;ON;;;;;N;;;;; 1FA60;XIANGQI RED GENERAL;So;0;ON;;;;;N;;;;; 1FA61;XIANGQI RED MANDARIN;So;0;ON;;;;;N;;;;; 1FA62;XIANGQI RED ELEPHANT;So;0;ON;;;;;N;;;;; @@ -38875,6 +39325,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FA87;MARACAS;So;0;ON;;;;;N;;;;; 1FA88;FLUTE;So;0;ON;;;;;N;;;;; 1FA89;HARP;So;0;ON;;;;;N;;;;; +1FA8A;TROMBONE;So;0;ON;;;;;N;;;;; +1FA8E;TREASURE CHEST;So;0;ON;;;;;N;;;;; 1FA8F;SHOVEL;So;0;ON;;;;;N;;;;; 1FA90;RINGED PLANET;So;0;ON;;;;;N;;;;; 1FA91;CHAIR;So;0;ON;;;;;N;;;;; @@ -38931,6 +39383,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FAC4;PREGNANT PERSON;So;0;ON;;;;;N;;;;; 1FAC5;PERSON WITH CROWN;So;0;ON;;;;;N;;;;; 1FAC6;FINGERPRINT;So;0;ON;;;;;N;;;;; +1FAC8;HAIRY CREATURE;So;0;ON;;;;;N;;;;; +1FACD;ORCA;So;0;ON;;;;;N;;;;; 1FACE;MOOSE;So;0;ON;;;;;N;;;;; 1FACF;DONKEY;So;0;ON;;;;;N;;;;; 1FAD0;BLUEBERRIES;So;0;ON;;;;;N;;;;; @@ -38957,6 +39411,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FAE7;BUBBLES;So;0;ON;;;;;N;;;;; 1FAE8;SHAKING FACE;So;0;ON;;;;;N;;;;; 1FAE9;FACE WITH BAGS UNDER EYES;So;0;ON;;;;;N;;;;; +1FAEA;DISTORTED FACE;So;0;ON;;;;;N;;;;; +1FAEF;FIGHT CLOUD;So;0;ON;;;;;N;;;;; 1FAF0;HAND WITH INDEX FINGER AND THUMB CROSSED;So;0;ON;;;;;N;;;;; 1FAF1;RIGHTWARDS HAND;So;0;ON;;;;;N;;;;; 1FAF2;LEFTWARDS HAND;So;0;ON;;;;;N;;;;; @@ -39215,14 +39671,15 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FBF7;SEGMENTED DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; 1FBF8;SEGMENTED DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; 1FBF9;SEGMENTED DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; +1FBFA;ALARM BELL SYMBOL;So;0;ON;;;;;N;;;;; 20000;;Lo;0;L;;;;;N;;;;; 2A6DF;;Lo;0;L;;;;;N;;;;; 2A700;;Lo;0;L;;;;;N;;;;; -2B739;;Lo;0;L;;;;;N;;;;; +2B73F;;Lo;0;L;;;;;N;;;;; 2B740;;Lo;0;L;;;;;N;;;;; 2B81D;;Lo;0;L;;;;;N;;;;; 2B820;;Lo;0;L;;;;;N;;;;; -2CEA1;;Lo;0;L;;;;;N;;;;; +2CEAD;;Lo;0;L;;;;;N;;;;; 2CEB0;;Lo;0;L;;;;;N;;;;; 2EBE0;;Lo;0;L;;;;;N;;;;; 2EBF0;;Lo;0;L;;;;;N;;;;; @@ -39773,6 +40230,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 3134A;;Lo;0;L;;;;;N;;;;; 31350;;Lo;0;L;;;;;N;;;;; 323AF;;Lo;0;L;;;;;N;;;;; +323B0;;Lo;0;L;;;;;N;;;;; +33479;;Lo;0;L;;;;;N;;;;; E0001;LANGUAGE TAG;Cf;0;BN;;;;;N;;;;; E0020;TAG SPACE;Cf;0;BN;;;;;N;;;;; E0021;TAG EXCLAMATION MARK;Cf;0;BN;;;;;N;;;;; diff --git a/contrib/unicode/emoji-data.txt b/contrib/unicode/emoji-data.txt index ff99028248b5..450252c4df3f 100644 --- a/contrib/unicode/emoji-data.txt +++ b/contrib/unicode/emoji-data.txt @@ -1,11 +1,11 @@ # emoji-data.txt -# Date: 2024-05-01, 21:25:24 GMT -# © 2024 Unicode®, Inc. +# Date: 2025-07-25, 17:54:31 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # # Emoji Data for UTS #51 -# Used with Emoji Version 16.0 and subsequent minor revisions (if any) +# Version: 17.0 # # For documentation and usage, see https://www.unicode.org/reports/tr51 # @@ -340,6 +340,7 @@ 1F6D1..1F6D2 ; Emoji # E3.0 [2] (🛑..🛒) stop sign..shopping cart 1F6D5 ; Emoji # E12.0 [1] (🛕) hindu temple 1F6D6..1F6D7 ; Emoji # E13.0 [2] (🛖..🛗) hut..elevator +1F6D8 ; Emoji # E17.0 [1] (🛘) landslide 1F6DC ; Emoji # E15.0 [1] (🛜) wireless 1F6DD..1F6DF ; Emoji # E14.0 [3] (🛝..🛟) playground slide..ring buoy 1F6E0..1F6E5 ; Emoji # E0.7 [6] (🛠️..🛥️) hammer and wrench..motor boat @@ -408,6 +409,8 @@ 1FA83..1FA86 ; Emoji # E13.0 [4] (🪃..🪆) boomerang..nesting dolls 1FA87..1FA88 ; Emoji # E15.0 [2] (🪇..🪈) maracas..flute 1FA89 ; Emoji # E16.0 [1] (🪉) harp +1FA8A ; Emoji # E17.0 [1] (🪊) trombone +1FA8E ; Emoji # E17.0 [1] (🪎) treasure chest 1FA8F ; Emoji # E16.0 [1] (🪏) shovel 1FA90..1FA95 ; Emoji # E12.0 [6] (🪐..🪕) ringed planet..banjo 1FA96..1FAA8 ; Emoji # E13.0 [19] (🪖..🪨) military helmet..rock @@ -421,6 +424,8 @@ 1FAC0..1FAC2 ; Emoji # E13.0 [3] (🫀..🫂) anatomical heart..people hugging 1FAC3..1FAC5 ; Emoji # E14.0 [3] (🫃..🫅) pregnant man..person with crown 1FAC6 ; Emoji # E16.0 [1] (🫆) fingerprint +1FAC8 ; Emoji # E17.0 [1] (🫈) hairy creature +1FACD ; Emoji # E17.0 [1] (🫍) orca 1FACE..1FACF ; Emoji # E15.0 [2] (🫎..🫏) moose..donkey 1FAD0..1FAD6 ; Emoji # E13.0 [7] (🫐..🫖) blueberries..teapot 1FAD7..1FAD9 ; Emoji # E14.0 [3] (🫗..🫙) pouring liquid..jar @@ -430,10 +435,12 @@ 1FAE0..1FAE7 ; Emoji # E14.0 [8] (🫠..🫧) melting face..bubbles 1FAE8 ; Emoji # E15.0 [1] (🫨) shaking face 1FAE9 ; Emoji # E16.0 [1] (🫩) face with bags under eyes +1FAEA ; Emoji # E17.0 [1] (🫪) distorted face +1FAEF ; Emoji # E17.0 [1] (🫯) fight cloud 1FAF0..1FAF6 ; Emoji # E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands 1FAF7..1FAF8 ; Emoji # E15.0 [2] (🫷..🫸) leftwards pushing hand..rightwards pushing hand -# Total elements: 1431 +# Total elements: 1438 # ================================================ @@ -640,6 +647,7 @@ 1F6D1..1F6D2 ; Emoji_Presentation # E3.0 [2] (🛑..🛒) stop sign..shopping cart 1F6D5 ; Emoji_Presentation # E12.0 [1] (🛕) hindu temple 1F6D6..1F6D7 ; Emoji_Presentation # E13.0 [2] (🛖..🛗) hut..elevator +1F6D8 ; Emoji_Presentation # E17.0 [1] (🛘) landslide 1F6DC ; Emoji_Presentation # E15.0 [1] (🛜) wireless 1F6DD..1F6DF ; Emoji_Presentation # E14.0 [3] (🛝..🛟) playground slide..ring buoy 1F6EB..1F6EC ; Emoji_Presentation # E1.0 [2] (🛫..🛬) airplane departure..airplane arrival @@ -704,6 +712,8 @@ 1FA83..1FA86 ; Emoji_Presentation # E13.0 [4] (🪃..🪆) boomerang..nesting dolls 1FA87..1FA88 ; Emoji_Presentation # E15.0 [2] (🪇..🪈) maracas..flute 1FA89 ; Emoji_Presentation # E16.0 [1] (🪉) harp +1FA8A ; Emoji_Presentation # E17.0 [1] (🪊) trombone +1FA8E ; Emoji_Presentation # E17.0 [1] (🪎) treasure chest 1FA8F ; Emoji_Presentation # E16.0 [1] (🪏) shovel 1FA90..1FA95 ; Emoji_Presentation # E12.0 [6] (🪐..🪕) ringed planet..banjo 1FA96..1FAA8 ; Emoji_Presentation # E13.0 [19] (🪖..🪨) military helmet..rock @@ -717,6 +727,8 @@ 1FAC0..1FAC2 ; Emoji_Presentation # E13.0 [3] (🫀..🫂) anatomical heart..people hugging 1FAC3..1FAC5 ; Emoji_Presentation # E14.0 [3] (🫃..🫅) pregnant man..person with crown 1FAC6 ; Emoji_Presentation # E16.0 [1] (🫆) fingerprint +1FAC8 ; Emoji_Presentation # E17.0 [1] (🫈) hairy creature +1FACD ; Emoji_Presentation # E17.0 [1] (🫍) orca 1FACE..1FACF ; Emoji_Presentation # E15.0 [2] (🫎..🫏) moose..donkey 1FAD0..1FAD6 ; Emoji_Presentation # E13.0 [7] (🫐..🫖) blueberries..teapot 1FAD7..1FAD9 ; Emoji_Presentation # E14.0 [3] (🫗..🫙) pouring liquid..jar @@ -726,10 +738,12 @@ 1FAE0..1FAE7 ; Emoji_Presentation # E14.0 [8] (🫠..🫧) melting face..bubbles 1FAE8 ; Emoji_Presentation # E15.0 [1] (🫨) shaking face 1FAE9 ; Emoji_Presentation # E16.0 [1] (🫩) face with bags under eyes +1FAEA ; Emoji_Presentation # E17.0 [1] (🫪) distorted face +1FAEF ; Emoji_Presentation # E17.0 [1] (🫯) fight cloud 1FAF0..1FAF6 ; Emoji_Presentation # E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands 1FAF7..1FAF8 ; Emoji_Presentation # E15.0 [2] (🫷..🫸) leftwards pushing hand..rightwards pushing hand -# Total elements: 1212 +# Total elements: 1219 # ================================================ @@ -827,7 +841,6 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 21A9..21AA ; Extended_Pictographic# E0.6 [2] (↩️..↪️) right arrow curving left..left arrow curving right 231A..231B ; Extended_Pictographic# E0.6 [2] (⌚..⌛) watch..hourglass done 2328 ; Extended_Pictographic# E1.0 [1] (⌨️) keyboard -2388 ; Extended_Pictographic# E0.0 [1] (⎈) HELM SYMBOL 23CF ; Extended_Pictographic# E1.0 [1] (⏏️) eject button 23E9..23EC ; Extended_Pictographic# E0.6 [4] (⏩..⏬) fast-forward button..fast down button 23ED..23EE ; Extended_Pictographic# E0.7 [2] (⏭️..⏮️) next track button..last track button @@ -844,106 +857,63 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 2600..2601 ; Extended_Pictographic# E0.6 [2] (☀️..☁️) sun..cloud 2602..2603 ; Extended_Pictographic# E0.7 [2] (☂️..☃️) umbrella..snowman 2604 ; Extended_Pictographic# E1.0 [1] (☄️) comet -2605 ; Extended_Pictographic# E0.0 [1] (★) BLACK STAR -2607..260D ; Extended_Pictographic# E0.0 [7] (☇..☍) LIGHTNING..OPPOSITION 260E ; Extended_Pictographic# E0.6 [1] (☎️) telephone -260F..2610 ; Extended_Pictographic# E0.0 [2] (☏..☐) WHITE TELEPHONE..BALLOT BOX 2611 ; Extended_Pictographic# E0.6 [1] (☑️) check box with check -2612 ; Extended_Pictographic# E0.0 [1] (☒) BALLOT BOX WITH X 2614..2615 ; Extended_Pictographic# E0.6 [2] (☔..☕) umbrella with rain drops..hot beverage -2616..2617 ; Extended_Pictographic# E0.0 [2] (☖..☗) WHITE SHOGI PIECE..BLACK SHOGI PIECE 2618 ; Extended_Pictographic# E1.0 [1] (☘️) shamrock -2619..261C ; Extended_Pictographic# E0.0 [4] (☙..☜) REVERSED ROTATED FLORAL HEART BULLET..WHITE LEFT POINTING INDEX 261D ; Extended_Pictographic# E0.6 [1] (☝️) index pointing up -261E..261F ; Extended_Pictographic# E0.0 [2] (☞..☟) WHITE RIGHT POINTING INDEX..WHITE DOWN POINTING INDEX 2620 ; Extended_Pictographic# E1.0 [1] (☠️) skull and crossbones -2621 ; Extended_Pictographic# E0.0 [1] (☡) CAUTION SIGN 2622..2623 ; Extended_Pictographic# E1.0 [2] (☢️..☣️) radioactive..biohazard -2624..2625 ; Extended_Pictographic# E0.0 [2] (☤..☥) CADUCEUS..ANKH 2626 ; Extended_Pictographic# E1.0 [1] (☦️) orthodox cross -2627..2629 ; Extended_Pictographic# E0.0 [3] (☧..☩) CHI RHO..CROSS OF JERUSALEM 262A ; Extended_Pictographic# E0.7 [1] (☪️) star and crescent -262B..262D ; Extended_Pictographic# E0.0 [3] (☫..☭) FARSI SYMBOL..HAMMER AND SICKLE 262E ; Extended_Pictographic# E1.0 [1] (☮️) peace symbol 262F ; Extended_Pictographic# E0.7 [1] (☯️) yin yang -2630..2637 ; Extended_Pictographic# E0.0 [8] (☰..☷) TRIGRAM FOR HEAVEN..TRIGRAM FOR EARTH 2638..2639 ; Extended_Pictographic# E0.7 [2] (☸️..☹️) wheel of dharma..frowning face 263A ; Extended_Pictographic# E0.6 [1] (☺️) smiling face -263B..263F ; Extended_Pictographic# E0.0 [5] (☻..☿) BLACK SMILING FACE..MERCURY 2640 ; Extended_Pictographic# E4.0 [1] (♀️) female sign -2641 ; Extended_Pictographic# E0.0 [1] (♁) EARTH 2642 ; Extended_Pictographic# E4.0 [1] (♂️) male sign -2643..2647 ; Extended_Pictographic# E0.0 [5] (♃..♇) JUPITER..PLUTO 2648..2653 ; Extended_Pictographic# E0.6 [12] (♈..♓) Aries..Pisces -2654..265E ; Extended_Pictographic# E0.0 [11] (♔..♞) WHITE CHESS KING..BLACK CHESS KNIGHT 265F ; Extended_Pictographic# E11.0 [1] (♟️) chess pawn 2660 ; Extended_Pictographic# E0.6 [1] (♠️) spade suit -2661..2662 ; Extended_Pictographic# E0.0 [2] (♡..♢) WHITE HEART SUIT..WHITE DIAMOND SUIT 2663 ; Extended_Pictographic# E0.6 [1] (♣️) club suit -2664 ; Extended_Pictographic# E0.0 [1] (♤) WHITE SPADE SUIT 2665..2666 ; Extended_Pictographic# E0.6 [2] (♥️..♦️) heart suit..diamond suit -2667 ; Extended_Pictographic# E0.0 [1] (♧) WHITE CLUB SUIT 2668 ; Extended_Pictographic# E0.6 [1] (♨️) hot springs -2669..267A ; Extended_Pictographic# E0.0 [18] (♩..♺) QUARTER NOTE..RECYCLING SYMBOL FOR GENERIC MATERIALS 267B ; Extended_Pictographic# E0.6 [1] (♻️) recycling symbol -267C..267D ; Extended_Pictographic# E0.0 [2] (♼..♽) RECYCLED PAPER SYMBOL..PARTIALLY-RECYCLED PAPER SYMBOL 267E ; Extended_Pictographic# E11.0 [1] (♾️) infinity 267F ; Extended_Pictographic# E0.6 [1] (♿) wheelchair symbol -2680..2685 ; Extended_Pictographic# E0.0 [6] (⚀..⚅) DIE FACE-1..DIE FACE-6 -2690..2691 ; Extended_Pictographic# E0.0 [2] (⚐..⚑) WHITE FLAG..BLACK FLAG 2692 ; Extended_Pictographic# E1.0 [1] (⚒️) hammer and pick 2693 ; Extended_Pictographic# E0.6 [1] (⚓) anchor 2694 ; Extended_Pictographic# E1.0 [1] (⚔️) crossed swords 2695 ; Extended_Pictographic# E4.0 [1] (⚕️) medical symbol 2696..2697 ; Extended_Pictographic# E1.0 [2] (⚖️..⚗️) balance scale..alembic -2698 ; Extended_Pictographic# E0.0 [1] (⚘) FLOWER 2699 ; Extended_Pictographic# E1.0 [1] (⚙️) gear -269A ; Extended_Pictographic# E0.0 [1] (⚚) STAFF OF HERMES 269B..269C ; Extended_Pictographic# E1.0 [2] (⚛️..⚜️) atom symbol..fleur-de-lis -269D..269F ; Extended_Pictographic# E0.0 [3] (⚝..⚟) OUTLINED WHITE STAR..THREE LINES CONVERGING LEFT 26A0..26A1 ; Extended_Pictographic# E0.6 [2] (⚠️..⚡) warning..high voltage -26A2..26A6 ; Extended_Pictographic# E0.0 [5] (⚢..⚦) DOUBLED FEMALE SIGN..MALE WITH STROKE SIGN 26A7 ; Extended_Pictographic# E13.0 [1] (⚧️) transgender symbol -26A8..26A9 ; Extended_Pictographic# E0.0 [2] (⚨..⚩) VERTICAL MALE WITH STROKE SIGN..HORIZONTAL MALE WITH STROKE SIGN 26AA..26AB ; Extended_Pictographic# E0.6 [2] (⚪..⚫) white circle..black circle -26AC..26AF ; Extended_Pictographic# E0.0 [4] (⚬..⚯) MEDIUM SMALL WHITE CIRCLE..UNMARRIED PARTNERSHIP SYMBOL 26B0..26B1 ; Extended_Pictographic# E1.0 [2] (⚰️..⚱️) coffin..funeral urn -26B2..26BC ; Extended_Pictographic# E0.0 [11] (⚲..⚼) NEUTER..SESQUIQUADRATE 26BD..26BE ; Extended_Pictographic# E0.6 [2] (⚽..⚾) soccer ball..baseball -26BF..26C3 ; Extended_Pictographic# E0.0 [5] (⚿..⛃) SQUARED KEY..BLACK DRAUGHTS KING 26C4..26C5 ; Extended_Pictographic# E0.6 [2] (⛄..⛅) snowman without snow..sun behind cloud -26C6..26C7 ; Extended_Pictographic# E0.0 [2] (⛆..⛇) RAIN..BLACK SNOWMAN 26C8 ; Extended_Pictographic# E0.7 [1] (⛈️) cloud with lightning and rain -26C9..26CD ; Extended_Pictographic# E0.0 [5] (⛉..⛍) TURNED WHITE SHOGI PIECE..DISABLED CAR 26CE ; Extended_Pictographic# E0.6 [1] (⛎) Ophiuchus 26CF ; Extended_Pictographic# E0.7 [1] (⛏️) pick -26D0 ; Extended_Pictographic# E0.0 [1] (⛐) CAR SLIDING 26D1 ; Extended_Pictographic# E0.7 [1] (⛑️) rescue worker’s helmet -26D2 ; Extended_Pictographic# E0.0 [1] (⛒) CIRCLED CROSSING LANES 26D3 ; Extended_Pictographic# E0.7 [1] (⛓️) chains 26D4 ; Extended_Pictographic# E0.6 [1] (⛔) no entry -26D5..26E8 ; Extended_Pictographic# E0.0 [20] (⛕..⛨) ALTERNATE ONE-WAY LEFT WAY TRAFFIC..BLACK CROSS ON SHIELD 26E9 ; Extended_Pictographic# E0.7 [1] (⛩️) shinto shrine 26EA ; Extended_Pictographic# E0.6 [1] (⛪) church -26EB..26EF ; Extended_Pictographic# E0.0 [5] (⛫..⛯) CASTLE..MAP SYMBOL FOR LIGHTHOUSE 26F0..26F1 ; Extended_Pictographic# E0.7 [2] (⛰️..⛱️) mountain..umbrella on ground 26F2..26F3 ; Extended_Pictographic# E0.6 [2] (⛲..⛳) fountain..flag in hole 26F4 ; Extended_Pictographic# E0.7 [1] (⛴️) ferry 26F5 ; Extended_Pictographic# E0.6 [1] (⛵) sailboat -26F6 ; Extended_Pictographic# E0.0 [1] (⛶) SQUARE FOUR CORNERS 26F7..26F9 ; Extended_Pictographic# E0.7 [3] (⛷️..⛹️) skier..person bouncing ball 26FA ; Extended_Pictographic# E0.6 [1] (⛺) tent -26FB..26FC ; Extended_Pictographic# E0.0 [2] (⛻..⛼) JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL 26FD ; Extended_Pictographic# E0.6 [1] (⛽) fuel pump -26FE..2701 ; Extended_Pictographic# E0.0 [4] (⛾..✁) CUP ON BLACK SQUARE..UPPER BLADE SCISSORS 2702 ; Extended_Pictographic# E0.6 [1] (✂️) scissors -2703..2704 ; Extended_Pictographic# E0.0 [2] (✃..✄) LOWER BLADE SCISSORS..WHITE SCISSORS 2705 ; Extended_Pictographic# E0.6 [1] (✅) check mark button 2708..270C ; Extended_Pictographic# E0.6 [5] (✈️..✌️) airplane..victory hand 270D ; Extended_Pictographic# E0.7 [1] (✍️) writing hand -270E ; Extended_Pictographic# E0.0 [1] (✎) LOWER RIGHT PENCIL 270F ; Extended_Pictographic# E0.6 [1] (✏️) pencil -2710..2711 ; Extended_Pictographic# E0.0 [2] (✐..✑) UPPER RIGHT PENCIL..WHITE NIB 2712 ; Extended_Pictographic# E0.6 [1] (✒️) black nib 2714 ; Extended_Pictographic# E0.6 [1] (✔️) check mark 2716 ; Extended_Pictographic# E0.6 [1] (✖️) multiply @@ -959,7 +929,6 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 2757 ; Extended_Pictographic# E0.6 [1] (❗) red exclamation mark 2763 ; Extended_Pictographic# E1.0 [1] (❣️) heart exclamation 2764 ; Extended_Pictographic# E0.6 [1] (❤️) red heart -2765..2767 ; Extended_Pictographic# E0.0 [3] (❥..❧) ROTATED HEAVY BLACK HEART BULLET..ROTATED FLORAL HEART BULLET 2795..2797 ; Extended_Pictographic# E0.6 [3] (➕..➗) plus..divide 27A1 ; Extended_Pictographic# E0.6 [1] (➡️) right arrow 27B0 ; Extended_Pictographic# E0.6 [1] (➰) curly loop @@ -973,19 +942,19 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 303D ; Extended_Pictographic# E0.6 [1] (〽️) part alternation mark 3297 ; Extended_Pictographic# E0.6 [1] (㊗️) Japanese “congratulations” button 3299 ; Extended_Pictographic# E0.6 [1] (㊙️) Japanese “secret” button -1F000..1F003 ; Extended_Pictographic# E0.0 [4] (🀀..🀃) MAHJONG TILE EAST WIND..MAHJONG TILE NORTH WIND 1F004 ; Extended_Pictographic# E0.6 [1] (🀄) mahjong red dragon -1F005..1F0CE ; Extended_Pictographic# E0.0 [202] (🀅..🃎) MAHJONG TILE GREEN DRAGON..PLAYING CARD KING OF DIAMONDS +1F02C..1F02F ; Extended_Pictographic# E0.0 [4] (🀬..🀯) .. +1F094..1F09F ; Extended_Pictographic# E0.0 [12] (🂔..🂟) .. +1F0AF..1F0B0 ; Extended_Pictographic# E0.0 [2] (🂯..🂰) .. +1F0C0 ; Extended_Pictographic# E0.0 [1] (🃀) 1F0CF ; Extended_Pictographic# E0.6 [1] (🃏) joker -1F0D0..1F0FF ; Extended_Pictographic# E0.0 [48] (🃐..🃿) .. -1F10D..1F10F ; Extended_Pictographic# E0.0 [3] (🄍..🄏) CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH -1F12F ; Extended_Pictographic# E0.0 [1] (🄯) COPYLEFT SYMBOL -1F16C..1F16F ; Extended_Pictographic# E0.0 [4] (🅬..🅯) RAISED MR SIGN..CIRCLED HUMAN FIGURE +1F0D0 ; Extended_Pictographic# E0.0 [1] (🃐) +1F0F6..1F0FF ; Extended_Pictographic# E0.0 [10] (🃶..🃿) .. 1F170..1F171 ; Extended_Pictographic# E0.6 [2] (🅰️..🅱️) A button (blood type)..B button (blood type) 1F17E..1F17F ; Extended_Pictographic# E0.6 [2] (🅾️..🅿️) O button (blood type)..P button 1F18E ; Extended_Pictographic# E0.6 [1] (🆎) AB button (blood type) 1F191..1F19A ; Extended_Pictographic# E0.6 [10] (🆑..🆚) CL button..VS button -1F1AD..1F1E5 ; Extended_Pictographic# E0.0 [57] (🆭..🇥) MASK WORK SYMBOL.. +1F1AE..1F1E5 ; Extended_Pictographic# E0.0 [56] (🆮..🇥) .. 1F201..1F202 ; Extended_Pictographic# E0.6 [2] (🈁..🈂️) Japanese “here” button..Japanese “service charge” button 1F203..1F20F ; Extended_Pictographic# E0.0 [13] (🈃..🈏) .. 1F21A ; Extended_Pictographic# E0.6 [1] (🈚) Japanese “free of charge” button @@ -994,7 +963,8 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F23C..1F23F ; Extended_Pictographic# E0.0 [4] (🈼..🈿) .. 1F249..1F24F ; Extended_Pictographic# E0.0 [7] (🉉..🉏) .. 1F250..1F251 ; Extended_Pictographic# E0.6 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button -1F252..1F2FF ; Extended_Pictographic# E0.0 [174] (🉒..🋿) .. +1F252..1F25F ; Extended_Pictographic# E0.0 [14] (🉒..🉟) .. +1F266..1F2FF ; Extended_Pictographic# E0.0 [154] (🉦..🋿) .. 1F300..1F30C ; Extended_Pictographic# E0.6 [13] (🌀..🌌) cyclone..milky way 1F30D..1F30E ; Extended_Pictographic# E0.7 [2] (🌍..🌎) globe showing Europe-Africa..globe showing Americas 1F30F ; Extended_Pictographic# E0.6 [1] (🌏) globe showing Asia-Australia @@ -1010,7 +980,6 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F31D..1F31E ; Extended_Pictographic# E1.0 [2] (🌝..🌞) full moon face..sun with face 1F31F..1F320 ; Extended_Pictographic# E0.6 [2] (🌟..🌠) glowing star..shooting star 1F321 ; Extended_Pictographic# E0.7 [1] (🌡️) thermometer -1F322..1F323 ; Extended_Pictographic# E0.0 [2] (🌢..🌣) BLACK DROPLET..WHITE SUN 1F324..1F32C ; Extended_Pictographic# E0.7 [9] (🌤️..🌬️) sun behind small cloud..wind face 1F32D..1F32F ; Extended_Pictographic# E1.0 [3] (🌭..🌯) hot dog..burrito 1F330..1F331 ; Extended_Pictographic# E0.6 [2] (🌰..🌱) chestnut..seedling @@ -1026,11 +995,8 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F37D ; Extended_Pictographic# E0.7 [1] (🍽️) fork and knife with plate 1F37E..1F37F ; Extended_Pictographic# E1.0 [2] (🍾..🍿) bottle with popping cork..popcorn 1F380..1F393 ; Extended_Pictographic# E0.6 [20] (🎀..🎓) ribbon..graduation cap -1F394..1F395 ; Extended_Pictographic# E0.0 [2] (🎔..🎕) HEART WITH TIP ON THE LEFT..BOUQUET OF FLOWERS 1F396..1F397 ; Extended_Pictographic# E0.7 [2] (🎖️..🎗️) military medal..reminder ribbon -1F398 ; Extended_Pictographic# E0.0 [1] (🎘) MUSICAL KEYBOARD WITH JACKS 1F399..1F39B ; Extended_Pictographic# E0.7 [3] (🎙️..🎛️) studio microphone..control knobs -1F39C..1F39D ; Extended_Pictographic# E0.0 [2] (🎜..🎝) BEAMED ASCENDING MUSICAL NOTES..BEAMED DESCENDING MUSICAL NOTES 1F39E..1F39F ; Extended_Pictographic# E0.7 [2] (🎞️..🎟️) film frames..admission tickets 1F3A0..1F3C4 ; Extended_Pictographic# E0.6 [37] (🎠..🏄) carousel horse..person surfing 1F3C5 ; Extended_Pictographic# E1.0 [1] (🏅) sports medal @@ -1045,11 +1011,9 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F3E0..1F3E3 ; Extended_Pictographic# E0.6 [4] (🏠..🏣) house..Japanese post office 1F3E4 ; Extended_Pictographic# E1.0 [1] (🏤) post office 1F3E5..1F3F0 ; Extended_Pictographic# E0.6 [12] (🏥..🏰) hospital..castle -1F3F1..1F3F2 ; Extended_Pictographic# E0.0 [2] (🏱..🏲) WHITE PENNANT..BLACK PENNANT 1F3F3 ; Extended_Pictographic# E0.7 [1] (🏳️) white flag 1F3F4 ; Extended_Pictographic# E1.0 [1] (🏴) black flag 1F3F5 ; Extended_Pictographic# E0.7 [1] (🏵️) rosette -1F3F6 ; Extended_Pictographic# E0.0 [1] (🏶) BLACK ROSETTE 1F3F7 ; Extended_Pictographic# E0.7 [1] (🏷️) label 1F3F8..1F3FA ; Extended_Pictographic# E1.0 [3] (🏸..🏺) badminton..amphora 1F400..1F407 ; Extended_Pictographic# E1.0 [8] (🐀..🐇) rat..rabbit @@ -1086,7 +1050,6 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F4F8 ; Extended_Pictographic# E1.0 [1] (📸) camera with flash 1F4F9..1F4FC ; Extended_Pictographic# E0.6 [4] (📹..📼) video camera..videocassette 1F4FD ; Extended_Pictographic# E0.7 [1] (📽️) film projector -1F4FE ; Extended_Pictographic# E0.0 [1] (📾) PORTABLE STEREO 1F4FF..1F502 ; Extended_Pictographic# E1.0 [4] (📿..🔂) prayer beads..repeat single button 1F503 ; Extended_Pictographic# E0.6 [1] (🔃) clockwise vertical arrows 1F504..1F507 ; Extended_Pictographic# E1.0 [4] (🔄..🔇) counterclockwise arrows button..muted speaker @@ -1097,51 +1060,30 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F516..1F52B ; Extended_Pictographic# E0.6 [22] (🔖..🔫) bookmark..water pistol 1F52C..1F52D ; Extended_Pictographic# E1.0 [2] (🔬..🔭) microscope..telescope 1F52E..1F53D ; Extended_Pictographic# E0.6 [16] (🔮..🔽) crystal ball..downwards button -1F546..1F548 ; Extended_Pictographic# E0.0 [3] (🕆..🕈) WHITE LATIN CROSS..CELTIC CROSS 1F549..1F54A ; Extended_Pictographic# E0.7 [2] (🕉️..🕊️) om..dove 1F54B..1F54E ; Extended_Pictographic# E1.0 [4] (🕋..🕎) kaaba..menorah -1F54F ; Extended_Pictographic# E0.0 [1] (🕏) BOWL OF HYGIEIA 1F550..1F55B ; Extended_Pictographic# E0.6 [12] (🕐..🕛) one o’clock..twelve o’clock 1F55C..1F567 ; Extended_Pictographic# E0.7 [12] (🕜..🕧) one-thirty..twelve-thirty -1F568..1F56E ; Extended_Pictographic# E0.0 [7] (🕨..🕮) RIGHT SPEAKER..BOOK 1F56F..1F570 ; Extended_Pictographic# E0.7 [2] (🕯️..🕰️) candle..mantelpiece clock -1F571..1F572 ; Extended_Pictographic# E0.0 [2] (🕱..🕲) BLACK SKULL AND CROSSBONES..NO PIRACY 1F573..1F579 ; Extended_Pictographic# E0.7 [7] (🕳️..🕹️) hole..joystick 1F57A ; Extended_Pictographic# E3.0 [1] (🕺) man dancing -1F57B..1F586 ; Extended_Pictographic# E0.0 [12] (🕻..🖆) LEFT HAND TELEPHONE RECEIVER..PEN OVER STAMPED ENVELOPE 1F587 ; Extended_Pictographic# E0.7 [1] (🖇️) linked paperclips -1F588..1F589 ; Extended_Pictographic# E0.0 [2] (🖈..🖉) BLACK PUSHPIN..LOWER LEFT PENCIL 1F58A..1F58D ; Extended_Pictographic# E0.7 [4] (🖊️..🖍️) pen..crayon -1F58E..1F58F ; Extended_Pictographic# E0.0 [2] (🖎..🖏) LEFT WRITING HAND..TURNED OK HAND SIGN 1F590 ; Extended_Pictographic# E0.7 [1] (🖐️) hand with fingers splayed -1F591..1F594 ; Extended_Pictographic# E0.0 [4] (🖑..🖔) REVERSED RAISED HAND WITH FINGERS SPLAYED..REVERSED VICTORY HAND 1F595..1F596 ; Extended_Pictographic# E1.0 [2] (🖕..🖖) middle finger..vulcan salute -1F597..1F5A3 ; Extended_Pictographic# E0.0 [13] (🖗..🖣) WHITE DOWN POINTING LEFT HAND INDEX..BLACK DOWN POINTING BACKHAND INDEX 1F5A4 ; Extended_Pictographic# E3.0 [1] (🖤) black heart 1F5A5 ; Extended_Pictographic# E0.7 [1] (🖥️) desktop computer -1F5A6..1F5A7 ; Extended_Pictographic# E0.0 [2] (🖦..🖧) KEYBOARD AND MOUSE..THREE NETWORKED COMPUTERS 1F5A8 ; Extended_Pictographic# E0.7 [1] (🖨️) printer -1F5A9..1F5B0 ; Extended_Pictographic# E0.0 [8] (🖩..🖰) POCKET CALCULATOR..TWO BUTTON MOUSE 1F5B1..1F5B2 ; Extended_Pictographic# E0.7 [2] (🖱️..🖲️) computer mouse..trackball -1F5B3..1F5BB ; Extended_Pictographic# E0.0 [9] (🖳..🖻) OLD PERSONAL COMPUTER..DOCUMENT WITH PICTURE 1F5BC ; Extended_Pictographic# E0.7 [1] (🖼️) framed picture -1F5BD..1F5C1 ; Extended_Pictographic# E0.0 [5] (🖽..🗁) FRAME WITH TILES..OPEN FOLDER 1F5C2..1F5C4 ; Extended_Pictographic# E0.7 [3] (🗂️..🗄️) card index dividers..file cabinet -1F5C5..1F5D0 ; Extended_Pictographic# E0.0 [12] (🗅..🗐) EMPTY NOTE..PAGES 1F5D1..1F5D3 ; Extended_Pictographic# E0.7 [3] (🗑️..🗓️) wastebasket..spiral calendar -1F5D4..1F5DB ; Extended_Pictographic# E0.0 [8] (🗔..🗛) DESKTOP WINDOW..DECREASE FONT SIZE SYMBOL 1F5DC..1F5DE ; Extended_Pictographic# E0.7 [3] (🗜️..🗞️) clamp..rolled-up newspaper -1F5DF..1F5E0 ; Extended_Pictographic# E0.0 [2] (🗟..🗠) PAGE WITH CIRCLED TEXT..STOCK CHART 1F5E1 ; Extended_Pictographic# E0.7 [1] (🗡️) dagger -1F5E2 ; Extended_Pictographic# E0.0 [1] (🗢) LIPS 1F5E3 ; Extended_Pictographic# E0.7 [1] (🗣️) speaking head -1F5E4..1F5E7 ; Extended_Pictographic# E0.0 [4] (🗤..🗧) THREE RAYS ABOVE..THREE RAYS RIGHT 1F5E8 ; Extended_Pictographic# E2.0 [1] (🗨️) left speech bubble -1F5E9..1F5EE ; Extended_Pictographic# E0.0 [6] (🗩..🗮) RIGHT SPEECH BUBBLE..LEFT ANGER BUBBLE 1F5EF ; Extended_Pictographic# E0.7 [1] (🗯️) right anger bubble -1F5F0..1F5F2 ; Extended_Pictographic# E0.0 [3] (🗰..🗲) MOOD BUBBLE..LIGHTNING MOOD 1F5F3 ; Extended_Pictographic# E0.7 [1] (🗳️) ballot box with ballot -1F5F4..1F5F9 ; Extended_Pictographic# E0.0 [6] (🗴..🗹) BALLOT SCRIPT X..BALLOT BOX WITH BOLD CHECK 1F5FA ; Extended_Pictographic# E0.7 [1] (🗺️) world map 1F5FB..1F5FF ; Extended_Pictographic# E0.6 [5] (🗻..🗿) mount fuji..moai 1F600 ; Extended_Pictographic# E1.0 [1] (😀) grinning face @@ -1210,26 +1152,22 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F6BF ; Extended_Pictographic# E1.0 [1] (🚿) shower 1F6C0 ; Extended_Pictographic# E0.6 [1] (🛀) person taking bath 1F6C1..1F6C5 ; Extended_Pictographic# E1.0 [5] (🛁..🛅) bathtub..left luggage -1F6C6..1F6CA ; Extended_Pictographic# E0.0 [5] (🛆..🛊) TRIANGLE WITH ROUNDED CORNERS..GIRLS SYMBOL 1F6CB ; Extended_Pictographic# E0.7 [1] (🛋️) couch and lamp 1F6CC ; Extended_Pictographic# E1.0 [1] (🛌) person in bed 1F6CD..1F6CF ; Extended_Pictographic# E0.7 [3] (🛍️..🛏️) shopping bags..bed 1F6D0 ; Extended_Pictographic# E1.0 [1] (🛐) place of worship 1F6D1..1F6D2 ; Extended_Pictographic# E3.0 [2] (🛑..🛒) stop sign..shopping cart -1F6D3..1F6D4 ; Extended_Pictographic# E0.0 [2] (🛓..🛔) STUPA..PAGODA 1F6D5 ; Extended_Pictographic# E12.0 [1] (🛕) hindu temple 1F6D6..1F6D7 ; Extended_Pictographic# E13.0 [2] (🛖..🛗) hut..elevator -1F6D8..1F6DB ; Extended_Pictographic# E0.0 [4] (🛘..🛛) .. +1F6D8 ; Extended_Pictographic# E17.0 [1] (🛘) landslide +1F6D9..1F6DB ; Extended_Pictographic# E0.0 [3] (🛙..🛛) .. 1F6DC ; Extended_Pictographic# E15.0 [1] (🛜) wireless 1F6DD..1F6DF ; Extended_Pictographic# E14.0 [3] (🛝..🛟) playground slide..ring buoy 1F6E0..1F6E5 ; Extended_Pictographic# E0.7 [6] (🛠️..🛥️) hammer and wrench..motor boat -1F6E6..1F6E8 ; Extended_Pictographic# E0.0 [3] (🛦..🛨) UP-POINTING MILITARY AIRPLANE..UP-POINTING SMALL AIRPLANE 1F6E9 ; Extended_Pictographic# E0.7 [1] (🛩️) small airplane -1F6EA ; Extended_Pictographic# E0.0 [1] (🛪) NORTHEAST-POINTING AIRPLANE 1F6EB..1F6EC ; Extended_Pictographic# E1.0 [2] (🛫..🛬) airplane departure..airplane arrival 1F6ED..1F6EF ; Extended_Pictographic# E0.0 [3] (🛭..🛯) .. 1F6F0 ; Extended_Pictographic# E0.7 [1] (🛰️) satellite -1F6F1..1F6F2 ; Extended_Pictographic# E0.0 [2] (🛱..🛲) ONCOMING FIRE ENGINE..DIESEL LOCOMOTIVE 1F6F3 ; Extended_Pictographic# E0.7 [1] (🛳️) passenger ship 1F6F4..1F6F6 ; Extended_Pictographic# E3.0 [3] (🛴..🛶) kick scooter..canoe 1F6F7..1F6F8 ; Extended_Pictographic# E5.0 [2] (🛷..🛸) sled..flying saucer @@ -1237,8 +1175,7 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F6FA ; Extended_Pictographic# E12.0 [1] (🛺) auto rickshaw 1F6FB..1F6FC ; Extended_Pictographic# E13.0 [2] (🛻..🛼) pickup truck..roller skate 1F6FD..1F6FF ; Extended_Pictographic# E0.0 [3] (🛽..🛿) .. -1F774..1F77F ; Extended_Pictographic# E0.0 [12] (🝴..🝿) LOT OF FORTUNE..ORCUS -1F7D5..1F7DF ; Extended_Pictographic# E0.0 [11] (🟕..🟟) CIRCLED TRIANGLE.. +1F7DA..1F7DF ; Extended_Pictographic# E0.0 [6] (🟚..🟟) .. 1F7E0..1F7EB ; Extended_Pictographic# E12.0 [12] (🟠..🟫) orange circle..brown square 1F7EC..1F7EF ; Extended_Pictographic# E0.0 [4] (🟬..🟯) .. 1F7F0 ; Extended_Pictographic# E14.0 [1] (🟰) heavy equals sign @@ -1247,7 +1184,10 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F848..1F84F ; Extended_Pictographic# E0.0 [8] (🡈..🡏) .. 1F85A..1F85F ; Extended_Pictographic# E0.0 [6] (🡚..🡟) .. 1F888..1F88F ; Extended_Pictographic# E0.0 [8] (🢈..🢏) .. -1F8AE..1F8FF ; Extended_Pictographic# E0.0 [82] (🢮..🣿) .. +1F8AE..1F8AF ; Extended_Pictographic# E0.0 [2] (🢮..🢯) .. +1F8BC..1F8BF ; Extended_Pictographic# E0.0 [4] (🢼..🢿) .. +1F8C2..1F8CF ; Extended_Pictographic# E0.0 [14] (🣂..🣏) .. +1F8D9..1F8FF ; Extended_Pictographic# E0.0 [39] (🣙..🣿) .. 1F90C ; Extended_Pictographic# E13.0 [1] (🤌) pinched fingers 1F90D..1F90F ; Extended_Pictographic# E12.0 [3] (🤍..🤏) white heart..pinching hand 1F910..1F918 ; Extended_Pictographic# E1.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns @@ -1293,7 +1233,8 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F9CD..1F9CF ; Extended_Pictographic# E12.0 [3] (🧍..🧏) person standing..deaf person 1F9D0..1F9E6 ; Extended_Pictographic# E5.0 [23] (🧐..🧦) face with monocle..socks 1F9E7..1F9FF ; Extended_Pictographic# E11.0 [25] (🧧..🧿) red envelope..nazar amulet -1FA00..1FA6F ; Extended_Pictographic# E0.0 [112] (🨀..🩯) NEUTRAL CHESS KING.. +1FA58..1FA5F ; Extended_Pictographic# E0.0 [8] (🩘..🩟) .. +1FA6E..1FA6F ; Extended_Pictographic# E0.0 [2] (🩮..🩯) .. 1FA70..1FA73 ; Extended_Pictographic# E12.0 [4] (🩰..🩳) ballet shoes..shorts 1FA74 ; Extended_Pictographic# E13.0 [1] (🩴) thong sandal 1FA75..1FA77 ; Extended_Pictographic# E15.0 [3] (🩵..🩷) light blue heart..pink heart @@ -1304,7 +1245,9 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1FA83..1FA86 ; Extended_Pictographic# E13.0 [4] (🪃..🪆) boomerang..nesting dolls 1FA87..1FA88 ; Extended_Pictographic# E15.0 [2] (🪇..🪈) maracas..flute 1FA89 ; Extended_Pictographic# E16.0 [1] (🪉) harp -1FA8A..1FA8E ; Extended_Pictographic# E0.0 [5] (🪊..🪎) .. +1FA8A ; Extended_Pictographic# E17.0 [1] (🪊) trombone +1FA8B..1FA8D ; Extended_Pictographic# E0.0 [3] (🪋..🪍) .. +1FA8E ; Extended_Pictographic# E17.0 [1] (🪎) treasure chest 1FA8F ; Extended_Pictographic# E16.0 [1] (🪏) shovel 1FA90..1FA95 ; Extended_Pictographic# E12.0 [6] (🪐..🪕) ringed planet..banjo 1FA96..1FAA8 ; Extended_Pictographic# E13.0 [19] (🪖..🪨) military helmet..rock @@ -1318,7 +1261,10 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1FAC0..1FAC2 ; Extended_Pictographic# E13.0 [3] (🫀..🫂) anatomical heart..people hugging 1FAC3..1FAC5 ; Extended_Pictographic# E14.0 [3] (🫃..🫅) pregnant man..person with crown 1FAC6 ; Extended_Pictographic# E16.0 [1] (🫆) fingerprint -1FAC7..1FACD ; Extended_Pictographic# E0.0 [7] (🫇..🫍) .. +1FAC7 ; Extended_Pictographic# E0.0 [1] (🫇) +1FAC8 ; Extended_Pictographic# E17.0 [1] (🫈) hairy creature +1FAC9..1FACC ; Extended_Pictographic# E0.0 [4] (🫉..🫌) .. +1FACD ; Extended_Pictographic# E17.0 [1] (🫍) orca 1FACE..1FACF ; Extended_Pictographic# E15.0 [2] (🫎..🫏) moose..donkey 1FAD0..1FAD6 ; Extended_Pictographic# E13.0 [7] (🫐..🫖) blueberries..teapot 1FAD7..1FAD9 ; Extended_Pictographic# E14.0 [3] (🫗..🫙) pouring liquid..jar @@ -1329,12 +1275,14 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1FAE0..1FAE7 ; Extended_Pictographic# E14.0 [8] (🫠..🫧) melting face..bubbles 1FAE8 ; Extended_Pictographic# E15.0 [1] (🫨) shaking face 1FAE9 ; Extended_Pictographic# E16.0 [1] (🫩) face with bags under eyes -1FAEA..1FAEF ; Extended_Pictographic# E0.0 [6] (🫪..🫯) .. +1FAEA ; Extended_Pictographic# E17.0 [1] (🫪) distorted face +1FAEB..1FAEE ; Extended_Pictographic# E0.0 [4] (🫫..🫮) .. +1FAEF ; Extended_Pictographic# E17.0 [1] (🫯) fight cloud 1FAF0..1FAF6 ; Extended_Pictographic# E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands 1FAF7..1FAF8 ; Extended_Pictographic# E15.0 [2] (🫷..🫸) leftwards pushing hand..rightwards pushing hand 1FAF9..1FAFF ; Extended_Pictographic# E0.0 [7] (🫹..🫿) .. 1FC00..1FFFD ; Extended_Pictographic# E0.0[1022] (🰀..🿽) .. -# Total elements: 3537 +# Total elements: 2848 #EOF diff --git a/contrib/unicode/from_glibc/utf8_gen.py b/contrib/unicode/from_glibc/utf8_gen.py index 59cd9bbfa9d8..2e01fab96586 100755 --- a/contrib/unicode/from_glibc/utf8_gen.py +++ b/contrib/unicode/from_glibc/utf8_gen.py @@ -1,6 +1,7 @@ #!/usr/bin/python3 # -*- coding: utf-8 -*- # Copyright (C) 2014-2025 Free Software Foundation, Inc. +# Copyright The GNU Toolchain Authors. # This file is part of the GNU C Library. # # The GNU C Library is free software; you can redistribute it and/or @@ -10,7 +11,7 @@ # # The GNU C Library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public @@ -28,7 +29,6 @@ ''' import argparse -import sys import re import unicode_utils @@ -200,30 +200,40 @@ def write_header_charmap(outfile): def write_header_width(outfile, unicode_version): '''Writes the header on top of the WIDTH section to the output file''' - outfile.write('% Character width according to Unicode ' - + '{:s}.\n'.format(unicode_version)) - outfile.write('% - Default width is 1.\n') + outfile.write('% Character width according to Unicode {:s}.\n'.format(unicode_version)) + outfile.write('% Width is determined by the following rules, in order of decreasing precedence:\n') + outfile.write('% - U+00AD SOFT HYPHEN has width 1, as a special case for compatibility (https://archive.is/b5Ck).\n') + outfile.write('% - U+115F HANGUL CHOSEONG FILLER has width 2.\n') + outfile.write('% This character stands in for an intentionally omitted leading consonant\n') + outfile.write('% in a Hangul syllable block; as such it must be assigned width 2 despite its lack\n') + outfile.write('% of visible display to ensure that the complete block has the correct width.\n') + outfile.write('% (See below for more information on Hangul syllables.)\n') + outfile.write('% - Combining jungseong and jongseong Hangul jamo have width 0; generated from\n') + outfile.write('% "grep \'^[^;]*;[VT]\' HangulSyllableType.txt".\n') + outfile.write('% One composed Hangul "syllable block" like 퓛 is made up of\n') + outfile.write('% two to three individual component characters called "jamo".\n') + outfile.write('% The complete block must have total width 2;\n') + outfile.write('% to achieve this, we assign a width of 2 to leading "choseong" jamo,\n') + outfile.write('% and of 0 to medial vowel "jungseong" and trailing "jongseong" jamo.\n') + outfile.write('% - Non-spacing and enclosing marks have width 0; generated from\n') + outfile.write('% "grep -E \'^[^;]*;[^;]*;(Mn|Me);\' UnicodeData.txt".\n') + outfile.write('% - "Default_Ignorable_Code_Point"s have width 0; generated from\n') + outfile.write('% "grep \'^[^;]*;\\s*Default_Ignorable_Code_Point\' DerivedCoreProperties.txt".\n') outfile.write('% - Double-width characters have width 2; generated from\n') - outfile.write('% "grep \'^[^;]*;\\s*[WF]\' EastAsianWidth.txt"\n') - outfile.write('% - Non-spacing characters have width 0; ' - + 'generated from PropList.txt or\n') - outfile.write('% "grep \'^[^;]*;[^;]*;[^;]*;[^;]*;NSM;\' ' - + 'UnicodeData.txt"\n') - outfile.write('% - Format control characters have width 0; ' - + 'generated from\n') - outfile.write("% \"grep '^[^;]*;[^;]*;Cf;' UnicodeData.txt\"\n") -# Not needed covered by Cf -# outfile.write("% - Zero width characters have width 0; generated from\n") -# outfile.write("% \"grep '^[^;]*;ZERO WIDTH ' UnicodeData.txt\"\n") + outfile.write('% "grep \'^[^;]*;[WF]\' EastAsianWidth.txt".\n') + outfile.write('% - Default width for all other characters is 1.\n') outfile.write("WIDTH\n") -def process_width(outfile, ulines, elines, plines): - '''ulines are lines from UnicodeData.txt, elines are lines from - EastAsianWidth.txt containing characters with width “W” or “F”, - plines are lines from PropList.txt which contain characters - with the property “Prepended_Concatenation_Mark”. - +def process_width(outfile, ulines, dlines, elines, klines): + '''ulines are lines from UnicodeData.txt. + elines are lines from EastAsianWidth.txt containing characters with width + “W” or “F”. + dlines are lines from DerivedCoreProperties.txt which contain + characters with the property “Default_Ignorable_Code_Point”. + klines are lines from HangulSyllableType.txt which contain characters + with syllable type “V” or “T”. ''' + # Wide and fullwidth characters have width 1 width_dict = {} for line in elines: fields = line.split(";") @@ -235,14 +245,14 @@ def process_width(outfile, ulines, elines, plines): int(code_points[1], 16)+1): width_dict[key] = 2 + # Nonspacing and enclosing marks have width 0 for line in ulines: fields = line.split(";") - if fields[4] == "NSM" or fields[2] in ("Cf", "Me", "Mn"): + if fields[4] == "NSM" or fields[2] in ("Me", "Mn"): width_dict[int(fields[0], 16)] = 0 - for line in plines: - # Characters with the property “Prepended_Concatenation_Mark” - # should have the width 1: + # Conjoining vowel and trailing jamo have width 0 + for line in klines: fields = line.split(";") if not '..' in fields[0]: code_points = (fields[0], fields[0]) @@ -250,21 +260,26 @@ def process_width(outfile, ulines, elines, plines): code_points = fields[0].split("..") for key in range(int(code_points[0], 16), int(code_points[1], 16)+1): - del width_dict[key] # default width is 1 - - # handle special cases for compatibility - for key in list((0x00AD,)): - # https://www.cs.tut.fi/~jkorpela/shy.html - if key in width_dict: - del width_dict[key] # default width is 1 - for key in list(range(0x1160, 0x1200)): - # Hangul jungseong and jongseong: - if key in unicode_utils.UNICODE_ATTRIBUTES: - width_dict[key] = 0 - for key in list(range(0xD7B0, 0xD800)): - # Hangul jungseong and jongseong: - if key in unicode_utils.UNICODE_ATTRIBUTES: width_dict[key] = 0 + + # “Default_Ignorable_Code_Point”s have width 0 + for line in dlines: + fields = line.split(";") + if not '..' in fields[0]: + code_points = (fields[0], fields[0]) + else: + code_points = fields[0].split("..") + for key in range(int(code_points[0], 16), + int(code_points[1], 16)+1): + width_dict[key] = 0 # default width is 1 + + + # Special case: U+00AD SOFT HYPHEN + del width_dict[0x00AD] + + # Special case: U+115F HANGUL CHOSEONG FILLER + width_dict[0x115F] = 2 + for key in list(range(0x3248, 0x3250)): # These are “A” which means we can decide whether to treat them # as “W” or “N” based on context: @@ -302,7 +317,7 @@ def process_width(outfile, ulines, elines, plines): if __name__ == "__main__": PARSER = argparse.ArgumentParser( description=''' - Generate a UTF-8 file from UnicodeData.txt, EastAsianWidth.txt, and PropList.txt. + Generate a UTF-8 file from UnicodeData.txt, DerivedCoreProperties.txt, EastAsianWidth.txt, and HangulSyllableType.txt ''') PARSER.add_argument( '-u', '--unicode_data_file', @@ -311,6 +326,13 @@ def process_width(outfile, ulines, elines, plines): default='UnicodeData.txt', help=('The UnicodeData.txt file to read, ' + 'default: %(default)s')) + PARSER.add_argument( + '-d', '--derived_core_properties_file', + nargs='?', + type=str, + default='DerivedCoreProperties.txt', + help=('The DerivedCoreProperties.txt file to read, ' + + 'default: %(default)s')) PARSER.add_argument( '-e', '--east_asian_with_file', nargs='?', @@ -319,11 +341,11 @@ def process_width(outfile, ulines, elines, plines): help=('The EastAsianWidth.txt file to read, ' + 'default: %(default)s')) PARSER.add_argument( - '-p', '--prop_list_file', + '-k', '--hangul_syllable_type_file', nargs='?', type=str, - default='PropList.txt', - help=('The PropList.txt file to read, ' + default='HangulSyllableType.txt', + help=('The HangulSyllableType.txt file to read, ' + 'default: %(default)s')) PARSER.add_argument( '--unicode_version', @@ -336,27 +358,35 @@ def process_width(outfile, ulines, elines, plines): unicode_utils.fill_attributes(ARGS.unicode_data_file) with open(ARGS.unicode_data_file, mode='r') as UNIDATA_FILE: UNICODE_DATA_LINES = UNIDATA_FILE.readlines() - with open(ARGS.east_asian_with_file, mode='r') as EAST_ASIAN_WIDTH_FILE: - EAST_ASIAN_WIDTH_LINES = [] - for LINE in EAST_ASIAN_WIDTH_FILE: - # If characters from EastAsianWidth.txt which are from - # reserved ranges (i.e. not yet assigned code points) + with open(ARGS.derived_core_properties_file, mode='r') as DERIVED_CORE_PROPERTIES_FILE: + DERIVED_CORE_PROPERTIES_LINES = [] + for LINE in DERIVED_CORE_PROPERTIES_FILE: + # If characters which are from reserved ranges + # (i.e. not yet assigned code points) # are added to the WIDTH section of the UTF-8 file, then # “make check” produces “Unknown Character” errors for # these code points because such unassigned code points # are not in the CHARMAP section of the UTF-8 file. # - # Therefore, we skip all reserved code points when reading - # the EastAsianWidth.txt file. - if re.match(r'.*\.\..*', LINE): + # Therefore, we skip all reserved code points. + if re.match(r'.*', LINE): + continue + if re.match(r'^[^;]*;\s*Default_Ignorable_Code_Point', LINE): + DERIVED_CORE_PROPERTIES_LINES.append(LINE.strip()) + with open(ARGS.east_asian_with_file, mode='r') as EAST_ASIAN_WIDTH_FILE: + EAST_ASIAN_WIDTH_LINES = [] + for LINE in EAST_ASIAN_WIDTH_FILE: + if re.match(r'.*', LINE): continue if re.match(r'^[^;]*;\s*[WF]', LINE): EAST_ASIAN_WIDTH_LINES.append(LINE.strip()) - with open(ARGS.prop_list_file, mode='r') as PROP_LIST_FILE: - PROP_LIST_LINES = [] - for LINE in PROP_LIST_FILE: - if re.match(r'^[^;]*;[\s]*Prepended_Concatenation_Mark', LINE): - PROP_LIST_LINES.append(LINE.strip()) + with open(ARGS.hangul_syllable_type_file, mode='r') as HANGUL_SYLLABLE_TYPE_FILE: + HANGUL_SYLLABLE_TYPE_LINES = [] + for LINE in HANGUL_SYLLABLE_TYPE_FILE: + if re.match(r'.*', LINE): + continue + if re.match(r'^[^;]*;\s*[VT]', LINE): + HANGUL_SYLLABLE_TYPE_LINES.append(LINE.strip()) with open('UTF-8', mode='w') as OUTFILE: # Processing UnicodeData.txt and write CHARMAP to UTF-8 file write_header_charmap(OUTFILE) @@ -366,6 +396,7 @@ def process_width(outfile, ulines, elines, plines): write_header_width(OUTFILE, ARGS.unicode_version) process_width(OUTFILE, UNICODE_DATA_LINES, + DERIVED_CORE_PROPERTIES_LINES, EAST_ASIAN_WIDTH_LINES, - PROP_LIST_LINES) + HANGUL_SYLLABLE_TYPE_LINES) OUTFILE.write("END WIDTH\n") diff --git a/gcc/testsuite/c-c++-common/cpp/named-universal-char-escape-1.c b/gcc/testsuite/c-c++-common/cpp/named-universal-char-escape-1.c index 3651fdd5734f..9ff93f92129a 100644 --- a/gcc/testsuite/c-c++-common/cpp/named-universal-char-escape-1.c +++ b/gcc/testsuite/c-c++-common/cpp/named-universal-char-escape-1.c @@ -168,6 +168,7 @@ typedef __CHAR32_TYPE__ char32_t; || U'\U0003134A' != U'\N{CJK UNIFIED IDEOGRAPH-3134A}' \ || U'\U00031350' != U'\N{CJK UNIFIED IDEOGRAPH-31350}' \ || U'\U000323AF' != U'\N{CJK UNIFIED IDEOGRAPH-323AF}' \ + || U'\U0003340E' != U'\N{CJK UNIFIED IDEOGRAPH-3340E}' \ || U'\U00013460' != U'\N{EGYPTIAN HIEROGLYPH-13460}' \ || U'\U000143FA' != U'\N{EGYPTIAN HIEROGLYPH-143FA}' \ || U'\U00017000' != U'\N{TANGUT IDEOGRAPH-17000}' \ diff --git a/libcpp/generated_cpp_wcwidth.h b/libcpp/generated_cpp_wcwidth.h index 938af6b3a70b..b2ca8deb4a53 100644 --- a/libcpp/generated_cpp_wcwidth.h +++ b/libcpp/generated_cpp_wcwidth.h @@ -1,5 +1,5 @@ /* Generated by contrib/unicode/gen_wcwidth.py, with the help of glibc's - utf8_gen.py, using version 16.0 of the Unicode standard. */ + utf8_gen.py, using version 17.0 of the Unicode standard. */ static const cppchar_t wcwidth_range_ends[] = { 0x2ff, 0x36f, 0x482, 0x489, 0x590, 0x5bd, 0x5be, 0x5bf, @@ -37,95 +37,97 @@ static const cppchar_t wcwidth_range_ends[] = { 0x1886, 0x18a8, 0x18a9, 0x191f, 0x1922, 0x1926, 0x1928, 0x1931, 0x1932, 0x1938, 0x193b, 0x1a16, 0x1a18, 0x1a1a, 0x1a1b, 0x1a55, 0x1a56, 0x1a57, 0x1a5e, 0x1a5f, 0x1a60, 0x1a61, 0x1a62, 0x1a64, - 0x1a6c, 0x1a72, 0x1a7c, 0x1a7e, 0x1a7f, 0x1aaf, 0x1ace, 0x1aff, - 0x1b03, 0x1b33, 0x1b34, 0x1b35, 0x1b3a, 0x1b3b, 0x1b3c, 0x1b41, - 0x1b42, 0x1b6a, 0x1b73, 0x1b7f, 0x1b81, 0x1ba1, 0x1ba5, 0x1ba7, - 0x1ba9, 0x1baa, 0x1bad, 0x1be5, 0x1be6, 0x1be7, 0x1be9, 0x1bec, - 0x1bed, 0x1bee, 0x1bf1, 0x1c2b, 0x1c33, 0x1c35, 0x1c37, 0x1ccf, - 0x1cd2, 0x1cd3, 0x1ce0, 0x1ce1, 0x1ce8, 0x1cec, 0x1ced, 0x1cf3, - 0x1cf4, 0x1cf7, 0x1cf9, 0x1dbf, 0x1dff, 0x200a, 0x200f, 0x2029, - 0x202e, 0x205f, 0x2064, 0x2065, 0x206f, 0x20cf, 0x20f0, 0x2319, - 0x231b, 0x2328, 0x232a, 0x23e8, 0x23ec, 0x23ef, 0x23f0, 0x23f2, - 0x23f3, 0x25fc, 0x25fe, 0x2613, 0x2615, 0x262f, 0x2637, 0x2647, - 0x2653, 0x267e, 0x267f, 0x2689, 0x268f, 0x2692, 0x2693, 0x26a0, - 0x26a1, 0x26a9, 0x26ab, 0x26bc, 0x26be, 0x26c3, 0x26c5, 0x26cd, - 0x26ce, 0x26d3, 0x26d4, 0x26e9, 0x26ea, 0x26f1, 0x26f3, 0x26f4, - 0x26f5, 0x26f9, 0x26fa, 0x26fc, 0x26fd, 0x2704, 0x2705, 0x2709, - 0x270b, 0x2727, 0x2728, 0x274b, 0x274c, 0x274d, 0x274e, 0x2752, - 0x2755, 0x2756, 0x2757, 0x2794, 0x2797, 0x27af, 0x27b0, 0x27be, - 0x27bf, 0x2b1a, 0x2b1c, 0x2b4f, 0x2b50, 0x2b54, 0x2b55, 0x2cee, - 0x2cf1, 0x2d7e, 0x2d7f, 0x2ddf, 0x2dff, 0x2e7f, 0x2e99, 0x2e9a, - 0x2ef3, 0x2eff, 0x2fd5, 0x2fef, 0x3029, 0x302d, 0x303e, 0x3040, - 0x3096, 0x3098, 0x309a, 0x30ff, 0x3104, 0x312f, 0x3130, 0x318e, - 0x318f, 0x31e5, 0x31ee, 0x321e, 0x321f, 0xa48c, 0xa48f, 0xa4c6, - 0xa66e, 0xa672, 0xa673, 0xa67d, 0xa69d, 0xa69f, 0xa6ef, 0xa6f1, - 0xa801, 0xa802, 0xa805, 0xa806, 0xa80a, 0xa80b, 0xa824, 0xa826, - 0xa82b, 0xa82c, 0xa8c3, 0xa8c5, 0xa8df, 0xa8f1, 0xa8fe, 0xa8ff, - 0xa925, 0xa92d, 0xa946, 0xa951, 0xa95f, 0xa97c, 0xa97f, 0xa982, - 0xa9b2, 0xa9b3, 0xa9b5, 0xa9b9, 0xa9bb, 0xa9bd, 0xa9e4, 0xa9e5, - 0xaa28, 0xaa2e, 0xaa30, 0xaa32, 0xaa34, 0xaa36, 0xaa42, 0xaa43, - 0xaa4b, 0xaa4c, 0xaa7b, 0xaa7c, 0xaaaf, 0xaab0, 0xaab1, 0xaab4, - 0xaab6, 0xaab8, 0xaabd, 0xaabf, 0xaac0, 0xaac1, 0xaaeb, 0xaaed, - 0xaaf5, 0xaaf6, 0xabe4, 0xabe5, 0xabe7, 0xabe8, 0xabec, 0xabed, - 0xabff, 0xd7a3, 0xd7af, 0xd7c6, 0xd7ca, 0xd7fb, 0xf8ff, 0xfa6d, - 0xfa6f, 0xfad9, 0xfb1d, 0xfb1e, 0xfdff, 0xfe0f, 0xfe19, 0xfe1f, - 0xfe2f, 0xfe52, 0xfe53, 0xfe66, 0xfe67, 0xfe6b, 0xfefe, 0xfeff, - 0xff00, 0xff60, 0xffdf, 0xffe6, 0xfff8, 0xfffb, 0x101fc, 0x101fd, - 0x102df, 0x102e0, 0x10375, 0x1037a, 0x10a00, 0x10a03, 0x10a04, 0x10a06, - 0x10a0b, 0x10a0f, 0x10a37, 0x10a3a, 0x10a3e, 0x10a3f, 0x10ae4, 0x10ae6, - 0x10d23, 0x10d27, 0x10d68, 0x10d6d, 0x10eaa, 0x10eac, 0x10efb, 0x10eff, - 0x10f45, 0x10f50, 0x10f81, 0x10f85, 0x11000, 0x11001, 0x11037, 0x11046, - 0x1106f, 0x11070, 0x11072, 0x11074, 0x1107e, 0x11081, 0x110b2, 0x110b6, - 0x110b8, 0x110ba, 0x110c1, 0x110c2, 0x110ff, 0x11102, 0x11126, 0x1112b, - 0x1112c, 0x11134, 0x11172, 0x11173, 0x1117f, 0x11181, 0x111b5, 0x111be, - 0x111c8, 0x111cc, 0x111ce, 0x111cf, 0x1122e, 0x11231, 0x11233, 0x11234, - 0x11235, 0x11237, 0x1123d, 0x1123e, 0x11240, 0x11241, 0x112de, 0x112df, - 0x112e2, 0x112ea, 0x112ff, 0x11301, 0x1133a, 0x1133c, 0x1133f, 0x11340, - 0x11365, 0x1136c, 0x1136f, 0x11374, 0x113ba, 0x113c0, 0x113cd, 0x113ce, - 0x113cf, 0x113d0, 0x113d1, 0x113d2, 0x113e0, 0x113e2, 0x11437, 0x1143f, - 0x11441, 0x11444, 0x11445, 0x11446, 0x1145d, 0x1145e, 0x114b2, 0x114b8, - 0x114b9, 0x114ba, 0x114be, 0x114c0, 0x114c1, 0x114c3, 0x115b1, 0x115b5, - 0x115bb, 0x115bd, 0x115be, 0x115c0, 0x115db, 0x115dd, 0x11632, 0x1163a, - 0x1163c, 0x1163d, 0x1163e, 0x11640, 0x116aa, 0x116ab, 0x116ac, 0x116ad, - 0x116af, 0x116b5, 0x116b6, 0x116b7, 0x1171c, 0x1171d, 0x1171e, 0x1171f, - 0x11721, 0x11725, 0x11726, 0x1172b, 0x1182e, 0x11837, 0x11838, 0x1183a, - 0x1193a, 0x1193c, 0x1193d, 0x1193e, 0x11942, 0x11943, 0x119d3, 0x119d7, - 0x119d9, 0x119db, 0x119df, 0x119e0, 0x11a00, 0x11a0a, 0x11a32, 0x11a38, - 0x11a3a, 0x11a3e, 0x11a46, 0x11a47, 0x11a50, 0x11a56, 0x11a58, 0x11a5b, - 0x11a89, 0x11a96, 0x11a97, 0x11a99, 0x11c2f, 0x11c36, 0x11c37, 0x11c3d, - 0x11c3e, 0x11c3f, 0x11c91, 0x11ca7, 0x11ca9, 0x11cb0, 0x11cb1, 0x11cb3, - 0x11cb4, 0x11cb6, 0x11d30, 0x11d36, 0x11d39, 0x11d3a, 0x11d3b, 0x11d3d, - 0x11d3e, 0x11d45, 0x11d46, 0x11d47, 0x11d8f, 0x11d91, 0x11d94, 0x11d95, - 0x11d96, 0x11d97, 0x11ef2, 0x11ef4, 0x11eff, 0x11f01, 0x11f35, 0x11f3a, - 0x11f3f, 0x11f40, 0x11f41, 0x11f42, 0x11f59, 0x11f5a, 0x1342f, 0x13440, - 0x13446, 0x13455, 0x1611d, 0x16129, 0x1612c, 0x1612f, 0x16aef, 0x16af4, - 0x16b2f, 0x16b36, 0x16f4e, 0x16f4f, 0x16f8e, 0x16f92, 0x16fdf, 0x16fe3, - 0x16fe4, 0x16fef, 0x16ff1, 0x16fff, 0x187f7, 0x187ff, 0x18cd5, 0x18cfe, - 0x18d08, 0x1afef, 0x1aff3, 0x1aff4, 0x1affb, 0x1affc, 0x1affe, 0x1afff, - 0x1b122, 0x1b131, 0x1b132, 0x1b14f, 0x1b152, 0x1b154, 0x1b155, 0x1b163, - 0x1b167, 0x1b16f, 0x1b2fb, 0x1bc9c, 0x1bc9e, 0x1bc9f, 0x1bca3, 0x1ceff, - 0x1cf2d, 0x1cf2f, 0x1cf46, 0x1d166, 0x1d169, 0x1d172, 0x1d182, 0x1d184, - 0x1d18b, 0x1d1a9, 0x1d1ad, 0x1d241, 0x1d244, 0x1d2ff, 0x1d356, 0x1d35f, - 0x1d376, 0x1d9ff, 0x1da36, 0x1da3a, 0x1da6c, 0x1da74, 0x1da75, 0x1da83, - 0x1da84, 0x1da9a, 0x1da9f, 0x1daa0, 0x1daaf, 0x1dfff, 0x1e006, 0x1e007, - 0x1e018, 0x1e01a, 0x1e021, 0x1e022, 0x1e024, 0x1e025, 0x1e02a, 0x1e08e, - 0x1e08f, 0x1e12f, 0x1e136, 0x1e2ad, 0x1e2ae, 0x1e2eb, 0x1e2ef, 0x1e4eb, - 0x1e4ef, 0x1e5ed, 0x1e5ef, 0x1e8cf, 0x1e8d6, 0x1e943, 0x1e94a, 0x1f003, - 0x1f004, 0x1f0ce, 0x1f0cf, 0x1f18d, 0x1f18e, 0x1f190, 0x1f19a, 0x1f1ff, - 0x1f202, 0x1f20f, 0x1f23b, 0x1f23f, 0x1f248, 0x1f24f, 0x1f251, 0x1f25f, - 0x1f265, 0x1f2ff, 0x1f320, 0x1f32c, 0x1f335, 0x1f336, 0x1f37c, 0x1f37d, - 0x1f393, 0x1f39f, 0x1f3ca, 0x1f3ce, 0x1f3d3, 0x1f3df, 0x1f3f0, 0x1f3f3, - 0x1f3f4, 0x1f3f7, 0x1f43e, 0x1f43f, 0x1f440, 0x1f441, 0x1f4fc, 0x1f4fe, - 0x1f53d, 0x1f54a, 0x1f54e, 0x1f54f, 0x1f567, 0x1f579, 0x1f57a, 0x1f594, - 0x1f596, 0x1f5a3, 0x1f5a4, 0x1f5fa, 0x1f64f, 0x1f67f, 0x1f6c5, 0x1f6cb, - 0x1f6cc, 0x1f6cf, 0x1f6d2, 0x1f6d4, 0x1f6d7, 0x1f6db, 0x1f6df, 0x1f6ea, - 0x1f6ec, 0x1f6f3, 0x1f6fc, 0x1f7df, 0x1f7eb, 0x1f7ef, 0x1f7f0, 0x1f90b, - 0x1f93a, 0x1f93b, 0x1f945, 0x1f946, 0x1f9ff, 0x1fa6f, 0x1fa7c, 0x1fa7f, - 0x1fa89, 0x1fa8e, 0x1fac6, 0x1facd, 0x1fadc, 0x1fade, 0x1fae9, 0x1faef, - 0x1faf8, 0x1ffff, 0x2a6df, 0x2a6ff, 0x2b739, 0x2b73f, 0x2b81d, 0x2b81f, - 0x2cea1, 0x2ceaf, 0x2ebe0, 0x2ebef, 0x2ee5d, 0x2f7ff, 0x2fa1d, 0x2ffff, - 0x3134a, 0x3134f, 0x323af, 0xe0000, 0xe0001, 0xe001f, 0xe007f, 0xe00ff, - 0xe01ef, + 0x1a6c, 0x1a72, 0x1a7c, 0x1a7e, 0x1a7f, 0x1aaf, 0x1add, 0x1adf, + 0x1aeb, 0x1aff, 0x1b03, 0x1b33, 0x1b34, 0x1b35, 0x1b3a, 0x1b3b, + 0x1b3c, 0x1b41, 0x1b42, 0x1b6a, 0x1b73, 0x1b7f, 0x1b81, 0x1ba1, + 0x1ba5, 0x1ba7, 0x1ba9, 0x1baa, 0x1bad, 0x1be5, 0x1be6, 0x1be7, + 0x1be9, 0x1bec, 0x1bed, 0x1bee, 0x1bf1, 0x1c2b, 0x1c33, 0x1c35, + 0x1c37, 0x1ccf, 0x1cd2, 0x1cd3, 0x1ce0, 0x1ce1, 0x1ce8, 0x1cec, + 0x1ced, 0x1cf3, 0x1cf4, 0x1cf7, 0x1cf9, 0x1dbf, 0x1dff, 0x200a, + 0x200f, 0x2029, 0x202e, 0x205f, 0x2064, 0x2065, 0x206f, 0x20cf, + 0x20f0, 0x2319, 0x231b, 0x2328, 0x232a, 0x23e8, 0x23ec, 0x23ef, + 0x23f0, 0x23f2, 0x23f3, 0x25fc, 0x25fe, 0x2613, 0x2615, 0x262f, + 0x2637, 0x2647, 0x2653, 0x267e, 0x267f, 0x2689, 0x268f, 0x2692, + 0x2693, 0x26a0, 0x26a1, 0x26a9, 0x26ab, 0x26bc, 0x26be, 0x26c3, + 0x26c5, 0x26cd, 0x26ce, 0x26d3, 0x26d4, 0x26e9, 0x26ea, 0x26f1, + 0x26f3, 0x26f4, 0x26f5, 0x26f9, 0x26fa, 0x26fc, 0x26fd, 0x2704, + 0x2705, 0x2709, 0x270b, 0x2727, 0x2728, 0x274b, 0x274c, 0x274d, + 0x274e, 0x2752, 0x2755, 0x2756, 0x2757, 0x2794, 0x2797, 0x27af, + 0x27b0, 0x27be, 0x27bf, 0x2b1a, 0x2b1c, 0x2b4f, 0x2b50, 0x2b54, + 0x2b55, 0x2cee, 0x2cf1, 0x2d7e, 0x2d7f, 0x2ddf, 0x2dff, 0x2e7f, + 0x2e99, 0x2e9a, 0x2ef3, 0x2eff, 0x2fd5, 0x2fef, 0x3029, 0x302d, + 0x303e, 0x3040, 0x3096, 0x3098, 0x309a, 0x30ff, 0x3104, 0x312f, + 0x3130, 0x3163, 0x3164, 0x318e, 0x318f, 0x31e5, 0x31ee, 0x321e, + 0x321f, 0xa48c, 0xa48f, 0xa4c6, 0xa66e, 0xa672, 0xa673, 0xa67d, + 0xa69d, 0xa69f, 0xa6ef, 0xa6f1, 0xa801, 0xa802, 0xa805, 0xa806, + 0xa80a, 0xa80b, 0xa824, 0xa826, 0xa82b, 0xa82c, 0xa8c3, 0xa8c5, + 0xa8df, 0xa8f1, 0xa8fe, 0xa8ff, 0xa925, 0xa92d, 0xa946, 0xa951, + 0xa95f, 0xa97c, 0xa97f, 0xa982, 0xa9b2, 0xa9b3, 0xa9b5, 0xa9b9, + 0xa9bb, 0xa9bd, 0xa9e4, 0xa9e5, 0xaa28, 0xaa2e, 0xaa30, 0xaa32, + 0xaa34, 0xaa36, 0xaa42, 0xaa43, 0xaa4b, 0xaa4c, 0xaa7b, 0xaa7c, + 0xaaaf, 0xaab0, 0xaab1, 0xaab4, 0xaab6, 0xaab8, 0xaabd, 0xaabf, + 0xaac0, 0xaac1, 0xaaeb, 0xaaed, 0xaaf5, 0xaaf6, 0xabe4, 0xabe5, + 0xabe7, 0xabe8, 0xabec, 0xabed, 0xabff, 0xd7a3, 0xd7af, 0xd7c6, + 0xd7ca, 0xd7fb, 0xf8ff, 0xfa6d, 0xfa6f, 0xfad9, 0xfb1d, 0xfb1e, + 0xfdff, 0xfe0f, 0xfe19, 0xfe1f, 0xfe2f, 0xfe52, 0xfe53, 0xfe66, + 0xfe67, 0xfe6b, 0xfefe, 0xfeff, 0xff00, 0xff60, 0xff9f, 0xffa0, + 0xffdf, 0xffe6, 0x101fc, 0x101fd, 0x102df, 0x102e0, 0x10375, 0x1037a, + 0x10a00, 0x10a03, 0x10a04, 0x10a06, 0x10a0b, 0x10a0f, 0x10a37, 0x10a3a, + 0x10a3e, 0x10a3f, 0x10ae4, 0x10ae6, 0x10d23, 0x10d27, 0x10d68, 0x10d6d, + 0x10eaa, 0x10eac, 0x10ef9, 0x10eff, 0x10f45, 0x10f50, 0x10f81, 0x10f85, + 0x11000, 0x11001, 0x11037, 0x11046, 0x1106f, 0x11070, 0x11072, 0x11074, + 0x1107e, 0x11081, 0x110b2, 0x110b6, 0x110b8, 0x110ba, 0x110c1, 0x110c2, + 0x110ff, 0x11102, 0x11126, 0x1112b, 0x1112c, 0x11134, 0x11172, 0x11173, + 0x1117f, 0x11181, 0x111b5, 0x111be, 0x111c8, 0x111cc, 0x111ce, 0x111cf, + 0x1122e, 0x11231, 0x11233, 0x11234, 0x11235, 0x11237, 0x1123d, 0x1123e, + 0x11240, 0x11241, 0x112de, 0x112df, 0x112e2, 0x112ea, 0x112ff, 0x11301, + 0x1133a, 0x1133c, 0x1133f, 0x11340, 0x11365, 0x1136c, 0x1136f, 0x11374, + 0x113ba, 0x113c0, 0x113cd, 0x113ce, 0x113cf, 0x113d0, 0x113d1, 0x113d2, + 0x113e0, 0x113e2, 0x11437, 0x1143f, 0x11441, 0x11444, 0x11445, 0x11446, + 0x1145d, 0x1145e, 0x114b2, 0x114b8, 0x114b9, 0x114ba, 0x114be, 0x114c0, + 0x114c1, 0x114c3, 0x115b1, 0x115b5, 0x115bb, 0x115bd, 0x115be, 0x115c0, + 0x115db, 0x115dd, 0x11632, 0x1163a, 0x1163c, 0x1163d, 0x1163e, 0x11640, + 0x116aa, 0x116ab, 0x116ac, 0x116ad, 0x116af, 0x116b5, 0x116b6, 0x116b7, + 0x1171c, 0x1171d, 0x1171e, 0x1171f, 0x11721, 0x11725, 0x11726, 0x1172b, + 0x1182e, 0x11837, 0x11838, 0x1183a, 0x1193a, 0x1193c, 0x1193d, 0x1193e, + 0x11942, 0x11943, 0x119d3, 0x119d7, 0x119d9, 0x119db, 0x119df, 0x119e0, + 0x11a00, 0x11a0a, 0x11a32, 0x11a38, 0x11a3a, 0x11a3e, 0x11a46, 0x11a47, + 0x11a50, 0x11a56, 0x11a58, 0x11a5b, 0x11a89, 0x11a96, 0x11a97, 0x11a99, + 0x11b5f, 0x11b60, 0x11b61, 0x11b64, 0x11b65, 0x11b66, 0x11c2f, 0x11c36, + 0x11c37, 0x11c3d, 0x11c3e, 0x11c3f, 0x11c91, 0x11ca7, 0x11ca9, 0x11cb0, + 0x11cb1, 0x11cb3, 0x11cb4, 0x11cb6, 0x11d30, 0x11d36, 0x11d39, 0x11d3a, + 0x11d3b, 0x11d3d, 0x11d3e, 0x11d45, 0x11d46, 0x11d47, 0x11d8f, 0x11d91, + 0x11d94, 0x11d95, 0x11d96, 0x11d97, 0x11ef2, 0x11ef4, 0x11eff, 0x11f01, + 0x11f35, 0x11f3a, 0x11f3f, 0x11f40, 0x11f41, 0x11f42, 0x11f59, 0x11f5a, + 0x1343f, 0x13440, 0x13446, 0x13455, 0x1611d, 0x16129, 0x1612c, 0x1612f, + 0x16aef, 0x16af4, 0x16b2f, 0x16b36, 0x16f4e, 0x16f4f, 0x16f8e, 0x16f92, + 0x16fdf, 0x16fe3, 0x16fe4, 0x16fef, 0x16ff6, 0x16fff, 0x18cd5, 0x18cfe, + 0x18d1e, 0x18d7f, 0x18df2, 0x1afef, 0x1aff3, 0x1aff4, 0x1affb, 0x1affc, + 0x1affe, 0x1afff, 0x1b122, 0x1b131, 0x1b132, 0x1b14f, 0x1b152, 0x1b154, + 0x1b155, 0x1b163, 0x1b167, 0x1b16f, 0x1b2fb, 0x1bc9c, 0x1bc9e, 0x1bc9f, + 0x1bca3, 0x1ceff, 0x1cf2d, 0x1cf2f, 0x1cf46, 0x1d166, 0x1d169, 0x1d172, + 0x1d182, 0x1d184, 0x1d18b, 0x1d1a9, 0x1d1ad, 0x1d241, 0x1d244, 0x1d2ff, + 0x1d356, 0x1d35f, 0x1d376, 0x1d9ff, 0x1da36, 0x1da3a, 0x1da6c, 0x1da74, + 0x1da75, 0x1da83, 0x1da84, 0x1da9a, 0x1da9f, 0x1daa0, 0x1daaf, 0x1dfff, + 0x1e006, 0x1e007, 0x1e018, 0x1e01a, 0x1e021, 0x1e022, 0x1e024, 0x1e025, + 0x1e02a, 0x1e08e, 0x1e08f, 0x1e12f, 0x1e136, 0x1e2ad, 0x1e2ae, 0x1e2eb, + 0x1e2ef, 0x1e4eb, 0x1e4ef, 0x1e5ed, 0x1e5ef, 0x1e6e2, 0x1e6e3, 0x1e6e5, + 0x1e6e6, 0x1e6ed, 0x1e6ef, 0x1e6f4, 0x1e6f5, 0x1e8cf, 0x1e8d6, 0x1e943, + 0x1e94a, 0x1f003, 0x1f004, 0x1f0ce, 0x1f0cf, 0x1f18d, 0x1f18e, 0x1f190, + 0x1f19a, 0x1f1ff, 0x1f202, 0x1f20f, 0x1f23b, 0x1f23f, 0x1f248, 0x1f24f, + 0x1f251, 0x1f25f, 0x1f265, 0x1f2ff, 0x1f320, 0x1f32c, 0x1f335, 0x1f336, + 0x1f37c, 0x1f37d, 0x1f393, 0x1f39f, 0x1f3ca, 0x1f3ce, 0x1f3d3, 0x1f3df, + 0x1f3f0, 0x1f3f3, 0x1f3f4, 0x1f3f7, 0x1f43e, 0x1f43f, 0x1f440, 0x1f441, + 0x1f4fc, 0x1f4fe, 0x1f53d, 0x1f54a, 0x1f54e, 0x1f54f, 0x1f567, 0x1f579, + 0x1f57a, 0x1f594, 0x1f596, 0x1f5a3, 0x1f5a4, 0x1f5fa, 0x1f64f, 0x1f67f, + 0x1f6c5, 0x1f6cb, 0x1f6cc, 0x1f6cf, 0x1f6d2, 0x1f6d4, 0x1f6d8, 0x1f6db, + 0x1f6df, 0x1f6ea, 0x1f6ec, 0x1f6f3, 0x1f6fc, 0x1f7df, 0x1f7eb, 0x1f7ef, + 0x1f7f0, 0x1f90b, 0x1f93a, 0x1f93b, 0x1f945, 0x1f946, 0x1f9ff, 0x1fa6f, + 0x1fa7c, 0x1fa7f, 0x1fa8a, 0x1fa8d, 0x1fac6, 0x1fac7, 0x1fac8, 0x1facc, + 0x1fadc, 0x1fade, 0x1faea, 0x1faee, 0x1faf8, 0x1ffff, 0x2a6df, 0x2a6ff, + 0x2b81d, 0x2b81f, 0x2cead, 0x2ceaf, 0x2ebe0, 0x2ebef, 0x2ee5d, 0x2f7ff, + 0x2fa1d, 0x2ffff, 0x3134a, 0x3134f, 0x33479, 0xe0000, 0xe0001, 0xe001f, + 0xe007f, 0xe00ff, 0xe01ef, }; static const unsigned char wcwidth_widths[] = { @@ -143,15 +145,16 @@ static const unsigned char wcwidth_widths[] = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, + 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, - 2, 1, 2, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 2, 1, 2, 1, 2, 1, 2, 0, 2, 1, - 2, 1, 0, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, - 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 0, + 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 2, 1, 2, 1, 2, 1, 2, 0, + 2, 1, 2, 1, 0, 2, 1, 2, 1, 2, 0, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, - 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 0, 1, 0, 1, 2, - 1, 2, 1, 0, 1, 0, 2, 1, 0, 2, 1, 2, 1, 2, 1, 0, 1, 2, 1, 2, 1, 0, 1, 0, + 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 0, + 1, 0, 1, 2, 1, 2, 1, 0, 1, 0, 2, 1, 0, 2, 1, 2, 1, 2, 1, 0, 1, 2, 1, 0, + 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, @@ -161,14 +164,13 @@ static const unsigned char wcwidth_widths[] = { 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, - 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 0, 1, 2, 1, 2, 1, 2, 1, - 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, + 1, 2, 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, + 2, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, + 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, + 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, - 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 1, 0, 1, - 0, + 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0, }; diff --git a/libcpp/makeucnid.cc b/libcpp/makeucnid.cc index 4ceead25be66..25dfa88af63a 100644 --- a/libcpp/makeucnid.cc +++ b/libcpp/makeucnid.cc @@ -467,7 +467,7 @@ write_copyright (void) .\n\ \n\ \n\ - Copyright (C) 1991-2024 Unicode, Inc. All rights reserved.\n\ + Copyright (C) 1991-2025 Unicode, Inc. All rights reserved.\n\ Distributed under the Terms of Use in\n\ http://www.unicode.org/copyright.html.\n\ \n\ diff --git a/libcpp/makeuname2c.cc b/libcpp/makeuname2c.cc index f9b6957b7116..b05d589b9803 100644 --- a/libcpp/makeuname2c.cc +++ b/libcpp/makeuname2c.cc @@ -83,16 +83,17 @@ static struct generated generated_ranges[] = { "CJK UNIFIED IDEOGRAPH-", 0x3400, 0x4dbf, 0, 1, 0 }, /* NR2 rules */ { "CJK UNIFIED IDEOGRAPH-", 0x4e00, 0x9fff, 0, 1, 0 }, { "CJK UNIFIED IDEOGRAPH-", 0x20000, 0x2a6df, 0, 1, 0 }, - { "CJK UNIFIED IDEOGRAPH-", 0x2a700, 0x2b739, 0, 1, 0 }, + { "CJK UNIFIED IDEOGRAPH-", 0x2a700, 0x2b73f, 0, 1, 0 }, { "CJK UNIFIED IDEOGRAPH-", 0x2b740, 0x2b81d, 0, 1, 0 }, - { "CJK UNIFIED IDEOGRAPH-", 0x2b820, 0x2cea1, 0, 1, 0 }, + { "CJK UNIFIED IDEOGRAPH-", 0x2b820, 0x2cead, 0, 1, 0 }, { "CJK UNIFIED IDEOGRAPH-", 0x2ceb0, 0x2ebe0, 0, 1, 0 }, { "CJK UNIFIED IDEOGRAPH-", 0x2ebf0, 0x2ee5d, 0, 1, 0 }, { "CJK UNIFIED IDEOGRAPH-", 0x30000, 0x3134a, 0, 1, 0 }, { "CJK UNIFIED IDEOGRAPH-", 0x31350, 0x323af, 0, 1, 0 }, + { "CJK UNIFIED IDEOGRAPH-", 0x323b0, 0x33479, 0, 1, 0 }, { "EGYPTIAN HIEROGLYPH-", 0x13460, 0x143fa, 0, 2, 0 }, - { "TANGUT IDEOGRAPH-", 0x17000, 0x187f7, 0, 3, 0 }, - { "TANGUT IDEOGRAPH-", 0x18d00, 0x18d08, 0, 3, 0 }, + { "TANGUT IDEOGRAPH-", 0x17000, 0x187ff, 0, 3, 0 }, + { "TANGUT IDEOGRAPH-", 0x18d00, 0x18d1e, 0, 3, 0 }, { "KHITAN SMALL SCRIPT CHARACTER-", 0x18b00, 0x18cd5, 0, 4, 0 }, { "NUSHU CHARACTER-", 0x1b170, 0x1b2fb, 0, 5, 0 }, { "CJK COMPATIBILITY IDEOGRAPH-", 0xf900, 0xfa6d, 0, 6, 0 }, @@ -671,7 +672,7 @@ write_copyright (void) .\n\ \n\ \n\ - Copyright (C) 1991-2024 Unicode, Inc. All rights reserved.\n\ + Copyright (C) 1991-2025 Unicode, Inc. All rights reserved.\n\ Distributed under the Terms of Use in\n\ http://www.unicode.org/copyright.html.\n\ \n\ @@ -717,7 +718,7 @@ write_dict (void) printf ("static const char uname2c_dict[%ld] =\n", (long) (dict_size + 1)); for (i = 0; i < dict_size; i += 77) - printf ("\"%.77s\"%s\n", dict + i, i + 76 > dict_size ? ";" : ""); + printf ("\"%.77s\"%s\n", dict + i, i + 77 >= dict_size ? ";" : ""); puts (""); } diff --git a/libcpp/ucnid.h b/libcpp/ucnid.h index 26eaca1ba76c..8b6125aca286 100644 --- a/libcpp/ucnid.h +++ b/libcpp/ucnid.h @@ -16,7 +16,7 @@ . - Copyright (C) 1991-2024 Unicode, Inc. All rights reserved. + Copyright (C) 1991-2025 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in http://www.unicode.org/copyright.html. @@ -440,7 +440,7 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x086f }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x0887 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0888 }, -{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x088e }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x088f }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0896 }, { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x0898 }, { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x089b }, @@ -718,7 +718,7 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC|CTX, 91, 0x0c56 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c57 }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x0c5a }, -{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c5c }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c5b }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x0c5d }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c5f }, { C99| 0|CXX|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x0c61 }, @@ -756,7 +756,7 @@ static const struct ucnrange ucnranges[] = { { C99| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 9, 0x0ccd }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0cd4 }, { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC|CTX, 0, 0x0cd6 }, -{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0cdc }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0cdb }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x0cdd }, { C99| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x0cde }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0cdf }, @@ -1160,7 +1160,13 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x1ac4 }, { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1ac9 }, { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x1aca }, -{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1ace }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1adc }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x1add }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1adf }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1ae5 }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x1ae6 }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1aea }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 234, 0x1aeb }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1aff }, { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x1b04 }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1b05 }, @@ -1678,14 +1684,8 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC| 0| 0, 0, 0xa770 }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0xa788 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0xa78a }, -{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0xa7cd }, -{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0xa7cf }, -{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0xa7d1 }, -{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0xa7d2 }, -{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0xa7d3 }, -{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0xa7d4 }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0xa7dc }, -{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0xa7f1 }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0xa7f0 }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC| 0| 0, 0, 0xa7f4 }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0xa7f7 }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC| 0| 0, 0, 0xa7f9 }, @@ -2035,6 +2035,8 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10915 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1091f }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10939 }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1093f }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10959 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1097f }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x109b7 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x109bd }, @@ -2103,8 +2105,9 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x10eaf }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10eb1 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x10ec1 }, -{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10ec4 }, -{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x10efb }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10ec7 }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x10ef9 }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x10efb }, { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x10efc }, { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x10eff }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10f1c }, @@ -2426,6 +2429,8 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x11a9d }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x11aaf }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x11af8 }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x11b5f }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x11b67 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x11bbf }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x11be0 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x11bef }, @@ -2482,6 +2487,10 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x11d98 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x11d9f }, { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x11da9 }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x11daf }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x11ddb }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x11ddf }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x11de9 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x11edf }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x11ef2 }, { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x11ef6 }, @@ -2561,6 +2570,10 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x16d79 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x16e3f }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x16e7f }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x16e9f }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x16eb8 }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x16eba }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x16ed3 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x16eff }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x16f4a }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x16f4e }, @@ -2577,12 +2590,13 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x16fe4 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x16fef }, { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 6, 0x16ff1 }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x16ff6 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x16fff }, -{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x187f7 }, -{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x187ff }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x18cd5 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x18cfe }, -{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x18d08 }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x18d1e }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x18d7f }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x18df2 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1afef }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1aff3 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1aff4 }, @@ -2757,6 +2771,19 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x1e5ef }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1e5f0 }, { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x1e5fa }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1e6bf }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1e6de }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1e6df }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1e6e2 }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1e6e3 }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1e6e5 }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1e6e6 }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1e6ed }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1e6ef }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1e6f4 }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1e6f5 }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1e6fd }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1e6ff }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1e7df }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1e7e6 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1e7e7 }, @@ -2866,11 +2893,9 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0| 0| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1ffff }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x2a6df }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2a6ff }, -{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x2b739 }, -{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2b73f }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x2b81d }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2b81f }, -{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x2cea1 }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x2cead }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2ceaf }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x2ebe0 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2ebef }, @@ -2881,7 +2906,7 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0| 0| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2ffff }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x3134a }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x3134f }, -{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x323af }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x33479 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x3fffd }, { 0| 0| 0| 0| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x3ffff }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x4fffd }, diff --git a/libcpp/uname2c.h b/libcpp/uname2c.h index 04890a76fb51..a10e7be60e65 100644 --- a/libcpp/uname2c.h +++ b/libcpp/uname2c.h @@ -16,7 +16,7 @@ . - Copyright (C) 1991-2024 Unicode, Inc. All rights reserved. + Copyright (C) 1991-2025 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in http://www.unicode.org/copyright.html. @@ -52,7 +52,7 @@ use or other dealings in these Data Files or Software without prior written authorization of the copyright holder. */ -static const char uname2c_dict[61913] = +static const char uname2c_dict[62755] = "DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BARUIGHUR KIRGHIZ " "YEH WITH HAMZA ABOVE WITH ALEF MAKSURA LANTED EQUAL ABOVE GREATER-THAN ABOVE " "SLANTED EQUAL WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVELANTED EQUAL A" @@ -62,3743 +62,3854 @@ static const char uname2c_dict[61913] = "NWARDS EQUILATERAL ARROWHEADLEFTWARDS OF DOWNWARDS TRIANGLE-HEADED ARROWOVER " "KASKAL LAGAB TIMES U OVER LAGAB TIMES URIGHT-LIGHTED UPWARDS EQUILATERAL ARRO" "WHEADUPPER CENTRE TO MIDDLE LEFT TO LOWER CENTREUPPER RIGHT-SHADOWED WHITE RI" -"GHTWARDS ARROWJUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLEJUSTIFIED UPPER RIGHT" -" QUARTER BLACK CIRCLELA USED AS KORANIC STOP SIGN ISOLATED FORMLEFTWARDS OF U" -"PWARDS TRIANGLE-HEADED ARROWLOWER LEFT TO MIDDLE CENTRE TO LOWER RIGHTOWER RI" -"GHT-SHADOWED WHITE RIGHTWARDS ARROW OVER HI TIMES ASH2 KU OVER HI TIMES ASH2A" -"ND RIGHT TRIANGULAR THREE QUARTERS BLOCKINVERSE MEDIUM SHADE AND RIGHT HALF B" -"LOCKJUSTIFIED LOWER LEFT QUARTER BLACK CIRCLEJUSTIFIED UPPER LEFT QUARTER BLA" -"CK CIRCLEULTIPLICATION SIGN WITH CIRCUMFLEX ACCENTDOWNWARDS AND UPWARDS OPEN " -"CIRCLE ARROWSLOW DOUBLE COMMA QUOTATION MARK ORNAMENTVERTICAL BAR AT END OF H" -"ORIZONTAL STROKE-TILTED SHADOWED WHITE RIGHTWARDS ARROWABOVE RIGHTWARDS HARPO" -"ON WITH BARB DOWNASH FROM LEFT MEMBER OF DOUBLE VERTICALNEGATIVE SQUARED LATI" -"N CAPITAL LETTER PWITH OPEN ARM ENDING IN ARROW POINTING -HEADED ARROW WITH T" -"RIANGLE ARROWHEADSABOVE LEFTWARDS HARPOON WITH BARB DOWNAL WITH SUPERSCRIPT A" -"LEF ISOLATED FORMASHED TRIANGLE-HEADED RIGHTWARDS ARROWEH WITH SUPERSCRIPT AL" -"EF ISOLATED FORMEXTENDED ARABIC-INDIC DIGIT FOUR ABOVEEXTENDED ARABIC-INDIC D" -"IGIT FOUR BELOWIANGLE CONTAINING SMALL WHITE TRIANGLERIGHTWARDS ARROW ABOVE L" -"EFTWARDS ARROWURNED SWIRL BIRGA WITH DOUBLE ORNAMENTWARDS AND LEFTWARDS OPEN " -"CIRCLE ARROWS WITH MONITOR IN PORTRAIT ORIENTATIONHORIZONTAL LINE WITH THREE " -"TICK MARKSIOUS FACE WITH SYMBOLS COVERING MOUTHONCAVE-POINTED BLACK RIGHTWARD" -"S ARROWOVER RIGHTWARDS TRIANGLE-HEADED ARROWSMALL LETTER BYELORUSSIAN-UKRAINI" -"AN I AND LOWER HALF INVERSE MEDIUM SHADE WITH HORIZONTAL MIDDLE BLACK STRIPED" -"OUBLE-LINE EQUAL ABOVE GREATER-THANGREATER-THAN ABOVE DOUBLE-LINE EQUALIGHT T" -"ORTOISE SHELL BRACKET ORNAMENTLEFT TORTOISE SHELL BRACKET ORNAMENTOVER LEFTWA" -"RDS TRIANGLE-HEADED ARROWPART BETWEEN MIDDLE AND RING FINGERSSINGLE COMMA QUO" -"TATION MARK ORNAMENTSMALL ARABIC LETTER TAH AND TWO DOTSTURNED COMMA QUOTATIO" -"N MARK ORNAMENTZENGE CONTAINING BLACK SMALL LOZENGE CONTAINING BLACK VERY SMA" -"LL SQUAREBESIDE AND JOINED WITH INTERSECTIONBOTTOM-LIGHTED RIGHTWARDS ARROWHE" -"ADGVEDIC KASHMIRI INDEPENDENT SVARITAND UPPER AND LOWER ONE EIGHTH BLOCKORNER" -" ARROWS CIRCLING ANTICLOCKWISEOUNDED HIGH STOP WITH FILLED CENTRER LOWER RIGH" -"T CURLY BRACKET SECTIONRIGHT-POINTING ANGLE QUOTATION MARKTWO HORIZONTAL STRO" -"KES TO THE RIGHTVERTICAL LINE WITH THREE TICK MARKS TWO DOTS OVER ONE DOT PUN" -"CTUATIONBLACK LEFT-POINTING SMALL TRIANGLEDOWNWARDS ARROW WITH TIP LEFTWARDSI" -"GHUR KAZAKH KIRGHIZ ALEF MAKSURA MODIFIER LETTER LABIALIZATION MARKOVER IGI S" -"HIR OVER SHIR UD OVER UDOVER TAB NI OVER NI DISH OVER DISHPPROXIMATELY NOR AC" -"TUALLY EQUAL TOR LOWER LEFT CURLY BRACKET SECTIONTEARDROP-SPOKED PROPELLER AS" -"TERISKUPPER BODY TILTING FROM HIP JOINTSALL BUT UPPER LEFT QUADRANT BLACKDIRE" -"CT PRODUCT WITH BOTTOM CLOSEDDOUBLE-LINE EQUAL ABOVE LESS-THANDOWNWARDS HARPO" -"ON WITH BARB RIGHTEFT-POINTING ANGLE QUOTATION MARKLESS-THAN ABOVE DOUBLE-LIN" -"E EQUALLLAR SIGN WITH OVERLAID BACKSLASHMEDIUM SHADE AND LOWER HALF BLOCKRAIS" -"ING BOTH HANDS IN CELEBRATIONTROFLEX CLICK WITH RETROFLEX HOOKTRONG CENTRALIZ" -"ATION STROKE BELOWTUG2 OVER TUG2 TUG2 OVER TUG2 PAPTWO DOTS ABOVE AND TWO DOT" -"S BELOWWARDS HARPOON WITH BARB DOWNWARDS-POINTING ANGLE BRACKET ORNAMENTAND M" -"IDDLE RIGHT TO LOWER CENTREATHARVAVEDIC INDEPENDENT SVARITAETALLED BLACK AND " -"WHITE FLORETTEHAND WITH MIDDLE FINGER EXTENDEDNORMAL FACTOR SEMIDIRECT PRODUC" -"TRIANGLE-HEADED OPEN CIRCLE ARROWRIGHT SEMICIRCLE WITH THREE DOTSRONT-TILTED " -"SHADOWED WHITE ARROWSEMICIRCULAR ANTICLOCKWISE ARROWVED STEM PARAGRAPH SIGN O" -"RNAMENT CROSSING ASH OVER ASH OVER ASHACK-TILTED SHADOWED WHITE ARROWAISED HA" -"ND WITH FINGERS SPLAYEDAND MIDDLE LEFT TO LOWER CENTREETALLED OUTLINED BLACK " -"FLORETTEIN WHITE CIRCLE IN BLACK SQUARELEFTWARDS EQUILATERAL ARROWHEADONE HUN" -"DRED THIRTY-FIVE DEGREESRIGHTWARDS HARPOON WITH BARB UPRING OVER TWO RINGS PU" -"NCTUATIONRINGS OVER ONE RING PUNCTUATIONTNAMESE ALTERNATE READING MARK UPWARD" -"S HARPOON WITH BARB RIGHT CONTAINING BLACK SMALL SQUARE-HIRAGANA PROLONGED SO" -"UND MARKAGGRAVATED INDEPENDENT SVARITAAND JOINED BY DASH WITH SUBSETDOT BELOW" -" AND THREE DOTS ABOVEDOWNWARDS AND RIGHTWARDS ARROWEART EXCLAMATION MARK ORNA" -"MENTEFT SEMICIRCLE WITH THREE DOTSGHT FOUR POINTED PINWHEEL STARGREATER-THAN " -"ABOVE EQUALS SIGNHIGH-REVERSED-9 QUOTATION MARKHT CENTRALIZATION STROKE BELOW" -"INDEX THUMB CURVE THUMB INSIDEMAKSURA WITH SUPERSCRIPT ALEF MINTON RACQUET AN" -"D SHUTTLECOCKMODIFIER LETTER LEFT HALF RINGON WITH RIGHTWARDS ARROW ABOVEOPEN" -" CENTRE EIGHT POINTED STARQAF WITH LAM WITH ALEF MAKSURARECTANGULAR CHECKER B" -"OARD FORMSAD WITH LAM WITH ALEF MAKSURA DOWN INDEX THUMB HOOK MIDDLE OVER RIG" -"HTWARDS ARROW TO BAR WITH REVERSED NEGATION SLASHCKED FACE WITH EXPLODING HEA" -"DCONTAINING BLACK SMALL CIRCLEDOT OVER TWO DOTS PUNCTUATIONDOWN HEAVY AND RIG" -"HT UP LIGHTDOWN MIDDLE THUMB INDEX CROSSEFTWARDS HARPOON WITH BARB UPEVERSED " -"LUNATE EPSILON SYMBOLEXTENDED ARABIC-INDIC DIGIT TLIGHT FOUR POINTED BLACK CU" -"SPNS-SERIF INTERROBANG ORNAMENTOMBINING ANUSVARA ABOVE RIGHTONAL INDICATOR SY" -"MBOL LETTER PUNCTUATION CHINOOK FULL STOPSEMICIRCULAR PATH AROUND POLESUPERSC" -"RIPT ALEF INITIAL FORMUP HEAVY AND RIGHT DOWN LIGHTWITH RIGHTWARDS ARROW AT L" -"EFTACE DIRECTION POSITION NOSE ASTERISKS ALIGNED VERTICALLYBESIDE AND JOINED " -"WITH UNIONDOUBLE ANUSVARA ANTARGOMUKHADOWN HEAVY AND LEFT UP LIGHTEDGE-TAILED" -" RIGHTWARDS ARROWEFT ARC GREATER-THAN BRACKETFTING POINT RIGHTWARDS ARROWHADE" -"D WHITE RIGHTWARDS ARROWHREE HUNDRED FIFTEEN DEGREESIBE SYLLABLE BOUNDARY MAR" -"KERISMILLAH AR-RAHMAN AR-RAHEEMLEFTWARDS OF DOWNWARDS ARROWLIQUID MEASURE FIR" -"ST SUBUNITMIDDLE CENTRE TO UPPER RIGHTMIDDLE RING LITTLE CONJOINEDMONOGRAMMOS" -" TESSERA DODEKATAOUND-TIPPED RIGHTWARDS ARROWRECTANGULAR PATH AROUND POLESALT" -"IRE WITH ROUNDED CORNERST LITTER IN ITS PLACE SYMBOLU ALAYHI WAAALIHEE WA-SAL" -"LAMUP HEAVY AND LEFT DOWN LIGHTUPPER CENTRE TO MIDDLE RIGHTUPWARDS AND RIGHTW" -"ARDS ARROW AND LEFT SEMICIRCLE ARROWS BARREE WITH TWO DOTS BELOW DIVIDED BY H" -"ORIZONTAL RULE-FEATHERED RIGHTWARDS ARROWAND UPPER HALF WHITE CIRCLEBETWEEN T" -"WO HORIZONTAL BARSBRDA RNYING YIG MGO MDUN MABRDA RNYING YIG MGO SGAB MACIRCL" -"E WITH NORTHWEST ARROWCONTINUOUS UNDERLINE SYMBOLDOUBLE PRIME QUOTATION MARKE" -"AVY WHITE RIGHTWARDS ARROWEMICIRCULAR CLOCKWISE ARROWENTATION FORM FOR VERTIC" -"AL FINGER COVERING CLOSED LIPSFOUR FINGERS CONJOINED BENTHANDED INTERLACED PE" -"NTAGRAMHEAD MARK WITH MOON AND SUNIDE ARC ANTICLOCKWISE ARROWIDE-HEADED RIGHT" -"WARDS ARROWIMPERFECTUM CUM PROLATIONE KATHAKA INDEPENDENT SVARITALARGE EQUILA" -"TERAL ARROWHEADLESS-THAN ABOVE EQUALS SIGNLIGHT CENTRALIZATION STROKELOWER MI" -"DDLE LEFT TO LOWER LOWER TONAL RANGE INDICATORONE LARGE AND ONE SMALL EYEOUR " -"BALLOON-SPOKED ASTERISKPHARYNGEAL VOICED FRICATIVEPPY PERSON RAISING ONE HAND" -"RIANGULAR ONE QUARTER BLOCKRIGHT ARC LESS-THAN BRACKETRIPLE VERTICAL BAR OPER" -"ATORSTRUMENTAL NOTATION SYMBOL-TALIC LATIN CAPITAL LETTER TWO HUNDRED SEVENTY" -" DEGREESUPPER CENTRE TO LOWER RIGHTUPPER MIDDLE LEFT TO UPPER WALLPLANE SHOUL" -"DER HIP MOVEWO DOTS BELOW AND DOT ABOVEZERO FOR ODD POWERS OF FOUR GAD OVER G" -"AD GAR OVER GAR LESS THAN THE DENOMINATOR NEGATED WITH VERTICAL BAR OR APPROX" -"IMATELY EQUAL TO WITHIN TRIANGLE ARROWHEADALEF MAKSURA ISOLATED FORMAND LEFT " -"HALF WHITE CIRCLEAND MIDDLE FINGERS CROSSEDAND RIGHT ONE EIGHTH BLOCKBLE TENN" -"IS PADDLE AND BALLCAT FACE WITH SMILING EYESCLOCKWISE ARROW WITH MINUSCRIPT L" -"IGATURE ET ORNAMENTDOTTED LUNATE SIGMA SYMBOLDOTTED SUBSTITUTION MARKERDROP-S" -"HADOWED WHITE SQUAREE ONE-WAY LEFT WAY TRAFFICERSTRASS ELLIPTIC FUNCTIONHTORA" -" SKLIRON CHROMA VASISIDEOGRAPHIC ITERATION MARKINDUSTRIAL STANDARD SYMBOLJECT" -" REPLACEMENT CHARACTERLANTED SOUTH ARROW WITH HOLEFTWARDS OF UPWARDS ARROWLIN" -"E FEED SEPARATOR SYMBOLLLALLAHOU ALAYHE WASSALLAMMARRIED PARTNERSHIP SYMBOLME" -"EM WITH HAH WITH TATWEELMODIFIER FITZPATRICK TYPE-OCKED FEMALE AND MALE SIGNO" -"NOMICAL SYMBOL FOR URANUSOORPLANE SHOULDER HIP MOVEORTHOGONAL CROSSHATCH FILL" -"OTATED FLORAL HEART BULLETOUBLE ANGLE QUOTATION MARKRIGHT PARENTHESIS ORNAMEN" -"TRINGS ALIGNED HORIZONTALLYRIPLE DOT PUNCTUATION MARKSSIAN ASTROLOGICAL SYMBO" -"L THREE DOTS ABOVE DOWNWARDSU REVERSED OVER U REVERSEDUNEVEN EYES AND WAVY MO" -"UTHWHITE RIGHT POINTING INDEXWITH LEFTWARDS ARROW ABOVEYAJURVEDIC MIDLINE SVA" -"RITA OVER NUN LAGAR TIMES SAL WITH CIRCLED ONE OVERLAY WITH DOUBLE GRAVE ACCE" -"NT WITH DOUBLE MIDDLE TILDE WITH DOUBLE VERTICAL BARBREVE WITH INVERTED BREVE" -"BUT NOT ACTUALLY EQUAL TOCAT FACE WITH CLOSED EYESCROSSING NORTH EAST ARROWDI" -"AERESIS AND HOOK SYMBOLDOUBLE CANDRABINDU VIRAMADRY MEASURE FIRST SUBUNITELD " -"HOCKEY STICK AND BALLFECTIVENESS OR DISTORTIONFFICULTY AT THE BEGINNINGING ON" -" THE FLOOR LAUGHINGINVERTED EXCLAMATION MARKLEFT PARENTHESIS ORNAMENTLEFTWARD" -"S ARROW WITH HOOKLOW QUILT SQUARE ORNAMENTMBINING CRYPTOGRAMMIC DOTMEDIUM TRI" -"ANGLE ARROWHEADMULTIPLICATION SIGN BELOWNIVERSAL RECYCLING SYMBOLOLD ASSYRIAN" -" WORD DIVIDERONE UNDER EIGHTEEN SYMBOLOUBLE BIRGA WITH ORNAMENTOUTLINED RIGHT" -"WARDS ARROWRANCH BANK IDENTIFICATIONREE-HUNDRED-AND-TWENTIETHRIGHT DIAGONAL H" -"ALF BLACKRIGHT ONE SIXTEENTH BLOCKRIPLE BIRGA WITH ORNAMENTRIST CIRCLE HITTIN" -"G WALL SQUARE CHECKER BOARD FORMSTROKE AND TWO DOTS ABOVETAB OVER TAB GAR OVE" -"R GARTERNION INTEGRAL OPERATORTTED SUBSTITUTION BRACKET OVER TOP SQUARE BRACK" -"ET POINTING BACKHAND INDEXALTERNATE SECTION MARKERAND MALE AND FEMALE SIGNARM" -" CIRCLE HITTING WALL ARROW POINTING DIRECTLY BERKANAN BEORC BJARKAN BBLACK LE" -"NTICULAR BRACKETBLIC ADDRESS LOUDSPEAKERBUSINESS SUIT LEVITATINGCOMPATIBILITY" -" IDEOGRAPH-CONSECUTIVE EQUALS SIGNSCULINE ORDINAL INDICATORDESCENDING MUSICAL" -" NOTESDIAGONAL CROSSHATCH FILLDOUBLE HORIZONTAL STROKEDOWNSCALING FACTOR KIIZ" -"HE PLUS A PLUS SU PLUS NAEASTERN PWO KAREN DIGIT EQUAL TO OR GREATER-THANEYES" -" AND HAND OVER MOUTHFINGER AND THUMB CROSSEDGLOTTAL STOP WITH STROKEGREATER-T" -"HAN OR EQUAL TOHEAVY BLACK HEART BULLETIGATURE OPEN ET ORNAMENTING FACE WITH " -"OPEN MOUTHINTERSECTION WITH SERIFSISOSCELES RIGHT TRIANGLELARGE TRIANGLE ARRO" -"WHEADLEFT DIAGONAL HALF BLACKLEFT ONE SIXTEENTH BLOCKLICATION PROGRAM COMMAND" -"LINE HORIZONTAL ELLIPSISLY-RECYCLED PAPER SYMBOLMALL CIRCLE TO THE RIGHTMALL " -"LEFT SQUARE BRACKETMTAVRULI CAPITAL LETTER ONE-HUNDRED-AND-SIXTIETHORIZONTAL " -"BAR WITH NOTCHOTTOM SHADED WHITE ARROWOTTOM-SHADED WHITE ARROWPERSCRIPT ALEF " -"MOKHASSASPOINTING DOWNWARDS ABOVEREVERSED NINE-LIKE BHALERIGHTWARDS THEN CURV" -"ING SINGLE-LINE NOT EQUAL TOSTROKE THROUGH DESCENDERSYLLABLE REPETITION MARKT" -" BLACK RIGHTWARDS ARROWTEARDROP-SPOKED ASTERISKTED INTERPOLATION MARKERUPRIGH" -"T RECTANGULAR ZEROUPWARD POINTING TRIANGLEVOICED LARYNGEAL SPIRANTWELVE POINT" -"ED BLACK STARWITH CANCELLATION STROKEWITH UPWARDS ARROW ABOVEWO DOTS VERTICAL" -"LY ABOVEWO DOTS VERTICALLY BELOW CAKE WITH SWIRL DESIGN HUNDRED TWENTY-EIGHTH" -" POINTING AT THE VIEWER ROTATED NINETY DEGREES WITH HALF-CIRCLE BELOWALEF MA" -"KSURA FINAL FORMALGAMATION OR COPRODUCTAND WOMAN HOLDING HANDSANG DEPARTING T" -"ONE MARKARABIC LETTER TAH ABOVEARTY HORN AND PARTY HATASCENDING MUSICAL NOTES" -"ATTACHING VERTICAL OMETAVOURING DELICIOUS FOODBARBED RIGHTWARDS ARROWCIRCUMFL" -"EX ACCENT ABOVECLUSTER-INITIAL LETTER CURRENT SYMBOL FORM TWODOT BELOW AND DO" -"T ABOVEDOWNWARDS THEN CURVING ESS OUTLINED WHITE STARFACING SNAKE HEAD WITH G" -"REEK SMALL LETTER IOTAHANKED RIGHTWARDS ARROWHREE POINTED BLACK STARHT TRIFOL" -"IATE SNOWFLAKEIDE ARC CLOCKWISE ARROWIGHT-SHADED WHITE ARROWININE ORDINAL IND" -"ICATORISTED RIGHTWARDS ARROWSIVE FINGERS SPREAD OPENLEFT-SHADED WHITE ARROWLO" -"WER ONE QUARTER BLOCKLSCHREIBER PAUSE SYMBOLMITIAN CONJUGATE MATRIXORAH WITH " -"NINE BRANCHESORIGINAL OF OR EQUAL TOORIZONTAL RULER SEGMENTOVER RIGHTWARDS HA" -"RPOONOVERLAPPING LOGICAL ANDP WITH EXCLAMATION MARKPA OVER PA GAR OVER GARPUN" -"CTUATION END OF TEXTRAISED OMISSION BRACKETREE VARIATION SELECTOR RIGHT DIAGO" -"NAL ELLIPSISRIGHT HORIZONTAL SECANTRIGHT ONE QUARTER BLOCKRIGHT-POINTING TRIA" -"NGLERTOISE SHELL BRACKETED SHAPE WITH A DOT INSIDESING DIAGONAL CROSSING SOLI" -"DUS BINARY RELATIONUBLE VERTICAL BAR BELOWUP SPREAD THUMB FORWARDUPPER ONE QU" -"ARTER BLOCKUPWARDS THEN NORTH WESTVERTICAL BISECTING LINEWESTERN PWO KAREN TO" -"NE-WHITE FOUR POINTED CUSPWO-WAY LEFT WAY TRAFFICZANTINE MUSICAL SYMBOL OVER" -" STAMPED ENVELOPE RIGHT ARROWHEAD ABOVE SYMBOL FOR LIGHTHOUSE WITH CIRCUMFLEX" -" ABOVE WITH DECORATIVE COVER WITH SINGLE ZAPYATAYA WITH THREE DOTS ABOVE-ROTA" -"TED DIVISION SIGNACKSLANTED SOUTH ARROWARMENIAN ETERNITY SIGNBAR ABOVE INTERS" -"ECTIONCJK UNIFIED IDEOGRAPH-CONSONANT MODIFIER BARCONSONANT SIGN MEDIAL CURLY" -" BRACKET ORNAMENTDOMAIN ANTIRESTRICTIONDOUBLE SOLIDUS OVERLAYDOUBLE VERTICAL " -"STROKEDOUBLE-LINED HEAD MARKDOWN-POINTING TRIANGLEDOWNWARDS ZIGZAG ARROWDRESS" -"ED TO THE SUBJECTEAST-POINTING AIRPLANEGREATER-THAN DIAERESISHEXIFORM LONG AN" -"USVARAHORT HORIZONTAL STROKEI YFESIS TETARTIMORIONIGEL LONG-BRANCH-SOL SIN DE" -"PARTING TONE MARKINDIRECT QUESTION MARKING HEAD IN SILHOUETTEINVERTED SMALL V" -" ABOVEINVERTED SMALL V BELOWKEEPING STILL MOUNTAINLATIN CAPITAL LETTER SLE BE" -"SIDE VERTICAL BARLEFT ONE QUARTER BLOCKLEFT TRIANGLE OPERATORLEFT-POINTING TR" -"IANGLELONG HORIZONTAL STROKELOW PARAPHRASE BRACKETMNYAM YIG GI MGO RGYANND RE" -"CORDING COPYRIGHTNOT INCLUDING THE POLEOVER LEFTWARDS HARPOONOVER NU11 BUR OV" -"ER BUROVER SHIR BUR OVER BURPERSET OF NOR EQUAL TOPOINTING UPWARDS BELOWPRECE" -"DED BY APOSTROPHEPUNCTUATION KUNDDALIYAQUESTION MARK ORNAMENTREASE FONT SIZE " -"SYMBOLRECTILINEAR BLACK STARREE-CIRCLE ALTERNATE IRIGHT-POINTING FLEURONROUND" -" A POINT OPERATORRROW WITH ROUNDED HEADSEMI-VOICED SOUND MARKSHORT RIGHTWARDS" -" ARROWSHORT VERTICAL STROKESSYMPTOTICALLY EQUAL TOTRIPLE DASH HORIZONTALTRIPL" -"E RIGHT TURNSTILETRIPLE VERTICAL STROKEUBSCRIPT SMALL LETTER UPPER ONE EIGHTH" -" BLOCKUPPER RIGHT AND LOWER USTOMER ACCOUNT NUMBERWASALLAM ISOLATED FORMWITH " -"HORIZONTAL STROKEWITH JEEM INITIAL FORMWITH VOICED SOUND MARKYIAKENG PUACHUE " -"HMONG AND SLANTED PARALLEL WITH SHORT RIGHT LEG WITH VERTICAL STROKE-ROUND N" -"OTEHEAD DOWN -SHAPED BAG DELIMITERABOVE SHORT DOWN TACKACUTE AND HOOK SYMBOLA" -"KIA TELOUS ICHIMATOSALLING DIAGONAL SLASHAND VOWEL LENGTH MARKARD SHELL FLOPP" -"Y DISKARKENING OF THE LIGHTARYSTIAN FIVE HUNDREDBESIDE RIGHT TRIANGLEBOTTOM A" -"ND LOWER LEFTBOTTOM U-SHAPED ARROWBUT NOT EQUIVALENT TOCROSSE STICK AND BALLC" -"RUCIFORM NUMBER FOURCTOR OR CROSS PRODUCTDELIMITER TSHEG BSTARDIGRAMMOS EX DO" -"DEKATADOUBLE LEFT TURNSTILEDOWN HORIZONTAL HEAVYDOWN HORIZONTAL LIGHTDOWNWARD" -"S ARROW ABOVEEFT HORIZONTAL SECANTEFT OPEN BOX OPERATOREIGHT SPOKED ASTERISKE" -"LATIONAL COMPOSITIONEQUAL TO OR LESS-THANER RIGHT CORNER ANGLEFINAL CONSONANT" -" SIGN FLATTENED PARENTHESISGHT OPEN BOX OPERATORGRAMMOS OKTO DODEKATAGRUENT W" -"ITH DOT ABOVEHALF TRIANGULAR COLONHAND INTERIOR PRODUCTHOCKEY STICK AND PUCKH" -"ORIZONTAL REFLECTIONHORIZONTAL TABULATIONHOUSAND MILLIONS SIGNINTERSECTING LO" -"GICAL INTERSECTION OPERATORINVERTED BRIDGE BELOWINVERTED GLOTTAL STOPJUSTIFIE" -"D LOWER HALF JUSTIFIED RIGHT HALF JUSTIFIED UPPER HALF LATTENED OPEN A ABOVEL" -"ESS-THAN OR EQUAL TOLETTER SMALL CAPITAL MALE WITH STROKE SIGNMIDDLE RING LIT" -"TLE ONMORPHOLOGICAL DIVIDERND TELEPHONE RECEIVEROCAL NOTATION SYMBOL-OHAMMAD " -"ISOLATED FORMOP SHADED WHITE ARROWOPPOSING AN PLUS NAGAPAP PLUS PAP PLUS LU3R" -"ATING SYSTEM COMMANDRELICT HOUSE BUILDINGREVERSED FEATHER MARKRIGHT QUARTER S" -"ECTIONRISING DIAGONAL SLASHSH AMPERSAND ORNAMENTSHORT LEFTWARDS ARROWSIDE TO " -"SIDE SCISSORSTEEN POINTED ASTERISKTHICK LETTER SELECTORTILDE OPERATOR ABOVE T" -"OUCHING INSIDE MOUTHTRIANGULAR HALF BLOCKUPPER QUARTER SECTIONVERTICAL LINE O" -"VERLAYVERY HEAVY BARB ARROWVOICED ITERATION MARKWITH INVERTED V ABOVEWO-CIRCL" -"E ALTERNATE IWO-CIRCLE NUKTA ABOVEXTRA SHORT VOWEL MARKYIG MGO TSHEG SHAD MA " -"ABOVE LEFT TRIANGLE AND DIAGONAL STROKE BEGIN LOGOGRAM MARK OVER LAGAR GUNU S" -"HE OVER TUR ZA OVER ZA WITH HORIZONTAL BAR WITH INVERTED INPUT79 OVER LAK-079" -" GUNUA- SHOG GI MGO RGYANAISED UPPER LEFT ARCAND NORTH EAST ARROWAND NORTH WE" -"ST ARROWAND SOUTH EAST ARROWAND SOUTH WEST ARROWANGE ANTIRESTRICTIONARXIS KAI" -" FTHORA VOUBETWEEN PALM FACINGSBSET OF NOR EQUAL TOCENTRE VERTICAL LINECHARAC" -"TER INTRODUCERCHEMICAL SYMBOL FOR CONSONANT SIGN HAARUCRESCENT MOON SYMBOLCUR" -"RENCY SYMBOL RIELCURVED ANGLE BRACKETDOTLESS HEAD OF KHAHDOUBLE ANGLE BRACKET" -"DOUBLE DOT TONE MARKDOWN ARROWHEAD BELOWE CONSONANT MODIFIERE POINTED WHITE S" -"TAREMESTVENNY ZADERZHKAENARMONIOS ANTIFONIAEVERSED ROTATED RANAFINAL CONSONAN" -"T MARKFIVE SPOKED ASTERISKFORMS LIGHT VERTICALFOUR RAISED KNUCKLESGHTWARDS AR" -"ROW BELOWGRA GCAN -CHAR RTAGSHALF CIRCLE WITH DOTHAR2 TIMES GAL PLUS HIGH RAT" -"HA OR LOW PAHIGH TONE APOSTROPHEHREE-DOT NUKTA ABOVEIMAGE OF OR EQUAL TOINDEX" -" RING LITTLE ONINING OBLIQUE STROKEINSIDE MOUTH RELAXEDINVERSE WHITE CIRCLEIN" -"VERTED CANDRABINDUIRCLES HITTING WALL JUDEO-SPANISH VARIKAJUSTIFIED LEFT HALF" -" KHAMTI REDUPLICATIONL FUNCTIONAL SYMBOL LAILING ROBOT FRAME-LATALIZED HOOK B" -"ELOWLE WITH POPPING CORKLEFT AND LOWER RIGHTLEFT-TO-RIGHT SECANTMULTIPLE PUNC" -"TUATIONNIS RACQUET AND BALLONCAVE-SIDED DIAMONDONE MARK SGAW KAREN OTLESS J W" -"ITH STROKEOVER LEFTWARDS ARROWOWER QUARTER SECTIONPLUS GISH TIMES TAK4POTABLE" -" WATER SYMBOLREAN STANDARD SYMBOLREVERSED ONE HUNDREDRIGHT ANGLE WITH DOTRIGH" -"T QUADRANT BLACKRIGHT U-SHAPED ARROWRUMAI PALAUNG TONE-5SCRIPTION CHARACTER S" -"EPARATOR KEY SYMBOLSEPARATOR MIDDLE DOTSIDEWAYS NOON GHUNNASTAR WITH MIDDLE D" -"OTTHROUGH SMALL CIRCLETISTRY SYMBOL LIGHT TRANSPOSITION MARKERUBHAANAHU WA TA" -"AALAAUP-POINTING AIRPLANEUP-POINTING TRIANGLEVAL WITH OVAL INSIDEWARE-FUNCTIO" -"N SYMBOLWET CULTIVATION SIGNWITH FOUR DOTS ABOVEWITH SOROCHYA NOZHKAWORD REPE" -"TITION MARKYIG MGO PHUR SHAD MAYRENAIC TWO DRACHMAS AND PROSGEGRAMMENI AND RE" -"TROFLEX HOOK FLUTTERING IN WIND IN A RECTANGLE BOX KASKAL U GUNU DISH LOVE YO" -"U HAND SIGN WITH STRIKETHROUGH WITH VERTICAL TAILA END LOGOGRAM MARKAHU ALAYH" -"I WA-AALIHALTERNATE LAKH MARKANS-SERIF CAPITAL LANSPOSITION BRACKETARABIC FOR" -"M SHAPINGARENTHESIS NOTEHEADARTIAL DIFFERENTIALATED TELLER MACHINEBETWEEN MID" -"DLE RINGBINING ALEF OVERLAYC DIGRAPH WITH CURLCIRCLED SANS-SERIF CIRCLED WHIT" -"E ARROWD CIRCUMFLEX ACCENTDENOMINATOR SIXTEENDOWN AND HORIZONTALDOWN POINTING" -" INDEXEFT QUARTER SECTIONET WITH WHITE CROSSEVEN POWERS OF FOURFIVE FINGERS S" -"PREADFLOORPLANE TWISTINGFT-POINTING FLEURONGAPPED CIRCLE ARROWGIBBOUS MOON SY" -"MBOLHAND COVERING MOUTHHEAD-SHAPED POINTERHORT STROKE OVERLAYHURISAZ THURS TH" -"ORNIGATURE AYIN-DALETHILDING CONSTRUCTIONIMIDIA SEXTULA SIGNIN CHEN SPUNGS SH" -"ADING SHIRT WITH SASHINGLE DOT TONE MARKINSIDE CIRCLE BELOWISPUTED END OF AYA" -"HITED LIABILITY SIGNKULL AND CROSSBONESLEADING MCHAN RTAGSLEFT POINTING INDEX" -"LEFT U-SHAPED ARROWLF MADDA OVER MADDALUB-SPOKED ASTERISKMOVES AGAINST CHEEKM" -"SHELL MOBILE PHONENAXIAN FIVE HUNDREDNDRED POINTS SYMBOLNE HUNDRED TWENTY PNE" -"TWORKED COMPUTERSNOGRAPHIC FULL STOPNORTH ARROW WITH HOOP SEMICIRCLE ARROWOTA" -"TED ARDHAVISARGAOVER E NUN OVER NUNOW-9 QUOTATION MARKPARAGRAPH SEPARATORPREF" -"IXED NASAL SIGNQUADRUPLE CRESCENTSQUESTION MARK ABOVERAILING MCHAN RTAGSRATUM" -" SUPER STRATUMREE-QUARTER CIRCLE RIGHT MIDDLE STROKERIGHT TO LOWER LEFTRROW N" -"O-BREAK SPACERY CULTIVATION SIGNSEQUENCE INTRODUCERSEVEN EIGHTHS BLOCKSH PLUS" -" HU PLUS ASHSLANTED NORTH ARROWSTRAIGHT THUMB BENTSTRATIAN FIFTY MNASSYMBOL F" -"OR BEGINNERTART OF RUB EL HIZBTHANG LONG ANUSVARATIGHTLY-CLOSED EYESTO LOWER " -"RIGHT FILLTRANNO MALO POVYSHETURNED PADA PISELEHTURNED SECTION MARKTWENTY-FIV" -"E DEGREESUBLE DOT WITHIN DOTUP HORIZONTAL HEAVYUP HORIZONTAL LIGHTUP-POINTING" -" CHEVRONURRENCY SYMBOL BAHTVARIANT FORM ILIMMUVARIANT WITH SQUAREVARIATION IN" -"DICATORVASTNESS OR WASTINGVERSAL INTERSECTIONVERSE FINAL BARLINEVERTICAL TABU" -"LATIONWITH YEH FINAL FORMWOMEN HOLDING HANDS AND NO DOTS ABOVE AND SMASH PROD" -"UCT AND YPOGEGRAMMENI FOR SIMALUNGUN SA NOT LITTER SYMBOL OVER INVERTED SHU S" -"PREAD THUMB SIDE THUMB INDEX THUMB WITH CIRCLE ABOVE WITH CIRCLE BELOW WITH C" -"ROSSED-TAIL WITH FLOWING SAND WITH KAVYKA ABOVEABBREVIATION MARK AND LOW RIGH" -"T RINGARROW SHAFT WIDTH ASTED SWEET POTATOASTROLOGICAL SIGN ATERRESTRIAL ALIE" -"NATIN SMALL LETTER BAARAKA WA-TAAALAABASELINE ROUND DOTBOTTOM RIGHT KASRACANT" -"ILLATION SIGN CONTINUING OVERLAPCOPPER ANTIMONIATECTLY EQUIVALENT TOCUP WITHO" -"UT HANDLEDOUBLE PUNCTUATIONDOWN-OUTPUT SYMBOLEAST POINTING LEAFENTERING TONE " -"MARKENTY-TWO POINT TWOEPIGRAPHIC LETTER ERTICAL BAR VIRAMAEVENTEEN FULL STOPE" -"VERSED CHELYUSTKAFIVE EIGHTHS BLOCKFORKED PARAGRAPHOSFORTY-FIVE DEGREESGATIVE" -" ACKNOWLEDGEGGLY VERTICAL LINEGISH CROSSING GISHHAIS LUS NTOG NTOGHEAVY WHITE" -" SQUAREHILOSOPHERS SULFURHOLDING BACK TEARSHORIZONTALLY BELOWHOUSANDS SEPARAT" -"ORHUNDREDS UNIT MARKIGATURE ZAYIN-YODHIGSAW PUZZLE PIECEIN POSSESSION SIGNIND" -"EPENDENT VOWEL IRROR HORIZONTALLYITAN SMALL SCRIPT IX SPOKED ASTERISKJEEM ISO" -"LATED FORMKANTAJA NAASIKYAYAKBAR ISOLATED FORMKOREAN CHARACTER OLEFT MIDDLE S" -"TROKELEFT-STEM TONE BARLOSED CIRCLE ARROWLOWER MIDDLE RIGHTMATHEMATICAL SPACE" -"ND UPPER RIGHT ARCNINETEEN FULL STOPNISH VERSE DIVIDERNORMAL SUBGROUP OFNYET " -"THYOOM TA-ROLNYOOGA NAAKSIKYAYAORK ON THE DECAYEDOTLESS DALATH RISHOU ALAYHE " -"WASALLAMOUCHTONE TELEPHONEOW TONE APOSTROPHEPACING CANDRABINDUPERFIXED LETTER" -" RAPUNCTUATION BINDU QUARTER NOTE STEM REDUPLICATION MARKRIST CIRCLE FRONT RY" -"UKOVAYA SVETLAYAS INSIDE AND ABOVES PRESSED TOGETHERSEPTUPLE CRESCENTSSET OVE" -"R BUILDINGSSHAN REDUPLICATIONSHING SWEAT SYMBOLSINGLE PUNCTUATIONSMALL CIRCLE" -" ABOVESOUL ISOLATED FORMSYMMETRIC SWAPPINGTILTING FROM WAISTTO LOWER LEFT FIL" -"LTOP U-SHAPED ARROWTROFLEX HOOK BELOWTYPE A ELECTRONICSU-SHAPED ORNAMENTSUM W" -"ITH DRUMSTICKSUP ARROWHEAD BELOWUPPER MIDDLE RIGHTUTLINED BLACK STARVARIANT F" -"ORM LIMMUVERY SMALL DIAMONDWEST POINTING LEAFWHITE VERTICAL BARWITH JUSTIFICA" -"TIONWITH STROKE SYMBOLYLLABLE LENGTHENER ALTERNATION MARK AND PALATAL HOOK GR" -"AVEYARD SYMBOL LAGAB TIMES ASH2 LAGAR OVER LAGAR OVER ZU PLUS SAR PLUS SHA3 P" -"LUS A TO BLACK DIAMOND WITH BULLET NOSE WITH SOUND WAVES WITH TILDE ABOVE-GAA" -"HLAA TTUDDAAG-HEIGHT LEFT HOOK0 WHEELED CHARIOTA PLUS HA PLUS DAABBREVIATION " -"SIGNAEUM ONE PLETHRONALTERNATE NUMBER AMPHYLIAN DIGAMMAAND BLACK SQUARESAPLI " -"DYO DODEKATAATHERING TOGETHERAUKAZ LAGU LOGR LBE WITH MERIDIANSBERBER ACADEMY" -" YABOTTOM HALF BLACKBRACKET EXTENSIONBRIGHTNESS SYMBOLBUT RELIEVED FACECAL SY" -"MBOL BOTTOMCANCELLATION MARKCANDRABINDU ABOVECIRCLES WITH DOTSCLOSED LITTLE Y" -"USCOMBINING NUMBER CONSONANT SIGN PACONTINUATION SIGNCONTOURED OUTLINECROSS P" -"UNCTUATIONCTION APPLICATIONDELPHIC FIVE MNASDENTAL PERCUSSIVEEAR SCREEN SYMBO" -"LEMICOLON UNDERBARFACING BABY CHICKFINGER-POST ARROWFLICK ALTERNATINGFRACTION" -" ONE HALFFROM SMALL CIRCLEGENERIC MATERIALSGREATER-THAN NOR GREATER-THAN SIGN" -"HAH ISOLATED FORMHEART-SHAPED EYESHIRTEEN FULL STOPHORIZONTAL DOUBLEHORIZONTA" -"L SINGLEIASTRE MARK ABOVEICTED LEFT ENTRY-IDEOGRAPHIC COMMAIGHTEEN FULL STOPI" -"NEAR ANNOTATION ING POLE AND FISHINITIAL LETTER RAINVERTED MCHU CANITE PART I" -"NTEGRALKE BOTTLE AND CUPKHAH INITIAL FORMLAGOLITIC LETTER LAH ISOLATED FORMLA" -"PPING LESS-THANLD PERMIC LETTER LHOUETTE OF JAPANLIAN HIEROGLYPH AMALL RED TR" -"IANGLEMALL WHITE CIRCLEMANENT PAPER SIGNMEDIUM BARB ARROWMEDIUM SHADE FORMMEE" -"M INITIAL FORMMILITARY AIRPLANENASALIZATION MARKNAUDIZ NYD NAUD NND UPPER LEF" -"T ARCNE EYEBROW RAISEDNEGATIVE CIRCLED NFORMATION SOURCENG STROKE OVERLAYONE " -"EIGHTH BLOCK-OP AND UPPER LEFTOPEN-HEADED ARROWOURTEEN FULL STOPOWER NUMERAL " -"SIGNPINWHEEL ASTERISKPRECEDING SOLIDUSPRIZNAK MODIFIER PUNCTUATION SIGN QUAT " -"REVERSED ESHREATIONAL VEHICLERIATION SELECTOR-RIGHT HALF CIRCLERYBLION BASE S" -"IGNS REVOLVING LIGHTSERVER EYE SYMBOLSIGN O WITH CROSSSQUARED TIMES KURSTRAIG" -"HT MOVEMENTTAN ISOLATED FORMTARTING FROM SIGNTEN THOUSAND SIGNTERSYLLABIC TSH" -"EGTHREE SOUND WAVESTIAL ARTS UNIFORMTONAL RANGE MARK TRIPLE DASH ARROWULAR ME" -"DIUM SHADEUP AND HORIZONTALUP POINTING INDEXURNED COMMA ABOVEURNED DAMMA BELO" -"WVARIANT FORM ASH9VARIANT FORM IMINVARIANT FORM USSUVEE WITH UNDERBARVERAGE W" -"ITH SLASHVOCALIZATION MARKVRE TOURNOIS SIGNWHITE PARENTHESISWHITE SHOGI PIECE" -"WITH NOT EQUAL TOWO VERTICAL DOTS Y ON BLACK SQUAREYEH ISOLATED FORMYPTIAN HI" -"EROGLYPH AND HEAVY RIGHT AND LIGHT RIGHT CAPPED MOUNTAIN INSERTION POINT LIGH" -"T MOON ARTA OR THE IMAGE OF PLUS KAK PLUS A SMALL ROTATIONS TIMES DISH TENU T" -"IMES GAN2 TENU WITH BUNNY EARS WITH DOT INSIDE WITH HEADSTROKEADIAN SYLLABICS" -" AFFRICATION MARKANABAZAR SQUARE ARENTHESES ABOVEB2 TENU PLUS TABBOLD GREEK C" -"ROSSBOTTOM HALF RINGCANDRA ANUNASIKACASIAN ALBANIAN CH WITH UMBRELLACKLE FILL" -" FRAME-CLOSED TENTACLESCOMPRESSED ARROWCONSONANT JOINERCORNER DOWNWARDSCORNER" -" LEFTWARDSCREAMING IN FEARDEWAYS U BRACKETDITORIAL CORONISDOTTED CRESCENTSDOU" -"BLE CRESCENTSDOUBLE DOT ABOVEDOUBLE HEAD MARKDOUBLE TURNSTILEDOUBLE ZAPYATAYA" -"DOWN RIGHT BARB DVUMYA ZAPYATYMIE PLUS GAN2 TENUECIMAL SEPARATOREFORE COMPLET" -"IONEN MILLIONS SIGNEND OF TEXT MARKENTRE WHITE STARENUMERATION SIGNEPSILON UN" -"DERBARERCURY SUBLIMATEEVERSED VISARGA EVERY OTHER TIMEFALLING DIAGONALFFERENC" -"E BETWEENFLOORPLANE SPACEFORWARD-FACING RHIGH SPACING DOTHMATULLAH ALAYHEHOLD" -"ING TOGETHERHYPHENATION MARKIDED GREEK CROSSIFTEEN FULL STOPIGHTH NOTE STEM I" -"MENSIONAL ANGLEINDEPENDENT SHININDEX THUMB SIDEINES CONVERGING IPPER-MOUTH FA" -"CEIRCLE X NOTEHEADISTOS DISC SIGN IVE POINTED STARK PERMITTED HERELD ASSYRIAN" -" ONE LEFT ARROW ABOVELEFT HALF CIRCLELIGHT AND RIGHT LIGHT BARB ARROWLLER COA" -"STER CARLLOW PAN OF FOODLOWER OVER UPPERLTERNATE HASANTAMAGNIFYING GLASSMESTV" -"ENNY KLYUCHMIDDLE AND BELOWMIDDLE AND RIGHTNAL DIGIT SHAPESNION WITH SERIFSNT" -"AIGANA LETTER O-MINOAN SIGN CMOLD TAMIL VIRAMAOLD WHITE CIRCLEORIZONTAL JOINE" -"RPEN CENTRE CROSSPLACEHOLDER MARKPLE MEASURE RESTPOSTPOSITION MENPRECEDING SU" -"BSETPRECHGESANG STEMQ WITH HOOK TAILQUALS SIGN BELOWR PLUS GAN2 TENURAIDO RAD" -" REID RRAYS AND DOTTED RECORD SEPARATORREPETITION MARK-RESH-AYIN-DALETHRESSIO" -"NLESS FACERIGHT DOWN BARB RIGHT HALF BELOWRIGHT HALF BLACKRISING TONE MARKRIZ" -"ONTAL ELLIPSESANS-SERIF ARROWSERIFS AT BOTTOMSHU2 PLUS KASKALSIGN RISING TONE" -"SITION INDICATORSLANTED EQUAL TOSMALL CAPITAL ELSMALL NOON ABOVESTERISK OPERA" -"TORSTICKING OUT FARSTRAIGHT STRETCHSTRING FRETBOARDSTUCK-OUT TONGUETAKANA-HIR" -"AGANA TRIPLE CRESCENTSUBJOINED LETTER UDLY CRYING FACEULDERED OPEN BOXUMBER S" -"IGN ABOVEUP MIDDLE HINGEDUP-OUTPUT SYMBOLUPERSCRIPT ALAPHUPPER OVER LOWERVARI" -"ANT FORM ESHVERY HEAVY SHAFTVIEWING CEREMONYVOWEL LENGTHENERWALLED ENCLOSUREW" -"AVY HAMZA BELOWWITH CENTRED DOTWITH HEARING AIDWITH LEFT UPTURNYATHOS BASE SI" -"GNYIR MKPARAQ MEUN ALTERNATE FORM AND BOTTOM END CLOUD AND RAIN CORNER BRACKE" -"T DEYTEROU ICHOU NEPOSTOYANNAYA OPERATOR WITH OVER MOUNTAINS OVER SIG4 SHU2 " -"PARESTIGMENON PLUS HI PLUS A THROUGH CIRCLE THUMB STRAIGHT TIMES IGI GUNU TO" -"UCHING INDEX WITH DESCENDER WITH DIAERESIS WITH RIGHT LEG-CARRIER LETTER-NO-E" -"VIL MONKEY-PIECE SWIMSUIT2 CHARIOT FRAMEACHES THE LIMITAI LAING DIGIT ALAYHE " -"ASSALLAMALIF LENGTHENERALMOST EQUAL TOAMARITAN SOURCEAMOUNT OF CHECKAND PARAL" -"LEL TOATA LINK ESCAPEATINATE MYSLITEBAGS UNDER EYESBAR ABOVE UNIONBELGTHOR SY" -"MBOLBELOW LONG DASHBENT OVER INDEXBINDING BRACKETBLACK TRIANGLESBLOCK DIAGONA" -"L BREAKING HYPHENBROWS STRAIGHT CAPITAL LETTERSCIRCUIT-OUTPUT CKET CALCULATOR" -"CLOSED BY CURVECORNER WITH DOTDAGESH OR MAPIQDESCENDING TONEDI ALLAHOU ANHUDI" -"ALYTIKA TONOSDIGA AELA-PILLADOING CARTWHEELDOUBLE TRIANGLEDOWN SEQUENTIALDOWN" -"WARDS TRENDE ISOLATED FORME MUSICAL NOTESE OVER INFINITYEFT REPEAT SIGNEH INI" -"TIAL FORMERICAN FOOTBALLESIDE LESS-THANESISTOR SEGMENTESSARON CHRONONETIC VER" -"SE SIGNEXPONENT SYMBOLFIVE-LIKE BHALEFORWARD TILTINGFOUR DOTS WITH FOUR ENCLO" -"SURESFOUR TICK MARKSFRACTION DIGIT FTER COMPLETIONGEMINATION MARKGGLY LINE BE" -"LOWGHT REPEAT SIGNGROUP SEPARATORHAKING PARALLELHALF FILL SPACEHALF VERTEX OF" -" HEH MEDIAL FORMHOOKED INDEX UPHORIZONTAL DASHHORIZONTAL FILLHOUSAND STATERSH" -"REE DOTS BELOWIAMOND UNDERBARIDING ENCLOSUREIGN PALI VIRAMAIMISEOS CHRONOUIMP" -"ERFECTA RESTING SYMBOL FOR INGLE HEAD MARKINUS SIGN BELOWINVERTED CARIK INVER" -"TED LAZY SINVERTED STROKEIRCUMFLEX BELOWITH FINGERNAILSIZED WHEELCHAIRKISIM5 " -"TIMES BIKTOVIK NUMERAL LATION FUNCTIONLD TAMIL SHORT LEFT DOWN BARB LEFT HALF" -" BELOWLEFT HALF BLACKLEFT HAND INDEXLETTER CAPITAL LEVEL TONE MARKLEVEN FULL " -"STOPLIGHT AND LEFT LMOST EQUAL TO LONG HOOK BELOWLONG VOWEL SIGNLOOK OF TRIUM" -"PHLOSED INSULAR GMALAKON CHROMA MARRYING MAIDENMEEM FINAL FORMMIDDLE DIAGONAL" -"MURDA MAHAPRANAN-ARY SUMMATIONNA DOUBLE HELIXNASALIZED TONE-ND OF PARAGRAPHNJ" -"OINING MACRONNO GOOD GESTURENOON FINAL FORMNOON WITH KASRANOT APPROXIMATENVER" -"TED UBADAMAODIFIER DAMAGEDODO SOFT HYPHENOGOGRAM KHAMTI OLIDUS OPERATORON TOP" -" OF MODEMOND PLACE MEDALONJOINED HINGEDONTOUR INTEGRALORIZONTAL COLONORT EQUA" -"LS SIGNOUBLE BACKSLASHOW-FALLING TONEOWER HALF BLACKPEN SQUARED DOTPENSION RA" -"ILWAYPERTHO PEORTH PPLUS SIGN BELOWPRISHTHAMATRA EPUT SYMBOL FOR QUADRUPLE AR" -"ROWQUADRUPLE DASH R WITH FISHHOOKREAMY EYEBROWS RECEPTIVE EARTHRECITATIVE MAR" -"KREVERSE SOLIDUSREVERSED OPEN ERIGHT HALF RINGRIGHT RERENGGANRIGHTWARDS AND R" -"IGHTWARDS TICKRMAN PENNY SIGNRNAMENT STROKE-S ELEVATUS MARKS IN SILHOUETTESAL" -"TER PAHLAVI SHITA PLUS GISHSHORT OVER LONGSIXTEENTH NOTESSSICAL BUILDINGST QU" -"ARTER MOONST SYRIAC CROSSSTANDING KNIGHTSTANDING PERSONSTERESIS SYMBOLSTROKE " -"NOT SIGNTAI LAING TONE-THREE DISH TENUTHROWING A KISSTILDE DIAERESISTIP ON TH" -"E LEFTTOP RIGHT FATHATRIANGULAR MARKTVIMADUR SYMBOLTWO WITH STROKEU PLUS U PL" -"US UUBLE RING BELOWUGMENTATION DOTULTIPLICATION XUMAI PALAUNG FAUR POINTED ST" -"ARUSTER NOTEHEAD VERTICAL SECANTVOWEL SEPARATORVOWEL SHORTENERWALLPLANE SPACE" -"WHITE DOT RIGHTWITH DOWN ARROWWITH RAIN DROPSWO THIRDS BLOCKXTEEN FULL STOPYN" -"CHRONOUS IDLEZ WITH CROSSBARZAIN FINAL FORMZERO WITH SLASH AND DIAERESIS AND " -"SMALL TAH CROSSING ESH2 HASER FOR VAV WITH BACK YER WITH LONG LEG-CURRENCY SI" -"GN1 OVER LAK-081AFETY SCISSORSAI LENGTH MARKALF TREE TRUNKALLAJALALOUHOUAMNUC" -" PII KUUHAND COLD SWEATANGLE OPENING AROUND-PROFILEAU LENGTH MARKBAG MEMBERSH" -"IPBHATTIPROLU AABLADE SCISSORSCENTURIAL SIGNCEPTER OF JOVECERTAINTY SIGNCOLON" -" OPERATORCRAB STEPPING CRIFICIAL WINED-UP NEWSPAPERDASIA PNEUMATADEYTEROS ICH" -"OSDI ALLAAHU ANHDIAGONAL MOUTHDIAGONAL PATH DIO MICROPHONEDIRECTION FLIPDOES " -"NOT EXISTDOUBLE-STRUCK DUN3 GUNU GUNUED SYMBOL FOR EMIVOWEL SIGN END OF SECTI" -"ONENDED MULTIMAPEPENTHETIC YUTERIAL ARAMAIC ERIC INDICATORERTICAL JOINEREXCLA" -"MATION OHEXTENDED BHALEFATHATAN ABOVEFFED FLATBREADFFICE BUILDINGFINAL ANUSVA" -"RAFORWARD INDEX GERED TREMOLO-GHT WITH STARSGUNU TIMES ASHGYPTOLOGICAL AHESIV" -"E BANDAGEHIRD-STAGE HLIHREE-LEGGED TEIGHTWARDS VANEIKHAYA PUTNAYAINFINITY BEL" -"OWING HANDS SIGNINOLOGICAL DOTINSERTION SIGNINVERTED BIRGAINVERTED DAMMAIRCUL" -"AR VIRAMAISED ROUND DOTISSION TICKETSITA PLUS GISH IVE KEY SYMBOLIVE OBOLS SI" -"GNIWAZ TIR TYR TJOINED SQUARESLACE OF SAJDAHLEFTWARDS AND LEFTWARDS TICKLESS-" -"THAN NOR LETTER OVERLAPLEVEN TWELFTHSLIGHTLY SMALL LITTLE SECTIONLOTUS POSITI" -"ONLOWER DIAGONALLOWER TERMINALMEDIUM DIAMONDMENSION ORIGINMID-LEVEL TONEMOTHE" -"TIC ABOVEMRACHNOTIKHAYANORTH ARABIAN NYI ZLA NAA DAOBLIQUE HYPHENOLD RESOLUTI" -"ONONE SOUND WAVEOOTNOTE MARKEROPEN TENTACLESOPPOSING PIRIGORANGE DIAMONDORD S" -"EPARATOR OSITION SYMBOLOT TILDE ABOVEOTHERS CIRCLEDOUR OBOLS SIGNOUSING THUND" -"EROVER GUD LUGALPAO KAREN TONEPARTMENT STOREPEN MARK BELOWPLE WITH HEARTPLETE" -" INFINITYPLITTING APARTPPED MIDDLE UPPROTECTED AREAQUINARIUS SIGNRD PLACE MED" -"ALREATIVE HEAVENREE-LINE STAFFREH FINAL FORMREVERSED-SCHWARIGHT CROSSBARRING " -"MEGAPHONEROSS ON SHIELDSECOND SUBUNITSEL LOCOMOTIVESEPARATOR MARKSHAN MEDIAL " -"WASHESHIG TIMES SHRII PUSHPIKASIDE-DOWN FACESMALL LETTER DSMALL LETTER JSMOKI" -"NG SYMBOLSPEECH BUBBLESSQUIGGLE ARROWSTRONG ISOLATETELPIECE CLOCKTERMINAL MAR" -"K-TETARTOS ICHOSTHAKA ANUDATTATHALAN ETHEL OTHER CHRISTMASTHOUSANDS MARKTHOUS" -"ANDS SIGNTHREE POINTED TIMES OPERATORTIMES SHU TENUTOP HALF BLACKTRANSMIT STA" -"TETRIANGLE CARETTRIANGLE WITH TURKIC LETTER TWELFTH CIRCLETWO DOT LEADERTWO E" -"NCLOSURESTWO WHITE DOTSUAL WHEELCHAIRUBHAYATO MUKHAUND MARK ABOVEUNDER RELATI" -"ONUNION OPERATORUNIT SEPARATORUP RIGHT BARB UPPED INDEX UPUPPER TERMINALUSPEN" -"SION MARKVENIENCE STOREVERTICAL ABOVEVERTICAL COLONVERTICAL HEAVYVERTICAL LIG" -"HTVONIC ASTERISKVRON SNOWFLAKEWITH DOT BELOWWITH FATHATAN WITH LEFT HOOKWORD " -"SEPARATORXO EKFONITIKONYOUTHFUL FOLLYZAH WITH MEEM ZAKAYA LANTERN AND SKI BOO" -"T AND YEN SIGN B BAR SYMBOL BAT AND BALL BZHI MIG CAN CROSSING KA2 DIMINUTION" -"-1 DIRECTIONAL HEADED ARROW OF THE HORNS OPPOSING KUR TIMES KASKAL VARIANT F" -"ORM WITH INK PEN WITH JEGOGAN WITH OVERBAR WITH TEE TOP WITHOUT SNOW-ESASA DO" -"TTED-OFF CALENDAR-OR-PLUS SIGN-PER-EM SPACEACCOMMODATIONALL LOST SIGNAMUHU AL" -"AYNAAAN RUPEE SIGNANNED LEATHERAPPED PRESENTAR WITH QUILLARCHAIC KOPPAARGOSYN" -"THETONARLAUG SYMBOLARRED TRIDENTARROW OVERLAYAUDATE CHRIVIAWELLEMET YAZBACKSL" -"ASH BARBALL AND HOOPBASAN LETTER BOHAIRIC KHEIBOTTOM CORNERBOWING DEEPLYBY DE" -"FINITIONCHRYSANTHEMUMCIRCLE INSIDECITATION MARKCRIPTION TAKECRIPTIONAL PACROS" -"SING GABACROSSING GAN2CROSSING MUSHCULATED LORRYDIAERESIZED UDIC MARK SIGNDOT" -"TED ZLAMA DOUBLE CIRCLEDOUBLE HYPHENDOUBLE MUCAADDOUBLE STROKEDVOECHELNAYA EA" -"VENLY EARTHED PAPERCLIPSEDIC ANUSVARAEELING PERSONEHU FEOH FE FEMPHATIC TONEE" -"R BOARD FILLERTION SYMBOLEUROPE-AFRICAEVERSED DAMMAFICATION CARDFINAL LETTER " -"FINAL SEMKATHFIXED-FORM RAFOREMENTIONEDFROWNING FACEFT ARROWHEAD FULL SURROUN" -"DGAR FRACTION GAW KAREN SHAGIFT ENVELOPEGTER TSHEG MAGYA GRAM SHADH-TYPE SYMB" -"OLHAKASSIAN CHEHAM DIGIT ONEHERICAL ANGLEHIEROGLYPHIC HINESE TONE YHREE TWELF" -"THSI WITH STROKEIDE LOST SIGNIFI ROHINGYA IGHT TWELFTHSILABIAL CLICKILE SEPAR" -"ATORIMAGE BRACKETINTEREST SIGNINVERTED FORKINVERTED TURNIOT SYLLABLE IRCLED I" -"NDEX ISH LIRA SIGNITING THROUGHIVE POINT ONEIVE SLOW SIGNJES SU NGA ROK WORK " -"SYMBOLKAPYEOUNPIEUPL-TYPE SYMBOLLATERAL CLICKLEFT CROSSBARLEGETOS ICHOSLISION" -" SYMBOLLOCATION SIGNLOCK WITH KEYLOOPED VIRAMALOSING SPIRALLVE FULL STOPLVEOL" -"AR CLICKMAILBOX WITH MALL LETTER ZMALO POVYSHE MARKS CHAPTERMASORA CIRCLEMEDI" -"UM SQUAREMELODIC QITSAMESSENIAN TENMICROCOMPUTERMINDER RIBBONMINUS SIMILARMIN" -"US WHITE XMOBILE PHONESMODIFIER MARKMULTIOCULAR ONAP PIZZICATONG TERMINATORNI" -"NE TWELFTHSNING MOVEMENTNP TRANSISTORNTY FULL STOPNUMERATOR ONENUMERIC SIGN O" -"BLIQUE LINE OGOTYPE SIGN OLVING HEARTSOMAN NUMERAL ONAL COMPUTERONG RIGHT LEG" -"ONG-LEGGED DEONGRATULATIONOON NOTEHEAD OPPOSING NAGAOTEHEAD BLACKOURTH SUBUNI" -"TOUT MIDDLE UPPA NJI PIPAEMPAIRED ARROWSPLUS OPERATORPN TRANSISTORPPOSING LUG" -"ALPREPONDERANCEQUARTERS SIGNRACKETS ABOVERANKS CASKET RIGHT HARPOONRIGHT POIN" -"TERRIPLE SVARITARIZONTAL TAILRN PENTATHLONROTATED BIRGARPENTRY PLANERRIAGE RE" -"TURNRTABLE STEREOS KAI APOTHESS KRYZHEM ON S UP TOGETHERSAL PLUS TUG2SAMYOK S" -"ANNYASELECTED AREASHESH PLUS KISIA-AUSTRALIASIGN AVAGRAHASIGN PAMUDPODSILI PN" -"EUMATASMALL LETTERSSSAGE WAITINGSTABLE SYMBOLSTERTIUS SIGNSYNDESMOS NEOTE ORD" -"ER MARKTED HAND SIGNTHIRD SUBUNITTIRTA TUMETESTOP HALF RINGTU WAS-SALAAMU WIT" -"H STROKEUDDISA SIRRAHUE OF LIBERTYUFFLE PRODUCTUPERIMPOSED XUPONDIUS SIGNUPSI" -"LON WITH UPWARDS TRENDURNED W BELOWUSHING UPWARDUSICAL LEIMMAVE-LINE STAFFVEN" -" POINT ONEVERGREEN TREEVERLAY MIDDLEVERTICAL BARSVERTICAL FILLVICE CONTROL VO" -"WEL SIGN PAW RING INSIDEWAVY LOW LINEWAVY OVERLINEWAW-AYIN-RESHWHITE ELLIPSEW" -"ITH ASTERISKWITH INTEGRALWO-LINE STAFFYMBOL TAU RHOYOD YOD PATAHYUUKALEAPINTU" -"ZHOU NUMERAL AND PICTURE AND TOP END CROSSING GU IN TRIANGLE KLYUCHEVAYA LIN" -"E SYMBOL OF ANTIMONY ON PEDESTAL OVER KISIM5 OVER MIDDLE OVER TWO PI SKEWED L" -"EFT WITH DAGESH WITH INDEX WITH UPTURN-DZUD RTAGS -MAIL SYMBOL-SHAPED SIGN-S" -"IMPLIFIED 6 LONG NGGOOAA AS-SALAAMACE INTEGRALACUTE ACCENTAFU LEERAEWAALLPOIN" -"T PENALT PAN SIGNALTERNATING AND CRESCENTAND OPERATORANG KHANG GYAR DIAERESIS" -"ARALLELOGRAMATNAH HAFUKHATTOOED HEADBACK OF HANDBAHIRGOMUKHABEHIND CLOUDBETWE" -"EN LIPSBINING MARK BLOWING FACEBLUE DIAMONDBRATION MODEBRIDGE ABOVEBSCRIPT AL" -"EFBUTTON MOUSEBYSMAL WATERCABBAGE-TREECALENDAR PADCENDING NODECHAIR SYMBOLCIA" -"N LETTER CIRCLED PLUSCIRCLES AND CK-O-LANTERNCLOSED MOUTHCRESCENT BARCROSSING" -" GI4CROSSING KALCROSSING LU2CROSSING NUNDASHED ARROWDE MARK SIGNDENTAL CLICKD" -"HRI LETTER DICTION SIGNDIGRAPH KOTODIGRAPH YORIDOT OPERATORDOUBLE ARCH DOUBLE" -" ARROWDOWN HARPOONDOWN NEUTRALDUG TIMES NIEAGULL BELOWEEPING SMALLEIGHTH NOTE" -"SEMELY HEAVY EMISOFT SIGNENARIUS SIGNENOS CHRONOUERPENDICULARETRETES SIGNEVER" -"ING FACEFALLING DOTSFEMININE DOTFERENCE MARKFLAG ON POSTFOLDED HANDSFORMING A" -"RTSFOUNTAIN PENFT RERENGGANGAW KAREN EUGBY FOOTBALLGEBA KAREN IGREEN DRAGONGR" -"OUND SLIDEGUARDED AREAHAH WITH DALHALF BRACKETHAND FORMAT HASIS SYMBOLHEAD-BA" -"NDAGEHIBITED SIGNHREE FINGERSHYPHEN-MINUSIDENTICAL TOIGATURE SHRIILLED CIRCLE" -"IN MIDDLE UPINDEX MIDDLEING ENVELOPEING HAND FANING HITTING ING OPERATORINTEG" -"RATION INUSOID SIGNINVERTEBRATEIRAGANA HOKAIRTY-SECOND IVE TWELFTHSKANA REPEA" -"T KAPPA SYMBOLKHAMTI TONE-KHMIMIC KHEILAM WITH YEHLARGE DOUBLELARGE TRIPLELAT" -"ALIZATIONLAYING CARDSLEADING EYESLEFT HARPOONLEFT POINTERLER CONSTANTLICKING " -"LIPSLIMBS DIGITSLINGING FIRELINKING MARKLL MODIFIER-LLE PATTERN LOWER CORNERL" -"OWERED FLAGLU PLUS ESH2LUS NOTEHEADLYING SAUCERM NSHUT NYAMMADDA ABOVE MALL S" -"ECTIONMANNAZ MAN MMBELLISHMENTMEDARY CAMELMEDIUM SHAFTMETA STAVROUMIDDLE PIEC" -"EMING TO MEETMONOGRAPH UKMPHASIS MARKMPTY CENTRE MUM TIMES PAN ELEMENT OFNARR" -"OW SHAFTNATURAL SIGNNCK CONSTANTNEPOSTOYANNYNERSHIP SIGNNEUTRAL FACENGLE BARL" -"INENJALA GONDI NORTHERN TSENOTCHED HOOKNOTCHED TAILNUITY SYMBOLOGOGRAM NYAJOH" -"AZARD SIGNOID NOTEHEADOING TO MEETOK HAND SIGNON US SYMBOLONISHED FACEOPENING" -" LEFTOPLE HUGGINGOPPOSING LU2OQ NSHUT YUMOTTOM HALF OOUCHES THUMBOUGHT BUBBLE" -"OUR TWELFTHSPHEME JOINERPOETRY MARK-PORT CONTROLPOUTING FACEPROTOS ICHOSQUARE" -"D ARROWQUARTER SIGNQUIRREL TAILRAFFIC LIGHTRAH BEN YOMORANCHING OUTRCHAIC SAM" -"PIREFACE COLONREN CROSSINGREVERSE MARKRIAGE SYMBOLRIAL TRAMWAYRIGHT DOUBLERIG" -"HT SINGLERING OVERLAYRION CHRONONRISTMAS TREERNAM BCAD MAROLLING EYESROUNDED " -"ZERORROUND FROM S ABOVE SIGNS SUBPUNCTISSAZ IS ISS ISECTION SIGNSH ZIDA TENUS" -"HED BARLINESHORT RIKRIKSMALL DOUBLESMALL TRIPLESMILING FACESS-THAN SIGNSTICK " -"FIGURESUR OVER SURT MONGKEUAEQTE SEPARATORTEARS OF JOYTERNATE AYINTHETA SYMBO" -"LTHIC LETTER THREE HEARTSTOP-LIGHTED TRAGRAM FOR TRIPLE DANDATRIPLE FLAMEUBSC" -"RIPT TWOUGHT BALLOONUH PLUS GISHULL NOTEHEADUME INTEGRALUN WITH RAYSUNNER FRA" -"ME-UPPER CORNERUSEATED FACEUTH ARABIAN UTH-SLAVEY KVAKRAHASANYAVER EQUAL TOVI" -"CTORY HANDVOLTAGE SIGNWDATA SQUAREWIGGLY FENCEWITH SMALL VXIRON KLASMAYAN NUM" -"ERAL YMBOL BINDU YOD TRIANGLEYOUTHFULNESS AND MACRON DECORATION I ZAPYATOY OF" -" FLOWERS OF FORTUNE OVER BULUG OVER IDIM PLUS MASH2 PLUS NUNUZ PROPORTION S " -"ZAPYATOY SHOE STILE TACK BELOW TIMES ESH2 WITH CARON WITH COMMA WITH DASIA WI" -"TH FLASH WITH JACKS WITH MAPIQ WITH PLATE WITH TITLO WITH TRILL WRIST FLEX-CO" -"PPER ORE-MINUS SIGN-OFF SYMBOL0 FOOTSTOOL3 LONG NGGO5 LONG MBOO6 LONG NGGEACK" -"ED COMMAACTIVE SIGNACUTE-GRAVEAESCULAPIUSAESHAE NYAMAGAZ DAEG DAGONAL SIGNAIL" -"LESS PHIAMUSED FACEARAM GONDI ARM SPIRAL ARMS RAISEDARPEGGIATO ASE TO THE ATH" -" PRODUCTATION POINTATION SPACEAWNING FACEBANK SYMBOLBELOW RIGHTBETA SYMBOLBLA" -"CK ARROWBOTTOM MARKBREVE BELOWBUMPY ABOVEBZHI -KHYILCAN RGYINGSCARET TILDECCU" -"MULATIONCE OF PIZZACELANDIC-YRCH AND LAMPCHING CHICKCLOSED JAWSCOMBINATIONCON" -"D SCREENCONTAIN AS CREDIT SIGNCROSSING BUCROSSING ENCROSSING IMCROSSING PICRO" -"SSING URCTION MARK CTION MARK-CURVED BENDDALETH-RESHDASH SYMBOLDE KIKAKUI DEN" -"T EMBLEMDESK PERSONDIATONON DIDOACHASHMEEDOLLAR SIGNDONG TSHUGSDOUBLE AND DOU" +"GHTWARDS ARROWWARDS HARPOON ABOVE LONG RIGHTWARDS HARPOONJUSTIFIED LOWER RIGH" +"T QUARTER BLACK CIRCLEJUSTIFIED UPPER RIGHT QUARTER BLACK CIRCLELA USED AS KO" +"RANIC STOP SIGN ISOLATED FORMLEFTWARDS OF UPWARDS TRIANGLE-HEADED ARROWLOWER " +"LEFT TO MIDDLE CENTRE TO LOWER RIGHTOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARRO" +"W OVER HI TIMES ASH2 KU OVER HI TIMES ASH2AND RIGHT TRIANGULAR THREE QUARTERS" +" BLOCKINVERSE MEDIUM SHADE AND RIGHT HALF BLOCKJUSTIFIED LOWER LEFT QUARTER B" +"LACK CIRCLEJUSTIFIED UPPER LEFT QUARTER BLACK CIRCLEULTIPLICATION SIGN WITH C" +"IRCUMFLEX ACCENTDOWNWARDS AND UPWARDS OPEN CIRCLE ARROWSLOW DOUBLE COMMA QUOT" +"ATION MARK ORNAMENTVERTICAL BAR AT END OF HORIZONTAL STROKE-TILTED SHADOWED W" +"HITE RIGHTWARDS ARROWABOVE RIGHTWARDS HARPOON WITH BARB DOWNASH FROM LEFT MEM" +"BER OF DOUBLE VERTICALNEGATIVE SQUARED LATIN CAPITAL LETTER PWITH OPEN ARM EN" +"DING IN ARROW POINTING -HEADED ARROW WITH TRIANGLE ARROWHEADSABOVE LEFTWARDS " +"HARPOON WITH BARB DOWNAL WITH SUPERSCRIPT ALEF ISOLATED FORMASHED TRIANGLE-HE" +"ADED RIGHTWARDS ARROWEH WITH SUPERSCRIPT ALEF ISOLATED FORMEXTENDED ARABIC-IN" +"DIC DIGIT FOUR ABOVEEXTENDED ARABIC-INDIC DIGIT FOUR BELOWHARPOON ABOVE SHORT" +" RIGHTWARDS HARPOONIANGLE CONTAINING SMALL WHITE TRIANGLEURNED SWIRL BIRGA WI" +"TH DOUBLE ORNAMENTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH MONITOR IN PORT" +"RAIT ORIENTATIONHORIZONTAL LINE WITH THREE TICK MARKSIOUS FACE WITH SYMBOLS C" +"OVERING MOUTHONCAVE-POINTED BLACK RIGHTWARDS ARROWOVER RIGHTWARDS TRIANGLE-HE" +"ADED ARROWSMALL LETTER BYELORUSSIAN-UKRAINIAN I AND LOWER HALF INVERSE MEDIUM" +" SHADE WITH HORIZONTAL MIDDLE BLACK STRIPEDOUBLE-LINE EQUAL ABOVE GREATER-THA" +"NGREATER-THAN ABOVE DOUBLE-LINE EQUALHARPOON ABOVE LONG LEFTWARDS HARPOONIGHT" +" TORTOISE SHELL BRACKET ORNAMENTLEFT TORTOISE SHELL BRACKET ORNAMENTOVER LEFT" +"WARDS TRIANGLE-HEADED ARROWPART BETWEEN MIDDLE AND RING FINGERSSINGLE COMMA Q" +"UOTATION MARK ORNAMENTSMALL ARABIC LETTER TAH AND TWO DOTSTURNED COMMA QUOTAT" +"ION MARK ORNAMENTZENGE CONTAINING BLACK SMALL LOZENGE CONTAINING BLACK VERY S" +"MALL SQUAREBESIDE AND JOINED WITH INTERSECTIONBOTTOM-LIGHTED RIGHTWARDS ARROW" +"HEADGVEDIC KASHMIRI INDEPENDENT SVARITAND UPPER AND LOWER ONE EIGHTH BLOCKORN" +"ER ARROWS CIRCLING ANTICLOCKWISEOUNDED HIGH STOP WITH FILLED CENTRER LOWER RI" +"GHT CURLY BRACKET SECTIONRIGHT-POINTING ANGLE QUOTATION MARKTWO HORIZONTAL ST" +"ROKES TO THE RIGHTVERTICAL LINE WITH THREE TICK MARKS TWO DOTS OVER ONE DOT P" +"UNCTUATIONBLACK LEFT-POINTING SMALL TRIANGLEDOWNWARDS ARROW WITH TIP LEFTWARD" +"SIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MODIFIER LETTER LABIALIZATION MARKOVER IGI" +" SHIR OVER SHIR UD OVER UDOVER TAB NI OVER NI DISH OVER DISHPPROXIMATELY NOR " +"ACTUALLY EQUAL TOR LOWER LEFT CURLY BRACKET SECTIONTEARDROP-SPOKED PROPELLER " +"ASTERISKUPPER BODY TILTING FROM HIP JOINTSALL BUT UPPER LEFT QUADRANT BLACKDI" +"RECT PRODUCT WITH BOTTOM CLOSEDDOUBLE-LINE EQUAL ABOVE LESS-THANDOWNWARDS HAR" +"POON WITH BARB RIGHTEFT-POINTING ANGLE QUOTATION MARKLESS-THAN ABOVE DOUBLE-L" +"INE EQUALLLAR SIGN WITH OVERLAID BACKSLASHMEDIUM SHADE AND LOWER HALF BLOCKRA" +"ISING BOTH HANDS IN CELEBRATIONTROFLEX CLICK WITH RETROFLEX HOOKTRONG CENTRAL" +"IZATION STROKE BELOWTUG2 OVER TUG2 TUG2 OVER TUG2 PAPTWO DOTS ABOVE AND TWO D" +"OTS BELOWWARDS HARPOON WITH BARB DOWNWARDS-POINTING ANGLE BRACKET ORNAMENTAND" +" MIDDLE RIGHT TO LOWER CENTREATHARVAVEDIC INDEPENDENT SVARITAETALLED BLACK AN" +"D WHITE FLORETTEHAND WITH MIDDLE FINGER EXTENDEDNORMAL FACTOR SEMIDIRECT PROD" +"UCTRIANGLE-HEADED OPEN CIRCLE ARROWRIGHT SEMICIRCLE WITH THREE DOTSRONT-TILTE" +"D SHADOWED WHITE ARROWSEMICIRCULAR ANTICLOCKWISE ARROWVED STEM PARAGRAPH SIGN" +" ORNAMENT CROSSING ASH OVER ASH OVER ASHACK-TILTED SHADOWED WHITE ARROWAISED " +"HAND WITH FINGERS SPLAYEDAND MIDDLE LEFT TO LOWER CENTREETALLED OUTLINED BLAC" +"K FLORETTEIN WHITE CIRCLE IN BLACK SQUARELEFTWARDS EQUILATERAL ARROWHEADONE H" +"UNDRED THIRTY-FIVE DEGREESRIGHTWARDS HARPOON WITH BARB UPRING OVER TWO RINGS " +"PUNCTUATIONRINGS OVER ONE RING PUNCTUATIONTNAMESE ALTERNATE READING MARK UPWA" +"RDS HARPOON WITH BARB RIGHT CONTAINING BLACK SMALL SQUARE-HIRAGANA PROLONGED " +"SOUND MARKAGGRAVATED INDEPENDENT SVARITAAND JOINED BY DASH WITH SUBSETDOT BEL" +"OW AND THREE DOTS ABOVEDOWNWARDS AND RIGHTWARDS ARROWEART EXCLAMATION MARK OR" +"NAMENTEFT SEMICIRCLE WITH THREE DOTSGHT FOUR POINTED PINWHEEL STARGREATER-THA" +"N ABOVE EQUALS SIGNHIGH-REVERSED-9 QUOTATION MARKHT CENTRALIZATION STROKE BEL" +"OWINDEX THUMB CURVE THUMB INSIDEMAKSURA WITH SUPERSCRIPT ALEF MINTON RACQUET " +"AND SHUTTLECOCKMODIFIER LETTER LEFT HALF RINGON WITH RIGHTWARDS ARROW ABOVEOP" +"EN CENTRE EIGHT POINTED STARQAF WITH LAM WITH ALEF MAKSURARECTANGULAR CHECKER" +" BOARD FORMSAD WITH LAM WITH ALEF MAKSURA DOWN INDEX THUMB HOOK MIDDLE OVER R" +"IGHTWARDS ARROW TO BAR WITH REVERSED NEGATION SLASHABOVE SHORT LEFTWARDS HARP" +"OONCKED FACE WITH EXPLODING HEADCONTAINING BLACK SMALL CIRCLEDOT OVER TWO DOT" +"S PUNCTUATIONDOWN HEAVY AND RIGHT UP LIGHTDOWN MIDDLE THUMB INDEX CROSSEFTWAR" +"DS HARPOON WITH BARB UPEVERSED LUNATE EPSILON SYMBOLEXTENDED ARABIC-INDIC DIG" +"IT TLIGHT FOUR POINTED BLACK CUSPNS-SERIF INTERROBANG ORNAMENTOMBINING ANUSVA" +"RA ABOVE RIGHTONAL INDICATOR SYMBOL LETTER PUNCTUATION CHINOOK FULL STOPSEMIC" +"IRCULAR PATH AROUND POLESUPERSCRIPT ALEF INITIAL FORMUP HEAVY AND RIGHT DOWN " +"LIGHTWITH RIGHTWARDS ARROW AT LEFTACE DIRECTION POSITION NOSE ASTERISKS ALIGN" +"ED VERTICALLYBESIDE AND JOINED WITH UNIONDOUBLE ANUSVARA ANTARGOMUKHADOWN HEA" +"VY AND LEFT UP LIGHTEDGE-TAILED RIGHTWARDS ARROWEFT ARC GREATER-THAN BRACKETF" +"TING POINT RIGHTWARDS ARROWHADED WHITE RIGHTWARDS ARROWHREE HUNDRED FIFTEEN D" +"EGREESIBE SYLLABLE BOUNDARY MARKERISMILLAH AR-RAHMAN AR-RAHEEMLEFTWARDS OF DO" +"WNWARDS ARROWLIQUID MEASURE FIRST SUBUNITMIDDLE CENTRE TO UPPER RIGHTMIDDLE R" +"ING LITTLE CONJOINEDMONOGRAMMOS TESSERA DODEKATAOUND-TIPPED RIGHTWARDS ARROWR" +"ECTANGULAR PATH AROUND POLESALTIRE WITH ROUNDED CORNERST LITTER IN ITS PLACE " +"SYMBOLTAAALAA FARAJAHU ASH-SHAREEFUP HEAVY AND LEFT DOWN LIGHTUPPER CENTRE TO" +" MIDDLE RIGHTUPWARDS AND RIGHTWARDS ARROW AND LEFT SEMICIRCLE ARROWS BARREE W" +"ITH TWO DOTS BELOW DIVIDED BY HORIZONTAL RULE-FEATHERED RIGHTWARDS ARROWAND U" +"PPER HALF WHITE CIRCLEARROW ABOVE LEFTWARDS ARROWBETWEEN TWO HORIZONTAL BARSB" +"RDA RNYING YIG MGO MDUN MABRDA RNYING YIG MGO SGAB MACIRCLE WITH NORTHWEST AR" +"ROWCONTINUOUS UNDERLINE SYMBOLDOUBLE PRIME QUOTATION MARKEAVY WHITE RIGHTWARD" +"S ARROWEMICIRCULAR CLOCKWISE ARROWENTATION FORM FOR VERTICAL FINGER COVERING " +"CLOSED LIPSFOUR FINGERS CONJOINED BENTHANDED INTERLACED PENTAGRAMHEAD MARK WI" +"TH MOON AND SUNIDE ARC ANTICLOCKWISE ARROWIDE-HEADED RIGHTWARDS ARROWIMPERFEC" +"TUM CUM PROLATIONE KATHAKA INDEPENDENT SVARITALARGE EQUILATERAL ARROWHEADLESS" +"-THAN ABOVE EQUALS SIGNLIGHT CENTRALIZATION STROKELOWER MIDDLE LEFT TO LOWER " +"LOWER TONAL RANGE INDICATORONE LARGE AND ONE SMALL EYEOUR BALLOON-SPOKED ASTE" +"RISKOVER LONG LEFTWARDS HARPOONPHARYNGEAL VOICED FRICATIVEPPY PERSON RAISING " +"ONE HANDRIANGULAR ONE QUARTER BLOCKRIGHT ARC LESS-THAN BRACKETRIPLE VERTICAL " +"BAR OPERATORSTRUMENTAL NOTATION SYMBOL-TALIC LATIN CAPITAL LETTER TWO HUNDRED" +" SEVENTY DEGREESUPPER CENTRE TO LOWER RIGHTUPPER MIDDLE LEFT TO UPPER WALLPLA" +"NE SHOULDER HIP MOVEWO DOTS BELOW AND DOT ABOVEZERO FOR ODD POWERS OF FOUR GA" +"D OVER GAD GAR OVER GAR LESS THAN THE DENOMINATOR NEGATED WITH VERTICAL BAR O" +"R APPROXIMATELY EQUAL TO WITHIN TRIANGLE ARROWHEADALEF MAKSURA ISOLATED FORMA" +"ND LEFT HALF WHITE CIRCLEAND MIDDLE FINGERS CROSSEDAND RIGHT ONE EIGHTH BLOCK" +"BLE TENNIS PADDLE AND BALLCAT FACE WITH SMILING EYESCLOCKWISE ARROW WITH MINU" +"SCRIPT LIGATURE ET ORNAMENTDOTTED LUNATE SIGMA SYMBOLDOTTED SUBSTITUTION MARK" +"ERDROP-SHADOWED WHITE SQUAREE ONE-WAY LEFT WAY TRAFFICERSTRASS ELLIPTIC FUNCT" +"IONHTORA SKLIRON CHROMA VASISIDEOGRAPHIC ITERATION MARKINDUSTRIAL STANDARD SY" +"MBOLJECT REPLACEMENT CHARACTERLANTED SOUTH ARROW WITH HOLEFTWARDS OF UPWARDS " +"ARROWLINE FEED SEPARATOR SYMBOLLLALLAHOU ALAYHE WASSALLAMMARRIED PARTNERSHIP " +"SYMBOLMEEM WITH HAH WITH TATWEELMODIFIER FITZPATRICK TYPE-OCKED FEMALE AND MA" +"LE SIGNOORPLANE SHOULDER HIP MOVEORTHOGONAL CROSSHATCH FILLOTATED FLORAL HEAR" +"T BULLETOUBLE ANGLE QUOTATION MARKRIGHT PARENTHESIS ORNAMENTRINGS ALIGNED HOR" +"IZONTALLYRIPLE DOT PUNCTUATION MARKSSIAN ASTROLOGICAL SYMBOL THREE DOTS ABOVE" +" DOWNWARDSU REVERSED OVER U REVERSEDUNEVEN EYES AND WAVY MOUTHWHITE RIGHT POI" +"NTING INDEXWITH LEFTWARDS ARROW ABOVEYAJURVEDIC MIDLINE SVARITA OVER NUN LAGA" +"R TIMES SAL WITH CIRCLED ONE OVERLAY WITH DOUBLE GRAVE ACCENT WITH DOUBLE MID" +"DLE TILDE WITH DOUBLE VERTICAL BARBREVE WITH INVERTED BREVEBUT NOT ACTUALLY E" +"QUAL TOCAT FACE WITH CLOSED EYESCROSSING NORTH EAST ARROWDIAERESIS AND HOOK S" +"YMBOLDOUBLE CANDRABINDU VIRAMADRY MEASURE FIRST SUBUNITELD HOCKEY STICK AND B" +"ALLFECTIVENESS OR DISTORTIONFFICULTY AT THE BEGINNINGING ON THE FLOOR LAUGHIN" +"GINVERTED EXCLAMATION MARKLEFT PARENTHESIS ORNAMENTLEFTWARDS ARROW WITH HOOKL" +"OW QUILT SQUARE ORNAMENTMBINING CRYPTOGRAMMIC DOTMEDIUM TRIANGLE ARROWHEADMUL" +"TIPLICATION SIGN BELOWNIVERSAL RECYCLING SYMBOLOLD ASSYRIAN WORD DIVIDERONE U" +"NDER EIGHTEEN SYMBOLOUBLE BIRGA WITH ORNAMENTOUTLINED RIGHTWARDS ARROWOVER LO" +"NG LEFTWARDS ARROWRANCH BANK IDENTIFICATIONREE-HUNDRED-AND-TWENTIETHRIGHT DIA" +"GONAL HALF BLACKRIGHT ONE SIXTEENTH BLOCKRIPLE BIRGA WITH ORNAMENTRIST CIRCLE" +" HITTING WALL SQUARE CHECKER BOARD FORMSTROKE AND TWO DOTS ABOVETAB OVER TAB " +"GAR OVER GARTERNION INTEGRAL OPERATORTTED SUBSTITUTION BRACKET OVER TOP SQUAR" +"E BRACKET POINTING BACKHAND INDEXALTERNATE SECTION MARKERAND MALE AND FEMALE " +"SIGNARM CIRCLE HITTING WALL ARROW POINTING DIRECTLY BERKANAN BEORC BJARKAN BB" +"LACK LENTICULAR BRACKETBLIC ADDRESS LOUDSPEAKERBUSINESS SUIT LEVITATINGCOMPAT" +"IBILITY IDEOGRAPH-CONSECUTIVE EQUALS SIGNSCULINE ORDINAL INDICATORDESCENDING " +"MUSICAL NOTESDIAGONAL CROSSHATCH FILLDOUBLE HORIZONTAL STROKEDOWNSCALING FACT" +"OR KIIZHE PLUS A PLUS SU PLUS NAEASTERN PWO KAREN DIGIT EQUAL TO OR GREATER-T" +"HANEYES AND HAND OVER MOUTHFINGER AND THUMB CROSSEDGLOTTAL STOP WITH STROKEGR" +"EATER-THAN OR EQUAL TOHEAVY BLACK HEART BULLETIGATURE OPEN ET ORNAMENTING FAC" +"E WITH OPEN MOUTHINTERSECTION WITH SERIFSISOSCELES RIGHT TRIANGLELARGE TRIANG" +"LE ARROWHEADLEFT DIAGONAL HALF BLACKLEFT ONE SIXTEENTH BLOCKLINE HORIZONTAL E" +"LLIPSISLY-RECYCLED PAPER SYMBOLMALL CIRCLE TO THE RIGHTMALL LEFT SQUARE BRACK" +"ETMTAVRULI CAPITAL LETTER ONE-HUNDRED-AND-SIXTIETHORIZONTAL BAR WITH NOTCHOTT" +"OM SHADED WHITE ARROWOTTOM-SHADED WHITE ARROWPERSCRIPT ALEF MOKHASSASPOINTING" +" DOWNWARDS ABOVEREVERSED NINE-LIKE BHALERIGHTWARDS THEN CURVING SINGLE-LINE N" +"OT EQUAL TOSTROKE THROUGH DESCENDERSYLLABLE REPETITION MARKT BLACK RIGHTWARDS" +" ARROWTAAALAA ALAYHI WA-SALLAMTEARDROP-SPOKED ASTERISKTED INTERPOLATION MARKE" +"RUPRIGHT RECTANGULAR ZEROUPWARD POINTING TRIANGLEVOICED LARYNGEAL SPIRANTWELV" +"E POINTED BLACK STARWITH CANCELLATION STROKEWITH UPWARDS ARROW ABOVEWO DOTS V" +"ERTICALLY ABOVEWO DOTS VERTICALLY BELOW CAKE WITH SWIRL DESIGN HUNDRED TWENTY" +"-EIGHTH POINTING AT THE VIEWER ROTATED NINETY DEGREES WITH HALF-CIRCLE BELOW" +"-ALAA AALIHEE WA-SALLAMALEF MAKSURA FINAL FORMALGAMATION OR COPRODUCTAND WOMA" +"N HOLDING HANDSANG DEPARTING TONE MARKARABIC LETTER TAH ABOVEARTY HORN AND PA" +"RTY HATASCENDING MUSICAL NOTESATTACHING VERTICAL OMETAVOURING DELICIOUS FOODA" +"WWARA ALLAAHU MARQADAHBARBED RIGHTWARDS ARROWCIRCUMFLEX ACCENT ABOVECLUSTER-I" +"NITIAL LETTER CURRENT SYMBOL FORM TWODOT BELOW AND DOT ABOVEDOWNWARDS THEN CU" +"RVING ESS OUTLINED WHITE STARFACING SNAKE HEAD WITH GREEK SMALL LETTER IOTAHA" +"NKED RIGHTWARDS ARROWHREE POINTED BLACK STARHT TRIFOLIATE SNOWFLAKEICATION PR" +"OGRAM COMMANDIDE ARC CLOCKWISE ARROWIGHT-SHADED WHITE ARROWININE ORDINAL INDI" +"CATORISTED RIGHTWARDS ARROWSIVE FINGERS SPREAD OPENLEFT-SHADED WHITE ARROWLOW" +"ER ONE QUARTER BLOCKLSCHREIBER PAUSE SYMBOLMITIAN CONJUGATE MATRIXORAH WITH N" +"INE BRANCHESORIGINAL OF OR EQUAL TOORIZONTAL RULER SEGMENTOVER RIGHTWARDS HAR" +"POONOVERLAPPING LOGICAL ANDP WITH EXCLAMATION MARKPA OVER PA GAR OVER GARPUNC" +"TUATION END OF TEXTRAISED OMISSION BRACKETREE VARIATION SELECTOR RIGHT DIAGON" +"AL ELLIPSISRIGHT HORIZONTAL SECANTRIGHT ONE QUARTER BLOCKRIGHT-POINTING TRIAN" +"GLERTOISE SHELL BRACKETED SHAPE WITH A DOT INSIDESING DIAGONAL CROSSING SOLID" +"US BINARY RELATIONUBLE VERTICAL BAR BELOWUP SPREAD THUMB FORWARDUPPER ONE QUA" +"RTER BLOCKUPWARDS THEN NORTH WESTVERTICAL BISECTING LINEWESTERN PWO KAREN TON" +"E-WHITE FOUR POINTED CUSPWO-WAY LEFT WAY TRAFFICZANTINE MUSICAL SYMBOL OVER " +"STAMPED ENVELOPE SYMBOL FOR LIGHTHOUSE WITH CIRCUMFLEX ABOVE WITH DECORATIVE " +"COVER WITH SINGLE ZAPYATAYA WITH THREE DOTS ABOVE-ROTATED DIVISION SIGNACKSLA" +"NTED SOUTH ARROWARMENIAN ETERNITY SIGNBAR ABOVE INTERSECTIONCJK UNIFIED IDEOG" +"RAPH-CONSONANT MODIFIER BARCONSONANT SIGN MEDIAL CURLY BRACKET ORNAMENTDOMAIN" +" ANTIRESTRICTIONDOUBLE SOLIDUS OVERLAYDOUBLE VERTICAL STROKEDOUBLE-LINED HEAD" +" MARKDOWN-POINTING TRIANGLEDOWNWARDS ZIGZAG ARROWDRESSED TO THE SUBJECTEAST-P" +"OINTING AIRPLANEGREATER-THAN DIAERESISHEXIFORM LONG ANUSVARAHORT HORIZONTAL S" +"TROKEI YFESIS TETARTIMORIONIGEL LONG-BRANCH-SOL SIN DEPARTING TONE MARKINDIRE" +"CT QUESTION MARKING HEAD IN SILHOUETTEINVERTED SMALL V ABOVEINVERTED SMALL V " +"BELOWKEEPING STILL MOUNTAINLATIN CAPITAL LETTER SLE BESIDE VERTICAL BARLEFT O" +"NE QUARTER BLOCKLEFT TRIANGLE OPERATORLEFT-POINTING TRIANGLELONG HORIZONTAL S" +"TROKELOW PARAPHRASE BRACKETMNYAM YIG GI MGO RGYANND RECORDING COPYRIGHTNOT IN" +"CLUDING THE POLEOVER LEFTWARDS HARPOONOVER NU11 BUR OVER BUROVER SHIR BUR OVE" +"R BURPERSET OF NOR EQUAL TOPOINTING UPWARDS BELOWPRECEDED BY APOSTROPHEPUNCTU" +"ATION KUNDDALIYAQUESTION MARK ORNAMENTREASE FONT SIZE SYMBOLRECTILINEAR BLACK" +" STARREE-CIRCLE ALTERNATE IRIGHT-POINTING FLEURONROUND A POINT OPERATORRROW W" +"ITH ROUNDED HEADSEMI-VOICED SOUND MARKSHORT RIGHTWARDS ARROWSHORT VERTICAL ST" +"ROKESSYMPTOTICALLY EQUAL TOTRIPLE DASH HORIZONTALTRIPLE RIGHT TURNSTILETRIPLE" +" VERTICAL STROKEUBSCRIPT SMALL LETTER UPPER ONE EIGHTH BLOCKUPPER RIGHT AND L" +"OWER USTOMER ACCOUNT NUMBERWASALLAM ISOLATED FORMWITH HORIZONTAL STROKEWITH J" +"EEM INITIAL FORMWITH VOICED SOUND MARKYIAKENG PUACHUE HMONG AND SLANTED PARA" +"LLEL WITH SHORT RIGHT LEG WITH VERTICAL STROKE-ROUND NOTEHEAD DOWN -SHAPED BA" +"G DELIMITERABOVE SHORT DOWN TACKACUTE AND HOOK SYMBOLAKIA TELOUS ICHIMATOSALL" +"ING DIAGONAL SLASHAND VOWEL LENGTH MARKARD SHELL FLOPPY DISKARKENING OF THE L" +"IGHTARYSTIAN FIVE HUNDREDBESIDE RIGHT TRIANGLEBOTTOM AND LOWER LEFTBOTTOM U-S" +"HAPED ARROWBUT NOT EQUIVALENT TOCROSSE STICK AND BALLCRUCIFORM NUMBER FOURCTO" +"R OR CROSS PRODUCTDELIMITER TSHEG BSTARDIGRAMMOS EX DODEKATADOUBLE LEFT TURNS" +"TILEDOWN HORIZONTAL HEAVYDOWN HORIZONTAL LIGHTDOWNWARDS ARROW ABOVEEFT HORIZO" +"NTAL SECANTEFT OPEN BOX OPERATOREIGHT SPOKED ASTERISKELATIONAL COMPOSITIONEQU" +"AL TO OR LESS-THANER RIGHT CORNER ANGLEFINAL CONSONANT SIGN FLATTENED PARENTH" +"ESISGHT OPEN BOX OPERATORGRAMMOS OKTO DODEKATAGRUENT WITH DOT ABOVEHALF TRIAN" +"GULAR COLONHAND INTERIOR PRODUCTHOCKEY STICK AND PUCKHORIZONTAL REFLECTIONHOR" +"IZONTAL TABULATIONHOUSAND MILLIONS SIGNINTERSECTING LOGICAL INTERSECTION OPER" +"ATORINVERTED BRIDGE BELOWINVERTED GLOTTAL STOPJUSTIFIED LOWER HALF JUSTIFIED " +"RIGHT HALF JUSTIFIED UPPER HALF LATTENED OPEN A ABOVELESS-THAN OR EQUAL TOLET" +"TER SMALL CAPITAL MALE WITH STROKE SIGNMIDDLE RING LITTLE ONMORPHOLOGICAL DIV" +"IDERND TELEPHONE RECEIVEROCAL NOTATION SYMBOL-OHAMMAD ISOLATED FORMOP SHADED " +"WHITE ARROWOPPOSING AN PLUS NAGAPAP PLUS PAP PLUS LU3RATING SYSTEM COMMANDREL" +"ICT HOUSE BUILDINGREVERSED FEATHER MARKRIGHT ARROWHEAD ABOVERIGHT QUARTER SEC" +"TIONRISING DIAGONAL SLASHSH AMPERSAND ORNAMENTSHORT LEFTWARDS ARROWSIDE TO SI" +"DE SCISSORSTEEN POINTED ASTERISKTHICK LETTER SELECTORTILDE OPERATOR ABOVE TOU" +"CHING INSIDE MOUTHTRIANGULAR HALF BLOCKUPPER QUARTER SECTIONVERTICAL LINE OVE" +"RLAYVERY HEAVY BARB ARROWVOICED ITERATION MARKWITH INVERTED V ABOVEWO-CIRCLE " +"ALTERNATE IWO-CIRCLE NUKTA ABOVEXTRA SHORT VOWEL MARKYIG MGO TSHEG SHAD MA AB" +"OVE LEFT TRIANGLE AND DIAGONAL STROKE BEGIN LOGOGRAM MARK OVER LAGAR GUNU SHE" +" OVER TUR ZA OVER ZA WITH DEPENDENT LOBE WITH HORIZONTAL BAR WITH INVERTED IN" +"PUT79 OVER LAK-079 GUNUA- SHOG GI MGO RGYANAISED UPPER LEFT ARCAND NORTH EAST" +" ARROWAND NORTH WEST ARROWAND SOUTH EAST ARROWAND SOUTH WEST ARROWANGE ANTIRE" +"STRICTIONARXIS KAI FTHORA VOUBETWEEN PALM FACINGSBSET OF NOR EQUAL TOCENTRE V" +"ERTICAL LINECHARACTER INTRODUCERCHEMICAL SYMBOL FOR CONSONANT SIGN HAARUCRESC" +"ENT MOON SYMBOLCURRENCY SYMBOL RIELCURVED ANGLE BRACKETDDASA ALLAAHU SIRRAHDO" +"TLESS HEAD OF KHAHDOUBLE ANGLE BRACKETDOUBLE DOT TONE MARKDOWN ARROWHEAD BELO" +"WE CONSONANT MODIFIERE POINTED WHITE STAREMESTVENNY ZADERZHKAENARMONIOS ANTIF" +"ONIAEVERSED ROTATED RANAFINAL CONSONANT MARKFIVE SPOKED ASTERISKFORMS LIGHT V" +"ERTICALFOUR RAISED KNUCKLESGRA GCAN -CHAR RTAGSHALF CIRCLE WITH DOTHAR2 TIMES" +" GAL PLUS HIGH RATHA OR LOW PAHIGH TONE APOSTROPHEHREE-DOT NUKTA ABOVEIBLICAL" +" END OF VERSEIMAGE OF OR EQUAL TOINDEX RING LITTLE ONINING OBLIQUE STROKEINSI" +"DE MOUTH RELAXEDINVERSE WHITE CIRCLEINVERTED CANDRABINDUIRCLES HITTING WALL J" +"UDEO-SPANISH VARIKAJUSTIFIED LEFT HALF KHAMTI REDUPLICATIONL FUNCTIONAL SYMBO" +"L LAILING ROBOT FRAME-LATALIZED HOOK BELOWLE WITH POPPING CORKLEFT AND LOWER " +"RIGHTLEFT-TO-RIGHT SECANTMULTIPLE PUNCTUATIONNIS RACQUET AND BALLONCAVE-SIDED" +" DIAMONDONE MARK SGAW KAREN ONOMICAL SYMBOL FOR OTLESS J WITH STROKEOVER LEFT" +"WARDS ARROWOWER QUARTER SECTIONPLUS GISH TIMES TAK4POTABLE WATER SYMBOLREAN S" +"TANDARD SYMBOLREVERSED ONE HUNDREDRIGHT ANGLE WITH DOTRIGHT QUADRANT BLACKRIG" +"HT U-SHAPED ARROWRRAMA ALLAAHU WAJHAHRUMAI PALAUNG TONE-5SCRIPTION CHARACTER " +"SEPARATOR KEY SYMBOLSEPARATOR MIDDLE DOTSIDEWAYS NOON GHUNNASTAR WITH MIDDLE " +"DOTTHROUGH SMALL CIRCLETISTRY SYMBOL LIGHT TRANSPOSITION MARKERUBHAANAHU WA T" +"AAALAAUP-POINTING AIRPLANEUP-POINTING TRIANGLEVAL WITH OVAL INSIDEWARE-FUNCTI" +"ON SYMBOLWET CULTIVATION SIGNWITH FOUR DOTS ABOVEWITH RAISED LEFT DOTWITH SOR" +"OCHYA NOZHKAWORD REPETITION MARKYIG MGO PHUR SHAD MAYRENAIC TWO DRACHMAS AND " +"PROSGEGRAMMENI AND RETROFLEX HOOK FLUTTERING IN WIND IN A RECTANGLE BOX KASKA" +"L U GUNU DISH LOVE YOU HAND SIGN WITH STRIKETHROUGH WITH VERTICAL TAILA END L" +"OGOGRAM MARKALTERNATE LAKH MARKANS-SERIF CAPITAL LANSPOSITION BRACKETARABIC F" +"ORM SHAPINGARENTHESIS NOTEHEADARTIAL DIFFERENTIALASTEROID PROSERPINAATED TELL" +"ER MACHINEBETWEEN MIDDLE RINGBINING ALEF OVERLAYC DIGRAPH WITH CURLCIRCLED SA" +"NS-SERIF CIRCLED WHITE ARROWD CIRCUMFLEX ACCENTDENOMINATOR SIXTEENDOWN AND HO" +"RIZONTALDOWN POINTING INDEXEFT QUARTER SECTIONET WITH WHITE CROSSEVEN POWERS " +"OF FOURFIVE FINGERS SPREADFLOORPLANE TWISTINGFT-POINTING FLEURONGAPPED CIRCLE" +" ARROWGIBBOUS MOON SYMBOLHAND COVERING MOUTHHEAD-SHAPED POINTERHORT STROKE OV" +"ERLAYHURISAZ THURS THORNIGATURE AYIN-DALETHILDING CONSTRUCTIONIMIDIA SEXTULA " +"SIGNIN CHEN SPUNGS SHADING SHIRT WITH SASHINGLE DOT TONE MARKINSIDE CIRCLE BE" +"LOWISPUTED END OF AYAHITED LIABILITY SIGNKULL AND CROSSBONESLEADING MCHAN RTA" +"GSLEFT POINTING INDEXLEFT U-SHAPED ARROWLF MADDA OVER MADDALUB-SPOKED ASTERIS" +"KMOVES AGAINST CHEEKMSHELL MOBILE PHONENAXIAN FIVE HUNDREDNDRED POINTS SYMBOL" +"NE HUNDRED TWENTY PNETWORKED COMPUTERSNOGRAPHIC FULL STOPNORTH ARROW WITH HOO" +"P SEMICIRCLE ARROWOTATED ARDHAVISARGAOVER E NUN OVER NUNOW-9 QUOTATION MARKPA" +"RAGRAPH SEPARATORPREFIXED NASAL SIGNQUADRUPLE CRESCENTSQUESTION MARK ABOVERAI" +"LING MCHAN RTAGSRATUM SUPER STRATUMREE-QUARTER CIRCLE RIGHT MIDDLE STROKERIGH" +"T TO LOWER LEFTRROW NO-BREAK SPACERY CULTIVATION SIGNSEQUENCE INTRODUCERSEVEN" +" EIGHTHS BLOCKSH PLUS HU PLUS ASHSLANTED NORTH ARROWSTRAIGHT THUMB BENTSTRATI" +"AN FIFTY MNASSYMBOL FOR BEGINNERTART OF RUB EL HIZBTHANG LONG ANUSVARATIGHTLY" +"-CLOSED EYESTO LOWER RIGHT FILLTRANNO MALO POVYSHETURNED PADA PISELEHTURNED S" +"ECTION MARKTWENTY-FIVE DEGREESUBLE DOT WITHIN DOTUP HORIZONTAL HEAVYUP HORIZO" +"NTAL LIGHTUP-POINTING CHEVRONURRENCY SYMBOL BAHTVARIANT FORM ILIMMUVARIANT WI" +"TH SQUAREVARIATION INDICATORVASTNESS OR WASTINGVERSAL INTERSECTIONVERSE FINAL" +" BARLINEVERTICAL TABULATIONWITH YEH FINAL FORMWOMEN HOLDING HANDS AND NO DOTS" +" ABOVE AND SMASH PRODUCT AND YPOGEGRAMMENI FOR SIMALUNGUN SA NOT LITTER SYMBO" +"L OVER INVERTED SHU SPREAD THUMB SIDE THUMB INDEX THUMB WITH CIRCLE ABOVE WIT" +"H CIRCLE BELOW WITH CROSSED-TAIL WITH FLOWING SAND WITH KAVYKA ABOVEAA ALLAAH" +"U TAAALAAABBREVIATION MARK AND LOW RIGHT RINGARROW SHAFT WIDTH ASTED SWEET PO" +"TATOASTROLOGICAL SIGN ATERRESTRIAL ALIENATIN SMALL LETTER BAARAKA WA-TAAALAAB" +"OTTOM RIGHT KASRACANTILLATION SIGN CONTINUING OVERLAPCOPPER ANTIMONIATECTLY E" +"QUIVALENT TOCUP WITHOUT HANDLEDOUBLE PUNCTUATIONDOWN-OUTPUT SYMBOLEAST POINTI" +"NG LEAFENTERING TONE MARKENTY-TWO POINT TWOEPIGRAPHIC LETTER ERTICAL BAR VIRA" +"MAEVENTEEN FULL STOPEVERSED CHELYUSTKAFIVE EIGHTHS BLOCKFORKED PARAGRAPHOSFOR" +"TY-FIVE DEGREESGATIVE ACKNOWLEDGEGGLY VERTICAL LINEGISH CROSSING GISHHAIS LUS" +" NTOG NTOGHEAVY WHITE SQUAREHILOSOPHERS SULFURHOLDING BACK TEARSHORIZONTALLY " +"BELOWHOUSANDS SEPARATORHUNDREDS UNIT MARKIGATURE ZAYIN-YODHIGSAW PUZZLE PIECE" +"IN POSSESSION SIGNINDEPENDENT VOWEL IRROR HORIZONTALLYITAN SMALL SCRIPT IX SP" +"OKED ASTERISKJEEM ISOLATED FORMKANTAJA NAASIKYAYAKBAR ISOLATED FORMKOREAN CHA" +"RACTER OLEFT MIDDLE STROKELEFT-STEM TONE BARLOSED CIRCLE ARROWLOWER MIDDLE RI" +"GHTMATHEMATICAL SPACEND UPPER RIGHT ARCNINETEEN FULL STOPNISH VERSE DIVIDERNO" +"RMAL SUBGROUP OFNYET THYOOM TA-ROLNYOOGA NAAKSIKYAYAORK ON THE DECAYEDOTLESS " +"DALATH RISHOU ALAYHE WASALLAMOUCHTONE TELEPHONEOW TONE APOSTROPHEPACING CANDR" +"ABINDUPERFIXED LETTER RAPUNCTUATION BINDU QUARTER NOTE STEM REDUPLICATION MAR" +"KRIST CIRCLE FRONT RYUKOVAYA SVETLAYAS INSIDE AND ABOVES PRESSED TOGETHERSEPT" +"UPLE CRESCENTSSET OVER BUILDINGSSHAN REDUPLICATIONSHING SWEAT SYMBOLSINGLE PU" +"NCTUATIONSMALL CIRCLE ABOVESOUL ISOLATED FORMSYMMETRIC SWAPPINGTILTING FROM W" +"AISTTO LOWER LEFT FILLTOP U-SHAPED ARROWTROFLEX HOOK BELOWTYPE A ELECTRONICSU" +"-SHAPED ORNAMENTSUM WITH DRUMSTICKSUP ARROWHEAD BELOWUPPER MIDDLE RIGHTUTLINE" +"D BLACK STARVARIANT FORM LIMMUVERY SMALL DIAMONDWEST POINTING LEAFWHITE VERTI" +"CAL BARWITH JUSTIFICATIONWITH STROKE SYMBOLYLLABLE LENGTHENER ALTERNATION MAR" +"K AND PALATAL HOOK GRAVEYARD SYMBOL LAGAB TIMES ASH2 LAGAR OVER LAGAR OVER ZU" +" PLUS SAR PLUS SHA3 PLUS A TO BLACK DIAMOND WITH BULLET NOSE WITH SOUND WAVES" +" WITH TILDE ABOVE-GAAHLAA TTUDDAAG-HEIGHT LEFT HOOK0 WHEELED CHARIOTA PLUS HA" +" PLUS DAABBREVIATION SIGNAEUM ONE PLETHRONALTERNATE NUMBER AMAT BARAKAATUHUMA" +"MPHYLIAN DIGAMMAAND BLACK SQUARESAPLI DYO DODEKATAASELINE ROUND DOTATHERING T" +"OGETHERAUKAZ LAGU LOGR LBE WITH MERIDIANSBERBER ACADEMY YABOTTOM HALF BLACKBR" +"ACKET EXTENSIONBRIGHTNESS SYMBOLBUT RELIEVED FACECAL SYMBOL BOTTOMCANCELLATIO" +"N MARKCANDRABINDU ABOVECIRCLES WITH DOTSCLOSED LITTLE YUSCOMBINING NUMBER CON" +"SONANT SIGN PACONTINUATION SIGNCONTOURED OUTLINECROSS PUNCTUATIONCTION APPLIC" +"ATIONDELPHIC FIVE MNASDENTAL PERCUSSIVEEAR SCREEN SYMBOLEMICOLON UNDERBARFACI" +"NG BABY CHICKFINGER-POST ARROWFLICK ALTERNATINGFRACTION ONE HALFFROM SMALL CI" +"RCLEGENERIC MATERIALSGREATER-THAN NOR GREATER-THAN SIGNHAH ISOLATED FORMHEART" +"-SHAPED EYESHIRTEEN FULL STOPHORIZONTAL DOUBLEHORIZONTAL SINGLEIASTRE MARK AB" +"OVEICTED LEFT ENTRY-IDEOGRAPHIC COMMAIGHTEEN FULL STOPINEAR ANNOTATION ING PO" +"LE AND FISHINITIAL LETTER RAINVERTED MCHU CANITE PART INTEGRALKE BOTTLE AND C" +"UPKHAH INITIAL FORMLAGOLITIC LETTER LAH ISOLATED FORMLAPPING LESS-THANLD PERM" +"IC LETTER LHOUETTE OF JAPANLIAN HIEROGLYPH AMALL RED TRIANGLEMALL WHITE CIRCL" +"EMANENT PAPER SIGNMEDIUM BARB ARROWMEDIUM SHADE FORMMEEM INITIAL FORMMILITARY" +" AIRPLANENASALIZATION MARKNAUDIZ NYD NAUD NND UPPER LEFT ARCNE EYEBROW RAISED" +"NEGATIVE CIRCLED NFORMATION SOURCENG STROKE OVERLAYONE EIGHTH BLOCK-OP AND UP" +"PER LEFTOPEN-HEADED ARROWOURTEEN FULL STOPOWER NUMERAL SIGNPINWHEEL ASTERISKP" +"RECEDING SOLIDUSPRIZNAK MODIFIER PUNCTUATION SIGN QUAT REVERSED ESHREATIONAL " +"VEHICLERIATION SELECTOR-RIGHT HALF CIRCLERYBLION BASE SIGNS REVOLVING LIGHTSE" +"RVER EYE SYMBOLSIGN O WITH CROSSSQUARED TIMES KURSTRAIGHT MOVEMENTTAN ISOLATE" +"D FORMTARTING FROM SIGNTEN THOUSAND SIGNTERSYLLABIC TSHEGTHREE SOUND WAVESTIA" +"L ARTS UNIFORMTONAL RANGE MARK TRIPLE DASH ARROWULAR MEDIUM SHADEUP AND HORIZ" +"ONTALUP POINTING INDEXURNED COMMA ABOVEURNED DAMMA BELOWVARIANT FORM ASH9VARI" +"ANT FORM IMINVARIANT FORM USSUVEE WITH UNDERBARVERAGE WITH SLASHVOCALIZATION " +"MARKVRE TOURNOIS SIGNWHITE PARENTHESISWHITE SHOGI PIECEWITH DOUBLE SLASHWITH " +"NOT EQUAL TOWO VERTICAL DOTS Y ON BLACK SQUAREYEH ISOLATED FORMYPTIAN HIEROGL" +"YPH AND HEAVY RIGHT AND LIGHT RIGHT CAPPED MOUNTAIN INSERTION POINT LIGHT MOO" +"N ARTA OR THE IMAGE OF PLUS KAK PLUS A SMALL ROTATIONS TIMES DISH TENU TIMES " +"GAN2 TENU WITH BUNNY EARS WITH DOT INSIDE WITH HEADSTROKEADIAN SYLLABICS AFFR" +"ICATION MARKANABAZAR SQUARE ARENTHESES ABOVEB2 TENU PLUS TABBOLD GREEK CROSSB" +"OTTOM HALF RINGCANDRA ANUNASIKACASIAN ALBANIAN CH WITH UMBRELLACKLE FILL FRAM" +"E-CLOSED TENTACLESCOMPRESSED ARROWCONSONANT JOINERCORNER DOWNWARDSCORNER LEFT" +"WARDSCREAMING IN FEARDEWAYS U BRACKETDITORIAL CORONISDOTTED CRESCENTSDOUBLE C" +"RESCENTSDOUBLE DOT ABOVEDOUBLE HEAD MARKDOUBLE TURNSTILEDOUBLE ZAPYATAYADOWN " +"RIGHT BARB DVUMYA ZAPYATYMIE PLUS GAN2 TENUECIMAL SEPARATOREFORE COMPLETIONEN" +" MILLIONS SIGNEND OF TEXT MARKENTRE WHITE STARENUMERATION SIGNEPSILON UNDERBA" +"RERCURY SUBLIMATEEVERSED VISARGA EVERY OTHER TIMEFALLING DIAGONALFFERENCE BET" +"WEENFLOORPLANE SPACEFORWARD-FACING RHIGH SPACING DOTHMATULLAH ALAYHEHOLDING T" +"OGETHERHYPHENATION MARKIDED GREEK CROSSIFTEEN FULL STOPIGHTH NOTE STEM IMENSI" +"ONAL ANGLEINDEPENDENT SHININDEX THUMB SIDEINES CONVERGING IPPER-MOUTH FACEIRC" +"LE X NOTEHEADISTOS DISC SIGN IVE POINTED STARK PERMITTED HERELD ASSYRIAN ONE " +"LEFT ARROW ABOVELEFT HALF CIRCLELIGHT AND RIGHT LIGHT BARB ARROWLLER COASTER " +"CARLLOW PAN OF FOODLOWER OVER UPPERLTERNATE HASANTAMAGNIFYING GLASSMESTVENNY " +"KLYUCHMIDDLE AND BELOWMIDDLE AND RIGHTNAL DIGIT SHAPESNGQIN SIGN SLOW NION WI" +"TH SERIFSNTAIGANA LETTER O-MINOAN SIGN CMOLD TAMIL VIRAMAOLD WHITE CIRCLEORIZ" +"ONTAL JOINERPEN CENTRE CROSSPLACEHOLDER MARKPLE MEASURE RESTPOSTPOSITION MENP" +"RECEDING SUBSETPRECHGESANG STEMQ WITH HOOK TAILR PLUS GAN2 TENURAIDO RAD REID" +" RRAYS AND DOTTED RECORD SEPARATORREPETITION MARK-RESH-AYIN-DALETHRESSIONLESS" +" FACERIGHT DOWN BARB RIGHT HALF BELOWRIGHT HALF BLACKRISING TONE MARKRIZONTAL" +" ELLIPSESANS-SERIF ARROWSERIFS AT BOTTOMSHU2 PLUS KASKALSIGN RISING TONESITIO" +"N INDICATORSLANTED EQUAL TOSMALL CAPITAL ELSMALL NOON ABOVESTERISK OPERATORST" +"ICKING OUT FARSTRAIGHT STRETCHSTRING FRETBOARDSTUCK-OUT TONGUETAKANA-HIRAGANA" +" TRIPLE CRESCENTSUBJOINED LETTER UDLY CRYING FACEULDERED OPEN BOXUMBER SIGN A" +"BOVEUP MIDDLE HINGEDUP-OUTPUT SYMBOLUPERSCRIPT ALAPHUPPER OVER LOWERVARIANT F" +"ORM ESHVERY HEAVY SHAFTVIEWING CEREMONYVOWEL LENGTHENERWALLED ENCLOSUREWAVY H" +"AMZA BELOWWITH CENTRED DOTWITH HEARING AIDWITH LEFT UPTURNYATHOS BASE SIGNYIR" +" MKPARAQ MEUN ALTERNATE FORM AND BOTTOM END CLOUD AND RAIN CORNER BRACKET DEY" +"TEROU ICHOU NEPOSTOYANNAYA OPERATOR WITH OVER MOUNTAINS OVER SIG4 SHU2 PARES" +"TIGMENON PLUS HI PLUS A THROUGH CIRCLE THUMB STRAIGHT TIMES IGI GUNU TOUCHIN" +"G INDEX WITH DESCENDER WITH DIAERESIS WITH RIGHT LEG-AND-RING BELOW-CARRIER L" +"ETTER-NO-EVIL MONKEY-PIECE SWIMSUIT2 CHARIOT FRAMEACHES THE LIMITAI LAING DIG" +"IT ALAYHE ASSALLAMALAYHI WA-AALIHALIF LENGTHENERALMOST EQUAL TOAMARITAN SOURC" +"EAMOUNT OF CHECKAND PARALLEL TOATA LINK ESCAPEATINATE MYSLITEBAGS UNDER EYESB" +"AR ABOVE UNIONBELGTHOR SYMBOLBELOW LONG DASHBENT OVER INDEXBINDING BRACKETBLA" +"CK TRIANGLESBLOCK DIAGONAL BREAKING HYPHENBROWS STRAIGHT CAPITAL LETTERSCIRCU" +"IT-OUTPUT CKET CALCULATORCLOSED BY CURVECORNER WITH DOTDAGESH OR MAPIQDESCEND" +"ING TONEDI ALLAHOU ANHUDIALYTIKA TONOSDIGA AELA-PILLADOING CARTWHEELDOUBLE TR" +"IANGLEDOWN SEQUENTIALDOWNWARDS TRENDE ISOLATED FORME MUSICAL NOTESE OVER INFI" +"NITYEFT REPEAT SIGNEH INITIAL FORMERICAN FOOTBALLESIDE LESS-THANESISTOR SEGME" +"NTESSARON CHRONONETIC VERSE SIGNEXPONENT SYMBOLFIVE-LIKE BHALEFORWARD TILTING" +"FOUR DOTS BELOWFOUR DOTS WITH FOUR ENCLOSURESFOUR TICK MARKSFRACTION DIGIT FT" +"ER COMPLETIONGEMINATION MARKGGLY LINE BELOWGHT REPEAT SIGNGROUP SEPARATORHAKI" +"NG PARALLELHALF FILL SPACEHALF VERTEX OF HEH MEDIAL FORMHOOKED INDEX UPHORIZO" +"NTAL DASHHORIZONTAL FILLHOUSAND STATERSHREE DOTS BELOWHREE HALF BEATSIAMOND U" +"NDERBARIDING ENCLOSUREIGN PALI VIRAMAIMISEOS CHRONOUIMPERFECTA RESTING SYMBOL" +" FOR INGLE HEAD MARKINVERTED CARIK INVERTED LAZY SINVERTED STROKEIRCUMFLEX BE" +"LOWITH FINGERNAILSIZED WHEELCHAIRKISIM5 TIMES BIKTOVIK NUMERAL LATION FUNCTIO" +"NLD TAMIL SHORT LEFT DOWN BARB LEFT HALF BELOWLEFT HALF BLACKLEFT HAND INDEXL" +"ETTER CAPITAL LEVEL TONE MARKLEVEN FULL STOPLIGHT AND LEFT LMOST EQUAL TO LON" +"G HOOK BELOWLONG VOWEL SIGNLOOK OF TRIUMPHLOSED INSULAR GMALAKON CHROMA MARRY" +"ING MAIDENMEEM FINAL FORMMIDDLE DIAGONALMURDA MAHAPRANAN-ARY SUMMATIONNA DOUB" +"LE HELIXNASALIZED TONE-ND OF PARAGRAPHNJOINING MACRONNO GOOD GESTURENOON FINA" +"L FORMNOT APPROXIMATENVERTED UBADAMAODIFIER DAMAGEDODO SOFT HYPHENOGOGRAM KHA" +"MTI OLIDUS OPERATORON TOP OF MODEMOND PLACE MEDALONJOINED HINGEDONTOUR INTEGR" +"ALORIZONTAL COLONORT EQUALS SIGNOUBLE BACKSLASHOW-FALLING TONEOWER HALF BLACK" +"PEN SQUARED DOTPENSION RAILWAYPERTHO PEORTH PPLUS SIGN BELOWPRISHTHAMATRA EPU" +"T SYMBOL FOR QUADRUPLE ARROWQUADRUPLE DASH R WITH FISHHOOKREAMY EYEBROWS RECE" +"PTIVE EARTHRECITATIVE MARKREVERSE SOLIDUSREVERSED OPEN ERIGHT HALF RINGRIGHT " +"RERENGGANRIGHTWARDS AND RIGHTWARDS TICKRMAN PENNY SIGNRNAMENT STROKE-S ELEVAT" +"US MARKS IN SILHOUETTESHITA PLUS GISHSHORT OVER LONGSIXTEENTH NOTESSSICAL BUI" +"LDINGST QUARTER MOONST SYRIAC CROSSSTANDING KNIGHTSTANDING PERSONSTERESIS SYM" +"BOLSTROKE NOT SIGNTAI LAING TONE-THREE DISH TENUTHROWING A KISSTILDE DIAERESI" +"STIP ON THE LEFTTOP RIGHT FATHATRIANGULAR MARKTVIMADUR SYMBOLTWO WITH STROKEU" +" PLUS U PLUS UUBLE RING BELOWUGMENTATION DOTULTIPLICATION XUMAI PALAUNG FAUR " +"POINTED STARUSTER NOTEHEAD VERTICAL SECANTVOWEL SEPARATORVOWEL SHORTENERWALLP" +"LANE SPACEWHITE DOT RIGHTWITH DOWN ARROWWITH RAIN DROPSWO THIRDS BLOCKXTEEN F" +"ULL STOPYNCHRONOUS IDLEZ WITH CROSSBARZAIN FINAL FORMZERO WITH SLASH AND DIAE" +"RESIS AND SMALL TAH CROSSING ESH2 HASER FOR VAV WITH BACK YER WITH LONG LEG-C" +"URRENCY SIGN1 OVER LAK-081AFETY SCISSORSALF TREE TRUNKALTER PAHLAVI AMNUC PII" +" KUUHAND COLD SWEATANGLE OPENING AROUND-PROFILEAU LENGTH MARKBAG MEMBERSHIPBH" +"ATTIPROLU AABLADE SCISSORSCENTURIAL SIGNCEPTER OF JOVECERTAINTY SIGNCOLON OPE" +"RATORCRAB STEPPING CRIFICIAL WINED-UP NEWSPAPERDASIA PNEUMATADEYTEROS ICHOSDI" +"AGONAL MOUTHDIAGONAL PATH DIO MICROPHONEDIRECTION FLIPDOES NOT EXISTDOUBLE-ST" +"RUCK DUN3 GUNU GUNUED SYMBOL FOR EMIVOWEL SIGN END OF SECTIONENDED MULTIMAPEP" +"ENTHETIC YUTERIAL ARAMAIC ERIC INDICATORERTICAL JOINEREXCLAMATION OHEXTENDED " +"BHALEFATHATAN ABOVEFFED FLATBREADFFICE BUILDINGFINAL ANUSVARAFORWARD INDEX GE" +"RED TREMOLO-GHT WITH STARSGUNU TIMES ASHGYPTOLOGICAL AHESIVE BANDAGEHIRD-STAG" +"E HLIHREE-LEGGED TEIGHTWARDS VANEIKHAYA PUTNAYAING HANDS SIGNINOLOGICAL DOTIN" +"SERTION SIGNINVERTED BIRGAINVERTED DAMMAIRCULAR VIRAMAISED ROUND DOTISSION TI" +"CKETSITA PLUS GISH IVE KEY SYMBOLIVE OBOLS SIGNIWAZ TIR TYR TJOINED SQUARESLA" +"CE OF SAJDAHLEFTWARDS AND LEFTWARDS TICKLESS-THAN NOR LETTER OVERLAPLEVEN TWE" +"LFTHSLIGHTLY SMALL LITTLE SECTIONLOTUS POSITIONLOWER DIAGONALLOWER TERMINALME" +"DIUM DIAMONDMENSION ORIGINMID-LEVEL TONEMOTHETIC ABOVEMRACHNOTIKHAYANORTH ARA" +"BIAN NYI ZLA NAA DAOBLIQUE HYPHENOLD RESOLUTIONONE SOUND WAVEOOTNOTE MARKEROP" +"EN TENTACLESOPPOSING PIRIGORANGE DIAMONDORD SEPARATOR OSITION SYMBOLOT TILDE " +"ABOVEOTHERS CIRCLEDOUR OBOLS SIGNOUSING THUNDEROVER GUD LUGALPAO KAREN TONEPA" +"RTMENT STOREPEN MARK BELOWPLE WITH HEARTPLETE INFINITYPLITTING APARTPPED MIDD" +"LE UPPROTECTED AREAQUINARIUS SIGNRD PLACE MEDALREATIVE HEAVENREE-LINE STAFFRE" +"H FINAL FORMREVERSED-SCHWARIGHT CROSSBARRING MEGAPHONEROSS ON SHIELDSECOND SU" +"BUNITSEL LOCOMOTIVESEPARATOR MARKSHAN MEDIAL WASHESHIG TIMES SHRII PUSHPIKASI" +"DE-DOWN FACESMALL LETTER DSMALL LETTER JSMOKING SYMBOLSPEECH BUBBLESSQUIGGLE " +"ARROWSTRONG ISOLATETELPIECE CLOCKTERMINAL MARK-TETARTOS ICHOSTHAKA ANUDATTATH" +"ALAN ETHEL OTHER CHRISTMASTHOUSANDS MARKTHOUSANDS SIGNTHREE POINTED TIMES OPE" +"RATORTIMES SHU TENUTOP HALF BLACKTRADITIONAL ERTRANSMIT STATETRIANGLE CARETTR" +"IANGLE WITH TURKIC LETTER TWELFTH CIRCLETWO DOT LEADERTWO ENCLOSURESTWO WHITE" +" DOTSUAL WHEELCHAIRUBHAYATO MUKHAUND MARK ABOVEUNDER RELATIONUNION OPERATORUN" +"IT SEPARATORUP RIGHT BARB UPPED INDEX UPUPPER TERMINALUSPENSION MARKVENIENCE " +"STOREVERTICAL ABOVEVERTICAL COLONVERTICAL HEAVYVERTICAL LIGHTVONIC ASTERISKVR" +"ON SNOWFLAKEWITH DOT BELOWWITH FATHATAN WITH LEFT HOOKWORD SEPARATORXO EKFONI" +"TIKONYOUTHFUL FOLLYZAH WITH MEEM ZAKAYA LANTERN AND SKI BOOT AND YEN SIGN B B" +"AR SYMBOL BAT AND BALL BZHI MIG CAN CROSSING KA2 DIMINUTION-1 DIRECTIONAL HE" +"ADED ARROW OF THE HORNS OPPOSING KUR TIMES KASKAL VARIANT FORM WITH INK PEN W" +"ITH JEGOGAN WITH OVERBAR WITH TEE TOP WITHOUT SNOW-ESASA DOTTED-OFF CALENDAR-" +"OR-PLUS SIGN-PER-EM SPACEACCOMMODATIONALL LOST SIGNAMUHU ALAYNAAAN RUPEE SIGN" +"ANNED LEATHERANTIC FIGURE APPED PRESENTAR WITH QUILLARCHAIC KOPPAARGOSYNTHETO" +"NARLAUG SYMBOLARRED TRIDENTARROW OVERLAYAUDATE CHRIVIAWELLEMET YAZBACKSLASH B" +"ARBALL AND HOOPBASAN LETTER BOHAIRIC KHEIBOTTOM CORNERBOWING DEEPLYBY DEFINIT" +"IONCENTRED ABOVECHRYSANTHEMUMCIRCLE INSIDECITATION MARKCRIPTION TAKECRIPTIONA" +"L PACROSSING GABACROSSING GAN2CROSSING MUSHCULATED LORRYDI RIYAL SIGNDIAERESI" +"ZED UDIC MARK SIGNDOTTED ZLAMA DOUBLE CIRCLEDOUBLE HYPHENDOUBLE MUCAADDOUBLE " +"STROKEDVOECHELNAYA EAVENLY EARTHED PAPERCLIPSEDIC ANUSVARAEELING PERSONEHU FE" +"OH FE FEMPHATIC TONEER BOARD FILLERTION SYMBOLEUROPE-AFRICAEVERSED DAMMAFICAT" +"ION CARDFINAL LETTER FINAL SEMKATHFIXED-FORM RAFOREMENTIONEDFROWNING FACEFT A" +"RROWHEAD FULL SURROUNDGAR FRACTION GAW KAREN SHAGIFT ENVELOPEGTER TSHEG MAGYA" +" GRAM SHADH-TYPE SYMBOLHAKASSIAN CHEHAM DIGIT ONEHERICAL ANGLEHIEROGLYPHIC HI" +"NESE TONE YHREE TWELFTHSI LENGTH MARKI WITH STROKEIDE LOST SIGNIFI ROHINGYA I" +"GHT TWELFTHSILABIAL CLICKILE SEPARATORIMAGE BRACKETINTEREST SIGNINVERTED FORK" +"INVERTED TURNIOT SYLLABLE IRCLED INDEX ISH LIRA SIGNITING THROUGHIVE POINT ON" +"EIVE SLOW SIGNJES SU NGA ROJJAL ALLAAHU K WORK SYMBOLKAPYEOUNPIEUPL-TYPE SYMB" +"OLLATERAL CLICKLEFT CROSSBARLEGETOS ICHOSLISION SYMBOLLOCATION SIGNLOCK WITH " +"KEYLOOPED VIRAMALOSING SPIRALLVE FULL STOPLVEOLAR CLICKMAILBOX WITH MALL LETT" +"ER ZMALO POVYSHE MARKS CHAPTERMASORA CIRCLEMATU ALLAAHI MEDIUM SQUAREMELODIC " +"QITSAMESSENIAN TENMICROCOMPUTERMINDER RIBBONMINUS SIMILARMINUS WHITE XMOBILE " +"PHONESMODIFIER MARKMULTIOCULAR ONAP PIZZICATONG TERMINATORNINE TWELFTHSNING M" +"OVEMENTNP TRANSISTORNTY FULL STOPNUMERATOR ONENUMERIC SIGN OBLIQUE LINE OGOTY" +"PE SIGN OLVING HEARTSOMAN NUMERAL ONAL COMPUTERONG RIGHT LEGONG-LEGGED DEONGR" +"ATULATIONOON NOTEHEAD OPPOSING NAGAOTEHEAD BLACKOURTH SUBUNITOUT MIDDLE UPPA " +"NJI PIPAEMPAIRED ARROWSPLUS OPERATORPN TRANSISTORPPOSING LUGALPREPONDERANCEQU" +"ARTERS SIGNRACKETS ABOVERANKS CASKET RIGHT HARPOONRIGHT POINTERRIPLE SVARITAR" +"IZONTAL TAILRN PENTATHLONROTATED BIRGARPENTRY PLANERRIAGE RETURNRTABLE STEREO" +"S KAI APOTHESS KRYZHEM ON S UP TOGETHERSAL PLUS TUG2SAMYOK SANNYASELECTED ARE" +"ASHESH PLUS KISIA-AUSTRALIASIGN AVAGRAHASIGN PAMUDPODSILI PNEUMATASIMPLIFIED " +"ERSMALL LETTERSSSAGE WAITINGSTABLE SYMBOLSTERTIUS SIGNSYNDESMOS NEOTE ORDER M" +"ARKTED HAND SIGNTHIRD SUBUNITTIRTA TUMETESTOP HALF RINGTU WAS-SALAAMU WITH ST" +"ROKEUE OF LIBERTYUFFLE PRODUCTUPERIMPOSED XUPONDIUS SIGNUPSILON WITH UPWARDS " +"TRENDURNED W BELOWUSHING UPWARDUSICAL LEIMMAVE-LINE STAFFVEN POINT ONEVERGREE" +"N TREEVERLAY MIDDLEVERTICAL BARSVERTICAL FILLVERTICAL-LINEVICE CONTROL VOWEL " +"SIGN PAW RING INSIDEWAVY LOW LINEWAVY OVERLINEWAW-AYIN-RESHWHITE ELLIPSEWITH " +"ASTERISKWITH INTEGRALWO-LINE STAFFYMBOL TAU RHOYOD YOD PATAHYUUKALEAPINTUZHOU" +" NUMERAL AND PICTURE AND TOP END CROSSING GU IN TRIANGLE KLYUCHEVAYA LINE SY" +"MBOL OF ANTIMONY ON PEDESTAL OVER KISIM5 OVER MIDDLE OVER TWO PI SKEWED LEFT " +"WITH DAGESH WITH INDEX WITH UPTURN-DZUD RTAGS -MAIL SYMBOL-SHAPED SIGN-SIMPL" +"IFIED 6 LONG NGGOOACE INTEGRALACUTE ACCENTAFU LEERAEWAALLPOINT PENALT PAN SIG" +"NALTERNATING AND CRESCENTAND OPERATORANG KHANG GYAR DIAERESISARALLELOGRAMATNA" +"H HAFUKHATTOOED HEADBACK OF HANDBAHIRGOMUKHABEHIND CLOUDBETWEEN LIPSBINING MA" +"RK BLOWING FACEBLUE DIAMONDBRATION MODEBRIDGE ABOVEBSCRIPT ALEFBUTTON MOUSEBY" +"SMAL WATERCABBAGE-TREECALENDAR PADCENDING NODECHAIR SYMBOLCIAN LETTER CIRCLED" +" PLUSCIRCLES AND CK-O-LANTERNCLOSED MOUTHCRESCENT BARCROSSING GI4CROSSING KAL" +"CROSSING LU2CROSSING NUNDASHED ARROWDE MARK SIGNDENTAL CLICKDHRI LETTER DICTI" +"ON SIGNDIGRAPH KOTODIGRAPH YORIDOT OPERATORDOUBLE ARCH DOUBLE ARROWDOWN HARPO" +"ONDOWN NEUTRALDUG TIMES NIEEPING SMALLEIGHTH NOTESEMELY HEAVY EMISOFT SIGNENA" +"RIUS SIGNENOS CHRONOUERPENDICULARETRETES SIGNEVERING FACEFALLING DOTSFEMININE" +" DOTFERENCE MARKFLAG ON POSTFOLDED HANDSFORMING ARTSFOUNTAIN PENFT RERENGGANG" +"AW KAREN EUGBY FOOTBALLGEBA KAREN IGREEN DRAGONGROUND SLIDEGUARDED AREAHAH WI" +"TH DALHALF BRACKETHAND FORMAT HASIS SYMBOLHEAD-BANDAGEHIBITED SIGNHREE FINGER" +"SHYPHEN-MINUSIDENTICAL TOIGATURE SHRIILLED CIRCLEIN MIDDLE UPINDEX MIDDLEING " +"ENVELOPEING HAND FANING HITTING ING OPERATORINTEGRATION INUSOID SIGNINVERTEBR" +"ATEIRAGANA HOKAIRTY-SECOND IVE TWELFTHSKANA REPEAT KAPPA SYMBOLKHAMTI TONE-KH" +"MIMIC KHEILAM WITH YEHLARGE DOUBLELARGE TRIPLELATALIZATIONLAYING CARDSLEADING" +" EYESLEFT HARPOONLEFT POINTERLER CONSTANTLICKING LIPSLIMBS DIGITSLINGING FIRE" +"LINKING MARKLL MODIFIER-LLE PATTERN LOWER CORNERLOWERED FLAGLU PLUS ESH2LUS N" +"OTEHEADLYING SAUCERM NSHUT NYAMMADDA ABOVE MALL SECTIONMANNAZ MAN MMBELLISHME" +"NTMEDARY CAMELMEDIUM SHAFTMETA STAVROUMIDDLE PIECEMING TO MEETMONOGRAPH UKMPH" +"ASIS MARKMPTY CENTRE MUM TIMES PAN ELEMENT OFNARROW SHAFTNATURAL SIGNNCK CONS" +"TANTNEPOSTOYANNYNERSHIP SIGNNEUTRAL FACENGLE BARLINENJALA GONDI NORTHERN TSEN" +"OTCHED HOOKNOTCHED TAILNUITY SYMBOLOGOGRAM NYAJOHAZARD SIGNOID NOTEHEADOING T" +"O MEETOK HAND SIGNON US SYMBOLONISHED FACEOPENING LEFTOPLE HUGGINGOPPOSING LU" +"2OQ NSHUT YUMOTTOM HALF OOUCHES THUMBOUGHT BUBBLEOUR TWELFTHSPHEME JOINERPOET" +"RY MARK-PORT CONTROLPOUTING FACEPROTOS ICHOSPUT DRACONISQUARED ARROWQUARTER S" +"IGNQUIRREL TAILRAFFIC LIGHTRAH BEN YOMORANCHING OUTRCHAIC SAMPIRCHAIC SHRIIRE" +"FACE COLONREN CROSSINGREVERSE MARKRIAGE SYMBOLRIAL TRAMWAYRIGHT DOUBLERIGHT S" +"INGLERING OVERLAYRION CHRONONRISTMAS TREERNAM BCAD MAROLLING EYESROUNDED ZERO" +"RROUND FROM S ABOVE SIGNS SUBPUNCTISSAZ IS ISS ISECTION SIGNSH ZIDA TENUSHED " +"BARLINESHORT RIKRIKSMALL DOUBLESMALL TRIPLESMILING FACESS-THAN SIGNSTICK FIGU" +"RESUR OVER SURT ASRAARUHUMT MONGKEUAEQTE SEPARATORTEARS OF JOYTERNATE AYINTHE" +"TA SYMBOLTHIC LETTER THREE HEARTSTIC LETTER NTOP-LIGHTED TRAGRAM FOR TRIPLE D" +"ANDATRIPLE FLAMEUBSCRIPT TWOUDA DRACONISUGHT BALLOONUH PLUS GISHULL NOTEHEADU" +"ME INTEGRALUN WITH RAYSUNNER FRAME-UPPER CORNERUSEATED FACEUTH ARABIAN UTH-SL" +"AVEY KVAKRAHASANYAVER EQUAL TOVICTORY HANDVOLTAGE SIGNWDATA SQUAREWIGGLY FENC" +"EWITH SMALL VXIRON KLASMAYAN NUMERAL YMBOL BINDU YMBOL MUEANGYOD TRIANGLEYOUT" +"HFULNESS AND MACRON DECORATION I ZAPYATOY OF FLOWERS OF FORTUNE OVER BULUG OV" +"ER IDIM PLUS MASH2 PLUS NUNUZ PROPORTION S ZAPYATOY SHOE STILE TIMES ESH2 WI" +"TH CARON WITH COMMA WITH DASIA WITH FLASH WITH JACKS WITH KASRA WITH MAPIQ WI" +"TH PLATE WITH TITLO WITH TRILL WRIST FLEX-COPPER ORE-MINUS SIGN-OFF SYMBOL0 F" +"OOTSTOOL3 LONG NGGO5 LONG MBOO6 LONG NGGEAA AS-SALAAACKED COMMAACTIVE SIGNACU" +"TE-GRAVEAESCULAPIUSAESHAE NYAMAGAZ DAEG DAGONAL SIGNAILLESS PHIAMUSED FACEARA" +"M GONDI ARM SPIRAL ARMS RAISEDARPEGGIATO ASE TO THE ASURE CHESTATH PRODUCTATI" +"ON POINTATION SPACEBANK SYMBOLBELL SYMBOLBELOW RIGHTBETA SYMBOLBLACK ARROWBOT" +"TOM MARKBREVE BELOWBUMPY ABOVEBZHI -KHYILCAN RGYINGSCARET TILDECCUMULATIONCE " +"OF PIZZACELANDIC-YRCH AND LAMPCHING CHICKCLOSED JAWSCOMBINATIONCOND SCREENCON" +"TAIN AS CREDIT SIGNCROSSING BUCROSSING ENCROSSING IMCROSSING PICROSSING URCTI" +"ON MARK CTION MARK-CURVED BENDDALETH-RESHDASH SYMBOLDE KIKAKUI DENT EMBLEMDES" +"K PERSONDI ALLAAHU DIATONON DIDOACHASHMEEDOLLAR SIGNDONG TSHUGSDOUBLE AND DOU" "BLE MARKDOUBLE RINGDOUBLE SHADDUATION CAPDYO CHRONONE WITH VEILE2 TIMES ANEAV" "ER DENE EDICAL MASKEEZING FACEEN STRAIGHTENERGY WAVEENG DIGRAPHENTHESIZED EOR" "GIAN NAREPIDAUREAN ERCENT SIGNESH DIGRAPHETEI MAYEK EUNJOMNDEUQFGHANI SIGNFIN" "AL SIGMAFIRE ENGINEFOURTH ROOTGAP FILLER-GAYANUKITTAGE AT NIGHTGENTLE WINDGHA" -"IN WITH GRAMMA SIGNGRAVE-ACUTEGSUM -KHYILGUISED FACEHAGGAR YAZHHANG KHUDAMHAW" -"H HMONG HEATED FACEHEAVEN MARKHEELED SHOEHIGH STROKEHITE DRAGONHLETIC SHOEHOK" -"HLOM ON HORA DIGIT HREE BALUDAI TIMES BADI TIMES NUNIBLE-CREE YIL FRAGMENTILC" -"ROW SIGNILIQUA SIGNIMULTANEOUSIN EQUAL TOINDERGARTENINDICESIMA IPLE TONGUEIRC" -"LED TEXTIRCULAR ARCISIGOTHIC ZIVERY TRUCKIX TWELFTHSJECT SYMBOLJIHVAMULIYAJOY" -"OUS LAKEKAARA POLLUKRAINIAN IEKTIESELSKABL OF THREADL TIMES LALLACK SULFURLAC" -"KLETTER LATIN CROSSLCE TSA CANLD POLISH OLD SCRIPT XLEAF CLOVERLEEP SYMBOLLEF" -"T DOUBLELEFT SINGLELEFT SYMBOLLETION MARKLEU SATANGALINE FILLERLON SKEWED LOS" -"ED ENTRYLOSING MARKLOTI NAGRI LT OF CLOTHLTED FLOWERLTERNATE AALTERNATE YALU " -"PLUS IGILUPOVODNAYAMACING FACEMBA BAYANNAMBLER GLASSME LONG CANMED RGYINGSMFO" -"N PIPAEMMICAL HEARTMIDDLE BENTMIDDLE HOOKMIDDLE STEMMONOCULAR OMOVED BELOWMUN" -"CIA SIGNMUUSIKATOANN THE VERGENBLENDED UKND ODD SIGNND OF PIECENG LEFT LEGNIK" -"OLSBURG NITIAL IZHENSE CHEEKS NTIMONY ORENUMBER SIGNNUMBER ZERONUN HAFUKHANUS" -"VARA ONENYIS -KHYILOF ENVELOPEOF MASHFAATOHINGYA YEHOLD NUBIAN OM PUSHPIKAOMA" -"N SIYAQ ONIAN SIGN OPPOSING ENOPPOSING IMOR OPERATORORCE SYMBOLORT BARLINEOUB" -"LE ACUTEOUBLE DANDAOUNDED FACEOUTHERN TSEOVERSTRUCK PARAKALESMAPERISPOMENIPHN" -"AEK MUANPIRAL FROM PODCHASHIEMPOST OFFICEPUT MORTUUMQUERED FLAGQUIQUADRATERA " -"SOMPENG RACHMA SIGNRADITIONAL RAISED FLAGRANSMISSIONRCHAIC JNYAREAKTHROUGHRES" -"PONDS TORIGHT GUARDRIGHT HEAVYRIGHT-HAND RING LIQUIDRIPLE PRIMERISING DOTSRIT" -"ING HANDROKUTASTI ARONTHISMATAROR-BARRED ROSS ACCENTRPOON ABOVERUNNING MANRYV" -"NIA SIGNSECOND MARKSHAAYATHIYASHEQEL SIGNSIMILE SIGNSINGLE AND SMALL CLOUDSPE" -"ED TRAINSPIRATED FASSANGKIYEOKSTEAMY ROOMSTERED SIGNSTORIC SITESYMBOL VIDJSYU" -"RA SASAKT VEGETABLETA EQUAL TOTENS DIGIT TETRAFONIASTH-THALATHATHAM DIGIT THI" -"RD BLOCKTHIRDS SIGNTHREE TIMESTIEE SHEUOQTIGHT ACUTETONAL MARK TRAIGHT WAWTRE" -"SS SIGN TRESVETLAYATRIAN CAMELTRUNCATED ATUNE COOKIETWO FINGERSTY THOUSANDU-T" -"IGALARI UBLE TONGUEUETTE BREADUG RTAGS GYUISHED FACEULO TWO SUMUMAN FIGUREUNI" -"T DIGIT UNJO WYNN WUPADHMANIYAURRENT SIGNUSHING HANDUTH CORNERSUTING WHALEVA " -"V CHELNUVAMAGOMUKHAVARYS ICHOSVE OF PEACEVERTEX OF VVISARGA ONEVYKA ABOVE WAS" -"LA ABOVEWE PALAUNG WHITE JOKERWING NEEDLEWINKING EYEWITH GARDENWO TWELFTHSXAG" -"RAM FOR XESTES SIGNXI RADICAL XTINGUISHERYEORINHIEUHZERO THIRDSZIGZAG LINEZZA" -" WA JALL AND ACUTE AND ARROW AND BREVE AND KNIFE AND MOUSE DRAWINGS KABA TEN" -"U LATE FORM OF DHARMA OVER KAD5 PLUS SHU2 POVODNAYA RESUPINUS RGYA GRAM SCHRO" -"EDER THOUSANDS TIMES SHE WITH BARS WITH BASE WITH BELT WITH EGGS WITH LOW WI" -"TH PAGE WITH PLUS WITH RAIN WITH RING WITH TAIL WITH TICK-LUE KARAN-SHAPED HA" -"1 LONG MBE1 PLASTICS2 LONG MBO2 PLASTICS2 PLUS ASH3 PLASTICS4 PLASTICS5 PLAST" -"ICS6 PLASTICS7 PLASTICSA PLUS IGIA PLUS KURA TANG LAIAB2 TIMES ABATA TREEACE " -"FILLERADAK BINDIADDA WITH AEDA-PILLAAILED BIRDAKKHANGYAOALEF LAMEDALEF WITH A" -"LENT SIGNALLY MARK ANDHI MARKANGKHANKHUANGULAR TOAR ECLIPSEASPIRATIONASTERISC" -"USAT HORIZONATRICHISMAATTY WITH AUTOMOBILEAYER BEADSBA SATANGABELOW LEFTBLACK" -" FLAGBLUE HEARTBOLD SHAFTBROKEN BARBSTRUCTIONC WITH DOTCAPITAL ETCH BALLOONCH" -"AD RTAGSCHARACTER-CHECK MARKCIRCLED CACISIVENESSCOLATE BARCOMPONENT COMPONENT" -"-CROPHONIC CROSS MARKCURLED WAWCURLY HAIRCY MESSAGED KEYBOARDD WITH DOTDA PLU" -"S HADA SATANGADED PERSONDIATONIKI DIGIT ZERODIRGA MUREDOUBLE BARDUOUS TREEE P" -"LUS SUMEARLY FORMEARTH MARKEBENSTIMMEED FIGURE-ED FINGERSEDESTRIANSEDIC TONE " -"EEKING EYEEICH STARKEIGHTIETHSELT BUCKLEENETRATIONENS SYMBOLENTHUSIASMEONGCHI" -"EUMEQUIHOPPERETTA-PILLAEUTRAL YEREVERSED PEF SHE-GOATFAHRENHEITFFICULTIESFINA" -"L HETHFOR RECORDFORMATTINGFRONT WALLFTOGGOS OUG MUNDARI GAGE CLAIMGANDA MARKG" -"AS BZUNG GBAKURUNENGGING FACEGGRAVATIONGHT LIFTERGIMEL-HETHGOLUBCHIK GREE SLA" -"SHGUA PI MAOHAAPRAANA HAMZA MARKHAN DIGIT HEAVY BEATHERMOMETERHOOK ABOVEHOTIC" -" HOOKHREE ABOVEHUNGARIAN I ARCHAIONICAL TAPERIDDLE MARKIDEOGRAPH IED SHRIMPIG" -"ATING RAIGATURE OEIKRON ISONILE FOLDERINDEX BENTINDU BELOWING LARGE ING-SHIFT" -" INHERENT AINITIAL RAION BOTTLEISMUTH OREIT MBAAKETITH DIGIT IXTHS DISHJONG T" -"ILE K2 PLUS BUKA SATANGAKAI SYMBOLKINDI MVOPKRYZHEVAYALACK JOKERLANE MERGELE " -"LETTER LE-DELAYEDLEFT GUARDLEFT HEAVYLEFT LIGHTLEFT SERIFLEFT-HAND LEK ATTAK " -"LENDED YUSLET SYMBOLLGIZ EOLHXLHAG RTAGSLIGHT BEATLIGHT BULBLIMITATIONLINDRIC" -"ITYLLOW HEARTLOGICAL ORLONG FINALLONG OVER LONG TSHEGLOWER HOOKLOWER STEMLPAP" -"RAANA LTERNATE ULTIC CROSSM STALLIONMADDA MARKMALL ALEPHMBINING DOME PLUS ENM" -"EEM ABOVEMEL SYMBOLMILLE SIGNMINO TILE MONOFONIASMONOGRAM BMONOSPACE MONTH SI" -"GNMOTORCYCLEN NGGEUAETNAKE BELOWNANGMONTHONASPIRATEDNDA PA NJINDU TEMPLENGLIC" -"ANA WNGUAGE TAGNOTE WITH NTITY MARKNTO SHRINENUMBER TENOANDAKHIATOCKET SHIPOF" -" HYGIEIAOLING FACEOLON EQUALOMMA BELOWON MEDIAL OON LILITHOON SELENAOP NKAARA" -"EOPEN SHELFOROME SIGNORTHERN TAOSSED SHEIOSTAL MARKOTING STAROUND OMEGAOUR FI" -"FTHSOUT INDEX OUTER JOINOUTHERN TAPAO DIGIT PASSIMBANGPEDAL MARKPLUS BELOWPLU" -"S ERIN2PLUS NAGA POLICE CARPOUND SIGNPPING BIRDPPOPOTAMUSPRALINEAR QUISH QUAD" -"R2 PLUS SURAGGISMATARCHAIC KHARDHACANDRARECIPITATERED DRAGONRESH BELOWREVERSE" -"D IRGE CIRCLERGE SQUARERHO SYMBOLRIGHT HOOKRIGHT SIGNRING ABOVERING THUMBRKIN" -"G FACEROAD OMEGAROEZENIAN ROUND DOT ROUNDED ERRSI SYMBOLRUDIMENTA RUPEE MARKS" -"BUB -CHALSCAN LINE-SE-CREE SKSELINE ESHSGOR RTAGSSHARP SIGNSHMIRI YEHSIDEWAYS" -" ISIXTEENTHSSMILO SIGNSPACE MARKSS OF MILKSSANGARAEASSANGPIEUPST PALETTEST-FE" -"EDINGSTRAL SIGNSTROM SIGNSTRUCTION SYLLABLE MT AND BOLTTAIL GLASSTAMAN SIGNTE" -"LEVISIONTEMPLATIONTERNATIVE TESE CROSSTHAPASCAN THDAY CAKETHMIKON N TIMES SIG" -"NTING HEARTTOMIC BOMBTOP CORNERTREFACTIONTRESS AND TRETCHED CTRIPLE DOTTWENTI" -"ETHSTWO SHORTSTWO THIRDSTYPE COLONU CIN HAU U2 PLUS BAUAM TSHOOJUARDEDNESSUBL" -"E DASH UM ROTUNDAUMAN EARTHUNG KHEMA UNKIA SIGNUP HARPOONUP NEUTRALUP OR DOWN" -"UPPER HOOKUPPER STEMUR HUNDREDUR YIG MGOURIPIGMENTURVED OMETUSEL HORSEUTH OR " -"SPYVASTI SIGNVEL SLIDERVERAGE BOXVIE CAMERAVIOUS PAGEW OR MODELWHITE FLAGWHIT" -"E HAIRWHOLE NOTEWING HEARTWITH SPOONWITH STRAWWITH WINGSWO SHORTS XED BICEPSX" -"HEEJ CEEVY AND RICEYEH BARREEYMBOL AIVAYPE PIECE ZAR AMULETZEIRO SIGNZH DIGRA" -"PHZU OVER ZU AND BELT AND CURL AND TAIL APODEXIA DIVIDERS FROM BAR GARSHUNI O" -"F BLOOD OF PAPER OVER BAL OVER LUM PLUS GAL PLUS GUD PLUS KU3 PLUS LAL PLUS S" -"AG PLUS TUR PLUS ZA7 RA OR RI RICKSHAW SPARKLER STREAMER TIMES HA TIMES UD TR" -"OMIKON-AMMONIAC-KHYUD PA-LOW TONE-MID TONE-STACCATO0 LONG LE1 CHARIOT2 GARMEN" -"T247 DIPTE3 PLUS AN5 BATHTUB5 CYPERUS5 LONG JOA PLUS NAABOVE TO ACE NOTE ACIN" -"G CARADEG ADEGADMA GDANAF PERSONAFFE FACEAINTBRUSHAISED DOTAJANYALANAL RUNOUT" -"ALAYALAM ALI GALI ALPAPRANAANEROSIS ANG CITI ANGGEUAETANSKRIT SANTAYALANANTHA" -"KHATAOS ICHOSARCHAIC MARISTERA ARM CLOCKAS MEMBERATHAMASATATTACHED AVE ARROWB" -" DIGRAPHBASE UNITBEER MUGSBIAL SIGNBICYCLISTBING CANEBITE LIPSBKHASIAN BO BAI" -"MAIBO GYFU GBOTH BENTBRUL SHADBTRACTIONCANG TE-UCAPACITORCAPITAL DCAPITAL ICA" -"PITAL QCARTRIDGECHANICAL CHAVIYANICHOSEONG CLOSED PLCOIN SIGNCOMPLETEDCONJOIN" -"ERCORN FACECRESCENDOCROUCHINGCUBE ROOTCULTATIOND SALTIREDAD WITH DENT AND DEP" -"ARTUREDIAGONALSDOWN HANDDOWN SIGNDOWN STEPDOX CROSSDRAM SIGNDUS RTAGSE AT LEF" -"TEAVY DOWNEBIT SIGNED DIGIT ED PLANETEEN WITH EFAIDRIN EFORMED TEIGHT OF ELEG" -"RAPH ELLOWSHIPEMBEDDINGEMPTY SETENTRE OF ENTRY SAWER BUBBLEERCIAL ATERTY LINE" -"ES AKURU ESAME DOTETER SIGNETRASIMOUETTI BALLEURO SIGNFACING UPFEH WITH FINAL" -" MEMFINAL NGAFINAL NUNFISH TAILFLAT SIGNFOUR BENTFROM WALLG IN HOLEGITTARIUSG" -"REATER YGRIK SIGNHAIKSUKI HALF NOTEHALF SIGNHALSHELETHARACTERSHARD SIGNHEADSC" -"ARFHI SYMBOLHIMA SIMAHINOCEROSHIYYAALAAHOOK MARKHOT SASAKHREE FOR HWAZ EH EI " -"PLUS LIIA SYMBOLIALECT-P ICE CREAMIDEOGRAM IDEWAYS UIGH HAMZAIGHTH ASHIGN NUK" -"TAIGN SAFHAIGN TOMPIILE TILDEILIPPINE IN SQUAREINAL NOTEINARBORASING CARD ING" -" DOLLSING GLOVEING LANESING STONEINISHMENTINNYIIYHEIRST MARKISEN-ISENITRA SIG" -"NIVE-PULL-IVINATIONJERUSALEMK GESTUREKA- SHOG KAMEYTSA KEMPHRENGKING BOOTKSTR" -"EPTONKU RU KHAKYO TOWERL ME HANDLACKFOOT LAN SIGN LARGEMENTLEFT RINGLEFT TACK" -"LESS TREELIGHTNINGLINE FACELISSANDO LITTLE UPLIVERANCELLABLE B0LLABLE OMLOND " -"HAIRLONG TIP LOWER DOTLVIN SIGNM HE-GOATMAEMGBIEEMALL RINGMARK CIM MARK SHADM" -"BROIDERYMETOBELUSMHANCHOLLMRACHNAYAMUKPHRENGNA KHONNANCLOSING NDAILING NFORZA" -"NDONG SANDALNGER ROOTNGER SHIPNGUN SIGNNIGGAHITANIGHT OF NIHSHVASANING SIGNNO" -" TELEIANSERT AT NTERPRISENTESSENCENTRACTIONNUSVARAYANVERTED ROCCLUSIONODIASTO" -"LEOF STIMMEOKED HEADOKED TAILOKOUFISMAOM SYMBOLON GROUNDON TEUAEQONE MARK-ONE" -" THIRDONG GRAVEONGSEONG OO DENNENOP HALF OOPEN EYESOPEN JAWSORT-TWIG-ORTH WIN" -"DOTAL SIGNOURA SIGNOUT BEAMSOUT MOUTHOUTH WINDOVER GAN2OVER MUSHOW KAVYKAP DI" -"GRAPHP ELAMITEPAA-PILLAPADE SUITPANYANGGAPENT SIGNPENTASEMEPIDERY HAPLE HEART" -"POSITIONSPPOINTED PPOSITIONPROJECTORQUADCOLONQUADRANT-QUEEN OF QUSHSHAYAR PLU" -"S RARCHAIC IIRCHAIC RARDEL DKARREAK HERERED JOKERREDNE ON REFORMED RFUL FACER" -"IED FACERNEY PARARO WIDTH ROJECTIONROTATION-RPORATIONRTER MARKRTS MEDALRUM CL" -"EF-RWARI DDAS DIGRAPHSEMICOLONSEPTEMBERSHAB CEEBSIVE FACESMALL YUSSOF PASUQSP" -"IRITUS SSANGSIOSSTAL BALLSTEBASKETSTRELNAYAT OF MEATT ON BONETABE SIGNTAKHALL" -"USTANDSTILLTED PLANTTEH ABOVETIMES NA2TIMES PAPTO CORNERTONE MAI TRAIGHT UTRE" -"DECILETRESVETLOTTED STEMTUKWENTISTUTEYASATUBSTITUTEUE MAEMBAULL BLANKUMED HEA" -"DUNGLASSESUNGSEONG UPPER DOTUPTSTIMMEUR CORNERUR-DE-LISURAMAZDAAURLY LOOPURNE" -"D AYBURNED GANURUZ UR UUTRA MARKUURDHAJA UVUZHAKKUVANAGARI VELOPMENTVER LUGAL" -"VERLONG AVEUAENGAMVICE MARKVIGINTILEVINE LEAFVISARGAYAVOCALIC RVOETOCHIEVRAKH" -"IYA WASH TAILWING STARWITH FACEWORDSPACEWRINKLES WRY SMILEXCITEMENTXHAUSTIONY" -" BLOSSOMY-FOURTH Y-FOURTHSYEAR SIGNYEH ABOVEYRANISMA Z DIGRAPHZAKRYTAYAZAL SA" -"SAKZENE RINGZERO SIGNZIR SASAK ANTENNA AT DUSK CEDILLA FACING HANDLES KEMBAN" -"G LANTANG NUTILLU OF YARN ON LEFT OTTAVA OVER KG OVER MU OVER ZI PLUS DI PLU" -"S DU PLUS RU POLNAYA RASWADI SATCHEL SCOTS S SLIDING TALENTS TTUDDAG YUQ NAE-" -"CREE TH-EM DASH-KHIEUKH-PHIEUPH-X BELOW0 BRONZE1 BARLEY1 HELMET3 ARMOUR56 TUR" -"O28 KANAKOA SIGN AABAAFILIABOAFILIACKSPACEAEN NYAMAIYANNOIALLIANCEAMS HORNANC" -" SIGNANE TREEANS SIGNAPITAL FAR TSHESARCASITEARKLEAN ARRIVINGARSI YEHARTYRIA " -"AST WINDASTERN WATAKANA ATE MARKATEBOARDATH MARKAVY BANDAY-NIGHTAZHAAKKUBACKW" -"ARDBASSINETBATBEIT BER POLEBEVERAGEBIEE FONBILLIONSBINOVILEBLE SIGNBLED CARBL" -"INEAR BOL SIGNBOT FACEBOX TRAYBRA FACEBUNDANCEC SIYAQ CABLEWAYCAL DISCCANDICU" -"SCASSETTECEILING CER BALLCHATTAWACHINESE CK CHARTCLIMBINGCOMBINEDCOUNCIL COUN" -"TERSCURLICUECURSIVE D BUBBLED CROSS DAMMATANDANTAJA DDY BEARDIAMONDSDIFONIASD" -"IM GUNUDIT CARDDOCUMENTDS-CREE DUSHENNADVANTAGEDVISVARAE OF POOEBEEFILIECH YI" -"WNED BRICKEGORIAN EK ONKARELEPHANTEN NTEUMENICIAN EOUT BOXER TRUTHERAL URNERD" -"IGRISEREVODKAESH LOOPEST WINDET SHOESETA SIGNETRASEMEEUFEUAETEVEN OF EVERANCE" -"EXCHANGEFEBRUARYFILE BOXFINAL THFLOURISHFOR STOPFRAKTUR FRICAN DGARITIC GBASI" -"NNAGENITIVEGERPRINTGLASNAYAGORAZDO GREAT SAHAGALL HHALF GURHAN-AKATHARBAHAYHA" -"RMONICHESPIAN HOP BELLHREE OF I SHAKTIICHAEAN IGHT ARMIGMOID SIMANSIS INAGARI" -" INDUCTORING BELLING BOWLING ROD IRD MARKIS FORM IS WHEELIS-PILLAITA MFONJACK" -" OF JAVIYANIJUNCTIONKAIYARAAKASRATANKATAKANAL POLISHL-LAKUNALA LENGALATION XL" -"EANING LESS SHALESSER YLF RING LFWIDTH LKULIZMYLOCATIVELONG BARLONG S TLORRAI" -"NELOW STOPLOZHITIELTRY LEGLUB SUITM ALLAAHMALL AXEMANDARINMANGALAMMARRATANME " -"BADGEME WITH MEM-QOPHMIONIAN MMATION MON TIMEMY HOUSEN-JOINERNA METEKNAMENNY " -"NAVIYANINCE SIGNNED FOODNEIFORM NG RTAGSNI ABOVENINE OF NITIAL ZNO SLASHNO TH" -"UMBNOTE PADNOVEMBERNRES TOSOBOOFILIOCALIC MOCK SALTOCUS OF ODESTONEOHM SIGNOL" -"LOWINGOM NTEUMOMANIAN OMMA BARON CROSSONE FOR OO TYPE OREHEAD ORM FEEDOT MBUA" -"EOTIFIED OVER BU OVER GA2OVER GI4OVER SAGOVER SHEOVER TIROVERRIDEPAIRTHRAPAKP" -"AK EPALOCHKAPARATED PAVIYANIPENTAGONPRECEDESPROSTAYAPUB DAWBPUN IYEKQAIRTHRAQ" -"UINTILERAMMA GGRASMIAN RAT RAI RAUGHTS RDEL NAGREATNESSRED HAIRREE MARKRESVET" -"LYRILLIONSRIYOOSANROSHTHI ROSSED ORSE DUNGS OCHKOMSALT OF SALTIRESSANYAKA SCR" -"IPT GSE WEDGESENTAGONSEXTANT-SHKIR KASHOE JOTSHORT ERSIFISTONSIGN LAESIGN PVO" -"SIX DOTSSMA SIGNSNA LDANSOFTNESSSPERSIONSQUEEZEDSUCCEEDSSUPERSETSWIMMINGT NGG" -"EETTAALUJA TAI LUE TAR EYESTER FACETHIOPIC THOLHOMATHOSCOPETICK IN TIRRUP RTI" -"SMOS ETO-LEFT TOWARDS TRI DISHTRICOLONTTENTIONTTO MARKTURNED MUAREG YAUATRILL" -"OUBJOINERUDAWADI UKEUTNDAULLS LEGUNDERDOTUNDERTIEUNG DASHUP TRUCKV OVER MVE S" -"ASAKVERGENCEVESSEL BVOLUTIONVOMITINGW PRINTSWASH KAFWBOY HATWN HEARTWO ABOVEW" -"ON SIGNWRINKLEDWRITING XCELLENTY BEETLEY POPPERYAMAKKANYBEYFILIYENISEI YER YA" -"GHYESIEUNGYIDDISH YPORROONYRILLIC ZAKRYTOEZWARAKAYZWJ THAJ APLOUN BUTTON CER-" -"WA FLEXUS ISLAND KEFULA LONSUM MAELEE MENDUT MINUS MUOMAE MUQDAM OCLOCK OPEN" -"-O PLOPHU RAMBAT SHAKER SLOWLY STRIDE TEDUNG WAAJIB WOLOSO-CREE R-KIYEOK-MACR" -"ON-MU-MO--SHIFT--THIRTY-TIKEUT-WELSH 0 SPEAR0 WHEAT1 ARROW2 OLIVE2 WOMAN26 EY" -"YY3 AREPA3 EIGHT3 MONTH3 OMEGA3 SPICE3 SWORD3 WHEEL5 NGGEE6 NGGOO7 NGGUA7 NGU" -"AN9 CLOTH9 NGGAAA -PHRUA NAME ACTER TAD NECKAELAENGAETMEUNAHAPAKHALESMA ALLOT" -" XALTILLOAM ALEFAN MARKAND ENDANDERERANGKUOQANGLED ANGLONGANGOLATAPEZIUMARDNE" -"SSARRED BARRED OAS SIGNASHTRA ASUTORUATAEAN ATH OF AU MARKAULDRONAUNTLETAXIMA" -"TAAY SIGNBAIRKANBAMBOOSBARREKHBERGINEBERRIESBIG YUSBLACHKOBOARDERBOOSTERBORZA" -"YABOURINGBREVIS BUFFALOBULANCECABINETCAP TENCAYANNACELSIUSCHEINAPCHIEUCHCK LI" -"MECLEAVERCLOSE ECLOTHESCOMING CONTACTCOPTIC CRACKERD MADDADA FACEDANCINGDANES" -"E DAYANNADEAVOURDHALATHDIARGONDIPLOUNDISIMOUDOFONONDRIL BUDU NJAADYNAMICE DRI" -"NKE GLASSEAD OREEAVY YAECEMBERED RICEEFT ARMEIGHT KEL PUMPEN LEAFENSHUETER TH" -"ANERNIN AESTIVALETNAHTAEULEUNGF DAVIDF SASAKFATIGUEFAYANNAFINAGH FINAL YFLUEN" -"CEFORKINGGAYANNAGENERALGHEUGHEGLAGOLIGO-KARTGOLIAN GRADUALHAARKAAHALANTAHANGU" -"L HAYANNAHEADINGHEXAGONHI SIGNHIUCHUSHODDONDHYAAUSHI NTEUMI RTAGSIANGQI IBIFI" -"LIIC WANDICOPTERICYCLESIFIED EIKHAHITIL DRUMILLEANNIMILAR INNABARISIBLE ITALI" -"C ITON RAIVE OF JAIN OMJARATI JAYANNAJECTIVEJERAN JJIBWAY KARO BAKAYANNAKEUAE" -"RIKHA YATKKURUNIKOMBUVAKOQNDONKORONISKPAK WAKUTAARUKYLISMAL SEGNOLAGIOS LAK-0" -"50LAMITE LASHES LAYANNALE LEAFLEK TOOLENGTH-LEUT KALEYBALLLF FACELIGHT XLJUDI" -"JELLYFISHLOSION LYGISMAMAAYYAAMAI SATMANCHU MARCATOMASSAGEMBOL B0MEETORUMERIC" -"ASMINGKALMINIMA MONSTERMRACHNYMUNGKAHNANCIALNAYANNANEQUDAANESTED NG MASKNIKAH" -"ITNJAEMLINUMBERSOCTAGONOCTANT-OCTOBEROF SOAPOFFICEROGDIAN OKRYTIEOLAPUK OMERA" -"NGON FACEONG UEXONGONANONTIEENOP MARKORCULUSOREVMA ORKHON ORTIETHOT NGOMOT RE" -"PHOUR OF OUT HUBOUTWARDOVER ANOVER DUOW ALEFOWILO SOX BACKOX LINEP PIEETPALLA" -"WAPANESE PANSIOSPARERENPAYANNAPAYEROKPECTIVEPEGERMAPENGKALPERVISEPHUTHAOPLOYA" -"N POMOFO POVODNYPPROACHPRENKHAPSTICKSPTHAHA PURPLE PUSHPINQUARIUSQUEEZE R2 GU" -"NURA REPARAKHANGRANGKEPRARIETYRAYANNARD FACERDO RJEREATHY REREKANRESILLORIPPL" -"E RISIMOUROGRESSROKEN LRRECTUSRTHIAN RY FACES-SAJDASA VAH SAMPHAOSANDHI SANGA" -"N SAYANNASCOOTERSERPINASEXTILESHAKINGSHIFT TSHORT ASIDDHAMSIGN UDSOLDIERSOV R" -"OGSPRINGSST TUBESTERINGSUKUUDOSYNAGMAT ASHESTA MARKTAISYOUTALL AATASHEELTAYAN" -"NATCHFORKTHALIYATHESEOSTHIEUTHTHKUQI TIKRAMATIVATE TORNADOTRAINERTROLLEYTRYAS" -"KATSECHKATTHACANTTILIK TYSCAPEUBUFILIUKKAKHAUM IYEKUN MEUTUP HANDUP MARKUP SI" -"GNUP STEPUP TACKURATIONURFACE URGLASSUSSYERUUT TIMEUYGHUR VANESE VAPOURSVAV Y" -"ODVAYANNAVE DOT VEMENT-VEW NOWVILIK BVILLAINVOICINGVOWEL KVYSOKO WAZ EOHWDRIV" -"ERWIFRUITWIGNYANWO FOR WO MARKWO WAENWORSHIPXOPHONEY GREENY HEARTYA LAMPYAH L" -"I YANMAR YAYANNAYELLOW YMAIC LYNAMIC ZQAPHA AGUNG DIPLI EPOCH EQUID FACE- GA" -"TE KAPAL LELET LONGA MELIK MURDA QATAN SPLIT TIKHY-HIDET-HIEUH-IEUNG-PIEUP0 " -"NGGI0 NGGO0 NYON0 NYUN00-1021 GBOO1 GOLD1 HORN1 NDEE1 WINE2 KPOO2 NGGU3 GBEE3" -" HEEI3 NGGA4 DART4 DEER4 KPEE4 MUAN4 NGEN4 NJOO4 NYIN5 MERI5 WOOL6 GUEI6 HUAN" -"6 NGGE6 TREE7 GUAN7 KAPO7 MBEE7 MBUU7 NDOO7 NGON8 HOOU8 MBEE8 NYAN8 NYEN9 MUE" -"N9 NJEEA HAAMA-KARAAASHAEACINTHAEMMAEAESURAAFFIX AGOGUEAGRANTAILUREAJANI AK-6" -"68AKABATANCHORANGKATANIMALANUARYAPISMAAPLI MAPYRUSARADDOARBUTAARSEOSASHGABASS" -"INGATTERYATTIC AUTUMNBAFILIBANWA BEFILIBETAN BGBIEEBISCUSBISHOPBLINK BOFILIBO" -"WTIEBUFFERBURGERC CLEFCALATECASTLECATAWACEVITUCHADINCHAMKOCHEIKHCHEMA CHESS C" -"HIKI CHIRETCHO CHCHURCHCKNESSCLOSETCODILECRAYONCREASECUMBERCUPPEDD DISKDAGGER" -"DE DOGDERMA DGEHOGDICINEDIESISDOKMAIDUCEUSDVANCEE WAVEEAHMUKED CAPED ICEEENTH" -"-EIGHTYELLITEEMASTIEMPUS EN GHEENIKI ENTIMAEPACT ERMATAERTUREESTAN ET KUTEU M" -"BUEUAENAEUNYAMEUREUTEVENTHEXHALEEXISTSEYANNAF CLEFF MAREFAMILYFATHA FF OF FOR" -"MEEFORTISFRAMESGANGIAGBASAQGEADALGEDOLAGGLINGGHAMALGHETTIGHEUAEGLAZ HGNANT GO" -" NGUGOBLINGORGONGRASP GS-PA GURAMUHALF HHAM AIHAMEDHHAMILOHASHKAHE MGOHEISEIH" -"ERMESHEUAEPHIBIT HIMAHUHINGE HIVETEHO HOIHORT IHUMBS HUR PAI HOOKI MAIMIASMA " -"IB YAMIDE ESIEVAN IGGLESILBOATILLAGEIN YEHINAGMAINCUNXINDHI INGAATINHALEINPUT" -"SINSHIPINWARDIRINGUISSANTISSHARISSIMOITABLEITHER ITULUMIX OF IXTY PIYANNAKAYA" -"H KE PHOKEYCAPKILLERKLITONKRISISKTIKO KUSHU2KY WAYLAFRONLAMADHLAMEDHLANDERLAS" -"TONLD MAPLEVEL-LIGIONLIGON LISHA LITIKILLIPOPLOACHALONG EM BOARM BULLMADDAHMA" -"DR MMALL FMANYA ME DIEMECHIKMPLINGMUKHI N DASHN YANGN-NISFNACLESNCH FRNDA TAN" -"EUME NGBAT NGGONGNIRUGUNISTERNIZKO NKNOWNNOKHUKNOR BUNOWMANNOZHEKNSANAQNSUZ A" -"NTEVMANTIIMUNTOGENOBELOSOCENCEOCIETYODHADHOFOUNDOGONEKOITIC ON KEYONOCLEOOMUU" -"TOPEN DOPEN POPITSAOSETTEOW TIEPALUTAPBOARDPEAKS PECIALPENCILPEPPERPICKETPIDE" -"R PIRIT POKOJIPOMMEEPTACLEPUFFEDPWATCHQAMATSQETANARAAKANRACINGRAKLITRAVEL-RBI" -"TSAREMEDYRENGTHRICORNRIISAPRISEMERKAANUROCKETRSENICRSHANARSIAN S SHOES TENTSA" -"ADIYSHAYIMSHMAAMSICKLESIXTHSSKAPI SOUNAPSPADESSPATHISPITALSSLESSSTANCESTANCYS" -"TLERSSTOLI STROFOSUCKEDSURANGSURED SWORDSSYNAFISYOUWAT NJAQTAIKHUTAMINGTARGET" -"TAU ROTAUROSTE TSETE USETERON TEUWENTHAKKUTIKENOTIMATETIRYAKTOPBARTRAPLITRIKE" -" TURBANTUXEDOU MBITUAEQTUUANGXIUBLE XUCIBLEUDARKAUGGAGEUNGAAMUP BOWUPNAYAURNA" -"MAUUMISHUYANNAUZEIROVERTKAVILIANVIRIAMWBERRYWEORTHWINDOWWN BOWWN BOXWO OF WOR" -"KERWRENCHX FACEXIMIZEXO NEOYAKASHYIN-DOYOMBO YRENE YSTICKZHITSA AMPS CAPO CHW" -"V COAT DEKA FUJI GORA HAA ICON ILUT JERA KAWI LACA MOOD SARI TABS TELU-ALAF-" -"BEAM-RING-SIOS0 BEE0 DOO0 DWO0 GBO0 GEE0 HAN0 HEE0 JOO0 MAN0 OIL0-VAS1 DWE1 F" -"AN1 PEE1 TEE1 TWO1 WVI1 YOO1-VAS18CFF2 HEN2 HOO2 KPA2 KPI2 MBA2 MBE2 MBO2 MBU" -"2 NJA2 NJU2 POO2 PTE2 SEE2-VAS3 BOO3 FOO3 HIN3 HON3 NDI3 RA33 VEE3 WEI3-VAS32" -" JE4 ABB4 GBI4 KPU4 LEE4 LOO4 MBO4 MON4 NDO4 TOO4 VOO4 WOO4 WUI4-VAS5 KEE5 MB" -"I5 NDU5-VAS6 GBA6 KOO6 RA26 SIA6 SOO6 TA26 WEE6-VAS7 FUA7 GBE7 HUN7 JEE7 MIN7" -" NEN7 NIN7 TWE7-VAS8 FEE8 GBU8 KPE8 KPO8 MAN8 NAN8 NWA8 RO28-VAS9 DEE9 KUA9 M" -"EN9 MUN9 NDA9 NDE9 NON9 NUN9 PU29 WVA9 WVE9 YEE9-VASA UNAA YUEAADHUAAMAEACHKA" -"ADDERADULTAEMAEAEPENAEREEAGMA ALGARALLEYALLI ALOG ALPHAAMBDAAMEKHANGELANNONAP" -"PLEAR AEARERUARTARASAR ASEIAASPERATAF ATIYAAUTHSAVROSAWAY BAARUBACUSBALAGBASA" -" BASSABAWAKBEITHBENDEBHADHBHETHBISAHBLAKOBOOTSBORZYBREW BSTERCAANGCAKESCAKRAC" -"ALYACANUSCAUDACAUSECCEPTCCOLICECAKCECEKCEREKCHADACHERYCHESTCHIMECHOOICHOOLCHU" -"LACHUTECIEUCCKAGECKTIECLIFFCLONECLUBSCROWNCTRICCUBEDDAIC DATUSDBOATDELTADENCE" -"DEPTHDESTYDHAM DKAR DLINGDOTS-DSMANDWICHE GEEEAGLEEATH EBALLEESHIEGALIEGIONEG" -"L HEIDONEISMAEKEETEMAKEEMBICEMLJAENANOENDEPENENGENJETEO-EUEOPLEERINEERKHAESHE" -"3ESO EET TUEUAEMEURAEEYBUSEYYALF COWF EWEF SOWFAAFUFAIHUFEARNFLAGSFLICTFLUTEF" -"ORCEFSAAQGADOLGALGAGAMALGAMANGAZE-GEAN GESH2GHNUTGHULUGOGI GORGIGULUSGURE GVA" -"NGHAALUHADDAHAINUHALA HALQAHAMSOHANNAHASE-HATHIHAYINHELAPHETHEHIMELHIRIQHISTI" -"HIUTHHOLAMHOLARHOTELHROOMHUMP HUTA I KOII-RESIARDSIAUDAICHONICRONIHVUSIKARAIK" -"URUILVERIMGBAIMMA IMMERINGSAINNA INTHUIPEHAIPINGIRACYISTLEITHI ITUALJANG JERV" -"IJUDGEJUDULJUEUIK-020KARORKBALLKERETKESH2KHAPHKNOBSKO LAKTOP KURONKUSMAKWAENL" -" NETL-JUZLABATLABORLAGUSLAMDALATIKLAYARLEASELENISLOAN LOBE LOMKALOOP LOURELUR" -"ALLWAY M RAMMAAEHMAALAMACUSMADYAMAI KMAIZEMALONMAQAFMEEMUMEIZIMELONMENOEMEPET" -"METEGMETRYMI ROMIEUMMINDUMINGOMISRAMMOTHMPAREMROCKMSHAEMUCH MUHORMUOY NA PONA" -"BLANADA NASHINCORANEGARNEMKANENOENGENTNGMANNGUE NIEUNNINTHNIS FNNAN NSIEENSUA" -"ENSYONNTHA NTXIVNUENGNZEUMO ANGO BOXO KAIO PLAO RUAOBYLAOCADOOJKI OKARAOKEE O" -"LD XOMBIEOMMAEOPLETOQPENORUTOOTERIOTHALOTTHIOUNCEPASEQPATAKPCHA PEAN PEITHPEN" -" OPEN-PPEPETPI ROPITERPLHAUPLUTAPLUTOPMUNKPOLI PONSEPPAGEPSILIPTUNEQAAFUQUIRY" -"R-RUBRACHYRAIDARASHARCHIDRDIONREGIAREIWARELA RELAAREPHARICEMRIEENRIEULRILLARI" -"TSIROGOMRONOSROTCHROWN RRITORUDAARUHUARULAIRUMP-RUSH RYASOSADHESAKINSAKTASALA" -"DSATA SAUILSEGOLSENTOSHANGSHAR2SHARASHARUSHIMASHOOKSHTINSICLESILA3SKATESOLVES" -"PINESTARTSTEP-STNUTSTORMSUKUNSURYASUTUHTEGEHTENSETHINGTIGMATINNETIPPITKAANTMA" -"AUTON ATONPITORCHTORSOTOYORTRACKTRAIFTRIOLTSADITSEEBTSERETTOCKTTORUTUEUMTURN " -"TUUMUU U UUBITOUBURUUBUTSUDAATUGUSTUKARAUMMERUNGBAUNITYUNOO UQUETURINEURITYUR" -"TLEUTEUXUTIESUTTHIUWAR VAAVUVARCAVATORVIET VITAEVRIDOVZMETWAAVUWAQFAWATTOWBOA" -"TWFISHWIDE WINDUWINJAWISADWU318WUAETXING XTRA-XW XWXYOOJYAMOKYECEKYENAPYIZETY" -"STERYURIIZHAINZIDI ZILDEZSEKAZYGOS C D OHM R S WEB-RAY-UM 0 BI0 HO0 JU0 KO0 N" -"I0 PU0 RA0 SA0 WI0 YE0 ZO028B1 DA1 DO1 DU1 GA1 HA1 IN1 KI1 KU1 PO1 QI1 RA1 SA" -"1 SI1 SU1 VU1 YI13582 BU2 KA2 L22 NO2 PE2 QO2 RO2 SO2 VI2 YA3 A33 EE3 JE3 JO3" -" KU3 L33 LE3 ME3 MI3 MU3 PA3 RI3 TA3 YU4 DO4 FI4 KE4 L44 NE4 TE4 TU4 WA4 WI4 " -"ZE5 A25 AN5 AU5 BB5 DE5 FA5 FE5 GI5 IN5 JU5 LI5 MO5 NU5 OO5 TE5 TO5 VA5 VE5 W" -"A5 WE6 DI6 FU6 HE6 HI6 JE6 JO6 L66 LA6 NA6 PO6 QA6 RU6 SE6 WU7 BE7 DA7 DD7 EI" -"7 JA7 KI7 LU7 RE7 TI7 VO7 ZA8 BO8 DU8 EN8 FO8 GU8 JI8 KO8 PI8 QE8 SU8 WE9 JA9" -" PA9 PI9 SE9 SI9 SO9 TA9 TO9 TUA IEA-HAAACUAFELAHADAILMALAIALDAALTAAMLAAN XAN" -"AEAPAQAPONARA3ARGIAROOARUMATIMATYAAULABALDBASHBAYIBBITBERDBETHBOOKBOREBUNGBUO" -"YCANOCASECAYNCHAUCOONCORECRETCWAADAGSDAIRDDAKDDHIDEADDGERDIM2DZHAEAAEEEEEEENU" -"EHEHEIRTEIWSEZZOFAIBFASTFEEMFETHFEUQFFINFIRIFITAFROGFWAAGAMEGAMLGEDEGGWSGHOMG" -"HWAGIBAGIDAGIEAGIR2GOALGORTGROMGRU GUINHAVEHAYNHEEPHEROHERUHEYNHEYSHEYTHHWAHI" -"D HIINHMI HOM HOPHHSDAHSHUHUB2HUENHUVAHWAAIANOIARAIEN IFATIGERIITOIK HIKIRILU" -"YIMARINORINY IODEIPODIQAAISI JEONJIIMJOT JYAHKAAFKAD3KAKOKALIKAPHKCETKEUPKICK" -"KINIKMA KOBAKOETKOKEKOKOKWAALFERLFIELIFULIUMLIWNLOLLLOVOLUISLUMNMARUMARYMESOM" -"FAAMIIMMIINMLYAMMU2MPETMUASMUINMVATMWAANAAUNAG NAM2NANANCERNDAPNDUENEMANEO NG" -"A2NHAYNJAMNNNANOWCNPEANRUANSHENSUBNTAANTOCNUNGNUUNNWAAO-YOOBATOBROODLEOFUMOJI" -" OJODONA ONUTOONEOOTHOPODOPUSORAXORIIOUBTOXIAPARDPAWNPEEIPEEPPEUXPHABPHINPLUG" -"PLUMPOLOPPHOPRILQASRQEF QHAUQOPARAFEREIARGU2RIFYROA ROARROOKROUTRPSERROIRSO-R" -"T TRUISRUKURUNARUSISA-ISAATSEENSEEVSELFSEYESHTASHYASHYESIKISINKSLURSOKASONGSU" -"ABTFONTUKITURUTZELUGU UHURULU UNAVUON URUSUSA UTAEUTANUTTYVEDEVEUMVEUXVEYZVID" -"AVIYOVOS VUEQWAAKWAETWAHAWAIRWAW WDERWULUXEIAXEYNYAWNYEUXYUDHYUKUYUPIYWAAZATA" -"ZAYNZELOZETAZIETZIZ2ZZY 0 E0 U0-004A0B91 X1-01-212114D15518D2-020B2532DD3 D3 " -"I3-030531C4 E4-05 U5-05505575B66-06206D77 O72C8 A8 I8F09819E3A7AAEFAL2AUJAWXA" -"ZUB57B89BIBBXGCA9CAHCAICIGCWICYAD42D70DA2DE6DIBDJADUBDZEE80EEGEIEEYKEZHF14F8C" -"FAJFLYFOMFUEHAQHOJHOXI-IIMNIWRJAHJEUJHAK00KAQKUEKUGLFALK LULNIIOAYOIXPOQPUQQ0" -"0QARQIFQIGQOFQOTQUFSIISUUTJETUJUDYUEZUMXUOPUQAVAUVNOVOKVOYVUUWAUWOQX00XAUXEHX" -"WVY00YOTZJEZOOZORZUPZZE16171D1F343638394048494B4E647890929599C0D0G0G3G9LXR7VD" -"VWZ0"; +"IN WITH GILE SYMBOLGRAMMA SIGNGRAVE-ACUTEGSUM -KHYILGUISED FACEHAGGAR YAZHHAN" +"G KHUDAMHAWH HMONG HEATED FACEHEAVEN MARKHEELED SHOEHIGH STROKEHITE DRAGONHLE" +"TIC SHOEHOKHLOM ON HORA DIGIT HREE BALUDAI TIMES BADI TIMES NUNIBLE-CREE YIL " +"FRAGMENTILCROW SIGNILIQUA SIGNIMULTANEOUSIN EQUAL TOINDERGARTENINDICESIMA IPL" +"E TONGUEIRCLED TEXTIRCULAR ARCISIGOTHIC ZIVERY TRUCKIX TWELFTHSJECT SYMBOLJIH" +"VAMULIYAJOYOUS LAKEKAARA POLLUKRAINIAN IEKTIESELSKABL OF THREADL TIMES LALLAC" +"K SULFURLACKLETTER LATIN CROSSLCE TSA CANLD POLISH OLD SCRIPT XLEAF CLOVERLEE" +"P SYMBOLLEFT DOUBLELEFT SINGLELEFT SYMBOLLETION MARKLEU SATANGALINE FILLERLON" +" SKEWED LOSED ENTRYLOSING MARKLOTI NAGRI LT OF CLOTHLTED FLOWERLTERNATE AALTE" +"RNATE YALU PLUS IGILUPOVODNAYAMACING FACEMBA BAYANNAMBLER GLASSME LONG CANMED" +" RGYINGSMFON PIPAEMMICAL HEARTMIDDLE BENTMIDDLE HOOKMIDDLE STEMMONOCULAR OMOV" +"ED BELOWMUNCIA SIGNMUUSIKATOANN THE VERGENBLENDED UKND ODD SIGNND OF PIECENES" +"E SMALL NG LEFT LEGNIKOLSBURG NITIAL IZHENSE CHEEKS NTIMONY ORENUMBER SIGNNUM" +"BER ZERONUN HAFUKHANUSVARA ONENYIS -KHYILOF ENVELOPEOF MASHFAATOHINGYA YEHOLD" +" NUBIAN OM PUSHPIKAOMAN SIYAQ ONIAN SIGN OPPOSING ENOPPOSING IMOR OPERATORORC" +"E SYMBOLORT BARLINEOUBLE ACUTEOUBLE DANDAOUNDED FACEOUTHERN TSEOVERSTRUCK PAR" +"AKALESMAPERISPOMENIPHNAEK MUANPIRAL FROM PODCHASHIEMPOST OFFICEPUT MORTUUMQUA" +"LS SIGN QUERED FLAGQUIQUADRATERA SOMPENG RACHMA SIGNRAISED FLAGRANSMISSIONRCH" +"AIC JNYAREAKTHROUGHRESPONDS TORIGHT GUARDRIGHT HEAVYRIGHT-HAND RING LIQUIDRIP" +"LE PRIMERISING DOTSRITING HANDROKUTASTI ARONTHISMATAROR-BARRED ROSS ACCENTRUN" +"NING MANRYVNIA SIGNSECOND MARKSHAAYATHIYASHEQEL SIGNSIMILE SIGNSINGLE AND SMA" +"LL CLOUDSPEED TRAINSPIRATED FASSANGKIYEOKSTEAMY ROOMSTERED SIGNSTORIC SITESYM" +"BOL VIDJSYURA SASAKT VEGETABLETA EQUAL TOTAAALAA ANHTENS DIGIT TETRAFONIASTH-" +"THALATHATHAM DIGIT THIRD BLOCKTHIRDS SIGNTHREE TIMESTIEE SHEUOQTIGHT ACUTETON" +"AL MARK TORTED FACETRAIGHT WAWTRESS SIGN TRESVETLAYATRIAN CAMELTRUNCATED ATWO" +" FINGERSTY THOUSANDU ALAYHI WAU-TIGALARI UBLE TONGUEUETTE BREADUG RTAGS GYUIS" +"HED FACEULO TWO SUMUMAN FIGUREUNIT DIGIT UNJO WYNN WUPADHMANIYAURRENT SIGNUSH" +"ING HANDUTH CORNERSUTING WHALEVA V CHELNUVAMAGOMUKHAVARYS ICHOSVE OF PEACEVER" +"TEX OF VVISARGA ONEVYKA ABOVE WASLA ABOVEWE PALAUNG WHITE JOKERWING NEEDLEWIN" +"KING EYEWITH GARDENWO TWELFTHSXAGRAM FOR XESTES SIGNXI RADICAL XTINGUISHERYEO" +"RINHIEUHZERO THIRDSZIGZAG LINEZZA WA JALL AND ACUTE AND ARROW AND BREVE AND K" +"NIFE AND MOUSE DRAWINGS KABA TENU LATE FORM OF DHARMA OVER KAD5 PLUS SHU2 PO" +"VODNAYA RESUPINUS RGYA GRAM SCHROEDER THOUSANDS TIMES SHE WITH BARS WITH BASE" +" WITH BELT WITH EGGS WITH LOW WITH PAGE WITH PLUS WITH RAIN WITH RING WITH T" +"AIL WITH TICK-LUE KARAN-SHAPED HA1 LONG MBE1 PLASTICS2 LONG MBO2 PLASTICS2 PL" +"US ASH3 PLASTICS4 PLASTICS5 PLASTICS6 PLASTICS7 PLASTICSA PLUS IGIA PLUS KURA" +" TANG LAIAB2 TIMES ABATA TREEACE FILLERADAK BINDIADDA WITH AEDA-PILLAAILED BI" +"RDAKKHANGYAOALEF LAMEDALEF WITH ALENT SIGNALLY MARK ANDHI MARKANGKHANKHUANGUL" +"AR TOAR ECLIPSEASPIRATIONASTERISCUSAT HORIZONATRICHISMAATTY WITH AUTOMOBILEAY" +"ER BEADSBA SATANGABELOW LEFTBLACK FLAGBLUE HEARTBOLD SHAFTBROKEN BARBSTRUCTIO" +"NC WITH DOTCAPITAL ETCH BALLOONCHAD RTAGSCHARACTER-CHECK MARKCIRCLED CACISIVE" +"NESSCOLATE BARCOMPONENT COMPONENT-CROPHONIC CROSS MARKCURLED WAWCURLY HAIRCY " +"MESSAGED KEYBOARDD WITH DOTDA PLUS HADA SATANGADED PERSONDIATONIKI DIGIT ZERO" +"DIRGA MUREDOUBLE BARDUOUS TREEE PLUS SUMEARLY FORMEARTH MARKEBENSTIMMEED FIGU" +"RE-ED FINGERSEDESTRIANSEDIC TONE EEKING EYEEICH STARKEIGHTIETHSELT BUCKLEENET" +"RATIONENS SYMBOLENTHUSIASMEONGCHIEUMEQUIHOPPERETTA-PILLAEUTRAL YEREVERSED PEF" +" SHE-GOATFAHRENHEITFFICULTIESFINAL HETHFOR RECORDFORMATTINGFRONT WALLFTOGGOS " +"OUG MUNDARI GAGE CLAIMGANDA MARKGAS BZUNG GBAKURUNENGGING FACEGGRAVATIONGHT L" +"IFTERGIMEL-HETHGOLUBCHIK GREE SLASHGUA PI MAOHAAPRAANA HAMZA MARKHAN DIGIT HE" +"AVY BEATHERMOMETERHOOK ABOVEHOTIC HOOKHREE ABOVEHUNGARIAN I ARCHAIONICAL TAPE" +"RIDDLE MARKIDEOGRAPH IED SHRIMPIGATING RAIGATURE OEIKRON ISONILE FOLDERINDEX " +"BENTINDU BELOWING LARGE ING-SHIFT INHERENT AINITIAL RAINUS SIGN ION BOTTLEISM" +"UTH OREIT MBAAKETITH DIGIT IXTHS DISHJALALOUHOUJONG TILE K2 PLUS BUKA SATANGA" +"KAI SYMBOLKINDI MVOPKRYZHEVAYALACK JOKERLANE MERGELE LETTER LE-DELAYEDLEFT GU" +"ARDLEFT HEAVYLEFT LIGHTLEFT SERIFLEFT-HAND LEK ATTAK LENDED YUSLET SYMBOLLGIZ" +" EOLHXLHAG RTAGSLIGHT BEATLIGHT BULBLIMITATIONLINDRICITYLLOW HEARTLOGICAL ORL" +"ONG FINALLONG OVER LONG SIKI LONG TSHEGLOWER HOOKLOWER STEMLPAPRAANA LTERNATE" +" ULTIC CROSSM STALLIONMADDA MARKMALL ALEPHMBINING DOME PLUS ENMEEM ABOVEMEL S" +"YMBOLMILLE SIGNMINO TILE MONOFONIASMONOGRAM BMONOSPACE MONTH SIGNMOTORCYCLEN " +"NGGEUAETNAKE BELOWNANGMONTHONASPIRATEDNDA PA NJINDU TEMPLENGLICANA WNOTE WITH" +" NTITY MARKNTO SHRINENUMBER TENOANDAKHIATOCKET SHIPOF HYGIEIAOLING FACEOLON E" +"QUALOMMA BELOWON MEDIAL OON LILITHOON SELENAOP NKAARAEOPEN SHELFOROME SIGNORT" +"HERN TAOSSED SHEIOSTAL MARKOTING STAROUND OMEGAOUR FIFTHSOUT INDEX OUTER JOIN" +"OUTHERN TAPAO DIGIT PASSIMBANGPEDAL MARKPLUS BELOWPLUS ERIN2PLUS NAGA POLICE " +"CARPOUND SIGNPPING BIRDPPOPOTAMUSPRALINEAR QUISH QUADR2 PLUS SURAGGISMATARCHA" +"IC KHARDHACANDRARECIPITATERED DRAGONRESH BELOWREVERSED IRGE CIRCLERGE SQUARER" +"HO SYMBOLRIGHT HOOKRIGHT SIGNRING ABOVERING THUMBRKING FACEROAD OMEGAROEZENIA" +"N ROUND DOT ROUNDED ERRSI SYMBOLRUDIMENTA RUPEE MARKSBUB -CHALSCAN LINE-SE-CR" +"EE SKSELINE ESHSGOR RTAGSSHARP SIGNSHMIRI YEHSIDEWAYS ISIXTEENTHSSMILO SIGNSP" +"ACE MARKSS OF MILKSSANGARAEASSANGPIEUPST PALETTEST-FEEDINGSTRAL SIGNSTROM SIG" +"NSTRUCTION SYLLABLE MT AND BOLTTAIL GLASSTAMAN SIGNTELEVISIONTEMPLATIONTERNAT" +"IVE TESE CROSSTHAPASCAN THDAY CAKETHMIKON N TIMES SIGNTING HEARTTOMIC BOMBTOP" +" CORNERTREFACTIONTRESS AND TRETCHED CTRIPLE DOTTWENTIETHSTWO SHORTSTWO THIRDS" +"TYPE COLONU CIN HAU U2 PLUS BAUAM TSHOOJUARDEDNESSUBLE DASH UM ROTUNDAUMAN EA" +"RTHUNG KHEMA UNKIA SIGNUP HARPOONUP NEUTRALUP OR DOWNUPPER HOOKUPPER STEMUR H" +"UNDREDUR YIG MGOURIPIGMENTURVED OMETUSEL HORSEUTH OR SPYVASTI SIGNVEL SLIDERV" +"ERAGE BOXVIE CAMERAVIOUS PAGEW OR MODELWHITE FLAGWHITE HAIRWHOLE NOTEWING HEA" +"RTWITH SPOONWITH STRAWWITH WINGSWO SHORTS XED BICEPSXHEEJ CEEVY AND RICEY CRE" +"ATUREYEH BARREEYMBOL AIVAYPE PIECE ZAR AMULETZEIRO SIGNZH DIGRAPHZU OVER ZU A" +"ND BELT AND CURL AND TAIL APODEXIA DIVIDERS FROM BAR GARSHUNI OF BLOOD OF PAP" +"ER OVER BAL OVER LUM PLUS GAL PLUS GUD PLUS KU3 PLUS LAL PLUS SAG PLUS TUR PL" +"US ZA7 RA OR RI RICKSHAW SPARKLER STREAMER TIMES HA TIMES UD TROMIKON-AMMONIA" +"C-KHYUD PA-LOW TONE-MID TONE-STACCATO0 LONG LE1 CHARIOT2 GARMENT247 DIPTE3 PL" +"US AN5 BATHTUB5 CYPERUS5 LONG JOA PLUS NAABOVE TO ACE NOTE ACING CARADEG ADEG" +"ADMA GDANAF PERSONAFFE FACEAINTBRUSHAISED DOTAJANYALANAL RUNOUTALAYALAM ALI G" +"ALI ALPAPRANAANEROSIS ANG CITI ANGGEUAETANSKRIT SANTAYALANANTHAKHATAOS ICHOSA" +"RCHAIC MARISTERA AS MEMBERATHAMASATATTACHED AVE ARROWB DIGRAPHBASE UNITBEER M" +"UGSBIAL SIGNBICYCLISTBING CANEBITE LIPSBKHASIAN BO BAIMAIBO GYFU GBOTH BENTBR" +"UL SHADBTRACTIONCANG TE-UCAPACITORCAPITAL DCAPITAL ICAPITAL QCARTRIDGECHANICA" +"L CHAVIYANICHOSEONG CLOSED PLCOIN SIGNCOMPLETEDCONJOINERCORN FACECQUISITIOCRE" +"SCENDOCROUCHINGCUBE ROOTCULTATIOND SALTIREDENT AND DEPARTUREDIAGONALSDOWN HAN" +"DDOWN SIGNDOWN STEPDOX CROSSDRAM SIGNDUS RTAGSE AT LEFTEAVY DOWNEBIT SIGNED D" +"IGIT ED PLANETEEN WITH EFAIDRIN EFORMED TEIGHT OF ELEGRAPH ELLOWSHIPEMBEDDING" +"EMPTY SETENTRE OF ENTRY SAWER BUBBLEERCIAL ATERTY LINEES AKURU ESAME DOTETER " +"SIGNETRASIMOUETTI BALLEURO SIGNFACING UPFEH WITH FINAL MEMFINAL NGAFINAL NUNF" +"ISH TAILFLAT SIGNFORTUNA MFOUR BENTFROM WALLG IN HOLEGITTARIUSGREATER YGRIK S" +"IGNGUAGE TAGHAIKSUKI HALF NOTEHALF SIGNHALSHELETHARACTERSHARD SIGNHEADSCARFHI" +" SYMBOLHIMA SIMAHINOCEROSHIYYAALAAHOOK MARKHOT SASAKHREE FOR HWAZ EH EI PLUS " +"LIIA SYMBOLIALECT-P ICE CREAMIDEOGRAM IDEWAYS UIGH HAMZAIGHTH ASHIGN NUKTAIGN" +" SAFHAIGN TOMPIILE TILDEILIPPINE IN SQUAREINAL NOTEINARBORASINFINITY ING CARD" +" ING DOLLSING GLOVEING LANESING STONEINISHMENTINNYIIYHEIRST MARKISEN-ISENITRA" +" SIGNIVE-PULL-IVINATIONJERUSALEMK GESTUREKA- SHOG KAMEYTSA KEMPHRENGKING BOOT" +"KSTREPTONKU RU KHAKYO TOWERL ME HANDLACKFOOT LAN SIGN LARGEMENTLEFT RINGLESS " +"TREELIGHTNINGLINE FACELISSANDO LITTLE UPLIVERANCELLABLE B0LLABLE OMLOND HAIRL" +"ONG TIP LOWER DOTLVIN SIGNM HE-GOATMAEMGBIEEMALL RINGMARK CIM MARK SHADMBROID" +"ERYMETOBELUSMHANCHOLLMRACHNAYAMUKPHRENGNA KHONNANCLOSING NDAILING NFORZANDONG" +" SANDALNGER ROOTNGER SHIPNGUN SIGNNIGGAHITANIGHT OF NIHSHVASANING SIGNNO TELE" +"IANSERT AT NTERPRISENTESSENCENTRACTIONNUSVARAYANVERTED ROCCLUSIONODIASTOLEOF " +"STIMMEOKED HEADOKED TAILOKOUFISMAOM SYMBOLON GROUNDON TEUAEQONE MARK-ONE THIR" +"DONG GRAVEONGSEONG ONJUNCTIOOO DENNENOP HALF OOPEN EYESOPEN JAWSORT-TWIG-ORTH" +" WINDOTAL SIGNOURA SIGNOUT BEAMSOUT MOUTHOUTH WINDOVER GAN2OVER MUSHOW KAVYKA" +"P DIGRAPHP ELAMITEPAA-PILLAPADE SUITPANYANGGAPENT SIGNPENTASEMEPIDERY HAPLE H" +"EARTPOSITIONSPPOINTED PPOSITIONPROJECTORQUADCOLONQUADRANT-QUEEN OF QUSHSHAYAR" +" PLUS RARCHAIC IIRCHAIC RARDEL DKARREAK HERERED JOKERREDNE ON REFORMED RFUL F" +"ACERIA ERFE RIED FACERNEY PARARO WIDTH ROJECTIONROTATION-RPORATIONRTER MARKRT" +"S MEDALRUM CLEF-RWARI DDAS DIGRAPHSEMICOLONSEPTEMBERSHAB CEEBSIVE FACESMALL Y" +"USSOF PASUQSPIRITUS SSANGSIOSSTAL BALLSTEBASKETSTRELNAYAT OF MEATT ON BONETAB" +"E SIGNTAKHALLUSTANDSTILLTED PLANTTEH ABOVETHROUGH XTIMES NA2TIMES PAPTO CORNE" +"RTONE MAI TRAIGHT UTREDECILETRESVETLOTRISTITIATTED STEMTUKWENTISTUTEYASATUBST" +"ITUTEUE MAEMBAULL BLANKUMED HEADUNGLASSESUNGSEONG UPPER DOTUPTSTIMMEUR CORNER" +"UR-DE-LISURAMAZDAAURLY LOOPURNED AYBURNED GANURUZ UR UUTRA MARKUURDHAJA UVUZH" +"AKKUVANAGARI VELOPMENTVER LUGALVERLONG AVEUAENGAMVICE MARKVIGINTILEVINE LEAFV" +"ISARGAYAVOCALIC RVOETOCHIEVRAKHIYA WASH TAILWING STARWITH FACEWORDSPACEWRINKL" +"ES WRY SMILEXCITEMENTXHAUSTIONY-FOURTH Y-FOURTHSYEAR SIGNYEH ABOVEYRANISMA Z " +"DIGRAPHZAKRYTAYAZAL SASAKZENE RINGZERO SIGNZIR SASAK ANTENNA AT DUSK CEDILLA " +"FACING HANDLES KEMBANG LANTANG NUTILLU OF YARN ON LEFT OTTAVA OVER KG OVER " +"MU OVER ZI PLUS DI PLUS DU PLUS RU POLNAYA RASWADI SATCHEL SCOTS S SLIDING TA" +"LENTS TTUDDAG WA-ALAA YUQ NAE-CREE TH-EM DASH-KHIEUKH-PHIEUPH-X BELOW0 BRONZE" +"1 BARLEY1 HELMET3 ARMOUR56 TURO28 KANAKOA SIGN AABAAFILIABOAFILIACKSPACEAEN N" +"YAMAIYANNOIALLIANCEAMS HORNANC SIGNANE TREEANS SIGNAPITAL FAR TSHESARCASITEAR" +"KLEAN ARRIVINGARSI YEHARTYRIA AST WINDASTERN WATAKANA ATE MARKATEBOARDATH MAR" +"KAVY BANDAY-NIGHTAZHAAKKUBACKWARDBASSINETBATBEIT BER POLEBEVERAGEBIEE FONBILL" +"IONSBINOVILEBLE SIGNBLED CARBLINEAR BOL SIGNBOT FACEBOX TRAYBRA FACEBUNDANCEC" +" SIYAQ CABLEWAYCAL DISCCANDICUSCASSETTECEILING CER BALLCHATTAWACHINESE CK CHA" +"RTCLIMBINGCOMBINEDCOUNCIL COUNTERSCURLICUECURSIVE D BUBBLED CROSS DAMMATANDAN" +"TAJA DDY BEARDIAMONDSDIFONIASDIM GUNUDIT CARDDOCUMENTDS-CREE DUSHENNADVANTAGE" +"DVISVARAE COOKIEE OF POOEBEEFILIECH YIWNED BRICKEGORIAN EK ONKARELEPHANTEN NT" +"EUMENICIAN EOUT BOXER TRUTHERAL URNERDIGRISEREVODKAESH LOOPEST WINDET SHOESET" +"A SIGNETRASEMEEUFEUAETEVEN OF EVERANCEEXCHANGEFEBRUARYFILE BOXFINAL THFLOURIS" +"HFOR STOPFRAKTUR FRICAN DGARITIC GBASINNAGENITIVEGERPRINTGLASNAYAGORAZDO GREA" +"T SAHAGALL HHALF GURHAN-AKATHARBAHAYHARMONICHESPIAN HIRDEABOHOP BELLHREE OF H" +"T CLOUDI SHAKTIICHAEAN IGHT ARMIGMOID SIMANSIS INAGARI INDUCTORING BELLING BO" +"WLING ROD IRD MARKIS FORM IS WHEELIS-PILLAITA MFONJACK OF JAVIYANIJUNCTIONKAI" +"YARAAKASRATANKATAKANAL POLISHL-LAKUNALA LENGALAETITIALATION XLEANING LESS SHA" +"LESSER YLF RING LFWIDTH LKULIZMYLOCATIVELONG BARLONG S TLORRAINELOW STOPLOZHI" +"TIELTRY LEGLUB SUITMALL AXEMANDARINMANGALAMMARRATANME BADGEME WITH MEM-QOPHMI" +"ONIAN MMATION MON TIMEMY HOUSEN-JOINERNA METEKNAMENNY NAVIYANINCE SIGNNED FOO" +"DNEIFORM NG RTAGSNI ABOVENINE OF NITIAL ZNO SLASHNO THUMBNOTE PADNOVEMBERNRES" +" TOSOBOOFILIOCALIC MOCK SALTOCUS OF ODESTONEOHM SIGNOLLOWINGOM NTEUMOMANIAN O" +"MMA BARON CROSSONE BEATONE FOR OO TYPE OREHEAD ORM FEEDOT MBUAEOTIFIED OVER B" +"U OVER GA2OVER GI4OVER SAGOVER SHEOVER TIROVERRIDEPAIRTHRAPAKPAK EPALOCHKAPAR" +"ATED PAVIYANIPENTAGONPRECEDESPROSTAYAPUB DAWBPUN IYEKQAIRTHRAQUINTILER-RAHMAH" +"RAMMA GGRASMIAN RAT RAI RAUGHTS RDEL NAGREATNESSRED HAIRREE MARKRESVETLYRILLI" +"ONSRIYOOSANROSHTHI ROSSED ORSE DUNGS OCHKOMSALT OF SALTIRESSANYAKA SCRIPT GSE" +" WEDGESENTAGONSEXTANT-SHKIR KASHOE JOTSHORT ERSIFISTONSIGN LAESIGN PVOSIX DOT" +"SSMA SIGNSNA LDANSOFTNESSSPERSIONSQUEEZEDSUCCEEDSSUPERSETSWIMMINGT NGGEETTAAL" +"UJA TAI LUE TAR EYESTATASOUETER FACETHIOPIC THOLHOMATHOSCOPETICK IN TIRRUP RT" +"ISMOS ETO-LEFT TOWARDS TRI DISHTRICOLONTTENTIONTTO MARKTURNED MUAREG YAUATRIL" +"LOUBJOINERUDAWADI UKEUTNDAULLS LEGUNDERDOTUNDERTIEUNG DASHUP TRUCKV OVER MVE " +"SASAKVERGENCEVESSEL BVOLUTIONVOMITINGW PRINTSWASH KAFWBOY HATWN HEARTWO ABOVE" +"WO BEATSWON SIGNWRINKLEDWRITING XCELLENTY BEETLEY POPPERYAMAKKANYBEYFILIYENIS" +"EI YER YAGHYESIEUNGYIDDISH YPORROONYRILLIC ZAKRYTOEZWARAKAYZWJ THAJ APLOUN BU" +"TTON CER-WA FLEXUS ISLAND KEFULA LONSUM MAELEE MENDUT MINUS MUOMAE MUQDAM OC" +"LOCK OPEN-O PLOPHU RAMBAT SHAKER SLOWLY STRIDE TAMURA TEDUNG WAAJIB WOLOSO-CR" +"EE R-KIYEOK-MACRON-MU-MO--SHIFT--THIRTY-TIKEUT-WELSH 0 SPEAR0 WHEAT1 ARROW2 O" +"LIVE2 WOMAN26 EYYY3 AREPA3 EIGHT3 MONTH3 OMEGA3 SPICE3 SWORD3 WHEEL5 NGGEE6 N" +"GGOO7 NGGUA7 NGUAN9 CLOTH9 NGGAAA -PHRUA NAME ACTER TAD NECKAELAENGAETMEUNAHA" +"PAKHALESMA ALLOT XALTILLOAM ALEFAN MARKAND ENDANDERERANGKUOQANGLED ANGLONGANG" +"OLATAPEZIUMARDNESSARRED BARRED OAS SIGNASHTRA ASUTORUATAEAN ATH OF AU MARKAUL" +"DRONAUNTLETAXIMATAAY SIGNBAIRKANBAMBOOSBARREKHBASIGNABERGINEBERRIESBIG YUSBLA" +"CHKOBLOSSOMBOARDERBOOSTERBORZAYABOURINGBREVIS BUFFALOBULANCECABINETCAP TENCAY" +"ANNACELSIUSCHEINAPCHIEUCHCK LIMECLEAVERCLOSE ECLOTHESCOMING CONTACTCOPTIC CRA" +"CKERD MADDADA FACEDANCINGDANESE DAYANNADEAVOURDHALATHDIARGONDIPLOUNDISIMOUDOF" +"ONONDRIL BUDU NJAADYNAMICE DRINKE GLASSEAD OREEAGULL EAVY YAECEMBERED RICEEFT" +" ARMEIGHT KEL PUMPEN LEAFENSHUETER THANERNIN AESTIVALETNAHTAEULEUNGF DAVIDF S" +"ASAKFATIGUEFAYANNAFINAGH FINAL YFLUENCEFORKINGGAYANNAGENERALGHEUGHEGLAGOLIGO-" +"KARTGOLIAN GRADUALHAARKAAHALANTAHANGUL HAYANNAHEADINGHEXAGONHI SIGNHIUCHUSHOD" +"DONDHYAAUSHI NTEUMI RTAGSIANGQI IBIFILIIC WANDICOPTERICYCLESIKHAHITIL DRUMILL" +"EANNIMILAR INNABARISIBLE ITALIC ITON RAIVE OF JAIN OMJARATI JAYANNAJECTIVEJER" +"AN JJIBWAY KARO BAKAYANNAKEUAERIKHA YATKKURUNIKOMBUVAKOQNDONKORONISKPAK WAKUT" +"AARUKYLISMAL SEGNOLAGIOS LAK-050LAMITE LASHES LAYANNALE LEAFLEK TOOLENGTH-LEU" +"T KALEYBALLLF FACELIGHT XLJUDIJELLYFISHLOSION LYGISMAMAAYYAAMAI SATMANCHU MAR" +"CATOMASSAGEMBOL B0MEETORUMERICASMINGKALMINIMA MONSTERMRACHNYMUNGKAHNANCIALNAY" +"ANNANEQUDAANESTED NG MASKNIKAHITNJAEMLINUMBERSOCTAGONOCTANT-OCTOBEROF SOAPOFF" +"ICEROGDIAN OKRYTIEOLAPUK OMERANGON FACEONG UEXONGONANONTIEENOP MARKORCULUSORE" +"VMA ORKHON ORTIETHOT NGOMOT REPHOUR OF OUT HUBOUTWARDOVER ANOVER DUOW ALEFOWI" +"LO SOX BACKOX LINEP PIEETPALLAWAPANESE PANSIOSPARERENPAYANNAPAYEROKPECTIVEPEG" +"ERMAPENGKALPERVISEPHUTHAOPLOYAN POMOFO POVODNYPPROACHPRENKHAPSTICKSPTHAHA PUR" +"PLE PUSHPINQUARIUSQUEEZE R2 GUNURA REPARAKHANGRANGKEPRARIETYRAYANNARD FACERDO" +" RJEREATHY REREKANRESILLORIPPLE RISIMOUROGRESSROKEN LRRECTUSRTHIAN RY FACES-S" +"AJDASA VAH SAMPHAOSANDHI SANGAN SAYANNASCOOTERSEXTILESHAKINGSHIFT TSHORT ASID" +"DHAMSIGN UDSOLDIERSOV ROGSPRINGSST TUBESTERINGSUKUUDOSYNAGMAT ASHESTA MARKTAI" +"SYOUTALL AATASHEELTAYANNATCHFORKTHALIYATHESEOSTHIEUTHTHKUQI TIKRAMATIVATE TOR" +"NADOTRAINERTROLLEYTRYASKATSECHKATTHACANTTILIK TYSCAPEUBUFILIUKKAKHAUKOTHEAUM " +"IYEKUN MEUTUP HANDUP MARKUP SIGNUP STEPUP TACKURATIONURFACE URGLASSUSSYERUUT " +"TIMEUYGHUR VANESE VAPOURSVAV YODVAYANNAVE DOT VEMENT-VEW NOWVILIK BVILLAINVOI" +"CINGVOWEL KVYSOKO WAZ EOHWDRIVERWIFRUITWIGNYANWO FOR WO MARKWO WAENWORSHIPXAM" +" LAIXOPHONEY GREENY HEARTYA LAMPYAH LI YANMAR YAYANNAYELLOW YMAIC LYNAMIC ZQA" +"PHA AGUNG DIPLI EPOCH EQUID FACE- GATE KAPAL LELET LONGA MELIK MURDA QATAN " +"SPLIT TACK TIKHY-HIDET-HIEUH-IEUNG-LINE--PIEUP0 NGGI0 NGGO0 NYON0 NYUN00-102" +"1 GBOO1 GOLD1 HORN1 NDEE1 WINE2 KPOO2 NGGU3 GBEE3 HEEI3 NGGA4 DART4 DEER4 KPE" +"E4 MUAN4 NGEN4 NJOO4 NYIN5 MERI5 WOOL6 GUEI6 HUAN6 NGGE6 TREE7 GUAN7 KAPO7 MB" +"EE7 MBUU7 NDOO7 NGON8 HOOU8 MBEE8 NYAN8 NYEN9 MUEN9 NJEEA HAAMA-KARAAASHAEACI" +"NTHAEMMAEAESURAAFFIX AGOGUEAGRANTAILUREAJANI AK-668AKABATANCHORANGKATANIMALAN" +"UARYAPISMAAPLI MAPYRUSARADDOARBUTAARSEOSASHGABASSINGATTERYATTIC AUTUMNBAFILIB" +"ANWA BEFILIBETAN BGBIEEBISCUSBISHOPBLINK BOFILIBOWTIEBUFFERBURGERC CLEFCALATE" +"CASTLECATAWACEVITUCHADINCHAMKOCHEIKHCHEMA CHESS CHIKI CHIRETCHO CHCHURCHCKNES" +"SCLOSETCODILECRAYONCREASECUMBERCUPPEDD DISKDAGGERDE DOGDERMA DGEHOGDICINEDIES" +"ISDOKMAIDSLIDEDUCEUSDVANCEE WAVEEAHMUKED CAPED ICEEENTH-EIGHTYELLITEEMASTIEMP" +"US EN GHEENIKI ENTIMAEPACT ERMATAERTUREESTAN ET KUTEU MBUEUAENAEUNYAMEUREUTEV" +"ENTHEXHALEEXISTSEYANNAF CLEFF MAREFAMILYFATHA FF OF FIZAHUFORMEEFORTISFRAMESG" +"ANGIAGBASAQGEADALGEDOLAGGLINGGHAMALGHETTIGHEUAEGLAZ HGNANT GO NGUGOBLINGORGON" +"GRASP GS-PA GURAMUHALF HHAM AIHAMEDHHAMILOHASHKAHE MGOHECAKAHEISEIHENOPEHERME" +"SHEUAEPHIBIT HINGE HIVETEHO HOIHORT IHUMBS HUR PAI HOOKI MAIMIASMA IB YAMIDE " +"ESIEVAN IGGLESILBOATILLAGEINAGMAINCUNXINDHI INGAATINHALEINPUTSINSHIPINWARDIRI" +"NGUISSANTISSHARISSIMOITABLEITHER ITRITEITULUMIX OF IXTY PIYANNAKAYAH KE PHOKE" +"YCAPKILLERKLITONKRISISKTIKO KUSHU2KY WAYLAFRONLAMADHLAMEDHLANDERLASTONLD MAPL" +"EVEL-LIGIONLIGON LISHA LITIKILLIPOPLOACHALONG EM BOARM BULLMADDAHMADR MMALL F" +"MANYA ME DIEMECHIKMPLINGMUKHI N DASHN YANGN-NISFNACLESNCH FRNDA TANEUME NGBAT" +" NGGONGNIRUGUNISTERNIZKO NKNOWNNOKHUKNOR BUNOWMANNOZHEKNSANAQNSUZ ANTEVMANTII" +"MUNTOGENOBELOSOCENCEOCIETYODHADHOFOUNDOGONEKOITIC ON KEYONOCLEOOMUUTOPEN DOPE" +"N POPITSAOPULUSOSETTEOW TIEPALUTAPBOARDPEAKS PECIALPENCILPEPPERPICKETPIDER PI" +"RIT POKOJIPOMENEPOMMEEPTACLEPUFFEDPWATCHQAMATSQETANARAAKANRACINGRAKLITRAVEL-R" +"BITSAREMEDYRENGTHRICORNRIISAPRISEMERKAANUROCKETRSENICRSHANARSIAN RUBEUSS SHOE" +"S TENTSAADIYSHAYIMSHMAAMSICKLESIXTHSSKAPI SOUNAPSPADESSPATHISPITALSSLESSSTANC" +"ESTANCYSTLERSSTOLI STROFOSUCKEDSURANGSURED SWORDSSYNAFISYOUWAT NJAQTAIKHUTAMI" +"NGTARGETTAU ROTAUROSTE TSETE USETERON TEUWENTHAKKUTIKENOTIMATETIRYAKTOPBARTRA" +"PLITRIKE TURBANTUXEDOU MBITUAEQTUUANGXIUBLE XUCIBLEUDARKAUDDISAUGGAGEUP BOWUP" +"NAYAURANUSURNAMAUUMISHUYANNAUZEIROVERTKAVILIANVIRIAMWBERRYWEORTHWINDOWWN BOWW" +"N BOXWO OF WORKERWRENCHX FACEXIMIZEXO NEOYAKASHYIN-DOYOMBO YRENE YSTICKZHITSA" +" AMPS CAPO CHWV COAT DEKA FUJI GORA HAA ICON ILUT JERA KAWI LACA MOOD SARI T" +"ABS TELU-ALAF-BEAM-SIOS0 BEE0 DOO0 DWO0 GBO0 GEE0 HAN0 HEE0 JOO0 MAN0 OIL0-VA" +"S1 DWE1 FAN1 PEE1 TEE1 TWO1 WVI1 YOO1-VAS18CFF2 HEN2 HOO2 KPA2 KPI2 MBA2 MBE2" +" MBO2 MBU2 NJA2 NJU2 POO2 PTE2 SEE2-VAS3 BOO3 FOO3 HIN3 HON3 NDI3 RA33 VEE3 W" +"EI3-VAS32 JE4 ABB4 GBI4 KPU4 LEE4 LOO4 MBO4 MON4 NDO4 TOO4 VOO4 WOO4 WUI4-VAS" +"5 KEE5 MBI5 NDU5-VAS6 GBA6 KOO6 RA26 SIA6 SOO6 TA26 WEE6-VAS7 FUA7 GBE7 HUN7 " +"JEE7 MIN7 NEN7 NIN7 TWE7-VAS8 FEE8 GBU8 KPE8 KPO8 MAN8 NAN8 NWA8 RO28-VAS9 DE" +"E9 KUA9 MEN9 MUN9 NDA9 NDE9 NON9 NUN9 PU29 WVA9 WVE9 YEE9-VASA UNAA YUEAADHUA" +"AMAEACHKAADDERADULTAEMAEAEPENAEREEAGMA ALFILALGARALLEYALLI ALOG ALPHAAMBDAAME" +"KHANGELANNONAPPLEAR AEARBAIARERUARTARASAR ASEIAASPERATAF ATIYAAUTHSAVROSAWAY " +"BAARUBACUSBALAGBASA BASSABAWAKBEITHBENDEBHADHBHETHBISAHBLAKOBOOTSBORZYBSTERCA" +"ANGCAKESCAKRACALYACANUSCAUDACAUSECCEPTCCOLICECAKCECEKCEREKCHADACHERYCHIMECHOO" +"ICHOOLCHULACHUTECIEUCCKAGECKTIECLIFFCLONECLUBSCROWNCTRICCUBEDDAIC DATUSDBOATD" +"ELTADENCEDEPTHDESTYDHAM DKAR DLINGDOTS-DSMANDWICHE GEEEAGLEEATH EBALLEESHIEGA" +"LIEGIONEGL HEIDONEISMAEKEETEMAKEEMBICEMLJAENANOENDEPENENGENJETEO-EUEOPLEERINE" +"ERKHAESHE3ESO EET TUETFONEUAEMEURAEEYBUSEYYALF COWF EWEF SOWFAAFUFAIHUFEARNFI" +"TKOFLAGSFLICTFLUTEFORCEFSAAQGADOLGALGAGAMALGAMANGAZE-GEAN GESH2GHNUTGHULUGOGI" +" GORGIGULUSGVANGHAALUHADDAHAINUHALA HALQAHAMSOHANNAHASE-HATHIHAYINHELAPHETHEH" +"IMELHIRIQHISTIHIUTHHOLAMHOLARHOTELHROOMHUMP HUTA I KOII-RESIARDSIAUDAICHONICR" +"ONIHVUSIKARAIKURUILVERIMAHUIMGBAIMMA IMMERINGSAINNA INTHUIPEHAIPINGIRACYISTLE" +"ITHI ITUALJANG JERVIJUDGEJUDULJUEUIK-020KARORKBALLKERETKESH2KHAPHKNOBSKO LAKT" +"OP KURONKUSMAKWAENL NETL-JUZLABATLABORLAGUSLAKKOLAMDALATIKLAYARLEASELENISLOAN" +" LOMKALOOP LOURELURALLWAY M RAMMAAEHMAALAMACUSMADYAMAI KMAIZEMALONMAQAFMBONEM" +"EEMUMEIZIMELONMENOEMEPETMETEGMETRYMI ROMIEUMMINDUMINGOMISRAMMOTHMPAREMPIREMRO" +"CKMSHAEMUCH MUHORMUOY NA PONABLANADA NASHINCORANEGARNEMKANENOENGENTNGMANNGUE " +"NIEUNNINTHNIS FNNAN NOMIANSIEENSUAENSYONNTHA NTXIVNUENGNZEUMO ANGO BOXO KAIO " +"PLAO RUAOBYLAOCADOOJKI OKARAOKEE OLD XOMBIEOMMAEOPLETOQPENORUTOOTERIOTHALOTTH" +"IOUNCEPASEQPATAKPCHA PEAN PEITHPEN OPEN-PPEPETPI ROPITERPLHAUPLUTAPLUTOPMUNKP" +"OLI PONSEPPAGEPSILIPTUNEQAAFUQUIRYR-RUBRACHYRAIDARASHARCHIDRDIONREGIAREIWAREL" +"A RELAAREPHARICEMRIEENRIEULRILLARITSIROGOMRONOSROTCHROWN RRITORUDAARUHUARULAI" +"RUMP-RUSH RYASOSADHESAKINSAKTASALADSATA SAUILSEGOLSENTOSHANGSHAR2SHARASHARUSH" +"IMASHOOKSHTINSICLESILA3SKATESOLVESPINESTARTSTEP-STNUTSTORMSUKUNSURYASUTUHTEGE" +"HTENSETHINGTIGMATINNETIPPITKAANTMAAUTON ATONPITORCHTORSOTOYORTRACKTRAIFTRIOLT" +"SADITSEEBTSERETTOCKTTORUTUEUMTURN TUUMUU U UUBITOUBURUUBUTSUDAATUGUSTUKARAUMM" +"ERUNGBAUNGGAUNITYUNOO UQUETURINEURITYURTLEUTEUXUTIESUTTHIUWAR VAAVUVARCAVATOR" +"VIET VITAEVRIDOVZMETWAAVUWAQFAWASSEWATTOWBOATWFISHWIANGWIDE WINDUWINJAWISADWU" +"318WUAETXING XTRA-XW XWXYOOJYAMOKYECEKYENAPYIZETYSTERYURIIZHAINZIDI ZILDEZSEK" +"AZYGOS C D OHM R S WEB-RAY-UM 0 BI0 HO0 JU0 KO0 NI0 PU0 RA0 SA0 WI0 YE0 ZO028" +"B1 DA1 DO1 DU1 GA1 HA1 IN1 KI1 KU1 PO1 QI1 RA1 SA1 SI1 SU1 VU1 YI13582 BU2 KA" +"2 L22 NO2 PE2 QO2 RO2 SO2 VI2 YA3 A33 EE3 JE3 JO3 KU3 L33 LE3 ME3 MI3 MU3 PA3" +" RI3 TA3 YU4 DO4 FI4 KE4 L44 NE4 TE4 TU4 WA4 WI4 ZE5 A25 AN5 AU5 BB5 DE5 FA5 " +"FE5 GI5 IN5 JU5 LI5 MO5 NU5 OO5 TE5 TO5 VA5 VE5 WA5 WE6 DI6 FU6 HE6 HI6 JE6 J" +"O6 L66 LA6 NA6 PO6 QA6 RU6 SE6 WU7 BE7 DA7 DD7 EI7 JA7 KI7 LU7 RE7 TI7 VO7 ZA" +"8 BO8 DU8 EN8 FO8 GU8 JI8 KO8 PI8 QE8 SU8 WE9 JA9 PA9 PI9 SE9 SI9 SO9 TA9 TO9" +" TUA IEA-HAAACUAFELAHADAILMAJORALAIALDAALTAAMLAAN XANAEAPAQAPONARA3ARGIAROOAR" +"UMATIMATYAAULABALDBASHBAYIBBITBERDBETHBOOKBOREBUNGBUOYCANOCASECAYNCHAUCOONCOR" +"ECRETCWAADAGSDAIRDDAKDDHIDEADDGERDIM2DZHAEAAEEEEEEENUEHEHEIRTEIWSEZZOFAIBFAST" +"FEEMFERZFETHFEUQFFINFIRIFITAFROGFWAAGAAMGAMEGAMLGEDEGGWSGHOMGHWAGIBAGIDAGIEAG" +"IR2GOALGORTGROMGRU GUINHAVEHAYNHEEPHEROHERUHEYNHEYSHEYTHHWAHID HIINHMI HOM HO" +"PHHSDAHSHUHUB2HUENHUVAHWAAIANOIARAIEN IFATIGERIITOIK HIKIRILUYIMARINORINY IOD" +"EIPODIQAAISI JEONJIIMJOT JYAHKAAFKAD3KAKOKALIKAPHKCETKEUPKICKKINIKMA KOBAKOET" +"KOKEKOKOKWAALBUSLFERLFIELIFULIUMLIWNLOLLLOVOLUISLUMNMARUMARYMESOMFAAMIIMMIINM" +"LYAMMU2MPETMUASMUINMVATMWAANAAUNAG NAM2NANANCERNDAPNDUENEMANEO NGA2NHAYNJAMNN" +"NANOWCNPEANRUANSHENSUBNTAANTOCNUNGNUUNNWAAO-YOOBATOBROODLEOFUMOJI OJODONA ONU" +"TOONEOOTHOPODOPUSORAXORIIOUBTOWAYOXIAPARDPAWNPEEIPEEPPEUXPHABPHINPLUGPLUMPOLO" +"PPHOPRILQASRQEF QHAUQOPARAFERCERREIAREW RGU2RIFYRKABROA ROARROOKROUTRPSERROIR" +"SO-RT TRUISRUKURUNARUSISA-ISAATSEENSEEVSELASELFSEYESHTASHYASHYESINKSLURSOKASO" +"NGSUABTUKITURUTZELUGU UHURULU UNAVUON URUSUSA UTAEUTANUTTYVEDEVEUMVEUXVEYZVID" +"AVIYOVOS VUEQWAAKWAETWAHAWAIRWAW WDERWULUXEIAXEYNYAWNYCHEYEUXYUDHYUKUYUPIYWAA" +"ZATAZAYNZELOZETAZIETZIZ2ZZY 0 E0 U0-004A0B91 X1-01-212114D15518D2-020B2532DD3" +" D3 I3-030531C4 E4-05 U5-05505575B66-06206D77 O72C8 A8 I8F09819E3A7AAEFAL2AUJ" +"AWXAZUB57B89BIBBXGCA9CAHCAICIGCWICYAD42D70DA2DE6DIBDJADUBDZEE80EEGEIEEYKEZHF1" +"4F8CFAJFLYFOMFUEHAQHOJHOXI-IIMNIWRJEUK00KAQKUEKUGLFALK LULNIIOAYOIXPOQPUQQ00Q" +"ARQIFQIGQOFQOTQUFSIISUUTJETUJUDYUEZUMXUOPUQAVAUVNOVOKVOYVUUWOQX00XAUXEHXWVY00" +"YOTZJEZOOZORZUPZZE16171D1F343638394048494B4E647890929599C0D0G0G3G9LXR7VDVWZ0"; -static const unsigned char uname2c_tree[218382] = { - 0xa1, 0xad, 0x9f, 0x0c, 0xa2, 0x92, 0x99, 0x0b, 0xa3, 0xf7, 0xc8, 0x09, - 0xa4, 0xc2, 0x96, 0x09, 0xa5, 0xb9, 0xcd, 0x08, 0xa6, 0xef, 0xbf, 0x08, - 0xa7, 0xb8, 0xf9, 0x07, 0xa8, 0x9c, 0xaf, 0x07, 0xa9, 0x9c, 0x9a, 0x07, - 0xaa, 0xa1, 0x94, 0x07, 0xab, 0xd0, 0xdd, 0x06, 0xac, 0xb8, 0xd1, 0x05, - 0xad, 0xdf, 0xa8, 0x04, 0xae, 0x8e, 0x83, 0x04, 0xaf, 0xb2, 0xd4, 0x03, - 0xb0, 0xee, 0xa7, 0x03, 0x02, 0x7c, 0x00, 0xc1, 0xa6, 0x03, 0xb2, 0xde, - 0x83, 0x03, 0xb3, 0xeb, 0xf7, 0x01, 0xb4, 0xde, 0x84, 0x01, 0xb5, 0xb8, - 0x75, 0xb6, 0xb9, 0x56, 0xb7, 0xdf, 0x3f, 0xb8, 0xe5, 0x3e, 0xb9, 0xd3, - 0x10, 0xba, 0x01, 0xff, 0x0a, 0xee, 0x1c, 0xe9, 0x0f, 0x10, 0x6a, 0x5f, - 0x80, 0x0c, 0xa5, 0xd1, 0x0b, 0x50, 0x9a, 0x62, 0x10, 0xf9, 0x01, 0x08, - 0xe2, 0xc5, 0x06, 0x45, 0x6a, 0xe6, 0xdf, 0xf9, 0x41, 0x0a, 0xd6, 0x57, - 0xaa, 0x07, 0x06, 0x44, 0xdb, 0x23, 0x11, 0xe3, 0x5b, 0x01, 0xff, 0x4e, - 0x88, 0x75, 0x44, 0xcf, 0x01, 0x45, 0x93, 0x86, 0x45, 0xcf, 0x01, 0x06, - 0xb4, 0xda, 0x06, 0x43, 0x27, 0x29, 0x46, 0xcf, 0x41, 0xd2, 0x42, 0xcf, - 0x01, 0xd3, 0x43, 0xcf, 0x41, 0x02, 0x1e, 0x14, 0xf2, 0x06, 0xa4, 0xcf, - 0x06, 0x44, 0x96, 0xec, 0x83, 0xcf, 0x01, 0x0a, 0xab, 0xa8, 0xa3, 0x06, - 0xab, 0xf1, 0x05, 0x46, 0x0e, 0xdb, 0xa7, 0xcf, 0x81, 0xca, 0x05, 0x45, - 0xe3, 0xe5, 0xc2, 0xcf, 0x01, 0xaf, 0x8d, 0x05, 0xb0, 0xda, 0x04, 0xb2, - 0xcb, 0x04, 0xb3, 0x4f, 0x09, 0xad, 0xbe, 0x17, 0xba, 0x01, 0xff, 0xa1, - 0x06, 0x46, 0x91, 0xb8, 0x85, 0xcf, 0x41, 0x46, 0x80, 0xdb, 0x55, 0xcf, - 0x01, 0x47, 0xcc, 0x31, 0x5d, 0xcf, 0x41, 0x0c, 0x66, 0x89, 0x18, 0x49, - 0xaf, 0xb9, 0x64, 0xcf, 0x01, 0x48, 0x4a, 0xc7, 0x63, 0xcf, 0x01, 0x48, - 0xa6, 0x53, 0x65, 0xcf, 0x01, 0x4b, 0x8d, 0xa1, 0x66, 0xcf, 0x41, 0x49, - 0xaf, 0xb9, 0x68, 0xcf, 0x01, 0x48, 0x4a, 0xc7, 0x67, 0xcf, 0x01, 0x48, - 0xa6, 0x53, 0x69, 0xcf, 0x01, 0x4b, 0x8d, 0xa1, 0x6a, 0xcf, 0x41, 0x09, - 0x8f, 0xb8, 0xa3, 0x03, 0x48, 0x5a, 0xc5, 0x7d, 0xcf, 0x81, 0x82, 0x03, - 0xb4, 0x01, 0xff, 0x44, 0xee, 0xeb, 0x86, 0xcf, 0x81, 0xac, 0x02, 0x46, - 0xec, 0xdb, 0x56, 0xcf, 0x81, 0x95, 0x02, 0x05, 0x28, 0xe7, 0x01, 0xff, - 0x09, 0xad, 0x80, 0xe8, 0x01, 0x04, 0xd2, 0xec, 0xae, 0x01, 0xab, 0x42, - 0x4e, 0xa6, 0x78, 0x93, 0xcf, 0x01, 0x4e, 0xd6, 0x67, 0x97, 0xcf, 0x01, - 0xb0, 0x20, 0xb4, 0x01, 0xff, 0x4e, 0x02, 0x77, 0x9a, 0xcf, 0x01, 0x05, - 0x82, 0xe7, 0x01, 0xff, 0x48, 0xe2, 0xc3, 0xac, 0xcf, 0x01, 0x49, 0x0c, - 0x9d, 0xad, 0xcf, 0x01, 0x49, 0x06, 0xbd, 0xae, 0xcf, 0x41, 0xaf, 0x06, - 0x47, 0x4b, 0xc7, 0x92, 0xcf, 0x41, 0x4b, 0x0a, 0x9d, 0x95, 0xcf, 0x01, - 0x47, 0x0e, 0x9d, 0x96, 0xcf, 0x41, 0x06, 0x67, 0x89, 0x5a, 0x02, 0x34, - 0x0a, 0x01, 0xff, 0x47, 0x9e, 0x53, 0xb5, 0xcf, 0x81, 0x06, 0x47, 0x20, - 0xaa, 0x94, 0xcf, 0x41, 0x80, 0x01, 0xff, 0x04, 0xd2, 0xec, 0x0c, 0x49, - 0x0c, 0x9d, 0xb6, 0xcf, 0x01, 0x47, 0xbb, 0xd3, 0xbe, 0xcf, 0x41, 0x44, - 0xe0, 0x67, 0xb9, 0xcf, 0x81, 0x28, 0xaf, 0x01, 0xff, 0x4a, 0x1d, 0xaa, - 0xbc, 0xcf, 0x81, 0x18, 0x49, 0x0c, 0x9d, 0xba, 0xcf, 0xc1, 0x00, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x50, 0xca, 0x60, 0xbb, 0xcf, 0x01, 0x50, 0xc3, - 0x31, 0xb8, 0xcf, 0x41, 0x4a, 0xc9, 0xa3, 0xbd, 0xcf, 0x41, 0x56, 0xbd, - 0x31, 0xb7, 0xcf, 0x41, 0x4e, 0xd6, 0x67, 0x99, 0xcf, 0x01, 0x49, 0x0c, - 0x9d, 0x98, 0xcf, 0x41, 0x44, 0xe0, 0x67, 0xa2, 0xcf, 0x81, 0x28, 0xaf, - 0x01, 0xff, 0x4a, 0x1d, 0xaa, 0xa5, 0xcf, 0x81, 0x18, 0x49, 0x0c, 0x9d, - 0xa3, 0xcf, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x50, 0xca, 0x60, - 0xa4, 0xcf, 0x01, 0x50, 0xc3, 0x31, 0xa1, 0xcf, 0x41, 0x4a, 0xc9, 0xa3, - 0xa6, 0xcf, 0x41, 0x56, 0xbd, 0x31, 0xa0, 0xcf, 0x41, 0x43, 0xd0, 0x31, - 0x9b, 0xcf, 0x81, 0x16, 0xaf, 0x01, 0xff, 0x4a, 0x1d, 0xaa, 0x9c, 0xcf, - 0x01, 0x49, 0x0c, 0x9d, 0x9d, 0xcf, 0xc1, 0x00, 0x4c, 0x65, 0x89, 0x9f, - 0xcf, 0x41, 0x4c, 0x65, 0x89, 0x9e, 0xcf, 0x41, 0x80, 0x01, 0xff, 0x48, - 0xe2, 0xc7, 0x57, 0xcf, 0x01, 0x54, 0xab, 0x45, 0x5a, 0xcf, 0x41, 0x80, - 0x01, 0xff, 0x4e, 0xd6, 0x67, 0x91, 0xcf, 0x01, 0x02, 0x31, 0x01, 0x0d, - 0x49, 0x3d, 0xbf, 0x8b, 0xcf, 0xc1, 0x00, 0x4b, 0xc7, 0x95, 0x8c, 0xcf, - 0x41, 0x50, 0xea, 0x60, 0x8e, 0xcf, 0x01, 0x47, 0x93, 0x86, 0x88, 0xcf, - 0x81, 0x1e, 0x45, 0x50, 0xe7, 0x8d, 0xcf, 0x01, 0x48, 0x72, 0x95, 0x87, - 0xcf, 0xc1, 0x00, 0x03, 0x6e, 0x08, 0x01, 0xff, 0x47, 0x93, 0x86, 0x89, - 0xcf, 0x01, 0x4b, 0x30, 0x9f, 0x8f, 0xcf, 0x41, 0x4b, 0x6f, 0x95, 0x8a, - 0xcf, 0x41, 0x80, 0x01, 0xff, 0x02, 0x31, 0x01, 0x06, 0x48, 0x42, 0xca, - 0x7f, 0xcf, 0x41, 0x47, 0x93, 0x86, 0x80, 0xcf, 0x01, 0x48, 0x72, 0x95, - 0x7e, 0xcf, 0x41, 0x0d, 0xad, 0x80, 0x36, 0x07, 0x66, 0x89, 0x1b, 0x49, - 0xaf, 0xb9, 0x71, 0xcf, 0x01, 0x48, 0xa6, 0x53, 0x72, 0xcf, 0x01, 0xb4, - 0x01, 0xff, 0x46, 0x02, 0x77, 0x74, 0xcf, 0x01, 0x4a, 0x8e, 0xa1, 0x73, - 0xcf, 0x41, 0x4e, 0xd6, 0x67, 0x77, 0xcf, 0x01, 0x05, 0xa1, 0x53, 0x01, - 0xff, 0x48, 0xa6, 0x53, 0x76, 0xcf, 0x01, 0x47, 0xad, 0x78, 0x78, 0xcf, - 0x41, 0x4b, 0x66, 0x89, 0x7c, 0xcf, 0x01, 0x4e, 0xd6, 0x67, 0x7b, 0xcf, - 0x01, 0x48, 0x4a, 0xc7, 0x79, 0xcf, 0x01, 0x48, 0xa6, 0x53, 0x7a, 0xcf, - 0x41, 0x52, 0x4e, 0x50, 0x6c, 0xcf, 0x01, 0x42, 0x55, 0x18, 0x82, 0xcf, - 0x41, 0xa1, 0x1c, 0x48, 0x3a, 0xc3, 0x58, 0xcf, 0x81, 0x0f, 0xaf, 0x01, - 0xff, 0x48, 0x32, 0x9f, 0x70, 0xcf, 0x01, 0x48, 0x2a, 0xc5, 0x90, 0xcf, - 0x41, 0x4f, 0xd5, 0x67, 0x59, 0xcf, 0x41, 0x43, 0x29, 0x83, 0x5c, 0xcf, - 0x01, 0x46, 0x6a, 0xdc, 0x52, 0xcf, 0x01, 0x42, 0x65, 0x08, 0xc3, 0xcf, - 0x41, 0x45, 0xba, 0xe1, 0xc0, 0xcf, 0x01, 0x44, 0x62, 0xef, 0xaf, 0xcf, - 0xc1, 0x00, 0x80, 0x01, 0xff, 0xab, 0x0c, 0x48, 0xa6, 0x53, 0xb0, 0xcf, - 0x01, 0x4b, 0x8d, 0xa1, 0xb1, 0xcf, 0x41, 0x0b, 0x67, 0x89, 0x06, 0x52, - 0x9c, 0x53, 0xb2, 0xcf, 0x41, 0x4e, 0xd6, 0x67, 0xb4, 0xcf, 0x01, 0x48, - 0xa6, 0x53, 0xb3, 0xcf, 0x41, 0x80, 0x01, 0xff, 0x07, 0x66, 0x89, 0x06, - 0x47, 0xfb, 0xd1, 0xa8, 0xcf, 0x41, 0x4c, 0xcd, 0x90, 0xab, 0xcf, 0x01, - 0x47, 0xfb, 0xd1, 0xaa, 0xcf, 0x01, 0x43, 0x71, 0xf1, 0xa9, 0xcf, 0x41, - 0x46, 0x5e, 0xd9, 0x6e, 0xcf, 0x01, 0x45, 0x95, 0x63, 0x54, 0xcf, 0x01, - 0x45, 0x4c, 0xe6, 0x84, 0xcf, 0x01, 0x02, 0x34, 0x0a, 0x06, 0x46, 0x9c, - 0xba, 0xbf, 0xcf, 0x41, 0x42, 0x65, 0x08, 0x50, 0xcf, 0x81, 0x06, 0x42, - 0xb3, 0x27, 0x81, 0xcf, 0x41, 0x46, 0x6e, 0xd5, 0x51, 0xcf, 0x41, 0x45, - 0xc4, 0xe1, 0x5e, 0xcf, 0x01, 0x47, 0x88, 0xd0, 0x60, 0xcf, 0x01, 0x46, - 0xb4, 0xc7, 0x61, 0xcf, 0x01, 0xb4, 0x01, 0xff, 0x44, 0x70, 0xd5, 0x5f, - 0xcf, 0x01, 0x48, 0xb2, 0xc7, 0x62, 0xcf, 0x41, 0xa5, 0x12, 0x4f, 0xcb, - 0x60, 0x6b, 0xcf, 0x01, 0x43, 0x6a, 0x7b, 0xc1, 0xcf, 0x01, 0x4b, 0x69, - 0xa2, 0x53, 0xcf, 0x41, 0x50, 0x8a, 0x63, 0x75, 0xcf, 0x01, 0x46, 0x76, - 0xdc, 0x6d, 0xcf, 0x41, 0x45, 0x65, 0xd9, 0x6f, 0xcf, 0x01, 0x48, 0x58, - 0x50, 0x5b, 0xcf, 0x41, 0x57, 0xd1, 0x2c, 0x3e, 0xcf, 0x01, 0x5b, 0x0c, - 0x1c, 0x41, 0xcf, 0x01, 0x05, 0xb9, 0x00, 0x17, 0x11, 0x15, 0x5d, 0x01, - 0xff, 0x47, 0xa6, 0x78, 0x30, 0xcf, 0x01, 0x46, 0x87, 0xbd, 0x31, 0xcf, - 0x01, 0x49, 0x84, 0xbd, 0x32, 0xcf, 0x41, 0x47, 0xd0, 0xcc, 0x24, 0xcf, - 0x01, 0xa3, 0xcf, 0x03, 0xa4, 0xc0, 0x03, 0x08, 0xea, 0xc3, 0x90, 0x03, - 0xab, 0xf4, 0x02, 0x45, 0x20, 0xe5, 0x27, 0xcf, 0x01, 0x0d, 0xe0, 0x83, - 0xb6, 0x02, 0x06, 0x62, 0xdb, 0x90, 0x02, 0xaf, 0xfd, 0x01, 0x02, 0x9c, +static const unsigned char uname2c_tree[221210] = { + 0xa1, 0xb9, 0xb2, 0x0c, 0xa2, 0xa3, 0xa9, 0x0b, 0xa3, 0x81, 0xd7, 0x09, + 0xa4, 0xc6, 0xa4, 0x09, 0xa5, 0xa7, 0xdb, 0x08, 0xa6, 0xb4, 0xcd, 0x08, + 0xa7, 0x87, 0x86, 0x08, 0xa8, 0xd7, 0xbb, 0x07, 0xa9, 0xc9, 0xa6, 0x07, + 0xaa, 0xce, 0xa0, 0x07, 0xab, 0xf4, 0xe9, 0x06, 0xac, 0xfe, 0xdc, 0x05, + 0xad, 0x8d, 0xb4, 0x04, 0xae, 0xb4, 0x8e, 0x04, 0xaf, 0xc9, 0xdf, 0x03, + 0xb0, 0xf0, 0xb2, 0x03, 0x02, 0x7c, 0x00, 0xc3, 0xb1, 0x03, 0xb2, 0xe0, + 0x8e, 0x03, 0xb3, 0xa0, 0x81, 0x02, 0xb4, 0x98, 0x85, 0x01, 0xb5, 0xf2, + 0x75, 0xb6, 0xe1, 0x56, 0xb7, 0xfb, 0x3f, 0xb8, 0x81, 0x3f, 0xb9, 0xd3, + 0x10, 0xba, 0x01, 0xff, 0x0a, 0x90, 0x1d, 0xe9, 0x0f, 0x10, 0xe6, 0x60, + 0x80, 0x0c, 0xa5, 0xd1, 0x0b, 0x50, 0x16, 0x64, 0x10, 0xf9, 0x01, 0x08, + 0x80, 0xc8, 0x06, 0x45, 0x8e, 0xe9, 0xdf, 0xf9, 0x41, 0x0a, 0x41, 0x59, + 0xaa, 0x07, 0x06, 0x3c, 0xde, 0x23, 0x11, 0x4e, 0x5d, 0x01, 0xff, 0x4e, + 0xf7, 0x76, 0x44, 0xcf, 0x01, 0x45, 0x50, 0x88, 0x45, 0xcf, 0x01, 0x06, + 0xac, 0xdd, 0x06, 0x43, 0xeb, 0x2e, 0x46, 0xcf, 0x41, 0xd2, 0x42, 0xcf, + 0x01, 0xd3, 0x43, 0xcf, 0x41, 0x02, 0x6d, 0x14, 0xf2, 0x06, 0xa4, 0xcf, + 0x06, 0x44, 0xd1, 0xef, 0x83, 0xcf, 0x01, 0x0a, 0xe7, 0xaa, 0xa3, 0x06, + 0xab, 0xf1, 0x05, 0x46, 0x06, 0xde, 0xa7, 0xcf, 0x81, 0xca, 0x05, 0x45, + 0x02, 0xe9, 0xc2, 0xcf, 0x01, 0xaf, 0x8d, 0x05, 0xb0, 0xda, 0x04, 0xb2, + 0xcb, 0x04, 0xb3, 0x4f, 0x09, 0x34, 0xc1, 0x17, 0xba, 0x01, 0xff, 0xa1, + 0x06, 0x46, 0xfd, 0xba, 0x85, 0xcf, 0x41, 0x46, 0x78, 0xde, 0x55, 0xcf, + 0x01, 0x47, 0x9c, 0x32, 0x5d, 0xcf, 0x41, 0x0c, 0x30, 0x8b, 0x18, 0x49, + 0x12, 0xbc, 0x64, 0xcf, 0x01, 0x48, 0xf0, 0xc9, 0x63, 0xcf, 0x01, 0x48, + 0xef, 0x54, 0x65, 0xcf, 0x01, 0x4b, 0xc9, 0xa3, 0x66, 0xcf, 0x41, 0x49, + 0x12, 0xbc, 0x68, 0xcf, 0x01, 0x48, 0xf0, 0xc9, 0x67, 0xcf, 0x01, 0x48, + 0xef, 0x54, 0x69, 0xcf, 0x01, 0x4b, 0xc9, 0xa3, 0x6a, 0xcf, 0x41, 0x09, + 0xfb, 0xba, 0xa3, 0x03, 0x48, 0x00, 0xc8, 0x7d, 0xcf, 0x81, 0x82, 0x03, + 0xb4, 0x01, 0xff, 0x44, 0x25, 0xef, 0x86, 0xcf, 0x81, 0xac, 0x02, 0x46, + 0xe4, 0xde, 0x56, 0xcf, 0x81, 0x95, 0x02, 0x05, 0x4c, 0xea, 0x01, 0xff, + 0x09, 0x43, 0x82, 0xe8, 0x01, 0x04, 0x11, 0xf0, 0xae, 0x01, 0xab, 0x42, + 0x4e, 0x07, 0x7a, 0x93, 0xcf, 0x01, 0x4e, 0x52, 0x69, 0x97, 0xcf, 0x01, + 0xb0, 0x20, 0xb4, 0x01, 0xff, 0x4e, 0x71, 0x78, 0x9a, 0xcf, 0x01, 0x05, + 0xa6, 0xea, 0x01, 0xff, 0x48, 0x70, 0xc6, 0xac, 0xcf, 0x01, 0x49, 0x32, + 0x9f, 0xad, 0xcf, 0x01, 0x49, 0x7b, 0xbf, 0xae, 0xcf, 0x41, 0xaf, 0x06, + 0x47, 0xf1, 0xc9, 0x92, 0xcf, 0x41, 0x4b, 0x30, 0x9f, 0x95, 0xcf, 0x01, + 0x47, 0x34, 0x9f, 0x96, 0xcf, 0x41, 0x06, 0x31, 0x8b, 0x5a, 0x02, 0x83, + 0x0a, 0x01, 0xff, 0x47, 0xe7, 0x54, 0xb5, 0xcf, 0x81, 0x06, 0x47, 0x70, + 0xac, 0x94, 0xcf, 0x41, 0x80, 0x01, 0xff, 0x04, 0x11, 0xf0, 0x0c, 0x49, + 0x32, 0x9f, 0xb6, 0xcf, 0x01, 0x47, 0x87, 0xd6, 0xbe, 0xcf, 0x41, 0x44, + 0x5c, 0x69, 0xb9, 0xcf, 0x81, 0x28, 0xaf, 0x01, 0xff, 0x4a, 0x6d, 0xac, + 0xbc, 0xcf, 0x81, 0x18, 0x49, 0x32, 0x9f, 0xba, 0xcf, 0xc1, 0x00, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x50, 0x46, 0x62, 0xbb, 0xcf, 0x01, 0x50, 0x93, + 0x32, 0xb8, 0xcf, 0x41, 0x4a, 0x05, 0xa6, 0xbd, 0xcf, 0x41, 0x56, 0x8d, + 0x32, 0xb7, 0xcf, 0x41, 0x4e, 0x52, 0x69, 0x99, 0xcf, 0x01, 0x49, 0x32, + 0x9f, 0x98, 0xcf, 0x41, 0x44, 0x5c, 0x69, 0xa2, 0xcf, 0x81, 0x28, 0xaf, + 0x01, 0xff, 0x4a, 0x6d, 0xac, 0xa5, 0xcf, 0x81, 0x18, 0x49, 0x32, 0x9f, + 0xa3, 0xcf, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x50, 0x46, 0x62, + 0xa4, 0xcf, 0x01, 0x50, 0x93, 0x32, 0xa1, 0xcf, 0x41, 0x4a, 0x05, 0xa6, + 0xa6, 0xcf, 0x41, 0x56, 0x8d, 0x32, 0xa0, 0xcf, 0x41, 0x43, 0xa0, 0x32, + 0x9b, 0xcf, 0x81, 0x16, 0xaf, 0x01, 0xff, 0x4a, 0x6d, 0xac, 0x9c, 0xcf, + 0x01, 0x49, 0x32, 0x9f, 0x9d, 0xcf, 0xc1, 0x00, 0x4c, 0x2f, 0x8b, 0x9f, + 0xcf, 0x41, 0x4c, 0x2f, 0x8b, 0x9e, 0xcf, 0x41, 0x80, 0x01, 0xff, 0x48, + 0x90, 0xca, 0x57, 0xcf, 0x01, 0x54, 0xf4, 0x46, 0x5a, 0xcf, 0x41, 0x80, + 0x01, 0xff, 0x4e, 0x52, 0x69, 0x91, 0xcf, 0x01, 0x02, 0x31, 0x01, 0x0d, + 0x49, 0xbb, 0xc1, 0x8b, 0xcf, 0xc1, 0x00, 0x4b, 0xc1, 0x97, 0x8c, 0xcf, + 0x41, 0x50, 0x66, 0x62, 0x8e, 0xcf, 0x01, 0x47, 0x50, 0x88, 0x88, 0xcf, + 0x81, 0x1e, 0x45, 0x74, 0xea, 0x8d, 0xcf, 0x01, 0x48, 0x6c, 0x97, 0x87, + 0xcf, 0xc1, 0x00, 0x03, 0x99, 0x08, 0x01, 0xff, 0x47, 0x50, 0x88, 0x89, + 0xcf, 0x01, 0x4b, 0x61, 0xa1, 0x8f, 0xcf, 0x41, 0x4b, 0x69, 0x97, 0x8a, + 0xcf, 0x41, 0x80, 0x01, 0xff, 0x02, 0x31, 0x01, 0x06, 0x48, 0x00, 0xcd, + 0x7f, 0xcf, 0x41, 0x47, 0x50, 0x88, 0x80, 0xcf, 0x01, 0x48, 0x6c, 0x97, + 0x7e, 0xcf, 0x41, 0x0d, 0x43, 0x82, 0x36, 0x07, 0x30, 0x8b, 0x1b, 0x49, + 0x12, 0xbc, 0x71, 0xcf, 0x01, 0x48, 0xef, 0x54, 0x72, 0xcf, 0x01, 0xb4, + 0x01, 0xff, 0x46, 0x71, 0x78, 0x74, 0xcf, 0x01, 0x4a, 0xca, 0xa3, 0x73, + 0xcf, 0x41, 0x4e, 0x52, 0x69, 0x77, 0xcf, 0x01, 0x05, 0xea, 0x54, 0x01, + 0xff, 0x48, 0xef, 0x54, 0x76, 0xcf, 0x01, 0x47, 0x0e, 0x7a, 0x78, 0xcf, + 0x41, 0x4b, 0x30, 0x8b, 0x7c, 0xcf, 0x01, 0x4e, 0x52, 0x69, 0x7b, 0xcf, + 0x01, 0x48, 0xf0, 0xc9, 0x79, 0xcf, 0x01, 0x48, 0xef, 0x54, 0x7a, 0xcf, + 0x41, 0x52, 0x97, 0x51, 0x6c, 0xcf, 0x01, 0x42, 0xc1, 0x18, 0x82, 0xcf, + 0x41, 0xa1, 0x1c, 0x48, 0xc8, 0xc5, 0x58, 0xcf, 0x81, 0x0f, 0xaf, 0x01, + 0xff, 0x48, 0x63, 0xa1, 0x70, 0xcf, 0x01, 0x48, 0xd0, 0xc7, 0x90, 0xcf, + 0x41, 0x4f, 0x51, 0x69, 0x59, 0xcf, 0x41, 0x43, 0xd9, 0x84, 0x5c, 0xcf, + 0x01, 0x46, 0x6e, 0xdf, 0x52, 0xcf, 0x01, 0x42, 0x90, 0x08, 0xc3, 0xcf, + 0x41, 0x45, 0xcf, 0xe4, 0xc0, 0xcf, 0x01, 0x44, 0xb5, 0xf2, 0xaf, 0xcf, + 0xc1, 0x00, 0x80, 0x01, 0xff, 0xab, 0x0c, 0x48, 0xef, 0x54, 0xb0, 0xcf, + 0x01, 0x4b, 0xc9, 0xa3, 0xb1, 0xcf, 0x41, 0x0b, 0x31, 0x8b, 0x06, 0x52, + 0xe5, 0x54, 0xb2, 0xcf, 0x41, 0x4e, 0x52, 0x69, 0xb4, 0xcf, 0x01, 0x48, + 0xef, 0x54, 0xb3, 0xcf, 0x41, 0x80, 0x01, 0xff, 0x07, 0x30, 0x8b, 0x06, + 0x47, 0xce, 0xd4, 0xa8, 0xcf, 0x41, 0x4c, 0x7f, 0x92, 0xab, 0xcf, 0x01, + 0x47, 0xce, 0xd4, 0xaa, 0xcf, 0x01, 0x43, 0xbe, 0xf4, 0xa9, 0xcf, 0x41, + 0x46, 0x50, 0xdc, 0x6e, 0xcf, 0x01, 0x45, 0x11, 0x65, 0x54, 0xcf, 0x01, + 0x45, 0x70, 0xe9, 0x84, 0xcf, 0x01, 0x02, 0x83, 0x0a, 0x06, 0x46, 0xff, + 0xbc, 0xbf, 0xcf, 0x41, 0x42, 0x90, 0x08, 0x50, 0xcf, 0x81, 0x06, 0x42, + 0x54, 0x28, 0x81, 0xcf, 0x41, 0x46, 0x4e, 0xd8, 0x51, 0xcf, 0x41, 0x45, + 0xd9, 0xe4, 0x5e, 0xcf, 0x01, 0x47, 0x5b, 0xd3, 0x60, 0xcf, 0x01, 0x46, + 0x62, 0xca, 0x61, 0xcf, 0x01, 0xb4, 0x01, 0xff, 0x44, 0x50, 0xd8, 0x5f, + 0xcf, 0x01, 0x48, 0x60, 0xca, 0x62, 0xcf, 0x41, 0xa5, 0x12, 0x4f, 0x47, + 0x62, 0x6b, 0xcf, 0x01, 0x43, 0xcb, 0x7c, 0xc1, 0xcf, 0x01, 0x4b, 0xa5, + 0xa4, 0x53, 0xcf, 0x41, 0x50, 0x06, 0x65, 0x75, 0xcf, 0x01, 0x46, 0x7a, + 0xdf, 0x6d, 0xcf, 0x41, 0x45, 0x57, 0xdc, 0x6f, 0xcf, 0x01, 0x48, 0xa1, + 0x51, 0x5b, 0xcf, 0x41, 0x57, 0x89, 0x2d, 0x3e, 0xcf, 0x01, 0x5b, 0x93, + 0x1c, 0x41, 0xcf, 0x01, 0x05, 0xb9, 0x00, 0x17, 0x11, 0x80, 0x5e, 0x01, + 0xff, 0x47, 0x07, 0x7a, 0x30, 0xcf, 0x01, 0x46, 0x05, 0xc0, 0x31, 0xcf, + 0x01, 0x49, 0x02, 0xc0, 0x32, 0xcf, 0x41, 0x47, 0xa3, 0xcf, 0x24, 0xcf, + 0x01, 0xa3, 0xcf, 0x03, 0xa4, 0xc0, 0x03, 0x08, 0x78, 0xc6, 0x90, 0x03, + 0xab, 0xf4, 0x02, 0x45, 0x35, 0xe8, 0x27, 0xcf, 0x01, 0x0d, 0x90, 0x85, + 0xb6, 0x02, 0x06, 0x5a, 0xde, 0x90, 0x02, 0xaf, 0xfd, 0x01, 0x02, 0x9c, 0x01, 0xab, 0x01, 0x02, 0x71, 0x00, 0x9a, 0x01, 0xb3, 0x76, 0xb4, 0x4d, - 0x46, 0xd8, 0xdd, 0x25, 0xcf, 0x01, 0x07, 0x94, 0xd4, 0x18, 0xba, 0x01, - 0xff, 0x48, 0x07, 0x41, 0x33, 0xcf, 0x01, 0xa5, 0x01, 0xff, 0x42, 0x13, - 0x01, 0x20, 0xcf, 0x01, 0x43, 0x6e, 0xf1, 0x2a, 0xcf, 0x41, 0x03, 0xb6, - 0x00, 0x1b, 0x03, 0x20, 0x03, 0x01, 0xff, 0x0b, 0xe4, 0x9a, 0x06, 0x46, - 0x94, 0x86, 0x1d, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x0b, 0xcf, 0x01, 0x45, + 0x46, 0xe2, 0xe0, 0x25, 0xcf, 0x01, 0x07, 0x67, 0xd7, 0x18, 0xba, 0x01, + 0xff, 0x48, 0x14, 0x42, 0x33, 0xcf, 0x01, 0xa5, 0x01, 0xff, 0x42, 0x13, + 0x01, 0x20, 0xcf, 0x01, 0x43, 0xbb, 0xf4, 0x2a, 0xcf, 0x41, 0x03, 0xb6, + 0x00, 0x1b, 0x03, 0x4b, 0x03, 0x01, 0xff, 0x0b, 0x0a, 0x9d, 0x06, 0x46, + 0x51, 0x88, 0x1d, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x0b, 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x17, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x08, 0xcf, 0x01, 0x45, - 0xc8, 0x00, 0x14, 0xcf, 0x41, 0x46, 0x02, 0x77, 0x23, 0xcf, 0x01, 0x45, - 0x25, 0xc7, 0x3c, 0xcf, 0x01, 0x05, 0x9b, 0xe7, 0x01, 0xff, 0x03, 0xb6, - 0x00, 0x06, 0x49, 0x91, 0x86, 0x18, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x02, - 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x0e, 0xcf, 0x41, 0x44, 0xa6, 0xed, 0x2b, - 0xcf, 0x01, 0x4e, 0xb1, 0x45, 0x3b, 0xcf, 0x01, 0x09, 0x2e, 0xbc, 0x06, - 0x53, 0x70, 0x4c, 0x1a, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x05, 0xcf, 0x01, - 0x45, 0xc8, 0x00, 0x11, 0xcf, 0x41, 0x43, 0x6b, 0xf1, 0x22, 0xcf, 0x01, - 0x45, 0x80, 0xe9, 0x2c, 0xcf, 0x41, 0xa4, 0x38, 0x06, 0xe7, 0x83, 0x01, + 0xc8, 0x00, 0x14, 0xcf, 0x41, 0x46, 0x71, 0x78, 0x23, 0xcf, 0x01, 0x45, + 0xcb, 0xc9, 0x3c, 0xcf, 0x01, 0x05, 0xbf, 0xea, 0x01, 0xff, 0x03, 0xb6, + 0x00, 0x06, 0x49, 0x4e, 0x88, 0x18, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x02, + 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x0e, 0xcf, 0x41, 0x44, 0xe5, 0xf0, 0x2b, + 0xcf, 0x01, 0x4e, 0xfa, 0x46, 0x3b, 0xcf, 0x01, 0x09, 0x9a, 0xbe, 0x06, + 0x53, 0xb9, 0x4d, 0x1a, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x05, 0xcf, 0x01, + 0x45, 0xc8, 0x00, 0x11, 0xcf, 0x41, 0x43, 0xb8, 0xf4, 0x22, 0xcf, 0x01, + 0x45, 0xb3, 0xec, 0x2c, 0xcf, 0x41, 0xa4, 0x38, 0x06, 0x97, 0x85, 0x01, 0xff, 0x03, 0xb6, 0x00, 0x23, 0xb3, 0x01, 0xff, 0x02, 0x44, 0x00, 0x06, - 0x46, 0x70, 0x4c, 0x1c, 0xcf, 0x41, 0x0b, 0xe4, 0x9a, 0x06, 0x46, 0x94, - 0x86, 0x1b, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x0a, 0xcf, 0x01, 0x45, 0xc8, + 0x46, 0xb9, 0x4d, 0x1c, 0xcf, 0x41, 0x0b, 0x0a, 0x9d, 0x06, 0x46, 0x51, + 0x88, 0x1b, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x0a, 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x16, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x07, 0xcf, 0x01, 0x45, 0xc8, - 0x00, 0x13, 0xcf, 0x41, 0x47, 0x33, 0x9f, 0x36, 0xcf, 0x81, 0x06, 0x46, - 0x0e, 0xde, 0x26, 0xcf, 0x41, 0x55, 0xd5, 0x37, 0x37, 0xcf, 0x41, 0x47, - 0xbb, 0xcc, 0x3a, 0xcf, 0x01, 0xee, 0x21, 0xcf, 0x01, 0x47, 0xc2, 0xd3, - 0x35, 0xcf, 0x41, 0x03, 0xb6, 0x00, 0x11, 0x0d, 0x91, 0x86, 0x01, 0xff, + 0x00, 0x13, 0xcf, 0x41, 0x47, 0x64, 0xa1, 0x36, 0xcf, 0x81, 0x06, 0x46, + 0x1e, 0xe1, 0x26, 0xcf, 0x41, 0x55, 0xa5, 0x38, 0x37, 0xcf, 0x41, 0x47, + 0x87, 0xcf, 0x3a, 0xcf, 0x01, 0xee, 0x21, 0xcf, 0x01, 0x47, 0x8e, 0xd6, + 0x35, 0xcf, 0x41, 0x03, 0xb6, 0x00, 0x11, 0x0d, 0x4e, 0x88, 0x01, 0xff, 0x44, 0xc3, 0x00, 0x01, 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x0d, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x04, 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x10, 0xcf, 0x41, 0x03, 0xb6, 0x00, 0x23, 0xb3, 0x01, 0xff, 0x02, 0x44, 0x00, 0x06, 0x46, - 0x70, 0x4c, 0x1e, 0xcf, 0x41, 0x0b, 0xe4, 0x9a, 0x06, 0x46, 0x94, 0x86, + 0xb9, 0x4d, 0x1e, 0xcf, 0x41, 0x0b, 0x0a, 0x9d, 0x06, 0x46, 0x51, 0x88, 0x19, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x09, 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x15, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x06, 0xcf, 0x01, 0x45, 0xc8, 0x00, - 0x12, 0xcf, 0x41, 0x45, 0xf7, 0xe0, 0x29, 0xcf, 0x01, 0x44, 0x94, 0x86, - 0x40, 0xcf, 0x81, 0x06, 0x46, 0xf0, 0xdd, 0x28, 0xcf, 0x41, 0x48, 0xb2, - 0xbf, 0x2d, 0xcf, 0x41, 0x06, 0x62, 0xdb, 0x06, 0x46, 0x94, 0xd4, 0x1f, - 0xcf, 0x41, 0x03, 0xb6, 0x00, 0x11, 0x0d, 0x91, 0x86, 0x01, 0xff, 0x44, + 0x12, 0xcf, 0x41, 0x45, 0x02, 0xe4, 0x29, 0xcf, 0x01, 0x44, 0x51, 0x88, + 0x40, 0xcf, 0x81, 0x06, 0x46, 0xfa, 0xe0, 0x28, 0xcf, 0x41, 0x48, 0x30, + 0xc2, 0x2d, 0xcf, 0x41, 0x06, 0x5a, 0xde, 0x06, 0x46, 0x67, 0xd7, 0x1f, + 0xcf, 0x41, 0x03, 0xb6, 0x00, 0x11, 0x0d, 0x4e, 0x88, 0x01, 0xff, 0x44, 0xc3, 0x00, 0x00, 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x0c, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x03, 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x0f, 0xcf, 0x41, 0x54, - 0xfb, 0x40, 0x34, 0xcf, 0x01, 0x49, 0xa4, 0xbe, 0x3d, 0xcf, 0x41, 0x46, - 0x64, 0xd9, 0x38, 0xcf, 0x81, 0x06, 0x4a, 0xc1, 0xb0, 0x3f, 0xcf, 0x41, - 0x48, 0xf2, 0xbf, 0x39, 0xcf, 0x41, 0x48, 0xd2, 0xc1, 0x93, 0xf9, 0x01, - 0x09, 0x5b, 0xbc, 0x06, 0x42, 0xc4, 0x02, 0xe2, 0x2b, 0x40, 0x46, 0x24, - 0x60, 0x0d, 0x20, 0x00, 0x02, 0xb4, 0x01, 0x06, 0x45, 0x87, 0x4b, 0x0b, - 0x20, 0x40, 0x4c, 0x80, 0x4b, 0xff, 0xfe, 0x00, 0x48, 0xd2, 0xc5, 0x0c, - 0x20, 0x40, 0x02, 0xaf, 0x00, 0xa8, 0x03, 0x54, 0x37, 0x41, 0x33, 0x1a, - 0x01, 0x08, 0x4c, 0x16, 0x91, 0x03, 0x07, 0xc1, 0x05, 0x90, 0x01, 0x05, - 0xb9, 0x00, 0x74, 0xb3, 0x3a, 0x06, 0x6c, 0x38, 0x01, 0xff, 0x4b, 0x72, - 0x38, 0x0a, 0x1a, 0x01, 0x05, 0x2f, 0x03, 0x01, 0xff, 0xa1, 0x20, 0xe5, + 0x08, 0x42, 0x34, 0xcf, 0x01, 0x49, 0x2b, 0xc1, 0x3d, 0xcf, 0x41, 0x46, + 0x56, 0xdc, 0x38, 0xcf, 0x81, 0x06, 0x4a, 0x11, 0xb3, 0x3f, 0xcf, 0x41, + 0x48, 0x70, 0xc2, 0x39, 0xcf, 0x41, 0x48, 0x58, 0xc4, 0x93, 0xf9, 0x01, + 0x09, 0xd0, 0xbe, 0x06, 0x42, 0xef, 0x02, 0xe2, 0x2b, 0x40, 0x46, 0xa0, + 0x61, 0x0d, 0x20, 0x00, 0x02, 0xb4, 0x01, 0x06, 0x45, 0xd0, 0x4c, 0x0b, + 0x20, 0x40, 0x4c, 0xc9, 0x4c, 0xff, 0xfe, 0x00, 0x48, 0x70, 0xc8, 0x0c, + 0x20, 0x40, 0x02, 0xaf, 0x00, 0xa8, 0x03, 0x54, 0x44, 0x42, 0x33, 0x1a, + 0x01, 0x08, 0xb8, 0x16, 0x91, 0x03, 0x07, 0xec, 0x05, 0x90, 0x01, 0x05, + 0xb9, 0x00, 0x74, 0xb3, 0x3a, 0x06, 0x3c, 0x39, 0x01, 0xff, 0x4b, 0x42, + 0x39, 0x0a, 0x1a, 0x01, 0x05, 0x5a, 0x03, 0x01, 0xff, 0xa1, 0x20, 0xe5, 0x04, 0x1a, 0x01, 0xe9, 0x01, 0x1a, 0x01, 0xef, 0x06, 0x1a, 0x81, 0x0f, - 0x4a, 0xd3, 0xad, 0x09, 0x1a, 0x01, 0xf5, 0x03, 0x1a, 0xc1, 0x00, 0xe5, + 0x4a, 0x23, 0xb0, 0x09, 0x1a, 0x01, 0xf5, 0x03, 0x1a, 0xc1, 0x00, 0xe5, 0x02, 0x1a, 0x41, 0xe5, 0x05, 0x1a, 0x41, 0xe9, 0x07, 0x1a, 0x01, 0xf5, - 0x08, 0x1a, 0x41, 0x04, 0x30, 0x03, 0x06, 0x48, 0x3a, 0xc9, 0x47, 0x1a, - 0x41, 0x48, 0xd0, 0x15, 0x38, 0x1a, 0x01, 0x06, 0x4f, 0x23, 0x11, 0x02, - 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, 0x34, 0x1a, 0x01, 0x45, 0xa3, - 0x4a, 0x39, 0x1a, 0x41, 0x4e, 0xe3, 0x24, 0x37, 0x1a, 0x01, 0x45, 0x55, - 0x23, 0x35, 0x1a, 0xc1, 0x00, 0x4e, 0xe3, 0x24, 0x36, 0x1a, 0x41, 0x4b, - 0x2c, 0x99, 0x43, 0x1a, 0x01, 0x4a, 0x03, 0xab, 0x44, 0x1a, 0x01, 0x44, - 0xa4, 0x02, 0x42, 0x1a, 0x01, 0x45, 0x59, 0x39, 0x41, 0x1a, 0x41, 0x42, - 0x2e, 0x25, 0x29, 0x1a, 0x01, 0xe1, 0x00, 0x1a, 0x01, 0xa2, 0xe5, 0x01, + 0x08, 0x1a, 0x41, 0x04, 0x5b, 0x03, 0x06, 0x48, 0xf0, 0xcb, 0x47, 0x1a, + 0x41, 0x48, 0x3c, 0x16, 0x38, 0x1a, 0x01, 0x06, 0xd7, 0x23, 0x11, 0x02, + 0x02, 0x00, 0x01, 0xff, 0x44, 0xe5, 0x23, 0x34, 0x1a, 0x01, 0x45, 0xec, + 0x4b, 0x39, 0x1a, 0x41, 0x4e, 0x6b, 0x25, 0x37, 0x1a, 0x01, 0x45, 0xdd, + 0x23, 0x35, 0x1a, 0xc1, 0x00, 0x4e, 0x6b, 0x25, 0x36, 0x1a, 0x41, 0x4b, + 0x47, 0x9b, 0x43, 0x1a, 0x01, 0x4a, 0x5d, 0xad, 0x44, 0x1a, 0x01, 0x44, + 0xa4, 0x02, 0x42, 0x1a, 0x01, 0x45, 0x29, 0x3a, 0x41, 0x1a, 0x41, 0x42, + 0xcf, 0x25, 0x29, 0x1a, 0x01, 0xe1, 0x00, 0x1a, 0x01, 0xa2, 0xe5, 0x01, 0xa3, 0xd8, 0x01, 0xa4, 0xb2, 0x01, 0xa7, 0xa5, 0x01, 0x42, 0x22, 0x00, - 0x31, 0x1a, 0x01, 0x42, 0xbd, 0x26, 0x12, 0x1a, 0x01, 0xab, 0x86, 0x01, + 0x31, 0x1a, 0x01, 0x42, 0x56, 0x19, 0x12, 0x1a, 0x01, 0xab, 0x86, 0x01, 0x42, 0x74, 0x00, 0x2c, 0x1a, 0x01, 0x42, 0x6c, 0x00, 0x22, 0x1a, 0x01, 0xae, 0x62, 0xb0, 0x56, 0x42, 0x71, 0x00, 0x2b, 0x1a, 0x01, 0xb3, 0x3e, - 0xb4, 0x19, 0x42, 0xa6, 0x0a, 0x2d, 0x1a, 0x01, 0x42, 0x34, 0x22, 0x2a, + 0xb4, 0x19, 0x42, 0xf5, 0x0a, 0x2d, 0x1a, 0x01, 0x42, 0xbc, 0x22, 0x2a, 0x1a, 0x01, 0xba, 0x01, 0xff, 0xe1, 0x28, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x27, 0x1a, 0x41, 0xe1, 0x19, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x1a, 0x1a, 0x01, 0xb3, 0x0d, 0xb4, 0x01, 0xff, 0xe1, 0x14, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x15, 0x1a, 0x41, 0xe1, 0x23, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x24, 0x1a, 0x41, 0xe1, 0x30, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x2e, 0x1a, 0x01, - 0x42, 0x15, 0x06, 0x2f, 0x1a, 0x41, 0xe1, 0x1e, 0x1a, 0x01, 0x42, 0x22, + 0x42, 0x40, 0x06, 0x2f, 0x1a, 0x41, 0xe1, 0x1e, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x1f, 0x1a, 0x41, 0xe1, 0x1d, 0x1a, 0x01, 0x42, 0x24, 0x02, 0x0f, - 0x1a, 0x01, 0x42, 0xff, 0x04, 0x18, 0x1a, 0x01, 0x42, 0x34, 0x22, 0x13, + 0x1a, 0x01, 0x42, 0x2a, 0x05, 0x18, 0x1a, 0x01, 0x42, 0xbc, 0x22, 0x13, 0x1a, 0x41, 0xe1, 0x0b, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x0c, 0x1a, 0x01, - 0x43, 0x59, 0x20, 0x32, 0x1a, 0x41, 0xe1, 0x0d, 0x1a, 0x01, 0x42, 0x22, + 0x43, 0xfb, 0x20, 0x32, 0x1a, 0x41, 0xe1, 0x0d, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x0e, 0x1a, 0x41, 0xe1, 0x1b, 0x1a, 0x01, 0xa4, 0x13, 0x42, 0x22, 0x00, 0x1c, 0x1a, 0x01, 0xba, 0x01, 0xff, 0xe1, 0x25, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x26, 0x1a, 0x41, 0xe1, 0x16, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x17, 0x1a, 0x41, 0xe1, 0x10, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x11, 0x1a, 0x41, 0xe1, 0x20, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x21, 0x1a, 0x41, 0x56, - 0xdb, 0x32, 0x45, 0x1a, 0x01, 0x49, 0x19, 0x1b, 0x3f, 0x1a, 0x41, 0x06, - 0x9a, 0x3c, 0x27, 0x06, 0x2f, 0x2d, 0x01, 0xff, 0x0d, 0x49, 0x81, 0x06, - 0x51, 0xc3, 0x59, 0x3a, 0x1a, 0x41, 0x42, 0x74, 0x00, 0x3d, 0x1a, 0x01, - 0x42, 0x71, 0x00, 0x3c, 0x1a, 0x01, 0x42, 0xa6, 0x0a, 0x3e, 0x1a, 0x01, - 0x42, 0x34, 0x22, 0x3b, 0x1a, 0x41, 0x56, 0xdb, 0x32, 0x46, 0x1a, 0x01, - 0x49, 0x19, 0x1b, 0x40, 0x1a, 0x41, 0x4e, 0xa8, 0x74, 0xff, 0x22, 0x00, - 0x56, 0x99, 0x32, 0x64, 0x2a, 0x00, 0x05, 0xc3, 0x00, 0x46, 0xb2, 0x27, - 0xb3, 0x06, 0x4a, 0x0d, 0xb0, 0x82, 0x29, 0x40, 0x06, 0x9c, 0xd7, 0x06, - 0x43, 0xf3, 0x43, 0x81, 0x29, 0x40, 0x4b, 0x16, 0x3a, 0x1f, 0x2a, 0x00, - 0xb0, 0x01, 0xff, 0x45, 0x76, 0xe4, 0x20, 0x2a, 0x00, 0x49, 0x64, 0xbc, - 0x21, 0x2a, 0x40, 0x54, 0xa7, 0x3f, 0x65, 0x2a, 0x00, 0x55, 0x0c, 0x3a, - 0x3e, 0x2a, 0x00, 0x05, 0xc9, 0x00, 0x01, 0xff, 0x4f, 0xb5, 0x69, 0x8a, - 0x29, 0x00, 0x4d, 0x8e, 0x82, 0x88, 0x29, 0x40, 0x4f, 0xb5, 0x69, 0x89, - 0x29, 0x00, 0x4d, 0x8e, 0x82, 0x87, 0x29, 0x40, 0x4b, 0x69, 0x97, 0x71, - 0xf9, 0x01, 0xa5, 0xc4, 0x2b, 0xa9, 0x06, 0x44, 0x6e, 0xee, 0x80, 0xfa, - 0x41, 0x80, 0x06, 0x46, 0x26, 0xdb, 0x2f, 0x26, 0x40, 0x08, 0x1c, 0xa3, - 0xcd, 0x28, 0x09, 0xae, 0x17, 0x01, 0xff, 0xe1, 0x0a, 0xa0, 0x80, 0xb6, - 0x28, 0xa2, 0x94, 0x26, 0xa3, 0x87, 0x24, 0xa4, 0x9d, 0x22, 0xe5, 0x14, - 0xa0, 0x80, 0x93, 0x22, 0xa6, 0xb6, 0x21, 0xa7, 0xb7, 0x1f, 0xa8, 0x8b, - 0x1b, 0xe9, 0x02, 0xa0, 0x80, 0xe1, 0x1a, 0xaa, 0xf8, 0x18, 0xab, 0xfd, - 0x17, 0xac, 0xe3, 0x16, 0xad, 0xf6, 0x14, 0xae, 0xab, 0x0e, 0xef, 0x11, - 0xa0, 0x80, 0x99, 0x0e, 0xb0, 0x95, 0x0d, 0xb1, 0x9a, 0x0c, 0xb2, 0xba, - 0x0a, 0xb3, 0xb4, 0x07, 0xb4, 0xb9, 0x06, 0x42, 0xef, 0x04, 0x0d, 0xa0, - 0x80, 0xa9, 0x06, 0xb6, 0xa4, 0x05, 0xb7, 0xe4, 0x04, 0xb8, 0x89, 0x04, - 0xb9, 0x8e, 0x03, 0xba, 0x01, 0xff, 0xe1, 0x96, 0xa2, 0x80, 0xf9, 0x02, - 0xe5, 0xa0, 0xa2, 0x80, 0xeb, 0x02, 0xa8, 0xf4, 0x01, 0xe9, 0x8f, 0xa2, - 0x80, 0xd5, 0x01, 0xef, 0x9d, 0xa2, 0x80, 0xc3, 0x01, 0xf5, 0xa4, 0xa2, - 0x80, 0x9b, 0x01, 0xf9, 0xaa, 0xa2, 0x80, 0x80, 0x01, 0xba, 0x01, 0xff, - 0xe1, 0xda, 0xa2, 0x80, 0x6c, 0xe5, 0xe0, 0xa2, 0x80, 0x5f, 0xe9, 0xd2, - 0xa2, 0x80, 0x3d, 0xef, 0xdd, 0xa2, 0x80, 0x30, 0xf5, 0xe3, 0xa2, 0x80, - 0x1a, 0xf9, 0xe9, 0xa2, 0xc0, 0x00, 0xf0, 0xea, 0xa2, 0x00, 0xf2, 0xec, - 0xa2, 0x80, 0x08, 0xf4, 0xe7, 0xa2, 0x00, 0xf8, 0xe8, 0xa2, 0x40, 0xf8, - 0xeb, 0xa2, 0x40, 0xf0, 0xe4, 0xa2, 0x00, 0xf2, 0xe6, 0xa2, 0x80, 0x04, - 0xf8, 0xe2, 0xa2, 0x40, 0xf8, 0xe5, 0xa2, 0x40, 0xf0, 0xde, 0xa2, 0x00, - 0xf8, 0xdc, 0xa2, 0x40, 0xe5, 0xd6, 0xa2, 0x80, 0x0c, 0xf0, 0xd3, 0xa2, - 0x00, 0xf4, 0xd0, 0xa2, 0x00, 0xf8, 0xd1, 0xa2, 0x40, 0xf0, 0xd7, 0xa2, - 0x00, 0xf4, 0xd4, 0xa2, 0x00, 0xf8, 0xd5, 0xa2, 0x40, 0xf0, 0xe1, 0xa2, - 0x00, 0xf8, 0xdf, 0xa2, 0x40, 0xf0, 0xdb, 0xa2, 0x00, 0xf4, 0xd8, 0xa2, - 0x00, 0xf8, 0xd9, 0xa2, 0x40, 0xf0, 0xab, 0xa2, 0x00, 0xf2, 0xad, 0xa2, - 0x80, 0x08, 0xf4, 0xa8, 0xa2, 0x00, 0xf8, 0xa9, 0xa2, 0x40, 0xf8, 0xac, - 0xa2, 0x40, 0xef, 0x99, 0xa2, 0x80, 0x15, 0xf0, 0xa5, 0xa2, 0x00, 0xf2, - 0xa7, 0xa2, 0x80, 0x08, 0xf4, 0xa2, 0xa2, 0x00, 0xf8, 0xa3, 0xa2, 0x40, - 0xf8, 0xa6, 0xa2, 0x40, 0xf0, 0x9a, 0xa2, 0x00, 0xf8, 0x98, 0xa2, 0x40, - 0xf0, 0x9e, 0xa2, 0x00, 0xf4, 0x9b, 0xa2, 0x00, 0xf8, 0x9c, 0xa2, 0x40, - 0xe5, 0x92, 0xa2, 0x80, 0x0c, 0xf0, 0x90, 0xa2, 0x00, 0xf4, 0x8d, 0xa2, - 0x00, 0xf8, 0x8e, 0xa2, 0x40, 0xf0, 0x93, 0xa2, 0x00, 0xf8, 0x91, 0xa2, - 0x40, 0xe1, 0x48, 0xa3, 0x80, 0x63, 0xe5, 0x53, 0xa3, 0x80, 0x52, 0xef, - 0x4f, 0xa3, 0x80, 0x41, 0xf5, 0x57, 0xa3, 0x80, 0x1a, 0xf9, 0x5d, 0xa3, - 0xc0, 0x00, 0xf0, 0x5e, 0xa3, 0x00, 0xf2, 0x60, 0xa3, 0x80, 0x08, 0xf4, - 0x5b, 0xa3, 0x00, 0xf8, 0x5c, 0xa3, 0x40, 0xf8, 0x5f, 0xa3, 0x40, 0xef, - 0x4b, 0xa3, 0x80, 0x15, 0xf0, 0x58, 0xa3, 0x00, 0xf2, 0x5a, 0xa3, 0x80, - 0x08, 0xf4, 0x55, 0xa3, 0x00, 0xf8, 0x56, 0xa3, 0x40, 0xf8, 0x59, 0xa3, - 0x40, 0xf0, 0x4c, 0xa3, 0x00, 0xf8, 0x4a, 0xa3, 0x40, 0xf0, 0x50, 0xa3, - 0x00, 0xf4, 0x4d, 0xa3, 0x00, 0xf8, 0x4e, 0xa3, 0x40, 0xf0, 0x54, 0xa3, - 0x00, 0xf4, 0x51, 0xa3, 0x00, 0xf8, 0x52, 0xa3, 0x40, 0xf0, 0x49, 0xa3, - 0x00, 0xf4, 0x46, 0xa3, 0x00, 0xf8, 0x47, 0xa3, 0x40, 0xf0, 0xa1, 0xa2, - 0x00, 0xf8, 0x9f, 0xa2, 0x40, 0xf0, 0x97, 0xa2, 0x00, 0xf4, 0x94, 0xa2, - 0x00, 0xf8, 0x95, 0xa2, 0x40, 0xe9, 0x73, 0xa4, 0x80, 0x56, 0xef, 0x7f, - 0xa4, 0x80, 0x45, 0xf5, 0x83, 0xa4, 0x80, 0x1a, 0xf9, 0x89, 0xa4, 0xc0, - 0x00, 0xf0, 0x8a, 0xa4, 0x00, 0xf2, 0x8c, 0xa4, 0x80, 0x08, 0xf4, 0x87, - 0xa4, 0x00, 0xf8, 0x88, 0xa4, 0x40, 0xf8, 0x8b, 0xa4, 0x40, 0xef, 0x7b, - 0xa4, 0x80, 0x15, 0xf0, 0x84, 0xa4, 0x00, 0xf2, 0x86, 0xa4, 0x80, 0x08, - 0xf4, 0x81, 0xa4, 0x00, 0xf8, 0x82, 0xa4, 0x40, 0xf8, 0x85, 0xa4, 0x40, - 0xf0, 0x7c, 0xa4, 0x00, 0xf4, 0x79, 0xa4, 0x00, 0xf8, 0x7a, 0xa4, 0x40, - 0xf0, 0x80, 0xa4, 0x00, 0xf4, 0x7d, 0xa4, 0x00, 0xf8, 0x7e, 0xa4, 0x40, - 0xe5, 0x77, 0xa4, 0x80, 0x0c, 0xf0, 0x74, 0xa4, 0x00, 0xf4, 0x71, 0xa4, - 0x00, 0xf8, 0x72, 0xa4, 0x40, 0xf0, 0x78, 0xa4, 0x00, 0xf4, 0x75, 0xa4, - 0x00, 0xf8, 0x76, 0xa4, 0x40, 0xe9, 0x5f, 0xa4, 0x80, 0x36, 0xef, 0x69, - 0xa4, 0x80, 0x25, 0x42, 0xef, 0x04, 0x66, 0xa4, 0x80, 0x1a, 0xf9, 0x6d, - 0xa4, 0xc0, 0x00, 0xf0, 0x6e, 0xa4, 0x00, 0xf2, 0x70, 0xa4, 0x80, 0x08, - 0xf4, 0x6b, 0xa4, 0x00, 0xf8, 0x6c, 0xa4, 0x40, 0xf8, 0x6f, 0xa4, 0x40, - 0xf8, 0x65, 0xa4, 0x40, 0xf0, 0x6a, 0xa4, 0x00, 0xf4, 0x67, 0xa4, 0x00, - 0xf8, 0x68, 0xa4, 0x40, 0xe5, 0x63, 0xa4, 0x80, 0x0c, 0xf0, 0x60, 0xa4, - 0x00, 0xf4, 0x5d, 0xa4, 0x00, 0xf8, 0x5e, 0xa4, 0x40, 0xf0, 0x64, 0xa4, - 0x00, 0xf4, 0x61, 0xa4, 0x00, 0xf8, 0x62, 0xa4, 0x40, 0xe1, 0x82, 0xa2, - 0x80, 0x2c, 0xe5, 0x8b, 0xa2, 0x80, 0x1f, 0xef, 0x88, 0xa2, 0x80, 0x12, - 0xf5, 0x15, 0xa0, 0xc0, 0x00, 0xef, 0x85, 0xa2, 0xc0, 0x00, 0xf0, 0x86, - 0xa2, 0x00, 0xf8, 0x84, 0xa2, 0x40, 0xf0, 0x89, 0xa2, 0x00, 0xf8, 0x87, - 0xa2, 0x40, 0xf0, 0x8c, 0xa2, 0x00, 0xf8, 0x8a, 0xa2, 0x40, 0xf0, 0x83, - 0xa2, 0x00, 0xf4, 0x80, 0xa2, 0x00, 0xf8, 0x81, 0xa2, 0x40, 0xe1, 0xec, - 0xa0, 0x80, 0x71, 0xa5, 0x67, 0xe9, 0xe4, 0xa0, 0x80, 0x45, 0xef, 0xf0, - 0xa0, 0x80, 0x34, 0xf5, 0xf6, 0xa0, 0x80, 0x1a, 0xf9, 0xfc, 0xa0, 0xc0, - 0x00, 0xf0, 0xfd, 0xa0, 0x00, 0xf2, 0xff, 0xa0, 0x80, 0x08, 0xf4, 0xfa, - 0xa0, 0x00, 0xf8, 0xfb, 0xa0, 0x40, 0xf8, 0xfe, 0xa0, 0x40, 0xf0, 0xf7, - 0xa0, 0x00, 0xf2, 0xf9, 0xa0, 0x80, 0x08, 0xf4, 0xf4, 0xa0, 0x00, 0xf8, - 0xf5, 0xa0, 0x40, 0xf8, 0xf8, 0xa0, 0x40, 0xf0, 0xf1, 0xa0, 0x00, 0xf4, - 0xee, 0xa0, 0x00, 0xf8, 0xef, 0xa0, 0x40, 0xe5, 0xe8, 0xa0, 0x80, 0x0c, - 0xf0, 0xe5, 0xa0, 0x00, 0xf4, 0xe2, 0xa0, 0x00, 0xf8, 0xe3, 0xa0, 0x40, - 0xf0, 0xe9, 0xa0, 0x00, 0xf4, 0xe6, 0xa0, 0x00, 0xf8, 0xe7, 0xa0, 0x40, - 0xf0, 0xf3, 0xa0, 0x00, 0xf8, 0xf2, 0xa0, 0x40, 0xf0, 0xed, 0xa0, 0x00, - 0xf4, 0xea, 0xa0, 0x00, 0xf8, 0xeb, 0xa0, 0x40, 0xf0, 0x0e, 0xa0, 0x00, - 0xf8, 0x0c, 0xa0, 0x40, 0xe1, 0x23, 0xa1, 0x80, 0x67, 0xe5, 0x2e, 0xa1, - 0x80, 0x5a, 0xe9, 0x1c, 0xa1, 0x80, 0x3c, 0xef, 0x2b, 0xa1, 0x80, 0x2b, - 0xf5, 0x32, 0xa1, 0xc0, 0x00, 0xef, 0x27, 0xa1, 0x80, 0x15, 0xf0, 0x33, - 0xa1, 0x00, 0xf2, 0x35, 0xa1, 0x80, 0x08, 0xf4, 0x30, 0xa1, 0x00, 0xf8, - 0x31, 0xa1, 0x40, 0xf8, 0x34, 0xa1, 0x40, 0xf0, 0x28, 0xa1, 0x00, 0xf4, - 0x25, 0xa1, 0x00, 0xf8, 0x26, 0xa1, 0x40, 0xf0, 0x2c, 0xa1, 0x00, 0xf4, - 0x29, 0xa1, 0x00, 0xf8, 0x2a, 0xa1, 0x40, 0xe5, 0x1f, 0xa1, 0x80, 0x0c, - 0xf0, 0x1d, 0xa1, 0x00, 0xf4, 0x1a, 0xa1, 0x00, 0xf8, 0x1b, 0xa1, 0x40, - 0xf0, 0x20, 0xa1, 0x00, 0xf8, 0x1e, 0xa1, 0x40, 0xf0, 0x2f, 0xa1, 0x00, - 0xf8, 0x2d, 0xa1, 0x40, 0xf0, 0x24, 0xa1, 0x00, 0xf4, 0x21, 0xa1, 0x00, - 0xf8, 0x22, 0xa1, 0x40, 0xe1, 0x12, 0xa3, 0x80, 0xf1, 0x02, 0xe5, 0x1c, - 0xa3, 0x80, 0xe3, 0x02, 0xa8, 0xec, 0x01, 0xe9, 0x0b, 0xa3, 0x80, 0xcd, - 0x01, 0xef, 0x19, 0xa3, 0x80, 0xbb, 0x01, 0xb3, 0x41, 0xf5, 0x20, 0xa3, - 0x80, 0x1a, 0xf9, 0x26, 0xa3, 0xc0, 0x00, 0xf0, 0x27, 0xa3, 0x00, 0xf2, - 0x29, 0xa3, 0x80, 0x08, 0xf4, 0x24, 0xa3, 0x00, 0xf8, 0x25, 0xa3, 0x40, - 0xf8, 0x28, 0xa3, 0x40, 0xef, 0x15, 0xa3, 0x80, 0x15, 0xf0, 0x21, 0xa3, - 0x00, 0xf2, 0x23, 0xa3, 0x80, 0x08, 0xf4, 0x1e, 0xa3, 0x00, 0xf8, 0x1f, - 0xa3, 0x40, 0xf8, 0x22, 0xa3, 0x40, 0xf0, 0x16, 0xa3, 0x00, 0xf8, 0x14, - 0xa3, 0x40, 0xe1, 0x33, 0xa3, 0x80, 0x67, 0xe5, 0x3a, 0xa3, 0x80, 0x5a, - 0xe9, 0x2c, 0xa3, 0x80, 0x3c, 0xef, 0x37, 0xa3, 0x80, 0x2b, 0xf5, 0x3e, - 0xa3, 0x80, 0x1a, 0xf9, 0x42, 0xa3, 0xc0, 0x00, 0xf0, 0x43, 0xa3, 0x00, - 0xf2, 0x45, 0xa3, 0x80, 0x08, 0xf4, 0x40, 0xa3, 0x00, 0xf8, 0x41, 0xa3, - 0x40, 0xf8, 0x44, 0xa3, 0x40, 0xf0, 0x3f, 0xa3, 0x00, 0xf4, 0x3c, 0xa3, - 0x00, 0xf8, 0x3d, 0xa3, 0x40, 0xf0, 0x38, 0xa3, 0x00, 0xf4, 0x35, 0xa3, - 0x00, 0xf8, 0x36, 0xa3, 0x40, 0xe5, 0x2f, 0xa3, 0x80, 0x0c, 0xf0, 0x2d, - 0xa3, 0x00, 0xf4, 0x2a, 0xa3, 0x00, 0xf8, 0x2b, 0xa3, 0x40, 0xf0, 0x30, - 0xa3, 0x00, 0xf8, 0x2e, 0xa3, 0x40, 0xf0, 0x3b, 0xa3, 0x00, 0xf8, 0x39, - 0xa3, 0x40, 0xf0, 0x34, 0xa3, 0x00, 0xf4, 0x31, 0xa3, 0x00, 0xf8, 0x32, - 0xa3, 0x40, 0xf0, 0x1a, 0xa3, 0x00, 0xf4, 0x17, 0xa3, 0x00, 0xf8, 0x18, - 0xa3, 0x40, 0xe5, 0x0e, 0xa3, 0x80, 0x0c, 0xf0, 0x0c, 0xa3, 0x00, 0xf4, - 0x09, 0xa3, 0x00, 0xf8, 0x0a, 0xa3, 0x40, 0xf0, 0x0f, 0xa3, 0x00, 0xf8, - 0x0d, 0xa3, 0x40, 0xe1, 0xad, 0xa3, 0x80, 0x63, 0xe5, 0xb8, 0xa3, 0x80, - 0x52, 0xef, 0xb4, 0xa3, 0x80, 0x41, 0xf5, 0xbc, 0xa3, 0x80, 0x1a, 0xf9, - 0xc2, 0xa3, 0xc0, 0x00, 0xf0, 0xc3, 0xa3, 0x00, 0xf2, 0xc5, 0xa3, 0x80, - 0x08, 0xf4, 0xc0, 0xa3, 0x00, 0xf8, 0xc1, 0xa3, 0x40, 0xf8, 0xc4, 0xa3, - 0x40, 0xef, 0xb0, 0xa3, 0x80, 0x15, 0xf0, 0xbd, 0xa3, 0x00, 0xf2, 0xbf, - 0xa3, 0x80, 0x08, 0xf4, 0xba, 0xa3, 0x00, 0xf8, 0xbb, 0xa3, 0x40, 0xf8, - 0xbe, 0xa3, 0x40, 0xf0, 0xb1, 0xa3, 0x00, 0xf8, 0xaf, 0xa3, 0x40, 0xf0, - 0xb5, 0xa3, 0x00, 0xf4, 0xb2, 0xa3, 0x00, 0xf8, 0xb3, 0xa3, 0x40, 0xf0, - 0xb9, 0xa3, 0x00, 0xf4, 0xb6, 0xa3, 0x00, 0xf8, 0xb7, 0xa3, 0x40, 0xf0, - 0xae, 0xa3, 0x00, 0xf4, 0xab, 0xa3, 0x00, 0xf8, 0xac, 0xa3, 0x40, 0xf0, - 0x1d, 0xa3, 0x00, 0xf8, 0x1b, 0xa3, 0x40, 0xf0, 0x13, 0xa3, 0x00, 0xf4, - 0x10, 0xa3, 0x00, 0xf8, 0x11, 0xa3, 0x40, 0xe1, 0xc8, 0xa3, 0x80, 0xcb, - 0x01, 0xe5, 0xd2, 0xa3, 0x80, 0xbd, 0x01, 0xef, 0xcf, 0xa3, 0x80, 0xab, - 0x01, 0xb2, 0x41, 0xf5, 0xd6, 0xa3, 0x80, 0x1a, 0xf9, 0xdc, 0xa3, 0xc0, - 0x00, 0xf0, 0xdd, 0xa3, 0x00, 0xf2, 0xdf, 0xa3, 0x80, 0x08, 0xf4, 0xda, - 0xa3, 0x00, 0xf8, 0xdb, 0xa3, 0x40, 0xf8, 0xde, 0xa3, 0x40, 0xef, 0xcb, - 0xa3, 0x80, 0x15, 0xf0, 0xd7, 0xa3, 0x00, 0xf2, 0xd9, 0xa3, 0x80, 0x08, - 0xf4, 0xd4, 0xa3, 0x00, 0xf8, 0xd5, 0xa3, 0x40, 0xf8, 0xd8, 0xa3, 0x40, - 0xf0, 0xcc, 0xa3, 0x00, 0xf8, 0xca, 0xa3, 0x40, 0xe1, 0x7d, 0xa3, 0x80, - 0x5f, 0xe5, 0x86, 0xa3, 0x80, 0x4e, 0xef, 0x82, 0xa3, 0x80, 0x3d, 0xf5, - 0x8a, 0xa3, 0x80, 0x1a, 0xf9, 0x90, 0xa3, 0xc0, 0x00, 0xf0, 0x91, 0xa3, - 0x00, 0xf2, 0x93, 0xa3, 0x80, 0x08, 0xf4, 0x8e, 0xa3, 0x00, 0xf8, 0x8f, - 0xa3, 0x40, 0xf8, 0x92, 0xa3, 0x40, 0xef, 0x7f, 0xa3, 0x80, 0x15, 0xf0, - 0x8b, 0xa3, 0x00, 0xf2, 0x8d, 0xa3, 0x80, 0x08, 0xf4, 0x88, 0xa3, 0x00, - 0xf8, 0x89, 0xa3, 0x40, 0xf8, 0x8c, 0xa3, 0x40, 0xf8, 0x7e, 0xa3, 0x40, - 0xf0, 0x83, 0xa3, 0x00, 0xf4, 0x80, 0xa3, 0x00, 0xf8, 0x81, 0xa3, 0x40, - 0xf0, 0x87, 0xa3, 0x00, 0xf4, 0x84, 0xa3, 0x00, 0xf8, 0x85, 0xa3, 0x40, - 0xf8, 0x7c, 0xa3, 0x40, 0xf0, 0xd0, 0xa3, 0x00, 0xf4, 0xcd, 0xa3, 0x00, - 0xf8, 0xce, 0xa3, 0x40, 0xf0, 0xd3, 0xa3, 0x00, 0xf8, 0xd1, 0xa3, 0x40, - 0xf0, 0xc9, 0xa3, 0x00, 0xf4, 0xc6, 0xa3, 0x00, 0xf8, 0xc7, 0xa3, 0x40, - 0xe9, 0xfe, 0xa3, 0x80, 0x56, 0xef, 0x0a, 0xa4, 0x80, 0x45, 0xf5, 0x0e, - 0xa4, 0x80, 0x1a, 0xf9, 0x14, 0xa4, 0xc0, 0x00, 0xf0, 0x15, 0xa4, 0x00, - 0xf2, 0x17, 0xa4, 0x80, 0x08, 0xf4, 0x12, 0xa4, 0x00, 0xf8, 0x13, 0xa4, - 0x40, 0xf8, 0x16, 0xa4, 0x40, 0xef, 0x06, 0xa4, 0x80, 0x15, 0xf0, 0x0f, - 0xa4, 0x00, 0xf2, 0x11, 0xa4, 0x80, 0x08, 0xf4, 0x0c, 0xa4, 0x00, 0xf8, - 0x0d, 0xa4, 0x40, 0xf8, 0x10, 0xa4, 0x40, 0xf0, 0x07, 0xa4, 0x00, 0xf4, - 0x04, 0xa4, 0x00, 0xf8, 0x05, 0xa4, 0x40, 0xf0, 0x0b, 0xa4, 0x00, 0xf4, - 0x08, 0xa4, 0x00, 0xf8, 0x09, 0xa4, 0x40, 0xe5, 0x02, 0xa4, 0x80, 0x0c, - 0xf0, 0xff, 0xa3, 0x00, 0xf4, 0xfc, 0xa3, 0x00, 0xf8, 0xfd, 0xa3, 0x40, - 0xf0, 0x03, 0xa4, 0x00, 0xf4, 0x00, 0xa4, 0x00, 0xf8, 0x01, 0xa4, 0x40, - 0xe1, 0x41, 0xa0, 0x80, 0x70, 0xe9, 0x3a, 0xa0, 0x80, 0x52, 0xef, 0x48, - 0xa0, 0x80, 0x41, 0xf5, 0x4c, 0xa0, 0x80, 0x1a, 0xf9, 0x52, 0xa0, 0xc0, - 0x00, 0xf0, 0x53, 0xa0, 0x00, 0xf2, 0x55, 0xa0, 0x80, 0x08, 0xf4, 0x50, - 0xa0, 0x00, 0xf8, 0x51, 0xa0, 0x40, 0xf8, 0x54, 0xa0, 0x40, 0xef, 0x44, - 0xa0, 0x80, 0x15, 0xf0, 0x4d, 0xa0, 0x00, 0xf2, 0x4f, 0xa0, 0x80, 0x08, - 0xf4, 0x4a, 0xa0, 0x00, 0xf8, 0x4b, 0xa0, 0x40, 0xf8, 0x4e, 0xa0, 0x40, - 0xf0, 0x45, 0xa0, 0x00, 0xf8, 0x43, 0xa0, 0x40, 0xf0, 0x49, 0xa0, 0x00, - 0xf4, 0x46, 0xa0, 0x00, 0xf8, 0x47, 0xa0, 0x40, 0xe5, 0x3d, 0xa0, 0x80, - 0x0c, 0xf0, 0x3b, 0xa0, 0x00, 0xf4, 0x38, 0xa0, 0x00, 0xf8, 0x39, 0xa0, - 0x40, 0xf0, 0x3e, 0xa0, 0x00, 0xf8, 0x3c, 0xa0, 0x40, 0xf0, 0x42, 0xa0, - 0x00, 0xf4, 0x3f, 0xa0, 0x00, 0xf8, 0x40, 0xa0, 0x40, 0xf0, 0x12, 0xa0, - 0x00, 0xf4, 0x0f, 0xa0, 0x00, 0xf8, 0x10, 0xa0, 0x40, 0xe1, 0x85, 0xa1, - 0x80, 0xba, 0x06, 0xa2, 0xc3, 0x05, 0xa4, 0xdd, 0x04, 0xe5, 0x8f, 0xa1, - 0x80, 0xcf, 0x04, 0xa7, 0xff, 0x03, 0xe9, 0x7f, 0xa1, 0x80, 0xe0, 0x03, - 0xaa, 0xf1, 0x02, 0xef, 0x8c, 0xa1, 0x80, 0xdf, 0x02, 0xb2, 0xf9, 0x01, - 0xf5, 0x93, 0xa1, 0x80, 0xd1, 0x01, 0xb9, 0x7e, 0xba, 0x01, 0xff, 0xe1, - 0xf6, 0xa2, 0x80, 0x6a, 0xe5, 0xfd, 0xa2, 0x80, 0x61, 0xe9, 0xef, 0xa2, - 0x80, 0x43, 0xaf, 0x39, 0xf5, 0xff, 0xa2, 0x80, 0x1a, 0xf9, 0x05, 0xa3, - 0xc0, 0x00, 0xf0, 0x06, 0xa3, 0x00, 0xf2, 0x08, 0xa3, 0x80, 0x08, 0xf4, - 0x03, 0xa3, 0x00, 0xf8, 0x04, 0xa3, 0x40, 0xf8, 0x07, 0xa3, 0x40, 0xef, - 0xf9, 0xa2, 0x80, 0x11, 0xf0, 0x00, 0xa3, 0x00, 0xf2, 0x02, 0xa3, 0x80, - 0x04, 0xf8, 0xfe, 0xa2, 0x40, 0xf8, 0x01, 0xa3, 0x40, 0xf8, 0xf8, 0xa2, - 0x40, 0xf0, 0xfb, 0xa2, 0x00, 0xf8, 0xfa, 0xa2, 0x40, 0xe5, 0xf2, 0xa2, - 0x80, 0x0c, 0xf0, 0xf0, 0xa2, 0x00, 0xf4, 0xed, 0xa2, 0x00, 0xf8, 0xee, - 0xa2, 0x40, 0xf0, 0xf3, 0xa2, 0x00, 0xf8, 0xf1, 0xa2, 0x40, 0xf8, 0xfc, - 0xa2, 0x40, 0xf0, 0xf7, 0xa2, 0x00, 0xf4, 0xf4, 0xa2, 0x00, 0xf8, 0xf5, - 0xa2, 0x40, 0xe9, 0x4c, 0xa4, 0x80, 0x2f, 0xef, 0x57, 0xa4, 0x80, 0x1e, - 0xf5, 0x5b, 0xa4, 0xc0, 0x00, 0xef, 0x53, 0xa4, 0x80, 0x0c, 0xf0, 0x5c, - 0xa4, 0x00, 0xf4, 0x59, 0xa4, 0x00, 0xf8, 0x5a, 0xa4, 0x40, 0xf0, 0x54, - 0xa4, 0x00, 0xf8, 0x52, 0xa4, 0x40, 0xf0, 0x58, 0xa4, 0x00, 0xf4, 0x55, - 0xa4, 0x00, 0xf8, 0x56, 0xa4, 0x40, 0xe5, 0x50, 0xa4, 0x80, 0x0c, 0xf0, - 0x4d, 0xa4, 0x00, 0xf4, 0x4a, 0xa4, 0x00, 0xf8, 0x4b, 0xa4, 0x40, 0xf0, - 0x51, 0xa4, 0x00, 0xf4, 0x4e, 0xa4, 0x00, 0xf8, 0x4f, 0xa4, 0x40, 0xef, - 0x88, 0xa1, 0x80, 0x15, 0xf0, 0x94, 0xa1, 0x00, 0xf2, 0x96, 0xa1, 0x80, - 0x08, 0xf4, 0x91, 0xa1, 0x00, 0xf8, 0x92, 0xa1, 0x40, 0xf8, 0x95, 0xa1, - 0x40, 0xf0, 0x89, 0xa1, 0x00, 0xf8, 0x87, 0xa1, 0x40, 0xe1, 0x96, 0xa3, - 0x80, 0x52, 0xe5, 0x9d, 0xa3, 0x80, 0x41, 0xef, 0x99, 0xa3, 0x80, 0x34, - 0xf5, 0xa1, 0xa3, 0x80, 0x1a, 0xf9, 0xa7, 0xa3, 0xc0, 0x00, 0xf0, 0xa8, - 0xa3, 0x00, 0xf2, 0xaa, 0xa3, 0x80, 0x08, 0xf4, 0xa5, 0xa3, 0x00, 0xf8, - 0xa6, 0xa3, 0x40, 0xf8, 0xa9, 0xa3, 0x40, 0xf0, 0xa2, 0xa3, 0x00, 0xf2, - 0xa4, 0xa3, 0x80, 0x08, 0xf4, 0x9f, 0xa3, 0x00, 0xf8, 0xa0, 0xa3, 0x40, - 0xf8, 0xa3, 0xa3, 0x40, 0xf0, 0x9a, 0xa3, 0x00, 0xf8, 0x98, 0xa3, 0x40, - 0xf0, 0x9e, 0xa3, 0x00, 0xf4, 0x9b, 0xa3, 0x00, 0xf8, 0x9c, 0xa3, 0x40, - 0xf0, 0x97, 0xa3, 0x00, 0xf4, 0x94, 0xa3, 0x00, 0xf8, 0x95, 0xa3, 0x40, - 0xf0, 0x8d, 0xa1, 0x00, 0xf4, 0x8a, 0xa1, 0x00, 0xf8, 0x8b, 0xa1, 0x40, - 0xe9, 0x33, 0xa4, 0x80, 0x4a, 0xef, 0x3d, 0xa4, 0x80, 0x39, 0xf5, 0x40, - 0xa4, 0x80, 0x1a, 0xf9, 0x46, 0xa4, 0xc0, 0x00, 0xf0, 0x47, 0xa4, 0x00, - 0xf2, 0x49, 0xa4, 0x80, 0x08, 0xf4, 0x44, 0xa4, 0x00, 0xf8, 0x45, 0xa4, - 0x40, 0xf8, 0x48, 0xa4, 0x40, 0xef, 0x3a, 0xa4, 0x80, 0x11, 0xf0, 0x41, - 0xa4, 0x00, 0xf2, 0x43, 0xa4, 0x80, 0x04, 0xf8, 0x3f, 0xa4, 0x40, 0xf8, - 0x42, 0xa4, 0x40, 0xf8, 0x39, 0xa4, 0x40, 0xf0, 0x3e, 0xa4, 0x00, 0xf4, - 0x3b, 0xa4, 0x00, 0xf8, 0x3c, 0xa4, 0x40, 0xe5, 0x37, 0xa4, 0x80, 0x0c, - 0xf0, 0x34, 0xa4, 0x00, 0xf4, 0x31, 0xa4, 0x00, 0xf8, 0x32, 0xa4, 0x40, - 0xf0, 0x38, 0xa4, 0x00, 0xf4, 0x35, 0xa4, 0x00, 0xf8, 0x36, 0xa4, 0x40, - 0xe5, 0x82, 0xa1, 0x80, 0x0c, 0xf0, 0x80, 0xa1, 0x00, 0xf4, 0x7d, 0xa1, - 0x00, 0xf8, 0x7e, 0xa1, 0x40, 0xf0, 0x83, 0xa1, 0x00, 0xf8, 0x81, 0xa1, - 0x40, 0xe1, 0x62, 0xa2, 0x80, 0x3c, 0xe5, 0x6c, 0xa2, 0x80, 0x2f, 0x42, - 0xc9, 0x02, 0x5e, 0xa2, 0x80, 0x20, 0xef, 0x69, 0xa2, 0x80, 0x0f, 0x42, - 0xef, 0x04, 0x66, 0xa2, 0xc0, 0x00, 0xf4, 0x64, 0xa2, 0x00, 0xf8, 0x65, - 0xa2, 0x40, 0xf0, 0x6a, 0xa2, 0x00, 0xf4, 0x67, 0xa2, 0x00, 0xf8, 0x68, - 0xa2, 0x40, 0xf0, 0x5f, 0xa2, 0x00, 0xf8, 0x5d, 0xa2, 0x40, 0xf0, 0x6d, - 0xa2, 0x00, 0xf8, 0x6b, 0xa2, 0x40, 0xf0, 0x63, 0xa2, 0x00, 0xf4, 0x60, - 0xa2, 0x00, 0xf8, 0x61, 0xa2, 0x40, 0xf0, 0x90, 0xa1, 0x00, 0xf8, 0x8e, - 0xa1, 0x40, 0xe1, 0x59, 0xa1, 0x80, 0x52, 0xe5, 0x60, 0xa1, 0x80, 0x45, - 0xe9, 0x53, 0xa1, 0x80, 0x2b, 0xef, 0x5d, 0xa1, 0x80, 0x1a, 0xf5, 0x64, - 0xa1, 0xc0, 0x00, 0xf0, 0x65, 0xa1, 0x00, 0xf2, 0x67, 0xa1, 0x80, 0x08, - 0xf4, 0x62, 0xa1, 0x00, 0xf8, 0x63, 0xa1, 0x40, 0xf8, 0x66, 0xa1, 0x40, - 0xf0, 0x5e, 0xa1, 0x00, 0xf4, 0x5b, 0xa1, 0x00, 0xf8, 0x5c, 0xa1, 0x40, - 0xe5, 0x56, 0xa1, 0x80, 0x0c, 0xf0, 0x54, 0xa1, 0x00, 0xf4, 0x51, 0xa1, - 0x00, 0xf8, 0x52, 0xa1, 0x40, 0xf8, 0x55, 0xa1, 0x40, 0xf0, 0x61, 0xa1, - 0x00, 0xf8, 0x5f, 0xa1, 0x40, 0xf0, 0x5a, 0xa1, 0x00, 0xf4, 0x57, 0xa1, - 0x00, 0xf8, 0x58, 0xa1, 0x40, 0xe1, 0x7f, 0xa0, 0x80, 0x63, 0xe9, 0x78, - 0xa0, 0x80, 0x45, 0xef, 0x83, 0xa0, 0x80, 0x34, 0xf5, 0x87, 0xa0, 0x80, - 0x1a, 0xf9, 0x8d, 0xa0, 0xc0, 0x00, 0xf0, 0x8e, 0xa0, 0x00, 0xf2, 0x90, - 0xa0, 0x80, 0x08, 0xf4, 0x8b, 0xa0, 0x00, 0xf8, 0x8c, 0xa0, 0x40, 0xf8, - 0x8f, 0xa0, 0x40, 0xf0, 0x88, 0xa0, 0x00, 0xf2, 0x8a, 0xa0, 0x80, 0x08, - 0xf4, 0x85, 0xa0, 0x00, 0xf8, 0x86, 0xa0, 0x40, 0xf8, 0x89, 0xa0, 0x40, - 0xf0, 0x84, 0xa0, 0x00, 0xf4, 0x81, 0xa0, 0x00, 0xf8, 0x82, 0xa0, 0x40, - 0xe5, 0x7b, 0xa0, 0x80, 0x0c, 0xf0, 0x79, 0xa0, 0x00, 0xf4, 0x76, 0xa0, - 0x00, 0xf8, 0x77, 0xa0, 0x40, 0xf0, 0x7c, 0xa0, 0x00, 0xf8, 0x7a, 0xa0, - 0x40, 0xf0, 0x80, 0xa0, 0x00, 0xf4, 0x7d, 0xa0, 0x00, 0xf8, 0x7e, 0xa0, - 0x40, 0xf0, 0x86, 0xa1, 0x00, 0xf8, 0x84, 0xa1, 0x40, 0xe1, 0xb7, 0xa0, - 0x80, 0xd8, 0x01, 0xe5, 0xc2, 0xa0, 0x80, 0xce, 0x01, 0xa7, 0x6b, 0xe9, - 0xb0, 0xa0, 0x80, 0x4d, 0xef, 0xbf, 0xa0, 0x80, 0x3c, 0xf5, 0xc5, 0xa0, - 0x80, 0x11, 0xf9, 0xcb, 0xa0, 0xc0, 0x00, 0xf0, 0xcc, 0xa0, 0x00, 0xf4, - 0xc9, 0xa0, 0x00, 0xf8, 0xca, 0xa0, 0x40, 0xef, 0xbb, 0xa0, 0x80, 0x15, - 0xf0, 0xc6, 0xa0, 0x00, 0xf2, 0xc8, 0xa0, 0x80, 0x08, 0xf4, 0xc3, 0xa0, - 0x00, 0xf8, 0xc4, 0xa0, 0x40, 0xf8, 0xc7, 0xa0, 0x40, 0xf0, 0xbc, 0xa0, - 0x00, 0xf4, 0xb9, 0xa0, 0x00, 0xf8, 0xba, 0xa0, 0x40, 0xf0, 0xc0, 0xa0, - 0x00, 0xf4, 0xbd, 0xa0, 0x00, 0xf8, 0xbe, 0xa0, 0x40, 0xe5, 0xb3, 0xa0, - 0x80, 0x0c, 0xf0, 0xb1, 0xa0, 0x00, 0xf4, 0xae, 0xa0, 0x00, 0xf8, 0xaf, - 0xa0, 0x40, 0xf0, 0xb4, 0xa0, 0x00, 0xf8, 0xb2, 0xa0, 0x40, 0xe1, 0x34, - 0xa2, 0x80, 0x50, 0xe5, 0x3e, 0xa2, 0x80, 0x43, 0x42, 0xc9, 0x02, 0x31, - 0xa2, 0x80, 0x38, 0xef, 0x3b, 0xa2, 0x80, 0x27, 0xf5, 0x42, 0xa2, 0xc0, - 0x00, 0xef, 0x37, 0xa2, 0x80, 0x15, 0xf0, 0x43, 0xa2, 0x00, 0xf2, 0x45, - 0xa2, 0x80, 0x08, 0xf4, 0x40, 0xa2, 0x00, 0xf8, 0x41, 0xa2, 0x40, 0xf8, - 0x44, 0xa2, 0x40, 0xf0, 0x38, 0xa2, 0x00, 0xf8, 0x36, 0xa2, 0x40, 0xf0, - 0x3c, 0xa2, 0x00, 0xf4, 0x39, 0xa2, 0x00, 0xf8, 0x3a, 0xa2, 0x40, 0xf8, - 0x30, 0xa2, 0x40, 0xf0, 0x3f, 0xa2, 0x00, 0xf8, 0x3d, 0xa2, 0x40, 0xf0, - 0x35, 0xa2, 0x00, 0xf4, 0x32, 0xa2, 0x00, 0xf8, 0x33, 0xa2, 0x40, 0xf8, - 0xc1, 0xa0, 0x40, 0xf0, 0xb8, 0xa0, 0x00, 0xf4, 0xb5, 0xa0, 0x00, 0xf8, - 0xb6, 0xa0, 0x40, 0xe1, 0xc1, 0xa1, 0x80, 0x85, 0x01, 0xe5, 0xcc, 0xa1, - 0x80, 0x78, 0xe9, 0xb9, 0xa1, 0x80, 0x56, 0xef, 0xc9, 0xa1, 0x80, 0x45, - 0xf5, 0xd0, 0xa1, 0x80, 0x1a, 0xf9, 0xd6, 0xa1, 0xc0, 0x00, 0xf0, 0xd7, - 0xa1, 0x00, 0xf2, 0xd9, 0xa1, 0x80, 0x08, 0xf4, 0xd4, 0xa1, 0x00, 0xf8, - 0xd5, 0xa1, 0x40, 0xf8, 0xd8, 0xa1, 0x40, 0xef, 0xc5, 0xa1, 0x80, 0x15, - 0xf0, 0xd1, 0xa1, 0x00, 0xf2, 0xd3, 0xa1, 0x80, 0x08, 0xf4, 0xce, 0xa1, - 0x00, 0xf8, 0xcf, 0xa1, 0x40, 0xf8, 0xd2, 0xa1, 0x40, 0xf0, 0xc6, 0xa1, - 0x00, 0xf4, 0xc3, 0xa1, 0x00, 0xf8, 0xc4, 0xa1, 0x40, 0xf0, 0xca, 0xa1, - 0x00, 0xf4, 0xc7, 0xa1, 0x00, 0xf8, 0xc8, 0xa1, 0x40, 0xe5, 0xbd, 0xa1, - 0x80, 0x0c, 0xf0, 0xba, 0xa1, 0x00, 0xf4, 0xb7, 0xa1, 0x00, 0xf8, 0xb8, - 0xa1, 0x40, 0xf0, 0xbe, 0xa1, 0x00, 0xf4, 0xbb, 0xa1, 0x00, 0xf8, 0xbc, - 0xa1, 0x40, 0xf0, 0xcd, 0xa1, 0x00, 0xf8, 0xcb, 0xa1, 0x40, 0xf0, 0xc2, - 0xa1, 0x00, 0xf4, 0xbf, 0xa1, 0x00, 0xf8, 0xc0, 0xa1, 0x40, 0xe1, 0x01, - 0xa2, 0x80, 0x67, 0xe5, 0x0c, 0xa2, 0x80, 0x56, 0xe9, 0xfa, 0xa1, 0x80, - 0x38, 0xef, 0x08, 0xa2, 0x80, 0x27, 0xf5, 0x10, 0xa2, 0xc0, 0x00, 0xef, - 0x04, 0xa2, 0x80, 0x15, 0xf0, 0x11, 0xa2, 0x00, 0xf2, 0x13, 0xa2, 0x80, - 0x08, 0xf4, 0x0e, 0xa2, 0x00, 0xf8, 0x0f, 0xa2, 0x40, 0xf8, 0x12, 0xa2, - 0x40, 0xf0, 0x05, 0xa2, 0x00, 0xf8, 0x03, 0xa2, 0x40, 0xf0, 0x09, 0xa2, - 0x00, 0xf4, 0x06, 0xa2, 0x00, 0xf8, 0x07, 0xa2, 0x40, 0xe5, 0xfd, 0xa1, - 0x80, 0x0c, 0xf0, 0xfb, 0xa1, 0x00, 0xf4, 0xf8, 0xa1, 0x00, 0xf8, 0xf9, - 0xa1, 0x40, 0xf0, 0xfe, 0xa1, 0x00, 0xf8, 0xfc, 0xa1, 0x40, 0xf0, 0x0d, - 0xa2, 0x00, 0xf4, 0x0a, 0xa2, 0x00, 0xf8, 0x0b, 0xa2, 0x40, 0xf0, 0x02, - 0xa2, 0x00, 0xf4, 0xff, 0xa1, 0x00, 0xf8, 0x00, 0xa2, 0x40, 0xe9, 0xe2, - 0xa3, 0x80, 0xc3, 0x01, 0xaa, 0x56, 0xef, 0xee, 0xa3, 0x80, 0x45, 0xf5, - 0xf2, 0xa3, 0x80, 0x1a, 0xf9, 0xf8, 0xa3, 0xc0, 0x00, 0xf0, 0xf9, 0xa3, - 0x00, 0xf2, 0xfb, 0xa3, 0x80, 0x08, 0xf4, 0xf6, 0xa3, 0x00, 0xf8, 0xf7, - 0xa3, 0x40, 0xf8, 0xfa, 0xa3, 0x40, 0xef, 0xea, 0xa3, 0x80, 0x15, 0xf0, - 0xf3, 0xa3, 0x00, 0xf2, 0xf5, 0xa3, 0x80, 0x08, 0xf4, 0xf0, 0xa3, 0x00, - 0xf8, 0xf1, 0xa3, 0x40, 0xf8, 0xf4, 0xa3, 0x40, 0xf0, 0xeb, 0xa3, 0x00, - 0xf4, 0xe8, 0xa3, 0x00, 0xf8, 0xe9, 0xa3, 0x40, 0xf0, 0xef, 0xa3, 0x00, - 0xf4, 0xec, 0xa3, 0x00, 0xf8, 0xed, 0xa3, 0x40, 0xe9, 0x1a, 0xa4, 0x80, - 0x49, 0xef, 0x25, 0xa4, 0x80, 0x38, 0xf5, 0x29, 0xa4, 0x80, 0x11, 0xf9, - 0x2f, 0xa4, 0xc0, 0x00, 0xf0, 0x30, 0xa4, 0x00, 0xf4, 0x2d, 0xa4, 0x00, - 0xf8, 0x2e, 0xa4, 0x40, 0xef, 0x21, 0xa4, 0x80, 0x15, 0xf0, 0x2a, 0xa4, - 0x00, 0xf2, 0x2c, 0xa4, 0x80, 0x08, 0xf4, 0x27, 0xa4, 0x00, 0xf8, 0x28, - 0xa4, 0x40, 0xf8, 0x2b, 0xa4, 0x40, 0xf0, 0x22, 0xa4, 0x00, 0xf8, 0x20, - 0xa4, 0x40, 0xf0, 0x26, 0xa4, 0x00, 0xf4, 0x23, 0xa4, 0x00, 0xf8, 0x24, - 0xa4, 0x40, 0xe5, 0x1e, 0xa4, 0x80, 0x0c, 0xf0, 0x1b, 0xa4, 0x00, 0xf4, - 0x18, 0xa4, 0x00, 0xf8, 0x19, 0xa4, 0x40, 0xf0, 0x1f, 0xa4, 0x00, 0xf4, - 0x1c, 0xa4, 0x00, 0xf8, 0x1d, 0xa4, 0x40, 0xe5, 0xe6, 0xa3, 0x80, 0x0c, - 0xf0, 0xe3, 0xa3, 0x00, 0xf4, 0xe0, 0xa3, 0x00, 0xf8, 0xe1, 0xa3, 0x40, - 0xf0, 0xe7, 0xa3, 0x00, 0xf4, 0xe4, 0xa3, 0x00, 0xf8, 0xe5, 0xa3, 0x40, - 0xe5, 0x06, 0xa0, 0x80, 0x13, 0xf0, 0x03, 0xa0, 0x00, 0xf4, 0x00, 0xa0, - 0x80, 0x04, 0xf8, 0x01, 0xa0, 0x40, 0x4c, 0xb8, 0x1f, 0x15, 0xa0, 0x40, - 0xf0, 0x07, 0xa0, 0x00, 0xf4, 0x04, 0xa0, 0x00, 0xf8, 0x05, 0xa0, 0x40, - 0xe1, 0x73, 0xa2, 0x80, 0x97, 0x04, 0xe5, 0x7e, 0xa2, 0x80, 0x89, 0x04, - 0xa9, 0xf9, 0x03, 0xac, 0xec, 0x02, 0xad, 0xec, 0x01, 0xae, 0x8b, 0x01, - 0xef, 0x7b, 0xa2, 0x80, 0x7a, 0x42, 0xef, 0x04, 0x77, 0xa2, 0x80, 0x67, - 0xb8, 0x01, 0xff, 0xe1, 0x50, 0xa2, 0x80, 0x53, 0xe5, 0x5b, 0xa2, 0x80, - 0x46, 0xe9, 0x48, 0xa2, 0x80, 0x24, 0xef, 0x58, 0xa2, 0x80, 0x13, 0x42, - 0xef, 0x04, 0x54, 0xa2, 0xc0, 0x00, 0xf0, 0x55, 0xa2, 0x00, 0xf4, 0x52, - 0xa2, 0x00, 0xf8, 0x53, 0xa2, 0x40, 0xf0, 0x59, 0xa2, 0x00, 0xf4, 0x56, - 0xa2, 0x00, 0xf8, 0x57, 0xa2, 0x40, 0xe5, 0x4c, 0xa2, 0x80, 0x0c, 0xf0, - 0x49, 0xa2, 0x00, 0xf4, 0x46, 0xa2, 0x00, 0xf8, 0x47, 0xa2, 0x40, 0xf0, - 0x4d, 0xa2, 0x00, 0xf4, 0x4a, 0xa2, 0x00, 0xf8, 0x4b, 0xa2, 0x40, 0xf0, - 0x5c, 0xa2, 0x00, 0xf8, 0x5a, 0xa2, 0x40, 0xf0, 0x51, 0xa2, 0x00, 0xf4, - 0x4e, 0xa2, 0x00, 0xf8, 0x4f, 0xa2, 0x40, 0xf0, 0x78, 0xa2, 0x00, 0xf4, - 0x75, 0xa2, 0x00, 0xf8, 0x76, 0xa2, 0x40, 0xf0, 0x7c, 0xa2, 0x00, 0xf4, - 0x79, 0xa2, 0x00, 0xf8, 0x7a, 0xa2, 0x40, 0xe1, 0x72, 0xa1, 0x80, 0x4d, - 0xe5, 0x7a, 0xa1, 0x80, 0x40, 0xe9, 0x6a, 0xa1, 0x80, 0x1e, 0xaf, 0x10, - 0xb5, 0x01, 0xff, 0xef, 0x75, 0xa1, 0x80, 0x04, 0xf4, 0x7c, 0xa1, 0x40, - 0xf8, 0x74, 0xa1, 0x40, 0xf0, 0x78, 0xa1, 0x00, 0xf4, 0x76, 0xa1, 0x00, - 0xf8, 0x77, 0xa1, 0x40, 0xe5, 0x6e, 0xa1, 0x80, 0x0c, 0xf0, 0x6b, 0xa1, - 0x00, 0xf4, 0x68, 0xa1, 0x00, 0xf8, 0x69, 0xa1, 0x40, 0xf0, 0x6f, 0xa1, - 0x00, 0xf4, 0x6c, 0xa1, 0x00, 0xf8, 0x6d, 0xa1, 0x40, 0xf0, 0x7b, 0xa1, - 0x00, 0xf8, 0x79, 0xa1, 0x40, 0xf0, 0x73, 0xa1, 0x00, 0xf4, 0x70, 0xa1, - 0x00, 0xf8, 0x71, 0xa1, 0x40, 0xe1, 0x9a, 0xa0, 0x80, 0x6c, 0xe9, 0x93, - 0xa0, 0x80, 0x4e, 0xef, 0xa1, 0xa0, 0x80, 0x3d, 0xf5, 0xa5, 0xa0, 0x80, - 0x16, 0xf9, 0xaa, 0xa0, 0xc0, 0x00, 0xf0, 0xab, 0xa0, 0x00, 0xf2, 0xad, - 0xa0, 0x80, 0x04, 0xf8, 0xa9, 0xa0, 0x40, 0xf8, 0xac, 0xa0, 0x40, 0xef, - 0x9d, 0xa0, 0x80, 0x15, 0xf0, 0xa6, 0xa0, 0x00, 0xf2, 0xa8, 0xa0, 0x80, - 0x08, 0xf4, 0xa3, 0xa0, 0x00, 0xf8, 0xa4, 0xa0, 0x40, 0xf8, 0xa7, 0xa0, - 0x40, 0xf0, 0x9e, 0xa0, 0x00, 0xf8, 0x9c, 0xa0, 0x40, 0xf0, 0xa2, 0xa0, - 0x00, 0xf4, 0x9f, 0xa0, 0x00, 0xf8, 0xa0, 0xa0, 0x40, 0xe5, 0x96, 0xa0, - 0x80, 0x0c, 0xf0, 0x94, 0xa0, 0x00, 0xf4, 0x91, 0xa0, 0x00, 0xf8, 0x92, - 0xa0, 0x40, 0xf0, 0x97, 0xa0, 0x00, 0xf8, 0x95, 0xa0, 0x40, 0xf0, 0x9b, - 0xa0, 0x00, 0xf4, 0x98, 0xa0, 0x00, 0xf8, 0x99, 0xa0, 0x40, 0xe1, 0xa0, - 0xa1, 0x80, 0x79, 0xe5, 0xa9, 0xa1, 0x80, 0x6c, 0xe9, 0x99, 0xa1, 0x80, - 0x4e, 0xef, 0xa6, 0xa1, 0x80, 0x41, 0xf5, 0xad, 0xa1, 0x80, 0x1a, 0xf9, - 0xb3, 0xa1, 0xc0, 0x00, 0xf0, 0xb4, 0xa1, 0x00, 0xf2, 0xb6, 0xa1, 0x80, - 0x08, 0xf4, 0xb1, 0xa1, 0x00, 0xf8, 0xb2, 0xa1, 0x40, 0xf8, 0xb5, 0xa1, - 0x40, 0xef, 0xa3, 0xa1, 0x80, 0x15, 0xf0, 0xae, 0xa1, 0x00, 0xf2, 0xb0, - 0xa1, 0x80, 0x08, 0xf4, 0xab, 0xa1, 0x00, 0xf8, 0xac, 0xa1, 0x40, 0xf8, - 0xaf, 0xa1, 0x40, 0xf0, 0xa4, 0xa1, 0x00, 0xf8, 0xa2, 0xa1, 0x40, 0xf0, - 0xa7, 0xa1, 0x00, 0xf8, 0xa5, 0xa1, 0x40, 0xe5, 0x9c, 0xa1, 0x80, 0x0c, - 0xf0, 0x9a, 0xa1, 0x00, 0xf4, 0x97, 0xa1, 0x00, 0xf8, 0x98, 0xa1, 0x40, - 0xf0, 0x9d, 0xa1, 0x00, 0xf8, 0x9b, 0xa1, 0x40, 0xf0, 0xaa, 0xa1, 0x00, - 0xf8, 0xa8, 0xa1, 0x40, 0xf0, 0xa1, 0xa1, 0x00, 0xf4, 0x9e, 0xa1, 0x00, - 0xf8, 0x9f, 0xa1, 0x40, 0xe5, 0x70, 0xa2, 0x80, 0x04, 0xf4, 0x6e, 0xa2, - 0x40, 0xf8, 0x6f, 0xa2, 0x40, 0xf0, 0x7f, 0xa2, 0x00, 0xf8, 0x7d, 0xa2, - 0x40, 0xf0, 0x74, 0xa2, 0x00, 0xf4, 0x71, 0xa2, 0x00, 0xf8, 0x72, 0xa2, - 0x40, 0xe1, 0xe4, 0xa1, 0x80, 0xea, 0x01, 0xe5, 0xf0, 0xa1, 0x80, 0xd8, - 0x01, 0xa7, 0x5e, 0xe9, 0xdc, 0xa1, 0x80, 0x3c, 0xef, 0xec, 0xa1, 0x80, - 0x2b, 0xf5, 0xf4, 0xa1, 0xc0, 0x00, 0xef, 0xe8, 0xa1, 0x80, 0x15, 0xf0, - 0xf5, 0xa1, 0x00, 0xf2, 0xf7, 0xa1, 0x80, 0x08, 0xf4, 0xf2, 0xa1, 0x00, - 0xf8, 0xf3, 0xa1, 0x40, 0xf8, 0xf6, 0xa1, 0x40, 0xf0, 0xe9, 0xa1, 0x00, - 0xf4, 0xe6, 0xa1, 0x00, 0xf8, 0xe7, 0xa1, 0x40, 0xf0, 0xed, 0xa1, 0x00, - 0xf4, 0xea, 0xa1, 0x00, 0xf8, 0xeb, 0xa1, 0x40, 0xe5, 0xe0, 0xa1, 0x80, - 0x0c, 0xf0, 0xdd, 0xa1, 0x00, 0xf4, 0xda, 0xa1, 0x00, 0xf8, 0xdb, 0xa1, - 0x40, 0xf0, 0xe1, 0xa1, 0x00, 0xf4, 0xde, 0xa1, 0x00, 0xf8, 0xdf, 0xa1, - 0x40, 0xe1, 0x1c, 0xa2, 0x80, 0x67, 0xe5, 0x28, 0xa2, 0x80, 0x56, 0xe9, - 0x16, 0xa2, 0x80, 0x3c, 0xef, 0x24, 0xa2, 0x80, 0x2b, 0xf5, 0x2c, 0xa2, - 0xc0, 0x00, 0xef, 0x20, 0xa2, 0x80, 0x15, 0xf0, 0x2d, 0xa2, 0x00, 0xf2, - 0x2f, 0xa2, 0x80, 0x08, 0xf4, 0x2a, 0xa2, 0x00, 0xf8, 0x2b, 0xa2, 0x40, - 0xf8, 0x2e, 0xa2, 0x40, 0xf0, 0x21, 0xa2, 0x00, 0xf4, 0x1e, 0xa2, 0x00, - 0xf8, 0x1f, 0xa2, 0x40, 0xf0, 0x25, 0xa2, 0x00, 0xf4, 0x22, 0xa2, 0x00, - 0xf8, 0x23, 0xa2, 0x40, 0xe5, 0x18, 0xa2, 0x80, 0x08, 0xf4, 0x14, 0xa2, - 0x00, 0xf8, 0x15, 0xa2, 0x40, 0xf0, 0x19, 0xa2, 0x00, 0xf8, 0x17, 0xa2, - 0x40, 0xf0, 0x29, 0xa2, 0x00, 0xf4, 0x26, 0xa2, 0x00, 0xf8, 0x27, 0xa2, - 0x40, 0xf0, 0x1d, 0xa2, 0x00, 0xf4, 0x1a, 0xa2, 0x00, 0xf8, 0x1b, 0xa2, - 0x40, 0xf0, 0xf1, 0xa1, 0x00, 0xf4, 0xee, 0xa1, 0x00, 0xf8, 0xef, 0xa1, - 0x40, 0xf0, 0xe5, 0xa1, 0x00, 0xf4, 0xe2, 0xa1, 0x00, 0xf8, 0xe3, 0xa1, - 0x40, 0xe1, 0xd3, 0xa0, 0x80, 0x49, 0xe9, 0xcf, 0xa0, 0x80, 0x38, 0xef, - 0xd6, 0xa0, 0x80, 0x2b, 0xf5, 0xda, 0xa0, 0x80, 0x11, 0xf9, 0xe0, 0xa0, - 0xc0, 0x00, 0xf0, 0xe1, 0xa0, 0x00, 0xf4, 0xde, 0xa0, 0x00, 0xf8, 0xdf, - 0xa0, 0x40, 0xf0, 0xdb, 0xa0, 0x00, 0xf2, 0xdd, 0xa0, 0x80, 0x08, 0xf4, - 0xd8, 0xa0, 0x00, 0xf8, 0xd9, 0xa0, 0x40, 0xf8, 0xdc, 0xa0, 0x40, 0xf0, - 0xd7, 0xa0, 0x00, 0xf8, 0xd5, 0xa0, 0x40, 0xf0, 0xd0, 0xa0, 0x00, 0xf4, - 0xcd, 0xa0, 0x00, 0xf8, 0xce, 0xa0, 0x40, 0xf0, 0xd4, 0xa0, 0x00, 0xf4, - 0xd1, 0xa0, 0x00, 0xf8, 0xd2, 0xa0, 0x40, 0xf8, 0x13, 0xa0, 0x40, 0xe1, - 0x09, 0xa1, 0x80, 0xd5, 0x01, 0xa4, 0x5f, 0xe5, 0x12, 0xa1, 0x80, 0x52, - 0xe9, 0x02, 0xa1, 0x80, 0x34, 0xef, 0x0f, 0xa1, 0x80, 0x23, 0xf5, 0x16, - 0xa1, 0xc0, 0x00, 0xef, 0x0c, 0xa1, 0x80, 0x15, 0xf0, 0x17, 0xa1, 0x00, - 0xf2, 0x19, 0xa1, 0x80, 0x08, 0xf4, 0x14, 0xa1, 0x00, 0xf8, 0x15, 0xa1, - 0x40, 0xf8, 0x18, 0xa1, 0x40, 0xf8, 0x0b, 0xa1, 0x40, 0xf0, 0x10, 0xa1, - 0x00, 0xf4, 0x0d, 0xa1, 0x00, 0xf8, 0x0e, 0xa1, 0x40, 0xe5, 0x05, 0xa1, - 0x80, 0x0c, 0xf0, 0x03, 0xa1, 0x00, 0xf4, 0x00, 0xa1, 0x00, 0xf8, 0x01, - 0xa1, 0x40, 0xf0, 0x06, 0xa1, 0x00, 0xf8, 0x04, 0xa1, 0x40, 0xf0, 0x13, - 0xa1, 0x00, 0xf8, 0x11, 0xa1, 0x40, 0xe1, 0x3f, 0xa1, 0x80, 0x63, 0xe5, - 0x49, 0xa1, 0x80, 0x56, 0xe9, 0x38, 0xa1, 0x80, 0x38, 0xef, 0x46, 0xa1, - 0x80, 0x27, 0xf5, 0x4d, 0xa1, 0xc0, 0x00, 0xef, 0x42, 0xa1, 0x80, 0x15, - 0xf0, 0x4e, 0xa1, 0x00, 0xf2, 0x50, 0xa1, 0x80, 0x08, 0xf4, 0x4b, 0xa1, - 0x00, 0xf8, 0x4c, 0xa1, 0x40, 0xf8, 0x4f, 0xa1, 0x40, 0xf0, 0x43, 0xa1, - 0x00, 0xf8, 0x41, 0xa1, 0x40, 0xf0, 0x47, 0xa1, 0x00, 0xf4, 0x44, 0xa1, - 0x00, 0xf8, 0x45, 0xa1, 0x40, 0xe5, 0x3b, 0xa1, 0x80, 0x0c, 0xf0, 0x39, - 0xa1, 0x00, 0xf4, 0x36, 0xa1, 0x00, 0xf8, 0x37, 0xa1, 0x40, 0xf0, 0x3c, - 0xa1, 0x00, 0xf8, 0x3a, 0xa1, 0x40, 0xf0, 0x4a, 0xa1, 0x00, 0xf8, 0x48, - 0xa1, 0x40, 0xf0, 0x40, 0xa1, 0x00, 0xf4, 0x3d, 0xa1, 0x00, 0xf8, 0x3e, - 0xa1, 0x40, 0xf0, 0x0a, 0xa1, 0x00, 0xf4, 0x07, 0xa1, 0x00, 0xf8, 0x08, - 0xa1, 0x40, 0xe1, 0xb8, 0xa2, 0x80, 0xf8, 0x01, 0xe5, 0xc2, 0xa2, 0x80, - 0xea, 0x01, 0xa8, 0x74, 0xe9, 0xb0, 0xa2, 0x80, 0x52, 0xef, 0xbf, 0xa2, - 0x80, 0x41, 0xf5, 0xc6, 0xa2, 0x80, 0x1a, 0xf9, 0xcc, 0xa2, 0xc0, 0x00, - 0xf0, 0xcd, 0xa2, 0x00, 0xf2, 0xcf, 0xa2, 0x80, 0x08, 0xf4, 0xca, 0xa2, - 0x00, 0xf8, 0xcb, 0xa2, 0x40, 0xf8, 0xce, 0xa2, 0x40, 0xef, 0xbb, 0xa2, - 0x80, 0x15, 0xf0, 0xc7, 0xa2, 0x00, 0xf2, 0xc9, 0xa2, 0x80, 0x08, 0xf4, - 0xc4, 0xa2, 0x00, 0xf8, 0xc5, 0xa2, 0x40, 0xf8, 0xc8, 0xa2, 0x40, 0xf0, - 0xbc, 0xa2, 0x00, 0xf8, 0xba, 0xa2, 0x40, 0xf0, 0xc0, 0xa2, 0x00, 0xf4, - 0xbd, 0xa2, 0x00, 0xf8, 0xbe, 0xa2, 0x40, 0xe5, 0xb4, 0xa2, 0x80, 0x0c, - 0xf0, 0xb1, 0xa2, 0x00, 0xf4, 0xae, 0xa2, 0x00, 0xf8, 0xaf, 0xa2, 0x40, - 0xf0, 0xb5, 0xa2, 0x00, 0xf4, 0xb2, 0xa2, 0x00, 0xf8, 0xb3, 0xa2, 0x40, - 0xe1, 0x63, 0xa3, 0x80, 0x63, 0xe5, 0x6f, 0xa3, 0x80, 0x52, 0xef, 0x6b, - 0xa3, 0x80, 0x41, 0xf5, 0x72, 0xa3, 0x80, 0x1a, 0xf9, 0x78, 0xa3, 0xc0, - 0x00, 0xf0, 0x79, 0xa3, 0x00, 0xf2, 0x7b, 0xa3, 0x80, 0x08, 0xf4, 0x76, - 0xa3, 0x00, 0xf8, 0x77, 0xa3, 0x40, 0xf8, 0x7a, 0xa3, 0x40, 0xef, 0x67, - 0xa3, 0x80, 0x11, 0xf0, 0x73, 0xa3, 0x00, 0xf2, 0x75, 0xa3, 0x80, 0x04, - 0xf8, 0x71, 0xa3, 0x40, 0xf8, 0x74, 0xa3, 0x40, 0xf0, 0x68, 0xa3, 0x00, - 0xf4, 0x65, 0xa3, 0x00, 0xf8, 0x66, 0xa3, 0x40, 0xf0, 0x6c, 0xa3, 0x00, - 0xf4, 0x69, 0xa3, 0x00, 0xf8, 0x6a, 0xa3, 0x40, 0xf0, 0x70, 0xa3, 0x00, - 0xf4, 0x6d, 0xa3, 0x00, 0xf8, 0x6e, 0xa3, 0x40, 0xf0, 0x64, 0xa3, 0x00, - 0xf4, 0x61, 0xa3, 0x00, 0xf8, 0x62, 0xa3, 0x40, 0xf0, 0xc3, 0xa2, 0x00, - 0xf8, 0xc1, 0xa2, 0x40, 0xf0, 0xb9, 0xa2, 0x00, 0xf4, 0xb6, 0xa2, 0x00, - 0xf8, 0xb7, 0xa2, 0x40, 0xe1, 0x20, 0xa0, 0x80, 0x8d, 0x02, 0xa2, 0x81, - 0x01, 0xe5, 0x2a, 0xa0, 0x80, 0x74, 0xe9, 0x18, 0xa0, 0x80, 0x52, 0xef, - 0x27, 0xa0, 0x80, 0x41, 0xf5, 0x2e, 0xa0, 0x80, 0x1a, 0xf9, 0x34, 0xa0, - 0xc0, 0x00, 0xf0, 0x35, 0xa0, 0x00, 0xf2, 0x37, 0xa0, 0x80, 0x08, 0xf4, - 0x32, 0xa0, 0x00, 0xf8, 0x33, 0xa0, 0x40, 0xf8, 0x36, 0xa0, 0x40, 0xef, - 0x23, 0xa0, 0x80, 0x15, 0xf0, 0x2f, 0xa0, 0x00, 0xf2, 0x31, 0xa0, 0x80, - 0x08, 0xf4, 0x2c, 0xa0, 0x00, 0xf8, 0x2d, 0xa0, 0x40, 0xf8, 0x30, 0xa0, - 0x40, 0xf0, 0x24, 0xa0, 0x00, 0xf8, 0x22, 0xa0, 0x40, 0xf0, 0x28, 0xa0, - 0x00, 0xf4, 0x25, 0xa0, 0x00, 0xf8, 0x26, 0xa0, 0x40, 0xe5, 0x1c, 0xa0, - 0x80, 0x0c, 0xf0, 0x19, 0xa0, 0x00, 0xf4, 0x16, 0xa0, 0x00, 0xf8, 0x17, - 0xa0, 0x40, 0xf0, 0x1d, 0xa0, 0x00, 0xf4, 0x1a, 0xa0, 0x00, 0xf8, 0x1b, - 0xa0, 0x40, 0xf0, 0x2b, 0xa0, 0x00, 0xf8, 0x29, 0xa0, 0x40, 0xe1, 0x60, - 0xa0, 0x80, 0x78, 0xe5, 0x6a, 0xa0, 0x80, 0x6b, 0xe9, 0x58, 0xa0, 0x80, - 0x49, 0xef, 0x67, 0xa0, 0x80, 0x38, 0xf5, 0x6e, 0xa0, 0x80, 0x11, 0xf9, - 0x74, 0xa0, 0xc0, 0x00, 0xf0, 0x75, 0xa0, 0x00, 0xf4, 0x72, 0xa0, 0x00, - 0xf8, 0x73, 0xa0, 0x40, 0xef, 0x63, 0xa0, 0x80, 0x15, 0xf0, 0x6f, 0xa0, - 0x00, 0xf2, 0x71, 0xa0, 0x80, 0x08, 0xf4, 0x6c, 0xa0, 0x00, 0xf8, 0x6d, - 0xa0, 0x40, 0xf8, 0x70, 0xa0, 0x40, 0xf0, 0x64, 0xa0, 0x00, 0xf8, 0x62, - 0xa0, 0x40, 0xf0, 0x68, 0xa0, 0x00, 0xf4, 0x65, 0xa0, 0x00, 0xf8, 0x66, - 0xa0, 0x40, 0xe5, 0x5c, 0xa0, 0x80, 0x0c, 0xf0, 0x59, 0xa0, 0x00, 0xf4, - 0x56, 0xa0, 0x00, 0xf8, 0x57, 0xa0, 0x40, 0xf0, 0x5d, 0xa0, 0x00, 0xf4, - 0x5a, 0xa0, 0x00, 0xf8, 0x5b, 0xa0, 0x40, 0xf0, 0x6b, 0xa0, 0x00, 0xf8, - 0x69, 0xa0, 0x40, 0xf0, 0x61, 0xa0, 0x00, 0xf4, 0x5e, 0xa0, 0x00, 0xf8, - 0x5f, 0xa0, 0x40, 0xf0, 0x21, 0xa0, 0x00, 0xf4, 0x1e, 0xa0, 0x00, 0xf8, - 0x1f, 0xa0, 0x40, 0xf0, 0x0b, 0xa0, 0x00, 0xf4, 0x08, 0xa0, 0x00, 0xf8, - 0x09, 0xa0, 0x40, 0xa2, 0xd3, 0x02, 0xa3, 0xb1, 0x02, 0xa4, 0xa4, 0x02, - 0xa7, 0x83, 0x02, 0xa8, 0xe5, 0x01, 0xaa, 0xcc, 0x01, 0xab, 0xbf, 0x01, - 0xac, 0xad, 0x01, 0xad, 0xa0, 0x01, 0xae, 0x83, 0x01, 0x42, 0x1f, 0x00, - 0xa9, 0xa4, 0x00, 0xb0, 0x6f, 0x43, 0x47, 0xf1, 0x90, 0xa4, 0x00, 0xb3, - 0x49, 0xb4, 0x3d, 0xb6, 0x2f, 0x42, 0x15, 0x02, 0xb8, 0xa4, 0x00, 0xb9, - 0x1d, 0xba, 0x01, 0xff, 0xe1, 0xb2, 0xa4, 0x00, 0x42, 0xf0, 0x04, 0xab, - 0xa4, 0x00, 0xb5, 0x06, 0x44, 0x12, 0xf0, 0xc4, 0xa4, 0x40, 0xf0, 0xa2, - 0xa4, 0x00, 0xf2, 0xc1, 0xa4, 0x40, 0x42, 0x52, 0x00, 0xae, 0xa4, 0x00, - 0xef, 0x9d, 0xa4, 0x40, 0x42, 0x9c, 0x0a, 0xb1, 0xa4, 0x00, 0x42, 0x42, - 0x00, 0xaf, 0xa4, 0x40, 0x42, 0x8a, 0x00, 0xa0, 0xa4, 0x00, 0xf5, 0xa8, - 0xa4, 0x40, 0xa8, 0x06, 0x42, 0x2f, 0x03, 0x95, 0xa4, 0x40, 0x42, 0x8a, - 0x00, 0xc0, 0xa4, 0x00, 0x42, 0x1f, 0x00, 0xc2, 0xa4, 0x00, 0x42, 0x42, - 0x00, 0xba, 0xa4, 0x00, 0xf9, 0xb0, 0xa4, 0x40, 0x42, 0xfe, 0x07, 0x9e, - 0xa4, 0x00, 0x42, 0xc9, 0x67, 0xac, 0xa4, 0x40, 0x43, 0x75, 0xb9, 0xc5, - 0xa4, 0x00, 0xb9, 0x06, 0x43, 0x98, 0xf1, 0xb4, 0xa4, 0x40, 0x42, 0x8f, - 0x04, 0x93, 0xa4, 0x00, 0x42, 0x1f, 0x00, 0xa7, 0xa4, 0x40, 0xe9, 0x98, - 0xa4, 0x00, 0x42, 0x1f, 0x00, 0x9c, 0xa4, 0x40, 0xe9, 0x91, 0xa4, 0x80, - 0x06, 0x42, 0x7d, 0x21, 0x9a, 0xa4, 0x40, 0xe5, 0xbb, 0xa4, 0x40, 0xe5, - 0xc6, 0xa4, 0x00, 0x42, 0x52, 0x00, 0x92, 0xa4, 0x40, 0xaa, 0x04, 0xef, - 0xb3, 0xa4, 0x40, 0x42, 0xc9, 0x02, 0xb7, 0xa4, 0x00, 0x42, 0xfe, 0x07, - 0xaa, 0xa4, 0x00, 0xf9, 0xb5, 0xa4, 0x40, 0x42, 0x98, 0x07, 0xad, 0xa4, - 0x00, 0xb8, 0x01, 0xff, 0x42, 0x52, 0x00, 0x99, 0xa4, 0x00, 0x42, 0x1f, - 0x00, 0xbf, 0xa4, 0x00, 0x42, 0xef, 0x04, 0x9f, 0xa4, 0x40, 0xe1, 0xa1, - 0xa4, 0x00, 0x42, 0x9c, 0x0a, 0x97, 0xa4, 0x00, 0xa7, 0x06, 0x42, 0xf0, - 0x04, 0xb6, 0xa4, 0x40, 0x42, 0x1f, 0x00, 0x96, 0xa4, 0x00, 0x42, 0xef, - 0x04, 0xa6, 0xa4, 0x40, 0x43, 0x75, 0x72, 0xa4, 0xa4, 0x00, 0xf5, 0xb9, - 0xa4, 0x40, 0x42, 0xb0, 0x01, 0xc3, 0xa4, 0x00, 0x42, 0x8f, 0x04, 0xbe, - 0xa4, 0x00, 0x43, 0x62, 0xf1, 0xbd, 0xa4, 0x00, 0xf9, 0xbc, 0xa4, 0xc0, - 0x00, 0xf0, 0x94, 0xa4, 0x00, 0xf4, 0xa3, 0xa4, 0x40, 0x43, 0x1b, 0x0d, - 0x9b, 0xa4, 0x00, 0x42, 0x42, 0x00, 0xa5, 0xa4, 0x40, 0x4a, 0xdb, 0xaa, - 0x9b, 0xf4, 0x01, 0x46, 0x98, 0x04, 0xa5, 0x00, 0x00, 0x05, 0x76, 0xe9, - 0x01, 0xff, 0x0a, 0xd6, 0x57, 0xa0, 0x02, 0x50, 0x1a, 0x62, 0xad, 0x0e, - 0x01, 0x07, 0xc1, 0x05, 0x01, 0xff, 0x42, 0x8c, 0x05, 0x81, 0x0e, 0x01, - 0xa3, 0xf8, 0x01, 0x02, 0xa1, 0x10, 0xeb, 0x01, 0xa5, 0xd4, 0x01, 0x42, - 0xe1, 0x07, 0x99, 0x0e, 0x01, 0x43, 0x9e, 0xb6, 0x9f, 0x0e, 0x01, 0xa8, - 0xb9, 0x01, 0x42, 0xbd, 0x26, 0x90, 0x0e, 0x01, 0xab, 0xa4, 0x01, 0x43, - 0xb0, 0x00, 0xa0, 0x0e, 0x81, 0x96, 0x01, 0x43, 0xfb, 0x8e, 0xa1, 0x0e, - 0x01, 0x43, 0x54, 0x22, 0xa2, 0x0e, 0x01, 0x42, 0xd1, 0x00, 0xa5, 0x0e, - 0x01, 0xb0, 0x78, 0x43, 0xf4, 0x13, 0x9c, 0x0e, 0x01, 0xb2, 0x66, 0xb3, - 0x4e, 0xb4, 0x42, 0x42, 0x1d, 0x04, 0xa3, 0x0e, 0x01, 0x42, 0xa6, 0x0a, - 0x9a, 0x0e, 0x81, 0x2f, 0x43, 0xc0, 0x88, 0xa4, 0x0e, 0x01, 0xb8, 0x1d, - 0x43, 0x8c, 0xf1, 0xa8, 0x0e, 0x81, 0x10, 0xba, 0x01, 0xff, 0xe1, 0x8f, - 0x0e, 0x81, 0x04, 0xe5, 0x96, 0x0e, 0x41, 0xec, 0x8c, 0x0e, 0x41, 0x56, - 0x91, 0x31, 0xb1, 0x0e, 0x41, 0xe1, 0x8a, 0x0e, 0x01, 0x44, 0xf2, 0xec, - 0x98, 0x0e, 0x41, 0x4f, 0x8a, 0x67, 0x9b, 0x0e, 0x41, 0xe1, 0x95, 0x0e, - 0x01, 0x42, 0xb0, 0x01, 0x84, 0x0e, 0x41, 0x42, 0xe8, 0x01, 0x93, 0x0e, - 0x01, 0xe5, 0x85, 0x0e, 0x01, 0x43, 0x0e, 0x16, 0x92, 0x0e, 0x01, 0x42, - 0x9e, 0x01, 0x91, 0x0e, 0x41, 0xe1, 0x8d, 0x0e, 0x01, 0x42, 0x22, 0x00, - 0x8e, 0x0e, 0x41, 0xe5, 0x82, 0x0e, 0x01, 0x42, 0xb0, 0x01, 0x83, 0x0e, - 0x41, 0x4f, 0xa5, 0x3a, 0xb0, 0x0e, 0x41, 0x42, 0xf5, 0x13, 0x9d, 0x0e, - 0x01, 0x43, 0xdb, 0x4e, 0x9e, 0x0e, 0x41, 0x42, 0x9e, 0x10, 0xa7, 0x0e, - 0x01, 0x42, 0x22, 0x00, 0x89, 0x0e, 0x41, 0x43, 0x02, 0x69, 0x80, 0x0e, - 0x01, 0xf4, 0xa9, 0x0e, 0x01, 0xf7, 0xa6, 0x0e, 0x01, 0x42, 0x61, 0x1c, - 0x97, 0x0e, 0x41, 0xe4, 0x94, 0x0e, 0x01, 0xec, 0x8b, 0x0e, 0x41, 0xa8, - 0x06, 0x42, 0x29, 0x02, 0x86, 0x0e, 0x41, 0x43, 0x4c, 0x38, 0x88, 0x0e, - 0x01, 0x42, 0x29, 0x02, 0x87, 0x0e, 0x41, 0x4a, 0xd3, 0xa8, 0xab, 0x0e, - 0x01, 0x4a, 0x49, 0xab, 0xac, 0x0e, 0x41, 0x53, 0x34, 0x46, 0x27, 0x23, - 0x00, 0x44, 0x9a, 0xe9, 0x7b, 0xfa, 0x01, 0x07, 0xe4, 0xce, 0x06, 0x42, - 0x0c, 0x00, 0xbb, 0x22, 0x40, 0x06, 0xe1, 0x02, 0x31, 0x04, 0xaf, 0x05, - 0x01, 0xff, 0xa3, 0x1e, 0x48, 0x02, 0xc3, 0x62, 0xfa, 0x01, 0x47, 0x66, - 0xce, 0x60, 0xfa, 0x01, 0x45, 0xd0, 0xb0, 0x63, 0xfa, 0x01, 0x48, 0x82, - 0xc5, 0x61, 0xfa, 0x01, 0x47, 0x1a, 0xd3, 0x66, 0xfa, 0x41, 0x45, 0x42, - 0xe1, 0x65, 0xfa, 0x01, 0x46, 0x7c, 0x56, 0x64, 0xfa, 0x41, 0xa3, 0x1e, - 0x48, 0x02, 0xc3, 0x69, 0xfa, 0x01, 0x47, 0x66, 0xce, 0x67, 0xfa, 0x01, - 0x45, 0xd0, 0xb0, 0x6a, 0xfa, 0x01, 0x48, 0x82, 0xc5, 0x68, 0xfa, 0x01, - 0x47, 0x1a, 0xd3, 0x6d, 0xfa, 0x41, 0x45, 0x42, 0xe1, 0x6c, 0xfa, 0x01, - 0x46, 0x7c, 0x56, 0x6b, 0xfa, 0x41, 0xa1, 0x94, 0x0e, 0xa5, 0xdf, 0x0d, - 0xa8, 0xf6, 0x03, 0xa9, 0x8c, 0x01, 0xaf, 0x23, 0xb2, 0x01, 0xff, 0x4d, - 0x0d, 0x7f, 0x81, 0xf3, 0x01, 0xa5, 0x06, 0x4a, 0x02, 0xa0, 0x0d, 0x27, - 0x40, 0x4b, 0x48, 0x97, 0x40, 0x22, 0x00, 0x43, 0x0c, 0x25, 0x27, 0xf5, - 0x01, 0x46, 0x12, 0xdd, 0x3c, 0xf9, 0x41, 0x47, 0x11, 0xd0, 0x3a, 0xf4, - 0x01, 0xad, 0x2f, 0x46, 0x98, 0x04, 0xa9, 0x20, 0x00, 0x42, 0x2a, 0x0c, - 0xb5, 0xfa, 0x01, 0xb2, 0x01, 0xff, 0x02, 0x06, 0x00, 0x10, 0x46, 0xae, - 0xda, 0xfa, 0xf5, 0x01, 0xed, 0xb1, 0xfa, 0x01, 0x49, 0x49, 0xbc, 0x1f, - 0xf6, 0x41, 0x46, 0x24, 0x60, 0x60, 0x20, 0x00, 0x54, 0xa7, 0x44, 0x31, - 0x2e, 0x40, 0x42, 0x1a, 0x00, 0x69, 0xf4, 0x81, 0x06, 0x4a, 0xbb, 0xa7, - 0xba, 0xf6, 0x41, 0x50, 0x1a, 0x5f, 0x6f, 0xf4, 0x01, 0x02, 0x31, 0x01, - 0x01, 0xff, 0x45, 0xbf, 0xe1, 0x62, 0xf4, 0x01, 0x47, 0x32, 0xcd, 0x5a, - 0xf4, 0x01, 0x43, 0x0c, 0x21, 0x52, 0xf4, 0x01, 0x46, 0xe8, 0xb9, 0x61, - 0xf4, 0x41, 0x0a, 0x50, 0x1b, 0x45, 0x52, 0xa8, 0x50, 0x3e, 0x2e, 0x00, - 0x4b, 0xde, 0x9c, 0x40, 0xf9, 0x01, 0xae, 0x11, 0x02, 0x88, 0x00, 0x01, - 0xff, 0x4a, 0xd5, 0xa6, 0xae, 0xf5, 0x01, 0x44, 0xec, 0x00, 0xdc, 0xf6, - 0x41, 0xa4, 0x10, 0x47, 0xbe, 0xcd, 0x77, 0xf3, 0x01, 0xe7, 0xbd, 0xfa, - 0x01, 0x49, 0x24, 0xae, 0x09, 0xf6, 0x41, 0x80, 0x06, 0x42, 0xd1, 0x00, - 0x9f, 0xfa, 0x41, 0x4c, 0x09, 0x8b, 0x2c, 0xf3, 0x01, 0x45, 0x1e, 0xe2, - 0x90, 0xf3, 0x41, 0x0a, 0xa5, 0x01, 0xfb, 0x01, 0x0a, 0xea, 0x01, 0xd8, - 0x01, 0x06, 0xb4, 0x01, 0x8e, 0x01, 0x0b, 0xb3, 0x02, 0x6c, 0x06, 0xff, - 0x1f, 0x23, 0x08, 0x50, 0x02, 0x01, 0xff, 0x4a, 0x07, 0x3e, 0x69, 0xf8, - 0x01, 0x50, 0x01, 0x3e, 0x79, 0xf8, 0x01, 0x50, 0x2a, 0x63, 0x61, 0xf8, - 0x01, 0x51, 0xb1, 0x5a, 0x71, 0xf8, 0x01, 0x55, 0xfc, 0x3d, 0x81, 0xf8, - 0x41, 0x05, 0x25, 0x23, 0x23, 0x05, 0x37, 0x1a, 0x01, 0xff, 0x4a, 0x07, - 0x3e, 0x6f, 0xf8, 0x01, 0x50, 0x01, 0x3e, 0x7f, 0xf8, 0x01, 0x50, 0x2a, - 0x63, 0x67, 0xf8, 0x01, 0x51, 0xb1, 0x5a, 0x77, 0xf8, 0x01, 0x55, 0xfc, - 0x3d, 0x87, 0xf8, 0x41, 0x4a, 0x07, 0x3e, 0x6e, 0xf8, 0x01, 0x50, 0x01, - 0x3e, 0x7e, 0xf8, 0x01, 0x50, 0x2a, 0x63, 0x66, 0xf8, 0x01, 0x51, 0xb1, - 0x5a, 0x76, 0xf8, 0x01, 0x55, 0xfc, 0x3d, 0x86, 0xf8, 0x41, 0x4a, 0x07, - 0x3e, 0x6a, 0xf8, 0x01, 0x50, 0x01, 0x3e, 0x7a, 0xf8, 0x01, 0x50, 0x2a, - 0x63, 0x62, 0xf8, 0x01, 0x51, 0xb1, 0x5a, 0x72, 0xf8, 0x01, 0x55, 0xfc, - 0x3d, 0x82, 0xf8, 0x41, 0x05, 0x25, 0x23, 0x23, 0x05, 0x37, 0x1a, 0x01, - 0xff, 0x4a, 0x07, 0x3e, 0x6c, 0xf8, 0x01, 0x50, 0x01, 0x3e, 0x7c, 0xf8, - 0x01, 0x50, 0x2a, 0x63, 0x64, 0xf8, 0x01, 0x51, 0xb1, 0x5a, 0x74, 0xf8, - 0x01, 0x55, 0xfc, 0x3d, 0x84, 0xf8, 0x41, 0x4a, 0x07, 0x3e, 0x6d, 0xf8, - 0x01, 0x50, 0x01, 0x3e, 0x7d, 0xf8, 0x01, 0x50, 0x2a, 0x63, 0x65, 0xf8, - 0x01, 0x51, 0xb1, 0x5a, 0x75, 0xf8, 0x01, 0x55, 0xfc, 0x3d, 0x85, 0xf8, - 0x41, 0x4a, 0x07, 0x3e, 0x68, 0xf8, 0x01, 0x50, 0x01, 0x3e, 0x78, 0xf8, - 0x01, 0x50, 0x2a, 0x63, 0x60, 0xf8, 0x01, 0x51, 0xb1, 0x5a, 0x70, 0xf8, - 0x01, 0x55, 0xfc, 0x3d, 0x80, 0xf8, 0x41, 0x4a, 0x07, 0x3e, 0x6b, 0xf8, - 0x01, 0x50, 0x01, 0x3e, 0x7b, 0xf8, 0x01, 0x50, 0x2a, 0x63, 0x63, 0xf8, - 0x01, 0x51, 0xb1, 0x5a, 0x73, 0xf8, 0x01, 0x55, 0xfc, 0x3d, 0x83, 0xf8, - 0x41, 0x43, 0x67, 0x00, 0x0b, 0xf4, 0x01, 0x43, 0xde, 0x12, 0xde, 0xf6, - 0x81, 0xcc, 0x09, 0x03, 0xaf, 0x02, 0x01, 0xff, 0x80, 0x06, 0x5b, 0x9f, - 0x19, 0xb3, 0x27, 0x40, 0x12, 0xd4, 0x4e, 0xae, 0x09, 0x46, 0x2a, 0x21, - 0xe6, 0x25, 0x00, 0xa3, 0xb1, 0x06, 0xa4, 0xc0, 0x05, 0x59, 0x91, 0x12, - 0x55, 0x27, 0x00, 0xa6, 0x83, 0x05, 0xa8, 0xc3, 0x04, 0xac, 0xe5, 0x03, - 0xad, 0xb7, 0x03, 0x43, 0x1a, 0x9b, 0x11, 0x27, 0x00, 0xb0, 0x97, 0x03, - 0x56, 0xb1, 0x35, 0x54, 0x27, 0x00, 0xb2, 0xd4, 0x02, 0xb3, 0x7c, 0xb4, - 0x5a, 0x02, 0x50, 0x02, 0x28, 0x03, 0x32, 0x00, 0x01, 0xff, 0x06, 0x35, - 0x00, 0x06, 0x4e, 0x35, 0x0a, 0x1e, 0x2b, 0x40, 0x43, 0x16, 0x00, 0xfe, - 0x2a, 0x00, 0x47, 0x63, 0x65, 0x2f, 0x2b, 0x00, 0x49, 0x3a, 0x46, 0xaf, - 0x25, 0xc0, 0x00, 0x54, 0xf3, 0x3e, 0x06, 0xce, 0x41, 0x0a, 0x9b, 0x01, - 0x1e, 0x0a, 0x3d, 0x0b, 0x01, 0xff, 0x47, 0x01, 0x4d, 0xca, 0xfb, 0x01, - 0x4e, 0xd7, 0x0b, 0xb5, 0x25, 0x00, 0x48, 0x01, 0x02, 0xb3, 0x25, 0xc0, - 0x00, 0x49, 0xa5, 0x3a, 0xec, 0x25, 0x40, 0x4e, 0x3f, 0x26, 0x46, 0xf4, - 0x01, 0x45, 0x40, 0x13, 0x1d, 0x26, 0x40, 0x48, 0x47, 0x3c, 0x0f, 0x26, - 0x00, 0x52, 0x0c, 0x53, 0x7e, 0xf5, 0x01, 0xb2, 0x06, 0x57, 0x21, 0x31, - 0xd7, 0x26, 0x40, 0x47, 0x2f, 0xcc, 0xe2, 0x23, 0x00, 0x66, 0xfa, 0x06, - 0xc1, 0x27, 0x40, 0x47, 0x62, 0x3d, 0x04, 0x27, 0x00, 0x49, 0x4f, 0xb6, - 0x46, 0xfe, 0x00, 0x4a, 0x1b, 0x5e, 0x16, 0x26, 0x00, 0xad, 0xa2, 0x01, - 0x49, 0x7a, 0xbb, 0x64, 0x26, 0x00, 0x45, 0xac, 0x05, 0xa1, 0x25, 0x80, - 0x2e, 0x43, 0xe3, 0x12, 0x06, 0x26, 0x00, 0x42, 0xf3, 0x0a, 0x23, 0xf3, - 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4c, 0xe5, 0x8a, 0x25, 0xf3, 0x81, 0x11, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x44, 0xca, 0x64, 0x3c, 0x26, 0x00, 0x4b, - 0x90, 0xa0, 0x24, 0xf3, 0x41, 0x4a, 0x4b, 0xa4, 0x26, 0xf3, 0x41, 0x80, - 0x01, 0xff, 0x46, 0x45, 0x8b, 0x33, 0xf5, 0x01, 0x11, 0x02, 0x0a, 0x48, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x54, 0xf7, 0x3f, 0x85, 0x23, 0x00, 0xac, - 0x24, 0xb2, 0x16, 0x06, 0x6d, 0x02, 0x06, 0x57, 0xdc, 0x30, 0xeb, 0x25, - 0x40, 0x4d, 0x25, 0x0d, 0xf0, 0x25, 0x00, 0x4e, 0x43, 0x44, 0xf3, 0x25, - 0x40, 0x4e, 0x18, 0x71, 0xe5, 0x27, 0x00, 0x4e, 0xb4, 0x18, 0xa2, 0x25, - 0x40, 0x4d, 0xf1, 0x77, 0xe4, 0x27, 0x00, 0x05, 0x14, 0x01, 0x01, 0xff, - 0x4d, 0x25, 0x0d, 0xf1, 0x25, 0x00, 0x4e, 0x43, 0x44, 0xf2, 0x25, 0x40, - 0x4d, 0x07, 0x84, 0x95, 0xf7, 0x01, 0x4c, 0x37, 0x0a, 0xa3, 0x25, 0x00, - 0x51, 0x32, 0x0a, 0x94, 0xf7, 0x41, 0x04, 0x0e, 0x07, 0x06, 0x4a, 0x93, - 0x93, 0x3a, 0x26, 0x40, 0x47, 0x19, 0x0a, 0x2b, 0x2b, 0x00, 0xb3, 0x01, - 0xff, 0x45, 0xac, 0x05, 0xab, 0x25, 0x00, 0x43, 0xe3, 0x12, 0x52, 0x2b, - 0x40, 0x48, 0x3b, 0x46, 0xad, 0x25, 0x00, 0x04, 0xc9, 0x00, 0x01, 0xff, - 0x0a, 0x9b, 0x01, 0x1f, 0x0a, 0x3d, 0x0b, 0x01, 0xff, 0xb0, 0x0c, 0x4e, - 0xd7, 0x0b, 0xb9, 0x25, 0x00, 0x48, 0x01, 0x02, 0xb7, 0x25, 0x40, 0x47, - 0x3b, 0xc7, 0x54, 0x2b, 0x00, 0x46, 0xa1, 0x48, 0xbb, 0x25, 0x40, 0x4e, - 0x3f, 0x26, 0x49, 0xf4, 0x01, 0x45, 0x40, 0x13, 0x1e, 0x26, 0x40, 0x4c, - 0xa9, 0x8a, 0xb1, 0x25, 0x00, 0x02, 0x92, 0x01, 0x01, 0xff, 0x44, 0x5c, - 0x32, 0xf1, 0xf3, 0x01, 0x45, 0x3d, 0xc7, 0x20, 0x2b, 0x40, 0x06, 0x1a, - 0x04, 0x06, 0x4a, 0x93, 0xac, 0xdd, 0x2b, 0x40, 0x47, 0x88, 0x43, 0x26, - 0x2b, 0x00, 0x47, 0x19, 0x0a, 0x28, 0x2b, 0x00, 0xb3, 0x01, 0xff, 0x4b, - 0x38, 0x0a, 0xfd, 0x25, 0x00, 0x45, 0xac, 0x05, 0xfb, 0x25, 0x00, 0x43, - 0xe3, 0x12, 0x50, 0x2b, 0x40, 0xa1, 0x4d, 0x03, 0xc4, 0x00, 0x19, 0xaf, - 0x01, 0xff, 0x04, 0x15, 0x01, 0x06, 0x64, 0xfc, 0x09, 0xa0, 0xf7, 0x41, - 0x4c, 0x59, 0x8f, 0x86, 0xcc, 0x01, 0x4d, 0x1c, 0x86, 0x87, 0xcc, 0x41, - 0x80, 0x17, 0x0a, 0x3d, 0x0b, 0x01, 0xff, 0x47, 0xa0, 0x48, 0xc5, 0x25, - 0x00, 0x4e, 0xd7, 0x0b, 0xc3, 0x25, 0x00, 0x48, 0x01, 0x02, 0xc1, 0x25, - 0x40, 0x4a, 0x31, 0xaa, 0xd9, 0x26, 0x00, 0x09, 0x9c, 0x01, 0x01, 0xff, - 0x4e, 0x3f, 0x26, 0x48, 0xf4, 0x01, 0x45, 0x40, 0x13, 0x1c, 0x26, 0x40, - 0x4a, 0xe7, 0xad, 0x1c, 0x2b, 0x00, 0x49, 0x25, 0x9c, 0x46, 0xf5, 0x41, - 0x55, 0x7d, 0x38, 0xab, 0xf5, 0x01, 0xa5, 0x0f, 0xaf, 0x01, 0xff, 0x50, - 0x5a, 0x65, 0x2d, 0x2b, 0x00, 0x47, 0x2b, 0xd4, 0xd6, 0x29, 0x40, 0xa1, - 0x06, 0x45, 0xb5, 0xce, 0x21, 0x2b, 0x40, 0x42, 0x34, 0x00, 0x0d, 0xf9, - 0x81, 0x11, 0x03, 0x04, 0x15, 0x01, 0xff, 0x4a, 0x67, 0xa6, 0x05, 0x27, - 0x00, 0x5c, 0xa6, 0x18, 0xc0, 0xfb, 0x41, 0x45, 0xfd, 0x26, 0x61, 0x26, - 0x40, 0xac, 0x16, 0x0c, 0xcd, 0x12, 0x06, 0x4c, 0x7e, 0x81, 0x39, 0x26, - 0x40, 0x44, 0xa6, 0x15, 0xce, 0x2b, 0x00, 0x44, 0xe2, 0x12, 0x27, 0x27, - 0x40, 0x42, 0x23, 0x02, 0x90, 0x26, 0x80, 0x0f, 0xaf, 0x01, 0xff, 0x45, - 0x60, 0x0f, 0x40, 0x27, 0x00, 0x43, 0x15, 0x01, 0xae, 0xf4, 0x41, 0x64, - 0x94, 0x08, 0xff, 0x26, 0x40, 0x46, 0x89, 0x43, 0xc7, 0x25, 0x80, 0x3c, - 0x03, 0xa6, 0x01, 0x11, 0x08, 0x8a, 0xc7, 0x01, 0xff, 0x44, 0xe2, 0x33, - 0xc1, 0x26, 0x00, 0x43, 0xd5, 0x17, 0xc0, 0x26, 0x40, 0x0a, 0x9b, 0x01, - 0x11, 0x0a, 0x3d, 0x0b, 0x01, 0xff, 0x4e, 0xd7, 0x0b, 0xbf, 0x25, 0x00, - 0x48, 0x01, 0x02, 0xbd, 0x25, 0x40, 0x4e, 0x3f, 0x26, 0x47, 0xf4, 0x01, - 0x45, 0x40, 0x13, 0x1f, 0x26, 0x00, 0x4f, 0xde, 0x6d, 0x97, 0xf5, 0x41, - 0x80, 0x01, 0xff, 0x11, 0x02, 0x0a, 0x12, 0x49, 0xed, 0xb7, 0xcb, 0x26, - 0x00, 0x44, 0xfe, 0x26, 0x62, 0x26, 0x00, 0x50, 0x3a, 0x67, 0xd0, 0x27, - 0x40, 0x4e, 0x6e, 0x78, 0x9b, 0xf7, 0x01, 0x4d, 0x2d, 0x55, 0xc8, 0x25, - 0x00, 0x52, 0x28, 0x55, 0x9a, 0xf7, 0x41, 0x05, 0x8e, 0x86, 0x70, 0x45, - 0xe8, 0x02, 0xcb, 0x25, 0x80, 0x24, 0x48, 0x6a, 0xc5, 0x67, 0x26, 0x00, - 0x54, 0x7b, 0x43, 0xe1, 0x27, 0x80, 0x06, 0x49, 0xae, 0xa6, 0xcb, 0xfb, - 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4e, 0xf0, 0x77, 0xe2, 0x27, 0x00, - 0x4f, 0x17, 0x71, 0xe3, 0x27, 0x40, 0x80, 0x01, 0xff, 0x5d, 0xc2, 0x14, - 0x8a, 0xf7, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, 0x02, 0x3b, 0x01, 0x27, - 0x06, 0x13, 0x01, 0x17, 0x48, 0xd0, 0x09, 0x87, 0x26, 0x00, 0x06, 0x6d, - 0x02, 0x01, 0xff, 0x4d, 0x25, 0x0d, 0xf4, 0x25, 0x00, 0x4e, 0x43, 0x44, - 0xf7, 0x25, 0x40, 0x4d, 0x25, 0x0d, 0xf5, 0x25, 0x00, 0x4e, 0x43, 0x44, - 0xf6, 0x25, 0x40, 0x47, 0xc6, 0x00, 0x86, 0x26, 0x00, 0x48, 0xc1, 0x40, - 0xec, 0x29, 0x40, 0x46, 0x48, 0xd7, 0x57, 0x26, 0x80, 0xe7, 0x01, 0x4a, - 0xd9, 0xa7, 0x48, 0xfa, 0x81, 0xd9, 0x01, 0xab, 0x73, 0x44, 0xb6, 0xee, - 0x59, 0x26, 0x80, 0x5b, 0x45, 0xe6, 0xbb, 0x55, 0x26, 0x80, 0x43, 0x44, - 0x0a, 0xef, 0x56, 0x26, 0x80, 0x2b, 0x07, 0xd8, 0x09, 0x01, 0xff, 0x46, - 0x48, 0xd7, 0x21, 0xfa, 0x01, 0xab, 0x12, 0x44, 0xb6, 0xee, 0x23, 0xfa, - 0x01, 0x45, 0xe6, 0xbb, 0x1f, 0xfa, 0x01, 0x44, 0x0a, 0xef, 0x20, 0xfa, - 0x41, 0x43, 0xa1, 0x01, 0x1e, 0xfa, 0x01, 0x45, 0xd5, 0x71, 0x22, 0xfa, - 0x41, 0x09, 0x02, 0x2c, 0x01, 0xff, 0x4e, 0x0b, 0x2c, 0x0b, 0xfa, 0x01, - 0x5b, 0x1a, 0x1d, 0x35, 0xfa, 0x41, 0x09, 0x02, 0x2c, 0x01, 0xff, 0x4e, - 0x0b, 0x2c, 0x0a, 0xfa, 0x01, 0x5b, 0x1a, 0x1d, 0x34, 0xfa, 0x41, 0x09, - 0x02, 0x2c, 0x01, 0xff, 0x4e, 0x0b, 0x2c, 0x0e, 0xfa, 0x01, 0x5b, 0x1a, - 0x1d, 0x38, 0xfa, 0x41, 0x43, 0xa1, 0x01, 0x54, 0x26, 0x80, 0x4c, 0x45, - 0xd5, 0x71, 0x58, 0x26, 0xc0, 0x00, 0x09, 0x02, 0x2c, 0x15, 0x8d, 0x01, - 0xff, 0x46, 0x48, 0xd7, 0x50, 0xfa, 0x01, 0x45, 0xe6, 0xbb, 0x4e, 0xfa, - 0x01, 0x44, 0x0a, 0xef, 0x4f, 0xfa, 0x41, 0x52, 0x84, 0x50, 0x06, 0xfa, - 0x01, 0x4e, 0x0b, 0x2c, 0x0d, 0xfa, 0x01, 0x5f, 0x1e, 0x11, 0x1b, 0xfa, - 0x01, 0xb4, 0x01, 0xff, 0x5c, 0x8e, 0x17, 0x45, 0xfa, 0x01, 0x0b, 0x1b, - 0x1d, 0x01, 0xff, 0x4f, 0x26, 0x1d, 0x37, 0xfa, 0x01, 0x53, 0xa9, 0x4c, - 0x30, 0xfa, 0x41, 0x09, 0x02, 0x2c, 0x01, 0xff, 0x4e, 0x0b, 0x2c, 0x09, - 0xfa, 0x01, 0x5b, 0x1a, 0x1d, 0x33, 0xfa, 0x41, 0x57, 0x02, 0x2c, 0x4b, - 0xfa, 0x41, 0x09, 0x02, 0x2c, 0x01, 0xff, 0x4e, 0x0b, 0x2c, 0x0c, 0xfa, - 0x01, 0x5b, 0x1a, 0x1d, 0x36, 0xfa, 0x41, 0x43, 0xbf, 0x0a, 0xac, 0xf8, - 0x01, 0x4a, 0x03, 0xb0, 0xad, 0xf8, 0x41, 0x4a, 0xab, 0xa3, 0x38, 0x26, - 0x00, 0x4c, 0x81, 0x8b, 0x7f, 0x26, 0x40, 0x04, 0xbc, 0x17, 0x22, 0xa4, - 0x14, 0xa9, 0x06, 0x4f, 0xbc, 0x71, 0x70, 0x26, 0x40, 0x5a, 0x76, 0x1f, - 0x18, 0x21, 0x00, 0x4a, 0x97, 0xa8, 0xcb, 0xf3, 0x41, 0x44, 0xd9, 0x05, - 0x92, 0xf4, 0x01, 0x5a, 0x20, 0x17, 0xbc, 0x27, 0x40, 0x48, 0xc0, 0x1e, - 0x40, 0xf6, 0x01, 0x44, 0xe1, 0x07, 0x29, 0xf6, 0x41, 0x44, 0xca, 0x87, - 0xc7, 0xf9, 0x01, 0xae, 0xb5, 0x05, 0xb2, 0x95, 0x01, 0x49, 0xfd, 0xbc, - 0xd1, 0xf5, 0x01, 0xb4, 0x62, 0xb6, 0x11, 0x05, 0x3f, 0xe9, 0x01, 0xff, - 0x54, 0x47, 0x40, 0x12, 0xf3, 0x01, 0x53, 0x6e, 0x48, 0x14, 0xf3, 0x41, - 0x02, 0x60, 0x00, 0x35, 0x04, 0xa1, 0x01, 0x1f, 0x02, 0x09, 0x00, 0x01, - 0xff, 0x44, 0x40, 0x12, 0x30, 0x30, 0x00, 0xac, 0x06, 0x48, 0xb8, 0x88, - 0x4b, 0xfe, 0x40, 0x43, 0xc3, 0x07, 0x07, 0x23, 0x00, 0x47, 0xac, 0x88, - 0x4f, 0xfe, 0x40, 0x4a, 0x03, 0xa6, 0xf4, 0xf3, 0x01, 0x49, 0x64, 0x46, - 0x4b, 0xf4, 0x01, 0x4a, 0x1b, 0xb1, 0xf3, 0xf3, 0x41, 0x18, 0x95, 0x26, - 0x06, 0x44, 0x40, 0x12, 0x1c, 0x30, 0x40, 0x44, 0xc3, 0x00, 0x3f, 0x2b, - 0x00, 0x45, 0xc8, 0x00, 0x33, 0x29, 0x40, 0x42, 0x1e, 0x14, 0x1a, 0x23, - 0x00, 0x02, 0x33, 0x00, 0x01, 0xff, 0x80, 0x06, 0x45, 0x70, 0xe5, 0x49, - 0xf3, 0x41, 0x47, 0xe5, 0xcc, 0x03, 0xf4, 0x01, 0x46, 0xc6, 0xd7, 0xbe, - 0xf6, 0x01, 0x44, 0xd6, 0xee, 0x3d, 0xf9, 0x01, 0x44, 0x39, 0x56, 0x0a, - 0xf3, 0x41, 0x09, 0xb5, 0xb3, 0x06, 0x49, 0x24, 0xba, 0xa0, 0x26, 0x40, - 0x0f, 0xb9, 0x05, 0xd1, 0x02, 0x06, 0xc4, 0x06, 0x8a, 0x02, 0x07, 0x2f, - 0x39, 0xc8, 0x01, 0x42, 0xe9, 0x04, 0xff, 0x18, 0x01, 0x0d, 0x4b, 0x08, - 0x01, 0xff, 0xe1, 0xc1, 0x18, 0x81, 0xa9, 0x01, 0x42, 0x1b, 0x0d, 0xd7, - 0x18, 0x01, 0x42, 0xa1, 0x10, 0xd4, 0x18, 0x01, 0xe5, 0xc8, 0x18, 0x81, - 0x8c, 0x01, 0x42, 0x24, 0x02, 0xcb, 0x18, 0x01, 0xa8, 0x69, 0x42, 0xb1, - 0x27, 0xc6, 0x18, 0x01, 0x42, 0x22, 0x03, 0xcc, 0x18, 0x01, 0xae, 0x4f, - 0xef, 0xc9, 0x18, 0x81, 0x44, 0x42, 0xb8, 0x0b, 0xd8, 0x18, 0x01, 0xb3, - 0x30, 0x43, 0xc3, 0x05, 0xd2, 0x18, 0x01, 0xb5, 0x20, 0x44, 0xba, 0xef, - 0xdf, 0x18, 0x01, 0x42, 0x51, 0x00, 0xc2, 0x18, 0x01, 0xb9, 0x01, 0xff, - 0xe1, 0xc4, 0x18, 0x01, 0xef, 0xc5, 0x18, 0x01, 0xf5, 0xc3, 0x18, 0xc1, - 0x00, 0xea, 0xce, 0x18, 0x41, 0xe3, 0xcf, 0x18, 0x01, 0xf5, 0xc7, 0x18, - 0x41, 0x42, 0xb1, 0x27, 0xde, 0x18, 0x01, 0x43, 0x50, 0xf1, 0xdd, 0x18, - 0x41, 0x42, 0x7f, 0x02, 0xd1, 0x18, 0x41, 0x43, 0x50, 0x56, 0xc0, 0x18, - 0x01, 0x43, 0x75, 0x44, 0xd3, 0x18, 0x41, 0x42, 0x17, 0x00, 0xdc, 0x18, - 0x01, 0x43, 0xc3, 0xc7, 0xd9, 0x18, 0x01, 0xaf, 0x01, 0xff, 0x42, 0x13, - 0x01, 0xda, 0x18, 0x01, 0x42, 0xcf, 0x00, 0xdb, 0x18, 0x41, 0xae, 0x01, - 0xff, 0xee, 0xd0, 0x18, 0x01, 0xf9, 0xcd, 0x18, 0x41, 0xed, 0xd6, 0x18, - 0x01, 0x42, 0x1d, 0x01, 0xca, 0x18, 0x01, 0xf4, 0xd5, 0x18, 0x41, 0x46, - 0x44, 0xd8, 0xf1, 0x18, 0x01, 0xa6, 0x29, 0x46, 0x0b, 0x2c, 0xf2, 0x18, - 0x01, 0xb3, 0x15, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xea, 0x18, 0x01, - 0x45, 0x2b, 0x11, 0xec, 0x18, 0x01, 0x45, 0xde, 0x2b, 0xeb, 0x18, 0x41, - 0x46, 0x27, 0x1d, 0xf0, 0x18, 0x01, 0x44, 0x4e, 0xda, 0xef, 0x18, 0x41, - 0x44, 0x08, 0x4c, 0xee, 0x18, 0x01, 0x44, 0x85, 0x50, 0xed, 0x18, 0x41, - 0x45, 0xc3, 0x0a, 0xe8, 0x18, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xe9, - 0x18, 0x01, 0x43, 0xbf, 0x0a, 0xe1, 0x18, 0x01, 0xb3, 0x14, 0xb4, 0x06, - 0x44, 0xa1, 0x1d, 0xe0, 0x18, 0x41, 0x44, 0x25, 0x01, 0xe3, 0x18, 0x01, - 0x42, 0x15, 0x02, 0xe2, 0x18, 0x41, 0x44, 0x27, 0x1d, 0xe7, 0x18, 0x01, - 0x42, 0x60, 0x25, 0xe6, 0x18, 0x41, 0x43, 0xa7, 0x05, 0xe5, 0x18, 0x01, - 0x43, 0xcb, 0x06, 0xe4, 0x18, 0x41, 0xe1, 0xa1, 0x18, 0x81, 0xa9, 0x01, - 0x42, 0x1b, 0x0d, 0xb7, 0x18, 0x01, 0x42, 0xa1, 0x10, 0xb4, 0x18, 0x01, - 0xe5, 0xa8, 0x18, 0x81, 0x8c, 0x01, 0x42, 0x24, 0x02, 0xab, 0x18, 0x01, - 0xa8, 0x69, 0x42, 0xb1, 0x27, 0xa6, 0x18, 0x01, 0x42, 0x22, 0x03, 0xac, - 0x18, 0x01, 0xae, 0x4f, 0xef, 0xa9, 0x18, 0x81, 0x44, 0x42, 0xb8, 0x0b, - 0xb8, 0x18, 0x01, 0xb3, 0x30, 0x43, 0xc3, 0x05, 0xb2, 0x18, 0x01, 0xb5, - 0x20, 0x44, 0xba, 0xef, 0xbf, 0x18, 0x01, 0x42, 0x51, 0x00, 0xa2, 0x18, - 0x01, 0xb9, 0x01, 0xff, 0xe1, 0xa4, 0x18, 0x01, 0xef, 0xa5, 0x18, 0x01, - 0xf5, 0xa3, 0x18, 0xc1, 0x00, 0xea, 0xae, 0x18, 0x41, 0xe3, 0xaf, 0x18, - 0x01, 0xf5, 0xa7, 0x18, 0x41, 0x42, 0xb1, 0x27, 0xbe, 0x18, 0x01, 0x43, - 0x50, 0xf1, 0xbd, 0x18, 0x41, 0x42, 0x7f, 0x02, 0xb1, 0x18, 0x41, 0x43, - 0x50, 0x56, 0xa0, 0x18, 0x01, 0x43, 0x75, 0x44, 0xb3, 0x18, 0x41, 0x42, - 0x17, 0x00, 0xbc, 0x18, 0x01, 0x43, 0xc3, 0xc7, 0xb9, 0x18, 0x01, 0xaf, - 0x01, 0xff, 0x42, 0x13, 0x01, 0xba, 0x18, 0x01, 0x42, 0xcf, 0x00, 0xbb, - 0x18, 0x41, 0xae, 0x01, 0xff, 0xee, 0xb0, 0x18, 0x01, 0xf9, 0xad, 0x18, - 0x41, 0xed, 0xb6, 0x18, 0x01, 0x42, 0x1d, 0x01, 0xaa, 0x18, 0x01, 0xf4, - 0xb5, 0x18, 0x41, 0x04, 0xb4, 0xd7, 0x11, 0x04, 0xa1, 0x01, 0x01, 0xff, - 0x54, 0x47, 0x40, 0x18, 0xf3, 0x01, 0x53, 0x6e, 0x48, 0x16, 0xf3, 0x41, - 0x06, 0xc4, 0x06, 0xa6, 0x02, 0x07, 0xc1, 0x05, 0x25, 0x49, 0x00, 0xba, - 0xff, 0xe2, 0x01, 0x05, 0x83, 0x2c, 0x01, 0xff, 0x43, 0xc7, 0xdb, 0xee, - 0xe2, 0x81, 0x0d, 0x43, 0x15, 0x19, 0xec, 0xe2, 0xc1, 0x00, 0x42, 0x26, - 0x03, 0xed, 0xe2, 0x41, 0x42, 0x26, 0x03, 0xef, 0xe2, 0x41, 0xe1, 0xc1, - 0xe2, 0x81, 0xdf, 0x01, 0x42, 0x16, 0x00, 0xc2, 0xe2, 0x01, 0x42, 0x37, - 0x00, 0xc3, 0xe2, 0x01, 0x42, 0xa1, 0x10, 0xc4, 0xe2, 0x01, 0xe5, 0xdb, - 0xe2, 0x81, 0xc3, 0x01, 0x42, 0xe1, 0x07, 0xcd, 0xe2, 0x01, 0x42, 0x24, - 0x02, 0xc5, 0xe2, 0x01, 0x42, 0x22, 0x00, 0xda, 0xe2, 0x01, 0xe9, 0xdc, - 0xe2, 0x81, 0xa5, 0x01, 0x42, 0xbd, 0x26, 0xd0, 0xe2, 0x01, 0xab, 0x92, - 0x01, 0xac, 0x85, 0x01, 0x42, 0x6c, 0x00, 0xd8, 0xe2, 0x01, 0xae, 0x6d, - 0xef, 0xd5, 0xe2, 0x81, 0x5f, 0xb0, 0x53, 0x42, 0x71, 0x00, 0xd7, 0xe2, - 0x01, 0xb3, 0x41, 0xb4, 0x29, 0xf5, 0xde, 0xe2, 0x81, 0x1e, 0x42, 0xa6, - 0x0a, 0xd3, 0xe2, 0x01, 0x42, 0xa9, 0x01, 0xd2, 0xe2, 0x01, 0xb9, 0x06, - 0x42, 0x59, 0x00, 0xd1, 0xe2, 0x41, 0xe1, 0xc6, 0xe2, 0x01, 0x42, 0xec, - 0x18, 0xeb, 0xe2, 0x41, 0x42, 0x92, 0x01, 0xea, 0xe2, 0x41, 0xe1, 0xcb, - 0xe2, 0x01, 0x42, 0x22, 0x00, 0xcc, 0xe2, 0x01, 0x42, 0x71, 0x00, 0xe1, - 0xe2, 0x01, 0x42, 0x15, 0x06, 0xe0, 0xe2, 0x41, 0xe1, 0xce, 0xe2, 0x01, - 0x42, 0x22, 0x00, 0xcf, 0xe2, 0x41, 0xe1, 0xca, 0xe2, 0x01, 0x42, 0x22, - 0x00, 0xc7, 0xe2, 0x41, 0xee, 0xe6, 0xe2, 0xc1, 0x00, 0xe7, 0xe2, 0xe2, - 0x41, 0xe1, 0xc9, 0xe2, 0x01, 0x42, 0x24, 0x02, 0xdd, 0xe2, 0x01, 0x42, - 0x34, 0x22, 0xe9, 0xe2, 0x41, 0xe1, 0xc8, 0xe2, 0x01, 0x43, 0x80, 0x48, - 0xdf, 0xe2, 0x41, 0xe1, 0xd4, 0xe2, 0x01, 0x42, 0x22, 0x00, 0xd9, 0xe2, - 0x41, 0x42, 0x1d, 0x01, 0xe5, 0xe2, 0x41, 0xee, 0xe7, 0xe2, 0x41, 0xe1, - 0xc0, 0xe2, 0x81, 0x0a, 0x42, 0x1d, 0x01, 0xe4, 0xe2, 0x01, 0xf5, 0xd6, - 0xe2, 0x41, 0xee, 0xe8, 0xe2, 0xc1, 0x00, 0xe7, 0xe3, 0xe2, 0x41, 0x45, - 0xc3, 0x0a, 0xf8, 0xe2, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xf9, 0xe2, - 0x01, 0x43, 0xbf, 0x0a, 0xf1, 0xe2, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, - 0xa1, 0x1d, 0xf0, 0xe2, 0x41, 0x44, 0x25, 0x01, 0xf3, 0xe2, 0x01, 0x42, - 0x15, 0x02, 0xf2, 0xe2, 0x41, 0x44, 0x27, 0x1d, 0xf7, 0xe2, 0x01, 0x42, - 0x60, 0x25, 0xf6, 0xe2, 0x41, 0x43, 0xa7, 0x05, 0xf5, 0xe2, 0x01, 0x43, - 0xcb, 0x06, 0xf4, 0xe2, 0x41, 0xa1, 0xf0, 0x0a, 0xa5, 0xaa, 0x05, 0xa9, - 0xba, 0x01, 0xaf, 0x9c, 0x01, 0x02, 0x1f, 0x01, 0x01, 0xff, 0x45, 0xe7, - 0xe1, 0xe6, 0x2b, 0x00, 0x0d, 0xa4, 0x81, 0x01, 0xff, 0xa6, 0x74, 0x04, - 0xbf, 0x0a, 0x35, 0x4d, 0xb2, 0x4b, 0x5e, 0x21, 0x00, 0xb4, 0x06, 0x4b, - 0x3a, 0xa3, 0x89, 0x21, 0x40, 0x05, 0x25, 0x01, 0x11, 0x03, 0xd1, 0x09, - 0x01, 0xff, 0x46, 0xf1, 0xac, 0x56, 0x21, 0x00, 0x46, 0x63, 0x73, 0x54, - 0x21, 0x40, 0x47, 0xb8, 0x4b, 0x5c, 0x21, 0x00, 0x46, 0xf1, 0xac, 0x57, - 0x21, 0x00, 0x48, 0x2a, 0x01, 0xbe, 0x00, 0x40, 0x46, 0xc3, 0x0a, 0x5b, - 0x21, 0x00, 0x45, 0xf1, 0xac, 0x55, 0x21, 0x00, 0x44, 0x22, 0x00, 0xbd, - 0x00, 0x00, 0x45, 0x01, 0xe6, 0x51, 0x21, 0x00, 0x47, 0x2a, 0x01, 0xbc, - 0x00, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0xfb, 0x1a, 0x52, 0x21, - 0x00, 0x44, 0x64, 0x73, 0x53, 0x21, 0x40, 0x46, 0xa4, 0xd8, 0x50, 0x21, - 0x00, 0x44, 0xe1, 0xa9, 0x59, 0x21, 0x40, 0x04, 0xa7, 0x05, 0x06, 0x4a, - 0xed, 0xac, 0x58, 0x21, 0x40, 0x47, 0xb8, 0x4b, 0x5d, 0x21, 0x00, 0x46, - 0xdc, 0xdc, 0x5a, 0x21, 0x40, 0x50, 0x2a, 0x62, 0xbb, 0xfb, 0x01, 0xac, - 0x01, 0xff, 0x44, 0x1e, 0xec, 0x0b, 0xf3, 0x01, 0x47, 0x0a, 0xd0, 0xd0, - 0xf3, 0x01, 0x4c, 0x75, 0x94, 0x30, 0x22, 0x40, 0x4c, 0x21, 0x8b, 0xf3, - 0xf4, 0x01, 0x4a, 0xe3, 0x94, 0x0c, 0x27, 0x00, 0x03, 0xab, 0x1f, 0xc8, - 0x03, 0xa5, 0xaf, 0x03, 0x44, 0x61, 0xac, 0xbb, 0xf3, 0x01, 0x43, 0xfa, - 0x16, 0x4d, 0x26, 0x00, 0x07, 0x91, 0xd3, 0x01, 0xff, 0x0f, 0xb9, 0x05, - 0xcf, 0x01, 0x0d, 0x4b, 0x08, 0x01, 0xff, 0xe1, 0x97, 0x05, 0x01, 0xa2, - 0xb9, 0x01, 0xa3, 0xac, 0x01, 0xa4, 0x9f, 0x01, 0xe5, 0x9f, 0x05, 0x81, - 0x95, 0x01, 0x42, 0xa0, 0x19, 0xa0, 0x05, 0x01, 0x42, 0x24, 0x02, 0xa1, - 0x05, 0x01, 0xa8, 0x7d, 0xe9, 0xa5, 0x05, 0x81, 0x72, 0x42, 0xde, 0x1f, - 0xa7, 0x05, 0x01, 0x42, 0x1b, 0x02, 0xa8, 0x05, 0x01, 0xac, 0x5a, 0x42, - 0x2a, 0x02, 0xab, 0x05, 0x01, 0xae, 0x48, 0xef, 0xae, 0x05, 0x01, 0x42, - 0x6f, 0x02, 0xaf, 0x05, 0x01, 0x42, 0xf4, 0x13, 0xb0, 0x05, 0x01, 0x42, - 0x88, 0x00, 0xb1, 0x05, 0x01, 0xb3, 0x26, 0xb4, 0x1a, 0xf5, 0xb7, 0x05, - 0x01, 0x42, 0x32, 0x00, 0xb8, 0x05, 0x01, 0x42, 0x60, 0x42, 0xb9, 0x05, - 0x01, 0xf9, 0xbb, 0x05, 0x01, 0x42, 0xfc, 0x09, 0xbc, 0x05, 0x41, 0xe5, - 0xb5, 0x05, 0x01, 0x42, 0xb0, 0x01, 0xb6, 0x05, 0x41, 0xe5, 0xb3, 0x05, - 0x01, 0x42, 0xb0, 0x01, 0xb4, 0x05, 0x41, 0xe5, 0xac, 0x05, 0x01, 0x42, - 0xde, 0x1f, 0xad, 0x05, 0x41, 0xe1, 0xa9, 0x05, 0x01, 0x42, 0x74, 0x00, - 0xaa, 0x05, 0x41, 0x42, 0xde, 0x1f, 0xa6, 0x05, 0x41, 0xe1, 0xa3, 0x05, - 0x01, 0x42, 0x22, 0x00, 0xa4, 0x05, 0x41, 0xe9, 0x9e, 0x05, 0x41, 0xe5, - 0x9c, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x9d, 0x05, 0x41, 0xe5, 0x9a, 0x05, - 0x01, 0x42, 0xb0, 0x01, 0x9b, 0x05, 0x41, 0x42, 0x8c, 0x05, 0x98, 0x05, - 0x01, 0xe5, 0x99, 0x05, 0x41, 0xe1, 0x70, 0x05, 0x01, 0xa2, 0xb9, 0x01, - 0xa3, 0xac, 0x01, 0xa4, 0x9f, 0x01, 0xe5, 0x78, 0x05, 0x81, 0x95, 0x01, - 0x42, 0xa0, 0x19, 0x79, 0x05, 0x01, 0x42, 0x24, 0x02, 0x7a, 0x05, 0x01, - 0xa8, 0x7d, 0xe9, 0x7e, 0x05, 0x81, 0x72, 0x42, 0xde, 0x1f, 0x80, 0x05, - 0x01, 0x42, 0x1b, 0x02, 0x81, 0x05, 0x01, 0xac, 0x5a, 0x42, 0x2a, 0x02, - 0x84, 0x05, 0x01, 0xae, 0x48, 0xef, 0x87, 0x05, 0x01, 0x42, 0x6f, 0x02, - 0x88, 0x05, 0x01, 0x42, 0xf4, 0x13, 0x89, 0x05, 0x01, 0x42, 0x88, 0x00, - 0x8a, 0x05, 0x01, 0xb3, 0x26, 0xb4, 0x1a, 0xf5, 0x90, 0x05, 0x01, 0x42, - 0x32, 0x00, 0x91, 0x05, 0x01, 0x42, 0x60, 0x42, 0x92, 0x05, 0x01, 0xf9, - 0x94, 0x05, 0x01, 0x42, 0xfc, 0x09, 0x95, 0x05, 0x41, 0xe5, 0x8e, 0x05, - 0x01, 0x42, 0xb0, 0x01, 0x8f, 0x05, 0x41, 0xe5, 0x8c, 0x05, 0x01, 0x42, - 0xb0, 0x01, 0x8d, 0x05, 0x41, 0xe5, 0x85, 0x05, 0x01, 0x42, 0xde, 0x1f, - 0x86, 0x05, 0x41, 0xe1, 0x82, 0x05, 0x01, 0x42, 0x74, 0x00, 0x83, 0x05, - 0x41, 0x42, 0xde, 0x1f, 0x7f, 0x05, 0x41, 0xe1, 0x7c, 0x05, 0x01, 0x42, - 0x22, 0x00, 0x7d, 0x05, 0x41, 0xe9, 0x77, 0x05, 0x41, 0xe5, 0x75, 0x05, - 0x01, 0x42, 0xb0, 0x01, 0x76, 0x05, 0x41, 0xe5, 0x73, 0x05, 0x01, 0x42, - 0xb0, 0x01, 0x74, 0x05, 0x41, 0x42, 0x8c, 0x05, 0x71, 0x05, 0x01, 0xe5, - 0x72, 0x05, 0x41, 0x1f, 0x9a, 0x11, 0x06, 0x4c, 0xf9, 0x94, 0x17, 0x23, - 0x40, 0x42, 0x37, 0x00, 0xf0, 0x6f, 0x01, 0x44, 0x3a, 0xee, 0xf1, 0x6f, - 0x41, 0x80, 0x06, 0x48, 0x02, 0xc2, 0xfc, 0xf4, 0x41, 0x46, 0x01, 0xb1, - 0xf9, 0xf4, 0x01, 0x44, 0xa2, 0xec, 0xae, 0xf3, 0x41, 0x55, 0x3a, 0x39, - 0x2f, 0x2a, 0x00, 0x04, 0xc0, 0x06, 0xfc, 0x02, 0xb2, 0x06, 0x43, 0xe2, - 0x12, 0xb6, 0x26, 0x40, 0x45, 0xd2, 0xe7, 0x23, 0x21, 0x00, 0x06, 0x35, - 0x00, 0x67, 0x02, 0x09, 0x00, 0x01, 0xff, 0x50, 0x9a, 0x5f, 0xa5, 0xf7, - 0x01, 0x06, 0x01, 0x15, 0x11, 0x05, 0xb6, 0xe5, 0x01, 0xff, 0x4c, 0x87, - 0x00, 0xd9, 0x22, 0x00, 0x49, 0xec, 0x00, 0xd8, 0x22, 0x40, 0x06, 0xe2, - 0x13, 0x37, 0x54, 0x4b, 0x41, 0xb3, 0xf7, 0x01, 0x4b, 0x9f, 0x5f, 0xa6, - 0xf7, 0x01, 0x4f, 0xcc, 0x70, 0x7d, 0xf6, 0x01, 0xb3, 0x11, 0x06, 0xad, - 0x02, 0x01, 0xff, 0x46, 0xe7, 0x02, 0x88, 0xf7, 0x01, 0x46, 0xab, 0x05, - 0x92, 0xf7, 0x41, 0x46, 0xa7, 0x18, 0xad, 0xf7, 0x01, 0x52, 0xb6, 0x51, - 0xb9, 0xf7, 0x01, 0x46, 0x6a, 0x30, 0x7c, 0xf6, 0x41, 0x52, 0x4b, 0x2b, - 0xd0, 0xf7, 0x01, 0x4f, 0x4e, 0x1c, 0xbf, 0xf7, 0x41, 0x04, 0x16, 0x00, - 0xe6, 0x01, 0x49, 0xa8, 0xb4, 0x14, 0xcc, 0x01, 0x48, 0x45, 0x29, 0xee, - 0x22, 0x00, 0x49, 0x9c, 0x45, 0x5e, 0x20, 0x00, 0x47, 0x7b, 0xce, 0x9d, - 0xcc, 0x01, 0x5a, 0xaa, 0x1f, 0x3b, 0x30, 0x00, 0x0c, 0xd5, 0x8e, 0xa0, - 0x01, 0xac, 0x61, 0x55, 0x04, 0x3c, 0xa8, 0x26, 0x00, 0x11, 0x6c, 0x5b, - 0x3f, 0xb2, 0x31, 0x48, 0x52, 0xc8, 0x3d, 0x2e, 0x00, 0xb4, 0x06, 0x4b, - 0x45, 0xa3, 0x9a, 0x29, 0x40, 0x02, 0x5c, 0x00, 0x0c, 0x44, 0xae, 0x22, - 0x2f, 0x2e, 0x00, 0x4c, 0x4d, 0x92, 0xa6, 0xf6, 0x41, 0x44, 0x9c, 0x44, - 0x7f, 0x2b, 0x00, 0x47, 0x16, 0x3b, 0x0b, 0x00, 0xc0, 0x00, 0x44, 0x15, - 0xb6, 0x8a, 0x00, 0x40, 0x49, 0x40, 0xb3, 0x9c, 0xcc, 0x01, 0x4f, 0x3b, - 0x6b, 0x0a, 0xcc, 0x41, 0xd2, 0x70, 0xfb, 0x01, 0xd3, 0x71, 0xfb, 0x01, - 0xd4, 0x72, 0xfb, 0x01, 0xd5, 0x73, 0xfb, 0x01, 0xd6, 0x74, 0xfb, 0x01, - 0xd7, 0x75, 0xfb, 0x41, 0x45, 0xfc, 0xe0, 0x84, 0xcc, 0x01, 0x43, 0xc3, - 0x07, 0x7c, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x49, 0x56, 0x57, 0xd0, - 0x23, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x07, 0xd0, 0x04, 0x12, 0x4f, - 0xb3, 0x6b, 0x90, 0xcc, 0x01, 0x4a, 0xb1, 0x44, 0x7f, 0x23, 0x00, 0x50, - 0xcc, 0x07, 0x15, 0xce, 0x41, 0x45, 0x5c, 0x00, 0xef, 0x2a, 0x00, 0x45, - 0xf5, 0x06, 0xf0, 0x2a, 0x40, 0x44, 0xb9, 0x00, 0x31, 0x30, 0x80, 0x0d, - 0x56, 0x7f, 0x37, 0x32, 0x30, 0xc0, 0x00, 0x4b, 0xbd, 0x19, 0x34, 0x30, - 0x40, 0x80, 0x01, 0xff, 0x4a, 0x75, 0x08, 0x35, 0x30, 0x00, 0x4a, 0xbe, - 0x19, 0x33, 0x30, 0x40, 0x55, 0xbc, 0x38, 0xd0, 0x29, 0x00, 0x55, 0x79, - 0x39, 0xe4, 0x2a, 0x00, 0x56, 0xb9, 0x36, 0xe2, 0x2a, 0x00, 0x56, 0x53, - 0x37, 0xca, 0x27, 0x40, 0x05, 0x2f, 0x03, 0x94, 0x01, 0x05, 0x83, 0x2c, - 0x01, 0xff, 0x60, 0x25, 0x0f, 0xe1, 0x1c, 0x00, 0x07, 0xba, 0x5f, 0x79, - 0x02, 0x3b, 0x01, 0x5e, 0x02, 0x1b, 0x02, 0x4e, 0x47, 0x09, 0xd2, 0xd2, - 0x1c, 0x00, 0x02, 0x0d, 0x00, 0x38, 0x45, 0xb9, 0xe7, 0xd1, 0x1c, 0x00, - 0xb4, 0x1e, 0x0b, 0x34, 0x22, 0x01, 0xff, 0x5e, 0x14, 0x12, 0xd5, 0x1c, - 0x00, 0x53, 0x99, 0x0a, 0xd6, 0x1c, 0x00, 0x5b, 0x85, 0x1b, 0xd7, 0x1c, - 0xc0, 0x00, 0x4a, 0xe7, 0xa3, 0xd9, 0x1c, 0x40, 0x4f, 0x94, 0x6c, 0xdf, - 0x1c, 0x00, 0x4d, 0x29, 0x86, 0xdb, 0x1c, 0x00, 0x4d, 0xb7, 0x0e, 0xde, - 0x1c, 0x40, 0x63, 0x89, 0x0a, 0xe0, 0x1c, 0x00, 0x48, 0x11, 0xae, 0xf8, - 0x1c, 0x40, 0x46, 0xac, 0xdc, 0xd0, 0x1c, 0x00, 0x4e, 0x62, 0x7b, 0xdc, - 0x1c, 0x40, 0x47, 0x52, 0x12, 0xdd, 0x1c, 0x00, 0x05, 0x3d, 0x01, 0x01, - 0xff, 0x4a, 0x0f, 0xae, 0xf9, 0x1c, 0x00, 0x47, 0xa5, 0x0a, 0xda, 0x1c, - 0x40, 0x45, 0x5c, 0x00, 0xf4, 0x1c, 0x00, 0x45, 0xf5, 0x06, 0xd8, 0x1c, - 0x40, 0xa1, 0x72, 0x5c, 0xe6, 0x16, 0xfa, 0x1c, 0x00, 0x56, 0x5f, 0x33, - 0xee, 0x1c, 0x00, 0x4b, 0xc0, 0x9b, 0xf5, 0x1c, 0x00, 0x4d, 0x68, 0x33, - 0xef, 0x1c, 0x00, 0x49, 0x1b, 0xba, 0xd3, 0x1c, 0x00, 0xb2, 0x36, 0x46, - 0x96, 0xdd, 0xed, 0x1c, 0x00, 0x4b, 0x32, 0xa2, 0xf6, 0x1c, 0x00, 0x08, - 0x92, 0x61, 0x06, 0x5a, 0x34, 0x22, 0xd4, 0x1c, 0x40, 0x48, 0x68, 0x7b, - 0xe5, 0x1c, 0x80, 0x13, 0x47, 0xa5, 0x0a, 0xe2, 0x1c, 0x00, 0x46, 0x6a, - 0x7b, 0xe3, 0x1c, 0xc0, 0x00, 0x4a, 0x5f, 0xa4, 0xe7, 0x1c, 0x40, 0x4a, - 0x5f, 0xa4, 0xe8, 0x1c, 0x40, 0x10, 0x8a, 0x61, 0x0c, 0x53, 0x95, 0x4a, - 0xf3, 0x1c, 0x00, 0x53, 0x37, 0x4c, 0xf0, 0x1c, 0x40, 0x48, 0x68, 0x7b, - 0xe6, 0x1c, 0x00, 0x46, 0x6a, 0x7b, 0xe4, 0x1c, 0x40, 0x08, 0xd1, 0x15, - 0x0c, 0x4b, 0x9d, 0x4a, 0xf2, 0x1c, 0x00, 0x47, 0x98, 0xd3, 0xf7, 0x1c, - 0x40, 0x4c, 0xf6, 0x16, 0xe9, 0x1c, 0x00, 0x4c, 0xd9, 0x8a, 0xea, 0x1c, - 0x00, 0x4e, 0x5e, 0x7c, 0xf1, 0x1c, 0x00, 0x4b, 0x74, 0xa2, 0xeb, 0x1c, - 0xc0, 0x00, 0x4a, 0x5f, 0xa4, 0xec, 0x1c, 0x40, 0x02, 0xc6, 0x03, 0xb4, - 0x08, 0x45, 0x7a, 0x92, 0xdb, 0xf9, 0x01, 0x11, 0x27, 0x5c, 0x01, 0xff, - 0xd1, 0x00, 0xfe, 0x80, 0xda, 0x04, 0xd2, 0x01, 0xfe, 0x80, 0xbf, 0x02, - 0xd3, 0x02, 0xfe, 0x80, 0x91, 0x02, 0xd4, 0x03, 0xfe, 0x80, 0xe3, 0x01, - 0xd5, 0x04, 0xfe, 0x80, 0xb5, 0x01, 0xd6, 0x05, 0xfe, 0x80, 0x87, 0x01, - 0xd7, 0x06, 0xfe, 0x80, 0x5a, 0xd8, 0x07, 0xfe, 0x80, 0x2d, 0xd9, 0x08, - 0xfe, 0xc0, 0x00, 0xd0, 0x49, 0x01, 0x0e, 0xd1, 0x4a, 0x01, 0x0e, 0xd2, - 0x4b, 0x01, 0x0e, 0xd3, 0x4c, 0x01, 0x0e, 0xd4, 0x4d, 0x01, 0x0e, 0xd5, - 0x4e, 0x01, 0x0e, 0xd6, 0x4f, 0x01, 0x0e, 0xd7, 0x50, 0x01, 0x0e, 0xd8, - 0x51, 0x01, 0x0e, 0xd9, 0x52, 0x01, 0x4e, 0xd0, 0x3f, 0x01, 0x0e, 0xd1, - 0x40, 0x01, 0x0e, 0xd2, 0x41, 0x01, 0x0e, 0xd3, 0x42, 0x01, 0x0e, 0xd4, - 0x43, 0x01, 0x0e, 0xd5, 0x44, 0x01, 0x0e, 0xd6, 0x45, 0x01, 0x0e, 0xd7, - 0x46, 0x01, 0x0e, 0xd8, 0x47, 0x01, 0x0e, 0xd9, 0x48, 0x01, 0x4e, 0xd0, - 0x35, 0x01, 0x0e, 0xd1, 0x36, 0x01, 0x0e, 0xd2, 0x37, 0x01, 0x0e, 0xd3, - 0x38, 0x01, 0x0e, 0xd4, 0x39, 0x01, 0x0e, 0xd5, 0x3a, 0x01, 0x0e, 0xd6, - 0x3b, 0x01, 0x0e, 0xd7, 0x3c, 0x01, 0x0e, 0xd8, 0x3d, 0x01, 0x0e, 0xd9, - 0x3e, 0x01, 0x4e, 0xd0, 0x2b, 0x01, 0x0e, 0xd1, 0x2c, 0x01, 0x0e, 0xd2, - 0x2d, 0x01, 0x0e, 0xd3, 0x2e, 0x01, 0x0e, 0xd4, 0x2f, 0x01, 0x0e, 0xd5, - 0x30, 0x01, 0x0e, 0xd6, 0x31, 0x01, 0x0e, 0xd7, 0x32, 0x01, 0x0e, 0xd8, - 0x33, 0x01, 0x0e, 0xd9, 0x34, 0x01, 0x4e, 0xd0, 0x21, 0x01, 0x0e, 0xd1, - 0x22, 0x01, 0x0e, 0xd2, 0x23, 0x01, 0x0e, 0xd3, 0x24, 0x01, 0x0e, 0xd4, - 0x25, 0x01, 0x0e, 0xd5, 0x26, 0x01, 0x0e, 0xd6, 0x27, 0x01, 0x0e, 0xd7, - 0x28, 0x01, 0x0e, 0xd8, 0x29, 0x01, 0x0e, 0xd9, 0x2a, 0x01, 0x4e, 0xd0, - 0x17, 0x01, 0x0e, 0xd1, 0x18, 0x01, 0x0e, 0xd2, 0x19, 0x01, 0x0e, 0xd3, - 0x1a, 0x01, 0x0e, 0xd4, 0x1b, 0x01, 0x0e, 0xd5, 0x1c, 0x01, 0x0e, 0xd6, - 0x1d, 0x01, 0x0e, 0xd7, 0x1e, 0x01, 0x0e, 0xd8, 0x1f, 0x01, 0x0e, 0xd9, - 0x20, 0x01, 0x4e, 0xd0, 0x0d, 0x01, 0x0e, 0xd1, 0x0e, 0x01, 0x0e, 0xd2, - 0x0f, 0x01, 0x0e, 0xd3, 0x10, 0x01, 0x0e, 0xd4, 0x11, 0x01, 0x0e, 0xd5, - 0x12, 0x01, 0x0e, 0xd6, 0x13, 0x01, 0x0e, 0xd7, 0x14, 0x01, 0x0e, 0xd8, - 0x15, 0x01, 0x0e, 0xd9, 0x16, 0x01, 0x4e, 0xd0, 0x03, 0x01, 0x8e, 0xe7, - 0x01, 0xd1, 0x04, 0x01, 0x8e, 0xb9, 0x01, 0xd2, 0x05, 0x01, 0x8e, 0x8b, - 0x01, 0xd3, 0x06, 0x01, 0x8e, 0x5e, 0xd4, 0x07, 0x01, 0x8e, 0x31, 0xd5, - 0x08, 0x01, 0x8e, 0x10, 0xd6, 0x09, 0x01, 0x0e, 0xd7, 0x0a, 0x01, 0x0e, - 0xd8, 0x0b, 0x01, 0x0e, 0xd9, 0x0c, 0x01, 0x4e, 0xd0, 0xe9, 0x01, 0x0e, - 0xd1, 0xea, 0x01, 0x0e, 0xd2, 0xeb, 0x01, 0x0e, 0xd3, 0xec, 0x01, 0x0e, - 0xd4, 0xed, 0x01, 0x0e, 0xd5, 0xee, 0x01, 0x0e, 0xd6, 0xef, 0x01, 0x4e, - 0xd0, 0xdf, 0x01, 0x0e, 0xd1, 0xe0, 0x01, 0x0e, 0xd2, 0xe1, 0x01, 0x0e, - 0xd3, 0xe2, 0x01, 0x0e, 0xd4, 0xe3, 0x01, 0x0e, 0xd5, 0xe4, 0x01, 0x0e, - 0xd6, 0xe5, 0x01, 0x0e, 0xd7, 0xe6, 0x01, 0x0e, 0xd8, 0xe7, 0x01, 0x0e, - 0xd9, 0xe8, 0x01, 0x4e, 0xd0, 0xd5, 0x01, 0x0e, 0xd1, 0xd6, 0x01, 0x0e, - 0xd2, 0xd7, 0x01, 0x0e, 0xd3, 0xd8, 0x01, 0x0e, 0xd4, 0xd9, 0x01, 0x0e, - 0xd5, 0xda, 0x01, 0x0e, 0xd6, 0xdb, 0x01, 0x0e, 0xd7, 0xdc, 0x01, 0x0e, - 0xd8, 0xdd, 0x01, 0x0e, 0xd9, 0xde, 0x01, 0x4e, 0xd0, 0xcb, 0x01, 0x0e, - 0xd1, 0xcc, 0x01, 0x0e, 0xd2, 0xcd, 0x01, 0x0e, 0xd3, 0xce, 0x01, 0x0e, - 0xd4, 0xcf, 0x01, 0x0e, 0xd5, 0xd0, 0x01, 0x0e, 0xd6, 0xd1, 0x01, 0x0e, - 0xd7, 0xd2, 0x01, 0x0e, 0xd8, 0xd3, 0x01, 0x0e, 0xd9, 0xd4, 0x01, 0x4e, - 0xd0, 0xc1, 0x01, 0x0e, 0xd1, 0xc2, 0x01, 0x0e, 0xd2, 0xc3, 0x01, 0x0e, - 0xd3, 0xc4, 0x01, 0x0e, 0xd4, 0xc5, 0x01, 0x0e, 0xd5, 0xc6, 0x01, 0x0e, - 0xd6, 0xc7, 0x01, 0x0e, 0xd7, 0xc8, 0x01, 0x0e, 0xd8, 0xc9, 0x01, 0x0e, - 0xd9, 0xca, 0x01, 0x4e, 0xd0, 0xb7, 0x01, 0x0e, 0xd1, 0xb8, 0x01, 0x0e, - 0xd2, 0xb9, 0x01, 0x0e, 0xd3, 0xba, 0x01, 0x0e, 0xd4, 0xbb, 0x01, 0x0e, - 0xd5, 0xbc, 0x01, 0x0e, 0xd6, 0xbd, 0x01, 0x0e, 0xd7, 0xbe, 0x01, 0x0e, - 0xd8, 0xbf, 0x01, 0x0e, 0xd9, 0xc0, 0x01, 0x4e, 0xd0, 0x09, 0xfe, 0x80, - 0x9b, 0x03, 0xd1, 0x0a, 0xfe, 0x80, 0xed, 0x02, 0xd2, 0x0b, 0xfe, 0x80, - 0xbf, 0x02, 0xd3, 0x0c, 0xfe, 0x80, 0x91, 0x02, 0xd4, 0x0d, 0xfe, 0x80, - 0xe3, 0x01, 0xd5, 0x0e, 0xfe, 0x80, 0xb5, 0x01, 0xd6, 0x0f, 0xfe, 0x80, - 0x87, 0x01, 0xd7, 0x00, 0x01, 0x8e, 0x5a, 0xd8, 0x01, 0x01, 0x8e, 0x2d, - 0xd9, 0x02, 0x01, 0xce, 0x00, 0xd0, 0xad, 0x01, 0x0e, 0xd1, 0xae, 0x01, - 0x0e, 0xd2, 0xaf, 0x01, 0x0e, 0xd3, 0xb0, 0x01, 0x0e, 0xd4, 0xb1, 0x01, - 0x0e, 0xd5, 0xb2, 0x01, 0x0e, 0xd6, 0xb3, 0x01, 0x0e, 0xd7, 0xb4, 0x01, - 0x0e, 0xd8, 0xb5, 0x01, 0x0e, 0xd9, 0xb6, 0x01, 0x4e, 0xd0, 0xa3, 0x01, - 0x0e, 0xd1, 0xa4, 0x01, 0x0e, 0xd2, 0xa5, 0x01, 0x0e, 0xd3, 0xa6, 0x01, - 0x0e, 0xd4, 0xa7, 0x01, 0x0e, 0xd5, 0xa8, 0x01, 0x0e, 0xd6, 0xa9, 0x01, - 0x0e, 0xd7, 0xaa, 0x01, 0x0e, 0xd8, 0xab, 0x01, 0x0e, 0xd9, 0xac, 0x01, - 0x4e, 0xd0, 0x99, 0x01, 0x0e, 0xd1, 0x9a, 0x01, 0x0e, 0xd2, 0x9b, 0x01, - 0x0e, 0xd3, 0x9c, 0x01, 0x0e, 0xd4, 0x9d, 0x01, 0x0e, 0xd5, 0x9e, 0x01, - 0x0e, 0xd6, 0x9f, 0x01, 0x0e, 0xd7, 0xa0, 0x01, 0x0e, 0xd8, 0xa1, 0x01, - 0x0e, 0xd9, 0xa2, 0x01, 0x4e, 0xd0, 0x8f, 0x01, 0x0e, 0xd1, 0x90, 0x01, - 0x0e, 0xd2, 0x91, 0x01, 0x0e, 0xd3, 0x92, 0x01, 0x0e, 0xd4, 0x93, 0x01, - 0x0e, 0xd5, 0x94, 0x01, 0x0e, 0xd6, 0x95, 0x01, 0x0e, 0xd7, 0x96, 0x01, - 0x0e, 0xd8, 0x97, 0x01, 0x0e, 0xd9, 0x98, 0x01, 0x4e, 0xd0, 0x85, 0x01, - 0x0e, 0xd1, 0x86, 0x01, 0x0e, 0xd2, 0x87, 0x01, 0x0e, 0xd3, 0x88, 0x01, - 0x0e, 0xd4, 0x89, 0x01, 0x0e, 0xd5, 0x8a, 0x01, 0x0e, 0xd6, 0x8b, 0x01, - 0x0e, 0xd7, 0x8c, 0x01, 0x0e, 0xd8, 0x8d, 0x01, 0x0e, 0xd9, 0x8e, 0x01, - 0x4e, 0xd0, 0x7b, 0x01, 0x0e, 0xd1, 0x7c, 0x01, 0x0e, 0xd2, 0x7d, 0x01, - 0x0e, 0xd3, 0x7e, 0x01, 0x0e, 0xd4, 0x7f, 0x01, 0x0e, 0xd5, 0x80, 0x01, - 0x0e, 0xd6, 0x81, 0x01, 0x0e, 0xd7, 0x82, 0x01, 0x0e, 0xd8, 0x83, 0x01, - 0x0e, 0xd9, 0x84, 0x01, 0x4e, 0xd0, 0x71, 0x01, 0x0e, 0xd1, 0x72, 0x01, - 0x0e, 0xd2, 0x73, 0x01, 0x0e, 0xd3, 0x74, 0x01, 0x0e, 0xd4, 0x75, 0x01, - 0x0e, 0xd5, 0x76, 0x01, 0x0e, 0xd6, 0x77, 0x01, 0x0e, 0xd7, 0x78, 0x01, - 0x0e, 0xd8, 0x79, 0x01, 0x0e, 0xd9, 0x7a, 0x01, 0x4e, 0xd0, 0x67, 0x01, - 0x0e, 0xd1, 0x68, 0x01, 0x0e, 0xd2, 0x69, 0x01, 0x0e, 0xd3, 0x6a, 0x01, - 0x0e, 0xd4, 0x6b, 0x01, 0x0e, 0xd5, 0x6c, 0x01, 0x0e, 0xd6, 0x6d, 0x01, - 0x0e, 0xd7, 0x6e, 0x01, 0x0e, 0xd8, 0x6f, 0x01, 0x0e, 0xd9, 0x70, 0x01, - 0x4e, 0xd0, 0x5d, 0x01, 0x0e, 0xd1, 0x5e, 0x01, 0x0e, 0xd2, 0x5f, 0x01, - 0x0e, 0xd3, 0x60, 0x01, 0x0e, 0xd4, 0x61, 0x01, 0x0e, 0xd5, 0x62, 0x01, - 0x0e, 0xd6, 0x63, 0x01, 0x0e, 0xd7, 0x64, 0x01, 0x0e, 0xd8, 0x65, 0x01, - 0x0e, 0xd9, 0x66, 0x01, 0x4e, 0xd0, 0x53, 0x01, 0x0e, 0xd1, 0x54, 0x01, - 0x0e, 0xd2, 0x55, 0x01, 0x0e, 0xd3, 0x56, 0x01, 0x0e, 0xd4, 0x57, 0x01, - 0x0e, 0xd5, 0x58, 0x01, 0x0e, 0xd6, 0x59, 0x01, 0x0e, 0xd7, 0x5a, 0x01, - 0x0e, 0xd8, 0x5b, 0x01, 0x0e, 0xd9, 0x5c, 0x01, 0x4e, 0x45, 0xe8, 0x04, - 0x0d, 0xa6, 0x00, 0x06, 0xc4, 0x06, 0x83, 0x0b, 0x49, 0x15, 0x16, 0x0e, - 0xa6, 0x00, 0x4d, 0xd6, 0x33, 0x0f, 0xa6, 0x00, 0x02, 0xeb, 0x07, 0x01, - 0xff, 0x07, 0xb0, 0x17, 0x5f, 0x05, 0xf5, 0x15, 0x01, 0xff, 0x44, 0xba, - 0x15, 0x17, 0xa6, 0x00, 0xa4, 0x3d, 0xa6, 0x2f, 0x44, 0xeb, 0xa9, 0x1f, - 0xa6, 0x00, 0xab, 0x1b, 0x43, 0x29, 0xf1, 0x16, 0xa6, 0x00, 0xb4, 0x01, - 0xff, 0x42, 0x31, 0x12, 0x19, 0xa6, 0x00, 0x43, 0xa1, 0x01, 0x15, 0xa6, - 0x00, 0x43, 0x63, 0x0e, 0x1d, 0xa6, 0x40, 0x44, 0x99, 0x99, 0x14, 0xa6, - 0x00, 0x43, 0x75, 0x44, 0x1c, 0xa6, 0x40, 0x42, 0x31, 0x12, 0x18, 0xa6, - 0x00, 0x44, 0x99, 0x99, 0x13, 0xa6, 0x40, 0x43, 0x1c, 0x01, 0x1a, 0xa6, - 0x00, 0xaf, 0x01, 0xff, 0x42, 0xad, 0x20, 0x1e, 0xa6, 0x00, 0x43, 0x63, - 0x0e, 0x1b, 0xa6, 0x40, 0xe1, 0x49, 0xa5, 0x80, 0x85, 0x0a, 0xa2, 0xc4, - 0x09, 0xa3, 0xa3, 0x09, 0xa4, 0xc2, 0x08, 0xe5, 0xe1, 0xa5, 0x80, 0xaf, - 0x08, 0xa6, 0x8e, 0x08, 0xa7, 0xc1, 0x07, 0xa8, 0x89, 0x07, 0xe9, 0x24, - 0xa5, 0x80, 0xff, 0x06, 0xaa, 0xde, 0x06, 0xab, 0x8f, 0x06, 0xac, 0xe8, - 0x05, 0xad, 0x85, 0x05, 0xae, 0xa4, 0x03, 0xef, 0xba, 0xa5, 0x80, 0x91, - 0x03, 0xb0, 0xf0, 0x02, 0xb2, 0xcf, 0x02, 0xb3, 0x8e, 0x02, 0xb4, 0xcd, - 0x01, 0xf5, 0x95, 0xa5, 0x80, 0xc3, 0x01, 0xb6, 0xa2, 0x01, 0xb7, 0x61, - 0xb9, 0x41, 0xba, 0x01, 0xff, 0xe1, 0x64, 0xa5, 0x00, 0xe5, 0xfd, 0xa5, - 0x80, 0x31, 0xa8, 0x11, 0xe9, 0x3d, 0xa5, 0x00, 0xef, 0xd5, 0xa5, 0x80, - 0x04, 0xf5, 0xae, 0xa5, 0x40, 0xef, 0x89, 0xa5, 0x40, 0xe1, 0x65, 0xa5, - 0x00, 0xe5, 0xfe, 0xa5, 0x80, 0x11, 0xe9, 0x3e, 0xa5, 0x00, 0xef, 0xd6, - 0xa5, 0x80, 0x04, 0xf5, 0xaf, 0xa5, 0x40, 0xef, 0x8a, 0xa5, 0x40, 0xe5, - 0x19, 0xa5, 0x40, 0xe5, 0x18, 0xa5, 0x40, 0xe1, 0x69, 0xa5, 0x00, 0xe5, - 0x02, 0xa6, 0x80, 0x11, 0xe9, 0x42, 0xa5, 0x00, 0xef, 0xda, 0xa5, 0x80, - 0x04, 0xf5, 0xb3, 0xa5, 0x40, 0xef, 0x8e, 0xa5, 0x40, 0xe5, 0x1d, 0xa5, - 0x40, 0xe1, 0x4e, 0xa5, 0x80, 0x36, 0xe5, 0xe6, 0xa5, 0x80, 0x24, 0xe9, - 0x28, 0xa5, 0x80, 0x1b, 0xef, 0xbf, 0xa5, 0x80, 0x09, 0xf5, 0x99, 0xa5, - 0xc0, 0x00, 0xee, 0x9a, 0xa5, 0x40, 0xee, 0xc0, 0xa5, 0x00, 0xef, 0x74, - 0xa5, 0xc0, 0x00, 0xee, 0x75, 0xa5, 0x40, 0xee, 0x29, 0xa5, 0x40, 0xe5, - 0x03, 0xa5, 0x80, 0x04, 0xee, 0xe7, 0xa5, 0x40, 0xee, 0x04, 0xa5, 0x40, - 0xee, 0x4f, 0xa5, 0x40, 0xe1, 0x59, 0xa5, 0x00, 0xe5, 0xf2, 0xa5, 0x80, - 0x11, 0xe9, 0x32, 0xa5, 0x00, 0xef, 0xca, 0xa5, 0x80, 0x04, 0xf5, 0xa3, - 0xa5, 0x40, 0xef, 0x7e, 0xa5, 0x40, 0xe5, 0x0d, 0xa5, 0x40, 0xee, 0x96, - 0xa5, 0x40, 0xe1, 0x5a, 0xa5, 0x00, 0xe5, 0xf3, 0xa5, 0x80, 0x31, 0xa8, - 0x11, 0xe9, 0x33, 0xa5, 0x00, 0xef, 0xcb, 0xa5, 0x80, 0x04, 0xf5, 0xa4, - 0xa5, 0x40, 0xef, 0x7f, 0xa5, 0x40, 0xe1, 0x5b, 0xa5, 0x00, 0xe5, 0xf4, - 0xa5, 0x80, 0x11, 0xe9, 0x34, 0xa5, 0x00, 0xef, 0xcc, 0xa5, 0x80, 0x04, - 0xf5, 0xa5, 0xa5, 0x40, 0xef, 0x80, 0xa5, 0x40, 0xe5, 0x0f, 0xa5, 0x40, - 0xe5, 0x0e, 0xa5, 0x40, 0xe1, 0x62, 0xa5, 0x00, 0xe5, 0xfb, 0xa5, 0x80, - 0x31, 0xa8, 0x11, 0xe9, 0x3b, 0xa5, 0x00, 0xef, 0xd3, 0xa5, 0x80, 0x04, - 0xf5, 0xac, 0xa5, 0x40, 0xef, 0x87, 0xa5, 0x40, 0xe1, 0x63, 0xa5, 0x00, - 0xe5, 0xfc, 0xa5, 0x80, 0x11, 0xe9, 0x3c, 0xa5, 0x00, 0xef, 0xd4, 0xa5, - 0x80, 0x04, 0xf5, 0xad, 0xa5, 0x40, 0xef, 0x88, 0xa5, 0x40, 0xe5, 0x17, - 0xa5, 0x40, 0xe5, 0x16, 0xa5, 0x40, 0xe1, 0x5f, 0xa5, 0x00, 0xe5, 0xf8, - 0xa5, 0x80, 0x11, 0xe9, 0x38, 0xa5, 0x00, 0xef, 0xd0, 0xa5, 0x80, 0x04, - 0xf5, 0xa9, 0xa5, 0x40, 0xef, 0x84, 0xa5, 0x40, 0xe5, 0x13, 0xa5, 0x40, - 0xe1, 0x50, 0xa5, 0x00, 0xe5, 0xe8, 0xa5, 0x80, 0x11, 0xe9, 0x2a, 0xa5, - 0x00, 0xef, 0xc1, 0xa5, 0x80, 0x04, 0xf5, 0x9b, 0xa5, 0x40, 0xef, 0x76, - 0xa5, 0x40, 0xe5, 0x05, 0xa5, 0x40, 0xee, 0xbb, 0xa5, 0x00, 0xef, 0x71, - 0xa5, 0xc0, 0x00, 0xee, 0x72, 0xa5, 0x40, 0xe1, 0x6f, 0xa5, 0x00, 0xa4, - 0x97, 0x01, 0xe5, 0x09, 0xa6, 0x80, 0x8d, 0x01, 0xe7, 0x0b, 0xa6, 0x80, - 0x52, 0xe9, 0x47, 0xa5, 0x00, 0xaa, 0x2e, 0xef, 0xdf, 0xa5, 0x80, 0x25, - 0xf5, 0xb8, 0xa5, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0x70, 0xa5, 0x00, 0xe5, - 0x0a, 0xa6, 0x80, 0x11, 0xe9, 0x48, 0xa5, 0x00, 0xef, 0xe0, 0xa5, 0x80, - 0x04, 0xf5, 0xb9, 0xa5, 0x40, 0xef, 0x94, 0xa5, 0x40, 0xe5, 0x23, 0xa5, - 0x40, 0xef, 0x93, 0xa5, 0x40, 0xe1, 0x68, 0xa5, 0x00, 0xe5, 0x01, 0xa6, - 0x80, 0x11, 0xe9, 0x41, 0xa5, 0x00, 0xef, 0xd9, 0xa5, 0x80, 0x04, 0xf5, - 0xb2, 0xa5, 0x40, 0xef, 0x8d, 0xa5, 0x40, 0xe5, 0x1c, 0xa5, 0x40, 0x42, - 0x1a, 0x00, 0x4b, 0xa5, 0x00, 0x42, 0x92, 0x01, 0xe3, 0xa5, 0x00, 0xa7, - 0x06, 0x42, 0x10, 0x00, 0xbc, 0xa5, 0x40, 0xe1, 0x6c, 0xa5, 0x00, 0xe5, - 0x04, 0xa6, 0x80, 0x11, 0xe9, 0x44, 0xa5, 0x00, 0xef, 0xdc, 0xa5, 0x80, - 0x04, 0xf5, 0xb5, 0xa5, 0x40, 0xef, 0x90, 0xa5, 0x40, 0xe5, 0x1f, 0xa5, - 0x00, 0xee, 0x05, 0xa6, 0x40, 0xe5, 0x22, 0xa5, 0x40, 0xe1, 0x61, 0xa5, - 0x00, 0xe5, 0xfa, 0xa5, 0x80, 0x33, 0xe9, 0x3a, 0xa5, 0x00, 0xef, 0xd2, - 0xa5, 0x80, 0x04, 0xf5, 0xab, 0xa5, 0x40, 0x03, 0x3f, 0x01, 0x04, 0xef, - 0x86, 0xa5, 0x40, 0x42, 0x3b, 0x01, 0x2b, 0xa6, 0x00, 0x42, 0xe1, 0x07, - 0x10, 0xa6, 0x00, 0x42, 0x1b, 0x02, 0x11, 0xa6, 0x00, 0x42, 0x6c, 0x00, - 0x2a, 0xa6, 0x00, 0x43, 0xe1, 0x20, 0x12, 0xa6, 0x40, 0xe5, 0x15, 0xa5, - 0x40, 0xe1, 0x6e, 0xa5, 0x00, 0xa2, 0x3c, 0xe5, 0x08, 0xa6, 0x80, 0x33, - 0x02, 0x50, 0x47, 0x11, 0xe9, 0x46, 0xa5, 0x00, 0xef, 0xde, 0xa5, 0x80, - 0x04, 0xf5, 0xb7, 0xa5, 0x40, 0xef, 0x92, 0xa5, 0x40, 0xe1, 0x56, 0xa5, - 0x00, 0xe5, 0xee, 0xa5, 0x80, 0x11, 0xe9, 0x2f, 0xa5, 0x00, 0xef, 0xc6, - 0xa5, 0x80, 0x04, 0xf5, 0xa0, 0xa5, 0x40, 0xef, 0x7b, 0xa5, 0x40, 0xe5, - 0x0a, 0xa5, 0x40, 0xe5, 0x21, 0xa5, 0x40, 0xe1, 0x53, 0xa5, 0x00, 0xe5, - 0xeb, 0xa5, 0x80, 0x11, 0xe9, 0x2d, 0xa5, 0x00, 0xef, 0xc4, 0xa5, 0x80, - 0x04, 0xf5, 0x9e, 0xa5, 0x40, 0xef, 0x79, 0xa5, 0x40, 0xe5, 0x08, 0xa5, - 0x40, 0xe1, 0x5e, 0xa5, 0x00, 0xe5, 0xf7, 0xa5, 0x80, 0x11, 0xe9, 0x37, - 0xa5, 0x00, 0xef, 0xcf, 0xa5, 0x80, 0x04, 0xf5, 0xa8, 0xa5, 0x40, 0xef, - 0x83, 0xa5, 0x40, 0xe5, 0x12, 0xa5, 0x00, 0x48, 0x8c, 0x55, 0x0c, 0xa6, - 0x40, 0xe1, 0x6a, 0xa5, 0x80, 0x43, 0xe5, 0x03, 0xa6, 0x80, 0x3a, 0xe9, - 0x43, 0xa5, 0x00, 0xef, 0xdb, 0xa5, 0x80, 0x2d, 0xb0, 0x04, 0xf5, 0xb4, - 0xa5, 0x40, 0xe1, 0x54, 0xa5, 0x80, 0x1e, 0xe5, 0xec, 0xa5, 0x80, 0x11, - 0xe9, 0x2e, 0xa5, 0x00, 0xef, 0xc5, 0xa5, 0x80, 0x04, 0xf5, 0x9f, 0xa5, - 0x40, 0xef, 0x7a, 0xa5, 0x40, 0xe5, 0x09, 0xa5, 0x00, 0xee, 0xed, 0xa5, - 0x40, 0xee, 0x55, 0xa5, 0x40, 0xef, 0x8f, 0xa5, 0x40, 0xe5, 0x1e, 0xa5, - 0x40, 0xee, 0x6b, 0xa5, 0x40, 0xe1, 0x67, 0xa5, 0x00, 0xe5, 0x00, 0xa6, - 0x80, 0x11, 0xe9, 0x40, 0xa5, 0x00, 0xef, 0xd8, 0xa5, 0x80, 0x04, 0xf5, - 0xb1, 0xa5, 0x40, 0xef, 0x8c, 0xa5, 0x40, 0xe5, 0x1b, 0xa5, 0x40, 0xee, - 0x25, 0xa5, 0x40, 0xe1, 0x4c, 0xa5, 0x80, 0x2c, 0xe5, 0xe4, 0xa5, 0x80, - 0x1f, 0xe9, 0x26, 0xa5, 0x80, 0x16, 0xef, 0xbd, 0xa5, 0x80, 0x09, 0xf5, - 0x97, 0xa5, 0xc0, 0x00, 0xee, 0x98, 0xa5, 0x40, 0xee, 0xbe, 0xa5, 0x00, - 0xef, 0x73, 0xa5, 0x40, 0xee, 0x27, 0xa5, 0x40, 0xe5, 0x02, 0xa5, 0x00, - 0xee, 0xe5, 0xa5, 0x40, 0xee, 0x4d, 0xa5, 0x40, 0xe1, 0x6d, 0xa5, 0x00, - 0xa2, 0x1e, 0xe5, 0x06, 0xa6, 0x80, 0x11, 0xe9, 0x45, 0xa5, 0x00, 0xef, - 0xdd, 0xa5, 0x80, 0x04, 0xf5, 0xb6, 0xa5, 0x40, 0xef, 0x91, 0xa5, 0x40, - 0xe5, 0x20, 0xa5, 0x00, 0xee, 0x07, 0xa6, 0x40, 0xe1, 0x57, 0xa5, 0x00, - 0xe5, 0xef, 0xa5, 0x80, 0x15, 0xe9, 0x30, 0xa5, 0x00, 0xef, 0xc7, 0xa5, - 0x80, 0x04, 0xf5, 0xa1, 0xa5, 0x40, 0xee, 0xc8, 0xa5, 0x00, 0xef, 0x7c, - 0xa5, 0x40, 0xe5, 0x0b, 0xa5, 0x00, 0xee, 0xf0, 0xa5, 0x40, 0xe1, 0x58, - 0xa5, 0x00, 0xe5, 0xf1, 0xa5, 0x80, 0x11, 0xe9, 0x31, 0xa5, 0x00, 0xef, - 0xc9, 0xa5, 0x80, 0x04, 0xf5, 0xa2, 0xa5, 0x40, 0xef, 0x7d, 0xa5, 0x40, - 0xe5, 0x0c, 0xa5, 0x40, 0xe5, 0x00, 0xa5, 0x80, 0x04, 0xee, 0xe2, 0xa5, - 0x40, 0xee, 0x01, 0xa5, 0x40, 0xe1, 0x60, 0xa5, 0x00, 0xe5, 0xf9, 0xa5, - 0x80, 0x51, 0xa8, 0x11, 0xe9, 0x39, 0xa5, 0x00, 0xef, 0xd1, 0xa5, 0x80, - 0x04, 0xf5, 0xaa, 0xa5, 0x40, 0xef, 0x85, 0xa5, 0x40, 0xe1, 0x5c, 0xa5, - 0x00, 0xe5, 0xf5, 0xa5, 0x80, 0x31, 0xa8, 0x11, 0xe9, 0x35, 0xa5, 0x00, - 0xef, 0xcd, 0xa5, 0x80, 0x04, 0xf5, 0xa6, 0xa5, 0x40, 0xef, 0x81, 0xa5, - 0x40, 0xe1, 0x5d, 0xa5, 0x00, 0xe5, 0xf6, 0xa5, 0x80, 0x11, 0xe9, 0x36, - 0xa5, 0x00, 0xef, 0xce, 0xa5, 0x80, 0x04, 0xf5, 0xa7, 0xa5, 0x40, 0xef, - 0x82, 0xa5, 0x40, 0xe5, 0x11, 0xa5, 0x40, 0xe5, 0x10, 0xa5, 0x40, 0xe5, - 0x14, 0xa5, 0x40, 0xe1, 0x66, 0xa5, 0x00, 0xe5, 0xff, 0xa5, 0x80, 0x11, - 0xe9, 0x3f, 0xa5, 0x00, 0xef, 0xd7, 0xa5, 0x80, 0x04, 0xf5, 0xb0, 0xa5, - 0x40, 0xef, 0x8b, 0xa5, 0x40, 0xe5, 0x1a, 0xa5, 0x40, 0xe1, 0x52, 0xa5, - 0x00, 0xe5, 0xea, 0xa5, 0x80, 0x31, 0xa8, 0x11, 0xe9, 0x2c, 0xa5, 0x00, - 0xef, 0xc3, 0xa5, 0x80, 0x04, 0xf5, 0x9d, 0xa5, 0x40, 0xef, 0x78, 0xa5, - 0x40, 0xe1, 0x51, 0xa5, 0x00, 0xe5, 0xe9, 0xa5, 0x80, 0x11, 0xe9, 0x2b, - 0xa5, 0x00, 0xef, 0xc2, 0xa5, 0x80, 0x04, 0xf5, 0x9c, 0xa5, 0x40, 0xef, - 0x77, 0xa5, 0x40, 0xe5, 0x06, 0xa5, 0x40, 0xe5, 0x07, 0xa5, 0x40, 0xee, - 0x4a, 0xa5, 0x40, 0x45, 0xc3, 0x0a, 0x28, 0xa6, 0x00, 0xa6, 0x2e, 0x44, - 0x46, 0x2a, 0x29, 0xa6, 0x00, 0x43, 0xbf, 0x0a, 0x21, 0xa6, 0x00, 0xb3, - 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x20, 0xa6, 0x40, 0x44, 0x25, 0x01, - 0x23, 0xa6, 0x00, 0x42, 0x15, 0x02, 0x22, 0xa6, 0x40, 0x44, 0x27, 0x1d, - 0x27, 0xa6, 0x00, 0x42, 0x60, 0x25, 0x26, 0xa6, 0x40, 0x43, 0xa7, 0x05, - 0x25, 0xa6, 0x00, 0x43, 0xcb, 0x06, 0x24, 0xa6, 0x40, 0x08, 0xc2, 0xc3, - 0xd2, 0x0d, 0x47, 0xe3, 0x5f, 0x02, 0x26, 0x80, 0xbb, 0x0d, 0xae, 0xc5, - 0x0c, 0xb0, 0x06, 0x45, 0xdd, 0x20, 0x45, 0x26, 0x40, 0x80, 0xad, 0x0b, - 0x8d, 0xb4, 0x0a, 0x04, 0x6f, 0x02, 0xff, 0x03, 0x4e, 0xd6, 0x7a, 0x43, - 0xf6, 0x01, 0x06, 0xa9, 0x01, 0x01, 0xff, 0xa1, 0xff, 0x02, 0x06, 0xe1, - 0x02, 0xee, 0x02, 0x50, 0x0a, 0x60, 0x3d, 0xf8, 0x01, 0xa4, 0xd9, 0x02, - 0x51, 0x91, 0x58, 0x35, 0xf8, 0x01, 0xa8, 0xfa, 0x01, 0x4d, 0xa7, 0x85, - 0xc8, 0x21, 0x00, 0x4f, 0x72, 0x70, 0xf0, 0x27, 0x00, 0x46, 0xa0, 0xdc, - 0x6d, 0xf6, 0x01, 0xb3, 0xd9, 0x01, 0xb4, 0x47, 0x06, 0xad, 0x02, 0x01, - 0xff, 0x45, 0xce, 0x00, 0xe7, 0x21, 0x80, 0x0d, 0x4c, 0x71, 0x8c, 0xee, - 0x21, 0xc0, 0x00, 0x4c, 0x89, 0x89, 0xef, 0x21, 0x40, 0x80, 0x01, 0xff, - 0x48, 0xfd, 0xb1, 0xea, 0x21, 0x80, 0x1e, 0x4b, 0x8a, 0x89, 0xeb, 0x21, - 0x80, 0x06, 0x59, 0x25, 0x1e, 0x95, 0xf8, 0x41, 0x06, 0x50, 0x00, 0x01, - 0xff, 0x4e, 0x0b, 0x00, 0xec, 0x21, 0x00, 0x4c, 0x32, 0x00, 0xed, 0x21, - 0x40, 0x54, 0xf3, 0x3e, 0xb8, 0x2b, 0x40, 0x02, 0x0d, 0x00, 0x1c, 0x02, - 0x15, 0x02, 0x01, 0xff, 0x4d, 0x16, 0x7e, 0x9f, 0x21, 0x00, 0x0e, 0xf0, - 0x05, 0x01, 0xff, 0x51, 0xc4, 0x58, 0x49, 0x29, 0x00, 0x58, 0xfe, 0x05, - 0xed, 0x2b, 0x40, 0x05, 0x04, 0x02, 0x06, 0x49, 0x78, 0x70, 0x0a, 0x29, - 0x40, 0x4a, 0xe0, 0x01, 0x91, 0xf8, 0x01, 0x08, 0x09, 0x02, 0x01, 0xff, - 0x45, 0xce, 0x00, 0x61, 0x2b, 0x80, 0x0c, 0x4c, 0x05, 0x8c, 0x6b, 0x2b, - 0x00, 0x4d, 0xa7, 0x85, 0x85, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x6c, 0xea, - 0x01, 0x81, 0x2b, 0x00, 0x46, 0x82, 0x14, 0x71, 0x2b, 0x00, 0x05, 0x51, - 0x00, 0x01, 0xff, 0x4a, 0x17, 0xa6, 0x29, 0xf8, 0x01, 0x58, 0x85, 0x27, - 0x7b, 0x2b, 0x00, 0x4b, 0xef, 0x66, 0x2d, 0xf8, 0x01, 0x09, 0x4c, 0xb9, - 0x12, 0x4c, 0x3d, 0x90, 0x25, 0xf8, 0x01, 0x4c, 0xa9, 0x90, 0x21, 0xf8, - 0x01, 0x50, 0xea, 0x66, 0x31, 0xf8, 0x41, 0x49, 0xea, 0x01, 0xa2, 0x2b, - 0x00, 0x4a, 0xb3, 0x02, 0xa3, 0x2b, 0x40, 0x4f, 0x6b, 0x65, 0x51, 0xf8, - 0x01, 0x4c, 0x29, 0x92, 0x39, 0xf8, 0x41, 0x11, 0x66, 0x05, 0x11, 0x05, - 0x02, 0x15, 0x01, 0xff, 0x45, 0xce, 0x00, 0x45, 0xf8, 0x01, 0x50, 0x0a, - 0x60, 0x41, 0xf8, 0x41, 0x04, 0xc3, 0x00, 0x19, 0x05, 0xc8, 0x00, 0x01, - 0xff, 0x80, 0x06, 0x45, 0xa9, 0x01, 0xbe, 0x21, 0x40, 0x48, 0xfd, 0xb1, - 0x5c, 0x29, 0x00, 0x46, 0x82, 0x14, 0x54, 0x29, 0x40, 0x80, 0x06, 0x45, - 0xa9, 0x01, 0xbf, 0x21, 0x40, 0x07, 0x43, 0x0a, 0x0c, 0x48, 0xfd, 0xb1, - 0x60, 0x29, 0x00, 0x46, 0x82, 0x14, 0x58, 0x29, 0x40, 0x61, 0x7a, 0x0d, - 0x6e, 0x29, 0x00, 0x5f, 0xb9, 0x11, 0x63, 0x29, 0x40, 0x4b, 0x06, 0x8c, - 0xe1, 0x21, 0x00, 0x4b, 0x72, 0x8c, 0xd1, 0x21, 0x40, 0x45, 0xce, 0x00, - 0x06, 0x2b, 0x00, 0x53, 0x8a, 0x47, 0x89, 0x2b, 0x40, 0x45, 0xd9, 0xe5, - 0x15, 0x2e, 0x00, 0x44, 0xcf, 0x00, 0x91, 0x21, 0xc0, 0x00, 0x80, 0x01, - 0xff, 0x5a, 0x8c, 0x1e, 0xb8, 0xfb, 0x01, 0x48, 0xfd, 0xb1, 0xa5, 0x21, - 0x00, 0x5c, 0xe2, 0x17, 0xc5, 0x21, 0x00, 0x46, 0x82, 0x14, 0x12, 0x29, - 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4d, 0xa0, 0x80, 0xde, 0x21, 0x00, - 0x55, 0xd5, 0x01, 0x15, 0xf8, 0x01, 0x51, 0x1c, 0x05, 0x09, 0x29, 0x00, - 0x58, 0xd5, 0x28, 0x09, 0xf8, 0x01, 0x59, 0x5b, 0x24, 0x05, 0xf8, 0x01, - 0x4c, 0x21, 0x91, 0x99, 0xf8, 0x01, 0x06, 0x0c, 0x07, 0x11, 0x04, 0xfa, - 0x0b, 0x01, 0xff, 0x49, 0xea, 0x01, 0xb0, 0x21, 0x00, 0x4a, 0xb3, 0x02, - 0xb1, 0x21, 0x40, 0x55, 0xd5, 0x01, 0x11, 0xf8, 0x01, 0x52, 0x03, 0x06, - 0x01, 0xf8, 0x41, 0x04, 0x1a, 0x00, 0x8c, 0x06, 0x4e, 0xc4, 0x74, 0x01, - 0x27, 0x00, 0x07, 0x73, 0x02, 0xda, 0x05, 0x52, 0x60, 0x50, 0x84, 0xfb, - 0x01, 0x05, 0x22, 0x00, 0x8e, 0x05, 0x05, 0xc3, 0x00, 0x8c, 0x03, 0x07, - 0x7d, 0x02, 0xd6, 0x02, 0x04, 0xbf, 0x0a, 0xc5, 0x02, 0x06, 0xc8, 0x00, - 0x30, 0x53, 0xb2, 0x4b, 0x86, 0xfb, 0x01, 0xb4, 0x01, 0xff, 0x05, 0x25, - 0x01, 0x06, 0x5b, 0x93, 0x1c, 0x6d, 0xfb, 0x41, 0x4d, 0xb8, 0x4b, 0x83, - 0xfb, 0x01, 0x09, 0x2a, 0x01, 0x01, 0xff, 0x45, 0x33, 0x01, 0x85, 0xfb, - 0x01, 0x56, 0x67, 0x34, 0xa6, 0xce, 0x01, 0x57, 0xf6, 0x2f, 0xad, 0xce, - 0x41, 0x0f, 0xd3, 0x69, 0xac, 0x01, 0x5a, 0x42, 0x1f, 0x50, 0x27, 0x00, - 0xaf, 0x97, 0x01, 0x46, 0x16, 0xdc, 0x10, 0x27, 0x00, 0x03, 0x7c, 0x00, - 0x2f, 0x0f, 0xa4, 0x02, 0x1f, 0xb4, 0x01, 0xff, 0x51, 0x75, 0x54, 0x99, - 0xfb, 0x01, 0x05, 0x1a, 0x01, 0x06, 0x4d, 0x19, 0x7c, 0x33, 0xcc, 0x41, - 0x42, 0x68, 0x00, 0xf9, 0x25, 0x00, 0x51, 0x37, 0x5d, 0x9d, 0xfb, 0x41, - 0x46, 0xe7, 0x02, 0x3f, 0xf5, 0x01, 0x46, 0xab, 0x05, 0x52, 0x27, 0x40, - 0x06, 0x2d, 0x0d, 0x06, 0x4b, 0x47, 0x4b, 0x36, 0xcc, 0x41, 0xa3, 0x22, - 0x0a, 0xe1, 0x07, 0x12, 0x4d, 0x2e, 0x84, 0xb7, 0xcc, 0x01, 0x4f, 0xcb, - 0x71, 0xd3, 0xcc, 0x01, 0x4a, 0x59, 0xaf, 0xb3, 0xcc, 0x41, 0x4b, 0x0b, - 0x23, 0xa9, 0xcc, 0x01, 0x49, 0xf3, 0xba, 0xa7, 0xcc, 0x41, 0x05, 0x8e, - 0x86, 0x06, 0x4b, 0x89, 0x9b, 0xdd, 0x25, 0x40, 0x46, 0x48, 0xd7, 0xc7, - 0xcc, 0x01, 0xab, 0x12, 0x44, 0xb6, 0xee, 0xcf, 0xcc, 0x01, 0x45, 0xe6, - 0xbb, 0xbf, 0xcc, 0x01, 0x44, 0x0a, 0xef, 0xc3, 0xcc, 0x41, 0x43, 0xa1, - 0x01, 0xbb, 0xcc, 0x01, 0x45, 0xd5, 0x71, 0xcb, 0xcc, 0x41, 0x52, 0x5c, - 0x25, 0x93, 0xce, 0x01, 0x62, 0xb1, 0x0c, 0xb1, 0x23, 0x40, 0x1b, 0xf1, - 0x1b, 0x50, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x0a, 0x73, 0x02, 0x31, 0x08, - 0x84, 0x02, 0x17, 0x15, 0x7d, 0x02, 0x01, 0xff, 0x46, 0x73, 0x02, 0x54, - 0xfb, 0x01, 0x4c, 0x09, 0x0f, 0x67, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x55, - 0xfb, 0x41, 0x06, 0x13, 0x01, 0x06, 0x52, 0xf2, 0x54, 0x63, 0xfb, 0x41, - 0x46, 0x73, 0x02, 0x56, 0xfb, 0x01, 0x4c, 0x09, 0x0f, 0x65, 0xfb, 0x41, - 0x06, 0x13, 0x01, 0x06, 0x52, 0xf2, 0x54, 0x62, 0xfb, 0x41, 0x4c, 0x09, - 0x0f, 0x64, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x66, 0xfb, 0x41, 0x46, 0x73, - 0x02, 0x52, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x53, 0xfb, 0x41, 0x4c, 0xc3, - 0x0a, 0x94, 0x25, 0x00, 0x4d, 0xa1, 0x1c, 0x82, 0xfb, 0x41, 0x07, 0x73, - 0x02, 0x21, 0x05, 0xc3, 0x00, 0x11, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x53, - 0x5b, 0x25, 0x97, 0xce, 0x01, 0x4e, 0x18, 0x7c, 0x37, 0xcc, 0x41, 0x53, - 0x5b, 0x25, 0x94, 0xce, 0x01, 0x4e, 0x18, 0x7c, 0x34, 0xcc, 0x41, 0x58, - 0x05, 0x29, 0x95, 0xce, 0x01, 0x59, 0x55, 0x25, 0x96, 0xce, 0x41, 0x0f, - 0xd3, 0x69, 0x96, 0x01, 0x4f, 0x3c, 0x6a, 0xd4, 0x27, 0x00, 0xaf, 0x81, - 0x01, 0x03, 0x7c, 0x00, 0x1f, 0xb4, 0x01, 0xff, 0x52, 0x5e, 0x4c, 0x98, - 0xfb, 0x01, 0x05, 0x1a, 0x01, 0x06, 0x4d, 0x19, 0x7c, 0x30, 0xcc, 0x41, - 0x42, 0x68, 0x00, 0xf8, 0x25, 0x00, 0x51, 0x37, 0x5d, 0x9c, 0xfb, 0x41, - 0x06, 0x2d, 0x0d, 0x06, 0x4b, 0x47, 0x4b, 0x35, 0xcc, 0x41, 0xa3, 0x22, - 0x0a, 0xe1, 0x07, 0x12, 0x4d, 0x2e, 0x84, 0xb6, 0xcc, 0x01, 0x4f, 0xcb, - 0x71, 0xd2, 0xcc, 0x01, 0x4a, 0x59, 0xaf, 0xb2, 0xcc, 0x41, 0x4b, 0x0b, - 0x23, 0xa8, 0xcc, 0x01, 0x49, 0xf3, 0xba, 0xa6, 0xcc, 0x41, 0x05, 0x8e, - 0x86, 0x06, 0x4b, 0x89, 0x9b, 0xdc, 0x25, 0x40, 0x46, 0x48, 0xd7, 0xc6, - 0xcc, 0x01, 0xab, 0x12, 0x44, 0xb6, 0xee, 0xce, 0xcc, 0x01, 0x45, 0xe6, - 0xbb, 0xbe, 0xcc, 0x01, 0x44, 0x0a, 0xef, 0xc2, 0xcc, 0x41, 0x43, 0xa1, - 0x01, 0xba, 0xcc, 0x01, 0x45, 0xd5, 0x71, 0xca, 0xcc, 0x41, 0x52, 0x5c, - 0x25, 0x90, 0xce, 0x01, 0x63, 0x15, 0x0b, 0xb0, 0x23, 0x40, 0x06, 0x13, - 0x01, 0x11, 0x1b, 0x50, 0x1d, 0x01, 0xff, 0x46, 0x73, 0x02, 0x57, 0xfb, - 0x01, 0x45, 0xc8, 0x00, 0x58, 0xfb, 0x41, 0x0a, 0x73, 0x02, 0x32, 0x08, - 0x84, 0x02, 0x17, 0x15, 0x56, 0x1d, 0x01, 0xff, 0x46, 0x73, 0x02, 0x59, - 0xfb, 0x01, 0x4c, 0x09, 0x0f, 0x5c, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x5a, - 0xfb, 0x41, 0x52, 0x46, 0x52, 0x5e, 0xfb, 0x01, 0x06, 0x6d, 0x02, 0x01, - 0xff, 0x46, 0x73, 0x02, 0x5b, 0xfb, 0x01, 0x4c, 0x09, 0x0f, 0x60, 0xfb, - 0x41, 0x52, 0x46, 0x52, 0x5d, 0xfb, 0x01, 0x06, 0x6d, 0x02, 0x01, 0xff, - 0x4c, 0x09, 0x0f, 0x5f, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x61, 0xfb, 0x41, - 0x45, 0x33, 0x01, 0x80, 0x25, 0x80, 0x34, 0x46, 0xe7, 0x02, 0xe0, 0x25, - 0x00, 0x52, 0xde, 0x50, 0x03, 0xce, 0x01, 0x08, 0x11, 0x04, 0x18, 0x56, - 0x67, 0x34, 0xa7, 0xce, 0x01, 0x4c, 0x19, 0x04, 0x8e, 0xfb, 0x01, 0x57, - 0xf6, 0x2f, 0xac, 0xce, 0x01, 0x63, 0x7e, 0x0b, 0x14, 0xce, 0x41, 0x61, - 0xfe, 0x0d, 0x92, 0xfb, 0x01, 0x4c, 0xe3, 0x10, 0xda, 0x25, 0x40, 0x64, - 0x70, 0x08, 0x91, 0xfb, 0x41, 0x05, 0xc3, 0x00, 0x17, 0x51, 0x9d, 0x1c, - 0xe4, 0xfb, 0x01, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x53, 0x5b, 0x25, 0x92, - 0xce, 0x01, 0x4e, 0x18, 0x7c, 0x32, 0xcc, 0x41, 0x53, 0x5b, 0x25, 0x91, - 0xce, 0x01, 0x4e, 0x18, 0x7c, 0x31, 0xcc, 0x41, 0xac, 0x06, 0x6f, 0x09, - 0x01, 0x68, 0xfb, 0x41, 0x6d, 0x65, 0x01, 0x6a, 0xfb, 0x01, 0x05, 0x14, - 0x01, 0x01, 0xff, 0x50, 0xbf, 0x0a, 0x80, 0xfb, 0x01, 0x55, 0xbd, 0x3d, - 0x9a, 0xfb, 0x41, 0x17, 0xa0, 0x2d, 0x66, 0x09, 0x9c, 0x01, 0x01, 0xff, - 0xa1, 0x53, 0x4b, 0x8f, 0x99, 0x79, 0xcc, 0x01, 0x44, 0x9a, 0xec, 0xfb, - 0xcd, 0x01, 0x47, 0x7b, 0xce, 0x00, 0xcc, 0x01, 0x51, 0xe4, 0x5a, 0xe6, - 0xf6, 0x01, 0xb2, 0x21, 0x06, 0x0c, 0x07, 0x11, 0x0e, 0xfc, 0x7b, 0x01, - 0xff, 0x4f, 0xcf, 0x6d, 0xed, 0x25, 0x00, 0x50, 0x3a, 0x65, 0xee, 0x25, - 0x40, 0x48, 0x41, 0x33, 0xe8, 0xf6, 0x01, 0x4c, 0x83, 0x5a, 0x3c, 0xf5, - 0x41, 0x49, 0x40, 0xb3, 0x98, 0xcc, 0x01, 0x4b, 0x65, 0x06, 0x3a, 0xf5, - 0x01, 0x44, 0x75, 0xaa, 0x66, 0xcc, 0x01, 0x4a, 0x4d, 0xac, 0x57, 0xcc, - 0x41, 0x47, 0x42, 0x33, 0xe7, 0xf6, 0x01, 0x4a, 0xb3, 0xaf, 0x61, 0xcc, - 0x41, 0x4c, 0xbd, 0x8b, 0x75, 0xcc, 0x01, 0x4a, 0x9b, 0x28, 0x71, 0xcc, - 0x41, 0x05, 0xce, 0x00, 0x6d, 0x05, 0x72, 0x05, 0x48, 0x05, 0x4f, 0x14, - 0x19, 0x49, 0xa9, 0xb6, 0x7e, 0x29, 0x00, 0x57, 0xc8, 0x2f, 0xf0, 0x22, - 0x00, 0x44, 0x25, 0x38, 0xa5, 0x22, 0xc0, 0x00, 0x52, 0x56, 0x4e, 0xdf, - 0x27, 0x40, 0x45, 0xce, 0x00, 0x95, 0x21, 0x80, 0x1e, 0x4b, 0x95, 0x97, - 0x0d, 0x2b, 0x00, 0x4c, 0x71, 0x8c, 0xd5, 0x21, 0x00, 0x50, 0x6a, 0x65, - 0x59, 0xf8, 0x01, 0x55, 0x01, 0x02, 0x65, 0x2b, 0x00, 0x4b, 0xfa, 0x0f, - 0xf3, 0x21, 0x40, 0x4a, 0x0f, 0xa4, 0xa8, 0x21, 0x40, 0x0f, 0xb1, 0x6d, - 0x11, 0x10, 0x1a, 0x65, 0x01, 0xff, 0x4c, 0x4d, 0x8f, 0x4c, 0x29, 0x00, - 0x4d, 0x0f, 0x86, 0x4f, 0x29, 0x40, 0x4c, 0x4d, 0x8f, 0x51, 0x29, 0x00, - 0x4d, 0x0f, 0x86, 0x4d, 0x29, 0x40, 0x4f, 0x2f, 0x68, 0xbd, 0x29, 0x00, - 0x44, 0xe6, 0x01, 0x03, 0x23, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x5b, 0xd5, - 0x19, 0x24, 0x23, 0x00, 0x52, 0x35, 0x46, 0xb9, 0x2b, 0x40, 0x4b, 0x06, - 0x97, 0x12, 0xf6, 0x01, 0x4e, 0xee, 0x74, 0xd1, 0x2b, 0x00, 0xa4, 0x59, - 0xa9, 0x06, 0x5a, 0x60, 0x20, 0xaf, 0x26, 0x40, 0x49, 0x14, 0xb5, 0x84, - 0xf9, 0x01, 0x42, 0x10, 0x00, 0x2a, 0x22, 0x80, 0x14, 0xb4, 0x06, 0x57, - 0x8f, 0x24, 0x72, 0x26, 0x40, 0x4a, 0x35, 0x20, 0x1f, 0x00, 0x00, 0x49, - 0xc0, 0x75, 0xfa, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x1d, - 0x5c, 0xca, 0x16, 0x4a, 0x2a, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, - 0xe5, 0xaa, 0x45, 0x2a, 0x00, 0x4a, 0x6d, 0x96, 0x41, 0x2a, 0x00, 0x47, - 0x77, 0x7e, 0x42, 0x2a, 0x40, 0x56, 0x2b, 0x32, 0x48, 0x2a, 0x00, 0x4c, - 0x5a, 0x0a, 0x46, 0x2a, 0x40, 0x45, 0x65, 0xc9, 0x3f, 0x20, 0x00, 0x48, - 0xf3, 0xad, 0x8c, 0x23, 0x40, 0x80, 0x01, 0xff, 0x49, 0xab, 0xba, 0xf1, - 0x26, 0x00, 0x4f, 0x51, 0x73, 0x14, 0x26, 0x40, 0x07, 0xc1, 0x05, 0x06, - 0x4c, 0xb3, 0x24, 0x9f, 0x03, 0x41, 0xa1, 0xb3, 0x01, 0x44, 0x8a, 0x97, - 0x81, 0x03, 0x01, 0xa4, 0x9e, 0x01, 0xa7, 0x8f, 0x01, 0x42, 0x0b, 0x00, - 0x85, 0x03, 0x81, 0x81, 0x01, 0xe9, 0x9b, 0x03, 0x01, 0xab, 0x6f, 0x45, - 0xfd, 0xe4, 0x8d, 0x03, 0x01, 0x43, 0x89, 0x05, 0x8e, 0x03, 0x01, 0x43, - 0x54, 0x22, 0x90, 0x03, 0x01, 0x42, 0xb8, 0x0b, 0x94, 0x03, 0x01, 0x44, - 0xee, 0xee, 0x96, 0x03, 0x01, 0x45, 0x0f, 0xe7, 0x97, 0x03, 0x01, 0xb3, - 0x2f, 0xb4, 0x1d, 0xf5, 0x9c, 0x03, 0x01, 0x42, 0x15, 0x02, 0x86, 0x03, - 0x01, 0x43, 0x58, 0x51, 0x8a, 0x03, 0x01, 0xba, 0x01, 0xff, 0x43, 0x45, - 0x0f, 0x87, 0x03, 0x01, 0xf5, 0x91, 0x03, 0x41, 0x42, 0xc2, 0x05, 0x89, - 0x03, 0x01, 0x45, 0xd1, 0xe3, 0x98, 0x03, 0x01, 0xef, 0x9a, 0x03, 0x41, - 0xa1, 0x0c, 0x43, 0x0e, 0x16, 0x8c, 0x03, 0x01, 0x42, 0x6f, 0x00, 0x9d, - 0x03, 0x41, 0x42, 0x04, 0x00, 0x95, 0x03, 0x01, 0x43, 0xd9, 0x51, 0x92, - 0x03, 0x41, 0x42, 0xf5, 0x13, 0x8b, 0x03, 0x01, 0x42, 0x22, 0x00, 0x83, - 0x03, 0x41, 0x42, 0x12, 0x00, 0x88, 0x03, 0x41, 0x44, 0xc6, 0xeb, 0x82, - 0x03, 0x01, 0x44, 0x4b, 0x9a, 0x99, 0x03, 0x41, 0x44, 0x6c, 0xd3, 0x84, - 0x03, 0x01, 0x43, 0x22, 0x00, 0x8f, 0x03, 0x41, 0x42, 0x9e, 0x01, 0x93, - 0x03, 0x01, 0x43, 0x93, 0x79, 0x80, 0x03, 0x41, 0x8d, 0xfa, 0x72, 0xa1, - 0xe3, 0x38, 0xa5, 0x81, 0x2e, 0xa8, 0xee, 0x23, 0xa9, 0xd1, 0x10, 0xaf, - 0xc2, 0x09, 0xb2, 0xd4, 0x06, 0xb5, 0x88, 0x01, 0xb7, 0x01, 0xff, 0x57, - 0x46, 0x2b, 0x39, 0x27, 0x00, 0x57, 0x58, 0x2e, 0x00, 0xf5, 0x01, 0xaf, - 0x01, 0xff, 0x80, 0x06, 0x48, 0x3a, 0xc0, 0x3a, 0x2e, 0x40, 0x5c, 0xae, - 0x16, 0x51, 0x20, 0x00, 0x4c, 0x45, 0x8b, 0xb0, 0xf5, 0x01, 0x58, 0x25, - 0x27, 0x75, 0x2a, 0x00, 0x03, 0xd4, 0x09, 0x44, 0x46, 0x12, 0x85, 0x95, - 0xf4, 0x01, 0x15, 0x32, 0x3b, 0x2e, 0x4e, 0xc6, 0x77, 0xc9, 0x29, 0x00, - 0x08, 0xa3, 0x21, 0x18, 0x51, 0xb5, 0x4d, 0x6c, 0xf4, 0x01, 0x5a, 0x64, - 0x21, 0x88, 0xcc, 0x01, 0x4e, 0x0e, 0x7b, 0xea, 0xf5, 0x01, 0x53, 0xb3, - 0x4d, 0x6d, 0xf4, 0x41, 0x4c, 0x85, 0x8a, 0x07, 0x2a, 0x00, 0x4b, 0xac, - 0x9e, 0x08, 0x2a, 0x40, 0x43, 0x1a, 0x00, 0x55, 0x2a, 0x00, 0x42, 0x0c, - 0x00, 0x56, 0x2a, 0x40, 0x80, 0x06, 0x5a, 0xa9, 0x0b, 0x2a, 0x2e, 0x40, - 0x46, 0x2e, 0x7c, 0x25, 0x20, 0x00, 0x4b, 0xb8, 0x0b, 0x5a, 0x20, 0x40, - 0x49, 0xe8, 0xb6, 0xae, 0x20, 0x00, 0xac, 0xc4, 0x01, 0x4b, 0x2b, 0x9d, - 0x43, 0xf9, 0x01, 0xb2, 0x01, 0xff, 0xab, 0xac, 0x01, 0x04, 0x48, 0x07, - 0x06, 0x43, 0xbd, 0x01, 0x22, 0xf4, 0x41, 0xa1, 0x93, 0x01, 0x06, 0xe1, - 0x02, 0x82, 0x01, 0xa3, 0x74, 0xa4, 0x5b, 0x57, 0xb7, 0x2d, 0x29, 0x21, - 0x00, 0x02, 0xb4, 0x01, 0x3b, 0x4c, 0x69, 0x91, 0x8f, 0xf5, 0x01, 0xb3, - 0x06, 0x51, 0x14, 0x5e, 0xc9, 0x26, 0x40, 0x12, 0xcc, 0x46, 0x1d, 0x48, - 0x6f, 0x58, 0x35, 0x2e, 0x00, 0x46, 0xfc, 0xda, 0x4e, 0x21, 0x00, 0x05, - 0x00, 0x20, 0x01, 0xff, 0x52, 0xe2, 0x4f, 0x57, 0xf6, 0x01, 0x52, 0x3a, - 0x55, 0x55, 0xf6, 0x41, 0xe7, 0x41, 0x21, 0x00, 0xec, 0x42, 0x21, 0x00, - 0xf9, 0x44, 0x21, 0x40, 0x04, 0xb6, 0x01, 0x06, 0x46, 0x75, 0x32, 0x19, - 0x23, 0x40, 0x52, 0xe2, 0x4f, 0x56, 0xf6, 0x01, 0x52, 0x3a, 0x55, 0x54, - 0xf6, 0x41, 0x45, 0xf1, 0xd7, 0x38, 0x2e, 0x00, 0x06, 0x87, 0x15, 0x01, - 0xff, 0x44, 0x25, 0x01, 0x8b, 0x21, 0x00, 0x42, 0x15, 0x02, 0x8a, 0x21, - 0x40, 0x48, 0xe2, 0xc0, 0x32, 0x21, 0x00, 0x44, 0xe9, 0x04, 0x32, 0x2e, - 0x40, 0x48, 0x3a, 0xc7, 0xc2, 0x2b, 0x00, 0x4b, 0x1a, 0x5e, 0xca, 0x26, - 0x40, 0x48, 0x2e, 0x3d, 0x4b, 0x21, 0x00, 0x44, 0x05, 0x02, 0xa2, 0x29, - 0x40, 0x42, 0x3f, 0x1c, 0x83, 0xf9, 0x01, 0x4d, 0xdc, 0x82, 0xba, 0x20, - 0x40, 0x42, 0x8f, 0x04, 0x37, 0xf3, 0x01, 0x0b, 0xcf, 0xa1, 0x01, 0xff, - 0x4e, 0x9a, 0x74, 0xc9, 0x13, 0x01, 0x49, 0x0b, 0xb5, 0xd0, 0x13, 0x01, - 0xa4, 0xd6, 0x03, 0x4f, 0xe0, 0x6b, 0xd2, 0x13, 0x01, 0x07, 0xc1, 0x05, - 0xa2, 0x01, 0x45, 0x32, 0xe7, 0xd1, 0x13, 0x01, 0x05, 0x2f, 0x03, 0x5b, - 0xb6, 0x01, 0xff, 0x0a, 0x7f, 0xa7, 0x48, 0x0a, 0xd2, 0x75, 0x01, 0xff, - 0xa1, 0x35, 0x42, 0x27, 0x01, 0xc2, 0x13, 0x01, 0xe9, 0xb9, 0x13, 0x81, - 0x26, 0x42, 0x69, 0x05, 0xc7, 0x13, 0x01, 0xf5, 0xbb, 0x13, 0x81, 0x17, - 0x08, 0x9b, 0xbe, 0x01, 0xff, 0xec, 0xbf, 0x13, 0x81, 0x09, 0xf2, 0xbd, - 0x13, 0xc1, 0x00, 0xf2, 0xbe, 0x13, 0x41, 0xec, 0xc0, 0x13, 0x41, 0xf5, - 0xbc, 0x13, 0x41, 0xe9, 0xba, 0x13, 0x41, 0xe1, 0xb8, 0x13, 0x01, 0xe9, - 0xc5, 0x13, 0x01, 0xf5, 0xc8, 0x13, 0x41, 0x48, 0x68, 0x7b, 0xe2, 0x13, - 0x01, 0x47, 0xa5, 0x0a, 0xe1, 0x13, 0x41, 0xa1, 0x2f, 0x50, 0xba, 0x5f, - 0xca, 0x13, 0x01, 0x4d, 0x92, 0x83, 0xcf, 0x13, 0x01, 0x4b, 0x75, 0x9e, - 0xd7, 0x13, 0x01, 0x45, 0xce, 0xe6, 0xd3, 0x13, 0x01, 0x4e, 0xc8, 0x7a, - 0xd8, 0x13, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, 0xce, - 0x13, 0x01, 0x45, 0xa3, 0x4a, 0xcd, 0x13, 0x41, 0x47, 0xd1, 0x15, 0xcc, - 0x13, 0x01, 0x47, 0xf2, 0x86, 0xb7, 0x13, 0x41, 0xe1, 0x80, 0x13, 0x81, - 0x97, 0x02, 0xa2, 0x8a, 0x02, 0xa3, 0xfd, 0x01, 0xa4, 0xe4, 0x01, 0x42, - 0x27, 0x01, 0x8b, 0x13, 0x01, 0xa7, 0xd1, 0x01, 0x42, 0x22, 0x00, 0xb2, - 0x13, 0x01, 0xe9, 0x82, 0x13, 0x81, 0xc1, 0x01, 0xaa, 0xb4, 0x01, 0xab, - 0xa7, 0x01, 0xac, 0x93, 0x01, 0x42, 0x6c, 0x00, 0xaa, 0x13, 0x01, 0xae, - 0x75, 0x42, 0x69, 0x05, 0x90, 0x13, 0x01, 0xb0, 0x63, 0xb2, 0x57, 0xb3, - 0x45, 0xb4, 0x2c, 0xf5, 0x84, 0x13, 0x81, 0x23, 0xb6, 0x06, 0x42, 0x34, - 0x22, 0xab, 0x13, 0x41, 0xe1, 0xae, 0x13, 0x01, 0x07, 0x9c, 0xbe, 0x01, - 0xff, 0xec, 0x88, 0x13, 0x81, 0x09, 0xf2, 0x86, 0x13, 0xc1, 0x00, 0xf2, - 0x87, 0x13, 0x41, 0xec, 0x89, 0x13, 0x41, 0xf5, 0x85, 0x13, 0x41, 0xe1, - 0xa1, 0x13, 0x01, 0x42, 0x22, 0x00, 0xa2, 0x13, 0x01, 0xb4, 0x01, 0xff, - 0xe1, 0x9c, 0x13, 0x01, 0x42, 0x22, 0x00, 0x9d, 0x13, 0x41, 0xe1, 0xb1, - 0x13, 0x01, 0x42, 0x22, 0x00, 0xaf, 0x13, 0x01, 0x42, 0x15, 0x06, 0xb0, - 0x13, 0x41, 0xe1, 0xac, 0x13, 0x01, 0x42, 0x71, 0x00, 0xb4, 0x13, 0x41, - 0xe1, 0xa6, 0x13, 0x01, 0x42, 0x22, 0x00, 0xa7, 0x13, 0x41, 0xe1, 0xa5, - 0x13, 0x01, 0x42, 0x24, 0x02, 0x96, 0x13, 0x01, 0x42, 0xff, 0x04, 0xa0, - 0x13, 0x01, 0x42, 0x34, 0x22, 0x9b, 0x13, 0x41, 0xe1, 0xad, 0x13, 0x01, - 0xac, 0x01, 0xff, 0xe1, 0xb3, 0x13, 0x01, 0x42, 0x74, 0x00, 0xb5, 0x13, - 0x41, 0xe1, 0x92, 0x13, 0x01, 0x42, 0x22, 0x00, 0x93, 0x13, 0x41, 0xe1, - 0x99, 0x13, 0x01, 0x42, 0x22, 0x00, 0x9a, 0x13, 0x41, 0xe9, 0x83, 0x13, - 0x41, 0xe1, 0x94, 0x13, 0x01, 0x42, 0x22, 0x00, 0x95, 0x13, 0x41, 0xe1, - 0xa3, 0x13, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa4, 0x13, 0x41, 0xe1, - 0x9e, 0x13, 0x01, 0x42, 0x22, 0x00, 0x9f, 0x13, 0x41, 0xe1, 0x97, 0x13, - 0x01, 0x42, 0x22, 0x00, 0x98, 0x13, 0x41, 0xe1, 0xa8, 0x13, 0x01, 0x42, - 0x22, 0x00, 0xa9, 0x13, 0x41, 0xe1, 0x81, 0x13, 0x01, 0xe9, 0x8e, 0x13, - 0x01, 0xf5, 0x91, 0x13, 0x41, 0x44, 0xd1, 0x1f, 0xd4, 0x13, 0x01, 0x4b, - 0xd8, 0x9e, 0xd5, 0x13, 0x41, 0xa1, 0xb2, 0x02, 0xa9, 0x3d, 0xaf, 0x14, - 0xb5, 0x01, 0xff, 0xe5, 0xa8, 0x22, 0x80, 0x06, 0x44, 0xfe, 0xed, 0xba, - 0xf3, 0x41, 0x50, 0xba, 0x5e, 0xdf, 0x2b, 0x40, 0x42, 0x0f, 0x07, 0xcc, - 0xf9, 0x81, 0x1a, 0xb0, 0x01, 0xff, 0x42, 0xb5, 0x45, 0xc6, 0xf3, 0x01, - 0x05, 0x36, 0x00, 0x01, 0xff, 0x45, 0xb9, 0xcd, 0x79, 0xf3, 0x01, 0x44, - 0xbf, 0x59, 0x20, 0xf4, 0x41, 0x45, 0x2c, 0xe3, 0x8e, 0xf6, 0x41, 0x03, - 0x1c, 0x01, 0xb1, 0x01, 0x45, 0xc4, 0x3a, 0x5d, 0x20, 0x00, 0x4b, 0xc9, - 0x98, 0x31, 0xf5, 0x01, 0x09, 0x24, 0x94, 0x6e, 0x04, 0xcb, 0x1c, 0x01, - 0xff, 0x4e, 0xfc, 0x74, 0xf6, 0x2a, 0x00, 0x46, 0xf0, 0xd7, 0x4b, 0x2e, - 0x00, 0x14, 0xc4, 0x29, 0x4d, 0x48, 0xf3, 0x25, 0x2d, 0x22, 0x00, 0x07, - 0xab, 0xd0, 0x37, 0xb0, 0x29, 0x57, 0x69, 0x30, 0xfb, 0x2a, 0x00, 0x45, - 0xad, 0x22, 0x4b, 0x22, 0x00, 0x0d, 0x42, 0x01, 0x01, 0xff, 0x4f, 0x71, - 0x30, 0xf4, 0x2a, 0x00, 0x49, 0x0b, 0x38, 0x80, 0x29, 0x00, 0x4f, 0x56, - 0x01, 0xaa, 0x22, 0x00, 0x56, 0x53, 0x37, 0xf5, 0x2a, 0x40, 0x43, 0xb8, - 0x27, 0xfb, 0x29, 0x00, 0x44, 0x64, 0x1a, 0x34, 0x20, 0x40, 0x4c, 0x87, - 0x00, 0xf8, 0x2a, 0x00, 0x49, 0xec, 0x00, 0xf7, 0x2a, 0x40, 0x56, 0xc5, - 0x32, 0x68, 0x2a, 0x00, 0x56, 0xcf, 0x36, 0x69, 0x2a, 0x40, 0x45, 0xb8, - 0x70, 0x37, 0x26, 0x00, 0x44, 0x91, 0x8f, 0x32, 0x26, 0x00, 0x46, 0x28, - 0x7a, 0x30, 0x26, 0x00, 0x44, 0x0f, 0x2e, 0x31, 0x26, 0x00, 0x48, 0x33, - 0x34, 0x36, 0x26, 0x00, 0x47, 0x7f, 0x79, 0x33, 0x26, 0x00, 0xb7, 0x01, - 0xff, 0x44, 0x8a, 0x00, 0x35, 0x26, 0x00, 0x43, 0xbe, 0x06, 0x34, 0x26, - 0x40, 0x02, 0x68, 0x00, 0x17, 0x05, 0x1f, 0x01, 0x01, 0xff, 0x46, 0x2a, - 0x21, 0x23, 0x20, 0x00, 0x4c, 0x3d, 0x8d, 0xa9, 0xf6, 0x01, 0x45, 0x1a, - 0x2f, 0xd0, 0xf4, 0x41, 0x06, 0x50, 0x00, 0x06, 0x58, 0x70, 0x06, 0x9d, - 0x27, 0x40, 0x49, 0x98, 0x1d, 0xca, 0x29, 0x00, 0x4f, 0xb3, 0x18, 0xc6, - 0xf6, 0x01, 0x50, 0x7a, 0x65, 0xcd, 0x29, 0x00, 0x48, 0x78, 0x58, 0xcb, - 0x29, 0x40, 0xa3, 0x28, 0x4c, 0x11, 0x8c, 0x22, 0x21, 0x00, 0x42, 0x9e, - 0x01, 0x86, 0xf6, 0x01, 0xed, 0x8a, 0xf6, 0x81, 0x11, 0x02, 0x5f, 0x01, - 0x01, 0xff, 0x45, 0xd3, 0xe6, 0xd7, 0x2b, 0x00, 0x53, 0x67, 0x4d, 0xdb, - 0x2a, 0x40, 0x44, 0x46, 0x63, 0x8b, 0xf6, 0x41, 0x45, 0xb2, 0xe4, 0xb2, - 0xf5, 0x01, 0x43, 0x9c, 0x07, 0x9c, 0xf6, 0x41, 0x0c, 0x29, 0x8c, 0xd4, - 0x04, 0x44, 0xcc, 0x36, 0xbd, 0xf6, 0x01, 0x49, 0xbc, 0xb8, 0xfc, 0xf5, - 0x01, 0x44, 0x4e, 0x38, 0x45, 0xf3, 0x01, 0x44, 0x36, 0x66, 0x45, 0xf4, - 0x01, 0xaf, 0xa6, 0x04, 0x02, 0x20, 0x00, 0x8f, 0x02, 0x17, 0x24, 0x30, - 0xbf, 0x01, 0xb4, 0x01, 0xff, 0x49, 0x88, 0xb3, 0x30, 0x23, 0x00, 0x02, - 0x7b, 0x02, 0x01, 0xff, 0x07, 0xc1, 0x05, 0x06, 0x50, 0x9a, 0x65, 0xae, - 0xe2, 0x41, 0xe1, 0xad, 0xe2, 0x81, 0x9d, 0x01, 0xa2, 0x7a, 0x43, 0xef, - 0x1f, 0x9a, 0xe2, 0x01, 0x42, 0xa1, 0x10, 0x93, 0xe2, 0x01, 0xe5, 0xa6, + 0xab, 0x33, 0x45, 0x1a, 0x01, 0x49, 0xa0, 0x1b, 0x3f, 0x1a, 0x41, 0x06, + 0x6a, 0x3d, 0x27, 0x06, 0xfe, 0x2d, 0x01, 0xff, 0x0d, 0xdf, 0x82, 0x06, + 0x51, 0x2e, 0x5b, 0x3a, 0x1a, 0x41, 0x42, 0x74, 0x00, 0x3d, 0x1a, 0x01, + 0x42, 0x71, 0x00, 0x3c, 0x1a, 0x01, 0x42, 0xf5, 0x0a, 0x3e, 0x1a, 0x01, + 0x42, 0xbc, 0x22, 0x3b, 0x1a, 0x41, 0x56, 0xab, 0x33, 0x46, 0x1a, 0x01, + 0x49, 0xa0, 0x1b, 0x40, 0x1a, 0x41, 0x4e, 0x25, 0x76, 0xff, 0x22, 0x00, + 0x56, 0x69, 0x33, 0x64, 0x2a, 0x00, 0x05, 0xc3, 0x00, 0x46, 0xb2, 0x27, + 0xb3, 0x06, 0x4a, 0x5d, 0xb2, 0x82, 0x29, 0x40, 0x06, 0x82, 0xda, 0x06, + 0x43, 0x14, 0x45, 0x81, 0x29, 0x40, 0x4b, 0xe6, 0x3a, 0x1f, 0x2a, 0x00, + 0xb0, 0x01, 0xff, 0x45, 0x8b, 0xe7, 0x20, 0x2a, 0x00, 0x49, 0xd9, 0xbe, + 0x21, 0x2a, 0x40, 0x54, 0xa0, 0x40, 0x65, 0x2a, 0x00, 0x55, 0xdc, 0x3a, + 0x3e, 0x2a, 0x00, 0x05, 0xc9, 0x00, 0x01, 0xff, 0x4f, 0x4f, 0x6b, 0x8a, + 0x29, 0x00, 0x4d, 0x31, 0x84, 0x88, 0x29, 0x40, 0x4f, 0x4f, 0x6b, 0x89, + 0x29, 0x00, 0x4d, 0x31, 0x84, 0x87, 0x29, 0x40, 0xa1, 0x89, 0x2e, 0xa5, + 0xc4, 0x2b, 0xa9, 0x06, 0x44, 0xb1, 0xf1, 0x80, 0xfa, 0x41, 0x80, 0x06, + 0x46, 0x1e, 0xde, 0x2f, 0x26, 0x40, 0x08, 0x58, 0xa5, 0xcd, 0x28, 0x09, + 0x1a, 0x18, 0x01, 0xff, 0xe1, 0x0a, 0xa0, 0x80, 0xb6, 0x28, 0xa2, 0x94, + 0x26, 0xa3, 0x87, 0x24, 0xa4, 0x9d, 0x22, 0xe5, 0x14, 0xa0, 0x80, 0x93, + 0x22, 0xa6, 0xb6, 0x21, 0xa7, 0xb7, 0x1f, 0xa8, 0x8b, 0x1b, 0xe9, 0x02, + 0xa0, 0x80, 0xe1, 0x1a, 0xaa, 0xf8, 0x18, 0xab, 0xfd, 0x17, 0xac, 0xe3, + 0x16, 0xad, 0xf6, 0x14, 0xae, 0xab, 0x0e, 0xef, 0x11, 0xa0, 0x80, 0x99, + 0x0e, 0xb0, 0x95, 0x0d, 0xb1, 0x9a, 0x0c, 0xb2, 0xba, 0x0a, 0xb3, 0xb4, + 0x07, 0xb4, 0xb9, 0x06, 0x42, 0x1a, 0x05, 0x0d, 0xa0, 0x80, 0xa9, 0x06, + 0xb6, 0xa4, 0x05, 0xb7, 0xe4, 0x04, 0xb8, 0x89, 0x04, 0xb9, 0x8e, 0x03, + 0xba, 0x01, 0xff, 0xe1, 0x96, 0xa2, 0x80, 0xf9, 0x02, 0xe5, 0xa0, 0xa2, + 0x80, 0xeb, 0x02, 0xa8, 0xf4, 0x01, 0xe9, 0x8f, 0xa2, 0x80, 0xd5, 0x01, + 0xef, 0x9d, 0xa2, 0x80, 0xc3, 0x01, 0xf5, 0xa4, 0xa2, 0x80, 0x9b, 0x01, + 0xf9, 0xaa, 0xa2, 0x80, 0x80, 0x01, 0xba, 0x01, 0xff, 0xe1, 0xda, 0xa2, + 0x80, 0x6c, 0xe5, 0xe0, 0xa2, 0x80, 0x5f, 0xe9, 0xd2, 0xa2, 0x80, 0x3d, + 0xef, 0xdd, 0xa2, 0x80, 0x30, 0xf5, 0xe3, 0xa2, 0x80, 0x1a, 0xf9, 0xe9, + 0xa2, 0xc0, 0x00, 0xf0, 0xea, 0xa2, 0x00, 0xf2, 0xec, 0xa2, 0x80, 0x08, + 0xf4, 0xe7, 0xa2, 0x00, 0xf8, 0xe8, 0xa2, 0x40, 0xf8, 0xeb, 0xa2, 0x40, + 0xf0, 0xe4, 0xa2, 0x00, 0xf2, 0xe6, 0xa2, 0x80, 0x04, 0xf8, 0xe2, 0xa2, + 0x40, 0xf8, 0xe5, 0xa2, 0x40, 0xf0, 0xde, 0xa2, 0x00, 0xf8, 0xdc, 0xa2, + 0x40, 0xe5, 0xd6, 0xa2, 0x80, 0x0c, 0xf0, 0xd3, 0xa2, 0x00, 0xf4, 0xd0, + 0xa2, 0x00, 0xf8, 0xd1, 0xa2, 0x40, 0xf0, 0xd7, 0xa2, 0x00, 0xf4, 0xd4, + 0xa2, 0x00, 0xf8, 0xd5, 0xa2, 0x40, 0xf0, 0xe1, 0xa2, 0x00, 0xf8, 0xdf, + 0xa2, 0x40, 0xf0, 0xdb, 0xa2, 0x00, 0xf4, 0xd8, 0xa2, 0x00, 0xf8, 0xd9, + 0xa2, 0x40, 0xf0, 0xab, 0xa2, 0x00, 0xf2, 0xad, 0xa2, 0x80, 0x08, 0xf4, + 0xa8, 0xa2, 0x00, 0xf8, 0xa9, 0xa2, 0x40, 0xf8, 0xac, 0xa2, 0x40, 0xef, + 0x99, 0xa2, 0x80, 0x15, 0xf0, 0xa5, 0xa2, 0x00, 0xf2, 0xa7, 0xa2, 0x80, + 0x08, 0xf4, 0xa2, 0xa2, 0x00, 0xf8, 0xa3, 0xa2, 0x40, 0xf8, 0xa6, 0xa2, + 0x40, 0xf0, 0x9a, 0xa2, 0x00, 0xf8, 0x98, 0xa2, 0x40, 0xf0, 0x9e, 0xa2, + 0x00, 0xf4, 0x9b, 0xa2, 0x00, 0xf8, 0x9c, 0xa2, 0x40, 0xe5, 0x92, 0xa2, + 0x80, 0x0c, 0xf0, 0x90, 0xa2, 0x00, 0xf4, 0x8d, 0xa2, 0x00, 0xf8, 0x8e, + 0xa2, 0x40, 0xf0, 0x93, 0xa2, 0x00, 0xf8, 0x91, 0xa2, 0x40, 0xe1, 0x48, + 0xa3, 0x80, 0x63, 0xe5, 0x53, 0xa3, 0x80, 0x52, 0xef, 0x4f, 0xa3, 0x80, + 0x41, 0xf5, 0x57, 0xa3, 0x80, 0x1a, 0xf9, 0x5d, 0xa3, 0xc0, 0x00, 0xf0, + 0x5e, 0xa3, 0x00, 0xf2, 0x60, 0xa3, 0x80, 0x08, 0xf4, 0x5b, 0xa3, 0x00, + 0xf8, 0x5c, 0xa3, 0x40, 0xf8, 0x5f, 0xa3, 0x40, 0xef, 0x4b, 0xa3, 0x80, + 0x15, 0xf0, 0x58, 0xa3, 0x00, 0xf2, 0x5a, 0xa3, 0x80, 0x08, 0xf4, 0x55, + 0xa3, 0x00, 0xf8, 0x56, 0xa3, 0x40, 0xf8, 0x59, 0xa3, 0x40, 0xf0, 0x4c, + 0xa3, 0x00, 0xf8, 0x4a, 0xa3, 0x40, 0xf0, 0x50, 0xa3, 0x00, 0xf4, 0x4d, + 0xa3, 0x00, 0xf8, 0x4e, 0xa3, 0x40, 0xf0, 0x54, 0xa3, 0x00, 0xf4, 0x51, + 0xa3, 0x00, 0xf8, 0x52, 0xa3, 0x40, 0xf0, 0x49, 0xa3, 0x00, 0xf4, 0x46, + 0xa3, 0x00, 0xf8, 0x47, 0xa3, 0x40, 0xf0, 0xa1, 0xa2, 0x00, 0xf8, 0x9f, + 0xa2, 0x40, 0xf0, 0x97, 0xa2, 0x00, 0xf4, 0x94, 0xa2, 0x00, 0xf8, 0x95, + 0xa2, 0x40, 0xe9, 0x73, 0xa4, 0x80, 0x56, 0xef, 0x7f, 0xa4, 0x80, 0x45, + 0xf5, 0x83, 0xa4, 0x80, 0x1a, 0xf9, 0x89, 0xa4, 0xc0, 0x00, 0xf0, 0x8a, + 0xa4, 0x00, 0xf2, 0x8c, 0xa4, 0x80, 0x08, 0xf4, 0x87, 0xa4, 0x00, 0xf8, + 0x88, 0xa4, 0x40, 0xf8, 0x8b, 0xa4, 0x40, 0xef, 0x7b, 0xa4, 0x80, 0x15, + 0xf0, 0x84, 0xa4, 0x00, 0xf2, 0x86, 0xa4, 0x80, 0x08, 0xf4, 0x81, 0xa4, + 0x00, 0xf8, 0x82, 0xa4, 0x40, 0xf8, 0x85, 0xa4, 0x40, 0xf0, 0x7c, 0xa4, + 0x00, 0xf4, 0x79, 0xa4, 0x00, 0xf8, 0x7a, 0xa4, 0x40, 0xf0, 0x80, 0xa4, + 0x00, 0xf4, 0x7d, 0xa4, 0x00, 0xf8, 0x7e, 0xa4, 0x40, 0xe5, 0x77, 0xa4, + 0x80, 0x0c, 0xf0, 0x74, 0xa4, 0x00, 0xf4, 0x71, 0xa4, 0x00, 0xf8, 0x72, + 0xa4, 0x40, 0xf0, 0x78, 0xa4, 0x00, 0xf4, 0x75, 0xa4, 0x00, 0xf8, 0x76, + 0xa4, 0x40, 0xe9, 0x5f, 0xa4, 0x80, 0x36, 0xef, 0x69, 0xa4, 0x80, 0x25, + 0x42, 0x1a, 0x05, 0x66, 0xa4, 0x80, 0x1a, 0xf9, 0x6d, 0xa4, 0xc0, 0x00, + 0xf0, 0x6e, 0xa4, 0x00, 0xf2, 0x70, 0xa4, 0x80, 0x08, 0xf4, 0x6b, 0xa4, + 0x00, 0xf8, 0x6c, 0xa4, 0x40, 0xf8, 0x6f, 0xa4, 0x40, 0xf8, 0x65, 0xa4, + 0x40, 0xf0, 0x6a, 0xa4, 0x00, 0xf4, 0x67, 0xa4, 0x00, 0xf8, 0x68, 0xa4, + 0x40, 0xe5, 0x63, 0xa4, 0x80, 0x0c, 0xf0, 0x60, 0xa4, 0x00, 0xf4, 0x5d, + 0xa4, 0x00, 0xf8, 0x5e, 0xa4, 0x40, 0xf0, 0x64, 0xa4, 0x00, 0xf4, 0x61, + 0xa4, 0x00, 0xf8, 0x62, 0xa4, 0x40, 0xe1, 0x82, 0xa2, 0x80, 0x2c, 0xe5, + 0x8b, 0xa2, 0x80, 0x1f, 0xef, 0x88, 0xa2, 0x80, 0x12, 0xf5, 0x15, 0xa0, + 0xc0, 0x00, 0xef, 0x85, 0xa2, 0xc0, 0x00, 0xf0, 0x86, 0xa2, 0x00, 0xf8, + 0x84, 0xa2, 0x40, 0xf0, 0x89, 0xa2, 0x00, 0xf8, 0x87, 0xa2, 0x40, 0xf0, + 0x8c, 0xa2, 0x00, 0xf8, 0x8a, 0xa2, 0x40, 0xf0, 0x83, 0xa2, 0x00, 0xf4, + 0x80, 0xa2, 0x00, 0xf8, 0x81, 0xa2, 0x40, 0xe1, 0xec, 0xa0, 0x80, 0x71, + 0xa5, 0x67, 0xe9, 0xe4, 0xa0, 0x80, 0x45, 0xef, 0xf0, 0xa0, 0x80, 0x34, + 0xf5, 0xf6, 0xa0, 0x80, 0x1a, 0xf9, 0xfc, 0xa0, 0xc0, 0x00, 0xf0, 0xfd, + 0xa0, 0x00, 0xf2, 0xff, 0xa0, 0x80, 0x08, 0xf4, 0xfa, 0xa0, 0x00, 0xf8, + 0xfb, 0xa0, 0x40, 0xf8, 0xfe, 0xa0, 0x40, 0xf0, 0xf7, 0xa0, 0x00, 0xf2, + 0xf9, 0xa0, 0x80, 0x08, 0xf4, 0xf4, 0xa0, 0x00, 0xf8, 0xf5, 0xa0, 0x40, + 0xf8, 0xf8, 0xa0, 0x40, 0xf0, 0xf1, 0xa0, 0x00, 0xf4, 0xee, 0xa0, 0x00, + 0xf8, 0xef, 0xa0, 0x40, 0xe5, 0xe8, 0xa0, 0x80, 0x0c, 0xf0, 0xe5, 0xa0, + 0x00, 0xf4, 0xe2, 0xa0, 0x00, 0xf8, 0xe3, 0xa0, 0x40, 0xf0, 0xe9, 0xa0, + 0x00, 0xf4, 0xe6, 0xa0, 0x00, 0xf8, 0xe7, 0xa0, 0x40, 0xf0, 0xf3, 0xa0, + 0x00, 0xf8, 0xf2, 0xa0, 0x40, 0xf0, 0xed, 0xa0, 0x00, 0xf4, 0xea, 0xa0, + 0x00, 0xf8, 0xeb, 0xa0, 0x40, 0xf0, 0x0e, 0xa0, 0x00, 0xf8, 0x0c, 0xa0, + 0x40, 0xe1, 0x23, 0xa1, 0x80, 0x67, 0xe5, 0x2e, 0xa1, 0x80, 0x5a, 0xe9, + 0x1c, 0xa1, 0x80, 0x3c, 0xef, 0x2b, 0xa1, 0x80, 0x2b, 0xf5, 0x32, 0xa1, + 0xc0, 0x00, 0xef, 0x27, 0xa1, 0x80, 0x15, 0xf0, 0x33, 0xa1, 0x00, 0xf2, + 0x35, 0xa1, 0x80, 0x08, 0xf4, 0x30, 0xa1, 0x00, 0xf8, 0x31, 0xa1, 0x40, + 0xf8, 0x34, 0xa1, 0x40, 0xf0, 0x28, 0xa1, 0x00, 0xf4, 0x25, 0xa1, 0x00, + 0xf8, 0x26, 0xa1, 0x40, 0xf0, 0x2c, 0xa1, 0x00, 0xf4, 0x29, 0xa1, 0x00, + 0xf8, 0x2a, 0xa1, 0x40, 0xe5, 0x1f, 0xa1, 0x80, 0x0c, 0xf0, 0x1d, 0xa1, + 0x00, 0xf4, 0x1a, 0xa1, 0x00, 0xf8, 0x1b, 0xa1, 0x40, 0xf0, 0x20, 0xa1, + 0x00, 0xf8, 0x1e, 0xa1, 0x40, 0xf0, 0x2f, 0xa1, 0x00, 0xf8, 0x2d, 0xa1, + 0x40, 0xf0, 0x24, 0xa1, 0x00, 0xf4, 0x21, 0xa1, 0x00, 0xf8, 0x22, 0xa1, + 0x40, 0xe1, 0x12, 0xa3, 0x80, 0xf1, 0x02, 0xe5, 0x1c, 0xa3, 0x80, 0xe3, + 0x02, 0xa8, 0xec, 0x01, 0xe9, 0x0b, 0xa3, 0x80, 0xcd, 0x01, 0xef, 0x19, + 0xa3, 0x80, 0xbb, 0x01, 0xb3, 0x41, 0xf5, 0x20, 0xa3, 0x80, 0x1a, 0xf9, + 0x26, 0xa3, 0xc0, 0x00, 0xf0, 0x27, 0xa3, 0x00, 0xf2, 0x29, 0xa3, 0x80, + 0x08, 0xf4, 0x24, 0xa3, 0x00, 0xf8, 0x25, 0xa3, 0x40, 0xf8, 0x28, 0xa3, + 0x40, 0xef, 0x15, 0xa3, 0x80, 0x15, 0xf0, 0x21, 0xa3, 0x00, 0xf2, 0x23, + 0xa3, 0x80, 0x08, 0xf4, 0x1e, 0xa3, 0x00, 0xf8, 0x1f, 0xa3, 0x40, 0xf8, + 0x22, 0xa3, 0x40, 0xf0, 0x16, 0xa3, 0x00, 0xf8, 0x14, 0xa3, 0x40, 0xe1, + 0x33, 0xa3, 0x80, 0x67, 0xe5, 0x3a, 0xa3, 0x80, 0x5a, 0xe9, 0x2c, 0xa3, + 0x80, 0x3c, 0xef, 0x37, 0xa3, 0x80, 0x2b, 0xf5, 0x3e, 0xa3, 0x80, 0x1a, + 0xf9, 0x42, 0xa3, 0xc0, 0x00, 0xf0, 0x43, 0xa3, 0x00, 0xf2, 0x45, 0xa3, + 0x80, 0x08, 0xf4, 0x40, 0xa3, 0x00, 0xf8, 0x41, 0xa3, 0x40, 0xf8, 0x44, + 0xa3, 0x40, 0xf0, 0x3f, 0xa3, 0x00, 0xf4, 0x3c, 0xa3, 0x00, 0xf8, 0x3d, + 0xa3, 0x40, 0xf0, 0x38, 0xa3, 0x00, 0xf4, 0x35, 0xa3, 0x00, 0xf8, 0x36, + 0xa3, 0x40, 0xe5, 0x2f, 0xa3, 0x80, 0x0c, 0xf0, 0x2d, 0xa3, 0x00, 0xf4, + 0x2a, 0xa3, 0x00, 0xf8, 0x2b, 0xa3, 0x40, 0xf0, 0x30, 0xa3, 0x00, 0xf8, + 0x2e, 0xa3, 0x40, 0xf0, 0x3b, 0xa3, 0x00, 0xf8, 0x39, 0xa3, 0x40, 0xf0, + 0x34, 0xa3, 0x00, 0xf4, 0x31, 0xa3, 0x00, 0xf8, 0x32, 0xa3, 0x40, 0xf0, + 0x1a, 0xa3, 0x00, 0xf4, 0x17, 0xa3, 0x00, 0xf8, 0x18, 0xa3, 0x40, 0xe5, + 0x0e, 0xa3, 0x80, 0x0c, 0xf0, 0x0c, 0xa3, 0x00, 0xf4, 0x09, 0xa3, 0x00, + 0xf8, 0x0a, 0xa3, 0x40, 0xf0, 0x0f, 0xa3, 0x00, 0xf8, 0x0d, 0xa3, 0x40, + 0xe1, 0xad, 0xa3, 0x80, 0x63, 0xe5, 0xb8, 0xa3, 0x80, 0x52, 0xef, 0xb4, + 0xa3, 0x80, 0x41, 0xf5, 0xbc, 0xa3, 0x80, 0x1a, 0xf9, 0xc2, 0xa3, 0xc0, + 0x00, 0xf0, 0xc3, 0xa3, 0x00, 0xf2, 0xc5, 0xa3, 0x80, 0x08, 0xf4, 0xc0, + 0xa3, 0x00, 0xf8, 0xc1, 0xa3, 0x40, 0xf8, 0xc4, 0xa3, 0x40, 0xef, 0xb0, + 0xa3, 0x80, 0x15, 0xf0, 0xbd, 0xa3, 0x00, 0xf2, 0xbf, 0xa3, 0x80, 0x08, + 0xf4, 0xba, 0xa3, 0x00, 0xf8, 0xbb, 0xa3, 0x40, 0xf8, 0xbe, 0xa3, 0x40, + 0xf0, 0xb1, 0xa3, 0x00, 0xf8, 0xaf, 0xa3, 0x40, 0xf0, 0xb5, 0xa3, 0x00, + 0xf4, 0xb2, 0xa3, 0x00, 0xf8, 0xb3, 0xa3, 0x40, 0xf0, 0xb9, 0xa3, 0x00, + 0xf4, 0xb6, 0xa3, 0x00, 0xf8, 0xb7, 0xa3, 0x40, 0xf0, 0xae, 0xa3, 0x00, + 0xf4, 0xab, 0xa3, 0x00, 0xf8, 0xac, 0xa3, 0x40, 0xf0, 0x1d, 0xa3, 0x00, + 0xf8, 0x1b, 0xa3, 0x40, 0xf0, 0x13, 0xa3, 0x00, 0xf4, 0x10, 0xa3, 0x00, + 0xf8, 0x11, 0xa3, 0x40, 0xe1, 0xc8, 0xa3, 0x80, 0xcb, 0x01, 0xe5, 0xd2, + 0xa3, 0x80, 0xbd, 0x01, 0xef, 0xcf, 0xa3, 0x80, 0xab, 0x01, 0xb2, 0x41, + 0xf5, 0xd6, 0xa3, 0x80, 0x1a, 0xf9, 0xdc, 0xa3, 0xc0, 0x00, 0xf0, 0xdd, + 0xa3, 0x00, 0xf2, 0xdf, 0xa3, 0x80, 0x08, 0xf4, 0xda, 0xa3, 0x00, 0xf8, + 0xdb, 0xa3, 0x40, 0xf8, 0xde, 0xa3, 0x40, 0xef, 0xcb, 0xa3, 0x80, 0x15, + 0xf0, 0xd7, 0xa3, 0x00, 0xf2, 0xd9, 0xa3, 0x80, 0x08, 0xf4, 0xd4, 0xa3, + 0x00, 0xf8, 0xd5, 0xa3, 0x40, 0xf8, 0xd8, 0xa3, 0x40, 0xf0, 0xcc, 0xa3, + 0x00, 0xf8, 0xca, 0xa3, 0x40, 0xe1, 0x7d, 0xa3, 0x80, 0x5f, 0xe5, 0x86, + 0xa3, 0x80, 0x4e, 0xef, 0x82, 0xa3, 0x80, 0x3d, 0xf5, 0x8a, 0xa3, 0x80, + 0x1a, 0xf9, 0x90, 0xa3, 0xc0, 0x00, 0xf0, 0x91, 0xa3, 0x00, 0xf2, 0x93, + 0xa3, 0x80, 0x08, 0xf4, 0x8e, 0xa3, 0x00, 0xf8, 0x8f, 0xa3, 0x40, 0xf8, + 0x92, 0xa3, 0x40, 0xef, 0x7f, 0xa3, 0x80, 0x15, 0xf0, 0x8b, 0xa3, 0x00, + 0xf2, 0x8d, 0xa3, 0x80, 0x08, 0xf4, 0x88, 0xa3, 0x00, 0xf8, 0x89, 0xa3, + 0x40, 0xf8, 0x8c, 0xa3, 0x40, 0xf8, 0x7e, 0xa3, 0x40, 0xf0, 0x83, 0xa3, + 0x00, 0xf4, 0x80, 0xa3, 0x00, 0xf8, 0x81, 0xa3, 0x40, 0xf0, 0x87, 0xa3, + 0x00, 0xf4, 0x84, 0xa3, 0x00, 0xf8, 0x85, 0xa3, 0x40, 0xf8, 0x7c, 0xa3, + 0x40, 0xf0, 0xd0, 0xa3, 0x00, 0xf4, 0xcd, 0xa3, 0x00, 0xf8, 0xce, 0xa3, + 0x40, 0xf0, 0xd3, 0xa3, 0x00, 0xf8, 0xd1, 0xa3, 0x40, 0xf0, 0xc9, 0xa3, + 0x00, 0xf4, 0xc6, 0xa3, 0x00, 0xf8, 0xc7, 0xa3, 0x40, 0xe9, 0xfe, 0xa3, + 0x80, 0x56, 0xef, 0x0a, 0xa4, 0x80, 0x45, 0xf5, 0x0e, 0xa4, 0x80, 0x1a, + 0xf9, 0x14, 0xa4, 0xc0, 0x00, 0xf0, 0x15, 0xa4, 0x00, 0xf2, 0x17, 0xa4, + 0x80, 0x08, 0xf4, 0x12, 0xa4, 0x00, 0xf8, 0x13, 0xa4, 0x40, 0xf8, 0x16, + 0xa4, 0x40, 0xef, 0x06, 0xa4, 0x80, 0x15, 0xf0, 0x0f, 0xa4, 0x00, 0xf2, + 0x11, 0xa4, 0x80, 0x08, 0xf4, 0x0c, 0xa4, 0x00, 0xf8, 0x0d, 0xa4, 0x40, + 0xf8, 0x10, 0xa4, 0x40, 0xf0, 0x07, 0xa4, 0x00, 0xf4, 0x04, 0xa4, 0x00, + 0xf8, 0x05, 0xa4, 0x40, 0xf0, 0x0b, 0xa4, 0x00, 0xf4, 0x08, 0xa4, 0x00, + 0xf8, 0x09, 0xa4, 0x40, 0xe5, 0x02, 0xa4, 0x80, 0x0c, 0xf0, 0xff, 0xa3, + 0x00, 0xf4, 0xfc, 0xa3, 0x00, 0xf8, 0xfd, 0xa3, 0x40, 0xf0, 0x03, 0xa4, + 0x00, 0xf4, 0x00, 0xa4, 0x00, 0xf8, 0x01, 0xa4, 0x40, 0xe1, 0x41, 0xa0, + 0x80, 0x70, 0xe9, 0x3a, 0xa0, 0x80, 0x52, 0xef, 0x48, 0xa0, 0x80, 0x41, + 0xf5, 0x4c, 0xa0, 0x80, 0x1a, 0xf9, 0x52, 0xa0, 0xc0, 0x00, 0xf0, 0x53, + 0xa0, 0x00, 0xf2, 0x55, 0xa0, 0x80, 0x08, 0xf4, 0x50, 0xa0, 0x00, 0xf8, + 0x51, 0xa0, 0x40, 0xf8, 0x54, 0xa0, 0x40, 0xef, 0x44, 0xa0, 0x80, 0x15, + 0xf0, 0x4d, 0xa0, 0x00, 0xf2, 0x4f, 0xa0, 0x80, 0x08, 0xf4, 0x4a, 0xa0, + 0x00, 0xf8, 0x4b, 0xa0, 0x40, 0xf8, 0x4e, 0xa0, 0x40, 0xf0, 0x45, 0xa0, + 0x00, 0xf8, 0x43, 0xa0, 0x40, 0xf0, 0x49, 0xa0, 0x00, 0xf4, 0x46, 0xa0, + 0x00, 0xf8, 0x47, 0xa0, 0x40, 0xe5, 0x3d, 0xa0, 0x80, 0x0c, 0xf0, 0x3b, + 0xa0, 0x00, 0xf4, 0x38, 0xa0, 0x00, 0xf8, 0x39, 0xa0, 0x40, 0xf0, 0x3e, + 0xa0, 0x00, 0xf8, 0x3c, 0xa0, 0x40, 0xf0, 0x42, 0xa0, 0x00, 0xf4, 0x3f, + 0xa0, 0x00, 0xf8, 0x40, 0xa0, 0x40, 0xf0, 0x12, 0xa0, 0x00, 0xf4, 0x0f, + 0xa0, 0x00, 0xf8, 0x10, 0xa0, 0x40, 0xe1, 0x85, 0xa1, 0x80, 0xba, 0x06, + 0xa2, 0xc3, 0x05, 0xa4, 0xdd, 0x04, 0xe5, 0x8f, 0xa1, 0x80, 0xcf, 0x04, + 0xa7, 0xff, 0x03, 0xe9, 0x7f, 0xa1, 0x80, 0xe0, 0x03, 0xaa, 0xf1, 0x02, + 0xef, 0x8c, 0xa1, 0x80, 0xdf, 0x02, 0xb2, 0xf9, 0x01, 0xf5, 0x93, 0xa1, + 0x80, 0xd1, 0x01, 0xb9, 0x7e, 0xba, 0x01, 0xff, 0xe1, 0xf6, 0xa2, 0x80, + 0x6a, 0xe5, 0xfd, 0xa2, 0x80, 0x61, 0xe9, 0xef, 0xa2, 0x80, 0x43, 0xaf, + 0x39, 0xf5, 0xff, 0xa2, 0x80, 0x1a, 0xf9, 0x05, 0xa3, 0xc0, 0x00, 0xf0, + 0x06, 0xa3, 0x00, 0xf2, 0x08, 0xa3, 0x80, 0x08, 0xf4, 0x03, 0xa3, 0x00, + 0xf8, 0x04, 0xa3, 0x40, 0xf8, 0x07, 0xa3, 0x40, 0xef, 0xf9, 0xa2, 0x80, + 0x11, 0xf0, 0x00, 0xa3, 0x00, 0xf2, 0x02, 0xa3, 0x80, 0x04, 0xf8, 0xfe, + 0xa2, 0x40, 0xf8, 0x01, 0xa3, 0x40, 0xf8, 0xf8, 0xa2, 0x40, 0xf0, 0xfb, + 0xa2, 0x00, 0xf8, 0xfa, 0xa2, 0x40, 0xe5, 0xf2, 0xa2, 0x80, 0x0c, 0xf0, + 0xf0, 0xa2, 0x00, 0xf4, 0xed, 0xa2, 0x00, 0xf8, 0xee, 0xa2, 0x40, 0xf0, + 0xf3, 0xa2, 0x00, 0xf8, 0xf1, 0xa2, 0x40, 0xf8, 0xfc, 0xa2, 0x40, 0xf0, + 0xf7, 0xa2, 0x00, 0xf4, 0xf4, 0xa2, 0x00, 0xf8, 0xf5, 0xa2, 0x40, 0xe9, + 0x4c, 0xa4, 0x80, 0x2f, 0xef, 0x57, 0xa4, 0x80, 0x1e, 0xf5, 0x5b, 0xa4, + 0xc0, 0x00, 0xef, 0x53, 0xa4, 0x80, 0x0c, 0xf0, 0x5c, 0xa4, 0x00, 0xf4, + 0x59, 0xa4, 0x00, 0xf8, 0x5a, 0xa4, 0x40, 0xf0, 0x54, 0xa4, 0x00, 0xf8, + 0x52, 0xa4, 0x40, 0xf0, 0x58, 0xa4, 0x00, 0xf4, 0x55, 0xa4, 0x00, 0xf8, + 0x56, 0xa4, 0x40, 0xe5, 0x50, 0xa4, 0x80, 0x0c, 0xf0, 0x4d, 0xa4, 0x00, + 0xf4, 0x4a, 0xa4, 0x00, 0xf8, 0x4b, 0xa4, 0x40, 0xf0, 0x51, 0xa4, 0x00, + 0xf4, 0x4e, 0xa4, 0x00, 0xf8, 0x4f, 0xa4, 0x40, 0xef, 0x88, 0xa1, 0x80, + 0x15, 0xf0, 0x94, 0xa1, 0x00, 0xf2, 0x96, 0xa1, 0x80, 0x08, 0xf4, 0x91, + 0xa1, 0x00, 0xf8, 0x92, 0xa1, 0x40, 0xf8, 0x95, 0xa1, 0x40, 0xf0, 0x89, + 0xa1, 0x00, 0xf8, 0x87, 0xa1, 0x40, 0xe1, 0x96, 0xa3, 0x80, 0x52, 0xe5, + 0x9d, 0xa3, 0x80, 0x41, 0xef, 0x99, 0xa3, 0x80, 0x34, 0xf5, 0xa1, 0xa3, + 0x80, 0x1a, 0xf9, 0xa7, 0xa3, 0xc0, 0x00, 0xf0, 0xa8, 0xa3, 0x00, 0xf2, + 0xaa, 0xa3, 0x80, 0x08, 0xf4, 0xa5, 0xa3, 0x00, 0xf8, 0xa6, 0xa3, 0x40, + 0xf8, 0xa9, 0xa3, 0x40, 0xf0, 0xa2, 0xa3, 0x00, 0xf2, 0xa4, 0xa3, 0x80, + 0x08, 0xf4, 0x9f, 0xa3, 0x00, 0xf8, 0xa0, 0xa3, 0x40, 0xf8, 0xa3, 0xa3, + 0x40, 0xf0, 0x9a, 0xa3, 0x00, 0xf8, 0x98, 0xa3, 0x40, 0xf0, 0x9e, 0xa3, + 0x00, 0xf4, 0x9b, 0xa3, 0x00, 0xf8, 0x9c, 0xa3, 0x40, 0xf0, 0x97, 0xa3, + 0x00, 0xf4, 0x94, 0xa3, 0x00, 0xf8, 0x95, 0xa3, 0x40, 0xf0, 0x8d, 0xa1, + 0x00, 0xf4, 0x8a, 0xa1, 0x00, 0xf8, 0x8b, 0xa1, 0x40, 0xe9, 0x33, 0xa4, + 0x80, 0x4a, 0xef, 0x3d, 0xa4, 0x80, 0x39, 0xf5, 0x40, 0xa4, 0x80, 0x1a, + 0xf9, 0x46, 0xa4, 0xc0, 0x00, 0xf0, 0x47, 0xa4, 0x00, 0xf2, 0x49, 0xa4, + 0x80, 0x08, 0xf4, 0x44, 0xa4, 0x00, 0xf8, 0x45, 0xa4, 0x40, 0xf8, 0x48, + 0xa4, 0x40, 0xef, 0x3a, 0xa4, 0x80, 0x11, 0xf0, 0x41, 0xa4, 0x00, 0xf2, + 0x43, 0xa4, 0x80, 0x04, 0xf8, 0x3f, 0xa4, 0x40, 0xf8, 0x42, 0xa4, 0x40, + 0xf8, 0x39, 0xa4, 0x40, 0xf0, 0x3e, 0xa4, 0x00, 0xf4, 0x3b, 0xa4, 0x00, + 0xf8, 0x3c, 0xa4, 0x40, 0xe5, 0x37, 0xa4, 0x80, 0x0c, 0xf0, 0x34, 0xa4, + 0x00, 0xf4, 0x31, 0xa4, 0x00, 0xf8, 0x32, 0xa4, 0x40, 0xf0, 0x38, 0xa4, + 0x00, 0xf4, 0x35, 0xa4, 0x00, 0xf8, 0x36, 0xa4, 0x40, 0xe5, 0x82, 0xa1, + 0x80, 0x0c, 0xf0, 0x80, 0xa1, 0x00, 0xf4, 0x7d, 0xa1, 0x00, 0xf8, 0x7e, + 0xa1, 0x40, 0xf0, 0x83, 0xa1, 0x00, 0xf8, 0x81, 0xa1, 0x40, 0xe1, 0x62, + 0xa2, 0x80, 0x3c, 0xe5, 0x6c, 0xa2, 0x80, 0x2f, 0x42, 0xf4, 0x02, 0x5e, + 0xa2, 0x80, 0x20, 0xef, 0x69, 0xa2, 0x80, 0x0f, 0x42, 0x1a, 0x05, 0x66, + 0xa2, 0xc0, 0x00, 0xf4, 0x64, 0xa2, 0x00, 0xf8, 0x65, 0xa2, 0x40, 0xf0, + 0x6a, 0xa2, 0x00, 0xf4, 0x67, 0xa2, 0x00, 0xf8, 0x68, 0xa2, 0x40, 0xf0, + 0x5f, 0xa2, 0x00, 0xf8, 0x5d, 0xa2, 0x40, 0xf0, 0x6d, 0xa2, 0x00, 0xf8, + 0x6b, 0xa2, 0x40, 0xf0, 0x63, 0xa2, 0x00, 0xf4, 0x60, 0xa2, 0x00, 0xf8, + 0x61, 0xa2, 0x40, 0xf0, 0x90, 0xa1, 0x00, 0xf8, 0x8e, 0xa1, 0x40, 0xe1, + 0x59, 0xa1, 0x80, 0x52, 0xe5, 0x60, 0xa1, 0x80, 0x45, 0xe9, 0x53, 0xa1, + 0x80, 0x2b, 0xef, 0x5d, 0xa1, 0x80, 0x1a, 0xf5, 0x64, 0xa1, 0xc0, 0x00, + 0xf0, 0x65, 0xa1, 0x00, 0xf2, 0x67, 0xa1, 0x80, 0x08, 0xf4, 0x62, 0xa1, + 0x00, 0xf8, 0x63, 0xa1, 0x40, 0xf8, 0x66, 0xa1, 0x40, 0xf0, 0x5e, 0xa1, + 0x00, 0xf4, 0x5b, 0xa1, 0x00, 0xf8, 0x5c, 0xa1, 0x40, 0xe5, 0x56, 0xa1, + 0x80, 0x0c, 0xf0, 0x54, 0xa1, 0x00, 0xf4, 0x51, 0xa1, 0x00, 0xf8, 0x52, + 0xa1, 0x40, 0xf8, 0x55, 0xa1, 0x40, 0xf0, 0x61, 0xa1, 0x00, 0xf8, 0x5f, + 0xa1, 0x40, 0xf0, 0x5a, 0xa1, 0x00, 0xf4, 0x57, 0xa1, 0x00, 0xf8, 0x58, + 0xa1, 0x40, 0xe1, 0x7f, 0xa0, 0x80, 0x63, 0xe9, 0x78, 0xa0, 0x80, 0x45, + 0xef, 0x83, 0xa0, 0x80, 0x34, 0xf5, 0x87, 0xa0, 0x80, 0x1a, 0xf9, 0x8d, + 0xa0, 0xc0, 0x00, 0xf0, 0x8e, 0xa0, 0x00, 0xf2, 0x90, 0xa0, 0x80, 0x08, + 0xf4, 0x8b, 0xa0, 0x00, 0xf8, 0x8c, 0xa0, 0x40, 0xf8, 0x8f, 0xa0, 0x40, + 0xf0, 0x88, 0xa0, 0x00, 0xf2, 0x8a, 0xa0, 0x80, 0x08, 0xf4, 0x85, 0xa0, + 0x00, 0xf8, 0x86, 0xa0, 0x40, 0xf8, 0x89, 0xa0, 0x40, 0xf0, 0x84, 0xa0, + 0x00, 0xf4, 0x81, 0xa0, 0x00, 0xf8, 0x82, 0xa0, 0x40, 0xe5, 0x7b, 0xa0, + 0x80, 0x0c, 0xf0, 0x79, 0xa0, 0x00, 0xf4, 0x76, 0xa0, 0x00, 0xf8, 0x77, + 0xa0, 0x40, 0xf0, 0x7c, 0xa0, 0x00, 0xf8, 0x7a, 0xa0, 0x40, 0xf0, 0x80, + 0xa0, 0x00, 0xf4, 0x7d, 0xa0, 0x00, 0xf8, 0x7e, 0xa0, 0x40, 0xf0, 0x86, + 0xa1, 0x00, 0xf8, 0x84, 0xa1, 0x40, 0xe1, 0xb7, 0xa0, 0x80, 0xd8, 0x01, + 0xe5, 0xc2, 0xa0, 0x80, 0xce, 0x01, 0xa7, 0x6b, 0xe9, 0xb0, 0xa0, 0x80, + 0x4d, 0xef, 0xbf, 0xa0, 0x80, 0x3c, 0xf5, 0xc5, 0xa0, 0x80, 0x11, 0xf9, + 0xcb, 0xa0, 0xc0, 0x00, 0xf0, 0xcc, 0xa0, 0x00, 0xf4, 0xc9, 0xa0, 0x00, + 0xf8, 0xca, 0xa0, 0x40, 0xef, 0xbb, 0xa0, 0x80, 0x15, 0xf0, 0xc6, 0xa0, + 0x00, 0xf2, 0xc8, 0xa0, 0x80, 0x08, 0xf4, 0xc3, 0xa0, 0x00, 0xf8, 0xc4, + 0xa0, 0x40, 0xf8, 0xc7, 0xa0, 0x40, 0xf0, 0xbc, 0xa0, 0x00, 0xf4, 0xb9, + 0xa0, 0x00, 0xf8, 0xba, 0xa0, 0x40, 0xf0, 0xc0, 0xa0, 0x00, 0xf4, 0xbd, + 0xa0, 0x00, 0xf8, 0xbe, 0xa0, 0x40, 0xe5, 0xb3, 0xa0, 0x80, 0x0c, 0xf0, + 0xb1, 0xa0, 0x00, 0xf4, 0xae, 0xa0, 0x00, 0xf8, 0xaf, 0xa0, 0x40, 0xf0, + 0xb4, 0xa0, 0x00, 0xf8, 0xb2, 0xa0, 0x40, 0xe1, 0x34, 0xa2, 0x80, 0x50, + 0xe5, 0x3e, 0xa2, 0x80, 0x43, 0x42, 0xf4, 0x02, 0x31, 0xa2, 0x80, 0x38, + 0xef, 0x3b, 0xa2, 0x80, 0x27, 0xf5, 0x42, 0xa2, 0xc0, 0x00, 0xef, 0x37, + 0xa2, 0x80, 0x15, 0xf0, 0x43, 0xa2, 0x00, 0xf2, 0x45, 0xa2, 0x80, 0x08, + 0xf4, 0x40, 0xa2, 0x00, 0xf8, 0x41, 0xa2, 0x40, 0xf8, 0x44, 0xa2, 0x40, + 0xf0, 0x38, 0xa2, 0x00, 0xf8, 0x36, 0xa2, 0x40, 0xf0, 0x3c, 0xa2, 0x00, + 0xf4, 0x39, 0xa2, 0x00, 0xf8, 0x3a, 0xa2, 0x40, 0xf8, 0x30, 0xa2, 0x40, + 0xf0, 0x3f, 0xa2, 0x00, 0xf8, 0x3d, 0xa2, 0x40, 0xf0, 0x35, 0xa2, 0x00, + 0xf4, 0x32, 0xa2, 0x00, 0xf8, 0x33, 0xa2, 0x40, 0xf8, 0xc1, 0xa0, 0x40, + 0xf0, 0xb8, 0xa0, 0x00, 0xf4, 0xb5, 0xa0, 0x00, 0xf8, 0xb6, 0xa0, 0x40, + 0xe1, 0xc1, 0xa1, 0x80, 0x85, 0x01, 0xe5, 0xcc, 0xa1, 0x80, 0x78, 0xe9, + 0xb9, 0xa1, 0x80, 0x56, 0xef, 0xc9, 0xa1, 0x80, 0x45, 0xf5, 0xd0, 0xa1, + 0x80, 0x1a, 0xf9, 0xd6, 0xa1, 0xc0, 0x00, 0xf0, 0xd7, 0xa1, 0x00, 0xf2, + 0xd9, 0xa1, 0x80, 0x08, 0xf4, 0xd4, 0xa1, 0x00, 0xf8, 0xd5, 0xa1, 0x40, + 0xf8, 0xd8, 0xa1, 0x40, 0xef, 0xc5, 0xa1, 0x80, 0x15, 0xf0, 0xd1, 0xa1, + 0x00, 0xf2, 0xd3, 0xa1, 0x80, 0x08, 0xf4, 0xce, 0xa1, 0x00, 0xf8, 0xcf, + 0xa1, 0x40, 0xf8, 0xd2, 0xa1, 0x40, 0xf0, 0xc6, 0xa1, 0x00, 0xf4, 0xc3, + 0xa1, 0x00, 0xf8, 0xc4, 0xa1, 0x40, 0xf0, 0xca, 0xa1, 0x00, 0xf4, 0xc7, + 0xa1, 0x00, 0xf8, 0xc8, 0xa1, 0x40, 0xe5, 0xbd, 0xa1, 0x80, 0x0c, 0xf0, + 0xba, 0xa1, 0x00, 0xf4, 0xb7, 0xa1, 0x00, 0xf8, 0xb8, 0xa1, 0x40, 0xf0, + 0xbe, 0xa1, 0x00, 0xf4, 0xbb, 0xa1, 0x00, 0xf8, 0xbc, 0xa1, 0x40, 0xf0, + 0xcd, 0xa1, 0x00, 0xf8, 0xcb, 0xa1, 0x40, 0xf0, 0xc2, 0xa1, 0x00, 0xf4, + 0xbf, 0xa1, 0x00, 0xf8, 0xc0, 0xa1, 0x40, 0xe1, 0x01, 0xa2, 0x80, 0x67, + 0xe5, 0x0c, 0xa2, 0x80, 0x56, 0xe9, 0xfa, 0xa1, 0x80, 0x38, 0xef, 0x08, + 0xa2, 0x80, 0x27, 0xf5, 0x10, 0xa2, 0xc0, 0x00, 0xef, 0x04, 0xa2, 0x80, + 0x15, 0xf0, 0x11, 0xa2, 0x00, 0xf2, 0x13, 0xa2, 0x80, 0x08, 0xf4, 0x0e, + 0xa2, 0x00, 0xf8, 0x0f, 0xa2, 0x40, 0xf8, 0x12, 0xa2, 0x40, 0xf0, 0x05, + 0xa2, 0x00, 0xf8, 0x03, 0xa2, 0x40, 0xf0, 0x09, 0xa2, 0x00, 0xf4, 0x06, + 0xa2, 0x00, 0xf8, 0x07, 0xa2, 0x40, 0xe5, 0xfd, 0xa1, 0x80, 0x0c, 0xf0, + 0xfb, 0xa1, 0x00, 0xf4, 0xf8, 0xa1, 0x00, 0xf8, 0xf9, 0xa1, 0x40, 0xf0, + 0xfe, 0xa1, 0x00, 0xf8, 0xfc, 0xa1, 0x40, 0xf0, 0x0d, 0xa2, 0x00, 0xf4, + 0x0a, 0xa2, 0x00, 0xf8, 0x0b, 0xa2, 0x40, 0xf0, 0x02, 0xa2, 0x00, 0xf4, + 0xff, 0xa1, 0x00, 0xf8, 0x00, 0xa2, 0x40, 0xe9, 0xe2, 0xa3, 0x80, 0xc3, + 0x01, 0xaa, 0x56, 0xef, 0xee, 0xa3, 0x80, 0x45, 0xf5, 0xf2, 0xa3, 0x80, + 0x1a, 0xf9, 0xf8, 0xa3, 0xc0, 0x00, 0xf0, 0xf9, 0xa3, 0x00, 0xf2, 0xfb, + 0xa3, 0x80, 0x08, 0xf4, 0xf6, 0xa3, 0x00, 0xf8, 0xf7, 0xa3, 0x40, 0xf8, + 0xfa, 0xa3, 0x40, 0xef, 0xea, 0xa3, 0x80, 0x15, 0xf0, 0xf3, 0xa3, 0x00, + 0xf2, 0xf5, 0xa3, 0x80, 0x08, 0xf4, 0xf0, 0xa3, 0x00, 0xf8, 0xf1, 0xa3, + 0x40, 0xf8, 0xf4, 0xa3, 0x40, 0xf0, 0xeb, 0xa3, 0x00, 0xf4, 0xe8, 0xa3, + 0x00, 0xf8, 0xe9, 0xa3, 0x40, 0xf0, 0xef, 0xa3, 0x00, 0xf4, 0xec, 0xa3, + 0x00, 0xf8, 0xed, 0xa3, 0x40, 0xe9, 0x1a, 0xa4, 0x80, 0x49, 0xef, 0x25, + 0xa4, 0x80, 0x38, 0xf5, 0x29, 0xa4, 0x80, 0x11, 0xf9, 0x2f, 0xa4, 0xc0, + 0x00, 0xf0, 0x30, 0xa4, 0x00, 0xf4, 0x2d, 0xa4, 0x00, 0xf8, 0x2e, 0xa4, + 0x40, 0xef, 0x21, 0xa4, 0x80, 0x15, 0xf0, 0x2a, 0xa4, 0x00, 0xf2, 0x2c, + 0xa4, 0x80, 0x08, 0xf4, 0x27, 0xa4, 0x00, 0xf8, 0x28, 0xa4, 0x40, 0xf8, + 0x2b, 0xa4, 0x40, 0xf0, 0x22, 0xa4, 0x00, 0xf8, 0x20, 0xa4, 0x40, 0xf0, + 0x26, 0xa4, 0x00, 0xf4, 0x23, 0xa4, 0x00, 0xf8, 0x24, 0xa4, 0x40, 0xe5, + 0x1e, 0xa4, 0x80, 0x0c, 0xf0, 0x1b, 0xa4, 0x00, 0xf4, 0x18, 0xa4, 0x00, + 0xf8, 0x19, 0xa4, 0x40, 0xf0, 0x1f, 0xa4, 0x00, 0xf4, 0x1c, 0xa4, 0x00, + 0xf8, 0x1d, 0xa4, 0x40, 0xe5, 0xe6, 0xa3, 0x80, 0x0c, 0xf0, 0xe3, 0xa3, + 0x00, 0xf4, 0xe0, 0xa3, 0x00, 0xf8, 0xe1, 0xa3, 0x40, 0xf0, 0xe7, 0xa3, + 0x00, 0xf4, 0xe4, 0xa3, 0x00, 0xf8, 0xe5, 0xa3, 0x40, 0xe5, 0x06, 0xa0, + 0x80, 0x13, 0xf0, 0x03, 0xa0, 0x00, 0xf4, 0x00, 0xa0, 0x80, 0x04, 0xf8, + 0x01, 0xa0, 0x40, 0x4c, 0x5a, 0x20, 0x15, 0xa0, 0x40, 0xf0, 0x07, 0xa0, + 0x00, 0xf4, 0x04, 0xa0, 0x00, 0xf8, 0x05, 0xa0, 0x40, 0xe1, 0x73, 0xa2, + 0x80, 0x97, 0x04, 0xe5, 0x7e, 0xa2, 0x80, 0x89, 0x04, 0xa9, 0xf9, 0x03, + 0xac, 0xec, 0x02, 0xad, 0xec, 0x01, 0xae, 0x8b, 0x01, 0xef, 0x7b, 0xa2, + 0x80, 0x7a, 0x42, 0x1a, 0x05, 0x77, 0xa2, 0x80, 0x67, 0xb8, 0x01, 0xff, + 0xe1, 0x50, 0xa2, 0x80, 0x53, 0xe5, 0x5b, 0xa2, 0x80, 0x46, 0xe9, 0x48, + 0xa2, 0x80, 0x24, 0xef, 0x58, 0xa2, 0x80, 0x13, 0x42, 0x1a, 0x05, 0x54, + 0xa2, 0xc0, 0x00, 0xf0, 0x55, 0xa2, 0x00, 0xf4, 0x52, 0xa2, 0x00, 0xf8, + 0x53, 0xa2, 0x40, 0xf0, 0x59, 0xa2, 0x00, 0xf4, 0x56, 0xa2, 0x00, 0xf8, + 0x57, 0xa2, 0x40, 0xe5, 0x4c, 0xa2, 0x80, 0x0c, 0xf0, 0x49, 0xa2, 0x00, + 0xf4, 0x46, 0xa2, 0x00, 0xf8, 0x47, 0xa2, 0x40, 0xf0, 0x4d, 0xa2, 0x00, + 0xf4, 0x4a, 0xa2, 0x00, 0xf8, 0x4b, 0xa2, 0x40, 0xf0, 0x5c, 0xa2, 0x00, + 0xf8, 0x5a, 0xa2, 0x40, 0xf0, 0x51, 0xa2, 0x00, 0xf4, 0x4e, 0xa2, 0x00, + 0xf8, 0x4f, 0xa2, 0x40, 0xf0, 0x78, 0xa2, 0x00, 0xf4, 0x75, 0xa2, 0x00, + 0xf8, 0x76, 0xa2, 0x40, 0xf0, 0x7c, 0xa2, 0x00, 0xf4, 0x79, 0xa2, 0x00, + 0xf8, 0x7a, 0xa2, 0x40, 0xe1, 0x72, 0xa1, 0x80, 0x4d, 0xe5, 0x7a, 0xa1, + 0x80, 0x40, 0xe9, 0x6a, 0xa1, 0x80, 0x1e, 0xaf, 0x10, 0xb5, 0x01, 0xff, + 0xef, 0x75, 0xa1, 0x80, 0x04, 0xf4, 0x7c, 0xa1, 0x40, 0xf8, 0x74, 0xa1, + 0x40, 0xf0, 0x78, 0xa1, 0x00, 0xf4, 0x76, 0xa1, 0x00, 0xf8, 0x77, 0xa1, + 0x40, 0xe5, 0x6e, 0xa1, 0x80, 0x0c, 0xf0, 0x6b, 0xa1, 0x00, 0xf4, 0x68, + 0xa1, 0x00, 0xf8, 0x69, 0xa1, 0x40, 0xf0, 0x6f, 0xa1, 0x00, 0xf4, 0x6c, + 0xa1, 0x00, 0xf8, 0x6d, 0xa1, 0x40, 0xf0, 0x7b, 0xa1, 0x00, 0xf8, 0x79, + 0xa1, 0x40, 0xf0, 0x73, 0xa1, 0x00, 0xf4, 0x70, 0xa1, 0x00, 0xf8, 0x71, + 0xa1, 0x40, 0xe1, 0x9a, 0xa0, 0x80, 0x6c, 0xe9, 0x93, 0xa0, 0x80, 0x4e, + 0xef, 0xa1, 0xa0, 0x80, 0x3d, 0xf5, 0xa5, 0xa0, 0x80, 0x16, 0xf9, 0xaa, + 0xa0, 0xc0, 0x00, 0xf0, 0xab, 0xa0, 0x00, 0xf2, 0xad, 0xa0, 0x80, 0x04, + 0xf8, 0xa9, 0xa0, 0x40, 0xf8, 0xac, 0xa0, 0x40, 0xef, 0x9d, 0xa0, 0x80, + 0x15, 0xf0, 0xa6, 0xa0, 0x00, 0xf2, 0xa8, 0xa0, 0x80, 0x08, 0xf4, 0xa3, + 0xa0, 0x00, 0xf8, 0xa4, 0xa0, 0x40, 0xf8, 0xa7, 0xa0, 0x40, 0xf0, 0x9e, + 0xa0, 0x00, 0xf8, 0x9c, 0xa0, 0x40, 0xf0, 0xa2, 0xa0, 0x00, 0xf4, 0x9f, + 0xa0, 0x00, 0xf8, 0xa0, 0xa0, 0x40, 0xe5, 0x96, 0xa0, 0x80, 0x0c, 0xf0, + 0x94, 0xa0, 0x00, 0xf4, 0x91, 0xa0, 0x00, 0xf8, 0x92, 0xa0, 0x40, 0xf0, + 0x97, 0xa0, 0x00, 0xf8, 0x95, 0xa0, 0x40, 0xf0, 0x9b, 0xa0, 0x00, 0xf4, + 0x98, 0xa0, 0x00, 0xf8, 0x99, 0xa0, 0x40, 0xe1, 0xa0, 0xa1, 0x80, 0x79, + 0xe5, 0xa9, 0xa1, 0x80, 0x6c, 0xe9, 0x99, 0xa1, 0x80, 0x4e, 0xef, 0xa6, + 0xa1, 0x80, 0x41, 0xf5, 0xad, 0xa1, 0x80, 0x1a, 0xf9, 0xb3, 0xa1, 0xc0, + 0x00, 0xf0, 0xb4, 0xa1, 0x00, 0xf2, 0xb6, 0xa1, 0x80, 0x08, 0xf4, 0xb1, + 0xa1, 0x00, 0xf8, 0xb2, 0xa1, 0x40, 0xf8, 0xb5, 0xa1, 0x40, 0xef, 0xa3, + 0xa1, 0x80, 0x15, 0xf0, 0xae, 0xa1, 0x00, 0xf2, 0xb0, 0xa1, 0x80, 0x08, + 0xf4, 0xab, 0xa1, 0x00, 0xf8, 0xac, 0xa1, 0x40, 0xf8, 0xaf, 0xa1, 0x40, + 0xf0, 0xa4, 0xa1, 0x00, 0xf8, 0xa2, 0xa1, 0x40, 0xf0, 0xa7, 0xa1, 0x00, + 0xf8, 0xa5, 0xa1, 0x40, 0xe5, 0x9c, 0xa1, 0x80, 0x0c, 0xf0, 0x9a, 0xa1, + 0x00, 0xf4, 0x97, 0xa1, 0x00, 0xf8, 0x98, 0xa1, 0x40, 0xf0, 0x9d, 0xa1, + 0x00, 0xf8, 0x9b, 0xa1, 0x40, 0xf0, 0xaa, 0xa1, 0x00, 0xf8, 0xa8, 0xa1, + 0x40, 0xf0, 0xa1, 0xa1, 0x00, 0xf4, 0x9e, 0xa1, 0x00, 0xf8, 0x9f, 0xa1, + 0x40, 0xe5, 0x70, 0xa2, 0x80, 0x04, 0xf4, 0x6e, 0xa2, 0x40, 0xf8, 0x6f, + 0xa2, 0x40, 0xf0, 0x7f, 0xa2, 0x00, 0xf8, 0x7d, 0xa2, 0x40, 0xf0, 0x74, + 0xa2, 0x00, 0xf4, 0x71, 0xa2, 0x00, 0xf8, 0x72, 0xa2, 0x40, 0xe1, 0xe4, + 0xa1, 0x80, 0xea, 0x01, 0xe5, 0xf0, 0xa1, 0x80, 0xd8, 0x01, 0xa7, 0x5e, + 0xe9, 0xdc, 0xa1, 0x80, 0x3c, 0xef, 0xec, 0xa1, 0x80, 0x2b, 0xf5, 0xf4, + 0xa1, 0xc0, 0x00, 0xef, 0xe8, 0xa1, 0x80, 0x15, 0xf0, 0xf5, 0xa1, 0x00, + 0xf2, 0xf7, 0xa1, 0x80, 0x08, 0xf4, 0xf2, 0xa1, 0x00, 0xf8, 0xf3, 0xa1, + 0x40, 0xf8, 0xf6, 0xa1, 0x40, 0xf0, 0xe9, 0xa1, 0x00, 0xf4, 0xe6, 0xa1, + 0x00, 0xf8, 0xe7, 0xa1, 0x40, 0xf0, 0xed, 0xa1, 0x00, 0xf4, 0xea, 0xa1, + 0x00, 0xf8, 0xeb, 0xa1, 0x40, 0xe5, 0xe0, 0xa1, 0x80, 0x0c, 0xf0, 0xdd, + 0xa1, 0x00, 0xf4, 0xda, 0xa1, 0x00, 0xf8, 0xdb, 0xa1, 0x40, 0xf0, 0xe1, + 0xa1, 0x00, 0xf4, 0xde, 0xa1, 0x00, 0xf8, 0xdf, 0xa1, 0x40, 0xe1, 0x1c, + 0xa2, 0x80, 0x67, 0xe5, 0x28, 0xa2, 0x80, 0x56, 0xe9, 0x16, 0xa2, 0x80, + 0x3c, 0xef, 0x24, 0xa2, 0x80, 0x2b, 0xf5, 0x2c, 0xa2, 0xc0, 0x00, 0xef, + 0x20, 0xa2, 0x80, 0x15, 0xf0, 0x2d, 0xa2, 0x00, 0xf2, 0x2f, 0xa2, 0x80, + 0x08, 0xf4, 0x2a, 0xa2, 0x00, 0xf8, 0x2b, 0xa2, 0x40, 0xf8, 0x2e, 0xa2, + 0x40, 0xf0, 0x21, 0xa2, 0x00, 0xf4, 0x1e, 0xa2, 0x00, 0xf8, 0x1f, 0xa2, + 0x40, 0xf0, 0x25, 0xa2, 0x00, 0xf4, 0x22, 0xa2, 0x00, 0xf8, 0x23, 0xa2, + 0x40, 0xe5, 0x18, 0xa2, 0x80, 0x08, 0xf4, 0x14, 0xa2, 0x00, 0xf8, 0x15, + 0xa2, 0x40, 0xf0, 0x19, 0xa2, 0x00, 0xf8, 0x17, 0xa2, 0x40, 0xf0, 0x29, + 0xa2, 0x00, 0xf4, 0x26, 0xa2, 0x00, 0xf8, 0x27, 0xa2, 0x40, 0xf0, 0x1d, + 0xa2, 0x00, 0xf4, 0x1a, 0xa2, 0x00, 0xf8, 0x1b, 0xa2, 0x40, 0xf0, 0xf1, + 0xa1, 0x00, 0xf4, 0xee, 0xa1, 0x00, 0xf8, 0xef, 0xa1, 0x40, 0xf0, 0xe5, + 0xa1, 0x00, 0xf4, 0xe2, 0xa1, 0x00, 0xf8, 0xe3, 0xa1, 0x40, 0xe1, 0xd3, + 0xa0, 0x80, 0x49, 0xe9, 0xcf, 0xa0, 0x80, 0x38, 0xef, 0xd6, 0xa0, 0x80, + 0x2b, 0xf5, 0xda, 0xa0, 0x80, 0x11, 0xf9, 0xe0, 0xa0, 0xc0, 0x00, 0xf0, + 0xe1, 0xa0, 0x00, 0xf4, 0xde, 0xa0, 0x00, 0xf8, 0xdf, 0xa0, 0x40, 0xf0, + 0xdb, 0xa0, 0x00, 0xf2, 0xdd, 0xa0, 0x80, 0x08, 0xf4, 0xd8, 0xa0, 0x00, + 0xf8, 0xd9, 0xa0, 0x40, 0xf8, 0xdc, 0xa0, 0x40, 0xf0, 0xd7, 0xa0, 0x00, + 0xf8, 0xd5, 0xa0, 0x40, 0xf0, 0xd0, 0xa0, 0x00, 0xf4, 0xcd, 0xa0, 0x00, + 0xf8, 0xce, 0xa0, 0x40, 0xf0, 0xd4, 0xa0, 0x00, 0xf4, 0xd1, 0xa0, 0x00, + 0xf8, 0xd2, 0xa0, 0x40, 0xf8, 0x13, 0xa0, 0x40, 0xe1, 0x09, 0xa1, 0x80, + 0xd5, 0x01, 0xa4, 0x5f, 0xe5, 0x12, 0xa1, 0x80, 0x52, 0xe9, 0x02, 0xa1, + 0x80, 0x34, 0xef, 0x0f, 0xa1, 0x80, 0x23, 0xf5, 0x16, 0xa1, 0xc0, 0x00, + 0xef, 0x0c, 0xa1, 0x80, 0x15, 0xf0, 0x17, 0xa1, 0x00, 0xf2, 0x19, 0xa1, + 0x80, 0x08, 0xf4, 0x14, 0xa1, 0x00, 0xf8, 0x15, 0xa1, 0x40, 0xf8, 0x18, + 0xa1, 0x40, 0xf8, 0x0b, 0xa1, 0x40, 0xf0, 0x10, 0xa1, 0x00, 0xf4, 0x0d, + 0xa1, 0x00, 0xf8, 0x0e, 0xa1, 0x40, 0xe5, 0x05, 0xa1, 0x80, 0x0c, 0xf0, + 0x03, 0xa1, 0x00, 0xf4, 0x00, 0xa1, 0x00, 0xf8, 0x01, 0xa1, 0x40, 0xf0, + 0x06, 0xa1, 0x00, 0xf8, 0x04, 0xa1, 0x40, 0xf0, 0x13, 0xa1, 0x00, 0xf8, + 0x11, 0xa1, 0x40, 0xe1, 0x3f, 0xa1, 0x80, 0x63, 0xe5, 0x49, 0xa1, 0x80, + 0x56, 0xe9, 0x38, 0xa1, 0x80, 0x38, 0xef, 0x46, 0xa1, 0x80, 0x27, 0xf5, + 0x4d, 0xa1, 0xc0, 0x00, 0xef, 0x42, 0xa1, 0x80, 0x15, 0xf0, 0x4e, 0xa1, + 0x00, 0xf2, 0x50, 0xa1, 0x80, 0x08, 0xf4, 0x4b, 0xa1, 0x00, 0xf8, 0x4c, + 0xa1, 0x40, 0xf8, 0x4f, 0xa1, 0x40, 0xf0, 0x43, 0xa1, 0x00, 0xf8, 0x41, + 0xa1, 0x40, 0xf0, 0x47, 0xa1, 0x00, 0xf4, 0x44, 0xa1, 0x00, 0xf8, 0x45, + 0xa1, 0x40, 0xe5, 0x3b, 0xa1, 0x80, 0x0c, 0xf0, 0x39, 0xa1, 0x00, 0xf4, + 0x36, 0xa1, 0x00, 0xf8, 0x37, 0xa1, 0x40, 0xf0, 0x3c, 0xa1, 0x00, 0xf8, + 0x3a, 0xa1, 0x40, 0xf0, 0x4a, 0xa1, 0x00, 0xf8, 0x48, 0xa1, 0x40, 0xf0, + 0x40, 0xa1, 0x00, 0xf4, 0x3d, 0xa1, 0x00, 0xf8, 0x3e, 0xa1, 0x40, 0xf0, + 0x0a, 0xa1, 0x00, 0xf4, 0x07, 0xa1, 0x00, 0xf8, 0x08, 0xa1, 0x40, 0xe1, + 0xb8, 0xa2, 0x80, 0xf8, 0x01, 0xe5, 0xc2, 0xa2, 0x80, 0xea, 0x01, 0xa8, + 0x74, 0xe9, 0xb0, 0xa2, 0x80, 0x52, 0xef, 0xbf, 0xa2, 0x80, 0x41, 0xf5, + 0xc6, 0xa2, 0x80, 0x1a, 0xf9, 0xcc, 0xa2, 0xc0, 0x00, 0xf0, 0xcd, 0xa2, + 0x00, 0xf2, 0xcf, 0xa2, 0x80, 0x08, 0xf4, 0xca, 0xa2, 0x00, 0xf8, 0xcb, + 0xa2, 0x40, 0xf8, 0xce, 0xa2, 0x40, 0xef, 0xbb, 0xa2, 0x80, 0x15, 0xf0, + 0xc7, 0xa2, 0x00, 0xf2, 0xc9, 0xa2, 0x80, 0x08, 0xf4, 0xc4, 0xa2, 0x00, + 0xf8, 0xc5, 0xa2, 0x40, 0xf8, 0xc8, 0xa2, 0x40, 0xf0, 0xbc, 0xa2, 0x00, + 0xf8, 0xba, 0xa2, 0x40, 0xf0, 0xc0, 0xa2, 0x00, 0xf4, 0xbd, 0xa2, 0x00, + 0xf8, 0xbe, 0xa2, 0x40, 0xe5, 0xb4, 0xa2, 0x80, 0x0c, 0xf0, 0xb1, 0xa2, + 0x00, 0xf4, 0xae, 0xa2, 0x00, 0xf8, 0xaf, 0xa2, 0x40, 0xf0, 0xb5, 0xa2, + 0x00, 0xf4, 0xb2, 0xa2, 0x00, 0xf8, 0xb3, 0xa2, 0x40, 0xe1, 0x63, 0xa3, + 0x80, 0x63, 0xe5, 0x6f, 0xa3, 0x80, 0x52, 0xef, 0x6b, 0xa3, 0x80, 0x41, + 0xf5, 0x72, 0xa3, 0x80, 0x1a, 0xf9, 0x78, 0xa3, 0xc0, 0x00, 0xf0, 0x79, + 0xa3, 0x00, 0xf2, 0x7b, 0xa3, 0x80, 0x08, 0xf4, 0x76, 0xa3, 0x00, 0xf8, + 0x77, 0xa3, 0x40, 0xf8, 0x7a, 0xa3, 0x40, 0xef, 0x67, 0xa3, 0x80, 0x11, + 0xf0, 0x73, 0xa3, 0x00, 0xf2, 0x75, 0xa3, 0x80, 0x04, 0xf8, 0x71, 0xa3, + 0x40, 0xf8, 0x74, 0xa3, 0x40, 0xf0, 0x68, 0xa3, 0x00, 0xf4, 0x65, 0xa3, + 0x00, 0xf8, 0x66, 0xa3, 0x40, 0xf0, 0x6c, 0xa3, 0x00, 0xf4, 0x69, 0xa3, + 0x00, 0xf8, 0x6a, 0xa3, 0x40, 0xf0, 0x70, 0xa3, 0x00, 0xf4, 0x6d, 0xa3, + 0x00, 0xf8, 0x6e, 0xa3, 0x40, 0xf0, 0x64, 0xa3, 0x00, 0xf4, 0x61, 0xa3, + 0x00, 0xf8, 0x62, 0xa3, 0x40, 0xf0, 0xc3, 0xa2, 0x00, 0xf8, 0xc1, 0xa2, + 0x40, 0xf0, 0xb9, 0xa2, 0x00, 0xf4, 0xb6, 0xa2, 0x00, 0xf8, 0xb7, 0xa2, + 0x40, 0xe1, 0x20, 0xa0, 0x80, 0x8d, 0x02, 0xa2, 0x81, 0x01, 0xe5, 0x2a, + 0xa0, 0x80, 0x74, 0xe9, 0x18, 0xa0, 0x80, 0x52, 0xef, 0x27, 0xa0, 0x80, + 0x41, 0xf5, 0x2e, 0xa0, 0x80, 0x1a, 0xf9, 0x34, 0xa0, 0xc0, 0x00, 0xf0, + 0x35, 0xa0, 0x00, 0xf2, 0x37, 0xa0, 0x80, 0x08, 0xf4, 0x32, 0xa0, 0x00, + 0xf8, 0x33, 0xa0, 0x40, 0xf8, 0x36, 0xa0, 0x40, 0xef, 0x23, 0xa0, 0x80, + 0x15, 0xf0, 0x2f, 0xa0, 0x00, 0xf2, 0x31, 0xa0, 0x80, 0x08, 0xf4, 0x2c, + 0xa0, 0x00, 0xf8, 0x2d, 0xa0, 0x40, 0xf8, 0x30, 0xa0, 0x40, 0xf0, 0x24, + 0xa0, 0x00, 0xf8, 0x22, 0xa0, 0x40, 0xf0, 0x28, 0xa0, 0x00, 0xf4, 0x25, + 0xa0, 0x00, 0xf8, 0x26, 0xa0, 0x40, 0xe5, 0x1c, 0xa0, 0x80, 0x0c, 0xf0, + 0x19, 0xa0, 0x00, 0xf4, 0x16, 0xa0, 0x00, 0xf8, 0x17, 0xa0, 0x40, 0xf0, + 0x1d, 0xa0, 0x00, 0xf4, 0x1a, 0xa0, 0x00, 0xf8, 0x1b, 0xa0, 0x40, 0xf0, + 0x2b, 0xa0, 0x00, 0xf8, 0x29, 0xa0, 0x40, 0xe1, 0x60, 0xa0, 0x80, 0x78, + 0xe5, 0x6a, 0xa0, 0x80, 0x6b, 0xe9, 0x58, 0xa0, 0x80, 0x49, 0xef, 0x67, + 0xa0, 0x80, 0x38, 0xf5, 0x6e, 0xa0, 0x80, 0x11, 0xf9, 0x74, 0xa0, 0xc0, + 0x00, 0xf0, 0x75, 0xa0, 0x00, 0xf4, 0x72, 0xa0, 0x00, 0xf8, 0x73, 0xa0, + 0x40, 0xef, 0x63, 0xa0, 0x80, 0x15, 0xf0, 0x6f, 0xa0, 0x00, 0xf2, 0x71, + 0xa0, 0x80, 0x08, 0xf4, 0x6c, 0xa0, 0x00, 0xf8, 0x6d, 0xa0, 0x40, 0xf8, + 0x70, 0xa0, 0x40, 0xf0, 0x64, 0xa0, 0x00, 0xf8, 0x62, 0xa0, 0x40, 0xf0, + 0x68, 0xa0, 0x00, 0xf4, 0x65, 0xa0, 0x00, 0xf8, 0x66, 0xa0, 0x40, 0xe5, + 0x5c, 0xa0, 0x80, 0x0c, 0xf0, 0x59, 0xa0, 0x00, 0xf4, 0x56, 0xa0, 0x00, + 0xf8, 0x57, 0xa0, 0x40, 0xf0, 0x5d, 0xa0, 0x00, 0xf4, 0x5a, 0xa0, 0x00, + 0xf8, 0x5b, 0xa0, 0x40, 0xf0, 0x6b, 0xa0, 0x00, 0xf8, 0x69, 0xa0, 0x40, + 0xf0, 0x61, 0xa0, 0x00, 0xf4, 0x5e, 0xa0, 0x00, 0xf8, 0x5f, 0xa0, 0x40, + 0xf0, 0x21, 0xa0, 0x00, 0xf4, 0x1e, 0xa0, 0x00, 0xf8, 0x1f, 0xa0, 0x40, + 0xf0, 0x0b, 0xa0, 0x00, 0xf4, 0x08, 0xa0, 0x00, 0xf8, 0x09, 0xa0, 0x40, + 0xa2, 0xd3, 0x02, 0xa3, 0xb1, 0x02, 0xa4, 0xa4, 0x02, 0xa7, 0x83, 0x02, + 0xa8, 0xe5, 0x01, 0xaa, 0xcc, 0x01, 0xab, 0xbf, 0x01, 0xac, 0xad, 0x01, + 0xad, 0xa0, 0x01, 0xae, 0x83, 0x01, 0x42, 0x1f, 0x00, 0xa9, 0xa4, 0x00, + 0xb0, 0x6f, 0x43, 0x94, 0xf4, 0x90, 0xa4, 0x00, 0xb3, 0x49, 0xb4, 0x3d, + 0xb6, 0x2f, 0x42, 0x15, 0x02, 0xb8, 0xa4, 0x00, 0xb9, 0x1d, 0xba, 0x01, + 0xff, 0xe1, 0xb2, 0xa4, 0x00, 0x42, 0x1b, 0x05, 0xab, 0xa4, 0x00, 0xb5, + 0x06, 0x44, 0x65, 0xf3, 0xc4, 0xa4, 0x40, 0xf0, 0xa2, 0xa4, 0x00, 0xf2, + 0xc1, 0xa4, 0x40, 0x42, 0x52, 0x00, 0xae, 0xa4, 0x00, 0xef, 0x9d, 0xa4, + 0x40, 0x42, 0xeb, 0x0a, 0xb1, 0xa4, 0x00, 0x42, 0x42, 0x00, 0xaf, 0xa4, + 0x40, 0x42, 0x8a, 0x00, 0xa0, 0xa4, 0x00, 0xf5, 0xa8, 0xa4, 0x40, 0xa8, + 0x06, 0x42, 0x5a, 0x03, 0x95, 0xa4, 0x40, 0x42, 0x8a, 0x00, 0xc0, 0xa4, + 0x00, 0x42, 0x1f, 0x00, 0xc2, 0xa4, 0x00, 0x42, 0x42, 0x00, 0xba, 0xa4, + 0x00, 0xf9, 0xb0, 0xa4, 0x40, 0x42, 0x29, 0x08, 0x9e, 0xa4, 0x00, 0x42, + 0x45, 0x69, 0xac, 0xa4, 0x40, 0x43, 0xd8, 0xbb, 0xc5, 0xa4, 0x00, 0xb9, + 0x06, 0x43, 0xe2, 0xf4, 0xb4, 0xa4, 0x40, 0x42, 0xba, 0x04, 0x93, 0xa4, + 0x00, 0x42, 0x1f, 0x00, 0xa7, 0xa4, 0x40, 0xe9, 0x98, 0xa4, 0x00, 0x42, + 0x1f, 0x00, 0x9c, 0xa4, 0x40, 0xe9, 0x91, 0xa4, 0x80, 0x06, 0x42, 0x05, + 0x22, 0x9a, 0xa4, 0x40, 0xe5, 0xbb, 0xa4, 0x40, 0xe5, 0xc6, 0xa4, 0x00, + 0x42, 0x52, 0x00, 0x92, 0xa4, 0x40, 0xaa, 0x04, 0xef, 0xb3, 0xa4, 0x40, + 0x42, 0xf4, 0x02, 0xb7, 0xa4, 0x00, 0x42, 0x29, 0x08, 0xaa, 0xa4, 0x00, + 0xf9, 0xb5, 0xa4, 0x40, 0x42, 0xc3, 0x07, 0xad, 0xa4, 0x00, 0xb8, 0x01, + 0xff, 0x42, 0x52, 0x00, 0x99, 0xa4, 0x00, 0x42, 0x1f, 0x00, 0xbf, 0xa4, + 0x00, 0x42, 0x1a, 0x05, 0x9f, 0xa4, 0x40, 0xe1, 0xa1, 0xa4, 0x00, 0x42, + 0xeb, 0x0a, 0x97, 0xa4, 0x00, 0xa7, 0x06, 0x42, 0x1b, 0x05, 0xb6, 0xa4, + 0x40, 0x42, 0x1f, 0x00, 0x96, 0xa4, 0x00, 0x42, 0x1a, 0x05, 0xa6, 0xa4, + 0x40, 0x43, 0x00, 0x74, 0xa4, 0xa4, 0x00, 0xf5, 0xb9, 0xa4, 0x40, 0x42, + 0xb0, 0x01, 0xc3, 0xa4, 0x00, 0x42, 0xba, 0x04, 0xbe, 0xa4, 0x00, 0x43, + 0xaf, 0xf4, 0xbd, 0xa4, 0x00, 0xf9, 0xbc, 0xa4, 0xc0, 0x00, 0xf0, 0x94, + 0xa4, 0x00, 0xf4, 0xa3, 0xa4, 0x40, 0x43, 0x6a, 0x0d, 0x9b, 0xa4, 0x00, + 0x42, 0x42, 0x00, 0xa5, 0xa4, 0x40, 0x4a, 0x2b, 0xad, 0x9b, 0xf4, 0x01, + 0x46, 0xc3, 0x04, 0xa5, 0x00, 0x00, 0x05, 0xa9, 0xec, 0x01, 0xff, 0x0a, + 0x41, 0x59, 0xa0, 0x02, 0x50, 0x96, 0x63, 0xad, 0x0e, 0x01, 0x07, 0xec, + 0x05, 0x01, 0xff, 0x42, 0xb7, 0x05, 0x81, 0x0e, 0x01, 0xa3, 0xf8, 0x01, + 0x02, 0xf0, 0x10, 0xeb, 0x01, 0xa5, 0xd4, 0x01, 0x42, 0x0c, 0x08, 0x99, + 0x0e, 0x01, 0x43, 0xef, 0xb8, 0x9f, 0x0e, 0x01, 0xa8, 0xb9, 0x01, 0x42, + 0x56, 0x19, 0x90, 0x0e, 0x01, 0xab, 0xa4, 0x01, 0x43, 0xb0, 0x00, 0xa0, + 0x0e, 0x81, 0x96, 0x01, 0x43, 0xad, 0x90, 0xa1, 0x0e, 0x01, 0x43, 0xdc, + 0x22, 0xa2, 0x0e, 0x01, 0x42, 0xd1, 0x00, 0xa5, 0x0e, 0x01, 0xb0, 0x78, + 0x43, 0x43, 0x14, 0x9c, 0x0e, 0x01, 0xb2, 0x66, 0xb3, 0x4e, 0xb4, 0x42, + 0x42, 0x48, 0x04, 0xa3, 0x0e, 0x01, 0x42, 0xf5, 0x0a, 0x9a, 0x0e, 0x81, + 0x2f, 0x43, 0x8a, 0x8a, 0xa4, 0x0e, 0x01, 0xb8, 0x1d, 0x43, 0xd6, 0xf4, + 0xa8, 0x0e, 0x81, 0x10, 0xba, 0x01, 0xff, 0xe1, 0x8f, 0x0e, 0x81, 0x04, + 0xe5, 0x96, 0x0e, 0x41, 0xec, 0x8c, 0x0e, 0x41, 0x56, 0x61, 0x32, 0xb1, + 0x0e, 0x41, 0xe1, 0x8a, 0x0e, 0x01, 0x44, 0x31, 0xf0, 0x98, 0x0e, 0x41, + 0x4f, 0x06, 0x69, 0x9b, 0x0e, 0x41, 0xe1, 0x95, 0x0e, 0x01, 0x42, 0xb0, + 0x01, 0x84, 0x0e, 0x41, 0x42, 0xe8, 0x01, 0x93, 0x0e, 0x01, 0xe5, 0x85, + 0x0e, 0x01, 0x43, 0x7a, 0x16, 0x92, 0x0e, 0x01, 0x42, 0x9e, 0x01, 0x91, + 0x0e, 0x41, 0xe1, 0x8d, 0x0e, 0x01, 0x42, 0x22, 0x00, 0x8e, 0x0e, 0x41, + 0xe5, 0x82, 0x0e, 0x01, 0x42, 0xb0, 0x01, 0x83, 0x0e, 0x41, 0x4f, 0x75, + 0x3b, 0xb0, 0x0e, 0x41, 0x42, 0x44, 0x14, 0x9d, 0x0e, 0x01, 0x43, 0x36, + 0x50, 0x9e, 0x0e, 0x41, 0x42, 0xed, 0x10, 0xa7, 0x0e, 0x01, 0x42, 0x22, + 0x00, 0x89, 0x0e, 0x41, 0x43, 0x9c, 0x6a, 0x80, 0x0e, 0x01, 0xf4, 0xa9, + 0x0e, 0x01, 0xf7, 0xa6, 0x0e, 0x01, 0x42, 0x03, 0x1d, 0x97, 0x0e, 0x41, + 0xe4, 0x94, 0x0e, 0x01, 0xec, 0x8b, 0x0e, 0x41, 0xa8, 0x06, 0x42, 0x29, + 0x02, 0x86, 0x0e, 0x41, 0x43, 0x1c, 0x39, 0x88, 0x0e, 0x01, 0x42, 0x29, + 0x02, 0x87, 0x0e, 0x41, 0x4a, 0x0f, 0xab, 0xab, 0x0e, 0x01, 0x4a, 0xa3, + 0xad, 0xac, 0x0e, 0x41, 0x10, 0x46, 0x65, 0x06, 0x4a, 0x16, 0x83, 0x71, + 0xf9, 0x41, 0x48, 0x48, 0xc9, 0xf4, 0x6f, 0x01, 0xb4, 0x01, 0xff, 0x4f, + 0x4c, 0x6e, 0xf5, 0x6f, 0x01, 0x48, 0x88, 0xcc, 0xf6, 0x6f, 0x41, 0x53, + 0x7d, 0x47, 0x27, 0x23, 0x00, 0x44, 0xcd, 0xec, 0x7b, 0xfa, 0x01, 0x07, + 0xbe, 0xd1, 0x06, 0x42, 0x0c, 0x00, 0xbb, 0x22, 0x40, 0x06, 0x0c, 0x03, + 0x31, 0x04, 0xda, 0x05, 0x01, 0xff, 0xa3, 0x1e, 0x48, 0x90, 0xc5, 0x62, + 0xfa, 0x01, 0x47, 0x40, 0xd1, 0x60, 0xfa, 0x01, 0x45, 0x20, 0xb3, 0x63, + 0xfa, 0x01, 0x48, 0x20, 0xc8, 0x61, 0xfa, 0x01, 0x47, 0xe6, 0xd5, 0x66, + 0xfa, 0x41, 0x45, 0x52, 0xe4, 0x65, 0xfa, 0x01, 0x46, 0xc5, 0x57, 0x64, + 0xfa, 0x41, 0xa3, 0x1e, 0x48, 0x90, 0xc5, 0x69, 0xfa, 0x01, 0x47, 0x40, + 0xd1, 0x67, 0xfa, 0x01, 0x45, 0x20, 0xb3, 0x6a, 0xfa, 0x01, 0x48, 0x20, + 0xc8, 0x68, 0xfa, 0x01, 0x47, 0xe6, 0xd5, 0x6d, 0xfa, 0x41, 0x45, 0x52, + 0xe4, 0x6c, 0xfa, 0x01, 0x46, 0xc5, 0x57, 0x6b, 0xfa, 0x41, 0xa1, 0xa0, + 0x0e, 0xa5, 0xeb, 0x0d, 0xa8, 0xf6, 0x03, 0xa9, 0x8c, 0x01, 0xaf, 0x23, + 0xb2, 0x01, 0xff, 0x4d, 0x89, 0x80, 0x81, 0xf3, 0x01, 0xa5, 0x06, 0x4a, + 0x33, 0xa2, 0x0d, 0x27, 0x40, 0x4b, 0x58, 0x99, 0x40, 0x22, 0x00, 0x43, + 0xad, 0x25, 0x27, 0xf5, 0x01, 0x46, 0x1c, 0xe0, 0x3c, 0xf9, 0x41, 0x47, + 0xe4, 0xd2, 0x3a, 0xf4, 0x01, 0xad, 0x2f, 0x46, 0xc3, 0x04, 0xa9, 0x20, + 0x00, 0x42, 0x79, 0x0c, 0xb5, 0xfa, 0x01, 0xb2, 0x01, 0xff, 0x02, 0x06, + 0x00, 0x10, 0x46, 0xa6, 0xdd, 0xfa, 0xf5, 0x01, 0xed, 0xb1, 0xfa, 0x01, + 0x49, 0xbe, 0xbe, 0x1f, 0xf6, 0x41, 0x46, 0xa0, 0x61, 0x60, 0x20, 0x00, + 0x54, 0xdc, 0x45, 0x31, 0x2e, 0x40, 0x42, 0x1a, 0x00, 0x69, 0xf4, 0x81, + 0x06, 0x4a, 0xf7, 0xa9, 0xba, 0xf6, 0x41, 0x50, 0x96, 0x60, 0x6f, 0xf4, + 0x01, 0x02, 0x31, 0x01, 0x01, 0xff, 0x45, 0xd4, 0xe4, 0x62, 0xf4, 0x01, + 0x47, 0x05, 0xd0, 0x5a, 0xf4, 0x01, 0x43, 0x94, 0x21, 0x52, 0xf4, 0x01, + 0x46, 0x4b, 0xbc, 0x61, 0xf4, 0x41, 0x0a, 0xd7, 0x1b, 0x45, 0x52, 0xf1, + 0x51, 0x3e, 0x2e, 0x00, 0x4b, 0x04, 0x9f, 0x40, 0xf9, 0x01, 0xae, 0x11, + 0x02, 0x88, 0x00, 0x01, 0xff, 0x4a, 0x11, 0xa9, 0xae, 0xf5, 0x01, 0x44, + 0xec, 0x00, 0xdc, 0xf6, 0x41, 0xa4, 0x10, 0x47, 0x91, 0xd0, 0x77, 0xf3, + 0x01, 0xe7, 0xbd, 0xfa, 0x01, 0x49, 0x74, 0xb0, 0x09, 0xf6, 0x41, 0x80, + 0x06, 0x42, 0xd1, 0x00, 0x9f, 0xfa, 0x41, 0x4c, 0xc7, 0x8c, 0x2c, 0xf3, + 0x01, 0x45, 0x29, 0xe5, 0x90, 0xf3, 0x41, 0x0a, 0xa5, 0x01, 0xfb, 0x01, + 0x0a, 0xea, 0x01, 0xd8, 0x01, 0x06, 0xb4, 0x01, 0x8e, 0x01, 0x0b, 0xb3, + 0x02, 0x6c, 0x06, 0xa1, 0x20, 0x23, 0x08, 0x50, 0x02, 0x01, 0xff, 0x4a, + 0xec, 0x3e, 0x69, 0xf8, 0x01, 0x50, 0xe6, 0x3e, 0x79, 0xf8, 0x01, 0x50, + 0xa6, 0x64, 0x61, 0xf8, 0x01, 0x51, 0x1c, 0x5c, 0x71, 0xf8, 0x01, 0x55, + 0xe1, 0x3e, 0x81, 0xf8, 0x41, 0x05, 0xad, 0x23, 0x23, 0x05, 0xbe, 0x1a, + 0x01, 0xff, 0x4a, 0xec, 0x3e, 0x6f, 0xf8, 0x01, 0x50, 0xe6, 0x3e, 0x7f, + 0xf8, 0x01, 0x50, 0xa6, 0x64, 0x67, 0xf8, 0x01, 0x51, 0x1c, 0x5c, 0x77, + 0xf8, 0x01, 0x55, 0xe1, 0x3e, 0x87, 0xf8, 0x41, 0x4a, 0xec, 0x3e, 0x6e, + 0xf8, 0x01, 0x50, 0xe6, 0x3e, 0x7e, 0xf8, 0x01, 0x50, 0xa6, 0x64, 0x66, + 0xf8, 0x01, 0x51, 0x1c, 0x5c, 0x76, 0xf8, 0x01, 0x55, 0xe1, 0x3e, 0x86, + 0xf8, 0x41, 0x4a, 0xec, 0x3e, 0x6a, 0xf8, 0x01, 0x50, 0xe6, 0x3e, 0x7a, + 0xf8, 0x01, 0x50, 0xa6, 0x64, 0x62, 0xf8, 0x01, 0x51, 0x1c, 0x5c, 0x72, + 0xf8, 0x01, 0x55, 0xe1, 0x3e, 0x82, 0xf8, 0x41, 0x05, 0xad, 0x23, 0x23, + 0x05, 0xbe, 0x1a, 0x01, 0xff, 0x4a, 0xec, 0x3e, 0x6c, 0xf8, 0x01, 0x50, + 0xe6, 0x3e, 0x7c, 0xf8, 0x01, 0x50, 0xa6, 0x64, 0x64, 0xf8, 0x01, 0x51, + 0x1c, 0x5c, 0x74, 0xf8, 0x01, 0x55, 0xe1, 0x3e, 0x84, 0xf8, 0x41, 0x4a, + 0xec, 0x3e, 0x6d, 0xf8, 0x01, 0x50, 0xe6, 0x3e, 0x7d, 0xf8, 0x01, 0x50, + 0xa6, 0x64, 0x65, 0xf8, 0x01, 0x51, 0x1c, 0x5c, 0x75, 0xf8, 0x01, 0x55, + 0xe1, 0x3e, 0x85, 0xf8, 0x41, 0x4a, 0xec, 0x3e, 0x68, 0xf8, 0x01, 0x50, + 0xe6, 0x3e, 0x78, 0xf8, 0x01, 0x50, 0xa6, 0x64, 0x60, 0xf8, 0x01, 0x51, + 0x1c, 0x5c, 0x70, 0xf8, 0x01, 0x55, 0xe1, 0x3e, 0x80, 0xf8, 0x41, 0x4a, + 0xec, 0x3e, 0x6b, 0xf8, 0x01, 0x50, 0xe6, 0x3e, 0x7b, 0xf8, 0x01, 0x50, + 0xa6, 0x64, 0x63, 0xf8, 0x01, 0x51, 0x1c, 0x5c, 0x73, 0xf8, 0x01, 0x55, + 0xe1, 0x3e, 0x83, 0xf8, 0x41, 0x43, 0x67, 0x00, 0x0b, 0xf4, 0x01, 0x43, + 0x2d, 0x13, 0xde, 0xf6, 0x81, 0xd8, 0x09, 0x03, 0xaf, 0x02, 0x01, 0xff, + 0x80, 0x06, 0x5b, 0x0b, 0x1a, 0xb3, 0x27, 0x40, 0x12, 0x2f, 0x50, 0xba, + 0x09, 0x46, 0xb2, 0x21, 0xe6, 0x25, 0x00, 0xa3, 0xb1, 0x06, 0xa4, 0xc0, + 0x05, 0x59, 0xe0, 0x12, 0x55, 0x27, 0x00, 0xa6, 0x83, 0x05, 0xa8, 0xc3, + 0x04, 0xac, 0xe5, 0x03, 0xad, 0xb7, 0x03, 0x43, 0x40, 0x9d, 0x11, 0x27, + 0x00, 0xb0, 0x97, 0x03, 0x56, 0x81, 0x36, 0x54, 0x27, 0x00, 0xb2, 0xd4, + 0x02, 0xb3, 0x7c, 0xb4, 0x5a, 0x02, 0x50, 0x02, 0x28, 0x03, 0x32, 0x00, + 0x01, 0xff, 0x06, 0x35, 0x00, 0x06, 0x4e, 0x84, 0x0a, 0x1e, 0x2b, 0x40, + 0x43, 0x16, 0x00, 0xfe, 0x2a, 0x00, 0x47, 0xdf, 0x66, 0x2f, 0x2b, 0x00, + 0x49, 0x83, 0x47, 0xaf, 0x25, 0xc0, 0x00, 0x54, 0xec, 0x3f, 0x06, 0xce, + 0x41, 0x0a, 0x9b, 0x01, 0x1e, 0x0a, 0x8c, 0x0b, 0x01, 0xff, 0x47, 0x4a, + 0x4e, 0xca, 0xfb, 0x01, 0x4e, 0x26, 0x0c, 0xb5, 0x25, 0x00, 0x48, 0x01, + 0x02, 0xb3, 0x25, 0xc0, 0x00, 0x49, 0x75, 0x3b, 0xec, 0x25, 0x40, 0x4e, + 0xe0, 0x26, 0x46, 0xf4, 0x01, 0x45, 0x8f, 0x13, 0x1d, 0x26, 0x40, 0x48, + 0x17, 0x3d, 0x0f, 0x26, 0x00, 0x52, 0x55, 0x54, 0x7e, 0xf5, 0x01, 0xb2, + 0x06, 0x57, 0x07, 0x32, 0xd7, 0x26, 0x40, 0x47, 0xf4, 0xce, 0xe2, 0x23, + 0x00, 0x66, 0x4b, 0x07, 0xc1, 0x27, 0x40, 0x47, 0x47, 0x3e, 0x04, 0x27, + 0x00, 0x49, 0xa0, 0xb8, 0x46, 0xfe, 0x00, 0x4a, 0x86, 0x5f, 0x16, 0x26, + 0x00, 0xad, 0xa2, 0x01, 0x49, 0xe6, 0xbd, 0x64, 0x26, 0x00, 0x45, 0xd7, + 0x05, 0xa1, 0x25, 0x80, 0x2e, 0x43, 0x32, 0x13, 0x06, 0x26, 0x00, 0x42, + 0x42, 0x0b, 0x23, 0xf3, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4c, 0xa3, 0x8c, + 0x25, 0xf3, 0x81, 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x44, 0x46, 0x66, + 0x3c, 0x26, 0x00, 0x4b, 0xb6, 0xa2, 0x24, 0xf3, 0x41, 0x4a, 0x87, 0xa6, + 0x26, 0xf3, 0x41, 0x80, 0x01, 0xff, 0x46, 0x03, 0x8d, 0x33, 0xf5, 0x01, + 0x11, 0x51, 0x0a, 0x48, 0x05, 0x51, 0x00, 0x01, 0xff, 0x54, 0xf0, 0x40, + 0x85, 0x23, 0x00, 0xac, 0x24, 0xb2, 0x16, 0x06, 0x6d, 0x02, 0x06, 0x57, + 0xc2, 0x31, 0xeb, 0x25, 0x40, 0x4d, 0x74, 0x0d, 0xf0, 0x25, 0x00, 0x4e, + 0x64, 0x45, 0xf3, 0x25, 0x40, 0x4e, 0xb2, 0x72, 0xe5, 0x27, 0x00, 0x4e, + 0x20, 0x19, 0xa2, 0x25, 0x40, 0x4d, 0x52, 0x79, 0xe4, 0x27, 0x00, 0x05, + 0x14, 0x01, 0x01, 0xff, 0x4d, 0x74, 0x0d, 0xf1, 0x25, 0x00, 0x4e, 0x64, + 0x45, 0xf2, 0x25, 0x40, 0x4d, 0xc4, 0x85, 0x95, 0xf7, 0x01, 0x4c, 0x86, + 0x0a, 0xa3, 0x25, 0x00, 0x51, 0x81, 0x0a, 0x94, 0xf7, 0x41, 0x04, 0x5f, + 0x07, 0x06, 0x4a, 0x5d, 0x95, 0x3a, 0x26, 0x40, 0x47, 0x68, 0x0a, 0x2b, + 0x2b, 0x00, 0xb3, 0x01, 0xff, 0x45, 0xd7, 0x05, 0xab, 0x25, 0x00, 0x43, + 0x32, 0x13, 0x52, 0x2b, 0x40, 0x48, 0x84, 0x47, 0xad, 0x25, 0x00, 0x04, + 0xc9, 0x00, 0x01, 0xff, 0x0a, 0x9b, 0x01, 0x1f, 0x0a, 0x8c, 0x0b, 0x01, + 0xff, 0xb0, 0x0c, 0x4e, 0x26, 0x0c, 0xb9, 0x25, 0x00, 0x48, 0x01, 0x02, + 0xb7, 0x25, 0x40, 0x47, 0xe1, 0xc9, 0x54, 0x2b, 0x00, 0x46, 0xea, 0x49, + 0xbb, 0x25, 0x40, 0x4e, 0xe0, 0x26, 0x49, 0xf4, 0x01, 0x45, 0x8f, 0x13, + 0x1e, 0x26, 0x40, 0x4c, 0x67, 0x8c, 0xb1, 0x25, 0x00, 0x02, 0x92, 0x01, + 0x01, 0xff, 0x44, 0x2c, 0x33, 0xf1, 0xf3, 0x01, 0x45, 0xe3, 0xc9, 0x20, + 0x2b, 0x40, 0x06, 0x45, 0x04, 0x06, 0x4a, 0xe3, 0xae, 0xdd, 0x2b, 0x40, + 0x47, 0x95, 0x44, 0x26, 0x2b, 0x00, 0x47, 0x68, 0x0a, 0x28, 0x2b, 0x00, + 0xb3, 0x01, 0xff, 0x4b, 0x87, 0x0a, 0xfd, 0x25, 0x00, 0x45, 0xd7, 0x05, + 0xfb, 0x25, 0x00, 0x43, 0x32, 0x13, 0x50, 0x2b, 0x40, 0xa1, 0x4d, 0x03, + 0xc4, 0x00, 0x19, 0xaf, 0x01, 0xff, 0x04, 0x15, 0x01, 0x06, 0x64, 0x4b, + 0x0a, 0xa0, 0xf7, 0x41, 0x4c, 0x0b, 0x91, 0x86, 0xcc, 0x01, 0x4d, 0xd9, + 0x87, 0x87, 0xcc, 0x41, 0x80, 0x17, 0x0a, 0x8c, 0x0b, 0x01, 0xff, 0x47, + 0xe9, 0x49, 0xc5, 0x25, 0x00, 0x4e, 0x26, 0x0c, 0xc3, 0x25, 0x00, 0x48, + 0x01, 0x02, 0xc1, 0x25, 0x40, 0x4a, 0x81, 0xac, 0xd9, 0x26, 0x00, 0x09, + 0x9c, 0x01, 0x01, 0xff, 0x4e, 0xe0, 0x26, 0x48, 0xf4, 0x01, 0x45, 0x8f, + 0x13, 0x1c, 0x26, 0x40, 0x4a, 0x37, 0xb0, 0x1c, 0x2b, 0x00, 0x49, 0x4b, + 0x9e, 0x46, 0xf5, 0x41, 0x55, 0x4d, 0x39, 0xab, 0xf5, 0x01, 0xa5, 0x0f, + 0xaf, 0x01, 0xff, 0x50, 0xd6, 0x66, 0x2d, 0x2b, 0x00, 0x47, 0xfe, 0xd6, + 0xd6, 0x29, 0x40, 0xa1, 0x06, 0x45, 0x8f, 0xd1, 0x21, 0x2b, 0x40, 0x42, + 0x34, 0x00, 0x0d, 0xf9, 0x81, 0x11, 0x03, 0x70, 0x15, 0x01, 0xff, 0x4a, + 0xa3, 0xa8, 0x05, 0x27, 0x00, 0x5c, 0x12, 0x19, 0xc0, 0xfb, 0x41, 0x45, + 0x9e, 0x27, 0x61, 0x26, 0x40, 0xac, 0x16, 0x0c, 0x1c, 0x13, 0x06, 0x4c, + 0x14, 0x83, 0x39, 0x26, 0x40, 0x44, 0x12, 0x16, 0xce, 0x2b, 0x00, 0x44, + 0x31, 0x13, 0x27, 0x27, 0x40, 0x42, 0x23, 0x02, 0x90, 0x26, 0x80, 0x0f, + 0xaf, 0x01, 0xff, 0x45, 0xaf, 0x0f, 0x40, 0x27, 0x00, 0x43, 0x15, 0x01, + 0xae, 0xf4, 0x41, 0x64, 0xbf, 0x08, 0xff, 0x26, 0x40, 0x46, 0x96, 0x44, + 0xc7, 0x25, 0x80, 0x3c, 0x03, 0xa6, 0x01, 0x11, 0x08, 0x38, 0xca, 0x01, + 0xff, 0x44, 0xb2, 0x34, 0xc1, 0x26, 0x00, 0x43, 0x41, 0x18, 0xc0, 0x26, + 0x40, 0x0a, 0x9b, 0x01, 0x11, 0x0a, 0x8c, 0x0b, 0x01, 0xff, 0x4e, 0x26, + 0x0c, 0xbf, 0x25, 0x00, 0x48, 0x01, 0x02, 0xbd, 0x25, 0x40, 0x4e, 0xe0, + 0x26, 0x47, 0xf4, 0x01, 0x45, 0x8f, 0x13, 0x1f, 0x26, 0x00, 0x4f, 0x87, + 0x6f, 0x97, 0xf5, 0x41, 0x80, 0x01, 0xff, 0x11, 0x51, 0x0a, 0x12, 0x49, + 0x50, 0xba, 0xcb, 0x26, 0x00, 0x44, 0x9f, 0x27, 0x62, 0x26, 0x00, 0x50, + 0xb6, 0x68, 0xd0, 0x27, 0x40, 0x4e, 0xcf, 0x79, 0x9b, 0xf7, 0x01, 0x4d, + 0x76, 0x56, 0xc8, 0x25, 0x00, 0x52, 0x71, 0x56, 0x9a, 0xf7, 0x41, 0x05, + 0x4b, 0x88, 0x70, 0x45, 0x13, 0x03, 0xcb, 0x25, 0x80, 0x24, 0x48, 0x10, + 0xc8, 0x67, 0x26, 0x00, 0x54, 0x88, 0x44, 0xe1, 0x27, 0x80, 0x06, 0x49, + 0xea, 0xa8, 0xcb, 0xfb, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4e, 0x51, + 0x79, 0xe2, 0x27, 0x00, 0x4f, 0xb1, 0x72, 0xe3, 0x27, 0x40, 0x80, 0x01, + 0xff, 0x5d, 0x2e, 0x15, 0x8a, 0xf7, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, + 0x02, 0x3b, 0x01, 0x27, 0x06, 0x13, 0x01, 0x17, 0x48, 0x1f, 0x0a, 0x87, + 0x26, 0x00, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x4d, 0x74, 0x0d, 0xf4, 0x25, + 0x00, 0x4e, 0x64, 0x45, 0xf7, 0x25, 0x40, 0x4d, 0x74, 0x0d, 0xf5, 0x25, + 0x00, 0x4e, 0x64, 0x45, 0xf6, 0x25, 0x40, 0x47, 0xc6, 0x00, 0x86, 0x26, + 0x00, 0x48, 0xce, 0x41, 0xec, 0x29, 0x40, 0x45, 0x25, 0xe4, 0x55, 0xfa, + 0x01, 0x46, 0x2e, 0xda, 0x57, 0x26, 0x80, 0xed, 0x01, 0x4a, 0x15, 0xaa, + 0x48, 0xfa, 0x81, 0xdf, 0x01, 0x44, 0xbd, 0xef, 0x54, 0xfa, 0x01, 0xab, + 0x73, 0x44, 0xfd, 0xf1, 0x59, 0x26, 0x80, 0x5b, 0x45, 0x52, 0xbe, 0x55, + 0x26, 0x80, 0x43, 0x44, 0x5d, 0xf2, 0x56, 0x26, 0x80, 0x2b, 0x07, 0x27, + 0x0a, 0x01, 0xff, 0x46, 0x2e, 0xda, 0x21, 0xfa, 0x01, 0xab, 0x12, 0x44, + 0xfd, 0xf1, 0x23, 0xfa, 0x01, 0x45, 0x52, 0xbe, 0x1f, 0xfa, 0x01, 0x44, + 0x5d, 0xf2, 0x20, 0xfa, 0x41, 0x43, 0xa1, 0x01, 0x1e, 0xfa, 0x01, 0x45, + 0x4e, 0x09, 0x22, 0xfa, 0x41, 0x09, 0xa3, 0x2c, 0x01, 0xff, 0x4e, 0xac, + 0x2c, 0x0b, 0xfa, 0x01, 0x5b, 0xbc, 0x1d, 0x35, 0xfa, 0x41, 0x09, 0xa3, + 0x2c, 0x01, 0xff, 0x4e, 0xac, 0x2c, 0x0a, 0xfa, 0x01, 0x5b, 0xbc, 0x1d, + 0x34, 0xfa, 0x41, 0x09, 0xa3, 0x2c, 0x01, 0xff, 0x4e, 0xac, 0x2c, 0x0e, + 0xfa, 0x01, 0x5b, 0xbc, 0x1d, 0x38, 0xfa, 0x41, 0x43, 0xa1, 0x01, 0x54, + 0x26, 0x80, 0x4c, 0x45, 0x4e, 0x09, 0x58, 0x26, 0xc0, 0x00, 0x09, 0xa3, + 0x2c, 0x15, 0x8d, 0x01, 0xff, 0x46, 0x2e, 0xda, 0x50, 0xfa, 0x01, 0x45, + 0x52, 0xbe, 0x4e, 0xfa, 0x01, 0x44, 0x5d, 0xf2, 0x4f, 0xfa, 0x41, 0x52, + 0xcd, 0x51, 0x06, 0xfa, 0x01, 0x4e, 0xac, 0x2c, 0x0d, 0xfa, 0x01, 0x5f, + 0x6d, 0x11, 0x1b, 0xfa, 0x01, 0xb4, 0x01, 0xff, 0x5c, 0xfa, 0x17, 0x45, + 0xfa, 0x01, 0x0b, 0xbd, 0x1d, 0x01, 0xff, 0x4f, 0xc8, 0x1d, 0x37, 0xfa, + 0x01, 0x53, 0xf2, 0x4d, 0x30, 0xfa, 0x41, 0x09, 0xa3, 0x2c, 0x01, 0xff, + 0x4e, 0xac, 0x2c, 0x09, 0xfa, 0x01, 0x5b, 0xbc, 0x1d, 0x33, 0xfa, 0x41, + 0x57, 0xa3, 0x2c, 0x4b, 0xfa, 0x41, 0x09, 0xa3, 0x2c, 0x01, 0xff, 0x4e, + 0xac, 0x2c, 0x0c, 0xfa, 0x01, 0x5b, 0xbc, 0x1d, 0x36, 0xfa, 0x41, 0x43, + 0x0e, 0x0b, 0xac, 0xf8, 0x01, 0x4a, 0x53, 0xb2, 0xad, 0xf8, 0x41, 0x4a, + 0xe7, 0xa5, 0x38, 0x26, 0x00, 0x4c, 0x3f, 0x8d, 0x7f, 0x26, 0x40, 0x04, + 0x28, 0x18, 0x22, 0xa4, 0x14, 0xa9, 0x06, 0x4f, 0x47, 0x73, 0x70, 0x26, + 0x40, 0x5a, 0x18, 0x20, 0x18, 0x21, 0x00, 0x4a, 0xd3, 0xaa, 0xcb, 0xf3, + 0x41, 0x44, 0x04, 0x06, 0x92, 0xf4, 0x01, 0x5a, 0x8c, 0x17, 0xbc, 0x27, + 0x40, 0x48, 0x62, 0x1f, 0x40, 0xf6, 0x01, 0x44, 0x0c, 0x08, 0x29, 0xf6, + 0x41, 0x44, 0x87, 0x89, 0xc7, 0xf9, 0x01, 0xae, 0xb5, 0x05, 0xb2, 0x95, + 0x01, 0x49, 0x72, 0xbf, 0xd1, 0xf5, 0x01, 0xb4, 0x62, 0xb6, 0x11, 0x05, + 0x72, 0xec, 0x01, 0xff, 0x54, 0x40, 0x41, 0x12, 0xf3, 0x01, 0x53, 0xb7, + 0x49, 0x14, 0xf3, 0x41, 0x02, 0x60, 0x00, 0x35, 0x04, 0xa1, 0x01, 0x1f, + 0x02, 0x09, 0x00, 0x01, 0xff, 0x44, 0x8f, 0x12, 0x30, 0x30, 0x00, 0xac, + 0x06, 0x48, 0x82, 0x8a, 0x4b, 0xfe, 0x40, 0x43, 0xee, 0x07, 0x07, 0x23, + 0x00, 0x47, 0x76, 0x8a, 0x4f, 0xfe, 0x40, 0x4a, 0x3f, 0xa8, 0xf4, 0xf3, + 0x01, 0x49, 0xad, 0x47, 0x4b, 0xf4, 0x01, 0x4a, 0x6b, 0xb3, 0xf3, 0xf3, + 0x41, 0x18, 0x36, 0x27, 0x06, 0x44, 0x8f, 0x12, 0x1c, 0x30, 0x40, 0x44, + 0xc3, 0x00, 0x3f, 0x2b, 0x00, 0x45, 0xc8, 0x00, 0x33, 0x29, 0x40, 0x42, + 0x6d, 0x14, 0x1a, 0x23, 0x00, 0x02, 0x33, 0x00, 0x01, 0xff, 0x80, 0x06, + 0x45, 0x8a, 0xe8, 0x49, 0xf3, 0x41, 0x47, 0xb8, 0xcf, 0x03, 0xf4, 0x01, + 0x46, 0xac, 0xda, 0xbe, 0xf6, 0x01, 0x44, 0x1d, 0xf2, 0x3d, 0xf9, 0x01, + 0x44, 0x82, 0x57, 0x0a, 0xf3, 0x41, 0x09, 0x0f, 0xb6, 0x06, 0x49, 0x87, + 0xbc, 0xa0, 0x26, 0x40, 0x0f, 0xe4, 0x05, 0xd1, 0x02, 0x06, 0xef, 0x06, + 0x8a, 0x02, 0x07, 0xff, 0x39, 0xc8, 0x01, 0x42, 0x14, 0x05, 0xff, 0x18, + 0x01, 0x0d, 0x76, 0x08, 0x01, 0xff, 0xe1, 0xc1, 0x18, 0x81, 0xa9, 0x01, + 0x42, 0x6a, 0x0d, 0xd7, 0x18, 0x01, 0x42, 0xf0, 0x10, 0xd4, 0x18, 0x01, + 0xe5, 0xc8, 0x18, 0x81, 0x8c, 0x01, 0x42, 0x24, 0x02, 0xcb, 0x18, 0x01, + 0xa8, 0x69, 0x42, 0x52, 0x28, 0xc6, 0x18, 0x01, 0x42, 0x4d, 0x03, 0xcc, + 0x18, 0x01, 0xae, 0x4f, 0xef, 0xc9, 0x18, 0x81, 0x44, 0x42, 0x07, 0x0c, + 0xd8, 0x18, 0x01, 0xb3, 0x30, 0x43, 0xee, 0x05, 0xd2, 0x18, 0x01, 0xb5, + 0x20, 0x44, 0x09, 0xf3, 0xdf, 0x18, 0x01, 0x42, 0x51, 0x00, 0xc2, 0x18, + 0x01, 0xb9, 0x01, 0xff, 0xe1, 0xc4, 0x18, 0x01, 0xef, 0xc5, 0x18, 0x01, + 0xf5, 0xc3, 0x18, 0xc1, 0x00, 0xea, 0xce, 0x18, 0x41, 0xe3, 0xcf, 0x18, + 0x01, 0xf5, 0xc7, 0x18, 0x41, 0x42, 0x52, 0x28, 0xde, 0x18, 0x01, 0x43, + 0x9d, 0xf4, 0xdd, 0x18, 0x41, 0x42, 0x7f, 0x02, 0xd1, 0x18, 0x41, 0x43, + 0x99, 0x57, 0xc0, 0x18, 0x01, 0x43, 0xaa, 0x45, 0xd3, 0x18, 0x41, 0x42, + 0x17, 0x00, 0xdc, 0x18, 0x01, 0x43, 0x71, 0xca, 0xd9, 0x18, 0x01, 0xaf, + 0x01, 0xff, 0x42, 0x13, 0x01, 0xda, 0x18, 0x01, 0x42, 0xcf, 0x00, 0xdb, + 0x18, 0x41, 0xae, 0x01, 0xff, 0xee, 0xd0, 0x18, 0x01, 0xf9, 0xcd, 0x18, + 0x41, 0xed, 0xd6, 0x18, 0x01, 0x42, 0x1d, 0x01, 0xca, 0x18, 0x01, 0xf4, + 0xd5, 0x18, 0x41, 0x46, 0x30, 0xdb, 0xf1, 0x18, 0x01, 0xa6, 0x29, 0x46, + 0xac, 0x2c, 0xf2, 0x18, 0x01, 0xb3, 0x15, 0xb4, 0x01, 0xff, 0x42, 0x92, + 0x01, 0xea, 0x18, 0x01, 0x45, 0x7a, 0x11, 0xec, 0x18, 0x01, 0x45, 0x7f, + 0x2c, 0xeb, 0x18, 0x41, 0x46, 0xc9, 0x1d, 0xf0, 0x18, 0x01, 0x44, 0x46, + 0xdd, 0xef, 0x18, 0x41, 0x44, 0x51, 0x4d, 0xee, 0x18, 0x01, 0x44, 0xce, + 0x51, 0xed, 0x18, 0x41, 0x45, 0x12, 0x0b, 0xe8, 0x18, 0x01, 0xa6, 0x2e, + 0x44, 0xcf, 0x2a, 0xe9, 0x18, 0x01, 0x43, 0x0e, 0x0b, 0xe1, 0x18, 0x01, + 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xe0, 0x18, 0x41, 0x44, 0x25, + 0x01, 0xe3, 0x18, 0x01, 0x42, 0x15, 0x02, 0xe2, 0x18, 0x41, 0x44, 0xc9, + 0x1d, 0xe7, 0x18, 0x01, 0x42, 0x01, 0x26, 0xe6, 0x18, 0x41, 0x43, 0xd2, + 0x05, 0xe5, 0x18, 0x01, 0x43, 0xf6, 0x06, 0xe4, 0x18, 0x41, 0xe1, 0xa1, + 0x18, 0x81, 0xa9, 0x01, 0x42, 0x6a, 0x0d, 0xb7, 0x18, 0x01, 0x42, 0xf0, + 0x10, 0xb4, 0x18, 0x01, 0xe5, 0xa8, 0x18, 0x81, 0x8c, 0x01, 0x42, 0x24, + 0x02, 0xab, 0x18, 0x01, 0xa8, 0x69, 0x42, 0x52, 0x28, 0xa6, 0x18, 0x01, + 0x42, 0x4d, 0x03, 0xac, 0x18, 0x01, 0xae, 0x4f, 0xef, 0xa9, 0x18, 0x81, + 0x44, 0x42, 0x07, 0x0c, 0xb8, 0x18, 0x01, 0xb3, 0x30, 0x43, 0xee, 0x05, + 0xb2, 0x18, 0x01, 0xb5, 0x20, 0x44, 0x09, 0xf3, 0xbf, 0x18, 0x01, 0x42, + 0x51, 0x00, 0xa2, 0x18, 0x01, 0xb9, 0x01, 0xff, 0xe1, 0xa4, 0x18, 0x01, + 0xef, 0xa5, 0x18, 0x01, 0xf5, 0xa3, 0x18, 0xc1, 0x00, 0xea, 0xae, 0x18, + 0x41, 0xe3, 0xaf, 0x18, 0x01, 0xf5, 0xa7, 0x18, 0x41, 0x42, 0x52, 0x28, + 0xbe, 0x18, 0x01, 0x43, 0x9d, 0xf4, 0xbd, 0x18, 0x41, 0x42, 0x7f, 0x02, + 0xb1, 0x18, 0x41, 0x43, 0x99, 0x57, 0xa0, 0x18, 0x01, 0x43, 0xaa, 0x45, + 0xb3, 0x18, 0x41, 0x42, 0x17, 0x00, 0xbc, 0x18, 0x01, 0x43, 0x71, 0xca, + 0xb9, 0x18, 0x01, 0xaf, 0x01, 0xff, 0x42, 0x13, 0x01, 0xba, 0x18, 0x01, + 0x42, 0xcf, 0x00, 0xbb, 0x18, 0x41, 0xae, 0x01, 0xff, 0xee, 0xb0, 0x18, + 0x01, 0xf9, 0xad, 0x18, 0x41, 0xed, 0xb6, 0x18, 0x01, 0x42, 0x1d, 0x01, + 0xaa, 0x18, 0x01, 0xf4, 0xb5, 0x18, 0x41, 0x04, 0x9a, 0xda, 0x11, 0x04, + 0xa1, 0x01, 0x01, 0xff, 0x54, 0x40, 0x41, 0x18, 0xf3, 0x01, 0x53, 0xb7, + 0x49, 0x16, 0xf3, 0x41, 0x06, 0xef, 0x06, 0xa6, 0x02, 0x07, 0xec, 0x05, + 0x25, 0x49, 0x63, 0xbc, 0xff, 0xe2, 0x01, 0x05, 0x3b, 0x2d, 0x01, 0xff, + 0x43, 0xbf, 0xde, 0xee, 0xe2, 0x81, 0x0d, 0x43, 0x81, 0x19, 0xec, 0xe2, + 0xc1, 0x00, 0x42, 0x51, 0x03, 0xed, 0xe2, 0x41, 0x42, 0x51, 0x03, 0xef, + 0xe2, 0x41, 0xe1, 0xc1, 0xe2, 0x81, 0xdf, 0x01, 0x42, 0x16, 0x00, 0xc2, + 0xe2, 0x01, 0x42, 0x37, 0x00, 0xc3, 0xe2, 0x01, 0x42, 0xf0, 0x10, 0xc4, + 0xe2, 0x01, 0xe5, 0xdb, 0xe2, 0x81, 0xc3, 0x01, 0x42, 0x0c, 0x08, 0xcd, + 0xe2, 0x01, 0x42, 0x24, 0x02, 0xc5, 0xe2, 0x01, 0x42, 0x22, 0x00, 0xda, + 0xe2, 0x01, 0xe9, 0xdc, 0xe2, 0x81, 0xa5, 0x01, 0x42, 0x56, 0x19, 0xd0, + 0xe2, 0x01, 0xab, 0x92, 0x01, 0xac, 0x85, 0x01, 0x42, 0x6c, 0x00, 0xd8, + 0xe2, 0x01, 0xae, 0x6d, 0xef, 0xd5, 0xe2, 0x81, 0x5f, 0xb0, 0x53, 0x42, + 0x71, 0x00, 0xd7, 0xe2, 0x01, 0xb3, 0x41, 0xb4, 0x29, 0xf5, 0xde, 0xe2, + 0x81, 0x1e, 0x42, 0xf5, 0x0a, 0xd3, 0xe2, 0x01, 0x42, 0xa9, 0x01, 0xd2, + 0xe2, 0x01, 0xb9, 0x06, 0x42, 0x59, 0x00, 0xd1, 0xe2, 0x41, 0xe1, 0xc6, + 0xe2, 0x01, 0x42, 0xda, 0x2c, 0xeb, 0xe2, 0x41, 0x42, 0x92, 0x01, 0xea, + 0xe2, 0x41, 0xe1, 0xcb, 0xe2, 0x01, 0x42, 0x22, 0x00, 0xcc, 0xe2, 0x01, + 0x42, 0x71, 0x00, 0xe1, 0xe2, 0x01, 0x42, 0x40, 0x06, 0xe0, 0xe2, 0x41, + 0xe1, 0xce, 0xe2, 0x01, 0x42, 0x22, 0x00, 0xcf, 0xe2, 0x41, 0xe1, 0xca, + 0xe2, 0x01, 0x42, 0x22, 0x00, 0xc7, 0xe2, 0x41, 0xee, 0xe6, 0xe2, 0xc1, + 0x00, 0xe7, 0xe2, 0xe2, 0x41, 0xe1, 0xc9, 0xe2, 0x01, 0x42, 0x24, 0x02, + 0xdd, 0xe2, 0x01, 0x42, 0xbc, 0x22, 0xe9, 0xe2, 0x41, 0xe1, 0xc8, 0xe2, + 0x01, 0x43, 0x2a, 0x09, 0xdf, 0xe2, 0x41, 0xe1, 0xd4, 0xe2, 0x01, 0x42, + 0x22, 0x00, 0xd9, 0xe2, 0x41, 0x42, 0x1d, 0x01, 0xe5, 0xe2, 0x41, 0xee, + 0xe7, 0xe2, 0x41, 0xe1, 0xc0, 0xe2, 0x81, 0x0a, 0x42, 0x1d, 0x01, 0xe4, + 0xe2, 0x01, 0xf5, 0xd6, 0xe2, 0x41, 0xee, 0xe8, 0xe2, 0xc1, 0x00, 0xe7, + 0xe3, 0xe2, 0x41, 0x45, 0x12, 0x0b, 0xf8, 0xe2, 0x01, 0xa6, 0x2e, 0x44, + 0xcf, 0x2a, 0xf9, 0xe2, 0x01, 0x43, 0x0e, 0x0b, 0xf1, 0xe2, 0x01, 0xb3, + 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xf0, 0xe2, 0x41, 0x44, 0x25, 0x01, + 0xf3, 0xe2, 0x01, 0x42, 0x15, 0x02, 0xf2, 0xe2, 0x41, 0x44, 0xc9, 0x1d, + 0xf7, 0xe2, 0x01, 0x42, 0x01, 0x26, 0xf6, 0xe2, 0x41, 0x43, 0xd2, 0x05, + 0xf5, 0xe2, 0x01, 0x43, 0xf6, 0x06, 0xf4, 0xe2, 0x41, 0xa1, 0x82, 0x0b, + 0xa5, 0xb5, 0x05, 0xa9, 0xba, 0x01, 0xaf, 0x9c, 0x01, 0x02, 0x1f, 0x01, + 0x01, 0xff, 0x45, 0xf7, 0xe4, 0xe6, 0x2b, 0x00, 0x0d, 0x3a, 0x83, 0x01, + 0xff, 0xa6, 0x74, 0x04, 0x0e, 0x0b, 0x35, 0x4d, 0xfb, 0x4c, 0x5e, 0x21, + 0x00, 0xb4, 0x06, 0x4b, 0x76, 0xa5, 0x89, 0x21, 0x40, 0x05, 0x25, 0x01, + 0x11, 0x03, 0x20, 0x0a, 0x01, 0xff, 0x46, 0x41, 0xaf, 0x56, 0x21, 0x00, + 0x46, 0xee, 0x74, 0x54, 0x21, 0x40, 0x47, 0x01, 0x4d, 0x5c, 0x21, 0x00, + 0x46, 0x41, 0xaf, 0x57, 0x21, 0x00, 0x48, 0x2a, 0x01, 0xbe, 0x00, 0x40, + 0x46, 0x12, 0x0b, 0x5b, 0x21, 0x00, 0x45, 0x41, 0xaf, 0x55, 0x21, 0x00, + 0x44, 0x22, 0x00, 0xbd, 0x00, 0x00, 0x45, 0x20, 0xe9, 0x51, 0x21, 0x00, + 0x47, 0x2a, 0x01, 0xbc, 0x00, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, + 0x82, 0x1b, 0x52, 0x21, 0x00, 0x44, 0xef, 0x74, 0x53, 0x21, 0x40, 0x46, + 0x90, 0xdb, 0x50, 0x21, 0x00, 0x44, 0x27, 0xac, 0x59, 0x21, 0x40, 0x04, + 0xd2, 0x05, 0x06, 0x4a, 0x3d, 0xaf, 0x58, 0x21, 0x40, 0x47, 0x01, 0x4d, + 0x5d, 0x21, 0x00, 0x46, 0xe6, 0xdf, 0x5a, 0x21, 0x40, 0x50, 0xa6, 0x63, + 0xbb, 0xfb, 0x01, 0xac, 0x01, 0xff, 0x44, 0x55, 0xef, 0x0b, 0xf3, 0x01, + 0x47, 0xdd, 0xd2, 0xd0, 0xf3, 0x01, 0x4c, 0x63, 0x96, 0x30, 0x22, 0x40, + 0x4c, 0xdf, 0x8c, 0xf3, 0xf4, 0x01, 0x04, 0xdd, 0x0f, 0xe1, 0x03, 0x03, + 0x4d, 0x20, 0xc8, 0x03, 0xa5, 0xaf, 0x03, 0x44, 0xb1, 0xae, 0xbb, 0xf3, + 0x01, 0x43, 0x66, 0x17, 0x4d, 0x26, 0x00, 0x07, 0x5d, 0xd6, 0x01, 0xff, + 0x0f, 0xe4, 0x05, 0xcf, 0x01, 0x0d, 0x76, 0x08, 0x01, 0xff, 0xe1, 0x97, + 0x05, 0x01, 0xa2, 0xb9, 0x01, 0xa3, 0xac, 0x01, 0xa4, 0x9f, 0x01, 0xe5, + 0x9f, 0x05, 0x81, 0x95, 0x01, 0x42, 0x0c, 0x1a, 0xa0, 0x05, 0x01, 0x42, + 0x24, 0x02, 0xa1, 0x05, 0x01, 0xa8, 0x7d, 0xe9, 0xa5, 0x05, 0x81, 0x72, + 0x42, 0x80, 0x20, 0xa7, 0x05, 0x01, 0x42, 0x1b, 0x02, 0xa8, 0x05, 0x01, + 0xac, 0x5a, 0x42, 0x2a, 0x02, 0xab, 0x05, 0x01, 0xae, 0x48, 0xef, 0xae, + 0x05, 0x01, 0x42, 0x6f, 0x02, 0xaf, 0x05, 0x01, 0x42, 0x43, 0x14, 0xb0, + 0x05, 0x01, 0x42, 0x88, 0x00, 0xb1, 0x05, 0x01, 0xb3, 0x26, 0xb4, 0x1a, + 0xf5, 0xb7, 0x05, 0x01, 0x42, 0x32, 0x00, 0xb8, 0x05, 0x01, 0x42, 0x6d, + 0x43, 0xb9, 0x05, 0x01, 0xf9, 0xbb, 0x05, 0x01, 0x42, 0x4b, 0x0a, 0xbc, + 0x05, 0x41, 0xe5, 0xb5, 0x05, 0x01, 0x42, 0xb0, 0x01, 0xb6, 0x05, 0x41, + 0xe5, 0xb3, 0x05, 0x01, 0x42, 0xb0, 0x01, 0xb4, 0x05, 0x41, 0xe5, 0xac, + 0x05, 0x01, 0x42, 0x80, 0x20, 0xad, 0x05, 0x41, 0xe1, 0xa9, 0x05, 0x01, + 0x42, 0x74, 0x00, 0xaa, 0x05, 0x41, 0x42, 0x80, 0x20, 0xa6, 0x05, 0x41, + 0xe1, 0xa3, 0x05, 0x01, 0x42, 0x22, 0x00, 0xa4, 0x05, 0x41, 0xe9, 0x9e, + 0x05, 0x41, 0xe5, 0x9c, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x9d, 0x05, 0x41, + 0xe5, 0x9a, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x9b, 0x05, 0x41, 0x42, 0xb7, + 0x05, 0x98, 0x05, 0x01, 0xe5, 0x99, 0x05, 0x41, 0xe1, 0x70, 0x05, 0x01, + 0xa2, 0xb9, 0x01, 0xa3, 0xac, 0x01, 0xa4, 0x9f, 0x01, 0xe5, 0x78, 0x05, + 0x81, 0x95, 0x01, 0x42, 0x0c, 0x1a, 0x79, 0x05, 0x01, 0x42, 0x24, 0x02, + 0x7a, 0x05, 0x01, 0xa8, 0x7d, 0xe9, 0x7e, 0x05, 0x81, 0x72, 0x42, 0x80, + 0x20, 0x80, 0x05, 0x01, 0x42, 0x1b, 0x02, 0x81, 0x05, 0x01, 0xac, 0x5a, + 0x42, 0x2a, 0x02, 0x84, 0x05, 0x01, 0xae, 0x48, 0xef, 0x87, 0x05, 0x01, + 0x42, 0x6f, 0x02, 0x88, 0x05, 0x01, 0x42, 0x43, 0x14, 0x89, 0x05, 0x01, + 0x42, 0x88, 0x00, 0x8a, 0x05, 0x01, 0xb3, 0x26, 0xb4, 0x1a, 0xf5, 0x90, + 0x05, 0x01, 0x42, 0x32, 0x00, 0x91, 0x05, 0x01, 0x42, 0x6d, 0x43, 0x92, + 0x05, 0x01, 0xf9, 0x94, 0x05, 0x01, 0x42, 0x4b, 0x0a, 0x95, 0x05, 0x41, + 0xe5, 0x8e, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x8f, 0x05, 0x41, 0xe5, 0x8c, + 0x05, 0x01, 0x42, 0xb0, 0x01, 0x8d, 0x05, 0x41, 0xe5, 0x85, 0x05, 0x01, + 0x42, 0x80, 0x20, 0x86, 0x05, 0x41, 0xe1, 0x82, 0x05, 0x01, 0x42, 0x74, + 0x00, 0x83, 0x05, 0x41, 0x42, 0x80, 0x20, 0x7f, 0x05, 0x41, 0xe1, 0x7c, + 0x05, 0x01, 0x42, 0x22, 0x00, 0x7d, 0x05, 0x41, 0xe9, 0x77, 0x05, 0x41, + 0xe5, 0x75, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x76, 0x05, 0x41, 0xe5, 0x73, + 0x05, 0x01, 0x42, 0xb0, 0x01, 0x74, 0x05, 0x41, 0x42, 0xb7, 0x05, 0x71, + 0x05, 0x01, 0xe5, 0x72, 0x05, 0x41, 0x1f, 0xe9, 0x11, 0x06, 0x4c, 0xe7, + 0x96, 0x17, 0x23, 0x40, 0x42, 0x37, 0x00, 0xf0, 0x6f, 0x01, 0x44, 0x7d, + 0xf1, 0xf1, 0x6f, 0x41, 0x80, 0x06, 0x48, 0x88, 0xc4, 0xfc, 0xf4, 0x41, + 0x46, 0x51, 0xb3, 0xf9, 0xf4, 0x01, 0x44, 0xe1, 0xef, 0xae, 0xf3, 0x41, + 0x42, 0x1b, 0x01, 0xc5, 0xce, 0x01, 0x46, 0xd5, 0x96, 0x0c, 0x27, 0x40, + 0x55, 0x0a, 0x3a, 0x2f, 0x2a, 0x00, 0x04, 0xeb, 0x06, 0x83, 0x03, 0xb2, + 0x0d, 0x43, 0x31, 0x13, 0xb6, 0x26, 0xc0, 0x00, 0x49, 0x21, 0x2e, 0x77, + 0xf7, 0x41, 0x45, 0xf6, 0xea, 0x23, 0x21, 0x00, 0x06, 0x35, 0x00, 0x67, + 0x02, 0x09, 0x00, 0x01, 0xff, 0x50, 0x16, 0x61, 0xa5, 0xf7, 0x01, 0x06, + 0x6d, 0x15, 0x11, 0x05, 0xd5, 0xe8, 0x01, 0xff, 0x4c, 0x87, 0x00, 0xd9, + 0x22, 0x00, 0x49, 0xec, 0x00, 0xd8, 0x22, 0x40, 0x06, 0x31, 0x14, 0x37, + 0x54, 0x58, 0x42, 0xb3, 0xf7, 0x01, 0x4b, 0x1b, 0x61, 0xa6, 0xf7, 0x01, + 0x4f, 0x66, 0x72, 0x7d, 0xf6, 0x01, 0xb3, 0x11, 0x06, 0xad, 0x02, 0x01, + 0xff, 0x46, 0x12, 0x03, 0x88, 0xf7, 0x01, 0x46, 0xd6, 0x05, 0x92, 0xf7, + 0x41, 0x46, 0x13, 0x19, 0xad, 0xf7, 0x01, 0x52, 0xff, 0x52, 0xb9, 0xf7, + 0x01, 0x46, 0x50, 0x31, 0x7c, 0xf6, 0x41, 0x52, 0xec, 0x2b, 0xd0, 0xf7, + 0x01, 0x4f, 0xd5, 0x1c, 0xbf, 0xf7, 0x41, 0x04, 0x16, 0x00, 0xe6, 0x01, + 0x49, 0xf9, 0xb6, 0x14, 0xcc, 0x01, 0x48, 0xce, 0x29, 0xee, 0x22, 0x00, + 0x49, 0xd1, 0x46, 0x5e, 0x20, 0x00, 0x47, 0x55, 0xd1, 0x9d, 0xcc, 0x01, + 0x5a, 0x4c, 0x20, 0x3b, 0x30, 0x00, 0x0c, 0x87, 0x90, 0xa0, 0x01, 0xac, + 0x61, 0x55, 0xd4, 0x3c, 0xa8, 0x26, 0x00, 0x11, 0xd7, 0x5c, 0x3f, 0xb2, + 0x31, 0x48, 0x00, 0xcb, 0x3d, 0x2e, 0x00, 0xb4, 0x06, 0x4b, 0x81, 0xa5, + 0x9a, 0x29, 0x40, 0x02, 0x5c, 0x00, 0x0c, 0x44, 0x36, 0x23, 0x2f, 0x2e, + 0x00, 0x4c, 0x0b, 0x94, 0xa6, 0xf6, 0x41, 0x44, 0xd1, 0x45, 0x7f, 0x2b, + 0x00, 0x47, 0xe6, 0x3b, 0x0b, 0x00, 0xc0, 0x00, 0x44, 0x66, 0xb8, 0x8a, + 0x00, 0x40, 0x49, 0x9a, 0xb5, 0x9c, 0xcc, 0x01, 0x4f, 0xd5, 0x6c, 0x0a, + 0xcc, 0x41, 0xd2, 0x70, 0xfb, 0x01, 0xd3, 0x71, 0xfb, 0x01, 0xd4, 0x72, + 0xfb, 0x01, 0xd5, 0x73, 0xfb, 0x01, 0xd6, 0x74, 0xfb, 0x01, 0xd7, 0x75, + 0xfb, 0x41, 0x45, 0x07, 0xe4, 0x84, 0xcc, 0x01, 0x43, 0xee, 0x07, 0x7c, + 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x49, 0xc1, 0x58, 0xd0, 0x23, 0x00, + 0x05, 0x51, 0x00, 0x01, 0xff, 0x07, 0xfb, 0x04, 0x12, 0x4f, 0x5c, 0x6d, + 0x90, 0xcc, 0x01, 0x4a, 0xe6, 0x45, 0x7f, 0x23, 0x00, 0x50, 0xf7, 0x07, + 0x15, 0xce, 0x41, 0x45, 0x5c, 0x00, 0xef, 0x2a, 0x00, 0x45, 0x20, 0x07, + 0xf0, 0x2a, 0x40, 0x44, 0xb9, 0x00, 0x31, 0x30, 0x80, 0x0d, 0x56, 0x4f, + 0x38, 0x32, 0x30, 0xc0, 0x00, 0x4b, 0x29, 0x1a, 0x34, 0x30, 0x40, 0x80, + 0x01, 0xff, 0x4a, 0xa0, 0x08, 0x35, 0x30, 0x00, 0x4a, 0x2a, 0x1a, 0x33, + 0x30, 0x40, 0x55, 0x8c, 0x39, 0xd0, 0x29, 0x00, 0x55, 0x49, 0x3a, 0xe4, + 0x2a, 0x00, 0x56, 0x89, 0x37, 0xe2, 0x2a, 0x00, 0x56, 0x23, 0x38, 0xca, + 0x27, 0x40, 0x05, 0x5a, 0x03, 0x94, 0x01, 0x05, 0x3b, 0x2d, 0x01, 0xff, + 0x60, 0x74, 0x0f, 0xe1, 0x1c, 0x00, 0x07, 0x36, 0x61, 0x79, 0x02, 0x3b, + 0x01, 0x5e, 0x02, 0x1b, 0x02, 0x4e, 0x47, 0xdc, 0xd4, 0xd2, 0x1c, 0x00, + 0x02, 0x0d, 0x00, 0x38, 0x45, 0xdd, 0xea, 0xd1, 0x1c, 0x00, 0xb4, 0x1e, + 0x0b, 0xbc, 0x22, 0x01, 0xff, 0x5e, 0x63, 0x12, 0xd5, 0x1c, 0x00, 0x53, + 0xe8, 0x0a, 0xd6, 0x1c, 0x00, 0x5b, 0x0c, 0x1c, 0xd7, 0x1c, 0xc0, 0x00, + 0x4a, 0x23, 0xa6, 0xd9, 0x1c, 0x40, 0x4f, 0x3d, 0x6e, 0xdf, 0x1c, 0x00, + 0x4d, 0xe6, 0x87, 0xdb, 0x1c, 0x00, 0x4d, 0x06, 0x0f, 0xde, 0x1c, 0x40, + 0x63, 0xd8, 0x0a, 0xe0, 0x1c, 0x00, 0x48, 0x61, 0xb0, 0xf8, 0x1c, 0x40, + 0x46, 0xb0, 0xdf, 0xd0, 0x1c, 0x00, 0x4e, 0xc3, 0x7c, 0xdc, 0x1c, 0x40, + 0x47, 0xa1, 0x12, 0xdd, 0x1c, 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x4a, + 0x5f, 0xb0, 0xf9, 0x1c, 0x00, 0x47, 0xf4, 0x0a, 0xda, 0x1c, 0x40, 0x45, + 0x5c, 0x00, 0xf4, 0x1c, 0x00, 0x45, 0x20, 0x07, 0xd8, 0x1c, 0x40, 0xa1, + 0x72, 0x5c, 0x52, 0x17, 0xfa, 0x1c, 0x00, 0x56, 0x2f, 0x34, 0xee, 0x1c, + 0x00, 0x4b, 0xe6, 0x9d, 0xf5, 0x1c, 0x00, 0x4d, 0x38, 0x34, 0xef, 0x1c, + 0x00, 0x49, 0x7e, 0xbc, 0xd3, 0x1c, 0x00, 0xb2, 0x36, 0x46, 0xa0, 0xe0, + 0xed, 0x1c, 0x00, 0x4b, 0x6e, 0xa4, 0xf6, 0x1c, 0x00, 0x08, 0x0e, 0x63, + 0x06, 0x5a, 0xbc, 0x22, 0xd4, 0x1c, 0x40, 0x48, 0xc9, 0x7c, 0xe5, 0x1c, + 0x80, 0x13, 0x47, 0xf4, 0x0a, 0xe2, 0x1c, 0x00, 0x46, 0xcb, 0x7c, 0xe3, + 0x1c, 0xc0, 0x00, 0x4a, 0x9b, 0xa6, 0xe7, 0x1c, 0x40, 0x4a, 0x9b, 0xa6, + 0xe8, 0x1c, 0x40, 0x10, 0x06, 0x63, 0x0c, 0x53, 0xde, 0x4b, 0xf3, 0x1c, + 0x00, 0x53, 0x80, 0x4d, 0xf0, 0x1c, 0x40, 0x48, 0xc9, 0x7c, 0xe6, 0x1c, + 0x00, 0x46, 0xcb, 0x7c, 0xe4, 0x1c, 0x40, 0x08, 0x3d, 0x16, 0x0c, 0x4b, + 0xe6, 0x4b, 0xf2, 0x1c, 0x00, 0x47, 0x64, 0xd6, 0xf7, 0x1c, 0x40, 0x4c, + 0x62, 0x17, 0xe9, 0x1c, 0x00, 0x4c, 0x97, 0x8c, 0xea, 0x1c, 0x00, 0x4e, + 0xcd, 0x7d, 0xf1, 0x1c, 0x00, 0x4b, 0xb0, 0xa4, 0xeb, 0x1c, 0xc0, 0x00, + 0x4a, 0x9b, 0xa6, 0xec, 0x1c, 0x40, 0x02, 0xf1, 0x03, 0xb4, 0x08, 0x45, + 0xc6, 0xe8, 0xdb, 0xf9, 0x01, 0x11, 0x92, 0x5d, 0x01, 0xff, 0xd1, 0x00, + 0xfe, 0x80, 0xda, 0x04, 0xd2, 0x01, 0xfe, 0x80, 0xbf, 0x02, 0xd3, 0x02, + 0xfe, 0x80, 0x91, 0x02, 0xd4, 0x03, 0xfe, 0x80, 0xe3, 0x01, 0xd5, 0x04, + 0xfe, 0x80, 0xb5, 0x01, 0xd6, 0x05, 0xfe, 0x80, 0x87, 0x01, 0xd7, 0x06, + 0xfe, 0x80, 0x5a, 0xd8, 0x07, 0xfe, 0x80, 0x2d, 0xd9, 0x08, 0xfe, 0xc0, + 0x00, 0xd0, 0x49, 0x01, 0x0e, 0xd1, 0x4a, 0x01, 0x0e, 0xd2, 0x4b, 0x01, + 0x0e, 0xd3, 0x4c, 0x01, 0x0e, 0xd4, 0x4d, 0x01, 0x0e, 0xd5, 0x4e, 0x01, + 0x0e, 0xd6, 0x4f, 0x01, 0x0e, 0xd7, 0x50, 0x01, 0x0e, 0xd8, 0x51, 0x01, + 0x0e, 0xd9, 0x52, 0x01, 0x4e, 0xd0, 0x3f, 0x01, 0x0e, 0xd1, 0x40, 0x01, + 0x0e, 0xd2, 0x41, 0x01, 0x0e, 0xd3, 0x42, 0x01, 0x0e, 0xd4, 0x43, 0x01, + 0x0e, 0xd5, 0x44, 0x01, 0x0e, 0xd6, 0x45, 0x01, 0x0e, 0xd7, 0x46, 0x01, + 0x0e, 0xd8, 0x47, 0x01, 0x0e, 0xd9, 0x48, 0x01, 0x4e, 0xd0, 0x35, 0x01, + 0x0e, 0xd1, 0x36, 0x01, 0x0e, 0xd2, 0x37, 0x01, 0x0e, 0xd3, 0x38, 0x01, + 0x0e, 0xd4, 0x39, 0x01, 0x0e, 0xd5, 0x3a, 0x01, 0x0e, 0xd6, 0x3b, 0x01, + 0x0e, 0xd7, 0x3c, 0x01, 0x0e, 0xd8, 0x3d, 0x01, 0x0e, 0xd9, 0x3e, 0x01, + 0x4e, 0xd0, 0x2b, 0x01, 0x0e, 0xd1, 0x2c, 0x01, 0x0e, 0xd2, 0x2d, 0x01, + 0x0e, 0xd3, 0x2e, 0x01, 0x0e, 0xd4, 0x2f, 0x01, 0x0e, 0xd5, 0x30, 0x01, + 0x0e, 0xd6, 0x31, 0x01, 0x0e, 0xd7, 0x32, 0x01, 0x0e, 0xd8, 0x33, 0x01, + 0x0e, 0xd9, 0x34, 0x01, 0x4e, 0xd0, 0x21, 0x01, 0x0e, 0xd1, 0x22, 0x01, + 0x0e, 0xd2, 0x23, 0x01, 0x0e, 0xd3, 0x24, 0x01, 0x0e, 0xd4, 0x25, 0x01, + 0x0e, 0xd5, 0x26, 0x01, 0x0e, 0xd6, 0x27, 0x01, 0x0e, 0xd7, 0x28, 0x01, + 0x0e, 0xd8, 0x29, 0x01, 0x0e, 0xd9, 0x2a, 0x01, 0x4e, 0xd0, 0x17, 0x01, + 0x0e, 0xd1, 0x18, 0x01, 0x0e, 0xd2, 0x19, 0x01, 0x0e, 0xd3, 0x1a, 0x01, + 0x0e, 0xd4, 0x1b, 0x01, 0x0e, 0xd5, 0x1c, 0x01, 0x0e, 0xd6, 0x1d, 0x01, + 0x0e, 0xd7, 0x1e, 0x01, 0x0e, 0xd8, 0x1f, 0x01, 0x0e, 0xd9, 0x20, 0x01, + 0x4e, 0xd0, 0x0d, 0x01, 0x0e, 0xd1, 0x0e, 0x01, 0x0e, 0xd2, 0x0f, 0x01, + 0x0e, 0xd3, 0x10, 0x01, 0x0e, 0xd4, 0x11, 0x01, 0x0e, 0xd5, 0x12, 0x01, + 0x0e, 0xd6, 0x13, 0x01, 0x0e, 0xd7, 0x14, 0x01, 0x0e, 0xd8, 0x15, 0x01, + 0x0e, 0xd9, 0x16, 0x01, 0x4e, 0xd0, 0x03, 0x01, 0x8e, 0xe7, 0x01, 0xd1, + 0x04, 0x01, 0x8e, 0xb9, 0x01, 0xd2, 0x05, 0x01, 0x8e, 0x8b, 0x01, 0xd3, + 0x06, 0x01, 0x8e, 0x5e, 0xd4, 0x07, 0x01, 0x8e, 0x31, 0xd5, 0x08, 0x01, + 0x8e, 0x10, 0xd6, 0x09, 0x01, 0x0e, 0xd7, 0x0a, 0x01, 0x0e, 0xd8, 0x0b, + 0x01, 0x0e, 0xd9, 0x0c, 0x01, 0x4e, 0xd0, 0xe9, 0x01, 0x0e, 0xd1, 0xea, + 0x01, 0x0e, 0xd2, 0xeb, 0x01, 0x0e, 0xd3, 0xec, 0x01, 0x0e, 0xd4, 0xed, + 0x01, 0x0e, 0xd5, 0xee, 0x01, 0x0e, 0xd6, 0xef, 0x01, 0x4e, 0xd0, 0xdf, + 0x01, 0x0e, 0xd1, 0xe0, 0x01, 0x0e, 0xd2, 0xe1, 0x01, 0x0e, 0xd3, 0xe2, + 0x01, 0x0e, 0xd4, 0xe3, 0x01, 0x0e, 0xd5, 0xe4, 0x01, 0x0e, 0xd6, 0xe5, + 0x01, 0x0e, 0xd7, 0xe6, 0x01, 0x0e, 0xd8, 0xe7, 0x01, 0x0e, 0xd9, 0xe8, + 0x01, 0x4e, 0xd0, 0xd5, 0x01, 0x0e, 0xd1, 0xd6, 0x01, 0x0e, 0xd2, 0xd7, + 0x01, 0x0e, 0xd3, 0xd8, 0x01, 0x0e, 0xd4, 0xd9, 0x01, 0x0e, 0xd5, 0xda, + 0x01, 0x0e, 0xd6, 0xdb, 0x01, 0x0e, 0xd7, 0xdc, 0x01, 0x0e, 0xd8, 0xdd, + 0x01, 0x0e, 0xd9, 0xde, 0x01, 0x4e, 0xd0, 0xcb, 0x01, 0x0e, 0xd1, 0xcc, + 0x01, 0x0e, 0xd2, 0xcd, 0x01, 0x0e, 0xd3, 0xce, 0x01, 0x0e, 0xd4, 0xcf, + 0x01, 0x0e, 0xd5, 0xd0, 0x01, 0x0e, 0xd6, 0xd1, 0x01, 0x0e, 0xd7, 0xd2, + 0x01, 0x0e, 0xd8, 0xd3, 0x01, 0x0e, 0xd9, 0xd4, 0x01, 0x4e, 0xd0, 0xc1, + 0x01, 0x0e, 0xd1, 0xc2, 0x01, 0x0e, 0xd2, 0xc3, 0x01, 0x0e, 0xd3, 0xc4, + 0x01, 0x0e, 0xd4, 0xc5, 0x01, 0x0e, 0xd5, 0xc6, 0x01, 0x0e, 0xd6, 0xc7, + 0x01, 0x0e, 0xd7, 0xc8, 0x01, 0x0e, 0xd8, 0xc9, 0x01, 0x0e, 0xd9, 0xca, + 0x01, 0x4e, 0xd0, 0xb7, 0x01, 0x0e, 0xd1, 0xb8, 0x01, 0x0e, 0xd2, 0xb9, + 0x01, 0x0e, 0xd3, 0xba, 0x01, 0x0e, 0xd4, 0xbb, 0x01, 0x0e, 0xd5, 0xbc, + 0x01, 0x0e, 0xd6, 0xbd, 0x01, 0x0e, 0xd7, 0xbe, 0x01, 0x0e, 0xd8, 0xbf, + 0x01, 0x0e, 0xd9, 0xc0, 0x01, 0x4e, 0xd0, 0x09, 0xfe, 0x80, 0x9b, 0x03, + 0xd1, 0x0a, 0xfe, 0x80, 0xed, 0x02, 0xd2, 0x0b, 0xfe, 0x80, 0xbf, 0x02, + 0xd3, 0x0c, 0xfe, 0x80, 0x91, 0x02, 0xd4, 0x0d, 0xfe, 0x80, 0xe3, 0x01, + 0xd5, 0x0e, 0xfe, 0x80, 0xb5, 0x01, 0xd6, 0x0f, 0xfe, 0x80, 0x87, 0x01, + 0xd7, 0x00, 0x01, 0x8e, 0x5a, 0xd8, 0x01, 0x01, 0x8e, 0x2d, 0xd9, 0x02, + 0x01, 0xce, 0x00, 0xd0, 0xad, 0x01, 0x0e, 0xd1, 0xae, 0x01, 0x0e, 0xd2, + 0xaf, 0x01, 0x0e, 0xd3, 0xb0, 0x01, 0x0e, 0xd4, 0xb1, 0x01, 0x0e, 0xd5, + 0xb2, 0x01, 0x0e, 0xd6, 0xb3, 0x01, 0x0e, 0xd7, 0xb4, 0x01, 0x0e, 0xd8, + 0xb5, 0x01, 0x0e, 0xd9, 0xb6, 0x01, 0x4e, 0xd0, 0xa3, 0x01, 0x0e, 0xd1, + 0xa4, 0x01, 0x0e, 0xd2, 0xa5, 0x01, 0x0e, 0xd3, 0xa6, 0x01, 0x0e, 0xd4, + 0xa7, 0x01, 0x0e, 0xd5, 0xa8, 0x01, 0x0e, 0xd6, 0xa9, 0x01, 0x0e, 0xd7, + 0xaa, 0x01, 0x0e, 0xd8, 0xab, 0x01, 0x0e, 0xd9, 0xac, 0x01, 0x4e, 0xd0, + 0x99, 0x01, 0x0e, 0xd1, 0x9a, 0x01, 0x0e, 0xd2, 0x9b, 0x01, 0x0e, 0xd3, + 0x9c, 0x01, 0x0e, 0xd4, 0x9d, 0x01, 0x0e, 0xd5, 0x9e, 0x01, 0x0e, 0xd6, + 0x9f, 0x01, 0x0e, 0xd7, 0xa0, 0x01, 0x0e, 0xd8, 0xa1, 0x01, 0x0e, 0xd9, + 0xa2, 0x01, 0x4e, 0xd0, 0x8f, 0x01, 0x0e, 0xd1, 0x90, 0x01, 0x0e, 0xd2, + 0x91, 0x01, 0x0e, 0xd3, 0x92, 0x01, 0x0e, 0xd4, 0x93, 0x01, 0x0e, 0xd5, + 0x94, 0x01, 0x0e, 0xd6, 0x95, 0x01, 0x0e, 0xd7, 0x96, 0x01, 0x0e, 0xd8, + 0x97, 0x01, 0x0e, 0xd9, 0x98, 0x01, 0x4e, 0xd0, 0x85, 0x01, 0x0e, 0xd1, + 0x86, 0x01, 0x0e, 0xd2, 0x87, 0x01, 0x0e, 0xd3, 0x88, 0x01, 0x0e, 0xd4, + 0x89, 0x01, 0x0e, 0xd5, 0x8a, 0x01, 0x0e, 0xd6, 0x8b, 0x01, 0x0e, 0xd7, + 0x8c, 0x01, 0x0e, 0xd8, 0x8d, 0x01, 0x0e, 0xd9, 0x8e, 0x01, 0x4e, 0xd0, + 0x7b, 0x01, 0x0e, 0xd1, 0x7c, 0x01, 0x0e, 0xd2, 0x7d, 0x01, 0x0e, 0xd3, + 0x7e, 0x01, 0x0e, 0xd4, 0x7f, 0x01, 0x0e, 0xd5, 0x80, 0x01, 0x0e, 0xd6, + 0x81, 0x01, 0x0e, 0xd7, 0x82, 0x01, 0x0e, 0xd8, 0x83, 0x01, 0x0e, 0xd9, + 0x84, 0x01, 0x4e, 0xd0, 0x71, 0x01, 0x0e, 0xd1, 0x72, 0x01, 0x0e, 0xd2, + 0x73, 0x01, 0x0e, 0xd3, 0x74, 0x01, 0x0e, 0xd4, 0x75, 0x01, 0x0e, 0xd5, + 0x76, 0x01, 0x0e, 0xd6, 0x77, 0x01, 0x0e, 0xd7, 0x78, 0x01, 0x0e, 0xd8, + 0x79, 0x01, 0x0e, 0xd9, 0x7a, 0x01, 0x4e, 0xd0, 0x67, 0x01, 0x0e, 0xd1, + 0x68, 0x01, 0x0e, 0xd2, 0x69, 0x01, 0x0e, 0xd3, 0x6a, 0x01, 0x0e, 0xd4, + 0x6b, 0x01, 0x0e, 0xd5, 0x6c, 0x01, 0x0e, 0xd6, 0x6d, 0x01, 0x0e, 0xd7, + 0x6e, 0x01, 0x0e, 0xd8, 0x6f, 0x01, 0x0e, 0xd9, 0x70, 0x01, 0x4e, 0xd0, + 0x5d, 0x01, 0x0e, 0xd1, 0x5e, 0x01, 0x0e, 0xd2, 0x5f, 0x01, 0x0e, 0xd3, + 0x60, 0x01, 0x0e, 0xd4, 0x61, 0x01, 0x0e, 0xd5, 0x62, 0x01, 0x0e, 0xd6, + 0x63, 0x01, 0x0e, 0xd7, 0x64, 0x01, 0x0e, 0xd8, 0x65, 0x01, 0x0e, 0xd9, + 0x66, 0x01, 0x4e, 0xd0, 0x53, 0x01, 0x0e, 0xd1, 0x54, 0x01, 0x0e, 0xd2, + 0x55, 0x01, 0x0e, 0xd3, 0x56, 0x01, 0x0e, 0xd4, 0x57, 0x01, 0x0e, 0xd5, + 0x58, 0x01, 0x0e, 0xd6, 0x59, 0x01, 0x0e, 0xd7, 0x5a, 0x01, 0x0e, 0xd8, + 0x5b, 0x01, 0x0e, 0xd9, 0x5c, 0x01, 0x4e, 0x45, 0x13, 0x05, 0x0d, 0xa6, + 0x00, 0x06, 0xef, 0x06, 0x83, 0x0b, 0x49, 0x81, 0x16, 0x0e, 0xa6, 0x00, + 0x4d, 0xa6, 0x34, 0x0f, 0xa6, 0x00, 0x02, 0x16, 0x08, 0x01, 0xff, 0x07, + 0x1c, 0x18, 0x5f, 0x05, 0x61, 0x16, 0x01, 0xff, 0x44, 0x26, 0x16, 0x17, + 0xa6, 0x00, 0xa4, 0x3d, 0xa6, 0x2f, 0x44, 0x3b, 0xac, 0x1f, 0xa6, 0x00, + 0xab, 0x1b, 0x43, 0x76, 0xf4, 0x16, 0xa6, 0x00, 0xb4, 0x01, 0xff, 0x42, + 0x80, 0x12, 0x19, 0xa6, 0x00, 0x43, 0xa1, 0x01, 0x15, 0xa6, 0x00, 0x43, + 0xd8, 0x02, 0x1d, 0xa6, 0x40, 0x44, 0xb4, 0x9b, 0x14, 0xa6, 0x00, 0x43, + 0xaa, 0x45, 0x1c, 0xa6, 0x40, 0x42, 0x80, 0x12, 0x18, 0xa6, 0x00, 0x44, + 0xb4, 0x9b, 0x13, 0xa6, 0x40, 0x43, 0x1c, 0x01, 0x1a, 0xa6, 0x00, 0xaf, + 0x01, 0xff, 0x42, 0x4f, 0x21, 0x1e, 0xa6, 0x00, 0x43, 0xd8, 0x02, 0x1b, + 0xa6, 0x40, 0xe1, 0x49, 0xa5, 0x80, 0x85, 0x0a, 0xa2, 0xc4, 0x09, 0xa3, + 0xa3, 0x09, 0xa4, 0xc2, 0x08, 0xe5, 0xe1, 0xa5, 0x80, 0xaf, 0x08, 0xa6, + 0x8e, 0x08, 0xa7, 0xc1, 0x07, 0xa8, 0x89, 0x07, 0xe9, 0x24, 0xa5, 0x80, + 0xff, 0x06, 0xaa, 0xde, 0x06, 0xab, 0x8f, 0x06, 0xac, 0xe8, 0x05, 0xad, + 0x85, 0x05, 0xae, 0xa4, 0x03, 0xef, 0xba, 0xa5, 0x80, 0x91, 0x03, 0xb0, + 0xf0, 0x02, 0xb2, 0xcf, 0x02, 0xb3, 0x8e, 0x02, 0xb4, 0xcd, 0x01, 0xf5, + 0x95, 0xa5, 0x80, 0xc3, 0x01, 0xb6, 0xa2, 0x01, 0xb7, 0x61, 0xb9, 0x41, + 0xba, 0x01, 0xff, 0xe1, 0x64, 0xa5, 0x00, 0xe5, 0xfd, 0xa5, 0x80, 0x31, + 0xa8, 0x11, 0xe9, 0x3d, 0xa5, 0x00, 0xef, 0xd5, 0xa5, 0x80, 0x04, 0xf5, + 0xae, 0xa5, 0x40, 0xef, 0x89, 0xa5, 0x40, 0xe1, 0x65, 0xa5, 0x00, 0xe5, + 0xfe, 0xa5, 0x80, 0x11, 0xe9, 0x3e, 0xa5, 0x00, 0xef, 0xd6, 0xa5, 0x80, + 0x04, 0xf5, 0xaf, 0xa5, 0x40, 0xef, 0x8a, 0xa5, 0x40, 0xe5, 0x19, 0xa5, + 0x40, 0xe5, 0x18, 0xa5, 0x40, 0xe1, 0x69, 0xa5, 0x00, 0xe5, 0x02, 0xa6, + 0x80, 0x11, 0xe9, 0x42, 0xa5, 0x00, 0xef, 0xda, 0xa5, 0x80, 0x04, 0xf5, + 0xb3, 0xa5, 0x40, 0xef, 0x8e, 0xa5, 0x40, 0xe5, 0x1d, 0xa5, 0x40, 0xe1, + 0x4e, 0xa5, 0x80, 0x36, 0xe5, 0xe6, 0xa5, 0x80, 0x24, 0xe9, 0x28, 0xa5, + 0x80, 0x1b, 0xef, 0xbf, 0xa5, 0x80, 0x09, 0xf5, 0x99, 0xa5, 0xc0, 0x00, + 0xee, 0x9a, 0xa5, 0x40, 0xee, 0xc0, 0xa5, 0x00, 0xef, 0x74, 0xa5, 0xc0, + 0x00, 0xee, 0x75, 0xa5, 0x40, 0xee, 0x29, 0xa5, 0x40, 0xe5, 0x03, 0xa5, + 0x80, 0x04, 0xee, 0xe7, 0xa5, 0x40, 0xee, 0x04, 0xa5, 0x40, 0xee, 0x4f, + 0xa5, 0x40, 0xe1, 0x59, 0xa5, 0x00, 0xe5, 0xf2, 0xa5, 0x80, 0x11, 0xe9, + 0x32, 0xa5, 0x00, 0xef, 0xca, 0xa5, 0x80, 0x04, 0xf5, 0xa3, 0xa5, 0x40, + 0xef, 0x7e, 0xa5, 0x40, 0xe5, 0x0d, 0xa5, 0x40, 0xee, 0x96, 0xa5, 0x40, + 0xe1, 0x5a, 0xa5, 0x00, 0xe5, 0xf3, 0xa5, 0x80, 0x31, 0xa8, 0x11, 0xe9, + 0x33, 0xa5, 0x00, 0xef, 0xcb, 0xa5, 0x80, 0x04, 0xf5, 0xa4, 0xa5, 0x40, + 0xef, 0x7f, 0xa5, 0x40, 0xe1, 0x5b, 0xa5, 0x00, 0xe5, 0xf4, 0xa5, 0x80, + 0x11, 0xe9, 0x34, 0xa5, 0x00, 0xef, 0xcc, 0xa5, 0x80, 0x04, 0xf5, 0xa5, + 0xa5, 0x40, 0xef, 0x80, 0xa5, 0x40, 0xe5, 0x0f, 0xa5, 0x40, 0xe5, 0x0e, + 0xa5, 0x40, 0xe1, 0x62, 0xa5, 0x00, 0xe5, 0xfb, 0xa5, 0x80, 0x31, 0xa8, + 0x11, 0xe9, 0x3b, 0xa5, 0x00, 0xef, 0xd3, 0xa5, 0x80, 0x04, 0xf5, 0xac, + 0xa5, 0x40, 0xef, 0x87, 0xa5, 0x40, 0xe1, 0x63, 0xa5, 0x00, 0xe5, 0xfc, + 0xa5, 0x80, 0x11, 0xe9, 0x3c, 0xa5, 0x00, 0xef, 0xd4, 0xa5, 0x80, 0x04, + 0xf5, 0xad, 0xa5, 0x40, 0xef, 0x88, 0xa5, 0x40, 0xe5, 0x17, 0xa5, 0x40, + 0xe5, 0x16, 0xa5, 0x40, 0xe1, 0x5f, 0xa5, 0x00, 0xe5, 0xf8, 0xa5, 0x80, + 0x11, 0xe9, 0x38, 0xa5, 0x00, 0xef, 0xd0, 0xa5, 0x80, 0x04, 0xf5, 0xa9, + 0xa5, 0x40, 0xef, 0x84, 0xa5, 0x40, 0xe5, 0x13, 0xa5, 0x40, 0xe1, 0x50, + 0xa5, 0x00, 0xe5, 0xe8, 0xa5, 0x80, 0x11, 0xe9, 0x2a, 0xa5, 0x00, 0xef, + 0xc1, 0xa5, 0x80, 0x04, 0xf5, 0x9b, 0xa5, 0x40, 0xef, 0x76, 0xa5, 0x40, + 0xe5, 0x05, 0xa5, 0x40, 0xee, 0xbb, 0xa5, 0x00, 0xef, 0x71, 0xa5, 0xc0, + 0x00, 0xee, 0x72, 0xa5, 0x40, 0xe1, 0x6f, 0xa5, 0x00, 0xa4, 0x97, 0x01, + 0xe5, 0x09, 0xa6, 0x80, 0x8d, 0x01, 0xe7, 0x0b, 0xa6, 0x80, 0x52, 0xe9, + 0x47, 0xa5, 0x00, 0xaa, 0x2e, 0xef, 0xdf, 0xa5, 0x80, 0x25, 0xf5, 0xb8, + 0xa5, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0x70, 0xa5, 0x00, 0xe5, 0x0a, 0xa6, + 0x80, 0x11, 0xe9, 0x48, 0xa5, 0x00, 0xef, 0xe0, 0xa5, 0x80, 0x04, 0xf5, + 0xb9, 0xa5, 0x40, 0xef, 0x94, 0xa5, 0x40, 0xe5, 0x23, 0xa5, 0x40, 0xef, + 0x93, 0xa5, 0x40, 0xe1, 0x68, 0xa5, 0x00, 0xe5, 0x01, 0xa6, 0x80, 0x11, + 0xe9, 0x41, 0xa5, 0x00, 0xef, 0xd9, 0xa5, 0x80, 0x04, 0xf5, 0xb2, 0xa5, + 0x40, 0xef, 0x8d, 0xa5, 0x40, 0xe5, 0x1c, 0xa5, 0x40, 0x42, 0x1a, 0x00, + 0x4b, 0xa5, 0x00, 0x42, 0x92, 0x01, 0xe3, 0xa5, 0x00, 0xa7, 0x06, 0x42, + 0x10, 0x00, 0xbc, 0xa5, 0x40, 0xe1, 0x6c, 0xa5, 0x00, 0xe5, 0x04, 0xa6, + 0x80, 0x11, 0xe9, 0x44, 0xa5, 0x00, 0xef, 0xdc, 0xa5, 0x80, 0x04, 0xf5, + 0xb5, 0xa5, 0x40, 0xef, 0x90, 0xa5, 0x40, 0xe5, 0x1f, 0xa5, 0x00, 0xee, + 0x05, 0xa6, 0x40, 0xe5, 0x22, 0xa5, 0x40, 0xe1, 0x61, 0xa5, 0x00, 0xe5, + 0xfa, 0xa5, 0x80, 0x33, 0xe9, 0x3a, 0xa5, 0x00, 0xef, 0xd2, 0xa5, 0x80, + 0x04, 0xf5, 0xab, 0xa5, 0x40, 0x03, 0x3f, 0x01, 0x04, 0xef, 0x86, 0xa5, + 0x40, 0x42, 0x3b, 0x01, 0x2b, 0xa6, 0x00, 0x42, 0x0c, 0x08, 0x10, 0xa6, + 0x00, 0x42, 0x1b, 0x02, 0x11, 0xa6, 0x00, 0x42, 0x6c, 0x00, 0x2a, 0xa6, + 0x00, 0x43, 0x41, 0xe3, 0x12, 0xa6, 0x40, 0xe5, 0x15, 0xa5, 0x40, 0xe1, + 0x6e, 0xa5, 0x00, 0xa2, 0x3c, 0xe5, 0x08, 0xa6, 0x80, 0x33, 0x02, 0x99, + 0x48, 0x11, 0xe9, 0x46, 0xa5, 0x00, 0xef, 0xde, 0xa5, 0x80, 0x04, 0xf5, + 0xb7, 0xa5, 0x40, 0xef, 0x92, 0xa5, 0x40, 0xe1, 0x56, 0xa5, 0x00, 0xe5, + 0xee, 0xa5, 0x80, 0x11, 0xe9, 0x2f, 0xa5, 0x00, 0xef, 0xc6, 0xa5, 0x80, + 0x04, 0xf5, 0xa0, 0xa5, 0x40, 0xef, 0x7b, 0xa5, 0x40, 0xe5, 0x0a, 0xa5, + 0x40, 0xe5, 0x21, 0xa5, 0x40, 0xe1, 0x53, 0xa5, 0x00, 0xe5, 0xeb, 0xa5, + 0x80, 0x11, 0xe9, 0x2d, 0xa5, 0x00, 0xef, 0xc4, 0xa5, 0x80, 0x04, 0xf5, + 0x9e, 0xa5, 0x40, 0xef, 0x79, 0xa5, 0x40, 0xe5, 0x08, 0xa5, 0x40, 0xe1, + 0x5e, 0xa5, 0x00, 0xe5, 0xf7, 0xa5, 0x80, 0x11, 0xe9, 0x37, 0xa5, 0x00, + 0xef, 0xcf, 0xa5, 0x80, 0x04, 0xf5, 0xa8, 0xa5, 0x40, 0xef, 0x83, 0xa5, + 0x40, 0xe5, 0x12, 0xa5, 0x00, 0x48, 0xd5, 0x56, 0x0c, 0xa6, 0x40, 0xe1, + 0x6a, 0xa5, 0x80, 0x43, 0xe5, 0x03, 0xa6, 0x80, 0x3a, 0xe9, 0x43, 0xa5, + 0x00, 0xef, 0xdb, 0xa5, 0x80, 0x2d, 0xb0, 0x04, 0xf5, 0xb4, 0xa5, 0x40, + 0xe1, 0x54, 0xa5, 0x80, 0x1e, 0xe5, 0xec, 0xa5, 0x80, 0x11, 0xe9, 0x2e, + 0xa5, 0x00, 0xef, 0xc5, 0xa5, 0x80, 0x04, 0xf5, 0x9f, 0xa5, 0x40, 0xef, + 0x7a, 0xa5, 0x40, 0xe5, 0x09, 0xa5, 0x00, 0xee, 0xed, 0xa5, 0x40, 0xee, + 0x55, 0xa5, 0x40, 0xef, 0x8f, 0xa5, 0x40, 0xe5, 0x1e, 0xa5, 0x40, 0xee, + 0x6b, 0xa5, 0x40, 0xe1, 0x67, 0xa5, 0x00, 0xe5, 0x00, 0xa6, 0x80, 0x11, + 0xe9, 0x40, 0xa5, 0x00, 0xef, 0xd8, 0xa5, 0x80, 0x04, 0xf5, 0xb1, 0xa5, + 0x40, 0xef, 0x8c, 0xa5, 0x40, 0xe5, 0x1b, 0xa5, 0x40, 0xee, 0x25, 0xa5, + 0x40, 0xe1, 0x4c, 0xa5, 0x80, 0x2c, 0xe5, 0xe4, 0xa5, 0x80, 0x1f, 0xe9, + 0x26, 0xa5, 0x80, 0x16, 0xef, 0xbd, 0xa5, 0x80, 0x09, 0xf5, 0x97, 0xa5, + 0xc0, 0x00, 0xee, 0x98, 0xa5, 0x40, 0xee, 0xbe, 0xa5, 0x00, 0xef, 0x73, + 0xa5, 0x40, 0xee, 0x27, 0xa5, 0x40, 0xe5, 0x02, 0xa5, 0x00, 0xee, 0xe5, + 0xa5, 0x40, 0xee, 0x4d, 0xa5, 0x40, 0xe1, 0x6d, 0xa5, 0x00, 0xa2, 0x1e, + 0xe5, 0x06, 0xa6, 0x80, 0x11, 0xe9, 0x45, 0xa5, 0x00, 0xef, 0xdd, 0xa5, + 0x80, 0x04, 0xf5, 0xb6, 0xa5, 0x40, 0xef, 0x91, 0xa5, 0x40, 0xe5, 0x20, + 0xa5, 0x00, 0xee, 0x07, 0xa6, 0x40, 0xe1, 0x57, 0xa5, 0x00, 0xe5, 0xef, + 0xa5, 0x80, 0x15, 0xe9, 0x30, 0xa5, 0x00, 0xef, 0xc7, 0xa5, 0x80, 0x04, + 0xf5, 0xa1, 0xa5, 0x40, 0xee, 0xc8, 0xa5, 0x00, 0xef, 0x7c, 0xa5, 0x40, + 0xe5, 0x0b, 0xa5, 0x00, 0xee, 0xf0, 0xa5, 0x40, 0xe1, 0x58, 0xa5, 0x00, + 0xe5, 0xf1, 0xa5, 0x80, 0x11, 0xe9, 0x31, 0xa5, 0x00, 0xef, 0xc9, 0xa5, + 0x80, 0x04, 0xf5, 0xa2, 0xa5, 0x40, 0xef, 0x7d, 0xa5, 0x40, 0xe5, 0x0c, + 0xa5, 0x40, 0xe5, 0x00, 0xa5, 0x80, 0x04, 0xee, 0xe2, 0xa5, 0x40, 0xee, + 0x01, 0xa5, 0x40, 0xe1, 0x60, 0xa5, 0x00, 0xe5, 0xf9, 0xa5, 0x80, 0x51, + 0xa8, 0x11, 0xe9, 0x39, 0xa5, 0x00, 0xef, 0xd1, 0xa5, 0x80, 0x04, 0xf5, + 0xaa, 0xa5, 0x40, 0xef, 0x85, 0xa5, 0x40, 0xe1, 0x5c, 0xa5, 0x00, 0xe5, + 0xf5, 0xa5, 0x80, 0x31, 0xa8, 0x11, 0xe9, 0x35, 0xa5, 0x00, 0xef, 0xcd, + 0xa5, 0x80, 0x04, 0xf5, 0xa6, 0xa5, 0x40, 0xef, 0x81, 0xa5, 0x40, 0xe1, + 0x5d, 0xa5, 0x00, 0xe5, 0xf6, 0xa5, 0x80, 0x11, 0xe9, 0x36, 0xa5, 0x00, + 0xef, 0xce, 0xa5, 0x80, 0x04, 0xf5, 0xa7, 0xa5, 0x40, 0xef, 0x82, 0xa5, + 0x40, 0xe5, 0x11, 0xa5, 0x40, 0xe5, 0x10, 0xa5, 0x40, 0xe5, 0x14, 0xa5, + 0x40, 0xe1, 0x66, 0xa5, 0x00, 0xe5, 0xff, 0xa5, 0x80, 0x11, 0xe9, 0x3f, + 0xa5, 0x00, 0xef, 0xd7, 0xa5, 0x80, 0x04, 0xf5, 0xb0, 0xa5, 0x40, 0xef, + 0x8b, 0xa5, 0x40, 0xe5, 0x1a, 0xa5, 0x40, 0xe1, 0x52, 0xa5, 0x00, 0xe5, + 0xea, 0xa5, 0x80, 0x31, 0xa8, 0x11, 0xe9, 0x2c, 0xa5, 0x00, 0xef, 0xc3, + 0xa5, 0x80, 0x04, 0xf5, 0x9d, 0xa5, 0x40, 0xef, 0x78, 0xa5, 0x40, 0xe1, + 0x51, 0xa5, 0x00, 0xe5, 0xe9, 0xa5, 0x80, 0x11, 0xe9, 0x2b, 0xa5, 0x00, + 0xef, 0xc2, 0xa5, 0x80, 0x04, 0xf5, 0x9c, 0xa5, 0x40, 0xef, 0x77, 0xa5, + 0x40, 0xe5, 0x06, 0xa5, 0x40, 0xe5, 0x07, 0xa5, 0x40, 0xee, 0x4a, 0xa5, + 0x40, 0x45, 0x12, 0x0b, 0x28, 0xa6, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, + 0x29, 0xa6, 0x00, 0x43, 0x0e, 0x0b, 0x21, 0xa6, 0x00, 0xb3, 0x14, 0xb4, + 0x06, 0x44, 0x43, 0x1e, 0x20, 0xa6, 0x40, 0x44, 0x25, 0x01, 0x23, 0xa6, + 0x00, 0x42, 0x15, 0x02, 0x22, 0xa6, 0x40, 0x44, 0xc9, 0x1d, 0x27, 0xa6, + 0x00, 0x42, 0x01, 0x26, 0x26, 0xa6, 0x40, 0x43, 0xd2, 0x05, 0x25, 0xa6, + 0x00, 0x43, 0xf6, 0x06, 0x24, 0xa6, 0x40, 0x08, 0x50, 0xc6, 0xd2, 0x0d, + 0x47, 0x5f, 0x61, 0x02, 0x26, 0x80, 0xbb, 0x0d, 0xae, 0xc5, 0x0c, 0xb0, + 0x06, 0x45, 0x01, 0xe1, 0x45, 0x26, 0x40, 0x80, 0xad, 0x0b, 0x8d, 0xb4, + 0x0a, 0x04, 0x6f, 0x02, 0xff, 0x03, 0x4e, 0x37, 0x7c, 0x43, 0xf6, 0x01, + 0x06, 0xa9, 0x01, 0x01, 0xff, 0xa1, 0xff, 0x02, 0x06, 0x0c, 0x03, 0xee, + 0x02, 0x50, 0x86, 0x61, 0x3d, 0xf8, 0x01, 0xa4, 0xd9, 0x02, 0x51, 0xfc, + 0x59, 0x35, 0xf8, 0x01, 0xa8, 0xfa, 0x01, 0x4d, 0x64, 0x87, 0xc8, 0x21, + 0x00, 0x4f, 0x0c, 0x72, 0xf0, 0x27, 0x00, 0x46, 0xa4, 0xdf, 0x6d, 0xf6, + 0x01, 0xb3, 0xd9, 0x01, 0xb4, 0x47, 0x06, 0xad, 0x02, 0x01, 0xff, 0x45, + 0xce, 0x00, 0xe7, 0x21, 0x80, 0x0d, 0x4c, 0x2f, 0x8e, 0xee, 0x21, 0xc0, + 0x00, 0x4c, 0x53, 0x8b, 0xef, 0x21, 0x40, 0x80, 0x01, 0xff, 0x48, 0x57, + 0xb4, 0xea, 0x21, 0x80, 0x1e, 0x4b, 0x54, 0x8b, 0xeb, 0x21, 0x80, 0x06, + 0x59, 0xc7, 0x1e, 0x95, 0xf8, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4e, + 0x0b, 0x00, 0xec, 0x21, 0x00, 0x4c, 0x32, 0x00, 0xed, 0x21, 0x40, 0x54, + 0xec, 0x3f, 0xb8, 0x2b, 0x40, 0x02, 0x0d, 0x00, 0x1c, 0x02, 0x15, 0x02, + 0x01, 0xff, 0x4d, 0x85, 0x7f, 0x9f, 0x21, 0x00, 0x0e, 0x1b, 0x06, 0x01, + 0xff, 0x51, 0x2f, 0x5a, 0x49, 0x29, 0x00, 0x58, 0x29, 0x06, 0xed, 0x2b, + 0x40, 0x05, 0x04, 0x02, 0x06, 0x49, 0x12, 0x72, 0x0a, 0x29, 0x40, 0x4a, + 0xe0, 0x01, 0x91, 0xf8, 0x01, 0x08, 0x09, 0x02, 0x01, 0xff, 0x45, 0xce, + 0x00, 0x61, 0x2b, 0x80, 0x0c, 0x4c, 0xc3, 0x8d, 0x6b, 0x2b, 0x00, 0x4d, + 0x64, 0x87, 0x85, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x6c, 0xea, 0x01, 0x81, + 0x2b, 0x00, 0x46, 0xd1, 0x14, 0x71, 0x2b, 0x00, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x4a, 0x53, 0xa8, 0x29, 0xf8, 0x01, 0x58, 0x26, 0x28, 0x7b, 0x2b, + 0x00, 0x4b, 0x6b, 0x68, 0x2d, 0xf8, 0x01, 0x09, 0xaf, 0xbb, 0x12, 0x4c, + 0xef, 0x91, 0x25, 0xf8, 0x01, 0x4c, 0x5b, 0x92, 0x21, 0xf8, 0x01, 0x50, + 0x66, 0x68, 0x31, 0xf8, 0x41, 0x49, 0xea, 0x01, 0xa2, 0x2b, 0x00, 0x4a, + 0xb3, 0x02, 0xa3, 0x2b, 0x40, 0x4f, 0xe7, 0x66, 0x51, 0xf8, 0x01, 0x4c, + 0xe7, 0x93, 0x39, 0xf8, 0x41, 0x11, 0x91, 0x05, 0x11, 0x05, 0x6e, 0x15, + 0x01, 0xff, 0x45, 0xce, 0x00, 0x45, 0xf8, 0x01, 0x50, 0x86, 0x61, 0x41, + 0xf8, 0x41, 0x04, 0xc3, 0x00, 0x19, 0x05, 0xc8, 0x00, 0x01, 0xff, 0x80, + 0x06, 0x45, 0xa9, 0x01, 0xbe, 0x21, 0x40, 0x48, 0x57, 0xb4, 0x5c, 0x29, + 0x00, 0x46, 0xd1, 0x14, 0x54, 0x29, 0x40, 0x80, 0x06, 0x45, 0xa9, 0x01, + 0xbf, 0x21, 0x40, 0x07, 0x92, 0x0a, 0x0c, 0x48, 0x57, 0xb4, 0x60, 0x29, + 0x00, 0x46, 0xd1, 0x14, 0x58, 0x29, 0x40, 0x61, 0xc9, 0x0d, 0x6e, 0x29, + 0x00, 0x5f, 0x08, 0x12, 0x63, 0x29, 0x40, 0x4b, 0xc4, 0x8d, 0xe1, 0x21, + 0x00, 0x4b, 0x30, 0x8e, 0xd1, 0x21, 0x40, 0x45, 0xce, 0x00, 0x06, 0x2b, + 0x00, 0x53, 0xd3, 0x48, 0x89, 0x2b, 0x40, 0x45, 0xf8, 0xe8, 0x15, 0x2e, + 0x00, 0x44, 0xcf, 0x00, 0x91, 0x21, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x5a, + 0x2e, 0x1f, 0xb8, 0xfb, 0x01, 0x48, 0x57, 0xb4, 0xa5, 0x21, 0x00, 0x5c, + 0x4e, 0x18, 0xc5, 0x21, 0x00, 0x46, 0xd1, 0x14, 0x12, 0x29, 0x00, 0x05, + 0x51, 0x00, 0x01, 0xff, 0x4d, 0x36, 0x82, 0xde, 0x21, 0x00, 0x55, 0xd5, + 0x01, 0x15, 0xf8, 0x01, 0x51, 0x47, 0x05, 0x09, 0x29, 0x00, 0x58, 0x76, + 0x29, 0x09, 0xf8, 0x01, 0x59, 0xe3, 0x24, 0x05, 0xf8, 0x01, 0x4c, 0xd3, + 0x92, 0x99, 0xf8, 0x01, 0x06, 0x5d, 0x07, 0x11, 0x04, 0x49, 0x0c, 0x01, + 0xff, 0x49, 0xea, 0x01, 0xb0, 0x21, 0x00, 0x4a, 0xb3, 0x02, 0xb1, 0x21, + 0x40, 0x55, 0xd5, 0x01, 0x11, 0xf8, 0x01, 0x52, 0x2e, 0x06, 0x01, 0xf8, + 0x41, 0x04, 0x1a, 0x00, 0x8c, 0x06, 0x4e, 0x41, 0x76, 0x01, 0x27, 0x00, + 0x07, 0x73, 0x02, 0xda, 0x05, 0x52, 0xa9, 0x51, 0x84, 0xfb, 0x01, 0x05, + 0x22, 0x00, 0x8e, 0x05, 0x05, 0xc3, 0x00, 0x8c, 0x03, 0x07, 0x7d, 0x02, + 0xd6, 0x02, 0x04, 0x0e, 0x0b, 0xc5, 0x02, 0x06, 0xc8, 0x00, 0x30, 0x53, + 0xfb, 0x4c, 0x86, 0xfb, 0x01, 0xb4, 0x01, 0xff, 0x05, 0x25, 0x01, 0x06, + 0x5b, 0x35, 0x1d, 0x6d, 0xfb, 0x41, 0x4d, 0x01, 0x4d, 0x83, 0xfb, 0x01, + 0x09, 0x2a, 0x01, 0x01, 0xff, 0x45, 0x33, 0x01, 0x85, 0xfb, 0x01, 0x56, + 0x37, 0x35, 0xa6, 0xce, 0x01, 0x57, 0xdc, 0x30, 0xad, 0xce, 0x41, 0x0f, + 0x6d, 0x6b, 0xac, 0x01, 0x5a, 0xe4, 0x1f, 0x50, 0x27, 0x00, 0xaf, 0x97, + 0x01, 0x46, 0x14, 0xdf, 0x10, 0x27, 0x00, 0x03, 0x7c, 0x00, 0x2f, 0x0f, + 0xa4, 0x02, 0x1f, 0xb4, 0x01, 0xff, 0x51, 0xbe, 0x55, 0x99, 0xfb, 0x01, + 0x05, 0x1a, 0x01, 0x06, 0x4d, 0x88, 0x7d, 0x33, 0xcc, 0x41, 0x42, 0x68, + 0x00, 0xf9, 0x25, 0x00, 0x51, 0xa2, 0x5e, 0x9d, 0xfb, 0x41, 0x46, 0x12, + 0x03, 0x3f, 0xf5, 0x01, 0x46, 0xd6, 0x05, 0x52, 0x27, 0x40, 0x06, 0x7c, + 0x0d, 0x06, 0x4b, 0x90, 0x4c, 0x36, 0xcc, 0x41, 0xa3, 0x22, 0x0a, 0x0c, + 0x08, 0x12, 0x4d, 0xeb, 0x85, 0xb7, 0xcc, 0x01, 0x4f, 0x56, 0x73, 0xd3, + 0xcc, 0x01, 0x4a, 0xa9, 0xb1, 0xb3, 0xcc, 0x41, 0x4b, 0x93, 0x23, 0xa9, + 0xcc, 0x01, 0x49, 0x5f, 0xbd, 0xa7, 0xcc, 0x41, 0x05, 0x4b, 0x88, 0x06, + 0x4b, 0xaf, 0x9d, 0xdd, 0x25, 0x40, 0x46, 0x2e, 0xda, 0xc7, 0xcc, 0x01, + 0xab, 0x12, 0x44, 0xfd, 0xf1, 0xcf, 0xcc, 0x01, 0x45, 0x52, 0xbe, 0xbf, + 0xcc, 0x01, 0x44, 0x5d, 0xf2, 0xc3, 0xcc, 0x41, 0x43, 0xa1, 0x01, 0xbb, + 0xcc, 0x01, 0x45, 0x4e, 0x09, 0xcb, 0xcc, 0x41, 0x52, 0xfd, 0x25, 0x93, + 0xce, 0x01, 0x62, 0x00, 0x0d, 0xb1, 0x23, 0x40, 0x1b, 0x78, 0x1c, 0x50, + 0x06, 0x6d, 0x02, 0x01, 0xff, 0x0a, 0x73, 0x02, 0x31, 0x08, 0x84, 0x02, + 0x17, 0x15, 0x7d, 0x02, 0x01, 0xff, 0x46, 0x73, 0x02, 0x54, 0xfb, 0x01, + 0x4c, 0x58, 0x0f, 0x67, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x55, 0xfb, 0x41, + 0x06, 0x13, 0x01, 0x06, 0x52, 0x3b, 0x56, 0x63, 0xfb, 0x41, 0x46, 0x73, + 0x02, 0x56, 0xfb, 0x01, 0x4c, 0x58, 0x0f, 0x65, 0xfb, 0x41, 0x06, 0x13, + 0x01, 0x06, 0x52, 0x3b, 0x56, 0x62, 0xfb, 0x41, 0x4c, 0x58, 0x0f, 0x64, + 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x66, 0xfb, 0x41, 0x46, 0x73, 0x02, 0x52, + 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x53, 0xfb, 0x41, 0x4c, 0x12, 0x0b, 0x94, + 0x25, 0x00, 0x4d, 0x43, 0x1d, 0x82, 0xfb, 0x41, 0x07, 0x73, 0x02, 0x21, + 0x05, 0xc3, 0x00, 0x11, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x53, 0xfc, 0x25, + 0x97, 0xce, 0x01, 0x4e, 0x87, 0x7d, 0x37, 0xcc, 0x41, 0x53, 0xfc, 0x25, + 0x94, 0xce, 0x01, 0x4e, 0x87, 0x7d, 0x34, 0xcc, 0x41, 0x58, 0xa6, 0x29, + 0x95, 0xce, 0x01, 0x59, 0xf6, 0x25, 0x96, 0xce, 0x41, 0x0f, 0x6d, 0x6b, + 0x96, 0x01, 0x4f, 0xd6, 0x6b, 0xd4, 0x27, 0x00, 0xaf, 0x81, 0x01, 0x03, + 0x7c, 0x00, 0x1f, 0xb4, 0x01, 0xff, 0x52, 0xa7, 0x4d, 0x98, 0xfb, 0x01, + 0x05, 0x1a, 0x01, 0x06, 0x4d, 0x88, 0x7d, 0x30, 0xcc, 0x41, 0x42, 0x68, + 0x00, 0xf8, 0x25, 0x00, 0x51, 0xa2, 0x5e, 0x9c, 0xfb, 0x41, 0x06, 0x7c, + 0x0d, 0x06, 0x4b, 0x90, 0x4c, 0x35, 0xcc, 0x41, 0xa3, 0x22, 0x0a, 0x0c, + 0x08, 0x12, 0x4d, 0xeb, 0x85, 0xb6, 0xcc, 0x01, 0x4f, 0x56, 0x73, 0xd2, + 0xcc, 0x01, 0x4a, 0xa9, 0xb1, 0xb2, 0xcc, 0x41, 0x4b, 0x93, 0x23, 0xa8, + 0xcc, 0x01, 0x49, 0x5f, 0xbd, 0xa6, 0xcc, 0x41, 0x05, 0x4b, 0x88, 0x06, + 0x4b, 0xaf, 0x9d, 0xdc, 0x25, 0x40, 0x46, 0x2e, 0xda, 0xc6, 0xcc, 0x01, + 0xab, 0x12, 0x44, 0xfd, 0xf1, 0xce, 0xcc, 0x01, 0x45, 0x52, 0xbe, 0xbe, + 0xcc, 0x01, 0x44, 0x5d, 0xf2, 0xc2, 0xcc, 0x41, 0x43, 0xa1, 0x01, 0xba, + 0xcc, 0x01, 0x45, 0x4e, 0x09, 0xca, 0xcc, 0x41, 0x52, 0xfd, 0x25, 0x90, + 0xce, 0x01, 0x63, 0x64, 0x0b, 0xb0, 0x23, 0x40, 0x06, 0x13, 0x01, 0x11, + 0x1b, 0xf2, 0x1d, 0x01, 0xff, 0x46, 0x73, 0x02, 0x57, 0xfb, 0x01, 0x45, + 0xc8, 0x00, 0x58, 0xfb, 0x41, 0x0a, 0x73, 0x02, 0x32, 0x08, 0x84, 0x02, + 0x17, 0x15, 0xf8, 0x1d, 0x01, 0xff, 0x46, 0x73, 0x02, 0x59, 0xfb, 0x01, + 0x4c, 0x58, 0x0f, 0x5c, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x5a, 0xfb, 0x41, + 0x52, 0x8f, 0x53, 0x5e, 0xfb, 0x01, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x46, + 0x73, 0x02, 0x5b, 0xfb, 0x01, 0x4c, 0x58, 0x0f, 0x60, 0xfb, 0x41, 0x52, + 0x8f, 0x53, 0x5d, 0xfb, 0x01, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x4c, 0x58, + 0x0f, 0x5f, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x61, 0xfb, 0x41, 0x45, 0x33, + 0x01, 0x80, 0x25, 0x80, 0x34, 0x46, 0x12, 0x03, 0xe0, 0x25, 0x00, 0x52, + 0x27, 0x52, 0x03, 0xce, 0x01, 0x08, 0x3c, 0x04, 0x18, 0x56, 0x37, 0x35, + 0xa7, 0xce, 0x01, 0x4c, 0x44, 0x04, 0x8e, 0xfb, 0x01, 0x57, 0xdc, 0x30, + 0xac, 0xce, 0x01, 0x63, 0xcd, 0x0b, 0x14, 0xce, 0x41, 0x61, 0x4d, 0x0e, + 0x92, 0xfb, 0x01, 0x4c, 0x32, 0x11, 0xda, 0x25, 0x40, 0x64, 0x9b, 0x08, + 0x91, 0xfb, 0x41, 0x05, 0xc3, 0x00, 0x17, 0x51, 0x3f, 0x1d, 0xe4, 0xfb, + 0x01, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x53, 0xfc, 0x25, 0x92, 0xce, 0x01, + 0x4e, 0x87, 0x7d, 0x32, 0xcc, 0x41, 0x53, 0xfc, 0x25, 0x91, 0xce, 0x01, + 0x4e, 0x87, 0x7d, 0x31, 0xcc, 0x41, 0xac, 0x06, 0x6f, 0x09, 0x01, 0x68, + 0xfb, 0x41, 0x6d, 0x65, 0x01, 0x6a, 0xfb, 0x01, 0x05, 0x14, 0x01, 0x01, + 0xff, 0x50, 0x0e, 0x0b, 0x80, 0xfb, 0x01, 0x55, 0xa2, 0x3e, 0x9a, 0xfb, + 0x41, 0x17, 0x6f, 0x2e, 0x66, 0x09, 0x9c, 0x01, 0x01, 0xff, 0xa1, 0x53, + 0x4b, 0xaa, 0x9b, 0x79, 0xcc, 0x01, 0x44, 0xd5, 0xef, 0xfb, 0xcd, 0x01, + 0x47, 0x55, 0xd1, 0x00, 0xcc, 0x01, 0x51, 0x4f, 0x5c, 0xe6, 0xf6, 0x01, + 0xb2, 0x21, 0x06, 0x5d, 0x07, 0x11, 0x0e, 0x6b, 0x7d, 0x01, 0xff, 0x4f, + 0x78, 0x6f, 0xed, 0x25, 0x00, 0x50, 0xb6, 0x66, 0xee, 0x25, 0x40, 0x48, + 0x11, 0x34, 0xe8, 0xf6, 0x01, 0x4c, 0xee, 0x5b, 0x3c, 0xf5, 0x41, 0x49, + 0x9a, 0xb5, 0x98, 0xcc, 0x01, 0x4b, 0x90, 0x06, 0x3a, 0xf5, 0x01, 0x44, + 0xc5, 0xac, 0x66, 0xcc, 0x01, 0x4a, 0x9d, 0xae, 0x57, 0xcc, 0x41, 0x47, + 0x12, 0x34, 0xe7, 0xf6, 0x01, 0x4a, 0x03, 0xb2, 0x61, 0xcc, 0x41, 0x4c, + 0x7b, 0x8d, 0x75, 0xcc, 0x01, 0x4a, 0x3c, 0x29, 0x71, 0xcc, 0x41, 0x05, + 0xce, 0x00, 0x6d, 0x05, 0x9d, 0x05, 0x48, 0x05, 0x9e, 0x14, 0x19, 0x49, + 0xfa, 0xb8, 0x7e, 0x29, 0x00, 0x57, 0xae, 0x30, 0xf0, 0x22, 0x00, 0x44, + 0xf5, 0x38, 0xa5, 0x22, 0xc0, 0x00, 0x52, 0x9f, 0x4f, 0xdf, 0x27, 0x40, + 0x45, 0xce, 0x00, 0x95, 0x21, 0x80, 0x1e, 0x4b, 0xa5, 0x99, 0x0d, 0x2b, + 0x00, 0x4c, 0x2f, 0x8e, 0xd5, 0x21, 0x00, 0x50, 0xe6, 0x66, 0x59, 0xf8, + 0x01, 0x55, 0x01, 0x02, 0x65, 0x2b, 0x00, 0x4b, 0x49, 0x10, 0xf3, 0x21, + 0x40, 0x4a, 0x4b, 0xa6, 0xa8, 0x21, 0x40, 0x0f, 0x5a, 0x6f, 0x11, 0x10, + 0x96, 0x66, 0x01, 0xff, 0x4c, 0xff, 0x90, 0x4c, 0x29, 0x00, 0x4d, 0xcc, + 0x87, 0x4f, 0x29, 0x40, 0x4c, 0xff, 0x90, 0x51, 0x29, 0x00, 0x4d, 0xcc, + 0x87, 0x4d, 0x29, 0x40, 0x4f, 0xab, 0x69, 0xbd, 0x29, 0x00, 0x44, 0xe6, + 0x01, 0x03, 0x23, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x5b, 0x5c, 0x1a, 0x24, + 0x23, 0x00, 0x52, 0x7e, 0x47, 0xb9, 0x2b, 0x40, 0x4b, 0x0b, 0x99, 0x12, + 0xf6, 0x01, 0x4e, 0x6b, 0x76, 0xd1, 0x2b, 0x00, 0xa4, 0x59, 0xa9, 0x06, + 0x5a, 0x02, 0x21, 0xaf, 0x26, 0x40, 0x49, 0x65, 0xb7, 0x84, 0xf9, 0x01, + 0x42, 0x10, 0x00, 0x2a, 0x22, 0x80, 0x14, 0xb4, 0x06, 0x57, 0x17, 0x25, + 0x72, 0x26, 0x40, 0x4a, 0xd7, 0x20, 0x1f, 0x00, 0x00, 0x49, 0x2f, 0x77, + 0xfa, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x1d, 0x5c, 0x36, + 0x17, 0x4a, 0x2a, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0x35, 0xad, + 0x45, 0x2a, 0x00, 0x4a, 0x67, 0x98, 0x41, 0x2a, 0x00, 0x47, 0xe6, 0x7f, + 0x42, 0x2a, 0x40, 0x56, 0xfb, 0x32, 0x48, 0x2a, 0x00, 0x4c, 0xa9, 0x0a, + 0x46, 0x2a, 0x40, 0x45, 0x1b, 0xcc, 0x3f, 0x20, 0x00, 0x48, 0x43, 0xb0, + 0x8c, 0x23, 0x40, 0x80, 0x01, 0xff, 0x49, 0x0e, 0xbd, 0xf1, 0x26, 0x00, + 0x4f, 0xdc, 0x74, 0x14, 0x26, 0x40, 0x07, 0xec, 0x05, 0x06, 0x4c, 0x3b, + 0x25, 0x9f, 0x03, 0x41, 0xa1, 0xb3, 0x01, 0x44, 0x9a, 0x99, 0x81, 0x03, + 0x01, 0xa4, 0x9e, 0x01, 0xa7, 0x8f, 0x01, 0x42, 0x0b, 0x00, 0x85, 0x03, + 0x81, 0x81, 0x01, 0xe9, 0x9b, 0x03, 0x01, 0xab, 0x6f, 0x45, 0x17, 0xe8, + 0x8d, 0x03, 0x01, 0x43, 0xb4, 0x05, 0x8e, 0x03, 0x01, 0x43, 0xdc, 0x22, + 0x90, 0x03, 0x01, 0x42, 0x07, 0x0c, 0x94, 0x03, 0x01, 0x44, 0x35, 0xf2, + 0x96, 0x03, 0x01, 0x45, 0x33, 0xea, 0x97, 0x03, 0x01, 0xb3, 0x2f, 0xb4, + 0x1d, 0xf5, 0x9c, 0x03, 0x01, 0x42, 0x15, 0x02, 0x86, 0x03, 0x01, 0x43, + 0xa1, 0x52, 0x8a, 0x03, 0x01, 0xba, 0x01, 0xff, 0x43, 0x94, 0x0f, 0x87, + 0x03, 0x01, 0xf5, 0x91, 0x03, 0x41, 0x42, 0xed, 0x05, 0x89, 0x03, 0x01, + 0x45, 0xe1, 0xe6, 0x98, 0x03, 0x01, 0xef, 0x9a, 0x03, 0x41, 0xa1, 0x0c, + 0x43, 0x7a, 0x16, 0x8c, 0x03, 0x01, 0x42, 0x6f, 0x00, 0x9d, 0x03, 0x41, + 0x42, 0x04, 0x00, 0x95, 0x03, 0x01, 0x43, 0x22, 0x53, 0x92, 0x03, 0x41, + 0x42, 0x44, 0x14, 0x8b, 0x03, 0x01, 0x42, 0x22, 0x00, 0x83, 0x03, 0x41, + 0x42, 0x12, 0x00, 0x88, 0x03, 0x41, 0x44, 0xfd, 0xee, 0x82, 0x03, 0x01, + 0x44, 0x66, 0x9c, 0x99, 0x03, 0x41, 0x44, 0x38, 0xd6, 0x84, 0x03, 0x01, + 0x43, 0x22, 0x00, 0x8f, 0x03, 0x41, 0x42, 0x9e, 0x01, 0x93, 0x03, 0x01, + 0x43, 0xf4, 0x7a, 0x80, 0x03, 0x41, 0x8d, 0xf5, 0x7b, 0xa1, 0xa4, 0x3b, + 0xa5, 0xb9, 0x30, 0xa8, 0xa0, 0x26, 0xa9, 0x83, 0x13, 0xaf, 0xd7, 0x09, + 0xb2, 0xd4, 0x06, 0xb5, 0x88, 0x01, 0xb7, 0x01, 0xff, 0x57, 0xe7, 0x2b, + 0x39, 0x27, 0x00, 0x57, 0x3e, 0x2f, 0x00, 0xf5, 0x01, 0xaf, 0x01, 0xff, + 0x80, 0x06, 0x48, 0xc0, 0xc2, 0x3a, 0x2e, 0x40, 0x5c, 0x1a, 0x17, 0x51, + 0x20, 0x00, 0x4c, 0x03, 0x8d, 0xb0, 0xf5, 0x01, 0x58, 0xc6, 0x27, 0x75, + 0x2a, 0x00, 0x03, 0x23, 0x0a, 0x44, 0x46, 0xcf, 0x86, 0x95, 0xf4, 0x01, + 0x15, 0x02, 0x3c, 0x2e, 0x4e, 0x27, 0x79, 0xc9, 0x29, 0x00, 0x08, 0x2b, + 0x22, 0x18, 0x51, 0xfe, 0x4e, 0x6c, 0xf4, 0x01, 0x5a, 0xec, 0x21, 0x88, + 0xcc, 0x01, 0x4e, 0x6f, 0x7c, 0xea, 0xf5, 0x01, 0x53, 0xfc, 0x4e, 0x6d, + 0xf4, 0x41, 0x4c, 0x43, 0x8c, 0x07, 0x2a, 0x00, 0x4b, 0xdd, 0xa0, 0x08, + 0x2a, 0x40, 0x43, 0x1a, 0x00, 0x55, 0x2a, 0x00, 0x42, 0x0c, 0x00, 0x56, + 0x2a, 0x40, 0x80, 0x06, 0x5a, 0xf8, 0x0b, 0x2a, 0x2e, 0x40, 0x46, 0x9d, + 0x7d, 0x25, 0x20, 0x00, 0x4b, 0x07, 0x0c, 0x5a, 0x20, 0x40, 0x49, 0x42, + 0xb9, 0xae, 0x20, 0x00, 0xac, 0xc4, 0x01, 0x4b, 0x51, 0x9f, 0x43, 0xf9, + 0x01, 0xb2, 0x01, 0xff, 0xab, 0xac, 0x01, 0x04, 0x73, 0x07, 0x06, 0x43, + 0xbd, 0x01, 0x22, 0xf4, 0x41, 0xa1, 0x93, 0x01, 0x06, 0x0c, 0x03, 0x82, + 0x01, 0xa3, 0x74, 0xa4, 0x5b, 0x57, 0x86, 0x2e, 0x29, 0x21, 0x00, 0x02, + 0xb4, 0x01, 0x3b, 0x4c, 0x1b, 0x93, 0x8f, 0xf5, 0x01, 0xb3, 0x06, 0x51, + 0x7f, 0x5f, 0xc9, 0x26, 0x40, 0x12, 0x02, 0x48, 0x1d, 0x48, 0xda, 0x59, + 0x35, 0x2e, 0x00, 0x46, 0xf4, 0xdd, 0x4e, 0x21, 0x00, 0x05, 0xa2, 0x20, + 0x01, 0xff, 0x52, 0x2b, 0x51, 0x57, 0xf6, 0x01, 0x52, 0x83, 0x56, 0x55, + 0xf6, 0x41, 0xe7, 0x41, 0x21, 0x00, 0xec, 0x42, 0x21, 0x00, 0xf9, 0x44, + 0x21, 0x40, 0x04, 0xb6, 0x01, 0x06, 0x46, 0x45, 0x33, 0x19, 0x23, 0x40, + 0x52, 0x2b, 0x51, 0x56, 0xf6, 0x01, 0x52, 0x83, 0x56, 0x54, 0xf6, 0x41, + 0x45, 0xd7, 0xda, 0x38, 0x2e, 0x00, 0x06, 0xf3, 0x15, 0x01, 0xff, 0x44, + 0x25, 0x01, 0x8b, 0x21, 0x00, 0x42, 0x15, 0x02, 0x8a, 0x21, 0x40, 0x48, + 0x68, 0xc3, 0x32, 0x21, 0x00, 0x44, 0x14, 0x05, 0x32, 0x2e, 0x40, 0x48, + 0xe0, 0xc9, 0xc2, 0x2b, 0x00, 0x4b, 0x85, 0x5f, 0xca, 0x26, 0x40, 0x48, + 0x13, 0x3e, 0x4b, 0x21, 0x00, 0x44, 0x05, 0x02, 0xa2, 0x29, 0x40, 0x42, + 0xc6, 0x1c, 0x83, 0xf9, 0x01, 0x4d, 0x7f, 0x84, 0xba, 0x20, 0x40, 0x42, + 0xba, 0x04, 0x37, 0xf3, 0x01, 0x0b, 0x0b, 0xa4, 0x01, 0xff, 0x4e, 0x17, + 0x76, 0xc9, 0x13, 0x01, 0x49, 0x5c, 0xb7, 0xd0, 0x13, 0x01, 0xa4, 0xd6, + 0x03, 0x4f, 0x89, 0x6d, 0xd2, 0x13, 0x01, 0x07, 0xec, 0x05, 0xa2, 0x01, + 0x45, 0x56, 0xea, 0xd1, 0x13, 0x01, 0x05, 0x5a, 0x03, 0x5b, 0xb6, 0x01, + 0xff, 0x0a, 0xbb, 0xa9, 0x48, 0x0a, 0x41, 0x77, 0x01, 0xff, 0xa1, 0x35, + 0x42, 0x27, 0x01, 0xc2, 0x13, 0x01, 0xe9, 0xb9, 0x13, 0x81, 0x26, 0x42, + 0xcd, 0x02, 0xc7, 0x13, 0x01, 0xf5, 0xbb, 0x13, 0x81, 0x17, 0x08, 0x22, + 0xc1, 0x01, 0xff, 0xec, 0xbf, 0x13, 0x81, 0x09, 0xf2, 0xbd, 0x13, 0xc1, + 0x00, 0xf2, 0xbe, 0x13, 0x41, 0xec, 0xc0, 0x13, 0x41, 0xf5, 0xbc, 0x13, + 0x41, 0xe9, 0xba, 0x13, 0x41, 0xe1, 0xb8, 0x13, 0x01, 0xe9, 0xc5, 0x13, + 0x01, 0xf5, 0xc8, 0x13, 0x41, 0x48, 0xc9, 0x7c, 0xe2, 0x13, 0x01, 0x47, + 0xf4, 0x0a, 0xe1, 0x13, 0x41, 0xa1, 0x2f, 0x50, 0x36, 0x61, 0xca, 0x13, + 0x01, 0x4d, 0x42, 0x85, 0xcf, 0x13, 0x01, 0x4b, 0xa6, 0xa0, 0xd7, 0x13, + 0x01, 0x45, 0xf2, 0xe9, 0xd3, 0x13, 0x01, 0x4e, 0x29, 0x7c, 0xd8, 0x13, + 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0xe5, 0x23, 0xce, 0x13, 0x01, + 0x45, 0xec, 0x4b, 0xcd, 0x13, 0x41, 0x47, 0x3d, 0x16, 0xcc, 0x13, 0x01, + 0x47, 0xaf, 0x88, 0xb7, 0x13, 0x41, 0xe1, 0x80, 0x13, 0x81, 0x97, 0x02, + 0xa2, 0x8a, 0x02, 0xa3, 0xfd, 0x01, 0xa4, 0xe4, 0x01, 0x42, 0x27, 0x01, + 0x8b, 0x13, 0x01, 0xa7, 0xd1, 0x01, 0x42, 0x22, 0x00, 0xb2, 0x13, 0x01, + 0xe9, 0x82, 0x13, 0x81, 0xc1, 0x01, 0xaa, 0xb4, 0x01, 0xab, 0xa7, 0x01, + 0xac, 0x93, 0x01, 0x42, 0x6c, 0x00, 0xaa, 0x13, 0x01, 0xae, 0x75, 0x42, + 0xcd, 0x02, 0x90, 0x13, 0x01, 0xb0, 0x63, 0xb2, 0x57, 0xb3, 0x45, 0xb4, + 0x2c, 0xf5, 0x84, 0x13, 0x81, 0x23, 0xb6, 0x06, 0x42, 0xbc, 0x22, 0xab, + 0x13, 0x41, 0xe1, 0xae, 0x13, 0x01, 0x07, 0x23, 0xc1, 0x01, 0xff, 0xec, + 0x88, 0x13, 0x81, 0x09, 0xf2, 0x86, 0x13, 0xc1, 0x00, 0xf2, 0x87, 0x13, + 0x41, 0xec, 0x89, 0x13, 0x41, 0xf5, 0x85, 0x13, 0x41, 0xe1, 0xa1, 0x13, + 0x01, 0x42, 0x22, 0x00, 0xa2, 0x13, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x9c, + 0x13, 0x01, 0x42, 0x22, 0x00, 0x9d, 0x13, 0x41, 0xe1, 0xb1, 0x13, 0x01, + 0x42, 0x22, 0x00, 0xaf, 0x13, 0x01, 0x42, 0x40, 0x06, 0xb0, 0x13, 0x41, + 0xe1, 0xac, 0x13, 0x01, 0x42, 0x71, 0x00, 0xb4, 0x13, 0x41, 0xe1, 0xa6, + 0x13, 0x01, 0x42, 0x22, 0x00, 0xa7, 0x13, 0x41, 0xe1, 0xa5, 0x13, 0x01, + 0x42, 0x24, 0x02, 0x96, 0x13, 0x01, 0x42, 0x2a, 0x05, 0xa0, 0x13, 0x01, + 0x42, 0xbc, 0x22, 0x9b, 0x13, 0x41, 0xe1, 0xad, 0x13, 0x01, 0xac, 0x01, + 0xff, 0xe1, 0xb3, 0x13, 0x01, 0x42, 0x74, 0x00, 0xb5, 0x13, 0x41, 0xe1, + 0x92, 0x13, 0x01, 0x42, 0x22, 0x00, 0x93, 0x13, 0x41, 0xe1, 0x99, 0x13, + 0x01, 0x42, 0x22, 0x00, 0x9a, 0x13, 0x41, 0xe9, 0x83, 0x13, 0x41, 0xe1, + 0x94, 0x13, 0x01, 0x42, 0x22, 0x00, 0x95, 0x13, 0x41, 0xe1, 0xa3, 0x13, + 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa4, 0x13, 0x41, 0xe1, 0x9e, 0x13, + 0x01, 0x42, 0x22, 0x00, 0x9f, 0x13, 0x41, 0xe1, 0x97, 0x13, 0x01, 0x42, + 0x22, 0x00, 0x98, 0x13, 0x41, 0xe1, 0xa8, 0x13, 0x01, 0x42, 0x22, 0x00, + 0xa9, 0x13, 0x41, 0xe1, 0x81, 0x13, 0x01, 0xe9, 0x8e, 0x13, 0x01, 0xf5, + 0x91, 0x13, 0x41, 0x44, 0x73, 0x20, 0xd4, 0x13, 0x01, 0x4b, 0x09, 0xa1, + 0xd5, 0x13, 0x41, 0xa1, 0xc7, 0x02, 0xa5, 0xb8, 0x02, 0xa9, 0x43, 0xaf, + 0x14, 0xb5, 0x01, 0xff, 0xe5, 0xa8, 0x22, 0x80, 0x06, 0x44, 0x41, 0xf1, + 0xba, 0xf3, 0x41, 0x50, 0x36, 0x60, 0xdf, 0x2b, 0x40, 0x42, 0x60, 0x07, + 0xcc, 0xf9, 0x81, 0x20, 0x45, 0x7b, 0xe8, 0x8a, 0xfa, 0x01, 0xb0, 0x01, + 0xff, 0x42, 0xfe, 0x46, 0xc6, 0xf3, 0x01, 0x05, 0x36, 0x00, 0x01, 0xff, + 0x45, 0x8c, 0xd0, 0x79, 0xf3, 0x01, 0x44, 0x2a, 0x5b, 0x20, 0xf4, 0x41, + 0x45, 0x3c, 0xe6, 0x8e, 0xf6, 0x41, 0x03, 0x1c, 0x01, 0xb1, 0x01, 0x45, + 0x94, 0x3b, 0x5d, 0x20, 0x00, 0x4b, 0xd9, 0x9a, 0x31, 0xf5, 0x01, 0x09, + 0x06, 0x96, 0x6e, 0x04, 0x6d, 0x1d, 0x01, 0xff, 0x4e, 0x79, 0x76, 0xf6, + 0x2a, 0x00, 0x46, 0xd6, 0xda, 0x4b, 0x2e, 0x00, 0x14, 0x4d, 0x2a, 0x4d, + 0x48, 0x94, 0x26, 0x2d, 0x22, 0x00, 0x07, 0x7e, 0xd3, 0x37, 0xb0, 0x29, + 0x57, 0x4f, 0x31, 0xfb, 0x2a, 0x00, 0x45, 0x35, 0x23, 0x4b, 0x22, 0x00, + 0x0d, 0x42, 0x01, 0x01, 0xff, 0x4f, 0x57, 0x31, 0xf4, 0x2a, 0x00, 0x49, + 0xdb, 0x38, 0x80, 0x29, 0x00, 0x4f, 0x56, 0x01, 0xaa, 0x22, 0x00, 0x56, + 0x23, 0x38, 0xf5, 0x2a, 0x40, 0x43, 0x59, 0x28, 0xfb, 0x29, 0x00, 0x44, + 0xeb, 0x1a, 0x34, 0x20, 0x40, 0x4c, 0x87, 0x00, 0xf8, 0x2a, 0x00, 0x49, + 0xec, 0x00, 0xf7, 0x2a, 0x40, 0x56, 0x95, 0x33, 0x68, 0x2a, 0x00, 0x56, + 0x9f, 0x37, 0x69, 0x2a, 0x40, 0x45, 0x52, 0x72, 0x37, 0x26, 0x00, 0x44, + 0x43, 0x91, 0x32, 0x26, 0x00, 0x46, 0x89, 0x7b, 0x30, 0x26, 0x00, 0x44, + 0xde, 0x2e, 0x31, 0x26, 0x00, 0x48, 0x03, 0x35, 0x36, 0x26, 0x00, 0x47, + 0xe0, 0x7a, 0x33, 0x26, 0x00, 0xb7, 0x01, 0xff, 0x44, 0x8a, 0x00, 0x35, + 0x26, 0x00, 0x43, 0xe9, 0x06, 0x34, 0x26, 0x40, 0x02, 0x68, 0x00, 0x17, + 0x05, 0x1f, 0x01, 0x01, 0xff, 0x46, 0xb2, 0x21, 0x23, 0x20, 0x00, 0x4c, + 0xef, 0x8e, 0xa9, 0xf6, 0x01, 0x45, 0x00, 0x30, 0xd0, 0xf4, 0x41, 0x06, + 0x50, 0x00, 0x06, 0x58, 0x9b, 0x06, 0x9d, 0x27, 0x40, 0x49, 0x3a, 0x1e, + 0xca, 0x29, 0x00, 0x4f, 0x1f, 0x19, 0xc6, 0xf6, 0x01, 0x50, 0xf6, 0x66, + 0xcd, 0x29, 0x00, 0x48, 0xe3, 0x59, 0xcb, 0x29, 0x40, 0x4b, 0x4d, 0x99, + 0x8e, 0xfa, 0x01, 0x48, 0x42, 0x19, 0xbc, 0xce, 0x41, 0xa3, 0x28, 0x4c, + 0xcf, 0x8d, 0x22, 0x21, 0x00, 0x42, 0x9e, 0x01, 0x86, 0xf6, 0x01, 0xed, + 0x8a, 0xf6, 0x81, 0x11, 0x02, 0x5f, 0x01, 0x01, 0xff, 0x45, 0xf7, 0xe9, + 0xd7, 0x2b, 0x00, 0x53, 0xb0, 0x4e, 0xdb, 0x2a, 0x40, 0x44, 0xc2, 0x64, + 0x8b, 0xf6, 0x41, 0x45, 0xc7, 0xe7, 0xb2, 0xf5, 0x01, 0x43, 0xc7, 0x07, + 0x9c, 0xf6, 0x41, 0x0c, 0xe7, 0x8d, 0xf1, 0x06, 0x44, 0x9c, 0x37, 0xbd, + 0xf6, 0x01, 0x49, 0x28, 0xbb, 0xfc, 0xf5, 0x01, 0x0a, 0x53, 0xad, 0xc8, + 0x04, 0x44, 0x1e, 0x39, 0x45, 0xf3, 0x01, 0x44, 0xb2, 0x67, 0x45, 0xf4, + 0x01, 0xaf, 0xa6, 0x04, 0x02, 0x20, 0x00, 0x8f, 0x02, 0x17, 0x0a, 0x31, + 0xbf, 0x01, 0xb4, 0x01, 0xff, 0x49, 0xe2, 0xb5, 0x30, 0x23, 0x00, 0x02, + 0x7b, 0x02, 0x01, 0xff, 0x07, 0xec, 0x05, 0x06, 0x50, 0x16, 0x67, 0xae, + 0xe2, 0x41, 0xe1, 0xad, 0xe2, 0x81, 0x9d, 0x01, 0xa2, 0x7a, 0x43, 0x91, + 0x20, 0x9a, 0xe2, 0x01, 0x42, 0xf0, 0x10, 0x93, 0xe2, 0x01, 0xe5, 0xa6, 0xe2, 0x81, 0x65, 0x42, 0x24, 0x02, 0x95, 0xe2, 0x01, 0x42, 0x22, 0x00, - 0x9e, 0xe2, 0x01, 0xe9, 0xa1, 0xe2, 0x81, 0x50, 0x42, 0xbd, 0x26, 0x9d, + 0x9e, 0xe2, 0x01, 0xe9, 0xa1, 0xe2, 0x81, 0x50, 0x42, 0x56, 0x19, 0x9d, 0xe2, 0x01, 0x42, 0x1b, 0x02, 0x94, 0xe2, 0x01, 0x42, 0x74, 0x00, 0xa0, 0xe2, 0x01, 0x42, 0x6c, 0x00, 0x96, 0xe2, 0x01, 0xae, 0x2c, 0xef, 0xaa, - 0xe2, 0x01, 0x42, 0x6c, 0x09, 0x90, 0xe2, 0x01, 0x42, 0x71, 0x00, 0x9f, - 0xe2, 0x01, 0x42, 0x15, 0x06, 0x99, 0xe2, 0x01, 0x42, 0x12, 0x00, 0x92, + 0xe2, 0x01, 0x42, 0xbb, 0x09, 0x90, 0xe2, 0x01, 0x42, 0x71, 0x00, 0x9f, + 0xe2, 0x01, 0x42, 0x40, 0x06, 0x99, 0xe2, 0x01, 0x42, 0x12, 0x00, 0x92, 0xe2, 0x01, 0xf5, 0xa5, 0xe2, 0x01, 0x42, 0xa9, 0x01, 0x9c, 0xe2, 0x01, - 0x42, 0x34, 0x22, 0x9b, 0xe2, 0x41, 0xe1, 0x97, 0xe2, 0x01, 0x42, 0x24, + 0x42, 0xbc, 0x22, 0x9b, 0xe2, 0x41, 0xe1, 0x97, 0xe2, 0x01, 0x42, 0x24, 0x02, 0x98, 0xe2, 0x41, 0xf5, 0xa3, 0xe2, 0x41, 0xef, 0xa8, 0xe2, 0x41, - 0xe1, 0x91, 0xe2, 0x01, 0x07, 0x72, 0xd2, 0x01, 0xff, 0x42, 0x44, 0x0f, + 0xe1, 0x91, 0xe2, 0x01, 0x07, 0x45, 0xd5, 0x01, 0xff, 0x42, 0x93, 0x0f, 0xac, 0xe2, 0x01, 0xe5, 0xa7, 0xe2, 0x81, 0x09, 0xe9, 0xa2, 0xe2, 0xc1, 0x00, 0xf5, 0xa4, 0xe2, 0x41, 0xef, 0xa9, 0xe2, 0x41, 0xe5, 0xab, 0xe2, - 0x41, 0x16, 0x41, 0x32, 0x06, 0x56, 0x3b, 0x34, 0x2a, 0xf1, 0x41, 0x02, - 0xb6, 0xf1, 0x31, 0x95, 0x23, 0x96, 0x0f, 0x97, 0x01, 0xff, 0x43, 0x2a, - 0xf0, 0x44, 0xf2, 0x01, 0x43, 0x78, 0xf0, 0x46, 0xf2, 0x41, 0x43, 0x48, - 0xf0, 0x45, 0xf2, 0x01, 0x43, 0x6c, 0xf0, 0x48, 0xf2, 0x01, 0x43, 0x7e, - 0xf0, 0x40, 0xf2, 0x41, 0x43, 0x4b, 0xf0, 0x47, 0xf2, 0x01, 0x43, 0xa5, - 0xf0, 0x43, 0xf2, 0x41, 0x42, 0x89, 0xf0, 0x41, 0xf2, 0x01, 0x42, 0x4f, - 0xdf, 0x42, 0xf2, 0x41, 0x04, 0x3e, 0x17, 0xfa, 0x01, 0x4d, 0x23, 0x0b, - 0xde, 0x23, 0x00, 0x02, 0x22, 0x00, 0x6a, 0x15, 0x86, 0x3b, 0x5a, 0x05, - 0xc3, 0x00, 0x36, 0x4b, 0x50, 0x21, 0xdc, 0x23, 0x00, 0x06, 0xc8, 0x00, - 0x12, 0x4e, 0x27, 0x26, 0xb4, 0x23, 0x00, 0x56, 0x05, 0x09, 0xe0, 0x23, - 0x00, 0x58, 0x75, 0x2b, 0x1d, 0xf5, 0x41, 0xa3, 0x0c, 0x4c, 0xcd, 0x8d, - 0x23, 0x2e, 0x00, 0x69, 0x3a, 0x04, 0xec, 0xfb, 0x41, 0x45, 0xcf, 0x0a, - 0x1d, 0x23, 0x00, 0x43, 0xd8, 0x0c, 0x0e, 0x23, 0x40, 0x62, 0xc3, 0x0b, - 0x07, 0xce, 0x01, 0xa3, 0x0c, 0x4c, 0xcd, 0x8d, 0x22, 0x2e, 0x00, 0x6a, - 0xc3, 0x02, 0xef, 0xfb, 0x41, 0x45, 0xcf, 0x0a, 0x1c, 0x23, 0x00, 0x43, - 0xd8, 0x0c, 0x0f, 0x23, 0x40, 0x4c, 0xe1, 0x02, 0xe8, 0xfb, 0x01, 0x4c, - 0xe3, 0x10, 0xe0, 0xfb, 0x41, 0x03, 0x24, 0x00, 0x04, 0xf4, 0xa9, 0xf3, - 0x41, 0x4c, 0xe1, 0x02, 0xca, 0x2b, 0x00, 0xa6, 0x59, 0x48, 0xf3, 0x25, + 0x41, 0x16, 0x11, 0x33, 0x06, 0x56, 0x0b, 0x35, 0x2a, 0xf1, 0x41, 0x02, + 0x00, 0xf5, 0x31, 0x95, 0x23, 0x96, 0x0f, 0x97, 0x01, 0xff, 0x43, 0x7d, + 0xf3, 0x44, 0xf2, 0x01, 0x43, 0xcb, 0xf3, 0x46, 0xf2, 0x41, 0x43, 0x9b, + 0xf3, 0x45, 0xf2, 0x01, 0x43, 0xbf, 0xf3, 0x48, 0xf2, 0x01, 0x43, 0xd1, + 0xf3, 0x40, 0xf2, 0x41, 0x43, 0x9e, 0xf3, 0x47, 0xf2, 0x01, 0x43, 0xf8, + 0xf3, 0x43, 0xf2, 0x41, 0x42, 0xdc, 0xf3, 0x41, 0xf2, 0x01, 0x42, 0x5a, + 0xe2, 0x42, 0xf2, 0x41, 0x04, 0xaa, 0x17, 0xfa, 0x01, 0x4d, 0x72, 0x0b, + 0xde, 0x23, 0x00, 0x02, 0x22, 0x00, 0x6a, 0x15, 0x56, 0x3c, 0x5a, 0x05, + 0xc3, 0x00, 0x36, 0x4b, 0xd8, 0x21, 0xdc, 0x23, 0x00, 0x06, 0xc8, 0x00, + 0x12, 0x4e, 0xc8, 0x26, 0xb4, 0x23, 0x00, 0x56, 0x54, 0x09, 0xe0, 0x23, + 0x00, 0x58, 0x16, 0x2c, 0x1d, 0xf5, 0x41, 0xa3, 0x0c, 0x4c, 0x7f, 0x8f, + 0x23, 0x2e, 0x00, 0x69, 0x65, 0x04, 0xec, 0xfb, 0x41, 0x45, 0x1e, 0x0b, + 0x1d, 0x23, 0x00, 0x43, 0x27, 0x0d, 0x0e, 0x23, 0x40, 0x62, 0x12, 0x0c, + 0x07, 0xce, 0x01, 0xa3, 0x0c, 0x4c, 0x7f, 0x8f, 0x22, 0x2e, 0x00, 0x6a, + 0xee, 0x02, 0xef, 0xfb, 0x41, 0x45, 0x1e, 0x0b, 0x1c, 0x23, 0x00, 0x43, + 0x27, 0x0d, 0x0f, 0x23, 0x40, 0x4c, 0x0c, 0x03, 0xe8, 0xfb, 0x01, 0x4c, + 0x32, 0x11, 0xe0, 0xfb, 0x41, 0x03, 0x24, 0x00, 0x04, 0xf4, 0xa9, 0xf3, + 0x41, 0x4c, 0x0c, 0x03, 0xca, 0x2b, 0x00, 0xa6, 0x59, 0x48, 0x94, 0x26, 0x20, 0x23, 0x00, 0x04, 0xc3, 0x00, 0x31, 0x05, 0xc8, 0x00, 0x0f, 0xb3, - 0x01, 0xff, 0x4b, 0x4a, 0x93, 0x39, 0x2e, 0x00, 0x4e, 0xdb, 0x71, 0xe6, - 0xcd, 0x41, 0x4c, 0x4f, 0x21, 0x5a, 0x2e, 0x00, 0x09, 0xe1, 0x61, 0x01, - 0xff, 0x44, 0xf8, 0x42, 0x5c, 0xcc, 0x01, 0x0c, 0x8d, 0x94, 0x01, 0xff, - 0xd1, 0xe8, 0xcd, 0x01, 0xd2, 0xea, 0xcd, 0x41, 0x4c, 0x4f, 0x21, 0x59, - 0x2e, 0x00, 0x09, 0xe1, 0x61, 0x01, 0xff, 0x44, 0xf8, 0x42, 0x5a, 0xcc, - 0x01, 0x0c, 0x8d, 0x94, 0x01, 0xff, 0xd1, 0xec, 0xcd, 0x01, 0xd2, 0xee, - 0xcd, 0x41, 0x14, 0xef, 0x42, 0x11, 0x0f, 0xdb, 0x61, 0x01, 0xff, 0x44, - 0xf8, 0x42, 0x5b, 0xcc, 0x01, 0x45, 0x8d, 0x94, 0xf0, 0xcd, 0x41, 0xd1, - 0xf6, 0xcd, 0x01, 0xd2, 0xf7, 0xcd, 0x41, 0x53, 0x12, 0x10, 0x3a, 0x29, - 0x80, 0x06, 0x5a, 0xda, 0x1e, 0x3c, 0x29, 0x40, 0x4a, 0x41, 0xa4, 0x3d, - 0x29, 0x40, 0x44, 0xc9, 0x83, 0xf0, 0xf9, 0x01, 0x42, 0x53, 0x00, 0xb7, - 0xf9, 0xc1, 0x00, 0x45, 0x71, 0xb3, 0xa5, 0xfa, 0x41, 0xe1, 0xc0, 0x05, - 0x81, 0xa9, 0x02, 0x42, 0x16, 0x00, 0xc2, 0x05, 0x01, 0xa3, 0x96, 0x02, - 0xa4, 0x89, 0x02, 0xe5, 0xca, 0x05, 0x81, 0xff, 0x01, 0x42, 0xe1, 0x07, - 0xcb, 0x05, 0x01, 0xa7, 0xe6, 0x01, 0xa8, 0xd9, 0x01, 0xe9, 0xd2, 0x05, - 0x01, 0xaa, 0xca, 0x01, 0xab, 0xbd, 0x01, 0xac, 0xb0, 0x01, 0xad, 0xa3, - 0x01, 0xae, 0x78, 0xef, 0xda, 0x05, 0x81, 0x6f, 0xb0, 0x63, 0x42, 0xf4, - 0x13, 0xdc, 0x05, 0x01, 0xb2, 0x51, 0xb3, 0x33, 0xb4, 0x27, 0xf5, 0xe4, - 0x05, 0x01, 0x42, 0xa6, 0x0a, 0xe5, 0x05, 0x01, 0xb8, 0x11, 0xf9, 0xea, - 0x05, 0x01, 0xba, 0x01, 0xff, 0xe1, 0xec, 0x05, 0x01, 0x42, 0x22, 0x00, - 0xed, 0x05, 0x41, 0xe1, 0xe6, 0x05, 0x01, 0x42, 0x22, 0x00, 0xe8, 0x05, - 0x41, 0xe1, 0xe2, 0x05, 0x01, 0x42, 0x22, 0x00, 0xe3, 0x05, 0x41, 0xe1, - 0xdf, 0x05, 0x01, 0xa8, 0x0c, 0x43, 0xb0, 0x26, 0xf0, 0x05, 0x01, 0x42, - 0x12, 0x00, 0xef, 0x05, 0x41, 0xe1, 0xe0, 0x05, 0x01, 0x42, 0x12, 0x00, - 0xe1, 0x05, 0x41, 0xe1, 0xdd, 0x05, 0x01, 0x42, 0x71, 0x00, 0xde, 0x05, - 0x41, 0xe1, 0xdb, 0x05, 0x01, 0x42, 0x15, 0x06, 0xf2, 0x05, 0x41, 0xef, - 0xf3, 0x05, 0x41, 0xe1, 0xd8, 0x05, 0x01, 0x42, 0xa1, 0x10, 0xc7, 0x05, - 0x01, 0xa7, 0x13, 0x43, 0x80, 0xb3, 0xd9, 0x05, 0x01, 0xb8, 0x01, 0xff, - 0xe1, 0xe7, 0x05, 0x01, 0x42, 0x22, 0x00, 0xe9, 0x05, 0x41, 0xe1, 0xcd, - 0x05, 0x01, 0x42, 0xbd, 0x26, 0xcf, 0x05, 0x41, 0xe1, 0xd7, 0x05, 0x01, - 0x42, 0x16, 0x00, 0xc3, 0x05, 0x41, 0xe1, 0xd5, 0x05, 0x01, 0x42, 0x74, - 0x00, 0xd6, 0x05, 0x41, 0xe1, 0xd4, 0x05, 0x01, 0x42, 0x22, 0x00, 0xf1, - 0x05, 0x41, 0xe1, 0xd3, 0x05, 0x01, 0xf9, 0xeb, 0x05, 0x41, 0xe1, 0xd0, - 0x05, 0x01, 0x42, 0xbd, 0x26, 0xd1, 0x05, 0x41, 0xe1, 0xcc, 0x05, 0x01, - 0x42, 0x22, 0x00, 0xee, 0x05, 0x01, 0x42, 0xbd, 0x26, 0xce, 0x05, 0x41, - 0xe9, 0xc9, 0x05, 0x41, 0xe1, 0xc6, 0x05, 0x01, 0x42, 0x22, 0x00, 0xc8, - 0x05, 0x41, 0xe1, 0xc4, 0x05, 0x01, 0x42, 0x22, 0x00, 0xc5, 0x05, 0x41, - 0xf3, 0xc1, 0x05, 0x41, 0x06, 0x36, 0xd7, 0xde, 0x07, 0x44, 0x17, 0x09, - 0xab, 0xf3, 0x01, 0x4f, 0xf0, 0x6a, 0xdd, 0x29, 0x00, 0x07, 0x43, 0xce, - 0xa6, 0x05, 0xa7, 0x90, 0x05, 0x43, 0x79, 0x1d, 0x7e, 0x00, 0x80, 0xbf, - 0x04, 0x02, 0x2a, 0x02, 0xa3, 0x04, 0x42, 0xf6, 0x19, 0xfe, 0x29, 0x80, - 0x95, 0x04, 0xb2, 0x01, 0xff, 0x47, 0xa7, 0x14, 0x2b, 0xf6, 0x01, 0x05, - 0x1c, 0xe4, 0x11, 0x0b, 0x8b, 0x9e, 0x01, 0xff, 0x4a, 0x3f, 0xa6, 0x52, - 0x2e, 0x00, 0x42, 0xc2, 0x05, 0x4a, 0x20, 0x40, 0xa1, 0xe8, 0x03, 0x06, - 0xc4, 0x06, 0xa1, 0x03, 0x45, 0xae, 0xe3, 0xc5, 0x14, 0x01, 0x07, 0xc1, - 0x05, 0x85, 0x01, 0x42, 0xe9, 0x04, 0xc7, 0x14, 0x01, 0x05, 0x2f, 0x03, - 0x50, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x3d, 0xe5, 0xb9, 0x14, 0x01, - 0xe9, 0xb1, 0x14, 0x81, 0x30, 0xef, 0xbc, 0x14, 0x01, 0x06, 0x61, 0x36, - 0x20, 0xf5, 0xb3, 0x14, 0x81, 0x17, 0x08, 0x9b, 0xbe, 0x01, 0xff, 0xec, - 0xb7, 0x14, 0x81, 0x09, 0xf2, 0xb5, 0x14, 0xc1, 0x00, 0xf2, 0xb6, 0x14, - 0x41, 0xec, 0xb8, 0x14, 0x41, 0xf5, 0xb4, 0x14, 0x41, 0xe5, 0xba, 0x14, - 0x01, 0xef, 0xbd, 0x14, 0x41, 0xe9, 0xb2, 0x14, 0x41, 0xe1, 0xb0, 0x14, - 0x01, 0xe9, 0xbb, 0x14, 0x01, 0xf5, 0xbe, 0x14, 0x41, 0xa1, 0x1d, 0x4b, - 0x4f, 0x23, 0xbf, 0x14, 0x01, 0x45, 0x5a, 0x3e, 0xc3, 0x14, 0x01, 0x02, - 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, 0xc2, 0x14, 0x01, 0x45, 0xa3, - 0x4a, 0xc1, 0x14, 0x41, 0x47, 0xd1, 0x15, 0xc0, 0x14, 0x01, 0x47, 0xf2, - 0x86, 0xc4, 0x14, 0x41, 0xe1, 0x81, 0x14, 0x81, 0xff, 0x01, 0xa2, 0xf2, - 0x01, 0xa3, 0xe5, 0x01, 0xa4, 0xcc, 0x01, 0xe5, 0x8b, 0x14, 0x01, 0xa7, - 0xbb, 0x01, 0x42, 0x22, 0x00, 0xaf, 0x14, 0x01, 0xe9, 0x83, 0x14, 0x81, - 0xab, 0x01, 0xaa, 0x9e, 0x01, 0xab, 0x91, 0x01, 0x42, 0x74, 0x00, 0xaa, - 0x14, 0x01, 0x42, 0x6c, 0x00, 0xa7, 0x14, 0x01, 0xae, 0x6d, 0xef, 0x8d, - 0x14, 0x01, 0xb0, 0x5d, 0x42, 0x71, 0x00, 0xa9, 0x14, 0x01, 0xb3, 0x45, - 0xb4, 0x2c, 0xf5, 0x85, 0x14, 0x81, 0x23, 0xb6, 0x06, 0x42, 0x34, 0x22, - 0xa8, 0x14, 0x41, 0xe1, 0xab, 0x14, 0x01, 0x07, 0x9c, 0xbe, 0x01, 0xff, - 0xec, 0x89, 0x14, 0x81, 0x09, 0xf2, 0x87, 0x14, 0xc1, 0x00, 0xf2, 0x88, - 0x14, 0x41, 0xec, 0x8a, 0x14, 0x41, 0xf5, 0x86, 0x14, 0x41, 0xe1, 0x9e, - 0x14, 0x01, 0x42, 0x22, 0x00, 0x9f, 0x14, 0x01, 0xb4, 0x01, 0xff, 0xe1, - 0x99, 0x14, 0x01, 0x42, 0x22, 0x00, 0x9a, 0x14, 0x41, 0xe1, 0xae, 0x14, - 0x01, 0x42, 0x22, 0x00, 0xac, 0x14, 0x01, 0x42, 0x15, 0x06, 0xad, 0x14, - 0x41, 0xe1, 0xa3, 0x14, 0x01, 0x42, 0x22, 0x00, 0xa4, 0x14, 0x41, 0xe1, - 0xa2, 0x14, 0x01, 0x42, 0x24, 0x02, 0x93, 0x14, 0x01, 0x42, 0xff, 0x04, - 0x9d, 0x14, 0x01, 0x42, 0x34, 0x22, 0x98, 0x14, 0x41, 0xe1, 0x8f, 0x14, - 0x01, 0x42, 0x22, 0x00, 0x90, 0x14, 0x41, 0xe1, 0x96, 0x14, 0x01, 0x42, - 0x22, 0x00, 0x97, 0x14, 0x41, 0xe9, 0x84, 0x14, 0x41, 0xe1, 0x91, 0x14, - 0x01, 0x42, 0x22, 0x00, 0x92, 0x14, 0x41, 0xe1, 0xa0, 0x14, 0x01, 0xa4, - 0x06, 0x42, 0x22, 0x00, 0xa1, 0x14, 0x41, 0xe1, 0x9b, 0x14, 0x01, 0x42, - 0x22, 0x00, 0x9c, 0x14, 0x41, 0xe1, 0x94, 0x14, 0x01, 0x42, 0x22, 0x00, - 0x95, 0x14, 0x41, 0xe1, 0xa5, 0x14, 0x01, 0x42, 0x22, 0x00, 0xa6, 0x14, - 0x41, 0xe1, 0x82, 0x14, 0x01, 0xe9, 0x8c, 0x14, 0x01, 0xf5, 0x8e, 0x14, - 0x41, 0x45, 0xc3, 0x0a, 0xd8, 0x14, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, - 0xd9, 0x14, 0x01, 0x43, 0xbf, 0x0a, 0xd1, 0x14, 0x01, 0xb3, 0x14, 0xb4, - 0x06, 0x44, 0xa1, 0x1d, 0xd0, 0x14, 0x41, 0x44, 0x25, 0x01, 0xd3, 0x14, - 0x01, 0x42, 0x15, 0x02, 0xd2, 0x14, 0x41, 0x44, 0x27, 0x1d, 0xd7, 0x14, - 0x01, 0x42, 0x60, 0x25, 0xd6, 0x14, 0x41, 0x43, 0xa7, 0x05, 0xd5, 0x14, - 0x01, 0x43, 0xcb, 0x06, 0xd4, 0x14, 0x41, 0x50, 0x94, 0x56, 0xc6, 0x14, - 0x01, 0x43, 0x9d, 0x85, 0x80, 0x14, 0x41, 0x62, 0xa1, 0x0b, 0x3a, 0x0b, - 0x41, 0x47, 0x9c, 0x1a, 0xf2, 0x23, 0x00, 0x07, 0x91, 0x07, 0x01, 0xff, - 0x4f, 0xcf, 0x6d, 0xd4, 0x29, 0x00, 0x50, 0x3a, 0x65, 0xd5, 0x29, 0x40, - 0x80, 0x01, 0xff, 0x48, 0xdc, 0x1c, 0x3c, 0x22, 0x80, 0x1b, 0x05, 0x51, - 0x00, 0x01, 0xff, 0x04, 0xb4, 0x0b, 0x06, 0x4a, 0x0f, 0xae, 0x1b, 0x2e, - 0x40, 0x45, 0x5c, 0x00, 0x1e, 0x2e, 0x00, 0x45, 0xf5, 0x06, 0x1f, 0x2e, - 0x40, 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x11, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x49, 0x98, 0x1d, 0x6a, 0x2a, 0x00, 0x4b, 0xf6, 0x9f, 0x6b, 0x2a, - 0x40, 0x4f, 0x37, 0x07, 0x49, 0x2b, 0x00, 0x50, 0xb3, 0x02, 0x72, 0x29, - 0x40, 0x42, 0x33, 0x00, 0x05, 0xf4, 0x81, 0x06, 0x57, 0xfc, 0x2d, 0x45, - 0x27, 0x40, 0x45, 0xe0, 0x07, 0x2f, 0xf4, 0x41, 0x50, 0x1a, 0x60, 0x7f, - 0x2d, 0x00, 0x07, 0xc1, 0x05, 0x0c, 0x62, 0x29, 0x0c, 0x6f, 0x2d, 0x00, - 0x4e, 0x9e, 0x7a, 0x70, 0x2d, 0x40, 0xa1, 0x82, 0x02, 0x11, 0x2c, 0x57, - 0xf5, 0x01, 0xb4, 0xc0, 0x01, 0xb9, 0x01, 0xff, 0xe1, 0x30, 0x2d, 0x80, - 0x15, 0xe5, 0x66, 0x2d, 0x80, 0x0c, 0xe9, 0x49, 0x2d, 0x00, 0xef, 0x67, - 0x2d, 0x00, 0xf5, 0x53, 0x2d, 0x40, 0xf9, 0x3b, 0x2d, 0x40, 0xe1, 0x44, - 0x2d, 0x00, 0xe2, 0x31, 0x2d, 0x80, 0x95, 0x01, 0x42, 0x1e, 0x14, 0x5e, - 0x2d, 0x00, 0xe4, 0x37, 0x2d, 0x80, 0x7d, 0xe6, 0x3c, 0x2d, 0x00, 0xe7, - 0x33, 0x2d, 0x80, 0x6b, 0xe8, 0x40, 0x2d, 0x80, 0x62, 0xea, 0x36, 0x2d, - 0x00, 0xeb, 0x3d, 0x2d, 0x80, 0x50, 0xec, 0x4d, 0x2d, 0x00, 0xed, 0x4e, - 0x2d, 0x00, 0xee, 0x4f, 0x2d, 0x00, 0xf0, 0x52, 0x2d, 0x00, 0xf1, 0x47, - 0x2d, 0x00, 0xf2, 0x54, 0x2d, 0x80, 0x33, 0xf3, 0x59, 0x2d, 0x80, 0x26, - 0xf4, 0x5c, 0x2d, 0x80, 0x19, 0xf6, 0x60, 0x2d, 0x00, 0xf7, 0x61, 0x2d, - 0x00, 0xf9, 0x62, 0x2d, 0x00, 0xfa, 0x63, 0x2d, 0xc0, 0x00, 0xe8, 0x4a, - 0x2d, 0x00, 0xfa, 0x65, 0x2d, 0x40, 0xe8, 0x5d, 0x2d, 0x00, 0xf4, 0x5f, - 0x2d, 0x40, 0xe8, 0x5b, 0x2d, 0x00, 0xf3, 0x5a, 0x2d, 0x40, 0xf2, 0x55, - 0x2d, 0x40, 0xe8, 0x45, 0x2d, 0xc0, 0x00, 0xe8, 0x3f, 0x2d, 0x40, 0xe8, - 0x43, 0x2d, 0x40, 0xe8, 0x56, 0x2d, 0xc0, 0x00, 0xe8, 0x34, 0x2d, 0x40, - 0xe4, 0x39, 0x2d, 0x80, 0x04, 0xe8, 0x38, 0x2d, 0x40, 0xe8, 0x3a, 0x2d, - 0x40, 0xe8, 0x32, 0x2d, 0x40, 0x4d, 0x75, 0x7f, 0x64, 0x2d, 0x00, 0x08, - 0x2a, 0xc9, 0x01, 0xff, 0xa7, 0x1d, 0xe8, 0x42, 0x2d, 0x00, 0xeb, 0x3e, - 0x2d, 0x80, 0x10, 0x42, 0x1d, 0x01, 0x51, 0x2d, 0x00, 0xf1, 0x48, 0x2d, - 0x00, 0x42, 0xb3, 0x27, 0x4c, 0x2d, 0x40, 0xe8, 0x46, 0x2d, 0x40, 0xe8, - 0x57, 0x2d, 0x00, 0xee, 0x50, 0x2d, 0x40, 0xe8, 0x41, 0x2d, 0x00, 0xea, - 0x35, 0x2d, 0x40, 0x4b, 0x81, 0x9a, 0x4b, 0x2d, 0x00, 0x48, 0x1a, 0xca, - 0x58, 0x2d, 0x40, 0x12, 0xf8, 0x4e, 0x9d, 0x0b, 0x12, 0x64, 0x4f, 0x80, - 0x0b, 0x06, 0xc4, 0x06, 0xf3, 0x09, 0x49, 0xb3, 0xb8, 0xbe, 0x0f, 0x80, - 0xe5, 0x09, 0xac, 0xbf, 0x07, 0x05, 0xb9, 0x00, 0xf6, 0x04, 0xb3, 0x51, - 0x0b, 0xd1, 0x75, 0x01, 0xff, 0x42, 0x31, 0x12, 0x71, 0x0f, 0x00, 0xe5, - 0x7a, 0x0f, 0x80, 0x3d, 0xe9, 0x72, 0x0f, 0x80, 0x34, 0xef, 0x7c, 0x0f, - 0x80, 0x2b, 0x4a, 0xd3, 0xad, 0x80, 0x0f, 0x80, 0x20, 0xf5, 0x74, 0x0f, - 0x80, 0x17, 0x08, 0x9b, 0xbe, 0x01, 0xff, 0xec, 0x78, 0x0f, 0x80, 0x09, - 0xf2, 0x76, 0x0f, 0xc0, 0x00, 0xf2, 0x77, 0x0f, 0x40, 0xec, 0x79, 0x0f, - 0x40, 0xf5, 0x75, 0x0f, 0x40, 0xe9, 0x81, 0x0f, 0x40, 0xef, 0x7d, 0x0f, - 0x40, 0xe9, 0x73, 0x0f, 0x40, 0xe5, 0x7b, 0x0f, 0x40, 0x04, 0x30, 0x03, - 0xfd, 0x02, 0x09, 0x5a, 0x66, 0x4b, 0xb9, 0x01, 0xff, 0x49, 0x3a, 0xb9, - 0x00, 0x0f, 0x00, 0x05, 0xf5, 0x15, 0x01, 0xff, 0x47, 0xa2, 0xcd, 0xc4, - 0x0f, 0x00, 0x46, 0x74, 0xdb, 0xc9, 0x0f, 0x80, 0x1b, 0xb0, 0x0d, 0x47, - 0x6b, 0xd2, 0xc5, 0x0f, 0xc0, 0x00, 0x4a, 0xdd, 0xa3, 0xc7, 0x0f, 0x40, - 0x49, 0x52, 0xb3, 0xc6, 0x0f, 0x00, 0x46, 0xac, 0xd9, 0xc8, 0x0f, 0x40, - 0x80, 0x01, 0xff, 0x4b, 0xc1, 0x97, 0xcc, 0x0f, 0x00, 0x4b, 0x6b, 0x9a, - 0xcb, 0x0f, 0x00, 0x4b, 0x3e, 0x9e, 0xca, 0x0f, 0x40, 0x07, 0xc1, 0x05, - 0x17, 0x05, 0x2f, 0x03, 0x01, 0xff, 0x51, 0xd4, 0x59, 0x8f, 0x0f, 0x00, - 0x4b, 0x2e, 0x9c, 0x8d, 0x0f, 0x00, 0x48, 0xdd, 0x59, 0x8e, 0x0f, 0x40, - 0x42, 0x2e, 0x25, 0xb0, 0x0f, 0x00, 0xe1, 0xb8, 0x0f, 0x00, 0xa2, 0xfc, - 0x01, 0xa3, 0xef, 0x01, 0xa4, 0xc9, 0x01, 0x0b, 0x63, 0x81, 0xb2, 0x01, - 0xa7, 0xa5, 0x01, 0x42, 0x22, 0x00, 0xb7, 0x0f, 0x00, 0x42, 0xbd, 0x26, - 0x97, 0x0f, 0x00, 0xab, 0x86, 0x01, 0x42, 0x74, 0x00, 0xb3, 0x0f, 0x00, - 0x42, 0x6c, 0x00, 0xa8, 0x0f, 0x00, 0xae, 0x62, 0xb0, 0x56, 0x42, 0x71, - 0x00, 0xb2, 0x0f, 0x00, 0xb3, 0x3e, 0xb4, 0x19, 0x42, 0xa9, 0x01, 0xad, - 0x0f, 0x00, 0x42, 0x34, 0x22, 0xb1, 0x0f, 0x00, 0xba, 0x01, 0xff, 0xe1, - 0xaf, 0x0f, 0x00, 0x42, 0x22, 0x00, 0xae, 0x0f, 0x40, 0xe1, 0x9f, 0x0f, - 0x00, 0x42, 0x22, 0x00, 0xa0, 0x0f, 0x00, 0xb3, 0x0d, 0xb4, 0x01, 0xff, - 0xe1, 0x9a, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x9b, 0x0f, 0x40, 0xe1, 0xa9, - 0x0f, 0x00, 0x42, 0x22, 0x00, 0xaa, 0x0f, 0x40, 0xe1, 0xb6, 0x0f, 0x00, - 0x42, 0x22, 0x00, 0xb4, 0x0f, 0x00, 0x42, 0x15, 0x06, 0xb5, 0x0f, 0x40, - 0xe1, 0xa4, 0x0f, 0x00, 0x42, 0x22, 0x00, 0xa5, 0x0f, 0x40, 0xe1, 0xa3, - 0x0f, 0x00, 0x42, 0x24, 0x02, 0x94, 0x0f, 0x00, 0x42, 0xff, 0x04, 0x9e, - 0x0f, 0x00, 0x42, 0x34, 0x22, 0x99, 0x0f, 0x40, 0xe1, 0x90, 0x0f, 0x00, - 0x42, 0x22, 0x00, 0x91, 0x0f, 0x00, 0x43, 0x59, 0x20, 0xb9, 0x0f, 0x40, - 0xe1, 0x92, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x93, 0x0f, 0x40, 0x42, 0x71, - 0x00, 0xbc, 0x0f, 0x00, 0x42, 0xa9, 0x01, 0xba, 0x0f, 0x00, 0x42, 0x34, - 0x22, 0xbb, 0x0f, 0x40, 0xe1, 0xa1, 0x0f, 0x00, 0xa4, 0x13, 0x42, 0x22, - 0x00, 0xa2, 0x0f, 0x00, 0xba, 0x01, 0xff, 0xe1, 0xab, 0x0f, 0x00, 0x42, - 0x22, 0x00, 0xac, 0x0f, 0x40, 0xe1, 0x9c, 0x0f, 0x00, 0x42, 0x22, 0x00, - 0x9d, 0x0f, 0x40, 0xe1, 0x95, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x96, 0x0f, - 0x40, 0xe1, 0xa6, 0x0f, 0x00, 0x42, 0x22, 0x00, 0xa7, 0x0f, 0x40, 0x04, - 0xd6, 0xec, 0x90, 0x01, 0x51, 0xd4, 0x59, 0x8c, 0x0f, 0x00, 0x02, 0xbf, - 0x1e, 0x7a, 0xad, 0x6c, 0x4e, 0xc2, 0x78, 0x82, 0x0f, 0x00, 0xb2, 0x17, - 0x48, 0x62, 0xc8, 0x83, 0x0f, 0x00, 0x02, 0x34, 0x22, 0x01, 0xff, 0x48, - 0x0a, 0xc6, 0x87, 0x0f, 0x00, 0x47, 0xeb, 0xc0, 0x3e, 0x0f, 0x40, 0x04, - 0x14, 0xbc, 0x0c, 0x4d, 0x10, 0x83, 0x7e, 0x0f, 0x00, 0x48, 0xf6, 0x92, - 0x7f, 0x0f, 0x40, 0x05, 0x8c, 0xe2, 0x1f, 0x04, 0x16, 0xee, 0x01, 0xff, - 0xa7, 0x06, 0x49, 0x13, 0xbc, 0xce, 0x0f, 0x40, 0x43, 0xb7, 0xf0, 0x1d, - 0x0f, 0x00, 0x44, 0x3e, 0x9e, 0x1e, 0x0f, 0x00, 0x43, 0xcd, 0x54, 0xcf, - 0x0f, 0x40, 0xa7, 0x06, 0x48, 0x92, 0xc7, 0x1f, 0x0f, 0x40, 0x43, 0xb7, - 0xf0, 0x1a, 0x0f, 0x00, 0x44, 0x3e, 0x9e, 0x1b, 0x0f, 0x00, 0x43, 0xcd, - 0x54, 0x1c, 0x0f, 0x40, 0x48, 0xea, 0xc0, 0x3f, 0x0f, 0x00, 0x47, 0xde, - 0x59, 0x89, 0x0f, 0x40, 0x49, 0x30, 0x9c, 0x88, 0x0f, 0x00, 0x47, 0xdd, - 0xce, 0x86, 0x0f, 0x40, 0x4b, 0xcc, 0x97, 0x8a, 0x0f, 0x00, 0x4b, 0x41, - 0x9d, 0x8b, 0x0f, 0x40, 0x0c, 0x91, 0x8a, 0xb3, 0x02, 0xa2, 0x88, 0x02, - 0xa3, 0xd4, 0x01, 0x55, 0x4f, 0x39, 0x0c, 0x0f, 0x00, 0xa7, 0x95, 0x01, - 0x47, 0x97, 0xce, 0x84, 0x0f, 0x00, 0x02, 0x9e, 0x01, 0x75, 0x53, 0x8b, - 0x49, 0xd9, 0x0f, 0x00, 0x56, 0xd5, 0x34, 0xd1, 0x0f, 0x00, 0xae, 0x3f, - 0x46, 0xfe, 0xdb, 0x85, 0x0f, 0x00, 0xb2, 0x2b, 0xb3, 0x1d, 0xb4, 0x06, - 0x55, 0x7a, 0x3e, 0x07, 0x0f, 0x40, 0x53, 0x1a, 0x4b, 0xda, 0x0f, 0x00, - 0xb3, 0x01, 0xff, 0x47, 0xb1, 0xcb, 0x39, 0x0f, 0x00, 0x48, 0x84, 0x3e, - 0x0f, 0x0f, 0x40, 0x49, 0x8d, 0xb4, 0x08, 0x0f, 0x00, 0x43, 0xa5, 0x02, - 0x0d, 0x0f, 0x40, 0x4d, 0xd8, 0x81, 0x12, 0x0f, 0x00, 0x53, 0x06, 0x49, - 0x11, 0x0f, 0x40, 0x0a, 0x6f, 0xa8, 0x18, 0x04, 0x3f, 0x9e, 0x01, 0xff, - 0x44, 0xa4, 0x02, 0x0e, 0x0f, 0x00, 0x45, 0x59, 0x39, 0xd2, 0x0f, 0xc0, - 0x00, 0x45, 0x1f, 0x04, 0x10, 0x0f, 0x40, 0x47, 0xc2, 0x78, 0x35, 0x0f, - 0x00, 0x4a, 0x9b, 0xae, 0x37, 0x0f, 0x40, 0x06, 0x4e, 0x16, 0x06, 0x51, - 0xe2, 0x5c, 0x0b, 0x0f, 0x40, 0x5b, 0xf0, 0x19, 0xd3, 0x0f, 0x00, 0x4f, - 0xfc, 0x19, 0x04, 0x0f, 0x40, 0x04, 0xdd, 0x02, 0x11, 0x0b, 0xf0, 0xa1, - 0x01, 0xff, 0x42, 0xbb, 0x01, 0x3b, 0x0f, 0x00, 0x42, 0x10, 0x00, 0x3a, - 0x0f, 0x40, 0x45, 0x59, 0x39, 0x14, 0x0f, 0x00, 0x08, 0xfc, 0x19, 0x01, - 0xff, 0x04, 0x9e, 0xe9, 0x06, 0x4b, 0xa3, 0xa1, 0x01, 0x0f, 0x40, 0x4d, - 0xcb, 0x81, 0x03, 0x0f, 0x00, 0x4c, 0xf5, 0x92, 0x02, 0x0f, 0x40, 0x05, - 0xd8, 0x97, 0x17, 0x46, 0x6a, 0xd9, 0x38, 0x0f, 0x00, 0x07, 0x9f, 0x83, - 0x01, 0xff, 0x5b, 0x0b, 0x1a, 0xd4, 0x0f, 0x00, 0x4f, 0x17, 0x1a, 0x05, - 0x0f, 0x40, 0x0c, 0xe9, 0x89, 0x06, 0x54, 0xd3, 0x45, 0x06, 0x0f, 0x40, - 0x4c, 0xe3, 0x7d, 0x36, 0x0f, 0x00, 0x4b, 0x36, 0x9d, 0x13, 0x0f, 0x40, - 0x09, 0x86, 0xb8, 0x18, 0xb3, 0x01, 0xff, 0x49, 0x9b, 0xb5, 0x34, 0x0f, - 0x00, 0xab, 0x01, 0xff, 0x54, 0x2f, 0x3f, 0xd0, 0x0f, 0x00, 0x4a, 0xad, - 0xb0, 0x09, 0x0f, 0x40, 0x4c, 0xdf, 0x34, 0xd0, 0x0f, 0x00, 0x47, 0xfc, - 0x19, 0x0a, 0x0f, 0x40, 0x42, 0xbb, 0x01, 0x3d, 0x0f, 0x00, 0x42, 0x10, - 0x00, 0x3c, 0x0f, 0x40, 0x06, 0xc2, 0x05, 0x11, 0x0d, 0xfe, 0x84, 0x01, - 0xff, 0x4a, 0x53, 0xa6, 0x15, 0x0f, 0x00, 0x4a, 0xa9, 0xaa, 0x16, 0x0f, - 0x40, 0x42, 0x2e, 0x25, 0x60, 0x0f, 0x00, 0xe1, 0x68, 0x0f, 0x00, 0xa2, - 0xf7, 0x01, 0xa3, 0xea, 0x01, 0xa4, 0xc4, 0x01, 0x4d, 0x63, 0x81, 0x6a, - 0x0f, 0x00, 0xa7, 0xb1, 0x01, 0x42, 0x22, 0x00, 0x67, 0x0f, 0x00, 0x42, - 0xbd, 0x26, 0x47, 0x0f, 0x00, 0xab, 0x8c, 0x01, 0x42, 0x74, 0x00, 0x63, - 0x0f, 0x00, 0x42, 0x6c, 0x00, 0x58, 0x0f, 0x00, 0xae, 0x68, 0xb0, 0x5c, - 0xb2, 0x50, 0xb3, 0x3e, 0xb4, 0x19, 0x42, 0xa9, 0x01, 0x5d, 0x0f, 0x00, - 0x42, 0x34, 0x22, 0x61, 0x0f, 0x00, 0xba, 0x01, 0xff, 0xe1, 0x5f, 0x0f, - 0x00, 0x42, 0x22, 0x00, 0x5e, 0x0f, 0x40, 0xe1, 0x4f, 0x0f, 0x00, 0x42, - 0x22, 0x00, 0x50, 0x0f, 0x00, 0xb3, 0x0d, 0xb4, 0x01, 0xff, 0xe1, 0x4a, - 0x0f, 0x00, 0x42, 0x22, 0x00, 0x4b, 0x0f, 0x40, 0xe1, 0x59, 0x0f, 0x00, - 0x42, 0x22, 0x00, 0x5a, 0x0f, 0x40, 0xe1, 0x66, 0x0f, 0x00, 0x42, 0x22, - 0x00, 0x64, 0x0f, 0x00, 0x42, 0x15, 0x06, 0x65, 0x0f, 0x40, 0xe1, 0x62, - 0x0f, 0x00, 0x42, 0x71, 0x00, 0x6c, 0x0f, 0x40, 0xe1, 0x54, 0x0f, 0x00, - 0x42, 0x22, 0x00, 0x55, 0x0f, 0x40, 0xe1, 0x53, 0x0f, 0x00, 0x42, 0x24, - 0x02, 0x44, 0x0f, 0x00, 0x42, 0xff, 0x04, 0x4e, 0x0f, 0x00, 0x42, 0x34, - 0x22, 0x49, 0x0f, 0x40, 0xe1, 0x40, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x41, - 0x0f, 0x00, 0x42, 0x1b, 0x02, 0x6b, 0x0f, 0x00, 0x43, 0x59, 0x20, 0x69, - 0x0f, 0x40, 0xe1, 0x42, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x43, 0x0f, 0x40, - 0xe1, 0x51, 0x0f, 0x00, 0xa4, 0x13, 0x42, 0x22, 0x00, 0x52, 0x0f, 0x00, - 0xba, 0x01, 0xff, 0xe1, 0x5b, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x5c, 0x0f, - 0x40, 0xe1, 0x4c, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x4d, 0x0f, 0x40, 0xe1, - 0x45, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x46, 0x0f, 0x40, 0xe1, 0x56, 0x0f, - 0x00, 0x42, 0x22, 0x00, 0x57, 0x0f, 0x40, 0x4d, 0xe2, 0x7d, 0xbf, 0x0f, - 0x40, 0x45, 0xc3, 0x0a, 0x28, 0x0f, 0x00, 0xa6, 0x74, 0x05, 0x22, 0x00, - 0x2e, 0x44, 0x46, 0x2a, 0x29, 0x0f, 0x00, 0x43, 0xbf, 0x0a, 0x21, 0x0f, - 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x20, 0x0f, 0x40, 0x44, - 0x25, 0x01, 0x23, 0x0f, 0x00, 0x42, 0x15, 0x02, 0x22, 0x0f, 0x40, 0x44, - 0x27, 0x1d, 0x27, 0x0f, 0x00, 0x42, 0x60, 0x25, 0x26, 0x0f, 0x40, 0x45, - 0xc3, 0x0a, 0x31, 0x0f, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x32, 0x0f, - 0x00, 0x43, 0xbf, 0x0a, 0x2a, 0x0f, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, - 0xa1, 0x1d, 0x33, 0x0f, 0x40, 0x44, 0x25, 0x01, 0x2c, 0x0f, 0x00, 0x42, - 0x15, 0x02, 0x2b, 0x0f, 0x40, 0x44, 0x27, 0x1d, 0x30, 0x0f, 0x00, 0x42, - 0x60, 0x25, 0x2f, 0x0f, 0x40, 0x43, 0xa7, 0x05, 0x2e, 0x0f, 0x00, 0x43, - 0xcb, 0x06, 0x2d, 0x0f, 0x40, 0x43, 0xa7, 0x05, 0x25, 0x0f, 0x00, 0x43, - 0xcb, 0x06, 0x24, 0x0f, 0x40, 0x49, 0x9f, 0xb4, 0xc2, 0x0f, 0x00, 0x4a, - 0xe7, 0xa8, 0xc0, 0x0f, 0x00, 0x4a, 0xb3, 0xaa, 0xc1, 0x0f, 0x00, 0x4a, - 0x73, 0xae, 0xc3, 0x0f, 0x40, 0x49, 0xb9, 0xb2, 0x18, 0x0f, 0x00, 0xb3, - 0x01, 0xff, 0x4b, 0x00, 0x99, 0x19, 0x0f, 0x00, 0x54, 0x9b, 0x41, 0x17, - 0x0f, 0x40, 0xa1, 0xb7, 0x02, 0x02, 0x33, 0x00, 0x8b, 0x02, 0xa9, 0xe3, - 0x01, 0xaf, 0xd4, 0x01, 0x03, 0x26, 0x01, 0x24, 0xb5, 0x01, 0xff, 0x04, - 0x7f, 0x8f, 0x11, 0x04, 0x4d, 0x1a, 0x01, 0xff, 0x4f, 0xa8, 0x67, 0xc8, - 0x26, 0x00, 0x45, 0xfa, 0xe7, 0x08, 0x26, 0x40, 0x49, 0x77, 0xb5, 0x4e, - 0xf4, 0x01, 0x47, 0x08, 0xd4, 0x4d, 0xf4, 0x41, 0x80, 0x41, 0x8d, 0x01, - 0xff, 0x02, 0x06, 0x00, 0x0c, 0x47, 0x3b, 0xc0, 0x3b, 0x2e, 0x00, 0x4c, - 0xc0, 0x7e, 0x04, 0x20, 0x40, 0x63, 0x66, 0x0a, 0xa3, 0x27, 0x00, 0x6c, - 0xbe, 0x01, 0x9b, 0x2b, 0x00, 0x6b, 0x42, 0x02, 0x99, 0x2b, 0x00, 0x0c, - 0x15, 0x94, 0x01, 0xff, 0x5f, 0xff, 0x10, 0x98, 0x2b, 0x00, 0x0b, 0xb3, - 0x02, 0x01, 0xff, 0x49, 0xe1, 0x01, 0xa2, 0x27, 0x00, 0x55, 0xd5, 0x01, - 0x9a, 0x2b, 0x40, 0x4c, 0x45, 0x8b, 0xb1, 0xf5, 0x01, 0x58, 0x25, 0x27, - 0x76, 0x2a, 0x00, 0xa4, 0x4f, 0xac, 0x36, 0x53, 0x49, 0x4a, 0xa7, 0xf5, - 0x01, 0x52, 0x4b, 0x2b, 0xc2, 0xf7, 0x01, 0xb2, 0x06, 0x4e, 0x0e, 0x7b, - 0xeb, 0xf5, 0x41, 0x04, 0xc0, 0x44, 0x06, 0x50, 0x5f, 0x2e, 0xf6, 0x21, - 0x40, 0x45, 0x5c, 0x00, 0xe4, 0xf5, 0x01, 0x45, 0xf5, 0x06, 0xe5, 0xf5, - 0x01, 0x44, 0xc3, 0x00, 0xe6, 0xf5, 0x01, 0x45, 0xc8, 0x00, 0xe7, 0xf5, - 0x41, 0x4f, 0x46, 0x3d, 0x31, 0x2b, 0x00, 0x10, 0x8a, 0x62, 0x01, 0xff, - 0x44, 0xc3, 0x00, 0x9f, 0x26, 0x00, 0x45, 0xc8, 0x00, 0x9e, 0x26, 0x40, - 0x50, 0x5a, 0x62, 0xc0, 0x27, 0x00, 0x4e, 0xb5, 0x0b, 0x56, 0x20, 0x40, - 0x49, 0xe5, 0xb9, 0x74, 0xfa, 0x01, 0x4c, 0x51, 0x94, 0xad, 0xf4, 0x41, - 0xae, 0x06, 0x4e, 0x12, 0x7a, 0x49, 0xf9, 0x41, 0x80, 0x06, 0x49, 0x24, - 0xae, 0x14, 0xf9, 0x41, 0x4b, 0x9f, 0x5f, 0xa1, 0xf7, 0x01, 0xb3, 0x01, - 0xff, 0x46, 0xa7, 0x18, 0xa8, 0xf7, 0x01, 0x44, 0x88, 0x4b, 0x09, 0x20, - 0x40, 0xa5, 0x11, 0x02, 0x98, 0x07, 0x01, 0xff, 0x47, 0xb0, 0xcd, 0xe7, - 0x29, 0x00, 0x45, 0xf6, 0xa8, 0x21, 0xf3, 0x41, 0x80, 0x06, 0x44, 0x1b, - 0x61, 0x34, 0x22, 0x40, 0x4e, 0x96, 0x75, 0x04, 0x22, 0x00, 0x46, 0xb0, - 0xd8, 0x03, 0x22, 0x40, 0x04, 0xfc, 0x11, 0xfc, 0x04, 0x02, 0xc6, 0x03, - 0x01, 0xff, 0xa3, 0x47, 0x06, 0xc4, 0x06, 0x01, 0xff, 0x45, 0xc3, 0x0a, - 0x58, 0x0e, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x59, 0x0e, 0x00, 0x43, - 0xbf, 0x0a, 0x51, 0x0e, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, - 0x50, 0x0e, 0x40, 0x44, 0x25, 0x01, 0x53, 0x0e, 0x00, 0x42, 0x15, 0x02, - 0x52, 0x0e, 0x40, 0x44, 0x27, 0x1d, 0x57, 0x0e, 0x00, 0x42, 0x60, 0x25, - 0x56, 0x0e, 0x40, 0x43, 0xa7, 0x05, 0x55, 0x0e, 0x00, 0x43, 0xcb, 0x06, - 0x54, 0x0e, 0x40, 0x09, 0x0c, 0x40, 0x06, 0x53, 0x08, 0x4d, 0x3f, 0x0e, - 0x40, 0x4a, 0x8b, 0xa5, 0x5a, 0x0e, 0x00, 0x49, 0x72, 0xb4, 0x1a, 0x0e, - 0x00, 0x06, 0xb4, 0xd7, 0xfc, 0x03, 0x03, 0xbd, 0x64, 0xeb, 0x03, 0x02, - 0x3d, 0x03, 0xd5, 0x03, 0x03, 0x3a, 0x70, 0xc4, 0x03, 0xab, 0x8d, 0x03, - 0xac, 0xf0, 0x02, 0xad, 0xb4, 0x02, 0xae, 0x96, 0x02, 0x45, 0x33, 0xe6, - 0x2d, 0x0e, 0x00, 0xb0, 0xde, 0x01, 0xb2, 0xd1, 0x01, 0xb3, 0x69, 0xb4, - 0x20, 0x47, 0xc5, 0xd4, 0x27, 0x0e, 0x00, 0xb9, 0x01, 0xff, 0x47, 0x03, - 0xca, 0x4e, 0x0e, 0x00, 0x03, 0x72, 0xde, 0x01, 0xff, 0x42, 0x6d, 0x00, - 0x22, 0x0e, 0x00, 0x43, 0xa1, 0x01, 0x0d, 0x0e, 0x40, 0xa8, 0x11, 0x02, - 0x7b, 0x02, 0x01, 0xff, 0x45, 0x9c, 0xe6, 0x0f, 0x0e, 0x00, 0x43, 0x6c, - 0x18, 0x15, 0x0e, 0x40, 0x49, 0xd9, 0xb3, 0x4c, 0x0e, 0x00, 0x02, 0x7b, - 0x02, 0x01, 0xff, 0x4a, 0xdf, 0xab, 0x11, 0x0e, 0x00, 0x47, 0xe6, 0xd1, - 0x12, 0x0e, 0x00, 0x02, 0x53, 0x00, 0x01, 0xff, 0xa1, 0x0c, 0x43, 0x63, - 0x0e, 0x18, 0x0e, 0x00, 0x43, 0x75, 0x44, 0x16, 0x0e, 0x40, 0x43, 0x90, - 0x00, 0x17, 0x0e, 0x00, 0xee, 0x10, 0x0e, 0x40, 0x04, 0xd5, 0x15, 0x1e, - 0x02, 0x7b, 0x02, 0x01, 0xff, 0x44, 0x2e, 0xef, 0x29, 0x0e, 0x00, 0xb3, - 0x01, 0xff, 0x43, 0xe0, 0x18, 0x28, 0x0e, 0x00, 0xef, 0x0b, 0x0e, 0x00, - 0x42, 0x7d, 0x00, 0x2a, 0x0e, 0x40, 0xe1, 0x30, 0x0e, 0x80, 0x23, 0xe5, - 0x40, 0x0e, 0x00, 0xe9, 0x34, 0x0e, 0x80, 0x16, 0xef, 0x42, 0x0e, 0x00, - 0xf5, 0x38, 0x0e, 0xc0, 0x00, 0xe5, 0x36, 0x0e, 0x80, 0x04, 0xf5, 0x39, - 0x0e, 0x40, 0xe5, 0x37, 0x0e, 0x40, 0xe9, 0x35, 0x0e, 0x40, 0xe1, 0x32, - 0x0e, 0x00, 0xe5, 0x41, 0x0e, 0x00, 0x06, 0xb8, 0xd9, 0x04, 0xed, 0x33, - 0x0e, 0x40, 0x44, 0xba, 0xeb, 0x44, 0x0e, 0x00, 0x43, 0x22, 0x9f, 0x43, - 0x0e, 0x40, 0x45, 0x47, 0xe6, 0x23, 0x0e, 0x00, 0xf5, 0x24, 0x0e, 0x40, - 0x48, 0xb2, 0xc0, 0x2f, 0x0e, 0x00, 0xa8, 0x06, 0x45, 0x42, 0xe6, 0x1b, - 0x0e, 0x40, 0x45, 0x6c, 0xe4, 0x3a, 0x0e, 0x00, 0x02, 0x7b, 0x02, 0x01, - 0xff, 0x02, 0x35, 0x10, 0x06, 0x47, 0xc6, 0xd2, 0x20, 0x0e, 0x40, 0x42, - 0x1a, 0x00, 0x1e, 0x0e, 0x00, 0x43, 0x75, 0x44, 0x1c, 0x0e, 0x40, 0x46, - 0x28, 0xd9, 0x07, 0x0e, 0x00, 0x47, 0x0e, 0xcf, 0x4d, 0x0e, 0x00, 0x03, - 0x29, 0xd9, 0x01, 0xff, 0x42, 0x92, 0x01, 0x13, 0x0e, 0x00, 0xf5, 0x19, - 0x0e, 0x40, 0x02, 0x05, 0x07, 0x06, 0x44, 0x75, 0x4c, 0x21, 0x0e, 0x40, - 0x80, 0x0c, 0x46, 0x4e, 0xdd, 0x47, 0x0e, 0x00, 0x45, 0x53, 0xe9, 0x46, - 0x0e, 0x40, 0x48, 0x1a, 0xc2, 0x4b, 0x0e, 0x00, 0x42, 0x69, 0x18, 0x48, - 0x0e, 0x00, 0x48, 0x0a, 0xc4, 0x31, 0x0e, 0x00, 0xb4, 0x01, 0xff, 0x42, - 0x0b, 0x00, 0x49, 0x0e, 0x00, 0x42, 0x0d, 0x00, 0x4a, 0x0e, 0x40, 0x4a, - 0x4f, 0xa5, 0x45, 0x0e, 0x00, 0x02, 0x7b, 0x02, 0x04, 0xf5, 0x26, 0x0e, - 0x40, 0x45, 0x2d, 0xe2, 0x2c, 0x0e, 0x00, 0x44, 0xe0, 0x0a, 0x25, 0x0e, - 0x40, 0x02, 0x0b, 0x00, 0x06, 0x45, 0x3d, 0xe6, 0x01, 0x0e, 0x40, 0x80, - 0x06, 0x43, 0xc5, 0xa9, 0x5b, 0x0e, 0x40, 0x02, 0x11, 0x0c, 0x06, 0x47, - 0x48, 0xd2, 0x06, 0x0e, 0x40, 0x42, 0x05, 0x07, 0x02, 0x0e, 0x00, 0x42, - 0x10, 0x00, 0x05, 0x0e, 0x00, 0x43, 0xbd, 0x0b, 0x03, 0x0e, 0x00, 0x43, - 0x82, 0x10, 0x04, 0x0e, 0x40, 0x43, 0x0d, 0x0d, 0x2b, 0x0e, 0x00, 0x46, - 0x6e, 0xdb, 0x2e, 0x0e, 0x40, 0x43, 0xe0, 0x07, 0x1d, 0x0e, 0x80, 0x06, - 0x45, 0xf2, 0xe5, 0x4f, 0x0e, 0x40, 0xee, 0x1f, 0x0e, 0x40, 0x45, 0x0f, - 0xe2, 0x0e, 0x0e, 0x00, 0x43, 0x68, 0x18, 0x14, 0x0e, 0x40, 0x42, 0x1a, - 0x00, 0x08, 0x0e, 0x80, 0x0c, 0x43, 0xa1, 0x01, 0x09, 0x0e, 0x00, 0x42, - 0x17, 0x50, 0x0c, 0x0e, 0x40, 0xe7, 0x0a, 0x0e, 0x40, 0xa1, 0xc6, 0x02, - 0xa5, 0xb1, 0x02, 0x47, 0xeb, 0xce, 0xa8, 0x07, 0x00, 0x07, 0xc1, 0x05, - 0x20, 0xaf, 0x0c, 0x45, 0xff, 0xe7, 0xb0, 0x07, 0x00, 0x47, 0xde, 0xd3, - 0xaa, 0x07, 0x40, 0x48, 0x9a, 0xc0, 0xaf, 0x07, 0x00, 0x46, 0x54, 0xd7, - 0xae, 0x07, 0x00, 0x48, 0x52, 0xc6, 0xab, 0x07, 0x40, 0xa1, 0xf8, 0x01, - 0x43, 0x2e, 0x4f, 0x84, 0x07, 0x00, 0x49, 0xde, 0xb4, 0x97, 0x07, 0x00, - 0xa4, 0xd5, 0x01, 0x45, 0x45, 0xe3, 0x8a, 0x07, 0x00, 0xa7, 0xba, 0x01, - 0xa8, 0xab, 0x01, 0x48, 0xba, 0xc4, 0x96, 0x07, 0x00, 0xab, 0x96, 0x01, - 0xac, 0x87, 0x01, 0x45, 0x66, 0xe5, 0x89, 0x07, 0x00, 0xae, 0x73, 0x48, - 0x32, 0xc7, 0x95, 0x07, 0x00, 0x45, 0xf6, 0xe6, 0xa4, 0x07, 0x00, 0x43, - 0xcd, 0xa8, 0x83, 0x07, 0x00, 0xb3, 0x44, 0xb4, 0x25, 0x45, 0xe5, 0xe8, - 0x88, 0x07, 0x00, 0x45, 0x08, 0xe9, 0xa5, 0x07, 0x00, 0x43, 0x4e, 0xb7, - 0x94, 0x07, 0x00, 0xba, 0x01, 0xff, 0xa1, 0x04, 0xef, 0xa1, 0x07, 0x40, - 0xe1, 0x9c, 0x07, 0x00, 0x46, 0xe1, 0xb4, 0x92, 0x07, 0x40, 0x47, 0xe0, - 0xb4, 0x93, 0x07, 0x00, 0x43, 0x42, 0x40, 0x8c, 0x07, 0x80, 0x0a, 0xef, - 0xa0, 0x07, 0x00, 0x43, 0x30, 0x12, 0x98, 0x07, 0x40, 0x42, 0x5b, 0x15, - 0x9b, 0x07, 0x40, 0x45, 0xed, 0xe0, 0x9e, 0x07, 0x00, 0x44, 0x66, 0xec, - 0x90, 0x07, 0x00, 0xa8, 0x01, 0xff, 0x47, 0xe0, 0xb4, 0x81, 0x07, 0x00, - 0x44, 0x66, 0xec, 0x9d, 0x07, 0x40, 0x42, 0x31, 0x12, 0xb1, 0x07, 0x00, - 0x44, 0x5a, 0x94, 0x82, 0x07, 0x40, 0x44, 0x9f, 0x87, 0x8d, 0x07, 0x00, - 0x48, 0xdf, 0xb4, 0x85, 0x07, 0x40, 0x44, 0x46, 0xe3, 0x86, 0x07, 0x00, - 0x43, 0x42, 0x40, 0x9a, 0x07, 0x40, 0x42, 0x31, 0x12, 0x80, 0x07, 0x00, - 0x43, 0x42, 0x40, 0x99, 0x07, 0x40, 0x44, 0x46, 0xe3, 0x8e, 0x07, 0x00, - 0x45, 0xbd, 0xe3, 0xa3, 0x07, 0x00, 0x48, 0xea, 0xc5, 0x8f, 0x07, 0x40, - 0xa1, 0x06, 0x45, 0xb3, 0xe3, 0x8b, 0x07, 0x40, 0x44, 0xee, 0xe0, 0x9f, - 0x07, 0x00, 0x46, 0xe1, 0xb4, 0x91, 0x07, 0x40, 0x43, 0x45, 0x1a, 0xa2, - 0x07, 0x00, 0x44, 0xc2, 0xed, 0x87, 0x07, 0x40, 0x46, 0x30, 0xd7, 0xac, - 0x07, 0x00, 0x48, 0xda, 0xc2, 0xa9, 0x07, 0x00, 0x48, 0x0a, 0xca, 0xad, - 0x07, 0x40, 0x48, 0x92, 0xc0, 0xa7, 0x07, 0x00, 0x46, 0x24, 0xd7, 0xa6, - 0x07, 0x40, 0xa1, 0xb6, 0x0a, 0x48, 0x82, 0xc2, 0xf8, 0xf9, 0x01, 0xac, - 0xea, 0x04, 0xae, 0xd7, 0x04, 0x47, 0x2f, 0xd3, 0xea, 0xf9, 0x01, 0x0c, - 0x21, 0x94, 0x01, 0xff, 0xa1, 0xb1, 0x04, 0xa2, 0x9c, 0x04, 0xa3, 0xc4, - 0x03, 0xa4, 0xff, 0x02, 0xa5, 0xd0, 0x02, 0xa6, 0xa2, 0x02, 0xa7, 0x80, - 0x02, 0xa8, 0xf1, 0x01, 0x02, 0x9e, 0x01, 0xe0, 0x01, 0x43, 0xe2, 0x93, - 0x1d, 0xd3, 0x01, 0xab, 0xcb, 0x01, 0xac, 0xb4, 0x01, 0xad, 0x9f, 0x01, - 0xaf, 0x90, 0x01, 0xb0, 0x74, 0xb2, 0x47, 0xb3, 0x22, 0x45, 0xb3, 0xe8, - 0x3b, 0xd3, 0x01, 0x53, 0x54, 0x4d, 0x37, 0xd3, 0x01, 0x02, 0xa9, 0x01, - 0x06, 0x4c, 0x4d, 0x95, 0x11, 0xd3, 0x41, 0x45, 0xe9, 0x82, 0x17, 0xd3, - 0x01, 0x43, 0x0e, 0x21, 0x44, 0xd3, 0x41, 0x48, 0x7a, 0xc3, 0x4b, 0xd3, - 0x01, 0x46, 0x96, 0x8f, 0x45, 0xd3, 0x01, 0xb4, 0x01, 0xff, 0xaf, 0x06, - 0x46, 0x82, 0xdc, 0x29, 0xd3, 0x41, 0x45, 0xe7, 0xe6, 0x4c, 0xd3, 0x01, - 0x42, 0x32, 0x00, 0x31, 0xd3, 0x41, 0xa5, 0x06, 0x45, 0x8a, 0xe4, 0x35, - 0xd3, 0x41, 0x43, 0xd4, 0x2c, 0x14, 0xd3, 0x01, 0x45, 0x0c, 0xe5, 0x1a, - 0xd3, 0x01, 0xb3, 0x01, 0xff, 0xa9, 0x06, 0x45, 0xe2, 0xe6, 0x2e, 0xd3, - 0x41, 0x45, 0x78, 0xe2, 0x2c, 0xd3, 0x01, 0x46, 0x06, 0xdd, 0x1b, 0xd3, - 0x41, 0xa1, 0x0c, 0x4a, 0xb1, 0xa7, 0x13, 0xd3, 0x01, 0x45, 0xc7, 0xe8, - 0x2a, 0xd3, 0x41, 0x45, 0xfd, 0x65, 0x24, 0xd3, 0x01, 0x45, 0xb3, 0x8f, - 0x34, 0xd3, 0x41, 0x4b, 0xaf, 0x9d, 0x53, 0xd3, 0x01, 0x49, 0xc2, 0xbb, - 0x0d, 0xd3, 0x41, 0x46, 0x0c, 0xd7, 0x40, 0xd3, 0x01, 0x46, 0x06, 0x18, - 0x39, 0xd3, 0x01, 0x44, 0xa9, 0x85, 0x08, 0xd3, 0x41, 0xa1, 0x06, 0x45, - 0xc3, 0xe2, 0x25, 0xd3, 0x41, 0x47, 0xd7, 0xcc, 0x55, 0xd3, 0x01, 0x4a, - 0x11, 0xb1, 0x2d, 0xd3, 0x41, 0x4c, 0xad, 0x8c, 0x0a, 0xd3, 0x01, 0x46, - 0x12, 0xda, 0x27, 0xd3, 0x41, 0x46, 0xd8, 0xd7, 0x12, 0xd3, 0x01, 0x43, - 0xd1, 0x0a, 0x46, 0xd3, 0x41, 0x47, 0x36, 0xcc, 0x4d, 0xd3, 0x01, 0x4b, - 0x03, 0x51, 0x16, 0xd3, 0x41, 0x48, 0xf9, 0x56, 0x28, 0xd3, 0x81, 0x12, - 0x4c, 0x5d, 0x91, 0x2f, 0xd3, 0x01, 0x48, 0x9a, 0xc7, 0x32, 0xd3, 0x01, - 0x4a, 0x35, 0xb0, 0x3e, 0xd3, 0x41, 0x43, 0xdd, 0x05, 0x3f, 0xd3, 0x41, - 0x46, 0xb2, 0xd6, 0x50, 0xd3, 0x01, 0x45, 0xc3, 0x01, 0x36, 0xd3, 0x01, - 0xaf, 0x11, 0x03, 0x16, 0x16, 0x01, 0xff, 0x47, 0xe6, 0x02, 0x07, 0xd3, - 0x01, 0x44, 0x9a, 0x23, 0x2b, 0xd3, 0x41, 0x47, 0x83, 0xc6, 0x18, 0xd3, - 0x01, 0x47, 0x36, 0xd3, 0x56, 0xd3, 0x41, 0x43, 0xca, 0x34, 0x1c, 0xd3, - 0x01, 0x4c, 0x25, 0x90, 0x42, 0xd3, 0x01, 0xae, 0x0c, 0x47, 0x1f, 0x32, - 0x3a, 0xd3, 0x01, 0x49, 0xf5, 0xbe, 0x4a, 0xd3, 0x41, 0x48, 0x4a, 0xc2, - 0x30, 0xd3, 0x01, 0x47, 0x78, 0xcd, 0x1f, 0xd3, 0x01, 0x49, 0xe0, 0xb8, - 0x33, 0xd3, 0x41, 0x48, 0x92, 0x38, 0x48, 0xd3, 0x01, 0xa5, 0x28, 0xa9, - 0x0c, 0x44, 0xaa, 0xee, 0x43, 0xd3, 0x01, 0x45, 0xd6, 0xe8, 0x20, 0xd3, - 0x41, 0x4a, 0x15, 0xa8, 0x54, 0xd3, 0x01, 0xad, 0x06, 0x48, 0x8a, 0xc9, - 0x10, 0xd3, 0x41, 0x49, 0x35, 0xb8, 0x3c, 0xd3, 0x01, 0x44, 0x4e, 0x60, - 0x49, 0xd3, 0x41, 0x4a, 0x7b, 0xa6, 0x22, 0xd3, 0x01, 0x59, 0x93, 0x23, - 0x0f, 0xd3, 0x01, 0x47, 0x5e, 0xb5, 0x47, 0xd3, 0x41, 0x45, 0x74, 0x02, - 0x06, 0xd3, 0x01, 0x45, 0x85, 0xc3, 0x21, 0xd3, 0x01, 0x03, 0x54, 0x0d, - 0x31, 0xaf, 0x01, 0xff, 0x03, 0x22, 0x61, 0x1e, 0xae, 0x01, 0xff, 0x46, - 0x0c, 0xdd, 0x38, 0xd3, 0x01, 0xb4, 0x01, 0xff, 0x43, 0xa0, 0x0c, 0x15, - 0xd3, 0x01, 0x46, 0x75, 0x81, 0x1e, 0xd3, 0x01, 0x47, 0x56, 0xd2, 0x0b, - 0xd3, 0x41, 0x45, 0x25, 0x61, 0x4e, 0xd3, 0x01, 0x45, 0xbd, 0xc0, 0x52, - 0xd3, 0x41, 0xa5, 0x06, 0x43, 0x09, 0x18, 0x4f, 0xd3, 0x41, 0x47, 0xc2, - 0x8b, 0x3d, 0xd3, 0x01, 0x44, 0x9a, 0x23, 0x26, 0xd3, 0x41, 0x46, 0x9a, - 0x68, 0x09, 0xd3, 0x01, 0x4e, 0xde, 0x78, 0x23, 0xd3, 0x01, 0x4c, 0x65, - 0x92, 0x0e, 0xd3, 0x41, 0x4b, 0xe2, 0x97, 0x41, 0xd3, 0x01, 0x46, 0x20, - 0xd8, 0x19, 0xd3, 0x01, 0x4a, 0x8d, 0xa8, 0x51, 0xd3, 0x01, 0x45, 0x4a, - 0x40, 0x0c, 0xd3, 0x41, 0x47, 0xf2, 0x94, 0xb8, 0x20, 0x00, 0x54, 0x67, - 0x43, 0xbe, 0xf3, 0x01, 0xf4, 0xfa, 0x26, 0x40, 0xa5, 0x87, 0x05, 0x04, - 0x7e, 0xef, 0x01, 0xff, 0x4e, 0x38, 0x74, 0x56, 0x0c, 0x00, 0x06, 0xc4, - 0x06, 0xb5, 0x04, 0x0f, 0xc2, 0x6b, 0xf7, 0x03, 0x02, 0x68, 0x00, 0x9c, - 0x01, 0x05, 0x2f, 0x03, 0x4e, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x3b, - 0xe5, 0x46, 0x0c, 0x80, 0x32, 0xe9, 0x3f, 0x0c, 0x80, 0x29, 0xef, 0x4a, - 0x0c, 0x80, 0x20, 0xf5, 0x41, 0x0c, 0x80, 0x17, 0x08, 0x9b, 0xbe, 0x01, - 0xff, 0xec, 0x62, 0x0c, 0x80, 0x09, 0xf2, 0x43, 0x0c, 0xc0, 0x00, 0xf2, - 0x44, 0x0c, 0x40, 0xec, 0x63, 0x0c, 0x40, 0xf5, 0x42, 0x0c, 0x40, 0xef, - 0x4b, 0x0c, 0x40, 0xe9, 0x40, 0x0c, 0x40, 0xe5, 0x47, 0x0c, 0x40, 0xe1, - 0x3e, 0x0c, 0x00, 0xe9, 0x48, 0x0c, 0x00, 0xf5, 0x4c, 0x0c, 0x40, 0xa1, - 0x3c, 0xa3, 0x23, 0x45, 0x5a, 0x3e, 0x3c, 0x0c, 0x00, 0x47, 0x0c, 0xd3, - 0x77, 0x0c, 0x00, 0x45, 0x81, 0xe8, 0x7f, 0x0c, 0x00, 0x02, 0x02, 0x00, - 0x01, 0xff, 0x44, 0x5d, 0x23, 0x4d, 0x0c, 0x00, 0x45, 0xa3, 0x4a, 0x03, - 0x0c, 0x40, 0x4a, 0x50, 0x23, 0x01, 0x0c, 0x00, 0x09, 0xc7, 0x15, 0x01, - 0xff, 0x4e, 0xd0, 0x15, 0x04, 0x0c, 0x00, 0x51, 0xa3, 0x57, 0x00, 0x0c, - 0x40, 0x47, 0xd1, 0x15, 0x02, 0x0c, 0x00, 0x47, 0xf2, 0x86, 0x3d, 0x0c, - 0x40, 0x49, 0x74, 0x38, 0x55, 0x0c, 0x00, 0x05, 0xc3, 0x05, 0x01, 0xff, - 0xe1, 0x05, 0x0c, 0x80, 0xb9, 0x02, 0xa2, 0xac, 0x02, 0xa3, 0x9f, 0x02, - 0xa4, 0x80, 0x02, 0xe5, 0x0e, 0x0c, 0x80, 0xf6, 0x01, 0xa7, 0xe9, 0x01, - 0x42, 0x22, 0x00, 0x39, 0x0c, 0x00, 0xe9, 0x07, 0x0c, 0x80, 0xd9, 0x01, - 0xaa, 0xcc, 0x01, 0xab, 0xbf, 0x01, 0xac, 0xab, 0x01, 0x42, 0x6c, 0x00, - 0x2e, 0x0c, 0x00, 0xae, 0x85, 0x01, 0xef, 0x12, 0x0c, 0x80, 0x7c, 0xb0, - 0x70, 0xb2, 0x5d, 0xb3, 0x4b, 0xb4, 0x2c, 0xf5, 0x09, 0x0c, 0x80, 0x23, - 0xb6, 0x06, 0x42, 0x34, 0x22, 0x2f, 0x0c, 0x40, 0xe1, 0x35, 0x0c, 0x00, - 0x07, 0x9c, 0xbe, 0x01, 0xff, 0xec, 0x0c, 0x0c, 0x80, 0x09, 0xf2, 0x0b, - 0x0c, 0xc0, 0x00, 0xf2, 0x60, 0x0c, 0x40, 0xec, 0x61, 0x0c, 0x40, 0xf5, - 0x0a, 0x0c, 0x40, 0xe1, 0x24, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x25, 0x0c, - 0x00, 0x42, 0x15, 0x06, 0x58, 0x0c, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x1f, - 0x0c, 0x00, 0x42, 0x22, 0x00, 0x20, 0x0c, 0x40, 0xe1, 0x38, 0x0c, 0x00, - 0x42, 0x22, 0x00, 0x36, 0x0c, 0x00, 0x42, 0x15, 0x06, 0x37, 0x0c, 0x40, - 0xe1, 0x30, 0x0c, 0x00, 0xb2, 0x01, 0xff, 0xe1, 0x31, 0x0c, 0x00, 0x42, - 0x71, 0x00, 0x5a, 0x0c, 0x40, 0xe1, 0x2a, 0x0c, 0x00, 0x42, 0x22, 0x00, - 0x2b, 0x0c, 0x40, 0xef, 0x13, 0x0c, 0x40, 0xe1, 0x28, 0x0c, 0x80, 0x12, - 0x42, 0x24, 0x02, 0x19, 0x0c, 0x00, 0x42, 0xff, 0x04, 0x23, 0x0c, 0x00, - 0x42, 0x34, 0x22, 0x1e, 0x0c, 0x40, 0x4b, 0xd6, 0x9b, 0x5d, 0x0c, 0x40, - 0xe1, 0x32, 0x0c, 0x00, 0xac, 0x01, 0xff, 0xe1, 0x33, 0x0c, 0x00, 0x42, - 0x74, 0x00, 0x34, 0x0c, 0x40, 0xe1, 0x15, 0x0c, 0x00, 0x42, 0x22, 0x00, - 0x16, 0x0c, 0x40, 0xe1, 0x1c, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x1d, 0x0c, - 0x40, 0xe9, 0x08, 0x0c, 0x40, 0xe1, 0x17, 0x0c, 0x00, 0x42, 0x22, 0x00, - 0x18, 0x0c, 0x40, 0xe5, 0x0f, 0x0c, 0x40, 0xe1, 0x26, 0x0c, 0x00, 0xa4, - 0x0c, 0x42, 0x22, 0x00, 0x27, 0x0c, 0x00, 0x42, 0x59, 0x00, 0x59, 0x0c, - 0x40, 0xe1, 0x21, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x22, 0x0c, 0x40, 0xe1, - 0x1a, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x1b, 0x0c, 0x40, 0xe1, 0x2c, 0x0c, - 0x00, 0x42, 0x22, 0x00, 0x2d, 0x0c, 0x40, 0xe1, 0x06, 0x0c, 0x00, 0xe9, - 0x10, 0x0c, 0x00, 0xf5, 0x14, 0x0c, 0x40, 0x08, 0xaa, 0xc6, 0x29, 0xb4, - 0x06, 0x5b, 0xa1, 0x1d, 0x78, 0x0c, 0x40, 0x09, 0x66, 0xb7, 0x11, 0x07, - 0xb7, 0xd4, 0x01, 0xff, 0x53, 0x0f, 0x48, 0x7d, 0x0c, 0x00, 0x52, 0xaa, - 0x1d, 0x7a, 0x0c, 0x40, 0x53, 0x0f, 0x48, 0x7e, 0x0c, 0x00, 0x52, 0xaa, - 0x1d, 0x7b, 0x0c, 0x40, 0x53, 0x0f, 0x48, 0x7c, 0x0c, 0x00, 0x52, 0xaa, - 0x1d, 0x79, 0x0c, 0x40, 0x45, 0xc3, 0x0a, 0x6e, 0x0c, 0x00, 0xa6, 0x2e, - 0x44, 0x46, 0x2a, 0x6f, 0x0c, 0x00, 0x43, 0xbf, 0x0a, 0x67, 0x0c, 0x00, - 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x66, 0x0c, 0x40, 0x44, 0x25, - 0x01, 0x69, 0x0c, 0x00, 0x42, 0x15, 0x02, 0x68, 0x0c, 0x40, 0x44, 0x27, - 0x1d, 0x6d, 0x0c, 0x00, 0x42, 0x60, 0x25, 0x6c, 0x0c, 0x40, 0x43, 0xa7, - 0x05, 0x6b, 0x0c, 0x00, 0x43, 0xcb, 0x06, 0x6a, 0x0c, 0x40, 0x06, 0x4a, - 0x3c, 0x0c, 0x45, 0xd5, 0xc8, 0x2d, 0xf5, 0x01, 0x46, 0xf4, 0x31, 0xfa, - 0xf4, 0x41, 0x4d, 0x78, 0x83, 0x06, 0x27, 0x00, 0x4f, 0x91, 0x6f, 0x80, - 0xf5, 0x01, 0x03, 0x3a, 0x0d, 0x06, 0x44, 0x2f, 0x03, 0x21, 0x21, 0x40, - 0x45, 0x53, 0x3c, 0xde, 0xf4, 0x81, 0x06, 0x45, 0x57, 0x87, 0x15, 0x23, - 0x40, 0x4a, 0x37, 0xa4, 0x7c, 0xf5, 0x41, 0x52, 0xac, 0x4f, 0x75, 0xf3, - 0x01, 0x43, 0xf3, 0x43, 0xd6, 0xfa, 0x01, 0xb2, 0x01, 0xff, 0x4d, 0xa5, - 0x7e, 0xc6, 0xf4, 0x01, 0x05, 0xd7, 0x0c, 0x01, 0xff, 0x57, 0xff, 0x2c, - 0xba, 0x27, 0x00, 0x4f, 0x4e, 0x1c, 0x3b, 0x27, 0x40, 0x5a, 0xa6, 0x1e, - 0xd3, 0xf3, 0x01, 0x42, 0xe8, 0x04, 0x2e, 0xf3, 0x01, 0xa7, 0xe9, 0x33, - 0x02, 0xc6, 0x03, 0xa3, 0x28, 0xab, 0xf7, 0x24, 0x09, 0x78, 0xa5, 0xe6, - 0x24, 0xad, 0xa9, 0x1e, 0xae, 0x1c, 0x03, 0x3e, 0x30, 0x0c, 0x44, 0x92, - 0xef, 0x49, 0x26, 0x00, 0x42, 0x93, 0x0c, 0x95, 0xf6, 0x41, 0x49, 0xcc, - 0xb4, 0xad, 0xf5, 0x01, 0x45, 0xa3, 0xd4, 0x07, 0x27, 0x40, 0x4a, 0x13, - 0xa5, 0x8b, 0xf3, 0x01, 0xa7, 0x01, 0xff, 0x45, 0x09, 0xe3, 0x4a, 0xf3, - 0x01, 0x03, 0x0c, 0x4e, 0xff, 0x19, 0x03, 0x1c, 0x0d, 0x01, 0xff, 0x0a, - 0x99, 0xa6, 0x0f, 0xa9, 0x01, 0xff, 0x49, 0x1c, 0x27, 0x03, 0xd8, 0x00, - 0x4d, 0xb7, 0x1f, 0xe0, 0x6f, 0x41, 0x90, 0xbd, 0x16, 0x91, 0x8f, 0x13, - 0x92, 0xe1, 0x0f, 0x93, 0xb3, 0x0c, 0x94, 0x85, 0x09, 0x95, 0xd7, 0x05, - 0x96, 0xa9, 0x02, 0x97, 0x01, 0xff, 0x90, 0xfb, 0x01, 0x91, 0xd0, 0x01, - 0x92, 0xa5, 0x01, 0x93, 0x7b, 0x94, 0x51, 0x95, 0x27, 0x96, 0x01, 0xff, - 0xd0, 0xf7, 0x8a, 0x01, 0xd1, 0xf8, 0x8a, 0x01, 0xd2, 0xf9, 0x8a, 0x01, - 0xd3, 0xfa, 0x8a, 0x01, 0xd4, 0xfb, 0x8a, 0x01, 0xd5, 0xfc, 0x8a, 0x01, - 0xd6, 0xfd, 0x8a, 0x01, 0xd7, 0xfe, 0x8a, 0x01, 0xd8, 0xff, 0x8a, 0x41, - 0xd0, 0xed, 0x8a, 0x01, 0xd1, 0xee, 0x8a, 0x01, 0xd2, 0xef, 0x8a, 0x01, - 0xd3, 0xf0, 0x8a, 0x01, 0xd4, 0xf1, 0x8a, 0x01, 0xd5, 0xf2, 0x8a, 0x01, - 0xd6, 0xf3, 0x8a, 0x01, 0xd7, 0xf4, 0x8a, 0x01, 0xd8, 0xf5, 0x8a, 0x01, - 0xd9, 0xf6, 0x8a, 0x41, 0xd0, 0xe3, 0x8a, 0x01, 0xd1, 0xe4, 0x8a, 0x01, - 0xd2, 0xe5, 0x8a, 0x01, 0xd3, 0xe6, 0x8a, 0x01, 0xd4, 0xe7, 0x8a, 0x01, - 0xd5, 0xe8, 0x8a, 0x01, 0xd6, 0xe9, 0x8a, 0x01, 0xd7, 0xea, 0x8a, 0x01, - 0xd8, 0xeb, 0x8a, 0x01, 0xd9, 0xec, 0x8a, 0x41, 0xd0, 0xd9, 0x8a, 0x01, - 0xd1, 0xda, 0x8a, 0x01, 0xd2, 0xdb, 0x8a, 0x01, 0xd3, 0xdc, 0x8a, 0x01, - 0xd4, 0xdd, 0x8a, 0x01, 0xd5, 0xde, 0x8a, 0x01, 0xd6, 0xdf, 0x8a, 0x01, - 0xd7, 0xe0, 0x8a, 0x01, 0xd8, 0xe1, 0x8a, 0x01, 0xd9, 0xe2, 0x8a, 0x41, - 0xd0, 0xcf, 0x8a, 0x01, 0xd1, 0xd0, 0x8a, 0x01, 0xd2, 0xd1, 0x8a, 0x01, - 0xd3, 0xd2, 0x8a, 0x01, 0xd4, 0xd3, 0x8a, 0x01, 0xd5, 0xd4, 0x8a, 0x01, - 0xd6, 0xd5, 0x8a, 0x01, 0xd7, 0xd6, 0x8a, 0x01, 0xd8, 0xd7, 0x8a, 0x01, - 0xd9, 0xd8, 0x8a, 0x41, 0xd0, 0xc5, 0x8a, 0x01, 0xd1, 0xc6, 0x8a, 0x01, - 0xd2, 0xc7, 0x8a, 0x01, 0xd3, 0xc8, 0x8a, 0x01, 0xd4, 0xc9, 0x8a, 0x01, - 0xd5, 0xca, 0x8a, 0x01, 0xd6, 0xcb, 0x8a, 0x01, 0xd7, 0xcc, 0x8a, 0x01, - 0xd8, 0xcd, 0x8a, 0x01, 0xd9, 0xce, 0x8a, 0x41, 0xd0, 0xbb, 0x8a, 0x01, - 0xd1, 0xbc, 0x8a, 0x01, 0xd2, 0xbd, 0x8a, 0x01, 0xd3, 0xbe, 0x8a, 0x01, - 0xd4, 0xbf, 0x8a, 0x01, 0xd5, 0xc0, 0x8a, 0x01, 0xd6, 0xc1, 0x8a, 0x01, - 0xd7, 0xc2, 0x8a, 0x01, 0xd8, 0xc3, 0x8a, 0x01, 0xd9, 0xc4, 0x8a, 0x41, - 0x90, 0x80, 0x03, 0x91, 0xd5, 0x02, 0x92, 0xaa, 0x02, 0x93, 0xff, 0x01, - 0x94, 0xd4, 0x01, 0x95, 0xa9, 0x01, 0x96, 0x7f, 0x97, 0x55, 0x98, 0x2b, - 0x99, 0x01, 0xff, 0xd0, 0xb1, 0x8a, 0x01, 0xd1, 0xb2, 0x8a, 0x01, 0xd2, - 0xb3, 0x8a, 0x01, 0xd3, 0xb4, 0x8a, 0x01, 0xd4, 0xb5, 0x8a, 0x01, 0xd5, - 0xb6, 0x8a, 0x01, 0xd6, 0xb7, 0x8a, 0x01, 0xd7, 0xb8, 0x8a, 0x01, 0xd8, - 0xb9, 0x8a, 0x01, 0xd9, 0xba, 0x8a, 0x41, 0xd0, 0xa7, 0x8a, 0x01, 0xd1, - 0xa8, 0x8a, 0x01, 0xd2, 0xa9, 0x8a, 0x01, 0xd3, 0xaa, 0x8a, 0x01, 0xd4, - 0xab, 0x8a, 0x01, 0xd5, 0xac, 0x8a, 0x01, 0xd6, 0xad, 0x8a, 0x01, 0xd7, - 0xae, 0x8a, 0x01, 0xd8, 0xaf, 0x8a, 0x01, 0xd9, 0xb0, 0x8a, 0x41, 0xd0, - 0x9d, 0x8a, 0x01, 0xd1, 0x9e, 0x8a, 0x01, 0xd2, 0x9f, 0x8a, 0x01, 0xd3, - 0xa0, 0x8a, 0x01, 0xd4, 0xa1, 0x8a, 0x01, 0xd5, 0xa2, 0x8a, 0x01, 0xd6, - 0xa3, 0x8a, 0x01, 0xd7, 0xa4, 0x8a, 0x01, 0xd8, 0xa5, 0x8a, 0x01, 0xd9, - 0xa6, 0x8a, 0x41, 0xd0, 0x93, 0x8a, 0x01, 0xd1, 0x94, 0x8a, 0x01, 0xd2, - 0x95, 0x8a, 0x01, 0xd3, 0x96, 0x8a, 0x01, 0xd4, 0x97, 0x8a, 0x01, 0xd5, - 0x98, 0x8a, 0x01, 0xd6, 0x99, 0x8a, 0x01, 0xd7, 0x9a, 0x8a, 0x01, 0xd8, - 0x9b, 0x8a, 0x01, 0xd9, 0x9c, 0x8a, 0x41, 0xd0, 0x89, 0x8a, 0x01, 0xd1, - 0x8a, 0x8a, 0x01, 0xd2, 0x8b, 0x8a, 0x01, 0xd3, 0x8c, 0x8a, 0x01, 0xd4, - 0x8d, 0x8a, 0x01, 0xd5, 0x8e, 0x8a, 0x01, 0xd6, 0x8f, 0x8a, 0x01, 0xd7, - 0x90, 0x8a, 0x01, 0xd8, 0x91, 0x8a, 0x01, 0xd9, 0x92, 0x8a, 0x41, 0xd0, - 0x7f, 0x8a, 0x01, 0xd1, 0x80, 0x8a, 0x01, 0xd2, 0x81, 0x8a, 0x01, 0xd3, - 0x82, 0x8a, 0x01, 0xd4, 0x83, 0x8a, 0x01, 0xd5, 0x84, 0x8a, 0x01, 0xd6, - 0x85, 0x8a, 0x01, 0xd7, 0x86, 0x8a, 0x01, 0xd8, 0x87, 0x8a, 0x01, 0xd9, - 0x88, 0x8a, 0x41, 0xd0, 0x75, 0x8a, 0x01, 0xd1, 0x76, 0x8a, 0x01, 0xd2, - 0x77, 0x8a, 0x01, 0xd3, 0x78, 0x8a, 0x01, 0xd4, 0x79, 0x8a, 0x01, 0xd5, - 0x7a, 0x8a, 0x01, 0xd6, 0x7b, 0x8a, 0x01, 0xd7, 0x7c, 0x8a, 0x01, 0xd8, - 0x7d, 0x8a, 0x01, 0xd9, 0x7e, 0x8a, 0x41, 0xd0, 0x6b, 0x8a, 0x01, 0xd1, - 0x6c, 0x8a, 0x01, 0xd2, 0x6d, 0x8a, 0x01, 0xd3, 0x6e, 0x8a, 0x01, 0xd4, - 0x6f, 0x8a, 0x01, 0xd5, 0x70, 0x8a, 0x01, 0xd6, 0x71, 0x8a, 0x01, 0xd7, - 0x72, 0x8a, 0x01, 0xd8, 0x73, 0x8a, 0x01, 0xd9, 0x74, 0x8a, 0x41, 0xd0, - 0x61, 0x8a, 0x01, 0xd1, 0x62, 0x8a, 0x01, 0xd2, 0x63, 0x8a, 0x01, 0xd3, - 0x64, 0x8a, 0x01, 0xd4, 0x65, 0x8a, 0x01, 0xd5, 0x66, 0x8a, 0x01, 0xd6, - 0x67, 0x8a, 0x01, 0xd7, 0x68, 0x8a, 0x01, 0xd8, 0x69, 0x8a, 0x01, 0xd9, - 0x6a, 0x8a, 0x41, 0xd0, 0x57, 0x8a, 0x01, 0xd1, 0x58, 0x8a, 0x01, 0xd2, - 0x59, 0x8a, 0x01, 0xd3, 0x5a, 0x8a, 0x01, 0xd4, 0x5b, 0x8a, 0x01, 0xd5, - 0x5c, 0x8a, 0x01, 0xd6, 0x5d, 0x8a, 0x01, 0xd7, 0x5e, 0x8a, 0x01, 0xd8, - 0x5f, 0x8a, 0x01, 0xd9, 0x60, 0x8a, 0x41, 0x90, 0x80, 0x03, 0x91, 0xd5, - 0x02, 0x92, 0xaa, 0x02, 0x93, 0xff, 0x01, 0x94, 0xd4, 0x01, 0x95, 0xa9, - 0x01, 0x96, 0x7f, 0x97, 0x55, 0x98, 0x2b, 0x99, 0x01, 0xff, 0xd0, 0x4d, - 0x8a, 0x01, 0xd1, 0x4e, 0x8a, 0x01, 0xd2, 0x4f, 0x8a, 0x01, 0xd3, 0x50, - 0x8a, 0x01, 0xd4, 0x51, 0x8a, 0x01, 0xd5, 0x52, 0x8a, 0x01, 0xd6, 0x53, - 0x8a, 0x01, 0xd7, 0x54, 0x8a, 0x01, 0xd8, 0x55, 0x8a, 0x01, 0xd9, 0x56, - 0x8a, 0x41, 0xd0, 0x43, 0x8a, 0x01, 0xd1, 0x44, 0x8a, 0x01, 0xd2, 0x45, - 0x8a, 0x01, 0xd3, 0x46, 0x8a, 0x01, 0xd4, 0x47, 0x8a, 0x01, 0xd5, 0x48, - 0x8a, 0x01, 0xd6, 0x49, 0x8a, 0x01, 0xd7, 0x4a, 0x8a, 0x01, 0xd8, 0x4b, - 0x8a, 0x01, 0xd9, 0x4c, 0x8a, 0x41, 0xd0, 0x39, 0x8a, 0x01, 0xd1, 0x3a, - 0x8a, 0x01, 0xd2, 0x3b, 0x8a, 0x01, 0xd3, 0x3c, 0x8a, 0x01, 0xd4, 0x3d, - 0x8a, 0x01, 0xd5, 0x3e, 0x8a, 0x01, 0xd6, 0x3f, 0x8a, 0x01, 0xd7, 0x40, - 0x8a, 0x01, 0xd8, 0x41, 0x8a, 0x01, 0xd9, 0x42, 0x8a, 0x41, 0xd0, 0x2f, - 0x8a, 0x01, 0xd1, 0x30, 0x8a, 0x01, 0xd2, 0x31, 0x8a, 0x01, 0xd3, 0x32, - 0x8a, 0x01, 0xd4, 0x33, 0x8a, 0x01, 0xd5, 0x34, 0x8a, 0x01, 0xd6, 0x35, - 0x8a, 0x01, 0xd7, 0x36, 0x8a, 0x01, 0xd8, 0x37, 0x8a, 0x01, 0xd9, 0x38, - 0x8a, 0x41, 0xd0, 0x25, 0x8a, 0x01, 0xd1, 0x26, 0x8a, 0x01, 0xd2, 0x27, - 0x8a, 0x01, 0xd3, 0x28, 0x8a, 0x01, 0xd4, 0x29, 0x8a, 0x01, 0xd5, 0x2a, - 0x8a, 0x01, 0xd6, 0x2b, 0x8a, 0x01, 0xd7, 0x2c, 0x8a, 0x01, 0xd8, 0x2d, - 0x8a, 0x01, 0xd9, 0x2e, 0x8a, 0x41, 0xd0, 0x1b, 0x8a, 0x01, 0xd1, 0x1c, - 0x8a, 0x01, 0xd2, 0x1d, 0x8a, 0x01, 0xd3, 0x1e, 0x8a, 0x01, 0xd4, 0x1f, - 0x8a, 0x01, 0xd5, 0x20, 0x8a, 0x01, 0xd6, 0x21, 0x8a, 0x01, 0xd7, 0x22, - 0x8a, 0x01, 0xd8, 0x23, 0x8a, 0x01, 0xd9, 0x24, 0x8a, 0x41, 0xd0, 0x11, - 0x8a, 0x01, 0xd1, 0x12, 0x8a, 0x01, 0xd2, 0x13, 0x8a, 0x01, 0xd3, 0x14, - 0x8a, 0x01, 0xd4, 0x15, 0x8a, 0x01, 0xd5, 0x16, 0x8a, 0x01, 0xd6, 0x17, - 0x8a, 0x01, 0xd7, 0x18, 0x8a, 0x01, 0xd8, 0x19, 0x8a, 0x01, 0xd9, 0x1a, - 0x8a, 0x41, 0xd0, 0x07, 0x8a, 0x01, 0xd1, 0x08, 0x8a, 0x01, 0xd2, 0x09, - 0x8a, 0x01, 0xd3, 0x0a, 0x8a, 0x01, 0xd4, 0x0b, 0x8a, 0x01, 0xd5, 0x0c, - 0x8a, 0x01, 0xd6, 0x0d, 0x8a, 0x01, 0xd7, 0x0e, 0x8a, 0x01, 0xd8, 0x0f, - 0x8a, 0x01, 0xd9, 0x10, 0x8a, 0x41, 0xd0, 0xfd, 0x89, 0x01, 0xd1, 0xfe, - 0x89, 0x01, 0xd2, 0xff, 0x89, 0x01, 0xd3, 0x00, 0x8a, 0x01, 0xd4, 0x01, - 0x8a, 0x01, 0xd5, 0x02, 0x8a, 0x01, 0xd6, 0x03, 0x8a, 0x01, 0xd7, 0x04, - 0x8a, 0x01, 0xd8, 0x05, 0x8a, 0x01, 0xd9, 0x06, 0x8a, 0x41, 0xd0, 0xf3, - 0x89, 0x01, 0xd1, 0xf4, 0x89, 0x01, 0xd2, 0xf5, 0x89, 0x01, 0xd3, 0xf6, - 0x89, 0x01, 0xd4, 0xf7, 0x89, 0x01, 0xd5, 0xf8, 0x89, 0x01, 0xd6, 0xf9, - 0x89, 0x01, 0xd7, 0xfa, 0x89, 0x01, 0xd8, 0xfb, 0x89, 0x01, 0xd9, 0xfc, - 0x89, 0x41, 0x90, 0x80, 0x03, 0x91, 0xd5, 0x02, 0x92, 0xaa, 0x02, 0x93, - 0xff, 0x01, 0x94, 0xd4, 0x01, 0x95, 0xa9, 0x01, 0x96, 0x7f, 0x97, 0x55, - 0x98, 0x2b, 0x99, 0x01, 0xff, 0xd0, 0xe9, 0x89, 0x01, 0xd1, 0xea, 0x89, - 0x01, 0xd2, 0xeb, 0x89, 0x01, 0xd3, 0xec, 0x89, 0x01, 0xd4, 0xed, 0x89, - 0x01, 0xd5, 0xee, 0x89, 0x01, 0xd6, 0xef, 0x89, 0x01, 0xd7, 0xf0, 0x89, - 0x01, 0xd8, 0xf1, 0x89, 0x01, 0xd9, 0xf2, 0x89, 0x41, 0xd0, 0xdf, 0x89, - 0x01, 0xd1, 0xe0, 0x89, 0x01, 0xd2, 0xe1, 0x89, 0x01, 0xd3, 0xe2, 0x89, - 0x01, 0xd4, 0xe3, 0x89, 0x01, 0xd5, 0xe4, 0x89, 0x01, 0xd6, 0xe5, 0x89, - 0x01, 0xd7, 0xe6, 0x89, 0x01, 0xd8, 0xe7, 0x89, 0x01, 0xd9, 0xe8, 0x89, - 0x41, 0xd0, 0xd5, 0x89, 0x01, 0xd1, 0xd6, 0x89, 0x01, 0xd2, 0xd7, 0x89, - 0x01, 0xd3, 0xd8, 0x89, 0x01, 0xd4, 0xd9, 0x89, 0x01, 0xd5, 0xda, 0x89, - 0x01, 0xd6, 0xdb, 0x89, 0x01, 0xd7, 0xdc, 0x89, 0x01, 0xd8, 0xdd, 0x89, - 0x01, 0xd9, 0xde, 0x89, 0x41, 0xd0, 0xcb, 0x89, 0x01, 0xd1, 0xcc, 0x89, - 0x01, 0xd2, 0xcd, 0x89, 0x01, 0xd3, 0xce, 0x89, 0x01, 0xd4, 0xcf, 0x89, - 0x01, 0xd5, 0xd0, 0x89, 0x01, 0xd6, 0xd1, 0x89, 0x01, 0xd7, 0xd2, 0x89, - 0x01, 0xd8, 0xd3, 0x89, 0x01, 0xd9, 0xd4, 0x89, 0x41, 0xd0, 0xc1, 0x89, - 0x01, 0xd1, 0xc2, 0x89, 0x01, 0xd2, 0xc3, 0x89, 0x01, 0xd3, 0xc4, 0x89, - 0x01, 0xd4, 0xc5, 0x89, 0x01, 0xd5, 0xc6, 0x89, 0x01, 0xd6, 0xc7, 0x89, - 0x01, 0xd7, 0xc8, 0x89, 0x01, 0xd8, 0xc9, 0x89, 0x01, 0xd9, 0xca, 0x89, - 0x41, 0xd0, 0xb7, 0x89, 0x01, 0xd1, 0xb8, 0x89, 0x01, 0xd2, 0xb9, 0x89, - 0x01, 0xd3, 0xba, 0x89, 0x01, 0xd4, 0xbb, 0x89, 0x01, 0xd5, 0xbc, 0x89, - 0x01, 0xd6, 0xbd, 0x89, 0x01, 0xd7, 0xbe, 0x89, 0x01, 0xd8, 0xbf, 0x89, - 0x01, 0xd9, 0xc0, 0x89, 0x41, 0xd0, 0xad, 0x89, 0x01, 0xd1, 0xae, 0x89, - 0x01, 0xd2, 0xaf, 0x89, 0x01, 0xd3, 0xb0, 0x89, 0x01, 0xd4, 0xb1, 0x89, - 0x01, 0xd5, 0xb2, 0x89, 0x01, 0xd6, 0xb3, 0x89, 0x01, 0xd7, 0xb4, 0x89, - 0x01, 0xd8, 0xb5, 0x89, 0x01, 0xd9, 0xb6, 0x89, 0x41, 0xd0, 0xa3, 0x89, - 0x01, 0xd1, 0xa4, 0x89, 0x01, 0xd2, 0xa5, 0x89, 0x01, 0xd3, 0xa6, 0x89, - 0x01, 0xd4, 0xa7, 0x89, 0x01, 0xd5, 0xa8, 0x89, 0x01, 0xd6, 0xa9, 0x89, - 0x01, 0xd7, 0xaa, 0x89, 0x01, 0xd8, 0xab, 0x89, 0x01, 0xd9, 0xac, 0x89, - 0x41, 0xd0, 0x99, 0x89, 0x01, 0xd1, 0x9a, 0x89, 0x01, 0xd2, 0x9b, 0x89, - 0x01, 0xd3, 0x9c, 0x89, 0x01, 0xd4, 0x9d, 0x89, 0x01, 0xd5, 0x9e, 0x89, - 0x01, 0xd6, 0x9f, 0x89, 0x01, 0xd7, 0xa0, 0x89, 0x01, 0xd8, 0xa1, 0x89, - 0x01, 0xd9, 0xa2, 0x89, 0x41, 0xd0, 0x8f, 0x89, 0x01, 0xd1, 0x90, 0x89, - 0x01, 0xd2, 0x91, 0x89, 0x01, 0xd3, 0x92, 0x89, 0x01, 0xd4, 0x93, 0x89, - 0x01, 0xd5, 0x94, 0x89, 0x01, 0xd6, 0x95, 0x89, 0x01, 0xd7, 0x96, 0x89, - 0x01, 0xd8, 0x97, 0x89, 0x01, 0xd9, 0x98, 0x89, 0x41, 0x90, 0x80, 0x03, - 0x91, 0xd5, 0x02, 0x92, 0xaa, 0x02, 0x93, 0xff, 0x01, 0x94, 0xd4, 0x01, - 0x95, 0xa9, 0x01, 0x96, 0x7f, 0x97, 0x55, 0x98, 0x2b, 0x99, 0x01, 0xff, - 0xd0, 0x85, 0x89, 0x01, 0xd1, 0x86, 0x89, 0x01, 0xd2, 0x87, 0x89, 0x01, - 0xd3, 0x88, 0x89, 0x01, 0xd4, 0x89, 0x89, 0x01, 0xd5, 0x8a, 0x89, 0x01, - 0xd6, 0x8b, 0x89, 0x01, 0xd7, 0x8c, 0x89, 0x01, 0xd8, 0x8d, 0x89, 0x01, - 0xd9, 0x8e, 0x89, 0x41, 0xd0, 0x7b, 0x89, 0x01, 0xd1, 0x7c, 0x89, 0x01, - 0xd2, 0x7d, 0x89, 0x01, 0xd3, 0x7e, 0x89, 0x01, 0xd4, 0x7f, 0x89, 0x01, - 0xd5, 0x80, 0x89, 0x01, 0xd6, 0x81, 0x89, 0x01, 0xd7, 0x82, 0x89, 0x01, - 0xd8, 0x83, 0x89, 0x01, 0xd9, 0x84, 0x89, 0x41, 0xd0, 0x71, 0x89, 0x01, - 0xd1, 0x72, 0x89, 0x01, 0xd2, 0x73, 0x89, 0x01, 0xd3, 0x74, 0x89, 0x01, - 0xd4, 0x75, 0x89, 0x01, 0xd5, 0x76, 0x89, 0x01, 0xd6, 0x77, 0x89, 0x01, - 0xd7, 0x78, 0x89, 0x01, 0xd8, 0x79, 0x89, 0x01, 0xd9, 0x7a, 0x89, 0x41, - 0xd0, 0x67, 0x89, 0x01, 0xd1, 0x68, 0x89, 0x01, 0xd2, 0x69, 0x89, 0x01, - 0xd3, 0x6a, 0x89, 0x01, 0xd4, 0x6b, 0x89, 0x01, 0xd5, 0x6c, 0x89, 0x01, - 0xd6, 0x6d, 0x89, 0x01, 0xd7, 0x6e, 0x89, 0x01, 0xd8, 0x6f, 0x89, 0x01, - 0xd9, 0x70, 0x89, 0x41, 0xd0, 0x5d, 0x89, 0x01, 0xd1, 0x5e, 0x89, 0x01, - 0xd2, 0x5f, 0x89, 0x01, 0xd3, 0x60, 0x89, 0x01, 0xd4, 0x61, 0x89, 0x01, - 0xd5, 0x62, 0x89, 0x01, 0xd6, 0x63, 0x89, 0x01, 0xd7, 0x64, 0x89, 0x01, - 0xd8, 0x65, 0x89, 0x01, 0xd9, 0x66, 0x89, 0x41, 0xd0, 0x53, 0x89, 0x01, - 0xd1, 0x54, 0x89, 0x01, 0xd2, 0x55, 0x89, 0x01, 0xd3, 0x56, 0x89, 0x01, - 0xd4, 0x57, 0x89, 0x01, 0xd5, 0x58, 0x89, 0x01, 0xd6, 0x59, 0x89, 0x01, - 0xd7, 0x5a, 0x89, 0x01, 0xd8, 0x5b, 0x89, 0x01, 0xd9, 0x5c, 0x89, 0x41, - 0xd0, 0x49, 0x89, 0x01, 0xd1, 0x4a, 0x89, 0x01, 0xd2, 0x4b, 0x89, 0x01, - 0xd3, 0x4c, 0x89, 0x01, 0xd4, 0x4d, 0x89, 0x01, 0xd5, 0x4e, 0x89, 0x01, - 0xd6, 0x4f, 0x89, 0x01, 0xd7, 0x50, 0x89, 0x01, 0xd8, 0x51, 0x89, 0x01, - 0xd9, 0x52, 0x89, 0x41, 0xd0, 0x3f, 0x89, 0x01, 0xd1, 0x40, 0x89, 0x01, - 0xd2, 0x41, 0x89, 0x01, 0xd3, 0x42, 0x89, 0x01, 0xd4, 0x43, 0x89, 0x01, - 0xd5, 0x44, 0x89, 0x01, 0xd6, 0x45, 0x89, 0x01, 0xd7, 0x46, 0x89, 0x01, - 0xd8, 0x47, 0x89, 0x01, 0xd9, 0x48, 0x89, 0x41, 0xd0, 0x35, 0x89, 0x01, - 0xd1, 0x36, 0x89, 0x01, 0xd2, 0x37, 0x89, 0x01, 0xd3, 0x38, 0x89, 0x01, - 0xd4, 0x39, 0x89, 0x01, 0xd5, 0x3a, 0x89, 0x01, 0xd6, 0x3b, 0x89, 0x01, - 0xd7, 0x3c, 0x89, 0x01, 0xd8, 0x3d, 0x89, 0x01, 0xd9, 0x3e, 0x89, 0x41, - 0xd0, 0x2b, 0x89, 0x01, 0xd1, 0x2c, 0x89, 0x01, 0xd2, 0x2d, 0x89, 0x01, - 0xd3, 0x2e, 0x89, 0x01, 0xd4, 0x2f, 0x89, 0x01, 0xd5, 0x30, 0x89, 0x01, - 0xd6, 0x31, 0x89, 0x01, 0xd7, 0x32, 0x89, 0x01, 0xd8, 0x33, 0x89, 0x01, - 0xd9, 0x34, 0x89, 0x41, 0x90, 0x80, 0x03, 0x91, 0xd5, 0x02, 0x92, 0xaa, + 0x01, 0xff, 0x4b, 0x14, 0x95, 0x39, 0x2e, 0x00, 0x4e, 0x66, 0x73, 0xe6, + 0xcd, 0x41, 0x4c, 0xd7, 0x21, 0x5a, 0x2e, 0x00, 0x09, 0x5d, 0x63, 0x01, + 0xff, 0x44, 0x05, 0x44, 0x5c, 0xcc, 0x01, 0x0c, 0x7b, 0x96, 0x01, 0xff, + 0xd1, 0xe8, 0xcd, 0x01, 0xd2, 0xea, 0xcd, 0x41, 0x4c, 0xd7, 0x21, 0x59, + 0x2e, 0x00, 0x09, 0x5d, 0x63, 0x01, 0xff, 0x44, 0x05, 0x44, 0x5a, 0xcc, + 0x01, 0x0c, 0x7b, 0x96, 0x01, 0xff, 0xd1, 0xec, 0xcd, 0x01, 0xd2, 0xee, + 0xcd, 0x41, 0x14, 0xfc, 0x43, 0x11, 0x0f, 0x57, 0x63, 0x01, 0xff, 0x44, + 0x05, 0x44, 0x5b, 0xcc, 0x01, 0x45, 0x7b, 0x96, 0xf0, 0xcd, 0x41, 0xd1, + 0xf6, 0xcd, 0x01, 0xd2, 0xf7, 0xcd, 0x41, 0x53, 0x61, 0x10, 0x3a, 0x29, + 0x80, 0x06, 0x5a, 0x7c, 0x1f, 0x3c, 0x29, 0x40, 0x4a, 0x7d, 0xa6, 0x3d, + 0x29, 0x40, 0x44, 0x79, 0x85, 0xf0, 0xf9, 0x01, 0x42, 0x53, 0x00, 0xb7, + 0xf9, 0xc1, 0x00, 0x45, 0xcb, 0xb5, 0xa5, 0xfa, 0x41, 0x06, 0xef, 0x06, + 0xd1, 0x01, 0x07, 0xec, 0x05, 0x16, 0x05, 0x5a, 0x03, 0x06, 0x45, 0xd7, + 0xeb, 0xdb, 0x1d, 0x41, 0x46, 0x62, 0xdc, 0xda, 0x1d, 0x01, 0x44, 0x95, + 0xf2, 0xd9, 0x1d, 0x41, 0xe1, 0xb4, 0x1d, 0x81, 0xad, 0x01, 0xe2, 0xb8, + 0x1d, 0x81, 0xa3, 0x01, 0xe3, 0xc5, 0x1d, 0x81, 0x99, 0x01, 0xe4, 0xbd, + 0x1d, 0x81, 0x86, 0x01, 0xe5, 0xb1, 0x1d, 0x01, 0xe7, 0xcc, 0x1d, 0x81, + 0x79, 0xe8, 0xd5, 0x1d, 0x01, 0xe9, 0xb0, 0x1d, 0x01, 0xea, 0xc7, 0x1d, + 0x81, 0x68, 0xeb, 0xca, 0x1d, 0x81, 0x5f, 0xec, 0xd1, 0x1d, 0x01, 0xed, + 0xba, 0x1d, 0x01, 0xee, 0xbf, 0x1d, 0x81, 0x41, 0xef, 0xb3, 0x1d, 0x01, + 0xf0, 0xb6, 0x1d, 0x81, 0x34, 0xf2, 0xd0, 0x1d, 0x81, 0x26, 0xf3, 0xd4, + 0x1d, 0x01, 0xf4, 0xbb, 0x1d, 0x81, 0x10, 0xf5, 0xb2, 0x1d, 0x01, 0xf6, + 0xd2, 0x1d, 0x01, 0xf8, 0xd6, 0x1d, 0x01, 0xf9, 0xcf, 0x1d, 0x41, 0xe8, + 0xbc, 0x1d, 0x01, 0xf4, 0xc0, 0x1d, 0xc1, 0x00, 0xe8, 0xc1, 0x1d, 0x41, + 0xf2, 0xd7, 0x1d, 0xc1, 0x00, 0xe8, 0xd8, 0x1d, 0x41, 0xe8, 0xb7, 0x1d, + 0x41, 0xe7, 0xce, 0x1d, 0x01, 0xee, 0xc4, 0x1d, 0x81, 0x04, 0xf9, 0xc9, + 0x1d, 0x41, 0xf9, 0xd3, 0x1d, 0x41, 0xe8, 0xcb, 0x1d, 0x41, 0xe8, 0xc8, + 0x1d, 0x41, 0xe8, 0xcd, 0x1d, 0x41, 0xe4, 0xc2, 0x1d, 0x81, 0x04, 0xe8, + 0xbe, 0x1d, 0x41, 0xe8, 0xc3, 0x1d, 0x41, 0xe8, 0xc6, 0x1d, 0x41, 0xe8, + 0xb9, 0x1d, 0x41, 0xe1, 0xb5, 0x1d, 0x41, 0x45, 0x12, 0x0b, 0xe8, 0x1d, + 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xe9, 0x1d, 0x01, 0x43, 0x0e, 0x0b, + 0xe1, 0x1d, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xe0, 0x1d, + 0x41, 0x44, 0x25, 0x01, 0xe3, 0x1d, 0x01, 0x42, 0x15, 0x02, 0xe2, 0x1d, + 0x41, 0x44, 0xc9, 0x1d, 0xe7, 0x1d, 0x01, 0x42, 0x01, 0x26, 0xe6, 0x1d, + 0x41, 0x43, 0xd2, 0x05, 0xe5, 0x1d, 0x01, 0x43, 0xf6, 0x06, 0xe4, 0x1d, + 0x41, 0xe1, 0xc0, 0x05, 0x81, 0xa9, 0x02, 0x42, 0x16, 0x00, 0xc2, 0x05, + 0x01, 0xa3, 0x96, 0x02, 0xa4, 0x89, 0x02, 0xe5, 0xca, 0x05, 0x81, 0xff, + 0x01, 0x42, 0x0c, 0x08, 0xcb, 0x05, 0x01, 0xa7, 0xe6, 0x01, 0xa8, 0xd9, + 0x01, 0xe9, 0xd2, 0x05, 0x01, 0xaa, 0xca, 0x01, 0xab, 0xbd, 0x01, 0xac, + 0xb0, 0x01, 0xad, 0xa3, 0x01, 0xae, 0x78, 0xef, 0xda, 0x05, 0x81, 0x6f, + 0xb0, 0x63, 0x42, 0x43, 0x14, 0xdc, 0x05, 0x01, 0xb2, 0x51, 0xb3, 0x33, + 0xb4, 0x27, 0xf5, 0xe4, 0x05, 0x01, 0x42, 0xf5, 0x0a, 0xe5, 0x05, 0x01, + 0xb8, 0x11, 0xf9, 0xea, 0x05, 0x01, 0xba, 0x01, 0xff, 0xe1, 0xec, 0x05, + 0x01, 0x42, 0x22, 0x00, 0xed, 0x05, 0x41, 0xe1, 0xe6, 0x05, 0x01, 0x42, + 0x22, 0x00, 0xe8, 0x05, 0x41, 0xe1, 0xe2, 0x05, 0x01, 0x42, 0x22, 0x00, + 0xe3, 0x05, 0x41, 0xe1, 0xdf, 0x05, 0x01, 0xa8, 0x0c, 0x43, 0x51, 0x27, + 0xf0, 0x05, 0x01, 0x42, 0x12, 0x00, 0xef, 0x05, 0x41, 0xe1, 0xe0, 0x05, + 0x01, 0x42, 0x12, 0x00, 0xe1, 0x05, 0x41, 0xe1, 0xdd, 0x05, 0x01, 0x42, + 0x71, 0x00, 0xde, 0x05, 0x41, 0xe1, 0xdb, 0x05, 0x01, 0x42, 0x40, 0x06, + 0xf2, 0x05, 0x41, 0xef, 0xf3, 0x05, 0x41, 0xe1, 0xd8, 0x05, 0x01, 0x42, + 0xf0, 0x10, 0xc7, 0x05, 0x01, 0xa7, 0x13, 0x43, 0xda, 0xb5, 0xd9, 0x05, + 0x01, 0xb8, 0x01, 0xff, 0xe1, 0xe7, 0x05, 0x01, 0x42, 0x22, 0x00, 0xe9, + 0x05, 0x41, 0xe1, 0xcd, 0x05, 0x01, 0x42, 0x56, 0x19, 0xcf, 0x05, 0x41, + 0xe1, 0xd7, 0x05, 0x01, 0x42, 0x16, 0x00, 0xc3, 0x05, 0x41, 0xe1, 0xd5, + 0x05, 0x01, 0x42, 0x74, 0x00, 0xd6, 0x05, 0x41, 0xe1, 0xd4, 0x05, 0x01, + 0x42, 0x22, 0x00, 0xf1, 0x05, 0x41, 0xe1, 0xd3, 0x05, 0x01, 0xf9, 0xeb, + 0x05, 0x41, 0xe1, 0xd0, 0x05, 0x01, 0x42, 0x56, 0x19, 0xd1, 0x05, 0x41, + 0xe1, 0xcc, 0x05, 0x01, 0x42, 0x22, 0x00, 0xee, 0x05, 0x01, 0x42, 0x56, + 0x19, 0xce, 0x05, 0x41, 0xe9, 0xc9, 0x05, 0x41, 0xe1, 0xc6, 0x05, 0x01, + 0x42, 0x22, 0x00, 0xc8, 0x05, 0x41, 0xe1, 0xc4, 0x05, 0x01, 0x42, 0x22, + 0x00, 0xc5, 0x05, 0x41, 0xf3, 0xc1, 0x05, 0x41, 0x06, 0x1c, 0xda, 0xde, + 0x07, 0x44, 0x66, 0x09, 0xab, 0xf3, 0x01, 0x4f, 0x8a, 0x6c, 0xdd, 0x29, + 0x00, 0x07, 0x1d, 0xd1, 0xa6, 0x05, 0xa7, 0x90, 0x05, 0x43, 0x1b, 0x1e, + 0x7e, 0x00, 0x80, 0xbf, 0x04, 0x02, 0x2a, 0x02, 0xa3, 0x04, 0x42, 0x7d, + 0x1a, 0xfe, 0x29, 0x80, 0x95, 0x04, 0xb2, 0x01, 0xff, 0x47, 0x13, 0x15, + 0x2b, 0xf6, 0x01, 0x05, 0x2c, 0xe7, 0x11, 0x0b, 0xbc, 0xa0, 0x01, 0xff, + 0x4a, 0x7b, 0xa8, 0x52, 0x2e, 0x00, 0x42, 0xed, 0x05, 0x4a, 0x20, 0x40, + 0xa1, 0xe8, 0x03, 0x06, 0xef, 0x06, 0xa1, 0x03, 0x45, 0xbe, 0xe6, 0xc5, + 0x14, 0x01, 0x07, 0xec, 0x05, 0x85, 0x01, 0x42, 0x14, 0x05, 0xc7, 0x14, + 0x01, 0x05, 0x5a, 0x03, 0x50, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x3d, + 0xe5, 0xb9, 0x14, 0x01, 0xe9, 0xb1, 0x14, 0x81, 0x30, 0xef, 0xbc, 0x14, + 0x01, 0x06, 0x33, 0x07, 0x20, 0xf5, 0xb3, 0x14, 0x81, 0x17, 0x08, 0x22, + 0xc1, 0x01, 0xff, 0xec, 0xb7, 0x14, 0x81, 0x09, 0xf2, 0xb5, 0x14, 0xc1, + 0x00, 0xf2, 0xb6, 0x14, 0x41, 0xec, 0xb8, 0x14, 0x41, 0xf5, 0xb4, 0x14, + 0x41, 0xe5, 0xba, 0x14, 0x01, 0xef, 0xbd, 0x14, 0x41, 0xe9, 0xb2, 0x14, + 0x41, 0xe1, 0xb0, 0x14, 0x01, 0xe9, 0xbb, 0x14, 0x01, 0xf5, 0xbe, 0x14, + 0x41, 0xa1, 0x1d, 0x4b, 0xd7, 0x23, 0xbf, 0x14, 0x01, 0x45, 0x3f, 0x3f, + 0xc3, 0x14, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0xe5, 0x23, 0xc2, + 0x14, 0x01, 0x45, 0xec, 0x4b, 0xc1, 0x14, 0x41, 0x47, 0x3d, 0x16, 0xc0, + 0x14, 0x01, 0x47, 0xaf, 0x88, 0xc4, 0x14, 0x41, 0xe1, 0x81, 0x14, 0x81, + 0xff, 0x01, 0xa2, 0xf2, 0x01, 0xa3, 0xe5, 0x01, 0xa4, 0xcc, 0x01, 0xe5, + 0x8b, 0x14, 0x01, 0xa7, 0xbb, 0x01, 0x42, 0x22, 0x00, 0xaf, 0x14, 0x01, + 0xe9, 0x83, 0x14, 0x81, 0xab, 0x01, 0xaa, 0x9e, 0x01, 0xab, 0x91, 0x01, + 0x42, 0x74, 0x00, 0xaa, 0x14, 0x01, 0x42, 0x6c, 0x00, 0xa7, 0x14, 0x01, + 0xae, 0x6d, 0xef, 0x8d, 0x14, 0x01, 0xb0, 0x5d, 0x42, 0x71, 0x00, 0xa9, + 0x14, 0x01, 0xb3, 0x45, 0xb4, 0x2c, 0xf5, 0x85, 0x14, 0x81, 0x23, 0xb6, + 0x06, 0x42, 0xbc, 0x22, 0xa8, 0x14, 0x41, 0xe1, 0xab, 0x14, 0x01, 0x07, + 0x23, 0xc1, 0x01, 0xff, 0xec, 0x89, 0x14, 0x81, 0x09, 0xf2, 0x87, 0x14, + 0xc1, 0x00, 0xf2, 0x88, 0x14, 0x41, 0xec, 0x8a, 0x14, 0x41, 0xf5, 0x86, + 0x14, 0x41, 0xe1, 0x9e, 0x14, 0x01, 0x42, 0x22, 0x00, 0x9f, 0x14, 0x01, + 0xb4, 0x01, 0xff, 0xe1, 0x99, 0x14, 0x01, 0x42, 0x22, 0x00, 0x9a, 0x14, + 0x41, 0xe1, 0xae, 0x14, 0x01, 0x42, 0x22, 0x00, 0xac, 0x14, 0x01, 0x42, + 0x40, 0x06, 0xad, 0x14, 0x41, 0xe1, 0xa3, 0x14, 0x01, 0x42, 0x22, 0x00, + 0xa4, 0x14, 0x41, 0xe1, 0xa2, 0x14, 0x01, 0x42, 0x24, 0x02, 0x93, 0x14, + 0x01, 0x42, 0x2a, 0x05, 0x9d, 0x14, 0x01, 0x42, 0xbc, 0x22, 0x98, 0x14, + 0x41, 0xe1, 0x8f, 0x14, 0x01, 0x42, 0x22, 0x00, 0x90, 0x14, 0x41, 0xe1, + 0x96, 0x14, 0x01, 0x42, 0x22, 0x00, 0x97, 0x14, 0x41, 0xe9, 0x84, 0x14, + 0x41, 0xe1, 0x91, 0x14, 0x01, 0x42, 0x22, 0x00, 0x92, 0x14, 0x41, 0xe1, + 0xa0, 0x14, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa1, 0x14, 0x41, 0xe1, + 0x9b, 0x14, 0x01, 0x42, 0x22, 0x00, 0x9c, 0x14, 0x41, 0xe1, 0x94, 0x14, + 0x01, 0x42, 0x22, 0x00, 0x95, 0x14, 0x41, 0xe1, 0xa5, 0x14, 0x01, 0x42, + 0x22, 0x00, 0xa6, 0x14, 0x41, 0xe1, 0x82, 0x14, 0x01, 0xe9, 0x8c, 0x14, + 0x01, 0xf5, 0x8e, 0x14, 0x41, 0x45, 0x12, 0x0b, 0xd8, 0x14, 0x01, 0xa6, + 0x2e, 0x44, 0xcf, 0x2a, 0xd9, 0x14, 0x01, 0x43, 0x0e, 0x0b, 0xd1, 0x14, + 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xd0, 0x14, 0x41, 0x44, + 0x25, 0x01, 0xd3, 0x14, 0x01, 0x42, 0x15, 0x02, 0xd2, 0x14, 0x41, 0x44, + 0xc9, 0x1d, 0xd7, 0x14, 0x01, 0x42, 0x01, 0x26, 0xd6, 0x14, 0x41, 0x43, + 0xd2, 0x05, 0xd5, 0x14, 0x01, 0x43, 0xf6, 0x06, 0xd4, 0x14, 0x41, 0x50, + 0xdd, 0x57, 0xc6, 0x14, 0x01, 0x43, 0x5a, 0x87, 0x80, 0x14, 0x41, 0x62, + 0xf0, 0x0b, 0x3a, 0x0b, 0x41, 0x47, 0x23, 0x1b, 0xf2, 0x23, 0x00, 0x07, + 0xbc, 0x07, 0x01, 0xff, 0x4f, 0x78, 0x6f, 0xd4, 0x29, 0x00, 0x50, 0xb6, + 0x66, 0xd5, 0x29, 0x40, 0x80, 0x01, 0xff, 0x48, 0x7e, 0x1d, 0x3c, 0x22, + 0x80, 0x1b, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x03, 0x0c, 0x06, 0x4a, + 0x5f, 0xb0, 0x1b, 0x2e, 0x40, 0x45, 0x5c, 0x00, 0x1e, 0x2e, 0x00, 0x45, + 0x20, 0x07, 0x1f, 0x2e, 0x40, 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x11, + 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0x3a, 0x1e, 0x6a, 0x2a, 0x00, 0x4b, + 0x27, 0xa2, 0x6b, 0x2a, 0x40, 0x4f, 0x4d, 0x1a, 0x49, 0x2b, 0x00, 0x50, + 0xb3, 0x02, 0x72, 0x29, 0x40, 0x42, 0x33, 0x00, 0x05, 0xf4, 0x81, 0x06, + 0x57, 0xcb, 0x2e, 0x45, 0x27, 0x40, 0x45, 0x0b, 0x08, 0x2f, 0xf4, 0x41, + 0x50, 0x96, 0x61, 0x7f, 0x2d, 0x00, 0x07, 0xec, 0x05, 0x0c, 0x62, 0x78, + 0x0c, 0x6f, 0x2d, 0x00, 0x4e, 0xff, 0x7b, 0x70, 0x2d, 0x40, 0xa1, 0x82, + 0x02, 0x11, 0x97, 0x58, 0xf5, 0x01, 0xb4, 0xc0, 0x01, 0xb9, 0x01, 0xff, + 0xe1, 0x30, 0x2d, 0x80, 0x15, 0xe5, 0x66, 0x2d, 0x80, 0x0c, 0xe9, 0x49, + 0x2d, 0x00, 0xef, 0x67, 0x2d, 0x00, 0xf5, 0x53, 0x2d, 0x40, 0xf9, 0x3b, + 0x2d, 0x40, 0xe1, 0x44, 0x2d, 0x00, 0xe2, 0x31, 0x2d, 0x80, 0x95, 0x01, + 0x42, 0x6d, 0x14, 0x5e, 0x2d, 0x00, 0xe4, 0x37, 0x2d, 0x80, 0x7d, 0xe6, + 0x3c, 0x2d, 0x00, 0xe7, 0x33, 0x2d, 0x80, 0x6b, 0xe8, 0x40, 0x2d, 0x80, + 0x62, 0xea, 0x36, 0x2d, 0x00, 0xeb, 0x3d, 0x2d, 0x80, 0x50, 0xec, 0x4d, + 0x2d, 0x00, 0xed, 0x4e, 0x2d, 0x00, 0xee, 0x4f, 0x2d, 0x00, 0xf0, 0x52, + 0x2d, 0x00, 0xf1, 0x47, 0x2d, 0x00, 0xf2, 0x54, 0x2d, 0x80, 0x33, 0xf3, + 0x59, 0x2d, 0x80, 0x26, 0xf4, 0x5c, 0x2d, 0x80, 0x19, 0xf6, 0x60, 0x2d, + 0x00, 0xf7, 0x61, 0x2d, 0x00, 0xf9, 0x62, 0x2d, 0x00, 0xfa, 0x63, 0x2d, + 0xc0, 0x00, 0xe8, 0x4a, 0x2d, 0x00, 0xfa, 0x65, 0x2d, 0x40, 0xe8, 0x5d, + 0x2d, 0x00, 0xf4, 0x5f, 0x2d, 0x40, 0xe8, 0x5b, 0x2d, 0x00, 0xf3, 0x5a, + 0x2d, 0x40, 0xf2, 0x55, 0x2d, 0x40, 0xe8, 0x45, 0x2d, 0xc0, 0x00, 0xe8, + 0x3f, 0x2d, 0x40, 0xe8, 0x43, 0x2d, 0x40, 0xe8, 0x56, 0x2d, 0xc0, 0x00, + 0xe8, 0x34, 0x2d, 0x40, 0xe4, 0x39, 0x2d, 0x80, 0x04, 0xe8, 0x38, 0x2d, + 0x40, 0xe8, 0x3a, 0x2d, 0x40, 0xe8, 0x32, 0x2d, 0x40, 0x4d, 0xf1, 0x80, + 0x64, 0x2d, 0x00, 0x08, 0xe0, 0xcb, 0x01, 0xff, 0xa7, 0x1d, 0xe8, 0x42, + 0x2d, 0x00, 0xeb, 0x3e, 0x2d, 0x80, 0x10, 0x42, 0x1d, 0x01, 0x51, 0x2d, + 0x00, 0xf1, 0x48, 0x2d, 0x00, 0x42, 0x54, 0x28, 0x4c, 0x2d, 0x40, 0xe8, + 0x46, 0x2d, 0x40, 0xe8, 0x57, 0x2d, 0x00, 0xee, 0x50, 0x2d, 0x40, 0xe8, + 0x41, 0x2d, 0x00, 0xea, 0x35, 0x2d, 0x40, 0x4b, 0xa7, 0x9c, 0x4b, 0x2d, + 0x00, 0x48, 0xd8, 0xcc, 0x58, 0x2d, 0x40, 0x12, 0x53, 0x50, 0x9d, 0x0b, + 0x12, 0xad, 0x50, 0x80, 0x0b, 0x06, 0xef, 0x06, 0xf3, 0x09, 0x49, 0x1f, + 0xbb, 0xbe, 0x0f, 0x80, 0xe5, 0x09, 0xac, 0xbf, 0x07, 0x05, 0xb9, 0x00, + 0xf6, 0x04, 0xb3, 0x51, 0x0b, 0x40, 0x77, 0x01, 0xff, 0x42, 0x80, 0x12, + 0x71, 0x0f, 0x00, 0xe5, 0x7a, 0x0f, 0x80, 0x3d, 0xe9, 0x72, 0x0f, 0x80, + 0x34, 0xef, 0x7c, 0x0f, 0x80, 0x2b, 0x4a, 0x23, 0xb0, 0x80, 0x0f, 0x80, + 0x20, 0xf5, 0x74, 0x0f, 0x80, 0x17, 0x08, 0x22, 0xc1, 0x01, 0xff, 0xec, + 0x78, 0x0f, 0x80, 0x09, 0xf2, 0x76, 0x0f, 0xc0, 0x00, 0xf2, 0x77, 0x0f, + 0x40, 0xec, 0x79, 0x0f, 0x40, 0xf5, 0x75, 0x0f, 0x40, 0xe9, 0x81, 0x0f, + 0x40, 0xef, 0x7d, 0x0f, 0x40, 0xe9, 0x73, 0x0f, 0x40, 0xe5, 0x7b, 0x0f, + 0x40, 0x04, 0x5b, 0x03, 0xfd, 0x02, 0x09, 0xd6, 0x67, 0x4b, 0xb9, 0x01, + 0xff, 0x49, 0x9d, 0xbb, 0x00, 0x0f, 0x00, 0x05, 0x61, 0x16, 0x01, 0xff, + 0x47, 0x75, 0xd0, 0xc4, 0x0f, 0x00, 0x46, 0x6c, 0xde, 0xc9, 0x0f, 0x80, + 0x1b, 0xb0, 0x0d, 0x47, 0x3e, 0xd5, 0xc5, 0x0f, 0xc0, 0x00, 0x4a, 0x19, + 0xa6, 0xc7, 0x0f, 0x40, 0x49, 0xac, 0xb5, 0xc6, 0x0f, 0x00, 0x46, 0xa4, + 0xdc, 0xc8, 0x0f, 0x40, 0x80, 0x01, 0xff, 0x4b, 0xd1, 0x99, 0xcc, 0x0f, + 0x00, 0x4b, 0x91, 0x9c, 0xcb, 0x0f, 0x00, 0x4b, 0x6f, 0xa0, 0xca, 0x0f, + 0x40, 0x07, 0xec, 0x05, 0x17, 0x05, 0x5a, 0x03, 0x01, 0xff, 0x51, 0x3f, + 0x5b, 0x8f, 0x0f, 0x00, 0x4b, 0x54, 0x9e, 0x8d, 0x0f, 0x00, 0x48, 0x48, + 0x5b, 0x8e, 0x0f, 0x40, 0x42, 0xcf, 0x25, 0xb0, 0x0f, 0x00, 0xe1, 0xb8, + 0x0f, 0x00, 0xa2, 0xfc, 0x01, 0xa3, 0xef, 0x01, 0xa4, 0xc9, 0x01, 0x0b, + 0xf9, 0x82, 0xb2, 0x01, 0xa7, 0xa5, 0x01, 0x42, 0x22, 0x00, 0xb7, 0x0f, + 0x00, 0x42, 0x56, 0x19, 0x97, 0x0f, 0x00, 0xab, 0x86, 0x01, 0x42, 0x74, + 0x00, 0xb3, 0x0f, 0x00, 0x42, 0x6c, 0x00, 0xa8, 0x0f, 0x00, 0xae, 0x62, + 0xb0, 0x56, 0x42, 0x71, 0x00, 0xb2, 0x0f, 0x00, 0xb3, 0x3e, 0xb4, 0x19, + 0x42, 0xa9, 0x01, 0xad, 0x0f, 0x00, 0x42, 0xbc, 0x22, 0xb1, 0x0f, 0x00, + 0xba, 0x01, 0xff, 0xe1, 0xaf, 0x0f, 0x00, 0x42, 0x22, 0x00, 0xae, 0x0f, + 0x40, 0xe1, 0x9f, 0x0f, 0x00, 0x42, 0x22, 0x00, 0xa0, 0x0f, 0x00, 0xb3, + 0x0d, 0xb4, 0x01, 0xff, 0xe1, 0x9a, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x9b, + 0x0f, 0x40, 0xe1, 0xa9, 0x0f, 0x00, 0x42, 0x22, 0x00, 0xaa, 0x0f, 0x40, + 0xe1, 0xb6, 0x0f, 0x00, 0x42, 0x22, 0x00, 0xb4, 0x0f, 0x00, 0x42, 0x40, + 0x06, 0xb5, 0x0f, 0x40, 0xe1, 0xa4, 0x0f, 0x00, 0x42, 0x22, 0x00, 0xa5, + 0x0f, 0x40, 0xe1, 0xa3, 0x0f, 0x00, 0x42, 0x24, 0x02, 0x94, 0x0f, 0x00, + 0x42, 0x2a, 0x05, 0x9e, 0x0f, 0x00, 0x42, 0xbc, 0x22, 0x99, 0x0f, 0x40, + 0xe1, 0x90, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x91, 0x0f, 0x00, 0x43, 0xfb, + 0x20, 0xb9, 0x0f, 0x40, 0xe1, 0x92, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x93, + 0x0f, 0x40, 0x42, 0x71, 0x00, 0xbc, 0x0f, 0x00, 0x42, 0xa9, 0x01, 0xba, + 0x0f, 0x00, 0x42, 0xbc, 0x22, 0xbb, 0x0f, 0x40, 0xe1, 0xa1, 0x0f, 0x00, + 0xa4, 0x13, 0x42, 0x22, 0x00, 0xa2, 0x0f, 0x00, 0xba, 0x01, 0xff, 0xe1, + 0xab, 0x0f, 0x00, 0x42, 0x22, 0x00, 0xac, 0x0f, 0x40, 0xe1, 0x9c, 0x0f, + 0x00, 0x42, 0x22, 0x00, 0x9d, 0x0f, 0x40, 0xe1, 0x95, 0x0f, 0x00, 0x42, + 0x22, 0x00, 0x96, 0x0f, 0x40, 0xe1, 0xa6, 0x0f, 0x00, 0x42, 0x22, 0x00, + 0xa7, 0x0f, 0x40, 0x04, 0x15, 0xf0, 0x90, 0x01, 0x51, 0x3f, 0x5b, 0x8c, + 0x0f, 0x00, 0x02, 0x61, 0x1f, 0x7a, 0xad, 0x6c, 0x4e, 0x23, 0x7a, 0x82, + 0x0f, 0x00, 0xb2, 0x17, 0x48, 0x10, 0xcb, 0x83, 0x0f, 0x00, 0x02, 0xbc, + 0x22, 0x01, 0xff, 0x48, 0xa8, 0xc8, 0x87, 0x0f, 0x00, 0x47, 0x71, 0xc3, + 0x3e, 0x0f, 0x40, 0x04, 0x80, 0xbe, 0x0c, 0x4d, 0xb3, 0x84, 0x7e, 0x0f, + 0x00, 0x48, 0xc0, 0x94, 0x7f, 0x0f, 0x40, 0x05, 0x97, 0xe5, 0x1f, 0x04, + 0x59, 0xf1, 0x01, 0xff, 0xa7, 0x06, 0x49, 0x7f, 0xbe, 0xce, 0x0f, 0x40, + 0x43, 0x0a, 0xf4, 0x1d, 0x0f, 0x00, 0x44, 0x6f, 0xa0, 0x1e, 0x0f, 0x00, + 0x43, 0x16, 0x56, 0xcf, 0x0f, 0x40, 0xa7, 0x06, 0x48, 0x40, 0xca, 0x1f, + 0x0f, 0x40, 0x43, 0x0a, 0xf4, 0x1a, 0x0f, 0x00, 0x44, 0x6f, 0xa0, 0x1b, + 0x0f, 0x00, 0x43, 0x16, 0x56, 0x1c, 0x0f, 0x40, 0x48, 0x70, 0xc3, 0x3f, + 0x0f, 0x00, 0x47, 0x49, 0x5b, 0x89, 0x0f, 0x40, 0x49, 0x56, 0x9e, 0x88, + 0x0f, 0x00, 0x47, 0xb7, 0xd1, 0x86, 0x0f, 0x40, 0x4b, 0xdc, 0x99, 0x8a, + 0x0f, 0x00, 0x4b, 0x67, 0x9f, 0x8b, 0x0f, 0x40, 0x0c, 0x4f, 0x8c, 0xb3, + 0x02, 0xa2, 0x88, 0x02, 0xa3, 0xd4, 0x01, 0x55, 0x1f, 0x3a, 0x0c, 0x0f, + 0x00, 0xa7, 0x95, 0x01, 0x47, 0x71, 0xd1, 0x84, 0x0f, 0x00, 0x02, 0x9e, + 0x01, 0x75, 0x53, 0xd4, 0x4a, 0xd9, 0x0f, 0x00, 0x56, 0xa5, 0x35, 0xd1, + 0x0f, 0x00, 0xae, 0x3f, 0x46, 0xfc, 0xde, 0x85, 0x0f, 0x00, 0xb2, 0x2b, + 0xb3, 0x1d, 0xb4, 0x06, 0x55, 0x5f, 0x3f, 0x07, 0x0f, 0x40, 0x53, 0x63, + 0x4c, 0xda, 0x0f, 0x00, 0xb3, 0x01, 0xff, 0x47, 0x76, 0xce, 0x39, 0x0f, + 0x00, 0x48, 0x69, 0x3f, 0x0f, 0x0f, 0x40, 0x49, 0xde, 0xb6, 0x08, 0x0f, + 0x00, 0x43, 0xa5, 0x02, 0x0d, 0x0f, 0x40, 0x4d, 0x6e, 0x83, 0x12, 0x0f, + 0x00, 0x53, 0x4f, 0x4a, 0x11, 0x0f, 0x40, 0x0a, 0xab, 0xaa, 0x18, 0x04, + 0x70, 0xa0, 0x01, 0xff, 0x44, 0xa4, 0x02, 0x0e, 0x0f, 0x00, 0x45, 0x29, + 0x3a, 0xd2, 0x0f, 0xc0, 0x00, 0x45, 0x4a, 0x04, 0x10, 0x0f, 0x40, 0x47, + 0x23, 0x7a, 0x35, 0x0f, 0x00, 0x4a, 0xeb, 0xb0, 0x37, 0x0f, 0x40, 0x06, + 0xba, 0x16, 0x06, 0x51, 0x4d, 0x5e, 0x0b, 0x0f, 0x40, 0x5b, 0x77, 0x1a, + 0xd3, 0x0f, 0x00, 0x4f, 0x83, 0x1a, 0x04, 0x0f, 0x40, 0x04, 0x08, 0x03, + 0x11, 0x0b, 0x2c, 0xa4, 0x01, 0xff, 0x42, 0xbb, 0x01, 0x3b, 0x0f, 0x00, + 0x42, 0x10, 0x00, 0x3a, 0x0f, 0x40, 0x45, 0x29, 0x3a, 0x14, 0x0f, 0x00, + 0x08, 0x83, 0x1a, 0x01, 0xff, 0x04, 0xd1, 0xec, 0x06, 0x4b, 0xdf, 0xa3, + 0x01, 0x0f, 0x40, 0x4d, 0x61, 0x83, 0x03, 0x0f, 0x00, 0x4c, 0xbf, 0x94, + 0x02, 0x0f, 0x40, 0x05, 0xe8, 0x99, 0x17, 0x46, 0x5c, 0xdc, 0x38, 0x0f, + 0x00, 0x07, 0x4f, 0x85, 0x01, 0xff, 0x5b, 0x92, 0x1a, 0xd4, 0x0f, 0x00, + 0x4f, 0x9e, 0x1a, 0x05, 0x0f, 0x40, 0x0c, 0xb3, 0x8b, 0x06, 0x54, 0x1c, + 0x47, 0x06, 0x0f, 0x40, 0x4c, 0x52, 0x7f, 0x36, 0x0f, 0x00, 0x4b, 0x5c, + 0x9f, 0x13, 0x0f, 0x40, 0x09, 0xf2, 0xba, 0x18, 0xb3, 0x01, 0xff, 0x49, + 0xec, 0xb7, 0x34, 0x0f, 0x00, 0xab, 0x01, 0xff, 0x54, 0x28, 0x40, 0xd0, + 0x0f, 0x00, 0x4a, 0xfd, 0xb2, 0x09, 0x0f, 0x40, 0x4c, 0xaf, 0x35, 0xd0, + 0x0f, 0x00, 0x47, 0x83, 0x1a, 0x0a, 0x0f, 0x40, 0x42, 0xbb, 0x01, 0x3d, + 0x0f, 0x00, 0x42, 0x10, 0x00, 0x3c, 0x0f, 0x40, 0x06, 0xed, 0x05, 0x11, + 0x0d, 0xbb, 0x86, 0x01, 0xff, 0x4a, 0x8f, 0xa8, 0x15, 0x0f, 0x00, 0x4a, + 0xf9, 0xac, 0x16, 0x0f, 0x40, 0x42, 0xcf, 0x25, 0x60, 0x0f, 0x00, 0xe1, + 0x68, 0x0f, 0x00, 0xa2, 0xf7, 0x01, 0xa3, 0xea, 0x01, 0xa4, 0xc4, 0x01, + 0x4d, 0xf9, 0x82, 0x6a, 0x0f, 0x00, 0xa7, 0xb1, 0x01, 0x42, 0x22, 0x00, + 0x67, 0x0f, 0x00, 0x42, 0x56, 0x19, 0x47, 0x0f, 0x00, 0xab, 0x8c, 0x01, + 0x42, 0x74, 0x00, 0x63, 0x0f, 0x00, 0x42, 0x6c, 0x00, 0x58, 0x0f, 0x00, + 0xae, 0x68, 0xb0, 0x5c, 0xb2, 0x50, 0xb3, 0x3e, 0xb4, 0x19, 0x42, 0xa9, + 0x01, 0x5d, 0x0f, 0x00, 0x42, 0xbc, 0x22, 0x61, 0x0f, 0x00, 0xba, 0x01, + 0xff, 0xe1, 0x5f, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x5e, 0x0f, 0x40, 0xe1, + 0x4f, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x50, 0x0f, 0x00, 0xb3, 0x0d, 0xb4, + 0x01, 0xff, 0xe1, 0x4a, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x4b, 0x0f, 0x40, + 0xe1, 0x59, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x5a, 0x0f, 0x40, 0xe1, 0x66, + 0x0f, 0x00, 0x42, 0x22, 0x00, 0x64, 0x0f, 0x00, 0x42, 0x40, 0x06, 0x65, + 0x0f, 0x40, 0xe1, 0x62, 0x0f, 0x00, 0x42, 0x71, 0x00, 0x6c, 0x0f, 0x40, + 0xe1, 0x54, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x55, 0x0f, 0x40, 0xe1, 0x53, + 0x0f, 0x00, 0x42, 0x24, 0x02, 0x44, 0x0f, 0x00, 0x42, 0x2a, 0x05, 0x4e, + 0x0f, 0x00, 0x42, 0xbc, 0x22, 0x49, 0x0f, 0x40, 0xe1, 0x40, 0x0f, 0x00, + 0x42, 0x22, 0x00, 0x41, 0x0f, 0x00, 0x42, 0x1b, 0x02, 0x6b, 0x0f, 0x00, + 0x43, 0xfb, 0x20, 0x69, 0x0f, 0x40, 0xe1, 0x42, 0x0f, 0x00, 0x42, 0x22, + 0x00, 0x43, 0x0f, 0x40, 0xe1, 0x51, 0x0f, 0x00, 0xa4, 0x13, 0x42, 0x22, + 0x00, 0x52, 0x0f, 0x00, 0xba, 0x01, 0xff, 0xe1, 0x5b, 0x0f, 0x00, 0x42, + 0x22, 0x00, 0x5c, 0x0f, 0x40, 0xe1, 0x4c, 0x0f, 0x00, 0x42, 0x22, 0x00, + 0x4d, 0x0f, 0x40, 0xe1, 0x45, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x46, 0x0f, + 0x40, 0xe1, 0x56, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x57, 0x0f, 0x40, 0x4d, + 0x51, 0x7f, 0xbf, 0x0f, 0x40, 0x45, 0x12, 0x0b, 0x28, 0x0f, 0x00, 0xa6, + 0x74, 0x05, 0x22, 0x00, 0x2e, 0x44, 0xcf, 0x2a, 0x29, 0x0f, 0x00, 0x43, + 0x0e, 0x0b, 0x21, 0x0f, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, + 0x20, 0x0f, 0x40, 0x44, 0x25, 0x01, 0x23, 0x0f, 0x00, 0x42, 0x15, 0x02, + 0x22, 0x0f, 0x40, 0x44, 0xc9, 0x1d, 0x27, 0x0f, 0x00, 0x42, 0x01, 0x26, + 0x26, 0x0f, 0x40, 0x45, 0x12, 0x0b, 0x31, 0x0f, 0x00, 0xa6, 0x2e, 0x44, + 0xcf, 0x2a, 0x32, 0x0f, 0x00, 0x43, 0x0e, 0x0b, 0x2a, 0x0f, 0x00, 0xb3, + 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x33, 0x0f, 0x40, 0x44, 0x25, 0x01, + 0x2c, 0x0f, 0x00, 0x42, 0x15, 0x02, 0x2b, 0x0f, 0x40, 0x44, 0xc9, 0x1d, + 0x30, 0x0f, 0x00, 0x42, 0x01, 0x26, 0x2f, 0x0f, 0x40, 0x43, 0xd2, 0x05, + 0x2e, 0x0f, 0x00, 0x43, 0xf6, 0x06, 0x2d, 0x0f, 0x40, 0x43, 0xd2, 0x05, + 0x25, 0x0f, 0x00, 0x43, 0xf6, 0x06, 0x24, 0x0f, 0x40, 0x49, 0xf0, 0xb6, + 0xc2, 0x0f, 0x00, 0x4a, 0x23, 0xab, 0xc0, 0x0f, 0x00, 0x4a, 0x03, 0xad, + 0xc1, 0x0f, 0x00, 0x4a, 0xc3, 0xb0, 0xc3, 0x0f, 0x40, 0x49, 0x13, 0xb5, + 0x18, 0x0f, 0x00, 0xb3, 0x01, 0xff, 0x4b, 0x1b, 0x9b, 0x19, 0x0f, 0x00, + 0x54, 0x94, 0x42, 0x17, 0x0f, 0x40, 0xa1, 0xbd, 0x02, 0xa5, 0x8b, 0x02, + 0xa9, 0xe3, 0x01, 0xaf, 0xd4, 0x01, 0x03, 0x26, 0x01, 0x24, 0xb5, 0x01, + 0xff, 0x04, 0x31, 0x91, 0x11, 0x04, 0xd4, 0x1a, 0x01, 0xff, 0x4f, 0x24, + 0x69, 0xc8, 0x26, 0x00, 0x45, 0x1e, 0xeb, 0x08, 0x26, 0x40, 0x49, 0xc8, + 0xb7, 0x4e, 0xf4, 0x01, 0x47, 0xdb, 0xd6, 0x4d, 0xf4, 0x41, 0x80, 0x41, + 0x8d, 0x01, 0xff, 0x02, 0x06, 0x00, 0x0c, 0x47, 0xc1, 0xc2, 0x3b, 0x2e, + 0x00, 0x4c, 0x2f, 0x80, 0x04, 0x20, 0x40, 0x63, 0xb5, 0x0a, 0xa3, 0x27, + 0x00, 0x6c, 0xbe, 0x01, 0x9b, 0x2b, 0x00, 0x6b, 0x42, 0x02, 0x99, 0x2b, + 0x00, 0x0c, 0xf7, 0x95, 0x01, 0xff, 0x5f, 0x4e, 0x11, 0x98, 0x2b, 0x00, + 0x0b, 0xb3, 0x02, 0x01, 0xff, 0x49, 0xe1, 0x01, 0xa2, 0x27, 0x00, 0x55, + 0xd5, 0x01, 0x9a, 0x2b, 0x40, 0x4c, 0x03, 0x8d, 0xb1, 0xf5, 0x01, 0x58, + 0xc6, 0x27, 0x76, 0x2a, 0x00, 0xa4, 0x4f, 0xac, 0x36, 0x53, 0x92, 0x4b, + 0xa7, 0xf5, 0x01, 0x52, 0xec, 0x2b, 0xc2, 0xf7, 0x01, 0xb2, 0x06, 0x4e, + 0x6f, 0x7c, 0xeb, 0xf5, 0x41, 0x04, 0xf5, 0x45, 0x06, 0x50, 0x45, 0x2f, + 0xf6, 0x21, 0x40, 0x45, 0x5c, 0x00, 0xe4, 0xf5, 0x01, 0x45, 0x20, 0x07, + 0xe5, 0xf5, 0x01, 0x44, 0xc3, 0x00, 0xe6, 0xf5, 0x01, 0x45, 0xc8, 0x00, + 0xe7, 0xf5, 0x41, 0x4f, 0x2b, 0x3e, 0x31, 0x2b, 0x00, 0x10, 0x06, 0x64, + 0x01, 0xff, 0x44, 0xc3, 0x00, 0x9f, 0x26, 0x00, 0x45, 0xc8, 0x00, 0x9e, + 0x26, 0x40, 0x50, 0xd6, 0x63, 0xc0, 0x27, 0x00, 0x4e, 0x04, 0x0c, 0x56, + 0x20, 0x40, 0x49, 0x48, 0xbc, 0x74, 0xfa, 0x01, 0x4c, 0x3f, 0x96, 0xad, + 0xf4, 0x41, 0xae, 0x06, 0x4e, 0x73, 0x7b, 0x49, 0xf9, 0x41, 0x80, 0x06, + 0x49, 0x74, 0xb0, 0x14, 0xf9, 0x41, 0x4b, 0x1b, 0x61, 0xa1, 0xf7, 0x01, + 0xb3, 0x01, 0xff, 0x46, 0x13, 0x19, 0xa8, 0xf7, 0x01, 0x44, 0xd1, 0x4c, + 0x09, 0x20, 0x40, 0xb2, 0x06, 0x43, 0x2c, 0x46, 0xca, 0xce, 0x41, 0xa5, + 0x11, 0x02, 0xc3, 0x07, 0x01, 0xff, 0x47, 0x83, 0xd0, 0xe7, 0x29, 0x00, + 0x45, 0x32, 0xab, 0x21, 0xf3, 0x41, 0x80, 0x06, 0x44, 0x97, 0x62, 0x34, + 0x22, 0x40, 0x4e, 0x05, 0x77, 0x04, 0x22, 0x00, 0x46, 0x9c, 0xdb, 0x03, + 0x22, 0x40, 0x04, 0x4b, 0x12, 0xfc, 0x04, 0x02, 0xf1, 0x03, 0x01, 0xff, + 0xa3, 0x47, 0x06, 0xef, 0x06, 0x01, 0xff, 0x45, 0x12, 0x0b, 0x58, 0x0e, + 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x59, 0x0e, 0x00, 0x43, 0x0e, 0x0b, + 0x51, 0x0e, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x50, 0x0e, + 0x40, 0x44, 0x25, 0x01, 0x53, 0x0e, 0x00, 0x42, 0x15, 0x02, 0x52, 0x0e, + 0x40, 0x44, 0xc9, 0x1d, 0x57, 0x0e, 0x00, 0x42, 0x01, 0x26, 0x56, 0x0e, + 0x40, 0x43, 0xd2, 0x05, 0x55, 0x0e, 0x00, 0x43, 0xf6, 0x06, 0x54, 0x0e, + 0x40, 0x09, 0x05, 0x41, 0x06, 0x53, 0x51, 0x4e, 0x3f, 0x0e, 0x40, 0x4a, + 0xc7, 0xa7, 0x5a, 0x0e, 0x00, 0x49, 0xc3, 0xb6, 0x1a, 0x0e, 0x00, 0x06, + 0x9a, 0xda, 0xfc, 0x03, 0x03, 0x39, 0x66, 0xeb, 0x03, 0x02, 0x68, 0x03, + 0xd5, 0x03, 0x03, 0xd4, 0x71, 0xc4, 0x03, 0xab, 0x8d, 0x03, 0xac, 0xf0, + 0x02, 0xad, 0xb4, 0x02, 0xae, 0x96, 0x02, 0x45, 0x57, 0xe9, 0x2d, 0x0e, + 0x00, 0xb0, 0xde, 0x01, 0xb2, 0xd1, 0x01, 0xb3, 0x69, 0xb4, 0x20, 0x47, + 0x98, 0xd7, 0x27, 0x0e, 0x00, 0xb9, 0x01, 0xff, 0x47, 0xc1, 0xcc, 0x4e, + 0x0e, 0x00, 0x03, 0x82, 0xe1, 0x01, 0xff, 0x42, 0x6d, 0x00, 0x22, 0x0e, + 0x00, 0x43, 0xa1, 0x01, 0x0d, 0x0e, 0x40, 0xa8, 0x11, 0x02, 0x7b, 0x02, + 0x01, 0xff, 0x45, 0xc0, 0xe9, 0x0f, 0x0e, 0x00, 0x43, 0xd8, 0x18, 0x15, + 0x0e, 0x40, 0x49, 0x33, 0xb6, 0x4c, 0x0e, 0x00, 0x02, 0x7b, 0x02, 0x01, + 0xff, 0x4a, 0x39, 0xae, 0x11, 0x0e, 0x00, 0x47, 0xb9, 0xd4, 0x12, 0x0e, + 0x00, 0x02, 0x53, 0x00, 0x01, 0xff, 0xa1, 0x0c, 0x43, 0xd8, 0x02, 0x18, + 0x0e, 0x00, 0x43, 0xaa, 0x45, 0x16, 0x0e, 0x40, 0x43, 0x90, 0x00, 0x17, + 0x0e, 0x00, 0xee, 0x10, 0x0e, 0x40, 0x04, 0x41, 0x16, 0x1e, 0x02, 0x7b, + 0x02, 0x01, 0xff, 0x44, 0x81, 0xf2, 0x29, 0x0e, 0x00, 0xb3, 0x01, 0xff, + 0x43, 0x4d, 0x19, 0x28, 0x0e, 0x00, 0xef, 0x0b, 0x0e, 0x00, 0x42, 0x7d, + 0x00, 0x2a, 0x0e, 0x40, 0xe1, 0x30, 0x0e, 0x80, 0x23, 0xe5, 0x40, 0x0e, + 0x00, 0xe9, 0x34, 0x0e, 0x80, 0x16, 0xef, 0x42, 0x0e, 0x00, 0xf5, 0x38, + 0x0e, 0xc0, 0x00, 0xe5, 0x36, 0x0e, 0x80, 0x04, 0xf5, 0x39, 0x0e, 0x40, + 0xe5, 0x37, 0x0e, 0x40, 0xe9, 0x35, 0x0e, 0x40, 0xe1, 0x32, 0x0e, 0x00, + 0xe5, 0x41, 0x0e, 0x00, 0x06, 0xb0, 0xdc, 0x04, 0xed, 0x33, 0x0e, 0x40, + 0x44, 0xf1, 0xee, 0x44, 0x0e, 0x00, 0x43, 0x53, 0xa1, 0x43, 0x0e, 0x40, + 0x45, 0x6b, 0xe9, 0x23, 0x0e, 0x00, 0xf5, 0x24, 0x0e, 0x40, 0x48, 0x38, + 0xc3, 0x2f, 0x0e, 0x00, 0xa8, 0x06, 0x45, 0x66, 0xe9, 0x1b, 0x0e, 0x40, + 0x45, 0x81, 0xe7, 0x3a, 0x0e, 0x00, 0x02, 0x7b, 0x02, 0x01, 0xff, 0x02, + 0x84, 0x10, 0x06, 0x47, 0x99, 0xd5, 0x20, 0x0e, 0x40, 0x42, 0x1a, 0x00, + 0x1e, 0x0e, 0x00, 0x43, 0xaa, 0x45, 0x1c, 0x0e, 0x40, 0x46, 0x1a, 0xdc, + 0x07, 0x0e, 0x00, 0x47, 0xe1, 0xd1, 0x4d, 0x0e, 0x00, 0x03, 0x1b, 0xdc, + 0x01, 0xff, 0x42, 0x92, 0x01, 0x13, 0x0e, 0x00, 0xf5, 0x19, 0x0e, 0x40, + 0x02, 0x56, 0x07, 0x06, 0x44, 0xbe, 0x4d, 0x21, 0x0e, 0x40, 0x80, 0x0c, + 0x46, 0x58, 0xe0, 0x47, 0x0e, 0x00, 0x45, 0x86, 0xec, 0x46, 0x0e, 0x40, + 0x48, 0xa0, 0xc4, 0x4b, 0x0e, 0x00, 0x42, 0xd5, 0x18, 0x48, 0x0e, 0x00, + 0x48, 0x98, 0xc6, 0x31, 0x0e, 0x00, 0xb4, 0x01, 0xff, 0x42, 0x0b, 0x00, + 0x49, 0x0e, 0x00, 0x42, 0x0d, 0x00, 0x4a, 0x0e, 0x40, 0x4a, 0x8b, 0xa7, + 0x45, 0x0e, 0x00, 0x02, 0x7b, 0x02, 0x04, 0xf5, 0x26, 0x0e, 0x40, 0x45, + 0x38, 0xe5, 0x2c, 0x0e, 0x00, 0x44, 0x2f, 0x0b, 0x25, 0x0e, 0x40, 0x02, + 0x0b, 0x00, 0x06, 0x45, 0x61, 0xe9, 0x01, 0x0e, 0x40, 0x80, 0x06, 0x43, + 0x0b, 0xac, 0x5b, 0x0e, 0x40, 0x02, 0x60, 0x0c, 0x06, 0x47, 0x1b, 0xd5, + 0x06, 0x0e, 0x40, 0x42, 0x56, 0x07, 0x02, 0x0e, 0x00, 0x42, 0x10, 0x00, + 0x05, 0x0e, 0x00, 0x43, 0x0c, 0x0c, 0x03, 0x0e, 0x00, 0x43, 0xd1, 0x10, + 0x04, 0x0e, 0x40, 0x43, 0x5c, 0x0d, 0x2b, 0x0e, 0x00, 0x46, 0x66, 0xde, + 0x2e, 0x0e, 0x40, 0x43, 0x0b, 0x08, 0x1d, 0x0e, 0x80, 0x06, 0x45, 0x11, + 0xe9, 0x4f, 0x0e, 0x40, 0xee, 0x1f, 0x0e, 0x40, 0x45, 0x1f, 0xe5, 0x0e, + 0x0e, 0x00, 0x43, 0xd4, 0x18, 0x14, 0x0e, 0x40, 0x42, 0x1a, 0x00, 0x08, + 0x0e, 0x80, 0x0c, 0x43, 0xa1, 0x01, 0x09, 0x0e, 0x00, 0x42, 0x60, 0x51, + 0x0c, 0x0e, 0x40, 0xe7, 0x0a, 0x0e, 0x40, 0xa1, 0xc6, 0x02, 0xa5, 0xb1, + 0x02, 0x47, 0xc5, 0xd1, 0xa8, 0x07, 0x00, 0x07, 0xec, 0x05, 0x20, 0xaf, + 0x0c, 0x45, 0x23, 0xeb, 0xb0, 0x07, 0x00, 0x47, 0xaa, 0xd6, 0xaa, 0x07, + 0x40, 0x48, 0x20, 0xc3, 0xaf, 0x07, 0x00, 0x46, 0x3a, 0xda, 0xae, 0x07, + 0x00, 0x48, 0xf0, 0xc8, 0xab, 0x07, 0x40, 0xa1, 0xf8, 0x01, 0x43, 0x89, + 0x50, 0x84, 0x07, 0x00, 0x49, 0x2f, 0xb7, 0x97, 0x07, 0x00, 0xa4, 0xd5, + 0x01, 0x45, 0x55, 0xe6, 0x8a, 0x07, 0x00, 0xa7, 0xba, 0x01, 0xa8, 0xab, + 0x01, 0x48, 0x58, 0xc7, 0x96, 0x07, 0x00, 0xab, 0x96, 0x01, 0xac, 0x87, + 0x01, 0x45, 0x80, 0xe8, 0x89, 0x07, 0x00, 0xae, 0x73, 0x48, 0xd8, 0xc9, + 0x95, 0x07, 0x00, 0x45, 0x1a, 0xea, 0xa4, 0x07, 0x00, 0x43, 0x8f, 0x95, + 0x83, 0x07, 0x00, 0xb3, 0x44, 0xb4, 0x25, 0x45, 0x0e, 0xec, 0x88, 0x07, + 0x00, 0x45, 0x31, 0xec, 0xa5, 0x07, 0x00, 0x43, 0xb1, 0xb9, 0x94, 0x07, + 0x00, 0xba, 0x01, 0xff, 0xa1, 0x04, 0xef, 0xa1, 0x07, 0x40, 0xe1, 0x9c, + 0x07, 0x00, 0x46, 0x32, 0xb7, 0x92, 0x07, 0x40, 0x47, 0x31, 0xb7, 0x93, + 0x07, 0x00, 0x43, 0x3b, 0x41, 0x8c, 0x07, 0x80, 0x0a, 0xef, 0xa0, 0x07, + 0x00, 0x43, 0x7f, 0x12, 0x98, 0x07, 0x40, 0x42, 0xc7, 0x15, 0x9b, 0x07, + 0x40, 0x45, 0xf8, 0xe3, 0x9e, 0x07, 0x00, 0x44, 0x9d, 0xef, 0x90, 0x07, + 0x00, 0xa8, 0x01, 0xff, 0x47, 0x31, 0xb7, 0x81, 0x07, 0x00, 0x44, 0x9d, + 0xef, 0x9d, 0x07, 0x40, 0x42, 0x80, 0x12, 0xb1, 0x07, 0x00, 0x44, 0x48, + 0x96, 0x82, 0x07, 0x40, 0x44, 0x69, 0x89, 0x8d, 0x07, 0x00, 0x48, 0x30, + 0xb7, 0x85, 0x07, 0x40, 0x44, 0x56, 0xe6, 0x86, 0x07, 0x00, 0x43, 0x3b, + 0x41, 0x9a, 0x07, 0x40, 0x42, 0x80, 0x12, 0x80, 0x07, 0x00, 0x43, 0x3b, + 0x41, 0x99, 0x07, 0x40, 0x44, 0x56, 0xe6, 0x8e, 0x07, 0x00, 0x45, 0xcd, + 0xe6, 0xa3, 0x07, 0x00, 0x48, 0x88, 0xc8, 0x8f, 0x07, 0x40, 0xa1, 0x06, + 0x45, 0xc3, 0xe6, 0x8b, 0x07, 0x40, 0x44, 0xf9, 0xe3, 0x9f, 0x07, 0x00, + 0x46, 0x32, 0xb7, 0x91, 0x07, 0x40, 0x43, 0xcc, 0x1a, 0xa2, 0x07, 0x00, + 0x44, 0x05, 0xf1, 0x87, 0x07, 0x40, 0x46, 0x16, 0xda, 0xac, 0x07, 0x00, + 0x48, 0x68, 0xc5, 0xa9, 0x07, 0x00, 0x48, 0xc8, 0xcc, 0xad, 0x07, 0x40, + 0x48, 0x18, 0xc3, 0xa7, 0x07, 0x00, 0x46, 0x0a, 0xda, 0xa6, 0x07, 0x40, + 0xa1, 0xbf, 0x0a, 0x48, 0x08, 0xc5, 0xf8, 0xf9, 0x01, 0xac, 0xea, 0x04, + 0xae, 0xd7, 0x04, 0x47, 0xfb, 0xd5, 0xea, 0xf9, 0x01, 0x0c, 0x03, 0x96, + 0x01, 0xff, 0xa1, 0xb1, 0x04, 0xa2, 0x9c, 0x04, 0xa3, 0xc4, 0x03, 0xa4, + 0xff, 0x02, 0xa5, 0xd0, 0x02, 0xa6, 0xa2, 0x02, 0xa7, 0x80, 0x02, 0xa8, + 0xf1, 0x01, 0x02, 0x9e, 0x01, 0xe0, 0x01, 0x43, 0xb8, 0x95, 0x1d, 0xd3, + 0x01, 0xab, 0xcb, 0x01, 0xac, 0xb4, 0x01, 0xad, 0x9f, 0x01, 0xaf, 0x90, + 0x01, 0xb0, 0x74, 0xb2, 0x47, 0xb3, 0x22, 0x45, 0xdc, 0xeb, 0x3b, 0xd3, + 0x01, 0x53, 0x9d, 0x4e, 0x37, 0xd3, 0x01, 0x02, 0xa9, 0x01, 0x06, 0x4c, + 0x47, 0x97, 0x11, 0xd3, 0x41, 0x45, 0x8c, 0x84, 0x17, 0xd3, 0x01, 0x43, + 0x96, 0x21, 0x44, 0xd3, 0x41, 0x48, 0x08, 0xc6, 0x4b, 0xd3, 0x01, 0x46, + 0x48, 0x91, 0x45, 0xd3, 0x01, 0xb4, 0x01, 0xff, 0xaf, 0x06, 0x46, 0x86, + 0xdf, 0x29, 0xd3, 0x41, 0x45, 0x0b, 0xea, 0x4c, 0xd3, 0x01, 0x42, 0x32, + 0x00, 0x31, 0xd3, 0x41, 0xa5, 0x06, 0x45, 0x9f, 0xe7, 0x35, 0xd3, 0x41, + 0x43, 0x8c, 0x2d, 0x14, 0xd3, 0x01, 0x45, 0x26, 0xe8, 0x1a, 0xd3, 0x01, + 0xb3, 0x01, 0xff, 0xa9, 0x06, 0x45, 0x06, 0xea, 0x2e, 0xd3, 0x41, 0x45, + 0x83, 0xe5, 0x2c, 0xd3, 0x01, 0x46, 0x10, 0xe0, 0x1b, 0xd3, 0x41, 0xa1, + 0x0c, 0x4a, 0xed, 0xa9, 0x13, 0xd3, 0x01, 0x45, 0xf0, 0xeb, 0x2a, 0xd3, + 0x41, 0x45, 0x79, 0x67, 0x24, 0xd3, 0x01, 0x45, 0x65, 0x91, 0x34, 0xd3, + 0x41, 0x4b, 0xd5, 0x9f, 0x53, 0xd3, 0x01, 0x49, 0x2e, 0xbe, 0x0d, 0xd3, + 0x41, 0x46, 0xf2, 0xd9, 0x40, 0xd3, 0x01, 0x46, 0x72, 0x18, 0x39, 0xd3, + 0x01, 0x44, 0x66, 0x87, 0x08, 0xd3, 0x41, 0xa1, 0x06, 0x45, 0xce, 0xe5, + 0x25, 0xd3, 0x41, 0x47, 0xaa, 0xcf, 0x55, 0xd3, 0x01, 0x4a, 0x61, 0xb3, + 0x2d, 0xd3, 0x41, 0x4c, 0x5f, 0x8e, 0x0a, 0xd3, 0x01, 0x46, 0x04, 0xdd, + 0x27, 0xd3, 0x41, 0x46, 0xbe, 0xda, 0x12, 0xd3, 0x01, 0x43, 0x20, 0x0b, + 0x46, 0xd3, 0x41, 0x47, 0xfb, 0xce, 0x4d, 0xd3, 0x01, 0x4b, 0x4c, 0x52, + 0x16, 0xd3, 0x41, 0x48, 0x64, 0x58, 0x28, 0xd3, 0x81, 0x12, 0x4c, 0x0f, + 0x93, 0x2f, 0xd3, 0x01, 0x48, 0x48, 0xca, 0x32, 0xd3, 0x01, 0x4a, 0x85, + 0xb2, 0x3e, 0xd3, 0x41, 0x43, 0x08, 0x06, 0x3f, 0xd3, 0x41, 0x46, 0x98, + 0xd9, 0x50, 0xd3, 0x01, 0x45, 0xc3, 0x01, 0x36, 0xd3, 0x01, 0xaf, 0x11, + 0x03, 0x82, 0x16, 0x01, 0xff, 0x47, 0x11, 0x03, 0x07, 0xd3, 0x01, 0x44, + 0x22, 0x24, 0x2b, 0xd3, 0x41, 0x47, 0x21, 0xc9, 0x18, 0xd3, 0x01, 0x47, + 0x02, 0xd6, 0x56, 0xd3, 0x41, 0x43, 0x9a, 0x35, 0x1c, 0xd3, 0x01, 0x4c, + 0xd7, 0x91, 0x42, 0xd3, 0x01, 0xae, 0x0c, 0x47, 0xef, 0x32, 0x3a, 0xd3, + 0x01, 0x49, 0x7c, 0xc1, 0x4a, 0xd3, 0x41, 0x48, 0xd0, 0xc4, 0x30, 0xd3, + 0x01, 0x47, 0x4b, 0xd0, 0x1f, 0xd3, 0x01, 0x49, 0x4c, 0xbb, 0x33, 0xd3, + 0x41, 0x48, 0x62, 0x39, 0x48, 0xd3, 0x01, 0xa5, 0x28, 0xa9, 0x0c, 0x44, + 0xed, 0xf1, 0x43, 0xd3, 0x01, 0x45, 0xff, 0xeb, 0x20, 0xd3, 0x41, 0x4a, + 0x51, 0xaa, 0x54, 0xd3, 0x01, 0xad, 0x06, 0x48, 0x40, 0xcc, 0x10, 0xd3, + 0x41, 0x49, 0xa1, 0xba, 0x3c, 0xd3, 0x01, 0x44, 0xca, 0x61, 0x49, 0xd3, + 0x41, 0x4a, 0xb7, 0xa8, 0x22, 0xd3, 0x01, 0x59, 0x1b, 0x24, 0x0f, 0xd3, + 0x01, 0x47, 0xaf, 0xb7, 0x47, 0xd3, 0x41, 0x45, 0x74, 0x02, 0x06, 0xd3, + 0x01, 0x45, 0x13, 0xc6, 0x21, 0xd3, 0x01, 0x03, 0xa3, 0x0d, 0x31, 0xaf, + 0x01, 0xff, 0x03, 0x9e, 0x62, 0x1e, 0xae, 0x01, 0xff, 0x46, 0x16, 0xe0, + 0x38, 0xd3, 0x01, 0xb4, 0x01, 0xff, 0x43, 0xef, 0x0c, 0x15, 0xd3, 0x01, + 0x46, 0x0b, 0x83, 0x1e, 0xd3, 0x01, 0x47, 0x29, 0xd5, 0x0b, 0xd3, 0x41, + 0x45, 0xa1, 0x62, 0x4e, 0xd3, 0x01, 0x45, 0x43, 0xc3, 0x52, 0xd3, 0x41, + 0xa5, 0x06, 0x43, 0x75, 0x18, 0x4f, 0xd3, 0x41, 0x47, 0x80, 0x8d, 0x3d, + 0xd3, 0x01, 0x44, 0x22, 0x24, 0x26, 0xd3, 0x41, 0x46, 0x25, 0x6a, 0x09, + 0xd3, 0x01, 0x4e, 0x3f, 0x7a, 0x23, 0xd3, 0x01, 0x4c, 0x23, 0x94, 0x0e, + 0xd3, 0x41, 0x4b, 0xf2, 0x99, 0x41, 0xd3, 0x01, 0x46, 0x0c, 0xdb, 0x19, + 0xd3, 0x01, 0x4a, 0xc9, 0xaa, 0x51, 0xd3, 0x01, 0x45, 0x43, 0x41, 0x0c, + 0xd3, 0x41, 0x47, 0xe0, 0x96, 0xb8, 0x20, 0x00, 0x54, 0x74, 0x44, 0xbe, + 0xf3, 0x01, 0xf4, 0xfa, 0x26, 0x40, 0xa5, 0x90, 0x05, 0x04, 0xcd, 0xf2, + 0x01, 0xff, 0xa1, 0xfc, 0x04, 0x06, 0xef, 0x06, 0xb5, 0x04, 0x0f, 0x6b, + 0x6d, 0xf7, 0x03, 0x02, 0x68, 0x00, 0x9c, 0x01, 0x05, 0x5a, 0x03, 0x4e, + 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x3b, 0xe5, 0x46, 0x0c, 0x80, 0x32, + 0xe9, 0x3f, 0x0c, 0x80, 0x29, 0xef, 0x4a, 0x0c, 0x80, 0x20, 0xf5, 0x41, + 0x0c, 0x80, 0x17, 0x08, 0x22, 0xc1, 0x01, 0xff, 0xec, 0x62, 0x0c, 0x80, + 0x09, 0xf2, 0x43, 0x0c, 0xc0, 0x00, 0xf2, 0x44, 0x0c, 0x40, 0xec, 0x63, + 0x0c, 0x40, 0xf5, 0x42, 0x0c, 0x40, 0xef, 0x4b, 0x0c, 0x40, 0xe9, 0x40, + 0x0c, 0x40, 0xe5, 0x47, 0x0c, 0x40, 0xe1, 0x3e, 0x0c, 0x00, 0xe9, 0x48, + 0x0c, 0x00, 0xf5, 0x4c, 0x0c, 0x40, 0xa1, 0x3c, 0xa3, 0x23, 0x45, 0x3f, + 0x3f, 0x3c, 0x0c, 0x00, 0x47, 0xd8, 0xd5, 0x77, 0x0c, 0x00, 0x45, 0xa5, + 0xeb, 0x7f, 0x0c, 0x00, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0xe5, 0x23, + 0x4d, 0x0c, 0x00, 0x45, 0xec, 0x4b, 0x03, 0x0c, 0x40, 0x4a, 0xd8, 0x23, + 0x01, 0x0c, 0x00, 0x09, 0x33, 0x16, 0x01, 0xff, 0x4e, 0x3c, 0x16, 0x04, + 0x0c, 0x00, 0x51, 0x0e, 0x59, 0x00, 0x0c, 0x40, 0x47, 0x3d, 0x16, 0x02, + 0x0c, 0x00, 0x47, 0xaf, 0x88, 0x3d, 0x0c, 0x40, 0x49, 0x44, 0x39, 0x55, + 0x0c, 0x00, 0x05, 0xee, 0x05, 0x01, 0xff, 0xe1, 0x05, 0x0c, 0x80, 0xb9, + 0x02, 0xa2, 0xac, 0x02, 0xa3, 0x9f, 0x02, 0xa4, 0x80, 0x02, 0xe5, 0x0e, + 0x0c, 0x80, 0xf6, 0x01, 0xa7, 0xe9, 0x01, 0x42, 0x22, 0x00, 0x39, 0x0c, + 0x00, 0xe9, 0x07, 0x0c, 0x80, 0xd9, 0x01, 0xaa, 0xcc, 0x01, 0xab, 0xbf, + 0x01, 0xac, 0xab, 0x01, 0x42, 0x6c, 0x00, 0x2e, 0x0c, 0x00, 0xae, 0x85, + 0x01, 0xef, 0x12, 0x0c, 0x80, 0x7c, 0xb0, 0x70, 0xb2, 0x5d, 0xb3, 0x4b, + 0xb4, 0x2c, 0xf5, 0x09, 0x0c, 0x80, 0x23, 0xb6, 0x06, 0x42, 0xbc, 0x22, + 0x2f, 0x0c, 0x40, 0xe1, 0x35, 0x0c, 0x00, 0x07, 0x23, 0xc1, 0x01, 0xff, + 0xec, 0x0c, 0x0c, 0x80, 0x09, 0xf2, 0x0b, 0x0c, 0xc0, 0x00, 0xf2, 0x60, + 0x0c, 0x40, 0xec, 0x61, 0x0c, 0x40, 0xf5, 0x0a, 0x0c, 0x40, 0xe1, 0x24, + 0x0c, 0x00, 0x42, 0x22, 0x00, 0x25, 0x0c, 0x00, 0x42, 0x40, 0x06, 0x58, + 0x0c, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x1f, 0x0c, 0x00, 0x42, 0x22, 0x00, + 0x20, 0x0c, 0x40, 0xe1, 0x38, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x36, 0x0c, + 0x00, 0x42, 0x40, 0x06, 0x37, 0x0c, 0x40, 0xe1, 0x30, 0x0c, 0x00, 0xb2, + 0x01, 0xff, 0xe1, 0x31, 0x0c, 0x00, 0x42, 0x71, 0x00, 0x5a, 0x0c, 0x40, + 0xe1, 0x2a, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x2b, 0x0c, 0x40, 0xef, 0x13, + 0x0c, 0x40, 0xe1, 0x28, 0x0c, 0x80, 0x12, 0x42, 0x24, 0x02, 0x19, 0x0c, + 0x00, 0x42, 0x2a, 0x05, 0x23, 0x0c, 0x00, 0x42, 0xbc, 0x22, 0x1e, 0x0c, + 0x40, 0x4b, 0xfc, 0x9d, 0x5d, 0x0c, 0x40, 0xe1, 0x32, 0x0c, 0x00, 0xac, + 0x01, 0xff, 0xe1, 0x33, 0x0c, 0x00, 0x42, 0x74, 0x00, 0x34, 0x0c, 0x40, + 0xe1, 0x15, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x16, 0x0c, 0x40, 0xe1, 0x1c, + 0x0c, 0x00, 0x42, 0x22, 0x00, 0x1d, 0x0c, 0x40, 0xe9, 0x08, 0x0c, 0x40, + 0xe1, 0x17, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x18, 0x0c, 0x40, 0xe5, 0x0f, + 0x0c, 0x40, 0xe1, 0x26, 0x0c, 0x00, 0xa4, 0x0c, 0x42, 0x22, 0x00, 0x27, + 0x0c, 0x00, 0x42, 0x59, 0x00, 0x59, 0x0c, 0x40, 0xe1, 0x21, 0x0c, 0x00, + 0x42, 0x22, 0x00, 0x22, 0x0c, 0x40, 0xe1, 0x1a, 0x0c, 0x00, 0x42, 0x22, + 0x00, 0x1b, 0x0c, 0x40, 0xe1, 0x2c, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x2d, + 0x0c, 0x40, 0xe1, 0x06, 0x0c, 0x00, 0xe9, 0x10, 0x0c, 0x00, 0xf5, 0x14, + 0x0c, 0x40, 0x08, 0x50, 0xc9, 0x29, 0xb4, 0x06, 0x5b, 0x43, 0x1e, 0x78, + 0x0c, 0x40, 0x09, 0xc9, 0xb9, 0x11, 0x07, 0x8a, 0xd7, 0x01, 0xff, 0x53, + 0x58, 0x49, 0x7d, 0x0c, 0x00, 0x52, 0x4c, 0x1e, 0x7a, 0x0c, 0x40, 0x53, + 0x58, 0x49, 0x7e, 0x0c, 0x00, 0x52, 0x4c, 0x1e, 0x7b, 0x0c, 0x40, 0x53, + 0x58, 0x49, 0x7c, 0x0c, 0x00, 0x52, 0x4c, 0x1e, 0x79, 0x0c, 0x40, 0x45, + 0x12, 0x0b, 0x6e, 0x0c, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x6f, 0x0c, + 0x00, 0x43, 0x0e, 0x0b, 0x67, 0x0c, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, + 0x43, 0x1e, 0x66, 0x0c, 0x40, 0x44, 0x25, 0x01, 0x69, 0x0c, 0x00, 0x42, + 0x15, 0x02, 0x68, 0x0c, 0x40, 0x44, 0xc9, 0x1d, 0x6d, 0x0c, 0x00, 0x42, + 0x01, 0x26, 0x6c, 0x0c, 0x40, 0x43, 0xd2, 0x05, 0x6b, 0x0c, 0x00, 0x43, + 0xf6, 0x06, 0x6a, 0x0c, 0x40, 0x4d, 0xd6, 0x83, 0x56, 0x0c, 0x00, 0x4c, + 0x3b, 0x94, 0x5c, 0x0c, 0x40, 0x06, 0x1a, 0x3d, 0x0c, 0x45, 0x8b, 0xcb, + 0x2d, 0xf5, 0x01, 0x46, 0xc4, 0x32, 0xfa, 0xf4, 0x41, 0x4d, 0x28, 0x85, + 0x06, 0x27, 0x00, 0x4f, 0x2b, 0x71, 0x80, 0xf5, 0x01, 0x03, 0x89, 0x0d, + 0x06, 0x44, 0x5a, 0x03, 0x21, 0x21, 0x40, 0x45, 0x23, 0x3d, 0xde, 0xf4, + 0x81, 0x06, 0x45, 0x21, 0x89, 0x15, 0x23, 0x40, 0x4a, 0x73, 0xa6, 0x7c, + 0xf5, 0x41, 0x52, 0xf5, 0x50, 0x75, 0xf3, 0x01, 0x43, 0x14, 0x45, 0xd6, + 0xfa, 0x01, 0xb2, 0x01, 0xff, 0x4d, 0x14, 0x80, 0xc6, 0xf4, 0x01, 0x05, + 0x26, 0x0d, 0x01, 0xff, 0x57, 0xce, 0x2d, 0xba, 0x27, 0x00, 0x4f, 0xd5, + 0x1c, 0x3b, 0x27, 0x40, 0x5a, 0x48, 0x1f, 0xd3, 0xf3, 0x01, 0x42, 0x13, + 0x05, 0x2e, 0xf3, 0x01, 0xa7, 0xa3, 0x3a, 0x02, 0xf1, 0x03, 0x93, 0x2c, + 0xab, 0xe7, 0x28, 0x09, 0xb4, 0xa7, 0xd6, 0x28, 0xad, 0x99, 0x22, 0xae, + 0x1c, 0x03, 0x24, 0x31, 0x0c, 0x44, 0xe1, 0xf2, 0x49, 0x26, 0x00, 0x42, + 0xe2, 0x0c, 0x95, 0xf6, 0x41, 0x49, 0x1d, 0xb7, 0xad, 0xf5, 0x01, 0x45, + 0x76, 0xd7, 0x07, 0x27, 0x40, 0x4a, 0x4f, 0xa7, 0x8b, 0xf3, 0x01, 0xa7, + 0x01, 0xff, 0x45, 0x14, 0xe6, 0x4a, 0xf3, 0x01, 0x03, 0x7f, 0x41, 0xef, + 0x1d, 0x03, 0x6b, 0x0d, 0x01, 0xff, 0x0a, 0xd5, 0xa8, 0x0f, 0xa9, 0x01, + 0xff, 0x49, 0xbd, 0x27, 0x03, 0xd8, 0x00, 0x4d, 0x59, 0x20, 0xe0, 0x6f, + 0x41, 0x90, 0xad, 0x1a, 0x91, 0xff, 0x16, 0x92, 0xd1, 0x13, 0x93, 0xa3, + 0x10, 0x94, 0xf5, 0x0c, 0x95, 0xc7, 0x09, 0x96, 0x99, 0x06, 0x97, 0xeb, + 0x02, 0x98, 0x01, 0xff, 0x90, 0xbd, 0x02, 0x91, 0x92, 0x02, 0x92, 0xe7, + 0x01, 0x93, 0xbc, 0x01, 0x94, 0x91, 0x01, 0x95, 0x67, 0x96, 0x3d, 0x97, + 0x13, 0x98, 0x01, 0xff, 0xd0, 0xef, 0x8d, 0x01, 0xd1, 0xf0, 0x8d, 0x01, + 0xd2, 0xf1, 0x8d, 0x01, 0xd3, 0xf2, 0x8d, 0x41, 0xd0, 0xe5, 0x8d, 0x01, + 0xd1, 0xe6, 0x8d, 0x01, 0xd2, 0xe7, 0x8d, 0x01, 0xd3, 0xe8, 0x8d, 0x01, + 0xd4, 0xe9, 0x8d, 0x01, 0xd5, 0xea, 0x8d, 0x01, 0xd6, 0xeb, 0x8d, 0x01, + 0xd7, 0xec, 0x8d, 0x01, 0xd8, 0xed, 0x8d, 0x01, 0xd9, 0xee, 0x8d, 0x41, + 0xd0, 0xdb, 0x8d, 0x01, 0xd1, 0xdc, 0x8d, 0x01, 0xd2, 0xdd, 0x8d, 0x01, + 0xd3, 0xde, 0x8d, 0x01, 0xd4, 0xdf, 0x8d, 0x01, 0xd5, 0xe0, 0x8d, 0x01, + 0xd6, 0xe1, 0x8d, 0x01, 0xd7, 0xe2, 0x8d, 0x01, 0xd8, 0xe3, 0x8d, 0x01, + 0xd9, 0xe4, 0x8d, 0x41, 0xd0, 0xd1, 0x8d, 0x01, 0xd1, 0xd2, 0x8d, 0x01, + 0xd2, 0xd3, 0x8d, 0x01, 0xd3, 0xd4, 0x8d, 0x01, 0xd4, 0xd5, 0x8d, 0x01, + 0xd5, 0xd6, 0x8d, 0x01, 0xd6, 0xd7, 0x8d, 0x01, 0xd7, 0xd8, 0x8d, 0x01, + 0xd8, 0xd9, 0x8d, 0x01, 0xd9, 0xda, 0x8d, 0x41, 0xd0, 0xc7, 0x8d, 0x01, + 0xd1, 0xc8, 0x8d, 0x01, 0xd2, 0xc9, 0x8d, 0x01, 0xd3, 0xca, 0x8d, 0x01, + 0xd4, 0xcb, 0x8d, 0x01, 0xd5, 0xcc, 0x8d, 0x01, 0xd6, 0xcd, 0x8d, 0x01, + 0xd7, 0xce, 0x8d, 0x01, 0xd8, 0xcf, 0x8d, 0x01, 0xd9, 0xd0, 0x8d, 0x41, + 0xd0, 0xbd, 0x8d, 0x01, 0xd1, 0xbe, 0x8d, 0x01, 0xd2, 0xbf, 0x8d, 0x01, + 0xd3, 0xc0, 0x8d, 0x01, 0xd4, 0xc1, 0x8d, 0x01, 0xd5, 0xc2, 0x8d, 0x01, + 0xd6, 0xc3, 0x8d, 0x01, 0xd7, 0xc4, 0x8d, 0x01, 0xd8, 0xc5, 0x8d, 0x01, + 0xd9, 0xc6, 0x8d, 0x41, 0xd0, 0xb3, 0x8d, 0x01, 0xd1, 0xb4, 0x8d, 0x01, + 0xd2, 0xb5, 0x8d, 0x01, 0xd3, 0xb6, 0x8d, 0x01, 0xd4, 0xb7, 0x8d, 0x01, + 0xd5, 0xb8, 0x8d, 0x01, 0xd6, 0xb9, 0x8d, 0x01, 0xd7, 0xba, 0x8d, 0x01, + 0xd8, 0xbb, 0x8d, 0x01, 0xd9, 0xbc, 0x8d, 0x41, 0xd0, 0xa9, 0x8d, 0x01, + 0xd1, 0xaa, 0x8d, 0x01, 0xd2, 0xab, 0x8d, 0x01, 0xd3, 0xac, 0x8d, 0x01, + 0xd4, 0xad, 0x8d, 0x01, 0xd5, 0xae, 0x8d, 0x01, 0xd6, 0xaf, 0x8d, 0x01, + 0xd7, 0xb0, 0x8d, 0x01, 0xd8, 0xb1, 0x8d, 0x01, 0xd9, 0xb2, 0x8d, 0x41, + 0xd0, 0x9f, 0x8d, 0x01, 0xd1, 0xa0, 0x8d, 0x01, 0xd2, 0xa1, 0x8d, 0x01, + 0xd3, 0xa2, 0x8d, 0x01, 0xd4, 0xa3, 0x8d, 0x01, 0xd5, 0xa4, 0x8d, 0x01, + 0xd6, 0xa5, 0x8d, 0x01, 0xd7, 0xa6, 0x8d, 0x01, 0xd8, 0xa7, 0x8d, 0x01, + 0xd9, 0xa8, 0x8d, 0x41, 0x90, 0x80, 0x03, 0x91, 0xd5, 0x02, 0x92, 0xaa, 0x02, 0x93, 0xff, 0x01, 0x94, 0xd4, 0x01, 0x95, 0xa9, 0x01, 0x96, 0x7f, - 0x97, 0x55, 0x98, 0x2b, 0x99, 0x01, 0xff, 0xd0, 0x21, 0x89, 0x01, 0xd1, - 0x22, 0x89, 0x01, 0xd2, 0x23, 0x89, 0x01, 0xd3, 0x24, 0x89, 0x01, 0xd4, - 0x25, 0x89, 0x01, 0xd5, 0x26, 0x89, 0x01, 0xd6, 0x27, 0x89, 0x01, 0xd7, - 0x28, 0x89, 0x01, 0xd8, 0x29, 0x89, 0x01, 0xd9, 0x2a, 0x89, 0x41, 0xd0, - 0x17, 0x89, 0x01, 0xd1, 0x18, 0x89, 0x01, 0xd2, 0x19, 0x89, 0x01, 0xd3, - 0x1a, 0x89, 0x01, 0xd4, 0x1b, 0x89, 0x01, 0xd5, 0x1c, 0x89, 0x01, 0xd6, - 0x1d, 0x89, 0x01, 0xd7, 0x1e, 0x89, 0x01, 0xd8, 0x1f, 0x89, 0x01, 0xd9, - 0x20, 0x89, 0x41, 0xd0, 0x0d, 0x89, 0x01, 0xd1, 0x0e, 0x89, 0x01, 0xd2, - 0x0f, 0x89, 0x01, 0xd3, 0x10, 0x89, 0x01, 0xd4, 0x11, 0x89, 0x01, 0xd5, - 0x12, 0x89, 0x01, 0xd6, 0x13, 0x89, 0x01, 0xd7, 0x14, 0x89, 0x01, 0xd8, - 0x15, 0x89, 0x01, 0xd9, 0x16, 0x89, 0x41, 0xd0, 0x03, 0x89, 0x01, 0xd1, - 0x04, 0x89, 0x01, 0xd2, 0x05, 0x89, 0x01, 0xd3, 0x06, 0x89, 0x01, 0xd4, - 0x07, 0x89, 0x01, 0xd5, 0x08, 0x89, 0x01, 0xd6, 0x09, 0x89, 0x01, 0xd7, - 0x0a, 0x89, 0x01, 0xd8, 0x0b, 0x89, 0x01, 0xd9, 0x0c, 0x89, 0x41, 0xd0, - 0xf9, 0x88, 0x01, 0xd1, 0xfa, 0x88, 0x01, 0xd2, 0xfb, 0x88, 0x01, 0xd3, - 0xfc, 0x88, 0x01, 0xd4, 0xfd, 0x88, 0x01, 0xd5, 0xfe, 0x88, 0x01, 0xd6, - 0xff, 0x88, 0x01, 0xd7, 0x00, 0x89, 0x01, 0xd8, 0x01, 0x89, 0x01, 0xd9, - 0x02, 0x89, 0x41, 0xd0, 0xef, 0x88, 0x01, 0xd1, 0xf0, 0x88, 0x01, 0xd2, - 0xf1, 0x88, 0x01, 0xd3, 0xf2, 0x88, 0x01, 0xd4, 0xf3, 0x88, 0x01, 0xd5, - 0xf4, 0x88, 0x01, 0xd6, 0xf5, 0x88, 0x01, 0xd7, 0xf6, 0x88, 0x01, 0xd8, - 0xf7, 0x88, 0x01, 0xd9, 0xf8, 0x88, 0x41, 0xd0, 0xe5, 0x88, 0x01, 0xd1, - 0xe6, 0x88, 0x01, 0xd2, 0xe7, 0x88, 0x01, 0xd3, 0xe8, 0x88, 0x01, 0xd4, - 0xe9, 0x88, 0x01, 0xd5, 0xea, 0x88, 0x01, 0xd6, 0xeb, 0x88, 0x01, 0xd7, - 0xec, 0x88, 0x01, 0xd8, 0xed, 0x88, 0x01, 0xd9, 0xee, 0x88, 0x41, 0xd0, - 0xdb, 0x88, 0x01, 0xd1, 0xdc, 0x88, 0x01, 0xd2, 0xdd, 0x88, 0x01, 0xd3, - 0xde, 0x88, 0x01, 0xd4, 0xdf, 0x88, 0x01, 0xd5, 0xe0, 0x88, 0x01, 0xd6, - 0xe1, 0x88, 0x01, 0xd7, 0xe2, 0x88, 0x01, 0xd8, 0xe3, 0x88, 0x01, 0xd9, - 0xe4, 0x88, 0x41, 0xd0, 0xd1, 0x88, 0x01, 0xd1, 0xd2, 0x88, 0x01, 0xd2, - 0xd3, 0x88, 0x01, 0xd3, 0xd4, 0x88, 0x01, 0xd4, 0xd5, 0x88, 0x01, 0xd5, - 0xd6, 0x88, 0x01, 0xd6, 0xd7, 0x88, 0x01, 0xd7, 0xd8, 0x88, 0x01, 0xd8, - 0xd9, 0x88, 0x01, 0xd9, 0xda, 0x88, 0x41, 0xd0, 0xc7, 0x88, 0x01, 0xd1, - 0xc8, 0x88, 0x01, 0xd2, 0xc9, 0x88, 0x01, 0xd3, 0xca, 0x88, 0x01, 0xd4, - 0xcb, 0x88, 0x01, 0xd5, 0xcc, 0x88, 0x01, 0xd6, 0xcd, 0x88, 0x01, 0xd7, - 0xce, 0x88, 0x01, 0xd8, 0xcf, 0x88, 0x01, 0xd9, 0xd0, 0x88, 0x41, 0x90, + 0x97, 0x55, 0x98, 0x2b, 0x99, 0x01, 0xff, 0xd0, 0x95, 0x8d, 0x01, 0xd1, + 0x96, 0x8d, 0x01, 0xd2, 0x97, 0x8d, 0x01, 0xd3, 0x98, 0x8d, 0x01, 0xd4, + 0x99, 0x8d, 0x01, 0xd5, 0x9a, 0x8d, 0x01, 0xd6, 0x9b, 0x8d, 0x01, 0xd7, + 0x9c, 0x8d, 0x01, 0xd8, 0x9d, 0x8d, 0x01, 0xd9, 0x9e, 0x8d, 0x41, 0xd0, + 0x8b, 0x8d, 0x01, 0xd1, 0x8c, 0x8d, 0x01, 0xd2, 0x8d, 0x8d, 0x01, 0xd3, + 0x8e, 0x8d, 0x01, 0xd4, 0x8f, 0x8d, 0x01, 0xd5, 0x90, 0x8d, 0x01, 0xd6, + 0x91, 0x8d, 0x01, 0xd7, 0x92, 0x8d, 0x01, 0xd8, 0x93, 0x8d, 0x01, 0xd9, + 0x94, 0x8d, 0x41, 0xd0, 0x81, 0x8d, 0x01, 0xd1, 0x82, 0x8d, 0x01, 0xd2, + 0x83, 0x8d, 0x01, 0xd3, 0x84, 0x8d, 0x01, 0xd4, 0x85, 0x8d, 0x01, 0xd5, + 0x86, 0x8d, 0x01, 0xd6, 0x87, 0x8d, 0x01, 0xd7, 0x88, 0x8d, 0x01, 0xd8, + 0x89, 0x8d, 0x01, 0xd9, 0x8a, 0x8d, 0x41, 0xd0, 0xf7, 0x8a, 0x01, 0xd1, + 0xf8, 0x8a, 0x01, 0xd2, 0xf9, 0x8a, 0x01, 0xd3, 0xfa, 0x8a, 0x01, 0xd4, + 0xfb, 0x8a, 0x01, 0xd5, 0xfc, 0x8a, 0x01, 0xd6, 0xfd, 0x8a, 0x01, 0xd7, + 0xfe, 0x8a, 0x01, 0xd8, 0xff, 0x8a, 0x01, 0xd9, 0x80, 0x8d, 0x41, 0xd0, + 0xed, 0x8a, 0x01, 0xd1, 0xee, 0x8a, 0x01, 0xd2, 0xef, 0x8a, 0x01, 0xd3, + 0xf0, 0x8a, 0x01, 0xd4, 0xf1, 0x8a, 0x01, 0xd5, 0xf2, 0x8a, 0x01, 0xd6, + 0xf3, 0x8a, 0x01, 0xd7, 0xf4, 0x8a, 0x01, 0xd8, 0xf5, 0x8a, 0x01, 0xd9, + 0xf6, 0x8a, 0x41, 0xd0, 0xe3, 0x8a, 0x01, 0xd1, 0xe4, 0x8a, 0x01, 0xd2, + 0xe5, 0x8a, 0x01, 0xd3, 0xe6, 0x8a, 0x01, 0xd4, 0xe7, 0x8a, 0x01, 0xd5, + 0xe8, 0x8a, 0x01, 0xd6, 0xe9, 0x8a, 0x01, 0xd7, 0xea, 0x8a, 0x01, 0xd8, + 0xeb, 0x8a, 0x01, 0xd9, 0xec, 0x8a, 0x41, 0xd0, 0xd9, 0x8a, 0x01, 0xd1, + 0xda, 0x8a, 0x01, 0xd2, 0xdb, 0x8a, 0x01, 0xd3, 0xdc, 0x8a, 0x01, 0xd4, + 0xdd, 0x8a, 0x01, 0xd5, 0xde, 0x8a, 0x01, 0xd6, 0xdf, 0x8a, 0x01, 0xd7, + 0xe0, 0x8a, 0x01, 0xd8, 0xe1, 0x8a, 0x01, 0xd9, 0xe2, 0x8a, 0x41, 0xd0, + 0xcf, 0x8a, 0x01, 0xd1, 0xd0, 0x8a, 0x01, 0xd2, 0xd1, 0x8a, 0x01, 0xd3, + 0xd2, 0x8a, 0x01, 0xd4, 0xd3, 0x8a, 0x01, 0xd5, 0xd4, 0x8a, 0x01, 0xd6, + 0xd5, 0x8a, 0x01, 0xd7, 0xd6, 0x8a, 0x01, 0xd8, 0xd7, 0x8a, 0x01, 0xd9, + 0xd8, 0x8a, 0x41, 0xd0, 0xc5, 0x8a, 0x01, 0xd1, 0xc6, 0x8a, 0x01, 0xd2, + 0xc7, 0x8a, 0x01, 0xd3, 0xc8, 0x8a, 0x01, 0xd4, 0xc9, 0x8a, 0x01, 0xd5, + 0xca, 0x8a, 0x01, 0xd6, 0xcb, 0x8a, 0x01, 0xd7, 0xcc, 0x8a, 0x01, 0xd8, + 0xcd, 0x8a, 0x01, 0xd9, 0xce, 0x8a, 0x41, 0xd0, 0xbb, 0x8a, 0x01, 0xd1, + 0xbc, 0x8a, 0x01, 0xd2, 0xbd, 0x8a, 0x01, 0xd3, 0xbe, 0x8a, 0x01, 0xd4, + 0xbf, 0x8a, 0x01, 0xd5, 0xc0, 0x8a, 0x01, 0xd6, 0xc1, 0x8a, 0x01, 0xd7, + 0xc2, 0x8a, 0x01, 0xd8, 0xc3, 0x8a, 0x01, 0xd9, 0xc4, 0x8a, 0x41, 0x90, 0x80, 0x03, 0x91, 0xd5, 0x02, 0x92, 0xaa, 0x02, 0x93, 0xff, 0x01, 0x94, 0xd4, 0x01, 0x95, 0xa9, 0x01, 0x96, 0x7f, 0x97, 0x55, 0x98, 0x2b, 0x99, - 0x01, 0xff, 0xd0, 0xbd, 0x88, 0x01, 0xd1, 0xbe, 0x88, 0x01, 0xd2, 0xbf, - 0x88, 0x01, 0xd3, 0xc0, 0x88, 0x01, 0xd4, 0xc1, 0x88, 0x01, 0xd5, 0xc2, - 0x88, 0x01, 0xd6, 0xc3, 0x88, 0x01, 0xd7, 0xc4, 0x88, 0x01, 0xd8, 0xc5, - 0x88, 0x01, 0xd9, 0xc6, 0x88, 0x41, 0xd0, 0xb3, 0x88, 0x01, 0xd1, 0xb4, - 0x88, 0x01, 0xd2, 0xb5, 0x88, 0x01, 0xd3, 0xb6, 0x88, 0x01, 0xd4, 0xb7, - 0x88, 0x01, 0xd5, 0xb8, 0x88, 0x01, 0xd6, 0xb9, 0x88, 0x01, 0xd7, 0xba, - 0x88, 0x01, 0xd8, 0xbb, 0x88, 0x01, 0xd9, 0xbc, 0x88, 0x41, 0xd0, 0xa9, - 0x88, 0x01, 0xd1, 0xaa, 0x88, 0x01, 0xd2, 0xab, 0x88, 0x01, 0xd3, 0xac, - 0x88, 0x01, 0xd4, 0xad, 0x88, 0x01, 0xd5, 0xae, 0x88, 0x01, 0xd6, 0xaf, - 0x88, 0x01, 0xd7, 0xb0, 0x88, 0x01, 0xd8, 0xb1, 0x88, 0x01, 0xd9, 0xb2, - 0x88, 0x41, 0xd0, 0x9f, 0x88, 0x01, 0xd1, 0xa0, 0x88, 0x01, 0xd2, 0xa1, - 0x88, 0x01, 0xd3, 0xa2, 0x88, 0x01, 0xd4, 0xa3, 0x88, 0x01, 0xd5, 0xa4, - 0x88, 0x01, 0xd6, 0xa5, 0x88, 0x01, 0xd7, 0xa6, 0x88, 0x01, 0xd8, 0xa7, - 0x88, 0x01, 0xd9, 0xa8, 0x88, 0x41, 0xd0, 0x95, 0x88, 0x01, 0xd1, 0x96, - 0x88, 0x01, 0xd2, 0x97, 0x88, 0x01, 0xd3, 0x98, 0x88, 0x01, 0xd4, 0x99, - 0x88, 0x01, 0xd5, 0x9a, 0x88, 0x01, 0xd6, 0x9b, 0x88, 0x01, 0xd7, 0x9c, - 0x88, 0x01, 0xd8, 0x9d, 0x88, 0x01, 0xd9, 0x9e, 0x88, 0x41, 0xd0, 0x8b, - 0x88, 0x01, 0xd1, 0x8c, 0x88, 0x01, 0xd2, 0x8d, 0x88, 0x01, 0xd3, 0x8e, - 0x88, 0x01, 0xd4, 0x8f, 0x88, 0x01, 0xd5, 0x90, 0x88, 0x01, 0xd6, 0x91, - 0x88, 0x01, 0xd7, 0x92, 0x88, 0x01, 0xd8, 0x93, 0x88, 0x01, 0xd9, 0x94, - 0x88, 0x41, 0xd0, 0x81, 0x88, 0x01, 0xd1, 0x82, 0x88, 0x01, 0xd2, 0x83, - 0x88, 0x01, 0xd3, 0x84, 0x88, 0x01, 0xd4, 0x85, 0x88, 0x01, 0xd5, 0x86, - 0x88, 0x01, 0xd6, 0x87, 0x88, 0x01, 0xd7, 0x88, 0x88, 0x01, 0xd8, 0x89, - 0x88, 0x01, 0xd9, 0x8a, 0x88, 0x41, 0xd0, 0x77, 0x88, 0x01, 0xd1, 0x78, - 0x88, 0x01, 0xd2, 0x79, 0x88, 0x01, 0xd3, 0x7a, 0x88, 0x01, 0xd4, 0x7b, - 0x88, 0x01, 0xd5, 0x7c, 0x88, 0x01, 0xd6, 0x7d, 0x88, 0x01, 0xd7, 0x7e, - 0x88, 0x01, 0xd8, 0x7f, 0x88, 0x01, 0xd9, 0x80, 0x88, 0x41, 0xd0, 0x6d, - 0x88, 0x01, 0xd1, 0x6e, 0x88, 0x01, 0xd2, 0x6f, 0x88, 0x01, 0xd3, 0x70, - 0x88, 0x01, 0xd4, 0x71, 0x88, 0x01, 0xd5, 0x72, 0x88, 0x01, 0xd6, 0x73, - 0x88, 0x01, 0xd7, 0x74, 0x88, 0x01, 0xd8, 0x75, 0x88, 0x01, 0xd9, 0x76, - 0x88, 0x41, 0xd0, 0x63, 0x88, 0x01, 0xd1, 0x64, 0x88, 0x01, 0xd2, 0x65, - 0x88, 0x01, 0xd3, 0x66, 0x88, 0x01, 0xd4, 0x67, 0x88, 0x01, 0xd5, 0x68, - 0x88, 0x01, 0xd6, 0x69, 0x88, 0x01, 0xd7, 0x6a, 0x88, 0x01, 0xd8, 0x6b, - 0x88, 0x01, 0xd9, 0x6c, 0x88, 0x41, 0x90, 0x80, 0x03, 0x91, 0xd5, 0x02, + 0x01, 0xff, 0xd0, 0xb1, 0x8a, 0x01, 0xd1, 0xb2, 0x8a, 0x01, 0xd2, 0xb3, + 0x8a, 0x01, 0xd3, 0xb4, 0x8a, 0x01, 0xd4, 0xb5, 0x8a, 0x01, 0xd5, 0xb6, + 0x8a, 0x01, 0xd6, 0xb7, 0x8a, 0x01, 0xd7, 0xb8, 0x8a, 0x01, 0xd8, 0xb9, + 0x8a, 0x01, 0xd9, 0xba, 0x8a, 0x41, 0xd0, 0xa7, 0x8a, 0x01, 0xd1, 0xa8, + 0x8a, 0x01, 0xd2, 0xa9, 0x8a, 0x01, 0xd3, 0xaa, 0x8a, 0x01, 0xd4, 0xab, + 0x8a, 0x01, 0xd5, 0xac, 0x8a, 0x01, 0xd6, 0xad, 0x8a, 0x01, 0xd7, 0xae, + 0x8a, 0x01, 0xd8, 0xaf, 0x8a, 0x01, 0xd9, 0xb0, 0x8a, 0x41, 0xd0, 0x9d, + 0x8a, 0x01, 0xd1, 0x9e, 0x8a, 0x01, 0xd2, 0x9f, 0x8a, 0x01, 0xd3, 0xa0, + 0x8a, 0x01, 0xd4, 0xa1, 0x8a, 0x01, 0xd5, 0xa2, 0x8a, 0x01, 0xd6, 0xa3, + 0x8a, 0x01, 0xd7, 0xa4, 0x8a, 0x01, 0xd8, 0xa5, 0x8a, 0x01, 0xd9, 0xa6, + 0x8a, 0x41, 0xd0, 0x93, 0x8a, 0x01, 0xd1, 0x94, 0x8a, 0x01, 0xd2, 0x95, + 0x8a, 0x01, 0xd3, 0x96, 0x8a, 0x01, 0xd4, 0x97, 0x8a, 0x01, 0xd5, 0x98, + 0x8a, 0x01, 0xd6, 0x99, 0x8a, 0x01, 0xd7, 0x9a, 0x8a, 0x01, 0xd8, 0x9b, + 0x8a, 0x01, 0xd9, 0x9c, 0x8a, 0x41, 0xd0, 0x89, 0x8a, 0x01, 0xd1, 0x8a, + 0x8a, 0x01, 0xd2, 0x8b, 0x8a, 0x01, 0xd3, 0x8c, 0x8a, 0x01, 0xd4, 0x8d, + 0x8a, 0x01, 0xd5, 0x8e, 0x8a, 0x01, 0xd6, 0x8f, 0x8a, 0x01, 0xd7, 0x90, + 0x8a, 0x01, 0xd8, 0x91, 0x8a, 0x01, 0xd9, 0x92, 0x8a, 0x41, 0xd0, 0x7f, + 0x8a, 0x01, 0xd1, 0x80, 0x8a, 0x01, 0xd2, 0x81, 0x8a, 0x01, 0xd3, 0x82, + 0x8a, 0x01, 0xd4, 0x83, 0x8a, 0x01, 0xd5, 0x84, 0x8a, 0x01, 0xd6, 0x85, + 0x8a, 0x01, 0xd7, 0x86, 0x8a, 0x01, 0xd8, 0x87, 0x8a, 0x01, 0xd9, 0x88, + 0x8a, 0x41, 0xd0, 0x75, 0x8a, 0x01, 0xd1, 0x76, 0x8a, 0x01, 0xd2, 0x77, + 0x8a, 0x01, 0xd3, 0x78, 0x8a, 0x01, 0xd4, 0x79, 0x8a, 0x01, 0xd5, 0x7a, + 0x8a, 0x01, 0xd6, 0x7b, 0x8a, 0x01, 0xd7, 0x7c, 0x8a, 0x01, 0xd8, 0x7d, + 0x8a, 0x01, 0xd9, 0x7e, 0x8a, 0x41, 0xd0, 0x6b, 0x8a, 0x01, 0xd1, 0x6c, + 0x8a, 0x01, 0xd2, 0x6d, 0x8a, 0x01, 0xd3, 0x6e, 0x8a, 0x01, 0xd4, 0x6f, + 0x8a, 0x01, 0xd5, 0x70, 0x8a, 0x01, 0xd6, 0x71, 0x8a, 0x01, 0xd7, 0x72, + 0x8a, 0x01, 0xd8, 0x73, 0x8a, 0x01, 0xd9, 0x74, 0x8a, 0x41, 0xd0, 0x61, + 0x8a, 0x01, 0xd1, 0x62, 0x8a, 0x01, 0xd2, 0x63, 0x8a, 0x01, 0xd3, 0x64, + 0x8a, 0x01, 0xd4, 0x65, 0x8a, 0x01, 0xd5, 0x66, 0x8a, 0x01, 0xd6, 0x67, + 0x8a, 0x01, 0xd7, 0x68, 0x8a, 0x01, 0xd8, 0x69, 0x8a, 0x01, 0xd9, 0x6a, + 0x8a, 0x41, 0xd0, 0x57, 0x8a, 0x01, 0xd1, 0x58, 0x8a, 0x01, 0xd2, 0x59, + 0x8a, 0x01, 0xd3, 0x5a, 0x8a, 0x01, 0xd4, 0x5b, 0x8a, 0x01, 0xd5, 0x5c, + 0x8a, 0x01, 0xd6, 0x5d, 0x8a, 0x01, 0xd7, 0x5e, 0x8a, 0x01, 0xd8, 0x5f, + 0x8a, 0x01, 0xd9, 0x60, 0x8a, 0x41, 0x90, 0x80, 0x03, 0x91, 0xd5, 0x02, 0x92, 0xaa, 0x02, 0x93, 0xff, 0x01, 0x94, 0xd4, 0x01, 0x95, 0xa9, 0x01, - 0x96, 0x7f, 0x97, 0x55, 0x98, 0x2b, 0x99, 0x01, 0xff, 0xd0, 0x59, 0x88, - 0x01, 0xd1, 0x5a, 0x88, 0x01, 0xd2, 0x5b, 0x88, 0x01, 0xd3, 0x5c, 0x88, - 0x01, 0xd4, 0x5d, 0x88, 0x01, 0xd5, 0x5e, 0x88, 0x01, 0xd6, 0x5f, 0x88, - 0x01, 0xd7, 0x60, 0x88, 0x01, 0xd8, 0x61, 0x88, 0x01, 0xd9, 0x62, 0x88, - 0x41, 0xd0, 0x4f, 0x88, 0x01, 0xd1, 0x50, 0x88, 0x01, 0xd2, 0x51, 0x88, - 0x01, 0xd3, 0x52, 0x88, 0x01, 0xd4, 0x53, 0x88, 0x01, 0xd5, 0x54, 0x88, - 0x01, 0xd6, 0x55, 0x88, 0x01, 0xd7, 0x56, 0x88, 0x01, 0xd8, 0x57, 0x88, - 0x01, 0xd9, 0x58, 0x88, 0x41, 0xd0, 0x45, 0x88, 0x01, 0xd1, 0x46, 0x88, - 0x01, 0xd2, 0x47, 0x88, 0x01, 0xd3, 0x48, 0x88, 0x01, 0xd4, 0x49, 0x88, - 0x01, 0xd5, 0x4a, 0x88, 0x01, 0xd6, 0x4b, 0x88, 0x01, 0xd7, 0x4c, 0x88, - 0x01, 0xd8, 0x4d, 0x88, 0x01, 0xd9, 0x4e, 0x88, 0x41, 0xd0, 0x3b, 0x88, - 0x01, 0xd1, 0x3c, 0x88, 0x01, 0xd2, 0x3d, 0x88, 0x01, 0xd3, 0x3e, 0x88, - 0x01, 0xd4, 0x3f, 0x88, 0x01, 0xd5, 0x40, 0x88, 0x01, 0xd6, 0x41, 0x88, - 0x01, 0xd7, 0x42, 0x88, 0x01, 0xd8, 0x43, 0x88, 0x01, 0xd9, 0x44, 0x88, - 0x41, 0xd0, 0x31, 0x88, 0x01, 0xd1, 0x32, 0x88, 0x01, 0xd2, 0x33, 0x88, - 0x01, 0xd3, 0x34, 0x88, 0x01, 0xd4, 0x35, 0x88, 0x01, 0xd5, 0x36, 0x88, - 0x01, 0xd6, 0x37, 0x88, 0x01, 0xd7, 0x38, 0x88, 0x01, 0xd8, 0x39, 0x88, - 0x01, 0xd9, 0x3a, 0x88, 0x41, 0xd0, 0x27, 0x88, 0x01, 0xd1, 0x28, 0x88, - 0x01, 0xd2, 0x29, 0x88, 0x01, 0xd3, 0x2a, 0x88, 0x01, 0xd4, 0x2b, 0x88, - 0x01, 0xd5, 0x2c, 0x88, 0x01, 0xd6, 0x2d, 0x88, 0x01, 0xd7, 0x2e, 0x88, - 0x01, 0xd8, 0x2f, 0x88, 0x01, 0xd9, 0x30, 0x88, 0x41, 0xd0, 0x1d, 0x88, - 0x01, 0xd1, 0x1e, 0x88, 0x01, 0xd2, 0x1f, 0x88, 0x01, 0xd3, 0x20, 0x88, - 0x01, 0xd4, 0x21, 0x88, 0x01, 0xd5, 0x22, 0x88, 0x01, 0xd6, 0x23, 0x88, - 0x01, 0xd7, 0x24, 0x88, 0x01, 0xd8, 0x25, 0x88, 0x01, 0xd9, 0x26, 0x88, - 0x41, 0xd0, 0x13, 0x88, 0x01, 0xd1, 0x14, 0x88, 0x01, 0xd2, 0x15, 0x88, - 0x01, 0xd3, 0x16, 0x88, 0x01, 0xd4, 0x17, 0x88, 0x01, 0xd5, 0x18, 0x88, - 0x01, 0xd6, 0x19, 0x88, 0x01, 0xd7, 0x1a, 0x88, 0x01, 0xd8, 0x1b, 0x88, - 0x01, 0xd9, 0x1c, 0x88, 0x41, 0xd0, 0x09, 0x88, 0x01, 0xd1, 0x0a, 0x88, - 0x01, 0xd2, 0x0b, 0x88, 0x01, 0xd3, 0x0c, 0x88, 0x01, 0xd4, 0x0d, 0x88, - 0x01, 0xd5, 0x0e, 0x88, 0x01, 0xd6, 0x0f, 0x88, 0x01, 0xd7, 0x10, 0x88, - 0x01, 0xd8, 0x11, 0x88, 0x01, 0xd9, 0x12, 0x88, 0x41, 0xd1, 0x00, 0x88, - 0x01, 0xd2, 0x01, 0x88, 0x01, 0xd3, 0x02, 0x88, 0x01, 0xd4, 0x03, 0x88, - 0x01, 0xd5, 0x04, 0x88, 0x01, 0xd6, 0x05, 0x88, 0x01, 0xd7, 0x06, 0x88, - 0x01, 0xd8, 0x07, 0x88, 0x01, 0xd9, 0x08, 0x88, 0x41, 0x06, 0xc4, 0x06, - 0xb1, 0x03, 0x07, 0xc1, 0x05, 0x01, 0xff, 0xa1, 0x87, 0x03, 0x42, 0x16, - 0x00, 0xaa, 0x6a, 0x01, 0xa3, 0xf4, 0x02, 0xa4, 0xe7, 0x02, 0xa5, 0xd4, - 0x02, 0xa6, 0xc7, 0x02, 0xa7, 0xba, 0x02, 0xa8, 0xa6, 0x02, 0xa9, 0x93, - 0x02, 0xab, 0x86, 0x02, 0xac, 0xf9, 0x01, 0xad, 0xe2, 0x01, 0xae, 0xc9, - 0x01, 0xaf, 0xb6, 0x01, 0xb0, 0xa9, 0x01, 0x42, 0x71, 0x00, 0xb2, 0x6a, - 0x01, 0xb3, 0x84, 0x01, 0xb4, 0x72, 0xb5, 0x2a, 0xb6, 0x18, 0x42, 0xa9, - 0x01, 0xa6, 0x6a, 0x01, 0x42, 0x4c, 0x26, 0xba, 0x6a, 0x01, 0x42, 0x34, - 0x22, 0xa5, 0x6a, 0x01, 0x42, 0x59, 0x00, 0xbe, 0x6a, 0x41, 0xe3, 0x79, - 0x6a, 0x01, 0xf1, 0x7a, 0x6a, 0x01, 0xf8, 0x7b, 0x6a, 0x01, 0xfa, 0x78, - 0x6a, 0x41, 0xe3, 0x85, 0x6a, 0x01, 0xa5, 0x30, 0xa9, 0x0c, 0xf1, 0x86, - 0x6a, 0x01, 0xf8, 0x87, 0x6a, 0x01, 0xfa, 0x84, 0x6a, 0x41, 0xe3, 0x8d, - 0x6a, 0x01, 0xf1, 0x8e, 0x6a, 0x01, 0xb5, 0x08, 0xf8, 0x8f, 0x6a, 0x01, - 0xfa, 0x8c, 0x6a, 0x41, 0xe3, 0x99, 0x6a, 0x01, 0xf1, 0x9a, 0x6a, 0x01, - 0xf8, 0x9b, 0x6a, 0x01, 0xfa, 0x98, 0x6a, 0x41, 0xe3, 0x94, 0x6a, 0x01, - 0xf1, 0x96, 0x6a, 0x01, 0xf8, 0x97, 0x6a, 0x01, 0xfa, 0x95, 0x6a, 0x41, - 0xe1, 0xb0, 0x6a, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x6a, 0x01, 0x42, 0x15, - 0x06, 0xb6, 0x6a, 0x41, 0xe1, 0xa4, 0x6a, 0x01, 0xa8, 0x01, 0xff, 0xe1, - 0xb4, 0x6a, 0x01, 0x04, 0x76, 0x33, 0x01, 0xff, 0x43, 0x9c, 0xf0, 0x93, - 0x6a, 0x01, 0x43, 0x5c, 0xf1, 0x92, 0x6a, 0x41, 0xe1, 0xa7, 0x6a, 0x01, - 0x42, 0x22, 0x00, 0xa9, 0x6a, 0x41, 0xe3, 0x71, 0x6a, 0x01, 0xf1, 0x72, - 0x6a, 0x01, 0xf8, 0x73, 0x6a, 0x01, 0xfa, 0x70, 0x6a, 0x41, 0xe1, 0xac, - 0x6a, 0x01, 0x42, 0x24, 0x02, 0xa3, 0x6a, 0x01, 0x42, 0x22, 0x00, 0xb3, - 0x6a, 0x01, 0x42, 0x34, 0x22, 0xa8, 0x6a, 0x41, 0xe1, 0xab, 0x6a, 0x01, - 0xe3, 0x9d, 0x6a, 0x01, 0xf1, 0x9e, 0x6a, 0x01, 0xf8, 0x9f, 0x6a, 0x01, - 0xfa, 0x9c, 0x6a, 0x41, 0xe1, 0xae, 0x6a, 0x01, 0x47, 0x14, 0xd1, 0x91, - 0x6a, 0x41, 0xe1, 0xa0, 0x6a, 0x01, 0x42, 0x22, 0x00, 0xa1, 0x6a, 0x41, - 0xe3, 0x81, 0x6a, 0x01, 0xf1, 0x82, 0x6a, 0x01, 0xf8, 0x83, 0x6a, 0x01, - 0xfa, 0x80, 0x6a, 0x41, 0xe1, 0xad, 0x6a, 0x01, 0xb4, 0x01, 0xff, 0xe1, - 0xaf, 0x6a, 0x01, 0x42, 0x12, 0x00, 0xb8, 0x6a, 0x41, 0xe1, 0xa2, 0x6a, - 0x01, 0x42, 0x22, 0x00, 0xb7, 0x6a, 0x41, 0xe1, 0xbb, 0x6a, 0x01, 0x47, - 0x98, 0xb6, 0x90, 0x6a, 0x41, 0xe3, 0x7d, 0x6a, 0x01, 0xf1, 0x7e, 0x6a, - 0x01, 0xf8, 0x7f, 0x6a, 0x01, 0xfa, 0x7c, 0x6a, 0x41, 0xe1, 0xb1, 0x6a, - 0x01, 0x42, 0x22, 0x00, 0xbc, 0x6a, 0x41, 0xe1, 0xb5, 0x6a, 0x01, 0x42, - 0x22, 0x00, 0xbd, 0x6a, 0x41, 0xe3, 0x75, 0x6a, 0x01, 0xf1, 0x76, 0x6a, - 0x01, 0xb7, 0x08, 0xf8, 0x77, 0x6a, 0x01, 0xfa, 0x74, 0x6a, 0x41, 0xe3, - 0x89, 0x6a, 0x01, 0xf1, 0x8a, 0x6a, 0x01, 0xf8, 0x8b, 0x6a, 0x01, 0xfa, - 0x88, 0x6a, 0x41, 0x45, 0xc3, 0x0a, 0xc8, 0x6a, 0x01, 0xa6, 0x2e, 0x44, - 0x46, 0x2a, 0xc9, 0x6a, 0x01, 0x43, 0xbf, 0x0a, 0xc1, 0x6a, 0x01, 0xb3, - 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xc0, 0x6a, 0x41, 0x44, 0x25, 0x01, - 0xc3, 0x6a, 0x01, 0x42, 0x15, 0x02, 0xc2, 0x6a, 0x41, 0x44, 0x27, 0x1d, - 0xc7, 0x6a, 0x01, 0x42, 0x60, 0x25, 0xc6, 0x6a, 0x41, 0x43, 0xa7, 0x05, - 0xc5, 0x6a, 0x01, 0x43, 0xcb, 0x06, 0xc4, 0x6a, 0x41, 0x43, 0x67, 0x00, - 0xd4, 0xfa, 0x01, 0x03, 0x8a, 0x4e, 0x01, 0xff, 0xa1, 0x9a, 0x06, 0xa3, - 0x8b, 0x06, 0xa4, 0xb0, 0x05, 0x09, 0xb3, 0x58, 0x93, 0x04, 0x52, 0x6e, - 0x51, 0xee, 0x1f, 0x01, 0xac, 0xbc, 0x02, 0x4a, 0xb7, 0xab, 0xf4, 0x0b, - 0x00, 0x07, 0x2f, 0x39, 0x95, 0x02, 0x42, 0xe9, 0x04, 0xd0, 0x0b, 0x00, - 0x57, 0x83, 0x2f, 0xff, 0x1f, 0x01, 0x4a, 0xf6, 0x7e, 0xf9, 0x0b, 0x00, - 0xb3, 0x5b, 0xb4, 0x42, 0x0b, 0xd1, 0x75, 0x0c, 0x54, 0x83, 0x45, 0xe4, - 0x1f, 0x01, 0x49, 0x19, 0xbf, 0xf5, 0x0b, 0x40, 0xa1, 0x24, 0xe5, 0xc6, - 0x0b, 0x80, 0x1b, 0xe9, 0xbf, 0x0b, 0x80, 0x12, 0xef, 0xca, 0x0b, 0x80, - 0x09, 0xf5, 0xc1, 0x0b, 0xc0, 0x00, 0xf5, 0xc2, 0x0b, 0x40, 0xef, 0xcb, - 0x0b, 0x40, 0xe9, 0xc0, 0x0b, 0x40, 0xe5, 0xc7, 0x0b, 0x40, 0xe1, 0xbe, - 0x0b, 0x00, 0xe9, 0xc8, 0x0b, 0x00, 0xf5, 0xcc, 0x0b, 0x40, 0x49, 0x17, - 0xbb, 0xed, 0x1f, 0x01, 0x0b, 0x7d, 0x9f, 0x01, 0xff, 0x4b, 0x45, 0x98, - 0xe8, 0x1f, 0x01, 0x4b, 0x12, 0x9e, 0xe9, 0x1f, 0x41, 0x4c, 0x61, 0x8a, - 0xe7, 0x1f, 0x01, 0x04, 0x30, 0x03, 0x0c, 0x49, 0x8c, 0xbb, 0xec, 0x1f, - 0x01, 0x51, 0xc0, 0x5c, 0xef, 0x1f, 0x41, 0xa1, 0x81, 0x01, 0x46, 0x84, - 0xd7, 0xd6, 0x1f, 0x01, 0xab, 0x64, 0x02, 0x57, 0x16, 0x4e, 0x43, 0x50, - 0xc5, 0xd5, 0x1f, 0x01, 0xb0, 0x2c, 0x47, 0x43, 0xbe, 0xd8, 0x1f, 0x01, - 0xb6, 0x01, 0xff, 0xa1, 0x15, 0x43, 0xf2, 0x2c, 0xe3, 0x1f, 0x01, 0xa9, - 0x01, 0xff, 0x44, 0x5d, 0x23, 0xcd, 0x0b, 0x00, 0x45, 0xa3, 0x4a, 0x83, - 0x0b, 0x40, 0x48, 0xca, 0xc4, 0xf1, 0x1f, 0x01, 0x46, 0x5e, 0xdc, 0xe0, - 0x1f, 0x41, 0xa1, 0x06, 0x42, 0x10, 0x00, 0xdf, 0x1f, 0x41, 0x44, 0x0c, - 0x76, 0xe1, 0x1f, 0x01, 0x43, 0xff, 0x04, 0xde, 0x1f, 0x01, 0x46, 0x84, - 0xdd, 0xdb, 0x1f, 0x41, 0x47, 0x93, 0xcf, 0xdc, 0x1f, 0x01, 0x47, 0x7c, - 0xd3, 0xf0, 0x1f, 0x01, 0x49, 0x41, 0xbe, 0xd9, 0x1f, 0x41, 0x44, 0xaa, - 0xeb, 0xdd, 0x1f, 0x01, 0xb5, 0x01, 0xff, 0x44, 0x95, 0x7c, 0xda, 0x1f, - 0x01, 0x43, 0xe4, 0x7d, 0xe2, 0x1f, 0x41, 0x48, 0x5a, 0xc1, 0xd7, 0x1f, - 0x01, 0x47, 0xd1, 0x15, 0x82, 0x0b, 0x40, 0x04, 0xbf, 0x0a, 0x0c, 0x44, - 0x2f, 0x03, 0xfa, 0x0b, 0x00, 0x43, 0xb0, 0x06, 0xf0, 0x0b, 0x40, 0x47, - 0x22, 0x11, 0xf1, 0x0b, 0x00, 0x48, 0xd5, 0x5c, 0xf2, 0x0b, 0x40, 0x48, - 0x65, 0x46, 0xe6, 0x1f, 0x01, 0x06, 0xc2, 0x05, 0x01, 0xff, 0xe1, 0x85, - 0x0b, 0x80, 0xb1, 0x01, 0x42, 0x37, 0x00, 0x9a, 0x0b, 0x00, 0xe5, 0x8e, - 0x0b, 0x80, 0xa1, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x0b, 0x00, 0xe9, 0x87, - 0x0b, 0x80, 0x91, 0x01, 0x42, 0xbd, 0x26, 0x9c, 0x0b, 0x00, 0x42, 0x1b, - 0x02, 0x95, 0x0b, 0x00, 0xac, 0x72, 0x42, 0x6c, 0x00, 0xae, 0x0b, 0x00, - 0xae, 0x4e, 0xef, 0x92, 0x0b, 0x80, 0x45, 0x42, 0x6c, 0x09, 0xaa, 0x0b, - 0x00, 0xb2, 0x33, 0xb3, 0x21, 0xb4, 0x15, 0xf5, 0x89, 0x0b, 0x80, 0x0c, - 0x42, 0xa6, 0x0a, 0xb5, 0x0b, 0x00, 0x42, 0x34, 0x22, 0xaf, 0x0b, 0x40, - 0xf5, 0x8a, 0x0b, 0x40, 0xe1, 0xa4, 0x0b, 0x00, 0x42, 0x12, 0x00, 0x9f, - 0x0b, 0x40, 0xe1, 0xb8, 0x0b, 0x00, 0x42, 0x22, 0x00, 0xb6, 0x0b, 0x00, - 0x42, 0x15, 0x06, 0xb7, 0x0b, 0x40, 0xe1, 0xb0, 0x0b, 0x00, 0x42, 0x71, - 0x00, 0xb1, 0x0b, 0x40, 0xef, 0x93, 0x0b, 0x40, 0xe1, 0xa8, 0x0b, 0x00, - 0x42, 0x24, 0x02, 0x99, 0x0b, 0x00, 0xae, 0x06, 0x42, 0x34, 0x22, 0x9e, - 0x0b, 0x40, 0xe1, 0xa3, 0x0b, 0x00, 0x42, 0xff, 0x04, 0xa9, 0x0b, 0x40, - 0xe1, 0xb2, 0x0b, 0x00, 0xac, 0x01, 0xff, 0xe1, 0xb3, 0x0b, 0x00, 0x42, - 0x74, 0x00, 0xb4, 0x0b, 0x40, 0xe9, 0x88, 0x0b, 0x40, 0xe5, 0x8f, 0x0b, - 0x40, 0xe1, 0x86, 0x0b, 0x00, 0xe9, 0x90, 0x0b, 0x00, 0xf5, 0x94, 0x0b, - 0x40, 0x58, 0x9d, 0x27, 0xd4, 0x1f, 0x01, 0x04, 0xbf, 0x0a, 0x27, 0x06, - 0x24, 0x01, 0x01, 0xff, 0x4a, 0x9d, 0xa7, 0xc6, 0x1f, 0x01, 0x48, 0x2a, - 0x01, 0xd3, 0x1f, 0x01, 0x04, 0x5f, 0x25, 0x06, 0x4a, 0xef, 0xaf, 0xcd, - 0x1f, 0x41, 0x46, 0xc7, 0xae, 0xce, 0x1f, 0x01, 0x49, 0x10, 0xbf, 0xc7, - 0x1f, 0x41, 0x05, 0xc3, 0x0a, 0x59, 0xa6, 0x4b, 0x05, 0x1f, 0x2c, 0x3f, - 0x58, 0xad, 0x29, 0xc1, 0x1f, 0x01, 0x47, 0x2a, 0x01, 0xd0, 0x1f, 0x01, - 0x04, 0x5f, 0x25, 0x1d, 0xb4, 0x01, 0xff, 0x44, 0xfb, 0x1a, 0xcb, 0x1f, - 0x01, 0xa8, 0x06, 0x48, 0x34, 0x25, 0xc8, 0x1f, 0x41, 0x4b, 0xbd, 0x8e, - 0xc5, 0x1f, 0x01, 0x59, 0x23, 0x25, 0xc0, 0x1f, 0x41, 0x06, 0x3e, 0xd8, - 0x06, 0x48, 0x07, 0xbf, 0xc3, 0x1f, 0x41, 0xd1, 0xc9, 0x1f, 0x01, 0xd2, - 0xca, 0x1f, 0x41, 0xd1, 0xd1, 0x1f, 0x01, 0xd2, 0xd2, 0x1f, 0x41, 0x44, - 0xf2, 0xac, 0xcf, 0x1f, 0x01, 0x47, 0x45, 0xd1, 0xc4, 0x1f, 0x41, 0xe8, - 0xcc, 0x1f, 0x01, 0x44, 0x38, 0x25, 0xc2, 0x1f, 0x41, 0x47, 0x8a, 0xcc, - 0xf3, 0x0b, 0x00, 0x49, 0xb6, 0xb5, 0xf6, 0x0b, 0x00, 0x05, 0xc5, 0x06, - 0x06, 0x53, 0x8c, 0x4b, 0xe5, 0x1f, 0x41, 0x45, 0xc3, 0x0a, 0xee, 0x0b, - 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xef, 0x0b, 0x00, 0x43, 0xbf, 0x0a, - 0xe7, 0x0b, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xe6, 0x0b, - 0x40, 0x44, 0x25, 0x01, 0xe9, 0x0b, 0x00, 0x42, 0x15, 0x02, 0xe8, 0x0b, - 0x40, 0x44, 0x27, 0x1d, 0xed, 0x0b, 0x00, 0x42, 0x60, 0x25, 0xec, 0x0b, - 0x40, 0x43, 0xa7, 0x05, 0xeb, 0x0b, 0x00, 0x43, 0xcb, 0x06, 0xea, 0x0b, - 0x40, 0x4a, 0x46, 0x98, 0xf7, 0x0b, 0x00, 0x4b, 0x3d, 0xa2, 0xea, 0x1f, - 0x41, 0x4b, 0xc5, 0x9d, 0xeb, 0x1f, 0x01, 0x4c, 0x25, 0x93, 0xf8, 0x0b, - 0x00, 0x4d, 0x9b, 0x74, 0xd7, 0x0b, 0x40, 0x44, 0x31, 0x11, 0x78, 0xd3, - 0x01, 0x43, 0xbf, 0x0a, 0x77, 0xd3, 0x41, 0x48, 0x1a, 0xc3, 0x61, 0xf9, - 0x01, 0x03, 0x96, 0x0a, 0x01, 0xff, 0x51, 0x93, 0x56, 0xb9, 0x16, 0x01, - 0x06, 0xc4, 0x06, 0xd1, 0x02, 0x07, 0xc1, 0x05, 0x4e, 0x05, 0x2f, 0x03, - 0x2d, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x1a, 0xe5, 0xb2, 0x16, 0x01, - 0xe9, 0xae, 0x16, 0x81, 0x0d, 0xef, 0xb4, 0x16, 0x01, 0xf5, 0xb0, 0x16, - 0xc1, 0x00, 0xf5, 0xb1, 0x16, 0x41, 0xe9, 0xaf, 0x16, 0x41, 0xe1, 0xad, - 0x16, 0x01, 0xe9, 0xb3, 0x16, 0x01, 0xf5, 0xb5, 0x16, 0x41, 0x48, 0xd0, - 0x15, 0xab, 0x16, 0x01, 0x45, 0x5a, 0x3e, 0xb7, 0x16, 0x01, 0x02, 0x02, - 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, 0xb6, 0x16, 0x01, 0x45, 0xa3, 0x4a, - 0xac, 0x16, 0x41, 0xe1, 0x80, 0x16, 0x81, 0xe7, 0x01, 0xa2, 0xda, 0x01, - 0xa3, 0xcd, 0x01, 0xa4, 0xb4, 0x01, 0xe5, 0x86, 0x16, 0x01, 0xa7, 0xa3, - 0x01, 0x42, 0x22, 0x00, 0xa9, 0x16, 0x01, 0xe9, 0x82, 0x16, 0x81, 0x93, - 0x01, 0xaa, 0x86, 0x01, 0xab, 0x7a, 0x42, 0x74, 0x00, 0xa5, 0x16, 0x01, - 0x42, 0x6c, 0x00, 0xa2, 0x16, 0x01, 0xae, 0x56, 0xef, 0x88, 0x16, 0x01, - 0xb0, 0x46, 0xb2, 0x3a, 0xb3, 0x2e, 0xb4, 0x15, 0xf5, 0x84, 0x16, 0x81, - 0x0c, 0x42, 0xa6, 0x0a, 0xa6, 0x16, 0x01, 0x42, 0x34, 0x22, 0xa3, 0x16, - 0x41, 0xf5, 0x85, 0x16, 0x41, 0xe1, 0x99, 0x16, 0x01, 0x42, 0x22, 0x00, - 0x9a, 0x16, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x94, 0x16, 0x01, 0x42, 0x22, - 0x00, 0x95, 0x16, 0x41, 0xe1, 0xa8, 0x16, 0x01, 0x42, 0x22, 0x00, 0xa7, - 0x16, 0x41, 0xe1, 0xa4, 0x16, 0x01, 0x42, 0x71, 0x00, 0xaa, 0x16, 0x41, - 0xe1, 0x9e, 0x16, 0x01, 0x42, 0x22, 0x00, 0x9f, 0x16, 0x41, 0xe1, 0x9d, - 0x16, 0x01, 0x42, 0x24, 0x02, 0x8e, 0x16, 0x01, 0x42, 0xff, 0x04, 0x98, - 0x16, 0x01, 0x42, 0x34, 0x22, 0x93, 0x16, 0x41, 0xe1, 0x8a, 0x16, 0x01, - 0x42, 0x22, 0x00, 0x8b, 0x16, 0x41, 0xe1, 0x91, 0x16, 0x01, 0x42, 0x22, - 0x00, 0x92, 0x16, 0x41, 0xe9, 0x83, 0x16, 0x41, 0xe1, 0x8c, 0x16, 0x01, - 0x42, 0x22, 0x00, 0x8d, 0x16, 0x41, 0xe1, 0x9b, 0x16, 0x01, 0xa4, 0x06, - 0x42, 0x22, 0x00, 0x9c, 0x16, 0x41, 0xe1, 0x96, 0x16, 0x01, 0x42, 0x22, - 0x00, 0x97, 0x16, 0x41, 0xe1, 0x8f, 0x16, 0x01, 0x42, 0x22, 0x00, 0x90, - 0x16, 0x41, 0xe1, 0xa0, 0x16, 0x01, 0x42, 0x22, 0x00, 0xa1, 0x16, 0x41, - 0xe1, 0x81, 0x16, 0x01, 0xe9, 0x87, 0x16, 0x01, 0x4a, 0xa1, 0xad, 0xb8, - 0x16, 0x01, 0xf5, 0x89, 0x16, 0x41, 0x45, 0xc3, 0x0a, 0xc8, 0x16, 0x01, - 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xc9, 0x16, 0x01, 0x43, 0xbf, 0x0a, 0xc1, - 0x16, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xc0, 0x16, 0x41, - 0x44, 0x25, 0x01, 0xc3, 0x16, 0x01, 0x42, 0x15, 0x02, 0xc2, 0x16, 0x41, - 0x44, 0x27, 0x1d, 0xc7, 0x16, 0x01, 0x42, 0x60, 0x25, 0xc6, 0x16, 0x41, - 0x43, 0xa7, 0x05, 0xc5, 0x16, 0x01, 0x43, 0xcb, 0x06, 0xc4, 0x16, 0x41, - 0x0a, 0x3b, 0xaa, 0xfc, 0x09, 0x05, 0x2a, 0xa1, 0xc1, 0x03, 0x05, 0xf4, - 0xe8, 0x01, 0xff, 0x07, 0xc1, 0x05, 0x91, 0x01, 0x05, 0x52, 0xe5, 0x80, - 0x01, 0x07, 0xf3, 0x15, 0x5c, 0x09, 0x69, 0xbd, 0x40, 0x06, 0x6c, 0x38, - 0x01, 0xff, 0xa1, 0x23, 0xe5, 0xb5, 0xaa, 0x00, 0xe9, 0xb2, 0xaa, 0x80, - 0x16, 0xef, 0xb6, 0xaa, 0x00, 0xf5, 0xb4, 0xaa, 0xc0, 0x00, 0xe1, 0xba, - 0xaa, 0x00, 0xe5, 0xb3, 0xaa, 0xc0, 0x00, 0xe1, 0xb9, 0xaa, 0x40, 0xe1, - 0xb8, 0xaa, 0x40, 0xe1, 0xb1, 0xaa, 0x00, 0xed, 0xbe, 0xaa, 0x00, 0xee, - 0xbd, 0xaa, 0x00, 0x42, 0x87, 0x13, 0xbb, 0xaa, 0x00, 0xf9, 0xbc, 0xaa, - 0x40, 0x42, 0x69, 0x18, 0xbf, 0xaa, 0x00, 0x45, 0x29, 0xe6, 0xc0, 0xaa, - 0x00, 0x44, 0x66, 0xef, 0xc2, 0xaa, 0x00, 0x43, 0xff, 0x07, 0xc1, 0xaa, - 0x40, 0x46, 0x9a, 0xd9, 0xde, 0xaa, 0x00, 0x02, 0x22, 0x03, 0x0c, 0x45, - 0x29, 0xe6, 0xdc, 0xaa, 0x00, 0x43, 0x1f, 0x84, 0xdd, 0xaa, 0x40, 0x45, - 0x21, 0xe4, 0xdf, 0xaa, 0x00, 0xee, 0xdb, 0xaa, 0x40, 0x43, 0x1c, 0x01, - 0xb0, 0xaa, 0x00, 0x43, 0xae, 0x02, 0xb7, 0xaa, 0x40, 0x05, 0xf9, 0x0a, - 0x93, 0x01, 0x04, 0xdd, 0x04, 0x01, 0xff, 0x42, 0x5d, 0x00, 0x9a, 0xaa, - 0x00, 0xa3, 0x7c, 0x42, 0x3b, 0x01, 0x92, 0xaa, 0x00, 0x42, 0x3d, 0x03, - 0xa0, 0xaa, 0x00, 0x42, 0xb7, 0x13, 0x86, 0xaa, 0x00, 0x42, 0x0b, 0x00, - 0xac, 0xaa, 0x00, 0xab, 0x52, 0x42, 0x13, 0x01, 0xa8, 0xaa, 0x00, 0x42, - 0x98, 0x07, 0xa2, 0xaa, 0x00, 0xae, 0x34, 0xef, 0xae, 0xaa, 0x00, 0xb0, - 0x24, 0x42, 0xd0, 0x00, 0xa6, 0xaa, 0x00, 0x42, 0x35, 0x03, 0x8e, 0xaa, - 0x00, 0xb4, 0x0c, 0x42, 0x68, 0x1c, 0xaa, 0xaa, 0x00, 0x42, 0x60, 0x46, - 0xa4, 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x96, 0xaa, 0x00, 0xef, 0x94, 0xaa, - 0x40, 0x42, 0x0b, 0x00, 0x9e, 0xaa, 0x00, 0xef, 0x9c, 0xaa, 0x40, 0x42, - 0xb7, 0x13, 0x88, 0xaa, 0x00, 0xef, 0x98, 0xaa, 0x00, 0x42, 0x60, 0x46, - 0x90, 0xaa, 0x40, 0xa8, 0x04, 0xef, 0x80, 0xaa, 0x40, 0x42, 0x0b, 0x00, - 0x84, 0xaa, 0x00, 0xef, 0x82, 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x8c, 0xaa, - 0x00, 0xef, 0x8a, 0xaa, 0x40, 0x42, 0x5d, 0x00, 0x9b, 0xaa, 0x00, 0xa3, - 0x7c, 0x42, 0x3b, 0x01, 0x93, 0xaa, 0x00, 0x42, 0x3d, 0x03, 0xa1, 0xaa, - 0x00, 0x42, 0xb7, 0x13, 0x87, 0xaa, 0x00, 0x42, 0x0b, 0x00, 0xad, 0xaa, - 0x00, 0xab, 0x52, 0x42, 0x13, 0x01, 0xa9, 0xaa, 0x00, 0x42, 0x98, 0x07, - 0xa3, 0xaa, 0x00, 0xae, 0x34, 0xef, 0xaf, 0xaa, 0x00, 0xb0, 0x24, 0x42, - 0xd0, 0x00, 0xa7, 0xaa, 0x00, 0x42, 0x35, 0x03, 0x8f, 0xaa, 0x00, 0xb4, - 0x0c, 0x42, 0x68, 0x1c, 0xab, 0xaa, 0x00, 0x42, 0x60, 0x46, 0xa5, 0xaa, - 0x40, 0x42, 0x0b, 0x00, 0x97, 0xaa, 0x00, 0xef, 0x95, 0xaa, 0x40, 0x42, - 0x0b, 0x00, 0x9f, 0xaa, 0x00, 0xef, 0x9d, 0xaa, 0x40, 0x42, 0xb7, 0x13, - 0x89, 0xaa, 0x00, 0xef, 0x99, 0xaa, 0x00, 0x42, 0x60, 0x46, 0x91, 0xaa, - 0x40, 0xa8, 0x04, 0xef, 0x81, 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x85, 0xaa, - 0x00, 0xef, 0x83, 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x8d, 0xaa, 0x00, 0xef, - 0x8b, 0xaa, 0x40, 0x02, 0xe8, 0x04, 0xe9, 0x05, 0x0b, 0xef, 0x9a, 0xa2, - 0x05, 0x07, 0xc1, 0x05, 0xdd, 0x02, 0x05, 0x2f, 0x03, 0xac, 0x01, 0x0b, - 0x2a, 0xa1, 0x66, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xe1, 0x61, 0x1a, 0x80, - 0x50, 0xe5, 0x6e, 0x1a, 0x00, 0xe9, 0x65, 0x1a, 0x80, 0x43, 0x47, 0x42, - 0xd0, 0x62, 0x1a, 0x00, 0xef, 0x6b, 0x1a, 0x80, 0x20, 0xb4, 0x12, 0xf5, - 0x69, 0x1a, 0xc0, 0x00, 0xe5, 0x67, 0x1a, 0x00, 0xf5, 0x6a, 0x1a, 0xc0, - 0x00, 0xe5, 0x68, 0x1a, 0x40, 0x46, 0x61, 0xd3, 0x64, 0x1a, 0x00, 0x46, - 0x52, 0xd9, 0x72, 0x1a, 0x40, 0x02, 0x5a, 0x00, 0x08, 0xef, 0x70, 0x1a, - 0x00, 0xf9, 0x6d, 0x1a, 0x40, 0x45, 0x5c, 0x00, 0x73, 0x1a, 0x00, 0x45, - 0xf5, 0x06, 0x6c, 0x1a, 0x40, 0xe9, 0x66, 0x1a, 0x40, 0xe1, 0x63, 0x1a, - 0x00, 0xe5, 0x6f, 0x1a, 0x00, 0xe9, 0x71, 0x1a, 0x40, 0x45, 0xc3, 0x0a, - 0x98, 0x1a, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x99, 0x1a, 0x00, 0x43, - 0xbf, 0x0a, 0x91, 0x1a, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, - 0x90, 0x1a, 0x40, 0x44, 0x25, 0x01, 0x93, 0x1a, 0x00, 0x42, 0x15, 0x02, - 0x92, 0x1a, 0x40, 0x44, 0x27, 0x1d, 0x97, 0x1a, 0x00, 0x42, 0x60, 0x25, - 0x96, 0x1a, 0x40, 0x43, 0xa7, 0x05, 0x95, 0x1a, 0x00, 0x43, 0xcb, 0x06, - 0x94, 0x1a, 0x40, 0x45, 0xd3, 0xe1, 0xad, 0x1a, 0x00, 0x46, 0x14, 0xd8, - 0xa5, 0x1a, 0x00, 0xa8, 0x91, 0x01, 0xab, 0x61, 0x04, 0x6d, 0x44, 0x44, - 0xb2, 0x36, 0x02, 0x15, 0x06, 0x19, 0x05, 0x05, 0x31, 0x0d, 0x45, 0xf9, - 0x06, 0xa0, 0x1a, 0xc0, 0x00, 0x44, 0xc6, 0xef, 0xa1, 0x1a, 0x40, 0xd1, - 0x75, 0x1a, 0x00, 0xd2, 0x76, 0x1a, 0x40, 0x43, 0x49, 0x8c, 0x60, 0x1a, - 0x00, 0x45, 0x2c, 0xe8, 0xaa, 0x1a, 0x80, 0x06, 0x43, 0xb9, 0x19, 0xa2, - 0x1a, 0x40, 0x43, 0x6c, 0x74, 0xab, 0x1a, 0x40, 0x46, 0x7c, 0xd6, 0x7a, - 0x1a, 0x00, 0x54, 0x23, 0x41, 0xa6, 0x1a, 0x40, 0x44, 0x8a, 0xa5, 0x74, - 0x1a, 0x80, 0x0c, 0x43, 0x1f, 0x84, 0x7b, 0x1a, 0x00, 0x45, 0x53, 0xe9, - 0xa7, 0x1a, 0x40, 0x44, 0xee, 0x42, 0x58, 0x1a, 0x40, 0x43, 0x31, 0x12, - 0xa8, 0x1a, 0x80, 0x21, 0x43, 0x1d, 0x53, 0xa3, 0x1a, 0x00, 0x04, 0x22, - 0xed, 0x01, 0xff, 0x06, 0x04, 0x31, 0x06, 0x4a, 0x73, 0xa4, 0x7c, 0x1a, - 0x40, 0xd3, 0x77, 0x1a, 0x00, 0xd4, 0x78, 0x1a, 0x00, 0xd5, 0x79, 0x1a, - 0x40, 0x43, 0x6c, 0x74, 0xa9, 0x1a, 0x40, 0x43, 0x1c, 0x01, 0xac, 0x1a, - 0x00, 0x42, 0xdc, 0x67, 0xa4, 0x1a, 0x40, 0xe1, 0x4b, 0x1a, 0x00, 0x42, - 0x16, 0x00, 0x37, 0x1a, 0x00, 0x42, 0xa1, 0x10, 0x2f, 0x1a, 0x00, 0x42, - 0x27, 0x01, 0x51, 0x1a, 0x00, 0x48, 0xf2, 0xc3, 0x54, 0x1a, 0x00, 0x05, - 0xf9, 0x0a, 0xbf, 0x01, 0xe9, 0x4d, 0x1a, 0x80, 0xb5, 0x01, 0xac, 0x46, - 0x42, 0x6c, 0x00, 0x3e, 0x1a, 0x00, 0xae, 0x2e, 0x42, 0x69, 0x05, 0x52, - 0x1a, 0x00, 0xb2, 0x0f, 0xf5, 0x4f, 0x1a, 0x80, 0x06, 0x42, 0xa9, 0x01, - 0x45, 0x1a, 0x40, 0xf5, 0x50, 0x1a, 0x40, 0xe1, 0x41, 0x1a, 0x80, 0x06, - 0x42, 0x87, 0x13, 0x42, 0x1a, 0x40, 0x42, 0xff, 0x04, 0x31, 0x1a, 0x00, - 0x42, 0x12, 0x00, 0x2d, 0x1a, 0x40, 0xe1, 0x36, 0x1a, 0x00, 0x42, 0x24, - 0x02, 0x26, 0x1a, 0x00, 0x42, 0x34, 0x22, 0x2c, 0x1a, 0x40, 0xe1, 0x43, - 0x1a, 0x80, 0x64, 0x42, 0x74, 0x00, 0x4a, 0x1a, 0x00, 0x03, 0xd1, 0x00, - 0x06, 0x42, 0x87, 0x13, 0x44, 0x1a, 0x40, 0xa3, 0x48, 0x42, 0xe1, 0x07, - 0x3c, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x4c, 0x1a, 0x00, 0xab, 0x2a, 0xb0, - 0x1e, 0x45, 0xdc, 0x41, 0x30, 0x1a, 0x00, 0x42, 0x15, 0x06, 0x2a, 0x1a, - 0x00, 0xb4, 0x06, 0x42, 0x34, 0x22, 0x3f, 0x1a, 0x40, 0xe1, 0x34, 0x1a, - 0x00, 0x42, 0x22, 0x00, 0x35, 0x1a, 0x40, 0xe1, 0x3b, 0x1a, 0x00, 0x42, - 0x22, 0x00, 0x3d, 0x1a, 0x40, 0xe1, 0x23, 0x1a, 0x00, 0x42, 0x22, 0x00, - 0x25, 0x1a, 0x00, 0x42, 0x4c, 0x26, 0x24, 0x1a, 0x40, 0xe1, 0x29, 0x1a, - 0x00, 0x42, 0x22, 0x00, 0x2b, 0x1a, 0x40, 0xe5, 0x53, 0x1a, 0x40, 0xe9, - 0x4e, 0x1a, 0x40, 0xa3, 0x54, 0x42, 0xe1, 0x07, 0x3a, 0x1a, 0x00, 0x42, - 0x22, 0x00, 0x49, 0x1a, 0x00, 0xab, 0x36, 0xb0, 0x2a, 0x45, 0xdc, 0x41, - 0x2e, 0x1a, 0x00, 0xb3, 0x12, 0xb4, 0x06, 0x42, 0x34, 0x22, 0x40, 0x1a, - 0x40, 0xe1, 0x32, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x33, 0x1a, 0x40, 0xe1, - 0x48, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x46, 0x1a, 0x00, 0x42, 0x15, 0x06, - 0x47, 0x1a, 0x40, 0xe1, 0x38, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x39, 0x1a, - 0x40, 0xe1, 0x20, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x21, 0x1a, 0x00, 0x42, - 0x4c, 0x26, 0x22, 0x1a, 0x40, 0xe1, 0x27, 0x1a, 0x00, 0x42, 0x22, 0x00, - 0x28, 0x1a, 0x40, 0x45, 0xc3, 0x0a, 0x88, 0x1a, 0x00, 0xa6, 0x2e, 0x44, - 0x46, 0x2a, 0x89, 0x1a, 0x00, 0x43, 0xbf, 0x0a, 0x81, 0x1a, 0x00, 0xb3, - 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x80, 0x1a, 0x40, 0x44, 0x25, 0x01, - 0x83, 0x1a, 0x00, 0x42, 0x15, 0x02, 0x82, 0x1a, 0x40, 0x44, 0x27, 0x1d, - 0x87, 0x1a, 0x00, 0x42, 0x60, 0x25, 0x86, 0x1a, 0x40, 0x43, 0xa7, 0x05, - 0x85, 0x1a, 0x00, 0x43, 0xcb, 0x06, 0x84, 0x1a, 0x40, 0x59, 0x42, 0x24, - 0x7f, 0x1a, 0x00, 0x0d, 0x6f, 0x32, 0x01, 0xff, 0x42, 0x16, 0x00, 0x5d, - 0x1a, 0x00, 0x49, 0x97, 0xb6, 0x59, 0x1a, 0x00, 0x54, 0xd7, 0x41, 0x5b, - 0x1a, 0x00, 0xac, 0x1d, 0xad, 0x06, 0x42, 0x15, 0x06, 0x5e, 0x1a, 0x40, - 0xe1, 0x5c, 0x1a, 0x00, 0x06, 0x7d, 0x32, 0x01, 0xff, 0x42, 0x74, 0x00, - 0x56, 0x1a, 0x00, 0x42, 0x71, 0x00, 0x55, 0x1a, 0x40, 0x4a, 0xff, 0xa4, - 0x57, 0x1a, 0x00, 0x45, 0xc0, 0x34, 0x5a, 0x1a, 0x40, 0xe1, 0x63, 0x19, - 0x80, 0xb0, 0x01, 0xe5, 0x6b, 0x19, 0x80, 0xa2, 0x01, 0x42, 0xe1, 0x07, - 0x5c, 0x19, 0x00, 0x42, 0x22, 0x00, 0x5e, 0x19, 0x00, 0xe9, 0x64, 0x19, - 0x00, 0xab, 0x85, 0x01, 0x42, 0x74, 0x00, 0x58, 0x19, 0x00, 0x42, 0x6c, - 0x00, 0x5b, 0x19, 0x00, 0xae, 0x6d, 0xef, 0x69, 0x19, 0x80, 0x64, 0xb0, - 0x58, 0x42, 0xf4, 0x13, 0x5f, 0x19, 0x00, 0x42, 0x15, 0x06, 0x54, 0x19, - 0x00, 0xb4, 0x1b, 0xf5, 0x67, 0x19, 0x80, 0x12, 0x42, 0xa6, 0x0a, 0x5d, - 0x19, 0x00, 0x42, 0x4c, 0x26, 0x51, 0x19, 0x00, 0x42, 0x34, 0x22, 0x55, - 0x19, 0x40, 0xe5, 0x6a, 0x19, 0x40, 0xe1, 0x56, 0x19, 0x00, 0x42, 0x22, - 0x00, 0x57, 0x19, 0x00, 0x04, 0x5e, 0x1f, 0x0d, 0xb3, 0x01, 0xff, 0xe1, - 0x53, 0x19, 0x00, 0x42, 0x22, 0x00, 0x61, 0x19, 0x40, 0xd2, 0x70, 0x19, - 0x00, 0xd3, 0x71, 0x19, 0x00, 0xd4, 0x72, 0x19, 0x00, 0xd5, 0x73, 0x19, - 0x00, 0xd6, 0x74, 0x19, 0x40, 0xe1, 0x59, 0x19, 0x00, 0x42, 0x22, 0x00, - 0x5a, 0x19, 0x40, 0xef, 0x68, 0x19, 0x40, 0xe1, 0x62, 0x19, 0x00, 0x42, - 0x24, 0x02, 0x52, 0x19, 0x40, 0xe1, 0x50, 0x19, 0x00, 0x42, 0x22, 0x00, - 0x60, 0x19, 0x40, 0xe5, 0x65, 0x19, 0x00, 0xe8, 0x66, 0x19, 0x40, 0xe9, - 0x6d, 0x19, 0x00, 0x42, 0x87, 0x13, 0x6c, 0x19, 0x40, 0x80, 0x82, 0x02, - 0x05, 0x29, 0xe1, 0x70, 0x06, 0x2a, 0xd7, 0x01, 0xff, 0x07, 0xc1, 0x05, - 0x0d, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xe9, 0x72, 0x17, 0x00, 0xf5, 0x73, - 0x17, 0x40, 0xe1, 0x60, 0x17, 0x00, 0x42, 0x16, 0x00, 0x6a, 0x17, 0x00, - 0x42, 0xa1, 0x10, 0x67, 0x17, 0x00, 0x42, 0x24, 0x02, 0x64, 0x17, 0x00, - 0xe9, 0x61, 0x17, 0x00, 0x42, 0x1b, 0x02, 0x63, 0x17, 0x00, 0x42, 0x74, - 0x00, 0x6e, 0x17, 0x00, 0x42, 0x6c, 0x00, 0x6b, 0x17, 0x00, 0xae, 0x22, - 0x42, 0x6c, 0x09, 0x69, 0x17, 0x00, 0x42, 0x15, 0x06, 0x70, 0x17, 0x00, - 0x42, 0x12, 0x00, 0x66, 0x17, 0x00, 0xf5, 0x62, 0x17, 0x00, 0x42, 0xa9, - 0x01, 0x6f, 0x17, 0x00, 0x42, 0x34, 0x22, 0x6c, 0x17, 0x40, 0xe1, 0x68, - 0x17, 0x00, 0x42, 0x24, 0x02, 0x65, 0x17, 0x40, 0x07, 0xc1, 0x05, 0x1d, - 0x05, 0x2f, 0x03, 0x0d, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xe9, 0x12, 0x17, - 0x00, 0xf5, 0x13, 0x17, 0x40, 0x48, 0xfe, 0x86, 0x15, 0x17, 0x00, 0x46, - 0x5b, 0x23, 0x14, 0x17, 0x40, 0xe1, 0x00, 0x17, 0x80, 0x62, 0x42, 0x16, - 0x00, 0x0a, 0x17, 0x00, 0x42, 0xa1, 0x10, 0x07, 0x17, 0x00, 0x42, 0x24, - 0x02, 0x04, 0x17, 0x00, 0x42, 0x22, 0x00, 0x11, 0x17, 0x00, 0xe9, 0x01, - 0x17, 0x00, 0x42, 0x1b, 0x02, 0x03, 0x17, 0x00, 0x42, 0x74, 0x00, 0x0e, - 0x17, 0x00, 0x42, 0x6c, 0x00, 0x0b, 0x17, 0x00, 0xae, 0x28, 0x42, 0x6c, - 0x09, 0x09, 0x17, 0x00, 0x42, 0x71, 0x00, 0x0d, 0x17, 0x00, 0x42, 0x15, - 0x06, 0x10, 0x17, 0x00, 0x42, 0x12, 0x00, 0x06, 0x17, 0x00, 0xf5, 0x02, - 0x17, 0x00, 0x42, 0xa9, 0x01, 0x0f, 0x17, 0x00, 0x42, 0x34, 0x22, 0x0c, - 0x17, 0x40, 0xe1, 0x08, 0x17, 0x00, 0x42, 0x24, 0x02, 0x05, 0x17, 0x40, - 0x49, 0x0a, 0xbc, 0x1f, 0x17, 0x40, 0xa1, 0x82, 0x04, 0xa3, 0xe1, 0x03, - 0xa4, 0x92, 0x03, 0xa5, 0x83, 0x03, 0x49, 0x15, 0x16, 0x2e, 0x00, 0x0e, - 0x02, 0x87, 0x00, 0xec, 0x02, 0x4c, 0x15, 0x8e, 0x2d, 0x00, 0x0e, 0xac, - 0x63, 0x4b, 0x12, 0x9e, 0x23, 0x00, 0x0e, 0xb0, 0x4f, 0x02, 0x7c, 0x00, - 0x3f, 0xb2, 0x20, 0xb3, 0x0c, 0x45, 0xad, 0x22, 0x7e, 0x00, 0x0e, 0x4d, - 0x7e, 0x0b, 0x7c, 0x00, 0x4e, 0x48, 0x6f, 0x58, 0x3b, 0x00, 0x0e, 0x46, - 0x6a, 0x30, 0x2f, 0x00, 0x0e, 0x44, 0x88, 0x4b, 0x20, 0x00, 0x4e, 0x4e, - 0xcd, 0x70, 0x5c, 0x00, 0x0e, 0x05, 0xc9, 0x00, 0x01, 0xff, 0x4d, 0x23, - 0x0b, 0x7d, 0x00, 0x0e, 0x4b, 0x50, 0x21, 0x29, 0x00, 0x0e, 0x4e, 0x27, - 0x26, 0x5d, 0x00, 0x4e, 0x4b, 0xd8, 0x33, 0x3f, 0x00, 0x0e, 0x4c, 0xf0, - 0x04, 0x22, 0x00, 0x4e, 0x4b, 0xc6, 0x99, 0x25, 0x00, 0x0e, 0x48, 0x46, - 0x70, 0x2b, 0x00, 0x4e, 0x05, 0xb4, 0x05, 0x24, 0xa5, 0x06, 0x47, 0xac, - 0x88, 0x5f, 0x00, 0x4e, 0x03, 0xc5, 0x00, 0x06, 0x4c, 0x9d, 0x93, 0x3c, - 0x00, 0x4e, 0x4d, 0x23, 0x0b, 0x7b, 0x00, 0x0e, 0x4b, 0x50, 0x21, 0x28, - 0x00, 0x0e, 0x4e, 0x27, 0x26, 0x5b, 0x00, 0x4e, 0x0f, 0xb9, 0x05, 0x6d, - 0x0d, 0x4b, 0x08, 0x01, 0xff, 0xe1, 0x61, 0x00, 0x0e, 0xe2, 0x62, 0x00, - 0x0e, 0xe3, 0x63, 0x00, 0x0e, 0xe4, 0x64, 0x00, 0x0e, 0xe5, 0x65, 0x00, - 0x0e, 0xe6, 0x66, 0x00, 0x0e, 0xe7, 0x67, 0x00, 0x0e, 0xe8, 0x68, 0x00, - 0x0e, 0xe9, 0x69, 0x00, 0x0e, 0xea, 0x6a, 0x00, 0x0e, 0xeb, 0x6b, 0x00, - 0x0e, 0xec, 0x6c, 0x00, 0x0e, 0xed, 0x6d, 0x00, 0x0e, 0xee, 0x6e, 0x00, - 0x0e, 0xef, 0x6f, 0x00, 0x0e, 0xf0, 0x70, 0x00, 0x0e, 0xf1, 0x71, 0x00, - 0x0e, 0xf2, 0x72, 0x00, 0x0e, 0xf3, 0x73, 0x00, 0x0e, 0xf4, 0x74, 0x00, - 0x0e, 0xf5, 0x75, 0x00, 0x0e, 0xf6, 0x76, 0x00, 0x0e, 0xf7, 0x77, 0x00, - 0x0e, 0xf8, 0x78, 0x00, 0x0e, 0xf9, 0x79, 0x00, 0x0e, 0xfa, 0x7a, 0x00, - 0x4e, 0xe1, 0x41, 0x00, 0x0e, 0xe2, 0x42, 0x00, 0x0e, 0xe3, 0x43, 0x00, - 0x0e, 0xe4, 0x44, 0x00, 0x0e, 0xe5, 0x45, 0x00, 0x0e, 0xe6, 0x46, 0x00, - 0x0e, 0xe7, 0x47, 0x00, 0x0e, 0xe8, 0x48, 0x00, 0x0e, 0xe9, 0x49, 0x00, - 0x0e, 0xea, 0x4a, 0x00, 0x0e, 0xeb, 0x4b, 0x00, 0x0e, 0xec, 0x4c, 0x00, - 0x0e, 0xed, 0x4d, 0x00, 0x0e, 0xee, 0x4e, 0x00, 0x0e, 0xef, 0x4f, 0x00, - 0x0e, 0xf0, 0x50, 0x00, 0x0e, 0xf1, 0x51, 0x00, 0x0e, 0xf2, 0x52, 0x00, - 0x0e, 0xf3, 0x53, 0x00, 0x0e, 0xf4, 0x54, 0x00, 0x0e, 0xf5, 0x55, 0x00, - 0x0e, 0xf6, 0x56, 0x00, 0x0e, 0xf7, 0x57, 0x00, 0x0e, 0xf8, 0x58, 0x00, - 0x0e, 0xf9, 0x59, 0x00, 0x0e, 0xfa, 0x5a, 0x00, 0x4e, 0x4a, 0x8f, 0x22, - 0x60, 0x00, 0x0e, 0x4f, 0xf9, 0x58, 0x3e, 0x00, 0x4e, 0x4a, 0xfa, 0x12, - 0x3d, 0x00, 0x0e, 0x4f, 0xae, 0x00, 0x21, 0x00, 0x4e, 0x05, 0xc5, 0x06, - 0x06, 0x4a, 0xf6, 0x98, 0x24, 0x00, 0x4e, 0x45, 0xc3, 0x0a, 0x38, 0x00, - 0x0e, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x39, 0x00, 0x0e, 0x43, 0xbf, 0x0a, - 0x31, 0x00, 0x0e, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x30, 0x00, - 0x4e, 0x44, 0x25, 0x01, 0x33, 0x00, 0x0e, 0x42, 0x15, 0x02, 0x32, 0x00, - 0x4e, 0x44, 0x27, 0x1d, 0x37, 0x00, 0x0e, 0x42, 0x60, 0x25, 0x36, 0x00, - 0x4e, 0x43, 0xa7, 0x05, 0x35, 0x00, 0x0e, 0x43, 0xcb, 0x06, 0x34, 0x00, - 0x4e, 0x50, 0xa5, 0x04, 0x5e, 0x00, 0x0e, 0xaf, 0x01, 0xff, 0x43, 0x03, - 0x12, 0x3a, 0x00, 0x0e, 0x02, 0xea, 0x04, 0x01, 0xff, 0xe1, 0x2c, 0x00, - 0x0e, 0x49, 0x34, 0xb6, 0x40, 0x00, 0x4e, 0x48, 0x2e, 0x3d, 0x26, 0x00, - 0x0e, 0x49, 0x92, 0x35, 0x27, 0x00, 0x0e, 0x47, 0xee, 0x0c, 0x2a, 0x00, - 0x4e, 0x43, 0x2f, 0x76, 0x96, 0xf9, 0x01, 0x45, 0x1d, 0x49, 0x55, 0xf4, - 0x41, 0x4c, 0x59, 0x89, 0xcc, 0x29, 0x00, 0xa1, 0xd3, 0x83, 0x01, 0xa3, - 0xb6, 0x82, 0x01, 0xa5, 0xe0, 0x7d, 0xa8, 0xb7, 0x74, 0xa9, 0xec, 0x3d, - 0xab, 0xbf, 0x3d, 0xac, 0x95, 0x3c, 0xad, 0xdf, 0x37, 0xae, 0xa4, 0x37, - 0xaf, 0xc8, 0x2c, 0xb0, 0xd0, 0x2a, 0x02, 0x7c, 0x00, 0xbe, 0x18, 0xb4, - 0xf4, 0x15, 0xb5, 0xa8, 0x0a, 0xb7, 0x8d, 0x0a, 0xb9, 0x01, 0xff, 0x0b, - 0xc8, 0x9c, 0xfa, 0x07, 0xad, 0xb2, 0x05, 0xae, 0xa3, 0x05, 0x02, 0x0d, - 0x00, 0x01, 0xff, 0x03, 0xc3, 0x71, 0x06, 0x43, 0x8b, 0x09, 0x89, 0xf4, - 0x41, 0x51, 0xb0, 0x4e, 0x0f, 0x07, 0x00, 0x47, 0x9f, 0xcc, 0x4a, 0x07, - 0x00, 0x02, 0xe8, 0x04, 0xed, 0x04, 0x0d, 0x6c, 0x80, 0xdc, 0x04, 0xa5, - 0xc2, 0x04, 0x4c, 0x25, 0x8d, 0x40, 0x07, 0x00, 0xa8, 0x85, 0x04, 0x07, - 0xc1, 0x05, 0xca, 0x01, 0x45, 0x60, 0x27, 0x49, 0x07, 0x00, 0x0d, 0xf1, - 0x84, 0xb3, 0x01, 0x07, 0x17, 0xd2, 0x9c, 0x01, 0x49, 0xef, 0xbb, 0x41, - 0x07, 0x00, 0xb2, 0x78, 0x02, 0x6f, 0x00, 0x3a, 0xb4, 0x17, 0x07, 0x19, - 0xd5, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x33, 0x07, 0x00, 0x45, 0xf5, 0x06, - 0x34, 0x07, 0x00, 0x46, 0x0e, 0x1f, 0x35, 0x07, 0x40, 0x0a, 0x5f, 0x12, - 0x11, 0x11, 0x36, 0x5e, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x43, 0x07, 0x00, - 0x45, 0xf5, 0x06, 0x44, 0x07, 0x40, 0x45, 0x5c, 0x00, 0x45, 0x07, 0x00, - 0x45, 0xf5, 0x06, 0x46, 0x07, 0x40, 0x08, 0xb2, 0xc1, 0x18, 0x0a, 0x79, - 0xad, 0x01, 0xff, 0x45, 0xc4, 0x3a, 0x03, 0x07, 0x80, 0x06, 0x49, 0x15, - 0x16, 0x01, 0x07, 0x40, 0x4c, 0xb9, 0x89, 0x08, 0x07, 0x40, 0x45, 0xc4, - 0x3a, 0x04, 0x07, 0x80, 0x06, 0x49, 0x15, 0x16, 0x02, 0x07, 0x40, 0x08, - 0xb9, 0x89, 0x01, 0xff, 0x44, 0xc3, 0x00, 0x09, 0x07, 0x00, 0x45, 0xc8, - 0x00, 0x09, 0x07, 0x40, 0x05, 0x92, 0xe1, 0x0c, 0x47, 0xe5, 0xd3, 0x42, - 0x07, 0x00, 0x44, 0xce, 0xef, 0x3f, 0x07, 0x40, 0x45, 0x5c, 0x00, 0x36, - 0x07, 0x00, 0x45, 0xf5, 0x06, 0x37, 0x07, 0x40, 0x45, 0x5c, 0x00, 0x30, - 0x07, 0x00, 0x45, 0xf5, 0x06, 0x31, 0x07, 0x00, 0x46, 0x0e, 0x1f, 0x32, - 0x07, 0x40, 0x45, 0x5c, 0x00, 0x47, 0x07, 0x00, 0x45, 0xf5, 0x06, 0x48, - 0x07, 0x40, 0x45, 0xc5, 0x66, 0x10, 0x07, 0x00, 0x44, 0x0a, 0xec, 0x12, - 0x07, 0x00, 0xa4, 0x9b, 0x02, 0xe5, 0x25, 0x07, 0x00, 0x4d, 0x56, 0x81, - 0x24, 0x07, 0x00, 0x45, 0x77, 0xe3, 0x13, 0x07, 0x80, 0x83, 0x02, 0x42, - 0xb0, 0x01, 0x17, 0x07, 0x80, 0xf5, 0x01, 0x44, 0x8e, 0xed, 0x1f, 0x07, - 0x00, 0x46, 0x96, 0xda, 0x20, 0x07, 0x00, 0xad, 0x96, 0x01, 0x43, 0x54, - 0x22, 0x22, 0x07, 0x00, 0x42, 0x6f, 0x02, 0x26, 0x07, 0x80, 0x72, 0x44, - 0x1a, 0xd5, 0x29, 0x07, 0x00, 0xb2, 0x5e, 0xb3, 0x2e, 0xb4, 0x19, 0x43, - 0xc0, 0x88, 0x18, 0x07, 0x00, 0x44, 0xf2, 0xef, 0x1d, 0x07, 0x80, 0x06, - 0x44, 0x9c, 0x73, 0x19, 0x07, 0x40, 0x43, 0xbd, 0x14, 0x1e, 0x07, 0x40, - 0x42, 0x9a, 0x43, 0x2c, 0x07, 0x00, 0x43, 0x39, 0x25, 0x1b, 0x07, 0xc0, - 0x00, 0x49, 0x05, 0xb2, 0x1c, 0x07, 0x40, 0x44, 0x88, 0xe7, 0x28, 0x07, - 0x00, 0x46, 0x5d, 0x81, 0x23, 0x07, 0x00, 0x43, 0x0e, 0x16, 0x2b, 0x07, - 0x00, 0x07, 0xf1, 0xd0, 0x06, 0x50, 0xba, 0x66, 0x11, 0x07, 0x40, 0x42, - 0xa0, 0x19, 0x4f, 0x07, 0x00, 0x45, 0xc1, 0xe4, 0x4e, 0x07, 0x00, 0x45, - 0x71, 0xe9, 0x4d, 0x07, 0x40, 0x4a, 0xf7, 0xa7, 0x27, 0x07, 0x00, 0x43, - 0x82, 0x0c, 0x2a, 0x07, 0x40, 0x06, 0xb2, 0xdc, 0x01, 0xff, 0x45, 0xb0, - 0xe1, 0x2d, 0x07, 0x00, 0x47, 0x7f, 0xcd, 0x2f, 0x07, 0x00, 0x46, 0x0a, - 0xd9, 0x2e, 0x07, 0x40, 0x09, 0x91, 0xb3, 0x06, 0x42, 0x29, 0x02, 0x21, - 0x07, 0x40, 0x43, 0x50, 0x2a, 0x66, 0x08, 0x00, 0x42, 0xbd, 0x26, 0x61, - 0x08, 0x00, 0x02, 0x0f, 0x07, 0x2c, 0xae, 0x12, 0x42, 0x71, 0x00, 0x67, - 0x08, 0x00, 0x43, 0x59, 0x20, 0x6a, 0x08, 0x00, 0x43, 0x30, 0x28, 0x63, - 0x08, 0x40, 0x42, 0x24, 0x02, 0x60, 0x08, 0x00, 0xae, 0x06, 0x42, 0x34, - 0x22, 0x62, 0x08, 0x40, 0xe1, 0x64, 0x08, 0x00, 0x42, 0xff, 0x04, 0x65, - 0x08, 0x40, 0xe1, 0x68, 0x08, 0x00, 0x42, 0x74, 0x00, 0x69, 0x08, 0x40, - 0x42, 0x53, 0x00, 0x1a, 0x07, 0x40, 0x49, 0x05, 0xb2, 0x14, 0x07, 0x40, - 0x45, 0xf0, 0x52, 0x15, 0x07, 0x00, 0x52, 0xe8, 0x52, 0x16, 0x07, 0x40, - 0x08, 0xfa, 0xc0, 0x1e, 0x04, 0x9c, 0x7f, 0x06, 0x4f, 0xcd, 0x6f, 0x05, - 0x07, 0x40, 0x80, 0x06, 0x4d, 0x98, 0x7e, 0x3c, 0x07, 0x40, 0x45, 0x5c, - 0x00, 0x3a, 0x07, 0x00, 0x45, 0xf5, 0x06, 0x3b, 0x07, 0x40, 0x4a, 0xb3, - 0xa5, 0x0d, 0x07, 0x00, 0x49, 0x9d, 0xb9, 0x0c, 0x07, 0x00, 0x46, 0xa0, - 0xb9, 0x0b, 0x07, 0x40, 0x4f, 0xec, 0x6e, 0x00, 0x07, 0x00, 0x05, 0x9a, - 0x7e, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x3d, 0x07, 0x00, 0x45, 0xf5, 0x06, - 0x3e, 0x07, 0x40, 0x47, 0x1c, 0x01, 0x39, 0x07, 0x00, 0x4a, 0x0b, 0x00, - 0x38, 0x07, 0x40, 0x0b, 0xa7, 0x9c, 0x06, 0x49, 0x51, 0xba, 0x0a, 0x07, - 0x40, 0x44, 0xc3, 0x00, 0x06, 0x07, 0x00, 0x45, 0xc8, 0x00, 0x07, 0x07, - 0x40, 0x46, 0xa6, 0xd6, 0x4d, 0xf5, 0x01, 0x4d, 0x80, 0x73, 0x16, 0x00, - 0x40, 0x08, 0xd4, 0x20, 0x06, 0x45, 0x84, 0xe5, 0x2f, 0x23, 0x40, 0x4b, - 0x9d, 0x50, 0x06, 0x24, 0x00, 0xa2, 0xa6, 0x02, 0x02, 0x37, 0x00, 0x95, - 0x02, 0xa4, 0xc7, 0x01, 0xa5, 0x96, 0x01, 0xa6, 0x87, 0x01, 0x4f, 0x0d, - 0x6c, 0x1d, 0x24, 0x00, 0x55, 0x08, 0x3b, 0x09, 0x24, 0x00, 0x49, 0x2c, - 0x20, 0x0a, 0x24, 0x00, 0x4d, 0xed, 0x83, 0x45, 0xf5, 0x01, 0xae, 0x59, - 0x50, 0xda, 0x64, 0x1e, 0x24, 0x00, 0xb3, 0x12, 0x52, 0xaa, 0x54, 0x97, - 0x2b, 0x00, 0x4e, 0x96, 0x7c, 0x1f, 0x24, 0x00, 0x53, 0x8d, 0x4d, 0x0b, - 0x24, 0x40, 0x4f, 0x1f, 0x69, 0x4f, 0x21, 0x00, 0x05, 0xa0, 0xa9, 0x29, - 0x44, 0x88, 0x4b, 0x20, 0x24, 0x00, 0x08, 0x24, 0x4c, 0x13, 0x49, 0xa8, - 0xbd, 0x1a, 0x24, 0x80, 0x06, 0x4f, 0x7e, 0x73, 0x16, 0x24, 0x40, 0x49, - 0x52, 0x2d, 0x26, 0x24, 0x40, 0x47, 0xac, 0xce, 0x01, 0x24, 0x00, 0x44, - 0x96, 0x2f, 0x02, 0x24, 0x40, 0x42, 0x9e, 0x01, 0x0f, 0x24, 0x00, 0x43, - 0xfd, 0x07, 0x0e, 0x24, 0x40, 0xa5, 0x06, 0x43, 0x16, 0x16, 0x00, 0x24, - 0x40, 0x52, 0x96, 0x50, 0x15, 0x24, 0x00, 0x45, 0x2b, 0x20, 0x24, 0x24, - 0x40, 0x4d, 0x81, 0x82, 0x1c, 0x24, 0x00, 0x48, 0xc2, 0xc6, 0x0c, 0x24, - 0x40, 0xae, 0x06, 0x45, 0x56, 0x69, 0x1b, 0x24, 0x40, 0x05, 0x17, 0x05, - 0x06, 0x45, 0xfb, 0xe6, 0x05, 0x24, 0x40, 0x46, 0x19, 0x04, 0x19, 0x24, - 0x00, 0xb4, 0x01, 0xff, 0x43, 0xae, 0x06, 0x03, 0x24, 0x00, 0x4b, 0x93, - 0x9f, 0x04, 0x24, 0xc0, 0x00, 0x46, 0x32, 0x01, 0x17, 0x24, 0x40, 0x4f, - 0x4c, 0x69, 0x10, 0x24, 0x00, 0xa5, 0x01, 0xff, 0x44, 0xcd, 0x79, 0x21, - 0x24, 0x80, 0x20, 0x0d, 0x7f, 0x88, 0x01, 0xff, 0x44, 0xca, 0x06, 0x14, - 0x24, 0x00, 0x43, 0xbf, 0x0a, 0x11, 0x24, 0x00, 0xb4, 0x01, 0xff, 0x44, - 0x25, 0x01, 0x13, 0x24, 0x00, 0x42, 0x15, 0x02, 0x12, 0x24, 0x40, 0x80, - 0x01, 0xff, 0x48, 0x53, 0x2d, 0x25, 0x24, 0x00, 0x51, 0xc2, 0x5a, 0x29, - 0x24, 0x00, 0x5e, 0x12, 0x14, 0x28, 0x24, 0x00, 0x59, 0xa0, 0x25, 0x27, - 0x24, 0x40, 0x44, 0x64, 0x2b, 0x18, 0x24, 0x00, 0x4d, 0x6a, 0x86, 0x0d, - 0x24, 0x40, 0x48, 0xa2, 0xc0, 0x08, 0x24, 0x00, 0x43, 0x10, 0x09, 0x07, - 0x24, 0x40, 0x07, 0xc1, 0x05, 0x4d, 0x0c, 0xf9, 0x91, 0x39, 0x05, 0x2f, - 0x03, 0x1b, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xe1, 0x23, 0xa8, 0x00, 0xe5, - 0x26, 0xa8, 0x00, 0xe9, 0x24, 0xa8, 0x00, 0x42, 0x69, 0x05, 0x27, 0xa8, - 0x00, 0xf5, 0x25, 0xa8, 0x40, 0xa1, 0x0c, 0x48, 0xca, 0xc2, 0x02, 0xa8, - 0x00, 0x47, 0x73, 0x63, 0x06, 0xa8, 0x40, 0x50, 0x6a, 0x63, 0x2c, 0xa8, - 0x00, 0x47, 0xd1, 0x15, 0x0b, 0xa8, 0x40, 0xd1, 0x28, 0xa8, 0x00, 0xd2, - 0x29, 0xa8, 0x00, 0xd3, 0x2a, 0xa8, 0x00, 0xd4, 0x2b, 0xa8, 0x40, 0xe1, - 0x00, 0xa8, 0x00, 0xa2, 0xa9, 0x01, 0xa3, 0x9c, 0x01, 0xa4, 0x83, 0x01, - 0xe5, 0x04, 0xa8, 0x00, 0xa7, 0x73, 0x42, 0x0b, 0x00, 0x22, 0xa8, 0x00, - 0xe9, 0x01, 0xa8, 0x00, 0xaa, 0x5d, 0xab, 0x51, 0x42, 0x13, 0x01, 0x1f, - 0xa8, 0x00, 0x42, 0x98, 0x07, 0x1d, 0xa8, 0x00, 0x42, 0xb4, 0x01, 0x18, - 0xa8, 0x00, 0xef, 0x05, 0xa8, 0x00, 0xb0, 0x2f, 0xb2, 0x23, 0x42, 0x35, - 0x03, 0x21, 0xa8, 0x00, 0xb4, 0x04, 0xf5, 0x03, 0xa8, 0x40, 0x42, 0x0b, - 0x00, 0x15, 0xa8, 0x00, 0xef, 0x14, 0xa8, 0x00, 0xb4, 0x01, 0xff, 0x42, - 0x0b, 0x00, 0x11, 0xa8, 0x00, 0xef, 0x10, 0xa8, 0x40, 0xef, 0x1e, 0xa8, - 0x00, 0x42, 0xd0, 0x00, 0x20, 0xa8, 0x40, 0x42, 0x0b, 0x00, 0x1a, 0xa8, - 0x00, 0xef, 0x19, 0xa8, 0x40, 0x42, 0x0b, 0x00, 0x08, 0xa8, 0x00, 0xef, - 0x07, 0xa8, 0x40, 0x42, 0x0b, 0x00, 0x0f, 0xa8, 0x00, 0xef, 0x0e, 0xa8, - 0x40, 0x42, 0x0b, 0x00, 0x0a, 0xa8, 0x00, 0xef, 0x09, 0xa8, 0x40, 0xa4, - 0x0a, 0x42, 0x0b, 0x00, 0x17, 0xa8, 0x00, 0xef, 0x16, 0xa8, 0x40, 0x42, - 0x0b, 0x00, 0x13, 0xa8, 0x00, 0xef, 0x12, 0xa8, 0x40, 0x42, 0x0b, 0x00, - 0x0d, 0xa8, 0x00, 0xef, 0x0c, 0xa8, 0x40, 0x42, 0x0b, 0x00, 0x1c, 0xa8, - 0x00, 0xef, 0x1b, 0xa8, 0x40, 0xa1, 0x0c, 0x45, 0x5d, 0xe4, 0xca, 0xf3, - 0x01, 0x48, 0x6a, 0xc9, 0x53, 0x20, 0x40, 0xee, 0xa2, 0xf9, 0x01, 0x55, - 0x2a, 0x3d, 0x75, 0xf6, 0x41, 0x02, 0x4c, 0x12, 0xe9, 0x09, 0x46, 0x84, - 0xc8, 0x7b, 0x22, 0x80, 0x91, 0x09, 0x08, 0xba, 0xc5, 0xfa, 0x08, 0xee, - 0x09, 0x26, 0x80, 0xac, 0x02, 0x03, 0x6f, 0x02, 0x1f, 0x02, 0x6e, 0x1b, - 0x0f, 0xb3, 0x01, 0xff, 0x42, 0x49, 0x00, 0x63, 0xf3, 0x01, 0x4f, 0x27, - 0x70, 0x9f, 0xf6, 0x41, 0x4c, 0x31, 0x8a, 0x2f, 0x22, 0x00, 0x42, 0x33, - 0x00, 0xc4, 0xf3, 0x41, 0x44, 0xea, 0xec, 0xb8, 0xf9, 0x01, 0xb3, 0x06, - 0x47, 0x7f, 0xd4, 0xb9, 0xf9, 0x41, 0x06, 0x4a, 0x06, 0x86, 0x01, 0x03, - 0x19, 0x09, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x66, 0x07, 0x43, 0x0a, 0x56, - 0x42, 0xf4, 0x01, 0x83, 0x22, 0x80, 0x1d, 0x51, 0xd2, 0x5b, 0xc9, 0x27, - 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x43, 0xd4, 0x09, 0xbe, 0x2a, 0x00, - 0x59, 0x74, 0x24, 0xc2, 0x2a, 0x00, 0x4f, 0x45, 0x70, 0xc0, 0x2a, 0x40, - 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x13, 0x4b, 0x52, 0x28, 0x87, 0x22, - 0x80, 0x06, 0x51, 0x25, 0x5e, 0x8b, 0x22, 0x40, 0x4f, 0xa5, 0x3a, 0xc4, - 0x2a, 0x40, 0x4f, 0x10, 0x69, 0xca, 0x2a, 0x00, 0x4b, 0xf9, 0x12, 0xc6, - 0x2a, 0x00, 0x4c, 0x79, 0x2a, 0xcc, 0x2a, 0x00, 0x4e, 0x93, 0x3d, 0xc8, - 0x2a, 0x40, 0x5e, 0x32, 0x12, 0xd8, 0x2a, 0x00, 0x46, 0x4a, 0x12, 0xd7, - 0x2a, 0x40, 0x4f, 0x37, 0x07, 0x7b, 0x29, 0x00, 0x02, 0x6f, 0x00, 0x01, - 0xff, 0x44, 0x4c, 0x12, 0xd4, 0x2a, 0x00, 0x46, 0x59, 0x35, 0xd6, 0x2a, - 0x40, 0xa5, 0x62, 0xa6, 0x54, 0xac, 0x40, 0x45, 0xef, 0x1e, 0x7b, 0x20, - 0x00, 0x44, 0x46, 0x2a, 0x79, 0x20, 0x00, 0x43, 0xbf, 0x0a, 0xb9, 0x00, - 0x00, 0x49, 0x45, 0x70, 0x7a, 0x20, 0x00, 0x51, 0x4a, 0x21, 0x7e, 0x20, - 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x70, 0x20, 0x40, 0x44, - 0x25, 0x01, 0xb3, 0x00, 0x00, 0x42, 0x15, 0x02, 0xb2, 0x00, 0x40, 0x44, - 0x27, 0x1d, 0x77, 0x20, 0x00, 0x42, 0x60, 0x25, 0x76, 0x20, 0x40, 0x12, - 0x1c, 0x4f, 0x06, 0x4f, 0xf8, 0x23, 0x7d, 0x20, 0x40, 0xe9, 0x71, 0x20, - 0x00, 0xee, 0x7f, 0x20, 0x40, 0x43, 0xa7, 0x05, 0x75, 0x20, 0x00, 0x43, - 0xcb, 0x06, 0x74, 0x20, 0x40, 0x44, 0xc9, 0x00, 0x78, 0x20, 0x00, 0x4a, - 0xfa, 0x12, 0x7c, 0x20, 0x40, 0x80, 0xb9, 0x06, 0x07, 0x6a, 0xcd, 0xcc, - 0x02, 0x46, 0x7e, 0x95, 0x3b, 0xf3, 0x01, 0x44, 0x44, 0xba, 0x05, 0xf3, - 0x81, 0xb8, 0x02, 0x52, 0xe4, 0x53, 0x07, 0xf3, 0x01, 0x05, 0xe0, 0xe8, - 0x01, 0xff, 0x06, 0xc4, 0x06, 0xe6, 0x01, 0x07, 0xc1, 0x05, 0x06, 0x48, - 0x4a, 0xc8, 0xe1, 0x1b, 0x41, 0xa1, 0xc7, 0x01, 0x43, 0x37, 0x35, 0xce, - 0x1b, 0x01, 0xa3, 0xb2, 0x01, 0xa4, 0xa3, 0x01, 0x43, 0xc6, 0xdb, 0xc2, - 0x1b, 0x01, 0x43, 0x08, 0x9d, 0xca, 0x1b, 0x01, 0x45, 0xcc, 0xe3, 0xcb, - 0x1b, 0x01, 0x44, 0x52, 0xed, 0xc3, 0x1b, 0x01, 0x44, 0x7a, 0xed, 0xcf, - 0x1b, 0x01, 0xab, 0x71, 0x46, 0xd8, 0xda, 0xd0, 0x1b, 0x01, 0x42, 0x6c, - 0x00, 0xc7, 0x1b, 0x01, 0xae, 0x57, 0x45, 0x8d, 0xe6, 0xd1, 0x1b, 0x01, - 0xb0, 0x43, 0x43, 0x96, 0x02, 0xc4, 0x1b, 0x01, 0x04, 0x52, 0xef, 0x2f, - 0xb4, 0x12, 0x45, 0xdb, 0xe8, 0xc5, 0x1b, 0x01, 0x45, 0xea, 0xe8, 0xd3, - 0x1b, 0x01, 0x43, 0xcd, 0x31, 0xd4, 0x1b, 0x41, 0x44, 0xb7, 0xa2, 0xc1, - 0x1b, 0x01, 0x44, 0xd3, 0x74, 0xde, 0x1b, 0x01, 0xa8, 0x01, 0xff, 0x43, - 0xa7, 0x0a, 0xd8, 0x1b, 0x01, 0x43, 0x36, 0x0e, 0xdf, 0x1b, 0x41, 0x42, - 0x68, 0x00, 0xd2, 0x1b, 0x01, 0xf2, 0xdc, 0x1b, 0x41, 0x43, 0x65, 0x05, - 0xd9, 0x1b, 0x01, 0x42, 0x8f, 0x04, 0xc9, 0x1b, 0x41, 0x42, 0xc9, 0x09, - 0xcd, 0x1b, 0x01, 0x43, 0xca, 0x1d, 0xda, 0x1b, 0x41, 0x42, 0x22, 0x00, - 0xdb, 0x1b, 0x01, 0x42, 0x4c, 0x2a, 0xc6, 0x1b, 0x01, 0x44, 0x98, 0xba, - 0xe0, 0x1b, 0x41, 0x43, 0x04, 0x27, 0xc0, 0x1b, 0x01, 0x44, 0x59, 0x48, - 0xd7, 0x1b, 0x41, 0x44, 0x53, 0x84, 0xcc, 0x1b, 0x01, 0x45, 0xe5, 0xe3, - 0xdd, 0x1b, 0x41, 0x42, 0x13, 0x00, 0xd6, 0x1b, 0x01, 0x44, 0xda, 0xee, - 0xc8, 0x1b, 0x01, 0x42, 0xa6, 0x0a, 0xd5, 0x1b, 0x41, 0x45, 0xc3, 0x0a, - 0xf8, 0x1b, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xf9, 0x1b, 0x01, 0x43, - 0xbf, 0x0a, 0xf1, 0x1b, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, - 0xf0, 0x1b, 0x41, 0x44, 0x25, 0x01, 0xf3, 0x1b, 0x01, 0x42, 0x15, 0x02, - 0xf2, 0x1b, 0x41, 0x44, 0x27, 0x1d, 0xf7, 0x1b, 0x01, 0x42, 0x60, 0x25, - 0xf6, 0x1b, 0x41, 0x43, 0xa7, 0x05, 0xf5, 0x1b, 0x01, 0x43, 0xcb, 0x06, - 0xf4, 0x1b, 0x41, 0x4f, 0xf3, 0x67, 0x04, 0xf3, 0x41, 0x48, 0xf1, 0x86, - 0xba, 0x1b, 0x00, 0x11, 0xe7, 0x57, 0xb6, 0x03, 0x06, 0xc4, 0x06, 0xef, - 0x02, 0x07, 0xc1, 0x05, 0x8d, 0x01, 0x12, 0x54, 0x53, 0x57, 0x05, 0x2f, - 0x03, 0x2c, 0x0d, 0x8c, 0x88, 0x01, 0xff, 0x45, 0x7a, 0xe5, 0xa8, 0x1b, - 0x00, 0xae, 0x01, 0xff, 0x47, 0xcd, 0xcb, 0xa6, 0x1b, 0x00, 0x47, 0x20, - 0xce, 0xa9, 0x1b, 0x00, 0x45, 0x95, 0xe3, 0xa4, 0x1b, 0x00, 0x45, 0x02, - 0x12, 0xa7, 0x1b, 0x00, 0x44, 0xf6, 0xef, 0xa5, 0x1b, 0x40, 0x02, 0x6c, - 0x09, 0x06, 0x46, 0x5b, 0x23, 0xab, 0x1b, 0x40, 0x45, 0x3e, 0xe5, 0xaa, - 0x1b, 0x00, 0xae, 0x01, 0xff, 0xa7, 0x06, 0x45, 0x58, 0xe9, 0x80, 0x1b, - 0x40, 0x45, 0x07, 0xe5, 0x81, 0x1b, 0x00, 0x45, 0x30, 0xe9, 0x82, 0x1b, - 0x40, 0x4a, 0xef, 0xa5, 0xc7, 0x1c, 0x00, 0x45, 0xdd, 0xe1, 0xc3, 0x1c, - 0x00, 0x4a, 0xf3, 0xa6, 0xc6, 0x1c, 0x00, 0x4a, 0xff, 0xa9, 0xc5, 0x1c, - 0x00, 0x4b, 0x91, 0x9c, 0xc4, 0x1c, 0x00, 0xb0, 0x06, 0x45, 0x04, 0xe8, - 0xc0, 0x1c, 0x40, 0x47, 0x21, 0xcc, 0xc1, 0x1c, 0x00, 0x46, 0xf6, 0xdd, - 0xc2, 0x1c, 0x40, 0xe1, 0x83, 0x1b, 0x80, 0xcd, 0x01, 0xa2, 0xc0, 0x01, - 0x42, 0x37, 0x00, 0x8e, 0x1b, 0x00, 0x42, 0xa1, 0x10, 0x93, 0x1b, 0x00, - 0xe5, 0x88, 0x1b, 0x80, 0xaa, 0x01, 0xa6, 0x96, 0x01, 0x42, 0x24, 0x02, - 0x8c, 0x1b, 0x00, 0x42, 0x22, 0x00, 0xa0, 0x1b, 0x00, 0xe9, 0x84, 0x1b, - 0x00, 0x42, 0xbd, 0x26, 0x8f, 0x1b, 0x00, 0xab, 0x74, 0xac, 0x68, 0x42, - 0x6c, 0x00, 0x99, 0x1b, 0x00, 0xae, 0x50, 0xef, 0x87, 0x1b, 0x00, 0x42, - 0x6c, 0x09, 0x95, 0x1b, 0x00, 0x42, 0xf4, 0x13, 0x8b, 0x1b, 0x00, 0xb2, - 0x34, 0xb3, 0x28, 0x42, 0x12, 0x00, 0x92, 0x1b, 0x00, 0xf5, 0x85, 0x1b, - 0x00, 0x42, 0xa6, 0x0a, 0x97, 0x1b, 0x00, 0x42, 0xa9, 0x01, 0x9d, 0x1b, - 0x00, 0x42, 0x4c, 0x26, 0x9f, 0x1b, 0x00, 0x42, 0x34, 0x22, 0x9a, 0x1b, - 0x00, 0x42, 0x59, 0x00, 0x90, 0x1b, 0x40, 0xe1, 0x9e, 0x1b, 0x00, 0x42, - 0x34, 0x22, 0xaf, 0x1b, 0x40, 0xe1, 0x9b, 0x1b, 0x00, 0x42, 0x97, 0x02, - 0xbb, 0x1b, 0x40, 0xe1, 0x94, 0x1b, 0x00, 0x42, 0x24, 0x02, 0x8d, 0x1b, - 0x00, 0x42, 0x34, 0x22, 0x91, 0x1b, 0x40, 0xe1, 0x9c, 0x1b, 0x00, 0x42, - 0x97, 0x02, 0xbc, 0x1b, 0x40, 0xe1, 0x8a, 0x1b, 0x00, 0x42, 0x22, 0x00, - 0xae, 0x1b, 0x40, 0xe1, 0x96, 0x1b, 0x00, 0x05, 0x47, 0x27, 0x01, 0xff, - 0xeb, 0xbe, 0x1b, 0x00, 0xed, 0xbf, 0x1b, 0x40, 0xf5, 0x89, 0x1b, 0x40, - 0xe1, 0x98, 0x1b, 0x00, 0x42, 0x22, 0x00, 0xbd, 0x1b, 0x40, 0xe5, 0x86, - 0x1b, 0x00, 0x48, 0x01, 0xbc, 0xbd, 0x1b, 0x40, 0x45, 0xc3, 0x0a, 0xb8, - 0x1b, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xb9, 0x1b, 0x00, 0x43, 0xbf, - 0x0a, 0xb1, 0x1b, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xb0, - 0x1b, 0x40, 0x44, 0x25, 0x01, 0xb3, 0x1b, 0x00, 0x42, 0x15, 0x02, 0xb2, - 0x1b, 0x40, 0x44, 0x27, 0x1d, 0xb7, 0x1b, 0x00, 0x42, 0x60, 0x25, 0xb6, - 0x1b, 0x40, 0x43, 0xa7, 0x05, 0xb5, 0x1b, 0x00, 0x43, 0xcb, 0x06, 0xb4, - 0x1b, 0x40, 0x47, 0x73, 0xd0, 0xa1, 0x1b, 0x00, 0x02, 0xf6, 0x19, 0x11, - 0x07, 0xd4, 0xd2, 0x01, 0xff, 0x42, 0x6c, 0x00, 0xac, 0x1b, 0x00, 0x42, - 0xa9, 0x01, 0xad, 0x1b, 0x40, 0x44, 0xca, 0x94, 0xa2, 0x1b, 0x00, 0x43, - 0x49, 0xe4, 0xa3, 0x1b, 0x40, 0x4c, 0xe5, 0x8a, 0xc5, 0x26, 0x00, 0x49, - 0xc8, 0xbe, 0x1e, 0xf3, 0x41, 0x46, 0x66, 0x0a, 0xb3, 0x23, 0x00, 0x43, - 0x1e, 0x00, 0xb2, 0x23, 0x00, 0x4d, 0xe7, 0x88, 0x0b, 0x2a, 0x40, 0x80, - 0x01, 0xff, 0x06, 0x5c, 0x00, 0x1c, 0x55, 0xfb, 0x38, 0xe9, 0x22, 0x00, - 0x06, 0x52, 0x28, 0x06, 0x4e, 0x7a, 0x7c, 0xb1, 0x22, 0x40, 0x45, 0xac, - 0x0c, 0x7d, 0x22, 0x00, 0x4a, 0x06, 0x39, 0x7f, 0x22, 0x40, 0x4f, 0x10, - 0x69, 0xb8, 0x2a, 0x00, 0x4b, 0xf9, 0x12, 0xb4, 0x2a, 0x00, 0x04, 0xe8, - 0x22, 0x11, 0x0c, 0x6d, 0x2a, 0x01, 0xff, 0x4b, 0xf9, 0x12, 0xb0, 0x2a, - 0x00, 0x4c, 0x79, 0x2a, 0xb2, 0x2a, 0x40, 0x4f, 0x10, 0x69, 0xba, 0x2a, - 0x00, 0x48, 0xa9, 0x0c, 0xb6, 0x2a, 0x40, 0x06, 0x4a, 0x06, 0x75, 0x03, - 0x19, 0x09, 0x06, 0x46, 0xab, 0xbd, 0x1a, 0x00, 0x40, 0x06, 0x5c, 0x00, - 0x50, 0x42, 0xf4, 0x01, 0x82, 0x22, 0x80, 0x17, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x43, 0xd4, 0x09, 0xbd, 0x2a, 0x00, 0x59, 0x74, 0x24, 0xc1, 0x2a, - 0x00, 0x4f, 0x45, 0x70, 0xbf, 0x2a, 0x40, 0x80, 0x01, 0xff, 0x06, 0x5c, - 0x00, 0x13, 0x4b, 0x52, 0x28, 0x86, 0x22, 0x80, 0x06, 0x51, 0x25, 0x5e, - 0x8a, 0x22, 0x40, 0x4f, 0xa5, 0x3a, 0xc3, 0x2a, 0x40, 0x4f, 0x10, 0x69, - 0xc9, 0x2a, 0x00, 0x4b, 0xf9, 0x12, 0xc5, 0x2a, 0x00, 0x4c, 0x79, 0x2a, - 0xcb, 0x2a, 0x00, 0x4e, 0x93, 0x3d, 0xc7, 0x2a, 0x40, 0x50, 0xb3, 0x02, - 0x79, 0x29, 0x00, 0x02, 0x6f, 0x00, 0x01, 0xff, 0x44, 0x4c, 0x12, 0xd5, - 0x2a, 0x00, 0x46, 0x59, 0x35, 0xd3, 0x2a, 0x40, 0xa5, 0x54, 0xa6, 0x46, - 0x50, 0xf7, 0x23, 0x8d, 0x20, 0x00, 0x45, 0xef, 0x1e, 0x8b, 0x20, 0x00, - 0x44, 0x46, 0x2a, 0x89, 0x20, 0x00, 0x43, 0xbf, 0x0a, 0x81, 0x20, 0x00, - 0x49, 0x45, 0x70, 0x8a, 0x20, 0x00, 0x51, 0x4a, 0x21, 0x8e, 0x20, 0x00, - 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x80, 0x20, 0x40, 0x44, 0x25, - 0x01, 0x83, 0x20, 0x00, 0x42, 0x15, 0x02, 0x82, 0x20, 0x40, 0x44, 0x27, - 0x1d, 0x87, 0x20, 0x00, 0x42, 0x60, 0x25, 0x86, 0x20, 0x40, 0x43, 0xa7, - 0x05, 0x85, 0x20, 0x00, 0x43, 0xcb, 0x06, 0x84, 0x20, 0x40, 0x44, 0xc9, - 0x00, 0x88, 0x20, 0x00, 0x4a, 0xfa, 0x12, 0x8c, 0x20, 0x40, 0xa1, 0xb9, - 0x01, 0xa5, 0x9a, 0x01, 0x4a, 0xab, 0x93, 0xc5, 0xfb, 0x81, 0x6f, 0xaf, - 0x61, 0xb2, 0x15, 0xb5, 0x01, 0xff, 0x4e, 0x7a, 0x75, 0x99, 0xf3, 0x01, - 0x4e, 0x5a, 0x76, 0x59, 0xf9, 0x01, 0x42, 0x6c, 0x09, 0xd3, 0xf6, 0x41, - 0xa1, 0x32, 0x57, 0x89, 0x2d, 0x29, 0x27, 0x00, 0xa9, 0x01, 0xff, 0x52, - 0x9a, 0x4f, 0x63, 0x22, 0x00, 0x4d, 0x96, 0x84, 0x9c, 0x00, 0x00, 0x04, - 0x76, 0x18, 0x01, 0xff, 0x56, 0xf1, 0x32, 0x83, 0xcc, 0x01, 0x56, 0x93, - 0x34, 0x80, 0xcc, 0x01, 0x57, 0x0d, 0x30, 0x82, 0xcc, 0x01, 0x54, 0x47, - 0x45, 0x81, 0xcc, 0x41, 0x04, 0xc9, 0x00, 0x06, 0x46, 0x20, 0xde, 0x53, - 0xf3, 0x41, 0x46, 0x19, 0x2f, 0xcf, 0xf4, 0x01, 0x44, 0x9a, 0x23, 0xe4, - 0x23, 0x40, 0x48, 0x2a, 0xc2, 0xe0, 0xf5, 0x01, 0x46, 0x4c, 0xdc, 0xf1, - 0x23, 0x40, 0x80, 0x01, 0xff, 0x08, 0x02, 0xc5, 0x11, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x4b, 0x27, 0x97, 0xc6, 0xfb, 0x01, 0x45, 0xe4, 0x26, 0xc9, + 0x96, 0x7f, 0x97, 0x55, 0x98, 0x2b, 0x99, 0x01, 0xff, 0xd0, 0x4d, 0x8a, + 0x01, 0xd1, 0x4e, 0x8a, 0x01, 0xd2, 0x4f, 0x8a, 0x01, 0xd3, 0x50, 0x8a, + 0x01, 0xd4, 0x51, 0x8a, 0x01, 0xd5, 0x52, 0x8a, 0x01, 0xd6, 0x53, 0x8a, + 0x01, 0xd7, 0x54, 0x8a, 0x01, 0xd8, 0x55, 0x8a, 0x01, 0xd9, 0x56, 0x8a, + 0x41, 0xd0, 0x43, 0x8a, 0x01, 0xd1, 0x44, 0x8a, 0x01, 0xd2, 0x45, 0x8a, + 0x01, 0xd3, 0x46, 0x8a, 0x01, 0xd4, 0x47, 0x8a, 0x01, 0xd5, 0x48, 0x8a, + 0x01, 0xd6, 0x49, 0x8a, 0x01, 0xd7, 0x4a, 0x8a, 0x01, 0xd8, 0x4b, 0x8a, + 0x01, 0xd9, 0x4c, 0x8a, 0x41, 0xd0, 0x39, 0x8a, 0x01, 0xd1, 0x3a, 0x8a, + 0x01, 0xd2, 0x3b, 0x8a, 0x01, 0xd3, 0x3c, 0x8a, 0x01, 0xd4, 0x3d, 0x8a, + 0x01, 0xd5, 0x3e, 0x8a, 0x01, 0xd6, 0x3f, 0x8a, 0x01, 0xd7, 0x40, 0x8a, + 0x01, 0xd8, 0x41, 0x8a, 0x01, 0xd9, 0x42, 0x8a, 0x41, 0xd0, 0x2f, 0x8a, + 0x01, 0xd1, 0x30, 0x8a, 0x01, 0xd2, 0x31, 0x8a, 0x01, 0xd3, 0x32, 0x8a, + 0x01, 0xd4, 0x33, 0x8a, 0x01, 0xd5, 0x34, 0x8a, 0x01, 0xd6, 0x35, 0x8a, + 0x01, 0xd7, 0x36, 0x8a, 0x01, 0xd8, 0x37, 0x8a, 0x01, 0xd9, 0x38, 0x8a, + 0x41, 0xd0, 0x25, 0x8a, 0x01, 0xd1, 0x26, 0x8a, 0x01, 0xd2, 0x27, 0x8a, + 0x01, 0xd3, 0x28, 0x8a, 0x01, 0xd4, 0x29, 0x8a, 0x01, 0xd5, 0x2a, 0x8a, + 0x01, 0xd6, 0x2b, 0x8a, 0x01, 0xd7, 0x2c, 0x8a, 0x01, 0xd8, 0x2d, 0x8a, + 0x01, 0xd9, 0x2e, 0x8a, 0x41, 0xd0, 0x1b, 0x8a, 0x01, 0xd1, 0x1c, 0x8a, + 0x01, 0xd2, 0x1d, 0x8a, 0x01, 0xd3, 0x1e, 0x8a, 0x01, 0xd4, 0x1f, 0x8a, + 0x01, 0xd5, 0x20, 0x8a, 0x01, 0xd6, 0x21, 0x8a, 0x01, 0xd7, 0x22, 0x8a, + 0x01, 0xd8, 0x23, 0x8a, 0x01, 0xd9, 0x24, 0x8a, 0x41, 0xd0, 0x11, 0x8a, + 0x01, 0xd1, 0x12, 0x8a, 0x01, 0xd2, 0x13, 0x8a, 0x01, 0xd3, 0x14, 0x8a, + 0x01, 0xd4, 0x15, 0x8a, 0x01, 0xd5, 0x16, 0x8a, 0x01, 0xd6, 0x17, 0x8a, + 0x01, 0xd7, 0x18, 0x8a, 0x01, 0xd8, 0x19, 0x8a, 0x01, 0xd9, 0x1a, 0x8a, + 0x41, 0xd0, 0x07, 0x8a, 0x01, 0xd1, 0x08, 0x8a, 0x01, 0xd2, 0x09, 0x8a, + 0x01, 0xd3, 0x0a, 0x8a, 0x01, 0xd4, 0x0b, 0x8a, 0x01, 0xd5, 0x0c, 0x8a, + 0x01, 0xd6, 0x0d, 0x8a, 0x01, 0xd7, 0x0e, 0x8a, 0x01, 0xd8, 0x0f, 0x8a, + 0x01, 0xd9, 0x10, 0x8a, 0x41, 0xd0, 0xfd, 0x89, 0x01, 0xd1, 0xfe, 0x89, + 0x01, 0xd2, 0xff, 0x89, 0x01, 0xd3, 0x00, 0x8a, 0x01, 0xd4, 0x01, 0x8a, + 0x01, 0xd5, 0x02, 0x8a, 0x01, 0xd6, 0x03, 0x8a, 0x01, 0xd7, 0x04, 0x8a, + 0x01, 0xd8, 0x05, 0x8a, 0x01, 0xd9, 0x06, 0x8a, 0x41, 0xd0, 0xf3, 0x89, + 0x01, 0xd1, 0xf4, 0x89, 0x01, 0xd2, 0xf5, 0x89, 0x01, 0xd3, 0xf6, 0x89, + 0x01, 0xd4, 0xf7, 0x89, 0x01, 0xd5, 0xf8, 0x89, 0x01, 0xd6, 0xf9, 0x89, + 0x01, 0xd7, 0xfa, 0x89, 0x01, 0xd8, 0xfb, 0x89, 0x01, 0xd9, 0xfc, 0x89, + 0x41, 0x90, 0x80, 0x03, 0x91, 0xd5, 0x02, 0x92, 0xaa, 0x02, 0x93, 0xff, + 0x01, 0x94, 0xd4, 0x01, 0x95, 0xa9, 0x01, 0x96, 0x7f, 0x97, 0x55, 0x98, + 0x2b, 0x99, 0x01, 0xff, 0xd0, 0xe9, 0x89, 0x01, 0xd1, 0xea, 0x89, 0x01, + 0xd2, 0xeb, 0x89, 0x01, 0xd3, 0xec, 0x89, 0x01, 0xd4, 0xed, 0x89, 0x01, + 0xd5, 0xee, 0x89, 0x01, 0xd6, 0xef, 0x89, 0x01, 0xd7, 0xf0, 0x89, 0x01, + 0xd8, 0xf1, 0x89, 0x01, 0xd9, 0xf2, 0x89, 0x41, 0xd0, 0xdf, 0x89, 0x01, + 0xd1, 0xe0, 0x89, 0x01, 0xd2, 0xe1, 0x89, 0x01, 0xd3, 0xe2, 0x89, 0x01, + 0xd4, 0xe3, 0x89, 0x01, 0xd5, 0xe4, 0x89, 0x01, 0xd6, 0xe5, 0x89, 0x01, + 0xd7, 0xe6, 0x89, 0x01, 0xd8, 0xe7, 0x89, 0x01, 0xd9, 0xe8, 0x89, 0x41, + 0xd0, 0xd5, 0x89, 0x01, 0xd1, 0xd6, 0x89, 0x01, 0xd2, 0xd7, 0x89, 0x01, + 0xd3, 0xd8, 0x89, 0x01, 0xd4, 0xd9, 0x89, 0x01, 0xd5, 0xda, 0x89, 0x01, + 0xd6, 0xdb, 0x89, 0x01, 0xd7, 0xdc, 0x89, 0x01, 0xd8, 0xdd, 0x89, 0x01, + 0xd9, 0xde, 0x89, 0x41, 0xd0, 0xcb, 0x89, 0x01, 0xd1, 0xcc, 0x89, 0x01, + 0xd2, 0xcd, 0x89, 0x01, 0xd3, 0xce, 0x89, 0x01, 0xd4, 0xcf, 0x89, 0x01, + 0xd5, 0xd0, 0x89, 0x01, 0xd6, 0xd1, 0x89, 0x01, 0xd7, 0xd2, 0x89, 0x01, + 0xd8, 0xd3, 0x89, 0x01, 0xd9, 0xd4, 0x89, 0x41, 0xd0, 0xc1, 0x89, 0x01, + 0xd1, 0xc2, 0x89, 0x01, 0xd2, 0xc3, 0x89, 0x01, 0xd3, 0xc4, 0x89, 0x01, + 0xd4, 0xc5, 0x89, 0x01, 0xd5, 0xc6, 0x89, 0x01, 0xd6, 0xc7, 0x89, 0x01, + 0xd7, 0xc8, 0x89, 0x01, 0xd8, 0xc9, 0x89, 0x01, 0xd9, 0xca, 0x89, 0x41, + 0xd0, 0xb7, 0x89, 0x01, 0xd1, 0xb8, 0x89, 0x01, 0xd2, 0xb9, 0x89, 0x01, + 0xd3, 0xba, 0x89, 0x01, 0xd4, 0xbb, 0x89, 0x01, 0xd5, 0xbc, 0x89, 0x01, + 0xd6, 0xbd, 0x89, 0x01, 0xd7, 0xbe, 0x89, 0x01, 0xd8, 0xbf, 0x89, 0x01, + 0xd9, 0xc0, 0x89, 0x41, 0xd0, 0xad, 0x89, 0x01, 0xd1, 0xae, 0x89, 0x01, + 0xd2, 0xaf, 0x89, 0x01, 0xd3, 0xb0, 0x89, 0x01, 0xd4, 0xb1, 0x89, 0x01, + 0xd5, 0xb2, 0x89, 0x01, 0xd6, 0xb3, 0x89, 0x01, 0xd7, 0xb4, 0x89, 0x01, + 0xd8, 0xb5, 0x89, 0x01, 0xd9, 0xb6, 0x89, 0x41, 0xd0, 0xa3, 0x89, 0x01, + 0xd1, 0xa4, 0x89, 0x01, 0xd2, 0xa5, 0x89, 0x01, 0xd3, 0xa6, 0x89, 0x01, + 0xd4, 0xa7, 0x89, 0x01, 0xd5, 0xa8, 0x89, 0x01, 0xd6, 0xa9, 0x89, 0x01, + 0xd7, 0xaa, 0x89, 0x01, 0xd8, 0xab, 0x89, 0x01, 0xd9, 0xac, 0x89, 0x41, + 0xd0, 0x99, 0x89, 0x01, 0xd1, 0x9a, 0x89, 0x01, 0xd2, 0x9b, 0x89, 0x01, + 0xd3, 0x9c, 0x89, 0x01, 0xd4, 0x9d, 0x89, 0x01, 0xd5, 0x9e, 0x89, 0x01, + 0xd6, 0x9f, 0x89, 0x01, 0xd7, 0xa0, 0x89, 0x01, 0xd8, 0xa1, 0x89, 0x01, + 0xd9, 0xa2, 0x89, 0x41, 0xd0, 0x8f, 0x89, 0x01, 0xd1, 0x90, 0x89, 0x01, + 0xd2, 0x91, 0x89, 0x01, 0xd3, 0x92, 0x89, 0x01, 0xd4, 0x93, 0x89, 0x01, + 0xd5, 0x94, 0x89, 0x01, 0xd6, 0x95, 0x89, 0x01, 0xd7, 0x96, 0x89, 0x01, + 0xd8, 0x97, 0x89, 0x01, 0xd9, 0x98, 0x89, 0x41, 0x90, 0x80, 0x03, 0x91, + 0xd5, 0x02, 0x92, 0xaa, 0x02, 0x93, 0xff, 0x01, 0x94, 0xd4, 0x01, 0x95, + 0xa9, 0x01, 0x96, 0x7f, 0x97, 0x55, 0x98, 0x2b, 0x99, 0x01, 0xff, 0xd0, + 0x85, 0x89, 0x01, 0xd1, 0x86, 0x89, 0x01, 0xd2, 0x87, 0x89, 0x01, 0xd3, + 0x88, 0x89, 0x01, 0xd4, 0x89, 0x89, 0x01, 0xd5, 0x8a, 0x89, 0x01, 0xd6, + 0x8b, 0x89, 0x01, 0xd7, 0x8c, 0x89, 0x01, 0xd8, 0x8d, 0x89, 0x01, 0xd9, + 0x8e, 0x89, 0x41, 0xd0, 0x7b, 0x89, 0x01, 0xd1, 0x7c, 0x89, 0x01, 0xd2, + 0x7d, 0x89, 0x01, 0xd3, 0x7e, 0x89, 0x01, 0xd4, 0x7f, 0x89, 0x01, 0xd5, + 0x80, 0x89, 0x01, 0xd6, 0x81, 0x89, 0x01, 0xd7, 0x82, 0x89, 0x01, 0xd8, + 0x83, 0x89, 0x01, 0xd9, 0x84, 0x89, 0x41, 0xd0, 0x71, 0x89, 0x01, 0xd1, + 0x72, 0x89, 0x01, 0xd2, 0x73, 0x89, 0x01, 0xd3, 0x74, 0x89, 0x01, 0xd4, + 0x75, 0x89, 0x01, 0xd5, 0x76, 0x89, 0x01, 0xd6, 0x77, 0x89, 0x01, 0xd7, + 0x78, 0x89, 0x01, 0xd8, 0x79, 0x89, 0x01, 0xd9, 0x7a, 0x89, 0x41, 0xd0, + 0x67, 0x89, 0x01, 0xd1, 0x68, 0x89, 0x01, 0xd2, 0x69, 0x89, 0x01, 0xd3, + 0x6a, 0x89, 0x01, 0xd4, 0x6b, 0x89, 0x01, 0xd5, 0x6c, 0x89, 0x01, 0xd6, + 0x6d, 0x89, 0x01, 0xd7, 0x6e, 0x89, 0x01, 0xd8, 0x6f, 0x89, 0x01, 0xd9, + 0x70, 0x89, 0x41, 0xd0, 0x5d, 0x89, 0x01, 0xd1, 0x5e, 0x89, 0x01, 0xd2, + 0x5f, 0x89, 0x01, 0xd3, 0x60, 0x89, 0x01, 0xd4, 0x61, 0x89, 0x01, 0xd5, + 0x62, 0x89, 0x01, 0xd6, 0x63, 0x89, 0x01, 0xd7, 0x64, 0x89, 0x01, 0xd8, + 0x65, 0x89, 0x01, 0xd9, 0x66, 0x89, 0x41, 0xd0, 0x53, 0x89, 0x01, 0xd1, + 0x54, 0x89, 0x01, 0xd2, 0x55, 0x89, 0x01, 0xd3, 0x56, 0x89, 0x01, 0xd4, + 0x57, 0x89, 0x01, 0xd5, 0x58, 0x89, 0x01, 0xd6, 0x59, 0x89, 0x01, 0xd7, + 0x5a, 0x89, 0x01, 0xd8, 0x5b, 0x89, 0x01, 0xd9, 0x5c, 0x89, 0x41, 0xd0, + 0x49, 0x89, 0x01, 0xd1, 0x4a, 0x89, 0x01, 0xd2, 0x4b, 0x89, 0x01, 0xd3, + 0x4c, 0x89, 0x01, 0xd4, 0x4d, 0x89, 0x01, 0xd5, 0x4e, 0x89, 0x01, 0xd6, + 0x4f, 0x89, 0x01, 0xd7, 0x50, 0x89, 0x01, 0xd8, 0x51, 0x89, 0x01, 0xd9, + 0x52, 0x89, 0x41, 0xd0, 0x3f, 0x89, 0x01, 0xd1, 0x40, 0x89, 0x01, 0xd2, + 0x41, 0x89, 0x01, 0xd3, 0x42, 0x89, 0x01, 0xd4, 0x43, 0x89, 0x01, 0xd5, + 0x44, 0x89, 0x01, 0xd6, 0x45, 0x89, 0x01, 0xd7, 0x46, 0x89, 0x01, 0xd8, + 0x47, 0x89, 0x01, 0xd9, 0x48, 0x89, 0x41, 0xd0, 0x35, 0x89, 0x01, 0xd1, + 0x36, 0x89, 0x01, 0xd2, 0x37, 0x89, 0x01, 0xd3, 0x38, 0x89, 0x01, 0xd4, + 0x39, 0x89, 0x01, 0xd5, 0x3a, 0x89, 0x01, 0xd6, 0x3b, 0x89, 0x01, 0xd7, + 0x3c, 0x89, 0x01, 0xd8, 0x3d, 0x89, 0x01, 0xd9, 0x3e, 0x89, 0x41, 0xd0, + 0x2b, 0x89, 0x01, 0xd1, 0x2c, 0x89, 0x01, 0xd2, 0x2d, 0x89, 0x01, 0xd3, + 0x2e, 0x89, 0x01, 0xd4, 0x2f, 0x89, 0x01, 0xd5, 0x30, 0x89, 0x01, 0xd6, + 0x31, 0x89, 0x01, 0xd7, 0x32, 0x89, 0x01, 0xd8, 0x33, 0x89, 0x01, 0xd9, + 0x34, 0x89, 0x41, 0x90, 0x80, 0x03, 0x91, 0xd5, 0x02, 0x92, 0xaa, 0x02, + 0x93, 0xff, 0x01, 0x94, 0xd4, 0x01, 0x95, 0xa9, 0x01, 0x96, 0x7f, 0x97, + 0x55, 0x98, 0x2b, 0x99, 0x01, 0xff, 0xd0, 0x21, 0x89, 0x01, 0xd1, 0x22, + 0x89, 0x01, 0xd2, 0x23, 0x89, 0x01, 0xd3, 0x24, 0x89, 0x01, 0xd4, 0x25, + 0x89, 0x01, 0xd5, 0x26, 0x89, 0x01, 0xd6, 0x27, 0x89, 0x01, 0xd7, 0x28, + 0x89, 0x01, 0xd8, 0x29, 0x89, 0x01, 0xd9, 0x2a, 0x89, 0x41, 0xd0, 0x17, + 0x89, 0x01, 0xd1, 0x18, 0x89, 0x01, 0xd2, 0x19, 0x89, 0x01, 0xd3, 0x1a, + 0x89, 0x01, 0xd4, 0x1b, 0x89, 0x01, 0xd5, 0x1c, 0x89, 0x01, 0xd6, 0x1d, + 0x89, 0x01, 0xd7, 0x1e, 0x89, 0x01, 0xd8, 0x1f, 0x89, 0x01, 0xd9, 0x20, + 0x89, 0x41, 0xd0, 0x0d, 0x89, 0x01, 0xd1, 0x0e, 0x89, 0x01, 0xd2, 0x0f, + 0x89, 0x01, 0xd3, 0x10, 0x89, 0x01, 0xd4, 0x11, 0x89, 0x01, 0xd5, 0x12, + 0x89, 0x01, 0xd6, 0x13, 0x89, 0x01, 0xd7, 0x14, 0x89, 0x01, 0xd8, 0x15, + 0x89, 0x01, 0xd9, 0x16, 0x89, 0x41, 0xd0, 0x03, 0x89, 0x01, 0xd1, 0x04, + 0x89, 0x01, 0xd2, 0x05, 0x89, 0x01, 0xd3, 0x06, 0x89, 0x01, 0xd4, 0x07, + 0x89, 0x01, 0xd5, 0x08, 0x89, 0x01, 0xd6, 0x09, 0x89, 0x01, 0xd7, 0x0a, + 0x89, 0x01, 0xd8, 0x0b, 0x89, 0x01, 0xd9, 0x0c, 0x89, 0x41, 0xd0, 0xf9, + 0x88, 0x01, 0xd1, 0xfa, 0x88, 0x01, 0xd2, 0xfb, 0x88, 0x01, 0xd3, 0xfc, + 0x88, 0x01, 0xd4, 0xfd, 0x88, 0x01, 0xd5, 0xfe, 0x88, 0x01, 0xd6, 0xff, + 0x88, 0x01, 0xd7, 0x00, 0x89, 0x01, 0xd8, 0x01, 0x89, 0x01, 0xd9, 0x02, + 0x89, 0x41, 0xd0, 0xef, 0x88, 0x01, 0xd1, 0xf0, 0x88, 0x01, 0xd2, 0xf1, + 0x88, 0x01, 0xd3, 0xf2, 0x88, 0x01, 0xd4, 0xf3, 0x88, 0x01, 0xd5, 0xf4, + 0x88, 0x01, 0xd6, 0xf5, 0x88, 0x01, 0xd7, 0xf6, 0x88, 0x01, 0xd8, 0xf7, + 0x88, 0x01, 0xd9, 0xf8, 0x88, 0x41, 0xd0, 0xe5, 0x88, 0x01, 0xd1, 0xe6, + 0x88, 0x01, 0xd2, 0xe7, 0x88, 0x01, 0xd3, 0xe8, 0x88, 0x01, 0xd4, 0xe9, + 0x88, 0x01, 0xd5, 0xea, 0x88, 0x01, 0xd6, 0xeb, 0x88, 0x01, 0xd7, 0xec, + 0x88, 0x01, 0xd8, 0xed, 0x88, 0x01, 0xd9, 0xee, 0x88, 0x41, 0xd0, 0xdb, + 0x88, 0x01, 0xd1, 0xdc, 0x88, 0x01, 0xd2, 0xdd, 0x88, 0x01, 0xd3, 0xde, + 0x88, 0x01, 0xd4, 0xdf, 0x88, 0x01, 0xd5, 0xe0, 0x88, 0x01, 0xd6, 0xe1, + 0x88, 0x01, 0xd7, 0xe2, 0x88, 0x01, 0xd8, 0xe3, 0x88, 0x01, 0xd9, 0xe4, + 0x88, 0x41, 0xd0, 0xd1, 0x88, 0x01, 0xd1, 0xd2, 0x88, 0x01, 0xd2, 0xd3, + 0x88, 0x01, 0xd3, 0xd4, 0x88, 0x01, 0xd4, 0xd5, 0x88, 0x01, 0xd5, 0xd6, + 0x88, 0x01, 0xd6, 0xd7, 0x88, 0x01, 0xd7, 0xd8, 0x88, 0x01, 0xd8, 0xd9, + 0x88, 0x01, 0xd9, 0xda, 0x88, 0x41, 0xd0, 0xc7, 0x88, 0x01, 0xd1, 0xc8, + 0x88, 0x01, 0xd2, 0xc9, 0x88, 0x01, 0xd3, 0xca, 0x88, 0x01, 0xd4, 0xcb, + 0x88, 0x01, 0xd5, 0xcc, 0x88, 0x01, 0xd6, 0xcd, 0x88, 0x01, 0xd7, 0xce, + 0x88, 0x01, 0xd8, 0xcf, 0x88, 0x01, 0xd9, 0xd0, 0x88, 0x41, 0x90, 0x80, + 0x03, 0x91, 0xd5, 0x02, 0x92, 0xaa, 0x02, 0x93, 0xff, 0x01, 0x94, 0xd4, + 0x01, 0x95, 0xa9, 0x01, 0x96, 0x7f, 0x97, 0x55, 0x98, 0x2b, 0x99, 0x01, + 0xff, 0xd0, 0xbd, 0x88, 0x01, 0xd1, 0xbe, 0x88, 0x01, 0xd2, 0xbf, 0x88, + 0x01, 0xd3, 0xc0, 0x88, 0x01, 0xd4, 0xc1, 0x88, 0x01, 0xd5, 0xc2, 0x88, + 0x01, 0xd6, 0xc3, 0x88, 0x01, 0xd7, 0xc4, 0x88, 0x01, 0xd8, 0xc5, 0x88, + 0x01, 0xd9, 0xc6, 0x88, 0x41, 0xd0, 0xb3, 0x88, 0x01, 0xd1, 0xb4, 0x88, + 0x01, 0xd2, 0xb5, 0x88, 0x01, 0xd3, 0xb6, 0x88, 0x01, 0xd4, 0xb7, 0x88, + 0x01, 0xd5, 0xb8, 0x88, 0x01, 0xd6, 0xb9, 0x88, 0x01, 0xd7, 0xba, 0x88, + 0x01, 0xd8, 0xbb, 0x88, 0x01, 0xd9, 0xbc, 0x88, 0x41, 0xd0, 0xa9, 0x88, + 0x01, 0xd1, 0xaa, 0x88, 0x01, 0xd2, 0xab, 0x88, 0x01, 0xd3, 0xac, 0x88, + 0x01, 0xd4, 0xad, 0x88, 0x01, 0xd5, 0xae, 0x88, 0x01, 0xd6, 0xaf, 0x88, + 0x01, 0xd7, 0xb0, 0x88, 0x01, 0xd8, 0xb1, 0x88, 0x01, 0xd9, 0xb2, 0x88, + 0x41, 0xd0, 0x9f, 0x88, 0x01, 0xd1, 0xa0, 0x88, 0x01, 0xd2, 0xa1, 0x88, + 0x01, 0xd3, 0xa2, 0x88, 0x01, 0xd4, 0xa3, 0x88, 0x01, 0xd5, 0xa4, 0x88, + 0x01, 0xd6, 0xa5, 0x88, 0x01, 0xd7, 0xa6, 0x88, 0x01, 0xd8, 0xa7, 0x88, + 0x01, 0xd9, 0xa8, 0x88, 0x41, 0xd0, 0x95, 0x88, 0x01, 0xd1, 0x96, 0x88, + 0x01, 0xd2, 0x97, 0x88, 0x01, 0xd3, 0x98, 0x88, 0x01, 0xd4, 0x99, 0x88, + 0x01, 0xd5, 0x9a, 0x88, 0x01, 0xd6, 0x9b, 0x88, 0x01, 0xd7, 0x9c, 0x88, + 0x01, 0xd8, 0x9d, 0x88, 0x01, 0xd9, 0x9e, 0x88, 0x41, 0xd0, 0x8b, 0x88, + 0x01, 0xd1, 0x8c, 0x88, 0x01, 0xd2, 0x8d, 0x88, 0x01, 0xd3, 0x8e, 0x88, + 0x01, 0xd4, 0x8f, 0x88, 0x01, 0xd5, 0x90, 0x88, 0x01, 0xd6, 0x91, 0x88, + 0x01, 0xd7, 0x92, 0x88, 0x01, 0xd8, 0x93, 0x88, 0x01, 0xd9, 0x94, 0x88, + 0x41, 0xd0, 0x81, 0x88, 0x01, 0xd1, 0x82, 0x88, 0x01, 0xd2, 0x83, 0x88, + 0x01, 0xd3, 0x84, 0x88, 0x01, 0xd4, 0x85, 0x88, 0x01, 0xd5, 0x86, 0x88, + 0x01, 0xd6, 0x87, 0x88, 0x01, 0xd7, 0x88, 0x88, 0x01, 0xd8, 0x89, 0x88, + 0x01, 0xd9, 0x8a, 0x88, 0x41, 0xd0, 0x77, 0x88, 0x01, 0xd1, 0x78, 0x88, + 0x01, 0xd2, 0x79, 0x88, 0x01, 0xd3, 0x7a, 0x88, 0x01, 0xd4, 0x7b, 0x88, + 0x01, 0xd5, 0x7c, 0x88, 0x01, 0xd6, 0x7d, 0x88, 0x01, 0xd7, 0x7e, 0x88, + 0x01, 0xd8, 0x7f, 0x88, 0x01, 0xd9, 0x80, 0x88, 0x41, 0xd0, 0x6d, 0x88, + 0x01, 0xd1, 0x6e, 0x88, 0x01, 0xd2, 0x6f, 0x88, 0x01, 0xd3, 0x70, 0x88, + 0x01, 0xd4, 0x71, 0x88, 0x01, 0xd5, 0x72, 0x88, 0x01, 0xd6, 0x73, 0x88, + 0x01, 0xd7, 0x74, 0x88, 0x01, 0xd8, 0x75, 0x88, 0x01, 0xd9, 0x76, 0x88, + 0x41, 0xd0, 0x63, 0x88, 0x01, 0xd1, 0x64, 0x88, 0x01, 0xd2, 0x65, 0x88, + 0x01, 0xd3, 0x66, 0x88, 0x01, 0xd4, 0x67, 0x88, 0x01, 0xd5, 0x68, 0x88, + 0x01, 0xd6, 0x69, 0x88, 0x01, 0xd7, 0x6a, 0x88, 0x01, 0xd8, 0x6b, 0x88, + 0x01, 0xd9, 0x6c, 0x88, 0x41, 0x90, 0x80, 0x03, 0x91, 0xd5, 0x02, 0x92, + 0xaa, 0x02, 0x93, 0xff, 0x01, 0x94, 0xd4, 0x01, 0x95, 0xa9, 0x01, 0x96, + 0x7f, 0x97, 0x55, 0x98, 0x2b, 0x99, 0x01, 0xff, 0xd0, 0x59, 0x88, 0x01, + 0xd1, 0x5a, 0x88, 0x01, 0xd2, 0x5b, 0x88, 0x01, 0xd3, 0x5c, 0x88, 0x01, + 0xd4, 0x5d, 0x88, 0x01, 0xd5, 0x5e, 0x88, 0x01, 0xd6, 0x5f, 0x88, 0x01, + 0xd7, 0x60, 0x88, 0x01, 0xd8, 0x61, 0x88, 0x01, 0xd9, 0x62, 0x88, 0x41, + 0xd0, 0x4f, 0x88, 0x01, 0xd1, 0x50, 0x88, 0x01, 0xd2, 0x51, 0x88, 0x01, + 0xd3, 0x52, 0x88, 0x01, 0xd4, 0x53, 0x88, 0x01, 0xd5, 0x54, 0x88, 0x01, + 0xd6, 0x55, 0x88, 0x01, 0xd7, 0x56, 0x88, 0x01, 0xd8, 0x57, 0x88, 0x01, + 0xd9, 0x58, 0x88, 0x41, 0xd0, 0x45, 0x88, 0x01, 0xd1, 0x46, 0x88, 0x01, + 0xd2, 0x47, 0x88, 0x01, 0xd3, 0x48, 0x88, 0x01, 0xd4, 0x49, 0x88, 0x01, + 0xd5, 0x4a, 0x88, 0x01, 0xd6, 0x4b, 0x88, 0x01, 0xd7, 0x4c, 0x88, 0x01, + 0xd8, 0x4d, 0x88, 0x01, 0xd9, 0x4e, 0x88, 0x41, 0xd0, 0x3b, 0x88, 0x01, + 0xd1, 0x3c, 0x88, 0x01, 0xd2, 0x3d, 0x88, 0x01, 0xd3, 0x3e, 0x88, 0x01, + 0xd4, 0x3f, 0x88, 0x01, 0xd5, 0x40, 0x88, 0x01, 0xd6, 0x41, 0x88, 0x01, + 0xd7, 0x42, 0x88, 0x01, 0xd8, 0x43, 0x88, 0x01, 0xd9, 0x44, 0x88, 0x41, + 0xd0, 0x31, 0x88, 0x01, 0xd1, 0x32, 0x88, 0x01, 0xd2, 0x33, 0x88, 0x01, + 0xd3, 0x34, 0x88, 0x01, 0xd4, 0x35, 0x88, 0x01, 0xd5, 0x36, 0x88, 0x01, + 0xd6, 0x37, 0x88, 0x01, 0xd7, 0x38, 0x88, 0x01, 0xd8, 0x39, 0x88, 0x01, + 0xd9, 0x3a, 0x88, 0x41, 0xd0, 0x27, 0x88, 0x01, 0xd1, 0x28, 0x88, 0x01, + 0xd2, 0x29, 0x88, 0x01, 0xd3, 0x2a, 0x88, 0x01, 0xd4, 0x2b, 0x88, 0x01, + 0xd5, 0x2c, 0x88, 0x01, 0xd6, 0x2d, 0x88, 0x01, 0xd7, 0x2e, 0x88, 0x01, + 0xd8, 0x2f, 0x88, 0x01, 0xd9, 0x30, 0x88, 0x41, 0xd0, 0x1d, 0x88, 0x01, + 0xd1, 0x1e, 0x88, 0x01, 0xd2, 0x1f, 0x88, 0x01, 0xd3, 0x20, 0x88, 0x01, + 0xd4, 0x21, 0x88, 0x01, 0xd5, 0x22, 0x88, 0x01, 0xd6, 0x23, 0x88, 0x01, + 0xd7, 0x24, 0x88, 0x01, 0xd8, 0x25, 0x88, 0x01, 0xd9, 0x26, 0x88, 0x41, + 0xd0, 0x13, 0x88, 0x01, 0xd1, 0x14, 0x88, 0x01, 0xd2, 0x15, 0x88, 0x01, + 0xd3, 0x16, 0x88, 0x01, 0xd4, 0x17, 0x88, 0x01, 0xd5, 0x18, 0x88, 0x01, + 0xd6, 0x19, 0x88, 0x01, 0xd7, 0x1a, 0x88, 0x01, 0xd8, 0x1b, 0x88, 0x01, + 0xd9, 0x1c, 0x88, 0x41, 0xd0, 0x09, 0x88, 0x01, 0xd1, 0x0a, 0x88, 0x01, + 0xd2, 0x0b, 0x88, 0x01, 0xd3, 0x0c, 0x88, 0x01, 0xd4, 0x0d, 0x88, 0x01, + 0xd5, 0x0e, 0x88, 0x01, 0xd6, 0x0f, 0x88, 0x01, 0xd7, 0x10, 0x88, 0x01, + 0xd8, 0x11, 0x88, 0x01, 0xd9, 0x12, 0x88, 0x41, 0xd1, 0x00, 0x88, 0x01, + 0xd2, 0x01, 0x88, 0x01, 0xd3, 0x02, 0x88, 0x01, 0xd4, 0x03, 0x88, 0x01, + 0xd5, 0x04, 0x88, 0x01, 0xd6, 0x05, 0x88, 0x01, 0xd7, 0x06, 0x88, 0x01, + 0xd8, 0x07, 0x88, 0x01, 0xd9, 0x08, 0x88, 0x41, 0x06, 0xef, 0x06, 0xb1, + 0x03, 0x07, 0xec, 0x05, 0x01, 0xff, 0xa1, 0x87, 0x03, 0x42, 0x16, 0x00, + 0xaa, 0x6a, 0x01, 0xa3, 0xf4, 0x02, 0xa4, 0xe7, 0x02, 0xa5, 0xd4, 0x02, + 0xa6, 0xc7, 0x02, 0xa7, 0xba, 0x02, 0xa8, 0xa6, 0x02, 0xa9, 0x93, 0x02, + 0xab, 0x86, 0x02, 0xac, 0xf9, 0x01, 0xad, 0xe2, 0x01, 0xae, 0xc9, 0x01, + 0xaf, 0xb6, 0x01, 0xb0, 0xa9, 0x01, 0x42, 0x71, 0x00, 0xb2, 0x6a, 0x01, + 0xb3, 0x84, 0x01, 0xb4, 0x72, 0xb5, 0x2a, 0xb6, 0x18, 0x42, 0xa9, 0x01, + 0xa6, 0x6a, 0x01, 0x42, 0xed, 0x26, 0xba, 0x6a, 0x01, 0x42, 0xbc, 0x22, + 0xa5, 0x6a, 0x01, 0x42, 0x59, 0x00, 0xbe, 0x6a, 0x41, 0xe3, 0x79, 0x6a, + 0x01, 0xf1, 0x7a, 0x6a, 0x01, 0xf8, 0x7b, 0x6a, 0x01, 0xfa, 0x78, 0x6a, + 0x41, 0xe3, 0x85, 0x6a, 0x01, 0xa5, 0x30, 0xa9, 0x0c, 0xf1, 0x86, 0x6a, + 0x01, 0xf8, 0x87, 0x6a, 0x01, 0xfa, 0x84, 0x6a, 0x41, 0xe3, 0x8d, 0x6a, + 0x01, 0xf1, 0x8e, 0x6a, 0x01, 0xb5, 0x08, 0xf8, 0x8f, 0x6a, 0x01, 0xfa, + 0x8c, 0x6a, 0x41, 0xe3, 0x99, 0x6a, 0x01, 0xf1, 0x9a, 0x6a, 0x01, 0xf8, + 0x9b, 0x6a, 0x01, 0xfa, 0x98, 0x6a, 0x41, 0xe3, 0x94, 0x6a, 0x01, 0xf1, + 0x96, 0x6a, 0x01, 0xf8, 0x97, 0x6a, 0x01, 0xfa, 0x95, 0x6a, 0x41, 0xe1, + 0xb0, 0x6a, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x6a, 0x01, 0x42, 0x40, 0x06, + 0xb6, 0x6a, 0x41, 0xe1, 0xa4, 0x6a, 0x01, 0xa8, 0x01, 0xff, 0xe1, 0xb4, + 0x6a, 0x01, 0x04, 0x35, 0x07, 0x01, 0xff, 0x43, 0xef, 0xf3, 0x93, 0x6a, + 0x01, 0x43, 0xa9, 0xf4, 0x92, 0x6a, 0x41, 0xe1, 0xa7, 0x6a, 0x01, 0x42, + 0x22, 0x00, 0xa9, 0x6a, 0x41, 0xe3, 0x71, 0x6a, 0x01, 0xf1, 0x72, 0x6a, + 0x01, 0xf8, 0x73, 0x6a, 0x01, 0xfa, 0x70, 0x6a, 0x41, 0xe1, 0xac, 0x6a, + 0x01, 0x42, 0x24, 0x02, 0xa3, 0x6a, 0x01, 0x42, 0x22, 0x00, 0xb3, 0x6a, + 0x01, 0x42, 0xbc, 0x22, 0xa8, 0x6a, 0x41, 0xe1, 0xab, 0x6a, 0x01, 0xe3, + 0x9d, 0x6a, 0x01, 0xf1, 0x9e, 0x6a, 0x01, 0xf8, 0x9f, 0x6a, 0x01, 0xfa, + 0x9c, 0x6a, 0x41, 0xe1, 0xae, 0x6a, 0x01, 0x47, 0xe7, 0xd3, 0x91, 0x6a, + 0x41, 0xe1, 0xa0, 0x6a, 0x01, 0x42, 0x22, 0x00, 0xa1, 0x6a, 0x41, 0xe3, + 0x81, 0x6a, 0x01, 0xf1, 0x82, 0x6a, 0x01, 0xf8, 0x83, 0x6a, 0x01, 0xfa, + 0x80, 0x6a, 0x41, 0xe1, 0xad, 0x6a, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0xaf, + 0x6a, 0x01, 0x42, 0x12, 0x00, 0xb8, 0x6a, 0x41, 0xe1, 0xa2, 0x6a, 0x01, + 0x42, 0x22, 0x00, 0xb7, 0x6a, 0x41, 0xe1, 0xbb, 0x6a, 0x01, 0x47, 0xe9, + 0xb8, 0x90, 0x6a, 0x41, 0xe3, 0x7d, 0x6a, 0x01, 0xf1, 0x7e, 0x6a, 0x01, + 0xf8, 0x7f, 0x6a, 0x01, 0xfa, 0x7c, 0x6a, 0x41, 0xe1, 0xb1, 0x6a, 0x01, + 0x42, 0x22, 0x00, 0xbc, 0x6a, 0x41, 0xe1, 0xb5, 0x6a, 0x01, 0x42, 0x22, + 0x00, 0xbd, 0x6a, 0x41, 0xe3, 0x75, 0x6a, 0x01, 0xf1, 0x76, 0x6a, 0x01, + 0xb7, 0x08, 0xf8, 0x77, 0x6a, 0x01, 0xfa, 0x74, 0x6a, 0x41, 0xe3, 0x89, + 0x6a, 0x01, 0xf1, 0x8a, 0x6a, 0x01, 0xf8, 0x8b, 0x6a, 0x01, 0xfa, 0x88, + 0x6a, 0x41, 0x45, 0x12, 0x0b, 0xc8, 0x6a, 0x01, 0xa6, 0x2e, 0x44, 0xcf, + 0x2a, 0xc9, 0x6a, 0x01, 0x43, 0x0e, 0x0b, 0xc1, 0x6a, 0x01, 0xb3, 0x14, + 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xc0, 0x6a, 0x41, 0x44, 0x25, 0x01, 0xc3, + 0x6a, 0x01, 0x42, 0x15, 0x02, 0xc2, 0x6a, 0x41, 0x44, 0xc9, 0x1d, 0xc7, + 0x6a, 0x01, 0x42, 0x01, 0x26, 0xc6, 0x6a, 0x41, 0x43, 0xd2, 0x05, 0xc5, + 0x6a, 0x01, 0x43, 0xf6, 0x06, 0xc4, 0x6a, 0x41, 0x43, 0x67, 0x00, 0xd4, + 0xfa, 0x01, 0x03, 0xd3, 0x4f, 0x01, 0xff, 0xa1, 0x9a, 0x06, 0xa3, 0x8b, + 0x06, 0xa4, 0xb0, 0x05, 0x09, 0x1e, 0x5a, 0x93, 0x04, 0x52, 0xb7, 0x52, + 0xee, 0x1f, 0x01, 0xac, 0xbc, 0x02, 0x4a, 0x11, 0xae, 0xf4, 0x0b, 0x00, + 0x07, 0xff, 0x39, 0x95, 0x02, 0x42, 0x14, 0x05, 0xd0, 0x0b, 0x00, 0x57, + 0x69, 0x30, 0xff, 0x1f, 0x01, 0x4a, 0x65, 0x80, 0xf9, 0x0b, 0x00, 0xb3, + 0x5b, 0xb4, 0x42, 0x0b, 0x40, 0x77, 0x0c, 0x54, 0xb8, 0x46, 0xe4, 0x1f, + 0x01, 0x49, 0x97, 0xc1, 0xf5, 0x0b, 0x40, 0xa1, 0x24, 0xe5, 0xc6, 0x0b, + 0x80, 0x1b, 0xe9, 0xbf, 0x0b, 0x80, 0x12, 0xef, 0xca, 0x0b, 0x80, 0x09, + 0xf5, 0xc1, 0x0b, 0xc0, 0x00, 0xf5, 0xc2, 0x0b, 0x40, 0xef, 0xcb, 0x0b, + 0x40, 0xe9, 0xc0, 0x0b, 0x40, 0xe5, 0xc7, 0x0b, 0x40, 0xe1, 0xbe, 0x0b, + 0x00, 0xe9, 0xc8, 0x0b, 0x00, 0xf5, 0xcc, 0x0b, 0x40, 0x49, 0x83, 0xbd, + 0xed, 0x1f, 0x01, 0x0b, 0x42, 0x7d, 0x01, 0xff, 0x4b, 0x55, 0x9a, 0xe8, + 0x1f, 0x01, 0x4b, 0x43, 0xa0, 0xe9, 0x1f, 0x41, 0x4c, 0x1f, 0x8c, 0xe7, + 0x1f, 0x01, 0x04, 0x5b, 0x03, 0x0c, 0x49, 0xf8, 0xbd, 0xec, 0x1f, 0x01, + 0x51, 0x2b, 0x5e, 0xef, 0x1f, 0x41, 0xa1, 0x81, 0x01, 0x46, 0x6a, 0xda, + 0xd6, 0x1f, 0x01, 0xab, 0x64, 0x02, 0xc3, 0x16, 0x4e, 0x43, 0xf6, 0xc7, + 0xd5, 0x1f, 0x01, 0xb0, 0x2c, 0x47, 0xca, 0xc0, 0xd8, 0x1f, 0x01, 0xb6, + 0x01, 0xff, 0xa1, 0x15, 0x43, 0xaa, 0x2d, 0xe3, 0x1f, 0x01, 0xa9, 0x01, + 0xff, 0x44, 0xe5, 0x23, 0xcd, 0x0b, 0x00, 0x45, 0xec, 0x4b, 0x83, 0x0b, + 0x40, 0x48, 0x68, 0xc7, 0xf1, 0x1f, 0x01, 0x46, 0x62, 0xdf, 0xe0, 0x1f, + 0x41, 0xa1, 0x06, 0x42, 0x10, 0x00, 0xdf, 0x1f, 0x41, 0x44, 0x7b, 0x77, + 0xe1, 0x1f, 0x01, 0x43, 0x2a, 0x05, 0xde, 0x1f, 0x01, 0x46, 0x8e, 0xe0, + 0xdb, 0x1f, 0x41, 0x47, 0x66, 0xd2, 0xdc, 0x1f, 0x01, 0x47, 0x48, 0xd6, + 0xf0, 0x1f, 0x01, 0x49, 0xc8, 0xc0, 0xd9, 0x1f, 0x41, 0x44, 0xdd, 0xee, + 0xdd, 0x1f, 0x01, 0xb5, 0x01, 0xff, 0x44, 0x04, 0x7e, 0xda, 0x1f, 0x01, + 0x43, 0x53, 0x7f, 0xe2, 0x1f, 0x41, 0x48, 0xe0, 0xc3, 0xd7, 0x1f, 0x01, + 0x47, 0x3d, 0x16, 0x82, 0x0b, 0x40, 0x04, 0x0e, 0x0b, 0x0c, 0x44, 0x5a, + 0x03, 0xfa, 0x0b, 0x00, 0x43, 0xdb, 0x06, 0xf0, 0x0b, 0x40, 0x47, 0x71, + 0x11, 0xf1, 0x0b, 0x00, 0x48, 0x40, 0x5e, 0xf2, 0x0b, 0x40, 0x48, 0xae, + 0x47, 0xe6, 0x1f, 0x01, 0x06, 0xed, 0x05, 0x01, 0xff, 0xe1, 0x85, 0x0b, + 0x80, 0xb1, 0x01, 0x42, 0x37, 0x00, 0x9a, 0x0b, 0x00, 0xe5, 0x8e, 0x0b, + 0x80, 0xa1, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x0b, 0x00, 0xe9, 0x87, 0x0b, + 0x80, 0x91, 0x01, 0x42, 0x56, 0x19, 0x9c, 0x0b, 0x00, 0x42, 0x1b, 0x02, + 0x95, 0x0b, 0x00, 0xac, 0x72, 0x42, 0x6c, 0x00, 0xae, 0x0b, 0x00, 0xae, + 0x4e, 0xef, 0x92, 0x0b, 0x80, 0x45, 0x42, 0xbb, 0x09, 0xaa, 0x0b, 0x00, + 0xb2, 0x33, 0xb3, 0x21, 0xb4, 0x15, 0xf5, 0x89, 0x0b, 0x80, 0x0c, 0x42, + 0xf5, 0x0a, 0xb5, 0x0b, 0x00, 0x42, 0xbc, 0x22, 0xaf, 0x0b, 0x40, 0xf5, + 0x8a, 0x0b, 0x40, 0xe1, 0xa4, 0x0b, 0x00, 0x42, 0x12, 0x00, 0x9f, 0x0b, + 0x40, 0xe1, 0xb8, 0x0b, 0x00, 0x42, 0x22, 0x00, 0xb6, 0x0b, 0x00, 0x42, + 0x40, 0x06, 0xb7, 0x0b, 0x40, 0xe1, 0xb0, 0x0b, 0x00, 0x42, 0x71, 0x00, + 0xb1, 0x0b, 0x40, 0xef, 0x93, 0x0b, 0x40, 0xe1, 0xa8, 0x0b, 0x00, 0x42, + 0x24, 0x02, 0x99, 0x0b, 0x00, 0xae, 0x06, 0x42, 0xbc, 0x22, 0x9e, 0x0b, + 0x40, 0xe1, 0xa3, 0x0b, 0x00, 0x42, 0x2a, 0x05, 0xa9, 0x0b, 0x40, 0xe1, + 0xb2, 0x0b, 0x00, 0xac, 0x01, 0xff, 0xe1, 0xb3, 0x0b, 0x00, 0x42, 0x74, + 0x00, 0xb4, 0x0b, 0x40, 0xe9, 0x88, 0x0b, 0x40, 0xe5, 0x8f, 0x0b, 0x40, + 0xe1, 0x86, 0x0b, 0x00, 0xe9, 0x90, 0x0b, 0x00, 0xf5, 0x94, 0x0b, 0x40, + 0x58, 0x3e, 0x28, 0xd4, 0x1f, 0x01, 0x04, 0x0e, 0x0b, 0x27, 0x06, 0x24, + 0x01, 0x01, 0xff, 0x4a, 0xd9, 0xa9, 0xc6, 0x1f, 0x01, 0x48, 0x2a, 0x01, + 0xd3, 0x1f, 0x01, 0x04, 0x00, 0x26, 0x06, 0x4a, 0x3f, 0xb2, 0xcd, 0x1f, + 0x41, 0x46, 0x17, 0xb1, 0xce, 0x1f, 0x01, 0x49, 0x8e, 0xc1, 0xc7, 0x1f, + 0x41, 0x05, 0x12, 0x0b, 0x59, 0xa6, 0x4b, 0x05, 0xc0, 0x2c, 0x3f, 0x58, + 0x36, 0x2a, 0xc1, 0x1f, 0x01, 0x47, 0x2a, 0x01, 0xd0, 0x1f, 0x01, 0x04, + 0x00, 0x26, 0x1d, 0xb4, 0x01, 0xff, 0x44, 0x82, 0x1b, 0xcb, 0x1f, 0x01, + 0xa8, 0x06, 0x48, 0xd5, 0x25, 0xc8, 0x1f, 0x41, 0x4b, 0x6f, 0x90, 0xc5, + 0x1f, 0x01, 0x59, 0xc4, 0x25, 0xc0, 0x1f, 0x41, 0x06, 0x2a, 0xdb, 0x06, + 0x48, 0x85, 0xc1, 0xc3, 0x1f, 0x41, 0xd1, 0xc9, 0x1f, 0x01, 0xd2, 0xca, + 0x1f, 0x41, 0xd1, 0xd1, 0x1f, 0x01, 0xd2, 0xd2, 0x1f, 0x41, 0x44, 0x42, + 0xaf, 0xcf, 0x1f, 0x01, 0x47, 0x18, 0xd4, 0xc4, 0x1f, 0x41, 0xe8, 0xcc, + 0x1f, 0x01, 0x44, 0xd9, 0x25, 0xc2, 0x1f, 0x41, 0x47, 0x4f, 0xcf, 0xf3, + 0x0b, 0x00, 0x49, 0x07, 0xb8, 0xf6, 0x0b, 0x00, 0x05, 0xf0, 0x06, 0x06, + 0x53, 0xd5, 0x4c, 0xe5, 0x1f, 0x41, 0x45, 0x12, 0x0b, 0xee, 0x0b, 0x00, + 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xef, 0x0b, 0x00, 0x43, 0x0e, 0x0b, 0xe7, + 0x0b, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xe6, 0x0b, 0x40, + 0x44, 0x25, 0x01, 0xe9, 0x0b, 0x00, 0x42, 0x15, 0x02, 0xe8, 0x0b, 0x40, + 0x44, 0xc9, 0x1d, 0xed, 0x0b, 0x00, 0x42, 0x01, 0x26, 0xec, 0x0b, 0x40, + 0x43, 0xd2, 0x05, 0xeb, 0x0b, 0x00, 0x43, 0xf6, 0x06, 0xea, 0x0b, 0x40, + 0x4a, 0x56, 0x9a, 0xf7, 0x0b, 0x00, 0x4b, 0x79, 0xa4, 0xea, 0x1f, 0x41, + 0x4b, 0xeb, 0x9f, 0xeb, 0x1f, 0x01, 0x4c, 0xef, 0x94, 0xf8, 0x0b, 0x00, + 0x4d, 0x18, 0x76, 0xd7, 0x0b, 0x40, 0x44, 0x80, 0x11, 0x78, 0xd3, 0x01, + 0x43, 0x0e, 0x0b, 0x77, 0xd3, 0x41, 0x48, 0xa8, 0xc5, 0x61, 0xf9, 0x01, + 0x03, 0xe5, 0x0a, 0x01, 0xff, 0x51, 0xdc, 0x57, 0xb9, 0x16, 0x01, 0x06, + 0xef, 0x06, 0xd1, 0x02, 0x07, 0xec, 0x05, 0x4e, 0x05, 0x5a, 0x03, 0x2d, + 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x1a, 0xe5, 0xb2, 0x16, 0x01, 0xe9, + 0xae, 0x16, 0x81, 0x0d, 0xef, 0xb4, 0x16, 0x01, 0xf5, 0xb0, 0x16, 0xc1, + 0x00, 0xf5, 0xb1, 0x16, 0x41, 0xe9, 0xaf, 0x16, 0x41, 0xe1, 0xad, 0x16, + 0x01, 0xe9, 0xb3, 0x16, 0x01, 0xf5, 0xb5, 0x16, 0x41, 0x48, 0x3c, 0x16, + 0xab, 0x16, 0x01, 0x45, 0x3f, 0x3f, 0xb7, 0x16, 0x01, 0x02, 0x02, 0x00, + 0x01, 0xff, 0x44, 0xe5, 0x23, 0xb6, 0x16, 0x01, 0x45, 0xec, 0x4b, 0xac, + 0x16, 0x41, 0xe1, 0x80, 0x16, 0x81, 0xe7, 0x01, 0xa2, 0xda, 0x01, 0xa3, + 0xcd, 0x01, 0xa4, 0xb4, 0x01, 0xe5, 0x86, 0x16, 0x01, 0xa7, 0xa3, 0x01, + 0x42, 0x22, 0x00, 0xa9, 0x16, 0x01, 0xe9, 0x82, 0x16, 0x81, 0x93, 0x01, + 0xaa, 0x86, 0x01, 0xab, 0x7a, 0x42, 0x74, 0x00, 0xa5, 0x16, 0x01, 0x42, + 0x6c, 0x00, 0xa2, 0x16, 0x01, 0xae, 0x56, 0xef, 0x88, 0x16, 0x01, 0xb0, + 0x46, 0xb2, 0x3a, 0xb3, 0x2e, 0xb4, 0x15, 0xf5, 0x84, 0x16, 0x81, 0x0c, + 0x42, 0xf5, 0x0a, 0xa6, 0x16, 0x01, 0x42, 0xbc, 0x22, 0xa3, 0x16, 0x41, + 0xf5, 0x85, 0x16, 0x41, 0xe1, 0x99, 0x16, 0x01, 0x42, 0x22, 0x00, 0x9a, + 0x16, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x94, 0x16, 0x01, 0x42, 0x22, 0x00, + 0x95, 0x16, 0x41, 0xe1, 0xa8, 0x16, 0x01, 0x42, 0x22, 0x00, 0xa7, 0x16, + 0x41, 0xe1, 0xa4, 0x16, 0x01, 0x42, 0x71, 0x00, 0xaa, 0x16, 0x41, 0xe1, + 0x9e, 0x16, 0x01, 0x42, 0x22, 0x00, 0x9f, 0x16, 0x41, 0xe1, 0x9d, 0x16, + 0x01, 0x42, 0x24, 0x02, 0x8e, 0x16, 0x01, 0x42, 0x2a, 0x05, 0x98, 0x16, + 0x01, 0x42, 0xbc, 0x22, 0x93, 0x16, 0x41, 0xe1, 0x8a, 0x16, 0x01, 0x42, + 0x22, 0x00, 0x8b, 0x16, 0x41, 0xe1, 0x91, 0x16, 0x01, 0x42, 0x22, 0x00, + 0x92, 0x16, 0x41, 0xe9, 0x83, 0x16, 0x41, 0xe1, 0x8c, 0x16, 0x01, 0x42, + 0x22, 0x00, 0x8d, 0x16, 0x41, 0xe1, 0x9b, 0x16, 0x01, 0xa4, 0x06, 0x42, + 0x22, 0x00, 0x9c, 0x16, 0x41, 0xe1, 0x96, 0x16, 0x01, 0x42, 0x22, 0x00, + 0x97, 0x16, 0x41, 0xe1, 0x8f, 0x16, 0x01, 0x42, 0x22, 0x00, 0x90, 0x16, + 0x41, 0xe1, 0xa0, 0x16, 0x01, 0x42, 0x22, 0x00, 0xa1, 0x16, 0x41, 0xe1, + 0x81, 0x16, 0x01, 0xe9, 0x87, 0x16, 0x01, 0x4a, 0xf1, 0xaf, 0xb8, 0x16, + 0x01, 0xf5, 0x89, 0x16, 0x41, 0x45, 0x12, 0x0b, 0xc8, 0x16, 0x01, 0xa6, + 0x2e, 0x44, 0xcf, 0x2a, 0xc9, 0x16, 0x01, 0x43, 0x0e, 0x0b, 0xc1, 0x16, + 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xc0, 0x16, 0x41, 0x44, + 0x25, 0x01, 0xc3, 0x16, 0x01, 0x42, 0x15, 0x02, 0xc2, 0x16, 0x41, 0x44, + 0xc9, 0x1d, 0xc7, 0x16, 0x01, 0x42, 0x01, 0x26, 0xc6, 0x16, 0x41, 0x43, + 0xd2, 0x05, 0xc5, 0x16, 0x01, 0x43, 0xf6, 0x06, 0xc4, 0x16, 0x41, 0x0a, + 0x8b, 0xac, 0xc6, 0x0c, 0x05, 0x5b, 0xa3, 0x8b, 0x06, 0x05, 0x1d, 0xec, + 0xca, 0x02, 0x03, 0x48, 0x58, 0x01, 0xff, 0x07, 0xec, 0x05, 0x2e, 0xb3, + 0x06, 0x47, 0xa6, 0xd7, 0xff, 0xe6, 0x41, 0x04, 0x5b, 0x03, 0x06, 0x4c, + 0x2f, 0x97, 0xfe, 0xe6, 0x41, 0xa1, 0x0c, 0x42, 0x14, 0x05, 0xf5, 0xe6, + 0x01, 0x42, 0xd6, 0x13, 0xe3, 0xe6, 0x41, 0x42, 0x1d, 0x01, 0xef, 0xe6, + 0x01, 0xf5, 0xe6, 0xe6, 0x01, 0xf9, 0xee, 0xe6, 0x41, 0xa1, 0xee, 0x01, + 0x42, 0x5d, 0x00, 0xd0, 0xe6, 0x01, 0x42, 0x13, 0x05, 0xc6, 0xe6, 0x01, + 0x42, 0x3b, 0x01, 0xcb, 0xe6, 0x01, 0xe5, 0xe8, 0xe6, 0x01, 0x42, 0x06, + 0x14, 0xc4, 0xe6, 0x01, 0x05, 0x48, 0x0b, 0x97, 0x01, 0xe9, 0xe1, 0xe6, + 0x81, 0x8d, 0x01, 0x42, 0x13, 0x01, 0xd8, 0xe6, 0x81, 0x4b, 0x42, 0xc3, + 0x07, 0xd6, 0xe6, 0x01, 0xae, 0x39, 0xef, 0xe7, 0xe6, 0x81, 0x30, 0x43, + 0x01, 0x3d, 0xd3, 0xe6, 0x01, 0x42, 0x1f, 0xbd, 0xdc, 0xe6, 0x01, 0x43, + 0x2a, 0x08, 0xce, 0xe6, 0x01, 0xf5, 0xe4, 0xe6, 0x81, 0x0c, 0x42, 0x0a, + 0x1d, 0xd9, 0xe6, 0x01, 0x42, 0xa9, 0x47, 0xd7, 0xe6, 0x41, 0xe1, 0xeb, + 0xe6, 0x01, 0xe5, 0xe2, 0xe6, 0xc1, 0x00, 0xe1, 0xea, 0xe6, 0x41, 0xef, + 0xec, 0xe6, 0x41, 0x42, 0x06, 0x14, 0xc5, 0xe6, 0x01, 0xef, 0xcf, 0xe6, + 0x41, 0x02, 0xd2, 0x00, 0x01, 0xff, 0x42, 0x68, 0x03, 0xd4, 0xe6, 0x01, + 0x42, 0x0b, 0x00, 0xda, 0xe6, 0x01, 0xab, 0x18, 0x43, 0x0d, 0x54, 0xc9, + 0xe6, 0x01, 0x42, 0x9c, 0x01, 0xd1, 0xe6, 0x01, 0x42, 0x1e, 0x00, 0xcc, + 0xe6, 0x01, 0x42, 0xc7, 0x2f, 0xc7, 0xe6, 0x41, 0x42, 0x0b, 0x00, 0xc2, + 0xe6, 0x01, 0xef, 0xc0, 0xe6, 0x01, 0x42, 0x0a, 0x1d, 0xdd, 0xe6, 0x41, + 0xe1, 0xe9, 0xe6, 0x41, 0x42, 0x68, 0x03, 0xd5, 0xe6, 0x01, 0x42, 0x0b, + 0x00, 0xdb, 0xe6, 0x01, 0xab, 0x18, 0x43, 0x0d, 0x54, 0xca, 0xe6, 0x01, + 0x42, 0x9c, 0x01, 0xd2, 0xe6, 0x01, 0x42, 0x1e, 0x00, 0xcd, 0xe6, 0x01, + 0x42, 0xc7, 0x2f, 0xc8, 0xe6, 0x41, 0x42, 0x0b, 0x00, 0xc3, 0xe6, 0x01, + 0xef, 0xc1, 0xe6, 0x01, 0x42, 0x0a, 0x1d, 0xde, 0xe6, 0x41, 0xe1, 0xe0, + 0xe6, 0x01, 0xe5, 0xe5, 0xe6, 0x01, 0xeb, 0xf2, 0xe6, 0x01, 0xed, 0xf1, + 0xe6, 0x01, 0xee, 0xf0, 0xe6, 0x01, 0xf0, 0xf4, 0xe6, 0x01, 0xf4, 0xf3, + 0xe6, 0x01, 0x42, 0xd6, 0x13, 0xed, 0xe6, 0x41, 0x07, 0xec, 0x05, 0x91, + 0x01, 0x05, 0x67, 0xe8, 0x80, 0x01, 0x07, 0x5f, 0x16, 0x5c, 0x09, 0xe7, + 0xbf, 0x40, 0x06, 0x3c, 0x39, 0x01, 0xff, 0xa1, 0x23, 0xe5, 0xb5, 0xaa, + 0x00, 0xe9, 0xb2, 0xaa, 0x80, 0x16, 0xef, 0xb6, 0xaa, 0x00, 0xf5, 0xb4, + 0xaa, 0xc0, 0x00, 0xe1, 0xba, 0xaa, 0x00, 0xe5, 0xb3, 0xaa, 0xc0, 0x00, + 0xe1, 0xb9, 0xaa, 0x40, 0xe1, 0xb8, 0xaa, 0x40, 0xe1, 0xb1, 0xaa, 0x00, + 0xed, 0xbe, 0xaa, 0x00, 0xee, 0xbd, 0xaa, 0x00, 0x42, 0xd6, 0x13, 0xbb, + 0xaa, 0x00, 0xf9, 0xbc, 0xaa, 0x40, 0x42, 0xd5, 0x18, 0xbf, 0xaa, 0x00, + 0x45, 0x4d, 0xe9, 0xc0, 0xaa, 0x00, 0x44, 0xb9, 0xf2, 0xc2, 0xaa, 0x00, + 0x43, 0x2a, 0x08, 0xc1, 0xaa, 0x40, 0x46, 0x92, 0xdc, 0xde, 0xaa, 0x00, + 0x02, 0x4d, 0x03, 0x0c, 0x45, 0x4d, 0xe9, 0xdc, 0xaa, 0x00, 0x43, 0xdc, + 0x85, 0xdd, 0xaa, 0x40, 0x45, 0x31, 0xe7, 0xdf, 0xaa, 0x00, 0xee, 0xdb, + 0xaa, 0x40, 0x43, 0x1c, 0x01, 0xb0, 0xaa, 0x00, 0x43, 0xae, 0x02, 0xb7, + 0xaa, 0x40, 0x05, 0x48, 0x0b, 0x93, 0x01, 0x04, 0x08, 0x05, 0x01, 0xff, + 0x42, 0x5d, 0x00, 0x9a, 0xaa, 0x00, 0xa3, 0x7c, 0x42, 0x3b, 0x01, 0x92, + 0xaa, 0x00, 0x42, 0x68, 0x03, 0xa0, 0xaa, 0x00, 0x42, 0x06, 0x14, 0x86, + 0xaa, 0x00, 0x42, 0x0b, 0x00, 0xac, 0xaa, 0x00, 0xab, 0x52, 0x42, 0x13, + 0x01, 0xa8, 0xaa, 0x00, 0x42, 0xc3, 0x07, 0xa2, 0xaa, 0x00, 0xae, 0x34, + 0xef, 0xae, 0xaa, 0x00, 0xb0, 0x24, 0x42, 0xd0, 0x00, 0xa6, 0xaa, 0x00, + 0x42, 0x60, 0x03, 0x8e, 0xaa, 0x00, 0xb4, 0x0c, 0x42, 0x0a, 0x1d, 0xaa, + 0xaa, 0x00, 0x42, 0xa9, 0x47, 0xa4, 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x96, + 0xaa, 0x00, 0xef, 0x94, 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x9e, 0xaa, 0x00, + 0xef, 0x9c, 0xaa, 0x40, 0x42, 0x06, 0x14, 0x88, 0xaa, 0x00, 0xef, 0x98, + 0xaa, 0x00, 0x42, 0xa9, 0x47, 0x90, 0xaa, 0x40, 0xa8, 0x04, 0xef, 0x80, + 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x84, 0xaa, 0x00, 0xef, 0x82, 0xaa, 0x40, + 0x42, 0x0b, 0x00, 0x8c, 0xaa, 0x00, 0xef, 0x8a, 0xaa, 0x40, 0x42, 0x5d, + 0x00, 0x9b, 0xaa, 0x00, 0xa3, 0x7c, 0x42, 0x3b, 0x01, 0x93, 0xaa, 0x00, + 0x42, 0x68, 0x03, 0xa1, 0xaa, 0x00, 0x42, 0x06, 0x14, 0x87, 0xaa, 0x00, + 0x42, 0x0b, 0x00, 0xad, 0xaa, 0x00, 0xab, 0x52, 0x42, 0x13, 0x01, 0xa9, + 0xaa, 0x00, 0x42, 0xc3, 0x07, 0xa3, 0xaa, 0x00, 0xae, 0x34, 0xef, 0xaf, + 0xaa, 0x00, 0xb0, 0x24, 0x42, 0xd0, 0x00, 0xa7, 0xaa, 0x00, 0x42, 0x60, + 0x03, 0x8f, 0xaa, 0x00, 0xb4, 0x0c, 0x42, 0x0a, 0x1d, 0xab, 0xaa, 0x00, + 0x42, 0xa9, 0x47, 0xa5, 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x97, 0xaa, 0x00, + 0xef, 0x95, 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x9f, 0xaa, 0x00, 0xef, 0x9d, + 0xaa, 0x40, 0x42, 0x06, 0x14, 0x89, 0xaa, 0x00, 0xef, 0x99, 0xaa, 0x00, + 0x42, 0xa9, 0x47, 0x91, 0xaa, 0x40, 0xa8, 0x04, 0xef, 0x81, 0xaa, 0x40, + 0x42, 0x0b, 0x00, 0x85, 0xaa, 0x00, 0xef, 0x83, 0xaa, 0x40, 0x42, 0x0b, + 0x00, 0x8d, 0xaa, 0x00, 0xef, 0x8b, 0xaa, 0x40, 0x02, 0x13, 0x05, 0xe9, + 0x05, 0x0b, 0x15, 0x9d, 0xa2, 0x05, 0x07, 0xec, 0x05, 0xdd, 0x02, 0x05, + 0x5a, 0x03, 0xac, 0x01, 0x0b, 0x5b, 0xa3, 0x66, 0x0b, 0x40, 0x77, 0x01, + 0xff, 0xe1, 0x61, 0x1a, 0x80, 0x50, 0xe5, 0x6e, 0x1a, 0x00, 0xe9, 0x65, + 0x1a, 0x80, 0x43, 0x47, 0x15, 0xd3, 0x62, 0x1a, 0x00, 0xef, 0x6b, 0x1a, + 0x80, 0x20, 0xb4, 0x12, 0xf5, 0x69, 0x1a, 0xc0, 0x00, 0xe5, 0x67, 0x1a, + 0x00, 0xf5, 0x6a, 0x1a, 0xc0, 0x00, 0xe5, 0x68, 0x1a, 0x40, 0x46, 0x2d, + 0xd6, 0x64, 0x1a, 0x00, 0x46, 0x44, 0xdc, 0x72, 0x1a, 0x40, 0x02, 0x5a, + 0x00, 0x08, 0xef, 0x70, 0x1a, 0x00, 0xf9, 0x6d, 0x1a, 0x40, 0x45, 0x5c, + 0x00, 0x73, 0x1a, 0x00, 0x45, 0x20, 0x07, 0x6c, 0x1a, 0x40, 0xe9, 0x66, + 0x1a, 0x40, 0xe1, 0x63, 0x1a, 0x00, 0xe5, 0x6f, 0x1a, 0x00, 0xe9, 0x71, + 0x1a, 0x40, 0x45, 0x12, 0x0b, 0x98, 0x1a, 0x00, 0xa6, 0x2e, 0x44, 0xcf, + 0x2a, 0x99, 0x1a, 0x00, 0x43, 0x0e, 0x0b, 0x91, 0x1a, 0x00, 0xb3, 0x14, + 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x90, 0x1a, 0x40, 0x44, 0x25, 0x01, 0x93, + 0x1a, 0x00, 0x42, 0x15, 0x02, 0x92, 0x1a, 0x40, 0x44, 0xc9, 0x1d, 0x97, + 0x1a, 0x00, 0x42, 0x01, 0x26, 0x96, 0x1a, 0x40, 0x43, 0xd2, 0x05, 0x95, + 0x1a, 0x00, 0x43, 0xf6, 0x06, 0x94, 0x1a, 0x40, 0x45, 0xe3, 0xe4, 0xad, + 0x1a, 0x00, 0x46, 0xfa, 0xda, 0xa5, 0x1a, 0x00, 0xa8, 0x91, 0x01, 0xab, + 0x61, 0x04, 0xa2, 0x45, 0x44, 0xb2, 0x36, 0x02, 0x40, 0x06, 0x19, 0x05, + 0xeb, 0x31, 0x0d, 0x45, 0x4f, 0xec, 0xa0, 0x1a, 0xc0, 0x00, 0x44, 0x15, + 0xf3, 0xa1, 0x1a, 0x40, 0xd1, 0x75, 0x1a, 0x00, 0xd2, 0x76, 0x1a, 0x40, + 0x43, 0x07, 0x8e, 0x60, 0x1a, 0x00, 0x45, 0x50, 0xeb, 0xaa, 0x1a, 0x80, + 0x06, 0x43, 0x25, 0x1a, 0xa2, 0x1a, 0x40, 0x43, 0xe9, 0x75, 0xab, 0x1a, + 0x40, 0x46, 0x62, 0xd9, 0x7a, 0x1a, 0x00, 0x54, 0x30, 0x42, 0xa6, 0x1a, + 0x40, 0x44, 0xc6, 0xa7, 0x74, 0x1a, 0x80, 0x0c, 0x43, 0xdc, 0x85, 0x7b, + 0x1a, 0x00, 0x45, 0x86, 0xec, 0xa7, 0x1a, 0x40, 0x44, 0xfb, 0x43, 0x58, + 0x1a, 0x40, 0x43, 0x80, 0x12, 0xa8, 0x1a, 0x80, 0x21, 0x43, 0x66, 0x54, + 0xa3, 0x1a, 0x00, 0x04, 0x61, 0xf0, 0x01, 0xff, 0x06, 0xea, 0x31, 0x06, + 0x4a, 0xaf, 0xa6, 0x7c, 0x1a, 0x40, 0xd3, 0x77, 0x1a, 0x00, 0xd4, 0x78, + 0x1a, 0x00, 0xd5, 0x79, 0x1a, 0x40, 0x43, 0xe9, 0x75, 0xa9, 0x1a, 0x40, + 0x43, 0x1c, 0x01, 0xac, 0x1a, 0x00, 0x42, 0x58, 0x69, 0xa4, 0x1a, 0x40, + 0xe1, 0x4b, 0x1a, 0x00, 0x42, 0x16, 0x00, 0x37, 0x1a, 0x00, 0x42, 0xf0, + 0x10, 0x2f, 0x1a, 0x00, 0x42, 0x27, 0x01, 0x51, 0x1a, 0x00, 0x48, 0x80, + 0xc6, 0x54, 0x1a, 0x00, 0x05, 0x48, 0x0b, 0xbf, 0x01, 0xe9, 0x4d, 0x1a, + 0x80, 0xb5, 0x01, 0xac, 0x46, 0x42, 0x6c, 0x00, 0x3e, 0x1a, 0x00, 0xae, + 0x2e, 0x42, 0xcd, 0x02, 0x52, 0x1a, 0x00, 0xb2, 0x0f, 0xf5, 0x4f, 0x1a, + 0x80, 0x06, 0x42, 0xa9, 0x01, 0x45, 0x1a, 0x40, 0xf5, 0x50, 0x1a, 0x40, + 0xe1, 0x41, 0x1a, 0x80, 0x06, 0x42, 0xd6, 0x13, 0x42, 0x1a, 0x40, 0x42, + 0x2a, 0x05, 0x31, 0x1a, 0x00, 0x42, 0x12, 0x00, 0x2d, 0x1a, 0x40, 0xe1, + 0x36, 0x1a, 0x00, 0x42, 0x24, 0x02, 0x26, 0x1a, 0x00, 0x42, 0xbc, 0x22, + 0x2c, 0x1a, 0x40, 0xe1, 0x43, 0x1a, 0x80, 0x64, 0x42, 0x74, 0x00, 0x4a, + 0x1a, 0x00, 0x03, 0xd1, 0x00, 0x06, 0x42, 0xd6, 0x13, 0x44, 0x1a, 0x40, + 0xa3, 0x48, 0x42, 0x0c, 0x08, 0x3c, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x4c, + 0x1a, 0x00, 0xab, 0x2a, 0xb0, 0x1e, 0x45, 0xd5, 0x42, 0x30, 0x1a, 0x00, + 0x42, 0x40, 0x06, 0x2a, 0x1a, 0x00, 0xb4, 0x06, 0x42, 0xbc, 0x22, 0x3f, + 0x1a, 0x40, 0xe1, 0x34, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x35, 0x1a, 0x40, + 0xe1, 0x3b, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x3d, 0x1a, 0x40, 0xe1, 0x23, + 0x1a, 0x00, 0x42, 0x22, 0x00, 0x25, 0x1a, 0x00, 0x42, 0xed, 0x26, 0x24, + 0x1a, 0x40, 0xe1, 0x29, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x2b, 0x1a, 0x40, + 0xe5, 0x53, 0x1a, 0x40, 0xe9, 0x4e, 0x1a, 0x40, 0xa3, 0x54, 0x42, 0x0c, + 0x08, 0x3a, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x49, 0x1a, 0x00, 0xab, 0x36, + 0xb0, 0x2a, 0x45, 0xd5, 0x42, 0x2e, 0x1a, 0x00, 0xb3, 0x12, 0xb4, 0x06, + 0x42, 0xbc, 0x22, 0x40, 0x1a, 0x40, 0xe1, 0x32, 0x1a, 0x00, 0x42, 0x22, + 0x00, 0x33, 0x1a, 0x40, 0xe1, 0x48, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x46, + 0x1a, 0x00, 0x42, 0x40, 0x06, 0x47, 0x1a, 0x40, 0xe1, 0x38, 0x1a, 0x00, + 0x42, 0x22, 0x00, 0x39, 0x1a, 0x40, 0xe1, 0x20, 0x1a, 0x00, 0x42, 0x22, + 0x00, 0x21, 0x1a, 0x00, 0x42, 0xed, 0x26, 0x22, 0x1a, 0x40, 0xe1, 0x27, + 0x1a, 0x00, 0x42, 0x22, 0x00, 0x28, 0x1a, 0x40, 0x45, 0x12, 0x0b, 0x88, + 0x1a, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x89, 0x1a, 0x00, 0x43, 0x0e, + 0x0b, 0x81, 0x1a, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x80, + 0x1a, 0x40, 0x44, 0x25, 0x01, 0x83, 0x1a, 0x00, 0x42, 0x15, 0x02, 0x82, + 0x1a, 0x40, 0x44, 0xc9, 0x1d, 0x87, 0x1a, 0x00, 0x42, 0x01, 0x26, 0x86, + 0x1a, 0x40, 0x43, 0xd2, 0x05, 0x85, 0x1a, 0x00, 0x43, 0xf6, 0x06, 0x84, + 0x1a, 0x40, 0x59, 0xca, 0x24, 0x7f, 0x1a, 0x00, 0x0d, 0x3f, 0x33, 0x01, + 0xff, 0x42, 0x16, 0x00, 0x5d, 0x1a, 0x00, 0x49, 0xe8, 0xb8, 0x59, 0x1a, + 0x00, 0x54, 0xd0, 0x42, 0x5b, 0x1a, 0x00, 0xac, 0x1d, 0xad, 0x06, 0x42, + 0x40, 0x06, 0x5e, 0x1a, 0x40, 0xe1, 0x5c, 0x1a, 0x00, 0x06, 0x4d, 0x33, + 0x01, 0xff, 0x42, 0x74, 0x00, 0x56, 0x1a, 0x00, 0x42, 0x71, 0x00, 0x55, + 0x1a, 0x40, 0x4a, 0x3b, 0xa7, 0x57, 0x1a, 0x00, 0x45, 0x90, 0x35, 0x5a, + 0x1a, 0x40, 0xe1, 0x63, 0x19, 0x80, 0xb0, 0x01, 0xe5, 0x6b, 0x19, 0x80, + 0xa2, 0x01, 0x42, 0x0c, 0x08, 0x5c, 0x19, 0x00, 0x42, 0x22, 0x00, 0x5e, + 0x19, 0x00, 0xe9, 0x64, 0x19, 0x00, 0xab, 0x85, 0x01, 0x42, 0x74, 0x00, + 0x58, 0x19, 0x00, 0x42, 0x6c, 0x00, 0x5b, 0x19, 0x00, 0xae, 0x6d, 0xef, + 0x69, 0x19, 0x80, 0x64, 0xb0, 0x58, 0x42, 0x43, 0x14, 0x5f, 0x19, 0x00, + 0x42, 0x40, 0x06, 0x54, 0x19, 0x00, 0xb4, 0x1b, 0xf5, 0x67, 0x19, 0x80, + 0x12, 0x42, 0xf5, 0x0a, 0x5d, 0x19, 0x00, 0x42, 0xed, 0x26, 0x51, 0x19, + 0x00, 0x42, 0xbc, 0x22, 0x55, 0x19, 0x40, 0xe5, 0x6a, 0x19, 0x40, 0xe1, + 0x56, 0x19, 0x00, 0x42, 0x22, 0x00, 0x57, 0x19, 0x00, 0x04, 0x00, 0x20, + 0x0d, 0xb3, 0x01, 0xff, 0xe1, 0x53, 0x19, 0x00, 0x42, 0x22, 0x00, 0x61, + 0x19, 0x40, 0xd2, 0x70, 0x19, 0x00, 0xd3, 0x71, 0x19, 0x00, 0xd4, 0x72, + 0x19, 0x00, 0xd5, 0x73, 0x19, 0x00, 0xd6, 0x74, 0x19, 0x40, 0xe1, 0x59, + 0x19, 0x00, 0x42, 0x22, 0x00, 0x5a, 0x19, 0x40, 0xef, 0x68, 0x19, 0x40, + 0xe1, 0x62, 0x19, 0x00, 0x42, 0x24, 0x02, 0x52, 0x19, 0x40, 0xe1, 0x50, + 0x19, 0x00, 0x42, 0x22, 0x00, 0x60, 0x19, 0x40, 0xe5, 0x65, 0x19, 0x00, + 0xe8, 0x66, 0x19, 0x40, 0xe9, 0x6d, 0x19, 0x00, 0x42, 0xd6, 0x13, 0x6c, + 0x19, 0x40, 0x80, 0x82, 0x02, 0x05, 0x39, 0xe4, 0x70, 0x06, 0x10, 0xda, + 0x01, 0xff, 0x07, 0xec, 0x05, 0x0d, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xe9, + 0x72, 0x17, 0x00, 0xf5, 0x73, 0x17, 0x40, 0xe1, 0x60, 0x17, 0x00, 0x42, + 0x16, 0x00, 0x6a, 0x17, 0x00, 0x42, 0xf0, 0x10, 0x67, 0x17, 0x00, 0x42, + 0x24, 0x02, 0x64, 0x17, 0x00, 0xe9, 0x61, 0x17, 0x00, 0x42, 0x1b, 0x02, + 0x63, 0x17, 0x00, 0x42, 0x74, 0x00, 0x6e, 0x17, 0x00, 0x42, 0x6c, 0x00, + 0x6b, 0x17, 0x00, 0xae, 0x22, 0x42, 0xbb, 0x09, 0x69, 0x17, 0x00, 0x42, + 0x40, 0x06, 0x70, 0x17, 0x00, 0x42, 0x12, 0x00, 0x66, 0x17, 0x00, 0xf5, + 0x62, 0x17, 0x00, 0x42, 0xa9, 0x01, 0x6f, 0x17, 0x00, 0x42, 0xbc, 0x22, + 0x6c, 0x17, 0x40, 0xe1, 0x68, 0x17, 0x00, 0x42, 0x24, 0x02, 0x65, 0x17, + 0x40, 0x07, 0xec, 0x05, 0x1d, 0x05, 0x5a, 0x03, 0x0d, 0x0b, 0x40, 0x77, + 0x01, 0xff, 0xe9, 0x12, 0x17, 0x00, 0xf5, 0x13, 0x17, 0x40, 0x48, 0xbb, + 0x88, 0x15, 0x17, 0x00, 0x46, 0xe3, 0x23, 0x14, 0x17, 0x40, 0xe1, 0x00, + 0x17, 0x80, 0x62, 0x42, 0x16, 0x00, 0x0a, 0x17, 0x00, 0x42, 0xf0, 0x10, + 0x07, 0x17, 0x00, 0x42, 0x24, 0x02, 0x04, 0x17, 0x00, 0x42, 0x22, 0x00, + 0x11, 0x17, 0x00, 0xe9, 0x01, 0x17, 0x00, 0x42, 0x1b, 0x02, 0x03, 0x17, + 0x00, 0x42, 0x74, 0x00, 0x0e, 0x17, 0x00, 0x42, 0x6c, 0x00, 0x0b, 0x17, + 0x00, 0xae, 0x28, 0x42, 0xbb, 0x09, 0x09, 0x17, 0x00, 0x42, 0x71, 0x00, + 0x0d, 0x17, 0x00, 0x42, 0x40, 0x06, 0x10, 0x17, 0x00, 0x42, 0x12, 0x00, + 0x06, 0x17, 0x00, 0xf5, 0x02, 0x17, 0x00, 0x42, 0xa9, 0x01, 0x0f, 0x17, + 0x00, 0x42, 0xbc, 0x22, 0x0c, 0x17, 0x40, 0xe1, 0x08, 0x17, 0x00, 0x42, + 0x24, 0x02, 0x05, 0x17, 0x40, 0x49, 0x76, 0xbe, 0x1f, 0x17, 0x40, 0xa1, + 0x82, 0x04, 0xa3, 0xe1, 0x03, 0xa4, 0x92, 0x03, 0xa5, 0x83, 0x03, 0x49, + 0x81, 0x16, 0x2e, 0x00, 0x0e, 0x02, 0x87, 0x00, 0xec, 0x02, 0x4c, 0xc7, + 0x8f, 0x2d, 0x00, 0x0e, 0xac, 0x63, 0x4b, 0x43, 0xa0, 0x23, 0x00, 0x0e, + 0xb0, 0x4f, 0x02, 0x7c, 0x00, 0x3f, 0xb2, 0x20, 0xb3, 0x0c, 0x45, 0x35, + 0x23, 0x7e, 0x00, 0x0e, 0x4d, 0xcd, 0x0b, 0x7c, 0x00, 0x4e, 0x48, 0xda, + 0x59, 0x3b, 0x00, 0x0e, 0x46, 0x50, 0x31, 0x2f, 0x00, 0x0e, 0x44, 0xd1, + 0x4c, 0x20, 0x00, 0x4e, 0x4e, 0x67, 0x72, 0x5c, 0x00, 0x0e, 0x05, 0xc9, + 0x00, 0x01, 0xff, 0x4d, 0x72, 0x0b, 0x7d, 0x00, 0x0e, 0x4b, 0xd8, 0x21, + 0x29, 0x00, 0x0e, 0x4e, 0xc8, 0x26, 0x5d, 0x00, 0x4e, 0x4b, 0xa8, 0x34, + 0x3f, 0x00, 0x0e, 0x4c, 0x1b, 0x05, 0x22, 0x00, 0x4e, 0x4b, 0xe1, 0x9b, + 0x25, 0x00, 0x0e, 0x48, 0xe0, 0x71, 0x2b, 0x00, 0x4e, 0x05, 0xdf, 0x05, + 0x24, 0xa5, 0x06, 0x47, 0x76, 0x8a, 0x5f, 0x00, 0x4e, 0x03, 0xc5, 0x00, + 0x06, 0x4c, 0x67, 0x95, 0x3c, 0x00, 0x4e, 0x4d, 0x72, 0x0b, 0x7b, 0x00, + 0x0e, 0x4b, 0xd8, 0x21, 0x28, 0x00, 0x0e, 0x4e, 0xc8, 0x26, 0x5b, 0x00, + 0x4e, 0x0f, 0xe4, 0x05, 0x6d, 0x0d, 0x76, 0x08, 0x01, 0xff, 0xe1, 0x61, + 0x00, 0x0e, 0xe2, 0x62, 0x00, 0x0e, 0xe3, 0x63, 0x00, 0x0e, 0xe4, 0x64, + 0x00, 0x0e, 0xe5, 0x65, 0x00, 0x0e, 0xe6, 0x66, 0x00, 0x0e, 0xe7, 0x67, + 0x00, 0x0e, 0xe8, 0x68, 0x00, 0x0e, 0xe9, 0x69, 0x00, 0x0e, 0xea, 0x6a, + 0x00, 0x0e, 0xeb, 0x6b, 0x00, 0x0e, 0xec, 0x6c, 0x00, 0x0e, 0xed, 0x6d, + 0x00, 0x0e, 0xee, 0x6e, 0x00, 0x0e, 0xef, 0x6f, 0x00, 0x0e, 0xf0, 0x70, + 0x00, 0x0e, 0xf1, 0x71, 0x00, 0x0e, 0xf2, 0x72, 0x00, 0x0e, 0xf3, 0x73, + 0x00, 0x0e, 0xf4, 0x74, 0x00, 0x0e, 0xf5, 0x75, 0x00, 0x0e, 0xf6, 0x76, + 0x00, 0x0e, 0xf7, 0x77, 0x00, 0x0e, 0xf8, 0x78, 0x00, 0x0e, 0xf9, 0x79, + 0x00, 0x0e, 0xfa, 0x7a, 0x00, 0x4e, 0xe1, 0x41, 0x00, 0x0e, 0xe2, 0x42, + 0x00, 0x0e, 0xe3, 0x43, 0x00, 0x0e, 0xe4, 0x44, 0x00, 0x0e, 0xe5, 0x45, + 0x00, 0x0e, 0xe6, 0x46, 0x00, 0x0e, 0xe7, 0x47, 0x00, 0x0e, 0xe8, 0x48, + 0x00, 0x0e, 0xe9, 0x49, 0x00, 0x0e, 0xea, 0x4a, 0x00, 0x0e, 0xeb, 0x4b, + 0x00, 0x0e, 0xec, 0x4c, 0x00, 0x0e, 0xed, 0x4d, 0x00, 0x0e, 0xee, 0x4e, + 0x00, 0x0e, 0xef, 0x4f, 0x00, 0x0e, 0xf0, 0x50, 0x00, 0x0e, 0xf1, 0x51, + 0x00, 0x0e, 0xf2, 0x52, 0x00, 0x0e, 0xf3, 0x53, 0x00, 0x0e, 0xf4, 0x54, + 0x00, 0x0e, 0xf5, 0x55, 0x00, 0x0e, 0xf6, 0x56, 0x00, 0x0e, 0xf7, 0x57, + 0x00, 0x0e, 0xf8, 0x58, 0x00, 0x0e, 0xf9, 0x59, 0x00, 0x0e, 0xfa, 0x5a, + 0x00, 0x4e, 0x4a, 0x17, 0x23, 0x60, 0x00, 0x0e, 0x4f, 0x64, 0x5a, 0x3e, + 0x00, 0x4e, 0x4a, 0x49, 0x13, 0x3d, 0x00, 0x0e, 0x4f, 0xae, 0x00, 0x21, + 0x00, 0x4e, 0x05, 0xf0, 0x06, 0x06, 0x4a, 0x11, 0x9b, 0x24, 0x00, 0x4e, + 0x45, 0x12, 0x0b, 0x38, 0x00, 0x0e, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x39, + 0x00, 0x0e, 0x43, 0x0e, 0x0b, 0x31, 0x00, 0x0e, 0xb3, 0x14, 0xb4, 0x06, + 0x44, 0x43, 0x1e, 0x30, 0x00, 0x4e, 0x44, 0x25, 0x01, 0x33, 0x00, 0x0e, + 0x42, 0x15, 0x02, 0x32, 0x00, 0x4e, 0x44, 0xc9, 0x1d, 0x37, 0x00, 0x0e, + 0x42, 0x01, 0x26, 0x36, 0x00, 0x4e, 0x43, 0xd2, 0x05, 0x35, 0x00, 0x0e, + 0x43, 0xf6, 0x06, 0x34, 0x00, 0x4e, 0x50, 0xd0, 0x04, 0x5e, 0x00, 0x0e, + 0xaf, 0x01, 0xff, 0x43, 0xd7, 0x02, 0x3a, 0x00, 0x0e, 0x02, 0x15, 0x05, + 0x01, 0xff, 0xe1, 0x2c, 0x00, 0x0e, 0x49, 0x85, 0xb8, 0x40, 0x00, 0x4e, + 0x48, 0x13, 0x3e, 0x26, 0x00, 0x0e, 0x49, 0x62, 0x36, 0x27, 0x00, 0x0e, + 0x47, 0x3d, 0x0d, 0x2a, 0x00, 0x4e, 0x43, 0x9e, 0x77, 0x96, 0xf9, 0x01, + 0x45, 0x66, 0x4a, 0x55, 0xf4, 0x41, 0x4c, 0x23, 0x8b, 0xcc, 0x29, 0x00, + 0xa1, 0x99, 0x85, 0x01, 0xa3, 0xfc, 0x83, 0x01, 0xa5, 0xa6, 0x7f, 0xa8, + 0xbc, 0x75, 0xa9, 0xfa, 0x3d, 0xab, 0xcd, 0x3d, 0xac, 0xa3, 0x3c, 0xad, + 0xed, 0x37, 0xae, 0xab, 0x37, 0xaf, 0xcf, 0x2c, 0xb0, 0xd7, 0x2a, 0x02, + 0x7c, 0x00, 0xc5, 0x18, 0xb4, 0xf4, 0x15, 0xb5, 0xa8, 0x0a, 0xb7, 0x8d, + 0x0a, 0xb9, 0x01, 0xff, 0x0b, 0xee, 0x9e, 0xfa, 0x07, 0xad, 0xb2, 0x05, + 0xae, 0xa3, 0x05, 0x02, 0x0d, 0x00, 0x01, 0xff, 0x03, 0x4e, 0x73, 0x06, + 0x43, 0xda, 0x09, 0x89, 0xf4, 0x41, 0x51, 0x0b, 0x50, 0x0f, 0x07, 0x00, + 0x47, 0x64, 0xcf, 0x4a, 0x07, 0x00, 0x02, 0x13, 0x05, 0xed, 0x04, 0x0d, + 0x02, 0x82, 0xdc, 0x04, 0xa5, 0xc2, 0x04, 0x4c, 0xd7, 0x8e, 0x40, 0x07, + 0x00, 0xa8, 0x85, 0x04, 0x07, 0xec, 0x05, 0xca, 0x01, 0x45, 0x01, 0x28, + 0x49, 0x07, 0x00, 0x0d, 0xae, 0x86, 0xb3, 0x01, 0x07, 0xea, 0xd4, 0x9c, + 0x01, 0x49, 0x5b, 0xbe, 0x41, 0x07, 0x00, 0xb2, 0x78, 0x02, 0x6f, 0x00, + 0x3a, 0xb4, 0x17, 0x07, 0xf3, 0xd7, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x33, + 0x07, 0x00, 0x45, 0x20, 0x07, 0x34, 0x07, 0x00, 0x46, 0xb0, 0x1f, 0x35, + 0x07, 0x40, 0x0a, 0xae, 0x12, 0x11, 0x11, 0xb2, 0x5f, 0x01, 0xff, 0x45, + 0x5c, 0x00, 0x43, 0x07, 0x00, 0x45, 0x20, 0x07, 0x44, 0x07, 0x40, 0x45, + 0x5c, 0x00, 0x45, 0x07, 0x00, 0x45, 0x20, 0x07, 0x46, 0x07, 0x40, 0x08, + 0x38, 0xc4, 0x18, 0x0a, 0xc9, 0xaf, 0x01, 0xff, 0x45, 0x94, 0x3b, 0x03, + 0x07, 0x80, 0x06, 0x49, 0x81, 0x16, 0x01, 0x07, 0x40, 0x4c, 0x83, 0x8b, + 0x08, 0x07, 0x40, 0x45, 0x94, 0x3b, 0x04, 0x07, 0x80, 0x06, 0x49, 0x81, + 0x16, 0x02, 0x07, 0x40, 0x08, 0x83, 0x8b, 0x01, 0xff, 0x44, 0xc3, 0x00, + 0x09, 0x07, 0x00, 0x45, 0xc8, 0x00, 0x09, 0x07, 0x40, 0x05, 0xa7, 0xe4, + 0x0c, 0x47, 0xb1, 0xd6, 0x42, 0x07, 0x00, 0x44, 0x1d, 0xf3, 0x3f, 0x07, + 0x40, 0x45, 0x5c, 0x00, 0x36, 0x07, 0x00, 0x45, 0x20, 0x07, 0x37, 0x07, + 0x40, 0x45, 0x5c, 0x00, 0x30, 0x07, 0x00, 0x45, 0x20, 0x07, 0x31, 0x07, + 0x00, 0x46, 0xb0, 0x1f, 0x32, 0x07, 0x40, 0x45, 0x5c, 0x00, 0x47, 0x07, + 0x00, 0x45, 0x20, 0x07, 0x48, 0x07, 0x40, 0x45, 0x41, 0x68, 0x10, 0x07, + 0x00, 0x44, 0x41, 0xef, 0x12, 0x07, 0x00, 0xa4, 0x9b, 0x02, 0xe5, 0x25, + 0x07, 0x00, 0x4d, 0xec, 0x82, 0x24, 0x07, 0x00, 0x45, 0x8c, 0xe6, 0x13, + 0x07, 0x80, 0x83, 0x02, 0x42, 0xb0, 0x01, 0x17, 0x07, 0x80, 0xf5, 0x01, + 0x44, 0xcd, 0xf0, 0x1f, 0x07, 0x00, 0x46, 0x8e, 0xdd, 0x20, 0x07, 0x00, + 0xad, 0x96, 0x01, 0x43, 0xdc, 0x22, 0x22, 0x07, 0x00, 0x42, 0x6f, 0x02, + 0x26, 0x07, 0x80, 0x72, 0x44, 0xf4, 0xd7, 0x29, 0x07, 0x00, 0xb2, 0x5e, + 0xb3, 0x2e, 0xb4, 0x19, 0x43, 0x8a, 0x8a, 0x18, 0x07, 0x00, 0x44, 0x45, + 0xf3, 0x1d, 0x07, 0x80, 0x06, 0x44, 0x27, 0x75, 0x19, 0x07, 0x40, 0x43, + 0x29, 0x15, 0x1e, 0x07, 0x40, 0x42, 0xb7, 0x2d, 0x2c, 0x07, 0x00, 0x43, + 0xda, 0x25, 0x1b, 0x07, 0xc0, 0x00, 0x49, 0x5f, 0xb4, 0x1c, 0x07, 0x40, + 0x44, 0xac, 0xea, 0x28, 0x07, 0x00, 0x46, 0xf3, 0x82, 0x23, 0x07, 0x00, + 0x43, 0x7a, 0x16, 0x2b, 0x07, 0x00, 0x07, 0xc4, 0xd3, 0x06, 0x50, 0x36, + 0x68, 0x11, 0x07, 0x40, 0x42, 0x0c, 0x1a, 0x4f, 0x07, 0x00, 0x45, 0xd6, + 0xe7, 0x4e, 0x07, 0x00, 0x45, 0xa4, 0xec, 0x4d, 0x07, 0x40, 0x4a, 0x33, + 0xaa, 0x27, 0x07, 0x00, 0x43, 0xd1, 0x0c, 0x2a, 0x07, 0x40, 0x06, 0xb6, + 0xdf, 0x01, 0xff, 0x45, 0xc5, 0xe4, 0x2d, 0x07, 0x00, 0x47, 0x52, 0xd0, + 0x2f, 0x07, 0x00, 0x46, 0xfc, 0xdb, 0x2e, 0x07, 0x40, 0x09, 0xeb, 0xb5, + 0x06, 0x42, 0x29, 0x02, 0x21, 0x07, 0x40, 0x43, 0xd9, 0x2a, 0x66, 0x08, + 0x00, 0x42, 0x56, 0x19, 0x61, 0x08, 0x00, 0x02, 0x60, 0x07, 0x2c, 0xae, + 0x12, 0x42, 0x71, 0x00, 0x67, 0x08, 0x00, 0x43, 0xfb, 0x20, 0x6a, 0x08, + 0x00, 0x43, 0xd1, 0x28, 0x63, 0x08, 0x40, 0x42, 0x24, 0x02, 0x60, 0x08, + 0x00, 0xae, 0x06, 0x42, 0xbc, 0x22, 0x62, 0x08, 0x40, 0xe1, 0x64, 0x08, + 0x00, 0x42, 0x2a, 0x05, 0x65, 0x08, 0x40, 0xe1, 0x68, 0x08, 0x00, 0x42, + 0x74, 0x00, 0x69, 0x08, 0x40, 0x42, 0x53, 0x00, 0x1a, 0x07, 0x40, 0x49, + 0x5f, 0xb4, 0x14, 0x07, 0x40, 0x45, 0x39, 0x54, 0x15, 0x07, 0x00, 0x52, + 0x31, 0x54, 0x16, 0x07, 0x40, 0x08, 0x80, 0xc3, 0x1e, 0x04, 0x18, 0x81, + 0x06, 0x4f, 0x67, 0x71, 0x05, 0x07, 0x40, 0x80, 0x06, 0x4d, 0x07, 0x80, + 0x3c, 0x07, 0x40, 0x45, 0x5c, 0x00, 0x3a, 0x07, 0x00, 0x45, 0x20, 0x07, + 0x3b, 0x07, 0x40, 0x4a, 0xef, 0xa7, 0x0d, 0x07, 0x00, 0x49, 0x00, 0xbc, + 0x0c, 0x07, 0x00, 0x46, 0x03, 0xbc, 0x0b, 0x07, 0x40, 0x4f, 0x95, 0x70, + 0x00, 0x07, 0x00, 0x05, 0x09, 0x80, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x3d, + 0x07, 0x00, 0x45, 0x20, 0x07, 0x3e, 0x07, 0x40, 0x47, 0x1c, 0x01, 0x39, + 0x07, 0x00, 0x4a, 0x0b, 0x00, 0x38, 0x07, 0x40, 0x0b, 0xcd, 0x9e, 0x06, + 0x49, 0xb4, 0xbc, 0x0a, 0x07, 0x40, 0x44, 0xc3, 0x00, 0x06, 0x07, 0x00, + 0x45, 0xc8, 0x00, 0x07, 0x07, 0x40, 0x46, 0x8c, 0xd9, 0x4d, 0xf5, 0x01, + 0x4d, 0x0b, 0x75, 0x16, 0x00, 0x40, 0x08, 0x4f, 0x32, 0x06, 0x45, 0x9e, + 0xe8, 0x2f, 0x23, 0x40, 0x4b, 0xe6, 0x51, 0x06, 0x24, 0x00, 0xa2, 0xa6, + 0x02, 0x02, 0x37, 0x00, 0x95, 0x02, 0xa4, 0xc7, 0x01, 0xa5, 0x96, 0x01, + 0xa6, 0x87, 0x01, 0x4f, 0xb6, 0x6d, 0x1d, 0x24, 0x00, 0x55, 0xd8, 0x3b, + 0x09, 0x24, 0x00, 0x49, 0xce, 0x20, 0x0a, 0x24, 0x00, 0x4d, 0x9d, 0x85, + 0x45, 0xf5, 0x01, 0xae, 0x59, 0x50, 0x56, 0x66, 0x1e, 0x24, 0x00, 0xb3, + 0x12, 0x52, 0xf3, 0x55, 0x97, 0x2b, 0x00, 0x4e, 0x05, 0x7e, 0x1f, 0x24, + 0x00, 0x53, 0xd6, 0x4e, 0x0b, 0x24, 0x40, 0x4f, 0xb9, 0x6a, 0x4f, 0x21, + 0x00, 0x05, 0xdc, 0xab, 0x29, 0x44, 0xd1, 0x4c, 0x20, 0x24, 0x00, 0x08, + 0x6d, 0x4d, 0x13, 0x49, 0x2f, 0xc0, 0x1a, 0x24, 0x80, 0x06, 0x4f, 0x09, + 0x75, 0x16, 0x24, 0x40, 0x49, 0x21, 0x2e, 0x26, 0x24, 0x40, 0x47, 0x86, + 0xd1, 0x01, 0x24, 0x00, 0x44, 0x7c, 0x30, 0x02, 0x24, 0x40, 0x42, 0x9e, + 0x01, 0x0f, 0x24, 0x00, 0x43, 0x28, 0x08, 0x0e, 0x24, 0x40, 0xa5, 0x06, + 0x43, 0x82, 0x16, 0x00, 0x24, 0x40, 0x52, 0xdf, 0x51, 0x15, 0x24, 0x00, + 0x45, 0xcd, 0x20, 0x24, 0x24, 0x40, 0x4d, 0x24, 0x84, 0x1c, 0x24, 0x00, + 0x48, 0x68, 0xc9, 0x0c, 0x24, 0x40, 0xae, 0x06, 0x45, 0xf0, 0x6a, 0x1b, + 0x24, 0x40, 0x05, 0x42, 0x05, 0x06, 0x45, 0x1f, 0xea, 0x05, 0x24, 0x40, + 0x46, 0x44, 0x04, 0x19, 0x24, 0x00, 0xb4, 0x01, 0xff, 0x43, 0xd9, 0x06, + 0x03, 0x24, 0x00, 0x4b, 0xc4, 0xa1, 0x04, 0x24, 0xc0, 0x00, 0x46, 0x32, + 0x01, 0x17, 0x24, 0x40, 0x4f, 0xe6, 0x6a, 0x10, 0x24, 0x00, 0xa5, 0x01, + 0xff, 0x44, 0x2e, 0x7b, 0x21, 0x24, 0x80, 0x20, 0x0d, 0x49, 0x8a, 0x01, + 0xff, 0x44, 0xf5, 0x06, 0x14, 0x24, 0x00, 0x43, 0x0e, 0x0b, 0x11, 0x24, + 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x13, 0x24, 0x00, 0x42, 0x15, + 0x02, 0x12, 0x24, 0x40, 0x80, 0x01, 0xff, 0x48, 0x22, 0x2e, 0x25, 0x24, + 0x00, 0x51, 0x2d, 0x5c, 0x29, 0x24, 0x00, 0x5e, 0x61, 0x14, 0x28, 0x24, + 0x00, 0x59, 0x41, 0x26, 0x27, 0x24, 0x40, 0x44, 0x05, 0x2c, 0x18, 0x24, + 0x00, 0x4d, 0x27, 0x88, 0x0d, 0x24, 0x40, 0x48, 0x28, 0xc3, 0x08, 0x24, + 0x00, 0x43, 0x5f, 0x09, 0x07, 0x24, 0x40, 0x07, 0xec, 0x05, 0x4d, 0x0c, + 0xab, 0x93, 0x39, 0x05, 0x5a, 0x03, 0x1b, 0x0b, 0x40, 0x77, 0x01, 0xff, + 0xe1, 0x23, 0xa8, 0x00, 0xe5, 0x26, 0xa8, 0x00, 0xe9, 0x24, 0xa8, 0x00, + 0x42, 0xcd, 0x02, 0x27, 0xa8, 0x00, 0xf5, 0x25, 0xa8, 0x40, 0xa1, 0x0c, + 0x48, 0x50, 0xc5, 0x02, 0xa8, 0x00, 0x47, 0xef, 0x64, 0x06, 0xa8, 0x40, + 0x50, 0xe6, 0x64, 0x2c, 0xa8, 0x00, 0x47, 0x3d, 0x16, 0x0b, 0xa8, 0x40, + 0xd1, 0x28, 0xa8, 0x00, 0xd2, 0x29, 0xa8, 0x00, 0xd3, 0x2a, 0xa8, 0x00, + 0xd4, 0x2b, 0xa8, 0x40, 0xe1, 0x00, 0xa8, 0x00, 0xa2, 0xa9, 0x01, 0xa3, + 0x9c, 0x01, 0xa4, 0x83, 0x01, 0xe5, 0x04, 0xa8, 0x00, 0xa7, 0x73, 0x42, + 0x0b, 0x00, 0x22, 0xa8, 0x00, 0xe9, 0x01, 0xa8, 0x00, 0xaa, 0x5d, 0xab, + 0x51, 0x42, 0x13, 0x01, 0x1f, 0xa8, 0x00, 0x42, 0xc3, 0x07, 0x1d, 0xa8, + 0x00, 0x42, 0xb4, 0x01, 0x18, 0xa8, 0x00, 0xef, 0x05, 0xa8, 0x00, 0xb0, + 0x2f, 0xb2, 0x23, 0x42, 0x60, 0x03, 0x21, 0xa8, 0x00, 0xb4, 0x04, 0xf5, + 0x03, 0xa8, 0x40, 0x42, 0x0b, 0x00, 0x15, 0xa8, 0x00, 0xef, 0x14, 0xa8, + 0x00, 0xb4, 0x01, 0xff, 0x42, 0x0b, 0x00, 0x11, 0xa8, 0x00, 0xef, 0x10, + 0xa8, 0x40, 0xef, 0x1e, 0xa8, 0x00, 0x42, 0xd0, 0x00, 0x20, 0xa8, 0x40, + 0x42, 0x0b, 0x00, 0x1a, 0xa8, 0x00, 0xef, 0x19, 0xa8, 0x40, 0x42, 0x0b, + 0x00, 0x08, 0xa8, 0x00, 0xef, 0x07, 0xa8, 0x40, 0x42, 0x0b, 0x00, 0x0f, + 0xa8, 0x00, 0xef, 0x0e, 0xa8, 0x40, 0x42, 0x0b, 0x00, 0x0a, 0xa8, 0x00, + 0xef, 0x09, 0xa8, 0x40, 0xa4, 0x0a, 0x42, 0x0b, 0x00, 0x17, 0xa8, 0x00, + 0xef, 0x16, 0xa8, 0x40, 0x42, 0x0b, 0x00, 0x13, 0xa8, 0x00, 0xef, 0x12, + 0xa8, 0x40, 0x42, 0x0b, 0x00, 0x0d, 0xa8, 0x00, 0xef, 0x0c, 0xa8, 0x40, + 0x42, 0x0b, 0x00, 0x1c, 0xa8, 0x00, 0xef, 0x1b, 0xa8, 0x40, 0xa1, 0x0c, + 0x45, 0x72, 0xe7, 0xca, 0xf3, 0x01, 0x48, 0x20, 0xcc, 0x53, 0x20, 0x40, + 0xee, 0xa2, 0xf9, 0x01, 0x55, 0x0f, 0x3e, 0x75, 0xf6, 0x41, 0x02, 0x9b, + 0x12, 0xe9, 0x09, 0x46, 0x32, 0xcb, 0x7b, 0x22, 0x80, 0x91, 0x09, 0x08, + 0x58, 0xc8, 0xfa, 0x08, 0xee, 0x09, 0x26, 0x80, 0xac, 0x02, 0x03, 0x6f, + 0x02, 0x1f, 0x02, 0xf5, 0x1b, 0x0f, 0xb3, 0x01, 0xff, 0x42, 0x49, 0x00, + 0x63, 0xf3, 0x01, 0x4f, 0xc1, 0x71, 0x9f, 0xf6, 0x41, 0x4c, 0xef, 0x8b, + 0x2f, 0x22, 0x00, 0x42, 0x33, 0x00, 0xc4, 0xf3, 0x41, 0x44, 0x29, 0xf0, + 0xb8, 0xf9, 0x01, 0xb3, 0x06, 0x47, 0x52, 0xd7, 0xb9, 0xf9, 0x41, 0x06, + 0x75, 0x06, 0x86, 0x01, 0x03, 0x68, 0x09, 0x01, 0xff, 0x06, 0x5c, 0x00, + 0x66, 0x07, 0x92, 0x0a, 0x56, 0x42, 0xf4, 0x01, 0x83, 0x22, 0x80, 0x1d, + 0x51, 0x3d, 0x5d, 0xc9, 0x27, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x43, + 0x23, 0x0a, 0xbe, 0x2a, 0x00, 0x59, 0xfc, 0x24, 0xc2, 0x2a, 0x00, 0x4f, + 0xdf, 0x71, 0xc0, 0x2a, 0x40, 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x13, + 0x4b, 0xf3, 0x28, 0x87, 0x22, 0x80, 0x06, 0x51, 0xa1, 0x5f, 0x8b, 0x22, + 0x40, 0x4f, 0x75, 0x3b, 0xc4, 0x2a, 0x40, 0x4f, 0xaa, 0x6a, 0xca, 0x2a, + 0x00, 0x4b, 0x48, 0x13, 0xc6, 0x2a, 0x00, 0x4c, 0x02, 0x2b, 0xcc, 0x2a, + 0x00, 0x4e, 0x78, 0x3e, 0xc8, 0x2a, 0x40, 0x5e, 0x81, 0x12, 0xd8, 0x2a, + 0x00, 0x46, 0x99, 0x12, 0xd7, 0x2a, 0x40, 0x4f, 0x4d, 0x1a, 0x7b, 0x29, + 0x00, 0x02, 0x6f, 0x00, 0x01, 0xff, 0x44, 0x9b, 0x12, 0xd4, 0x2a, 0x00, + 0x46, 0x29, 0x36, 0xd6, 0x2a, 0x40, 0xa5, 0x62, 0xa6, 0x54, 0xac, 0x40, + 0x45, 0x91, 0x1f, 0x7b, 0x20, 0x00, 0x44, 0xcf, 0x2a, 0x79, 0x20, 0x00, + 0x43, 0x0e, 0x0b, 0xb9, 0x00, 0x00, 0x49, 0xdf, 0x71, 0x7a, 0x20, 0x00, + 0x51, 0xd2, 0x21, 0x7e, 0x20, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, + 0x1e, 0x70, 0x20, 0x40, 0x44, 0x25, 0x01, 0xb3, 0x00, 0x00, 0x42, 0x15, + 0x02, 0xb2, 0x00, 0x40, 0x44, 0xc9, 0x1d, 0x77, 0x20, 0x00, 0x42, 0x01, + 0x26, 0x76, 0x20, 0x40, 0x12, 0x77, 0x50, 0x06, 0x4f, 0x80, 0x24, 0x7d, + 0x20, 0x40, 0xe9, 0x71, 0x20, 0x00, 0xee, 0x7f, 0x20, 0x40, 0x43, 0xd2, + 0x05, 0x75, 0x20, 0x00, 0x43, 0xf6, 0x06, 0x74, 0x20, 0x40, 0x44, 0xc9, + 0x00, 0x78, 0x20, 0x00, 0x4a, 0x49, 0x13, 0x7c, 0x20, 0x40, 0x80, 0xb9, + 0x06, 0x07, 0x3d, 0xd0, 0xcc, 0x02, 0x46, 0x78, 0x97, 0x3b, 0xf3, 0x01, + 0x44, 0xa7, 0xbc, 0x05, 0xf3, 0x81, 0xb8, 0x02, 0x52, 0x2d, 0x55, 0x07, + 0xf3, 0x01, 0x05, 0x09, 0xec, 0x01, 0xff, 0x06, 0xef, 0x06, 0xe6, 0x01, + 0x07, 0xec, 0x05, 0x06, 0x48, 0xf8, 0xca, 0xe1, 0x1b, 0x41, 0xa1, 0xc7, + 0x01, 0x43, 0x07, 0x36, 0xce, 0x1b, 0x01, 0xa3, 0xb2, 0x01, 0xa4, 0xa3, + 0x01, 0x43, 0xbe, 0xde, 0xc2, 0x1b, 0x01, 0x43, 0x70, 0x9c, 0xca, 0x1b, + 0x01, 0x45, 0xdc, 0xe6, 0xcb, 0x1b, 0x01, 0x44, 0x91, 0xf0, 0xc3, 0x1b, + 0x01, 0x44, 0xb9, 0xf0, 0xcf, 0x1b, 0x01, 0xab, 0x71, 0x46, 0xd0, 0xdd, + 0xd0, 0x1b, 0x01, 0x42, 0x6c, 0x00, 0xc7, 0x1b, 0x01, 0xae, 0x57, 0x45, + 0xb1, 0xe9, 0xd1, 0x1b, 0x01, 0xb0, 0x43, 0x43, 0x96, 0x02, 0xc4, 0x1b, + 0x01, 0x04, 0xa9, 0xf2, 0x2f, 0xb4, 0x12, 0x45, 0x04, 0xec, 0xc5, 0x1b, + 0x01, 0x45, 0x13, 0xec, 0xd3, 0x1b, 0x01, 0x43, 0x9d, 0x32, 0xd4, 0x1b, + 0x41, 0x44, 0xf3, 0xa4, 0xc1, 0x1b, 0x01, 0x44, 0x50, 0x76, 0xde, 0x1b, + 0x01, 0xa8, 0x01, 0xff, 0x43, 0xf6, 0x0a, 0xd8, 0x1b, 0x01, 0x43, 0x85, + 0x0e, 0xdf, 0x1b, 0x41, 0x42, 0x68, 0x00, 0xd2, 0x1b, 0x01, 0xf2, 0xdc, + 0x1b, 0x41, 0x43, 0xc9, 0x02, 0xd9, 0x1b, 0x01, 0x42, 0xba, 0x04, 0xc9, + 0x1b, 0x41, 0x42, 0x18, 0x0a, 0xcd, 0x1b, 0x01, 0x43, 0x6c, 0x1e, 0xda, + 0x1b, 0x41, 0x42, 0x22, 0x00, 0xdb, 0x1b, 0x01, 0x42, 0xd5, 0x2a, 0xc6, + 0x1b, 0x01, 0x44, 0xfb, 0xbc, 0xe0, 0x1b, 0x41, 0x43, 0xa5, 0x27, 0xc0, + 0x1b, 0x01, 0x44, 0xa2, 0x49, 0xd7, 0x1b, 0x41, 0x44, 0x10, 0x86, 0xcc, + 0x1b, 0x01, 0x45, 0xf5, 0xe6, 0xdd, 0x1b, 0x41, 0x42, 0x13, 0x00, 0xd6, + 0x1b, 0x01, 0x44, 0x21, 0xf2, 0xc8, 0x1b, 0x01, 0x42, 0xf5, 0x0a, 0xd5, + 0x1b, 0x41, 0x45, 0x12, 0x0b, 0xf8, 0x1b, 0x01, 0xa6, 0x2e, 0x44, 0xcf, + 0x2a, 0xf9, 0x1b, 0x01, 0x43, 0x0e, 0x0b, 0xf1, 0x1b, 0x01, 0xb3, 0x14, + 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xf0, 0x1b, 0x41, 0x44, 0x25, 0x01, 0xf3, + 0x1b, 0x01, 0x42, 0x15, 0x02, 0xf2, 0x1b, 0x41, 0x44, 0xc9, 0x1d, 0xf7, + 0x1b, 0x01, 0x42, 0x01, 0x26, 0xf6, 0x1b, 0x41, 0x43, 0xd2, 0x05, 0xf5, + 0x1b, 0x01, 0x43, 0xf6, 0x06, 0xf4, 0x1b, 0x41, 0x4f, 0x6f, 0x69, 0x04, + 0xf3, 0x41, 0x48, 0xae, 0x88, 0xba, 0x1b, 0x00, 0x11, 0x52, 0x59, 0xb6, + 0x03, 0x06, 0xef, 0x06, 0xef, 0x02, 0x07, 0xec, 0x05, 0x8d, 0x01, 0x12, + 0x9d, 0x54, 0x57, 0x05, 0x5a, 0x03, 0x2c, 0x0d, 0x56, 0x8a, 0x01, 0xff, + 0x45, 0x94, 0xe8, 0xa8, 0x1b, 0x00, 0xae, 0x01, 0xff, 0x47, 0x92, 0xce, + 0xa6, 0x1b, 0x00, 0x47, 0xfa, 0xd0, 0xa9, 0x1b, 0x00, 0x45, 0xaa, 0xe6, + 0xa4, 0x1b, 0x00, 0x45, 0x51, 0x12, 0xa7, 0x1b, 0x00, 0x44, 0x49, 0xf3, + 0xa5, 0x1b, 0x40, 0x02, 0xbb, 0x09, 0x06, 0x46, 0xe3, 0x23, 0xab, 0x1b, + 0x40, 0x45, 0x53, 0xe8, 0xaa, 0x1b, 0x00, 0xae, 0x01, 0xff, 0xa7, 0x06, + 0x45, 0x8b, 0xec, 0x80, 0x1b, 0x40, 0x45, 0x21, 0xe8, 0x81, 0x1b, 0x00, + 0x45, 0x63, 0xec, 0x82, 0x1b, 0x40, 0x4a, 0x2b, 0xa8, 0xc7, 0x1c, 0x00, + 0x45, 0xed, 0xe4, 0xc3, 0x1c, 0x00, 0x4a, 0x2f, 0xa9, 0xc6, 0x1c, 0x00, + 0x4a, 0x4f, 0xac, 0xc5, 0x1c, 0x00, 0x4b, 0xb7, 0x9e, 0xc4, 0x1c, 0x00, + 0xb0, 0x06, 0x45, 0x28, 0xeb, 0xc0, 0x1c, 0x40, 0x47, 0xe6, 0xce, 0xc1, + 0x1c, 0x00, 0x46, 0x06, 0xe1, 0xc2, 0x1c, 0x40, 0xe1, 0x83, 0x1b, 0x80, + 0xcd, 0x01, 0xa2, 0xc0, 0x01, 0x42, 0x37, 0x00, 0x8e, 0x1b, 0x00, 0x42, + 0xf0, 0x10, 0x93, 0x1b, 0x00, 0xe5, 0x88, 0x1b, 0x80, 0xaa, 0x01, 0xa6, + 0x96, 0x01, 0x42, 0x24, 0x02, 0x8c, 0x1b, 0x00, 0x42, 0x22, 0x00, 0xa0, + 0x1b, 0x00, 0xe9, 0x84, 0x1b, 0x00, 0x42, 0x56, 0x19, 0x8f, 0x1b, 0x00, + 0xab, 0x74, 0xac, 0x68, 0x42, 0x6c, 0x00, 0x99, 0x1b, 0x00, 0xae, 0x50, + 0xef, 0x87, 0x1b, 0x00, 0x42, 0xbb, 0x09, 0x95, 0x1b, 0x00, 0x42, 0x43, + 0x14, 0x8b, 0x1b, 0x00, 0xb2, 0x34, 0xb3, 0x28, 0x42, 0x12, 0x00, 0x92, + 0x1b, 0x00, 0xf5, 0x85, 0x1b, 0x00, 0x42, 0xf5, 0x0a, 0x97, 0x1b, 0x00, + 0x42, 0xa9, 0x01, 0x9d, 0x1b, 0x00, 0x42, 0xed, 0x26, 0x9f, 0x1b, 0x00, + 0x42, 0xbc, 0x22, 0x9a, 0x1b, 0x00, 0x42, 0x59, 0x00, 0x90, 0x1b, 0x40, + 0xe1, 0x9e, 0x1b, 0x00, 0x42, 0xbc, 0x22, 0xaf, 0x1b, 0x40, 0xe1, 0x9b, + 0x1b, 0x00, 0x42, 0x97, 0x02, 0xbb, 0x1b, 0x40, 0xe1, 0x94, 0x1b, 0x00, + 0x42, 0x24, 0x02, 0x8d, 0x1b, 0x00, 0x42, 0xbc, 0x22, 0x91, 0x1b, 0x40, + 0xe1, 0x9c, 0x1b, 0x00, 0x42, 0x97, 0x02, 0xbc, 0x1b, 0x40, 0xe1, 0x8a, + 0x1b, 0x00, 0x42, 0x22, 0x00, 0xae, 0x1b, 0x40, 0xe1, 0x96, 0x1b, 0x00, + 0x05, 0xe8, 0x27, 0x01, 0xff, 0xeb, 0xbe, 0x1b, 0x00, 0xed, 0xbf, 0x1b, + 0x40, 0xf5, 0x89, 0x1b, 0x40, 0xe1, 0x98, 0x1b, 0x00, 0x42, 0x22, 0x00, + 0xbd, 0x1b, 0x40, 0xe5, 0x86, 0x1b, 0x00, 0x48, 0x6d, 0xbe, 0xbd, 0x1b, + 0x40, 0x45, 0x12, 0x0b, 0xb8, 0x1b, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, + 0xb9, 0x1b, 0x00, 0x43, 0x0e, 0x0b, 0xb1, 0x1b, 0x00, 0xb3, 0x14, 0xb4, + 0x06, 0x44, 0x43, 0x1e, 0xb0, 0x1b, 0x40, 0x44, 0x25, 0x01, 0xb3, 0x1b, + 0x00, 0x42, 0x15, 0x02, 0xb2, 0x1b, 0x40, 0x44, 0xc9, 0x1d, 0xb7, 0x1b, + 0x00, 0x42, 0x01, 0x26, 0xb6, 0x1b, 0x40, 0x43, 0xd2, 0x05, 0xb5, 0x1b, + 0x00, 0x43, 0xf6, 0x06, 0xb4, 0x1b, 0x40, 0x47, 0x46, 0xd3, 0xa1, 0x1b, + 0x00, 0x02, 0x7d, 0x1a, 0x11, 0x07, 0xa7, 0xd5, 0x01, 0xff, 0x42, 0x6c, + 0x00, 0xac, 0x1b, 0x00, 0x42, 0xa9, 0x01, 0xad, 0x1b, 0x40, 0x44, 0xb8, + 0x96, 0xa2, 0x1b, 0x00, 0x43, 0x59, 0xe7, 0xa3, 0x1b, 0x40, 0x4c, 0xa3, + 0x8c, 0xc5, 0x26, 0x00, 0x49, 0x4f, 0xc1, 0x1e, 0xf3, 0x41, 0x46, 0xb5, + 0x0a, 0xb3, 0x23, 0x00, 0x43, 0x1e, 0x00, 0xb2, 0x23, 0x00, 0x4d, 0xb1, + 0x8a, 0x0b, 0x2a, 0x40, 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x1c, 0x55, + 0xcb, 0x39, 0xe9, 0x22, 0x00, 0x06, 0xf3, 0x28, 0x06, 0x4e, 0xe9, 0x7d, + 0xb1, 0x22, 0x40, 0x45, 0xfb, 0x0c, 0x7d, 0x22, 0x00, 0x4a, 0xd6, 0x39, + 0x7f, 0x22, 0x40, 0x4f, 0xaa, 0x6a, 0xb8, 0x2a, 0x00, 0x4b, 0x48, 0x13, + 0xb4, 0x2a, 0x00, 0x04, 0x70, 0x23, 0x11, 0x0c, 0xf6, 0x2a, 0x01, 0xff, + 0x4b, 0x48, 0x13, 0xb0, 0x2a, 0x00, 0x4c, 0x02, 0x2b, 0xb2, 0x2a, 0x40, + 0x4f, 0xaa, 0x6a, 0xba, 0x2a, 0x00, 0x48, 0xf8, 0x0c, 0xb6, 0x2a, 0x40, + 0x06, 0x75, 0x06, 0x75, 0x03, 0x68, 0x09, 0x06, 0x46, 0x32, 0xc0, 0x1a, + 0x00, 0x40, 0x06, 0x5c, 0x00, 0x50, 0x42, 0xf4, 0x01, 0x82, 0x22, 0x80, + 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x43, 0x23, 0x0a, 0xbd, 0x2a, 0x00, + 0x59, 0xfc, 0x24, 0xc1, 0x2a, 0x00, 0x4f, 0xdf, 0x71, 0xbf, 0x2a, 0x40, + 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x13, 0x4b, 0xf3, 0x28, 0x86, 0x22, + 0x80, 0x06, 0x51, 0xa1, 0x5f, 0x8a, 0x22, 0x40, 0x4f, 0x75, 0x3b, 0xc3, + 0x2a, 0x40, 0x4f, 0xaa, 0x6a, 0xc9, 0x2a, 0x00, 0x4b, 0x48, 0x13, 0xc5, + 0x2a, 0x00, 0x4c, 0x02, 0x2b, 0xcb, 0x2a, 0x00, 0x4e, 0x78, 0x3e, 0xc7, + 0x2a, 0x40, 0x50, 0xb3, 0x02, 0x79, 0x29, 0x00, 0x02, 0x6f, 0x00, 0x01, + 0xff, 0x44, 0x9b, 0x12, 0xd5, 0x2a, 0x00, 0x46, 0x29, 0x36, 0xd3, 0x2a, + 0x40, 0xa5, 0x54, 0xa6, 0x46, 0x50, 0x7f, 0x24, 0x8d, 0x20, 0x00, 0x45, + 0x91, 0x1f, 0x8b, 0x20, 0x00, 0x44, 0xcf, 0x2a, 0x89, 0x20, 0x00, 0x43, + 0x0e, 0x0b, 0x81, 0x20, 0x00, 0x49, 0xdf, 0x71, 0x8a, 0x20, 0x00, 0x51, + 0xd2, 0x21, 0x8e, 0x20, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, + 0x80, 0x20, 0x40, 0x44, 0x25, 0x01, 0x83, 0x20, 0x00, 0x42, 0x15, 0x02, + 0x82, 0x20, 0x40, 0x44, 0xc9, 0x1d, 0x87, 0x20, 0x00, 0x42, 0x01, 0x26, + 0x86, 0x20, 0x40, 0x43, 0xd2, 0x05, 0x85, 0x20, 0x00, 0x43, 0xf6, 0x06, + 0x84, 0x20, 0x40, 0x44, 0xc9, 0x00, 0x88, 0x20, 0x00, 0x4a, 0x49, 0x13, + 0x8c, 0x20, 0x40, 0xa1, 0xc0, 0x01, 0xa5, 0xa1, 0x01, 0x4a, 0x75, 0x95, + 0xc5, 0xfb, 0x81, 0x76, 0xaf, 0x68, 0xb2, 0x15, 0xb5, 0x01, 0xff, 0x4e, + 0xe9, 0x76, 0x99, 0xf3, 0x01, 0x4e, 0xc9, 0x77, 0x59, 0xf9, 0x01, 0x42, + 0xbb, 0x09, 0xd3, 0xf6, 0x41, 0xa1, 0x32, 0x57, 0x58, 0x2e, 0x29, 0x27, + 0x00, 0xa9, 0x01, 0xff, 0x52, 0xe3, 0x50, 0x63, 0x22, 0x00, 0x4d, 0x53, + 0x86, 0x9c, 0x00, 0x00, 0x04, 0xe2, 0x18, 0x01, 0xff, 0x56, 0xc1, 0x33, + 0x83, 0xcc, 0x01, 0x56, 0x63, 0x35, 0x80, 0xcc, 0x01, 0x57, 0xf3, 0x30, + 0x82, 0xcc, 0x01, 0x54, 0x7c, 0x46, 0x81, 0xcc, 0x41, 0x04, 0xc9, 0x00, + 0x0d, 0x46, 0x30, 0xe1, 0x53, 0xf3, 0xc1, 0x00, 0x47, 0x15, 0x08, 0xbf, + 0xce, 0x41, 0x46, 0xff, 0x2f, 0xcf, 0xf4, 0x01, 0x44, 0x22, 0x24, 0xe4, + 0x23, 0x40, 0x48, 0xb0, 0xc4, 0xe0, 0xf5, 0x01, 0x46, 0x50, 0xdf, 0xf1, + 0x23, 0x40, 0x80, 0x01, 0xff, 0x08, 0xa8, 0xc7, 0x11, 0x05, 0x51, 0x00, + 0x01, 0xff, 0x4b, 0x2c, 0x99, 0xc6, 0xfb, 0x01, 0x45, 0x85, 0x27, 0xc9, 0xfb, 0x41, 0x44, 0xc3, 0x00, 0xc7, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0xc8, - 0xfb, 0x41, 0x02, 0x57, 0x00, 0x0c, 0x53, 0x5c, 0x4a, 0x3c, 0x2e, 0x00, - 0x48, 0xd2, 0xc8, 0x7a, 0xfa, 0x41, 0x4b, 0x93, 0x7a, 0x82, 0xf6, 0x01, - 0x48, 0x7a, 0xc4, 0x5c, 0xf3, 0x41, 0x44, 0x1b, 0x04, 0xdf, 0xf3, 0x01, - 0x06, 0xd4, 0xd8, 0x75, 0x4d, 0x58, 0x31, 0x83, 0xf5, 0x01, 0x4c, 0xdd, - 0x71, 0xcd, 0xf9, 0x01, 0xb2, 0x0f, 0xb4, 0x01, 0xff, 0x43, 0xb5, 0x00, - 0x89, 0xf6, 0x01, 0x4d, 0xbc, 0x87, 0xfd, 0xf5, 0x41, 0x80, 0x2b, 0x05, - 0x5e, 0x35, 0x01, 0xff, 0x4c, 0xb5, 0x8d, 0x96, 0x00, 0x00, 0x47, 0xac, - 0xce, 0x01, 0x00, 0x00, 0x4e, 0xf6, 0x79, 0x96, 0x00, 0x00, 0xb3, 0x06, - 0x44, 0x96, 0x2f, 0x02, 0x00, 0x40, 0x4c, 0xc6, 0x86, 0x86, 0x00, 0x00, - 0x45, 0x63, 0x21, 0x98, 0x00, 0x40, 0x4c, 0x79, 0x8a, 0x2a, 0x26, 0x00, - 0x46, 0xf9, 0x12, 0x5b, 0x22, 0x00, 0xaf, 0x11, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x4f, 0xcf, 0x6d, 0xea, 0x2b, 0x00, 0x50, 0x3a, 0x65, 0xeb, 0x2b, - 0x40, 0x47, 0x27, 0xce, 0x21, 0x27, 0x00, 0x47, 0xdd, 0x1c, 0xc6, 0x22, - 0x40, 0x4b, 0xcf, 0x96, 0x95, 0x26, 0x00, 0x46, 0x76, 0xd9, 0x9a, 0x26, + 0xfb, 0x41, 0x02, 0x57, 0x00, 0x0c, 0x53, 0xa5, 0x4b, 0x3c, 0x2e, 0x00, + 0x48, 0x88, 0xcb, 0x7a, 0xfa, 0x41, 0x4b, 0xf4, 0x7b, 0x82, 0xf6, 0x01, + 0x48, 0x18, 0xc7, 0x5c, 0xf3, 0x41, 0x44, 0x46, 0x04, 0xdf, 0xf3, 0x01, + 0x06, 0xc0, 0xdb, 0x75, 0x4d, 0x3e, 0x32, 0x83, 0xf5, 0x01, 0x4c, 0x68, + 0x73, 0xcd, 0xf9, 0x01, 0xb2, 0x0f, 0xb4, 0x01, 0xff, 0x43, 0xb5, 0x00, + 0x89, 0xf6, 0x01, 0x4d, 0x79, 0x89, 0xfd, 0xf5, 0x41, 0x80, 0x2b, 0x05, + 0x2e, 0x36, 0x01, 0xff, 0x4c, 0x67, 0x8f, 0x96, 0x00, 0x00, 0x47, 0x86, + 0xd1, 0x01, 0x00, 0x00, 0x4e, 0x57, 0x7b, 0x96, 0x00, 0x00, 0xb3, 0x06, + 0x44, 0x7c, 0x30, 0x02, 0x00, 0x40, 0x4c, 0x83, 0x88, 0x86, 0x00, 0x00, + 0x45, 0xeb, 0x21, 0x98, 0x00, 0x40, 0x4c, 0x37, 0x8c, 0x2a, 0x26, 0x00, + 0x46, 0x48, 0x13, 0x5b, 0x22, 0x00, 0xaf, 0x11, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x4f, 0x78, 0x6f, 0xea, 0x2b, 0x00, 0x50, 0xb6, 0x66, 0xeb, 0x2b, + 0x40, 0x47, 0x01, 0xd1, 0x21, 0x27, 0x00, 0x47, 0x7f, 0x1d, 0xc6, 0x22, + 0x40, 0x4b, 0xd4, 0x98, 0x95, 0x26, 0x00, 0x46, 0x74, 0xdc, 0x9a, 0x26, 0x40, 0xa1, 0x06, 0x42, 0x03, 0x00, 0x91, 0xf9, 0x41, 0x02, 0x88, 0x00, - 0x06, 0x58, 0xb5, 0x2a, 0xa7, 0x27, 0x40, 0x80, 0xee, 0x05, 0x02, 0x06, - 0x00, 0x01, 0xff, 0x48, 0xed, 0x0c, 0xc6, 0x29, 0x00, 0xa3, 0xb1, 0x03, - 0x4c, 0x59, 0x8c, 0xa1, 0x22, 0x00, 0x47, 0xe8, 0xcd, 0x9f, 0xf1, 0x01, + 0x06, 0x58, 0x3e, 0x2b, 0xa7, 0x27, 0x40, 0x80, 0xee, 0x05, 0x02, 0x06, + 0x00, 0x01, 0xff, 0x48, 0x3c, 0x0d, 0xc6, 0x29, 0x00, 0xa3, 0xb1, 0x03, + 0x4c, 0x17, 0x8e, 0xa1, 0x22, 0x00, 0x47, 0xc2, 0xd0, 0x9f, 0xf1, 0x01, 0xa6, 0x82, 0x03, 0xa8, 0xeb, 0x02, 0x42, 0x03, 0x00, 0x94, 0xf1, 0x01, 0xab, 0xc6, 0x02, 0xac, 0xb4, 0x01, 0xad, 0xa7, 0x01, 0xae, 0x9a, 0x01, - 0xaf, 0x8d, 0x01, 0xb0, 0x7f, 0x55, 0x15, 0x3d, 0xc4, 0x29, 0x00, 0xb3, - 0x3d, 0xb4, 0x20, 0xb5, 0x12, 0xb6, 0x06, 0x42, 0x40, 0x1a, 0x4f, 0xf1, - 0x41, 0x42, 0x2a, 0x0c, 0xac, 0xf1, 0x01, 0xf3, 0x9a, 0xf1, 0x41, 0x42, - 0x96, 0x40, 0xab, 0xf1, 0x01, 0x57, 0x55, 0x2f, 0x99, 0xf1, 0x41, 0x46, - 0xdc, 0x0f, 0x9b, 0xf1, 0x01, 0x44, 0x29, 0x02, 0xa0, 0x22, 0x00, 0xb7, - 0x01, 0xff, 0x52, 0x06, 0x50, 0xa2, 0xf1, 0x01, 0x43, 0xd7, 0x27, 0x9d, - 0xf1, 0x41, 0x46, 0xa7, 0x18, 0xdd, 0x26, 0x00, 0xe4, 0x4c, 0xf1, 0x01, - 0xa5, 0x22, 0x42, 0xe0, 0x5d, 0xaa, 0xf1, 0x01, 0x46, 0x4e, 0xda, 0xa3, - 0xf1, 0x01, 0x4b, 0xd4, 0x14, 0xc7, 0x29, 0x00, 0x42, 0x55, 0x0d, 0x98, - 0xf1, 0x01, 0x45, 0xac, 0x05, 0xc8, 0x29, 0x00, 0xf3, 0x4d, 0xf1, 0x41, - 0x4b, 0x2f, 0x98, 0x9c, 0xf1, 0x01, 0x4d, 0x3e, 0x88, 0xa1, 0xf1, 0x41, - 0x43, 0xb8, 0x27, 0x9e, 0x22, 0x00, 0x42, 0x4f, 0xc8, 0x4e, 0xf1, 0x41, - 0xeb, 0x97, 0xf1, 0x01, 0x53, 0x36, 0x4a, 0xa4, 0xf1, 0x41, 0x42, 0x85, - 0x1d, 0x95, 0xf1, 0x01, 0xe7, 0x96, 0xf1, 0x41, 0x44, 0xf0, 0x1e, 0x9f, - 0x22, 0x00, 0xf6, 0x4b, 0xf1, 0x41, 0x05, 0xb4, 0x05, 0x19, 0xaf, 0x01, - 0xff, 0x06, 0xa5, 0x21, 0x06, 0x46, 0x00, 0xdd, 0xa9, 0xf1, 0x41, 0x43, + 0xaf, 0x8d, 0x01, 0xb0, 0x7f, 0x55, 0xfa, 0x3d, 0xc4, 0x29, 0x00, 0xb3, + 0x3d, 0xb4, 0x20, 0xb5, 0x12, 0xb6, 0x06, 0x42, 0xc7, 0x1a, 0x4f, 0xf1, + 0x41, 0x42, 0x79, 0x0c, 0xac, 0xf1, 0x01, 0xf3, 0x9a, 0xf1, 0x41, 0x42, + 0x8f, 0x41, 0xab, 0xf1, 0x01, 0x57, 0x3b, 0x30, 0x99, 0xf1, 0x41, 0x46, + 0x2b, 0x10, 0x9b, 0xf1, 0x01, 0x44, 0x29, 0x02, 0xa0, 0x22, 0x00, 0xb7, + 0x01, 0xff, 0x52, 0x4f, 0x51, 0xa2, 0xf1, 0x01, 0x43, 0x78, 0x28, 0x9d, + 0xf1, 0x41, 0x46, 0x13, 0x19, 0xdd, 0x26, 0x00, 0xe4, 0x4c, 0xf1, 0x01, + 0xa5, 0x22, 0x42, 0x4b, 0x5f, 0xaa, 0xf1, 0x01, 0x46, 0x46, 0xdd, 0xa3, + 0xf1, 0x01, 0x4b, 0x40, 0x15, 0xc7, 0x29, 0x00, 0x42, 0xa4, 0x0d, 0x98, + 0xf1, 0x01, 0x45, 0xd7, 0x05, 0xc8, 0x29, 0x00, 0xf3, 0x4d, 0xf1, 0x41, + 0x4b, 0x3f, 0x9a, 0x9c, 0xf1, 0x01, 0x4d, 0xfb, 0x89, 0xa1, 0xf1, 0x41, + 0x43, 0x59, 0x28, 0x9e, 0x22, 0x00, 0x42, 0xfd, 0xca, 0x4e, 0xf1, 0x41, + 0xeb, 0x97, 0xf1, 0x01, 0x53, 0x7f, 0x4b, 0xa4, 0xf1, 0x41, 0x42, 0x27, + 0x1e, 0x95, 0xf1, 0x01, 0xe7, 0x96, 0xf1, 0x41, 0x44, 0x92, 0x1f, 0x9f, + 0x22, 0x00, 0xf6, 0x4b, 0xf1, 0x41, 0x05, 0xdf, 0x05, 0x19, 0xaf, 0x01, + 0xff, 0x06, 0x2d, 0x22, 0x06, 0x46, 0x0a, 0xe0, 0xa9, 0xf1, 0x41, 0x43, 0x1a, 0x00, 0xce, 0x27, 0x00, 0x42, 0x0c, 0x00, 0xcf, 0x27, 0x40, 0x0f, - 0xb9, 0x05, 0x06, 0x4e, 0xe4, 0x7a, 0xa5, 0xf1, 0x41, 0xe1, 0x30, 0xf1, + 0xe4, 0x05, 0x06, 0x4e, 0x45, 0x7c, 0xa5, 0xf1, 0x41, 0xe1, 0x30, 0xf1, 0x01, 0xe2, 0x31, 0xf1, 0x01, 0xe3, 0x32, 0xf1, 0x01, 0xe4, 0x33, 0xf1, 0x01, 0xe5, 0x34, 0xf1, 0x01, 0xe6, 0x35, 0xf1, 0x01, 0xe7, 0x36, 0xf1, 0x01, 0xe8, 0x37, 0xf1, 0x01, 0xe9, 0x38, 0xf1, 0x01, 0xea, 0x39, 0xf1, @@ -3807,2286 +3918,2305 @@ static const unsigned char uname2c_tree[218382] = { 0x01, 0xf1, 0x40, 0xf1, 0x01, 0xf2, 0x41, 0xf1, 0x01, 0xf3, 0x42, 0xf1, 0x01, 0xf4, 0x43, 0xf1, 0x01, 0xf5, 0x44, 0xf1, 0x01, 0xf6, 0x45, 0xf1, 0x01, 0xf7, 0x46, 0xf1, 0x01, 0xf8, 0x47, 0xf1, 0x01, 0xf9, 0x48, 0xf1, - 0x01, 0xfa, 0x49, 0xf1, 0x41, 0x08, 0x2a, 0xc1, 0x06, 0x42, 0x3f, 0x1c, - 0xbf, 0x26, 0x40, 0x42, 0x04, 0x00, 0x13, 0xf2, 0x01, 0x44, 0xb2, 0xed, - 0x01, 0xf2, 0x01, 0x42, 0x15, 0x06, 0x02, 0xf2, 0x41, 0xe3, 0xa6, 0xf1, - 0x01, 0x42, 0xd7, 0x0c, 0xa7, 0xf1, 0x01, 0x45, 0x26, 0xe4, 0xa8, 0xf1, - 0x01, 0xf6, 0x4a, 0xf1, 0x41, 0x55, 0x53, 0x38, 0xc5, 0x29, 0x00, 0x4d, - 0xf6, 0x82, 0xa0, 0xf1, 0x01, 0x04, 0xcb, 0x06, 0x06, 0x43, 0x26, 0x01, - 0x93, 0xf1, 0x41, 0x4f, 0xb4, 0x0b, 0x2c, 0x2e, 0x00, 0xeb, 0x9e, 0xf1, - 0x41, 0x15, 0x42, 0x32, 0x0a, 0xec, 0x91, 0xf1, 0x01, 0x43, 0x8a, 0x96, - 0x92, 0xf1, 0x41, 0x02, 0xb6, 0xf1, 0x80, 0x02, 0x95, 0x9b, 0x01, 0x96, - 0x4b, 0x97, 0x23, 0x98, 0x0f, 0x99, 0x01, 0xff, 0x43, 0x27, 0xf0, 0x2b, - 0xf2, 0x01, 0x43, 0x39, 0xf0, 0x3b, 0xf2, 0x41, 0x43, 0x8d, 0xf0, 0x16, - 0xf2, 0x01, 0x43, 0xae, 0xf0, 0x23, 0xf2, 0x01, 0x43, 0xc3, 0xf0, 0x30, - 0xf2, 0x41, 0x43, 0x36, 0xf0, 0x1a, 0xf2, 0x01, 0x95, 0x12, 0x43, 0x8a, - 0xf0, 0x32, 0xf2, 0x01, 0x43, 0x90, 0xf0, 0x33, 0xf2, 0x01, 0x43, 0xc0, - 0xf0, 0x21, 0xf2, 0x41, 0x42, 0xa4, 0xf1, 0x22, 0xf2, 0x01, 0x42, 0xb6, - 0xdf, 0x38, 0xf2, 0x41, 0x92, 0x3a, 0x93, 0x2c, 0x95, 0x1e, 0x43, 0x75, - 0xf0, 0x19, 0xf2, 0x01, 0x02, 0xc4, 0xf0, 0x0c, 0x43, 0xd8, 0xf0, 0x35, - 0xf2, 0x01, 0x43, 0xe7, 0xf0, 0x26, 0xf2, 0x41, 0xd8, 0x37, 0xf2, 0x01, - 0xd9, 0x36, 0xf2, 0x41, 0x42, 0xc2, 0xf1, 0x1b, 0xf2, 0x01, 0x42, 0x38, - 0xb9, 0x1f, 0xf2, 0x41, 0x42, 0x27, 0x3f, 0x2f, 0xf2, 0x01, 0x42, 0x3d, - 0xf0, 0x28, 0xf2, 0x41, 0x42, 0xb4, 0xf1, 0x10, 0xf2, 0x01, 0x42, 0x49, - 0xf0, 0x31, 0xf2, 0x01, 0x42, 0xc0, 0xf1, 0x27, 0xf2, 0x41, 0x43, 0x3f, - 0xf0, 0x1e, 0xf2, 0x01, 0x92, 0x48, 0x93, 0x3a, 0x94, 0x2c, 0x43, 0x6f, - 0xf0, 0x3a, 0xf2, 0x01, 0x43, 0x87, 0xf0, 0x24, 0xf2, 0x01, 0x99, 0x12, - 0x43, 0xa2, 0xf0, 0x11, 0xf2, 0x01, 0x43, 0xc9, 0xf0, 0x2c, 0xf2, 0x01, - 0x43, 0xea, 0xf0, 0x1d, 0xf2, 0x41, 0x42, 0x29, 0x74, 0x15, 0xf2, 0x01, - 0x42, 0xce, 0xe0, 0x17, 0xf2, 0x41, 0x42, 0x27, 0x74, 0x34, 0xf2, 0x01, - 0x42, 0xac, 0xf1, 0x25, 0xf2, 0x41, 0x42, 0xb0, 0x04, 0x12, 0xf2, 0x01, - 0x42, 0xa5, 0xf1, 0x2e, 0xf2, 0x41, 0x42, 0xa2, 0xf1, 0x20, 0xf2, 0x01, - 0x42, 0x3a, 0xf0, 0x1c, 0xf2, 0x01, 0x42, 0x7e, 0xf0, 0x39, 0xf2, 0x41, - 0x90, 0x12, 0x42, 0x59, 0xec, 0x2d, 0xf2, 0x01, 0x42, 0x4f, 0xdf, 0x14, - 0xf2, 0x01, 0x42, 0xe5, 0xd5, 0x18, 0xf2, 0x41, 0xd0, 0x29, 0xf2, 0x01, + 0x01, 0xfa, 0x49, 0xf1, 0x41, 0x08, 0xb0, 0xc3, 0x06, 0x42, 0xc6, 0x1c, + 0xbf, 0x26, 0x40, 0x42, 0x04, 0x00, 0x13, 0xf2, 0x01, 0x44, 0xf1, 0xf0, + 0x01, 0xf2, 0x01, 0x42, 0x40, 0x06, 0x02, 0xf2, 0x41, 0xe3, 0xa6, 0xf1, + 0x01, 0x42, 0x26, 0x0d, 0xa7, 0xf1, 0x01, 0x45, 0x36, 0xe7, 0xa8, 0xf1, + 0x01, 0xf6, 0x4a, 0xf1, 0x41, 0x55, 0x23, 0x39, 0xc5, 0x29, 0x00, 0x4d, + 0x99, 0x84, 0xa0, 0xf1, 0x01, 0x04, 0xf6, 0x06, 0x06, 0x43, 0x26, 0x01, + 0x93, 0xf1, 0x41, 0x4f, 0x03, 0x0c, 0x2c, 0x2e, 0x00, 0xeb, 0x9e, 0xf1, + 0x41, 0x15, 0x12, 0x33, 0x0a, 0xec, 0x91, 0xf1, 0x01, 0x43, 0x84, 0x98, + 0x92, 0xf1, 0x41, 0x02, 0x00, 0xf5, 0x80, 0x02, 0x95, 0x9b, 0x01, 0x96, + 0x4b, 0x97, 0x23, 0x98, 0x0f, 0x99, 0x01, 0xff, 0x43, 0x7a, 0xf3, 0x2b, + 0xf2, 0x01, 0x43, 0x8c, 0xf3, 0x3b, 0xf2, 0x41, 0x43, 0xe0, 0xf3, 0x16, + 0xf2, 0x01, 0x43, 0x01, 0xf4, 0x23, 0xf2, 0x01, 0x43, 0x16, 0xf4, 0x30, + 0xf2, 0x41, 0x43, 0x89, 0xf3, 0x1a, 0xf2, 0x01, 0x95, 0x12, 0x43, 0xdd, + 0xf3, 0x32, 0xf2, 0x01, 0x43, 0xe3, 0xf3, 0x33, 0xf2, 0x01, 0x43, 0x13, + 0xf4, 0x21, 0xf2, 0x41, 0x42, 0xee, 0xf4, 0x22, 0xf2, 0x01, 0x42, 0xc1, + 0xe2, 0x38, 0xf2, 0x41, 0x92, 0x3a, 0x93, 0x2c, 0x95, 0x1e, 0x43, 0xc8, + 0xf3, 0x19, 0xf2, 0x01, 0x02, 0x17, 0xf4, 0x0c, 0x43, 0x2b, 0xf4, 0x35, + 0xf2, 0x01, 0x43, 0x3a, 0xf4, 0x26, 0xf2, 0x41, 0xd8, 0x37, 0xf2, 0x01, + 0xd9, 0x36, 0xf2, 0x41, 0x42, 0x0c, 0xf5, 0x1b, 0xf2, 0x01, 0x42, 0x9b, + 0xbb, 0x1f, 0xf2, 0x41, 0x42, 0x20, 0x40, 0x2f, 0xf2, 0x01, 0x42, 0x90, + 0xf3, 0x28, 0xf2, 0x41, 0x42, 0xfe, 0xf4, 0x10, 0xf2, 0x01, 0x42, 0x9c, + 0xf3, 0x31, 0xf2, 0x01, 0x42, 0x0a, 0xf5, 0x27, 0xf2, 0x41, 0x43, 0x92, + 0xf3, 0x1e, 0xf2, 0x01, 0x92, 0x48, 0x93, 0x3a, 0x94, 0x2c, 0x43, 0xc2, + 0xf3, 0x3a, 0xf2, 0x01, 0x43, 0xda, 0xf3, 0x24, 0xf2, 0x01, 0x99, 0x12, + 0x43, 0xf5, 0xf3, 0x11, 0xf2, 0x01, 0x43, 0x1c, 0xf4, 0x2c, 0xf2, 0x01, + 0x43, 0x3d, 0xf4, 0x1d, 0xf2, 0x41, 0x42, 0xb4, 0x75, 0x15, 0xf2, 0x01, + 0x42, 0xd9, 0xe3, 0x17, 0xf2, 0x41, 0x42, 0xb2, 0x75, 0x34, 0xf2, 0x01, + 0x42, 0xf6, 0xf4, 0x25, 0xf2, 0x41, 0x42, 0xdb, 0x04, 0x12, 0xf2, 0x01, + 0x42, 0xef, 0xf4, 0x2e, 0xf2, 0x41, 0x42, 0xec, 0xf4, 0x20, 0xf2, 0x01, + 0x42, 0x8d, 0xf3, 0x1c, 0xf2, 0x01, 0x42, 0xd1, 0xf3, 0x39, 0xf2, 0x41, + 0x90, 0x12, 0x42, 0x90, 0xef, 0x2d, 0xf2, 0x01, 0x42, 0x5a, 0xe2, 0x14, + 0xf2, 0x01, 0x42, 0xcb, 0xd8, 0x18, 0xf2, 0x41, 0xd0, 0x29, 0xf2, 0x01, 0xd9, 0x2a, 0xf2, 0x41, 0xa1, 0xd9, 0x0b, 0xa2, 0xae, 0x0b, 0xa3, 0xee, 0x0a, 0xa4, 0xb4, 0x0a, 0xa5, 0xf9, 0x09, 0xa6, 0xcc, 0x09, 0xa7, 0x82, 0x09, 0xa8, 0xa8, 0x08, 0xa9, 0xf8, 0x07, 0xab, 0xc7, 0x06, 0xac, 0xa6, 0x06, 0xad, 0xb2, 0x04, 0xae, 0x8a, 0x04, 0xaf, 0xdf, 0x03, 0xb0, 0xd7, - 0x02, 0xb2, 0x89, 0x02, 0xb3, 0xb9, 0x01, 0xb4, 0xa4, 0x01, 0x43, 0x8e, - 0xef, 0x06, 0x33, 0x00, 0x48, 0x7a, 0xc9, 0xde, 0x33, 0x00, 0xb7, 0x19, - 0xb9, 0x01, 0xff, 0x02, 0x31, 0x12, 0x06, 0x43, 0x22, 0x9f, 0x50, 0x33, + 0x02, 0xb2, 0x89, 0x02, 0xb3, 0xb9, 0x01, 0xb4, 0xa4, 0x01, 0x43, 0xdd, + 0xf2, 0x06, 0x33, 0x00, 0x48, 0x30, 0xcc, 0xde, 0x33, 0x00, 0xb7, 0x19, + 0xb9, 0x01, 0xff, 0x02, 0x80, 0x12, 0x06, 0x43, 0x53, 0xa1, 0x50, 0x33, 0x40, 0x42, 0x3b, 0x01, 0x4e, 0x33, 0x00, 0x42, 0x3d, 0x00, 0x4f, 0x33, - 0x40, 0x44, 0xc1, 0x8a, 0x57, 0x33, 0x00, 0xe2, 0xdd, 0x33, 0x00, 0x04, - 0x52, 0x00, 0x01, 0xff, 0x51, 0x3d, 0x57, 0x13, 0x2b, 0x00, 0x51, 0x09, - 0x58, 0xe0, 0x29, 0x00, 0x58, 0x6d, 0x27, 0xa9, 0x25, 0x00, 0x4f, 0x76, - 0x6c, 0xa4, 0x25, 0x00, 0xac, 0x3d, 0x5a, 0xfc, 0x20, 0xa6, 0x25, 0x00, - 0x50, 0x3a, 0x65, 0xe8, 0x25, 0x00, 0x4e, 0xd2, 0x7b, 0x12, 0x2b, 0x00, - 0x06, 0x6d, 0x02, 0x06, 0x4d, 0x72, 0x88, 0xa5, 0x25, 0x40, 0x05, 0xc3, - 0x00, 0x11, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x53, 0x42, 0x25, 0x14, 0x2b, - 0x00, 0x52, 0x74, 0x54, 0xa8, 0x25, 0x40, 0x53, 0x42, 0x25, 0xe9, 0x25, - 0x00, 0x53, 0x5d, 0x4c, 0xa7, 0x25, 0x40, 0x4e, 0xd0, 0x6d, 0xe7, 0x25, - 0x00, 0x05, 0x14, 0x01, 0x01, 0xff, 0x58, 0xed, 0x28, 0x15, 0x2b, 0x00, - 0x59, 0x3c, 0x25, 0xea, 0x25, 0x40, 0x45, 0x5b, 0xdd, 0x96, 0xf7, 0x01, - 0x42, 0x39, 0xa3, 0x94, 0x33, 0x00, 0x42, 0x10, 0x00, 0x27, 0x33, 0x40, - 0xa1, 0x3f, 0x03, 0x92, 0x01, 0x33, 0x46, 0x1e, 0xda, 0x21, 0x33, 0x00, - 0x0b, 0x25, 0x9f, 0x08, 0xf2, 0xdb, 0x33, 0x00, 0xf6, 0xdc, 0x33, 0x40, - 0x07, 0x4c, 0x0d, 0x11, 0x04, 0x1e, 0x00, 0x01, 0xff, 0x44, 0xc3, 0x00, + 0x40, 0x44, 0x7f, 0x8c, 0x57, 0x33, 0x00, 0xe2, 0xdd, 0x33, 0x00, 0x04, + 0x52, 0x00, 0x01, 0xff, 0x51, 0xa8, 0x58, 0x13, 0x2b, 0x00, 0x51, 0x74, + 0x59, 0xe0, 0x29, 0x00, 0x58, 0x0e, 0x28, 0xa9, 0x25, 0x00, 0x4f, 0x1f, + 0x6e, 0xa4, 0x25, 0x00, 0xac, 0x3d, 0x5a, 0x84, 0x21, 0xa6, 0x25, 0x00, + 0x50, 0xb6, 0x66, 0xe8, 0x25, 0x00, 0x4e, 0x33, 0x7d, 0x12, 0x2b, 0x00, + 0x06, 0x6d, 0x02, 0x06, 0x4d, 0x2f, 0x8a, 0xa5, 0x25, 0x40, 0x05, 0xc3, + 0x00, 0x11, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x53, 0xe3, 0x25, 0x14, 0x2b, + 0x00, 0x52, 0xbd, 0x55, 0xa8, 0x25, 0x40, 0x53, 0xe3, 0x25, 0xe9, 0x25, + 0x00, 0x53, 0xa6, 0x4d, 0xa7, 0x25, 0x40, 0x4e, 0x79, 0x6f, 0xe7, 0x25, + 0x00, 0x05, 0x14, 0x01, 0x01, 0xff, 0x58, 0x8e, 0x29, 0x15, 0x2b, 0x00, + 0x59, 0xdd, 0x25, 0xea, 0x25, 0x40, 0x45, 0x65, 0xe0, 0x96, 0xf7, 0x01, + 0x42, 0x75, 0xa5, 0x94, 0x33, 0x00, 0x42, 0x10, 0x00, 0x27, 0x33, 0x40, + 0xa1, 0x3f, 0x03, 0x92, 0x01, 0x33, 0x46, 0x10, 0xdd, 0x21, 0x33, 0x00, + 0x0b, 0x56, 0xa1, 0x08, 0xf2, 0xdb, 0x33, 0x00, 0xf6, 0xdc, 0x33, 0x40, + 0x07, 0x9b, 0x0d, 0x11, 0x04, 0x1e, 0x00, 0x01, 0xff, 0x44, 0xc3, 0x00, 0x7c, 0xcc, 0x01, 0x45, 0xc8, 0x00, 0x7d, 0xcc, 0x41, 0x44, 0xc3, 0x00, 0x7f, 0xcc, 0x01, 0x45, 0xc8, 0x00, 0x7e, 0xcc, 0x41, 0xe9, 0x22, 0x33, - 0x00, 0xef, 0x23, 0x33, 0x40, 0x45, 0x49, 0xe4, 0x1f, 0x33, 0x00, 0x46, - 0x98, 0xdb, 0x20, 0x33, 0x40, 0x42, 0xe8, 0x01, 0xad, 0x33, 0x80, 0x37, - 0xa5, 0x29, 0xa9, 0x15, 0x43, 0x25, 0x6b, 0x1a, 0x22, 0x00, 0xb5, 0x01, - 0xff, 0x43, 0x68, 0x74, 0x53, 0x33, 0x00, 0x45, 0x90, 0xe8, 0x54, 0x33, - 0x40, 0x55, 0x75, 0x3a, 0xce, 0x2a, 0x00, 0x42, 0x71, 0x00, 0x52, 0x33, - 0x00, 0x45, 0x72, 0xe8, 0x51, 0x33, 0x40, 0x42, 0x57, 0x16, 0x55, 0x33, - 0x00, 0x46, 0x9e, 0xdb, 0x56, 0x33, 0x40, 0x47, 0x58, 0x0c, 0xae, 0x33, - 0xc0, 0x00, 0x48, 0xaa, 0x05, 0xaf, 0x33, 0x40, 0xe1, 0xa9, 0x33, 0x80, + 0x00, 0xef, 0x23, 0x33, 0x40, 0x45, 0x59, 0xe7, 0x1f, 0x33, 0x00, 0x46, + 0x90, 0xde, 0x20, 0x33, 0x40, 0x42, 0xe8, 0x01, 0xad, 0x33, 0x80, 0x37, + 0xa5, 0x29, 0xa9, 0x15, 0x43, 0xbf, 0x6c, 0x1a, 0x22, 0x00, 0xb5, 0x01, + 0xff, 0x43, 0xe5, 0x75, 0x53, 0x33, 0x00, 0x45, 0xb4, 0xeb, 0x54, 0x33, + 0x40, 0x55, 0x45, 0x3b, 0xce, 0x2a, 0x00, 0x42, 0x71, 0x00, 0x52, 0x33, + 0x00, 0x45, 0x96, 0xeb, 0x51, 0x33, 0x40, 0x42, 0xc3, 0x16, 0x55, 0x33, + 0x00, 0x46, 0x96, 0xde, 0x56, 0x33, 0x40, 0x47, 0xa7, 0x0c, 0xae, 0x33, + 0xc0, 0x00, 0x48, 0xd5, 0x05, 0xaf, 0x33, 0x40, 0xe1, 0xa9, 0x33, 0x80, 0x6b, 0xe3, 0x76, 0x33, 0x00, 0xa5, 0x4b, 0xe6, 0x8a, 0x33, 0x00, 0xe8, 0xd7, 0x33, 0x00, 0xa9, 0x2e, 0xed, 0xd8, 0x33, 0x00, 0xaf, 0x16, 0x42, - 0x57, 0xbe, 0xd9, 0x33, 0x00, 0xf2, 0xda, 0x33, 0x00, 0xf3, 0xb0, 0x33, - 0x00, 0xf6, 0xb4, 0x33, 0x00, 0xf7, 0xba, 0x33, 0x40, 0x44, 0x7d, 0x13, - 0x3d, 0x33, 0x00, 0x43, 0x79, 0x0d, 0x40, 0x33, 0x00, 0x50, 0xaa, 0x65, - 0xd0, 0x2b, 0x40, 0x47, 0x59, 0xcc, 0x2e, 0x33, 0x00, 0xab, 0x01, 0xff, - 0xef, 0x30, 0x33, 0x00, 0x43, 0x7d, 0xa8, 0x2f, 0x33, 0x40, 0x43, 0x7a, - 0x99, 0x3b, 0x33, 0x00, 0xae, 0x06, 0x42, 0x35, 0x03, 0x37, 0x33, 0x40, - 0x43, 0xfd, 0xe3, 0x38, 0x33, 0x00, 0x42, 0x6f, 0x00, 0x3a, 0x33, 0x40, - 0x45, 0x86, 0xde, 0x80, 0x33, 0x00, 0xa1, 0x01, 0xff, 0x45, 0xaa, 0xe7, - 0x2b, 0x33, 0x00, 0x42, 0x5c, 0x01, 0x2c, 0x33, 0x40, 0x43, 0x6c, 0x6e, - 0x09, 0x33, 0x00, 0x43, 0xfc, 0x16, 0x0a, 0x33, 0x00, 0x4a, 0xfa, 0x2e, - 0x90, 0x22, 0x80, 0x04, 0xf6, 0x75, 0x33, 0x40, 0x04, 0x0a, 0x1e, 0x01, - 0xff, 0x48, 0xa9, 0x0c, 0x92, 0x22, 0x00, 0x4c, 0x79, 0x2a, 0xe5, 0x22, + 0xde, 0xc0, 0xd9, 0x33, 0x00, 0xf2, 0xda, 0x33, 0x00, 0xf3, 0xb0, 0x33, + 0x00, 0xf6, 0xb4, 0x33, 0x00, 0xf7, 0xba, 0x33, 0x40, 0x44, 0xcc, 0x13, + 0x3d, 0x33, 0x00, 0x43, 0xc8, 0x0d, 0x40, 0x33, 0x00, 0x50, 0x26, 0x67, + 0xd0, 0x2b, 0x40, 0x47, 0x1e, 0xcf, 0x2e, 0x33, 0x00, 0xab, 0x01, 0xff, + 0xef, 0x30, 0x33, 0x00, 0x43, 0xb9, 0xaa, 0x2f, 0x33, 0x40, 0x43, 0x95, + 0x9b, 0x3b, 0x33, 0x00, 0xae, 0x06, 0x42, 0x60, 0x03, 0x37, 0x33, 0x40, + 0x43, 0x0d, 0xe7, 0x38, 0x33, 0x00, 0x42, 0x6f, 0x00, 0x3a, 0x33, 0x40, + 0x45, 0x96, 0xe1, 0x80, 0x33, 0x00, 0xa1, 0x01, 0xff, 0x45, 0xce, 0xea, + 0x2b, 0x33, 0x00, 0x42, 0x5c, 0x01, 0x2c, 0x33, 0x40, 0x43, 0x15, 0x70, + 0x09, 0x33, 0x00, 0x43, 0x68, 0x17, 0x0a, 0x33, 0x00, 0x4a, 0xe0, 0x2f, + 0x90, 0x22, 0x80, 0x04, 0xf6, 0x75, 0x33, 0x40, 0x04, 0xac, 0x1e, 0x01, + 0xff, 0x48, 0xf8, 0x0c, 0x92, 0x22, 0x00, 0x4c, 0x02, 0x2b, 0xe5, 0x22, 0x40, 0xe1, 0x81, 0x33, 0x80, 0x1a, 0xe6, 0x8b, 0x33, 0x00, 0xed, 0x9a, - 0x33, 0x00, 0x44, 0x67, 0x0a, 0x29, 0x33, 0x00, 0xf3, 0xb1, 0x33, 0x00, + 0x33, 0x00, 0x44, 0xb6, 0x0a, 0x29, 0x33, 0x00, 0xf3, 0xb1, 0x33, 0x00, 0xf6, 0xb5, 0x33, 0x00, 0xf7, 0xbb, 0x33, 0x40, 0x42, 0xb4, 0x01, 0x28, 0x33, 0x40, 0x80, 0xcd, 0x01, 0xe1, 0x83, 0x33, 0x80, 0xa7, 0x01, 0xe2, 0x86, 0x33, 0x80, 0x9b, 0x01, 0xa5, 0x85, 0x01, 0xe7, 0x8e, 0x33, 0x00, - 0x42, 0x39, 0xa3, 0x92, 0x33, 0x00, 0xa9, 0x62, 0xec, 0x96, 0x33, 0x00, - 0xed, 0x9c, 0x33, 0x80, 0x4a, 0x42, 0x36, 0x03, 0xd6, 0x33, 0x00, 0x42, - 0x6c, 0x09, 0xab, 0x33, 0x00, 0xf3, 0xb3, 0x33, 0x00, 0x02, 0x2e, 0x02, + 0x42, 0x75, 0xa5, 0x92, 0x33, 0x00, 0xa9, 0x62, 0xec, 0x96, 0x33, 0x00, + 0xed, 0x9c, 0x33, 0x80, 0x4a, 0x42, 0x61, 0x03, 0xd6, 0x33, 0x00, 0x42, + 0xbb, 0x09, 0xab, 0x33, 0x00, 0xf3, 0xb3, 0x33, 0x00, 0x02, 0x2e, 0x02, 0x16, 0xf6, 0xb7, 0x33, 0x80, 0x0b, 0xf7, 0xbd, 0x33, 0xc0, 0x00, 0x45, - 0x6a, 0x7a, 0xbf, 0x33, 0x40, 0x45, 0x6a, 0x7a, 0xb9, 0x33, 0x40, 0xe1, + 0xcb, 0x7b, 0xbf, 0x33, 0x40, 0x45, 0xcb, 0x7b, 0xb9, 0x33, 0x40, 0xe1, 0x82, 0x33, 0x00, 0xe6, 0x8c, 0x33, 0x00, 0xe7, 0x8d, 0x33, 0x00, 0xec, 0x95, 0x33, 0x00, 0xed, 0x9b, 0x33, 0x00, 0xf3, 0xb2, 0x33, 0x00, 0xf6, - 0xb6, 0x33, 0x00, 0xf7, 0xbc, 0x33, 0x40, 0x80, 0x01, 0xff, 0x45, 0x5f, - 0xe2, 0xa3, 0x33, 0x00, 0x47, 0xab, 0x05, 0x9f, 0x33, 0x40, 0x45, 0xd5, - 0xe4, 0x48, 0x33, 0x00, 0xec, 0xd5, 0x33, 0x00, 0x42, 0x0d, 0x00, 0x49, - 0x33, 0xc0, 0x00, 0x45, 0x83, 0xe1, 0x4a, 0x33, 0x40, 0x45, 0x67, 0xd0, - 0x4d, 0x33, 0x00, 0x42, 0x24, 0x02, 0x4b, 0x33, 0xc0, 0x00, 0x43, 0x7f, - 0x13, 0x4c, 0x33, 0x40, 0x46, 0x0b, 0x07, 0xd4, 0x33, 0x40, 0x43, 0xcb, - 0x50, 0x45, 0x33, 0x00, 0xa9, 0x0c, 0x45, 0x1a, 0xe6, 0x47, 0x33, 0x00, - 0x44, 0x26, 0xef, 0x46, 0x33, 0x40, 0x44, 0xd5, 0xe4, 0x43, 0x33, 0x00, - 0x42, 0x3d, 0x00, 0x44, 0x33, 0x40, 0x45, 0x5f, 0xe2, 0xa5, 0x33, 0x00, - 0xaf, 0x06, 0x47, 0xab, 0x05, 0xa1, 0x33, 0x40, 0x42, 0x93, 0x0a, 0xc1, - 0x33, 0x00, 0x45, 0x5a, 0x0c, 0xa7, 0x33, 0xc0, 0x00, 0x48, 0xaa, 0x05, - 0xa8, 0x33, 0x40, 0x55, 0xe2, 0x39, 0xcd, 0x2a, 0x00, 0xed, 0xd0, 0x33, + 0xb6, 0x33, 0x00, 0xf7, 0xbc, 0x33, 0x40, 0x80, 0x01, 0xff, 0x45, 0x6a, + 0xe5, 0xa3, 0x33, 0x00, 0x47, 0xd6, 0x05, 0x9f, 0x33, 0x40, 0x45, 0xea, + 0xe7, 0x48, 0x33, 0x00, 0xec, 0xd5, 0x33, 0x00, 0x42, 0x0d, 0x00, 0x49, + 0x33, 0xc0, 0x00, 0x45, 0x98, 0xe4, 0x4a, 0x33, 0x40, 0x45, 0x3a, 0xd3, + 0x4d, 0x33, 0x00, 0x42, 0x24, 0x02, 0x4b, 0x33, 0xc0, 0x00, 0x43, 0xce, + 0x13, 0x4c, 0x33, 0x40, 0x46, 0x5c, 0x07, 0xd4, 0x33, 0x40, 0x43, 0x14, + 0x52, 0x45, 0x33, 0x00, 0xa9, 0x0c, 0x45, 0x3e, 0xe9, 0x47, 0x33, 0x00, + 0x44, 0x79, 0xf2, 0x46, 0x33, 0x40, 0x44, 0xea, 0xe7, 0x43, 0x33, 0x00, + 0x42, 0x3d, 0x00, 0x44, 0x33, 0x40, 0x45, 0x6a, 0xe5, 0xa5, 0x33, 0x00, + 0xaf, 0x06, 0x47, 0xd6, 0x05, 0xa1, 0x33, 0x40, 0x42, 0xe2, 0x0a, 0xc1, + 0x33, 0x00, 0x45, 0xa9, 0x0c, 0xa7, 0x33, 0xc0, 0x00, 0x48, 0xd5, 0x05, + 0xa8, 0x33, 0x40, 0x55, 0xb2, 0x3a, 0xcd, 0x2a, 0x00, 0xed, 0xd0, 0x33, 0x00, 0xee, 0xd1, 0x33, 0x00, 0xaf, 0x04, 0xf8, 0xd3, 0x33, 0x40, 0xe7, - 0xd2, 0x33, 0x00, 0x45, 0xfc, 0x09, 0x11, 0x23, 0x40, 0x44, 0x8e, 0xe9, + 0xd2, 0x33, 0x00, 0x45, 0x4b, 0x0a, 0x11, 0x23, 0x40, 0x44, 0xc1, 0xec, 0xc0, 0x33, 0x00, 0xe1, 0x84, 0x33, 0x80, 0x8d, 0x01, 0xe2, 0x85, 0x33, - 0x00, 0x43, 0x37, 0x00, 0x89, 0x33, 0x00, 0x44, 0x32, 0x1d, 0x1c, 0x33, - 0x00, 0xe7, 0x8f, 0x33, 0x00, 0x42, 0x39, 0xa3, 0x91, 0x33, 0x00, 0x43, - 0x99, 0x1f, 0x14, 0x33, 0x80, 0x5a, 0xeb, 0xcd, 0x33, 0x00, 0xec, 0x98, - 0x33, 0x00, 0xed, 0x9e, 0x33, 0x80, 0x36, 0xaf, 0x28, 0x42, 0x6c, 0x09, + 0x00, 0x43, 0x37, 0x00, 0x89, 0x33, 0x00, 0x44, 0xd4, 0x1d, 0x1c, 0x33, + 0x00, 0xe7, 0x8f, 0x33, 0x00, 0x42, 0x75, 0xa5, 0x91, 0x33, 0x00, 0x43, + 0x3b, 0x20, 0x14, 0x33, 0x80, 0x5a, 0xeb, 0xcd, 0x33, 0x00, 0xec, 0x98, + 0x33, 0x00, 0xed, 0x9e, 0x33, 0x80, 0x36, 0xaf, 0x28, 0x42, 0xbb, 0x09, 0xaa, 0x33, 0x00, 0xf4, 0xcf, 0x33, 0x00, 0x02, 0x42, 0x00, 0x0e, 0xf6, - 0xb8, 0x33, 0x00, 0xf7, 0xbe, 0x33, 0x00, 0x45, 0x6c, 0xe9, 0x12, 0x33, - 0x40, 0x44, 0x92, 0xee, 0x1b, 0x33, 0x00, 0x46, 0x08, 0xde, 0x1a, 0x33, - 0x40, 0x43, 0x6e, 0x35, 0x1e, 0x33, 0x00, 0x44, 0x2a, 0xef, 0x1d, 0x33, - 0x40, 0x80, 0x01, 0xff, 0xa3, 0x06, 0x47, 0xab, 0x05, 0xa2, 0x33, 0x40, - 0x46, 0xba, 0x05, 0xce, 0x33, 0x00, 0x44, 0x60, 0xe2, 0xa6, 0x33, 0x40, - 0x46, 0x46, 0xd9, 0x15, 0x33, 0x00, 0x47, 0x65, 0xd0, 0x16, 0x33, 0x00, - 0x45, 0x12, 0xe9, 0x17, 0x33, 0x40, 0x43, 0x95, 0x0a, 0x0b, 0x33, 0x00, - 0xb2, 0x01, 0xff, 0x44, 0xc1, 0x8a, 0x0c, 0x33, 0x00, 0x44, 0xa6, 0xee, - 0x0d, 0x33, 0x40, 0x47, 0x14, 0x42, 0x8f, 0x22, 0x80, 0x15, 0xee, 0xcc, - 0x33, 0x80, 0x04, 0xf5, 0x7a, 0x33, 0x40, 0x44, 0x26, 0xa3, 0x04, 0x33, - 0x00, 0x42, 0x35, 0x00, 0x05, 0x33, 0x40, 0x04, 0x0a, 0x1e, 0x01, 0xff, - 0x48, 0xa9, 0x0c, 0x91, 0x22, 0x00, 0x4c, 0x79, 0x2a, 0xe4, 0x22, 0x40, + 0xb8, 0x33, 0x00, 0xf7, 0xbe, 0x33, 0x00, 0x45, 0x9f, 0xec, 0x12, 0x33, + 0x40, 0x44, 0xd5, 0xf1, 0x1b, 0x33, 0x00, 0x46, 0x18, 0xe1, 0x1a, 0x33, + 0x40, 0x43, 0x3e, 0x36, 0x1e, 0x33, 0x00, 0x44, 0x7d, 0xf2, 0x1d, 0x33, + 0x40, 0x80, 0x01, 0xff, 0xa3, 0x06, 0x47, 0xd6, 0x05, 0xa2, 0x33, 0x40, + 0x46, 0xe5, 0x05, 0xce, 0x33, 0x00, 0x44, 0x6b, 0xe5, 0xa6, 0x33, 0x40, + 0x46, 0x38, 0xdc, 0x15, 0x33, 0x00, 0x47, 0x38, 0xd3, 0x16, 0x33, 0x00, + 0x45, 0x40, 0xec, 0x17, 0x33, 0x40, 0x43, 0xe4, 0x0a, 0x0b, 0x33, 0x00, + 0xb2, 0x01, 0xff, 0x44, 0x7f, 0x8c, 0x0c, 0x33, 0x00, 0x44, 0xe9, 0xf1, + 0x0d, 0x33, 0x40, 0x47, 0x21, 0x43, 0x8f, 0x22, 0x80, 0x15, 0xee, 0xcc, + 0x33, 0x80, 0x04, 0xf5, 0x7a, 0x33, 0x40, 0x44, 0x62, 0xa5, 0x04, 0x33, + 0x00, 0x42, 0x35, 0x00, 0x05, 0x33, 0x40, 0x04, 0xac, 0x1e, 0x01, 0xff, + 0x48, 0xf8, 0x0c, 0x91, 0x22, 0x00, 0x4c, 0x02, 0x2b, 0xe4, 0x22, 0x40, 0xe1, 0xca, 0x33, 0x80, 0x4c, 0xa5, 0x3e, 0xe7, 0xcc, 0x32, 0x00, 0x4c, - 0xb1, 0x8e, 0x00, 0xf2, 0x01, 0xaf, 0x21, 0xf0, 0xcb, 0x33, 0x80, 0x18, - 0xb5, 0x04, 0xfa, 0x90, 0x33, 0x40, 0x46, 0xf4, 0xd6, 0x32, 0x33, 0x00, - 0x44, 0x42, 0xed, 0x33, 0x33, 0x00, 0x43, 0x24, 0x03, 0x35, 0x33, 0x40, + 0x63, 0x90, 0x00, 0xf2, 0x01, 0xaf, 0x21, 0xf0, 0xcb, 0x33, 0x80, 0x18, + 0xb5, 0x04, 0xfa, 0x90, 0x33, 0x40, 0x46, 0xda, 0xd9, 0x32, 0x33, 0x00, + 0x44, 0x81, 0xf0, 0x33, 0x33, 0x00, 0x43, 0x4f, 0x03, 0x35, 0x33, 0x40, 0xe1, 0x71, 0x33, 0x40, 0xee, 0x3f, 0x33, 0x00, 0xaf, 0x01, 0xff, 0xee, - 0x42, 0x33, 0x00, 0x42, 0x3d, 0x00, 0x41, 0x33, 0x40, 0x47, 0xb6, 0xcf, - 0x36, 0x33, 0x00, 0x44, 0x75, 0xe8, 0x39, 0x33, 0x40, 0x43, 0x34, 0x1f, - 0x2a, 0x33, 0x40, 0xa1, 0x35, 0xe2, 0x87, 0x33, 0x00, 0x42, 0x39, 0xa3, - 0x93, 0x33, 0x00, 0xa9, 0x17, 0x42, 0x6c, 0x09, 0xac, 0x33, 0x00, 0x45, - 0x47, 0xd9, 0x18, 0x33, 0x80, 0x04, 0xf9, 0xc9, 0x33, 0x40, 0x43, 0x7f, - 0x13, 0x19, 0x33, 0x40, 0x42, 0x24, 0x02, 0x10, 0x33, 0x00, 0x43, 0x29, - 0xf1, 0x11, 0x33, 0x00, 0x45, 0x69, 0xe7, 0x13, 0x33, 0x40, 0xec, 0xff, - 0x33, 0x00, 0x43, 0x18, 0x90, 0x0f, 0x33, 0x00, 0x43, 0x62, 0x0e, 0x0e, - 0x33, 0x40, 0xed, 0x99, 0x33, 0x00, 0xaf, 0x01, 0xff, 0x42, 0xf0, 0x04, - 0xcd, 0x23, 0x00, 0x09, 0xf0, 0xbd, 0x01, 0xff, 0x80, 0x04, 0xf3, 0xf6, - 0x26, 0x40, 0x4f, 0xc4, 0x69, 0x8b, 0xcc, 0x01, 0x49, 0x65, 0xb5, 0x8a, - 0xcc, 0x01, 0x48, 0xf2, 0xc7, 0x89, 0xcc, 0x41, 0x44, 0xd5, 0x9b, 0x08, - 0x33, 0x00, 0xb2, 0x0a, 0x47, 0x3d, 0xd3, 0x07, 0x33, 0x00, 0xf6, 0xce, - 0x32, 0x40, 0x07, 0xb8, 0xcb, 0x04, 0xe7, 0xcd, 0x32, 0x40, 0x46, 0x70, - 0xd9, 0x7b, 0x33, 0x00, 0x45, 0x6b, 0xe5, 0x7e, 0x33, 0x00, 0x45, 0x23, - 0xe7, 0xff, 0x32, 0x00, 0x46, 0x42, 0xdd, 0x7c, 0x33, 0x00, 0x47, 0x59, - 0xd3, 0x7d, 0x33, 0x40, 0xe1, 0x72, 0x33, 0x80, 0x2c, 0xe2, 0xc8, 0x33, - 0x00, 0x43, 0x44, 0x0a, 0x25, 0x33, 0x00, 0xea, 0x90, 0xf1, 0x01, 0xec, - 0x97, 0x33, 0x00, 0xed, 0x77, 0x33, 0x80, 0x06, 0x43, 0x5c, 0x08, 0x26, - 0x33, 0x40, 0x80, 0x01, 0xff, 0x45, 0x5f, 0xe2, 0x79, 0x33, 0x00, 0x47, - 0xab, 0x05, 0x78, 0x33, 0x40, 0x43, 0x07, 0x18, 0x24, 0x33, 0x40, 0x48, - 0xc2, 0xbf, 0xc6, 0x33, 0x00, 0xa1, 0x2d, 0xe3, 0xc4, 0x33, 0x00, 0xe4, + 0x42, 0x33, 0x00, 0x42, 0x3d, 0x00, 0x41, 0x33, 0x40, 0x47, 0x89, 0xd2, + 0x36, 0x33, 0x00, 0x44, 0x99, 0xeb, 0x39, 0x33, 0x40, 0x43, 0xd6, 0x1f, + 0x2a, 0x33, 0x40, 0xa1, 0x35, 0xe2, 0x87, 0x33, 0x00, 0x42, 0x75, 0xa5, + 0x93, 0x33, 0x00, 0xa9, 0x17, 0x42, 0xbb, 0x09, 0xac, 0x33, 0x00, 0x45, + 0x39, 0xdc, 0x18, 0x33, 0x80, 0x04, 0xf9, 0xc9, 0x33, 0x40, 0x43, 0xce, + 0x13, 0x19, 0x33, 0x40, 0x42, 0x24, 0x02, 0x10, 0x33, 0x00, 0x43, 0x76, + 0xf4, 0x11, 0x33, 0x00, 0x45, 0x8d, 0xea, 0x13, 0x33, 0x40, 0xec, 0xff, + 0x33, 0x00, 0x43, 0xca, 0x91, 0x0f, 0x33, 0x00, 0x43, 0xb1, 0x0e, 0x0e, + 0x33, 0x40, 0xed, 0x99, 0x33, 0x00, 0xaf, 0x01, 0xff, 0x42, 0x1b, 0x05, + 0xcd, 0x23, 0x00, 0x09, 0x77, 0xc0, 0x01, 0xff, 0x80, 0x04, 0xf3, 0xf6, + 0x26, 0x40, 0x4f, 0x5e, 0x6b, 0x8b, 0xcc, 0x01, 0x49, 0xb6, 0xb7, 0x8a, + 0xcc, 0x01, 0x48, 0xa0, 0xca, 0x89, 0xcc, 0x41, 0x44, 0xfb, 0x9d, 0x08, + 0x33, 0x00, 0xb2, 0x0a, 0x47, 0x09, 0xd6, 0x07, 0x33, 0x00, 0xf6, 0xce, + 0x32, 0x40, 0x07, 0x7d, 0xce, 0x04, 0xe7, 0xcd, 0x32, 0x40, 0x46, 0x68, + 0xdc, 0x7b, 0x33, 0x00, 0x45, 0x85, 0xe8, 0x7e, 0x33, 0x00, 0x45, 0x47, + 0xea, 0xff, 0x32, 0x00, 0x46, 0x4c, 0xe0, 0x7c, 0x33, 0x00, 0x47, 0x25, + 0xd6, 0x7d, 0x33, 0x40, 0xe1, 0x72, 0x33, 0x80, 0x2c, 0xe2, 0xc8, 0x33, + 0x00, 0x43, 0x93, 0x0a, 0x25, 0x33, 0x00, 0xea, 0x90, 0xf1, 0x01, 0xec, + 0x97, 0x33, 0x00, 0xed, 0x77, 0x33, 0x80, 0x06, 0x43, 0x87, 0x08, 0x26, + 0x33, 0x40, 0x80, 0x01, 0xff, 0x45, 0x6a, 0xe5, 0x79, 0x33, 0x00, 0x47, + 0xd6, 0x05, 0x78, 0x33, 0x40, 0x43, 0x73, 0x18, 0x24, 0x33, 0x40, 0x48, + 0x40, 0xc2, 0xc6, 0x33, 0x00, 0xa1, 0x2d, 0xe3, 0xc4, 0x33, 0x00, 0xe4, 0xc5, 0x33, 0x00, 0xed, 0x9d, 0x33, 0x80, 0x11, 0xef, 0xc7, 0x33, 0x80, - 0x06, 0x42, 0x50, 0x02, 0x94, 0x22, 0x40, 0x49, 0x76, 0xbc, 0x7f, 0x33, - 0x40, 0x80, 0x01, 0xff, 0x45, 0x5f, 0xe2, 0xa4, 0x33, 0x00, 0x47, 0xab, + 0x06, 0x42, 0x50, 0x02, 0x94, 0x22, 0x40, 0x49, 0xeb, 0xbe, 0x7f, 0x33, + 0x40, 0x80, 0x01, 0xff, 0x45, 0x6a, 0xe5, 0xa4, 0x33, 0x00, 0x47, 0xd6, 0x05, 0xa0, 0x33, 0x40, 0xec, 0x88, 0x33, 0x00, 0xf0, 0x93, 0x22, 0x40, - 0xa1, 0x1c, 0x44, 0xc0, 0x10, 0x3c, 0x33, 0x00, 0x43, 0x5c, 0x7c, 0x31, - 0x33, 0x00, 0x45, 0x7e, 0xe6, 0x3e, 0x33, 0x00, 0xf1, 0xc3, 0x33, 0x00, - 0x47, 0x32, 0xd4, 0x34, 0x33, 0x40, 0x45, 0x51, 0xe1, 0x2d, 0x33, 0x00, - 0xf2, 0x74, 0x33, 0x40, 0x47, 0x0a, 0x28, 0xdf, 0x33, 0x00, 0x43, 0x3c, - 0x00, 0x03, 0x33, 0x00, 0xed, 0xc2, 0x33, 0x00, 0x44, 0x4a, 0xee, 0x02, - 0x33, 0x00, 0xb0, 0x0a, 0x45, 0x6e, 0xe7, 0x01, 0x33, 0x00, 0xf5, 0x73, - 0x33, 0x40, 0x44, 0x5c, 0x9e, 0x00, 0x33, 0x00, 0x46, 0x7a, 0xd8, 0x8c, - 0xcc, 0x41, 0xa1, 0xbf, 0x01, 0xa5, 0x6f, 0x4d, 0x0c, 0x82, 0x22, 0x22, + 0xa1, 0x1c, 0x44, 0x0f, 0x11, 0x3c, 0x33, 0x00, 0x43, 0xcb, 0x7d, 0x31, + 0x33, 0x00, 0x45, 0xa2, 0xe9, 0x3e, 0x33, 0x00, 0xf1, 0xc3, 0x33, 0x00, + 0x47, 0x05, 0xd7, 0x34, 0x33, 0x40, 0x45, 0x66, 0xe4, 0x2d, 0x33, 0x00, + 0xf2, 0x74, 0x33, 0x40, 0x47, 0xab, 0x28, 0xdf, 0x33, 0x00, 0x43, 0x3c, + 0x00, 0x03, 0x33, 0x00, 0xed, 0xc2, 0x33, 0x00, 0x44, 0x8d, 0xf1, 0x02, + 0x33, 0x00, 0xb0, 0x0a, 0x45, 0x92, 0xea, 0x01, 0x33, 0x00, 0xf5, 0x73, + 0x33, 0x40, 0x44, 0x8d, 0xa0, 0x00, 0x33, 0x00, 0x46, 0x66, 0xdb, 0x8c, + 0xcc, 0x41, 0xa1, 0xbf, 0x01, 0xa5, 0x6f, 0x4d, 0xa2, 0x83, 0x22, 0x22, 0x80, 0x57, 0xa9, 0x31, 0x02, 0x74, 0x00, 0x21, 0xaf, 0x01, 0xff, 0x43, - 0x8b, 0x09, 0xfd, 0xf9, 0x01, 0xaf, 0x0c, 0x49, 0x88, 0xbc, 0xc5, 0xf3, - 0x01, 0x4b, 0x5e, 0xa2, 0x33, 0xf4, 0x41, 0x4b, 0xf7, 0x9b, 0xf5, 0xf9, - 0x01, 0xee, 0x44, 0xf9, 0x41, 0x52, 0x08, 0x54, 0xa6, 0xf4, 0x01, 0x44, - 0xc3, 0x05, 0xdf, 0xfa, 0x41, 0x43, 0x4e, 0x1a, 0x77, 0xf5, 0x81, 0x17, - 0x04, 0xdd, 0x01, 0x01, 0xff, 0x4c, 0x69, 0x8b, 0xd3, 0xf5, 0x01, 0x48, - 0x3a, 0xc6, 0xd2, 0xf5, 0x01, 0x45, 0x0e, 0x09, 0x1a, 0xf4, 0x41, 0x44, - 0x96, 0xe9, 0x78, 0xf5, 0x41, 0x09, 0x83, 0x74, 0x01, 0xff, 0x44, 0xc3, + 0xda, 0x09, 0xfd, 0xf9, 0x01, 0xaf, 0x0c, 0x49, 0xfd, 0xbe, 0xc5, 0xf3, + 0x01, 0x4b, 0x9a, 0xa4, 0x33, 0xf4, 0x41, 0x4b, 0x1d, 0x9e, 0xf5, 0xf9, + 0x01, 0xee, 0x44, 0xf9, 0x41, 0x52, 0x51, 0x55, 0xa6, 0xf4, 0x01, 0x44, + 0xee, 0x05, 0xdf, 0xfa, 0x41, 0x43, 0xd5, 0x1a, 0x77, 0xf5, 0x81, 0x17, + 0x04, 0xdd, 0x01, 0x01, 0xff, 0x4c, 0x27, 0x8d, 0xd3, 0xf5, 0x01, 0x48, + 0xd8, 0xc8, 0xd2, 0xf5, 0x01, 0x45, 0x5d, 0x09, 0x1a, 0xf4, 0x41, 0x44, + 0xc9, 0xec, 0x78, 0xf5, 0x41, 0x09, 0x00, 0x76, 0x01, 0xff, 0x44, 0xc3, 0x00, 0xa0, 0x29, 0x00, 0x42, 0x50, 0x02, 0xa1, 0x29, 0x40, 0x02, 0x6d, - 0x00, 0x20, 0x10, 0xea, 0x5f, 0x14, 0xa5, 0x06, 0x4a, 0xcd, 0xae, 0xb7, - 0x20, 0x40, 0x4a, 0x49, 0xa6, 0xac, 0xf4, 0x01, 0x45, 0x6e, 0xe2, 0xa4, - 0xf6, 0x41, 0xd1, 0x46, 0xcc, 0x01, 0xd2, 0x47, 0xcc, 0x41, 0x4f, 0xa7, - 0x68, 0x4a, 0xf6, 0x01, 0x42, 0x33, 0x00, 0x08, 0xf5, 0x81, 0x06, 0x56, - 0xe3, 0x33, 0xe3, 0xf5, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x53, 0x62, - 0x2b, 0x07, 0xf5, 0x01, 0x4e, 0xec, 0x78, 0x09, 0xf5, 0x01, 0x51, 0xf3, - 0x5c, 0x0a, 0xf5, 0x41, 0x42, 0x73, 0x02, 0x20, 0x00, 0x00, 0x46, 0x10, - 0xd9, 0x5d, 0xf3, 0x01, 0xb2, 0x01, 0xff, 0x02, 0xbb, 0x0d, 0x11, 0x03, - 0x16, 0x04, 0x01, 0xff, 0x4f, 0x76, 0x6c, 0x40, 0xcc, 0x01, 0x4d, 0x72, - 0x88, 0x41, 0xcc, 0x41, 0xe5, 0x47, 0x27, 0x80, 0x06, 0x49, 0x0e, 0x85, + 0x00, 0x20, 0x10, 0x66, 0x61, 0x14, 0xa5, 0x06, 0x4a, 0x1d, 0xb1, 0xb7, + 0x20, 0x40, 0x4a, 0x85, 0xa8, 0xac, 0xf4, 0x01, 0x45, 0x79, 0xe5, 0xa4, + 0xf6, 0x41, 0xd1, 0x46, 0xcc, 0x01, 0xd2, 0x47, 0xcc, 0x41, 0x4f, 0x32, + 0x6a, 0x4a, 0xf6, 0x01, 0x42, 0x33, 0x00, 0x08, 0xf5, 0x81, 0x06, 0x56, + 0xb3, 0x34, 0xe3, 0xf5, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x53, 0x03, + 0x2c, 0x07, 0xf5, 0x01, 0x4e, 0x4d, 0x7a, 0x09, 0xf5, 0x01, 0x51, 0x5e, + 0x5e, 0x0a, 0xf5, 0x41, 0x42, 0x73, 0x02, 0x20, 0x00, 0x00, 0x46, 0x02, + 0xdc, 0x5d, 0xf3, 0x01, 0xb2, 0x01, 0xff, 0x02, 0x0a, 0x0e, 0x11, 0x03, + 0x41, 0x04, 0x01, 0xff, 0x4f, 0x1f, 0x6e, 0x40, 0xcc, 0x01, 0x4d, 0x2f, + 0x8a, 0x41, 0xcc, 0x41, 0xe5, 0x47, 0x27, 0x80, 0x06, 0x49, 0xcb, 0x86, 0x96, 0xf4, 0x41, 0xf3, 0x28, 0x27, 0x40, 0xa3, 0xca, 0x0a, 0x02, 0xc5, - 0x00, 0xa5, 0x0a, 0x06, 0xf2, 0xd0, 0xee, 0x07, 0x03, 0x6b, 0x30, 0xcf, - 0x07, 0x46, 0xcb, 0x5c, 0xc0, 0x20, 0x00, 0x5e, 0xb8, 0x13, 0x1c, 0xf5, - 0x01, 0x0b, 0x67, 0x9f, 0xda, 0x05, 0xb5, 0x89, 0x04, 0x06, 0x6e, 0xde, - 0x01, 0xff, 0x17, 0x2d, 0x2d, 0xe6, 0x03, 0x15, 0x4b, 0x3a, 0xad, 0x03, - 0x4f, 0xe0, 0x6b, 0x98, 0x1a, 0x01, 0x5b, 0x19, 0x1b, 0xa0, 0x1a, 0x81, - 0x8e, 0x03, 0x07, 0xc1, 0x05, 0x8d, 0x01, 0x05, 0xb9, 0x00, 0x71, 0xb3, - 0x4d, 0x0e, 0x46, 0x7b, 0x41, 0x06, 0x6c, 0x38, 0x01, 0xff, 0x4b, 0x72, - 0x38, 0x5b, 0x1a, 0x01, 0x05, 0x2f, 0x03, 0x01, 0xff, 0xa1, 0x27, 0xe5, + 0x00, 0xa5, 0x0a, 0x06, 0xc5, 0xd3, 0xee, 0x07, 0x03, 0x51, 0x31, 0xcf, + 0x07, 0x46, 0x36, 0x5e, 0xc0, 0x20, 0x00, 0x5e, 0x07, 0x14, 0x1c, 0xf5, + 0x01, 0x0b, 0xa3, 0xa1, 0xda, 0x05, 0xb5, 0x89, 0x04, 0x06, 0x7e, 0xe1, + 0x01, 0xff, 0x17, 0xfc, 0x2d, 0xe6, 0x03, 0x15, 0x1b, 0x3b, 0xad, 0x03, + 0x4f, 0x89, 0x6d, 0x98, 0x1a, 0x01, 0x5b, 0xa0, 0x1b, 0xa0, 0x1a, 0x81, + 0x8e, 0x03, 0x07, 0xec, 0x05, 0x8d, 0x01, 0x05, 0xb9, 0x00, 0x71, 0xb3, + 0x4d, 0x0e, 0xa7, 0x7c, 0x41, 0x06, 0x3c, 0x39, 0x01, 0xff, 0x4b, 0x42, + 0x39, 0x5b, 0x1a, 0x01, 0x05, 0x5a, 0x03, 0x01, 0xff, 0xa1, 0x27, 0xe5, 0x54, 0x1a, 0x01, 0xe9, 0x51, 0x1a, 0x01, 0xef, 0x55, 0x1a, 0x81, 0x16, - 0xf5, 0x53, 0x1a, 0x81, 0x0d, 0x08, 0x9b, 0xbe, 0x01, 0xff, 0xec, 0x5a, + 0xf5, 0x53, 0x1a, 0x81, 0x0d, 0x08, 0x22, 0xc1, 0x01, 0xff, 0xec, 0x5a, 0x1a, 0x01, 0xf2, 0x59, 0x1a, 0x41, 0xe5, 0x52, 0x1a, 0x41, 0xe5, 0x56, 0x1a, 0x41, 0xe9, 0x57, 0x1a, 0x01, 0xf5, 0x58, 0x1a, 0x41, 0xd1, 0xa1, - 0x1a, 0x01, 0xd2, 0xa2, 0x1a, 0x41, 0x04, 0x30, 0x03, 0x06, 0x48, 0x3a, - 0xc9, 0x99, 0x1a, 0x41, 0x48, 0xd0, 0x15, 0x96, 0x1a, 0x01, 0x4b, 0xc0, - 0x9b, 0x84, 0x1a, 0x01, 0x4b, 0x32, 0xa2, 0x85, 0x1a, 0x01, 0x47, 0xa1, - 0x4a, 0x97, 0x1a, 0x41, 0x4b, 0x2c, 0x99, 0x9c, 0x1a, 0x01, 0x45, 0xce, - 0xe6, 0x9d, 0x1a, 0x01, 0x44, 0xa4, 0x02, 0x9b, 0x1a, 0x01, 0x45, 0x59, - 0x39, 0x9a, 0x1a, 0x41, 0x42, 0x2e, 0x25, 0x7a, 0x1a, 0x01, 0xe1, 0x50, + 0x1a, 0x01, 0xd2, 0xa2, 0x1a, 0x41, 0x04, 0x5b, 0x03, 0x06, 0x48, 0xf0, + 0xcb, 0x99, 0x1a, 0x41, 0x48, 0x3c, 0x16, 0x96, 0x1a, 0x01, 0x4b, 0xe6, + 0x9d, 0x84, 0x1a, 0x01, 0x4b, 0x6e, 0xa4, 0x85, 0x1a, 0x01, 0x47, 0xea, + 0x4b, 0x97, 0x1a, 0x41, 0x4b, 0x47, 0x9b, 0x9c, 0x1a, 0x01, 0x45, 0xf2, + 0xe9, 0x9d, 0x1a, 0x01, 0x44, 0xa4, 0x02, 0x9b, 0x1a, 0x01, 0x45, 0x29, + 0x3a, 0x9a, 0x1a, 0x41, 0x42, 0xcf, 0x25, 0x7a, 0x1a, 0x01, 0xe1, 0x50, 0x1a, 0x01, 0xa2, 0xe5, 0x01, 0xa3, 0xd8, 0x01, 0xa4, 0xb9, 0x01, 0xa7, 0xac, 0x01, 0x42, 0x22, 0x00, 0x82, 0x1a, 0x01, 0xaa, 0x99, 0x01, 0xab, 0x86, 0x01, 0x42, 0x74, 0x00, 0x7d, 0x1a, 0x01, 0x42, 0x6c, 0x00, 0x74, 0x1a, 0x01, 0xae, 0x62, 0xb0, 0x56, 0x42, 0x71, 0x00, 0x7c, 0x1a, 0x01, - 0xb3, 0x3e, 0xb4, 0x19, 0x42, 0xa6, 0x0a, 0x7e, 0x1a, 0x01, 0x42, 0x34, + 0xb3, 0x3e, 0xb4, 0x19, 0x42, 0xf5, 0x0a, 0x7e, 0x1a, 0x01, 0x42, 0xbc, 0x22, 0x7b, 0x1a, 0x01, 0xba, 0x01, 0xff, 0xe1, 0x79, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x78, 0x1a, 0x41, 0xe1, 0x6b, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x6c, 0x1a, 0x01, 0xb3, 0x0d, 0xb4, 0x01, 0xff, 0xe1, 0x66, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x67, 0x1a, 0x41, 0xe1, 0x75, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x76, 0x1a, 0x41, 0xe1, 0x81, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x7f, - 0x1a, 0x01, 0x42, 0x15, 0x06, 0x80, 0x1a, 0x41, 0xe1, 0x70, 0x1a, 0x01, + 0x1a, 0x01, 0x42, 0x40, 0x06, 0x80, 0x1a, 0x41, 0xe1, 0x70, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x71, 0x1a, 0x41, 0xe1, 0x6f, 0x1a, 0x01, 0x42, 0x24, - 0x02, 0x60, 0x1a, 0x01, 0x42, 0xff, 0x04, 0x6a, 0x1a, 0x01, 0x42, 0x34, + 0x02, 0x60, 0x1a, 0x01, 0x42, 0x2a, 0x05, 0x6a, 0x1a, 0x01, 0x42, 0xbc, 0x22, 0x65, 0x1a, 0x41, 0xe1, 0x5c, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x5d, - 0x1a, 0x01, 0x43, 0x59, 0x20, 0x83, 0x1a, 0x41, 0xe1, 0x63, 0x1a, 0x01, + 0x1a, 0x01, 0x43, 0xfb, 0x20, 0x83, 0x1a, 0x41, 0xe1, 0x63, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x64, 0x1a, 0x41, 0xe1, 0x5e, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x5f, 0x1a, 0x41, 0xe1, 0x6d, 0x1a, 0x01, 0xa4, 0x0c, 0x42, 0x22, 0x00, 0x6e, 0x1a, 0x01, 0x42, 0x59, 0x00, 0x77, 0x1a, 0x41, 0xe1, 0x68, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x69, 0x1a, 0x41, 0xe1, 0x61, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x62, 0x1a, 0x41, 0xe1, 0x72, 0x1a, 0x01, 0x42, 0x22, - 0x00, 0x73, 0x1a, 0x41, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x40, 0x94, - 0x9f, 0x1a, 0x01, 0x4c, 0x39, 0x94, 0x9e, 0x1a, 0x41, 0x42, 0x2e, 0x25, + 0x00, 0x73, 0x1a, 0x41, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x22, 0x96, + 0x9f, 0x1a, 0x01, 0x4c, 0x1b, 0x96, 0x9e, 0x1a, 0x41, 0x42, 0xcf, 0x25, 0x95, 0x1a, 0x01, 0xe2, 0x8f, 0x1a, 0x01, 0xe4, 0x8d, 0x1a, 0x01, 0xe7, 0x8a, 0x1a, 0x01, 0xeb, 0x8b, 0x1a, 0x01, 0xec, 0x92, 0x1a, 0x01, 0xed, 0x90, 0x1a, 0x01, 0xee, 0x8e, 0x1a, 0x81, 0x0d, 0xf2, 0x91, 0x1a, 0x01, 0xf3, 0x94, 0x1a, 0xc1, 0x00, 0xe8, 0x93, 0x1a, 0x41, 0xe7, 0x8c, 0x1a, 0x41, 0x42, 0x74, 0x00, 0x87, 0x1a, 0x01, 0x42, 0x71, 0x00, 0x86, 0x1a, 0x01, 0xb3, 0x01, 0xff, 0xe1, 0x89, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x88, - 0x1a, 0x41, 0x56, 0xeb, 0x34, 0x17, 0x21, 0x00, 0x03, 0x53, 0x00, 0x01, - 0xff, 0x05, 0x25, 0x23, 0x5c, 0x05, 0x37, 0x1a, 0x01, 0xff, 0x45, 0xce, - 0x00, 0x99, 0x21, 0x80, 0x3b, 0x4b, 0x95, 0x97, 0x0b, 0x2b, 0x00, 0x4c, - 0x71, 0x8c, 0xd9, 0x21, 0x00, 0x09, 0x9c, 0x01, 0x19, 0x50, 0x6a, 0x65, - 0x57, 0xf8, 0x01, 0x55, 0x01, 0x02, 0x69, 0x2b, 0x80, 0x06, 0x4b, 0xfa, - 0x0f, 0x03, 0x2b, 0x40, 0x47, 0x81, 0x14, 0x79, 0x2b, 0x40, 0x43, 0xa7, - 0xcd, 0x61, 0xf6, 0x01, 0x44, 0xf0, 0x4f, 0x51, 0xf6, 0x01, 0x49, 0x89, - 0xbe, 0x59, 0xf6, 0x41, 0x80, 0x01, 0xff, 0x54, 0x6b, 0x3f, 0x2a, 0x29, - 0x00, 0x48, 0xfd, 0xb1, 0xbb, 0xf8, 0x01, 0x49, 0x20, 0x24, 0x26, 0x29, - 0x40, 0x45, 0xce, 0x00, 0x98, 0x21, 0x80, 0x3b, 0x4b, 0x95, 0x97, 0x0a, - 0x2b, 0x00, 0x4c, 0x71, 0x8c, 0xd8, 0x21, 0x00, 0x09, 0x9c, 0x01, 0x19, - 0x50, 0x6a, 0x65, 0x56, 0xf8, 0x01, 0x55, 0x01, 0x02, 0x68, 0x2b, 0x80, - 0x06, 0x4b, 0xfa, 0x0f, 0x02, 0x2b, 0x40, 0x47, 0x81, 0x14, 0x78, 0x2b, - 0x40, 0x43, 0xa7, 0xcd, 0x63, 0xf6, 0x01, 0x44, 0xf0, 0x4f, 0x53, 0xf6, - 0x01, 0x49, 0x89, 0xbe, 0x5b, 0xf6, 0x41, 0x80, 0x01, 0xff, 0x54, 0x93, - 0x3f, 0x29, 0x29, 0x00, 0x59, 0x16, 0x23, 0x2d, 0x29, 0x00, 0x48, 0xfd, - 0xb1, 0xba, 0xf8, 0x01, 0x49, 0x60, 0xbd, 0xf2, 0x21, 0x00, 0x49, 0x20, - 0x24, 0x25, 0x29, 0x40, 0x06, 0xc4, 0x06, 0x9d, 0x01, 0x07, 0xc1, 0x05, - 0x01, 0xff, 0x42, 0xc9, 0x09, 0xe2, 0x10, 0x01, 0x43, 0x17, 0x4d, 0xd2, - 0x10, 0x01, 0x43, 0xb1, 0xf0, 0xd3, 0x10, 0x01, 0x43, 0xdf, 0x77, 0xd4, - 0x10, 0x01, 0xa5, 0x74, 0x43, 0x0c, 0xba, 0xd5, 0x10, 0x01, 0x43, 0x84, - 0x20, 0xde, 0x10, 0x01, 0x42, 0xec, 0x18, 0xe4, 0x10, 0x01, 0x43, 0x0b, - 0xf1, 0xe0, 0x10, 0x01, 0x43, 0xa5, 0x46, 0xdf, 0x10, 0x01, 0x43, 0xcb, - 0x17, 0xd8, 0x10, 0x01, 0x02, 0x6c, 0x00, 0x44, 0xae, 0x30, 0x42, 0x5c, - 0x28, 0xe6, 0x10, 0x01, 0x43, 0xe9, 0x41, 0xdb, 0x10, 0x01, 0x43, 0xd2, - 0x17, 0xdd, 0x10, 0x01, 0x43, 0xf8, 0xc3, 0xd0, 0x10, 0x01, 0x43, 0xc8, - 0x09, 0xd1, 0x10, 0x01, 0x42, 0x5e, 0x74, 0xe5, 0x10, 0x01, 0x43, 0xc2, - 0xd2, 0xda, 0x10, 0x01, 0x43, 0x62, 0x49, 0xdc, 0x10, 0x41, 0x42, 0xc9, - 0x09, 0xd9, 0x10, 0x01, 0x43, 0x0c, 0xba, 0xd7, 0x10, 0x01, 0x43, 0x62, - 0x49, 0xe1, 0x10, 0x41, 0xe5, 0xe8, 0x10, 0x01, 0xe8, 0xd6, 0x10, 0x41, - 0x42, 0x4e, 0x00, 0xe3, 0x10, 0x01, 0xe8, 0xe7, 0x10, 0x41, 0x45, 0xc3, - 0x0a, 0xf8, 0x10, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xf9, 0x10, 0x01, - 0x43, 0xbf, 0x0a, 0xf1, 0x10, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, - 0x1d, 0xf0, 0x10, 0x41, 0x44, 0x25, 0x01, 0xf3, 0x10, 0x01, 0x42, 0x15, - 0x02, 0xf2, 0x10, 0x41, 0x44, 0x27, 0x1d, 0xf7, 0x10, 0x01, 0x42, 0x60, - 0x25, 0xf6, 0x10, 0x41, 0x43, 0xa7, 0x05, 0xf5, 0x10, 0x01, 0x43, 0xcb, - 0x06, 0xf4, 0x10, 0x41, 0x56, 0x2c, 0x24, 0x6a, 0xf6, 0x81, 0x0d, 0x42, - 0xc4, 0x02, 0x2f, 0x00, 0xc0, 0x00, 0x4d, 0x71, 0x7e, 0xf6, 0x29, 0x40, - 0x50, 0xef, 0x10, 0x6b, 0xf6, 0x41, 0x0a, 0xd6, 0x57, 0xda, 0x01, 0x50, - 0x6a, 0x62, 0x45, 0x0f, 0x01, 0x07, 0xc1, 0x05, 0x49, 0x07, 0x2f, 0x39, - 0x29, 0x0c, 0x01, 0x16, 0x01, 0xff, 0x4f, 0xb4, 0x41, 0x57, 0x0f, 0x01, - 0x54, 0xaf, 0x41, 0x59, 0x0f, 0x01, 0x04, 0xd0, 0x09, 0x01, 0xff, 0x51, - 0xb4, 0x57, 0x58, 0x0f, 0x01, 0x4d, 0x65, 0x88, 0x55, 0x0f, 0xc1, 0x00, - 0x4a, 0xbb, 0x57, 0x56, 0x0f, 0x41, 0x43, 0xbf, 0x0a, 0x51, 0x0f, 0x81, - 0x0f, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x52, 0x0f, 0x01, 0x45, 0xde, - 0x2b, 0x53, 0x0f, 0x41, 0x48, 0x21, 0x11, 0x54, 0x0f, 0x41, 0xa1, 0x79, - 0x44, 0x0a, 0xec, 0x31, 0x0f, 0x01, 0x44, 0x86, 0xec, 0x43, 0x0f, 0x01, - 0x45, 0xa1, 0xa8, 0x32, 0x0f, 0x01, 0x42, 0xb0, 0x01, 0x33, 0x0f, 0x81, - 0x5a, 0x44, 0x8e, 0xed, 0x38, 0x0f, 0x01, 0xac, 0x46, 0x43, 0x89, 0x05, - 0x3a, 0x0f, 0x01, 0x43, 0x54, 0x22, 0x3b, 0x0f, 0x01, 0x42, 0x6f, 0x02, - 0x3e, 0x0f, 0x01, 0x49, 0xfa, 0x64, 0x40, 0x0f, 0x01, 0xb3, 0x18, 0x43, - 0x1e, 0xc2, 0x42, 0x0f, 0x01, 0x43, 0xc0, 0x88, 0x34, 0x0f, 0x01, 0x44, - 0x58, 0x51, 0x37, 0x0f, 0x01, 0x45, 0x52, 0x51, 0x35, 0x0f, 0x41, 0xa1, - 0x06, 0x43, 0x0e, 0x16, 0x41, 0x0f, 0x41, 0x43, 0x89, 0xe7, 0x3f, 0x0f, - 0x01, 0x44, 0x39, 0xe1, 0x3c, 0x0f, 0x41, 0x45, 0x59, 0xd9, 0x39, 0x0f, - 0x01, 0x43, 0x28, 0x59, 0x44, 0x0f, 0x41, 0x42, 0x53, 0x00, 0x36, 0x0f, - 0x41, 0x44, 0x48, 0x3c, 0x30, 0x0f, 0x01, 0x43, 0xf7, 0x19, 0x3d, 0x0f, - 0x41, 0x06, 0x4c, 0x13, 0x43, 0x04, 0xb4, 0x0b, 0x33, 0x05, 0x60, 0x14, - 0x23, 0x4f, 0x38, 0x6e, 0x4e, 0x0f, 0x01, 0x4a, 0xc9, 0xad, 0x4f, 0x0f, - 0x01, 0x4c, 0x76, 0x0e, 0x50, 0x0f, 0x01, 0x09, 0xa2, 0x0b, 0x01, 0xff, - 0x45, 0x5c, 0x00, 0x49, 0x0f, 0x01, 0x45, 0xf5, 0x06, 0x47, 0x0f, 0x41, - 0x45, 0x5c, 0x00, 0x4c, 0x0f, 0x01, 0x45, 0xf5, 0x06, 0x4d, 0x0f, 0x41, - 0x45, 0x5c, 0x00, 0x48, 0x0f, 0x01, 0x45, 0xf5, 0x06, 0x46, 0x0f, 0x41, - 0x45, 0x5c, 0x00, 0x4a, 0x0f, 0x01, 0x45, 0xf5, 0x06, 0x4b, 0x0f, 0x41, - 0x80, 0x0c, 0x44, 0x46, 0x1c, 0x4e, 0xf9, 0x01, 0x54, 0x6f, 0x45, 0x94, - 0x23, 0x40, 0x46, 0x1a, 0x62, 0xad, 0x00, 0x00, 0x49, 0x93, 0xb7, 0x66, - 0xf3, 0x01, 0x51, 0x81, 0x38, 0xac, 0xf5, 0x41, 0x48, 0x12, 0xc2, 0xbd, - 0x26, 0x00, 0x42, 0x6e, 0x00, 0xe6, 0xf9, 0x41, 0xa1, 0x2a, 0x4b, 0x79, - 0x99, 0x27, 0xf9, 0x01, 0x02, 0xd1, 0x00, 0x01, 0xff, 0x50, 0x9a, 0x5e, - 0xd4, 0xf3, 0x01, 0x47, 0xc2, 0xcc, 0xc2, 0xf3, 0x01, 0x45, 0x0e, 0x2e, - 0x44, 0x27, 0x00, 0x43, 0xd5, 0x17, 0x03, 0x26, 0xc0, 0x00, 0x4d, 0x8b, - 0x7e, 0xc4, 0x26, 0x40, 0x42, 0x62, 0x01, 0x0c, 0xf4, 0x01, 0x42, 0x37, - 0x01, 0x0d, 0xf4, 0x41, 0xa1, 0x86, 0x01, 0xa9, 0x06, 0x4c, 0x02, 0x7b, - 0xac, 0xf6, 0x41, 0xac, 0x06, 0x4a, 0x23, 0xae, 0x0f, 0xf6, 0x41, 0xe5, - 0x23, 0x23, 0x00, 0x04, 0xa1, 0x01, 0x01, 0xff, 0x0e, 0xc0, 0x1e, 0x5d, - 0x0a, 0xe1, 0x07, 0x01, 0xff, 0xa8, 0x44, 0x4a, 0x9b, 0x28, 0x03, 0xf6, - 0x81, 0x26, 0xb3, 0x06, 0x44, 0xd3, 0x0c, 0x72, 0xf9, 0x41, 0x4b, 0xcf, - 0x1e, 0x0a, 0xf6, 0x81, 0x06, 0x49, 0xcc, 0xbd, 0x0e, 0xf6, 0x41, 0x05, - 0x19, 0x00, 0x01, 0xff, 0x53, 0x81, 0x48, 0x2d, 0xf9, 0x01, 0x4c, 0x09, - 0x94, 0x70, 0xf9, 0x41, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0x74, 0x74, - 0x05, 0xf6, 0x01, 0x4c, 0xce, 0x1e, 0x04, 0xf6, 0x01, 0x53, 0x4a, 0x4c, - 0x06, 0xf6, 0x41, 0x43, 0x78, 0x4c, 0x07, 0xf6, 0x01, 0x50, 0x1a, 0x59, - 0x0d, 0xf6, 0x01, 0x44, 0x2c, 0x7e, 0x08, 0xf6, 0x41, 0x51, 0x19, 0x59, - 0x3b, 0xf6, 0x01, 0x4a, 0x9b, 0x28, 0x3a, 0xf6, 0x41, 0x02, 0x0f, 0x07, - 0x06, 0x4a, 0xe0, 0x4d, 0x33, 0x2a, 0x40, 0x80, 0x0d, 0x47, 0x04, 0xce, - 0xaa, 0x2a, 0xc0, 0x00, 0x4c, 0x51, 0x28, 0xac, 0x2a, 0x40, 0xa1, 0xfc, - 0x02, 0x4c, 0x15, 0x8b, 0x39, 0xf5, 0x01, 0x02, 0xe8, 0x04, 0xc1, 0x02, - 0x4b, 0xf5, 0x98, 0x69, 0xfe, 0x00, 0xa5, 0x8e, 0x02, 0x49, 0x15, 0x16, - 0x52, 0xfe, 0x00, 0x51, 0xf7, 0x58, 0x65, 0xfe, 0x00, 0x4c, 0x15, 0x8e, - 0x63, 0xfe, 0x00, 0x51, 0x7f, 0x59, 0x51, 0xfe, 0x00, 0x02, 0x68, 0x00, - 0xd5, 0x01, 0x4b, 0x12, 0x9e, 0x5f, 0xfe, 0x00, 0x4e, 0x24, 0x79, 0x38, - 0xf5, 0x01, 0xb0, 0xba, 0x01, 0x4d, 0xd6, 0x33, 0x56, 0xfe, 0x00, 0xb2, - 0x20, 0x49, 0xac, 0xbc, 0x54, 0xfe, 0x00, 0xb4, 0x0c, 0x54, 0x33, 0x45, - 0xfa, 0xcd, 0x01, 0x51, 0xbf, 0x5d, 0x61, 0x2a, 0x40, 0x44, 0xae, 0x22, - 0xdc, 0x02, 0x00, 0x60, 0xa3, 0x0b, 0x3b, 0x0b, 0x41, 0x4e, 0xcd, 0x70, - 0x68, 0xfe, 0x00, 0x05, 0xc9, 0x00, 0x76, 0x0d, 0x18, 0x85, 0x01, 0xff, - 0xa5, 0x63, 0xa6, 0x46, 0x44, 0x46, 0x2a, 0x78, 0x21, 0x00, 0x43, 0xbf, - 0x0a, 0x70, 0x21, 0x80, 0x2a, 0xb3, 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, - 0x01, 0x79, 0x21, 0x00, 0x44, 0x25, 0x01, 0x72, 0x21, 0x00, 0xb7, 0x01, - 0xff, 0x44, 0x46, 0x2b, 0x7b, 0x21, 0x00, 0xef, 0x71, 0x21, 0x40, 0x44, - 0x27, 0x1d, 0x76, 0x21, 0x00, 0x42, 0x60, 0x25, 0x75, 0x21, 0x40, 0x80, - 0x01, 0xff, 0x47, 0x22, 0x11, 0x7d, 0x21, 0x00, 0x48, 0xd5, 0x5c, 0x7f, - 0x21, 0x40, 0xa9, 0x06, 0x43, 0xcb, 0x06, 0x73, 0x21, 0x40, 0x43, 0x09, - 0x4c, 0x7c, 0x21, 0x00, 0x42, 0x32, 0x00, 0x74, 0x21, 0xc0, 0x00, 0x48, - 0x21, 0x11, 0x7e, 0x21, 0x40, 0x44, 0xc9, 0x00, 0x77, 0x21, 0x00, 0x45, - 0x0b, 0x6e, 0x7a, 0x21, 0x40, 0x4d, 0x23, 0x0b, 0x5c, 0xfe, 0x00, 0x4b, - 0x50, 0x21, 0x5a, 0xfe, 0x00, 0x56, 0x05, 0x09, 0x5e, 0xfe, 0x40, 0x4b, - 0xc6, 0x99, 0x6a, 0xfe, 0x00, 0x48, 0x46, 0x70, 0x62, 0xfe, 0x40, 0x03, - 0xc5, 0x00, 0x06, 0x4c, 0x9d, 0x93, 0x64, 0xfe, 0x40, 0x4d, 0x23, 0x0b, - 0x5b, 0xfe, 0x00, 0x4b, 0x50, 0x21, 0x59, 0xfe, 0x00, 0x56, 0x05, 0x09, - 0x5d, 0xfe, 0x40, 0x49, 0xa0, 0x90, 0x0a, 0x22, 0x80, 0x12, 0x46, 0x3c, - 0xc0, 0x58, 0xfe, 0x00, 0x4a, 0xfa, 0x12, 0x66, 0xfe, 0x00, 0x4f, 0xae, - 0x00, 0x57, 0xfe, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x47, 0x77, 0x7e, - 0xf7, 0x22, 0x00, 0x68, 0x05, 0x05, 0xf4, 0x22, 0x40, 0x43, 0x03, 0x12, - 0x55, 0xfe, 0x00, 0x02, 0xea, 0x04, 0x1c, 0x07, 0xfc, 0x67, 0x01, 0xff, - 0x49, 0x06, 0xb4, 0x0d, 0x22, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x47, - 0x77, 0x7e, 0xfe, 0x22, 0x00, 0x68, 0x05, 0x05, 0xfc, 0x22, 0x40, 0xe1, - 0x50, 0xfe, 0x00, 0x49, 0x34, 0xb6, 0x6b, 0xfe, 0x40, 0x47, 0x42, 0x33, - 0xe9, 0xf6, 0x01, 0x48, 0x2e, 0x3d, 0x60, 0xfe, 0x00, 0x47, 0xee, 0x0c, - 0x61, 0xfe, 0x40, 0xa1, 0x6c, 0xa5, 0x40, 0xa9, 0x27, 0xaf, 0x01, 0xff, - 0xb0, 0x0d, 0xb4, 0x01, 0xff, 0x48, 0x36, 0x47, 0xb0, 0xf3, 0x01, 0xe8, - 0xa5, 0xf9, 0x41, 0xe5, 0x33, 0x23, 0x00, 0x0a, 0x91, 0xa9, 0x01, 0xff, - 0x43, 0x1a, 0x00, 0x58, 0x2a, 0x00, 0x42, 0x0c, 0x00, 0x57, 0x2a, 0x40, - 0x4b, 0xed, 0x97, 0x55, 0xf3, 0x01, 0x06, 0x2a, 0x78, 0x01, 0xff, 0x4d, - 0x7d, 0x81, 0x41, 0xf6, 0x01, 0x4c, 0x91, 0x93, 0x42, 0xf6, 0x41, 0xe4, - 0xf7, 0xf6, 0x01, 0x02, 0x9c, 0x0a, 0x06, 0x4a, 0xd5, 0xb0, 0x75, 0xf5, - 0x41, 0x04, 0xa1, 0x01, 0x06, 0x46, 0xb2, 0xd2, 0x2a, 0xf6, 0x41, 0x4d, - 0xcc, 0x7e, 0xcc, 0xf6, 0x01, 0x44, 0xe1, 0x07, 0x34, 0xf6, 0x01, 0x46, - 0xeb, 0x07, 0xa4, 0xf4, 0x41, 0x05, 0x76, 0x00, 0x06, 0x4e, 0x22, 0x7d, - 0x73, 0xa6, 0x40, 0x0c, 0xe5, 0x27, 0x11, 0x13, 0x6f, 0x4a, 0x01, 0xff, - 0x49, 0x87, 0xba, 0x5a, 0x2b, 0x00, 0x4d, 0x36, 0x86, 0x5c, 0x2b, 0x40, - 0x4c, 0x87, 0x00, 0x96, 0x2a, 0x80, 0x0d, 0x49, 0xec, 0x00, 0x95, 0x2a, - 0xc0, 0x00, 0x50, 0x2a, 0x5f, 0x97, 0x2a, 0x40, 0x50, 0x2a, 0x5f, 0x98, - 0x2a, 0x40, 0x48, 0x3a, 0xc1, 0xf9, 0xf6, 0x01, 0xa9, 0x16, 0xb5, 0x01, - 0xff, 0x42, 0x0f, 0x07, 0x80, 0xf4, 0x81, 0x06, 0x42, 0x12, 0x25, 0xa8, - 0xf9, 0x41, 0x4f, 0x7c, 0x49, 0x20, 0x26, 0x40, 0x4d, 0xae, 0x7d, 0xbf, - 0xf3, 0x01, 0x42, 0x33, 0x00, 0xf7, 0x26, 0x40, 0xa4, 0xbc, 0x31, 0x02, - 0x31, 0x03, 0xf0, 0x07, 0x51, 0x5c, 0x5a, 0xfe, 0xf5, 0x01, 0x06, 0x24, - 0xcf, 0xbe, 0x07, 0xae, 0x30, 0xb8, 0x01, 0xff, 0x02, 0x9b, 0x01, 0x0c, - 0x4d, 0xbf, 0x7e, 0x06, 0x20, 0x00, 0x55, 0x69, 0x3d, 0x3a, 0x27, 0x40, - 0x60, 0x45, 0x0f, 0x3e, 0x27, 0x00, 0x07, 0x09, 0x08, 0x01, 0xff, 0x4a, - 0x53, 0x2b, 0x36, 0x27, 0x00, 0x4d, 0xd9, 0x12, 0xcd, 0xf7, 0x01, 0x54, - 0xcf, 0x44, 0x2f, 0xf5, 0x41, 0x46, 0x26, 0xd8, 0x3f, 0x22, 0x00, 0x03, - 0x06, 0x02, 0xc1, 0x06, 0x05, 0xc2, 0xe3, 0x01, 0xff, 0x08, 0x27, 0x7f, - 0xa4, 0x05, 0xac, 0xae, 0x01, 0x56, 0x9b, 0x35, 0xf4, 0x0d, 0x00, 0x05, - 0x2f, 0x03, 0x89, 0x01, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0x4a, 0x8c, 0x6a, - 0xcf, 0x0d, 0x00, 0x05, 0x87, 0x6a, 0x52, 0x02, 0x24, 0x02, 0x42, 0xab, - 0x01, 0xff, 0x05, 0x6a, 0xb6, 0x29, 0x04, 0x9b, 0xcf, 0x01, 0xff, 0x45, - 0x9a, 0xde, 0xdb, 0x0d, 0x00, 0x42, 0xa6, 0x0a, 0xd9, 0x0d, 0xc0, 0x00, - 0x05, 0xa9, 0xde, 0x01, 0xff, 0x4a, 0x8c, 0x6a, 0xdc, 0x0d, 0x00, 0x4f, - 0x87, 0x6a, 0xdd, 0x0d, 0x00, 0x4b, 0x29, 0x9a, 0xde, 0x0d, 0x40, 0x4a, - 0x3b, 0xa5, 0xd0, 0x0d, 0x00, 0x48, 0xa2, 0xc4, 0xd2, 0x0d, 0x00, 0x49, - 0x71, 0xbb, 0xd4, 0x0d, 0x40, 0x4a, 0xe3, 0xa7, 0xd8, 0x0d, 0x00, 0x49, - 0x2b, 0x9a, 0xdf, 0x0d, 0x40, 0x4a, 0x3b, 0xa5, 0xd1, 0x0d, 0x00, 0x02, - 0x24, 0x02, 0x12, 0x48, 0xa2, 0xc4, 0xd3, 0x0d, 0x00, 0x47, 0x9a, 0xcf, - 0xda, 0x0d, 0x00, 0x49, 0x71, 0xbb, 0xd6, 0x0d, 0x40, 0x4a, 0xe3, 0xa7, - 0xf2, 0x0d, 0x00, 0x49, 0x2b, 0x9a, 0xf3, 0x0d, 0x40, 0xa1, 0x0c, 0x4b, - 0x4f, 0x23, 0x81, 0x0d, 0x00, 0x49, 0x92, 0xbe, 0x83, 0x0d, 0x40, 0x48, - 0xea, 0xc4, 0xca, 0x0d, 0x00, 0x49, 0x5a, 0xba, 0x82, 0x0d, 0x40, 0x06, - 0xc2, 0x05, 0x47, 0x0a, 0xd7, 0xa9, 0x01, 0xff, 0x45, 0xc3, 0x0a, 0xee, - 0x0d, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xef, 0x0d, 0x00, 0x43, 0xbf, - 0x0a, 0xe7, 0x0d, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xe6, - 0x0d, 0x40, 0x44, 0x25, 0x01, 0xe9, 0x0d, 0x00, 0x42, 0x15, 0x02, 0xe8, - 0x0d, 0x40, 0x44, 0x27, 0x1d, 0xed, 0x0d, 0x00, 0x42, 0x60, 0x25, 0xec, - 0x0d, 0x40, 0x43, 0xa7, 0x05, 0xeb, 0x0d, 0x00, 0x43, 0xcb, 0x06, 0xea, - 0x0d, 0x40, 0xa1, 0xb4, 0x02, 0x08, 0x7a, 0xc2, 0x9d, 0x02, 0xa5, 0x8e, - 0x02, 0x47, 0x3c, 0xce, 0xc6, 0x0d, 0x00, 0x47, 0xa5, 0xce, 0xc4, 0x0d, - 0x00, 0xa9, 0xd3, 0x01, 0x52, 0xda, 0x51, 0x9e, 0x0d, 0x00, 0xad, 0x67, - 0xaf, 0x59, 0x47, 0x5d, 0xd2, 0xbb, 0x0d, 0x00, 0x08, 0xfa, 0xc7, 0x35, - 0x08, 0xa2, 0xc8, 0x1a, 0xb5, 0x0c, 0x47, 0x5c, 0xd4, 0xc0, 0x0d, 0x00, - 0x47, 0xfd, 0xd4, 0xba, 0x0d, 0x40, 0x46, 0x02, 0xde, 0x8c, 0x0d, 0x00, - 0x45, 0xdd, 0x67, 0x8b, 0x0d, 0x40, 0x4a, 0xe2, 0x51, 0xa4, 0x0d, 0x00, - 0x02, 0x15, 0x06, 0x01, 0xff, 0x52, 0xc4, 0x52, 0xa5, 0x0d, 0x00, 0x45, - 0xdd, 0x67, 0xc1, 0x0d, 0x40, 0xa4, 0x0c, 0x47, 0x5f, 0xce, 0x9f, 0x0d, - 0x00, 0x47, 0x5b, 0xcf, 0xa6, 0x0d, 0x40, 0x46, 0x25, 0x9d, 0xb3, 0x0d, - 0x00, 0x47, 0x71, 0xcd, 0xac, 0x0d, 0x40, 0x46, 0xdc, 0x67, 0x95, 0x0d, - 0x00, 0x45, 0xdd, 0x67, 0x94, 0x0d, 0x40, 0xa1, 0x17, 0x09, 0x38, 0xbe, - 0x01, 0xff, 0x47, 0xe7, 0xcf, 0xc5, 0x0d, 0x00, 0x47, 0x9d, 0xd0, 0xab, - 0x0d, 0x00, 0x47, 0xdb, 0xd2, 0xc2, 0x0d, 0x40, 0x0a, 0xc9, 0xa8, 0x06, - 0x45, 0xdd, 0x67, 0xb8, 0x0d, 0x40, 0x47, 0x24, 0x9d, 0xb7, 0x0d, 0x00, - 0x47, 0x01, 0xcd, 0xa1, 0x0d, 0x00, 0xa4, 0x27, 0x47, 0x5f, 0xce, 0x9d, - 0x0d, 0x00, 0x47, 0x5b, 0xcf, 0xa3, 0x0d, 0x00, 0x47, 0x7e, 0xcf, 0x9b, - 0x0d, 0x00, 0x47, 0xbc, 0xd1, 0xb5, 0x0d, 0x00, 0xb4, 0x01, 0xff, 0x46, - 0x25, 0x9d, 0xae, 0x0d, 0x00, 0x47, 0x6e, 0xd3, 0xa8, 0x0d, 0x40, 0x46, - 0x25, 0x9d, 0xb0, 0x0d, 0x00, 0x47, 0x71, 0xcd, 0xaa, 0x0d, 0x40, 0x46, - 0x54, 0xda, 0x8a, 0x0d, 0x00, 0x02, 0x5b, 0x15, 0x16, 0x02, 0x3d, 0x00, - 0x06, 0x45, 0xdd, 0x67, 0x89, 0x0d, 0x40, 0x46, 0x02, 0xde, 0x8e, 0x0d, - 0x00, 0x45, 0xdd, 0x67, 0x8d, 0x0d, 0x40, 0x46, 0x02, 0xde, 0x90, 0x0d, - 0x00, 0x45, 0xdd, 0x67, 0x8f, 0x0d, 0x40, 0x46, 0xb6, 0xd8, 0x92, 0x0d, - 0x00, 0x45, 0xdd, 0x67, 0x91, 0x0d, 0x40, 0x47, 0xe7, 0xcf, 0xbd, 0x0d, - 0x00, 0x47, 0x9d, 0xd0, 0xb1, 0x0d, 0x00, 0x47, 0xdb, 0xd2, 0xc3, 0x0d, - 0x40, 0x46, 0x25, 0x9d, 0x86, 0x0d, 0x00, 0xa5, 0x5d, 0x46, 0x54, 0xda, - 0x93, 0x0d, 0x00, 0x0a, 0x21, 0xab, 0x12, 0x4b, 0x20, 0x9d, 0xb9, 0x0d, - 0x00, 0x46, 0x02, 0xde, 0x96, 0x0d, 0x00, 0x45, 0xdd, 0x67, 0x85, 0x0d, - 0x40, 0x47, 0x24, 0x9d, 0xb6, 0x0d, 0x00, 0x47, 0x01, 0xcd, 0xa0, 0x0d, - 0x00, 0xa4, 0x27, 0x47, 0x5f, 0xce, 0x9c, 0x0d, 0x00, 0x47, 0x5b, 0xcf, - 0xa2, 0x0d, 0x00, 0x47, 0x7e, 0xcf, 0x9a, 0x0d, 0x00, 0x47, 0xbc, 0xd1, - 0xb4, 0x0d, 0x00, 0xb4, 0x01, 0xff, 0x46, 0x25, 0x9d, 0xad, 0x0d, 0x00, - 0x47, 0x6e, 0xd3, 0xa7, 0x0d, 0x40, 0x46, 0x25, 0x9d, 0xaf, 0x0d, 0x00, - 0x47, 0x71, 0xcd, 0xa9, 0x0d, 0x40, 0x46, 0xb6, 0xd8, 0x88, 0x0d, 0x00, - 0x45, 0xdd, 0x67, 0x87, 0x0d, 0x40, 0x06, 0xc4, 0x06, 0x52, 0x07, 0x2f, - 0x39, 0x01, 0xff, 0x46, 0x44, 0xd8, 0xf1, 0x11, 0x01, 0xa6, 0x39, 0x46, - 0x0b, 0x2c, 0xf2, 0x11, 0x01, 0x04, 0xbf, 0x0a, 0x23, 0xb3, 0x15, 0xb4, - 0x01, 0xff, 0x42, 0x92, 0x01, 0xea, 0x11, 0x01, 0x45, 0x2b, 0x11, 0xec, - 0x11, 0x01, 0x45, 0xde, 0x2b, 0xeb, 0x11, 0x41, 0x46, 0x27, 0x1d, 0xf0, - 0x11, 0x01, 0x44, 0x4e, 0xda, 0xef, 0x11, 0x41, 0x47, 0x22, 0x11, 0xf3, - 0x11, 0x01, 0x48, 0xd5, 0x5c, 0xf4, 0x11, 0x41, 0x44, 0x08, 0x4c, 0xee, - 0x11, 0x01, 0x44, 0x85, 0x50, 0xed, 0x11, 0x41, 0x45, 0xc3, 0x0a, 0xe8, - 0x11, 0x01, 0xa6, 0x29, 0x44, 0x46, 0x2a, 0xe9, 0x11, 0x01, 0x43, 0xbf, - 0x0a, 0xe1, 0x11, 0x01, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, - 0xe3, 0x11, 0x01, 0x42, 0x15, 0x02, 0xe2, 0x11, 0x41, 0x44, 0x27, 0x1d, - 0xe7, 0x11, 0x01, 0x42, 0x60, 0x25, 0xe6, 0x11, 0x41, 0x43, 0xa7, 0x05, - 0xe5, 0x11, 0x01, 0x43, 0xcb, 0x06, 0xe4, 0x11, 0x41, 0x80, 0x0d, 0x07, - 0x10, 0xcb, 0x01, 0xff, 0xd2, 0x8e, 0x00, 0x00, 0xd3, 0x8f, 0x00, 0x40, - 0x54, 0x0b, 0x40, 0x9a, 0x00, 0x00, 0x5e, 0x04, 0x13, 0x1b, 0x20, 0x00, - 0xac, 0x17, 0x63, 0x38, 0x0b, 0x3a, 0x20, 0x00, 0x07, 0xfe, 0xd2, 0x01, - 0xff, 0x44, 0x25, 0x01, 0x8f, 0x00, 0x00, 0x42, 0x15, 0x02, 0x8e, 0x00, - 0x40, 0x61, 0x9b, 0x0d, 0x39, 0x20, 0x00, 0x53, 0xbb, 0x4a, 0x1a, 0x20, - 0x40, 0x06, 0x5c, 0x00, 0x17, 0x4d, 0x48, 0x84, 0x6c, 0x2a, 0x00, 0x03, - 0x9d, 0x07, 0x01, 0xff, 0x4c, 0x87, 0x00, 0x9e, 0x2a, 0x00, 0x49, 0xec, - 0x00, 0x9d, 0x2a, 0x40, 0x5e, 0xe6, 0x12, 0xa0, 0x2a, 0x00, 0x5b, 0xbb, - 0x1b, 0x9f, 0x2a, 0x40, 0x4d, 0x23, 0x7e, 0x18, 0xf9, 0x01, 0x08, 0xe2, - 0xc9, 0x01, 0xff, 0x04, 0x83, 0x8b, 0x96, 0x29, 0x02, 0x14, 0x09, 0xea, - 0x28, 0xa3, 0xc2, 0x28, 0xa4, 0xd7, 0x27, 0xa5, 0xf8, 0x25, 0xa6, 0xec, - 0x24, 0x06, 0x3a, 0xd9, 0xd5, 0x24, 0xa8, 0xc7, 0x14, 0xac, 0xc2, 0x13, - 0x02, 0x98, 0x07, 0x8c, 0x06, 0xae, 0xe3, 0x05, 0x4b, 0x50, 0x21, 0x8b, - 0xda, 0x01, 0xb2, 0xdf, 0x03, 0xb3, 0xe1, 0x02, 0xb4, 0x0c, 0x62, 0xf5, - 0x0c, 0x75, 0xda, 0x01, 0x5b, 0x6b, 0x1d, 0x6f, 0xda, 0x41, 0xa5, 0x84, - 0x02, 0xaf, 0x92, 0x01, 0x06, 0x70, 0xdc, 0x01, 0xff, 0x0b, 0x35, 0x48, - 0x52, 0x0a, 0x6b, 0x1d, 0x01, 0xff, 0x0b, 0x1c, 0x97, 0x37, 0x09, 0x6d, - 0xbc, 0x06, 0x47, 0xf7, 0xd2, 0x51, 0xd9, 0x41, 0x0b, 0x35, 0x48, 0x17, - 0x0a, 0x6b, 0x1d, 0x01, 0xff, 0x4b, 0xa8, 0x58, 0x4d, 0xd9, 0x01, 0x46, - 0x3b, 0x01, 0x4c, 0xd9, 0x01, 0x46, 0x90, 0x09, 0x4b, 0xd9, 0x41, 0x4b, - 0xa8, 0x58, 0x50, 0xd9, 0x01, 0x46, 0x3b, 0x01, 0x4f, 0xd9, 0x01, 0x46, - 0x90, 0x09, 0x4e, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0x53, 0xd9, 0x01, 0x46, - 0x90, 0x09, 0x52, 0xd9, 0x01, 0x46, 0xc8, 0x1c, 0x54, 0xd9, 0x41, 0x09, - 0x6d, 0xbc, 0x06, 0x47, 0xf7, 0xd2, 0x87, 0xd9, 0x41, 0x0b, 0x35, 0x48, - 0x17, 0x0a, 0x6b, 0x1d, 0x01, 0xff, 0x4b, 0xa8, 0x58, 0x86, 0xd9, 0x01, - 0x46, 0x3b, 0x01, 0x85, 0xd9, 0x01, 0x46, 0x90, 0x09, 0x84, 0xd9, 0x41, - 0x4b, 0xa8, 0x58, 0x83, 0xd9, 0x01, 0x46, 0x3b, 0x01, 0x82, 0xd9, 0x01, - 0x46, 0x90, 0x09, 0x81, 0xd9, 0x41, 0x05, 0xf7, 0xe5, 0x32, 0x04, 0x1a, - 0xef, 0x17, 0x04, 0xb7, 0xe5, 0x01, 0xff, 0x47, 0x71, 0x09, 0x07, 0xd9, - 0x01, 0x48, 0x53, 0x43, 0x06, 0xd9, 0x01, 0x46, 0x90, 0x09, 0x05, 0xd9, - 0x41, 0x53, 0x35, 0x48, 0x74, 0xda, 0x01, 0x0a, 0x6b, 0x1d, 0x01, 0xff, - 0x4b, 0x9d, 0x98, 0x73, 0xda, 0x01, 0x50, 0x0a, 0x66, 0x72, 0xda, 0x41, - 0x07, 0x73, 0x02, 0x29, 0x54, 0x4f, 0x42, 0x5d, 0xda, 0x01, 0x4c, 0x71, - 0x8f, 0x5a, 0xda, 0x01, 0x53, 0xea, 0x49, 0x5e, 0xda, 0x01, 0x50, 0xfa, - 0x65, 0x59, 0xda, 0x01, 0x04, 0xfa, 0x0b, 0x01, 0xff, 0x4c, 0xf1, 0x8a, - 0x5b, 0xda, 0x01, 0x55, 0xa8, 0x3d, 0x5c, 0xda, 0x41, 0x4c, 0xb1, 0x3d, - 0x60, 0xda, 0x01, 0x4c, 0xfa, 0x65, 0x5f, 0xda, 0x41, 0x43, 0x39, 0x25, - 0x61, 0xda, 0x81, 0x17, 0x0b, 0xfc, 0x9d, 0x01, 0xff, 0x44, 0xf9, 0x0a, - 0x2d, 0xda, 0x01, 0x43, 0x13, 0x01, 0x2f, 0xda, 0x01, 0x46, 0x7d, 0x02, - 0x2e, 0xda, 0x41, 0x80, 0x01, 0xff, 0x49, 0x60, 0xb4, 0x67, 0xda, 0x01, - 0x48, 0xa7, 0x5c, 0x62, 0xda, 0x01, 0x03, 0xb6, 0x00, 0x01, 0xff, 0x44, - 0xdf, 0x1a, 0x65, 0xda, 0x81, 0x0d, 0x46, 0x34, 0x66, 0x63, 0xda, 0xc1, - 0x00, 0x49, 0xa6, 0x5c, 0x64, 0xda, 0x41, 0x49, 0xa6, 0x5c, 0x66, 0xda, - 0x41, 0x48, 0x6f, 0x58, 0x89, 0xda, 0x01, 0x08, 0x76, 0x1d, 0x5b, 0x07, - 0x33, 0xd2, 0x27, 0x06, 0xa8, 0xdd, 0x11, 0x07, 0x24, 0xd4, 0x01, 0xff, - 0x47, 0x71, 0x09, 0x15, 0xd9, 0x01, 0x47, 0xeb, 0x07, 0x14, 0xd9, 0x41, - 0x47, 0x71, 0x09, 0x0d, 0xd9, 0x01, 0x48, 0x53, 0x43, 0x0c, 0xd9, 0x01, - 0x46, 0x90, 0x09, 0x0b, 0xd9, 0x41, 0x51, 0xa2, 0x58, 0x20, 0xd9, 0x01, - 0x06, 0xa0, 0x1b, 0x1a, 0xb3, 0x01, 0xff, 0x49, 0xba, 0x6a, 0x1a, 0xd9, - 0x01, 0x05, 0x0d, 0x07, 0x01, 0xff, 0x48, 0x53, 0x43, 0x19, 0xd9, 0x01, - 0x46, 0x90, 0x09, 0x17, 0xd9, 0x41, 0x48, 0x53, 0x43, 0x18, 0xd9, 0x01, - 0x46, 0x90, 0x09, 0x16, 0xd9, 0x41, 0x04, 0x0d, 0x0d, 0x06, 0x52, 0x62, - 0x54, 0x71, 0xda, 0x41, 0x49, 0xb0, 0xbb, 0x6e, 0xda, 0x01, 0x45, 0xe6, - 0xe7, 0x6d, 0xda, 0x41, 0x07, 0xf0, 0x04, 0x17, 0x03, 0x2d, 0x4c, 0x01, - 0xff, 0x47, 0x71, 0x09, 0x13, 0xd9, 0x01, 0x48, 0x53, 0x43, 0x12, 0xd9, - 0x01, 0x46, 0x90, 0x09, 0x11, 0xd9, 0x41, 0x0a, 0xa3, 0x8f, 0x9d, 0x01, - 0x8d, 0x01, 0xff, 0x0b, 0x35, 0x48, 0x4e, 0x0a, 0x6b, 0x1d, 0x01, 0xff, - 0x08, 0xa2, 0x11, 0x30, 0x46, 0x3b, 0x01, 0xa3, 0xd9, 0x81, 0x18, 0x46, - 0x90, 0x09, 0xa2, 0xd9, 0xc1, 0x00, 0x09, 0x92, 0x25, 0x01, 0xff, 0x45, - 0x19, 0xe2, 0xb1, 0xd9, 0x01, 0x4a, 0x3d, 0xa8, 0xaa, 0xd9, 0x41, 0x09, - 0x92, 0x25, 0x01, 0xff, 0x45, 0x19, 0xe2, 0xb2, 0xd9, 0x01, 0x4a, 0x3d, - 0xa8, 0xab, 0xd9, 0x41, 0xe5, 0xa4, 0xd9, 0x01, 0x0c, 0x75, 0x8e, 0x01, - 0xff, 0x45, 0x19, 0xe2, 0xb3, 0xd9, 0x01, 0x4a, 0x3d, 0xa8, 0xac, 0xd9, - 0x41, 0x4b, 0xa8, 0x58, 0xe1, 0xd9, 0x81, 0x30, 0x46, 0x3b, 0x01, 0xe0, - 0xd9, 0x81, 0x18, 0x46, 0x90, 0x09, 0xdf, 0xd9, 0xc1, 0x00, 0x09, 0x92, - 0x25, 0x01, 0xff, 0x47, 0x0a, 0xc2, 0xc3, 0xd9, 0x01, 0x45, 0xd0, 0x23, - 0xd2, 0xd9, 0x41, 0x09, 0x92, 0x25, 0x01, 0xff, 0x47, 0x0a, 0xc2, 0xc4, - 0xd9, 0x01, 0x45, 0xd0, 0x23, 0xd3, 0xd9, 0x41, 0x09, 0x92, 0x25, 0x01, - 0xff, 0x47, 0x0a, 0xc2, 0xc5, 0xd9, 0x01, 0x45, 0xd0, 0x23, 0xd4, 0xd9, - 0x41, 0x91, 0x20, 0xd2, 0xa1, 0xda, 0x01, 0xd3, 0xa2, 0xda, 0x01, 0xd4, - 0xa3, 0xda, 0x01, 0xd5, 0xa4, 0xda, 0x01, 0xd6, 0xa5, 0xda, 0x01, 0xd7, - 0xa6, 0xda, 0x01, 0xd8, 0xa7, 0xda, 0x01, 0xd9, 0xa8, 0xda, 0x41, 0xd0, - 0xa9, 0xda, 0x01, 0xd1, 0xaa, 0xda, 0x01, 0xd2, 0xab, 0xda, 0x01, 0xd3, - 0xac, 0xda, 0x01, 0xd4, 0xad, 0xda, 0x01, 0xd5, 0xae, 0xda, 0x01, 0xd6, - 0xaf, 0xda, 0x41, 0x43, 0x20, 0x14, 0x6a, 0xda, 0x01, 0x04, 0xaa, 0x16, - 0x01, 0xff, 0x47, 0x40, 0xcd, 0x32, 0xda, 0x01, 0x47, 0x8e, 0x8c, 0x31, - 0xda, 0x01, 0xb7, 0x01, 0xff, 0x46, 0xd6, 0xd9, 0x34, 0xda, 0x01, 0x47, - 0xdb, 0xbe, 0x33, 0xda, 0x41, 0x04, 0x01, 0x20, 0xe1, 0x0b, 0x07, 0x6a, - 0xd4, 0x01, 0xff, 0x09, 0x42, 0x25, 0xdd, 0x0a, 0x0b, 0x35, 0x48, 0xd5, - 0x05, 0x06, 0x8e, 0xd9, 0x99, 0x05, 0x0a, 0x6b, 0x1d, 0x01, 0xff, 0x0b, - 0x7d, 0x26, 0xee, 0x04, 0xa2, 0xbe, 0x04, 0xa3, 0x80, 0x03, 0x07, 0x3b, - 0x01, 0xe2, 0x02, 0x08, 0xc8, 0x1a, 0xc7, 0x02, 0x05, 0x17, 0xe4, 0xa0, - 0x02, 0x43, 0x20, 0x98, 0x68, 0xda, 0x01, 0x05, 0x25, 0xe5, 0xec, 0x01, - 0x06, 0x0a, 0xdc, 0xd5, 0x01, 0xb3, 0xa4, 0x01, 0x07, 0xc8, 0x1c, 0x86, - 0x01, 0xb7, 0x17, 0x07, 0x11, 0x33, 0x01, 0xff, 0x45, 0xa0, 0x1b, 0x47, - 0xd9, 0x01, 0x46, 0x19, 0x04, 0x46, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x45, - 0xd9, 0x41, 0x04, 0x8f, 0x22, 0x11, 0x12, 0x8a, 0x53, 0x01, 0xff, 0x46, - 0x3b, 0x01, 0xee, 0xd9, 0x01, 0x46, 0x90, 0x09, 0xed, 0xd9, 0x41, 0x06, - 0x4c, 0x13, 0x27, 0x0e, 0x6c, 0x75, 0x11, 0x08, 0x93, 0x25, 0x01, 0xff, - 0x45, 0x19, 0xe2, 0xb0, 0xd9, 0x01, 0x4a, 0x3d, 0xa8, 0xa9, 0xd9, 0x41, - 0x45, 0xa0, 0x1b, 0xb6, 0xd9, 0x01, 0x46, 0x19, 0x04, 0xb5, 0xd9, 0x01, - 0x45, 0x0c, 0x07, 0xb4, 0xd9, 0x41, 0x07, 0x3b, 0x01, 0x17, 0x07, 0xc8, - 0x1c, 0x01, 0xff, 0x45, 0xa0, 0x1b, 0x9e, 0xd9, 0x01, 0x46, 0x19, 0x04, - 0x9d, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x9c, 0xd9, 0x41, 0x45, 0xa0, 0x1b, - 0x9b, 0xd9, 0x01, 0x46, 0x19, 0x04, 0x9a, 0xd9, 0x01, 0x45, 0x0c, 0x07, - 0x99, 0xd9, 0x41, 0x4b, 0xa8, 0x58, 0x36, 0xd9, 0x81, 0x0c, 0x51, 0x9e, - 0x5c, 0x34, 0xd9, 0x01, 0x4a, 0x57, 0x96, 0x35, 0xd9, 0x41, 0x4b, 0x56, - 0x96, 0x37, 0xd9, 0x41, 0x46, 0x1c, 0x6c, 0xa5, 0xd9, 0x01, 0x06, 0x91, - 0x09, 0x01, 0xff, 0x09, 0xeb, 0x4b, 0x06, 0x4a, 0x57, 0x96, 0x2e, 0xd9, - 0x41, 0x45, 0xa0, 0x1b, 0x2c, 0xd9, 0x81, 0x0c, 0x46, 0x19, 0x04, 0x2b, - 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x2a, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x2d, - 0xd9, 0x41, 0x45, 0xa0, 0x1b, 0x4a, 0xd9, 0x01, 0x46, 0x19, 0x04, 0x49, - 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x48, 0xd9, 0x41, 0x08, 0x93, 0x25, 0x19, - 0x45, 0xa0, 0x1b, 0x97, 0xd9, 0x01, 0x46, 0x19, 0x04, 0x96, 0xd9, 0x01, - 0x45, 0x0c, 0x07, 0x95, 0xd9, 0xc1, 0x00, 0x47, 0x3a, 0x01, 0x98, 0xd9, - 0x41, 0x45, 0x19, 0xe2, 0xaf, 0xd9, 0x01, 0x4a, 0x3d, 0xa8, 0xa8, 0xd9, - 0x41, 0x08, 0x93, 0x25, 0x12, 0x45, 0xa0, 0x1b, 0x94, 0xd9, 0x01, 0x46, - 0x19, 0x04, 0x93, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x92, 0xd9, 0x41, 0x45, - 0x19, 0xe2, 0xae, 0xd9, 0x01, 0x4a, 0x3d, 0xa8, 0xa7, 0xd9, 0x41, 0x07, - 0x8b, 0x42, 0x06, 0x46, 0x41, 0xcd, 0x28, 0xd9, 0x41, 0x46, 0x3b, 0x01, - 0xf2, 0xd9, 0x01, 0x46, 0x90, 0x09, 0xf1, 0xd9, 0x41, 0x4b, 0xa8, 0x58, - 0x31, 0xd9, 0x81, 0x0c, 0x48, 0xeb, 0x4b, 0x2f, 0xd9, 0x01, 0x4a, 0x57, - 0x96, 0x30, 0xd9, 0x41, 0x4b, 0x56, 0x96, 0x32, 0xd9, 0x41, 0x05, 0x68, - 0xa6, 0xa4, 0x01, 0x06, 0xcf, 0x0a, 0x87, 0x01, 0x44, 0x47, 0x10, 0x33, - 0xd9, 0x01, 0x04, 0x4d, 0x13, 0x01, 0xff, 0x80, 0x11, 0x08, 0x6a, 0xc2, - 0x01, 0xff, 0x46, 0x19, 0x04, 0xa1, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0xa0, - 0xd9, 0x41, 0xa8, 0x39, 0x08, 0xd9, 0x02, 0x1c, 0x02, 0x53, 0x00, 0x01, - 0xff, 0x4b, 0x84, 0x99, 0x9f, 0xd9, 0x01, 0x13, 0x40, 0x4b, 0x01, 0xff, - 0x46, 0x19, 0x04, 0x91, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x90, 0xd9, 0x41, - 0x45, 0xa0, 0x1b, 0x8a, 0xd9, 0x81, 0x0c, 0x46, 0x19, 0x04, 0x89, 0xd9, - 0x01, 0x45, 0x0c, 0x07, 0x88, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x8b, 0xd9, - 0x41, 0x0b, 0x20, 0x2c, 0x11, 0x07, 0x94, 0x25, 0x01, 0xff, 0x45, 0x19, - 0xe2, 0xad, 0xd9, 0x01, 0x4a, 0x3d, 0xa8, 0xa6, 0xd9, 0x41, 0x45, 0xa0, - 0x1b, 0x8e, 0xd9, 0x81, 0x0c, 0x46, 0x19, 0x04, 0x8d, 0xd9, 0x01, 0x45, - 0x0c, 0x07, 0x8c, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x8f, 0xd9, 0x41, 0x45, - 0xa0, 0x1b, 0x3d, 0xd9, 0x01, 0x46, 0x19, 0x04, 0x3c, 0xd9, 0x01, 0x48, - 0xf1, 0x5e, 0x3e, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x3b, 0xd9, 0x41, 0x45, - 0xa0, 0x1b, 0x41, 0xd9, 0x01, 0x46, 0x19, 0x04, 0x40, 0xd9, 0x01, 0x45, - 0x0c, 0x07, 0x3f, 0xd9, 0x41, 0x04, 0x15, 0x05, 0x17, 0x03, 0xec, 0x39, - 0x01, 0xff, 0x45, 0xa0, 0x1b, 0x44, 0xd9, 0x01, 0x46, 0x19, 0x04, 0x43, - 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x42, 0xd9, 0x41, 0x45, 0xa0, 0x1b, 0x3a, - 0xd9, 0x01, 0x46, 0x19, 0x04, 0x39, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x38, - 0xd9, 0x41, 0x07, 0x19, 0x04, 0x11, 0x06, 0x0c, 0x07, 0x01, 0xff, 0x46, - 0x3b, 0x01, 0xe5, 0xd9, 0x01, 0x46, 0x90, 0x09, 0xe3, 0xd9, 0x41, 0x46, - 0x3b, 0x01, 0xe6, 0xd9, 0x01, 0x46, 0x90, 0x09, 0xe4, 0xd9, 0x41, 0x4f, - 0xb4, 0x6a, 0x24, 0xd9, 0x01, 0x55, 0x54, 0x3d, 0x27, 0xd9, 0x01, 0x03, - 0x11, 0x15, 0x01, 0xff, 0x05, 0x4f, 0x14, 0x06, 0x4a, 0xb9, 0x6a, 0x23, - 0xd9, 0x41, 0x0c, 0x6d, 0x8a, 0x0c, 0x45, 0xa0, 0x1b, 0x21, 0xd9, 0x01, - 0x45, 0x0c, 0x07, 0x22, 0xd9, 0x41, 0x45, 0xa0, 0x1b, 0x25, 0xd9, 0x01, - 0x45, 0x0c, 0x07, 0x26, 0xd9, 0x41, 0x18, 0x7d, 0x26, 0xcd, 0x04, 0xa2, - 0xad, 0x04, 0xa3, 0xbf, 0x03, 0x07, 0x3b, 0x01, 0xa1, 0x03, 0x08, 0xc8, - 0x1a, 0x86, 0x03, 0x05, 0x17, 0xe4, 0xb0, 0x02, 0x43, 0x20, 0x98, 0x69, - 0xda, 0x01, 0x05, 0x25, 0xe5, 0xd0, 0x01, 0x06, 0x0a, 0xdc, 0xb9, 0x01, - 0xb3, 0x88, 0x01, 0x07, 0xc8, 0x1c, 0x68, 0xb7, 0x17, 0x07, 0x11, 0x33, - 0x01, 0xff, 0x45, 0xa0, 0x1b, 0x7d, 0xd9, 0x01, 0x46, 0x19, 0x04, 0x7c, - 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x7b, 0xd9, 0x41, 0x04, 0x8f, 0x22, 0x11, - 0x19, 0x87, 0x25, 0x01, 0xff, 0x46, 0x3b, 0x01, 0xf0, 0xd9, 0x01, 0x46, - 0x90, 0x09, 0xef, 0xd9, 0x41, 0x08, 0x93, 0x25, 0x15, 0x45, 0xa0, 0x1b, - 0xde, 0xd9, 0x01, 0xb3, 0x01, 0xff, 0x44, 0x0d, 0x07, 0xdd, 0xd9, 0x01, - 0x44, 0xa8, 0x2d, 0xdc, 0xd9, 0x41, 0x08, 0x0a, 0xc2, 0x11, 0x06, 0xd0, - 0x23, 0x01, 0xff, 0x45, 0xa0, 0x1b, 0xd1, 0xd9, 0x01, 0x45, 0x0c, 0x07, - 0xd0, 0xd9, 0x41, 0x45, 0xa0, 0x1b, 0xc2, 0xd9, 0x01, 0x45, 0x0c, 0x07, - 0xc1, 0xd9, 0x41, 0x0c, 0x6d, 0x8a, 0x0c, 0x51, 0x9e, 0x5c, 0x6f, 0xd9, - 0x01, 0x4a, 0x57, 0x96, 0x70, 0xd9, 0x41, 0x48, 0xa7, 0x5c, 0x71, 0xd9, - 0x01, 0x4a, 0x57, 0x96, 0x72, 0xd9, 0x41, 0x4f, 0x1c, 0x6c, 0xe2, 0xd9, - 0x01, 0x06, 0x91, 0x09, 0x01, 0xff, 0x09, 0xeb, 0x4b, 0x06, 0x4a, 0x57, - 0x96, 0x69, 0xd9, 0x41, 0x45, 0xa0, 0x1b, 0x67, 0xd9, 0x81, 0x0c, 0x46, - 0x19, 0x04, 0x66, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x65, 0xd9, 0x41, 0x42, - 0x60, 0x01, 0x68, 0xd9, 0x41, 0x45, 0xa0, 0x1b, 0x80, 0xd9, 0x01, 0x46, - 0x19, 0x04, 0x7f, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x7e, 0xd9, 0x41, 0x08, - 0x93, 0x25, 0x06, 0x45, 0x0c, 0x07, 0xdb, 0xd9, 0x41, 0x08, 0x0a, 0xc2, - 0x26, 0x06, 0xd0, 0x23, 0x01, 0xff, 0x06, 0xa0, 0x1b, 0x11, 0x06, 0x0c, - 0x07, 0x01, 0xff, 0x46, 0x3b, 0x01, 0xce, 0xd9, 0x01, 0x46, 0x90, 0x09, - 0xcc, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xcf, 0xd9, 0x01, 0x46, 0x90, 0x09, - 0xcd, 0xd9, 0x41, 0x06, 0xa0, 0x1b, 0x11, 0x06, 0x0c, 0x07, 0x01, 0xff, - 0x46, 0x3b, 0x01, 0xbf, 0xd9, 0x01, 0x46, 0x90, 0x09, 0xbd, 0xd9, 0x41, - 0x46, 0x3b, 0x01, 0xc0, 0xd9, 0x01, 0x46, 0x90, 0x09, 0xbe, 0xd9, 0x41, - 0x08, 0x93, 0x25, 0x06, 0x45, 0x0c, 0x07, 0xda, 0xd9, 0x41, 0x08, 0x0a, - 0xc2, 0x22, 0x06, 0xd0, 0x23, 0x01, 0xff, 0x4c, 0x11, 0x8f, 0xc9, 0xd9, - 0x01, 0x4c, 0x79, 0x93, 0xc8, 0xd9, 0x01, 0x07, 0xc8, 0x1c, 0x01, 0xff, - 0x4c, 0x1d, 0x8f, 0xcb, 0xd9, 0x01, 0x4c, 0x85, 0x93, 0xca, 0xd9, 0x41, - 0x06, 0xa0, 0x1b, 0x11, 0x06, 0x0c, 0x07, 0x01, 0xff, 0x46, 0x3b, 0x01, - 0xb9, 0xd9, 0x01, 0x46, 0xc8, 0x1c, 0xbb, 0xd9, 0x41, 0x46, 0x3b, 0x01, - 0xba, 0xd9, 0x01, 0x46, 0xc8, 0x1c, 0xbc, 0xd9, 0x41, 0x14, 0x8b, 0x42, - 0x06, 0x46, 0x41, 0xcd, 0x29, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xf4, 0xd9, - 0x01, 0x46, 0x90, 0x09, 0xf3, 0xd9, 0x41, 0x4b, 0xa8, 0x58, 0x6c, 0xd9, - 0x81, 0x0c, 0x48, 0xeb, 0x4b, 0x6a, 0xd9, 0x01, 0x4a, 0x57, 0x96, 0x6b, - 0xd9, 0x41, 0x4b, 0x56, 0x96, 0x6d, 0xd9, 0x41, 0x44, 0x1f, 0x14, 0x77, - 0xd9, 0x01, 0x06, 0xcf, 0x0a, 0x4f, 0x44, 0x47, 0x10, 0x6e, 0xd9, 0x01, - 0x05, 0x4d, 0x13, 0x01, 0xff, 0x48, 0x3a, 0xc2, 0xd9, 0xd9, 0x01, 0x08, - 0x93, 0x25, 0x19, 0x45, 0xa0, 0x1b, 0xd7, 0xd9, 0x81, 0x0c, 0x46, 0x19, - 0x04, 0xd6, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0xd5, 0xd9, 0x41, 0x42, 0x60, - 0x01, 0xd8, 0xd9, 0x41, 0x08, 0x0a, 0xc2, 0x11, 0x06, 0xd0, 0x23, 0x01, - 0xff, 0x45, 0xa0, 0x1b, 0xc7, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0xc6, 0xd9, - 0x41, 0x45, 0xa0, 0x1b, 0xb8, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0xb7, 0xd9, - 0x41, 0x45, 0xa0, 0x1b, 0x76, 0xd9, 0x01, 0x46, 0x19, 0x04, 0x75, 0xd9, - 0x01, 0x45, 0x0c, 0x07, 0x74, 0xd9, 0x41, 0x43, 0x15, 0x05, 0x73, 0xd9, - 0x01, 0x03, 0xec, 0x39, 0x01, 0xff, 0x45, 0xa0, 0x1b, 0x7a, 0xd9, 0x01, - 0x46, 0x19, 0x04, 0x79, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x78, 0xd9, 0x41, - 0x06, 0xa0, 0x1b, 0x21, 0x07, 0x19, 0x04, 0x11, 0x06, 0x0c, 0x07, 0x01, - 0xff, 0x46, 0x3b, 0x01, 0xea, 0xd9, 0x01, 0x46, 0x90, 0x09, 0xe7, 0xd9, - 0x41, 0x46, 0x3b, 0x01, 0xeb, 0xd9, 0x01, 0x46, 0x90, 0x09, 0xe8, 0xd9, - 0x41, 0x46, 0x3b, 0x01, 0xec, 0xd9, 0x01, 0x46, 0x90, 0x09, 0xe9, 0xd9, - 0x41, 0x05, 0x7e, 0xe1, 0x5d, 0x08, 0x71, 0x09, 0x1e, 0x08, 0xfa, 0xc8, - 0x01, 0xff, 0x45, 0xa0, 0x1b, 0x5b, 0xd9, 0x81, 0x0c, 0x46, 0x19, 0x04, - 0x5a, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x59, 0xd9, 0x41, 0x42, 0x60, 0x01, - 0x5c, 0xd9, 0x41, 0x05, 0x7e, 0xe1, 0x1e, 0x08, 0xfa, 0xc8, 0x01, 0xff, - 0x45, 0xa0, 0x1b, 0x63, 0xd9, 0x81, 0x0c, 0x46, 0x19, 0x04, 0x62, 0xd9, - 0x01, 0x45, 0x0c, 0x07, 0x61, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x64, 0xd9, - 0x41, 0x45, 0xa0, 0x1b, 0x5f, 0xd9, 0x81, 0x0c, 0x46, 0x19, 0x04, 0x5e, - 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x5d, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x60, - 0xd9, 0x41, 0x45, 0xa0, 0x1b, 0x57, 0xd9, 0x81, 0x0c, 0x46, 0x19, 0x04, - 0x56, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x55, 0xd9, 0x41, 0x42, 0x60, 0x01, - 0x58, 0xd9, 0x41, 0xa3, 0xac, 0x01, 0x45, 0x7d, 0x81, 0x41, 0xda, 0x81, - 0x95, 0x01, 0x44, 0x30, 0x72, 0x4d, 0xda, 0x81, 0x7f, 0x05, 0xcb, 0x04, - 0x3d, 0x45, 0xe7, 0xbe, 0x3e, 0xda, 0x81, 0x27, 0x45, 0x13, 0xe8, 0x50, - 0xda, 0x81, 0x11, 0x09, 0xda, 0xbe, 0x01, 0xff, 0x46, 0x3b, 0x01, 0x58, - 0xda, 0x01, 0x46, 0x90, 0x09, 0x57, 0xda, 0x41, 0x80, 0x01, 0xff, 0x47, - 0xa7, 0x30, 0x51, 0xda, 0x01, 0x46, 0x24, 0xdd, 0x52, 0xda, 0x41, 0x80, - 0x01, 0xff, 0x44, 0xcb, 0x04, 0x40, 0xda, 0x01, 0x48, 0xda, 0xc9, 0x3f, - 0xda, 0x41, 0x46, 0xe7, 0x02, 0x44, 0xda, 0x01, 0x47, 0xa7, 0x30, 0x45, - 0xda, 0x01, 0x44, 0x64, 0x45, 0x47, 0xda, 0x81, 0x1c, 0x49, 0x3a, 0x46, - 0x4a, 0xda, 0x81, 0x06, 0x48, 0xda, 0xc9, 0x46, 0xda, 0x41, 0x80, 0x01, - 0xff, 0x48, 0xda, 0xc9, 0x4b, 0xda, 0x01, 0x44, 0xea, 0xef, 0x4c, 0xda, - 0x41, 0x80, 0x01, 0xff, 0x48, 0xda, 0xc9, 0x48, 0xda, 0x01, 0x44, 0xea, - 0xef, 0x49, 0xda, 0x41, 0x80, 0x01, 0xff, 0x47, 0xa7, 0x30, 0x4e, 0xda, - 0x01, 0x48, 0xda, 0xc9, 0x4f, 0xda, 0x41, 0x80, 0x01, 0xff, 0x44, 0xcb, - 0x04, 0x43, 0xda, 0x01, 0x48, 0xda, 0xc9, 0x42, 0xda, 0x41, 0x06, 0xd9, - 0x1a, 0x06, 0x46, 0xbc, 0x18, 0x56, 0xda, 0x41, 0x47, 0x40, 0xcd, 0x3d, - 0xda, 0x01, 0x47, 0xa7, 0x30, 0x3c, 0xda, 0x01, 0x47, 0x8e, 0x8c, 0x3b, - 0xda, 0x41, 0xa9, 0x3e, 0x07, 0x79, 0x83, 0x01, 0xff, 0x80, 0x0f, 0x8d, - 0x01, 0xff, 0x50, 0xca, 0x61, 0x80, 0xda, 0x01, 0x4f, 0x24, 0x73, 0x7f, - 0xda, 0x41, 0x45, 0x7d, 0xe2, 0x83, 0xda, 0x01, 0x02, 0xb0, 0x01, 0x12, - 0x4c, 0x7d, 0x8f, 0x86, 0xda, 0x01, 0x45, 0x45, 0xe8, 0x85, 0xda, 0x01, - 0x45, 0xe0, 0x4e, 0x82, 0xda, 0x41, 0x47, 0xc6, 0xcb, 0x84, 0xda, 0x01, - 0x44, 0xc9, 0x00, 0x81, 0xda, 0x41, 0x03, 0x49, 0x13, 0x17, 0xb0, 0x01, - 0xff, 0x80, 0x06, 0x52, 0xc0, 0x53, 0x53, 0xda, 0x41, 0x50, 0x5a, 0x63, - 0x54, 0xda, 0x01, 0x50, 0xca, 0x66, 0x55, 0xda, 0x41, 0x4b, 0x24, 0x98, - 0x76, 0xda, 0x01, 0x07, 0xfc, 0xcf, 0x01, 0xff, 0xd1, 0x77, 0xda, 0x01, - 0xd2, 0x78, 0xda, 0x01, 0xd3, 0x79, 0xda, 0x01, 0xd4, 0x7a, 0xda, 0x01, - 0xd5, 0x7b, 0xda, 0x01, 0xd6, 0x7c, 0xda, 0x01, 0xd7, 0x7d, 0xda, 0x41, - 0xa1, 0x44, 0x43, 0xe7, 0x01, 0xff, 0xd9, 0xc1, 0x00, 0x80, 0x01, 0xff, - 0x08, 0xa7, 0x5c, 0x06, 0x43, 0x64, 0x1a, 0x00, 0xda, 0x41, 0x47, 0xe6, - 0x02, 0x06, 0xda, 0x01, 0x8d, 0x01, 0xff, 0x0b, 0x35, 0x48, 0x17, 0x0a, - 0x6b, 0x1d, 0x01, 0xff, 0x45, 0x4c, 0x13, 0x04, 0xda, 0x01, 0x48, 0xeb, - 0x4b, 0x01, 0xda, 0x01, 0x44, 0x2e, 0x05, 0x02, 0xda, 0x41, 0x45, 0x4c, - 0x13, 0x05, 0xda, 0x01, 0x48, 0xeb, 0x4b, 0x03, 0xda, 0x41, 0x42, 0x46, - 0x00, 0x6b, 0xda, 0x01, 0x03, 0x70, 0x18, 0x01, 0xff, 0x45, 0x04, 0x02, - 0x85, 0xd8, 0x81, 0xad, 0x0e, 0xa3, 0xe0, 0x0b, 0xa6, 0xee, 0x02, 0xa8, - 0x39, 0x44, 0x64, 0x45, 0x77, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x53, - 0x22, 0x48, 0x56, 0xd8, 0x01, 0x45, 0x40, 0x13, 0x03, 0xd8, 0x01, 0x49, - 0x1f, 0xb9, 0x95, 0xd8, 0x01, 0x48, 0x32, 0xc6, 0x79, 0xd8, 0x01, 0x4b, - 0x3d, 0x18, 0xb2, 0xd8, 0x01, 0x06, 0x46, 0x13, 0x01, 0xff, 0x47, 0xa7, - 0x30, 0x7a, 0xd8, 0x01, 0x44, 0x45, 0x0a, 0x78, 0xd8, 0x41, 0x44, 0x8a, - 0x09, 0x7d, 0xd8, 0x81, 0x4c, 0x43, 0x5e, 0x0e, 0x6b, 0xd8, 0xc1, 0x00, - 0x80, 0x01, 0xff, 0x48, 0x52, 0xc2, 0x6a, 0xd8, 0x01, 0x12, 0x27, 0x42, - 0x26, 0x07, 0x7d, 0x02, 0x06, 0x4a, 0x19, 0xae, 0xb9, 0xd8, 0x41, 0x55, - 0x3d, 0x18, 0xda, 0xd8, 0x81, 0x06, 0x45, 0x46, 0x13, 0xca, 0xd8, 0x41, - 0x80, 0x01, 0xff, 0x42, 0x9e, 0x01, 0xd9, 0xd8, 0x01, 0x43, 0xfd, 0x07, - 0xd8, 0xd8, 0x41, 0x42, 0x9e, 0x01, 0xbe, 0xd8, 0x01, 0x43, 0xfd, 0x07, - 0xbd, 0xd8, 0x01, 0x45, 0x4c, 0x1a, 0xbf, 0xd8, 0x41, 0x80, 0x01, 0xff, - 0xa6, 0xce, 0x01, 0x45, 0x40, 0x13, 0x04, 0xd8, 0x81, 0x7c, 0x46, 0x42, - 0x18, 0x8a, 0xd8, 0x81, 0x5f, 0x46, 0x7d, 0x02, 0xc5, 0xd8, 0x81, 0x52, - 0x48, 0x32, 0xc6, 0x82, 0xd8, 0x01, 0x44, 0xcb, 0x04, 0x7b, 0xd8, 0x81, - 0x2b, 0x44, 0xf7, 0x07, 0xa7, 0xd8, 0x81, 0x1e, 0x45, 0x0c, 0x07, 0x7e, - 0xd8, 0x01, 0x06, 0x46, 0x13, 0x01, 0xff, 0x53, 0x3e, 0x47, 0x84, 0xd8, - 0x01, 0x44, 0x45, 0x0a, 0x80, 0xd8, 0xc1, 0x00, 0x4f, 0x5c, 0x68, 0x83, - 0xd8, 0x41, 0x5d, 0x4e, 0x14, 0xac, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x48, - 0x32, 0xc6, 0x81, 0xd8, 0x01, 0x06, 0x46, 0x13, 0x01, 0xff, 0x47, 0xa7, - 0x30, 0x7c, 0xd8, 0x01, 0x44, 0x45, 0x0a, 0x7f, 0xd8, 0x41, 0x4c, 0x3c, - 0x18, 0xd1, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x45, 0x40, 0x13, 0xa2, 0xd8, - 0x81, 0x06, 0x45, 0x46, 0x13, 0x9b, 0xd8, 0x41, 0x46, 0x45, 0x13, 0x9d, - 0xd8, 0x41, 0x80, 0x01, 0xff, 0x46, 0xa4, 0x66, 0xdb, 0xd8, 0x01, 0x07, - 0x7d, 0x02, 0x2b, 0x4b, 0x3d, 0x18, 0xc1, 0xd8, 0x01, 0x45, 0x46, 0x13, - 0xf0, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x45, 0xa0, 0x1b, 0xef, 0xd8, - 0x01, 0x44, 0xcb, 0x04, 0xee, 0xd8, 0x01, 0xb3, 0x01, 0xff, 0x43, 0x03, - 0x00, 0xdd, 0xd8, 0x01, 0x44, 0x0d, 0x07, 0xf1, 0xd8, 0x41, 0x46, 0x42, - 0x18, 0xa6, 0xd8, 0x01, 0x44, 0xf7, 0x07, 0x88, 0xd8, 0xc1, 0x00, 0x4a, - 0x48, 0x18, 0x8d, 0xd8, 0x41, 0x57, 0x6f, 0x2e, 0x55, 0xd8, 0x01, 0x55, - 0xe4, 0x1a, 0x4b, 0xd8, 0x41, 0x43, 0xa3, 0x23, 0x03, 0xd9, 0x81, 0xc8, - 0x01, 0x43, 0xd9, 0x01, 0x5a, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x54, - 0xcf, 0x3f, 0x5b, 0xd8, 0x01, 0xa6, 0x61, 0x44, 0xdd, 0x12, 0x5c, 0xd8, - 0x81, 0x3b, 0x06, 0x69, 0xd5, 0x17, 0x06, 0x46, 0x13, 0x01, 0xff, 0x44, - 0xfa, 0x1a, 0x5f, 0xd8, 0x01, 0x47, 0xa7, 0x30, 0x60, 0xd8, 0x01, 0x44, - 0x45, 0x0a, 0x5d, 0xd8, 0x41, 0x46, 0x73, 0x02, 0x62, 0xd8, 0x81, 0x0c, - 0x50, 0x7a, 0x62, 0x61, 0xd8, 0x01, 0x46, 0x42, 0x18, 0x65, 0xd8, 0x41, - 0x4b, 0x39, 0x4e, 0x63, 0xd8, 0xc1, 0x00, 0x45, 0xf9, 0x1a, 0x64, 0xd8, - 0x41, 0x80, 0x01, 0xff, 0x53, 0x22, 0x48, 0x4d, 0xd8, 0x81, 0x06, 0x4a, - 0x3a, 0x4e, 0x5e, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x44, 0xfa, 0x1a, 0x51, - 0xd8, 0x01, 0x49, 0xbb, 0xb6, 0x4f, 0xd8, 0x41, 0x52, 0x6f, 0x2e, 0x4c, - 0xd8, 0x81, 0x23, 0x4b, 0xe4, 0x1a, 0x44, 0xd8, 0xc1, 0x00, 0x80, 0x01, - 0xff, 0x44, 0xfa, 0x1a, 0x45, 0xd8, 0x01, 0x49, 0x49, 0x18, 0x47, 0xd8, - 0x81, 0x06, 0x46, 0xa4, 0x66, 0x46, 0xd8, 0x41, 0x46, 0x68, 0xd5, 0x48, - 0xd8, 0x41, 0x80, 0x01, 0xff, 0x44, 0xfa, 0x1a, 0x50, 0xd8, 0x01, 0x49, - 0xbb, 0xb6, 0x4e, 0xd8, 0x01, 0x46, 0xa4, 0x66, 0x57, 0xd8, 0x81, 0x06, - 0x4d, 0xa1, 0x30, 0x52, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x48, 0x32, 0xc6, - 0x59, 0xd8, 0x01, 0x4a, 0x3a, 0x4e, 0x58, 0xd8, 0x41, 0x80, 0x01, 0xff, - 0x5b, 0xe3, 0x1a, 0x4a, 0xd8, 0x01, 0x44, 0xdd, 0x12, 0x04, 0xd9, 0x01, - 0x45, 0x40, 0x13, 0x00, 0xd8, 0x81, 0x85, 0x03, 0x07, 0x42, 0x18, 0xb2, - 0x02, 0x07, 0x7d, 0x02, 0xbd, 0x01, 0x05, 0xf7, 0x07, 0x7f, 0x45, 0x46, - 0x13, 0xf5, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x08, 0x71, 0x09, 0x58, - 0x47, 0xa7, 0x30, 0xfa, 0xd8, 0x01, 0x44, 0xdd, 0x12, 0xf6, 0xd8, 0x01, - 0x05, 0x16, 0x02, 0x3c, 0x05, 0x45, 0x0a, 0x26, 0x06, 0xc3, 0x24, 0x01, - 0xff, 0x4c, 0xe3, 0x1a, 0x01, 0xd9, 0x01, 0x4a, 0x7d, 0xa9, 0x08, 0xd8, - 0x01, 0x49, 0x1f, 0xb9, 0x93, 0xd8, 0x01, 0xb4, 0x01, 0xff, 0x4c, 0x09, - 0x8e, 0x00, 0xd9, 0x01, 0x4a, 0xba, 0xa1, 0xfe, 0xd8, 0x41, 0x44, 0xfa, - 0x1a, 0xf9, 0xd8, 0x01, 0x49, 0x49, 0x18, 0xf8, 0xd8, 0x01, 0x48, 0x42, - 0x25, 0xf7, 0xd8, 0x41, 0x54, 0x73, 0x41, 0x02, 0xd9, 0x01, 0x4b, 0xb9, - 0xa1, 0xff, 0xd8, 0x41, 0x4c, 0x51, 0x8e, 0xfb, 0xd8, 0x81, 0x0c, 0x4b, - 0x36, 0x18, 0xfc, 0xd8, 0x01, 0x4b, 0x3d, 0x18, 0xfd, 0xd8, 0x41, 0x49, - 0x44, 0x68, 0x2c, 0xd8, 0x41, 0x44, 0xa5, 0x01, 0xab, 0xd8, 0x01, 0x45, - 0x40, 0x13, 0xb7, 0xd8, 0x01, 0x46, 0x42, 0x18, 0xb0, 0xd8, 0x01, 0x46, - 0x7d, 0x02, 0xb4, 0xd8, 0x81, 0x12, 0x4e, 0x78, 0x41, 0xaf, 0xd8, 0x01, - 0x45, 0x46, 0x13, 0xb8, 0xd8, 0x01, 0x42, 0x50, 0x02, 0xae, 0xd8, 0x41, - 0x80, 0x01, 0xff, 0x49, 0x49, 0x18, 0xb5, 0xd8, 0x01, 0x4f, 0x78, 0x41, - 0xb6, 0xd8, 0x41, 0x4f, 0xa6, 0x69, 0x1c, 0xd8, 0x01, 0x44, 0xa5, 0x01, - 0xc4, 0xd8, 0x01, 0x46, 0x42, 0x18, 0xcc, 0xd8, 0x01, 0xb2, 0x50, 0x06, - 0x46, 0x13, 0x0d, 0x42, 0x50, 0x02, 0xc6, 0xd8, 0xc1, 0x00, 0x4b, 0x39, - 0x4e, 0xc9, 0xd8, 0x41, 0x07, 0x1a, 0xcc, 0x24, 0xa3, 0x0c, 0x4f, 0x58, - 0x6c, 0x30, 0xd8, 0x01, 0x46, 0x42, 0x18, 0xcb, 0xd8, 0x41, 0x0d, 0xcf, - 0x82, 0x06, 0x4e, 0xb2, 0x7c, 0x36, 0xd8, 0x41, 0x46, 0xa4, 0x66, 0x39, - 0xd8, 0x01, 0x42, 0x50, 0x02, 0x38, 0xd8, 0x41, 0x48, 0x5f, 0x6c, 0x42, - 0xd8, 0x01, 0x0a, 0xf7, 0xac, 0x01, 0xff, 0x47, 0x85, 0x1e, 0x41, 0xd8, - 0x01, 0x42, 0x50, 0x02, 0x40, 0xd8, 0x41, 0x4d, 0x79, 0x41, 0xc8, 0xd8, - 0x01, 0x4a, 0x3e, 0x18, 0xcd, 0xd8, 0x41, 0x44, 0xfa, 0x1a, 0x98, 0xd8, - 0x01, 0x44, 0xa5, 0x01, 0x8e, 0xd8, 0x81, 0x27, 0x45, 0x40, 0x13, 0xa0, - 0xd8, 0x81, 0x1a, 0x4e, 0x78, 0x41, 0x97, 0xd8, 0x01, 0xb4, 0x06, 0x42, - 0x50, 0x02, 0x92, 0xd8, 0x41, 0x44, 0x47, 0x13, 0x9a, 0xd8, 0x01, 0x4c, - 0xc9, 0x91, 0x99, 0xd8, 0x41, 0x46, 0x45, 0x13, 0x9c, 0xd8, 0x41, 0x80, - 0x01, 0xff, 0x4e, 0x5c, 0x79, 0x91, 0xd8, 0x01, 0x07, 0x87, 0xd2, 0x01, - 0xff, 0x46, 0x6f, 0x40, 0x90, 0xd8, 0x01, 0x48, 0xeb, 0x4b, 0x8f, 0xd8, - 0x41, 0x80, 0x01, 0xff, 0x44, 0xfa, 0x1a, 0x06, 0xd8, 0x81, 0xf2, 0x03, - 0x46, 0xe4, 0xd7, 0x0a, 0xd8, 0x01, 0x46, 0xa4, 0x66, 0x0b, 0xd8, 0x81, - 0xce, 0x03, 0x46, 0x7d, 0x02, 0x0e, 0xd8, 0x81, 0xcd, 0x01, 0xb2, 0xbe, - 0x01, 0x06, 0x46, 0x13, 0x18, 0x50, 0x9a, 0x66, 0x13, 0xd8, 0xc1, 0x00, - 0x07, 0x45, 0x13, 0x01, 0xff, 0x49, 0x49, 0x18, 0x25, 0xd8, 0x01, 0x44, - 0x45, 0x0a, 0x24, 0xd8, 0x41, 0x07, 0x1a, 0xcc, 0x91, 0x01, 0xa3, 0x5f, - 0x0e, 0x84, 0x76, 0x4f, 0x44, 0x5d, 0x0e, 0xe6, 0xd8, 0x81, 0x37, 0x44, - 0x45, 0x0a, 0xdc, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x49, 0x84, 0xb4, - 0xe2, 0xd8, 0x01, 0x06, 0x40, 0x13, 0x17, 0x06, 0x46, 0x13, 0x01, 0xff, - 0x44, 0xfa, 0x1a, 0xe0, 0xd8, 0x01, 0x49, 0x49, 0x18, 0xdf, 0xd8, 0x01, - 0x48, 0x42, 0x25, 0xde, 0xd8, 0x41, 0x44, 0xfa, 0x1a, 0xe1, 0xd8, 0x01, - 0x45, 0xa4, 0x66, 0xe3, 0xd8, 0x41, 0x0a, 0xea, 0x79, 0x01, 0xff, 0x46, - 0xa4, 0x66, 0x43, 0xd8, 0x01, 0x42, 0x50, 0x02, 0x31, 0xd8, 0x41, 0x44, - 0xfa, 0x1a, 0xe5, 0xd8, 0x01, 0x48, 0xeb, 0x4b, 0xe4, 0xd8, 0x41, 0x45, - 0xe8, 0x02, 0xeb, 0xd8, 0x81, 0x23, 0xb5, 0x01, 0xff, 0x4e, 0xe8, 0x79, - 0x37, 0xd8, 0x01, 0xb2, 0x01, 0xff, 0x45, 0x55, 0xc2, 0xe7, 0xd8, 0x01, - 0x09, 0x4f, 0x13, 0x01, 0xff, 0x46, 0x58, 0x13, 0xe8, 0xd8, 0x01, 0x45, - 0x4c, 0x1a, 0xea, 0xd8, 0x41, 0x4b, 0xeb, 0x79, 0x3c, 0xd8, 0x41, 0x4c, - 0x45, 0x8e, 0x3b, 0xd8, 0x01, 0x4d, 0x8d, 0x85, 0x3a, 0xd8, 0x41, 0x4d, - 0x79, 0x41, 0x09, 0xd8, 0x01, 0x4a, 0x3e, 0x18, 0xba, 0xd8, 0x41, 0x80, - 0x01, 0xff, 0x44, 0xfa, 0x1a, 0x10, 0xd8, 0x81, 0xe8, 0x01, 0xa3, 0x7d, - 0x46, 0xa4, 0x66, 0x12, 0xd8, 0x81, 0x70, 0x46, 0x42, 0x18, 0xa4, 0xd8, - 0x01, 0xb2, 0x4c, 0x53, 0xeb, 0x4b, 0x20, 0xd8, 0x01, 0x45, 0x46, 0x13, - 0x1e, 0xd8, 0x81, 0x06, 0x57, 0x97, 0x30, 0x27, 0xd8, 0x41, 0x80, 0x01, - 0xff, 0x46, 0xe0, 0x0b, 0x3f, 0xd8, 0x81, 0x29, 0x44, 0xfa, 0x1a, 0x22, - 0xd8, 0x01, 0xa3, 0x0f, 0xa8, 0x01, 0xff, 0x45, 0xa5, 0x66, 0x2b, 0xd8, - 0x01, 0x45, 0x59, 0x6c, 0x2a, 0xd8, 0x41, 0x46, 0xda, 0x14, 0x29, 0xd8, - 0x01, 0x4f, 0xaf, 0x6f, 0x3d, 0xd8, 0x01, 0x45, 0xb2, 0x7c, 0x28, 0xd8, - 0x41, 0x44, 0xc8, 0x10, 0x3e, 0xd8, 0x41, 0x4e, 0x79, 0x41, 0x11, 0xd8, - 0x01, 0x43, 0xa1, 0x01, 0x86, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x44, - 0xfa, 0x1a, 0x8b, 0xd8, 0x01, 0x49, 0x49, 0x18, 0x8c, 0xd8, 0x41, 0x52, - 0x32, 0x4e, 0x23, 0xd8, 0x41, 0x48, 0x4a, 0x18, 0x15, 0xd8, 0x81, 0x18, - 0x04, 0x47, 0x10, 0x01, 0xff, 0x47, 0x41, 0x18, 0xa9, 0xd8, 0x01, 0x42, - 0x05, 0x00, 0x1a, 0xd8, 0xc1, 0x00, 0x4b, 0x39, 0x4e, 0x33, 0xd8, 0x41, - 0x80, 0x01, 0xff, 0x46, 0xe4, 0xd7, 0x18, 0xd8, 0x81, 0x3a, 0x46, 0xa4, - 0x66, 0x19, 0xd8, 0x81, 0x2d, 0x4a, 0x7d, 0xa9, 0x16, 0xd8, 0x01, 0x4b, - 0x62, 0x9d, 0x17, 0xd8, 0x01, 0x06, 0x46, 0x13, 0x01, 0xff, 0x47, 0xa7, - 0x30, 0x34, 0xd8, 0x01, 0x44, 0x45, 0x0a, 0x2d, 0xd8, 0xc1, 0x00, 0x80, - 0x01, 0xff, 0x44, 0xfa, 0x1a, 0x2f, 0xd8, 0x01, 0x49, 0x49, 0x18, 0x2e, - 0xd8, 0x41, 0x4b, 0x39, 0x4e, 0x32, 0xd8, 0x41, 0x4e, 0xa0, 0x30, 0x35, - 0xd8, 0x41, 0x4f, 0x3e, 0x68, 0x21, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x43, - 0x13, 0x01, 0x0c, 0xd8, 0x01, 0x49, 0xed, 0x79, 0x14, 0xd8, 0xc1, 0x00, - 0x4b, 0x39, 0x4e, 0x26, 0xd8, 0x41, 0x4c, 0xa1, 0x89, 0x1d, 0xd8, 0x41, - 0x45, 0xe8, 0x02, 0x76, 0xd8, 0x81, 0xca, 0x01, 0x43, 0xa3, 0xd1, 0x66, - 0xd8, 0x81, 0x8f, 0x01, 0xb5, 0x01, 0xff, 0xf0, 0x6d, 0xd8, 0x81, 0x1c, - 0x46, 0x54, 0xc2, 0x75, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x54, 0x27, - 0x42, 0xbc, 0xd8, 0x01, 0x55, 0x19, 0x3c, 0xcf, 0xd8, 0x01, 0x44, 0xcb, - 0x04, 0x74, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x53, 0x22, 0x48, 0x53, 0xd8, - 0x81, 0x5b, 0x45, 0x40, 0x13, 0x02, 0xd8, 0x81, 0x3e, 0x52, 0x36, 0x18, - 0xd0, 0xd8, 0x01, 0x48, 0x32, 0xc6, 0x71, 0xd8, 0x01, 0x44, 0xcb, 0x04, - 0x6c, 0xd8, 0x81, 0x11, 0x06, 0x46, 0x13, 0x01, 0xff, 0x47, 0xa7, 0x30, - 0x73, 0xd8, 0x01, 0x44, 0x45, 0x0a, 0x6f, 0xd8, 0x41, 0x80, 0x01, 0xff, - 0x48, 0x32, 0xc6, 0x70, 0xd8, 0x01, 0x06, 0x46, 0x13, 0x01, 0xff, 0x47, - 0xa7, 0x30, 0x72, 0xd8, 0x01, 0x44, 0x45, 0x0a, 0x6e, 0xd8, 0x41, 0x80, - 0x01, 0xff, 0x4b, 0x3d, 0x18, 0xc0, 0xd8, 0x01, 0x45, 0x46, 0x13, 0xec, - 0xd8, 0xc1, 0x00, 0x45, 0xca, 0x04, 0xed, 0xd8, 0x41, 0x45, 0xca, 0x04, - 0x54, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x56, 0xe3, 0x1a, 0x49, 0xd8, 0x01, - 0x5e, 0x40, 0x13, 0xe9, 0xd8, 0x01, 0x5c, 0x36, 0x18, 0xd6, 0xd8, 0x81, - 0x17, 0x48, 0x32, 0xc6, 0x68, 0xd8, 0x01, 0x06, 0x46, 0x13, 0x01, 0xff, - 0x47, 0xa7, 0x30, 0x69, 0xd8, 0x01, 0x44, 0x45, 0x0a, 0x67, 0xd8, 0x41, - 0x45, 0x5b, 0x3d, 0xd7, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x45, 0x40, 0x13, - 0x01, 0xd8, 0x81, 0x2d, 0x07, 0x42, 0x18, 0x1d, 0x07, 0x7d, 0x02, 0x06, - 0x4b, 0x3d, 0x18, 0xb1, 0xd8, 0x41, 0x4b, 0x3d, 0x18, 0xce, 0xd8, 0x81, - 0x06, 0x42, 0x50, 0x02, 0xc7, 0xd8, 0x41, 0x45, 0xf9, 0x1a, 0xd5, 0xd8, - 0x41, 0x45, 0x40, 0x13, 0xa1, 0xd8, 0x01, 0x42, 0x50, 0x02, 0x94, 0xd8, - 0x41, 0x80, 0x01, 0xff, 0x44, 0xfa, 0x1a, 0x07, 0xd8, 0x01, 0x45, 0xa4, - 0x66, 0x0d, 0xd8, 0x01, 0x46, 0x7d, 0x02, 0x0f, 0xd8, 0x81, 0x06, 0x4b, - 0x3d, 0x18, 0xbb, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x05, 0x46, 0x10, 0x12, - 0x46, 0x42, 0x18, 0xa5, 0xd8, 0x01, 0x44, 0xf7, 0x07, 0x87, 0xd8, 0x01, - 0x45, 0x46, 0x13, 0x1f, 0xd8, 0x41, 0x47, 0x41, 0x18, 0xaa, 0xd8, 0x01, - 0x42, 0x05, 0x00, 0x1b, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x45, 0x40, 0x13, - 0x05, 0xd8, 0x81, 0x45, 0x07, 0x42, 0x18, 0x27, 0x52, 0x36, 0x18, 0xd4, - 0xd8, 0x81, 0x11, 0x05, 0xf7, 0x07, 0x01, 0xff, 0x5d, 0x19, 0x15, 0xad, - 0xd8, 0x01, 0x46, 0x42, 0x18, 0xb3, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x42, - 0x9e, 0x01, 0xd3, 0xd8, 0x01, 0x43, 0xfd, 0x07, 0xd2, 0xd8, 0x41, 0x45, - 0x40, 0x13, 0xa3, 0xd8, 0x81, 0x06, 0x42, 0x50, 0x02, 0x96, 0xd8, 0x41, - 0x52, 0x44, 0x4e, 0x9f, 0xd8, 0xc1, 0x00, 0x44, 0xc8, 0x10, 0x9e, 0xd8, - 0x41, 0x80, 0x01, 0xff, 0x07, 0x7d, 0x02, 0x23, 0x4b, 0x3d, 0x18, 0xc3, - 0xd8, 0x81, 0x16, 0x45, 0x46, 0x13, 0xf4, 0xd8, 0xc1, 0x00, 0x80, 0x01, - 0xff, 0x42, 0x9e, 0x01, 0xf3, 0xd8, 0x01, 0x43, 0xfd, 0x07, 0xf2, 0xd8, - 0x41, 0x44, 0xc8, 0x10, 0xc2, 0xd8, 0x41, 0x46, 0x42, 0x18, 0xa8, 0xd8, - 0x01, 0x44, 0xf7, 0x07, 0x89, 0xd8, 0x41, 0x47, 0x71, 0x09, 0x0a, 0xd9, - 0x01, 0x48, 0x53, 0x43, 0x09, 0xd9, 0x01, 0x46, 0x90, 0x09, 0x08, 0xd9, - 0x41, 0x1c, 0x92, 0x16, 0x72, 0xa9, 0x52, 0xac, 0x1c, 0x08, 0xba, 0xc6, - 0x06, 0x48, 0x16, 0x16, 0x88, 0xda, 0x41, 0x47, 0x40, 0xcd, 0x12, 0xda, - 0x01, 0x47, 0x8e, 0x8c, 0x11, 0xda, 0x01, 0x48, 0xda, 0xc9, 0x13, 0xda, - 0x41, 0x04, 0xd3, 0x07, 0x06, 0x5a, 0xe2, 0x20, 0x70, 0xda, 0x41, 0x06, - 0xa0, 0x1b, 0x1a, 0xb3, 0x01, 0xff, 0x49, 0xba, 0x6a, 0x1f, 0xd9, 0x01, - 0x05, 0x0d, 0x07, 0x01, 0xff, 0x48, 0x53, 0x43, 0x1e, 0xd9, 0x01, 0x46, - 0x90, 0x09, 0x1c, 0xd9, 0x41, 0x48, 0x53, 0x43, 0x1d, 0xd9, 0x01, 0x46, - 0x90, 0x09, 0x1b, 0xd9, 0x41, 0x0c, 0xa1, 0x8f, 0x06, 0x44, 0x8b, 0x09, - 0x7e, 0xda, 0x41, 0xd2, 0x9b, 0xda, 0x01, 0xd3, 0x9c, 0xda, 0x01, 0xd4, - 0x9d, 0xda, 0x01, 0xd5, 0x9e, 0xda, 0x01, 0xd6, 0x9f, 0xda, 0x41, 0x4f, - 0x86, 0x6b, 0x07, 0xda, 0x01, 0x4a, 0x85, 0xb0, 0x08, 0xda, 0xc1, 0x00, - 0x48, 0xff, 0x0c, 0x09, 0xda, 0x41, 0x43, 0xed, 0x19, 0x30, 0xda, 0x01, - 0x49, 0xec, 0xbe, 0x6c, 0xda, 0x01, 0x02, 0x4d, 0x00, 0x01, 0xff, 0x80, - 0xb2, 0x01, 0x0f, 0xf1, 0x69, 0x9b, 0x01, 0x05, 0x81, 0xe3, 0x4e, 0x07, - 0xe0, 0xcf, 0x38, 0x02, 0x31, 0x01, 0x01, 0xff, 0x46, 0x53, 0x0d, 0x16, - 0xda, 0x01, 0x05, 0x22, 0x00, 0x1d, 0x44, 0xcb, 0x04, 0x14, 0xda, 0x01, - 0x48, 0x7a, 0xc8, 0x15, 0xda, 0x01, 0x04, 0x4e, 0x1b, 0x01, 0xff, 0x45, - 0xca, 0x04, 0x1a, 0xda, 0x01, 0x4d, 0xb0, 0x84, 0x1c, 0xda, 0x41, 0x46, - 0x53, 0x0d, 0x1b, 0xda, 0x01, 0x44, 0xcb, 0x04, 0x19, 0xda, 0x41, 0x44, - 0xa5, 0x01, 0x1f, 0xda, 0x01, 0x4a, 0x22, 0x46, 0x20, 0xda, 0x01, 0x42, - 0x50, 0x02, 0x1e, 0xda, 0x41, 0x0b, 0x35, 0x48, 0x29, 0x0a, 0x6b, 0x1d, - 0x01, 0xff, 0xa3, 0x16, 0x48, 0xeb, 0x4b, 0x21, 0xda, 0xc1, 0x00, 0x80, - 0x01, 0xff, 0x4b, 0xa8, 0x58, 0x23, 0xda, 0x01, 0x46, 0x3b, 0x01, 0x22, - 0xda, 0x41, 0x47, 0xdd, 0x0a, 0x29, 0xda, 0x01, 0x45, 0x37, 0x22, 0x27, - 0xda, 0x41, 0x46, 0x6f, 0x40, 0x28, 0xda, 0x01, 0x48, 0xeb, 0x4b, 0x24, - 0xda, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4b, 0xa8, 0x58, 0x26, 0xda, 0x01, - 0x46, 0x3b, 0x01, 0x25, 0xda, 0x41, 0x44, 0xa5, 0x01, 0x0c, 0xda, 0x01, - 0x47, 0x8e, 0x8c, 0x0b, 0xda, 0x01, 0x42, 0x50, 0x02, 0x0a, 0xda, 0x41, - 0x06, 0x4e, 0xd7, 0x06, 0x44, 0xe2, 0xa2, 0x1d, 0xda, 0x41, 0x48, 0x53, - 0x43, 0x18, 0xda, 0x01, 0x46, 0x90, 0x09, 0x17, 0xda, 0x41, 0x0f, 0x9f, - 0x70, 0x48, 0x07, 0x12, 0xd5, 0x01, 0xff, 0x0a, 0x6c, 0x31, 0x33, 0x50, - 0x9a, 0x61, 0xfd, 0xd9, 0x01, 0x44, 0x7e, 0xec, 0xf7, 0xd9, 0x01, 0x47, - 0x89, 0xce, 0xfe, 0xd9, 0x01, 0x47, 0x5c, 0x42, 0xfa, 0xd9, 0x01, 0xb3, - 0x06, 0x45, 0x13, 0xe8, 0xf9, 0xd9, 0x41, 0x4b, 0x47, 0x9b, 0xfb, 0xd9, - 0x81, 0x06, 0x43, 0x13, 0x01, 0xf8, 0xd9, 0x41, 0x4c, 0xa7, 0x58, 0xfc, - 0xd9, 0x41, 0x45, 0xa0, 0x1b, 0xf6, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0xf5, - 0xd9, 0x41, 0x4c, 0x89, 0x8c, 0x0e, 0xda, 0x01, 0x08, 0xe5, 0x90, 0x06, - 0x4a, 0x7b, 0xb0, 0x0f, 0xda, 0x41, 0x44, 0xa5, 0x01, 0x0d, 0xda, 0x01, - 0x42, 0x50, 0x02, 0x10, 0xda, 0x41, 0x06, 0x01, 0x9e, 0x0f, 0xaf, 0x01, - 0xff, 0x43, 0x03, 0x12, 0x8a, 0xda, 0x01, 0x43, 0xea, 0x04, 0x87, 0xda, - 0x41, 0x47, 0x8e, 0x8c, 0x2b, 0xda, 0x01, 0x46, 0x46, 0xdc, 0x2a, 0xda, - 0x01, 0x46, 0x24, 0xdd, 0x2c, 0xda, 0x41, 0x05, 0xaf, 0xe2, 0x17, 0x04, - 0x7e, 0xe7, 0x01, 0xff, 0x47, 0x71, 0x09, 0x10, 0xd9, 0x01, 0x48, 0x53, - 0x43, 0x0f, 0xd9, 0x01, 0x46, 0x90, 0x09, 0x0e, 0xd9, 0x41, 0x46, 0xaa, - 0xd8, 0x3a, 0xda, 0x01, 0x46, 0x06, 0xda, 0x39, 0xda, 0x41, 0x04, 0x09, - 0x8b, 0x11, 0x04, 0x24, 0xdd, 0x01, 0xff, 0x50, 0xea, 0x5e, 0x38, 0xda, - 0x01, 0x46, 0xda, 0x05, 0x36, 0xda, 0x41, 0x50, 0xea, 0x5e, 0x37, 0xda, - 0x01, 0x47, 0xff, 0x65, 0x35, 0xda, 0x41, 0x05, 0x87, 0xe2, 0x3e, 0x06, - 0xbe, 0x44, 0x01, 0xff, 0x06, 0xe1, 0x02, 0x1d, 0x06, 0xad, 0x02, 0x01, - 0xff, 0x53, 0xd6, 0x47, 0x9f, 0xf5, 0x01, 0x53, 0x9e, 0x49, 0x98, 0xf5, - 0x01, 0x54, 0x06, 0x22, 0x99, 0xf5, 0x01, 0x51, 0x59, 0x5d, 0x9e, 0xf5, - 0x41, 0x53, 0xd6, 0x47, 0xa1, 0xf5, 0x01, 0x53, 0x9e, 0x49, 0x9a, 0xf5, - 0x01, 0x54, 0x06, 0x22, 0x9b, 0xf5, 0x01, 0x51, 0x59, 0x5d, 0xa0, 0xf5, - 0x41, 0xa4, 0xb8, 0x04, 0x50, 0x3a, 0x61, 0xc9, 0x15, 0x01, 0x07, 0xc1, - 0x05, 0x86, 0x02, 0x10, 0xea, 0x64, 0xf5, 0x01, 0xb3, 0x43, 0x0b, 0xd1, - 0x75, 0x01, 0xff, 0xa1, 0x25, 0xe5, 0xb8, 0x15, 0x01, 0xe9, 0xb0, 0x15, - 0x81, 0x18, 0xef, 0xba, 0x15, 0x01, 0xf5, 0xb2, 0x15, 0x81, 0x0b, 0x49, - 0x9b, 0xbe, 0xb4, 0x15, 0xc1, 0x00, 0xf2, 0xb5, 0x15, 0x41, 0xf5, 0xb3, - 0x15, 0x41, 0xe9, 0xb1, 0x15, 0x41, 0xe1, 0xaf, 0x15, 0x01, 0xe9, 0xb9, - 0x15, 0x01, 0x4a, 0x2b, 0xab, 0xdc, 0x15, 0x81, 0x04, 0xf5, 0xbb, 0x15, - 0x41, 0xf5, 0xdd, 0x15, 0x41, 0xa5, 0x2e, 0x04, 0x30, 0x03, 0x01, 0xff, - 0x48, 0xd0, 0x15, 0xbd, 0x15, 0x01, 0x4b, 0x4f, 0x23, 0xbc, 0x15, 0x01, - 0x45, 0x5a, 0x3e, 0xc0, 0x15, 0x01, 0x47, 0x0c, 0xd3, 0xc1, 0x15, 0x01, - 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, 0xbf, 0x15, 0x01, 0x45, - 0xa3, 0x4a, 0xbe, 0x15, 0x41, 0x0b, 0x87, 0x98, 0x11, 0x08, 0x38, 0x20, - 0x01, 0xff, 0x43, 0x16, 0x00, 0xc5, 0x15, 0x01, 0x43, 0xd4, 0x09, 0xc4, - 0x15, 0x41, 0x4b, 0x21, 0x99, 0xcf, 0x15, 0x81, 0x5e, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x0c, 0xa5, 0x8b, 0x43, 0x50, 0x8a, 0x60, 0xd1, 0x15, 0x01, - 0x53, 0xf4, 0x4a, 0xd3, 0x15, 0x01, 0x10, 0xca, 0x64, 0x21, 0x52, 0xd2, - 0x53, 0xd4, 0x15, 0x01, 0x03, 0x19, 0x01, 0x01, 0xff, 0x09, 0x53, 0xb5, - 0x06, 0x4d, 0xfa, 0x4a, 0xd2, 0x15, 0x41, 0x50, 0x7a, 0x60, 0xcb, 0x15, - 0x01, 0x52, 0xbc, 0x54, 0xca, 0x15, 0x41, 0x49, 0xfe, 0x4a, 0xcc, 0x15, - 0x01, 0x50, 0x8a, 0x60, 0xcd, 0x15, 0x01, 0x50, 0x4a, 0x66, 0xce, 0x15, - 0x41, 0x4f, 0xa4, 0x6b, 0xd7, 0x15, 0x01, 0x44, 0xca, 0x64, 0xd5, 0x15, - 0x01, 0x4e, 0x34, 0x7c, 0xd6, 0x15, 0x41, 0x4a, 0x83, 0x94, 0xd0, 0x15, - 0x41, 0xd1, 0xc6, 0x15, 0x01, 0xd2, 0xc7, 0x15, 0x01, 0xd3, 0xc8, 0x15, - 0x41, 0xe1, 0x80, 0x15, 0x81, 0x8f, 0x02, 0xa2, 0x82, 0x02, 0xa3, 0xf5, - 0x01, 0xa4, 0xdc, 0x01, 0xe5, 0x8a, 0x15, 0x01, 0xa7, 0xcb, 0x01, 0x42, - 0x22, 0x00, 0xae, 0x15, 0x01, 0xe9, 0x82, 0x15, 0x81, 0xbb, 0x01, 0xaa, - 0xae, 0x01, 0xab, 0xa1, 0x01, 0x42, 0x74, 0x00, 0xa9, 0x15, 0x01, 0x42, - 0x6c, 0x00, 0xa6, 0x15, 0x01, 0xae, 0x7d, 0xef, 0x8c, 0x15, 0x01, 0xb0, - 0x6d, 0x42, 0x71, 0x00, 0xa8, 0x15, 0x01, 0xb3, 0x55, 0xb4, 0x2c, 0xf5, - 0x84, 0x15, 0x81, 0x23, 0xb6, 0x06, 0x42, 0x34, 0x22, 0xa7, 0x15, 0x41, - 0xe1, 0xaa, 0x15, 0x01, 0x07, 0x9c, 0xbe, 0x01, 0xff, 0xec, 0x88, 0x15, - 0x81, 0x09, 0xf2, 0x86, 0x15, 0xc1, 0x00, 0xf2, 0x87, 0x15, 0x41, 0xec, - 0x89, 0x15, 0x41, 0xf5, 0x85, 0x15, 0x41, 0xe1, 0x9d, 0x15, 0x01, 0xa8, - 0x17, 0xb4, 0x0b, 0x55, 0x3b, 0x3e, 0xd9, 0x15, 0xc1, 0x00, 0xe9, 0xda, - 0x15, 0x41, 0xe1, 0x98, 0x15, 0x01, 0x42, 0x22, 0x00, 0x99, 0x15, 0x41, - 0xe1, 0x9e, 0x15, 0x01, 0x56, 0xf3, 0x35, 0xd8, 0x15, 0x41, 0xe1, 0xad, - 0x15, 0x01, 0x42, 0x22, 0x00, 0xab, 0x15, 0x01, 0x42, 0x15, 0x06, 0xac, - 0x15, 0x41, 0xe1, 0xa2, 0x15, 0x01, 0x42, 0x22, 0x00, 0xa3, 0x15, 0x41, - 0xe1, 0xa1, 0x15, 0x01, 0x42, 0x24, 0x02, 0x92, 0x15, 0x01, 0x42, 0xff, - 0x04, 0x9c, 0x15, 0x01, 0x42, 0x34, 0x22, 0x97, 0x15, 0x41, 0xe1, 0x8e, - 0x15, 0x01, 0x42, 0x22, 0x00, 0x8f, 0x15, 0x41, 0xe1, 0x95, 0x15, 0x01, - 0x42, 0x22, 0x00, 0x96, 0x15, 0x41, 0xe9, 0x83, 0x15, 0x41, 0xe1, 0x90, - 0x15, 0x01, 0x42, 0x22, 0x00, 0x91, 0x15, 0x41, 0xe1, 0x9f, 0x15, 0x01, - 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa0, 0x15, 0x41, 0xe1, 0x9a, 0x15, 0x01, - 0x42, 0x22, 0x00, 0x9b, 0x15, 0x41, 0xe1, 0x93, 0x15, 0x01, 0x42, 0x22, - 0x00, 0x94, 0x15, 0x41, 0xe1, 0xa4, 0x15, 0x01, 0x42, 0x22, 0x00, 0xa5, - 0x15, 0x41, 0xe1, 0x81, 0x15, 0x01, 0xe9, 0x8b, 0x15, 0x01, 0x4a, 0x2b, - 0xab, 0xdb, 0x15, 0x01, 0xf5, 0x8d, 0x15, 0x41, 0x44, 0xd1, 0x1f, 0xc2, - 0x15, 0x01, 0x4b, 0xd8, 0x9e, 0xc3, 0x15, 0x41, 0xa1, 0xdd, 0x01, 0x43, - 0x26, 0x34, 0x11, 0xf4, 0x01, 0xa9, 0xb4, 0x01, 0xaf, 0x14, 0xb2, 0x06, - 0x4d, 0xc9, 0x87, 0xe2, 0x29, 0x40, 0x43, 0x6a, 0x1b, 0x90, 0xf9, 0x01, - 0x42, 0x83, 0x0e, 0x37, 0xf9, 0x41, 0x5d, 0xa5, 0x14, 0x2f, 0xf9, 0x01, - 0x4a, 0xd9, 0xac, 0x20, 0xf3, 0x01, 0x06, 0x44, 0x2f, 0x81, 0x01, 0x02, - 0x34, 0x00, 0x12, 0x50, 0x7a, 0x66, 0x7d, 0x23, 0x00, 0x43, 0xd7, 0x00, - 0x8f, 0xfa, 0x01, 0x43, 0x15, 0x01, 0xbf, 0xf6, 0x41, 0x80, 0x26, 0x44, - 0xbe, 0x2b, 0x70, 0xf3, 0x01, 0x0c, 0xd9, 0x8d, 0x04, 0xf3, 0x73, 0xfa, - 0x41, 0x52, 0x76, 0x4f, 0xa1, 0xbc, 0x01, 0x49, 0x80, 0xb5, 0xa2, 0xbc, - 0x01, 0x4e, 0x0c, 0x78, 0xa0, 0xbc, 0x01, 0x47, 0x0f, 0xd4, 0xa3, 0xbc, - 0x41, 0xa2, 0x35, 0x49, 0x20, 0x38, 0xdf, 0x2a, 0x80, 0x28, 0x49, 0xf2, - 0xb8, 0xde, 0x2a, 0x00, 0x66, 0x20, 0x07, 0x44, 0x29, 0x00, 0x53, 0xd8, - 0x4b, 0x4e, 0x2b, 0x00, 0x47, 0x16, 0xd4, 0xe0, 0x2a, 0xc0, 0x00, 0x80, - 0x01, 0xff, 0x55, 0x14, 0x38, 0xe9, 0x2a, 0x00, 0x4d, 0xc3, 0x5d, 0xe8, - 0x2a, 0x40, 0x4d, 0x71, 0x7e, 0xe7, 0x2a, 0x40, 0x56, 0xff, 0x31, 0x4f, - 0x2b, 0x00, 0x6c, 0x92, 0x01, 0x5f, 0x2b, 0x40, 0x44, 0x6a, 0x69, 0xcd, - 0xf6, 0x01, 0x47, 0xb4, 0xd3, 0xd2, 0xf6, 0x41, 0x43, 0x7a, 0x23, 0xe1, - 0xf6, 0x01, 0x03, 0xc5, 0x00, 0x0a, 0x4a, 0x2f, 0xac, 0xe9, 0x26, 0x00, - 0xf0, 0xa2, 0xf6, 0x41, 0x42, 0x9e, 0x01, 0x0f, 0x00, 0x00, 0x43, 0xfd, - 0x07, 0x0e, 0x00, 0x40, 0x0c, 0xa7, 0x02, 0xaf, 0x07, 0x49, 0x24, 0xae, - 0xe8, 0xfa, 0x01, 0x50, 0x4a, 0x63, 0x58, 0xf9, 0x01, 0x45, 0xac, 0xe5, - 0x18, 0x26, 0x00, 0xb2, 0xbb, 0x02, 0xb6, 0x01, 0xff, 0x46, 0x38, 0xd8, - 0x67, 0xf3, 0x01, 0x0b, 0x8e, 0x8b, 0x01, 0xff, 0xa1, 0xfc, 0x01, 0x43, - 0xa8, 0xf0, 0x5a, 0x04, 0x01, 0x46, 0xba, 0xd7, 0x57, 0x04, 0x01, 0x44, - 0x4e, 0xec, 0x5b, 0x04, 0x01, 0xa5, 0xd1, 0x01, 0x43, 0x31, 0x20, 0x53, - 0x04, 0x01, 0x43, 0x5b, 0xa8, 0x5c, 0x04, 0x01, 0xa8, 0xb6, 0x01, 0xa9, - 0xa3, 0x01, 0x45, 0x99, 0xe4, 0x61, 0x04, 0x01, 0x44, 0x9a, 0xed, 0x52, - 0x04, 0x01, 0x44, 0xce, 0xed, 0x64, 0x04, 0x01, 0xad, 0x82, 0x01, 0x43, - 0x54, 0x22, 0x6f, 0x04, 0x01, 0xaf, 0x5a, 0x44, 0xbe, 0xee, 0x50, 0x04, - 0x01, 0x44, 0x06, 0xef, 0x6e, 0x04, 0x01, 0xb3, 0x42, 0xb4, 0x2c, 0x42, - 0x50, 0x02, 0x73, 0x04, 0x01, 0x43, 0x6c, 0x38, 0x5d, 0x04, 0x01, 0x02, - 0x15, 0x02, 0x12, 0x02, 0x4d, 0x00, 0x06, 0x43, 0x92, 0xf1, 0x5f, 0x04, - 0x41, 0xe1, 0x58, 0x04, 0x01, 0xf7, 0x7f, 0x04, 0x41, 0xe5, 0x62, 0x04, - 0x01, 0x42, 0x36, 0x03, 0x6b, 0x04, 0x41, 0xa8, 0x06, 0x42, 0xf0, 0x04, - 0x51, 0x04, 0x41, 0x42, 0x3f, 0x1c, 0x5e, 0x04, 0x01, 0x43, 0x3f, 0x00, - 0x54, 0x04, 0x41, 0xef, 0x55, 0x04, 0x01, 0x43, 0x09, 0x18, 0x56, 0x04, - 0x41, 0x42, 0x6d, 0x00, 0x74, 0x04, 0x01, 0x42, 0x62, 0x01, 0x76, 0x04, - 0x01, 0xee, 0x6a, 0x04, 0x01, 0x43, 0x1a, 0x0a, 0x75, 0x04, 0x01, 0xf2, - 0x79, 0x04, 0x01, 0x42, 0xfe, 0x07, 0x6c, 0x04, 0x41, 0x46, 0x06, 0x18, - 0x60, 0x04, 0x01, 0x43, 0x29, 0x02, 0x65, 0x04, 0x41, 0x42, 0x1a, 0x00, - 0x7e, 0x04, 0x01, 0x42, 0x73, 0x02, 0x72, 0x04, 0x01, 0xe6, 0x66, 0x04, - 0x41, 0x44, 0xa6, 0xeb, 0x63, 0x04, 0x01, 0x43, 0x75, 0x44, 0x59, 0x04, - 0x41, 0xa1, 0x0c, 0x42, 0x15, 0x12, 0x67, 0x04, 0x01, 0x42, 0xcf, 0x00, - 0x7b, 0x04, 0x41, 0xf2, 0x7d, 0x04, 0x01, 0xf4, 0x70, 0x04, 0x41, 0x42, - 0x3b, 0x01, 0x69, 0x04, 0x01, 0x42, 0x8c, 0x09, 0x71, 0x04, 0x01, 0xe8, - 0x6d, 0x04, 0x01, 0x42, 0x46, 0x00, 0x7a, 0x04, 0x01, 0xb2, 0x0c, 0x42, - 0xa4, 0x02, 0x68, 0x04, 0x01, 0x42, 0x15, 0x01, 0x77, 0x04, 0x41, 0xe5, - 0x78, 0x04, 0x01, 0x43, 0xca, 0x64, 0x7c, 0x04, 0x41, 0x04, 0x8b, 0x4c, - 0x04, 0xeb, 0x88, 0xf9, 0x41, 0x51, 0x93, 0x56, 0xc7, 0x11, 0x01, 0x51, - 0xf8, 0x57, 0xdd, 0x11, 0x01, 0xa4, 0xf6, 0x03, 0xa5, 0xe7, 0x03, 0x4a, - 0x40, 0x5f, 0xdc, 0x11, 0x01, 0x07, 0xc1, 0x05, 0xc4, 0x01, 0x42, 0xe9, - 0x04, 0xc4, 0x11, 0x01, 0xb3, 0x55, 0x06, 0x6c, 0x38, 0x01, 0xff, 0x4d, - 0x6f, 0x84, 0xcb, 0x11, 0x01, 0x05, 0x2f, 0x03, 0x01, 0xff, 0xa1, 0x37, - 0xe5, 0xbc, 0x11, 0x01, 0xe9, 0xb4, 0x11, 0x81, 0x2a, 0xef, 0xbe, 0x11, - 0x01, 0x4f, 0x54, 0x70, 0xce, 0x11, 0x01, 0xf5, 0xb6, 0x11, 0x81, 0x17, - 0x08, 0x9b, 0xbe, 0x01, 0xff, 0xec, 0xba, 0x11, 0x81, 0x09, 0xf2, 0xb8, - 0x11, 0xc1, 0x00, 0xf2, 0xb9, 0x11, 0x41, 0xec, 0xbb, 0x11, 0x41, 0xf5, - 0xb7, 0x11, 0x41, 0xe9, 0xb5, 0x11, 0x41, 0xe1, 0xb3, 0x11, 0x01, 0xe9, - 0xbd, 0x11, 0x01, 0xf5, 0xbf, 0x11, 0x41, 0x4a, 0x81, 0xa5, 0xc9, 0x11, - 0x01, 0xa5, 0x4d, 0x04, 0x30, 0x03, 0x06, 0x49, 0x2f, 0xbe, 0xcd, 0x11, - 0x41, 0xa1, 0x35, 0x4b, 0x4f, 0x23, 0x80, 0x11, 0x01, 0x54, 0x77, 0x42, - 0xcf, 0x11, 0x01, 0x4b, 0xc0, 0x9b, 0xc2, 0x11, 0x01, 0x45, 0x5a, 0x3e, - 0xca, 0x11, 0x01, 0x47, 0x0c, 0xd3, 0xdb, 0x11, 0x01, 0x4b, 0x32, 0xa2, - 0xc3, 0x11, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, 0xc0, - 0x11, 0x01, 0x45, 0xa3, 0x4a, 0x82, 0x11, 0x41, 0x47, 0xd1, 0x15, 0x81, - 0x11, 0x01, 0x47, 0xf2, 0x86, 0xc1, 0x11, 0x41, 0x0b, 0x92, 0x98, 0x06, - 0x47, 0x38, 0x20, 0xc8, 0x11, 0x41, 0xd1, 0xde, 0x11, 0x01, 0xd2, 0xdf, - 0x11, 0x41, 0xe1, 0x83, 0x11, 0x81, 0x86, 0x02, 0xa2, 0xf9, 0x01, 0xa3, - 0xec, 0x01, 0xa4, 0xd3, 0x01, 0xe5, 0x8d, 0x11, 0x01, 0xa7, 0xc2, 0x01, - 0x42, 0x22, 0x00, 0xb2, 0x11, 0x01, 0xe9, 0x85, 0x11, 0x81, 0xb2, 0x01, - 0xaa, 0xa5, 0x01, 0xab, 0x98, 0x01, 0xac, 0x8b, 0x01, 0x42, 0x6c, 0x00, - 0xa9, 0x11, 0x01, 0xae, 0x6d, 0xef, 0x8f, 0x11, 0x01, 0xb0, 0x5d, 0x42, - 0x71, 0x00, 0xab, 0x11, 0x01, 0xb3, 0x45, 0xb4, 0x2c, 0xf5, 0x87, 0x11, - 0x81, 0x23, 0xb6, 0x06, 0x42, 0x34, 0x22, 0xaa, 0x11, 0x41, 0xe1, 0xae, - 0x11, 0x01, 0x07, 0x9c, 0xbe, 0x01, 0xff, 0xec, 0x8b, 0x11, 0x81, 0x09, - 0xf2, 0x89, 0x11, 0xc1, 0x00, 0xf2, 0x8a, 0x11, 0x41, 0xec, 0x8c, 0x11, - 0x41, 0xf5, 0x88, 0x11, 0x41, 0xe1, 0xa0, 0x11, 0x01, 0x42, 0x22, 0x00, - 0xa1, 0x11, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x9b, 0x11, 0x01, 0x42, 0x22, - 0x00, 0x9c, 0x11, 0x41, 0xe1, 0xb1, 0x11, 0x01, 0x42, 0x22, 0x00, 0xaf, - 0x11, 0x01, 0x42, 0x15, 0x06, 0xb0, 0x11, 0x41, 0xe1, 0xa5, 0x11, 0x01, - 0x42, 0x22, 0x00, 0xa6, 0x11, 0x41, 0xe1, 0xa4, 0x11, 0x01, 0x42, 0x24, - 0x02, 0x95, 0x11, 0x01, 0x42, 0xff, 0x04, 0x9f, 0x11, 0x01, 0x42, 0x34, - 0x22, 0x9a, 0x11, 0x41, 0xe1, 0xac, 0x11, 0x01, 0x42, 0x74, 0x00, 0xad, - 0x11, 0x41, 0xe1, 0x91, 0x11, 0x01, 0x42, 0x22, 0x00, 0x92, 0x11, 0x41, - 0xe1, 0x98, 0x11, 0x01, 0x42, 0x22, 0x00, 0x99, 0x11, 0x41, 0xe9, 0x86, - 0x11, 0x41, 0xe1, 0x93, 0x11, 0x01, 0x42, 0x22, 0x00, 0x94, 0x11, 0x41, - 0xe1, 0xa2, 0x11, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa3, 0x11, 0x41, - 0xe1, 0x9d, 0x11, 0x01, 0x42, 0x22, 0x00, 0x9e, 0x11, 0x41, 0xe1, 0x96, - 0x11, 0x01, 0x42, 0x22, 0x00, 0x97, 0x11, 0x41, 0xe1, 0xa7, 0x11, 0x01, - 0x42, 0x22, 0x00, 0xa8, 0x11, 0x41, 0xe1, 0x84, 0x11, 0x01, 0xe9, 0x8e, - 0x11, 0x01, 0xf5, 0x90, 0x11, 0x41, 0x43, 0x8f, 0xb8, 0xda, 0x11, 0x01, - 0x55, 0x65, 0x3e, 0xcc, 0x11, 0x41, 0x44, 0xd1, 0x1f, 0xc5, 0x11, 0x01, - 0x05, 0xc5, 0x06, 0x06, 0x4b, 0xd8, 0x9e, 0xc6, 0x11, 0x41, 0x45, 0xc3, - 0x0a, 0xd8, 0x11, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xd9, 0x11, 0x01, - 0x43, 0xbf, 0x0a, 0xd1, 0x11, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, - 0x1d, 0xd0, 0x11, 0x41, 0x44, 0x25, 0x01, 0xd3, 0x11, 0x01, 0x42, 0x15, - 0x02, 0xd2, 0x11, 0x41, 0x44, 0x27, 0x1d, 0xd7, 0x11, 0x01, 0x42, 0x60, - 0x25, 0xd6, 0x11, 0x41, 0x43, 0xa7, 0x05, 0xd5, 0x11, 0x01, 0x43, 0xcb, - 0x06, 0xd4, 0x11, 0x41, 0x46, 0xe7, 0x02, 0x4d, 0x27, 0x00, 0x4b, 0x23, - 0x9c, 0x1e, 0x27, 0x00, 0x44, 0xe2, 0x12, 0x30, 0x27, 0x40, 0xa1, 0xc8, - 0x04, 0xa3, 0xb0, 0x04, 0x43, 0x10, 0x9d, 0xf2, 0x2b, 0x00, 0xa5, 0x9b, - 0x04, 0x45, 0x22, 0x2f, 0x13, 0x23, 0x80, 0xcc, 0x03, 0x44, 0xbe, 0xed, - 0x33, 0xf9, 0x01, 0x02, 0x7d, 0x02, 0xaf, 0x03, 0x08, 0x2a, 0xc7, 0x38, - 0xb2, 0x2a, 0xb3, 0x1c, 0x02, 0xc6, 0x00, 0x0c, 0x4b, 0xd7, 0xa2, 0xa1, - 0xfa, 0x01, 0x45, 0xf2, 0xd2, 0xb9, 0x26, 0x40, 0x45, 0xef, 0x1e, 0x16, - 0x22, 0x00, 0x4e, 0xe0, 0x7b, 0x93, 0x00, 0x40, 0x47, 0x51, 0xb6, 0x45, - 0xfe, 0x00, 0x4b, 0x5c, 0x9f, 0xbc, 0x26, 0x40, 0x65, 0xdc, 0x07, 0x2c, - 0xf9, 0x01, 0x49, 0x77, 0xbe, 0x20, 0x21, 0x40, 0x06, 0xd3, 0x69, 0x06, - 0x46, 0xeb, 0x07, 0xfb, 0x2b, 0x40, 0x09, 0xdd, 0xbb, 0xa1, 0x02, 0x08, - 0x1a, 0xc8, 0x01, 0xff, 0xd1, 0x51, 0xce, 0x81, 0x8b, 0x01, 0xd2, 0x52, - 0xce, 0x81, 0x43, 0xd3, 0x54, 0xce, 0x81, 0x1f, 0xd4, 0x58, 0xce, 0x81, - 0x0d, 0xd5, 0x60, 0xce, 0x81, 0x04, 0xd6, 0x70, 0xce, 0x41, 0xd6, 0x80, - 0xce, 0x41, 0xd5, 0x68, 0xce, 0x81, 0x04, 0xd6, 0x78, 0xce, 0x41, 0xd6, - 0x88, 0xce, 0x41, 0xd4, 0x5c, 0xce, 0x81, 0x0d, 0xd5, 0x64, 0xce, 0x81, - 0x04, 0xd6, 0x74, 0xce, 0x41, 0xd6, 0x84, 0xce, 0x41, 0xd5, 0x6c, 0xce, - 0x81, 0x04, 0xd6, 0x7c, 0xce, 0x41, 0xd6, 0x8c, 0xce, 0x41, 0xd3, 0x56, - 0xce, 0x81, 0x1f, 0xd4, 0x5a, 0xce, 0x81, 0x0d, 0xd5, 0x62, 0xce, 0x81, - 0x04, 0xd6, 0x72, 0xce, 0x41, 0xd6, 0x82, 0xce, 0x41, 0xd5, 0x6a, 0xce, - 0x81, 0x04, 0xd6, 0x7a, 0xce, 0x41, 0xd6, 0x8a, 0xce, 0x41, 0xd4, 0x5e, - 0xce, 0x81, 0x0d, 0xd5, 0x66, 0xce, 0x81, 0x04, 0xd6, 0x76, 0xce, 0x41, - 0xd6, 0x86, 0xce, 0x41, 0xd5, 0x6e, 0xce, 0x81, 0x04, 0xd6, 0x7e, 0xce, - 0x41, 0xd6, 0x8e, 0xce, 0x41, 0xd2, 0x53, 0xce, 0x81, 0x43, 0xd3, 0x55, - 0xce, 0x81, 0x1f, 0xd4, 0x59, 0xce, 0x81, 0x0d, 0xd5, 0x61, 0xce, 0x81, - 0x04, 0xd6, 0x71, 0xce, 0x41, 0xd6, 0x81, 0xce, 0x41, 0xd5, 0x69, 0xce, - 0x81, 0x04, 0xd6, 0x79, 0xce, 0x41, 0xd6, 0x89, 0xce, 0x41, 0xd4, 0x5d, - 0xce, 0x81, 0x0d, 0xd5, 0x65, 0xce, 0x81, 0x04, 0xd6, 0x75, 0xce, 0x41, - 0xd6, 0x85, 0xce, 0x41, 0xd5, 0x6d, 0xce, 0x81, 0x04, 0xd6, 0x7d, 0xce, - 0x41, 0xd6, 0x8d, 0xce, 0x41, 0xd3, 0x57, 0xce, 0x81, 0x1f, 0xd4, 0x5b, - 0xce, 0x81, 0x0d, 0xd5, 0x63, 0xce, 0x81, 0x04, 0xd6, 0x73, 0xce, 0x41, - 0xd6, 0x83, 0xce, 0x41, 0xd5, 0x6b, 0xce, 0x81, 0x04, 0xd6, 0x7b, 0xce, - 0x41, 0xd6, 0x8b, 0xce, 0x41, 0xd4, 0x5f, 0xce, 0x81, 0x0d, 0xd5, 0x67, - 0xce, 0x81, 0x04, 0xd6, 0x77, 0xce, 0x41, 0xd6, 0x87, 0xce, 0x41, 0xd5, - 0x6f, 0xce, 0x81, 0x04, 0xd6, 0x7f, 0xce, 0x41, 0xd6, 0x8f, 0xce, 0x41, - 0xd1, 0x21, 0xcc, 0x81, 0x1f, 0xd2, 0x22, 0xcc, 0x81, 0x0d, 0xd3, 0x24, - 0xcc, 0x81, 0x04, 0xd4, 0x28, 0xcc, 0x41, 0xd4, 0x2c, 0xcc, 0x41, 0xd3, - 0x26, 0xcc, 0x81, 0x04, 0xd4, 0x2a, 0xcc, 0x41, 0xd4, 0x2e, 0xcc, 0x41, - 0xd2, 0x23, 0xcc, 0x81, 0x0d, 0xd3, 0x25, 0xcc, 0x81, 0x04, 0xd4, 0x29, - 0xcc, 0x41, 0xd4, 0x2d, 0xcc, 0x41, 0xd3, 0x27, 0xcc, 0x81, 0x04, 0xd4, - 0x2b, 0xcc, 0x41, 0xd4, 0x2f, 0xcc, 0x41, 0x45, 0xc4, 0x3a, 0x3b, 0x00, - 0x00, 0x61, 0x38, 0x0d, 0x32, 0x2a, 0x00, 0x47, 0xf0, 0xd2, 0xba, 0x26, - 0x40, 0x09, 0xbf, 0xb5, 0x01, 0xff, 0x45, 0xc3, 0x0a, 0xf8, 0xfb, 0x01, - 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xf9, 0xfb, 0x01, 0x43, 0xbf, 0x0a, 0xf1, - 0xfb, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xf0, 0xfb, 0x41, - 0x44, 0x25, 0x01, 0xf3, 0xfb, 0x01, 0x42, 0x15, 0x02, 0xf2, 0xfb, 0x41, - 0x44, 0x27, 0x1d, 0xf7, 0xfb, 0x01, 0x42, 0x60, 0x25, 0xf6, 0xfb, 0x41, - 0x43, 0xa7, 0x05, 0xf5, 0xfb, 0x01, 0x43, 0xcb, 0x06, 0xf4, 0xfb, 0x41, - 0x4f, 0xa7, 0x68, 0x48, 0xf6, 0x01, 0x45, 0x91, 0xe2, 0x31, 0xf3, 0x41, - 0x4f, 0xa0, 0x6f, 0x48, 0xf9, 0x01, 0xb4, 0x01, 0xff, 0x48, 0x96, 0x04, - 0xa7, 0x00, 0x00, 0x42, 0x0c, 0x00, 0x14, 0x23, 0x40, 0xec, 0xad, 0xf9, - 0x01, 0xf4, 0xba, 0xf4, 0x41, 0xa1, 0x8a, 0x01, 0x44, 0x29, 0xe2, 0xeb, - 0xf3, 0x81, 0x7d, 0xaf, 0x64, 0xb2, 0x01, 0xff, 0xa5, 0x53, 0x04, 0x4c, - 0x06, 0x0c, 0x43, 0x44, 0x20, 0xdc, 0xf4, 0x01, 0x44, 0xf9, 0x4a, 0x08, - 0x21, 0x40, 0x08, 0xb9, 0x05, 0x1b, 0x54, 0xfa, 0x1e, 0x70, 0xf6, 0x01, - 0x06, 0x0c, 0x07, 0x01, 0xff, 0xe5, 0x2f, 0x21, 0x00, 0xe7, 0x0a, 0x21, - 0x00, 0xec, 0x13, 0x21, 0x00, 0xef, 0x34, 0x21, 0x40, 0xe2, 0x2c, 0x21, - 0x00, 0xe5, 0x30, 0x21, 0x00, 0xe6, 0x31, 0x21, 0x00, 0xe8, 0x0b, 0x21, - 0x00, 0xe9, 0x10, 0x21, 0x00, 0xec, 0x12, 0x21, 0x00, 0xed, 0x33, 0x21, - 0x00, 0xf0, 0x18, 0x21, 0x00, 0xf2, 0x1b, 0x21, 0x40, 0x42, 0x92, 0x01, - 0xb5, 0xf5, 0x01, 0x47, 0xa2, 0xd4, 0x9b, 0xfa, 0x41, 0x44, 0xe5, 0xd2, - 0xf4, 0xf6, 0x01, 0x03, 0xeb, 0xd2, 0x01, 0xff, 0x42, 0x10, 0x00, 0x82, - 0xf9, 0x01, 0x42, 0xc4, 0x02, 0x4f, 0x26, 0x40, 0x48, 0x02, 0xc0, 0x92, - 0xf3, 0x41, 0x43, 0xec, 0x00, 0x96, 0x26, 0x00, 0x42, 0x6e, 0x1b, 0xe3, - 0xf9, 0x41, 0x05, 0x2b, 0x74, 0x81, 0x08, 0x49, 0xd6, 0xb6, 0x50, 0x26, - 0x00, 0x46, 0xdc, 0xd9, 0xf5, 0x26, 0x00, 0x51, 0xf6, 0x59, 0x76, 0xf3, - 0x01, 0xac, 0xd8, 0x07, 0x08, 0x20, 0x69, 0xcf, 0x04, 0xae, 0xa1, 0x04, - 0x42, 0x0d, 0x00, 0x7b, 0xf9, 0x01, 0xb4, 0x85, 0x04, 0x02, 0x42, 0x00, - 0x06, 0x47, 0xd3, 0xd4, 0xb7, 0xf3, 0x41, 0x07, 0x52, 0xcc, 0x06, 0x44, - 0x9a, 0xee, 0x95, 0xf9, 0x41, 0x54, 0x33, 0x40, 0xb4, 0xa8, 0x00, 0xa4, - 0x96, 0x03, 0x07, 0xc1, 0x05, 0x6f, 0x05, 0x2f, 0x03, 0x4e, 0x0b, 0xd1, - 0x75, 0x01, 0xff, 0xa1, 0x3b, 0xe5, 0xbe, 0xa8, 0x80, 0x32, 0xe9, 0xb6, - 0xa8, 0x80, 0x29, 0xef, 0xc1, 0xa8, 0x80, 0x20, 0xf5, 0xb8, 0xa8, 0x80, - 0x17, 0x08, 0x9b, 0xbe, 0x01, 0xff, 0xec, 0xbc, 0xa8, 0x80, 0x09, 0xf2, - 0xba, 0xa8, 0xc0, 0x00, 0xf2, 0xbb, 0xa8, 0x40, 0xec, 0xbd, 0xa8, 0x40, - 0xf5, 0xb9, 0xa8, 0x40, 0xef, 0xc2, 0xa8, 0x40, 0xe9, 0xb7, 0xa8, 0x40, - 0xe5, 0xbf, 0xa8, 0x40, 0xe1, 0xb5, 0xa8, 0x00, 0xe9, 0xc0, 0xa8, 0x00, - 0xf5, 0xc3, 0xa8, 0x40, 0x48, 0xd0, 0x15, 0x80, 0xa8, 0x00, 0x4b, 0x4f, - 0x23, 0xc5, 0xa8, 0x00, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, - 0xc4, 0xa8, 0x00, 0x45, 0xa3, 0x4a, 0x81, 0xa8, 0x40, 0xe1, 0x82, 0xa8, - 0x80, 0x91, 0x02, 0xa2, 0x84, 0x02, 0xa3, 0xf7, 0x01, 0xa4, 0xde, 0x01, - 0xe5, 0x8c, 0xa8, 0x80, 0xd4, 0x01, 0xa7, 0xc7, 0x01, 0x42, 0x22, 0x00, - 0xb2, 0xa8, 0x00, 0xe9, 0x84, 0xa8, 0x80, 0xb7, 0x01, 0xaa, 0xaa, 0x01, - 0xab, 0x9d, 0x01, 0xac, 0x90, 0x01, 0x42, 0x6c, 0x00, 0xaa, 0xa8, 0x00, - 0xae, 0x72, 0xef, 0x8f, 0xa8, 0x80, 0x69, 0xb0, 0x5d, 0x42, 0x71, 0x00, - 0xac, 0xa8, 0x00, 0xb3, 0x45, 0xb4, 0x2c, 0xf5, 0x86, 0xa8, 0x80, 0x23, - 0xb6, 0x06, 0x42, 0x34, 0x22, 0xab, 0xa8, 0x40, 0xe1, 0xae, 0xa8, 0x00, - 0x07, 0x9c, 0xbe, 0x01, 0xff, 0xec, 0x8a, 0xa8, 0x80, 0x09, 0xf2, 0x88, - 0xa8, 0xc0, 0x00, 0xf2, 0x89, 0xa8, 0x40, 0xec, 0x8b, 0xa8, 0x40, 0xf5, - 0x87, 0xa8, 0x40, 0xe1, 0xa1, 0xa8, 0x00, 0x42, 0x22, 0x00, 0xa2, 0xa8, - 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x9c, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x9d, - 0xa8, 0x40, 0xe1, 0xb1, 0xa8, 0x00, 0x42, 0x22, 0x00, 0xaf, 0xa8, 0x00, - 0x42, 0x15, 0x06, 0xb0, 0xa8, 0x40, 0xe1, 0xa6, 0xa8, 0x00, 0x42, 0x22, - 0x00, 0xa7, 0xa8, 0x40, 0xef, 0x90, 0xa8, 0x40, 0xe1, 0xa5, 0xa8, 0x00, - 0x42, 0x24, 0x02, 0x96, 0xa8, 0x00, 0x42, 0xff, 0x04, 0xa0, 0xa8, 0x00, - 0x42, 0x34, 0x22, 0x9b, 0xa8, 0x40, 0xe1, 0xad, 0xa8, 0x00, 0x42, 0x74, - 0x00, 0xb3, 0xa8, 0x40, 0xe1, 0x92, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x93, - 0xa8, 0x40, 0xe1, 0x99, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x9a, 0xa8, 0x40, - 0xe9, 0x85, 0xa8, 0x40, 0xe1, 0x94, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x95, - 0xa8, 0x40, 0xe5, 0x8d, 0xa8, 0x40, 0xe1, 0xa3, 0xa8, 0x00, 0xa4, 0x06, - 0x42, 0x22, 0x00, 0xa4, 0xa8, 0x40, 0xe1, 0x9e, 0xa8, 0x00, 0x42, 0x22, - 0x00, 0x9f, 0xa8, 0x40, 0xe1, 0x97, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x98, - 0xa8, 0x40, 0xe1, 0xa8, 0xa8, 0x00, 0x42, 0x22, 0x00, 0xa9, 0xa8, 0x40, - 0xe1, 0x83, 0xa8, 0x00, 0xe9, 0x8e, 0xa8, 0x00, 0xf5, 0x91, 0xa8, 0x40, - 0x44, 0xd1, 0x1f, 0xce, 0xa8, 0x00, 0x05, 0xc5, 0x06, 0x06, 0x4b, 0xd8, - 0x9e, 0xcf, 0xa8, 0x40, 0x45, 0xc3, 0x0a, 0xd8, 0xa8, 0x00, 0xa6, 0x2e, - 0x44, 0x46, 0x2a, 0xd9, 0xa8, 0x00, 0x43, 0xbf, 0x0a, 0xd1, 0xa8, 0x00, - 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xd0, 0xa8, 0x40, 0x44, 0x25, - 0x01, 0xd3, 0xa8, 0x00, 0x42, 0x15, 0x02, 0xd2, 0xa8, 0x40, 0x44, 0x27, - 0x1d, 0xd7, 0xa8, 0x00, 0x42, 0x60, 0x25, 0xd6, 0xa8, 0x40, 0x43, 0xa7, - 0x05, 0xd5, 0xa8, 0x00, 0x43, 0xcb, 0x06, 0xd4, 0xa8, 0x40, 0x46, 0x4a, - 0xd8, 0xf0, 0xf6, 0x81, 0x06, 0x43, 0x5d, 0x01, 0x44, 0x26, 0x40, 0x48, - 0x6a, 0xbf, 0xe1, 0xf4, 0x41, 0x45, 0xa0, 0xe2, 0x6a, 0xf9, 0x01, 0x08, - 0xab, 0x15, 0x01, 0xff, 0x06, 0x01, 0x15, 0x06, 0x54, 0xb3, 0x15, 0x7a, - 0xf6, 0x41, 0x07, 0x3b, 0x01, 0x06, 0x68, 0xdd, 0x04, 0x78, 0xf6, 0x41, - 0x5d, 0xe8, 0x04, 0x77, 0xf6, 0x01, 0x64, 0xd8, 0x09, 0x76, 0xf6, 0x41, - 0x51, 0xb0, 0x4e, 0x36, 0x08, 0x00, 0x07, 0xc1, 0x05, 0xf3, 0x01, 0xad, - 0xb2, 0x01, 0x0c, 0x01, 0x16, 0x51, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xe1, - 0x23, 0x08, 0x80, 0x43, 0xe5, 0x1d, 0x08, 0x00, 0xe9, 0x2a, 0x08, 0x00, - 0x05, 0x68, 0x33, 0x22, 0xef, 0x2b, 0x08, 0x80, 0x12, 0xb3, 0x04, 0xf5, - 0x27, 0x08, 0x40, 0x46, 0x06, 0xd3, 0x25, 0x08, 0x00, 0x44, 0x00, 0xe8, - 0x2c, 0x08, 0x40, 0x49, 0x65, 0xbe, 0x21, 0x08, 0xc0, 0x00, 0xe1, 0x1e, - 0x08, 0x40, 0xe1, 0x22, 0x08, 0x80, 0x0c, 0xe5, 0x1c, 0x08, 0x00, 0xe9, - 0x29, 0x08, 0x00, 0xf5, 0x26, 0x08, 0x40, 0xe1, 0x1f, 0x08, 0x40, 0xe1, - 0x20, 0x08, 0x40, 0xa1, 0x3b, 0x43, 0x29, 0xb0, 0x33, 0x08, 0x00, 0x4d, - 0x14, 0x84, 0x37, 0x08, 0x00, 0x47, 0xa4, 0xd0, 0x30, 0x08, 0x00, 0x45, - 0x1c, 0x84, 0x39, 0x08, 0x00, 0xb3, 0x15, 0x44, 0x76, 0xef, 0x3b, 0x08, - 0x00, 0xba, 0x01, 0xff, 0x43, 0x93, 0xf0, 0x3a, 0x08, 0x00, 0x44, 0x66, - 0xed, 0x38, 0x08, 0x40, 0x49, 0x4b, 0xb7, 0x35, 0x08, 0x00, 0x4b, 0x54, - 0x9e, 0x3d, 0x08, 0x40, 0x45, 0x68, 0xe3, 0x31, 0x08, 0x00, 0xae, 0x0c, - 0x46, 0x9a, 0xdc, 0x3c, 0x08, 0x00, 0x45, 0x31, 0xe8, 0x34, 0x08, 0x40, - 0x43, 0x06, 0x12, 0x32, 0x08, 0x00, 0x44, 0x12, 0xee, 0x3e, 0x08, 0x40, - 0x04, 0xba, 0x00, 0x15, 0x0f, 0x2a, 0x0c, 0x01, 0xff, 0x4e, 0xf8, 0x75, - 0x1a, 0x08, 0x00, 0xe9, 0x28, 0x08, 0x00, 0x47, 0x05, 0xd3, 0x24, 0x08, - 0x40, 0x46, 0x4b, 0x6a, 0x19, 0x08, 0x00, 0x4e, 0xf8, 0x75, 0x1b, 0x08, - 0x00, 0x42, 0x9e, 0x01, 0x16, 0x08, 0x80, 0x0c, 0x47, 0xa4, 0xd0, 0x2d, - 0x08, 0x00, 0x49, 0x6c, 0xba, 0x18, 0x08, 0x40, 0x45, 0xdb, 0xde, 0x17, - 0x08, 0x40, 0x44, 0xdc, 0xde, 0x00, 0x08, 0x00, 0xa2, 0x72, 0x45, 0xef, - 0x52, 0x03, 0x08, 0x00, 0x42, 0xc8, 0x02, 0x10, 0x08, 0x00, 0x45, 0x7c, - 0xe3, 0x02, 0x08, 0x00, 0xa9, 0x52, 0x44, 0x7e, 0xed, 0x0a, 0x08, 0x00, - 0x45, 0xee, 0xe4, 0x0b, 0x08, 0x00, 0x43, 0xfb, 0x8e, 0x0c, 0x08, 0x00, - 0x43, 0x54, 0x22, 0x0d, 0x08, 0x00, 0x43, 0x4a, 0xf1, 0x12, 0x08, 0x00, - 0x44, 0xf6, 0x52, 0x13, 0x08, 0x00, 0xb3, 0x20, 0xb4, 0x0c, 0x43, 0x03, - 0x76, 0x09, 0x08, 0x00, 0x43, 0xfc, 0x09, 0x06, 0x08, 0x40, 0x43, 0x94, - 0xc0, 0x15, 0x08, 0x00, 0x42, 0x52, 0x00, 0x08, 0x08, 0x00, 0x46, 0xc4, - 0xdc, 0x11, 0x08, 0x40, 0x43, 0x90, 0x00, 0x14, 0x08, 0x00, 0x46, 0x00, - 0xda, 0x0e, 0x08, 0x40, 0xee, 0x0f, 0x08, 0x00, 0xf4, 0x07, 0x08, 0x00, - 0xf9, 0x04, 0x08, 0x40, 0x42, 0x31, 0x12, 0x05, 0x08, 0x00, 0x42, 0x52, - 0x00, 0x01, 0x08, 0x40, 0xb4, 0x06, 0x4a, 0x13, 0x92, 0xe1, 0xfa, 0x41, - 0x47, 0xca, 0xca, 0xc2, 0xf9, 0x01, 0x43, 0x39, 0x0d, 0x13, 0x26, 0x40, - 0x43, 0xd9, 0x12, 0xf7, 0xf9, 0x01, 0x44, 0x01, 0x5d, 0xba, 0xf9, 0x41, - 0xa1, 0x81, 0x21, 0xa5, 0xe4, 0x1a, 0x49, 0x42, 0xb7, 0x8f, 0xf9, 0x01, - 0xa9, 0xd4, 0x0a, 0xaf, 0x81, 0x07, 0xb5, 0x01, 0xff, 0x48, 0xa2, 0xc1, - 0xbd, 0x20, 0x00, 0x4c, 0x85, 0x8d, 0xc9, 0xf3, 0x01, 0x4a, 0x45, 0xaa, - 0xf4, 0x29, 0x00, 0x03, 0xdc, 0xce, 0xf3, 0x04, 0xae, 0x2f, 0x48, 0xf8, - 0x7e, 0xa8, 0x20, 0x00, 0x1a, 0x98, 0x21, 0x01, 0xff, 0x48, 0x9a, 0xc1, - 0xf6, 0x2b, 0x00, 0x46, 0x9c, 0xc1, 0xf4, 0x2b, 0x00, 0x48, 0x6a, 0xc7, - 0xf5, 0x2b, 0x00, 0x48, 0x12, 0xc8, 0xf7, 0x2b, 0x00, 0x49, 0x7b, 0xbd, - 0xf8, 0x2b, 0x00, 0x49, 0x80, 0xbe, 0xf3, 0x2b, 0x40, 0x03, 0x27, 0x03, - 0x0f, 0xae, 0x01, 0xff, 0x42, 0x33, 0x00, 0xc3, 0xf3, 0x01, 0x53, 0x19, - 0x49, 0xbd, 0xf3, 0x41, 0x4d, 0x41, 0x7f, 0xee, 0x16, 0x00, 0x4f, 0x88, - 0x69, 0xf0, 0x16, 0x00, 0x51, 0x1a, 0x58, 0xed, 0x16, 0x00, 0x07, 0xc1, - 0x05, 0x12, 0x54, 0x53, 0x43, 0xec, 0x16, 0x00, 0x52, 0x1a, 0x54, 0xeb, - 0x16, 0x00, 0x4f, 0x70, 0x72, 0xef, 0x16, 0x40, 0xa1, 0xec, 0x03, 0x58, - 0xad, 0x26, 0xd2, 0x16, 0x00, 0xe3, 0xcd, 0x16, 0x80, 0xc8, 0x03, 0xe4, - 0xd1, 0x16, 0x80, 0xab, 0x03, 0xe5, 0xc2, 0x16, 0x80, 0x8d, 0x03, 0xa6, - 0xe1, 0x02, 0xe7, 0xb5, 0x16, 0x80, 0xc8, 0x02, 0x02, 0x22, 0x00, 0xb7, - 0x02, 0xa9, 0x8f, 0x02, 0x47, 0x69, 0xcf, 0xc3, 0x16, 0x00, 0xeb, 0xf1, - 0x16, 0x80, 0xf4, 0x01, 0xac, 0xc8, 0x01, 0x4c, 0x19, 0x90, 0xd7, 0x16, - 0x00, 0x51, 0x06, 0x5b, 0xbe, 0x16, 0x00, 0xef, 0xae, 0x16, 0x80, 0x98, - 0x01, 0x4f, 0x36, 0x70, 0xc8, 0x16, 0x00, 0xf1, 0xe9, 0x16, 0x00, 0x50, - 0xba, 0x64, 0xb1, 0x16, 0x00, 0xb3, 0x34, 0xb4, 0x26, 0x49, 0x26, 0xbe, - 0xa2, 0x16, 0x00, 0xf6, 0xa1, 0x16, 0x00, 0xf7, 0xa5, 0x16, 0x80, 0x11, - 0xf8, 0xea, 0x16, 0x00, 0xf9, 0xa4, 0x16, 0x80, 0x04, 0xfa, 0xce, 0x16, - 0x40, 0xf2, 0xa3, 0x16, 0x40, 0x4b, 0x27, 0xa2, 0xb9, 0x16, 0x40, 0x53, - 0xba, 0x48, 0xa6, 0x16, 0x00, 0x4e, 0xb8, 0x77, 0xcf, 0x16, 0x40, 0xe8, - 0xf2, 0x16, 0x80, 0x12, 0x56, 0xa1, 0x33, 0xcb, 0x16, 0x00, 0x47, 0x84, - 0xd1, 0xca, 0x16, 0x00, 0x43, 0xaa, 0x0a, 0xe5, 0x16, 0x40, 0x09, 0x05, - 0xbb, 0x01, 0xff, 0x44, 0x17, 0x00, 0xc6, 0x16, 0x00, 0x49, 0xbc, 0x26, - 0xd3, 0x16, 0x00, 0x48, 0xfa, 0xc3, 0xbd, 0x16, 0x00, 0x46, 0xf6, 0xda, - 0xd9, 0x16, 0x00, 0x46, 0x11, 0x5b, 0xbf, 0x16, 0x00, 0x45, 0x75, 0x7a, - 0xad, 0x16, 0x00, 0x45, 0xb2, 0x33, 0xcc, 0x16, 0x00, 0x45, 0xc1, 0x77, - 0xd0, 0x16, 0x00, 0x42, 0x7d, 0x21, 0xe7, 0x16, 0x40, 0xe5, 0xaf, 0x16, - 0x00, 0xee, 0xb0, 0x16, 0x00, 0xef, 0xf3, 0x16, 0x00, 0x45, 0xb5, 0xe6, - 0xd5, 0x16, 0x00, 0x43, 0xf2, 0x01, 0xa9, 0x16, 0x00, 0x4e, 0x70, 0x7b, - 0xdf, 0x16, 0x40, 0x51, 0x0a, 0x57, 0xda, 0x16, 0x00, 0x0b, 0xa7, 0x33, - 0x01, 0xff, 0x45, 0x4c, 0xe1, 0xc5, 0x16, 0x00, 0x48, 0xfa, 0xc3, 0xbc, - 0x16, 0x00, 0x46, 0xf6, 0xda, 0xd8, 0x16, 0x00, 0x45, 0x75, 0x7a, 0xac, - 0x16, 0x00, 0x42, 0x7d, 0x21, 0xe6, 0x16, 0x40, 0x03, 0x74, 0x44, 0x01, - 0xff, 0x42, 0x44, 0x00, 0xb4, 0x16, 0x00, 0xe1, 0xb2, 0x16, 0x40, 0x4b, - 0xf8, 0x97, 0xe8, 0x16, 0x00, 0x42, 0x1d, 0x01, 0xdd, 0x16, 0x80, 0x12, - 0x42, 0x0c, 0x00, 0xe1, 0x16, 0x00, 0x4c, 0x3d, 0x93, 0xc1, 0x16, 0x00, - 0x47, 0x9b, 0xd4, 0xc7, 0x16, 0x40, 0x43, 0xb9, 0x77, 0xdc, 0x16, 0x40, - 0x45, 0xc8, 0xe2, 0xbb, 0x16, 0x00, 0x46, 0x1c, 0xd9, 0xba, 0x16, 0x40, - 0x42, 0x17, 0x00, 0xb8, 0x16, 0x00, 0xa5, 0x01, 0xff, 0x49, 0x7b, 0xb4, - 0xb7, 0x16, 0x00, 0xf2, 0xc4, 0x16, 0x40, 0x4d, 0xee, 0x80, 0xa0, 0x16, - 0x00, 0x0d, 0x02, 0x86, 0x01, 0xff, 0xa1, 0x12, 0x42, 0x4e, 0x00, 0xf6, - 0x16, 0x00, 0x42, 0x34, 0x03, 0xf5, 0x16, 0x00, 0x42, 0x55, 0x0d, 0xf4, - 0x16, 0x40, 0xe3, 0xf7, 0x16, 0x00, 0x43, 0xd8, 0x1e, 0xf8, 0x16, 0x40, - 0x42, 0x17, 0x00, 0xe0, 0x16, 0x00, 0x49, 0x6f, 0xb7, 0xd6, 0x16, 0x00, - 0x42, 0x1d, 0x01, 0xb6, 0x16, 0x00, 0x42, 0x53, 0x00, 0xa7, 0x16, 0x40, - 0x4b, 0xe5, 0x96, 0xde, 0x16, 0x00, 0x06, 0xa0, 0x7e, 0x01, 0xff, 0xec, - 0xdb, 0x16, 0x00, 0xee, 0xc0, 0x16, 0x00, 0xf0, 0xd4, 0x16, 0x40, 0x43, - 0x24, 0x6a, 0xe3, 0x16, 0x00, 0xa5, 0x06, 0x46, 0x26, 0xde, 0xe2, 0x16, - 0x40, 0x43, 0x24, 0x6a, 0xe4, 0x16, 0x00, 0xee, 0xb3, 0x16, 0x40, 0x43, - 0x3a, 0x1b, 0xaa, 0x16, 0x00, 0x43, 0xd8, 0x1e, 0xab, 0x16, 0x00, 0x4a, - 0x9f, 0xaa, 0xc9, 0x16, 0x00, 0x46, 0x8c, 0xdb, 0xa8, 0x16, 0x40, 0x06, - 0xc4, 0x06, 0xb2, 0x01, 0x09, 0xb3, 0x58, 0x91, 0x01, 0x07, 0x2f, 0x39, - 0x01, 0xff, 0x05, 0xc3, 0x0a, 0x7e, 0xa6, 0x5f, 0x04, 0x46, 0x2a, 0x4f, - 0x4b, 0x1e, 0x11, 0x72, 0x0e, 0x01, 0xb3, 0x26, 0xb4, 0x01, 0xff, 0x42, - 0x92, 0x01, 0x69, 0x0e, 0x01, 0xa8, 0x0f, 0xb7, 0x01, 0xff, 0x44, 0x29, - 0x1d, 0x6a, 0x0e, 0x01, 0x49, 0x1c, 0x1d, 0x73, 0x0e, 0x41, 0x44, 0x2c, - 0x11, 0x6b, 0x0e, 0x01, 0x4b, 0x8f, 0x17, 0x74, 0x0e, 0x41, 0x04, 0x27, - 0x1d, 0x11, 0x02, 0x60, 0x25, 0x01, 0xff, 0x48, 0x21, 0x11, 0x77, 0x0e, - 0x01, 0x42, 0x2e, 0x11, 0x6e, 0x0e, 0x41, 0x48, 0x21, 0x11, 0x78, 0x0e, - 0x01, 0x42, 0x2e, 0x11, 0x6f, 0x0e, 0x41, 0x48, 0x21, 0x11, 0x7a, 0x0e, - 0x01, 0x42, 0x2e, 0x11, 0x71, 0x0e, 0x41, 0xa9, 0x0f, 0xaf, 0x01, 0xff, - 0x43, 0x2d, 0x11, 0x6c, 0x0e, 0x01, 0x4a, 0xa3, 0xb0, 0x75, 0x0e, 0x41, - 0x43, 0x09, 0x4c, 0x6d, 0x0e, 0x01, 0x4a, 0xb2, 0x38, 0x76, 0x0e, 0x41, - 0x48, 0x21, 0x11, 0x79, 0x0e, 0x01, 0xf9, 0x70, 0x0e, 0x41, 0x04, 0xbf, - 0x0a, 0x06, 0x4a, 0x03, 0xb0, 0x7e, 0x0e, 0x41, 0x44, 0x22, 0x00, 0x7b, - 0x0e, 0x01, 0x47, 0x2a, 0x01, 0x7c, 0x0e, 0x01, 0x45, 0x63, 0x73, 0x7d, - 0x0e, 0x41, 0x45, 0xc3, 0x0a, 0x67, 0x0e, 0x01, 0xa6, 0x29, 0x44, 0x46, - 0x2a, 0x68, 0x0e, 0x01, 0x43, 0xbf, 0x0a, 0x60, 0x0e, 0x01, 0xb3, 0x0f, - 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x62, 0x0e, 0x01, 0x42, 0x15, 0x02, - 0x61, 0x0e, 0x41, 0x44, 0x27, 0x1d, 0x66, 0x0e, 0x01, 0x42, 0x60, 0x25, - 0x65, 0x0e, 0x41, 0x43, 0xa7, 0x05, 0x64, 0x0e, 0x01, 0x43, 0xcb, 0x06, - 0x63, 0x0e, 0x41, 0x52, 0xe6, 0x4e, 0x60, 0xf3, 0x01, 0x48, 0xc2, 0xc1, - 0x16, 0xf9, 0x01, 0x42, 0x36, 0x01, 0xa8, 0xfa, 0x81, 0xb6, 0x03, 0x02, - 0x0f, 0x07, 0x8c, 0x03, 0x04, 0xd5, 0x17, 0x82, 0x01, 0xaf, 0x74, 0x42, - 0x1b, 0x03, 0x39, 0xf3, 0x81, 0x67, 0x06, 0x17, 0x21, 0x45, 0x03, 0xf3, - 0x0a, 0x06, 0x45, 0x17, 0xe9, 0xa3, 0xf6, 0x41, 0x80, 0x2d, 0x0e, 0xc0, - 0x75, 0x01, 0xff, 0x43, 0xb4, 0xf0, 0x65, 0xf2, 0x01, 0x42, 0x15, 0x16, - 0x60, 0xf2, 0x01, 0x42, 0x5b, 0x15, 0x61, 0xf2, 0x01, 0x02, 0xa4, 0x02, - 0x06, 0x42, 0x93, 0x0c, 0x63, 0xf2, 0x41, 0x42, 0x3c, 0x01, 0x62, 0xf2, - 0x01, 0x46, 0xc6, 0xdd, 0x64, 0xf2, 0x41, 0x47, 0x25, 0xd2, 0xcd, 0xf4, - 0x01, 0x46, 0x5a, 0xdd, 0x8b, 0xf7, 0x41, 0x49, 0xc3, 0xb4, 0x3a, 0x21, - 0x00, 0x53, 0x1d, 0x21, 0x67, 0x27, 0x00, 0x58, 0x5d, 0x28, 0x65, 0x27, - 0x00, 0x5d, 0x8d, 0x15, 0xcd, 0x2b, 0x00, 0x57, 0x0a, 0x31, 0xcf, 0x2b, - 0x40, 0x43, 0xc3, 0x05, 0xf5, 0xf3, 0x41, 0x44, 0xee, 0x0c, 0x13, 0xf4, - 0x01, 0x4b, 0xf3, 0xa0, 0xdc, 0xfa, 0x41, 0x47, 0x4b, 0xcc, 0x9a, 0x01, - 0x01, 0x4e, 0xd2, 0x74, 0x9b, 0x01, 0x01, 0xa4, 0xe4, 0x01, 0x08, 0xb5, - 0x5b, 0x33, 0x4e, 0x04, 0x7a, 0x97, 0x01, 0x01, 0xb3, 0x06, 0x4a, 0x9a, - 0x9d, 0x91, 0x01, 0x41, 0xa5, 0x06, 0x4b, 0x3c, 0x9b, 0x95, 0x01, 0x41, - 0x4b, 0x99, 0x9d, 0x92, 0x01, 0x01, 0x4d, 0x3a, 0x87, 0x98, 0x01, 0x01, - 0x02, 0xaf, 0x06, 0x01, 0xff, 0x48, 0xda, 0xc0, 0x90, 0x01, 0x01, 0x48, - 0xfe, 0x48, 0x93, 0x01, 0x41, 0xa5, 0x9e, 0x01, 0xa6, 0x68, 0x44, 0x46, - 0x2a, 0x68, 0x21, 0x00, 0x43, 0xbf, 0x0a, 0x60, 0x21, 0x80, 0x3e, 0x54, - 0x1b, 0x44, 0x83, 0x21, 0x00, 0xb3, 0x23, 0xb4, 0x01, 0xff, 0x42, 0x92, - 0x01, 0x69, 0x21, 0x80, 0x13, 0x44, 0x25, 0x01, 0x62, 0x21, 0x00, 0xb7, - 0x01, 0xff, 0x44, 0x46, 0x2b, 0x6b, 0x21, 0x00, 0xef, 0x61, 0x21, 0x40, - 0x49, 0xd4, 0x5c, 0x82, 0x21, 0x40, 0x44, 0x27, 0x1d, 0x66, 0x21, 0x00, - 0x42, 0x60, 0x25, 0x65, 0x21, 0xc0, 0x00, 0x4a, 0xa1, 0xa3, 0x85, 0x21, - 0x40, 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0x6d, 0x21, 0x80, 0x0d, 0x48, - 0xd5, 0x5c, 0x6f, 0x21, 0xc0, 0x00, 0x44, 0x8a, 0xe9, 0x80, 0x21, 0x40, - 0x49, 0xd4, 0x5c, 0x88, 0x21, 0x40, 0xa9, 0x06, 0x43, 0xcb, 0x06, 0x63, - 0x21, 0x40, 0x43, 0x09, 0x4c, 0x6c, 0x21, 0x80, 0x16, 0x42, 0x32, 0x00, - 0x64, 0x21, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0x6e, 0x21, - 0x00, 0x48, 0xd5, 0x5c, 0x81, 0x21, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x43, - 0xa7, 0x86, 0x21, 0x00, 0x48, 0xd5, 0x5c, 0x87, 0x21, 0x40, 0x44, 0xc9, - 0x00, 0x67, 0x21, 0x00, 0x45, 0x0b, 0x6e, 0x6a, 0x21, 0x40, 0x4c, 0xdd, - 0x8c, 0x96, 0x01, 0x01, 0x53, 0xf3, 0x48, 0x94, 0x01, 0x01, 0x4d, 0xe3, - 0x87, 0x99, 0x01, 0x41, 0x49, 0x17, 0xb2, 0xfb, 0xf9, 0x01, 0xa5, 0x06, - 0x59, 0xc5, 0x23, 0x23, 0xf9, 0x41, 0x4e, 0x26, 0x75, 0xde, 0xf5, 0x01, - 0x02, 0x18, 0x00, 0x01, 0xff, 0x47, 0x3f, 0x63, 0xa2, 0xf3, 0x01, 0x45, - 0xdc, 0xe7, 0xfc, 0xf6, 0x41, 0x42, 0xc2, 0x05, 0x80, 0xf6, 0x41, 0x47, - 0xed, 0x4a, 0xfc, 0xfd, 0x00, 0x44, 0x44, 0x84, 0x80, 0xf3, 0x81, 0xb3, - 0x0f, 0x03, 0xe3, 0x07, 0xa2, 0x0f, 0x43, 0xaa, 0x04, 0x46, 0xf9, 0x01, - 0x03, 0xca, 0x00, 0x4a, 0x42, 0x1d, 0x01, 0x8d, 0xf4, 0x81, 0x11, 0x17, - 0x52, 0x30, 0x01, 0xff, 0x50, 0xaa, 0x61, 0x2b, 0x29, 0x00, 0x50, 0x83, - 0x3f, 0x30, 0x29, 0x40, 0x80, 0x0c, 0x49, 0xc8, 0xb5, 0x90, 0xfa, 0x01, - 0x48, 0x72, 0xc4, 0x6d, 0xf5, 0x41, 0x45, 0x5c, 0x00, 0xda, 0x02, 0x00, - 0x44, 0x1a, 0xec, 0xdf, 0xf6, 0x01, 0x48, 0xa9, 0x0c, 0x57, 0x22, 0x00, - 0x4b, 0x52, 0x9b, 0x56, 0x22, 0x00, 0x48, 0xdc, 0x1c, 0x18, 0x22, 0x00, - 0x45, 0x9c, 0x01, 0x30, 0x2e, 0x40, 0x80, 0xc6, 0x08, 0x8d, 0xe3, 0x06, - 0x55, 0xc9, 0x3a, 0x3d, 0x2a, 0x00, 0x06, 0xa9, 0x01, 0x01, 0xff, 0x45, - 0xce, 0x00, 0x92, 0x21, 0x80, 0xba, 0x04, 0xa2, 0x9b, 0x04, 0x50, 0x0a, - 0x60, 0x3e, 0xf8, 0x01, 0xa4, 0xdb, 0x03, 0xa6, 0xcc, 0x03, 0xa8, 0xcb, - 0x02, 0x57, 0x86, 0x2e, 0xa7, 0xf8, 0x01, 0x51, 0x8e, 0x5b, 0xfe, 0x21, - 0x00, 0xb0, 0xb0, 0x02, 0x4f, 0x72, 0x70, 0x46, 0x2b, 0x00, 0xb2, 0x9b, - 0x02, 0xb3, 0x81, 0x02, 0xb4, 0x1f, 0xb7, 0x01, 0xff, 0x49, 0x21, 0xb4, - 0x9d, 0x21, 0x00, 0x4a, 0xfb, 0x0f, 0xe8, 0x21, 0xc0, 0x00, 0x80, 0x01, - 0xff, 0x49, 0xc4, 0xb6, 0xf0, 0x21, 0x00, 0x59, 0x25, 0x1e, 0x96, 0xf8, - 0x41, 0x55, 0x82, 0x3c, 0xa3, 0xf8, 0x01, 0x02, 0x0d, 0x00, 0x51, 0x02, - 0x15, 0x02, 0x01, 0xff, 0x4d, 0x16, 0x7e, 0xa0, 0x21, 0x00, 0x08, 0x09, - 0x02, 0x01, 0xff, 0x06, 0xce, 0x00, 0x06, 0x51, 0x26, 0x5d, 0x10, 0x29, - 0x40, 0x48, 0xfd, 0xb1, 0x05, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x56, 0xc5, 0x32, 0x01, 0x29, 0x00, 0xb4, 0x06, 0x4f, 0xcc, 0x32, 0x00, - 0x29, 0x40, 0x43, 0x24, 0x17, 0x16, 0x29, 0x80, 0x06, 0x52, 0x04, 0x06, - 0xee, 0x2b, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x56, 0xc5, 0x32, 0x18, - 0x29, 0x00, 0x4f, 0xcc, 0x32, 0x17, 0x29, 0x40, 0x05, 0x04, 0x02, 0x11, - 0x04, 0xcb, 0x1c, 0x01, 0xff, 0x45, 0xce, 0x00, 0xdb, 0x21, 0x00, 0x4a, - 0x2d, 0x5d, 0x0f, 0x29, 0x40, 0x4a, 0xe0, 0x01, 0x92, 0xf8, 0x01, 0x08, - 0x09, 0x02, 0x01, 0xff, 0x45, 0xce, 0x00, 0x62, 0x2b, 0x80, 0x0c, 0x4c, - 0x05, 0x8c, 0x6c, 0x2b, 0x00, 0x4d, 0xa7, 0x85, 0x86, 0x2b, 0x40, 0x80, - 0x01, 0xff, 0x64, 0x48, 0x09, 0x82, 0x2b, 0x00, 0x46, 0x82, 0x14, 0x72, - 0x2b, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0x17, 0xa6, 0x2a, 0xf8, - 0x01, 0x07, 0x3b, 0x01, 0x28, 0x4b, 0xef, 0x66, 0x2e, 0xf8, 0x01, 0x09, - 0x4c, 0xb9, 0x12, 0x4c, 0x3d, 0x90, 0x26, 0xf8, 0x01, 0x4c, 0xa9, 0x90, - 0x22, 0xf8, 0x01, 0x50, 0xea, 0x66, 0x32, 0xf8, 0x41, 0x49, 0xa5, 0x01, - 0xa7, 0x2b, 0x00, 0x47, 0x50, 0x02, 0xa5, 0x2b, 0x40, 0x51, 0x1c, 0x05, - 0x7c, 0x2b, 0x00, 0x4f, 0xcc, 0x32, 0x7c, 0x2b, 0x40, 0x4f, 0x6b, 0x65, - 0x52, 0xf8, 0x01, 0x02, 0x7c, 0x00, 0x01, 0xff, 0x4a, 0x2b, 0x92, 0x3a, - 0xf8, 0x01, 0x4b, 0x1f, 0x7b, 0xdd, 0x21, 0x40, 0x57, 0x2a, 0x2e, 0xa5, - 0xf8, 0x01, 0x45, 0x4d, 0xac, 0x6e, 0xf6, 0x41, 0x4c, 0xa8, 0x85, 0xc9, - 0x21, 0x00, 0x4b, 0x48, 0xa2, 0xf8, 0xfa, 0x41, 0xa1, 0x11, 0x05, 0x02, - 0x15, 0x01, 0xff, 0x45, 0xce, 0x00, 0x46, 0xf8, 0x01, 0x50, 0x0a, 0x60, - 0x42, 0xf8, 0x41, 0x42, 0x1b, 0x00, 0xf1, 0xfa, 0x01, 0x06, 0x67, 0x05, - 0x01, 0xff, 0x56, 0x17, 0x35, 0xcc, 0x21, 0x00, 0x0a, 0x6d, 0x05, 0x01, - 0xff, 0x04, 0xa5, 0x01, 0x31, 0x02, 0x50, 0x02, 0x01, 0xff, 0x80, 0x06, - 0x45, 0xa9, 0x01, 0xc0, 0x21, 0x40, 0x06, 0x5c, 0x00, 0x0c, 0x48, 0xfd, - 0xb1, 0x5b, 0x29, 0x00, 0x46, 0x82, 0x14, 0x53, 0x29, 0x40, 0xac, 0x06, - 0x61, 0x5a, 0x05, 0x64, 0x29, 0x40, 0x5d, 0x36, 0x15, 0x68, 0x29, 0x00, - 0x48, 0x9e, 0x69, 0x6c, 0x29, 0x40, 0x80, 0x06, 0x45, 0xa9, 0x01, 0xc1, - 0x21, 0x40, 0x66, 0x16, 0x06, 0x69, 0x29, 0x00, 0x4f, 0x97, 0x69, 0x6d, - 0x29, 0x00, 0x48, 0xfd, 0xb1, 0x5f, 0x29, 0x00, 0x46, 0x82, 0x14, 0x57, - 0x29, 0x40, 0x50, 0x92, 0x58, 0x36, 0xf8, 0x01, 0x60, 0xe5, 0x0f, 0xab, - 0xf8, 0x41, 0x4b, 0x06, 0x8c, 0xe2, 0x21, 0x00, 0x06, 0x3c, 0x01, 0x01, - 0xff, 0x45, 0xce, 0x00, 0xd2, 0x21, 0x80, 0x06, 0x4a, 0x2d, 0x5d, 0x0d, - 0x29, 0x40, 0x80, 0x06, 0x45, 0x22, 0x17, 0x1c, 0x29, 0x40, 0x48, 0xfd, - 0xb1, 0x07, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x46, 0x27, 0x05, - 0xcf, 0x21, 0x00, 0x4f, 0xcc, 0x32, 0x03, 0x29, 0x40, 0x5f, 0x64, 0x10, - 0xa9, 0xf8, 0x01, 0x05, 0xe2, 0x02, 0x06, 0x58, 0xdd, 0x29, 0xa1, 0xf8, - 0x41, 0x45, 0xce, 0x00, 0x95, 0x2b, 0x00, 0x53, 0x8a, 0x47, 0x8a, 0x2b, - 0x40, 0x80, 0x06, 0x45, 0x22, 0x17, 0x1a, 0x29, 0x40, 0xa1, 0xdf, 0x01, - 0x05, 0x7f, 0x05, 0xc7, 0x01, 0x54, 0xb7, 0x43, 0xc4, 0x21, 0x00, 0xb4, - 0x99, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, 0x50, 0x2a, 0x60, 0xb4, 0x21, - 0x00, 0x02, 0x3b, 0x01, 0x7e, 0x55, 0xd5, 0x01, 0x16, 0xf8, 0x01, 0x44, - 0x5d, 0x0e, 0xaa, 0x21, 0x00, 0xac, 0x5b, 0x59, 0x5b, 0x24, 0x06, 0xf8, - 0x01, 0x4c, 0x21, 0x91, 0x9a, 0xf8, 0x01, 0x4a, 0x33, 0xad, 0x45, 0x29, - 0x00, 0xb3, 0x31, 0xb4, 0x06, 0x4f, 0xcc, 0x32, 0xf8, 0x21, 0x40, 0x43, - 0x24, 0x17, 0xa3, 0x21, 0x80, 0x11, 0x03, 0xfb, 0x0b, 0x01, 0xff, 0x49, - 0xa5, 0x01, 0x0e, 0x2b, 0x00, 0x47, 0x50, 0x02, 0x0f, 0x2b, 0x40, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x56, 0xc5, 0x32, 0x15, 0x29, 0x00, 0x4f, 0xcc, - 0x32, 0x14, 0x29, 0x40, 0x05, 0x0d, 0x07, 0x06, 0x45, 0x28, 0x05, 0x9b, - 0x21, 0x40, 0x55, 0xd5, 0x01, 0x12, 0xf8, 0x01, 0x52, 0x03, 0x06, 0x02, - 0xf8, 0x41, 0x57, 0xd6, 0x28, 0x0a, 0xf8, 0x01, 0xaf, 0x01, 0xff, 0x42, - 0x1f, 0x00, 0xac, 0x21, 0x00, 0x48, 0x0f, 0xab, 0xb2, 0xf8, 0x41, 0x49, - 0x8d, 0xbd, 0x11, 0x29, 0x00, 0x54, 0xc7, 0x32, 0xfb, 0x21, 0x40, 0x07, - 0x8d, 0x2a, 0x11, 0x03, 0x83, 0x14, 0x01, 0xff, 0x42, 0x17, 0x00, 0xe5, - 0x21, 0x00, 0x4c, 0x10, 0x56, 0x1e, 0x29, 0x40, 0x4c, 0x87, 0x00, 0x43, - 0x2b, 0x00, 0x48, 0x8a, 0xc8, 0x44, 0x2b, 0x00, 0xf8, 0x47, 0x29, 0x40, - 0x43, 0x16, 0x00, 0xa6, 0x21, 0x80, 0x06, 0x4f, 0xe5, 0x0b, 0xc1, 0xf8, - 0x41, 0x51, 0x0b, 0x56, 0x20, 0x29, 0x40, 0x05, 0x5d, 0x00, 0x06, 0x63, - 0xac, 0x0a, 0xb6, 0xfb, 0x41, 0x4f, 0x10, 0x69, 0x75, 0x29, 0x00, 0x08, - 0xcc, 0x70, 0x0c, 0x55, 0x3f, 0x3d, 0x42, 0x29, 0x00, 0x4e, 0x93, 0x3d, - 0x74, 0x29, 0x40, 0x4f, 0x10, 0x69, 0x48, 0x2b, 0x00, 0x4e, 0x93, 0x3d, - 0x4c, 0x2b, 0x40, 0x07, 0xa0, 0x2d, 0x9c, 0x01, 0x5b, 0xfe, 0x1a, 0xe5, - 0x26, 0x00, 0x09, 0x9c, 0x01, 0x2b, 0xb3, 0x1d, 0x08, 0xf2, 0xc8, 0x01, - 0xff, 0x49, 0x07, 0xb6, 0x2b, 0x20, 0x00, 0x47, 0x34, 0x03, 0x67, 0x20, - 0x00, 0x44, 0xb9, 0x00, 0x0f, 0x20, 0x00, 0x48, 0x0a, 0xc7, 0x2e, 0x20, - 0x40, 0x5c, 0x72, 0x17, 0xa9, 0x27, 0x00, 0x57, 0x13, 0x2e, 0x38, 0x29, - 0x40, 0xa1, 0x59, 0x54, 0x6f, 0x40, 0xfd, 0x29, 0x00, 0xa4, 0x45, 0x4b, - 0x8f, 0x99, 0x7a, 0xcc, 0x01, 0x47, 0x7b, 0xce, 0x01, 0xcc, 0x01, 0x50, - 0x7a, 0x63, 0x0e, 0xf5, 0x01, 0xb2, 0x0c, 0x4c, 0xa9, 0x93, 0x03, 0xcc, - 0x01, 0x44, 0xd7, 0xc4, 0x9f, 0xcc, 0x41, 0x49, 0x40, 0xb3, 0x99, 0xcc, - 0x01, 0x44, 0x75, 0xaa, 0x67, 0xcc, 0x01, 0xaf, 0x01, 0xff, 0x05, 0x17, - 0x09, 0x06, 0x50, 0x3a, 0x63, 0xa3, 0xcc, 0x41, 0x47, 0xc9, 0xcc, 0xa1, - 0xcc, 0x01, 0x44, 0x6f, 0x20, 0x58, 0xcc, 0x41, 0x44, 0x5e, 0xed, 0x0f, - 0xcc, 0x01, 0x5a, 0x30, 0x21, 0xbb, 0x00, 0x40, 0x4c, 0xf0, 0x0e, 0x2a, - 0x23, 0x00, 0x4a, 0xb3, 0xaf, 0x62, 0xcc, 0x41, 0x56, 0x15, 0x32, 0x8d, - 0x05, 0x00, 0x48, 0x6a, 0xc1, 0x49, 0xcc, 0x01, 0x03, 0xbf, 0x59, 0x20, - 0xb3, 0x01, 0xff, 0x0f, 0xa8, 0x2d, 0x0d, 0x4a, 0xdf, 0xb0, 0xd5, 0x0f, - 0xc0, 0x00, 0x4a, 0xbb, 0x57, 0xd7, 0x0f, 0x40, 0x4c, 0xbd, 0x8b, 0x76, - 0xcc, 0x01, 0x4a, 0x9b, 0x28, 0x72, 0xcc, 0x41, 0xe8, 0x93, 0xcc, 0x81, - 0x04, 0xf4, 0x1c, 0xf9, 0x41, 0x50, 0x95, 0x28, 0x95, 0xcc, 0x41, 0xa1, - 0x93, 0x05, 0x06, 0xe1, 0x02, 0x82, 0x05, 0xa3, 0xd7, 0x04, 0x02, 0x3b, - 0x01, 0xa7, 0x04, 0xa6, 0x90, 0x04, 0x02, 0x22, 0x00, 0xa9, 0x03, 0x14, - 0xb3, 0x42, 0x98, 0x03, 0x56, 0xbf, 0x34, 0x1d, 0x2e, 0x00, 0x60, 0x85, - 0x0f, 0xca, 0x22, 0x00, 0xaf, 0xed, 0x02, 0x4b, 0x50, 0x21, 0x29, 0x00, - 0x80, 0xd0, 0x02, 0x57, 0x9a, 0x2f, 0x0d, 0x2e, 0x00, 0xb3, 0xb4, 0x01, - 0xb4, 0x4b, 0x09, 0x32, 0x00, 0x33, 0xb7, 0x01, 0xff, 0x05, 0xae, 0x02, - 0x06, 0x4b, 0x06, 0x95, 0xd9, 0x29, 0x40, 0xa3, 0x18, 0x52, 0xcb, 0x26, - 0x17, 0x30, 0x00, 0x4b, 0x50, 0x21, 0x86, 0x29, 0x00, 0x4e, 0x27, 0x26, - 0x1b, 0x30, 0x00, 0x56, 0x05, 0x09, 0x19, 0x30, 0x40, 0x4d, 0xb9, 0x67, - 0x0f, 0x30, 0x00, 0x4c, 0x24, 0x0b, 0x84, 0x29, 0x40, 0xa2, 0x06, 0x4d, - 0x1a, 0x2f, 0x06, 0xcc, 0x41, 0x4d, 0x1a, 0x7f, 0x21, 0x2e, 0x00, 0x47, - 0x92, 0xd1, 0xb9, 0x23, 0x40, 0x43, 0xe3, 0x02, 0xa2, 0x22, 0x00, 0xa8, - 0x27, 0x55, 0x06, 0x09, 0x15, 0x30, 0x00, 0xb2, 0x01, 0xff, 0x53, 0xdf, - 0x46, 0x0a, 0x2e, 0x00, 0x04, 0x1b, 0x01, 0x01, 0xff, 0x42, 0x68, 0x00, - 0xbf, 0x22, 0x80, 0x06, 0x56, 0x98, 0x1c, 0x6e, 0xfb, 0x41, 0x54, 0x8f, - 0x3e, 0xce, 0x29, 0x40, 0x04, 0x70, 0x87, 0x28, 0x4c, 0xd5, 0x91, 0xed, - 0xf5, 0x01, 0x04, 0x26, 0x01, 0x01, 0xff, 0x4d, 0xb8, 0x4b, 0x88, 0xfb, - 0x01, 0x09, 0x2a, 0x01, 0x01, 0xff, 0x45, 0x33, 0x01, 0x8a, 0xfb, 0x01, - 0x57, 0x9d, 0x2e, 0xa1, 0xce, 0x01, 0x57, 0xae, 0x30, 0xaa, 0xce, 0x41, - 0x48, 0x6a, 0xc4, 0x0d, 0xcc, 0x01, 0x5a, 0x00, 0x22, 0xc3, 0xfb, 0x41, - 0x55, 0xff, 0x37, 0xc6, 0x27, 0x00, 0xa5, 0x7f, 0xa9, 0x71, 0x02, 0x6f, - 0x02, 0x4f, 0x4d, 0x28, 0x26, 0x5d, 0x00, 0x80, 0x06, 0x53, 0x0a, 0x26, - 0x03, 0x2e, 0x40, 0x80, 0x01, 0xff, 0x49, 0x56, 0x57, 0xa5, 0x23, 0x00, - 0x4c, 0xb9, 0x8f, 0xa6, 0x23, 0x00, 0x4c, 0x99, 0x94, 0xa4, 0x23, 0x00, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x4d, 0xa0, 0x80, 0x58, 0x2e, 0x00, 0x45, - 0x22, 0x7f, 0x46, 0x20, 0x00, 0x46, 0x27, 0x05, 0x56, 0x2e, 0x00, 0x08, - 0xda, 0xc8, 0x06, 0x48, 0x78, 0x58, 0x8c, 0x29, 0x40, 0x4d, 0xb6, 0x7f, - 0x8e, 0x29, 0x00, 0x4a, 0xbd, 0xaf, 0x90, 0x29, 0x40, 0x44, 0xf1, 0x26, - 0x68, 0xf5, 0x81, 0x06, 0x4a, 0x11, 0x7b, 0xe9, 0xf5, 0x41, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x4e, 0xec, 0x78, 0x69, 0xf5, 0x01, 0x51, 0xf3, 0x5c, - 0x6a, 0xf5, 0x41, 0x50, 0x5a, 0x60, 0x27, 0x2e, 0x00, 0x53, 0x48, 0x0b, - 0x19, 0x20, 0x40, 0x50, 0x95, 0x0f, 0xcc, 0x22, 0x00, 0x51, 0xb4, 0x4b, - 0x8b, 0xfb, 0x41, 0x80, 0x01, 0xff, 0x49, 0x56, 0x57, 0x9f, 0x23, 0x00, - 0x4a, 0x0d, 0xab, 0xa0, 0x23, 0x00, 0x4a, 0x8f, 0xb0, 0x9e, 0x23, 0x40, - 0x03, 0xc4, 0x07, 0x0c, 0x4f, 0x18, 0x70, 0xbc, 0xfb, 0x01, 0x49, 0x02, - 0xad, 0xd6, 0x27, 0x40, 0x4c, 0xc3, 0x0a, 0x95, 0x25, 0x00, 0x4d, 0xa1, - 0x1c, 0x87, 0xfb, 0x41, 0x4c, 0xe1, 0x02, 0xe9, 0xfb, 0x01, 0x4c, 0xe3, - 0x10, 0xe1, 0xfb, 0x41, 0x03, 0x24, 0x00, 0x06, 0x55, 0x43, 0x3c, 0x7d, - 0xf5, 0x41, 0x5a, 0x58, 0x1e, 0x00, 0xce, 0x01, 0x02, 0x33, 0x01, 0x38, - 0xa6, 0x2a, 0x65, 0xb7, 0x07, 0x11, 0xce, 0x01, 0x57, 0x9d, 0x2e, 0xa0, - 0xce, 0x01, 0x4c, 0x19, 0x04, 0x8d, 0xfb, 0x01, 0x4b, 0x43, 0xa0, 0xb3, - 0xfb, 0x01, 0x56, 0xa3, 0x36, 0x0e, 0xce, 0x01, 0x57, 0xae, 0x30, 0xab, - 0xce, 0x01, 0x4d, 0xcd, 0x88, 0x0c, 0xce, 0x41, 0x4c, 0xe9, 0x8f, 0xa5, - 0xcc, 0x01, 0x45, 0x40, 0x64, 0xba, 0xfb, 0x41, 0x04, 0xe3, 0x02, 0x06, - 0x43, 0x35, 0x01, 0x90, 0x25, 0x40, 0x46, 0xe7, 0x02, 0xd7, 0x25, 0x00, - 0x44, 0xe2, 0x12, 0xe9, 0x2b, 0x40, 0xa9, 0x06, 0x44, 0xd1, 0x23, 0x0b, - 0x23, 0x40, 0x47, 0xab, 0xb6, 0x7d, 0x29, 0x00, 0x50, 0x62, 0x50, 0x89, - 0xfb, 0x41, 0x59, 0x04, 0x26, 0x05, 0x2e, 0x00, 0x05, 0x3d, 0x01, 0x01, - 0xff, 0xa1, 0x12, 0x4b, 0x50, 0x21, 0x29, 0x2e, 0x00, 0x4e, 0xee, 0x04, - 0x1d, 0x20, 0x00, 0x4c, 0x05, 0x95, 0xdb, 0x29, 0x40, 0x4c, 0xf0, 0x0e, - 0x0b, 0x30, 0x00, 0x56, 0x35, 0x36, 0x70, 0x29, 0x40, 0x46, 0x0b, 0xc2, - 0x09, 0x23, 0x00, 0x4d, 0xb9, 0x67, 0x0d, 0x30, 0x00, 0x4c, 0x24, 0x0b, - 0x7d, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x0d, 0xab, 0xad, 0x23, - 0x00, 0x4c, 0x55, 0x90, 0xac, 0x23, 0x00, 0x4a, 0x8f, 0xb0, 0xab, 0x23, - 0x40, 0x52, 0xcb, 0x26, 0x11, 0x30, 0x00, 0x56, 0x05, 0x09, 0x98, 0x29, - 0x40, 0xae, 0x1a, 0xb2, 0x01, 0xff, 0x56, 0x40, 0x17, 0x94, 0x29, 0x00, - 0x09, 0xfa, 0x05, 0x01, 0xff, 0x4c, 0x99, 0x8b, 0xf4, 0x27, 0x00, 0x4c, - 0xd3, 0x14, 0xf4, 0x21, 0x40, 0x02, 0x06, 0x00, 0x43, 0xa7, 0x01, 0xff, - 0x49, 0x2b, 0xb6, 0xef, 0xf5, 0x01, 0x42, 0x68, 0x00, 0x1f, 0x22, 0xc0, - 0x00, 0x80, 0x01, 0xff, 0x47, 0x14, 0x09, 0x09, 0x30, 0x80, 0x23, 0x5a, - 0x28, 0x1f, 0x01, 0x2e, 0x00, 0x53, 0x2f, 0x1f, 0x00, 0x2e, 0x00, 0x53, - 0x2e, 0x4d, 0x9c, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x43, 0x3e, - 0x17, 0xbe, 0x22, 0x00, 0x56, 0x07, 0x33, 0x7c, 0x23, 0x40, 0x49, 0xa5, - 0x3a, 0x92, 0x29, 0x40, 0x56, 0xb9, 0x0a, 0x7f, 0xfb, 0x01, 0x56, 0xfb, - 0x36, 0x7e, 0xfb, 0x41, 0x44, 0x46, 0x1c, 0x59, 0xf3, 0x01, 0x47, 0x4e, - 0xcd, 0x58, 0xf3, 0x41, 0x07, 0xcd, 0x00, 0x01, 0xff, 0x05, 0x4f, 0x14, - 0x31, 0x05, 0xc3, 0x00, 0x21, 0x06, 0xc8, 0x00, 0x11, 0x03, 0x11, 0x15, - 0x01, 0xff, 0x44, 0xc3, 0x00, 0xb2, 0x2b, 0x00, 0x45, 0xc8, 0x00, 0xb3, - 0x2b, 0x40, 0x44, 0xa5, 0x01, 0xb7, 0x2b, 0x00, 0x42, 0x50, 0x02, 0xb5, - 0x2b, 0x40, 0x44, 0xa5, 0x01, 0xb6, 0x2b, 0x00, 0x42, 0x50, 0x02, 0xb4, - 0x2b, 0x40, 0x44, 0xc3, 0x00, 0xb0, 0x2b, 0x00, 0x45, 0xc8, 0x00, 0xb1, - 0x2b, 0x40, 0xa3, 0xb8, 0x05, 0x02, 0x06, 0x00, 0xa7, 0x05, 0x4c, 0x31, - 0x8d, 0x3b, 0x20, 0x00, 0x02, 0xc6, 0x06, 0xaa, 0x04, 0x05, 0x8f, 0xe4, - 0xcb, 0x02, 0x4b, 0x76, 0x57, 0x0c, 0xf6, 0x01, 0x4d, 0x3b, 0x84, 0x97, - 0xf3, 0x01, 0x53, 0xe5, 0x1f, 0xfd, 0xff, 0x00, 0xb3, 0x99, 0x02, 0x05, - 0x7c, 0xe8, 0x82, 0x02, 0xb6, 0x01, 0xff, 0x04, 0x14, 0x04, 0x06, 0x4d, - 0x0b, 0x85, 0x9e, 0xf4, 0x41, 0x80, 0xa9, 0x01, 0x02, 0x06, 0x00, 0x01, - 0xff, 0x45, 0x04, 0x02, 0xa3, 0x29, 0x80, 0x96, 0x01, 0x45, 0xe8, 0x04, - 0x41, 0x2e, 0x00, 0x07, 0x3b, 0x01, 0x79, 0x49, 0x10, 0xb6, 0xb0, 0x29, - 0x00, 0x52, 0x72, 0x50, 0x11, 0x2e, 0x00, 0x60, 0x65, 0x0f, 0x95, 0xf5, - 0x01, 0x48, 0xff, 0x71, 0x10, 0x23, 0x00, 0xb0, 0x53, 0x4d, 0xd6, 0x33, - 0x2e, 0x2e, 0x00, 0xb2, 0x39, 0xb3, 0x2b, 0xb4, 0x06, 0x4c, 0xe1, 0x94, - 0x94, 0xf5, 0x41, 0x06, 0xa6, 0xd9, 0x13, 0x44, 0xae, 0x22, 0x3d, 0x22, - 0x80, 0x06, 0x4b, 0xeb, 0x9f, 0x37, 0x20, 0x40, 0x47, 0xf8, 0x12, 0xcd, - 0x22, 0x40, 0x49, 0x77, 0xb5, 0x93, 0xf5, 0x01, 0x47, 0x08, 0xd4, 0x92, - 0xf5, 0x41, 0x53, 0xcc, 0x46, 0x43, 0x21, 0x00, 0x48, 0x6f, 0x58, 0x4f, - 0x20, 0x40, 0x5f, 0x83, 0x10, 0x91, 0xf5, 0x01, 0x4a, 0x30, 0x44, 0xfe, - 0x2b, 0x00, 0x5a, 0x16, 0x21, 0x19, 0x26, 0x40, 0x4b, 0x31, 0x9b, 0x4b, - 0x20, 0x00, 0x44, 0x64, 0x1a, 0x35, 0x20, 0x40, 0x45, 0x63, 0x1a, 0x36, - 0x20, 0x80, 0x06, 0x4f, 0xf8, 0x71, 0xed, 0x2a, 0x40, 0x4f, 0xed, 0x04, - 0x1d, 0x30, 0x40, 0x4e, 0xc2, 0x5d, 0xa5, 0x29, 0x40, 0x4d, 0x1e, 0x14, - 0x7f, 0xf6, 0x01, 0x45, 0x40, 0x13, 0x8d, 0x00, 0x00, 0x02, 0xc3, 0x01, - 0x2d, 0x47, 0x69, 0x30, 0x5c, 0x00, 0x80, 0x11, 0x15, 0x93, 0x3d, 0x01, - 0xff, 0x4f, 0x37, 0x07, 0x41, 0x2b, 0x00, 0x50, 0xb3, 0x02, 0x47, 0x2b, - 0x40, 0x80, 0x01, 0xff, 0x48, 0xdc, 0x1c, 0xf5, 0x29, 0x00, 0x50, 0x6a, - 0x64, 0xc8, 0x27, 0x00, 0x56, 0x53, 0x37, 0xf7, 0x29, 0x40, 0x5e, 0xc8, - 0x12, 0xc8, 0xf7, 0x01, 0x47, 0x2e, 0x20, 0x8d, 0x00, 0x40, 0x44, 0xc3, - 0x00, 0x90, 0x2b, 0x00, 0x45, 0xc8, 0x00, 0x91, 0x2b, 0x00, 0x46, 0xeb, - 0x07, 0xce, 0x23, 0x40, 0x45, 0xe2, 0xe6, 0x1f, 0x21, 0x00, 0x02, 0x19, - 0x01, 0x01, 0xff, 0x11, 0x6e, 0x59, 0x06, 0x43, 0xba, 0x52, 0xbb, 0xf6, - 0x41, 0xd1, 0xe0, 0x26, 0x00, 0xd2, 0xe1, 0x26, 0x40, 0x0f, 0x6d, 0x32, - 0xc4, 0x01, 0x07, 0xc1, 0x05, 0x37, 0x4c, 0x57, 0x26, 0x5f, 0xa9, 0x00, - 0xb6, 0x01, 0xff, 0x45, 0x5c, 0x23, 0x53, 0xa9, 0x00, 0x0a, 0xd2, 0x75, - 0x01, 0xff, 0xa1, 0x19, 0xe5, 0x49, 0xa9, 0x80, 0x0c, 0xe9, 0x47, 0xa9, - 0x00, 0xef, 0x4b, 0xa9, 0x00, 0xf5, 0x48, 0xa9, 0x40, 0xe1, 0x4e, 0xa9, - 0x00, 0xf5, 0x4d, 0xa9, 0x40, 0xe9, 0x4a, 0xa9, 0x00, 0xf5, 0x4c, 0xa9, - 0x40, 0xe1, 0x46, 0xa9, 0x00, 0x42, 0x16, 0x00, 0x37, 0xa9, 0x00, 0x42, - 0x37, 0x00, 0x39, 0xa9, 0x00, 0x42, 0xa1, 0x10, 0x34, 0xa9, 0x00, 0x42, - 0x24, 0x02, 0x31, 0xa9, 0x00, 0x42, 0x22, 0x00, 0x41, 0xa9, 0x00, 0x42, - 0xbd, 0x26, 0x3a, 0xa9, 0x00, 0x42, 0x1b, 0x02, 0x30, 0xa9, 0x00, 0x42, - 0x74, 0x00, 0x3e, 0xa9, 0x00, 0xad, 0x49, 0xae, 0x24, 0x42, 0x6c, 0x09, - 0x36, 0xa9, 0x00, 0x42, 0x71, 0x00, 0x3d, 0xa9, 0x00, 0x42, 0x15, 0x06, - 0x3c, 0xa9, 0x00, 0x42, 0x12, 0x00, 0x33, 0xa9, 0x00, 0x42, 0xa9, 0x01, - 0x40, 0xa9, 0x00, 0x42, 0x34, 0x22, 0x3f, 0xa9, 0x40, 0xe1, 0x35, 0xa9, - 0x00, 0x42, 0xa1, 0x10, 0x44, 0xa9, 0x00, 0xa7, 0x0d, 0xb9, 0x01, 0xff, - 0xe1, 0x3b, 0xa9, 0x00, 0x42, 0xbd, 0x26, 0x45, 0xa9, 0x40, 0xe1, 0x32, - 0xa9, 0x00, 0x42, 0x24, 0x02, 0x43, 0xa9, 0x40, 0xe1, 0x38, 0xa9, 0x00, - 0x42, 0x16, 0x00, 0x42, 0xa9, 0x40, 0xe8, 0x52, 0xa9, 0x00, 0xee, 0x50, - 0xa9, 0x80, 0x04, 0xf2, 0x51, 0xa9, 0x40, 0xe7, 0x4f, 0xa9, 0x40, 0x1d, - 0xe4, 0x15, 0x06, 0x4b, 0xc7, 0xa0, 0xae, 0x00, 0x40, 0xe1, 0xe6, 0xf1, - 0x01, 0xe2, 0xe7, 0xf1, 0x01, 0xe3, 0xe8, 0xf1, 0x01, 0xe4, 0xe9, 0xf1, - 0x01, 0xe5, 0xea, 0xf1, 0x01, 0xe6, 0xeb, 0xf1, 0x01, 0xe7, 0xec, 0xf1, - 0x01, 0xe8, 0xed, 0xf1, 0x01, 0xe9, 0xee, 0xf1, 0x01, 0xea, 0xef, 0xf1, - 0x01, 0xeb, 0xf0, 0xf1, 0x01, 0xec, 0xf1, 0xf1, 0x01, 0xed, 0xf2, 0xf1, - 0x01, 0xee, 0xf3, 0xf1, 0x01, 0xef, 0xf4, 0xf1, 0x01, 0xf0, 0xf5, 0xf1, - 0x01, 0xf1, 0xf6, 0xf1, 0x01, 0xf2, 0xf7, 0xf1, 0x01, 0xf3, 0xf8, 0xf1, - 0x01, 0xf4, 0xf9, 0xf1, 0x01, 0xf5, 0xfa, 0xf1, 0x01, 0xf6, 0xfb, 0xf1, - 0x01, 0xf7, 0xfc, 0xf1, 0x01, 0xf8, 0xfd, 0xf1, 0x01, 0xf9, 0xfe, 0xf1, - 0x01, 0xfa, 0xff, 0xf1, 0x41, 0x45, 0x47, 0xe1, 0x4e, 0xf3, 0x01, 0x4d, - 0xbe, 0x81, 0xe7, 0xf9, 0x41, 0xa5, 0x51, 0x4d, 0xdd, 0x64, 0x1e, 0x00, - 0x00, 0x51, 0x16, 0x5c, 0x99, 0xf6, 0x01, 0x03, 0x99, 0x24, 0x01, 0xff, - 0x4f, 0x56, 0x29, 0x7c, 0x26, 0x00, 0x0f, 0xee, 0x6c, 0x01, 0xff, 0x51, - 0xd5, 0x58, 0x7a, 0x26, 0x00, 0x05, 0xa9, 0x20, 0x01, 0xff, 0x4a, 0x91, - 0xa4, 0x73, 0x26, 0x00, 0x4a, 0xa5, 0xa4, 0x74, 0x26, 0x00, 0x4a, 0xb9, - 0xa4, 0x75, 0x26, 0x00, 0x4a, 0xc3, 0xa4, 0x76, 0x26, 0x00, 0x4a, 0xcd, - 0xa4, 0x77, 0x26, 0x00, 0x4a, 0xd7, 0xa4, 0x78, 0x26, 0x00, 0x4a, 0xe1, - 0xa4, 0x79, 0x26, 0x40, 0x43, 0x4c, 0x06, 0xfe, 0xf9, 0x01, 0x46, 0x40, - 0xdc, 0x12, 0xcc, 0x41, 0x44, 0x02, 0xec, 0x07, 0xf4, 0x81, 0xcd, 0x01, - 0xa3, 0xb3, 0x01, 0x02, 0x00, 0x00, 0x97, 0x01, 0xa9, 0x15, 0xed, 0x0f, - 0xf4, 0x01, 0xf4, 0x00, 0xf4, 0x81, 0x06, 0x43, 0x95, 0xf1, 0x92, 0xfa, - 0x41, 0x42, 0xb5, 0x00, 0x36, 0x22, 0x40, 0x05, 0x34, 0xe5, 0x70, 0xee, - 0xc6, 0x26, 0x80, 0x65, 0x04, 0x1b, 0x03, 0x01, 0xff, 0x4c, 0xcd, 0x8a, - 0x1a, 0xf9, 0x01, 0x45, 0xe8, 0x04, 0x34, 0x2e, 0x00, 0x43, 0xd4, 0x09, - 0x33, 0x2e, 0x80, 0x47, 0x44, 0x3c, 0xc8, 0x0a, 0x27, 0x00, 0x44, 0x77, - 0x0d, 0x0b, 0x27, 0x80, 0x29, 0x54, 0xe9, 0x2a, 0x06, 0x2e, 0x00, 0xad, - 0x0f, 0xb3, 0x01, 0xff, 0x58, 0x7d, 0x29, 0xcc, 0xfb, 0x01, 0x45, 0xac, - 0x05, 0x0b, 0x2e, 0x40, 0x46, 0xc3, 0x62, 0x6a, 0xf1, 0x01, 0x46, 0x67, - 0x46, 0x6b, 0xf1, 0x01, 0x46, 0xe0, 0x0d, 0x6c, 0xf1, 0x41, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x4f, 0x93, 0x10, 0x90, 0xf5, 0x01, 0x64, 0x6c, 0x09, - 0x96, 0xf5, 0x41, 0x58, 0xe5, 0x2a, 0x07, 0x2e, 0x40, 0x43, 0xc3, 0x7f, - 0x08, 0xf3, 0x41, 0x43, 0x47, 0x63, 0x83, 0xf6, 0x01, 0x45, 0x4f, 0xe8, - 0xe4, 0xf6, 0x41, 0x51, 0x81, 0x57, 0xb7, 0x23, 0x00, 0xef, 0xfb, 0xf4, - 0xc1, 0x00, 0x47, 0x61, 0xca, 0x18, 0xf5, 0x01, 0x4b, 0xb9, 0x96, 0x22, - 0x26, 0x40, 0x44, 0x2e, 0xec, 0x9d, 0xf9, 0x01, 0x04, 0xa1, 0x01, 0x01, - 0xff, 0x43, 0x47, 0x63, 0xce, 0xf3, 0x01, 0x4a, 0xc1, 0xab, 0xcd, 0xf3, - 0x41, 0x45, 0xe0, 0x07, 0x30, 0xf4, 0x41, 0xa1, 0x24, 0x06, 0xd8, 0x33, - 0x0c, 0x46, 0xf4, 0xd9, 0xbb, 0x26, 0x00, 0x4c, 0xf0, 0x04, 0x22, 0x00, - 0x40, 0x80, 0x06, 0x4b, 0xbf, 0x65, 0x5f, 0x22, 0x40, 0x50, 0xad, 0x00, - 0x48, 0x20, 0x00, 0x44, 0xb9, 0x00, 0x3f, 0x00, 0x40, 0x02, 0xd7, 0x0c, - 0x12, 0x43, 0x27, 0x14, 0x7e, 0xf7, 0x01, 0x49, 0x69, 0x53, 0x69, 0x26, - 0x00, 0x59, 0xeb, 0x25, 0x16, 0x2a, 0x40, 0x04, 0x2f, 0x0d, 0x11, 0x05, - 0xf9, 0x4a, 0x01, 0xff, 0x51, 0xf3, 0x25, 0x0c, 0x2a, 0x00, 0x45, 0x63, - 0x1a, 0x57, 0x20, 0x40, 0x06, 0x13, 0x01, 0x46, 0x06, 0x6d, 0x02, 0x01, - 0xff, 0x44, 0xc3, 0x00, 0x98, 0x25, 0x80, 0x14, 0x45, 0xc8, 0x00, 0x9d, - 0x25, 0xc0, 0x00, 0x4f, 0xd7, 0x38, 0x9e, 0x25, 0xc0, 0x00, 0x50, 0x2f, - 0x43, 0x9f, 0x25, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x06, 0x13, 0x01, - 0x11, 0x16, 0x11, 0x37, 0x01, 0xff, 0x44, 0xc3, 0x00, 0x9b, 0x25, 0x00, - 0x45, 0xc8, 0x00, 0x9c, 0x25, 0x40, 0x54, 0x2b, 0x43, 0x99, 0x25, 0x00, - 0x45, 0xc8, 0x00, 0x9a, 0x25, 0x40, 0x44, 0xc3, 0x00, 0x96, 0x25, 0x00, - 0x45, 0xc8, 0x00, 0x97, 0x25, 0x40, 0xa1, 0x8e, 0x18, 0xa5, 0xfb, 0x15, - 0xa8, 0xe5, 0x0e, 0xa9, 0xde, 0x0d, 0xac, 0xf1, 0x07, 0x4d, 0xbd, 0x84, - 0x11, 0xcc, 0x01, 0xaf, 0x8c, 0x06, 0xb2, 0xfc, 0x01, 0x0f, 0x62, 0x71, - 0x33, 0xb5, 0x01, 0xff, 0x58, 0xdd, 0x26, 0xe2, 0xf4, 0x01, 0x04, 0xba, - 0x0b, 0x1a, 0xb2, 0x0c, 0x45, 0x27, 0xd2, 0xcc, 0xf4, 0x01, 0x5c, 0xc2, - 0x18, 0xae, 0xf6, 0x41, 0x49, 0xa7, 0xbb, 0x9c, 0xf4, 0x01, 0x42, 0x1b, - 0x03, 0x5b, 0xf4, 0x41, 0x4b, 0x5e, 0x97, 0x08, 0x20, 0x00, 0x4f, 0x44, - 0x71, 0x4e, 0x2e, 0x40, 0x0f, 0x95, 0x6b, 0xb4, 0x01, 0x07, 0xc1, 0x05, - 0x3f, 0x07, 0x2f, 0x39, 0x0c, 0x4c, 0x57, 0x26, 0x99, 0x0b, 0x01, 0x53, - 0x96, 0x4c, 0x9a, 0x0b, 0x41, 0x44, 0xca, 0x06, 0xac, 0x0b, 0x01, 0x43, - 0xbf, 0x0a, 0xa9, 0x0b, 0x81, 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, - 0xad, 0x0b, 0x01, 0x44, 0x25, 0x01, 0xab, 0x0b, 0x01, 0xb7, 0x01, 0xff, - 0x44, 0x29, 0x1d, 0xae, 0x0b, 0x01, 0xef, 0xaa, 0x0b, 0x41, 0x48, 0x21, - 0x11, 0xaf, 0x0b, 0x41, 0x45, 0x58, 0xab, 0x80, 0x0b, 0x01, 0x44, 0x0a, - 0xec, 0x81, 0x0b, 0x01, 0x46, 0xda, 0x48, 0x83, 0x0b, 0x01, 0x45, 0xa1, - 0xa8, 0x82, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x84, 0x0b, 0x81, 0x4c, 0x44, - 0x8e, 0xed, 0x89, 0x0b, 0x01, 0x46, 0x9c, 0xda, 0x8a, 0x0b, 0x01, 0x48, - 0xaa, 0xc5, 0x8b, 0x0b, 0x01, 0x43, 0x54, 0x22, 0x8c, 0x0b, 0x01, 0x42, - 0x6f, 0x02, 0x8e, 0x0b, 0x01, 0xb3, 0x18, 0x43, 0x1e, 0xc2, 0x91, 0x0b, - 0x01, 0x4d, 0xc0, 0x88, 0x85, 0x0b, 0x01, 0x44, 0x58, 0x51, 0x88, 0x0b, - 0x01, 0x45, 0x52, 0x51, 0x86, 0x0b, 0x41, 0xa1, 0x06, 0x43, 0x0e, 0x16, - 0x90, 0x0b, 0x41, 0x43, 0x89, 0xe7, 0x8f, 0x0b, 0x01, 0x44, 0x39, 0xe1, - 0x8d, 0x0b, 0x41, 0x42, 0x53, 0x00, 0x87, 0x0b, 0x41, 0x45, 0x46, 0x10, - 0x9b, 0x0b, 0x01, 0x43, 0xd4, 0x09, 0x9c, 0x0b, 0x41, 0x4a, 0xe5, 0xa5, - 0xff, 0xf4, 0x01, 0xa5, 0x86, 0x01, 0xa9, 0x30, 0xaf, 0x01, 0xff, 0x49, - 0x57, 0xb4, 0xaf, 0xf9, 0x01, 0x4c, 0xfd, 0x8d, 0xc7, 0xf6, 0x01, 0x47, - 0x62, 0xcf, 0x05, 0x23, 0x00, 0xb0, 0x06, 0x47, 0xe9, 0xd2, 0xd8, 0x2b, - 0x40, 0x49, 0x3d, 0xb6, 0x4a, 0x21, 0x00, 0x46, 0xa6, 0x23, 0x37, 0x22, - 0xc0, 0x00, 0x45, 0xac, 0x0c, 0x1d, 0x22, 0x40, 0x42, 0x2a, 0x02, 0x32, - 0x20, 0x00, 0xae, 0x29, 0x02, 0xa6, 0x0a, 0x01, 0xff, 0x4a, 0xcb, 0xa6, - 0x9e, 0x00, 0x00, 0x06, 0x72, 0xdd, 0x01, 0xff, 0x80, 0x0b, 0x8d, 0x01, - 0xff, 0xd1, 0x91, 0x00, 0x00, 0xd2, 0x92, 0x00, 0x40, 0x43, 0xbf, 0x0a, - 0x91, 0x00, 0x00, 0x43, 0xd0, 0x09, 0x92, 0x00, 0x40, 0x42, 0x73, 0x02, - 0x34, 0xf9, 0x81, 0x16, 0xb4, 0x01, 0xff, 0x4e, 0x61, 0x58, 0x99, 0x23, - 0x00, 0x42, 0x33, 0x00, 0xa8, 0xf5, 0xc1, 0x00, 0x45, 0xae, 0xde, 0xb6, - 0xf5, 0x41, 0x42, 0xee, 0x00, 0x78, 0xf4, 0x41, 0x45, 0x45, 0xc7, 0x7a, - 0x22, 0x80, 0xa6, 0x02, 0x06, 0x22, 0xd9, 0x8f, 0x02, 0xb3, 0x0c, 0x44, - 0x7a, 0xef, 0x68, 0xf9, 0x01, 0x4a, 0x07, 0xb1, 0x97, 0x23, 0x40, 0x4d, - 0x04, 0x80, 0x1e, 0x21, 0x00, 0x1b, 0xad, 0x1a, 0x01, 0xff, 0x02, 0xe8, - 0x04, 0xe5, 0x01, 0xa5, 0xd0, 0x01, 0x53, 0x3a, 0x29, 0x19, 0xfe, 0x00, - 0x0c, 0xaa, 0x1f, 0xb9, 0x01, 0xac, 0x6a, 0x4d, 0xd6, 0x33, 0x16, 0xfe, - 0x00, 0x06, 0xc8, 0x00, 0x12, 0x49, 0xac, 0xbc, 0x14, 0xfe, 0x00, 0x4e, - 0x26, 0x7c, 0x30, 0xfe, 0x00, 0x4d, 0xa6, 0x88, 0x34, 0xfe, 0x40, 0x4d, - 0xef, 0x0e, 0x40, 0xfe, 0x00, 0x58, 0xc5, 0x26, 0x3c, 0xfe, 0x00, 0xa3, - 0x34, 0x54, 0x97, 0x40, 0x3e, 0xfe, 0x00, 0x4b, 0x50, 0x21, 0x36, 0xfe, - 0x00, 0x4e, 0x27, 0x26, 0x48, 0xfe, 0x00, 0x56, 0x05, 0x09, 0x3a, 0xfe, - 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, 0x4e, 0xb8, 0x67, 0x44, 0xfe, 0x00, - 0x0e, 0xcb, 0x26, 0x01, 0xff, 0x44, 0x17, 0x09, 0x18, 0xfe, 0x00, 0x44, - 0x92, 0xed, 0x18, 0xfe, 0x40, 0x4d, 0xb9, 0x67, 0x42, 0xfe, 0x00, 0x4c, - 0x24, 0x0b, 0x38, 0xfe, 0x40, 0x04, 0xc4, 0x00, 0x06, 0x47, 0xac, 0x88, - 0x33, 0xfe, 0x40, 0x4d, 0xef, 0x0e, 0x3f, 0xfe, 0x00, 0x58, 0xc5, 0x26, - 0x3b, 0xfe, 0x00, 0xa3, 0x29, 0x54, 0x97, 0x40, 0x3d, 0xfe, 0x00, 0x4b, - 0x50, 0x21, 0x35, 0xfe, 0x00, 0x4e, 0x27, 0x26, 0x47, 0xfe, 0x00, 0x56, - 0x05, 0x09, 0x39, 0xfe, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, 0x4e, 0xb8, - 0x67, 0x43, 0xfe, 0x00, 0x52, 0xcb, 0x26, 0x17, 0xfe, 0x40, 0x4d, 0xb9, - 0x67, 0x41, 0xfe, 0x00, 0x4c, 0x24, 0x0b, 0x37, 0xfe, 0x40, 0x45, 0xe8, - 0x04, 0x11, 0xfe, 0x00, 0x49, 0x15, 0x16, 0x12, 0xfe, 0x40, 0x46, 0x3c, - 0xc0, 0x31, 0xfe, 0x00, 0x46, 0x20, 0xdb, 0x32, 0xfe, 0x00, 0x4f, 0xae, - 0x00, 0x15, 0xfe, 0x40, 0x43, 0x03, 0x12, 0x13, 0xfe, 0x00, 0x43, 0xea, - 0x04, 0x10, 0xfe, 0x40, 0x43, 0xd5, 0x17, 0xc3, 0xfa, 0x01, 0x46, 0x7c, - 0x1c, 0xc4, 0xfa, 0x01, 0x45, 0x62, 0x2c, 0x30, 0xf9, 0x41, 0x80, 0x01, - 0xff, 0x06, 0x5c, 0x00, 0x1c, 0x55, 0xfb, 0x38, 0xe8, 0x22, 0x00, 0x06, - 0x52, 0x28, 0x06, 0x4e, 0x7a, 0x7c, 0xb0, 0x22, 0x40, 0x45, 0xac, 0x0c, - 0x7c, 0x22, 0x00, 0x4a, 0x06, 0x39, 0x7e, 0x22, 0x40, 0x4f, 0x10, 0x69, - 0xb7, 0x2a, 0x00, 0x4b, 0xf9, 0x12, 0xb3, 0x2a, 0x00, 0x04, 0xe8, 0x22, - 0x11, 0x0c, 0x6d, 0x2a, 0x01, 0xff, 0x4b, 0xf9, 0x12, 0xaf, 0x2a, 0x00, - 0x4c, 0x79, 0x2a, 0xb1, 0x2a, 0x40, 0x4f, 0x10, 0x69, 0xb9, 0x2a, 0x00, - 0x48, 0xa9, 0x0c, 0xb5, 0x2a, 0x40, 0x4f, 0x1e, 0x6a, 0xa9, 0xf5, 0x01, - 0x05, 0x53, 0xad, 0xbe, 0x01, 0x44, 0x7a, 0xee, 0x29, 0xf4, 0x01, 0xb0, - 0x9f, 0x01, 0x4d, 0x77, 0x86, 0xfe, 0xf4, 0x01, 0xb3, 0x6b, 0xb4, 0x4f, - 0xb5, 0x24, 0x04, 0x15, 0x01, 0x01, 0xff, 0x02, 0x10, 0x00, 0x0f, 0xb3, - 0x01, 0xff, 0x4b, 0x5a, 0x9c, 0xfe, 0x23, 0x00, 0x45, 0xec, 0x07, 0xfb, - 0x23, 0x40, 0x47, 0xea, 0x07, 0xfd, 0x23, 0x00, 0x4b, 0x77, 0x96, 0xfc, - 0x23, 0x40, 0x42, 0x1e, 0x14, 0x5d, 0xf4, 0x01, 0x48, 0x62, 0xc5, 0x57, - 0xf3, 0x01, 0x47, 0x66, 0x46, 0xa3, 0x00, 0x00, 0x4b, 0xe0, 0x9f, 0xd7, - 0xfa, 0x01, 0x05, 0xa0, 0x01, 0x01, 0xff, 0x48, 0xc0, 0x1e, 0x3e, 0xf6, - 0x01, 0x44, 0xe1, 0x07, 0x21, 0xf6, 0x41, 0x48, 0x52, 0x63, 0x72, 0xf3, - 0x01, 0xa1, 0x06, 0x49, 0x3c, 0xbd, 0xb4, 0xfa, 0x41, 0x50, 0xf7, 0x43, - 0xb0, 0xf6, 0x01, 0x42, 0x1e, 0x00, 0x54, 0xf9, 0x41, 0x45, 0xcd, 0xe2, - 0xe7, 0x2b, 0x00, 0x4f, 0xab, 0x65, 0x16, 0x23, 0x00, 0xb4, 0x01, 0xff, - 0x03, 0x13, 0x00, 0x06, 0x43, 0xeb, 0x39, 0xee, 0xf4, 0x41, 0x44, 0xa8, - 0x2c, 0xef, 0xf4, 0x01, 0x44, 0xb9, 0x00, 0x12, 0x30, 0xc0, 0x00, 0x45, - 0xe0, 0x07, 0x20, 0x30, 0x40, 0x0d, 0x09, 0x7e, 0x06, 0x44, 0xbb, 0x18, - 0x7f, 0xf3, 0x41, 0x4a, 0x33, 0xa8, 0x2c, 0x20, 0x00, 0x47, 0x34, 0x03, - 0x69, 0x20, 0x40, 0x43, 0x47, 0x63, 0x93, 0xf6, 0x81, 0x06, 0x47, 0xea, - 0xd0, 0x6e, 0xf4, 0x41, 0x51, 0x5a, 0x5c, 0xa8, 0xf6, 0x41, 0xa1, 0x96, - 0x01, 0xb5, 0x01, 0xff, 0x44, 0x8b, 0x09, 0xa0, 0xfa, 0x01, 0xb3, 0x29, - 0x42, 0x1e, 0x00, 0x47, 0x26, 0xc0, 0x00, 0x06, 0xb5, 0x1a, 0x01, 0xff, - 0xa6, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xd4, 0x2b, 0x00, 0x42, - 0x15, 0x02, 0xd3, 0x2b, 0x40, 0x43, 0xa7, 0x05, 0xd6, 0x2b, 0x00, 0x43, - 0xcb, 0x06, 0xd5, 0x2b, 0x40, 0x45, 0x2e, 0x03, 0x2b, 0x00, 0x80, 0x06, - 0x4b, 0x6c, 0x96, 0xb1, 0x00, 0x40, 0x80, 0x01, 0xff, 0x51, 0xf3, 0x12, - 0x72, 0x2a, 0x00, 0x03, 0xb6, 0x05, 0x36, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x4e, 0xc4, 0x69, 0x28, 0x2a, 0x00, 0x57, 0x16, 0x2d, 0x23, 0x2a, 0x00, - 0x49, 0x50, 0x12, 0x25, 0x2a, 0x00, 0xb3, 0x11, 0x06, 0xad, 0x22, 0x01, - 0xff, 0x45, 0x5c, 0x00, 0x24, 0x2a, 0x00, 0x45, 0xf5, 0x06, 0x26, 0x2a, - 0x40, 0x51, 0x2d, 0x54, 0x22, 0x2a, 0x00, 0x4c, 0x45, 0x94, 0x27, 0x2a, - 0x40, 0x50, 0x0a, 0x63, 0x2d, 0x2a, 0x00, 0x51, 0x38, 0x5c, 0x2e, 0x2a, - 0x00, 0x48, 0x01, 0x02, 0x39, 0x2a, 0x40, 0xa3, 0xb7, 0x04, 0x4c, 0xc1, - 0x90, 0x0e, 0x21, 0x80, 0xa9, 0x04, 0xb9, 0x01, 0xff, 0x4c, 0xa9, 0x8d, - 0xdd, 0xf6, 0x01, 0x09, 0x08, 0xb8, 0x01, 0xff, 0x07, 0xd5, 0x77, 0xfe, - 0x03, 0xa2, 0xef, 0x03, 0x09, 0xec, 0xb5, 0xd2, 0x03, 0xa6, 0x8d, 0x03, - 0x08, 0xb2, 0xc4, 0xf0, 0x02, 0xab, 0xb4, 0x02, 0x08, 0x1a, 0xc6, 0x97, - 0x02, 0x09, 0xe6, 0xbb, 0xfa, 0x01, 0x49, 0x25, 0xbc, 0xbf, 0xf0, 0x01, - 0xb3, 0xb8, 0x01, 0xb4, 0x06, 0x4b, 0xcc, 0xa2, 0xdf, 0xf0, 0x41, 0x06, - 0xe9, 0xbb, 0x93, 0x01, 0x08, 0x32, 0xc4, 0x77, 0x05, 0x78, 0xe7, 0x1d, - 0x06, 0x3e, 0xde, 0x01, 0xff, 0x45, 0x50, 0xe2, 0xd2, 0xf0, 0x01, 0x48, - 0x8a, 0xc2, 0xc2, 0xf0, 0x01, 0x46, 0x12, 0x85, 0xb2, 0xf0, 0x01, 0x46, - 0xee, 0xdc, 0xa2, 0xf0, 0x41, 0xd1, 0xe1, 0xf0, 0x81, 0x29, 0xd2, 0xe2, - 0xf0, 0x81, 0x1c, 0xd3, 0xe3, 0xf0, 0x01, 0xd4, 0xe4, 0xf0, 0x01, 0xd5, - 0xe5, 0xf0, 0x01, 0xd6, 0xe6, 0xf0, 0x01, 0xd7, 0xe7, 0xf0, 0x01, 0xd8, - 0xe8, 0xf0, 0x01, 0xd9, 0xe9, 0xf0, 0x41, 0xd0, 0xf4, 0xf0, 0x01, 0xd1, - 0xf5, 0xf0, 0x41, 0xd0, 0xea, 0xf0, 0x01, 0xd1, 0xeb, 0xf0, 0x01, 0xd2, - 0xec, 0xf0, 0x01, 0xd3, 0xed, 0xf0, 0x01, 0xd4, 0xee, 0xf0, 0x01, 0xd5, - 0xef, 0xf0, 0x01, 0xd6, 0xf0, 0xf0, 0x01, 0xd7, 0xf1, 0xf0, 0x01, 0xd8, - 0xf2, 0xf0, 0x01, 0xd9, 0xf3, 0xf0, 0x41, 0x45, 0x50, 0xe2, 0xd3, 0xf0, - 0x01, 0x48, 0x8a, 0xc2, 0xc3, 0xf0, 0x01, 0x46, 0x12, 0x85, 0xb3, 0xf0, - 0x01, 0x46, 0xee, 0xdc, 0xa3, 0xf0, 0x41, 0x45, 0x50, 0xe2, 0xda, 0xf0, - 0x01, 0x48, 0x8a, 0xc2, 0xca, 0xf0, 0x01, 0x46, 0x12, 0x85, 0xba, 0xf0, - 0x01, 0x46, 0xee, 0xdc, 0xaa, 0xf0, 0x41, 0x08, 0x72, 0xc3, 0x1d, 0x06, - 0x48, 0xda, 0x01, 0xff, 0x45, 0x50, 0xe2, 0xd6, 0xf0, 0x01, 0x48, 0x8a, - 0xc2, 0xc6, 0xf0, 0x01, 0x46, 0x12, 0x85, 0xb6, 0xf0, 0x01, 0x46, 0xee, - 0xdc, 0xa6, 0xf0, 0x41, 0x45, 0x50, 0xe2, 0xd7, 0xf0, 0x01, 0x48, 0x8a, - 0xc2, 0xc7, 0xf0, 0x01, 0x46, 0x12, 0x85, 0xb7, 0xf0, 0x01, 0x46, 0xee, - 0xdc, 0xa7, 0xf0, 0x41, 0x45, 0x50, 0xe2, 0xdd, 0xf0, 0x01, 0x48, 0x8a, - 0xc2, 0xcd, 0xf0, 0x01, 0x46, 0x12, 0x85, 0xbd, 0xf0, 0x01, 0x46, 0xee, - 0xdc, 0xad, 0xf0, 0x41, 0x45, 0x50, 0xe2, 0xd9, 0xf0, 0x01, 0x48, 0x8a, - 0xc2, 0xc9, 0xf0, 0x01, 0x46, 0x12, 0x85, 0xb9, 0xf0, 0x01, 0x46, 0xee, - 0xdc, 0xa9, 0xf0, 0x41, 0x07, 0x97, 0x38, 0x1d, 0x09, 0x12, 0xba, 0x01, - 0xff, 0x45, 0x50, 0xe2, 0xdc, 0xf0, 0x01, 0x48, 0x8a, 0xc2, 0xcc, 0xf0, - 0x01, 0x46, 0x12, 0x85, 0xbc, 0xf0, 0x01, 0x46, 0xee, 0xdc, 0xac, 0xf0, - 0x41, 0x45, 0x50, 0xe2, 0xde, 0xf0, 0x01, 0x48, 0x8a, 0xc2, 0xce, 0xf0, - 0x01, 0x46, 0x12, 0x85, 0xbe, 0xf0, 0x01, 0x46, 0xee, 0xdc, 0xae, 0xf0, - 0x41, 0x45, 0x50, 0xe2, 0xdb, 0xf0, 0x01, 0x48, 0x8a, 0xc2, 0xcb, 0xf0, - 0x01, 0x46, 0x12, 0x85, 0xbb, 0xf0, 0x01, 0x46, 0xee, 0xdc, 0xab, 0xf0, - 0x41, 0x07, 0x46, 0xcf, 0x26, 0xaf, 0x01, 0xff, 0x42, 0x36, 0x03, 0xe0, - 0xf0, 0x01, 0x06, 0x5b, 0xd1, 0x01, 0xff, 0x45, 0x50, 0xe2, 0xd4, 0xf0, - 0x01, 0x48, 0x8a, 0xc2, 0xc4, 0xf0, 0x01, 0x46, 0x12, 0x85, 0xb4, 0xf0, - 0x01, 0x46, 0xee, 0xdc, 0xa4, 0xf0, 0x41, 0x45, 0x50, 0xe2, 0xd5, 0xf0, - 0x01, 0x48, 0x8a, 0xc2, 0xc5, 0xf0, 0x01, 0x46, 0x12, 0x85, 0xb5, 0xf0, - 0x01, 0x46, 0xee, 0xdc, 0xa5, 0xf0, 0x41, 0x45, 0x50, 0xe2, 0xd8, 0xf0, - 0x01, 0x48, 0x8a, 0xc2, 0xc8, 0xf0, 0x01, 0x46, 0x12, 0x85, 0xb8, 0xf0, - 0x01, 0x46, 0xee, 0xdc, 0xa8, 0xf0, 0x41, 0x43, 0xe3, 0x02, 0xa0, 0xf0, - 0x01, 0x4a, 0x27, 0xaa, 0xcf, 0xf0, 0x41, 0x45, 0x50, 0xe2, 0xd1, 0xf0, - 0x01, 0x48, 0x8a, 0xc2, 0xc1, 0xf0, 0x01, 0x46, 0x12, 0x85, 0xb1, 0xf0, - 0x01, 0x46, 0xee, 0xdc, 0xa1, 0xf0, 0x41, 0x4c, 0xad, 0x89, 0x0f, 0x21, - 0x40, 0x43, 0xaa, 0x01, 0xa7, 0xfa, 0x01, 0x05, 0x17, 0x42, 0x01, 0xff, - 0x4d, 0x9b, 0x82, 0x18, 0x23, 0x00, 0x47, 0xcc, 0xd4, 0xd0, 0xf6, 0x41, - 0x42, 0x36, 0x01, 0xcf, 0x26, 0x80, 0x77, 0xe5, 0x67, 0xf9, 0x01, 0xe7, - 0x16, 0xf4, 0x81, 0x5f, 0xac, 0x4d, 0xae, 0x1b, 0xb3, 0x0d, 0x47, 0x75, - 0xd3, 0xd4, 0x22, 0xc0, 0x00, 0x4d, 0x7e, 0x7e, 0xda, 0x2a, 0x40, 0x43, - 0xe2, 0x7a, 0x53, 0x26, 0x00, 0x43, 0xed, 0x3b, 0x2b, 0xf5, 0x41, 0x43, - 0x6b, 0x18, 0x85, 0xfa, 0x01, 0x02, 0x1e, 0x14, 0x1a, 0xa5, 0x0c, 0x47, - 0x67, 0x28, 0x77, 0xfa, 0x01, 0x4a, 0xdc, 0x12, 0x2f, 0x27, 0x40, 0x4b, - 0x64, 0x95, 0x8d, 0xf3, 0x01, 0x45, 0x47, 0xe1, 0x4d, 0xf3, 0x41, 0x4a, - 0x6b, 0xa7, 0x0c, 0xf9, 0x01, 0x48, 0x6c, 0x2c, 0x0f, 0xf9, 0x41, 0x49, - 0x33, 0x9b, 0xb6, 0x00, 0x00, 0x48, 0xd2, 0xc2, 0xa9, 0xf4, 0x01, 0xec, - 0x8a, 0xf4, 0x41, 0x80, 0x01, 0xff, 0x44, 0xe1, 0x07, 0x37, 0xf4, 0x01, - 0x44, 0xa9, 0x16, 0x3d, 0xf4, 0x41, 0x48, 0x72, 0xc9, 0xfb, 0xf6, 0x41, - 0xa1, 0xde, 0x01, 0x09, 0xe4, 0xb7, 0xcd, 0x01, 0xaf, 0x01, 0xff, 0x08, - 0x12, 0xc3, 0x06, 0x43, 0xb8, 0x27, 0xdb, 0x2b, 0x40, 0x07, 0xc1, 0x05, - 0x33, 0x07, 0x2f, 0x39, 0x06, 0x4e, 0x68, 0x7d, 0x1f, 0x09, 0x41, 0x43, - 0xbf, 0x0a, 0x16, 0x09, 0x81, 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, - 0x17, 0x09, 0x01, 0x44, 0x25, 0x01, 0x1b, 0x09, 0x01, 0xb7, 0x01, 0xff, - 0x44, 0x29, 0x1d, 0x18, 0x09, 0x01, 0xef, 0x1a, 0x09, 0x41, 0x48, 0x21, - 0x11, 0x19, 0x09, 0x41, 0xa1, 0x7b, 0x43, 0x71, 0x09, 0x01, 0x09, 0x01, - 0x44, 0x73, 0xe2, 0x03, 0x09, 0x01, 0x44, 0xa6, 0xec, 0x02, 0x09, 0x01, - 0x42, 0xb0, 0x01, 0x04, 0x09, 0x81, 0x5e, 0x43, 0x5e, 0x50, 0x0a, 0x09, - 0x01, 0x44, 0xfd, 0xe4, 0x0b, 0x09, 0x01, 0x43, 0x89, 0x05, 0x0c, 0x09, - 0x01, 0x43, 0x54, 0x22, 0x0d, 0x09, 0x01, 0x42, 0x6f, 0x02, 0x10, 0x09, - 0x01, 0x43, 0x44, 0xf1, 0x12, 0x09, 0x01, 0x44, 0x48, 0xb7, 0x13, 0x09, - 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, 0x77, 0xf1, 0x05, 0x09, 0x01, 0x43, - 0x58, 0x51, 0x09, 0x09, 0x01, 0x43, 0x9c, 0x73, 0x06, 0x09, 0x41, 0x42, - 0xd7, 0x23, 0x15, 0x09, 0x01, 0x42, 0xc2, 0x05, 0x08, 0x09, 0x41, 0x43, - 0x0c, 0x02, 0x11, 0x09, 0x01, 0x43, 0x5d, 0x81, 0x0e, 0x09, 0x01, 0x43, - 0x0e, 0x16, 0x14, 0x09, 0x41, 0xf4, 0x07, 0x09, 0x41, 0x42, 0x9e, 0x01, - 0x0f, 0x09, 0x01, 0x42, 0x24, 0x00, 0x00, 0x09, 0x41, 0x52, 0xbe, 0x4f, - 0x36, 0x17, 0x00, 0x52, 0x1a, 0x54, 0x35, 0x17, 0x40, 0x06, 0x40, 0xd9, - 0xc7, 0x02, 0x10, 0xba, 0x62, 0x01, 0xff, 0x45, 0xce, 0x00, 0xd9, 0x01, - 0x01, 0xa2, 0x9a, 0x02, 0xa3, 0xe3, 0x01, 0x02, 0x3b, 0x01, 0xd2, 0x01, - 0x45, 0xaa, 0xe2, 0xee, 0x01, 0x01, 0x45, 0x5e, 0xe3, 0xf8, 0x01, 0x01, - 0xa7, 0xb7, 0x01, 0xa8, 0xa2, 0x01, 0x02, 0xc3, 0x01, 0x93, 0x01, 0x02, - 0x6c, 0x00, 0x82, 0x01, 0x47, 0x8b, 0xd1, 0xf7, 0x01, 0x01, 0xb0, 0x5f, - 0xb2, 0x51, 0xb3, 0x29, 0xb4, 0x15, 0x44, 0x89, 0xbe, 0xf3, 0x01, 0x01, - 0xb7, 0x01, 0xff, 0x48, 0x4a, 0xc1, 0xfc, 0x01, 0x01, 0x44, 0x63, 0x2c, - 0xd5, 0x01, 0x41, 0x4c, 0xc1, 0x8a, 0xd2, 0x01, 0x01, 0x44, 0x32, 0xed, - 0xd8, 0x01, 0x01, 0x44, 0x21, 0x5f, 0xf0, 0x01, 0x41, 0x42, 0x9a, 0x43, - 0xdf, 0x01, 0x01, 0x02, 0x49, 0x00, 0x12, 0x44, 0xe0, 0x0a, 0xe5, 0x01, - 0x01, 0x48, 0x7a, 0xc5, 0xfb, 0x01, 0x01, 0x47, 0xad, 0xd3, 0xfa, 0x01, - 0x41, 0x43, 0x7a, 0x23, 0xdb, 0x01, 0x01, 0xf0, 0xe8, 0x01, 0x41, 0x42, - 0x57, 0x00, 0xed, 0x01, 0x01, 0x46, 0xf2, 0xdb, 0xf5, 0x01, 0x41, 0x46, - 0xee, 0xd6, 0xf4, 0x01, 0x01, 0x49, 0x75, 0xa7, 0xd0, 0x01, 0x01, 0xac, - 0x01, 0xff, 0x48, 0xd2, 0xc0, 0xf2, 0x01, 0x01, 0x49, 0xc3, 0xbd, 0xd1, - 0x01, 0x41, 0x46, 0x32, 0xdb, 0xdd, 0x01, 0x01, 0x45, 0x6d, 0xe8, 0xde, - 0x01, 0x41, 0xe4, 0xe0, 0x01, 0x01, 0x42, 0x26, 0x0b, 0xf6, 0x01, 0x41, - 0x45, 0x6d, 0xc0, 0xd6, 0x01, 0x01, 0x43, 0x03, 0x00, 0xea, 0x01, 0x01, - 0x43, 0xfd, 0x04, 0xe9, 0x01, 0x41, 0x47, 0x7c, 0xcc, 0xd7, 0x01, 0x01, - 0x45, 0x63, 0x9f, 0xf9, 0x01, 0x41, 0x44, 0xc6, 0xed, 0xe3, 0x01, 0x01, - 0x42, 0x32, 0x00, 0xef, 0x01, 0x41, 0xa1, 0x22, 0x44, 0xdf, 0x48, 0xd4, - 0x01, 0x01, 0x43, 0xd7, 0x49, 0xdc, 0x01, 0x01, 0xaf, 0x01, 0xff, 0x44, - 0xda, 0xed, 0xe6, 0x01, 0x01, 0x42, 0x8b, 0x05, 0xe4, 0x01, 0xc1, 0x00, - 0x54, 0x3b, 0x42, 0xfd, 0x01, 0x41, 0x45, 0xb2, 0x70, 0xd3, 0x01, 0x01, - 0x4d, 0x5d, 0x86, 0xe2, 0x01, 0x01, 0xf4, 0xec, 0x01, 0x41, 0x42, 0x27, - 0x01, 0xf1, 0x01, 0x81, 0x12, 0xaf, 0x06, 0x48, 0x52, 0xc9, 0xeb, 0x01, - 0x41, 0x47, 0x06, 0xd1, 0xe1, 0x01, 0x01, 0xf7, 0xda, 0x01, 0x41, 0x44, - 0xf5, 0x82, 0xe7, 0x01, 0x41, 0x50, 0xaa, 0x60, 0x75, 0xa8, 0x00, 0x07, - 0xc1, 0x05, 0x38, 0x05, 0xb9, 0x00, 0x28, 0xb3, 0x01, 0xff, 0x4f, 0xfd, - 0x6c, 0x74, 0xa8, 0x00, 0xb5, 0x01, 0xff, 0x0f, 0x5b, 0x66, 0x06, 0x52, - 0x42, 0x53, 0x72, 0xa8, 0x40, 0x42, 0x71, 0x00, 0x71, 0xa8, 0x00, 0x42, - 0xa9, 0x01, 0x67, 0xa8, 0x00, 0x42, 0x34, 0x22, 0x68, 0xa8, 0x40, 0x4b, - 0x2c, 0x99, 0x77, 0xa8, 0x00, 0x44, 0xa4, 0x02, 0x76, 0xa8, 0x40, 0xe1, - 0x5d, 0xa8, 0x80, 0x92, 0x02, 0x42, 0x16, 0x00, 0x4e, 0xa8, 0x00, 0xa3, - 0xf8, 0x01, 0xa4, 0xe5, 0x01, 0xe5, 0x60, 0xa8, 0x80, 0xdb, 0x01, 0x42, - 0xe1, 0x07, 0x64, 0xa8, 0x00, 0xa7, 0xc8, 0x01, 0x42, 0x22, 0x00, 0x5c, - 0xa8, 0x00, 0xe9, 0x5e, 0xa8, 0x00, 0x42, 0xbd, 0x26, 0x46, 0xa8, 0x00, - 0xab, 0xab, 0x01, 0x42, 0x74, 0x00, 0x59, 0xa8, 0x00, 0x42, 0x6c, 0x00, - 0x4f, 0xa8, 0x00, 0xae, 0x86, 0x01, 0xef, 0x61, 0xa8, 0x00, 0xb0, 0x76, - 0x42, 0xf4, 0x13, 0x62, 0xa8, 0x00, 0x42, 0x71, 0x00, 0x58, 0xa8, 0x00, - 0xb3, 0x58, 0xb4, 0x33, 0xf5, 0x5f, 0xa8, 0x00, 0x05, 0x68, 0x1c, 0x1f, - 0x42, 0xa9, 0x01, 0x53, 0xa8, 0x00, 0x42, 0x4c, 0x26, 0x63, 0xa8, 0x00, - 0x42, 0x34, 0x22, 0x57, 0xa8, 0x00, 0xba, 0x01, 0xff, 0xe1, 0x55, 0xa8, - 0x00, 0x42, 0x22, 0x00, 0x54, 0xa8, 0x40, 0x44, 0x87, 0x10, 0x6f, 0xa8, - 0x00, 0x48, 0x0a, 0xc5, 0x6e, 0xa8, 0x40, 0xe1, 0x48, 0xa8, 0x00, 0x42, - 0x22, 0x00, 0x49, 0xa8, 0x00, 0xb3, 0x0d, 0xb4, 0x01, 0xff, 0xe1, 0x69, - 0xa8, 0x00, 0x42, 0x22, 0x00, 0x6a, 0xa8, 0x40, 0xe1, 0x50, 0xa8, 0x00, - 0x42, 0x22, 0x00, 0x51, 0xa8, 0x40, 0xe1, 0x5b, 0xa8, 0x00, 0x42, 0x22, - 0x00, 0x5a, 0xa8, 0x00, 0x46, 0xb5, 0x09, 0x56, 0xa8, 0x40, 0xe1, 0x4c, - 0xa8, 0x00, 0x42, 0x22, 0x00, 0x4d, 0xa8, 0x40, 0xe1, 0x4b, 0xa8, 0x00, - 0x42, 0x24, 0x02, 0x43, 0xa8, 0x00, 0x42, 0xff, 0x04, 0x6c, 0xa8, 0x00, - 0x42, 0x34, 0x22, 0x47, 0xa8, 0x40, 0xe1, 0x40, 0xa8, 0x00, 0x42, 0x22, - 0x00, 0x41, 0xa8, 0x40, 0xe1, 0x42, 0xa8, 0x00, 0x42, 0x24, 0x02, 0x65, - 0xa8, 0x40, 0xe5, 0x66, 0xa8, 0x40, 0xe1, 0x4a, 0xa8, 0x00, 0x42, 0xa1, - 0x10, 0x6b, 0xa8, 0x00, 0x42, 0x59, 0x00, 0x52, 0xa8, 0x40, 0xe1, 0x44, - 0xa8, 0x80, 0x06, 0x42, 0x22, 0x00, 0x45, 0xa8, 0x40, 0x49, 0x51, 0x23, - 0x73, 0xa8, 0x40, 0x4b, 0xf4, 0x9c, 0x6d, 0xa8, 0x00, 0x4b, 0xa6, 0xa0, - 0x70, 0xa8, 0x40, 0xa1, 0xeb, 0x01, 0x48, 0x76, 0xa7, 0xb6, 0xf6, 0x01, - 0xae, 0xc4, 0x01, 0x4c, 0x99, 0x91, 0xc2, 0xfa, 0x01, 0xb2, 0x14, 0xb3, - 0x06, 0x48, 0x02, 0xc9, 0xeb, 0xf9, 0x41, 0x48, 0x5a, 0xc3, 0xa7, 0x20, - 0x00, 0x46, 0xd1, 0xae, 0xb1, 0x20, 0x40, 0x80, 0x93, 0x01, 0x49, 0xc8, - 0x99, 0x25, 0x00, 0x00, 0x4c, 0x55, 0x8d, 0xad, 0xf3, 0x01, 0x51, 0xa0, - 0x5a, 0x7e, 0x26, 0x00, 0x4a, 0xf7, 0x8c, 0xc2, 0x27, 0x80, 0x74, 0xb3, - 0x01, 0xff, 0x4c, 0x0d, 0x8d, 0x23, 0xf6, 0x01, 0x02, 0x10, 0x00, 0x06, - 0x47, 0xca, 0xd1, 0x06, 0x23, 0x40, 0x80, 0x06, 0x4b, 0x27, 0x85, 0xbb, - 0xf4, 0x41, 0x4d, 0xc3, 0x7f, 0x47, 0xf6, 0x01, 0x48, 0x32, 0xc2, 0xd7, - 0xf9, 0x01, 0x4f, 0x96, 0x6a, 0x38, 0xf9, 0x01, 0x48, 0x7d, 0x81, 0x4d, - 0xf6, 0x01, 0x03, 0xb6, 0x05, 0x31, 0x61, 0x1f, 0x0e, 0x4c, 0xf6, 0x01, - 0x05, 0x51, 0x00, 0x01, 0xff, 0xa2, 0x18, 0x45, 0x55, 0xe2, 0xc5, 0xfa, - 0x01, 0x4c, 0x49, 0x8d, 0x4f, 0xf6, 0x01, 0x49, 0x27, 0xb7, 0xd5, 0xf9, - 0x01, 0x4c, 0x11, 0x92, 0x4e, 0xf6, 0x41, 0x43, 0x0e, 0x07, 0xf9, 0x26, - 0x00, 0x49, 0x43, 0xb9, 0x71, 0xf4, 0x41, 0x4e, 0x44, 0x78, 0xd8, 0xf9, - 0x01, 0x4b, 0xbc, 0xa0, 0xd6, 0xf9, 0x41, 0x47, 0x3e, 0x06, 0xe1, 0x2a, - 0x40, 0x4a, 0x85, 0xab, 0x30, 0x20, 0x00, 0x44, 0x2f, 0x03, 0x4c, 0x21, - 0x00, 0x51, 0xd1, 0x5c, 0x31, 0x20, 0x40, 0x56, 0x4f, 0x31, 0x86, 0xf5, - 0x01, 0x43, 0x80, 0xbd, 0x0f, 0x27, 0x00, 0x44, 0xda, 0xec, 0x27, 0xf4, - 0x01, 0x49, 0xc7, 0xbc, 0x14, 0xf6, 0x01, 0x46, 0x13, 0x1b, 0xe4, 0x26, - 0x40, 0x44, 0x2f, 0x9f, 0xdb, 0xfa, 0x01, 0xa3, 0x0a, 0x44, 0xf7, 0xe7, - 0x5c, 0xf9, 0x01, 0xf2, 0x50, 0xf3, 0x41, 0x48, 0xd6, 0x18, 0x2e, 0x26, - 0x00, 0xe8, 0x51, 0xf3, 0x01, 0x43, 0x35, 0x01, 0x9a, 0xf9, 0x41, 0x45, - 0x3c, 0xe2, 0xe6, 0xf4, 0x01, 0xa7, 0xfa, 0x13, 0x0b, 0x97, 0x9a, 0x96, - 0x0d, 0xac, 0x87, 0x0b, 0xae, 0xf8, 0x0a, 0x47, 0xcc, 0x80, 0xce, 0xf4, - 0x01, 0xb2, 0x96, 0x03, 0x02, 0xee, 0x00, 0xed, 0x02, 0x0a, 0x17, 0xb0, - 0x06, 0x48, 0xaa, 0xc9, 0x3e, 0xf4, 0x41, 0x4c, 0x2d, 0x28, 0xf5, 0x1a, - 0x81, 0xcc, 0x02, 0xac, 0x62, 0x4e, 0x8a, 0x78, 0xef, 0x1a, 0x81, 0x4c, - 0x4b, 0x4a, 0x65, 0xe6, 0x1a, 0x81, 0x2f, 0x07, 0xcd, 0xd2, 0x01, 0xff, - 0x4c, 0x2d, 0x28, 0xe7, 0x1a, 0x81, 0x1d, 0x44, 0x83, 0x2c, 0xec, 0x1a, - 0xc1, 0x00, 0x80, 0x01, 0xff, 0x45, 0x3d, 0x2c, 0xee, 0x1a, 0x01, 0x44, - 0x03, 0x12, 0xeb, 0x1a, 0xc1, 0x00, 0x46, 0x3c, 0x2c, 0xed, 0x1a, 0x41, - 0x46, 0x3c, 0x2c, 0xea, 0x1a, 0x41, 0x80, 0x01, 0xff, 0x45, 0x3d, 0x2c, - 0xe9, 0x1a, 0x01, 0x44, 0x03, 0x12, 0xe5, 0x1a, 0xc1, 0x00, 0x46, 0x3c, - 0x2c, 0xe8, 0x1a, 0x41, 0x80, 0x01, 0xff, 0x45, 0x3d, 0x2c, 0xf2, 0x1a, - 0x01, 0x4a, 0xef, 0xaa, 0xf1, 0x1a, 0x41, 0x06, 0xc2, 0x05, 0x1d, 0x4f, - 0xfa, 0x6f, 0xf4, 0x1a, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x45, 0x3d, 0x2c, - 0xf7, 0x1a, 0x01, 0x44, 0x03, 0x12, 0xf3, 0x1a, 0xc1, 0x00, 0x46, 0x3c, - 0x2c, 0xf6, 0x1a, 0x41, 0xe1, 0xd5, 0x1a, 0x01, 0x42, 0x16, 0x00, 0xcc, - 0x1a, 0x01, 0xa3, 0xb0, 0x01, 0x42, 0xa1, 0x10, 0xc4, 0x1a, 0x01, 0xe5, - 0xd6, 0x1a, 0x01, 0xa6, 0x76, 0x42, 0x24, 0x02, 0xc9, 0x1a, 0x01, 0x42, - 0x22, 0x00, 0xc8, 0x1a, 0x01, 0xe9, 0xd7, 0x1a, 0x81, 0x61, 0xab, 0x55, - 0x42, 0x74, 0x00, 0xc2, 0x1a, 0x01, 0x42, 0x6c, 0x00, 0xc3, 0x1a, 0x01, - 0xae, 0x3d, 0xef, 0xd8, 0x1a, 0x01, 0xb0, 0x2d, 0x42, 0x71, 0x00, 0xd2, - 0x1a, 0x01, 0x42, 0x15, 0x06, 0xcb, 0x1a, 0x01, 0xb4, 0x15, 0xf5, 0xd9, - 0x1a, 0x81, 0x0c, 0x42, 0xa6, 0x0a, 0xc6, 0x1a, 0x01, 0x42, 0x59, 0x00, - 0xc5, 0x1a, 0x41, 0xe1, 0xda, 0x1a, 0x41, 0xe1, 0xce, 0x1a, 0x01, 0x42, - 0x22, 0x00, 0xcf, 0x1a, 0x41, 0xe1, 0xc0, 0x1a, 0x01, 0x42, 0x22, 0x00, - 0xd1, 0x1a, 0x41, 0xe1, 0xd0, 0x1a, 0x01, 0x42, 0x24, 0x02, 0xc7, 0x1a, - 0x41, 0xe1, 0xc1, 0x1a, 0x01, 0x42, 0x22, 0x00, 0xca, 0x1a, 0x41, 0xe1, - 0xdb, 0x1a, 0x41, 0xe1, 0xd3, 0x1a, 0x01, 0x05, 0x47, 0x27, 0x01, 0xff, - 0xeb, 0xdd, 0x1a, 0x01, 0xec, 0xe1, 0x1a, 0x01, 0xed, 0xdf, 0x1a, 0x01, - 0xee, 0xe0, 0x1a, 0x81, 0x10, 0xf0, 0xdc, 0x1a, 0x01, 0xf4, 0xde, 0x1a, - 0x01, 0xf7, 0xe2, 0x1a, 0x01, 0xf9, 0xe4, 0x1a, 0x41, 0xe7, 0xe3, 0x1a, - 0x41, 0xe1, 0xcd, 0x1a, 0x01, 0x42, 0x22, 0x00, 0xd4, 0x1a, 0x41, 0x80, - 0x01, 0xff, 0x45, 0x3d, 0x2c, 0xf8, 0x1a, 0x01, 0x47, 0x1b, 0x4d, 0xf0, - 0x1a, 0x41, 0xa5, 0x16, 0x09, 0x62, 0xb8, 0x06, 0x4c, 0x05, 0x92, 0xc2, - 0xf6, 0x41, 0x52, 0xd0, 0x4f, 0x91, 0x23, 0x00, 0x50, 0xaa, 0x66, 0x92, - 0x23, 0x40, 0x48, 0xd6, 0x1f, 0xfd, 0x2b, 0x00, 0x49, 0xf7, 0xb9, 0xf3, - 0xf6, 0x41, 0xa1, 0x9e, 0x07, 0x0b, 0xa5, 0x99, 0x4a, 0x43, 0x03, 0x2c, - 0x9c, 0xf9, 0x01, 0xb4, 0x01, 0xff, 0x51, 0x94, 0x55, 0x3d, 0x30, 0x00, - 0x03, 0x3c, 0x0c, 0x0c, 0x4c, 0xd9, 0x90, 0x50, 0x32, 0x00, 0x48, 0xfa, - 0xc9, 0x89, 0xf3, 0x41, 0x80, 0x06, 0x58, 0x4d, 0x29, 0x7d, 0x26, 0x40, - 0x4c, 0x1f, 0x47, 0x02, 0x22, 0x00, 0x05, 0xc2, 0x07, 0x01, 0xff, 0x48, - 0x62, 0xc1, 0x8c, 0x00, 0x00, 0x44, 0xa5, 0x01, 0x8b, 0x00, 0x00, 0x47, - 0xa7, 0x30, 0x8b, 0x00, 0x00, 0x42, 0x50, 0x02, 0x8c, 0x00, 0x40, 0x06, - 0xc4, 0x06, 0x8e, 0x06, 0x07, 0x9e, 0xce, 0xc2, 0x04, 0x0a, 0x41, 0xa9, - 0xc3, 0x02, 0x12, 0xfe, 0x51, 0xb2, 0x02, 0x06, 0xb3, 0x05, 0x55, 0x07, - 0x2f, 0x39, 0x01, 0xff, 0xa5, 0x42, 0xa6, 0x34, 0x48, 0x7c, 0x52, 0x86, - 0x24, 0x00, 0xb3, 0x20, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x7d, 0x24, - 0x00, 0x47, 0x2a, 0x59, 0x80, 0x24, 0x00, 0x02, 0x15, 0x01, 0x01, 0xff, - 0x43, 0x47, 0x2b, 0x7f, 0x24, 0x00, 0x43, 0x2a, 0x1d, 0x87, 0x24, 0x40, - 0x48, 0x3c, 0x50, 0x84, 0x24, 0x00, 0x46, 0x60, 0x25, 0x83, 0x24, 0x40, - 0x46, 0x9c, 0x17, 0x82, 0x24, 0x00, 0x47, 0x9f, 0x5b, 0x81, 0x24, 0x40, - 0x47, 0xca, 0x24, 0x85, 0x24, 0x00, 0x45, 0x0b, 0x6e, 0x7e, 0x24, 0x40, - 0x0f, 0xb9, 0x05, 0x6d, 0x0d, 0x4b, 0x08, 0x01, 0xff, 0xe1, 0x9c, 0x24, - 0x00, 0xe2, 0x9d, 0x24, 0x00, 0xe3, 0x9e, 0x24, 0x00, 0xe4, 0x9f, 0x24, - 0x00, 0xe5, 0xa0, 0x24, 0x00, 0xe6, 0xa1, 0x24, 0x00, 0xe7, 0xa2, 0x24, - 0x00, 0xe8, 0xa3, 0x24, 0x00, 0xe9, 0xa4, 0x24, 0x00, 0xea, 0xa5, 0x24, - 0x00, 0xeb, 0xa6, 0x24, 0x00, 0xec, 0xa7, 0x24, 0x00, 0xed, 0xa8, 0x24, - 0x00, 0xee, 0xa9, 0x24, 0x00, 0xef, 0xaa, 0x24, 0x00, 0xf0, 0xab, 0x24, - 0x00, 0xf1, 0xac, 0x24, 0x00, 0xf2, 0xad, 0x24, 0x00, 0xf3, 0xae, 0x24, - 0x00, 0xf4, 0xaf, 0x24, 0x00, 0xf5, 0xb0, 0x24, 0x00, 0xf6, 0xb1, 0x24, - 0x00, 0xf7, 0xb2, 0x24, 0x00, 0xf8, 0xb3, 0x24, 0x00, 0xf9, 0xb4, 0x24, - 0x00, 0xfa, 0xb5, 0x24, 0x40, 0xe1, 0x10, 0xf1, 0x01, 0xe2, 0x11, 0xf1, - 0x01, 0xe3, 0x12, 0xf1, 0x01, 0xe4, 0x13, 0xf1, 0x01, 0xe5, 0x14, 0xf1, - 0x01, 0xe6, 0x15, 0xf1, 0x01, 0xe7, 0x16, 0xf1, 0x01, 0xe8, 0x17, 0xf1, - 0x01, 0xe9, 0x18, 0xf1, 0x01, 0xea, 0x19, 0xf1, 0x01, 0xeb, 0x1a, 0xf1, - 0x01, 0xec, 0x1b, 0xf1, 0x01, 0xed, 0x1c, 0xf1, 0x01, 0xee, 0x1d, 0xf1, - 0x01, 0xef, 0x1e, 0xf1, 0x01, 0xf0, 0x1f, 0xf1, 0x01, 0xf1, 0x20, 0xf1, - 0x01, 0xf2, 0x21, 0xf1, 0x01, 0xf3, 0x22, 0xf1, 0x01, 0xf4, 0x23, 0xf1, - 0x01, 0xf5, 0x24, 0xf1, 0x01, 0xf6, 0x25, 0xf1, 0x01, 0xf7, 0x26, 0xf1, - 0x01, 0xf8, 0x27, 0xf1, 0x01, 0xf9, 0x28, 0xf1, 0x01, 0xfa, 0x29, 0xf1, - 0x41, 0x43, 0x21, 0x11, 0x1e, 0x32, 0x00, 0x44, 0x6e, 0xed, 0x1d, 0x32, - 0x40, 0x48, 0xba, 0xc0, 0x3f, 0x32, 0x00, 0xa3, 0xe5, 0x01, 0xa5, 0xd0, - 0x01, 0xa6, 0xad, 0x01, 0x44, 0xde, 0xec, 0x32, 0x32, 0x00, 0x45, 0xf3, - 0xe4, 0x38, 0x32, 0x00, 0xad, 0x92, 0x01, 0xae, 0x83, 0x01, 0x43, 0xbf, - 0x0a, 0x20, 0x32, 0x00, 0x02, 0x88, 0x00, 0x60, 0xb3, 0x23, 0xb4, 0x0f, - 0xb7, 0x01, 0xff, 0x44, 0x8a, 0x00, 0x2c, 0x32, 0x00, 0x43, 0xfc, 0x2c, - 0x2d, 0x32, 0x40, 0x42, 0x92, 0x01, 0x29, 0x32, 0x00, 0x44, 0x25, 0x01, - 0x22, 0x32, 0x00, 0x42, 0x15, 0x02, 0x21, 0x32, 0x40, 0xa5, 0x2d, 0x42, - 0x60, 0x25, 0x25, 0x32, 0x00, 0x46, 0xb0, 0xdb, 0x33, 0x32, 0x00, 0x46, - 0x10, 0xdc, 0x35, 0x32, 0x00, 0xb4, 0x0d, 0xb5, 0x01, 0xff, 0xee, 0x30, - 0x32, 0x00, 0x47, 0xdf, 0xd1, 0x3c, 0x32, 0x40, 0x43, 0x35, 0x01, 0x31, - 0x32, 0x00, 0x43, 0x59, 0xf1, 0x3b, 0x32, 0x40, 0x42, 0x24, 0x00, 0x42, - 0x32, 0x00, 0x43, 0x28, 0x1d, 0x26, 0x32, 0x40, 0x43, 0xd4, 0x2c, 0x43, - 0x32, 0x00, 0x47, 0x13, 0x7f, 0x39, 0x32, 0x00, 0xb3, 0x01, 0xff, 0x45, - 0x56, 0x5b, 0x3e, 0x32, 0x00, 0xf4, 0x41, 0x32, 0x40, 0x43, 0x00, 0x05, - 0x34, 0x32, 0x00, 0x43, 0xc3, 0x07, 0x28, 0x32, 0x40, 0x44, 0x45, 0x0f, - 0x2e, 0x32, 0x00, 0x43, 0x69, 0x05, 0x2a, 0x32, 0x40, 0x47, 0x12, 0xce, - 0x40, 0x32, 0x00, 0xa9, 0x06, 0x43, 0xcb, 0x06, 0x23, 0x32, 0x40, 0x47, - 0x96, 0xd0, 0x36, 0x32, 0x00, 0x42, 0x88, 0x00, 0x2b, 0x32, 0x00, 0x42, - 0x32, 0x00, 0x24, 0x32, 0x40, 0x44, 0xb9, 0x70, 0x2f, 0x32, 0x00, 0x44, - 0xc9, 0x00, 0x27, 0x32, 0x00, 0x49, 0x3f, 0xba, 0x3d, 0x32, 0x40, 0x43, - 0x0e, 0x07, 0x3a, 0x32, 0x00, 0x4d, 0x4c, 0x85, 0x37, 0x32, 0x40, 0xa3, - 0xa5, 0x01, 0x45, 0x35, 0xa3, 0x0d, 0x32, 0x80, 0x97, 0x01, 0x45, 0x68, - 0xc9, 0x07, 0x32, 0x80, 0x89, 0x01, 0xab, 0x6d, 0x45, 0x8e, 0xe5, 0x04, - 0x32, 0x80, 0x60, 0x45, 0xfc, 0xe5, 0x01, 0x32, 0x80, 0x53, 0xb0, 0x37, - 0x45, 0x41, 0xe7, 0x03, 0x32, 0x80, 0x2a, 0x44, 0xf0, 0xbc, 0x06, 0x32, - 0x80, 0x1d, 0xb4, 0x01, 0xff, 0x46, 0x8b, 0xd3, 0x0b, 0x32, 0x80, 0x0d, - 0x45, 0x20, 0xcb, 0x02, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, 0x10, 0x32, - 0x40, 0x42, 0x19, 0x00, 0x19, 0x32, 0x40, 0x42, 0x19, 0x00, 0x14, 0x32, - 0x40, 0x42, 0x19, 0x00, 0x11, 0x32, 0x40, 0x46, 0x4c, 0xc0, 0x0c, 0x32, - 0x80, 0x0d, 0x44, 0x33, 0x83, 0x05, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, - 0x13, 0x32, 0x40, 0x42, 0x19, 0x00, 0x1a, 0x32, 0x40, 0x42, 0x19, 0x00, - 0x0f, 0x32, 0x40, 0x42, 0x19, 0x00, 0x12, 0x32, 0x40, 0x46, 0x44, 0xc0, - 0x0a, 0x32, 0x80, 0x0d, 0x45, 0xb7, 0xa0, 0x00, 0x32, 0xc0, 0x00, 0x42, - 0x19, 0x00, 0x0e, 0x32, 0x40, 0x42, 0x19, 0x00, 0x18, 0x32, 0x40, 0x42, - 0x19, 0x00, 0x15, 0x32, 0x40, 0x42, 0x19, 0x00, 0x1b, 0x32, 0x40, 0x46, - 0x17, 0xcd, 0x09, 0x32, 0x80, 0x12, 0x44, 0x18, 0xcd, 0x08, 0x32, 0xc0, - 0x00, 0x80, 0x01, 0xff, 0xe1, 0x16, 0x32, 0x00, 0xf5, 0x1c, 0x32, 0x40, - 0x42, 0x19, 0x00, 0x17, 0x32, 0x40, 0x45, 0xc3, 0x0a, 0x7b, 0x24, 0x00, - 0xa6, 0x29, 0x44, 0x46, 0x2a, 0x7c, 0x24, 0x00, 0x43, 0xbf, 0x0a, 0x74, - 0x24, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x76, 0x24, - 0x00, 0x42, 0x15, 0x02, 0x75, 0x24, 0x40, 0x44, 0x27, 0x1d, 0x7a, 0x24, - 0x00, 0x42, 0x60, 0x25, 0x79, 0x24, 0x40, 0x43, 0xa7, 0x05, 0x78, 0x24, - 0x00, 0x43, 0xcb, 0x06, 0x77, 0x24, 0x40, 0x45, 0x32, 0xe2, 0x82, 0xfa, - 0x01, 0x05, 0x32, 0x10, 0x1c, 0x05, 0xbc, 0x37, 0x01, 0xff, 0x42, 0x1e, - 0x00, 0x25, 0x22, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x51, 0x1c, 0x05, - 0xf2, 0x2a, 0x00, 0x4e, 0x93, 0x3d, 0xf3, 0x2a, 0x40, 0x4a, 0x35, 0x20, - 0x29, 0x20, 0x00, 0x42, 0x55, 0x0d, 0x0f, 0x2e, 0x00, 0x47, 0x4c, 0x71, - 0x4d, 0x2e, 0x40, 0x45, 0xd8, 0xe1, 0x5e, 0xf9, 0x01, 0x47, 0x5c, 0xcd, - 0x3c, 0xf4, 0x41, 0x43, 0xfa, 0x0d, 0xb4, 0x26, 0x00, 0xad, 0x01, 0xff, - 0x80, 0xe8, 0x01, 0x4d, 0x9e, 0x86, 0x32, 0xf9, 0x01, 0x06, 0x74, 0xde, - 0x01, 0xff, 0x02, 0x68, 0x00, 0x3a, 0x07, 0x2f, 0x39, 0x06, 0x56, 0x09, - 0x36, 0x78, 0x08, 0x41, 0xa6, 0x22, 0x43, 0xbf, 0x0a, 0x79, 0x08, 0x01, - 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x7e, 0x08, 0x01, 0x44, 0x25, 0x01, - 0x7b, 0x08, 0x01, 0xb7, 0x01, 0xff, 0x44, 0x29, 0x1d, 0x7f, 0x08, 0x01, - 0xef, 0x7a, 0x08, 0x41, 0x43, 0xa7, 0x05, 0x7d, 0x08, 0x01, 0x43, 0xcb, - 0x06, 0x7c, 0x08, 0x41, 0x53, 0x48, 0x48, 0x77, 0x08, 0x01, 0x05, 0xc3, - 0x05, 0x01, 0xff, 0xa1, 0x85, 0x01, 0x44, 0x0a, 0xec, 0x61, 0x08, 0x01, - 0x46, 0xda, 0x48, 0x63, 0x08, 0x01, 0x49, 0xa0, 0xb6, 0x6d, 0x08, 0x01, - 0x45, 0xa1, 0xa8, 0x62, 0x08, 0x01, 0x42, 0xb0, 0x01, 0x64, 0x08, 0x81, - 0x60, 0x44, 0x8e, 0xed, 0x6a, 0x08, 0x01, 0x46, 0x9c, 0xda, 0x6b, 0x08, - 0x01, 0x43, 0x89, 0x05, 0x6c, 0x08, 0x01, 0x43, 0x54, 0x22, 0x6e, 0x08, - 0x01, 0x42, 0x6f, 0x02, 0x71, 0x08, 0x01, 0x44, 0xae, 0xc5, 0x73, 0x08, - 0x01, 0x44, 0xfa, 0x64, 0x74, 0x08, 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, - 0xc0, 0x88, 0x65, 0x08, 0x01, 0x44, 0x58, 0x51, 0x69, 0x08, 0x01, 0x45, - 0x52, 0x51, 0x66, 0x08, 0x41, 0x42, 0x9a, 0x43, 0x76, 0x08, 0x01, 0x43, - 0x39, 0x25, 0x68, 0x08, 0x41, 0xa1, 0x06, 0x43, 0x0e, 0x16, 0x75, 0x08, - 0x41, 0x43, 0x89, 0xe7, 0x72, 0x08, 0x01, 0x44, 0x39, 0xe1, 0x6f, 0x08, - 0x41, 0x42, 0x53, 0x00, 0x67, 0x08, 0x41, 0x44, 0x48, 0x3c, 0x60, 0x08, - 0x01, 0x43, 0xf7, 0x19, 0x70, 0x08, 0x41, 0x46, 0xf1, 0x2e, 0x19, 0x2e, - 0x00, 0x49, 0x6e, 0xb5, 0xf3, 0xfa, 0x01, 0x44, 0xbe, 0x10, 0x34, 0xf3, - 0x01, 0x47, 0xfa, 0xd3, 0xf4, 0xfa, 0x41, 0xa3, 0xcf, 0x04, 0x06, 0xc4, - 0x06, 0x88, 0x04, 0x09, 0x82, 0xb9, 0xd4, 0x03, 0x07, 0x2f, 0x39, 0x9c, - 0x03, 0x05, 0x2f, 0x03, 0x93, 0x01, 0x07, 0x8d, 0xd4, 0x01, 0xff, 0xa1, - 0x5b, 0xa5, 0x47, 0xa9, 0x33, 0xaf, 0x1f, 0xb5, 0x0b, 0xb7, 0x01, 0xff, - 0xe2, 0x18, 0x6b, 0x01, 0xf6, 0x19, 0x6b, 0x41, 0xa1, 0x08, 0xe2, 0x06, - 0x6b, 0x01, 0xf6, 0x07, 0x6b, 0x41, 0xe2, 0x10, 0x6b, 0x01, 0xf6, 0x11, - 0x6b, 0x41, 0xe2, 0x12, 0x6b, 0x01, 0xaf, 0x04, 0xf6, 0x13, 0x6b, 0x41, - 0xe2, 0x0c, 0x6b, 0x01, 0xf6, 0x0d, 0x6b, 0x41, 0xa1, 0x08, 0xe2, 0x02, - 0x6b, 0x01, 0xf6, 0x03, 0x6b, 0x41, 0xe2, 0x14, 0x6b, 0x01, 0xf6, 0x15, - 0x6b, 0x41, 0xe2, 0x08, 0x6b, 0x01, 0xa5, 0x04, 0xf6, 0x09, 0x6b, 0x41, - 0xe2, 0x00, 0x6b, 0x01, 0xf6, 0x01, 0x6b, 0x41, 0xa1, 0x27, 0xe2, 0x16, - 0x6b, 0x01, 0xa9, 0x19, 0xb5, 0x0f, 0xf6, 0x17, 0x6b, 0x01, 0xb7, 0x01, - 0xff, 0xe2, 0x0e, 0x6b, 0x01, 0xf6, 0x0f, 0x6b, 0x41, 0xe2, 0x04, 0x6b, - 0x01, 0xf6, 0x05, 0x6b, 0x41, 0xe2, 0x0a, 0x6b, 0x01, 0xf6, 0x0b, 0x6b, - 0x41, 0xe2, 0x1a, 0x6b, 0x01, 0xf6, 0x1b, 0x6b, 0x41, 0x42, 0x04, 0x08, - 0x6c, 0x6b, 0x01, 0x04, 0x87, 0xb9, 0xc3, 0x01, 0xa8, 0xb4, 0x01, 0x46, - 0xc4, 0xd9, 0x43, 0x6b, 0x01, 0x43, 0x54, 0x0d, 0x70, 0x6b, 0x01, 0xad, - 0x8f, 0x01, 0xae, 0x80, 0x01, 0xb4, 0x6c, 0x04, 0xbe, 0xef, 0x39, 0xb8, - 0x06, 0x48, 0x52, 0xca, 0x67, 0x6b, 0x41, 0x43, 0xc0, 0x2e, 0x44, 0x6b, - 0x01, 0x43, 0x6b, 0x49, 0x6a, 0x6b, 0x01, 0xb9, 0x01, 0xff, 0x04, 0x7b, - 0x20, 0x06, 0x42, 0x69, 0x05, 0x64, 0x6b, 0x41, 0x44, 0x7a, 0xec, 0x3f, - 0x6b, 0x01, 0x45, 0x24, 0xe6, 0x3c, 0x6b, 0x01, 0x43, 0xa6, 0x48, 0x3d, - 0x6b, 0x01, 0x43, 0x47, 0x09, 0x3e, 0x6b, 0x41, 0x44, 0x82, 0xec, 0x3b, - 0x6b, 0x01, 0x43, 0xd7, 0x49, 0x63, 0x6b, 0x01, 0x44, 0x4e, 0xee, 0x42, - 0x6b, 0x01, 0x44, 0x3e, 0xef, 0x40, 0x6b, 0x01, 0xb4, 0x01, 0xff, 0xa8, - 0x06, 0x49, 0xbe, 0xbc, 0x38, 0x6b, 0x41, 0x43, 0x6b, 0x49, 0x3a, 0x6b, - 0x01, 0x42, 0xe9, 0x04, 0x37, 0x6b, 0x41, 0x42, 0xd7, 0x23, 0x6f, 0x6b, - 0x01, 0x4e, 0xd8, 0x76, 0x66, 0x6b, 0x01, 0x4a, 0x75, 0xb1, 0x6d, 0x6b, - 0x41, 0x43, 0x41, 0xf1, 0x69, 0x6b, 0x01, 0x43, 0x56, 0xf1, 0x6b, 0x6b, - 0x41, 0x04, 0x77, 0xb1, 0x06, 0x42, 0xc4, 0x02, 0x71, 0x6b, 0x41, 0x44, - 0x6a, 0xef, 0x41, 0x6b, 0x01, 0x45, 0x63, 0xe8, 0x6e, 0x6b, 0x41, 0x42, - 0xc3, 0x01, 0x65, 0x6b, 0x01, 0x43, 0x7f, 0x30, 0x68, 0x6b, 0x41, 0xa3, - 0x28, 0x52, 0xcc, 0x50, 0x72, 0x6b, 0x01, 0x48, 0x4a, 0xc6, 0x77, 0x6b, - 0x01, 0x48, 0x52, 0xc7, 0x76, 0x6b, 0x01, 0xb4, 0x01, 0xff, 0x47, 0x21, - 0xd3, 0x45, 0x6b, 0x01, 0x43, 0x86, 0xf1, 0x74, 0x6b, 0xc1, 0x00, 0x45, - 0x90, 0xde, 0x75, 0x6b, 0x41, 0x44, 0xde, 0x17, 0x39, 0x6b, 0x01, 0x4a, - 0x2b, 0xb0, 0x73, 0x6b, 0x41, 0x07, 0x22, 0x11, 0x25, 0x48, 0x25, 0x3b, - 0x5e, 0x6b, 0x01, 0xb4, 0x01, 0xff, 0x02, 0x92, 0x01, 0x06, 0x48, 0xba, - 0xc7, 0x61, 0x6b, 0x41, 0x80, 0x04, 0xf3, 0x5b, 0x6b, 0x41, 0x48, 0x92, - 0xc1, 0x60, 0x6b, 0x01, 0x49, 0x8c, 0x7b, 0x5d, 0x6b, 0x41, 0x49, 0x24, - 0x3b, 0x5f, 0x6b, 0x01, 0xf3, 0x5c, 0x6b, 0x41, 0x43, 0xce, 0xc8, 0x35, - 0x6b, 0x01, 0xab, 0x1b, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x43, 0x52, 0xb0, - 0x36, 0x6b, 0x01, 0x42, 0x3d, 0x01, 0x30, 0x6b, 0x41, 0xef, 0x31, 0x6b, - 0x01, 0x43, 0x61, 0x74, 0x34, 0x6b, 0x41, 0x42, 0xed, 0x00, 0x32, 0x6b, - 0x01, 0x43, 0x9f, 0x4a, 0x33, 0x6b, 0x41, 0x45, 0xc3, 0x0a, 0x58, 0x6b, - 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x59, 0x6b, 0x01, 0x43, 0xbf, 0x0a, - 0x51, 0x6b, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x50, 0x6b, - 0x41, 0x44, 0x25, 0x01, 0x53, 0x6b, 0x01, 0x42, 0x15, 0x02, 0x52, 0x6b, - 0x41, 0x44, 0x27, 0x1d, 0x57, 0x6b, 0x01, 0x42, 0x60, 0x25, 0x56, 0x6b, - 0x41, 0x43, 0xa7, 0x05, 0x55, 0x6b, 0x01, 0x43, 0xcb, 0x06, 0x54, 0x6b, - 0x41, 0x09, 0xd7, 0xb8, 0x86, 0x01, 0x09, 0x58, 0x32, 0x01, 0xff, 0x42, - 0xd7, 0x23, 0x2d, 0x6b, 0x01, 0xa3, 0x6d, 0xa8, 0x59, 0x43, 0xd6, 0x23, - 0x1e, 0x6b, 0x01, 0x43, 0xfa, 0xdd, 0x26, 0x6b, 0x01, 0xae, 0x24, 0x45, - 0xc9, 0xe6, 0x2a, 0x6b, 0x01, 0x44, 0xea, 0xee, 0x23, 0x6b, 0x01, 0x43, - 0x09, 0x57, 0x21, 0x6b, 0x01, 0x43, 0x68, 0xf1, 0x1c, 0x6b, 0x01, 0x43, - 0x80, 0xf1, 0x2e, 0x6b, 0x01, 0x43, 0x67, 0x7f, 0x24, 0x6b, 0x41, 0x42, - 0xd7, 0x23, 0x2c, 0x6b, 0x01, 0x44, 0x2a, 0xec, 0x28, 0x6b, 0x01, 0x43, - 0x74, 0xcc, 0x22, 0x6b, 0x01, 0x43, 0xd6, 0x23, 0x20, 0x6b, 0x01, 0xb4, - 0x01, 0xff, 0x43, 0x6a, 0x7c, 0x2b, 0x6b, 0x01, 0x43, 0xef, 0x8f, 0x1d, - 0x6b, 0x41, 0x42, 0xd7, 0x23, 0x1f, 0x6b, 0x01, 0x43, 0xd6, 0x23, 0x25, - 0x6b, 0x01, 0x43, 0x06, 0x5b, 0x29, 0x6b, 0x41, 0x42, 0xd7, 0x23, 0x2f, - 0x6b, 0x01, 0x43, 0x6a, 0x7c, 0x27, 0x6b, 0x41, 0x43, 0xed, 0xf0, 0x8b, - 0x6b, 0x01, 0x02, 0x22, 0x00, 0x6e, 0xab, 0x5a, 0xac, 0x4c, 0x44, 0x02, - 0xee, 0x84, 0x6b, 0x01, 0x44, 0xc6, 0xee, 0x87, 0x6b, 0x01, 0xb4, 0x23, - 0xb6, 0x15, 0x45, 0x4e, 0xe9, 0x81, 0x6b, 0x01, 0xb9, 0x01, 0xff, 0x42, - 0x35, 0x22, 0x8c, 0x6b, 0x01, 0x43, 0xdb, 0xf0, 0x7e, 0x6b, 0x41, 0x42, - 0x35, 0x22, 0x8a, 0x6b, 0x01, 0x42, 0xc2, 0x02, 0x8f, 0x6b, 0x41, 0x43, - 0xfc, 0xf0, 0x85, 0x6b, 0x01, 0xb3, 0x01, 0xff, 0x42, 0x5c, 0x00, 0x86, - 0x6b, 0x01, 0x44, 0x76, 0xb1, 0x7d, 0x6b, 0x01, 0x42, 0xfa, 0x38, 0x8d, - 0x6b, 0x41, 0x43, 0x99, 0xf0, 0x80, 0x6b, 0x01, 0x42, 0x34, 0x03, 0x7f, - 0x6b, 0x41, 0x43, 0xe3, 0x8a, 0x88, 0x6b, 0x01, 0x42, 0x69, 0x05, 0x82, - 0x6b, 0x01, 0x42, 0xc1, 0x5a, 0x8e, 0x6b, 0x41, 0xed, 0x89, 0x6b, 0x01, - 0x42, 0xc2, 0x02, 0x83, 0x6b, 0x41, 0xe5, 0xcf, 0xf5, 0x81, 0x06, 0x43, - 0xd2, 0x7e, 0xd4, 0xf6, 0x41, 0x80, 0x08, 0xf2, 0xdf, 0xf4, 0x01, 0xf3, - 0xd0, 0xf5, 0x41, 0x49, 0x7c, 0xb6, 0xc4, 0xf4, 0x01, 0x06, 0x9f, 0x04, - 0x01, 0xff, 0x4b, 0x7e, 0x9b, 0xdf, 0xf5, 0x01, 0x43, 0x24, 0x0b, 0xc3, - 0xf4, 0x41, 0xa2, 0xaf, 0x2e, 0xa3, 0xcb, 0x2d, 0x43, 0xa0, 0x0a, 0x62, - 0xf3, 0x01, 0x4e, 0x68, 0x76, 0xe2, 0xf3, 0x01, 0xa7, 0xf2, 0x2b, 0x47, - 0x7b, 0xc6, 0x26, 0x21, 0x00, 0x47, 0x15, 0xcf, 0xe2, 0xf6, 0x01, 0x4b, - 0x6a, 0x91, 0x4c, 0xf4, 0x01, 0xac, 0xd1, 0x12, 0x48, 0xa3, 0xba, 0x49, - 0xf5, 0x01, 0xae, 0xf9, 0x11, 0xb0, 0xc8, 0x10, 0xb2, 0xb3, 0x0b, 0xb3, - 0xfd, 0x05, 0x02, 0xc3, 0x05, 0xab, 0x02, 0xb5, 0x46, 0x03, 0x32, 0x00, - 0x10, 0x42, 0x6a, 0x03, 0x89, 0xf9, 0x01, 0xf8, 0x02, 0xf4, 0x01, 0x45, - 0x67, 0xe9, 0xaa, 0xf9, 0x41, 0x4b, 0xa2, 0x9a, 0x75, 0xf9, 0x01, 0xac, - 0x01, 0xff, 0x42, 0xba, 0x05, 0xd7, 0xf5, 0x81, 0x06, 0x43, 0xc3, 0x07, - 0x3e, 0x20, 0x40, 0x05, 0x45, 0x2f, 0x01, 0xff, 0x4d, 0xdb, 0x56, 0xbc, - 0x2b, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, 0x51, 0xd7, 0x56, 0xbb, 0x2b, - 0x00, 0x47, 0xe1, 0x56, 0xba, 0x2b, 0x40, 0x48, 0xf2, 0xc5, 0x25, 0x21, - 0x00, 0xb4, 0x01, 0xff, 0x48, 0xca, 0xc1, 0xe4, 0xf4, 0x01, 0x06, 0xcc, - 0x10, 0x01, 0xff, 0x4a, 0x53, 0x2b, 0x2d, 0x27, 0x00, 0x06, 0xc4, 0x06, - 0x82, 0x01, 0x4b, 0x9f, 0x5f, 0x19, 0x27, 0x00, 0x07, 0xb3, 0x05, 0x06, - 0x4a, 0x96, 0x2d, 0x9d, 0x26, 0x40, 0x0e, 0xba, 0x05, 0x06, 0x44, 0x47, - 0x10, 0x1f, 0x27, 0x40, 0xe1, 0xd6, 0xcc, 0x01, 0xe2, 0xd7, 0xcc, 0x01, - 0xe3, 0xd8, 0xcc, 0x01, 0xe4, 0xd9, 0xcc, 0x01, 0xe5, 0xda, 0xcc, 0x01, - 0xe6, 0xdb, 0xcc, 0x01, 0xe7, 0xdc, 0xcc, 0x01, 0xe8, 0xdd, 0xcc, 0x01, - 0xe9, 0xde, 0xcc, 0x01, 0xea, 0xdf, 0xcc, 0x01, 0xeb, 0xe0, 0xcc, 0x01, - 0xec, 0xe1, 0xcc, 0x01, 0xed, 0xe2, 0xcc, 0x01, 0xee, 0xe3, 0xcc, 0x01, - 0xef, 0xe4, 0xcc, 0x01, 0xf0, 0xe5, 0xcc, 0x01, 0xf1, 0xe6, 0xcc, 0x01, - 0xf2, 0xe7, 0xcc, 0x01, 0xf3, 0xe8, 0xcc, 0x01, 0xf4, 0xe9, 0xcc, 0x01, - 0xf5, 0xea, 0xcc, 0x01, 0xf6, 0xeb, 0xcc, 0x01, 0xf7, 0xec, 0xcc, 0x01, - 0xf8, 0xed, 0xcc, 0x01, 0xf9, 0xee, 0xcc, 0x01, 0xfa, 0xef, 0xcc, 0x41, - 0x45, 0xc3, 0x0a, 0xf8, 0xcc, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xf9, - 0xcc, 0x01, 0x43, 0xbf, 0x0a, 0xf1, 0xcc, 0x01, 0xb3, 0x14, 0xb4, 0x06, - 0x44, 0xa1, 0x1d, 0xf0, 0xcc, 0x41, 0x44, 0x25, 0x01, 0xf3, 0xcc, 0x01, - 0x42, 0x15, 0x02, 0xf2, 0xcc, 0x41, 0x44, 0x27, 0x1d, 0xf7, 0xcc, 0x01, - 0x42, 0x60, 0x25, 0xf6, 0xcc, 0x41, 0x43, 0xa7, 0x05, 0xf5, 0xcc, 0x01, - 0x43, 0xcb, 0x06, 0xf4, 0xcc, 0x41, 0x42, 0x33, 0x00, 0xa6, 0xf9, 0x01, - 0x0b, 0x80, 0x9e, 0x01, 0xff, 0x11, 0xb5, 0x56, 0xe4, 0x02, 0x0d, 0xb3, - 0x58, 0xd3, 0x02, 0x48, 0x92, 0xc5, 0x2e, 0xed, 0x01, 0x07, 0x2f, 0x39, - 0x01, 0xff, 0x45, 0xc3, 0x0a, 0x08, 0xed, 0x81, 0xa7, 0x02, 0xa6, 0xd9, - 0x01, 0x44, 0x46, 0x2a, 0x09, 0xed, 0x81, 0xb6, 0x01, 0x43, 0xbf, 0x0a, - 0x01, 0xed, 0x81, 0x9f, 0x01, 0xb3, 0x59, 0xb4, 0x01, 0xff, 0x42, 0x92, - 0x01, 0x0a, 0xed, 0x81, 0x49, 0xa8, 0x24, 0xb7, 0x01, 0xff, 0x44, 0x29, - 0x1d, 0x0b, 0xed, 0x81, 0x14, 0xef, 0x02, 0xed, 0xc1, 0x00, 0x80, 0x01, - 0xff, 0x47, 0x22, 0x11, 0x14, 0xed, 0x01, 0x48, 0xd5, 0x5c, 0x1d, 0xed, - 0x41, 0x49, 0xd4, 0x5c, 0x26, 0xed, 0x41, 0x44, 0x2c, 0x11, 0x0c, 0xed, - 0x81, 0x16, 0x43, 0x26, 0x01, 0x03, 0xed, 0xc1, 0x00, 0x80, 0x01, 0xff, - 0x47, 0x22, 0x11, 0x15, 0xed, 0x01, 0x48, 0xd5, 0x5c, 0x1e, 0xed, 0x41, - 0x49, 0xd4, 0x5c, 0x27, 0xed, 0x41, 0x49, 0xd4, 0x5c, 0x25, 0xed, 0x41, - 0x44, 0x27, 0x1d, 0x07, 0xed, 0x81, 0x22, 0x42, 0x60, 0x25, 0x06, 0xed, - 0xc1, 0x00, 0x80, 0x0d, 0x42, 0x2e, 0x11, 0x0f, 0xed, 0xc1, 0x00, 0x49, - 0xd4, 0x5c, 0x2a, 0xed, 0x41, 0x47, 0x22, 0x11, 0x18, 0xed, 0x01, 0x48, - 0xd5, 0x5c, 0x21, 0xed, 0x41, 0x80, 0x0d, 0x42, 0x2e, 0x11, 0x10, 0xed, - 0xc1, 0x00, 0x49, 0xd4, 0x5c, 0x2b, 0xed, 0x41, 0x47, 0x22, 0x11, 0x19, - 0xed, 0x01, 0x48, 0xd5, 0x5c, 0x22, 0xed, 0x41, 0x80, 0x01, 0xff, 0x47, - 0x22, 0x11, 0x13, 0xed, 0x01, 0x48, 0xd5, 0x5c, 0x1c, 0xed, 0x41, 0x80, - 0x0d, 0x42, 0x2e, 0x11, 0x12, 0xed, 0xc1, 0x00, 0x49, 0xd4, 0x5c, 0x2d, - 0xed, 0x41, 0x47, 0x22, 0x11, 0x1b, 0xed, 0x01, 0x48, 0xd5, 0x5c, 0x24, - 0xed, 0x41, 0xa9, 0x26, 0xaf, 0x01, 0xff, 0x43, 0x2d, 0x11, 0x0d, 0xed, - 0x81, 0x16, 0x42, 0x42, 0x00, 0x04, 0xed, 0xc1, 0x00, 0x80, 0x01, 0xff, - 0x47, 0x22, 0x11, 0x16, 0xed, 0x01, 0x48, 0xd5, 0x5c, 0x1f, 0xed, 0x41, - 0x49, 0xd4, 0x5c, 0x28, 0xed, 0x41, 0x43, 0x09, 0x4c, 0x0e, 0xed, 0x81, - 0x16, 0x42, 0x32, 0x00, 0x05, 0xed, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, - 0x22, 0x11, 0x17, 0xed, 0x01, 0x48, 0xd5, 0x5c, 0x20, 0xed, 0x41, 0x49, - 0xd4, 0x5c, 0x29, 0xed, 0x41, 0x80, 0x0b, 0xf9, 0x11, 0xed, 0xc1, 0x00, - 0x49, 0xd4, 0x5c, 0x2c, 0xed, 0x41, 0x47, 0x22, 0x11, 0x1a, 0xed, 0x01, - 0x48, 0xd5, 0x5c, 0x23, 0xed, 0x41, 0x44, 0x22, 0x00, 0x3c, 0xed, 0x01, - 0x45, 0xdc, 0xdc, 0x3d, 0xed, 0x41, 0x45, 0xc3, 0x0a, 0x35, 0xed, 0x01, - 0xa6, 0x3e, 0x44, 0x46, 0x2a, 0x36, 0xed, 0x01, 0xb3, 0x23, 0xb4, 0x01, - 0xff, 0x42, 0x92, 0x01, 0x37, 0xed, 0x81, 0x13, 0x44, 0x25, 0x01, 0x30, - 0xed, 0x01, 0x42, 0x15, 0x02, 0x2f, 0xed, 0xc1, 0x00, 0x49, 0xd4, 0x5c, - 0x3a, 0xed, 0x41, 0x49, 0xd4, 0x5c, 0x3b, 0xed, 0x41, 0x44, 0x27, 0x1d, - 0x34, 0xed, 0x01, 0x42, 0x60, 0x25, 0x33, 0xed, 0xc1, 0x00, 0x48, 0x21, - 0x11, 0x39, 0xed, 0x41, 0x43, 0xa7, 0x05, 0x32, 0xed, 0x01, 0x43, 0xcb, - 0x06, 0x31, 0xed, 0xc1, 0x00, 0x48, 0x21, 0x11, 0x38, 0xed, 0x41, 0x04, - 0x15, 0x42, 0xfe, 0x01, 0x06, 0x02, 0xdb, 0x01, 0xff, 0x06, 0xc4, 0x06, - 0xb2, 0x01, 0x07, 0xc1, 0x05, 0x01, 0xff, 0xe1, 0x96, 0x04, 0x81, 0x9d, - 0x01, 0x42, 0x16, 0x00, 0x81, 0x04, 0x01, 0x44, 0x26, 0xec, 0x8b, 0x04, - 0x01, 0xa4, 0x82, 0x01, 0xe5, 0x97, 0x04, 0x81, 0x79, 0x42, 0xe1, 0x07, - 0x8d, 0x04, 0x01, 0x42, 0x24, 0x02, 0x8c, 0x04, 0x01, 0x42, 0x22, 0x00, - 0x94, 0x04, 0x01, 0xe9, 0x98, 0x04, 0x01, 0x42, 0xbd, 0x26, 0x83, 0x04, - 0x01, 0xab, 0x4f, 0x44, 0xc8, 0xeb, 0x90, 0x04, 0x01, 0x44, 0xf2, 0xed, - 0x91, 0x04, 0x01, 0x44, 0x66, 0xee, 0x92, 0x04, 0x01, 0xef, 0x99, 0x04, - 0x81, 0x34, 0x44, 0xf6, 0xe6, 0x8e, 0x04, 0x01, 0x42, 0x71, 0x00, 0x87, - 0x04, 0x01, 0xb3, 0x1c, 0x42, 0x12, 0x00, 0x82, 0x04, 0x01, 0xf5, 0x9a, - 0x04, 0x01, 0x43, 0xc0, 0x88, 0x93, 0x04, 0x01, 0x42, 0x4c, 0x26, 0x84, - 0x04, 0x01, 0x42, 0x34, 0x22, 0x95, 0x04, 0x41, 0xe1, 0x88, 0x04, 0x01, - 0x44, 0x06, 0xed, 0x89, 0x04, 0x41, 0xef, 0x9d, 0x04, 0x41, 0x43, 0x94, - 0xc0, 0x8f, 0x04, 0x01, 0x42, 0x22, 0x00, 0x85, 0x04, 0x41, 0xe5, 0x9c, - 0x04, 0x41, 0x43, 0xde, 0x12, 0x86, 0x04, 0x01, 0x42, 0x22, 0x00, 0x8a, - 0x04, 0x41, 0xe1, 0x9b, 0x04, 0x01, 0x43, 0x68, 0x00, 0x80, 0x04, 0x41, - 0x45, 0xc3, 0x0a, 0xa8, 0x04, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xa9, - 0x04, 0x01, 0x43, 0xbf, 0x0a, 0xa1, 0x04, 0x01, 0xb3, 0x14, 0xb4, 0x06, - 0x44, 0xa1, 0x1d, 0xa0, 0x04, 0x41, 0x44, 0x25, 0x01, 0xa3, 0x04, 0x01, - 0x42, 0x15, 0x02, 0xa2, 0x04, 0x41, 0x44, 0x27, 0x1d, 0xa7, 0x04, 0x01, - 0x42, 0x60, 0x25, 0xa6, 0x04, 0x41, 0x43, 0xa7, 0x05, 0xa5, 0x04, 0x01, - 0x43, 0xcb, 0x06, 0xa4, 0x04, 0x41, 0x0f, 0xb9, 0x05, 0xd8, 0x01, 0x0d, - 0x4b, 0x08, 0x01, 0xff, 0xe1, 0xd8, 0x04, 0x81, 0xc0, 0x01, 0x43, 0x14, - 0x09, 0xdc, 0x04, 0x01, 0x43, 0xef, 0x1f, 0xdd, 0x04, 0x01, 0x43, 0x9e, - 0x4a, 0xf5, 0x04, 0x01, 0xe5, 0xdf, 0x04, 0x81, 0x81, 0x01, 0x43, 0xf3, - 0x99, 0xf9, 0x04, 0x01, 0xa8, 0x6f, 0xe9, 0xe3, 0x04, 0x01, 0xab, 0x59, - 0x42, 0x74, 0x00, 0xe7, 0x04, 0x01, 0x42, 0x6c, 0x00, 0xe8, 0x04, 0x01, - 0x42, 0xff, 0x04, 0xe9, 0x04, 0x01, 0xef, 0xea, 0x04, 0x81, 0x3c, 0x42, - 0x6c, 0x09, 0xec, 0x04, 0x01, 0xb3, 0x2a, 0xb4, 0x17, 0xf5, 0xf6, 0x04, - 0x01, 0x42, 0xa9, 0x01, 0xf7, 0x04, 0x01, 0xba, 0x01, 0xff, 0xe1, 0xfa, - 0x04, 0x01, 0x42, 0x22, 0x00, 0xfb, 0x04, 0x41, 0xe1, 0xf0, 0x04, 0x01, - 0xb3, 0x01, 0xff, 0xe1, 0xf2, 0x04, 0x01, 0x42, 0x22, 0x00, 0xf4, 0x04, - 0x41, 0xe1, 0xee, 0x04, 0x01, 0x42, 0x22, 0x00, 0xef, 0x04, 0x41, 0x42, - 0x9e, 0x01, 0xeb, 0x04, 0x41, 0xe1, 0xe4, 0x04, 0x01, 0x42, 0x22, 0x00, - 0xf8, 0x04, 0x01, 0x42, 0x34, 0x22, 0xe6, 0x04, 0x41, 0xe1, 0xe1, 0x04, - 0x01, 0x42, 0x34, 0x22, 0xe2, 0x04, 0x41, 0xa8, 0x06, 0x42, 0x9e, 0x01, - 0xe0, 0x04, 0x41, 0x43, 0xef, 0x1f, 0xde, 0x04, 0x01, 0x42, 0x1b, 0x02, - 0xe5, 0x04, 0x01, 0x42, 0x6c, 0x09, 0xed, 0x04, 0x01, 0xb4, 0x01, 0xff, - 0xe1, 0xf1, 0x04, 0x01, 0x42, 0x15, 0x06, 0xf3, 0x04, 0x41, 0xe8, 0xdb, - 0x04, 0x01, 0xe9, 0xd9, 0x04, 0xc1, 0x00, 0xee, 0xda, 0x04, 0x41, 0xe1, - 0xb0, 0x04, 0x81, 0xc0, 0x01, 0x43, 0x14, 0x09, 0xb4, 0x04, 0x01, 0x43, - 0xef, 0x1f, 0xb5, 0x04, 0x01, 0x43, 0x9e, 0x4a, 0xcd, 0x04, 0x01, 0xe5, - 0xb7, 0x04, 0x81, 0x81, 0x01, 0x43, 0xf3, 0x99, 0xd1, 0x04, 0x01, 0xa8, - 0x6f, 0xe9, 0xbb, 0x04, 0x01, 0xab, 0x59, 0x42, 0x74, 0x00, 0xbf, 0x04, - 0x01, 0x42, 0x6c, 0x00, 0xc0, 0x04, 0x01, 0x42, 0xff, 0x04, 0xc1, 0x04, - 0x01, 0xef, 0xc2, 0x04, 0x81, 0x3c, 0x42, 0x6c, 0x09, 0xc4, 0x04, 0x01, - 0xb3, 0x2a, 0xb4, 0x17, 0xf5, 0xce, 0x04, 0x01, 0x42, 0xa9, 0x01, 0xcf, - 0x04, 0x01, 0xba, 0x01, 0xff, 0xe1, 0xd2, 0x04, 0x01, 0x42, 0x22, 0x00, - 0xd3, 0x04, 0x41, 0xe1, 0xc8, 0x04, 0x01, 0xb3, 0x01, 0xff, 0xe1, 0xca, - 0x04, 0x01, 0x42, 0x22, 0x00, 0xcc, 0x04, 0x41, 0xe1, 0xc6, 0x04, 0x01, - 0x42, 0x22, 0x00, 0xc7, 0x04, 0x41, 0x42, 0x9e, 0x01, 0xc3, 0x04, 0x41, - 0xe1, 0xbc, 0x04, 0x01, 0x42, 0x22, 0x00, 0xd0, 0x04, 0x01, 0x42, 0x34, - 0x22, 0xbe, 0x04, 0x41, 0xe1, 0xb9, 0x04, 0x01, 0x42, 0x34, 0x22, 0xba, - 0x04, 0x41, 0xa8, 0x06, 0x42, 0x9e, 0x01, 0xb8, 0x04, 0x41, 0x43, 0xef, - 0x1f, 0xb6, 0x04, 0x01, 0x42, 0x1b, 0x02, 0xbd, 0x04, 0x01, 0x42, 0x6c, - 0x09, 0xc5, 0x04, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0xc9, 0x04, 0x01, 0x42, - 0x15, 0x06, 0xcb, 0x04, 0x41, 0xe8, 0xb3, 0x04, 0x01, 0xe9, 0xb1, 0x04, - 0xc1, 0x00, 0xee, 0xb2, 0x04, 0x41, 0x50, 0x2a, 0x5f, 0xc7, 0x27, 0x00, - 0x03, 0x1c, 0x01, 0xf1, 0x04, 0x43, 0xa6, 0x15, 0x7f, 0xf7, 0x01, 0xa9, - 0x21, 0x05, 0xa7, 0x11, 0x11, 0x03, 0xff, 0x07, 0x01, 0xff, 0x49, 0x89, - 0xb5, 0x26, 0x26, 0x00, 0x55, 0x01, 0x21, 0x42, 0xcc, 0x41, 0x50, 0xf7, - 0x23, 0x3e, 0xfd, 0x00, 0x51, 0x4a, 0x21, 0x3f, 0xfd, 0x40, 0x48, 0xfc, - 0x2e, 0xb6, 0x22, 0x00, 0x03, 0xd1, 0x31, 0x01, 0xff, 0xa1, 0xae, 0x04, - 0x06, 0xc4, 0x06, 0xe7, 0x03, 0x09, 0xb3, 0x58, 0xb5, 0x03, 0x46, 0x2a, - 0xda, 0x70, 0x0b, 0x00, 0x07, 0xc1, 0x05, 0x79, 0x05, 0x2f, 0x03, 0x44, - 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x31, 0xe5, 0x47, 0x0b, 0x00, 0xe9, - 0x3f, 0x0b, 0x80, 0x24, 0xef, 0x4b, 0x0b, 0x00, 0xf5, 0x41, 0x0b, 0x80, - 0x17, 0x08, 0x9b, 0xbe, 0x01, 0xff, 0xec, 0x62, 0x0b, 0x80, 0x09, 0xf2, - 0x43, 0x0b, 0xc0, 0x00, 0xf2, 0x44, 0x0b, 0x40, 0xec, 0x63, 0x0b, 0x40, - 0xf5, 0x42, 0x0b, 0x40, 0xe9, 0x40, 0x0b, 0x40, 0xe1, 0x3e, 0x0b, 0x00, - 0xe9, 0x48, 0x0b, 0x00, 0xf5, 0x4c, 0x0b, 0x40, 0xa1, 0x23, 0x4b, 0x4f, - 0x23, 0x01, 0x0b, 0x00, 0x45, 0x5a, 0x3e, 0x3c, 0x0b, 0x00, 0x48, 0xb8, - 0x88, 0x55, 0x0b, 0x00, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, - 0x4d, 0x0b, 0x00, 0x45, 0xa3, 0x4a, 0x03, 0x0b, 0x40, 0x47, 0xd1, 0x15, - 0x02, 0x0b, 0x00, 0x47, 0xf2, 0x86, 0x3d, 0x0b, 0x40, 0xe1, 0x05, 0x0b, - 0x80, 0xa0, 0x02, 0xa2, 0x93, 0x02, 0xa3, 0x86, 0x02, 0xa4, 0xed, 0x01, - 0xe5, 0x0f, 0x0b, 0x00, 0xa7, 0xdc, 0x01, 0x42, 0x22, 0x00, 0x39, 0x0b, - 0x00, 0xe9, 0x07, 0x0b, 0x80, 0xcc, 0x01, 0xaa, 0xbf, 0x01, 0xab, 0xb2, - 0x01, 0xac, 0xa5, 0x01, 0x42, 0x6c, 0x00, 0x2e, 0x0b, 0x00, 0xae, 0x86, - 0x01, 0xef, 0x13, 0x0b, 0x00, 0xb0, 0x76, 0xb2, 0x64, 0xb3, 0x52, 0xb4, - 0x39, 0xf5, 0x09, 0x0b, 0x80, 0x30, 0xb6, 0x13, 0x42, 0xa9, 0x01, 0x71, - 0x0b, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0x2f, 0x0b, 0x00, 0x42, 0x34, 0x22, - 0x5f, 0x0b, 0x40, 0xe1, 0x35, 0x0b, 0x00, 0x07, 0x9c, 0xbe, 0x01, 0xff, - 0xec, 0x0c, 0x0b, 0x80, 0x09, 0xf2, 0x0b, 0x0b, 0xc0, 0x00, 0xf2, 0x60, - 0x0b, 0x40, 0xec, 0x61, 0x0b, 0x40, 0xf5, 0x0a, 0x0b, 0x40, 0xe1, 0x24, - 0x0b, 0x00, 0x42, 0x22, 0x00, 0x25, 0x0b, 0x00, 0xb4, 0x01, 0xff, 0xe1, - 0x1f, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x20, 0x0b, 0x40, 0xe1, 0x38, 0x0b, - 0x00, 0x42, 0x22, 0x00, 0x36, 0x0b, 0x00, 0x42, 0x15, 0x06, 0x37, 0x0b, - 0x40, 0xe1, 0x30, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x5d, 0x0b, 0x00, 0x42, - 0x71, 0x00, 0x5c, 0x0b, 0x40, 0xe1, 0x2a, 0x0b, 0x00, 0x42, 0x22, 0x00, - 0x2b, 0x0b, 0x40, 0xe1, 0x28, 0x0b, 0x00, 0x42, 0x24, 0x02, 0x19, 0x0b, - 0x00, 0x42, 0xff, 0x04, 0x23, 0x0b, 0x00, 0x42, 0x34, 0x22, 0x1e, 0x0b, - 0x40, 0xe1, 0x32, 0x0b, 0x00, 0x42, 0x74, 0x00, 0x33, 0x0b, 0x40, 0xe1, - 0x15, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x16, 0x0b, 0x40, 0xe1, 0x1c, 0x0b, - 0x00, 0x42, 0x22, 0x00, 0x1d, 0x0b, 0x40, 0xe9, 0x08, 0x0b, 0x40, 0xe1, - 0x17, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x18, 0x0b, 0x40, 0xe1, 0x26, 0x0b, - 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x27, 0x0b, 0x40, 0xe1, 0x21, 0x0b, - 0x00, 0x42, 0x22, 0x00, 0x22, 0x0b, 0x40, 0xe1, 0x1a, 0x0b, 0x00, 0x42, - 0x22, 0x00, 0x1b, 0x0b, 0x40, 0xe1, 0x2c, 0x0b, 0x00, 0x42, 0x22, 0x00, - 0x2d, 0x0b, 0x40, 0xe1, 0x06, 0x0b, 0x00, 0xe9, 0x10, 0x0b, 0x00, 0xf5, - 0x14, 0x0b, 0x40, 0x04, 0xbf, 0x0a, 0x11, 0x06, 0x24, 0x01, 0x01, 0xff, - 0x48, 0x2a, 0x01, 0x74, 0x0b, 0x00, 0x4a, 0xc3, 0xae, 0x77, 0x0b, 0x40, - 0x46, 0xc3, 0x0a, 0x76, 0x0b, 0x00, 0x44, 0x22, 0x00, 0x73, 0x0b, 0x00, - 0x47, 0x2a, 0x01, 0x72, 0x0b, 0x00, 0x49, 0x5f, 0x25, 0x75, 0x0b, 0x40, - 0x45, 0xc3, 0x0a, 0x6e, 0x0b, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x6f, - 0x0b, 0x00, 0x43, 0xbf, 0x0a, 0x67, 0x0b, 0x00, 0xb3, 0x14, 0xb4, 0x06, - 0x44, 0xa1, 0x1d, 0x66, 0x0b, 0x40, 0x44, 0x25, 0x01, 0x69, 0x0b, 0x00, - 0x42, 0x15, 0x02, 0x68, 0x0b, 0x40, 0x44, 0x27, 0x1d, 0x6d, 0x0b, 0x00, - 0x42, 0x60, 0x25, 0x6c, 0x0b, 0x40, 0x43, 0xa7, 0x05, 0x6b, 0x0b, 0x00, - 0x43, 0xcb, 0x06, 0x6a, 0x0b, 0x40, 0x4d, 0x39, 0x74, 0x56, 0x0b, 0x00, - 0x4d, 0x9b, 0x74, 0x57, 0x0b, 0x40, 0x02, 0x60, 0x00, 0x06, 0x44, 0x9e, - 0xef, 0xa7, 0xf9, 0x41, 0x44, 0x0e, 0xec, 0xd9, 0xf4, 0x01, 0x45, 0x24, - 0x21, 0xe1, 0xf9, 0x41, 0xa5, 0x24, 0x47, 0xc1, 0xce, 0xce, 0x26, 0x00, - 0x48, 0xa0, 0x16, 0x0d, 0x26, 0x00, 0x02, 0x35, 0x00, 0x01, 0xff, 0x48, - 0xf2, 0xc1, 0xbf, 0xf4, 0x81, 0x06, 0x46, 0xce, 0xdb, 0x25, 0x23, 0x40, - 0x45, 0xae, 0xde, 0xb8, 0xf5, 0x41, 0xae, 0x06, 0x55, 0xc1, 0x3c, 0x9d, - 0x00, 0x40, 0x80, 0x19, 0x8d, 0x01, 0xff, 0x0f, 0x0f, 0x6a, 0x06, 0x59, - 0xf1, 0x24, 0xbe, 0x27, 0x40, 0x4d, 0xe5, 0x81, 0x8f, 0x23, 0x00, 0x4d, - 0x37, 0x83, 0x90, 0x23, 0x40, 0x02, 0x5d, 0x00, 0x57, 0x07, 0x73, 0x02, - 0x3b, 0xa6, 0x2d, 0x4a, 0x22, 0x77, 0x50, 0xf4, 0x01, 0x44, 0x34, 0x01, - 0x13, 0xf5, 0x01, 0x0d, 0xc6, 0x83, 0x11, 0x02, 0x6f, 0x00, 0x01, 0xff, - 0x44, 0x4c, 0x12, 0xc3, 0x27, 0x00, 0x46, 0x59, 0x35, 0xc4, 0x27, 0x40, - 0x4c, 0xc5, 0x8f, 0xed, 0xf4, 0x01, 0x4b, 0x88, 0x9f, 0xec, 0xf4, 0x41, - 0x4a, 0x73, 0xa9, 0xc2, 0xf4, 0x01, 0x45, 0x40, 0x64, 0xc1, 0xf5, 0x41, - 0x48, 0xed, 0x0c, 0x32, 0x27, 0x00, 0x4a, 0x53, 0x2b, 0x2b, 0x27, 0x00, - 0x45, 0x46, 0x10, 0x1b, 0x27, 0x00, 0x58, 0xcd, 0x2a, 0x3c, 0x27, 0x40, - 0x42, 0x2a, 0x05, 0xd6, 0xf4, 0x01, 0xf8, 0x23, 0x24, 0x40, 0x72, 0xa7, - 0x00, 0x1b, 0xf5, 0x01, 0x07, 0x39, 0xcd, 0x27, 0xa5, 0x06, 0x43, 0xb5, - 0x00, 0xc5, 0xf9, 0x41, 0x80, 0x06, 0x4f, 0xb6, 0x68, 0x71, 0xfa, 0x41, - 0x4c, 0x45, 0x8b, 0xaf, 0xf5, 0x01, 0x04, 0xb4, 0x0b, 0x01, 0xff, 0x46, - 0x2e, 0x7c, 0x24, 0x20, 0x00, 0x59, 0xe3, 0x14, 0x2b, 0x2e, 0x40, 0x4a, - 0xdb, 0xa5, 0x98, 0xf6, 0x01, 0x43, 0xf5, 0x26, 0x8d, 0xf6, 0x01, 0x4b, - 0x08, 0x9a, 0xf1, 0xf6, 0x01, 0x4a, 0x51, 0xad, 0x94, 0xf6, 0x01, 0x44, - 0x82, 0xcc, 0x96, 0xf6, 0x41, 0x80, 0xf5, 0x14, 0xa4, 0x06, 0x43, 0xa7, + 0x1a, 0x41, 0x56, 0xbb, 0x35, 0x17, 0x21, 0x00, 0x03, 0x53, 0x00, 0x01, + 0xff, 0x05, 0xad, 0x23, 0x5c, 0x05, 0xbe, 0x1a, 0x01, 0xff, 0x45, 0xce, + 0x00, 0x99, 0x21, 0x80, 0x3b, 0x4b, 0xa5, 0x99, 0x0b, 0x2b, 0x00, 0x4c, + 0x2f, 0x8e, 0xd9, 0x21, 0x00, 0x09, 0x9c, 0x01, 0x19, 0x50, 0xe6, 0x66, + 0x57, 0xf8, 0x01, 0x55, 0x01, 0x02, 0x69, 0x2b, 0x80, 0x06, 0x4b, 0x49, + 0x10, 0x03, 0x2b, 0x40, 0x47, 0xd0, 0x14, 0x79, 0x2b, 0x40, 0x43, 0x7a, + 0xd0, 0x61, 0xf6, 0x01, 0x44, 0x39, 0x51, 0x51, 0xf6, 0x01, 0x49, 0x10, + 0xc1, 0x59, 0xf6, 0x41, 0x80, 0x01, 0xff, 0x54, 0x64, 0x40, 0x2a, 0x29, + 0x00, 0x48, 0x57, 0xb4, 0xbb, 0xf8, 0x01, 0x49, 0xa8, 0x24, 0x26, 0x29, + 0x40, 0x45, 0xce, 0x00, 0x98, 0x21, 0x80, 0x3b, 0x4b, 0xa5, 0x99, 0x0a, + 0x2b, 0x00, 0x4c, 0x2f, 0x8e, 0xd8, 0x21, 0x00, 0x09, 0x9c, 0x01, 0x19, + 0x50, 0xe6, 0x66, 0x56, 0xf8, 0x01, 0x55, 0x01, 0x02, 0x68, 0x2b, 0x80, + 0x06, 0x4b, 0x49, 0x10, 0x02, 0x2b, 0x40, 0x47, 0xd0, 0x14, 0x78, 0x2b, + 0x40, 0x43, 0x7a, 0xd0, 0x63, 0xf6, 0x01, 0x44, 0x39, 0x51, 0x53, 0xf6, + 0x01, 0x49, 0x10, 0xc1, 0x5b, 0xf6, 0x41, 0x80, 0x01, 0xff, 0x54, 0x8c, + 0x40, 0x29, 0x29, 0x00, 0x59, 0x9e, 0x23, 0x2d, 0x29, 0x00, 0x48, 0x57, + 0xb4, 0xba, 0xf8, 0x01, 0x49, 0xde, 0xbf, 0xf2, 0x21, 0x00, 0x49, 0xa8, + 0x24, 0x25, 0x29, 0x40, 0x06, 0xef, 0x06, 0x9d, 0x01, 0x07, 0xec, 0x05, + 0x01, 0xff, 0x42, 0x18, 0x0a, 0xe2, 0x10, 0x01, 0x43, 0x60, 0x4e, 0xd2, + 0x10, 0x01, 0x43, 0x04, 0xf4, 0xd3, 0x10, 0x01, 0x43, 0xcb, 0x2d, 0xd4, + 0x10, 0x01, 0xa5, 0x74, 0x43, 0x6f, 0xbc, 0xd5, 0x10, 0x01, 0x43, 0x26, + 0x21, 0xde, 0x10, 0x01, 0x42, 0xda, 0x2c, 0xe4, 0x10, 0x01, 0x43, 0x56, + 0x19, 0xe0, 0x10, 0x01, 0x43, 0x66, 0xd3, 0xdf, 0x10, 0x01, 0x43, 0x37, + 0x18, 0xd8, 0x10, 0x01, 0x02, 0x6c, 0x00, 0x44, 0xae, 0x30, 0x42, 0xfd, + 0x28, 0xe6, 0x10, 0x01, 0x43, 0xe2, 0x42, 0xdb, 0x10, 0x01, 0x43, 0x3e, + 0x18, 0xdd, 0x10, 0x01, 0x43, 0x86, 0xc6, 0xd0, 0x10, 0x01, 0x43, 0x17, + 0x0a, 0xd1, 0x10, 0x01, 0x42, 0x1c, 0x58, 0xe5, 0x10, 0x01, 0x43, 0x95, + 0xd5, 0xda, 0x10, 0x01, 0x43, 0xab, 0x4a, 0xdc, 0x10, 0x41, 0x42, 0x18, + 0x0a, 0xd9, 0x10, 0x01, 0x43, 0x6f, 0xbc, 0xd7, 0x10, 0x01, 0x43, 0xab, + 0x4a, 0xe1, 0x10, 0x41, 0xe5, 0xe8, 0x10, 0x01, 0xe8, 0xd6, 0x10, 0x41, + 0x42, 0x4e, 0x00, 0xe3, 0x10, 0x01, 0xe8, 0xe7, 0x10, 0x41, 0x45, 0x12, + 0x0b, 0xf8, 0x10, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xf9, 0x10, 0x01, + 0x43, 0x0e, 0x0b, 0xf1, 0x10, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, + 0x1e, 0xf0, 0x10, 0x41, 0x44, 0x25, 0x01, 0xf3, 0x10, 0x01, 0x42, 0x15, + 0x02, 0xf2, 0x10, 0x41, 0x44, 0xc9, 0x1d, 0xf7, 0x10, 0x01, 0x42, 0x01, + 0x26, 0xf6, 0x10, 0x41, 0x43, 0xd2, 0x05, 0xf5, 0x10, 0x01, 0x43, 0xf6, + 0x06, 0xf4, 0x10, 0x41, 0x56, 0xb4, 0x24, 0x6a, 0xf6, 0x81, 0x0d, 0x42, + 0xef, 0x02, 0x2f, 0x00, 0xc0, 0x00, 0x4d, 0xe0, 0x7f, 0xf6, 0x29, 0x40, + 0x50, 0x3e, 0x11, 0x6b, 0xf6, 0x41, 0x0a, 0x41, 0x59, 0xda, 0x01, 0x50, + 0xe6, 0x63, 0x45, 0x0f, 0x01, 0x07, 0xec, 0x05, 0x49, 0x07, 0xff, 0x39, + 0x29, 0x0c, 0x6d, 0x16, 0x01, 0xff, 0x4f, 0xad, 0x42, 0x57, 0x0f, 0x01, + 0x54, 0xa8, 0x42, 0x59, 0x0f, 0x01, 0x04, 0x1f, 0x0a, 0x01, 0xff, 0x51, + 0x1f, 0x59, 0x58, 0x0f, 0x01, 0x4d, 0x22, 0x8a, 0x55, 0x0f, 0xc1, 0x00, + 0x4a, 0x26, 0x59, 0x56, 0x0f, 0x41, 0x43, 0x0e, 0x0b, 0x51, 0x0f, 0x81, + 0x0f, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x52, 0x0f, 0x01, 0x45, 0x7f, + 0x2c, 0x53, 0x0f, 0x41, 0x48, 0x70, 0x11, 0x54, 0x0f, 0x41, 0xa1, 0x79, + 0x44, 0x41, 0xef, 0x31, 0x0f, 0x01, 0x44, 0xc1, 0xef, 0x43, 0x0f, 0x01, + 0x45, 0xdd, 0xaa, 0x32, 0x0f, 0x01, 0x42, 0xb0, 0x01, 0x33, 0x0f, 0x81, + 0x5a, 0x44, 0xcd, 0xf0, 0x38, 0x0f, 0x01, 0xac, 0x46, 0x43, 0xb4, 0x05, + 0x3a, 0x0f, 0x01, 0x43, 0xdc, 0x22, 0x3b, 0x0f, 0x01, 0x42, 0x6f, 0x02, + 0x3e, 0x0f, 0x01, 0x49, 0x76, 0x66, 0x40, 0x0f, 0x01, 0xb3, 0x18, 0x43, + 0xa4, 0xc4, 0x42, 0x0f, 0x01, 0x43, 0x8a, 0x8a, 0x34, 0x0f, 0x01, 0x44, + 0xa1, 0x52, 0x37, 0x0f, 0x01, 0x45, 0x9b, 0x52, 0x35, 0x0f, 0x41, 0xa1, + 0x06, 0x43, 0x7a, 0x16, 0x41, 0x0f, 0x41, 0x43, 0xad, 0xea, 0x3f, 0x0f, + 0x01, 0x44, 0x49, 0xe4, 0x3c, 0x0f, 0x41, 0x45, 0x4b, 0xdc, 0x39, 0x0f, + 0x01, 0x43, 0x93, 0x5a, 0x44, 0x0f, 0x41, 0x42, 0x53, 0x00, 0x36, 0x0f, + 0x41, 0x44, 0x18, 0x3d, 0x30, 0x0f, 0x01, 0x43, 0x7e, 0x1a, 0x3d, 0x0f, + 0x41, 0x06, 0x9b, 0x13, 0x43, 0x04, 0x03, 0x0c, 0x33, 0x05, 0xaf, 0x14, + 0x23, 0x4f, 0xe1, 0x6f, 0x4e, 0x0f, 0x01, 0x4a, 0x19, 0xb0, 0x4f, 0x0f, + 0x01, 0x4c, 0xc5, 0x0e, 0x50, 0x0f, 0x01, 0x09, 0xf1, 0x0b, 0x01, 0xff, + 0x45, 0x5c, 0x00, 0x49, 0x0f, 0x01, 0x45, 0x20, 0x07, 0x47, 0x0f, 0x41, + 0x45, 0x5c, 0x00, 0x4c, 0x0f, 0x01, 0x45, 0x20, 0x07, 0x4d, 0x0f, 0x41, + 0x45, 0x5c, 0x00, 0x48, 0x0f, 0x01, 0x45, 0x20, 0x07, 0x46, 0x0f, 0x41, + 0x45, 0x5c, 0x00, 0x4a, 0x0f, 0x01, 0x45, 0x20, 0x07, 0x4b, 0x0f, 0x41, + 0x80, 0x0c, 0x44, 0xcd, 0x1c, 0x4e, 0xf9, 0x01, 0x54, 0xa4, 0x46, 0x94, + 0x23, 0x40, 0x46, 0x96, 0x63, 0xad, 0x00, 0x00, 0x49, 0xf6, 0xb9, 0x66, + 0xf3, 0x01, 0x51, 0x51, 0x39, 0xac, 0xf5, 0x41, 0x48, 0x98, 0xc4, 0xbd, + 0x26, 0x00, 0x42, 0x6e, 0x00, 0xe6, 0xf9, 0x41, 0xa1, 0x2a, 0x4b, 0x94, + 0x9b, 0x27, 0xf9, 0x01, 0x02, 0xd1, 0x00, 0x01, 0xff, 0x50, 0x16, 0x60, + 0xd4, 0xf3, 0x01, 0x47, 0x95, 0xcf, 0xc2, 0xf3, 0x01, 0x45, 0xdd, 0x2e, + 0x44, 0x27, 0x00, 0x43, 0x41, 0x18, 0x03, 0x26, 0xc0, 0x00, 0x4d, 0xfa, + 0x7f, 0xc4, 0x26, 0x40, 0x42, 0x62, 0x01, 0x0c, 0xf4, 0x01, 0x42, 0x37, + 0x01, 0x0d, 0xf4, 0xc1, 0x00, 0x47, 0x15, 0x08, 0xfa, 0xcc, 0x41, 0xa1, + 0x86, 0x01, 0xa9, 0x06, 0x4c, 0x63, 0x7c, 0xac, 0xf6, 0x41, 0xac, 0x06, + 0x4a, 0x73, 0xb0, 0x0f, 0xf6, 0x41, 0xe5, 0x23, 0x23, 0x00, 0x04, 0xa1, + 0x01, 0x01, 0xff, 0x0e, 0x62, 0x1f, 0x5d, 0x0a, 0x0c, 0x08, 0x01, 0xff, + 0xa8, 0x44, 0x4a, 0x3c, 0x29, 0x03, 0xf6, 0x81, 0x26, 0xb3, 0x06, 0x44, + 0x22, 0x0d, 0x72, 0xf9, 0x41, 0x4b, 0x71, 0x1f, 0x0a, 0xf6, 0x81, 0x06, + 0x49, 0x53, 0xc0, 0x0e, 0xf6, 0x41, 0x05, 0x19, 0x00, 0x01, 0xff, 0x53, + 0xca, 0x49, 0x2d, 0xf9, 0x01, 0x4c, 0xdf, 0x95, 0x70, 0xf9, 0x41, 0x05, + 0x19, 0x00, 0x01, 0xff, 0x4a, 0xf1, 0x75, 0x05, 0xf6, 0x01, 0x4c, 0x70, + 0x1f, 0x04, 0xf6, 0x01, 0x53, 0x93, 0x4d, 0x06, 0xf6, 0x41, 0x43, 0xc1, + 0x4d, 0x07, 0xf6, 0x01, 0x50, 0x85, 0x5a, 0x0d, 0xf6, 0x01, 0x44, 0x9b, + 0x7f, 0x08, 0xf6, 0x41, 0x51, 0x84, 0x5a, 0x3b, 0xf6, 0x01, 0x4a, 0x3c, + 0x29, 0x3a, 0xf6, 0x41, 0x02, 0x60, 0x07, 0x06, 0x4a, 0x29, 0x4f, 0x33, + 0x2a, 0x40, 0x80, 0x0d, 0x47, 0xde, 0xd0, 0xaa, 0x2a, 0xc0, 0x00, 0x4c, + 0xf2, 0x28, 0xac, 0x2a, 0x40, 0xa1, 0xfc, 0x02, 0x4c, 0xd3, 0x8c, 0x39, + 0xf5, 0x01, 0x02, 0x13, 0x05, 0xc1, 0x02, 0x4b, 0x10, 0x9b, 0x69, 0xfe, + 0x00, 0xa5, 0x8e, 0x02, 0x49, 0x81, 0x16, 0x52, 0xfe, 0x00, 0x51, 0x62, + 0x5a, 0x65, 0xfe, 0x00, 0x4c, 0xc7, 0x8f, 0x63, 0xfe, 0x00, 0x51, 0xea, + 0x5a, 0x51, 0xfe, 0x00, 0x02, 0x68, 0x00, 0xd5, 0x01, 0x4b, 0x43, 0xa0, + 0x5f, 0xfe, 0x00, 0x4e, 0x85, 0x7a, 0x38, 0xf5, 0x01, 0xb0, 0xba, 0x01, + 0x4d, 0xa6, 0x34, 0x56, 0xfe, 0x00, 0xb2, 0x20, 0x49, 0x21, 0xbf, 0x54, + 0xfe, 0x00, 0xb4, 0x0c, 0x54, 0x68, 0x46, 0xfa, 0xcd, 0x01, 0x51, 0x2a, + 0x5f, 0x61, 0x2a, 0x40, 0x44, 0x36, 0x23, 0xdc, 0x02, 0x00, 0x60, 0xf2, + 0x0b, 0x3b, 0x0b, 0x41, 0x4e, 0x67, 0x72, 0x68, 0xfe, 0x00, 0x05, 0xc9, + 0x00, 0x76, 0x0d, 0xd5, 0x86, 0x01, 0xff, 0xa5, 0x63, 0xa6, 0x46, 0x44, + 0xcf, 0x2a, 0x78, 0x21, 0x00, 0x43, 0x0e, 0x0b, 0x70, 0x21, 0x80, 0x2a, + 0xb3, 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x79, 0x21, 0x00, 0x44, + 0x25, 0x01, 0x72, 0x21, 0x00, 0xb7, 0x01, 0xff, 0x44, 0xe7, 0x2b, 0x7b, + 0x21, 0x00, 0xef, 0x71, 0x21, 0x40, 0x44, 0xc9, 0x1d, 0x76, 0x21, 0x00, + 0x42, 0x01, 0x26, 0x75, 0x21, 0x40, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, + 0x7d, 0x21, 0x00, 0x48, 0x40, 0x5e, 0x7f, 0x21, 0x40, 0xa9, 0x06, 0x43, + 0xf6, 0x06, 0x73, 0x21, 0x40, 0x43, 0x52, 0x4d, 0x7c, 0x21, 0x00, 0x42, + 0x32, 0x00, 0x74, 0x21, 0xc0, 0x00, 0x48, 0x70, 0x11, 0x7e, 0x21, 0x40, + 0x44, 0xc9, 0x00, 0x77, 0x21, 0x00, 0x45, 0xb4, 0x6f, 0x7a, 0x21, 0x40, + 0x4d, 0x72, 0x0b, 0x5c, 0xfe, 0x00, 0x4b, 0xd8, 0x21, 0x5a, 0xfe, 0x00, + 0x56, 0x54, 0x09, 0x5e, 0xfe, 0x40, 0x4b, 0xe1, 0x9b, 0x6a, 0xfe, 0x00, + 0x48, 0xe0, 0x71, 0x62, 0xfe, 0x40, 0x03, 0xc5, 0x00, 0x06, 0x4c, 0x67, + 0x95, 0x64, 0xfe, 0x40, 0x4d, 0x72, 0x0b, 0x5b, 0xfe, 0x00, 0x4b, 0xd8, + 0x21, 0x59, 0xfe, 0x00, 0x56, 0x54, 0x09, 0x5d, 0xfe, 0x40, 0x49, 0x52, + 0x92, 0x0a, 0x22, 0x80, 0x12, 0x46, 0xc2, 0xc2, 0x58, 0xfe, 0x00, 0x4a, + 0x49, 0x13, 0x66, 0xfe, 0x00, 0x4f, 0xae, 0x00, 0x57, 0xfe, 0x40, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x47, 0xe6, 0x7f, 0xf7, 0x22, 0x00, 0x68, 0x30, + 0x05, 0xf4, 0x22, 0x40, 0x43, 0xd7, 0x02, 0x55, 0xfe, 0x00, 0x02, 0x15, + 0x05, 0x1c, 0x07, 0x78, 0x69, 0x01, 0xff, 0x49, 0x57, 0xb6, 0x0d, 0x22, + 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x47, 0xe6, 0x7f, 0xfe, 0x22, 0x00, + 0x68, 0x30, 0x05, 0xfc, 0x22, 0x40, 0xe1, 0x50, 0xfe, 0x00, 0x49, 0x85, + 0xb8, 0x6b, 0xfe, 0x40, 0x47, 0x12, 0x34, 0xe9, 0xf6, 0x01, 0x48, 0x13, + 0x3e, 0x60, 0xfe, 0x00, 0x47, 0x3d, 0x0d, 0x61, 0xfe, 0x40, 0xa1, 0x6c, + 0xa5, 0x40, 0xa9, 0x27, 0xaf, 0x01, 0xff, 0xb0, 0x0d, 0xb4, 0x01, 0xff, + 0x48, 0x7f, 0x48, 0xb0, 0xf3, 0x01, 0xe8, 0xa5, 0xf9, 0x41, 0xe5, 0x33, + 0x23, 0x00, 0x0a, 0xcd, 0xab, 0x01, 0xff, 0x43, 0x1a, 0x00, 0x58, 0x2a, + 0x00, 0x42, 0x0c, 0x00, 0x57, 0x2a, 0x40, 0x4b, 0xfd, 0x99, 0x55, 0xf3, + 0x01, 0x06, 0x8b, 0x79, 0x01, 0xff, 0x4d, 0x13, 0x83, 0x41, 0xf6, 0x01, + 0x4c, 0x5b, 0x95, 0x42, 0xf6, 0x41, 0xe4, 0xf7, 0xf6, 0x01, 0x02, 0xeb, + 0x0a, 0x06, 0x4a, 0x25, 0xb3, 0x75, 0xf5, 0x41, 0x04, 0xa1, 0x01, 0x06, + 0x46, 0x85, 0xd5, 0x2a, 0xf6, 0x41, 0x4d, 0x3b, 0x80, 0xcc, 0xf6, 0x01, + 0x44, 0x0c, 0x08, 0x34, 0xf6, 0x01, 0x46, 0x16, 0x08, 0xa4, 0xf4, 0x41, + 0x05, 0x76, 0x00, 0x06, 0x4e, 0x91, 0x7e, 0x73, 0xa6, 0x40, 0x0c, 0x86, + 0x28, 0x11, 0x13, 0xb8, 0x4b, 0x01, 0xff, 0x49, 0xea, 0xbc, 0x5a, 0x2b, + 0x00, 0x4d, 0xf3, 0x87, 0x5c, 0x2b, 0x40, 0x4c, 0x87, 0x00, 0x96, 0x2a, + 0x80, 0x0d, 0x49, 0xec, 0x00, 0x95, 0x2a, 0xc0, 0x00, 0x50, 0xa6, 0x60, + 0x97, 0x2a, 0x40, 0x50, 0xa6, 0x60, 0x98, 0x2a, 0x40, 0x48, 0xc0, 0xc3, + 0xf9, 0xf6, 0x01, 0xa9, 0x16, 0xb5, 0x01, 0xff, 0x42, 0x60, 0x07, 0x80, + 0xf4, 0x81, 0x06, 0x42, 0xb3, 0x25, 0xa8, 0xf9, 0x41, 0x4f, 0xc5, 0x4a, + 0x20, 0x26, 0x40, 0x4d, 0x1d, 0x7f, 0xbf, 0xf3, 0x01, 0x42, 0x33, 0x00, + 0xf7, 0x26, 0x40, 0xa4, 0xbc, 0x31, 0x02, 0x5c, 0x03, 0xf0, 0x07, 0x51, + 0xc7, 0x5b, 0xfe, 0xf5, 0x01, 0x06, 0xf7, 0xd1, 0xbe, 0x07, 0xae, 0x30, + 0xb8, 0x01, 0xff, 0x02, 0x9b, 0x01, 0x0c, 0x4d, 0x2e, 0x80, 0x06, 0x20, + 0x00, 0x55, 0x4e, 0x3e, 0x3a, 0x27, 0x40, 0x60, 0x94, 0x0f, 0x3e, 0x27, + 0x00, 0x07, 0x34, 0x08, 0x01, 0xff, 0x4a, 0xf4, 0x2b, 0x36, 0x27, 0x00, + 0x4d, 0x28, 0x13, 0xcd, 0xf7, 0x01, 0x54, 0x04, 0x46, 0x2f, 0xf5, 0x41, + 0x46, 0x12, 0xdb, 0x3f, 0x22, 0x00, 0x03, 0x06, 0x02, 0xc1, 0x06, 0x05, + 0xd2, 0xe6, 0x01, 0xff, 0x08, 0xa3, 0x80, 0xa4, 0x05, 0xac, 0xae, 0x01, + 0x56, 0x6b, 0x36, 0xf4, 0x0d, 0x00, 0x05, 0x5a, 0x03, 0x89, 0x01, 0x0b, + 0x40, 0x77, 0x01, 0xff, 0x4a, 0x26, 0x6c, 0xcf, 0x0d, 0x00, 0x05, 0x21, + 0x6c, 0x52, 0x02, 0x24, 0x02, 0x42, 0xab, 0x01, 0xff, 0x05, 0xbb, 0xb8, + 0x29, 0x04, 0x6e, 0xd2, 0x01, 0xff, 0x45, 0xaa, 0xe1, 0xdb, 0x0d, 0x00, + 0x42, 0xf5, 0x0a, 0xd9, 0x0d, 0xc0, 0x00, 0x05, 0xb9, 0xe1, 0x01, 0xff, + 0x4a, 0x26, 0x6c, 0xdc, 0x0d, 0x00, 0x4f, 0x21, 0x6c, 0xdd, 0x0d, 0x00, + 0x4b, 0x44, 0x9c, 0xde, 0x0d, 0x40, 0x4a, 0x77, 0xa7, 0xd0, 0x0d, 0x00, + 0x48, 0x40, 0xc7, 0xd2, 0x0d, 0x00, 0x49, 0xdd, 0xbd, 0xd4, 0x0d, 0x40, + 0x4a, 0x1f, 0xaa, 0xd8, 0x0d, 0x00, 0x49, 0x46, 0x9c, 0xdf, 0x0d, 0x40, + 0x4a, 0x77, 0xa7, 0xd1, 0x0d, 0x00, 0x02, 0x24, 0x02, 0x12, 0x48, 0x40, + 0xc7, 0xd3, 0x0d, 0x00, 0x47, 0x6d, 0xd2, 0xda, 0x0d, 0x00, 0x49, 0xdd, + 0xbd, 0xd6, 0x0d, 0x40, 0x4a, 0x1f, 0xaa, 0xf2, 0x0d, 0x00, 0x49, 0x46, + 0x9c, 0xf3, 0x0d, 0x40, 0xa1, 0x0c, 0x4b, 0xd7, 0x23, 0x81, 0x0d, 0x00, + 0x49, 0x19, 0xc1, 0x83, 0x0d, 0x40, 0x48, 0x88, 0xc7, 0xca, 0x0d, 0x00, + 0x49, 0xbd, 0xbc, 0x82, 0x0d, 0x40, 0x06, 0xed, 0x05, 0x47, 0x0a, 0x1d, + 0xac, 0x01, 0xff, 0x45, 0x12, 0x0b, 0xee, 0x0d, 0x00, 0xa6, 0x2e, 0x44, + 0xcf, 0x2a, 0xef, 0x0d, 0x00, 0x43, 0x0e, 0x0b, 0xe7, 0x0d, 0x00, 0xb3, + 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xe6, 0x0d, 0x40, 0x44, 0x25, 0x01, + 0xe9, 0x0d, 0x00, 0x42, 0x15, 0x02, 0xe8, 0x0d, 0x40, 0x44, 0xc9, 0x1d, + 0xed, 0x0d, 0x00, 0x42, 0x01, 0x26, 0xec, 0x0d, 0x40, 0x43, 0xd2, 0x05, + 0xeb, 0x0d, 0x00, 0x43, 0xf6, 0x06, 0xea, 0x0d, 0x40, 0xa1, 0xb4, 0x02, + 0x08, 0x00, 0xc5, 0x9d, 0x02, 0xa5, 0x8e, 0x02, 0x47, 0x16, 0xd1, 0xc6, + 0x0d, 0x00, 0x47, 0x7f, 0xd1, 0xc4, 0x0d, 0x00, 0xa9, 0xd3, 0x01, 0x52, + 0x23, 0x53, 0x9e, 0x0d, 0x00, 0xad, 0x67, 0xaf, 0x59, 0x47, 0x30, 0xd5, + 0xbb, 0x0d, 0x00, 0x08, 0xa8, 0xca, 0x35, 0x08, 0x50, 0xcb, 0x1a, 0xb5, + 0x0c, 0x47, 0x2f, 0xd7, 0xc0, 0x0d, 0x00, 0x47, 0xd7, 0xd7, 0xba, 0x0d, + 0x40, 0x46, 0x12, 0xe1, 0x8c, 0x0d, 0x00, 0x45, 0x59, 0x69, 0x8b, 0x0d, + 0x40, 0x4a, 0x2b, 0x53, 0xa4, 0x0d, 0x00, 0x02, 0x40, 0x06, 0x01, 0xff, + 0x52, 0x0d, 0x54, 0xa5, 0x0d, 0x00, 0x45, 0x59, 0x69, 0xc1, 0x0d, 0x40, + 0xa4, 0x0c, 0x47, 0x39, 0xd1, 0x9f, 0x0d, 0x00, 0x47, 0x2e, 0xd2, 0xa6, + 0x0d, 0x40, 0x46, 0x4b, 0x9f, 0xb3, 0x0d, 0x00, 0x47, 0x44, 0xd0, 0xac, + 0x0d, 0x40, 0x46, 0x58, 0x69, 0x95, 0x0d, 0x00, 0x45, 0x59, 0x69, 0x94, + 0x0d, 0x40, 0xa1, 0x17, 0x09, 0xbf, 0xc0, 0x01, 0xff, 0x47, 0xba, 0xd2, + 0xc5, 0x0d, 0x00, 0x47, 0x70, 0xd3, 0xab, 0x0d, 0x00, 0x47, 0xae, 0xd5, + 0xc2, 0x0d, 0x40, 0x0a, 0x05, 0xab, 0x06, 0x45, 0x59, 0x69, 0xb8, 0x0d, + 0x40, 0x47, 0x4a, 0x9f, 0xb7, 0x0d, 0x00, 0x47, 0xd4, 0xcf, 0xa1, 0x0d, + 0x00, 0xa4, 0x27, 0x47, 0x39, 0xd1, 0x9d, 0x0d, 0x00, 0x47, 0x2e, 0xd2, + 0xa3, 0x0d, 0x00, 0x47, 0x51, 0xd2, 0x9b, 0x0d, 0x00, 0x47, 0x8f, 0xd4, + 0xb5, 0x0d, 0x00, 0xb4, 0x01, 0xff, 0x46, 0x4b, 0x9f, 0xae, 0x0d, 0x00, + 0x47, 0x3a, 0xd6, 0xa8, 0x0d, 0x40, 0x46, 0x4b, 0x9f, 0xb0, 0x0d, 0x00, + 0x47, 0x44, 0xd0, 0xaa, 0x0d, 0x40, 0x46, 0x4c, 0xdd, 0x8a, 0x0d, 0x00, + 0x02, 0xc7, 0x15, 0x16, 0x02, 0x3d, 0x00, 0x06, 0x45, 0x59, 0x69, 0x89, + 0x0d, 0x40, 0x46, 0x12, 0xe1, 0x8e, 0x0d, 0x00, 0x45, 0x59, 0x69, 0x8d, + 0x0d, 0x40, 0x46, 0x12, 0xe1, 0x90, 0x0d, 0x00, 0x45, 0x59, 0x69, 0x8f, + 0x0d, 0x40, 0x46, 0xa2, 0xdb, 0x92, 0x0d, 0x00, 0x45, 0x59, 0x69, 0x91, + 0x0d, 0x40, 0x47, 0xba, 0xd2, 0xbd, 0x0d, 0x00, 0x47, 0x70, 0xd3, 0xb1, + 0x0d, 0x00, 0x47, 0xae, 0xd5, 0xc3, 0x0d, 0x40, 0x46, 0x4b, 0x9f, 0x86, + 0x0d, 0x00, 0xa5, 0x5d, 0x46, 0x4c, 0xdd, 0x93, 0x0d, 0x00, 0x0a, 0x7b, + 0xad, 0x12, 0x4b, 0x46, 0x9f, 0xb9, 0x0d, 0x00, 0x46, 0x12, 0xe1, 0x96, + 0x0d, 0x00, 0x45, 0x59, 0x69, 0x85, 0x0d, 0x40, 0x47, 0x4a, 0x9f, 0xb6, + 0x0d, 0x00, 0x47, 0xd4, 0xcf, 0xa0, 0x0d, 0x00, 0xa4, 0x27, 0x47, 0x39, + 0xd1, 0x9c, 0x0d, 0x00, 0x47, 0x2e, 0xd2, 0xa2, 0x0d, 0x00, 0x47, 0x51, + 0xd2, 0x9a, 0x0d, 0x00, 0x47, 0x8f, 0xd4, 0xb4, 0x0d, 0x00, 0xb4, 0x01, + 0xff, 0x46, 0x4b, 0x9f, 0xad, 0x0d, 0x00, 0x47, 0x3a, 0xd6, 0xa7, 0x0d, + 0x40, 0x46, 0x4b, 0x9f, 0xaf, 0x0d, 0x00, 0x47, 0x44, 0xd0, 0xa9, 0x0d, + 0x40, 0x46, 0xa2, 0xdb, 0x88, 0x0d, 0x00, 0x45, 0x59, 0x69, 0x87, 0x0d, + 0x40, 0x06, 0xef, 0x06, 0x52, 0x07, 0xff, 0x39, 0x01, 0xff, 0x46, 0x30, + 0xdb, 0xf1, 0x11, 0x01, 0xa6, 0x39, 0x46, 0xac, 0x2c, 0xf2, 0x11, 0x01, + 0x04, 0x0e, 0x0b, 0x23, 0xb3, 0x15, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, + 0xea, 0x11, 0x01, 0x45, 0x7a, 0x11, 0xec, 0x11, 0x01, 0x45, 0x7f, 0x2c, + 0xeb, 0x11, 0x41, 0x46, 0xc9, 0x1d, 0xf0, 0x11, 0x01, 0x44, 0x46, 0xdd, + 0xef, 0x11, 0x41, 0x47, 0x71, 0x11, 0xf3, 0x11, 0x01, 0x48, 0x40, 0x5e, + 0xf4, 0x11, 0x41, 0x44, 0x51, 0x4d, 0xee, 0x11, 0x01, 0x44, 0xce, 0x51, + 0xed, 0x11, 0x41, 0x45, 0x12, 0x0b, 0xe8, 0x11, 0x01, 0xa6, 0x29, 0x44, + 0xcf, 0x2a, 0xe9, 0x11, 0x01, 0x43, 0x0e, 0x0b, 0xe1, 0x11, 0x01, 0xb3, + 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xe3, 0x11, 0x01, 0x42, 0x15, + 0x02, 0xe2, 0x11, 0x41, 0x44, 0xc9, 0x1d, 0xe7, 0x11, 0x01, 0x42, 0x01, + 0x26, 0xe6, 0x11, 0x41, 0x43, 0xd2, 0x05, 0xe5, 0x11, 0x01, 0x43, 0xf6, + 0x06, 0xe4, 0x11, 0x41, 0x80, 0x0d, 0x07, 0xd5, 0xcd, 0x01, 0xff, 0xd2, + 0x8e, 0x00, 0x00, 0xd3, 0x8f, 0x00, 0x40, 0x54, 0x04, 0x41, 0x9a, 0x00, + 0x00, 0x5e, 0x53, 0x13, 0x1b, 0x20, 0x00, 0xac, 0x17, 0x63, 0x87, 0x0b, + 0x3a, 0x20, 0x00, 0x07, 0xca, 0xd5, 0x01, 0xff, 0x44, 0x25, 0x01, 0x8f, + 0x00, 0x00, 0x42, 0x15, 0x02, 0x8e, 0x00, 0x40, 0x61, 0xea, 0x0d, 0x39, + 0x20, 0x00, 0x53, 0x04, 0x4c, 0x1a, 0x20, 0x40, 0x06, 0x5c, 0x00, 0x17, + 0x4d, 0x05, 0x86, 0x6c, 0x2a, 0x00, 0x03, 0xc8, 0x07, 0x01, 0xff, 0x4c, + 0x87, 0x00, 0x9e, 0x2a, 0x00, 0x49, 0xec, 0x00, 0x9d, 0x2a, 0x40, 0x5e, + 0x35, 0x13, 0xa0, 0x2a, 0x00, 0x5b, 0x42, 0x1c, 0x9f, 0x2a, 0x40, 0x4d, + 0x92, 0x7f, 0x18, 0xf9, 0x01, 0x08, 0xa0, 0xcc, 0x01, 0xff, 0x04, 0x41, + 0x8d, 0x96, 0x29, 0x02, 0x63, 0x09, 0xea, 0x28, 0xa3, 0xc2, 0x28, 0xa4, + 0xd7, 0x27, 0xa5, 0xf8, 0x25, 0xa6, 0xec, 0x24, 0x06, 0x2c, 0xdc, 0xd5, + 0x24, 0xa8, 0xc7, 0x14, 0xac, 0xc2, 0x13, 0x02, 0xc3, 0x07, 0x8c, 0x06, + 0xae, 0xe3, 0x05, 0x4b, 0xd8, 0x21, 0x8b, 0xda, 0x01, 0xb2, 0xdf, 0x03, + 0xb3, 0xe1, 0x02, 0xb4, 0x0c, 0x62, 0x44, 0x0d, 0x75, 0xda, 0x01, 0x5b, + 0x0d, 0x1e, 0x6f, 0xda, 0x41, 0xa5, 0x84, 0x02, 0xaf, 0x92, 0x01, 0x06, + 0x74, 0xdf, 0x01, 0xff, 0x0b, 0x7e, 0x49, 0x52, 0x0a, 0x0d, 0x1e, 0x01, + 0xff, 0x0b, 0x21, 0x99, 0x37, 0x09, 0xe2, 0xbe, 0x06, 0x47, 0xc3, 0xd5, + 0x51, 0xd9, 0x41, 0x0b, 0x7e, 0x49, 0x17, 0x0a, 0x0d, 0x1e, 0x01, 0xff, + 0x4b, 0x13, 0x5a, 0x4d, 0xd9, 0x01, 0x46, 0x3b, 0x01, 0x4c, 0xd9, 0x01, + 0x46, 0xdf, 0x09, 0x4b, 0xd9, 0x41, 0x4b, 0x13, 0x5a, 0x50, 0xd9, 0x01, + 0x46, 0x3b, 0x01, 0x4f, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0x4e, 0xd9, 0x41, + 0x46, 0x3b, 0x01, 0x53, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0x52, 0xd9, 0x01, + 0x46, 0x6a, 0x1d, 0x54, 0xd9, 0x41, 0x09, 0xe2, 0xbe, 0x06, 0x47, 0xc3, + 0xd5, 0x87, 0xd9, 0x41, 0x0b, 0x7e, 0x49, 0x17, 0x0a, 0x0d, 0x1e, 0x01, + 0xff, 0x4b, 0x13, 0x5a, 0x86, 0xd9, 0x01, 0x46, 0x3b, 0x01, 0x85, 0xd9, + 0x01, 0x46, 0xdf, 0x09, 0x84, 0xd9, 0x41, 0x4b, 0x13, 0x5a, 0x83, 0xd9, + 0x01, 0x46, 0x3b, 0x01, 0x82, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0x81, 0xd9, + 0x41, 0x05, 0x16, 0xe9, 0x32, 0x04, 0x6d, 0xf2, 0x17, 0x04, 0xd6, 0xe8, + 0x01, 0xff, 0x47, 0xc0, 0x09, 0x07, 0xd9, 0x01, 0x48, 0x60, 0x44, 0x06, + 0xd9, 0x01, 0x46, 0xdf, 0x09, 0x05, 0xd9, 0x41, 0x53, 0x7e, 0x49, 0x74, + 0xda, 0x01, 0x0a, 0x0d, 0x1e, 0x01, 0xff, 0x4b, 0xad, 0x9a, 0x73, 0xda, + 0x01, 0x50, 0x86, 0x67, 0x72, 0xda, 0x41, 0x07, 0x73, 0x02, 0x29, 0x54, + 0x5c, 0x43, 0x5d, 0xda, 0x01, 0x4c, 0x23, 0x91, 0x5a, 0xda, 0x01, 0x53, + 0x33, 0x4b, 0x5e, 0xda, 0x01, 0x50, 0x76, 0x67, 0x59, 0xda, 0x01, 0x04, + 0x49, 0x0c, 0x01, 0xff, 0x4c, 0xaf, 0x8c, 0x5b, 0xda, 0x01, 0x55, 0x8d, + 0x3e, 0x5c, 0xda, 0x41, 0x4c, 0x96, 0x3e, 0x60, 0xda, 0x01, 0x4c, 0x76, + 0x67, 0x5f, 0xda, 0x41, 0x43, 0xda, 0x25, 0x61, 0xda, 0x81, 0x17, 0x0b, + 0x2d, 0xa0, 0x01, 0xff, 0x44, 0x48, 0x0b, 0x2d, 0xda, 0x01, 0x43, 0x13, + 0x01, 0x2f, 0xda, 0x01, 0x46, 0x7d, 0x02, 0x2e, 0xda, 0x41, 0x80, 0x01, + 0xff, 0x49, 0xb1, 0xb6, 0x67, 0xda, 0x01, 0x48, 0x12, 0x5e, 0x62, 0xda, + 0x01, 0x03, 0xb6, 0x00, 0x01, 0xff, 0x44, 0x66, 0x1b, 0x65, 0xda, 0x81, + 0x0d, 0x46, 0xb0, 0x67, 0x63, 0xda, 0xc1, 0x00, 0x49, 0x11, 0x5e, 0x64, + 0xda, 0x41, 0x49, 0x11, 0x5e, 0x66, 0xda, 0x41, 0x48, 0xda, 0x59, 0x89, + 0xda, 0x01, 0x08, 0x18, 0x1e, 0x5b, 0x07, 0x06, 0xd5, 0x27, 0x06, 0xb2, + 0xe0, 0x11, 0x07, 0xf7, 0xd6, 0x01, 0xff, 0x47, 0xc0, 0x09, 0x15, 0xd9, + 0x01, 0x47, 0x16, 0x08, 0x14, 0xd9, 0x41, 0x47, 0xc0, 0x09, 0x0d, 0xd9, + 0x01, 0x48, 0x60, 0x44, 0x0c, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0x0b, 0xd9, + 0x41, 0x51, 0x0d, 0x5a, 0x20, 0xd9, 0x01, 0x06, 0x27, 0x1c, 0x1a, 0xb3, + 0x01, 0xff, 0x49, 0x54, 0x6c, 0x1a, 0xd9, 0x01, 0x05, 0x5e, 0x07, 0x01, + 0xff, 0x48, 0x60, 0x44, 0x19, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0x17, 0xd9, + 0x41, 0x48, 0x60, 0x44, 0x18, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0x16, 0xd9, + 0x41, 0x04, 0x5c, 0x0d, 0x06, 0x52, 0xab, 0x55, 0x71, 0xda, 0x41, 0x49, + 0x1c, 0xbe, 0x6e, 0xda, 0x01, 0x45, 0x0a, 0xeb, 0x6d, 0xda, 0x41, 0x07, + 0x1b, 0x05, 0x17, 0x03, 0x76, 0x4d, 0x01, 0xff, 0x47, 0xc0, 0x09, 0x13, + 0xd9, 0x01, 0x48, 0x60, 0x44, 0x12, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0x11, + 0xd9, 0x41, 0x0a, 0x55, 0x91, 0x9d, 0x01, 0x8d, 0x01, 0xff, 0x0b, 0x7e, + 0x49, 0x4e, 0x0a, 0x0d, 0x1e, 0x01, 0xff, 0x08, 0xf1, 0x11, 0x30, 0x46, + 0x3b, 0x01, 0xa3, 0xd9, 0x81, 0x18, 0x46, 0xdf, 0x09, 0xa2, 0xd9, 0xc1, + 0x00, 0x09, 0x33, 0x26, 0x01, 0xff, 0x45, 0x53, 0x99, 0xb1, 0xd9, 0x01, + 0x4a, 0x79, 0xaa, 0xaa, 0xd9, 0x41, 0x09, 0x33, 0x26, 0x01, 0xff, 0x45, + 0x53, 0x99, 0xb2, 0xd9, 0x01, 0x4a, 0x79, 0xaa, 0xab, 0xd9, 0x41, 0xe5, + 0xa4, 0xd9, 0x01, 0x0c, 0x27, 0x90, 0x01, 0xff, 0x45, 0x53, 0x99, 0xb3, + 0xd9, 0x01, 0x4a, 0x79, 0xaa, 0xac, 0xd9, 0x41, 0x4b, 0x13, 0x5a, 0xe1, + 0xd9, 0x81, 0x30, 0x46, 0x3b, 0x01, 0xe0, 0xd9, 0x81, 0x18, 0x46, 0xdf, + 0x09, 0xdf, 0xd9, 0xc1, 0x00, 0x09, 0x33, 0x26, 0x01, 0xff, 0x47, 0x90, + 0xc4, 0xc3, 0xd9, 0x01, 0x45, 0x58, 0x24, 0xd2, 0xd9, 0x41, 0x09, 0x33, + 0x26, 0x01, 0xff, 0x47, 0x90, 0xc4, 0xc4, 0xd9, 0x01, 0x45, 0x58, 0x24, + 0xd3, 0xd9, 0x41, 0x09, 0x33, 0x26, 0x01, 0xff, 0x47, 0x90, 0xc4, 0xc5, + 0xd9, 0x01, 0x45, 0x58, 0x24, 0xd4, 0xd9, 0x41, 0x91, 0x20, 0xd2, 0xa1, + 0xda, 0x01, 0xd3, 0xa2, 0xda, 0x01, 0xd4, 0xa3, 0xda, 0x01, 0xd5, 0xa4, + 0xda, 0x01, 0xd6, 0xa5, 0xda, 0x01, 0xd7, 0xa6, 0xda, 0x01, 0xd8, 0xa7, + 0xda, 0x01, 0xd9, 0xa8, 0xda, 0x41, 0xd0, 0xa9, 0xda, 0x01, 0xd1, 0xaa, + 0xda, 0x01, 0xd2, 0xab, 0xda, 0x01, 0xd3, 0xac, 0xda, 0x01, 0xd4, 0xad, + 0xda, 0x01, 0xd5, 0xae, 0xda, 0x01, 0xd6, 0xaf, 0xda, 0x41, 0x43, 0x6f, + 0x14, 0x6a, 0xda, 0x01, 0x04, 0x16, 0x17, 0x01, 0xff, 0x47, 0x13, 0xd0, + 0x32, 0xda, 0x01, 0x47, 0x4c, 0x8e, 0x31, 0xda, 0x01, 0xb7, 0x01, 0xff, + 0x46, 0xce, 0xdc, 0x34, 0xda, 0x01, 0x47, 0x62, 0xc1, 0x33, 0xda, 0x41, + 0x04, 0xa3, 0x20, 0xe1, 0x0b, 0x07, 0x3d, 0xd7, 0x01, 0xff, 0x09, 0xe3, + 0x25, 0xdd, 0x0a, 0x0b, 0x7e, 0x49, 0xd5, 0x05, 0x06, 0x86, 0xdc, 0x99, + 0x05, 0x0a, 0x0d, 0x1e, 0x01, 0xff, 0x0b, 0x1e, 0x27, 0xee, 0x04, 0xa2, + 0xbe, 0x04, 0xa3, 0x80, 0x03, 0x07, 0x3b, 0x01, 0xe2, 0x02, 0x08, 0x4f, + 0x1b, 0xc7, 0x02, 0x05, 0x27, 0xe7, 0xa0, 0x02, 0x43, 0x30, 0x9a, 0x68, + 0xda, 0x01, 0x05, 0x3a, 0xe8, 0xec, 0x01, 0x06, 0x08, 0xdf, 0xd5, 0x01, + 0xb3, 0xa4, 0x01, 0x07, 0x6a, 0x1d, 0x86, 0x01, 0xb7, 0x17, 0x07, 0xe1, + 0x33, 0x01, 0xff, 0x45, 0x27, 0x1c, 0x47, 0xd9, 0x01, 0x46, 0x44, 0x04, + 0x46, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0x45, 0xd9, 0x41, 0x04, 0x17, 0x23, + 0x11, 0x12, 0xd3, 0x54, 0x01, 0xff, 0x46, 0x3b, 0x01, 0xee, 0xd9, 0x01, + 0x46, 0xdf, 0x09, 0xed, 0xd9, 0x41, 0x06, 0x9b, 0x13, 0x27, 0x0e, 0xdb, + 0x76, 0x11, 0x08, 0x34, 0x26, 0x01, 0xff, 0x45, 0x53, 0x99, 0xb0, 0xd9, + 0x01, 0x4a, 0x79, 0xaa, 0xa9, 0xd9, 0x41, 0x45, 0x27, 0x1c, 0xb6, 0xd9, + 0x01, 0x46, 0x44, 0x04, 0xb5, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0xb4, 0xd9, + 0x41, 0x07, 0x3b, 0x01, 0x17, 0x07, 0x6a, 0x1d, 0x01, 0xff, 0x45, 0x27, + 0x1c, 0x9e, 0xd9, 0x01, 0x46, 0x44, 0x04, 0x9d, 0xd9, 0x01, 0x45, 0x5d, + 0x07, 0x9c, 0xd9, 0x41, 0x45, 0x27, 0x1c, 0x9b, 0xd9, 0x01, 0x46, 0x44, + 0x04, 0x9a, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0x99, 0xd9, 0x41, 0x4b, 0x13, + 0x5a, 0x36, 0xd9, 0x81, 0x0c, 0x51, 0x09, 0x5e, 0x34, 0xd9, 0x01, 0x4a, + 0x51, 0x98, 0x35, 0xd9, 0x41, 0x4b, 0x50, 0x98, 0x37, 0xd9, 0x41, 0x46, + 0xc5, 0x6d, 0xa5, 0xd9, 0x01, 0x06, 0xe0, 0x09, 0x01, 0xff, 0x09, 0x34, + 0x4d, 0x06, 0x4a, 0x51, 0x98, 0x2e, 0xd9, 0x41, 0x45, 0x27, 0x1c, 0x2c, + 0xd9, 0x81, 0x0c, 0x46, 0x44, 0x04, 0x2b, 0xd9, 0x01, 0x45, 0x5d, 0x07, + 0x2a, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x2d, 0xd9, 0x41, 0x45, 0x27, 0x1c, + 0x4a, 0xd9, 0x01, 0x46, 0x44, 0x04, 0x49, 0xd9, 0x01, 0x45, 0x5d, 0x07, + 0x48, 0xd9, 0x41, 0x08, 0x34, 0x26, 0x19, 0x45, 0x27, 0x1c, 0x97, 0xd9, + 0x01, 0x46, 0x44, 0x04, 0x96, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0x95, 0xd9, + 0xc1, 0x00, 0x47, 0x3a, 0x01, 0x98, 0xd9, 0x41, 0x45, 0x53, 0x99, 0xaf, + 0xd9, 0x01, 0x4a, 0x79, 0xaa, 0xa8, 0xd9, 0x41, 0x08, 0x34, 0x26, 0x12, + 0x45, 0x27, 0x1c, 0x94, 0xd9, 0x01, 0x46, 0x44, 0x04, 0x93, 0xd9, 0x01, + 0x45, 0x5d, 0x07, 0x92, 0xd9, 0x41, 0x45, 0x53, 0x99, 0xae, 0xd9, 0x01, + 0x4a, 0x79, 0xaa, 0xa7, 0xd9, 0x41, 0x07, 0x98, 0x43, 0x06, 0x46, 0x14, + 0xd0, 0x28, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xf2, 0xd9, 0x01, 0x46, 0xdf, + 0x09, 0xf1, 0xd9, 0x41, 0x4b, 0x13, 0x5a, 0x31, 0xd9, 0x81, 0x0c, 0x48, + 0x34, 0x4d, 0x2f, 0xd9, 0x01, 0x4a, 0x51, 0x98, 0x30, 0xd9, 0x41, 0x4b, + 0x50, 0x98, 0x32, 0xd9, 0x41, 0x05, 0xa4, 0xa8, 0xa4, 0x01, 0x06, 0x1e, + 0x0b, 0x87, 0x01, 0x44, 0x96, 0x10, 0x33, 0xd9, 0x01, 0x04, 0x9c, 0x13, + 0x01, 0xff, 0x80, 0x11, 0x08, 0xf0, 0xc4, 0x01, 0xff, 0x46, 0x44, 0x04, + 0xa1, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0xa0, 0xd9, 0x41, 0xa8, 0x39, 0x08, + 0x04, 0x03, 0x1c, 0x02, 0x53, 0x00, 0x01, 0xff, 0x4b, 0x9f, 0x9b, 0x9f, + 0xd9, 0x01, 0x13, 0x89, 0x4c, 0x01, 0xff, 0x46, 0x44, 0x04, 0x91, 0xd9, + 0x01, 0x45, 0x5d, 0x07, 0x90, 0xd9, 0x41, 0x45, 0x27, 0x1c, 0x8a, 0xd9, + 0x81, 0x0c, 0x46, 0x44, 0x04, 0x89, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0x88, + 0xd9, 0x41, 0x42, 0x60, 0x01, 0x8b, 0xd9, 0x41, 0x0b, 0xc1, 0x2c, 0x11, + 0x07, 0x35, 0x26, 0x01, 0xff, 0x45, 0x53, 0x99, 0xad, 0xd9, 0x01, 0x4a, + 0x79, 0xaa, 0xa6, 0xd9, 0x41, 0x45, 0x27, 0x1c, 0x8e, 0xd9, 0x81, 0x0c, + 0x46, 0x44, 0x04, 0x8d, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0x8c, 0xd9, 0x41, + 0x42, 0x60, 0x01, 0x8f, 0xd9, 0x41, 0x45, 0x27, 0x1c, 0x3d, 0xd9, 0x01, + 0x46, 0x44, 0x04, 0x3c, 0xd9, 0x01, 0x48, 0x6d, 0x60, 0x3e, 0xd9, 0x01, + 0x45, 0x5d, 0x07, 0x3b, 0xd9, 0x41, 0x45, 0x27, 0x1c, 0x41, 0xd9, 0x01, + 0x46, 0x44, 0x04, 0x40, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0x3f, 0xd9, 0x41, + 0x04, 0x40, 0x05, 0x17, 0x03, 0xbc, 0x3a, 0x01, 0xff, 0x45, 0x27, 0x1c, + 0x44, 0xd9, 0x01, 0x46, 0x44, 0x04, 0x43, 0xd9, 0x01, 0x45, 0x5d, 0x07, + 0x42, 0xd9, 0x41, 0x45, 0x27, 0x1c, 0x3a, 0xd9, 0x01, 0x46, 0x44, 0x04, + 0x39, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0x38, 0xd9, 0x41, 0x07, 0x44, 0x04, + 0x11, 0x06, 0x5d, 0x07, 0x01, 0xff, 0x46, 0x3b, 0x01, 0xe5, 0xd9, 0x01, + 0x46, 0xdf, 0x09, 0xe3, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xe6, 0xd9, 0x01, + 0x46, 0xdf, 0x09, 0xe4, 0xd9, 0x41, 0x4f, 0x4e, 0x6c, 0x24, 0xd9, 0x01, + 0x55, 0x39, 0x3e, 0x27, 0xd9, 0x01, 0x03, 0x7d, 0x15, 0x01, 0xff, 0x05, + 0x9e, 0x14, 0x06, 0x4a, 0x53, 0x6c, 0x23, 0xd9, 0x41, 0x0c, 0x2b, 0x8c, + 0x0c, 0x45, 0x27, 0x1c, 0x21, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0x22, 0xd9, + 0x41, 0x45, 0x27, 0x1c, 0x25, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0x26, 0xd9, + 0x41, 0x18, 0x1e, 0x27, 0xcd, 0x04, 0xa2, 0xad, 0x04, 0xa3, 0xbf, 0x03, + 0x07, 0x3b, 0x01, 0xa1, 0x03, 0x08, 0x4f, 0x1b, 0x86, 0x03, 0x05, 0x27, + 0xe7, 0xb0, 0x02, 0x43, 0x30, 0x9a, 0x69, 0xda, 0x01, 0x05, 0x3a, 0xe8, + 0xd0, 0x01, 0x06, 0x08, 0xdf, 0xb9, 0x01, 0xb3, 0x88, 0x01, 0x07, 0x6a, + 0x1d, 0x68, 0xb7, 0x17, 0x07, 0xe1, 0x33, 0x01, 0xff, 0x45, 0x27, 0x1c, + 0x7d, 0xd9, 0x01, 0x46, 0x44, 0x04, 0x7c, 0xd9, 0x01, 0x45, 0x5d, 0x07, + 0x7b, 0xd9, 0x41, 0x04, 0x17, 0x23, 0x11, 0x19, 0x28, 0x26, 0x01, 0xff, + 0x46, 0x3b, 0x01, 0xf0, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0xef, 0xd9, 0x41, + 0x08, 0x34, 0x26, 0x15, 0x45, 0x27, 0x1c, 0xde, 0xd9, 0x01, 0xb3, 0x01, + 0xff, 0x44, 0x5e, 0x07, 0xdd, 0xd9, 0x01, 0x44, 0x77, 0x2e, 0xdc, 0xd9, + 0x41, 0x08, 0x90, 0xc4, 0x11, 0x06, 0x58, 0x24, 0x01, 0xff, 0x45, 0x27, + 0x1c, 0xd1, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0xd0, 0xd9, 0x41, 0x45, 0x27, + 0x1c, 0xc2, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0xc1, 0xd9, 0x41, 0x0c, 0x2b, + 0x8c, 0x0c, 0x51, 0x09, 0x5e, 0x6f, 0xd9, 0x01, 0x4a, 0x51, 0x98, 0x70, + 0xd9, 0x41, 0x48, 0x12, 0x5e, 0x71, 0xd9, 0x01, 0x4a, 0x51, 0x98, 0x72, + 0xd9, 0x41, 0x4f, 0xc5, 0x6d, 0xe2, 0xd9, 0x01, 0x06, 0xe0, 0x09, 0x01, + 0xff, 0x09, 0x34, 0x4d, 0x06, 0x4a, 0x51, 0x98, 0x69, 0xd9, 0x41, 0x45, + 0x27, 0x1c, 0x67, 0xd9, 0x81, 0x0c, 0x46, 0x44, 0x04, 0x66, 0xd9, 0x01, + 0x45, 0x5d, 0x07, 0x65, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x68, 0xd9, 0x41, + 0x45, 0x27, 0x1c, 0x80, 0xd9, 0x01, 0x46, 0x44, 0x04, 0x7f, 0xd9, 0x01, + 0x45, 0x5d, 0x07, 0x7e, 0xd9, 0x41, 0x08, 0x34, 0x26, 0x06, 0x45, 0x5d, + 0x07, 0xdb, 0xd9, 0x41, 0x08, 0x90, 0xc4, 0x26, 0x06, 0x58, 0x24, 0x01, + 0xff, 0x06, 0x27, 0x1c, 0x11, 0x06, 0x5d, 0x07, 0x01, 0xff, 0x46, 0x3b, + 0x01, 0xce, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0xcc, 0xd9, 0x41, 0x46, 0x3b, + 0x01, 0xcf, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0xcd, 0xd9, 0x41, 0x06, 0x27, + 0x1c, 0x11, 0x06, 0x5d, 0x07, 0x01, 0xff, 0x46, 0x3b, 0x01, 0xbf, 0xd9, + 0x01, 0x46, 0xdf, 0x09, 0xbd, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xc0, 0xd9, + 0x01, 0x46, 0xdf, 0x09, 0xbe, 0xd9, 0x41, 0x08, 0x34, 0x26, 0x06, 0x45, + 0x5d, 0x07, 0xda, 0xd9, 0x41, 0x08, 0x90, 0xc4, 0x22, 0x06, 0x58, 0x24, + 0x01, 0xff, 0x4c, 0xc3, 0x90, 0xc9, 0xd9, 0x01, 0x4c, 0x43, 0x95, 0xc8, + 0xd9, 0x01, 0x07, 0x6a, 0x1d, 0x01, 0xff, 0x4c, 0xcf, 0x90, 0xcb, 0xd9, + 0x01, 0x4c, 0x4f, 0x95, 0xca, 0xd9, 0x41, 0x06, 0x27, 0x1c, 0x11, 0x06, + 0x5d, 0x07, 0x01, 0xff, 0x46, 0x3b, 0x01, 0xb9, 0xd9, 0x01, 0x46, 0x6a, + 0x1d, 0xbb, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xba, 0xd9, 0x01, 0x46, 0x6a, + 0x1d, 0xbc, 0xd9, 0x41, 0x14, 0x98, 0x43, 0x06, 0x46, 0x14, 0xd0, 0x29, + 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xf4, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0xf3, + 0xd9, 0x41, 0x4b, 0x13, 0x5a, 0x6c, 0xd9, 0x81, 0x0c, 0x48, 0x34, 0x4d, + 0x6a, 0xd9, 0x01, 0x4a, 0x51, 0x98, 0x6b, 0xd9, 0x41, 0x4b, 0x50, 0x98, + 0x6d, 0xd9, 0x41, 0x44, 0x6e, 0x14, 0x77, 0xd9, 0x01, 0x06, 0x1e, 0x0b, + 0x4f, 0x44, 0x96, 0x10, 0x6e, 0xd9, 0x01, 0x05, 0x9c, 0x13, 0x01, 0xff, + 0x48, 0xc0, 0xc4, 0xd9, 0xd9, 0x01, 0x08, 0x34, 0x26, 0x19, 0x45, 0x27, + 0x1c, 0xd7, 0xd9, 0x81, 0x0c, 0x46, 0x44, 0x04, 0xd6, 0xd9, 0x01, 0x45, + 0x5d, 0x07, 0xd5, 0xd9, 0x41, 0x42, 0x60, 0x01, 0xd8, 0xd9, 0x41, 0x08, + 0x90, 0xc4, 0x11, 0x06, 0x58, 0x24, 0x01, 0xff, 0x45, 0x27, 0x1c, 0xc7, + 0xd9, 0x01, 0x45, 0x5d, 0x07, 0xc6, 0xd9, 0x41, 0x45, 0x27, 0x1c, 0xb8, + 0xd9, 0x01, 0x45, 0x5d, 0x07, 0xb7, 0xd9, 0x41, 0x45, 0x27, 0x1c, 0x76, + 0xd9, 0x01, 0x46, 0x44, 0x04, 0x75, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0x74, + 0xd9, 0x41, 0x43, 0x40, 0x05, 0x73, 0xd9, 0x01, 0x03, 0xbc, 0x3a, 0x01, + 0xff, 0x45, 0x27, 0x1c, 0x7a, 0xd9, 0x01, 0x46, 0x44, 0x04, 0x79, 0xd9, + 0x01, 0x45, 0x5d, 0x07, 0x78, 0xd9, 0x41, 0x06, 0x27, 0x1c, 0x21, 0x07, + 0x44, 0x04, 0x11, 0x06, 0x5d, 0x07, 0x01, 0xff, 0x46, 0x3b, 0x01, 0xea, + 0xd9, 0x01, 0x46, 0xdf, 0x09, 0xe7, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xeb, + 0xd9, 0x01, 0x46, 0xdf, 0x09, 0xe8, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xec, + 0xd9, 0x01, 0x46, 0xdf, 0x09, 0xe9, 0xd9, 0x41, 0x05, 0x93, 0xe4, 0x5d, + 0x08, 0xc0, 0x09, 0x1e, 0x08, 0xb0, 0xcb, 0x01, 0xff, 0x45, 0x27, 0x1c, + 0x5b, 0xd9, 0x81, 0x0c, 0x46, 0x44, 0x04, 0x5a, 0xd9, 0x01, 0x45, 0x5d, + 0x07, 0x59, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x5c, 0xd9, 0x41, 0x05, 0x93, + 0xe4, 0x1e, 0x08, 0xb0, 0xcb, 0x01, 0xff, 0x45, 0x27, 0x1c, 0x63, 0xd9, + 0x81, 0x0c, 0x46, 0x44, 0x04, 0x62, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0x61, + 0xd9, 0x41, 0x42, 0x60, 0x01, 0x64, 0xd9, 0x41, 0x45, 0x27, 0x1c, 0x5f, + 0xd9, 0x81, 0x0c, 0x46, 0x44, 0x04, 0x5e, 0xd9, 0x01, 0x45, 0x5d, 0x07, + 0x5d, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x60, 0xd9, 0x41, 0x45, 0x27, 0x1c, + 0x57, 0xd9, 0x81, 0x0c, 0x46, 0x44, 0x04, 0x56, 0xd9, 0x01, 0x45, 0x5d, + 0x07, 0x55, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x58, 0xd9, 0x41, 0xa3, 0xac, + 0x01, 0x45, 0x13, 0x83, 0x41, 0xda, 0x81, 0x95, 0x01, 0x44, 0xbb, 0x73, + 0x4d, 0xda, 0x81, 0x7f, 0x05, 0xf6, 0x04, 0x3d, 0x45, 0x6e, 0xc1, 0x3e, + 0xda, 0x81, 0x27, 0x45, 0x37, 0xeb, 0x50, 0xda, 0x81, 0x11, 0x09, 0x61, + 0xc1, 0x01, 0xff, 0x46, 0x3b, 0x01, 0x58, 0xda, 0x01, 0x46, 0xdf, 0x09, + 0x57, 0xda, 0x41, 0x80, 0x01, 0xff, 0x47, 0x8d, 0x31, 0x51, 0xda, 0x01, + 0x46, 0x2e, 0xe0, 0x52, 0xda, 0x41, 0x80, 0x01, 0xff, 0x44, 0xf6, 0x04, + 0x40, 0xda, 0x01, 0x48, 0x98, 0xcc, 0x3f, 0xda, 0x41, 0x46, 0x12, 0x03, + 0x44, 0xda, 0x01, 0x47, 0x8d, 0x31, 0x45, 0xda, 0x01, 0x44, 0x99, 0x46, + 0x47, 0xda, 0x81, 0x1c, 0x49, 0x83, 0x47, 0x4a, 0xda, 0x81, 0x06, 0x48, + 0x98, 0xcc, 0x46, 0xda, 0x41, 0x80, 0x01, 0xff, 0x48, 0x98, 0xcc, 0x4b, + 0xda, 0x01, 0x44, 0x39, 0xf3, 0x4c, 0xda, 0x41, 0x80, 0x01, 0xff, 0x48, + 0x98, 0xcc, 0x48, 0xda, 0x01, 0x44, 0x39, 0xf3, 0x49, 0xda, 0x41, 0x80, + 0x01, 0xff, 0x47, 0x8d, 0x31, 0x4e, 0xda, 0x01, 0x48, 0x98, 0xcc, 0x4f, + 0xda, 0x41, 0x80, 0x01, 0xff, 0x44, 0xf6, 0x04, 0x43, 0xda, 0x01, 0x48, + 0x98, 0xcc, 0x42, 0xda, 0x41, 0x06, 0x60, 0x1b, 0x06, 0x46, 0x28, 0x19, + 0x56, 0xda, 0x41, 0x47, 0x13, 0xd0, 0x3d, 0xda, 0x01, 0x47, 0x8d, 0x31, + 0x3c, 0xda, 0x01, 0x47, 0x4c, 0x8e, 0x3b, 0xda, 0x41, 0xa9, 0x3e, 0x07, + 0x29, 0x85, 0x01, 0xff, 0x80, 0x0f, 0x8d, 0x01, 0xff, 0x50, 0x46, 0x63, + 0x80, 0xda, 0x01, 0x4f, 0xaf, 0x74, 0x7f, 0xda, 0x41, 0x45, 0x88, 0xe5, + 0x83, 0xda, 0x01, 0x02, 0xb0, 0x01, 0x12, 0x4c, 0x2f, 0x91, 0x86, 0xda, + 0x01, 0x45, 0x69, 0xeb, 0x85, 0xda, 0x01, 0x45, 0x3b, 0x50, 0x82, 0xda, + 0x41, 0x47, 0x8b, 0xce, 0x84, 0xda, 0x01, 0x44, 0xc9, 0x00, 0x81, 0xda, + 0x41, 0x03, 0x98, 0x13, 0x17, 0xb0, 0x01, 0xff, 0x80, 0x06, 0x52, 0x09, + 0x55, 0x53, 0xda, 0x41, 0x50, 0xd6, 0x64, 0x54, 0xda, 0x01, 0x50, 0x46, + 0x68, 0x55, 0xda, 0x41, 0x4b, 0x34, 0x9a, 0x76, 0xda, 0x01, 0x07, 0xcf, + 0xd2, 0x01, 0xff, 0xd1, 0x77, 0xda, 0x01, 0xd2, 0x78, 0xda, 0x01, 0xd3, + 0x79, 0xda, 0x01, 0xd4, 0x7a, 0xda, 0x01, 0xd5, 0x7b, 0xda, 0x01, 0xd6, + 0x7c, 0xda, 0x01, 0xd7, 0x7d, 0xda, 0x41, 0xa1, 0x44, 0x43, 0xe7, 0x01, + 0xff, 0xd9, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x08, 0x12, 0x5e, 0x06, 0x43, + 0xeb, 0x1a, 0x00, 0xda, 0x41, 0x47, 0x11, 0x03, 0x06, 0xda, 0x01, 0x8d, + 0x01, 0xff, 0x0b, 0x7e, 0x49, 0x17, 0x0a, 0x0d, 0x1e, 0x01, 0xff, 0x45, + 0x9b, 0x13, 0x04, 0xda, 0x01, 0x48, 0x34, 0x4d, 0x01, 0xda, 0x01, 0x44, + 0x59, 0x05, 0x02, 0xda, 0x41, 0x45, 0x9b, 0x13, 0x05, 0xda, 0x01, 0x48, + 0x34, 0x4d, 0x03, 0xda, 0x41, 0x42, 0x46, 0x00, 0x6b, 0xda, 0x01, 0x03, + 0xdc, 0x18, 0x01, 0xff, 0x45, 0x04, 0x02, 0x85, 0xd8, 0x81, 0xad, 0x0e, + 0xa3, 0xe0, 0x0b, 0xa6, 0xee, 0x02, 0xa8, 0x39, 0x44, 0x99, 0x46, 0x77, + 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x53, 0x6b, 0x49, 0x56, 0xd8, 0x01, + 0x45, 0x8f, 0x13, 0x03, 0xd8, 0x01, 0x49, 0x82, 0xbb, 0x95, 0xd8, 0x01, + 0x48, 0xd0, 0xc8, 0x79, 0xd8, 0x01, 0x4b, 0xa9, 0x18, 0xb2, 0xd8, 0x01, + 0x06, 0x95, 0x13, 0x01, 0xff, 0x47, 0x8d, 0x31, 0x7a, 0xd8, 0x01, 0x44, + 0x94, 0x0a, 0x78, 0xd8, 0x41, 0x44, 0xd9, 0x09, 0x7d, 0xd8, 0x81, 0x4c, + 0x43, 0xad, 0x0e, 0x6b, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x48, 0xd8, + 0xc4, 0x6a, 0xd8, 0x01, 0x12, 0x34, 0x43, 0x26, 0x07, 0x7d, 0x02, 0x06, + 0x4a, 0x69, 0xb0, 0xb9, 0xd8, 0x41, 0x55, 0xa9, 0x18, 0xda, 0xd8, 0x81, + 0x06, 0x45, 0x95, 0x13, 0xca, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x42, 0x9e, + 0x01, 0xd9, 0xd8, 0x01, 0x43, 0x28, 0x08, 0xd8, 0xd8, 0x41, 0x42, 0x9e, + 0x01, 0xbe, 0xd8, 0x01, 0x43, 0x28, 0x08, 0xbd, 0xd8, 0x01, 0x45, 0xd3, + 0x1a, 0xbf, 0xd8, 0x41, 0x80, 0x01, 0xff, 0xa6, 0xce, 0x01, 0x45, 0x8f, + 0x13, 0x04, 0xd8, 0x81, 0x7c, 0x46, 0xae, 0x18, 0x8a, 0xd8, 0x81, 0x5f, + 0x46, 0x7d, 0x02, 0xc5, 0xd8, 0x81, 0x52, 0x48, 0xd0, 0xc8, 0x82, 0xd8, + 0x01, 0x44, 0xf6, 0x04, 0x7b, 0xd8, 0x81, 0x2b, 0x44, 0x22, 0x08, 0xa7, + 0xd8, 0x81, 0x1e, 0x45, 0x5d, 0x07, 0x7e, 0xd8, 0x01, 0x06, 0x95, 0x13, + 0x01, 0xff, 0x53, 0x87, 0x48, 0x84, 0xd8, 0x01, 0x44, 0x94, 0x0a, 0x80, + 0xd8, 0xc1, 0x00, 0x4f, 0xd8, 0x69, 0x83, 0xd8, 0x41, 0x5d, 0x9d, 0x14, + 0xac, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x48, 0xd0, 0xc8, 0x81, 0xd8, 0x01, + 0x06, 0x95, 0x13, 0x01, 0xff, 0x47, 0x8d, 0x31, 0x7c, 0xd8, 0x01, 0x44, + 0x94, 0x0a, 0x7f, 0xd8, 0x41, 0x4c, 0xa8, 0x18, 0xd1, 0xd8, 0x41, 0x80, + 0x01, 0xff, 0x45, 0x8f, 0x13, 0xa2, 0xd8, 0x81, 0x06, 0x45, 0x95, 0x13, + 0x9b, 0xd8, 0x41, 0x46, 0x94, 0x13, 0x9d, 0xd8, 0x41, 0x80, 0x01, 0xff, + 0x46, 0x20, 0x68, 0xdb, 0xd8, 0x01, 0x07, 0x7d, 0x02, 0x2b, 0x4b, 0xa9, + 0x18, 0xc1, 0xd8, 0x01, 0x45, 0x95, 0x13, 0xf0, 0xd8, 0xc1, 0x00, 0x80, + 0x01, 0xff, 0x45, 0x27, 0x1c, 0xef, 0xd8, 0x01, 0x44, 0xf6, 0x04, 0xee, + 0xd8, 0x01, 0xb3, 0x01, 0xff, 0x43, 0x03, 0x00, 0xdd, 0xd8, 0x01, 0x44, + 0x5e, 0x07, 0xf1, 0xd8, 0x41, 0x46, 0xae, 0x18, 0xa6, 0xd8, 0x01, 0x44, + 0x22, 0x08, 0x88, 0xd8, 0xc1, 0x00, 0x4a, 0xb4, 0x18, 0x8d, 0xd8, 0x41, + 0x57, 0x55, 0x2f, 0x55, 0xd8, 0x01, 0x55, 0x6b, 0x1b, 0x4b, 0xd8, 0x41, + 0x43, 0x2b, 0x24, 0x03, 0xd9, 0x81, 0xc8, 0x01, 0x43, 0xd9, 0x01, 0x5a, + 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x54, 0xc8, 0x40, 0x5b, 0xd8, 0x01, + 0xa6, 0x61, 0x44, 0x2c, 0x13, 0x5c, 0xd8, 0x81, 0x3b, 0x06, 0x43, 0xd8, + 0x17, 0x06, 0x95, 0x13, 0x01, 0xff, 0x44, 0x81, 0x1b, 0x5f, 0xd8, 0x01, + 0x47, 0x8d, 0x31, 0x60, 0xd8, 0x01, 0x44, 0x94, 0x0a, 0x5d, 0xd8, 0x41, + 0x46, 0x73, 0x02, 0x62, 0xd8, 0x81, 0x0c, 0x50, 0xf6, 0x63, 0x61, 0xd8, + 0x01, 0x46, 0xae, 0x18, 0x65, 0xd8, 0x41, 0x4b, 0x82, 0x4f, 0x63, 0xd8, + 0xc1, 0x00, 0x45, 0x80, 0x1b, 0x64, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x53, + 0x6b, 0x49, 0x4d, 0xd8, 0x81, 0x06, 0x4a, 0x83, 0x4f, 0x5e, 0xd8, 0x41, + 0x80, 0x01, 0xff, 0x44, 0x81, 0x1b, 0x51, 0xd8, 0x01, 0x49, 0x15, 0xb9, + 0x4f, 0xd8, 0x41, 0x52, 0x55, 0x2f, 0x4c, 0xd8, 0x81, 0x23, 0x4b, 0x6b, + 0x1b, 0x44, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x44, 0x81, 0x1b, 0x45, + 0xd8, 0x01, 0x49, 0xb5, 0x18, 0x47, 0xd8, 0x81, 0x06, 0x46, 0x20, 0x68, + 0x46, 0xd8, 0x41, 0x46, 0x42, 0xd8, 0x48, 0xd8, 0x41, 0x80, 0x01, 0xff, + 0x44, 0x81, 0x1b, 0x50, 0xd8, 0x01, 0x49, 0x15, 0xb9, 0x4e, 0xd8, 0x01, + 0x46, 0x20, 0x68, 0x57, 0xd8, 0x81, 0x06, 0x4d, 0x87, 0x31, 0x52, 0xd8, + 0x41, 0x80, 0x01, 0xff, 0x48, 0xd0, 0xc8, 0x59, 0xd8, 0x01, 0x4a, 0x83, + 0x4f, 0x58, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x5b, 0x6a, 0x1b, 0x4a, 0xd8, + 0x01, 0x44, 0x2c, 0x13, 0x04, 0xd9, 0x01, 0x45, 0x8f, 0x13, 0x00, 0xd8, + 0x81, 0x85, 0x03, 0x07, 0xae, 0x18, 0xb2, 0x02, 0x07, 0x7d, 0x02, 0xbd, + 0x01, 0x05, 0x22, 0x08, 0x7f, 0x45, 0x95, 0x13, 0xf5, 0xd8, 0xc1, 0x00, + 0x80, 0x01, 0xff, 0x08, 0xc0, 0x09, 0x58, 0x47, 0x8d, 0x31, 0xfa, 0xd8, + 0x01, 0x44, 0x2c, 0x13, 0xf6, 0xd8, 0x01, 0x05, 0x16, 0x02, 0x3c, 0x05, + 0x94, 0x0a, 0x26, 0x06, 0x4b, 0x25, 0x01, 0xff, 0x4c, 0x6a, 0x1b, 0x01, + 0xd9, 0x01, 0x4a, 0xb9, 0xab, 0x08, 0xd8, 0x01, 0x49, 0x82, 0xbb, 0x93, + 0xd8, 0x01, 0xb4, 0x01, 0xff, 0x4c, 0xbb, 0x8f, 0x00, 0xd9, 0x01, 0x4a, + 0xeb, 0xa3, 0xfe, 0xd8, 0x41, 0x44, 0x81, 0x1b, 0xf9, 0xd8, 0x01, 0x49, + 0xb5, 0x18, 0xf8, 0xd8, 0x01, 0x48, 0xe3, 0x25, 0xf7, 0xd8, 0x41, 0x54, + 0x80, 0x42, 0x02, 0xd9, 0x01, 0x4b, 0xea, 0xa3, 0xff, 0xd8, 0x41, 0x4c, + 0x03, 0x90, 0xfb, 0xd8, 0x81, 0x0c, 0x4b, 0xa2, 0x18, 0xfc, 0xd8, 0x01, + 0x4b, 0xa9, 0x18, 0xfd, 0xd8, 0x41, 0x49, 0xc0, 0x69, 0x2c, 0xd8, 0x41, + 0x44, 0xa5, 0x01, 0xab, 0xd8, 0x01, 0x45, 0x8f, 0x13, 0xb7, 0xd8, 0x01, + 0x46, 0xae, 0x18, 0xb0, 0xd8, 0x01, 0x46, 0x7d, 0x02, 0xb4, 0xd8, 0x81, + 0x12, 0x4e, 0x85, 0x42, 0xaf, 0xd8, 0x01, 0x45, 0x95, 0x13, 0xb8, 0xd8, + 0x01, 0x42, 0x50, 0x02, 0xae, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x49, 0xb5, + 0x18, 0xb5, 0xd8, 0x01, 0x4f, 0x85, 0x42, 0xb6, 0xd8, 0x41, 0x4f, 0x40, + 0x6b, 0x1c, 0xd8, 0x01, 0x44, 0xa5, 0x01, 0xc4, 0xd8, 0x01, 0x46, 0xae, + 0x18, 0xcc, 0xd8, 0x01, 0xb2, 0x50, 0x06, 0x95, 0x13, 0x0d, 0x42, 0x50, + 0x02, 0xc6, 0xd8, 0xc1, 0x00, 0x4b, 0x82, 0x4f, 0xc9, 0xd8, 0x41, 0x07, + 0xdf, 0xce, 0x24, 0xa3, 0x0c, 0x4f, 0x01, 0x6e, 0x30, 0xd8, 0x01, 0x46, + 0xae, 0x18, 0xcb, 0xd8, 0x41, 0x0d, 0x72, 0x84, 0x06, 0x4e, 0x21, 0x7e, + 0x36, 0xd8, 0x41, 0x46, 0x20, 0x68, 0x39, 0xd8, 0x01, 0x42, 0x50, 0x02, + 0x38, 0xd8, 0x41, 0x48, 0x08, 0x6e, 0x42, 0xd8, 0x01, 0x0a, 0x47, 0xaf, + 0x01, 0xff, 0x47, 0x27, 0x1f, 0x41, 0xd8, 0x01, 0x42, 0x50, 0x02, 0x40, + 0xd8, 0x41, 0x4d, 0x86, 0x42, 0xc8, 0xd8, 0x01, 0x4a, 0xaa, 0x18, 0xcd, + 0xd8, 0x41, 0x44, 0x81, 0x1b, 0x98, 0xd8, 0x01, 0x44, 0xa5, 0x01, 0x8e, + 0xd8, 0x81, 0x27, 0x45, 0x8f, 0x13, 0xa0, 0xd8, 0x81, 0x1a, 0x4e, 0x85, + 0x42, 0x97, 0xd8, 0x01, 0xb4, 0x06, 0x42, 0x50, 0x02, 0x92, 0xd8, 0x41, + 0x44, 0x96, 0x13, 0x9a, 0xd8, 0x01, 0x4c, 0x7b, 0x93, 0x99, 0xd8, 0x41, + 0x46, 0x94, 0x13, 0x9c, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x4e, 0xbd, 0x7a, + 0x91, 0xd8, 0x01, 0x07, 0x5a, 0xd5, 0x01, 0xff, 0x46, 0x68, 0x41, 0x90, + 0xd8, 0x01, 0x48, 0x34, 0x4d, 0x8f, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x44, + 0x81, 0x1b, 0x06, 0xd8, 0x81, 0xf2, 0x03, 0x46, 0xca, 0xda, 0x0a, 0xd8, + 0x01, 0x46, 0x20, 0x68, 0x0b, 0xd8, 0x81, 0xce, 0x03, 0x46, 0x7d, 0x02, + 0x0e, 0xd8, 0x81, 0xcd, 0x01, 0xb2, 0xbe, 0x01, 0x06, 0x95, 0x13, 0x18, + 0x50, 0x16, 0x68, 0x13, 0xd8, 0xc1, 0x00, 0x07, 0x94, 0x13, 0x01, 0xff, + 0x49, 0xb5, 0x18, 0x25, 0xd8, 0x01, 0x44, 0x94, 0x0a, 0x24, 0xd8, 0x41, + 0x07, 0xdf, 0xce, 0x91, 0x01, 0xa3, 0x5f, 0x0e, 0xf3, 0x77, 0x4f, 0x44, + 0xac, 0x0e, 0xe6, 0xd8, 0x81, 0x37, 0x44, 0x94, 0x0a, 0xdc, 0xd8, 0xc1, + 0x00, 0x80, 0x01, 0xff, 0x49, 0xd5, 0xb6, 0xe2, 0xd8, 0x01, 0x06, 0x8f, + 0x13, 0x17, 0x06, 0x95, 0x13, 0x01, 0xff, 0x44, 0x81, 0x1b, 0xe0, 0xd8, + 0x01, 0x49, 0xb5, 0x18, 0xdf, 0xd8, 0x01, 0x48, 0xe3, 0x25, 0xde, 0xd8, + 0x41, 0x44, 0x81, 0x1b, 0xe1, 0xd8, 0x01, 0x45, 0x20, 0x68, 0xe3, 0xd8, + 0x41, 0x0a, 0x4b, 0x7b, 0x01, 0xff, 0x46, 0x20, 0x68, 0x43, 0xd8, 0x01, + 0x42, 0x50, 0x02, 0x31, 0xd8, 0x41, 0x44, 0x81, 0x1b, 0xe5, 0xd8, 0x01, + 0x48, 0x34, 0x4d, 0xe4, 0xd8, 0x41, 0x45, 0x13, 0x03, 0xeb, 0xd8, 0x81, + 0x23, 0xb5, 0x01, 0xff, 0x4e, 0x49, 0x7b, 0x37, 0xd8, 0x01, 0xb2, 0x01, + 0xff, 0x45, 0xdb, 0xc4, 0xe7, 0xd8, 0x01, 0x09, 0x9e, 0x13, 0x01, 0xff, + 0x46, 0xa7, 0x13, 0xe8, 0xd8, 0x01, 0x45, 0xd3, 0x1a, 0xea, 0xd8, 0x41, + 0x4b, 0x4c, 0x7b, 0x3c, 0xd8, 0x41, 0x4c, 0xf7, 0x8f, 0x3b, 0xd8, 0x01, + 0x4d, 0x4a, 0x87, 0x3a, 0xd8, 0x41, 0x4d, 0x86, 0x42, 0x09, 0xd8, 0x01, + 0x4a, 0xaa, 0x18, 0xba, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x44, 0x81, 0x1b, + 0x10, 0xd8, 0x81, 0xe8, 0x01, 0xa3, 0x7d, 0x46, 0x20, 0x68, 0x12, 0xd8, + 0x81, 0x70, 0x46, 0xae, 0x18, 0xa4, 0xd8, 0x01, 0xb2, 0x4c, 0x53, 0x34, + 0x4d, 0x20, 0xd8, 0x01, 0x45, 0x95, 0x13, 0x1e, 0xd8, 0x81, 0x06, 0x57, + 0x7d, 0x31, 0x27, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x46, 0x2f, 0x0c, 0x3f, + 0xd8, 0x81, 0x29, 0x44, 0x81, 0x1b, 0x22, 0xd8, 0x01, 0xa3, 0x0f, 0xa8, + 0x01, 0xff, 0x45, 0x21, 0x68, 0x2b, 0xd8, 0x01, 0x45, 0x02, 0x6e, 0x2a, + 0xd8, 0x41, 0x46, 0x46, 0x15, 0x29, 0xd8, 0x01, 0x4f, 0x49, 0x71, 0x3d, + 0xd8, 0x01, 0x45, 0x21, 0x7e, 0x28, 0xd8, 0x41, 0x44, 0x17, 0x11, 0x3e, + 0xd8, 0x41, 0x4e, 0x86, 0x42, 0x11, 0xd8, 0x01, 0x43, 0xa1, 0x01, 0x86, + 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x44, 0x81, 0x1b, 0x8b, 0xd8, 0x01, + 0x49, 0xb5, 0x18, 0x8c, 0xd8, 0x41, 0x52, 0x7b, 0x4f, 0x23, 0xd8, 0x41, + 0x48, 0xb6, 0x18, 0x15, 0xd8, 0x81, 0x18, 0x04, 0x96, 0x10, 0x01, 0xff, + 0x47, 0xad, 0x18, 0xa9, 0xd8, 0x01, 0x42, 0x05, 0x00, 0x1a, 0xd8, 0xc1, + 0x00, 0x4b, 0x82, 0x4f, 0x33, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x46, 0xca, + 0xda, 0x18, 0xd8, 0x81, 0x3a, 0x46, 0x20, 0x68, 0x19, 0xd8, 0x81, 0x2d, + 0x4a, 0xb9, 0xab, 0x16, 0xd8, 0x01, 0x4b, 0x88, 0x9f, 0x17, 0xd8, 0x01, + 0x06, 0x95, 0x13, 0x01, 0xff, 0x47, 0x8d, 0x31, 0x34, 0xd8, 0x01, 0x44, + 0x94, 0x0a, 0x2d, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x44, 0x81, 0x1b, + 0x2f, 0xd8, 0x01, 0x49, 0xb5, 0x18, 0x2e, 0xd8, 0x41, 0x4b, 0x82, 0x4f, + 0x32, 0xd8, 0x41, 0x4e, 0x86, 0x31, 0x35, 0xd8, 0x41, 0x4f, 0xba, 0x69, + 0x21, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x43, 0x13, 0x01, 0x0c, 0xd8, 0x01, + 0x49, 0x4e, 0x7b, 0x14, 0xd8, 0xc1, 0x00, 0x4b, 0x82, 0x4f, 0x26, 0xd8, + 0x41, 0x4c, 0x6b, 0x8b, 0x1d, 0xd8, 0x41, 0x45, 0x13, 0x03, 0x76, 0xd8, + 0x81, 0xca, 0x01, 0x43, 0x76, 0xd4, 0x66, 0xd8, 0x81, 0x8f, 0x01, 0xb5, + 0x01, 0xff, 0xf0, 0x6d, 0xd8, 0x81, 0x1c, 0x46, 0xda, 0xc4, 0x75, 0xd8, + 0xc1, 0x00, 0x80, 0x01, 0xff, 0x54, 0x34, 0x43, 0xbc, 0xd8, 0x01, 0x55, + 0xe9, 0x3c, 0xcf, 0xd8, 0x01, 0x44, 0xf6, 0x04, 0x74, 0xd8, 0x41, 0x80, + 0x01, 0xff, 0x53, 0x6b, 0x49, 0x53, 0xd8, 0x81, 0x5b, 0x45, 0x8f, 0x13, + 0x02, 0xd8, 0x81, 0x3e, 0x52, 0xa2, 0x18, 0xd0, 0xd8, 0x01, 0x48, 0xd0, + 0xc8, 0x71, 0xd8, 0x01, 0x44, 0xf6, 0x04, 0x6c, 0xd8, 0x81, 0x11, 0x06, + 0x95, 0x13, 0x01, 0xff, 0x47, 0x8d, 0x31, 0x73, 0xd8, 0x01, 0x44, 0x94, + 0x0a, 0x6f, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x48, 0xd0, 0xc8, 0x70, 0xd8, + 0x01, 0x06, 0x95, 0x13, 0x01, 0xff, 0x47, 0x8d, 0x31, 0x72, 0xd8, 0x01, + 0x44, 0x94, 0x0a, 0x6e, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x4b, 0xa9, 0x18, + 0xc0, 0xd8, 0x01, 0x45, 0x95, 0x13, 0xec, 0xd8, 0xc1, 0x00, 0x45, 0xf5, + 0x04, 0xed, 0xd8, 0x41, 0x45, 0xf5, 0x04, 0x54, 0xd8, 0x41, 0x80, 0x01, + 0xff, 0x56, 0x6a, 0x1b, 0x49, 0xd8, 0x01, 0x5e, 0x8f, 0x13, 0xe9, 0xd8, + 0x01, 0x5c, 0xa2, 0x18, 0xd6, 0xd8, 0x81, 0x17, 0x48, 0xd0, 0xc8, 0x68, + 0xd8, 0x01, 0x06, 0x95, 0x13, 0x01, 0xff, 0x47, 0x8d, 0x31, 0x69, 0xd8, + 0x01, 0x44, 0x94, 0x0a, 0x67, 0xd8, 0x41, 0x45, 0x40, 0x3e, 0xd7, 0xd8, + 0x41, 0x80, 0x01, 0xff, 0x45, 0x8f, 0x13, 0x01, 0xd8, 0x81, 0x2d, 0x07, + 0xae, 0x18, 0x1d, 0x07, 0x7d, 0x02, 0x06, 0x4b, 0xa9, 0x18, 0xb1, 0xd8, + 0x41, 0x4b, 0xa9, 0x18, 0xce, 0xd8, 0x81, 0x06, 0x42, 0x50, 0x02, 0xc7, + 0xd8, 0x41, 0x45, 0x80, 0x1b, 0xd5, 0xd8, 0x41, 0x45, 0x8f, 0x13, 0xa1, + 0xd8, 0x01, 0x42, 0x50, 0x02, 0x94, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x44, + 0x81, 0x1b, 0x07, 0xd8, 0x01, 0x45, 0x20, 0x68, 0x0d, 0xd8, 0x01, 0x46, + 0x7d, 0x02, 0x0f, 0xd8, 0x81, 0x06, 0x4b, 0xa9, 0x18, 0xbb, 0xd8, 0x41, + 0x80, 0x01, 0xff, 0x05, 0x95, 0x10, 0x12, 0x46, 0xae, 0x18, 0xa5, 0xd8, + 0x01, 0x44, 0x22, 0x08, 0x87, 0xd8, 0x01, 0x45, 0x95, 0x13, 0x1f, 0xd8, + 0x41, 0x47, 0xad, 0x18, 0xaa, 0xd8, 0x01, 0x42, 0x05, 0x00, 0x1b, 0xd8, + 0x41, 0x80, 0x01, 0xff, 0x45, 0x8f, 0x13, 0x05, 0xd8, 0x81, 0x45, 0x07, + 0xae, 0x18, 0x27, 0x52, 0xa2, 0x18, 0xd4, 0xd8, 0x81, 0x11, 0x05, 0x22, + 0x08, 0x01, 0xff, 0x5d, 0x85, 0x15, 0xad, 0xd8, 0x01, 0x46, 0xae, 0x18, + 0xb3, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x42, 0x9e, 0x01, 0xd3, 0xd8, 0x01, + 0x43, 0x28, 0x08, 0xd2, 0xd8, 0x41, 0x45, 0x8f, 0x13, 0xa3, 0xd8, 0x81, + 0x06, 0x42, 0x50, 0x02, 0x96, 0xd8, 0x41, 0x52, 0x8d, 0x4f, 0x9f, 0xd8, + 0xc1, 0x00, 0x44, 0x17, 0x11, 0x9e, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x07, + 0x7d, 0x02, 0x23, 0x4b, 0xa9, 0x18, 0xc3, 0xd8, 0x81, 0x16, 0x45, 0x95, + 0x13, 0xf4, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x42, 0x9e, 0x01, 0xf3, + 0xd8, 0x01, 0x43, 0x28, 0x08, 0xf2, 0xd8, 0x41, 0x44, 0x17, 0x11, 0xc2, + 0xd8, 0x41, 0x46, 0xae, 0x18, 0xa8, 0xd8, 0x01, 0x44, 0x22, 0x08, 0x89, + 0xd8, 0x41, 0x47, 0xc0, 0x09, 0x0a, 0xd9, 0x01, 0x48, 0x60, 0x44, 0x09, + 0xd9, 0x01, 0x46, 0xdf, 0x09, 0x08, 0xd9, 0x41, 0x1c, 0xfe, 0x16, 0x72, + 0xa9, 0x52, 0xac, 0x1c, 0x08, 0x60, 0xc9, 0x06, 0x48, 0x82, 0x16, 0x88, + 0xda, 0x41, 0x47, 0x13, 0xd0, 0x12, 0xda, 0x01, 0x47, 0x4c, 0x8e, 0x11, + 0xda, 0x01, 0x48, 0x98, 0xcc, 0x13, 0xda, 0x41, 0x04, 0xfe, 0x07, 0x06, + 0x5a, 0x6a, 0x21, 0x70, 0xda, 0x41, 0x06, 0x27, 0x1c, 0x1a, 0xb3, 0x01, + 0xff, 0x49, 0x54, 0x6c, 0x1f, 0xd9, 0x01, 0x05, 0x5e, 0x07, 0x01, 0xff, + 0x48, 0x60, 0x44, 0x1e, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0x1c, 0xd9, 0x41, + 0x48, 0x60, 0x44, 0x1d, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0x1b, 0xd9, 0x41, + 0x0c, 0x53, 0x91, 0x06, 0x44, 0xda, 0x09, 0x7e, 0xda, 0x41, 0xd2, 0x9b, + 0xda, 0x01, 0xd3, 0x9c, 0xda, 0x01, 0xd4, 0x9d, 0xda, 0x01, 0xd5, 0x9e, + 0xda, 0x01, 0xd6, 0x9f, 0xda, 0x41, 0x4f, 0x20, 0x6d, 0x07, 0xda, 0x01, + 0x4a, 0xd5, 0xb2, 0x08, 0xda, 0xc1, 0x00, 0x48, 0x4e, 0x0d, 0x09, 0xda, + 0x41, 0x43, 0x74, 0x1a, 0x30, 0xda, 0x01, 0x49, 0x73, 0xc1, 0x6c, 0xda, + 0x01, 0x02, 0x4d, 0x00, 0x01, 0xff, 0x80, 0xb2, 0x01, 0x0f, 0x8b, 0x6b, + 0x9b, 0x01, 0x05, 0x96, 0xe6, 0x4e, 0x07, 0xb3, 0xd2, 0x38, 0x02, 0x31, + 0x01, 0x01, 0xff, 0x46, 0xa2, 0x0d, 0x16, 0xda, 0x01, 0x05, 0x22, 0x00, + 0x1d, 0x44, 0xf6, 0x04, 0x14, 0xda, 0x01, 0x48, 0x28, 0xcb, 0x15, 0xda, + 0x01, 0x04, 0xd5, 0x1b, 0x01, 0xff, 0x45, 0xf5, 0x04, 0x1a, 0xda, 0x01, + 0x4d, 0x6d, 0x86, 0x1c, 0xda, 0x41, 0x46, 0xa2, 0x0d, 0x1b, 0xda, 0x01, + 0x44, 0xf6, 0x04, 0x19, 0xda, 0x41, 0x44, 0xa5, 0x01, 0x1f, 0xda, 0x01, + 0x4a, 0x6b, 0x47, 0x20, 0xda, 0x01, 0x42, 0x50, 0x02, 0x1e, 0xda, 0x41, + 0x0b, 0x7e, 0x49, 0x29, 0x0a, 0x0d, 0x1e, 0x01, 0xff, 0xa3, 0x16, 0x48, + 0x34, 0x4d, 0x21, 0xda, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4b, 0x13, 0x5a, + 0x23, 0xda, 0x01, 0x46, 0x3b, 0x01, 0x22, 0xda, 0x41, 0x47, 0x2c, 0x0b, + 0x29, 0xda, 0x01, 0x45, 0xbf, 0x22, 0x27, 0xda, 0x41, 0x46, 0x68, 0x41, + 0x28, 0xda, 0x01, 0x48, 0x34, 0x4d, 0x24, 0xda, 0xc1, 0x00, 0x80, 0x01, + 0xff, 0x4b, 0x13, 0x5a, 0x26, 0xda, 0x01, 0x46, 0x3b, 0x01, 0x25, 0xda, + 0x41, 0x44, 0xa5, 0x01, 0x0c, 0xda, 0x01, 0x47, 0x4c, 0x8e, 0x0b, 0xda, + 0x01, 0x42, 0x50, 0x02, 0x0a, 0xda, 0x41, 0x06, 0x34, 0xda, 0x06, 0x44, + 0x1e, 0xa5, 0x1d, 0xda, 0x41, 0x48, 0x60, 0x44, 0x18, 0xda, 0x01, 0x46, + 0xdf, 0x09, 0x17, 0xda, 0x41, 0x0f, 0x39, 0x72, 0x48, 0x07, 0xec, 0xd7, + 0x01, 0xff, 0x0a, 0xd6, 0x3d, 0x33, 0x50, 0x16, 0x63, 0xfd, 0xd9, 0x01, + 0x44, 0xb5, 0xef, 0xf7, 0xd9, 0x01, 0x47, 0x63, 0xd1, 0xfe, 0xd9, 0x01, + 0x47, 0x69, 0x43, 0xfa, 0xd9, 0x01, 0xb3, 0x06, 0x45, 0x37, 0xeb, 0xf9, + 0xd9, 0x41, 0x4b, 0x6d, 0x9d, 0xfb, 0xd9, 0x81, 0x06, 0x43, 0x13, 0x01, + 0xf8, 0xd9, 0x41, 0x4c, 0x12, 0x5a, 0xfc, 0xd9, 0x41, 0x45, 0x27, 0x1c, + 0xf6, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0xf5, 0xd9, 0x41, 0x4c, 0x47, 0x8e, + 0x0e, 0xda, 0x01, 0x08, 0x97, 0x92, 0x06, 0x4a, 0xcb, 0xb2, 0x0f, 0xda, + 0x41, 0x44, 0xa5, 0x01, 0x0d, 0xda, 0x01, 0x42, 0x50, 0x02, 0x10, 0xda, + 0x41, 0x06, 0x32, 0xa0, 0x0f, 0xaf, 0x01, 0xff, 0x43, 0xd7, 0x02, 0x8a, + 0xda, 0x01, 0x43, 0x15, 0x05, 0x87, 0xda, 0x41, 0x47, 0x4c, 0x8e, 0x2b, + 0xda, 0x01, 0x46, 0x4a, 0xdf, 0x2a, 0xda, 0x01, 0x46, 0x2e, 0xe0, 0x2c, + 0xda, 0x41, 0x05, 0xba, 0xe5, 0x17, 0x04, 0xa2, 0xea, 0x01, 0xff, 0x47, + 0xc0, 0x09, 0x10, 0xd9, 0x01, 0x48, 0x60, 0x44, 0x0f, 0xd9, 0x01, 0x46, + 0xdf, 0x09, 0x0e, 0xd9, 0x41, 0x46, 0x96, 0xdb, 0x3a, 0xda, 0x01, 0x46, + 0xf8, 0xdc, 0x39, 0xda, 0x41, 0x04, 0xc7, 0x8c, 0x11, 0x04, 0x2e, 0xe0, + 0x01, 0xff, 0x50, 0x66, 0x60, 0x38, 0xda, 0x01, 0x46, 0x05, 0x06, 0x36, + 0xda, 0x41, 0x50, 0x66, 0x60, 0x37, 0xda, 0x01, 0x47, 0x7b, 0x67, 0x35, + 0xda, 0x41, 0x05, 0x92, 0xe5, 0xb4, 0x01, 0xa5, 0x01, 0xff, 0x0c, 0xeb, + 0x95, 0x3e, 0x05, 0xf4, 0x45, 0x01, 0xff, 0x06, 0x0c, 0x03, 0x1d, 0x06, + 0xad, 0x02, 0x01, 0xff, 0x53, 0x1f, 0x49, 0x9f, 0xf5, 0x01, 0x53, 0xe7, + 0x4a, 0x98, 0xf5, 0x01, 0x54, 0x8e, 0x22, 0x99, 0xf5, 0x01, 0x51, 0xc4, + 0x5e, 0x9e, 0xf5, 0x41, 0x53, 0x1f, 0x49, 0xa1, 0xf5, 0x01, 0x53, 0xe7, + 0x4a, 0x9a, 0xf5, 0x01, 0x54, 0x8e, 0x22, 0x9b, 0xf5, 0x01, 0x51, 0xc4, + 0x5e, 0xa0, 0xf5, 0x41, 0x90, 0x49, 0x91, 0x1f, 0x92, 0x01, 0xff, 0xd0, + 0x53, 0x09, 0x01, 0xd1, 0x54, 0x09, 0x01, 0xd2, 0x55, 0x09, 0x01, 0xd3, + 0x56, 0x09, 0x01, 0xd4, 0x57, 0x09, 0x01, 0xd5, 0x58, 0x09, 0x01, 0xd6, + 0x59, 0x09, 0x41, 0xd0, 0x49, 0x09, 0x01, 0xd1, 0x4a, 0x09, 0x01, 0xd2, + 0x4b, 0x09, 0x01, 0xd3, 0x4c, 0x09, 0x01, 0xd4, 0x4d, 0x09, 0x01, 0xd5, + 0x4e, 0x09, 0x01, 0xd6, 0x4f, 0x09, 0x01, 0xd7, 0x50, 0x09, 0x01, 0xd8, + 0x51, 0x09, 0x01, 0xd9, 0x52, 0x09, 0x41, 0xd1, 0x40, 0x09, 0x01, 0xd2, + 0x41, 0x09, 0x01, 0xd3, 0x42, 0x09, 0x01, 0xd4, 0x43, 0x09, 0x01, 0xd5, + 0x44, 0x09, 0x01, 0xd6, 0x45, 0x09, 0x01, 0xd7, 0x46, 0x09, 0x01, 0xd8, + 0x47, 0x09, 0x01, 0xd9, 0x48, 0x09, 0x41, 0xa4, 0xb8, 0x04, 0x50, 0xb6, + 0x62, 0xc9, 0x15, 0x01, 0x07, 0xec, 0x05, 0x86, 0x02, 0x10, 0x66, 0x66, + 0xf5, 0x01, 0xb3, 0x43, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x25, 0xe5, + 0xb8, 0x15, 0x01, 0xe9, 0xb0, 0x15, 0x81, 0x18, 0xef, 0xba, 0x15, 0x01, + 0xf5, 0xb2, 0x15, 0x81, 0x0b, 0x49, 0x22, 0xc1, 0xb4, 0x15, 0xc1, 0x00, + 0xf2, 0xb5, 0x15, 0x41, 0xf5, 0xb3, 0x15, 0x41, 0xe9, 0xb1, 0x15, 0x41, + 0xe1, 0xaf, 0x15, 0x01, 0xe9, 0xb9, 0x15, 0x01, 0x4a, 0x85, 0xad, 0xdc, + 0x15, 0x81, 0x04, 0xf5, 0xbb, 0x15, 0x41, 0xf5, 0xdd, 0x15, 0x41, 0xa5, + 0x2e, 0x04, 0x5b, 0x03, 0x01, 0xff, 0x48, 0x3c, 0x16, 0xbd, 0x15, 0x01, + 0x4b, 0xd7, 0x23, 0xbc, 0x15, 0x01, 0x45, 0x3f, 0x3f, 0xc0, 0x15, 0x01, + 0x47, 0xd8, 0xd5, 0xc1, 0x15, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, + 0xe5, 0x23, 0xbf, 0x15, 0x01, 0x45, 0xec, 0x4b, 0xbe, 0x15, 0x41, 0x0b, + 0x97, 0x9a, 0x11, 0x08, 0xda, 0x20, 0x01, 0xff, 0x43, 0x16, 0x00, 0xc5, + 0x15, 0x01, 0x43, 0x23, 0x0a, 0xc4, 0x15, 0x41, 0x4b, 0x3c, 0x9b, 0xcf, + 0x15, 0x81, 0x5e, 0x05, 0x51, 0x00, 0x01, 0xff, 0x0c, 0x63, 0x8d, 0x43, + 0x50, 0x06, 0x62, 0xd1, 0x15, 0x01, 0x53, 0x3d, 0x4c, 0xd3, 0x15, 0x01, + 0x10, 0x46, 0x66, 0x21, 0x52, 0x1b, 0x55, 0xd4, 0x15, 0x01, 0x03, 0x19, + 0x01, 0x01, 0xff, 0x09, 0xa4, 0xb7, 0x06, 0x4d, 0x43, 0x4c, 0xd2, 0x15, + 0x41, 0x50, 0xf6, 0x61, 0xcb, 0x15, 0x01, 0x52, 0x05, 0x56, 0xca, 0x15, + 0x41, 0x49, 0x47, 0x4c, 0xcc, 0x15, 0x01, 0x50, 0x06, 0x62, 0xcd, 0x15, + 0x01, 0x50, 0xc6, 0x67, 0xce, 0x15, 0x41, 0x4f, 0x4d, 0x6d, 0xd7, 0x15, + 0x01, 0x44, 0x46, 0x66, 0xd5, 0x15, 0x01, 0x4e, 0xa3, 0x7d, 0xd6, 0x15, + 0x41, 0x4a, 0x71, 0x96, 0xd0, 0x15, 0x41, 0xd1, 0xc6, 0x15, 0x01, 0xd2, + 0xc7, 0x15, 0x01, 0xd3, 0xc8, 0x15, 0x41, 0xe1, 0x80, 0x15, 0x81, 0x8f, + 0x02, 0xa2, 0x82, 0x02, 0xa3, 0xf5, 0x01, 0xa4, 0xdc, 0x01, 0xe5, 0x8a, + 0x15, 0x01, 0xa7, 0xcb, 0x01, 0x42, 0x22, 0x00, 0xae, 0x15, 0x01, 0xe9, + 0x82, 0x15, 0x81, 0xbb, 0x01, 0xaa, 0xae, 0x01, 0xab, 0xa1, 0x01, 0x42, + 0x74, 0x00, 0xa9, 0x15, 0x01, 0x42, 0x6c, 0x00, 0xa6, 0x15, 0x01, 0xae, + 0x7d, 0xef, 0x8c, 0x15, 0x01, 0xb0, 0x6d, 0x42, 0x71, 0x00, 0xa8, 0x15, + 0x01, 0xb3, 0x55, 0xb4, 0x2c, 0xf5, 0x84, 0x15, 0x81, 0x23, 0xb6, 0x06, + 0x42, 0xbc, 0x22, 0xa7, 0x15, 0x41, 0xe1, 0xaa, 0x15, 0x01, 0x07, 0x23, + 0xc1, 0x01, 0xff, 0xec, 0x88, 0x15, 0x81, 0x09, 0xf2, 0x86, 0x15, 0xc1, + 0x00, 0xf2, 0x87, 0x15, 0x41, 0xec, 0x89, 0x15, 0x41, 0xf5, 0x85, 0x15, + 0x41, 0xe1, 0x9d, 0x15, 0x01, 0xa8, 0x17, 0xb4, 0x0b, 0x55, 0x20, 0x3f, + 0xd9, 0x15, 0xc1, 0x00, 0xe9, 0xda, 0x15, 0x41, 0xe1, 0x98, 0x15, 0x01, + 0x42, 0x22, 0x00, 0x99, 0x15, 0x41, 0xe1, 0x9e, 0x15, 0x01, 0x56, 0xc3, + 0x36, 0xd8, 0x15, 0x41, 0xe1, 0xad, 0x15, 0x01, 0x42, 0x22, 0x00, 0xab, + 0x15, 0x01, 0x42, 0x40, 0x06, 0xac, 0x15, 0x41, 0xe1, 0xa2, 0x15, 0x01, + 0x42, 0x22, 0x00, 0xa3, 0x15, 0x41, 0xe1, 0xa1, 0x15, 0x01, 0x42, 0x24, + 0x02, 0x92, 0x15, 0x01, 0x42, 0x2a, 0x05, 0x9c, 0x15, 0x01, 0x42, 0xbc, + 0x22, 0x97, 0x15, 0x41, 0xe1, 0x8e, 0x15, 0x01, 0x42, 0x22, 0x00, 0x8f, + 0x15, 0x41, 0xe1, 0x95, 0x15, 0x01, 0x42, 0x22, 0x00, 0x96, 0x15, 0x41, + 0xe9, 0x83, 0x15, 0x41, 0xe1, 0x90, 0x15, 0x01, 0x42, 0x22, 0x00, 0x91, + 0x15, 0x41, 0xe1, 0x9f, 0x15, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa0, + 0x15, 0x41, 0xe1, 0x9a, 0x15, 0x01, 0x42, 0x22, 0x00, 0x9b, 0x15, 0x41, + 0xe1, 0x93, 0x15, 0x01, 0x42, 0x22, 0x00, 0x94, 0x15, 0x41, 0xe1, 0xa4, + 0x15, 0x01, 0x42, 0x22, 0x00, 0xa5, 0x15, 0x41, 0xe1, 0x81, 0x15, 0x01, + 0xe9, 0x8b, 0x15, 0x01, 0x4a, 0x85, 0xad, 0xdb, 0x15, 0x01, 0xf5, 0x8d, + 0x15, 0x41, 0x44, 0x73, 0x20, 0xc2, 0x15, 0x01, 0x4b, 0x09, 0xa1, 0xc3, + 0x15, 0x41, 0xa1, 0xf1, 0x01, 0x43, 0xf6, 0x34, 0x11, 0xf4, 0x01, 0xa9, + 0xc8, 0x01, 0xaf, 0x14, 0xb2, 0x06, 0x4d, 0x86, 0x89, 0xe2, 0x29, 0x40, + 0x43, 0xf1, 0x1b, 0x90, 0xf9, 0x01, 0x42, 0xd2, 0x0e, 0x37, 0xf9, 0x41, + 0x5d, 0x11, 0x15, 0x2f, 0xf9, 0x01, 0x4a, 0x29, 0xaf, 0x20, 0xf3, 0x01, + 0x06, 0x2a, 0x30, 0x95, 0x01, 0x02, 0x34, 0x00, 0x12, 0x50, 0xf6, 0x67, + 0x7d, 0x23, 0x00, 0x43, 0xd7, 0x00, 0x8f, 0xfa, 0x01, 0x43, 0x15, 0x01, + 0xbf, 0xf6, 0x41, 0x80, 0x26, 0x44, 0x5f, 0x2c, 0x70, 0xf3, 0x01, 0x0c, + 0x8b, 0x8f, 0x04, 0xf3, 0x73, 0xfa, 0x41, 0x52, 0xbf, 0x50, 0xa1, 0xbc, + 0x01, 0x49, 0xd1, 0xb7, 0xa2, 0xbc, 0x01, 0x4e, 0x6d, 0x79, 0xa0, 0xbc, + 0x01, 0x47, 0xe2, 0xd6, 0xa3, 0xbc, 0x41, 0xa2, 0x49, 0x49, 0xf0, 0x38, + 0xdf, 0x2a, 0x80, 0x3c, 0x04, 0xc3, 0x00, 0x2c, 0x0b, 0xb3, 0x02, 0x1c, + 0x53, 0x21, 0x4d, 0x4e, 0x2b, 0x00, 0x47, 0xe9, 0xd6, 0xe0, 0x2a, 0xc0, + 0x00, 0x80, 0x01, 0xff, 0x55, 0xe4, 0x38, 0xe9, 0x2a, 0x00, 0x4d, 0x2e, + 0x5f, 0xe8, 0x2a, 0x40, 0x5b, 0x41, 0x1a, 0x44, 0x29, 0x00, 0x64, 0x2b, + 0x09, 0xd3, 0xf8, 0x41, 0x45, 0xf4, 0x38, 0xde, 0x2a, 0x00, 0x6b, 0xc3, + 0x02, 0xd5, 0xf8, 0x41, 0x4d, 0xe0, 0x7f, 0xe7, 0x2a, 0x40, 0x56, 0xcf, + 0x32, 0x4f, 0x2b, 0x00, 0x6c, 0x92, 0x01, 0x5f, 0x2b, 0x40, 0x44, 0x04, + 0x6b, 0xcd, 0xf6, 0x01, 0x47, 0x80, 0xd6, 0xd2, 0xf6, 0x41, 0x43, 0x02, + 0x24, 0xe1, 0xf6, 0x01, 0x03, 0xc5, 0x00, 0x0a, 0x4a, 0x7f, 0xae, 0xe9, + 0x26, 0x00, 0xf0, 0xa2, 0xf6, 0x41, 0x42, 0x9e, 0x01, 0x0f, 0x00, 0x00, + 0x43, 0x28, 0x08, 0x0e, 0x00, 0x40, 0x0c, 0xa7, 0x02, 0xdc, 0x07, 0x49, + 0x74, 0xb0, 0xe8, 0xfa, 0x01, 0x50, 0xc6, 0x64, 0x58, 0xf9, 0x01, 0x45, + 0xcb, 0xe8, 0x18, 0x26, 0x00, 0xb2, 0xbb, 0x02, 0xb6, 0x01, 0xff, 0x46, + 0x24, 0xdb, 0x67, 0xf3, 0x01, 0x0b, 0x4c, 0x8d, 0x01, 0xff, 0xa1, 0xfc, + 0x01, 0x43, 0xfb, 0xf3, 0x5a, 0x04, 0x01, 0x46, 0xa0, 0xda, 0x57, 0x04, + 0x01, 0x44, 0x85, 0xef, 0x5b, 0x04, 0x01, 0xa5, 0xd1, 0x01, 0x43, 0xd3, + 0x20, 0x53, 0x04, 0x01, 0x43, 0x97, 0xaa, 0x5c, 0x04, 0x01, 0xa8, 0xb6, + 0x01, 0xa9, 0xa3, 0x01, 0x45, 0xae, 0xe7, 0x61, 0x04, 0x01, 0x44, 0xd9, + 0xf0, 0x52, 0x04, 0x01, 0x44, 0x11, 0xf1, 0x64, 0x04, 0x01, 0xad, 0x82, + 0x01, 0x43, 0xdc, 0x22, 0x6f, 0x04, 0x01, 0xaf, 0x5a, 0x44, 0x05, 0xf2, + 0x50, 0x04, 0x01, 0x44, 0x59, 0xf2, 0x6e, 0x04, 0x01, 0xb3, 0x42, 0xb4, + 0x2c, 0x42, 0x50, 0x02, 0x73, 0x04, 0x01, 0x43, 0x3c, 0x39, 0x5d, 0x04, + 0x01, 0x02, 0x15, 0x02, 0x12, 0x02, 0x4d, 0x00, 0x06, 0x43, 0xdc, 0xf4, + 0x5f, 0x04, 0x41, 0xe1, 0x58, 0x04, 0x01, 0xf7, 0x7f, 0x04, 0x41, 0xe5, + 0x62, 0x04, 0x01, 0x42, 0x61, 0x03, 0x6b, 0x04, 0x41, 0xa8, 0x06, 0x42, + 0x1b, 0x05, 0x51, 0x04, 0x41, 0x42, 0xc6, 0x1c, 0x5e, 0x04, 0x01, 0x43, + 0x3f, 0x00, 0x54, 0x04, 0x41, 0xef, 0x55, 0x04, 0x01, 0x43, 0x75, 0x18, + 0x56, 0x04, 0x41, 0x42, 0x6d, 0x00, 0x74, 0x04, 0x01, 0x42, 0x62, 0x01, + 0x76, 0x04, 0x01, 0xee, 0x6a, 0x04, 0x01, 0x43, 0x69, 0x0a, 0x75, 0x04, + 0x01, 0xf2, 0x79, 0x04, 0x01, 0x42, 0x29, 0x08, 0x6c, 0x04, 0x41, 0x46, + 0x72, 0x18, 0x60, 0x04, 0x01, 0x43, 0x29, 0x02, 0x65, 0x04, 0x41, 0x42, + 0x1a, 0x00, 0x7e, 0x04, 0x01, 0x42, 0x73, 0x02, 0x72, 0x04, 0x01, 0xe6, + 0x66, 0x04, 0x41, 0x44, 0xd9, 0xee, 0x63, 0x04, 0x01, 0x43, 0xaa, 0x45, + 0x59, 0x04, 0x41, 0xa1, 0x0c, 0x42, 0x64, 0x12, 0x67, 0x04, 0x01, 0x42, + 0xcf, 0x00, 0x7b, 0x04, 0x41, 0xf2, 0x7d, 0x04, 0x01, 0xf4, 0x70, 0x04, + 0x41, 0x42, 0x3b, 0x01, 0x69, 0x04, 0x01, 0x42, 0xdb, 0x09, 0x71, 0x04, + 0x01, 0xe8, 0x6d, 0x04, 0x01, 0x42, 0x46, 0x00, 0x7a, 0x04, 0x01, 0xb2, + 0x0c, 0x42, 0xa4, 0x02, 0x68, 0x04, 0x01, 0x42, 0x15, 0x01, 0x77, 0x04, + 0x41, 0xe5, 0x78, 0x04, 0x01, 0x43, 0x46, 0x66, 0x7c, 0x04, 0x41, 0x04, + 0xd4, 0x4d, 0x04, 0xeb, 0x88, 0xf9, 0x41, 0x51, 0xdc, 0x57, 0xc7, 0x11, + 0x01, 0x51, 0x63, 0x59, 0xdd, 0x11, 0x01, 0xa4, 0xa3, 0x04, 0xa5, 0x94, + 0x04, 0x4a, 0xbc, 0x60, 0xdc, 0x11, 0x01, 0x07, 0xec, 0x05, 0xf1, 0x01, + 0x42, 0x14, 0x05, 0xc4, 0x11, 0x01, 0xb3, 0x81, 0x01, 0x06, 0x3c, 0x39, + 0x01, 0xff, 0x4d, 0x2c, 0x86, 0xcb, 0x11, 0x01, 0x05, 0x5a, 0x03, 0x01, + 0xff, 0xa1, 0x63, 0x07, 0x36, 0x61, 0x57, 0xe5, 0xbc, 0x11, 0x01, 0xe9, + 0xb4, 0x11, 0x81, 0x4a, 0xef, 0xbe, 0x11, 0x81, 0x3b, 0x4f, 0xee, 0x71, + 0xce, 0x11, 0x01, 0x06, 0x33, 0x07, 0x29, 0xf5, 0xb6, 0x11, 0x81, 0x17, + 0x08, 0x22, 0xc1, 0x01, 0xff, 0xec, 0xba, 0x11, 0x81, 0x09, 0xf2, 0xb8, + 0x11, 0xc1, 0x00, 0xf2, 0xb9, 0x11, 0x41, 0xec, 0xbb, 0x11, 0x41, 0xe5, + 0x62, 0x1b, 0x01, 0xf5, 0xb7, 0x11, 0xc1, 0x00, 0xe5, 0x63, 0x1b, 0x41, + 0xe5, 0x64, 0x1b, 0x01, 0xef, 0x65, 0x1b, 0x41, 0xe5, 0x60, 0x1b, 0x01, + 0x42, 0x60, 0x51, 0x61, 0x1b, 0x41, 0xe9, 0xb5, 0x11, 0x41, 0xe5, 0x66, + 0x1b, 0x01, 0xef, 0x67, 0x1b, 0x41, 0xe1, 0xb3, 0x11, 0x01, 0xe9, 0xbd, + 0x11, 0x01, 0xf5, 0xbf, 0x11, 0x41, 0x4a, 0xbd, 0xa7, 0xc9, 0x11, 0x01, + 0xa5, 0x4d, 0x04, 0x5b, 0x03, 0x06, 0x49, 0xb6, 0xc0, 0xcd, 0x11, 0x41, + 0xa1, 0x35, 0x4b, 0xd7, 0x23, 0x80, 0x11, 0x01, 0x54, 0x84, 0x43, 0xcf, + 0x11, 0x01, 0x4b, 0xe6, 0x9d, 0xc2, 0x11, 0x01, 0x45, 0x3f, 0x3f, 0xca, + 0x11, 0x01, 0x47, 0xd8, 0xd5, 0xdb, 0x11, 0x01, 0x4b, 0x6e, 0xa4, 0xc3, + 0x11, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0xe5, 0x23, 0xc0, 0x11, + 0x01, 0x45, 0xec, 0x4b, 0x82, 0x11, 0x41, 0x47, 0x3d, 0x16, 0x81, 0x11, + 0x01, 0x47, 0xaf, 0x88, 0xc1, 0x11, 0x41, 0x0b, 0xa2, 0x9a, 0x06, 0x47, + 0xda, 0x20, 0xc8, 0x11, 0x41, 0xd1, 0xde, 0x11, 0x01, 0xd2, 0xdf, 0x11, + 0x41, 0xe1, 0x83, 0x11, 0x81, 0x86, 0x02, 0xa2, 0xf9, 0x01, 0xa3, 0xec, + 0x01, 0xa4, 0xd3, 0x01, 0xe5, 0x8d, 0x11, 0x01, 0xa7, 0xc2, 0x01, 0x42, + 0x22, 0x00, 0xb2, 0x11, 0x01, 0xe9, 0x85, 0x11, 0x81, 0xb2, 0x01, 0xaa, + 0xa5, 0x01, 0xab, 0x98, 0x01, 0xac, 0x8b, 0x01, 0x42, 0x6c, 0x00, 0xa9, + 0x11, 0x01, 0xae, 0x6d, 0xef, 0x8f, 0x11, 0x01, 0xb0, 0x5d, 0x42, 0x71, + 0x00, 0xab, 0x11, 0x01, 0xb3, 0x45, 0xb4, 0x2c, 0xf5, 0x87, 0x11, 0x81, + 0x23, 0xb6, 0x06, 0x42, 0xbc, 0x22, 0xaa, 0x11, 0x41, 0xe1, 0xae, 0x11, + 0x01, 0x07, 0x23, 0xc1, 0x01, 0xff, 0xec, 0x8b, 0x11, 0x81, 0x09, 0xf2, + 0x89, 0x11, 0xc1, 0x00, 0xf2, 0x8a, 0x11, 0x41, 0xec, 0x8c, 0x11, 0x41, + 0xf5, 0x88, 0x11, 0x41, 0xe1, 0xa0, 0x11, 0x01, 0x42, 0x22, 0x00, 0xa1, + 0x11, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x9b, 0x11, 0x01, 0x42, 0x22, 0x00, + 0x9c, 0x11, 0x41, 0xe1, 0xb1, 0x11, 0x01, 0x42, 0x22, 0x00, 0xaf, 0x11, + 0x01, 0x42, 0x40, 0x06, 0xb0, 0x11, 0x41, 0xe1, 0xa5, 0x11, 0x01, 0x42, + 0x22, 0x00, 0xa6, 0x11, 0x41, 0xe1, 0xa4, 0x11, 0x01, 0x42, 0x24, 0x02, + 0x95, 0x11, 0x01, 0x42, 0x2a, 0x05, 0x9f, 0x11, 0x01, 0x42, 0xbc, 0x22, + 0x9a, 0x11, 0x41, 0xe1, 0xac, 0x11, 0x01, 0x42, 0x74, 0x00, 0xad, 0x11, + 0x41, 0xe1, 0x91, 0x11, 0x01, 0x42, 0x22, 0x00, 0x92, 0x11, 0x41, 0xe1, + 0x98, 0x11, 0x01, 0x42, 0x22, 0x00, 0x99, 0x11, 0x41, 0xe9, 0x86, 0x11, + 0x41, 0xe1, 0x93, 0x11, 0x01, 0x42, 0x22, 0x00, 0x94, 0x11, 0x41, 0xe1, + 0xa2, 0x11, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa3, 0x11, 0x41, 0xe1, + 0x9d, 0x11, 0x01, 0x42, 0x22, 0x00, 0x9e, 0x11, 0x41, 0xe1, 0x96, 0x11, + 0x01, 0x42, 0x22, 0x00, 0x97, 0x11, 0x41, 0xe1, 0xa7, 0x11, 0x01, 0x42, + 0x22, 0x00, 0xa8, 0x11, 0x41, 0xe1, 0x84, 0x11, 0x01, 0xe9, 0x8e, 0x11, + 0x01, 0xf5, 0x90, 0x11, 0x41, 0x43, 0xfb, 0xba, 0xda, 0x11, 0x01, 0x55, + 0x4a, 0x3f, 0xcc, 0x11, 0x41, 0x44, 0x73, 0x20, 0xc5, 0x11, 0x01, 0x05, + 0xf0, 0x06, 0x06, 0x4b, 0x09, 0xa1, 0xc6, 0x11, 0x41, 0x45, 0x12, 0x0b, + 0xd8, 0x11, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xd9, 0x11, 0x01, 0x43, + 0x0e, 0x0b, 0xd1, 0x11, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, + 0xd0, 0x11, 0x41, 0x44, 0x25, 0x01, 0xd3, 0x11, 0x01, 0x42, 0x15, 0x02, + 0xd2, 0x11, 0x41, 0x44, 0xc9, 0x1d, 0xd7, 0x11, 0x01, 0x42, 0x01, 0x26, + 0xd6, 0x11, 0x41, 0x43, 0xd2, 0x05, 0xd5, 0x11, 0x01, 0x43, 0xf6, 0x06, + 0xd4, 0x11, 0x41, 0x46, 0x12, 0x03, 0x4d, 0x27, 0x00, 0x4b, 0x49, 0x9e, + 0x1e, 0x27, 0x00, 0x44, 0x31, 0x13, 0x30, 0x27, 0x40, 0xa1, 0xc8, 0x04, + 0xa3, 0xb0, 0x04, 0x43, 0x36, 0x9f, 0xf2, 0x2b, 0x00, 0xa5, 0x9b, 0x04, + 0x45, 0x08, 0x30, 0x13, 0x23, 0x80, 0xcc, 0x03, 0x44, 0x01, 0xf1, 0x33, + 0xf9, 0x01, 0x02, 0x7d, 0x02, 0xaf, 0x03, 0x08, 0xd0, 0xc9, 0x38, 0xb2, + 0x2a, 0xb3, 0x1c, 0x02, 0xc6, 0x00, 0x0c, 0x4b, 0x13, 0xa5, 0xa1, 0xfa, + 0x01, 0x45, 0xbe, 0xd5, 0xb9, 0x26, 0x40, 0x45, 0x91, 0x1f, 0x16, 0x22, + 0x00, 0x4e, 0x4f, 0x7d, 0x93, 0x00, 0x40, 0x47, 0xa2, 0xb8, 0x45, 0xfe, + 0x00, 0x4b, 0x98, 0xa1, 0xbc, 0x26, 0x40, 0x65, 0x07, 0x08, 0x2c, 0xf9, + 0x01, 0x49, 0xfe, 0xc0, 0x20, 0x21, 0x40, 0x06, 0x6d, 0x6b, 0x06, 0x46, + 0x16, 0x08, 0xfb, 0x2b, 0x40, 0x09, 0x49, 0xbe, 0xa1, 0x02, 0x08, 0xc8, + 0xca, 0x01, 0xff, 0xd1, 0x51, 0xce, 0x81, 0x8b, 0x01, 0xd2, 0x52, 0xce, + 0x81, 0x43, 0xd3, 0x54, 0xce, 0x81, 0x1f, 0xd4, 0x58, 0xce, 0x81, 0x0d, + 0xd5, 0x60, 0xce, 0x81, 0x04, 0xd6, 0x70, 0xce, 0x41, 0xd6, 0x80, 0xce, + 0x41, 0xd5, 0x68, 0xce, 0x81, 0x04, 0xd6, 0x78, 0xce, 0x41, 0xd6, 0x88, + 0xce, 0x41, 0xd4, 0x5c, 0xce, 0x81, 0x0d, 0xd5, 0x64, 0xce, 0x81, 0x04, + 0xd6, 0x74, 0xce, 0x41, 0xd6, 0x84, 0xce, 0x41, 0xd5, 0x6c, 0xce, 0x81, + 0x04, 0xd6, 0x7c, 0xce, 0x41, 0xd6, 0x8c, 0xce, 0x41, 0xd3, 0x56, 0xce, + 0x81, 0x1f, 0xd4, 0x5a, 0xce, 0x81, 0x0d, 0xd5, 0x62, 0xce, 0x81, 0x04, + 0xd6, 0x72, 0xce, 0x41, 0xd6, 0x82, 0xce, 0x41, 0xd5, 0x6a, 0xce, 0x81, + 0x04, 0xd6, 0x7a, 0xce, 0x41, 0xd6, 0x8a, 0xce, 0x41, 0xd4, 0x5e, 0xce, + 0x81, 0x0d, 0xd5, 0x66, 0xce, 0x81, 0x04, 0xd6, 0x76, 0xce, 0x41, 0xd6, + 0x86, 0xce, 0x41, 0xd5, 0x6e, 0xce, 0x81, 0x04, 0xd6, 0x7e, 0xce, 0x41, + 0xd6, 0x8e, 0xce, 0x41, 0xd2, 0x53, 0xce, 0x81, 0x43, 0xd3, 0x55, 0xce, + 0x81, 0x1f, 0xd4, 0x59, 0xce, 0x81, 0x0d, 0xd5, 0x61, 0xce, 0x81, 0x04, + 0xd6, 0x71, 0xce, 0x41, 0xd6, 0x81, 0xce, 0x41, 0xd5, 0x69, 0xce, 0x81, + 0x04, 0xd6, 0x79, 0xce, 0x41, 0xd6, 0x89, 0xce, 0x41, 0xd4, 0x5d, 0xce, + 0x81, 0x0d, 0xd5, 0x65, 0xce, 0x81, 0x04, 0xd6, 0x75, 0xce, 0x41, 0xd6, + 0x85, 0xce, 0x41, 0xd5, 0x6d, 0xce, 0x81, 0x04, 0xd6, 0x7d, 0xce, 0x41, + 0xd6, 0x8d, 0xce, 0x41, 0xd3, 0x57, 0xce, 0x81, 0x1f, 0xd4, 0x5b, 0xce, + 0x81, 0x0d, 0xd5, 0x63, 0xce, 0x81, 0x04, 0xd6, 0x73, 0xce, 0x41, 0xd6, + 0x83, 0xce, 0x41, 0xd5, 0x6b, 0xce, 0x81, 0x04, 0xd6, 0x7b, 0xce, 0x41, + 0xd6, 0x8b, 0xce, 0x41, 0xd4, 0x5f, 0xce, 0x81, 0x0d, 0xd5, 0x67, 0xce, + 0x81, 0x04, 0xd6, 0x77, 0xce, 0x41, 0xd6, 0x87, 0xce, 0x41, 0xd5, 0x6f, + 0xce, 0x81, 0x04, 0xd6, 0x7f, 0xce, 0x41, 0xd6, 0x8f, 0xce, 0x41, 0xd1, + 0x21, 0xcc, 0x81, 0x1f, 0xd2, 0x22, 0xcc, 0x81, 0x0d, 0xd3, 0x24, 0xcc, + 0x81, 0x04, 0xd4, 0x28, 0xcc, 0x41, 0xd4, 0x2c, 0xcc, 0x41, 0xd3, 0x26, + 0xcc, 0x81, 0x04, 0xd4, 0x2a, 0xcc, 0x41, 0xd4, 0x2e, 0xcc, 0x41, 0xd2, + 0x23, 0xcc, 0x81, 0x0d, 0xd3, 0x25, 0xcc, 0x81, 0x04, 0xd4, 0x29, 0xcc, + 0x41, 0xd4, 0x2d, 0xcc, 0x41, 0xd3, 0x27, 0xcc, 0x81, 0x04, 0xd4, 0x2b, + 0xcc, 0x41, 0xd4, 0x2f, 0xcc, 0x41, 0x45, 0x94, 0x3b, 0x3b, 0x00, 0x00, + 0x61, 0x87, 0x0d, 0x32, 0x2a, 0x00, 0x47, 0xbc, 0xd5, 0xba, 0x26, 0x40, + 0x09, 0x10, 0xb8, 0x01, 0xff, 0x45, 0x12, 0x0b, 0xf8, 0xfb, 0x01, 0xa6, + 0x2e, 0x44, 0xcf, 0x2a, 0xf9, 0xfb, 0x01, 0x43, 0x0e, 0x0b, 0xf1, 0xfb, + 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xf0, 0xfb, 0x41, 0x44, + 0x25, 0x01, 0xf3, 0xfb, 0x01, 0x42, 0x15, 0x02, 0xf2, 0xfb, 0x41, 0x44, + 0xc9, 0x1d, 0xf7, 0xfb, 0x01, 0x42, 0x01, 0x26, 0xf6, 0xfb, 0x41, 0x43, + 0xd2, 0x05, 0xf5, 0xfb, 0x01, 0x43, 0xf6, 0x06, 0xf4, 0xfb, 0x41, 0x4f, + 0x32, 0x6a, 0x48, 0xf6, 0x01, 0x45, 0x9c, 0xe5, 0x31, 0xf3, 0x41, 0x4f, + 0x3a, 0x71, 0x48, 0xf9, 0x01, 0xb4, 0x01, 0xff, 0x48, 0xc1, 0x04, 0xa7, + 0x00, 0x00, 0x42, 0x0c, 0x00, 0x14, 0x23, 0x40, 0xec, 0xad, 0xf9, 0x01, + 0xf4, 0xba, 0xf4, 0x41, 0xa1, 0x8a, 0x01, 0x44, 0x34, 0xe5, 0xeb, 0xf3, + 0x81, 0x7d, 0xaf, 0x64, 0xb2, 0x01, 0xff, 0xa5, 0x53, 0x04, 0x77, 0x06, + 0x0c, 0x43, 0xe6, 0x20, 0xdc, 0xf4, 0x01, 0x44, 0x42, 0x4c, 0x08, 0x21, + 0x40, 0x08, 0xe4, 0x05, 0x1b, 0x54, 0x9c, 0x1f, 0x70, 0xf6, 0x01, 0x06, + 0x5d, 0x07, 0x01, 0xff, 0xe5, 0x2f, 0x21, 0x00, 0xe7, 0x0a, 0x21, 0x00, + 0xec, 0x13, 0x21, 0x00, 0xef, 0x34, 0x21, 0x40, 0xe2, 0x2c, 0x21, 0x00, + 0xe5, 0x30, 0x21, 0x00, 0xe6, 0x31, 0x21, 0x00, 0xe8, 0x0b, 0x21, 0x00, + 0xe9, 0x10, 0x21, 0x00, 0xec, 0x12, 0x21, 0x00, 0xed, 0x33, 0x21, 0x00, + 0xf0, 0x18, 0x21, 0x00, 0xf2, 0x1b, 0x21, 0x40, 0x42, 0x92, 0x01, 0xb5, + 0xf5, 0x01, 0x47, 0x75, 0xd7, 0x9b, 0xfa, 0x41, 0x44, 0xb8, 0xd5, 0xf4, + 0xf6, 0x01, 0x03, 0x6f, 0x48, 0x01, 0xff, 0x42, 0x10, 0x00, 0x82, 0xf9, + 0x01, 0x42, 0xef, 0x02, 0x4f, 0x26, 0x40, 0x48, 0x80, 0xc2, 0x92, 0xf3, + 0x41, 0x43, 0xec, 0x00, 0x96, 0x26, 0x00, 0x42, 0xf5, 0x1b, 0xe3, 0xf9, + 0x41, 0x05, 0xb6, 0x75, 0x88, 0x08, 0x49, 0x30, 0xb9, 0x50, 0x26, 0x00, + 0x46, 0xd4, 0xdc, 0xf5, 0x26, 0x00, 0x51, 0x61, 0x5b, 0x76, 0xf3, 0x01, + 0xac, 0xdf, 0x07, 0x08, 0xba, 0x6a, 0xd6, 0x04, 0xae, 0xa8, 0x04, 0x42, + 0x0d, 0x00, 0x7b, 0xf9, 0x01, 0xb4, 0x8c, 0x04, 0xb5, 0x06, 0x47, 0xad, + 0xd7, 0xb7, 0xf3, 0x41, 0x4d, 0xdb, 0x81, 0xc1, 0x20, 0x00, 0xb2, 0x01, + 0xff, 0x07, 0x17, 0xcf, 0x06, 0x44, 0xdd, 0xf1, 0x95, 0xf9, 0x41, 0x54, + 0x2c, 0x41, 0xb4, 0xa8, 0x00, 0xa4, 0x96, 0x03, 0x07, 0xec, 0x05, 0x6f, + 0x05, 0x5a, 0x03, 0x4e, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x3b, 0xe5, + 0xbe, 0xa8, 0x80, 0x32, 0xe9, 0xb6, 0xa8, 0x80, 0x29, 0xef, 0xc1, 0xa8, + 0x80, 0x20, 0xf5, 0xb8, 0xa8, 0x80, 0x17, 0x08, 0x22, 0xc1, 0x01, 0xff, + 0xec, 0xbc, 0xa8, 0x80, 0x09, 0xf2, 0xba, 0xa8, 0xc0, 0x00, 0xf2, 0xbb, + 0xa8, 0x40, 0xec, 0xbd, 0xa8, 0x40, 0xf5, 0xb9, 0xa8, 0x40, 0xef, 0xc2, + 0xa8, 0x40, 0xe9, 0xb7, 0xa8, 0x40, 0xe5, 0xbf, 0xa8, 0x40, 0xe1, 0xb5, + 0xa8, 0x00, 0xe9, 0xc0, 0xa8, 0x00, 0xf5, 0xc3, 0xa8, 0x40, 0x48, 0x3c, + 0x16, 0x80, 0xa8, 0x00, 0x4b, 0xd7, 0x23, 0xc5, 0xa8, 0x00, 0x02, 0x02, + 0x00, 0x01, 0xff, 0x44, 0xe5, 0x23, 0xc4, 0xa8, 0x00, 0x45, 0xec, 0x4b, + 0x81, 0xa8, 0x40, 0xe1, 0x82, 0xa8, 0x80, 0x91, 0x02, 0xa2, 0x84, 0x02, + 0xa3, 0xf7, 0x01, 0xa4, 0xde, 0x01, 0xe5, 0x8c, 0xa8, 0x80, 0xd4, 0x01, + 0xa7, 0xc7, 0x01, 0x42, 0x22, 0x00, 0xb2, 0xa8, 0x00, 0xe9, 0x84, 0xa8, + 0x80, 0xb7, 0x01, 0xaa, 0xaa, 0x01, 0xab, 0x9d, 0x01, 0xac, 0x90, 0x01, + 0x42, 0x6c, 0x00, 0xaa, 0xa8, 0x00, 0xae, 0x72, 0xef, 0x8f, 0xa8, 0x80, + 0x69, 0xb0, 0x5d, 0x42, 0x71, 0x00, 0xac, 0xa8, 0x00, 0xb3, 0x45, 0xb4, + 0x2c, 0xf5, 0x86, 0xa8, 0x80, 0x23, 0xb6, 0x06, 0x42, 0xbc, 0x22, 0xab, + 0xa8, 0x40, 0xe1, 0xae, 0xa8, 0x00, 0x07, 0x23, 0xc1, 0x01, 0xff, 0xec, + 0x8a, 0xa8, 0x80, 0x09, 0xf2, 0x88, 0xa8, 0xc0, 0x00, 0xf2, 0x89, 0xa8, + 0x40, 0xec, 0x8b, 0xa8, 0x40, 0xf5, 0x87, 0xa8, 0x40, 0xe1, 0xa1, 0xa8, + 0x00, 0x42, 0x22, 0x00, 0xa2, 0xa8, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x9c, + 0xa8, 0x00, 0x42, 0x22, 0x00, 0x9d, 0xa8, 0x40, 0xe1, 0xb1, 0xa8, 0x00, + 0x42, 0x22, 0x00, 0xaf, 0xa8, 0x00, 0x42, 0x40, 0x06, 0xb0, 0xa8, 0x40, + 0xe1, 0xa6, 0xa8, 0x00, 0x42, 0x22, 0x00, 0xa7, 0xa8, 0x40, 0xef, 0x90, + 0xa8, 0x40, 0xe1, 0xa5, 0xa8, 0x00, 0x42, 0x24, 0x02, 0x96, 0xa8, 0x00, + 0x42, 0x2a, 0x05, 0xa0, 0xa8, 0x00, 0x42, 0xbc, 0x22, 0x9b, 0xa8, 0x40, + 0xe1, 0xad, 0xa8, 0x00, 0x42, 0x74, 0x00, 0xb3, 0xa8, 0x40, 0xe1, 0x92, + 0xa8, 0x00, 0x42, 0x22, 0x00, 0x93, 0xa8, 0x40, 0xe1, 0x99, 0xa8, 0x00, + 0x42, 0x22, 0x00, 0x9a, 0xa8, 0x40, 0xe9, 0x85, 0xa8, 0x40, 0xe1, 0x94, + 0xa8, 0x00, 0x42, 0x22, 0x00, 0x95, 0xa8, 0x40, 0xe5, 0x8d, 0xa8, 0x40, + 0xe1, 0xa3, 0xa8, 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa4, 0xa8, 0x40, + 0xe1, 0x9e, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x9f, 0xa8, 0x40, 0xe1, 0x97, + 0xa8, 0x00, 0x42, 0x22, 0x00, 0x98, 0xa8, 0x40, 0xe1, 0xa8, 0xa8, 0x00, + 0x42, 0x22, 0x00, 0xa9, 0xa8, 0x40, 0xe1, 0x83, 0xa8, 0x00, 0xe9, 0x8e, + 0xa8, 0x00, 0xf5, 0x91, 0xa8, 0x40, 0x44, 0x73, 0x20, 0xce, 0xa8, 0x00, + 0x05, 0xf0, 0x06, 0x06, 0x4b, 0x09, 0xa1, 0xcf, 0xa8, 0x40, 0x45, 0x12, + 0x0b, 0xd8, 0xa8, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xd9, 0xa8, 0x00, + 0x43, 0x0e, 0x0b, 0xd1, 0xa8, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, + 0x1e, 0xd0, 0xa8, 0x40, 0x44, 0x25, 0x01, 0xd3, 0xa8, 0x00, 0x42, 0x15, + 0x02, 0xd2, 0xa8, 0x40, 0x44, 0xc9, 0x1d, 0xd7, 0xa8, 0x00, 0x42, 0x01, + 0x26, 0xd6, 0xa8, 0x40, 0x43, 0xd2, 0x05, 0xd5, 0xa8, 0x00, 0x43, 0xf6, + 0x06, 0xd4, 0xa8, 0x40, 0x46, 0x36, 0xdb, 0xf0, 0xf6, 0x81, 0x06, 0x43, + 0x5d, 0x01, 0x44, 0x26, 0x40, 0x48, 0xe8, 0xc1, 0xe1, 0xf4, 0x41, 0x45, + 0xab, 0xe5, 0x6a, 0xf9, 0x01, 0x08, 0x17, 0x16, 0x01, 0xff, 0x06, 0x6d, + 0x15, 0x06, 0x54, 0x1f, 0x16, 0x7a, 0xf6, 0x41, 0x07, 0x3b, 0x01, 0x06, + 0x68, 0x08, 0x05, 0x78, 0xf6, 0x41, 0x5d, 0x13, 0x05, 0x77, 0xf6, 0x01, + 0x64, 0x27, 0x0a, 0x76, 0xf6, 0x41, 0x51, 0x0b, 0x50, 0x36, 0x08, 0x00, + 0x07, 0xec, 0x05, 0xf3, 0x01, 0xad, 0xb2, 0x01, 0x0c, 0x6d, 0x16, 0x51, + 0x0b, 0x40, 0x77, 0x01, 0xff, 0xe1, 0x23, 0x08, 0x80, 0x43, 0xe5, 0x1d, + 0x08, 0x00, 0xe9, 0x2a, 0x08, 0x00, 0x05, 0xd7, 0x02, 0x22, 0xef, 0x2b, + 0x08, 0x80, 0x12, 0xb3, 0x04, 0xf5, 0x27, 0x08, 0x40, 0x46, 0xd2, 0xd5, + 0x25, 0x08, 0x00, 0x44, 0x24, 0xeb, 0x2c, 0x08, 0x40, 0x49, 0xec, 0xc0, + 0x21, 0x08, 0xc0, 0x00, 0xe1, 0x1e, 0x08, 0x40, 0xe1, 0x22, 0x08, 0x80, + 0x0c, 0xe5, 0x1c, 0x08, 0x00, 0xe9, 0x29, 0x08, 0x00, 0xf5, 0x26, 0x08, + 0x40, 0xe1, 0x1f, 0x08, 0x40, 0xe1, 0x20, 0x08, 0x40, 0xa1, 0x3b, 0x43, + 0x79, 0xb2, 0x33, 0x08, 0x00, 0x4d, 0xd1, 0x85, 0x37, 0x08, 0x00, 0x47, + 0x77, 0xd3, 0x30, 0x08, 0x00, 0x45, 0xd9, 0x85, 0x39, 0x08, 0x00, 0xb3, + 0x15, 0x44, 0xc5, 0xf2, 0x3b, 0x08, 0x00, 0xba, 0x01, 0xff, 0x43, 0xe6, + 0xf3, 0x3a, 0x08, 0x00, 0x44, 0xa5, 0xf0, 0x38, 0x08, 0x40, 0x49, 0xae, + 0xb9, 0x35, 0x08, 0x00, 0x4b, 0x85, 0xa0, 0x3d, 0x08, 0x40, 0x45, 0x7d, + 0xe6, 0x31, 0x08, 0x00, 0xae, 0x0c, 0x46, 0x9e, 0xdf, 0x3c, 0x08, 0x00, + 0x45, 0x55, 0xeb, 0x34, 0x08, 0x40, 0x43, 0x55, 0x12, 0x32, 0x08, 0x00, + 0x44, 0x55, 0xf1, 0x3e, 0x08, 0x40, 0x04, 0xba, 0x00, 0x15, 0x0f, 0x79, + 0x0c, 0x01, 0xff, 0x4e, 0x67, 0x77, 0x1a, 0x08, 0x00, 0xe9, 0x28, 0x08, + 0x00, 0x47, 0xd1, 0xd5, 0x24, 0x08, 0x40, 0x46, 0xe5, 0x6b, 0x19, 0x08, + 0x00, 0x4e, 0x67, 0x77, 0x1b, 0x08, 0x00, 0x42, 0x9e, 0x01, 0x16, 0x08, + 0x80, 0x0c, 0x47, 0x77, 0xd3, 0x2d, 0x08, 0x00, 0x49, 0xcf, 0xbc, 0x18, + 0x08, 0x40, 0x45, 0xeb, 0xe1, 0x17, 0x08, 0x40, 0x44, 0xec, 0xe1, 0x00, + 0x08, 0x00, 0xa2, 0x72, 0x45, 0x38, 0x54, 0x03, 0x08, 0x00, 0x42, 0xf3, + 0x02, 0x10, 0x08, 0x00, 0x45, 0x91, 0xe6, 0x02, 0x08, 0x00, 0xa9, 0x52, + 0x44, 0xbd, 0xf0, 0x0a, 0x08, 0x00, 0x45, 0x03, 0xe8, 0x0b, 0x08, 0x00, + 0x43, 0xad, 0x90, 0x0c, 0x08, 0x00, 0x43, 0xdc, 0x22, 0x0d, 0x08, 0x00, + 0x43, 0x97, 0xf4, 0x12, 0x08, 0x00, 0x44, 0x3f, 0x54, 0x13, 0x08, 0x00, + 0xb3, 0x20, 0xb4, 0x0c, 0x43, 0x72, 0x77, 0x09, 0x08, 0x00, 0x43, 0x4b, + 0x0a, 0x06, 0x08, 0x40, 0x43, 0x1a, 0xc3, 0x15, 0x08, 0x00, 0x42, 0x52, + 0x00, 0x08, 0x08, 0x00, 0x46, 0xce, 0xdf, 0x11, 0x08, 0x40, 0x43, 0x90, + 0x00, 0x14, 0x08, 0x00, 0x46, 0xf2, 0xdc, 0x0e, 0x08, 0x40, 0xee, 0x0f, + 0x08, 0x00, 0xf4, 0x07, 0x08, 0x00, 0xf9, 0x04, 0x08, 0x40, 0x42, 0x80, + 0x12, 0x05, 0x08, 0x00, 0x42, 0x52, 0x00, 0x01, 0x08, 0x40, 0xb4, 0x06, + 0x4a, 0xc5, 0x93, 0xe1, 0xfa, 0x41, 0x47, 0x88, 0xcd, 0xc2, 0xf9, 0x01, + 0x43, 0x88, 0x0d, 0x13, 0x26, 0x40, 0x43, 0x28, 0x13, 0xf7, 0xf9, 0x01, + 0x44, 0x6c, 0x5e, 0xba, 0xf9, 0x41, 0xa1, 0x81, 0x21, 0xa5, 0xe4, 0x1a, + 0x49, 0xa5, 0xb9, 0x8f, 0xf9, 0x01, 0xa9, 0xd4, 0x0a, 0xaf, 0x81, 0x07, + 0xb5, 0x01, 0xff, 0x48, 0x28, 0xc4, 0xbd, 0x20, 0x00, 0x4c, 0x37, 0x8f, + 0xc9, 0xf3, 0x01, 0x4a, 0x95, 0xac, 0xf4, 0x29, 0x00, 0x03, 0xb6, 0xd1, + 0xf3, 0x04, 0xae, 0x2f, 0x48, 0x67, 0x80, 0xa8, 0x20, 0x00, 0x1a, 0x20, + 0x22, 0x01, 0xff, 0x48, 0x20, 0xc4, 0xf6, 0x2b, 0x00, 0x46, 0x22, 0xc4, + 0xf4, 0x2b, 0x00, 0x48, 0x10, 0xca, 0xf5, 0x2b, 0x00, 0x48, 0xc0, 0xca, + 0xf7, 0x2b, 0x00, 0x49, 0xf9, 0xbf, 0xf8, 0x2b, 0x00, 0x49, 0x07, 0xc1, + 0xf3, 0x2b, 0x40, 0x03, 0x52, 0x03, 0x0f, 0xae, 0x01, 0xff, 0x42, 0x33, + 0x00, 0xc3, 0xf3, 0x01, 0x53, 0x62, 0x4a, 0xbd, 0xf3, 0x41, 0x4d, 0xbd, + 0x80, 0xee, 0x16, 0x00, 0x4f, 0x22, 0x6b, 0xf0, 0x16, 0x00, 0x51, 0x85, + 0x59, 0xed, 0x16, 0x00, 0x07, 0xec, 0x05, 0x12, 0x54, 0x60, 0x44, 0xec, + 0x16, 0x00, 0x52, 0x63, 0x55, 0xeb, 0x16, 0x00, 0x4f, 0xfb, 0x73, 0xef, + 0x16, 0x40, 0xa1, 0xec, 0x03, 0x58, 0x4e, 0x27, 0xd2, 0x16, 0x00, 0xe3, + 0xcd, 0x16, 0x80, 0xc8, 0x03, 0xe4, 0xd1, 0x16, 0x80, 0xab, 0x03, 0xe5, + 0xc2, 0x16, 0x80, 0x8d, 0x03, 0xa6, 0xe1, 0x02, 0xe7, 0xb5, 0x16, 0x80, + 0xc8, 0x02, 0x02, 0x22, 0x00, 0xb7, 0x02, 0xa9, 0x8f, 0x02, 0x47, 0x3c, + 0xd2, 0xc3, 0x16, 0x00, 0xeb, 0xf1, 0x16, 0x80, 0xf4, 0x01, 0xac, 0xc8, + 0x01, 0x4c, 0xcb, 0x91, 0xd7, 0x16, 0x00, 0x51, 0x71, 0x5c, 0xbe, 0x16, + 0x00, 0xef, 0xae, 0x16, 0x80, 0x98, 0x01, 0x4f, 0xd0, 0x71, 0xc8, 0x16, + 0x00, 0xf1, 0xe9, 0x16, 0x00, 0x50, 0x36, 0x66, 0xb1, 0x16, 0x00, 0xb3, + 0x34, 0xb4, 0x26, 0x49, 0xad, 0xc0, 0xa2, 0x16, 0x00, 0xf6, 0xa1, 0x16, + 0x00, 0xf7, 0xa5, 0x16, 0x80, 0x11, 0xf8, 0xea, 0x16, 0x00, 0xf9, 0xa4, + 0x16, 0x80, 0x04, 0xfa, 0xce, 0x16, 0x40, 0xf2, 0xa3, 0x16, 0x40, 0x4b, + 0x63, 0xa4, 0xb9, 0x16, 0x40, 0x53, 0x03, 0x4a, 0xa6, 0x16, 0x00, 0x4e, + 0x19, 0x79, 0xcf, 0x16, 0x40, 0xe8, 0xf2, 0x16, 0x80, 0x12, 0x56, 0x71, + 0x34, 0xcb, 0x16, 0x00, 0x47, 0x57, 0xd4, 0xca, 0x16, 0x00, 0x43, 0xf9, + 0x0a, 0xe5, 0x16, 0x40, 0x09, 0x71, 0xbd, 0x01, 0xff, 0x44, 0x17, 0x00, + 0xc6, 0x16, 0x00, 0x49, 0x5d, 0x27, 0xd3, 0x16, 0x00, 0x48, 0x88, 0xc6, + 0xbd, 0x16, 0x00, 0x46, 0xee, 0xdd, 0xd9, 0x16, 0x00, 0x46, 0x7c, 0x5c, + 0xbf, 0x16, 0x00, 0x45, 0xd6, 0x7b, 0xad, 0x16, 0x00, 0x45, 0x82, 0x34, + 0xcc, 0x16, 0x00, 0x45, 0x22, 0x79, 0xd0, 0x16, 0x00, 0x42, 0x05, 0x22, + 0xe7, 0x16, 0x40, 0xe5, 0xaf, 0x16, 0x00, 0xee, 0xb0, 0x16, 0x00, 0xef, + 0xf3, 0x16, 0x00, 0x45, 0xd9, 0xe9, 0xd5, 0x16, 0x00, 0x43, 0xf2, 0x01, + 0xa9, 0x16, 0x00, 0x4e, 0xd1, 0x7c, 0xdf, 0x16, 0x40, 0x51, 0x75, 0x58, + 0xda, 0x16, 0x00, 0x0b, 0x77, 0x34, 0x01, 0xff, 0x45, 0x5c, 0xe4, 0xc5, + 0x16, 0x00, 0x48, 0x88, 0xc6, 0xbc, 0x16, 0x00, 0x46, 0xee, 0xdd, 0xd8, + 0x16, 0x00, 0x45, 0xd6, 0x7b, 0xac, 0x16, 0x00, 0x42, 0x05, 0x22, 0xe6, + 0x16, 0x40, 0x03, 0xa9, 0x45, 0x01, 0xff, 0x42, 0x44, 0x00, 0xb4, 0x16, + 0x00, 0xe1, 0xb2, 0x16, 0x40, 0x4b, 0x08, 0x9a, 0xe8, 0x16, 0x00, 0x42, + 0x1d, 0x01, 0xdd, 0x16, 0x80, 0x12, 0x42, 0x0c, 0x00, 0xe1, 0x16, 0x00, + 0x4c, 0x07, 0x95, 0xc1, 0x16, 0x00, 0x47, 0x6e, 0xd7, 0xc7, 0x16, 0x40, + 0x43, 0x1a, 0x79, 0xdc, 0x16, 0x40, 0x45, 0xd3, 0xe5, 0xbb, 0x16, 0x00, + 0x46, 0x0e, 0xdc, 0xba, 0x16, 0x40, 0x42, 0x17, 0x00, 0xb8, 0x16, 0x00, + 0xa5, 0x01, 0xff, 0x49, 0xcc, 0xb6, 0xb7, 0x16, 0x00, 0xf2, 0xc4, 0x16, + 0x40, 0x4d, 0x84, 0x82, 0xa0, 0x16, 0x00, 0x0d, 0xbf, 0x87, 0x01, 0xff, + 0xa1, 0x12, 0x42, 0x4e, 0x00, 0xf6, 0x16, 0x00, 0x42, 0x5f, 0x03, 0xf5, + 0x16, 0x00, 0x42, 0xa4, 0x0d, 0xf4, 0x16, 0x40, 0xe3, 0xf7, 0x16, 0x00, + 0x43, 0x7a, 0x1f, 0xf8, 0x16, 0x40, 0x42, 0x17, 0x00, 0xe0, 0x16, 0x00, + 0x49, 0xd2, 0xb9, 0xd6, 0x16, 0x00, 0x42, 0x1d, 0x01, 0xb6, 0x16, 0x00, + 0x42, 0x53, 0x00, 0xa7, 0x16, 0x40, 0x4b, 0xea, 0x98, 0xde, 0x16, 0x00, + 0x06, 0x0f, 0x80, 0x01, 0xff, 0xec, 0xdb, 0x16, 0x00, 0xee, 0xc0, 0x16, + 0x00, 0xf0, 0xd4, 0x16, 0x40, 0x43, 0xbe, 0x6b, 0xe3, 0x16, 0x00, 0xa5, + 0x06, 0x46, 0x36, 0xe1, 0xe2, 0x16, 0x40, 0x43, 0xbe, 0x6b, 0xe4, 0x16, + 0x00, 0xee, 0xb3, 0x16, 0x40, 0x43, 0xc1, 0x1b, 0xaa, 0x16, 0x00, 0x43, + 0x7a, 0x1f, 0xab, 0x16, 0x00, 0x4a, 0xef, 0xac, 0xc9, 0x16, 0x00, 0x46, + 0x84, 0xde, 0xa8, 0x16, 0x40, 0x06, 0xef, 0x06, 0xb2, 0x01, 0x09, 0x1e, + 0x5a, 0x91, 0x01, 0x07, 0xff, 0x39, 0x01, 0xff, 0x05, 0x12, 0x0b, 0x7e, + 0xa6, 0x5f, 0x04, 0xcf, 0x2a, 0x4f, 0x4b, 0x6d, 0x11, 0x72, 0x0e, 0x01, + 0xb3, 0x26, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x69, 0x0e, 0x01, 0xa8, + 0x0f, 0xb7, 0x01, 0xff, 0x44, 0xcb, 0x1d, 0x6a, 0x0e, 0x01, 0x49, 0xbe, + 0x1d, 0x73, 0x0e, 0x41, 0x44, 0x7b, 0x11, 0x6b, 0x0e, 0x01, 0x4b, 0xfb, + 0x17, 0x74, 0x0e, 0x41, 0x04, 0xc9, 0x1d, 0x11, 0x02, 0x01, 0x26, 0x01, + 0xff, 0x48, 0x70, 0x11, 0x77, 0x0e, 0x01, 0x42, 0x7d, 0x11, 0x6e, 0x0e, + 0x41, 0x48, 0x70, 0x11, 0x78, 0x0e, 0x01, 0x42, 0x7d, 0x11, 0x6f, 0x0e, + 0x41, 0x48, 0x70, 0x11, 0x7a, 0x0e, 0x01, 0x42, 0x7d, 0x11, 0x71, 0x0e, + 0x41, 0xa9, 0x0f, 0xaf, 0x01, 0xff, 0x43, 0x7c, 0x11, 0x6c, 0x0e, 0x01, + 0x4a, 0xf3, 0xb2, 0x75, 0x0e, 0x41, 0x43, 0x52, 0x4d, 0x6d, 0x0e, 0x01, + 0x4a, 0x82, 0x39, 0x76, 0x0e, 0x41, 0x48, 0x70, 0x11, 0x79, 0x0e, 0x01, + 0xf9, 0x70, 0x0e, 0x41, 0x04, 0x0e, 0x0b, 0x06, 0x4a, 0x53, 0xb2, 0x7e, + 0x0e, 0x41, 0x44, 0x22, 0x00, 0x7b, 0x0e, 0x01, 0x47, 0x2a, 0x01, 0x7c, + 0x0e, 0x01, 0x45, 0xee, 0x74, 0x7d, 0x0e, 0x41, 0x45, 0x12, 0x0b, 0x67, + 0x0e, 0x01, 0xa6, 0x29, 0x44, 0xcf, 0x2a, 0x68, 0x0e, 0x01, 0x43, 0x0e, + 0x0b, 0x60, 0x0e, 0x01, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, + 0x62, 0x0e, 0x01, 0x42, 0x15, 0x02, 0x61, 0x0e, 0x41, 0x44, 0xc9, 0x1d, + 0x66, 0x0e, 0x01, 0x42, 0x01, 0x26, 0x65, 0x0e, 0x41, 0x43, 0xd2, 0x05, + 0x64, 0x0e, 0x01, 0x43, 0xf6, 0x06, 0x63, 0x0e, 0x41, 0x52, 0x41, 0x50, + 0x60, 0xf3, 0x01, 0x48, 0x48, 0xc4, 0x16, 0xf9, 0x01, 0x42, 0x36, 0x01, + 0xa8, 0xfa, 0x81, 0xb6, 0x03, 0x02, 0x60, 0x07, 0x8c, 0x03, 0x04, 0x41, + 0x18, 0x82, 0x01, 0xaf, 0x74, 0x42, 0x46, 0x03, 0x39, 0xf3, 0x81, 0x67, + 0x06, 0x9f, 0x21, 0x45, 0x03, 0x42, 0x0b, 0x06, 0x45, 0x45, 0xec, 0xa3, + 0xf6, 0x41, 0x80, 0x2d, 0x0e, 0x2f, 0x77, 0x01, 0xff, 0x43, 0x07, 0xf4, + 0x65, 0xf2, 0x01, 0x42, 0x81, 0x16, 0x60, 0xf2, 0x01, 0x42, 0xc7, 0x15, + 0x61, 0xf2, 0x01, 0x02, 0xa4, 0x02, 0x06, 0x42, 0xe2, 0x0c, 0x63, 0xf2, + 0x41, 0x42, 0x3c, 0x01, 0x62, 0xf2, 0x01, 0x46, 0xd0, 0xe0, 0x64, 0xf2, + 0x41, 0x47, 0xf8, 0xd4, 0xcd, 0xf4, 0x01, 0x46, 0x64, 0xe0, 0x8b, 0xf7, + 0x41, 0x49, 0x14, 0xb7, 0x3a, 0x21, 0x00, 0x53, 0xa5, 0x21, 0x67, 0x27, + 0x00, 0x58, 0xfe, 0x28, 0x65, 0x27, 0x00, 0x5d, 0xf9, 0x15, 0xcd, 0x2b, + 0x00, 0x57, 0xf0, 0x31, 0xcf, 0x2b, 0x40, 0x43, 0xee, 0x05, 0xf5, 0xf3, + 0x41, 0x44, 0x3d, 0x0d, 0x13, 0xf4, 0x01, 0x4b, 0x19, 0xa3, 0xdc, 0xfa, + 0x41, 0x47, 0x10, 0xcf, 0x9a, 0x01, 0x01, 0x4e, 0x4f, 0x76, 0x9b, 0x01, + 0x01, 0xa4, 0xe4, 0x01, 0x08, 0x20, 0x5d, 0x33, 0x4e, 0x65, 0x7b, 0x97, + 0x01, 0x01, 0xb3, 0x06, 0x4a, 0xc0, 0x9f, 0x91, 0x01, 0x41, 0xa5, 0x06, + 0x4b, 0x62, 0x9d, 0x95, 0x01, 0x41, 0x4b, 0xbf, 0x9f, 0x92, 0x01, 0x01, + 0x4d, 0x04, 0x89, 0x98, 0x01, 0x01, 0x02, 0xda, 0x06, 0x01, 0xff, 0x48, + 0x60, 0xc3, 0x90, 0x01, 0x01, 0x48, 0x47, 0x4a, 0x93, 0x01, 0x41, 0xa5, + 0x9e, 0x01, 0xa6, 0x68, 0x44, 0xcf, 0x2a, 0x68, 0x21, 0x00, 0x43, 0x0e, + 0x0b, 0x60, 0x21, 0x80, 0x3e, 0x54, 0x3c, 0x45, 0x83, 0x21, 0x00, 0xb3, + 0x23, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x69, 0x21, 0x80, 0x13, 0x44, + 0x25, 0x01, 0x62, 0x21, 0x00, 0xb7, 0x01, 0xff, 0x44, 0xe7, 0x2b, 0x6b, + 0x21, 0x00, 0xef, 0x61, 0x21, 0x40, 0x49, 0x3f, 0x5e, 0x82, 0x21, 0x40, + 0x44, 0xc9, 0x1d, 0x66, 0x21, 0x00, 0x42, 0x01, 0x26, 0x65, 0x21, 0xc0, + 0x00, 0x4a, 0xdd, 0xa5, 0x85, 0x21, 0x40, 0x80, 0x01, 0xff, 0x47, 0x71, + 0x11, 0x6d, 0x21, 0x80, 0x0d, 0x48, 0x40, 0x5e, 0x6f, 0x21, 0xc0, 0x00, + 0x44, 0xbd, 0xec, 0x80, 0x21, 0x40, 0x49, 0x3f, 0x5e, 0x88, 0x21, 0x40, + 0xa9, 0x06, 0x43, 0xf6, 0x06, 0x63, 0x21, 0x40, 0x43, 0x52, 0x4d, 0x6c, + 0x21, 0x80, 0x16, 0x42, 0x32, 0x00, 0x64, 0x21, 0xc0, 0x00, 0x80, 0x01, + 0xff, 0x47, 0x71, 0x11, 0x6e, 0x21, 0x00, 0x48, 0x40, 0x5e, 0x81, 0x21, + 0x40, 0x80, 0x01, 0xff, 0x4a, 0x7f, 0xa9, 0x86, 0x21, 0x00, 0x48, 0x40, + 0x5e, 0x87, 0x21, 0x40, 0x44, 0xc9, 0x00, 0x67, 0x21, 0x00, 0x45, 0xb4, + 0x6f, 0x6a, 0x21, 0x40, 0x4c, 0x8f, 0x8e, 0x96, 0x01, 0x01, 0x53, 0x3c, + 0x4a, 0x94, 0x01, 0x01, 0x4d, 0xa0, 0x89, 0x99, 0x01, 0x41, 0x49, 0x71, + 0xb4, 0xfb, 0xf9, 0x01, 0xa5, 0x06, 0x59, 0x4d, 0x24, 0x23, 0xf9, 0x41, + 0x4e, 0xa3, 0x76, 0xde, 0xf5, 0x01, 0x02, 0x18, 0x00, 0x01, 0xff, 0x47, + 0xbb, 0x64, 0xa2, 0xf3, 0x01, 0x45, 0x00, 0xeb, 0xfc, 0xf6, 0x41, 0x42, + 0xed, 0x05, 0x80, 0xf6, 0x41, 0x47, 0x36, 0x4c, 0xfc, 0xfd, 0x00, 0x44, + 0x01, 0x86, 0x80, 0xf3, 0x81, 0xb3, 0x0f, 0x03, 0x0e, 0x08, 0xa2, 0x0f, + 0x43, 0xd5, 0x04, 0x46, 0xf9, 0x01, 0x03, 0xca, 0x00, 0x4a, 0x42, 0x1d, + 0x01, 0x8d, 0xf4, 0x81, 0x11, 0x17, 0x38, 0x31, 0x01, 0xff, 0x50, 0x26, + 0x63, 0x2b, 0x29, 0x00, 0x50, 0x7c, 0x40, 0x30, 0x29, 0x40, 0x80, 0x0c, + 0x49, 0x19, 0xb8, 0x90, 0xfa, 0x01, 0x48, 0x10, 0xc7, 0x6d, 0xf5, 0x41, + 0x45, 0x5c, 0x00, 0xda, 0x02, 0x00, 0x44, 0x51, 0xef, 0xdf, 0xf6, 0x01, + 0x48, 0xf8, 0x0c, 0x57, 0x22, 0x00, 0x4b, 0x78, 0x9d, 0x56, 0x22, 0x00, + 0x48, 0x7e, 0x1d, 0x18, 0x22, 0x00, 0x45, 0x9c, 0x01, 0x30, 0x2e, 0x40, + 0x80, 0xc6, 0x08, 0x8d, 0xe3, 0x06, 0x55, 0x99, 0x3b, 0x3d, 0x2a, 0x00, + 0x06, 0xa9, 0x01, 0x01, 0xff, 0x45, 0xce, 0x00, 0x92, 0x21, 0x80, 0xba, + 0x04, 0xa2, 0x9b, 0x04, 0x50, 0x86, 0x61, 0x3e, 0xf8, 0x01, 0xa4, 0xdb, + 0x03, 0xa6, 0xcc, 0x03, 0xa8, 0xcb, 0x02, 0x57, 0x6c, 0x2f, 0xa7, 0xf8, + 0x01, 0x51, 0xf9, 0x5c, 0xfe, 0x21, 0x00, 0xb0, 0xb0, 0x02, 0x4f, 0x0c, + 0x72, 0x46, 0x2b, 0x00, 0xb2, 0x9b, 0x02, 0xb3, 0x81, 0x02, 0xb4, 0x1f, + 0xb7, 0x01, 0xff, 0x49, 0x72, 0xb6, 0x9d, 0x21, 0x00, 0x4a, 0x4a, 0x10, + 0xe8, 0x21, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x49, 0x1e, 0xb9, 0xf0, 0x21, + 0x00, 0x59, 0xc7, 0x1e, 0x96, 0xf8, 0x41, 0x55, 0x52, 0x3d, 0xa3, 0xf8, + 0x01, 0x02, 0x0d, 0x00, 0x51, 0x02, 0x15, 0x02, 0x01, 0xff, 0x4d, 0x85, + 0x7f, 0xa0, 0x21, 0x00, 0x08, 0x09, 0x02, 0x01, 0xff, 0x06, 0xce, 0x00, + 0x06, 0x51, 0x91, 0x5e, 0x10, 0x29, 0x40, 0x48, 0x57, 0xb4, 0x05, 0x29, + 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x56, 0x95, 0x33, 0x01, 0x29, 0x00, + 0xb4, 0x06, 0x4f, 0x9c, 0x33, 0x00, 0x29, 0x40, 0x43, 0x90, 0x17, 0x16, + 0x29, 0x80, 0x06, 0x52, 0x2f, 0x06, 0xee, 0x2b, 0x40, 0x06, 0x50, 0x00, + 0x01, 0xff, 0x56, 0x95, 0x33, 0x18, 0x29, 0x00, 0x4f, 0x9c, 0x33, 0x17, + 0x29, 0x40, 0x05, 0x04, 0x02, 0x11, 0x04, 0x6d, 0x1d, 0x01, 0xff, 0x45, + 0xce, 0x00, 0xdb, 0x21, 0x00, 0x4a, 0x98, 0x5e, 0x0f, 0x29, 0x40, 0x4a, + 0xe0, 0x01, 0x92, 0xf8, 0x01, 0x08, 0x09, 0x02, 0x01, 0xff, 0x45, 0xce, + 0x00, 0x62, 0x2b, 0x80, 0x0c, 0x4c, 0xc3, 0x8d, 0x6c, 0x2b, 0x00, 0x4d, + 0x64, 0x87, 0x86, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x64, 0x97, 0x09, 0x82, + 0x2b, 0x00, 0x46, 0xd1, 0x14, 0x72, 0x2b, 0x00, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x4a, 0x53, 0xa8, 0x2a, 0xf8, 0x01, 0x07, 0x3b, 0x01, 0x28, 0x4b, + 0x6b, 0x68, 0x2e, 0xf8, 0x01, 0x09, 0xaf, 0xbb, 0x12, 0x4c, 0xef, 0x91, + 0x26, 0xf8, 0x01, 0x4c, 0x5b, 0x92, 0x22, 0xf8, 0x01, 0x50, 0x66, 0x68, + 0x32, 0xf8, 0x41, 0x49, 0xa5, 0x01, 0xa7, 0x2b, 0x00, 0x47, 0x50, 0x02, + 0xa5, 0x2b, 0x40, 0x51, 0x47, 0x05, 0x7c, 0x2b, 0x00, 0x4f, 0x9c, 0x33, + 0x7c, 0x2b, 0x40, 0x4f, 0xe7, 0x66, 0x52, 0xf8, 0x01, 0x02, 0x7c, 0x00, + 0x01, 0xff, 0x4a, 0xe9, 0x93, 0x3a, 0xf8, 0x01, 0x4b, 0x80, 0x7c, 0xdd, + 0x21, 0x40, 0x57, 0x10, 0x2f, 0xa5, 0xf8, 0x01, 0x45, 0x9d, 0xae, 0x6e, + 0xf6, 0x41, 0x4c, 0x65, 0x87, 0xc9, 0x21, 0x00, 0x4b, 0x84, 0xa4, 0xf8, + 0xfa, 0x41, 0xa1, 0x11, 0x05, 0x6e, 0x15, 0x01, 0xff, 0x45, 0xce, 0x00, + 0x46, 0xf8, 0x01, 0x50, 0x86, 0x61, 0x42, 0xf8, 0x41, 0x42, 0x1b, 0x00, + 0xf1, 0xfa, 0x01, 0x06, 0xcb, 0x02, 0x01, 0xff, 0x56, 0xe7, 0x35, 0xcc, + 0x21, 0x00, 0x0a, 0x98, 0x05, 0x01, 0xff, 0x04, 0xa5, 0x01, 0x31, 0x02, + 0x50, 0x02, 0x01, 0xff, 0x80, 0x06, 0x45, 0xa9, 0x01, 0xc0, 0x21, 0x40, + 0x06, 0x5c, 0x00, 0x0c, 0x48, 0x57, 0xb4, 0x5b, 0x29, 0x00, 0x46, 0xd1, + 0x14, 0x53, 0x29, 0x40, 0xac, 0x06, 0x61, 0x85, 0x05, 0x64, 0x29, 0x40, + 0x5d, 0xa2, 0x15, 0x68, 0x29, 0x00, 0x48, 0x38, 0x6b, 0x6c, 0x29, 0x40, + 0x80, 0x06, 0x45, 0xa9, 0x01, 0xc1, 0x21, 0x40, 0x66, 0x41, 0x06, 0x69, + 0x29, 0x00, 0x4f, 0x31, 0x6b, 0x6d, 0x29, 0x00, 0x48, 0x57, 0xb4, 0x5f, + 0x29, 0x00, 0x46, 0xd1, 0x14, 0x57, 0x29, 0x40, 0x50, 0xfd, 0x59, 0x36, + 0xf8, 0x01, 0x60, 0x34, 0x10, 0xab, 0xf8, 0x41, 0x4b, 0xc4, 0x8d, 0xe2, + 0x21, 0x00, 0x06, 0x3c, 0x01, 0x01, 0xff, 0x45, 0xce, 0x00, 0xd2, 0x21, + 0x80, 0x06, 0x4a, 0x98, 0x5e, 0x0d, 0x29, 0x40, 0x80, 0x06, 0x45, 0x8e, + 0x17, 0x1c, 0x29, 0x40, 0x48, 0x57, 0xb4, 0x07, 0x29, 0x00, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x46, 0x52, 0x05, 0xcf, 0x21, 0x00, 0x4f, 0x9c, 0x33, + 0x03, 0x29, 0x40, 0x5f, 0xb3, 0x10, 0xa9, 0xf8, 0x01, 0x05, 0x0d, 0x03, + 0x06, 0x58, 0x66, 0x2a, 0xa1, 0xf8, 0x41, 0x45, 0xce, 0x00, 0x95, 0x2b, + 0x00, 0x53, 0xd3, 0x48, 0x8a, 0x2b, 0x40, 0x80, 0x06, 0x45, 0x8e, 0x17, + 0x1a, 0x29, 0x40, 0xa1, 0xdf, 0x01, 0x05, 0xaa, 0x05, 0xc7, 0x01, 0x54, + 0xd8, 0x44, 0xc4, 0x21, 0x00, 0xb4, 0x99, 0x01, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x50, 0xa6, 0x61, 0xb4, 0x21, 0x00, 0x02, 0x3b, 0x01, 0x7e, 0x55, + 0xd5, 0x01, 0x16, 0xf8, 0x01, 0x44, 0xac, 0x0e, 0xaa, 0x21, 0x00, 0xac, + 0x5b, 0x59, 0xe3, 0x24, 0x06, 0xf8, 0x01, 0x4c, 0xd3, 0x92, 0x9a, 0xf8, + 0x01, 0x4a, 0x83, 0xaf, 0x45, 0x29, 0x00, 0xb3, 0x31, 0xb4, 0x06, 0x4f, + 0x9c, 0x33, 0xf8, 0x21, 0x40, 0x43, 0x90, 0x17, 0xa3, 0x21, 0x80, 0x11, + 0x03, 0x4a, 0x0c, 0x01, 0xff, 0x49, 0xa5, 0x01, 0x0e, 0x2b, 0x00, 0x47, + 0x50, 0x02, 0x0f, 0x2b, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x56, 0x95, + 0x33, 0x15, 0x29, 0x00, 0x4f, 0x9c, 0x33, 0x14, 0x29, 0x40, 0x05, 0x5e, + 0x07, 0x06, 0x45, 0x53, 0x05, 0x9b, 0x21, 0x40, 0x55, 0xd5, 0x01, 0x12, + 0xf8, 0x01, 0x52, 0x2e, 0x06, 0x02, 0xf8, 0x41, 0x57, 0x77, 0x29, 0x0a, + 0xf8, 0x01, 0xaf, 0x01, 0xff, 0x42, 0x1f, 0x00, 0xac, 0x21, 0x00, 0x48, + 0x69, 0xad, 0xb2, 0xf8, 0x41, 0x49, 0x14, 0xc0, 0x11, 0x29, 0x00, 0x54, + 0x97, 0x33, 0xfb, 0x21, 0x40, 0x07, 0x16, 0x2b, 0x11, 0x03, 0xd2, 0x14, + 0x01, 0xff, 0x42, 0x17, 0x00, 0xe5, 0x21, 0x00, 0x4c, 0x59, 0x57, 0x1e, + 0x29, 0x40, 0x4c, 0x87, 0x00, 0x43, 0x2b, 0x00, 0x48, 0x38, 0xcb, 0x44, + 0x2b, 0x00, 0xf8, 0x47, 0x29, 0x40, 0x43, 0x16, 0x00, 0xa6, 0x21, 0x80, + 0x06, 0x4f, 0x34, 0x0c, 0xc1, 0xf8, 0x41, 0x51, 0x54, 0x57, 0x20, 0x29, + 0x40, 0x05, 0x5d, 0x00, 0x06, 0x63, 0xfb, 0x0a, 0xb6, 0xfb, 0x41, 0x4f, + 0xaa, 0x6a, 0x75, 0x29, 0x00, 0x08, 0x66, 0x72, 0x0c, 0x55, 0x24, 0x3e, + 0x42, 0x29, 0x00, 0x4e, 0x78, 0x3e, 0x74, 0x29, 0x40, 0x4f, 0xaa, 0x6a, + 0x48, 0x2b, 0x00, 0x4e, 0x78, 0x3e, 0x4c, 0x2b, 0x40, 0x07, 0x6f, 0x2e, + 0x9c, 0x01, 0x5b, 0x85, 0x1b, 0xe5, 0x26, 0x00, 0x09, 0x9c, 0x01, 0x2b, + 0xb3, 0x1d, 0x08, 0xa8, 0xcb, 0x01, 0xff, 0x49, 0x58, 0xb8, 0x2b, 0x20, + 0x00, 0x47, 0x5f, 0x03, 0x67, 0x20, 0x00, 0x44, 0xb9, 0x00, 0x0f, 0x20, + 0x00, 0x48, 0xb0, 0xc9, 0x2e, 0x20, 0x40, 0x5c, 0xde, 0x17, 0xa9, 0x27, + 0x00, 0x57, 0xf9, 0x2e, 0x38, 0x29, 0x40, 0xa1, 0x59, 0x54, 0x68, 0x41, + 0xfd, 0x29, 0x00, 0xa4, 0x45, 0x4b, 0xaa, 0x9b, 0x7a, 0xcc, 0x01, 0x47, + 0x55, 0xd1, 0x01, 0xcc, 0x01, 0x50, 0xf6, 0x64, 0x0e, 0xf5, 0x01, 0xb2, + 0x0c, 0x4c, 0x73, 0x95, 0x03, 0xcc, 0x01, 0x44, 0x75, 0xc7, 0x9f, 0xcc, + 0x41, 0x49, 0x9a, 0xb5, 0x99, 0xcc, 0x01, 0x44, 0xc5, 0xac, 0x67, 0xcc, + 0x01, 0xaf, 0x01, 0xff, 0x05, 0x66, 0x09, 0x06, 0x50, 0xb6, 0x64, 0xa3, + 0xcc, 0x41, 0x47, 0x9c, 0xcf, 0xa1, 0xcc, 0x01, 0x44, 0x11, 0x21, 0x58, + 0xcc, 0x41, 0x44, 0x9d, 0xf0, 0x0f, 0xcc, 0x01, 0x5a, 0xb8, 0x21, 0xbb, + 0x00, 0x40, 0x4c, 0x3f, 0x0f, 0x2a, 0x23, 0x00, 0x4a, 0x03, 0xb2, 0x62, + 0xcc, 0x41, 0x56, 0xe5, 0x32, 0x8d, 0x05, 0x00, 0x48, 0xf0, 0xc3, 0x49, + 0xcc, 0x01, 0x03, 0x2a, 0x5b, 0x20, 0xb3, 0x01, 0xff, 0x0f, 0x77, 0x2e, + 0x0d, 0x4a, 0x2f, 0xb3, 0xd5, 0x0f, 0xc0, 0x00, 0x4a, 0x26, 0x59, 0xd7, + 0x0f, 0x40, 0x4c, 0x7b, 0x8d, 0x76, 0xcc, 0x01, 0x4a, 0x3c, 0x29, 0x72, + 0xcc, 0x41, 0xe8, 0x93, 0xcc, 0x81, 0x04, 0xf4, 0x1c, 0xf9, 0x41, 0x50, + 0x36, 0x29, 0x95, 0xcc, 0x41, 0xa1, 0x93, 0x05, 0x06, 0x0c, 0x03, 0x82, + 0x05, 0xa3, 0xd7, 0x04, 0x02, 0x3b, 0x01, 0xa7, 0x04, 0xa6, 0x90, 0x04, + 0x02, 0x22, 0x00, 0xa9, 0x03, 0x14, 0xc0, 0x43, 0x98, 0x03, 0x56, 0x8f, + 0x35, 0x1d, 0x2e, 0x00, 0x60, 0xd4, 0x0f, 0xca, 0x22, 0x00, 0xaf, 0xed, + 0x02, 0x4b, 0xd8, 0x21, 0x29, 0x00, 0x80, 0xd0, 0x02, 0x57, 0x80, 0x30, + 0x0d, 0x2e, 0x00, 0xb3, 0xb4, 0x01, 0xb4, 0x4b, 0x09, 0x32, 0x00, 0x33, + 0xb7, 0x01, 0xff, 0x05, 0xae, 0x02, 0x06, 0x4b, 0xf4, 0x96, 0xd9, 0x29, + 0x40, 0xa3, 0x18, 0x52, 0x6c, 0x27, 0x17, 0x30, 0x00, 0x4b, 0xd8, 0x21, + 0x86, 0x29, 0x00, 0x4e, 0xc8, 0x26, 0x1b, 0x30, 0x00, 0x56, 0x54, 0x09, + 0x19, 0x30, 0x40, 0x4d, 0x35, 0x69, 0x0f, 0x30, 0x00, 0x4c, 0x73, 0x0b, + 0x84, 0x29, 0x40, 0xa2, 0x06, 0x4d, 0x00, 0x30, 0x06, 0xcc, 0x41, 0x4d, + 0x96, 0x80, 0x21, 0x2e, 0x00, 0x47, 0x65, 0xd4, 0xb9, 0x23, 0x40, 0x43, + 0x0e, 0x03, 0xa2, 0x22, 0x00, 0xa8, 0x27, 0x55, 0x55, 0x09, 0x15, 0x30, + 0x00, 0xb2, 0x01, 0xff, 0x53, 0x15, 0x48, 0x0a, 0x2e, 0x00, 0x04, 0x1b, + 0x01, 0x01, 0xff, 0x42, 0x68, 0x00, 0xbf, 0x22, 0x80, 0x06, 0x56, 0x3a, + 0x1d, 0x6e, 0xfb, 0x41, 0x54, 0x74, 0x3f, 0xce, 0x29, 0x40, 0x04, 0x3a, + 0x89, 0x28, 0x4c, 0x87, 0x93, 0xed, 0xf5, 0x01, 0x04, 0x26, 0x01, 0x01, + 0xff, 0x4d, 0x01, 0x4d, 0x88, 0xfb, 0x01, 0x09, 0x2a, 0x01, 0x01, 0xff, + 0x45, 0x33, 0x01, 0x8a, 0xfb, 0x01, 0x57, 0x83, 0x2f, 0xa1, 0xce, 0x01, + 0x57, 0x94, 0x31, 0xaa, 0xce, 0x41, 0x48, 0x08, 0xc7, 0x0d, 0xcc, 0x01, + 0x5a, 0x88, 0x22, 0xc3, 0xfb, 0x41, 0x55, 0xcf, 0x38, 0xc6, 0x27, 0x00, + 0xa5, 0x7f, 0xa9, 0x71, 0x02, 0x6f, 0x02, 0x4f, 0x4d, 0xc9, 0x26, 0x5d, + 0x00, 0x80, 0x06, 0x53, 0xab, 0x26, 0x03, 0x2e, 0x40, 0x80, 0x01, 0xff, + 0x49, 0xc1, 0x58, 0xa5, 0x23, 0x00, 0x4c, 0x6b, 0x91, 0xa6, 0x23, 0x00, + 0x4c, 0x87, 0x96, 0xa4, 0x23, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4d, + 0x36, 0x82, 0x58, 0x2e, 0x00, 0x45, 0x9e, 0x80, 0x46, 0x20, 0x00, 0x46, + 0x52, 0x05, 0x56, 0x2e, 0x00, 0x08, 0x90, 0xcb, 0x06, 0x48, 0xe3, 0x59, + 0x8c, 0x29, 0x40, 0x4d, 0x32, 0x81, 0x8e, 0x29, 0x00, 0x4a, 0x0d, 0xb2, + 0x90, 0x29, 0x40, 0x44, 0x92, 0x27, 0x68, 0xf5, 0x81, 0x06, 0x4a, 0x72, + 0x7c, 0xe9, 0xf5, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4e, 0x4d, 0x7a, + 0x69, 0xf5, 0x01, 0x51, 0x5e, 0x5e, 0x6a, 0xf5, 0x41, 0x50, 0xd6, 0x61, + 0x27, 0x2e, 0x00, 0x53, 0x97, 0x0b, 0x19, 0x20, 0x40, 0x50, 0xe4, 0x0f, + 0xcc, 0x22, 0x00, 0x51, 0xfd, 0x4c, 0x8b, 0xfb, 0x41, 0x80, 0x01, 0xff, + 0x49, 0xc1, 0x58, 0x9f, 0x23, 0x00, 0x4a, 0x67, 0xad, 0xa0, 0x23, 0x00, + 0x4a, 0xdf, 0xb2, 0x9e, 0x23, 0x40, 0x03, 0xef, 0x07, 0x0c, 0x4f, 0xb2, + 0x71, 0xbc, 0xfb, 0x01, 0x49, 0x52, 0xaf, 0xd6, 0x27, 0x40, 0x4c, 0x12, + 0x0b, 0x95, 0x25, 0x00, 0x4d, 0x43, 0x1d, 0x87, 0xfb, 0x41, 0x4c, 0x0c, + 0x03, 0xe9, 0xfb, 0x01, 0x4c, 0x32, 0x11, 0xe1, 0xfb, 0x41, 0x03, 0x24, + 0x00, 0x06, 0x55, 0x13, 0x3d, 0x7d, 0xf5, 0x41, 0x5a, 0xfa, 0x1e, 0x00, + 0xce, 0x01, 0x02, 0x33, 0x01, 0x38, 0xa6, 0x2a, 0x65, 0xe2, 0x07, 0x11, + 0xce, 0x01, 0x57, 0x83, 0x2f, 0xa0, 0xce, 0x01, 0x4c, 0x44, 0x04, 0x8d, + 0xfb, 0x01, 0x4b, 0x69, 0xa2, 0xb3, 0xfb, 0x01, 0x56, 0x73, 0x37, 0x0e, + 0xce, 0x01, 0x57, 0x94, 0x31, 0xab, 0xce, 0x01, 0x4d, 0x97, 0x8a, 0x0c, + 0xce, 0x41, 0x4c, 0x9b, 0x91, 0xa5, 0xcc, 0x01, 0x45, 0xcc, 0x65, 0xba, + 0xfb, 0x41, 0x04, 0x0e, 0x03, 0x06, 0x43, 0x35, 0x01, 0x90, 0x25, 0x40, + 0x46, 0x12, 0x03, 0xd7, 0x25, 0x00, 0x44, 0x31, 0x13, 0xe9, 0x2b, 0x40, + 0xa9, 0x06, 0x44, 0x59, 0x24, 0x0b, 0x23, 0x40, 0x47, 0xfc, 0xb8, 0x7d, + 0x29, 0x00, 0x50, 0xab, 0x51, 0x89, 0xfb, 0x41, 0x59, 0xa5, 0x26, 0x05, + 0x2e, 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0xa1, 0x12, 0x4b, 0xd8, 0x21, + 0x29, 0x2e, 0x00, 0x4e, 0x19, 0x05, 0x1d, 0x20, 0x00, 0x4c, 0xf3, 0x96, + 0xdb, 0x29, 0x40, 0x4c, 0x3f, 0x0f, 0x0b, 0x30, 0x00, 0x56, 0x05, 0x37, + 0x70, 0x29, 0x40, 0x46, 0x91, 0xc4, 0x09, 0x23, 0x00, 0x4d, 0x35, 0x69, + 0x0d, 0x30, 0x00, 0x4c, 0x73, 0x0b, 0x7d, 0x00, 0xc0, 0x00, 0x80, 0x01, + 0xff, 0x4a, 0x67, 0xad, 0xad, 0x23, 0x00, 0x4c, 0x07, 0x92, 0xac, 0x23, + 0x00, 0x4a, 0xdf, 0xb2, 0xab, 0x23, 0x40, 0x52, 0x6c, 0x27, 0x11, 0x30, + 0x00, 0x56, 0x54, 0x09, 0x98, 0x29, 0x40, 0xae, 0x1a, 0xb2, 0x01, 0xff, + 0x56, 0xac, 0x17, 0x94, 0x29, 0x00, 0x09, 0x25, 0x06, 0x01, 0xff, 0x4c, + 0x57, 0x8d, 0xf4, 0x27, 0x00, 0x4c, 0x3f, 0x15, 0xf4, 0x21, 0x40, 0x02, + 0x06, 0x00, 0x43, 0xa7, 0x01, 0xff, 0x49, 0x7c, 0xb8, 0xef, 0xf5, 0x01, + 0x42, 0x68, 0x00, 0x1f, 0x22, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x47, 0x63, + 0x09, 0x09, 0x30, 0x80, 0x23, 0x5a, 0xca, 0x1f, 0x01, 0x2e, 0x00, 0x53, + 0xd1, 0x1f, 0x00, 0x2e, 0x00, 0x53, 0x77, 0x4e, 0x9c, 0x29, 0x00, 0x05, + 0x51, 0x00, 0x01, 0xff, 0x43, 0xaa, 0x17, 0xbe, 0x22, 0x00, 0x56, 0xd7, + 0x33, 0x7c, 0x23, 0x40, 0x49, 0x75, 0x3b, 0x92, 0x29, 0x40, 0x56, 0x08, + 0x0b, 0x7f, 0xfb, 0x01, 0x56, 0xcb, 0x37, 0x7e, 0xfb, 0x41, 0x44, 0xcd, + 0x1c, 0x59, 0xf3, 0x01, 0x47, 0x21, 0xd0, 0x58, 0xf3, 0x41, 0x07, 0xcd, + 0x00, 0x01, 0xff, 0x05, 0x9e, 0x14, 0x31, 0x05, 0xc3, 0x00, 0x21, 0x06, + 0xc8, 0x00, 0x11, 0x03, 0x7d, 0x15, 0x01, 0xff, 0x44, 0xc3, 0x00, 0xb2, + 0x2b, 0x00, 0x45, 0xc8, 0x00, 0xb3, 0x2b, 0x40, 0x44, 0xa5, 0x01, 0xb7, + 0x2b, 0x00, 0x42, 0x50, 0x02, 0xb5, 0x2b, 0x40, 0x44, 0xa5, 0x01, 0xb6, + 0x2b, 0x00, 0x42, 0x50, 0x02, 0xb4, 0x2b, 0x40, 0x44, 0xc3, 0x00, 0xb0, + 0x2b, 0x00, 0x45, 0xc8, 0x00, 0xb1, 0x2b, 0x40, 0xa3, 0xb8, 0x05, 0x02, + 0x06, 0x00, 0xa7, 0x05, 0x4c, 0xe3, 0x8e, 0x3b, 0x20, 0x00, 0x02, 0xf1, + 0x06, 0xaa, 0x04, 0x05, 0xa4, 0xe7, 0xcb, 0x02, 0x4b, 0xe1, 0x58, 0x0c, + 0xf6, 0x01, 0x4d, 0xf8, 0x85, 0x97, 0xf3, 0x01, 0x53, 0x87, 0x20, 0xfd, + 0xff, 0x00, 0xb3, 0x99, 0x02, 0x05, 0xa0, 0xeb, 0x82, 0x02, 0xb6, 0x01, + 0xff, 0x04, 0x3f, 0x04, 0x06, 0x4d, 0xc8, 0x86, 0x9e, 0xf4, 0x41, 0x80, + 0xa9, 0x01, 0x02, 0x06, 0x00, 0x01, 0xff, 0x45, 0x04, 0x02, 0xa3, 0x29, + 0x80, 0x96, 0x01, 0x45, 0x13, 0x05, 0x41, 0x2e, 0x00, 0x07, 0x3b, 0x01, + 0x79, 0x49, 0x61, 0xb8, 0xb0, 0x29, 0x00, 0x52, 0xbb, 0x51, 0x11, 0x2e, + 0x00, 0x60, 0xb4, 0x0f, 0x95, 0xf5, 0x01, 0x48, 0x8a, 0x73, 0x10, 0x23, + 0x00, 0xb0, 0x53, 0x4d, 0xa6, 0x34, 0x2e, 0x2e, 0x00, 0xb2, 0x39, 0xb3, + 0x2b, 0xb4, 0x06, 0x4c, 0xcf, 0x96, 0x94, 0xf5, 0x41, 0x06, 0x9e, 0xdc, + 0x13, 0x44, 0x36, 0x23, 0x3d, 0x22, 0x80, 0x06, 0x4b, 0x1c, 0xa2, 0x37, + 0x20, 0x40, 0x47, 0x47, 0x13, 0xcd, 0x22, 0x40, 0x49, 0xc8, 0xb7, 0x93, + 0xf5, 0x01, 0x47, 0xdb, 0xd6, 0x92, 0xf5, 0x41, 0x53, 0x02, 0x48, 0x43, + 0x21, 0x00, 0x48, 0xda, 0x59, 0x4f, 0x20, 0x40, 0x5f, 0xd2, 0x10, 0x91, + 0xf5, 0x01, 0x4a, 0x51, 0x45, 0xfe, 0x2b, 0x00, 0x5a, 0x9e, 0x21, 0x19, + 0x26, 0x40, 0x4b, 0x57, 0x9d, 0x4b, 0x20, 0x00, 0x44, 0xeb, 0x1a, 0x35, + 0x20, 0x40, 0x45, 0xea, 0x1a, 0x36, 0x20, 0x80, 0x06, 0x4f, 0x83, 0x73, + 0xed, 0x2a, 0x40, 0x4f, 0x18, 0x05, 0x1d, 0x30, 0x40, 0x4e, 0x2d, 0x5f, + 0xa5, 0x29, 0x40, 0x4d, 0x6d, 0x14, 0x7f, 0xf6, 0x01, 0x45, 0x8f, 0x13, + 0x8d, 0x00, 0x00, 0x02, 0xc3, 0x01, 0x2d, 0x47, 0x4f, 0x31, 0x5c, 0x00, + 0x80, 0x11, 0x15, 0x78, 0x3e, 0x01, 0xff, 0x4f, 0x4d, 0x1a, 0x41, 0x2b, + 0x00, 0x50, 0xb3, 0x02, 0x47, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x48, 0x7e, + 0x1d, 0xf5, 0x29, 0x00, 0x50, 0xf6, 0x65, 0xc8, 0x27, 0x00, 0x56, 0x23, + 0x38, 0xf7, 0x29, 0x40, 0x5e, 0x17, 0x13, 0xc8, 0xf7, 0x01, 0x47, 0xd0, + 0x20, 0x8d, 0x00, 0x40, 0x44, 0xc3, 0x00, 0x90, 0x2b, 0x00, 0x45, 0xc8, + 0x00, 0x91, 0x2b, 0x00, 0x46, 0x16, 0x08, 0xce, 0x23, 0x40, 0x45, 0x06, + 0xea, 0x1f, 0x21, 0x00, 0x02, 0x19, 0x01, 0x01, 0xff, 0x11, 0xd9, 0x5a, + 0x06, 0x43, 0x03, 0x54, 0xbb, 0xf6, 0x41, 0xd1, 0xe0, 0x26, 0x00, 0xd2, + 0xe1, 0x26, 0x40, 0x0f, 0x3d, 0x33, 0xc4, 0x01, 0x07, 0xec, 0x05, 0x37, + 0x4c, 0xf8, 0x26, 0x5f, 0xa9, 0x00, 0xb6, 0x01, 0xff, 0x45, 0xe4, 0x23, + 0x53, 0xa9, 0x00, 0x0a, 0x41, 0x77, 0x01, 0xff, 0xa1, 0x19, 0xe5, 0x49, + 0xa9, 0x80, 0x0c, 0xe9, 0x47, 0xa9, 0x00, 0xef, 0x4b, 0xa9, 0x00, 0xf5, + 0x48, 0xa9, 0x40, 0xe1, 0x4e, 0xa9, 0x00, 0xf5, 0x4d, 0xa9, 0x40, 0xe9, + 0x4a, 0xa9, 0x00, 0xf5, 0x4c, 0xa9, 0x40, 0xe1, 0x46, 0xa9, 0x00, 0x42, + 0x16, 0x00, 0x37, 0xa9, 0x00, 0x42, 0x37, 0x00, 0x39, 0xa9, 0x00, 0x42, + 0xf0, 0x10, 0x34, 0xa9, 0x00, 0x42, 0x24, 0x02, 0x31, 0xa9, 0x00, 0x42, + 0x22, 0x00, 0x41, 0xa9, 0x00, 0x42, 0x56, 0x19, 0x3a, 0xa9, 0x00, 0x42, + 0x1b, 0x02, 0x30, 0xa9, 0x00, 0x42, 0x74, 0x00, 0x3e, 0xa9, 0x00, 0xad, + 0x49, 0xae, 0x24, 0x42, 0xbb, 0x09, 0x36, 0xa9, 0x00, 0x42, 0x71, 0x00, + 0x3d, 0xa9, 0x00, 0x42, 0x40, 0x06, 0x3c, 0xa9, 0x00, 0x42, 0x12, 0x00, + 0x33, 0xa9, 0x00, 0x42, 0xa9, 0x01, 0x40, 0xa9, 0x00, 0x42, 0xbc, 0x22, + 0x3f, 0xa9, 0x40, 0xe1, 0x35, 0xa9, 0x00, 0x42, 0xf0, 0x10, 0x44, 0xa9, + 0x00, 0xa7, 0x0d, 0xb9, 0x01, 0xff, 0xe1, 0x3b, 0xa9, 0x00, 0x42, 0x56, + 0x19, 0x45, 0xa9, 0x40, 0xe1, 0x32, 0xa9, 0x00, 0x42, 0x24, 0x02, 0x43, + 0xa9, 0x40, 0xe1, 0x38, 0xa9, 0x00, 0x42, 0x16, 0x00, 0x42, 0xa9, 0x40, + 0xe8, 0x52, 0xa9, 0x00, 0xee, 0x50, 0xa9, 0x80, 0x04, 0xf2, 0x51, 0xa9, + 0x40, 0xe7, 0x4f, 0xa9, 0x40, 0x1d, 0x50, 0x16, 0x06, 0x4b, 0xed, 0xa2, + 0xae, 0x00, 0x40, 0xe1, 0xe6, 0xf1, 0x01, 0xe2, 0xe7, 0xf1, 0x01, 0xe3, + 0xe8, 0xf1, 0x01, 0xe4, 0xe9, 0xf1, 0x01, 0xe5, 0xea, 0xf1, 0x01, 0xe6, + 0xeb, 0xf1, 0x01, 0xe7, 0xec, 0xf1, 0x01, 0xe8, 0xed, 0xf1, 0x01, 0xe9, + 0xee, 0xf1, 0x01, 0xea, 0xef, 0xf1, 0x01, 0xeb, 0xf0, 0xf1, 0x01, 0xec, + 0xf1, 0xf1, 0x01, 0xed, 0xf2, 0xf1, 0x01, 0xee, 0xf3, 0xf1, 0x01, 0xef, + 0xf4, 0xf1, 0x01, 0xf0, 0xf5, 0xf1, 0x01, 0xf1, 0xf6, 0xf1, 0x01, 0xf2, + 0xf7, 0xf1, 0x01, 0xf3, 0xf8, 0xf1, 0x01, 0xf4, 0xf9, 0xf1, 0x01, 0xf5, + 0xfa, 0xf1, 0x01, 0xf6, 0xfb, 0xf1, 0x01, 0xf7, 0xfc, 0xf1, 0x01, 0xf8, + 0xfd, 0xf1, 0x01, 0xf9, 0xfe, 0xf1, 0x01, 0xfa, 0xff, 0xf1, 0x41, 0x45, + 0x57, 0xe4, 0x4e, 0xf3, 0x01, 0x4d, 0x54, 0x83, 0xe7, 0xf9, 0x41, 0xa5, + 0x51, 0x4d, 0x59, 0x66, 0x1e, 0x00, 0x00, 0x51, 0x81, 0x5d, 0x99, 0xf6, + 0x01, 0x03, 0x21, 0x25, 0x01, 0xff, 0x4f, 0xdf, 0x29, 0x7c, 0x26, 0x00, + 0x0f, 0xa6, 0x6e, 0x01, 0xff, 0x51, 0x40, 0x5a, 0x7a, 0x26, 0x00, 0x05, + 0x4b, 0x21, 0x01, 0xff, 0x4a, 0xcd, 0xa6, 0x73, 0x26, 0x00, 0x4a, 0xe1, + 0xa6, 0x74, 0x26, 0x00, 0x4a, 0xf5, 0xa6, 0x75, 0x26, 0x00, 0x4a, 0xff, + 0xa6, 0x76, 0x26, 0x00, 0x4a, 0x09, 0xa7, 0x77, 0x26, 0x00, 0x4a, 0x13, + 0xa7, 0x78, 0x26, 0x00, 0x4a, 0x1d, 0xa7, 0x79, 0x26, 0x40, 0x43, 0x77, + 0x06, 0xfe, 0xf9, 0x01, 0x46, 0x44, 0xdf, 0x12, 0xcc, 0x41, 0x44, 0x39, + 0xef, 0x07, 0xf4, 0x81, 0xcd, 0x01, 0xa3, 0xb3, 0x01, 0x02, 0x00, 0x00, + 0x97, 0x01, 0xa9, 0x15, 0xed, 0x0f, 0xf4, 0x01, 0xf4, 0x00, 0xf4, 0x81, + 0x06, 0x43, 0xdf, 0xf4, 0x92, 0xfa, 0x41, 0x42, 0xb5, 0x00, 0x36, 0x22, + 0x40, 0x05, 0x49, 0xe8, 0x70, 0xee, 0xc6, 0x26, 0x80, 0x65, 0x04, 0x46, + 0x03, 0x01, 0xff, 0x4c, 0x8b, 0x8c, 0x1a, 0xf9, 0x01, 0x45, 0x13, 0x05, + 0x34, 0x2e, 0x00, 0x43, 0x23, 0x0a, 0x33, 0x2e, 0x80, 0x47, 0x44, 0xea, + 0xca, 0x0a, 0x27, 0x00, 0x44, 0xc6, 0x0d, 0x0b, 0x27, 0x80, 0x29, 0x54, + 0x8a, 0x2b, 0x06, 0x2e, 0x00, 0xad, 0x0f, 0xb3, 0x01, 0xff, 0x58, 0x06, + 0x2a, 0xcc, 0xfb, 0x01, 0x45, 0xd7, 0x05, 0x0b, 0x2e, 0x40, 0x46, 0x3f, + 0x64, 0x6a, 0xf1, 0x01, 0x46, 0xb0, 0x47, 0x6b, 0xf1, 0x01, 0x46, 0x2f, + 0x0e, 0x6c, 0xf1, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4f, 0xe2, 0x10, + 0x90, 0xf5, 0x01, 0x64, 0xbb, 0x09, 0x96, 0xf5, 0x41, 0x58, 0x86, 0x2b, + 0x07, 0x2e, 0x40, 0x43, 0x3f, 0x81, 0x08, 0xf3, 0x41, 0x43, 0xc3, 0x64, + 0x83, 0xf6, 0x01, 0x45, 0x73, 0xeb, 0xe4, 0xf6, 0x41, 0x51, 0xec, 0x58, + 0xb7, 0x23, 0x00, 0xef, 0xfb, 0xf4, 0xc1, 0x00, 0x47, 0x1f, 0xcd, 0x18, + 0xf5, 0x01, 0x4b, 0xbe, 0x98, 0x22, 0x26, 0x40, 0x44, 0x65, 0xef, 0x9d, + 0xf9, 0x01, 0x04, 0xa1, 0x01, 0x01, 0xff, 0x43, 0xc3, 0x64, 0xce, 0xf3, + 0x01, 0x4a, 0x1b, 0xae, 0xcd, 0xf3, 0x41, 0x45, 0x0b, 0x08, 0x30, 0xf4, + 0x41, 0xa1, 0x24, 0x06, 0xa8, 0x34, 0x0c, 0x46, 0xe6, 0xdc, 0xbb, 0x26, + 0x00, 0x4c, 0x1b, 0x05, 0x22, 0x00, 0x40, 0x80, 0x06, 0x4b, 0x3b, 0x67, + 0x5f, 0x22, 0x40, 0x50, 0xad, 0x00, 0x48, 0x20, 0x00, 0x44, 0xb9, 0x00, + 0x3f, 0x00, 0x40, 0x02, 0x26, 0x0d, 0x12, 0x43, 0x76, 0x14, 0x7e, 0xf7, + 0x01, 0x49, 0xb2, 0x54, 0x69, 0x26, 0x00, 0x59, 0x8c, 0x26, 0x16, 0x2a, + 0x40, 0x04, 0x7e, 0x0d, 0x11, 0x05, 0x42, 0x4c, 0x01, 0xff, 0x51, 0x94, + 0x26, 0x0c, 0x2a, 0x00, 0x45, 0xea, 0x1a, 0x57, 0x20, 0x40, 0x06, 0x13, + 0x01, 0x46, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x44, 0xc3, 0x00, 0x98, 0x25, + 0x80, 0x14, 0x45, 0xc8, 0x00, 0x9d, 0x25, 0xc0, 0x00, 0x4f, 0xa7, 0x39, + 0x9e, 0x25, 0xc0, 0x00, 0x50, 0x3c, 0x44, 0x9f, 0x25, 0x40, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x06, 0x13, 0x01, 0x11, 0x16, 0xe1, 0x37, 0x01, 0xff, + 0x44, 0xc3, 0x00, 0x9b, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x9c, 0x25, 0x40, + 0x54, 0x38, 0x44, 0x99, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x9a, 0x25, 0x40, + 0x44, 0xc3, 0x00, 0x96, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x97, 0x25, 0x40, + 0xa1, 0x96, 0x18, 0xa5, 0x83, 0x16, 0xa8, 0xed, 0x0e, 0xa9, 0xe6, 0x0d, + 0xac, 0xf9, 0x07, 0x4d, 0x7a, 0x86, 0x11, 0xcc, 0x01, 0xaf, 0x94, 0x06, + 0xb2, 0x84, 0x02, 0xb3, 0x33, 0xb5, 0x01, 0xff, 0x58, 0x7e, 0x27, 0xe2, + 0xf4, 0x01, 0x04, 0x09, 0x0c, 0x1a, 0xb2, 0x0c, 0x45, 0xfa, 0xd4, 0xcc, + 0xf4, 0x01, 0x5c, 0x2e, 0x19, 0xae, 0xf6, 0x41, 0x49, 0x13, 0xbe, 0x9c, + 0xf4, 0x01, 0x42, 0x46, 0x03, 0x5b, 0xf4, 0x41, 0x4b, 0x6e, 0x99, 0x08, + 0x20, 0x00, 0x4f, 0xde, 0x72, 0x4e, 0x2e, 0x40, 0x0e, 0xd1, 0x75, 0x06, + 0x44, 0x3d, 0xf3, 0xc9, 0xce, 0x41, 0x0f, 0x3e, 0x6d, 0xb4, 0x01, 0x07, + 0xec, 0x05, 0x3f, 0x07, 0xff, 0x39, 0x0c, 0x4c, 0xf8, 0x26, 0x99, 0x0b, + 0x01, 0x53, 0xdf, 0x4d, 0x9a, 0x0b, 0x41, 0x44, 0xf5, 0x06, 0xac, 0x0b, + 0x01, 0x43, 0x0e, 0x0b, 0xa9, 0x0b, 0x81, 0x1c, 0xb4, 0x01, 0xff, 0x42, + 0x92, 0x01, 0xad, 0x0b, 0x01, 0x44, 0x25, 0x01, 0xab, 0x0b, 0x01, 0xb7, + 0x01, 0xff, 0x44, 0xcb, 0x1d, 0xae, 0x0b, 0x01, 0xef, 0xaa, 0x0b, 0x41, + 0x48, 0x70, 0x11, 0xaf, 0x0b, 0x41, 0x45, 0xb2, 0xad, 0x80, 0x0b, 0x01, + 0x44, 0x41, 0xef, 0x81, 0x0b, 0x01, 0x46, 0x23, 0x4a, 0x83, 0x0b, 0x01, + 0x45, 0xdd, 0xaa, 0x82, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x84, 0x0b, 0x81, + 0x4c, 0x44, 0xcd, 0xf0, 0x89, 0x0b, 0x01, 0x46, 0x94, 0xdd, 0x8a, 0x0b, + 0x01, 0x48, 0x48, 0xc8, 0x8b, 0x0b, 0x01, 0x43, 0xdc, 0x22, 0x8c, 0x0b, + 0x01, 0x42, 0x6f, 0x02, 0x8e, 0x0b, 0x01, 0xb3, 0x18, 0x43, 0xa4, 0xc4, + 0x91, 0x0b, 0x01, 0x4d, 0x8a, 0x8a, 0x85, 0x0b, 0x01, 0x44, 0xa1, 0x52, + 0x88, 0x0b, 0x01, 0x45, 0x9b, 0x52, 0x86, 0x0b, 0x41, 0xa1, 0x06, 0x43, + 0x7a, 0x16, 0x90, 0x0b, 0x41, 0x43, 0xad, 0xea, 0x8f, 0x0b, 0x01, 0x44, + 0x49, 0xe4, 0x8d, 0x0b, 0x41, 0x42, 0x53, 0x00, 0x87, 0x0b, 0x41, 0x45, + 0x95, 0x10, 0x9b, 0x0b, 0x01, 0x43, 0x23, 0x0a, 0x9c, 0x0b, 0x41, 0x4a, + 0x21, 0xa8, 0xff, 0xf4, 0x01, 0xa5, 0x86, 0x01, 0xa9, 0x30, 0xaf, 0x01, + 0xff, 0x49, 0xa8, 0xb6, 0xaf, 0xf9, 0x01, 0x4c, 0xaf, 0x8f, 0xc7, 0xf6, + 0x01, 0x47, 0x35, 0xd2, 0x05, 0x23, 0x00, 0xb0, 0x06, 0x47, 0x6d, 0x48, + 0xd8, 0x2b, 0x40, 0x49, 0x8e, 0xb8, 0x4a, 0x21, 0x00, 0x46, 0x2e, 0x24, + 0x37, 0x22, 0xc0, 0x00, 0x45, 0xfb, 0x0c, 0x1d, 0x22, 0x40, 0x42, 0x2a, + 0x02, 0x32, 0x20, 0x00, 0xae, 0x29, 0x02, 0xf5, 0x0a, 0x01, 0xff, 0x4a, + 0x07, 0xa9, 0x9e, 0x00, 0x00, 0x06, 0x7c, 0xe0, 0x01, 0xff, 0x80, 0x0b, + 0x8d, 0x01, 0xff, 0xd1, 0x91, 0x00, 0x00, 0xd2, 0x92, 0x00, 0x40, 0x43, + 0x0e, 0x0b, 0x91, 0x00, 0x00, 0x43, 0x1f, 0x0a, 0x92, 0x00, 0x40, 0x42, + 0x73, 0x02, 0x34, 0xf9, 0x81, 0x16, 0xb4, 0x01, 0xff, 0x4e, 0xcc, 0x59, + 0x99, 0x23, 0x00, 0x42, 0x33, 0x00, 0xa8, 0xf5, 0xc1, 0x00, 0x45, 0xbe, + 0xe1, 0xb6, 0xf5, 0x41, 0x42, 0xee, 0x00, 0x78, 0xf4, 0x41, 0x45, 0xeb, + 0xc9, 0x7a, 0x22, 0x80, 0xa6, 0x02, 0x06, 0x14, 0xdc, 0x8f, 0x02, 0xb3, + 0x0c, 0x44, 0xc9, 0xf2, 0x68, 0xf9, 0x01, 0x4a, 0x57, 0xb3, 0x97, 0x23, + 0x40, 0x4d, 0x8d, 0x81, 0x1e, 0x21, 0x00, 0x1b, 0x34, 0x1b, 0x01, 0xff, + 0x02, 0x13, 0x05, 0xe5, 0x01, 0xa5, 0xd0, 0x01, 0x53, 0xc3, 0x29, 0x19, + 0xfe, 0x00, 0x0c, 0x4c, 0x20, 0xb9, 0x01, 0xac, 0x6a, 0x4d, 0xa6, 0x34, + 0x16, 0xfe, 0x00, 0x06, 0xc8, 0x00, 0x12, 0x49, 0x21, 0xbf, 0x14, 0xfe, + 0x00, 0x4e, 0x95, 0x7d, 0x30, 0xfe, 0x00, 0x4d, 0x70, 0x8a, 0x34, 0xfe, + 0x40, 0x4d, 0x3e, 0x0f, 0x40, 0xfe, 0x00, 0x58, 0x66, 0x27, 0x3c, 0xfe, + 0x00, 0xa3, 0x34, 0x54, 0xa4, 0x41, 0x3e, 0xfe, 0x00, 0x4b, 0xd8, 0x21, + 0x36, 0xfe, 0x00, 0x4e, 0xc8, 0x26, 0x48, 0xfe, 0x00, 0x56, 0x54, 0x09, + 0x3a, 0xfe, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, 0x4e, 0x34, 0x69, 0x44, + 0xfe, 0x00, 0x0e, 0x6c, 0x27, 0x01, 0xff, 0x44, 0x66, 0x09, 0x18, 0xfe, + 0x00, 0x44, 0xd1, 0xf0, 0x18, 0xfe, 0x40, 0x4d, 0x35, 0x69, 0x42, 0xfe, + 0x00, 0x4c, 0x73, 0x0b, 0x38, 0xfe, 0x40, 0x04, 0xc4, 0x00, 0x06, 0x47, + 0x76, 0x8a, 0x33, 0xfe, 0x40, 0x4d, 0x3e, 0x0f, 0x3f, 0xfe, 0x00, 0x58, + 0x66, 0x27, 0x3b, 0xfe, 0x00, 0xa3, 0x29, 0x54, 0xa4, 0x41, 0x3d, 0xfe, + 0x00, 0x4b, 0xd8, 0x21, 0x35, 0xfe, 0x00, 0x4e, 0xc8, 0x26, 0x47, 0xfe, + 0x00, 0x56, 0x54, 0x09, 0x39, 0xfe, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, + 0x4e, 0x34, 0x69, 0x43, 0xfe, 0x00, 0x52, 0x6c, 0x27, 0x17, 0xfe, 0x40, + 0x4d, 0x35, 0x69, 0x41, 0xfe, 0x00, 0x4c, 0x73, 0x0b, 0x37, 0xfe, 0x40, + 0x45, 0x13, 0x05, 0x11, 0xfe, 0x00, 0x49, 0x81, 0x16, 0x12, 0xfe, 0x40, + 0x46, 0xc2, 0xc2, 0x31, 0xfe, 0x00, 0x46, 0x18, 0xde, 0x32, 0xfe, 0x00, + 0x4f, 0xae, 0x00, 0x15, 0xfe, 0x40, 0x43, 0xd7, 0x02, 0x13, 0xfe, 0x00, + 0x43, 0x15, 0x05, 0x10, 0xfe, 0x40, 0x43, 0x41, 0x18, 0xc3, 0xfa, 0x01, + 0x46, 0x1e, 0x1d, 0xc4, 0xfa, 0x01, 0x45, 0x1a, 0x2d, 0x30, 0xf9, 0x41, + 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x1c, 0x55, 0xcb, 0x39, 0xe8, 0x22, + 0x00, 0x06, 0xf3, 0x28, 0x06, 0x4e, 0xe9, 0x7d, 0xb0, 0x22, 0x40, 0x45, + 0xfb, 0x0c, 0x7c, 0x22, 0x00, 0x4a, 0xd6, 0x39, 0x7e, 0x22, 0x40, 0x4f, + 0xaa, 0x6a, 0xb7, 0x2a, 0x00, 0x4b, 0x48, 0x13, 0xb3, 0x2a, 0x00, 0x04, + 0x70, 0x23, 0x11, 0x0c, 0xf6, 0x2a, 0x01, 0xff, 0x4b, 0x48, 0x13, 0xaf, + 0x2a, 0x00, 0x4c, 0x02, 0x2b, 0xb1, 0x2a, 0x40, 0x4f, 0xaa, 0x6a, 0xb9, + 0x2a, 0x00, 0x48, 0xf8, 0x0c, 0xb5, 0x2a, 0x40, 0x4f, 0xb8, 0x6b, 0xa9, + 0xf5, 0x01, 0x05, 0xa3, 0xaf, 0xbe, 0x01, 0x44, 0xbd, 0xf1, 0x29, 0xf4, + 0x01, 0xb0, 0x9f, 0x01, 0x4d, 0x34, 0x88, 0xfe, 0xf4, 0x01, 0xb3, 0x6b, + 0xb4, 0x4f, 0xb5, 0x24, 0x04, 0x15, 0x01, 0x01, 0xff, 0x02, 0x10, 0x00, + 0x0f, 0xb3, 0x01, 0xff, 0x4b, 0x80, 0x9e, 0xfe, 0x23, 0x00, 0x45, 0x17, + 0x08, 0xfb, 0x23, 0x40, 0x47, 0x15, 0x08, 0xfd, 0x23, 0x00, 0x4b, 0x71, + 0x98, 0xfc, 0x23, 0x40, 0x42, 0x6d, 0x14, 0x5d, 0xf4, 0x01, 0x48, 0x08, + 0xc8, 0x57, 0xf3, 0x01, 0x47, 0xaf, 0x47, 0xa3, 0x00, 0x00, 0x4b, 0x11, + 0xa2, 0xd7, 0xfa, 0x01, 0x05, 0xa0, 0x01, 0x01, 0xff, 0x48, 0x62, 0x1f, + 0x3e, 0xf6, 0x01, 0x44, 0x0c, 0x08, 0x21, 0xf6, 0x41, 0x48, 0xce, 0x64, + 0x72, 0xf3, 0x01, 0xa1, 0x06, 0x49, 0xb1, 0xbf, 0xb4, 0xfa, 0x41, 0x50, + 0x18, 0x45, 0xb0, 0xf6, 0x01, 0x42, 0x1e, 0x00, 0x54, 0xf9, 0x41, 0x45, + 0xd8, 0xe5, 0xe7, 0x2b, 0x00, 0x4f, 0x27, 0x67, 0x16, 0x23, 0x00, 0xb4, + 0x01, 0xff, 0x03, 0x13, 0x00, 0x06, 0x43, 0xbb, 0x3a, 0xee, 0xf4, 0x41, + 0x44, 0x60, 0x2d, 0xef, 0xf4, 0x01, 0x44, 0xb9, 0x00, 0x12, 0x30, 0xc0, + 0x00, 0x45, 0x0b, 0x08, 0x20, 0x30, 0x40, 0x0d, 0x78, 0x7f, 0x06, 0x44, + 0x27, 0x19, 0x7f, 0xf3, 0x41, 0x4a, 0x6f, 0xaa, 0x2c, 0x20, 0x00, 0x47, + 0x5f, 0x03, 0x69, 0x20, 0x40, 0x43, 0xc3, 0x64, 0x93, 0xf6, 0x81, 0x06, + 0x47, 0xbd, 0xd3, 0x6e, 0xf4, 0x41, 0x51, 0xc5, 0x5d, 0xa8, 0xf6, 0x41, + 0xa1, 0x96, 0x01, 0xb5, 0x01, 0xff, 0x44, 0xda, 0x09, 0xa0, 0xfa, 0x01, + 0xb3, 0x29, 0x42, 0x1e, 0x00, 0x47, 0x26, 0xc0, 0x00, 0x06, 0x3c, 0x1b, + 0x01, 0xff, 0xa6, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xd4, 0x2b, + 0x00, 0x42, 0x15, 0x02, 0xd3, 0x2b, 0x40, 0x43, 0xd2, 0x05, 0xd6, 0x2b, + 0x00, 0x43, 0xf6, 0x06, 0xd5, 0x2b, 0x40, 0x45, 0x59, 0x03, 0x2b, 0x00, + 0x80, 0x06, 0x4b, 0x66, 0x98, 0xb1, 0x00, 0x40, 0x80, 0x01, 0xff, 0x51, + 0x42, 0x13, 0x72, 0x2a, 0x00, 0x03, 0xe1, 0x05, 0x36, 0x05, 0x51, 0x00, + 0x01, 0xff, 0x4e, 0x5e, 0x6b, 0x28, 0x2a, 0x00, 0x57, 0xe5, 0x2d, 0x23, + 0x2a, 0x00, 0x49, 0x9f, 0x12, 0x25, 0x2a, 0x00, 0xb3, 0x11, 0x06, 0x35, + 0x23, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x24, 0x2a, 0x00, 0x45, 0x20, 0x07, + 0x26, 0x2a, 0x40, 0x51, 0x76, 0x55, 0x22, 0x2a, 0x00, 0x4c, 0x27, 0x96, + 0x27, 0x2a, 0x40, 0x50, 0x86, 0x64, 0x2d, 0x2a, 0x00, 0x51, 0xa3, 0x5d, + 0x2e, 0x2a, 0x00, 0x48, 0x01, 0x02, 0x39, 0x2a, 0x40, 0xa3, 0xb7, 0x04, + 0x4c, 0x73, 0x92, 0x0e, 0x21, 0x80, 0xa9, 0x04, 0xb9, 0x01, 0xff, 0x4c, + 0x5b, 0x8f, 0xdd, 0xf6, 0x01, 0x09, 0x74, 0xba, 0x01, 0xff, 0x07, 0x36, + 0x79, 0xfe, 0x03, 0xa2, 0xef, 0x03, 0x09, 0x3d, 0xb8, 0xd2, 0x03, 0xa6, + 0x8d, 0x03, 0x08, 0x50, 0xc7, 0xf0, 0x02, 0xab, 0xb4, 0x02, 0x08, 0xb8, + 0xc8, 0x97, 0x02, 0x09, 0x52, 0xbe, 0xfa, 0x01, 0x49, 0x91, 0xbe, 0xbf, + 0xf0, 0x01, 0xb3, 0xb8, 0x01, 0xb4, 0x06, 0x4b, 0x08, 0xa5, 0xdf, 0xf0, + 0x41, 0x06, 0x55, 0xbe, 0x93, 0x01, 0x08, 0xc8, 0xc6, 0x77, 0x05, 0x9c, + 0xea, 0x1d, 0x06, 0x4e, 0xe1, 0x01, 0xff, 0x45, 0x5b, 0xe5, 0xd2, 0xf0, + 0x01, 0x48, 0x10, 0xc5, 0xc2, 0xf0, 0x01, 0x46, 0xcf, 0x86, 0xb2, 0xf0, + 0x01, 0x46, 0xf8, 0xdf, 0xa2, 0xf0, 0x41, 0xd1, 0xe1, 0xf0, 0x81, 0x29, + 0xd2, 0xe2, 0xf0, 0x81, 0x1c, 0xd3, 0xe3, 0xf0, 0x01, 0xd4, 0xe4, 0xf0, + 0x01, 0xd5, 0xe5, 0xf0, 0x01, 0xd6, 0xe6, 0xf0, 0x01, 0xd7, 0xe7, 0xf0, + 0x01, 0xd8, 0xe8, 0xf0, 0x01, 0xd9, 0xe9, 0xf0, 0x41, 0xd0, 0xf4, 0xf0, + 0x01, 0xd1, 0xf5, 0xf0, 0x41, 0xd0, 0xea, 0xf0, 0x01, 0xd1, 0xeb, 0xf0, + 0x01, 0xd2, 0xec, 0xf0, 0x01, 0xd3, 0xed, 0xf0, 0x01, 0xd4, 0xee, 0xf0, + 0x01, 0xd5, 0xef, 0xf0, 0x01, 0xd6, 0xf0, 0xf0, 0x01, 0xd7, 0xf1, 0xf0, + 0x01, 0xd8, 0xf2, 0xf0, 0x01, 0xd9, 0xf3, 0xf0, 0x41, 0x45, 0x5b, 0xe5, + 0xd3, 0xf0, 0x01, 0x48, 0x10, 0xc5, 0xc3, 0xf0, 0x01, 0x46, 0xcf, 0x86, + 0xb3, 0xf0, 0x01, 0x46, 0xf8, 0xdf, 0xa3, 0xf0, 0x41, 0x45, 0x5b, 0xe5, + 0xda, 0xf0, 0x01, 0x48, 0x10, 0xc5, 0xca, 0xf0, 0x01, 0x46, 0xcf, 0x86, + 0xba, 0xf0, 0x01, 0x46, 0xf8, 0xdf, 0xaa, 0xf0, 0x41, 0x08, 0x00, 0xc6, + 0x1d, 0x06, 0x40, 0xdd, 0x01, 0xff, 0x45, 0x5b, 0xe5, 0xd6, 0xf0, 0x01, + 0x48, 0x10, 0xc5, 0xc6, 0xf0, 0x01, 0x46, 0xcf, 0x86, 0xb6, 0xf0, 0x01, + 0x46, 0xf8, 0xdf, 0xa6, 0xf0, 0x41, 0x45, 0x5b, 0xe5, 0xd7, 0xf0, 0x01, + 0x48, 0x10, 0xc5, 0xc7, 0xf0, 0x01, 0x46, 0xcf, 0x86, 0xb7, 0xf0, 0x01, + 0x46, 0xf8, 0xdf, 0xa7, 0xf0, 0x41, 0x45, 0x5b, 0xe5, 0xdd, 0xf0, 0x01, + 0x48, 0x10, 0xc5, 0xcd, 0xf0, 0x01, 0x46, 0xcf, 0x86, 0xbd, 0xf0, 0x01, + 0x46, 0xf8, 0xdf, 0xad, 0xf0, 0x41, 0x45, 0x5b, 0xe5, 0xd9, 0xf0, 0x01, + 0x48, 0x10, 0xc5, 0xc9, 0xf0, 0x01, 0x46, 0xcf, 0x86, 0xb9, 0xf0, 0x01, + 0x46, 0xf8, 0xdf, 0xa9, 0xf0, 0x41, 0x07, 0x67, 0x39, 0x1d, 0x09, 0x75, + 0xbc, 0x01, 0xff, 0x45, 0x5b, 0xe5, 0xdc, 0xf0, 0x01, 0x48, 0x10, 0xc5, + 0xcc, 0xf0, 0x01, 0x46, 0xcf, 0x86, 0xbc, 0xf0, 0x01, 0x46, 0xf8, 0xdf, + 0xac, 0xf0, 0x41, 0x45, 0x5b, 0xe5, 0xde, 0xf0, 0x01, 0x48, 0x10, 0xc5, + 0xce, 0xf0, 0x01, 0x46, 0xcf, 0x86, 0xbe, 0xf0, 0x01, 0x46, 0xf8, 0xdf, + 0xae, 0xf0, 0x41, 0x45, 0x5b, 0xe5, 0xdb, 0xf0, 0x01, 0x48, 0x10, 0xc5, + 0xcb, 0xf0, 0x01, 0x46, 0xcf, 0x86, 0xbb, 0xf0, 0x01, 0x46, 0xf8, 0xdf, + 0xab, 0xf0, 0x41, 0x07, 0x19, 0xd2, 0x26, 0xaf, 0x01, 0xff, 0x42, 0x61, + 0x03, 0xe0, 0xf0, 0x01, 0x06, 0x2e, 0xd4, 0x01, 0xff, 0x45, 0x5b, 0xe5, + 0xd4, 0xf0, 0x01, 0x48, 0x10, 0xc5, 0xc4, 0xf0, 0x01, 0x46, 0xcf, 0x86, + 0xb4, 0xf0, 0x01, 0x46, 0xf8, 0xdf, 0xa4, 0xf0, 0x41, 0x45, 0x5b, 0xe5, + 0xd5, 0xf0, 0x01, 0x48, 0x10, 0xc5, 0xc5, 0xf0, 0x01, 0x46, 0xcf, 0x86, + 0xb5, 0xf0, 0x01, 0x46, 0xf8, 0xdf, 0xa5, 0xf0, 0x41, 0x45, 0x5b, 0xe5, + 0xd8, 0xf0, 0x01, 0x48, 0x10, 0xc5, 0xc8, 0xf0, 0x01, 0x46, 0xcf, 0x86, + 0xb8, 0xf0, 0x01, 0x46, 0xf8, 0xdf, 0xa8, 0xf0, 0x41, 0x43, 0x0e, 0x03, + 0xa0, 0xf0, 0x01, 0x4a, 0x77, 0xac, 0xcf, 0xf0, 0x41, 0x45, 0x5b, 0xe5, + 0xd1, 0xf0, 0x01, 0x48, 0x10, 0xc5, 0xc1, 0xf0, 0x01, 0x46, 0xcf, 0x86, + 0xb1, 0xf0, 0x01, 0x46, 0xf8, 0xdf, 0xa1, 0xf0, 0x41, 0x4c, 0x77, 0x8b, + 0x0f, 0x21, 0x40, 0x43, 0xaa, 0x01, 0xa7, 0xfa, 0x01, 0x05, 0x24, 0x43, + 0x01, 0xff, 0x4d, 0x3e, 0x84, 0x18, 0x23, 0x00, 0x47, 0x9f, 0xd7, 0xd0, + 0xf6, 0x41, 0x42, 0x36, 0x01, 0xcf, 0x26, 0x80, 0x77, 0xe5, 0x67, 0xf9, + 0x01, 0xe7, 0x16, 0xf4, 0x81, 0x5f, 0xac, 0x4d, 0xae, 0x1b, 0xb3, 0x0d, + 0x47, 0x41, 0xd6, 0xd4, 0x22, 0xc0, 0x00, 0x4d, 0xed, 0x7f, 0xda, 0x2a, + 0x40, 0x43, 0x43, 0x7c, 0x53, 0x26, 0x00, 0x43, 0xbd, 0x3c, 0x2b, 0xf5, + 0x41, 0x43, 0xd7, 0x18, 0x85, 0xfa, 0x01, 0x02, 0x6d, 0x14, 0x1a, 0xa5, + 0x0c, 0x47, 0x08, 0x29, 0x77, 0xfa, 0x01, 0x4a, 0x2b, 0x13, 0x2f, 0x27, + 0x40, 0x4b, 0x5e, 0x97, 0x8d, 0xf3, 0x01, 0x45, 0x57, 0xe4, 0x4d, 0xf3, + 0x41, 0x4a, 0xa7, 0xa9, 0x0c, 0xf9, 0x01, 0x48, 0x24, 0x2d, 0x0f, 0xf9, + 0x41, 0x49, 0x59, 0x9d, 0xb6, 0x00, 0x00, 0x48, 0x60, 0xc5, 0xa9, 0xf4, + 0x01, 0xec, 0x8a, 0xf4, 0x41, 0x80, 0x01, 0xff, 0x44, 0x0c, 0x08, 0x37, + 0xf4, 0x01, 0x44, 0x15, 0x17, 0x3d, 0xf4, 0x41, 0x48, 0x28, 0xcc, 0xfb, + 0xf6, 0x41, 0xa1, 0xde, 0x01, 0x09, 0x47, 0xba, 0xcd, 0x01, 0xaf, 0x01, + 0xff, 0x08, 0xa0, 0xc5, 0x06, 0x43, 0x59, 0x28, 0xdb, 0x2b, 0x40, 0x07, + 0xec, 0x05, 0x33, 0x07, 0xff, 0x39, 0x06, 0x4e, 0xd7, 0x7e, 0x1f, 0x09, + 0x41, 0x43, 0x0e, 0x0b, 0x16, 0x09, 0x81, 0x1c, 0xb4, 0x01, 0xff, 0x42, + 0x92, 0x01, 0x17, 0x09, 0x01, 0x44, 0x25, 0x01, 0x1b, 0x09, 0x01, 0xb7, + 0x01, 0xff, 0x44, 0xcb, 0x1d, 0x18, 0x09, 0x01, 0xef, 0x1a, 0x09, 0x41, + 0x48, 0x70, 0x11, 0x19, 0x09, 0x41, 0xa1, 0x7b, 0x43, 0xc0, 0x09, 0x01, + 0x09, 0x01, 0x44, 0x7e, 0xe5, 0x03, 0x09, 0x01, 0x44, 0xe5, 0xef, 0x02, + 0x09, 0x01, 0x42, 0xb0, 0x01, 0x04, 0x09, 0x81, 0x5e, 0x43, 0xa7, 0x51, + 0x0a, 0x09, 0x01, 0x44, 0x17, 0xe8, 0x0b, 0x09, 0x01, 0x43, 0xb4, 0x05, + 0x0c, 0x09, 0x01, 0x43, 0xdc, 0x22, 0x0d, 0x09, 0x01, 0x42, 0x6f, 0x02, + 0x10, 0x09, 0x01, 0x43, 0x91, 0xf4, 0x12, 0x09, 0x01, 0x44, 0xab, 0xb9, + 0x13, 0x09, 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, 0x09, 0xa4, 0x05, 0x09, + 0x01, 0x43, 0xa1, 0x52, 0x09, 0x09, 0x01, 0x43, 0x27, 0x75, 0x06, 0x09, + 0x41, 0x42, 0x5f, 0x24, 0x15, 0x09, 0x01, 0x42, 0xed, 0x05, 0x08, 0x09, + 0x41, 0x43, 0x0c, 0x02, 0x11, 0x09, 0x01, 0x43, 0xf3, 0x82, 0x0e, 0x09, + 0x01, 0x43, 0x7a, 0x16, 0x14, 0x09, 0x41, 0xf4, 0x07, 0x09, 0x41, 0x42, + 0x9e, 0x01, 0x0f, 0x09, 0x01, 0x42, 0x24, 0x00, 0x00, 0x09, 0x41, 0x52, + 0x07, 0x51, 0x36, 0x17, 0x00, 0x52, 0x63, 0x55, 0x35, 0x17, 0x40, 0x06, + 0x32, 0xdc, 0xc7, 0x02, 0x10, 0x36, 0x64, 0x01, 0xff, 0x45, 0xce, 0x00, + 0xd9, 0x01, 0x01, 0xa2, 0x9a, 0x02, 0xa3, 0xe3, 0x01, 0x02, 0x3b, 0x01, + 0xd2, 0x01, 0x45, 0xb5, 0xe5, 0xee, 0x01, 0x01, 0x45, 0x73, 0xe6, 0xf8, + 0x01, 0x01, 0xa7, 0xb7, 0x01, 0xa8, 0xa2, 0x01, 0x02, 0xc3, 0x01, 0x93, + 0x01, 0x02, 0x6c, 0x00, 0x82, 0x01, 0x47, 0x5e, 0xd4, 0xf7, 0x01, 0x01, + 0xb0, 0x5f, 0xb2, 0x51, 0xb3, 0x29, 0xb4, 0x15, 0x44, 0x10, 0xc1, 0xf3, + 0x01, 0x01, 0xb7, 0x01, 0xff, 0x48, 0xd0, 0xc3, 0xfc, 0x01, 0x01, 0x44, + 0x1b, 0x2d, 0xd5, 0x01, 0x41, 0x4c, 0x7f, 0x8c, 0xd2, 0x01, 0x01, 0x44, + 0x71, 0xf0, 0xd8, 0x01, 0x01, 0x44, 0x9d, 0x60, 0xf0, 0x01, 0x41, 0x42, + 0xb7, 0x2d, 0xdf, 0x01, 0x01, 0x02, 0x49, 0x00, 0x12, 0x44, 0x2f, 0x0b, + 0xe5, 0x01, 0x01, 0x48, 0x18, 0xc8, 0xfb, 0x01, 0x01, 0x47, 0x79, 0xd6, + 0xfa, 0x01, 0x41, 0x43, 0x02, 0x24, 0xdb, 0x01, 0x01, 0xf0, 0xe8, 0x01, + 0x41, 0x42, 0x57, 0x00, 0xed, 0x01, 0x01, 0x46, 0xf0, 0xde, 0xf5, 0x01, + 0x41, 0x46, 0xd4, 0xd9, 0xf4, 0x01, 0x01, 0x49, 0xb1, 0xa9, 0xd0, 0x01, + 0x01, 0xac, 0x01, 0xff, 0x48, 0x58, 0xc3, 0xf2, 0x01, 0x01, 0x49, 0x4a, + 0xc0, 0xd1, 0x01, 0x41, 0x46, 0x2a, 0xde, 0xdd, 0x01, 0x01, 0x45, 0x91, + 0xeb, 0xde, 0x01, 0x41, 0xe4, 0xe0, 0x01, 0x01, 0x42, 0x75, 0x0b, 0xf6, + 0x01, 0x41, 0x45, 0xf3, 0xc2, 0xd6, 0x01, 0x01, 0x43, 0x03, 0x00, 0xea, + 0x01, 0x01, 0x43, 0x28, 0x05, 0xe9, 0x01, 0x41, 0x47, 0x41, 0xcf, 0xd7, + 0x01, 0x01, 0x45, 0x9f, 0xa1, 0xf9, 0x01, 0x41, 0x44, 0x09, 0xf1, 0xe3, + 0x01, 0x01, 0x42, 0x32, 0x00, 0xef, 0x01, 0x41, 0xa1, 0x22, 0x44, 0x28, + 0x4a, 0xd4, 0x01, 0x01, 0x43, 0x20, 0x4b, 0xdc, 0x01, 0x01, 0xaf, 0x01, + 0xff, 0x44, 0x1d, 0xf1, 0xe6, 0x01, 0x01, 0x42, 0xb6, 0x05, 0xe4, 0x01, + 0xc1, 0x00, 0x54, 0x48, 0x43, 0xfd, 0x01, 0x41, 0x45, 0x4c, 0x72, 0xd3, + 0x01, 0x01, 0x4d, 0x1a, 0x88, 0xe2, 0x01, 0x01, 0xf4, 0xec, 0x01, 0x41, + 0x42, 0x27, 0x01, 0xf1, 0x01, 0x81, 0x12, 0xaf, 0x06, 0x48, 0x08, 0xcc, + 0xeb, 0x01, 0x41, 0x47, 0xd9, 0xd3, 0xe1, 0x01, 0x01, 0xf7, 0xda, 0x01, + 0x41, 0x44, 0x98, 0x84, 0xe7, 0x01, 0x41, 0x50, 0x26, 0x62, 0x75, 0xa8, + 0x00, 0x07, 0xec, 0x05, 0x38, 0x05, 0xb9, 0x00, 0x28, 0xb3, 0x01, 0xff, + 0x4f, 0xb5, 0x6e, 0x74, 0xa8, 0x00, 0xb5, 0x01, 0xff, 0x0f, 0xd7, 0x67, + 0x06, 0x52, 0x8b, 0x54, 0x72, 0xa8, 0x40, 0x42, 0x71, 0x00, 0x71, 0xa8, + 0x00, 0x42, 0xa9, 0x01, 0x67, 0xa8, 0x00, 0x42, 0xbc, 0x22, 0x68, 0xa8, + 0x40, 0x4b, 0x47, 0x9b, 0x77, 0xa8, 0x00, 0x44, 0xa4, 0x02, 0x76, 0xa8, + 0x40, 0xe1, 0x5d, 0xa8, 0x80, 0x92, 0x02, 0x42, 0x16, 0x00, 0x4e, 0xa8, + 0x00, 0xa3, 0xf8, 0x01, 0xa4, 0xe5, 0x01, 0xe5, 0x60, 0xa8, 0x80, 0xdb, + 0x01, 0x42, 0x0c, 0x08, 0x64, 0xa8, 0x00, 0xa7, 0xc8, 0x01, 0x42, 0x22, + 0x00, 0x5c, 0xa8, 0x00, 0xe9, 0x5e, 0xa8, 0x00, 0x42, 0x56, 0x19, 0x46, + 0xa8, 0x00, 0xab, 0xab, 0x01, 0x42, 0x74, 0x00, 0x59, 0xa8, 0x00, 0x42, + 0x6c, 0x00, 0x4f, 0xa8, 0x00, 0xae, 0x86, 0x01, 0xef, 0x61, 0xa8, 0x00, + 0xb0, 0x76, 0x42, 0x43, 0x14, 0x62, 0xa8, 0x00, 0x42, 0x71, 0x00, 0x58, + 0xa8, 0x00, 0xb3, 0x58, 0xb4, 0x33, 0xf5, 0x5f, 0xa8, 0x00, 0x05, 0x0a, + 0x1d, 0x1f, 0x42, 0xa9, 0x01, 0x53, 0xa8, 0x00, 0x42, 0xed, 0x26, 0x63, + 0xa8, 0x00, 0x42, 0xbc, 0x22, 0x57, 0xa8, 0x00, 0xba, 0x01, 0xff, 0xe1, + 0x55, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x54, 0xa8, 0x40, 0x44, 0xd6, 0x10, + 0x6f, 0xa8, 0x00, 0x48, 0xb0, 0xc7, 0x6e, 0xa8, 0x40, 0xe1, 0x48, 0xa8, + 0x00, 0x42, 0x22, 0x00, 0x49, 0xa8, 0x00, 0xb3, 0x0d, 0xb4, 0x01, 0xff, + 0xe1, 0x69, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x6a, 0xa8, 0x40, 0xe1, 0x50, + 0xa8, 0x00, 0x42, 0x22, 0x00, 0x51, 0xa8, 0x40, 0xe1, 0x5b, 0xa8, 0x00, + 0x42, 0x22, 0x00, 0x5a, 0xa8, 0x00, 0x46, 0x04, 0x0a, 0x56, 0xa8, 0x40, + 0xe1, 0x4c, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x4d, 0xa8, 0x40, 0xe1, 0x4b, + 0xa8, 0x00, 0x42, 0x24, 0x02, 0x43, 0xa8, 0x00, 0x42, 0x2a, 0x05, 0x6c, + 0xa8, 0x00, 0x42, 0xbc, 0x22, 0x47, 0xa8, 0x40, 0xe1, 0x40, 0xa8, 0x00, + 0x42, 0x22, 0x00, 0x41, 0xa8, 0x40, 0xe1, 0x42, 0xa8, 0x00, 0x42, 0x24, + 0x02, 0x65, 0xa8, 0x40, 0xe5, 0x66, 0xa8, 0x40, 0xe1, 0x4a, 0xa8, 0x00, + 0x42, 0xf0, 0x10, 0x6b, 0xa8, 0x00, 0x42, 0x59, 0x00, 0x52, 0xa8, 0x40, + 0xe1, 0x44, 0xa8, 0x80, 0x06, 0x42, 0x22, 0x00, 0x45, 0xa8, 0x40, 0x49, + 0xd9, 0x23, 0x73, 0xa8, 0x40, 0x4b, 0x1a, 0x9f, 0x6d, 0xa8, 0x00, 0x4b, + 0xcc, 0xa2, 0x70, 0xa8, 0x40, 0xa1, 0xeb, 0x01, 0x48, 0xb2, 0xa9, 0xb6, + 0xf6, 0x01, 0xae, 0xc4, 0x01, 0x4c, 0x4b, 0x93, 0xc2, 0xfa, 0x01, 0xb2, + 0x14, 0xb3, 0x06, 0x48, 0xb8, 0xcb, 0xeb, 0xf9, 0x41, 0x48, 0xe8, 0xc5, + 0xa7, 0x20, 0x00, 0x46, 0x21, 0xb1, 0xb1, 0x20, 0x40, 0x80, 0x93, 0x01, + 0x49, 0xe3, 0x9b, 0x25, 0x00, 0x00, 0x4c, 0x07, 0x8f, 0xad, 0xf3, 0x01, + 0x51, 0x0b, 0x5c, 0x7e, 0x26, 0x00, 0x4a, 0xa9, 0x8e, 0xc2, 0x27, 0x80, + 0x74, 0xb3, 0x01, 0xff, 0x4c, 0xbf, 0x8e, 0x23, 0xf6, 0x01, 0x02, 0x10, + 0x00, 0x06, 0x47, 0x9d, 0xd4, 0x06, 0x23, 0x40, 0x80, 0x06, 0x4b, 0xe4, + 0x86, 0xbb, 0xf4, 0x41, 0x4d, 0x3f, 0x81, 0x47, 0xf6, 0x01, 0x48, 0xb8, + 0xc4, 0xd7, 0xf9, 0x01, 0x4f, 0x30, 0x6c, 0x38, 0xf9, 0x01, 0x48, 0x13, + 0x83, 0x4d, 0xf6, 0x01, 0x03, 0xe1, 0x05, 0x31, 0x61, 0x6e, 0x0e, 0x4c, + 0xf6, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, 0xa2, 0x18, 0x45, 0x60, 0xe5, + 0xc5, 0xfa, 0x01, 0x4c, 0xfb, 0x8e, 0x4f, 0xf6, 0x01, 0x49, 0x8a, 0xb9, + 0xd5, 0xf9, 0x01, 0x4c, 0xc3, 0x93, 0x4e, 0xf6, 0x41, 0x43, 0x5f, 0x07, + 0xf9, 0x26, 0x00, 0x49, 0xa6, 0xbb, 0x71, 0xf4, 0x41, 0x4e, 0xa5, 0x79, + 0xd8, 0xf9, 0x01, 0x4b, 0xe2, 0xa2, 0xd6, 0xf9, 0x41, 0x47, 0x69, 0x06, + 0xe1, 0x2a, 0x40, 0x4a, 0xdf, 0xad, 0x30, 0x20, 0x00, 0x44, 0x5a, 0x03, + 0x4c, 0x21, 0x00, 0x51, 0x3c, 0x5e, 0x31, 0x20, 0x40, 0x56, 0x35, 0x32, + 0x86, 0xf5, 0x01, 0x43, 0xfe, 0xbf, 0x0f, 0x27, 0x00, 0x44, 0x19, 0xf0, + 0x27, 0xf4, 0x01, 0x49, 0x3c, 0xbf, 0x14, 0xf6, 0x01, 0x46, 0x9a, 0x1b, + 0xe4, 0x26, 0x40, 0x44, 0x60, 0xa1, 0xdb, 0xfa, 0x01, 0xa3, 0x0a, 0x44, + 0x1b, 0xeb, 0x5c, 0xf9, 0x01, 0xf2, 0x50, 0xf3, 0x41, 0x48, 0x42, 0x19, + 0x2e, 0x26, 0x00, 0xe8, 0x51, 0xf3, 0x01, 0x43, 0x35, 0x01, 0x9a, 0xf9, + 0x41, 0x45, 0x47, 0xe5, 0xe6, 0xf4, 0x01, 0xa7, 0x87, 0x14, 0x0b, 0xbd, + 0x9c, 0xa3, 0x0d, 0xac, 0x94, 0x0b, 0xae, 0x85, 0x0b, 0x47, 0x62, 0x82, + 0xce, 0xf4, 0x01, 0xb2, 0x96, 0x03, 0x02, 0xee, 0x00, 0xed, 0x02, 0x0a, + 0x67, 0xb2, 0x06, 0x48, 0x60, 0xcc, 0x3e, 0xf4, 0x41, 0x4c, 0xce, 0x28, + 0xf5, 0x1a, 0x81, 0xcc, 0x02, 0xac, 0x62, 0x4e, 0xeb, 0x79, 0xef, 0x1a, + 0x81, 0x4c, 0x4b, 0xc6, 0x66, 0xe6, 0x1a, 0x81, 0x2f, 0x07, 0xa0, 0xd5, + 0x01, 0xff, 0x4c, 0xce, 0x28, 0xe7, 0x1a, 0x81, 0x1d, 0x44, 0x3b, 0x2d, + 0xec, 0x1a, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x45, 0xf5, 0x2c, 0xee, 0x1a, + 0x01, 0x44, 0xd7, 0x02, 0xeb, 0x1a, 0xc1, 0x00, 0x46, 0xf4, 0x2c, 0xed, + 0x1a, 0x41, 0x46, 0xf4, 0x2c, 0xea, 0x1a, 0x41, 0x80, 0x01, 0xff, 0x45, + 0xf5, 0x2c, 0xe9, 0x1a, 0x01, 0x44, 0xd7, 0x02, 0xe5, 0x1a, 0xc1, 0x00, + 0x46, 0xf4, 0x2c, 0xe8, 0x1a, 0x41, 0x80, 0x01, 0xff, 0x45, 0xf5, 0x2c, + 0xf2, 0x1a, 0x01, 0x4a, 0x3f, 0xad, 0xf1, 0x1a, 0x41, 0x06, 0xed, 0x05, + 0x1d, 0x4f, 0x94, 0x71, 0xf4, 0x1a, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x45, + 0xf5, 0x2c, 0xf7, 0x1a, 0x01, 0x44, 0xd7, 0x02, 0xf3, 0x1a, 0xc1, 0x00, + 0x46, 0xf4, 0x2c, 0xf6, 0x1a, 0x41, 0xe1, 0xd5, 0x1a, 0x01, 0x42, 0x16, + 0x00, 0xcc, 0x1a, 0x01, 0xa3, 0xb0, 0x01, 0x42, 0xf0, 0x10, 0xc4, 0x1a, + 0x01, 0xe5, 0xd6, 0x1a, 0x01, 0xa6, 0x76, 0x42, 0x24, 0x02, 0xc9, 0x1a, + 0x01, 0x42, 0x22, 0x00, 0xc8, 0x1a, 0x01, 0xe9, 0xd7, 0x1a, 0x81, 0x61, + 0xab, 0x55, 0x42, 0x74, 0x00, 0xc2, 0x1a, 0x01, 0x42, 0x6c, 0x00, 0xc3, + 0x1a, 0x01, 0xae, 0x3d, 0xef, 0xd8, 0x1a, 0x01, 0xb0, 0x2d, 0x42, 0x71, + 0x00, 0xd2, 0x1a, 0x01, 0x42, 0x40, 0x06, 0xcb, 0x1a, 0x01, 0xb4, 0x15, + 0xf5, 0xd9, 0x1a, 0x81, 0x0c, 0x42, 0xf5, 0x0a, 0xc6, 0x1a, 0x01, 0x42, + 0x59, 0x00, 0xc5, 0x1a, 0x41, 0xe1, 0xda, 0x1a, 0x41, 0xe1, 0xce, 0x1a, + 0x01, 0x42, 0x22, 0x00, 0xcf, 0x1a, 0x41, 0xe1, 0xc0, 0x1a, 0x01, 0x42, + 0x22, 0x00, 0xd1, 0x1a, 0x41, 0xe1, 0xd0, 0x1a, 0x01, 0x42, 0x24, 0x02, + 0xc7, 0x1a, 0x41, 0xe1, 0xc1, 0x1a, 0x01, 0x42, 0x22, 0x00, 0xca, 0x1a, + 0x41, 0xe1, 0xdb, 0x1a, 0x41, 0xe1, 0xd3, 0x1a, 0x01, 0x05, 0xe8, 0x27, + 0x01, 0xff, 0xeb, 0xdd, 0x1a, 0x01, 0xec, 0xe1, 0x1a, 0x01, 0xed, 0xdf, + 0x1a, 0x01, 0xee, 0xe0, 0x1a, 0x81, 0x10, 0xf0, 0xdc, 0x1a, 0x01, 0xf4, + 0xde, 0x1a, 0x01, 0xf7, 0xe2, 0x1a, 0x01, 0xf9, 0xe4, 0x1a, 0x41, 0xe7, + 0xe3, 0x1a, 0x41, 0xe1, 0xcd, 0x1a, 0x01, 0x42, 0x22, 0x00, 0xd4, 0x1a, + 0x41, 0x80, 0x01, 0xff, 0x45, 0xf5, 0x2c, 0xf8, 0x1a, 0x01, 0x47, 0x64, + 0x4e, 0xf0, 0x1a, 0x41, 0xa5, 0x16, 0x09, 0xce, 0xba, 0x06, 0x4c, 0xb7, + 0x93, 0xc2, 0xf6, 0x41, 0x52, 0x19, 0x51, 0x91, 0x23, 0x00, 0x50, 0x26, + 0x68, 0x92, 0x23, 0x40, 0x48, 0x78, 0x20, 0xfd, 0x2b, 0x00, 0x49, 0x5a, + 0xbc, 0xf3, 0xf6, 0x41, 0xa1, 0xab, 0x07, 0x0b, 0xc0, 0x9b, 0x57, 0x43, + 0xa4, 0x2c, 0x9c, 0xf9, 0x01, 0xb4, 0x01, 0xff, 0x51, 0xdd, 0x56, 0x3d, + 0x30, 0x00, 0x46, 0x6e, 0xdc, 0xc4, 0xce, 0x81, 0x3b, 0x03, 0x8b, 0x0c, + 0x0c, 0x4c, 0x8b, 0x92, 0x50, 0x32, 0x00, 0x48, 0xb8, 0xcc, 0x89, 0xf3, + 0x41, 0x80, 0x06, 0x58, 0xd6, 0x29, 0x7d, 0x26, 0x40, 0x4c, 0x55, 0x48, + 0x02, 0x22, 0x00, 0x05, 0xed, 0x07, 0x01, 0xff, 0x48, 0xe8, 0xc3, 0x8c, + 0x00, 0x00, 0x44, 0xa5, 0x01, 0x8b, 0x00, 0x00, 0x47, 0x8d, 0x31, 0x8b, + 0x00, 0x00, 0x42, 0x50, 0x02, 0x8c, 0x00, 0x40, 0x49, 0x21, 0x2e, 0x7a, + 0xf7, 0x41, 0x06, 0xef, 0x06, 0x8e, 0x06, 0x07, 0x78, 0xd1, 0xc2, 0x04, + 0x0a, 0x7d, 0xab, 0xc3, 0x02, 0x12, 0x47, 0x53, 0xb2, 0x02, 0x06, 0xde, + 0x05, 0x55, 0x07, 0xff, 0x39, 0x01, 0xff, 0xa5, 0x42, 0xa6, 0x34, 0x48, + 0xc5, 0x53, 0x86, 0x24, 0x00, 0xb3, 0x20, 0xb4, 0x01, 0xff, 0x42, 0x92, + 0x01, 0x7d, 0x24, 0x00, 0x47, 0x95, 0x5a, 0x80, 0x24, 0x00, 0x02, 0x15, + 0x01, 0x01, 0xff, 0x43, 0xe8, 0x2b, 0x7f, 0x24, 0x00, 0x43, 0xcc, 0x1d, + 0x87, 0x24, 0x40, 0x48, 0x85, 0x51, 0x84, 0x24, 0x00, 0x46, 0x01, 0x26, + 0x83, 0x24, 0x40, 0x46, 0x08, 0x18, 0x82, 0x24, 0x00, 0x47, 0x0a, 0x5d, + 0x81, 0x24, 0x40, 0x47, 0x52, 0x25, 0x85, 0x24, 0x00, 0x45, 0xb4, 0x6f, + 0x7e, 0x24, 0x40, 0x0f, 0xe4, 0x05, 0x6d, 0x0d, 0x76, 0x08, 0x01, 0xff, + 0xe1, 0x9c, 0x24, 0x00, 0xe2, 0x9d, 0x24, 0x00, 0xe3, 0x9e, 0x24, 0x00, + 0xe4, 0x9f, 0x24, 0x00, 0xe5, 0xa0, 0x24, 0x00, 0xe6, 0xa1, 0x24, 0x00, + 0xe7, 0xa2, 0x24, 0x00, 0xe8, 0xa3, 0x24, 0x00, 0xe9, 0xa4, 0x24, 0x00, + 0xea, 0xa5, 0x24, 0x00, 0xeb, 0xa6, 0x24, 0x00, 0xec, 0xa7, 0x24, 0x00, + 0xed, 0xa8, 0x24, 0x00, 0xee, 0xa9, 0x24, 0x00, 0xef, 0xaa, 0x24, 0x00, + 0xf0, 0xab, 0x24, 0x00, 0xf1, 0xac, 0x24, 0x00, 0xf2, 0xad, 0x24, 0x00, + 0xf3, 0xae, 0x24, 0x00, 0xf4, 0xaf, 0x24, 0x00, 0xf5, 0xb0, 0x24, 0x00, + 0xf6, 0xb1, 0x24, 0x00, 0xf7, 0xb2, 0x24, 0x00, 0xf8, 0xb3, 0x24, 0x00, + 0xf9, 0xb4, 0x24, 0x00, 0xfa, 0xb5, 0x24, 0x40, 0xe1, 0x10, 0xf1, 0x01, + 0xe2, 0x11, 0xf1, 0x01, 0xe3, 0x12, 0xf1, 0x01, 0xe4, 0x13, 0xf1, 0x01, + 0xe5, 0x14, 0xf1, 0x01, 0xe6, 0x15, 0xf1, 0x01, 0xe7, 0x16, 0xf1, 0x01, + 0xe8, 0x17, 0xf1, 0x01, 0xe9, 0x18, 0xf1, 0x01, 0xea, 0x19, 0xf1, 0x01, + 0xeb, 0x1a, 0xf1, 0x01, 0xec, 0x1b, 0xf1, 0x01, 0xed, 0x1c, 0xf1, 0x01, + 0xee, 0x1d, 0xf1, 0x01, 0xef, 0x1e, 0xf1, 0x01, 0xf0, 0x1f, 0xf1, 0x01, + 0xf1, 0x20, 0xf1, 0x01, 0xf2, 0x21, 0xf1, 0x01, 0xf3, 0x22, 0xf1, 0x01, + 0xf4, 0x23, 0xf1, 0x01, 0xf5, 0x24, 0xf1, 0x01, 0xf6, 0x25, 0xf1, 0x01, + 0xf7, 0x26, 0xf1, 0x01, 0xf8, 0x27, 0xf1, 0x01, 0xf9, 0x28, 0xf1, 0x01, + 0xfa, 0x29, 0xf1, 0x41, 0x43, 0x70, 0x11, 0x1e, 0x32, 0x00, 0x44, 0xad, + 0xf0, 0x1d, 0x32, 0x40, 0x48, 0x40, 0xc3, 0x3f, 0x32, 0x00, 0xa3, 0xe5, + 0x01, 0xa5, 0xd0, 0x01, 0xa6, 0xad, 0x01, 0x44, 0x1d, 0xf0, 0x32, 0x32, + 0x00, 0x45, 0x08, 0xe8, 0x38, 0x32, 0x00, 0xad, 0x92, 0x01, 0xae, 0x83, + 0x01, 0x43, 0x0e, 0x0b, 0x20, 0x32, 0x00, 0x02, 0x88, 0x00, 0x60, 0xb3, + 0x23, 0xb4, 0x0f, 0xb7, 0x01, 0xff, 0x44, 0x8a, 0x00, 0x2c, 0x32, 0x00, + 0x43, 0xb4, 0x2d, 0x2d, 0x32, 0x40, 0x42, 0x92, 0x01, 0x29, 0x32, 0x00, + 0x44, 0x25, 0x01, 0x22, 0x32, 0x00, 0x42, 0x15, 0x02, 0x21, 0x32, 0x40, + 0xa5, 0x2d, 0x42, 0x01, 0x26, 0x25, 0x32, 0x00, 0x46, 0xa8, 0xde, 0x33, + 0x32, 0x00, 0x46, 0x0e, 0xdf, 0x35, 0x32, 0x00, 0xb4, 0x0d, 0xb5, 0x01, + 0xff, 0xee, 0x30, 0x32, 0x00, 0x47, 0xb2, 0xd4, 0x3c, 0x32, 0x40, 0x43, + 0x35, 0x01, 0x31, 0x32, 0x00, 0x43, 0xa6, 0xf4, 0x3b, 0x32, 0x40, 0x42, + 0x24, 0x00, 0x42, 0x32, 0x00, 0x43, 0xca, 0x1d, 0x26, 0x32, 0x40, 0x43, + 0x8c, 0x2d, 0x43, 0x32, 0x00, 0x47, 0x8f, 0x80, 0x39, 0x32, 0x00, 0xb3, + 0x01, 0xff, 0x45, 0xc1, 0x5c, 0x3e, 0x32, 0x00, 0xf4, 0x41, 0x32, 0x40, + 0x43, 0x2b, 0x05, 0x34, 0x32, 0x00, 0x43, 0xee, 0x07, 0x28, 0x32, 0x40, + 0x44, 0x94, 0x0f, 0x2e, 0x32, 0x00, 0x43, 0xcd, 0x02, 0x2a, 0x32, 0x40, + 0x47, 0xec, 0xd0, 0x40, 0x32, 0x00, 0xa9, 0x06, 0x43, 0xf6, 0x06, 0x23, + 0x32, 0x40, 0x47, 0x69, 0xd3, 0x36, 0x32, 0x00, 0x42, 0x88, 0x00, 0x2b, + 0x32, 0x00, 0x42, 0x32, 0x00, 0x24, 0x32, 0x40, 0x44, 0x53, 0x72, 0x2f, + 0x32, 0x00, 0x44, 0xc9, 0x00, 0x27, 0x32, 0x00, 0x49, 0xa2, 0xbc, 0x3d, + 0x32, 0x40, 0x43, 0x5f, 0x07, 0x3a, 0x32, 0x00, 0x4d, 0x09, 0x87, 0x37, + 0x32, 0x40, 0xa3, 0xa5, 0x01, 0x45, 0x71, 0xa5, 0x0d, 0x32, 0x80, 0x97, + 0x01, 0x45, 0x1e, 0xcc, 0x07, 0x32, 0x80, 0x89, 0x01, 0xab, 0x6d, 0x45, + 0xa8, 0xe8, 0x04, 0x32, 0x80, 0x60, 0x45, 0x1b, 0xe9, 0x01, 0x32, 0x80, + 0x53, 0xb0, 0x37, 0x45, 0x65, 0xea, 0x03, 0x32, 0x80, 0x2a, 0x44, 0x65, + 0xbf, 0x06, 0x32, 0x80, 0x1d, 0xb4, 0x01, 0xff, 0x46, 0x57, 0xd6, 0x0b, + 0x32, 0x80, 0x0d, 0x45, 0xe5, 0xcd, 0x02, 0x32, 0xc0, 0x00, 0x42, 0x19, + 0x00, 0x10, 0x32, 0x40, 0x42, 0x19, 0x00, 0x19, 0x32, 0x40, 0x42, 0x19, + 0x00, 0x14, 0x32, 0x40, 0x42, 0x19, 0x00, 0x11, 0x32, 0x40, 0x46, 0xd2, + 0xc2, 0x0c, 0x32, 0x80, 0x0d, 0x44, 0xe3, 0x84, 0x05, 0x32, 0xc0, 0x00, + 0x42, 0x19, 0x00, 0x13, 0x32, 0x40, 0x42, 0x19, 0x00, 0x1a, 0x32, 0x40, + 0x42, 0x19, 0x00, 0x0f, 0x32, 0x40, 0x42, 0x19, 0x00, 0x12, 0x32, 0x40, + 0x46, 0xca, 0xc2, 0x0a, 0x32, 0x80, 0x0d, 0x45, 0xdd, 0xa2, 0x00, 0x32, + 0xc0, 0x00, 0x42, 0x19, 0x00, 0x0e, 0x32, 0x40, 0x42, 0x19, 0x00, 0x18, + 0x32, 0x40, 0x42, 0x19, 0x00, 0x15, 0x32, 0x40, 0x42, 0x19, 0x00, 0x1b, + 0x32, 0x40, 0x46, 0xea, 0xcf, 0x09, 0x32, 0x80, 0x12, 0x44, 0xeb, 0xcf, + 0x08, 0x32, 0xc0, 0x00, 0x80, 0x01, 0xff, 0xe1, 0x16, 0x32, 0x00, 0xf5, + 0x1c, 0x32, 0x40, 0x42, 0x19, 0x00, 0x17, 0x32, 0x40, 0x45, 0x12, 0x0b, + 0x7b, 0x24, 0x00, 0xa6, 0x29, 0x44, 0xcf, 0x2a, 0x7c, 0x24, 0x00, 0x43, + 0x0e, 0x0b, 0x74, 0x24, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, + 0x01, 0x76, 0x24, 0x00, 0x42, 0x15, 0x02, 0x75, 0x24, 0x40, 0x44, 0xc9, + 0x1d, 0x7a, 0x24, 0x00, 0x42, 0x01, 0x26, 0x79, 0x24, 0x40, 0x43, 0xd2, + 0x05, 0x78, 0x24, 0x00, 0x43, 0xf6, 0x06, 0x77, 0x24, 0x40, 0x45, 0x3d, + 0xe5, 0x82, 0xfa, 0x01, 0x05, 0x81, 0x10, 0x1c, 0x05, 0x8c, 0x38, 0x01, + 0xff, 0x42, 0x1e, 0x00, 0x25, 0x22, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, + 0x51, 0x47, 0x05, 0xf2, 0x2a, 0x00, 0x4e, 0x78, 0x3e, 0xf3, 0x2a, 0x40, + 0x4a, 0xd7, 0x20, 0x29, 0x20, 0x00, 0x42, 0xa4, 0x0d, 0x0f, 0x2e, 0x00, + 0x47, 0xe6, 0x72, 0x4d, 0x2e, 0x40, 0x45, 0xe8, 0xe4, 0x5e, 0xf9, 0x01, + 0x47, 0x2f, 0xd0, 0x3c, 0xf4, 0x41, 0x43, 0x49, 0x0e, 0xb4, 0x26, 0x00, + 0xad, 0x01, 0xff, 0x80, 0xe8, 0x01, 0x4d, 0x5b, 0x88, 0x32, 0xf9, 0x01, + 0x06, 0x84, 0xe1, 0x01, 0xff, 0x02, 0x68, 0x00, 0x3a, 0x07, 0xff, 0x39, + 0x06, 0x56, 0xd9, 0x36, 0x78, 0x08, 0x41, 0xa6, 0x22, 0x43, 0x0e, 0x0b, + 0x79, 0x08, 0x01, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x7e, 0x08, 0x01, + 0x44, 0x25, 0x01, 0x7b, 0x08, 0x01, 0xb7, 0x01, 0xff, 0x44, 0xcb, 0x1d, + 0x7f, 0x08, 0x01, 0xef, 0x7a, 0x08, 0x41, 0x43, 0xd2, 0x05, 0x7d, 0x08, + 0x01, 0x43, 0xf6, 0x06, 0x7c, 0x08, 0x41, 0x53, 0x91, 0x49, 0x77, 0x08, + 0x01, 0x05, 0xee, 0x05, 0x01, 0xff, 0xa1, 0x85, 0x01, 0x44, 0x41, 0xef, + 0x61, 0x08, 0x01, 0x46, 0x23, 0x4a, 0x63, 0x08, 0x01, 0x49, 0xf1, 0xb8, + 0x6d, 0x08, 0x01, 0x45, 0xdd, 0xaa, 0x62, 0x08, 0x01, 0x42, 0xb0, 0x01, + 0x64, 0x08, 0x81, 0x60, 0x44, 0xcd, 0xf0, 0x6a, 0x08, 0x01, 0x46, 0x94, + 0xdd, 0x6b, 0x08, 0x01, 0x43, 0xb4, 0x05, 0x6c, 0x08, 0x01, 0x43, 0xdc, + 0x22, 0x6e, 0x08, 0x01, 0x42, 0x6f, 0x02, 0x71, 0x08, 0x01, 0x44, 0x4c, + 0xc8, 0x73, 0x08, 0x01, 0x44, 0x76, 0x66, 0x74, 0x08, 0x01, 0xb3, 0x20, + 0xb4, 0x12, 0x43, 0x8a, 0x8a, 0x65, 0x08, 0x01, 0x44, 0xa1, 0x52, 0x69, + 0x08, 0x01, 0x45, 0x9b, 0x52, 0x66, 0x08, 0x41, 0x42, 0xb7, 0x2d, 0x76, + 0x08, 0x01, 0x43, 0xda, 0x25, 0x68, 0x08, 0x41, 0xa1, 0x06, 0x43, 0x7a, + 0x16, 0x75, 0x08, 0x41, 0x43, 0xad, 0xea, 0x72, 0x08, 0x01, 0x44, 0x49, + 0xe4, 0x6f, 0x08, 0x41, 0x42, 0x53, 0x00, 0x67, 0x08, 0x41, 0x44, 0x18, + 0x3d, 0x60, 0x08, 0x01, 0x43, 0x7e, 0x1a, 0x70, 0x08, 0x41, 0x46, 0xd7, + 0x2f, 0x19, 0x2e, 0x00, 0x49, 0xbf, 0xb7, 0xf3, 0xfa, 0x01, 0x44, 0x0d, + 0x11, 0x34, 0xf3, 0x01, 0x47, 0xcd, 0xd6, 0xf4, 0xfa, 0x41, 0xa3, 0xcf, + 0x04, 0x06, 0xef, 0x06, 0x88, 0x04, 0x09, 0xe5, 0xbb, 0xd4, 0x03, 0x07, + 0xff, 0x39, 0x9c, 0x03, 0x05, 0x5a, 0x03, 0x93, 0x01, 0x07, 0x60, 0xd7, + 0x01, 0xff, 0xa1, 0x5b, 0xa5, 0x47, 0xa9, 0x33, 0xaf, 0x1f, 0xb5, 0x0b, + 0xb7, 0x01, 0xff, 0xe2, 0x18, 0x6b, 0x01, 0xf6, 0x19, 0x6b, 0x41, 0xa1, + 0x08, 0xe2, 0x06, 0x6b, 0x01, 0xf6, 0x07, 0x6b, 0x41, 0xe2, 0x10, 0x6b, + 0x01, 0xf6, 0x11, 0x6b, 0x41, 0xe2, 0x12, 0x6b, 0x01, 0xaf, 0x04, 0xf6, + 0x13, 0x6b, 0x41, 0xe2, 0x0c, 0x6b, 0x01, 0xf6, 0x0d, 0x6b, 0x41, 0xa1, + 0x08, 0xe2, 0x02, 0x6b, 0x01, 0xf6, 0x03, 0x6b, 0x41, 0xe2, 0x14, 0x6b, + 0x01, 0xf6, 0x15, 0x6b, 0x41, 0xe2, 0x08, 0x6b, 0x01, 0xa5, 0x04, 0xf6, + 0x09, 0x6b, 0x41, 0xe2, 0x00, 0x6b, 0x01, 0xf6, 0x01, 0x6b, 0x41, 0xa1, + 0x27, 0xe2, 0x16, 0x6b, 0x01, 0xa9, 0x19, 0xb5, 0x0f, 0xf6, 0x17, 0x6b, + 0x01, 0xb7, 0x01, 0xff, 0xe2, 0x0e, 0x6b, 0x01, 0xf6, 0x0f, 0x6b, 0x41, + 0xe2, 0x04, 0x6b, 0x01, 0xf6, 0x05, 0x6b, 0x41, 0xe2, 0x0a, 0x6b, 0x01, + 0xf6, 0x0b, 0x6b, 0x41, 0xe2, 0x1a, 0x6b, 0x01, 0xf6, 0x1b, 0x6b, 0x41, + 0x42, 0x2f, 0x08, 0x6c, 0x6b, 0x01, 0x04, 0xea, 0xbb, 0xc3, 0x01, 0xa8, + 0xb4, 0x01, 0x46, 0xbc, 0xdc, 0x43, 0x6b, 0x01, 0x43, 0xa3, 0x0d, 0x70, + 0x6b, 0x01, 0xad, 0x8f, 0x01, 0xae, 0x80, 0x01, 0xb4, 0x6c, 0x04, 0x0d, + 0xf3, 0x39, 0xb8, 0x06, 0x48, 0x10, 0xcd, 0x67, 0x6b, 0x41, 0x43, 0xa6, + 0x2f, 0x44, 0x6b, 0x01, 0x43, 0xb4, 0x4a, 0x6a, 0x6b, 0x01, 0xb9, 0x01, + 0xff, 0x04, 0x1d, 0x21, 0x06, 0x42, 0xcd, 0x02, 0x64, 0x6b, 0x41, 0x44, + 0xb1, 0xef, 0x3f, 0x6b, 0x01, 0x45, 0x48, 0xe9, 0x3c, 0x6b, 0x01, 0x43, + 0xef, 0x49, 0x3d, 0x6b, 0x01, 0x43, 0x96, 0x09, 0x3e, 0x6b, 0x41, 0x44, + 0xb9, 0xef, 0x3b, 0x6b, 0x01, 0x43, 0x20, 0x4b, 0x63, 0x6b, 0x01, 0x44, + 0x91, 0xf1, 0x42, 0x6b, 0x01, 0x44, 0x91, 0xf2, 0x40, 0x6b, 0x01, 0xb4, + 0x01, 0xff, 0xa8, 0x06, 0x49, 0x33, 0xbf, 0x38, 0x6b, 0x41, 0x43, 0xb4, + 0x4a, 0x3a, 0x6b, 0x01, 0x42, 0x14, 0x05, 0x37, 0x6b, 0x41, 0x42, 0x5f, + 0x24, 0x6f, 0x6b, 0x01, 0x4e, 0x47, 0x78, 0x66, 0x6b, 0x01, 0x4a, 0xc5, + 0xb3, 0x6d, 0x6b, 0x41, 0x43, 0x8e, 0xf4, 0x69, 0x6b, 0x01, 0x43, 0xa3, + 0xf4, 0x6b, 0x6b, 0x41, 0x04, 0xc7, 0xb3, 0x06, 0x42, 0xef, 0x02, 0x71, + 0x6b, 0x41, 0x44, 0xbd, 0xf2, 0x41, 0x6b, 0x01, 0x45, 0x87, 0xeb, 0x6e, + 0x6b, 0x41, 0x42, 0xc3, 0x01, 0x65, 0x6b, 0x01, 0x43, 0x65, 0x31, 0x68, + 0x6b, 0x41, 0xa3, 0x28, 0x52, 0x15, 0x52, 0x72, 0x6b, 0x01, 0x48, 0xe8, + 0xc8, 0x77, 0x6b, 0x01, 0x48, 0xf8, 0xc9, 0x76, 0x6b, 0x01, 0xb4, 0x01, + 0xff, 0x47, 0xed, 0xd5, 0x45, 0x6b, 0x01, 0x43, 0xd0, 0xf4, 0x74, 0x6b, + 0xc1, 0x00, 0x45, 0xa0, 0xe1, 0x75, 0x6b, 0x41, 0x44, 0x4a, 0x18, 0x39, + 0x6b, 0x01, 0x4a, 0x7b, 0xb2, 0x73, 0x6b, 0x41, 0x07, 0x71, 0x11, 0x25, + 0x48, 0xf5, 0x3b, 0x5e, 0x6b, 0x01, 0xb4, 0x01, 0xff, 0x02, 0x92, 0x01, + 0x06, 0x48, 0x68, 0xca, 0x61, 0x6b, 0x41, 0x80, 0x04, 0xf3, 0x5b, 0x6b, + 0x41, 0x48, 0x18, 0xc4, 0x60, 0x6b, 0x01, 0x49, 0xed, 0x7c, 0x5d, 0x6b, + 0x41, 0x49, 0xf4, 0x3b, 0x5f, 0x6b, 0x01, 0xf3, 0x5c, 0x6b, 0x41, 0x43, + 0x84, 0xcb, 0x35, 0x6b, 0x01, 0xab, 0x1b, 0xb3, 0x0f, 0xb4, 0x01, 0xff, + 0x43, 0xa2, 0xb2, 0x36, 0x6b, 0x01, 0x42, 0x3d, 0x01, 0x30, 0x6b, 0x41, + 0xef, 0x31, 0x6b, 0x01, 0x43, 0x7b, 0xb2, 0x34, 0x6b, 0x41, 0x42, 0xed, + 0x00, 0x32, 0x6b, 0x01, 0x43, 0xe8, 0x4b, 0x33, 0x6b, 0x41, 0x45, 0x12, + 0x0b, 0x58, 0x6b, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x59, 0x6b, 0x01, + 0x43, 0x0e, 0x0b, 0x51, 0x6b, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, + 0x1e, 0x50, 0x6b, 0x41, 0x44, 0x25, 0x01, 0x53, 0x6b, 0x01, 0x42, 0x15, + 0x02, 0x52, 0x6b, 0x41, 0x44, 0xc9, 0x1d, 0x57, 0x6b, 0x01, 0x42, 0x01, + 0x26, 0x56, 0x6b, 0x41, 0x43, 0xd2, 0x05, 0x55, 0x6b, 0x01, 0x43, 0xf6, + 0x06, 0x54, 0x6b, 0x41, 0x09, 0x43, 0xbb, 0x86, 0x01, 0x09, 0x28, 0x33, + 0x01, 0xff, 0x42, 0x5f, 0x24, 0x2d, 0x6b, 0x01, 0xa3, 0x6d, 0xa8, 0x59, + 0x43, 0x5e, 0x24, 0x1e, 0x6b, 0x01, 0x43, 0x0a, 0xe1, 0x26, 0x6b, 0x01, + 0xae, 0x24, 0x45, 0xed, 0xe9, 0x2a, 0x6b, 0x01, 0x44, 0x31, 0xf2, 0x23, + 0x6b, 0x01, 0x43, 0x74, 0x58, 0x21, 0x6b, 0x01, 0x43, 0xb5, 0xf4, 0x1c, + 0x6b, 0x01, 0x43, 0xca, 0xf4, 0x2e, 0x6b, 0x01, 0x43, 0xe3, 0x80, 0x24, + 0x6b, 0x41, 0x42, 0x5f, 0x24, 0x2c, 0x6b, 0x01, 0x44, 0x61, 0xef, 0x28, + 0x6b, 0x01, 0x43, 0x39, 0xcf, 0x22, 0x6b, 0x01, 0x43, 0x5e, 0x24, 0x20, + 0x6b, 0x01, 0xb4, 0x01, 0xff, 0x43, 0xd9, 0x7d, 0x2b, 0x6b, 0x01, 0x43, + 0xa1, 0x91, 0x1d, 0x6b, 0x41, 0x42, 0x5f, 0x24, 0x1f, 0x6b, 0x01, 0x43, + 0x5e, 0x24, 0x25, 0x6b, 0x01, 0x43, 0x71, 0x5c, 0x29, 0x6b, 0x41, 0x42, + 0x5f, 0x24, 0x2f, 0x6b, 0x01, 0x43, 0xd9, 0x7d, 0x27, 0x6b, 0x41, 0x43, + 0x40, 0xf4, 0x8b, 0x6b, 0x01, 0x02, 0x22, 0x00, 0x6e, 0xab, 0x5a, 0xac, + 0x4c, 0x44, 0x45, 0xf1, 0x84, 0x6b, 0x01, 0x44, 0x0d, 0xf2, 0x87, 0x6b, + 0x01, 0xb4, 0x23, 0xb6, 0x15, 0x45, 0x81, 0xec, 0x81, 0x6b, 0x01, 0xb9, + 0x01, 0xff, 0x42, 0x55, 0x19, 0x8c, 0x6b, 0x01, 0x43, 0x2e, 0xf4, 0x7e, + 0x6b, 0x41, 0x42, 0x55, 0x19, 0x8a, 0x6b, 0x01, 0x42, 0x11, 0xcd, 0x8f, + 0x6b, 0x41, 0x43, 0x4f, 0xf4, 0x85, 0x6b, 0x01, 0xb3, 0x01, 0xff, 0x42, + 0x5c, 0x00, 0x86, 0x6b, 0x01, 0x44, 0xc6, 0xb3, 0x7d, 0x6b, 0x01, 0x42, + 0x5b, 0x1a, 0x8d, 0x6b, 0x41, 0x43, 0xec, 0xf3, 0x80, 0x6b, 0x01, 0x42, + 0x5f, 0x03, 0x7f, 0x6b, 0x41, 0x43, 0xf3, 0x14, 0x88, 0x6b, 0x01, 0x42, + 0xcd, 0x02, 0x82, 0x6b, 0x01, 0x42, 0x2c, 0x5c, 0x8e, 0x6b, 0x41, 0xed, + 0x89, 0x6b, 0x01, 0x42, 0x11, 0xcd, 0x83, 0x6b, 0x41, 0xe5, 0xcf, 0xf5, + 0x81, 0x06, 0x43, 0xb5, 0x2d, 0xd4, 0xf6, 0x41, 0x80, 0x08, 0xf2, 0xdf, + 0xf4, 0x01, 0xf3, 0xd0, 0xf5, 0x41, 0x49, 0xcd, 0xb8, 0xc4, 0xf4, 0x01, + 0x06, 0xca, 0x04, 0x01, 0xff, 0x4b, 0xa4, 0x9d, 0xdf, 0xf5, 0x01, 0x43, + 0x73, 0x0b, 0xc3, 0xf4, 0x41, 0xa2, 0xbe, 0x2e, 0xa3, 0xda, 0x2d, 0x43, + 0xef, 0x0a, 0x62, 0xf3, 0x01, 0x4e, 0xd7, 0x77, 0xe2, 0xf3, 0x81, 0xc6, + 0x2d, 0xa7, 0xf9, 0x2b, 0x47, 0x19, 0xc9, 0x26, 0x21, 0x00, 0x47, 0xe8, + 0xd1, 0xe2, 0xf6, 0x01, 0x4b, 0x1c, 0x93, 0x4c, 0xf4, 0x01, 0xac, 0xd8, + 0x12, 0x48, 0x06, 0xbd, 0x49, 0xf5, 0x01, 0xae, 0x80, 0x12, 0xb0, 0xcf, + 0x10, 0xb2, 0xb3, 0x0b, 0xb3, 0xfd, 0x05, 0x02, 0xee, 0x05, 0xab, 0x02, + 0xb5, 0x46, 0x03, 0x32, 0x00, 0x10, 0x42, 0x95, 0x03, 0x89, 0xf9, 0x01, + 0xf8, 0x02, 0xf4, 0x01, 0x45, 0x9a, 0xec, 0xaa, 0xf9, 0x41, 0x4b, 0xc8, + 0x9c, 0x75, 0xf9, 0x01, 0xac, 0x01, 0xff, 0x42, 0xe5, 0x05, 0xd7, 0xf5, + 0x81, 0x06, 0x43, 0xee, 0x07, 0x3e, 0x20, 0x40, 0x05, 0x2b, 0x30, 0x01, + 0xff, 0x4d, 0x35, 0x58, 0xbc, 0x2b, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, + 0x51, 0x31, 0x58, 0xbb, 0x2b, 0x00, 0x47, 0x3b, 0x58, 0xba, 0x2b, 0x40, + 0x48, 0x90, 0xc8, 0x25, 0x21, 0x00, 0xb4, 0x01, 0xff, 0x48, 0x50, 0xc4, + 0xe4, 0xf4, 0x01, 0x06, 0x1b, 0x11, 0x01, 0xff, 0x4a, 0xf4, 0x2b, 0x2d, + 0x27, 0x00, 0x06, 0xef, 0x06, 0x82, 0x01, 0x4b, 0x1b, 0x61, 0x19, 0x27, + 0x00, 0x07, 0xde, 0x05, 0x06, 0x4a, 0x65, 0x2e, 0x9d, 0x26, 0x40, 0x0e, + 0xe5, 0x05, 0x06, 0x44, 0x96, 0x10, 0x1f, 0x27, 0x40, 0xe1, 0xd6, 0xcc, + 0x01, 0xe2, 0xd7, 0xcc, 0x01, 0xe3, 0xd8, 0xcc, 0x01, 0xe4, 0xd9, 0xcc, + 0x01, 0xe5, 0xda, 0xcc, 0x01, 0xe6, 0xdb, 0xcc, 0x01, 0xe7, 0xdc, 0xcc, + 0x01, 0xe8, 0xdd, 0xcc, 0x01, 0xe9, 0xde, 0xcc, 0x01, 0xea, 0xdf, 0xcc, + 0x01, 0xeb, 0xe0, 0xcc, 0x01, 0xec, 0xe1, 0xcc, 0x01, 0xed, 0xe2, 0xcc, + 0x01, 0xee, 0xe3, 0xcc, 0x01, 0xef, 0xe4, 0xcc, 0x01, 0xf0, 0xe5, 0xcc, + 0x01, 0xf1, 0xe6, 0xcc, 0x01, 0xf2, 0xe7, 0xcc, 0x01, 0xf3, 0xe8, 0xcc, + 0x01, 0xf4, 0xe9, 0xcc, 0x01, 0xf5, 0xea, 0xcc, 0x01, 0xf6, 0xeb, 0xcc, + 0x01, 0xf7, 0xec, 0xcc, 0x01, 0xf8, 0xed, 0xcc, 0x01, 0xf9, 0xee, 0xcc, + 0x01, 0xfa, 0xef, 0xcc, 0x41, 0x45, 0x12, 0x0b, 0xf8, 0xcc, 0x01, 0xa6, + 0x2e, 0x44, 0xcf, 0x2a, 0xf9, 0xcc, 0x01, 0x43, 0x0e, 0x0b, 0xf1, 0xcc, + 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xf0, 0xcc, 0x41, 0x44, + 0x25, 0x01, 0xf3, 0xcc, 0x01, 0x42, 0x15, 0x02, 0xf2, 0xcc, 0x41, 0x44, + 0xc9, 0x1d, 0xf7, 0xcc, 0x01, 0x42, 0x01, 0x26, 0xf6, 0xcc, 0x41, 0x43, + 0xd2, 0x05, 0xf5, 0xcc, 0x01, 0x43, 0xf6, 0x06, 0xf4, 0xcc, 0x41, 0x42, + 0x33, 0x00, 0xa6, 0xf9, 0x01, 0x0b, 0xb1, 0xa0, 0x01, 0xff, 0x11, 0xfe, + 0x57, 0xe4, 0x02, 0x0d, 0x1e, 0x5a, 0xd3, 0x02, 0x48, 0x30, 0xc8, 0x2e, + 0xed, 0x01, 0x07, 0xff, 0x39, 0x01, 0xff, 0x45, 0x12, 0x0b, 0x08, 0xed, + 0x81, 0xa7, 0x02, 0xa6, 0xd9, 0x01, 0x44, 0xcf, 0x2a, 0x09, 0xed, 0x81, + 0xb6, 0x01, 0x43, 0x0e, 0x0b, 0x01, 0xed, 0x81, 0x9f, 0x01, 0xb3, 0x59, + 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x0a, 0xed, 0x81, 0x49, 0xa8, 0x24, + 0xb7, 0x01, 0xff, 0x44, 0xcb, 0x1d, 0x0b, 0xed, 0x81, 0x14, 0xef, 0x02, + 0xed, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x14, 0xed, 0x01, + 0x48, 0x40, 0x5e, 0x1d, 0xed, 0x41, 0x49, 0x3f, 0x5e, 0x26, 0xed, 0x41, + 0x44, 0x7b, 0x11, 0x0c, 0xed, 0x81, 0x16, 0x43, 0x26, 0x01, 0x03, 0xed, + 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x15, 0xed, 0x01, 0x48, + 0x40, 0x5e, 0x1e, 0xed, 0x41, 0x49, 0x3f, 0x5e, 0x27, 0xed, 0x41, 0x49, + 0x3f, 0x5e, 0x25, 0xed, 0x41, 0x44, 0xc9, 0x1d, 0x07, 0xed, 0x81, 0x22, + 0x42, 0x01, 0x26, 0x06, 0xed, 0xc1, 0x00, 0x80, 0x0d, 0x42, 0x7d, 0x11, + 0x0f, 0xed, 0xc1, 0x00, 0x49, 0x3f, 0x5e, 0x2a, 0xed, 0x41, 0x47, 0x71, + 0x11, 0x18, 0xed, 0x01, 0x48, 0x40, 0x5e, 0x21, 0xed, 0x41, 0x80, 0x0d, + 0x42, 0x7d, 0x11, 0x10, 0xed, 0xc1, 0x00, 0x49, 0x3f, 0x5e, 0x2b, 0xed, + 0x41, 0x47, 0x71, 0x11, 0x19, 0xed, 0x01, 0x48, 0x40, 0x5e, 0x22, 0xed, + 0x41, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x13, 0xed, 0x01, 0x48, 0x40, + 0x5e, 0x1c, 0xed, 0x41, 0x80, 0x0d, 0x42, 0x7d, 0x11, 0x12, 0xed, 0xc1, + 0x00, 0x49, 0x3f, 0x5e, 0x2d, 0xed, 0x41, 0x47, 0x71, 0x11, 0x1b, 0xed, + 0x01, 0x48, 0x40, 0x5e, 0x24, 0xed, 0x41, 0xa9, 0x26, 0xaf, 0x01, 0xff, + 0x43, 0x7c, 0x11, 0x0d, 0xed, 0x81, 0x16, 0x42, 0x42, 0x00, 0x04, 0xed, + 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x16, 0xed, 0x01, 0x48, + 0x40, 0x5e, 0x1f, 0xed, 0x41, 0x49, 0x3f, 0x5e, 0x28, 0xed, 0x41, 0x43, + 0x52, 0x4d, 0x0e, 0xed, 0x81, 0x16, 0x42, 0x32, 0x00, 0x05, 0xed, 0xc1, + 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x17, 0xed, 0x01, 0x48, 0x40, + 0x5e, 0x20, 0xed, 0x41, 0x49, 0x3f, 0x5e, 0x29, 0xed, 0x41, 0x80, 0x0b, + 0xf9, 0x11, 0xed, 0xc1, 0x00, 0x49, 0x3f, 0x5e, 0x2c, 0xed, 0x41, 0x47, + 0x71, 0x11, 0x1a, 0xed, 0x01, 0x48, 0x40, 0x5e, 0x23, 0xed, 0x41, 0x44, + 0x22, 0x00, 0x3c, 0xed, 0x01, 0x45, 0xe6, 0xdf, 0x3d, 0xed, 0x41, 0x45, + 0x12, 0x0b, 0x35, 0xed, 0x01, 0xa6, 0x3e, 0x44, 0xcf, 0x2a, 0x36, 0xed, + 0x01, 0xb3, 0x23, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x37, 0xed, 0x81, + 0x13, 0x44, 0x25, 0x01, 0x30, 0xed, 0x01, 0x42, 0x15, 0x02, 0x2f, 0xed, + 0xc1, 0x00, 0x49, 0x3f, 0x5e, 0x3a, 0xed, 0x41, 0x49, 0x3f, 0x5e, 0x3b, + 0xed, 0x41, 0x44, 0xc9, 0x1d, 0x34, 0xed, 0x01, 0x42, 0x01, 0x26, 0x33, + 0xed, 0xc1, 0x00, 0x48, 0x70, 0x11, 0x39, 0xed, 0x41, 0x43, 0xd2, 0x05, + 0x32, 0xed, 0x01, 0x43, 0xf6, 0x06, 0x31, 0xed, 0xc1, 0x00, 0x48, 0x70, + 0x11, 0x38, 0xed, 0x41, 0x04, 0x22, 0x43, 0xfe, 0x01, 0x06, 0xfa, 0xdd, + 0x01, 0xff, 0x06, 0xef, 0x06, 0xb2, 0x01, 0x07, 0xec, 0x05, 0x01, 0xff, + 0xe1, 0x96, 0x04, 0x81, 0x9d, 0x01, 0x42, 0x16, 0x00, 0x81, 0x04, 0x01, + 0x44, 0x5d, 0xef, 0x8b, 0x04, 0x01, 0xa4, 0x82, 0x01, 0xe5, 0x97, 0x04, + 0x81, 0x79, 0x42, 0x0c, 0x08, 0x8d, 0x04, 0x01, 0x42, 0x24, 0x02, 0x8c, + 0x04, 0x01, 0x42, 0x22, 0x00, 0x94, 0x04, 0x01, 0xe9, 0x98, 0x04, 0x01, + 0x42, 0x56, 0x19, 0x83, 0x04, 0x01, 0xab, 0x4f, 0x44, 0xff, 0xee, 0x90, + 0x04, 0x01, 0x44, 0x35, 0xf1, 0x91, 0x04, 0x01, 0x44, 0xa9, 0xf1, 0x92, + 0x04, 0x01, 0xef, 0x99, 0x04, 0x81, 0x34, 0x44, 0x1a, 0xea, 0x8e, 0x04, + 0x01, 0x42, 0x71, 0x00, 0x87, 0x04, 0x01, 0xb3, 0x1c, 0x42, 0x12, 0x00, + 0x82, 0x04, 0x01, 0xf5, 0x9a, 0x04, 0x01, 0x43, 0x8a, 0x8a, 0x93, 0x04, + 0x01, 0x42, 0xed, 0x26, 0x84, 0x04, 0x01, 0x42, 0xbc, 0x22, 0x95, 0x04, + 0x41, 0xe1, 0x88, 0x04, 0x01, 0x44, 0x45, 0xf0, 0x89, 0x04, 0x41, 0xef, + 0x9d, 0x04, 0x41, 0x43, 0x1a, 0xc3, 0x8f, 0x04, 0x01, 0x42, 0x22, 0x00, + 0x85, 0x04, 0x41, 0xe5, 0x9c, 0x04, 0x41, 0x43, 0x2d, 0x13, 0x86, 0x04, + 0x01, 0x42, 0x22, 0x00, 0x8a, 0x04, 0x41, 0xe1, 0x9b, 0x04, 0x01, 0x43, + 0x68, 0x00, 0x80, 0x04, 0x41, 0x45, 0x12, 0x0b, 0xa8, 0x04, 0x01, 0xa6, + 0x2e, 0x44, 0xcf, 0x2a, 0xa9, 0x04, 0x01, 0x43, 0x0e, 0x0b, 0xa1, 0x04, + 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xa0, 0x04, 0x41, 0x44, + 0x25, 0x01, 0xa3, 0x04, 0x01, 0x42, 0x15, 0x02, 0xa2, 0x04, 0x41, 0x44, + 0xc9, 0x1d, 0xa7, 0x04, 0x01, 0x42, 0x01, 0x26, 0xa6, 0x04, 0x41, 0x43, + 0xd2, 0x05, 0xa5, 0x04, 0x01, 0x43, 0xf6, 0x06, 0xa4, 0x04, 0x41, 0x0f, + 0xe4, 0x05, 0xd8, 0x01, 0x0d, 0x76, 0x08, 0x01, 0xff, 0xe1, 0xd8, 0x04, + 0x81, 0xc0, 0x01, 0x43, 0x63, 0x09, 0xdc, 0x04, 0x01, 0x43, 0x91, 0x20, + 0xdd, 0x04, 0x01, 0x43, 0xe7, 0x4b, 0xf5, 0x04, 0x01, 0xe5, 0xdf, 0x04, + 0x81, 0x81, 0x01, 0x43, 0x0e, 0x9c, 0xf9, 0x04, 0x01, 0xa8, 0x6f, 0xe9, + 0xe3, 0x04, 0x01, 0xab, 0x59, 0x42, 0x74, 0x00, 0xe7, 0x04, 0x01, 0x42, + 0x6c, 0x00, 0xe8, 0x04, 0x01, 0x42, 0x2a, 0x05, 0xe9, 0x04, 0x01, 0xef, + 0xea, 0x04, 0x81, 0x3c, 0x42, 0xbb, 0x09, 0xec, 0x04, 0x01, 0xb3, 0x2a, + 0xb4, 0x17, 0xf5, 0xf6, 0x04, 0x01, 0x42, 0xa9, 0x01, 0xf7, 0x04, 0x01, + 0xba, 0x01, 0xff, 0xe1, 0xfa, 0x04, 0x01, 0x42, 0x22, 0x00, 0xfb, 0x04, + 0x41, 0xe1, 0xf0, 0x04, 0x01, 0xb3, 0x01, 0xff, 0xe1, 0xf2, 0x04, 0x01, + 0x42, 0x22, 0x00, 0xf4, 0x04, 0x41, 0xe1, 0xee, 0x04, 0x01, 0x42, 0x22, + 0x00, 0xef, 0x04, 0x41, 0x42, 0x9e, 0x01, 0xeb, 0x04, 0x41, 0xe1, 0xe4, + 0x04, 0x01, 0x42, 0x22, 0x00, 0xf8, 0x04, 0x01, 0x42, 0xbc, 0x22, 0xe6, + 0x04, 0x41, 0xe1, 0xe1, 0x04, 0x01, 0x42, 0xbc, 0x22, 0xe2, 0x04, 0x41, + 0xa8, 0x06, 0x42, 0x9e, 0x01, 0xe0, 0x04, 0x41, 0x43, 0x91, 0x20, 0xde, + 0x04, 0x01, 0x42, 0x1b, 0x02, 0xe5, 0x04, 0x01, 0x42, 0xbb, 0x09, 0xed, + 0x04, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0xf1, 0x04, 0x01, 0x42, 0x40, 0x06, + 0xf3, 0x04, 0x41, 0xe8, 0xdb, 0x04, 0x01, 0xe9, 0xd9, 0x04, 0xc1, 0x00, + 0xee, 0xda, 0x04, 0x41, 0xe1, 0xb0, 0x04, 0x81, 0xc0, 0x01, 0x43, 0x63, + 0x09, 0xb4, 0x04, 0x01, 0x43, 0x91, 0x20, 0xb5, 0x04, 0x01, 0x43, 0xe7, + 0x4b, 0xcd, 0x04, 0x01, 0xe5, 0xb7, 0x04, 0x81, 0x81, 0x01, 0x43, 0x0e, + 0x9c, 0xd1, 0x04, 0x01, 0xa8, 0x6f, 0xe9, 0xbb, 0x04, 0x01, 0xab, 0x59, + 0x42, 0x74, 0x00, 0xbf, 0x04, 0x01, 0x42, 0x6c, 0x00, 0xc0, 0x04, 0x01, + 0x42, 0x2a, 0x05, 0xc1, 0x04, 0x01, 0xef, 0xc2, 0x04, 0x81, 0x3c, 0x42, + 0xbb, 0x09, 0xc4, 0x04, 0x01, 0xb3, 0x2a, 0xb4, 0x17, 0xf5, 0xce, 0x04, + 0x01, 0x42, 0xa9, 0x01, 0xcf, 0x04, 0x01, 0xba, 0x01, 0xff, 0xe1, 0xd2, + 0x04, 0x01, 0x42, 0x22, 0x00, 0xd3, 0x04, 0x41, 0xe1, 0xc8, 0x04, 0x01, + 0xb3, 0x01, 0xff, 0xe1, 0xca, 0x04, 0x01, 0x42, 0x22, 0x00, 0xcc, 0x04, + 0x41, 0xe1, 0xc6, 0x04, 0x01, 0x42, 0x22, 0x00, 0xc7, 0x04, 0x41, 0x42, + 0x9e, 0x01, 0xc3, 0x04, 0x41, 0xe1, 0xbc, 0x04, 0x01, 0x42, 0x22, 0x00, + 0xd0, 0x04, 0x01, 0x42, 0xbc, 0x22, 0xbe, 0x04, 0x41, 0xe1, 0xb9, 0x04, + 0x01, 0x42, 0xbc, 0x22, 0xba, 0x04, 0x41, 0xa8, 0x06, 0x42, 0x9e, 0x01, + 0xb8, 0x04, 0x41, 0x43, 0x91, 0x20, 0xb6, 0x04, 0x01, 0x42, 0x1b, 0x02, + 0xbd, 0x04, 0x01, 0x42, 0xbb, 0x09, 0xc5, 0x04, 0x01, 0xb4, 0x01, 0xff, + 0xe1, 0xc9, 0x04, 0x01, 0x42, 0x40, 0x06, 0xcb, 0x04, 0x41, 0xe8, 0xb3, + 0x04, 0x01, 0xe9, 0xb1, 0x04, 0xc1, 0x00, 0xee, 0xb2, 0x04, 0x41, 0x50, + 0xa6, 0x60, 0xc7, 0x27, 0x00, 0x03, 0x1c, 0x01, 0xf8, 0x04, 0xa3, 0xeb, + 0x04, 0xa9, 0x21, 0x05, 0xf6, 0x11, 0x11, 0x03, 0x2a, 0x08, 0x01, 0xff, + 0x49, 0xda, 0xb7, 0x26, 0x26, 0x00, 0x55, 0x89, 0x21, 0x42, 0xcc, 0x41, + 0x50, 0x7f, 0x24, 0x3e, 0xfd, 0x00, 0x51, 0xd2, 0x21, 0x3f, 0xfd, 0x40, + 0x48, 0xe2, 0x2f, 0xb6, 0x22, 0x00, 0x03, 0xa1, 0x32, 0x01, 0xff, 0xa1, + 0xae, 0x04, 0x06, 0xef, 0x06, 0xe7, 0x03, 0x09, 0x1e, 0x5a, 0xb5, 0x03, + 0x46, 0x1c, 0xdd, 0x70, 0x0b, 0x00, 0x07, 0xec, 0x05, 0x79, 0x05, 0x5a, + 0x03, 0x44, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x31, 0xe5, 0x47, 0x0b, + 0x00, 0xe9, 0x3f, 0x0b, 0x80, 0x24, 0xef, 0x4b, 0x0b, 0x00, 0xf5, 0x41, + 0x0b, 0x80, 0x17, 0x08, 0x22, 0xc1, 0x01, 0xff, 0xec, 0x62, 0x0b, 0x80, + 0x09, 0xf2, 0x43, 0x0b, 0xc0, 0x00, 0xf2, 0x44, 0x0b, 0x40, 0xec, 0x63, + 0x0b, 0x40, 0xf5, 0x42, 0x0b, 0x40, 0xe9, 0x40, 0x0b, 0x40, 0xe1, 0x3e, + 0x0b, 0x00, 0xe9, 0x48, 0x0b, 0x00, 0xf5, 0x4c, 0x0b, 0x40, 0xa1, 0x23, + 0x4b, 0xd7, 0x23, 0x01, 0x0b, 0x00, 0x45, 0x3f, 0x3f, 0x3c, 0x0b, 0x00, + 0x48, 0x82, 0x8a, 0x55, 0x0b, 0x00, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, + 0xe5, 0x23, 0x4d, 0x0b, 0x00, 0x45, 0xec, 0x4b, 0x03, 0x0b, 0x40, 0x47, + 0x3d, 0x16, 0x02, 0x0b, 0x00, 0x47, 0xaf, 0x88, 0x3d, 0x0b, 0x40, 0xe1, + 0x05, 0x0b, 0x80, 0xa0, 0x02, 0xa2, 0x93, 0x02, 0xa3, 0x86, 0x02, 0xa4, + 0xed, 0x01, 0xe5, 0x0f, 0x0b, 0x00, 0xa7, 0xdc, 0x01, 0x42, 0x22, 0x00, + 0x39, 0x0b, 0x00, 0xe9, 0x07, 0x0b, 0x80, 0xcc, 0x01, 0xaa, 0xbf, 0x01, + 0xab, 0xb2, 0x01, 0xac, 0xa5, 0x01, 0x42, 0x6c, 0x00, 0x2e, 0x0b, 0x00, + 0xae, 0x86, 0x01, 0xef, 0x13, 0x0b, 0x00, 0xb0, 0x76, 0xb2, 0x64, 0xb3, + 0x52, 0xb4, 0x39, 0xf5, 0x09, 0x0b, 0x80, 0x30, 0xb6, 0x13, 0x42, 0xa9, + 0x01, 0x71, 0x0b, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0x2f, 0x0b, 0x00, 0x42, + 0xbc, 0x22, 0x5f, 0x0b, 0x40, 0xe1, 0x35, 0x0b, 0x00, 0x07, 0x23, 0xc1, + 0x01, 0xff, 0xec, 0x0c, 0x0b, 0x80, 0x09, 0xf2, 0x0b, 0x0b, 0xc0, 0x00, + 0xf2, 0x60, 0x0b, 0x40, 0xec, 0x61, 0x0b, 0x40, 0xf5, 0x0a, 0x0b, 0x40, + 0xe1, 0x24, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x25, 0x0b, 0x00, 0xb4, 0x01, + 0xff, 0xe1, 0x1f, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x20, 0x0b, 0x40, 0xe1, + 0x38, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x36, 0x0b, 0x00, 0x42, 0x40, 0x06, + 0x37, 0x0b, 0x40, 0xe1, 0x30, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x5d, 0x0b, + 0x00, 0x42, 0x71, 0x00, 0x5c, 0x0b, 0x40, 0xe1, 0x2a, 0x0b, 0x00, 0x42, + 0x22, 0x00, 0x2b, 0x0b, 0x40, 0xe1, 0x28, 0x0b, 0x00, 0x42, 0x24, 0x02, + 0x19, 0x0b, 0x00, 0x42, 0x2a, 0x05, 0x23, 0x0b, 0x00, 0x42, 0xbc, 0x22, + 0x1e, 0x0b, 0x40, 0xe1, 0x32, 0x0b, 0x00, 0x42, 0x74, 0x00, 0x33, 0x0b, + 0x40, 0xe1, 0x15, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x16, 0x0b, 0x40, 0xe1, + 0x1c, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x1d, 0x0b, 0x40, 0xe9, 0x08, 0x0b, + 0x40, 0xe1, 0x17, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x18, 0x0b, 0x40, 0xe1, + 0x26, 0x0b, 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x27, 0x0b, 0x40, 0xe1, + 0x21, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x22, 0x0b, 0x40, 0xe1, 0x1a, 0x0b, + 0x00, 0x42, 0x22, 0x00, 0x1b, 0x0b, 0x40, 0xe1, 0x2c, 0x0b, 0x00, 0x42, + 0x22, 0x00, 0x2d, 0x0b, 0x40, 0xe1, 0x06, 0x0b, 0x00, 0xe9, 0x10, 0x0b, + 0x00, 0xf5, 0x14, 0x0b, 0x40, 0x04, 0x0e, 0x0b, 0x11, 0x06, 0x24, 0x01, + 0x01, 0xff, 0x48, 0x2a, 0x01, 0x74, 0x0b, 0x00, 0x4a, 0x13, 0xb1, 0x77, + 0x0b, 0x40, 0x46, 0x12, 0x0b, 0x76, 0x0b, 0x00, 0x44, 0x22, 0x00, 0x73, + 0x0b, 0x00, 0x47, 0x2a, 0x01, 0x72, 0x0b, 0x00, 0x49, 0x00, 0x26, 0x75, + 0x0b, 0x40, 0x45, 0x12, 0x0b, 0x6e, 0x0b, 0x00, 0xa6, 0x2e, 0x44, 0xcf, + 0x2a, 0x6f, 0x0b, 0x00, 0x43, 0x0e, 0x0b, 0x67, 0x0b, 0x00, 0xb3, 0x14, + 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x66, 0x0b, 0x40, 0x44, 0x25, 0x01, 0x69, + 0x0b, 0x00, 0x42, 0x15, 0x02, 0x68, 0x0b, 0x40, 0x44, 0xc9, 0x1d, 0x6d, + 0x0b, 0x00, 0x42, 0x01, 0x26, 0x6c, 0x0b, 0x40, 0x43, 0xd2, 0x05, 0x6b, + 0x0b, 0x00, 0x43, 0xf6, 0x06, 0x6a, 0x0b, 0x40, 0x4d, 0xd6, 0x83, 0x56, + 0x0b, 0x00, 0x4d, 0x18, 0x76, 0x57, 0x0b, 0x40, 0xe1, 0xcd, 0xfa, 0x01, + 0x42, 0xef, 0x02, 0x7f, 0xf7, 0x41, 0x02, 0x60, 0x00, 0x06, 0x44, 0xed, + 0xf2, 0xa7, 0xf9, 0x41, 0x44, 0x45, 0xef, 0xd9, 0xf4, 0x01, 0x45, 0xac, + 0x21, 0xe1, 0xf9, 0x41, 0xa5, 0x24, 0x47, 0x9b, 0xd1, 0xce, 0x26, 0x00, + 0x48, 0x0c, 0x17, 0x0d, 0x26, 0x00, 0x02, 0x35, 0x00, 0x01, 0xff, 0x48, + 0x78, 0xc4, 0xbf, 0xf4, 0x81, 0x06, 0x46, 0xc6, 0xde, 0x25, 0x23, 0x40, + 0x45, 0xbe, 0xe1, 0xb8, 0xf5, 0x41, 0xae, 0x06, 0x55, 0x91, 0x3d, 0x9d, + 0x00, 0x40, 0x80, 0x19, 0x8d, 0x01, 0xff, 0x0f, 0xa9, 0x6b, 0x06, 0x59, + 0x79, 0x25, 0xbe, 0x27, 0x40, 0x4d, 0x7b, 0x83, 0x8f, 0x23, 0x00, 0x4d, + 0xe7, 0x84, 0x90, 0x23, 0x40, 0x02, 0x5d, 0x00, 0x57, 0x07, 0x73, 0x02, + 0x3b, 0xa6, 0x2d, 0x4a, 0x83, 0x78, 0x50, 0xf4, 0x01, 0x44, 0x34, 0x01, + 0x13, 0xf5, 0x01, 0x0d, 0x76, 0x85, 0x11, 0x02, 0x6f, 0x00, 0x01, 0xff, + 0x44, 0x9b, 0x12, 0xc3, 0x27, 0x00, 0x46, 0x29, 0x36, 0xc4, 0x27, 0x40, + 0x4c, 0x77, 0x91, 0xed, 0xf4, 0x01, 0x4b, 0xb9, 0xa1, 0xec, 0xf4, 0x41, + 0x4a, 0xaf, 0xab, 0xc2, 0xf4, 0x01, 0x45, 0xcc, 0x65, 0xc1, 0xf5, 0x41, + 0x48, 0x3c, 0x0d, 0x32, 0x27, 0x00, 0x4a, 0xf4, 0x2b, 0x2b, 0x27, 0x00, + 0x45, 0x95, 0x10, 0x1b, 0x27, 0x00, 0x58, 0x6e, 0x2b, 0x3c, 0x27, 0x40, + 0x42, 0x55, 0x05, 0xd6, 0xf4, 0x01, 0xf8, 0x23, 0x24, 0x40, 0x72, 0xa7, + 0x00, 0x1b, 0xf5, 0x01, 0x07, 0x0c, 0xd0, 0x27, 0xa5, 0x06, 0x43, 0xb5, + 0x00, 0xc5, 0xf9, 0x41, 0x80, 0x06, 0x4f, 0x41, 0x6a, 0x71, 0xfa, 0x41, + 0x4c, 0x03, 0x8d, 0xaf, 0xf5, 0x01, 0x04, 0x03, 0x0c, 0x01, 0xff, 0x46, + 0x9d, 0x7d, 0x24, 0x20, 0x00, 0x59, 0x4f, 0x15, 0x2b, 0x2e, 0x40, 0x4a, + 0x17, 0xa8, 0x98, 0xf6, 0x01, 0x43, 0x96, 0x27, 0x8d, 0xf6, 0x01, 0x4b, + 0x23, 0x9c, 0xf1, 0xf6, 0x01, 0x4a, 0xa1, 0xaf, 0x94, 0xf6, 0x01, 0x44, + 0x47, 0xcf, 0x96, 0xf6, 0x41, 0x80, 0xf5, 0x14, 0xa4, 0x06, 0x43, 0xd2, 0x05, 0xd2, 0xfa, 0x41, 0x80, 0x17, 0x03, 0x16, 0x01, 0x01, 0xff, 0x45, - 0x01, 0xe1, 0xd3, 0xf9, 0x01, 0x43, 0xd5, 0x17, 0x74, 0xf4, 0x01, 0x45, - 0x62, 0x2c, 0x75, 0xf4, 0x41, 0x08, 0x22, 0xc2, 0xc3, 0x14, 0x0a, 0x19, - 0xa9, 0x91, 0x10, 0x07, 0x38, 0xcf, 0xb2, 0x0e, 0x43, 0x81, 0x23, 0xdd, - 0xf5, 0x01, 0x0e, 0xb4, 0x78, 0xca, 0x0c, 0x03, 0x6f, 0x02, 0xa1, 0x08, - 0x02, 0x35, 0x03, 0x98, 0x04, 0x0e, 0x0a, 0x7c, 0xc3, 0x01, 0x07, 0x40, - 0xd4, 0x01, 0xff, 0x0a, 0xd6, 0x57, 0x98, 0x01, 0x07, 0xc1, 0x05, 0x22, - 0x0c, 0x01, 0x16, 0x01, 0xff, 0x43, 0x16, 0x00, 0x86, 0x0f, 0x01, 0x49, - 0x9c, 0x45, 0x89, 0x0f, 0x01, 0x04, 0xd0, 0x09, 0x01, 0xff, 0x44, 0xec, - 0x19, 0x87, 0x0f, 0x01, 0x44, 0xd4, 0x09, 0x88, 0x0f, 0x41, 0x45, 0x58, - 0xab, 0x70, 0x0f, 0x01, 0x44, 0x0a, 0xec, 0x71, 0x0f, 0x01, 0x4a, 0x1f, - 0xa8, 0x75, 0x0f, 0x01, 0x4a, 0xa1, 0xa8, 0x72, 0x0f, 0x01, 0x44, 0x8e, - 0xed, 0x77, 0x0f, 0x01, 0xac, 0x46, 0x43, 0x89, 0x05, 0x79, 0x0f, 0x01, - 0x43, 0x54, 0x22, 0x7a, 0x0f, 0x01, 0x42, 0x6f, 0x02, 0x7c, 0x0f, 0x01, - 0x44, 0xfa, 0x64, 0x7e, 0x0f, 0x01, 0xb3, 0x18, 0x43, 0x1e, 0xc2, 0x80, - 0x0f, 0x01, 0x43, 0xc0, 0x88, 0x73, 0x0f, 0x01, 0x44, 0x58, 0x51, 0x76, - 0x0f, 0x01, 0x45, 0x52, 0x51, 0x74, 0x0f, 0x41, 0xa1, 0x06, 0x43, 0x0e, - 0x16, 0x7f, 0x0f, 0x41, 0x43, 0x89, 0xe7, 0x7d, 0x0f, 0x01, 0x44, 0x39, - 0xe1, 0x7b, 0x0f, 0x41, 0x45, 0x59, 0xd9, 0x78, 0x0f, 0x01, 0x43, 0x28, - 0x59, 0x81, 0x0f, 0x41, 0x04, 0xb4, 0x0b, 0x11, 0x09, 0xa2, 0x0b, 0x01, - 0xff, 0x45, 0x5c, 0x00, 0x84, 0x0f, 0x01, 0x45, 0xf5, 0x06, 0x85, 0x0f, - 0x41, 0x45, 0x5c, 0x00, 0x82, 0x0f, 0x01, 0x45, 0xf5, 0x06, 0x83, 0x0f, - 0x41, 0x07, 0x3e, 0xd1, 0x92, 0x01, 0x08, 0x12, 0xca, 0x01, 0xff, 0xe1, + 0x0c, 0xe4, 0xd3, 0xf9, 0x01, 0x43, 0x41, 0x18, 0x74, 0xf4, 0x01, 0x45, + 0x1a, 0x2d, 0x75, 0xf4, 0x41, 0x08, 0xa8, 0xc4, 0xc3, 0x14, 0x0a, 0x55, + 0xab, 0x91, 0x10, 0x07, 0x0b, 0xd2, 0xb2, 0x0e, 0x43, 0x09, 0x24, 0xdd, + 0xf5, 0x01, 0x0e, 0x15, 0x7a, 0xca, 0x0c, 0x03, 0x6f, 0x02, 0xa1, 0x08, + 0x02, 0x60, 0x03, 0x98, 0x04, 0x0e, 0x79, 0x7d, 0xc3, 0x01, 0x07, 0x13, + 0xd7, 0x01, 0xff, 0x0a, 0x41, 0x59, 0x98, 0x01, 0x07, 0xec, 0x05, 0x22, + 0x0c, 0x6d, 0x16, 0x01, 0xff, 0x43, 0x16, 0x00, 0x86, 0x0f, 0x01, 0x49, + 0xd1, 0x46, 0x89, 0x0f, 0x01, 0x04, 0x1f, 0x0a, 0x01, 0xff, 0x44, 0x73, + 0x1a, 0x87, 0x0f, 0x01, 0x44, 0x23, 0x0a, 0x88, 0x0f, 0x41, 0x45, 0xb2, + 0xad, 0x70, 0x0f, 0x01, 0x44, 0x41, 0xef, 0x71, 0x0f, 0x01, 0x4a, 0x5b, + 0xaa, 0x75, 0x0f, 0x01, 0x4a, 0xdd, 0xaa, 0x72, 0x0f, 0x01, 0x44, 0xcd, + 0xf0, 0x77, 0x0f, 0x01, 0xac, 0x46, 0x43, 0xb4, 0x05, 0x79, 0x0f, 0x01, + 0x43, 0xdc, 0x22, 0x7a, 0x0f, 0x01, 0x42, 0x6f, 0x02, 0x7c, 0x0f, 0x01, + 0x44, 0x76, 0x66, 0x7e, 0x0f, 0x01, 0xb3, 0x18, 0x43, 0xa4, 0xc4, 0x80, + 0x0f, 0x01, 0x43, 0x8a, 0x8a, 0x73, 0x0f, 0x01, 0x44, 0xa1, 0x52, 0x76, + 0x0f, 0x01, 0x45, 0x9b, 0x52, 0x74, 0x0f, 0x41, 0xa1, 0x06, 0x43, 0x7a, + 0x16, 0x7f, 0x0f, 0x41, 0x43, 0xad, 0xea, 0x7d, 0x0f, 0x01, 0x44, 0x49, + 0xe4, 0x7b, 0x0f, 0x41, 0x45, 0x4b, 0xdc, 0x78, 0x0f, 0x01, 0x43, 0x93, + 0x5a, 0x81, 0x0f, 0x41, 0x04, 0x03, 0x0c, 0x11, 0x09, 0xf1, 0x0b, 0x01, + 0xff, 0x45, 0x5c, 0x00, 0x84, 0x0f, 0x01, 0x45, 0x20, 0x07, 0x85, 0x0f, + 0x41, 0x45, 0x5c, 0x00, 0x82, 0x0f, 0x01, 0x45, 0x20, 0x07, 0x83, 0x0f, + 0x41, 0x07, 0x11, 0xd4, 0x92, 0x01, 0x08, 0xd0, 0xcc, 0x01, 0xff, 0xe1, 0x01, 0x0c, 0x81, 0x3a, 0xe5, 0x05, 0x0c, 0x81, 0x19, 0xe9, 0x04, 0x0c, 0x81, 0x10, 0xaf, 0x01, 0xff, 0xe5, 0x08, 0x0c, 0x81, 0x04, 0xf1, 0x39, 0x0c, 0x41, 0xeb, 0x1d, 0x0c, 0x41, 0xf1, 0x37, 0x0c, 0x41, 0xe3, 0x33, @@ -6099,11 +6229,11 @@ static const unsigned char uname2c_tree[218382] = { 0x17, 0x0c, 0x41, 0xe2, 0x0c, 0x0c, 0x01, 0xe7, 0x10, 0x0c, 0x01, 0xeb, 0x1b, 0x0c, 0x01, 0xee, 0x25, 0x0c, 0x81, 0x08, 0xf4, 0x46, 0x0c, 0x01, 0xf9, 0x19, 0x0c, 0x41, 0xe7, 0x2e, 0x0c, 0x41, 0xe1, 0x00, 0x0c, 0x81, - 0x5d, 0x44, 0xfa, 0xeb, 0x48, 0x0c, 0x01, 0xa5, 0x27, 0xe9, 0x03, 0x0c, + 0x5d, 0x44, 0x31, 0xef, 0x48, 0x0c, 0x01, 0xa5, 0x27, 0xe9, 0x03, 0x0c, 0x81, 0x1a, 0xef, 0x06, 0x0c, 0xc1, 0x00, 0xe5, 0x07, 0x0c, 0x81, 0x0c, 0xf0, 0x30, 0x0c, 0x01, 0xf1, 0x38, 0x0c, 0x01, 0xf4, 0x47, 0x0c, 0x41, 0xeb, 0x1c, 0x0c, 0x41, 0xe3, 0x31, 0x0c, 0x01, 0xf1, 0x36, 0x0c, 0x41, - 0xe3, 0x32, 0x0c, 0x01, 0x42, 0x8d, 0x04, 0x21, 0x0c, 0x01, 0xed, 0x22, + 0xe3, 0x32, 0x0c, 0x01, 0x42, 0xb8, 0x04, 0x21, 0x0c, 0x01, 0xed, 0x22, 0x0c, 0x01, 0xae, 0x0e, 0xf0, 0x2f, 0x0c, 0x01, 0x42, 0xa4, 0x02, 0x41, 0x0c, 0x01, 0xfa, 0x14, 0x0c, 0x41, 0xe3, 0x28, 0x0c, 0x01, 0xe7, 0x2d, 0x0c, 0x01, 0xf4, 0x26, 0x0c, 0x01, 0xf9, 0x2a, 0x0c, 0x41, 0xe2, 0x09, @@ -6114,141 +6244,141 @@ static const unsigned char uname2c_tree[218382] = { 0x01, 0xe4, 0x13, 0x0c, 0x01, 0xe7, 0x0f, 0x0c, 0x01, 0xeb, 0x1a, 0x0c, 0x01, 0xec, 0x20, 0x0c, 0x01, 0xee, 0x24, 0x0c, 0x01, 0xf2, 0x3c, 0x0c, 0x01, 0xf3, 0x3e, 0x0c, 0x01, 0xf4, 0x45, 0x0c, 0x01, 0xf9, 0x18, 0x0c, - 0x41, 0x06, 0xf2, 0xd0, 0xea, 0x01, 0x0c, 0xb1, 0x94, 0x01, 0xff, 0x07, - 0xc1, 0x05, 0x1b, 0x03, 0x37, 0x37, 0x01, 0xff, 0x04, 0x8c, 0x05, 0x06, - 0x4e, 0x14, 0x76, 0x7f, 0x0a, 0x41, 0x45, 0x07, 0x4c, 0x7e, 0x0a, 0x01, - 0x43, 0xbf, 0x0a, 0x7d, 0x0a, 0x41, 0xa1, 0xb7, 0x01, 0x44, 0x0a, 0xec, - 0x68, 0x0a, 0x01, 0xa4, 0x97, 0x01, 0x42, 0xa0, 0x19, 0x70, 0x0a, 0x01, + 0x41, 0x06, 0xc5, 0xd3, 0xea, 0x01, 0x0c, 0x9f, 0x96, 0x01, 0xff, 0x07, + 0xec, 0x05, 0x1b, 0x03, 0x07, 0x38, 0x01, 0xff, 0x04, 0xb7, 0x05, 0x06, + 0x4e, 0x83, 0x77, 0x7f, 0x0a, 0x41, 0x45, 0x50, 0x4d, 0x7e, 0x0a, 0x01, + 0x43, 0x0e, 0x0b, 0x7d, 0x0a, 0x41, 0xa1, 0xb7, 0x01, 0x44, 0x41, 0xef, + 0x68, 0x0a, 0x01, 0xa4, 0x97, 0x01, 0x42, 0x0c, 0x1a, 0x70, 0x0a, 0x01, 0xa7, 0x82, 0x01, 0x42, 0xb0, 0x01, 0x60, 0x0a, 0x81, 0x75, 0xab, 0x67, - 0x46, 0x9c, 0xda, 0x61, 0x0a, 0x01, 0x43, 0x89, 0x05, 0x63, 0x0a, 0x01, - 0x43, 0x54, 0x22, 0x6c, 0x0a, 0x01, 0x44, 0xae, 0xc5, 0x64, 0x0a, 0x01, - 0x44, 0xfa, 0x64, 0x67, 0x0a, 0x01, 0xb3, 0x2f, 0xb4, 0x12, 0x43, 0xc0, - 0x88, 0x65, 0x0a, 0x01, 0x44, 0x58, 0x51, 0x7a, 0x0a, 0x01, 0x44, 0x06, - 0xf0, 0x78, 0x0a, 0x41, 0x42, 0x9a, 0x43, 0x69, 0x0a, 0x01, 0x43, 0x39, - 0x25, 0x77, 0x0a, 0x01, 0xa8, 0x01, 0xff, 0x42, 0x9a, 0x43, 0x7b, 0x0a, - 0x01, 0x43, 0x39, 0x25, 0x7c, 0x0a, 0x41, 0xa1, 0x06, 0x43, 0x0e, 0x16, - 0x66, 0x0a, 0x41, 0x43, 0x89, 0xe7, 0x6e, 0x0a, 0x01, 0x44, 0x39, 0xe1, - 0x6f, 0x0a, 0x01, 0xf4, 0x6a, 0x0a, 0x41, 0x43, 0x34, 0x10, 0x6b, 0x0a, - 0x01, 0x44, 0x25, 0xa8, 0x6d, 0x0a, 0x41, 0x42, 0x53, 0x00, 0x62, 0x0a, - 0x41, 0x44, 0xe2, 0xec, 0x76, 0x0a, 0x01, 0x44, 0xa2, 0xa8, 0x74, 0x0a, - 0x41, 0x45, 0xdb, 0x48, 0x75, 0x0a, 0x01, 0x02, 0x22, 0x00, 0x01, 0xff, - 0x43, 0x89, 0xe7, 0x73, 0x0a, 0x01, 0x44, 0xdc, 0x48, 0x79, 0x0a, 0x41, - 0x43, 0x68, 0x00, 0x71, 0x0a, 0x01, 0x42, 0x61, 0x1c, 0x72, 0x0a, 0x41, - 0x51, 0xb3, 0x58, 0x26, 0x0f, 0x01, 0xac, 0x44, 0x07, 0x2f, 0x39, 0x01, - 0xff, 0xa6, 0x31, 0x43, 0xbf, 0x0a, 0x1d, 0x0f, 0x81, 0x24, 0xb4, 0x01, + 0x46, 0x94, 0xdd, 0x61, 0x0a, 0x01, 0x43, 0xb4, 0x05, 0x63, 0x0a, 0x01, + 0x43, 0xdc, 0x22, 0x6c, 0x0a, 0x01, 0x44, 0x4c, 0xc8, 0x64, 0x0a, 0x01, + 0x44, 0x76, 0x66, 0x67, 0x0a, 0x01, 0xb3, 0x2f, 0xb4, 0x12, 0x43, 0x8a, + 0x8a, 0x65, 0x0a, 0x01, 0x44, 0xa1, 0x52, 0x7a, 0x0a, 0x01, 0x44, 0x59, + 0xf3, 0x78, 0x0a, 0x41, 0x42, 0xb7, 0x2d, 0x69, 0x0a, 0x01, 0x43, 0xda, + 0x25, 0x77, 0x0a, 0x01, 0xa8, 0x01, 0xff, 0x42, 0xb7, 0x2d, 0x7b, 0x0a, + 0x01, 0x43, 0xda, 0x25, 0x7c, 0x0a, 0x41, 0xa1, 0x06, 0x43, 0x7a, 0x16, + 0x66, 0x0a, 0x41, 0x43, 0xad, 0xea, 0x6e, 0x0a, 0x01, 0x44, 0x49, 0xe4, + 0x6f, 0x0a, 0x01, 0xf4, 0x6a, 0x0a, 0x41, 0x43, 0x83, 0x10, 0x6b, 0x0a, + 0x01, 0x44, 0x61, 0xaa, 0x6d, 0x0a, 0x41, 0x42, 0x53, 0x00, 0x62, 0x0a, + 0x41, 0x44, 0x21, 0xf0, 0x76, 0x0a, 0x01, 0x44, 0xde, 0xaa, 0x74, 0x0a, + 0x41, 0x45, 0x24, 0x4a, 0x75, 0x0a, 0x01, 0x02, 0x22, 0x00, 0x01, 0xff, + 0x43, 0xad, 0xea, 0x73, 0x0a, 0x01, 0x44, 0x25, 0x4a, 0x79, 0x0a, 0x41, + 0x43, 0x68, 0x00, 0x71, 0x0a, 0x01, 0x42, 0x03, 0x1d, 0x72, 0x0a, 0x41, + 0x51, 0x1e, 0x5a, 0x26, 0x0f, 0x01, 0xac, 0x44, 0x07, 0xff, 0x39, 0x01, + 0xff, 0xa6, 0x31, 0x43, 0x0e, 0x0b, 0x1d, 0x0f, 0x81, 0x24, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x22, 0x0f, 0x01, 0xa8, 0x0d, 0xb7, 0x01, 0xff, - 0x44, 0x29, 0x1d, 0x23, 0x0f, 0x01, 0xef, 0x1e, 0x0f, 0x41, 0x44, 0x2c, - 0x11, 0x24, 0x0f, 0x01, 0x43, 0x26, 0x01, 0x1f, 0x0f, 0x41, 0x48, 0x21, - 0x11, 0x25, 0x0f, 0x41, 0x43, 0xa7, 0x05, 0x21, 0x0f, 0x01, 0x43, 0xcb, - 0x06, 0x20, 0x0f, 0x41, 0x06, 0xc2, 0x05, 0x06, 0x53, 0xcd, 0x48, 0x27, - 0x0f, 0x41, 0xa1, 0xa8, 0x01, 0x44, 0x0a, 0xec, 0x02, 0x0f, 0x01, 0x06, - 0x3d, 0x2c, 0x65, 0x45, 0xa1, 0xa8, 0x04, 0x0f, 0x01, 0x42, 0xb0, 0x01, - 0x05, 0x0f, 0x81, 0x52, 0x44, 0x8e, 0xed, 0x0b, 0x0f, 0x01, 0x46, 0x9c, - 0xda, 0x0c, 0x0f, 0x01, 0x43, 0x89, 0x05, 0x0d, 0x0f, 0x01, 0x43, 0x54, - 0x22, 0x0e, 0x0f, 0x01, 0x42, 0x6f, 0x02, 0x14, 0x0f, 0x01, 0x50, 0xfa, - 0x64, 0x18, 0x0f, 0x01, 0xb3, 0x18, 0x43, 0x1e, 0xc2, 0x1a, 0x0f, 0x01, - 0x43, 0xc0, 0x88, 0x07, 0x0f, 0x01, 0x44, 0x58, 0x51, 0x0a, 0x0f, 0x01, - 0x45, 0x52, 0x51, 0x08, 0x0f, 0x41, 0xa1, 0x06, 0x43, 0x0e, 0x16, 0x19, - 0x0f, 0x41, 0x43, 0x89, 0xe7, 0x15, 0x0f, 0x01, 0x44, 0x39, 0xe1, 0x11, - 0x0f, 0x41, 0x42, 0x53, 0x00, 0x09, 0x0f, 0x41, 0x45, 0x58, 0xab, 0x01, - 0x0f, 0x01, 0x44, 0x0a, 0xec, 0x03, 0x0f, 0x01, 0x42, 0xb0, 0x01, 0x06, - 0x0f, 0x01, 0x43, 0x54, 0x22, 0x0f, 0x0f, 0x81, 0x1a, 0x45, 0x87, 0xe7, - 0x16, 0x0f, 0x81, 0x0d, 0x43, 0x1e, 0xc2, 0x1b, 0x0f, 0xc1, 0x00, 0x53, - 0x80, 0x46, 0x1c, 0x0f, 0x41, 0x53, 0x80, 0x46, 0x17, 0x0f, 0x41, 0x53, - 0x80, 0x46, 0x10, 0x0f, 0x41, 0xac, 0x06, 0x43, 0xf7, 0x19, 0x12, 0x0f, - 0x41, 0x43, 0x49, 0x3c, 0x00, 0x0f, 0x01, 0x4c, 0xe5, 0x93, 0x13, 0x0f, - 0x41, 0x0b, 0x51, 0x5a, 0xbb, 0x02, 0xb3, 0x01, 0xff, 0x04, 0x6b, 0x08, - 0x0d, 0x4d, 0x25, 0x85, 0xb3, 0xf5, 0xc1, 0x00, 0x65, 0x92, 0x07, 0xb2, - 0xce, 0x41, 0x07, 0x2f, 0x39, 0x80, 0x02, 0x05, 0x2f, 0x03, 0x06, 0x4c, - 0xb3, 0x24, 0xd0, 0x03, 0x41, 0xe1, 0xa0, 0x03, 0x81, 0xdd, 0x01, 0xa2, + 0x44, 0xcb, 0x1d, 0x23, 0x0f, 0x01, 0xef, 0x1e, 0x0f, 0x41, 0x44, 0x7b, + 0x11, 0x24, 0x0f, 0x01, 0x43, 0x26, 0x01, 0x1f, 0x0f, 0x41, 0x48, 0x70, + 0x11, 0x25, 0x0f, 0x41, 0x43, 0xd2, 0x05, 0x21, 0x0f, 0x01, 0x43, 0xf6, + 0x06, 0x20, 0x0f, 0x41, 0x06, 0xed, 0x05, 0x06, 0x53, 0x16, 0x4a, 0x27, + 0x0f, 0x41, 0xa1, 0xa8, 0x01, 0x44, 0x41, 0xef, 0x02, 0x0f, 0x01, 0x06, + 0xf5, 0x2c, 0x65, 0x45, 0xdd, 0xaa, 0x04, 0x0f, 0x01, 0x42, 0xb0, 0x01, + 0x05, 0x0f, 0x81, 0x52, 0x44, 0xcd, 0xf0, 0x0b, 0x0f, 0x01, 0x46, 0x94, + 0xdd, 0x0c, 0x0f, 0x01, 0x43, 0xb4, 0x05, 0x0d, 0x0f, 0x01, 0x43, 0xdc, + 0x22, 0x0e, 0x0f, 0x01, 0x42, 0x6f, 0x02, 0x14, 0x0f, 0x01, 0x50, 0x76, + 0x66, 0x18, 0x0f, 0x01, 0xb3, 0x18, 0x43, 0xa4, 0xc4, 0x1a, 0x0f, 0x01, + 0x43, 0x8a, 0x8a, 0x07, 0x0f, 0x01, 0x44, 0xa1, 0x52, 0x0a, 0x0f, 0x01, + 0x45, 0x9b, 0x52, 0x08, 0x0f, 0x41, 0xa1, 0x06, 0x43, 0x7a, 0x16, 0x19, + 0x0f, 0x41, 0x43, 0xad, 0xea, 0x15, 0x0f, 0x01, 0x44, 0x49, 0xe4, 0x11, + 0x0f, 0x41, 0x42, 0x53, 0x00, 0x09, 0x0f, 0x41, 0x45, 0xb2, 0xad, 0x01, + 0x0f, 0x01, 0x44, 0x41, 0xef, 0x03, 0x0f, 0x01, 0x42, 0xb0, 0x01, 0x06, + 0x0f, 0x01, 0x43, 0xdc, 0x22, 0x0f, 0x0f, 0x81, 0x1a, 0x45, 0xab, 0xea, + 0x16, 0x0f, 0x81, 0x0d, 0x43, 0xa4, 0xc4, 0x1b, 0x0f, 0xc1, 0x00, 0x53, + 0xc9, 0x47, 0x1c, 0x0f, 0x41, 0x53, 0xc9, 0x47, 0x17, 0x0f, 0x41, 0x53, + 0xc9, 0x47, 0x10, 0x0f, 0x41, 0xac, 0x06, 0x43, 0x7e, 0x1a, 0x12, 0x0f, + 0x41, 0x43, 0x19, 0x3d, 0x00, 0x0f, 0x01, 0x4c, 0xbb, 0x95, 0x13, 0x0f, + 0x41, 0x0b, 0xbc, 0x5b, 0xbb, 0x02, 0xb3, 0x01, 0xff, 0x04, 0x96, 0x08, + 0x0d, 0x4d, 0xe2, 0x86, 0xb3, 0xf5, 0xc1, 0x00, 0x65, 0xbd, 0x07, 0xb2, + 0xce, 0x41, 0x07, 0xff, 0x39, 0x80, 0x02, 0x05, 0x5a, 0x03, 0x06, 0x4c, + 0x3b, 0x25, 0xd0, 0x03, 0x41, 0xe1, 0xa0, 0x03, 0x81, 0xdd, 0x01, 0xa2, 0xc9, 0x01, 0x42, 0x37, 0x00, 0xa8, 0x03, 0x01, 0xa4, 0xa6, 0x01, 0x42, - 0xe1, 0x07, 0xb3, 0x03, 0x01, 0xa7, 0x95, 0x01, 0x42, 0x22, 0x00, 0xc3, + 0x0c, 0x08, 0xb3, 0x03, 0x01, 0xa7, 0x95, 0x01, 0x42, 0x22, 0x00, 0xc3, 0x03, 0x01, 0xe9, 0xa1, 0x03, 0x01, 0xaa, 0x80, 0x01, 0xab, 0x76, 0x42, - 0x74, 0x00, 0xbe, 0x03, 0x01, 0xad, 0x62, 0xae, 0x58, 0x42, 0x6c, 0x09, + 0x74, 0x00, 0xbe, 0x03, 0x01, 0xad, 0x62, 0xae, 0x58, 0x42, 0xbb, 0x09, 0xb1, 0x03, 0x01, 0xb2, 0x48, 0xb3, 0x36, 0xb4, 0x26, 0xf5, 0xa2, 0x03, - 0x01, 0xb6, 0x18, 0xb8, 0x0c, 0x42, 0x34, 0x22, 0xb9, 0x03, 0x01, 0x42, - 0x59, 0x00, 0xc0, 0x03, 0x41, 0xe1, 0xa7, 0x03, 0x01, 0x4b, 0x64, 0xa0, + 0x01, 0xb6, 0x18, 0xb8, 0x0c, 0x42, 0xbc, 0x22, 0xb9, 0x03, 0x01, 0x42, + 0x59, 0x00, 0xc0, 0x03, 0x41, 0xe1, 0xa7, 0x03, 0x01, 0x4b, 0x8a, 0xa2, 0xcb, 0x03, 0x41, 0xe1, 0xba, 0x03, 0x01, 0xe9, 0xbb, 0x03, 0x41, 0xe1, 0xab, 0x03, 0x01, 0x42, 0x22, 0x00, 0xb0, 0x03, 0x01, 0xf5, 0xac, 0x03, 0x41, 0xe1, 0xbf, 0x03, 0x01, 0x42, 0x22, 0x00, 0xc1, 0x03, 0x01, 0x42, - 0x15, 0x06, 0xc2, 0x03, 0x41, 0xe1, 0xbc, 0x03, 0x01, 0xf5, 0xbd, 0x03, + 0x40, 0x06, 0xc2, 0x03, 0x41, 0xe1, 0xbc, 0x03, 0x01, 0xf5, 0xbd, 0x03, 0x41, 0xe1, 0xb4, 0x03, 0x01, 0xf5, 0xb5, 0x03, 0x41, 0xe1, 0xb6, 0x03, 0x01, 0xe9, 0xb7, 0x03, 0x01, 0xf5, 0xb8, 0x03, 0x41, 0xe1, 0xa3, 0x03, 0x01, 0xf5, 0xa4, 0x03, 0x41, 0xe1, 0xa9, 0x03, 0x01, 0xe9, 0xaa, 0x03, 0x41, 0xe1, 0xa5, 0x03, 0x01, 0xf5, 0xa6, 0x03, 0x41, 0xe1, 0xad, 0x03, - 0x81, 0x08, 0xe9, 0xae, 0x03, 0x01, 0xf5, 0xaf, 0x03, 0x41, 0x47, 0xcf, - 0xce, 0xcc, 0x03, 0xc1, 0x00, 0x42, 0x34, 0xf0, 0xcd, 0x03, 0x41, 0xe1, - 0xb2, 0x03, 0x81, 0x06, 0x46, 0xfc, 0xdd, 0xcf, 0x03, 0x41, 0x42, 0x24, - 0x02, 0xce, 0x03, 0x41, 0x49, 0x02, 0xbe, 0xc8, 0x03, 0xc1, 0x00, 0x42, - 0x34, 0xf0, 0xc9, 0x03, 0x01, 0x42, 0x22, 0x00, 0xca, 0x03, 0x41, 0x47, - 0x22, 0x11, 0xd5, 0x03, 0x01, 0x43, 0xbf, 0x0a, 0xd1, 0x03, 0x01, 0xb4, + 0x81, 0x08, 0xe9, 0xae, 0x03, 0x01, 0xf5, 0xaf, 0x03, 0x41, 0x47, 0xa9, + 0xd1, 0xcc, 0x03, 0xc1, 0x00, 0x42, 0x87, 0xf3, 0xcd, 0x03, 0x41, 0xe1, + 0xb2, 0x03, 0x81, 0x06, 0x46, 0x0c, 0xe1, 0xcf, 0x03, 0x41, 0x42, 0x24, + 0x02, 0xce, 0x03, 0x41, 0x49, 0x89, 0xc0, 0xc8, 0x03, 0xc1, 0x00, 0x42, + 0x87, 0xf3, 0xc9, 0x03, 0x01, 0x42, 0x22, 0x00, 0xca, 0x03, 0x41, 0x47, + 0x71, 0x11, 0xd5, 0x03, 0x01, 0x43, 0x0e, 0x0b, 0xd1, 0x03, 0x01, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xd3, 0x03, 0x01, 0xb7, 0x01, 0xff, 0x44, - 0x29, 0x1d, 0xd4, 0x03, 0x01, 0xef, 0xd2, 0x03, 0x41, 0x42, 0x1a, 0x00, - 0x50, 0x03, 0x01, 0x43, 0x37, 0x35, 0x51, 0x03, 0x01, 0x45, 0x14, 0xe2, + 0xcb, 0x1d, 0xd4, 0x03, 0x01, 0xef, 0xd2, 0x03, 0x41, 0x42, 0x1a, 0x00, + 0x50, 0x03, 0x01, 0x43, 0x07, 0x36, 0x51, 0x03, 0x01, 0x45, 0x24, 0xe5, 0x64, 0x03, 0x01, 0xa4, 0xba, 0x01, 0xe5, 0x54, 0x03, 0x81, 0xb0, 0x01, - 0x43, 0xf1, 0x49, 0x52, 0x03, 0x01, 0x42, 0x22, 0x00, 0x6c, 0x03, 0x01, - 0xe9, 0x59, 0x03, 0x81, 0x96, 0x01, 0x44, 0xae, 0xed, 0x5a, 0x03, 0x01, - 0x43, 0x75, 0x42, 0x5b, 0x03, 0x01, 0x45, 0x75, 0xe5, 0x5c, 0x03, 0x01, - 0x45, 0xe8, 0xe5, 0x5d, 0x03, 0x01, 0xef, 0x69, 0x03, 0x81, 0x75, 0x44, - 0xba, 0xee, 0x5f, 0x03, 0x01, 0x43, 0xb8, 0x2e, 0x60, 0x03, 0x01, 0xb3, + 0x43, 0x3a, 0x4b, 0x52, 0x03, 0x01, 0x42, 0x22, 0x00, 0x6c, 0x03, 0x01, + 0xe9, 0x59, 0x03, 0x81, 0x96, 0x01, 0x44, 0xed, 0xf0, 0x5a, 0x03, 0x01, + 0x43, 0x82, 0x43, 0x5b, 0x03, 0x01, 0x45, 0x8f, 0xe8, 0x5c, 0x03, 0x01, + 0x45, 0x07, 0xe9, 0x5d, 0x03, 0x01, 0xef, 0x69, 0x03, 0x81, 0x75, 0x44, + 0x01, 0xf2, 0x5f, 0x03, 0x01, 0x43, 0x9e, 0x2f, 0x60, 0x03, 0x01, 0xb3, 0x53, 0xb4, 0x45, 0xf5, 0x63, 0x03, 0x01, 0xb6, 0x33, 0xb9, 0x0f, 0xba, - 0x01, 0xff, 0x43, 0x6b, 0x18, 0x57, 0x03, 0x01, 0x43, 0x9d, 0xd9, 0x55, + 0x01, 0xff, 0x43, 0xd7, 0x18, 0x57, 0x03, 0x01, 0x43, 0x95, 0xdc, 0x55, 0x03, 0x41, 0xe1, 0x74, 0x03, 0x81, 0x19, 0x42, 0x33, 0x00, 0x6f, 0x03, - 0x81, 0x0a, 0x42, 0x34, 0x0a, 0x67, 0x03, 0x01, 0xf5, 0x73, 0x03, 0x41, + 0x81, 0x0a, 0x42, 0x83, 0x0a, 0x67, 0x03, 0x01, 0xf5, 0x73, 0x03, 0x41, 0xe9, 0x70, 0x03, 0x01, 0xf5, 0x68, 0x03, 0x41, 0xf4, 0x71, 0x03, 0x41, - 0x42, 0x33, 0x00, 0x6e, 0x03, 0x01, 0x43, 0x25, 0xe2, 0x5e, 0x03, 0x41, - 0x42, 0x05, 0x07, 0x62, 0x03, 0x01, 0x43, 0x0b, 0xcd, 0x6d, 0x03, 0x41, - 0xa8, 0x06, 0x42, 0xb1, 0x27, 0x61, 0x03, 0x41, 0x45, 0x23, 0xe2, 0x66, - 0x03, 0x01, 0x43, 0x25, 0xe2, 0x65, 0x03, 0x41, 0xef, 0x6a, 0x03, 0x41, + 0x42, 0x33, 0x00, 0x6e, 0x03, 0x01, 0x43, 0x30, 0xe5, 0x5e, 0x03, 0x41, + 0x42, 0x56, 0x07, 0x62, 0x03, 0x01, 0x43, 0xde, 0xcf, 0x6d, 0x03, 0x41, + 0xa8, 0x06, 0x42, 0x52, 0x28, 0x61, 0x03, 0x41, 0x45, 0x2e, 0xe5, 0x66, + 0x03, 0x01, 0x43, 0x30, 0xe5, 0x65, 0x03, 0x41, 0xef, 0x6a, 0x03, 0x41, 0xe1, 0x75, 0x03, 0x01, 0xe5, 0x72, 0x03, 0x41, 0xe6, 0x6b, 0x03, 0x41, - 0x42, 0x9d, 0x01, 0x53, 0x03, 0x01, 0xba, 0x01, 0xff, 0x43, 0x9d, 0xd9, - 0x56, 0x03, 0x01, 0x43, 0xbc, 0x05, 0x58, 0x03, 0x41, 0x07, 0xc1, 0x05, - 0x1a, 0x07, 0x2f, 0x39, 0x01, 0xff, 0x43, 0xbf, 0x0a, 0x9d, 0x0a, 0x01, - 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x9e, 0x0a, 0x01, 0x45, 0xde, 0x2b, - 0x9f, 0x0a, 0x41, 0xa1, 0xb0, 0x01, 0x43, 0xe5, 0x8a, 0x88, 0x0a, 0x01, - 0x02, 0xa1, 0x10, 0x9d, 0x01, 0x03, 0xb7, 0xd2, 0x8c, 0x01, 0x43, 0x85, - 0xb6, 0x90, 0x0a, 0x01, 0xa7, 0x78, 0xa8, 0x6a, 0xab, 0x5c, 0x43, 0xb0, - 0x00, 0x81, 0x0a, 0x01, 0x44, 0x7a, 0x20, 0x83, 0x0a, 0x01, 0x44, 0xc4, - 0x44, 0x8c, 0x0a, 0x01, 0x43, 0xf4, 0x13, 0x84, 0x0a, 0x01, 0x43, 0xee, - 0x50, 0x87, 0x0a, 0x01, 0x43, 0x30, 0x14, 0x8e, 0x0a, 0x01, 0xb4, 0x1b, - 0x43, 0xc0, 0x88, 0x85, 0x0a, 0x01, 0x43, 0x4d, 0x00, 0x9a, 0x0a, 0x01, + 0x42, 0x9d, 0x01, 0x53, 0x03, 0x01, 0xba, 0x01, 0xff, 0x43, 0x95, 0xdc, + 0x56, 0x03, 0x01, 0x43, 0xe7, 0x05, 0x58, 0x03, 0x41, 0x07, 0xec, 0x05, + 0x1a, 0x07, 0xff, 0x39, 0x01, 0xff, 0x43, 0x0e, 0x0b, 0x9d, 0x0a, 0x01, + 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x9e, 0x0a, 0x01, 0x45, 0x7f, 0x2c, + 0x9f, 0x0a, 0x41, 0xa1, 0xb0, 0x01, 0x43, 0xa3, 0x8c, 0x88, 0x0a, 0x01, + 0x02, 0xf0, 0x10, 0x9d, 0x01, 0x03, 0x8a, 0xd5, 0x8c, 0x01, 0x43, 0xd6, + 0xb8, 0x90, 0x0a, 0x01, 0xa7, 0x78, 0xa8, 0x6a, 0xab, 0x5c, 0x43, 0xb0, + 0x00, 0x81, 0x0a, 0x01, 0x44, 0x1c, 0x21, 0x83, 0x0a, 0x01, 0x44, 0xf9, + 0x45, 0x8c, 0x0a, 0x01, 0x43, 0x43, 0x14, 0x84, 0x0a, 0x01, 0x43, 0x37, + 0x52, 0x87, 0x0a, 0x01, 0x43, 0x7f, 0x14, 0x8e, 0x0a, 0x01, 0xb4, 0x1b, + 0x43, 0x8a, 0x8a, 0x85, 0x0a, 0x01, 0x43, 0x4d, 0x00, 0x9a, 0x0a, 0x01, 0x02, 0x59, 0x00, 0x01, 0xff, 0xe8, 0x9c, 0x0a, 0x01, 0x42, 0x9e, 0x01, - 0x98, 0x0a, 0x41, 0x42, 0xc9, 0x09, 0x97, 0x0a, 0x01, 0x42, 0x4e, 0x00, + 0x98, 0x0a, 0x41, 0x42, 0x18, 0x0a, 0x97, 0x0a, 0x01, 0x42, 0x4e, 0x00, 0x89, 0x0a, 0x01, 0xa8, 0x01, 0xff, 0x42, 0x13, 0x00, 0x99, 0x0a, 0x01, - 0x42, 0x4e, 0x00, 0x9b, 0x0a, 0x41, 0x42, 0xf5, 0x13, 0x8b, 0x0a, 0x01, - 0x43, 0x84, 0x20, 0x8d, 0x0a, 0x41, 0x42, 0xc9, 0x09, 0x82, 0x0a, 0x01, - 0x42, 0x4e, 0x00, 0x80, 0x0a, 0x41, 0x43, 0xdf, 0x17, 0x94, 0x0a, 0x01, - 0x44, 0x4b, 0x9a, 0x96, 0x0a, 0x41, 0xd1, 0x8a, 0x0a, 0x01, 0xd2, 0x86, + 0x42, 0x4e, 0x00, 0x9b, 0x0a, 0x41, 0x42, 0x44, 0x14, 0x8b, 0x0a, 0x01, + 0x43, 0x26, 0x21, 0x8d, 0x0a, 0x41, 0x42, 0x18, 0x0a, 0x82, 0x0a, 0x01, + 0x42, 0x4e, 0x00, 0x80, 0x0a, 0x41, 0x43, 0x4b, 0x18, 0x94, 0x0a, 0x01, + 0x44, 0x66, 0x9c, 0x96, 0x0a, 0x41, 0xd1, 0x8a, 0x0a, 0x01, 0xd2, 0x86, 0x0a, 0x01, 0xd3, 0x8f, 0x0a, 0x41, 0xe4, 0x93, 0x0a, 0x01, 0xec, 0x95, 0x0a, 0x41, 0x42, 0x9e, 0x01, 0x92, 0x0a, 0x01, 0x43, 0x68, 0x00, 0x91, - 0x0a, 0x41, 0x07, 0xc1, 0x05, 0x21, 0x08, 0xb5, 0x5b, 0x01, 0xff, 0x02, - 0xc8, 0x02, 0x0c, 0x43, 0xbf, 0x0a, 0x20, 0x03, 0x01, 0x43, 0xb0, 0x06, - 0x22, 0x03, 0x41, 0x43, 0x09, 0x4c, 0x23, 0x03, 0x01, 0x42, 0x32, 0x00, - 0x21, 0x03, 0x41, 0xe1, 0x00, 0x03, 0x01, 0x42, 0x8c, 0x05, 0x01, 0x03, - 0x01, 0x43, 0x1e, 0x14, 0x1c, 0x03, 0x01, 0x42, 0x04, 0x00, 0x03, 0x03, + 0x0a, 0x41, 0x07, 0xec, 0x05, 0x21, 0x08, 0x20, 0x5d, 0x01, 0xff, 0x02, + 0xf3, 0x02, 0x0c, 0x43, 0x0e, 0x0b, 0x20, 0x03, 0x01, 0x43, 0xdb, 0x06, + 0x22, 0x03, 0x41, 0x43, 0x52, 0x4d, 0x23, 0x03, 0x01, 0x42, 0x32, 0x00, + 0x21, 0x03, 0x41, 0xe1, 0x00, 0x03, 0x01, 0x42, 0xb7, 0x05, 0x01, 0x03, + 0x01, 0x43, 0x6d, 0x14, 0x1c, 0x03, 0x01, 0x42, 0x04, 0x00, 0x03, 0x03, 0x01, 0xe5, 0x04, 0x03, 0x81, 0x6e, 0x42, 0xb0, 0x01, 0x07, 0x03, 0x01, - 0xe9, 0x09, 0x03, 0x81, 0x5f, 0xab, 0x4b, 0x4c, 0x09, 0x91, 0x2e, 0x03, + 0xe9, 0x09, 0x03, 0x81, 0x5f, 0xab, 0x4b, 0x4c, 0xbb, 0x92, 0x2e, 0x03, 0x01, 0xef, 0x0f, 0x03, 0x01, 0xb0, 0x35, 0xb3, 0x27, 0xb4, 0x1b, 0xf5, 0x16, 0x03, 0x81, 0x12, 0x42, 0x32, 0x00, 0x05, 0x03, 0x01, 0x42, 0x4d, - 0x00, 0x2d, 0x03, 0x01, 0x42, 0xfc, 0x09, 0x06, 0x03, 0x41, 0xf5, 0x1e, + 0x00, 0x2d, 0x03, 0x01, 0x42, 0x4b, 0x0a, 0x06, 0x03, 0x41, 0xf5, 0x1e, 0x03, 0x41, 0xe5, 0x15, 0x03, 0x01, 0x42, 0xb0, 0x01, 0x08, 0x03, 0x41, - 0x42, 0xb0, 0x01, 0x11, 0x03, 0x01, 0x4b, 0xee, 0x9e, 0x2f, 0x03, 0x41, + 0x42, 0xb0, 0x01, 0x11, 0x03, 0x01, 0x4b, 0x1f, 0xa1, 0x2f, 0x03, 0x41, 0xe5, 0x10, 0x03, 0x01, 0x42, 0xb0, 0x01, 0x18, 0x03, 0x41, 0xe1, 0x0a, 0x03, 0x01, 0xe5, 0x02, 0x03, 0x01, 0x42, 0xb0, 0x01, 0x19, 0x03, 0x01, 0xf5, 0x12, 0x03, 0x41, 0xe9, 0x1d, 0x03, 0x41, 0xe6, 0x1a, 0x03, 0x01, 0x42, 0x6e, 0x00, 0x17, 0x03, 0x01, 0xec, 0x0b, 0x03, 0x01, 0xed, 0x0c, 0x03, 0x01, 0xee, 0x0d, 0x03, 0x01, 0xf2, 0x13, 0x03, 0x81, 0x0d, 0xf3, 0x14, 0x03, 0xc1, 0x00, 0xe8, 0x0e, 0x03, 0x01, 0xf3, 0x1f, 0x03, 0x41, - 0xf3, 0x1b, 0x03, 0x41, 0x0f, 0xb9, 0x05, 0xaf, 0x02, 0x07, 0x2f, 0x39, - 0xfe, 0x01, 0x0d, 0x4b, 0x08, 0x01, 0xff, 0xe1, 0xc0, 0x0c, 0x81, 0xdf, - 0x01, 0x47, 0x2b, 0xcd, 0xca, 0x0c, 0x01, 0xe5, 0xc9, 0x0c, 0x81, 0x51, - 0xe9, 0xd0, 0x0c, 0x81, 0x48, 0x0b, 0xe6, 0x9d, 0x38, 0xef, 0xdb, 0x0c, - 0x81, 0x29, 0x0a, 0x5f, 0xae, 0x19, 0x48, 0x32, 0xc8, 0xe3, 0x0c, 0x01, - 0xf5, 0xea, 0x0c, 0xc1, 0x00, 0x42, 0x12, 0x25, 0xd5, 0x0c, 0x01, 0xf3, - 0xf2, 0x0c, 0x01, 0xf5, 0xeb, 0x0c, 0x41, 0x42, 0x17, 0x50, 0xde, 0x0c, - 0x01, 0x42, 0x87, 0x13, 0xed, 0x0c, 0x41, 0x42, 0x27, 0x01, 0xdf, 0x0c, - 0x01, 0xef, 0xdc, 0x0c, 0x41, 0x42, 0x17, 0x50, 0xdd, 0x0c, 0x01, 0x42, - 0x87, 0x13, 0xec, 0x0c, 0x41, 0xe9, 0xd1, 0x0c, 0x41, 0xe2, 0xc2, 0x0c, + 0xf3, 0x1b, 0x03, 0x41, 0x0f, 0xe4, 0x05, 0xaf, 0x02, 0x07, 0xff, 0x39, + 0xfe, 0x01, 0x0d, 0x76, 0x08, 0x01, 0xff, 0xe1, 0xc0, 0x0c, 0x81, 0xdf, + 0x01, 0x47, 0xfe, 0xcf, 0xca, 0x0c, 0x01, 0xe5, 0xc9, 0x0c, 0x81, 0x51, + 0xe9, 0xd0, 0x0c, 0x81, 0x48, 0x0b, 0x17, 0xa0, 0x38, 0xef, 0xdb, 0x0c, + 0x81, 0x29, 0x0a, 0xaf, 0xb0, 0x19, 0x48, 0xe0, 0xca, 0xe3, 0x0c, 0x01, + 0xf5, 0xea, 0x0c, 0xc1, 0x00, 0x42, 0xb3, 0x25, 0xd5, 0x0c, 0x01, 0xf3, + 0xf2, 0x0c, 0x01, 0xf5, 0xeb, 0x0c, 0x41, 0x42, 0x60, 0x51, 0xde, 0x0c, + 0x01, 0x42, 0xd6, 0x13, 0xed, 0x0c, 0x41, 0x42, 0x27, 0x01, 0xdf, 0x0c, + 0x01, 0xef, 0xdc, 0x0c, 0x41, 0x42, 0x60, 0x51, 0xdd, 0x0c, 0x01, 0x42, + 0xd6, 0x13, 0xec, 0x0c, 0x41, 0xe9, 0xd1, 0x0c, 0x41, 0xe2, 0xc2, 0x0c, 0x01, 0xe3, 0xc4, 0x0c, 0x81, 0x72, 0xe4, 0xc7, 0x0c, 0x01, 0xe5, 0xcb, 0x0c, 0x01, 0xe6, 0xcc, 0x0c, 0x01, 0xe7, 0xcd, 0x0c, 0x81, 0x5d, 0xe8, 0xcf, 0x0c, 0x01, 0xea, 0xd2, 0x0c, 0x01, 0xeb, 0xd3, 0x0c, 0x01, 0xec, @@ -6257,22 +6387,22 @@ static const unsigned char uname2c_tree[218382] = { 0x0c, 0x81, 0x16, 0xf4, 0xe6, 0x0c, 0x81, 0x0d, 0xf6, 0xee, 0x0c, 0x01, 0xfa, 0xef, 0x0c, 0xc1, 0x00, 0xf3, 0xf0, 0x0c, 0x41, 0xf9, 0xe8, 0x0c, 0x41, 0xfa, 0xe5, 0x0c, 0x41, 0xe3, 0xc5, 0x0c, 0x01, 0xf4, 0xe7, 0x0c, - 0x81, 0x04, 0xf9, 0xda, 0x0c, 0x41, 0x4c, 0x01, 0x8a, 0xf1, 0x0c, 0x41, + 0x81, 0x04, 0xf9, 0xda, 0x0c, 0x41, 0x4c, 0xcb, 0x8b, 0xf1, 0x0c, 0x41, 0xf0, 0xe1, 0x0c, 0x41, 0xf9, 0xd7, 0x0c, 0x41, 0xf9, 0xce, 0x0c, 0x41, 0xe8, 0xe9, 0x0c, 0x01, 0xf3, 0xc6, 0x0c, 0x41, 0xe1, 0xc1, 0x0c, 0x01, - 0xeb, 0xd4, 0x0c, 0x01, 0x42, 0x8b, 0x05, 0xc3, 0x0c, 0x01, 0x42, 0x1b, - 0x00, 0xc8, 0x0c, 0x41, 0x02, 0xc8, 0x02, 0x1c, 0x43, 0xbf, 0x0a, 0xfa, - 0x0c, 0x81, 0x06, 0x43, 0xb0, 0x06, 0xfc, 0x0c, 0x41, 0x80, 0x01, 0xff, - 0x47, 0x22, 0x11, 0xfe, 0x0c, 0x01, 0x48, 0xd5, 0x5c, 0xff, 0x0c, 0x41, - 0x43, 0x09, 0x4c, 0xfd, 0x0c, 0x01, 0x42, 0x32, 0x00, 0xfb, 0x0c, 0x41, - 0xe1, 0x80, 0x0c, 0x81, 0xdf, 0x01, 0x47, 0x2b, 0xcd, 0x8a, 0x0c, 0x01, - 0xe5, 0x89, 0x0c, 0x81, 0x51, 0xe9, 0x90, 0x0c, 0x81, 0x48, 0x0b, 0xe6, - 0x9d, 0x38, 0xef, 0x9b, 0x0c, 0x81, 0x29, 0x0a, 0x5f, 0xae, 0x19, 0x48, - 0x32, 0xc8, 0xa3, 0x0c, 0x01, 0xf5, 0xaa, 0x0c, 0xc1, 0x00, 0x42, 0x12, + 0xeb, 0xd4, 0x0c, 0x01, 0x42, 0xb6, 0x05, 0xc3, 0x0c, 0x01, 0x42, 0x1b, + 0x00, 0xc8, 0x0c, 0x41, 0x02, 0xf3, 0x02, 0x1c, 0x43, 0x0e, 0x0b, 0xfa, + 0x0c, 0x81, 0x06, 0x43, 0xdb, 0x06, 0xfc, 0x0c, 0x41, 0x80, 0x01, 0xff, + 0x47, 0x71, 0x11, 0xfe, 0x0c, 0x01, 0x48, 0x40, 0x5e, 0xff, 0x0c, 0x41, + 0x43, 0x52, 0x4d, 0xfd, 0x0c, 0x01, 0x42, 0x32, 0x00, 0xfb, 0x0c, 0x41, + 0xe1, 0x80, 0x0c, 0x81, 0xdf, 0x01, 0x47, 0xfe, 0xcf, 0x8a, 0x0c, 0x01, + 0xe5, 0x89, 0x0c, 0x81, 0x51, 0xe9, 0x90, 0x0c, 0x81, 0x48, 0x0b, 0x17, + 0xa0, 0x38, 0xef, 0x9b, 0x0c, 0x81, 0x29, 0x0a, 0xaf, 0xb0, 0x19, 0x48, + 0xe0, 0xca, 0xa3, 0x0c, 0x01, 0xf5, 0xaa, 0x0c, 0xc1, 0x00, 0x42, 0xb3, 0x25, 0x95, 0x0c, 0x01, 0xf3, 0xb2, 0x0c, 0x01, 0xf5, 0xab, 0x0c, 0x41, - 0x42, 0x17, 0x50, 0x9e, 0x0c, 0x01, 0x42, 0x87, 0x13, 0xad, 0x0c, 0x41, - 0x42, 0x27, 0x01, 0x9f, 0x0c, 0x01, 0xef, 0x9c, 0x0c, 0x41, 0x42, 0x17, - 0x50, 0x9d, 0x0c, 0x01, 0x42, 0x87, 0x13, 0xac, 0x0c, 0x41, 0xe9, 0x91, + 0x42, 0x60, 0x51, 0x9e, 0x0c, 0x01, 0x42, 0xd6, 0x13, 0xad, 0x0c, 0x41, + 0x42, 0x27, 0x01, 0x9f, 0x0c, 0x01, 0xef, 0x9c, 0x0c, 0x41, 0x42, 0x60, + 0x51, 0x9d, 0x0c, 0x01, 0x42, 0xd6, 0x13, 0xac, 0x0c, 0x41, 0xe9, 0x91, 0x0c, 0x41, 0xe2, 0x82, 0x0c, 0x01, 0xe3, 0x84, 0x0c, 0x81, 0x72, 0xe4, 0x87, 0x0c, 0x01, 0xe5, 0x8b, 0x0c, 0x01, 0xe6, 0x8c, 0x0c, 0x01, 0xe7, 0x8d, 0x0c, 0x81, 0x5d, 0xe8, 0x8f, 0x0c, 0x01, 0xea, 0x92, 0x0c, 0x01, @@ -6282,4093 +6412,4104 @@ static const unsigned char uname2c_tree[218382] = { 0x0d, 0xf6, 0xae, 0x0c, 0x01, 0xfa, 0xaf, 0x0c, 0xc1, 0x00, 0xf3, 0xb0, 0x0c, 0x41, 0xf9, 0xa8, 0x0c, 0x41, 0xfa, 0xa5, 0x0c, 0x41, 0xe3, 0x85, 0x0c, 0x01, 0xf4, 0xa7, 0x0c, 0x81, 0x04, 0xf9, 0x9a, 0x0c, 0x41, 0x4c, - 0x01, 0x8a, 0xb1, 0x0c, 0x41, 0xf0, 0xa1, 0x0c, 0x41, 0xf9, 0x97, 0x0c, + 0xcb, 0x8b, 0xb1, 0x0c, 0x41, 0xf0, 0xa1, 0x0c, 0x41, 0xf9, 0x97, 0x0c, 0x41, 0xf9, 0x8e, 0x0c, 0x41, 0xe8, 0xa9, 0x0c, 0x01, 0xf3, 0x86, 0x0c, - 0x41, 0xe1, 0x81, 0x0c, 0x01, 0xeb, 0x94, 0x0c, 0x01, 0x42, 0x8b, 0x05, - 0x83, 0x0c, 0x01, 0x42, 0x1b, 0x00, 0x88, 0x0c, 0x41, 0x49, 0x54, 0xb7, - 0xe2, 0x6f, 0x01, 0x4e, 0xb6, 0x1f, 0xe3, 0x6f, 0x41, 0x06, 0xa8, 0xd7, - 0xf5, 0x01, 0x05, 0xe4, 0x15, 0x01, 0xff, 0x51, 0x93, 0x56, 0xff, 0xe5, - 0x01, 0x06, 0xc4, 0x06, 0xa3, 0x01, 0x07, 0xc1, 0x05, 0x17, 0x05, 0x2f, - 0x03, 0x01, 0xff, 0x47, 0xc8, 0xce, 0xf0, 0xe5, 0x01, 0x44, 0x4a, 0xed, - 0xef, 0xe5, 0x01, 0x42, 0x57, 0x16, 0xee, 0xe5, 0x41, 0xe1, 0xd6, 0xe5, + 0x41, 0xe1, 0x81, 0x0c, 0x01, 0xeb, 0x94, 0x0c, 0x01, 0x42, 0xb6, 0x05, + 0x83, 0x0c, 0x01, 0x42, 0x1b, 0x00, 0x88, 0x0c, 0x41, 0x49, 0xb7, 0xb9, + 0xe2, 0x6f, 0x01, 0x4e, 0x58, 0x20, 0xe3, 0x6f, 0x41, 0x06, 0x8e, 0xda, + 0xf5, 0x01, 0x05, 0x50, 0x16, 0x01, 0xff, 0x51, 0xdc, 0x57, 0xff, 0xe5, + 0x01, 0x06, 0xef, 0x06, 0xa3, 0x01, 0x07, 0xec, 0x05, 0x17, 0x05, 0x5a, + 0x03, 0x01, 0xff, 0x47, 0xa2, 0xd1, 0xf0, 0xe5, 0x01, 0x44, 0x89, 0xf0, + 0xef, 0xe5, 0x01, 0x42, 0xc3, 0x16, 0xee, 0xe5, 0x41, 0xe1, 0xd6, 0xe5, 0x81, 0x6f, 0xe5, 0xe8, 0xe5, 0x81, 0x54, 0xe9, 0xdc, 0xe5, 0x81, 0x3a, 0xef, 0xd0, 0xe5, 0x81, 0x1d, 0xf5, 0xe2, 0xe5, 0xc1, 0x00, 0x42, 0x7f, 0x02, 0xe4, 0xe5, 0x01, 0xea, 0xe5, 0xe5, 0x01, 0xeb, 0xe3, 0xe5, 0x01, - 0x42, 0xf6, 0x19, 0xe6, 0xe5, 0x01, 0xf2, 0xe7, 0xe5, 0x41, 0xed, 0xd1, + 0x42, 0x7d, 0x1a, 0xe6, 0xe5, 0x01, 0xf2, 0xe7, 0xe5, 0x41, 0xed, 0xd1, 0xe5, 0x01, 0x42, 0x1d, 0x01, 0xd2, 0xe5, 0x01, 0xef, 0xd4, 0xe5, 0x01, 0x42, 0xcf, 0x00, 0xd3, 0xe5, 0x01, 0xf9, 0xd5, 0xe5, 0x41, 0xe4, 0xe0, 0xe5, 0x01, 0xee, 0xe1, 0xe5, 0x01, 0xf0, 0xde, 0xe5, 0x01, 0xf4, 0xdd, 0xe5, 0xc1, 0x00, 0xf4, 0xdf, 0xe5, 0x41, 0xe3, 0xeb, 0xe5, 0x01, 0xe7, - 0xed, 0xe5, 0x01, 0xe8, 0xea, 0xe5, 0x01, 0x42, 0xac, 0x1e, 0xec, 0xe5, + 0xed, 0xe5, 0x01, 0xe8, 0xea, 0xe5, 0x01, 0x42, 0x4e, 0x1f, 0xec, 0xe5, 0x01, 0xf3, 0xe9, 0xe5, 0x41, 0xe2, 0xd8, 0xe5, 0x01, 0xe4, 0xd7, 0xe5, 0x01, 0xe8, 0xd9, 0xe5, 0x01, 0xec, 0xda, 0xe5, 0x01, 0xf7, 0xdb, 0xe5, - 0x41, 0x45, 0xc3, 0x0a, 0xf9, 0xe5, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, - 0xfa, 0xe5, 0x01, 0x43, 0xbf, 0x0a, 0xf2, 0xe5, 0x01, 0xb3, 0x14, 0xb4, - 0x06, 0x44, 0xa1, 0x1d, 0xf1, 0xe5, 0x41, 0x44, 0x25, 0x01, 0xf4, 0xe5, - 0x01, 0x42, 0x15, 0x02, 0xf3, 0xe5, 0x41, 0x44, 0x27, 0x1d, 0xf8, 0xe5, - 0x01, 0x42, 0x60, 0x25, 0xf7, 0xe5, 0x41, 0x43, 0xa7, 0x05, 0xf6, 0xe5, - 0x01, 0x43, 0xcb, 0x06, 0xf5, 0xe5, 0x41, 0x44, 0xb2, 0xeb, 0x7d, 0x1c, - 0x00, 0x06, 0xc4, 0x06, 0xcd, 0x01, 0x50, 0x50, 0x56, 0x79, 0x1c, 0x00, - 0x07, 0xc1, 0x05, 0x2f, 0x02, 0x57, 0x16, 0x1f, 0xb0, 0x06, 0x45, 0x2d, - 0xe7, 0x7b, 0x1c, 0x40, 0x47, 0x90, 0xce, 0x7c, 0x1c, 0x00, 0x0b, 0x02, - 0x16, 0x01, 0xff, 0x4d, 0x93, 0x80, 0x7f, 0x1c, 0x00, 0x46, 0x9a, 0x80, - 0x7e, 0x1c, 0x40, 0x48, 0x22, 0xc0, 0x78, 0x1c, 0x00, 0x51, 0x4f, 0x56, + 0x41, 0x45, 0x12, 0x0b, 0xf9, 0xe5, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, + 0xfa, 0xe5, 0x01, 0x43, 0x0e, 0x0b, 0xf2, 0xe5, 0x01, 0xb3, 0x14, 0xb4, + 0x06, 0x44, 0x43, 0x1e, 0xf1, 0xe5, 0x41, 0x44, 0x25, 0x01, 0xf4, 0xe5, + 0x01, 0x42, 0x15, 0x02, 0xf3, 0xe5, 0x41, 0x44, 0xc9, 0x1d, 0xf8, 0xe5, + 0x01, 0x42, 0x01, 0x26, 0xf7, 0xe5, 0x41, 0x43, 0xd2, 0x05, 0xf6, 0xe5, + 0x01, 0x43, 0xf6, 0x06, 0xf5, 0xe5, 0x41, 0x44, 0xe5, 0xee, 0x7d, 0x1c, + 0x00, 0x06, 0xef, 0x06, 0xcd, 0x01, 0x50, 0x99, 0x57, 0x79, 0x1c, 0x00, + 0x07, 0xec, 0x05, 0x2f, 0x02, 0xc3, 0x16, 0x1f, 0xb0, 0x06, 0x45, 0x51, + 0xea, 0x7b, 0x1c, 0x40, 0x47, 0x6a, 0xd1, 0x7c, 0x1c, 0x00, 0x0b, 0x6e, + 0x16, 0x01, 0xff, 0x4d, 0x29, 0x82, 0x7f, 0x1c, 0x00, 0x46, 0x30, 0x82, + 0x7e, 0x1c, 0x40, 0x48, 0xa0, 0xc2, 0x78, 0x1c, 0x00, 0x51, 0x98, 0x57, 0x7a, 0x1c, 0x40, 0xa1, 0x6e, 0xa5, 0x58, 0xa9, 0x44, 0xac, 0x29, 0xaf, 0x15, 0xb5, 0x01, 0xff, 0xe3, 0x6a, 0x1c, 0x00, 0xe4, 0x6b, 0x1c, 0x00, - 0x42, 0xac, 0x1e, 0x6c, 0x1c, 0x00, 0xf9, 0x6d, 0x1c, 0x40, 0xe2, 0x75, - 0x1c, 0x00, 0xe8, 0x77, 0x1c, 0x00, 0x42, 0xc3, 0x05, 0x74, 0x1c, 0x00, + 0x42, 0x4e, 0x1f, 0x6c, 0x1c, 0x00, 0xf9, 0x6d, 0x1c, 0x40, 0xe2, 0x75, + 0x1c, 0x00, 0xe8, 0x77, 0x1c, 0x00, 0x42, 0xee, 0x05, 0x74, 0x1c, 0x00, 0xf6, 0x76, 0x1c, 0x40, 0xe1, 0x5a, 0x1c, 0x80, 0x10, 0xe5, 0x6e, 0x1c, 0x00, 0xe9, 0x64, 0x1c, 0x00, 0xef, 0x73, 0x1c, 0x00, 0xf5, 0x69, 0x1c, - 0x40, 0xe1, 0x5f, 0x1c, 0x40, 0xe8, 0x66, 0x1c, 0x00, 0x42, 0xf6, 0x19, + 0x40, 0xe1, 0x5f, 0x1c, 0x40, 0xe8, 0x66, 0x1c, 0x00, 0x42, 0x7d, 0x1a, 0x67, 0x1c, 0x00, 0xf2, 0x68, 0x1c, 0x00, 0xf3, 0x65, 0x1c, 0x40, 0x42, 0x7f, 0x02, 0x70, 0x1c, 0x00, 0xee, 0x71, 0x1c, 0x00, 0xf0, 0x6f, 0x1c, 0x00, 0x42, 0xcf, 0x00, 0x72, 0x1c, 0x40, 0xa1, 0x12, 0xe7, 0x5c, 0x1c, 0x00, 0xec, 0x5e, 0x1c, 0x00, 0x42, 0x1d, 0x01, 0x5d, 0x1c, 0x00, 0xf4, 0x5b, 0x1c, 0x40, 0xea, 0x61, 0x1c, 0x00, 0xeb, 0x60, 0x1c, 0x00, 0xed, - 0x62, 0x1c, 0x00, 0xf7, 0x63, 0x1c, 0x40, 0x45, 0xc3, 0x0a, 0x58, 0x1c, - 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x59, 0x1c, 0x00, 0x43, 0xbf, 0x0a, - 0x51, 0x1c, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x50, 0x1c, + 0x62, 0x1c, 0x00, 0xf7, 0x63, 0x1c, 0x40, 0x45, 0x12, 0x0b, 0x58, 0x1c, + 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x59, 0x1c, 0x00, 0x43, 0x0e, 0x0b, + 0x51, 0x1c, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x50, 0x1c, 0x40, 0x44, 0x25, 0x01, 0x53, 0x1c, 0x00, 0x42, 0x15, 0x02, 0x52, 0x1c, - 0x40, 0x44, 0x27, 0x1d, 0x57, 0x1c, 0x00, 0x42, 0x60, 0x25, 0x56, 0x1c, - 0x40, 0x43, 0xa7, 0x05, 0x55, 0x1c, 0x00, 0x43, 0xcb, 0x06, 0x54, 0x1c, - 0x40, 0x04, 0xff, 0x81, 0x06, 0x44, 0xc4, 0xdb, 0xdb, 0x02, 0x40, 0x4c, - 0xf4, 0x3c, 0x9b, 0x16, 0x00, 0x07, 0xc1, 0x05, 0x0c, 0x55, 0xeb, 0x3c, - 0x9c, 0x16, 0x00, 0x4a, 0xd7, 0xae, 0x80, 0x16, 0x40, 0x44, 0xb6, 0xeb, - 0x90, 0x16, 0x00, 0x45, 0xa1, 0xe1, 0x81, 0x16, 0x00, 0xa3, 0x8f, 0x01, - 0x44, 0x42, 0xec, 0x87, 0x16, 0x00, 0x02, 0x89, 0x00, 0x73, 0x45, 0x4f, - 0xe3, 0x83, 0x16, 0x00, 0x44, 0xce, 0xec, 0x8c, 0x16, 0x00, 0xa9, 0x59, - 0x44, 0xd6, 0xed, 0x82, 0x16, 0x00, 0x44, 0x06, 0xee, 0x8b, 0x16, 0x00, - 0xae, 0x3f, 0xaf, 0x33, 0x45, 0xab, 0xe6, 0x9a, 0x16, 0x00, 0x44, 0x22, - 0xef, 0x8f, 0x16, 0x00, 0xb3, 0x19, 0x45, 0x22, 0xe8, 0x88, 0x16, 0x00, - 0xb5, 0x01, 0xff, 0x43, 0x25, 0x0f, 0x86, 0x16, 0x00, 0x47, 0x1c, 0xcf, - 0x97, 0x16, 0x00, 0xf2, 0x92, 0x16, 0x40, 0x43, 0x24, 0x17, 0x84, 0x16, - 0x00, 0x45, 0x54, 0xe8, 0x8e, 0x16, 0x40, 0x42, 0xac, 0x1e, 0x91, 0x16, - 0x00, 0xf2, 0x96, 0x16, 0x40, 0x46, 0xf8, 0xd8, 0x8d, 0x16, 0x00, 0x43, - 0xb5, 0x00, 0x85, 0x16, 0x40, 0x43, 0x89, 0x09, 0x98, 0x16, 0x00, 0x46, - 0xb6, 0xdb, 0x94, 0x16, 0x40, 0x45, 0xab, 0xe1, 0x95, 0x16, 0x00, 0x45, - 0xb7, 0xdb, 0x93, 0x16, 0x00, 0x49, 0xa6, 0xb9, 0x99, 0x16, 0x40, 0x44, - 0x6e, 0xec, 0x8a, 0x16, 0x00, 0x43, 0x44, 0x20, 0x89, 0x16, 0x40, 0x49, - 0x38, 0xb5, 0x75, 0xf7, 0x01, 0x02, 0x18, 0x00, 0x0f, 0xb4, 0x01, 0xff, - 0x4b, 0xf0, 0x96, 0xd1, 0xf6, 0x01, 0x44, 0x9e, 0xee, 0x19, 0xf4, 0x41, - 0x4f, 0x2e, 0x69, 0x47, 0x24, 0x00, 0xa2, 0x2e, 0xa3, 0x20, 0xa4, 0x12, - 0x44, 0x72, 0x50, 0x42, 0x24, 0x00, 0x44, 0x5d, 0x0e, 0x40, 0x24, 0x00, - 0x4d, 0xa8, 0x82, 0x43, 0x24, 0x40, 0x43, 0xce, 0x03, 0x48, 0x24, 0x00, - 0x4f, 0xeb, 0x6f, 0x4a, 0x24, 0x40, 0x44, 0x71, 0x6d, 0x41, 0x24, 0x00, - 0x56, 0x27, 0x37, 0x49, 0x24, 0x40, 0x4a, 0xa7, 0xa7, 0x44, 0x24, 0x00, - 0x46, 0xf8, 0xdb, 0x45, 0x24, 0x00, 0x59, 0x0a, 0x25, 0x46, 0x24, 0x40, - 0x5a, 0xde, 0x1f, 0xfc, 0xff, 0x00, 0x06, 0x43, 0x42, 0x06, 0x51, 0x6b, - 0x5c, 0xff, 0x23, 0x40, 0x0e, 0x7e, 0x74, 0x06, 0x46, 0x1a, 0x62, 0x5d, - 0x2e, 0x40, 0x44, 0xa5, 0x01, 0xa7, 0x29, 0x00, 0x42, 0x50, 0x02, 0xa6, - 0x29, 0x40, 0x05, 0xc0, 0x6e, 0xd2, 0x24, 0xa1, 0xff, 0x1c, 0xa5, 0x9a, - 0x0d, 0xa9, 0x82, 0x0d, 0x03, 0x98, 0xd4, 0xe5, 0x09, 0xaf, 0xc0, 0x04, - 0x4d, 0xc1, 0x85, 0x10, 0xcc, 0x01, 0xb5, 0xb6, 0x03, 0x16, 0x95, 0x37, - 0x01, 0xff, 0x4a, 0x71, 0xa6, 0x4f, 0xe1, 0x01, 0x06, 0xc4, 0x06, 0xe4, - 0x02, 0xac, 0x55, 0xb3, 0x21, 0x05, 0x05, 0x31, 0x01, 0xff, 0xe2, 0x30, - 0xe1, 0x01, 0xe4, 0x36, 0xe1, 0x01, 0xe7, 0x35, 0xe1, 0x01, 0xea, 0x32, - 0xe1, 0x01, 0xed, 0x31, 0xe1, 0x01, 0xf3, 0x34, 0xe1, 0x01, 0xf6, 0x33, - 0xe1, 0x41, 0x04, 0x30, 0x03, 0x06, 0x52, 0x82, 0x55, 0x3d, 0xe1, 0x41, - 0x04, 0xbb, 0x1a, 0x06, 0x45, 0x49, 0xe9, 0x3c, 0xe1, 0x41, 0x46, 0xd6, - 0xd6, 0x3a, 0xe1, 0x01, 0x4c, 0xa5, 0x8e, 0x3b, 0xe1, 0x01, 0x48, 0x78, - 0x83, 0x39, 0xe1, 0x01, 0x46, 0x7c, 0x1c, 0x37, 0xe1, 0x01, 0x45, 0x18, - 0xe8, 0x38, 0xe1, 0x41, 0x06, 0xc2, 0x05, 0x06, 0x4c, 0x39, 0x91, 0x4e, - 0xe1, 0x41, 0xe1, 0x24, 0xe1, 0x81, 0xf9, 0x01, 0x42, 0x37, 0x00, 0x08, - 0xe1, 0x01, 0xa4, 0xe6, 0x01, 0xe5, 0x2a, 0xe1, 0x81, 0xdc, 0x01, 0x42, - 0xe1, 0x07, 0x15, 0xe1, 0x01, 0x42, 0x24, 0x02, 0x22, 0xe1, 0x01, 0x42, - 0x22, 0x00, 0x04, 0xe1, 0x81, 0xc4, 0x01, 0xe9, 0x26, 0xe1, 0x01, 0x42, - 0x1b, 0x02, 0x0e, 0xe1, 0x01, 0x42, 0x74, 0x00, 0x09, 0xe1, 0x01, 0xad, - 0xa7, 0x01, 0xae, 0x65, 0xef, 0x28, 0xe1, 0x81, 0x5c, 0xb0, 0x50, 0x42, - 0xf4, 0x13, 0x17, 0xe1, 0x01, 0xb2, 0x3e, 0x42, 0x15, 0x06, 0x0a, 0xe1, - 0x01, 0xb4, 0x26, 0xf5, 0x27, 0xe1, 0x01, 0x42, 0xa6, 0x0a, 0x12, 0xe1, - 0x01, 0xf7, 0x2c, 0xe1, 0x01, 0xb8, 0x0c, 0x42, 0x34, 0x22, 0x18, 0xe1, - 0x01, 0x42, 0x59, 0x00, 0x0b, 0xe1, 0x41, 0xe1, 0x06, 0xe1, 0x01, 0x42, - 0x34, 0x22, 0x1b, 0xe1, 0x41, 0xe1, 0x03, 0xe1, 0x01, 0x42, 0x15, 0x06, - 0x01, 0xe1, 0x01, 0x42, 0x4c, 0x26, 0x14, 0xe1, 0x41, 0xe1, 0x16, 0xe1, - 0x01, 0x42, 0x71, 0x00, 0x23, 0xe1, 0x41, 0xe1, 0x1a, 0xe1, 0x01, 0x42, - 0x74, 0x00, 0x21, 0xe1, 0x41, 0xef, 0x29, 0xe1, 0x41, 0xe1, 0x05, 0xe1, - 0x01, 0x42, 0x37, 0x00, 0x0c, 0xe1, 0x01, 0x42, 0x1b, 0x02, 0x07, 0xe1, - 0x01, 0xb0, 0x24, 0x42, 0xf4, 0x13, 0x19, 0xe1, 0x01, 0x42, 0x71, 0x00, - 0x11, 0xe1, 0x01, 0xb4, 0x06, 0x42, 0x34, 0x22, 0x10, 0xe1, 0x41, 0xe1, - 0x02, 0xe1, 0x01, 0x42, 0x15, 0x06, 0x0d, 0xe1, 0x01, 0x42, 0x4c, 0x26, - 0x13, 0xe1, 0x41, 0xe1, 0x1c, 0xe1, 0x01, 0x42, 0x74, 0x00, 0x1e, 0xe1, - 0x41, 0xe1, 0x00, 0xe1, 0x01, 0x42, 0x74, 0x00, 0x20, 0xe1, 0x41, 0xe8, - 0x1f, 0xe1, 0x41, 0xe5, 0x2b, 0xe1, 0x41, 0xe1, 0x0f, 0xe1, 0x01, 0x42, - 0x74, 0x00, 0x1d, 0xe1, 0x41, 0xe1, 0x25, 0xe1, 0x41, 0x45, 0xc3, 0x0a, - 0x48, 0xe1, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x49, 0xe1, 0x01, 0x43, - 0xbf, 0x0a, 0x41, 0xe1, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, - 0x40, 0xe1, 0x41, 0x44, 0x25, 0x01, 0x43, 0xe1, 0x01, 0x42, 0x15, 0x02, - 0x42, 0xe1, 0x41, 0x44, 0x27, 0x1d, 0x47, 0xe1, 0x01, 0x42, 0x60, 0x25, - 0x46, 0xe1, 0x41, 0x43, 0xa7, 0x05, 0x45, 0xe1, 0x01, 0x43, 0xcb, 0x06, - 0x44, 0xe1, 0x41, 0x42, 0x0f, 0x07, 0x00, 0x00, 0x00, 0xad, 0x16, 0x04, - 0x2f, 0x4e, 0x06, 0x4a, 0x3b, 0xaf, 0x29, 0xf5, 0x41, 0x4a, 0x5d, 0xa6, - 0x05, 0xd8, 0x00, 0x4e, 0xb6, 0x1f, 0xe1, 0x6f, 0x41, 0x04, 0x8c, 0x05, - 0x06, 0x48, 0x59, 0xbf, 0x16, 0x21, 0x40, 0xa5, 0x4b, 0xa6, 0x3d, 0x52, - 0x7c, 0x52, 0x9a, 0x24, 0x00, 0xb3, 0x20, 0xb4, 0x01, 0xff, 0x4c, 0x42, - 0x50, 0x91, 0x24, 0x00, 0x51, 0x2a, 0x59, 0x94, 0x24, 0x00, 0x02, 0x15, - 0x01, 0x01, 0xff, 0x4d, 0xac, 0x83, 0x93, 0x24, 0x00, 0x4d, 0xca, 0x84, - 0x9b, 0x24, 0x40, 0x52, 0x3c, 0x50, 0x98, 0x24, 0x00, 0xa9, 0x01, 0xff, - 0x42, 0x31, 0x03, 0x23, 0x00, 0x00, 0x4f, 0x6f, 0x73, 0x97, 0x24, 0x40, - 0x50, 0x3a, 0x62, 0x96, 0x24, 0x00, 0x51, 0x9f, 0x5b, 0x95, 0x24, 0x40, - 0x51, 0x90, 0x59, 0x99, 0x24, 0x00, 0x4f, 0x0b, 0x6e, 0x92, 0x24, 0x40, - 0x80, 0xe4, 0x04, 0x4c, 0x80, 0x4b, 0xa0, 0x00, 0x00, 0x02, 0x7d, 0x02, - 0xcd, 0x04, 0xae, 0xb6, 0x04, 0xf2, 0xbd, 0x22, 0x80, 0xd0, 0x01, 0x42, - 0x1b, 0x03, 0x43, 0xf4, 0x01, 0xb4, 0x01, 0xff, 0x80, 0x3e, 0x05, 0x18, - 0x91, 0x20, 0xe5, 0xc8, 0xf5, 0xc1, 0x00, 0x03, 0x9f, 0x0e, 0x0d, 0x44, - 0x0e, 0xec, 0xd3, 0xf4, 0xc1, 0x00, 0x56, 0xa7, 0x31, 0xd4, 0xf4, 0x41, - 0xe4, 0xca, 0xf5, 0x01, 0x42, 0x8c, 0x09, 0xc9, 0xf5, 0x41, 0xac, 0x0c, - 0x60, 0xc5, 0x0f, 0x44, 0xf5, 0x01, 0x6b, 0x98, 0x02, 0xb1, 0x27, 0x40, - 0x5e, 0xaa, 0x12, 0x43, 0xf5, 0x01, 0x6a, 0x95, 0x03, 0xaf, 0x27, 0x40, - 0xa1, 0x63, 0x4a, 0x67, 0xa6, 0x7b, 0x23, 0x00, 0x03, 0x7b, 0x00, 0x4d, - 0x4c, 0x87, 0x00, 0x6f, 0x22, 0x00, 0x4c, 0x21, 0x8e, 0x62, 0x22, 0x00, - 0x49, 0xec, 0x00, 0x6e, 0x22, 0x00, 0x52, 0xa0, 0x52, 0xea, 0x22, 0x80, - 0x2e, 0x4b, 0x41, 0x69, 0x26, 0x22, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, - 0x44, 0xae, 0x22, 0x41, 0x22, 0x00, 0x43, 0xa0, 0x3a, 0xad, 0x22, 0x40, - 0x43, 0x30, 0x03, 0xac, 0x00, 0x00, 0x06, 0x34, 0x24, 0x01, 0xff, 0x54, - 0x13, 0x42, 0xe2, 0x22, 0x00, 0x57, 0xf9, 0x2e, 0xe3, 0x22, 0x40, 0x4c, - 0x51, 0x28, 0xec, 0x22, 0x40, 0x45, 0xac, 0x0c, 0x60, 0x22, 0x00, 0x4a, - 0x06, 0x39, 0x6d, 0x22, 0x40, 0x03, 0x43, 0x06, 0x12, 0x4e, 0x11, 0x69, - 0x49, 0x22, 0x00, 0x4c, 0x9d, 0x90, 0x09, 0x22, 0x00, 0x56, 0x8d, 0x36, - 0x44, 0x22, 0x40, 0x47, 0xe3, 0x3f, 0x84, 0x22, 0x00, 0x49, 0x59, 0x35, - 0x85, 0x22, 0x40, 0x4d, 0x5f, 0x80, 0xbb, 0x20, 0x00, 0x4f, 0xa3, 0x52, - 0xb2, 0x22, 0x80, 0xcc, 0x02, 0x02, 0x53, 0x00, 0x01, 0xff, 0x80, 0x06, - 0x56, 0x33, 0x33, 0xea, 0xf6, 0x41, 0x05, 0x25, 0x23, 0xcb, 0x01, 0x06, - 0xbe, 0x06, 0x7a, 0x05, 0x37, 0x1a, 0x01, 0xff, 0xa1, 0x3b, 0x4b, 0x95, - 0x97, 0x09, 0x2b, 0x00, 0x4c, 0x71, 0x8c, 0xd6, 0x21, 0x00, 0x09, 0x9c, - 0x01, 0x19, 0x50, 0x6a, 0x65, 0x54, 0xf8, 0x01, 0x55, 0x01, 0x02, 0x66, - 0x2b, 0x80, 0x06, 0x4b, 0xfa, 0x0f, 0x01, 0x2b, 0x40, 0x47, 0x81, 0x14, - 0x76, 0x2b, 0x40, 0x43, 0xa7, 0xcd, 0x60, 0xf6, 0x01, 0x44, 0xf0, 0x4f, - 0x50, 0xf6, 0x01, 0x49, 0x89, 0xbe, 0x58, 0xf6, 0x41, 0x53, 0x80, 0x3f, - 0x21, 0x29, 0x00, 0x44, 0xcf, 0x00, 0x96, 0x21, 0xc0, 0x00, 0x80, 0x01, - 0xff, 0x54, 0x57, 0x3f, 0x27, 0x29, 0x00, 0x59, 0x16, 0x23, 0x32, 0x29, - 0x00, 0x48, 0xfd, 0xb1, 0xb8, 0xf8, 0x01, 0x03, 0x7a, 0x02, 0x06, 0x49, - 0x20, 0x24, 0x23, 0x29, 0x40, 0x46, 0xbb, 0x18, 0xf1, 0x21, 0x00, 0x48, - 0x3a, 0xc5, 0xb8, 0x21, 0x40, 0x09, 0xb3, 0x58, 0x1c, 0x50, 0x3a, 0x64, - 0x37, 0xa8, 0x00, 0x03, 0x7c, 0x00, 0x06, 0x4a, 0x69, 0xae, 0x38, 0xa8, - 0x40, 0x4a, 0x25, 0xac, 0x39, 0xa8, 0x00, 0x49, 0x7f, 0xbc, 0x36, 0xa8, - 0x40, 0x04, 0xbf, 0x0a, 0x11, 0x06, 0x24, 0x01, 0x01, 0xff, 0x48, 0x2a, - 0x01, 0x32, 0xa8, 0x00, 0x4a, 0xc3, 0xae, 0x35, 0xa8, 0x40, 0x46, 0xc3, - 0x0a, 0x34, 0xa8, 0x00, 0x44, 0x22, 0x00, 0x31, 0xa8, 0x00, 0x47, 0x2a, - 0x01, 0x30, 0xa8, 0x00, 0x49, 0x5f, 0x25, 0x33, 0xa8, 0x40, 0xa1, 0x3b, - 0x4b, 0x95, 0x97, 0x08, 0x2b, 0x00, 0x4c, 0x71, 0x8c, 0xd7, 0x21, 0x00, - 0x09, 0x9c, 0x01, 0x19, 0x50, 0x6a, 0x65, 0x55, 0xf8, 0x01, 0x55, 0x01, - 0x02, 0x67, 0x2b, 0x80, 0x06, 0x4b, 0xfa, 0x0f, 0x00, 0x2b, 0x40, 0x47, - 0x81, 0x14, 0x77, 0x2b, 0x40, 0x43, 0xa7, 0xcd, 0x62, 0xf6, 0x01, 0x44, - 0xf0, 0x4f, 0x52, 0xf6, 0x01, 0x49, 0x89, 0xbe, 0x5a, 0xf6, 0x41, 0x53, - 0x94, 0x3f, 0x22, 0x29, 0x00, 0x44, 0xcf, 0x00, 0x97, 0x21, 0xc0, 0x00, - 0x80, 0x01, 0xff, 0x54, 0x7f, 0x3f, 0x28, 0x29, 0x00, 0x09, 0x46, 0x10, - 0x0c, 0x48, 0xfd, 0xb1, 0xb9, 0xf8, 0x01, 0x49, 0x20, 0x24, 0x24, 0x29, - 0x40, 0x50, 0x6f, 0x3f, 0x31, 0x29, 0x00, 0x50, 0x83, 0x3f, 0x2e, 0x29, - 0x40, 0x4c, 0x51, 0x28, 0xb4, 0x22, 0x40, 0x8d, 0x06, 0x47, 0x58, 0xce, - 0xdd, 0x2a, 0x40, 0x4f, 0xe2, 0x69, 0x11, 0x20, 0x00, 0x54, 0xf3, 0x43, - 0xb1, 0xf6, 0x41, 0x50, 0xba, 0x63, 0x6f, 0x20, 0x00, 0x48, 0x5a, 0xc8, - 0x8e, 0x01, 0x41, 0xa2, 0x2d, 0x45, 0x79, 0x59, 0xd4, 0x26, 0x80, 0x20, - 0x4d, 0x62, 0x84, 0xf5, 0xf4, 0x01, 0x59, 0xbf, 0x24, 0x1e, 0xf5, 0x01, - 0xb0, 0x06, 0x4e, 0x00, 0x7b, 0xad, 0xf6, 0x41, 0x4a, 0x75, 0xa7, 0xb7, - 0xf6, 0x01, 0x45, 0x7b, 0xe4, 0x72, 0xf5, 0x41, 0x45, 0x2e, 0x03, 0xab, - 0xf6, 0x41, 0x47, 0x00, 0xcf, 0xb3, 0xf6, 0x01, 0x49, 0x1c, 0xbc, 0x83, - 0x00, 0x40, 0x03, 0xe8, 0x04, 0xca, 0x02, 0xa4, 0xf5, 0x01, 0x50, 0xad, - 0x00, 0xf9, 0x07, 0x00, 0x54, 0xeb, 0x41, 0xf4, 0x07, 0x00, 0xac, 0x16, - 0x07, 0xf3, 0x15, 0x06, 0x4a, 0x4f, 0xaf, 0xff, 0x07, 0x40, 0x4a, 0x79, - 0xa8, 0xf7, 0x07, 0x00, 0x49, 0xe1, 0xba, 0xf6, 0x07, 0x40, 0x49, 0x7f, - 0xb3, 0xfa, 0x07, 0x00, 0x06, 0xc2, 0x05, 0x06, 0x52, 0x1e, 0x53, 0xf5, - 0x07, 0x40, 0xe1, 0xca, 0x07, 0x00, 0x42, 0x16, 0x00, 0xd3, 0x07, 0x00, - 0x43, 0xef, 0x1f, 0xd7, 0x07, 0x00, 0x42, 0xa1, 0x10, 0xd8, 0x07, 0x80, - 0xa3, 0x01, 0xe5, 0xcd, 0x07, 0x80, 0x99, 0x01, 0x42, 0xe1, 0x07, 0xdd, - 0x07, 0x00, 0x43, 0x79, 0xa8, 0xdc, 0x07, 0x00, 0x42, 0x22, 0x00, 0xe4, - 0x07, 0x00, 0xe9, 0xcc, 0x07, 0x00, 0xaa, 0x66, 0x42, 0x1b, 0x02, 0xde, - 0x07, 0x00, 0x42, 0x74, 0x00, 0xdf, 0x07, 0x00, 0x42, 0x6c, 0x00, 0xe1, - 0x07, 0x00, 0xee, 0xd2, 0x07, 0x80, 0x37, 0xef, 0xd0, 0x07, 0x80, 0x2e, - 0x42, 0x6c, 0x09, 0xd4, 0x07, 0x00, 0xb2, 0x1c, 0x42, 0x15, 0x06, 0xdb, - 0x07, 0x00, 0x42, 0x12, 0x00, 0xd5, 0x07, 0x00, 0xf5, 0xce, 0x07, 0x00, - 0x42, 0xa9, 0x01, 0xe5, 0x07, 0x00, 0x42, 0x34, 0x22, 0xe6, 0x07, 0x40, - 0xe1, 0xd9, 0x07, 0x00, 0x42, 0x71, 0x00, 0xda, 0x07, 0x40, 0xef, 0xcf, - 0x07, 0x40, 0xe1, 0xe3, 0x07, 0x80, 0x0d, 0x42, 0x34, 0x22, 0xe2, 0x07, - 0xc0, 0x00, 0x47, 0xed, 0xca, 0xe7, 0x07, 0x40, 0x47, 0xed, 0xca, 0xe0, - 0x07, 0x40, 0xe1, 0xd6, 0x07, 0x00, 0x04, 0x8a, 0xee, 0x01, 0xff, 0x43, - 0xef, 0x1f, 0xe9, 0x07, 0x00, 0x42, 0xbd, 0x26, 0xe8, 0x07, 0x00, 0x42, - 0x71, 0x00, 0xea, 0x07, 0x40, 0xe5, 0xcb, 0x07, 0x40, 0x48, 0xca, 0xc3, - 0xd1, 0x07, 0x40, 0x49, 0xd0, 0xb3, 0xfd, 0x07, 0x00, 0x05, 0xc5, 0x06, - 0x06, 0x4a, 0xb1, 0xac, 0xfe, 0x07, 0x40, 0x45, 0xc3, 0x0a, 0xc8, 0x07, - 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xc9, 0x07, 0x00, 0x43, 0xbf, 0x0a, - 0xc1, 0x07, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xc0, 0x07, - 0x40, 0x44, 0x25, 0x01, 0xc3, 0x07, 0x00, 0x42, 0x15, 0x02, 0xc2, 0x07, - 0x40, 0x44, 0x27, 0x1d, 0xc7, 0x07, 0x00, 0x42, 0x60, 0x25, 0xc6, 0x07, - 0x40, 0x43, 0xa7, 0x05, 0xc5, 0x07, 0x00, 0x43, 0xcb, 0x06, 0xc4, 0x07, - 0x40, 0x07, 0xc9, 0x15, 0x06, 0x42, 0x6c, 0x00, 0xf8, 0x07, 0x40, 0x50, - 0x9a, 0x60, 0xf3, 0x07, 0x00, 0x05, 0x68, 0x33, 0x1d, 0x51, 0xf5, 0x5a, - 0xf2, 0x07, 0x00, 0x06, 0x61, 0x36, 0x01, 0xff, 0x49, 0xeb, 0x41, 0xeb, - 0x07, 0x00, 0x48, 0xc3, 0xb2, 0xec, 0x07, 0x00, 0x4b, 0x4a, 0x65, 0xed, - 0x07, 0x40, 0x4f, 0x5a, 0x6a, 0xee, 0x07, 0x00, 0x49, 0xeb, 0x41, 0xef, - 0x07, 0x00, 0x48, 0xc3, 0xb2, 0xf0, 0x07, 0x00, 0x4b, 0x4a, 0x65, 0xf1, - 0x07, 0x40, 0x4e, 0xa0, 0x76, 0x03, 0xf3, 0x01, 0xae, 0x01, 0xff, 0x54, - 0xe7, 0x40, 0xd9, 0xf7, 0x01, 0x42, 0xbd, 0x26, 0x77, 0xf9, 0x41, 0x45, - 0x41, 0xe2, 0x54, 0xf4, 0x01, 0x03, 0xa4, 0x05, 0xa9, 0x0c, 0x06, 0x3c, - 0xda, 0xd7, 0x0b, 0x45, 0xf1, 0xe6, 0x46, 0x26, 0x80, 0xc9, 0x0b, 0x47, - 0x64, 0xd2, 0x13, 0xf9, 0x01, 0xb3, 0xab, 0x0b, 0x02, 0xfe, 0x07, 0xa5, - 0x09, 0xb7, 0x11, 0x03, 0x43, 0x61, 0x01, 0xff, 0x44, 0xc2, 0x07, 0x85, - 0x00, 0x00, 0x44, 0x3d, 0xa4, 0x98, 0x23, 0x40, 0x80, 0xfa, 0x04, 0x02, - 0x5a, 0x00, 0x16, 0x05, 0xc2, 0x07, 0x06, 0x46, 0x2e, 0x75, 0xf0, 0xf4, - 0x41, 0x44, 0xc3, 0x00, 0x92, 0x2b, 0x00, 0x45, 0xc8, 0x00, 0x93, 0x2b, - 0x40, 0x51, 0x93, 0x56, 0x4f, 0x14, 0x01, 0x45, 0xe8, 0x04, 0x4d, 0x14, - 0x01, 0xa4, 0xf4, 0x03, 0x4a, 0x1e, 0x9a, 0x4e, 0x14, 0x01, 0x4e, 0x3a, - 0x77, 0x5d, 0x14, 0x01, 0x07, 0xc1, 0x05, 0xa3, 0x01, 0x42, 0xe9, 0x04, - 0x49, 0x14, 0x01, 0x50, 0x3a, 0x64, 0x5b, 0x14, 0x01, 0xb3, 0x44, 0x0b, - 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x31, 0xe5, 0x3e, 0x14, 0x01, 0xe9, 0x36, - 0x14, 0x81, 0x24, 0xef, 0x40, 0x14, 0x01, 0xf5, 0x38, 0x14, 0x81, 0x17, - 0x08, 0x9b, 0xbe, 0x01, 0xff, 0xec, 0x3c, 0x14, 0x81, 0x09, 0xf2, 0x3a, - 0x14, 0xc1, 0x00, 0xf2, 0x3b, 0x14, 0x41, 0xec, 0x3d, 0x14, 0x41, 0xf5, - 0x39, 0x14, 0x41, 0xe9, 0x37, 0x14, 0x41, 0xe1, 0x35, 0x14, 0x01, 0xe9, - 0x3f, 0x14, 0x01, 0xf5, 0x41, 0x14, 0x41, 0x4a, 0x81, 0xa5, 0x5e, 0x14, - 0x01, 0xa9, 0x01, 0xff, 0x44, 0x4a, 0xec, 0x4a, 0x14, 0x01, 0x03, 0x31, - 0x03, 0x01, 0xff, 0xa1, 0x2f, 0x4b, 0x4f, 0x23, 0x43, 0x14, 0x01, 0x4e, - 0x76, 0x76, 0x48, 0x14, 0x01, 0x4b, 0xc0, 0x9b, 0x60, 0x14, 0x01, 0x45, - 0x5a, 0x3e, 0x46, 0x14, 0x01, 0x4b, 0x32, 0xa2, 0x61, 0x14, 0x01, 0x02, - 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, 0x42, 0x14, 0x01, 0x45, 0xa3, - 0x4a, 0x45, 0x14, 0x41, 0x47, 0xd1, 0x15, 0x44, 0x14, 0x01, 0x47, 0xf2, - 0x86, 0x47, 0x14, 0x41, 0xe1, 0x00, 0x14, 0x81, 0xae, 0x02, 0xa2, 0xa1, - 0x02, 0xa3, 0x94, 0x02, 0xa4, 0xfb, 0x01, 0xe5, 0x0a, 0x14, 0x01, 0xa7, - 0xea, 0x01, 0x42, 0x22, 0x00, 0x34, 0x14, 0x01, 0xe9, 0x02, 0x14, 0x81, - 0xda, 0x01, 0xaa, 0xcd, 0x01, 0xab, 0xc0, 0x01, 0xac, 0xb3, 0x01, 0xad, - 0xa6, 0x01, 0xae, 0x7b, 0xef, 0x0c, 0x14, 0x01, 0xb0, 0x6b, 0xb2, 0x5f, - 0xb3, 0x4d, 0xb4, 0x34, 0xf5, 0x04, 0x14, 0x81, 0x2b, 0xb6, 0x0c, 0x42, - 0xa9, 0x01, 0x30, 0x14, 0x01, 0x42, 0x34, 0x22, 0x2b, 0x14, 0x41, 0x4d, - 0xd4, 0x80, 0x5f, 0x14, 0x01, 0x07, 0x9c, 0xbe, 0x01, 0xff, 0xec, 0x08, - 0x14, 0x81, 0x09, 0xf2, 0x06, 0x14, 0xc1, 0x00, 0xf2, 0x07, 0x14, 0x41, - 0xec, 0x09, 0x14, 0x41, 0xf5, 0x05, 0x14, 0x41, 0xe1, 0x1f, 0x14, 0x01, - 0x42, 0x22, 0x00, 0x20, 0x14, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x1a, 0x14, - 0x01, 0x42, 0x22, 0x00, 0x1b, 0x14, 0x41, 0xe1, 0x33, 0x14, 0x01, 0x42, - 0x22, 0x00, 0x31, 0x14, 0x01, 0x42, 0x15, 0x06, 0x32, 0x14, 0x41, 0xe1, - 0x2c, 0x14, 0x01, 0x42, 0x22, 0x00, 0x2d, 0x14, 0x41, 0xe1, 0x25, 0x14, - 0x01, 0x42, 0x22, 0x00, 0x26, 0x14, 0x41, 0xe1, 0x23, 0x14, 0x01, 0xa7, - 0x19, 0x42, 0x22, 0x00, 0x24, 0x14, 0x01, 0x42, 0xff, 0x04, 0x1e, 0x14, - 0x01, 0xb9, 0x01, 0xff, 0xe1, 0x18, 0x14, 0x01, 0x42, 0x22, 0x00, 0x19, - 0x14, 0x41, 0xe1, 0x12, 0x14, 0x01, 0x42, 0x22, 0x00, 0x13, 0x14, 0x41, - 0xe1, 0x29, 0x14, 0x01, 0x42, 0x22, 0x00, 0x2a, 0x14, 0x41, 0xe1, 0x2e, - 0x14, 0x01, 0x42, 0x22, 0x00, 0x2f, 0x14, 0x41, 0xe1, 0x0e, 0x14, 0x01, - 0x42, 0x22, 0x00, 0x0f, 0x14, 0x41, 0xe1, 0x16, 0x14, 0x01, 0x42, 0x22, - 0x00, 0x17, 0x14, 0x41, 0xe9, 0x03, 0x14, 0x41, 0xe1, 0x10, 0x14, 0x01, - 0x42, 0x22, 0x00, 0x11, 0x14, 0x41, 0xe1, 0x21, 0x14, 0x01, 0xa4, 0x06, - 0x42, 0x22, 0x00, 0x22, 0x14, 0x41, 0xe1, 0x1c, 0x14, 0x01, 0x42, 0x22, - 0x00, 0x1d, 0x14, 0x41, 0xe1, 0x14, 0x14, 0x01, 0x42, 0x22, 0x00, 0x15, - 0x14, 0x41, 0xe1, 0x27, 0x14, 0x01, 0x42, 0x22, 0x00, 0x28, 0x14, 0x41, - 0xe1, 0x01, 0x14, 0x01, 0xe9, 0x0b, 0x14, 0x01, 0xf5, 0x0d, 0x14, 0x41, - 0x44, 0xd1, 0x1f, 0x4b, 0x14, 0x01, 0x05, 0xc5, 0x06, 0x11, 0x06, 0x3c, - 0x01, 0x01, 0xff, 0x45, 0xe8, 0x04, 0x5a, 0x14, 0x01, 0x45, 0x34, 0x94, - 0x4c, 0x14, 0x41, 0x45, 0xc3, 0x0a, 0x58, 0x14, 0x01, 0xa6, 0x2e, 0x44, - 0x46, 0x2a, 0x59, 0x14, 0x01, 0x43, 0xbf, 0x0a, 0x51, 0x14, 0x01, 0xb3, - 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x50, 0x14, 0x41, 0x44, 0x25, 0x01, - 0x53, 0x14, 0x01, 0x42, 0x15, 0x02, 0x52, 0x14, 0x41, 0x44, 0x27, 0x1d, - 0x57, 0x14, 0x01, 0x42, 0x60, 0x25, 0x56, 0x14, 0x41, 0x43, 0xa7, 0x05, - 0x55, 0x14, 0x01, 0x43, 0xcb, 0x06, 0x54, 0x14, 0x41, 0x44, 0xc2, 0x07, - 0x0a, 0x00, 0x00, 0x05, 0x28, 0x1b, 0xfe, 0x03, 0x4b, 0x6f, 0xa0, 0xaa, - 0x20, 0x00, 0x08, 0xaa, 0xc8, 0x01, 0xff, 0x06, 0xc4, 0x06, 0xac, 0x03, - 0x07, 0xc1, 0x05, 0x74, 0x48, 0x42, 0xc8, 0xde, 0x19, 0x80, 0x69, 0xb4, - 0x54, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x3c, 0xe5, 0xb5, 0x19, 0x00, - 0xa9, 0x2e, 0xef, 0xb7, 0x19, 0x80, 0x1c, 0xf5, 0xb3, 0x19, 0x80, 0x06, - 0x4f, 0x15, 0x73, 0xb0, 0x19, 0x40, 0xe5, 0xb9, 0x19, 0x80, 0x08, 0xf5, - 0xb4, 0x19, 0x00, 0xf9, 0xbc, 0x19, 0x40, 0xf9, 0xbf, 0x19, 0x40, 0xe1, - 0xb8, 0x19, 0x80, 0x04, 0xf9, 0xbd, 0x19, 0x40, 0xf9, 0xbe, 0x19, 0x40, - 0xe9, 0xb2, 0x19, 0x00, 0xf9, 0xc0, 0x19, 0x40, 0xe1, 0xb1, 0x19, 0x80, - 0x08, 0xe5, 0xb6, 0x19, 0x00, 0xf9, 0xba, 0x19, 0x40, 0xf9, 0xbb, 0x19, - 0x40, 0x4d, 0xff, 0x81, 0xda, 0x19, 0x00, 0x09, 0xbd, 0xba, 0x01, 0xff, - 0xd1, 0xc8, 0x19, 0x00, 0xd2, 0xc9, 0x19, 0x40, 0xf6, 0xdf, 0x19, 0x40, - 0x06, 0x3d, 0x2c, 0x92, 0x02, 0x05, 0xf9, 0x0a, 0x89, 0x01, 0x04, 0xdd, - 0x04, 0x01, 0xff, 0x42, 0x16, 0x00, 0xa5, 0x19, 0x00, 0x42, 0xa1, 0x10, - 0xa4, 0x19, 0x00, 0x42, 0xe1, 0x07, 0x9d, 0x19, 0x00, 0x42, 0x22, 0x00, - 0xa3, 0x19, 0x00, 0xab, 0x60, 0x42, 0x74, 0x00, 0x9f, 0x19, 0x00, 0x42, - 0x6c, 0x00, 0x99, 0x19, 0x00, 0xae, 0x48, 0xb0, 0x3c, 0x42, 0xf4, 0x13, - 0x81, 0x19, 0x00, 0xb3, 0x2a, 0xb4, 0x18, 0x42, 0xa6, 0x0a, 0x9e, 0x19, - 0x00, 0xb8, 0x06, 0x42, 0x34, 0x22, 0x8d, 0x19, 0x40, 0xe1, 0x86, 0x19, - 0x00, 0x42, 0xa6, 0x0a, 0xa9, 0x19, 0x40, 0xe1, 0x91, 0x19, 0x00, 0x42, - 0x22, 0x00, 0x92, 0x19, 0x00, 0x42, 0x15, 0x06, 0x8b, 0x19, 0x40, 0xe1, - 0x8c, 0x19, 0x00, 0x42, 0x7d, 0x00, 0xab, 0x19, 0x40, 0xe1, 0x97, 0x19, - 0x00, 0x42, 0x22, 0x00, 0x98, 0x19, 0x40, 0xe1, 0x93, 0x19, 0x00, 0x42, - 0x24, 0x02, 0x87, 0x19, 0x40, 0xe1, 0x85, 0x19, 0x00, 0x42, 0xa6, 0x0a, - 0xa8, 0x19, 0x40, 0x42, 0x16, 0x00, 0xa2, 0x19, 0x00, 0x42, 0xa1, 0x10, - 0xa1, 0x19, 0x00, 0x42, 0xe1, 0x07, 0x9a, 0x19, 0x00, 0x42, 0x22, 0x00, - 0xa0, 0x19, 0x00, 0xab, 0x60, 0x42, 0x74, 0x00, 0x9c, 0x19, 0x00, 0x42, - 0x6c, 0x00, 0x96, 0x19, 0x00, 0xae, 0x48, 0xb0, 0x3c, 0x42, 0xf4, 0x13, - 0x80, 0x19, 0x00, 0xb3, 0x2a, 0xb4, 0x18, 0x42, 0xa6, 0x0a, 0x9b, 0x19, - 0x00, 0xb8, 0x06, 0x42, 0x34, 0x22, 0x8a, 0x19, 0x40, 0xe1, 0x83, 0x19, - 0x00, 0x42, 0xa6, 0x0a, 0xa7, 0x19, 0x40, 0xe1, 0x8e, 0x19, 0x00, 0x42, - 0x22, 0x00, 0x8f, 0x19, 0x00, 0x42, 0x15, 0x06, 0x88, 0x19, 0x40, 0xe1, - 0x89, 0x19, 0x00, 0x42, 0x7d, 0x00, 0xaa, 0x19, 0x40, 0xe1, 0x94, 0x19, - 0x00, 0x42, 0x22, 0x00, 0x95, 0x19, 0x40, 0xe1, 0x90, 0x19, 0x00, 0x42, - 0x24, 0x02, 0x84, 0x19, 0x40, 0xe1, 0x82, 0x19, 0x00, 0x42, 0xa6, 0x0a, - 0xa6, 0x19, 0x40, 0xe2, 0xc7, 0x19, 0x00, 0xe4, 0xc6, 0x19, 0x00, 0xeb, - 0xc5, 0x19, 0x00, 0xed, 0xc4, 0x19, 0x00, 0xee, 0xc3, 0x19, 0x80, 0x04, - 0xf6, 0xc1, 0x19, 0x40, 0xe7, 0xc2, 0x19, 0x40, 0x45, 0xc3, 0x0a, 0xd8, - 0x19, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xd9, 0x19, 0x00, 0x43, 0xbf, - 0x0a, 0xd1, 0x19, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xd0, - 0x19, 0x40, 0x44, 0x25, 0x01, 0xd3, 0x19, 0x00, 0x42, 0x15, 0x02, 0xd2, - 0x19, 0x40, 0x44, 0x27, 0x1d, 0xd7, 0x19, 0x00, 0x42, 0x60, 0x25, 0xd6, - 0x19, 0x40, 0x43, 0xa7, 0x05, 0xd5, 0x19, 0x00, 0x43, 0xcb, 0x06, 0xd4, - 0x19, 0x40, 0x46, 0xeb, 0x07, 0x11, 0xf3, 0x01, 0x49, 0xc8, 0xbe, 0x1a, - 0xf3, 0x41, 0x42, 0x33, 0x00, 0xb2, 0x26, 0x00, 0x04, 0xdd, 0x01, 0x01, - 0xff, 0x06, 0xa2, 0xd7, 0x06, 0x44, 0xe1, 0x07, 0x10, 0xf6, 0x41, 0x46, - 0x48, 0xd7, 0x03, 0xfa, 0x81, 0xd3, 0x01, 0x4a, 0xd9, 0xa7, 0x4a, 0xfa, - 0x81, 0xc5, 0x01, 0xab, 0x73, 0x44, 0xb6, 0xee, 0x05, 0xfa, 0x81, 0x5b, - 0x45, 0xe6, 0xbb, 0x01, 0xfa, 0x81, 0x43, 0x44, 0x0a, 0xef, 0x02, 0xfa, - 0x81, 0x2b, 0x07, 0xd8, 0x09, 0x01, 0xff, 0x46, 0x48, 0xd7, 0x2d, 0xfa, - 0x01, 0xab, 0x12, 0x44, 0xb6, 0xee, 0x2f, 0xfa, 0x01, 0x45, 0xe6, 0xbb, - 0x2b, 0xfa, 0x01, 0x44, 0x0a, 0xef, 0x2c, 0xfa, 0x41, 0x43, 0xa1, 0x01, - 0x2a, 0xfa, 0x01, 0x45, 0xd5, 0x71, 0x2e, 0xfa, 0x41, 0x09, 0x02, 0x2c, - 0x01, 0xff, 0x4e, 0x0b, 0x2c, 0x17, 0xfa, 0x01, 0x5b, 0x1a, 0x1d, 0x41, - 0xfa, 0x41, 0x09, 0x02, 0x2c, 0x01, 0xff, 0x4e, 0x0b, 0x2c, 0x16, 0xfa, - 0x01, 0x5b, 0x1a, 0x1d, 0x40, 0xfa, 0x41, 0x09, 0x02, 0x2c, 0x01, 0xff, - 0x4e, 0x0b, 0x2c, 0x1a, 0xfa, 0x01, 0x5b, 0x1a, 0x1d, 0x44, 0xfa, 0x41, - 0x43, 0xa1, 0x01, 0x00, 0xfa, 0x81, 0x38, 0x45, 0xd5, 0x71, 0x04, 0xfa, - 0xc1, 0x00, 0x09, 0x02, 0x2c, 0x01, 0xff, 0x52, 0x84, 0x50, 0x08, 0xfa, - 0x01, 0x4e, 0x0b, 0x2c, 0x19, 0xfa, 0x01, 0x5f, 0x1e, 0x11, 0x1d, 0xfa, - 0x01, 0xb4, 0x01, 0xff, 0x5c, 0x8e, 0x17, 0x47, 0xfa, 0x01, 0x0b, 0x1b, - 0x1d, 0x01, 0xff, 0x4f, 0x26, 0x1d, 0x43, 0xfa, 0x01, 0x53, 0xa9, 0x4c, - 0x32, 0xfa, 0x41, 0x09, 0x02, 0x2c, 0x01, 0xff, 0x4e, 0x0b, 0x2c, 0x15, - 0xfa, 0x01, 0x5b, 0x1a, 0x1d, 0x3f, 0xfa, 0x41, 0x57, 0x02, 0x2c, 0x4d, - 0xfa, 0x41, 0x09, 0x02, 0x2c, 0x01, 0xff, 0x4e, 0x0b, 0x2c, 0x18, 0xfa, - 0x01, 0x5b, 0x1a, 0x1d, 0x42, 0xfa, 0x41, 0x43, 0x31, 0xd4, 0xdc, 0x2b, - 0x00, 0xb4, 0x01, 0xff, 0x4a, 0x23, 0xa4, 0xba, 0xfa, 0x01, 0x49, 0x11, - 0xb8, 0x86, 0xfa, 0x41, 0x49, 0x52, 0x2d, 0xc9, 0x2b, 0x40, 0xa1, 0x35, - 0x11, 0xe6, 0x58, 0x1b, 0x0e, 0xfe, 0x77, 0x01, 0xff, 0x03, 0x7b, 0x00, - 0x06, 0x4c, 0x87, 0x00, 0x78, 0x22, 0x40, 0x45, 0xac, 0x0c, 0x70, 0x22, - 0x00, 0x4a, 0x06, 0x39, 0x74, 0x22, 0x40, 0x03, 0x7b, 0x00, 0x06, 0x49, - 0xec, 0x00, 0x79, 0x22, 0x40, 0x45, 0xac, 0x0c, 0x71, 0x22, 0x00, 0x4a, - 0x06, 0x39, 0x75, 0x22, 0x40, 0x03, 0x43, 0x06, 0x06, 0x62, 0x8f, 0x0c, - 0x47, 0x22, 0x40, 0x54, 0xe3, 0x3f, 0x88, 0x22, 0x00, 0x56, 0x59, 0x35, - 0x89, 0x22, 0x40, 0x6d, 0x38, 0x01, 0xaf, 0x22, 0x00, 0x04, 0xa7, 0x05, - 0x01, 0xff, 0x4b, 0x9d, 0x50, 0x15, 0x00, 0x00, 0x08, 0x6d, 0x22, 0xcc, - 0x01, 0x09, 0x42, 0x25, 0xb5, 0x01, 0x08, 0xab, 0x05, 0x01, 0xff, 0x42, - 0x5c, 0x00, 0x8e, 0xf1, 0x01, 0x4a, 0xad, 0xa6, 0x4e, 0x27, 0x00, 0x4f, - 0xe5, 0x0b, 0xb7, 0xf8, 0x01, 0x42, 0x36, 0x00, 0x8b, 0xf1, 0x01, 0xac, - 0x24, 0x42, 0x6c, 0x09, 0x8c, 0xf1, 0x01, 0x4d, 0xd6, 0x33, 0xc4, 0xfb, - 0x01, 0x50, 0xb3, 0x02, 0xb6, 0xf8, 0x01, 0x42, 0x15, 0x06, 0x8d, 0xf1, - 0x01, 0x4d, 0x1f, 0x20, 0xb5, 0xf8, 0x01, 0x42, 0x40, 0x1a, 0x8f, 0xf1, - 0x41, 0x14, 0xb4, 0x05, 0x06, 0x4e, 0x38, 0x07, 0xb4, 0xf8, 0x41, 0xe1, - 0x70, 0xf1, 0x01, 0xe2, 0x71, 0xf1, 0x01, 0xe3, 0x72, 0xf1, 0x01, 0xe4, - 0x73, 0xf1, 0x01, 0xe5, 0x74, 0xf1, 0x01, 0xe6, 0x75, 0xf1, 0x01, 0xe7, - 0x76, 0xf1, 0x01, 0xe8, 0x77, 0xf1, 0x01, 0xe9, 0x78, 0xf1, 0x01, 0xea, - 0x79, 0xf1, 0x01, 0xeb, 0x7a, 0xf1, 0x01, 0xec, 0x7b, 0xf1, 0x01, 0xed, - 0x7c, 0xf1, 0x01, 0xee, 0x7d, 0xf1, 0x01, 0xef, 0x7e, 0xf1, 0x01, 0xf0, - 0x7f, 0xf1, 0x01, 0xf1, 0x80, 0xf1, 0x01, 0xf2, 0x81, 0xf1, 0x01, 0xf3, - 0x82, 0xf1, 0x01, 0xf4, 0x83, 0xf1, 0x01, 0xf5, 0x84, 0xf1, 0x01, 0xf6, - 0x85, 0xf1, 0x01, 0xf7, 0x86, 0xf1, 0x01, 0xf8, 0x87, 0xf1, 0x01, 0xf9, - 0x88, 0xf1, 0x01, 0xfa, 0x89, 0xf1, 0x41, 0x45, 0x46, 0x10, 0xbd, 0xfb, - 0x01, 0x47, 0x88, 0x43, 0xbf, 0xfb, 0x01, 0x5c, 0x09, 0x0f, 0xbe, 0xfb, - 0x41, 0x4a, 0x11, 0xa7, 0xff, 0x24, 0x00, 0x15, 0xb3, 0x05, 0x5a, 0x07, - 0x2f, 0x39, 0x0c, 0x46, 0xab, 0x05, 0xd8, 0xf7, 0x01, 0x48, 0x01, 0x02, - 0xd6, 0xf7, 0x41, 0xa5, 0x3c, 0xa6, 0x2e, 0x48, 0x7c, 0x52, 0xf3, 0x24, - 0x00, 0xb3, 0x1a, 0xb4, 0x01, 0xff, 0x47, 0x2a, 0x59, 0xed, 0x24, 0x00, - 0x02, 0x15, 0x01, 0x01, 0xff, 0x43, 0x47, 0x2b, 0xec, 0x24, 0x00, 0x43, - 0x2a, 0x1d, 0xf4, 0x24, 0x40, 0x48, 0x3c, 0x50, 0xf1, 0x24, 0x00, 0x46, - 0x60, 0x25, 0xf0, 0x24, 0x40, 0x46, 0x9c, 0x17, 0xef, 0x24, 0x00, 0x47, - 0x9f, 0x5b, 0xee, 0x24, 0x40, 0x47, 0xca, 0x24, 0xf2, 0x24, 0x00, 0x45, - 0x0b, 0x6e, 0xeb, 0x24, 0x40, 0xe1, 0x50, 0xf1, 0x01, 0xe2, 0x51, 0xf1, - 0x01, 0xe3, 0x52, 0xf1, 0x01, 0xe4, 0x53, 0xf1, 0x01, 0xe5, 0x54, 0xf1, - 0x01, 0xe6, 0x55, 0xf1, 0x01, 0xe7, 0x56, 0xf1, 0x01, 0xe8, 0x57, 0xf1, - 0x01, 0xe9, 0x58, 0xf1, 0x01, 0xea, 0x59, 0xf1, 0x01, 0xeb, 0x5a, 0xf1, - 0x01, 0xec, 0x5b, 0xf1, 0x01, 0xed, 0x5c, 0xf1, 0x01, 0xee, 0x5d, 0xf1, - 0x01, 0xef, 0x5e, 0xf1, 0x01, 0xf0, 0x5f, 0xf1, 0x01, 0xf1, 0x60, 0xf1, - 0x01, 0xf2, 0x61, 0xf1, 0x01, 0xf3, 0x62, 0xf1, 0x01, 0xf4, 0x63, 0xf1, - 0x01, 0xf5, 0x64, 0xf1, 0x01, 0xf6, 0x65, 0xf1, 0x01, 0xf7, 0x66, 0xf1, - 0x01, 0xf8, 0x67, 0xf1, 0x01, 0xf9, 0x68, 0xf1, 0x01, 0xfa, 0x69, 0xf1, - 0x41, 0xa2, 0xb5, 0x05, 0x0a, 0x51, 0xa8, 0xc6, 0x03, 0xa9, 0xb7, 0x03, - 0x48, 0x9a, 0xc5, 0xdb, 0xf4, 0x01, 0x42, 0x1b, 0x00, 0xbc, 0x22, 0x80, - 0x22, 0x53, 0x79, 0x4b, 0x2f, 0x20, 0x00, 0x07, 0x0f, 0x3a, 0x0c, 0x4c, - 0xa5, 0x94, 0x22, 0xf9, 0x01, 0x4a, 0xa7, 0xb1, 0xff, 0xf9, 0x41, 0x4c, - 0xbe, 0x63, 0x6e, 0x20, 0x00, 0x44, 0x85, 0xb2, 0xde, 0xf3, 0x41, 0x08, - 0x62, 0xc4, 0x01, 0xff, 0x4a, 0x40, 0x5f, 0xe3, 0x19, 0x01, 0x07, 0xc1, - 0x05, 0x67, 0x05, 0x2f, 0x03, 0x3e, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, - 0x2b, 0xe5, 0xda, 0x19, 0x01, 0xe9, 0xd2, 0x19, 0x81, 0x1e, 0xef, 0xdc, - 0x19, 0x01, 0x4f, 0x54, 0x70, 0xe4, 0x19, 0x01, 0xf5, 0xd4, 0x19, 0x81, - 0x0b, 0x49, 0x9b, 0xbe, 0xd6, 0x19, 0xc1, 0x00, 0xf2, 0xd7, 0x19, 0x41, - 0xf5, 0xd5, 0x19, 0x41, 0xe9, 0xd3, 0x19, 0x41, 0xe1, 0xd1, 0x19, 0x01, - 0xe9, 0xdb, 0x19, 0x01, 0xf5, 0xdd, 0x19, 0x41, 0xa1, 0x17, 0x47, 0x0c, - 0xd3, 0xe2, 0x19, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, - 0xe0, 0x19, 0x01, 0x45, 0xa3, 0x4a, 0xdf, 0x19, 0x41, 0x47, 0xd1, 0x15, - 0xde, 0x19, 0x01, 0x47, 0xf2, 0x86, 0xe1, 0x19, 0x41, 0xe1, 0xa0, 0x19, - 0x81, 0x80, 0x02, 0xa2, 0xf3, 0x01, 0xa3, 0xe6, 0x01, 0xa4, 0xcd, 0x01, - 0xe5, 0xaa, 0x19, 0x01, 0xa7, 0xbc, 0x01, 0x42, 0x22, 0x00, 0xce, 0x19, - 0x01, 0xe9, 0xa2, 0x19, 0x81, 0xac, 0x01, 0xaa, 0x9f, 0x01, 0xab, 0x92, - 0x01, 0xac, 0x85, 0x01, 0x42, 0x6c, 0x00, 0xc6, 0x19, 0x01, 0xae, 0x67, - 0xef, 0xac, 0x19, 0x01, 0xb0, 0x57, 0xb2, 0x4b, 0xb3, 0x39, 0xb4, 0x20, - 0xf5, 0xa4, 0x19, 0x81, 0x17, 0xb6, 0x06, 0x42, 0x34, 0x22, 0xc7, 0x19, - 0x41, 0xe1, 0xca, 0x19, 0x01, 0x48, 0x9c, 0xbe, 0xa6, 0x19, 0xc1, 0x00, - 0xf2, 0xa7, 0x19, 0x41, 0xf5, 0xa5, 0x19, 0x41, 0xe1, 0xbd, 0x19, 0x01, - 0x42, 0x22, 0x00, 0xbe, 0x19, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0xb8, 0x19, - 0x01, 0x42, 0x22, 0x00, 0xb9, 0x19, 0x41, 0xe1, 0xcd, 0x19, 0x01, 0x42, - 0x22, 0x00, 0xcb, 0x19, 0x01, 0x42, 0x15, 0x06, 0xcc, 0x19, 0x41, 0xe1, - 0xc8, 0x19, 0x01, 0x42, 0x71, 0x00, 0xd0, 0x19, 0x41, 0xe1, 0xc2, 0x19, - 0x01, 0x42, 0x22, 0x00, 0xc3, 0x19, 0x41, 0xe1, 0xc1, 0x19, 0x01, 0x42, - 0x24, 0x02, 0xb2, 0x19, 0x01, 0x42, 0xff, 0x04, 0xbc, 0x19, 0x01, 0x42, - 0x34, 0x22, 0xb7, 0x19, 0x41, 0xe1, 0xc9, 0x19, 0x01, 0x42, 0x74, 0x00, - 0xcf, 0x19, 0x41, 0xe1, 0xae, 0x19, 0x01, 0x42, 0x22, 0x00, 0xaf, 0x19, - 0x41, 0xe1, 0xb5, 0x19, 0x01, 0x42, 0x22, 0x00, 0xb6, 0x19, 0x41, 0xe9, - 0xa3, 0x19, 0x41, 0xe1, 0xb0, 0x19, 0x01, 0x42, 0x22, 0x00, 0xb1, 0x19, - 0x41, 0xe1, 0xbf, 0x19, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xc0, 0x19, - 0x41, 0xe1, 0xba, 0x19, 0x01, 0x42, 0x22, 0x00, 0xbb, 0x19, 0x41, 0xe1, - 0xb3, 0x19, 0x01, 0x42, 0x22, 0x00, 0xb4, 0x19, 0x41, 0xe1, 0xc4, 0x19, - 0x01, 0x42, 0x22, 0x00, 0xc5, 0x19, 0x41, 0xe1, 0xa1, 0x19, 0x01, 0xe9, - 0xab, 0x19, 0x01, 0xf5, 0xad, 0x19, 0x41, 0x48, 0xe2, 0xc4, 0x85, 0xf4, - 0x01, 0x47, 0xe2, 0x82, 0xa6, 0x20, 0x40, 0x06, 0xc4, 0x06, 0xa3, 0x01, - 0x07, 0xc1, 0x05, 0x23, 0x05, 0x2f, 0x03, 0x01, 0xff, 0x44, 0x4a, 0xed, - 0xee, 0xe4, 0x01, 0x45, 0xbb, 0xe5, 0xec, 0xe4, 0x01, 0x44, 0x86, 0xee, - 0xeb, 0xe4, 0x01, 0x45, 0x09, 0xe8, 0xef, 0xe4, 0x01, 0x45, 0x4a, 0xe8, - 0xed, 0xe4, 0x41, 0xe1, 0xd5, 0xe4, 0x81, 0x65, 0xe5, 0xe4, 0xe4, 0x81, - 0x43, 0xe9, 0xda, 0xe4, 0x81, 0x2c, 0xef, 0xd0, 0xe4, 0x81, 0x15, 0xf5, - 0xdf, 0xe4, 0xc1, 0x00, 0xe3, 0xe0, 0xe4, 0x01, 0xe4, 0xe1, 0xe4, 0x01, - 0xeb, 0xe2, 0xe4, 0x01, 0xf2, 0xe3, 0xe4, 0x41, 0xec, 0xd2, 0xe4, 0x01, - 0x42, 0x1d, 0x01, 0xd4, 0xe4, 0x01, 0xf0, 0xd1, 0xe4, 0x01, 0xf9, 0xd3, - 0xe4, 0x41, 0x42, 0x7f, 0x02, 0xdc, 0xe4, 0x01, 0xe8, 0xde, 0xe4, 0x01, - 0xf3, 0xdb, 0xe4, 0x01, 0xf4, 0xdd, 0xe4, 0x41, 0xe7, 0xe6, 0xe4, 0x01, - 0x42, 0x0f, 0x07, 0xea, 0xe4, 0x01, 0xed, 0xe7, 0xe4, 0x01, 0xee, 0xe8, - 0xe4, 0x81, 0x06, 0x42, 0xc3, 0x05, 0xe9, 0xe4, 0x41, 0xee, 0xe5, 0xe4, - 0x41, 0xe2, 0xd7, 0xe4, 0x01, 0xe8, 0xd9, 0xe4, 0x01, 0xea, 0xd6, 0xe4, - 0x01, 0x42, 0xf6, 0x19, 0xd8, 0xe4, 0x41, 0x45, 0xc3, 0x0a, 0xf8, 0xe4, - 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xf9, 0xe4, 0x01, 0x43, 0xbf, 0x0a, - 0xf1, 0xe4, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xf0, 0xe4, - 0x41, 0x44, 0x25, 0x01, 0xf3, 0xe4, 0x01, 0x42, 0x15, 0x02, 0xf2, 0xe4, - 0x41, 0x44, 0x27, 0x1d, 0xf7, 0xe4, 0x01, 0x42, 0x60, 0x25, 0xf6, 0xe4, - 0x41, 0x43, 0xa7, 0x05, 0xf5, 0xe4, 0x01, 0x43, 0xcb, 0x06, 0xf4, 0xe4, - 0x41, 0x07, 0x60, 0xcc, 0x06, 0x42, 0x74, 0x00, 0x07, 0x22, 0x40, 0x55, - 0x25, 0x39, 0xab, 0x08, 0x01, 0x07, 0xc1, 0x05, 0x3c, 0x07, 0x2f, 0x39, - 0x01, 0xff, 0xa6, 0x29, 0x43, 0xbf, 0x0a, 0xa7, 0x08, 0x81, 0x1c, 0xb4, - 0x01, 0xff, 0x42, 0x92, 0x01, 0xad, 0x08, 0x01, 0x44, 0x25, 0x01, 0xa9, - 0x08, 0x01, 0xb7, 0x01, 0xff, 0x44, 0x29, 0x1d, 0xae, 0x08, 0x01, 0xef, - 0xa8, 0x08, 0x41, 0x48, 0x21, 0x11, 0xaf, 0x08, 0x41, 0x43, 0xa7, 0x05, - 0xac, 0x08, 0x01, 0x43, 0xcb, 0x06, 0xaa, 0x08, 0x41, 0xa1, 0xb9, 0x01, - 0x44, 0x0a, 0xec, 0x83, 0x08, 0x01, 0x46, 0xda, 0x48, 0x85, 0x08, 0x01, - 0x06, 0x3d, 0x2c, 0x73, 0x45, 0xa1, 0xa8, 0x84, 0x08, 0x01, 0x42, 0xb0, - 0x01, 0x87, 0x08, 0x81, 0x60, 0x44, 0x8e, 0xed, 0x8f, 0x08, 0x01, 0x46, - 0x9c, 0xda, 0x91, 0x08, 0x01, 0x43, 0x89, 0x05, 0x93, 0x08, 0x01, 0x43, - 0x54, 0x22, 0x95, 0x08, 0x01, 0x42, 0x6f, 0x02, 0x98, 0x08, 0x01, 0x44, - 0xae, 0xc5, 0x9a, 0x08, 0x01, 0x44, 0xfa, 0x64, 0x9b, 0x08, 0x01, 0xb3, - 0x20, 0xb4, 0x12, 0x43, 0xc0, 0x88, 0x88, 0x08, 0x01, 0x44, 0x58, 0x51, - 0x8d, 0x08, 0x01, 0x45, 0x52, 0x51, 0x89, 0x08, 0x41, 0x42, 0x9a, 0x43, - 0x9e, 0x08, 0x01, 0x43, 0x39, 0x25, 0x8b, 0x08, 0x41, 0xa1, 0x06, 0x43, - 0x0e, 0x16, 0x9d, 0x08, 0x41, 0x43, 0x89, 0xe7, 0x99, 0x08, 0x01, 0x44, - 0x39, 0xe1, 0x96, 0x08, 0x41, 0x42, 0x53, 0x00, 0x8a, 0x08, 0x41, 0x45, - 0x58, 0xab, 0x80, 0x08, 0x01, 0x44, 0x0a, 0xec, 0x82, 0x08, 0x01, 0x42, - 0xb0, 0x01, 0x86, 0x08, 0x01, 0x44, 0x8e, 0xed, 0x8e, 0x08, 0x01, 0x46, - 0x9c, 0xda, 0x90, 0x08, 0x01, 0x43, 0x89, 0x05, 0x92, 0x08, 0x01, 0x43, - 0x54, 0x22, 0x94, 0x08, 0x01, 0x44, 0x2a, 0x49, 0x9c, 0x08, 0x01, 0x44, - 0x58, 0x51, 0x8c, 0x08, 0x41, 0x44, 0x48, 0x3c, 0x81, 0x08, 0x01, 0x43, - 0xf7, 0x19, 0x97, 0x08, 0x41, 0xa3, 0x58, 0x4c, 0x5a, 0x0a, 0xc2, 0x22, - 0x00, 0x08, 0xa3, 0x21, 0x42, 0x47, 0x3f, 0x0d, 0x0f, 0x22, 0x00, 0xb3, - 0x24, 0x4e, 0xb6, 0x7b, 0x09, 0x2a, 0x00, 0x45, 0xe1, 0x16, 0xc3, 0x22, - 0x80, 0x06, 0x52, 0x4c, 0x55, 0xff, 0x2a, 0x40, 0x0f, 0xe4, 0x67, 0x01, - 0xff, 0x43, 0xd4, 0x09, 0x03, 0x2a, 0x00, 0x44, 0xb7, 0x27, 0x04, 0x2a, - 0x40, 0x06, 0x34, 0x24, 0x06, 0x48, 0xc6, 0x6e, 0x11, 0x22, 0x40, 0x55, - 0x47, 0x3b, 0x05, 0x2a, 0x00, 0x4e, 0x88, 0x7c, 0x06, 0x2a, 0x40, 0x43, - 0x1a, 0x00, 0xc0, 0x22, 0x00, 0x42, 0x0c, 0x00, 0xc1, 0x22, 0x40, 0x07, - 0x6e, 0x22, 0x06, 0x48, 0x56, 0x2c, 0x10, 0x22, 0x40, 0x4c, 0x59, 0x8c, - 0x00, 0x2a, 0x00, 0x4d, 0xb4, 0x85, 0x01, 0x2a, 0x00, 0x4e, 0xb6, 0x7b, - 0x02, 0x2a, 0x40, 0xa1, 0xc3, 0x65, 0xa5, 0x96, 0x48, 0xa9, 0xc5, 0x3f, - 0xaf, 0xa9, 0x20, 0x03, 0xa3, 0x1d, 0x97, 0x1e, 0xb5, 0xf6, 0x0c, 0x07, - 0xf6, 0xd4, 0x01, 0xff, 0x0f, 0x6d, 0x32, 0xb1, 0x0c, 0x06, 0xc4, 0x06, - 0xea, 0x0b, 0x18, 0xcd, 0x27, 0xa3, 0x0b, 0xac, 0xa2, 0x05, 0x10, 0x29, - 0x0c, 0x91, 0x05, 0x0a, 0x15, 0xad, 0xca, 0x04, 0xb3, 0x8d, 0x02, 0xb4, - 0xb3, 0x01, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x97, 0x01, 0xe5, 0x31, - 0x10, 0x80, 0x8b, 0x01, 0x4c, 0x91, 0x8d, 0x71, 0x10, 0x00, 0xe9, 0x2d, - 0x10, 0x80, 0x7c, 0x06, 0x5a, 0xda, 0x68, 0x04, 0xc2, 0xc5, 0x5a, 0xb3, - 0x36, 0x47, 0x60, 0xd3, 0x2b, 0x10, 0x00, 0xf5, 0x2f, 0x10, 0x80, 0x27, - 0x08, 0x9b, 0xbe, 0x11, 0x12, 0xf3, 0x30, 0x01, 0xff, 0x42, 0x97, 0x02, - 0x67, 0x10, 0x00, 0x42, 0x87, 0x13, 0x68, 0x10, 0x40, 0xec, 0x58, 0x10, - 0x80, 0x09, 0xf2, 0x56, 0x10, 0xc0, 0x00, 0xf2, 0x57, 0x10, 0x40, 0xec, - 0x59, 0x10, 0x40, 0xf5, 0x30, 0x10, 0x40, 0x4c, 0x79, 0x8d, 0x62, 0x10, - 0x00, 0x04, 0x90, 0x00, 0x01, 0xff, 0x42, 0x31, 0x12, 0x83, 0x10, 0x00, - 0xe5, 0x84, 0x10, 0x80, 0x06, 0x47, 0x4a, 0xce, 0x86, 0x10, 0x40, 0x46, - 0x5b, 0x00, 0x85, 0x10, 0x40, 0x42, 0xb1, 0x27, 0x33, 0x10, 0x00, 0xef, - 0x34, 0x10, 0x40, 0x42, 0x27, 0x01, 0x74, 0x10, 0x00, 0x42, 0x17, 0x50, - 0x72, 0x10, 0x00, 0xf5, 0x73, 0x10, 0x40, 0xe9, 0x2e, 0x10, 0x40, 0x46, - 0x5b, 0x00, 0x35, 0x10, 0x40, 0xe1, 0x2c, 0x10, 0x00, 0xe9, 0x32, 0x10, - 0xc0, 0x00, 0x45, 0x36, 0xe8, 0x9c, 0x10, 0xc0, 0x00, 0xe9, 0x9d, 0x10, - 0x40, 0x0f, 0xe3, 0x68, 0x11, 0x14, 0x8f, 0x43, 0x01, 0xff, 0x45, 0xdb, - 0xe3, 0x63, 0x10, 0x00, 0x46, 0x60, 0xda, 0x64, 0x10, 0x40, 0x45, 0xc3, - 0x0a, 0xf8, 0xa9, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xf9, 0xa9, 0x00, - 0x43, 0xbf, 0x0a, 0xf1, 0xa9, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, - 0x1d, 0xf0, 0xa9, 0x40, 0x44, 0x25, 0x01, 0xf3, 0xa9, 0x00, 0x42, 0x15, - 0x02, 0xf2, 0xa9, 0x40, 0x44, 0x27, 0x1d, 0xf7, 0xa9, 0x00, 0x42, 0x60, - 0x25, 0xf6, 0xa9, 0x40, 0x43, 0xa7, 0x05, 0xf5, 0xa9, 0x00, 0x43, 0xcb, - 0x06, 0xf4, 0xa9, 0x40, 0x0a, 0xdd, 0xa8, 0xf3, 0x01, 0x04, 0x30, 0x03, - 0x47, 0x06, 0xf4, 0x15, 0x01, 0xff, 0xa1, 0x23, 0x49, 0x02, 0xb5, 0x4d, - 0x10, 0x00, 0x48, 0xd2, 0xc3, 0x4f, 0x10, 0x00, 0x48, 0x32, 0xc5, 0x4c, - 0x10, 0x00, 0x05, 0xf6, 0x53, 0x01, 0xff, 0x4b, 0xad, 0x00, 0x9f, 0x10, - 0x00, 0x43, 0xbf, 0x0a, 0x9e, 0x10, 0x40, 0x4d, 0x70, 0x81, 0x4e, 0x10, - 0x00, 0x05, 0x3f, 0xcf, 0x01, 0xff, 0x4b, 0xad, 0x00, 0x77, 0xaa, 0x00, - 0x43, 0xbf, 0x0a, 0x78, 0xaa, 0x00, 0x43, 0xd0, 0x09, 0x79, 0xaa, 0x40, - 0xa1, 0x99, 0x01, 0x49, 0x50, 0x12, 0x37, 0x10, 0x00, 0x0c, 0xed, 0x8e, - 0x86, 0x01, 0x4e, 0x36, 0x78, 0x4a, 0x10, 0x00, 0x4e, 0x94, 0x79, 0x7b, - 0xaa, 0x00, 0x54, 0x6b, 0x44, 0x8f, 0x10, 0x00, 0xb3, 0x35, 0x0f, 0x07, - 0x72, 0x29, 0x02, 0x02, 0x00, 0x19, 0x17, 0xf3, 0x30, 0x01, 0xff, 0xd1, - 0x69, 0x10, 0x00, 0xd2, 0x6a, 0x10, 0x00, 0xd3, 0x6b, 0x10, 0x00, 0xd4, - 0x6c, 0x10, 0x00, 0xd5, 0x6d, 0x10, 0x40, 0x44, 0x5d, 0x23, 0x39, 0x10, - 0x00, 0x45, 0xa3, 0x4a, 0x38, 0x10, 0x40, 0xd2, 0x7c, 0xaa, 0x00, 0xd5, - 0x7d, 0xaa, 0x40, 0x46, 0x60, 0x0a, 0x4b, 0x10, 0x00, 0x04, 0x90, 0x00, - 0x01, 0xff, 0x08, 0x42, 0xc2, 0x1b, 0x43, 0x5e, 0x51, 0xe5, 0xa9, 0x00, - 0x05, 0x05, 0x31, 0x01, 0xff, 0xd2, 0x87, 0x10, 0x00, 0xd3, 0x88, 0x10, - 0x00, 0xd5, 0x89, 0x10, 0x00, 0xd6, 0x8a, 0x10, 0x40, 0x4d, 0xfb, 0x80, - 0x8d, 0x10, 0x00, 0x05, 0x05, 0x31, 0x01, 0xff, 0xd2, 0x8b, 0x10, 0x00, - 0xd3, 0x8c, 0x10, 0x40, 0xd1, 0x9a, 0x10, 0x00, 0xd3, 0x9b, 0x10, 0x40, - 0x47, 0xd1, 0x15, 0x36, 0x10, 0x00, 0x43, 0xd0, 0x2c, 0x3a, 0x10, 0x40, - 0x45, 0xc3, 0x0a, 0x98, 0x10, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x99, - 0x10, 0x00, 0x43, 0xbf, 0x0a, 0x91, 0x10, 0x00, 0xb3, 0x14, 0xb4, 0x06, - 0x44, 0xa1, 0x1d, 0x90, 0x10, 0x40, 0x44, 0x25, 0x01, 0x93, 0x10, 0x00, - 0x42, 0x15, 0x02, 0x92, 0x10, 0x40, 0x44, 0x27, 0x1d, 0x97, 0x10, 0x00, - 0x42, 0x60, 0x25, 0x96, 0x10, 0x40, 0x43, 0xa7, 0x05, 0x95, 0x10, 0x00, - 0x43, 0xcb, 0x06, 0x94, 0x10, 0x40, 0x45, 0xc3, 0x0a, 0xd8, 0x16, 0x01, - 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xd9, 0x16, 0x01, 0x43, 0xbf, 0x0a, 0xd1, - 0x16, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xd0, 0x16, 0x41, - 0x44, 0x25, 0x01, 0xd3, 0x16, 0x01, 0x42, 0x15, 0x02, 0xd2, 0x16, 0x41, - 0x44, 0x27, 0x1d, 0xd7, 0x16, 0x01, 0x42, 0x60, 0x25, 0xd6, 0x16, 0x41, - 0x43, 0xa7, 0x05, 0xd5, 0x16, 0x01, 0x43, 0xcb, 0x06, 0xd4, 0x16, 0x41, - 0x54, 0xc7, 0x42, 0x70, 0xaa, 0x00, 0x52, 0xf6, 0x53, 0xe6, 0xa9, 0x40, - 0x06, 0xc2, 0x05, 0x17, 0x0f, 0x73, 0x6f, 0x01, 0xff, 0x42, 0x93, 0x0a, - 0x76, 0xaa, 0x00, 0x43, 0x2c, 0xf1, 0x74, 0xaa, 0x00, 0x42, 0xa3, 0xcf, - 0x75, 0xaa, 0x40, 0xe1, 0x21, 0x10, 0x80, 0xd3, 0x05, 0xa2, 0xc6, 0x05, - 0xa3, 0xb9, 0x05, 0xa4, 0xa0, 0x05, 0xe5, 0x27, 0x10, 0x80, 0x83, 0x05, - 0xa7, 0xf0, 0x04, 0x42, 0x22, 0x00, 0x1f, 0x10, 0x00, 0xe9, 0x23, 0x10, - 0x80, 0xe0, 0x04, 0xaa, 0xd3, 0x04, 0xab, 0xc4, 0x03, 0xac, 0xb7, 0x03, - 0xad, 0x8f, 0x03, 0xae, 0xf0, 0x02, 0xef, 0x29, 0x10, 0x00, 0xb0, 0xdf, - 0x02, 0xb2, 0xd2, 0x02, 0xb3, 0xb2, 0x01, 0xb4, 0x3c, 0xf5, 0x25, 0x10, - 0x80, 0x33, 0x08, 0x9b, 0xbe, 0x1d, 0xb7, 0x06, 0x42, 0x34, 0x22, 0x1a, - 0x10, 0x40, 0xe1, 0x1d, 0x10, 0x00, 0x11, 0xf4, 0x30, 0x01, 0xff, 0x43, - 0x51, 0x02, 0x66, 0x10, 0x00, 0x43, 0x8f, 0x00, 0x65, 0x10, 0x40, 0xec, - 0x54, 0x10, 0x80, 0x09, 0xf2, 0x52, 0x10, 0xc0, 0x00, 0xf2, 0x53, 0x10, - 0x40, 0xec, 0x55, 0x10, 0x40, 0xf5, 0x26, 0x10, 0x40, 0xe1, 0x10, 0x10, - 0x80, 0x13, 0x42, 0x22, 0x00, 0x11, 0x10, 0x00, 0xb4, 0x01, 0xff, 0xe1, - 0x0b, 0x10, 0x00, 0x42, 0x22, 0x00, 0x0c, 0x10, 0x40, 0x08, 0xe4, 0x68, - 0x01, 0xff, 0xa2, 0x4b, 0xa4, 0x33, 0x42, 0xe1, 0x07, 0xe8, 0xa9, 0x00, - 0xa7, 0x21, 0xaa, 0x15, 0x43, 0xdd, 0x0d, 0xfa, 0xa9, 0x00, 0xae, 0x01, - 0xff, 0x42, 0xff, 0x04, 0xef, 0xa9, 0x00, 0x42, 0x34, 0x22, 0xe7, 0xa9, - 0x40, 0xe1, 0xeb, 0xa9, 0x00, 0x42, 0x22, 0x00, 0xec, 0xa9, 0x40, 0xe1, - 0xe9, 0xa9, 0x00, 0x42, 0x22, 0x00, 0xea, 0xa9, 0x40, 0xe1, 0xfb, 0xa9, - 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xfc, 0xa9, 0x40, 0xe1, 0xed, 0xa9, - 0x00, 0x42, 0x22, 0x00, 0xee, 0xa9, 0x40, 0xe1, 0xfd, 0xa9, 0x00, 0x42, - 0x22, 0x00, 0xfe, 0xa9, 0x40, 0xe1, 0x1e, 0x10, 0x00, 0x4d, 0xb1, 0x81, - 0x61, 0x10, 0x00, 0xa8, 0x06, 0x42, 0x15, 0x06, 0x51, 0x10, 0x40, 0xe1, - 0x50, 0x10, 0x80, 0x11, 0x0b, 0xc1, 0xa2, 0x01, 0xff, 0x43, 0xef, 0x1f, - 0x7e, 0xaa, 0x00, 0x43, 0xa4, 0x02, 0x7f, 0xaa, 0x40, 0x02, 0x92, 0x00, - 0x01, 0xff, 0xe1, 0x22, 0x10, 0x00, 0xa2, 0x60, 0xa3, 0x54, 0x42, 0xa1, - 0x10, 0x7b, 0x10, 0x00, 0x42, 0xe1, 0x07, 0x7e, 0x10, 0x00, 0xa7, 0x3c, - 0x42, 0x22, 0x00, 0x81, 0x10, 0x00, 0x43, 0x11, 0xf1, 0xe2, 0xa9, 0x00, - 0xab, 0x24, 0xae, 0x12, 0x43, 0x5d, 0x1c, 0x7d, 0x10, 0x00, 0x43, 0x8f, - 0x00, 0x80, 0x10, 0x00, 0x42, 0x59, 0x00, 0x79, 0x10, 0x40, 0xe1, 0x7c, - 0x10, 0x00, 0x42, 0xff, 0x04, 0xe3, 0xa9, 0x00, 0x42, 0x34, 0x22, 0x7a, - 0x10, 0x40, 0xe1, 0x75, 0x10, 0x00, 0x42, 0x22, 0x00, 0x76, 0x10, 0x40, - 0xe1, 0x77, 0x10, 0x00, 0x42, 0x22, 0x00, 0xe0, 0xa9, 0x40, 0xe1, 0x78, - 0x10, 0x00, 0x42, 0x22, 0x00, 0xe1, 0xa9, 0x40, 0xe1, 0x7f, 0x10, 0x00, - 0x42, 0x22, 0x00, 0xe4, 0xa9, 0x40, 0xe1, 0x1b, 0x10, 0x00, 0x4f, 0xca, - 0x72, 0x8e, 0x10, 0x40, 0xe1, 0x15, 0x10, 0x00, 0x42, 0x22, 0x00, 0x16, - 0x10, 0x40, 0xe1, 0x14, 0x10, 0x00, 0x42, 0x24, 0x02, 0x04, 0x10, 0x00, - 0xae, 0x06, 0x42, 0x34, 0x22, 0x09, 0x10, 0x40, 0xe1, 0x0f, 0x10, 0x00, - 0x42, 0x34, 0x22, 0x0a, 0x10, 0x40, 0xe1, 0x19, 0x10, 0x00, 0x03, 0xb6, - 0x00, 0x01, 0xff, 0x02, 0xc4, 0x26, 0x10, 0xe5, 0x28, 0x10, 0x00, 0x43, - 0x11, 0xf1, 0x5b, 0x10, 0x00, 0x43, 0x03, 0x47, 0x5a, 0x10, 0x40, 0xe1, - 0x5c, 0x10, 0x00, 0xe5, 0x5d, 0x10, 0x40, 0xe1, 0x1c, 0x10, 0x00, 0x42, - 0x74, 0x00, 0x20, 0x10, 0x40, 0xe1, 0x00, 0x10, 0x00, 0x42, 0x22, 0x00, - 0x01, 0x10, 0xc0, 0x00, 0x04, 0xca, 0x42, 0x01, 0xff, 0xa3, 0x70, 0xa4, - 0x5c, 0x42, 0xe1, 0x07, 0x6f, 0xaa, 0x00, 0x42, 0x24, 0x02, 0x60, 0xaa, - 0x00, 0xa8, 0x44, 0xaa, 0x38, 0x43, 0xdd, 0x0d, 0x6e, 0xaa, 0x00, 0xae, - 0x26, 0x42, 0x71, 0x00, 0x73, 0xaa, 0x00, 0x42, 0x15, 0x06, 0x6c, 0xaa, - 0x00, 0x02, 0xc3, 0x05, 0x0c, 0x42, 0x4c, 0x26, 0x71, 0xaa, 0x00, 0x42, - 0x59, 0x00, 0x72, 0xaa, 0x40, 0xe1, 0x66, 0xaa, 0x00, 0x42, 0x22, 0x00, - 0x67, 0xaa, 0x40, 0xe1, 0x6b, 0xaa, 0x00, 0x42, 0x34, 0x22, 0x65, 0xaa, - 0x40, 0xe1, 0x63, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x64, 0xaa, 0x40, 0xe1, - 0x6d, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x6e, 0xaa, 0x40, 0xa4, 0x06, 0x42, - 0x22, 0x00, 0x6a, 0xaa, 0x40, 0xe1, 0x68, 0xaa, 0x00, 0x42, 0x22, 0x00, - 0x69, 0xaa, 0x40, 0xe1, 0x61, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x62, 0xaa, - 0x40, 0xe1, 0x07, 0x10, 0x00, 0x42, 0x22, 0x00, 0x08, 0x10, 0x40, 0xe9, - 0x24, 0x10, 0x40, 0xe1, 0x02, 0x10, 0x00, 0x42, 0x22, 0x00, 0x03, 0x10, - 0x00, 0x47, 0xf3, 0xc3, 0x3f, 0x10, 0x40, 0x11, 0xce, 0x27, 0x01, 0xff, - 0x44, 0xb6, 0xec, 0x70, 0x10, 0x00, 0x43, 0xcc, 0x44, 0x6e, 0x10, 0x00, - 0x43, 0xfe, 0xef, 0x6f, 0x10, 0x40, 0xe1, 0x12, 0x10, 0x00, 0xa4, 0x06, - 0x42, 0x22, 0x00, 0x13, 0x10, 0x40, 0xe1, 0x0d, 0x10, 0x00, 0x42, 0x22, - 0x00, 0x0e, 0x10, 0x40, 0xe1, 0x05, 0x10, 0x00, 0x42, 0x22, 0x00, 0x06, - 0x10, 0x40, 0xe1, 0x17, 0x10, 0x00, 0x42, 0x22, 0x00, 0x18, 0x10, 0x40, - 0x47, 0x3f, 0xcf, 0x7a, 0xaa, 0x00, 0xf5, 0x2a, 0x10, 0x40, 0x45, 0xc3, - 0x0a, 0xe2, 0x16, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xe3, 0x16, 0x01, - 0x43, 0xbf, 0x0a, 0xdb, 0x16, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, - 0x1d, 0xda, 0x16, 0x41, 0x44, 0x25, 0x01, 0xdd, 0x16, 0x01, 0x42, 0x15, - 0x02, 0xdc, 0x16, 0x41, 0x44, 0x27, 0x1d, 0xe1, 0x16, 0x01, 0x42, 0x60, - 0x25, 0xe0, 0x16, 0x41, 0x43, 0xa7, 0x05, 0xdf, 0x16, 0x01, 0x43, 0xcb, - 0x06, 0xde, 0x16, 0x41, 0x45, 0xc3, 0x0a, 0x48, 0x10, 0x00, 0xa6, 0x2e, - 0x44, 0x46, 0x2a, 0x49, 0x10, 0x00, 0x43, 0xbf, 0x0a, 0x41, 0x10, 0x00, - 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x40, 0x10, 0x40, 0x44, 0x25, - 0x01, 0x43, 0x10, 0x00, 0x42, 0x15, 0x02, 0x42, 0x10, 0x40, 0x44, 0x27, - 0x1d, 0x47, 0x10, 0x00, 0x42, 0x60, 0x25, 0x46, 0x10, 0x40, 0x43, 0xa7, - 0x05, 0x45, 0x10, 0x00, 0x43, 0xcb, 0x06, 0x44, 0x10, 0x40, 0xad, 0x06, - 0x4e, 0xac, 0x7a, 0x82, 0x10, 0x40, 0x06, 0x7d, 0x32, 0x17, 0x0a, 0x7f, - 0xac, 0x01, 0xff, 0x42, 0x74, 0x00, 0x60, 0x10, 0x00, 0x42, 0x6c, 0x00, - 0x5f, 0x10, 0x00, 0x42, 0xff, 0x04, 0x5e, 0x10, 0x40, 0x42, 0x22, 0x00, - 0x3e, 0x10, 0x00, 0x42, 0x71, 0x00, 0x3c, 0x10, 0x00, 0x42, 0xa9, 0x01, - 0x3d, 0x10, 0x00, 0x42, 0x34, 0x22, 0x3b, 0x10, 0x40, 0x03, 0x0f, 0x21, - 0x8d, 0x11, 0x02, 0x8d, 0x04, 0xb6, 0x0e, 0xb3, 0x01, 0xff, 0x45, 0x12, - 0xe4, 0x44, 0xf3, 0x81, 0xa5, 0x0e, 0x02, 0x36, 0x00, 0x01, 0xff, 0x80, - 0x8b, 0x0e, 0x03, 0x13, 0x00, 0x01, 0xff, 0x48, 0xd7, 0xa6, 0xb9, 0xf3, - 0x81, 0xf8, 0x0d, 0x44, 0x68, 0x27, 0xb5, 0xf3, 0x01, 0xb3, 0x01, 0xff, - 0x44, 0x32, 0xec, 0xbc, 0xf3, 0x01, 0x06, 0xf4, 0x15, 0x01, 0xff, 0x0b, - 0x32, 0x97, 0xd3, 0x0d, 0xa2, 0x86, 0x0d, 0xa3, 0xe0, 0x0a, 0xa4, 0x8b, - 0x0a, 0xa5, 0xd5, 0x09, 0xa6, 0xd2, 0x08, 0xa7, 0x83, 0x08, 0x02, 0x22, - 0x00, 0xe2, 0x07, 0x4d, 0xb5, 0x82, 0x98, 0xd1, 0x01, 0xab, 0x81, 0x07, - 0xac, 0xe2, 0x06, 0xad, 0x9c, 0x06, 0xae, 0xf7, 0x05, 0xaf, 0x98, 0x05, - 0xb0, 0xd5, 0x04, 0x02, 0x7c, 0x00, 0x9e, 0x04, 0xb2, 0xe9, 0x03, 0xb3, - 0xa4, 0x02, 0xb4, 0x30, 0xb6, 0x22, 0xb7, 0x0a, 0x4a, 0xb0, 0x62, 0x43, - 0xd1, 0x01, 0xfa, 0x8e, 0xd1, 0x41, 0x05, 0x30, 0xb1, 0x06, 0x4f, 0x57, - 0x6d, 0xb3, 0xd1, 0x41, 0x44, 0x68, 0x27, 0x5d, 0xd1, 0x01, 0x44, 0xa4, - 0x32, 0x3b, 0xd1, 0x41, 0x44, 0x53, 0x07, 0xd3, 0xd1, 0x01, 0x4c, 0x51, - 0x91, 0x57, 0xd1, 0x41, 0x06, 0x56, 0xd8, 0xb3, 0x01, 0xa8, 0x9a, 0x01, - 0x47, 0x30, 0xd1, 0xd8, 0xd1, 0x81, 0x8c, 0x01, 0xf2, 0x96, 0xd1, 0x81, - 0x1c, 0x43, 0x5d, 0x01, 0x97, 0xd1, 0x81, 0x06, 0x4d, 0xf4, 0x88, 0x17, - 0xd1, 0x41, 0x80, 0x01, 0xff, 0x45, 0xf9, 0x0d, 0x99, 0xd1, 0x01, 0x42, - 0x50, 0x02, 0x9a, 0xd1, 0x41, 0x06, 0x03, 0x02, 0x01, 0xff, 0x0a, 0xf0, - 0x37, 0x11, 0x15, 0xea, 0x37, 0x01, 0xff, 0x45, 0xe1, 0x02, 0x55, 0xd1, - 0x01, 0x45, 0xad, 0x02, 0x54, 0xd1, 0x41, 0x05, 0x4f, 0x14, 0x41, 0x05, - 0xc3, 0x00, 0x31, 0x06, 0xc8, 0x00, 0x21, 0x03, 0x11, 0x15, 0x01, 0xff, - 0x45, 0xe1, 0x02, 0x49, 0xd1, 0x01, 0x06, 0xc8, 0x00, 0x06, 0x45, 0xad, - 0x02, 0x48, 0xd1, 0x41, 0x45, 0xe1, 0x02, 0x51, 0xd1, 0x01, 0x45, 0xad, - 0x02, 0x50, 0xd1, 0x41, 0x45, 0xe1, 0x02, 0x4d, 0xd1, 0x01, 0x45, 0xad, - 0x02, 0x4c, 0xd1, 0x41, 0x45, 0xe1, 0x02, 0x4b, 0xd1, 0x01, 0x45, 0xad, - 0x02, 0x4a, 0xd1, 0x41, 0x45, 0xe1, 0x02, 0x4f, 0xd1, 0x01, 0x45, 0xad, - 0x02, 0x4e, 0xd1, 0x41, 0x4a, 0xd3, 0xa3, 0xdc, 0xd1, 0x41, 0x0c, 0xbd, - 0x8e, 0x06, 0x4e, 0x2e, 0x7a, 0x18, 0xd1, 0x41, 0x44, 0x68, 0x27, 0x62, - 0xd1, 0x01, 0x44, 0xa4, 0x32, 0x40, 0xd1, 0x41, 0x1b, 0x6a, 0x1b, 0x18, - 0x19, 0x6c, 0x1b, 0x01, 0xff, 0x4a, 0xdf, 0x6c, 0xc8, 0xd1, 0x01, 0x48, - 0xe1, 0x6c, 0xc7, 0xd1, 0xc1, 0x00, 0x4d, 0xfc, 0x7d, 0xc9, 0xd1, 0x41, - 0x4a, 0xdf, 0x6c, 0xcb, 0xd1, 0x81, 0x06, 0x48, 0xe1, 0x6c, 0xca, 0xd1, - 0x41, 0x0c, 0xfc, 0x7d, 0x01, 0xff, 0xd1, 0xcc, 0xd1, 0x01, 0xd2, 0xcd, - 0xd1, 0x01, 0xd3, 0xce, 0xd1, 0x41, 0x48, 0xfa, 0xc1, 0xd6, 0xd1, 0x81, - 0xb4, 0x01, 0xa5, 0x7a, 0xa8, 0x62, 0xa9, 0x25, 0x43, 0x0c, 0x00, 0xe9, - 0xd1, 0x01, 0x06, 0x34, 0x24, 0x06, 0x45, 0x8b, 0xe8, 0x8d, 0xd1, 0x41, - 0xe2, 0xd2, 0xd1, 0x01, 0x09, 0xf1, 0x37, 0x01, 0xff, 0x45, 0xe1, 0x02, - 0x47, 0xd1, 0x01, 0x45, 0xad, 0x02, 0x46, 0xd1, 0x41, 0x4c, 0xf1, 0x90, - 0x00, 0xd1, 0x01, 0xb8, 0x01, 0xff, 0x8d, 0x24, 0xb4, 0x01, 0xff, 0x06, - 0x63, 0x25, 0x11, 0x09, 0x07, 0xbf, 0x01, 0xff, 0x44, 0x68, 0x27, 0x63, - 0xd1, 0x01, 0x44, 0xa4, 0x32, 0x41, 0xd1, 0x41, 0x44, 0x68, 0x27, 0x61, - 0xd1, 0x01, 0x44, 0xa4, 0x32, 0x3f, 0xd1, 0x41, 0x4a, 0x32, 0x7a, 0x1b, - 0xd1, 0x01, 0x50, 0x1a, 0x66, 0x1c, 0xd1, 0x41, 0x04, 0xa7, 0xae, 0x06, - 0x4b, 0xc2, 0x9e, 0x05, 0xd1, 0x41, 0x44, 0xa5, 0x01, 0x31, 0xd1, 0x01, - 0x42, 0x50, 0x02, 0x30, 0xd1, 0x41, 0x43, 0xc6, 0x20, 0x0b, 0xd1, 0x01, - 0x02, 0x7d, 0x02, 0x01, 0xff, 0x07, 0xde, 0xcc, 0x17, 0x07, 0x7a, 0xd0, - 0x01, 0xff, 0x45, 0xe1, 0x02, 0xbe, 0xd1, 0x01, 0x44, 0xa4, 0x32, 0xc6, - 0xd1, 0x01, 0x45, 0xad, 0x02, 0xbd, 0xd1, 0x41, 0x45, 0xe1, 0x02, 0xba, - 0xd1, 0x01, 0x44, 0xa4, 0x32, 0xc4, 0xd1, 0x01, 0x45, 0xad, 0x02, 0xb9, - 0xd1, 0x41, 0x47, 0x6f, 0xca, 0xdb, 0xd1, 0x41, 0xa5, 0x0f, 0xa9, 0x01, - 0xff, 0x4f, 0xfe, 0x6b, 0x07, 0xd1, 0x01, 0x49, 0xdc, 0xb9, 0x8c, 0xd1, - 0x41, 0x04, 0x59, 0x69, 0x06, 0x53, 0x7a, 0x4d, 0x03, 0xd1, 0x41, 0x45, - 0xd3, 0x09, 0x08, 0xd1, 0x01, 0x0a, 0x61, 0xa7, 0x01, 0xff, 0xd1, 0x0d, - 0xd1, 0x01, 0xd2, 0x0e, 0xd1, 0x01, 0xd3, 0x0f, 0xd1, 0x41, 0x06, 0xdb, - 0x02, 0x11, 0x0b, 0x68, 0x9b, 0x01, 0xff, 0x44, 0xc2, 0xeb, 0x38, 0xd1, - 0x01, 0x45, 0x97, 0xe1, 0x39, 0xd1, 0x41, 0x44, 0x68, 0x27, 0x5f, 0xd1, - 0x01, 0x44, 0xa4, 0x32, 0x3d, 0xd1, 0x01, 0x05, 0x83, 0x2c, 0x01, 0xff, - 0x44, 0x60, 0x3a, 0x33, 0xd1, 0x01, 0x45, 0xa5, 0xae, 0x32, 0xd1, 0x41, - 0x53, 0x05, 0x47, 0x56, 0xd1, 0x01, 0xa5, 0x22, 0x44, 0x2e, 0xed, 0x8f, - 0xd1, 0x01, 0x4c, 0xdd, 0x8f, 0x44, 0xd1, 0x01, 0xaf, 0x01, 0xff, 0x45, - 0x69, 0xe2, 0xd4, 0xd1, 0x01, 0x47, 0xa3, 0xd2, 0xd9, 0xd1, 0xc1, 0x00, - 0x47, 0x6f, 0xca, 0xda, 0xd1, 0x41, 0x04, 0x2b, 0xad, 0x06, 0x4c, 0x31, - 0x93, 0xdd, 0xd1, 0x41, 0x44, 0xb9, 0x00, 0xae, 0xd1, 0x01, 0x47, 0x01, - 0xd4, 0xaf, 0xd1, 0x41, 0x02, 0xa2, 0x05, 0x42, 0x0f, 0x35, 0x71, 0x11, - 0x06, 0xbc, 0xbf, 0x01, 0xff, 0x44, 0xc2, 0xeb, 0x36, 0xd1, 0x01, 0x45, - 0x97, 0xe1, 0x37, 0xd1, 0x41, 0xd1, 0x9b, 0xd1, 0x81, 0x20, 0xd2, 0x9c, - 0xd1, 0x01, 0xd3, 0x9d, 0xd1, 0x01, 0xd4, 0x9e, 0xd1, 0x01, 0xd5, 0x9f, - 0xd1, 0x01, 0xd6, 0xa0, 0xd1, 0x01, 0xd7, 0xa1, 0xd1, 0x01, 0xd8, 0xa2, - 0xd1, 0x01, 0xd9, 0xa3, 0xd1, 0x41, 0xd0, 0xa4, 0xd1, 0x01, 0xd1, 0xa5, - 0xd1, 0x41, 0x17, 0xd4, 0x2b, 0x06, 0x4b, 0x31, 0x7a, 0x16, 0xd1, 0x41, - 0x44, 0x68, 0x27, 0x64, 0xd1, 0x01, 0x44, 0xa4, 0x32, 0x42, 0xd1, 0x41, - 0x07, 0xb6, 0x90, 0x12, 0x4a, 0x57, 0xa7, 0xa7, 0xd1, 0x01, 0x4d, 0x73, - 0x85, 0x58, 0xd1, 0x01, 0x4c, 0x69, 0x94, 0x59, 0xd1, 0x41, 0x44, 0xa5, - 0x01, 0x2f, 0xd1, 0x01, 0x42, 0x50, 0x02, 0x2e, 0xd1, 0x41, 0x45, 0x83, - 0xcc, 0xb6, 0xd1, 0x01, 0x44, 0x76, 0xec, 0x90, 0xd1, 0x01, 0x45, 0x7b, - 0xd0, 0xbb, 0xd1, 0x81, 0x21, 0x0d, 0x59, 0x85, 0x11, 0x04, 0x8c, 0x04, - 0x01, 0xff, 0x45, 0x55, 0x64, 0x3a, 0xd1, 0x01, 0x50, 0x4a, 0x64, 0x29, - 0xd1, 0x41, 0x45, 0xe1, 0x02, 0x53, 0xd1, 0x01, 0x45, 0xad, 0x02, 0x52, - 0xd1, 0x41, 0x80, 0x01, 0xff, 0x45, 0xe1, 0x02, 0xbc, 0xd1, 0x01, 0x44, - 0xa4, 0x32, 0xc5, 0xd1, 0x41, 0x4f, 0xff, 0x6a, 0x06, 0xd1, 0x01, 0x44, - 0x59, 0x48, 0xb7, 0xd1, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4f, 0xdf, 0x6c, - 0xc2, 0xd1, 0x01, 0x4d, 0xe1, 0x6c, 0xc1, 0xd1, 0x41, 0x06, 0xd0, 0xd9, - 0x06, 0x44, 0x25, 0x1c, 0xea, 0xd1, 0x41, 0x46, 0x6c, 0xd7, 0xde, 0xd1, - 0x01, 0xa5, 0x30, 0xa6, 0x22, 0x49, 0xfa, 0xb6, 0xe3, 0xd1, 0x01, 0x12, - 0x66, 0x53, 0x0c, 0x4f, 0xbd, 0x70, 0xe1, 0xd1, 0x01, 0x4a, 0x2f, 0xb1, - 0xe2, 0xd1, 0x41, 0x44, 0xa5, 0x01, 0xe4, 0xd1, 0x01, 0x42, 0x50, 0x02, - 0xe5, 0xd1, 0x41, 0x49, 0xf6, 0xb7, 0xe0, 0xd1, 0x01, 0x48, 0xb3, 0xb6, - 0xe8, 0xd1, 0x41, 0x10, 0x4a, 0x62, 0x06, 0x4b, 0xd0, 0x9d, 0xdf, 0xd1, - 0x41, 0x44, 0xa5, 0x01, 0xe6, 0xd1, 0x01, 0x42, 0x50, 0x02, 0xe7, 0xd1, - 0x41, 0x03, 0x24, 0x00, 0x06, 0x49, 0xe7, 0xbd, 0xa6, 0xd1, 0x41, 0x44, - 0x68, 0x27, 0x5e, 0xd1, 0x01, 0x4a, 0x29, 0xad, 0xb0, 0xd1, 0x01, 0x44, - 0xa4, 0x32, 0x3c, 0xd1, 0x41, 0x45, 0x94, 0xbc, 0x1e, 0xd1, 0x81, 0x34, - 0x09, 0x16, 0xb9, 0x24, 0xb2, 0x01, 0xff, 0x09, 0x37, 0xb3, 0x11, 0x08, - 0xf2, 0xc2, 0x01, 0xff, 0x46, 0x6c, 0xd7, 0xd0, 0xd1, 0x01, 0x46, 0xbc, - 0xd8, 0xd1, 0xd1, 0x41, 0x48, 0x2a, 0xc6, 0x95, 0xd1, 0x01, 0x45, 0xf9, - 0x0d, 0x94, 0xd1, 0x41, 0x44, 0xa5, 0x01, 0xb2, 0xd1, 0x01, 0x42, 0x50, - 0x02, 0xb1, 0xd1, 0x41, 0x08, 0xba, 0xbf, 0x01, 0xff, 0x44, 0xc2, 0xeb, - 0x1f, 0xd1, 0x01, 0x45, 0x97, 0xe1, 0x20, 0xd1, 0x41, 0x45, 0x94, 0xbc, - 0x22, 0xd1, 0x81, 0x68, 0x46, 0x74, 0xd8, 0x10, 0xd1, 0x81, 0x5b, 0xa9, - 0x3a, 0x04, 0xb3, 0xb6, 0x2a, 0xaf, 0x11, 0x04, 0x96, 0xef, 0x01, 0xff, - 0x45, 0xe1, 0x02, 0xc0, 0xd1, 0x01, 0x45, 0xad, 0x02, 0xbf, 0xd1, 0x41, - 0x43, 0x2d, 0x01, 0x91, 0xd1, 0x01, 0x03, 0xf9, 0xbd, 0x01, 0xff, 0x4a, - 0x32, 0x7a, 0x19, 0xd1, 0x01, 0x50, 0x1a, 0x66, 0x1d, 0xd1, 0x41, 0x44, - 0xa5, 0x01, 0x2d, 0xd1, 0x01, 0x42, 0x50, 0x02, 0x2c, 0xd1, 0x41, 0xae, - 0x06, 0x4d, 0x31, 0x88, 0x1a, 0xd1, 0x41, 0x4a, 0x83, 0x4d, 0x02, 0xd1, - 0x01, 0x0e, 0x92, 0x76, 0x01, 0xff, 0xd1, 0x6a, 0xd1, 0x01, 0xd2, 0x6b, - 0xd1, 0x01, 0xd3, 0x6c, 0xd1, 0x41, 0x46, 0xf4, 0x06, 0x11, 0xd1, 0x41, - 0x08, 0xba, 0xbf, 0x01, 0xff, 0x44, 0xc2, 0xeb, 0x23, 0xd1, 0x01, 0x45, - 0x97, 0xe1, 0x24, 0xd1, 0x41, 0x06, 0xc4, 0x0a, 0x23, 0x03, 0x1b, 0x00, - 0x01, 0xff, 0x44, 0x2d, 0xbb, 0x74, 0xd1, 0x01, 0x49, 0x7e, 0xba, 0xa8, - 0xd1, 0x01, 0x46, 0xc7, 0x34, 0x7a, 0xd1, 0x01, 0x44, 0x5e, 0xef, 0x78, - 0xd1, 0x01, 0x43, 0x37, 0x25, 0x76, 0xd1, 0x41, 0x44, 0x68, 0x27, 0x60, - 0xd1, 0x01, 0x44, 0xa4, 0x32, 0x3e, 0xd1, 0x41, 0xa1, 0x31, 0xa5, 0x23, - 0x06, 0x3c, 0x01, 0x0d, 0x09, 0x91, 0xbc, 0x01, 0xff, 0xd1, 0x25, 0xd1, - 0x01, 0xd2, 0x26, 0xd1, 0x41, 0x47, 0x86, 0x4d, 0x01, 0xd1, 0x01, 0x44, - 0x60, 0x3a, 0x2b, 0xd1, 0x01, 0x45, 0xa5, 0xae, 0x2a, 0xd1, 0x41, 0x49, - 0x1d, 0xb5, 0x93, 0xd1, 0x01, 0x4a, 0xb5, 0xa8, 0xa9, 0xd1, 0x41, 0x45, - 0x8b, 0xde, 0x0a, 0xd1, 0x01, 0x47, 0xc4, 0xcf, 0x09, 0xd1, 0x01, 0x42, - 0x6b, 0x1b, 0xb4, 0xd1, 0x81, 0x06, 0x4c, 0x61, 0x93, 0x04, 0xd1, 0x41, - 0x44, 0x6b, 0x6a, 0xb5, 0xd1, 0x41, 0x45, 0x94, 0xbc, 0x21, 0xd1, 0x01, - 0x46, 0x9a, 0xd6, 0x13, 0xd1, 0x01, 0x50, 0xaa, 0x62, 0x45, 0xd1, 0x01, - 0xac, 0xef, 0x01, 0xaf, 0x14, 0xb2, 0x06, 0x47, 0x39, 0xd4, 0x35, 0xd1, - 0x41, 0x47, 0x1f, 0xb5, 0x92, 0xd1, 0x01, 0x43, 0x2f, 0xf1, 0xcf, 0xd1, - 0x41, 0x42, 0xa1, 0x10, 0x0c, 0xd1, 0x01, 0xad, 0x01, 0xff, 0x07, 0xc9, - 0x15, 0x06, 0x48, 0xc2, 0xc5, 0x34, 0xd1, 0x41, 0xa1, 0xb0, 0x01, 0x44, - 0xa4, 0x98, 0x89, 0xd1, 0x01, 0x02, 0x3b, 0x01, 0x93, 0x01, 0x02, 0xaa, - 0x04, 0x71, 0x48, 0x1a, 0xc4, 0xac, 0xd1, 0x01, 0x45, 0x2a, 0xe5, 0x82, - 0xd1, 0x01, 0x47, 0x50, 0xd0, 0x7f, 0xd1, 0x81, 0x58, 0x43, 0x4b, 0x06, - 0x86, 0xd1, 0x01, 0xb3, 0x27, 0xb4, 0x06, 0x46, 0xea, 0xdd, 0xab, 0xd1, - 0x41, 0x45, 0xcf, 0x7b, 0x7d, 0xd1, 0x01, 0xb2, 0x01, 0xff, 0x06, 0x9a, - 0x76, 0x06, 0x4b, 0x73, 0x9b, 0x8b, 0xd1, 0x41, 0xd1, 0x67, 0xd1, 0x01, - 0xd2, 0x68, 0xd1, 0x01, 0xd3, 0x69, 0xd1, 0x41, 0x44, 0x42, 0xa7, 0x88, - 0xd1, 0x01, 0x4d, 0x89, 0x84, 0xad, 0xd1, 0x01, 0x50, 0x7a, 0x64, 0x66, - 0xd1, 0x01, 0xb4, 0x01, 0xff, 0x05, 0xd7, 0xb2, 0x06, 0x42, 0x8a, 0x05, - 0x65, 0xd1, 0x41, 0x46, 0x30, 0xda, 0x7e, 0xd1, 0x01, 0xef, 0x7c, 0xd1, - 0x41, 0x49, 0xd4, 0xb2, 0x80, 0xd1, 0x41, 0x03, 0x5e, 0x56, 0x06, 0x42, - 0x8f, 0x04, 0x87, 0xd1, 0x41, 0xd1, 0x6e, 0xd1, 0x01, 0xd2, 0x6f, 0xd1, - 0x01, 0xd3, 0x70, 0xd1, 0x01, 0xd4, 0x71, 0xd1, 0x01, 0xd5, 0x72, 0xd1, - 0x41, 0x42, 0x52, 0x00, 0x85, 0xd1, 0x01, 0x4b, 0xda, 0xa1, 0x8a, 0xd1, - 0x01, 0x46, 0x32, 0xde, 0xaa, 0xd1, 0x41, 0x45, 0xb0, 0x04, 0x7b, 0xd1, - 0x81, 0x06, 0x4f, 0xac, 0x72, 0x6d, 0xd1, 0x41, 0x49, 0xd4, 0xb2, 0x81, - 0xd1, 0x41, 0xa9, 0x11, 0x0f, 0xe8, 0x72, 0x01, 0xff, 0x45, 0xe1, 0x02, - 0x5b, 0xd1, 0x01, 0x45, 0xad, 0x02, 0x5a, 0xd1, 0x41, 0x45, 0x48, 0xe5, - 0xd7, 0xd1, 0x01, 0x43, 0xf4, 0x31, 0xd5, 0xd1, 0x41, 0x05, 0xb9, 0x3e, - 0x2e, 0xb2, 0x01, 0xff, 0x02, 0xe3, 0x02, 0x1d, 0xa5, 0x01, 0xff, 0x48, - 0x42, 0xc1, 0x12, 0xd1, 0x01, 0xb6, 0x01, 0xff, 0xe5, 0x5c, 0xd1, 0x01, - 0x42, 0x34, 0x03, 0xb8, 0xd1, 0xc1, 0x00, 0x45, 0x55, 0x64, 0xc3, 0xd1, - 0x41, 0xe5, 0x14, 0xd1, 0x01, 0x43, 0x18, 0x09, 0x15, 0xd1, 0x41, 0x44, - 0x2d, 0xbb, 0x73, 0xd1, 0x01, 0x46, 0xc7, 0x34, 0x79, 0xd1, 0x01, 0x44, - 0x5e, 0xef, 0x77, 0xd1, 0x01, 0x43, 0x37, 0x25, 0x75, 0xd1, 0x41, 0x44, - 0xa5, 0x01, 0x84, 0xd1, 0x01, 0x42, 0x50, 0x02, 0x83, 0xd1, 0x41, 0x4b, - 0x1f, 0x96, 0x98, 0xf3, 0x41, 0x49, 0xb2, 0xb6, 0x6d, 0x26, 0x00, 0x4c, - 0xb5, 0x90, 0x6e, 0x26, 0x00, 0x4a, 0xa5, 0xae, 0x6f, 0x26, 0x40, 0x46, - 0xa8, 0x67, 0x64, 0xcc, 0x41, 0x04, 0xf5, 0x99, 0x69, 0xa9, 0x01, 0xff, - 0x43, 0x55, 0x6a, 0xb8, 0x22, 0x00, 0x02, 0x90, 0x04, 0x16, 0x43, 0x4d, - 0x12, 0x8c, 0x22, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4e, 0x74, 0x24, 0x8d, - 0x22, 0x00, 0x45, 0xe1, 0x16, 0x8e, 0x22, 0x40, 0x4f, 0xe1, 0x6a, 0xb6, - 0xf3, 0x01, 0x08, 0x92, 0x04, 0x01, 0xff, 0x44, 0x2f, 0x03, 0xd7, 0x00, - 0x80, 0x04, 0xf8, 0x15, 0x27, 0x40, 0x80, 0x01, 0xff, 0x03, 0xb6, 0x05, - 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0x98, 0x1d, 0x30, 0x2a, 0x00, - 0x48, 0x78, 0x58, 0x31, 0x2a, 0x40, 0x4d, 0x79, 0x80, 0x37, 0x2a, 0x00, - 0x50, 0x0a, 0x63, 0x34, 0x2a, 0x00, 0x51, 0x38, 0x5c, 0x35, 0x2a, 0x00, - 0x48, 0x01, 0x02, 0x3b, 0x2a, 0x40, 0x07, 0xc1, 0x05, 0x06, 0x4c, 0x57, - 0x26, 0xa9, 0x12, 0x41, 0xe1, 0x80, 0x12, 0x01, 0xa2, 0xca, 0x01, 0xa3, - 0xbd, 0x01, 0xa4, 0x9e, 0x01, 0xe5, 0x83, 0x12, 0x01, 0xa7, 0x8d, 0x01, - 0x42, 0x22, 0x00, 0xa6, 0x12, 0x01, 0xe9, 0x81, 0x12, 0x01, 0xaa, 0x77, - 0xab, 0x6b, 0x42, 0x74, 0x00, 0xa3, 0x12, 0x01, 0x42, 0x6c, 0x00, 0xa0, - 0x12, 0x01, 0xae, 0x4d, 0xb0, 0x41, 0xb2, 0x2f, 0x42, 0x15, 0x06, 0xa5, - 0x12, 0x01, 0xb4, 0x10, 0xf5, 0x82, 0x12, 0x01, 0x42, 0xa6, 0x0a, 0xa4, - 0x12, 0x01, 0x42, 0x34, 0x22, 0xa1, 0x12, 0x41, 0xe1, 0x96, 0x12, 0x01, - 0x42, 0x22, 0x00, 0x97, 0x12, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x90, 0x12, - 0x01, 0x42, 0x22, 0x00, 0x91, 0x12, 0x41, 0xe1, 0xa2, 0x12, 0x01, 0x42, - 0x22, 0x00, 0xa8, 0x12, 0x01, 0x42, 0x71, 0x00, 0xa7, 0x12, 0x41, 0xe1, - 0x9b, 0x12, 0x01, 0x42, 0x22, 0x00, 0x9c, 0x12, 0x41, 0xe1, 0x9a, 0x12, - 0x01, 0x42, 0xff, 0x04, 0x95, 0x12, 0x01, 0x42, 0x34, 0x22, 0x8f, 0x12, - 0x41, 0xe1, 0x84, 0x12, 0x01, 0x42, 0x22, 0x00, 0x85, 0x12, 0x41, 0xe1, - 0x8c, 0x12, 0x01, 0x42, 0xbd, 0x26, 0x8d, 0x12, 0x41, 0xe1, 0x86, 0x12, - 0x01, 0x42, 0x22, 0x00, 0x88, 0x12, 0x41, 0xe1, 0x98, 0x12, 0x01, 0xa4, - 0x06, 0x42, 0x22, 0x00, 0x99, 0x12, 0x41, 0xe1, 0x92, 0x12, 0x01, 0x42, - 0xa1, 0x10, 0x93, 0x12, 0x01, 0x42, 0x22, 0x00, 0x94, 0x12, 0x41, 0xe1, - 0x8a, 0x12, 0x01, 0x42, 0x22, 0x00, 0x8b, 0x12, 0x41, 0xe1, 0x9d, 0x12, - 0x01, 0x42, 0x22, 0x00, 0x9f, 0x12, 0x41, 0x4c, 0x87, 0x00, 0x6b, 0x22, - 0x00, 0x49, 0xec, 0x00, 0x6a, 0x22, 0x40, 0xa4, 0xb8, 0x01, 0x07, 0xc1, - 0x05, 0x01, 0xff, 0xe1, 0x46, 0x6a, 0x01, 0x42, 0x16, 0x00, 0x44, 0x6a, - 0x01, 0x43, 0xa0, 0x37, 0x4b, 0x6a, 0x01, 0x42, 0xa1, 0x10, 0x45, 0x6a, - 0x81, 0x97, 0x01, 0xe5, 0x58, 0x6a, 0x81, 0x8d, 0x01, 0x02, 0x22, 0x00, - 0x80, 0x01, 0xab, 0x6e, 0x42, 0x74, 0x00, 0x5b, 0x6a, 0x81, 0x63, 0xad, - 0x55, 0xae, 0x47, 0xef, 0x52, 0x6a, 0x81, 0x3a, 0xb0, 0x2e, 0xb2, 0x24, - 0x43, 0x54, 0x0c, 0x54, 0x6a, 0x01, 0xb4, 0x0c, 0x42, 0xa9, 0x01, 0x57, - 0x6a, 0x01, 0x42, 0x60, 0x46, 0x42, 0x6a, 0x41, 0xe1, 0x40, 0x6a, 0x01, - 0x42, 0x69, 0x18, 0x5e, 0x6a, 0x01, 0x43, 0xe6, 0x01, 0x55, 0x6a, 0x41, - 0xe9, 0x5d, 0x6a, 0x01, 0xef, 0x53, 0x6a, 0x41, 0xe1, 0x50, 0x6a, 0x01, - 0x42, 0x49, 0x00, 0x47, 0x6a, 0x41, 0xec, 0x4d, 0x6a, 0x01, 0xef, 0x51, - 0x6a, 0x41, 0x42, 0xc6, 0x06, 0x41, 0x6a, 0x01, 0x42, 0x9e, 0x01, 0x4f, - 0x6a, 0x41, 0x43, 0xa4, 0x85, 0x4e, 0x6a, 0x01, 0x42, 0x29, 0x02, 0x43, - 0x6a, 0x41, 0xee, 0x5a, 0x6a, 0x41, 0x44, 0x5e, 0xec, 0x4c, 0x6a, 0x01, - 0x43, 0xcc, 0x50, 0x48, 0x6a, 0x01, 0xef, 0x59, 0x6a, 0x41, 0xe9, 0x5c, - 0x6a, 0x01, 0xef, 0x49, 0x6a, 0x41, 0xe1, 0x56, 0x6a, 0x41, 0xe9, 0x4a, - 0x6a, 0x41, 0x44, 0xd1, 0x1f, 0x6e, 0x6a, 0x01, 0x05, 0xc5, 0x06, 0x06, - 0x4b, 0xd8, 0x9e, 0x6f, 0x6a, 0x41, 0x45, 0xc3, 0x0a, 0x68, 0x6a, 0x01, - 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x69, 0x6a, 0x01, 0x43, 0xbf, 0x0a, 0x61, - 0x6a, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x60, 0x6a, 0x41, - 0x44, 0x25, 0x01, 0x63, 0x6a, 0x01, 0x42, 0x15, 0x02, 0x62, 0x6a, 0x41, - 0x44, 0x27, 0x1d, 0x67, 0x6a, 0x01, 0x42, 0x60, 0x25, 0x66, 0x6a, 0x41, - 0x43, 0xa7, 0x05, 0x65, 0x6a, 0x01, 0x43, 0xcb, 0x06, 0x64, 0x6a, 0x41, - 0x4a, 0x06, 0x4a, 0xf1, 0xf4, 0x81, 0x82, 0x1f, 0xa4, 0xcb, 0x0a, 0xae, - 0xaa, 0x01, 0xaf, 0x85, 0x01, 0x03, 0xab, 0x05, 0x77, 0xb4, 0x50, 0xb5, - 0x0c, 0x4a, 0xfd, 0xb0, 0xa5, 0xf3, 0x01, 0x43, 0x0e, 0x77, 0xff, 0xf5, - 0x41, 0x02, 0x11, 0x00, 0x1c, 0x42, 0x1b, 0x03, 0x01, 0xf4, 0x81, 0x06, - 0x42, 0x53, 0x00, 0x44, 0xf4, 0x41, 0x80, 0x01, 0xff, 0x44, 0xe1, 0x07, - 0x2d, 0xf4, 0x01, 0x44, 0xa2, 0xdd, 0xa4, 0xfa, 0x41, 0x45, 0x9f, 0xde, - 0xfb, 0xf5, 0x01, 0x43, 0x05, 0x07, 0xf0, 0x26, 0xc0, 0x00, 0x80, 0x01, - 0xff, 0x49, 0x4e, 0xb4, 0xb5, 0xf6, 0x01, 0x48, 0xea, 0xc1, 0xa0, 0xf6, - 0x01, 0x47, 0x2f, 0x70, 0x9e, 0xf6, 0x41, 0x4d, 0x7f, 0x7b, 0x36, 0xf9, - 0x01, 0x02, 0x0c, 0x00, 0x01, 0xff, 0x80, 0x0c, 0x4f, 0x66, 0x6d, 0xbc, - 0xf9, 0x01, 0x43, 0x62, 0x1f, 0xe3, 0xf6, 0x41, 0x44, 0xde, 0xd9, 0xe5, - 0xf6, 0x01, 0x47, 0xe2, 0xd2, 0xf5, 0xf6, 0x41, 0xe5, 0x4c, 0xf5, 0x01, - 0x43, 0x9b, 0x07, 0x9f, 0xf9, 0x41, 0x48, 0x62, 0xc2, 0xf0, 0xf5, 0x01, - 0x02, 0x92, 0x00, 0x06, 0x42, 0x1b, 0x03, 0xce, 0xfa, 0x41, 0x44, 0xbe, - 0x2b, 0x6e, 0xf9, 0x01, 0x46, 0xa2, 0xda, 0xf5, 0xcd, 0x01, 0x50, 0xfa, - 0x66, 0x91, 0xf3, 0x41, 0x02, 0x3f, 0x1c, 0x85, 0x09, 0x07, 0x82, 0xce, - 0x35, 0x43, 0x81, 0x23, 0x12, 0xf4, 0x81, 0x28, 0xaf, 0x01, 0xff, 0x09, - 0x24, 0x94, 0x0c, 0x44, 0x1a, 0x4b, 0x9d, 0xf6, 0x01, 0x4d, 0x2d, 0x87, - 0x8d, 0x23, 0x40, 0x45, 0xb8, 0x70, 0x00, 0xd3, 0x01, 0xb9, 0x01, 0xff, - 0x43, 0x1c, 0x01, 0x8a, 0x26, 0x00, 0x42, 0x9e, 0x01, 0x8b, 0x26, 0x40, - 0x45, 0xe0, 0x07, 0x35, 0xf4, 0x41, 0x45, 0x52, 0x07, 0x00, 0x18, 0x80, - 0xb3, 0x08, 0x02, 0xe8, 0x04, 0xa2, 0x08, 0xa4, 0xd3, 0x07, 0x48, 0x45, - 0x29, 0x01, 0x18, 0x00, 0xa6, 0x9f, 0x07, 0x4e, 0x48, 0x77, 0x67, 0x16, - 0x81, 0x91, 0x07, 0x07, 0xc1, 0x05, 0x68, 0x07, 0x49, 0xd0, 0x58, 0x46, - 0x56, 0xdb, 0x0a, 0x18, 0x00, 0x4d, 0x50, 0x86, 0x61, 0x16, 0x81, 0x3a, - 0xb3, 0x1a, 0xb4, 0x06, 0x4f, 0x06, 0x73, 0x0e, 0x18, 0x40, 0x4f, 0x64, - 0x6f, 0x06, 0x18, 0x00, 0x59, 0x6e, 0x25, 0x63, 0x16, 0x01, 0x66, 0x46, - 0x07, 0x6c, 0x16, 0x41, 0x5c, 0xaa, 0x17, 0x07, 0x18, 0x00, 0x4a, 0x4d, - 0x07, 0x69, 0x16, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4f, 0x5d, - 0x07, 0x6b, 0x16, 0x01, 0x48, 0xfd, 0x04, 0x6a, 0x16, 0x41, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x4f, 0x5d, 0x07, 0x66, 0x16, 0x01, 0x48, 0xfd, 0x04, - 0x65, 0x16, 0x41, 0x45, 0xe8, 0x04, 0x08, 0x18, 0x00, 0x49, 0x15, 0x16, - 0x09, 0x18, 0x40, 0xe1, 0x20, 0x18, 0x80, 0xef, 0x04, 0x42, 0x16, 0x00, - 0x2a, 0x18, 0x00, 0x02, 0x1e, 0x14, 0xd5, 0x04, 0x42, 0xa1, 0x10, 0x33, - 0x18, 0x00, 0xe5, 0x21, 0x18, 0x80, 0xc5, 0x04, 0x42, 0xe1, 0x07, 0x39, - 0x18, 0x00, 0x42, 0x24, 0x02, 0x2d, 0x18, 0x00, 0x43, 0x42, 0x40, 0x3e, - 0x18, 0x00, 0xe9, 0x22, 0x18, 0x00, 0x42, 0xbd, 0x26, 0x35, 0x18, 0x00, - 0xab, 0x9c, 0x04, 0xac, 0x8f, 0x04, 0x42, 0x6c, 0x00, 0x2e, 0x18, 0x80, - 0x8b, 0x03, 0x42, 0xff, 0x04, 0x28, 0x18, 0x00, 0xef, 0x23, 0x18, 0x80, - 0xfb, 0x02, 0x42, 0x6c, 0x09, 0x2b, 0x18, 0x00, 0x42, 0xf4, 0x13, 0x2c, - 0x18, 0x00, 0x42, 0x71, 0x00, 0x37, 0x18, 0x00, 0xb3, 0xdc, 0x01, 0xb4, - 0x28, 0xf5, 0x24, 0x18, 0x80, 0x1f, 0x42, 0xa9, 0x01, 0x38, 0x18, 0x00, - 0x42, 0x34, 0x22, 0x36, 0x18, 0x00, 0xba, 0x01, 0xff, 0xe1, 0x3d, 0x18, - 0x00, 0x42, 0x49, 0x00, 0x41, 0x18, 0x00, 0x42, 0x71, 0x00, 0x3f, 0x18, - 0x40, 0xe5, 0x26, 0x18, 0x40, 0xe1, 0x32, 0x18, 0x00, 0x04, 0x64, 0x6f, - 0x06, 0x42, 0x15, 0x06, 0x3c, 0x18, 0x40, 0xa1, 0x8b, 0x01, 0x42, 0x16, - 0x00, 0x4b, 0x18, 0x00, 0x43, 0xef, 0x1f, 0x52, 0x18, 0x00, 0xa4, 0x73, - 0xe5, 0x44, 0x18, 0x00, 0x42, 0x24, 0x02, 0x4e, 0x18, 0x80, 0x64, 0x43, - 0x42, 0x40, 0x59, 0x18, 0x00, 0xe9, 0x45, 0x18, 0x00, 0xaa, 0x4e, 0x42, - 0x1b, 0x02, 0x57, 0x18, 0x00, 0x4f, 0x47, 0x6e, 0x43, 0x18, 0x00, 0x42, - 0x6c, 0x00, 0x4f, 0x18, 0x00, 0x43, 0x6a, 0x08, 0x5b, 0x18, 0x00, 0xef, - 0x46, 0x18, 0x80, 0x2d, 0x42, 0x6c, 0x09, 0x4c, 0x18, 0x00, 0x42, 0xf4, - 0x13, 0x4d, 0x18, 0x00, 0xb4, 0x15, 0xf5, 0x47, 0x18, 0x80, 0x0c, 0x42, - 0xa9, 0x01, 0x56, 0x18, 0x00, 0x42, 0x34, 0x22, 0x55, 0x18, 0x40, 0xe5, - 0x49, 0x18, 0x40, 0xe1, 0x50, 0x18, 0x00, 0x42, 0x15, 0x06, 0x54, 0x18, - 0x40, 0xe5, 0x48, 0x18, 0x40, 0xe1, 0x53, 0x18, 0x00, 0x42, 0x1b, 0x01, - 0x5a, 0x18, 0x40, 0xe1, 0x58, 0x18, 0x40, 0xe1, 0x51, 0x18, 0x00, 0x42, - 0x59, 0x00, 0x5c, 0x18, 0x40, 0x08, 0x9b, 0xb3, 0x06, 0x42, 0x1d, 0x01, - 0x4a, 0x18, 0x40, 0x42, 0x12, 0x00, 0x98, 0x18, 0x00, 0x43, 0x44, 0xbe, - 0x99, 0x18, 0x40, 0xe1, 0x30, 0x18, 0x00, 0x42, 0x22, 0x00, 0x31, 0x18, - 0x00, 0x04, 0xaa, 0x17, 0x01, 0xff, 0x43, 0x1c, 0x01, 0x62, 0x18, 0x00, - 0x43, 0xef, 0x1f, 0x71, 0x18, 0x00, 0x42, 0xa1, 0x10, 0x69, 0x18, 0x00, - 0xe5, 0x5d, 0x18, 0x00, 0x42, 0xe1, 0x07, 0x6b, 0x18, 0x00, 0x42, 0x24, - 0x02, 0x64, 0x18, 0x80, 0x54, 0x42, 0x22, 0x00, 0x65, 0x18, 0x80, 0x49, - 0xe9, 0x5e, 0x18, 0x80, 0x40, 0x42, 0xbd, 0x26, 0x6a, 0x18, 0x00, 0x42, - 0x1b, 0x02, 0x63, 0x18, 0x00, 0x42, 0x6c, 0x09, 0x66, 0x18, 0x00, 0x43, - 0xcd, 0xa8, 0x70, 0x18, 0x00, 0x43, 0xa4, 0x02, 0x67, 0x18, 0x00, 0xb4, - 0x16, 0xf5, 0x61, 0x18, 0x80, 0x0d, 0xba, 0x01, 0xff, 0xe1, 0x6f, 0x18, - 0x00, 0x42, 0x22, 0x00, 0x72, 0x18, 0x40, 0xe5, 0x60, 0x18, 0x40, 0xe1, - 0x68, 0x18, 0x00, 0x42, 0x15, 0x06, 0x6e, 0x18, 0x40, 0xf9, 0x5f, 0x18, - 0x40, 0xe1, 0x6d, 0x18, 0x40, 0xe1, 0x6c, 0x18, 0x40, 0xe5, 0x25, 0x18, - 0x40, 0x05, 0x4b, 0xd0, 0x01, 0xff, 0x09, 0x9a, 0xb3, 0x1c, 0x42, 0xe1, - 0x07, 0x76, 0x18, 0x00, 0xe9, 0x73, 0x18, 0x00, 0x42, 0x1b, 0x02, 0x74, - 0x18, 0x00, 0x42, 0x71, 0x00, 0x75, 0x18, 0x00, 0x43, 0x44, 0xbe, 0x77, - 0x18, 0x40, 0x43, 0x50, 0x2a, 0xa8, 0x18, 0x00, 0xa3, 0x45, 0xa4, 0x37, - 0x43, 0xf3, 0x99, 0x9a, 0x18, 0x00, 0x43, 0x11, 0xf1, 0x9d, 0x18, 0x00, - 0x43, 0x80, 0x48, 0xaa, 0x18, 0x00, 0x43, 0x03, 0x47, 0x9b, 0x18, 0x00, - 0x43, 0x59, 0x20, 0xa2, 0x18, 0x00, 0xb4, 0x0d, 0xba, 0x01, 0xff, 0xe1, - 0xa5, 0x18, 0x00, 0x42, 0x22, 0x00, 0xa4, 0x18, 0x40, 0xe1, 0xa0, 0x18, - 0x00, 0x42, 0x12, 0x00, 0x9e, 0x18, 0x40, 0x43, 0x9e, 0x4a, 0x9f, 0x18, - 0x00, 0x42, 0x22, 0x00, 0xa1, 0x18, 0x40, 0xe1, 0x9c, 0x18, 0x00, 0x42, - 0x34, 0x22, 0xa3, 0x18, 0x40, 0xe1, 0x2f, 0x18, 0x00, 0x42, 0x22, 0x00, - 0x40, 0x18, 0x40, 0xe1, 0x3a, 0x18, 0x00, 0x42, 0x22, 0x00, 0x3b, 0x18, - 0x40, 0xe5, 0x27, 0x18, 0x40, 0xe1, 0x34, 0x18, 0x80, 0x04, 0xe9, 0x42, - 0x18, 0x40, 0x4e, 0x70, 0x19, 0x78, 0x18, 0x40, 0x08, 0x9b, 0xb3, 0x06, - 0x42, 0x1d, 0x01, 0x29, 0x18, 0x40, 0xe1, 0x87, 0x18, 0x80, 0x96, 0x01, - 0x46, 0xff, 0x9a, 0x85, 0x18, 0x00, 0x42, 0x37, 0x00, 0x8b, 0x18, 0x00, - 0xa4, 0x71, 0x05, 0x22, 0x00, 0x63, 0xe9, 0x88, 0x18, 0x80, 0x58, 0x42, - 0x1b, 0x02, 0x89, 0x18, 0x00, 0xae, 0x44, 0xb0, 0x38, 0x43, 0x59, 0x20, - 0x94, 0x18, 0x00, 0xb4, 0x19, 0x47, 0x4e, 0x6f, 0x83, 0x18, 0x00, 0x4b, - 0xa0, 0xa2, 0x81, 0x18, 0x00, 0xba, 0x01, 0xff, 0xe1, 0x96, 0x18, 0x00, - 0x42, 0x22, 0x00, 0x95, 0x18, 0x40, 0xe1, 0x90, 0x18, 0x00, 0x4b, 0xfa, - 0x9a, 0x86, 0x18, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x8c, 0x18, 0x00, 0x42, - 0x22, 0x00, 0x8d, 0x18, 0x40, 0xe1, 0x92, 0x18, 0x00, 0x42, 0x22, 0x00, - 0x93, 0x18, 0x40, 0x42, 0x24, 0x02, 0x8a, 0x18, 0x00, 0x42, 0xff, 0x04, - 0x8f, 0x18, 0x40, 0x4f, 0x46, 0x6f, 0x84, 0x18, 0x40, 0xf5, 0xa6, 0x18, - 0x00, 0x42, 0x34, 0x22, 0xa7, 0x18, 0x40, 0xe1, 0x91, 0x18, 0x80, 0x06, - 0x42, 0xa1, 0x10, 0x8e, 0x18, 0x40, 0x45, 0x72, 0xe3, 0xa9, 0x18, 0x00, - 0x44, 0xde, 0xed, 0x82, 0x18, 0x40, 0xe8, 0x97, 0x18, 0x00, 0x4b, 0x33, - 0x9e, 0x80, 0x18, 0x40, 0x55, 0x57, 0x07, 0x68, 0x16, 0x41, 0x48, 0x9d, - 0x45, 0x05, 0x18, 0x00, 0x17, 0xb1, 0x2f, 0x06, 0x48, 0x16, 0x16, 0x03, - 0x18, 0x40, 0x44, 0xca, 0x06, 0x0f, 0x18, 0x00, 0x43, 0xbf, 0x0a, 0x0b, - 0x18, 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x0d, 0x18, 0x00, 0x42, - 0x15, 0x02, 0x0c, 0x18, 0x40, 0x05, 0xc5, 0x06, 0x06, 0x59, 0xd8, 0x24, - 0x62, 0x16, 0x41, 0x45, 0xc3, 0x0a, 0x18, 0x18, 0x00, 0xa6, 0x2e, 0x44, - 0x46, 0x2a, 0x19, 0x18, 0x00, 0x43, 0xbf, 0x0a, 0x11, 0x18, 0x00, 0xb3, - 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x10, 0x18, 0x40, 0x44, 0x25, 0x01, - 0x13, 0x18, 0x00, 0x42, 0x15, 0x02, 0x12, 0x18, 0x40, 0x44, 0x27, 0x1d, - 0x17, 0x18, 0x00, 0x42, 0x60, 0x25, 0x16, 0x18, 0x40, 0x43, 0xa7, 0x05, - 0x15, 0x18, 0x00, 0x43, 0xcb, 0x06, 0x14, 0x18, 0x40, 0x43, 0x03, 0x12, - 0x04, 0x18, 0x00, 0x43, 0xea, 0x04, 0x02, 0x18, 0x40, 0x06, 0x50, 0x00, - 0x01, 0xff, 0x4f, 0x5d, 0x07, 0x64, 0x16, 0x01, 0x48, 0xfd, 0x04, 0x60, - 0x16, 0x41, 0x80, 0x06, 0x4b, 0x9f, 0x62, 0x11, 0xf9, 0x41, 0x43, 0x07, - 0x38, 0xb0, 0xf4, 0x01, 0x4a, 0x57, 0xb1, 0xb8, 0xf4, 0x41, 0xa5, 0xa5, - 0x14, 0xa9, 0x06, 0x4b, 0x06, 0xa2, 0x0a, 0x2a, 0x40, 0x80, 0xb6, 0x10, - 0x05, 0x2d, 0x0c, 0x01, 0xff, 0x59, 0xcb, 0x22, 0x5b, 0xab, 0x00, 0x07, - 0xc1, 0x05, 0x01, 0xff, 0xa1, 0x91, 0x10, 0xa2, 0xf8, 0x0f, 0xa3, 0xa6, - 0x0c, 0xa4, 0xe3, 0x0b, 0xa5, 0x8a, 0x0b, 0xa7, 0xee, 0x0a, 0xa8, 0xc4, - 0x0a, 0xac, 0x9e, 0x09, 0xad, 0xd1, 0x08, 0x4a, 0xa7, 0xac, 0xfe, 0x02, - 0x00, 0xb0, 0xbc, 0x08, 0xb2, 0xda, 0x07, 0xb3, 0x47, 0xb4, 0x39, 0xb5, - 0x1d, 0xb6, 0x0f, 0xb9, 0x01, 0xff, 0x57, 0x75, 0x2c, 0xeb, 0x02, 0x00, - 0x56, 0xb7, 0x33, 0xea, 0x02, 0x40, 0x4c, 0x7f, 0x0b, 0xc8, 0x02, 0x00, - 0x46, 0x87, 0xd4, 0xec, 0x02, 0x40, 0x4a, 0xe9, 0xab, 0xed, 0x02, 0x00, - 0x02, 0x20, 0x00, 0x04, 0xf3, 0x70, 0xa7, 0x40, 0x49, 0xe1, 0x01, 0xc4, - 0x02, 0x00, 0x44, 0x25, 0x38, 0xd4, 0x02, 0x40, 0x4f, 0xba, 0x3a, 0xd0, - 0x02, 0x00, 0x4b, 0xd9, 0x09, 0xbb, 0x02, 0x40, 0xa8, 0x82, 0x07, 0x05, - 0x0d, 0x07, 0x21, 0x0a, 0xd1, 0xaf, 0x11, 0x0b, 0x45, 0x06, 0x01, 0xff, - 0x55, 0xb4, 0x3a, 0x82, 0x07, 0x01, 0x50, 0xb9, 0x3a, 0x81, 0x07, 0x41, - 0x49, 0xeb, 0x41, 0x20, 0xa7, 0x00, 0x48, 0xc3, 0xb2, 0x21, 0xa7, 0x40, - 0xe1, 0x43, 0x1d, 0x80, 0xc7, 0x06, 0xe2, 0x47, 0x1d, 0x80, 0xa9, 0x06, - 0xe3, 0x9c, 0x1d, 0x80, 0xb7, 0x05, 0xe4, 0x48, 0x1d, 0x80, 0xe7, 0x04, - 0xe5, 0x49, 0x1d, 0x80, 0xc9, 0x04, 0xe6, 0xa0, 0x1d, 0x80, 0xbd, 0x04, - 0xe7, 0x4d, 0x1d, 0x80, 0x9a, 0x04, 0xe8, 0xb0, 0x02, 0x80, 0xf7, 0x03, - 0xa9, 0xe8, 0x03, 0xea, 0xb2, 0x02, 0x80, 0xdc, 0x03, 0xeb, 0x4f, 0x1d, - 0x00, 0xec, 0xe1, 0x02, 0x80, 0x8a, 0x03, 0xed, 0x50, 0x1d, 0x80, 0xfe, - 0x02, 0x07, 0x9d, 0x04, 0xed, 0x02, 0xef, 0x52, 0x1d, 0x80, 0xd4, 0x02, - 0xf0, 0x56, 0x1d, 0x80, 0xc8, 0x02, 0xf1, 0xa5, 0x07, 0x01, 0xf2, 0xb3, - 0x02, 0x80, 0x93, 0x02, 0xf3, 0xe2, 0x02, 0x80, 0xe9, 0x01, 0xf4, 0x57, - 0x1d, 0x80, 0x51, 0xf5, 0x58, 0x1d, 0x80, 0x38, 0xf6, 0x5b, 0x1d, 0x80, - 0x22, 0xf7, 0xb7, 0x02, 0x00, 0xf8, 0xe3, 0x02, 0x00, 0xf9, 0xb8, 0x02, - 0x00, 0xfa, 0xbb, 0x1d, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, - 0x23, 0x0b, 0xbd, 0x1d, 0x00, 0x4e, 0x53, 0x0e, 0xbc, 0x1d, 0x40, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x0e, 0xb9, 0x1d, 0x00, 0x4a, 0xfb, - 0xad, 0xb0, 0x07, 0x41, 0x80, 0x06, 0x46, 0x63, 0x15, 0xb7, 0x1d, 0x40, - 0x43, 0x16, 0x00, 0xb6, 0x1d, 0x00, 0x4e, 0x5a, 0x7d, 0x5f, 0xab, 0x40, - 0x06, 0x50, 0x00, 0x82, 0x01, 0x53, 0x64, 0x47, 0xab, 0x07, 0x01, 0x4b, - 0xd1, 0x99, 0xae, 0x07, 0x01, 0x44, 0xf2, 0x93, 0xbf, 0x1d, 0x00, 0x49, - 0xea, 0xba, 0x54, 0x1d, 0x00, 0x49, 0xa3, 0xbc, 0xac, 0x07, 0x81, 0x5d, - 0x06, 0x46, 0x07, 0x01, 0xff, 0xe1, 0x44, 0x1d, 0x80, 0x49, 0xe8, 0xa3, - 0x1d, 0x00, 0xe9, 0x4e, 0x1d, 0x00, 0xed, 0x5a, 0x1d, 0x80, 0x36, 0x46, - 0x7d, 0x28, 0x4c, 0x1d, 0x00, 0xf2, 0xb4, 0x02, 0x80, 0x13, 0xf6, 0xba, - 0x1d, 0x00, 0xf7, 0x69, 0xab, 0x00, 0xf9, 0xa0, 0x07, 0xc1, 0x00, 0x4a, - 0x19, 0xa4, 0xa1, 0x07, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x5d, - 0x0e, 0xb5, 0x02, 0x00, 0x48, 0x06, 0x74, 0xa6, 0x07, 0xc1, 0x00, 0x53, - 0x0e, 0x46, 0xa7, 0x07, 0x41, 0x4e, 0x00, 0x74, 0xad, 0x1d, 0x40, 0xe5, - 0x46, 0x1d, 0x00, 0x44, 0x2f, 0xe1, 0x9b, 0x1d, 0x40, 0x54, 0x4d, 0x0e, - 0xad, 0x07, 0x41, 0x4c, 0xaa, 0x55, 0xb5, 0x1d, 0x00, 0x4e, 0x53, 0x0e, - 0xaf, 0x07, 0x41, 0x06, 0x50, 0x00, 0x14, 0xa3, 0x06, 0x49, 0xa5, 0xb7, - 0x59, 0x1d, 0x40, 0x43, 0x55, 0x7a, 0x4a, 0x1d, 0x00, 0x46, 0x04, 0xc8, - 0xa2, 0x1d, 0x40, 0x44, 0x23, 0x0b, 0xba, 0x07, 0x01, 0x44, 0x5d, 0x0e, - 0xb3, 0x1d, 0x40, 0x06, 0x50, 0x00, 0x1b, 0x48, 0xc2, 0xc0, 0x91, 0x07, - 0x01, 0x08, 0x8f, 0x14, 0x01, 0xff, 0xe5, 0x8e, 0x07, 0x01, 0x4c, 0x2d, - 0x28, 0xe4, 0x02, 0x00, 0x46, 0x7d, 0x28, 0x9f, 0x1d, 0x40, 0x48, 0x97, - 0x70, 0xa9, 0x07, 0x01, 0x44, 0x23, 0x17, 0xa8, 0x07, 0x41, 0x42, 0x49, - 0x00, 0xb2, 0x1d, 0x40, 0x4c, 0x39, 0x28, 0xa2, 0x07, 0x01, 0x04, 0xcc, - 0x04, 0x01, 0xff, 0xe5, 0x4b, 0x1d, 0x00, 0xef, 0x53, 0x1d, 0x40, 0x49, - 0x68, 0x56, 0xae, 0x1d, 0x00, 0x4e, 0x53, 0x0e, 0xaf, 0x1d, 0x40, 0x4a, - 0x1f, 0x24, 0xac, 0x1d, 0x40, 0x06, 0x50, 0x00, 0x1f, 0x43, 0xe4, 0xf0, - 0x9e, 0x07, 0x81, 0x12, 0x4a, 0x5f, 0xa9, 0xf9, 0xa7, 0x00, 0x49, 0xa3, - 0xbc, 0x99, 0x07, 0x01, 0x49, 0x34, 0xbf, 0x9a, 0x07, 0x41, 0x54, 0x4d, - 0x0e, 0x9f, 0x07, 0x41, 0x44, 0x1f, 0xa4, 0x9b, 0x07, 0x01, 0x4f, 0x2a, - 0x6d, 0x5d, 0xab, 0x00, 0x4c, 0xa6, 0x22, 0x5e, 0xab, 0x00, 0x4c, 0xaa, - 0x55, 0xaa, 0x1d, 0x00, 0x4e, 0x53, 0x0e, 0xa9, 0x1d, 0xc0, 0x00, 0x49, - 0xcf, 0xb1, 0x9d, 0x07, 0x41, 0x52, 0x7a, 0x4e, 0xa8, 0x1d, 0x40, 0x4c, - 0x39, 0x28, 0xa4, 0x1d, 0x00, 0x43, 0xf0, 0x04, 0xa5, 0x1d, 0x40, 0x06, - 0x50, 0x00, 0x0d, 0x43, 0xfd, 0x09, 0x5c, 0xab, 0xc0, 0x00, 0x4a, 0x1f, - 0x24, 0x97, 0x07, 0x41, 0x44, 0x5d, 0x0e, 0xb1, 0x02, 0x00, 0x46, 0x27, - 0x05, 0x95, 0x07, 0x41, 0x4a, 0x1f, 0x24, 0x93, 0x07, 0x01, 0x44, 0x5e, - 0x20, 0xe0, 0x02, 0x00, 0x05, 0xb8, 0x2d, 0x01, 0xff, 0x45, 0xd2, 0x56, - 0x5e, 0x1d, 0x00, 0x43, 0xb1, 0x1f, 0x60, 0x1d, 0x40, 0x4b, 0x9a, 0x99, - 0x90, 0x07, 0x41, 0x42, 0x1d, 0x01, 0x51, 0x1d, 0x00, 0x42, 0xa4, 0x02, - 0xb4, 0x1d, 0x00, 0x42, 0x53, 0x00, 0x9e, 0x1d, 0x00, 0x42, 0xb3, 0x27, - 0xbe, 0x1d, 0x40, 0x06, 0x50, 0x00, 0x33, 0xa5, 0x25, 0x54, 0xa3, 0x43, - 0xa1, 0x1d, 0x80, 0x18, 0x49, 0x34, 0xbf, 0x87, 0x07, 0xc1, 0x00, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x44, 0x23, 0x0b, 0x89, 0x07, 0x01, 0x4e, 0x53, - 0x0e, 0x88, 0x07, 0x41, 0x49, 0x38, 0x23, 0x98, 0x07, 0x41, 0x43, 0xef, - 0x94, 0x5f, 0x1d, 0x00, 0x4a, 0xbb, 0xb1, 0x8a, 0x07, 0x41, 0x44, 0x5d, - 0x0e, 0x8c, 0x07, 0x81, 0x06, 0x44, 0x23, 0x17, 0x8b, 0x07, 0x41, 0x49, - 0xe1, 0xb1, 0x8d, 0x07, 0x41, 0x4a, 0x6d, 0x47, 0x9d, 0x1d, 0x00, 0x07, - 0xba, 0x05, 0x17, 0x42, 0x49, 0x00, 0x61, 0x1d, 0x00, 0x06, 0xd9, 0x1a, - 0x01, 0xff, 0x45, 0xe8, 0xac, 0xa4, 0x07, 0x01, 0x4f, 0xdb, 0x70, 0x8f, - 0x07, 0x41, 0x42, 0x31, 0x12, 0x80, 0x07, 0x01, 0xe2, 0x84, 0x07, 0x01, - 0xe7, 0x92, 0x07, 0x81, 0x36, 0xe8, 0x96, 0x07, 0x01, 0xe9, 0xa6, 0x1d, - 0x80, 0x21, 0xec, 0xab, 0x1d, 0x80, 0x16, 0xee, 0xb0, 0x1d, 0x00, 0x42, - 0x17, 0x50, 0xa3, 0x07, 0x01, 0xf2, 0xaa, 0x07, 0x01, 0xf5, 0xb8, 0x1d, - 0x00, 0xf9, 0xb2, 0x07, 0x41, 0x4a, 0x19, 0xa4, 0x9c, 0x07, 0x41, 0x4c, - 0x39, 0x28, 0xa7, 0x1d, 0x00, 0x49, 0x63, 0xba, 0xb6, 0x02, 0x40, 0x4a, - 0x1f, 0x24, 0x94, 0x07, 0x41, 0x4a, 0x1f, 0x24, 0x85, 0x07, 0x01, 0x47, - 0x44, 0xcc, 0xb1, 0x1d, 0x00, 0x43, 0x45, 0x0f, 0x5d, 0x1d, 0x00, 0x4c, - 0xbd, 0x91, 0x55, 0x1d, 0x40, 0xe5, 0x83, 0x07, 0x01, 0x42, 0x9e, 0x01, - 0x5c, 0x1d, 0x00, 0x44, 0x2f, 0xe1, 0x45, 0x1d, 0x40, 0x43, 0x22, 0x78, - 0xfd, 0x02, 0x00, 0x4f, 0xdc, 0x6f, 0x8a, 0xa7, 0x40, 0x06, 0x83, 0x10, - 0x3d, 0xa5, 0x1d, 0x4a, 0x05, 0xa9, 0xde, 0x02, 0x00, 0x05, 0xc9, 0x00, - 0x01, 0xff, 0x49, 0xe1, 0x01, 0xc3, 0x02, 0x00, 0x49, 0xaf, 0x13, 0xbe, - 0x02, 0x00, 0x44, 0x25, 0x38, 0x6b, 0xab, 0x40, 0x61, 0x40, 0x0e, 0xb9, - 0x07, 0x01, 0x07, 0x90, 0x14, 0x01, 0xff, 0x45, 0xe8, 0x04, 0xbd, 0x02, - 0x00, 0x4c, 0x2d, 0x28, 0xc1, 0x02, 0xc0, 0x00, 0x4c, 0x39, 0x28, 0xb4, - 0x07, 0x41, 0x45, 0xc4, 0x3a, 0xf8, 0x02, 0x00, 0x4a, 0xbf, 0x40, 0x1c, - 0xa7, 0x00, 0x50, 0xad, 0x00, 0x1d, 0xa7, 0x00, 0x59, 0xde, 0x23, 0x1e, - 0xa7, 0x00, 0x48, 0xe0, 0x54, 0x1b, 0xa7, 0x40, 0x48, 0x46, 0x70, 0xd6, - 0x02, 0x00, 0x44, 0x64, 0x1a, 0xb9, 0x02, 0x40, 0x45, 0x05, 0x6f, 0xc9, - 0x02, 0x00, 0xa9, 0x01, 0xff, 0xa4, 0x06, 0x48, 0x0d, 0x6d, 0xd7, 0x02, - 0x40, 0x80, 0x1b, 0x04, 0x80, 0x02, 0x01, 0xff, 0x07, 0x3b, 0x01, 0x06, - 0x4c, 0x8d, 0x22, 0xf4, 0x02, 0x40, 0x4c, 0x3d, 0x8a, 0xf6, 0x02, 0x00, - 0x4c, 0x8d, 0x22, 0xf5, 0x02, 0x40, 0x07, 0x0e, 0x1f, 0x0c, 0x52, 0x22, - 0x52, 0x14, 0xa7, 0x00, 0x48, 0x2c, 0x52, 0xe7, 0x02, 0x40, 0x52, 0x22, - 0x52, 0x0f, 0xa7, 0x00, 0x48, 0x2c, 0x52, 0x0a, 0xa7, 0x40, 0x4c, 0x45, - 0x83, 0xb7, 0x07, 0x01, 0x04, 0xc4, 0x00, 0x86, 0x01, 0x02, 0xd1, 0x00, - 0x01, 0xff, 0x80, 0x06, 0x55, 0x36, 0x3a, 0x1a, 0xa7, 0x40, 0x4c, 0x3d, - 0x8a, 0xcf, 0x02, 0x00, 0x51, 0xa4, 0x04, 0x88, 0xa7, 0x00, 0x02, 0x3b, - 0x01, 0x53, 0x4c, 0x8d, 0x22, 0xce, 0x02, 0x00, 0x59, 0xde, 0x23, 0x1f, - 0xa7, 0x00, 0x04, 0xc3, 0x00, 0x30, 0x46, 0x04, 0x6f, 0xcd, 0x02, 0x00, - 0x02, 0x0d, 0x00, 0x1a, 0xb4, 0x0c, 0x4c, 0xe0, 0x54, 0xf0, 0x02, 0x00, - 0x4d, 0x7e, 0x0b, 0xcc, 0x02, 0x40, 0x44, 0xae, 0x22, 0xf7, 0x02, 0x00, - 0x47, 0x2d, 0x52, 0xe8, 0x02, 0x40, 0x4d, 0x68, 0x31, 0xf2, 0x02, 0x00, - 0x42, 0x1d, 0x01, 0xf3, 0x02, 0x40, 0x46, 0xcd, 0x00, 0xff, 0x02, 0x80, - 0x06, 0x4e, 0x26, 0x52, 0x15, 0xa7, 0x40, 0x44, 0xe6, 0x01, 0xf1, 0x02, - 0x40, 0x05, 0x10, 0x1f, 0x06, 0x4c, 0xc1, 0x40, 0xef, 0x02, 0x40, 0x52, - 0x22, 0x52, 0x10, 0xa7, 0x00, 0x48, 0x2c, 0x52, 0x0b, 0xa7, 0x40, 0x49, - 0xe1, 0x01, 0xc2, 0x02, 0x00, 0x49, 0xaf, 0x13, 0xbf, 0x02, 0x00, 0x44, - 0x25, 0x38, 0x6a, 0xab, 0x40, 0x54, 0xb5, 0x3a, 0xd1, 0x02, 0x00, 0x04, - 0xfa, 0x0a, 0x01, 0xff, 0x07, 0x0e, 0x1f, 0x0c, 0x52, 0x22, 0x52, 0x13, - 0xa7, 0x00, 0x48, 0x2c, 0x52, 0xe6, 0x02, 0x40, 0x52, 0x22, 0x52, 0x0e, - 0xa7, 0x00, 0x48, 0x2c, 0x52, 0x09, 0xa7, 0x40, 0x4b, 0xb0, 0x99, 0xfc, - 0x10, 0x00, 0x4b, 0x2e, 0x28, 0xc0, 0x02, 0x80, 0x06, 0x4b, 0x8e, 0x22, - 0xcb, 0x02, 0x40, 0x4c, 0x39, 0x28, 0xb3, 0x07, 0x41, 0x03, 0x1b, 0x00, - 0x46, 0x05, 0x44, 0xe9, 0x01, 0xff, 0x05, 0xf9, 0x0a, 0x21, 0x04, 0xdd, - 0x04, 0x01, 0xff, 0x07, 0x0e, 0x1f, 0x0c, 0x52, 0x22, 0x52, 0x16, 0xa7, - 0x00, 0x48, 0x2c, 0x52, 0xe9, 0x02, 0x40, 0x52, 0x22, 0x52, 0x11, 0xa7, - 0x00, 0x48, 0x2c, 0x52, 0x0c, 0xa7, 0x40, 0x07, 0x0e, 0x1f, 0x0c, 0x52, - 0x22, 0x52, 0x12, 0xa7, 0x00, 0x48, 0x2c, 0x52, 0xe5, 0x02, 0x40, 0x52, - 0x22, 0x52, 0x0d, 0xa7, 0x00, 0x48, 0x2c, 0x52, 0x08, 0xa7, 0x40, 0x49, - 0xeb, 0x41, 0xfa, 0x02, 0x00, 0x48, 0xc3, 0xb2, 0xfc, 0x02, 0x40, 0x4b, - 0x1e, 0x8c, 0xb6, 0x07, 0x01, 0xaf, 0x01, 0xff, 0x02, 0xc6, 0x00, 0x21, - 0x05, 0x3d, 0x01, 0x11, 0x03, 0x51, 0x14, 0x01, 0xff, 0x49, 0xe1, 0x01, - 0xc5, 0x02, 0x00, 0x44, 0x25, 0x38, 0xd5, 0x02, 0x40, 0x4a, 0x91, 0x35, - 0xee, 0x02, 0x00, 0x45, 0x63, 0x1a, 0xba, 0x02, 0x40, 0x4e, 0x0b, 0x00, - 0x19, 0xa7, 0x00, 0x45, 0xf9, 0x0d, 0x18, 0xa7, 0x00, 0x4c, 0x32, 0x00, - 0x17, 0xa7, 0x40, 0x07, 0xba, 0x05, 0xcc, 0x02, 0x07, 0x40, 0x67, 0xbb, - 0x02, 0x0d, 0x26, 0x82, 0xfd, 0x01, 0x50, 0xa5, 0x04, 0xc6, 0x02, 0x00, - 0x44, 0x02, 0x12, 0x89, 0xa7, 0x00, 0x4b, 0x2d, 0xa0, 0xdf, 0x02, 0x00, - 0x08, 0x3a, 0xca, 0x01, 0xff, 0x42, 0x92, 0x01, 0x78, 0x1d, 0x00, 0x49, - 0x1e, 0xb7, 0x9c, 0xa6, 0x00, 0xb3, 0x01, 0xff, 0x05, 0x0d, 0x07, 0x06, - 0x48, 0xd5, 0x8c, 0x9d, 0xa6, 0x40, 0xe1, 0x30, 0xe0, 0x01, 0xa2, 0xb6, - 0x01, 0x43, 0x1e, 0x14, 0x45, 0xe0, 0x01, 0xa4, 0xa3, 0x01, 0xe5, 0x48, - 0xe0, 0x81, 0x82, 0x01, 0x43, 0xdd, 0x50, 0x33, 0xe0, 0x01, 0x42, 0x22, - 0x00, 0x43, 0xe0, 0x01, 0xe9, 0x38, 0xe0, 0x81, 0x6d, 0x42, 0xde, 0x1f, - 0x4d, 0xe0, 0x01, 0x42, 0x1b, 0x02, 0x39, 0xe0, 0x01, 0xef, 0x3c, 0xe0, - 0x01, 0xb0, 0x51, 0xb3, 0x36, 0xb4, 0x2a, 0xf5, 0x41, 0xe0, 0x01, 0x42, - 0x32, 0x00, 0x32, 0xe0, 0x01, 0xb9, 0x0d, 0xba, 0x01, 0xff, 0xe5, 0x37, - 0xe0, 0x01, 0x42, 0xb0, 0x01, 0x36, 0xe0, 0x41, 0x43, 0xfb, 0x2a, 0x47, - 0xe0, 0x81, 0x04, 0xf5, 0x49, 0xe0, 0x41, 0x4e, 0xf2, 0x73, 0x6c, 0xe0, - 0x41, 0xe5, 0x40, 0xe0, 0x01, 0x42, 0x1b, 0x03, 0x44, 0xe0, 0x41, 0x44, - 0x54, 0x7a, 0x4b, 0xe0, 0x01, 0x42, 0x22, 0x00, 0x46, 0xe0, 0x01, 0x49, - 0x72, 0xbd, 0x4f, 0xe0, 0xc1, 0x00, 0x4c, 0x39, 0x28, 0x6d, 0xe0, 0x41, - 0x47, 0x23, 0xc7, 0x50, 0xe0, 0x01, 0xe5, 0x3d, 0xe0, 0x41, 0xe5, 0x35, - 0xe0, 0x41, 0xe6, 0x42, 0xe0, 0x01, 0xec, 0x3a, 0xe0, 0x01, 0xed, 0x3b, - 0xe0, 0x01, 0xf2, 0x3e, 0xe0, 0x01, 0xf3, 0x3f, 0xe0, 0xc1, 0x00, 0x4f, - 0x6b, 0x68, 0x6b, 0xe0, 0x41, 0xe5, 0x34, 0xe0, 0x01, 0x43, 0x9b, 0xf1, - 0x4a, 0xe0, 0x41, 0x47, 0x44, 0xcc, 0x4e, 0xe0, 0x01, 0xe5, 0x31, 0xe0, - 0x01, 0x57, 0x59, 0x08, 0x4c, 0xe0, 0x41, 0x04, 0xbb, 0x15, 0x1d, 0x03, - 0xb6, 0x05, 0x01, 0xff, 0x44, 0x45, 0x2f, 0x00, 0xa7, 0x00, 0x42, 0x7c, - 0x00, 0x04, 0xa7, 0x00, 0x42, 0x3d, 0x00, 0x06, 0xa7, 0x00, 0x45, 0xaf, - 0xe7, 0x02, 0xa7, 0x40, 0x44, 0x45, 0x2f, 0x01, 0xa7, 0x00, 0x42, 0x7c, - 0x00, 0x05, 0xa7, 0x00, 0x42, 0x3d, 0x00, 0x07, 0xa7, 0x00, 0x45, 0xaf, - 0xe7, 0x03, 0xa7, 0x40, 0x4e, 0xaa, 0x13, 0xd3, 0x02, 0x00, 0x4f, 0xea, - 0x70, 0xd2, 0x02, 0x40, 0xe1, 0x2c, 0x1d, 0x80, 0x75, 0xe2, 0x2e, 0x1d, - 0x80, 0x6a, 0xe3, 0xf2, 0xa7, 0x00, 0xe4, 0x30, 0x1d, 0x00, 0xe5, 0x31, - 0x1d, 0x00, 0xe6, 0xf3, 0xa7, 0x00, 0xe7, 0x33, 0x1d, 0x00, 0xe8, 0x34, - 0x1d, 0x80, 0x4b, 0xe9, 0x35, 0x1d, 0x00, 0xea, 0x36, 0x1d, 0x00, 0xeb, - 0x37, 0x1d, 0x00, 0xec, 0x38, 0x1d, 0x00, 0xed, 0x39, 0x1d, 0x00, 0xee, - 0x3a, 0x1d, 0x00, 0xef, 0x3c, 0x1d, 0x80, 0x2a, 0xf0, 0x3e, 0x1d, 0x00, - 0xf1, 0xf4, 0xa7, 0x00, 0xf2, 0x3f, 0x1d, 0x80, 0x10, 0xf4, 0x40, 0x1d, - 0x00, 0xf5, 0x41, 0x1d, 0x00, 0xf6, 0x7d, 0x2c, 0x00, 0xf7, 0x42, 0x1d, - 0x40, 0x08, 0x8f, 0x14, 0x01, 0xff, 0xe5, 0x32, 0x1d, 0x00, 0xee, 0x3b, - 0x1d, 0x40, 0xf5, 0x3d, 0x1d, 0x40, 0x4c, 0x39, 0x28, 0xf8, 0xa7, 0x40, - 0x47, 0x3d, 0xcc, 0x2f, 0x1d, 0x40, 0xe5, 0x2d, 0x1d, 0x40, 0x05, 0xb9, - 0x3e, 0x06, 0x4d, 0x74, 0x82, 0xb5, 0x07, 0x41, 0x49, 0xeb, 0x41, 0xf9, - 0x02, 0x00, 0x48, 0xc3, 0xb2, 0xfb, 0x02, 0x40, 0x4b, 0x3e, 0x8a, 0xca, - 0x02, 0x00, 0x4d, 0xb9, 0x83, 0xb8, 0x07, 0x01, 0x49, 0x92, 0x35, 0xbc, - 0x02, 0x40, 0x51, 0x93, 0x56, 0x43, 0x16, 0x01, 0xa4, 0x89, 0x03, 0x07, - 0xc1, 0x05, 0x6d, 0x05, 0x2f, 0x03, 0x44, 0x0b, 0xd1, 0x75, 0x01, 0xff, - 0xa1, 0x31, 0xe5, 0x39, 0x16, 0x01, 0xe9, 0x31, 0x16, 0x81, 0x24, 0xef, - 0x3b, 0x16, 0x01, 0xf5, 0x33, 0x16, 0x81, 0x17, 0x08, 0x9b, 0xbe, 0x01, - 0xff, 0xec, 0x37, 0x16, 0x81, 0x09, 0xf2, 0x35, 0x16, 0xc1, 0x00, 0xf2, - 0x36, 0x16, 0x41, 0xec, 0x38, 0x16, 0x41, 0xf5, 0x34, 0x16, 0x41, 0xe9, - 0x32, 0x16, 0x41, 0xe1, 0x30, 0x16, 0x01, 0xe9, 0x3a, 0x16, 0x01, 0xf5, - 0x3c, 0x16, 0x41, 0xa1, 0x17, 0x44, 0x26, 0xed, 0x44, 0x16, 0x01, 0x02, - 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, 0x3f, 0x16, 0x01, 0x45, 0xa3, - 0x4a, 0x3e, 0x16, 0x41, 0x47, 0xd1, 0x15, 0x3d, 0x16, 0x01, 0x4a, 0xab, - 0xad, 0x40, 0x16, 0x41, 0xe1, 0x00, 0x16, 0x81, 0x86, 0x02, 0xa2, 0xf9, - 0x01, 0xa3, 0xec, 0x01, 0xa4, 0xd3, 0x01, 0xe5, 0x0a, 0x16, 0x01, 0xa7, - 0xc2, 0x01, 0x42, 0x22, 0x00, 0x2e, 0x16, 0x01, 0xe9, 0x02, 0x16, 0x81, - 0xb2, 0x01, 0xaa, 0xa5, 0x01, 0xab, 0x98, 0x01, 0xac, 0x8b, 0x01, 0x42, - 0x6c, 0x00, 0x26, 0x16, 0x01, 0xae, 0x6d, 0xef, 0x0c, 0x16, 0x01, 0xb0, - 0x5d, 0x42, 0x71, 0x00, 0x28, 0x16, 0x01, 0xb3, 0x45, 0xb4, 0x2c, 0xf5, - 0x04, 0x16, 0x81, 0x23, 0xb6, 0x06, 0x42, 0x34, 0x22, 0x27, 0x16, 0x41, - 0xe1, 0x2a, 0x16, 0x01, 0x07, 0x9c, 0xbe, 0x01, 0xff, 0xec, 0x08, 0x16, - 0x81, 0x09, 0xf2, 0x06, 0x16, 0xc1, 0x00, 0xf2, 0x07, 0x16, 0x41, 0xec, - 0x09, 0x16, 0x41, 0xf5, 0x05, 0x16, 0x41, 0xe1, 0x1d, 0x16, 0x01, 0x42, - 0x22, 0x00, 0x1e, 0x16, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x18, 0x16, 0x01, - 0x42, 0x22, 0x00, 0x19, 0x16, 0x41, 0xe1, 0x2d, 0x16, 0x01, 0x42, 0x22, - 0x00, 0x2b, 0x16, 0x01, 0x42, 0x15, 0x06, 0x2c, 0x16, 0x41, 0xe1, 0x22, - 0x16, 0x01, 0x42, 0x22, 0x00, 0x23, 0x16, 0x41, 0xe1, 0x21, 0x16, 0x01, - 0x42, 0x24, 0x02, 0x12, 0x16, 0x01, 0x42, 0xff, 0x04, 0x1c, 0x16, 0x01, - 0x42, 0x34, 0x22, 0x17, 0x16, 0x41, 0xe1, 0x29, 0x16, 0x01, 0x42, 0x74, - 0x00, 0x2f, 0x16, 0x41, 0xe1, 0x0e, 0x16, 0x01, 0x42, 0x22, 0x00, 0x0f, - 0x16, 0x41, 0xe1, 0x15, 0x16, 0x01, 0x42, 0x22, 0x00, 0x16, 0x16, 0x41, - 0xe9, 0x03, 0x16, 0x41, 0xe1, 0x10, 0x16, 0x01, 0x42, 0x22, 0x00, 0x11, - 0x16, 0x41, 0xe1, 0x1f, 0x16, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x20, - 0x16, 0x41, 0xe1, 0x1a, 0x16, 0x01, 0x42, 0x22, 0x00, 0x1b, 0x16, 0x41, - 0xe1, 0x13, 0x16, 0x01, 0x42, 0x22, 0x00, 0x14, 0x16, 0x41, 0xe1, 0x24, - 0x16, 0x01, 0x42, 0x22, 0x00, 0x25, 0x16, 0x41, 0xe1, 0x01, 0x16, 0x01, - 0xe9, 0x0b, 0x16, 0x01, 0xf5, 0x0d, 0x16, 0x41, 0x44, 0xd1, 0x1f, 0x41, - 0x16, 0x01, 0x05, 0xc5, 0x06, 0x06, 0x4b, 0xd8, 0x9e, 0x42, 0x16, 0x41, - 0x45, 0xc3, 0x0a, 0x58, 0x16, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x59, - 0x16, 0x01, 0x43, 0xbf, 0x0a, 0x51, 0x16, 0x01, 0xb3, 0x14, 0xb4, 0x06, - 0x44, 0xa1, 0x1d, 0x50, 0x16, 0x41, 0x44, 0x25, 0x01, 0x53, 0x16, 0x01, - 0x42, 0x15, 0x02, 0x52, 0x16, 0x41, 0x44, 0x27, 0x1d, 0x57, 0x16, 0x01, - 0x42, 0x60, 0x25, 0x56, 0x16, 0x41, 0x43, 0xa7, 0x05, 0x55, 0x16, 0x01, - 0x43, 0xcb, 0x06, 0x54, 0x16, 0x41, 0x42, 0xf0, 0x07, 0xa7, 0x22, 0x00, - 0x4d, 0x43, 0x86, 0x3b, 0xf9, 0x41, 0x80, 0x01, 0xff, 0x43, 0xa6, 0x7e, - 0xf4, 0xf4, 0x01, 0x5d, 0x75, 0x16, 0xf2, 0xf4, 0x41, 0x03, 0x95, 0x79, - 0xe2, 0x01, 0x02, 0x4a, 0x06, 0xb4, 0x01, 0xa4, 0x84, 0x01, 0xac, 0x66, - 0xae, 0x0d, 0x44, 0x93, 0x51, 0x9e, 0xfa, 0xc1, 0x00, 0x45, 0x45, 0x1c, - 0xa9, 0xfa, 0x41, 0xa9, 0x43, 0x02, 0xc4, 0x02, 0x04, 0xf9, 0xff, 0x29, - 0x40, 0x80, 0x06, 0x4d, 0xb2, 0x7e, 0x13, 0x22, 0x40, 0x44, 0x2f, 0x03, - 0x12, 0x22, 0x80, 0x06, 0x45, 0xad, 0x22, 0x42, 0x22, 0x40, 0x80, 0x01, - 0xff, 0x4b, 0x29, 0x1e, 0x3a, 0x2a, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x4b, 0x70, 0x5d, 0x29, 0x2a, 0x00, 0x49, 0x50, 0x12, 0x2a, 0x2a, 0x00, - 0x4c, 0x19, 0x8d, 0x2b, 0x2a, 0x00, 0x4b, 0xf6, 0x9f, 0x2c, 0x2a, 0x40, - 0x43, 0xf5, 0x26, 0x90, 0xf6, 0x01, 0x44, 0xc0, 0x62, 0xbd, 0xf4, 0x01, - 0x44, 0x58, 0xde, 0xd5, 0xf5, 0x41, 0x06, 0xe7, 0x5a, 0x0c, 0x46, 0x8a, - 0xda, 0x0c, 0xf3, 0x01, 0x46, 0xee, 0x4a, 0xa5, 0x20, 0x40, 0x46, 0x6c, - 0xc0, 0x96, 0xfa, 0x01, 0x45, 0xaa, 0x6f, 0x96, 0xf3, 0x41, 0x04, 0x80, - 0x02, 0x06, 0x58, 0x35, 0x29, 0xef, 0x22, 0x40, 0x43, 0xd4, 0x09, 0xb7, - 0x00, 0x00, 0x56, 0x67, 0x34, 0xe6, 0xfb, 0x01, 0x57, 0xf6, 0x2f, 0xe7, - 0xfb, 0x01, 0x06, 0x6e, 0x87, 0x01, 0xff, 0x48, 0x6a, 0xc4, 0x0c, 0xcc, - 0x01, 0x5a, 0x00, 0x22, 0xc2, 0xfb, 0x41, 0x80, 0x1b, 0xaf, 0x01, 0xff, - 0x45, 0x2e, 0x03, 0xb5, 0x00, 0x00, 0x42, 0x8c, 0x05, 0xa0, 0xf9, 0x01, - 0x45, 0x4a, 0x3c, 0xa4, 0xf3, 0x01, 0x45, 0xd5, 0xc8, 0x2c, 0xf5, 0x41, - 0x4b, 0xb3, 0x98, 0x49, 0x24, 0x00, 0x4c, 0x75, 0x91, 0x48, 0x24, 0x40, - 0x07, 0xc1, 0x05, 0xbc, 0x02, 0x05, 0x2f, 0x03, 0x9a, 0x02, 0x05, 0x83, - 0x2c, 0xfd, 0x01, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xe1, 0x54, 0x6f, 0x81, - 0xce, 0x01, 0xe5, 0x5d, 0x6f, 0x81, 0xae, 0x01, 0xe9, 0x61, 0x6f, 0x81, - 0x7a, 0xee, 0x7d, 0x6f, 0x81, 0x71, 0xef, 0x59, 0x6f, 0x81, 0x56, 0x4a, - 0x4b, 0xae, 0x78, 0x6f, 0x81, 0x4b, 0xf5, 0x6a, 0x6f, 0x81, 0x1e, 0x42, - 0xd4, 0xf1, 0x83, 0x6f, 0x01, 0xf7, 0x5c, 0x6f, 0x81, 0x0f, 0xf9, 0x71, - 0x6f, 0xc1, 0x00, 0xe9, 0x72, 0x6f, 0x01, 0x42, 0x3e, 0x00, 0x80, 0x6f, - 0x41, 0xef, 0x5b, 0x6f, 0x41, 0xe1, 0x6b, 0x6f, 0x81, 0x1a, 0x42, 0xc3, - 0x0a, 0x6f, 0x6f, 0x01, 0xe9, 0x87, 0x6f, 0x01, 0x42, 0x1d, 0x01, 0x70, - 0x6f, 0x01, 0x42, 0x55, 0x18, 0x7f, 0x6f, 0x01, 0xf5, 0x6e, 0x6f, 0x41, - 0xee, 0x6c, 0x6f, 0xc1, 0x00, 0xe7, 0x6d, 0x6f, 0x41, 0xf2, 0x76, 0x6f, - 0x41, 0xa5, 0x0c, 0xe7, 0x81, 0x6f, 0x01, 0xef, 0x5a, 0x6f, 0x01, 0xf5, - 0x7c, 0x6f, 0x41, 0xf2, 0x82, 0x6f, 0x01, 0xf9, 0x60, 0x6f, 0x41, 0xe7, - 0x7e, 0x6f, 0x41, 0xe1, 0x62, 0x6f, 0x81, 0x21, 0xe5, 0x66, 0x6f, 0x01, - 0xe7, 0x84, 0x6f, 0x01, 0xe9, 0x67, 0x6f, 0x01, 0x42, 0x1d, 0x01, 0x69, - 0x6f, 0x01, 0xef, 0x65, 0x6f, 0x81, 0x04, 0xf5, 0x68, 0x6f, 0x41, 0x42, - 0x1d, 0x01, 0x86, 0x6f, 0x41, 0xee, 0x63, 0x6f, 0xc1, 0x00, 0xe7, 0x64, - 0x6f, 0x41, 0xe1, 0x85, 0x6f, 0x01, 0xe9, 0x7a, 0x6f, 0x01, 0xee, 0x5e, - 0x6f, 0x81, 0x09, 0xf2, 0x77, 0x6f, 0xc1, 0x00, 0xf2, 0x75, 0x6f, 0x41, - 0xe7, 0x5f, 0x6f, 0x41, 0xe1, 0x55, 0x6f, 0x01, 0xe5, 0x73, 0x6f, 0x81, - 0x17, 0x42, 0x93, 0x48, 0x56, 0x6f, 0x01, 0xe9, 0x79, 0x6f, 0x01, 0xee, - 0x57, 0x6f, 0x81, 0x04, 0xf5, 0x7b, 0x6f, 0x41, 0xe7, 0x58, 0x6f, 0x41, - 0xe5, 0x74, 0x6f, 0x41, 0x45, 0x5c, 0x00, 0x91, 0x6f, 0x01, 0x45, 0xf5, - 0x06, 0x92, 0x6f, 0x01, 0x45, 0xc8, 0x00, 0x8f, 0x6f, 0x01, 0x49, 0x52, - 0x72, 0x90, 0x6f, 0x41, 0x4a, 0xa9, 0xa5, 0x51, 0x6f, 0x01, 0x56, 0x57, - 0x32, 0x4f, 0x6f, 0x01, 0x09, 0x37, 0xbc, 0x01, 0xff, 0x4a, 0xa9, 0xa5, - 0x53, 0x6f, 0x01, 0x47, 0x86, 0xd4, 0x52, 0x6f, 0x41, 0xa1, 0x82, 0x04, - 0xa2, 0xf5, 0x03, 0xa4, 0xc1, 0x03, 0x42, 0xe1, 0x07, 0x07, 0x6f, 0x01, - 0xa7, 0xa7, 0x03, 0xa8, 0x9a, 0x03, 0x42, 0x1b, 0x02, 0x1e, 0x6f, 0x01, - 0xac, 0xfb, 0x02, 0xad, 0xee, 0x02, 0xae, 0xb5, 0x02, 0xb0, 0xa8, 0x02, - 0xb1, 0x9b, 0x02, 0xb2, 0xec, 0x01, 0xb3, 0xd3, 0x01, 0xb4, 0x7f, 0xb6, - 0x73, 0x42, 0xa9, 0x01, 0x42, 0x6f, 0x01, 0x42, 0x4c, 0x26, 0x27, 0x6f, - 0x01, 0x03, 0xc3, 0x78, 0x32, 0xba, 0x01, 0xff, 0xe1, 0x3b, 0x6f, 0x01, - 0x42, 0x22, 0x00, 0x35, 0x6f, 0x01, 0xb3, 0x19, 0xba, 0x01, 0xff, 0xe1, - 0x3d, 0x6f, 0x01, 0xb3, 0x06, 0x42, 0x34, 0x22, 0x40, 0x6f, 0x41, 0xe1, - 0x3e, 0x6f, 0x01, 0x42, 0x34, 0x22, 0x41, 0x6f, 0x41, 0xe1, 0x3c, 0x6f, - 0x01, 0x42, 0x22, 0x00, 0x36, 0x6f, 0x41, 0x44, 0x5a, 0xec, 0x31, 0x6f, - 0x01, 0x42, 0x1b, 0x02, 0x20, 0x6f, 0x01, 0x43, 0xcc, 0x44, 0x12, 0x6f, - 0x01, 0x42, 0x6c, 0x09, 0x02, 0x6f, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x0d, - 0x6f, 0x01, 0xb3, 0x06, 0x42, 0x12, 0x00, 0x0c, 0x6f, 0x41, 0xe1, 0x39, - 0x6f, 0x01, 0x42, 0x22, 0x00, 0x30, 0x6f, 0x41, 0xe1, 0x08, 0x6f, 0x01, - 0x42, 0xe1, 0x07, 0x09, 0x6f, 0x41, 0xe1, 0x0a, 0x6f, 0x01, 0xe5, 0x48, - 0x6f, 0x01, 0x02, 0xf1, 0x33, 0x3c, 0x04, 0x5e, 0x1f, 0x1c, 0xb3, 0x06, - 0x42, 0x12, 0x00, 0x0e, 0x6f, 0x41, 0xe1, 0x37, 0x6f, 0x01, 0xe5, 0x49, - 0x6f, 0x01, 0x42, 0x22, 0x00, 0x2e, 0x6f, 0x01, 0x42, 0x15, 0x06, 0x2a, - 0x6f, 0x41, 0xd2, 0x93, 0x6f, 0x01, 0xd3, 0x94, 0x6f, 0x01, 0xd4, 0x95, - 0x6f, 0x01, 0xd5, 0x96, 0x6f, 0x01, 0xd6, 0x97, 0x6f, 0x01, 0xd7, 0x98, - 0x6f, 0x01, 0xd8, 0x99, 0x6f, 0x41, 0xe1, 0x1a, 0x6f, 0x01, 0x42, 0x34, - 0x22, 0x1c, 0x6f, 0x41, 0xe1, 0x3a, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x33, - 0x6f, 0x01, 0x42, 0x15, 0x06, 0x34, 0x6f, 0x01, 0x42, 0xf7, 0x19, 0x46, - 0x6f, 0x41, 0x09, 0xe3, 0xb5, 0x06, 0x42, 0x77, 0x00, 0x4a, 0x6f, 0x41, - 0x04, 0x5e, 0x1f, 0x06, 0x43, 0xa4, 0x02, 0x32, 0x6f, 0x41, 0xd1, 0x9a, - 0x6f, 0x01, 0xd2, 0x9b, 0x6f, 0x01, 0xd4, 0x9c, 0x6f, 0x01, 0xd5, 0x9d, - 0x6f, 0x01, 0xd6, 0x9e, 0x6f, 0x01, 0xd8, 0x9f, 0x6f, 0x41, 0xe1, 0x21, - 0x6f, 0x01, 0x42, 0x24, 0x02, 0x22, 0x6f, 0x41, 0xe1, 0x00, 0x6f, 0x01, - 0x42, 0x74, 0x00, 0x03, 0x6f, 0x41, 0xe1, 0x10, 0x6f, 0x81, 0x2b, 0xa7, - 0x1f, 0x42, 0x22, 0x00, 0x11, 0x6f, 0x01, 0xae, 0x0d, 0xb9, 0x01, 0xff, - 0xe1, 0x2c, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x2d, 0x6f, 0x41, 0xe1, 0x14, - 0x6f, 0x01, 0x42, 0x22, 0x00, 0x15, 0x6f, 0x41, 0xe1, 0x23, 0x6f, 0x01, - 0x42, 0x22, 0x00, 0x24, 0x6f, 0x41, 0x4a, 0xf7, 0x5a, 0x50, 0x6f, 0x41, - 0xe1, 0x04, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x05, 0x6f, 0x41, 0xe1, 0x16, - 0x6f, 0x01, 0xa8, 0x06, 0x42, 0x34, 0x22, 0x17, 0x6f, 0x41, 0xe1, 0x18, - 0x6f, 0x01, 0x42, 0x34, 0x22, 0x19, 0x6f, 0x41, 0xe1, 0x26, 0x6f, 0x01, - 0x42, 0x22, 0x00, 0x44, 0x6f, 0x41, 0xe1, 0x1f, 0x6f, 0x01, 0xa8, 0x01, - 0xff, 0xe1, 0x28, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x29, 0x6f, 0x41, 0xe1, - 0x0b, 0x6f, 0x01, 0x42, 0xa1, 0x10, 0x0f, 0x6f, 0x01, 0x02, 0xf1, 0x33, - 0x19, 0xba, 0x01, 0xff, 0xe1, 0x38, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x2f, - 0x6f, 0x01, 0x42, 0xf7, 0x19, 0x47, 0x6f, 0x01, 0x42, 0x59, 0x00, 0x2b, - 0x6f, 0x41, 0xe1, 0x1b, 0x6f, 0x01, 0x42, 0x34, 0x22, 0x1d, 0x6f, 0x41, - 0xe1, 0x01, 0x6f, 0x01, 0x42, 0x0d, 0x00, 0x45, 0x6f, 0x41, 0xe8, 0x43, - 0x6f, 0x01, 0x07, 0x28, 0x7f, 0x01, 0xff, 0x42, 0x6c, 0x00, 0x06, 0x6f, - 0x01, 0xae, 0x06, 0x43, 0xf5, 0x97, 0x3f, 0x6f, 0x41, 0xe1, 0x13, 0x6f, - 0x01, 0x42, 0x24, 0x02, 0x25, 0x6f, 0x41, 0xa1, 0xbb, 0x1c, 0x09, 0xd5, - 0xb4, 0xaa, 0x1c, 0xa4, 0xc4, 0x16, 0x0b, 0xdc, 0x99, 0xad, 0x12, 0xac, - 0x9e, 0x12, 0x42, 0x98, 0x07, 0xdd, 0xf4, 0x01, 0xae, 0xa1, 0x07, 0xb2, - 0x55, 0x4d, 0x20, 0x87, 0x95, 0x00, 0x00, 0x02, 0x19, 0x01, 0x01, 0xff, - 0x05, 0x36, 0x00, 0x04, 0xef, 0x87, 0xf6, 0x41, 0x45, 0xcb, 0x22, 0xd1, - 0x23, 0x00, 0x0a, 0xf9, 0xaa, 0x2c, 0x49, 0x95, 0xbb, 0xd9, 0x23, 0x00, - 0x4f, 0x80, 0x71, 0xd3, 0x23, 0x00, 0xb4, 0x01, 0xff, 0x48, 0x62, 0xc3, - 0xd8, 0x23, 0x00, 0x46, 0x94, 0xdc, 0xd7, 0x23, 0x00, 0x0a, 0x61, 0xb1, - 0x01, 0xff, 0x46, 0x4e, 0x0a, 0xd6, 0x23, 0x00, 0x49, 0x86, 0x71, 0xd5, - 0x23, 0x40, 0x45, 0x61, 0x36, 0xd2, 0x23, 0x00, 0x4a, 0xf9, 0xaf, 0xd4, - 0x23, 0x40, 0x44, 0x7c, 0x61, 0x3f, 0x26, 0x00, 0x06, 0xc8, 0xdb, 0x06, - 0x46, 0x7c, 0x1c, 0xdc, 0xf9, 0x41, 0x08, 0x5a, 0xc2, 0xc2, 0x01, 0x0d, - 0x19, 0x82, 0x01, 0xff, 0x07, 0xc1, 0x05, 0x0d, 0x4b, 0xdd, 0xa0, 0x9e, - 0x09, 0xc1, 0x00, 0x42, 0x34, 0xf0, 0x9f, 0x09, 0x41, 0xe1, 0x80, 0x09, - 0x01, 0x42, 0x16, 0x00, 0x86, 0x09, 0x81, 0x9a, 0x01, 0x42, 0xa1, 0x10, - 0x9d, 0x09, 0x01, 0xe5, 0x81, 0x09, 0x01, 0x43, 0xcb, 0x50, 0x92, 0x09, - 0x01, 0xe9, 0x82, 0x09, 0x01, 0xab, 0x7a, 0x42, 0x74, 0x00, 0x90, 0x09, - 0x01, 0x42, 0x6c, 0x00, 0x89, 0x09, 0x01, 0xae, 0x56, 0xef, 0x83, 0x09, - 0x01, 0x42, 0x6c, 0x09, 0x88, 0x09, 0x01, 0x42, 0xf4, 0x13, 0x97, 0x09, - 0x01, 0x42, 0x71, 0x00, 0x8e, 0x09, 0x81, 0x39, 0xb3, 0x28, 0xb4, 0x0c, - 0x42, 0xa9, 0x01, 0x85, 0x09, 0x01, 0x42, 0x34, 0x22, 0x84, 0x09, 0x41, - 0xe1, 0x98, 0x09, 0x81, 0x0f, 0xe5, 0x9a, 0x09, 0x81, 0x04, 0xef, 0x9c, - 0x09, 0x41, 0x42, 0x34, 0xf0, 0x9b, 0x09, 0x41, 0x42, 0x34, 0xf0, 0x99, - 0x09, 0x41, 0xe1, 0x93, 0x09, 0x81, 0x04, 0xe5, 0x95, 0x09, 0x41, 0x42, - 0x34, 0xf0, 0x94, 0x09, 0x41, 0x42, 0x34, 0xf0, 0x8f, 0x09, 0x41, 0xe1, - 0x8a, 0x09, 0x81, 0x0b, 0xe5, 0x8c, 0x09, 0xc1, 0x00, 0x42, 0x34, 0xf0, - 0x8d, 0x09, 0x41, 0x42, 0x34, 0xf0, 0x8b, 0x09, 0x41, 0xe1, 0x96, 0x09, - 0x01, 0x42, 0x22, 0x00, 0x91, 0x09, 0x41, 0x42, 0x34, 0xf0, 0x87, 0x09, - 0x41, 0x09, 0xb3, 0x58, 0x99, 0x04, 0xac, 0x80, 0x03, 0x07, 0x2f, 0x39, - 0x01, 0xff, 0x45, 0xc3, 0x0a, 0xc7, 0x09, 0x81, 0xd8, 0x02, 0xa6, 0xfc, - 0x01, 0x44, 0x46, 0x2a, 0xc8, 0x09, 0x81, 0xd9, 0x01, 0x43, 0xbf, 0x0a, - 0xc0, 0x09, 0x81, 0xbb, 0x01, 0xb3, 0x67, 0xb4, 0x01, 0xff, 0x42, 0x92, - 0x01, 0xc9, 0x09, 0x81, 0x57, 0xa8, 0x2b, 0xb7, 0x01, 0xff, 0x44, 0x29, - 0x1d, 0xca, 0x09, 0x81, 0x1b, 0xef, 0xc1, 0x09, 0xc1, 0x00, 0x80, 0x01, - 0xff, 0x47, 0x22, 0x11, 0xd3, 0x09, 0x81, 0x06, 0x48, 0xd5, 0x5c, 0xdc, - 0x09, 0x41, 0x49, 0xd4, 0x5c, 0xee, 0x09, 0x41, 0x49, 0xd4, 0x5c, 0xe5, - 0x09, 0x41, 0x44, 0x2c, 0x11, 0xcb, 0x09, 0x81, 0x1d, 0x43, 0x26, 0x01, - 0xc2, 0x09, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0xd4, 0x09, - 0x81, 0x06, 0x48, 0xd5, 0x5c, 0xdd, 0x09, 0x41, 0x49, 0xd4, 0x5c, 0xef, - 0x09, 0x41, 0x49, 0xd4, 0x5c, 0xe6, 0x09, 0x41, 0x49, 0xd4, 0x5c, 0xe4, - 0x09, 0x41, 0x44, 0x27, 0x1d, 0xc6, 0x09, 0x81, 0x29, 0x42, 0x60, 0x25, - 0xc5, 0x09, 0xc1, 0x00, 0x80, 0x0d, 0x42, 0x2e, 0x11, 0xce, 0x09, 0xc1, - 0x00, 0x49, 0xd4, 0x5c, 0xe9, 0x09, 0x41, 0x47, 0x22, 0x11, 0xd7, 0x09, - 0x81, 0x06, 0x48, 0xd5, 0x5c, 0xe0, 0x09, 0x41, 0x49, 0xd4, 0x5c, 0xf2, - 0x09, 0x41, 0x80, 0x0d, 0x42, 0x2e, 0x11, 0xcf, 0x09, 0xc1, 0x00, 0x49, - 0xd4, 0x5c, 0xea, 0x09, 0x41, 0x47, 0x22, 0x11, 0xd8, 0x09, 0x81, 0x06, - 0x48, 0xd5, 0x5c, 0xe1, 0x09, 0x41, 0x49, 0xd4, 0x5c, 0xf3, 0x09, 0x41, - 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0xd2, 0x09, 0x81, 0x06, 0x48, 0xd5, - 0x5c, 0xdb, 0x09, 0x41, 0x49, 0xd4, 0x5c, 0xed, 0x09, 0x41, 0x80, 0x06, - 0x4b, 0xc4, 0xa1, 0xec, 0x09, 0x41, 0x47, 0x22, 0x11, 0xda, 0x09, 0x81, - 0x06, 0x48, 0xd5, 0x5c, 0xe3, 0x09, 0x41, 0x49, 0xd4, 0x5c, 0xf5, 0x09, - 0x41, 0xa9, 0x2d, 0xaf, 0x01, 0xff, 0x43, 0x2d, 0x11, 0xcc, 0x09, 0x81, - 0x1d, 0x42, 0x42, 0x00, 0xc3, 0x09, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, - 0x22, 0x11, 0xd5, 0x09, 0x81, 0x06, 0x48, 0xd5, 0x5c, 0xde, 0x09, 0x41, - 0x49, 0xd4, 0x5c, 0xf0, 0x09, 0x41, 0x49, 0xd4, 0x5c, 0xe7, 0x09, 0x41, - 0x43, 0x09, 0x4c, 0xcd, 0x09, 0x81, 0x1d, 0x42, 0x32, 0x00, 0xc4, 0x09, - 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0xd6, 0x09, 0x81, 0x06, - 0x48, 0xd5, 0x5c, 0xdf, 0x09, 0x41, 0x49, 0xd4, 0x5c, 0xf1, 0x09, 0x41, - 0x49, 0xd4, 0x5c, 0xe8, 0x09, 0x41, 0x80, 0x06, 0x4a, 0xc5, 0xa1, 0xeb, - 0x09, 0x41, 0x47, 0x22, 0x11, 0xd9, 0x09, 0x81, 0x06, 0x48, 0xd5, 0x5c, - 0xe2, 0x09, 0x41, 0x49, 0xd4, 0x5c, 0xf4, 0x09, 0x41, 0x06, 0xc2, 0x05, - 0x11, 0x08, 0xbf, 0x3e, 0x01, 0xff, 0x43, 0x05, 0xf1, 0xbf, 0x09, 0x01, - 0x43, 0xbe, 0x5c, 0xbe, 0x09, 0x41, 0xe1, 0xa0, 0x09, 0x81, 0x76, 0x42, - 0x16, 0x00, 0xa6, 0x09, 0x01, 0x42, 0xa1, 0x10, 0xb7, 0x09, 0x01, 0xe5, - 0xa1, 0x09, 0x01, 0x43, 0xcb, 0x50, 0xae, 0x09, 0x01, 0xe9, 0xa2, 0x09, - 0x01, 0xab, 0x50, 0x42, 0x74, 0x00, 0xac, 0x09, 0x01, 0x42, 0x6c, 0x00, - 0xa8, 0x09, 0x01, 0xae, 0x3a, 0xef, 0xa3, 0x09, 0x01, 0x42, 0x6c, 0x09, - 0xa7, 0x09, 0x01, 0x42, 0xf4, 0x13, 0xb3, 0x09, 0x01, 0x42, 0x71, 0x00, - 0xab, 0x09, 0x01, 0xb3, 0x1a, 0xb4, 0x0c, 0x42, 0xa9, 0x01, 0xa5, 0x09, - 0x01, 0x42, 0x34, 0x22, 0xa4, 0x09, 0x41, 0xe1, 0xb4, 0x09, 0x01, 0xe5, - 0xb5, 0x09, 0x01, 0xef, 0xb6, 0x09, 0x41, 0xe1, 0xaf, 0x09, 0x01, 0xe5, - 0xb1, 0x09, 0x41, 0xe1, 0xa9, 0x09, 0x01, 0xe5, 0xaa, 0x09, 0x41, 0xe1, - 0xb2, 0x09, 0x01, 0x42, 0x22, 0x00, 0xad, 0x09, 0x41, 0x49, 0x71, 0x92, - 0xb0, 0x09, 0x41, 0xa5, 0x47, 0xa6, 0x39, 0x4d, 0xa3, 0x84, 0xfe, 0x09, - 0x01, 0x04, 0xbf, 0x0a, 0x23, 0xb3, 0x15, 0xb4, 0x01, 0xff, 0x4b, 0x1d, - 0x78, 0xff, 0x09, 0x01, 0x4d, 0x33, 0x82, 0xf8, 0x09, 0x01, 0x4b, 0xf8, - 0xa2, 0xf7, 0x09, 0x41, 0x4d, 0x1b, 0x78, 0xfc, 0x09, 0x01, 0x4b, 0xaa, - 0x9b, 0xfb, 0x09, 0x41, 0x44, 0x22, 0x00, 0xbd, 0x09, 0x01, 0x47, 0x20, - 0x78, 0xf6, 0x09, 0x41, 0x4c, 0xc9, 0x8e, 0xfa, 0x09, 0x01, 0x4c, 0xe1, - 0x91, 0xf9, 0x09, 0x41, 0x4d, 0x67, 0x82, 0xfd, 0x09, 0x01, 0x4e, 0x1a, - 0x78, 0xbc, 0x09, 0x41, 0x0b, 0xbe, 0x98, 0x0c, 0x57, 0xe2, 0x2e, 0x4e, - 0xf5, 0x01, 0x48, 0x2e, 0x4a, 0xb9, 0xf6, 0x41, 0x11, 0xd6, 0x57, 0xad, - 0x0a, 0x06, 0xc4, 0x06, 0xeb, 0x09, 0x0a, 0x31, 0xaf, 0x01, 0xff, 0x90, - 0xf5, 0x04, 0x91, 0x01, 0xff, 0x90, 0xb3, 0x04, 0x91, 0xf4, 0x03, 0x92, - 0xb5, 0x03, 0x93, 0xf6, 0x02, 0x94, 0xb7, 0x02, 0x95, 0xf8, 0x01, 0x96, - 0xb9, 0x01, 0x97, 0x71, 0x98, 0x33, 0x99, 0x01, 0xff, 0x45, 0x03, 0xdf, - 0x86, 0xe8, 0x01, 0x46, 0xbc, 0xd5, 0xb1, 0xe8, 0x01, 0x45, 0x80, 0xdf, - 0xb6, 0xe8, 0x01, 0x45, 0xa8, 0xdf, 0x75, 0xe8, 0x01, 0x45, 0x02, 0xe0, - 0x0f, 0xe8, 0x01, 0x44, 0xa2, 0xea, 0x2c, 0xe8, 0x01, 0x45, 0x2f, 0xe0, - 0x35, 0xe8, 0x01, 0x45, 0x48, 0xe0, 0x61, 0xe8, 0x41, 0x45, 0xf4, 0xde, - 0x42, 0xe8, 0x01, 0x44, 0xd6, 0xe9, 0x43, 0xe8, 0x01, 0x44, 0x36, 0xea, - 0xb9, 0xe8, 0x01, 0x4b, 0x8d, 0x96, 0x82, 0xe8, 0x01, 0x46, 0xfe, 0xd5, - 0x89, 0xe8, 0x01, 0x44, 0xde, 0xea, 0xba, 0xe8, 0x01, 0x44, 0x22, 0xd6, - 0x6a, 0xe8, 0x01, 0x46, 0x46, 0xd6, 0x9b, 0xe8, 0x01, 0x46, 0x5e, 0xd6, - 0x97, 0xe8, 0x01, 0x46, 0x70, 0xd6, 0x1a, 0xe8, 0x41, 0x46, 0x9e, 0xd5, - 0xc2, 0xe8, 0x01, 0x44, 0xfa, 0xe9, 0xad, 0xe8, 0x01, 0x45, 0x71, 0xdf, - 0x99, 0xe8, 0x81, 0x2f, 0x45, 0xb7, 0xdf, 0xbc, 0xe8, 0x01, 0x45, 0xe4, - 0xdf, 0x9a, 0xe8, 0x81, 0x1e, 0x49, 0x1c, 0xb3, 0x52, 0xe8, 0x01, 0x44, - 0xfa, 0xea, 0x68, 0xe8, 0x01, 0x47, 0x9c, 0xcb, 0x8b, 0xe8, 0x01, 0x44, - 0x5a, 0xeb, 0x2d, 0xe8, 0x01, 0x45, 0xa7, 0xe0, 0x07, 0xe8, 0x41, 0xef, - 0x9a, 0xe8, 0x41, 0xef, 0x99, 0xe8, 0x41, 0x45, 0x12, 0xdf, 0x50, 0xe8, - 0x01, 0x4a, 0x87, 0xa4, 0x9c, 0xe8, 0x01, 0x45, 0x8f, 0xdf, 0x31, 0xe8, - 0x01, 0x44, 0x42, 0xea, 0x25, 0xe8, 0x01, 0x46, 0x0a, 0xd6, 0xc0, 0xe8, - 0x01, 0x44, 0xd2, 0xea, 0x27, 0xe8, 0x01, 0x46, 0x1c, 0xd6, 0x87, 0xe8, - 0x01, 0x46, 0x34, 0xd6, 0x88, 0xe8, 0x01, 0x44, 0x62, 0xeb, 0x85, 0xe8, - 0x01, 0x45, 0xc0, 0xe0, 0x67, 0xe8, 0x41, 0x45, 0xef, 0xde, 0x1e, 0xe8, - 0x01, 0x44, 0x0a, 0xea, 0xbb, 0xe8, 0x01, 0x45, 0x7b, 0xdf, 0xb5, 0xe8, - 0x01, 0x44, 0x8d, 0x96, 0x3c, 0xe8, 0x01, 0x46, 0xf8, 0xd5, 0x19, 0xe8, - 0x01, 0x44, 0xba, 0xea, 0x83, 0xe8, 0x01, 0x47, 0x8e, 0xcb, 0x7c, 0xe8, - 0x01, 0x45, 0x57, 0xe0, 0x4e, 0xe8, 0x01, 0x45, 0x84, 0xe0, 0xa5, 0xe8, - 0x01, 0x47, 0xaa, 0xcb, 0x7e, 0xe8, 0x41, 0x44, 0xa6, 0xe9, 0x6e, 0xe8, - 0x01, 0x45, 0x44, 0xdf, 0x58, 0xe8, 0x01, 0x4a, 0x9b, 0xa4, 0x9e, 0xe8, - 0x01, 0x45, 0xbc, 0xdf, 0x10, 0xe8, 0x01, 0x45, 0xf8, 0xdf, 0xbe, 0xe8, - 0x01, 0x45, 0x11, 0xe0, 0x93, 0xe8, 0x01, 0x46, 0x28, 0xd6, 0x7b, 0xe8, - 0x01, 0x43, 0x7b, 0xf0, 0x28, 0xe8, 0x01, 0x45, 0x7a, 0xe0, 0xa8, 0xe8, - 0x01, 0x46, 0x76, 0xd6, 0xb7, 0xe8, 0x41, 0x45, 0x08, 0xdf, 0x72, 0xe8, - 0x01, 0x44, 0xe6, 0xe9, 0x2a, 0xe8, 0x01, 0x45, 0x62, 0xdf, 0x9f, 0xe8, - 0x01, 0x45, 0x9e, 0xdf, 0x5f, 0xe8, 0x01, 0x46, 0x04, 0xd6, 0xb8, 0xe8, - 0x01, 0x44, 0xbe, 0xea, 0x2b, 0xe8, 0x01, 0x45, 0x34, 0xe0, 0x33, 0xe8, - 0x01, 0x44, 0x32, 0xeb, 0x29, 0xe8, 0x01, 0x44, 0x52, 0xeb, 0x21, 0xe8, - 0x01, 0x45, 0xd4, 0xe0, 0x13, 0xe8, 0x41, 0x46, 0x92, 0xd5, 0x7d, 0xe8, - 0x01, 0x44, 0x44, 0xdf, 0x59, 0xe8, 0x01, 0x45, 0x76, 0xdf, 0x95, 0xe8, - 0x01, 0x45, 0xad, 0xdf, 0xae, 0xe8, 0x01, 0x45, 0xd0, 0xdf, 0xa6, 0xe8, - 0x01, 0x45, 0x16, 0xe0, 0xb0, 0xe8, 0x01, 0x45, 0x3e, 0xe0, 0x0b, 0xe8, - 0x01, 0x47, 0x95, 0xcb, 0x7f, 0xe8, 0x01, 0x46, 0x58, 0xd6, 0x70, 0xe8, - 0x01, 0x45, 0xb6, 0xe0, 0xaf, 0xe8, 0x41, 0x49, 0xdd, 0xb2, 0x3d, 0xe8, - 0x01, 0x44, 0xde, 0xe9, 0x84, 0xe8, 0x01, 0x46, 0xc8, 0xd5, 0xa4, 0xe8, - 0x01, 0x44, 0x46, 0xea, 0x4f, 0xe8, 0x01, 0x45, 0xfd, 0xdf, 0x0d, 0xe8, - 0x01, 0x47, 0x87, 0xcb, 0x7a, 0xe8, 0x01, 0x44, 0x1e, 0xeb, 0x32, 0xe8, - 0x01, 0x45, 0x61, 0xe0, 0x66, 0xe8, 0x01, 0x44, 0x7a, 0xeb, 0x0c, 0xe8, - 0x01, 0x45, 0xbb, 0xe0, 0xb2, 0xe8, 0x41, 0x43, 0x1e, 0xf0, 0x26, 0xe8, - 0x01, 0x45, 0x2b, 0xdf, 0x62, 0xe8, 0x01, 0x45, 0x85, 0xdf, 0x91, 0xe8, - 0x01, 0x45, 0x99, 0xdf, 0x20, 0xe8, 0x01, 0x45, 0xf3, 0xdf, 0x49, 0xe8, - 0x01, 0x4b, 0x98, 0x96, 0x9d, 0xe8, 0x01, 0x4c, 0x19, 0x8a, 0x81, 0xe8, - 0x01, 0x45, 0x4d, 0xe0, 0xaa, 0xe8, 0x01, 0x45, 0x7f, 0xe0, 0xa3, 0xe8, - 0x01, 0x45, 0xd9, 0xe0, 0x56, 0xe8, 0x41, 0x90, 0xb5, 0x04, 0x91, 0xf6, - 0x03, 0x92, 0xb7, 0x03, 0x93, 0xf8, 0x02, 0x94, 0xb9, 0x02, 0x95, 0xfa, - 0x01, 0x96, 0xbb, 0x01, 0x97, 0x7d, 0x98, 0x3f, 0x99, 0x01, 0xff, 0x46, - 0x8c, 0xd5, 0x77, 0xe8, 0x01, 0x45, 0x35, 0xdf, 0x47, 0xe8, 0x01, 0x45, - 0x5d, 0xdf, 0xa0, 0xe8, 0x01, 0x46, 0xd4, 0xd5, 0xa9, 0xe8, 0x01, 0x45, - 0xe9, 0xdf, 0x18, 0xe8, 0x01, 0x44, 0x0c, 0xe0, 0x04, 0xe8, 0x01, 0x44, - 0xf6, 0xea, 0x6c, 0xe8, 0x01, 0x44, 0x26, 0xeb, 0x1f, 0xe8, 0x01, 0x46, - 0x6a, 0xd6, 0xc3, 0xe8, 0x01, 0x44, 0x82, 0xeb, 0x8d, 0xe8, 0x41, 0x44, - 0xc6, 0xe9, 0x57, 0xe8, 0x01, 0x45, 0x30, 0xdf, 0x8f, 0xe8, 0x01, 0x46, - 0xce, 0xd5, 0x79, 0xe8, 0x01, 0x46, 0xda, 0xd5, 0x6f, 0xe8, 0x01, 0x45, - 0xda, 0xdf, 0x39, 0xe8, 0x01, 0x44, 0xe2, 0xea, 0xbd, 0xe8, 0x01, 0x4b, - 0xa3, 0x96, 0x80, 0xe8, 0x01, 0x45, 0x52, 0xe0, 0x73, 0xe8, 0x01, 0x44, - 0x5e, 0xeb, 0x60, 0xe8, 0x01, 0x45, 0xa2, 0xe0, 0x41, 0xe8, 0x41, 0x45, - 0xfe, 0xde, 0xac, 0xe8, 0x01, 0x46, 0xaa, 0xd5, 0xab, 0xe8, 0x01, 0x45, - 0x6c, 0xdf, 0x98, 0xe8, 0x01, 0x44, 0x56, 0xea, 0x3a, 0xe8, 0x01, 0x45, - 0xd5, 0xdf, 0xa1, 0xe8, 0x01, 0x44, 0xb6, 0xea, 0x5e, 0xe8, 0x01, 0x45, - 0x25, 0xe0, 0x05, 0xe8, 0x01, 0x44, 0x4a, 0xeb, 0xbf, 0xe8, 0x01, 0x45, - 0x75, 0xe0, 0x5d, 0xe8, 0x01, 0x44, 0x92, 0xeb, 0x34, 0xe8, 0x41, 0x46, - 0x98, 0xd5, 0xc4, 0xe8, 0x01, 0x45, 0x3f, 0xdf, 0x11, 0xe8, 0x01, 0x45, - 0x67, 0xdf, 0x94, 0xe8, 0x01, 0x44, 0x4a, 0xea, 0x51, 0xe8, 0x01, 0x45, - 0xee, 0xdf, 0xb4, 0xe8, 0x01, 0x45, 0x0c, 0xe0, 0x03, 0xe8, 0x01, 0x44, - 0x12, 0xeb, 0x92, 0xe8, 0x01, 0x46, 0x4c, 0xd6, 0xb3, 0xe8, 0x01, 0x44, - 0x6e, 0xeb, 0x8c, 0xe8, 0x01, 0x44, 0x9a, 0xeb, 0x4a, 0xe8, 0x41, 0x44, - 0xb6, 0xe9, 0x8e, 0xe8, 0x01, 0x44, 0x30, 0xdf, 0x90, 0xe8, 0x01, 0x45, - 0x53, 0xdf, 0x74, 0xe8, 0x01, 0x45, 0xa3, 0xdf, 0x71, 0xe8, 0x01, 0x45, - 0xdf, 0xdf, 0x3b, 0xe8, 0x01, 0x44, 0xd6, 0xea, 0x48, 0xe8, 0x01, 0x45, - 0x20, 0xe0, 0xa7, 0xe8, 0x01, 0x46, 0x52, 0xd6, 0x8a, 0xe8, 0x01, 0x46, - 0x64, 0xd6, 0xc1, 0xe8, 0x01, 0x45, 0xac, 0xe0, 0x17, 0xe8, 0x41, 0x45, - 0x0d, 0xdf, 0x6b, 0xe8, 0x01, 0x44, 0xe2, 0xe9, 0x69, 0xe8, 0x01, 0x45, - 0x58, 0xdf, 0x6d, 0xe8, 0x01, 0x46, 0xe0, 0xd5, 0x78, 0xe8, 0x01, 0x46, - 0xf2, 0xd5, 0xa2, 0xe8, 0x01, 0x44, 0x16, 0xd6, 0x0e, 0xe8, 0x01, 0x46, - 0x22, 0xd6, 0x76, 0xe8, 0x01, 0x46, 0x40, 0xd6, 0x96, 0xe8, 0x01, 0x44, - 0x6a, 0xeb, 0x06, 0xe8, 0x01, 0x45, 0xcf, 0xe0, 0x12, 0xe8, 0x41, 0x44, - 0xaa, 0xe9, 0x4d, 0xe8, 0x01, 0x44, 0x0e, 0xea, 0x53, 0xe8, 0x01, 0x44, - 0x3a, 0xea, 0x54, 0xe8, 0x01, 0x44, 0x72, 0xea, 0x55, 0xe8, 0x01, 0x44, - 0x7a, 0xea, 0x5a, 0xe8, 0x01, 0x44, 0xb2, 0xea, 0x5b, 0xe8, 0x01, 0x44, - 0xf2, 0xea, 0x5c, 0xe8, 0x01, 0x45, 0x66, 0xe0, 0x63, 0xe8, 0x01, 0x45, - 0x8e, 0xe0, 0x64, 0xe8, 0x01, 0x45, 0xc5, 0xe0, 0x65, 0xe8, 0x41, 0x44, - 0xbe, 0xe9, 0x2f, 0xe8, 0x01, 0x44, 0x06, 0xea, 0x30, 0xe8, 0x01, 0x44, - 0xc6, 0x41, 0x44, 0xe8, 0x01, 0x44, 0x6e, 0xea, 0x45, 0xe8, 0x01, 0x44, - 0x8e, 0xea, 0x46, 0xe8, 0x01, 0x44, 0xc6, 0xea, 0x36, 0xe8, 0x01, 0x44, - 0x0a, 0xeb, 0x37, 0xe8, 0x01, 0x44, 0x3e, 0xeb, 0x38, 0xe8, 0x01, 0x44, - 0x66, 0xeb, 0x4b, 0xe8, 0x01, 0x44, 0x7e, 0xeb, 0x4c, 0xe8, 0x41, 0x44, - 0xa2, 0xe9, 0x1b, 0xe8, 0x01, 0x44, 0x62, 0xc0, 0x1c, 0xe8, 0x01, 0x44, - 0x16, 0xea, 0x1d, 0xe8, 0x01, 0x43, 0x51, 0xf0, 0x22, 0xe8, 0x01, 0x43, - 0xcb, 0xdf, 0x23, 0xe8, 0x01, 0x43, 0x63, 0xf0, 0x24, 0xe8, 0x01, 0x44, - 0xee, 0xea, 0x3e, 0xe8, 0x01, 0x44, 0x2a, 0xeb, 0x3f, 0xe8, 0x01, 0x44, - 0x56, 0xeb, 0x40, 0xe8, 0x01, 0x44, 0x8e, 0xeb, 0x2e, 0xe8, 0x41, 0x44, - 0xea, 0xe9, 0x00, 0xe8, 0x01, 0x44, 0x1a, 0xea, 0x01, 0xe8, 0x01, 0x44, - 0x4e, 0xea, 0x02, 0xe8, 0x01, 0x44, 0x96, 0xea, 0x08, 0xe8, 0x01, 0x44, - 0xe6, 0xea, 0x09, 0xe8, 0x01, 0x44, 0x22, 0xeb, 0x0a, 0xe8, 0x01, 0x45, - 0x5c, 0xe0, 0x14, 0xe8, 0x01, 0x45, 0x89, 0xe0, 0x15, 0xe8, 0x01, 0x45, - 0xb1, 0xe0, 0x16, 0xe8, 0x41, 0x45, 0xc3, 0x0a, 0xce, 0xe8, 0x01, 0xa6, - 0x29, 0x44, 0x46, 0x2a, 0xcf, 0xe8, 0x01, 0x43, 0xbf, 0x0a, 0xc7, 0xe8, - 0x01, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xc9, 0xe8, 0x01, - 0x42, 0x15, 0x02, 0xc8, 0xe8, 0x41, 0x44, 0x27, 0x1d, 0xcd, 0xe8, 0x01, - 0x42, 0x60, 0x25, 0xcc, 0xe8, 0x41, 0x43, 0xa7, 0x05, 0xcb, 0xe8, 0x01, - 0x43, 0xcb, 0x06, 0xca, 0xe8, 0x41, 0x07, 0x22, 0x11, 0x24, 0x48, 0x25, - 0x3b, 0xd6, 0xe8, 0x01, 0xb4, 0x01, 0xff, 0xa5, 0x06, 0x48, 0x26, 0x51, - 0xd3, 0xe8, 0x41, 0x43, 0x59, 0x57, 0xd0, 0xe8, 0x01, 0xae, 0x01, 0xff, - 0x4a, 0xf1, 0xa3, 0xd4, 0xe8, 0x01, 0xf3, 0xd1, 0xe8, 0x41, 0x4a, 0xf1, - 0xa3, 0xd5, 0xe8, 0x01, 0xf3, 0xd2, 0xe8, 0x41, 0x42, 0x10, 0x00, 0x48, - 0xf3, 0x01, 0x49, 0x8c, 0x28, 0xe0, 0xfa, 0x41, 0xa1, 0xfd, 0x03, 0x06, - 0x96, 0xd7, 0xec, 0x03, 0x06, 0xc4, 0x06, 0xa5, 0x03, 0xac, 0x6b, 0x58, - 0x9d, 0x2a, 0xf3, 0xaa, 0x00, 0xb6, 0x06, 0x54, 0xbf, 0x45, 0xf4, 0xaa, - 0x40, 0x45, 0x5c, 0x23, 0xf6, 0xaa, 0x00, 0x0a, 0xd2, 0x75, 0x01, 0xff, - 0xa1, 0x3c, 0x47, 0x0f, 0xcd, 0xe9, 0xab, 0x00, 0xa9, 0x2a, 0x44, 0x62, - 0xee, 0xea, 0xab, 0x00, 0x44, 0x88, 0x84, 0xe3, 0xab, 0x00, 0x46, 0xe8, - 0xdc, 0xe7, 0xab, 0x00, 0xb5, 0x0c, 0x47, 0xa1, 0x4a, 0xf5, 0xaa, 0x00, - 0x45, 0x5d, 0xe9, 0xe6, 0xab, 0x40, 0x43, 0x89, 0x84, 0xe8, 0xab, 0x00, - 0xf5, 0xec, 0xaa, 0x40, 0xe9, 0xeb, 0xaa, 0x00, 0x43, 0x89, 0x84, 0xe4, - 0xab, 0x40, 0xa1, 0x0a, 0x43, 0x89, 0x84, 0xe5, 0xab, 0x00, 0xf5, 0xee, - 0xaa, 0x40, 0xe9, 0xed, 0xaa, 0x00, 0xf5, 0xef, 0xaa, 0x40, 0x06, 0xc2, - 0x05, 0x06, 0x47, 0xec, 0xd3, 0xec, 0xab, 0x40, 0x45, 0x6f, 0xe1, 0xd1, - 0xab, 0x00, 0xa2, 0x9b, 0x02, 0x02, 0x1e, 0x14, 0x8c, 0x02, 0xa4, 0xf1, - 0x01, 0xe5, 0xe0, 0xaa, 0x00, 0xa7, 0xde, 0x01, 0x43, 0x71, 0xdb, 0xcd, - 0xab, 0x00, 0xe9, 0xcf, 0xab, 0x80, 0xcc, 0x01, 0xaa, 0xbd, 0x01, 0xab, - 0xa7, 0x01, 0x43, 0xf0, 0x0d, 0xc2, 0xab, 0x80, 0x99, 0x01, 0x43, 0xcb, - 0x2e, 0xc3, 0xab, 0x80, 0x8b, 0x01, 0xae, 0x65, 0xef, 0xe1, 0xaa, 0x00, - 0xb0, 0x4e, 0x43, 0xa7, 0x07, 0xd4, 0xab, 0x00, 0xb3, 0x34, 0xb4, 0x12, - 0x42, 0xf3, 0x0a, 0xce, 0xab, 0x00, 0x43, 0x82, 0x10, 0xcb, 0xab, 0x00, - 0x44, 0x86, 0xbb, 0xcc, 0xab, 0x40, 0x43, 0x76, 0x1d, 0xca, 0xab, 0x00, - 0x42, 0x62, 0x01, 0xc7, 0xab, 0x80, 0x0d, 0xb4, 0x01, 0xff, 0xe1, 0xe4, - 0xaa, 0x00, 0x42, 0x22, 0x00, 0xe5, 0xaa, 0x40, 0x47, 0x84, 0xca, 0xe0, - 0xab, 0x40, 0x42, 0x57, 0x00, 0xc1, 0xab, 0x00, 0x42, 0x22, 0x00, 0xe9, - 0xaa, 0x00, 0x42, 0x15, 0x06, 0xea, 0xaa, 0x40, 0xe1, 0xc4, 0xab, 0x80, - 0x06, 0x43, 0x56, 0x00, 0xd0, 0xab, 0x40, 0x47, 0x84, 0xca, 0xde, 0xab, - 0x40, 0xe1, 0xc5, 0xab, 0x80, 0x19, 0x43, 0xb5, 0xb0, 0xc9, 0xab, 0x80, - 0x0c, 0x42, 0xff, 0x04, 0xe8, 0xaa, 0x00, 0x42, 0x34, 0x22, 0xe3, 0xaa, - 0x40, 0x47, 0x84, 0xca, 0xe1, 0xab, 0x40, 0x47, 0x84, 0xca, 0xdf, 0xab, - 0x40, 0x47, 0x84, 0xca, 0xdd, 0xab, 0x40, 0x47, 0x84, 0xca, 0xdc, 0xab, - 0x40, 0x43, 0x76, 0x1d, 0xc8, 0xab, 0x00, 0x42, 0x2a, 0x05, 0xc0, 0xab, - 0xc0, 0x00, 0x47, 0x84, 0xca, 0xdb, 0xab, 0x40, 0x43, 0x56, 0x00, 0xd3, - 0xab, 0x00, 0x42, 0x62, 0x01, 0xd6, 0xab, 0x40, 0x47, 0x84, 0xca, 0xe2, - 0xab, 0x40, 0x43, 0x76, 0x1d, 0xd8, 0xab, 0x00, 0x42, 0x2a, 0x05, 0xd2, - 0xab, 0x40, 0xa4, 0x0c, 0x43, 0x76, 0x1d, 0xd9, 0xab, 0x00, 0x42, 0x62, - 0x01, 0xd7, 0xab, 0x40, 0xe1, 0xe6, 0xaa, 0x00, 0x42, 0x22, 0x00, 0xe7, - 0xaa, 0x40, 0xe1, 0xe2, 0xaa, 0x00, 0x42, 0x62, 0x01, 0xc6, 0xab, 0x40, - 0xe1, 0xd5, 0xab, 0x00, 0x43, 0x56, 0x00, 0xda, 0xab, 0x40, 0x45, 0xc3, - 0x0a, 0xf8, 0xab, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xf9, 0xab, 0x00, - 0x43, 0xbf, 0x0a, 0xf1, 0xab, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, - 0x1d, 0xf0, 0xab, 0x40, 0x44, 0x25, 0x01, 0xf3, 0xab, 0x00, 0x42, 0x15, - 0x02, 0xf2, 0xab, 0x40, 0x44, 0x27, 0x1d, 0xf7, 0xab, 0x00, 0x42, 0x60, - 0x25, 0xf6, 0xab, 0x40, 0x43, 0xa7, 0x05, 0xf5, 0xab, 0x00, 0x43, 0xcb, - 0x06, 0xf4, 0xab, 0x40, 0x42, 0x1a, 0x00, 0xf0, 0xaa, 0x00, 0x42, 0xc3, - 0x0a, 0xeb, 0xab, 0x40, 0x4b, 0x8c, 0x9a, 0xf1, 0xaa, 0x00, 0x43, 0x9d, - 0x85, 0xf2, 0xaa, 0x00, 0x48, 0x5a, 0xc7, 0xed, 0xab, 0x40, 0x09, 0xda, - 0xb5, 0xf0, 0x01, 0xa9, 0x01, 0xff, 0x05, 0x5a, 0x45, 0xd6, 0x01, 0x03, - 0x1d, 0x04, 0x01, 0xff, 0xa2, 0xc2, 0x01, 0x06, 0xe2, 0x13, 0xb1, 0x01, - 0xa6, 0x87, 0x01, 0x4b, 0x9f, 0x5f, 0xa3, 0xf7, 0x01, 0x04, 0xc3, 0x00, - 0x69, 0x52, 0x58, 0x52, 0x5f, 0x20, 0x00, 0x05, 0xc8, 0x00, 0x4b, 0xb3, - 0x27, 0x0e, 0xa8, 0x7b, 0x17, 0x4c, 0x32, 0x00, 0x59, 0x27, 0x00, 0x06, - 0xad, 0x02, 0x01, 0xff, 0x46, 0xe7, 0x02, 0xaa, 0x26, 0x00, 0x46, 0xab, - 0x05, 0x8f, 0xf7, 0x41, 0x4a, 0x53, 0x2b, 0xc1, 0xf7, 0x01, 0x4d, 0xd9, - 0x12, 0xc3, 0xf7, 0x41, 0x46, 0xa7, 0x18, 0xaa, 0xf7, 0x01, 0x44, 0x21, - 0x04, 0x92, 0x25, 0x00, 0x03, 0xb6, 0x51, 0x06, 0x51, 0x8f, 0x5a, 0xac, - 0x26, 0x40, 0x52, 0x4b, 0x2b, 0xcb, 0xf7, 0x01, 0x4f, 0x4e, 0x1c, 0xb6, - 0xf7, 0x41, 0x80, 0x06, 0x60, 0xe5, 0x0e, 0x6d, 0x27, 0x40, 0x56, 0x83, - 0x32, 0x75, 0x27, 0x00, 0x54, 0x50, 0x21, 0x69, 0x27, 0x40, 0x80, 0x06, - 0x60, 0xe5, 0x0e, 0x6c, 0x27, 0x40, 0x56, 0x83, 0x32, 0x74, 0x27, 0x00, - 0x54, 0x50, 0x21, 0x68, 0x27, 0x40, 0x53, 0x4c, 0x41, 0xb0, 0xf7, 0x01, - 0x09, 0x61, 0x3a, 0x11, 0x0c, 0xcd, 0x12, 0x01, 0xff, 0x4a, 0x53, 0x2b, - 0xc5, 0xf7, 0x01, 0x4d, 0xd9, 0x12, 0xc7, 0xf7, 0x41, 0x59, 0xf7, 0x23, - 0x6a, 0x27, 0x00, 0x5a, 0x4a, 0x21, 0x6b, 0x27, 0x40, 0x52, 0x4b, 0x2b, - 0xce, 0xf7, 0x01, 0x4f, 0x4e, 0x1c, 0xbc, 0xf7, 0x41, 0x4b, 0xe2, 0x02, - 0xab, 0x26, 0x00, 0x50, 0x0a, 0x64, 0x85, 0xf7, 0x41, 0x45, 0xe8, 0x04, - 0x4c, 0x2e, 0x00, 0x50, 0xad, 0x00, 0x53, 0x2e, 0x00, 0x4d, 0xd6, 0x33, - 0x54, 0x2e, 0x40, 0xa3, 0xd0, 0x02, 0x06, 0xc4, 0x06, 0xf4, 0x01, 0x4e, - 0x30, 0x76, 0x9a, 0x6e, 0x01, 0x49, 0x15, 0x16, 0x98, 0x6e, 0x01, 0x07, - 0x2f, 0x39, 0x9e, 0x01, 0xb3, 0x01, 0xff, 0x0c, 0x4c, 0x08, 0x06, 0x4a, - 0x93, 0xb1, 0x99, 0x6e, 0x41, 0xe1, 0x6d, 0x6e, 0x81, 0x81, 0x01, 0xe2, - 0x70, 0x6e, 0x01, 0xe3, 0x71, 0x6e, 0x01, 0xe4, 0x79, 0x6e, 0x01, 0xe5, - 0x6f, 0x6e, 0x01, 0xe6, 0x6a, 0x6e, 0x01, 0xe7, 0x69, 0x6e, 0x01, 0xe8, - 0x76, 0x6e, 0x81, 0x60, 0xe9, 0x6b, 0x6e, 0x01, 0xea, 0x6e, 0x6e, 0x01, - 0xeb, 0x6c, 0x6e, 0x81, 0x4f, 0xec, 0x74, 0x6e, 0x01, 0xed, 0x60, 0x6e, - 0x01, 0xee, 0x7b, 0x6e, 0x81, 0x3a, 0xef, 0x7d, 0x6e, 0x81, 0x31, 0xf0, - 0x67, 0x6e, 0x01, 0xf1, 0x75, 0x6e, 0x01, 0xf2, 0x7c, 0x6e, 0x01, 0xf3, - 0x61, 0x6e, 0x01, 0xf4, 0x68, 0x6e, 0x01, 0xf5, 0x72, 0x6e, 0x01, 0xf6, - 0x62, 0x6e, 0x01, 0xf7, 0x63, 0x6e, 0x01, 0xf8, 0x78, 0x6e, 0x01, 0xf9, - 0x7f, 0x6e, 0x81, 0x04, 0xfa, 0x65, 0x6e, 0x41, 0xf5, 0x73, 0x6e, 0x41, - 0xe5, 0x7a, 0x6e, 0x41, 0xe7, 0x77, 0x6e, 0x01, 0xf9, 0x77, 0x6e, 0x41, - 0xf0, 0x66, 0x6e, 0x41, 0xf0, 0x76, 0x6e, 0x41, 0xe9, 0x7e, 0x6e, 0x01, - 0x43, 0x3e, 0x87, 0x64, 0x6e, 0x41, 0xa5, 0x37, 0xa6, 0x29, 0x48, 0x7c, - 0x52, 0x93, 0x6e, 0x01, 0xb3, 0x15, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, - 0x8a, 0x6e, 0x01, 0x47, 0x2a, 0x59, 0x8d, 0x6e, 0x01, 0x45, 0x45, 0x2b, - 0x8c, 0x6e, 0x41, 0x48, 0x3c, 0x50, 0x91, 0x6e, 0x01, 0x46, 0x60, 0x25, - 0x90, 0x6e, 0x41, 0x46, 0x9c, 0x17, 0x8f, 0x6e, 0x01, 0x47, 0x9f, 0x5b, - 0x8e, 0x6e, 0x41, 0x47, 0xca, 0x24, 0x92, 0x6e, 0x01, 0x45, 0x0b, 0x6e, - 0x8b, 0x6e, 0x41, 0x45, 0xc3, 0x0a, 0x88, 0x6e, 0x01, 0xa6, 0x43, 0x44, - 0x46, 0x2a, 0x89, 0x6e, 0x01, 0x43, 0xbf, 0x0a, 0x81, 0x6e, 0x81, 0x30, - 0xb3, 0x22, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x80, 0x6e, 0x41, 0x44, 0x25, - 0x01, 0x83, 0x6e, 0x81, 0x0d, 0x42, 0x15, 0x02, 0x82, 0x6e, 0xc1, 0x00, - 0x4f, 0x8a, 0x67, 0x95, 0x6e, 0x41, 0x4f, 0x8a, 0x67, 0x96, 0x6e, 0x41, - 0x44, 0x27, 0x1d, 0x87, 0x6e, 0x01, 0x42, 0x60, 0x25, 0x86, 0x6e, 0x41, - 0x4f, 0x8a, 0x67, 0x94, 0x6e, 0x41, 0x43, 0xa7, 0x05, 0x85, 0x6e, 0x01, - 0x43, 0xcb, 0x06, 0x84, 0x6e, 0x41, 0x0e, 0xba, 0x05, 0x06, 0x44, 0xe9, - 0x04, 0x97, 0x6e, 0x41, 0xe1, 0x4d, 0x6e, 0x81, 0x81, 0x01, 0xe2, 0x50, - 0x6e, 0x01, 0xe3, 0x51, 0x6e, 0x01, 0xe4, 0x59, 0x6e, 0x01, 0xe5, 0x4f, - 0x6e, 0x01, 0xe6, 0x4a, 0x6e, 0x01, 0xe7, 0x49, 0x6e, 0x01, 0xe8, 0x56, - 0x6e, 0x81, 0x60, 0xe9, 0x4b, 0x6e, 0x01, 0xea, 0x4e, 0x6e, 0x01, 0xeb, - 0x4c, 0x6e, 0x81, 0x4f, 0xec, 0x54, 0x6e, 0x01, 0xed, 0x40, 0x6e, 0x01, - 0xee, 0x5b, 0x6e, 0x81, 0x3a, 0xef, 0x5d, 0x6e, 0x81, 0x31, 0xf0, 0x47, - 0x6e, 0x01, 0xf1, 0x55, 0x6e, 0x01, 0xf2, 0x5c, 0x6e, 0x01, 0xf3, 0x41, - 0x6e, 0x01, 0xf4, 0x48, 0x6e, 0x01, 0xf5, 0x52, 0x6e, 0x01, 0xf6, 0x42, - 0x6e, 0x01, 0xf7, 0x43, 0x6e, 0x01, 0xf8, 0x58, 0x6e, 0x01, 0xf9, 0x5f, - 0x6e, 0x81, 0x04, 0xfa, 0x45, 0x6e, 0x41, 0xf5, 0x53, 0x6e, 0x41, 0xe5, - 0x5a, 0x6e, 0x41, 0xe7, 0x57, 0x6e, 0x01, 0xf9, 0x57, 0x6e, 0x41, 0xf0, - 0x46, 0x6e, 0x41, 0xf0, 0x56, 0x6e, 0x41, 0xe9, 0x5e, 0x6e, 0x01, 0x43, - 0x3e, 0x87, 0x44, 0x6e, 0x41, 0x43, 0xd3, 0x05, 0xbe, 0xf9, 0x01, 0x43, - 0xd2, 0x37, 0xbf, 0xf9, 0x41, 0x06, 0x30, 0xdd, 0x06, 0x49, 0x18, 0xbd, - 0x56, 0xf3, 0x41, 0x45, 0x04, 0x02, 0x21, 0x22, 0x80, 0x0c, 0x42, 0x08, - 0x00, 0x5e, 0x22, 0x00, 0x54, 0x2f, 0x44, 0x9d, 0x29, 0x40, 0x80, 0x01, - 0xff, 0x4c, 0x8d, 0x91, 0x9b, 0x29, 0x00, 0x27, 0xc9, 0x05, 0x01, 0xff, - 0x09, 0xc3, 0x47, 0x31, 0x09, 0x2b, 0x43, 0x21, 0x0a, 0x09, 0x01, 0x11, - 0x07, 0x48, 0x5d, 0x01, 0xff, 0x44, 0xc3, 0x00, 0xa9, 0x29, 0x00, 0x45, - 0xc8, 0x00, 0xa8, 0x29, 0x40, 0x44, 0xa5, 0x01, 0xae, 0x29, 0x00, 0x42, - 0x50, 0x02, 0xac, 0x29, 0x40, 0x44, 0xa5, 0x01, 0xaf, 0x29, 0x00, 0x42, - 0x50, 0x02, 0xad, 0x29, 0x40, 0x44, 0xc3, 0x00, 0xab, 0x29, 0x00, 0x45, - 0xc8, 0x00, 0xaa, 0x29, 0x40, 0x44, 0x06, 0x6f, 0xaf, 0x00, 0x00, 0xa7, - 0xf6, 0x42, 0xa8, 0x99, 0x3e, 0xab, 0xf7, 0x3c, 0xac, 0xe2, 0x36, 0x45, - 0xa2, 0xe5, 0xa3, 0xf9, 0x01, 0xee, 0x68, 0xf4, 0x81, 0x81, 0x32, 0xb0, - 0xf2, 0x31, 0xb2, 0xaf, 0x2e, 0xb3, 0xcd, 0x2a, 0xb4, 0x95, 0x01, 0x46, - 0x56, 0xde, 0xd6, 0xf5, 0x01, 0x0c, 0x29, 0x95, 0x01, 0xff, 0xa5, 0x75, - 0xa6, 0x58, 0x44, 0x46, 0x2a, 0xe9, 0xd2, 0x81, 0x4b, 0x43, 0xbf, 0x0a, - 0xe1, 0xd2, 0x01, 0xb3, 0x29, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xe0, 0xd2, - 0x41, 0x42, 0x92, 0x01, 0xea, 0xd2, 0x01, 0xa8, 0x0d, 0xb7, 0x01, 0xff, - 0x44, 0x46, 0x2b, 0xec, 0xd2, 0x01, 0xef, 0xe2, 0xd2, 0x41, 0x46, 0x2b, - 0x59, 0xed, 0xd2, 0x01, 0x43, 0x26, 0x01, 0xe3, 0xd2, 0x41, 0x44, 0x27, - 0x1d, 0xe7, 0xd2, 0x81, 0x0d, 0x42, 0x60, 0x25, 0xe6, 0xd2, 0xc1, 0x00, - 0x44, 0x9e, 0x17, 0xf0, 0xd2, 0x41, 0x44, 0x9e, 0x17, 0xf1, 0xd2, 0x41, - 0x44, 0x9e, 0x17, 0xf3, 0xd2, 0x41, 0xa9, 0x0d, 0x43, 0xcb, 0x06, 0xe4, - 0xd2, 0xc1, 0x00, 0x44, 0x9e, 0x17, 0xee, 0xd2, 0x41, 0x45, 0x9d, 0x17, - 0xef, 0xd2, 0x01, 0x42, 0x32, 0x00, 0xe5, 0xd2, 0x41, 0x44, 0xc9, 0x00, - 0xe8, 0xd2, 0x81, 0x06, 0x45, 0x0b, 0x6e, 0xeb, 0xd2, 0x41, 0x43, 0x75, - 0x09, 0xf2, 0xd2, 0x41, 0x47, 0xb7, 0xcd, 0xc9, 0xf9, 0x01, 0x0a, 0x5b, - 0x52, 0x01, 0xff, 0x05, 0x9a, 0x5f, 0xb6, 0x1b, 0x0e, 0xa4, 0x75, 0xad, - 0x19, 0xa6, 0xda, 0x17, 0x07, 0x38, 0xcf, 0xe0, 0x12, 0x05, 0xc3, 0x00, - 0xb8, 0x12, 0x0a, 0xad, 0xab, 0x93, 0x10, 0x02, 0x0d, 0x00, 0xe1, 0x0f, - 0xb3, 0x01, 0xff, 0x0a, 0xcc, 0x46, 0xb2, 0x01, 0x06, 0x4a, 0x06, 0x01, - 0xff, 0x08, 0xb9, 0x05, 0x61, 0x06, 0x0c, 0x07, 0x01, 0xff, 0xe1, 0xb6, - 0xd4, 0x01, 0xe2, 0xb7, 0xd4, 0x01, 0xe3, 0xb8, 0xd4, 0x01, 0xe4, 0xb9, - 0xd4, 0x01, 0xe6, 0xbb, 0xd4, 0x01, 0xe8, 0xbd, 0xd4, 0x01, 0xe9, 0xbe, - 0xd4, 0x01, 0xea, 0xbf, 0xd4, 0x01, 0xeb, 0xc0, 0xd4, 0x01, 0xec, 0xc1, - 0xd4, 0x01, 0xed, 0xc2, 0xd4, 0x01, 0xee, 0xc3, 0xd4, 0x01, 0xf0, 0xc5, - 0xd4, 0x01, 0xf1, 0xc6, 0xd4, 0x01, 0xf2, 0xc7, 0xd4, 0x01, 0xf3, 0xc8, - 0xd4, 0x01, 0xf4, 0xc9, 0xd4, 0x01, 0xf5, 0xca, 0xd4, 0x01, 0xf6, 0xcb, - 0xd4, 0x01, 0xf7, 0xcc, 0xd4, 0x01, 0xf8, 0xcd, 0xd4, 0x01, 0xf9, 0xce, - 0xd4, 0x01, 0xfa, 0xcf, 0xd4, 0x41, 0xe1, 0x9c, 0xd4, 0x01, 0xe3, 0x9e, - 0xd4, 0x01, 0xe4, 0x9f, 0xd4, 0x01, 0xe7, 0xa2, 0xd4, 0x01, 0xea, 0xa5, - 0xd4, 0x01, 0xeb, 0xa6, 0xd4, 0x01, 0xee, 0xa9, 0xd4, 0x01, 0xef, 0xaa, - 0xd4, 0x01, 0xf0, 0xab, 0xd4, 0x01, 0xf1, 0xac, 0xd4, 0x01, 0xf3, 0xae, - 0xd4, 0x01, 0xf4, 0xaf, 0xd4, 0x01, 0xf5, 0xb0, 0xd4, 0x01, 0xf6, 0xb1, - 0xd4, 0x01, 0xf7, 0xb2, 0xd4, 0x01, 0xf8, 0xb3, 0xd4, 0x01, 0xf9, 0xb4, - 0xd4, 0x01, 0xfa, 0xb5, 0xd4, 0x41, 0x05, 0x9a, 0x5f, 0xfe, 0x03, 0x08, - 0xb9, 0x05, 0x91, 0x03, 0x06, 0xc4, 0x06, 0xca, 0x02, 0x07, 0x38, 0xcf, - 0x6d, 0x06, 0x0c, 0x07, 0x01, 0xff, 0xe1, 0xba, 0xd5, 0x01, 0xe2, 0xbb, - 0xd5, 0x01, 0xe3, 0xbc, 0xd5, 0x01, 0xe4, 0xbd, 0xd5, 0x01, 0xe5, 0xbe, - 0xd5, 0x01, 0xe6, 0xbf, 0xd5, 0x01, 0xe7, 0xc0, 0xd5, 0x01, 0xe8, 0xc1, - 0xd5, 0x01, 0xe9, 0xc2, 0xd5, 0x01, 0xea, 0xc3, 0xd5, 0x01, 0xeb, 0xc4, - 0xd5, 0x01, 0xec, 0xc5, 0xd5, 0x01, 0xed, 0xc6, 0xd5, 0x01, 0xee, 0xc7, - 0xd5, 0x01, 0xef, 0xc8, 0xd5, 0x01, 0xf0, 0xc9, 0xd5, 0x01, 0xf1, 0xca, - 0xd5, 0x01, 0xf2, 0xcb, 0xd5, 0x01, 0xf3, 0xcc, 0xd5, 0x01, 0xf4, 0xcd, - 0xd5, 0x01, 0xf5, 0xce, 0xd5, 0x01, 0xf6, 0xcf, 0xd5, 0x01, 0xf7, 0xd0, - 0xd5, 0x01, 0xf8, 0xd1, 0xd5, 0x01, 0xf9, 0xd2, 0xd5, 0x01, 0xfa, 0xd3, - 0xd5, 0x41, 0x08, 0xb9, 0x05, 0x6d, 0x06, 0x0c, 0x07, 0x01, 0xff, 0xe1, - 0x22, 0xd6, 0x01, 0xe2, 0x23, 0xd6, 0x01, 0xe3, 0x24, 0xd6, 0x01, 0xe4, - 0x25, 0xd6, 0x01, 0xe5, 0x26, 0xd6, 0x01, 0xe6, 0x27, 0xd6, 0x01, 0xe7, - 0x28, 0xd6, 0x01, 0xe8, 0x29, 0xd6, 0x01, 0xe9, 0x2a, 0xd6, 0x01, 0xea, - 0x2b, 0xd6, 0x01, 0xeb, 0x2c, 0xd6, 0x01, 0xec, 0x2d, 0xd6, 0x01, 0xed, - 0x2e, 0xd6, 0x01, 0xee, 0x2f, 0xd6, 0x01, 0xef, 0x30, 0xd6, 0x01, 0xf0, - 0x31, 0xd6, 0x01, 0xf1, 0x32, 0xd6, 0x01, 0xf2, 0x33, 0xd6, 0x01, 0xf3, - 0x34, 0xd6, 0x01, 0xf4, 0x35, 0xd6, 0x01, 0xf5, 0x36, 0xd6, 0x01, 0xf6, - 0x37, 0xd6, 0x01, 0xf7, 0x38, 0xd6, 0x01, 0xf8, 0x39, 0xd6, 0x01, 0xf9, - 0x3a, 0xd6, 0x01, 0xfa, 0x3b, 0xd6, 0x41, 0xe1, 0x08, 0xd6, 0x01, 0xe2, - 0x09, 0xd6, 0x01, 0xe3, 0x0a, 0xd6, 0x01, 0xe4, 0x0b, 0xd6, 0x01, 0xe5, - 0x0c, 0xd6, 0x01, 0xe6, 0x0d, 0xd6, 0x01, 0xe7, 0x0e, 0xd6, 0x01, 0xe8, - 0x0f, 0xd6, 0x01, 0xe9, 0x10, 0xd6, 0x01, 0xea, 0x11, 0xd6, 0x01, 0xeb, - 0x12, 0xd6, 0x01, 0xec, 0x13, 0xd6, 0x01, 0xed, 0x14, 0xd6, 0x01, 0xee, - 0x15, 0xd6, 0x01, 0xef, 0x16, 0xd6, 0x01, 0xf0, 0x17, 0xd6, 0x01, 0xf1, - 0x18, 0xd6, 0x01, 0xf2, 0x19, 0xd6, 0x01, 0xf3, 0x1a, 0xd6, 0x01, 0xf4, - 0x1b, 0xd6, 0x01, 0xf5, 0x1c, 0xd6, 0x01, 0xf6, 0x1d, 0xd6, 0x01, 0xf7, - 0x1e, 0xd6, 0x01, 0xf8, 0x1f, 0xd6, 0x01, 0xf9, 0x20, 0xd6, 0x01, 0xfa, - 0x21, 0xd6, 0x41, 0x45, 0xc3, 0x0a, 0xea, 0xd7, 0x01, 0xa6, 0x2e, 0x44, - 0x46, 0x2a, 0xeb, 0xd7, 0x01, 0x43, 0xbf, 0x0a, 0xe3, 0xd7, 0x01, 0xb3, - 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xe2, 0xd7, 0x41, 0x44, 0x25, 0x01, - 0xe5, 0xd7, 0x01, 0x42, 0x15, 0x02, 0xe4, 0xd7, 0x41, 0x44, 0x27, 0x1d, - 0xe9, 0xd7, 0x01, 0x42, 0x60, 0x25, 0xe8, 0xd7, 0x41, 0x43, 0xa7, 0x05, - 0xe7, 0xd7, 0x01, 0x43, 0xcb, 0x06, 0xe6, 0xd7, 0x41, 0xe1, 0xa0, 0xd5, - 0x01, 0xe2, 0xa1, 0xd5, 0x01, 0xe3, 0xa2, 0xd5, 0x01, 0xe4, 0xa3, 0xd5, - 0x01, 0xe5, 0xa4, 0xd5, 0x01, 0xe6, 0xa5, 0xd5, 0x01, 0xe7, 0xa6, 0xd5, - 0x01, 0xe8, 0xa7, 0xd5, 0x01, 0xe9, 0xa8, 0xd5, 0x01, 0xea, 0xa9, 0xd5, - 0x01, 0xeb, 0xaa, 0xd5, 0x01, 0xec, 0xab, 0xd5, 0x01, 0xed, 0xac, 0xd5, - 0x01, 0xee, 0xad, 0xd5, 0x01, 0xef, 0xae, 0xd5, 0x01, 0xf0, 0xaf, 0xd5, - 0x01, 0xf1, 0xb0, 0xd5, 0x01, 0xf2, 0xb1, 0xd5, 0x01, 0xf3, 0xb2, 0xd5, - 0x01, 0xf4, 0xb3, 0xd5, 0x01, 0xf5, 0xb4, 0xd5, 0x01, 0xf6, 0xb5, 0xd5, - 0x01, 0xf7, 0xb6, 0xd5, 0x01, 0xf8, 0xb7, 0xd5, 0x01, 0xf9, 0xb8, 0xd5, - 0x01, 0xfa, 0xb9, 0xd5, 0x41, 0x08, 0xb9, 0x05, 0x87, 0x08, 0x06, 0xc4, - 0x06, 0xc0, 0x07, 0x4e, 0x62, 0x15, 0x8a, 0xd7, 0x01, 0x07, 0x38, 0xcf, - 0xc9, 0x02, 0x4c, 0xe1, 0x8e, 0x8c, 0xd7, 0x01, 0x45, 0xca, 0xe5, 0x6f, - 0xd7, 0x01, 0xb0, 0xa8, 0x02, 0x4a, 0xf1, 0xad, 0x8e, 0xd7, 0x01, 0x06, - 0x0c, 0x07, 0x06, 0x4c, 0xf1, 0x93, 0x8b, 0xd7, 0x41, 0xe1, 0xee, 0xd5, - 0x81, 0x8c, 0x02, 0xe2, 0xef, 0xd5, 0x81, 0x80, 0x02, 0xe3, 0xf0, 0xd5, - 0x81, 0xf4, 0x01, 0xe4, 0xf1, 0xd5, 0x81, 0xe8, 0x01, 0xe5, 0xf2, 0xd5, - 0x81, 0xd6, 0x01, 0xe6, 0xf3, 0xd5, 0x81, 0xca, 0x01, 0xe7, 0xf4, 0xd5, - 0x81, 0xbe, 0x01, 0xe8, 0xf5, 0xd5, 0x01, 0xe9, 0xf6, 0xd5, 0x81, 0xae, - 0x01, 0xea, 0xf7, 0xd5, 0x01, 0xeb, 0xf8, 0xd5, 0x81, 0x9e, 0x01, 0xec, - 0xf9, 0xd5, 0x81, 0x92, 0x01, 0xed, 0xfa, 0xd5, 0x81, 0x88, 0x01, 0xee, - 0xfb, 0xd5, 0x81, 0x7f, 0xef, 0xfc, 0xd5, 0x81, 0x6b, 0xf0, 0xfd, 0xd5, - 0x81, 0x56, 0xf1, 0xfe, 0xd5, 0x01, 0xf2, 0xff, 0xd5, 0x81, 0x47, 0xf3, - 0x00, 0xd6, 0x81, 0x3c, 0xf4, 0x01, 0xd6, 0x81, 0x2b, 0xf5, 0x02, 0xd6, - 0x81, 0x20, 0xf6, 0x03, 0xd6, 0x01, 0xf7, 0x04, 0xd6, 0x01, 0xf8, 0x05, - 0xd6, 0x81, 0x0f, 0xf9, 0x06, 0xd6, 0x01, 0xfa, 0x07, 0xd6, 0xc1, 0x00, - 0x43, 0x45, 0x0f, 0x75, 0xd7, 0x41, 0xe9, 0x7d, 0xd7, 0x41, 0x46, 0x63, - 0x15, 0x84, 0xd7, 0x41, 0x42, 0xd7, 0x23, 0x83, 0xd7, 0x01, 0x44, 0xf2, - 0x93, 0x77, 0xd7, 0x41, 0x44, 0x1d, 0x1f, 0x82, 0xd7, 0x41, 0x42, 0x0b, - 0x00, 0x80, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x85, 0xd7, 0x01, 0xe9, 0x7f, - 0xd7, 0x01, 0x42, 0x2f, 0x03, 0x87, 0xd7, 0x41, 0xad, 0x01, 0xff, 0x43, - 0xa3, 0x05, 0x88, 0xd7, 0x01, 0x45, 0x3a, 0xe4, 0x7e, 0xd7, 0x41, 0xf5, - 0x7c, 0xd7, 0x41, 0xf5, 0x7b, 0xd7, 0x41, 0x44, 0xfe, 0xe4, 0x7a, 0xd7, - 0x41, 0x44, 0xe2, 0x8e, 0x79, 0xd7, 0x41, 0x43, 0xf0, 0x04, 0x78, 0xd7, - 0x41, 0x44, 0x5e, 0x20, 0x72, 0xd7, 0x41, 0x4a, 0xfe, 0x99, 0x81, 0xd7, - 0x41, 0x46, 0x63, 0x15, 0x74, 0xd7, 0x01, 0x42, 0x12, 0x00, 0x76, 0xd7, - 0x41, 0x44, 0x6c, 0xd3, 0x73, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x86, 0xd7, - 0x41, 0x43, 0x45, 0x0f, 0x71, 0xd7, 0x41, 0x44, 0x2f, 0xe1, 0x70, 0xd7, - 0x41, 0x53, 0x18, 0x47, 0x89, 0xd7, 0x01, 0x49, 0x30, 0xb7, 0x8d, 0xd7, - 0x01, 0x48, 0x0b, 0xaa, 0x8f, 0xd7, 0x41, 0x08, 0xb9, 0x05, 0xcf, 0x02, - 0x4e, 0x62, 0x15, 0xc4, 0xd7, 0x01, 0x4c, 0xe1, 0x8e, 0xc6, 0xd7, 0x01, - 0x45, 0xca, 0xe5, 0xa9, 0xd7, 0x01, 0xb0, 0xa8, 0x02, 0x4a, 0xf1, 0xad, - 0xc8, 0xd7, 0x01, 0x06, 0x0c, 0x07, 0x06, 0x4c, 0xf1, 0x93, 0xc5, 0xd7, - 0x41, 0xe1, 0x56, 0xd6, 0x81, 0x8c, 0x02, 0xe2, 0x57, 0xd6, 0x81, 0x80, - 0x02, 0xe3, 0x58, 0xd6, 0x81, 0xf4, 0x01, 0xe4, 0x59, 0xd6, 0x81, 0xe8, - 0x01, 0xe5, 0x5a, 0xd6, 0x81, 0xd6, 0x01, 0xe6, 0x5b, 0xd6, 0x81, 0xca, - 0x01, 0xe7, 0x5c, 0xd6, 0x81, 0xbe, 0x01, 0xe8, 0x5d, 0xd6, 0x01, 0xe9, - 0x5e, 0xd6, 0x81, 0xae, 0x01, 0xea, 0x5f, 0xd6, 0x01, 0xeb, 0x60, 0xd6, - 0x81, 0x9e, 0x01, 0xec, 0x61, 0xd6, 0x81, 0x92, 0x01, 0xed, 0x62, 0xd6, - 0x81, 0x88, 0x01, 0xee, 0x63, 0xd6, 0x81, 0x7f, 0xef, 0x64, 0xd6, 0x81, - 0x6b, 0xf0, 0x65, 0xd6, 0x81, 0x56, 0xf1, 0x66, 0xd6, 0x01, 0xf2, 0x67, - 0xd6, 0x81, 0x47, 0xf3, 0x68, 0xd6, 0x81, 0x3c, 0xf4, 0x69, 0xd6, 0x81, - 0x2b, 0xf5, 0x6a, 0xd6, 0x81, 0x20, 0xf6, 0x6b, 0xd6, 0x01, 0xf7, 0x6c, - 0xd6, 0x01, 0xf8, 0x6d, 0xd6, 0x81, 0x0f, 0xf9, 0x6e, 0xd6, 0x01, 0xfa, - 0x6f, 0xd6, 0xc1, 0x00, 0x43, 0x45, 0x0f, 0xaf, 0xd7, 0x41, 0xe9, 0xb7, - 0xd7, 0x41, 0x46, 0x63, 0x15, 0xbe, 0xd7, 0x41, 0x42, 0xd7, 0x23, 0xbd, - 0xd7, 0x01, 0x44, 0xf2, 0x93, 0xb1, 0xd7, 0x41, 0x44, 0x1d, 0x1f, 0xbc, - 0xd7, 0x41, 0x42, 0x0b, 0x00, 0xba, 0xd7, 0x41, 0x42, 0x49, 0x00, 0xbf, - 0xd7, 0x01, 0xe9, 0xb9, 0xd7, 0x01, 0x42, 0x2f, 0x03, 0xc1, 0xd7, 0x41, - 0xad, 0x01, 0xff, 0x43, 0xa3, 0x05, 0xc2, 0xd7, 0x01, 0x45, 0x3a, 0xe4, - 0xb8, 0xd7, 0x41, 0xf5, 0xb6, 0xd7, 0x41, 0xf5, 0xb5, 0xd7, 0x41, 0x44, - 0xfe, 0xe4, 0xb4, 0xd7, 0x41, 0x44, 0xe2, 0x8e, 0xb3, 0xd7, 0x41, 0x43, - 0xf0, 0x04, 0xb2, 0xd7, 0x41, 0x44, 0x5e, 0x20, 0xac, 0xd7, 0x41, 0x4a, - 0xfe, 0x99, 0xbb, 0xd7, 0x41, 0x46, 0x63, 0x15, 0xae, 0xd7, 0x01, 0x42, - 0x12, 0x00, 0xb0, 0xd7, 0x41, 0x44, 0x6c, 0xd3, 0xad, 0xd7, 0x41, 0x42, - 0x49, 0x00, 0xc0, 0xd7, 0x41, 0x43, 0x45, 0x0f, 0xab, 0xd7, 0x41, 0x44, - 0x2f, 0xe1, 0xaa, 0xd7, 0x41, 0x53, 0x18, 0x47, 0xc3, 0xd7, 0x01, 0x49, - 0x30, 0xb7, 0xc7, 0xd7, 0x01, 0x48, 0x0b, 0xaa, 0xc9, 0xd7, 0x41, 0xe1, - 0x3c, 0xd6, 0x81, 0x8c, 0x02, 0xe2, 0x3d, 0xd6, 0x81, 0x80, 0x02, 0xe3, - 0x3e, 0xd6, 0x81, 0xf4, 0x01, 0xe4, 0x3f, 0xd6, 0x81, 0xe8, 0x01, 0xe5, - 0x40, 0xd6, 0x81, 0xd6, 0x01, 0xe6, 0x41, 0xd6, 0x01, 0xe7, 0x42, 0xd6, - 0x81, 0xc6, 0x01, 0xe8, 0x43, 0xd6, 0x01, 0xe9, 0x44, 0xd6, 0x81, 0xb6, - 0x01, 0xea, 0x45, 0xd6, 0x01, 0xeb, 0x46, 0xd6, 0x81, 0xa6, 0x01, 0xec, - 0x47, 0xd6, 0x81, 0x9a, 0x01, 0xed, 0x48, 0xd6, 0x81, 0x90, 0x01, 0xee, - 0x49, 0xd6, 0x81, 0x86, 0x01, 0xef, 0x4a, 0xd6, 0x81, 0x72, 0xf0, 0x4b, - 0xd6, 0x81, 0x5d, 0xf1, 0x4c, 0xd6, 0x01, 0xf2, 0x4d, 0xd6, 0x81, 0x4e, - 0xf3, 0x4e, 0xd6, 0x81, 0x43, 0xf4, 0x4f, 0xd6, 0x81, 0x2b, 0xf5, 0x50, - 0xd6, 0x81, 0x20, 0xf6, 0x51, 0xd6, 0x01, 0xf7, 0x52, 0xd6, 0x01, 0xf8, - 0x53, 0xd6, 0x81, 0x0f, 0xf9, 0x54, 0xd6, 0x01, 0xfa, 0x55, 0xd6, 0xc1, - 0x00, 0x43, 0x45, 0x0f, 0x95, 0xd7, 0x41, 0xe9, 0x9d, 0xd7, 0x41, 0x46, - 0x63, 0x15, 0xa4, 0xd7, 0x41, 0x42, 0xd7, 0x23, 0xa3, 0xd7, 0x01, 0x44, - 0xf2, 0x93, 0x97, 0xd7, 0xc1, 0x00, 0x47, 0xea, 0x07, 0xa1, 0xd7, 0x41, - 0x44, 0x1d, 0x1f, 0xa2, 0xd7, 0x41, 0x42, 0x0b, 0x00, 0xa0, 0xd7, 0x41, - 0x42, 0x49, 0x00, 0xa5, 0xd7, 0x01, 0xe9, 0x9f, 0xd7, 0x01, 0x42, 0x2f, - 0x03, 0xa7, 0xd7, 0x41, 0xad, 0x01, 0xff, 0x43, 0xa3, 0x05, 0xa8, 0xd7, - 0x01, 0x45, 0x3a, 0xe4, 0x9e, 0xd7, 0x41, 0xf5, 0x9c, 0xd7, 0x41, 0xf5, - 0x9b, 0xd7, 0x41, 0x44, 0xfe, 0xe4, 0x9a, 0xd7, 0x41, 0x44, 0xe2, 0x8e, - 0x99, 0xd7, 0x41, 0x43, 0xf0, 0x04, 0x98, 0xd7, 0x41, 0x44, 0x5e, 0x20, - 0x92, 0xd7, 0x41, 0x46, 0x63, 0x15, 0x94, 0xd7, 0x01, 0x42, 0x12, 0x00, - 0x96, 0xd7, 0x41, 0x44, 0x6c, 0xd3, 0x93, 0xd7, 0x41, 0x42, 0x49, 0x00, - 0xa6, 0xd7, 0x41, 0x43, 0x45, 0x0f, 0x91, 0xd7, 0x41, 0x44, 0x2f, 0xe1, - 0x90, 0xd7, 0x41, 0x45, 0xc3, 0x0a, 0xf4, 0xd7, 0x01, 0xa6, 0x2e, 0x44, - 0x46, 0x2a, 0xf5, 0xd7, 0x01, 0x43, 0xbf, 0x0a, 0xed, 0xd7, 0x01, 0xb3, - 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xec, 0xd7, 0x41, 0x44, 0x25, 0x01, - 0xef, 0xd7, 0x01, 0x42, 0x15, 0x02, 0xee, 0xd7, 0x41, 0x44, 0x27, 0x1d, - 0xf3, 0xd7, 0x01, 0x42, 0x60, 0x25, 0xf2, 0xd7, 0x41, 0x43, 0xa7, 0x05, - 0xf1, 0xd7, 0x01, 0x43, 0xcb, 0x06, 0xf0, 0xd7, 0x41, 0xe1, 0xd4, 0xd5, - 0x81, 0x8c, 0x02, 0xe2, 0xd5, 0xd5, 0x81, 0x80, 0x02, 0xe3, 0xd6, 0xd5, - 0x81, 0xf4, 0x01, 0xe4, 0xd7, 0xd5, 0x81, 0xe8, 0x01, 0xe5, 0xd8, 0xd5, - 0x81, 0xd6, 0x01, 0xe6, 0xd9, 0xd5, 0x01, 0xe7, 0xda, 0xd5, 0x81, 0xc6, - 0x01, 0xe8, 0xdb, 0xd5, 0x01, 0xe9, 0xdc, 0xd5, 0x81, 0xb6, 0x01, 0xea, - 0xdd, 0xd5, 0x01, 0xeb, 0xde, 0xd5, 0x81, 0xa6, 0x01, 0xec, 0xdf, 0xd5, - 0x81, 0x9a, 0x01, 0xed, 0xe0, 0xd5, 0x81, 0x90, 0x01, 0xee, 0xe1, 0xd5, - 0x81, 0x86, 0x01, 0xef, 0xe2, 0xd5, 0x81, 0x72, 0xf0, 0xe3, 0xd5, 0x81, - 0x5d, 0xf1, 0xe4, 0xd5, 0x01, 0xf2, 0xe5, 0xd5, 0x81, 0x4e, 0xf3, 0xe6, - 0xd5, 0x81, 0x43, 0xf4, 0xe7, 0xd5, 0x81, 0x2b, 0xf5, 0xe8, 0xd5, 0x81, - 0x20, 0xf6, 0xe9, 0xd5, 0x01, 0xf7, 0xea, 0xd5, 0x01, 0xf8, 0xeb, 0xd5, - 0x81, 0x0f, 0xf9, 0xec, 0xd5, 0x01, 0xfa, 0xed, 0xd5, 0xc1, 0x00, 0x43, - 0x45, 0x0f, 0x5b, 0xd7, 0x41, 0xe9, 0x63, 0xd7, 0x41, 0x46, 0x63, 0x15, - 0x6a, 0xd7, 0x41, 0x42, 0xd7, 0x23, 0x69, 0xd7, 0x01, 0x44, 0xf2, 0x93, - 0x5d, 0xd7, 0xc1, 0x00, 0x47, 0xea, 0x07, 0x67, 0xd7, 0x41, 0x44, 0x1d, - 0x1f, 0x68, 0xd7, 0x41, 0x42, 0x0b, 0x00, 0x66, 0xd7, 0x41, 0x42, 0x49, - 0x00, 0x6b, 0xd7, 0x01, 0xe9, 0x65, 0xd7, 0x01, 0x42, 0x2f, 0x03, 0x6d, - 0xd7, 0x41, 0xad, 0x01, 0xff, 0x43, 0xa3, 0x05, 0x6e, 0xd7, 0x01, 0x45, - 0x3a, 0xe4, 0x64, 0xd7, 0x41, 0xf5, 0x62, 0xd7, 0x41, 0xf5, 0x61, 0xd7, - 0x41, 0x44, 0xfe, 0xe4, 0x60, 0xd7, 0x41, 0x44, 0xe2, 0x8e, 0x5f, 0xd7, - 0x41, 0x43, 0xf0, 0x04, 0x5e, 0xd7, 0x41, 0x44, 0x5e, 0x20, 0x58, 0xd7, - 0x41, 0x46, 0x63, 0x15, 0x5a, 0xd7, 0x01, 0x42, 0x12, 0x00, 0x5c, 0xd7, - 0x41, 0x44, 0x6c, 0xd3, 0x59, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x6c, 0xd7, - 0x41, 0x43, 0x45, 0x0f, 0x57, 0xd7, 0x41, 0x44, 0x2f, 0xe1, 0x56, 0xd7, - 0x41, 0x04, 0xca, 0x00, 0x06, 0x4d, 0x52, 0x30, 0xcb, 0x27, 0x40, 0x4d, - 0xef, 0x0e, 0xe9, 0x27, 0x00, 0x54, 0x97, 0x40, 0xeb, 0x27, 0x00, 0x55, - 0x60, 0x3a, 0xef, 0x27, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, 0x4e, 0x27, - 0x26, 0xe7, 0x27, 0x00, 0x56, 0x05, 0x09, 0xed, 0x27, 0x40, 0x08, 0xb9, - 0x05, 0xb3, 0x01, 0x06, 0xc4, 0x06, 0x6d, 0x06, 0x0c, 0x07, 0x01, 0xff, - 0xe1, 0x8a, 0xd6, 0x01, 0xe2, 0x8b, 0xd6, 0x01, 0xe3, 0x8c, 0xd6, 0x01, - 0xe4, 0x8d, 0xd6, 0x01, 0xe5, 0x8e, 0xd6, 0x01, 0xe6, 0x8f, 0xd6, 0x01, - 0xe7, 0x90, 0xd6, 0x01, 0xe8, 0x91, 0xd6, 0x01, 0xe9, 0x92, 0xd6, 0x01, - 0xea, 0x93, 0xd6, 0x01, 0xeb, 0x94, 0xd6, 0x01, 0xec, 0x95, 0xd6, 0x01, - 0xed, 0x96, 0xd6, 0x01, 0xee, 0x97, 0xd6, 0x01, 0xef, 0x98, 0xd6, 0x01, - 0xf0, 0x99, 0xd6, 0x01, 0xf1, 0x9a, 0xd6, 0x01, 0xf2, 0x9b, 0xd6, 0x01, - 0xf3, 0x9c, 0xd6, 0x01, 0xf4, 0x9d, 0xd6, 0x01, 0xf5, 0x9e, 0xd6, 0x01, - 0xf6, 0x9f, 0xd6, 0x01, 0xf7, 0xa0, 0xd6, 0x01, 0xf8, 0xa1, 0xd6, 0x01, - 0xf9, 0xa2, 0xd6, 0x01, 0xfa, 0xa3, 0xd6, 0x41, 0x45, 0xc3, 0x0a, 0xfe, - 0xd7, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xff, 0xd7, 0x01, 0x43, 0xbf, - 0x0a, 0xf7, 0xd7, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xf6, - 0xd7, 0x41, 0x44, 0x25, 0x01, 0xf9, 0xd7, 0x01, 0x42, 0x15, 0x02, 0xf8, - 0xd7, 0x41, 0x44, 0x27, 0x1d, 0xfd, 0xd7, 0x01, 0x42, 0x60, 0x25, 0xfc, - 0xd7, 0x41, 0x43, 0xa7, 0x05, 0xfb, 0xd7, 0x01, 0x43, 0xcb, 0x06, 0xfa, - 0xd7, 0x41, 0xe1, 0x70, 0xd6, 0x01, 0xe2, 0x71, 0xd6, 0x01, 0xe3, 0x72, - 0xd6, 0x01, 0xe4, 0x73, 0xd6, 0x01, 0xe5, 0x74, 0xd6, 0x01, 0xe6, 0x75, - 0xd6, 0x01, 0xe7, 0x76, 0xd6, 0x01, 0xe8, 0x77, 0xd6, 0x01, 0xe9, 0x78, - 0xd6, 0x01, 0xea, 0x79, 0xd6, 0x01, 0xeb, 0x7a, 0xd6, 0x01, 0xec, 0x7b, - 0xd6, 0x01, 0xed, 0x7c, 0xd6, 0x01, 0xee, 0x7d, 0xd6, 0x01, 0xef, 0x7e, - 0xd6, 0x01, 0xf0, 0x7f, 0xd6, 0x01, 0xf1, 0x80, 0xd6, 0x01, 0xf2, 0x81, - 0xd6, 0x01, 0xf3, 0x82, 0xd6, 0x01, 0xf4, 0x83, 0xd6, 0x01, 0xf5, 0x84, - 0xd6, 0x01, 0xf6, 0x85, 0xd6, 0x01, 0xf7, 0x86, 0xd6, 0x01, 0xf8, 0x87, - 0xd6, 0x01, 0xf9, 0x88, 0xd6, 0x01, 0xfa, 0x89, 0xd6, 0x41, 0x4d, 0xef, - 0x0e, 0xe8, 0x27, 0x00, 0x54, 0x97, 0x40, 0xea, 0x27, 0x00, 0x55, 0x60, - 0x3a, 0xee, 0x27, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, 0x4e, 0x27, 0x26, - 0xe6, 0x27, 0x00, 0x56, 0x05, 0x09, 0xec, 0x27, 0x40, 0x08, 0xb9, 0x05, - 0xd8, 0x02, 0x4e, 0x62, 0x15, 0x16, 0xd7, 0x01, 0x4c, 0xe1, 0x8e, 0x18, - 0xd7, 0x01, 0x45, 0xca, 0xe5, 0xfb, 0xd6, 0x01, 0xb0, 0xb1, 0x02, 0x4a, - 0xf1, 0xad, 0x1a, 0xd7, 0x01, 0x06, 0x0c, 0x07, 0x06, 0x4c, 0xf1, 0x93, - 0x17, 0xd7, 0x41, 0xe1, 0x4e, 0xd4, 0x81, 0x95, 0x02, 0xe2, 0x4f, 0xd4, - 0x81, 0x89, 0x02, 0xe3, 0x50, 0xd4, 0x81, 0xfd, 0x01, 0xe4, 0x51, 0xd4, - 0x81, 0xe4, 0x01, 0xe5, 0x52, 0xd4, 0x81, 0xd2, 0x01, 0xe6, 0x53, 0xd4, - 0x81, 0xc6, 0x01, 0xe7, 0x54, 0xd4, 0x81, 0xba, 0x01, 0xe9, 0x56, 0xd4, - 0x81, 0xae, 0x01, 0xea, 0x57, 0xd4, 0x01, 0xeb, 0x58, 0xd4, 0x81, 0x9e, - 0x01, 0xec, 0x59, 0xd4, 0x81, 0x92, 0x01, 0xed, 0x5a, 0xd4, 0x81, 0x88, - 0x01, 0xee, 0x5b, 0xd4, 0x81, 0x7f, 0xef, 0x5c, 0xd4, 0x81, 0x6b, 0xf0, - 0x5d, 0xd4, 0x81, 0x56, 0xf1, 0x5e, 0xd4, 0x01, 0xf2, 0x5f, 0xd4, 0x81, - 0x47, 0xf3, 0x60, 0xd4, 0x81, 0x3c, 0xf4, 0x61, 0xd4, 0x81, 0x2b, 0xf5, - 0x62, 0xd4, 0x81, 0x20, 0xf6, 0x63, 0xd4, 0x01, 0xf7, 0x64, 0xd4, 0x01, - 0xf8, 0x65, 0xd4, 0x81, 0x0f, 0xf9, 0x66, 0xd4, 0x01, 0xfa, 0x67, 0xd4, - 0xc1, 0x00, 0x43, 0x45, 0x0f, 0x01, 0xd7, 0x41, 0xe9, 0x09, 0xd7, 0x41, - 0x46, 0x63, 0x15, 0x10, 0xd7, 0x41, 0x42, 0xd7, 0x23, 0x0f, 0xd7, 0x01, - 0x44, 0xf2, 0x93, 0x03, 0xd7, 0x41, 0x44, 0x1d, 0x1f, 0x0e, 0xd7, 0x41, - 0x42, 0x0b, 0x00, 0x0c, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x11, 0xd7, 0x01, - 0xe9, 0x0b, 0xd7, 0x01, 0x42, 0x2f, 0x03, 0x13, 0xd7, 0x41, 0xad, 0x01, - 0xff, 0x43, 0xa3, 0x05, 0x14, 0xd7, 0x01, 0x45, 0x3a, 0xe4, 0x0a, 0xd7, - 0x41, 0xf5, 0x08, 0xd7, 0x41, 0xf5, 0x07, 0xd7, 0x41, 0x44, 0xfe, 0xe4, - 0x06, 0xd7, 0x41, 0x44, 0xe2, 0x8e, 0x05, 0xd7, 0x41, 0x43, 0xf0, 0x04, - 0x04, 0xd7, 0x41, 0x44, 0x5e, 0x20, 0xfe, 0xd6, 0x41, 0x4a, 0xfe, 0x99, - 0x0d, 0xd7, 0x41, 0x46, 0x63, 0x15, 0x00, 0xd7, 0x01, 0x42, 0x12, 0x00, - 0x02, 0xd7, 0x41, 0x44, 0x6c, 0xd3, 0xff, 0xd6, 0x01, 0x07, 0x84, 0x40, - 0x01, 0xff, 0xe9, 0xa4, 0xd6, 0x01, 0xea, 0xa5, 0xd6, 0x41, 0x42, 0x49, - 0x00, 0x12, 0xd7, 0x41, 0x43, 0x45, 0x0f, 0xfd, 0xd6, 0x41, 0x44, 0x2f, - 0xe1, 0xfc, 0xd6, 0x41, 0x53, 0x18, 0x47, 0x15, 0xd7, 0x01, 0x49, 0x30, - 0xb7, 0x19, 0xd7, 0x01, 0x48, 0x0b, 0xaa, 0x1b, 0xd7, 0x41, 0xe1, 0x34, - 0xd4, 0x81, 0x8c, 0x02, 0xe2, 0x35, 0xd4, 0x81, 0x80, 0x02, 0xe3, 0x36, - 0xd4, 0x81, 0xf4, 0x01, 0xe4, 0x37, 0xd4, 0x81, 0xe8, 0x01, 0xe5, 0x38, - 0xd4, 0x81, 0xd6, 0x01, 0xe6, 0x39, 0xd4, 0x01, 0xe7, 0x3a, 0xd4, 0x81, - 0xc6, 0x01, 0xe8, 0x3b, 0xd4, 0x01, 0xe9, 0x3c, 0xd4, 0x81, 0xb6, 0x01, - 0xea, 0x3d, 0xd4, 0x01, 0xeb, 0x3e, 0xd4, 0x81, 0xa6, 0x01, 0xec, 0x3f, - 0xd4, 0x81, 0x9a, 0x01, 0xed, 0x40, 0xd4, 0x81, 0x90, 0x01, 0xee, 0x41, - 0xd4, 0x81, 0x86, 0x01, 0xef, 0x42, 0xd4, 0x81, 0x72, 0xf0, 0x43, 0xd4, - 0x81, 0x5d, 0xf1, 0x44, 0xd4, 0x01, 0xf2, 0x45, 0xd4, 0x81, 0x4e, 0xf3, - 0x46, 0xd4, 0x81, 0x43, 0xf4, 0x47, 0xd4, 0x81, 0x2b, 0xf5, 0x48, 0xd4, - 0x81, 0x20, 0xf6, 0x49, 0xd4, 0x01, 0xf7, 0x4a, 0xd4, 0x01, 0xf8, 0x4b, - 0xd4, 0x81, 0x0f, 0xf9, 0x4c, 0xd4, 0x01, 0xfa, 0x4d, 0xd4, 0xc1, 0x00, - 0x43, 0x45, 0x0f, 0xe7, 0xd6, 0x41, 0xe9, 0xef, 0xd6, 0x41, 0x46, 0x63, - 0x15, 0xf6, 0xd6, 0x41, 0x42, 0xd7, 0x23, 0xf5, 0xd6, 0x01, 0x44, 0xf2, - 0x93, 0xe9, 0xd6, 0xc1, 0x00, 0x47, 0xea, 0x07, 0xf3, 0xd6, 0x41, 0x44, - 0x1d, 0x1f, 0xf4, 0xd6, 0x41, 0x42, 0x0b, 0x00, 0xf2, 0xd6, 0x41, 0x42, - 0x49, 0x00, 0xf7, 0xd6, 0x01, 0xe9, 0xf1, 0xd6, 0x01, 0x42, 0x2f, 0x03, - 0xf9, 0xd6, 0x41, 0xad, 0x01, 0xff, 0x43, 0xa3, 0x05, 0xfa, 0xd6, 0x01, - 0x45, 0x3a, 0xe4, 0xf0, 0xd6, 0x41, 0xf5, 0xee, 0xd6, 0x41, 0xf5, 0xed, - 0xd6, 0x41, 0x44, 0xfe, 0xe4, 0xec, 0xd6, 0x41, 0x44, 0xe2, 0x8e, 0xeb, - 0xd6, 0x41, 0x43, 0xf0, 0x04, 0xea, 0xd6, 0x41, 0x44, 0x5e, 0x20, 0xe4, - 0xd6, 0x41, 0x46, 0x63, 0x15, 0xe6, 0xd6, 0x01, 0x42, 0x12, 0x00, 0xe8, - 0xd6, 0x41, 0x44, 0x6c, 0xd3, 0xe5, 0xd6, 0x41, 0x42, 0x49, 0x00, 0xf8, - 0xd6, 0x41, 0x43, 0x45, 0x0f, 0xe3, 0xd6, 0x41, 0x44, 0x2f, 0xe1, 0xe2, - 0xd6, 0x41, 0x4f, 0x53, 0x38, 0xcd, 0x27, 0x00, 0x07, 0xb3, 0xc3, 0x01, - 0xff, 0x08, 0xb9, 0x05, 0x6d, 0x06, 0x0c, 0x07, 0x01, 0xff, 0xe1, 0x1e, - 0xd5, 0x01, 0xe2, 0x1f, 0xd5, 0x01, 0xe3, 0x20, 0xd5, 0x01, 0xe4, 0x21, - 0xd5, 0x01, 0xe5, 0x22, 0xd5, 0x01, 0xe6, 0x23, 0xd5, 0x01, 0xe7, 0x24, - 0xd5, 0x01, 0xe8, 0x25, 0xd5, 0x01, 0xe9, 0x26, 0xd5, 0x01, 0xea, 0x27, - 0xd5, 0x01, 0xeb, 0x28, 0xd5, 0x01, 0xec, 0x29, 0xd5, 0x01, 0xed, 0x2a, - 0xd5, 0x01, 0xee, 0x2b, 0xd5, 0x01, 0xef, 0x2c, 0xd5, 0x01, 0xf0, 0x2d, - 0xd5, 0x01, 0xf1, 0x2e, 0xd5, 0x01, 0xf2, 0x2f, 0xd5, 0x01, 0xf3, 0x30, - 0xd5, 0x01, 0xf4, 0x31, 0xd5, 0x01, 0xf5, 0x32, 0xd5, 0x01, 0xf6, 0x33, - 0xd5, 0x01, 0xf7, 0x34, 0xd5, 0x01, 0xf8, 0x35, 0xd5, 0x01, 0xf9, 0x36, - 0xd5, 0x01, 0xfa, 0x37, 0xd5, 0x41, 0xe1, 0x04, 0xd5, 0x01, 0xe2, 0x05, - 0xd5, 0x01, 0xe4, 0x07, 0xd5, 0x01, 0xe5, 0x08, 0xd5, 0x01, 0xe6, 0x09, - 0xd5, 0x01, 0xe7, 0x0a, 0xd5, 0x01, 0xea, 0x0d, 0xd5, 0x01, 0xeb, 0x0e, - 0xd5, 0x01, 0xec, 0x0f, 0xd5, 0x01, 0xed, 0x10, 0xd5, 0x01, 0xee, 0x11, - 0xd5, 0x01, 0xef, 0x12, 0xd5, 0x01, 0xf0, 0x13, 0xd5, 0x01, 0xf1, 0x14, - 0xd5, 0x01, 0xf3, 0x16, 0xd5, 0x01, 0xf4, 0x17, 0xd5, 0x01, 0xf5, 0x18, - 0xd5, 0x01, 0xf6, 0x19, 0xd5, 0x01, 0xf7, 0x1a, 0xd5, 0x01, 0xf8, 0x1b, - 0xd5, 0x01, 0xf9, 0x1c, 0xd5, 0x41, 0x08, 0xb9, 0x05, 0xb3, 0x01, 0x06, - 0xc4, 0x06, 0x6d, 0x06, 0x0c, 0x07, 0x01, 0xff, 0xe1, 0x52, 0xd5, 0x01, - 0xe2, 0x53, 0xd5, 0x01, 0xe3, 0x54, 0xd5, 0x01, 0xe4, 0x55, 0xd5, 0x01, - 0xe5, 0x56, 0xd5, 0x01, 0xe6, 0x57, 0xd5, 0x01, 0xe7, 0x58, 0xd5, 0x01, - 0xe8, 0x59, 0xd5, 0x01, 0xe9, 0x5a, 0xd5, 0x01, 0xea, 0x5b, 0xd5, 0x01, - 0xeb, 0x5c, 0xd5, 0x01, 0xec, 0x5d, 0xd5, 0x01, 0xed, 0x5e, 0xd5, 0x01, - 0xee, 0x5f, 0xd5, 0x01, 0xef, 0x60, 0xd5, 0x01, 0xf0, 0x61, 0xd5, 0x01, - 0xf1, 0x62, 0xd5, 0x01, 0xf2, 0x63, 0xd5, 0x01, 0xf3, 0x64, 0xd5, 0x01, - 0xf4, 0x65, 0xd5, 0x01, 0xf5, 0x66, 0xd5, 0x01, 0xf6, 0x67, 0xd5, 0x01, - 0xf7, 0x68, 0xd5, 0x01, 0xf8, 0x69, 0xd5, 0x01, 0xf9, 0x6a, 0xd5, 0x01, - 0xfa, 0x6b, 0xd5, 0x41, 0x45, 0xc3, 0x0a, 0xe0, 0xd7, 0x01, 0xa6, 0x2e, - 0x44, 0x46, 0x2a, 0xe1, 0xd7, 0x01, 0x43, 0xbf, 0x0a, 0xd9, 0xd7, 0x01, - 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xd8, 0xd7, 0x41, 0x44, 0x25, - 0x01, 0xdb, 0xd7, 0x01, 0x42, 0x15, 0x02, 0xda, 0xd7, 0x41, 0x44, 0x27, - 0x1d, 0xdf, 0xd7, 0x01, 0x42, 0x60, 0x25, 0xde, 0xd7, 0x41, 0x43, 0xa7, - 0x05, 0xdd, 0xd7, 0x01, 0x43, 0xcb, 0x06, 0xdc, 0xd7, 0x41, 0xe1, 0x38, - 0xd5, 0x01, 0xe2, 0x39, 0xd5, 0x01, 0xe4, 0x3b, 0xd5, 0x01, 0xe5, 0x3c, - 0xd5, 0x01, 0xe6, 0x3d, 0xd5, 0x01, 0xe7, 0x3e, 0xd5, 0x01, 0xe9, 0x40, - 0xd5, 0x01, 0xea, 0x41, 0xd5, 0x01, 0xeb, 0x42, 0xd5, 0x01, 0xec, 0x43, - 0xd5, 0x01, 0xed, 0x44, 0xd5, 0x01, 0xef, 0x46, 0xd5, 0x01, 0xf3, 0x4a, - 0xd5, 0x01, 0xf4, 0x4b, 0xd5, 0x01, 0xf5, 0x4c, 0xd5, 0x01, 0xf6, 0x4d, - 0xd5, 0x01, 0xf7, 0x4e, 0xd5, 0x01, 0xf8, 0x4f, 0xd5, 0x01, 0xf9, 0x50, - 0xd5, 0x41, 0x08, 0xb9, 0x05, 0xcc, 0x0b, 0x06, 0xc4, 0x06, 0x85, 0x0b, - 0x4e, 0x62, 0x15, 0xdc, 0xd6, 0x01, 0x08, 0xb2, 0xc3, 0xa1, 0x09, 0x07, - 0x38, 0xcf, 0xb0, 0x04, 0x4c, 0xe1, 0x8e, 0xde, 0xd6, 0x01, 0x45, 0xca, - 0xe5, 0xc1, 0xd6, 0x01, 0xb0, 0x8f, 0x04, 0x4a, 0xf1, 0xad, 0xe0, 0xd6, - 0x01, 0xb3, 0x06, 0x4c, 0xf1, 0x93, 0xdd, 0xd6, 0x41, 0x06, 0x4a, 0x06, - 0xa3, 0x02, 0x05, 0x0d, 0x07, 0x01, 0xff, 0xe1, 0x1a, 0xd4, 0x81, 0x92, - 0x02, 0xe2, 0x1b, 0xd4, 0x81, 0x86, 0x02, 0xe3, 0x1c, 0xd4, 0x81, 0xfa, - 0x01, 0xe4, 0x1d, 0xd4, 0x81, 0xe8, 0x01, 0xe5, 0x1e, 0xd4, 0x81, 0xd6, - 0x01, 0xe6, 0x1f, 0xd4, 0x81, 0xca, 0x01, 0xe7, 0x20, 0xd4, 0x81, 0xbe, - 0x01, 0xe8, 0x21, 0xd4, 0x01, 0xe9, 0x22, 0xd4, 0x81, 0xae, 0x01, 0xea, - 0x23, 0xd4, 0x01, 0xeb, 0x24, 0xd4, 0x81, 0x9e, 0x01, 0xec, 0x25, 0xd4, - 0x81, 0x92, 0x01, 0xed, 0x26, 0xd4, 0x81, 0x88, 0x01, 0xee, 0x27, 0xd4, - 0x81, 0x7f, 0xef, 0x28, 0xd4, 0x81, 0x6b, 0xf0, 0x29, 0xd4, 0x81, 0x56, - 0xf1, 0x2a, 0xd4, 0x01, 0xf2, 0x2b, 0xd4, 0x81, 0x47, 0xf3, 0x2c, 0xd4, - 0x81, 0x3c, 0xf4, 0x2d, 0xd4, 0x81, 0x2b, 0xf5, 0x2e, 0xd4, 0x81, 0x20, - 0xf6, 0x2f, 0xd4, 0x01, 0xf7, 0x30, 0xd4, 0x01, 0xf8, 0x31, 0xd4, 0x81, - 0x0f, 0xf9, 0x32, 0xd4, 0x01, 0xfa, 0x33, 0xd4, 0xc1, 0x00, 0x43, 0x45, - 0x0f, 0xc7, 0xd6, 0x41, 0xe9, 0xcf, 0xd6, 0x41, 0x46, 0x63, 0x15, 0xd6, - 0xd6, 0x41, 0x42, 0xd7, 0x23, 0xd5, 0xd6, 0x01, 0x44, 0xf2, 0x93, 0xc9, - 0xd6, 0x41, 0x44, 0x1d, 0x1f, 0xd4, 0xd6, 0x41, 0x42, 0x0b, 0x00, 0xd2, - 0xd6, 0x41, 0x42, 0x49, 0x00, 0xd7, 0xd6, 0x01, 0xe9, 0xd1, 0xd6, 0x01, - 0x42, 0x2f, 0x03, 0xd9, 0xd6, 0x41, 0xad, 0x01, 0xff, 0x43, 0xa3, 0x05, - 0xda, 0xd6, 0x01, 0x45, 0x3a, 0xe4, 0xd0, 0xd6, 0x41, 0xf5, 0xce, 0xd6, - 0x41, 0xf5, 0xcd, 0xd6, 0x41, 0x44, 0xfe, 0xe4, 0xcc, 0xd6, 0x41, 0x44, - 0xe2, 0x8e, 0xcb, 0xd6, 0x41, 0x43, 0xf0, 0x04, 0xca, 0xd6, 0x41, 0x44, - 0x5e, 0x20, 0xc4, 0xd6, 0x41, 0x4a, 0xfe, 0x99, 0xd3, 0xd6, 0x41, 0x46, - 0x63, 0x15, 0xc6, 0xd6, 0x01, 0x42, 0x12, 0x00, 0xc8, 0xd6, 0x41, 0x44, - 0x6c, 0xd3, 0xc5, 0xd6, 0x01, 0x46, 0xd1, 0x56, 0xcb, 0xd7, 0x41, 0x42, - 0x49, 0x00, 0xd8, 0xd6, 0x41, 0x43, 0x45, 0x0f, 0xc3, 0xd6, 0x41, 0x44, - 0x2f, 0xe1, 0xc2, 0xd6, 0x41, 0x08, 0xb9, 0x05, 0x6d, 0x06, 0x0c, 0x07, - 0x01, 0xff, 0xe1, 0xea, 0xd4, 0x01, 0xe2, 0xeb, 0xd4, 0x01, 0xe3, 0xec, - 0xd4, 0x01, 0xe4, 0xed, 0xd4, 0x01, 0xe5, 0xee, 0xd4, 0x01, 0xe6, 0xef, - 0xd4, 0x01, 0xe7, 0xf0, 0xd4, 0x01, 0xe8, 0xf1, 0xd4, 0x01, 0xe9, 0xf2, - 0xd4, 0x01, 0xea, 0xf3, 0xd4, 0x01, 0xeb, 0xf4, 0xd4, 0x01, 0xec, 0xf5, - 0xd4, 0x01, 0xed, 0xf6, 0xd4, 0x01, 0xee, 0xf7, 0xd4, 0x01, 0xef, 0xf8, - 0xd4, 0x01, 0xf0, 0xf9, 0xd4, 0x01, 0xf1, 0xfa, 0xd4, 0x01, 0xf2, 0xfb, - 0xd4, 0x01, 0xf3, 0xfc, 0xd4, 0x01, 0xf4, 0xfd, 0xd4, 0x01, 0xf5, 0xfe, - 0xd4, 0x01, 0xf6, 0xff, 0xd4, 0x01, 0xf7, 0x00, 0xd5, 0x01, 0xf8, 0x01, - 0xd5, 0x01, 0xf9, 0x02, 0xd5, 0x01, 0xfa, 0x03, 0xd5, 0x41, 0xe1, 0xd0, - 0xd4, 0x01, 0xe2, 0xd1, 0xd4, 0x01, 0xe3, 0xd2, 0xd4, 0x01, 0xe4, 0xd3, - 0xd4, 0x01, 0xe5, 0xd4, 0xd4, 0x01, 0xe6, 0xd5, 0xd4, 0x01, 0xe7, 0xd6, - 0xd4, 0x01, 0xe8, 0xd7, 0xd4, 0x01, 0xe9, 0xd8, 0xd4, 0x01, 0xea, 0xd9, - 0xd4, 0x01, 0xeb, 0xda, 0xd4, 0x01, 0xec, 0xdb, 0xd4, 0x01, 0xed, 0xdc, - 0xd4, 0x01, 0xee, 0xdd, 0xd4, 0x01, 0xef, 0xde, 0xd4, 0x01, 0xf0, 0xdf, - 0xd4, 0x01, 0xf1, 0xe0, 0xd4, 0x01, 0xf2, 0xe1, 0xd4, 0x01, 0xf3, 0xe2, - 0xd4, 0x01, 0xf4, 0xe3, 0xd4, 0x01, 0xf5, 0xe4, 0xd4, 0x01, 0xf6, 0xe5, - 0xd4, 0x01, 0xf7, 0xe6, 0xd4, 0x01, 0xf8, 0xe7, 0xd4, 0x01, 0xf9, 0xe8, - 0xd4, 0x01, 0xfa, 0xe9, 0xd4, 0x41, 0x53, 0x18, 0x47, 0xdb, 0xd6, 0x01, - 0x49, 0x30, 0xb7, 0xdf, 0xd6, 0x01, 0x48, 0x0b, 0xaa, 0xe1, 0xd6, 0x41, - 0x08, 0xb9, 0x05, 0xcf, 0x02, 0x4e, 0x62, 0x15, 0x50, 0xd7, 0x01, 0x4c, - 0xe1, 0x8e, 0x52, 0xd7, 0x01, 0x45, 0xca, 0xe5, 0x35, 0xd7, 0x01, 0xb0, - 0xa8, 0x02, 0x4a, 0xf1, 0xad, 0x54, 0xd7, 0x01, 0x06, 0x0c, 0x07, 0x06, - 0x4c, 0xf1, 0x93, 0x51, 0xd7, 0x41, 0xe1, 0x82, 0xd4, 0x81, 0x8c, 0x02, - 0xe2, 0x83, 0xd4, 0x81, 0x80, 0x02, 0xe3, 0x84, 0xd4, 0x81, 0xf4, 0x01, - 0xe4, 0x85, 0xd4, 0x81, 0xe8, 0x01, 0xe5, 0x86, 0xd4, 0x81, 0xd6, 0x01, - 0xe6, 0x87, 0xd4, 0x81, 0xca, 0x01, 0xe7, 0x88, 0xd4, 0x81, 0xbe, 0x01, - 0xe8, 0x89, 0xd4, 0x01, 0xe9, 0x8a, 0xd4, 0x81, 0xae, 0x01, 0xea, 0x8b, - 0xd4, 0x01, 0xeb, 0x8c, 0xd4, 0x81, 0x9e, 0x01, 0xec, 0x8d, 0xd4, 0x81, - 0x92, 0x01, 0xed, 0x8e, 0xd4, 0x81, 0x88, 0x01, 0xee, 0x8f, 0xd4, 0x81, - 0x7f, 0xef, 0x90, 0xd4, 0x81, 0x6b, 0xf0, 0x91, 0xd4, 0x81, 0x56, 0xf1, - 0x92, 0xd4, 0x01, 0xf2, 0x93, 0xd4, 0x81, 0x47, 0xf3, 0x94, 0xd4, 0x81, - 0x3c, 0xf4, 0x95, 0xd4, 0x81, 0x2b, 0xf5, 0x96, 0xd4, 0x81, 0x20, 0xf6, - 0x97, 0xd4, 0x01, 0xf7, 0x98, 0xd4, 0x01, 0xf8, 0x99, 0xd4, 0x81, 0x0f, - 0xf9, 0x9a, 0xd4, 0x01, 0xfa, 0x9b, 0xd4, 0xc1, 0x00, 0x43, 0x45, 0x0f, - 0x3b, 0xd7, 0x41, 0xe9, 0x43, 0xd7, 0x41, 0x46, 0x63, 0x15, 0x4a, 0xd7, - 0x41, 0x42, 0xd7, 0x23, 0x49, 0xd7, 0x01, 0x44, 0xf2, 0x93, 0x3d, 0xd7, - 0x41, 0x44, 0x1d, 0x1f, 0x48, 0xd7, 0x41, 0x42, 0x0b, 0x00, 0x46, 0xd7, - 0x41, 0x42, 0x49, 0x00, 0x4b, 0xd7, 0x01, 0xe9, 0x45, 0xd7, 0x01, 0x42, - 0x2f, 0x03, 0x4d, 0xd7, 0x41, 0xad, 0x01, 0xff, 0x43, 0xa3, 0x05, 0x4e, - 0xd7, 0x01, 0x45, 0x3a, 0xe4, 0x44, 0xd7, 0x41, 0xf5, 0x42, 0xd7, 0x41, - 0xf5, 0x41, 0xd7, 0x41, 0x44, 0xfe, 0xe4, 0x40, 0xd7, 0x41, 0x44, 0xe2, - 0x8e, 0x3f, 0xd7, 0x41, 0x43, 0xf0, 0x04, 0x3e, 0xd7, 0x41, 0x44, 0x5e, - 0x20, 0x38, 0xd7, 0x41, 0x4a, 0xfe, 0x99, 0x47, 0xd7, 0x41, 0x46, 0x63, - 0x15, 0x3a, 0xd7, 0x01, 0x42, 0x12, 0x00, 0x3c, 0xd7, 0x41, 0x44, 0x6c, - 0xd3, 0x39, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x4c, 0xd7, 0x41, 0x43, 0x45, - 0x0f, 0x37, 0xd7, 0x41, 0x44, 0x2f, 0xe1, 0x36, 0xd7, 0x41, 0x53, 0x18, - 0x47, 0x4f, 0xd7, 0x01, 0x49, 0x30, 0xb7, 0x53, 0xd7, 0x01, 0x48, 0x0b, - 0xaa, 0x55, 0xd7, 0x41, 0xe1, 0x68, 0xd4, 0x81, 0x8c, 0x02, 0xe2, 0x69, - 0xd4, 0x81, 0x80, 0x02, 0xe3, 0x6a, 0xd4, 0x81, 0xf4, 0x01, 0xe4, 0x6b, - 0xd4, 0x81, 0xe8, 0x01, 0xe5, 0x6c, 0xd4, 0x81, 0xd6, 0x01, 0xe6, 0x6d, - 0xd4, 0x01, 0xe7, 0x6e, 0xd4, 0x81, 0xc6, 0x01, 0xe8, 0x6f, 0xd4, 0x01, - 0xe9, 0x70, 0xd4, 0x81, 0xb6, 0x01, 0xea, 0x71, 0xd4, 0x01, 0xeb, 0x72, - 0xd4, 0x81, 0xa6, 0x01, 0xec, 0x73, 0xd4, 0x81, 0x9a, 0x01, 0xed, 0x74, - 0xd4, 0x81, 0x90, 0x01, 0xee, 0x75, 0xd4, 0x81, 0x86, 0x01, 0xef, 0x76, - 0xd4, 0x81, 0x72, 0xf0, 0x77, 0xd4, 0x81, 0x5d, 0xf1, 0x78, 0xd4, 0x01, - 0xf2, 0x79, 0xd4, 0x81, 0x4e, 0xf3, 0x7a, 0xd4, 0x81, 0x43, 0xf4, 0x7b, - 0xd4, 0x81, 0x2b, 0xf5, 0x7c, 0xd4, 0x81, 0x20, 0xf6, 0x7d, 0xd4, 0x01, - 0xf7, 0x7e, 0xd4, 0x01, 0xf8, 0x7f, 0xd4, 0x81, 0x0f, 0xf9, 0x80, 0xd4, - 0x01, 0xfa, 0x81, 0xd4, 0xc1, 0x00, 0x43, 0x45, 0x0f, 0x21, 0xd7, 0x41, - 0xe9, 0x29, 0xd7, 0x41, 0x46, 0x63, 0x15, 0x30, 0xd7, 0x41, 0x42, 0xd7, - 0x23, 0x2f, 0xd7, 0x01, 0x44, 0xf2, 0x93, 0x23, 0xd7, 0xc1, 0x00, 0x47, - 0xea, 0x07, 0x2d, 0xd7, 0x41, 0x44, 0x1d, 0x1f, 0x2e, 0xd7, 0x41, 0x42, - 0x0b, 0x00, 0x2c, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x31, 0xd7, 0x01, 0xe9, - 0x2b, 0xd7, 0x01, 0x42, 0x2f, 0x03, 0x33, 0xd7, 0x41, 0xad, 0x01, 0xff, - 0x43, 0xa3, 0x05, 0x34, 0xd7, 0x01, 0x45, 0x3a, 0xe4, 0x2a, 0xd7, 0x41, - 0xf5, 0x28, 0xd7, 0x41, 0xf5, 0x27, 0xd7, 0x41, 0x44, 0xfe, 0xe4, 0x26, - 0xd7, 0x41, 0x44, 0xe2, 0x8e, 0x25, 0xd7, 0x41, 0x43, 0xf0, 0x04, 0x24, - 0xd7, 0x41, 0x44, 0x5e, 0x20, 0x1e, 0xd7, 0x41, 0x46, 0x63, 0x15, 0x20, - 0xd7, 0x01, 0x42, 0x12, 0x00, 0x22, 0xd7, 0x41, 0x44, 0x6c, 0xd3, 0x1f, - 0xd7, 0x41, 0x42, 0x49, 0x00, 0x32, 0xd7, 0x41, 0x43, 0x45, 0x0f, 0x1d, - 0xd7, 0x41, 0x44, 0x2f, 0xe1, 0x1c, 0xd7, 0x41, 0x08, 0xb9, 0x05, 0x6d, - 0x06, 0x0c, 0x07, 0x01, 0xff, 0xe1, 0x86, 0xd5, 0x01, 0xe2, 0x87, 0xd5, - 0x01, 0xe3, 0x88, 0xd5, 0x01, 0xe4, 0x89, 0xd5, 0x01, 0xe5, 0x8a, 0xd5, - 0x01, 0xe6, 0x8b, 0xd5, 0x01, 0xe7, 0x8c, 0xd5, 0x01, 0xe8, 0x8d, 0xd5, - 0x01, 0xe9, 0x8e, 0xd5, 0x01, 0xea, 0x8f, 0xd5, 0x01, 0xeb, 0x90, 0xd5, - 0x01, 0xec, 0x91, 0xd5, 0x01, 0xed, 0x92, 0xd5, 0x01, 0xee, 0x93, 0xd5, - 0x01, 0xef, 0x94, 0xd5, 0x01, 0xf0, 0x95, 0xd5, 0x01, 0xf1, 0x96, 0xd5, - 0x01, 0xf2, 0x97, 0xd5, 0x01, 0xf3, 0x98, 0xd5, 0x01, 0xf4, 0x99, 0xd5, - 0x01, 0xf5, 0x9a, 0xd5, 0x01, 0xf6, 0x9b, 0xd5, 0x01, 0xf7, 0x9c, 0xd5, - 0x01, 0xf8, 0x9d, 0xd5, 0x01, 0xf9, 0x9e, 0xd5, 0x01, 0xfa, 0x9f, 0xd5, - 0x41, 0xe1, 0x6c, 0xd5, 0x01, 0xe2, 0x6d, 0xd5, 0x01, 0xe3, 0x6e, 0xd5, - 0x01, 0xe4, 0x6f, 0xd5, 0x01, 0xe5, 0x70, 0xd5, 0x01, 0xe6, 0x71, 0xd5, - 0x01, 0xe7, 0x72, 0xd5, 0x01, 0xe8, 0x73, 0xd5, 0x01, 0xe9, 0x74, 0xd5, - 0x01, 0xea, 0x75, 0xd5, 0x01, 0xeb, 0x76, 0xd5, 0x01, 0xec, 0x77, 0xd5, - 0x01, 0xed, 0x78, 0xd5, 0x01, 0xee, 0x79, 0xd5, 0x01, 0xef, 0x7a, 0xd5, - 0x01, 0xf0, 0x7b, 0xd5, 0x01, 0xf1, 0x7c, 0xd5, 0x01, 0xf2, 0x7d, 0xd5, - 0x01, 0xf3, 0x7e, 0xd5, 0x01, 0xf4, 0x7f, 0xd5, 0x01, 0xf5, 0x80, 0xd5, - 0x01, 0xf6, 0x81, 0xd5, 0x01, 0xf7, 0x82, 0xd5, 0x01, 0xf8, 0x83, 0xd5, - 0x01, 0xf9, 0x84, 0xd5, 0x01, 0xfa, 0x85, 0xd5, 0x41, 0x45, 0xc3, 0x0a, - 0xd6, 0xd7, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xd7, 0xd7, 0x01, 0x43, - 0xbf, 0x0a, 0xcf, 0xd7, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, - 0xce, 0xd7, 0x41, 0x44, 0x25, 0x01, 0xd1, 0xd7, 0x01, 0x42, 0x15, 0x02, - 0xd0, 0xd7, 0x41, 0x44, 0x27, 0x1d, 0xd5, 0xd7, 0x01, 0x42, 0x60, 0x25, - 0xd4, 0xd7, 0x41, 0x43, 0xa7, 0x05, 0xd3, 0xd7, 0x01, 0x43, 0xcb, 0x06, - 0xd2, 0xd7, 0x41, 0xe1, 0x00, 0xd4, 0x81, 0x92, 0x02, 0xe2, 0x01, 0xd4, - 0x81, 0x86, 0x02, 0xe3, 0x02, 0xd4, 0x81, 0xfa, 0x01, 0xe4, 0x03, 0xd4, - 0x81, 0xe8, 0x01, 0xe5, 0x04, 0xd4, 0x81, 0xd6, 0x01, 0xe6, 0x05, 0xd4, - 0x01, 0xe7, 0x06, 0xd4, 0x81, 0xc6, 0x01, 0xe8, 0x07, 0xd4, 0x01, 0xe9, - 0x08, 0xd4, 0x81, 0xb6, 0x01, 0xea, 0x09, 0xd4, 0x01, 0xeb, 0x0a, 0xd4, - 0x81, 0xa6, 0x01, 0xec, 0x0b, 0xd4, 0x81, 0x9a, 0x01, 0xed, 0x0c, 0xd4, - 0x81, 0x90, 0x01, 0xee, 0x0d, 0xd4, 0x81, 0x86, 0x01, 0xef, 0x0e, 0xd4, - 0x81, 0x72, 0xf0, 0x0f, 0xd4, 0x81, 0x5d, 0xf1, 0x10, 0xd4, 0x01, 0xf2, - 0x11, 0xd4, 0x81, 0x4e, 0xf3, 0x12, 0xd4, 0x81, 0x43, 0xf4, 0x13, 0xd4, - 0x81, 0x2b, 0xf5, 0x14, 0xd4, 0x81, 0x20, 0xf6, 0x15, 0xd4, 0x01, 0xf7, - 0x16, 0xd4, 0x01, 0xf8, 0x17, 0xd4, 0x81, 0x0f, 0xf9, 0x18, 0xd4, 0x01, - 0xfa, 0x19, 0xd4, 0xc1, 0x00, 0x43, 0x45, 0x0f, 0xad, 0xd6, 0x41, 0xe9, - 0xb5, 0xd6, 0x41, 0x46, 0x63, 0x15, 0xbc, 0xd6, 0x41, 0x42, 0xd7, 0x23, - 0xbb, 0xd6, 0x01, 0x44, 0xf2, 0x93, 0xaf, 0xd6, 0xc1, 0x00, 0x47, 0xea, - 0x07, 0xb9, 0xd6, 0x41, 0x44, 0x1d, 0x1f, 0xba, 0xd6, 0x41, 0x42, 0x0b, - 0x00, 0xb8, 0xd6, 0x41, 0x42, 0x49, 0x00, 0xbd, 0xd6, 0x01, 0xe9, 0xb7, - 0xd6, 0x01, 0x42, 0x2f, 0x03, 0xbf, 0xd6, 0x41, 0xad, 0x01, 0xff, 0x43, - 0xa3, 0x05, 0xc0, 0xd6, 0x01, 0x45, 0x3a, 0xe4, 0xb6, 0xd6, 0x41, 0xf5, - 0xb4, 0xd6, 0x41, 0xf5, 0xb3, 0xd6, 0x41, 0x44, 0xfe, 0xe4, 0xb2, 0xd6, - 0x41, 0x44, 0xe2, 0x8e, 0xb1, 0xd6, 0x41, 0x43, 0xf0, 0x04, 0xb0, 0xd6, - 0x41, 0x44, 0x5e, 0x20, 0xaa, 0xd6, 0x41, 0x46, 0x63, 0x15, 0xac, 0xd6, - 0x01, 0x42, 0x12, 0x00, 0xae, 0xd6, 0x41, 0x44, 0x6c, 0xd3, 0xab, 0xd6, - 0x01, 0x46, 0xd1, 0x56, 0xca, 0xd7, 0x41, 0x42, 0x49, 0x00, 0xbe, 0xd6, - 0x41, 0x43, 0x45, 0x0f, 0xa9, 0xd6, 0x41, 0x44, 0x2f, 0xe1, 0xa8, 0xd6, - 0x41, 0x0b, 0x11, 0x97, 0x12, 0x58, 0x3d, 0x27, 0xba, 0x00, 0x00, 0x4d, - 0x1d, 0x83, 0xad, 0xf1, 0x01, 0x46, 0x6f, 0xcc, 0x3c, 0x30, 0x40, 0x06, - 0xc4, 0x06, 0x82, 0x03, 0x07, 0xc1, 0x05, 0x6c, 0xb2, 0x5e, 0x05, 0x2f, - 0x03, 0x3c, 0xb6, 0x01, 0xff, 0x45, 0x5c, 0x23, 0x45, 0x1d, 0x01, 0x0a, - 0xd2, 0x75, 0x01, 0xff, 0xa1, 0x20, 0xe5, 0x3a, 0x1d, 0x01, 0xe9, 0x32, - 0x1d, 0x81, 0x13, 0xef, 0x3d, 0x1d, 0x01, 0xf5, 0x34, 0x1d, 0x81, 0x06, - 0x49, 0x9b, 0xbe, 0x36, 0x1d, 0x41, 0xf5, 0x35, 0x1d, 0x41, 0xe9, 0x33, - 0x1d, 0x41, 0xe1, 0x31, 0x1d, 0x01, 0xe9, 0x3c, 0x1d, 0x01, 0xf5, 0x3f, - 0x1d, 0x41, 0x48, 0xd0, 0x15, 0x40, 0x1d, 0x01, 0x46, 0x4f, 0x23, 0x43, - 0x1d, 0x01, 0x47, 0x97, 0xce, 0x44, 0x1d, 0x01, 0x45, 0x5a, 0x3e, 0x42, - 0x1d, 0x01, 0x47, 0xa1, 0x4a, 0x41, 0x1d, 0x41, 0x46, 0x82, 0xd6, 0x47, - 0x1d, 0x01, 0x44, 0x04, 0xc3, 0x46, 0x1d, 0x41, 0xe1, 0x00, 0x1d, 0x81, - 0x80, 0x02, 0xa2, 0xf3, 0x01, 0xa3, 0xe6, 0x01, 0xa4, 0xcd, 0x01, 0xe5, - 0x06, 0x1d, 0x01, 0xa7, 0xbc, 0x01, 0x42, 0x22, 0x00, 0x2c, 0x1d, 0x01, - 0xe9, 0x02, 0x1d, 0x81, 0xac, 0x01, 0xaa, 0x99, 0x01, 0xab, 0x86, 0x01, - 0xac, 0x7a, 0x42, 0x6c, 0x00, 0x24, 0x1d, 0x01, 0xae, 0x5c, 0xef, 0x09, - 0x1d, 0x01, 0xb0, 0x4c, 0x42, 0x71, 0x00, 0x26, 0x1d, 0x01, 0xb3, 0x34, - 0xb4, 0x15, 0xf5, 0x04, 0x1d, 0x81, 0x0c, 0x42, 0xa6, 0x0a, 0x28, 0x1d, - 0x01, 0x42, 0x34, 0x22, 0x25, 0x1d, 0x41, 0xf5, 0x05, 0x1d, 0x41, 0xe1, - 0x1b, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x1c, 0x1d, 0x01, 0x42, 0x71, 0x00, - 0x30, 0x1d, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x16, 0x1d, 0x01, 0x42, 0x22, - 0x00, 0x17, 0x1d, 0x41, 0xe1, 0x2b, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x29, - 0x1d, 0x01, 0x42, 0x15, 0x06, 0x2a, 0x1d, 0x41, 0xe1, 0x20, 0x1d, 0x01, - 0x42, 0x22, 0x00, 0x21, 0x1d, 0x41, 0xe1, 0x1f, 0x1d, 0x01, 0x42, 0x24, - 0x02, 0x10, 0x1d, 0x01, 0x42, 0xff, 0x04, 0x1a, 0x1d, 0x01, 0x42, 0x34, - 0x22, 0x15, 0x1d, 0x41, 0xe1, 0x27, 0x1d, 0x01, 0x42, 0x74, 0x00, 0x2d, - 0x1d, 0x41, 0xe1, 0x0c, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x0d, 0x1d, 0x01, - 0x43, 0x59, 0x20, 0x2e, 0x1d, 0x41, 0xe1, 0x13, 0x1d, 0x01, 0x42, 0x22, - 0x00, 0x14, 0x1d, 0x01, 0x43, 0xd6, 0x34, 0x2f, 0x1d, 0x41, 0xe9, 0x03, - 0x1d, 0x41, 0xe1, 0x0e, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x0f, 0x1d, 0x41, - 0xe1, 0x1d, 0x1d, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x1e, 0x1d, 0x41, - 0xe1, 0x18, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x19, 0x1d, 0x41, 0xe1, 0x11, - 0x1d, 0x01, 0x42, 0x22, 0x00, 0x12, 0x1d, 0x41, 0xe1, 0x22, 0x1d, 0x01, - 0x42, 0x22, 0x00, 0x23, 0x1d, 0x41, 0xe1, 0x01, 0x1d, 0x01, 0xe9, 0x08, - 0x1d, 0x01, 0xf5, 0x0b, 0x1d, 0x41, 0x45, 0xc3, 0x0a, 0x58, 0x1d, 0x01, - 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x59, 0x1d, 0x01, 0x43, 0xbf, 0x0a, 0x51, - 0x1d, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x50, 0x1d, 0x41, - 0x44, 0x25, 0x01, 0x53, 0x1d, 0x01, 0x42, 0x15, 0x02, 0x52, 0x1d, 0x41, - 0x44, 0x27, 0x1d, 0x57, 0x1d, 0x01, 0x42, 0x60, 0x25, 0x56, 0x1d, 0x41, - 0x43, 0xa7, 0x05, 0x55, 0x1d, 0x01, 0x43, 0xcb, 0x06, 0x54, 0x1d, 0x41, - 0x44, 0xc9, 0x5f, 0x87, 0xfa, 0x01, 0x05, 0x09, 0x49, 0x0c, 0x4c, 0xa1, - 0x92, 0xad, 0x26, 0x00, 0x51, 0x04, 0x5d, 0x4b, 0xf9, 0x41, 0x49, 0x19, - 0x1b, 0x70, 0x1c, 0x01, 0x07, 0xc1, 0x05, 0xe9, 0x01, 0x49, 0x8b, 0xb9, - 0x71, 0x1c, 0x01, 0xb3, 0x1b, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0x42, 0x31, - 0x12, 0xb0, 0x1c, 0x01, 0xe5, 0xb3, 0x1c, 0x01, 0xe9, 0xb1, 0x1c, 0x01, - 0xef, 0xb4, 0x1c, 0x01, 0xf5, 0xb2, 0x1c, 0x41, 0x04, 0x30, 0x03, 0xb5, - 0x01, 0x10, 0x5a, 0x66, 0x01, 0xff, 0xe1, 0xaf, 0x1c, 0x01, 0x42, 0x16, - 0x00, 0xa0, 0x1c, 0x01, 0xa3, 0x99, 0x01, 0xa4, 0x8c, 0x01, 0x42, 0x24, - 0x02, 0x94, 0x1c, 0x01, 0x42, 0x22, 0x00, 0xae, 0x1c, 0x01, 0x42, 0xbd, - 0x26, 0x98, 0x1c, 0x01, 0xab, 0x6e, 0x42, 0x74, 0x00, 0xab, 0x1c, 0x01, - 0x42, 0x6c, 0x00, 0xa1, 0x1c, 0x01, 0xae, 0x50, 0xb0, 0x44, 0x42, 0x71, - 0x00, 0xaa, 0x1c, 0x01, 0xb3, 0x32, 0xb4, 0x19, 0x42, 0xa9, 0x01, 0xa5, - 0x1c, 0x01, 0x42, 0x34, 0x22, 0xa9, 0x1c, 0x01, 0xba, 0x01, 0xff, 0xe1, - 0xa7, 0x1c, 0x01, 0x42, 0x22, 0x00, 0xa6, 0x1c, 0x41, 0xe1, 0x9a, 0x1c, - 0x01, 0x42, 0x22, 0x00, 0x9b, 0x1c, 0x01, 0xb3, 0x01, 0xff, 0xe1, 0xa2, - 0x1c, 0x01, 0x42, 0x22, 0x00, 0xa3, 0x1c, 0x41, 0xe1, 0xad, 0x1c, 0x01, - 0x42, 0x22, 0x00, 0xac, 0x1c, 0x41, 0xe1, 0x9e, 0x1c, 0x01, 0x42, 0x22, - 0x00, 0x9f, 0x1c, 0x41, 0xe1, 0x9d, 0x1c, 0x01, 0x42, 0x24, 0x02, 0x95, - 0x1c, 0x01, 0x42, 0x34, 0x22, 0x99, 0x1c, 0x41, 0xe1, 0x92, 0x1c, 0x01, - 0x42, 0x22, 0x00, 0x93, 0x1c, 0x41, 0xe1, 0x9c, 0x1c, 0x01, 0x42, 0x59, - 0x00, 0xa4, 0x1c, 0x41, 0xe1, 0x96, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x97, - 0x1c, 0x41, 0x48, 0xd0, 0x15, 0xb5, 0x1c, 0x01, 0x4b, 0x4f, 0x23, 0xb6, - 0x1c, 0x41, 0x42, 0x2e, 0x25, 0x88, 0x1c, 0x01, 0xe1, 0x8f, 0x1c, 0x01, - 0x42, 0x16, 0x00, 0x80, 0x1c, 0x01, 0xa3, 0x99, 0x01, 0xa4, 0x8c, 0x01, - 0x42, 0x24, 0x02, 0x74, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x8e, 0x1c, 0x01, - 0x42, 0xbd, 0x26, 0x78, 0x1c, 0x01, 0xab, 0x6e, 0x42, 0x74, 0x00, 0x8b, - 0x1c, 0x01, 0x42, 0x6c, 0x00, 0x81, 0x1c, 0x01, 0xae, 0x50, 0xb0, 0x44, - 0x42, 0x71, 0x00, 0x8a, 0x1c, 0x01, 0xb3, 0x32, 0xb4, 0x19, 0x42, 0xa9, - 0x01, 0x85, 0x1c, 0x01, 0x42, 0x34, 0x22, 0x89, 0x1c, 0x01, 0xba, 0x01, - 0xff, 0xe1, 0x87, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x86, 0x1c, 0x41, 0xe1, - 0x7a, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x7b, 0x1c, 0x01, 0xb3, 0x01, 0xff, - 0xe1, 0x82, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x83, 0x1c, 0x41, 0xe1, 0x8d, - 0x1c, 0x01, 0x42, 0x22, 0x00, 0x8c, 0x1c, 0x41, 0xe1, 0x7e, 0x1c, 0x01, - 0x42, 0x22, 0x00, 0x7f, 0x1c, 0x41, 0xe1, 0x7d, 0x1c, 0x01, 0x42, 0x24, - 0x02, 0x75, 0x1c, 0x01, 0x42, 0x34, 0x22, 0x79, 0x1c, 0x41, 0xe1, 0x72, - 0x1c, 0x01, 0x42, 0x22, 0x00, 0x73, 0x1c, 0x41, 0xe1, 0x7c, 0x1c, 0x01, - 0x42, 0x59, 0x00, 0x84, 0x1c, 0x41, 0xe1, 0x76, 0x1c, 0x01, 0x42, 0x22, - 0x00, 0x77, 0x1c, 0x41, 0x56, 0x7b, 0x31, 0xef, 0x26, 0x00, 0x47, 0xee, - 0xcf, 0x41, 0xf3, 0x41, 0x80, 0xa5, 0x04, 0x47, 0x07, 0x6b, 0xbc, 0x20, - 0x00, 0x05, 0x64, 0xe2, 0x87, 0x03, 0x42, 0xb7, 0x13, 0x6d, 0xf9, 0x01, - 0x08, 0x42, 0xc4, 0x12, 0x46, 0xb8, 0xdc, 0x5e, 0xf4, 0x01, 0x4e, 0x38, - 0x7b, 0x70, 0xf5, 0x01, 0x4e, 0x50, 0x7c, 0xbd, 0xf9, 0x41, 0x12, 0xb0, - 0x4e, 0xda, 0x02, 0x07, 0xc1, 0x05, 0x5d, 0x07, 0x2f, 0x39, 0x37, 0x0c, - 0x01, 0x16, 0x06, 0x47, 0x13, 0xd3, 0xc8, 0x0a, 0x41, 0x02, 0x3b, 0x01, - 0x18, 0x47, 0x18, 0x36, 0xf1, 0x0a, 0x01, 0x4b, 0x9c, 0x9c, 0xf6, 0x0a, - 0x01, 0x44, 0xe2, 0x12, 0xf0, 0x0a, 0x01, 0x48, 0xd0, 0x09, 0xf5, 0x0a, - 0x41, 0xf4, 0xf4, 0x0a, 0x81, 0x06, 0x53, 0xbc, 0x4c, 0xf2, 0x0a, 0x41, - 0x4b, 0xc4, 0x4c, 0xf3, 0x0a, 0x41, 0x44, 0x31, 0x11, 0xec, 0x0a, 0x01, - 0x43, 0xbf, 0x0a, 0xeb, 0x0a, 0x81, 0x0f, 0xb4, 0x01, 0xff, 0x42, 0x92, - 0x01, 0xed, 0x0a, 0x01, 0x45, 0xde, 0x2b, 0xee, 0x0a, 0x41, 0x48, 0x21, - 0x11, 0xef, 0x0a, 0x41, 0xa1, 0xe4, 0x01, 0xa2, 0xd5, 0x01, 0xa4, 0xc6, - 0x01, 0x42, 0xa0, 0x19, 0xdc, 0x0a, 0x01, 0xa7, 0xb1, 0x01, 0x42, 0xb0, - 0x01, 0xc6, 0x0a, 0x81, 0xa3, 0x01, 0xaa, 0x94, 0x01, 0xab, 0x85, 0x01, - 0x46, 0x9c, 0xda, 0xd3, 0x0a, 0x01, 0x43, 0x89, 0x05, 0xd6, 0x0a, 0x01, - 0x43, 0x54, 0x22, 0xd7, 0x0a, 0x01, 0x42, 0x6f, 0x02, 0xdb, 0x0a, 0x01, - 0xb1, 0x5f, 0x44, 0xfa, 0x64, 0xe1, 0x0a, 0x01, 0xb3, 0x3d, 0xb4, 0x29, - 0x43, 0xc0, 0x88, 0xc7, 0x0a, 0x01, 0xb8, 0x15, 0x44, 0x58, 0x51, 0xcf, - 0x0a, 0x01, 0xba, 0x01, 0xff, 0x44, 0xd5, 0x48, 0xc9, 0x0a, 0x01, 0x45, - 0xe0, 0xe3, 0xca, 0x0a, 0x41, 0x43, 0x34, 0x10, 0xd1, 0x0a, 0x01, 0x43, - 0x97, 0x35, 0xdf, 0x0a, 0x41, 0x42, 0x9a, 0x43, 0xe4, 0x0a, 0x01, 0x43, - 0x39, 0x25, 0xce, 0x0a, 0x01, 0x46, 0x58, 0xd9, 0xd5, 0x0a, 0x41, 0xa1, - 0x0c, 0x43, 0x0e, 0x16, 0xe2, 0x0a, 0x01, 0x44, 0x2a, 0x49, 0xe3, 0x0a, - 0x41, 0x43, 0x89, 0xe7, 0xdd, 0x0a, 0x01, 0x44, 0x39, 0xe1, 0xd8, 0x0a, - 0x41, 0x44, 0x12, 0xed, 0xe0, 0x0a, 0x01, 0x43, 0x97, 0x35, 0xde, 0x0a, - 0x41, 0x43, 0x34, 0x10, 0xd0, 0x0a, 0x01, 0x44, 0xc2, 0xe4, 0xd2, 0x0a, - 0x41, 0x44, 0xd5, 0x48, 0xcb, 0x0a, 0x01, 0x45, 0xe0, 0xe3, 0xcc, 0x0a, - 0x41, 0x42, 0x53, 0x00, 0xcd, 0x0a, 0x41, 0x45, 0xef, 0xe3, 0xc4, 0x0a, - 0x01, 0x44, 0xa2, 0xa8, 0xc3, 0x0a, 0x41, 0x45, 0xdb, 0x48, 0xc5, 0x0a, - 0x01, 0x46, 0x58, 0xd9, 0xd4, 0x0a, 0x41, 0x43, 0x39, 0x25, 0xc1, 0x0a, - 0x01, 0x44, 0x25, 0xa8, 0xc2, 0x0a, 0x41, 0x44, 0xd5, 0x48, 0xda, 0x0a, - 0x01, 0x44, 0x48, 0x3c, 0xc0, 0x0a, 0x01, 0x43, 0xf7, 0x19, 0xd9, 0x0a, - 0x41, 0x45, 0x5c, 0x00, 0xe5, 0x0a, 0x01, 0x45, 0xf5, 0x06, 0xe6, 0x0a, - 0x41, 0x50, 0x5a, 0x5f, 0x59, 0x08, 0x00, 0x4f, 0xe0, 0x6b, 0x5b, 0x08, - 0x00, 0x07, 0xc1, 0x05, 0x0c, 0x4b, 0xb8, 0x0b, 0x5e, 0x08, 0x00, 0x51, - 0xe1, 0x5d, 0x5a, 0x08, 0x40, 0xa1, 0x22, 0x48, 0xba, 0xc2, 0x56, 0x08, - 0x00, 0x45, 0xc7, 0xe3, 0x40, 0x08, 0x00, 0xa9, 0x0c, 0x43, 0xbb, 0xa3, - 0x57, 0x08, 0x00, 0x47, 0xbb, 0xc2, 0x45, 0x08, 0x40, 0xee, 0x4f, 0x08, - 0x00, 0xf4, 0x47, 0x08, 0x40, 0xe2, 0x41, 0x08, 0x00, 0xe4, 0x43, 0x08, - 0x00, 0xe7, 0x42, 0x08, 0x00, 0xe8, 0x44, 0x08, 0x00, 0x42, 0x9e, 0x01, - 0x58, 0x08, 0x00, 0xeb, 0x4a, 0x08, 0x80, 0x32, 0xec, 0x4b, 0x08, 0x00, - 0xed, 0x4c, 0x08, 0x00, 0xee, 0x4d, 0x08, 0x00, 0xf0, 0x50, 0x08, 0x00, - 0xf1, 0x52, 0x08, 0x00, 0xf2, 0x53, 0x08, 0x00, 0xf3, 0x4e, 0x08, 0x80, - 0x0d, 0xf4, 0x55, 0x08, 0x80, 0x04, 0xfa, 0x46, 0x08, 0x40, 0xf4, 0x48, - 0x08, 0x40, 0xe8, 0x54, 0x08, 0x00, 0xfa, 0x51, 0x08, 0x40, 0x42, 0x15, - 0x06, 0x49, 0x08, 0x40, 0x57, 0x5e, 0x2c, 0x6b, 0xf4, 0x01, 0x47, 0x63, - 0xcd, 0x7a, 0xf5, 0x01, 0x03, 0xb6, 0x05, 0x11, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x4a, 0xbf, 0xa8, 0x72, 0xf4, 0x01, 0x46, 0xae, 0xdd, 0x73, 0xf4, - 0x41, 0x58, 0xf5, 0x26, 0x74, 0xf5, 0x01, 0x46, 0xb4, 0xdd, 0x35, 0xf9, - 0x41, 0x07, 0x93, 0xb3, 0x27, 0x02, 0x60, 0x00, 0x06, 0x4a, 0x77, 0xaf, - 0x20, 0x27, 0x40, 0x4f, 0x6e, 0x26, 0xa5, 0x26, 0x00, 0x44, 0x2f, 0x03, - 0x42, 0x26, 0x00, 0x0c, 0x09, 0x3c, 0x01, 0xff, 0x58, 0x65, 0x26, 0xa7, - 0x26, 0x00, 0x44, 0x2f, 0x03, 0xa6, 0x26, 0x40, 0x4e, 0x9a, 0x74, 0x57, - 0x0d, 0x00, 0xa4, 0x91, 0x05, 0x09, 0xb3, 0x58, 0xb0, 0x04, 0x07, 0xc1, - 0x05, 0xad, 0x01, 0x07, 0x2f, 0x39, 0x92, 0x01, 0x05, 0x2f, 0x03, 0x4e, - 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x3b, 0xe5, 0x46, 0x0d, 0x80, 0x32, - 0xe9, 0x3f, 0x0d, 0x80, 0x29, 0xef, 0x4a, 0x0d, 0x80, 0x20, 0xf5, 0x41, - 0x0d, 0x80, 0x17, 0x08, 0x9b, 0xbe, 0x01, 0xff, 0xec, 0x62, 0x0d, 0x80, - 0x09, 0xf2, 0x43, 0x0d, 0xc0, 0x00, 0xf2, 0x44, 0x0d, 0x40, 0xec, 0x63, - 0x0d, 0x40, 0xf5, 0x42, 0x0d, 0x40, 0xef, 0x4b, 0x0d, 0x40, 0xe9, 0x40, - 0x0d, 0x40, 0xe5, 0x47, 0x0d, 0x40, 0xe1, 0x3e, 0x0d, 0x00, 0xe9, 0x48, - 0x0d, 0x00, 0xf5, 0x4c, 0x0d, 0x40, 0xa1, 0x32, 0xa3, 0x1e, 0x44, 0x2e, - 0x10, 0x4f, 0x0d, 0x00, 0xb6, 0x01, 0xff, 0x52, 0x2a, 0x50, 0x3b, 0x0d, - 0x00, 0xa9, 0x01, 0xff, 0x44, 0x5d, 0x23, 0x4d, 0x0d, 0x00, 0x45, 0xa3, - 0x4a, 0x03, 0x0d, 0x40, 0x4a, 0x50, 0x23, 0x01, 0x0d, 0x00, 0x4e, 0x64, - 0x77, 0x3c, 0x0d, 0x00, 0x57, 0xc7, 0x15, 0x00, 0x0d, 0x40, 0x47, 0xd1, - 0x15, 0x02, 0x0d, 0x00, 0x47, 0xf2, 0x86, 0x3d, 0x0d, 0x40, 0x04, 0xbf, - 0x0a, 0x06, 0x43, 0xb0, 0x06, 0x70, 0x0d, 0x40, 0x47, 0x22, 0x11, 0x71, - 0x0d, 0x00, 0x48, 0xd5, 0x5c, 0x72, 0x0d, 0x40, 0xe1, 0x05, 0x0d, 0x80, - 0xe6, 0x02, 0xa2, 0xd9, 0x02, 0xa3, 0x9d, 0x02, 0xa4, 0xfe, 0x01, 0xe5, - 0x0e, 0x0d, 0x80, 0xf4, 0x01, 0xa7, 0xe7, 0x01, 0x42, 0x22, 0x00, 0x39, - 0x0d, 0x00, 0xe9, 0x07, 0x0d, 0x80, 0xd7, 0x01, 0xaa, 0xca, 0x01, 0xab, - 0xbd, 0x01, 0xac, 0xa9, 0x01, 0x42, 0x6c, 0x00, 0x2e, 0x0d, 0x00, 0xae, - 0x84, 0x01, 0xef, 0x12, 0x0d, 0x80, 0x7b, 0xb0, 0x6f, 0xb2, 0x63, 0xb3, - 0x51, 0xb4, 0x32, 0xf5, 0x09, 0x0d, 0x80, 0x29, 0xb6, 0x06, 0x42, 0x34, - 0x22, 0x2f, 0x0d, 0x40, 0xe1, 0x35, 0x0d, 0x00, 0x4d, 0xd4, 0x80, 0x04, - 0x0d, 0x00, 0x07, 0x9c, 0xbe, 0x01, 0xff, 0xec, 0x0c, 0x0d, 0x80, 0x09, - 0xf2, 0x0b, 0x0d, 0xc0, 0x00, 0xf2, 0x60, 0x0d, 0x40, 0xec, 0x61, 0x0d, - 0x40, 0xf5, 0x0a, 0x0d, 0x40, 0xe1, 0x24, 0x0d, 0x00, 0x42, 0x22, 0x00, - 0x25, 0x0d, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x1f, 0x0d, 0x00, 0x42, 0x22, - 0x00, 0x20, 0x0d, 0x00, 0x42, 0x12, 0x00, 0x3a, 0x0d, 0x40, 0xe1, 0x38, - 0x0d, 0x00, 0x42, 0x22, 0x00, 0x36, 0x0d, 0x00, 0x42, 0x15, 0x06, 0x37, - 0x0d, 0x40, 0xe1, 0x30, 0x0d, 0x00, 0x42, 0x71, 0x00, 0x31, 0x0d, 0x40, - 0xe1, 0x2a, 0x0d, 0x00, 0x42, 0x22, 0x00, 0x2b, 0x0d, 0x40, 0xef, 0x13, - 0x0d, 0x40, 0xe1, 0x28, 0x0d, 0x00, 0x42, 0x24, 0x02, 0x19, 0x0d, 0x00, - 0xae, 0x06, 0x42, 0x34, 0x22, 0x1e, 0x0d, 0x40, 0xe1, 0x23, 0x0d, 0x00, - 0x42, 0xff, 0x04, 0x29, 0x0d, 0x40, 0xe1, 0x32, 0x0d, 0x00, 0xac, 0x01, - 0xff, 0xe1, 0x33, 0x0d, 0x00, 0x42, 0x74, 0x00, 0x34, 0x0d, 0x40, 0xe1, - 0x15, 0x0d, 0x00, 0x42, 0x22, 0x00, 0x16, 0x0d, 0x40, 0xe1, 0x1c, 0x0d, - 0x00, 0x42, 0x22, 0x00, 0x1d, 0x0d, 0x40, 0xe9, 0x08, 0x0d, 0x40, 0xe1, - 0x17, 0x0d, 0x00, 0x42, 0x22, 0x00, 0x18, 0x0d, 0x40, 0xe5, 0x0f, 0x0d, - 0x40, 0xe1, 0x26, 0x0d, 0x00, 0xa4, 0x0c, 0x42, 0x22, 0x00, 0x27, 0x0d, - 0x00, 0x47, 0x53, 0xd1, 0x4e, 0x0d, 0x40, 0xe1, 0x21, 0x0d, 0x00, 0x42, - 0x22, 0x00, 0x22, 0x0d, 0x40, 0xe1, 0x1a, 0x0d, 0x00, 0xa8, 0x01, 0xff, - 0xe1, 0x1b, 0x0d, 0x00, 0x05, 0xa6, 0xbf, 0x01, 0xff, 0xeb, 0x7f, 0x0d, - 0x00, 0xec, 0x7d, 0x0d, 0x80, 0x17, 0xed, 0x54, 0x0d, 0x00, 0xee, 0x7b, - 0x0d, 0x80, 0x0a, 0x42, 0xcf, 0x00, 0x7c, 0x0d, 0x00, 0xf9, 0x55, 0x0d, - 0x40, 0xee, 0x7a, 0x0d, 0x40, 0xec, 0x7e, 0x0d, 0xc0, 0x00, 0xec, 0x56, - 0x0d, 0x40, 0xe1, 0x2c, 0x0d, 0x00, 0x42, 0x22, 0x00, 0x2d, 0x0d, 0x40, - 0xe1, 0x06, 0x0d, 0x00, 0xe9, 0x10, 0x0d, 0x00, 0x49, 0x01, 0xbc, 0x5f, - 0x0d, 0x00, 0xf5, 0x14, 0x0d, 0x40, 0x04, 0xbf, 0x0a, 0x1d, 0x06, 0x24, - 0x01, 0x01, 0xff, 0x4a, 0x9d, 0xa7, 0x5a, 0x0d, 0x00, 0x48, 0x2a, 0x01, - 0x75, 0x0d, 0x00, 0x4a, 0xc3, 0xae, 0x78, 0x0d, 0x00, 0x4a, 0xef, 0xaf, - 0x5d, 0x0d, 0x40, 0x46, 0xc3, 0x0a, 0x77, 0x0d, 0x00, 0xa6, 0x27, 0x44, - 0x22, 0x00, 0x74, 0x0d, 0x00, 0x58, 0xad, 0x29, 0x58, 0x0d, 0x00, 0x47, - 0x2a, 0x01, 0x73, 0x0d, 0x00, 0x49, 0x5f, 0x25, 0x76, 0x0d, 0x00, 0xb4, - 0x01, 0xff, 0x44, 0xfb, 0x1a, 0x5c, 0x0d, 0x00, 0x48, 0x34, 0x25, 0x5b, - 0x0d, 0x40, 0x44, 0xf2, 0xac, 0x5e, 0x0d, 0x00, 0x47, 0x45, 0xd1, 0x59, - 0x0d, 0x40, 0x48, 0x32, 0xc1, 0x79, 0x0d, 0x00, 0x05, 0xc5, 0x06, 0x01, - 0xff, 0x45, 0xc3, 0x0a, 0x6e, 0x0d, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, - 0x6f, 0x0d, 0x00, 0x43, 0xbf, 0x0a, 0x67, 0x0d, 0x00, 0xb3, 0x14, 0xb4, - 0x06, 0x44, 0xa1, 0x1d, 0x66, 0x0d, 0x40, 0x44, 0x25, 0x01, 0x69, 0x0d, - 0x00, 0x42, 0x15, 0x02, 0x68, 0x0d, 0x40, 0x44, 0x27, 0x1d, 0x6d, 0x0d, - 0x00, 0x42, 0x60, 0x25, 0x6c, 0x0d, 0x40, 0x43, 0xa7, 0x05, 0x6b, 0x0d, - 0x00, 0x43, 0xcb, 0x06, 0x6a, 0x0d, 0x40, 0x05, 0x5b, 0xe1, 0x06, 0x45, - 0xdc, 0xe2, 0x7c, 0xf7, 0x41, 0x45, 0xd0, 0xd6, 0xf2, 0x1e, 0x01, 0x4e, - 0xdc, 0x75, 0xf8, 0x1e, 0x01, 0x07, 0xc1, 0x05, 0x1b, 0x4a, 0x1f, 0xad, - 0xf7, 0x1e, 0x01, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xe5, 0xf5, 0x1e, 0x01, - 0xe9, 0xf3, 0x1e, 0x01, 0xef, 0xf6, 0x1e, 0x01, 0xf5, 0xf4, 0x1e, 0x41, - 0xe1, 0xf1, 0x1e, 0x01, 0x42, 0x16, 0x00, 0xe4, 0x1e, 0x01, 0x42, 0x37, - 0x00, 0xe9, 0x1e, 0x01, 0x42, 0xa1, 0x10, 0xe7, 0x1e, 0x01, 0x42, 0x24, - 0x02, 0xe1, 0x1e, 0x01, 0x42, 0xbd, 0x26, 0xea, 0x1e, 0x01, 0x42, 0x1b, - 0x02, 0xe0, 0x1e, 0x01, 0x42, 0x74, 0x00, 0xee, 0x1e, 0x01, 0x42, 0x6c, - 0x00, 0xe5, 0x1e, 0x01, 0xae, 0x24, 0x42, 0x6c, 0x09, 0xe3, 0x1e, 0x01, - 0x42, 0x71, 0x00, 0xed, 0x1e, 0x01, 0x42, 0x15, 0x06, 0xf0, 0x1e, 0x01, - 0x42, 0x12, 0x00, 0xe6, 0x1e, 0x01, 0x42, 0xa6, 0x0a, 0xef, 0x1e, 0x01, - 0x42, 0x34, 0x22, 0xec, 0x1e, 0x41, 0xe1, 0xe8, 0x1e, 0x01, 0x42, 0x24, - 0x02, 0xe2, 0x1e, 0x01, 0x42, 0x34, 0x22, 0xeb, 0x1e, 0x41, 0x06, 0xb8, - 0xd6, 0xe7, 0x02, 0x0a, 0xeb, 0xa9, 0x01, 0xff, 0x46, 0x1e, 0xd7, 0x28, - 0xf0, 0x01, 0x02, 0x16, 0x00, 0xcb, 0x02, 0x4d, 0xdd, 0x7f, 0x25, 0xf0, - 0x01, 0xa5, 0xa2, 0x02, 0xa6, 0xec, 0x01, 0x4c, 0x9d, 0x8d, 0x05, 0xf0, - 0x01, 0x45, 0xd2, 0xa2, 0x2a, 0xf0, 0x01, 0xae, 0xbe, 0x01, 0xaf, 0x9c, - 0x01, 0x44, 0xd2, 0xee, 0x22, 0xf0, 0x01, 0x4a, 0xbf, 0xad, 0x04, 0xf0, - 0x01, 0xb3, 0x4a, 0xb4, 0x15, 0xb7, 0x01, 0xff, 0x48, 0x4a, 0xc3, 0x02, - 0xf0, 0x01, 0x4b, 0xce, 0x9a, 0x06, 0xf0, 0x01, 0x45, 0x5a, 0x0a, 0x29, - 0xf0, 0x41, 0x08, 0x32, 0xc4, 0x1a, 0x06, 0x3e, 0xde, 0x01, 0xff, 0x47, - 0x98, 0xcc, 0x11, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x15, 0xb7, 0x08, - 0xf0, 0x01, 0x46, 0x8b, 0x42, 0x1a, 0xf0, 0x41, 0x47, 0x98, 0xcc, 0x12, - 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x15, 0xb7, 0x09, 0xf0, 0x01, 0x46, - 0x8b, 0x42, 0x1b, 0xf0, 0x41, 0x08, 0x72, 0xc3, 0x2b, 0x06, 0x48, 0xda, - 0x12, 0x49, 0x3b, 0xbb, 0x01, 0xf0, 0x01, 0x45, 0x5b, 0x11, 0x26, 0xf0, - 0x01, 0x45, 0xa9, 0xe8, 0x27, 0xf0, 0x41, 0x47, 0x98, 0xcc, 0x15, 0xf0, - 0x01, 0xa3, 0x01, 0xff, 0x49, 0x15, 0xb7, 0x0c, 0xf0, 0x01, 0x46, 0x8b, - 0x42, 0x1e, 0xf0, 0x41, 0x47, 0x98, 0xcc, 0x16, 0xf0, 0x01, 0xa3, 0x01, - 0xff, 0x49, 0x15, 0xb7, 0x0d, 0xf0, 0x01, 0x46, 0x8b, 0x42, 0x1f, 0xf0, - 0x41, 0x06, 0x1c, 0xc6, 0x06, 0x45, 0x14, 0xe7, 0x23, 0xf0, 0x41, 0x47, - 0x98, 0xcc, 0x10, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x15, 0xb7, 0x07, - 0xf0, 0x01, 0x46, 0x8b, 0x42, 0x19, 0xf0, 0x41, 0x07, 0x1b, 0xc6, 0x06, - 0x49, 0x0e, 0xbb, 0x03, 0xf0, 0x41, 0x47, 0x98, 0xcc, 0x18, 0xf0, 0x01, - 0xa3, 0x01, 0xff, 0x49, 0x15, 0xb7, 0x0f, 0xf0, 0x01, 0x46, 0x8b, 0x42, - 0x21, 0xf0, 0x41, 0x07, 0x46, 0xcf, 0x1a, 0x07, 0x5a, 0xd1, 0x01, 0xff, - 0x47, 0x98, 0xcc, 0x13, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x15, 0xb7, - 0x0a, 0xf0, 0x01, 0x46, 0x8b, 0x42, 0x1c, 0xf0, 0x41, 0x47, 0x98, 0xcc, - 0x14, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x15, 0xb7, 0x0b, 0xf0, 0x01, - 0x46, 0x8b, 0x42, 0x1d, 0xf0, 0x41, 0x48, 0x1a, 0xc1, 0x00, 0xf0, 0x01, - 0x08, 0xed, 0xb5, 0x01, 0xff, 0x47, 0x98, 0xcc, 0x17, 0xf0, 0x01, 0xa3, - 0x01, 0xff, 0x49, 0x15, 0xb7, 0x0e, 0xf0, 0x01, 0x46, 0x8b, 0x42, 0x20, - 0xf0, 0x41, 0x42, 0x36, 0x01, 0x2b, 0xf0, 0x01, 0x44, 0x9f, 0x96, 0x24, - 0xf0, 0x41, 0x51, 0x93, 0x56, 0x74, 0x11, 0x01, 0xac, 0x0f, 0xb3, 0x01, - 0xff, 0x4b, 0x58, 0x26, 0x75, 0x11, 0x01, 0x49, 0xc0, 0xb7, 0x73, 0x11, - 0x41, 0x06, 0xc2, 0x05, 0x06, 0x4c, 0x2d, 0x8e, 0x76, 0x11, 0x41, 0xe1, - 0x50, 0x11, 0x01, 0xa2, 0xbc, 0x01, 0xa3, 0xaf, 0x01, 0xa4, 0x96, 0x01, - 0xe5, 0x53, 0x11, 0x01, 0xa7, 0x85, 0x01, 0x42, 0x22, 0x00, 0x71, 0x11, - 0x01, 0xe9, 0x51, 0x11, 0x01, 0xaa, 0x6f, 0xab, 0x63, 0x42, 0x74, 0x00, - 0x6e, 0x11, 0x01, 0x42, 0x6c, 0x00, 0x6c, 0x11, 0x01, 0xae, 0x45, 0xef, - 0x54, 0x11, 0x01, 0xb0, 0x35, 0xb2, 0x29, 0x42, 0x15, 0x06, 0x70, 0x11, - 0x01, 0xb4, 0x0a, 0xf5, 0x52, 0x11, 0x01, 0x42, 0xa6, 0x0a, 0x6f, 0x11, - 0x41, 0xe1, 0x63, 0x11, 0x01, 0x42, 0x22, 0x00, 0x64, 0x11, 0x01, 0xb4, - 0x01, 0xff, 0xe1, 0x5e, 0x11, 0x01, 0x42, 0x22, 0x00, 0x5f, 0x11, 0x41, - 0xe1, 0x6d, 0x11, 0x01, 0x42, 0x71, 0x00, 0x72, 0x11, 0x41, 0xe1, 0x68, - 0x11, 0x01, 0x42, 0x22, 0x00, 0x69, 0x11, 0x41, 0xe1, 0x67, 0x11, 0x01, - 0x42, 0xff, 0x04, 0x62, 0x11, 0x01, 0x42, 0x34, 0x22, 0x5d, 0x11, 0x41, - 0xe1, 0x55, 0x11, 0x01, 0x42, 0x22, 0x00, 0x56, 0x11, 0x41, 0xe1, 0x5b, - 0x11, 0x01, 0x42, 0x22, 0x00, 0x5c, 0x11, 0x41, 0xe1, 0x57, 0x11, 0x01, - 0x42, 0x22, 0x00, 0x58, 0x11, 0x41, 0xe1, 0x65, 0x11, 0x01, 0xa4, 0x06, - 0x42, 0x22, 0x00, 0x66, 0x11, 0x41, 0xe1, 0x60, 0x11, 0x01, 0x42, 0x22, - 0x00, 0x61, 0x11, 0x41, 0xe1, 0x59, 0x11, 0x01, 0x42, 0x22, 0x00, 0x5a, - 0x11, 0x41, 0xe1, 0x6a, 0x11, 0x01, 0x42, 0x22, 0x00, 0x6b, 0x11, 0x41, - 0xe5, 0xd9, 0xf9, 0x01, 0x47, 0xf2, 0xce, 0x84, 0xfa, 0x01, 0x43, 0x0d, - 0x2c, 0xf2, 0xf9, 0x41, 0x4d, 0xc8, 0x7d, 0x14, 0x21, 0x00, 0xa1, 0xc4, - 0x40, 0xa5, 0xf0, 0x2a, 0xa9, 0xb3, 0x0c, 0x44, 0xb0, 0x00, 0x99, 0xf9, - 0x01, 0xaf, 0x9d, 0x02, 0xb5, 0x85, 0x02, 0xb9, 0x01, 0xff, 0x0c, 0x8d, - 0x8b, 0x82, 0x01, 0x05, 0x4b, 0x5f, 0x06, 0x48, 0x8d, 0x28, 0x25, 0xf9, - 0x41, 0x07, 0xc1, 0x05, 0x06, 0x4f, 0x61, 0x72, 0x3f, 0x09, 0x41, 0xe1, - 0x20, 0x09, 0x81, 0x65, 0xe2, 0x21, 0x09, 0x01, 0xe3, 0x39, 0x09, 0x01, - 0xe4, 0x23, 0x09, 0x01, 0xe5, 0x24, 0x09, 0x81, 0x50, 0xe6, 0x31, 0x09, - 0x01, 0xe7, 0x22, 0x09, 0x01, 0xe9, 0x26, 0x09, 0x01, 0xeb, 0x28, 0x09, - 0x01, 0xec, 0x29, 0x09, 0x81, 0x37, 0xed, 0x2a, 0x09, 0x01, 0xee, 0x2b, - 0x09, 0x81, 0x2a, 0xef, 0x2c, 0x09, 0x01, 0xf1, 0x32, 0x09, 0x01, 0xf2, - 0x2d, 0x09, 0x01, 0xf3, 0x33, 0x09, 0x81, 0x15, 0xf4, 0x2f, 0x09, 0x81, - 0x0c, 0xf5, 0x30, 0x09, 0x01, 0xf6, 0x25, 0x09, 0x01, 0xf9, 0x27, 0x09, - 0x41, 0xf4, 0x34, 0x09, 0x41, 0xf3, 0x2e, 0x09, 0x41, 0xee, 0x38, 0x09, - 0x41, 0xf9, 0x37, 0x09, 0x41, 0xee, 0x36, 0x09, 0x41, 0xee, 0x35, 0x09, - 0x41, 0xe1, 0x80, 0x02, 0x81, 0x72, 0xe2, 0x82, 0x02, 0x81, 0x69, 0xe4, - 0x85, 0x02, 0x01, 0xe5, 0x81, 0x02, 0x81, 0x5c, 0xe7, 0x84, 0x02, 0x01, - 0xe8, 0x9b, 0x02, 0x01, 0xe9, 0x86, 0x02, 0x01, 0xea, 0x8a, 0x02, 0x01, - 0xeb, 0x8b, 0x02, 0x81, 0x43, 0xec, 0x8d, 0x02, 0x01, 0xed, 0x8e, 0x02, - 0x81, 0x36, 0xee, 0x8f, 0x02, 0x81, 0x2d, 0xf0, 0x93, 0x02, 0x01, 0xf1, - 0x8c, 0x02, 0x01, 0xf2, 0x95, 0x02, 0x01, 0xf3, 0x96, 0x02, 0x01, 0xf4, - 0x97, 0x02, 0x81, 0x10, 0xf5, 0x92, 0x02, 0x01, 0xf7, 0x87, 0x02, 0x01, - 0xf8, 0x9c, 0x02, 0x01, 0xfa, 0x88, 0x02, 0x41, 0xe8, 0x89, 0x02, 0x01, - 0xf4, 0x98, 0x02, 0x41, 0xee, 0x91, 0x02, 0x41, 0xed, 0x90, 0x02, 0x41, - 0xeb, 0x94, 0x02, 0x41, 0xee, 0x9a, 0x02, 0x41, 0xe8, 0x83, 0x02, 0x41, - 0xee, 0x99, 0x02, 0x41, 0x45, 0xdf, 0xdd, 0xf3, 0xf9, 0x01, 0xae, 0x01, - 0xff, 0x4a, 0x9f, 0xa5, 0x76, 0xf7, 0x01, 0x42, 0x6d, 0x11, 0xc1, 0xfa, - 0x41, 0x45, 0xce, 0xe1, 0x9e, 0xf9, 0x01, 0x42, 0x36, 0x01, 0x12, 0xf5, - 0x81, 0xe8, 0x09, 0x03, 0xa5, 0x21, 0xbc, 0x08, 0x46, 0xd2, 0xda, 0x6d, - 0xf3, 0x01, 0x03, 0xa2, 0x01, 0xac, 0x07, 0xb4, 0x97, 0x07, 0x50, 0x6a, - 0x66, 0x2d, 0xf6, 0x01, 0x03, 0x5f, 0x00, 0x80, 0x07, 0xb7, 0x0d, 0x45, - 0xfc, 0x09, 0xca, 0x25, 0xc0, 0x00, 0x5b, 0x84, 0x19, 0xe0, 0x27, 0x40, - 0x80, 0xc1, 0x06, 0x03, 0x16, 0x01, 0x01, 0xff, 0x4e, 0xc4, 0x74, 0x03, - 0x27, 0x00, 0x07, 0x73, 0x02, 0x8a, 0x06, 0x52, 0x60, 0x50, 0x85, 0x25, - 0x00, 0xa8, 0xc1, 0x05, 0x05, 0xc3, 0x00, 0xa0, 0x03, 0x07, 0x7d, 0x02, - 0xea, 0x02, 0x04, 0xbf, 0x0a, 0xd9, 0x02, 0x06, 0xc8, 0x00, 0x30, 0x53, - 0xb2, 0x4b, 0x87, 0x25, 0x00, 0xb4, 0x01, 0xff, 0x05, 0x25, 0x01, 0x06, - 0x5b, 0x93, 0x1c, 0x6f, 0xfb, 0x41, 0x4d, 0xb8, 0x4b, 0x83, 0x25, 0x00, - 0x09, 0x2a, 0x01, 0x01, 0xff, 0x45, 0x33, 0x01, 0x86, 0x25, 0x00, 0x56, - 0x67, 0x34, 0xa5, 0xce, 0x01, 0x57, 0xf6, 0x2f, 0xae, 0xce, 0x41, 0x0f, - 0xd3, 0x69, 0xbe, 0x01, 0x4f, 0x3c, 0x6a, 0xd3, 0x27, 0x00, 0x5a, 0x42, - 0x1f, 0x4f, 0x27, 0x00, 0x53, 0x5b, 0x25, 0x9f, 0xce, 0x01, 0x46, 0x16, - 0xdc, 0x0e, 0x27, 0x00, 0x03, 0x7c, 0x00, 0x38, 0x4d, 0x1a, 0x2f, 0x07, - 0xcc, 0x01, 0xb3, 0x19, 0xb4, 0x01, 0xff, 0x05, 0x1a, 0x01, 0x06, 0x4d, - 0x19, 0x7c, 0x3f, 0xcc, 0x41, 0x42, 0x68, 0x00, 0xff, 0x25, 0x00, 0x51, - 0x37, 0x5d, 0x9e, 0xfb, 0x41, 0x5b, 0x92, 0x1a, 0x3e, 0x29, 0x00, 0x0e, - 0xa5, 0x02, 0x01, 0xff, 0x46, 0xe7, 0x02, 0x3e, 0xf5, 0x01, 0x46, 0xab, - 0x05, 0x51, 0x27, 0x40, 0x06, 0x2d, 0x0d, 0x06, 0x4b, 0x47, 0x4b, 0x3a, - 0xcc, 0x41, 0xa3, 0x2e, 0xa6, 0x20, 0x4d, 0x2e, 0x84, 0xb9, 0xcc, 0x01, - 0x4c, 0xe5, 0x90, 0xad, 0xcc, 0x01, 0xb3, 0x06, 0x4a, 0x59, 0xaf, 0xb5, - 0xcc, 0x41, 0x4b, 0x92, 0x93, 0xab, 0xcc, 0x01, 0x4e, 0xcc, 0x71, 0xd5, - 0xcc, 0x41, 0x53, 0x92, 0x28, 0xaf, 0xcc, 0x01, 0x4c, 0x7e, 0x81, 0xb1, - 0xcc, 0x41, 0x05, 0x8e, 0x86, 0x06, 0x4b, 0x89, 0x9b, 0xde, 0x25, 0x40, - 0x46, 0x48, 0xd7, 0xc9, 0xcc, 0x01, 0xab, 0x12, 0x44, 0xb6, 0xee, 0xd1, - 0xcc, 0x01, 0x45, 0xe6, 0xbb, 0xc1, 0xcc, 0x01, 0x44, 0x0a, 0xef, 0xc5, - 0xcc, 0x41, 0x43, 0xa1, 0x01, 0xbd, 0xcc, 0x01, 0x45, 0xd5, 0x71, 0xcd, - 0xcc, 0x41, 0x06, 0x13, 0x01, 0x11, 0x1b, 0x50, 0x1d, 0x01, 0xff, 0x46, - 0x73, 0x02, 0x41, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x42, 0xfb, 0x41, 0x0a, - 0x73, 0x02, 0x32, 0x08, 0x84, 0x02, 0x17, 0x15, 0x56, 0x1d, 0x01, 0xff, - 0x46, 0x73, 0x02, 0x43, 0xfb, 0x01, 0x4c, 0x09, 0x0f, 0x46, 0xfb, 0x01, - 0x45, 0xc8, 0x00, 0x44, 0xfb, 0x41, 0x52, 0x46, 0x52, 0x48, 0xfb, 0x01, - 0x06, 0x6d, 0x02, 0x01, 0xff, 0x46, 0x73, 0x02, 0x45, 0xfb, 0x01, 0x4c, - 0x09, 0x0f, 0x4a, 0xfb, 0x41, 0x52, 0x46, 0x52, 0x47, 0xfb, 0x01, 0x06, - 0x6d, 0x02, 0x01, 0xff, 0x4c, 0x09, 0x0f, 0x49, 0xfb, 0x01, 0x45, 0xc8, - 0x00, 0x4b, 0xfb, 0x41, 0x4c, 0xc3, 0x0a, 0x81, 0x25, 0x00, 0x4d, 0xa1, - 0x1c, 0x82, 0x25, 0x40, 0x07, 0x73, 0x02, 0x21, 0x05, 0xc3, 0x00, 0x11, - 0x06, 0xc8, 0x00, 0x01, 0xff, 0x53, 0x5b, 0x25, 0x9b, 0xce, 0x01, 0x4e, - 0x18, 0x7c, 0x3b, 0xcc, 0x41, 0x53, 0x5b, 0x25, 0x98, 0xce, 0x01, 0x4e, - 0x18, 0x7c, 0x38, 0xcc, 0x41, 0x58, 0x05, 0x29, 0x99, 0xce, 0x01, 0x59, - 0x55, 0x25, 0x9a, 0xce, 0x41, 0xa2, 0xae, 0x01, 0x46, 0xd2, 0xd7, 0x8d, - 0xf5, 0x01, 0x4c, 0x61, 0x8d, 0x8b, 0xf5, 0x01, 0x53, 0x5b, 0x25, 0x9c, - 0xce, 0x01, 0xb0, 0x8d, 0x01, 0x03, 0x7c, 0x00, 0x1f, 0x60, 0x05, 0x10, - 0x3f, 0x29, 0x00, 0xb4, 0x01, 0xff, 0x05, 0x1a, 0x01, 0x06, 0x4d, 0x19, - 0x7c, 0x3c, 0xcc, 0x41, 0x42, 0x68, 0x00, 0xfa, 0x25, 0x00, 0x51, 0x37, - 0x5d, 0x9f, 0xfb, 0x41, 0x06, 0x2d, 0x0d, 0x06, 0x4b, 0x47, 0x4b, 0x39, - 0xcc, 0x41, 0xa3, 0x2e, 0xa6, 0x20, 0x4d, 0x2e, 0x84, 0xb8, 0xcc, 0x01, - 0x4c, 0xe5, 0x90, 0xac, 0xcc, 0x01, 0xb3, 0x06, 0x4a, 0x59, 0xaf, 0xb4, - 0xcc, 0x41, 0x4b, 0x92, 0x93, 0xaa, 0xcc, 0x01, 0x4e, 0xcc, 0x71, 0xd4, - 0xcc, 0x41, 0x53, 0x92, 0x28, 0xae, 0xcc, 0x01, 0x4c, 0x7e, 0x81, 0xb0, - 0xcc, 0x41, 0x05, 0x8e, 0x86, 0x06, 0x4b, 0x89, 0x9b, 0xdf, 0x25, 0x40, - 0x46, 0x48, 0xd7, 0xc8, 0xcc, 0x01, 0xab, 0x12, 0x44, 0xb6, 0xee, 0xd0, - 0xcc, 0x01, 0x45, 0xe6, 0xbb, 0xc0, 0xcc, 0x01, 0x44, 0x0a, 0xef, 0xc4, - 0xcc, 0x41, 0x43, 0xa1, 0x01, 0xbc, 0xcc, 0x01, 0x45, 0xd5, 0x71, 0xcc, - 0xcc, 0x41, 0x49, 0x6d, 0xb3, 0x8c, 0xf5, 0x01, 0x45, 0x17, 0xdc, 0x89, - 0xf5, 0x41, 0x4c, 0x55, 0x8a, 0x8a, 0xf5, 0x01, 0x0e, 0xd4, 0x69, 0x01, - 0xff, 0x1b, 0xf1, 0x1b, 0x50, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x0a, 0x73, - 0x02, 0x31, 0x08, 0x84, 0x02, 0x17, 0x15, 0x7d, 0x02, 0x01, 0xff, 0x46, - 0x73, 0x02, 0x3e, 0xfb, 0x01, 0x4c, 0x09, 0x0f, 0x51, 0xfb, 0x01, 0x45, - 0xc8, 0x00, 0x3f, 0xfb, 0x41, 0x06, 0x13, 0x01, 0x06, 0x52, 0xf2, 0x54, - 0x4d, 0xfb, 0x41, 0x46, 0x73, 0x02, 0x40, 0xfb, 0x01, 0x4c, 0x09, 0x0f, - 0x4f, 0xfb, 0x41, 0x06, 0x13, 0x01, 0x06, 0x52, 0xf2, 0x54, 0x4c, 0xfb, - 0x41, 0x4c, 0x09, 0x0f, 0x4e, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x50, 0xfb, - 0x41, 0x46, 0x73, 0x02, 0x3c, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x3d, 0xfb, - 0x41, 0x04, 0x23, 0x00, 0x06, 0x57, 0x10, 0x2f, 0x05, 0xcc, 0x41, 0x5b, - 0xba, 0x19, 0x01, 0xce, 0x01, 0x45, 0x33, 0x01, 0x84, 0x25, 0x00, 0x46, - 0xe7, 0x02, 0xe1, 0x25, 0x00, 0x52, 0xde, 0x50, 0x04, 0xce, 0x01, 0x54, - 0x63, 0x42, 0xdb, 0x25, 0x00, 0x56, 0x67, 0x34, 0xa4, 0xce, 0x01, 0x4c, - 0x19, 0x04, 0x8f, 0xfb, 0x01, 0x57, 0xf6, 0x2f, 0xaf, 0xce, 0x01, 0x63, - 0x7e, 0x0b, 0x13, 0xce, 0x41, 0x05, 0xc3, 0x00, 0x17, 0x51, 0x9d, 0x1c, - 0xe5, 0xfb, 0x01, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x53, 0x5b, 0x25, 0x9e, - 0xce, 0x01, 0x4e, 0x18, 0x7c, 0x3e, 0xcc, 0x41, 0x53, 0x5b, 0x25, 0x9d, - 0xce, 0x01, 0x4e, 0x18, 0x7c, 0x3d, 0xcc, 0x41, 0x48, 0xed, 0x0c, 0x4e, - 0x20, 0x00, 0xa2, 0x19, 0x5b, 0x5c, 0x1a, 0x1f, 0x30, 0x00, 0x46, 0xa4, - 0x4e, 0x47, 0x2e, 0x80, 0x06, 0x44, 0xc2, 0x07, 0x5f, 0x00, 0x40, 0x49, - 0xa5, 0x3a, 0x48, 0x2e, 0x40, 0x46, 0x12, 0xd7, 0xab, 0xfa, 0x01, 0x50, - 0x60, 0x57, 0x05, 0xf5, 0x41, 0x45, 0x0d, 0xe4, 0xe9, 0xf3, 0x01, 0x46, - 0xc1, 0x05, 0x8c, 0xf4, 0x41, 0x4b, 0x85, 0x95, 0x74, 0xf7, 0x01, 0x4a, - 0xb9, 0xa9, 0xf4, 0xf9, 0x01, 0x42, 0xc4, 0x02, 0xb7, 0xfa, 0x41, 0xa4, - 0x71, 0x04, 0xc3, 0x00, 0x30, 0x05, 0xc8, 0x00, 0x01, 0xff, 0x45, 0x24, - 0x38, 0xdd, 0x27, 0x00, 0x06, 0xa9, 0x01, 0x01, 0xff, 0x45, 0xce, 0x00, - 0xf6, 0x27, 0x80, 0x13, 0x4c, 0x71, 0x8c, 0xf9, 0x27, 0x80, 0x06, 0x4e, - 0x1c, 0x7b, 0xff, 0x27, 0x40, 0x49, 0xfc, 0xb1, 0xfe, 0x27, 0x40, 0x49, - 0xfc, 0xb1, 0xfc, 0x27, 0x40, 0x80, 0x25, 0x06, 0xa9, 0x01, 0x01, 0xff, - 0x45, 0xce, 0x00, 0xf5, 0x27, 0x80, 0x13, 0x4c, 0x71, 0x8c, 0xf8, 0x27, - 0x80, 0x06, 0x4e, 0x1c, 0x7b, 0x33, 0x2b, 0x40, 0x49, 0xfc, 0xb1, 0xfd, - 0x27, 0x40, 0x49, 0xfc, 0xb1, 0xfb, 0x27, 0x40, 0x06, 0xc8, 0x00, 0x06, - 0x44, 0x25, 0x38, 0xde, 0x27, 0x40, 0x45, 0xce, 0x00, 0xf7, 0x27, 0x00, - 0x4c, 0x71, 0x8c, 0xfa, 0x27, 0x40, 0x67, 0x7b, 0x05, 0xe6, 0x2a, 0x00, - 0x47, 0xf3, 0x31, 0xcc, 0x27, 0x00, 0x43, 0xe6, 0x1c, 0x98, 0xfa, 0x41, - 0x06, 0x3e, 0xd5, 0x7a, 0x03, 0x13, 0x00, 0x01, 0xff, 0x43, 0x1a, 0x00, - 0x27, 0x22, 0x80, 0x3c, 0x42, 0x0c, 0x00, 0x28, 0x22, 0xc0, 0x00, 0x80, - 0x01, 0xff, 0x57, 0x3e, 0x2f, 0x59, 0x2a, 0x00, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x02, 0x3b, 0x01, 0x0c, 0x4f, 0x67, 0x6c, 0x5d, 0x2a, 0x00, 0x4b, - 0x78, 0x9d, 0x5b, 0x2a, 0x40, 0x47, 0x9a, 0x1d, 0x52, 0x2a, 0x00, 0x05, - 0x3d, 0x01, 0x01, 0xff, 0x47, 0x77, 0x7e, 0x62, 0x2a, 0x00, 0x48, 0x78, - 0x58, 0x63, 0x2a, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x02, 0x3b, 0x01, - 0x12, 0x4f, 0x67, 0x6c, 0x5c, 0x2a, 0x00, 0x4b, 0x78, 0x9d, 0x5a, 0x2a, - 0x00, 0x48, 0x78, 0x58, 0x5f, 0x2a, 0x40, 0x47, 0x9a, 0x1d, 0x51, 0x2a, - 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x47, 0x77, 0x7e, 0x5e, 0x2a, 0x00, - 0x48, 0x78, 0x58, 0x60, 0x2a, 0x40, 0x43, 0x1a, 0x00, 0x16, 0xcc, 0x01, - 0x46, 0x60, 0xd7, 0x19, 0xcc, 0x81, 0x16, 0x09, 0xd6, 0x22, 0x06, 0x42, - 0x0c, 0x00, 0x15, 0xcc, 0x41, 0x46, 0x0c, 0xda, 0x17, 0xcc, 0x01, 0x46, - 0xd5, 0x4f, 0x18, 0xcc, 0x41, 0x54, 0x07, 0x3f, 0x1a, 0xcc, 0x41, 0x4d, - 0x57, 0x7e, 0x0f, 0xf5, 0x01, 0x0a, 0x9b, 0xa9, 0x01, 0xff, 0x43, 0xbf, - 0x0a, 0x0e, 0x00, 0x00, 0x44, 0xa1, 0x1d, 0x0f, 0x00, 0x40, 0x43, 0x14, - 0x09, 0x4e, 0x26, 0x00, 0xa7, 0x93, 0x1d, 0xad, 0xd3, 0x19, 0xae, 0xdd, - 0x02, 0x47, 0x0d, 0xd1, 0x81, 0xf9, 0x01, 0x42, 0x63, 0x15, 0xe2, 0xf5, - 0x81, 0xc9, 0x02, 0x47, 0xe2, 0x82, 0xa4, 0x20, 0x00, 0x03, 0xcb, 0x21, - 0x0c, 0x51, 0xf2, 0x5d, 0xb6, 0x20, 0x00, 0x44, 0x48, 0x91, 0x8e, 0xf9, - 0x41, 0x07, 0xc1, 0x05, 0x11, 0x0c, 0x01, 0x16, 0x01, 0xff, 0x45, 0xe8, - 0x04, 0xfe, 0xa4, 0x00, 0x49, 0x15, 0x16, 0xff, 0xa4, 0x40, 0xe1, 0xee, - 0xa4, 0x80, 0x94, 0x02, 0x42, 0x16, 0x00, 0xd0, 0xa4, 0x00, 0xa3, 0x81, - 0x02, 0xa4, 0xf4, 0x01, 0xe5, 0xf0, 0xa4, 0x80, 0xea, 0x01, 0x42, 0xe1, - 0x07, 0xe9, 0xa4, 0x00, 0xa7, 0xd7, 0x01, 0xa8, 0xca, 0x01, 0xe9, 0xf2, - 0xa4, 0x00, 0x42, 0xbd, 0x26, 0xd9, 0xa4, 0x00, 0xab, 0xb3, 0x01, 0x42, - 0x74, 0x00, 0xe1, 0xa4, 0x00, 0x42, 0x6c, 0x00, 0xdf, 0xa4, 0x00, 0xae, - 0x9a, 0x01, 0xef, 0xf3, 0xa4, 0x80, 0x90, 0x01, 0xb0, 0x83, 0x01, 0xb3, - 0x77, 0xb4, 0x32, 0xf5, 0xf4, 0xa4, 0x80, 0x25, 0x42, 0xa9, 0x01, 0xea, - 0xa4, 0x00, 0x42, 0x4c, 0x26, 0xe7, 0xa4, 0x00, 0xb9, 0x0d, 0xba, 0x01, - 0xff, 0xe1, 0xe4, 0xa4, 0x00, 0x42, 0x22, 0x00, 0xe3, 0xa4, 0x40, 0xe1, - 0xec, 0xa4, 0x00, 0x42, 0x22, 0x00, 0xb0, 0x1f, 0x41, 0xe5, 0xf5, 0xa4, - 0x00, 0xe8, 0xf6, 0xa4, 0x40, 0xe1, 0xd4, 0xa4, 0x00, 0x42, 0x22, 0x00, - 0xd5, 0xa4, 0x00, 0x04, 0xbf, 0x0a, 0x0d, 0xb3, 0x01, 0xff, 0xe1, 0xdd, - 0xa4, 0x00, 0x42, 0x22, 0x00, 0xde, 0xa4, 0x40, 0x04, 0xed, 0x60, 0x06, - 0x45, 0xc5, 0xe5, 0xf9, 0xa4, 0x40, 0x42, 0x5d, 0x00, 0xfb, 0xa4, 0x00, - 0x43, 0xbd, 0xf0, 0xfa, 0xa4, 0x00, 0x43, 0x0e, 0xf1, 0xfd, 0xa4, 0x00, - 0x42, 0xff, 0x04, 0xfc, 0xa4, 0x00, 0x42, 0x35, 0x00, 0xf8, 0xa4, 0x40, - 0xe1, 0xe2, 0xa4, 0x00, 0x42, 0x22, 0x00, 0xeb, 0xa4, 0x40, 0xe1, 0xd1, - 0xa4, 0x00, 0x42, 0x22, 0x00, 0xd2, 0xa4, 0x40, 0xe5, 0xf7, 0xa4, 0x40, - 0xe1, 0xe0, 0xa4, 0x00, 0x42, 0x24, 0x02, 0xe5, 0xa4, 0x40, 0xe1, 0xd7, - 0xa4, 0x00, 0x42, 0x22, 0x00, 0xd8, 0xa4, 0x40, 0xe1, 0xe6, 0xa4, 0x00, - 0x42, 0x22, 0x00, 0xe8, 0xa4, 0x40, 0xe1, 0xd6, 0xa4, 0x00, 0x42, 0x22, - 0x00, 0xed, 0xa4, 0x40, 0xf5, 0xf1, 0xa4, 0x40, 0xe1, 0xd3, 0xa4, 0x00, - 0x42, 0x59, 0x00, 0xdc, 0xa4, 0x40, 0xe1, 0xda, 0xa4, 0x00, 0x42, 0x22, - 0x00, 0xdb, 0xa4, 0x40, 0xe5, 0xef, 0xa4, 0x40, 0x44, 0xd2, 0x07, 0x84, - 0xf4, 0x41, 0xa5, 0x0f, 0xab, 0x01, 0xff, 0x47, 0xea, 0x07, 0x17, 0xf5, - 0x01, 0x4d, 0xc7, 0x80, 0x87, 0xf5, 0x41, 0x80, 0xab, 0x16, 0x03, 0x17, - 0x00, 0x01, 0xff, 0x08, 0x8a, 0xc0, 0xd5, 0x09, 0x02, 0x26, 0x02, 0x01, - 0xff, 0x09, 0x9c, 0xb7, 0xdd, 0x04, 0x0a, 0xa3, 0xab, 0xae, 0x04, 0x02, - 0xeb, 0x07, 0x01, 0xff, 0x09, 0x31, 0xb9, 0x4e, 0x07, 0x5e, 0xd0, 0x01, - 0xff, 0x91, 0x3f, 0x42, 0x21, 0xea, 0x52, 0x00, 0x01, 0x42, 0xa6, 0xf1, - 0x53, 0x00, 0x01, 0x94, 0x29, 0x42, 0x7a, 0xc0, 0x56, 0x00, 0x01, 0x96, - 0x19, 0x42, 0x1b, 0x3f, 0x59, 0x00, 0x01, 0x98, 0x01, 0xff, 0xd2, 0x5a, - 0x00, 0x01, 0xd3, 0x5b, 0x00, 0x01, 0xd6, 0x5c, 0x00, 0x01, 0xd9, 0x5d, - 0x00, 0x41, 0xd3, 0x57, 0x00, 0x01, 0xd4, 0x58, 0x00, 0x41, 0xd7, 0x54, - 0x00, 0x01, 0xd9, 0x55, 0x00, 0x41, 0xd8, 0x50, 0x00, 0x01, 0xd9, 0x51, - 0x00, 0x41, 0x90, 0x9e, 0x03, 0x91, 0xeb, 0x02, 0x92, 0xb2, 0x02, 0x93, - 0xff, 0x01, 0x94, 0xcc, 0x01, 0x95, 0x93, 0x01, 0x96, 0x61, 0x97, 0x29, - 0x98, 0x0f, 0x99, 0x01, 0xff, 0x45, 0xf9, 0xde, 0x44, 0x00, 0x01, 0x45, - 0x3a, 0xdf, 0x4d, 0x00, 0x41, 0x44, 0x17, 0xdf, 0x14, 0x00, 0x01, 0x44, - 0xee, 0xe9, 0x13, 0x00, 0x01, 0x44, 0xa6, 0xea, 0x42, 0x00, 0x01, 0x45, - 0x6b, 0xe0, 0x4c, 0x00, 0x41, 0x44, 0xae, 0xe9, 0x12, 0x00, 0x01, 0x45, - 0x26, 0xdf, 0x43, 0x00, 0x01, 0x44, 0x26, 0xea, 0x1f, 0x00, 0x01, 0x44, - 0x5e, 0xea, 0x16, 0x00, 0x01, 0x44, 0x9a, 0xea, 0x3d, 0x00, 0x01, 0x44, - 0xea, 0xea, 0x38, 0x00, 0x01, 0x45, 0x2a, 0xe0, 0x48, 0x00, 0x01, 0x44, - 0x3a, 0xd6, 0x0f, 0x00, 0x01, 0x44, 0x72, 0xeb, 0x24, 0x00, 0x41, 0x44, - 0xba, 0xe9, 0x28, 0x00, 0x01, 0x43, 0x1c, 0x74, 0x03, 0x00, 0x01, 0x45, - 0x8a, 0xdf, 0x47, 0x00, 0x01, 0x44, 0xc2, 0xea, 0x0e, 0x00, 0x01, 0x45, - 0x39, 0xe0, 0x4b, 0x00, 0x01, 0x44, 0x3a, 0xeb, 0x11, 0x00, 0x01, 0x45, - 0x98, 0xe0, 0x4a, 0x00, 0x01, 0x44, 0x9e, 0xeb, 0x36, 0x00, 0x41, 0x44, - 0xb6, 0xe9, 0x22, 0x00, 0x01, 0x44, 0xda, 0xe9, 0x09, 0x00, 0x01, 0x44, - 0x22, 0xea, 0x1c, 0x00, 0x01, 0x44, 0x6a, 0xea, 0x2a, 0x00, 0x01, 0x44, - 0x92, 0xea, 0x37, 0x00, 0x01, 0x44, 0xce, 0xea, 0x1d, 0x00, 0x01, 0x44, - 0x36, 0xeb, 0x0a, 0x00, 0x01, 0x44, 0x76, 0xeb, 0x31, 0x00, 0x01, 0x44, - 0x96, 0xeb, 0x32, 0x00, 0x41, 0x44, 0xc2, 0xe9, 0x39, 0x00, 0x01, 0x44, - 0x02, 0xea, 0x2f, 0x00, 0x01, 0x44, 0x48, 0xcb, 0x3a, 0x00, 0x01, 0x44, - 0x3e, 0xea, 0x41, 0x00, 0x01, 0x44, 0x7e, 0xea, 0x10, 0x00, 0x01, 0x44, - 0xae, 0xea, 0x06, 0x00, 0x01, 0x44, 0xfe, 0xea, 0x0b, 0x00, 0x01, 0x45, - 0x93, 0xe0, 0x45, 0x00, 0x41, 0x44, 0xb2, 0xe9, 0x1b, 0x00, 0x01, 0x44, - 0xfe, 0xe9, 0x2d, 0x00, 0x01, 0x44, 0x2a, 0xea, 0x26, 0x00, 0x01, 0x45, - 0xb2, 0xdf, 0x49, 0x00, 0x01, 0x44, 0x02, 0xeb, 0x0d, 0x00, 0x01, 0x44, - 0x46, 0xeb, 0x34, 0x00, 0x01, 0x43, 0x5a, 0xeb, 0x01, 0x00, 0x01, 0x44, - 0x86, 0xeb, 0x20, 0x00, 0x41, 0x44, 0xca, 0xe9, 0x3f, 0x00, 0x01, 0x44, - 0xf6, 0xe9, 0x25, 0x00, 0x01, 0x44, 0x62, 0xea, 0x18, 0x00, 0x01, 0x44, - 0x86, 0xea, 0x1a, 0x00, 0x01, 0x44, 0x9e, 0xea, 0x40, 0x00, 0x01, 0x44, - 0x1a, 0xeb, 0x2c, 0x00, 0x01, 0x44, 0x42, 0xeb, 0x29, 0x00, 0x01, 0x43, - 0x84, 0xf0, 0x02, 0x00, 0x01, 0x45, 0xca, 0xe0, 0x46, 0x00, 0x41, 0x43, - 0x21, 0xf0, 0x04, 0x00, 0x01, 0x44, 0xf2, 0xe9, 0x21, 0x00, 0x01, 0x44, - 0x32, 0xea, 0x30, 0x00, 0x01, 0x44, 0x5a, 0xea, 0x15, 0x00, 0x01, 0x44, - 0x76, 0xea, 0x08, 0x00, 0x01, 0x44, 0xca, 0xea, 0x17, 0x00, 0x01, 0x44, - 0x16, 0xeb, 0x23, 0x00, 0x01, 0x44, 0x4e, 0xeb, 0x3c, 0x00, 0x41, 0x44, - 0xd2, 0xe9, 0x05, 0x00, 0x01, 0x44, 0x2e, 0xea, 0x2b, 0x00, 0x01, 0x44, - 0x66, 0xea, 0x1e, 0x00, 0x01, 0x44, 0x8a, 0xea, 0x33, 0x00, 0x01, 0x44, - 0xda, 0xea, 0x35, 0x00, 0x01, 0x44, 0x0e, 0xeb, 0x19, 0x00, 0x01, 0x44, - 0xfa, 0xb2, 0x07, 0x00, 0x01, 0x43, 0x81, 0xf0, 0x00, 0x00, 0x01, 0x44, - 0x8a, 0xeb, 0x2e, 0x00, 0x41, 0x91, 0x06, 0x49, 0xf8, 0xb2, 0xd2, 0x00, - 0x41, 0x92, 0x14, 0x93, 0x06, 0x48, 0x7a, 0xc0, 0xa4, 0x00, 0x41, 0x47, - 0x56, 0xcb, 0x98, 0x00, 0x01, 0x46, 0x10, 0xd6, 0x99, 0x00, 0x41, 0x46, - 0x3a, 0xd6, 0x93, 0x00, 0x01, 0x48, 0x82, 0xc0, 0x94, 0x00, 0x41, 0xa2, - 0x87, 0x01, 0x08, 0x92, 0xc9, 0x01, 0xff, 0x43, 0x3c, 0xf0, 0xde, 0x00, - 0x01, 0x92, 0x06, 0x43, 0x57, 0xf0, 0xfa, 0x00, 0x41, 0x90, 0x4a, 0x91, - 0x20, 0x92, 0x06, 0x42, 0xd7, 0xcf, 0xf9, 0x00, 0x41, 0xd1, 0xf3, 0x00, - 0x01, 0xd2, 0xf4, 0x00, 0x01, 0xd6, 0xf5, 0x00, 0x01, 0xd7, 0xf6, 0x00, - 0x01, 0xd8, 0xf7, 0x00, 0x01, 0xd9, 0xf8, 0x00, 0x41, 0xd0, 0xe9, 0x00, - 0x01, 0xd1, 0xea, 0x00, 0x01, 0xd2, 0xeb, 0x00, 0x01, 0xd3, 0xec, 0x00, - 0x01, 0xd4, 0xed, 0x00, 0x01, 0xd5, 0xee, 0x00, 0x01, 0xd6, 0xef, 0x00, - 0x01, 0xd7, 0xf0, 0x00, 0x01, 0xd8, 0xf1, 0x00, 0x01, 0xd9, 0xf2, 0x00, - 0x41, 0xd0, 0xdf, 0x00, 0x01, 0xd1, 0xe0, 0x00, 0x01, 0xd2, 0xe1, 0x00, - 0x01, 0xd3, 0xe2, 0x00, 0x01, 0xd4, 0xe3, 0x00, 0x01, 0xd5, 0xe4, 0x00, - 0x01, 0xd6, 0xe5, 0x00, 0x01, 0xd7, 0xe6, 0x00, 0x01, 0xd8, 0xe7, 0x00, - 0x01, 0xd9, 0xe8, 0x00, 0x41, 0x91, 0x84, 0x01, 0x92, 0x01, 0xff, 0x92, - 0x73, 0x93, 0x53, 0x94, 0x29, 0x95, 0x01, 0xff, 0xd1, 0xd5, 0x00, 0x01, - 0xd2, 0xd6, 0x00, 0x01, 0xd3, 0xd7, 0x00, 0x01, 0x46, 0xe6, 0xd5, 0xd8, - 0x00, 0x01, 0xd5, 0xd9, 0x00, 0x01, 0xd6, 0xda, 0x00, 0x01, 0xd7, 0xdb, - 0x00, 0x01, 0xd8, 0xdc, 0x00, 0x01, 0xd9, 0xdd, 0x00, 0x41, 0x51, 0x71, - 0x56, 0xcc, 0x00, 0x01, 0x49, 0xe6, 0xb2, 0xcd, 0x00, 0x01, 0x4f, 0xc5, - 0x68, 0xce, 0x00, 0x01, 0x47, 0x80, 0xcb, 0xcf, 0x00, 0x01, 0xd5, 0xd0, - 0x00, 0x01, 0xd6, 0xd1, 0x00, 0x01, 0xd8, 0xd3, 0x00, 0x01, 0xd9, 0xd4, - 0x00, 0x41, 0x47, 0x2c, 0xcb, 0xc6, 0x00, 0x01, 0x47, 0x3a, 0xcb, 0xc7, - 0x00, 0x01, 0xd2, 0xc8, 0x00, 0x01, 0x47, 0x79, 0xcb, 0xc9, 0x00, 0x01, - 0xd4, 0xca, 0x00, 0x01, 0xd6, 0xcb, 0x00, 0x41, 0x4b, 0x82, 0x96, 0xc4, - 0x00, 0x01, 0x49, 0x0a, 0xb3, 0xc5, 0x00, 0x41, 0x90, 0xfb, 0x01, 0x92, - 0xda, 0x01, 0x93, 0xc7, 0x01, 0x94, 0xaa, 0x01, 0x95, 0x83, 0x01, 0x96, - 0x55, 0x97, 0x2b, 0x98, 0x0d, 0x99, 0x01, 0xff, 0xd0, 0xc2, 0x00, 0x01, - 0x48, 0x6a, 0xc0, 0xc3, 0x00, 0x41, 0xd0, 0xbb, 0x00, 0x01, 0xd1, 0xbc, - 0x00, 0x01, 0xd2, 0xbd, 0x00, 0x01, 0xd3, 0xbe, 0x00, 0x01, 0xd4, 0xbf, - 0x00, 0x01, 0xd5, 0xc0, 0x00, 0x01, 0xd9, 0xc1, 0x00, 0x41, 0xd0, 0xb2, - 0x00, 0x01, 0xd1, 0xb3, 0x00, 0x01, 0xd2, 0xb4, 0x00, 0x01, 0x47, 0x64, - 0xcb, 0xb5, 0x00, 0x01, 0xd4, 0xb6, 0x00, 0x01, 0x46, 0x2e, 0xd6, 0xb7, - 0x00, 0x01, 0xd7, 0xb8, 0x00, 0x01, 0xd8, 0xb9, 0x00, 0x01, 0xd9, 0xba, - 0x00, 0x41, 0xd0, 0xa8, 0x00, 0x01, 0xd1, 0xa9, 0x00, 0x01, 0x49, 0xef, - 0xb2, 0xaa, 0x00, 0x01, 0x48, 0x72, 0xc0, 0xab, 0x00, 0x01, 0xd4, 0xac, - 0x00, 0x01, 0xd5, 0xad, 0x00, 0x01, 0xd6, 0xae, 0x00, 0x01, 0xd7, 0xaf, - 0x00, 0x01, 0xd8, 0xb0, 0x00, 0x01, 0xd9, 0xb1, 0x00, 0x41, 0xd0, 0x9f, - 0x00, 0x01, 0x46, 0xb6, 0xd5, 0xa0, 0x00, 0x01, 0xd2, 0xa1, 0x00, 0x01, - 0xd3, 0xa2, 0x00, 0x01, 0xd4, 0xa3, 0x00, 0x01, 0xd7, 0xa5, 0x00, 0x01, - 0xd8, 0xa6, 0x00, 0x01, 0x47, 0xa3, 0xcb, 0xa7, 0x00, 0x41, 0x48, 0x5a, - 0xc0, 0x9a, 0x00, 0x01, 0x46, 0xb0, 0xd5, 0x9b, 0x00, 0x01, 0xd2, 0x9c, - 0x00, 0x01, 0x46, 0x16, 0xd6, 0x9d, 0x00, 0x01, 0xd6, 0x9e, 0x00, 0x41, - 0x45, 0x1c, 0xdf, 0x95, 0x00, 0x01, 0x46, 0xc2, 0xd5, 0x96, 0x00, 0x01, - 0xd2, 0x97, 0x00, 0x41, 0x47, 0x33, 0xcb, 0x8e, 0x00, 0x01, 0x48, 0x62, - 0xc0, 0x8f, 0x00, 0x01, 0x47, 0x41, 0xcb, 0x90, 0x00, 0x01, 0x47, 0x72, - 0xcb, 0x91, 0x00, 0x01, 0x49, 0x13, 0xb3, 0x92, 0x00, 0x41, 0x45, 0x17, - 0xdf, 0x80, 0x00, 0x01, 0x47, 0x48, 0xcb, 0x81, 0x00, 0x01, 0x46, 0xec, - 0xd5, 0x82, 0x00, 0x01, 0x95, 0x39, 0x96, 0x2b, 0x97, 0x1d, 0x98, 0x0f, - 0x99, 0x01, 0xff, 0x45, 0x36, 0xe3, 0x8c, 0x00, 0x01, 0x46, 0xea, 0xda, - 0x8d, 0x00, 0x41, 0x45, 0x40, 0xe3, 0x8a, 0x00, 0x01, 0x46, 0xe4, 0xda, - 0x8b, 0x00, 0x41, 0x4a, 0x01, 0xa8, 0x88, 0x00, 0x01, 0x49, 0x67, 0xb9, - 0x89, 0x00, 0x41, 0x45, 0x3b, 0xe3, 0x86, 0x00, 0x01, 0x45, 0x39, 0xe5, - 0x87, 0x00, 0x41, 0x46, 0x32, 0xd5, 0x83, 0x00, 0x01, 0x46, 0xc2, 0xd8, - 0x84, 0x00, 0x01, 0x4a, 0x3f, 0xab, 0x85, 0x00, 0x41, 0x44, 0xce, 0xe9, - 0x1b, 0x06, 0x01, 0x91, 0xb1, 0x0c, 0x93, 0xe8, 0x09, 0x94, 0xee, 0x08, - 0x95, 0x90, 0x06, 0x96, 0xac, 0x04, 0x97, 0x9b, 0x03, 0x02, 0xd9, 0xf0, - 0xf6, 0x02, 0xa2, 0x01, 0xff, 0x90, 0x3f, 0x91, 0x01, 0xff, 0x42, 0x4e, - 0xdf, 0x48, 0x06, 0x01, 0x92, 0x28, 0x02, 0x37, 0xe9, 0x1c, 0x42, 0xb8, - 0xf1, 0x50, 0x06, 0x01, 0x42, 0xa1, 0xf1, 0x51, 0x06, 0x01, 0x98, 0x06, - 0x42, 0x2c, 0xf0, 0x54, 0x06, 0x41, 0xd0, 0x52, 0x06, 0x01, 0xd8, 0x53, - 0x06, 0x41, 0xe1, 0x4d, 0x06, 0x01, 0xe2, 0x4e, 0x06, 0x41, 0xd0, 0x49, - 0x06, 0x01, 0xd2, 0x4b, 0x06, 0x01, 0xd3, 0x4c, 0x06, 0x41, 0x90, 0x8b, - 0x02, 0x91, 0xf4, 0x01, 0x92, 0xb6, 0x01, 0x93, 0x9b, 0x01, 0x94, 0x79, - 0x95, 0x53, 0x96, 0x39, 0x97, 0x1b, 0x98, 0x01, 0xff, 0xd0, 0x41, 0x06, - 0x01, 0xd1, 0x42, 0x06, 0x01, 0xd2, 0x43, 0x06, 0x01, 0xd5, 0x44, 0x06, - 0x01, 0xd6, 0x45, 0x06, 0x01, 0xd7, 0x46, 0x06, 0x41, 0xd0, 0x3a, 0x06, - 0x01, 0xd3, 0x3b, 0x06, 0x01, 0xd4, 0x3c, 0x06, 0x01, 0xd6, 0x3d, 0x06, - 0x01, 0xd7, 0x3e, 0x06, 0x01, 0xd8, 0x3f, 0x06, 0x01, 0xd9, 0x40, 0x06, - 0x41, 0xd0, 0x34, 0x06, 0x01, 0xd1, 0x35, 0x06, 0x01, 0xd5, 0x36, 0x06, - 0x01, 0xd6, 0x37, 0x06, 0x01, 0xd7, 0x38, 0x06, 0x01, 0xd9, 0x39, 0x06, - 0x41, 0xd0, 0x2b, 0x06, 0x01, 0xd1, 0x2c, 0x06, 0x01, 0xd3, 0x2d, 0x06, - 0x01, 0xd4, 0x2e, 0x06, 0x01, 0xd5, 0x2f, 0x06, 0x01, 0xd6, 0x30, 0x06, - 0x01, 0xd7, 0x31, 0x06, 0x01, 0xd8, 0x32, 0x06, 0x01, 0xd9, 0x33, 0x06, - 0x41, 0xd0, 0x23, 0x06, 0x01, 0xd1, 0x24, 0x06, 0x01, 0xd4, 0x25, 0x06, - 0x01, 0xd5, 0x26, 0x06, 0x01, 0xd6, 0x27, 0x06, 0x01, 0xd7, 0x28, 0x06, - 0x01, 0xd8, 0x29, 0x06, 0x01, 0xd9, 0x2a, 0x06, 0x41, 0xd0, 0x1d, 0x06, - 0x01, 0xd1, 0x1e, 0x06, 0x01, 0xd4, 0x1f, 0x06, 0x01, 0xd7, 0x20, 0x06, - 0x01, 0xd8, 0x21, 0x06, 0x01, 0xd9, 0x22, 0x06, 0x41, 0xd0, 0x0e, 0x06, - 0x01, 0xd1, 0x0f, 0x06, 0x81, 0x2a, 0xd2, 0x12, 0x06, 0x81, 0x1d, 0xd3, - 0x15, 0x06, 0x81, 0x14, 0xd4, 0x17, 0x06, 0x01, 0xd6, 0x18, 0x06, 0x01, - 0xd7, 0x19, 0x06, 0x01, 0xd8, 0x1a, 0x06, 0x01, 0xd9, 0x1c, 0x06, 0x41, - 0xed, 0x16, 0x06, 0x41, 0xe6, 0x13, 0x06, 0x01, 0xed, 0x14, 0x06, 0x41, - 0xe6, 0x10, 0x06, 0x01, 0xed, 0x11, 0x06, 0x41, 0xd0, 0x09, 0x06, 0x01, - 0xd1, 0x0a, 0x06, 0x01, 0xd3, 0x0b, 0x06, 0x01, 0xd6, 0x0c, 0x06, 0x01, - 0xd7, 0x0d, 0x06, 0x41, 0xd1, 0x00, 0x06, 0x01, 0xd2, 0x01, 0x06, 0x01, - 0xd3, 0x02, 0x06, 0x01, 0xd4, 0x03, 0x06, 0x01, 0xd5, 0x04, 0x06, 0x01, - 0xd6, 0x05, 0x06, 0x01, 0xd7, 0x06, 0x06, 0x01, 0xd8, 0x07, 0x06, 0x01, - 0xd9, 0x08, 0x06, 0x41, 0xd0, 0x60, 0x07, 0x01, 0xd1, 0x61, 0x07, 0x01, - 0xd2, 0x62, 0x07, 0x01, 0xd3, 0x63, 0x07, 0x01, 0xd4, 0x64, 0x07, 0x01, - 0xd5, 0x65, 0x07, 0x01, 0xd6, 0x66, 0x07, 0x01, 0xd7, 0x67, 0x07, 0x41, - 0x90, 0x38, 0x91, 0x0c, 0x47, 0x4f, 0xcb, 0x54, 0x07, 0x01, 0x45, 0xc6, - 0xdf, 0x55, 0x07, 0x41, 0x43, 0x71, 0x56, 0x4d, 0x07, 0x01, 0x43, 0x2d, - 0xf0, 0x4e, 0x07, 0x01, 0x43, 0x3a, 0xea, 0x4f, 0x07, 0x01, 0x47, 0x6b, - 0xcb, 0x50, 0x07, 0x01, 0x45, 0xcb, 0xdf, 0x51, 0x07, 0x01, 0x44, 0xaa, - 0xea, 0x52, 0x07, 0x01, 0x44, 0x2e, 0xeb, 0x53, 0x07, 0x41, 0x43, 0x3a, - 0xcb, 0x40, 0x07, 0x01, 0x43, 0x16, 0xea, 0x41, 0x07, 0x01, 0x43, 0x4e, - 0xf0, 0x42, 0x07, 0x01, 0x43, 0x5d, 0xf0, 0x43, 0x07, 0x01, 0x43, 0xb2, - 0xea, 0x44, 0x07, 0x01, 0x43, 0x22, 0xd6, 0x45, 0x07, 0x01, 0x43, 0x57, - 0xe0, 0x46, 0x07, 0x01, 0x43, 0x82, 0xc0, 0x47, 0x07, 0x01, 0x99, 0x01, - 0xff, 0x42, 0x73, 0x00, 0x48, 0x07, 0x01, 0x8d, 0x01, 0xff, 0x44, 0x1e, - 0xea, 0x49, 0x07, 0x01, 0x44, 0x52, 0xea, 0x4a, 0x07, 0x01, 0x44, 0x82, - 0xea, 0x4b, 0x07, 0x01, 0x44, 0x06, 0xeb, 0x4c, 0x07, 0x41, 0x90, 0xbe, - 0x01, 0x91, 0x93, 0x01, 0x92, 0x6d, 0x93, 0x5f, 0x94, 0x3d, 0x95, 0x17, - 0x96, 0x01, 0xff, 0xd0, 0x32, 0x07, 0x01, 0xd1, 0x33, 0x07, 0x01, 0xd2, - 0x34, 0x07, 0x01, 0xd3, 0x35, 0x07, 0x01, 0xd4, 0x36, 0x07, 0x41, 0xd1, - 0x29, 0x07, 0x01, 0xd2, 0x2a, 0x07, 0x01, 0xd3, 0x2b, 0x07, 0x01, 0xd4, - 0x2c, 0x07, 0x01, 0xd5, 0x2d, 0x07, 0x01, 0xd6, 0x2e, 0x07, 0x01, 0xd7, - 0x2f, 0x07, 0x01, 0xd8, 0x30, 0x07, 0x01, 0xd9, 0x31, 0x07, 0x41, 0xd0, - 0x21, 0x07, 0x01, 0xd2, 0x22, 0x07, 0x01, 0xd3, 0x23, 0x07, 0x01, 0xd4, - 0x24, 0x07, 0x01, 0xd5, 0x25, 0x07, 0x01, 0xd6, 0x26, 0x07, 0x01, 0xd8, - 0x27, 0x07, 0x01, 0xd9, 0x28, 0x07, 0x41, 0xd4, 0x1e, 0x07, 0x01, 0xd7, - 0x1f, 0x07, 0x01, 0xd8, 0x20, 0x07, 0x41, 0xd0, 0x15, 0x07, 0x01, 0xd1, - 0x16, 0x07, 0x01, 0xd2, 0x17, 0x07, 0x01, 0xd3, 0x18, 0x07, 0x01, 0xd4, - 0x19, 0x07, 0x01, 0xd6, 0x1a, 0x07, 0x01, 0xd7, 0x1b, 0x07, 0x01, 0xd8, - 0x1c, 0x07, 0x01, 0xd9, 0x1d, 0x07, 0x41, 0xd0, 0x0b, 0x07, 0x01, 0xd1, - 0x0c, 0x07, 0x01, 0xd2, 0x0d, 0x07, 0x01, 0xd3, 0x0e, 0x07, 0x01, 0xd4, - 0x0f, 0x07, 0x01, 0xd5, 0x10, 0x07, 0x01, 0xd6, 0x11, 0x07, 0x01, 0xd7, - 0x12, 0x07, 0x01, 0xd8, 0x13, 0x07, 0x01, 0xd9, 0x14, 0x07, 0x41, 0xd0, - 0x03, 0x07, 0x01, 0xd1, 0x04, 0x07, 0x01, 0xd2, 0x05, 0x07, 0x01, 0xd3, - 0x06, 0x07, 0x01, 0xd4, 0x07, 0x07, 0x01, 0xd6, 0x08, 0x07, 0x01, 0xd8, - 0x09, 0x07, 0x01, 0xd9, 0x0a, 0x07, 0x41, 0x90, 0xb8, 0x02, 0x91, 0x9d, - 0x02, 0x92, 0xf6, 0x01, 0x93, 0xcf, 0x01, 0x94, 0xb0, 0x01, 0x95, 0x89, - 0x01, 0x96, 0x6f, 0x97, 0x45, 0x98, 0x1b, 0x99, 0x01, 0xff, 0xd1, 0xfd, - 0x06, 0x01, 0xd2, 0xfe, 0x06, 0x01, 0xd4, 0xff, 0x06, 0x01, 0xd5, 0x00, - 0x07, 0x01, 0xd6, 0x01, 0x07, 0x01, 0xd8, 0x02, 0x07, 0x41, 0xd0, 0xf3, - 0x06, 0x01, 0xd1, 0xf4, 0x06, 0x01, 0xd2, 0xf5, 0x06, 0x01, 0xd3, 0xf6, - 0x06, 0x01, 0xd4, 0xf7, 0x06, 0x01, 0xd5, 0xf8, 0x06, 0x01, 0xd6, 0xf9, - 0x06, 0x01, 0xd7, 0xfa, 0x06, 0x01, 0xd8, 0xfb, 0x06, 0x01, 0xd9, 0xfc, - 0x06, 0x41, 0xd0, 0xe9, 0x06, 0x01, 0xd1, 0xea, 0x06, 0x01, 0xd2, 0xeb, - 0x06, 0x01, 0xd3, 0xec, 0x06, 0x01, 0xd4, 0xed, 0x06, 0x01, 0xd5, 0xee, - 0x06, 0x01, 0xd6, 0xef, 0x06, 0x01, 0xd7, 0xf0, 0x06, 0x01, 0xd8, 0xf1, - 0x06, 0x01, 0xd9, 0xf2, 0x06, 0x41, 0xd3, 0xe3, 0x06, 0x01, 0xd4, 0xe4, - 0x06, 0x01, 0xd5, 0xe5, 0x06, 0x01, 0xd6, 0xe6, 0x06, 0x01, 0xd8, 0xe7, - 0x06, 0x01, 0xd9, 0xe8, 0x06, 0x41, 0xd0, 0xda, 0x06, 0x01, 0xd1, 0xdb, - 0x06, 0x01, 0xd2, 0xdc, 0x06, 0x01, 0xd3, 0xdd, 0x06, 0x01, 0xd4, 0xde, - 0x06, 0x01, 0xd5, 0xdf, 0x06, 0x01, 0xd6, 0xe0, 0x06, 0x01, 0xd7, 0xe1, - 0x06, 0x01, 0xd9, 0xe2, 0x06, 0x41, 0xd0, 0xd3, 0x06, 0x01, 0xd1, 0xd4, - 0x06, 0x01, 0xd2, 0xd5, 0x06, 0x01, 0xd5, 0xd6, 0x06, 0x01, 0xd7, 0xd7, - 0x06, 0x01, 0xd8, 0xd8, 0x06, 0x01, 0xd9, 0xd9, 0x06, 0x41, 0xd0, 0xca, - 0x06, 0x01, 0xd1, 0xcb, 0x06, 0x01, 0xd2, 0xcc, 0x06, 0x01, 0xd4, 0xcd, - 0x06, 0x01, 0xd5, 0xce, 0x06, 0x01, 0xd6, 0xcf, 0x06, 0x01, 0xd7, 0xd0, - 0x06, 0x01, 0xd8, 0xd1, 0x06, 0x01, 0xd9, 0xd2, 0x06, 0x41, 0xd0, 0xc1, - 0x06, 0x01, 0xd1, 0xc2, 0x06, 0x01, 0xd3, 0xc3, 0x06, 0x01, 0xd4, 0xc4, - 0x06, 0x01, 0xd5, 0xc5, 0x06, 0x01, 0xd6, 0xc6, 0x06, 0x01, 0xd7, 0xc7, - 0x06, 0x01, 0xd8, 0xc8, 0x06, 0x01, 0xd9, 0xc9, 0x06, 0x41, 0xd0, 0xbb, - 0x06, 0x01, 0xd1, 0xbc, 0x06, 0x01, 0xd2, 0xbd, 0x06, 0x01, 0xd3, 0xbe, - 0x06, 0x01, 0xd5, 0xbf, 0x06, 0x01, 0xd6, 0xc0, 0x06, 0x41, 0xd1, 0xb3, - 0x06, 0x01, 0xd2, 0xb4, 0x06, 0x01, 0xd3, 0xb5, 0x06, 0x01, 0xd4, 0xb6, - 0x06, 0x01, 0xd5, 0xb7, 0x06, 0x01, 0xd6, 0xb8, 0x06, 0x01, 0xd8, 0xb9, - 0x06, 0x01, 0xd9, 0xba, 0x06, 0x41, 0x90, 0x39, 0x91, 0x01, 0xff, 0x45, - 0x21, 0xdf, 0xaa, 0x06, 0x01, 0x45, 0x49, 0xdf, 0xab, 0x06, 0x01, 0x45, - 0x94, 0xdf, 0xac, 0x06, 0x01, 0x45, 0xc1, 0xdf, 0xad, 0x06, 0x01, 0x45, - 0x07, 0xe0, 0xae, 0x06, 0x01, 0x45, 0x1b, 0xe0, 0xaf, 0x06, 0x01, 0x45, - 0x43, 0xe0, 0xb0, 0x06, 0x01, 0x45, 0x70, 0xe0, 0xb1, 0x06, 0x01, 0x45, - 0x9d, 0xe0, 0xb2, 0x06, 0x41, 0x45, 0x21, 0xdf, 0xa0, 0x06, 0x01, 0x45, - 0x49, 0xdf, 0xa1, 0x06, 0x01, 0x45, 0x94, 0xdf, 0xa2, 0x06, 0x01, 0x45, - 0xc1, 0xdf, 0xa3, 0x06, 0x01, 0x45, 0x07, 0xe0, 0xa4, 0x06, 0x01, 0x45, - 0x1b, 0xe0, 0xa5, 0x06, 0x01, 0x45, 0x43, 0xe0, 0xa6, 0x06, 0x01, 0x45, - 0x70, 0xe0, 0xa7, 0x06, 0x01, 0x45, 0x9d, 0xe0, 0xa8, 0x06, 0x01, 0x45, - 0xde, 0xe0, 0xa9, 0x06, 0x41, 0x90, 0x94, 0x02, 0x91, 0xdf, 0x01, 0x92, - 0xb4, 0x01, 0x93, 0x89, 0x01, 0x94, 0x5f, 0x95, 0x35, 0x96, 0x0b, 0x97, - 0x01, 0xff, 0xd0, 0x9e, 0x06, 0x01, 0xd1, 0x9f, 0x06, 0x41, 0xd0, 0x94, - 0x06, 0x01, 0xd1, 0x95, 0x06, 0x01, 0xd2, 0x96, 0x06, 0x01, 0xd3, 0x97, - 0x06, 0x01, 0xd4, 0x98, 0x06, 0x01, 0xd5, 0x99, 0x06, 0x01, 0xd6, 0x9a, - 0x06, 0x01, 0xd7, 0x9b, 0x06, 0x01, 0xd8, 0x9c, 0x06, 0x01, 0xd9, 0x9d, - 0x06, 0x41, 0xd0, 0x8a, 0x06, 0x01, 0xd1, 0x8b, 0x06, 0x01, 0xd2, 0x8c, - 0x06, 0x01, 0xd3, 0x8d, 0x06, 0x01, 0xd4, 0x8e, 0x06, 0x01, 0xd5, 0x8f, - 0x06, 0x01, 0xd6, 0x90, 0x06, 0x01, 0xd7, 0x91, 0x06, 0x01, 0xd8, 0x92, - 0x06, 0x01, 0xd9, 0x93, 0x06, 0x41, 0xd0, 0x80, 0x06, 0x01, 0xd1, 0x81, - 0x06, 0x01, 0xd2, 0x82, 0x06, 0x01, 0xd3, 0x83, 0x06, 0x01, 0xd4, 0x84, - 0x06, 0x01, 0xd5, 0x85, 0x06, 0x01, 0xd6, 0x86, 0x06, 0x01, 0xd7, 0x87, - 0x06, 0x01, 0xd8, 0x88, 0x06, 0x01, 0xd9, 0x89, 0x06, 0x41, 0xd0, 0x76, - 0x06, 0x01, 0xd1, 0x77, 0x06, 0x01, 0xd2, 0x78, 0x06, 0x01, 0xd3, 0x79, - 0x06, 0x01, 0xd4, 0x7a, 0x06, 0x01, 0xd5, 0x7b, 0x06, 0x01, 0xd6, 0x7c, - 0x06, 0x01, 0xd7, 0x7d, 0x06, 0x01, 0xd8, 0x7e, 0x06, 0x01, 0xd9, 0x7f, - 0x06, 0x41, 0xd0, 0x6c, 0x06, 0x01, 0xd1, 0x6d, 0x06, 0x01, 0xd2, 0x6e, - 0x06, 0x01, 0xd3, 0x6f, 0x06, 0x01, 0xd4, 0x70, 0x06, 0x01, 0xd5, 0x71, - 0x06, 0x01, 0xd6, 0x72, 0x06, 0x01, 0xd7, 0x73, 0x06, 0x01, 0xd8, 0x74, - 0x06, 0x01, 0xd9, 0x75, 0x06, 0x41, 0xd0, 0x60, 0x06, 0x01, 0xd1, 0x61, - 0x06, 0x01, 0xd2, 0x62, 0x06, 0x01, 0x93, 0x18, 0xd4, 0x66, 0x06, 0x01, - 0xd5, 0x67, 0x06, 0x01, 0xd6, 0x68, 0x06, 0x01, 0xd7, 0x69, 0x06, 0x01, - 0xd8, 0x6a, 0x06, 0x01, 0xd9, 0x6b, 0x06, 0x41, 0xe1, 0x63, 0x06, 0x01, - 0xe2, 0x64, 0x06, 0x01, 0xe3, 0x65, 0x06, 0x41, 0xd1, 0x55, 0x06, 0x01, - 0xd2, 0x56, 0x06, 0x01, 0xd3, 0x57, 0x06, 0x01, 0xd4, 0x58, 0x06, 0x01, - 0xd5, 0x59, 0x06, 0x01, 0xd6, 0x5a, 0x06, 0x01, 0xd7, 0x5b, 0x06, 0x01, - 0xd8, 0x5c, 0x06, 0x01, 0x99, 0x01, 0xff, 0xe1, 0x5d, 0x06, 0x01, 0xe2, - 0x5e, 0x06, 0x01, 0xe3, 0x5f, 0x06, 0x41, 0x46, 0xa4, 0xd5, 0x47, 0x06, - 0x01, 0x43, 0x45, 0xf0, 0x4a, 0x06, 0x01, 0x43, 0x5a, 0xf0, 0x4f, 0x06, - 0x41, 0x44, 0x31, 0x20, 0x0a, 0x00, 0x00, 0x0c, 0x8d, 0x8e, 0x13, 0x49, - 0x36, 0x20, 0x28, 0x20, 0x00, 0x4a, 0x13, 0x3b, 0x0b, 0x00, 0xc0, 0x00, - 0x44, 0x15, 0xb6, 0x8a, 0x00, 0x40, 0x56, 0x01, 0x35, 0x14, 0x2a, 0x00, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x5c, 0x8a, 0x18, 0x12, 0x2a, 0x00, 0x5d, - 0x1e, 0x16, 0x13, 0x2a, 0x40, 0x03, 0xdf, 0xc6, 0x06, 0x53, 0x65, 0x49, - 0xcf, 0x32, 0x40, 0x06, 0xc4, 0x06, 0xec, 0x02, 0x50, 0xad, 0x00, 0x44, - 0x19, 0x00, 0x07, 0xc1, 0x05, 0xab, 0x01, 0x4d, 0xd6, 0x33, 0x45, 0x19, - 0x00, 0xb3, 0x36, 0x05, 0x6c, 0x38, 0x01, 0xff, 0x06, 0x2e, 0x03, 0x06, - 0x4f, 0x98, 0x68, 0x00, 0x19, 0x40, 0xe1, 0x20, 0x19, 0x80, 0x1a, 0xe5, - 0x27, 0x19, 0x80, 0x11, 0xe9, 0x21, 0x19, 0x00, 0xef, 0x28, 0x19, 0x80, - 0x04, 0xf5, 0x22, 0x19, 0x40, 0xef, 0x25, 0x19, 0x40, 0xe5, 0x23, 0x19, - 0x40, 0xe9, 0x24, 0x19, 0x00, 0xf5, 0x26, 0x19, 0x40, 0x04, 0x30, 0x03, - 0x51, 0x0c, 0x4c, 0x08, 0x17, 0x10, 0x5a, 0x66, 0x01, 0xff, 0x42, 0x71, - 0x00, 0x2a, 0x19, 0x00, 0x42, 0xa9, 0x01, 0x2b, 0x19, 0x00, 0x42, 0x34, - 0x22, 0x29, 0x19, 0x40, 0x48, 0xd0, 0x15, 0x32, 0x19, 0x00, 0x42, 0x1b, - 0x02, 0x30, 0x19, 0x00, 0x42, 0x74, 0x00, 0x38, 0x19, 0x00, 0x42, 0x6c, - 0x00, 0x36, 0x19, 0x00, 0xae, 0x12, 0x42, 0x6c, 0x09, 0x35, 0x19, 0x00, - 0x42, 0x71, 0x00, 0x37, 0x19, 0x00, 0x42, 0x12, 0x00, 0x33, 0x19, 0x40, - 0xe1, 0x34, 0x19, 0x00, 0x42, 0x24, 0x02, 0x31, 0x19, 0x40, 0x49, 0x98, - 0xb8, 0x3a, 0x19, 0x00, 0x43, 0x49, 0x1c, 0x40, 0x19, 0x00, 0x49, 0xb8, - 0xb9, 0x39, 0x19, 0x00, 0x44, 0x32, 0xef, 0x3b, 0x19, 0x40, 0xa2, 0xa9, - 0x01, 0xa3, 0x9c, 0x01, 0xa4, 0x8f, 0x01, 0xa7, 0x7d, 0x42, 0x22, 0x00, - 0x1c, 0x19, 0x00, 0xaa, 0x6b, 0xab, 0x5f, 0x42, 0x74, 0x00, 0x17, 0x19, - 0x00, 0x42, 0x6c, 0x00, 0x14, 0x19, 0x00, 0xae, 0x47, 0xb0, 0x3b, 0x42, - 0x71, 0x00, 0x16, 0x19, 0x00, 0xb3, 0x23, 0xb4, 0x11, 0x42, 0xa9, 0x01, - 0x18, 0x19, 0x00, 0x42, 0x34, 0x22, 0x15, 0x19, 0xc0, 0x00, 0xee, 0x0a, - 0x19, 0x40, 0xe1, 0x0b, 0x19, 0x00, 0x42, 0x22, 0x00, 0x0c, 0x19, 0x00, - 0x42, 0x71, 0x00, 0x1e, 0x19, 0x40, 0xe1, 0x1b, 0x19, 0x00, 0x42, 0x22, - 0x00, 0x19, 0x19, 0x00, 0x42, 0x15, 0x06, 0x1a, 0x19, 0x40, 0xe1, 0x10, - 0x19, 0x00, 0x42, 0x22, 0x00, 0x11, 0x19, 0x40, 0xe1, 0x0f, 0x19, 0x00, - 0x42, 0x24, 0x02, 0x05, 0x19, 0x40, 0xe1, 0x01, 0x19, 0x00, 0x42, 0x22, - 0x00, 0x02, 0x19, 0x40, 0xe1, 0x08, 0x19, 0x00, 0x42, 0x22, 0x00, 0x09, - 0x19, 0x40, 0xe1, 0x03, 0x19, 0x00, 0x42, 0x22, 0x00, 0x04, 0x19, 0x00, - 0x43, 0xe8, 0x34, 0x1d, 0x19, 0x40, 0xe1, 0x0d, 0x19, 0x00, 0x42, 0x22, - 0x00, 0x0e, 0x19, 0x40, 0xe1, 0x06, 0x19, 0x00, 0x42, 0x22, 0x00, 0x07, - 0x19, 0x40, 0xe1, 0x12, 0x19, 0x00, 0x42, 0x22, 0x00, 0x13, 0x19, 0x40, - 0x45, 0xc3, 0x0a, 0x4e, 0x19, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x4f, - 0x19, 0x00, 0x43, 0xbf, 0x0a, 0x47, 0x19, 0x00, 0xb3, 0x14, 0xb4, 0x06, - 0x44, 0xa1, 0x1d, 0x46, 0x19, 0x40, 0x44, 0x25, 0x01, 0x49, 0x19, 0x00, - 0x42, 0x15, 0x02, 0x48, 0x19, 0x40, 0x44, 0x27, 0x1d, 0x4d, 0x19, 0x00, - 0x42, 0x60, 0x25, 0x4c, 0x19, 0x40, 0x43, 0xa7, 0x05, 0x4b, 0x19, 0x00, - 0x43, 0xcb, 0x06, 0x4a, 0x19, 0x40, 0x56, 0x77, 0x28, 0x72, 0xf6, 0x01, - 0x02, 0xcb, 0x00, 0x01, 0xff, 0x80, 0x14, 0x44, 0x07, 0x07, 0x07, 0x26, - 0xc0, 0x00, 0x45, 0xc7, 0xde, 0xf2, 0xf5, 0xc1, 0x00, 0x47, 0x14, 0x7b, - 0xf1, 0xf5, 0x41, 0x4a, 0x0d, 0xa6, 0x75, 0xfa, 0x01, 0x4a, 0x67, 0xa6, - 0xf8, 0xf5, 0x01, 0x55, 0xf7, 0x39, 0xbb, 0xf7, 0x01, 0xa6, 0x48, 0x4b, - 0x9f, 0x5f, 0xa2, 0xf7, 0x01, 0x64, 0x24, 0x09, 0x72, 0x27, 0x00, 0xb2, - 0x2e, 0xb3, 0x1a, 0xb4, 0x0c, 0x4c, 0x32, 0x00, 0x58, 0x27, 0x00, 0x4c, - 0x50, 0x1f, 0x8e, 0xf7, 0x41, 0x57, 0xe5, 0x2d, 0xc0, 0xf7, 0x01, 0x58, - 0x45, 0x2b, 0xd2, 0xf7, 0x41, 0x46, 0xa7, 0x18, 0xa9, 0xf7, 0x01, 0x44, - 0x21, 0x04, 0x91, 0x25, 0x00, 0x52, 0xb6, 0x51, 0xb5, 0xf7, 0x41, 0x43, - 0x24, 0x17, 0x88, 0xf6, 0x01, 0x64, 0x00, 0x09, 0x73, 0x27, 0x40, 0x04, - 0xa7, 0x05, 0x11, 0x12, 0x94, 0x15, 0x01, 0xff, 0x44, 0xa6, 0x15, 0xcc, - 0x2b, 0x00, 0x44, 0xe2, 0x12, 0xc4, 0xf7, 0x41, 0x52, 0x4b, 0x2b, 0xc9, - 0xf7, 0x01, 0x4f, 0x4e, 0x1c, 0xaf, 0xf7, 0x41, 0x02, 0xf5, 0x13, 0xba, - 0x15, 0x44, 0x52, 0xec, 0xd2, 0xf4, 0x01, 0x02, 0xc5, 0x00, 0xc6, 0x05, - 0xe7, 0xb5, 0xf9, 0x01, 0x43, 0x98, 0x07, 0x4b, 0xf3, 0x01, 0xef, 0x4c, - 0x26, 0x80, 0xb0, 0x05, 0x05, 0xa1, 0xe6, 0xd4, 0x01, 0x08, 0xee, 0x00, - 0x06, 0x4a, 0xe9, 0xb0, 0x9a, 0xf3, 0x41, 0xa1, 0x87, 0x01, 0x0b, 0xfb, - 0x38, 0x77, 0x4f, 0x2d, 0x6a, 0xa6, 0x2a, 0x80, 0x6a, 0x58, 0xe5, 0x27, - 0xda, 0x22, 0x00, 0xaf, 0x1d, 0x44, 0x2f, 0x03, 0x3c, 0x00, 0x00, 0x05, - 0x51, 0x00, 0x01, 0xff, 0x4d, 0xea, 0x7f, 0x79, 0x2a, 0x00, 0x43, 0xd4, - 0x09, 0xd6, 0x22, 0x00, 0x53, 0x07, 0x4b, 0x7b, 0x2a, 0x40, 0x02, 0x18, - 0x00, 0x06, 0x4c, 0xd5, 0x94, 0x66, 0x22, 0x40, 0x4b, 0x0e, 0x1e, 0x85, - 0x2a, 0x00, 0x03, 0x7b, 0x00, 0x25, 0x4c, 0x87, 0x00, 0x76, 0x22, 0x00, - 0x50, 0xba, 0x65, 0x7d, 0x2a, 0xc0, 0x00, 0x0a, 0xa5, 0x3a, 0x01, 0xff, - 0x45, 0x5c, 0x00, 0x81, 0x2a, 0x80, 0x06, 0x46, 0x58, 0x13, 0x7f, 0x2a, - 0x40, 0x46, 0xc7, 0x00, 0x83, 0x2a, 0x40, 0x45, 0xac, 0x0c, 0x64, 0x22, - 0x00, 0x4a, 0x06, 0x39, 0x72, 0x22, 0x40, 0x54, 0x93, 0x00, 0xa8, 0x2a, - 0x40, 0x45, 0xac, 0x0c, 0x68, 0x22, 0x00, 0x4a, 0x06, 0x39, 0xe6, 0x22, - 0x40, 0x05, 0x5d, 0x00, 0x11, 0x03, 0x1b, 0x00, 0x01, 0xff, 0x4f, 0x37, - 0x6f, 0x89, 0x2a, 0x00, 0x58, 0x6d, 0x2a, 0x87, 0x2a, 0x40, 0x64, 0xb8, - 0x08, 0x8b, 0x2a, 0x00, 0x64, 0xdc, 0x08, 0x91, 0x2a, 0x00, 0x4f, 0x37, - 0x07, 0x76, 0x29, 0x00, 0xb3, 0x01, 0xff, 0x07, 0x23, 0xcf, 0x06, 0x73, - 0x74, 0x00, 0x93, 0x2a, 0x40, 0x52, 0x81, 0x00, 0x8f, 0x2a, 0x00, 0x48, - 0x52, 0x28, 0x8d, 0x2a, 0x40, 0x0f, 0x6d, 0x32, 0xa8, 0x03, 0x06, 0xc4, - 0x06, 0xe1, 0x02, 0x07, 0xc1, 0x05, 0x6e, 0x0c, 0x01, 0x16, 0x48, 0xb3, - 0x25, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0x42, 0x31, 0x12, 0x26, 0x1c, 0x00, - 0xe5, 0x2c, 0x1c, 0x00, 0xe9, 0x27, 0x1c, 0x00, 0xef, 0x28, 0x1c, 0x80, - 0x09, 0xf5, 0x2a, 0x1c, 0xc0, 0x00, 0xf5, 0x2b, 0x1c, 0x40, 0xef, 0x29, - 0x1c, 0x40, 0x04, 0x30, 0x03, 0x11, 0x10, 0x5a, 0x66, 0x01, 0xff, 0x42, - 0x71, 0x00, 0x25, 0x1c, 0x00, 0x42, 0x34, 0x22, 0x24, 0x1c, 0x40, 0x45, - 0x5a, 0x3e, 0x37, 0x1c, 0x00, 0x43, 0x24, 0x03, 0x36, 0x1c, 0x40, 0x46, - 0x69, 0xca, 0x3d, 0x1c, 0x00, 0x52, 0xb2, 0x52, 0x3c, 0x1c, 0x00, 0xb4, - 0x01, 0xff, 0x45, 0xbf, 0x52, 0x3b, 0x1c, 0x00, 0x45, 0xc8, 0xe7, 0x3f, - 0x1c, 0xc0, 0x00, 0x47, 0x68, 0xca, 0x3e, 0x1c, 0x40, 0xe1, 0x23, 0x1c, - 0x00, 0xa2, 0xde, 0x01, 0xa3, 0xd1, 0x01, 0xa4, 0xbe, 0x01, 0xa6, 0xb1, - 0x01, 0xa7, 0xa4, 0x01, 0xa8, 0x97, 0x01, 0x42, 0xbd, 0x26, 0x08, 0x1c, - 0x00, 0xab, 0x7f, 0x42, 0x74, 0x00, 0x1c, 0x1c, 0x00, 0xad, 0x6d, 0xae, - 0x5b, 0xb0, 0x49, 0x42, 0x71, 0x00, 0x1b, 0x1c, 0x00, 0xb3, 0x37, 0xb4, - 0x12, 0x42, 0xa6, 0x0a, 0x1f, 0x1c, 0x00, 0x42, 0xa9, 0x01, 0x22, 0x1c, - 0x00, 0x42, 0x34, 0x22, 0x1a, 0x1c, 0x40, 0xe1, 0x0a, 0x1c, 0x00, 0x42, - 0x22, 0x00, 0x0b, 0x1c, 0x00, 0xb3, 0x0d, 0xb4, 0x01, 0xff, 0xe1, 0x4d, - 0x1c, 0x00, 0x42, 0x22, 0x00, 0x4e, 0x1c, 0x40, 0xe1, 0x17, 0x1c, 0x00, - 0x42, 0x22, 0x00, 0x18, 0x1c, 0x40, 0xe1, 0x20, 0x1c, 0x00, 0x42, 0x22, - 0x00, 0x21, 0x1c, 0x40, 0xe1, 0x0e, 0x1c, 0x00, 0x42, 0x22, 0x00, 0x10, - 0x1c, 0x00, 0x42, 0x74, 0x00, 0x0f, 0x1c, 0x40, 0xe1, 0x0d, 0x1c, 0x00, - 0x42, 0x24, 0x02, 0x05, 0x1c, 0x00, 0x42, 0x34, 0x22, 0x09, 0x1c, 0x40, - 0xe1, 0x15, 0x1c, 0x00, 0x42, 0x74, 0x00, 0x16, 0x1c, 0x40, 0xe1, 0x00, - 0x1c, 0x00, 0x42, 0x22, 0x00, 0x02, 0x1c, 0x00, 0x42, 0x74, 0x00, 0x01, - 0x1c, 0x40, 0xe1, 0x1d, 0x1c, 0x00, 0x42, 0x74, 0x00, 0x1e, 0x1c, 0x40, - 0xe1, 0x03, 0x1c, 0x00, 0x42, 0x74, 0x00, 0x04, 0x1c, 0x40, 0xe1, 0x11, - 0x1c, 0x00, 0x42, 0x74, 0x00, 0x12, 0x1c, 0x40, 0xe1, 0x0c, 0x1c, 0x00, - 0x42, 0xa1, 0x10, 0x4f, 0x1c, 0x00, 0x42, 0x59, 0x00, 0x19, 0x1c, 0x40, - 0xe1, 0x06, 0x1c, 0x00, 0x42, 0x22, 0x00, 0x07, 0x1c, 0x40, 0xe1, 0x13, - 0x1c, 0x00, 0x42, 0x74, 0x00, 0x14, 0x1c, 0x40, 0x45, 0xc3, 0x0a, 0x48, - 0x1c, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x49, 0x1c, 0x00, 0x43, 0xbf, - 0x0a, 0x41, 0x1c, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x40, - 0x1c, 0x40, 0x44, 0x25, 0x01, 0x43, 0x1c, 0x00, 0x42, 0x15, 0x02, 0x42, - 0x1c, 0x40, 0x44, 0x27, 0x1d, 0x47, 0x1c, 0x00, 0x42, 0x60, 0x25, 0x46, - 0x1c, 0x40, 0x43, 0xa7, 0x05, 0x45, 0x1c, 0x00, 0x43, 0xcb, 0x06, 0x44, - 0x1c, 0x40, 0xeb, 0x2d, 0x1c, 0x80, 0x1f, 0xec, 0x2f, 0x1c, 0x00, 0xed, - 0x2e, 0x1c, 0x00, 0xee, 0x30, 0x1c, 0x80, 0x0c, 0xf0, 0x31, 0x1c, 0x00, - 0xf2, 0x32, 0x1c, 0x00, 0xf4, 0x33, 0x1c, 0x40, 0x46, 0x68, 0xde, 0x34, - 0x1c, 0x40, 0x43, 0x1c, 0x01, 0x35, 0x1c, 0x40, 0x44, 0xb2, 0xee, 0x06, - 0xf4, 0x41, 0x80, 0xaf, 0x08, 0x8d, 0xcc, 0x06, 0x06, 0xa9, 0x01, 0x01, - 0xff, 0x45, 0xce, 0x00, 0x90, 0x21, 0x80, 0xb1, 0x04, 0xa2, 0x92, 0x04, - 0x50, 0x0a, 0x60, 0x3c, 0xf8, 0x01, 0xa4, 0xd2, 0x03, 0xa6, 0xc3, 0x03, - 0xa8, 0xc2, 0x02, 0x57, 0x86, 0x2e, 0xa4, 0xf8, 0x01, 0x51, 0x8e, 0x5b, - 0xfd, 0x21, 0x00, 0xb0, 0xa7, 0x02, 0x4f, 0x72, 0x70, 0x45, 0x2b, 0x00, - 0xb2, 0x92, 0x02, 0xb3, 0xf8, 0x01, 0xb4, 0x16, 0xb7, 0x01, 0xff, 0x49, - 0x21, 0xb4, 0x9c, 0x21, 0x00, 0x4a, 0xfb, 0x0f, 0xe6, 0x21, 0xc0, 0x00, - 0x5a, 0x24, 0x1e, 0x94, 0xf8, 0x41, 0x55, 0x82, 0x3c, 0xa2, 0xf8, 0x01, - 0x02, 0x0d, 0x00, 0x51, 0x02, 0x15, 0x02, 0x01, 0xff, 0x4d, 0x16, 0x7e, - 0x9e, 0x21, 0x00, 0x08, 0x09, 0x02, 0x01, 0xff, 0x06, 0xce, 0x00, 0x06, - 0x51, 0x26, 0x5d, 0x37, 0x2b, 0x40, 0x48, 0xfd, 0xb1, 0x36, 0x2b, 0x00, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x56, 0xc5, 0x32, 0x35, 0x2b, 0x00, 0xb4, - 0x06, 0x4f, 0xcc, 0x32, 0x34, 0x2b, 0x40, 0x43, 0x24, 0x17, 0x3b, 0x2b, - 0x80, 0x06, 0x52, 0x04, 0x06, 0xec, 0x2b, 0x40, 0x06, 0x50, 0x00, 0x01, - 0xff, 0x56, 0xc5, 0x32, 0x3d, 0x2b, 0x00, 0x4f, 0xcc, 0x32, 0x3c, 0x2b, - 0x40, 0x05, 0x04, 0x02, 0x11, 0x04, 0xcb, 0x1c, 0x01, 0xff, 0x45, 0xce, - 0x00, 0xda, 0x21, 0x00, 0x4a, 0x2d, 0x5d, 0x0e, 0x29, 0x40, 0x4a, 0xe0, - 0x01, 0x90, 0xf8, 0x01, 0x08, 0x09, 0x02, 0x01, 0xff, 0x45, 0xce, 0x00, - 0x60, 0x2b, 0x80, 0x0c, 0x4c, 0x05, 0x8c, 0x6a, 0x2b, 0x00, 0x4d, 0xa7, - 0x85, 0x84, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x65, 0x26, 0x08, 0x80, 0x2b, - 0x00, 0x46, 0x82, 0x14, 0x70, 0x2b, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x4a, 0x17, 0xa6, 0x28, 0xf8, 0x01, 0x07, 0x3b, 0x01, 0x28, 0x4b, 0xef, - 0x66, 0x2c, 0xf8, 0x01, 0x09, 0x4c, 0xb9, 0x12, 0x4c, 0x3d, 0x90, 0x24, - 0xf8, 0x01, 0x4c, 0xa9, 0x90, 0x20, 0xf8, 0x01, 0x50, 0xea, 0x66, 0x30, - 0xf8, 0x41, 0x49, 0xa5, 0x01, 0xa6, 0x2b, 0x00, 0x47, 0x50, 0x02, 0xa4, - 0x2b, 0x40, 0x51, 0x1c, 0x05, 0x7a, 0x2b, 0x00, 0x4f, 0xcc, 0x32, 0x7a, - 0x2b, 0x40, 0x4f, 0x6b, 0x65, 0x50, 0xf8, 0x01, 0x02, 0x7c, 0x00, 0x01, - 0xff, 0x4a, 0x2b, 0x92, 0x38, 0xf8, 0x01, 0x4b, 0x1f, 0x7b, 0xdc, 0x21, - 0x40, 0x57, 0x2a, 0x2e, 0xa6, 0xf8, 0x01, 0x45, 0x4d, 0xac, 0x6c, 0xf6, - 0x41, 0x4c, 0xa8, 0x85, 0xc7, 0x21, 0x00, 0x4b, 0x48, 0xa2, 0xf7, 0xfa, - 0x41, 0xa1, 0x11, 0x05, 0x02, 0x15, 0x01, 0xff, 0x45, 0xce, 0x00, 0x44, - 0xf8, 0x01, 0x50, 0x0a, 0x60, 0x40, 0xf8, 0x41, 0x42, 0x1b, 0x00, 0xf2, - 0xfa, 0x01, 0x06, 0x67, 0x05, 0x01, 0xff, 0x57, 0x27, 0x2f, 0xcb, 0x21, - 0x00, 0x0a, 0x6d, 0x05, 0x01, 0xff, 0x04, 0xa5, 0x01, 0x31, 0x02, 0x50, - 0x02, 0x01, 0xff, 0x80, 0x06, 0x45, 0xa9, 0x01, 0xbc, 0x21, 0x40, 0x06, - 0x5c, 0x00, 0x0c, 0x48, 0xfd, 0xb1, 0x5a, 0x29, 0x00, 0x46, 0x82, 0x14, - 0x52, 0x29, 0x40, 0xac, 0x06, 0x5f, 0x3d, 0x11, 0x66, 0x29, 0x40, 0x5f, - 0x1d, 0x06, 0x62, 0x29, 0x00, 0x48, 0x9e, 0x69, 0x6a, 0x29, 0x40, 0x80, - 0x06, 0x45, 0xa9, 0x01, 0xbd, 0x21, 0x40, 0x67, 0x54, 0x05, 0x67, 0x29, - 0x00, 0x4f, 0x97, 0x69, 0x6b, 0x29, 0x00, 0x48, 0xfd, 0xb1, 0x5e, 0x29, - 0x00, 0x46, 0x82, 0x14, 0x56, 0x29, 0x40, 0x50, 0x92, 0x58, 0x34, 0xf8, - 0x01, 0x60, 0xe5, 0x0f, 0xaa, 0xf8, 0x41, 0x4b, 0x06, 0x8c, 0xe0, 0x21, - 0x00, 0x06, 0x3c, 0x01, 0x01, 0xff, 0x45, 0xce, 0x00, 0xd0, 0x21, 0x80, - 0x06, 0x4a, 0x2d, 0x5d, 0x0c, 0x29, 0x40, 0x80, 0x06, 0x45, 0x22, 0x17, - 0x1b, 0x29, 0x40, 0x48, 0xfd, 0xb1, 0x06, 0x29, 0x00, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x46, 0x27, 0x05, 0xcd, 0x21, 0x00, 0x4f, 0xcc, 0x32, 0x02, - 0x29, 0x40, 0x5f, 0x64, 0x10, 0xa8, 0xf8, 0x01, 0x05, 0xe2, 0x02, 0x06, - 0x58, 0xf5, 0x29, 0xa0, 0xf8, 0x41, 0x45, 0xce, 0x00, 0x05, 0x2b, 0x00, - 0x53, 0x8a, 0x47, 0x88, 0x2b, 0x40, 0x80, 0x06, 0x45, 0x22, 0x17, 0x19, - 0x29, 0x40, 0xa1, 0xd7, 0x01, 0x05, 0x7f, 0x05, 0xbf, 0x01, 0x55, 0x6c, - 0x14, 0xc6, 0x21, 0x00, 0xb4, 0x8a, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x02, 0x3b, 0x01, 0x75, 0x55, 0xd5, 0x01, 0x14, 0xf8, 0x01, 0x44, 0x5d, - 0x0e, 0xa9, 0x21, 0x00, 0xac, 0x5b, 0x59, 0x5b, 0x24, 0x04, 0xf8, 0x01, - 0x4c, 0x21, 0x91, 0x98, 0xf8, 0x01, 0x4a, 0x33, 0xad, 0x46, 0x29, 0x00, - 0xb3, 0x31, 0xb4, 0x06, 0x4f, 0xcc, 0x32, 0xf7, 0x21, 0x40, 0x43, 0x24, - 0x17, 0xa2, 0x21, 0x80, 0x11, 0x03, 0xfb, 0x0b, 0x01, 0xff, 0x49, 0xa5, - 0x01, 0x10, 0x2b, 0x00, 0x47, 0x50, 0x02, 0x11, 0x2b, 0x40, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x56, 0xc5, 0x32, 0x3a, 0x2b, 0x00, 0x4f, 0xcc, 0x32, - 0x39, 0x2b, 0x40, 0x05, 0x0d, 0x07, 0x06, 0x45, 0x28, 0x05, 0x9a, 0x21, - 0x40, 0x55, 0xd5, 0x01, 0x10, 0xf8, 0x01, 0x52, 0x03, 0x06, 0x00, 0xf8, - 0x41, 0x57, 0xd6, 0x28, 0x08, 0xf8, 0x01, 0x43, 0x81, 0x4a, 0xab, 0x21, - 0x40, 0x49, 0x8d, 0xbd, 0x38, 0x2b, 0x00, 0x54, 0xc7, 0x32, 0xfa, 0x21, - 0x40, 0x07, 0x8d, 0x2a, 0x18, 0x03, 0x83, 0x14, 0x01, 0xff, 0x42, 0x17, - 0x00, 0xe4, 0x21, 0x80, 0x06, 0x4c, 0x10, 0x56, 0x1d, 0x29, 0x40, 0x5d, - 0x6b, 0x14, 0xb9, 0x21, 0x40, 0x49, 0xec, 0x00, 0x77, 0x29, 0x00, 0x46, - 0x4a, 0x12, 0x7a, 0x29, 0x00, 0xf8, 0x3e, 0x2b, 0x40, 0x43, 0x16, 0x00, - 0xa4, 0x21, 0x80, 0x06, 0x4f, 0xe5, 0x0b, 0xc0, 0xf8, 0x41, 0x51, 0x0b, - 0x56, 0x1f, 0x29, 0x40, 0x05, 0x5d, 0x00, 0x06, 0x63, 0xac, 0x0a, 0xb5, - 0xfb, 0x41, 0x4f, 0x10, 0x69, 0x4a, 0x2b, 0x00, 0x08, 0xcc, 0x70, 0x0c, - 0x56, 0x61, 0x36, 0x43, 0x29, 0x00, 0x4e, 0x93, 0x3d, 0x73, 0x29, 0x40, - 0x4f, 0x10, 0x69, 0x42, 0x2b, 0x00, 0x4e, 0x93, 0x3d, 0x4b, 0x2b, 0x40, - 0x07, 0xa0, 0x2d, 0x9c, 0x01, 0x5b, 0xfe, 0x1a, 0xe6, 0x26, 0x00, 0x09, - 0x9c, 0x01, 0x2b, 0xb3, 0x1d, 0x09, 0x44, 0x43, 0x01, 0xff, 0x49, 0x07, - 0xb6, 0x2a, 0x20, 0x00, 0x47, 0x34, 0x03, 0x66, 0x20, 0x00, 0x44, 0xb9, - 0x00, 0x0e, 0x20, 0x00, 0x48, 0x0a, 0xc7, 0x2d, 0x20, 0x40, 0x5c, 0x72, - 0x17, 0xaa, 0x27, 0x00, 0x5b, 0x34, 0x1b, 0x39, 0x29, 0x40, 0xa1, 0x53, - 0x54, 0x6f, 0x40, 0xfc, 0x29, 0x00, 0xa4, 0x3f, 0x4b, 0x8f, 0x99, 0x78, - 0xcc, 0x01, 0x50, 0x7a, 0x63, 0x0d, 0xf5, 0x01, 0xb2, 0x0c, 0x4c, 0xa9, - 0x93, 0x02, 0xcc, 0x01, 0x44, 0xd7, 0xc4, 0x9e, 0xcc, 0x41, 0x49, 0x40, - 0xb3, 0x97, 0xcc, 0x01, 0x44, 0x75, 0xaa, 0x65, 0xcc, 0x01, 0xaf, 0x01, - 0xff, 0x05, 0x17, 0x09, 0x06, 0x50, 0x3a, 0x63, 0xa2, 0xcc, 0x41, 0x47, - 0xc9, 0xcc, 0xa0, 0xcc, 0x01, 0x44, 0x6f, 0x20, 0x56, 0xcc, 0x41, 0x44, - 0x5e, 0xed, 0x0e, 0xcc, 0x01, 0x5a, 0x30, 0x21, 0xab, 0x00, 0x40, 0x47, - 0x42, 0x33, 0xf9, 0xcd, 0x01, 0x4c, 0xf0, 0x0e, 0x29, 0x23, 0x00, 0x4a, - 0xb3, 0xaf, 0x60, 0xcc, 0x41, 0x56, 0x15, 0x32, 0x8e, 0x05, 0x00, 0x48, - 0x6a, 0xc1, 0x48, 0xcc, 0x01, 0x03, 0xbf, 0x59, 0x20, 0xb3, 0x01, 0xff, - 0x0f, 0xa8, 0x2d, 0x0d, 0x4a, 0xdf, 0xb0, 0xd6, 0x0f, 0xc0, 0x00, 0x4a, - 0xbb, 0x57, 0xd8, 0x0f, 0x40, 0x4c, 0xbd, 0x8b, 0x74, 0xcc, 0x01, 0x4a, - 0x9b, 0x28, 0x70, 0xcc, 0x41, 0xe8, 0x92, 0xcc, 0x81, 0x04, 0xf4, 0x1b, - 0xf9, 0x41, 0x50, 0x95, 0x28, 0x94, 0xcc, 0x41, 0xa1, 0xbd, 0x06, 0xa2, - 0x84, 0x06, 0xa3, 0xd3, 0x05, 0x02, 0x3b, 0x01, 0xab, 0x05, 0xa6, 0x94, - 0x05, 0x02, 0x22, 0x00, 0x86, 0x04, 0x15, 0x9b, 0x3b, 0xf5, 0x03, 0xac, - 0xe6, 0x03, 0x48, 0xf0, 0x75, 0xdc, 0x27, 0x00, 0x60, 0x85, 0x0f, 0xc9, - 0x22, 0x00, 0xaf, 0xbb, 0x03, 0x4b, 0x50, 0x21, 0x28, 0x00, 0x80, 0x9e, - 0x03, 0xb2, 0xaa, 0x02, 0xb3, 0xb0, 0x01, 0xb4, 0x49, 0x0a, 0x32, 0x00, - 0x39, 0xb7, 0x01, 0xff, 0x05, 0xae, 0x02, 0x0c, 0x4b, 0x06, 0x95, 0xd8, - 0x29, 0x00, 0x4b, 0x01, 0xa0, 0x8e, 0xf5, 0x41, 0xa3, 0x18, 0x52, 0xcb, - 0x26, 0x16, 0x30, 0x00, 0x4b, 0x50, 0x21, 0x85, 0x29, 0x00, 0x4e, 0x27, - 0x26, 0x1a, 0x30, 0x00, 0x56, 0x05, 0x09, 0x18, 0x30, 0x40, 0x4d, 0xb9, - 0x67, 0x0e, 0x30, 0x00, 0x4c, 0x24, 0x0b, 0x83, 0x29, 0x40, 0x4d, 0x1a, - 0x7f, 0x20, 0x2e, 0x00, 0x47, 0x92, 0xd1, 0xb8, 0x23, 0x40, 0x43, 0xe3, - 0x02, 0xa3, 0x22, 0x00, 0xa8, 0x25, 0x55, 0x06, 0x09, 0x14, 0x30, 0x00, - 0xb2, 0x06, 0x4f, 0x60, 0x73, 0xce, 0xfb, 0x41, 0x53, 0xdf, 0x46, 0x09, - 0x2e, 0x00, 0x04, 0x1b, 0x01, 0x01, 0xff, 0x56, 0x51, 0x34, 0xcf, 0x29, - 0x00, 0x56, 0x98, 0x1c, 0x6c, 0xfb, 0x41, 0x04, 0x70, 0x87, 0x28, 0x4c, - 0xd5, 0x91, 0xec, 0xf5, 0x01, 0x04, 0x26, 0x01, 0x01, 0xff, 0x4d, 0xb8, - 0x4b, 0x8d, 0x25, 0x00, 0x09, 0x2a, 0x01, 0x01, 0xff, 0x45, 0x33, 0x01, - 0x8a, 0x25, 0x00, 0x57, 0x9d, 0x2e, 0xa2, 0xce, 0x01, 0x57, 0xae, 0x30, - 0xa9, 0xce, 0x41, 0x48, 0x6a, 0xc4, 0x0b, 0xcc, 0x01, 0x5a, 0x00, 0x22, - 0xc1, 0xfb, 0x41, 0x55, 0xff, 0x37, 0xc5, 0x27, 0x00, 0xa5, 0x63, 0xa9, - 0x55, 0x4c, 0x0f, 0x7b, 0xe8, 0xf5, 0x01, 0x4d, 0x28, 0x26, 0x5b, 0x00, - 0x80, 0x06, 0x53, 0x0a, 0x26, 0x02, 0x2e, 0x40, 0x80, 0x01, 0xff, 0x49, - 0x56, 0x57, 0xa2, 0x23, 0x00, 0x4c, 0xb9, 0x8f, 0xa3, 0x23, 0x00, 0x4c, - 0x99, 0x94, 0xa1, 0x23, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4d, 0xa0, - 0x80, 0x57, 0x2e, 0x00, 0x45, 0x22, 0x7f, 0x45, 0x20, 0x00, 0x46, 0x27, - 0x05, 0x55, 0x2e, 0x00, 0x08, 0xda, 0xc8, 0x06, 0x48, 0x78, 0x58, 0x8b, - 0x29, 0x40, 0x4d, 0xb6, 0x7f, 0x8f, 0x29, 0x00, 0x4a, 0xbd, 0xaf, 0x8d, - 0x29, 0x40, 0x50, 0x5a, 0x60, 0x26, 0x2e, 0x00, 0x53, 0x48, 0x0b, 0x18, - 0x20, 0x40, 0x50, 0x95, 0x0f, 0xcb, 0x22, 0x00, 0x51, 0xb4, 0x4b, 0x89, - 0x25, 0x40, 0x56, 0x9b, 0x2f, 0x0c, 0x2e, 0x00, 0x05, 0xc9, 0x00, 0x01, - 0xff, 0x45, 0xce, 0x00, 0x94, 0x21, 0x80, 0x3f, 0x4b, 0x95, 0x97, 0x0c, - 0x2b, 0x00, 0x4c, 0x71, 0x8c, 0xd4, 0x21, 0x80, 0x21, 0x51, 0x8e, 0x5b, - 0xff, 0x21, 0x00, 0x50, 0x6a, 0x65, 0x58, 0xf8, 0x01, 0x55, 0x01, 0x02, - 0x64, 0x2b, 0x00, 0xb7, 0x01, 0xff, 0x49, 0x21, 0xb4, 0xad, 0x21, 0x00, - 0x4a, 0xfb, 0x0f, 0x04, 0x2b, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, - 0x27, 0x05, 0xce, 0x21, 0x00, 0x4f, 0xcc, 0x32, 0x04, 0x29, 0x40, 0x80, - 0x01, 0xff, 0x54, 0xe3, 0x44, 0x48, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x56, 0xc5, 0x32, 0xfc, 0x21, 0x00, 0x46, 0x27, 0x05, 0xae, 0x21, - 0x00, 0x4f, 0xcc, 0x32, 0xf9, 0x21, 0x40, 0x80, 0x01, 0xff, 0x49, 0x56, - 0x57, 0x9c, 0x23, 0x00, 0x4a, 0x0d, 0xab, 0x9d, 0x23, 0x00, 0x4a, 0x8f, - 0xb0, 0x9b, 0x23, 0x40, 0x03, 0xc4, 0x07, 0x06, 0x49, 0x02, 0xad, 0xd5, - 0x27, 0x40, 0x4c, 0xc3, 0x0a, 0x8f, 0x25, 0x00, 0x4d, 0xa1, 0x1c, 0x8e, - 0x25, 0x00, 0x4b, 0x35, 0xa1, 0xcf, 0xfb, 0x41, 0x55, 0xc0, 0x34, 0x1c, - 0x2e, 0x00, 0x46, 0xde, 0xdd, 0xc5, 0xf6, 0x41, 0x4c, 0xe1, 0x02, 0xeb, - 0xfb, 0x01, 0x4c, 0xe3, 0x10, 0xe3, 0xfb, 0x41, 0x03, 0x24, 0x00, 0x06, - 0x55, 0x43, 0x3c, 0x7b, 0xf5, 0x41, 0x02, 0x33, 0x01, 0x65, 0x46, 0xe7, - 0x02, 0x07, 0xf9, 0x81, 0x3e, 0xa6, 0x30, 0x65, 0xb7, 0x07, 0x10, 0xce, - 0x01, 0x69, 0x11, 0x04, 0x94, 0xfb, 0x01, 0x57, 0x9d, 0x2e, 0xa3, 0xce, - 0x01, 0x4c, 0x19, 0x04, 0x8c, 0xfb, 0x01, 0x4b, 0x43, 0xa0, 0xb2, 0xfb, - 0x01, 0x56, 0xa3, 0x36, 0x0d, 0xce, 0x01, 0x57, 0xae, 0x30, 0xa8, 0xce, - 0x01, 0x4d, 0xcd, 0x88, 0x0b, 0xce, 0x41, 0x4c, 0xe9, 0x8f, 0xa4, 0xcc, - 0x01, 0x45, 0x40, 0x64, 0xb9, 0xfb, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, - 0x43, 0xd4, 0x09, 0x06, 0xf9, 0x01, 0x49, 0x9c, 0x45, 0x03, 0xf9, 0x01, - 0xb4, 0x01, 0xff, 0x49, 0xdc, 0x0f, 0x04, 0xf9, 0x01, 0x47, 0xd1, 0x09, - 0x05, 0xf9, 0x41, 0x04, 0xe3, 0x02, 0x06, 0x43, 0x35, 0x01, 0x8c, 0x25, - 0x40, 0x46, 0xe7, 0x02, 0xd6, 0x25, 0x00, 0x44, 0xe2, 0x12, 0xe8, 0x2b, - 0x40, 0xa9, 0x06, 0x44, 0xd1, 0x23, 0x0a, 0x23, 0x40, 0x47, 0xab, 0xb6, - 0x7c, 0x29, 0x00, 0x50, 0x62, 0x50, 0x8b, 0x25, 0x40, 0x59, 0x04, 0x26, - 0x04, 0x2e, 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x4d, 0xef, 0x0e, 0x0a, - 0x30, 0x00, 0x4b, 0x50, 0x21, 0x28, 0x2e, 0x00, 0x4e, 0xee, 0x04, 0x1c, - 0x20, 0x00, 0x4c, 0x05, 0x95, 0xda, 0x29, 0x40, 0x46, 0x0b, 0xc2, 0x08, - 0x23, 0x00, 0x4b, 0xb2, 0x9c, 0xdc, 0x26, 0x00, 0x4d, 0xb9, 0x67, 0x0c, - 0x30, 0x00, 0x4c, 0x24, 0x0b, 0x7b, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, - 0x4a, 0x0d, 0xab, 0xa9, 0x23, 0x00, 0x4c, 0x55, 0x90, 0xa8, 0x23, 0x00, - 0x4a, 0x8f, 0xb0, 0xa7, 0x23, 0x40, 0x04, 0x73, 0x05, 0x11, 0x05, 0xe2, - 0x02, 0x01, 0xff, 0x52, 0xcb, 0x26, 0x10, 0x30, 0x00, 0x56, 0x05, 0x09, - 0x97, 0x29, 0x40, 0x10, 0xda, 0x60, 0x11, 0x0e, 0xa4, 0x7c, 0x01, 0xff, - 0x4c, 0x7d, 0x8c, 0x4a, 0x29, 0x00, 0x4a, 0x71, 0xb0, 0x4e, 0x29, 0x40, - 0x4c, 0x7d, 0x8c, 0x50, 0x29, 0x00, 0x4a, 0x71, 0xb0, 0x4b, 0x29, 0x40, - 0xae, 0x1a, 0xb2, 0x01, 0xff, 0x53, 0xb6, 0x1c, 0x93, 0x29, 0x00, 0x09, - 0xfa, 0x05, 0x01, 0xff, 0x4c, 0x99, 0x8b, 0x32, 0x2b, 0x00, 0x4c, 0xd3, - 0x14, 0x30, 0x2b, 0x40, 0x02, 0x06, 0x00, 0x16, 0xa7, 0x01, 0xff, 0x49, - 0x2b, 0xb6, 0xee, 0xf5, 0x01, 0x4a, 0xf2, 0x0e, 0x08, 0x30, 0xc0, 0x00, - 0x49, 0xa5, 0x3a, 0x91, 0x29, 0x40, 0x06, 0x13, 0x01, 0x31, 0x06, 0xc8, - 0x00, 0x18, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x69, 0xe8, 0x03, 0x6b, 0xfb, - 0x01, 0x50, 0xbf, 0x0a, 0x7d, 0xfb, 0xc1, 0x00, 0x5e, 0xd8, 0x11, 0x8e, - 0xcc, 0x41, 0x50, 0xba, 0x60, 0xda, 0x27, 0x00, 0xb4, 0x01, 0xff, 0x43, - 0xe3, 0x02, 0xdb, 0x27, 0x00, 0x54, 0xbe, 0x3d, 0x9b, 0xfb, 0x41, 0x69, - 0xe8, 0x03, 0x69, 0xfb, 0x01, 0x50, 0xbf, 0x0a, 0x7c, 0xfb, 0x41, 0x53, - 0x21, 0x46, 0x43, 0xf3, 0x01, 0x49, 0xfb, 0xb8, 0xbe, 0xfa, 0x01, 0x47, - 0xda, 0xd4, 0x6c, 0xf9, 0x41, 0xa2, 0xb8, 0x4b, 0x55, 0x10, 0x39, 0x4d, - 0xf9, 0x01, 0xa4, 0xa3, 0x4b, 0x4a, 0x11, 0xac, 0x01, 0x00, 0x0e, 0x02, - 0x7b, 0x02, 0xc1, 0x46, 0xb2, 0xbe, 0x41, 0x4f, 0xad, 0x71, 0x3e, 0x26, - 0x80, 0xa7, 0x41, 0x04, 0xb5, 0x05, 0x01, 0xff, 0xa3, 0xcc, 0x28, 0x12, - 0x18, 0x50, 0xa1, 0x28, 0x07, 0xc1, 0x05, 0x80, 0x25, 0xb3, 0x01, 0xff, - 0x05, 0x0d, 0x07, 0x50, 0x16, 0xe5, 0x36, 0x01, 0xff, 0xe1, 0x90, 0x20, - 0x00, 0xe5, 0x91, 0x20, 0x00, 0xe8, 0x95, 0x20, 0x00, 0xe9, 0x62, 0x1d, - 0x00, 0xea, 0x7c, 0x2c, 0x00, 0xeb, 0x96, 0x20, 0x00, 0xec, 0x97, 0x20, - 0x00, 0xed, 0x98, 0x20, 0x00, 0xee, 0x99, 0x20, 0x00, 0xef, 0x92, 0x20, - 0x00, 0xf0, 0x9a, 0x20, 0x00, 0xf2, 0x63, 0x1d, 0x00, 0xf3, 0x9b, 0x20, - 0x80, 0x10, 0xf4, 0x9c, 0x20, 0x00, 0xf5, 0x64, 0x1d, 0x00, 0xf6, 0x65, - 0x1d, 0x00, 0xf8, 0x93, 0x20, 0x40, 0x44, 0x54, 0x7a, 0x94, 0x20, 0x40, - 0x0f, 0xb9, 0x05, 0x98, 0x24, 0xac, 0x01, 0xff, 0x06, 0xc2, 0x05, 0x34, - 0x08, 0xfb, 0x1e, 0x01, 0xff, 0xa6, 0x18, 0x42, 0xc1, 0xc4, 0x33, 0x01, - 0x00, 0x48, 0x42, 0xc5, 0x05, 0xfb, 0x00, 0x42, 0x17, 0x50, 0x53, 0x01, - 0x00, 0x42, 0x60, 0x01, 0x06, 0xfb, 0x40, 0xe6, 0x00, 0xfb, 0x80, 0x08, - 0xe9, 0x01, 0xfb, 0x00, 0xec, 0x02, 0xfb, 0x40, 0xe9, 0x03, 0xfb, 0x00, - 0xec, 0x04, 0xfb, 0x40, 0xe1, 0x61, 0x00, 0x80, 0xa0, 0x21, 0xe2, 0x62, - 0x00, 0x80, 0x9d, 0x20, 0xe3, 0x63, 0x00, 0x80, 0xff, 0x1e, 0xe4, 0x64, - 0x00, 0x80, 0xfa, 0x1c, 0xe5, 0x65, 0x00, 0x80, 0x94, 0x1a, 0xe6, 0x66, - 0x00, 0x80, 0xdf, 0x19, 0xe7, 0x67, 0x00, 0x80, 0xee, 0x18, 0xe8, 0x68, - 0x00, 0x80, 0xfc, 0x17, 0xe9, 0x69, 0x00, 0x80, 0xb4, 0x16, 0xea, 0x6a, - 0x00, 0x80, 0x8f, 0x16, 0xeb, 0x6b, 0x00, 0x80, 0xb2, 0x15, 0xec, 0x6c, - 0x00, 0x80, 0xa6, 0x13, 0xed, 0x6d, 0x00, 0x80, 0xcf, 0x12, 0xee, 0x6e, - 0x00, 0x80, 0xb1, 0x11, 0xef, 0x6f, 0x00, 0x80, 0xc1, 0x0e, 0xf0, 0x70, - 0x00, 0x80, 0xf7, 0x0d, 0xf1, 0x71, 0x00, 0x80, 0xce, 0x0d, 0xf2, 0x72, - 0x00, 0x80, 0xc9, 0x0b, 0xf3, 0x73, 0x00, 0x80, 0xb7, 0x09, 0xf4, 0x74, - 0x00, 0x80, 0xe2, 0x05, 0xf5, 0x75, 0x00, 0x80, 0xb4, 0x03, 0xf6, 0x76, - 0x00, 0x80, 0xd8, 0x02, 0xf7, 0x77, 0x00, 0x80, 0x96, 0x02, 0xf8, 0x78, - 0x00, 0x80, 0xd7, 0x01, 0xf9, 0x79, 0x00, 0x80, 0x6a, 0xfa, 0x7a, 0x00, - 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0x7a, 0x01, - 0x00, 0xa3, 0x46, 0xa4, 0x2d, 0x44, 0x5d, 0x0e, 0x25, 0x02, 0x00, 0x4a, - 0xf4, 0x6b, 0x95, 0x1e, 0x00, 0x4c, 0xa6, 0x22, 0x76, 0x1d, 0x00, 0x4c, - 0xaa, 0x55, 0x8e, 0x1d, 0x00, 0x4e, 0x53, 0x0e, 0x90, 0x02, 0x00, 0xb3, - 0x01, 0xff, 0x45, 0x28, 0x05, 0xb6, 0x01, 0x00, 0x49, 0xb6, 0xbe, 0x40, - 0x02, 0x40, 0x48, 0x95, 0x2a, 0x6c, 0x2c, 0x00, 0x03, 0xb5, 0x0b, 0x01, - 0xff, 0x45, 0x5c, 0x00, 0x7c, 0x01, 0x00, 0x45, 0xf5, 0x06, 0x93, 0x1e, - 0x40, 0x44, 0x4d, 0x6b, 0x7e, 0x01, 0x00, 0x49, 0xa5, 0x04, 0x91, 0x1e, - 0x00, 0x43, 0x24, 0x0b, 0x91, 0x02, 0x40, 0x06, 0x50, 0x00, 0x06, 0x43, - 0xdc, 0x50, 0x1d, 0x02, 0x40, 0x45, 0x29, 0x38, 0xfd, 0x00, 0x00, 0x4a, - 0xa4, 0x04, 0x77, 0x01, 0x00, 0xa4, 0x39, 0x45, 0x8d, 0x22, 0xf3, 0x1e, - 0x00, 0x44, 0x5d, 0x0e, 0xb4, 0x01, 0x80, 0x26, 0x44, 0x92, 0x83, 0xff, - 0x1e, 0x00, 0x46, 0x04, 0x6f, 0x33, 0x02, 0x00, 0x4a, 0x0f, 0xae, 0x99, - 0x1e, 0x00, 0xb3, 0x06, 0x45, 0xad, 0x22, 0xf9, 0x1e, 0x40, 0x4e, 0xc7, - 0x37, 0x5a, 0xab, 0x00, 0x45, 0x28, 0x05, 0x4f, 0x02, 0x40, 0x46, 0x5b, - 0x00, 0xf7, 0x1e, 0x40, 0x48, 0x30, 0x23, 0xff, 0x00, 0x00, 0x03, 0xb5, - 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x8f, 0x1e, 0x00, 0x45, 0xf5, 0x06, - 0xf5, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, 0x26, 0x02, 0x13, - 0x01, 0x06, 0x4c, 0xaa, 0x55, 0x8d, 0x1d, 0x40, 0x4b, 0xdb, 0x9d, 0x57, - 0xab, 0x80, 0x06, 0x4c, 0xc8, 0x4e, 0x56, 0xab, 0x40, 0x80, 0x01, 0xff, - 0x52, 0xc2, 0x4e, 0x58, 0xab, 0x00, 0x4a, 0xb2, 0x28, 0x59, 0xab, 0x40, - 0x48, 0x30, 0x23, 0x8d, 0x1e, 0x00, 0x48, 0x99, 0x1d, 0x8b, 0x1e, 0x40, - 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0x83, 0x1e, 0x00, 0x4a, - 0xa4, 0x04, 0x75, 0x01, 0x00, 0xa4, 0x12, 0x45, 0x8d, 0x22, 0x81, 0x1e, - 0x00, 0x44, 0x5d, 0x0e, 0x73, 0x2c, 0x00, 0x4a, 0x0f, 0xae, 0x98, 0x1e, - 0x40, 0x48, 0x30, 0x23, 0x85, 0x1e, 0x00, 0x03, 0xb5, 0x0b, 0x01, 0xff, - 0x45, 0x5c, 0x00, 0x87, 0x1e, 0x00, 0x45, 0xf5, 0x06, 0x89, 0x1e, 0x40, - 0x06, 0x50, 0x00, 0x26, 0x43, 0x15, 0x05, 0x69, 0xa7, 0x00, 0x4b, 0x94, - 0x9b, 0x63, 0xa7, 0x00, 0x07, 0xff, 0xd0, 0x04, 0xf9, 0x61, 0xa7, 0x40, - 0x42, 0x44, 0x0f, 0x9b, 0xa7, 0x00, 0x42, 0x17, 0x50, 0x9d, 0xa7, 0x00, - 0x42, 0x87, 0x13, 0x9f, 0xa7, 0x40, 0x44, 0x23, 0x0b, 0x74, 0x2c, 0x00, - 0xa4, 0x18, 0x44, 0x5d, 0x0e, 0x8b, 0x02, 0x00, 0x4c, 0xaa, 0x55, 0x8c, - 0x1d, 0x00, 0x4a, 0xfb, 0xad, 0x71, 0x2c, 0x00, 0x45, 0xad, 0x22, 0x7d, - 0x1e, 0x40, 0x4e, 0xa9, 0x3e, 0x5f, 0xa7, 0x00, 0x48, 0x51, 0x12, 0x7f, - 0x1e, 0x40, 0x80, 0x1d, 0xe5, 0x6b, 0x1d, 0x00, 0xe9, 0x50, 0xab, 0x00, - 0xed, 0x78, 0xa7, 0x00, 0xef, 0x63, 0xab, 0x00, 0x46, 0x63, 0x15, 0x8a, - 0x02, 0xc0, 0x00, 0x4c, 0x39, 0x28, 0x7f, 0x1d, 0x40, 0x43, 0x16, 0x00, - 0x89, 0x02, 0x80, 0xfb, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, 0x45, 0x29, - 0x38, 0xfa, 0x00, 0x00, 0x45, 0xcb, 0x22, 0x6d, 0x01, 0x00, 0xa3, 0xd4, - 0x01, 0xa4, 0x8b, 0x01, 0x45, 0x8d, 0x22, 0xf9, 0x00, 0x00, 0x02, 0x0b, - 0x00, 0x51, 0x4e, 0xd6, 0x22, 0x17, 0x02, 0x00, 0x49, 0x68, 0x56, 0x52, - 0xab, 0x00, 0x46, 0x04, 0x6f, 0x6b, 0x01, 0x80, 0x38, 0x46, 0xc2, 0xdb, - 0x73, 0x01, 0x00, 0xb2, 0x24, 0xb3, 0x16, 0x45, 0xad, 0x22, 0x69, 0x01, - 0xc0, 0x00, 0x80, 0x01, 0xff, 0x49, 0x5c, 0xa3, 0x79, 0x1e, 0x00, 0x45, - 0xf5, 0x06, 0x75, 0x1e, 0x40, 0x4e, 0xc7, 0x37, 0x4e, 0xab, 0x00, 0x45, - 0x28, 0x05, 0xb9, 0xa7, 0x40, 0x4d, 0x54, 0x0e, 0x99, 0x1d, 0x00, 0x49, - 0x10, 0xae, 0x6f, 0x01, 0x40, 0x4e, 0xba, 0x73, 0x7b, 0x1e, 0x40, 0x48, - 0xfd, 0xa8, 0xe7, 0x1e, 0x00, 0x42, 0x5e, 0x01, 0xb0, 0x01, 0xc0, 0x00, - 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0xe9, 0x1e, 0x00, 0x49, - 0x50, 0x12, 0xf1, 0x1e, 0x00, 0x45, 0x8d, 0x22, 0xeb, 0x1e, 0x00, 0x4a, - 0xfb, 0xa8, 0xed, 0x1e, 0x00, 0x45, 0xad, 0x22, 0xef, 0x1e, 0x40, 0x48, - 0x30, 0x23, 0xfc, 0x00, 0x80, 0x1a, 0xaf, 0x01, 0xff, 0x47, 0x52, 0x12, - 0xe5, 0x1e, 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x45, 0x29, 0x38, 0x71, - 0x01, 0x00, 0x45, 0x8d, 0x22, 0x15, 0x02, 0x40, 0x80, 0x01, 0xff, 0x04, - 0x1a, 0x00, 0x06, 0x45, 0xf5, 0x06, 0x73, 0x1e, 0x40, 0x45, 0x29, 0x38, - 0xd8, 0x01, 0x00, 0x45, 0xf9, 0x95, 0xda, 0x01, 0x00, 0x45, 0x8d, 0x22, - 0xdc, 0x01, 0x00, 0x46, 0x04, 0x6f, 0xd6, 0x01, 0x40, 0x44, 0x4d, 0x6b, - 0xd4, 0x01, 0x00, 0x49, 0xa5, 0x04, 0xfb, 0x00, 0xc0, 0x00, 0x46, 0xf4, - 0x06, 0x77, 0x1e, 0x40, 0x55, 0xc0, 0x37, 0x4f, 0xab, 0x40, 0x06, 0x50, - 0x00, 0xd2, 0x02, 0x4b, 0xfb, 0x96, 0x77, 0x2c, 0x00, 0x53, 0x64, 0x47, - 0xa8, 0x02, 0x00, 0x4b, 0xd1, 0x99, 0xa7, 0x02, 0x80, 0xad, 0x02, 0xa8, - 0x90, 0x02, 0xaf, 0xf1, 0x01, 0x47, 0x80, 0xd2, 0x2b, 0xa7, 0x00, 0x49, - 0xa3, 0xbc, 0xa6, 0x02, 0x80, 0xdd, 0x01, 0xb5, 0x04, 0xfa, 0x29, 0xa7, - 0x40, 0xed, 0x77, 0xa7, 0x00, 0x05, 0x47, 0x07, 0x01, 0xff, 0xe1, 0x50, - 0x02, 0x80, 0xbe, 0x01, 0x45, 0x73, 0xe2, 0x8d, 0x01, 0x00, 0xe5, 0xdd, - 0x01, 0x00, 0xe7, 0x77, 0x1d, 0x00, 0xe8, 0x65, 0x02, 0x80, 0x9d, 0x01, - 0xe9, 0x09, 0x1d, 0x80, 0x91, 0x01, 0xeb, 0x9e, 0x02, 0x00, 0xec, 0x81, - 0xa7, 0x00, 0xed, 0x6f, 0x02, 0x80, 0x7e, 0xaf, 0x53, 0xf2, 0x79, 0x02, - 0x80, 0x24, 0xf4, 0x87, 0x02, 0x80, 0x19, 0x42, 0x3e, 0x00, 0x51, 0xab, - 0x00, 0xf6, 0x8c, 0x02, 0x00, 0xf7, 0x8d, 0x02, 0x00, 0xf9, 0x8e, 0x02, - 0xc0, 0x00, 0x4a, 0x19, 0xa4, 0x06, 0xdf, 0x41, 0x4a, 0x6d, 0x47, 0x0d, - 0xdf, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x0e, 0x7b, 0x02, - 0x00, 0x48, 0x06, 0x74, 0x7a, 0x02, 0x80, 0x12, 0x4c, 0xa6, 0x22, 0x68, - 0xab, 0x00, 0x4c, 0xaa, 0x55, 0x15, 0xdf, 0x01, 0x44, 0x23, 0x17, 0x79, - 0x2c, 0x40, 0x53, 0x0e, 0x46, 0x08, 0xdf, 0x41, 0x47, 0xb5, 0xca, 0x43, - 0xab, 0x80, 0x1c, 0xe5, 0x14, 0x1d, 0x80, 0x06, 0x45, 0x7e, 0x28, 0x08, - 0x1d, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x51, 0x1c, 0x05, 0x42, 0xab, - 0x00, 0x46, 0x27, 0x05, 0x41, 0xab, 0x40, 0x4c, 0x39, 0x28, 0x44, 0xab, - 0x40, 0x4e, 0x00, 0x74, 0x70, 0x02, 0x40, 0x48, 0x6c, 0x6e, 0x7f, 0xa7, - 0x40, 0x4e, 0x91, 0x70, 0xae, 0x02, 0xc0, 0x00, 0x49, 0xe1, 0xb1, 0xaf, - 0x02, 0x40, 0xe5, 0x02, 0x1d, 0x00, 0x44, 0x2f, 0xe1, 0x52, 0x02, 0x40, - 0x54, 0x4d, 0x0e, 0x67, 0xab, 0x40, 0x03, 0xc4, 0x07, 0x06, 0x48, 0xeb, - 0xba, 0x16, 0x1d, 0x40, 0x44, 0x31, 0x11, 0xbd, 0x01, 0x00, 0x43, 0x5f, - 0x25, 0x85, 0x01, 0x00, 0x43, 0xd0, 0x09, 0xa8, 0x01, 0x40, 0x53, 0x6d, - 0x46, 0x7a, 0x1d, 0x00, 0x43, 0xfd, 0x04, 0xfe, 0x00, 0xc0, 0x00, 0x4c, - 0x39, 0x28, 0x65, 0xa7, 0xc0, 0x00, 0x52, 0x8b, 0x2a, 0x67, 0xa7, 0x40, - 0x06, 0x50, 0x00, 0x01, 0xff, 0x4c, 0xaa, 0x55, 0x17, 0xdf, 0x01, 0x4e, - 0x53, 0x0e, 0x1c, 0xdf, 0x41, 0xa3, 0x58, 0xa4, 0x35, 0x44, 0x5d, 0x0e, - 0xad, 0x01, 0x80, 0x28, 0x4a, 0xf4, 0x6b, 0x6f, 0x1e, 0x00, 0x03, 0x7d, - 0x02, 0x12, 0x4c, 0xaa, 0x55, 0xab, 0x01, 0x00, 0x4e, 0x53, 0x0e, 0x88, - 0x02, 0x00, 0x46, 0x27, 0x05, 0x67, 0x01, 0x40, 0x51, 0x60, 0x56, 0x2a, - 0xdf, 0x01, 0x49, 0xa9, 0x22, 0x75, 0x1d, 0x40, 0x53, 0x0e, 0x46, 0x09, - 0xdf, 0x41, 0x02, 0x1b, 0x01, 0x11, 0x03, 0xb5, 0x0b, 0x01, 0xff, 0x45, - 0x5c, 0x00, 0x6b, 0x1e, 0x00, 0x45, 0xf5, 0x06, 0x6d, 0x1e, 0x40, 0x46, - 0x32, 0x23, 0x97, 0x1e, 0x00, 0x4c, 0xab, 0x3e, 0x66, 0x2c, 0x40, 0x44, - 0x4d, 0x6b, 0x65, 0x01, 0x00, 0x46, 0x7c, 0xbf, 0x63, 0x01, 0x00, 0x4f, - 0x48, 0x6d, 0x71, 0x1e, 0x00, 0x4a, 0x75, 0xac, 0x1b, 0x02, 0x00, 0x43, - 0x24, 0x0b, 0x36, 0x02, 0x40, 0x06, 0x50, 0x00, 0x82, 0x01, 0xa1, 0x74, - 0xa3, 0x3f, 0x46, 0xa6, 0xae, 0xdf, 0x00, 0x00, 0xa9, 0x0c, 0x51, 0x05, - 0x5c, 0x85, 0x02, 0x00, 0x48, 0xe2, 0xc8, 0x45, 0xab, 0x40, 0x07, 0xbd, - 0x44, 0x06, 0x47, 0x53, 0xc4, 0xd9, 0xa7, 0x40, 0x4d, 0x52, 0x80, 0x1e, - 0x1d, 0x00, 0xef, 0x11, 0x1d, 0x80, 0x0a, 0x48, 0x22, 0xc9, 0x1f, 0x1d, - 0x00, 0xf5, 0x1d, 0x1d, 0x40, 0x4c, 0x39, 0x28, 0x13, 0x1d, 0x00, 0x45, - 0xb0, 0xe6, 0x12, 0x1d, 0x40, 0x43, 0x55, 0x7a, 0x59, 0x02, 0x80, 0x1b, - 0x05, 0x4b, 0x06, 0x01, 0xff, 0xe7, 0x61, 0x02, 0x80, 0x0b, 0xf2, 0x4b, - 0xab, 0xc0, 0x00, 0x4a, 0x55, 0xa4, 0x4c, 0xab, 0x40, 0x52, 0x7a, 0x4e, - 0x36, 0xab, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x0e, 0x5a, - 0x02, 0x00, 0x4e, 0x53, 0x0e, 0x95, 0x1d, 0x40, 0x47, 0x8c, 0xcf, 0x60, - 0xab, 0x00, 0x46, 0xf1, 0xcb, 0x8c, 0xa7, 0x40, 0x45, 0x29, 0x38, 0x5b, - 0x01, 0x80, 0x78, 0xa3, 0x51, 0xa4, 0x31, 0x44, 0x5d, 0x0e, 0x82, 0x02, - 0x00, 0x03, 0x7d, 0x02, 0x1b, 0x4e, 0x41, 0x42, 0xa9, 0xa7, 0x00, 0x4c, - 0xaa, 0x55, 0x8a, 0x1d, 0x00, 0xb3, 0x01, 0xff, 0x53, 0xa7, 0x48, 0xca, - 0xa7, 0x00, 0x49, 0xb6, 0xbe, 0x3f, 0x02, 0x40, 0x51, 0x60, 0x56, 0x29, - 0xdf, 0x01, 0x49, 0xa9, 0x22, 0x74, 0x1d, 0x40, 0x4e, 0xa9, 0x3e, 0xcd, - 0xa7, 0x00, 0x03, 0xb5, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x61, 0x1e, - 0x00, 0x45, 0xf5, 0x06, 0x63, 0x1e, 0xc0, 0x00, 0x4e, 0x93, 0x1d, 0x69, - 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x61, 0x01, 0x80, 0x18, 0x46, 0x7c, 0xbf, - 0x5f, 0x01, 0x00, 0x49, 0xa5, 0x04, 0x5d, 0x01, 0x00, 0x4a, 0x75, 0xac, - 0x19, 0x02, 0x00, 0x43, 0x24, 0x0b, 0x1e, 0xdf, 0x41, 0x4e, 0x93, 0x1d, - 0x67, 0x1e, 0x40, 0x4e, 0x93, 0x1d, 0x65, 0x1e, 0x40, 0x80, 0x5b, 0x48, - 0xc2, 0xc0, 0x64, 0x02, 0x00, 0x08, 0x8f, 0x14, 0x0d, 0x42, 0x1d, 0x04, - 0x75, 0xa7, 0xc0, 0x00, 0x48, 0x4b, 0xb0, 0x5d, 0xa7, 0x40, 0xe3, 0x84, - 0x21, 0x80, 0x39, 0xe5, 0x58, 0x02, 0x80, 0x2e, 0x46, 0x4c, 0xd9, 0xf6, - 0xa7, 0x00, 0xeb, 0x03, 0xdf, 0x01, 0x46, 0x7d, 0x28, 0x5c, 0x02, 0x80, - 0x0c, 0x4f, 0x90, 0x70, 0x7f, 0x02, 0x00, 0x48, 0x02, 0xc8, 0x01, 0xdf, - 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x0e, 0x5d, 0x02, 0x00, - 0x4e, 0x53, 0x0e, 0x94, 0x1d, 0x40, 0x42, 0x1d, 0x01, 0x07, 0xdf, 0x41, - 0x49, 0xa5, 0x3a, 0x3f, 0xa7, 0x40, 0x47, 0x4c, 0xb0, 0x5b, 0xa7, 0x00, - 0x04, 0x51, 0x00, 0x01, 0xff, 0x80, 0x06, 0x4a, 0xb4, 0x4f, 0x47, 0xab, - 0x40, 0x45, 0x29, 0x38, 0x55, 0x01, 0x00, 0xa3, 0x75, 0x02, 0x3b, 0x01, - 0x54, 0x48, 0x97, 0x70, 0x7e, 0x02, 0x80, 0x3c, 0x4e, 0xd6, 0x22, 0x13, - 0x02, 0x00, 0xac, 0x28, 0x03, 0x7d, 0x02, 0x18, 0x4e, 0x41, 0x42, 0xa7, - 0xa7, 0x00, 0x4c, 0xaa, 0x55, 0x89, 0x1d, 0x00, 0x46, 0x27, 0x05, 0x4d, - 0x02, 0x00, 0x44, 0x23, 0x17, 0x7d, 0x02, 0x40, 0x51, 0x60, 0x56, 0x28, - 0xdf, 0x01, 0x49, 0xa9, 0x22, 0x72, 0x1d, 0x40, 0x49, 0xf5, 0x6b, 0x5f, - 0x1e, 0x00, 0x47, 0x07, 0x74, 0x7c, 0x02, 0x40, 0x05, 0x19, 0x00, 0x01, - 0xff, 0x4c, 0xa6, 0x22, 0x73, 0x1d, 0x00, 0x4c, 0xaa, 0x55, 0x16, 0xdf, - 0x41, 0x02, 0xc6, 0x00, 0x06, 0x4a, 0x88, 0x22, 0x11, 0x02, 0x40, 0x45, - 0x5c, 0x00, 0x59, 0x1e, 0x00, 0x45, 0xf5, 0x06, 0x5b, 0x1e, 0xc0, 0x00, - 0x4b, 0x59, 0x95, 0x5d, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x59, 0x01, 0x00, - 0x46, 0x7c, 0xbf, 0x57, 0x01, 0x00, 0x4b, 0x81, 0x4e, 0x49, 0xab, 0x40, - 0x06, 0x50, 0x00, 0x06, 0x49, 0x5f, 0xbb, 0x39, 0x02, 0x40, 0x4f, 0xa8, - 0x3e, 0x59, 0xa7, 0x00, 0x44, 0x5d, 0x0e, 0xa0, 0x02, 0x80, 0x06, 0x58, - 0x85, 0x2a, 0x57, 0xa7, 0x40, 0x45, 0x8e, 0x46, 0x4b, 0x02, 0x40, 0x06, - 0x50, 0x00, 0x06, 0x42, 0x49, 0x00, 0x78, 0x02, 0x40, 0x45, 0x29, 0x38, - 0x55, 0x1e, 0x00, 0x49, 0x98, 0x1d, 0x57, 0x1e, 0x00, 0x48, 0xa2, 0xc3, - 0x53, 0xa7, 0x00, 0x44, 0x5d, 0x0e, 0xa5, 0x01, 0x00, 0x4c, 0xa6, 0x22, - 0x71, 0x1d, 0x00, 0x4c, 0xaa, 0x55, 0x88, 0x1d, 0x00, 0xb3, 0x01, 0xff, - 0x4c, 0x41, 0x92, 0x55, 0xa7, 0x00, 0x45, 0x28, 0x05, 0x7d, 0x1d, 0xc0, - 0x00, 0x52, 0x8b, 0x2a, 0x51, 0xa7, 0x40, 0x06, 0x50, 0x00, 0x40, 0xe9, - 0xa3, 0x01, 0x00, 0x4b, 0x39, 0x9c, 0xc1, 0xa7, 0x00, 0x44, 0x6b, 0x7a, - 0xb7, 0xa7, 0x00, 0xef, 0x4f, 0xa7, 0x00, 0x04, 0xcc, 0x04, 0x04, 0xf5, - 0x23, 0x02, 0x40, 0xe5, 0x5b, 0x02, 0x80, 0x19, 0xef, 0x54, 0x02, 0xc0, - 0x00, 0x06, 0x50, 0x00, 0x04, 0xe5, 0x62, 0xab, 0x40, 0x4e, 0x53, 0x0e, - 0x97, 0x1d, 0x00, 0x46, 0x27, 0x05, 0x3f, 0xab, 0x40, 0x54, 0x4d, 0x0e, - 0x93, 0x1d, 0x40, 0x45, 0x29, 0x38, 0xf3, 0x00, 0x00, 0x45, 0xcb, 0x22, - 0x4f, 0x01, 0x00, 0xa3, 0xe7, 0x01, 0xa4, 0xac, 0x01, 0x45, 0x8d, 0x22, - 0xf2, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x72, 0x4e, 0xd6, 0x22, 0x0f, 0x02, - 0x00, 0x02, 0x13, 0x01, 0x56, 0x46, 0x04, 0x6f, 0x4d, 0x01, 0x80, 0x3e, - 0x46, 0xc2, 0xdb, 0xeb, 0x01, 0x80, 0x31, 0x4e, 0x53, 0x0e, 0x1b, 0xdf, - 0x01, 0x46, 0x27, 0x05, 0xf8, 0x00, 0x80, 0x1e, 0x45, 0xad, 0x22, 0xf5, - 0x00, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0x4d, - 0x1e, 0x00, 0x49, 0x2f, 0x23, 0x4f, 0x1e, 0x00, 0x46, 0x04, 0x6f, 0x2d, - 0x02, 0x40, 0x4a, 0x5b, 0xa3, 0xff, 0x01, 0x40, 0x4b, 0x59, 0x95, 0xed, - 0x01, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0x53, 0x1e, - 0x00, 0x45, 0x8d, 0x22, 0x51, 0x1e, 0x40, 0x51, 0x5b, 0x5b, 0x4b, 0xa7, - 0x00, 0x42, 0x1f, 0x00, 0x4d, 0xa7, 0x00, 0x4d, 0x99, 0x88, 0x7a, 0x2c, - 0x40, 0x48, 0xfd, 0xa8, 0xcf, 0x1e, 0x00, 0x42, 0x5e, 0x01, 0xa1, 0x01, - 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0xdb, 0x1e, - 0x00, 0x49, 0x50, 0x12, 0xe3, 0x1e, 0x00, 0x45, 0x8d, 0x22, 0xdd, 0x1e, - 0x00, 0x4a, 0xfb, 0xa8, 0xdf, 0x1e, 0x00, 0x45, 0xad, 0x22, 0xe1, 0x1e, - 0x40, 0x48, 0x30, 0x23, 0xf6, 0x00, 0x80, 0x2b, 0xaf, 0x01, 0xff, 0x02, - 0xc6, 0x00, 0x11, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x45, 0x29, 0x38, 0x51, - 0x01, 0x00, 0x45, 0x8d, 0x22, 0x0d, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x2f, - 0x02, 0x80, 0x06, 0x45, 0xf5, 0x06, 0xcd, 0x1e, 0x40, 0x4b, 0x59, 0x95, - 0x31, 0x02, 0x40, 0x4b, 0x59, 0x95, 0x2b, 0x02, 0x40, 0x44, 0x4d, 0x6b, - 0xd2, 0x01, 0x00, 0x49, 0xa5, 0x04, 0xf4, 0x00, 0xc0, 0x00, 0x05, 0x19, - 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0xd1, 0x1e, 0x00, 0x49, 0x50, 0x12, - 0xd9, 0x1e, 0x00, 0x45, 0x8d, 0x22, 0xd3, 0x1e, 0x00, 0x4a, 0xfb, 0xa8, - 0xd5, 0x1e, 0x00, 0x45, 0xad, 0x22, 0xd7, 0x1e, 0x40, 0x80, 0x0a, 0xea, - 0xcc, 0x01, 0x00, 0x42, 0x1d, 0x04, 0x74, 0xa7, 0x40, 0x56, 0x85, 0x35, - 0x49, 0x01, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0x44, - 0x01, 0x00, 0xa3, 0x5b, 0xa4, 0x42, 0x45, 0x8d, 0x22, 0xf9, 0x01, 0x00, - 0xac, 0x28, 0x03, 0x7d, 0x02, 0x18, 0x4e, 0x41, 0x42, 0xa5, 0xa7, 0x00, - 0x4c, 0xaa, 0x55, 0x87, 0x1d, 0x00, 0x4e, 0x53, 0x0e, 0x73, 0x02, 0x00, - 0x45, 0xad, 0x22, 0xf1, 0x00, 0x40, 0x51, 0x60, 0x56, 0x27, 0xdf, 0x01, - 0x49, 0xa9, 0x22, 0x70, 0x1d, 0x40, 0x48, 0x69, 0x56, 0x72, 0x02, 0x00, - 0x49, 0xf5, 0x6b, 0x49, 0x1e, 0x00, 0x4d, 0x32, 0x85, 0x9e, 0x01, 0x40, - 0x48, 0x95, 0x2a, 0x91, 0xa7, 0x00, 0x03, 0xb5, 0x0b, 0x01, 0xff, 0x45, - 0x5c, 0x00, 0x45, 0x1e, 0x00, 0x45, 0xf5, 0x06, 0x47, 0x1e, 0x40, 0x44, - 0x4d, 0x6b, 0x48, 0x01, 0x00, 0x46, 0x7c, 0xbf, 0x46, 0x01, 0x00, 0x4f, - 0x48, 0x6d, 0x4b, 0x1e, 0x00, 0x4b, 0x81, 0x4e, 0x3b, 0xab, 0x00, 0x43, - 0x24, 0x0b, 0x35, 0x02, 0x40, 0x06, 0x50, 0x00, 0x1f, 0x05, 0x7e, 0x02, - 0x06, 0x42, 0x1d, 0x04, 0x73, 0xa7, 0x40, 0x48, 0x0a, 0xc0, 0xd7, 0xa7, - 0x00, 0x07, 0x25, 0xcb, 0x01, 0xff, 0x42, 0x0f, 0x07, 0xfb, 0x1e, 0x00, - 0xf6, 0xfd, 0x1e, 0x40, 0x45, 0x29, 0x38, 0x3f, 0x1e, 0x00, 0x4c, 0x80, - 0x4e, 0x3a, 0xab, 0x00, 0x04, 0xb4, 0x0b, 0x12, 0x44, 0x5d, 0x0e, 0x71, - 0x02, 0x00, 0x4c, 0xa6, 0x22, 0x6f, 0x1d, 0x00, 0x4c, 0xaa, 0x55, 0x86, - 0x1d, 0x40, 0x45, 0x5c, 0x00, 0x41, 0x1e, 0x00, 0x45, 0xf5, 0x06, 0x43, - 0x1e, 0x40, 0x06, 0x50, 0x00, 0x58, 0x45, 0x33, 0xe1, 0xdb, 0xa7, 0x80, - 0x4b, 0xa5, 0x36, 0xea, 0xc9, 0x01, 0x00, 0x45, 0xe4, 0xb9, 0x7f, 0x01, - 0x80, 0x12, 0x49, 0xa3, 0xbc, 0xaa, 0x02, 0x00, 0x42, 0x1d, 0x04, 0x72, - 0xa7, 0x00, 0x49, 0x34, 0xbf, 0xab, 0x02, 0x40, 0x06, 0x50, 0x00, 0x01, - 0xff, 0xa4, 0x06, 0x4b, 0xc3, 0x9a, 0x9d, 0x1e, 0x40, 0x4e, 0xa9, 0x3e, - 0x9c, 0x1e, 0x00, 0x48, 0x99, 0x1d, 0x9b, 0x1e, 0x40, 0x45, 0x06, 0xe6, - 0x35, 0xab, 0x00, 0x42, 0xb3, 0x27, 0x6e, 0x02, 0xc0, 0x00, 0x54, 0x4d, - 0x0e, 0x05, 0xdf, 0x41, 0x4c, 0x39, 0x28, 0x9b, 0x01, 0x40, 0x45, 0x29, - 0x38, 0x3a, 0x01, 0x00, 0xa2, 0x8e, 0x01, 0xa3, 0x74, 0x02, 0x3b, 0x01, - 0x52, 0x48, 0x97, 0x70, 0x11, 0xdf, 0x01, 0x4b, 0xc3, 0x9a, 0x49, 0xa7, - 0x00, 0x4f, 0x2a, 0x6d, 0x37, 0xab, 0x00, 0x4a, 0xf4, 0x6b, 0x3b, 0x1e, - 0x00, 0x03, 0x7d, 0x02, 0x19, 0x4c, 0xaa, 0x55, 0x85, 0x1d, 0x00, 0x4e, - 0x53, 0x0e, 0x6d, 0x02, 0x80, 0x06, 0x46, 0x27, 0x05, 0x42, 0x01, 0x40, - 0x49, 0xcf, 0xb1, 0x8e, 0xa7, 0x40, 0x51, 0x60, 0x56, 0x26, 0xdf, 0x01, - 0x04, 0x80, 0x02, 0x01, 0xff, 0x43, 0xd4, 0x09, 0x40, 0x01, 0x00, 0x44, - 0xf7, 0x07, 0x39, 0xab, 0x00, 0x45, 0xad, 0x22, 0x6b, 0x02, 0x40, 0x47, - 0x52, 0x12, 0x37, 0x1e, 0x80, 0x11, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x43, - 0x16, 0x00, 0x61, 0x2c, 0x00, 0x4c, 0xa6, 0x22, 0x38, 0xab, 0x40, 0x4b, - 0x59, 0x95, 0x39, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x3e, 0x01, 0x00, 0x46, - 0x7c, 0xbf, 0x3c, 0x01, 0x00, 0x4f, 0x48, 0x6d, 0x3d, 0x1e, 0x00, 0x43, - 0x24, 0x0b, 0x34, 0x02, 0x40, 0x42, 0x17, 0x00, 0x9a, 0x01, 0x00, 0x43, - 0xa1, 0xa1, 0x6c, 0x02, 0xc0, 0x00, 0x51, 0xa5, 0x55, 0x13, 0xdf, 0x41, - 0x06, 0x50, 0x00, 0x06, 0x42, 0x71, 0x00, 0x38, 0x01, 0x40, 0x45, 0x29, - 0x38, 0x31, 0x1e, 0x00, 0xa3, 0x39, 0xa4, 0x25, 0x44, 0x5d, 0x0e, 0x99, - 0x01, 0x00, 0x4a, 0xf4, 0x6b, 0x35, 0x1e, 0x00, 0x4e, 0x41, 0x42, 0xa3, - 0xa7, 0x00, 0x4c, 0xaa, 0x55, 0x84, 0x1d, 0x00, 0x46, 0x27, 0x05, 0x41, - 0xa7, 0xc0, 0x00, 0x54, 0xa3, 0x3e, 0x45, 0xa7, 0x40, 0x48, 0x95, 0x2a, - 0x6a, 0x2c, 0x00, 0x4e, 0xa9, 0x3e, 0x43, 0xa7, 0x00, 0x48, 0x51, 0x12, - 0x33, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0xe9, 0x01, 0x00, 0x46, 0x7c, 0xbf, - 0x37, 0x01, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa3, 0x06, 0x46, 0x27, - 0x05, 0x49, 0x02, 0x40, 0x44, 0x4d, 0x6b, 0xf0, 0x01, 0x00, 0x49, 0xa5, - 0x04, 0x35, 0x01, 0x00, 0x4b, 0x81, 0x4e, 0x9d, 0x02, 0x40, 0x06, 0x50, - 0x00, 0x48, 0xae, 0x19, 0x02, 0xf0, 0x04, 0x04, 0xf3, 0x6d, 0xa7, 0x40, - 0xe1, 0x69, 0x02, 0x80, 0x06, 0x47, 0x07, 0xcf, 0x61, 0xab, 0x40, 0x4c, - 0x39, 0x28, 0x7c, 0x1d, 0x40, 0x06, 0x6d, 0x6e, 0x11, 0x07, 0xd8, 0x22, - 0x01, 0xff, 0x45, 0x2e, 0xe1, 0x64, 0xab, 0x00, 0x42, 0x17, 0x50, 0x40, - 0xab, 0x40, 0xe4, 0x7a, 0xa7, 0x00, 0xe6, 0x7c, 0xa7, 0x00, 0xe7, 0x79, - 0x1d, 0x00, 0xf2, 0x83, 0xa7, 0x00, 0xf3, 0x85, 0xa7, 0x00, 0xf4, 0x87, - 0xa7, 0x40, 0x45, 0x29, 0x38, 0xed, 0x00, 0x00, 0x45, 0xcb, 0x22, 0x2d, - 0x01, 0x00, 0xa3, 0x5c, 0xa4, 0x3e, 0x45, 0x8d, 0x22, 0xec, 0x00, 0x00, - 0x4a, 0xfb, 0xa8, 0xc9, 0x1e, 0x00, 0x4e, 0xd6, 0x22, 0x0b, 0x02, 0x00, - 0x46, 0x04, 0x6f, 0x2b, 0x01, 0x00, 0x46, 0xc2, 0xdb, 0x2f, 0x01, 0x00, - 0x4e, 0x53, 0x0e, 0x96, 0x1d, 0x00, 0x46, 0x27, 0x05, 0x68, 0x02, 0x80, - 0x0d, 0x45, 0xad, 0x22, 0x29, 0x01, 0xc0, 0x00, 0x46, 0xf4, 0x06, 0x2d, - 0x1e, 0x40, 0x53, 0x0e, 0x46, 0x1a, 0xdf, 0x41, 0x48, 0x30, 0x23, 0xef, - 0x00, 0x80, 0x0f, 0xaf, 0x01, 0xff, 0x47, 0x52, 0x12, 0xcb, 0x1e, 0x00, - 0x4a, 0x88, 0x22, 0x09, 0x02, 0x40, 0x4a, 0x5b, 0xa3, 0x2f, 0x1e, 0x40, - 0x44, 0x4d, 0x6b, 0xd0, 0x01, 0x00, 0x49, 0xa5, 0x04, 0xee, 0x00, 0x40, - 0x06, 0x50, 0x00, 0x17, 0x45, 0x4d, 0xd9, 0x76, 0x2c, 0x00, 0x43, 0xfd, - 0x09, 0x27, 0xa7, 0x80, 0x04, 0xf6, 0x95, 0x01, 0x40, 0x4a, 0x1f, 0x24, - 0x67, 0x02, 0x40, 0x4b, 0xab, 0x97, 0x2b, 0x1e, 0x00, 0xa3, 0x37, 0xa4, - 0x18, 0x44, 0x5d, 0x0e, 0x66, 0x02, 0x00, 0x4a, 0xf4, 0x6b, 0x96, 0x1e, - 0x00, 0x4c, 0xaa, 0x55, 0x95, 0xa7, 0x00, 0x46, 0x27, 0x05, 0x27, 0x01, - 0x40, 0x48, 0x95, 0x2a, 0x68, 0x2c, 0x00, 0x48, 0x30, 0x23, 0x27, 0x1e, - 0x00, 0x03, 0xb5, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x23, 0x1e, 0x00, - 0x45, 0xf5, 0x06, 0x25, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x1f, 0x02, 0x00, - 0x46, 0x7c, 0xbf, 0x29, 0x1e, 0x00, 0x49, 0xa5, 0x04, 0x25, 0x01, 0x40, - 0x06, 0x50, 0x00, 0x23, 0x44, 0x5e, 0x20, 0x63, 0x02, 0x00, 0x42, 0x22, - 0x00, 0xa3, 0x01, 0x00, 0x07, 0x2e, 0x28, 0x01, 0xff, 0xe1, 0xbb, 0xa7, - 0x00, 0xe9, 0xbd, 0xa7, 0x00, 0x44, 0x2a, 0x03, 0x42, 0x02, 0x00, 0xf5, - 0xbf, 0xa7, 0x40, 0x45, 0x29, 0x38, 0xf5, 0x01, 0x00, 0x45, 0xcb, 0x22, - 0x1f, 0x01, 0x00, 0xa3, 0x24, 0x49, 0x98, 0x1d, 0x21, 0x01, 0x00, 0x44, - 0x5d, 0x0e, 0x60, 0x02, 0x00, 0x46, 0x04, 0x6f, 0x21, 0x1e, 0x00, 0x4e, - 0x41, 0x42, 0xa1, 0xa7, 0x00, 0x4c, 0xaa, 0x55, 0x83, 0x1d, 0x00, 0x46, - 0x27, 0x05, 0xe5, 0x01, 0x40, 0x44, 0x4d, 0x6b, 0xe7, 0x01, 0x00, 0x46, - 0x7c, 0xbf, 0x23, 0x01, 0x00, 0x49, 0xa5, 0x04, 0x1d, 0x01, 0x40, 0x06, - 0x50, 0x00, 0x0d, 0x4b, 0x9a, 0x99, 0xa9, 0x02, 0xc0, 0x00, 0x4b, 0x4b, - 0x96, 0x00, 0xdf, 0x41, 0x49, 0x98, 0x1d, 0x1f, 0x1e, 0x00, 0x44, 0x5d, - 0x0e, 0x92, 0x01, 0x00, 0x4c, 0xa6, 0x22, 0x6e, 0x1d, 0x00, 0x4c, 0xaa, - 0x55, 0x82, 0x1d, 0x00, 0x46, 0x27, 0x05, 0x99, 0xa7, 0x40, 0x06, 0x50, - 0x00, 0x92, 0x01, 0x0e, 0xbc, 0x76, 0x81, 0x01, 0x42, 0x1d, 0x01, 0x4b, - 0x01, 0x80, 0x69, 0x42, 0xa4, 0x02, 0x83, 0x02, 0x80, 0x3e, 0xf4, 0x6b, - 0xa7, 0x80, 0x35, 0x42, 0xb3, 0x27, 0x92, 0x02, 0xc0, 0x00, 0x80, 0x01, - 0xff, 0x48, 0x09, 0x13, 0xb9, 0x01, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0xa3, 0x12, 0x4c, 0xaa, 0x55, 0x18, 0xdf, 0x01, 0x4e, 0x53, 0x0e, 0x9a, - 0x1d, 0x00, 0x44, 0x23, 0x17, 0xba, 0x01, 0x40, 0x44, 0x4d, 0x6b, 0xef, - 0x01, 0x00, 0x43, 0x24, 0x0b, 0x93, 0x02, 0x40, 0xe8, 0xf0, 0x00, 0x40, - 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x23, 0x0b, 0x86, 0x02, 0x00, 0x4a, - 0x25, 0xa7, 0x0b, 0xdf, 0x81, 0x0c, 0x4c, 0xaa, 0x55, 0x8b, 0x1d, 0x00, - 0x4e, 0x53, 0x0e, 0x98, 0x1d, 0x40, 0x49, 0xd8, 0xb1, 0x0c, 0xdf, 0x41, - 0x06, 0x50, 0x00, 0x01, 0xff, 0x4c, 0x80, 0x4e, 0x3c, 0xab, 0x00, 0x4c, - 0xaa, 0x55, 0x14, 0xdf, 0x41, 0x42, 0x9e, 0x01, 0x25, 0xa7, 0x00, 0x43, - 0x68, 0x00, 0x23, 0xa7, 0x40, 0x45, 0x29, 0x38, 0xe9, 0x00, 0x00, 0x45, - 0xcb, 0x22, 0x15, 0x01, 0x00, 0xa3, 0x76, 0xa4, 0x55, 0x48, 0xa2, 0xc3, - 0x34, 0xab, 0x00, 0x45, 0x8d, 0x22, 0xe8, 0x00, 0x00, 0x4a, 0xfb, 0xa8, - 0xbb, 0x1e, 0x00, 0x4e, 0xd6, 0x22, 0x07, 0x02, 0x00, 0x46, 0x04, 0x6f, - 0x13, 0x01, 0x80, 0x25, 0x45, 0xd8, 0x29, 0x78, 0x2c, 0x00, 0x46, 0xc2, - 0xdb, 0x19, 0x01, 0x00, 0x4e, 0x53, 0x0e, 0x92, 0x1d, 0x00, 0x46, 0x27, - 0x05, 0x47, 0x02, 0x00, 0x45, 0xad, 0x22, 0xbd, 0x1e, 0xc0, 0x00, 0x46, - 0xf4, 0x06, 0x1b, 0x1e, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x29, - 0x38, 0x17, 0x1e, 0x00, 0x45, 0x8d, 0x22, 0x15, 0x1e, 0x40, 0x48, 0x30, - 0x23, 0xeb, 0x00, 0x00, 0xaf, 0x01, 0xff, 0x02, 0xc6, 0x00, 0x06, 0x4a, - 0x88, 0x22, 0x05, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x17, 0x01, 0x00, 0x45, - 0xf5, 0x06, 0xb9, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x1b, 0x01, 0x00, 0x46, - 0x7c, 0xbf, 0x29, 0x02, 0x80, 0x32, 0x49, 0xa5, 0x04, 0xea, 0x00, 0xc0, - 0x00, 0x80, 0x01, 0xff, 0x04, 0x1a, 0x00, 0x06, 0x45, 0xf5, 0x06, 0x19, - 0x1e, 0x40, 0x45, 0x29, 0x38, 0xbf, 0x1e, 0x00, 0x49, 0x50, 0x12, 0xc7, - 0x1e, 0x00, 0x45, 0x8d, 0x22, 0xc1, 0x1e, 0x00, 0x4a, 0xfb, 0xa8, 0xc3, - 0x1e, 0x00, 0x45, 0xad, 0x22, 0xc5, 0x1e, 0x40, 0x4a, 0x6f, 0xa3, 0x1d, - 0x1e, 0x40, 0x06, 0x50, 0x00, 0x8a, 0x01, 0x49, 0x2a, 0xb4, 0x38, 0x02, - 0x00, 0xa5, 0x64, 0xaf, 0x2c, 0x42, 0x1d, 0x04, 0x71, 0xa7, 0x00, 0xfa, - 0xf3, 0x01, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x47, 0x66, 0x47, 0xa3, 0x02, - 0x80, 0x06, 0x4a, 0xf4, 0x95, 0xc6, 0x01, 0x40, 0x06, 0x50, 0x00, 0x01, - 0xff, 0x44, 0x23, 0x0b, 0xa5, 0x02, 0x00, 0x4e, 0x53, 0x0e, 0x66, 0xab, - 0x40, 0x06, 0x85, 0x40, 0x1c, 0x05, 0x3d, 0x01, 0x01, 0xff, 0xf2, 0x48, - 0xab, 0x80, 0x0c, 0x45, 0xc8, 0x48, 0xd3, 0xa7, 0x00, 0x44, 0x2c, 0xa2, - 0xd5, 0xa7, 0x40, 0x52, 0x7a, 0x4e, 0x4a, 0xab, 0x40, 0xe9, 0x31, 0x01, - 0x00, 0xea, 0x37, 0x02, 0xc0, 0x00, 0x4c, 0x39, 0x28, 0x5f, 0x02, 0xc0, - 0x00, 0x49, 0x38, 0x23, 0x84, 0x02, 0x40, 0x43, 0xef, 0x94, 0x9f, 0x1e, - 0x00, 0x4a, 0xbb, 0xb1, 0xa4, 0x02, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, - 0xff, 0x4c, 0xaa, 0x55, 0x12, 0xdf, 0x01, 0x4e, 0x53, 0x0e, 0x19, 0xdf, - 0x41, 0xa3, 0x56, 0x04, 0xb4, 0x0b, 0x46, 0x44, 0x5d, 0x0e, 0x57, 0x02, - 0x80, 0x39, 0x4a, 0xf4, 0x6b, 0x0f, 0x1e, 0x00, 0x03, 0x7d, 0x02, 0x23, - 0x4c, 0xaa, 0x55, 0x81, 0x1d, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x43, - 0x24, 0x17, 0x56, 0x02, 0x00, 0x45, 0x9d, 0xdd, 0x8c, 0x01, 0x40, 0x53, - 0xa7, 0x48, 0xc8, 0xa7, 0x00, 0x45, 0x28, 0x05, 0x11, 0x01, 0x40, 0x51, - 0x60, 0x56, 0x25, 0xdf, 0x01, 0x49, 0xa9, 0x22, 0x6d, 0x1d, 0x40, 0x49, - 0xe1, 0xb1, 0x91, 0x1d, 0x40, 0x45, 0x5c, 0x00, 0x0b, 0x1e, 0x00, 0x45, - 0xf5, 0x06, 0x0d, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x0f, 0x01, 0x00, 0x46, - 0x7c, 0xbf, 0x11, 0x1e, 0x00, 0x4f, 0x48, 0x6d, 0x13, 0x1e, 0x00, 0x43, - 0x24, 0x0b, 0x21, 0x02, 0x40, 0x06, 0x50, 0x00, 0x49, 0x42, 0x49, 0x00, - 0x53, 0xab, 0x80, 0x31, 0x06, 0xd9, 0x1a, 0x13, 0x42, 0x10, 0x00, 0x6f, - 0xa7, 0x00, 0x48, 0x32, 0xc9, 0x2d, 0xa7, 0xc0, 0x00, 0x4b, 0xfe, 0x95, - 0x2f, 0xa7, 0x40, 0x49, 0x6b, 0x6e, 0xd1, 0xa7, 0x00, 0xaf, 0x06, 0x4f, - 0xdb, 0x70, 0x5e, 0x02, 0x40, 0x44, 0x6b, 0x7a, 0x77, 0x02, 0x00, 0x45, - 0x7e, 0x28, 0x9a, 0x02, 0x40, 0x0a, 0x2d, 0xa4, 0x01, 0xff, 0x4a, 0x6d, - 0xaa, 0x55, 0xab, 0x00, 0x4a, 0xca, 0x4e, 0x54, 0xab, 0x40, 0x45, 0x29, - 0x38, 0x07, 0x01, 0x00, 0x43, 0x16, 0x00, 0x93, 0xa7, 0x00, 0xa3, 0x1e, - 0x49, 0x98, 0x1d, 0x0b, 0x01, 0x00, 0x44, 0x5d, 0x0e, 0x88, 0x01, 0x00, - 0x4c, 0xaa, 0x55, 0x94, 0xa7, 0x00, 0x4e, 0x53, 0x0e, 0x1d, 0xdf, 0x01, - 0x46, 0x27, 0x05, 0x3c, 0x02, 0x40, 0x44, 0x4d, 0x6b, 0x0d, 0x01, 0x00, - 0x46, 0x7c, 0xbf, 0xe7, 0x00, 0x80, 0x0c, 0x49, 0xa5, 0x04, 0x09, 0x01, - 0x00, 0x43, 0x24, 0x0b, 0x55, 0x02, 0x40, 0x4a, 0x5b, 0xa3, 0x09, 0x1e, - 0x40, 0x06, 0x50, 0x00, 0x3f, 0xa1, 0x25, 0x43, 0x45, 0x0f, 0xb5, 0xa7, - 0x00, 0x0b, 0x18, 0x9c, 0x0c, 0x4c, 0xbd, 0x91, 0x17, 0x1d, 0x00, 0x47, - 0x9c, 0xd2, 0x47, 0xa7, 0x40, 0xe5, 0x32, 0xab, 0x00, 0xef, 0x3d, 0xab, - 0xc0, 0x00, 0x4c, 0x39, 0x28, 0x3e, 0xab, 0x40, 0x05, 0x4f, 0x7f, 0x06, - 0x4a, 0x91, 0xae, 0x4d, 0xab, 0x40, 0x45, 0x2e, 0xe1, 0x30, 0xab, 0x00, - 0xe5, 0x33, 0xab, 0x00, 0xef, 0x75, 0x02, 0x40, 0x04, 0xb4, 0x0b, 0x2a, - 0x48, 0xa2, 0xc3, 0x97, 0xa7, 0x00, 0x44, 0x5d, 0x0e, 0x53, 0x02, 0x00, - 0x4a, 0xf4, 0x6b, 0x07, 0x1e, 0x00, 0x4c, 0xa6, 0x22, 0x6c, 0x1d, 0x00, - 0x4c, 0xaa, 0x55, 0x80, 0x1d, 0x00, 0x46, 0x27, 0x05, 0x80, 0x01, 0x00, - 0x46, 0x9c, 0xdd, 0x83, 0x01, 0x40, 0x45, 0x5c, 0x00, 0x03, 0x1e, 0x00, - 0x45, 0xf5, 0x06, 0x05, 0x1e, 0x40, 0x80, 0x44, 0xe1, 0x33, 0xa7, 0x00, - 0xe5, 0xe6, 0x00, 0x80, 0x2a, 0x44, 0x2f, 0xe1, 0x51, 0x02, 0x80, 0x1d, - 0x4a, 0x07, 0xac, 0xc3, 0xa7, 0x00, 0xef, 0x35, 0xa7, 0x00, 0xf5, 0x37, - 0xa7, 0x00, 0xf6, 0x39, 0xa7, 0x80, 0x04, 0xf9, 0x3d, 0xa7, 0x40, 0x54, - 0xf3, 0x3e, 0x3b, 0xa7, 0x40, 0x54, 0x4d, 0x0e, 0x90, 0x1d, 0x40, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0xfd, 0x01, 0x00, 0x46, 0x04, - 0x6f, 0xe3, 0x01, 0x40, 0x4e, 0x4a, 0x7a, 0x31, 0xab, 0x00, 0x05, 0x51, - 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0xe1, 0x00, 0x00, 0x45, 0xcb, 0x22, - 0x03, 0x01, 0x80, 0xb5, 0x01, 0xa3, 0x82, 0x01, 0xa4, 0x53, 0x45, 0x8d, - 0x22, 0xe0, 0x00, 0x00, 0x4a, 0xfb, 0xa8, 0xa3, 0x1e, 0x00, 0x4e, 0xd6, - 0x22, 0x03, 0x02, 0x00, 0x46, 0x04, 0x6f, 0x01, 0x01, 0x00, 0x46, 0xc2, - 0xdb, 0x05, 0x01, 0x00, 0xb2, 0x0c, 0x46, 0x27, 0x05, 0x65, 0x2c, 0x00, - 0x45, 0xad, 0x22, 0xe3, 0x00, 0x40, 0x4d, 0x54, 0x0e, 0x8f, 0x1d, 0x00, - 0xa9, 0x01, 0xff, 0x4d, 0xec, 0x70, 0x9a, 0x1e, 0x00, 0x03, 0xa2, 0x01, - 0x01, 0xff, 0x45, 0x5c, 0x00, 0xe5, 0x00, 0x80, 0x06, 0x45, 0xf5, 0x06, - 0x01, 0x1e, 0x40, 0x4a, 0x5b, 0xa3, 0xfb, 0x01, 0x40, 0x48, 0x30, 0x23, - 0xe4, 0x00, 0x80, 0x20, 0xaf, 0x01, 0xff, 0x02, 0xc6, 0x00, 0x06, 0x4a, - 0x88, 0x22, 0x01, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x27, 0x02, 0x80, 0x06, - 0x45, 0xf5, 0x06, 0xa1, 0x1e, 0x40, 0x4b, 0x59, 0x95, 0xe1, 0x01, 0x40, - 0x4b, 0x59, 0x95, 0xdf, 0x01, 0x40, 0x44, 0x4d, 0x6b, 0xce, 0x01, 0x00, - 0x49, 0xa5, 0x04, 0xe2, 0x00, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, - 0x45, 0x29, 0x38, 0xa5, 0x1e, 0x00, 0x49, 0x50, 0x12, 0xad, 0x1e, 0x00, - 0x45, 0x8d, 0x22, 0xa7, 0x1e, 0x00, 0x4a, 0xfb, 0xa8, 0xa9, 0x1e, 0x00, - 0x45, 0xad, 0x22, 0xab, 0x1e, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, - 0x29, 0x38, 0xaf, 0x1e, 0x00, 0x49, 0x50, 0x12, 0xb7, 0x1e, 0x00, 0x45, - 0x8d, 0x22, 0xb1, 0x1e, 0x00, 0x4a, 0xfb, 0xa8, 0xb3, 0x1e, 0x00, 0x45, - 0xad, 0x22, 0xb5, 0x1e, 0x40, 0x4d, 0x40, 0x82, 0x7b, 0x1d, 0x00, 0x4d, - 0xa2, 0x87, 0x7e, 0x1d, 0x40, 0xa1, 0x8d, 0x03, 0x02, 0xba, 0x06, 0xf1, - 0x02, 0x4c, 0x1d, 0x8c, 0xc0, 0x01, 0x00, 0x4c, 0x2d, 0x28, 0x94, 0x02, - 0x80, 0xdd, 0x02, 0x55, 0x71, 0x3b, 0x96, 0x02, 0x80, 0xc4, 0x02, 0x4d, - 0x44, 0x83, 0xc1, 0x01, 0x00, 0x5b, 0x5d, 0x1c, 0x95, 0x02, 0x00, 0x02, - 0x88, 0x00, 0x95, 0x02, 0xb3, 0x18, 0x4f, 0x7f, 0x72, 0xbb, 0x01, 0x00, - 0x58, 0x2d, 0x2b, 0x24, 0x1d, 0x00, 0x44, 0x2c, 0xa2, 0xbf, 0x01, 0x00, - 0x42, 0x7d, 0x21, 0xa6, 0x01, 0x40, 0x4e, 0x2c, 0x77, 0x8f, 0xa7, 0x00, - 0x0d, 0xf7, 0x3b, 0x0d, 0x4a, 0xdb, 0xaf, 0x97, 0x02, 0xc0, 0x00, 0x4a, - 0x6d, 0x47, 0x0f, 0xdf, 0x41, 0xe1, 0x00, 0x1d, 0x80, 0xda, 0x01, 0xe2, - 0x99, 0x02, 0x80, 0xce, 0x01, 0xe3, 0x04, 0x1d, 0x00, 0xe4, 0x05, 0x1d, - 0x00, 0xe5, 0x07, 0x1d, 0x80, 0xb4, 0x01, 0xe6, 0x30, 0xa7, 0x00, 0xe7, - 0x62, 0x02, 0x80, 0xa4, 0x01, 0xe8, 0x9c, 0x02, 0x00, 0xe9, 0x6a, 0x02, - 0x80, 0x94, 0x01, 0xea, 0x0a, 0x1d, 0x00, 0xeb, 0x0b, 0x1d, 0x00, 0xec, - 0x9f, 0x02, 0x80, 0x76, 0xed, 0x0d, 0x1d, 0x00, 0xee, 0x74, 0x02, 0x00, - 0xef, 0x0f, 0x1d, 0x80, 0x5b, 0xf0, 0x18, 0x1d, 0x00, 0xf1, 0xaf, 0xa7, - 0x00, 0xf2, 0x80, 0x02, 0x80, 0x36, 0xf3, 0x31, 0xa7, 0x00, 0xf4, 0x1b, - 0x1d, 0x80, 0x14, 0xf5, 0x1c, 0x1d, 0x00, 0xf6, 0x20, 0x1d, 0x00, 0xf7, - 0x21, 0x1d, 0x00, 0xf9, 0x8f, 0x02, 0x00, 0xfa, 0x22, 0x1d, 0x40, 0x06, - 0x46, 0x07, 0x01, 0xff, 0xe5, 0x7b, 0x2c, 0x00, 0xe7, 0x02, 0xdf, 0x01, - 0xeb, 0x10, 0xdf, 0x01, 0xed, 0xfa, 0xa7, 0x00, 0xf2, 0x1a, 0x1d, 0x40, - 0x4f, 0x89, 0x68, 0x46, 0xab, 0x00, 0x08, 0x8f, 0x14, 0x06, 0x42, 0x1d, - 0x04, 0x76, 0xa7, 0x40, 0xee, 0x0e, 0x1d, 0x00, 0xf2, 0x19, 0x1d, 0x40, - 0xe5, 0x76, 0x02, 0x00, 0x45, 0xb0, 0xe6, 0x10, 0x1d, 0x00, 0xf5, 0x15, - 0x1d, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x1f, 0xa4, 0x04, 0xdf, - 0x01, 0x46, 0x27, 0x05, 0x0c, 0x1d, 0x40, 0x49, 0x63, 0xba, 0x81, 0x02, - 0x40, 0x4a, 0x1f, 0x24, 0x9b, 0x02, 0x40, 0x42, 0x53, 0x00, 0x06, 0x1d, - 0x00, 0x42, 0xb3, 0x27, 0x23, 0x1d, 0x40, 0x47, 0x3d, 0xcc, 0x03, 0x1d, - 0x40, 0xe5, 0x01, 0x1d, 0x40, 0x4d, 0x40, 0x0e, 0xc3, 0x01, 0x80, 0x11, - 0x07, 0x90, 0x14, 0x01, 0xff, 0x48, 0x42, 0xc3, 0xaa, 0x01, 0x00, 0x58, - 0x2d, 0x28, 0xa2, 0x02, 0x40, 0x54, 0x4d, 0x0e, 0x0a, 0xdf, 0x41, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x44, 0x23, 0x0b, 0x0e, 0xdf, 0x01, 0x46, 0x27, - 0x05, 0xbe, 0x01, 0x40, 0x4c, 0x39, 0x28, 0xa1, 0x02, 0x40, 0x51, 0x4d, - 0x58, 0xad, 0x02, 0x00, 0x07, 0x75, 0x82, 0x01, 0xff, 0x45, 0x48, 0x0e, - 0x98, 0x02, 0x00, 0x4a, 0x54, 0x58, 0xac, 0x02, 0x40, 0x42, 0x9e, 0x01, - 0x25, 0x1d, 0x00, 0x4d, 0xb9, 0x83, 0xc2, 0x01, 0x40, 0x49, 0xeb, 0xb3, - 0xff, 0xa7, 0x00, 0xa9, 0x12, 0x09, 0x8e, 0x14, 0x06, 0x4a, 0xb9, 0xae, - 0xf7, 0xa7, 0x40, 0xe6, 0xfb, 0xa7, 0x00, 0xf0, 0xfc, 0xa7, 0x40, 0x46, - 0x50, 0xd5, 0xfe, 0xa7, 0x00, 0x49, 0xd5, 0x59, 0xfd, 0xa7, 0x40, 0x08, - 0xba, 0x05, 0x06, 0x44, 0x47, 0x10, 0x1d, 0x27, 0x40, 0x06, 0xc2, 0x05, - 0x11, 0x08, 0xfb, 0x1e, 0x01, 0xff, 0x42, 0xc1, 0xc4, 0x32, 0x01, 0x00, - 0x42, 0x17, 0x50, 0x52, 0x01, 0x40, 0xe1, 0x41, 0x00, 0x80, 0x94, 0x16, - 0xe2, 0x42, 0x00, 0x80, 0xd0, 0x15, 0xe3, 0x43, 0x00, 0x80, 0xe8, 0x14, - 0xe4, 0x44, 0x00, 0x80, 0x82, 0x14, 0xe5, 0x45, 0x00, 0x80, 0x86, 0x12, - 0xe6, 0x46, 0x00, 0x80, 0xe9, 0x11, 0xe7, 0x47, 0x00, 0x80, 0xfe, 0x10, - 0xe8, 0x48, 0x00, 0x80, 0x9d, 0x10, 0xe9, 0x49, 0x00, 0x80, 0xfa, 0x0e, - 0xea, 0x4a, 0x00, 0x80, 0xdb, 0x0e, 0xeb, 0x4b, 0x00, 0x80, 0x89, 0x0e, - 0xec, 0x4c, 0x00, 0x80, 0x84, 0x0d, 0xed, 0x4d, 0x00, 0x80, 0xc4, 0x0c, - 0xee, 0x4e, 0x00, 0x80, 0xd7, 0x0b, 0xef, 0x4f, 0x00, 0x80, 0x87, 0x09, - 0xf0, 0x50, 0x00, 0x80, 0xce, 0x08, 0xf1, 0x51, 0x00, 0x80, 0xb7, 0x08, - 0xf2, 0x52, 0x00, 0x80, 0xab, 0x07, 0xf3, 0x53, 0x00, 0x80, 0x87, 0x06, - 0xf4, 0x54, 0x00, 0x80, 0xd1, 0x04, 0xf5, 0x55, 0x00, 0x80, 0xd9, 0x02, - 0xf6, 0x56, 0x00, 0x80, 0x8f, 0x02, 0xf7, 0x57, 0x00, 0x80, 0xce, 0x01, - 0xf8, 0x58, 0x00, 0x80, 0xb7, 0x01, 0xf9, 0x59, 0x00, 0x80, 0x58, 0xfa, - 0x5a, 0x00, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, - 0x79, 0x01, 0x00, 0xa3, 0x3a, 0xa4, 0x21, 0x44, 0x5d, 0x0e, 0x24, 0x02, - 0x00, 0x4a, 0xf4, 0x6b, 0x94, 0x1e, 0x00, 0x4c, 0xaa, 0x55, 0xc6, 0xa7, - 0x00, 0xb3, 0x01, 0xff, 0x45, 0x28, 0x05, 0xb5, 0x01, 0x00, 0x49, 0xb6, - 0xbe, 0x7f, 0x2c, 0x40, 0x48, 0x95, 0x2a, 0x6b, 0x2c, 0x00, 0x03, 0xb5, - 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x7b, 0x01, 0x00, 0x45, 0xf5, 0x06, - 0x92, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x7d, 0x01, 0x00, 0x49, 0xa5, 0x04, - 0x90, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x06, 0x43, 0xdc, 0x50, 0x1c, 0x02, - 0x40, 0x45, 0x29, 0x38, 0xdd, 0x00, 0x00, 0x4a, 0xa4, 0x04, 0x76, 0x01, - 0x00, 0xa4, 0x2b, 0x45, 0x8d, 0x22, 0xf2, 0x1e, 0x00, 0x44, 0x5d, 0x0e, - 0xb3, 0x01, 0x80, 0x18, 0x44, 0x92, 0x83, 0xfe, 0x1e, 0x00, 0x46, 0x04, - 0x6f, 0x32, 0x02, 0x00, 0x46, 0x27, 0x05, 0x4e, 0x02, 0x00, 0x45, 0xad, - 0x22, 0xf8, 0x1e, 0x40, 0x46, 0x5b, 0x00, 0xf6, 0x1e, 0x40, 0x48, 0x30, - 0x23, 0x78, 0x01, 0x00, 0x03, 0xb5, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, - 0x8e, 0x1e, 0x00, 0x45, 0xf5, 0x06, 0xf4, 0x1e, 0x40, 0x07, 0x57, 0x07, - 0x01, 0xff, 0x48, 0x30, 0x23, 0x8c, 0x1e, 0x00, 0x48, 0x99, 0x1d, 0x8a, - 0x1e, 0x40, 0x06, 0x50, 0x00, 0x06, 0x43, 0x2d, 0xa2, 0xf7, 0x01, 0x40, - 0x45, 0x29, 0x38, 0x82, 0x1e, 0x00, 0x4a, 0xa4, 0x04, 0x74, 0x01, 0x00, - 0xa4, 0x0c, 0x45, 0x8d, 0x22, 0x80, 0x1e, 0x00, 0x44, 0x5d, 0x0e, 0x72, - 0x2c, 0x40, 0x48, 0x30, 0x23, 0x84, 0x1e, 0x00, 0x03, 0xb5, 0x0b, 0x01, - 0xff, 0x45, 0x5c, 0x00, 0x86, 0x1e, 0x00, 0x45, 0xf5, 0x06, 0x88, 0x1e, - 0x40, 0x06, 0x50, 0x00, 0x26, 0x43, 0x15, 0x05, 0x68, 0xa7, 0x00, 0x4b, - 0x94, 0x9b, 0x62, 0xa7, 0x00, 0x07, 0xff, 0xd0, 0x04, 0xf9, 0x60, 0xa7, - 0x40, 0x42, 0x44, 0x0f, 0x9a, 0xa7, 0x00, 0x42, 0x17, 0x50, 0x9c, 0xa7, - 0x00, 0x42, 0x87, 0x13, 0x9e, 0xa7, 0x40, 0xa4, 0x0c, 0x44, 0x5d, 0x0e, - 0xb2, 0x01, 0x00, 0x45, 0xad, 0x22, 0x7c, 0x1e, 0x40, 0x4e, 0xa9, 0x3e, - 0x5e, 0xa7, 0x00, 0x48, 0x51, 0x12, 0x7e, 0x1e, 0x40, 0x80, 0x06, 0x46, - 0x63, 0x15, 0xb1, 0x01, 0x40, 0x43, 0x16, 0x00, 0x44, 0x02, 0x00, 0x05, - 0x51, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0xda, 0x00, 0x00, 0x45, 0xcb, - 0x22, 0x6c, 0x01, 0x00, 0xa3, 0xbd, 0x01, 0xa4, 0x75, 0x45, 0x8d, 0x22, - 0xd9, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x3b, 0x4e, 0xd6, 0x22, 0x16, 0x02, - 0x00, 0x46, 0x04, 0x6f, 0x6a, 0x01, 0x80, 0x28, 0x46, 0xc2, 0xdb, 0x72, - 0x01, 0x00, 0x4a, 0x0f, 0xae, 0x6e, 0x01, 0x00, 0x46, 0x27, 0x05, 0xb8, - 0xa7, 0x00, 0x45, 0xad, 0x22, 0x68, 0x01, 0xc0, 0x00, 0x80, 0x01, 0xff, - 0x49, 0x5c, 0xa3, 0x78, 0x1e, 0x00, 0x45, 0xf5, 0x06, 0x74, 0x1e, 0x40, - 0x4e, 0xba, 0x73, 0x7a, 0x1e, 0x40, 0x48, 0xfd, 0xa8, 0xe6, 0x1e, 0x00, - 0x42, 0x5e, 0x01, 0xaf, 0x01, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, - 0x45, 0x29, 0x38, 0xe8, 0x1e, 0x00, 0x49, 0x50, 0x12, 0xf0, 0x1e, 0x00, - 0x45, 0x8d, 0x22, 0xea, 0x1e, 0x00, 0x4a, 0xfb, 0xa8, 0xec, 0x1e, 0x00, - 0x45, 0xad, 0x22, 0xee, 0x1e, 0x40, 0x48, 0x30, 0x23, 0xdc, 0x00, 0x80, - 0x1a, 0xaf, 0x01, 0xff, 0x47, 0x52, 0x12, 0xe4, 0x1e, 0x00, 0x05, 0x3d, - 0x01, 0x01, 0xff, 0x45, 0x29, 0x38, 0x70, 0x01, 0x00, 0x45, 0x8d, 0x22, - 0x14, 0x02, 0x40, 0x80, 0x01, 0xff, 0x04, 0x1a, 0x00, 0x06, 0x45, 0xf5, - 0x06, 0x72, 0x1e, 0x40, 0x45, 0x29, 0x38, 0xd7, 0x01, 0x00, 0x45, 0xf9, - 0x95, 0xd9, 0x01, 0x00, 0x45, 0x8d, 0x22, 0xdb, 0x01, 0x00, 0x46, 0x04, - 0x6f, 0xd5, 0x01, 0x40, 0x44, 0x4d, 0x6b, 0xd3, 0x01, 0x00, 0x49, 0xa5, - 0x04, 0xdb, 0x00, 0xc0, 0x00, 0x46, 0xf4, 0x06, 0x76, 0x1e, 0x40, 0x06, - 0x50, 0x00, 0x61, 0x44, 0xa8, 0x2c, 0xde, 0x00, 0x80, 0x4d, 0x04, 0xbf, - 0x0a, 0x37, 0x47, 0x80, 0xd2, 0x2a, 0xa7, 0x00, 0x06, 0x46, 0x07, 0x04, - 0xfa, 0x28, 0xa7, 0x40, 0xe1, 0x6f, 0x2c, 0x80, 0x1e, 0xe8, 0x8d, 0xa7, - 0x00, 0x49, 0x6b, 0x6e, 0x7e, 0xa7, 0x00, 0xeb, 0xb0, 0xa7, 0x00, 0xec, - 0x80, 0xa7, 0x00, 0xed, 0x9c, 0x01, 0x00, 0xf4, 0xb1, 0xa7, 0x00, 0xf6, - 0x45, 0x02, 0x40, 0x44, 0x2f, 0xe1, 0x70, 0x2c, 0x40, 0x44, 0x31, 0x11, - 0xbc, 0x01, 0x00, 0x43, 0x5f, 0x25, 0x84, 0x01, 0x00, 0x43, 0xd0, 0x09, - 0xa7, 0x01, 0x40, 0x4c, 0x39, 0x28, 0x64, 0xa7, 0xc0, 0x00, 0x52, 0x8b, - 0x2a, 0x66, 0xa7, 0x40, 0xa3, 0x31, 0xa4, 0x18, 0x44, 0x5d, 0x0e, 0xac, - 0x01, 0x00, 0x4a, 0xf4, 0x6b, 0x6e, 0x1e, 0x00, 0x4e, 0x53, 0x0e, 0xae, - 0x01, 0x00, 0x46, 0x27, 0x05, 0x66, 0x01, 0x40, 0x4e, 0xa9, 0x3e, 0x3e, - 0x02, 0x00, 0x03, 0xb5, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x6a, 0x1e, - 0x00, 0x45, 0xf5, 0x06, 0x6c, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x64, 0x01, - 0x00, 0x46, 0x7c, 0xbf, 0x62, 0x01, 0x00, 0x4f, 0x48, 0x6d, 0x70, 0x1e, - 0x00, 0x4a, 0x75, 0xac, 0x1a, 0x02, 0x40, 0x06, 0x50, 0x00, 0x31, 0x47, - 0xf0, 0xcb, 0x8b, 0xa7, 0x00, 0xa3, 0x1d, 0x46, 0xa6, 0xae, 0x9e, 0x1e, - 0x00, 0x48, 0x52, 0xc4, 0xd8, 0xa7, 0x00, 0x05, 0x0d, 0x07, 0x01, 0xff, - 0x49, 0xba, 0xb4, 0xae, 0xa7, 0x00, 0x50, 0x8a, 0x64, 0x4a, 0x02, 0x40, - 0x43, 0x55, 0x7a, 0x8f, 0x01, 0x00, 0x46, 0x04, 0xc8, 0xac, 0xa7, 0x40, - 0x45, 0x29, 0x38, 0x5a, 0x01, 0x80, 0x5c, 0xa3, 0x3b, 0xa4, 0x1b, 0x44, - 0x5d, 0x0e, 0xc5, 0xa7, 0x00, 0x4e, 0x41, 0x42, 0xa8, 0xa7, 0x00, 0xb3, - 0x01, 0xff, 0x53, 0xa7, 0x48, 0xc9, 0xa7, 0x00, 0x49, 0xb6, 0xbe, 0x7e, - 0x2c, 0x40, 0x4e, 0xa9, 0x3e, 0xcc, 0xa7, 0x00, 0x03, 0xb5, 0x0b, 0x01, - 0xff, 0x45, 0x5c, 0x00, 0x60, 0x1e, 0x00, 0x45, 0xf5, 0x06, 0x62, 0x1e, - 0xc0, 0x00, 0x4e, 0x93, 0x1d, 0x68, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x60, - 0x01, 0x80, 0x12, 0x46, 0x7c, 0xbf, 0x5e, 0x01, 0x00, 0x49, 0xa5, 0x04, - 0x5c, 0x01, 0x00, 0x4a, 0x75, 0xac, 0x18, 0x02, 0x40, 0x4e, 0x93, 0x1d, - 0x66, 0x1e, 0x40, 0x4e, 0x93, 0x1d, 0x64, 0x1e, 0x40, 0x80, 0x26, 0x48, - 0xc2, 0xc0, 0xcb, 0xa7, 0x00, 0x08, 0x8f, 0x14, 0x06, 0x4a, 0x49, 0xb0, - 0x5c, 0xa7, 0x40, 0x4a, 0x35, 0xa6, 0x3e, 0xa7, 0x00, 0xe5, 0x8e, 0x01, - 0x00, 0x46, 0x4c, 0xd9, 0xf5, 0xa7, 0x00, 0x46, 0x7d, 0x28, 0xab, 0xa7, - 0x40, 0x47, 0x4c, 0xb0, 0x5a, 0xa7, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x45, 0x29, 0x38, 0x54, 0x01, 0x00, 0xa3, 0x3f, 0x02, 0x3b, 0x01, 0x1e, - 0x4e, 0xd6, 0x22, 0x12, 0x02, 0x00, 0x4a, 0xf4, 0x6b, 0x5e, 0x1e, 0x00, - 0x4e, 0x41, 0x42, 0xa6, 0xa7, 0x00, 0x46, 0x27, 0x05, 0x4c, 0x02, 0x00, - 0x44, 0x23, 0x17, 0x64, 0x2c, 0x40, 0x02, 0xc6, 0x00, 0x06, 0x4a, 0x88, - 0x22, 0x10, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x58, 0x1e, 0x00, 0x45, 0xf5, - 0x06, 0x5a, 0x1e, 0xc0, 0x00, 0x4b, 0x59, 0x95, 0x5c, 0x1e, 0x40, 0x44, - 0x4d, 0x6b, 0x58, 0x01, 0x00, 0x46, 0x7c, 0xbf, 0x56, 0x01, 0x40, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x4f, 0xa8, 0x3e, 0x58, 0xa7, 0x00, 0x58, 0x85, - 0x2a, 0x56, 0xa7, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, - 0x54, 0x1e, 0x00, 0x49, 0x98, 0x1d, 0x56, 0x1e, 0x00, 0x48, 0xa2, 0xc3, - 0x52, 0xa7, 0x00, 0x44, 0x5d, 0x0e, 0xa4, 0x01, 0x00, 0xb3, 0x01, 0xff, - 0x4c, 0x41, 0x92, 0x54, 0xa7, 0x00, 0x45, 0x28, 0x05, 0x63, 0x2c, 0xc0, - 0x00, 0x52, 0x8b, 0x2a, 0x50, 0xa7, 0x40, 0x06, 0x50, 0x00, 0x24, 0xe9, - 0xa2, 0x01, 0x00, 0x4b, 0x39, 0x9c, 0xc0, 0xa7, 0x00, 0x44, 0x6b, 0x7a, - 0xb6, 0xa7, 0x00, 0xef, 0x4e, 0xa7, 0x00, 0x04, 0xcc, 0x04, 0x04, 0xf5, - 0x22, 0x02, 0x40, 0xe5, 0x90, 0x01, 0x00, 0xef, 0x86, 0x01, 0x40, 0x45, - 0x29, 0x38, 0xd3, 0x00, 0x00, 0x45, 0xcb, 0x22, 0x4e, 0x01, 0x00, 0xa3, - 0xe3, 0x01, 0xa4, 0xa8, 0x01, 0x45, 0x8d, 0x22, 0xd2, 0x00, 0x00, 0x02, - 0x0b, 0x00, 0x6e, 0x4e, 0xd6, 0x22, 0x0e, 0x02, 0x00, 0x02, 0x13, 0x01, - 0x58, 0xad, 0x38, 0x46, 0xc2, 0xdb, 0xea, 0x01, 0x80, 0x2b, 0x46, 0x27, - 0x05, 0xd8, 0x00, 0x80, 0x1e, 0x45, 0xad, 0x22, 0xd5, 0x00, 0xc0, 0x00, - 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0x4c, 0x1e, 0x00, 0x49, - 0x2f, 0x23, 0x4e, 0x1e, 0x00, 0x46, 0x04, 0x6f, 0x2c, 0x02, 0x40, 0x4a, - 0x5b, 0xa3, 0xfe, 0x01, 0x40, 0x4b, 0x59, 0x95, 0xec, 0x01, 0x40, 0x45, - 0x05, 0x6f, 0x4c, 0x01, 0x80, 0x06, 0x4b, 0xa7, 0x22, 0x9f, 0x01, 0x40, - 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0x52, 0x1e, 0x00, 0x45, - 0x8d, 0x22, 0x50, 0x1e, 0x40, 0x51, 0x5b, 0x5b, 0x4a, 0xa7, 0x00, 0x42, - 0x1f, 0x00, 0x4c, 0xa7, 0x40, 0x48, 0xfd, 0xa8, 0xce, 0x1e, 0x00, 0x42, - 0x5e, 0x01, 0xa0, 0x01, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, - 0x29, 0x38, 0xda, 0x1e, 0x00, 0x49, 0x50, 0x12, 0xe2, 0x1e, 0x00, 0x45, - 0x8d, 0x22, 0xdc, 0x1e, 0x00, 0x4a, 0xfb, 0xa8, 0xde, 0x1e, 0x00, 0x45, - 0xad, 0x22, 0xe0, 0x1e, 0x40, 0x48, 0x30, 0x23, 0xd6, 0x00, 0x80, 0x2b, - 0xaf, 0x01, 0xff, 0x02, 0xc6, 0x00, 0x11, 0x05, 0x3d, 0x01, 0x01, 0xff, - 0x45, 0x29, 0x38, 0x50, 0x01, 0x00, 0x45, 0x8d, 0x22, 0x0c, 0x02, 0x40, - 0x45, 0x5c, 0x00, 0x2e, 0x02, 0x80, 0x06, 0x45, 0xf5, 0x06, 0xcc, 0x1e, - 0x40, 0x4b, 0x59, 0x95, 0x30, 0x02, 0x40, 0x4b, 0x59, 0x95, 0x2a, 0x02, - 0x40, 0x44, 0x4d, 0x6b, 0xd1, 0x01, 0x00, 0x49, 0xa5, 0x04, 0xd4, 0x00, - 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0xd0, 0x1e, - 0x00, 0x49, 0x50, 0x12, 0xd8, 0x1e, 0x00, 0x45, 0x8d, 0x22, 0xd2, 0x1e, - 0x00, 0x4a, 0xfb, 0xa8, 0xd4, 0x1e, 0x00, 0x45, 0xad, 0x22, 0xd6, 0x1e, - 0x40, 0x06, 0x50, 0x00, 0x04, 0xea, 0xca, 0x01, 0x40, 0x45, 0x29, 0x38, - 0x43, 0x01, 0x00, 0xa3, 0x45, 0xa4, 0x2c, 0x45, 0x8d, 0x22, 0xf8, 0x01, - 0x00, 0xac, 0x12, 0x4e, 0x41, 0x42, 0xa4, 0xa7, 0x00, 0x4e, 0xf2, 0x7a, - 0xcb, 0x01, 0x00, 0x45, 0xad, 0x22, 0xd1, 0x00, 0x40, 0x48, 0x69, 0x56, - 0x9d, 0x01, 0x00, 0x49, 0xf5, 0x6b, 0x48, 0x1e, 0x00, 0x4d, 0x32, 0x85, - 0x20, 0x02, 0x40, 0x48, 0x95, 0x2a, 0x90, 0xa7, 0x00, 0x03, 0xb5, 0x0b, - 0x01, 0xff, 0x45, 0x5c, 0x00, 0x44, 0x1e, 0x00, 0x45, 0xf5, 0x06, 0x46, - 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x47, 0x01, 0x00, 0x46, 0x7c, 0xbf, 0x45, - 0x01, 0x00, 0x4f, 0x48, 0x6d, 0x4a, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x1a, - 0x05, 0x7e, 0x02, 0x01, 0xff, 0x48, 0x0a, 0xc0, 0xd6, 0xa7, 0x00, 0x07, - 0x25, 0xcb, 0x01, 0xff, 0x42, 0x0f, 0x07, 0xfa, 0x1e, 0x00, 0xf6, 0xfc, - 0x1e, 0x40, 0x45, 0x29, 0x38, 0x3e, 0x1e, 0x00, 0x04, 0xb4, 0x0b, 0x06, - 0x44, 0x5d, 0x0e, 0x6e, 0x2c, 0x40, 0x45, 0x5c, 0x00, 0x40, 0x1e, 0x00, - 0x45, 0xf5, 0x06, 0x42, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x11, 0x45, 0x33, - 0xe1, 0xda, 0xa7, 0x80, 0x04, 0xea, 0xc7, 0x01, 0x40, 0x4c, 0x39, 0x28, - 0xdc, 0xa7, 0x40, 0x45, 0x29, 0x38, 0x39, 0x01, 0x00, 0xa2, 0x56, 0xa3, - 0x42, 0x02, 0x3b, 0x01, 0x2b, 0x4b, 0xc3, 0x9a, 0x48, 0xa7, 0x00, 0x4a, - 0xf4, 0x6b, 0x3a, 0x1e, 0x00, 0x07, 0x7d, 0x02, 0x0f, 0xb3, 0x01, 0xff, - 0x4d, 0xf3, 0x7a, 0xc8, 0x01, 0x00, 0x45, 0x28, 0x05, 0x41, 0x01, 0x40, - 0x43, 0xd4, 0x09, 0x3f, 0x01, 0x00, 0x45, 0xad, 0x22, 0x62, 0x2c, 0x40, - 0x47, 0x52, 0x12, 0x36, 0x1e, 0x80, 0x06, 0x48, 0x27, 0xa7, 0x60, 0x2c, - 0x40, 0x4b, 0x59, 0x95, 0x38, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x3d, 0x01, - 0x00, 0x46, 0x7c, 0xbf, 0x3b, 0x01, 0x00, 0x4f, 0x48, 0x6d, 0x3c, 0x1e, - 0x40, 0x42, 0x17, 0x00, 0x3d, 0x02, 0x00, 0x43, 0xa1, 0xa1, 0xad, 0xa7, - 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0x30, 0x1e, 0x00, - 0xa3, 0x33, 0xa4, 0x1f, 0x44, 0x5d, 0x0e, 0x98, 0x01, 0x00, 0x4a, 0xf4, - 0x6b, 0x34, 0x1e, 0x00, 0x4e, 0x41, 0x42, 0xa2, 0xa7, 0x00, 0x46, 0x27, - 0x05, 0x40, 0xa7, 0xc0, 0x00, 0x54, 0xa3, 0x3e, 0x44, 0xa7, 0x40, 0x48, - 0x95, 0x2a, 0x69, 0x2c, 0x00, 0x4e, 0xa9, 0x3e, 0x42, 0xa7, 0x00, 0x48, - 0x51, 0x12, 0x32, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0xe8, 0x01, 0x00, 0x46, - 0x7c, 0xbf, 0x36, 0x01, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa3, 0x06, - 0x46, 0x27, 0x05, 0x48, 0x02, 0x40, 0x49, 0xa5, 0x04, 0x34, 0x01, 0x00, - 0x4b, 0x81, 0x4e, 0xb2, 0xa7, 0x40, 0x06, 0x50, 0x00, 0x26, 0x07, 0x6c, - 0x6e, 0x0a, 0x43, 0xf0, 0x04, 0x96, 0x01, 0x00, 0xf3, 0x6c, 0xa7, 0x40, - 0xe4, 0x79, 0xa7, 0x00, 0xe6, 0x7b, 0xa7, 0x00, 0xe7, 0x7d, 0xa7, 0x00, - 0xf2, 0x82, 0xa7, 0x00, 0xf3, 0x84, 0xa7, 0x00, 0xf4, 0x86, 0xa7, 0x40, - 0x45, 0x29, 0x38, 0xcd, 0x00, 0x00, 0x45, 0xcb, 0x22, 0x2c, 0x01, 0x00, - 0xa3, 0x59, 0xa4, 0x31, 0x45, 0x8d, 0x22, 0xcc, 0x00, 0x00, 0x4a, 0xfb, - 0xa8, 0xc8, 0x1e, 0x00, 0x4e, 0xd6, 0x22, 0x0a, 0x02, 0x00, 0x46, 0x04, - 0x6f, 0x2a, 0x01, 0x00, 0x46, 0xc2, 0xdb, 0x2e, 0x01, 0x00, 0x46, 0x27, - 0x05, 0x97, 0x01, 0x00, 0x45, 0xad, 0x22, 0x28, 0x01, 0xc0, 0x00, 0x46, - 0xf4, 0x06, 0x2c, 0x1e, 0x40, 0x48, 0x30, 0x23, 0xcf, 0x00, 0x80, 0x19, - 0xaf, 0x01, 0xff, 0x02, 0xc6, 0x00, 0x06, 0x4a, 0x88, 0x22, 0x08, 0x02, - 0x40, 0x45, 0x5c, 0x00, 0x30, 0x01, 0x00, 0x45, 0xf5, 0x06, 0xca, 0x1e, - 0x40, 0x4a, 0x5b, 0xa3, 0x2e, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0xcf, 0x01, - 0x00, 0x49, 0xa5, 0x04, 0xce, 0x00, 0x40, 0x06, 0x50, 0x00, 0x12, 0x45, - 0x4d, 0xd9, 0x75, 0x2c, 0x00, 0x43, 0xfd, 0x09, 0x26, 0xa7, 0x00, 0x44, - 0xd2, 0xef, 0xf6, 0x01, 0x40, 0x4b, 0xab, 0x97, 0x2a, 0x1e, 0x00, 0xa3, - 0x2b, 0xa4, 0x0c, 0x44, 0x5d, 0x0e, 0xaa, 0xa7, 0x00, 0x46, 0x27, 0x05, - 0x26, 0x01, 0x40, 0x48, 0x95, 0x2a, 0x67, 0x2c, 0x00, 0x48, 0x30, 0x23, - 0x26, 0x1e, 0x00, 0x03, 0xb5, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x22, - 0x1e, 0x00, 0x45, 0xf5, 0x06, 0x24, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x1e, - 0x02, 0x00, 0x46, 0x7c, 0xbf, 0x28, 0x1e, 0x00, 0x49, 0xa5, 0x04, 0x24, - 0x01, 0x40, 0x06, 0x50, 0x00, 0x23, 0x44, 0x5e, 0x20, 0x94, 0x01, 0x00, - 0x42, 0x22, 0x00, 0xa2, 0x01, 0x00, 0x07, 0x2e, 0x28, 0x01, 0xff, 0xe1, - 0xba, 0xa7, 0x00, 0xe9, 0xbc, 0xa7, 0x00, 0x44, 0x2a, 0x03, 0x41, 0x02, - 0x00, 0xf5, 0xbe, 0xa7, 0x40, 0x45, 0x29, 0x38, 0xf4, 0x01, 0x00, 0x45, - 0xcb, 0x22, 0x1e, 0x01, 0x00, 0xa3, 0x1e, 0x49, 0x98, 0x1d, 0x20, 0x01, - 0x00, 0x44, 0x5d, 0x0e, 0x93, 0x01, 0x00, 0x46, 0x04, 0x6f, 0x20, 0x1e, - 0x00, 0x4e, 0x41, 0x42, 0xa0, 0xa7, 0x00, 0x46, 0x27, 0x05, 0xe4, 0x01, - 0x40, 0x44, 0x4d, 0x6b, 0xe6, 0x01, 0x00, 0x46, 0x7c, 0xbf, 0x22, 0x01, - 0x00, 0x49, 0xa5, 0x04, 0x1c, 0x01, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, - 0x49, 0x98, 0x1d, 0x1e, 0x1e, 0x00, 0x44, 0x5d, 0x0e, 0x91, 0x01, 0x00, - 0x46, 0x27, 0x05, 0x98, 0xa7, 0x40, 0x06, 0x50, 0x00, 0x3b, 0x0e, 0xbc, - 0x76, 0x2b, 0x42, 0x1d, 0x01, 0x4a, 0x01, 0x00, 0x42, 0xa4, 0x02, 0xa9, - 0x01, 0x00, 0xf4, 0x6a, 0xa7, 0x80, 0x16, 0x42, 0xb3, 0x27, 0xb7, 0x01, - 0xc0, 0x00, 0x80, 0x01, 0xff, 0x48, 0x09, 0x13, 0xb8, 0x01, 0x00, 0x4a, - 0xf4, 0x95, 0xee, 0x01, 0x40, 0xe8, 0xd0, 0x00, 0x40, 0x42, 0x9e, 0x01, - 0x24, 0xa7, 0x00, 0x43, 0x68, 0x00, 0x22, 0xa7, 0x40, 0x45, 0x29, 0x38, - 0xc9, 0x00, 0x00, 0x45, 0xcb, 0x22, 0x14, 0x01, 0x00, 0xa3, 0x64, 0xa4, - 0x43, 0x45, 0x8d, 0x22, 0xc8, 0x00, 0x00, 0x4a, 0xfb, 0xa8, 0xba, 0x1e, - 0x00, 0x4e, 0xd6, 0x22, 0x06, 0x02, 0x00, 0x46, 0x04, 0x6f, 0x12, 0x01, - 0x80, 0x19, 0x46, 0xc2, 0xdb, 0x18, 0x01, 0x00, 0x46, 0x27, 0x05, 0x46, - 0x02, 0x00, 0x45, 0xad, 0x22, 0xbc, 0x1e, 0xc0, 0x00, 0x46, 0xf4, 0x06, - 0x1a, 0x1e, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0x16, - 0x1e, 0x00, 0x45, 0x8d, 0x22, 0x14, 0x1e, 0x40, 0x48, 0x30, 0x23, 0xcb, - 0x00, 0x00, 0xaf, 0x01, 0xff, 0x02, 0xc6, 0x00, 0x06, 0x4a, 0x88, 0x22, - 0x04, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x16, 0x01, 0x00, 0x45, 0xf5, 0x06, - 0xb8, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x1a, 0x01, 0x00, 0x46, 0x7c, 0xbf, - 0x28, 0x02, 0x80, 0x32, 0x49, 0xa5, 0x04, 0xca, 0x00, 0xc0, 0x00, 0x80, - 0x01, 0xff, 0x04, 0x1a, 0x00, 0x06, 0x45, 0xf5, 0x06, 0x18, 0x1e, 0x40, - 0x45, 0x29, 0x38, 0xbe, 0x1e, 0x00, 0x49, 0x50, 0x12, 0xc6, 0x1e, 0x00, - 0x45, 0x8d, 0x22, 0xc0, 0x1e, 0x00, 0x4a, 0xfb, 0xa8, 0xc2, 0x1e, 0x00, - 0x45, 0xad, 0x22, 0xc4, 0x1e, 0x40, 0x4a, 0x6f, 0xa3, 0x1c, 0x1e, 0x40, - 0x06, 0x50, 0x00, 0x0b, 0xfa, 0xf1, 0x01, 0xc0, 0x00, 0x4b, 0xf3, 0x95, - 0xc4, 0x01, 0x40, 0xa3, 0x3d, 0x04, 0xb4, 0x0b, 0x2d, 0x44, 0x5d, 0x0e, - 0x8a, 0x01, 0x00, 0x4a, 0xf4, 0x6b, 0x0e, 0x1e, 0x00, 0xb3, 0x06, 0x46, - 0x9c, 0xdd, 0x8b, 0x01, 0x40, 0x53, 0xa7, 0x48, 0xc7, 0xa7, 0x00, 0x4d, - 0xd3, 0x83, 0xf2, 0x01, 0x80, 0x06, 0x45, 0x28, 0x05, 0x10, 0x01, 0x40, - 0x4b, 0xf3, 0x95, 0xc5, 0x01, 0x40, 0x45, 0x5c, 0x00, 0x0a, 0x1e, 0x00, - 0x45, 0xf5, 0x06, 0x0c, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x0e, 0x01, 0x00, - 0x46, 0x7c, 0xbf, 0x10, 0x1e, 0x00, 0x4f, 0x48, 0x6d, 0x12, 0x1e, 0x40, - 0x06, 0x50, 0x00, 0x1f, 0x42, 0x49, 0x00, 0xb3, 0xa7, 0x00, 0x4f, 0x65, - 0x6e, 0xd0, 0xa7, 0x00, 0x42, 0x10, 0x00, 0x6e, 0xa7, 0x00, 0x48, 0x32, - 0xc9, 0x2c, 0xa7, 0xc0, 0x00, 0x4b, 0xfe, 0x95, 0x2e, 0xa7, 0x40, 0x45, - 0x29, 0x38, 0x06, 0x01, 0x00, 0x43, 0x16, 0x00, 0x92, 0xa7, 0x00, 0xa3, - 0x18, 0x49, 0x98, 0x1d, 0x0a, 0x01, 0x00, 0x44, 0x5d, 0x0e, 0x87, 0x01, - 0x00, 0x4c, 0xaa, 0x55, 0xc4, 0xa7, 0x00, 0x46, 0x27, 0x05, 0x3b, 0x02, - 0x40, 0x44, 0x4d, 0x6b, 0x0c, 0x01, 0x00, 0x46, 0x7c, 0xbf, 0xc7, 0x00, - 0x80, 0x06, 0x49, 0xa5, 0x04, 0x08, 0x01, 0x40, 0x4a, 0x5b, 0xa3, 0x08, - 0x1e, 0x40, 0x06, 0x50, 0x00, 0x0c, 0x43, 0x45, 0x0f, 0xb4, 0xa7, 0x00, - 0x47, 0x9c, 0xd2, 0x46, 0xa7, 0x40, 0x04, 0xb4, 0x0b, 0x1e, 0x48, 0xa2, - 0xc3, 0x96, 0xa7, 0x00, 0x44, 0x5d, 0x0e, 0x81, 0x01, 0x00, 0x4a, 0xf4, - 0x6b, 0x06, 0x1e, 0x00, 0x46, 0x27, 0x05, 0x43, 0x02, 0x00, 0x46, 0x9c, - 0xdd, 0x82, 0x01, 0x40, 0x45, 0x5c, 0x00, 0x02, 0x1e, 0x00, 0x45, 0xf5, - 0x06, 0x04, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x43, 0xe1, 0x32, 0xa7, 0x00, - 0xe5, 0xc6, 0x00, 0x80, 0x29, 0x48, 0xba, 0xc3, 0x89, 0x01, 0x00, 0x44, - 0x2f, 0xe1, 0x6d, 0x2c, 0x00, 0x4a, 0x07, 0xac, 0xc2, 0xa7, 0x00, 0xef, + 0x40, 0x44, 0xc9, 0x1d, 0x57, 0x1c, 0x00, 0x42, 0x01, 0x26, 0x56, 0x1c, + 0x40, 0x43, 0xd2, 0x05, 0x55, 0x1c, 0x00, 0x43, 0xf6, 0x06, 0x54, 0x1c, + 0x40, 0x04, 0x95, 0x83, 0x06, 0x44, 0xbc, 0xde, 0xdb, 0x02, 0x40, 0x4c, + 0xc4, 0x3d, 0x9b, 0x16, 0x00, 0x07, 0xec, 0x05, 0x0c, 0x55, 0xbb, 0x3d, + 0x9c, 0x16, 0x00, 0x4a, 0x27, 0xb1, 0x80, 0x16, 0x40, 0x44, 0xe9, 0xee, + 0x90, 0x16, 0x00, 0x45, 0xb6, 0xe4, 0x81, 0x16, 0x00, 0xa3, 0x8f, 0x01, + 0x44, 0x79, 0xef, 0x87, 0x16, 0x00, 0x02, 0x89, 0x00, 0x73, 0x45, 0x5f, + 0xe6, 0x83, 0x16, 0x00, 0x44, 0x0d, 0xf0, 0x8c, 0x16, 0x00, 0xa9, 0x59, + 0x44, 0x19, 0xf1, 0x82, 0x16, 0x00, 0x44, 0x49, 0xf1, 0x8b, 0x16, 0x00, + 0xae, 0x3f, 0xaf, 0x33, 0x45, 0xcf, 0xe9, 0x9a, 0x16, 0x00, 0x44, 0x75, + 0xf2, 0x8f, 0x16, 0x00, 0xb3, 0x19, 0x45, 0x46, 0xeb, 0x88, 0x16, 0x00, + 0xb5, 0x01, 0xff, 0x43, 0x74, 0x0f, 0x86, 0x16, 0x00, 0x47, 0xef, 0xd1, + 0x97, 0x16, 0x00, 0xf2, 0x92, 0x16, 0x40, 0x43, 0x90, 0x17, 0x84, 0x16, + 0x00, 0x45, 0x78, 0xeb, 0x8e, 0x16, 0x40, 0x42, 0x4e, 0x1f, 0x91, 0x16, + 0x00, 0xf2, 0x96, 0x16, 0x40, 0x46, 0xea, 0xdb, 0x8d, 0x16, 0x00, 0x43, + 0xb5, 0x00, 0x85, 0x16, 0x40, 0x43, 0xd8, 0x09, 0x98, 0x16, 0x00, 0x46, + 0xae, 0xde, 0x94, 0x16, 0x40, 0x45, 0xc0, 0xe4, 0x95, 0x16, 0x00, 0x45, + 0xaf, 0xde, 0x93, 0x16, 0x00, 0x49, 0x09, 0xbc, 0x99, 0x16, 0x40, 0x44, + 0xa5, 0xef, 0x8a, 0x16, 0x00, 0x43, 0xe6, 0x20, 0x89, 0x16, 0x40, 0x47, + 0x15, 0x08, 0xbb, 0xce, 0x41, 0x49, 0x92, 0xb7, 0x75, 0xf7, 0x01, 0x02, + 0x18, 0x00, 0x0f, 0xb4, 0x01, 0xff, 0x4b, 0xf5, 0x98, 0xd1, 0xf6, 0x01, + 0x44, 0xe1, 0xf1, 0x19, 0xf4, 0x41, 0x4f, 0xc8, 0x6a, 0x47, 0x24, 0x00, + 0xa2, 0x2e, 0xa3, 0x20, 0xa4, 0x12, 0x44, 0xbb, 0x51, 0x42, 0x24, 0x00, + 0x44, 0xac, 0x0e, 0x40, 0x24, 0x00, 0x4d, 0x4b, 0x84, 0x43, 0x24, 0x40, + 0x43, 0xf9, 0x03, 0x48, 0x24, 0x00, 0x4f, 0x85, 0x71, 0x4a, 0x24, 0x40, + 0x44, 0x1a, 0x6f, 0x41, 0x24, 0x00, 0x56, 0xf7, 0x37, 0x49, 0x24, 0x40, + 0x4a, 0xe3, 0xa9, 0x44, 0x24, 0x00, 0x46, 0xf6, 0xde, 0x45, 0x24, 0x00, + 0x59, 0xab, 0x25, 0x46, 0x24, 0x40, 0x5a, 0x80, 0x20, 0xfc, 0xff, 0x00, + 0x06, 0x50, 0x43, 0x06, 0x51, 0xd6, 0x5d, 0xff, 0x23, 0x40, 0x0e, 0xfb, + 0x75, 0x06, 0x46, 0x96, 0x63, 0x5d, 0x2e, 0x40, 0x44, 0xa5, 0x01, 0xa7, + 0x29, 0x00, 0x42, 0x50, 0x02, 0xa6, 0x29, 0x40, 0x05, 0x69, 0x70, 0xda, + 0x24, 0xa1, 0x87, 0x1d, 0xa5, 0xa2, 0x0d, 0xa9, 0x8a, 0x0d, 0x03, 0x6b, + 0xd7, 0xed, 0x09, 0xaf, 0xc0, 0x04, 0x4d, 0x7e, 0x87, 0x10, 0xcc, 0x01, + 0xb5, 0xb6, 0x03, 0x16, 0x65, 0x38, 0x01, 0xff, 0x4a, 0xad, 0xa8, 0x4f, + 0xe1, 0x01, 0x06, 0xef, 0x06, 0xe4, 0x02, 0xac, 0x55, 0xb3, 0x21, 0x05, + 0xeb, 0x31, 0x01, 0xff, 0xe2, 0x30, 0xe1, 0x01, 0xe4, 0x36, 0xe1, 0x01, + 0xe7, 0x35, 0xe1, 0x01, 0xea, 0x32, 0xe1, 0x01, 0xed, 0x31, 0xe1, 0x01, + 0xf3, 0x34, 0xe1, 0x01, 0xf6, 0x33, 0xe1, 0x41, 0x04, 0x5b, 0x03, 0x06, + 0x52, 0xcb, 0x56, 0x3d, 0xe1, 0x41, 0x04, 0x42, 0x1b, 0x06, 0x45, 0x7c, + 0xec, 0x3c, 0xe1, 0x41, 0x46, 0xbc, 0xd9, 0x3a, 0xe1, 0x01, 0x4c, 0x57, + 0x90, 0x3b, 0xe1, 0x01, 0x48, 0x28, 0x85, 0x39, 0xe1, 0x01, 0x46, 0x1e, + 0x1d, 0x37, 0xe1, 0x01, 0x45, 0x3c, 0xeb, 0x38, 0xe1, 0x41, 0x06, 0xed, + 0x05, 0x06, 0x4c, 0xeb, 0x92, 0x4e, 0xe1, 0x41, 0xe1, 0x24, 0xe1, 0x81, + 0xf9, 0x01, 0x42, 0x37, 0x00, 0x08, 0xe1, 0x01, 0xa4, 0xe6, 0x01, 0xe5, + 0x2a, 0xe1, 0x81, 0xdc, 0x01, 0x42, 0x0c, 0x08, 0x15, 0xe1, 0x01, 0x42, + 0x24, 0x02, 0x22, 0xe1, 0x01, 0x42, 0x22, 0x00, 0x04, 0xe1, 0x81, 0xc4, + 0x01, 0xe9, 0x26, 0xe1, 0x01, 0x42, 0x1b, 0x02, 0x0e, 0xe1, 0x01, 0x42, + 0x74, 0x00, 0x09, 0xe1, 0x01, 0xad, 0xa7, 0x01, 0xae, 0x65, 0xef, 0x28, + 0xe1, 0x81, 0x5c, 0xb0, 0x50, 0x42, 0x43, 0x14, 0x17, 0xe1, 0x01, 0xb2, + 0x3e, 0x42, 0x40, 0x06, 0x0a, 0xe1, 0x01, 0xb4, 0x26, 0xf5, 0x27, 0xe1, + 0x01, 0x42, 0xf5, 0x0a, 0x12, 0xe1, 0x01, 0xf7, 0x2c, 0xe1, 0x01, 0xb8, + 0x0c, 0x42, 0xbc, 0x22, 0x18, 0xe1, 0x01, 0x42, 0x59, 0x00, 0x0b, 0xe1, + 0x41, 0xe1, 0x06, 0xe1, 0x01, 0x42, 0xbc, 0x22, 0x1b, 0xe1, 0x41, 0xe1, + 0x03, 0xe1, 0x01, 0x42, 0x40, 0x06, 0x01, 0xe1, 0x01, 0x42, 0xed, 0x26, + 0x14, 0xe1, 0x41, 0xe1, 0x16, 0xe1, 0x01, 0x42, 0x71, 0x00, 0x23, 0xe1, + 0x41, 0xe1, 0x1a, 0xe1, 0x01, 0x42, 0x74, 0x00, 0x21, 0xe1, 0x41, 0xef, + 0x29, 0xe1, 0x41, 0xe1, 0x05, 0xe1, 0x01, 0x42, 0x37, 0x00, 0x0c, 0xe1, + 0x01, 0x42, 0x1b, 0x02, 0x07, 0xe1, 0x01, 0xb0, 0x24, 0x42, 0x43, 0x14, + 0x19, 0xe1, 0x01, 0x42, 0x71, 0x00, 0x11, 0xe1, 0x01, 0xb4, 0x06, 0x42, + 0xbc, 0x22, 0x10, 0xe1, 0x41, 0xe1, 0x02, 0xe1, 0x01, 0x42, 0x40, 0x06, + 0x0d, 0xe1, 0x01, 0x42, 0xed, 0x26, 0x13, 0xe1, 0x41, 0xe1, 0x1c, 0xe1, + 0x01, 0x42, 0x74, 0x00, 0x1e, 0xe1, 0x41, 0xe1, 0x00, 0xe1, 0x01, 0x42, + 0x74, 0x00, 0x20, 0xe1, 0x41, 0xe8, 0x1f, 0xe1, 0x41, 0xe5, 0x2b, 0xe1, + 0x41, 0xe1, 0x0f, 0xe1, 0x01, 0x42, 0x74, 0x00, 0x1d, 0xe1, 0x41, 0xe1, + 0x25, 0xe1, 0x41, 0x45, 0x12, 0x0b, 0x48, 0xe1, 0x01, 0xa6, 0x2e, 0x44, + 0xcf, 0x2a, 0x49, 0xe1, 0x01, 0x43, 0x0e, 0x0b, 0x41, 0xe1, 0x01, 0xb3, + 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x40, 0xe1, 0x41, 0x44, 0x25, 0x01, + 0x43, 0xe1, 0x01, 0x42, 0x15, 0x02, 0x42, 0xe1, 0x41, 0x44, 0xc9, 0x1d, + 0x47, 0xe1, 0x01, 0x42, 0x01, 0x26, 0x46, 0xe1, 0x41, 0x43, 0xd2, 0x05, + 0x45, 0xe1, 0x01, 0x43, 0xf6, 0x06, 0x44, 0xe1, 0x41, 0x42, 0x60, 0x07, + 0x00, 0x00, 0x00, 0xad, 0x16, 0x04, 0x78, 0x4f, 0x06, 0x4a, 0x8b, 0xb1, + 0x29, 0xf5, 0x41, 0x4a, 0x99, 0xa8, 0x05, 0xd8, 0x00, 0x4e, 0x58, 0x20, + 0xe1, 0x6f, 0x41, 0x04, 0xb7, 0x05, 0x06, 0x48, 0xd7, 0xc1, 0x16, 0x21, + 0x40, 0xa5, 0x4b, 0xa6, 0x3d, 0x52, 0xc5, 0x53, 0x9a, 0x24, 0x00, 0xb3, + 0x20, 0xb4, 0x01, 0xff, 0x4c, 0x8b, 0x51, 0x91, 0x24, 0x00, 0x51, 0x95, + 0x5a, 0x94, 0x24, 0x00, 0x02, 0x15, 0x01, 0x01, 0xff, 0x4d, 0x5c, 0x85, + 0x93, 0x24, 0x00, 0x4d, 0x87, 0x86, 0x9b, 0x24, 0x40, 0x52, 0x85, 0x51, + 0x98, 0x24, 0x00, 0xa9, 0x01, 0xff, 0x42, 0x5c, 0x03, 0x23, 0x00, 0x00, + 0x4f, 0xfa, 0x74, 0x97, 0x24, 0x40, 0x50, 0xb6, 0x63, 0x96, 0x24, 0x00, + 0x51, 0x0a, 0x5d, 0x95, 0x24, 0x40, 0x51, 0xfb, 0x5a, 0x99, 0x24, 0x00, + 0x4f, 0xb4, 0x6f, 0x92, 0x24, 0x40, 0x80, 0xec, 0x04, 0x4c, 0xc9, 0x4c, + 0xa0, 0x00, 0x00, 0x02, 0x7d, 0x02, 0xd5, 0x04, 0xae, 0xbe, 0x04, 0xf2, + 0xbd, 0x22, 0x80, 0xd8, 0x01, 0x42, 0x46, 0x03, 0x43, 0xf4, 0x81, 0xca, + 0x01, 0xb4, 0x01, 0xff, 0x80, 0x3e, 0x05, 0xca, 0x92, 0x20, 0xe5, 0xc8, + 0xf5, 0xc1, 0x00, 0x03, 0xee, 0x0e, 0x0d, 0x44, 0x45, 0xef, 0xd3, 0xf4, + 0xc1, 0x00, 0x56, 0x77, 0x32, 0xd4, 0xf4, 0x41, 0xe4, 0xca, 0xf5, 0x01, + 0x42, 0xdb, 0x09, 0xc9, 0xf5, 0x41, 0xac, 0x0c, 0x60, 0x14, 0x10, 0x44, + 0xf5, 0x01, 0x6b, 0x98, 0x02, 0xb1, 0x27, 0x40, 0x5e, 0xf9, 0x12, 0x43, + 0xf5, 0x01, 0x6a, 0xc0, 0x03, 0xaf, 0x27, 0x40, 0xa1, 0x63, 0x4a, 0xa3, + 0xa8, 0x7b, 0x23, 0x00, 0x03, 0x7b, 0x00, 0x4d, 0x4c, 0x87, 0x00, 0x6f, + 0x22, 0x00, 0x4c, 0xd3, 0x8f, 0x62, 0x22, 0x00, 0x49, 0xec, 0x00, 0x6e, + 0x22, 0x00, 0x52, 0xe9, 0x53, 0xea, 0x22, 0x80, 0x2e, 0x4b, 0xdb, 0x6a, + 0x26, 0x22, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x36, 0x23, 0x41, + 0x22, 0x00, 0x43, 0x70, 0x3b, 0xad, 0x22, 0x40, 0x43, 0x5b, 0x03, 0xac, + 0x00, 0x00, 0x06, 0xbc, 0x24, 0x01, 0xff, 0x54, 0x20, 0x43, 0xe2, 0x22, + 0x00, 0x57, 0xdf, 0x2f, 0xe3, 0x22, 0x40, 0x4c, 0xf2, 0x28, 0xec, 0x22, + 0x40, 0x45, 0xfb, 0x0c, 0x60, 0x22, 0x00, 0x4a, 0xd6, 0x39, 0x6d, 0x22, + 0x40, 0x03, 0x6e, 0x06, 0x12, 0x4e, 0xab, 0x6a, 0x49, 0x22, 0x00, 0x4c, + 0x4f, 0x92, 0x09, 0x22, 0x00, 0x56, 0x5d, 0x37, 0x44, 0x22, 0x40, 0x47, + 0xdc, 0x40, 0x84, 0x22, 0x00, 0x49, 0x29, 0x36, 0x85, 0x22, 0x40, 0x47, + 0x15, 0x08, 0xfc, 0xcc, 0x41, 0x4d, 0xf5, 0x81, 0xbb, 0x20, 0x00, 0x4f, + 0xec, 0x53, 0xb2, 0x22, 0x80, 0xcc, 0x02, 0x02, 0x53, 0x00, 0x01, 0xff, + 0x80, 0x06, 0x56, 0x03, 0x34, 0xea, 0xf6, 0x41, 0x05, 0xad, 0x23, 0xcb, + 0x01, 0x06, 0xe9, 0x06, 0x7a, 0x05, 0xbe, 0x1a, 0x01, 0xff, 0xa1, 0x3b, + 0x4b, 0xa5, 0x99, 0x09, 0x2b, 0x00, 0x4c, 0x2f, 0x8e, 0xd6, 0x21, 0x00, + 0x09, 0x9c, 0x01, 0x19, 0x50, 0xe6, 0x66, 0x54, 0xf8, 0x01, 0x55, 0x01, + 0x02, 0x66, 0x2b, 0x80, 0x06, 0x4b, 0x49, 0x10, 0x01, 0x2b, 0x40, 0x47, + 0xd0, 0x14, 0x76, 0x2b, 0x40, 0x43, 0x7a, 0xd0, 0x60, 0xf6, 0x01, 0x44, + 0x39, 0x51, 0x50, 0xf6, 0x01, 0x49, 0x10, 0xc1, 0x58, 0xf6, 0x41, 0x53, + 0x79, 0x40, 0x21, 0x29, 0x00, 0x44, 0xcf, 0x00, 0x96, 0x21, 0xc0, 0x00, + 0x80, 0x01, 0xff, 0x54, 0x50, 0x40, 0x27, 0x29, 0x00, 0x59, 0x9e, 0x23, + 0x32, 0x29, 0x00, 0x48, 0x57, 0xb4, 0xb8, 0xf8, 0x01, 0x03, 0x7a, 0x02, + 0x06, 0x49, 0xa8, 0x24, 0x23, 0x29, 0x40, 0x46, 0x27, 0x19, 0xf1, 0x21, + 0x00, 0x48, 0xe0, 0xc7, 0xb8, 0x21, 0x40, 0x09, 0x1e, 0x5a, 0x1c, 0x50, + 0xc6, 0x65, 0x37, 0xa8, 0x00, 0x03, 0x7c, 0x00, 0x06, 0x4a, 0xb9, 0xb0, + 0x38, 0xa8, 0x40, 0x4a, 0x75, 0xae, 0x39, 0xa8, 0x00, 0x49, 0xf4, 0xbe, + 0x36, 0xa8, 0x40, 0x04, 0x0e, 0x0b, 0x11, 0x06, 0x24, 0x01, 0x01, 0xff, + 0x48, 0x2a, 0x01, 0x32, 0xa8, 0x00, 0x4a, 0x13, 0xb1, 0x35, 0xa8, 0x40, + 0x46, 0x12, 0x0b, 0x34, 0xa8, 0x00, 0x44, 0x22, 0x00, 0x31, 0xa8, 0x00, + 0x47, 0x2a, 0x01, 0x30, 0xa8, 0x00, 0x49, 0x00, 0x26, 0x33, 0xa8, 0x40, + 0xa1, 0x3b, 0x4b, 0xa5, 0x99, 0x08, 0x2b, 0x00, 0x4c, 0x2f, 0x8e, 0xd7, + 0x21, 0x00, 0x09, 0x9c, 0x01, 0x19, 0x50, 0xe6, 0x66, 0x55, 0xf8, 0x01, + 0x55, 0x01, 0x02, 0x67, 0x2b, 0x80, 0x06, 0x4b, 0x49, 0x10, 0x00, 0x2b, + 0x40, 0x47, 0xd0, 0x14, 0x77, 0x2b, 0x40, 0x43, 0x7a, 0xd0, 0x62, 0xf6, + 0x01, 0x44, 0x39, 0x51, 0x52, 0xf6, 0x01, 0x49, 0x10, 0xc1, 0x5a, 0xf6, + 0x41, 0x53, 0x8d, 0x40, 0x22, 0x29, 0x00, 0x44, 0xcf, 0x00, 0x97, 0x21, + 0xc0, 0x00, 0x80, 0x01, 0xff, 0x54, 0x78, 0x40, 0x28, 0x29, 0x00, 0x09, + 0x95, 0x10, 0x0c, 0x48, 0x57, 0xb4, 0xb9, 0xf8, 0x01, 0x49, 0xa8, 0x24, + 0x24, 0x29, 0x40, 0x50, 0x68, 0x40, 0x31, 0x29, 0x00, 0x50, 0x7c, 0x40, + 0x2e, 0x29, 0x40, 0x4c, 0xf2, 0x28, 0xb4, 0x22, 0x40, 0x8d, 0x06, 0x47, + 0x32, 0xd1, 0xdd, 0x2a, 0x40, 0x4f, 0x7c, 0x6b, 0x11, 0x20, 0x00, 0x54, + 0x14, 0x45, 0xb1, 0xf6, 0x41, 0x50, 0x36, 0x65, 0x6f, 0x20, 0x00, 0x48, + 0x08, 0xcb, 0x8e, 0x01, 0x41, 0xa2, 0x2d, 0x45, 0xe4, 0x5a, 0xd4, 0x26, + 0x80, 0x20, 0x4d, 0x1f, 0x86, 0xf5, 0xf4, 0x01, 0x59, 0x47, 0x25, 0x1e, + 0xf5, 0x01, 0xb0, 0x06, 0x4e, 0x61, 0x7c, 0xad, 0xf6, 0x41, 0x4a, 0xb1, + 0xa9, 0xb7, 0xf6, 0x01, 0x45, 0x90, 0xe7, 0x72, 0xf5, 0x41, 0x45, 0x59, + 0x03, 0xab, 0xf6, 0x41, 0x47, 0xda, 0xd1, 0xb3, 0xf6, 0x01, 0x49, 0x88, + 0xbe, 0x83, 0x00, 0x40, 0x03, 0x13, 0x05, 0xca, 0x02, 0xa4, 0xf5, 0x01, + 0x50, 0xad, 0x00, 0xf9, 0x07, 0x00, 0x54, 0xe4, 0x42, 0xf4, 0x07, 0x00, + 0xac, 0x16, 0x07, 0x5f, 0x16, 0x06, 0x4a, 0x9f, 0xb1, 0xff, 0x07, 0x40, + 0x4a, 0xb5, 0xaa, 0xf7, 0x07, 0x00, 0x49, 0x4d, 0xbd, 0xf6, 0x07, 0x40, + 0x49, 0xd9, 0xb5, 0xfa, 0x07, 0x00, 0x06, 0xed, 0x05, 0x06, 0x52, 0x67, + 0x54, 0xf5, 0x07, 0x40, 0xe1, 0xca, 0x07, 0x00, 0x42, 0x16, 0x00, 0xd3, + 0x07, 0x00, 0x43, 0x91, 0x20, 0xd7, 0x07, 0x00, 0x42, 0xf0, 0x10, 0xd8, + 0x07, 0x80, 0xa3, 0x01, 0xe5, 0xcd, 0x07, 0x80, 0x99, 0x01, 0x42, 0x0c, + 0x08, 0xdd, 0x07, 0x00, 0x43, 0xb5, 0xaa, 0xdc, 0x07, 0x00, 0x42, 0x22, + 0x00, 0xe4, 0x07, 0x00, 0xe9, 0xcc, 0x07, 0x00, 0xaa, 0x66, 0x42, 0x1b, + 0x02, 0xde, 0x07, 0x00, 0x42, 0x74, 0x00, 0xdf, 0x07, 0x00, 0x42, 0x6c, + 0x00, 0xe1, 0x07, 0x00, 0xee, 0xd2, 0x07, 0x80, 0x37, 0xef, 0xd0, 0x07, + 0x80, 0x2e, 0x42, 0xbb, 0x09, 0xd4, 0x07, 0x00, 0xb2, 0x1c, 0x42, 0x40, + 0x06, 0xdb, 0x07, 0x00, 0x42, 0x12, 0x00, 0xd5, 0x07, 0x00, 0xf5, 0xce, + 0x07, 0x00, 0x42, 0xa9, 0x01, 0xe5, 0x07, 0x00, 0x42, 0xbc, 0x22, 0xe6, + 0x07, 0x40, 0xe1, 0xd9, 0x07, 0x00, 0x42, 0x71, 0x00, 0xda, 0x07, 0x40, + 0xef, 0xcf, 0x07, 0x40, 0xe1, 0xe3, 0x07, 0x80, 0x0d, 0x42, 0xbc, 0x22, + 0xe2, 0x07, 0xc0, 0x00, 0x47, 0xb2, 0xcd, 0xe7, 0x07, 0x40, 0x47, 0xb2, + 0xcd, 0xe0, 0x07, 0x40, 0xe1, 0xd6, 0x07, 0x00, 0x04, 0xcd, 0xf1, 0x01, + 0xff, 0x43, 0x91, 0x20, 0xe9, 0x07, 0x00, 0x42, 0x56, 0x19, 0xe8, 0x07, + 0x00, 0x42, 0x71, 0x00, 0xea, 0x07, 0x40, 0xe5, 0xcb, 0x07, 0x40, 0x48, + 0x58, 0xc6, 0xd1, 0x07, 0x40, 0x49, 0x2a, 0xb6, 0xfd, 0x07, 0x00, 0x05, + 0xf0, 0x06, 0x06, 0x4a, 0x01, 0xaf, 0xfe, 0x07, 0x40, 0x45, 0x12, 0x0b, + 0xc8, 0x07, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xc9, 0x07, 0x00, 0x43, + 0x0e, 0x0b, 0xc1, 0x07, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, + 0xc0, 0x07, 0x40, 0x44, 0x25, 0x01, 0xc3, 0x07, 0x00, 0x42, 0x15, 0x02, + 0xc2, 0x07, 0x40, 0x44, 0xc9, 0x1d, 0xc7, 0x07, 0x00, 0x42, 0x01, 0x26, + 0xc6, 0x07, 0x40, 0x43, 0xd2, 0x05, 0xc5, 0x07, 0x00, 0x43, 0xf6, 0x06, + 0xc4, 0x07, 0x40, 0x07, 0x35, 0x16, 0x06, 0x42, 0x6c, 0x00, 0xf8, 0x07, + 0x40, 0x50, 0x16, 0x62, 0xf3, 0x07, 0x00, 0x05, 0xd7, 0x02, 0x1d, 0x51, + 0x60, 0x5c, 0xf2, 0x07, 0x00, 0x06, 0x33, 0x07, 0x01, 0xff, 0x49, 0xe4, + 0x42, 0xeb, 0x07, 0x00, 0x48, 0x1d, 0xb5, 0xec, 0x07, 0x00, 0x4b, 0xc6, + 0x66, 0xed, 0x07, 0x40, 0x4f, 0xf4, 0x6b, 0xee, 0x07, 0x00, 0x49, 0xe4, + 0x42, 0xef, 0x07, 0x00, 0x48, 0x1d, 0xb5, 0xf0, 0x07, 0x00, 0x4b, 0xc6, + 0x66, 0xf1, 0x07, 0x40, 0x4e, 0x0f, 0x78, 0x03, 0xf3, 0x01, 0xae, 0x01, + 0xff, 0x54, 0xf4, 0x41, 0xd9, 0xf7, 0x01, 0x42, 0x56, 0x19, 0x77, 0xf9, + 0x41, 0x45, 0x4c, 0xe5, 0x54, 0xf4, 0x01, 0x03, 0xcf, 0x05, 0xa9, 0x0c, + 0x06, 0x2e, 0xdd, 0xd7, 0x0b, 0x45, 0x15, 0xea, 0x46, 0x26, 0x80, 0xc9, + 0x0b, 0x47, 0x37, 0xd5, 0x13, 0xf9, 0x01, 0xb3, 0xab, 0x0b, 0x02, 0x29, + 0x08, 0xa5, 0x09, 0xb7, 0x11, 0x03, 0xbf, 0x62, 0x01, 0xff, 0x44, 0xed, + 0x07, 0x85, 0x00, 0x00, 0x44, 0x79, 0xa6, 0x98, 0x23, 0x40, 0x80, 0xfa, + 0x04, 0x02, 0x5a, 0x00, 0x16, 0x05, 0xed, 0x07, 0x06, 0x46, 0xab, 0x76, + 0xf0, 0xf4, 0x41, 0x44, 0xc3, 0x00, 0x92, 0x2b, 0x00, 0x45, 0xc8, 0x00, + 0x93, 0x2b, 0x40, 0x51, 0xdc, 0x57, 0x4f, 0x14, 0x01, 0x45, 0x13, 0x05, + 0x4d, 0x14, 0x01, 0xa4, 0xf4, 0x03, 0x4a, 0x39, 0x9c, 0x4e, 0x14, 0x01, + 0x4e, 0x9b, 0x78, 0x5d, 0x14, 0x01, 0x07, 0xec, 0x05, 0xa3, 0x01, 0x42, + 0x14, 0x05, 0x49, 0x14, 0x01, 0x50, 0xc6, 0x65, 0x5b, 0x14, 0x01, 0xb3, + 0x44, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x31, 0xe5, 0x3e, 0x14, 0x01, + 0xe9, 0x36, 0x14, 0x81, 0x24, 0xef, 0x40, 0x14, 0x01, 0xf5, 0x38, 0x14, + 0x81, 0x17, 0x08, 0x22, 0xc1, 0x01, 0xff, 0xec, 0x3c, 0x14, 0x81, 0x09, + 0xf2, 0x3a, 0x14, 0xc1, 0x00, 0xf2, 0x3b, 0x14, 0x41, 0xec, 0x3d, 0x14, + 0x41, 0xf5, 0x39, 0x14, 0x41, 0xe9, 0x37, 0x14, 0x41, 0xe1, 0x35, 0x14, + 0x01, 0xe9, 0x3f, 0x14, 0x01, 0xf5, 0x41, 0x14, 0x41, 0x4a, 0xbd, 0xa7, + 0x5e, 0x14, 0x01, 0xa9, 0x01, 0xff, 0x44, 0x81, 0xef, 0x4a, 0x14, 0x01, + 0x03, 0x5c, 0x03, 0x01, 0xff, 0xa1, 0x2f, 0x4b, 0xd7, 0x23, 0x43, 0x14, + 0x01, 0x4e, 0xe5, 0x77, 0x48, 0x14, 0x01, 0x4b, 0xe6, 0x9d, 0x60, 0x14, + 0x01, 0x45, 0x3f, 0x3f, 0x46, 0x14, 0x01, 0x4b, 0x6e, 0xa4, 0x61, 0x14, + 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0xe5, 0x23, 0x42, 0x14, 0x01, + 0x45, 0xec, 0x4b, 0x45, 0x14, 0x41, 0x47, 0x3d, 0x16, 0x44, 0x14, 0x01, + 0x47, 0xaf, 0x88, 0x47, 0x14, 0x41, 0xe1, 0x00, 0x14, 0x81, 0xae, 0x02, + 0xa2, 0xa1, 0x02, 0xa3, 0x94, 0x02, 0xa4, 0xfb, 0x01, 0xe5, 0x0a, 0x14, + 0x01, 0xa7, 0xea, 0x01, 0x42, 0x22, 0x00, 0x34, 0x14, 0x01, 0xe9, 0x02, + 0x14, 0x81, 0xda, 0x01, 0xaa, 0xcd, 0x01, 0xab, 0xc0, 0x01, 0xac, 0xb3, + 0x01, 0xad, 0xa6, 0x01, 0xae, 0x7b, 0xef, 0x0c, 0x14, 0x01, 0xb0, 0x6b, + 0xb2, 0x5f, 0xb3, 0x4d, 0xb4, 0x34, 0xf5, 0x04, 0x14, 0x81, 0x2b, 0xb6, + 0x0c, 0x42, 0xa9, 0x01, 0x30, 0x14, 0x01, 0x42, 0xbc, 0x22, 0x2b, 0x14, + 0x41, 0x4d, 0x6a, 0x82, 0x5f, 0x14, 0x01, 0x07, 0x23, 0xc1, 0x01, 0xff, + 0xec, 0x08, 0x14, 0x81, 0x09, 0xf2, 0x06, 0x14, 0xc1, 0x00, 0xf2, 0x07, + 0x14, 0x41, 0xec, 0x09, 0x14, 0x41, 0xf5, 0x05, 0x14, 0x41, 0xe1, 0x1f, + 0x14, 0x01, 0x42, 0x22, 0x00, 0x20, 0x14, 0x01, 0xb4, 0x01, 0xff, 0xe1, + 0x1a, 0x14, 0x01, 0x42, 0x22, 0x00, 0x1b, 0x14, 0x41, 0xe1, 0x33, 0x14, + 0x01, 0x42, 0x22, 0x00, 0x31, 0x14, 0x01, 0x42, 0x40, 0x06, 0x32, 0x14, + 0x41, 0xe1, 0x2c, 0x14, 0x01, 0x42, 0x22, 0x00, 0x2d, 0x14, 0x41, 0xe1, + 0x25, 0x14, 0x01, 0x42, 0x22, 0x00, 0x26, 0x14, 0x41, 0xe1, 0x23, 0x14, + 0x01, 0xa7, 0x19, 0x42, 0x22, 0x00, 0x24, 0x14, 0x01, 0x42, 0x2a, 0x05, + 0x1e, 0x14, 0x01, 0xb9, 0x01, 0xff, 0xe1, 0x18, 0x14, 0x01, 0x42, 0x22, + 0x00, 0x19, 0x14, 0x41, 0xe1, 0x12, 0x14, 0x01, 0x42, 0x22, 0x00, 0x13, + 0x14, 0x41, 0xe1, 0x29, 0x14, 0x01, 0x42, 0x22, 0x00, 0x2a, 0x14, 0x41, + 0xe1, 0x2e, 0x14, 0x01, 0x42, 0x22, 0x00, 0x2f, 0x14, 0x41, 0xe1, 0x0e, + 0x14, 0x01, 0x42, 0x22, 0x00, 0x0f, 0x14, 0x41, 0xe1, 0x16, 0x14, 0x01, + 0x42, 0x22, 0x00, 0x17, 0x14, 0x41, 0xe9, 0x03, 0x14, 0x41, 0xe1, 0x10, + 0x14, 0x01, 0x42, 0x22, 0x00, 0x11, 0x14, 0x41, 0xe1, 0x21, 0x14, 0x01, + 0xa4, 0x06, 0x42, 0x22, 0x00, 0x22, 0x14, 0x41, 0xe1, 0x1c, 0x14, 0x01, + 0x42, 0x22, 0x00, 0x1d, 0x14, 0x41, 0xe1, 0x14, 0x14, 0x01, 0x42, 0x22, + 0x00, 0x15, 0x14, 0x41, 0xe1, 0x27, 0x14, 0x01, 0x42, 0x22, 0x00, 0x28, + 0x14, 0x41, 0xe1, 0x01, 0x14, 0x01, 0xe9, 0x0b, 0x14, 0x01, 0xf5, 0x0d, + 0x14, 0x41, 0x44, 0x73, 0x20, 0x4b, 0x14, 0x01, 0x05, 0xf0, 0x06, 0x11, + 0x06, 0x3c, 0x01, 0x01, 0xff, 0x45, 0x13, 0x05, 0x5a, 0x14, 0x01, 0x45, + 0x16, 0x96, 0x4c, 0x14, 0x41, 0x45, 0x12, 0x0b, 0x58, 0x14, 0x01, 0xa6, + 0x2e, 0x44, 0xcf, 0x2a, 0x59, 0x14, 0x01, 0x43, 0x0e, 0x0b, 0x51, 0x14, + 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x50, 0x14, 0x41, 0x44, + 0x25, 0x01, 0x53, 0x14, 0x01, 0x42, 0x15, 0x02, 0x52, 0x14, 0x41, 0x44, + 0xc9, 0x1d, 0x57, 0x14, 0x01, 0x42, 0x01, 0x26, 0x56, 0x14, 0x41, 0x43, + 0xd2, 0x05, 0x55, 0x14, 0x01, 0x43, 0xf6, 0x06, 0x54, 0x14, 0x41, 0x44, + 0xed, 0x07, 0x0a, 0x00, 0x00, 0x05, 0xaf, 0x1b, 0xfe, 0x03, 0x4b, 0x95, + 0xa2, 0xaa, 0x20, 0x00, 0x08, 0x58, 0xcb, 0x01, 0xff, 0x06, 0xef, 0x06, + 0xac, 0x03, 0x07, 0xec, 0x05, 0x74, 0x48, 0xf0, 0xca, 0xde, 0x19, 0x80, + 0x69, 0xb4, 0x54, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x3c, 0xe5, 0xb5, + 0x19, 0x00, 0xa9, 0x2e, 0xef, 0xb7, 0x19, 0x80, 0x1c, 0xf5, 0xb3, 0x19, + 0x80, 0x06, 0x4f, 0xa0, 0x74, 0xb0, 0x19, 0x40, 0xe5, 0xb9, 0x19, 0x80, + 0x08, 0xf5, 0xb4, 0x19, 0x00, 0xf9, 0xbc, 0x19, 0x40, 0xf9, 0xbf, 0x19, + 0x40, 0xe1, 0xb8, 0x19, 0x80, 0x04, 0xf9, 0xbd, 0x19, 0x40, 0xf9, 0xbe, + 0x19, 0x40, 0xe9, 0xb2, 0x19, 0x00, 0xf9, 0xc0, 0x19, 0x40, 0xe1, 0xb1, + 0x19, 0x80, 0x08, 0xe5, 0xb6, 0x19, 0x00, 0xf9, 0xba, 0x19, 0x40, 0xf9, + 0xbb, 0x19, 0x40, 0x4d, 0x95, 0x83, 0xda, 0x19, 0x00, 0x09, 0x20, 0xbd, + 0x01, 0xff, 0xd1, 0xc8, 0x19, 0x00, 0xd2, 0xc9, 0x19, 0x40, 0xf6, 0xdf, + 0x19, 0x40, 0x06, 0xf5, 0x2c, 0x92, 0x02, 0x05, 0x48, 0x0b, 0x89, 0x01, + 0x04, 0x08, 0x05, 0x01, 0xff, 0x42, 0x16, 0x00, 0xa5, 0x19, 0x00, 0x42, + 0xf0, 0x10, 0xa4, 0x19, 0x00, 0x42, 0x0c, 0x08, 0x9d, 0x19, 0x00, 0x42, + 0x22, 0x00, 0xa3, 0x19, 0x00, 0xab, 0x60, 0x42, 0x74, 0x00, 0x9f, 0x19, + 0x00, 0x42, 0x6c, 0x00, 0x99, 0x19, 0x00, 0xae, 0x48, 0xb0, 0x3c, 0x42, + 0x43, 0x14, 0x81, 0x19, 0x00, 0xb3, 0x2a, 0xb4, 0x18, 0x42, 0xf5, 0x0a, + 0x9e, 0x19, 0x00, 0xb8, 0x06, 0x42, 0xbc, 0x22, 0x8d, 0x19, 0x40, 0xe1, + 0x86, 0x19, 0x00, 0x42, 0xf5, 0x0a, 0xa9, 0x19, 0x40, 0xe1, 0x91, 0x19, + 0x00, 0x42, 0x22, 0x00, 0x92, 0x19, 0x00, 0x42, 0x40, 0x06, 0x8b, 0x19, + 0x40, 0xe1, 0x8c, 0x19, 0x00, 0x42, 0x7d, 0x00, 0xab, 0x19, 0x40, 0xe1, + 0x97, 0x19, 0x00, 0x42, 0x22, 0x00, 0x98, 0x19, 0x40, 0xe1, 0x93, 0x19, + 0x00, 0x42, 0x24, 0x02, 0x87, 0x19, 0x40, 0xe1, 0x85, 0x19, 0x00, 0x42, + 0xf5, 0x0a, 0xa8, 0x19, 0x40, 0x42, 0x16, 0x00, 0xa2, 0x19, 0x00, 0x42, + 0xf0, 0x10, 0xa1, 0x19, 0x00, 0x42, 0x0c, 0x08, 0x9a, 0x19, 0x00, 0x42, + 0x22, 0x00, 0xa0, 0x19, 0x00, 0xab, 0x60, 0x42, 0x74, 0x00, 0x9c, 0x19, + 0x00, 0x42, 0x6c, 0x00, 0x96, 0x19, 0x00, 0xae, 0x48, 0xb0, 0x3c, 0x42, + 0x43, 0x14, 0x80, 0x19, 0x00, 0xb3, 0x2a, 0xb4, 0x18, 0x42, 0xf5, 0x0a, + 0x9b, 0x19, 0x00, 0xb8, 0x06, 0x42, 0xbc, 0x22, 0x8a, 0x19, 0x40, 0xe1, + 0x83, 0x19, 0x00, 0x42, 0xf5, 0x0a, 0xa7, 0x19, 0x40, 0xe1, 0x8e, 0x19, + 0x00, 0x42, 0x22, 0x00, 0x8f, 0x19, 0x00, 0x42, 0x40, 0x06, 0x88, 0x19, + 0x40, 0xe1, 0x89, 0x19, 0x00, 0x42, 0x7d, 0x00, 0xaa, 0x19, 0x40, 0xe1, + 0x94, 0x19, 0x00, 0x42, 0x22, 0x00, 0x95, 0x19, 0x40, 0xe1, 0x90, 0x19, + 0x00, 0x42, 0x24, 0x02, 0x84, 0x19, 0x40, 0xe1, 0x82, 0x19, 0x00, 0x42, + 0xf5, 0x0a, 0xa6, 0x19, 0x40, 0xe2, 0xc7, 0x19, 0x00, 0xe4, 0xc6, 0x19, + 0x00, 0xeb, 0xc5, 0x19, 0x00, 0xed, 0xc4, 0x19, 0x00, 0xee, 0xc3, 0x19, + 0x80, 0x04, 0xf6, 0xc1, 0x19, 0x40, 0xe7, 0xc2, 0x19, 0x40, 0x45, 0x12, + 0x0b, 0xd8, 0x19, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xd9, 0x19, 0x00, + 0x43, 0x0e, 0x0b, 0xd1, 0x19, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, + 0x1e, 0xd0, 0x19, 0x40, 0x44, 0x25, 0x01, 0xd3, 0x19, 0x00, 0x42, 0x15, + 0x02, 0xd2, 0x19, 0x40, 0x44, 0xc9, 0x1d, 0xd7, 0x19, 0x00, 0x42, 0x01, + 0x26, 0xd6, 0x19, 0x40, 0x43, 0xd2, 0x05, 0xd5, 0x19, 0x00, 0x43, 0xf6, + 0x06, 0xd4, 0x19, 0x40, 0x46, 0x16, 0x08, 0x11, 0xf3, 0x01, 0x49, 0x4f, + 0xc1, 0x1a, 0xf3, 0x41, 0x42, 0x33, 0x00, 0xb2, 0x26, 0x00, 0x04, 0xdd, + 0x01, 0x01, 0xff, 0x06, 0x88, 0xda, 0x06, 0x44, 0x0c, 0x08, 0x10, 0xf6, + 0x41, 0x46, 0x2e, 0xda, 0x03, 0xfa, 0x81, 0xd3, 0x01, 0x4a, 0x15, 0xaa, + 0x4a, 0xfa, 0x81, 0xc5, 0x01, 0xab, 0x73, 0x44, 0xfd, 0xf1, 0x05, 0xfa, + 0x81, 0x5b, 0x45, 0x52, 0xbe, 0x01, 0xfa, 0x81, 0x43, 0x44, 0x5d, 0xf2, + 0x02, 0xfa, 0x81, 0x2b, 0x07, 0x27, 0x0a, 0x01, 0xff, 0x46, 0x2e, 0xda, + 0x2d, 0xfa, 0x01, 0xab, 0x12, 0x44, 0xfd, 0xf1, 0x2f, 0xfa, 0x01, 0x45, + 0x52, 0xbe, 0x2b, 0xfa, 0x01, 0x44, 0x5d, 0xf2, 0x2c, 0xfa, 0x41, 0x43, + 0xa1, 0x01, 0x2a, 0xfa, 0x01, 0x45, 0x4e, 0x09, 0x2e, 0xfa, 0x41, 0x09, + 0xa3, 0x2c, 0x01, 0xff, 0x4e, 0xac, 0x2c, 0x17, 0xfa, 0x01, 0x5b, 0xbc, + 0x1d, 0x41, 0xfa, 0x41, 0x09, 0xa3, 0x2c, 0x01, 0xff, 0x4e, 0xac, 0x2c, + 0x16, 0xfa, 0x01, 0x5b, 0xbc, 0x1d, 0x40, 0xfa, 0x41, 0x09, 0xa3, 0x2c, + 0x01, 0xff, 0x4e, 0xac, 0x2c, 0x1a, 0xfa, 0x01, 0x5b, 0xbc, 0x1d, 0x44, + 0xfa, 0x41, 0x43, 0xa1, 0x01, 0x00, 0xfa, 0x81, 0x38, 0x45, 0x4e, 0x09, + 0x04, 0xfa, 0xc1, 0x00, 0x09, 0xa3, 0x2c, 0x01, 0xff, 0x52, 0xcd, 0x51, + 0x08, 0xfa, 0x01, 0x4e, 0xac, 0x2c, 0x19, 0xfa, 0x01, 0x5f, 0x6d, 0x11, + 0x1d, 0xfa, 0x01, 0xb4, 0x01, 0xff, 0x5c, 0xfa, 0x17, 0x47, 0xfa, 0x01, + 0x0b, 0xbd, 0x1d, 0x01, 0xff, 0x4f, 0xc8, 0x1d, 0x43, 0xfa, 0x01, 0x53, + 0xf2, 0x4d, 0x32, 0xfa, 0x41, 0x09, 0xa3, 0x2c, 0x01, 0xff, 0x4e, 0xac, + 0x2c, 0x15, 0xfa, 0x01, 0x5b, 0xbc, 0x1d, 0x3f, 0xfa, 0x41, 0x57, 0xa3, + 0x2c, 0x4d, 0xfa, 0x41, 0x09, 0xa3, 0x2c, 0x01, 0xff, 0x4e, 0xac, 0x2c, + 0x18, 0xfa, 0x01, 0x5b, 0xbc, 0x1d, 0x42, 0xfa, 0x41, 0x43, 0x04, 0xd7, + 0xdc, 0x2b, 0x00, 0xb4, 0x01, 0xff, 0x4a, 0x5f, 0xa6, 0xba, 0xfa, 0x01, + 0x49, 0x7d, 0xba, 0x86, 0xfa, 0x41, 0x49, 0x21, 0x2e, 0xc9, 0x2b, 0x40, + 0xa1, 0x35, 0x11, 0x51, 0x5a, 0x1b, 0x0e, 0x5f, 0x79, 0x01, 0xff, 0x03, + 0x7b, 0x00, 0x06, 0x4c, 0x87, 0x00, 0x78, 0x22, 0x40, 0x45, 0xfb, 0x0c, + 0x70, 0x22, 0x00, 0x4a, 0xd6, 0x39, 0x74, 0x22, 0x40, 0x03, 0x7b, 0x00, + 0x06, 0x49, 0xec, 0x00, 0x79, 0x22, 0x40, 0x45, 0xfb, 0x0c, 0x71, 0x22, + 0x00, 0x4a, 0xd6, 0x39, 0x75, 0x22, 0x40, 0x03, 0x6e, 0x06, 0x06, 0x62, + 0xde, 0x0c, 0x47, 0x22, 0x40, 0x54, 0xdc, 0x40, 0x88, 0x22, 0x00, 0x56, + 0x29, 0x36, 0x89, 0x22, 0x40, 0x6d, 0x38, 0x01, 0xaf, 0x22, 0x00, 0x04, + 0xd2, 0x05, 0x01, 0xff, 0x4b, 0xe6, 0x51, 0x15, 0x00, 0x00, 0x08, 0xf5, + 0x22, 0xcc, 0x01, 0x09, 0xe3, 0x25, 0xb5, 0x01, 0x08, 0xd6, 0x05, 0x01, + 0xff, 0x42, 0x5c, 0x00, 0x8e, 0xf1, 0x01, 0x4a, 0xe9, 0xa8, 0x4e, 0x27, + 0x00, 0x4f, 0x34, 0x0c, 0xb7, 0xf8, 0x01, 0x42, 0x36, 0x00, 0x8b, 0xf1, + 0x01, 0xac, 0x24, 0x42, 0xbb, 0x09, 0x8c, 0xf1, 0x01, 0x4d, 0xa6, 0x34, + 0xc4, 0xfb, 0x01, 0x50, 0xb3, 0x02, 0xb6, 0xf8, 0x01, 0x42, 0x40, 0x06, + 0x8d, 0xf1, 0x01, 0x4d, 0xc1, 0x20, 0xb5, 0xf8, 0x01, 0x42, 0xc7, 0x1a, + 0x8f, 0xf1, 0x41, 0x14, 0xdf, 0x05, 0x06, 0x4e, 0x4e, 0x1a, 0xb4, 0xf8, + 0x41, 0xe1, 0x70, 0xf1, 0x01, 0xe2, 0x71, 0xf1, 0x01, 0xe3, 0x72, 0xf1, + 0x01, 0xe4, 0x73, 0xf1, 0x01, 0xe5, 0x74, 0xf1, 0x01, 0xe6, 0x75, 0xf1, + 0x01, 0xe7, 0x76, 0xf1, 0x01, 0xe8, 0x77, 0xf1, 0x01, 0xe9, 0x78, 0xf1, + 0x01, 0xea, 0x79, 0xf1, 0x01, 0xeb, 0x7a, 0xf1, 0x01, 0xec, 0x7b, 0xf1, + 0x01, 0xed, 0x7c, 0xf1, 0x01, 0xee, 0x7d, 0xf1, 0x01, 0xef, 0x7e, 0xf1, + 0x01, 0xf0, 0x7f, 0xf1, 0x01, 0xf1, 0x80, 0xf1, 0x01, 0xf2, 0x81, 0xf1, + 0x01, 0xf3, 0x82, 0xf1, 0x01, 0xf4, 0x83, 0xf1, 0x01, 0xf5, 0x84, 0xf1, + 0x01, 0xf6, 0x85, 0xf1, 0x01, 0xf7, 0x86, 0xf1, 0x01, 0xf8, 0x87, 0xf1, + 0x01, 0xf9, 0x88, 0xf1, 0x01, 0xfa, 0x89, 0xf1, 0x41, 0x45, 0x95, 0x10, + 0xbd, 0xfb, 0x01, 0x47, 0x95, 0x44, 0xbf, 0xfb, 0x01, 0x5c, 0x58, 0x0f, + 0xbe, 0xfb, 0x41, 0x4a, 0x4d, 0xa9, 0xff, 0x24, 0x00, 0x15, 0xde, 0x05, + 0x5a, 0x07, 0xff, 0x39, 0x0c, 0x46, 0xd6, 0x05, 0xd8, 0xf7, 0x01, 0x48, + 0x01, 0x02, 0xd6, 0xf7, 0x41, 0xa5, 0x3c, 0xa6, 0x2e, 0x48, 0xc5, 0x53, + 0xf3, 0x24, 0x00, 0xb3, 0x1a, 0xb4, 0x01, 0xff, 0x47, 0x95, 0x5a, 0xed, + 0x24, 0x00, 0x02, 0x15, 0x01, 0x01, 0xff, 0x43, 0xe8, 0x2b, 0xec, 0x24, + 0x00, 0x43, 0xcc, 0x1d, 0xf4, 0x24, 0x40, 0x48, 0x85, 0x51, 0xf1, 0x24, + 0x00, 0x46, 0x01, 0x26, 0xf0, 0x24, 0x40, 0x46, 0x08, 0x18, 0xef, 0x24, + 0x00, 0x47, 0x0a, 0x5d, 0xee, 0x24, 0x40, 0x47, 0x52, 0x25, 0xf2, 0x24, + 0x00, 0x45, 0xb4, 0x6f, 0xeb, 0x24, 0x40, 0xe1, 0x50, 0xf1, 0x01, 0xe2, + 0x51, 0xf1, 0x01, 0xe3, 0x52, 0xf1, 0x01, 0xe4, 0x53, 0xf1, 0x01, 0xe5, + 0x54, 0xf1, 0x01, 0xe6, 0x55, 0xf1, 0x01, 0xe7, 0x56, 0xf1, 0x01, 0xe8, + 0x57, 0xf1, 0x01, 0xe9, 0x58, 0xf1, 0x01, 0xea, 0x59, 0xf1, 0x01, 0xeb, + 0x5a, 0xf1, 0x01, 0xec, 0x5b, 0xf1, 0x01, 0xed, 0x5c, 0xf1, 0x01, 0xee, + 0x5d, 0xf1, 0x01, 0xef, 0x5e, 0xf1, 0x01, 0xf0, 0x5f, 0xf1, 0x01, 0xf1, + 0x60, 0xf1, 0x01, 0xf2, 0x61, 0xf1, 0x01, 0xf3, 0x62, 0xf1, 0x01, 0xf4, + 0x63, 0xf1, 0x01, 0xf5, 0x64, 0xf1, 0x01, 0xf6, 0x65, 0xf1, 0x01, 0xf7, + 0x66, 0xf1, 0x01, 0xf8, 0x67, 0xf1, 0x01, 0xf9, 0x68, 0xf1, 0x01, 0xfa, + 0x69, 0xf1, 0x41, 0xa2, 0xb5, 0x05, 0x0a, 0x8d, 0xaa, 0xc6, 0x03, 0xa9, + 0xb7, 0x03, 0x48, 0x38, 0xc8, 0xdb, 0xf4, 0x01, 0x42, 0x1b, 0x00, 0xbc, + 0x22, 0x80, 0x22, 0x53, 0xc2, 0x4c, 0x2f, 0x20, 0x00, 0x07, 0xdf, 0x3a, + 0x0c, 0x4c, 0x93, 0x96, 0x22, 0xf9, 0x01, 0x4a, 0x01, 0xb4, 0xff, 0xf9, + 0x41, 0x4c, 0x3a, 0x65, 0x6e, 0x20, 0x00, 0x44, 0xdf, 0xb4, 0xde, 0xf3, + 0x41, 0x08, 0x00, 0xc7, 0x01, 0xff, 0x4a, 0xbc, 0x60, 0xe3, 0x19, 0x01, + 0x07, 0xec, 0x05, 0x67, 0x05, 0x5a, 0x03, 0x3e, 0x0b, 0x40, 0x77, 0x01, + 0xff, 0xa1, 0x2b, 0xe5, 0xda, 0x19, 0x01, 0xe9, 0xd2, 0x19, 0x81, 0x1e, + 0xef, 0xdc, 0x19, 0x01, 0x4f, 0xee, 0x71, 0xe4, 0x19, 0x01, 0xf5, 0xd4, + 0x19, 0x81, 0x0b, 0x49, 0x22, 0xc1, 0xd6, 0x19, 0xc1, 0x00, 0xf2, 0xd7, + 0x19, 0x41, 0xf5, 0xd5, 0x19, 0x41, 0xe9, 0xd3, 0x19, 0x41, 0xe1, 0xd1, + 0x19, 0x01, 0xe9, 0xdb, 0x19, 0x01, 0xf5, 0xdd, 0x19, 0x41, 0xa1, 0x17, + 0x47, 0xd8, 0xd5, 0xe2, 0x19, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, + 0xe5, 0x23, 0xe0, 0x19, 0x01, 0x45, 0xec, 0x4b, 0xdf, 0x19, 0x41, 0x47, + 0x3d, 0x16, 0xde, 0x19, 0x01, 0x47, 0xaf, 0x88, 0xe1, 0x19, 0x41, 0xe1, + 0xa0, 0x19, 0x81, 0x80, 0x02, 0xa2, 0xf3, 0x01, 0xa3, 0xe6, 0x01, 0xa4, + 0xcd, 0x01, 0xe5, 0xaa, 0x19, 0x01, 0xa7, 0xbc, 0x01, 0x42, 0x22, 0x00, + 0xce, 0x19, 0x01, 0xe9, 0xa2, 0x19, 0x81, 0xac, 0x01, 0xaa, 0x9f, 0x01, + 0xab, 0x92, 0x01, 0xac, 0x85, 0x01, 0x42, 0x6c, 0x00, 0xc6, 0x19, 0x01, + 0xae, 0x67, 0xef, 0xac, 0x19, 0x01, 0xb0, 0x57, 0xb2, 0x4b, 0xb3, 0x39, + 0xb4, 0x20, 0xf5, 0xa4, 0x19, 0x81, 0x17, 0xb6, 0x06, 0x42, 0xbc, 0x22, + 0xc7, 0x19, 0x41, 0xe1, 0xca, 0x19, 0x01, 0x48, 0x23, 0xc1, 0xa6, 0x19, + 0xc1, 0x00, 0xf2, 0xa7, 0x19, 0x41, 0xf5, 0xa5, 0x19, 0x41, 0xe1, 0xbd, + 0x19, 0x01, 0x42, 0x22, 0x00, 0xbe, 0x19, 0x01, 0xb4, 0x01, 0xff, 0xe1, + 0xb8, 0x19, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x19, 0x41, 0xe1, 0xcd, 0x19, + 0x01, 0x42, 0x22, 0x00, 0xcb, 0x19, 0x01, 0x42, 0x40, 0x06, 0xcc, 0x19, + 0x41, 0xe1, 0xc8, 0x19, 0x01, 0x42, 0x71, 0x00, 0xd0, 0x19, 0x41, 0xe1, + 0xc2, 0x19, 0x01, 0x42, 0x22, 0x00, 0xc3, 0x19, 0x41, 0xe1, 0xc1, 0x19, + 0x01, 0x42, 0x24, 0x02, 0xb2, 0x19, 0x01, 0x42, 0x2a, 0x05, 0xbc, 0x19, + 0x01, 0x42, 0xbc, 0x22, 0xb7, 0x19, 0x41, 0xe1, 0xc9, 0x19, 0x01, 0x42, + 0x74, 0x00, 0xcf, 0x19, 0x41, 0xe1, 0xae, 0x19, 0x01, 0x42, 0x22, 0x00, + 0xaf, 0x19, 0x41, 0xe1, 0xb5, 0x19, 0x01, 0x42, 0x22, 0x00, 0xb6, 0x19, + 0x41, 0xe9, 0xa3, 0x19, 0x41, 0xe1, 0xb0, 0x19, 0x01, 0x42, 0x22, 0x00, + 0xb1, 0x19, 0x41, 0xe1, 0xbf, 0x19, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, + 0xc0, 0x19, 0x41, 0xe1, 0xba, 0x19, 0x01, 0x42, 0x22, 0x00, 0xbb, 0x19, + 0x41, 0xe1, 0xb3, 0x19, 0x01, 0x42, 0x22, 0x00, 0xb4, 0x19, 0x41, 0xe1, + 0xc4, 0x19, 0x01, 0x42, 0x22, 0x00, 0xc5, 0x19, 0x41, 0xe1, 0xa1, 0x19, + 0x01, 0xe9, 0xab, 0x19, 0x01, 0xf5, 0xad, 0x19, 0x41, 0x48, 0x80, 0xc7, + 0x85, 0xf4, 0x01, 0x47, 0x85, 0x84, 0xa6, 0x20, 0x40, 0x06, 0xef, 0x06, + 0xa3, 0x01, 0x07, 0xec, 0x05, 0x23, 0x05, 0x5a, 0x03, 0x01, 0xff, 0x44, + 0x89, 0xf0, 0xee, 0xe4, 0x01, 0x45, 0xda, 0xe8, 0xec, 0xe4, 0x01, 0x44, + 0xc9, 0xf1, 0xeb, 0xe4, 0x01, 0x45, 0x2d, 0xeb, 0xef, 0xe4, 0x01, 0x45, + 0x6e, 0xeb, 0xed, 0xe4, 0x41, 0xe1, 0xd5, 0xe4, 0x81, 0x65, 0xe5, 0xe4, + 0xe4, 0x81, 0x43, 0xe9, 0xda, 0xe4, 0x81, 0x2c, 0xef, 0xd0, 0xe4, 0x81, + 0x15, 0xf5, 0xdf, 0xe4, 0xc1, 0x00, 0xe3, 0xe0, 0xe4, 0x01, 0xe4, 0xe1, + 0xe4, 0x01, 0xeb, 0xe2, 0xe4, 0x01, 0xf2, 0xe3, 0xe4, 0x41, 0xec, 0xd2, + 0xe4, 0x01, 0x42, 0x1d, 0x01, 0xd4, 0xe4, 0x01, 0xf0, 0xd1, 0xe4, 0x01, + 0xf9, 0xd3, 0xe4, 0x41, 0x42, 0x7f, 0x02, 0xdc, 0xe4, 0x01, 0xe8, 0xde, + 0xe4, 0x01, 0xf3, 0xdb, 0xe4, 0x01, 0xf4, 0xdd, 0xe4, 0x41, 0xe7, 0xe6, + 0xe4, 0x01, 0x42, 0x60, 0x07, 0xea, 0xe4, 0x01, 0xed, 0xe7, 0xe4, 0x01, + 0xee, 0xe8, 0xe4, 0x81, 0x06, 0x42, 0xee, 0x05, 0xe9, 0xe4, 0x41, 0xee, + 0xe5, 0xe4, 0x41, 0xe2, 0xd7, 0xe4, 0x01, 0xe8, 0xd9, 0xe4, 0x01, 0xea, + 0xd6, 0xe4, 0x01, 0x42, 0x7d, 0x1a, 0xd8, 0xe4, 0x41, 0x45, 0x12, 0x0b, + 0xf8, 0xe4, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xf9, 0xe4, 0x01, 0x43, + 0x0e, 0x0b, 0xf1, 0xe4, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, + 0xf0, 0xe4, 0x41, 0x44, 0x25, 0x01, 0xf3, 0xe4, 0x01, 0x42, 0x15, 0x02, + 0xf2, 0xe4, 0x41, 0x44, 0xc9, 0x1d, 0xf7, 0xe4, 0x01, 0x42, 0x01, 0x26, + 0xf6, 0xe4, 0x41, 0x43, 0xd2, 0x05, 0xf5, 0xe4, 0x01, 0x43, 0xf6, 0x06, + 0xf4, 0xe4, 0x41, 0x07, 0x25, 0xcf, 0x06, 0x42, 0x74, 0x00, 0x07, 0x22, + 0x40, 0x55, 0xf5, 0x39, 0xab, 0x08, 0x01, 0x07, 0xec, 0x05, 0x3c, 0x07, + 0xff, 0x39, 0x01, 0xff, 0xa6, 0x29, 0x43, 0x0e, 0x0b, 0xa7, 0x08, 0x81, + 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xad, 0x08, 0x01, 0x44, 0x25, + 0x01, 0xa9, 0x08, 0x01, 0xb7, 0x01, 0xff, 0x44, 0xcb, 0x1d, 0xae, 0x08, + 0x01, 0xef, 0xa8, 0x08, 0x41, 0x48, 0x70, 0x11, 0xaf, 0x08, 0x41, 0x43, + 0xd2, 0x05, 0xac, 0x08, 0x01, 0x43, 0xf6, 0x06, 0xaa, 0x08, 0x41, 0xa1, + 0xb9, 0x01, 0x44, 0x41, 0xef, 0x83, 0x08, 0x01, 0x46, 0x23, 0x4a, 0x85, + 0x08, 0x01, 0x06, 0xf5, 0x2c, 0x73, 0x45, 0xdd, 0xaa, 0x84, 0x08, 0x01, + 0x42, 0xb0, 0x01, 0x87, 0x08, 0x81, 0x60, 0x44, 0xcd, 0xf0, 0x8f, 0x08, + 0x01, 0x46, 0x94, 0xdd, 0x91, 0x08, 0x01, 0x43, 0xb4, 0x05, 0x93, 0x08, + 0x01, 0x43, 0xdc, 0x22, 0x95, 0x08, 0x01, 0x42, 0x6f, 0x02, 0x98, 0x08, + 0x01, 0x44, 0x4c, 0xc8, 0x9a, 0x08, 0x01, 0x44, 0x76, 0x66, 0x9b, 0x08, + 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, 0x8a, 0x8a, 0x88, 0x08, 0x01, 0x44, + 0xa1, 0x52, 0x8d, 0x08, 0x01, 0x45, 0x9b, 0x52, 0x89, 0x08, 0x41, 0x42, + 0xb7, 0x2d, 0x9e, 0x08, 0x01, 0x43, 0xda, 0x25, 0x8b, 0x08, 0x41, 0xa1, + 0x06, 0x43, 0x7a, 0x16, 0x9d, 0x08, 0x41, 0x43, 0xad, 0xea, 0x99, 0x08, + 0x01, 0x44, 0x49, 0xe4, 0x96, 0x08, 0x41, 0x42, 0x53, 0x00, 0x8a, 0x08, + 0x41, 0x45, 0xb2, 0xad, 0x80, 0x08, 0x01, 0x44, 0x41, 0xef, 0x82, 0x08, + 0x01, 0x42, 0xb0, 0x01, 0x86, 0x08, 0x01, 0x44, 0xcd, 0xf0, 0x8e, 0x08, + 0x01, 0x46, 0x94, 0xdd, 0x90, 0x08, 0x01, 0x43, 0xb4, 0x05, 0x92, 0x08, + 0x01, 0x43, 0xdc, 0x22, 0x94, 0x08, 0x01, 0x44, 0x73, 0x4a, 0x9c, 0x08, + 0x01, 0x44, 0xa1, 0x52, 0x8c, 0x08, 0x41, 0x44, 0x18, 0x3d, 0x81, 0x08, + 0x01, 0x43, 0x7e, 0x1a, 0x97, 0x08, 0x41, 0xa3, 0x58, 0x4c, 0xa9, 0x0a, + 0xc2, 0x22, 0x00, 0x08, 0x2b, 0x22, 0x42, 0x47, 0x8e, 0x0d, 0x0f, 0x22, + 0x00, 0xb3, 0x24, 0x4e, 0x17, 0x7d, 0x09, 0x2a, 0x00, 0x45, 0x4d, 0x17, + 0xc3, 0x22, 0x80, 0x06, 0x52, 0x95, 0x56, 0xff, 0x2a, 0x40, 0x0f, 0x60, + 0x69, 0x01, 0xff, 0x43, 0x23, 0x0a, 0x03, 0x2a, 0x00, 0x44, 0x58, 0x28, + 0x04, 0x2a, 0x40, 0x06, 0xbc, 0x24, 0x06, 0x48, 0x6f, 0x70, 0x11, 0x22, + 0x40, 0x55, 0x17, 0x3c, 0x05, 0x2a, 0x00, 0x4e, 0xf7, 0x7d, 0x06, 0x2a, + 0x40, 0x43, 0x1a, 0x00, 0xc0, 0x22, 0x00, 0x42, 0x0c, 0x00, 0xc1, 0x22, + 0x40, 0x07, 0xf6, 0x22, 0x06, 0x48, 0x0e, 0x2d, 0x10, 0x22, 0x40, 0x4c, + 0x17, 0x8e, 0x00, 0x2a, 0x00, 0x4d, 0x71, 0x87, 0x01, 0x2a, 0x00, 0x4e, + 0x17, 0x7d, 0x02, 0x2a, 0x40, 0xa1, 0xdb, 0x65, 0xa5, 0x9a, 0x48, 0xa9, + 0xc9, 0x3f, 0xaf, 0xa9, 0x20, 0x03, 0x45, 0x1e, 0x97, 0x1e, 0xb5, 0xf6, + 0x0c, 0x07, 0xd0, 0xd7, 0x01, 0xff, 0x0f, 0x3d, 0x33, 0xb1, 0x0c, 0x06, + 0xef, 0x06, 0xea, 0x0b, 0x18, 0x6e, 0x28, 0xa3, 0x0b, 0xac, 0xa2, 0x05, + 0x10, 0x78, 0x0c, 0x91, 0x05, 0x0a, 0x65, 0xaf, 0xca, 0x04, 0xb3, 0x8d, + 0x02, 0xb4, 0xb3, 0x01, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x97, 0x01, + 0xe5, 0x31, 0x10, 0x80, 0x8b, 0x01, 0x4c, 0x43, 0x8f, 0x71, 0x10, 0x00, + 0xe9, 0x2d, 0x10, 0x80, 0x7c, 0x06, 0x52, 0xdd, 0x68, 0x04, 0x60, 0xc8, + 0x5a, 0xb3, 0x36, 0x47, 0x2c, 0xd6, 0x2b, 0x10, 0x00, 0xf5, 0x2f, 0x10, + 0x80, 0x27, 0x08, 0x22, 0xc1, 0x11, 0x12, 0xd9, 0x31, 0x01, 0xff, 0x42, + 0x97, 0x02, 0x67, 0x10, 0x00, 0x42, 0xd6, 0x13, 0x68, 0x10, 0x40, 0xec, + 0x58, 0x10, 0x80, 0x09, 0xf2, 0x56, 0x10, 0xc0, 0x00, 0xf2, 0x57, 0x10, + 0x40, 0xec, 0x59, 0x10, 0x40, 0xf5, 0x30, 0x10, 0x40, 0x4c, 0x2b, 0x8f, + 0x62, 0x10, 0x00, 0x04, 0x90, 0x00, 0x01, 0xff, 0x42, 0x80, 0x12, 0x83, + 0x10, 0x00, 0xe5, 0x84, 0x10, 0x80, 0x06, 0x47, 0x24, 0xd1, 0x86, 0x10, + 0x40, 0x46, 0x5b, 0x00, 0x85, 0x10, 0x40, 0x42, 0x52, 0x28, 0x33, 0x10, + 0x00, 0xef, 0x34, 0x10, 0x40, 0x42, 0x27, 0x01, 0x74, 0x10, 0x00, 0x42, + 0x60, 0x51, 0x72, 0x10, 0x00, 0xf5, 0x73, 0x10, 0x40, 0xe9, 0x2e, 0x10, + 0x40, 0x46, 0x5b, 0x00, 0x35, 0x10, 0x40, 0xe1, 0x2c, 0x10, 0x00, 0xe9, + 0x32, 0x10, 0xc0, 0x00, 0x45, 0x5a, 0xeb, 0x9c, 0x10, 0xc0, 0x00, 0xe9, + 0x9d, 0x10, 0x40, 0x0f, 0x6e, 0x6a, 0x11, 0x14, 0x9c, 0x44, 0x01, 0xff, + 0x45, 0xeb, 0xe6, 0x63, 0x10, 0x00, 0x46, 0x58, 0xdd, 0x64, 0x10, 0x40, + 0x45, 0x12, 0x0b, 0xf8, 0xa9, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xf9, + 0xa9, 0x00, 0x43, 0x0e, 0x0b, 0xf1, 0xa9, 0x00, 0xb3, 0x14, 0xb4, 0x06, + 0x44, 0x43, 0x1e, 0xf0, 0xa9, 0x40, 0x44, 0x25, 0x01, 0xf3, 0xa9, 0x00, + 0x42, 0x15, 0x02, 0xf2, 0xa9, 0x40, 0x44, 0xc9, 0x1d, 0xf7, 0xa9, 0x00, + 0x42, 0x01, 0x26, 0xf6, 0xa9, 0x40, 0x43, 0xd2, 0x05, 0xf5, 0xa9, 0x00, + 0x43, 0xf6, 0x06, 0xf4, 0xa9, 0x40, 0x0a, 0x19, 0xab, 0xf3, 0x01, 0x04, + 0x5b, 0x03, 0x47, 0x06, 0x60, 0x16, 0x01, 0xff, 0xa1, 0x23, 0x49, 0x53, + 0xb7, 0x4d, 0x10, 0x00, 0x48, 0x60, 0xc6, 0x4f, 0x10, 0x00, 0x48, 0xd8, + 0xc7, 0x4c, 0x10, 0x00, 0x05, 0x3f, 0x55, 0x01, 0xff, 0x4b, 0xad, 0x00, + 0x9f, 0x10, 0x00, 0x43, 0x0e, 0x0b, 0x9e, 0x10, 0x40, 0x4d, 0x06, 0x83, + 0x4e, 0x10, 0x00, 0x05, 0x12, 0xd2, 0x01, 0xff, 0x4b, 0xad, 0x00, 0x77, + 0xaa, 0x00, 0x43, 0x0e, 0x0b, 0x78, 0xaa, 0x00, 0x43, 0x1f, 0x0a, 0x79, + 0xaa, 0x40, 0xa1, 0x99, 0x01, 0x49, 0x9f, 0x12, 0x37, 0x10, 0x00, 0x0c, + 0x9f, 0x90, 0x86, 0x01, 0x4e, 0x97, 0x79, 0x4a, 0x10, 0x00, 0x4e, 0xf5, + 0x7a, 0x7b, 0xaa, 0x00, 0x54, 0xa0, 0x45, 0x8f, 0x10, 0x00, 0xb3, 0x35, + 0x0f, 0x92, 0x73, 0x29, 0x02, 0x02, 0x00, 0x19, 0x17, 0xd9, 0x31, 0x01, + 0xff, 0xd1, 0x69, 0x10, 0x00, 0xd2, 0x6a, 0x10, 0x00, 0xd3, 0x6b, 0x10, + 0x00, 0xd4, 0x6c, 0x10, 0x00, 0xd5, 0x6d, 0x10, 0x40, 0x44, 0xe5, 0x23, + 0x39, 0x10, 0x00, 0x45, 0xec, 0x4b, 0x38, 0x10, 0x40, 0xd2, 0x7c, 0xaa, + 0x00, 0xd5, 0x7d, 0xaa, 0x40, 0x46, 0xaf, 0x0a, 0x4b, 0x10, 0x00, 0x04, + 0x90, 0x00, 0x01, 0xff, 0x08, 0xc8, 0xc4, 0x1b, 0x43, 0xa7, 0x52, 0xe5, + 0xa9, 0x00, 0x05, 0xeb, 0x31, 0x01, 0xff, 0xd2, 0x87, 0x10, 0x00, 0xd3, + 0x88, 0x10, 0x00, 0xd5, 0x89, 0x10, 0x00, 0xd6, 0x8a, 0x10, 0x40, 0x4d, + 0x91, 0x82, 0x8d, 0x10, 0x00, 0x05, 0xeb, 0x31, 0x01, 0xff, 0xd2, 0x8b, + 0x10, 0x00, 0xd3, 0x8c, 0x10, 0x40, 0xd1, 0x9a, 0x10, 0x00, 0xd3, 0x9b, + 0x10, 0x40, 0x47, 0x3d, 0x16, 0x36, 0x10, 0x00, 0x43, 0x88, 0x2d, 0x3a, + 0x10, 0x40, 0x45, 0x12, 0x0b, 0x98, 0x10, 0x00, 0xa6, 0x2e, 0x44, 0xcf, + 0x2a, 0x99, 0x10, 0x00, 0x43, 0x0e, 0x0b, 0x91, 0x10, 0x00, 0xb3, 0x14, + 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x90, 0x10, 0x40, 0x44, 0x25, 0x01, 0x93, + 0x10, 0x00, 0x42, 0x15, 0x02, 0x92, 0x10, 0x40, 0x44, 0xc9, 0x1d, 0x97, + 0x10, 0x00, 0x42, 0x01, 0x26, 0x96, 0x10, 0x40, 0x43, 0xd2, 0x05, 0x95, + 0x10, 0x00, 0x43, 0xf6, 0x06, 0x94, 0x10, 0x40, 0x45, 0x12, 0x0b, 0xd8, + 0x16, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xd9, 0x16, 0x01, 0x43, 0x0e, + 0x0b, 0xd1, 0x16, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xd0, + 0x16, 0x41, 0x44, 0x25, 0x01, 0xd3, 0x16, 0x01, 0x42, 0x15, 0x02, 0xd2, + 0x16, 0x41, 0x44, 0xc9, 0x1d, 0xd7, 0x16, 0x01, 0x42, 0x01, 0x26, 0xd6, + 0x16, 0x41, 0x43, 0xd2, 0x05, 0xd5, 0x16, 0x01, 0x43, 0xf6, 0x06, 0xd4, + 0x16, 0x41, 0x54, 0xd4, 0x43, 0x70, 0xaa, 0x00, 0x52, 0x3f, 0x55, 0xe6, + 0xa9, 0x40, 0x06, 0xed, 0x05, 0x17, 0x0f, 0x0d, 0x71, 0x01, 0xff, 0x42, + 0xe2, 0x0a, 0x76, 0xaa, 0x00, 0x43, 0x79, 0xf4, 0x74, 0xaa, 0x00, 0x42, + 0x76, 0xd2, 0x75, 0xaa, 0x40, 0xe1, 0x21, 0x10, 0x80, 0xd3, 0x05, 0xa2, + 0xc6, 0x05, 0xa3, 0xb9, 0x05, 0xa4, 0xa0, 0x05, 0xe5, 0x27, 0x10, 0x80, + 0x83, 0x05, 0xa7, 0xf0, 0x04, 0x42, 0x22, 0x00, 0x1f, 0x10, 0x00, 0xe9, + 0x23, 0x10, 0x80, 0xe0, 0x04, 0xaa, 0xd3, 0x04, 0xab, 0xc4, 0x03, 0xac, + 0xb7, 0x03, 0xad, 0x8f, 0x03, 0xae, 0xf0, 0x02, 0xef, 0x29, 0x10, 0x00, + 0xb0, 0xdf, 0x02, 0xb2, 0xd2, 0x02, 0xb3, 0xb2, 0x01, 0xb4, 0x3c, 0xf5, + 0x25, 0x10, 0x80, 0x33, 0x08, 0x22, 0xc1, 0x1d, 0xb7, 0x06, 0x42, 0xbc, + 0x22, 0x1a, 0x10, 0x40, 0xe1, 0x1d, 0x10, 0x00, 0x11, 0xda, 0x31, 0x01, + 0xff, 0x43, 0x51, 0x02, 0x66, 0x10, 0x00, 0x43, 0x8f, 0x00, 0x65, 0x10, + 0x40, 0xec, 0x54, 0x10, 0x80, 0x09, 0xf2, 0x52, 0x10, 0xc0, 0x00, 0xf2, + 0x53, 0x10, 0x40, 0xec, 0x55, 0x10, 0x40, 0xf5, 0x26, 0x10, 0x40, 0xe1, + 0x10, 0x10, 0x80, 0x13, 0x42, 0x22, 0x00, 0x11, 0x10, 0x00, 0xb4, 0x01, + 0xff, 0xe1, 0x0b, 0x10, 0x00, 0x42, 0x22, 0x00, 0x0c, 0x10, 0x40, 0x08, + 0x6f, 0x6a, 0x01, 0xff, 0xa2, 0x4b, 0xa4, 0x33, 0x42, 0x0c, 0x08, 0xe8, + 0xa9, 0x00, 0xa7, 0x21, 0xaa, 0x15, 0x43, 0x2c, 0x0e, 0xfa, 0xa9, 0x00, + 0xae, 0x01, 0xff, 0x42, 0x2a, 0x05, 0xef, 0xa9, 0x00, 0x42, 0xbc, 0x22, + 0xe7, 0xa9, 0x40, 0xe1, 0xeb, 0xa9, 0x00, 0x42, 0x22, 0x00, 0xec, 0xa9, + 0x40, 0xe1, 0xe9, 0xa9, 0x00, 0x42, 0x22, 0x00, 0xea, 0xa9, 0x40, 0xe1, + 0xfb, 0xa9, 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xfc, 0xa9, 0x40, 0xe1, + 0xed, 0xa9, 0x00, 0x42, 0x22, 0x00, 0xee, 0xa9, 0x40, 0xe1, 0xfd, 0xa9, + 0x00, 0x42, 0x22, 0x00, 0xfe, 0xa9, 0x40, 0xe1, 0x1e, 0x10, 0x00, 0x4d, + 0x47, 0x83, 0x61, 0x10, 0x00, 0xa8, 0x06, 0x42, 0x40, 0x06, 0x51, 0x10, + 0x40, 0xe1, 0x50, 0x10, 0x80, 0x11, 0x0b, 0xfd, 0xa4, 0x01, 0xff, 0x43, + 0x91, 0x20, 0x7e, 0xaa, 0x00, 0x43, 0xa4, 0x02, 0x7f, 0xaa, 0x40, 0x02, + 0x92, 0x00, 0x01, 0xff, 0xe1, 0x22, 0x10, 0x00, 0xa2, 0x60, 0xa3, 0x54, + 0x42, 0xf0, 0x10, 0x7b, 0x10, 0x00, 0x42, 0x0c, 0x08, 0x7e, 0x10, 0x00, + 0xa7, 0x3c, 0x42, 0x22, 0x00, 0x81, 0x10, 0x00, 0x43, 0x9c, 0x45, 0xe2, + 0xa9, 0x00, 0xab, 0x24, 0xae, 0x12, 0x43, 0xff, 0x1c, 0x7d, 0x10, 0x00, + 0x43, 0x8f, 0x00, 0x80, 0x10, 0x00, 0x42, 0x59, 0x00, 0x79, 0x10, 0x40, + 0xe1, 0x7c, 0x10, 0x00, 0x42, 0x2a, 0x05, 0xe3, 0xa9, 0x00, 0x42, 0xbc, + 0x22, 0x7a, 0x10, 0x40, 0xe1, 0x75, 0x10, 0x00, 0x42, 0x22, 0x00, 0x76, + 0x10, 0x40, 0xe1, 0x77, 0x10, 0x00, 0x42, 0x22, 0x00, 0xe0, 0xa9, 0x40, + 0xe1, 0x78, 0x10, 0x00, 0x42, 0x22, 0x00, 0xe1, 0xa9, 0x40, 0xe1, 0x7f, + 0x10, 0x00, 0x42, 0x22, 0x00, 0xe4, 0xa9, 0x40, 0xe1, 0x1b, 0x10, 0x00, + 0x4f, 0x55, 0x74, 0x8e, 0x10, 0x40, 0xe1, 0x15, 0x10, 0x00, 0x42, 0x22, + 0x00, 0x16, 0x10, 0x40, 0xe1, 0x14, 0x10, 0x00, 0x42, 0x24, 0x02, 0x04, + 0x10, 0x00, 0xae, 0x06, 0x42, 0xbc, 0x22, 0x09, 0x10, 0x40, 0xe1, 0x0f, + 0x10, 0x00, 0x42, 0xbc, 0x22, 0x0a, 0x10, 0x40, 0xe1, 0x19, 0x10, 0x00, + 0x03, 0xb6, 0x00, 0x01, 0xff, 0x02, 0x65, 0x27, 0x10, 0xe5, 0x28, 0x10, + 0x00, 0x43, 0x9c, 0x45, 0x5b, 0x10, 0x00, 0x43, 0x39, 0x48, 0x5a, 0x10, + 0x40, 0xe1, 0x5c, 0x10, 0x00, 0xe5, 0x5d, 0x10, 0x40, 0xe1, 0x1c, 0x10, + 0x00, 0x42, 0x74, 0x00, 0x20, 0x10, 0x40, 0xe1, 0x00, 0x10, 0x00, 0x42, + 0x22, 0x00, 0x01, 0x10, 0xc0, 0x00, 0x04, 0xd7, 0x43, 0x01, 0xff, 0xa3, + 0x70, 0xa4, 0x5c, 0x42, 0x0c, 0x08, 0x6f, 0xaa, 0x00, 0x42, 0x24, 0x02, + 0x60, 0xaa, 0x00, 0xa8, 0x44, 0xaa, 0x38, 0x43, 0x2c, 0x0e, 0x6e, 0xaa, + 0x00, 0xae, 0x26, 0x42, 0x71, 0x00, 0x73, 0xaa, 0x00, 0x42, 0x40, 0x06, + 0x6c, 0xaa, 0x00, 0x02, 0xee, 0x05, 0x0c, 0x42, 0xed, 0x26, 0x71, 0xaa, + 0x00, 0x42, 0x59, 0x00, 0x72, 0xaa, 0x40, 0xe1, 0x66, 0xaa, 0x00, 0x42, + 0x22, 0x00, 0x67, 0xaa, 0x40, 0xe1, 0x6b, 0xaa, 0x00, 0x42, 0xbc, 0x22, + 0x65, 0xaa, 0x40, 0xe1, 0x63, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x64, 0xaa, + 0x40, 0xe1, 0x6d, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x6e, 0xaa, 0x40, 0xa4, + 0x06, 0x42, 0x22, 0x00, 0x6a, 0xaa, 0x40, 0xe1, 0x68, 0xaa, 0x00, 0x42, + 0x22, 0x00, 0x69, 0xaa, 0x40, 0xe1, 0x61, 0xaa, 0x00, 0x42, 0x22, 0x00, + 0x62, 0xaa, 0x40, 0xe1, 0x07, 0x10, 0x00, 0x42, 0x22, 0x00, 0x08, 0x10, + 0x40, 0xe9, 0x24, 0x10, 0x40, 0xe1, 0x02, 0x10, 0x00, 0x42, 0x22, 0x00, + 0x03, 0x10, 0x00, 0x47, 0x81, 0xc6, 0x3f, 0x10, 0x40, 0x11, 0x6f, 0x28, + 0x01, 0xff, 0x44, 0xf5, 0xef, 0x70, 0x10, 0x00, 0x43, 0x01, 0x46, 0x6e, + 0x10, 0x00, 0x43, 0x51, 0xf3, 0x6f, 0x10, 0x40, 0xe1, 0x12, 0x10, 0x00, + 0xa4, 0x06, 0x42, 0x22, 0x00, 0x13, 0x10, 0x40, 0xe1, 0x0d, 0x10, 0x00, + 0x42, 0x22, 0x00, 0x0e, 0x10, 0x40, 0xe1, 0x05, 0x10, 0x00, 0x42, 0x22, + 0x00, 0x06, 0x10, 0x40, 0xe1, 0x17, 0x10, 0x00, 0x42, 0x22, 0x00, 0x18, + 0x10, 0x40, 0x47, 0x12, 0xd2, 0x7a, 0xaa, 0x00, 0xf5, 0x2a, 0x10, 0x40, + 0x45, 0x12, 0x0b, 0xe2, 0x16, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xe3, + 0x16, 0x01, 0x43, 0x0e, 0x0b, 0xdb, 0x16, 0x01, 0xb3, 0x14, 0xb4, 0x06, + 0x44, 0x43, 0x1e, 0xda, 0x16, 0x41, 0x44, 0x25, 0x01, 0xdd, 0x16, 0x01, + 0x42, 0x15, 0x02, 0xdc, 0x16, 0x41, 0x44, 0xc9, 0x1d, 0xe1, 0x16, 0x01, + 0x42, 0x01, 0x26, 0xe0, 0x16, 0x41, 0x43, 0xd2, 0x05, 0xdf, 0x16, 0x01, + 0x43, 0xf6, 0x06, 0xde, 0x16, 0x41, 0x45, 0x12, 0x0b, 0x48, 0x10, 0x00, + 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x49, 0x10, 0x00, 0x43, 0x0e, 0x0b, 0x41, + 0x10, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x40, 0x10, 0x40, + 0x44, 0x25, 0x01, 0x43, 0x10, 0x00, 0x42, 0x15, 0x02, 0x42, 0x10, 0x40, + 0x44, 0xc9, 0x1d, 0x47, 0x10, 0x00, 0x42, 0x01, 0x26, 0x46, 0x10, 0x40, + 0x43, 0xd2, 0x05, 0x45, 0x10, 0x00, 0x43, 0xf6, 0x06, 0x44, 0x10, 0x40, + 0xad, 0x06, 0x4e, 0x0d, 0x7c, 0x82, 0x10, 0x40, 0x06, 0x4d, 0x33, 0x17, + 0x0a, 0xcf, 0xae, 0x01, 0xff, 0x42, 0x74, 0x00, 0x60, 0x10, 0x00, 0x42, + 0x6c, 0x00, 0x5f, 0x10, 0x00, 0x42, 0x2a, 0x05, 0x5e, 0x10, 0x40, 0x42, + 0x22, 0x00, 0x3e, 0x10, 0x00, 0x42, 0x71, 0x00, 0x3c, 0x10, 0x00, 0x42, + 0xa9, 0x01, 0x3d, 0x10, 0x00, 0x42, 0xbc, 0x22, 0x3b, 0x10, 0x40, 0x03, + 0x97, 0x21, 0x8d, 0x11, 0x02, 0xb8, 0x04, 0xb6, 0x0e, 0xb3, 0x01, 0xff, + 0x45, 0x22, 0xe7, 0x44, 0xf3, 0x81, 0xa5, 0x0e, 0x02, 0x36, 0x00, 0x01, + 0xff, 0x80, 0x8b, 0x0e, 0x03, 0x13, 0x00, 0x01, 0xff, 0x48, 0x13, 0xa9, + 0xb9, 0xf3, 0x81, 0xf8, 0x0d, 0x44, 0x09, 0x28, 0xb5, 0xf3, 0x01, 0xb3, + 0x01, 0xff, 0x44, 0x69, 0xef, 0xbc, 0xf3, 0x01, 0x06, 0x60, 0x16, 0x01, + 0xff, 0x0b, 0x37, 0x99, 0xd3, 0x0d, 0xa2, 0x86, 0x0d, 0xa3, 0xe0, 0x0a, + 0xa4, 0x8b, 0x0a, 0xa5, 0xd5, 0x09, 0xa6, 0xd2, 0x08, 0xa7, 0x83, 0x08, + 0x02, 0x22, 0x00, 0xe2, 0x07, 0x4d, 0x58, 0x84, 0x98, 0xd1, 0x01, 0xab, + 0x81, 0x07, 0xac, 0xe2, 0x06, 0xad, 0x9c, 0x06, 0xae, 0xf7, 0x05, 0xaf, + 0x98, 0x05, 0xb0, 0xd5, 0x04, 0x02, 0x7c, 0x00, 0x9e, 0x04, 0xb2, 0xe9, + 0x03, 0xb3, 0xa4, 0x02, 0xb4, 0x30, 0xb6, 0x22, 0xb7, 0x0a, 0x4a, 0x2c, + 0x64, 0x43, 0xd1, 0x01, 0xfa, 0x8e, 0xd1, 0x41, 0x05, 0x80, 0xb3, 0x06, + 0x4f, 0x00, 0x6f, 0xb3, 0xd1, 0x41, 0x44, 0x09, 0x28, 0x5d, 0xd1, 0x01, + 0x44, 0x74, 0x33, 0x3b, 0xd1, 0x41, 0x44, 0x7e, 0x07, 0xd3, 0xd1, 0x01, + 0x4c, 0x03, 0x93, 0x57, 0xd1, 0x41, 0x06, 0x42, 0xdb, 0xb3, 0x01, 0xa8, + 0x9a, 0x01, 0x47, 0x03, 0xd4, 0xd8, 0xd1, 0x81, 0x8c, 0x01, 0xf2, 0x96, + 0xd1, 0x81, 0x1c, 0x43, 0x5d, 0x01, 0x97, 0xd1, 0x81, 0x06, 0x4d, 0xbe, + 0x8a, 0x17, 0xd1, 0x41, 0x80, 0x01, 0xff, 0x45, 0x48, 0x0e, 0x99, 0xd1, + 0x01, 0x42, 0x50, 0x02, 0x9a, 0xd1, 0x41, 0x06, 0x03, 0x02, 0x01, 0xff, + 0x0a, 0xc0, 0x38, 0x11, 0x15, 0xba, 0x38, 0x01, 0xff, 0x45, 0x0c, 0x03, + 0x55, 0xd1, 0x01, 0x45, 0xad, 0x02, 0x54, 0xd1, 0x41, 0x05, 0x9e, 0x14, + 0x41, 0x05, 0xc3, 0x00, 0x31, 0x06, 0xc8, 0x00, 0x21, 0x03, 0x7d, 0x15, + 0x01, 0xff, 0x45, 0x0c, 0x03, 0x49, 0xd1, 0x01, 0x06, 0xc8, 0x00, 0x06, + 0x45, 0xad, 0x02, 0x48, 0xd1, 0x41, 0x45, 0x0c, 0x03, 0x51, 0xd1, 0x01, + 0x45, 0xad, 0x02, 0x50, 0xd1, 0x41, 0x45, 0x0c, 0x03, 0x4d, 0xd1, 0x01, + 0x45, 0xad, 0x02, 0x4c, 0xd1, 0x41, 0x45, 0x0c, 0x03, 0x4b, 0xd1, 0x01, + 0x45, 0xad, 0x02, 0x4a, 0xd1, 0x41, 0x45, 0x0c, 0x03, 0x4f, 0xd1, 0x01, + 0x45, 0xad, 0x02, 0x4e, 0xd1, 0x41, 0x4a, 0x0f, 0xa6, 0xdc, 0xd1, 0x41, + 0x0c, 0x6f, 0x90, 0x06, 0x4e, 0x8f, 0x7b, 0x18, 0xd1, 0x41, 0x44, 0x09, + 0x28, 0x62, 0xd1, 0x01, 0x44, 0x74, 0x33, 0x40, 0xd1, 0x41, 0x1b, 0xf1, + 0x1b, 0x18, 0x19, 0xf3, 0x1b, 0x01, 0xff, 0x4a, 0x97, 0x6e, 0xc8, 0xd1, + 0x01, 0x48, 0x99, 0x6e, 0xc7, 0xd1, 0xc1, 0x00, 0x4d, 0x6b, 0x7f, 0xc9, + 0xd1, 0x41, 0x4a, 0x97, 0x6e, 0xcb, 0xd1, 0x81, 0x06, 0x48, 0x99, 0x6e, + 0xca, 0xd1, 0x41, 0x0c, 0x6b, 0x7f, 0x01, 0xff, 0xd1, 0xcc, 0xd1, 0x01, + 0xd2, 0xcd, 0xd1, 0x01, 0xd3, 0xce, 0xd1, 0x41, 0x48, 0x80, 0xc4, 0xd6, + 0xd1, 0x81, 0xb4, 0x01, 0xa5, 0x7a, 0xa8, 0x62, 0xa9, 0x25, 0x43, 0x0c, + 0x00, 0xe9, 0xd1, 0x01, 0x06, 0xbc, 0x24, 0x06, 0x45, 0xaf, 0xeb, 0x8d, + 0xd1, 0x41, 0xe2, 0xd2, 0xd1, 0x01, 0x09, 0xc1, 0x38, 0x01, 0xff, 0x45, + 0x0c, 0x03, 0x47, 0xd1, 0x01, 0x45, 0xad, 0x02, 0x46, 0xd1, 0x41, 0x4c, + 0xa3, 0x92, 0x00, 0xd1, 0x01, 0xb8, 0x01, 0xff, 0x8d, 0x24, 0xb4, 0x01, + 0xff, 0x06, 0x04, 0x26, 0x11, 0x09, 0x85, 0xc1, 0x01, 0xff, 0x44, 0x09, + 0x28, 0x63, 0xd1, 0x01, 0x44, 0x74, 0x33, 0x41, 0xd1, 0x41, 0x44, 0x09, + 0x28, 0x61, 0xd1, 0x01, 0x44, 0x74, 0x33, 0x3f, 0xd1, 0x41, 0x4a, 0x93, + 0x7b, 0x1b, 0xd1, 0x01, 0x50, 0x96, 0x67, 0x1c, 0xd1, 0x41, 0x04, 0xf7, + 0xb0, 0x06, 0x4b, 0xf3, 0xa0, 0x05, 0xd1, 0x41, 0x44, 0xa5, 0x01, 0x31, + 0xd1, 0x01, 0x42, 0x50, 0x02, 0x30, 0xd1, 0x41, 0x43, 0x68, 0x21, 0x0b, + 0xd1, 0x01, 0x02, 0x7d, 0x02, 0x01, 0xff, 0x07, 0xb1, 0xcf, 0x17, 0x07, + 0x4d, 0xd3, 0x01, 0xff, 0x45, 0x0c, 0x03, 0xbe, 0xd1, 0x01, 0x44, 0x74, + 0x33, 0xc6, 0xd1, 0x01, 0x45, 0xad, 0x02, 0xbd, 0xd1, 0x41, 0x45, 0x0c, + 0x03, 0xba, 0xd1, 0x01, 0x44, 0x74, 0x33, 0xc4, 0xd1, 0x01, 0x45, 0xad, + 0x02, 0xb9, 0xd1, 0x41, 0x47, 0x2d, 0xcd, 0xdb, 0xd1, 0x41, 0xa5, 0x0f, + 0xa9, 0x01, 0xff, 0x4f, 0xa7, 0x6d, 0x07, 0xd1, 0x01, 0x49, 0x3f, 0xbc, + 0x8c, 0xd1, 0x41, 0x04, 0xf3, 0x6a, 0x06, 0x53, 0xc3, 0x4e, 0x03, 0xd1, + 0x41, 0x45, 0x22, 0x0a, 0x08, 0xd1, 0x01, 0x0a, 0x9d, 0xa9, 0x01, 0xff, + 0xd1, 0x0d, 0xd1, 0x01, 0xd2, 0x0e, 0xd1, 0x01, 0xd3, 0x0f, 0xd1, 0x41, + 0x06, 0x06, 0x03, 0x11, 0x0b, 0x8e, 0x9d, 0x01, 0xff, 0x44, 0xf9, 0xee, + 0x38, 0xd1, 0x01, 0x45, 0xac, 0xe4, 0x39, 0xd1, 0x41, 0x44, 0x09, 0x28, + 0x5f, 0xd1, 0x01, 0x44, 0x74, 0x33, 0x3d, 0xd1, 0x01, 0x05, 0x3b, 0x2d, + 0x01, 0xff, 0x44, 0x30, 0x3b, 0x33, 0xd1, 0x01, 0x45, 0xf5, 0xb0, 0x32, + 0xd1, 0x41, 0x53, 0x3b, 0x48, 0x56, 0xd1, 0x01, 0xa5, 0x22, 0x44, 0x6d, + 0xf0, 0x8f, 0xd1, 0x01, 0x4c, 0x8f, 0x91, 0x44, 0xd1, 0x01, 0xaf, 0x01, + 0xff, 0x45, 0x74, 0xe5, 0xd4, 0xd1, 0x01, 0x47, 0x76, 0xd5, 0xd9, 0xd1, + 0xc1, 0x00, 0x47, 0x2d, 0xcd, 0xda, 0xd1, 0x41, 0x04, 0x7b, 0xaf, 0x06, + 0x4c, 0xfb, 0x94, 0xdd, 0xd1, 0x41, 0x44, 0xb9, 0x00, 0xae, 0xd1, 0x01, + 0x47, 0xd4, 0xd6, 0xaf, 0xd1, 0x41, 0x02, 0xcd, 0x05, 0x42, 0x0f, 0xcf, + 0x72, 0x11, 0x06, 0x3a, 0xc2, 0x01, 0xff, 0x44, 0xf9, 0xee, 0x36, 0xd1, + 0x01, 0x45, 0xac, 0xe4, 0x37, 0xd1, 0x41, 0xd1, 0x9b, 0xd1, 0x81, 0x20, + 0xd2, 0x9c, 0xd1, 0x01, 0xd3, 0x9d, 0xd1, 0x01, 0xd4, 0x9e, 0xd1, 0x01, + 0xd5, 0x9f, 0xd1, 0x01, 0xd6, 0xa0, 0xd1, 0x01, 0xd7, 0xa1, 0xd1, 0x01, + 0xd8, 0xa2, 0xd1, 0x01, 0xd9, 0xa3, 0xd1, 0x41, 0xd0, 0xa4, 0xd1, 0x01, + 0xd1, 0xa5, 0xd1, 0x41, 0x17, 0x75, 0x2c, 0x06, 0x4b, 0x92, 0x7b, 0x16, + 0xd1, 0x41, 0x44, 0x09, 0x28, 0x64, 0xd1, 0x01, 0x44, 0x74, 0x33, 0x42, + 0xd1, 0x41, 0x07, 0x68, 0x92, 0x12, 0x4a, 0x93, 0xa9, 0xa7, 0xd1, 0x01, + 0x4d, 0x30, 0x87, 0x58, 0xd1, 0x01, 0x4c, 0x57, 0x96, 0x59, 0xd1, 0x41, + 0x44, 0xa5, 0x01, 0x2f, 0xd1, 0x01, 0x42, 0x50, 0x02, 0x2e, 0xd1, 0x41, + 0x45, 0x48, 0xcf, 0xb6, 0xd1, 0x01, 0x44, 0xad, 0xef, 0x90, 0xd1, 0x01, + 0x45, 0x4e, 0xd3, 0xbb, 0xd1, 0x81, 0x21, 0x0d, 0x16, 0x87, 0x11, 0x04, + 0xb7, 0x04, 0x01, 0xff, 0x45, 0xe1, 0x65, 0x3a, 0xd1, 0x01, 0x50, 0xd6, + 0x65, 0x29, 0xd1, 0x41, 0x45, 0x0c, 0x03, 0x53, 0xd1, 0x01, 0x45, 0xad, + 0x02, 0x52, 0xd1, 0x41, 0x80, 0x01, 0xff, 0x45, 0x0c, 0x03, 0xbc, 0xd1, + 0x01, 0x44, 0x74, 0x33, 0xc5, 0xd1, 0x41, 0x4f, 0x99, 0x6c, 0x06, 0xd1, + 0x01, 0x44, 0xa2, 0x49, 0xb7, 0xd1, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4f, + 0x97, 0x6e, 0xc2, 0xd1, 0x01, 0x4d, 0x99, 0x6e, 0xc1, 0xd1, 0x41, 0x06, + 0xc8, 0xdc, 0x06, 0x44, 0xac, 0x1c, 0xea, 0xd1, 0x41, 0x46, 0x52, 0xda, + 0xde, 0xd1, 0x01, 0xa5, 0x30, 0xa6, 0x22, 0x49, 0x5d, 0xb9, 0xe3, 0xd1, + 0x01, 0x12, 0xaf, 0x54, 0x0c, 0x4f, 0x57, 0x72, 0xe1, 0xd1, 0x01, 0x4a, + 0x7f, 0xb3, 0xe2, 0xd1, 0x41, 0x44, 0xa5, 0x01, 0xe4, 0xd1, 0x01, 0x42, + 0x50, 0x02, 0xe5, 0xd1, 0x41, 0x49, 0x59, 0xba, 0xe0, 0xd1, 0x01, 0x48, + 0x04, 0xb9, 0xe8, 0xd1, 0x41, 0x10, 0xc6, 0x63, 0x06, 0x4b, 0xf6, 0x9f, + 0xdf, 0xd1, 0x41, 0x44, 0xa5, 0x01, 0xe6, 0xd1, 0x01, 0x42, 0x50, 0x02, + 0xe7, 0xd1, 0x41, 0x03, 0x24, 0x00, 0x06, 0x49, 0x6e, 0xc0, 0xa6, 0xd1, + 0x41, 0x44, 0x09, 0x28, 0x5e, 0xd1, 0x01, 0x4a, 0x79, 0xaf, 0xb0, 0xd1, + 0x01, 0x44, 0x74, 0x33, 0x3c, 0xd1, 0x41, 0x45, 0x09, 0xbf, 0x1e, 0xd1, + 0x81, 0x34, 0x09, 0x79, 0xbb, 0x24, 0xb2, 0x01, 0xff, 0x09, 0x91, 0xb5, + 0x11, 0x08, 0x80, 0xc5, 0x01, 0xff, 0x46, 0x52, 0xda, 0xd0, 0xd1, 0x01, + 0x46, 0xa8, 0xdb, 0xd1, 0xd1, 0x41, 0x48, 0xc8, 0xc8, 0x95, 0xd1, 0x01, + 0x45, 0x48, 0x0e, 0x94, 0xd1, 0x41, 0x44, 0xa5, 0x01, 0xb2, 0xd1, 0x01, + 0x42, 0x50, 0x02, 0xb1, 0xd1, 0x41, 0x08, 0x38, 0xc2, 0x01, 0xff, 0x44, + 0xf9, 0xee, 0x1f, 0xd1, 0x01, 0x45, 0xac, 0xe4, 0x20, 0xd1, 0x41, 0x45, + 0x09, 0xbf, 0x22, 0xd1, 0x81, 0x68, 0x46, 0x60, 0xdb, 0x10, 0xd1, 0x81, + 0x5b, 0xa9, 0x3a, 0x04, 0x04, 0xb9, 0x2a, 0xaf, 0x11, 0x04, 0xe5, 0xf2, + 0x01, 0xff, 0x45, 0x0c, 0x03, 0xc0, 0xd1, 0x01, 0x45, 0xad, 0x02, 0xbf, + 0xd1, 0x41, 0x43, 0x2d, 0x01, 0x91, 0xd1, 0x01, 0x03, 0x80, 0xc0, 0x01, + 0xff, 0x4a, 0x93, 0x7b, 0x19, 0xd1, 0x01, 0x50, 0x96, 0x67, 0x1d, 0xd1, + 0x41, 0x44, 0xa5, 0x01, 0x2d, 0xd1, 0x01, 0x42, 0x50, 0x02, 0x2c, 0xd1, + 0x41, 0xae, 0x06, 0x4d, 0xee, 0x89, 0x1a, 0xd1, 0x41, 0x4a, 0xcc, 0x4e, + 0x02, 0xd1, 0x01, 0x0e, 0x01, 0x78, 0x01, 0xff, 0xd1, 0x6a, 0xd1, 0x01, + 0xd2, 0x6b, 0xd1, 0x01, 0xd3, 0x6c, 0xd1, 0x41, 0x46, 0x1f, 0x07, 0x11, + 0xd1, 0x41, 0x08, 0x38, 0xc2, 0x01, 0xff, 0x44, 0xf9, 0xee, 0x23, 0xd1, + 0x01, 0x45, 0xac, 0xe4, 0x24, 0xd1, 0x41, 0x06, 0x13, 0x0b, 0x23, 0x03, + 0x1b, 0x00, 0x01, 0xff, 0x44, 0x99, 0xbd, 0x74, 0xd1, 0x01, 0x49, 0xe1, + 0xbc, 0xa8, 0xd1, 0x01, 0x46, 0x97, 0x35, 0x7a, 0xd1, 0x01, 0x44, 0xb1, + 0xf2, 0x78, 0xd1, 0x01, 0x43, 0xd8, 0x25, 0x76, 0xd1, 0x41, 0x44, 0x09, + 0x28, 0x60, 0xd1, 0x01, 0x44, 0x74, 0x33, 0x3e, 0xd1, 0x41, 0xa1, 0x31, + 0xa5, 0x23, 0x06, 0x3c, 0x01, 0x0d, 0x09, 0x06, 0xbf, 0x01, 0xff, 0xd1, + 0x25, 0xd1, 0x01, 0xd2, 0x26, 0xd1, 0x41, 0x47, 0xcf, 0x4e, 0x01, 0xd1, + 0x01, 0x44, 0x30, 0x3b, 0x2b, 0xd1, 0x01, 0x45, 0xf5, 0xb0, 0x2a, 0xd1, + 0x41, 0x49, 0x77, 0xb7, 0x93, 0xd1, 0x01, 0x4a, 0xf1, 0xaa, 0xa9, 0xd1, + 0x41, 0x45, 0x9b, 0xe1, 0x0a, 0xd1, 0x01, 0x47, 0x97, 0xd2, 0x09, 0xd1, + 0x01, 0x42, 0xf2, 0x1b, 0xb4, 0xd1, 0x81, 0x06, 0x4c, 0x2b, 0x95, 0x04, + 0xd1, 0x41, 0x44, 0xbd, 0x2d, 0xb5, 0xd1, 0x41, 0x45, 0x09, 0xbf, 0x21, + 0xd1, 0x01, 0x46, 0x80, 0xd9, 0x13, 0xd1, 0x01, 0x50, 0x26, 0x64, 0x45, + 0xd1, 0x01, 0xac, 0xef, 0x01, 0xaf, 0x14, 0xb2, 0x06, 0x47, 0x0c, 0xd7, + 0x35, 0xd1, 0x41, 0x47, 0x79, 0xb7, 0x92, 0xd1, 0x01, 0x43, 0x7c, 0xf4, + 0xcf, 0xd1, 0x41, 0x42, 0xf0, 0x10, 0x0c, 0xd1, 0x01, 0xad, 0x01, 0xff, + 0x07, 0x35, 0x16, 0x06, 0x48, 0x60, 0xc8, 0x34, 0xd1, 0x41, 0xa1, 0xb0, + 0x01, 0x44, 0xb4, 0x9a, 0x89, 0xd1, 0x01, 0x02, 0x3b, 0x01, 0x93, 0x01, + 0x02, 0xd5, 0x04, 0x71, 0x48, 0xa8, 0xc6, 0xac, 0xd1, 0x01, 0x45, 0x3f, + 0xe8, 0x82, 0xd1, 0x01, 0x47, 0x23, 0xd3, 0x7f, 0xd1, 0x81, 0x58, 0x43, + 0x76, 0x06, 0x86, 0xd1, 0x01, 0xb3, 0x27, 0xb4, 0x06, 0x46, 0xf4, 0xe0, + 0xab, 0xd1, 0x41, 0x45, 0x30, 0x7d, 0x7d, 0xd1, 0x01, 0xb2, 0x01, 0xff, + 0x06, 0x09, 0x78, 0x06, 0x4b, 0x99, 0x9d, 0x8b, 0xd1, 0x41, 0xd1, 0x67, + 0xd1, 0x01, 0xd2, 0x68, 0xd1, 0x01, 0xd3, 0x69, 0xd1, 0x41, 0x44, 0x7e, + 0xa9, 0x88, 0xd1, 0x01, 0x4d, 0x46, 0x86, 0xad, 0xd1, 0x01, 0x50, 0x06, + 0x66, 0x66, 0xd1, 0x01, 0xb4, 0x01, 0xff, 0x05, 0x31, 0xb5, 0x06, 0x42, + 0xb5, 0x05, 0x65, 0xd1, 0x41, 0x46, 0x22, 0xdd, 0x7e, 0xd1, 0x01, 0xef, + 0x7c, 0xd1, 0x41, 0x49, 0x2e, 0xb5, 0x80, 0xd1, 0x41, 0x03, 0xa7, 0x57, + 0x06, 0x42, 0xba, 0x04, 0x87, 0xd1, 0x41, 0xd1, 0x6e, 0xd1, 0x01, 0xd2, + 0x6f, 0xd1, 0x01, 0xd3, 0x70, 0xd1, 0x01, 0xd4, 0x71, 0xd1, 0x01, 0xd5, + 0x72, 0xd1, 0x41, 0x42, 0x52, 0x00, 0x85, 0xd1, 0x01, 0x4b, 0x16, 0xa4, + 0x8a, 0xd1, 0x01, 0x46, 0x42, 0xe1, 0xaa, 0xd1, 0x41, 0x45, 0xdb, 0x04, + 0x7b, 0xd1, 0x81, 0x06, 0x4f, 0x37, 0x74, 0x6d, 0xd1, 0x41, 0x49, 0x2e, + 0xb5, 0x81, 0xd1, 0x41, 0xa9, 0x11, 0x0f, 0x73, 0x74, 0x01, 0xff, 0x45, + 0x0c, 0x03, 0x5b, 0xd1, 0x01, 0x45, 0xad, 0x02, 0x5a, 0xd1, 0x41, 0x45, + 0x5d, 0xe8, 0xd7, 0xd1, 0x01, 0x43, 0xc4, 0x32, 0xd5, 0xd1, 0x41, 0x05, + 0x9e, 0x3f, 0x2e, 0xb2, 0x01, 0xff, 0x02, 0x0e, 0x03, 0x1d, 0xa5, 0x01, + 0xff, 0x48, 0xc8, 0xc3, 0x12, 0xd1, 0x01, 0xb6, 0x01, 0xff, 0xe5, 0x5c, + 0xd1, 0x01, 0x42, 0x5f, 0x03, 0xb8, 0xd1, 0xc1, 0x00, 0x45, 0xe1, 0x65, + 0xc3, 0xd1, 0x41, 0xe5, 0x14, 0xd1, 0x01, 0x43, 0x67, 0x09, 0x15, 0xd1, + 0x41, 0x44, 0x99, 0xbd, 0x73, 0xd1, 0x01, 0x46, 0x97, 0x35, 0x79, 0xd1, + 0x01, 0x44, 0xb1, 0xf2, 0x77, 0xd1, 0x01, 0x43, 0xd8, 0x25, 0x75, 0xd1, + 0x41, 0x44, 0xa5, 0x01, 0x84, 0xd1, 0x01, 0x42, 0x50, 0x02, 0x83, 0xd1, + 0x41, 0x4b, 0x0e, 0x98, 0x98, 0xf3, 0x41, 0x49, 0x03, 0xb9, 0x6d, 0x26, + 0x00, 0x4c, 0x67, 0x92, 0x6e, 0x26, 0x00, 0x4a, 0xf5, 0xb0, 0x6f, 0x26, + 0x40, 0x46, 0x24, 0x69, 0x64, 0xcc, 0x41, 0x04, 0x10, 0x9c, 0x69, 0xa9, + 0x01, 0xff, 0x43, 0xef, 0x6b, 0xb8, 0x22, 0x00, 0x02, 0xbb, 0x04, 0x16, + 0x43, 0x9c, 0x12, 0x8c, 0x22, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4e, 0xfc, + 0x24, 0x8d, 0x22, 0x00, 0x45, 0x4d, 0x17, 0x8e, 0x22, 0x40, 0x4f, 0x7b, + 0x6c, 0xb6, 0xf3, 0x01, 0x08, 0xbd, 0x04, 0x01, 0xff, 0x44, 0x5a, 0x03, + 0xd7, 0x00, 0x80, 0x04, 0xf8, 0x15, 0x27, 0x40, 0x80, 0x01, 0xff, 0x03, + 0xe1, 0x05, 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0x3a, 0x1e, 0x30, + 0x2a, 0x00, 0x48, 0xe3, 0x59, 0x31, 0x2a, 0x40, 0x4d, 0x0f, 0x82, 0x37, + 0x2a, 0x00, 0x50, 0x86, 0x64, 0x34, 0x2a, 0x00, 0x51, 0xa3, 0x5d, 0x35, + 0x2a, 0x00, 0x48, 0x01, 0x02, 0x3b, 0x2a, 0x40, 0x07, 0xec, 0x05, 0x06, + 0x4c, 0xf8, 0x26, 0xa9, 0x12, 0x41, 0xe1, 0x80, 0x12, 0x01, 0xa2, 0xca, + 0x01, 0xa3, 0xbd, 0x01, 0xa4, 0x9e, 0x01, 0xe5, 0x83, 0x12, 0x01, 0xa7, + 0x8d, 0x01, 0x42, 0x22, 0x00, 0xa6, 0x12, 0x01, 0xe9, 0x81, 0x12, 0x01, + 0xaa, 0x77, 0xab, 0x6b, 0x42, 0x74, 0x00, 0xa3, 0x12, 0x01, 0x42, 0x6c, + 0x00, 0xa0, 0x12, 0x01, 0xae, 0x4d, 0xb0, 0x41, 0xb2, 0x2f, 0x42, 0x40, + 0x06, 0xa5, 0x12, 0x01, 0xb4, 0x10, 0xf5, 0x82, 0x12, 0x01, 0x42, 0xf5, + 0x0a, 0xa4, 0x12, 0x01, 0x42, 0xbc, 0x22, 0xa1, 0x12, 0x41, 0xe1, 0x96, + 0x12, 0x01, 0x42, 0x22, 0x00, 0x97, 0x12, 0x01, 0xb4, 0x01, 0xff, 0xe1, + 0x90, 0x12, 0x01, 0x42, 0x22, 0x00, 0x91, 0x12, 0x41, 0xe1, 0xa2, 0x12, + 0x01, 0x42, 0x22, 0x00, 0xa8, 0x12, 0x01, 0x42, 0x71, 0x00, 0xa7, 0x12, + 0x41, 0xe1, 0x9b, 0x12, 0x01, 0x42, 0x22, 0x00, 0x9c, 0x12, 0x41, 0xe1, + 0x9a, 0x12, 0x01, 0x42, 0x2a, 0x05, 0x95, 0x12, 0x01, 0x42, 0xbc, 0x22, + 0x8f, 0x12, 0x41, 0xe1, 0x84, 0x12, 0x01, 0x42, 0x22, 0x00, 0x85, 0x12, + 0x41, 0xe1, 0x8c, 0x12, 0x01, 0x42, 0x56, 0x19, 0x8d, 0x12, 0x41, 0xe1, + 0x86, 0x12, 0x01, 0x42, 0x22, 0x00, 0x88, 0x12, 0x41, 0xe1, 0x98, 0x12, + 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x99, 0x12, 0x41, 0xe1, 0x92, 0x12, + 0x01, 0x42, 0xf0, 0x10, 0x93, 0x12, 0x01, 0x42, 0x22, 0x00, 0x94, 0x12, + 0x41, 0xe1, 0x8a, 0x12, 0x01, 0x42, 0x22, 0x00, 0x8b, 0x12, 0x41, 0xe1, + 0x9d, 0x12, 0x01, 0x42, 0x22, 0x00, 0x9f, 0x12, 0x41, 0x4c, 0x87, 0x00, + 0x6b, 0x22, 0x00, 0x49, 0xec, 0x00, 0x6a, 0x22, 0x40, 0xa4, 0xb8, 0x01, + 0x07, 0xec, 0x05, 0x01, 0xff, 0xe1, 0x46, 0x6a, 0x01, 0x42, 0x16, 0x00, + 0x44, 0x6a, 0x01, 0x43, 0x70, 0x38, 0x4b, 0x6a, 0x01, 0x42, 0xf0, 0x10, + 0x45, 0x6a, 0x81, 0x97, 0x01, 0xe5, 0x58, 0x6a, 0x81, 0x8d, 0x01, 0x02, + 0x22, 0x00, 0x80, 0x01, 0xab, 0x6e, 0x42, 0x74, 0x00, 0x5b, 0x6a, 0x81, + 0x63, 0xad, 0x55, 0xae, 0x47, 0xef, 0x52, 0x6a, 0x81, 0x3a, 0xb0, 0x2e, + 0xb2, 0x24, 0x43, 0xa3, 0x0c, 0x54, 0x6a, 0x01, 0xb4, 0x0c, 0x42, 0xa9, + 0x01, 0x57, 0x6a, 0x01, 0x42, 0xa9, 0x47, 0x42, 0x6a, 0x41, 0xe1, 0x40, + 0x6a, 0x01, 0x42, 0xd5, 0x18, 0x5e, 0x6a, 0x01, 0x43, 0xe6, 0x01, 0x55, + 0x6a, 0x41, 0xe9, 0x5d, 0x6a, 0x01, 0xef, 0x53, 0x6a, 0x41, 0xe1, 0x50, + 0x6a, 0x01, 0x42, 0x49, 0x00, 0x47, 0x6a, 0x41, 0xec, 0x4d, 0x6a, 0x01, + 0xef, 0x51, 0x6a, 0x41, 0x42, 0xf1, 0x06, 0x41, 0x6a, 0x01, 0x42, 0x9e, + 0x01, 0x4f, 0x6a, 0x41, 0x43, 0x61, 0x87, 0x4e, 0x6a, 0x01, 0x42, 0x29, + 0x02, 0x43, 0x6a, 0x41, 0xee, 0x5a, 0x6a, 0x41, 0x44, 0x95, 0xef, 0x4c, + 0x6a, 0x01, 0x43, 0x15, 0x52, 0x48, 0x6a, 0x01, 0xef, 0x59, 0x6a, 0x41, + 0xe9, 0x5c, 0x6a, 0x01, 0xef, 0x49, 0x6a, 0x41, 0xe1, 0x56, 0x6a, 0x41, + 0xe9, 0x4a, 0x6a, 0x41, 0x44, 0x73, 0x20, 0x6e, 0x6a, 0x01, 0x05, 0xf0, + 0x06, 0x06, 0x4b, 0x09, 0xa1, 0x6f, 0x6a, 0x41, 0x45, 0x12, 0x0b, 0x68, + 0x6a, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x69, 0x6a, 0x01, 0x43, 0x0e, + 0x0b, 0x61, 0x6a, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x60, + 0x6a, 0x41, 0x44, 0x25, 0x01, 0x63, 0x6a, 0x01, 0x42, 0x15, 0x02, 0x62, + 0x6a, 0x41, 0x44, 0xc9, 0x1d, 0x67, 0x6a, 0x01, 0x42, 0x01, 0x26, 0x66, + 0x6a, 0x41, 0x43, 0xd2, 0x05, 0x65, 0x6a, 0x01, 0x43, 0xf6, 0x06, 0x64, + 0x6a, 0x41, 0x4a, 0x4f, 0x4b, 0xf1, 0xf4, 0x81, 0x86, 0x1f, 0xa4, 0xcb, + 0x0a, 0xae, 0xaa, 0x01, 0xaf, 0x85, 0x01, 0x03, 0xd6, 0x05, 0x77, 0xb4, + 0x50, 0xb5, 0x0c, 0x4a, 0x4d, 0xb3, 0xa5, 0xf3, 0x01, 0x43, 0x7d, 0x78, + 0xff, 0xf5, 0x41, 0x02, 0x11, 0x00, 0x1c, 0x42, 0x46, 0x03, 0x01, 0xf4, + 0x81, 0x06, 0x42, 0x53, 0x00, 0x44, 0xf4, 0x41, 0x80, 0x01, 0xff, 0x44, + 0x0c, 0x08, 0x2d, 0xf4, 0x01, 0x44, 0xac, 0xe0, 0xa4, 0xfa, 0x41, 0x45, + 0xaf, 0xe1, 0xfb, 0xf5, 0x01, 0x43, 0x56, 0x07, 0xf0, 0x26, 0xc0, 0x00, + 0x80, 0x01, 0xff, 0x49, 0x9f, 0xb6, 0xb5, 0xf6, 0x01, 0x48, 0x70, 0xc4, + 0xa0, 0xf6, 0x01, 0x47, 0xc9, 0x71, 0x9e, 0xf6, 0x41, 0x4d, 0xe0, 0x7c, + 0x36, 0xf9, 0x01, 0x02, 0x0c, 0x00, 0x01, 0xff, 0x80, 0x0c, 0x4f, 0x0f, + 0x6f, 0xbc, 0xf9, 0x01, 0x43, 0x04, 0x20, 0xe3, 0xf6, 0x41, 0x44, 0xd6, + 0xdc, 0xe5, 0xf6, 0x01, 0x47, 0xb5, 0xd5, 0xf5, 0xf6, 0x41, 0xe5, 0x4c, + 0xf5, 0x01, 0x43, 0xc6, 0x07, 0x9f, 0xf9, 0x41, 0x48, 0xe8, 0xc4, 0xf0, + 0xf5, 0x01, 0x02, 0x92, 0x00, 0x06, 0x42, 0x46, 0x03, 0xce, 0xfa, 0x41, + 0x44, 0x5f, 0x2c, 0x6e, 0xf9, 0x01, 0x46, 0x9a, 0xdd, 0xf5, 0xcd, 0x01, + 0x50, 0x76, 0x68, 0x91, 0xf3, 0x41, 0x02, 0xc6, 0x1c, 0x85, 0x09, 0x07, + 0x5c, 0xd1, 0x35, 0x43, 0x09, 0x24, 0x12, 0xf4, 0x81, 0x28, 0xaf, 0x01, + 0xff, 0x09, 0x06, 0x96, 0x0c, 0x44, 0x63, 0x4c, 0x9d, 0xf6, 0x01, 0x4d, + 0xf7, 0x88, 0x8d, 0x23, 0x40, 0x45, 0x52, 0x72, 0x00, 0xd3, 0x01, 0xb9, + 0x01, 0xff, 0x43, 0x1c, 0x01, 0x8a, 0x26, 0x00, 0x42, 0x9e, 0x01, 0x8b, + 0x26, 0x40, 0x45, 0x0b, 0x08, 0x35, 0xf4, 0x41, 0x45, 0x7d, 0x07, 0x00, + 0x18, 0x80, 0xb3, 0x08, 0x02, 0x13, 0x05, 0xa2, 0x08, 0xa4, 0xd3, 0x07, + 0x48, 0xce, 0x29, 0x01, 0x18, 0x00, 0xa6, 0x9f, 0x07, 0x4e, 0xa9, 0x78, + 0x67, 0x16, 0x81, 0x91, 0x07, 0x07, 0xec, 0x05, 0x68, 0x07, 0x1c, 0xd3, + 0x58, 0x46, 0x4e, 0xde, 0x0a, 0x18, 0x00, 0x4d, 0x0d, 0x88, 0x61, 0x16, + 0x81, 0x3a, 0xb3, 0x1a, 0xb4, 0x06, 0x4f, 0x91, 0x74, 0x0e, 0x18, 0x40, + 0x4f, 0xfe, 0x70, 0x06, 0x18, 0x00, 0x59, 0x0f, 0x26, 0x63, 0x16, 0x01, + 0x66, 0x71, 0x07, 0x6c, 0x16, 0x41, 0x5c, 0x16, 0x18, 0x07, 0x18, 0x00, + 0x4a, 0x78, 0x07, 0x69, 0x16, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, + 0x4f, 0x88, 0x07, 0x6b, 0x16, 0x01, 0x48, 0x28, 0x05, 0x6a, 0x16, 0x41, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x4f, 0x88, 0x07, 0x66, 0x16, 0x01, 0x48, + 0x28, 0x05, 0x65, 0x16, 0x41, 0x45, 0x13, 0x05, 0x08, 0x18, 0x00, 0x49, + 0x81, 0x16, 0x09, 0x18, 0x40, 0xe1, 0x20, 0x18, 0x80, 0xef, 0x04, 0x42, + 0x16, 0x00, 0x2a, 0x18, 0x00, 0x02, 0x6d, 0x14, 0xd5, 0x04, 0x42, 0xf0, + 0x10, 0x33, 0x18, 0x00, 0xe5, 0x21, 0x18, 0x80, 0xc5, 0x04, 0x42, 0x0c, + 0x08, 0x39, 0x18, 0x00, 0x42, 0x24, 0x02, 0x2d, 0x18, 0x00, 0x43, 0x3b, + 0x41, 0x3e, 0x18, 0x00, 0xe9, 0x22, 0x18, 0x00, 0x42, 0x56, 0x19, 0x35, + 0x18, 0x00, 0xab, 0x9c, 0x04, 0xac, 0x8f, 0x04, 0x42, 0x6c, 0x00, 0x2e, + 0x18, 0x80, 0x8b, 0x03, 0x42, 0x2a, 0x05, 0x28, 0x18, 0x00, 0xef, 0x23, + 0x18, 0x80, 0xfb, 0x02, 0x42, 0xbb, 0x09, 0x2b, 0x18, 0x00, 0x42, 0x43, + 0x14, 0x2c, 0x18, 0x00, 0x42, 0x71, 0x00, 0x37, 0x18, 0x00, 0xb3, 0xdc, + 0x01, 0xb4, 0x28, 0xf5, 0x24, 0x18, 0x80, 0x1f, 0x42, 0xa9, 0x01, 0x38, + 0x18, 0x00, 0x42, 0xbc, 0x22, 0x36, 0x18, 0x00, 0xba, 0x01, 0xff, 0xe1, + 0x3d, 0x18, 0x00, 0x42, 0x49, 0x00, 0x41, 0x18, 0x00, 0x42, 0x71, 0x00, + 0x3f, 0x18, 0x40, 0xe5, 0x26, 0x18, 0x40, 0xe1, 0x32, 0x18, 0x00, 0x04, + 0xfe, 0x70, 0x06, 0x42, 0x40, 0x06, 0x3c, 0x18, 0x40, 0xa1, 0x8b, 0x01, + 0x42, 0x16, 0x00, 0x4b, 0x18, 0x00, 0x43, 0x91, 0x20, 0x52, 0x18, 0x00, + 0xa4, 0x73, 0xe5, 0x44, 0x18, 0x00, 0x42, 0x24, 0x02, 0x4e, 0x18, 0x80, + 0x64, 0x43, 0x3b, 0x41, 0x59, 0x18, 0x00, 0xe9, 0x45, 0x18, 0x00, 0xaa, + 0x4e, 0x42, 0x1b, 0x02, 0x57, 0x18, 0x00, 0x4f, 0xf0, 0x6f, 0x43, 0x18, + 0x00, 0x42, 0x6c, 0x00, 0x4f, 0x18, 0x00, 0x43, 0x4a, 0x07, 0x5b, 0x18, + 0x00, 0xef, 0x46, 0x18, 0x80, 0x2d, 0x42, 0xbb, 0x09, 0x4c, 0x18, 0x00, + 0x42, 0x43, 0x14, 0x4d, 0x18, 0x00, 0xb4, 0x15, 0xf5, 0x47, 0x18, 0x80, + 0x0c, 0x42, 0xa9, 0x01, 0x56, 0x18, 0x00, 0x42, 0xbc, 0x22, 0x55, 0x18, + 0x40, 0xe5, 0x49, 0x18, 0x40, 0xe1, 0x50, 0x18, 0x00, 0x42, 0x40, 0x06, + 0x54, 0x18, 0x40, 0xe5, 0x48, 0x18, 0x40, 0xe1, 0x53, 0x18, 0x00, 0x42, + 0x1b, 0x01, 0x5a, 0x18, 0x40, 0xe1, 0x58, 0x18, 0x40, 0xe1, 0x51, 0x18, + 0x00, 0x42, 0x59, 0x00, 0x5c, 0x18, 0x40, 0x08, 0xf5, 0xb5, 0x06, 0x42, + 0x1d, 0x01, 0x4a, 0x18, 0x40, 0x42, 0x12, 0x00, 0x98, 0x18, 0x00, 0x43, + 0xcb, 0xc0, 0x99, 0x18, 0x40, 0xe1, 0x30, 0x18, 0x00, 0x42, 0x22, 0x00, + 0x31, 0x18, 0x00, 0x04, 0x16, 0x18, 0x01, 0xff, 0x43, 0x1c, 0x01, 0x62, + 0x18, 0x00, 0x43, 0x91, 0x20, 0x71, 0x18, 0x00, 0x42, 0xf0, 0x10, 0x69, + 0x18, 0x00, 0xe5, 0x5d, 0x18, 0x00, 0x42, 0x0c, 0x08, 0x6b, 0x18, 0x00, + 0x42, 0x24, 0x02, 0x64, 0x18, 0x80, 0x54, 0x42, 0x22, 0x00, 0x65, 0x18, + 0x80, 0x49, 0xe9, 0x5e, 0x18, 0x80, 0x40, 0x42, 0x56, 0x19, 0x6a, 0x18, + 0x00, 0x42, 0x1b, 0x02, 0x63, 0x18, 0x00, 0x42, 0xbb, 0x09, 0x66, 0x18, + 0x00, 0x43, 0x8f, 0x95, 0x70, 0x18, 0x00, 0x43, 0xa4, 0x02, 0x67, 0x18, + 0x00, 0xb4, 0x16, 0xf5, 0x61, 0x18, 0x80, 0x0d, 0xba, 0x01, 0xff, 0xe1, + 0x6f, 0x18, 0x00, 0x42, 0x22, 0x00, 0x72, 0x18, 0x40, 0xe5, 0x60, 0x18, + 0x40, 0xe1, 0x68, 0x18, 0x00, 0x42, 0x40, 0x06, 0x6e, 0x18, 0x40, 0xf9, + 0x5f, 0x18, 0x40, 0xe1, 0x6d, 0x18, 0x40, 0xe1, 0x6c, 0x18, 0x40, 0xe5, + 0x25, 0x18, 0x40, 0x05, 0x1e, 0xd3, 0x01, 0xff, 0x09, 0xf4, 0xb5, 0x1c, + 0x42, 0x0c, 0x08, 0x76, 0x18, 0x00, 0xe9, 0x73, 0x18, 0x00, 0x42, 0x1b, + 0x02, 0x74, 0x18, 0x00, 0x42, 0x71, 0x00, 0x75, 0x18, 0x00, 0x43, 0xcb, + 0xc0, 0x77, 0x18, 0x40, 0x43, 0xd9, 0x2a, 0xa8, 0x18, 0x00, 0xa3, 0x45, + 0xa4, 0x37, 0x43, 0x0e, 0x9c, 0x9a, 0x18, 0x00, 0x43, 0x9c, 0x45, 0x9d, + 0x18, 0x00, 0x43, 0x2a, 0x09, 0xaa, 0x18, 0x00, 0x43, 0x39, 0x48, 0x9b, + 0x18, 0x00, 0x43, 0xfb, 0x20, 0xa2, 0x18, 0x00, 0xb4, 0x0d, 0xba, 0x01, + 0xff, 0xe1, 0xa5, 0x18, 0x00, 0x42, 0x22, 0x00, 0xa4, 0x18, 0x40, 0xe1, + 0xa0, 0x18, 0x00, 0x42, 0x12, 0x00, 0x9e, 0x18, 0x40, 0x43, 0xe7, 0x4b, + 0x9f, 0x18, 0x00, 0x42, 0x22, 0x00, 0xa1, 0x18, 0x40, 0xe1, 0x9c, 0x18, + 0x00, 0x42, 0xbc, 0x22, 0xa3, 0x18, 0x40, 0xe1, 0x2f, 0x18, 0x00, 0x42, + 0x22, 0x00, 0x40, 0x18, 0x40, 0xe1, 0x3a, 0x18, 0x00, 0x42, 0x22, 0x00, + 0x3b, 0x18, 0x40, 0xe5, 0x27, 0x18, 0x40, 0xe1, 0x34, 0x18, 0x80, 0x04, + 0xe9, 0x42, 0x18, 0x40, 0x4e, 0xdc, 0x19, 0x78, 0x18, 0x40, 0x08, 0xf5, + 0xb5, 0x06, 0x42, 0x1d, 0x01, 0x29, 0x18, 0x40, 0xe1, 0x87, 0x18, 0x80, + 0x96, 0x01, 0x46, 0x25, 0x9d, 0x85, 0x18, 0x00, 0x42, 0x37, 0x00, 0x8b, + 0x18, 0x00, 0xa4, 0x71, 0x05, 0x22, 0x00, 0x63, 0xe9, 0x88, 0x18, 0x80, + 0x58, 0x42, 0x1b, 0x02, 0x89, 0x18, 0x00, 0xae, 0x44, 0xb0, 0x38, 0x43, + 0xfb, 0x20, 0x94, 0x18, 0x00, 0xb4, 0x19, 0x47, 0xe8, 0x70, 0x83, 0x18, + 0x00, 0x4b, 0xdc, 0xa4, 0x81, 0x18, 0x00, 0xba, 0x01, 0xff, 0xe1, 0x96, + 0x18, 0x00, 0x42, 0x22, 0x00, 0x95, 0x18, 0x40, 0xe1, 0x90, 0x18, 0x00, + 0x4b, 0x20, 0x9d, 0x86, 0x18, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x8c, 0x18, + 0x00, 0x42, 0x22, 0x00, 0x8d, 0x18, 0x40, 0xe1, 0x92, 0x18, 0x00, 0x42, + 0x22, 0x00, 0x93, 0x18, 0x40, 0x42, 0x24, 0x02, 0x8a, 0x18, 0x00, 0x42, + 0x2a, 0x05, 0x8f, 0x18, 0x40, 0x4f, 0xe0, 0x70, 0x84, 0x18, 0x40, 0xf5, + 0xa6, 0x18, 0x00, 0x42, 0xbc, 0x22, 0xa7, 0x18, 0x40, 0xe1, 0x91, 0x18, + 0x80, 0x06, 0x42, 0xf0, 0x10, 0x8e, 0x18, 0x40, 0x45, 0x87, 0xe6, 0xa9, + 0x18, 0x00, 0x44, 0x21, 0xf1, 0x82, 0x18, 0x40, 0xe8, 0x97, 0x18, 0x00, + 0x4b, 0x64, 0xa0, 0x80, 0x18, 0x40, 0x55, 0x82, 0x07, 0x68, 0x16, 0x41, + 0x48, 0xd2, 0x46, 0x05, 0x18, 0x00, 0x17, 0x97, 0x30, 0x06, 0x48, 0x82, + 0x16, 0x03, 0x18, 0x40, 0x44, 0xf5, 0x06, 0x0f, 0x18, 0x00, 0x43, 0x0e, + 0x0b, 0x0b, 0x18, 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x0d, 0x18, + 0x00, 0x42, 0x15, 0x02, 0x0c, 0x18, 0x40, 0x05, 0xf0, 0x06, 0x06, 0x59, + 0x60, 0x25, 0x62, 0x16, 0x41, 0x45, 0x12, 0x0b, 0x18, 0x18, 0x00, 0xa6, + 0x2e, 0x44, 0xcf, 0x2a, 0x19, 0x18, 0x00, 0x43, 0x0e, 0x0b, 0x11, 0x18, + 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x10, 0x18, 0x40, 0x44, + 0x25, 0x01, 0x13, 0x18, 0x00, 0x42, 0x15, 0x02, 0x12, 0x18, 0x40, 0x44, + 0xc9, 0x1d, 0x17, 0x18, 0x00, 0x42, 0x01, 0x26, 0x16, 0x18, 0x40, 0x43, + 0xd2, 0x05, 0x15, 0x18, 0x00, 0x43, 0xf6, 0x06, 0x14, 0x18, 0x40, 0x43, + 0xd7, 0x02, 0x04, 0x18, 0x00, 0x43, 0x15, 0x05, 0x02, 0x18, 0x40, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x4f, 0x88, 0x07, 0x64, 0x16, 0x01, 0x48, 0x28, + 0x05, 0x60, 0x16, 0x41, 0x80, 0x06, 0x4b, 0x1b, 0x64, 0x11, 0xf9, 0x41, + 0x43, 0xd7, 0x38, 0xb0, 0xf4, 0x01, 0x4a, 0xa7, 0xb3, 0xb8, 0xf4, 0x41, + 0xa5, 0xa9, 0x14, 0xa9, 0x06, 0x4b, 0x42, 0xa4, 0x0a, 0x2a, 0x40, 0x80, + 0xba, 0x10, 0x05, 0x7c, 0x0c, 0x01, 0xff, 0x59, 0x53, 0x23, 0x5b, 0xab, + 0x00, 0x07, 0xec, 0x05, 0x01, 0xff, 0xa1, 0x95, 0x10, 0xa2, 0xfc, 0x0f, + 0xa3, 0xa6, 0x0c, 0xa4, 0xe3, 0x0b, 0xa5, 0x8a, 0x0b, 0xa7, 0xee, 0x0a, + 0xa8, 0xc4, 0x0a, 0xac, 0x9e, 0x09, 0xad, 0xd1, 0x08, 0x4a, 0xf7, 0xae, + 0xfe, 0x02, 0x00, 0xb0, 0xbc, 0x08, 0xb2, 0xda, 0x07, 0xb3, 0x47, 0xb4, + 0x39, 0xb5, 0x1d, 0xb6, 0x0f, 0xb9, 0x01, 0xff, 0x57, 0x2d, 0x2d, 0xeb, + 0x02, 0x00, 0x56, 0x87, 0x34, 0xea, 0x02, 0x40, 0x4c, 0xce, 0x0b, 0xc8, + 0x02, 0x00, 0x46, 0x5a, 0xd7, 0xec, 0x02, 0x40, 0x4a, 0x43, 0xae, 0xed, + 0x02, 0x00, 0x02, 0x20, 0x00, 0x04, 0xf3, 0x70, 0xa7, 0x40, 0x49, 0xe1, + 0x01, 0xc4, 0x02, 0x00, 0x44, 0xf5, 0x38, 0xd4, 0x02, 0x40, 0x4f, 0x8a, + 0x3b, 0xd0, 0x02, 0x00, 0x4b, 0x28, 0x0a, 0xbb, 0x02, 0x40, 0xa8, 0x82, + 0x07, 0x05, 0x5e, 0x07, 0x21, 0x0a, 0x21, 0xb2, 0x11, 0x0b, 0x70, 0x06, + 0x01, 0xff, 0x55, 0x84, 0x3b, 0x82, 0x07, 0x01, 0x50, 0x89, 0x3b, 0x81, + 0x07, 0x41, 0x49, 0xe4, 0x42, 0x20, 0xa7, 0x00, 0x48, 0x1d, 0xb5, 0x21, + 0xa7, 0x40, 0xe1, 0x43, 0x1d, 0x80, 0xc7, 0x06, 0xe2, 0x47, 0x1d, 0x80, + 0xa9, 0x06, 0xe3, 0x9c, 0x1d, 0x80, 0xb7, 0x05, 0xe4, 0x48, 0x1d, 0x80, + 0xe7, 0x04, 0xe5, 0x49, 0x1d, 0x80, 0xc9, 0x04, 0xe6, 0xa0, 0x1d, 0x80, + 0xbd, 0x04, 0xe7, 0x4d, 0x1d, 0x80, 0x9a, 0x04, 0xe8, 0xb0, 0x02, 0x80, + 0xf7, 0x03, 0xa9, 0xe8, 0x03, 0xea, 0xb2, 0x02, 0x80, 0xdc, 0x03, 0xeb, + 0x4f, 0x1d, 0x00, 0xec, 0xe1, 0x02, 0x80, 0x8a, 0x03, 0xed, 0x50, 0x1d, + 0x80, 0xfe, 0x02, 0x07, 0xc8, 0x04, 0xed, 0x02, 0xef, 0x52, 0x1d, 0x80, + 0xd4, 0x02, 0xf0, 0x56, 0x1d, 0x80, 0xc8, 0x02, 0xf1, 0xa5, 0x07, 0x01, + 0xf2, 0xb3, 0x02, 0x80, 0x93, 0x02, 0xf3, 0xe2, 0x02, 0x80, 0xe9, 0x01, + 0xf4, 0x57, 0x1d, 0x80, 0x51, 0xf5, 0x58, 0x1d, 0x80, 0x38, 0xf6, 0x5b, + 0x1d, 0x80, 0x22, 0xf7, 0xb7, 0x02, 0x00, 0xf8, 0xe3, 0x02, 0x00, 0xf9, + 0xb8, 0x02, 0x00, 0xfa, 0xbb, 0x1d, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, + 0xff, 0x44, 0x72, 0x0b, 0xbd, 0x1d, 0x00, 0x4e, 0xa2, 0x0e, 0xbc, 0x1d, + 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0xac, 0x0e, 0xb9, 0x1d, 0x00, + 0x4a, 0x4b, 0xb0, 0xb0, 0x07, 0x41, 0x80, 0x06, 0x46, 0xcf, 0x15, 0xb7, + 0x1d, 0x40, 0x43, 0x16, 0x00, 0xb6, 0x1d, 0x00, 0x4e, 0xc9, 0x7e, 0x5f, + 0xab, 0x40, 0x06, 0x50, 0x00, 0x82, 0x01, 0x53, 0xad, 0x48, 0xab, 0x07, + 0x01, 0x4b, 0xec, 0x9b, 0xae, 0x07, 0x01, 0x44, 0xc8, 0x95, 0xbf, 0x1d, + 0x00, 0x49, 0x56, 0xbd, 0x54, 0x1d, 0x00, 0x49, 0x18, 0xbf, 0xac, 0x07, + 0x81, 0x5d, 0x06, 0x71, 0x07, 0x01, 0xff, 0xe1, 0x44, 0x1d, 0x80, 0x49, + 0xe8, 0xa3, 0x1d, 0x00, 0xe9, 0x4e, 0x1d, 0x00, 0xed, 0x5a, 0x1d, 0x80, + 0x36, 0x46, 0x1e, 0x29, 0x4c, 0x1d, 0x00, 0xf2, 0xb4, 0x02, 0x80, 0x13, + 0xf6, 0xba, 0x1d, 0x00, 0xf7, 0x69, 0xab, 0x00, 0xf9, 0xa0, 0x07, 0xc1, + 0x00, 0x4a, 0x55, 0xa6, 0xa1, 0x07, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, + 0x44, 0xac, 0x0e, 0xb5, 0x02, 0x00, 0x48, 0x91, 0x75, 0xa6, 0x07, 0xc1, + 0x00, 0x53, 0x57, 0x47, 0xa7, 0x07, 0x41, 0x4e, 0x8b, 0x75, 0xad, 0x1d, + 0x40, 0xe5, 0x46, 0x1d, 0x00, 0x44, 0x3f, 0xe4, 0x9b, 0x1d, 0x40, 0x54, + 0x9c, 0x0e, 0xad, 0x07, 0x41, 0x4c, 0xf3, 0x56, 0xb5, 0x1d, 0x00, 0x4e, + 0xa2, 0x0e, 0xaf, 0x07, 0x41, 0x06, 0x50, 0x00, 0x14, 0xa3, 0x06, 0x49, + 0x08, 0xba, 0x59, 0x1d, 0x40, 0x43, 0xb6, 0x7b, 0x4a, 0x1d, 0x00, 0x46, + 0xb2, 0xca, 0xa2, 0x1d, 0x40, 0x44, 0x72, 0x0b, 0xba, 0x07, 0x01, 0x44, + 0xac, 0x0e, 0xb3, 0x1d, 0x40, 0x06, 0x50, 0x00, 0x1b, 0x48, 0x48, 0xc3, + 0x91, 0x07, 0x01, 0x08, 0xde, 0x14, 0x01, 0xff, 0xe5, 0x8e, 0x07, 0x01, + 0x4c, 0xce, 0x28, 0xe4, 0x02, 0x00, 0x46, 0x1e, 0x29, 0x9f, 0x1d, 0x40, + 0x48, 0x31, 0x72, 0xa9, 0x07, 0x01, 0x44, 0x8f, 0x17, 0xa8, 0x07, 0x41, + 0x42, 0x49, 0x00, 0xb2, 0x1d, 0x40, 0x4c, 0xda, 0x28, 0xa2, 0x07, 0x01, + 0x04, 0xf7, 0x04, 0x01, 0xff, 0xe5, 0x4b, 0x1d, 0x00, 0xef, 0x53, 0x1d, + 0x40, 0x49, 0xb1, 0x57, 0xae, 0x1d, 0x00, 0x4e, 0xa2, 0x0e, 0xaf, 0x1d, + 0x40, 0x4a, 0xa7, 0x24, 0xac, 0x1d, 0x40, 0x06, 0x50, 0x00, 0x1f, 0x43, + 0x37, 0xf4, 0x9e, 0x07, 0x81, 0x12, 0x4a, 0x9b, 0xab, 0xf9, 0xa7, 0x00, + 0x49, 0x18, 0xbf, 0x99, 0x07, 0x01, 0x49, 0xb2, 0xc1, 0x9a, 0x07, 0x41, + 0x54, 0x9c, 0x0e, 0x9f, 0x07, 0x41, 0x44, 0x5b, 0xa6, 0x9b, 0x07, 0x01, + 0x4f, 0xd3, 0x6e, 0x5d, 0xab, 0x00, 0x4c, 0x2e, 0x23, 0x5e, 0xab, 0x00, + 0x4c, 0xf3, 0x56, 0xaa, 0x1d, 0x00, 0x4e, 0xa2, 0x0e, 0xa9, 0x1d, 0xc0, + 0x00, 0x49, 0x29, 0xb4, 0x9d, 0x07, 0x41, 0x52, 0xc3, 0x4f, 0xa8, 0x1d, + 0x40, 0x4c, 0xda, 0x28, 0xa4, 0x1d, 0x00, 0x43, 0x1b, 0x05, 0xa5, 0x1d, + 0x40, 0x06, 0x50, 0x00, 0x0d, 0x43, 0x4c, 0x0a, 0x5c, 0xab, 0xc0, 0x00, + 0x4a, 0xa7, 0x24, 0x97, 0x07, 0x41, 0x44, 0xac, 0x0e, 0xb1, 0x02, 0x00, + 0x46, 0x52, 0x05, 0x95, 0x07, 0x41, 0x4a, 0xa7, 0x24, 0x93, 0x07, 0x01, + 0x44, 0x00, 0x21, 0xe0, 0x02, 0x00, 0x05, 0x87, 0x2e, 0x01, 0xff, 0x45, + 0x2c, 0x58, 0x5e, 0x1d, 0x00, 0x43, 0x53, 0x20, 0x60, 0x1d, 0x40, 0x4b, + 0xb5, 0x9b, 0x90, 0x07, 0x41, 0x42, 0x1d, 0x01, 0x51, 0x1d, 0x00, 0x42, + 0xa4, 0x02, 0xb4, 0x1d, 0x00, 0x42, 0x53, 0x00, 0x9e, 0x1d, 0x00, 0x42, + 0x54, 0x28, 0xbe, 0x1d, 0x40, 0x06, 0x50, 0x00, 0x33, 0xa5, 0x25, 0x54, + 0xc4, 0x44, 0xa1, 0x1d, 0x80, 0x18, 0x49, 0xb2, 0xc1, 0x87, 0x07, 0xc1, + 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x72, 0x0b, 0x89, 0x07, 0x01, + 0x4e, 0xa2, 0x0e, 0x88, 0x07, 0x41, 0x49, 0xc0, 0x23, 0x98, 0x07, 0x41, + 0x43, 0x49, 0x19, 0x5f, 0x1d, 0x00, 0x4a, 0x15, 0xb4, 0x8a, 0x07, 0x41, + 0x44, 0xac, 0x0e, 0x8c, 0x07, 0x81, 0x06, 0x44, 0x8f, 0x17, 0x8b, 0x07, + 0x41, 0x49, 0x3b, 0xb4, 0x8d, 0x07, 0x41, 0x4a, 0xb6, 0x48, 0x9d, 0x1d, + 0x00, 0x07, 0xe5, 0x05, 0x17, 0x42, 0x49, 0x00, 0x61, 0x1d, 0x00, 0x06, + 0x60, 0x1b, 0x01, 0xff, 0x45, 0x38, 0xaf, 0xa4, 0x07, 0x01, 0x4f, 0x75, + 0x72, 0x8f, 0x07, 0x41, 0x42, 0x80, 0x12, 0x80, 0x07, 0x01, 0xe2, 0x84, + 0x07, 0x01, 0xe7, 0x92, 0x07, 0x81, 0x36, 0xe8, 0x96, 0x07, 0x01, 0xe9, + 0xa6, 0x1d, 0x80, 0x21, 0xec, 0xab, 0x1d, 0x80, 0x16, 0xee, 0xb0, 0x1d, + 0x00, 0x42, 0x60, 0x51, 0xa3, 0x07, 0x01, 0xf2, 0xaa, 0x07, 0x01, 0xf5, + 0xb8, 0x1d, 0x00, 0xf9, 0xb2, 0x07, 0x41, 0x4a, 0x55, 0xa6, 0x9c, 0x07, + 0x41, 0x4c, 0xda, 0x28, 0xa7, 0x1d, 0x00, 0x49, 0xc6, 0xbc, 0xb6, 0x02, + 0x40, 0x4a, 0xa7, 0x24, 0x94, 0x07, 0x41, 0x4a, 0xa7, 0x24, 0x85, 0x07, + 0x01, 0x47, 0x09, 0xcf, 0xb1, 0x1d, 0x00, 0x43, 0x94, 0x0f, 0x5d, 0x1d, + 0x00, 0x4c, 0x6f, 0x93, 0x55, 0x1d, 0x40, 0xe5, 0x83, 0x07, 0x01, 0x42, + 0x9e, 0x01, 0x5c, 0x1d, 0x00, 0x44, 0x3f, 0xe4, 0x45, 0x1d, 0x40, 0x43, + 0x83, 0x79, 0xfd, 0x02, 0x00, 0x4f, 0x76, 0x71, 0x8a, 0xa7, 0x40, 0x06, + 0xd2, 0x10, 0x3d, 0xa5, 0x1d, 0x4a, 0x41, 0xab, 0xde, 0x02, 0x00, 0x05, + 0xc9, 0x00, 0x01, 0xff, 0x49, 0xe1, 0x01, 0xc3, 0x02, 0x00, 0x49, 0xfe, + 0x13, 0xbe, 0x02, 0x00, 0x44, 0xf5, 0x38, 0x6b, 0xab, 0x40, 0x61, 0x8f, + 0x0e, 0xb9, 0x07, 0x01, 0x07, 0xdf, 0x14, 0x01, 0xff, 0x45, 0x13, 0x05, + 0xbd, 0x02, 0x00, 0x4c, 0xce, 0x28, 0xc1, 0x02, 0xc0, 0x00, 0x4c, 0xda, + 0x28, 0xb4, 0x07, 0x41, 0x45, 0x94, 0x3b, 0xf8, 0x02, 0x00, 0x4a, 0xcc, + 0x41, 0x1c, 0xa7, 0x00, 0x50, 0xad, 0x00, 0x1d, 0xa7, 0x00, 0x59, 0x66, + 0x24, 0x1e, 0xa7, 0x00, 0x48, 0x29, 0x56, 0x1b, 0xa7, 0x40, 0x48, 0xe0, + 0x71, 0xd6, 0x02, 0x00, 0x44, 0xeb, 0x1a, 0xb9, 0x02, 0x40, 0x45, 0xae, + 0x70, 0xc9, 0x02, 0x00, 0xa9, 0x01, 0xff, 0xa4, 0x06, 0x48, 0x69, 0x98, + 0xd7, 0x02, 0x40, 0x80, 0x1b, 0x04, 0x80, 0x02, 0x01, 0xff, 0x07, 0x3b, + 0x01, 0x06, 0x4c, 0x15, 0x23, 0xf4, 0x02, 0x40, 0x4c, 0xfb, 0x8b, 0xf6, + 0x02, 0x00, 0x4c, 0x15, 0x23, 0xf5, 0x02, 0x40, 0x07, 0xb0, 0x1f, 0x0c, + 0x52, 0x6b, 0x53, 0x14, 0xa7, 0x00, 0x48, 0x75, 0x53, 0xe7, 0x02, 0x40, + 0x52, 0x6b, 0x53, 0x0f, 0xa7, 0x00, 0x48, 0x75, 0x53, 0x0a, 0xa7, 0x40, + 0x4c, 0xf5, 0x84, 0xb7, 0x07, 0x01, 0x04, 0xc4, 0x00, 0x86, 0x01, 0x02, + 0xd1, 0x00, 0x01, 0xff, 0x80, 0x06, 0x55, 0x06, 0x3b, 0x1a, 0xa7, 0x40, + 0x4c, 0xfb, 0x8b, 0xcf, 0x02, 0x00, 0x51, 0xcf, 0x04, 0x88, 0xa7, 0x00, + 0x02, 0x3b, 0x01, 0x53, 0x4c, 0x15, 0x23, 0xce, 0x02, 0x00, 0x59, 0x66, + 0x24, 0x1f, 0xa7, 0x00, 0x04, 0xc3, 0x00, 0x30, 0x46, 0xad, 0x70, 0xcd, + 0x02, 0x00, 0x02, 0x0d, 0x00, 0x1a, 0xb4, 0x0c, 0x4c, 0x29, 0x56, 0xf0, + 0x02, 0x00, 0x4d, 0xcd, 0x0b, 0xcc, 0x02, 0x40, 0x44, 0x36, 0x23, 0xf7, + 0x02, 0x00, 0x47, 0x76, 0x53, 0xe8, 0x02, 0x40, 0x4d, 0xd2, 0x3d, 0xf2, + 0x02, 0x00, 0x42, 0x1d, 0x01, 0xf3, 0x02, 0x40, 0x46, 0xcd, 0x00, 0xff, + 0x02, 0x80, 0x06, 0x4e, 0x6f, 0x53, 0x15, 0xa7, 0x40, 0x44, 0xe6, 0x01, + 0xf1, 0x02, 0x40, 0x05, 0xb2, 0x1f, 0x06, 0x4c, 0xce, 0x41, 0xef, 0x02, + 0x40, 0x52, 0x6b, 0x53, 0x10, 0xa7, 0x00, 0x48, 0x75, 0x53, 0x0b, 0xa7, + 0x40, 0x49, 0xe1, 0x01, 0xc2, 0x02, 0x00, 0x49, 0xfe, 0x13, 0xbf, 0x02, + 0x00, 0x44, 0xf5, 0x38, 0x6a, 0xab, 0x40, 0x54, 0x85, 0x3b, 0xd1, 0x02, + 0x00, 0x04, 0x49, 0x0b, 0x01, 0xff, 0x07, 0xb0, 0x1f, 0x0c, 0x52, 0x6b, + 0x53, 0x13, 0xa7, 0x00, 0x48, 0x75, 0x53, 0xe6, 0x02, 0x40, 0x52, 0x6b, + 0x53, 0x0e, 0xa7, 0x00, 0x48, 0x75, 0x53, 0x09, 0xa7, 0x40, 0x4b, 0xcb, + 0x9b, 0xfc, 0x10, 0x00, 0x4b, 0xcf, 0x28, 0xc0, 0x02, 0x80, 0x06, 0x4b, + 0x16, 0x23, 0xcb, 0x02, 0x40, 0x4c, 0xda, 0x28, 0xb3, 0x07, 0x41, 0x03, + 0x1b, 0x00, 0x46, 0x05, 0x77, 0xec, 0x01, 0xff, 0x05, 0x48, 0x0b, 0x21, + 0x04, 0x08, 0x05, 0x01, 0xff, 0x07, 0xb0, 0x1f, 0x0c, 0x52, 0x6b, 0x53, + 0x16, 0xa7, 0x00, 0x48, 0x75, 0x53, 0xe9, 0x02, 0x40, 0x52, 0x6b, 0x53, + 0x11, 0xa7, 0x00, 0x48, 0x75, 0x53, 0x0c, 0xa7, 0x40, 0x07, 0xb0, 0x1f, + 0x0c, 0x52, 0x6b, 0x53, 0x12, 0xa7, 0x00, 0x48, 0x75, 0x53, 0xe5, 0x02, + 0x40, 0x52, 0x6b, 0x53, 0x0d, 0xa7, 0x00, 0x48, 0x75, 0x53, 0x08, 0xa7, + 0x40, 0x49, 0xe4, 0x42, 0xfa, 0x02, 0x00, 0x48, 0x1d, 0xb5, 0xfc, 0x02, + 0x40, 0x4b, 0xdc, 0x8d, 0xb6, 0x07, 0x01, 0xaf, 0x01, 0xff, 0x02, 0xc6, + 0x00, 0x21, 0x05, 0x3d, 0x01, 0x11, 0x03, 0xa0, 0x14, 0x01, 0xff, 0x49, + 0xe1, 0x01, 0xc5, 0x02, 0x00, 0x44, 0xf5, 0x38, 0xd5, 0x02, 0x40, 0x4a, + 0x61, 0x36, 0xee, 0x02, 0x00, 0x45, 0xea, 0x1a, 0xba, 0x02, 0x40, 0x4e, + 0x0b, 0x00, 0x19, 0xa7, 0x00, 0x45, 0x48, 0x0e, 0x18, 0xa7, 0x00, 0x4c, + 0x32, 0x00, 0x17, 0xa7, 0x40, 0x07, 0xe5, 0x05, 0xcc, 0x02, 0x07, 0xbc, + 0x68, 0xbb, 0x02, 0x0d, 0xbc, 0x83, 0xfd, 0x01, 0x50, 0xd0, 0x04, 0xc6, + 0x02, 0x00, 0x44, 0x51, 0x12, 0x89, 0xa7, 0x00, 0x4b, 0x5e, 0xa2, 0xdf, + 0x02, 0x00, 0x08, 0xf8, 0xcc, 0x01, 0xff, 0x42, 0x92, 0x01, 0x78, 0x1d, + 0x00, 0x49, 0x81, 0xb9, 0x9c, 0xa6, 0x00, 0xb3, 0x01, 0xff, 0x05, 0x5e, + 0x07, 0x06, 0x48, 0x87, 0x8e, 0x9d, 0xa6, 0x40, 0xe1, 0x30, 0xe0, 0x01, + 0xa2, 0xb6, 0x01, 0x43, 0x6d, 0x14, 0x45, 0xe0, 0x01, 0xa4, 0xa3, 0x01, + 0xe5, 0x48, 0xe0, 0x81, 0x82, 0x01, 0x43, 0x26, 0x52, 0x33, 0xe0, 0x01, + 0x42, 0x22, 0x00, 0x43, 0xe0, 0x01, 0xe9, 0x38, 0xe0, 0x81, 0x6d, 0x42, + 0x80, 0x20, 0x4d, 0xe0, 0x01, 0x42, 0x1b, 0x02, 0x39, 0xe0, 0x01, 0xef, + 0x3c, 0xe0, 0x01, 0xb0, 0x51, 0xb3, 0x36, 0xb4, 0x2a, 0xf5, 0x41, 0xe0, + 0x01, 0x42, 0x32, 0x00, 0x32, 0xe0, 0x01, 0xb9, 0x0d, 0xba, 0x01, 0xff, + 0xe5, 0x37, 0xe0, 0x01, 0x42, 0xb0, 0x01, 0x36, 0xe0, 0x41, 0x43, 0x9c, + 0x2b, 0x47, 0xe0, 0x81, 0x04, 0xf5, 0x49, 0xe0, 0x41, 0x4e, 0x7d, 0x75, + 0x6c, 0xe0, 0x41, 0xe5, 0x40, 0xe0, 0x01, 0x42, 0x46, 0x03, 0x44, 0xe0, + 0x41, 0x44, 0xb5, 0x7b, 0x4b, 0xe0, 0x01, 0x42, 0x22, 0x00, 0x46, 0xe0, + 0x01, 0x49, 0xf0, 0xbf, 0x4f, 0xe0, 0xc1, 0x00, 0x4c, 0xda, 0x28, 0x6d, + 0xe0, 0x41, 0x47, 0xc9, 0xc9, 0x50, 0xe0, 0x01, 0xe5, 0x3d, 0xe0, 0x41, + 0xe5, 0x35, 0xe0, 0x41, 0xe6, 0x42, 0xe0, 0x01, 0xec, 0x3a, 0xe0, 0x01, + 0xed, 0x3b, 0xe0, 0x01, 0xf2, 0x3e, 0xe0, 0x01, 0xf3, 0x3f, 0xe0, 0xc1, + 0x00, 0x4f, 0xe7, 0x69, 0x6b, 0xe0, 0x41, 0xe5, 0x34, 0xe0, 0x01, 0x43, + 0xe5, 0xf4, 0x4a, 0xe0, 0x41, 0x47, 0x09, 0xcf, 0x4e, 0xe0, 0x01, 0xe5, + 0x31, 0xe0, 0x01, 0x57, 0x84, 0x08, 0x4c, 0xe0, 0x41, 0x04, 0x27, 0x16, + 0x1d, 0x03, 0xe1, 0x05, 0x01, 0xff, 0x44, 0x2b, 0x30, 0x00, 0xa7, 0x00, + 0x42, 0x7c, 0x00, 0x04, 0xa7, 0x00, 0x42, 0x3d, 0x00, 0x06, 0xa7, 0x00, + 0x45, 0xd3, 0xea, 0x02, 0xa7, 0x40, 0x44, 0x2b, 0x30, 0x01, 0xa7, 0x00, + 0x42, 0x7c, 0x00, 0x05, 0xa7, 0x00, 0x42, 0x3d, 0x00, 0x07, 0xa7, 0x00, + 0x45, 0xd3, 0xea, 0x03, 0xa7, 0x40, 0x4e, 0xf9, 0x13, 0xd3, 0x02, 0x00, + 0x4f, 0x84, 0x72, 0xd2, 0x02, 0x40, 0xe1, 0x2c, 0x1d, 0x80, 0x79, 0xe2, + 0x2e, 0x1d, 0x80, 0x6e, 0xe3, 0xf2, 0xa7, 0x00, 0xe4, 0x30, 0x1d, 0x00, + 0xe5, 0x31, 0x1d, 0x00, 0xe6, 0xf3, 0xa7, 0x00, 0xe7, 0x33, 0x1d, 0x00, + 0xe8, 0x34, 0x1d, 0x80, 0x4f, 0xe9, 0x35, 0x1d, 0x00, 0xea, 0x36, 0x1d, + 0x00, 0xeb, 0x37, 0x1d, 0x00, 0xec, 0x38, 0x1d, 0x00, 0xed, 0x39, 0x1d, + 0x00, 0xee, 0x3a, 0x1d, 0x00, 0xef, 0x3c, 0x1d, 0x80, 0x2e, 0xf0, 0x3e, + 0x1d, 0x00, 0xf1, 0xf4, 0xa7, 0x00, 0xf2, 0x3f, 0x1d, 0x80, 0x14, 0xf3, + 0xf1, 0xa7, 0x00, 0xf4, 0x40, 0x1d, 0x00, 0xf5, 0x41, 0x1d, 0x00, 0xf6, + 0x7d, 0x2c, 0x00, 0xf7, 0x42, 0x1d, 0x40, 0x08, 0xde, 0x14, 0x01, 0xff, + 0xe5, 0x32, 0x1d, 0x00, 0xee, 0x3b, 0x1d, 0x40, 0xf5, 0x3d, 0x1d, 0x40, + 0x4c, 0xda, 0x28, 0xf8, 0xa7, 0x40, 0x47, 0x02, 0xcf, 0x2f, 0x1d, 0x40, + 0xe5, 0x2d, 0x1d, 0x40, 0x05, 0x9e, 0x3f, 0x06, 0x4d, 0x17, 0x84, 0xb5, + 0x07, 0x41, 0x49, 0xe4, 0x42, 0xf9, 0x02, 0x00, 0x48, 0x1d, 0xb5, 0xfb, + 0x02, 0x40, 0x4b, 0xfc, 0x8b, 0xca, 0x02, 0x00, 0x4d, 0x69, 0x85, 0xb8, + 0x07, 0x01, 0x49, 0x62, 0x36, 0xbc, 0x02, 0x40, 0x51, 0xdc, 0x57, 0x43, + 0x16, 0x01, 0xa4, 0x89, 0x03, 0x07, 0xec, 0x05, 0x6d, 0x05, 0x5a, 0x03, + 0x44, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x31, 0xe5, 0x39, 0x16, 0x01, + 0xe9, 0x31, 0x16, 0x81, 0x24, 0xef, 0x3b, 0x16, 0x01, 0xf5, 0x33, 0x16, + 0x81, 0x17, 0x08, 0x22, 0xc1, 0x01, 0xff, 0xec, 0x37, 0x16, 0x81, 0x09, + 0xf2, 0x35, 0x16, 0xc1, 0x00, 0xf2, 0x36, 0x16, 0x41, 0xec, 0x38, 0x16, + 0x41, 0xf5, 0x34, 0x16, 0x41, 0xe9, 0x32, 0x16, 0x41, 0xe1, 0x30, 0x16, + 0x01, 0xe9, 0x3a, 0x16, 0x01, 0xf5, 0x3c, 0x16, 0x41, 0xa1, 0x17, 0x44, + 0x65, 0xf0, 0x44, 0x16, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0xe5, + 0x23, 0x3f, 0x16, 0x01, 0x45, 0xec, 0x4b, 0x3e, 0x16, 0x41, 0x47, 0x3d, + 0x16, 0x3d, 0x16, 0x01, 0x4a, 0xfb, 0xaf, 0x40, 0x16, 0x41, 0xe1, 0x00, + 0x16, 0x81, 0x86, 0x02, 0xa2, 0xf9, 0x01, 0xa3, 0xec, 0x01, 0xa4, 0xd3, + 0x01, 0xe5, 0x0a, 0x16, 0x01, 0xa7, 0xc2, 0x01, 0x42, 0x22, 0x00, 0x2e, + 0x16, 0x01, 0xe9, 0x02, 0x16, 0x81, 0xb2, 0x01, 0xaa, 0xa5, 0x01, 0xab, + 0x98, 0x01, 0xac, 0x8b, 0x01, 0x42, 0x6c, 0x00, 0x26, 0x16, 0x01, 0xae, + 0x6d, 0xef, 0x0c, 0x16, 0x01, 0xb0, 0x5d, 0x42, 0x71, 0x00, 0x28, 0x16, + 0x01, 0xb3, 0x45, 0xb4, 0x2c, 0xf5, 0x04, 0x16, 0x81, 0x23, 0xb6, 0x06, + 0x42, 0xbc, 0x22, 0x27, 0x16, 0x41, 0xe1, 0x2a, 0x16, 0x01, 0x07, 0x23, + 0xc1, 0x01, 0xff, 0xec, 0x08, 0x16, 0x81, 0x09, 0xf2, 0x06, 0x16, 0xc1, + 0x00, 0xf2, 0x07, 0x16, 0x41, 0xec, 0x09, 0x16, 0x41, 0xf5, 0x05, 0x16, + 0x41, 0xe1, 0x1d, 0x16, 0x01, 0x42, 0x22, 0x00, 0x1e, 0x16, 0x01, 0xb4, + 0x01, 0xff, 0xe1, 0x18, 0x16, 0x01, 0x42, 0x22, 0x00, 0x19, 0x16, 0x41, + 0xe1, 0x2d, 0x16, 0x01, 0x42, 0x22, 0x00, 0x2b, 0x16, 0x01, 0x42, 0x40, + 0x06, 0x2c, 0x16, 0x41, 0xe1, 0x22, 0x16, 0x01, 0x42, 0x22, 0x00, 0x23, + 0x16, 0x41, 0xe1, 0x21, 0x16, 0x01, 0x42, 0x24, 0x02, 0x12, 0x16, 0x01, + 0x42, 0x2a, 0x05, 0x1c, 0x16, 0x01, 0x42, 0xbc, 0x22, 0x17, 0x16, 0x41, + 0xe1, 0x29, 0x16, 0x01, 0x42, 0x74, 0x00, 0x2f, 0x16, 0x41, 0xe1, 0x0e, + 0x16, 0x01, 0x42, 0x22, 0x00, 0x0f, 0x16, 0x41, 0xe1, 0x15, 0x16, 0x01, + 0x42, 0x22, 0x00, 0x16, 0x16, 0x41, 0xe9, 0x03, 0x16, 0x41, 0xe1, 0x10, + 0x16, 0x01, 0x42, 0x22, 0x00, 0x11, 0x16, 0x41, 0xe1, 0x1f, 0x16, 0x01, + 0xa4, 0x06, 0x42, 0x22, 0x00, 0x20, 0x16, 0x41, 0xe1, 0x1a, 0x16, 0x01, + 0x42, 0x22, 0x00, 0x1b, 0x16, 0x41, 0xe1, 0x13, 0x16, 0x01, 0x42, 0x22, + 0x00, 0x14, 0x16, 0x41, 0xe1, 0x24, 0x16, 0x01, 0x42, 0x22, 0x00, 0x25, + 0x16, 0x41, 0xe1, 0x01, 0x16, 0x01, 0xe9, 0x0b, 0x16, 0x01, 0xf5, 0x0d, + 0x16, 0x41, 0x44, 0x73, 0x20, 0x41, 0x16, 0x01, 0x05, 0xf0, 0x06, 0x06, + 0x4b, 0x09, 0xa1, 0x42, 0x16, 0x41, 0x45, 0x12, 0x0b, 0x58, 0x16, 0x01, + 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x59, 0x16, 0x01, 0x43, 0x0e, 0x0b, 0x51, + 0x16, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x50, 0x16, 0x41, + 0x44, 0x25, 0x01, 0x53, 0x16, 0x01, 0x42, 0x15, 0x02, 0x52, 0x16, 0x41, + 0x44, 0xc9, 0x1d, 0x57, 0x16, 0x01, 0x42, 0x01, 0x26, 0x56, 0x16, 0x41, + 0x43, 0xd2, 0x05, 0x55, 0x16, 0x01, 0x43, 0xf6, 0x06, 0x54, 0x16, 0x41, + 0x42, 0x1b, 0x08, 0xa7, 0x22, 0x00, 0x4d, 0x00, 0x88, 0x3b, 0xf9, 0x41, + 0x80, 0x01, 0xff, 0x43, 0x15, 0x80, 0xf4, 0xf4, 0x01, 0x5d, 0xe1, 0x16, + 0xf2, 0xf4, 0x41, 0x03, 0xf6, 0x7a, 0xe2, 0x01, 0x02, 0x75, 0x06, 0xb4, + 0x01, 0xa4, 0x84, 0x01, 0xac, 0x66, 0xae, 0x0d, 0x44, 0xdc, 0x52, 0x9e, + 0xfa, 0xc1, 0x00, 0x45, 0xcc, 0x1c, 0xa9, 0xfa, 0x41, 0xa9, 0x43, 0x02, + 0xef, 0x02, 0x04, 0xf9, 0xff, 0x29, 0x40, 0x80, 0x06, 0x4d, 0x21, 0x80, + 0x13, 0x22, 0x40, 0x44, 0x5a, 0x03, 0x12, 0x22, 0x80, 0x06, 0x45, 0x35, + 0x23, 0x42, 0x22, 0x40, 0x80, 0x01, 0xff, 0x4b, 0xcb, 0x1e, 0x3a, 0x2a, + 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4b, 0xdb, 0x5e, 0x29, 0x2a, 0x00, + 0x49, 0x9f, 0x12, 0x2a, 0x2a, 0x00, 0x4c, 0xcb, 0x8e, 0x2b, 0x2a, 0x00, + 0x4b, 0x27, 0xa2, 0x2c, 0x2a, 0x40, 0x43, 0x96, 0x27, 0x90, 0xf6, 0x01, + 0x44, 0x3c, 0x64, 0xbd, 0xf4, 0x01, 0x44, 0x68, 0xe1, 0xd5, 0xf5, 0x41, + 0x06, 0x52, 0x5c, 0x0c, 0x46, 0x82, 0xdd, 0x0c, 0xf3, 0x01, 0x46, 0x37, + 0x4c, 0xa5, 0x20, 0x40, 0x46, 0xf2, 0xc2, 0x96, 0xfa, 0x01, 0x45, 0x44, + 0x71, 0x96, 0xf3, 0x41, 0x04, 0x80, 0x02, 0x06, 0x58, 0xbe, 0x29, 0xef, + 0x22, 0x40, 0x43, 0x23, 0x0a, 0xb7, 0x00, 0x00, 0x56, 0x37, 0x35, 0xe6, + 0xfb, 0x01, 0x57, 0xdc, 0x30, 0xe7, 0xfb, 0x01, 0x06, 0x38, 0x89, 0x01, + 0xff, 0x48, 0x08, 0xc7, 0x0c, 0xcc, 0x01, 0x5a, 0x88, 0x22, 0xc2, 0xfb, + 0x41, 0x80, 0x1b, 0xaf, 0x01, 0xff, 0x45, 0x59, 0x03, 0xb5, 0x00, 0x00, + 0x42, 0xb7, 0x05, 0xa0, 0xf9, 0x01, 0x45, 0x1a, 0x3d, 0xa4, 0xf3, 0x01, + 0x45, 0x8b, 0xcb, 0x2c, 0xf5, 0x41, 0x4b, 0xc3, 0x9a, 0x49, 0x24, 0x00, + 0x4c, 0x27, 0x93, 0x48, 0x24, 0x40, 0x07, 0xec, 0x05, 0xbc, 0x02, 0x05, + 0x5a, 0x03, 0x9a, 0x02, 0x05, 0x3b, 0x2d, 0xfd, 0x01, 0x0b, 0x40, 0x77, + 0x01, 0xff, 0xe1, 0x54, 0x6f, 0x81, 0xce, 0x01, 0xe5, 0x5d, 0x6f, 0x81, + 0xae, 0x01, 0xe9, 0x61, 0x6f, 0x81, 0x7a, 0xee, 0x7d, 0x6f, 0x81, 0x71, + 0xef, 0x59, 0x6f, 0x81, 0x56, 0x4a, 0x9b, 0xb0, 0x78, 0x6f, 0x81, 0x4b, + 0xf5, 0x6a, 0x6f, 0x81, 0x1e, 0x42, 0x1e, 0xf5, 0x83, 0x6f, 0x01, 0xf7, + 0x5c, 0x6f, 0x81, 0x0f, 0xf9, 0x71, 0x6f, 0xc1, 0x00, 0xe9, 0x72, 0x6f, + 0x01, 0x42, 0x3e, 0x00, 0x80, 0x6f, 0x41, 0xef, 0x5b, 0x6f, 0x41, 0xe1, + 0x6b, 0x6f, 0x81, 0x1a, 0x42, 0x12, 0x0b, 0x6f, 0x6f, 0x01, 0xe9, 0x87, + 0x6f, 0x01, 0x42, 0x1d, 0x01, 0x70, 0x6f, 0x01, 0x42, 0xc1, 0x18, 0x7f, + 0x6f, 0x01, 0xf5, 0x6e, 0x6f, 0x41, 0xee, 0x6c, 0x6f, 0xc1, 0x00, 0xe7, + 0x6d, 0x6f, 0x41, 0xf2, 0x76, 0x6f, 0x41, 0xa5, 0x0c, 0xe7, 0x81, 0x6f, + 0x01, 0xef, 0x5a, 0x6f, 0x01, 0xf5, 0x7c, 0x6f, 0x41, 0xf2, 0x82, 0x6f, + 0x01, 0xf9, 0x60, 0x6f, 0x41, 0xe7, 0x7e, 0x6f, 0x41, 0xe1, 0x62, 0x6f, + 0x81, 0x21, 0xe5, 0x66, 0x6f, 0x01, 0xe7, 0x84, 0x6f, 0x01, 0xe9, 0x67, + 0x6f, 0x01, 0x42, 0x1d, 0x01, 0x69, 0x6f, 0x01, 0xef, 0x65, 0x6f, 0x81, + 0x04, 0xf5, 0x68, 0x6f, 0x41, 0x42, 0x1d, 0x01, 0x86, 0x6f, 0x41, 0xee, + 0x63, 0x6f, 0xc1, 0x00, 0xe7, 0x64, 0x6f, 0x41, 0xe1, 0x85, 0x6f, 0x01, + 0xe9, 0x7a, 0x6f, 0x01, 0xee, 0x5e, 0x6f, 0x81, 0x09, 0xf2, 0x77, 0x6f, + 0xc1, 0x00, 0xf2, 0x75, 0x6f, 0x41, 0xe7, 0x5f, 0x6f, 0x41, 0xe1, 0x55, + 0x6f, 0x01, 0xe5, 0x73, 0x6f, 0x81, 0x17, 0x42, 0xdc, 0x49, 0x56, 0x6f, + 0x01, 0xe9, 0x79, 0x6f, 0x01, 0xee, 0x57, 0x6f, 0x81, 0x04, 0xf5, 0x7b, + 0x6f, 0x41, 0xe7, 0x58, 0x6f, 0x41, 0xe5, 0x74, 0x6f, 0x41, 0x45, 0x5c, + 0x00, 0x91, 0x6f, 0x01, 0x45, 0x20, 0x07, 0x92, 0x6f, 0x01, 0x45, 0xc8, + 0x00, 0x8f, 0x6f, 0x01, 0x49, 0xdd, 0x73, 0x90, 0x6f, 0x41, 0x4a, 0xe5, + 0xa7, 0x51, 0x6f, 0x01, 0x56, 0x27, 0x33, 0x4f, 0x6f, 0x01, 0x09, 0xa3, + 0xbe, 0x01, 0xff, 0x4a, 0xe5, 0xa7, 0x53, 0x6f, 0x01, 0x47, 0x59, 0xd7, + 0x52, 0x6f, 0x41, 0xa1, 0x82, 0x04, 0xa2, 0xf5, 0x03, 0xa4, 0xc1, 0x03, + 0x42, 0x0c, 0x08, 0x07, 0x6f, 0x01, 0xa7, 0xa7, 0x03, 0xa8, 0x9a, 0x03, + 0x42, 0x1b, 0x02, 0x1e, 0x6f, 0x01, 0xac, 0xfb, 0x02, 0xad, 0xee, 0x02, + 0xae, 0xb5, 0x02, 0xb0, 0xa8, 0x02, 0xb1, 0x9b, 0x02, 0xb2, 0xec, 0x01, + 0xb3, 0xd3, 0x01, 0xb4, 0x7f, 0xb6, 0x73, 0x42, 0xa9, 0x01, 0x42, 0x6f, + 0x01, 0x42, 0xed, 0x26, 0x27, 0x6f, 0x01, 0x03, 0x24, 0x7a, 0x32, 0xba, + 0x01, 0xff, 0xe1, 0x3b, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x35, 0x6f, 0x01, + 0xb3, 0x19, 0xba, 0x01, 0xff, 0xe1, 0x3d, 0x6f, 0x01, 0xb3, 0x06, 0x42, + 0xbc, 0x22, 0x40, 0x6f, 0x41, 0xe1, 0x3e, 0x6f, 0x01, 0x42, 0xbc, 0x22, + 0x41, 0x6f, 0x41, 0xe1, 0x3c, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x36, 0x6f, + 0x41, 0x44, 0x91, 0xef, 0x31, 0x6f, 0x01, 0x42, 0x1b, 0x02, 0x20, 0x6f, + 0x01, 0x43, 0x01, 0x46, 0x12, 0x6f, 0x01, 0x42, 0xbb, 0x09, 0x02, 0x6f, + 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x0d, 0x6f, 0x01, 0xb3, 0x06, 0x42, 0x12, + 0x00, 0x0c, 0x6f, 0x41, 0xe1, 0x39, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x30, + 0x6f, 0x41, 0xe1, 0x08, 0x6f, 0x01, 0x42, 0x0c, 0x08, 0x09, 0x6f, 0x41, + 0xe1, 0x0a, 0x6f, 0x01, 0xe5, 0x48, 0x6f, 0x01, 0x02, 0x2a, 0x09, 0x3c, + 0x04, 0x00, 0x20, 0x1c, 0xb3, 0x06, 0x42, 0x12, 0x00, 0x0e, 0x6f, 0x41, + 0xe1, 0x37, 0x6f, 0x01, 0xe5, 0x49, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x2e, + 0x6f, 0x01, 0x42, 0x40, 0x06, 0x2a, 0x6f, 0x41, 0xd2, 0x93, 0x6f, 0x01, + 0xd3, 0x94, 0x6f, 0x01, 0xd4, 0x95, 0x6f, 0x01, 0xd5, 0x96, 0x6f, 0x01, + 0xd6, 0x97, 0x6f, 0x01, 0xd7, 0x98, 0x6f, 0x01, 0xd8, 0x99, 0x6f, 0x41, + 0xe1, 0x1a, 0x6f, 0x01, 0x42, 0xbc, 0x22, 0x1c, 0x6f, 0x41, 0xe1, 0x3a, + 0x6f, 0x01, 0x42, 0x22, 0x00, 0x33, 0x6f, 0x01, 0x42, 0x40, 0x06, 0x34, + 0x6f, 0x01, 0x42, 0x7e, 0x1a, 0x46, 0x6f, 0x41, 0x09, 0x34, 0xb8, 0x06, + 0x42, 0x77, 0x00, 0x4a, 0x6f, 0x41, 0x04, 0x00, 0x20, 0x06, 0x43, 0xa4, + 0x02, 0x32, 0x6f, 0x41, 0xd1, 0x9a, 0x6f, 0x01, 0xd2, 0x9b, 0x6f, 0x01, + 0xd4, 0x9c, 0x6f, 0x01, 0xd5, 0x9d, 0x6f, 0x01, 0xd6, 0x9e, 0x6f, 0x01, + 0xd8, 0x9f, 0x6f, 0x41, 0xe1, 0x21, 0x6f, 0x01, 0x42, 0x24, 0x02, 0x22, + 0x6f, 0x41, 0xe1, 0x00, 0x6f, 0x01, 0x42, 0x74, 0x00, 0x03, 0x6f, 0x41, + 0xe1, 0x10, 0x6f, 0x81, 0x2b, 0xa7, 0x1f, 0x42, 0x22, 0x00, 0x11, 0x6f, + 0x01, 0xae, 0x0d, 0xb9, 0x01, 0xff, 0xe1, 0x2c, 0x6f, 0x01, 0x42, 0x22, + 0x00, 0x2d, 0x6f, 0x41, 0xe1, 0x14, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x15, + 0x6f, 0x41, 0xe1, 0x23, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x24, 0x6f, 0x41, + 0x4a, 0x62, 0x5c, 0x50, 0x6f, 0x41, 0xe1, 0x04, 0x6f, 0x01, 0x42, 0x22, + 0x00, 0x05, 0x6f, 0x41, 0xe1, 0x16, 0x6f, 0x01, 0xa8, 0x06, 0x42, 0xbc, + 0x22, 0x17, 0x6f, 0x41, 0xe1, 0x18, 0x6f, 0x01, 0x42, 0xbc, 0x22, 0x19, + 0x6f, 0x41, 0xe1, 0x26, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x44, 0x6f, 0x41, + 0xe1, 0x1f, 0x6f, 0x01, 0xa8, 0x01, 0xff, 0xe1, 0x28, 0x6f, 0x01, 0x42, + 0x22, 0x00, 0x29, 0x6f, 0x41, 0xe1, 0x0b, 0x6f, 0x01, 0x42, 0xf0, 0x10, + 0x0f, 0x6f, 0x01, 0x02, 0x2a, 0x09, 0x19, 0xba, 0x01, 0xff, 0xe1, 0x38, + 0x6f, 0x01, 0x42, 0x22, 0x00, 0x2f, 0x6f, 0x01, 0x42, 0x7e, 0x1a, 0x47, + 0x6f, 0x01, 0x42, 0x59, 0x00, 0x2b, 0x6f, 0x41, 0xe1, 0x1b, 0x6f, 0x01, + 0x42, 0xbc, 0x22, 0x1d, 0x6f, 0x41, 0xe1, 0x01, 0x6f, 0x01, 0x42, 0x0d, + 0x00, 0x45, 0x6f, 0x41, 0xe8, 0x43, 0x6f, 0x01, 0x07, 0xa4, 0x80, 0x01, + 0xff, 0x42, 0x6c, 0x00, 0x06, 0x6f, 0x01, 0xae, 0x06, 0x43, 0x05, 0x9a, + 0x3f, 0x6f, 0x41, 0xe1, 0x13, 0x6f, 0x01, 0x42, 0x24, 0x02, 0x25, 0x6f, + 0x41, 0xa1, 0xcf, 0x1c, 0x09, 0x26, 0xb7, 0xbe, 0x1c, 0xa4, 0xd1, 0x16, + 0x0b, 0xf7, 0x9b, 0xba, 0x12, 0xac, 0xa5, 0x12, 0x42, 0xc3, 0x07, 0xdd, + 0xf4, 0x01, 0xae, 0xa8, 0x07, 0xb2, 0x5c, 0x4d, 0xea, 0x88, 0x95, 0x00, + 0x00, 0xb4, 0x01, 0xff, 0x42, 0x5f, 0x03, 0xc3, 0xce, 0x01, 0xb2, 0x01, + 0xff, 0x05, 0x36, 0x00, 0x04, 0xef, 0x87, 0xf6, 0x41, 0x45, 0x53, 0x23, + 0xd1, 0x23, 0x00, 0x0a, 0x49, 0xad, 0x2c, 0x49, 0x01, 0xbe, 0xd9, 0x23, + 0x00, 0x4f, 0x0b, 0x73, 0xd3, 0x23, 0x00, 0xb4, 0x01, 0xff, 0x48, 0xf0, + 0xc5, 0xd8, 0x23, 0x00, 0x46, 0x98, 0xdf, 0xd7, 0x23, 0x00, 0x0a, 0xb1, + 0xb3, 0x01, 0xff, 0x46, 0x9d, 0x0a, 0xd6, 0x23, 0x00, 0x49, 0xe4, 0x1c, + 0xd5, 0x23, 0x40, 0x45, 0x33, 0x07, 0xd2, 0x23, 0x00, 0x4a, 0x49, 0xb2, + 0xd4, 0x23, 0x40, 0x44, 0xf8, 0x62, 0x3f, 0x26, 0x00, 0x06, 0xc0, 0xde, + 0x06, 0x46, 0x1e, 0x1d, 0xdc, 0xf9, 0x41, 0x08, 0xe0, 0xc4, 0xc2, 0x01, + 0x0d, 0xaf, 0x83, 0x01, 0xff, 0x07, 0xec, 0x05, 0x0d, 0x4b, 0x03, 0xa3, + 0x9e, 0x09, 0xc1, 0x00, 0x42, 0x87, 0xf3, 0x9f, 0x09, 0x41, 0xe1, 0x80, + 0x09, 0x01, 0x42, 0x16, 0x00, 0x86, 0x09, 0x81, 0x9a, 0x01, 0x42, 0xf0, + 0x10, 0x9d, 0x09, 0x01, 0xe5, 0x81, 0x09, 0x01, 0x43, 0x14, 0x52, 0x92, + 0x09, 0x01, 0xe9, 0x82, 0x09, 0x01, 0xab, 0x7a, 0x42, 0x74, 0x00, 0x90, + 0x09, 0x01, 0x42, 0x6c, 0x00, 0x89, 0x09, 0x01, 0xae, 0x56, 0xef, 0x83, + 0x09, 0x01, 0x42, 0xbb, 0x09, 0x88, 0x09, 0x01, 0x42, 0x43, 0x14, 0x97, + 0x09, 0x01, 0x42, 0x71, 0x00, 0x8e, 0x09, 0x81, 0x39, 0xb3, 0x28, 0xb4, + 0x0c, 0x42, 0xa9, 0x01, 0x85, 0x09, 0x01, 0x42, 0xbc, 0x22, 0x84, 0x09, + 0x41, 0xe1, 0x98, 0x09, 0x81, 0x0f, 0xe5, 0x9a, 0x09, 0x81, 0x04, 0xef, + 0x9c, 0x09, 0x41, 0x42, 0x87, 0xf3, 0x9b, 0x09, 0x41, 0x42, 0x87, 0xf3, + 0x99, 0x09, 0x41, 0xe1, 0x93, 0x09, 0x81, 0x04, 0xe5, 0x95, 0x09, 0x41, + 0x42, 0x87, 0xf3, 0x94, 0x09, 0x41, 0x42, 0x87, 0xf3, 0x8f, 0x09, 0x41, + 0xe1, 0x8a, 0x09, 0x81, 0x0b, 0xe5, 0x8c, 0x09, 0xc1, 0x00, 0x42, 0x87, + 0xf3, 0x8d, 0x09, 0x41, 0x42, 0x87, 0xf3, 0x8b, 0x09, 0x41, 0xe1, 0x96, + 0x09, 0x01, 0x42, 0x22, 0x00, 0x91, 0x09, 0x41, 0x42, 0x87, 0xf3, 0x87, + 0x09, 0x41, 0x09, 0x1e, 0x5a, 0x99, 0x04, 0xac, 0x80, 0x03, 0x07, 0xff, + 0x39, 0x01, 0xff, 0x45, 0x12, 0x0b, 0xc7, 0x09, 0x81, 0xd8, 0x02, 0xa6, + 0xfc, 0x01, 0x44, 0xcf, 0x2a, 0xc8, 0x09, 0x81, 0xd9, 0x01, 0x43, 0x0e, + 0x0b, 0xc0, 0x09, 0x81, 0xbb, 0x01, 0xb3, 0x67, 0xb4, 0x01, 0xff, 0x42, + 0x92, 0x01, 0xc9, 0x09, 0x81, 0x57, 0xa8, 0x2b, 0xb7, 0x01, 0xff, 0x44, + 0xcb, 0x1d, 0xca, 0x09, 0x81, 0x1b, 0xef, 0xc1, 0x09, 0xc1, 0x00, 0x80, + 0x01, 0xff, 0x47, 0x71, 0x11, 0xd3, 0x09, 0x81, 0x06, 0x48, 0x40, 0x5e, + 0xdc, 0x09, 0x41, 0x49, 0x3f, 0x5e, 0xee, 0x09, 0x41, 0x49, 0x3f, 0x5e, + 0xe5, 0x09, 0x41, 0x44, 0x7b, 0x11, 0xcb, 0x09, 0x81, 0x1d, 0x43, 0x26, + 0x01, 0xc2, 0x09, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0xd4, + 0x09, 0x81, 0x06, 0x48, 0x40, 0x5e, 0xdd, 0x09, 0x41, 0x49, 0x3f, 0x5e, + 0xef, 0x09, 0x41, 0x49, 0x3f, 0x5e, 0xe6, 0x09, 0x41, 0x49, 0x3f, 0x5e, + 0xe4, 0x09, 0x41, 0x44, 0xc9, 0x1d, 0xc6, 0x09, 0x81, 0x29, 0x42, 0x01, + 0x26, 0xc5, 0x09, 0xc1, 0x00, 0x80, 0x0d, 0x42, 0x7d, 0x11, 0xce, 0x09, + 0xc1, 0x00, 0x49, 0x3f, 0x5e, 0xe9, 0x09, 0x41, 0x47, 0x71, 0x11, 0xd7, + 0x09, 0x81, 0x06, 0x48, 0x40, 0x5e, 0xe0, 0x09, 0x41, 0x49, 0x3f, 0x5e, + 0xf2, 0x09, 0x41, 0x80, 0x0d, 0x42, 0x7d, 0x11, 0xcf, 0x09, 0xc1, 0x00, + 0x49, 0x3f, 0x5e, 0xea, 0x09, 0x41, 0x47, 0x71, 0x11, 0xd8, 0x09, 0x81, + 0x06, 0x48, 0x40, 0x5e, 0xe1, 0x09, 0x41, 0x49, 0x3f, 0x5e, 0xf3, 0x09, + 0x41, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0xd2, 0x09, 0x81, 0x06, 0x48, + 0x40, 0x5e, 0xdb, 0x09, 0x41, 0x49, 0x3f, 0x5e, 0xed, 0x09, 0x41, 0x80, + 0x06, 0x4b, 0xf5, 0xa3, 0xec, 0x09, 0x41, 0x47, 0x71, 0x11, 0xda, 0x09, + 0x81, 0x06, 0x48, 0x40, 0x5e, 0xe3, 0x09, 0x41, 0x49, 0x3f, 0x5e, 0xf5, + 0x09, 0x41, 0xa9, 0x2d, 0xaf, 0x01, 0xff, 0x43, 0x7c, 0x11, 0xcc, 0x09, + 0x81, 0x1d, 0x42, 0x42, 0x00, 0xc3, 0x09, 0xc1, 0x00, 0x80, 0x01, 0xff, + 0x47, 0x71, 0x11, 0xd5, 0x09, 0x81, 0x06, 0x48, 0x40, 0x5e, 0xde, 0x09, + 0x41, 0x49, 0x3f, 0x5e, 0xf0, 0x09, 0x41, 0x49, 0x3f, 0x5e, 0xe7, 0x09, + 0x41, 0x43, 0x52, 0x4d, 0xcd, 0x09, 0x81, 0x1d, 0x42, 0x32, 0x00, 0xc4, + 0x09, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0xd6, 0x09, 0x81, + 0x06, 0x48, 0x40, 0x5e, 0xdf, 0x09, 0x41, 0x49, 0x3f, 0x5e, 0xf1, 0x09, + 0x41, 0x49, 0x3f, 0x5e, 0xe8, 0x09, 0x41, 0x80, 0x06, 0x4a, 0xf6, 0xa3, + 0xeb, 0x09, 0x41, 0x47, 0x71, 0x11, 0xd9, 0x09, 0x81, 0x06, 0x48, 0x40, + 0x5e, 0xe2, 0x09, 0x41, 0x49, 0x3f, 0x5e, 0xf4, 0x09, 0x41, 0x06, 0xed, + 0x05, 0x11, 0x08, 0xa4, 0x3f, 0x01, 0xff, 0x43, 0x58, 0xf4, 0xbf, 0x09, + 0x01, 0x43, 0x29, 0x5e, 0xbe, 0x09, 0x41, 0xe1, 0xa0, 0x09, 0x81, 0x76, + 0x42, 0x16, 0x00, 0xa6, 0x09, 0x01, 0x42, 0xf0, 0x10, 0xb7, 0x09, 0x01, + 0xe5, 0xa1, 0x09, 0x01, 0x43, 0x14, 0x52, 0xae, 0x09, 0x01, 0xe9, 0xa2, + 0x09, 0x01, 0xab, 0x50, 0x42, 0x74, 0x00, 0xac, 0x09, 0x01, 0x42, 0x6c, + 0x00, 0xa8, 0x09, 0x01, 0xae, 0x3a, 0xef, 0xa3, 0x09, 0x01, 0x42, 0xbb, + 0x09, 0xa7, 0x09, 0x01, 0x42, 0x43, 0x14, 0xb3, 0x09, 0x01, 0x42, 0x71, + 0x00, 0xab, 0x09, 0x01, 0xb3, 0x1a, 0xb4, 0x0c, 0x42, 0xa9, 0x01, 0xa5, + 0x09, 0x01, 0x42, 0xbc, 0x22, 0xa4, 0x09, 0x41, 0xe1, 0xb4, 0x09, 0x01, + 0xe5, 0xb5, 0x09, 0x01, 0xef, 0xb6, 0x09, 0x41, 0xe1, 0xaf, 0x09, 0x01, + 0xe5, 0xb1, 0x09, 0x41, 0xe1, 0xa9, 0x09, 0x01, 0xe5, 0xaa, 0x09, 0x41, + 0xe1, 0xb2, 0x09, 0x01, 0x42, 0x22, 0x00, 0xad, 0x09, 0x41, 0x49, 0x2f, + 0x94, 0xb0, 0x09, 0x41, 0xa5, 0x47, 0xa6, 0x39, 0x4d, 0x60, 0x86, 0xfe, + 0x09, 0x01, 0x04, 0x0e, 0x0b, 0x23, 0xb3, 0x15, 0xb4, 0x01, 0xff, 0x4b, + 0x7e, 0x79, 0xff, 0x09, 0x01, 0x4d, 0xc9, 0x83, 0xf8, 0x09, 0x01, 0x4b, + 0x34, 0xa5, 0xf7, 0x09, 0x41, 0x4d, 0x7c, 0x79, 0xfc, 0x09, 0x01, 0x4b, + 0xd0, 0x9d, 0xfb, 0x09, 0x41, 0x44, 0x22, 0x00, 0xbd, 0x09, 0x01, 0x47, + 0x81, 0x79, 0xf6, 0x09, 0x41, 0x4c, 0x7b, 0x90, 0xfa, 0x09, 0x01, 0x4c, + 0x93, 0x93, 0xf9, 0x09, 0x41, 0x4d, 0x0a, 0x84, 0xfd, 0x09, 0x01, 0x4e, + 0x7b, 0x79, 0xbc, 0x09, 0x41, 0x0b, 0xce, 0x9a, 0x0c, 0x57, 0xc8, 0x2f, + 0x4e, 0xf5, 0x01, 0x48, 0x77, 0x4b, 0xb9, 0xf6, 0x41, 0x11, 0x41, 0x59, + 0xad, 0x0a, 0x06, 0xef, 0x06, 0xeb, 0x09, 0x0a, 0x81, 0xb1, 0x01, 0xff, + 0x90, 0xf5, 0x04, 0x91, 0x01, 0xff, 0x90, 0xb3, 0x04, 0x91, 0xf4, 0x03, + 0x92, 0xb5, 0x03, 0x93, 0xf6, 0x02, 0x94, 0xb7, 0x02, 0x95, 0xf8, 0x01, + 0x96, 0xb9, 0x01, 0x97, 0x71, 0x98, 0x33, 0x99, 0x01, 0xff, 0x45, 0x0e, + 0xe2, 0x86, 0xe8, 0x01, 0x46, 0xa2, 0xd8, 0xb1, 0xe8, 0x01, 0x45, 0x8b, + 0xe2, 0xb6, 0xe8, 0x01, 0x45, 0xb3, 0xe2, 0x75, 0xe8, 0x01, 0x45, 0x0d, + 0xe3, 0x0f, 0xe8, 0x01, 0x44, 0xd5, 0xed, 0x2c, 0xe8, 0x01, 0x45, 0x3a, + 0xe3, 0x35, 0xe8, 0x01, 0x45, 0x53, 0xe3, 0x61, 0xe8, 0x41, 0x45, 0xff, + 0xe1, 0x42, 0xe8, 0x01, 0x44, 0x09, 0xed, 0x43, 0xe8, 0x01, 0x44, 0x69, + 0xed, 0xb9, 0xe8, 0x01, 0x4b, 0x87, 0x98, 0x82, 0xe8, 0x01, 0x46, 0xe4, + 0xd8, 0x89, 0xe8, 0x01, 0x44, 0x11, 0xee, 0xba, 0xe8, 0x01, 0x44, 0x08, + 0xd9, 0x6a, 0xe8, 0x01, 0x46, 0x2c, 0xd9, 0x9b, 0xe8, 0x01, 0x46, 0x44, + 0xd9, 0x97, 0xe8, 0x01, 0x46, 0x56, 0xd9, 0x1a, 0xe8, 0x41, 0x46, 0x84, + 0xd8, 0xc2, 0xe8, 0x01, 0x44, 0x2d, 0xed, 0xad, 0xe8, 0x01, 0x45, 0x7c, + 0xe2, 0x99, 0xe8, 0x81, 0x2f, 0x45, 0xc2, 0xe2, 0xbc, 0xe8, 0x01, 0x45, + 0xef, 0xe2, 0x9a, 0xe8, 0x81, 0x1e, 0x49, 0x76, 0xb5, 0x52, 0xe8, 0x01, + 0x44, 0x2d, 0xee, 0x68, 0xe8, 0x01, 0x47, 0x61, 0xce, 0x8b, 0xe8, 0x01, + 0x44, 0x8d, 0xee, 0x2d, 0xe8, 0x01, 0x45, 0xb2, 0xe3, 0x07, 0xe8, 0x41, + 0xef, 0x9a, 0xe8, 0x41, 0xef, 0x99, 0xe8, 0x41, 0x45, 0x1d, 0xe2, 0x50, + 0xe8, 0x01, 0x4a, 0xc3, 0xa6, 0x9c, 0xe8, 0x01, 0x45, 0x9a, 0xe2, 0x31, + 0xe8, 0x01, 0x44, 0x75, 0xed, 0x25, 0xe8, 0x01, 0x46, 0xf0, 0xd8, 0xc0, + 0xe8, 0x01, 0x44, 0x05, 0xee, 0x27, 0xe8, 0x01, 0x46, 0x02, 0xd9, 0x87, + 0xe8, 0x01, 0x46, 0x1a, 0xd9, 0x88, 0xe8, 0x01, 0x44, 0x95, 0xee, 0x85, + 0xe8, 0x01, 0x45, 0xcb, 0xe3, 0x67, 0xe8, 0x41, 0x45, 0xfa, 0xe1, 0x1e, + 0xe8, 0x01, 0x44, 0x3d, 0xed, 0xbb, 0xe8, 0x01, 0x45, 0x86, 0xe2, 0xb5, + 0xe8, 0x01, 0x44, 0x87, 0x98, 0x3c, 0xe8, 0x01, 0x46, 0xde, 0xd8, 0x19, + 0xe8, 0x01, 0x44, 0xed, 0xed, 0x83, 0xe8, 0x01, 0x47, 0x53, 0xce, 0x7c, + 0xe8, 0x01, 0x45, 0x62, 0xe3, 0x4e, 0xe8, 0x01, 0x45, 0x8f, 0xe3, 0xa5, + 0xe8, 0x01, 0x47, 0x6f, 0xce, 0x7e, 0xe8, 0x41, 0x44, 0xd9, 0xec, 0x6e, + 0xe8, 0x01, 0x45, 0x4f, 0xe2, 0x58, 0xe8, 0x01, 0x4a, 0xd7, 0xa6, 0x9e, + 0xe8, 0x01, 0x45, 0xc7, 0xe2, 0x10, 0xe8, 0x01, 0x45, 0x03, 0xe3, 0xbe, + 0xe8, 0x01, 0x45, 0x1c, 0xe3, 0x93, 0xe8, 0x01, 0x46, 0x0e, 0xd9, 0x7b, + 0xe8, 0x01, 0x43, 0xce, 0xf3, 0x28, 0xe8, 0x01, 0x45, 0x85, 0xe3, 0xa8, + 0xe8, 0x01, 0x46, 0x5c, 0xd9, 0xb7, 0xe8, 0x41, 0x45, 0x13, 0xe2, 0x72, + 0xe8, 0x01, 0x44, 0x19, 0xed, 0x2a, 0xe8, 0x01, 0x45, 0x6d, 0xe2, 0x9f, + 0xe8, 0x01, 0x45, 0xa9, 0xe2, 0x5f, 0xe8, 0x01, 0x46, 0xea, 0xd8, 0xb8, + 0xe8, 0x01, 0x44, 0xf1, 0xed, 0x2b, 0xe8, 0x01, 0x45, 0x3f, 0xe3, 0x33, + 0xe8, 0x01, 0x44, 0x65, 0xee, 0x29, 0xe8, 0x01, 0x44, 0x85, 0xee, 0x21, + 0xe8, 0x01, 0x45, 0xdf, 0xe3, 0x13, 0xe8, 0x41, 0x46, 0x78, 0xd8, 0x7d, + 0xe8, 0x01, 0x44, 0x4f, 0xe2, 0x59, 0xe8, 0x01, 0x45, 0x81, 0xe2, 0x95, + 0xe8, 0x01, 0x45, 0xb8, 0xe2, 0xae, 0xe8, 0x01, 0x45, 0xdb, 0xe2, 0xa6, + 0xe8, 0x01, 0x45, 0x21, 0xe3, 0xb0, 0xe8, 0x01, 0x45, 0x49, 0xe3, 0x0b, + 0xe8, 0x01, 0x47, 0x5a, 0xce, 0x7f, 0xe8, 0x01, 0x46, 0x3e, 0xd9, 0x70, + 0xe8, 0x01, 0x45, 0xc1, 0xe3, 0xaf, 0xe8, 0x41, 0x49, 0x37, 0xb5, 0x3d, + 0xe8, 0x01, 0x44, 0x11, 0xed, 0x84, 0xe8, 0x01, 0x46, 0xae, 0xd8, 0xa4, + 0xe8, 0x01, 0x44, 0x79, 0xed, 0x4f, 0xe8, 0x01, 0x45, 0x08, 0xe3, 0x0d, + 0xe8, 0x01, 0x47, 0x4c, 0xce, 0x7a, 0xe8, 0x01, 0x44, 0x51, 0xee, 0x32, + 0xe8, 0x01, 0x45, 0x6c, 0xe3, 0x66, 0xe8, 0x01, 0x44, 0xad, 0xee, 0x0c, + 0xe8, 0x01, 0x45, 0xc6, 0xe3, 0xb2, 0xe8, 0x41, 0x43, 0x71, 0xf3, 0x26, + 0xe8, 0x01, 0x45, 0x36, 0xe2, 0x62, 0xe8, 0x01, 0x45, 0x90, 0xe2, 0x91, + 0xe8, 0x01, 0x45, 0xa4, 0xe2, 0x20, 0xe8, 0x01, 0x45, 0xfe, 0xe2, 0x49, + 0xe8, 0x01, 0x4b, 0x92, 0x98, 0x9d, 0xe8, 0x01, 0x4c, 0xe3, 0x8b, 0x81, + 0xe8, 0x01, 0x45, 0x58, 0xe3, 0xaa, 0xe8, 0x01, 0x45, 0x8a, 0xe3, 0xa3, + 0xe8, 0x01, 0x45, 0xe4, 0xe3, 0x56, 0xe8, 0x41, 0x90, 0xb5, 0x04, 0x91, + 0xf6, 0x03, 0x92, 0xb7, 0x03, 0x93, 0xf8, 0x02, 0x94, 0xb9, 0x02, 0x95, + 0xfa, 0x01, 0x96, 0xbb, 0x01, 0x97, 0x7d, 0x98, 0x3f, 0x99, 0x01, 0xff, + 0x46, 0x72, 0xd8, 0x77, 0xe8, 0x01, 0x45, 0x40, 0xe2, 0x47, 0xe8, 0x01, + 0x45, 0x68, 0xe2, 0xa0, 0xe8, 0x01, 0x46, 0xba, 0xd8, 0xa9, 0xe8, 0x01, + 0x45, 0xf4, 0xe2, 0x18, 0xe8, 0x01, 0x44, 0x17, 0xe3, 0x04, 0xe8, 0x01, + 0x44, 0x29, 0xee, 0x6c, 0xe8, 0x01, 0x44, 0x59, 0xee, 0x1f, 0xe8, 0x01, + 0x46, 0x50, 0xd9, 0xc3, 0xe8, 0x01, 0x44, 0xb5, 0xee, 0x8d, 0xe8, 0x41, + 0x44, 0xf9, 0xec, 0x57, 0xe8, 0x01, 0x45, 0x3b, 0xe2, 0x8f, 0xe8, 0x01, + 0x46, 0xb4, 0xd8, 0x79, 0xe8, 0x01, 0x46, 0xc0, 0xd8, 0x6f, 0xe8, 0x01, + 0x45, 0xe5, 0xe2, 0x39, 0xe8, 0x01, 0x44, 0x15, 0xee, 0xbd, 0xe8, 0x01, + 0x4b, 0x9d, 0x98, 0x80, 0xe8, 0x01, 0x45, 0x5d, 0xe3, 0x73, 0xe8, 0x01, + 0x44, 0x91, 0xee, 0x60, 0xe8, 0x01, 0x45, 0xad, 0xe3, 0x41, 0xe8, 0x41, + 0x45, 0x09, 0xe2, 0xac, 0xe8, 0x01, 0x46, 0x90, 0xd8, 0xab, 0xe8, 0x01, + 0x45, 0x77, 0xe2, 0x98, 0xe8, 0x01, 0x44, 0x89, 0xed, 0x3a, 0xe8, 0x01, + 0x45, 0xe0, 0xe2, 0xa1, 0xe8, 0x01, 0x44, 0xe9, 0xed, 0x5e, 0xe8, 0x01, + 0x45, 0x30, 0xe3, 0x05, 0xe8, 0x01, 0x44, 0x7d, 0xee, 0xbf, 0xe8, 0x01, + 0x45, 0x80, 0xe3, 0x5d, 0xe8, 0x01, 0x44, 0xc5, 0xee, 0x34, 0xe8, 0x41, + 0x46, 0x7e, 0xd8, 0xc4, 0xe8, 0x01, 0x45, 0x4a, 0xe2, 0x11, 0xe8, 0x01, + 0x45, 0x72, 0xe2, 0x94, 0xe8, 0x01, 0x44, 0x7d, 0xed, 0x51, 0xe8, 0x01, + 0x45, 0xf9, 0xe2, 0xb4, 0xe8, 0x01, 0x45, 0x17, 0xe3, 0x03, 0xe8, 0x01, + 0x44, 0x45, 0xee, 0x92, 0xe8, 0x01, 0x46, 0x32, 0xd9, 0xb3, 0xe8, 0x01, + 0x44, 0xa1, 0xee, 0x8c, 0xe8, 0x01, 0x44, 0xcd, 0xee, 0x4a, 0xe8, 0x41, + 0x44, 0xe9, 0xec, 0x8e, 0xe8, 0x01, 0x44, 0x3b, 0xe2, 0x90, 0xe8, 0x01, + 0x45, 0x5e, 0xe2, 0x74, 0xe8, 0x01, 0x45, 0xae, 0xe2, 0x71, 0xe8, 0x01, + 0x45, 0xea, 0xe2, 0x3b, 0xe8, 0x01, 0x44, 0x09, 0xee, 0x48, 0xe8, 0x01, + 0x45, 0x2b, 0xe3, 0xa7, 0xe8, 0x01, 0x46, 0x38, 0xd9, 0x8a, 0xe8, 0x01, + 0x46, 0x4a, 0xd9, 0xc1, 0xe8, 0x01, 0x45, 0xb7, 0xe3, 0x17, 0xe8, 0x41, + 0x45, 0x18, 0xe2, 0x6b, 0xe8, 0x01, 0x44, 0x15, 0xed, 0x69, 0xe8, 0x01, + 0x45, 0x63, 0xe2, 0x6d, 0xe8, 0x01, 0x46, 0xc6, 0xd8, 0x78, 0xe8, 0x01, + 0x46, 0xd8, 0xd8, 0xa2, 0xe8, 0x01, 0x44, 0xfc, 0xd8, 0x0e, 0xe8, 0x01, + 0x46, 0x08, 0xd9, 0x76, 0xe8, 0x01, 0x46, 0x26, 0xd9, 0x96, 0xe8, 0x01, + 0x44, 0x9d, 0xee, 0x06, 0xe8, 0x01, 0x45, 0xda, 0xe3, 0x12, 0xe8, 0x41, + 0x44, 0xdd, 0xec, 0x4d, 0xe8, 0x01, 0x44, 0x41, 0xed, 0x53, 0xe8, 0x01, + 0x44, 0x6d, 0xed, 0x54, 0xe8, 0x01, 0x44, 0xa5, 0xed, 0x55, 0xe8, 0x01, + 0x44, 0xad, 0xed, 0x5a, 0xe8, 0x01, 0x44, 0xe5, 0xed, 0x5b, 0xe8, 0x01, + 0x44, 0x25, 0xee, 0x5c, 0xe8, 0x01, 0x45, 0x71, 0xe3, 0x63, 0xe8, 0x01, + 0x45, 0x99, 0xe3, 0x64, 0xe8, 0x01, 0x45, 0xd0, 0xe3, 0x65, 0xe8, 0x41, + 0x44, 0xf1, 0xec, 0x2f, 0xe8, 0x01, 0x44, 0x39, 0xed, 0x30, 0xe8, 0x01, + 0x44, 0xbf, 0x42, 0x44, 0xe8, 0x01, 0x44, 0xa1, 0xed, 0x45, 0xe8, 0x01, + 0x44, 0xc1, 0xed, 0x46, 0xe8, 0x01, 0x44, 0xf9, 0xed, 0x36, 0xe8, 0x01, + 0x44, 0x3d, 0xee, 0x37, 0xe8, 0x01, 0x44, 0x71, 0xee, 0x38, 0xe8, 0x01, + 0x44, 0x99, 0xee, 0x4b, 0xe8, 0x01, 0x44, 0xb1, 0xee, 0x4c, 0xe8, 0x41, + 0x44, 0xd5, 0xec, 0x1b, 0xe8, 0x01, 0x44, 0xe8, 0xc2, 0x1c, 0xe8, 0x01, + 0x44, 0x49, 0xed, 0x1d, 0xe8, 0x01, 0x43, 0xa4, 0xf3, 0x22, 0xe8, 0x01, + 0x43, 0xd6, 0xe2, 0x23, 0xe8, 0x01, 0x43, 0xb6, 0xf3, 0x24, 0xe8, 0x01, + 0x44, 0x21, 0xee, 0x3e, 0xe8, 0x01, 0x44, 0x5d, 0xee, 0x3f, 0xe8, 0x01, + 0x44, 0x89, 0xee, 0x40, 0xe8, 0x01, 0x44, 0xc1, 0xee, 0x2e, 0xe8, 0x41, + 0x44, 0x1d, 0xed, 0x00, 0xe8, 0x01, 0x44, 0x4d, 0xed, 0x01, 0xe8, 0x01, + 0x44, 0x81, 0xed, 0x02, 0xe8, 0x01, 0x44, 0xc9, 0xed, 0x08, 0xe8, 0x01, + 0x44, 0x19, 0xee, 0x09, 0xe8, 0x01, 0x44, 0x55, 0xee, 0x0a, 0xe8, 0x01, + 0x45, 0x67, 0xe3, 0x14, 0xe8, 0x01, 0x45, 0x94, 0xe3, 0x15, 0xe8, 0x01, + 0x45, 0xbc, 0xe3, 0x16, 0xe8, 0x41, 0x45, 0x12, 0x0b, 0xce, 0xe8, 0x01, + 0xa6, 0x29, 0x44, 0xcf, 0x2a, 0xcf, 0xe8, 0x01, 0x43, 0x0e, 0x0b, 0xc7, + 0xe8, 0x01, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xc9, 0xe8, + 0x01, 0x42, 0x15, 0x02, 0xc8, 0xe8, 0x41, 0x44, 0xc9, 0x1d, 0xcd, 0xe8, + 0x01, 0x42, 0x01, 0x26, 0xcc, 0xe8, 0x41, 0x43, 0xd2, 0x05, 0xcb, 0xe8, + 0x01, 0x43, 0xf6, 0x06, 0xca, 0xe8, 0x41, 0x07, 0x71, 0x11, 0x24, 0x48, + 0xf5, 0x3b, 0xd6, 0xe8, 0x01, 0xb4, 0x01, 0xff, 0xa5, 0x06, 0x48, 0x6f, + 0x52, 0xd3, 0xe8, 0x41, 0x43, 0xc4, 0x58, 0xd0, 0xe8, 0x01, 0xae, 0x01, + 0xff, 0x4a, 0x2d, 0xa6, 0xd4, 0xe8, 0x01, 0xf3, 0xd1, 0xe8, 0x41, 0x4a, + 0x2d, 0xa6, 0xd5, 0xe8, 0x01, 0xf3, 0xd2, 0xe8, 0x41, 0x42, 0x10, 0x00, + 0x48, 0xf3, 0x01, 0x46, 0x38, 0xdf, 0xcb, 0xce, 0x01, 0x49, 0x2d, 0x29, + 0xe0, 0xfa, 0x41, 0xa1, 0xfd, 0x03, 0x06, 0x7c, 0xda, 0xec, 0x03, 0x06, + 0xef, 0x06, 0xa5, 0x03, 0xac, 0x6b, 0x58, 0x26, 0x2b, 0xf3, 0xaa, 0x00, + 0xb6, 0x06, 0x54, 0x08, 0x47, 0xf4, 0xaa, 0x40, 0x45, 0xe4, 0x23, 0xf6, + 0xaa, 0x00, 0x0a, 0x41, 0x77, 0x01, 0xff, 0xa1, 0x3c, 0x47, 0xe2, 0xcf, + 0xe9, 0xab, 0x00, 0xa9, 0x2a, 0x44, 0xa5, 0xf1, 0xea, 0xab, 0x00, 0x44, + 0x45, 0x86, 0xe3, 0xab, 0x00, 0x46, 0xf2, 0xdf, 0xe7, 0xab, 0x00, 0xb5, + 0x0c, 0x47, 0xea, 0x4b, 0xf5, 0xaa, 0x00, 0x45, 0x90, 0xec, 0xe6, 0xab, + 0x40, 0x43, 0x46, 0x86, 0xe8, 0xab, 0x00, 0xf5, 0xec, 0xaa, 0x40, 0xe9, + 0xeb, 0xaa, 0x00, 0x43, 0x46, 0x86, 0xe4, 0xab, 0x40, 0xa1, 0x0a, 0x43, + 0x46, 0x86, 0xe5, 0xab, 0x00, 0xf5, 0xee, 0xaa, 0x40, 0xe9, 0xed, 0xaa, + 0x00, 0xf5, 0xef, 0xaa, 0x40, 0x06, 0xed, 0x05, 0x06, 0x47, 0xbf, 0xd6, + 0xec, 0xab, 0x40, 0x45, 0x84, 0xe4, 0xd1, 0xab, 0x00, 0xa2, 0x9b, 0x02, + 0x02, 0x6d, 0x14, 0x8c, 0x02, 0xa4, 0xf1, 0x01, 0xe5, 0xe0, 0xaa, 0x00, + 0xa7, 0xde, 0x01, 0x43, 0x69, 0xde, 0xcd, 0xab, 0x00, 0xe9, 0xcf, 0xab, + 0x80, 0xcc, 0x01, 0xaa, 0xbd, 0x01, 0xab, 0xa7, 0x01, 0x43, 0x3f, 0x0e, + 0xc2, 0xab, 0x80, 0x99, 0x01, 0x43, 0xb1, 0x2f, 0xc3, 0xab, 0x80, 0x8b, + 0x01, 0xae, 0x65, 0xef, 0xe1, 0xaa, 0x00, 0xb0, 0x4e, 0x43, 0xd2, 0x07, + 0xd4, 0xab, 0x00, 0xb3, 0x34, 0xb4, 0x12, 0x42, 0x42, 0x0b, 0xce, 0xab, + 0x00, 0x43, 0xd1, 0x10, 0xcb, 0xab, 0x00, 0x44, 0xf2, 0xbd, 0xcc, 0xab, + 0x40, 0x43, 0x18, 0x1e, 0xca, 0xab, 0x00, 0x42, 0x62, 0x01, 0xc7, 0xab, + 0x80, 0x0d, 0xb4, 0x01, 0xff, 0xe1, 0xe4, 0xaa, 0x00, 0x42, 0x22, 0x00, + 0xe5, 0xaa, 0x40, 0x47, 0x42, 0xcd, 0xe0, 0xab, 0x40, 0x42, 0x57, 0x00, + 0xc1, 0xab, 0x00, 0x42, 0x22, 0x00, 0xe9, 0xaa, 0x00, 0x42, 0x40, 0x06, + 0xea, 0xaa, 0x40, 0xe1, 0xc4, 0xab, 0x80, 0x06, 0x43, 0x56, 0x00, 0xd0, + 0xab, 0x40, 0x47, 0x42, 0xcd, 0xde, 0xab, 0x40, 0xe1, 0xc5, 0xab, 0x80, + 0x19, 0x43, 0x05, 0xb3, 0xc9, 0xab, 0x80, 0x0c, 0x42, 0x2a, 0x05, 0xe8, + 0xaa, 0x00, 0x42, 0xbc, 0x22, 0xe3, 0xaa, 0x40, 0x47, 0x42, 0xcd, 0xe1, + 0xab, 0x40, 0x47, 0x42, 0xcd, 0xdf, 0xab, 0x40, 0x47, 0x42, 0xcd, 0xdd, + 0xab, 0x40, 0x47, 0x42, 0xcd, 0xdc, 0xab, 0x40, 0x43, 0x18, 0x1e, 0xc8, + 0xab, 0x00, 0x42, 0x55, 0x05, 0xc0, 0xab, 0xc0, 0x00, 0x47, 0x42, 0xcd, + 0xdb, 0xab, 0x40, 0x43, 0x56, 0x00, 0xd3, 0xab, 0x00, 0x42, 0x62, 0x01, + 0xd6, 0xab, 0x40, 0x47, 0x42, 0xcd, 0xe2, 0xab, 0x40, 0x43, 0x18, 0x1e, + 0xd8, 0xab, 0x00, 0x42, 0x55, 0x05, 0xd2, 0xab, 0x40, 0xa4, 0x0c, 0x43, + 0x18, 0x1e, 0xd9, 0xab, 0x00, 0x42, 0x62, 0x01, 0xd7, 0xab, 0x40, 0xe1, + 0xe6, 0xaa, 0x00, 0x42, 0x22, 0x00, 0xe7, 0xaa, 0x40, 0xe1, 0xe2, 0xaa, + 0x00, 0x42, 0x62, 0x01, 0xc6, 0xab, 0x40, 0xe1, 0xd5, 0xab, 0x00, 0x43, + 0x56, 0x00, 0xda, 0xab, 0x40, 0x45, 0x12, 0x0b, 0xf8, 0xab, 0x00, 0xa6, + 0x2e, 0x44, 0xcf, 0x2a, 0xf9, 0xab, 0x00, 0x43, 0x0e, 0x0b, 0xf1, 0xab, + 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xf0, 0xab, 0x40, 0x44, + 0x25, 0x01, 0xf3, 0xab, 0x00, 0x42, 0x15, 0x02, 0xf2, 0xab, 0x40, 0x44, + 0xc9, 0x1d, 0xf7, 0xab, 0x00, 0x42, 0x01, 0x26, 0xf6, 0xab, 0x40, 0x43, + 0xd2, 0x05, 0xf5, 0xab, 0x00, 0x43, 0xf6, 0x06, 0xf4, 0xab, 0x40, 0x42, + 0x1a, 0x00, 0xf0, 0xaa, 0x00, 0x42, 0x12, 0x0b, 0xeb, 0xab, 0x40, 0x4b, + 0xb2, 0x9c, 0xf1, 0xaa, 0x00, 0x43, 0x5a, 0x87, 0xf2, 0xaa, 0x00, 0x48, + 0x00, 0xca, 0xed, 0xab, 0x40, 0x09, 0x2b, 0xb8, 0xf7, 0x01, 0xa9, 0x01, + 0xff, 0x05, 0x8f, 0x46, 0xdd, 0x01, 0x03, 0x48, 0x04, 0x01, 0xff, 0xa2, + 0xc9, 0x01, 0x06, 0x31, 0x14, 0xb8, 0x01, 0xa6, 0x8e, 0x01, 0x4b, 0x1b, + 0x61, 0xa3, 0xf7, 0x01, 0x04, 0xc3, 0x00, 0x70, 0x52, 0xa1, 0x53, 0x5f, + 0x20, 0x00, 0x05, 0xc8, 0x00, 0x52, 0xb3, 0x27, 0x0e, 0x09, 0x7d, 0x17, + 0x4c, 0x32, 0x00, 0x59, 0x27, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, 0x46, + 0x12, 0x03, 0xaa, 0x26, 0x00, 0x46, 0xd6, 0x05, 0x8f, 0xf7, 0x41, 0x4a, + 0xf4, 0x2b, 0xc1, 0xf7, 0x01, 0x4d, 0x28, 0x13, 0xc3, 0xf7, 0x41, 0x46, + 0x13, 0x19, 0xaa, 0xf7, 0x01, 0x44, 0x4c, 0x04, 0x92, 0x25, 0x00, 0x03, + 0xff, 0x52, 0x0d, 0x51, 0xfa, 0x5b, 0xac, 0x26, 0xc0, 0x00, 0x54, 0xec, + 0x3f, 0xf0, 0xce, 0x41, 0x52, 0xec, 0x2b, 0xcb, 0xf7, 0x01, 0x4f, 0xd5, + 0x1c, 0xb6, 0xf7, 0x41, 0x80, 0x06, 0x60, 0x34, 0x0f, 0x6d, 0x27, 0x40, + 0x56, 0x53, 0x33, 0x75, 0x27, 0x00, 0x54, 0xd8, 0x21, 0x69, 0x27, 0x40, + 0x80, 0x06, 0x60, 0x34, 0x0f, 0x6c, 0x27, 0x40, 0x56, 0x53, 0x33, 0x74, + 0x27, 0x00, 0x54, 0xd8, 0x21, 0x68, 0x27, 0x40, 0x53, 0x59, 0x42, 0xb0, + 0xf7, 0x01, 0x09, 0x31, 0x3b, 0x11, 0x0c, 0x1c, 0x13, 0x01, 0xff, 0x4a, + 0xf4, 0x2b, 0xc5, 0xf7, 0x01, 0x4d, 0x28, 0x13, 0xc7, 0xf7, 0x41, 0x59, + 0x7f, 0x24, 0x6a, 0x27, 0x00, 0x5a, 0xd2, 0x21, 0x6b, 0x27, 0x40, 0x52, + 0xec, 0x2b, 0xce, 0xf7, 0x01, 0x4f, 0xd5, 0x1c, 0xbc, 0xf7, 0x41, 0x4b, + 0x0d, 0x03, 0xab, 0x26, 0x00, 0x50, 0x96, 0x65, 0x85, 0xf7, 0x41, 0x45, + 0x13, 0x05, 0x4c, 0x2e, 0x00, 0x50, 0xad, 0x00, 0x53, 0x2e, 0x00, 0x4d, + 0xa6, 0x34, 0x54, 0x2e, 0x40, 0xa3, 0xd0, 0x02, 0x06, 0xef, 0x06, 0xf4, + 0x01, 0x4e, 0x9f, 0x77, 0x9a, 0x6e, 0x01, 0x49, 0x81, 0x16, 0x98, 0x6e, + 0x01, 0x07, 0xff, 0x39, 0x9e, 0x01, 0xb3, 0x01, 0xff, 0x0c, 0x77, 0x08, + 0x06, 0x4a, 0xed, 0xb3, 0x99, 0x6e, 0x41, 0xe1, 0x6d, 0x6e, 0x81, 0x81, + 0x01, 0xe2, 0x70, 0x6e, 0x01, 0xe3, 0x71, 0x6e, 0x01, 0xe4, 0x79, 0x6e, + 0x01, 0xe5, 0x6f, 0x6e, 0x01, 0xe6, 0x6a, 0x6e, 0x01, 0xe7, 0x69, 0x6e, + 0x01, 0xe8, 0x76, 0x6e, 0x81, 0x60, 0xe9, 0x6b, 0x6e, 0x01, 0xea, 0x6e, + 0x6e, 0x01, 0xeb, 0x6c, 0x6e, 0x81, 0x4f, 0xec, 0x74, 0x6e, 0x01, 0xed, + 0x60, 0x6e, 0x01, 0xee, 0x7b, 0x6e, 0x81, 0x3a, 0xef, 0x7d, 0x6e, 0x81, + 0x31, 0xf0, 0x67, 0x6e, 0x01, 0xf1, 0x75, 0x6e, 0x01, 0xf2, 0x7c, 0x6e, + 0x01, 0xf3, 0x61, 0x6e, 0x01, 0xf4, 0x68, 0x6e, 0x01, 0xf5, 0x72, 0x6e, + 0x01, 0xf6, 0x62, 0x6e, 0x01, 0xf7, 0x63, 0x6e, 0x01, 0xf8, 0x78, 0x6e, + 0x01, 0xf9, 0x7f, 0x6e, 0x81, 0x04, 0xfa, 0x65, 0x6e, 0x41, 0xf5, 0x73, + 0x6e, 0x41, 0xe5, 0x7a, 0x6e, 0x41, 0xe7, 0x77, 0x6e, 0x01, 0xf9, 0x77, + 0x6e, 0x41, 0xf0, 0x66, 0x6e, 0x41, 0xf0, 0x76, 0x6e, 0x41, 0xe9, 0x7e, + 0x6e, 0x01, 0x43, 0x08, 0x89, 0x64, 0x6e, 0x41, 0xa5, 0x37, 0xa6, 0x29, + 0x48, 0xc5, 0x53, 0x93, 0x6e, 0x01, 0xb3, 0x15, 0xb4, 0x01, 0xff, 0x42, + 0x92, 0x01, 0x8a, 0x6e, 0x01, 0x47, 0x95, 0x5a, 0x8d, 0x6e, 0x01, 0x45, + 0xe6, 0x2b, 0x8c, 0x6e, 0x41, 0x48, 0x85, 0x51, 0x91, 0x6e, 0x01, 0x46, + 0x01, 0x26, 0x90, 0x6e, 0x41, 0x46, 0x08, 0x18, 0x8f, 0x6e, 0x01, 0x47, + 0x0a, 0x5d, 0x8e, 0x6e, 0x41, 0x47, 0x52, 0x25, 0x92, 0x6e, 0x01, 0x45, + 0xb4, 0x6f, 0x8b, 0x6e, 0x41, 0x45, 0x12, 0x0b, 0x88, 0x6e, 0x01, 0xa6, + 0x43, 0x44, 0xcf, 0x2a, 0x89, 0x6e, 0x01, 0x43, 0x0e, 0x0b, 0x81, 0x6e, + 0x81, 0x30, 0xb3, 0x22, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x80, 0x6e, 0x41, + 0x44, 0x25, 0x01, 0x83, 0x6e, 0x81, 0x0d, 0x42, 0x15, 0x02, 0x82, 0x6e, + 0xc1, 0x00, 0x4f, 0x06, 0x69, 0x95, 0x6e, 0x41, 0x4f, 0x06, 0x69, 0x96, + 0x6e, 0x41, 0x44, 0xc9, 0x1d, 0x87, 0x6e, 0x01, 0x42, 0x01, 0x26, 0x86, + 0x6e, 0x41, 0x4f, 0x06, 0x69, 0x94, 0x6e, 0x41, 0x43, 0xd2, 0x05, 0x85, + 0x6e, 0x01, 0x43, 0xf6, 0x06, 0x84, 0x6e, 0x41, 0x0e, 0xe5, 0x05, 0x06, + 0x44, 0x14, 0x05, 0x97, 0x6e, 0x41, 0xe1, 0x4d, 0x6e, 0x81, 0x81, 0x01, + 0xe2, 0x50, 0x6e, 0x01, 0xe3, 0x51, 0x6e, 0x01, 0xe4, 0x59, 0x6e, 0x01, + 0xe5, 0x4f, 0x6e, 0x01, 0xe6, 0x4a, 0x6e, 0x01, 0xe7, 0x49, 0x6e, 0x01, + 0xe8, 0x56, 0x6e, 0x81, 0x60, 0xe9, 0x4b, 0x6e, 0x01, 0xea, 0x4e, 0x6e, + 0x01, 0xeb, 0x4c, 0x6e, 0x81, 0x4f, 0xec, 0x54, 0x6e, 0x01, 0xed, 0x40, + 0x6e, 0x01, 0xee, 0x5b, 0x6e, 0x81, 0x3a, 0xef, 0x5d, 0x6e, 0x81, 0x31, + 0xf0, 0x47, 0x6e, 0x01, 0xf1, 0x55, 0x6e, 0x01, 0xf2, 0x5c, 0x6e, 0x01, + 0xf3, 0x41, 0x6e, 0x01, 0xf4, 0x48, 0x6e, 0x01, 0xf5, 0x52, 0x6e, 0x01, + 0xf6, 0x42, 0x6e, 0x01, 0xf7, 0x43, 0x6e, 0x01, 0xf8, 0x58, 0x6e, 0x01, + 0xf9, 0x5f, 0x6e, 0x81, 0x04, 0xfa, 0x45, 0x6e, 0x41, 0xf5, 0x53, 0x6e, + 0x41, 0xe5, 0x5a, 0x6e, 0x41, 0xe7, 0x57, 0x6e, 0x01, 0xf9, 0x57, 0x6e, + 0x41, 0xf0, 0x46, 0x6e, 0x41, 0xf0, 0x56, 0x6e, 0x41, 0xe9, 0x5e, 0x6e, + 0x01, 0x43, 0x08, 0x89, 0x44, 0x6e, 0x41, 0x43, 0xfe, 0x05, 0xbe, 0xf9, + 0x01, 0x43, 0xa2, 0x38, 0xbf, 0xf9, 0x41, 0x06, 0x3a, 0xe0, 0x06, 0x49, + 0x8d, 0xbf, 0x56, 0xf3, 0x41, 0x45, 0x04, 0x02, 0x21, 0x22, 0x80, 0x0c, + 0x42, 0x08, 0x00, 0x5e, 0x22, 0x00, 0x54, 0x50, 0x45, 0x9d, 0x29, 0x40, + 0x80, 0x01, 0xff, 0x4c, 0x3f, 0x93, 0x9b, 0x29, 0x00, 0x27, 0xf4, 0x05, + 0x01, 0xff, 0x09, 0x0c, 0x49, 0x31, 0x09, 0x38, 0x44, 0x21, 0x0a, 0x09, + 0x01, 0x11, 0x07, 0xb3, 0x5e, 0x01, 0xff, 0x44, 0xc3, 0x00, 0xa9, 0x29, + 0x00, 0x45, 0xc8, 0x00, 0xa8, 0x29, 0x40, 0x44, 0xa5, 0x01, 0xae, 0x29, + 0x00, 0x42, 0x50, 0x02, 0xac, 0x29, 0x40, 0x44, 0xa5, 0x01, 0xaf, 0x29, + 0x00, 0x42, 0x50, 0x02, 0xad, 0x29, 0x40, 0x44, 0xc3, 0x00, 0xab, 0x29, + 0x00, 0x45, 0xc8, 0x00, 0xaa, 0x29, 0x40, 0x44, 0xaf, 0x70, 0xaf, 0x00, + 0x00, 0xa7, 0xf6, 0x42, 0xa8, 0x99, 0x3e, 0xab, 0xf7, 0x3c, 0xac, 0xe2, + 0x36, 0x45, 0xbc, 0xe8, 0xa3, 0xf9, 0x01, 0xee, 0x68, 0xf4, 0x81, 0x81, + 0x32, 0xb0, 0xf2, 0x31, 0xb2, 0xaf, 0x2e, 0xb3, 0xcd, 0x2a, 0xb4, 0x95, + 0x01, 0x46, 0x66, 0xe1, 0xd6, 0xf5, 0x01, 0x0c, 0x17, 0x97, 0x01, 0xff, + 0xa5, 0x75, 0xa6, 0x58, 0x44, 0xcf, 0x2a, 0xe9, 0xd2, 0x81, 0x4b, 0x43, + 0x0e, 0x0b, 0xe1, 0xd2, 0x01, 0xb3, 0x29, 0xb4, 0x06, 0x44, 0x43, 0x1e, + 0xe0, 0xd2, 0x41, 0x42, 0x92, 0x01, 0xea, 0xd2, 0x01, 0xa8, 0x0d, 0xb7, + 0x01, 0xff, 0x44, 0xe7, 0x2b, 0xec, 0xd2, 0x01, 0xef, 0xe2, 0xd2, 0x41, + 0x46, 0x96, 0x5a, 0xed, 0xd2, 0x01, 0x43, 0x26, 0x01, 0xe3, 0xd2, 0x41, + 0x44, 0xc9, 0x1d, 0xe7, 0xd2, 0x81, 0x0d, 0x42, 0x01, 0x26, 0xe6, 0xd2, + 0xc1, 0x00, 0x44, 0x0a, 0x18, 0xf0, 0xd2, 0x41, 0x44, 0x0a, 0x18, 0xf1, + 0xd2, 0x41, 0x44, 0x0a, 0x18, 0xf3, 0xd2, 0x41, 0xa9, 0x0d, 0x43, 0xf6, + 0x06, 0xe4, 0xd2, 0xc1, 0x00, 0x44, 0x0a, 0x18, 0xee, 0xd2, 0x41, 0x45, + 0x09, 0x18, 0xef, 0xd2, 0x01, 0x42, 0x32, 0x00, 0xe5, 0xd2, 0x41, 0x44, + 0xc9, 0x00, 0xe8, 0xd2, 0x81, 0x06, 0x45, 0xb4, 0x6f, 0xeb, 0xd2, 0x41, + 0x43, 0xc4, 0x09, 0xf2, 0xd2, 0x41, 0x47, 0x8a, 0xd0, 0xc9, 0xf9, 0x01, + 0x0a, 0xa4, 0x53, 0x01, 0xff, 0x05, 0x16, 0x61, 0xb6, 0x1b, 0x0e, 0x13, + 0x77, 0xad, 0x19, 0xa6, 0xda, 0x17, 0x07, 0x0b, 0xd2, 0xe0, 0x12, 0x05, + 0xc3, 0x00, 0xb8, 0x12, 0x0a, 0x07, 0xae, 0x93, 0x10, 0x02, 0x0d, 0x00, + 0xe1, 0x0f, 0xb3, 0x01, 0xff, 0x0a, 0x02, 0x48, 0xb2, 0x01, 0x06, 0x75, + 0x06, 0x01, 0xff, 0x08, 0xe4, 0x05, 0x61, 0x06, 0x5d, 0x07, 0x01, 0xff, + 0xe1, 0xb6, 0xd4, 0x01, 0xe2, 0xb7, 0xd4, 0x01, 0xe3, 0xb8, 0xd4, 0x01, + 0xe4, 0xb9, 0xd4, 0x01, 0xe6, 0xbb, 0xd4, 0x01, 0xe8, 0xbd, 0xd4, 0x01, + 0xe9, 0xbe, 0xd4, 0x01, 0xea, 0xbf, 0xd4, 0x01, 0xeb, 0xc0, 0xd4, 0x01, + 0xec, 0xc1, 0xd4, 0x01, 0xed, 0xc2, 0xd4, 0x01, 0xee, 0xc3, 0xd4, 0x01, + 0xf0, 0xc5, 0xd4, 0x01, 0xf1, 0xc6, 0xd4, 0x01, 0xf2, 0xc7, 0xd4, 0x01, + 0xf3, 0xc8, 0xd4, 0x01, 0xf4, 0xc9, 0xd4, 0x01, 0xf5, 0xca, 0xd4, 0x01, + 0xf6, 0xcb, 0xd4, 0x01, 0xf7, 0xcc, 0xd4, 0x01, 0xf8, 0xcd, 0xd4, 0x01, + 0xf9, 0xce, 0xd4, 0x01, 0xfa, 0xcf, 0xd4, 0x41, 0xe1, 0x9c, 0xd4, 0x01, + 0xe3, 0x9e, 0xd4, 0x01, 0xe4, 0x9f, 0xd4, 0x01, 0xe7, 0xa2, 0xd4, 0x01, + 0xea, 0xa5, 0xd4, 0x01, 0xeb, 0xa6, 0xd4, 0x01, 0xee, 0xa9, 0xd4, 0x01, + 0xef, 0xaa, 0xd4, 0x01, 0xf0, 0xab, 0xd4, 0x01, 0xf1, 0xac, 0xd4, 0x01, + 0xf3, 0xae, 0xd4, 0x01, 0xf4, 0xaf, 0xd4, 0x01, 0xf5, 0xb0, 0xd4, 0x01, + 0xf6, 0xb1, 0xd4, 0x01, 0xf7, 0xb2, 0xd4, 0x01, 0xf8, 0xb3, 0xd4, 0x01, + 0xf9, 0xb4, 0xd4, 0x01, 0xfa, 0xb5, 0xd4, 0x41, 0x05, 0x16, 0x61, 0xfe, + 0x03, 0x08, 0xe4, 0x05, 0x91, 0x03, 0x06, 0xef, 0x06, 0xca, 0x02, 0x07, + 0x0b, 0xd2, 0x6d, 0x06, 0x5d, 0x07, 0x01, 0xff, 0xe1, 0xba, 0xd5, 0x01, + 0xe2, 0xbb, 0xd5, 0x01, 0xe3, 0xbc, 0xd5, 0x01, 0xe4, 0xbd, 0xd5, 0x01, + 0xe5, 0xbe, 0xd5, 0x01, 0xe6, 0xbf, 0xd5, 0x01, 0xe7, 0xc0, 0xd5, 0x01, + 0xe8, 0xc1, 0xd5, 0x01, 0xe9, 0xc2, 0xd5, 0x01, 0xea, 0xc3, 0xd5, 0x01, + 0xeb, 0xc4, 0xd5, 0x01, 0xec, 0xc5, 0xd5, 0x01, 0xed, 0xc6, 0xd5, 0x01, + 0xee, 0xc7, 0xd5, 0x01, 0xef, 0xc8, 0xd5, 0x01, 0xf0, 0xc9, 0xd5, 0x01, + 0xf1, 0xca, 0xd5, 0x01, 0xf2, 0xcb, 0xd5, 0x01, 0xf3, 0xcc, 0xd5, 0x01, + 0xf4, 0xcd, 0xd5, 0x01, 0xf5, 0xce, 0xd5, 0x01, 0xf6, 0xcf, 0xd5, 0x01, + 0xf7, 0xd0, 0xd5, 0x01, 0xf8, 0xd1, 0xd5, 0x01, 0xf9, 0xd2, 0xd5, 0x01, + 0xfa, 0xd3, 0xd5, 0x41, 0x08, 0xe4, 0x05, 0x6d, 0x06, 0x5d, 0x07, 0x01, + 0xff, 0xe1, 0x22, 0xd6, 0x01, 0xe2, 0x23, 0xd6, 0x01, 0xe3, 0x24, 0xd6, + 0x01, 0xe4, 0x25, 0xd6, 0x01, 0xe5, 0x26, 0xd6, 0x01, 0xe6, 0x27, 0xd6, + 0x01, 0xe7, 0x28, 0xd6, 0x01, 0xe8, 0x29, 0xd6, 0x01, 0xe9, 0x2a, 0xd6, + 0x01, 0xea, 0x2b, 0xd6, 0x01, 0xeb, 0x2c, 0xd6, 0x01, 0xec, 0x2d, 0xd6, + 0x01, 0xed, 0x2e, 0xd6, 0x01, 0xee, 0x2f, 0xd6, 0x01, 0xef, 0x30, 0xd6, + 0x01, 0xf0, 0x31, 0xd6, 0x01, 0xf1, 0x32, 0xd6, 0x01, 0xf2, 0x33, 0xd6, + 0x01, 0xf3, 0x34, 0xd6, 0x01, 0xf4, 0x35, 0xd6, 0x01, 0xf5, 0x36, 0xd6, + 0x01, 0xf6, 0x37, 0xd6, 0x01, 0xf7, 0x38, 0xd6, 0x01, 0xf8, 0x39, 0xd6, + 0x01, 0xf9, 0x3a, 0xd6, 0x01, 0xfa, 0x3b, 0xd6, 0x41, 0xe1, 0x08, 0xd6, + 0x01, 0xe2, 0x09, 0xd6, 0x01, 0xe3, 0x0a, 0xd6, 0x01, 0xe4, 0x0b, 0xd6, + 0x01, 0xe5, 0x0c, 0xd6, 0x01, 0xe6, 0x0d, 0xd6, 0x01, 0xe7, 0x0e, 0xd6, + 0x01, 0xe8, 0x0f, 0xd6, 0x01, 0xe9, 0x10, 0xd6, 0x01, 0xea, 0x11, 0xd6, + 0x01, 0xeb, 0x12, 0xd6, 0x01, 0xec, 0x13, 0xd6, 0x01, 0xed, 0x14, 0xd6, + 0x01, 0xee, 0x15, 0xd6, 0x01, 0xef, 0x16, 0xd6, 0x01, 0xf0, 0x17, 0xd6, + 0x01, 0xf1, 0x18, 0xd6, 0x01, 0xf2, 0x19, 0xd6, 0x01, 0xf3, 0x1a, 0xd6, + 0x01, 0xf4, 0x1b, 0xd6, 0x01, 0xf5, 0x1c, 0xd6, 0x01, 0xf6, 0x1d, 0xd6, + 0x01, 0xf7, 0x1e, 0xd6, 0x01, 0xf8, 0x1f, 0xd6, 0x01, 0xf9, 0x20, 0xd6, + 0x01, 0xfa, 0x21, 0xd6, 0x41, 0x45, 0x12, 0x0b, 0xea, 0xd7, 0x01, 0xa6, + 0x2e, 0x44, 0xcf, 0x2a, 0xeb, 0xd7, 0x01, 0x43, 0x0e, 0x0b, 0xe3, 0xd7, + 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xe2, 0xd7, 0x41, 0x44, + 0x25, 0x01, 0xe5, 0xd7, 0x01, 0x42, 0x15, 0x02, 0xe4, 0xd7, 0x41, 0x44, + 0xc9, 0x1d, 0xe9, 0xd7, 0x01, 0x42, 0x01, 0x26, 0xe8, 0xd7, 0x41, 0x43, + 0xd2, 0x05, 0xe7, 0xd7, 0x01, 0x43, 0xf6, 0x06, 0xe6, 0xd7, 0x41, 0xe1, + 0xa0, 0xd5, 0x01, 0xe2, 0xa1, 0xd5, 0x01, 0xe3, 0xa2, 0xd5, 0x01, 0xe4, + 0xa3, 0xd5, 0x01, 0xe5, 0xa4, 0xd5, 0x01, 0xe6, 0xa5, 0xd5, 0x01, 0xe7, + 0xa6, 0xd5, 0x01, 0xe8, 0xa7, 0xd5, 0x01, 0xe9, 0xa8, 0xd5, 0x01, 0xea, + 0xa9, 0xd5, 0x01, 0xeb, 0xaa, 0xd5, 0x01, 0xec, 0xab, 0xd5, 0x01, 0xed, + 0xac, 0xd5, 0x01, 0xee, 0xad, 0xd5, 0x01, 0xef, 0xae, 0xd5, 0x01, 0xf0, + 0xaf, 0xd5, 0x01, 0xf1, 0xb0, 0xd5, 0x01, 0xf2, 0xb1, 0xd5, 0x01, 0xf3, + 0xb2, 0xd5, 0x01, 0xf4, 0xb3, 0xd5, 0x01, 0xf5, 0xb4, 0xd5, 0x01, 0xf6, + 0xb5, 0xd5, 0x01, 0xf7, 0xb6, 0xd5, 0x01, 0xf8, 0xb7, 0xd5, 0x01, 0xf9, + 0xb8, 0xd5, 0x01, 0xfa, 0xb9, 0xd5, 0x41, 0x08, 0xe4, 0x05, 0x87, 0x08, + 0x06, 0xef, 0x06, 0xc0, 0x07, 0x4e, 0xce, 0x15, 0x8a, 0xd7, 0x01, 0x07, + 0x0b, 0xd2, 0xc9, 0x02, 0x4c, 0x93, 0x90, 0x8c, 0xd7, 0x01, 0x45, 0xe9, + 0xe8, 0x6f, 0xd7, 0x01, 0xb0, 0xa8, 0x02, 0x4a, 0x41, 0xb0, 0x8e, 0xd7, + 0x01, 0x06, 0x5d, 0x07, 0x06, 0x4c, 0xc7, 0x95, 0x8b, 0xd7, 0x41, 0xe1, + 0xee, 0xd5, 0x81, 0x8c, 0x02, 0xe2, 0xef, 0xd5, 0x81, 0x80, 0x02, 0xe3, + 0xf0, 0xd5, 0x81, 0xf4, 0x01, 0xe4, 0xf1, 0xd5, 0x81, 0xe8, 0x01, 0xe5, + 0xf2, 0xd5, 0x81, 0xd6, 0x01, 0xe6, 0xf3, 0xd5, 0x81, 0xca, 0x01, 0xe7, + 0xf4, 0xd5, 0x81, 0xbe, 0x01, 0xe8, 0xf5, 0xd5, 0x01, 0xe9, 0xf6, 0xd5, + 0x81, 0xae, 0x01, 0xea, 0xf7, 0xd5, 0x01, 0xeb, 0xf8, 0xd5, 0x81, 0x9e, + 0x01, 0xec, 0xf9, 0xd5, 0x81, 0x92, 0x01, 0xed, 0xfa, 0xd5, 0x81, 0x88, + 0x01, 0xee, 0xfb, 0xd5, 0x81, 0x7f, 0xef, 0xfc, 0xd5, 0x81, 0x6b, 0xf0, + 0xfd, 0xd5, 0x81, 0x56, 0xf1, 0xfe, 0xd5, 0x01, 0xf2, 0xff, 0xd5, 0x81, + 0x47, 0xf3, 0x00, 0xd6, 0x81, 0x3c, 0xf4, 0x01, 0xd6, 0x81, 0x2b, 0xf5, + 0x02, 0xd6, 0x81, 0x20, 0xf6, 0x03, 0xd6, 0x01, 0xf7, 0x04, 0xd6, 0x01, + 0xf8, 0x05, 0xd6, 0x81, 0x0f, 0xf9, 0x06, 0xd6, 0x01, 0xfa, 0x07, 0xd6, + 0xc1, 0x00, 0x43, 0x94, 0x0f, 0x75, 0xd7, 0x41, 0xe9, 0x7d, 0xd7, 0x41, + 0x46, 0xcf, 0x15, 0x84, 0xd7, 0x41, 0x42, 0x5f, 0x24, 0x83, 0xd7, 0x01, + 0x44, 0xc8, 0x95, 0x77, 0xd7, 0x41, 0x44, 0xbf, 0x1f, 0x82, 0xd7, 0x41, + 0x42, 0x0b, 0x00, 0x80, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x85, 0xd7, 0x01, + 0xe9, 0x7f, 0xd7, 0x01, 0x42, 0x5a, 0x03, 0x87, 0xd7, 0x41, 0xad, 0x01, + 0xff, 0x43, 0xce, 0x05, 0x88, 0xd7, 0x01, 0x45, 0x4a, 0xe7, 0x7e, 0xd7, + 0x41, 0xf5, 0x7c, 0xd7, 0x41, 0xf5, 0x7b, 0xd7, 0x41, 0x44, 0x18, 0xe8, + 0x7a, 0xd7, 0x41, 0x44, 0x94, 0x90, 0x79, 0xd7, 0x41, 0x43, 0x1b, 0x05, + 0x78, 0xd7, 0x41, 0x44, 0x00, 0x21, 0x72, 0xd7, 0x41, 0x4a, 0x19, 0x9c, + 0x81, 0xd7, 0x41, 0x46, 0xcf, 0x15, 0x74, 0xd7, 0x01, 0x42, 0x12, 0x00, + 0x76, 0xd7, 0x41, 0x44, 0x38, 0xd6, 0x73, 0xd7, 0x41, 0x42, 0x49, 0x00, + 0x86, 0xd7, 0x41, 0x43, 0x94, 0x0f, 0x71, 0xd7, 0x41, 0x44, 0x3f, 0xe4, + 0x70, 0xd7, 0x41, 0x53, 0x4e, 0x48, 0x89, 0xd7, 0x01, 0x49, 0x93, 0xb9, + 0x8d, 0xd7, 0x01, 0x48, 0x5b, 0xac, 0x8f, 0xd7, 0x41, 0x08, 0xe4, 0x05, + 0xcf, 0x02, 0x4e, 0xce, 0x15, 0xc4, 0xd7, 0x01, 0x4c, 0x93, 0x90, 0xc6, + 0xd7, 0x01, 0x45, 0xe9, 0xe8, 0xa9, 0xd7, 0x01, 0xb0, 0xa8, 0x02, 0x4a, + 0x41, 0xb0, 0xc8, 0xd7, 0x01, 0x06, 0x5d, 0x07, 0x06, 0x4c, 0xc7, 0x95, + 0xc5, 0xd7, 0x41, 0xe1, 0x56, 0xd6, 0x81, 0x8c, 0x02, 0xe2, 0x57, 0xd6, + 0x81, 0x80, 0x02, 0xe3, 0x58, 0xd6, 0x81, 0xf4, 0x01, 0xe4, 0x59, 0xd6, + 0x81, 0xe8, 0x01, 0xe5, 0x5a, 0xd6, 0x81, 0xd6, 0x01, 0xe6, 0x5b, 0xd6, + 0x81, 0xca, 0x01, 0xe7, 0x5c, 0xd6, 0x81, 0xbe, 0x01, 0xe8, 0x5d, 0xd6, + 0x01, 0xe9, 0x5e, 0xd6, 0x81, 0xae, 0x01, 0xea, 0x5f, 0xd6, 0x01, 0xeb, + 0x60, 0xd6, 0x81, 0x9e, 0x01, 0xec, 0x61, 0xd6, 0x81, 0x92, 0x01, 0xed, + 0x62, 0xd6, 0x81, 0x88, 0x01, 0xee, 0x63, 0xd6, 0x81, 0x7f, 0xef, 0x64, + 0xd6, 0x81, 0x6b, 0xf0, 0x65, 0xd6, 0x81, 0x56, 0xf1, 0x66, 0xd6, 0x01, + 0xf2, 0x67, 0xd6, 0x81, 0x47, 0xf3, 0x68, 0xd6, 0x81, 0x3c, 0xf4, 0x69, + 0xd6, 0x81, 0x2b, 0xf5, 0x6a, 0xd6, 0x81, 0x20, 0xf6, 0x6b, 0xd6, 0x01, + 0xf7, 0x6c, 0xd6, 0x01, 0xf8, 0x6d, 0xd6, 0x81, 0x0f, 0xf9, 0x6e, 0xd6, + 0x01, 0xfa, 0x6f, 0xd6, 0xc1, 0x00, 0x43, 0x94, 0x0f, 0xaf, 0xd7, 0x41, + 0xe9, 0xb7, 0xd7, 0x41, 0x46, 0xcf, 0x15, 0xbe, 0xd7, 0x41, 0x42, 0x5f, + 0x24, 0xbd, 0xd7, 0x01, 0x44, 0xc8, 0x95, 0xb1, 0xd7, 0x41, 0x44, 0xbf, + 0x1f, 0xbc, 0xd7, 0x41, 0x42, 0x0b, 0x00, 0xba, 0xd7, 0x41, 0x42, 0x49, + 0x00, 0xbf, 0xd7, 0x01, 0xe9, 0xb9, 0xd7, 0x01, 0x42, 0x5a, 0x03, 0xc1, + 0xd7, 0x41, 0xad, 0x01, 0xff, 0x43, 0xce, 0x05, 0xc2, 0xd7, 0x01, 0x45, + 0x4a, 0xe7, 0xb8, 0xd7, 0x41, 0xf5, 0xb6, 0xd7, 0x41, 0xf5, 0xb5, 0xd7, + 0x41, 0x44, 0x18, 0xe8, 0xb4, 0xd7, 0x41, 0x44, 0x94, 0x90, 0xb3, 0xd7, + 0x41, 0x43, 0x1b, 0x05, 0xb2, 0xd7, 0x41, 0x44, 0x00, 0x21, 0xac, 0xd7, + 0x41, 0x4a, 0x19, 0x9c, 0xbb, 0xd7, 0x41, 0x46, 0xcf, 0x15, 0xae, 0xd7, + 0x01, 0x42, 0x12, 0x00, 0xb0, 0xd7, 0x41, 0x44, 0x38, 0xd6, 0xad, 0xd7, + 0x41, 0x42, 0x49, 0x00, 0xc0, 0xd7, 0x41, 0x43, 0x94, 0x0f, 0xab, 0xd7, + 0x41, 0x44, 0x3f, 0xe4, 0xaa, 0xd7, 0x41, 0x53, 0x4e, 0x48, 0xc3, 0xd7, + 0x01, 0x49, 0x93, 0xb9, 0xc7, 0xd7, 0x01, 0x48, 0x5b, 0xac, 0xc9, 0xd7, + 0x41, 0xe1, 0x3c, 0xd6, 0x81, 0x8c, 0x02, 0xe2, 0x3d, 0xd6, 0x81, 0x80, + 0x02, 0xe3, 0x3e, 0xd6, 0x81, 0xf4, 0x01, 0xe4, 0x3f, 0xd6, 0x81, 0xe8, + 0x01, 0xe5, 0x40, 0xd6, 0x81, 0xd6, 0x01, 0xe6, 0x41, 0xd6, 0x01, 0xe7, + 0x42, 0xd6, 0x81, 0xc6, 0x01, 0xe8, 0x43, 0xd6, 0x01, 0xe9, 0x44, 0xd6, + 0x81, 0xb6, 0x01, 0xea, 0x45, 0xd6, 0x01, 0xeb, 0x46, 0xd6, 0x81, 0xa6, + 0x01, 0xec, 0x47, 0xd6, 0x81, 0x9a, 0x01, 0xed, 0x48, 0xd6, 0x81, 0x90, + 0x01, 0xee, 0x49, 0xd6, 0x81, 0x86, 0x01, 0xef, 0x4a, 0xd6, 0x81, 0x72, + 0xf0, 0x4b, 0xd6, 0x81, 0x5d, 0xf1, 0x4c, 0xd6, 0x01, 0xf2, 0x4d, 0xd6, + 0x81, 0x4e, 0xf3, 0x4e, 0xd6, 0x81, 0x43, 0xf4, 0x4f, 0xd6, 0x81, 0x2b, + 0xf5, 0x50, 0xd6, 0x81, 0x20, 0xf6, 0x51, 0xd6, 0x01, 0xf7, 0x52, 0xd6, + 0x01, 0xf8, 0x53, 0xd6, 0x81, 0x0f, 0xf9, 0x54, 0xd6, 0x01, 0xfa, 0x55, + 0xd6, 0xc1, 0x00, 0x43, 0x94, 0x0f, 0x95, 0xd7, 0x41, 0xe9, 0x9d, 0xd7, + 0x41, 0x46, 0xcf, 0x15, 0xa4, 0xd7, 0x41, 0x42, 0x5f, 0x24, 0xa3, 0xd7, + 0x01, 0x44, 0xc8, 0x95, 0x97, 0xd7, 0xc1, 0x00, 0x47, 0x15, 0x08, 0xa1, + 0xd7, 0x41, 0x44, 0xbf, 0x1f, 0xa2, 0xd7, 0x41, 0x42, 0x0b, 0x00, 0xa0, + 0xd7, 0x41, 0x42, 0x49, 0x00, 0xa5, 0xd7, 0x01, 0xe9, 0x9f, 0xd7, 0x01, + 0x42, 0x5a, 0x03, 0xa7, 0xd7, 0x41, 0xad, 0x01, 0xff, 0x43, 0xce, 0x05, + 0xa8, 0xd7, 0x01, 0x45, 0x4a, 0xe7, 0x9e, 0xd7, 0x41, 0xf5, 0x9c, 0xd7, + 0x41, 0xf5, 0x9b, 0xd7, 0x41, 0x44, 0x18, 0xe8, 0x9a, 0xd7, 0x41, 0x44, + 0x94, 0x90, 0x99, 0xd7, 0x41, 0x43, 0x1b, 0x05, 0x98, 0xd7, 0x41, 0x44, + 0x00, 0x21, 0x92, 0xd7, 0x41, 0x46, 0xcf, 0x15, 0x94, 0xd7, 0x01, 0x42, + 0x12, 0x00, 0x96, 0xd7, 0x41, 0x44, 0x38, 0xd6, 0x93, 0xd7, 0x41, 0x42, + 0x49, 0x00, 0xa6, 0xd7, 0x41, 0x43, 0x94, 0x0f, 0x91, 0xd7, 0x41, 0x44, + 0x3f, 0xe4, 0x90, 0xd7, 0x41, 0x45, 0x12, 0x0b, 0xf4, 0xd7, 0x01, 0xa6, + 0x2e, 0x44, 0xcf, 0x2a, 0xf5, 0xd7, 0x01, 0x43, 0x0e, 0x0b, 0xed, 0xd7, + 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xec, 0xd7, 0x41, 0x44, + 0x25, 0x01, 0xef, 0xd7, 0x01, 0x42, 0x15, 0x02, 0xee, 0xd7, 0x41, 0x44, + 0xc9, 0x1d, 0xf3, 0xd7, 0x01, 0x42, 0x01, 0x26, 0xf2, 0xd7, 0x41, 0x43, + 0xd2, 0x05, 0xf1, 0xd7, 0x01, 0x43, 0xf6, 0x06, 0xf0, 0xd7, 0x41, 0xe1, + 0xd4, 0xd5, 0x81, 0x8c, 0x02, 0xe2, 0xd5, 0xd5, 0x81, 0x80, 0x02, 0xe3, + 0xd6, 0xd5, 0x81, 0xf4, 0x01, 0xe4, 0xd7, 0xd5, 0x81, 0xe8, 0x01, 0xe5, + 0xd8, 0xd5, 0x81, 0xd6, 0x01, 0xe6, 0xd9, 0xd5, 0x01, 0xe7, 0xda, 0xd5, + 0x81, 0xc6, 0x01, 0xe8, 0xdb, 0xd5, 0x01, 0xe9, 0xdc, 0xd5, 0x81, 0xb6, + 0x01, 0xea, 0xdd, 0xd5, 0x01, 0xeb, 0xde, 0xd5, 0x81, 0xa6, 0x01, 0xec, + 0xdf, 0xd5, 0x81, 0x9a, 0x01, 0xed, 0xe0, 0xd5, 0x81, 0x90, 0x01, 0xee, + 0xe1, 0xd5, 0x81, 0x86, 0x01, 0xef, 0xe2, 0xd5, 0x81, 0x72, 0xf0, 0xe3, + 0xd5, 0x81, 0x5d, 0xf1, 0xe4, 0xd5, 0x01, 0xf2, 0xe5, 0xd5, 0x81, 0x4e, + 0xf3, 0xe6, 0xd5, 0x81, 0x43, 0xf4, 0xe7, 0xd5, 0x81, 0x2b, 0xf5, 0xe8, + 0xd5, 0x81, 0x20, 0xf6, 0xe9, 0xd5, 0x01, 0xf7, 0xea, 0xd5, 0x01, 0xf8, + 0xeb, 0xd5, 0x81, 0x0f, 0xf9, 0xec, 0xd5, 0x01, 0xfa, 0xed, 0xd5, 0xc1, + 0x00, 0x43, 0x94, 0x0f, 0x5b, 0xd7, 0x41, 0xe9, 0x63, 0xd7, 0x41, 0x46, + 0xcf, 0x15, 0x6a, 0xd7, 0x41, 0x42, 0x5f, 0x24, 0x69, 0xd7, 0x01, 0x44, + 0xc8, 0x95, 0x5d, 0xd7, 0xc1, 0x00, 0x47, 0x15, 0x08, 0x67, 0xd7, 0x41, + 0x44, 0xbf, 0x1f, 0x68, 0xd7, 0x41, 0x42, 0x0b, 0x00, 0x66, 0xd7, 0x41, + 0x42, 0x49, 0x00, 0x6b, 0xd7, 0x01, 0xe9, 0x65, 0xd7, 0x01, 0x42, 0x5a, + 0x03, 0x6d, 0xd7, 0x41, 0xad, 0x01, 0xff, 0x43, 0xce, 0x05, 0x6e, 0xd7, + 0x01, 0x45, 0x4a, 0xe7, 0x64, 0xd7, 0x41, 0xf5, 0x62, 0xd7, 0x41, 0xf5, + 0x61, 0xd7, 0x41, 0x44, 0x18, 0xe8, 0x60, 0xd7, 0x41, 0x44, 0x94, 0x90, + 0x5f, 0xd7, 0x41, 0x43, 0x1b, 0x05, 0x5e, 0xd7, 0x41, 0x44, 0x00, 0x21, + 0x58, 0xd7, 0x41, 0x46, 0xcf, 0x15, 0x5a, 0xd7, 0x01, 0x42, 0x12, 0x00, + 0x5c, 0xd7, 0x41, 0x44, 0x38, 0xd6, 0x59, 0xd7, 0x41, 0x42, 0x49, 0x00, + 0x6c, 0xd7, 0x41, 0x43, 0x94, 0x0f, 0x57, 0xd7, 0x41, 0x44, 0x3f, 0xe4, + 0x56, 0xd7, 0x41, 0x04, 0xca, 0x00, 0x06, 0x4d, 0x38, 0x31, 0xcb, 0x27, + 0x40, 0x4d, 0x3e, 0x0f, 0xe9, 0x27, 0x00, 0x54, 0xa4, 0x41, 0xeb, 0x27, + 0x00, 0x55, 0x30, 0x3b, 0xef, 0x27, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, + 0x4e, 0xc8, 0x26, 0xe7, 0x27, 0x00, 0x56, 0x54, 0x09, 0xed, 0x27, 0x40, + 0x08, 0xe4, 0x05, 0xb3, 0x01, 0x06, 0xef, 0x06, 0x6d, 0x06, 0x5d, 0x07, + 0x01, 0xff, 0xe1, 0x8a, 0xd6, 0x01, 0xe2, 0x8b, 0xd6, 0x01, 0xe3, 0x8c, + 0xd6, 0x01, 0xe4, 0x8d, 0xd6, 0x01, 0xe5, 0x8e, 0xd6, 0x01, 0xe6, 0x8f, + 0xd6, 0x01, 0xe7, 0x90, 0xd6, 0x01, 0xe8, 0x91, 0xd6, 0x01, 0xe9, 0x92, + 0xd6, 0x01, 0xea, 0x93, 0xd6, 0x01, 0xeb, 0x94, 0xd6, 0x01, 0xec, 0x95, + 0xd6, 0x01, 0xed, 0x96, 0xd6, 0x01, 0xee, 0x97, 0xd6, 0x01, 0xef, 0x98, + 0xd6, 0x01, 0xf0, 0x99, 0xd6, 0x01, 0xf1, 0x9a, 0xd6, 0x01, 0xf2, 0x9b, + 0xd6, 0x01, 0xf3, 0x9c, 0xd6, 0x01, 0xf4, 0x9d, 0xd6, 0x01, 0xf5, 0x9e, + 0xd6, 0x01, 0xf6, 0x9f, 0xd6, 0x01, 0xf7, 0xa0, 0xd6, 0x01, 0xf8, 0xa1, + 0xd6, 0x01, 0xf9, 0xa2, 0xd6, 0x01, 0xfa, 0xa3, 0xd6, 0x41, 0x45, 0x12, + 0x0b, 0xfe, 0xd7, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xff, 0xd7, 0x01, + 0x43, 0x0e, 0x0b, 0xf7, 0xd7, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, + 0x1e, 0xf6, 0xd7, 0x41, 0x44, 0x25, 0x01, 0xf9, 0xd7, 0x01, 0x42, 0x15, + 0x02, 0xf8, 0xd7, 0x41, 0x44, 0xc9, 0x1d, 0xfd, 0xd7, 0x01, 0x42, 0x01, + 0x26, 0xfc, 0xd7, 0x41, 0x43, 0xd2, 0x05, 0xfb, 0xd7, 0x01, 0x43, 0xf6, + 0x06, 0xfa, 0xd7, 0x41, 0xe1, 0x70, 0xd6, 0x01, 0xe2, 0x71, 0xd6, 0x01, + 0xe3, 0x72, 0xd6, 0x01, 0xe4, 0x73, 0xd6, 0x01, 0xe5, 0x74, 0xd6, 0x01, + 0xe6, 0x75, 0xd6, 0x01, 0xe7, 0x76, 0xd6, 0x01, 0xe8, 0x77, 0xd6, 0x01, + 0xe9, 0x78, 0xd6, 0x01, 0xea, 0x79, 0xd6, 0x01, 0xeb, 0x7a, 0xd6, 0x01, + 0xec, 0x7b, 0xd6, 0x01, 0xed, 0x7c, 0xd6, 0x01, 0xee, 0x7d, 0xd6, 0x01, + 0xef, 0x7e, 0xd6, 0x01, 0xf0, 0x7f, 0xd6, 0x01, 0xf1, 0x80, 0xd6, 0x01, + 0xf2, 0x81, 0xd6, 0x01, 0xf3, 0x82, 0xd6, 0x01, 0xf4, 0x83, 0xd6, 0x01, + 0xf5, 0x84, 0xd6, 0x01, 0xf6, 0x85, 0xd6, 0x01, 0xf7, 0x86, 0xd6, 0x01, + 0xf8, 0x87, 0xd6, 0x01, 0xf9, 0x88, 0xd6, 0x01, 0xfa, 0x89, 0xd6, 0x41, + 0x4d, 0x3e, 0x0f, 0xe8, 0x27, 0x00, 0x54, 0xa4, 0x41, 0xea, 0x27, 0x00, + 0x55, 0x30, 0x3b, 0xee, 0x27, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, 0x4e, + 0xc8, 0x26, 0xe6, 0x27, 0x00, 0x56, 0x54, 0x09, 0xec, 0x27, 0x40, 0x08, + 0xe4, 0x05, 0xd8, 0x02, 0x4e, 0xce, 0x15, 0x16, 0xd7, 0x01, 0x4c, 0x93, + 0x90, 0x18, 0xd7, 0x01, 0x45, 0xe9, 0xe8, 0xfb, 0xd6, 0x01, 0xb0, 0xb1, + 0x02, 0x4a, 0x41, 0xb0, 0x1a, 0xd7, 0x01, 0x06, 0x5d, 0x07, 0x06, 0x4c, + 0xc7, 0x95, 0x17, 0xd7, 0x41, 0xe1, 0x4e, 0xd4, 0x81, 0x95, 0x02, 0xe2, + 0x4f, 0xd4, 0x81, 0x89, 0x02, 0xe3, 0x50, 0xd4, 0x81, 0xfd, 0x01, 0xe4, + 0x51, 0xd4, 0x81, 0xe4, 0x01, 0xe5, 0x52, 0xd4, 0x81, 0xd2, 0x01, 0xe6, + 0x53, 0xd4, 0x81, 0xc6, 0x01, 0xe7, 0x54, 0xd4, 0x81, 0xba, 0x01, 0xe9, + 0x56, 0xd4, 0x81, 0xae, 0x01, 0xea, 0x57, 0xd4, 0x01, 0xeb, 0x58, 0xd4, + 0x81, 0x9e, 0x01, 0xec, 0x59, 0xd4, 0x81, 0x92, 0x01, 0xed, 0x5a, 0xd4, + 0x81, 0x88, 0x01, 0xee, 0x5b, 0xd4, 0x81, 0x7f, 0xef, 0x5c, 0xd4, 0x81, + 0x6b, 0xf0, 0x5d, 0xd4, 0x81, 0x56, 0xf1, 0x5e, 0xd4, 0x01, 0xf2, 0x5f, + 0xd4, 0x81, 0x47, 0xf3, 0x60, 0xd4, 0x81, 0x3c, 0xf4, 0x61, 0xd4, 0x81, + 0x2b, 0xf5, 0x62, 0xd4, 0x81, 0x20, 0xf6, 0x63, 0xd4, 0x01, 0xf7, 0x64, + 0xd4, 0x01, 0xf8, 0x65, 0xd4, 0x81, 0x0f, 0xf9, 0x66, 0xd4, 0x01, 0xfa, + 0x67, 0xd4, 0xc1, 0x00, 0x43, 0x94, 0x0f, 0x01, 0xd7, 0x41, 0xe9, 0x09, + 0xd7, 0x41, 0x46, 0xcf, 0x15, 0x10, 0xd7, 0x41, 0x42, 0x5f, 0x24, 0x0f, + 0xd7, 0x01, 0x44, 0xc8, 0x95, 0x03, 0xd7, 0x41, 0x44, 0xbf, 0x1f, 0x0e, + 0xd7, 0x41, 0x42, 0x0b, 0x00, 0x0c, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x11, + 0xd7, 0x01, 0xe9, 0x0b, 0xd7, 0x01, 0x42, 0x5a, 0x03, 0x13, 0xd7, 0x41, + 0xad, 0x01, 0xff, 0x43, 0xce, 0x05, 0x14, 0xd7, 0x01, 0x45, 0x4a, 0xe7, + 0x0a, 0xd7, 0x41, 0xf5, 0x08, 0xd7, 0x41, 0xf5, 0x07, 0xd7, 0x41, 0x44, + 0x18, 0xe8, 0x06, 0xd7, 0x41, 0x44, 0x94, 0x90, 0x05, 0xd7, 0x41, 0x43, + 0x1b, 0x05, 0x04, 0xd7, 0x41, 0x44, 0x00, 0x21, 0xfe, 0xd6, 0x41, 0x4a, + 0x19, 0x9c, 0x0d, 0xd7, 0x41, 0x46, 0xcf, 0x15, 0x00, 0xd7, 0x01, 0x42, + 0x12, 0x00, 0x02, 0xd7, 0x41, 0x44, 0x38, 0xd6, 0xff, 0xd6, 0x01, 0x07, + 0x91, 0x41, 0x01, 0xff, 0xe9, 0xa4, 0xd6, 0x01, 0xea, 0xa5, 0xd6, 0x41, + 0x42, 0x49, 0x00, 0x12, 0xd7, 0x41, 0x43, 0x94, 0x0f, 0xfd, 0xd6, 0x41, + 0x44, 0x3f, 0xe4, 0xfc, 0xd6, 0x41, 0x53, 0x4e, 0x48, 0x15, 0xd7, 0x01, + 0x49, 0x93, 0xb9, 0x19, 0xd7, 0x01, 0x48, 0x5b, 0xac, 0x1b, 0xd7, 0x41, + 0xe1, 0x34, 0xd4, 0x81, 0x8c, 0x02, 0xe2, 0x35, 0xd4, 0x81, 0x80, 0x02, + 0xe3, 0x36, 0xd4, 0x81, 0xf4, 0x01, 0xe4, 0x37, 0xd4, 0x81, 0xe8, 0x01, + 0xe5, 0x38, 0xd4, 0x81, 0xd6, 0x01, 0xe6, 0x39, 0xd4, 0x01, 0xe7, 0x3a, + 0xd4, 0x81, 0xc6, 0x01, 0xe8, 0x3b, 0xd4, 0x01, 0xe9, 0x3c, 0xd4, 0x81, + 0xb6, 0x01, 0xea, 0x3d, 0xd4, 0x01, 0xeb, 0x3e, 0xd4, 0x81, 0xa6, 0x01, + 0xec, 0x3f, 0xd4, 0x81, 0x9a, 0x01, 0xed, 0x40, 0xd4, 0x81, 0x90, 0x01, + 0xee, 0x41, 0xd4, 0x81, 0x86, 0x01, 0xef, 0x42, 0xd4, 0x81, 0x72, 0xf0, + 0x43, 0xd4, 0x81, 0x5d, 0xf1, 0x44, 0xd4, 0x01, 0xf2, 0x45, 0xd4, 0x81, + 0x4e, 0xf3, 0x46, 0xd4, 0x81, 0x43, 0xf4, 0x47, 0xd4, 0x81, 0x2b, 0xf5, + 0x48, 0xd4, 0x81, 0x20, 0xf6, 0x49, 0xd4, 0x01, 0xf7, 0x4a, 0xd4, 0x01, + 0xf8, 0x4b, 0xd4, 0x81, 0x0f, 0xf9, 0x4c, 0xd4, 0x01, 0xfa, 0x4d, 0xd4, + 0xc1, 0x00, 0x43, 0x94, 0x0f, 0xe7, 0xd6, 0x41, 0xe9, 0xef, 0xd6, 0x41, + 0x46, 0xcf, 0x15, 0xf6, 0xd6, 0x41, 0x42, 0x5f, 0x24, 0xf5, 0xd6, 0x01, + 0x44, 0xc8, 0x95, 0xe9, 0xd6, 0xc1, 0x00, 0x47, 0x15, 0x08, 0xf3, 0xd6, + 0x41, 0x44, 0xbf, 0x1f, 0xf4, 0xd6, 0x41, 0x42, 0x0b, 0x00, 0xf2, 0xd6, + 0x41, 0x42, 0x49, 0x00, 0xf7, 0xd6, 0x01, 0xe9, 0xf1, 0xd6, 0x01, 0x42, + 0x5a, 0x03, 0xf9, 0xd6, 0x41, 0xad, 0x01, 0xff, 0x43, 0xce, 0x05, 0xfa, + 0xd6, 0x01, 0x45, 0x4a, 0xe7, 0xf0, 0xd6, 0x41, 0xf5, 0xee, 0xd6, 0x41, + 0xf5, 0xed, 0xd6, 0x41, 0x44, 0x18, 0xe8, 0xec, 0xd6, 0x41, 0x44, 0x94, + 0x90, 0xeb, 0xd6, 0x41, 0x43, 0x1b, 0x05, 0xea, 0xd6, 0x41, 0x44, 0x00, + 0x21, 0xe4, 0xd6, 0x41, 0x46, 0xcf, 0x15, 0xe6, 0xd6, 0x01, 0x42, 0x12, + 0x00, 0xe8, 0xd6, 0x41, 0x44, 0x38, 0xd6, 0xe5, 0xd6, 0x41, 0x42, 0x49, + 0x00, 0xf8, 0xd6, 0x41, 0x43, 0x94, 0x0f, 0xe3, 0xd6, 0x41, 0x44, 0x3f, + 0xe4, 0xe2, 0xd6, 0x41, 0x4f, 0x23, 0x39, 0xcd, 0x27, 0x00, 0x07, 0x41, + 0xc6, 0x01, 0xff, 0x08, 0xe4, 0x05, 0x6d, 0x06, 0x5d, 0x07, 0x01, 0xff, + 0xe1, 0x1e, 0xd5, 0x01, 0xe2, 0x1f, 0xd5, 0x01, 0xe3, 0x20, 0xd5, 0x01, + 0xe4, 0x21, 0xd5, 0x01, 0xe5, 0x22, 0xd5, 0x01, 0xe6, 0x23, 0xd5, 0x01, + 0xe7, 0x24, 0xd5, 0x01, 0xe8, 0x25, 0xd5, 0x01, 0xe9, 0x26, 0xd5, 0x01, + 0xea, 0x27, 0xd5, 0x01, 0xeb, 0x28, 0xd5, 0x01, 0xec, 0x29, 0xd5, 0x01, + 0xed, 0x2a, 0xd5, 0x01, 0xee, 0x2b, 0xd5, 0x01, 0xef, 0x2c, 0xd5, 0x01, + 0xf0, 0x2d, 0xd5, 0x01, 0xf1, 0x2e, 0xd5, 0x01, 0xf2, 0x2f, 0xd5, 0x01, + 0xf3, 0x30, 0xd5, 0x01, 0xf4, 0x31, 0xd5, 0x01, 0xf5, 0x32, 0xd5, 0x01, + 0xf6, 0x33, 0xd5, 0x01, 0xf7, 0x34, 0xd5, 0x01, 0xf8, 0x35, 0xd5, 0x01, + 0xf9, 0x36, 0xd5, 0x01, 0xfa, 0x37, 0xd5, 0x41, 0xe1, 0x04, 0xd5, 0x01, + 0xe2, 0x05, 0xd5, 0x01, 0xe4, 0x07, 0xd5, 0x01, 0xe5, 0x08, 0xd5, 0x01, + 0xe6, 0x09, 0xd5, 0x01, 0xe7, 0x0a, 0xd5, 0x01, 0xea, 0x0d, 0xd5, 0x01, + 0xeb, 0x0e, 0xd5, 0x01, 0xec, 0x0f, 0xd5, 0x01, 0xed, 0x10, 0xd5, 0x01, + 0xee, 0x11, 0xd5, 0x01, 0xef, 0x12, 0xd5, 0x01, 0xf0, 0x13, 0xd5, 0x01, + 0xf1, 0x14, 0xd5, 0x01, 0xf3, 0x16, 0xd5, 0x01, 0xf4, 0x17, 0xd5, 0x01, + 0xf5, 0x18, 0xd5, 0x01, 0xf6, 0x19, 0xd5, 0x01, 0xf7, 0x1a, 0xd5, 0x01, + 0xf8, 0x1b, 0xd5, 0x01, 0xf9, 0x1c, 0xd5, 0x41, 0x08, 0xe4, 0x05, 0xb3, + 0x01, 0x06, 0xef, 0x06, 0x6d, 0x06, 0x5d, 0x07, 0x01, 0xff, 0xe1, 0x52, + 0xd5, 0x01, 0xe2, 0x53, 0xd5, 0x01, 0xe3, 0x54, 0xd5, 0x01, 0xe4, 0x55, + 0xd5, 0x01, 0xe5, 0x56, 0xd5, 0x01, 0xe6, 0x57, 0xd5, 0x01, 0xe7, 0x58, + 0xd5, 0x01, 0xe8, 0x59, 0xd5, 0x01, 0xe9, 0x5a, 0xd5, 0x01, 0xea, 0x5b, + 0xd5, 0x01, 0xeb, 0x5c, 0xd5, 0x01, 0xec, 0x5d, 0xd5, 0x01, 0xed, 0x5e, + 0xd5, 0x01, 0xee, 0x5f, 0xd5, 0x01, 0xef, 0x60, 0xd5, 0x01, 0xf0, 0x61, + 0xd5, 0x01, 0xf1, 0x62, 0xd5, 0x01, 0xf2, 0x63, 0xd5, 0x01, 0xf3, 0x64, + 0xd5, 0x01, 0xf4, 0x65, 0xd5, 0x01, 0xf5, 0x66, 0xd5, 0x01, 0xf6, 0x67, + 0xd5, 0x01, 0xf7, 0x68, 0xd5, 0x01, 0xf8, 0x69, 0xd5, 0x01, 0xf9, 0x6a, + 0xd5, 0x01, 0xfa, 0x6b, 0xd5, 0x41, 0x45, 0x12, 0x0b, 0xe0, 0xd7, 0x01, + 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xe1, 0xd7, 0x01, 0x43, 0x0e, 0x0b, 0xd9, + 0xd7, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xd8, 0xd7, 0x41, + 0x44, 0x25, 0x01, 0xdb, 0xd7, 0x01, 0x42, 0x15, 0x02, 0xda, 0xd7, 0x41, + 0x44, 0xc9, 0x1d, 0xdf, 0xd7, 0x01, 0x42, 0x01, 0x26, 0xde, 0xd7, 0x41, + 0x43, 0xd2, 0x05, 0xdd, 0xd7, 0x01, 0x43, 0xf6, 0x06, 0xdc, 0xd7, 0x41, + 0xe1, 0x38, 0xd5, 0x01, 0xe2, 0x39, 0xd5, 0x01, 0xe4, 0x3b, 0xd5, 0x01, + 0xe5, 0x3c, 0xd5, 0x01, 0xe6, 0x3d, 0xd5, 0x01, 0xe7, 0x3e, 0xd5, 0x01, + 0xe9, 0x40, 0xd5, 0x01, 0xea, 0x41, 0xd5, 0x01, 0xeb, 0x42, 0xd5, 0x01, + 0xec, 0x43, 0xd5, 0x01, 0xed, 0x44, 0xd5, 0x01, 0xef, 0x46, 0xd5, 0x01, + 0xf3, 0x4a, 0xd5, 0x01, 0xf4, 0x4b, 0xd5, 0x01, 0xf5, 0x4c, 0xd5, 0x01, + 0xf6, 0x4d, 0xd5, 0x01, 0xf7, 0x4e, 0xd5, 0x01, 0xf8, 0x4f, 0xd5, 0x01, + 0xf9, 0x50, 0xd5, 0x41, 0x08, 0xe4, 0x05, 0xcc, 0x0b, 0x06, 0xef, 0x06, + 0x85, 0x0b, 0x4e, 0xce, 0x15, 0xdc, 0xd6, 0x01, 0x08, 0x40, 0xc6, 0xa1, + 0x09, 0x07, 0x0b, 0xd2, 0xb0, 0x04, 0x4c, 0x93, 0x90, 0xde, 0xd6, 0x01, + 0x45, 0xe9, 0xe8, 0xc1, 0xd6, 0x01, 0xb0, 0x8f, 0x04, 0x4a, 0x41, 0xb0, + 0xe0, 0xd6, 0x01, 0xb3, 0x06, 0x4c, 0xc7, 0x95, 0xdd, 0xd6, 0x41, 0x06, + 0x75, 0x06, 0xa3, 0x02, 0x05, 0x5e, 0x07, 0x01, 0xff, 0xe1, 0x1a, 0xd4, + 0x81, 0x92, 0x02, 0xe2, 0x1b, 0xd4, 0x81, 0x86, 0x02, 0xe3, 0x1c, 0xd4, + 0x81, 0xfa, 0x01, 0xe4, 0x1d, 0xd4, 0x81, 0xe8, 0x01, 0xe5, 0x1e, 0xd4, + 0x81, 0xd6, 0x01, 0xe6, 0x1f, 0xd4, 0x81, 0xca, 0x01, 0xe7, 0x20, 0xd4, + 0x81, 0xbe, 0x01, 0xe8, 0x21, 0xd4, 0x01, 0xe9, 0x22, 0xd4, 0x81, 0xae, + 0x01, 0xea, 0x23, 0xd4, 0x01, 0xeb, 0x24, 0xd4, 0x81, 0x9e, 0x01, 0xec, + 0x25, 0xd4, 0x81, 0x92, 0x01, 0xed, 0x26, 0xd4, 0x81, 0x88, 0x01, 0xee, + 0x27, 0xd4, 0x81, 0x7f, 0xef, 0x28, 0xd4, 0x81, 0x6b, 0xf0, 0x29, 0xd4, + 0x81, 0x56, 0xf1, 0x2a, 0xd4, 0x01, 0xf2, 0x2b, 0xd4, 0x81, 0x47, 0xf3, + 0x2c, 0xd4, 0x81, 0x3c, 0xf4, 0x2d, 0xd4, 0x81, 0x2b, 0xf5, 0x2e, 0xd4, + 0x81, 0x20, 0xf6, 0x2f, 0xd4, 0x01, 0xf7, 0x30, 0xd4, 0x01, 0xf8, 0x31, + 0xd4, 0x81, 0x0f, 0xf9, 0x32, 0xd4, 0x01, 0xfa, 0x33, 0xd4, 0xc1, 0x00, + 0x43, 0x94, 0x0f, 0xc7, 0xd6, 0x41, 0xe9, 0xcf, 0xd6, 0x41, 0x46, 0xcf, + 0x15, 0xd6, 0xd6, 0x41, 0x42, 0x5f, 0x24, 0xd5, 0xd6, 0x01, 0x44, 0xc8, + 0x95, 0xc9, 0xd6, 0x41, 0x44, 0xbf, 0x1f, 0xd4, 0xd6, 0x41, 0x42, 0x0b, + 0x00, 0xd2, 0xd6, 0x41, 0x42, 0x49, 0x00, 0xd7, 0xd6, 0x01, 0xe9, 0xd1, + 0xd6, 0x01, 0x42, 0x5a, 0x03, 0xd9, 0xd6, 0x41, 0xad, 0x01, 0xff, 0x43, + 0xce, 0x05, 0xda, 0xd6, 0x01, 0x45, 0x4a, 0xe7, 0xd0, 0xd6, 0x41, 0xf5, + 0xce, 0xd6, 0x41, 0xf5, 0xcd, 0xd6, 0x41, 0x44, 0x18, 0xe8, 0xcc, 0xd6, + 0x41, 0x44, 0x94, 0x90, 0xcb, 0xd6, 0x41, 0x43, 0x1b, 0x05, 0xca, 0xd6, + 0x41, 0x44, 0x00, 0x21, 0xc4, 0xd6, 0x41, 0x4a, 0x19, 0x9c, 0xd3, 0xd6, + 0x41, 0x46, 0xcf, 0x15, 0xc6, 0xd6, 0x01, 0x42, 0x12, 0x00, 0xc8, 0xd6, + 0x41, 0x44, 0x38, 0xd6, 0xc5, 0xd6, 0x01, 0x46, 0x2b, 0x58, 0xcb, 0xd7, + 0x41, 0x42, 0x49, 0x00, 0xd8, 0xd6, 0x41, 0x43, 0x94, 0x0f, 0xc3, 0xd6, + 0x41, 0x44, 0x3f, 0xe4, 0xc2, 0xd6, 0x41, 0x08, 0xe4, 0x05, 0x6d, 0x06, + 0x5d, 0x07, 0x01, 0xff, 0xe1, 0xea, 0xd4, 0x01, 0xe2, 0xeb, 0xd4, 0x01, + 0xe3, 0xec, 0xd4, 0x01, 0xe4, 0xed, 0xd4, 0x01, 0xe5, 0xee, 0xd4, 0x01, + 0xe6, 0xef, 0xd4, 0x01, 0xe7, 0xf0, 0xd4, 0x01, 0xe8, 0xf1, 0xd4, 0x01, + 0xe9, 0xf2, 0xd4, 0x01, 0xea, 0xf3, 0xd4, 0x01, 0xeb, 0xf4, 0xd4, 0x01, + 0xec, 0xf5, 0xd4, 0x01, 0xed, 0xf6, 0xd4, 0x01, 0xee, 0xf7, 0xd4, 0x01, + 0xef, 0xf8, 0xd4, 0x01, 0xf0, 0xf9, 0xd4, 0x01, 0xf1, 0xfa, 0xd4, 0x01, + 0xf2, 0xfb, 0xd4, 0x01, 0xf3, 0xfc, 0xd4, 0x01, 0xf4, 0xfd, 0xd4, 0x01, + 0xf5, 0xfe, 0xd4, 0x01, 0xf6, 0xff, 0xd4, 0x01, 0xf7, 0x00, 0xd5, 0x01, + 0xf8, 0x01, 0xd5, 0x01, 0xf9, 0x02, 0xd5, 0x01, 0xfa, 0x03, 0xd5, 0x41, + 0xe1, 0xd0, 0xd4, 0x01, 0xe2, 0xd1, 0xd4, 0x01, 0xe3, 0xd2, 0xd4, 0x01, + 0xe4, 0xd3, 0xd4, 0x01, 0xe5, 0xd4, 0xd4, 0x01, 0xe6, 0xd5, 0xd4, 0x01, + 0xe7, 0xd6, 0xd4, 0x01, 0xe8, 0xd7, 0xd4, 0x01, 0xe9, 0xd8, 0xd4, 0x01, + 0xea, 0xd9, 0xd4, 0x01, 0xeb, 0xda, 0xd4, 0x01, 0xec, 0xdb, 0xd4, 0x01, + 0xed, 0xdc, 0xd4, 0x01, 0xee, 0xdd, 0xd4, 0x01, 0xef, 0xde, 0xd4, 0x01, + 0xf0, 0xdf, 0xd4, 0x01, 0xf1, 0xe0, 0xd4, 0x01, 0xf2, 0xe1, 0xd4, 0x01, + 0xf3, 0xe2, 0xd4, 0x01, 0xf4, 0xe3, 0xd4, 0x01, 0xf5, 0xe4, 0xd4, 0x01, + 0xf6, 0xe5, 0xd4, 0x01, 0xf7, 0xe6, 0xd4, 0x01, 0xf8, 0xe7, 0xd4, 0x01, + 0xf9, 0xe8, 0xd4, 0x01, 0xfa, 0xe9, 0xd4, 0x41, 0x53, 0x4e, 0x48, 0xdb, + 0xd6, 0x01, 0x49, 0x93, 0xb9, 0xdf, 0xd6, 0x01, 0x48, 0x5b, 0xac, 0xe1, + 0xd6, 0x41, 0x08, 0xe4, 0x05, 0xcf, 0x02, 0x4e, 0xce, 0x15, 0x50, 0xd7, + 0x01, 0x4c, 0x93, 0x90, 0x52, 0xd7, 0x01, 0x45, 0xe9, 0xe8, 0x35, 0xd7, + 0x01, 0xb0, 0xa8, 0x02, 0x4a, 0x41, 0xb0, 0x54, 0xd7, 0x01, 0x06, 0x5d, + 0x07, 0x06, 0x4c, 0xc7, 0x95, 0x51, 0xd7, 0x41, 0xe1, 0x82, 0xd4, 0x81, + 0x8c, 0x02, 0xe2, 0x83, 0xd4, 0x81, 0x80, 0x02, 0xe3, 0x84, 0xd4, 0x81, + 0xf4, 0x01, 0xe4, 0x85, 0xd4, 0x81, 0xe8, 0x01, 0xe5, 0x86, 0xd4, 0x81, + 0xd6, 0x01, 0xe6, 0x87, 0xd4, 0x81, 0xca, 0x01, 0xe7, 0x88, 0xd4, 0x81, + 0xbe, 0x01, 0xe8, 0x89, 0xd4, 0x01, 0xe9, 0x8a, 0xd4, 0x81, 0xae, 0x01, + 0xea, 0x8b, 0xd4, 0x01, 0xeb, 0x8c, 0xd4, 0x81, 0x9e, 0x01, 0xec, 0x8d, + 0xd4, 0x81, 0x92, 0x01, 0xed, 0x8e, 0xd4, 0x81, 0x88, 0x01, 0xee, 0x8f, + 0xd4, 0x81, 0x7f, 0xef, 0x90, 0xd4, 0x81, 0x6b, 0xf0, 0x91, 0xd4, 0x81, + 0x56, 0xf1, 0x92, 0xd4, 0x01, 0xf2, 0x93, 0xd4, 0x81, 0x47, 0xf3, 0x94, + 0xd4, 0x81, 0x3c, 0xf4, 0x95, 0xd4, 0x81, 0x2b, 0xf5, 0x96, 0xd4, 0x81, + 0x20, 0xf6, 0x97, 0xd4, 0x01, 0xf7, 0x98, 0xd4, 0x01, 0xf8, 0x99, 0xd4, + 0x81, 0x0f, 0xf9, 0x9a, 0xd4, 0x01, 0xfa, 0x9b, 0xd4, 0xc1, 0x00, 0x43, + 0x94, 0x0f, 0x3b, 0xd7, 0x41, 0xe9, 0x43, 0xd7, 0x41, 0x46, 0xcf, 0x15, + 0x4a, 0xd7, 0x41, 0x42, 0x5f, 0x24, 0x49, 0xd7, 0x01, 0x44, 0xc8, 0x95, + 0x3d, 0xd7, 0x41, 0x44, 0xbf, 0x1f, 0x48, 0xd7, 0x41, 0x42, 0x0b, 0x00, + 0x46, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x4b, 0xd7, 0x01, 0xe9, 0x45, 0xd7, + 0x01, 0x42, 0x5a, 0x03, 0x4d, 0xd7, 0x41, 0xad, 0x01, 0xff, 0x43, 0xce, + 0x05, 0x4e, 0xd7, 0x01, 0x45, 0x4a, 0xe7, 0x44, 0xd7, 0x41, 0xf5, 0x42, + 0xd7, 0x41, 0xf5, 0x41, 0xd7, 0x41, 0x44, 0x18, 0xe8, 0x40, 0xd7, 0x41, + 0x44, 0x94, 0x90, 0x3f, 0xd7, 0x41, 0x43, 0x1b, 0x05, 0x3e, 0xd7, 0x41, + 0x44, 0x00, 0x21, 0x38, 0xd7, 0x41, 0x4a, 0x19, 0x9c, 0x47, 0xd7, 0x41, + 0x46, 0xcf, 0x15, 0x3a, 0xd7, 0x01, 0x42, 0x12, 0x00, 0x3c, 0xd7, 0x41, + 0x44, 0x38, 0xd6, 0x39, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x4c, 0xd7, 0x41, + 0x43, 0x94, 0x0f, 0x37, 0xd7, 0x41, 0x44, 0x3f, 0xe4, 0x36, 0xd7, 0x41, + 0x53, 0x4e, 0x48, 0x4f, 0xd7, 0x01, 0x49, 0x93, 0xb9, 0x53, 0xd7, 0x01, + 0x48, 0x5b, 0xac, 0x55, 0xd7, 0x41, 0xe1, 0x68, 0xd4, 0x81, 0x8c, 0x02, + 0xe2, 0x69, 0xd4, 0x81, 0x80, 0x02, 0xe3, 0x6a, 0xd4, 0x81, 0xf4, 0x01, + 0xe4, 0x6b, 0xd4, 0x81, 0xe8, 0x01, 0xe5, 0x6c, 0xd4, 0x81, 0xd6, 0x01, + 0xe6, 0x6d, 0xd4, 0x01, 0xe7, 0x6e, 0xd4, 0x81, 0xc6, 0x01, 0xe8, 0x6f, + 0xd4, 0x01, 0xe9, 0x70, 0xd4, 0x81, 0xb6, 0x01, 0xea, 0x71, 0xd4, 0x01, + 0xeb, 0x72, 0xd4, 0x81, 0xa6, 0x01, 0xec, 0x73, 0xd4, 0x81, 0x9a, 0x01, + 0xed, 0x74, 0xd4, 0x81, 0x90, 0x01, 0xee, 0x75, 0xd4, 0x81, 0x86, 0x01, + 0xef, 0x76, 0xd4, 0x81, 0x72, 0xf0, 0x77, 0xd4, 0x81, 0x5d, 0xf1, 0x78, + 0xd4, 0x01, 0xf2, 0x79, 0xd4, 0x81, 0x4e, 0xf3, 0x7a, 0xd4, 0x81, 0x43, + 0xf4, 0x7b, 0xd4, 0x81, 0x2b, 0xf5, 0x7c, 0xd4, 0x81, 0x20, 0xf6, 0x7d, + 0xd4, 0x01, 0xf7, 0x7e, 0xd4, 0x01, 0xf8, 0x7f, 0xd4, 0x81, 0x0f, 0xf9, + 0x80, 0xd4, 0x01, 0xfa, 0x81, 0xd4, 0xc1, 0x00, 0x43, 0x94, 0x0f, 0x21, + 0xd7, 0x41, 0xe9, 0x29, 0xd7, 0x41, 0x46, 0xcf, 0x15, 0x30, 0xd7, 0x41, + 0x42, 0x5f, 0x24, 0x2f, 0xd7, 0x01, 0x44, 0xc8, 0x95, 0x23, 0xd7, 0xc1, + 0x00, 0x47, 0x15, 0x08, 0x2d, 0xd7, 0x41, 0x44, 0xbf, 0x1f, 0x2e, 0xd7, + 0x41, 0x42, 0x0b, 0x00, 0x2c, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x31, 0xd7, + 0x01, 0xe9, 0x2b, 0xd7, 0x01, 0x42, 0x5a, 0x03, 0x33, 0xd7, 0x41, 0xad, + 0x01, 0xff, 0x43, 0xce, 0x05, 0x34, 0xd7, 0x01, 0x45, 0x4a, 0xe7, 0x2a, + 0xd7, 0x41, 0xf5, 0x28, 0xd7, 0x41, 0xf5, 0x27, 0xd7, 0x41, 0x44, 0x18, + 0xe8, 0x26, 0xd7, 0x41, 0x44, 0x94, 0x90, 0x25, 0xd7, 0x41, 0x43, 0x1b, + 0x05, 0x24, 0xd7, 0x41, 0x44, 0x00, 0x21, 0x1e, 0xd7, 0x41, 0x46, 0xcf, + 0x15, 0x20, 0xd7, 0x01, 0x42, 0x12, 0x00, 0x22, 0xd7, 0x41, 0x44, 0x38, + 0xd6, 0x1f, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x32, 0xd7, 0x41, 0x43, 0x94, + 0x0f, 0x1d, 0xd7, 0x41, 0x44, 0x3f, 0xe4, 0x1c, 0xd7, 0x41, 0x08, 0xe4, + 0x05, 0x6d, 0x06, 0x5d, 0x07, 0x01, 0xff, 0xe1, 0x86, 0xd5, 0x01, 0xe2, + 0x87, 0xd5, 0x01, 0xe3, 0x88, 0xd5, 0x01, 0xe4, 0x89, 0xd5, 0x01, 0xe5, + 0x8a, 0xd5, 0x01, 0xe6, 0x8b, 0xd5, 0x01, 0xe7, 0x8c, 0xd5, 0x01, 0xe8, + 0x8d, 0xd5, 0x01, 0xe9, 0x8e, 0xd5, 0x01, 0xea, 0x8f, 0xd5, 0x01, 0xeb, + 0x90, 0xd5, 0x01, 0xec, 0x91, 0xd5, 0x01, 0xed, 0x92, 0xd5, 0x01, 0xee, + 0x93, 0xd5, 0x01, 0xef, 0x94, 0xd5, 0x01, 0xf0, 0x95, 0xd5, 0x01, 0xf1, + 0x96, 0xd5, 0x01, 0xf2, 0x97, 0xd5, 0x01, 0xf3, 0x98, 0xd5, 0x01, 0xf4, + 0x99, 0xd5, 0x01, 0xf5, 0x9a, 0xd5, 0x01, 0xf6, 0x9b, 0xd5, 0x01, 0xf7, + 0x9c, 0xd5, 0x01, 0xf8, 0x9d, 0xd5, 0x01, 0xf9, 0x9e, 0xd5, 0x01, 0xfa, + 0x9f, 0xd5, 0x41, 0xe1, 0x6c, 0xd5, 0x01, 0xe2, 0x6d, 0xd5, 0x01, 0xe3, + 0x6e, 0xd5, 0x01, 0xe4, 0x6f, 0xd5, 0x01, 0xe5, 0x70, 0xd5, 0x01, 0xe6, + 0x71, 0xd5, 0x01, 0xe7, 0x72, 0xd5, 0x01, 0xe8, 0x73, 0xd5, 0x01, 0xe9, + 0x74, 0xd5, 0x01, 0xea, 0x75, 0xd5, 0x01, 0xeb, 0x76, 0xd5, 0x01, 0xec, + 0x77, 0xd5, 0x01, 0xed, 0x78, 0xd5, 0x01, 0xee, 0x79, 0xd5, 0x01, 0xef, + 0x7a, 0xd5, 0x01, 0xf0, 0x7b, 0xd5, 0x01, 0xf1, 0x7c, 0xd5, 0x01, 0xf2, + 0x7d, 0xd5, 0x01, 0xf3, 0x7e, 0xd5, 0x01, 0xf4, 0x7f, 0xd5, 0x01, 0xf5, + 0x80, 0xd5, 0x01, 0xf6, 0x81, 0xd5, 0x01, 0xf7, 0x82, 0xd5, 0x01, 0xf8, + 0x83, 0xd5, 0x01, 0xf9, 0x84, 0xd5, 0x01, 0xfa, 0x85, 0xd5, 0x41, 0x45, + 0x12, 0x0b, 0xd6, 0xd7, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xd7, 0xd7, + 0x01, 0x43, 0x0e, 0x0b, 0xcf, 0xd7, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, + 0x43, 0x1e, 0xce, 0xd7, 0x41, 0x44, 0x25, 0x01, 0xd1, 0xd7, 0x01, 0x42, + 0x15, 0x02, 0xd0, 0xd7, 0x41, 0x44, 0xc9, 0x1d, 0xd5, 0xd7, 0x01, 0x42, + 0x01, 0x26, 0xd4, 0xd7, 0x41, 0x43, 0xd2, 0x05, 0xd3, 0xd7, 0x01, 0x43, + 0xf6, 0x06, 0xd2, 0xd7, 0x41, 0xe1, 0x00, 0xd4, 0x81, 0x92, 0x02, 0xe2, + 0x01, 0xd4, 0x81, 0x86, 0x02, 0xe3, 0x02, 0xd4, 0x81, 0xfa, 0x01, 0xe4, + 0x03, 0xd4, 0x81, 0xe8, 0x01, 0xe5, 0x04, 0xd4, 0x81, 0xd6, 0x01, 0xe6, + 0x05, 0xd4, 0x01, 0xe7, 0x06, 0xd4, 0x81, 0xc6, 0x01, 0xe8, 0x07, 0xd4, + 0x01, 0xe9, 0x08, 0xd4, 0x81, 0xb6, 0x01, 0xea, 0x09, 0xd4, 0x01, 0xeb, + 0x0a, 0xd4, 0x81, 0xa6, 0x01, 0xec, 0x0b, 0xd4, 0x81, 0x9a, 0x01, 0xed, + 0x0c, 0xd4, 0x81, 0x90, 0x01, 0xee, 0x0d, 0xd4, 0x81, 0x86, 0x01, 0xef, + 0x0e, 0xd4, 0x81, 0x72, 0xf0, 0x0f, 0xd4, 0x81, 0x5d, 0xf1, 0x10, 0xd4, + 0x01, 0xf2, 0x11, 0xd4, 0x81, 0x4e, 0xf3, 0x12, 0xd4, 0x81, 0x43, 0xf4, + 0x13, 0xd4, 0x81, 0x2b, 0xf5, 0x14, 0xd4, 0x81, 0x20, 0xf6, 0x15, 0xd4, + 0x01, 0xf7, 0x16, 0xd4, 0x01, 0xf8, 0x17, 0xd4, 0x81, 0x0f, 0xf9, 0x18, + 0xd4, 0x01, 0xfa, 0x19, 0xd4, 0xc1, 0x00, 0x43, 0x94, 0x0f, 0xad, 0xd6, + 0x41, 0xe9, 0xb5, 0xd6, 0x41, 0x46, 0xcf, 0x15, 0xbc, 0xd6, 0x41, 0x42, + 0x5f, 0x24, 0xbb, 0xd6, 0x01, 0x44, 0xc8, 0x95, 0xaf, 0xd6, 0xc1, 0x00, + 0x47, 0x15, 0x08, 0xb9, 0xd6, 0x41, 0x44, 0xbf, 0x1f, 0xba, 0xd6, 0x41, + 0x42, 0x0b, 0x00, 0xb8, 0xd6, 0x41, 0x42, 0x49, 0x00, 0xbd, 0xd6, 0x01, + 0xe9, 0xb7, 0xd6, 0x01, 0x42, 0x5a, 0x03, 0xbf, 0xd6, 0x41, 0xad, 0x01, + 0xff, 0x43, 0xce, 0x05, 0xc0, 0xd6, 0x01, 0x45, 0x4a, 0xe7, 0xb6, 0xd6, + 0x41, 0xf5, 0xb4, 0xd6, 0x41, 0xf5, 0xb3, 0xd6, 0x41, 0x44, 0x18, 0xe8, + 0xb2, 0xd6, 0x41, 0x44, 0x94, 0x90, 0xb1, 0xd6, 0x41, 0x43, 0x1b, 0x05, + 0xb0, 0xd6, 0x41, 0x44, 0x00, 0x21, 0xaa, 0xd6, 0x41, 0x46, 0xcf, 0x15, + 0xac, 0xd6, 0x01, 0x42, 0x12, 0x00, 0xae, 0xd6, 0x41, 0x44, 0x38, 0xd6, + 0xab, 0xd6, 0x01, 0x46, 0x2b, 0x58, 0xca, 0xd7, 0x41, 0x42, 0x49, 0x00, + 0xbe, 0xd6, 0x41, 0x43, 0x94, 0x0f, 0xa9, 0xd6, 0x41, 0x44, 0x3f, 0xe4, + 0xa8, 0xd6, 0x41, 0x0b, 0x16, 0x99, 0x12, 0x58, 0xde, 0x27, 0xba, 0x00, + 0x00, 0x4d, 0xcd, 0x84, 0xad, 0xf1, 0x01, 0x46, 0x34, 0xcf, 0x3c, 0x30, + 0x40, 0x06, 0xef, 0x06, 0x82, 0x03, 0x07, 0xec, 0x05, 0x6c, 0xb2, 0x5e, + 0x05, 0x5a, 0x03, 0x3c, 0xb6, 0x01, 0xff, 0x45, 0xe4, 0x23, 0x45, 0x1d, + 0x01, 0x0a, 0x41, 0x77, 0x01, 0xff, 0xa1, 0x20, 0xe5, 0x3a, 0x1d, 0x01, + 0xe9, 0x32, 0x1d, 0x81, 0x13, 0xef, 0x3d, 0x1d, 0x01, 0xf5, 0x34, 0x1d, + 0x81, 0x06, 0x49, 0x22, 0xc1, 0x36, 0x1d, 0x41, 0xf5, 0x35, 0x1d, 0x41, + 0xe9, 0x33, 0x1d, 0x41, 0xe1, 0x31, 0x1d, 0x01, 0xe9, 0x3c, 0x1d, 0x01, + 0xf5, 0x3f, 0x1d, 0x41, 0x48, 0x3c, 0x16, 0x40, 0x1d, 0x01, 0x46, 0xd7, + 0x23, 0x43, 0x1d, 0x01, 0x47, 0x71, 0xd1, 0x44, 0x1d, 0x01, 0x45, 0x3f, + 0x3f, 0x42, 0x1d, 0x01, 0x47, 0xea, 0x4b, 0x41, 0x1d, 0x41, 0x46, 0x68, + 0xd9, 0x47, 0x1d, 0x01, 0x44, 0x92, 0xc5, 0x46, 0x1d, 0x41, 0xe1, 0x00, + 0x1d, 0x81, 0x80, 0x02, 0xa2, 0xf3, 0x01, 0xa3, 0xe6, 0x01, 0xa4, 0xcd, + 0x01, 0xe5, 0x06, 0x1d, 0x01, 0xa7, 0xbc, 0x01, 0x42, 0x22, 0x00, 0x2c, + 0x1d, 0x01, 0xe9, 0x02, 0x1d, 0x81, 0xac, 0x01, 0xaa, 0x99, 0x01, 0xab, + 0x86, 0x01, 0xac, 0x7a, 0x42, 0x6c, 0x00, 0x24, 0x1d, 0x01, 0xae, 0x5c, + 0xef, 0x09, 0x1d, 0x01, 0xb0, 0x4c, 0x42, 0x71, 0x00, 0x26, 0x1d, 0x01, + 0xb3, 0x34, 0xb4, 0x15, 0xf5, 0x04, 0x1d, 0x81, 0x0c, 0x42, 0xf5, 0x0a, + 0x28, 0x1d, 0x01, 0x42, 0xbc, 0x22, 0x25, 0x1d, 0x41, 0xf5, 0x05, 0x1d, + 0x41, 0xe1, 0x1b, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x1c, 0x1d, 0x01, 0x42, + 0x71, 0x00, 0x30, 0x1d, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x16, 0x1d, 0x01, + 0x42, 0x22, 0x00, 0x17, 0x1d, 0x41, 0xe1, 0x2b, 0x1d, 0x01, 0x42, 0x22, + 0x00, 0x29, 0x1d, 0x01, 0x42, 0x40, 0x06, 0x2a, 0x1d, 0x41, 0xe1, 0x20, + 0x1d, 0x01, 0x42, 0x22, 0x00, 0x21, 0x1d, 0x41, 0xe1, 0x1f, 0x1d, 0x01, + 0x42, 0x24, 0x02, 0x10, 0x1d, 0x01, 0x42, 0x2a, 0x05, 0x1a, 0x1d, 0x01, + 0x42, 0xbc, 0x22, 0x15, 0x1d, 0x41, 0xe1, 0x27, 0x1d, 0x01, 0x42, 0x74, + 0x00, 0x2d, 0x1d, 0x41, 0xe1, 0x0c, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x0d, + 0x1d, 0x01, 0x43, 0xfb, 0x20, 0x2e, 0x1d, 0x41, 0xe1, 0x13, 0x1d, 0x01, + 0x42, 0x22, 0x00, 0x14, 0x1d, 0x01, 0x43, 0xa6, 0x35, 0x2f, 0x1d, 0x41, + 0xe9, 0x03, 0x1d, 0x41, 0xe1, 0x0e, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x0f, + 0x1d, 0x41, 0xe1, 0x1d, 0x1d, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x1e, + 0x1d, 0x41, 0xe1, 0x18, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x19, 0x1d, 0x41, + 0xe1, 0x11, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x12, 0x1d, 0x41, 0xe1, 0x22, + 0x1d, 0x01, 0x42, 0x22, 0x00, 0x23, 0x1d, 0x41, 0xe1, 0x01, 0x1d, 0x01, + 0xe9, 0x08, 0x1d, 0x01, 0xf5, 0x0b, 0x1d, 0x41, 0x45, 0x12, 0x0b, 0x58, + 0x1d, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x59, 0x1d, 0x01, 0x43, 0x0e, + 0x0b, 0x51, 0x1d, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x50, + 0x1d, 0x41, 0x44, 0x25, 0x01, 0x53, 0x1d, 0x01, 0x42, 0x15, 0x02, 0x52, + 0x1d, 0x41, 0x44, 0xc9, 0x1d, 0x57, 0x1d, 0x01, 0x42, 0x01, 0x26, 0x56, + 0x1d, 0x41, 0x43, 0xd2, 0x05, 0x55, 0x1d, 0x01, 0x43, 0xf6, 0x06, 0x54, + 0x1d, 0x41, 0x44, 0x45, 0x61, 0x87, 0xfa, 0x01, 0x05, 0x52, 0x4a, 0x0c, + 0x4c, 0x6b, 0x94, 0xad, 0x26, 0x00, 0x51, 0x6f, 0x5e, 0x4b, 0xf9, 0x41, + 0x49, 0xa0, 0x1b, 0x70, 0x1c, 0x01, 0x07, 0xec, 0x05, 0xe9, 0x01, 0x49, + 0xee, 0xbb, 0x71, 0x1c, 0x01, 0xb3, 0x1b, 0x0b, 0x40, 0x77, 0x01, 0xff, + 0x42, 0x80, 0x12, 0xb0, 0x1c, 0x01, 0xe5, 0xb3, 0x1c, 0x01, 0xe9, 0xb1, + 0x1c, 0x01, 0xef, 0xb4, 0x1c, 0x01, 0xf5, 0xb2, 0x1c, 0x41, 0x04, 0x5b, + 0x03, 0xb5, 0x01, 0x10, 0xd6, 0x67, 0x01, 0xff, 0xe1, 0xaf, 0x1c, 0x01, + 0x42, 0x16, 0x00, 0xa0, 0x1c, 0x01, 0xa3, 0x99, 0x01, 0xa4, 0x8c, 0x01, + 0x42, 0x24, 0x02, 0x94, 0x1c, 0x01, 0x42, 0x22, 0x00, 0xae, 0x1c, 0x01, + 0x42, 0x56, 0x19, 0x98, 0x1c, 0x01, 0xab, 0x6e, 0x42, 0x74, 0x00, 0xab, + 0x1c, 0x01, 0x42, 0x6c, 0x00, 0xa1, 0x1c, 0x01, 0xae, 0x50, 0xb0, 0x44, + 0x42, 0x71, 0x00, 0xaa, 0x1c, 0x01, 0xb3, 0x32, 0xb4, 0x19, 0x42, 0xa9, + 0x01, 0xa5, 0x1c, 0x01, 0x42, 0xbc, 0x22, 0xa9, 0x1c, 0x01, 0xba, 0x01, + 0xff, 0xe1, 0xa7, 0x1c, 0x01, 0x42, 0x22, 0x00, 0xa6, 0x1c, 0x41, 0xe1, + 0x9a, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x9b, 0x1c, 0x01, 0xb3, 0x01, 0xff, + 0xe1, 0xa2, 0x1c, 0x01, 0x42, 0x22, 0x00, 0xa3, 0x1c, 0x41, 0xe1, 0xad, + 0x1c, 0x01, 0x42, 0x22, 0x00, 0xac, 0x1c, 0x41, 0xe1, 0x9e, 0x1c, 0x01, + 0x42, 0x22, 0x00, 0x9f, 0x1c, 0x41, 0xe1, 0x9d, 0x1c, 0x01, 0x42, 0x24, + 0x02, 0x95, 0x1c, 0x01, 0x42, 0xbc, 0x22, 0x99, 0x1c, 0x41, 0xe1, 0x92, + 0x1c, 0x01, 0x42, 0x22, 0x00, 0x93, 0x1c, 0x41, 0xe1, 0x9c, 0x1c, 0x01, + 0x42, 0x59, 0x00, 0xa4, 0x1c, 0x41, 0xe1, 0x96, 0x1c, 0x01, 0x42, 0x22, + 0x00, 0x97, 0x1c, 0x41, 0x48, 0x3c, 0x16, 0xb5, 0x1c, 0x01, 0x4b, 0xd7, + 0x23, 0xb6, 0x1c, 0x41, 0x42, 0xcf, 0x25, 0x88, 0x1c, 0x01, 0xe1, 0x8f, + 0x1c, 0x01, 0x42, 0x16, 0x00, 0x80, 0x1c, 0x01, 0xa3, 0x99, 0x01, 0xa4, + 0x8c, 0x01, 0x42, 0x24, 0x02, 0x74, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x8e, + 0x1c, 0x01, 0x42, 0x56, 0x19, 0x78, 0x1c, 0x01, 0xab, 0x6e, 0x42, 0x74, + 0x00, 0x8b, 0x1c, 0x01, 0x42, 0x6c, 0x00, 0x81, 0x1c, 0x01, 0xae, 0x50, + 0xb0, 0x44, 0x42, 0x71, 0x00, 0x8a, 0x1c, 0x01, 0xb3, 0x32, 0xb4, 0x19, + 0x42, 0xa9, 0x01, 0x85, 0x1c, 0x01, 0x42, 0xbc, 0x22, 0x89, 0x1c, 0x01, + 0xba, 0x01, 0xff, 0xe1, 0x87, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x86, 0x1c, + 0x41, 0xe1, 0x7a, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x7b, 0x1c, 0x01, 0xb3, + 0x01, 0xff, 0xe1, 0x82, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x83, 0x1c, 0x41, + 0xe1, 0x8d, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x8c, 0x1c, 0x41, 0xe1, 0x7e, + 0x1c, 0x01, 0x42, 0x22, 0x00, 0x7f, 0x1c, 0x41, 0xe1, 0x7d, 0x1c, 0x01, + 0x42, 0x24, 0x02, 0x75, 0x1c, 0x01, 0x42, 0xbc, 0x22, 0x79, 0x1c, 0x41, + 0xe1, 0x72, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x73, 0x1c, 0x41, 0xe1, 0x7c, + 0x1c, 0x01, 0x42, 0x59, 0x00, 0x84, 0x1c, 0x41, 0xe1, 0x76, 0x1c, 0x01, + 0x42, 0x22, 0x00, 0x77, 0x1c, 0x41, 0x56, 0x4b, 0x32, 0xef, 0x26, 0x00, + 0x47, 0xc1, 0xd2, 0x41, 0xf3, 0x41, 0x80, 0xa5, 0x04, 0x47, 0xa1, 0x6c, + 0xbc, 0x20, 0x00, 0x05, 0x6f, 0xe5, 0x87, 0x03, 0x42, 0x06, 0x14, 0x6d, + 0xf9, 0x01, 0x08, 0xe0, 0xc6, 0x12, 0x46, 0xc2, 0xdf, 0x5e, 0xf4, 0x01, + 0x4e, 0x99, 0x7c, 0x70, 0xf5, 0x01, 0x4e, 0xbf, 0x7d, 0xbd, 0xf9, 0x41, + 0x12, 0x0b, 0x50, 0xda, 0x02, 0x07, 0xec, 0x05, 0x5d, 0x07, 0xff, 0x39, + 0x37, 0x0c, 0x6d, 0x16, 0x06, 0x47, 0xdf, 0xd5, 0xc8, 0x0a, 0x41, 0x02, + 0x3b, 0x01, 0x18, 0x47, 0xe8, 0x36, 0xf1, 0x0a, 0x01, 0x4b, 0xc2, 0x9e, + 0xf6, 0x0a, 0x01, 0x44, 0x31, 0x13, 0xf0, 0x0a, 0x01, 0x48, 0x1f, 0x0a, + 0xf5, 0x0a, 0x41, 0xf4, 0xf4, 0x0a, 0x81, 0x06, 0x53, 0x05, 0x4e, 0xf2, + 0x0a, 0x41, 0x4b, 0x0d, 0x4e, 0xf3, 0x0a, 0x41, 0x44, 0x80, 0x11, 0xec, + 0x0a, 0x01, 0x43, 0x0e, 0x0b, 0xeb, 0x0a, 0x81, 0x0f, 0xb4, 0x01, 0xff, + 0x42, 0x92, 0x01, 0xed, 0x0a, 0x01, 0x45, 0x7f, 0x2c, 0xee, 0x0a, 0x41, + 0x48, 0x70, 0x11, 0xef, 0x0a, 0x41, 0xa1, 0xe4, 0x01, 0xa2, 0xd5, 0x01, + 0xa4, 0xc6, 0x01, 0x42, 0x0c, 0x1a, 0xdc, 0x0a, 0x01, 0xa7, 0xb1, 0x01, + 0x42, 0xb0, 0x01, 0xc6, 0x0a, 0x81, 0xa3, 0x01, 0xaa, 0x94, 0x01, 0xab, + 0x85, 0x01, 0x46, 0x94, 0xdd, 0xd3, 0x0a, 0x01, 0x43, 0xb4, 0x05, 0xd6, + 0x0a, 0x01, 0x43, 0xdc, 0x22, 0xd7, 0x0a, 0x01, 0x42, 0x6f, 0x02, 0xdb, + 0x0a, 0x01, 0xb1, 0x5f, 0x44, 0x76, 0x66, 0xe1, 0x0a, 0x01, 0xb3, 0x3d, + 0xb4, 0x29, 0x43, 0x8a, 0x8a, 0xc7, 0x0a, 0x01, 0xb8, 0x15, 0x44, 0xa1, + 0x52, 0xcf, 0x0a, 0x01, 0xba, 0x01, 0xff, 0x44, 0x1e, 0x4a, 0xc9, 0x0a, + 0x01, 0x45, 0xf0, 0xe6, 0xca, 0x0a, 0x41, 0x43, 0x83, 0x10, 0xd1, 0x0a, + 0x01, 0x43, 0x67, 0x36, 0xdf, 0x0a, 0x41, 0x42, 0xb7, 0x2d, 0xe4, 0x0a, + 0x01, 0x43, 0xda, 0x25, 0xce, 0x0a, 0x01, 0x46, 0x4a, 0xdc, 0xd5, 0x0a, + 0x41, 0xa1, 0x0c, 0x43, 0x7a, 0x16, 0xe2, 0x0a, 0x01, 0x44, 0x73, 0x4a, + 0xe3, 0x0a, 0x41, 0x43, 0xad, 0xea, 0xdd, 0x0a, 0x01, 0x44, 0x49, 0xe4, + 0xd8, 0x0a, 0x41, 0x44, 0x51, 0xf0, 0xe0, 0x0a, 0x01, 0x43, 0x67, 0x36, + 0xde, 0x0a, 0x41, 0x43, 0x83, 0x10, 0xd0, 0x0a, 0x01, 0x44, 0xd7, 0xe7, + 0xd2, 0x0a, 0x41, 0x44, 0x1e, 0x4a, 0xcb, 0x0a, 0x01, 0x45, 0xf0, 0xe6, + 0xcc, 0x0a, 0x41, 0x42, 0x53, 0x00, 0xcd, 0x0a, 0x41, 0x45, 0xff, 0xe6, + 0xc4, 0x0a, 0x01, 0x44, 0xde, 0xaa, 0xc3, 0x0a, 0x41, 0x45, 0x24, 0x4a, + 0xc5, 0x0a, 0x01, 0x46, 0x4a, 0xdc, 0xd4, 0x0a, 0x41, 0x43, 0xda, 0x25, + 0xc1, 0x0a, 0x01, 0x44, 0x61, 0xaa, 0xc2, 0x0a, 0x41, 0x44, 0x1e, 0x4a, + 0xda, 0x0a, 0x01, 0x44, 0x18, 0x3d, 0xc0, 0x0a, 0x01, 0x43, 0x7e, 0x1a, + 0xd9, 0x0a, 0x41, 0x45, 0x5c, 0x00, 0xe5, 0x0a, 0x01, 0x45, 0x20, 0x07, + 0xe6, 0x0a, 0x41, 0x50, 0xd6, 0x60, 0x59, 0x08, 0x00, 0x4f, 0x89, 0x6d, + 0x5b, 0x08, 0x00, 0x07, 0xec, 0x05, 0x0c, 0x4b, 0x07, 0x0c, 0x5e, 0x08, + 0x00, 0x51, 0x4c, 0x5f, 0x5a, 0x08, 0x40, 0xa1, 0x22, 0x48, 0x40, 0xc5, + 0x56, 0x08, 0x00, 0x45, 0xd7, 0xe6, 0x40, 0x08, 0x00, 0xa9, 0x0c, 0x43, + 0xf7, 0xa5, 0x57, 0x08, 0x00, 0x47, 0x41, 0xc5, 0x45, 0x08, 0x40, 0xee, + 0x4f, 0x08, 0x00, 0xf4, 0x47, 0x08, 0x40, 0xe2, 0x41, 0x08, 0x00, 0xe4, + 0x43, 0x08, 0x00, 0xe7, 0x42, 0x08, 0x00, 0xe8, 0x44, 0x08, 0x00, 0x42, + 0x9e, 0x01, 0x58, 0x08, 0x00, 0xeb, 0x4a, 0x08, 0x80, 0x32, 0xec, 0x4b, + 0x08, 0x00, 0xed, 0x4c, 0x08, 0x00, 0xee, 0x4d, 0x08, 0x00, 0xf0, 0x50, + 0x08, 0x00, 0xf1, 0x52, 0x08, 0x00, 0xf2, 0x53, 0x08, 0x00, 0xf3, 0x4e, + 0x08, 0x80, 0x0d, 0xf4, 0x55, 0x08, 0x80, 0x04, 0xfa, 0x46, 0x08, 0x40, + 0xf4, 0x48, 0x08, 0x40, 0xe8, 0x54, 0x08, 0x00, 0xfa, 0x51, 0x08, 0x40, + 0x42, 0x40, 0x06, 0x49, 0x08, 0x40, 0x57, 0x16, 0x2d, 0x6b, 0xf4, 0x01, + 0x47, 0x36, 0xd0, 0x7a, 0xf5, 0x01, 0x03, 0xe1, 0x05, 0x11, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x4a, 0xfb, 0xaa, 0x72, 0xf4, 0x01, 0x46, 0xb8, 0xe0, + 0x73, 0xf4, 0x41, 0x58, 0x96, 0x27, 0x74, 0xf5, 0x01, 0x46, 0xbe, 0xe0, + 0x35, 0xf9, 0x41, 0x07, 0xed, 0xb5, 0x27, 0x02, 0x60, 0x00, 0x06, 0x4a, + 0xc7, 0xb1, 0x20, 0x27, 0x40, 0x4f, 0x0f, 0x27, 0xa5, 0x26, 0x00, 0x44, + 0x5a, 0x03, 0x42, 0x26, 0x00, 0x0c, 0xd9, 0x3c, 0x01, 0xff, 0x58, 0x06, + 0x27, 0xa7, 0x26, 0x00, 0x44, 0x5a, 0x03, 0xa6, 0x26, 0x40, 0x4e, 0x17, + 0x76, 0x57, 0x0d, 0x00, 0xa4, 0x91, 0x05, 0x09, 0x1e, 0x5a, 0xb0, 0x04, + 0x07, 0xec, 0x05, 0xad, 0x01, 0x07, 0xff, 0x39, 0x92, 0x01, 0x05, 0x5a, + 0x03, 0x4e, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x3b, 0xe5, 0x46, 0x0d, + 0x80, 0x32, 0xe9, 0x3f, 0x0d, 0x80, 0x29, 0xef, 0x4a, 0x0d, 0x80, 0x20, + 0xf5, 0x41, 0x0d, 0x80, 0x17, 0x08, 0x22, 0xc1, 0x01, 0xff, 0xec, 0x62, + 0x0d, 0x80, 0x09, 0xf2, 0x43, 0x0d, 0xc0, 0x00, 0xf2, 0x44, 0x0d, 0x40, + 0xec, 0x63, 0x0d, 0x40, 0xf5, 0x42, 0x0d, 0x40, 0xef, 0x4b, 0x0d, 0x40, + 0xe9, 0x40, 0x0d, 0x40, 0xe5, 0x47, 0x0d, 0x40, 0xe1, 0x3e, 0x0d, 0x00, + 0xe9, 0x48, 0x0d, 0x00, 0xf5, 0x4c, 0x0d, 0x40, 0xa1, 0x32, 0xa3, 0x1e, + 0x44, 0x7d, 0x10, 0x4f, 0x0d, 0x00, 0xb6, 0x01, 0xff, 0x52, 0x73, 0x51, + 0x3b, 0x0d, 0x00, 0xa9, 0x01, 0xff, 0x44, 0xe5, 0x23, 0x4d, 0x0d, 0x00, + 0x45, 0xec, 0x4b, 0x03, 0x0d, 0x40, 0x4a, 0xd8, 0x23, 0x01, 0x0d, 0x00, + 0x4e, 0xc5, 0x78, 0x3c, 0x0d, 0x00, 0x57, 0x33, 0x16, 0x00, 0x0d, 0x40, + 0x47, 0x3d, 0x16, 0x02, 0x0d, 0x00, 0x47, 0xaf, 0x88, 0x3d, 0x0d, 0x40, + 0x04, 0x0e, 0x0b, 0x06, 0x43, 0xdb, 0x06, 0x70, 0x0d, 0x40, 0x47, 0x71, + 0x11, 0x71, 0x0d, 0x00, 0x48, 0x40, 0x5e, 0x72, 0x0d, 0x40, 0xe1, 0x05, + 0x0d, 0x80, 0xe6, 0x02, 0xa2, 0xd9, 0x02, 0xa3, 0x9d, 0x02, 0xa4, 0xfe, + 0x01, 0xe5, 0x0e, 0x0d, 0x80, 0xf4, 0x01, 0xa7, 0xe7, 0x01, 0x42, 0x22, + 0x00, 0x39, 0x0d, 0x00, 0xe9, 0x07, 0x0d, 0x80, 0xd7, 0x01, 0xaa, 0xca, + 0x01, 0xab, 0xbd, 0x01, 0xac, 0xa9, 0x01, 0x42, 0x6c, 0x00, 0x2e, 0x0d, + 0x00, 0xae, 0x84, 0x01, 0xef, 0x12, 0x0d, 0x80, 0x7b, 0xb0, 0x6f, 0xb2, + 0x63, 0xb3, 0x51, 0xb4, 0x32, 0xf5, 0x09, 0x0d, 0x80, 0x29, 0xb6, 0x06, + 0x42, 0xbc, 0x22, 0x2f, 0x0d, 0x40, 0xe1, 0x35, 0x0d, 0x00, 0x4d, 0x6a, + 0x82, 0x04, 0x0d, 0x00, 0x07, 0x23, 0xc1, 0x01, 0xff, 0xec, 0x0c, 0x0d, + 0x80, 0x09, 0xf2, 0x0b, 0x0d, 0xc0, 0x00, 0xf2, 0x60, 0x0d, 0x40, 0xec, + 0x61, 0x0d, 0x40, 0xf5, 0x0a, 0x0d, 0x40, 0xe1, 0x24, 0x0d, 0x00, 0x42, + 0x22, 0x00, 0x25, 0x0d, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x1f, 0x0d, 0x00, + 0x42, 0x22, 0x00, 0x20, 0x0d, 0x00, 0x42, 0x12, 0x00, 0x3a, 0x0d, 0x40, + 0xe1, 0x38, 0x0d, 0x00, 0x42, 0x22, 0x00, 0x36, 0x0d, 0x00, 0x42, 0x40, + 0x06, 0x37, 0x0d, 0x40, 0xe1, 0x30, 0x0d, 0x00, 0x42, 0x71, 0x00, 0x31, + 0x0d, 0x40, 0xe1, 0x2a, 0x0d, 0x00, 0x42, 0x22, 0x00, 0x2b, 0x0d, 0x40, + 0xef, 0x13, 0x0d, 0x40, 0xe1, 0x28, 0x0d, 0x00, 0x42, 0x24, 0x02, 0x19, + 0x0d, 0x00, 0xae, 0x06, 0x42, 0xbc, 0x22, 0x1e, 0x0d, 0x40, 0xe1, 0x23, + 0x0d, 0x00, 0x42, 0x2a, 0x05, 0x29, 0x0d, 0x40, 0xe1, 0x32, 0x0d, 0x00, + 0xac, 0x01, 0xff, 0xe1, 0x33, 0x0d, 0x00, 0x42, 0x74, 0x00, 0x34, 0x0d, + 0x40, 0xe1, 0x15, 0x0d, 0x00, 0x42, 0x22, 0x00, 0x16, 0x0d, 0x40, 0xe1, + 0x1c, 0x0d, 0x00, 0x42, 0x22, 0x00, 0x1d, 0x0d, 0x40, 0xe9, 0x08, 0x0d, + 0x40, 0xe1, 0x17, 0x0d, 0x00, 0x42, 0x22, 0x00, 0x18, 0x0d, 0x40, 0xe5, + 0x0f, 0x0d, 0x40, 0xe1, 0x26, 0x0d, 0x00, 0xa4, 0x0c, 0x42, 0x22, 0x00, + 0x27, 0x0d, 0x00, 0x47, 0x26, 0xd4, 0x4e, 0x0d, 0x40, 0xe1, 0x21, 0x0d, + 0x00, 0x42, 0x22, 0x00, 0x22, 0x0d, 0x40, 0xe1, 0x1a, 0x0d, 0x00, 0xa8, + 0x01, 0xff, 0xe1, 0x1b, 0x0d, 0x00, 0x05, 0x24, 0xc2, 0x01, 0xff, 0xeb, + 0x7f, 0x0d, 0x00, 0xec, 0x7d, 0x0d, 0x80, 0x17, 0xed, 0x54, 0x0d, 0x00, + 0xee, 0x7b, 0x0d, 0x80, 0x0a, 0x42, 0xcf, 0x00, 0x7c, 0x0d, 0x00, 0xf9, + 0x55, 0x0d, 0x40, 0xee, 0x7a, 0x0d, 0x40, 0xec, 0x7e, 0x0d, 0xc0, 0x00, + 0xec, 0x56, 0x0d, 0x40, 0xe1, 0x2c, 0x0d, 0x00, 0x42, 0x22, 0x00, 0x2d, + 0x0d, 0x40, 0xe1, 0x06, 0x0d, 0x00, 0xe9, 0x10, 0x0d, 0x00, 0x49, 0x6d, + 0xbe, 0x5f, 0x0d, 0x00, 0xf5, 0x14, 0x0d, 0x40, 0x04, 0x0e, 0x0b, 0x1d, + 0x06, 0x24, 0x01, 0x01, 0xff, 0x4a, 0xd9, 0xa9, 0x5a, 0x0d, 0x00, 0x48, + 0x2a, 0x01, 0x75, 0x0d, 0x00, 0x4a, 0x13, 0xb1, 0x78, 0x0d, 0x00, 0x4a, + 0x3f, 0xb2, 0x5d, 0x0d, 0x40, 0x46, 0x12, 0x0b, 0x77, 0x0d, 0x00, 0xa6, + 0x27, 0x44, 0x22, 0x00, 0x74, 0x0d, 0x00, 0x58, 0x36, 0x2a, 0x58, 0x0d, + 0x00, 0x47, 0x2a, 0x01, 0x73, 0x0d, 0x00, 0x49, 0x00, 0x26, 0x76, 0x0d, + 0x00, 0xb4, 0x01, 0xff, 0x44, 0x82, 0x1b, 0x5c, 0x0d, 0x00, 0x48, 0xd5, + 0x25, 0x5b, 0x0d, 0x40, 0x44, 0x42, 0xaf, 0x5e, 0x0d, 0x00, 0x47, 0x18, + 0xd4, 0x59, 0x0d, 0x40, 0x48, 0xb8, 0xc3, 0x79, 0x0d, 0x00, 0x05, 0xf0, + 0x06, 0x01, 0xff, 0x45, 0x12, 0x0b, 0x6e, 0x0d, 0x00, 0xa6, 0x2e, 0x44, + 0xcf, 0x2a, 0x6f, 0x0d, 0x00, 0x43, 0x0e, 0x0b, 0x67, 0x0d, 0x00, 0xb3, + 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x66, 0x0d, 0x40, 0x44, 0x25, 0x01, + 0x69, 0x0d, 0x00, 0x42, 0x15, 0x02, 0x68, 0x0d, 0x40, 0x44, 0xc9, 0x1d, + 0x6d, 0x0d, 0x00, 0x42, 0x01, 0x26, 0x6c, 0x0d, 0x40, 0x43, 0xd2, 0x05, + 0x6b, 0x0d, 0x00, 0x43, 0xf6, 0x06, 0x6a, 0x0d, 0x40, 0x05, 0x70, 0xe4, + 0x06, 0x45, 0xe7, 0xe5, 0x7c, 0xf7, 0x41, 0x45, 0xb6, 0xd9, 0xf2, 0x1e, + 0x01, 0x4e, 0x4b, 0x77, 0xf8, 0x1e, 0x01, 0x07, 0xec, 0x05, 0x1b, 0x4a, + 0x6f, 0xaf, 0xf7, 0x1e, 0x01, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xe5, 0xf5, + 0x1e, 0x01, 0xe9, 0xf3, 0x1e, 0x01, 0xef, 0xf6, 0x1e, 0x01, 0xf5, 0xf4, + 0x1e, 0x41, 0xe1, 0xf1, 0x1e, 0x01, 0x42, 0x16, 0x00, 0xe4, 0x1e, 0x01, + 0x42, 0x37, 0x00, 0xe9, 0x1e, 0x01, 0x42, 0xf0, 0x10, 0xe7, 0x1e, 0x01, + 0x42, 0x24, 0x02, 0xe1, 0x1e, 0x01, 0x42, 0x56, 0x19, 0xea, 0x1e, 0x01, + 0x42, 0x1b, 0x02, 0xe0, 0x1e, 0x01, 0x42, 0x74, 0x00, 0xee, 0x1e, 0x01, + 0x42, 0x6c, 0x00, 0xe5, 0x1e, 0x01, 0xae, 0x24, 0x42, 0xbb, 0x09, 0xe3, + 0x1e, 0x01, 0x42, 0x71, 0x00, 0xed, 0x1e, 0x01, 0x42, 0x40, 0x06, 0xf0, + 0x1e, 0x01, 0x42, 0x12, 0x00, 0xe6, 0x1e, 0x01, 0x42, 0xf5, 0x0a, 0xef, + 0x1e, 0x01, 0x42, 0xbc, 0x22, 0xec, 0x1e, 0x41, 0xe1, 0xe8, 0x1e, 0x01, + 0x42, 0x24, 0x02, 0xe2, 0x1e, 0x01, 0x42, 0xbc, 0x22, 0xeb, 0x1e, 0x41, + 0x06, 0x9e, 0xd9, 0xe7, 0x02, 0x0a, 0x3b, 0xac, 0x01, 0xff, 0x46, 0x04, + 0xda, 0x28, 0xf0, 0x01, 0x02, 0x16, 0x00, 0xcb, 0x02, 0x4d, 0x66, 0x81, + 0x25, 0xf0, 0x01, 0xa5, 0xa2, 0x02, 0xa6, 0xec, 0x01, 0x4c, 0x4f, 0x8f, + 0x05, 0xf0, 0x01, 0x45, 0x0e, 0xa5, 0x2a, 0xf0, 0x01, 0xae, 0xbe, 0x01, + 0xaf, 0x9c, 0x01, 0x44, 0x19, 0xf2, 0x22, 0xf0, 0x01, 0x4a, 0x0f, 0xb0, + 0x04, 0xf0, 0x01, 0xb3, 0x4a, 0xb4, 0x15, 0xb7, 0x01, 0xff, 0x48, 0xd8, + 0xc5, 0x02, 0xf0, 0x01, 0x4b, 0xf4, 0x9c, 0x06, 0xf0, 0x01, 0x45, 0xa9, + 0x0a, 0x29, 0xf0, 0x41, 0x08, 0xc8, 0xc6, 0x1a, 0x06, 0x4e, 0xe1, 0x01, + 0xff, 0x47, 0x5d, 0xcf, 0x11, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x78, + 0xb9, 0x08, 0xf0, 0x01, 0x46, 0x98, 0x43, 0x1a, 0xf0, 0x41, 0x47, 0x5d, + 0xcf, 0x12, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x78, 0xb9, 0x09, 0xf0, + 0x01, 0x46, 0x98, 0x43, 0x1b, 0xf0, 0x41, 0x08, 0x00, 0xc6, 0x2b, 0x06, + 0x40, 0xdd, 0x12, 0x49, 0xa7, 0xbd, 0x01, 0xf0, 0x01, 0x45, 0xaa, 0x11, + 0x26, 0xf0, 0x01, 0x45, 0xcd, 0xeb, 0x27, 0xf0, 0x41, 0x47, 0x5d, 0xcf, + 0x15, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x78, 0xb9, 0x0c, 0xf0, 0x01, + 0x46, 0x98, 0x43, 0x1e, 0xf0, 0x41, 0x47, 0x5d, 0xcf, 0x16, 0xf0, 0x01, + 0xa3, 0x01, 0xff, 0x49, 0x78, 0xb9, 0x0d, 0xf0, 0x01, 0x46, 0x98, 0x43, + 0x1f, 0xf0, 0x41, 0x06, 0xba, 0xc8, 0x06, 0x45, 0x38, 0xea, 0x23, 0xf0, + 0x41, 0x47, 0x5d, 0xcf, 0x10, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x78, + 0xb9, 0x07, 0xf0, 0x01, 0x46, 0x98, 0x43, 0x19, 0xf0, 0x41, 0x07, 0xb9, + 0xc8, 0x06, 0x49, 0x7a, 0xbd, 0x03, 0xf0, 0x41, 0x47, 0x5d, 0xcf, 0x18, + 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x78, 0xb9, 0x0f, 0xf0, 0x01, 0x46, + 0x98, 0x43, 0x21, 0xf0, 0x41, 0x07, 0x19, 0xd2, 0x1a, 0x07, 0x2d, 0xd4, + 0x01, 0xff, 0x47, 0x5d, 0xcf, 0x13, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, + 0x78, 0xb9, 0x0a, 0xf0, 0x01, 0x46, 0x98, 0x43, 0x1c, 0xf0, 0x41, 0x47, + 0x5d, 0xcf, 0x14, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x78, 0xb9, 0x0b, + 0xf0, 0x01, 0x46, 0x98, 0x43, 0x1d, 0xf0, 0x41, 0x48, 0xa0, 0xc3, 0x00, + 0xf0, 0x01, 0x08, 0x3e, 0xb8, 0x01, 0xff, 0x47, 0x5d, 0xcf, 0x17, 0xf0, + 0x01, 0xa3, 0x01, 0xff, 0x49, 0x78, 0xb9, 0x0e, 0xf0, 0x01, 0x46, 0x98, + 0x43, 0x20, 0xf0, 0x41, 0x42, 0x36, 0x01, 0x2b, 0xf0, 0x01, 0x44, 0x99, + 0x98, 0x24, 0xf0, 0x41, 0x51, 0xdc, 0x57, 0x74, 0x11, 0x01, 0xac, 0x0f, + 0xb3, 0x01, 0xff, 0x4b, 0xf9, 0x26, 0x75, 0x11, 0x01, 0x49, 0x23, 0xba, + 0x73, 0x11, 0x41, 0x06, 0xed, 0x05, 0x06, 0x4c, 0xdf, 0x8f, 0x76, 0x11, + 0x41, 0xe1, 0x50, 0x11, 0x01, 0xa2, 0xbc, 0x01, 0xa3, 0xaf, 0x01, 0xa4, + 0x96, 0x01, 0xe5, 0x53, 0x11, 0x01, 0xa7, 0x85, 0x01, 0x42, 0x22, 0x00, + 0x71, 0x11, 0x01, 0xe9, 0x51, 0x11, 0x01, 0xaa, 0x6f, 0xab, 0x63, 0x42, + 0x74, 0x00, 0x6e, 0x11, 0x01, 0x42, 0x6c, 0x00, 0x6c, 0x11, 0x01, 0xae, + 0x45, 0xef, 0x54, 0x11, 0x01, 0xb0, 0x35, 0xb2, 0x29, 0x42, 0x40, 0x06, + 0x70, 0x11, 0x01, 0xb4, 0x0a, 0xf5, 0x52, 0x11, 0x01, 0x42, 0xf5, 0x0a, + 0x6f, 0x11, 0x41, 0xe1, 0x63, 0x11, 0x01, 0x42, 0x22, 0x00, 0x64, 0x11, + 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x5e, 0x11, 0x01, 0x42, 0x22, 0x00, 0x5f, + 0x11, 0x41, 0xe1, 0x6d, 0x11, 0x01, 0x42, 0x71, 0x00, 0x72, 0x11, 0x41, + 0xe1, 0x68, 0x11, 0x01, 0x42, 0x22, 0x00, 0x69, 0x11, 0x41, 0xe1, 0x67, + 0x11, 0x01, 0x42, 0x2a, 0x05, 0x62, 0x11, 0x01, 0x42, 0xbc, 0x22, 0x5d, + 0x11, 0x41, 0xe1, 0x55, 0x11, 0x01, 0x42, 0x22, 0x00, 0x56, 0x11, 0x41, + 0xe1, 0x5b, 0x11, 0x01, 0x42, 0x22, 0x00, 0x5c, 0x11, 0x41, 0xe1, 0x57, + 0x11, 0x01, 0x42, 0x22, 0x00, 0x58, 0x11, 0x41, 0xe1, 0x65, 0x11, 0x01, + 0xa4, 0x06, 0x42, 0x22, 0x00, 0x66, 0x11, 0x41, 0xe1, 0x60, 0x11, 0x01, + 0x42, 0x22, 0x00, 0x61, 0x11, 0x41, 0xe1, 0x59, 0x11, 0x01, 0x42, 0x22, + 0x00, 0x5a, 0x11, 0x41, 0xe1, 0x6a, 0x11, 0x01, 0x42, 0x22, 0x00, 0x6b, + 0x11, 0x41, 0xe5, 0xd9, 0xf9, 0x01, 0x47, 0xcc, 0xd1, 0x84, 0xfa, 0x01, + 0x43, 0xae, 0x2c, 0xf2, 0xf9, 0x41, 0x4d, 0x37, 0x7f, 0x14, 0x21, 0x00, + 0xa1, 0xfd, 0x40, 0xa5, 0xa3, 0x2b, 0xa9, 0xe6, 0x0c, 0x44, 0xb0, 0x00, + 0x99, 0xf9, 0x01, 0xaf, 0x9d, 0x02, 0xb5, 0x85, 0x02, 0xb9, 0x01, 0xff, + 0x0c, 0x4b, 0x8d, 0x82, 0x01, 0x05, 0xc7, 0x60, 0x06, 0x48, 0x2e, 0x29, + 0x25, 0xf9, 0x41, 0x07, 0xec, 0x05, 0x06, 0x4f, 0xec, 0x73, 0x3f, 0x09, + 0x41, 0xe1, 0x20, 0x09, 0x81, 0x65, 0xe2, 0x21, 0x09, 0x01, 0xe3, 0x39, + 0x09, 0x01, 0xe4, 0x23, 0x09, 0x01, 0xe5, 0x24, 0x09, 0x81, 0x50, 0xe6, + 0x31, 0x09, 0x01, 0xe7, 0x22, 0x09, 0x01, 0xe9, 0x26, 0x09, 0x01, 0xeb, + 0x28, 0x09, 0x01, 0xec, 0x29, 0x09, 0x81, 0x37, 0xed, 0x2a, 0x09, 0x01, + 0xee, 0x2b, 0x09, 0x81, 0x2a, 0xef, 0x2c, 0x09, 0x01, 0xf1, 0x32, 0x09, + 0x01, 0xf2, 0x2d, 0x09, 0x01, 0xf3, 0x33, 0x09, 0x81, 0x15, 0xf4, 0x2f, + 0x09, 0x81, 0x0c, 0xf5, 0x30, 0x09, 0x01, 0xf6, 0x25, 0x09, 0x01, 0xf9, + 0x27, 0x09, 0x41, 0xf4, 0x34, 0x09, 0x41, 0xf3, 0x2e, 0x09, 0x41, 0xee, + 0x38, 0x09, 0x41, 0xf9, 0x37, 0x09, 0x41, 0xee, 0x36, 0x09, 0x41, 0xee, + 0x35, 0x09, 0x41, 0xe1, 0x80, 0x02, 0x81, 0x72, 0xe2, 0x82, 0x02, 0x81, + 0x69, 0xe4, 0x85, 0x02, 0x01, 0xe5, 0x81, 0x02, 0x81, 0x5c, 0xe7, 0x84, + 0x02, 0x01, 0xe8, 0x9b, 0x02, 0x01, 0xe9, 0x86, 0x02, 0x01, 0xea, 0x8a, + 0x02, 0x01, 0xeb, 0x8b, 0x02, 0x81, 0x43, 0xec, 0x8d, 0x02, 0x01, 0xed, + 0x8e, 0x02, 0x81, 0x36, 0xee, 0x8f, 0x02, 0x81, 0x2d, 0xf0, 0x93, 0x02, + 0x01, 0xf1, 0x8c, 0x02, 0x01, 0xf2, 0x95, 0x02, 0x01, 0xf3, 0x96, 0x02, + 0x01, 0xf4, 0x97, 0x02, 0x81, 0x10, 0xf5, 0x92, 0x02, 0x01, 0xf7, 0x87, + 0x02, 0x01, 0xf8, 0x9c, 0x02, 0x01, 0xfa, 0x88, 0x02, 0x41, 0xe8, 0x89, + 0x02, 0x01, 0xf4, 0x98, 0x02, 0x41, 0xee, 0x91, 0x02, 0x41, 0xed, 0x90, + 0x02, 0x41, 0xeb, 0x94, 0x02, 0x41, 0xee, 0x9a, 0x02, 0x41, 0xe8, 0x83, + 0x02, 0x41, 0xee, 0x99, 0x02, 0x41, 0x45, 0xef, 0xe0, 0xf3, 0xf9, 0x01, + 0xae, 0x01, 0xff, 0x4a, 0xdb, 0xa7, 0x76, 0xf7, 0x01, 0x42, 0xbc, 0x11, + 0xc1, 0xfa, 0x41, 0x45, 0xde, 0xe4, 0x9e, 0xf9, 0x01, 0x42, 0x36, 0x01, + 0x12, 0xf5, 0x81, 0x9b, 0x0a, 0x03, 0x2d, 0x22, 0xef, 0x08, 0x46, 0xca, + 0xdd, 0x6d, 0xf3, 0x01, 0x03, 0xa2, 0x01, 0xac, 0x07, 0xb4, 0x97, 0x07, + 0x50, 0xe6, 0x67, 0x2d, 0xf6, 0x01, 0x03, 0x5f, 0x00, 0x80, 0x07, 0xb7, + 0x0d, 0x45, 0x4b, 0x0a, 0xca, 0x25, 0xc0, 0x00, 0x5b, 0xf0, 0x19, 0xe0, + 0x27, 0x40, 0x80, 0xc1, 0x06, 0x03, 0x16, 0x01, 0x01, 0xff, 0x4e, 0x41, + 0x76, 0x03, 0x27, 0x00, 0x07, 0x73, 0x02, 0x8a, 0x06, 0x52, 0xa9, 0x51, + 0x85, 0x25, 0x00, 0xa8, 0xc1, 0x05, 0x05, 0xc3, 0x00, 0xa0, 0x03, 0x07, + 0x7d, 0x02, 0xea, 0x02, 0x04, 0x0e, 0x0b, 0xd9, 0x02, 0x06, 0xc8, 0x00, + 0x30, 0x53, 0xfb, 0x4c, 0x87, 0x25, 0x00, 0xb4, 0x01, 0xff, 0x05, 0x25, + 0x01, 0x06, 0x5b, 0x35, 0x1d, 0x6f, 0xfb, 0x41, 0x4d, 0x01, 0x4d, 0x83, + 0x25, 0x00, 0x09, 0x2a, 0x01, 0x01, 0xff, 0x45, 0x33, 0x01, 0x86, 0x25, + 0x00, 0x56, 0x37, 0x35, 0xa5, 0xce, 0x01, 0x57, 0xdc, 0x30, 0xae, 0xce, + 0x41, 0x0f, 0x6d, 0x6b, 0xbe, 0x01, 0x4f, 0xd6, 0x6b, 0xd3, 0x27, 0x00, + 0x5a, 0xe4, 0x1f, 0x4f, 0x27, 0x00, 0x53, 0xfc, 0x25, 0x9f, 0xce, 0x01, + 0x46, 0x14, 0xdf, 0x0e, 0x27, 0x00, 0x03, 0x7c, 0x00, 0x38, 0x4d, 0x00, + 0x30, 0x07, 0xcc, 0x01, 0xb3, 0x19, 0xb4, 0x01, 0xff, 0x05, 0x1a, 0x01, + 0x06, 0x4d, 0x88, 0x7d, 0x3f, 0xcc, 0x41, 0x42, 0x68, 0x00, 0xff, 0x25, + 0x00, 0x51, 0xa2, 0x5e, 0x9e, 0xfb, 0x41, 0x5b, 0x19, 0x1b, 0x3e, 0x29, + 0x00, 0x0e, 0xa5, 0x02, 0x01, 0xff, 0x46, 0x12, 0x03, 0x3e, 0xf5, 0x01, + 0x46, 0xd6, 0x05, 0x51, 0x27, 0x40, 0x06, 0x7c, 0x0d, 0x06, 0x4b, 0x90, + 0x4c, 0x3a, 0xcc, 0x41, 0xa3, 0x2e, 0xa6, 0x20, 0x4d, 0xeb, 0x85, 0xb9, + 0xcc, 0x01, 0x4c, 0x97, 0x92, 0xad, 0xcc, 0x01, 0xb3, 0x06, 0x4a, 0xa9, + 0xb1, 0xb5, 0xcc, 0x41, 0x4b, 0x5c, 0x95, 0xab, 0xcc, 0x01, 0x4e, 0x57, + 0x73, 0xd5, 0xcc, 0x41, 0x53, 0x33, 0x29, 0xaf, 0xcc, 0x01, 0x4c, 0x14, + 0x83, 0xb1, 0xcc, 0x41, 0x05, 0x4b, 0x88, 0x06, 0x4b, 0xaf, 0x9d, 0xde, + 0x25, 0x40, 0x46, 0x2e, 0xda, 0xc9, 0xcc, 0x01, 0xab, 0x12, 0x44, 0xfd, + 0xf1, 0xd1, 0xcc, 0x01, 0x45, 0x52, 0xbe, 0xc1, 0xcc, 0x01, 0x44, 0x5d, + 0xf2, 0xc5, 0xcc, 0x41, 0x43, 0xa1, 0x01, 0xbd, 0xcc, 0x01, 0x45, 0x4e, + 0x09, 0xcd, 0xcc, 0x41, 0x06, 0x13, 0x01, 0x11, 0x1b, 0xf2, 0x1d, 0x01, + 0xff, 0x46, 0x73, 0x02, 0x41, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x42, 0xfb, + 0x41, 0x0a, 0x73, 0x02, 0x32, 0x08, 0x84, 0x02, 0x17, 0x15, 0xf8, 0x1d, + 0x01, 0xff, 0x46, 0x73, 0x02, 0x43, 0xfb, 0x01, 0x4c, 0x58, 0x0f, 0x46, + 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x44, 0xfb, 0x41, 0x52, 0x8f, 0x53, 0x48, + 0xfb, 0x01, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x46, 0x73, 0x02, 0x45, 0xfb, + 0x01, 0x4c, 0x58, 0x0f, 0x4a, 0xfb, 0x41, 0x52, 0x8f, 0x53, 0x47, 0xfb, + 0x01, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x4c, 0x58, 0x0f, 0x49, 0xfb, 0x01, + 0x45, 0xc8, 0x00, 0x4b, 0xfb, 0x41, 0x4c, 0x12, 0x0b, 0x81, 0x25, 0x00, + 0x4d, 0x43, 0x1d, 0x82, 0x25, 0x40, 0x07, 0x73, 0x02, 0x21, 0x05, 0xc3, + 0x00, 0x11, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x53, 0xfc, 0x25, 0x9b, 0xce, + 0x01, 0x4e, 0x87, 0x7d, 0x3b, 0xcc, 0x41, 0x53, 0xfc, 0x25, 0x98, 0xce, + 0x01, 0x4e, 0x87, 0x7d, 0x38, 0xcc, 0x41, 0x58, 0xa6, 0x29, 0x99, 0xce, + 0x01, 0x59, 0xf6, 0x25, 0x9a, 0xce, 0x41, 0xa2, 0xae, 0x01, 0x46, 0xb8, + 0xda, 0x8d, 0xf5, 0x01, 0x4c, 0x13, 0x8f, 0x8b, 0xf5, 0x01, 0x53, 0xfc, + 0x25, 0x9c, 0xce, 0x01, 0xb0, 0x8d, 0x01, 0x03, 0x7c, 0x00, 0x1f, 0x60, + 0x54, 0x10, 0x3f, 0x29, 0x00, 0xb4, 0x01, 0xff, 0x05, 0x1a, 0x01, 0x06, + 0x4d, 0x88, 0x7d, 0x3c, 0xcc, 0x41, 0x42, 0x68, 0x00, 0xfa, 0x25, 0x00, + 0x51, 0xa2, 0x5e, 0x9f, 0xfb, 0x41, 0x06, 0x7c, 0x0d, 0x06, 0x4b, 0x90, + 0x4c, 0x39, 0xcc, 0x41, 0xa3, 0x2e, 0xa6, 0x20, 0x4d, 0xeb, 0x85, 0xb8, + 0xcc, 0x01, 0x4c, 0x97, 0x92, 0xac, 0xcc, 0x01, 0xb3, 0x06, 0x4a, 0xa9, + 0xb1, 0xb4, 0xcc, 0x41, 0x4b, 0x5c, 0x95, 0xaa, 0xcc, 0x01, 0x4e, 0x57, + 0x73, 0xd4, 0xcc, 0x41, 0x53, 0x33, 0x29, 0xae, 0xcc, 0x01, 0x4c, 0x14, + 0x83, 0xb0, 0xcc, 0x41, 0x05, 0x4b, 0x88, 0x06, 0x4b, 0xaf, 0x9d, 0xdf, + 0x25, 0x40, 0x46, 0x2e, 0xda, 0xc8, 0xcc, 0x01, 0xab, 0x12, 0x44, 0xfd, + 0xf1, 0xd0, 0xcc, 0x01, 0x45, 0x52, 0xbe, 0xc0, 0xcc, 0x01, 0x44, 0x5d, + 0xf2, 0xc4, 0xcc, 0x41, 0x43, 0xa1, 0x01, 0xbc, 0xcc, 0x01, 0x45, 0x4e, + 0x09, 0xcc, 0xcc, 0x41, 0x49, 0xc7, 0xb5, 0x8c, 0xf5, 0x01, 0x45, 0x15, + 0xdf, 0x89, 0xf5, 0x41, 0x4c, 0x13, 0x8c, 0x8a, 0xf5, 0x01, 0x0e, 0x6e, + 0x6b, 0x01, 0xff, 0x1b, 0x78, 0x1c, 0x50, 0x06, 0x6d, 0x02, 0x01, 0xff, + 0x0a, 0x73, 0x02, 0x31, 0x08, 0x84, 0x02, 0x17, 0x15, 0x7d, 0x02, 0x01, + 0xff, 0x46, 0x73, 0x02, 0x3e, 0xfb, 0x01, 0x4c, 0x58, 0x0f, 0x51, 0xfb, + 0x01, 0x45, 0xc8, 0x00, 0x3f, 0xfb, 0x41, 0x06, 0x13, 0x01, 0x06, 0x52, + 0x3b, 0x56, 0x4d, 0xfb, 0x41, 0x46, 0x73, 0x02, 0x40, 0xfb, 0x01, 0x4c, + 0x58, 0x0f, 0x4f, 0xfb, 0x41, 0x06, 0x13, 0x01, 0x06, 0x52, 0x3b, 0x56, + 0x4c, 0xfb, 0x41, 0x4c, 0x58, 0x0f, 0x4e, 0xfb, 0x01, 0x45, 0xc8, 0x00, + 0x50, 0xfb, 0x41, 0x46, 0x73, 0x02, 0x3c, 0xfb, 0x01, 0x45, 0xc8, 0x00, + 0x3d, 0xfb, 0x41, 0x04, 0x23, 0x00, 0x06, 0x57, 0xf6, 0x2f, 0x05, 0xcc, + 0x41, 0x5b, 0x26, 0x1a, 0x01, 0xce, 0x01, 0x45, 0x33, 0x01, 0x84, 0x25, + 0x00, 0x46, 0x12, 0x03, 0xe1, 0x25, 0x00, 0x52, 0x27, 0x52, 0x04, 0xce, + 0x01, 0x54, 0x70, 0x43, 0xdb, 0x25, 0x00, 0x56, 0x37, 0x35, 0xa4, 0xce, + 0x01, 0x4c, 0x44, 0x04, 0x8f, 0xfb, 0x01, 0x57, 0xdc, 0x30, 0xaf, 0xce, + 0x01, 0x63, 0xcd, 0x0b, 0x13, 0xce, 0x41, 0x05, 0xc3, 0x00, 0x17, 0x51, + 0x3f, 0x1d, 0xe5, 0xfb, 0x01, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x53, 0xfc, + 0x25, 0x9e, 0xce, 0x01, 0x4e, 0x87, 0x7d, 0x3e, 0xcc, 0x41, 0x53, 0xfc, + 0x25, 0x9d, 0xce, 0x01, 0x4e, 0x87, 0x7d, 0x3d, 0xcc, 0x41, 0x48, 0x3c, + 0x0d, 0x4e, 0x20, 0x00, 0xa2, 0x19, 0x5b, 0xe3, 0x1a, 0x1f, 0x30, 0x00, + 0x46, 0xed, 0x4f, 0x47, 0x2e, 0x80, 0x06, 0x44, 0xed, 0x07, 0x5f, 0x00, + 0x40, 0x49, 0x75, 0x3b, 0x48, 0x2e, 0x40, 0x46, 0xf8, 0xd9, 0xab, 0xfa, + 0x01, 0x50, 0xcb, 0x58, 0x05, 0xf5, 0x41, 0x45, 0x1d, 0xe7, 0xe9, 0xf3, + 0x01, 0x46, 0xec, 0x05, 0x8c, 0xf4, 0x41, 0x4b, 0x7f, 0x97, 0x74, 0xf7, + 0x01, 0x4a, 0xff, 0xab, 0xf4, 0xf9, 0x01, 0x42, 0xef, 0x02, 0xb7, 0xfa, + 0x41, 0xa4, 0xa3, 0x01, 0x04, 0xc3, 0x00, 0x55, 0x05, 0xc8, 0x00, 0x01, + 0xff, 0x45, 0xf4, 0x38, 0xdd, 0x27, 0x00, 0x06, 0xa9, 0x01, 0x01, 0xff, + 0x45, 0xce, 0x00, 0xf6, 0x27, 0x80, 0x23, 0x4c, 0x2f, 0x8e, 0xf9, 0x27, + 0x80, 0x16, 0x08, 0xc9, 0x02, 0x06, 0x4e, 0x7d, 0x7c, 0xff, 0x27, 0x40, + 0x5d, 0xf4, 0x14, 0xd2, 0xf8, 0x01, 0x5b, 0xe4, 0x1c, 0xd1, 0xf8, 0x41, + 0x49, 0x56, 0xb4, 0xfe, 0x27, 0x40, 0x80, 0x01, 0xff, 0x48, 0x57, 0xb4, + 0xfc, 0x27, 0x00, 0x59, 0x92, 0x25, 0xd0, 0xf8, 0x01, 0x49, 0xc3, 0xbf, + 0xd6, 0xf8, 0x01, 0x51, 0x90, 0x5f, 0xd7, 0xf8, 0x41, 0x80, 0x2b, 0x06, + 0xa9, 0x01, 0x01, 0xff, 0x45, 0xce, 0x00, 0xf5, 0x27, 0x80, 0x19, 0x4c, + 0x2f, 0x8e, 0xf8, 0x27, 0x80, 0x0c, 0x66, 0x25, 0x07, 0xd4, 0xf8, 0x01, + 0x4e, 0x7d, 0x7c, 0x33, 0x2b, 0x40, 0x49, 0x56, 0xb4, 0xfd, 0x27, 0x40, + 0x49, 0x56, 0xb4, 0xfb, 0x27, 0x40, 0x06, 0xc8, 0x00, 0x06, 0x44, 0xf5, + 0x38, 0xde, 0x27, 0x40, 0x45, 0xce, 0x00, 0xf7, 0x27, 0x80, 0x06, 0x4c, + 0x2f, 0x8e, 0xfa, 0x27, 0x40, 0x54, 0xd8, 0x3f, 0xd8, 0xf8, 0x41, 0x67, + 0xa6, 0x05, 0xe6, 0x2a, 0x00, 0x47, 0xc3, 0x32, 0xcc, 0x27, 0x00, 0x43, + 0x88, 0x1d, 0x98, 0xfa, 0x41, 0x06, 0x18, 0xd8, 0x7a, 0x03, 0x13, 0x00, + 0x01, 0xff, 0x43, 0x1a, 0x00, 0x27, 0x22, 0x80, 0x3c, 0x42, 0x0c, 0x00, + 0x28, 0x22, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x57, 0x24, 0x30, 0x59, 0x2a, + 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x02, 0x3b, 0x01, 0x0c, 0x4f, 0x10, + 0x6e, 0x5d, 0x2a, 0x00, 0x4b, 0x9e, 0x9f, 0x5b, 0x2a, 0x40, 0x47, 0x3c, + 0x1e, 0x52, 0x2a, 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x47, 0xe6, 0x7f, + 0x62, 0x2a, 0x00, 0x48, 0xe3, 0x59, 0x63, 0x2a, 0x40, 0x06, 0x50, 0x00, + 0x01, 0xff, 0x02, 0x3b, 0x01, 0x12, 0x4f, 0x10, 0x6e, 0x5c, 0x2a, 0x00, + 0x4b, 0x9e, 0x9f, 0x5a, 0x2a, 0x00, 0x48, 0xe3, 0x59, 0x5f, 0x2a, 0x40, + 0x47, 0x3c, 0x1e, 0x51, 0x2a, 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x47, + 0xe6, 0x7f, 0x5e, 0x2a, 0x00, 0x48, 0xe3, 0x59, 0x60, 0x2a, 0x40, 0x43, + 0x1a, 0x00, 0x16, 0xcc, 0x01, 0x46, 0x46, 0xda, 0x19, 0xcc, 0x81, 0x16, + 0x09, 0x5e, 0x23, 0x06, 0x42, 0x0c, 0x00, 0x15, 0xcc, 0x41, 0x46, 0xfe, + 0xdc, 0x17, 0xcc, 0x01, 0x46, 0x1e, 0x51, 0x18, 0xcc, 0x41, 0x54, 0x00, + 0x40, 0x1a, 0xcc, 0x41, 0x4d, 0xc6, 0x7f, 0x0f, 0xf5, 0x01, 0x0a, 0xd7, + 0xab, 0x01, 0xff, 0x43, 0x0e, 0x0b, 0x0e, 0x00, 0x00, 0x44, 0x43, 0x1e, + 0x0f, 0x00, 0x40, 0x43, 0x63, 0x09, 0x4e, 0x26, 0x00, 0xa7, 0x93, 0x1d, + 0xad, 0xd3, 0x19, 0xae, 0xdd, 0x02, 0x47, 0xe0, 0xd3, 0x81, 0xf9, 0x01, + 0x42, 0xcf, 0x15, 0xe2, 0xf5, 0x81, 0xc9, 0x02, 0x47, 0x85, 0x84, 0xa4, + 0x20, 0x00, 0x03, 0x53, 0x22, 0x0c, 0x51, 0x5d, 0x5f, 0xb6, 0x20, 0x00, + 0x44, 0xfa, 0x92, 0x8e, 0xf9, 0x41, 0x07, 0xec, 0x05, 0x11, 0x0c, 0x6d, + 0x16, 0x01, 0xff, 0x45, 0x13, 0x05, 0xfe, 0xa4, 0x00, 0x49, 0x81, 0x16, + 0xff, 0xa4, 0x40, 0xe1, 0xee, 0xa4, 0x80, 0x94, 0x02, 0x42, 0x16, 0x00, + 0xd0, 0xa4, 0x00, 0xa3, 0x81, 0x02, 0xa4, 0xf4, 0x01, 0xe5, 0xf0, 0xa4, + 0x80, 0xea, 0x01, 0x42, 0x0c, 0x08, 0xe9, 0xa4, 0x00, 0xa7, 0xd7, 0x01, + 0xa8, 0xca, 0x01, 0xe9, 0xf2, 0xa4, 0x00, 0x42, 0x56, 0x19, 0xd9, 0xa4, + 0x00, 0xab, 0xb3, 0x01, 0x42, 0x74, 0x00, 0xe1, 0xa4, 0x00, 0x42, 0x6c, + 0x00, 0xdf, 0xa4, 0x00, 0xae, 0x9a, 0x01, 0xef, 0xf3, 0xa4, 0x80, 0x90, + 0x01, 0xb0, 0x83, 0x01, 0xb3, 0x77, 0xb4, 0x32, 0xf5, 0xf4, 0xa4, 0x80, + 0x25, 0x42, 0xa9, 0x01, 0xea, 0xa4, 0x00, 0x42, 0xed, 0x26, 0xe7, 0xa4, + 0x00, 0xb9, 0x0d, 0xba, 0x01, 0xff, 0xe1, 0xe4, 0xa4, 0x00, 0x42, 0x22, + 0x00, 0xe3, 0xa4, 0x40, 0xe1, 0xec, 0xa4, 0x00, 0x42, 0x22, 0x00, 0xb0, + 0x1f, 0x41, 0xe5, 0xf5, 0xa4, 0x00, 0xe8, 0xf6, 0xa4, 0x40, 0xe1, 0xd4, + 0xa4, 0x00, 0x42, 0x22, 0x00, 0xd5, 0xa4, 0x00, 0x04, 0x0e, 0x0b, 0x0d, + 0xb3, 0x01, 0xff, 0xe1, 0xdd, 0xa4, 0x00, 0x42, 0x22, 0x00, 0xde, 0xa4, + 0x40, 0x04, 0x69, 0x62, 0x06, 0x45, 0xe4, 0xe8, 0xf9, 0xa4, 0x40, 0x42, + 0x5d, 0x00, 0xfb, 0xa4, 0x00, 0x43, 0x10, 0xf4, 0xfa, 0xa4, 0x00, 0x43, + 0x5e, 0xf4, 0xfd, 0xa4, 0x00, 0x42, 0x2a, 0x05, 0xfc, 0xa4, 0x00, 0x42, + 0x35, 0x00, 0xf8, 0xa4, 0x40, 0xe1, 0xe2, 0xa4, 0x00, 0x42, 0x22, 0x00, + 0xeb, 0xa4, 0x40, 0xe1, 0xd1, 0xa4, 0x00, 0x42, 0x22, 0x00, 0xd2, 0xa4, + 0x40, 0xe5, 0xf7, 0xa4, 0x40, 0xe1, 0xe0, 0xa4, 0x00, 0x42, 0x24, 0x02, + 0xe5, 0xa4, 0x40, 0xe1, 0xd7, 0xa4, 0x00, 0x42, 0x22, 0x00, 0xd8, 0xa4, + 0x40, 0xe1, 0xe6, 0xa4, 0x00, 0x42, 0x22, 0x00, 0xe8, 0xa4, 0x40, 0xe1, + 0xd6, 0xa4, 0x00, 0x42, 0x22, 0x00, 0xed, 0xa4, 0x40, 0xf5, 0xf1, 0xa4, + 0x40, 0xe1, 0xd3, 0xa4, 0x00, 0x42, 0x59, 0x00, 0xdc, 0xa4, 0x40, 0xe1, + 0xda, 0xa4, 0x00, 0x42, 0x22, 0x00, 0xdb, 0xa4, 0x40, 0xe5, 0xef, 0xa4, + 0x40, 0x44, 0xfd, 0x07, 0x84, 0xf4, 0x41, 0xa5, 0x0f, 0xab, 0x01, 0xff, + 0x47, 0x15, 0x08, 0x17, 0xf5, 0x01, 0x4d, 0x5d, 0x82, 0x87, 0xf5, 0x41, + 0x80, 0xab, 0x16, 0x03, 0x17, 0x00, 0x01, 0xff, 0x08, 0x10, 0xc3, 0xd5, + 0x09, 0x02, 0x26, 0x02, 0x01, 0xff, 0x09, 0xff, 0xb9, 0xdd, 0x04, 0x0a, + 0xfd, 0xad, 0xae, 0x04, 0x02, 0x16, 0x08, 0x01, 0xff, 0x09, 0x94, 0xbb, + 0x4e, 0x07, 0x31, 0xd3, 0x01, 0xff, 0x91, 0x3f, 0x42, 0x54, 0xed, 0x52, + 0x00, 0x01, 0x42, 0xf0, 0xf4, 0x53, 0x00, 0x01, 0x94, 0x29, 0x42, 0x00, + 0xc3, 0x56, 0x00, 0x01, 0x96, 0x19, 0x42, 0x14, 0x40, 0x59, 0x00, 0x01, + 0x98, 0x01, 0xff, 0xd2, 0x5a, 0x00, 0x01, 0xd3, 0x5b, 0x00, 0x01, 0xd6, + 0x5c, 0x00, 0x01, 0xd9, 0x5d, 0x00, 0x41, 0xd3, 0x57, 0x00, 0x01, 0xd4, + 0x58, 0x00, 0x41, 0xd7, 0x54, 0x00, 0x01, 0xd9, 0x55, 0x00, 0x41, 0xd8, + 0x50, 0x00, 0x01, 0xd9, 0x51, 0x00, 0x41, 0x90, 0x9e, 0x03, 0x91, 0xeb, + 0x02, 0x92, 0xb2, 0x02, 0x93, 0xff, 0x01, 0x94, 0xcc, 0x01, 0x95, 0x93, + 0x01, 0x96, 0x61, 0x97, 0x29, 0x98, 0x0f, 0x99, 0x01, 0xff, 0x45, 0x04, + 0xe2, 0x44, 0x00, 0x01, 0x45, 0x45, 0xe2, 0x4d, 0x00, 0x41, 0x44, 0x22, + 0xe2, 0x14, 0x00, 0x01, 0x44, 0x21, 0xed, 0x13, 0x00, 0x01, 0x44, 0xd9, + 0xed, 0x42, 0x00, 0x01, 0x45, 0x76, 0xe3, 0x4c, 0x00, 0x41, 0x44, 0xe1, + 0xec, 0x12, 0x00, 0x01, 0x45, 0x31, 0xe2, 0x43, 0x00, 0x01, 0x44, 0x59, + 0xed, 0x1f, 0x00, 0x01, 0x44, 0x91, 0xed, 0x16, 0x00, 0x01, 0x44, 0xcd, + 0xed, 0x3d, 0x00, 0x01, 0x44, 0x1d, 0xee, 0x38, 0x00, 0x01, 0x45, 0x35, + 0xe3, 0x48, 0x00, 0x01, 0x44, 0x20, 0xd9, 0x0f, 0x00, 0x01, 0x44, 0xa5, + 0xee, 0x24, 0x00, 0x41, 0x44, 0xed, 0xec, 0x28, 0x00, 0x01, 0x43, 0xa7, + 0x75, 0x03, 0x00, 0x01, 0x45, 0x95, 0xe2, 0x47, 0x00, 0x01, 0x44, 0xf5, + 0xed, 0x0e, 0x00, 0x01, 0x45, 0x44, 0xe3, 0x4b, 0x00, 0x01, 0x44, 0x6d, + 0xee, 0x11, 0x00, 0x01, 0x45, 0xa3, 0xe3, 0x4a, 0x00, 0x01, 0x44, 0xd1, + 0xee, 0x36, 0x00, 0x41, 0x44, 0xe9, 0xec, 0x22, 0x00, 0x01, 0x44, 0x0d, + 0xed, 0x09, 0x00, 0x01, 0x44, 0x55, 0xed, 0x1c, 0x00, 0x01, 0x44, 0x9d, + 0xed, 0x2a, 0x00, 0x01, 0x44, 0xc5, 0xed, 0x37, 0x00, 0x01, 0x44, 0x01, + 0xee, 0x1d, 0x00, 0x01, 0x44, 0x69, 0xee, 0x0a, 0x00, 0x01, 0x44, 0xa9, + 0xee, 0x31, 0x00, 0x01, 0x44, 0xc9, 0xee, 0x32, 0x00, 0x41, 0x44, 0xf5, + 0xec, 0x39, 0x00, 0x01, 0x44, 0x35, 0xed, 0x2f, 0x00, 0x01, 0x44, 0x0d, + 0xce, 0x3a, 0x00, 0x01, 0x44, 0x71, 0xed, 0x41, 0x00, 0x01, 0x44, 0xb1, + 0xed, 0x10, 0x00, 0x01, 0x44, 0xe1, 0xed, 0x06, 0x00, 0x01, 0x44, 0x31, + 0xee, 0x0b, 0x00, 0x01, 0x45, 0x9e, 0xe3, 0x45, 0x00, 0x41, 0x44, 0xe5, + 0xec, 0x1b, 0x00, 0x01, 0x44, 0x31, 0xed, 0x2d, 0x00, 0x01, 0x44, 0x5d, + 0xed, 0x26, 0x00, 0x01, 0x45, 0xbd, 0xe2, 0x49, 0x00, 0x01, 0x44, 0x35, + 0xee, 0x0d, 0x00, 0x01, 0x44, 0x79, 0xee, 0x34, 0x00, 0x01, 0x43, 0x8d, + 0xee, 0x01, 0x00, 0x01, 0x44, 0xb9, 0xee, 0x20, 0x00, 0x41, 0x44, 0xfd, + 0xec, 0x3f, 0x00, 0x01, 0x44, 0x29, 0xed, 0x25, 0x00, 0x01, 0x44, 0x95, + 0xed, 0x18, 0x00, 0x01, 0x44, 0xb9, 0xed, 0x1a, 0x00, 0x01, 0x44, 0xd1, + 0xed, 0x40, 0x00, 0x01, 0x44, 0x4d, 0xee, 0x2c, 0x00, 0x01, 0x44, 0x75, + 0xee, 0x29, 0x00, 0x01, 0x43, 0xd7, 0xf3, 0x02, 0x00, 0x01, 0x45, 0xd5, + 0xe3, 0x46, 0x00, 0x41, 0x43, 0x74, 0xf3, 0x04, 0x00, 0x01, 0x44, 0x25, + 0xed, 0x21, 0x00, 0x01, 0x44, 0x65, 0xed, 0x30, 0x00, 0x01, 0x44, 0x8d, + 0xed, 0x15, 0x00, 0x01, 0x44, 0xa9, 0xed, 0x08, 0x00, 0x01, 0x44, 0xfd, + 0xed, 0x17, 0x00, 0x01, 0x44, 0x49, 0xee, 0x23, 0x00, 0x01, 0x44, 0x81, + 0xee, 0x3c, 0x00, 0x41, 0x44, 0x05, 0xed, 0x05, 0x00, 0x01, 0x44, 0x61, + 0xed, 0x2b, 0x00, 0x01, 0x44, 0x99, 0xed, 0x1e, 0x00, 0x01, 0x44, 0xbd, + 0xed, 0x33, 0x00, 0x01, 0x44, 0x0d, 0xee, 0x35, 0x00, 0x01, 0x44, 0x41, + 0xee, 0x19, 0x00, 0x01, 0x44, 0x54, 0xb5, 0x07, 0x00, 0x01, 0x43, 0xd4, + 0xf3, 0x00, 0x00, 0x01, 0x44, 0xbd, 0xee, 0x2e, 0x00, 0x41, 0x91, 0x06, + 0x49, 0x52, 0xb5, 0xd2, 0x00, 0x41, 0x92, 0x14, 0x93, 0x06, 0x48, 0x00, + 0xc3, 0xa4, 0x00, 0x41, 0x47, 0x1b, 0xce, 0x98, 0x00, 0x01, 0x46, 0xf6, + 0xd8, 0x99, 0x00, 0x41, 0x46, 0x20, 0xd9, 0x93, 0x00, 0x01, 0x48, 0x08, + 0xc3, 0x94, 0x00, 0x41, 0xa2, 0x87, 0x01, 0x08, 0x48, 0xcc, 0x01, 0xff, + 0x43, 0x8f, 0xf3, 0xde, 0x00, 0x01, 0x92, 0x06, 0x43, 0xaa, 0xf3, 0xfa, + 0x00, 0x41, 0x90, 0x4a, 0x91, 0x20, 0x92, 0x06, 0x42, 0xaa, 0xd2, 0xf9, + 0x00, 0x41, 0xd1, 0xf3, 0x00, 0x01, 0xd2, 0xf4, 0x00, 0x01, 0xd6, 0xf5, + 0x00, 0x01, 0xd7, 0xf6, 0x00, 0x01, 0xd8, 0xf7, 0x00, 0x01, 0xd9, 0xf8, + 0x00, 0x41, 0xd0, 0xe9, 0x00, 0x01, 0xd1, 0xea, 0x00, 0x01, 0xd2, 0xeb, + 0x00, 0x01, 0xd3, 0xec, 0x00, 0x01, 0xd4, 0xed, 0x00, 0x01, 0xd5, 0xee, + 0x00, 0x01, 0xd6, 0xef, 0x00, 0x01, 0xd7, 0xf0, 0x00, 0x01, 0xd8, 0xf1, + 0x00, 0x01, 0xd9, 0xf2, 0x00, 0x41, 0xd0, 0xdf, 0x00, 0x01, 0xd1, 0xe0, + 0x00, 0x01, 0xd2, 0xe1, 0x00, 0x01, 0xd3, 0xe2, 0x00, 0x01, 0xd4, 0xe3, + 0x00, 0x01, 0xd5, 0xe4, 0x00, 0x01, 0xd6, 0xe5, 0x00, 0x01, 0xd7, 0xe6, + 0x00, 0x01, 0xd8, 0xe7, 0x00, 0x01, 0xd9, 0xe8, 0x00, 0x41, 0x91, 0x84, + 0x01, 0x92, 0x01, 0xff, 0x92, 0x73, 0x93, 0x53, 0x94, 0x29, 0x95, 0x01, + 0xff, 0xd1, 0xd5, 0x00, 0x01, 0xd2, 0xd6, 0x00, 0x01, 0xd3, 0xd7, 0x00, + 0x01, 0x46, 0xcc, 0xd8, 0xd8, 0x00, 0x01, 0xd5, 0xd9, 0x00, 0x01, 0xd6, + 0xda, 0x00, 0x01, 0xd7, 0xdb, 0x00, 0x01, 0xd8, 0xdc, 0x00, 0x01, 0xd9, + 0xdd, 0x00, 0x41, 0x51, 0xba, 0x57, 0xcc, 0x00, 0x01, 0x49, 0x40, 0xb5, + 0xcd, 0x00, 0x01, 0x4f, 0x50, 0x6a, 0xce, 0x00, 0x01, 0x47, 0x45, 0xce, + 0xcf, 0x00, 0x01, 0xd5, 0xd0, 0x00, 0x01, 0xd6, 0xd1, 0x00, 0x01, 0xd8, + 0xd3, 0x00, 0x01, 0xd9, 0xd4, 0x00, 0x41, 0x47, 0xf1, 0xcd, 0xc6, 0x00, + 0x01, 0x47, 0xff, 0xcd, 0xc7, 0x00, 0x01, 0xd2, 0xc8, 0x00, 0x01, 0x47, + 0x3e, 0xce, 0xc9, 0x00, 0x01, 0xd4, 0xca, 0x00, 0x01, 0xd6, 0xcb, 0x00, + 0x41, 0x4b, 0x7c, 0x98, 0xc4, 0x00, 0x01, 0x49, 0x64, 0xb5, 0xc5, 0x00, + 0x41, 0x90, 0xfb, 0x01, 0x92, 0xda, 0x01, 0x93, 0xc7, 0x01, 0x94, 0xaa, + 0x01, 0x95, 0x83, 0x01, 0x96, 0x55, 0x97, 0x2b, 0x98, 0x0d, 0x99, 0x01, + 0xff, 0xd0, 0xc2, 0x00, 0x01, 0x48, 0xf0, 0xc2, 0xc3, 0x00, 0x41, 0xd0, + 0xbb, 0x00, 0x01, 0xd1, 0xbc, 0x00, 0x01, 0xd2, 0xbd, 0x00, 0x01, 0xd3, + 0xbe, 0x00, 0x01, 0xd4, 0xbf, 0x00, 0x01, 0xd5, 0xc0, 0x00, 0x01, 0xd9, + 0xc1, 0x00, 0x41, 0xd0, 0xb2, 0x00, 0x01, 0xd1, 0xb3, 0x00, 0x01, 0xd2, + 0xb4, 0x00, 0x01, 0x47, 0x29, 0xce, 0xb5, 0x00, 0x01, 0xd4, 0xb6, 0x00, + 0x01, 0x46, 0x14, 0xd9, 0xb7, 0x00, 0x01, 0xd7, 0xb8, 0x00, 0x01, 0xd8, + 0xb9, 0x00, 0x01, 0xd9, 0xba, 0x00, 0x41, 0xd0, 0xa8, 0x00, 0x01, 0xd1, + 0xa9, 0x00, 0x01, 0x49, 0x49, 0xb5, 0xaa, 0x00, 0x01, 0x48, 0xf8, 0xc2, + 0xab, 0x00, 0x01, 0xd4, 0xac, 0x00, 0x01, 0xd5, 0xad, 0x00, 0x01, 0xd6, + 0xae, 0x00, 0x01, 0xd7, 0xaf, 0x00, 0x01, 0xd8, 0xb0, 0x00, 0x01, 0xd9, + 0xb1, 0x00, 0x41, 0xd0, 0x9f, 0x00, 0x01, 0x46, 0x9c, 0xd8, 0xa0, 0x00, + 0x01, 0xd2, 0xa1, 0x00, 0x01, 0xd3, 0xa2, 0x00, 0x01, 0xd4, 0xa3, 0x00, + 0x01, 0xd7, 0xa5, 0x00, 0x01, 0xd8, 0xa6, 0x00, 0x01, 0x47, 0x68, 0xce, + 0xa7, 0x00, 0x41, 0x48, 0xe0, 0xc2, 0x9a, 0x00, 0x01, 0x46, 0x96, 0xd8, + 0x9b, 0x00, 0x01, 0xd2, 0x9c, 0x00, 0x01, 0x46, 0xfc, 0xd8, 0x9d, 0x00, + 0x01, 0xd6, 0x9e, 0x00, 0x41, 0x45, 0x27, 0xe2, 0x95, 0x00, 0x01, 0x46, + 0xa8, 0xd8, 0x96, 0x00, 0x01, 0xd2, 0x97, 0x00, 0x41, 0x47, 0xf8, 0xcd, + 0x8e, 0x00, 0x01, 0x48, 0xe8, 0xc2, 0x8f, 0x00, 0x01, 0x47, 0x06, 0xce, + 0x90, 0x00, 0x01, 0x47, 0x37, 0xce, 0x91, 0x00, 0x01, 0x49, 0x6d, 0xb5, + 0x92, 0x00, 0x41, 0x45, 0x22, 0xe2, 0x80, 0x00, 0x01, 0x47, 0x0d, 0xce, + 0x81, 0x00, 0x01, 0x46, 0xd2, 0xd8, 0x82, 0x00, 0x01, 0x95, 0x39, 0x96, + 0x2b, 0x97, 0x1d, 0x98, 0x0f, 0x99, 0x01, 0xff, 0x45, 0x46, 0xe6, 0x8c, + 0x00, 0x01, 0x46, 0xe2, 0xdd, 0x8d, 0x00, 0x41, 0x45, 0x50, 0xe6, 0x8a, + 0x00, 0x01, 0x46, 0xdc, 0xdd, 0x8b, 0x00, 0x41, 0x4a, 0x3d, 0xaa, 0x88, + 0x00, 0x01, 0x49, 0xca, 0xbb, 0x89, 0x00, 0x41, 0x45, 0x4b, 0xe6, 0x86, + 0x00, 0x01, 0x45, 0x4e, 0xe8, 0x87, 0x00, 0x41, 0x46, 0x0c, 0xd8, 0x83, + 0x00, 0x01, 0x46, 0xae, 0xdb, 0x84, 0x00, 0x01, 0x4a, 0x99, 0xad, 0x85, + 0x00, 0x41, 0x44, 0x01, 0xed, 0x1b, 0x06, 0x01, 0x91, 0xb1, 0x0c, 0x93, + 0xe8, 0x09, 0x94, 0xee, 0x08, 0x95, 0x90, 0x06, 0x96, 0xac, 0x04, 0x97, + 0x9b, 0x03, 0x02, 0x2c, 0xf4, 0xf6, 0x02, 0xa2, 0x01, 0xff, 0x90, 0x3f, + 0x91, 0x01, 0xff, 0x42, 0x59, 0xe2, 0x48, 0x06, 0x01, 0x92, 0x28, 0x02, + 0x6a, 0xec, 0x1c, 0x42, 0x02, 0xf5, 0x50, 0x06, 0x01, 0x42, 0xeb, 0xf4, + 0x51, 0x06, 0x01, 0x98, 0x06, 0x42, 0x7f, 0xf3, 0x54, 0x06, 0x41, 0xd0, + 0x52, 0x06, 0x01, 0xd8, 0x53, 0x06, 0x41, 0xe1, 0x4d, 0x06, 0x01, 0xe2, + 0x4e, 0x06, 0x41, 0xd0, 0x49, 0x06, 0x01, 0xd2, 0x4b, 0x06, 0x01, 0xd3, + 0x4c, 0x06, 0x41, 0x90, 0x8b, 0x02, 0x91, 0xf4, 0x01, 0x92, 0xb6, 0x01, + 0x93, 0x9b, 0x01, 0x94, 0x79, 0x95, 0x53, 0x96, 0x39, 0x97, 0x1b, 0x98, + 0x01, 0xff, 0xd0, 0x41, 0x06, 0x01, 0xd1, 0x42, 0x06, 0x01, 0xd2, 0x43, + 0x06, 0x01, 0xd5, 0x44, 0x06, 0x01, 0xd6, 0x45, 0x06, 0x01, 0xd7, 0x46, + 0x06, 0x41, 0xd0, 0x3a, 0x06, 0x01, 0xd3, 0x3b, 0x06, 0x01, 0xd4, 0x3c, + 0x06, 0x01, 0xd6, 0x3d, 0x06, 0x01, 0xd7, 0x3e, 0x06, 0x01, 0xd8, 0x3f, + 0x06, 0x01, 0xd9, 0x40, 0x06, 0x41, 0xd0, 0x34, 0x06, 0x01, 0xd1, 0x35, + 0x06, 0x01, 0xd5, 0x36, 0x06, 0x01, 0xd6, 0x37, 0x06, 0x01, 0xd7, 0x38, + 0x06, 0x01, 0xd9, 0x39, 0x06, 0x41, 0xd0, 0x2b, 0x06, 0x01, 0xd1, 0x2c, + 0x06, 0x01, 0xd3, 0x2d, 0x06, 0x01, 0xd4, 0x2e, 0x06, 0x01, 0xd5, 0x2f, + 0x06, 0x01, 0xd6, 0x30, 0x06, 0x01, 0xd7, 0x31, 0x06, 0x01, 0xd8, 0x32, + 0x06, 0x01, 0xd9, 0x33, 0x06, 0x41, 0xd0, 0x23, 0x06, 0x01, 0xd1, 0x24, + 0x06, 0x01, 0xd4, 0x25, 0x06, 0x01, 0xd5, 0x26, 0x06, 0x01, 0xd6, 0x27, + 0x06, 0x01, 0xd7, 0x28, 0x06, 0x01, 0xd8, 0x29, 0x06, 0x01, 0xd9, 0x2a, + 0x06, 0x41, 0xd0, 0x1d, 0x06, 0x01, 0xd1, 0x1e, 0x06, 0x01, 0xd4, 0x1f, + 0x06, 0x01, 0xd7, 0x20, 0x06, 0x01, 0xd8, 0x21, 0x06, 0x01, 0xd9, 0x22, + 0x06, 0x41, 0xd0, 0x0e, 0x06, 0x01, 0xd1, 0x0f, 0x06, 0x81, 0x2a, 0xd2, + 0x12, 0x06, 0x81, 0x1d, 0xd3, 0x15, 0x06, 0x81, 0x14, 0xd4, 0x17, 0x06, + 0x01, 0xd6, 0x18, 0x06, 0x01, 0xd7, 0x19, 0x06, 0x01, 0xd8, 0x1a, 0x06, + 0x01, 0xd9, 0x1c, 0x06, 0x41, 0xed, 0x16, 0x06, 0x41, 0xe6, 0x13, 0x06, + 0x01, 0xed, 0x14, 0x06, 0x41, 0xe6, 0x10, 0x06, 0x01, 0xed, 0x11, 0x06, + 0x41, 0xd0, 0x09, 0x06, 0x01, 0xd1, 0x0a, 0x06, 0x01, 0xd3, 0x0b, 0x06, + 0x01, 0xd6, 0x0c, 0x06, 0x01, 0xd7, 0x0d, 0x06, 0x41, 0xd1, 0x00, 0x06, + 0x01, 0xd2, 0x01, 0x06, 0x01, 0xd3, 0x02, 0x06, 0x01, 0xd4, 0x03, 0x06, + 0x01, 0xd5, 0x04, 0x06, 0x01, 0xd6, 0x05, 0x06, 0x01, 0xd7, 0x06, 0x06, + 0x01, 0xd8, 0x07, 0x06, 0x01, 0xd9, 0x08, 0x06, 0x41, 0xd0, 0x60, 0x07, + 0x01, 0xd1, 0x61, 0x07, 0x01, 0xd2, 0x62, 0x07, 0x01, 0xd3, 0x63, 0x07, + 0x01, 0xd4, 0x64, 0x07, 0x01, 0xd5, 0x65, 0x07, 0x01, 0xd6, 0x66, 0x07, + 0x01, 0xd7, 0x67, 0x07, 0x41, 0x90, 0x38, 0x91, 0x0c, 0x47, 0x14, 0xce, + 0x54, 0x07, 0x01, 0x45, 0xd1, 0xe2, 0x55, 0x07, 0x41, 0x43, 0xba, 0x57, + 0x4d, 0x07, 0x01, 0x43, 0x80, 0xf3, 0x4e, 0x07, 0x01, 0x43, 0x6d, 0xed, + 0x4f, 0x07, 0x01, 0x47, 0x30, 0xce, 0x50, 0x07, 0x01, 0x45, 0xd6, 0xe2, + 0x51, 0x07, 0x01, 0x44, 0xdd, 0xed, 0x52, 0x07, 0x01, 0x44, 0x61, 0xee, + 0x53, 0x07, 0x41, 0x43, 0xff, 0xcd, 0x40, 0x07, 0x01, 0x43, 0x49, 0xed, + 0x41, 0x07, 0x01, 0x43, 0xa1, 0xf3, 0x42, 0x07, 0x01, 0x43, 0xb0, 0xf3, + 0x43, 0x07, 0x01, 0x43, 0xe5, 0xed, 0x44, 0x07, 0x01, 0x43, 0x08, 0xd9, + 0x45, 0x07, 0x01, 0x43, 0x62, 0xe3, 0x46, 0x07, 0x01, 0x43, 0x08, 0xc3, + 0x47, 0x07, 0x01, 0x99, 0x01, 0xff, 0x42, 0x73, 0x00, 0x48, 0x07, 0x01, + 0x8d, 0x01, 0xff, 0x44, 0x51, 0xed, 0x49, 0x07, 0x01, 0x44, 0x85, 0xed, + 0x4a, 0x07, 0x01, 0x44, 0xb5, 0xed, 0x4b, 0x07, 0x01, 0x44, 0x39, 0xee, + 0x4c, 0x07, 0x41, 0x90, 0xbe, 0x01, 0x91, 0x93, 0x01, 0x92, 0x6d, 0x93, + 0x5f, 0x94, 0x3d, 0x95, 0x17, 0x96, 0x01, 0xff, 0xd0, 0x32, 0x07, 0x01, + 0xd1, 0x33, 0x07, 0x01, 0xd2, 0x34, 0x07, 0x01, 0xd3, 0x35, 0x07, 0x01, + 0xd4, 0x36, 0x07, 0x41, 0xd1, 0x29, 0x07, 0x01, 0xd2, 0x2a, 0x07, 0x01, + 0xd3, 0x2b, 0x07, 0x01, 0xd4, 0x2c, 0x07, 0x01, 0xd5, 0x2d, 0x07, 0x01, + 0xd6, 0x2e, 0x07, 0x01, 0xd7, 0x2f, 0x07, 0x01, 0xd8, 0x30, 0x07, 0x01, + 0xd9, 0x31, 0x07, 0x41, 0xd0, 0x21, 0x07, 0x01, 0xd2, 0x22, 0x07, 0x01, + 0xd3, 0x23, 0x07, 0x01, 0xd4, 0x24, 0x07, 0x01, 0xd5, 0x25, 0x07, 0x01, + 0xd6, 0x26, 0x07, 0x01, 0xd8, 0x27, 0x07, 0x01, 0xd9, 0x28, 0x07, 0x41, + 0xd4, 0x1e, 0x07, 0x01, 0xd7, 0x1f, 0x07, 0x01, 0xd8, 0x20, 0x07, 0x41, + 0xd0, 0x15, 0x07, 0x01, 0xd1, 0x16, 0x07, 0x01, 0xd2, 0x17, 0x07, 0x01, + 0xd3, 0x18, 0x07, 0x01, 0xd4, 0x19, 0x07, 0x01, 0xd6, 0x1a, 0x07, 0x01, + 0xd7, 0x1b, 0x07, 0x01, 0xd8, 0x1c, 0x07, 0x01, 0xd9, 0x1d, 0x07, 0x41, + 0xd0, 0x0b, 0x07, 0x01, 0xd1, 0x0c, 0x07, 0x01, 0xd2, 0x0d, 0x07, 0x01, + 0xd3, 0x0e, 0x07, 0x01, 0xd4, 0x0f, 0x07, 0x01, 0xd5, 0x10, 0x07, 0x01, + 0xd6, 0x11, 0x07, 0x01, 0xd7, 0x12, 0x07, 0x01, 0xd8, 0x13, 0x07, 0x01, + 0xd9, 0x14, 0x07, 0x41, 0xd0, 0x03, 0x07, 0x01, 0xd1, 0x04, 0x07, 0x01, + 0xd2, 0x05, 0x07, 0x01, 0xd3, 0x06, 0x07, 0x01, 0xd4, 0x07, 0x07, 0x01, + 0xd6, 0x08, 0x07, 0x01, 0xd8, 0x09, 0x07, 0x01, 0xd9, 0x0a, 0x07, 0x41, + 0x90, 0xb8, 0x02, 0x91, 0x9d, 0x02, 0x92, 0xf6, 0x01, 0x93, 0xcf, 0x01, + 0x94, 0xb0, 0x01, 0x95, 0x89, 0x01, 0x96, 0x6f, 0x97, 0x45, 0x98, 0x1b, + 0x99, 0x01, 0xff, 0xd1, 0xfd, 0x06, 0x01, 0xd2, 0xfe, 0x06, 0x01, 0xd4, + 0xff, 0x06, 0x01, 0xd5, 0x00, 0x07, 0x01, 0xd6, 0x01, 0x07, 0x01, 0xd8, + 0x02, 0x07, 0x41, 0xd0, 0xf3, 0x06, 0x01, 0xd1, 0xf4, 0x06, 0x01, 0xd2, + 0xf5, 0x06, 0x01, 0xd3, 0xf6, 0x06, 0x01, 0xd4, 0xf7, 0x06, 0x01, 0xd5, + 0xf8, 0x06, 0x01, 0xd6, 0xf9, 0x06, 0x01, 0xd7, 0xfa, 0x06, 0x01, 0xd8, + 0xfb, 0x06, 0x01, 0xd9, 0xfc, 0x06, 0x41, 0xd0, 0xe9, 0x06, 0x01, 0xd1, + 0xea, 0x06, 0x01, 0xd2, 0xeb, 0x06, 0x01, 0xd3, 0xec, 0x06, 0x01, 0xd4, + 0xed, 0x06, 0x01, 0xd5, 0xee, 0x06, 0x01, 0xd6, 0xef, 0x06, 0x01, 0xd7, + 0xf0, 0x06, 0x01, 0xd8, 0xf1, 0x06, 0x01, 0xd9, 0xf2, 0x06, 0x41, 0xd3, + 0xe3, 0x06, 0x01, 0xd4, 0xe4, 0x06, 0x01, 0xd5, 0xe5, 0x06, 0x01, 0xd6, + 0xe6, 0x06, 0x01, 0xd8, 0xe7, 0x06, 0x01, 0xd9, 0xe8, 0x06, 0x41, 0xd0, + 0xda, 0x06, 0x01, 0xd1, 0xdb, 0x06, 0x01, 0xd2, 0xdc, 0x06, 0x01, 0xd3, + 0xdd, 0x06, 0x01, 0xd4, 0xde, 0x06, 0x01, 0xd5, 0xdf, 0x06, 0x01, 0xd6, + 0xe0, 0x06, 0x01, 0xd7, 0xe1, 0x06, 0x01, 0xd9, 0xe2, 0x06, 0x41, 0xd0, + 0xd3, 0x06, 0x01, 0xd1, 0xd4, 0x06, 0x01, 0xd2, 0xd5, 0x06, 0x01, 0xd5, + 0xd6, 0x06, 0x01, 0xd7, 0xd7, 0x06, 0x01, 0xd8, 0xd8, 0x06, 0x01, 0xd9, + 0xd9, 0x06, 0x41, 0xd0, 0xca, 0x06, 0x01, 0xd1, 0xcb, 0x06, 0x01, 0xd2, + 0xcc, 0x06, 0x01, 0xd4, 0xcd, 0x06, 0x01, 0xd5, 0xce, 0x06, 0x01, 0xd6, + 0xcf, 0x06, 0x01, 0xd7, 0xd0, 0x06, 0x01, 0xd8, 0xd1, 0x06, 0x01, 0xd9, + 0xd2, 0x06, 0x41, 0xd0, 0xc1, 0x06, 0x01, 0xd1, 0xc2, 0x06, 0x01, 0xd3, + 0xc3, 0x06, 0x01, 0xd4, 0xc4, 0x06, 0x01, 0xd5, 0xc5, 0x06, 0x01, 0xd6, + 0xc6, 0x06, 0x01, 0xd7, 0xc7, 0x06, 0x01, 0xd8, 0xc8, 0x06, 0x01, 0xd9, + 0xc9, 0x06, 0x41, 0xd0, 0xbb, 0x06, 0x01, 0xd1, 0xbc, 0x06, 0x01, 0xd2, + 0xbd, 0x06, 0x01, 0xd3, 0xbe, 0x06, 0x01, 0xd5, 0xbf, 0x06, 0x01, 0xd6, + 0xc0, 0x06, 0x41, 0xd1, 0xb3, 0x06, 0x01, 0xd2, 0xb4, 0x06, 0x01, 0xd3, + 0xb5, 0x06, 0x01, 0xd4, 0xb6, 0x06, 0x01, 0xd5, 0xb7, 0x06, 0x01, 0xd6, + 0xb8, 0x06, 0x01, 0xd8, 0xb9, 0x06, 0x01, 0xd9, 0xba, 0x06, 0x41, 0x90, + 0x39, 0x91, 0x01, 0xff, 0x45, 0x2c, 0xe2, 0xaa, 0x06, 0x01, 0x45, 0x54, + 0xe2, 0xab, 0x06, 0x01, 0x45, 0x9f, 0xe2, 0xac, 0x06, 0x01, 0x45, 0xcc, + 0xe2, 0xad, 0x06, 0x01, 0x45, 0x12, 0xe3, 0xae, 0x06, 0x01, 0x45, 0x26, + 0xe3, 0xaf, 0x06, 0x01, 0x45, 0x4e, 0xe3, 0xb0, 0x06, 0x01, 0x45, 0x7b, + 0xe3, 0xb1, 0x06, 0x01, 0x45, 0xa8, 0xe3, 0xb2, 0x06, 0x41, 0x45, 0x2c, + 0xe2, 0xa0, 0x06, 0x01, 0x45, 0x54, 0xe2, 0xa1, 0x06, 0x01, 0x45, 0x9f, + 0xe2, 0xa2, 0x06, 0x01, 0x45, 0xcc, 0xe2, 0xa3, 0x06, 0x01, 0x45, 0x12, + 0xe3, 0xa4, 0x06, 0x01, 0x45, 0x26, 0xe3, 0xa5, 0x06, 0x01, 0x45, 0x4e, + 0xe3, 0xa6, 0x06, 0x01, 0x45, 0x7b, 0xe3, 0xa7, 0x06, 0x01, 0x45, 0xa8, + 0xe3, 0xa8, 0x06, 0x01, 0x45, 0xe9, 0xe3, 0xa9, 0x06, 0x41, 0x90, 0x94, + 0x02, 0x91, 0xdf, 0x01, 0x92, 0xb4, 0x01, 0x93, 0x89, 0x01, 0x94, 0x5f, + 0x95, 0x35, 0x96, 0x0b, 0x97, 0x01, 0xff, 0xd0, 0x9e, 0x06, 0x01, 0xd1, + 0x9f, 0x06, 0x41, 0xd0, 0x94, 0x06, 0x01, 0xd1, 0x95, 0x06, 0x01, 0xd2, + 0x96, 0x06, 0x01, 0xd3, 0x97, 0x06, 0x01, 0xd4, 0x98, 0x06, 0x01, 0xd5, + 0x99, 0x06, 0x01, 0xd6, 0x9a, 0x06, 0x01, 0xd7, 0x9b, 0x06, 0x01, 0xd8, + 0x9c, 0x06, 0x01, 0xd9, 0x9d, 0x06, 0x41, 0xd0, 0x8a, 0x06, 0x01, 0xd1, + 0x8b, 0x06, 0x01, 0xd2, 0x8c, 0x06, 0x01, 0xd3, 0x8d, 0x06, 0x01, 0xd4, + 0x8e, 0x06, 0x01, 0xd5, 0x8f, 0x06, 0x01, 0xd6, 0x90, 0x06, 0x01, 0xd7, + 0x91, 0x06, 0x01, 0xd8, 0x92, 0x06, 0x01, 0xd9, 0x93, 0x06, 0x41, 0xd0, + 0x80, 0x06, 0x01, 0xd1, 0x81, 0x06, 0x01, 0xd2, 0x82, 0x06, 0x01, 0xd3, + 0x83, 0x06, 0x01, 0xd4, 0x84, 0x06, 0x01, 0xd5, 0x85, 0x06, 0x01, 0xd6, + 0x86, 0x06, 0x01, 0xd7, 0x87, 0x06, 0x01, 0xd8, 0x88, 0x06, 0x01, 0xd9, + 0x89, 0x06, 0x41, 0xd0, 0x76, 0x06, 0x01, 0xd1, 0x77, 0x06, 0x01, 0xd2, + 0x78, 0x06, 0x01, 0xd3, 0x79, 0x06, 0x01, 0xd4, 0x7a, 0x06, 0x01, 0xd5, + 0x7b, 0x06, 0x01, 0xd6, 0x7c, 0x06, 0x01, 0xd7, 0x7d, 0x06, 0x01, 0xd8, + 0x7e, 0x06, 0x01, 0xd9, 0x7f, 0x06, 0x41, 0xd0, 0x6c, 0x06, 0x01, 0xd1, + 0x6d, 0x06, 0x01, 0xd2, 0x6e, 0x06, 0x01, 0xd3, 0x6f, 0x06, 0x01, 0xd4, + 0x70, 0x06, 0x01, 0xd5, 0x71, 0x06, 0x01, 0xd6, 0x72, 0x06, 0x01, 0xd7, + 0x73, 0x06, 0x01, 0xd8, 0x74, 0x06, 0x01, 0xd9, 0x75, 0x06, 0x41, 0xd0, + 0x60, 0x06, 0x01, 0xd1, 0x61, 0x06, 0x01, 0xd2, 0x62, 0x06, 0x01, 0x93, + 0x18, 0xd4, 0x66, 0x06, 0x01, 0xd5, 0x67, 0x06, 0x01, 0xd6, 0x68, 0x06, + 0x01, 0xd7, 0x69, 0x06, 0x01, 0xd8, 0x6a, 0x06, 0x01, 0xd9, 0x6b, 0x06, + 0x41, 0xe1, 0x63, 0x06, 0x01, 0xe2, 0x64, 0x06, 0x01, 0xe3, 0x65, 0x06, + 0x41, 0xd1, 0x55, 0x06, 0x01, 0xd2, 0x56, 0x06, 0x01, 0xd3, 0x57, 0x06, + 0x01, 0xd4, 0x58, 0x06, 0x01, 0xd5, 0x59, 0x06, 0x01, 0xd6, 0x5a, 0x06, + 0x01, 0xd7, 0x5b, 0x06, 0x01, 0xd8, 0x5c, 0x06, 0x01, 0x99, 0x01, 0xff, + 0xe1, 0x5d, 0x06, 0x01, 0xe2, 0x5e, 0x06, 0x01, 0xe3, 0x5f, 0x06, 0x41, + 0x46, 0x8a, 0xd8, 0x47, 0x06, 0x01, 0x43, 0x98, 0xf3, 0x4a, 0x06, 0x01, + 0x43, 0xad, 0xf3, 0x4f, 0x06, 0x41, 0x44, 0xd3, 0x20, 0x0a, 0x00, 0x00, + 0x0c, 0x3f, 0x90, 0x13, 0x49, 0xd8, 0x20, 0x28, 0x20, 0x00, 0x4a, 0xe3, + 0x3b, 0x0b, 0x00, 0xc0, 0x00, 0x44, 0x66, 0xb8, 0x8a, 0x00, 0x40, 0x56, + 0xd1, 0x35, 0x14, 0x2a, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x5c, 0xf6, + 0x18, 0x12, 0x2a, 0x00, 0x5d, 0x8a, 0x16, 0x13, 0x2a, 0x40, 0x03, 0x85, + 0xc9, 0x06, 0x53, 0xae, 0x4a, 0xcf, 0x32, 0x40, 0x06, 0xef, 0x06, 0xec, + 0x02, 0x50, 0xad, 0x00, 0x44, 0x19, 0x00, 0x07, 0xec, 0x05, 0xab, 0x01, + 0x4d, 0xa6, 0x34, 0x45, 0x19, 0x00, 0xb3, 0x36, 0x05, 0x3c, 0x39, 0x01, + 0xff, 0x06, 0x59, 0x03, 0x06, 0x4f, 0x23, 0x6a, 0x00, 0x19, 0x40, 0xe1, + 0x20, 0x19, 0x80, 0x1a, 0xe5, 0x27, 0x19, 0x80, 0x11, 0xe9, 0x21, 0x19, + 0x00, 0xef, 0x28, 0x19, 0x80, 0x04, 0xf5, 0x22, 0x19, 0x40, 0xef, 0x25, + 0x19, 0x40, 0xe5, 0x23, 0x19, 0x40, 0xe9, 0x24, 0x19, 0x00, 0xf5, 0x26, + 0x19, 0x40, 0x04, 0x5b, 0x03, 0x51, 0x0c, 0x77, 0x08, 0x17, 0x10, 0xd6, + 0x67, 0x01, 0xff, 0x42, 0x71, 0x00, 0x2a, 0x19, 0x00, 0x42, 0xa9, 0x01, + 0x2b, 0x19, 0x00, 0x42, 0xbc, 0x22, 0x29, 0x19, 0x40, 0x48, 0x3c, 0x16, + 0x32, 0x19, 0x00, 0x42, 0x1b, 0x02, 0x30, 0x19, 0x00, 0x42, 0x74, 0x00, + 0x38, 0x19, 0x00, 0x42, 0x6c, 0x00, 0x36, 0x19, 0x00, 0xae, 0x12, 0x42, + 0xbb, 0x09, 0x35, 0x19, 0x00, 0x42, 0x71, 0x00, 0x37, 0x19, 0x00, 0x42, + 0x12, 0x00, 0x33, 0x19, 0x40, 0xe1, 0x34, 0x19, 0x00, 0x42, 0x24, 0x02, + 0x31, 0x19, 0x40, 0x49, 0x04, 0xbb, 0x3a, 0x19, 0x00, 0x43, 0xd0, 0x1c, + 0x40, 0x19, 0x00, 0x49, 0x1b, 0xbc, 0x39, 0x19, 0x00, 0x44, 0x85, 0xf2, + 0x3b, 0x19, 0x40, 0xa2, 0xa9, 0x01, 0xa3, 0x9c, 0x01, 0xa4, 0x8f, 0x01, + 0xa7, 0x7d, 0x42, 0x22, 0x00, 0x1c, 0x19, 0x00, 0xaa, 0x6b, 0xab, 0x5f, + 0x42, 0x74, 0x00, 0x17, 0x19, 0x00, 0x42, 0x6c, 0x00, 0x14, 0x19, 0x00, + 0xae, 0x47, 0xb0, 0x3b, 0x42, 0x71, 0x00, 0x16, 0x19, 0x00, 0xb3, 0x23, + 0xb4, 0x11, 0x42, 0xa9, 0x01, 0x18, 0x19, 0x00, 0x42, 0xbc, 0x22, 0x15, + 0x19, 0xc0, 0x00, 0xee, 0x0a, 0x19, 0x40, 0xe1, 0x0b, 0x19, 0x00, 0x42, + 0x22, 0x00, 0x0c, 0x19, 0x00, 0x42, 0x71, 0x00, 0x1e, 0x19, 0x40, 0xe1, + 0x1b, 0x19, 0x00, 0x42, 0x22, 0x00, 0x19, 0x19, 0x00, 0x42, 0x40, 0x06, + 0x1a, 0x19, 0x40, 0xe1, 0x10, 0x19, 0x00, 0x42, 0x22, 0x00, 0x11, 0x19, + 0x40, 0xe1, 0x0f, 0x19, 0x00, 0x42, 0x24, 0x02, 0x05, 0x19, 0x40, 0xe1, + 0x01, 0x19, 0x00, 0x42, 0x22, 0x00, 0x02, 0x19, 0x40, 0xe1, 0x08, 0x19, + 0x00, 0x42, 0x22, 0x00, 0x09, 0x19, 0x40, 0xe1, 0x03, 0x19, 0x00, 0x42, + 0x22, 0x00, 0x04, 0x19, 0x00, 0x43, 0xb8, 0x35, 0x1d, 0x19, 0x40, 0xe1, + 0x0d, 0x19, 0x00, 0x42, 0x22, 0x00, 0x0e, 0x19, 0x40, 0xe1, 0x06, 0x19, + 0x00, 0x42, 0x22, 0x00, 0x07, 0x19, 0x40, 0xe1, 0x12, 0x19, 0x00, 0x42, + 0x22, 0x00, 0x13, 0x19, 0x40, 0x45, 0x12, 0x0b, 0x4e, 0x19, 0x00, 0xa6, + 0x2e, 0x44, 0xcf, 0x2a, 0x4f, 0x19, 0x00, 0x43, 0x0e, 0x0b, 0x47, 0x19, + 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x46, 0x19, 0x40, 0x44, + 0x25, 0x01, 0x49, 0x19, 0x00, 0x42, 0x15, 0x02, 0x48, 0x19, 0x40, 0x44, + 0xc9, 0x1d, 0x4d, 0x19, 0x00, 0x42, 0x01, 0x26, 0x4c, 0x19, 0x40, 0x43, + 0xd2, 0x05, 0x4b, 0x19, 0x00, 0x43, 0xf6, 0x06, 0x4a, 0x19, 0x40, 0x56, + 0x18, 0x29, 0x72, 0xf6, 0x01, 0x02, 0xcb, 0x00, 0x01, 0xff, 0x80, 0x14, + 0x44, 0x58, 0x07, 0x07, 0x26, 0xc0, 0x00, 0x45, 0xd7, 0xe1, 0xf2, 0xf5, + 0xc1, 0x00, 0x47, 0x75, 0x7c, 0xf1, 0xf5, 0x41, 0x4a, 0x49, 0xa8, 0x75, + 0xfa, 0x01, 0x4a, 0xa3, 0xa8, 0xf8, 0xf5, 0x01, 0x55, 0xc7, 0x3a, 0xbb, + 0xf7, 0x01, 0xa6, 0x48, 0x4b, 0x1b, 0x61, 0xa2, 0xf7, 0x01, 0x64, 0x73, + 0x09, 0x72, 0x27, 0x00, 0xb2, 0x2e, 0xb3, 0x1a, 0xb4, 0x0c, 0x4c, 0x32, + 0x00, 0x58, 0x27, 0x00, 0x4c, 0xf2, 0x1f, 0x8e, 0xf7, 0x41, 0x57, 0xb4, + 0x2e, 0xc0, 0xf7, 0x01, 0x58, 0xe6, 0x2b, 0xd2, 0xf7, 0x41, 0x46, 0x13, + 0x19, 0xa9, 0xf7, 0x01, 0x44, 0x4c, 0x04, 0x91, 0x25, 0x00, 0x52, 0xff, + 0x52, 0xb5, 0xf7, 0x41, 0x43, 0x90, 0x17, 0x88, 0xf6, 0x01, 0x64, 0x4f, + 0x09, 0x73, 0x27, 0x40, 0x04, 0xd2, 0x05, 0x11, 0x12, 0x00, 0x16, 0x01, + 0xff, 0x44, 0x12, 0x16, 0xcc, 0x2b, 0x00, 0x44, 0x31, 0x13, 0xc4, 0xf7, + 0x41, 0x52, 0xec, 0x2b, 0xc9, 0xf7, 0x01, 0x4f, 0xd5, 0x1c, 0xaf, 0xf7, + 0x41, 0x02, 0x44, 0x14, 0xc0, 0x15, 0x44, 0x89, 0xef, 0xd2, 0xf4, 0x01, + 0x02, 0xc5, 0x00, 0xcc, 0x05, 0xe7, 0xb5, 0xf9, 0x01, 0x43, 0xc3, 0x07, + 0x4b, 0xf3, 0x01, 0xef, 0x4c, 0x26, 0x80, 0xb6, 0x05, 0x05, 0xc5, 0xe9, + 0xda, 0x01, 0x08, 0xee, 0x00, 0x0c, 0x47, 0xb8, 0xd6, 0xd0, 0xce, 0x01, + 0x4a, 0x39, 0xb3, 0x9a, 0xf3, 0x41, 0xa1, 0x87, 0x01, 0x0b, 0xcb, 0x39, + 0x77, 0x4f, 0xc7, 0x6b, 0xa6, 0x2a, 0x80, 0x6a, 0x58, 0x86, 0x28, 0xda, + 0x22, 0x00, 0xaf, 0x1d, 0x44, 0x5a, 0x03, 0x3c, 0x00, 0x00, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x4d, 0x73, 0x81, 0x79, 0x2a, 0x00, 0x43, 0x23, 0x0a, + 0xd6, 0x22, 0x00, 0x53, 0x50, 0x4c, 0x7b, 0x2a, 0x40, 0x02, 0x18, 0x00, + 0x06, 0x4c, 0xc3, 0x96, 0x66, 0x22, 0x40, 0x4b, 0xb0, 0x1e, 0x85, 0x2a, + 0x00, 0x03, 0x7b, 0x00, 0x25, 0x4c, 0x87, 0x00, 0x76, 0x22, 0x00, 0x50, + 0x36, 0x67, 0x7d, 0x2a, 0xc0, 0x00, 0x0a, 0x75, 0x3b, 0x01, 0xff, 0x45, + 0x5c, 0x00, 0x81, 0x2a, 0x80, 0x06, 0x46, 0xa7, 0x13, 0x7f, 0x2a, 0x40, + 0x46, 0xc7, 0x00, 0x83, 0x2a, 0x40, 0x45, 0xfb, 0x0c, 0x64, 0x22, 0x00, + 0x4a, 0xd6, 0x39, 0x72, 0x22, 0x40, 0x54, 0x93, 0x00, 0xa8, 0x2a, 0x40, + 0x45, 0xfb, 0x0c, 0x68, 0x22, 0x00, 0x4a, 0xd6, 0x39, 0xe6, 0x22, 0x40, + 0x05, 0x5d, 0x00, 0x11, 0x03, 0x1b, 0x00, 0x01, 0xff, 0x4f, 0xd1, 0x70, + 0x89, 0x2a, 0x00, 0x58, 0xf6, 0x2a, 0x87, 0x2a, 0x40, 0x64, 0xe3, 0x08, + 0x8b, 0x2a, 0x00, 0x64, 0x07, 0x09, 0x91, 0x2a, 0x00, 0x4f, 0x4d, 0x1a, + 0x76, 0x29, 0x00, 0xb3, 0x01, 0xff, 0x07, 0xf6, 0xd1, 0x06, 0x73, 0x74, + 0x00, 0x93, 0x2a, 0x40, 0x52, 0x81, 0x00, 0x8f, 0x2a, 0x00, 0x48, 0xf3, + 0x28, 0x8d, 0x2a, 0x40, 0x0f, 0x3d, 0x33, 0xa8, 0x03, 0x06, 0xef, 0x06, + 0xe1, 0x02, 0x07, 0xec, 0x05, 0x6e, 0x0c, 0x6d, 0x16, 0x48, 0xb3, 0x25, + 0x0b, 0x40, 0x77, 0x01, 0xff, 0x42, 0x80, 0x12, 0x26, 0x1c, 0x00, 0xe5, + 0x2c, 0x1c, 0x00, 0xe9, 0x27, 0x1c, 0x00, 0xef, 0x28, 0x1c, 0x80, 0x09, + 0xf5, 0x2a, 0x1c, 0xc0, 0x00, 0xf5, 0x2b, 0x1c, 0x40, 0xef, 0x29, 0x1c, + 0x40, 0x04, 0x5b, 0x03, 0x11, 0x10, 0xd6, 0x67, 0x01, 0xff, 0x42, 0x71, + 0x00, 0x25, 0x1c, 0x00, 0x42, 0xbc, 0x22, 0x24, 0x1c, 0x40, 0x45, 0x3f, + 0x3f, 0x37, 0x1c, 0x00, 0x43, 0x4f, 0x03, 0x36, 0x1c, 0x40, 0x46, 0x27, + 0xcd, 0x3d, 0x1c, 0x00, 0x52, 0xfb, 0x53, 0x3c, 0x1c, 0x00, 0xb4, 0x01, + 0xff, 0x45, 0x08, 0x54, 0x3b, 0x1c, 0x00, 0x45, 0xec, 0xea, 0x3f, 0x1c, + 0xc0, 0x00, 0x47, 0x26, 0xcd, 0x3e, 0x1c, 0x40, 0xe1, 0x23, 0x1c, 0x00, + 0xa2, 0xde, 0x01, 0xa3, 0xd1, 0x01, 0xa4, 0xbe, 0x01, 0xa6, 0xb1, 0x01, + 0xa7, 0xa4, 0x01, 0xa8, 0x97, 0x01, 0x42, 0x56, 0x19, 0x08, 0x1c, 0x00, + 0xab, 0x7f, 0x42, 0x74, 0x00, 0x1c, 0x1c, 0x00, 0xad, 0x6d, 0xae, 0x5b, + 0xb0, 0x49, 0x42, 0x71, 0x00, 0x1b, 0x1c, 0x00, 0xb3, 0x37, 0xb4, 0x12, + 0x42, 0xf5, 0x0a, 0x1f, 0x1c, 0x00, 0x42, 0xa9, 0x01, 0x22, 0x1c, 0x00, + 0x42, 0xbc, 0x22, 0x1a, 0x1c, 0x40, 0xe1, 0x0a, 0x1c, 0x00, 0x42, 0x22, + 0x00, 0x0b, 0x1c, 0x00, 0xb3, 0x0d, 0xb4, 0x01, 0xff, 0xe1, 0x4d, 0x1c, + 0x00, 0x42, 0x22, 0x00, 0x4e, 0x1c, 0x40, 0xe1, 0x17, 0x1c, 0x00, 0x42, + 0x22, 0x00, 0x18, 0x1c, 0x40, 0xe1, 0x20, 0x1c, 0x00, 0x42, 0x22, 0x00, + 0x21, 0x1c, 0x40, 0xe1, 0x0e, 0x1c, 0x00, 0x42, 0x22, 0x00, 0x10, 0x1c, + 0x00, 0x42, 0x74, 0x00, 0x0f, 0x1c, 0x40, 0xe1, 0x0d, 0x1c, 0x00, 0x42, + 0x24, 0x02, 0x05, 0x1c, 0x00, 0x42, 0xbc, 0x22, 0x09, 0x1c, 0x40, 0xe1, + 0x15, 0x1c, 0x00, 0x42, 0x74, 0x00, 0x16, 0x1c, 0x40, 0xe1, 0x00, 0x1c, + 0x00, 0x42, 0x22, 0x00, 0x02, 0x1c, 0x00, 0x42, 0x74, 0x00, 0x01, 0x1c, + 0x40, 0xe1, 0x1d, 0x1c, 0x00, 0x42, 0x74, 0x00, 0x1e, 0x1c, 0x40, 0xe1, + 0x03, 0x1c, 0x00, 0x42, 0x74, 0x00, 0x04, 0x1c, 0x40, 0xe1, 0x11, 0x1c, + 0x00, 0x42, 0x74, 0x00, 0x12, 0x1c, 0x40, 0xe1, 0x0c, 0x1c, 0x00, 0x42, + 0xf0, 0x10, 0x4f, 0x1c, 0x00, 0x42, 0x59, 0x00, 0x19, 0x1c, 0x40, 0xe1, + 0x06, 0x1c, 0x00, 0x42, 0x22, 0x00, 0x07, 0x1c, 0x40, 0xe1, 0x13, 0x1c, + 0x00, 0x42, 0x74, 0x00, 0x14, 0x1c, 0x40, 0x45, 0x12, 0x0b, 0x48, 0x1c, + 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x49, 0x1c, 0x00, 0x43, 0x0e, 0x0b, + 0x41, 0x1c, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x40, 0x1c, + 0x40, 0x44, 0x25, 0x01, 0x43, 0x1c, 0x00, 0x42, 0x15, 0x02, 0x42, 0x1c, + 0x40, 0x44, 0xc9, 0x1d, 0x47, 0x1c, 0x00, 0x42, 0x01, 0x26, 0x46, 0x1c, + 0x40, 0x43, 0xd2, 0x05, 0x45, 0x1c, 0x00, 0x43, 0xf6, 0x06, 0x44, 0x1c, + 0x40, 0xeb, 0x2d, 0x1c, 0x80, 0x1f, 0xec, 0x2f, 0x1c, 0x00, 0xed, 0x2e, + 0x1c, 0x00, 0xee, 0x30, 0x1c, 0x80, 0x0c, 0xf0, 0x31, 0x1c, 0x00, 0xf2, + 0x32, 0x1c, 0x00, 0xf4, 0x33, 0x1c, 0x40, 0x46, 0x78, 0xe1, 0x34, 0x1c, + 0x40, 0x43, 0x1c, 0x01, 0x35, 0x1c, 0x40, 0x44, 0xf9, 0xf1, 0x06, 0xf4, + 0x41, 0x80, 0xaf, 0x08, 0x8d, 0xcc, 0x06, 0x06, 0xa9, 0x01, 0x01, 0xff, + 0x45, 0xce, 0x00, 0x90, 0x21, 0x80, 0xb1, 0x04, 0xa2, 0x92, 0x04, 0x50, + 0x86, 0x61, 0x3c, 0xf8, 0x01, 0xa4, 0xd2, 0x03, 0xa6, 0xc3, 0x03, 0xa8, + 0xc2, 0x02, 0x57, 0x6c, 0x2f, 0xa4, 0xf8, 0x01, 0x51, 0xf9, 0x5c, 0xfd, + 0x21, 0x00, 0xb0, 0xa7, 0x02, 0x4f, 0x0c, 0x72, 0x45, 0x2b, 0x00, 0xb2, + 0x92, 0x02, 0xb3, 0xf8, 0x01, 0xb4, 0x16, 0xb7, 0x01, 0xff, 0x49, 0x72, + 0xb6, 0x9c, 0x21, 0x00, 0x4a, 0x4a, 0x10, 0xe6, 0x21, 0xc0, 0x00, 0x5a, + 0xc6, 0x1e, 0x94, 0xf8, 0x41, 0x55, 0x52, 0x3d, 0xa2, 0xf8, 0x01, 0x02, + 0x0d, 0x00, 0x51, 0x02, 0x15, 0x02, 0x01, 0xff, 0x4d, 0x85, 0x7f, 0x9e, + 0x21, 0x00, 0x08, 0x09, 0x02, 0x01, 0xff, 0x06, 0xce, 0x00, 0x06, 0x51, + 0x91, 0x5e, 0x37, 0x2b, 0x40, 0x48, 0x57, 0xb4, 0x36, 0x2b, 0x00, 0x05, + 0x51, 0x00, 0x01, 0xff, 0x56, 0x95, 0x33, 0x35, 0x2b, 0x00, 0xb4, 0x06, + 0x4f, 0x9c, 0x33, 0x34, 0x2b, 0x40, 0x43, 0x90, 0x17, 0x3b, 0x2b, 0x80, + 0x06, 0x52, 0x2f, 0x06, 0xec, 0x2b, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, + 0x56, 0x95, 0x33, 0x3d, 0x2b, 0x00, 0x4f, 0x9c, 0x33, 0x3c, 0x2b, 0x40, + 0x05, 0x04, 0x02, 0x11, 0x04, 0x6d, 0x1d, 0x01, 0xff, 0x45, 0xce, 0x00, + 0xda, 0x21, 0x00, 0x4a, 0x98, 0x5e, 0x0e, 0x29, 0x40, 0x4a, 0xe0, 0x01, + 0x90, 0xf8, 0x01, 0x08, 0x09, 0x02, 0x01, 0xff, 0x45, 0xce, 0x00, 0x60, + 0x2b, 0x80, 0x0c, 0x4c, 0xc3, 0x8d, 0x6a, 0x2b, 0x00, 0x4d, 0x64, 0x87, + 0x84, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x65, 0x51, 0x08, 0x80, 0x2b, 0x00, + 0x46, 0xd1, 0x14, 0x70, 0x2b, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, + 0x53, 0xa8, 0x28, 0xf8, 0x01, 0x07, 0x3b, 0x01, 0x28, 0x4b, 0x6b, 0x68, + 0x2c, 0xf8, 0x01, 0x09, 0xaf, 0xbb, 0x12, 0x4c, 0xef, 0x91, 0x24, 0xf8, + 0x01, 0x4c, 0x5b, 0x92, 0x20, 0xf8, 0x01, 0x50, 0x66, 0x68, 0x30, 0xf8, + 0x41, 0x49, 0xa5, 0x01, 0xa6, 0x2b, 0x00, 0x47, 0x50, 0x02, 0xa4, 0x2b, + 0x40, 0x51, 0x47, 0x05, 0x7a, 0x2b, 0x00, 0x4f, 0x9c, 0x33, 0x7a, 0x2b, + 0x40, 0x4f, 0xe7, 0x66, 0x50, 0xf8, 0x01, 0x02, 0x7c, 0x00, 0x01, 0xff, + 0x4a, 0xe9, 0x93, 0x38, 0xf8, 0x01, 0x4b, 0x80, 0x7c, 0xdc, 0x21, 0x40, + 0x57, 0x10, 0x2f, 0xa6, 0xf8, 0x01, 0x45, 0x9d, 0xae, 0x6c, 0xf6, 0x41, + 0x4c, 0x65, 0x87, 0xc7, 0x21, 0x00, 0x4b, 0x84, 0xa4, 0xf7, 0xfa, 0x41, + 0xa1, 0x11, 0x05, 0x6e, 0x15, 0x01, 0xff, 0x45, 0xce, 0x00, 0x44, 0xf8, + 0x01, 0x50, 0x86, 0x61, 0x40, 0xf8, 0x41, 0x42, 0x1b, 0x00, 0xf2, 0xfa, + 0x01, 0x06, 0xcb, 0x02, 0x01, 0xff, 0x57, 0x0d, 0x30, 0xcb, 0x21, 0x00, + 0x0a, 0x98, 0x05, 0x01, 0xff, 0x04, 0xa5, 0x01, 0x31, 0x02, 0x50, 0x02, + 0x01, 0xff, 0x80, 0x06, 0x45, 0xa9, 0x01, 0xbc, 0x21, 0x40, 0x06, 0x5c, + 0x00, 0x0c, 0x48, 0x57, 0xb4, 0x5a, 0x29, 0x00, 0x46, 0xd1, 0x14, 0x52, + 0x29, 0x40, 0xac, 0x06, 0x5f, 0x8c, 0x11, 0x66, 0x29, 0x40, 0x5f, 0x48, + 0x06, 0x62, 0x29, 0x00, 0x48, 0x38, 0x6b, 0x6a, 0x29, 0x40, 0x80, 0x06, + 0x45, 0xa9, 0x01, 0xbd, 0x21, 0x40, 0x67, 0x7f, 0x05, 0x67, 0x29, 0x00, + 0x4f, 0x31, 0x6b, 0x6b, 0x29, 0x00, 0x48, 0x57, 0xb4, 0x5e, 0x29, 0x00, + 0x46, 0xd1, 0x14, 0x56, 0x29, 0x40, 0x50, 0xfd, 0x59, 0x34, 0xf8, 0x01, + 0x60, 0x34, 0x10, 0xaa, 0xf8, 0x41, 0x4b, 0xc4, 0x8d, 0xe0, 0x21, 0x00, + 0x06, 0x3c, 0x01, 0x01, 0xff, 0x45, 0xce, 0x00, 0xd0, 0x21, 0x80, 0x06, + 0x4a, 0x98, 0x5e, 0x0c, 0x29, 0x40, 0x80, 0x06, 0x45, 0x8e, 0x17, 0x1b, + 0x29, 0x40, 0x48, 0x57, 0xb4, 0x06, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x46, 0x52, 0x05, 0xcd, 0x21, 0x00, 0x4f, 0x9c, 0x33, 0x02, 0x29, + 0x40, 0x5f, 0xb3, 0x10, 0xa8, 0xf8, 0x01, 0x05, 0x0d, 0x03, 0x06, 0x58, + 0x7e, 0x2a, 0xa0, 0xf8, 0x41, 0x45, 0xce, 0x00, 0x05, 0x2b, 0x00, 0x53, + 0xd3, 0x48, 0x88, 0x2b, 0x40, 0x80, 0x06, 0x45, 0x8e, 0x17, 0x19, 0x29, + 0x40, 0xa1, 0xd7, 0x01, 0x05, 0xaa, 0x05, 0xbf, 0x01, 0x55, 0xbb, 0x14, + 0xc6, 0x21, 0x00, 0xb4, 0x8a, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, 0x02, + 0x3b, 0x01, 0x75, 0x55, 0xd5, 0x01, 0x14, 0xf8, 0x01, 0x44, 0xac, 0x0e, + 0xa9, 0x21, 0x00, 0xac, 0x5b, 0x59, 0xe3, 0x24, 0x04, 0xf8, 0x01, 0x4c, + 0xd3, 0x92, 0x98, 0xf8, 0x01, 0x4a, 0x83, 0xaf, 0x46, 0x29, 0x00, 0xb3, + 0x31, 0xb4, 0x06, 0x4f, 0x9c, 0x33, 0xf7, 0x21, 0x40, 0x43, 0x90, 0x17, + 0xa2, 0x21, 0x80, 0x11, 0x03, 0x4a, 0x0c, 0x01, 0xff, 0x49, 0xa5, 0x01, + 0x10, 0x2b, 0x00, 0x47, 0x50, 0x02, 0x11, 0x2b, 0x40, 0x06, 0x50, 0x00, + 0x01, 0xff, 0x56, 0x95, 0x33, 0x3a, 0x2b, 0x00, 0x4f, 0x9c, 0x33, 0x39, + 0x2b, 0x40, 0x05, 0x5e, 0x07, 0x06, 0x45, 0x53, 0x05, 0x9a, 0x21, 0x40, + 0x55, 0xd5, 0x01, 0x10, 0xf8, 0x01, 0x52, 0x2e, 0x06, 0x00, 0xf8, 0x41, + 0x57, 0x77, 0x29, 0x08, 0xf8, 0x01, 0x43, 0xca, 0x4b, 0xab, 0x21, 0x40, + 0x49, 0x14, 0xc0, 0x38, 0x2b, 0x00, 0x54, 0x97, 0x33, 0xfa, 0x21, 0x40, + 0x07, 0x16, 0x2b, 0x18, 0x03, 0xd2, 0x14, 0x01, 0xff, 0x42, 0x17, 0x00, + 0xe4, 0x21, 0x80, 0x06, 0x4c, 0x59, 0x57, 0x1d, 0x29, 0x40, 0x5d, 0xba, + 0x14, 0xb9, 0x21, 0x40, 0x49, 0xec, 0x00, 0x77, 0x29, 0x00, 0x46, 0x99, + 0x12, 0x7a, 0x29, 0x00, 0xf8, 0x3e, 0x2b, 0x40, 0x43, 0x16, 0x00, 0xa4, + 0x21, 0x80, 0x06, 0x4f, 0x34, 0x0c, 0xc0, 0xf8, 0x41, 0x51, 0x54, 0x57, + 0x1f, 0x29, 0x40, 0x05, 0x5d, 0x00, 0x06, 0x63, 0xfb, 0x0a, 0xb5, 0xfb, + 0x41, 0x4f, 0xaa, 0x6a, 0x4a, 0x2b, 0x00, 0x08, 0x66, 0x72, 0x0c, 0x56, + 0x31, 0x37, 0x43, 0x29, 0x00, 0x4e, 0x78, 0x3e, 0x73, 0x29, 0x40, 0x4f, + 0xaa, 0x6a, 0x42, 0x2b, 0x00, 0x4e, 0x78, 0x3e, 0x4b, 0x2b, 0x40, 0x07, + 0x6f, 0x2e, 0x9c, 0x01, 0x5b, 0x85, 0x1b, 0xe6, 0x26, 0x00, 0x09, 0x9c, + 0x01, 0x2b, 0xb3, 0x1d, 0x09, 0x51, 0x44, 0x01, 0xff, 0x49, 0x58, 0xb8, + 0x2a, 0x20, 0x00, 0x47, 0x5f, 0x03, 0x66, 0x20, 0x00, 0x44, 0xb9, 0x00, + 0x0e, 0x20, 0x00, 0x48, 0xb0, 0xc9, 0x2d, 0x20, 0x40, 0x5c, 0xde, 0x17, + 0xaa, 0x27, 0x00, 0x5b, 0xbb, 0x1b, 0x39, 0x29, 0x40, 0xa1, 0x53, 0x54, + 0x68, 0x41, 0xfc, 0x29, 0x00, 0xa4, 0x3f, 0x4b, 0xaa, 0x9b, 0x78, 0xcc, + 0x01, 0x50, 0xf6, 0x64, 0x0d, 0xf5, 0x01, 0xb2, 0x0c, 0x4c, 0x73, 0x95, + 0x02, 0xcc, 0x01, 0x44, 0x75, 0xc7, 0x9e, 0xcc, 0x41, 0x49, 0x9a, 0xb5, + 0x97, 0xcc, 0x01, 0x44, 0xc5, 0xac, 0x65, 0xcc, 0x01, 0xaf, 0x01, 0xff, + 0x05, 0x66, 0x09, 0x06, 0x50, 0xb6, 0x64, 0xa2, 0xcc, 0x41, 0x47, 0x9c, + 0xcf, 0xa0, 0xcc, 0x01, 0x44, 0x11, 0x21, 0x56, 0xcc, 0x41, 0x44, 0x9d, + 0xf0, 0x0e, 0xcc, 0x01, 0x5a, 0xb8, 0x21, 0xab, 0x00, 0x40, 0x47, 0x12, + 0x34, 0xf9, 0xcd, 0x01, 0x4c, 0x3f, 0x0f, 0x29, 0x23, 0x00, 0x4a, 0x03, + 0xb2, 0x60, 0xcc, 0x41, 0x56, 0xe5, 0x32, 0x8e, 0x05, 0x00, 0x48, 0xf0, + 0xc3, 0x48, 0xcc, 0x01, 0x03, 0x2a, 0x5b, 0x20, 0xb3, 0x01, 0xff, 0x0f, + 0x77, 0x2e, 0x0d, 0x4a, 0x2f, 0xb3, 0xd6, 0x0f, 0xc0, 0x00, 0x4a, 0x26, + 0x59, 0xd8, 0x0f, 0x40, 0x4c, 0x7b, 0x8d, 0x74, 0xcc, 0x01, 0x4a, 0x3c, + 0x29, 0x70, 0xcc, 0x41, 0xe8, 0x92, 0xcc, 0x81, 0x04, 0xf4, 0x1b, 0xf9, + 0x41, 0x50, 0x36, 0x29, 0x94, 0xcc, 0x41, 0xa1, 0xbd, 0x06, 0xa2, 0x84, + 0x06, 0xa3, 0xd3, 0x05, 0x02, 0x3b, 0x01, 0xab, 0x05, 0xa6, 0x94, 0x05, + 0x02, 0x22, 0x00, 0x86, 0x04, 0x15, 0x6b, 0x3c, 0xf5, 0x03, 0xac, 0xe6, + 0x03, 0x48, 0x5f, 0x77, 0xdc, 0x27, 0x00, 0x60, 0xd4, 0x0f, 0xc9, 0x22, + 0x00, 0xaf, 0xbb, 0x03, 0x4b, 0xd8, 0x21, 0x28, 0x00, 0x80, 0x9e, 0x03, + 0xb2, 0xaa, 0x02, 0xb3, 0xb0, 0x01, 0xb4, 0x49, 0x0a, 0x32, 0x00, 0x39, + 0xb7, 0x01, 0xff, 0x05, 0xae, 0x02, 0x0c, 0x4b, 0xf4, 0x96, 0xd8, 0x29, + 0x00, 0x4b, 0x32, 0xa2, 0x8e, 0xf5, 0x41, 0xa3, 0x18, 0x52, 0x6c, 0x27, + 0x16, 0x30, 0x00, 0x4b, 0xd8, 0x21, 0x85, 0x29, 0x00, 0x4e, 0xc8, 0x26, + 0x1a, 0x30, 0x00, 0x56, 0x54, 0x09, 0x18, 0x30, 0x40, 0x4d, 0x35, 0x69, + 0x0e, 0x30, 0x00, 0x4c, 0x73, 0x0b, 0x83, 0x29, 0x40, 0x4d, 0x96, 0x80, + 0x20, 0x2e, 0x00, 0x47, 0x65, 0xd4, 0xb8, 0x23, 0x40, 0x43, 0x0e, 0x03, + 0xa3, 0x22, 0x00, 0xa8, 0x25, 0x55, 0x55, 0x09, 0x14, 0x30, 0x00, 0xb2, + 0x06, 0x4f, 0xeb, 0x74, 0xce, 0xfb, 0x41, 0x53, 0x15, 0x48, 0x09, 0x2e, + 0x00, 0x04, 0x1b, 0x01, 0x01, 0xff, 0x56, 0x21, 0x35, 0xcf, 0x29, 0x00, + 0x56, 0x3a, 0x1d, 0x6c, 0xfb, 0x41, 0x04, 0x3a, 0x89, 0x28, 0x4c, 0x87, + 0x93, 0xec, 0xf5, 0x01, 0x04, 0x26, 0x01, 0x01, 0xff, 0x4d, 0x01, 0x4d, + 0x8d, 0x25, 0x00, 0x09, 0x2a, 0x01, 0x01, 0xff, 0x45, 0x33, 0x01, 0x8a, + 0x25, 0x00, 0x57, 0x83, 0x2f, 0xa2, 0xce, 0x01, 0x57, 0x94, 0x31, 0xa9, + 0xce, 0x41, 0x48, 0x08, 0xc7, 0x0b, 0xcc, 0x01, 0x5a, 0x88, 0x22, 0xc1, + 0xfb, 0x41, 0x55, 0xcf, 0x38, 0xc5, 0x27, 0x00, 0xa5, 0x63, 0xa9, 0x55, + 0x4c, 0x70, 0x7c, 0xe8, 0xf5, 0x01, 0x4d, 0xc9, 0x26, 0x5b, 0x00, 0x80, + 0x06, 0x53, 0xab, 0x26, 0x02, 0x2e, 0x40, 0x80, 0x01, 0xff, 0x49, 0xc1, + 0x58, 0xa2, 0x23, 0x00, 0x4c, 0x6b, 0x91, 0xa3, 0x23, 0x00, 0x4c, 0x87, + 0x96, 0xa1, 0x23, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4d, 0x36, 0x82, + 0x57, 0x2e, 0x00, 0x45, 0x9e, 0x80, 0x45, 0x20, 0x00, 0x46, 0x52, 0x05, + 0x55, 0x2e, 0x00, 0x08, 0x90, 0xcb, 0x06, 0x48, 0xe3, 0x59, 0x8b, 0x29, + 0x40, 0x4d, 0x32, 0x81, 0x8f, 0x29, 0x00, 0x4a, 0x0d, 0xb2, 0x8d, 0x29, + 0x40, 0x50, 0xd6, 0x61, 0x26, 0x2e, 0x00, 0x53, 0x97, 0x0b, 0x18, 0x20, + 0x40, 0x50, 0xe4, 0x0f, 0xcb, 0x22, 0x00, 0x51, 0xfd, 0x4c, 0x89, 0x25, + 0x40, 0x56, 0x81, 0x30, 0x0c, 0x2e, 0x00, 0x05, 0xc9, 0x00, 0x01, 0xff, + 0x45, 0xce, 0x00, 0x94, 0x21, 0x80, 0x3f, 0x4b, 0xa5, 0x99, 0x0c, 0x2b, + 0x00, 0x4c, 0x2f, 0x8e, 0xd4, 0x21, 0x80, 0x21, 0x51, 0xf9, 0x5c, 0xff, + 0x21, 0x00, 0x50, 0xe6, 0x66, 0x58, 0xf8, 0x01, 0x55, 0x01, 0x02, 0x64, + 0x2b, 0x00, 0xb7, 0x01, 0xff, 0x49, 0x72, 0xb6, 0xad, 0x21, 0x00, 0x4a, + 0x4a, 0x10, 0x04, 0x2b, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x52, + 0x05, 0xce, 0x21, 0x00, 0x4f, 0x9c, 0x33, 0x04, 0x29, 0x40, 0x80, 0x01, + 0xff, 0x54, 0x18, 0x46, 0x48, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, + 0x56, 0x95, 0x33, 0xfc, 0x21, 0x00, 0x46, 0x52, 0x05, 0xae, 0x21, 0x00, + 0x4f, 0x9c, 0x33, 0xf9, 0x21, 0x40, 0x80, 0x01, 0xff, 0x49, 0xc1, 0x58, + 0x9c, 0x23, 0x00, 0x4a, 0x67, 0xad, 0x9d, 0x23, 0x00, 0x4a, 0xdf, 0xb2, + 0x9b, 0x23, 0x40, 0x03, 0xef, 0x07, 0x06, 0x49, 0x52, 0xaf, 0xd5, 0x27, + 0x40, 0x4c, 0x12, 0x0b, 0x8f, 0x25, 0x00, 0x4d, 0x43, 0x1d, 0x8e, 0x25, + 0x00, 0x4b, 0x66, 0xa3, 0xcf, 0xfb, 0x41, 0x55, 0x90, 0x35, 0x1c, 0x2e, + 0x00, 0x46, 0xee, 0xe0, 0xc5, 0xf6, 0x41, 0x4c, 0x0c, 0x03, 0xeb, 0xfb, + 0x01, 0x4c, 0x32, 0x11, 0xe3, 0xfb, 0x41, 0x03, 0x24, 0x00, 0x06, 0x55, + 0x13, 0x3d, 0x7b, 0xf5, 0x41, 0x02, 0x33, 0x01, 0x65, 0x46, 0x12, 0x03, + 0x07, 0xf9, 0x81, 0x3e, 0xa6, 0x30, 0x65, 0xe2, 0x07, 0x10, 0xce, 0x01, + 0x69, 0x3c, 0x04, 0x94, 0xfb, 0x01, 0x57, 0x83, 0x2f, 0xa3, 0xce, 0x01, + 0x4c, 0x44, 0x04, 0x8c, 0xfb, 0x01, 0x4b, 0x69, 0xa2, 0xb2, 0xfb, 0x01, + 0x56, 0x73, 0x37, 0x0d, 0xce, 0x01, 0x57, 0x94, 0x31, 0xa8, 0xce, 0x01, + 0x4d, 0x97, 0x8a, 0x0b, 0xce, 0x41, 0x4c, 0x9b, 0x91, 0xa4, 0xcc, 0x01, + 0x45, 0xcc, 0x65, 0xb9, 0xfb, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x43, + 0x23, 0x0a, 0x06, 0xf9, 0x01, 0x49, 0xd1, 0x46, 0x03, 0xf9, 0x01, 0xb4, + 0x01, 0xff, 0x49, 0x2b, 0x10, 0x04, 0xf9, 0x01, 0x47, 0x20, 0x0a, 0x05, + 0xf9, 0x41, 0x04, 0x0e, 0x03, 0x06, 0x43, 0x35, 0x01, 0x8c, 0x25, 0x40, + 0x46, 0x12, 0x03, 0xd6, 0x25, 0x00, 0x44, 0x31, 0x13, 0xe8, 0x2b, 0x40, + 0xa9, 0x06, 0x44, 0x59, 0x24, 0x0a, 0x23, 0x40, 0x47, 0xfc, 0xb8, 0x7c, + 0x29, 0x00, 0x50, 0xab, 0x51, 0x8b, 0x25, 0x40, 0x59, 0xa5, 0x26, 0x04, + 0x2e, 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x4d, 0x3e, 0x0f, 0x0a, 0x30, + 0x00, 0x4b, 0xd8, 0x21, 0x28, 0x2e, 0x00, 0x4e, 0x19, 0x05, 0x1c, 0x20, + 0x00, 0x4c, 0xf3, 0x96, 0xda, 0x29, 0x40, 0x46, 0x91, 0xc4, 0x08, 0x23, + 0x00, 0x4b, 0xd8, 0x9e, 0xdc, 0x26, 0x00, 0x4d, 0x35, 0x69, 0x0c, 0x30, + 0x00, 0x4c, 0x73, 0x0b, 0x7b, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, + 0x67, 0xad, 0xa9, 0x23, 0x00, 0x4c, 0x07, 0x92, 0xa8, 0x23, 0x00, 0x4a, + 0xdf, 0xb2, 0xa7, 0x23, 0x40, 0x04, 0x9e, 0x05, 0x11, 0x05, 0x0d, 0x03, + 0x01, 0xff, 0x52, 0x6c, 0x27, 0x10, 0x30, 0x00, 0x56, 0x54, 0x09, 0x97, + 0x29, 0x40, 0x10, 0x56, 0x62, 0x11, 0x0e, 0x13, 0x7e, 0x01, 0xff, 0x4c, + 0x3b, 0x8e, 0x4a, 0x29, 0x00, 0x4a, 0xc1, 0xb2, 0x4e, 0x29, 0x40, 0x4c, + 0x3b, 0x8e, 0x50, 0x29, 0x00, 0x4a, 0xc1, 0xb2, 0x4b, 0x29, 0x40, 0xae, + 0x1a, 0xb2, 0x01, 0xff, 0x53, 0x58, 0x1d, 0x93, 0x29, 0x00, 0x09, 0x25, + 0x06, 0x01, 0xff, 0x4c, 0x57, 0x8d, 0x32, 0x2b, 0x00, 0x4c, 0x3f, 0x15, + 0x30, 0x2b, 0x40, 0x02, 0x06, 0x00, 0x16, 0xa7, 0x01, 0xff, 0x49, 0x7c, + 0xb8, 0xee, 0xf5, 0x01, 0x4a, 0x41, 0x0f, 0x08, 0x30, 0xc0, 0x00, 0x49, + 0x75, 0x3b, 0x91, 0x29, 0x40, 0x06, 0x13, 0x01, 0x31, 0x06, 0xc8, 0x00, + 0x18, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x69, 0x13, 0x04, 0x6b, 0xfb, 0x01, + 0x50, 0x0e, 0x0b, 0x7d, 0xfb, 0xc1, 0x00, 0x5e, 0x27, 0x12, 0x8e, 0xcc, + 0x41, 0x50, 0x36, 0x62, 0xda, 0x27, 0x00, 0xb4, 0x01, 0xff, 0x43, 0x0e, + 0x03, 0xdb, 0x27, 0x00, 0x54, 0xa3, 0x3e, 0x9b, 0xfb, 0x41, 0x69, 0x13, + 0x04, 0x69, 0xfb, 0x01, 0x50, 0x0e, 0x0b, 0x7c, 0xfb, 0x41, 0x53, 0x6a, + 0x47, 0x43, 0xf3, 0x01, 0x49, 0x5e, 0xbb, 0xbe, 0xfa, 0x01, 0x47, 0xb4, + 0xd7, 0x6c, 0xf9, 0x41, 0xa2, 0xdd, 0x4b, 0x55, 0xe0, 0x39, 0x4d, 0xf9, + 0x01, 0xa4, 0xc8, 0x4b, 0xae, 0xb9, 0x4b, 0x02, 0x7b, 0x02, 0xdd, 0x46, + 0xb2, 0xda, 0x41, 0x4f, 0x38, 0x73, 0x3e, 0x26, 0x80, 0xc3, 0x41, 0x04, + 0xe0, 0x05, 0x01, 0xff, 0xa3, 0xd3, 0x28, 0x12, 0x61, 0x51, 0xa8, 0x28, + 0x07, 0xec, 0x05, 0x87, 0x25, 0xb3, 0x01, 0xff, 0x05, 0x5e, 0x07, 0x50, + 0x16, 0xb5, 0x37, 0x01, 0xff, 0xe1, 0x90, 0x20, 0x00, 0xe5, 0x91, 0x20, + 0x00, 0xe8, 0x95, 0x20, 0x00, 0xe9, 0x62, 0x1d, 0x00, 0xea, 0x7c, 0x2c, + 0x00, 0xeb, 0x96, 0x20, 0x00, 0xec, 0x97, 0x20, 0x00, 0xed, 0x98, 0x20, + 0x00, 0xee, 0x99, 0x20, 0x00, 0xef, 0x92, 0x20, 0x00, 0xf0, 0x9a, 0x20, + 0x00, 0xf2, 0x63, 0x1d, 0x00, 0xf3, 0x9b, 0x20, 0x80, 0x10, 0xf4, 0x9c, + 0x20, 0x00, 0xf5, 0x64, 0x1d, 0x00, 0xf6, 0x65, 0x1d, 0x00, 0xf8, 0x93, + 0x20, 0x40, 0x44, 0xb5, 0x7b, 0x94, 0x20, 0x40, 0x0f, 0xe4, 0x05, 0x9f, + 0x24, 0xac, 0x01, 0xff, 0x06, 0xed, 0x05, 0x34, 0x08, 0x9d, 0x1f, 0x01, + 0xff, 0xa6, 0x18, 0x42, 0x5f, 0xc7, 0x33, 0x01, 0x00, 0x48, 0xe8, 0xc7, + 0x05, 0xfb, 0x00, 0x42, 0x60, 0x51, 0x53, 0x01, 0x00, 0x42, 0x60, 0x01, + 0x06, 0xfb, 0x40, 0xe6, 0x00, 0xfb, 0x80, 0x08, 0xe9, 0x01, 0xfb, 0x00, + 0xec, 0x02, 0xfb, 0x40, 0xe9, 0x03, 0xfb, 0x00, 0xec, 0x04, 0xfb, 0x40, + 0xe1, 0x61, 0x00, 0x80, 0xa7, 0x21, 0xe2, 0x62, 0x00, 0x80, 0xa4, 0x20, + 0xe3, 0x63, 0x00, 0x80, 0x86, 0x1f, 0xe4, 0x64, 0x00, 0x80, 0x81, 0x1d, + 0xe5, 0x65, 0x00, 0x80, 0x9b, 0x1a, 0xe6, 0x66, 0x00, 0x80, 0xe6, 0x19, + 0xe7, 0x67, 0x00, 0x80, 0xf5, 0x18, 0xe8, 0x68, 0x00, 0x80, 0x83, 0x18, + 0xe9, 0x69, 0x00, 0x80, 0xbb, 0x16, 0xea, 0x6a, 0x00, 0x80, 0x96, 0x16, + 0xeb, 0x6b, 0x00, 0x80, 0xb9, 0x15, 0xec, 0x6c, 0x00, 0x80, 0xad, 0x13, + 0xed, 0x6d, 0x00, 0x80, 0xd6, 0x12, 0xee, 0x6e, 0x00, 0x80, 0xb8, 0x11, + 0xef, 0x6f, 0x00, 0x80, 0xc8, 0x0e, 0xf0, 0x70, 0x00, 0x80, 0xf7, 0x0d, + 0xf1, 0x71, 0x00, 0x80, 0xce, 0x0d, 0xf2, 0x72, 0x00, 0x80, 0xc9, 0x0b, + 0xf3, 0x73, 0x00, 0x80, 0xb7, 0x09, 0xf4, 0x74, 0x00, 0x80, 0xe2, 0x05, + 0xf5, 0x75, 0x00, 0x80, 0xb4, 0x03, 0xf6, 0x76, 0x00, 0x80, 0xd8, 0x02, + 0xf7, 0x77, 0x00, 0x80, 0x96, 0x02, 0xf8, 0x78, 0x00, 0x80, 0xd7, 0x01, + 0xf9, 0x79, 0x00, 0x80, 0x6a, 0xfa, 0x7a, 0x00, 0xc0, 0x00, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0x7a, 0x01, 0x00, 0xa3, 0x46, 0xa4, + 0x2d, 0x44, 0xac, 0x0e, 0x25, 0x02, 0x00, 0x4a, 0x9d, 0x6d, 0x95, 0x1e, + 0x00, 0x4c, 0x2e, 0x23, 0x76, 0x1d, 0x00, 0x4c, 0xf3, 0x56, 0x8e, 0x1d, + 0x00, 0x4e, 0xa2, 0x0e, 0x90, 0x02, 0x00, 0xb3, 0x01, 0xff, 0x45, 0x53, + 0x05, 0xb6, 0x01, 0x00, 0x49, 0x3d, 0xc1, 0x40, 0x02, 0x40, 0x48, 0x1e, + 0x2b, 0x6c, 0x2c, 0x00, 0x03, 0x04, 0x0c, 0x01, 0xff, 0x45, 0x5c, 0x00, + 0x7c, 0x01, 0x00, 0x45, 0x20, 0x07, 0x93, 0x1e, 0x40, 0x44, 0xe7, 0x6c, + 0x7e, 0x01, 0x00, 0x49, 0xd0, 0x04, 0x91, 0x1e, 0x00, 0x43, 0x73, 0x0b, + 0x91, 0x02, 0x40, 0x06, 0x50, 0x00, 0x06, 0x43, 0x25, 0x52, 0x1d, 0x02, + 0x40, 0x45, 0xf9, 0x38, 0xfd, 0x00, 0x00, 0x4a, 0xcf, 0x04, 0x77, 0x01, + 0x00, 0xa4, 0x39, 0x45, 0x15, 0x23, 0xf3, 0x1e, 0x00, 0x44, 0xac, 0x0e, + 0xb4, 0x01, 0x80, 0x26, 0x44, 0x42, 0x85, 0xff, 0x1e, 0x00, 0x46, 0xad, + 0x70, 0x33, 0x02, 0x00, 0x4a, 0x5f, 0xb0, 0x99, 0x1e, 0x00, 0xb3, 0x06, + 0x45, 0x35, 0x23, 0xf9, 0x1e, 0x40, 0x4e, 0x97, 0x38, 0x5a, 0xab, 0x00, + 0x45, 0x53, 0x05, 0x4f, 0x02, 0x40, 0x46, 0x5b, 0x00, 0xf7, 0x1e, 0x40, + 0x48, 0xb8, 0x23, 0xff, 0x00, 0x00, 0x03, 0x04, 0x0c, 0x01, 0xff, 0x45, + 0x5c, 0x00, 0x8f, 0x1e, 0x00, 0x45, 0x20, 0x07, 0xf5, 0x1e, 0x40, 0x06, + 0x50, 0x00, 0x01, 0xff, 0xa4, 0x26, 0x02, 0x13, 0x01, 0x06, 0x4c, 0xf3, + 0x56, 0x8d, 0x1d, 0x40, 0x4b, 0x0c, 0xa0, 0x57, 0xab, 0x80, 0x06, 0x4c, + 0x23, 0x50, 0x56, 0xab, 0x40, 0x80, 0x01, 0xff, 0x52, 0x1d, 0x50, 0x58, + 0xab, 0x00, 0x4a, 0x53, 0x29, 0x59, 0xab, 0x40, 0x48, 0xb8, 0x23, 0x8d, + 0x1e, 0x00, 0x48, 0x3b, 0x1e, 0x8b, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x01, + 0xff, 0x45, 0xf9, 0x38, 0x83, 0x1e, 0x00, 0x4a, 0xcf, 0x04, 0x75, 0x01, + 0x00, 0xa4, 0x12, 0x45, 0x15, 0x23, 0x81, 0x1e, 0x00, 0x44, 0xac, 0x0e, + 0x73, 0x2c, 0x00, 0x4a, 0x5f, 0xb0, 0x98, 0x1e, 0x40, 0x48, 0xb8, 0x23, + 0x85, 0x1e, 0x00, 0x03, 0x04, 0x0c, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x87, + 0x1e, 0x00, 0x45, 0x20, 0x07, 0x89, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x26, + 0x43, 0x40, 0x05, 0x69, 0xa7, 0x00, 0x4b, 0xba, 0x9d, 0x63, 0xa7, 0x00, + 0x07, 0xd2, 0xd3, 0x04, 0xf9, 0x61, 0xa7, 0x40, 0x42, 0x93, 0x0f, 0x9b, + 0xa7, 0x00, 0x42, 0x60, 0x51, 0x9d, 0xa7, 0x00, 0x42, 0xd6, 0x13, 0x9f, + 0xa7, 0x40, 0x44, 0x72, 0x0b, 0x74, 0x2c, 0x00, 0xa4, 0x18, 0x44, 0xac, + 0x0e, 0x8b, 0x02, 0x00, 0x4c, 0xf3, 0x56, 0x8c, 0x1d, 0x00, 0x4a, 0x4b, + 0xb0, 0x71, 0x2c, 0x00, 0x45, 0x35, 0x23, 0x7d, 0x1e, 0x40, 0x4e, 0x8e, + 0x3f, 0x5f, 0xa7, 0x00, 0x48, 0xa0, 0x12, 0x7f, 0x1e, 0x40, 0x80, 0x1d, + 0xe5, 0x6b, 0x1d, 0x00, 0xe9, 0x50, 0xab, 0x00, 0xed, 0x78, 0xa7, 0x00, + 0xef, 0x63, 0xab, 0x00, 0x46, 0xcf, 0x15, 0x8a, 0x02, 0xc0, 0x00, 0x4c, + 0xda, 0x28, 0x7f, 0x1d, 0x40, 0x43, 0x16, 0x00, 0x89, 0x02, 0x80, 0xfb, + 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0xfa, 0x00, 0x00, + 0x45, 0x53, 0x23, 0x6d, 0x01, 0x00, 0xa3, 0xd4, 0x01, 0xa4, 0x8b, 0x01, + 0x45, 0x15, 0x23, 0xf9, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x51, 0x4e, 0x5e, + 0x23, 0x17, 0x02, 0x00, 0x49, 0xb1, 0x57, 0x52, 0xab, 0x00, 0x46, 0xad, + 0x70, 0x6b, 0x01, 0x80, 0x38, 0x46, 0xba, 0xde, 0x73, 0x01, 0x00, 0xb2, + 0x24, 0xb3, 0x16, 0x45, 0x35, 0x23, 0x69, 0x01, 0xc0, 0x00, 0x80, 0x01, + 0xff, 0x49, 0x98, 0xa5, 0x79, 0x1e, 0x00, 0x45, 0x20, 0x07, 0x75, 0x1e, + 0x40, 0x4e, 0x97, 0x38, 0x4e, 0xab, 0x00, 0x45, 0x53, 0x05, 0xb9, 0xa7, + 0x40, 0x4d, 0xa3, 0x0e, 0x99, 0x1d, 0x00, 0x49, 0x60, 0xb0, 0x6f, 0x01, + 0x40, 0x4e, 0x45, 0x75, 0x7b, 0x1e, 0x40, 0x48, 0x39, 0xab, 0xe7, 0x1e, + 0x00, 0x42, 0x5e, 0x01, 0xb0, 0x01, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, + 0xff, 0x45, 0xf9, 0x38, 0xe9, 0x1e, 0x00, 0x49, 0x9f, 0x12, 0xf1, 0x1e, + 0x00, 0x45, 0x15, 0x23, 0xeb, 0x1e, 0x00, 0x4a, 0x37, 0xab, 0xed, 0x1e, + 0x00, 0x45, 0x35, 0x23, 0xef, 0x1e, 0x40, 0x48, 0xb8, 0x23, 0xfc, 0x00, + 0x80, 0x1a, 0xaf, 0x01, 0xff, 0x47, 0xa1, 0x12, 0xe5, 0x1e, 0x00, 0x05, + 0x3d, 0x01, 0x01, 0xff, 0x45, 0xf9, 0x38, 0x71, 0x01, 0x00, 0x45, 0x15, + 0x23, 0x15, 0x02, 0x40, 0x80, 0x01, 0xff, 0x04, 0x1a, 0x00, 0x06, 0x45, + 0x20, 0x07, 0x73, 0x1e, 0x40, 0x45, 0xf9, 0x38, 0xd8, 0x01, 0x00, 0x45, + 0xe8, 0x97, 0xda, 0x01, 0x00, 0x45, 0x15, 0x23, 0xdc, 0x01, 0x00, 0x46, + 0xad, 0x70, 0xd6, 0x01, 0x40, 0x44, 0xe7, 0x6c, 0xd4, 0x01, 0x00, 0x49, + 0xd0, 0x04, 0xfb, 0x00, 0xc0, 0x00, 0x46, 0x1f, 0x07, 0x77, 0x1e, 0x40, + 0x55, 0x90, 0x38, 0x4f, 0xab, 0x40, 0x06, 0x50, 0x00, 0xd2, 0x02, 0x4b, + 0x00, 0x99, 0x77, 0x2c, 0x00, 0x53, 0xad, 0x48, 0xa8, 0x02, 0x00, 0x4b, + 0xec, 0x9b, 0xa7, 0x02, 0x80, 0xad, 0x02, 0xa8, 0x90, 0x02, 0xaf, 0xf1, + 0x01, 0x47, 0x53, 0xd5, 0x2b, 0xa7, 0x00, 0x49, 0x18, 0xbf, 0xa6, 0x02, + 0x80, 0xdd, 0x01, 0xb5, 0x04, 0xfa, 0x29, 0xa7, 0x40, 0xed, 0x77, 0xa7, + 0x00, 0x05, 0x72, 0x07, 0x01, 0xff, 0xe1, 0x50, 0x02, 0x80, 0xbe, 0x01, + 0x45, 0x7e, 0xe5, 0x8d, 0x01, 0x00, 0xe5, 0xdd, 0x01, 0x00, 0xe7, 0x77, + 0x1d, 0x00, 0xe8, 0x65, 0x02, 0x80, 0x9d, 0x01, 0xe9, 0x09, 0x1d, 0x80, + 0x91, 0x01, 0xeb, 0x9e, 0x02, 0x00, 0xec, 0x81, 0xa7, 0x00, 0xed, 0x6f, + 0x02, 0x80, 0x7e, 0xaf, 0x53, 0xf2, 0x79, 0x02, 0x80, 0x24, 0xf4, 0x87, + 0x02, 0x80, 0x19, 0x42, 0x3e, 0x00, 0x51, 0xab, 0x00, 0xf6, 0x8c, 0x02, + 0x00, 0xf7, 0x8d, 0x02, 0x00, 0xf9, 0x8e, 0x02, 0xc0, 0x00, 0x4a, 0x55, + 0xa6, 0x06, 0xdf, 0x41, 0x4a, 0xb6, 0x48, 0x0d, 0xdf, 0x41, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x44, 0xac, 0x0e, 0x7b, 0x02, 0x00, 0x48, 0x91, 0x75, + 0x7a, 0x02, 0x80, 0x12, 0x4c, 0x2e, 0x23, 0x68, 0xab, 0x00, 0x4c, 0xf3, + 0x56, 0x15, 0xdf, 0x01, 0x44, 0x8f, 0x17, 0x79, 0x2c, 0x40, 0x53, 0x57, + 0x47, 0x08, 0xdf, 0x41, 0x47, 0x73, 0xcd, 0x43, 0xab, 0x80, 0x1c, 0xe5, + 0x14, 0x1d, 0x80, 0x06, 0x45, 0x1f, 0x29, 0x08, 0x1d, 0x40, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x51, 0x47, 0x05, 0x42, 0xab, 0x00, 0x46, 0x52, 0x05, + 0x41, 0xab, 0x40, 0x4c, 0xda, 0x28, 0x44, 0xab, 0x40, 0x4e, 0x8b, 0x75, + 0x70, 0x02, 0x40, 0x48, 0x15, 0x70, 0x7f, 0xa7, 0x40, 0x4e, 0x2b, 0x72, + 0xae, 0x02, 0xc0, 0x00, 0x49, 0x3b, 0xb4, 0xaf, 0x02, 0x40, 0xe5, 0x02, + 0x1d, 0x00, 0x44, 0x3f, 0xe4, 0x52, 0x02, 0x40, 0x54, 0x9c, 0x0e, 0x67, + 0xab, 0x40, 0x03, 0xef, 0x07, 0x06, 0x48, 0x57, 0xbd, 0x16, 0x1d, 0x40, + 0x44, 0x80, 0x11, 0xbd, 0x01, 0x00, 0x43, 0x00, 0x26, 0x85, 0x01, 0x00, + 0x43, 0x1f, 0x0a, 0xa8, 0x01, 0x40, 0x53, 0xb6, 0x47, 0x7a, 0x1d, 0x00, + 0x43, 0x28, 0x05, 0xfe, 0x00, 0xc0, 0x00, 0x4c, 0xda, 0x28, 0x65, 0xa7, + 0xc0, 0x00, 0x52, 0x14, 0x2b, 0x67, 0xa7, 0x40, 0x06, 0x50, 0x00, 0x01, + 0xff, 0x4c, 0xf3, 0x56, 0x17, 0xdf, 0x01, 0x4e, 0xa2, 0x0e, 0x1c, 0xdf, + 0x41, 0xa3, 0x58, 0xa4, 0x35, 0x44, 0xac, 0x0e, 0xad, 0x01, 0x80, 0x28, + 0x4a, 0x9d, 0x6d, 0x6f, 0x1e, 0x00, 0x03, 0x7d, 0x02, 0x12, 0x4c, 0xf3, + 0x56, 0xab, 0x01, 0x00, 0x4e, 0xa2, 0x0e, 0x88, 0x02, 0x00, 0x46, 0x52, + 0x05, 0x67, 0x01, 0x40, 0x51, 0xa9, 0x57, 0x2a, 0xdf, 0x01, 0x49, 0x31, + 0x23, 0x75, 0x1d, 0x40, 0x53, 0x57, 0x47, 0x09, 0xdf, 0x41, 0x02, 0x1b, + 0x01, 0x11, 0x03, 0x04, 0x0c, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x6b, 0x1e, + 0x00, 0x45, 0x20, 0x07, 0x6d, 0x1e, 0x40, 0x46, 0xba, 0x23, 0x97, 0x1e, + 0x00, 0x4c, 0x90, 0x3f, 0x66, 0x2c, 0x40, 0x44, 0xe7, 0x6c, 0x65, 0x01, + 0x00, 0x46, 0xfa, 0xc1, 0x63, 0x01, 0x00, 0x4f, 0xf1, 0x6e, 0x71, 0x1e, + 0x00, 0x4a, 0xc5, 0xae, 0x1b, 0x02, 0x00, 0x43, 0x73, 0x0b, 0x36, 0x02, + 0x40, 0x06, 0x50, 0x00, 0x82, 0x01, 0xa1, 0x74, 0xa3, 0x3f, 0x46, 0xf6, + 0xb0, 0xdf, 0x00, 0x00, 0xa9, 0x0c, 0x51, 0x70, 0x5d, 0x85, 0x02, 0x00, + 0x48, 0x98, 0xcb, 0x45, 0xab, 0x40, 0x07, 0xf2, 0x45, 0x06, 0x47, 0xf1, + 0xc6, 0xd9, 0xa7, 0x40, 0x4d, 0xe8, 0x81, 0x1e, 0x1d, 0x00, 0xef, 0x11, + 0x1d, 0x80, 0x0a, 0x48, 0xd8, 0xcb, 0x1f, 0x1d, 0x00, 0xf5, 0x1d, 0x1d, + 0x40, 0x4c, 0xda, 0x28, 0x13, 0x1d, 0x00, 0x45, 0xd4, 0xe9, 0x12, 0x1d, + 0x40, 0x43, 0xb6, 0x7b, 0x59, 0x02, 0x80, 0x1b, 0x05, 0x76, 0x06, 0x01, + 0xff, 0xe7, 0x61, 0x02, 0x80, 0x0b, 0xf2, 0x4b, 0xab, 0xc0, 0x00, 0x4a, + 0x91, 0xa6, 0x4c, 0xab, 0x40, 0x52, 0xc3, 0x4f, 0x36, 0xab, 0x40, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x44, 0xac, 0x0e, 0x5a, 0x02, 0x00, 0x4e, 0xa2, + 0x0e, 0x95, 0x1d, 0x40, 0x47, 0x5f, 0xd2, 0x60, 0xab, 0x00, 0x46, 0xb6, + 0xce, 0x8c, 0xa7, 0x40, 0x45, 0xf9, 0x38, 0x5b, 0x01, 0x80, 0x78, 0xa3, + 0x51, 0xa4, 0x31, 0x44, 0xac, 0x0e, 0x82, 0x02, 0x00, 0x03, 0x7d, 0x02, + 0x1b, 0x4e, 0x4e, 0x43, 0xa9, 0xa7, 0x00, 0x4c, 0xf3, 0x56, 0x8a, 0x1d, + 0x00, 0xb3, 0x01, 0xff, 0x53, 0xf0, 0x49, 0xca, 0xa7, 0x00, 0x49, 0x3d, + 0xc1, 0x3f, 0x02, 0x40, 0x51, 0xa9, 0x57, 0x29, 0xdf, 0x01, 0x49, 0x31, + 0x23, 0x74, 0x1d, 0x40, 0x4e, 0x8e, 0x3f, 0xcd, 0xa7, 0x00, 0x03, 0x04, + 0x0c, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x61, 0x1e, 0x00, 0x45, 0x20, 0x07, + 0x63, 0x1e, 0xc0, 0x00, 0x4e, 0x35, 0x1e, 0x69, 0x1e, 0x40, 0x44, 0xe7, + 0x6c, 0x61, 0x01, 0x80, 0x18, 0x46, 0xfa, 0xc1, 0x5f, 0x01, 0x00, 0x49, + 0xd0, 0x04, 0x5d, 0x01, 0x00, 0x4a, 0xc5, 0xae, 0x19, 0x02, 0x00, 0x43, + 0x73, 0x0b, 0x1e, 0xdf, 0x41, 0x4e, 0x35, 0x1e, 0x67, 0x1e, 0x40, 0x4e, + 0x35, 0x1e, 0x65, 0x1e, 0x40, 0x80, 0x5b, 0x48, 0x48, 0xc3, 0x64, 0x02, + 0x00, 0x08, 0xde, 0x14, 0x0d, 0x42, 0x48, 0x04, 0x75, 0xa7, 0xc0, 0x00, + 0x48, 0x9b, 0xb2, 0x5d, 0xa7, 0x40, 0xe3, 0x84, 0x21, 0x80, 0x39, 0xe5, + 0x58, 0x02, 0x80, 0x2e, 0x46, 0x3e, 0xdc, 0xf6, 0xa7, 0x00, 0xeb, 0x03, + 0xdf, 0x01, 0x46, 0x1e, 0x29, 0x5c, 0x02, 0x80, 0x0c, 0x4f, 0x2a, 0x72, + 0x7f, 0x02, 0x00, 0x48, 0xb0, 0xca, 0x01, 0xdf, 0x41, 0x06, 0x50, 0x00, + 0x01, 0xff, 0x44, 0xac, 0x0e, 0x5d, 0x02, 0x00, 0x4e, 0xa2, 0x0e, 0x94, + 0x1d, 0x40, 0x42, 0x1d, 0x01, 0x07, 0xdf, 0x41, 0x49, 0x75, 0x3b, 0x3f, + 0xa7, 0x40, 0x47, 0x9c, 0xb2, 0x5b, 0xa7, 0x00, 0x04, 0x51, 0x00, 0x01, + 0xff, 0x80, 0x06, 0x4a, 0xfd, 0x50, 0x47, 0xab, 0x40, 0x45, 0xf9, 0x38, + 0x55, 0x01, 0x00, 0xa3, 0x75, 0x02, 0x3b, 0x01, 0x54, 0x48, 0x31, 0x72, + 0x7e, 0x02, 0x80, 0x3c, 0x4e, 0x5e, 0x23, 0x13, 0x02, 0x00, 0xac, 0x28, + 0x03, 0x7d, 0x02, 0x18, 0x4e, 0x4e, 0x43, 0xa7, 0xa7, 0x00, 0x4c, 0xf3, + 0x56, 0x89, 0x1d, 0x00, 0x46, 0x52, 0x05, 0x4d, 0x02, 0x00, 0x44, 0x8f, + 0x17, 0x7d, 0x02, 0x40, 0x51, 0xa9, 0x57, 0x28, 0xdf, 0x01, 0x49, 0x31, + 0x23, 0x72, 0x1d, 0x40, 0x49, 0x9e, 0x6d, 0x5f, 0x1e, 0x00, 0x47, 0x92, + 0x75, 0x7c, 0x02, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4c, 0x2e, 0x23, + 0x73, 0x1d, 0x00, 0x4c, 0xf3, 0x56, 0x16, 0xdf, 0x41, 0x02, 0xc6, 0x00, + 0x06, 0x4a, 0x10, 0x23, 0x11, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x59, 0x1e, + 0x00, 0x45, 0x20, 0x07, 0x5b, 0x1e, 0xc0, 0x00, 0x4b, 0x53, 0x97, 0x5d, + 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0x59, 0x01, 0x00, 0x46, 0xfa, 0xc1, 0x57, + 0x01, 0x00, 0x4b, 0xca, 0x4f, 0x49, 0xab, 0x40, 0x06, 0x50, 0x00, 0x06, + 0x49, 0xcb, 0xbd, 0x39, 0x02, 0x40, 0x4f, 0x8d, 0x3f, 0x59, 0xa7, 0x00, + 0x44, 0xac, 0x0e, 0xa0, 0x02, 0x80, 0x06, 0x58, 0x0e, 0x2b, 0x57, 0xa7, + 0x40, 0x45, 0xd7, 0x47, 0x4b, 0x02, 0x40, 0x06, 0x50, 0x00, 0x0d, 0xa8, + 0x01, 0xff, 0x59, 0x01, 0x1d, 0xcf, 0xa7, 0x00, 0xe9, 0x78, 0x02, 0x40, + 0x45, 0xf9, 0x38, 0x55, 0x1e, 0x00, 0x49, 0x3a, 0x1e, 0x57, 0x1e, 0x00, + 0x48, 0x30, 0xc6, 0x53, 0xa7, 0x00, 0x44, 0xac, 0x0e, 0xa5, 0x01, 0x00, + 0x4c, 0x2e, 0x23, 0x71, 0x1d, 0x00, 0x4c, 0xf3, 0x56, 0x88, 0x1d, 0x00, + 0xb3, 0x01, 0xff, 0x4c, 0xff, 0x93, 0x55, 0xa7, 0x00, 0x45, 0x53, 0x05, + 0x7d, 0x1d, 0xc0, 0x00, 0x52, 0x14, 0x2b, 0x51, 0xa7, 0x40, 0x06, 0x50, + 0x00, 0x40, 0xe9, 0xa3, 0x01, 0x00, 0x4b, 0x5f, 0x9e, 0xc1, 0xa7, 0x00, + 0x44, 0xcc, 0x7b, 0xb7, 0xa7, 0x00, 0xef, 0x4f, 0xa7, 0x00, 0x04, 0xf7, + 0x04, 0x04, 0xf5, 0x23, 0x02, 0x40, 0xe5, 0x5b, 0x02, 0x80, 0x19, 0xef, + 0x54, 0x02, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x04, 0xe5, 0x62, 0xab, 0x40, + 0x4e, 0xa2, 0x0e, 0x97, 0x1d, 0x00, 0x46, 0x52, 0x05, 0x3f, 0xab, 0x40, + 0x54, 0x9c, 0x0e, 0x93, 0x1d, 0x40, 0x45, 0xf9, 0x38, 0xf3, 0x00, 0x00, + 0x45, 0x53, 0x23, 0x4f, 0x01, 0x00, 0xa3, 0xe7, 0x01, 0xa4, 0xac, 0x01, + 0x45, 0x15, 0x23, 0xf2, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x72, 0x4e, 0x5e, + 0x23, 0x0f, 0x02, 0x00, 0x02, 0x13, 0x01, 0x56, 0x46, 0xad, 0x70, 0x4d, + 0x01, 0x80, 0x3e, 0x46, 0xba, 0xde, 0xeb, 0x01, 0x80, 0x31, 0x4e, 0xa2, + 0x0e, 0x1b, 0xdf, 0x01, 0x46, 0x52, 0x05, 0xf8, 0x00, 0x80, 0x1e, 0x45, + 0x35, 0x23, 0xf5, 0x00, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, + 0xf9, 0x38, 0x4d, 0x1e, 0x00, 0x49, 0xb7, 0x23, 0x4f, 0x1e, 0x00, 0x46, + 0xad, 0x70, 0x2d, 0x02, 0x40, 0x4a, 0x97, 0xa5, 0xff, 0x01, 0x40, 0x4b, + 0x53, 0x97, 0xed, 0x01, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xf9, + 0x38, 0x53, 0x1e, 0x00, 0x45, 0x15, 0x23, 0x51, 0x1e, 0x40, 0x51, 0xc6, + 0x5c, 0x4b, 0xa7, 0x00, 0x42, 0x1f, 0x00, 0x4d, 0xa7, 0x00, 0x4d, 0x63, + 0x8a, 0x7a, 0x2c, 0x40, 0x48, 0x39, 0xab, 0xcf, 0x1e, 0x00, 0x42, 0x5e, + 0x01, 0xa1, 0x01, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xf9, + 0x38, 0xdb, 0x1e, 0x00, 0x49, 0x9f, 0x12, 0xe3, 0x1e, 0x00, 0x45, 0x15, + 0x23, 0xdd, 0x1e, 0x00, 0x4a, 0x37, 0xab, 0xdf, 0x1e, 0x00, 0x45, 0x35, + 0x23, 0xe1, 0x1e, 0x40, 0x48, 0xb8, 0x23, 0xf6, 0x00, 0x80, 0x2b, 0xaf, + 0x01, 0xff, 0x02, 0xc6, 0x00, 0x11, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x45, + 0xf9, 0x38, 0x51, 0x01, 0x00, 0x45, 0x15, 0x23, 0x0d, 0x02, 0x40, 0x45, + 0x5c, 0x00, 0x2f, 0x02, 0x80, 0x06, 0x45, 0x20, 0x07, 0xcd, 0x1e, 0x40, + 0x4b, 0x53, 0x97, 0x31, 0x02, 0x40, 0x4b, 0x53, 0x97, 0x2b, 0x02, 0x40, + 0x44, 0xe7, 0x6c, 0xd2, 0x01, 0x00, 0x49, 0xd0, 0x04, 0xf4, 0x00, 0xc0, + 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0xd1, 0x1e, 0x00, + 0x49, 0x9f, 0x12, 0xd9, 0x1e, 0x00, 0x45, 0x15, 0x23, 0xd3, 0x1e, 0x00, + 0x4a, 0x37, 0xab, 0xd5, 0x1e, 0x00, 0x45, 0x35, 0x23, 0xd7, 0x1e, 0x40, + 0x80, 0x0a, 0xea, 0xcc, 0x01, 0x00, 0x42, 0x48, 0x04, 0x74, 0xa7, 0x40, + 0x56, 0x55, 0x36, 0x49, 0x01, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x45, + 0xf9, 0x38, 0x44, 0x01, 0x00, 0xa3, 0x5b, 0xa4, 0x42, 0x45, 0x15, 0x23, + 0xf9, 0x01, 0x00, 0xac, 0x28, 0x03, 0x7d, 0x02, 0x18, 0x4e, 0x4e, 0x43, + 0xa5, 0xa7, 0x00, 0x4c, 0xf3, 0x56, 0x87, 0x1d, 0x00, 0x4e, 0xa2, 0x0e, + 0x73, 0x02, 0x00, 0x45, 0x35, 0x23, 0xf1, 0x00, 0x40, 0x51, 0xa9, 0x57, + 0x27, 0xdf, 0x01, 0x49, 0x31, 0x23, 0x70, 0x1d, 0x40, 0x48, 0xb2, 0x57, + 0x72, 0x02, 0x00, 0x49, 0x9e, 0x6d, 0x49, 0x1e, 0x00, 0x4d, 0xef, 0x86, + 0x9e, 0x01, 0x40, 0x48, 0x1e, 0x2b, 0x91, 0xa7, 0x00, 0x03, 0x04, 0x0c, + 0x01, 0xff, 0x45, 0x5c, 0x00, 0x45, 0x1e, 0x00, 0x45, 0x20, 0x07, 0x47, + 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0x48, 0x01, 0x00, 0x46, 0xfa, 0xc1, 0x46, + 0x01, 0x00, 0x4f, 0xf1, 0x6e, 0x4b, 0x1e, 0x00, 0x4b, 0xca, 0x4f, 0x3b, + 0xab, 0x00, 0x43, 0x73, 0x0b, 0x35, 0x02, 0x40, 0x06, 0x50, 0x00, 0x1f, + 0x05, 0x7e, 0x02, 0x06, 0x42, 0x48, 0x04, 0x73, 0xa7, 0x40, 0x48, 0x88, + 0xc2, 0xd7, 0xa7, 0x00, 0x07, 0xea, 0xcd, 0x01, 0xff, 0x42, 0x60, 0x07, + 0xfb, 0x1e, 0x00, 0xf6, 0xfd, 0x1e, 0x40, 0x45, 0xf9, 0x38, 0x3f, 0x1e, + 0x00, 0x4c, 0xc9, 0x4f, 0x3a, 0xab, 0x00, 0x04, 0x03, 0x0c, 0x12, 0x44, + 0xac, 0x0e, 0x71, 0x02, 0x00, 0x4c, 0x2e, 0x23, 0x6f, 0x1d, 0x00, 0x4c, + 0xf3, 0x56, 0x86, 0x1d, 0x40, 0x45, 0x5c, 0x00, 0x41, 0x1e, 0x00, 0x45, + 0x20, 0x07, 0x43, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x58, 0x45, 0x43, 0xe4, + 0xdb, 0xa7, 0x80, 0x4b, 0xa5, 0x36, 0xea, 0xc9, 0x01, 0x00, 0x45, 0x54, + 0xad, 0x7f, 0x01, 0x80, 0x12, 0x49, 0x18, 0xbf, 0xaa, 0x02, 0x00, 0x42, + 0x48, 0x04, 0x72, 0xa7, 0x00, 0x49, 0xb2, 0xc1, 0xab, 0x02, 0x40, 0x06, + 0x50, 0x00, 0x01, 0xff, 0xa4, 0x06, 0x4b, 0xe9, 0x9c, 0x9d, 0x1e, 0x40, + 0x4e, 0x8e, 0x3f, 0x9c, 0x1e, 0x00, 0x48, 0x3b, 0x1e, 0x9b, 0x1e, 0x40, + 0x45, 0x25, 0xe9, 0x35, 0xab, 0x00, 0x42, 0x54, 0x28, 0x6e, 0x02, 0xc0, + 0x00, 0x54, 0x9c, 0x0e, 0x05, 0xdf, 0x41, 0x4c, 0xda, 0x28, 0x9b, 0x01, + 0x40, 0x45, 0xf9, 0x38, 0x3a, 0x01, 0x00, 0xa2, 0x8e, 0x01, 0xa3, 0x74, + 0x02, 0x3b, 0x01, 0x52, 0x48, 0x31, 0x72, 0x11, 0xdf, 0x01, 0x4b, 0xe9, + 0x9c, 0x49, 0xa7, 0x00, 0x4f, 0xd3, 0x6e, 0x37, 0xab, 0x00, 0x4a, 0x9d, + 0x6d, 0x3b, 0x1e, 0x00, 0x03, 0x7d, 0x02, 0x19, 0x4c, 0xf3, 0x56, 0x85, + 0x1d, 0x00, 0x4e, 0xa2, 0x0e, 0x6d, 0x02, 0x80, 0x06, 0x46, 0x52, 0x05, + 0x42, 0x01, 0x40, 0x49, 0x29, 0xb4, 0x8e, 0xa7, 0x40, 0x51, 0xa9, 0x57, + 0x26, 0xdf, 0x01, 0x04, 0x80, 0x02, 0x01, 0xff, 0x43, 0x23, 0x0a, 0x40, + 0x01, 0x00, 0x44, 0x22, 0x08, 0x39, 0xab, 0x00, 0x45, 0x35, 0x23, 0x6b, + 0x02, 0x40, 0x47, 0xa1, 0x12, 0x37, 0x1e, 0x80, 0x11, 0x05, 0x3d, 0x01, + 0x01, 0xff, 0x43, 0x16, 0x00, 0x61, 0x2c, 0x00, 0x4c, 0x2e, 0x23, 0x38, + 0xab, 0x40, 0x4b, 0x53, 0x97, 0x39, 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0x3e, + 0x01, 0x00, 0x46, 0xfa, 0xc1, 0x3c, 0x01, 0x00, 0x4f, 0xf1, 0x6e, 0x3d, + 0x1e, 0x00, 0x43, 0x73, 0x0b, 0x34, 0x02, 0x40, 0x42, 0x17, 0x00, 0x9a, + 0x01, 0x00, 0x43, 0xdd, 0xa3, 0x6c, 0x02, 0xc0, 0x00, 0x51, 0xee, 0x56, + 0x13, 0xdf, 0x41, 0x06, 0x50, 0x00, 0x06, 0x42, 0x71, 0x00, 0x38, 0x01, + 0x40, 0x45, 0xf9, 0x38, 0x31, 0x1e, 0x00, 0xa3, 0x39, 0xa4, 0x25, 0x44, + 0xac, 0x0e, 0x99, 0x01, 0x00, 0x4a, 0x9d, 0x6d, 0x35, 0x1e, 0x00, 0x4e, + 0x4e, 0x43, 0xa3, 0xa7, 0x00, 0x4c, 0xf3, 0x56, 0x84, 0x1d, 0x00, 0x46, + 0x52, 0x05, 0x41, 0xa7, 0xc0, 0x00, 0x54, 0x88, 0x3f, 0x45, 0xa7, 0x40, + 0x48, 0x1e, 0x2b, 0x6a, 0x2c, 0x00, 0x4e, 0x8e, 0x3f, 0x43, 0xa7, 0x00, + 0x48, 0xa0, 0x12, 0x33, 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0xe9, 0x01, 0x00, + 0x46, 0xfa, 0xc1, 0x37, 0x01, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa3, + 0x06, 0x46, 0x52, 0x05, 0x49, 0x02, 0x40, 0x44, 0xe7, 0x6c, 0xf0, 0x01, + 0x00, 0x49, 0xd0, 0x04, 0x35, 0x01, 0x00, 0x4b, 0xca, 0x4f, 0x9d, 0x02, + 0x40, 0x06, 0x50, 0x00, 0x48, 0xae, 0x19, 0x02, 0x1b, 0x05, 0x04, 0xf3, + 0x6d, 0xa7, 0x40, 0xe1, 0x69, 0x02, 0x80, 0x06, 0x47, 0xd5, 0x88, 0x61, + 0xab, 0x40, 0x4c, 0xda, 0x28, 0x7c, 0x1d, 0x40, 0x06, 0x16, 0x70, 0x11, + 0x07, 0x60, 0x23, 0x01, 0xff, 0x45, 0x3e, 0xe4, 0x64, 0xab, 0x00, 0x42, + 0x60, 0x51, 0x40, 0xab, 0x40, 0xe4, 0x7a, 0xa7, 0x00, 0xe6, 0x7c, 0xa7, + 0x00, 0xe7, 0x79, 0x1d, 0x00, 0xf2, 0x83, 0xa7, 0x00, 0xf3, 0x85, 0xa7, + 0x00, 0xf4, 0x87, 0xa7, 0x40, 0x45, 0xf9, 0x38, 0xed, 0x00, 0x00, 0x45, + 0x53, 0x23, 0x2d, 0x01, 0x00, 0xa3, 0x5c, 0xa4, 0x3e, 0x45, 0x15, 0x23, + 0xec, 0x00, 0x00, 0x4a, 0x37, 0xab, 0xc9, 0x1e, 0x00, 0x4e, 0x5e, 0x23, + 0x0b, 0x02, 0x00, 0x46, 0xad, 0x70, 0x2b, 0x01, 0x00, 0x46, 0xba, 0xde, + 0x2f, 0x01, 0x00, 0x4e, 0xa2, 0x0e, 0x96, 0x1d, 0x00, 0x46, 0x52, 0x05, + 0x68, 0x02, 0x80, 0x0d, 0x45, 0x35, 0x23, 0x29, 0x01, 0xc0, 0x00, 0x46, + 0x1f, 0x07, 0x2d, 0x1e, 0x40, 0x53, 0x57, 0x47, 0x1a, 0xdf, 0x41, 0x48, + 0xb8, 0x23, 0xef, 0x00, 0x80, 0x0f, 0xaf, 0x01, 0xff, 0x47, 0xa1, 0x12, + 0xcb, 0x1e, 0x00, 0x4a, 0x10, 0x23, 0x09, 0x02, 0x40, 0x4a, 0x97, 0xa5, + 0x2f, 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0xd0, 0x01, 0x00, 0x49, 0xd0, 0x04, + 0xee, 0x00, 0x40, 0x06, 0x50, 0x00, 0x17, 0x45, 0x3f, 0xdc, 0x76, 0x2c, + 0x00, 0x43, 0x4c, 0x0a, 0x27, 0xa7, 0x80, 0x04, 0xf6, 0x95, 0x01, 0x40, + 0x4a, 0xa7, 0x24, 0x67, 0x02, 0x40, 0x4b, 0xbb, 0x99, 0x2b, 0x1e, 0x00, + 0xa3, 0x37, 0xa4, 0x18, 0x44, 0xac, 0x0e, 0x66, 0x02, 0x00, 0x4a, 0x9d, + 0x6d, 0x96, 0x1e, 0x00, 0x4c, 0xf3, 0x56, 0x95, 0xa7, 0x00, 0x46, 0x52, + 0x05, 0x27, 0x01, 0x40, 0x48, 0x1e, 0x2b, 0x68, 0x2c, 0x00, 0x48, 0xb8, + 0x23, 0x27, 0x1e, 0x00, 0x03, 0x04, 0x0c, 0x01, 0xff, 0x45, 0x5c, 0x00, + 0x23, 0x1e, 0x00, 0x45, 0x20, 0x07, 0x25, 0x1e, 0x40, 0x44, 0xe7, 0x6c, + 0x1f, 0x02, 0x00, 0x46, 0xfa, 0xc1, 0x29, 0x1e, 0x00, 0x49, 0xd0, 0x04, + 0x25, 0x01, 0x40, 0x06, 0x50, 0x00, 0x23, 0x44, 0x00, 0x21, 0x63, 0x02, + 0x00, 0x42, 0x22, 0x00, 0xa3, 0x01, 0x00, 0x07, 0xcf, 0x28, 0x01, 0xff, + 0xe1, 0xbb, 0xa7, 0x00, 0xe9, 0xbd, 0xa7, 0x00, 0x44, 0x55, 0x03, 0x42, + 0x02, 0x00, 0xf5, 0xbf, 0xa7, 0x40, 0x45, 0xf9, 0x38, 0xf5, 0x01, 0x00, + 0x45, 0x53, 0x23, 0x1f, 0x01, 0x00, 0xa3, 0x24, 0x49, 0x3a, 0x1e, 0x21, + 0x01, 0x00, 0x44, 0xac, 0x0e, 0x60, 0x02, 0x00, 0x46, 0xad, 0x70, 0x21, + 0x1e, 0x00, 0x4e, 0x4e, 0x43, 0xa1, 0xa7, 0x00, 0x4c, 0xf3, 0x56, 0x83, + 0x1d, 0x00, 0x46, 0x52, 0x05, 0xe5, 0x01, 0x40, 0x44, 0xe7, 0x6c, 0xe7, + 0x01, 0x00, 0x46, 0xfa, 0xc1, 0x23, 0x01, 0x00, 0x49, 0xd0, 0x04, 0x1d, + 0x01, 0x40, 0x06, 0x50, 0x00, 0x0d, 0x4b, 0xb5, 0x9b, 0xa9, 0x02, 0xc0, + 0x00, 0x4b, 0x45, 0x98, 0x00, 0xdf, 0x41, 0x49, 0x3a, 0x1e, 0x1f, 0x1e, + 0x00, 0x44, 0xac, 0x0e, 0x92, 0x01, 0x00, 0x4c, 0x2e, 0x23, 0x6e, 0x1d, + 0x00, 0x4c, 0xf3, 0x56, 0x82, 0x1d, 0x00, 0x46, 0x52, 0x05, 0x99, 0xa7, + 0x40, 0x06, 0x50, 0x00, 0x92, 0x01, 0x0e, 0x2b, 0x78, 0x81, 0x01, 0x42, + 0x1d, 0x01, 0x4b, 0x01, 0x80, 0x69, 0x42, 0xa4, 0x02, 0x83, 0x02, 0x80, + 0x3e, 0xf4, 0x6b, 0xa7, 0x80, 0x35, 0x42, 0x54, 0x28, 0x92, 0x02, 0xc0, + 0x00, 0x80, 0x01, 0xff, 0x48, 0x58, 0x13, 0xb9, 0x01, 0x00, 0x05, 0x51, + 0x00, 0x01, 0xff, 0xa3, 0x12, 0x4c, 0xf3, 0x56, 0x18, 0xdf, 0x01, 0x4e, + 0xa2, 0x0e, 0x9a, 0x1d, 0x00, 0x44, 0x8f, 0x17, 0xba, 0x01, 0x40, 0x44, + 0xe7, 0x6c, 0xef, 0x01, 0x00, 0x43, 0x73, 0x0b, 0x93, 0x02, 0x40, 0xe8, + 0xf0, 0x00, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x72, 0x0b, 0x86, + 0x02, 0x00, 0x4a, 0x61, 0xa9, 0x0b, 0xdf, 0x81, 0x0c, 0x4c, 0xf3, 0x56, + 0x8b, 0x1d, 0x00, 0x4e, 0xa2, 0x0e, 0x98, 0x1d, 0x40, 0x49, 0x32, 0xb4, + 0x0c, 0xdf, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4c, 0xc9, 0x4f, 0x3c, + 0xab, 0x00, 0x4c, 0xf3, 0x56, 0x14, 0xdf, 0x41, 0x42, 0x9e, 0x01, 0x25, + 0xa7, 0x00, 0x43, 0x68, 0x00, 0x23, 0xa7, 0x40, 0x45, 0xf9, 0x38, 0xe9, + 0x00, 0x00, 0x45, 0x53, 0x23, 0x15, 0x01, 0x00, 0xa3, 0x76, 0xa4, 0x55, + 0x48, 0x30, 0xc6, 0x34, 0xab, 0x00, 0x45, 0x15, 0x23, 0xe8, 0x00, 0x00, + 0x4a, 0x37, 0xab, 0xbb, 0x1e, 0x00, 0x4e, 0x5e, 0x23, 0x07, 0x02, 0x00, + 0x46, 0xad, 0x70, 0x13, 0x01, 0x80, 0x25, 0x45, 0x61, 0x2a, 0x78, 0x2c, + 0x00, 0x46, 0xba, 0xde, 0x19, 0x01, 0x00, 0x4e, 0xa2, 0x0e, 0x92, 0x1d, + 0x00, 0x46, 0x52, 0x05, 0x47, 0x02, 0x00, 0x45, 0x35, 0x23, 0xbd, 0x1e, + 0xc0, 0x00, 0x46, 0x1f, 0x07, 0x1b, 0x1e, 0x40, 0x05, 0x19, 0x00, 0x01, + 0xff, 0x45, 0xf9, 0x38, 0x17, 0x1e, 0x00, 0x45, 0x15, 0x23, 0x15, 0x1e, + 0x40, 0x48, 0xb8, 0x23, 0xeb, 0x00, 0x00, 0xaf, 0x01, 0xff, 0x02, 0xc6, + 0x00, 0x06, 0x4a, 0x10, 0x23, 0x05, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x17, + 0x01, 0x00, 0x45, 0x20, 0x07, 0xb9, 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0x1b, + 0x01, 0x00, 0x46, 0xfa, 0xc1, 0x29, 0x02, 0x80, 0x32, 0x49, 0xd0, 0x04, + 0xea, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x04, 0x1a, 0x00, 0x06, 0x45, + 0x20, 0x07, 0x19, 0x1e, 0x40, 0x45, 0xf9, 0x38, 0xbf, 0x1e, 0x00, 0x49, + 0x9f, 0x12, 0xc7, 0x1e, 0x00, 0x45, 0x15, 0x23, 0xc1, 0x1e, 0x00, 0x4a, + 0x37, 0xab, 0xc3, 0x1e, 0x00, 0x45, 0x35, 0x23, 0xc5, 0x1e, 0x40, 0x4a, + 0xab, 0xa5, 0x1d, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x8a, 0x01, 0x49, 0x7b, + 0xb6, 0x38, 0x02, 0x00, 0xa5, 0x64, 0xaf, 0x2c, 0x42, 0x48, 0x04, 0x71, + 0xa7, 0x00, 0xfa, 0xf3, 0x01, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x47, 0xaf, + 0x48, 0xa3, 0x02, 0x80, 0x06, 0x4a, 0xe3, 0x97, 0xc6, 0x01, 0x40, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x44, 0x72, 0x0b, 0xa5, 0x02, 0x00, 0x4e, 0xa2, + 0x0e, 0x66, 0xab, 0x40, 0x06, 0x92, 0x41, 0x1c, 0x05, 0x3d, 0x01, 0x01, + 0xff, 0xf2, 0x48, 0xab, 0x80, 0x0c, 0x45, 0x11, 0x4a, 0xd3, 0xa7, 0x00, + 0x44, 0x68, 0xa4, 0xd5, 0xa7, 0x40, 0x52, 0xc3, 0x4f, 0x4a, 0xab, 0x40, + 0xe9, 0x31, 0x01, 0x00, 0xea, 0x37, 0x02, 0xc0, 0x00, 0x4c, 0xda, 0x28, + 0x5f, 0x02, 0xc0, 0x00, 0x49, 0xc0, 0x23, 0x84, 0x02, 0x40, 0x43, 0x49, + 0x19, 0x9f, 0x1e, 0x00, 0x4a, 0x15, 0xb4, 0xa4, 0x02, 0xc0, 0x00, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x4c, 0xf3, 0x56, 0x12, 0xdf, 0x01, 0x4e, 0xa2, + 0x0e, 0x19, 0xdf, 0x41, 0xa3, 0x56, 0x04, 0x03, 0x0c, 0x46, 0x44, 0xac, + 0x0e, 0x57, 0x02, 0x80, 0x39, 0x4a, 0x9d, 0x6d, 0x0f, 0x1e, 0x00, 0x03, + 0x7d, 0x02, 0x23, 0x4c, 0xf3, 0x56, 0x81, 0x1d, 0x00, 0xb3, 0x0f, 0xb4, + 0x01, 0xff, 0x43, 0x90, 0x17, 0x56, 0x02, 0x00, 0x45, 0xa7, 0xe0, 0x8c, + 0x01, 0x40, 0x53, 0xf0, 0x49, 0xc8, 0xa7, 0x00, 0x45, 0x53, 0x05, 0x11, + 0x01, 0x40, 0x51, 0xa9, 0x57, 0x25, 0xdf, 0x01, 0x49, 0x31, 0x23, 0x6d, + 0x1d, 0x40, 0x49, 0x3b, 0xb4, 0x91, 0x1d, 0x40, 0x45, 0x5c, 0x00, 0x0b, + 0x1e, 0x00, 0x45, 0x20, 0x07, 0x0d, 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0x0f, + 0x01, 0x00, 0x46, 0xfa, 0xc1, 0x11, 0x1e, 0x00, 0x4f, 0xf1, 0x6e, 0x13, + 0x1e, 0x00, 0x43, 0x73, 0x0b, 0x21, 0x02, 0x40, 0x06, 0x50, 0x00, 0x49, + 0x42, 0x49, 0x00, 0x53, 0xab, 0x80, 0x31, 0x06, 0x60, 0x1b, 0x13, 0x42, + 0x10, 0x00, 0x6f, 0xa7, 0x00, 0x48, 0xe8, 0xcb, 0x2d, 0xa7, 0xc0, 0x00, + 0x4b, 0xed, 0x97, 0x2f, 0xa7, 0x40, 0x49, 0x14, 0x70, 0xd1, 0xa7, 0x00, + 0xaf, 0x06, 0x4f, 0x75, 0x72, 0x5e, 0x02, 0x40, 0x44, 0xcc, 0x7b, 0x77, + 0x02, 0x00, 0x45, 0x1f, 0x29, 0x9a, 0x02, 0x40, 0x0a, 0x69, 0xa6, 0x01, + 0xff, 0x4a, 0xbd, 0xac, 0x55, 0xab, 0x00, 0x4a, 0x25, 0x50, 0x54, 0xab, + 0x40, 0x45, 0xf9, 0x38, 0x07, 0x01, 0x00, 0x43, 0x16, 0x00, 0x93, 0xa7, + 0x00, 0xa3, 0x1e, 0x49, 0x3a, 0x1e, 0x0b, 0x01, 0x00, 0x44, 0xac, 0x0e, + 0x88, 0x01, 0x00, 0x4c, 0xf3, 0x56, 0x94, 0xa7, 0x00, 0x4e, 0xa2, 0x0e, + 0x1d, 0xdf, 0x01, 0x46, 0x52, 0x05, 0x3c, 0x02, 0x40, 0x44, 0xe7, 0x6c, + 0x0d, 0x01, 0x00, 0x46, 0xfa, 0xc1, 0xe7, 0x00, 0x80, 0x0c, 0x49, 0xd0, + 0x04, 0x09, 0x01, 0x00, 0x43, 0x73, 0x0b, 0x55, 0x02, 0x40, 0x4a, 0x97, + 0xa5, 0x09, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x3f, 0xa1, 0x25, 0x43, 0x94, + 0x0f, 0xb5, 0xa7, 0x00, 0x0b, 0x3e, 0x9e, 0x0c, 0x4c, 0x6f, 0x93, 0x17, + 0x1d, 0x00, 0x47, 0x6f, 0xd5, 0x47, 0xa7, 0x40, 0xe5, 0x32, 0xab, 0x00, + 0xef, 0x3d, 0xab, 0xc0, 0x00, 0x4c, 0xda, 0x28, 0x3e, 0xab, 0x40, 0x05, + 0xcb, 0x80, 0x06, 0x4a, 0xe1, 0xb0, 0x4d, 0xab, 0x40, 0x45, 0x3e, 0xe4, + 0x30, 0xab, 0x00, 0xe5, 0x33, 0xab, 0x00, 0xef, 0x75, 0x02, 0x40, 0x04, + 0x03, 0x0c, 0x2a, 0x48, 0x30, 0xc6, 0x97, 0xa7, 0x00, 0x44, 0xac, 0x0e, + 0x53, 0x02, 0x00, 0x4a, 0x9d, 0x6d, 0x07, 0x1e, 0x00, 0x4c, 0x2e, 0x23, + 0x6c, 0x1d, 0x00, 0x4c, 0xf3, 0x56, 0x80, 0x1d, 0x00, 0x46, 0x52, 0x05, + 0x80, 0x01, 0x00, 0x46, 0xa6, 0xe0, 0x83, 0x01, 0x40, 0x45, 0x5c, 0x00, + 0x03, 0x1e, 0x00, 0x45, 0x20, 0x07, 0x05, 0x1e, 0x40, 0x80, 0x44, 0xe1, + 0x33, 0xa7, 0x00, 0xe5, 0xe6, 0x00, 0x80, 0x2a, 0x44, 0x3f, 0xe4, 0x51, + 0x02, 0x80, 0x1d, 0x4a, 0x61, 0xae, 0xc3, 0xa7, 0x00, 0xef, 0x35, 0xa7, + 0x00, 0xf5, 0x37, 0xa7, 0x00, 0xf6, 0x39, 0xa7, 0x80, 0x04, 0xf9, 0x3d, + 0xa7, 0x40, 0x54, 0xec, 0x3f, 0x3b, 0xa7, 0x40, 0x54, 0x9c, 0x0e, 0x90, + 0x1d, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0xfd, 0x01, + 0x00, 0x46, 0xad, 0x70, 0xe3, 0x01, 0x40, 0x4e, 0xab, 0x7b, 0x31, 0xab, + 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0xe1, 0x00, 0x00, + 0x45, 0x53, 0x23, 0x03, 0x01, 0x80, 0xb5, 0x01, 0xa3, 0x82, 0x01, 0xa4, + 0x53, 0x45, 0x15, 0x23, 0xe0, 0x00, 0x00, 0x4a, 0x37, 0xab, 0xa3, 0x1e, + 0x00, 0x4e, 0x5e, 0x23, 0x03, 0x02, 0x00, 0x46, 0xad, 0x70, 0x01, 0x01, + 0x00, 0x46, 0xba, 0xde, 0x05, 0x01, 0x00, 0xb2, 0x0c, 0x46, 0x52, 0x05, + 0x65, 0x2c, 0x00, 0x45, 0x35, 0x23, 0xe3, 0x00, 0x40, 0x4d, 0xa3, 0x0e, + 0x8f, 0x1d, 0x00, 0xa9, 0x01, 0xff, 0x4d, 0x86, 0x72, 0x9a, 0x1e, 0x00, + 0x03, 0xa2, 0x01, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xe5, 0x00, 0x80, 0x06, + 0x45, 0x20, 0x07, 0x01, 0x1e, 0x40, 0x4a, 0x97, 0xa5, 0xfb, 0x01, 0x40, + 0x48, 0xb8, 0x23, 0xe4, 0x00, 0x80, 0x20, 0xaf, 0x01, 0xff, 0x02, 0xc6, + 0x00, 0x06, 0x4a, 0x10, 0x23, 0x01, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x27, + 0x02, 0x80, 0x06, 0x45, 0x20, 0x07, 0xa1, 0x1e, 0x40, 0x4b, 0x53, 0x97, + 0xe1, 0x01, 0x40, 0x4b, 0x53, 0x97, 0xdf, 0x01, 0x40, 0x44, 0xe7, 0x6c, + 0xce, 0x01, 0x00, 0x49, 0xd0, 0x04, 0xe2, 0x00, 0xc0, 0x00, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0xa5, 0x1e, 0x00, 0x49, 0x9f, 0x12, + 0xad, 0x1e, 0x00, 0x45, 0x15, 0x23, 0xa7, 0x1e, 0x00, 0x4a, 0x37, 0xab, + 0xa9, 0x1e, 0x00, 0x45, 0x35, 0x23, 0xab, 0x1e, 0x40, 0x05, 0x19, 0x00, + 0x01, 0xff, 0x45, 0xf9, 0x38, 0xaf, 0x1e, 0x00, 0x49, 0x9f, 0x12, 0xb7, + 0x1e, 0x00, 0x45, 0x15, 0x23, 0xb1, 0x1e, 0x00, 0x4a, 0x37, 0xab, 0xb3, + 0x1e, 0x00, 0x45, 0x35, 0x23, 0xb5, 0x1e, 0x40, 0x4d, 0xe3, 0x83, 0x7b, + 0x1d, 0x00, 0x4d, 0x6c, 0x89, 0x7e, 0x1d, 0x40, 0xa1, 0x8d, 0x03, 0x02, + 0xe5, 0x06, 0xf1, 0x02, 0x4c, 0xdb, 0x8d, 0xc0, 0x01, 0x00, 0x4c, 0xce, + 0x28, 0x94, 0x02, 0x80, 0xdd, 0x02, 0x55, 0x41, 0x3c, 0x96, 0x02, 0x80, + 0xc4, 0x02, 0x4d, 0xf4, 0x84, 0xc1, 0x01, 0x00, 0x5b, 0xff, 0x1c, 0x95, + 0x02, 0x00, 0x02, 0x88, 0x00, 0x95, 0x02, 0xb3, 0x18, 0x4f, 0x0a, 0x74, + 0xbb, 0x01, 0x00, 0x58, 0xce, 0x2b, 0x24, 0x1d, 0x00, 0x44, 0x68, 0xa4, + 0xbf, 0x01, 0x00, 0x42, 0x05, 0x22, 0xa6, 0x01, 0x40, 0x4e, 0x8d, 0x78, + 0x8f, 0xa7, 0x00, 0x0d, 0xc7, 0x3c, 0x0d, 0x4a, 0x2b, 0xb2, 0x97, 0x02, + 0xc0, 0x00, 0x4a, 0xb6, 0x48, 0x0f, 0xdf, 0x41, 0xe1, 0x00, 0x1d, 0x80, + 0xda, 0x01, 0xe2, 0x99, 0x02, 0x80, 0xce, 0x01, 0xe3, 0x04, 0x1d, 0x00, + 0xe4, 0x05, 0x1d, 0x00, 0xe5, 0x07, 0x1d, 0x80, 0xb4, 0x01, 0xe6, 0x30, + 0xa7, 0x00, 0xe7, 0x62, 0x02, 0x80, 0xa4, 0x01, 0xe8, 0x9c, 0x02, 0x00, + 0xe9, 0x6a, 0x02, 0x80, 0x94, 0x01, 0xea, 0x0a, 0x1d, 0x00, 0xeb, 0x0b, + 0x1d, 0x00, 0xec, 0x9f, 0x02, 0x80, 0x76, 0xed, 0x0d, 0x1d, 0x00, 0xee, + 0x74, 0x02, 0x00, 0xef, 0x0f, 0x1d, 0x80, 0x5b, 0xf0, 0x18, 0x1d, 0x00, + 0xf1, 0xaf, 0xa7, 0x00, 0xf2, 0x80, 0x02, 0x80, 0x36, 0xf3, 0x31, 0xa7, + 0x00, 0xf4, 0x1b, 0x1d, 0x80, 0x14, 0xf5, 0x1c, 0x1d, 0x00, 0xf6, 0x20, + 0x1d, 0x00, 0xf7, 0x21, 0x1d, 0x00, 0xf9, 0x8f, 0x02, 0x00, 0xfa, 0x22, + 0x1d, 0x40, 0x06, 0x71, 0x07, 0x01, 0xff, 0xe5, 0x7b, 0x2c, 0x00, 0xe7, + 0x02, 0xdf, 0x01, 0xeb, 0x10, 0xdf, 0x01, 0xed, 0xfa, 0xa7, 0x00, 0xf2, + 0x1a, 0x1d, 0x40, 0x4f, 0x05, 0x6a, 0x46, 0xab, 0x00, 0x08, 0xde, 0x14, + 0x06, 0x42, 0x48, 0x04, 0x76, 0xa7, 0x40, 0xee, 0x0e, 0x1d, 0x00, 0xf2, + 0x19, 0x1d, 0x40, 0xe5, 0x76, 0x02, 0x00, 0x45, 0xd4, 0xe9, 0x10, 0x1d, + 0x00, 0xf5, 0x15, 0x1d, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x5b, + 0xa6, 0x04, 0xdf, 0x01, 0x46, 0x52, 0x05, 0x0c, 0x1d, 0x40, 0x49, 0xc6, + 0xbc, 0x81, 0x02, 0x40, 0x4a, 0xa7, 0x24, 0x9b, 0x02, 0x40, 0x42, 0x53, + 0x00, 0x06, 0x1d, 0x00, 0x42, 0x54, 0x28, 0x23, 0x1d, 0x40, 0x47, 0x02, + 0xcf, 0x03, 0x1d, 0x40, 0xe5, 0x01, 0x1d, 0x40, 0x4d, 0x8f, 0x0e, 0xc3, + 0x01, 0x80, 0x11, 0x07, 0xdf, 0x14, 0x01, 0xff, 0x48, 0xd0, 0xc5, 0xaa, + 0x01, 0x00, 0x58, 0xce, 0x28, 0xa2, 0x02, 0x40, 0x54, 0x9c, 0x0e, 0x0a, + 0xdf, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x72, 0x0b, 0x0e, 0xdf, + 0x01, 0x46, 0x52, 0x05, 0xbe, 0x01, 0x40, 0x4c, 0xda, 0x28, 0xa1, 0x02, + 0x40, 0x51, 0xb8, 0x59, 0xad, 0x02, 0x00, 0x07, 0x18, 0x84, 0x01, 0xff, + 0x45, 0x97, 0x0e, 0x98, 0x02, 0x00, 0x4a, 0xbf, 0x59, 0xac, 0x02, 0x40, + 0x42, 0x9e, 0x01, 0x25, 0x1d, 0x00, 0x4d, 0x69, 0x85, 0xc2, 0x01, 0x40, + 0x49, 0x45, 0xb6, 0xff, 0xa7, 0x00, 0xa9, 0x12, 0x09, 0xdd, 0x14, 0x06, + 0x4a, 0x09, 0xb1, 0xf7, 0xa7, 0x40, 0xe6, 0xfb, 0xa7, 0x00, 0xf0, 0xfc, + 0xa7, 0x40, 0x46, 0x2a, 0xd8, 0xfe, 0xa7, 0x00, 0x49, 0x40, 0x5b, 0xfd, + 0xa7, 0x40, 0x08, 0xe5, 0x05, 0x06, 0x44, 0x96, 0x10, 0x1d, 0x27, 0x40, + 0x06, 0xed, 0x05, 0x11, 0x08, 0x9d, 0x1f, 0x01, 0xff, 0x42, 0x5f, 0xc7, + 0x32, 0x01, 0x00, 0x42, 0x60, 0x51, 0x52, 0x01, 0x40, 0xe1, 0x41, 0x00, + 0x80, 0xa9, 0x16, 0xe2, 0x42, 0x00, 0x80, 0xe5, 0x15, 0xe3, 0x43, 0x00, + 0x80, 0xfd, 0x14, 0xe4, 0x44, 0x00, 0x80, 0x87, 0x14, 0xe5, 0x45, 0x00, + 0x80, 0x8b, 0x12, 0xe6, 0x46, 0x00, 0x80, 0xee, 0x11, 0xe7, 0x47, 0x00, + 0x80, 0x83, 0x11, 0xe8, 0x48, 0x00, 0x80, 0xa2, 0x10, 0xe9, 0x49, 0x00, + 0x80, 0xff, 0x0e, 0xea, 0x4a, 0x00, 0x80, 0xe0, 0x0e, 0xeb, 0x4b, 0x00, + 0x80, 0x8e, 0x0e, 0xec, 0x4c, 0x00, 0x80, 0x89, 0x0d, 0xed, 0x4d, 0x00, + 0x80, 0xc9, 0x0c, 0xee, 0x4e, 0x00, 0x80, 0xdc, 0x0b, 0xef, 0x4f, 0x00, + 0x80, 0x8c, 0x09, 0xf0, 0x50, 0x00, 0x80, 0xce, 0x08, 0xf1, 0x51, 0x00, + 0x80, 0xb7, 0x08, 0xf2, 0x52, 0x00, 0x80, 0xab, 0x07, 0xf3, 0x53, 0x00, + 0x80, 0x87, 0x06, 0xf4, 0x54, 0x00, 0x80, 0xd1, 0x04, 0xf5, 0x55, 0x00, + 0x80, 0xd9, 0x02, 0xf6, 0x56, 0x00, 0x80, 0x8f, 0x02, 0xf7, 0x57, 0x00, + 0x80, 0xce, 0x01, 0xf8, 0x58, 0x00, 0x80, 0xb7, 0x01, 0xf9, 0x59, 0x00, + 0x80, 0x58, 0xfa, 0x5a, 0x00, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, + 0x45, 0xf9, 0x38, 0x79, 0x01, 0x00, 0xa3, 0x3a, 0xa4, 0x21, 0x44, 0xac, + 0x0e, 0x24, 0x02, 0x00, 0x4a, 0x9d, 0x6d, 0x94, 0x1e, 0x00, 0x4c, 0xf3, + 0x56, 0xc6, 0xa7, 0x00, 0xb3, 0x01, 0xff, 0x45, 0x53, 0x05, 0xb5, 0x01, + 0x00, 0x49, 0x3d, 0xc1, 0x7f, 0x2c, 0x40, 0x48, 0x1e, 0x2b, 0x6b, 0x2c, + 0x00, 0x03, 0x04, 0x0c, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x7b, 0x01, 0x00, + 0x45, 0x20, 0x07, 0x92, 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0x7d, 0x01, 0x00, + 0x49, 0xd0, 0x04, 0x90, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x06, 0x43, 0x25, + 0x52, 0x1c, 0x02, 0x40, 0x45, 0xf9, 0x38, 0xdd, 0x00, 0x00, 0x4a, 0xcf, + 0x04, 0x76, 0x01, 0x00, 0xa4, 0x2b, 0x45, 0x15, 0x23, 0xf2, 0x1e, 0x00, + 0x44, 0xac, 0x0e, 0xb3, 0x01, 0x80, 0x18, 0x44, 0x42, 0x85, 0xfe, 0x1e, + 0x00, 0x46, 0xad, 0x70, 0x32, 0x02, 0x00, 0x46, 0x52, 0x05, 0x4e, 0x02, + 0x00, 0x45, 0x35, 0x23, 0xf8, 0x1e, 0x40, 0x46, 0x5b, 0x00, 0xf6, 0x1e, + 0x40, 0x48, 0xb8, 0x23, 0x78, 0x01, 0x00, 0x03, 0x04, 0x0c, 0x01, 0xff, + 0x45, 0x5c, 0x00, 0x8e, 0x1e, 0x00, 0x45, 0x20, 0x07, 0xf4, 0x1e, 0x40, + 0x07, 0x82, 0x07, 0x01, 0xff, 0x48, 0xb8, 0x23, 0x8c, 0x1e, 0x00, 0x48, + 0x3b, 0x1e, 0x8a, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x06, 0x43, 0x69, 0xa4, + 0xf7, 0x01, 0x40, 0x45, 0xf9, 0x38, 0x82, 0x1e, 0x00, 0x4a, 0xcf, 0x04, + 0x74, 0x01, 0x00, 0xa4, 0x0c, 0x45, 0x15, 0x23, 0x80, 0x1e, 0x00, 0x44, + 0xac, 0x0e, 0x72, 0x2c, 0x40, 0x48, 0xb8, 0x23, 0x84, 0x1e, 0x00, 0x03, + 0x04, 0x0c, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x86, 0x1e, 0x00, 0x45, 0x20, + 0x07, 0x88, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x26, 0x43, 0x40, 0x05, 0x68, + 0xa7, 0x00, 0x4b, 0xba, 0x9d, 0x62, 0xa7, 0x00, 0x07, 0xd2, 0xd3, 0x04, + 0xf9, 0x60, 0xa7, 0x40, 0x42, 0x93, 0x0f, 0x9a, 0xa7, 0x00, 0x42, 0x60, + 0x51, 0x9c, 0xa7, 0x00, 0x42, 0xd6, 0x13, 0x9e, 0xa7, 0x40, 0xa4, 0x0c, + 0x44, 0xac, 0x0e, 0xb2, 0x01, 0x00, 0x45, 0x35, 0x23, 0x7c, 0x1e, 0x40, + 0x4e, 0x8e, 0x3f, 0x5e, 0xa7, 0x00, 0x48, 0xa0, 0x12, 0x7e, 0x1e, 0x40, + 0x80, 0x06, 0x46, 0xcf, 0x15, 0xb1, 0x01, 0x40, 0x43, 0x16, 0x00, 0x44, + 0x02, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0xda, 0x00, + 0x00, 0x45, 0x53, 0x23, 0x6c, 0x01, 0x00, 0xa3, 0xbd, 0x01, 0xa4, 0x75, + 0x45, 0x15, 0x23, 0xd9, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x3b, 0x4e, 0x5e, + 0x23, 0x16, 0x02, 0x00, 0x46, 0xad, 0x70, 0x6a, 0x01, 0x80, 0x28, 0x46, + 0xba, 0xde, 0x72, 0x01, 0x00, 0x4a, 0x5f, 0xb0, 0x6e, 0x01, 0x00, 0x46, + 0x52, 0x05, 0xb8, 0xa7, 0x00, 0x45, 0x35, 0x23, 0x68, 0x01, 0xc0, 0x00, + 0x80, 0x01, 0xff, 0x49, 0x98, 0xa5, 0x78, 0x1e, 0x00, 0x45, 0x20, 0x07, + 0x74, 0x1e, 0x40, 0x4e, 0x45, 0x75, 0x7a, 0x1e, 0x40, 0x48, 0x39, 0xab, + 0xe6, 0x1e, 0x00, 0x42, 0x5e, 0x01, 0xaf, 0x01, 0xc0, 0x00, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0xe8, 0x1e, 0x00, 0x49, 0x9f, 0x12, + 0xf0, 0x1e, 0x00, 0x45, 0x15, 0x23, 0xea, 0x1e, 0x00, 0x4a, 0x37, 0xab, + 0xec, 0x1e, 0x00, 0x45, 0x35, 0x23, 0xee, 0x1e, 0x40, 0x48, 0xb8, 0x23, + 0xdc, 0x00, 0x80, 0x1a, 0xaf, 0x01, 0xff, 0x47, 0xa1, 0x12, 0xe4, 0x1e, + 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x45, 0xf9, 0x38, 0x70, 0x01, 0x00, + 0x45, 0x15, 0x23, 0x14, 0x02, 0x40, 0x80, 0x01, 0xff, 0x04, 0x1a, 0x00, + 0x06, 0x45, 0x20, 0x07, 0x72, 0x1e, 0x40, 0x45, 0xf9, 0x38, 0xd7, 0x01, + 0x00, 0x45, 0xe8, 0x97, 0xd9, 0x01, 0x00, 0x45, 0x15, 0x23, 0xdb, 0x01, + 0x00, 0x46, 0xad, 0x70, 0xd5, 0x01, 0x40, 0x44, 0xe7, 0x6c, 0xd3, 0x01, + 0x00, 0x49, 0xd0, 0x04, 0xdb, 0x00, 0xc0, 0x00, 0x46, 0x1f, 0x07, 0x76, + 0x1e, 0x40, 0x06, 0x50, 0x00, 0x61, 0x44, 0x60, 0x2d, 0xde, 0x00, 0x80, + 0x4d, 0x04, 0x0e, 0x0b, 0x37, 0x47, 0x53, 0xd5, 0x2a, 0xa7, 0x00, 0x06, + 0x71, 0x07, 0x04, 0xfa, 0x28, 0xa7, 0x40, 0xe1, 0x6f, 0x2c, 0x80, 0x1e, + 0xe8, 0x8d, 0xa7, 0x00, 0x49, 0x14, 0x70, 0x7e, 0xa7, 0x00, 0xeb, 0xb0, + 0xa7, 0x00, 0xec, 0x80, 0xa7, 0x00, 0xed, 0x9c, 0x01, 0x00, 0xf4, 0xb1, + 0xa7, 0x00, 0xf6, 0x45, 0x02, 0x40, 0x44, 0x3f, 0xe4, 0x70, 0x2c, 0x40, + 0x44, 0x80, 0x11, 0xbc, 0x01, 0x00, 0x43, 0x00, 0x26, 0x84, 0x01, 0x00, + 0x43, 0x1f, 0x0a, 0xa7, 0x01, 0x40, 0x4c, 0xda, 0x28, 0x64, 0xa7, 0xc0, + 0x00, 0x52, 0x14, 0x2b, 0x66, 0xa7, 0x40, 0xa3, 0x31, 0xa4, 0x18, 0x44, + 0xac, 0x0e, 0xac, 0x01, 0x00, 0x4a, 0x9d, 0x6d, 0x6e, 0x1e, 0x00, 0x4e, + 0xa2, 0x0e, 0xae, 0x01, 0x00, 0x46, 0x52, 0x05, 0x66, 0x01, 0x40, 0x4e, + 0x8e, 0x3f, 0x3e, 0x02, 0x00, 0x03, 0x04, 0x0c, 0x01, 0xff, 0x45, 0x5c, + 0x00, 0x6a, 0x1e, 0x00, 0x45, 0x20, 0x07, 0x6c, 0x1e, 0x40, 0x44, 0xe7, + 0x6c, 0x64, 0x01, 0x00, 0x46, 0xfa, 0xc1, 0x62, 0x01, 0x00, 0x4f, 0xf1, + 0x6e, 0x70, 0x1e, 0x00, 0x4a, 0xc5, 0xae, 0x1a, 0x02, 0x40, 0x06, 0x50, + 0x00, 0x31, 0x47, 0xb5, 0xce, 0x8b, 0xa7, 0x00, 0xa3, 0x1d, 0x46, 0xf6, + 0xb0, 0x9e, 0x1e, 0x00, 0x48, 0xf0, 0xc6, 0xd8, 0xa7, 0x00, 0x05, 0x5e, + 0x07, 0x01, 0xff, 0x49, 0x0b, 0xb7, 0xae, 0xa7, 0x00, 0x50, 0x16, 0x66, + 0x4a, 0x02, 0x40, 0x43, 0xb6, 0x7b, 0x8f, 0x01, 0x00, 0x46, 0xb2, 0xca, + 0xac, 0xa7, 0x40, 0x45, 0xf9, 0x38, 0x5a, 0x01, 0x80, 0x5c, 0xa3, 0x3b, + 0xa4, 0x1b, 0x44, 0xac, 0x0e, 0xc5, 0xa7, 0x00, 0x4e, 0x4e, 0x43, 0xa8, + 0xa7, 0x00, 0xb3, 0x01, 0xff, 0x53, 0xf0, 0x49, 0xc9, 0xa7, 0x00, 0x49, + 0x3d, 0xc1, 0x7e, 0x2c, 0x40, 0x4e, 0x8e, 0x3f, 0xcc, 0xa7, 0x00, 0x03, + 0x04, 0x0c, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x60, 0x1e, 0x00, 0x45, 0x20, + 0x07, 0x62, 0x1e, 0xc0, 0x00, 0x4e, 0x35, 0x1e, 0x68, 0x1e, 0x40, 0x44, + 0xe7, 0x6c, 0x60, 0x01, 0x80, 0x12, 0x46, 0xfa, 0xc1, 0x5e, 0x01, 0x00, + 0x49, 0xd0, 0x04, 0x5c, 0x01, 0x00, 0x4a, 0xc5, 0xae, 0x18, 0x02, 0x40, + 0x4e, 0x35, 0x1e, 0x66, 0x1e, 0x40, 0x4e, 0x35, 0x1e, 0x64, 0x1e, 0x40, + 0x80, 0x26, 0x48, 0x48, 0xc3, 0xcb, 0xa7, 0x00, 0x08, 0xde, 0x14, 0x06, + 0x4a, 0x99, 0xb2, 0x5c, 0xa7, 0x40, 0x4a, 0x71, 0xa8, 0x3e, 0xa7, 0x00, + 0xe5, 0x8e, 0x01, 0x00, 0x46, 0x3e, 0xdc, 0xf5, 0xa7, 0x00, 0x46, 0x1e, + 0x29, 0xab, 0xa7, 0x40, 0x47, 0x9c, 0xb2, 0x5a, 0xa7, 0x00, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0x54, 0x01, 0x00, 0xa3, 0x3f, 0x02, + 0x3b, 0x01, 0x1e, 0x4e, 0x5e, 0x23, 0x12, 0x02, 0x00, 0x4a, 0x9d, 0x6d, + 0x5e, 0x1e, 0x00, 0x4e, 0x4e, 0x43, 0xa6, 0xa7, 0x00, 0x46, 0x52, 0x05, + 0x4c, 0x02, 0x00, 0x44, 0x8f, 0x17, 0x64, 0x2c, 0x40, 0x02, 0xc6, 0x00, + 0x06, 0x4a, 0x10, 0x23, 0x10, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x58, 0x1e, + 0x00, 0x45, 0x20, 0x07, 0x5a, 0x1e, 0xc0, 0x00, 0x4b, 0x53, 0x97, 0x5c, + 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0x58, 0x01, 0x00, 0x46, 0xfa, 0xc1, 0x56, + 0x01, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4f, 0x8d, 0x3f, 0x58, 0xa7, + 0x00, 0x58, 0x0e, 0x2b, 0x56, 0xa7, 0x40, 0x06, 0x50, 0x00, 0x06, 0x5a, + 0x00, 0x1d, 0xce, 0xa7, 0x40, 0x45, 0xf9, 0x38, 0x54, 0x1e, 0x00, 0x49, + 0x3a, 0x1e, 0x56, 0x1e, 0x00, 0x48, 0x30, 0xc6, 0x52, 0xa7, 0x00, 0x44, + 0xac, 0x0e, 0xa4, 0x01, 0x00, 0xb3, 0x01, 0xff, 0x4c, 0xff, 0x93, 0x54, + 0xa7, 0x00, 0x45, 0x53, 0x05, 0x63, 0x2c, 0xc0, 0x00, 0x52, 0x14, 0x2b, + 0x50, 0xa7, 0x40, 0x06, 0x50, 0x00, 0x24, 0xe9, 0xa2, 0x01, 0x00, 0x4b, + 0x5f, 0x9e, 0xc0, 0xa7, 0x00, 0x44, 0xcc, 0x7b, 0xb6, 0xa7, 0x00, 0xef, + 0x4e, 0xa7, 0x00, 0x04, 0xf7, 0x04, 0x04, 0xf5, 0x22, 0x02, 0x40, 0xe5, + 0x90, 0x01, 0x00, 0xef, 0x86, 0x01, 0x40, 0x45, 0xf9, 0x38, 0xd3, 0x00, + 0x00, 0x45, 0x53, 0x23, 0x4e, 0x01, 0x00, 0xa3, 0xe3, 0x01, 0xa4, 0xa8, + 0x01, 0x45, 0x15, 0x23, 0xd2, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x6e, 0x4e, + 0x5e, 0x23, 0x0e, 0x02, 0x00, 0x02, 0x13, 0x01, 0x58, 0xad, 0x38, 0x46, + 0xba, 0xde, 0xea, 0x01, 0x80, 0x2b, 0x46, 0x52, 0x05, 0xd8, 0x00, 0x80, + 0x1e, 0x45, 0x35, 0x23, 0xd5, 0x00, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, + 0xff, 0x45, 0xf9, 0x38, 0x4c, 0x1e, 0x00, 0x49, 0xb7, 0x23, 0x4e, 0x1e, + 0x00, 0x46, 0xad, 0x70, 0x2c, 0x02, 0x40, 0x4a, 0x97, 0xa5, 0xfe, 0x01, + 0x40, 0x4b, 0x53, 0x97, 0xec, 0x01, 0x40, 0x45, 0xae, 0x70, 0x4c, 0x01, + 0x80, 0x06, 0x4b, 0x2f, 0x23, 0x9f, 0x01, 0x40, 0x05, 0x19, 0x00, 0x01, + 0xff, 0x45, 0xf9, 0x38, 0x52, 0x1e, 0x00, 0x45, 0x15, 0x23, 0x50, 0x1e, + 0x40, 0x51, 0xc6, 0x5c, 0x4a, 0xa7, 0x00, 0x42, 0x1f, 0x00, 0x4c, 0xa7, + 0x40, 0x48, 0x39, 0xab, 0xce, 0x1e, 0x00, 0x42, 0x5e, 0x01, 0xa0, 0x01, + 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0xda, 0x1e, + 0x00, 0x49, 0x9f, 0x12, 0xe2, 0x1e, 0x00, 0x45, 0x15, 0x23, 0xdc, 0x1e, + 0x00, 0x4a, 0x37, 0xab, 0xde, 0x1e, 0x00, 0x45, 0x35, 0x23, 0xe0, 0x1e, + 0x40, 0x48, 0xb8, 0x23, 0xd6, 0x00, 0x80, 0x2b, 0xaf, 0x01, 0xff, 0x02, + 0xc6, 0x00, 0x11, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x45, 0xf9, 0x38, 0x50, + 0x01, 0x00, 0x45, 0x15, 0x23, 0x0c, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x2e, + 0x02, 0x80, 0x06, 0x45, 0x20, 0x07, 0xcc, 0x1e, 0x40, 0x4b, 0x53, 0x97, + 0x30, 0x02, 0x40, 0x4b, 0x53, 0x97, 0x2a, 0x02, 0x40, 0x44, 0xe7, 0x6c, + 0xd1, 0x01, 0x00, 0x49, 0xd0, 0x04, 0xd4, 0x00, 0xc0, 0x00, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0xd0, 0x1e, 0x00, 0x49, 0x9f, 0x12, + 0xd8, 0x1e, 0x00, 0x45, 0x15, 0x23, 0xd2, 0x1e, 0x00, 0x4a, 0x37, 0xab, + 0xd4, 0x1e, 0x00, 0x45, 0x35, 0x23, 0xd6, 0x1e, 0x40, 0x06, 0x50, 0x00, + 0x04, 0xea, 0xca, 0x01, 0x40, 0x45, 0xf9, 0x38, 0x43, 0x01, 0x00, 0xa3, + 0x45, 0xa4, 0x2c, 0x45, 0x15, 0x23, 0xf8, 0x01, 0x00, 0xac, 0x12, 0x4e, + 0x4e, 0x43, 0xa4, 0xa7, 0x00, 0x4e, 0x53, 0x7c, 0xcb, 0x01, 0x00, 0x45, + 0x35, 0x23, 0xd1, 0x00, 0x40, 0x48, 0xb2, 0x57, 0x9d, 0x01, 0x00, 0x49, + 0x9e, 0x6d, 0x48, 0x1e, 0x00, 0x4d, 0xef, 0x86, 0x20, 0x02, 0x40, 0x48, + 0x1e, 0x2b, 0x90, 0xa7, 0x00, 0x03, 0x04, 0x0c, 0x01, 0xff, 0x45, 0x5c, + 0x00, 0x44, 0x1e, 0x00, 0x45, 0x20, 0x07, 0x46, 0x1e, 0x40, 0x44, 0xe7, + 0x6c, 0x47, 0x01, 0x00, 0x46, 0xfa, 0xc1, 0x45, 0x01, 0x00, 0x4f, 0xf1, + 0x6e, 0x4a, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x1a, 0x05, 0x7e, 0x02, 0x01, + 0xff, 0x48, 0x88, 0xc2, 0xd6, 0xa7, 0x00, 0x07, 0xea, 0xcd, 0x01, 0xff, + 0x42, 0x60, 0x07, 0xfa, 0x1e, 0x00, 0xf6, 0xfc, 0x1e, 0x40, 0x45, 0xf9, + 0x38, 0x3e, 0x1e, 0x00, 0x04, 0x03, 0x0c, 0x06, 0x44, 0xac, 0x0e, 0x6e, + 0x2c, 0x40, 0x45, 0x5c, 0x00, 0x40, 0x1e, 0x00, 0x45, 0x20, 0x07, 0x42, + 0x1e, 0x40, 0x06, 0x50, 0x00, 0x11, 0x45, 0x43, 0xe4, 0xda, 0xa7, 0x80, + 0x04, 0xea, 0xc7, 0x01, 0x40, 0x4c, 0xda, 0x28, 0xdc, 0xa7, 0x40, 0x45, + 0xf9, 0x38, 0x39, 0x01, 0x00, 0xa2, 0x56, 0xa3, 0x42, 0x02, 0x3b, 0x01, + 0x2b, 0x4b, 0xe9, 0x9c, 0x48, 0xa7, 0x00, 0x4a, 0x9d, 0x6d, 0x3a, 0x1e, + 0x00, 0x07, 0x7d, 0x02, 0x0f, 0xb3, 0x01, 0xff, 0x4d, 0x54, 0x7c, 0xc8, + 0x01, 0x00, 0x45, 0x53, 0x05, 0x41, 0x01, 0x40, 0x43, 0x23, 0x0a, 0x3f, + 0x01, 0x00, 0x45, 0x35, 0x23, 0x62, 0x2c, 0x40, 0x47, 0xa1, 0x12, 0x36, + 0x1e, 0x80, 0x06, 0x48, 0x63, 0xa9, 0x60, 0x2c, 0x40, 0x4b, 0x53, 0x97, + 0x38, 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0x3d, 0x01, 0x00, 0x46, 0xfa, 0xc1, + 0x3b, 0x01, 0x00, 0x4f, 0xf1, 0x6e, 0x3c, 0x1e, 0x40, 0x42, 0x17, 0x00, + 0x3d, 0x02, 0x00, 0x43, 0xdd, 0xa3, 0xad, 0xa7, 0x40, 0x06, 0x50, 0x00, + 0x01, 0xff, 0x45, 0xf9, 0x38, 0x30, 0x1e, 0x00, 0xa3, 0x33, 0xa4, 0x1f, + 0x44, 0xac, 0x0e, 0x98, 0x01, 0x00, 0x4a, 0x9d, 0x6d, 0x34, 0x1e, 0x00, + 0x4e, 0x4e, 0x43, 0xa2, 0xa7, 0x00, 0x46, 0x52, 0x05, 0x40, 0xa7, 0xc0, + 0x00, 0x54, 0x88, 0x3f, 0x44, 0xa7, 0x40, 0x48, 0x1e, 0x2b, 0x69, 0x2c, + 0x00, 0x4e, 0x8e, 0x3f, 0x42, 0xa7, 0x00, 0x48, 0xa0, 0x12, 0x32, 0x1e, + 0x40, 0x44, 0xe7, 0x6c, 0xe8, 0x01, 0x00, 0x46, 0xfa, 0xc1, 0x36, 0x01, + 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa3, 0x06, 0x46, 0x52, 0x05, 0x48, + 0x02, 0x40, 0x49, 0xd0, 0x04, 0x34, 0x01, 0x00, 0x4b, 0xca, 0x4f, 0xb2, + 0xa7, 0x40, 0x06, 0x50, 0x00, 0x26, 0x07, 0x15, 0x70, 0x0a, 0x43, 0x1b, + 0x05, 0x96, 0x01, 0x00, 0xf3, 0x6c, 0xa7, 0x40, 0xe4, 0x79, 0xa7, 0x00, + 0xe6, 0x7b, 0xa7, 0x00, 0xe7, 0x7d, 0xa7, 0x00, 0xf2, 0x82, 0xa7, 0x00, + 0xf3, 0x84, 0xa7, 0x00, 0xf4, 0x86, 0xa7, 0x40, 0x45, 0xf9, 0x38, 0xcd, + 0x00, 0x00, 0x45, 0x53, 0x23, 0x2c, 0x01, 0x00, 0xa3, 0x59, 0xa4, 0x31, + 0x45, 0x15, 0x23, 0xcc, 0x00, 0x00, 0x4a, 0x37, 0xab, 0xc8, 0x1e, 0x00, + 0x4e, 0x5e, 0x23, 0x0a, 0x02, 0x00, 0x46, 0xad, 0x70, 0x2a, 0x01, 0x00, + 0x46, 0xba, 0xde, 0x2e, 0x01, 0x00, 0x46, 0x52, 0x05, 0x97, 0x01, 0x00, + 0x45, 0x35, 0x23, 0x28, 0x01, 0xc0, 0x00, 0x46, 0x1f, 0x07, 0x2c, 0x1e, + 0x40, 0x48, 0xb8, 0x23, 0xcf, 0x00, 0x80, 0x19, 0xaf, 0x01, 0xff, 0x02, + 0xc6, 0x00, 0x06, 0x4a, 0x10, 0x23, 0x08, 0x02, 0x40, 0x45, 0x5c, 0x00, + 0x30, 0x01, 0x00, 0x45, 0x20, 0x07, 0xca, 0x1e, 0x40, 0x4a, 0x97, 0xa5, + 0x2e, 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0xcf, 0x01, 0x00, 0x49, 0xd0, 0x04, + 0xce, 0x00, 0x40, 0x06, 0x50, 0x00, 0x12, 0x45, 0x3f, 0xdc, 0x75, 0x2c, + 0x00, 0x43, 0x4c, 0x0a, 0x26, 0xa7, 0x00, 0x44, 0x21, 0xf3, 0xf6, 0x01, + 0x40, 0x4b, 0xbb, 0x99, 0x2a, 0x1e, 0x00, 0xa3, 0x2b, 0xa4, 0x0c, 0x44, + 0xac, 0x0e, 0xaa, 0xa7, 0x00, 0x46, 0x52, 0x05, 0x26, 0x01, 0x40, 0x48, + 0x1e, 0x2b, 0x67, 0x2c, 0x00, 0x48, 0xb8, 0x23, 0x26, 0x1e, 0x00, 0x03, + 0x04, 0x0c, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x22, 0x1e, 0x00, 0x45, 0x20, + 0x07, 0x24, 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0x1e, 0x02, 0x00, 0x46, 0xfa, + 0xc1, 0x28, 0x1e, 0x00, 0x49, 0xd0, 0x04, 0x24, 0x01, 0x40, 0x06, 0x50, + 0x00, 0x23, 0x44, 0x00, 0x21, 0x94, 0x01, 0x00, 0x42, 0x22, 0x00, 0xa2, + 0x01, 0x00, 0x07, 0xcf, 0x28, 0x01, 0xff, 0xe1, 0xba, 0xa7, 0x00, 0xe9, + 0xbc, 0xa7, 0x00, 0x44, 0x55, 0x03, 0x41, 0x02, 0x00, 0xf5, 0xbe, 0xa7, + 0x40, 0x45, 0xf9, 0x38, 0xf4, 0x01, 0x00, 0x45, 0x53, 0x23, 0x1e, 0x01, + 0x00, 0xa3, 0x1e, 0x49, 0x3a, 0x1e, 0x20, 0x01, 0x00, 0x44, 0xac, 0x0e, + 0x93, 0x01, 0x00, 0x46, 0xad, 0x70, 0x20, 0x1e, 0x00, 0x4e, 0x4e, 0x43, + 0xa0, 0xa7, 0x00, 0x46, 0x52, 0x05, 0xe4, 0x01, 0x40, 0x44, 0xe7, 0x6c, + 0xe6, 0x01, 0x00, 0x46, 0xfa, 0xc1, 0x22, 0x01, 0x00, 0x49, 0xd0, 0x04, + 0x1c, 0x01, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x3a, 0x1e, 0x1e, + 0x1e, 0x00, 0x44, 0xac, 0x0e, 0x91, 0x01, 0x00, 0x46, 0x52, 0x05, 0x98, + 0xa7, 0x40, 0x06, 0x50, 0x00, 0x3b, 0x0e, 0x2b, 0x78, 0x2b, 0x42, 0x1d, + 0x01, 0x4a, 0x01, 0x00, 0x42, 0xa4, 0x02, 0xa9, 0x01, 0x00, 0xf4, 0x6a, + 0xa7, 0x80, 0x16, 0x42, 0x54, 0x28, 0xb7, 0x01, 0xc0, 0x00, 0x80, 0x01, + 0xff, 0x48, 0x58, 0x13, 0xb8, 0x01, 0x00, 0x4a, 0xe3, 0x97, 0xee, 0x01, + 0x40, 0xe8, 0xd0, 0x00, 0x40, 0x42, 0x9e, 0x01, 0x24, 0xa7, 0x00, 0x43, + 0x68, 0x00, 0x22, 0xa7, 0x40, 0x45, 0xf9, 0x38, 0xc9, 0x00, 0x00, 0x45, + 0x53, 0x23, 0x14, 0x01, 0x00, 0xa3, 0x64, 0xa4, 0x43, 0x45, 0x15, 0x23, + 0xc8, 0x00, 0x00, 0x4a, 0x37, 0xab, 0xba, 0x1e, 0x00, 0x4e, 0x5e, 0x23, + 0x06, 0x02, 0x00, 0x46, 0xad, 0x70, 0x12, 0x01, 0x80, 0x19, 0x46, 0xba, + 0xde, 0x18, 0x01, 0x00, 0x46, 0x52, 0x05, 0x46, 0x02, 0x00, 0x45, 0x35, + 0x23, 0xbc, 0x1e, 0xc0, 0x00, 0x46, 0x1f, 0x07, 0x1a, 0x1e, 0x40, 0x05, + 0x19, 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0x16, 0x1e, 0x00, 0x45, 0x15, + 0x23, 0x14, 0x1e, 0x40, 0x48, 0xb8, 0x23, 0xcb, 0x00, 0x00, 0xaf, 0x01, + 0xff, 0x02, 0xc6, 0x00, 0x06, 0x4a, 0x10, 0x23, 0x04, 0x02, 0x40, 0x45, + 0x5c, 0x00, 0x16, 0x01, 0x00, 0x45, 0x20, 0x07, 0xb8, 0x1e, 0x40, 0x44, + 0xe7, 0x6c, 0x1a, 0x01, 0x00, 0x46, 0xfa, 0xc1, 0x28, 0x02, 0x80, 0x32, + 0x49, 0xd0, 0x04, 0xca, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x04, 0x1a, + 0x00, 0x06, 0x45, 0x20, 0x07, 0x18, 0x1e, 0x40, 0x45, 0xf9, 0x38, 0xbe, + 0x1e, 0x00, 0x49, 0x9f, 0x12, 0xc6, 0x1e, 0x00, 0x45, 0x15, 0x23, 0xc0, + 0x1e, 0x00, 0x4a, 0x37, 0xab, 0xc2, 0x1e, 0x00, 0x45, 0x35, 0x23, 0xc4, + 0x1e, 0x40, 0x4a, 0xab, 0xa5, 0x1c, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x1b, + 0x06, 0x3c, 0x01, 0x0b, 0xfa, 0xf1, 0x01, 0xc0, 0x00, 0x4b, 0xe2, 0x97, + 0xc4, 0x01, 0x40, 0x45, 0x11, 0x4a, 0xd2, 0xa7, 0x00, 0x44, 0x68, 0xa4, + 0xd4, 0xa7, 0x40, 0xa3, 0x3d, 0x04, 0x03, 0x0c, 0x2d, 0x44, 0xac, 0x0e, + 0x8a, 0x01, 0x00, 0x4a, 0x9d, 0x6d, 0x0e, 0x1e, 0x00, 0xb3, 0x06, 0x46, + 0xa6, 0xe0, 0x8b, 0x01, 0x40, 0x53, 0xf0, 0x49, 0xc7, 0xa7, 0x00, 0x4d, + 0x83, 0x85, 0xf2, 0x01, 0x80, 0x06, 0x45, 0x53, 0x05, 0x10, 0x01, 0x40, + 0x4b, 0xe2, 0x97, 0xc5, 0x01, 0x40, 0x45, 0x5c, 0x00, 0x0a, 0x1e, 0x00, + 0x45, 0x20, 0x07, 0x0c, 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0x0e, 0x01, 0x00, + 0x46, 0xfa, 0xc1, 0x10, 0x1e, 0x00, 0x4f, 0xf1, 0x6e, 0x12, 0x1e, 0x40, + 0x06, 0x50, 0x00, 0x1f, 0x42, 0x49, 0x00, 0xb3, 0xa7, 0x00, 0x4f, 0x0e, + 0x70, 0xd0, 0xa7, 0x00, 0x42, 0x10, 0x00, 0x6e, 0xa7, 0x00, 0x48, 0xe8, + 0xcb, 0x2c, 0xa7, 0xc0, 0x00, 0x4b, 0xed, 0x97, 0x2e, 0xa7, 0x40, 0x45, + 0xf9, 0x38, 0x06, 0x01, 0x00, 0x43, 0x16, 0x00, 0x92, 0xa7, 0x00, 0xa3, + 0x18, 0x49, 0x3a, 0x1e, 0x0a, 0x01, 0x00, 0x44, 0xac, 0x0e, 0x87, 0x01, + 0x00, 0x4c, 0xf3, 0x56, 0xc4, 0xa7, 0x00, 0x46, 0x52, 0x05, 0x3b, 0x02, + 0x40, 0x44, 0xe7, 0x6c, 0x0c, 0x01, 0x00, 0x46, 0xfa, 0xc1, 0xc7, 0x00, + 0x80, 0x06, 0x49, 0xd0, 0x04, 0x08, 0x01, 0x40, 0x4a, 0x97, 0xa5, 0x08, + 0x1e, 0x40, 0x06, 0x50, 0x00, 0x0c, 0x43, 0x94, 0x0f, 0xb4, 0xa7, 0x00, + 0x47, 0x6f, 0xd5, 0x46, 0xa7, 0x40, 0x04, 0x03, 0x0c, 0x1e, 0x48, 0x30, + 0xc6, 0x96, 0xa7, 0x00, 0x44, 0xac, 0x0e, 0x81, 0x01, 0x00, 0x4a, 0x9d, + 0x6d, 0x06, 0x1e, 0x00, 0x46, 0x52, 0x05, 0x43, 0x02, 0x00, 0x46, 0xa6, + 0xe0, 0x82, 0x01, 0x40, 0x45, 0x5c, 0x00, 0x02, 0x1e, 0x00, 0x45, 0x20, + 0x07, 0x04, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x43, 0xe1, 0x32, 0xa7, 0x00, + 0xe5, 0xc6, 0x00, 0x80, 0x29, 0x48, 0x48, 0xc6, 0x89, 0x01, 0x00, 0x44, + 0x3f, 0xe4, 0x6d, 0x2c, 0x00, 0x4a, 0x61, 0xae, 0xc2, 0xa7, 0x00, 0xef, 0x34, 0xa7, 0x00, 0xf5, 0x36, 0xa7, 0x00, 0xf6, 0x38, 0xa7, 0x80, 0x04, - 0xf9, 0x3c, 0xa7, 0x40, 0x54, 0xf3, 0x3e, 0x3a, 0xa7, 0x40, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0xfc, 0x01, 0x00, 0x46, 0x04, 0x6f, - 0xe2, 0x01, 0x40, 0x45, 0x29, 0x38, 0xc1, 0x00, 0x00, 0x45, 0xcb, 0x22, - 0x02, 0x01, 0x80, 0xa2, 0x01, 0xa3, 0x70, 0xa4, 0x41, 0x45, 0x8d, 0x22, - 0xc0, 0x00, 0x00, 0x4a, 0xfb, 0xa8, 0xa2, 0x1e, 0x00, 0x4e, 0xd6, 0x22, - 0x02, 0x02, 0x00, 0x46, 0x04, 0x6f, 0x00, 0x01, 0x00, 0x46, 0xc2, 0xdb, - 0x04, 0x01, 0x00, 0x05, 0xf7, 0x07, 0x0c, 0x46, 0x27, 0x05, 0x3a, 0x02, - 0x00, 0x45, 0xad, 0x22, 0xc3, 0x00, 0x40, 0x45, 0x5c, 0x00, 0xc5, 0x00, - 0x80, 0x06, 0x45, 0xf5, 0x06, 0x00, 0x1e, 0x40, 0x4a, 0x5b, 0xa3, 0xfa, - 0x01, 0x40, 0x48, 0x30, 0x23, 0xc4, 0x00, 0x80, 0x20, 0xaf, 0x01, 0xff, - 0x02, 0xc6, 0x00, 0x06, 0x4a, 0x88, 0x22, 0x00, 0x02, 0x40, 0x45, 0x5c, - 0x00, 0x26, 0x02, 0x80, 0x06, 0x45, 0xf5, 0x06, 0xa0, 0x1e, 0x40, 0x4b, - 0x59, 0x95, 0xe0, 0x01, 0x40, 0x4b, 0x59, 0x95, 0xde, 0x01, 0x40, 0x44, - 0x4d, 0x6b, 0xcd, 0x01, 0x00, 0x49, 0xa5, 0x04, 0xc2, 0x00, 0xc0, 0x00, - 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0xa4, 0x1e, 0x00, 0x49, - 0x50, 0x12, 0xac, 0x1e, 0x00, 0x45, 0x8d, 0x22, 0xa6, 0x1e, 0x00, 0x4a, - 0xfb, 0xa8, 0xa8, 0x1e, 0x00, 0x45, 0xad, 0x22, 0xaa, 0x1e, 0x40, 0x05, - 0x19, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0xae, 0x1e, 0x00, 0x49, 0x50, - 0x12, 0xb6, 0x1e, 0x00, 0x45, 0x8d, 0x22, 0xb0, 0x1e, 0x00, 0x4a, 0xfb, - 0xa8, 0xb2, 0x1e, 0x00, 0x45, 0xad, 0x22, 0xb4, 0x1e, 0x40, 0x80, 0x01, - 0xff, 0x46, 0xeb, 0x07, 0x17, 0xf3, 0x01, 0x49, 0xc8, 0xbe, 0x1c, 0xf3, - 0x41, 0x02, 0x8c, 0x09, 0x06, 0x46, 0xf7, 0x99, 0xbe, 0x20, 0x40, 0x80, - 0x0d, 0x46, 0x05, 0xce, 0xab, 0x2a, 0xc0, 0x00, 0x4c, 0x51, 0x28, 0xad, - 0x2a, 0x40, 0xa2, 0xbd, 0x04, 0x46, 0xe7, 0x02, 0xef, 0x25, 0x00, 0x49, - 0x20, 0x38, 0xd9, 0x27, 0x00, 0x06, 0x4e, 0x88, 0xa0, 0x04, 0x56, 0x7d, - 0x34, 0x1e, 0x2a, 0x00, 0xaf, 0xf0, 0x03, 0x07, 0x1e, 0xd2, 0xdf, 0x03, - 0x04, 0xaf, 0x05, 0xce, 0x03, 0xb4, 0x17, 0x47, 0x16, 0xd4, 0xd8, 0x27, - 0x00, 0x07, 0x04, 0xd5, 0x01, 0xff, 0x46, 0xe7, 0x02, 0xe1, 0xf7, 0x01, - 0x46, 0xab, 0x05, 0xe8, 0xf7, 0x41, 0x5b, 0xc9, 0x1c, 0xfc, 0x2a, 0x00, - 0x03, 0xd1, 0x09, 0x9e, 0x03, 0x0a, 0x9d, 0xb1, 0x01, 0xff, 0xa3, 0xe8, - 0x02, 0x09, 0x42, 0x25, 0xb4, 0x02, 0xac, 0xcb, 0x01, 0xb2, 0xbc, 0x01, - 0xb3, 0x4e, 0x06, 0x6d, 0x02, 0x06, 0x4b, 0x95, 0xa2, 0x41, 0xce, 0x41, - 0x0f, 0x3a, 0x6c, 0x38, 0x05, 0xc3, 0x00, 0x1f, 0x06, 0xc8, 0x00, 0x06, - 0x48, 0x66, 0x78, 0x1c, 0xce, 0x41, 0x43, 0x3e, 0x17, 0x24, 0xce, 0x01, - 0xa3, 0x01, 0xff, 0x45, 0xcf, 0x0a, 0x27, 0xce, 0x01, 0x45, 0x5a, 0xe7, - 0x26, 0xce, 0x41, 0x43, 0x3e, 0x17, 0x1a, 0xce, 0x01, 0xa3, 0x01, 0xff, - 0x45, 0xcf, 0x0a, 0x1b, 0xce, 0x01, 0x45, 0x5a, 0xe7, 0x1d, 0xce, 0x41, - 0xed, 0x21, 0xce, 0x01, 0xf7, 0x31, 0xce, 0x41, 0x05, 0x75, 0x33, 0x5c, - 0x43, 0x2a, 0x10, 0x29, 0xce, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x35, 0x8d, - 0x01, 0xff, 0x42, 0x36, 0xf0, 0x50, 0xce, 0x81, 0x25, 0xd2, 0x4f, 0xce, + 0xf9, 0x3c, 0xa7, 0x40, 0x54, 0xec, 0x3f, 0x3a, 0xa7, 0x40, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0xfc, 0x01, 0x00, 0x46, 0xad, 0x70, + 0xe2, 0x01, 0x40, 0x45, 0xf9, 0x38, 0xc1, 0x00, 0x00, 0x45, 0x53, 0x23, + 0x02, 0x01, 0x80, 0xa2, 0x01, 0xa3, 0x70, 0xa4, 0x41, 0x45, 0x15, 0x23, + 0xc0, 0x00, 0x00, 0x4a, 0x37, 0xab, 0xa2, 0x1e, 0x00, 0x4e, 0x5e, 0x23, + 0x02, 0x02, 0x00, 0x46, 0xad, 0x70, 0x00, 0x01, 0x00, 0x46, 0xba, 0xde, + 0x04, 0x01, 0x00, 0x05, 0x22, 0x08, 0x0c, 0x46, 0x52, 0x05, 0x3a, 0x02, + 0x00, 0x45, 0x35, 0x23, 0xc3, 0x00, 0x40, 0x45, 0x5c, 0x00, 0xc5, 0x00, + 0x80, 0x06, 0x45, 0x20, 0x07, 0x00, 0x1e, 0x40, 0x4a, 0x97, 0xa5, 0xfa, + 0x01, 0x40, 0x48, 0xb8, 0x23, 0xc4, 0x00, 0x80, 0x20, 0xaf, 0x01, 0xff, + 0x02, 0xc6, 0x00, 0x06, 0x4a, 0x10, 0x23, 0x00, 0x02, 0x40, 0x45, 0x5c, + 0x00, 0x26, 0x02, 0x80, 0x06, 0x45, 0x20, 0x07, 0xa0, 0x1e, 0x40, 0x4b, + 0x53, 0x97, 0xe0, 0x01, 0x40, 0x4b, 0x53, 0x97, 0xde, 0x01, 0x40, 0x44, + 0xe7, 0x6c, 0xcd, 0x01, 0x00, 0x49, 0xd0, 0x04, 0xc2, 0x00, 0xc0, 0x00, + 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0xa4, 0x1e, 0x00, 0x49, + 0x9f, 0x12, 0xac, 0x1e, 0x00, 0x45, 0x15, 0x23, 0xa6, 0x1e, 0x00, 0x4a, + 0x37, 0xab, 0xa8, 0x1e, 0x00, 0x45, 0x35, 0x23, 0xaa, 0x1e, 0x40, 0x05, + 0x19, 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0xae, 0x1e, 0x00, 0x49, 0x9f, + 0x12, 0xb6, 0x1e, 0x00, 0x45, 0x15, 0x23, 0xb0, 0x1e, 0x00, 0x4a, 0x37, + 0xab, 0xb2, 0x1e, 0x00, 0x45, 0x35, 0x23, 0xb4, 0x1e, 0x40, 0x80, 0x01, + 0xff, 0x46, 0x16, 0x08, 0x17, 0xf3, 0x01, 0x49, 0x4f, 0xc1, 0x1c, 0xf3, + 0x41, 0x02, 0xdb, 0x09, 0x06, 0x46, 0x12, 0x9c, 0xbe, 0x20, 0x40, 0x80, + 0x0d, 0x46, 0xdf, 0xd0, 0xab, 0x2a, 0xc0, 0x00, 0x4c, 0xf2, 0x28, 0xad, + 0x2a, 0x40, 0xa2, 0xbd, 0x04, 0x46, 0x12, 0x03, 0xef, 0x25, 0x00, 0x49, + 0xf0, 0x38, 0xd9, 0x27, 0x00, 0x06, 0x0b, 0x8a, 0xa0, 0x04, 0x56, 0x4d, + 0x35, 0x1e, 0x2a, 0x00, 0xaf, 0xf0, 0x03, 0x07, 0xf1, 0xd4, 0xdf, 0x03, + 0x04, 0xda, 0x05, 0xce, 0x03, 0xb4, 0x17, 0x47, 0xe9, 0xd6, 0xd8, 0x27, + 0x00, 0x07, 0xde, 0xd7, 0x01, 0xff, 0x46, 0x12, 0x03, 0xe1, 0xf7, 0x01, + 0x46, 0xd6, 0x05, 0xe8, 0xf7, 0x41, 0x5b, 0x6b, 0x1d, 0xfc, 0x2a, 0x00, + 0x03, 0x20, 0x0a, 0x9e, 0x03, 0x0a, 0xf7, 0xb3, 0x01, 0xff, 0xa3, 0xe8, + 0x02, 0x09, 0xe3, 0x25, 0xb4, 0x02, 0xac, 0xcb, 0x01, 0xb2, 0xbc, 0x01, + 0xb3, 0x4e, 0x06, 0x6d, 0x02, 0x06, 0x4b, 0xd1, 0xa4, 0x41, 0xce, 0x41, + 0x0f, 0xe3, 0x6d, 0x38, 0x05, 0xc3, 0x00, 0x1f, 0x06, 0xc8, 0x00, 0x06, + 0x48, 0xc7, 0x79, 0x1c, 0xce, 0x41, 0x43, 0xaa, 0x17, 0x24, 0xce, 0x01, + 0xa3, 0x01, 0xff, 0x45, 0x1e, 0x0b, 0x27, 0xce, 0x01, 0x45, 0x7e, 0xea, + 0x26, 0xce, 0x41, 0x43, 0xaa, 0x17, 0x1a, 0xce, 0x01, 0xa3, 0x01, 0xff, + 0x45, 0x1e, 0x0b, 0x1b, 0xce, 0x01, 0x45, 0x7e, 0xea, 0x1d, 0xce, 0x41, + 0xed, 0x21, 0xce, 0x01, 0xf7, 0x31, 0xce, 0x41, 0x05, 0x34, 0x07, 0x5c, + 0x43, 0x79, 0x10, 0x29, 0xce, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x35, 0x8d, + 0x01, 0xff, 0x42, 0x89, 0xf3, 0x50, 0xce, 0x81, 0x25, 0xd2, 0x4f, 0xce, 0x81, 0x12, 0xd3, 0x4d, 0xce, 0x81, 0x09, 0xd4, 0x49, 0xce, 0xc1, 0x00, 0xd5, 0x47, 0xce, 0x41, 0xd4, 0x4a, 0xce, 0x41, 0xd3, 0x4e, 0xce, 0xc1, - 0x00, 0xd4, 0x4b, 0xce, 0xc1, 0x00, 0xd5, 0x48, 0xce, 0x41, 0x42, 0xa6, - 0xf1, 0x4c, 0xce, 0x41, 0x48, 0x94, 0x73, 0x3a, 0xce, 0x01, 0x05, 0xc3, - 0x00, 0x06, 0x4e, 0x58, 0x7a, 0x28, 0xce, 0x41, 0x48, 0x94, 0x73, 0x36, - 0xce, 0x01, 0x45, 0x11, 0x0d, 0x39, 0xce, 0x41, 0x4e, 0x60, 0x78, 0x2d, - 0xce, 0x01, 0x4e, 0xc0, 0x7c, 0x23, 0xce, 0x41, 0x54, 0x43, 0x3f, 0x35, - 0xce, 0x01, 0x48, 0x4a, 0xc4, 0x25, 0xce, 0x41, 0x47, 0xe1, 0xcd, 0x1e, - 0xce, 0x01, 0x05, 0x14, 0x01, 0x01, 0xff, 0x0f, 0x3a, 0x6c, 0x4f, 0x05, - 0xc3, 0x00, 0x2e, 0x06, 0xc8, 0x00, 0x06, 0x48, 0x66, 0x78, 0x3c, 0xce, - 0x41, 0xa1, 0x0f, 0xa3, 0x01, 0xff, 0x45, 0xcf, 0x0a, 0x44, 0xce, 0x01, - 0x45, 0x5a, 0xe7, 0x46, 0xce, 0x41, 0x52, 0x6a, 0x52, 0x37, 0xce, 0x01, - 0x42, 0xe9, 0x02, 0x43, 0xce, 0xc1, 0x00, 0x4a, 0x5f, 0xa4, 0x45, 0xce, - 0x41, 0xa1, 0x0f, 0xa3, 0x01, 0xff, 0x45, 0xcf, 0x0a, 0x3d, 0xce, 0x01, - 0x45, 0x5a, 0xe7, 0x3f, 0xce, 0x41, 0x51, 0x17, 0x5b, 0x2e, 0xce, 0x01, - 0x42, 0xe9, 0x02, 0x3e, 0xce, 0x41, 0xed, 0x30, 0xce, 0x01, 0xf7, 0x42, + 0x00, 0xd4, 0x4b, 0xce, 0xc1, 0x00, 0xd5, 0x48, 0xce, 0x41, 0x42, 0xf0, + 0xf4, 0x4c, 0xce, 0x41, 0x48, 0x1f, 0x75, 0x3a, 0xce, 0x01, 0x05, 0xc3, + 0x00, 0x06, 0x4e, 0xb9, 0x7b, 0x28, 0xce, 0x41, 0x48, 0x1f, 0x75, 0x36, + 0xce, 0x01, 0x45, 0x60, 0x0d, 0x39, 0xce, 0x41, 0x4e, 0xc1, 0x79, 0x2d, + 0xce, 0x01, 0x4e, 0x2f, 0x7e, 0x23, 0xce, 0x41, 0x54, 0x3c, 0x40, 0x35, + 0xce, 0x01, 0x48, 0xe8, 0xc6, 0x25, 0xce, 0x41, 0x47, 0xbb, 0xd0, 0x1e, + 0xce, 0x01, 0x05, 0x14, 0x01, 0x01, 0xff, 0x0f, 0xe3, 0x6d, 0x4f, 0x05, + 0xc3, 0x00, 0x2e, 0x06, 0xc8, 0x00, 0x06, 0x48, 0xc7, 0x79, 0x3c, 0xce, + 0x41, 0xa1, 0x0f, 0xa3, 0x01, 0xff, 0x45, 0x1e, 0x0b, 0x44, 0xce, 0x01, + 0x45, 0x7e, 0xea, 0x46, 0xce, 0x41, 0x52, 0xb3, 0x53, 0x37, 0xce, 0x01, + 0x42, 0x14, 0x03, 0x43, 0xce, 0xc1, 0x00, 0x4a, 0x9b, 0xa6, 0x45, 0xce, + 0x41, 0xa1, 0x0f, 0xa3, 0x01, 0xff, 0x45, 0x1e, 0x0b, 0x3d, 0xce, 0x01, + 0x45, 0x7e, 0xea, 0x3f, 0xce, 0x41, 0x51, 0x82, 0x5c, 0x2e, 0xce, 0x01, + 0x42, 0x14, 0x03, 0x3e, 0xce, 0x41, 0xed, 0x30, 0xce, 0x01, 0xf7, 0x42, 0xce, 0x41, 0x06, 0x13, 0x01, 0x1f, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x44, 0xc3, 0x00, 0x3b, 0xce, 0x81, 0x0d, 0x45, 0xc8, 0x00, 0x2b, 0xce, 0xc1, - 0x00, 0x50, 0x2f, 0x43, 0x2a, 0xce, 0x41, 0x4f, 0xd7, 0x38, 0x38, 0xce, + 0x00, 0x50, 0x3c, 0x44, 0x2a, 0xce, 0x41, 0x4f, 0xa7, 0x39, 0x38, 0xce, 0x41, 0x44, 0xc3, 0x00, 0x22, 0xce, 0x01, 0x45, 0xc8, 0x00, 0x2c, 0xce, - 0x41, 0x09, 0x19, 0xb6, 0x18, 0x47, 0x95, 0x73, 0x1f, 0xce, 0xc1, 0x00, - 0x06, 0x50, 0x00, 0x01, 0xff, 0x4a, 0x17, 0xab, 0x20, 0xce, 0x01, 0x4a, - 0x99, 0xb0, 0x40, 0xce, 0x41, 0xeb, 0x2f, 0xce, 0x01, 0xf8, 0x32, 0xce, - 0x01, 0xf9, 0x33, 0xce, 0x01, 0x4f, 0x8d, 0x73, 0x34, 0xce, 0x41, 0x5d, - 0xa6, 0x0b, 0x3c, 0x0b, 0x01, 0x5f, 0x7b, 0x11, 0x3e, 0x0b, 0x41, 0x46, - 0xe7, 0x02, 0x34, 0xf5, 0x01, 0x46, 0xab, 0x05, 0xe5, 0xf7, 0x41, 0x46, - 0xe7, 0x02, 0xe3, 0xf7, 0x01, 0x46, 0xab, 0x05, 0xea, 0xf7, 0x41, 0x03, - 0xc4, 0x07, 0x17, 0x06, 0x18, 0x1c, 0x01, 0xff, 0x46, 0xe7, 0x02, 0xe0, - 0xf7, 0x01, 0x47, 0x88, 0x43, 0x36, 0xf5, 0x01, 0x46, 0xab, 0x05, 0xe7, - 0xf7, 0x41, 0x5d, 0xdf, 0x14, 0x3d, 0x0b, 0x01, 0x5f, 0x5c, 0x11, 0x3f, - 0x0b, 0x41, 0x46, 0xe7, 0x02, 0xe2, 0xf7, 0x01, 0x46, 0xab, 0x05, 0xe9, - 0xf7, 0x41, 0x04, 0x16, 0x8b, 0x11, 0x05, 0x5f, 0xe7, 0x01, 0xff, 0x46, - 0xe7, 0x02, 0xe4, 0xf7, 0x01, 0x46, 0xab, 0x05, 0xeb, 0xf7, 0x41, 0x46, - 0xe7, 0x02, 0x35, 0xf5, 0x01, 0x47, 0x88, 0x43, 0x37, 0xf5, 0x01, 0x46, - 0xab, 0x05, 0xe6, 0xf7, 0x41, 0x51, 0x92, 0x57, 0xcc, 0x0e, 0x00, 0x06, - 0xc4, 0x06, 0x8a, 0x04, 0x48, 0x45, 0x29, 0xaf, 0x0e, 0x00, 0x03, 0x3a, - 0x70, 0xf3, 0x03, 0x45, 0xcb, 0xe4, 0xc6, 0x0e, 0x00, 0x07, 0xc1, 0x05, - 0x92, 0x01, 0x49, 0x09, 0xba, 0xcd, 0x0e, 0x00, 0xb3, 0x74, 0x09, 0x69, - 0xbd, 0x57, 0x0b, 0xd1, 0x75, 0x06, 0x48, 0x02, 0xca, 0xce, 0x0e, 0x40, + 0x41, 0x09, 0x6a, 0xb8, 0x18, 0x47, 0x20, 0x75, 0x1f, 0xce, 0xc1, 0x00, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x4a, 0x71, 0xad, 0x20, 0xce, 0x01, 0x4a, + 0xe9, 0xb2, 0x40, 0xce, 0x41, 0xeb, 0x2f, 0xce, 0x01, 0xf8, 0x32, 0xce, + 0x01, 0xf9, 0x33, 0xce, 0x01, 0x4f, 0x18, 0x75, 0x34, 0xce, 0x41, 0x5d, + 0xf5, 0x0b, 0x3c, 0x0b, 0x01, 0x5f, 0xca, 0x11, 0x3e, 0x0b, 0x41, 0x46, + 0x12, 0x03, 0x34, 0xf5, 0x01, 0x46, 0xd6, 0x05, 0xe5, 0xf7, 0x41, 0x46, + 0x12, 0x03, 0xe3, 0xf7, 0x01, 0x46, 0xd6, 0x05, 0xea, 0xf7, 0x41, 0x03, + 0xef, 0x07, 0x17, 0x06, 0x9f, 0x1c, 0x01, 0xff, 0x46, 0x12, 0x03, 0xe0, + 0xf7, 0x01, 0x47, 0x95, 0x44, 0x36, 0xf5, 0x01, 0x46, 0xd6, 0x05, 0xe7, + 0xf7, 0x41, 0x5d, 0x4b, 0x15, 0x3d, 0x0b, 0x01, 0x5f, 0xab, 0x11, 0x3f, + 0x0b, 0x41, 0x46, 0x12, 0x03, 0xe2, 0xf7, 0x01, 0x46, 0xd6, 0x05, 0xe9, + 0xf7, 0x41, 0x04, 0xd4, 0x8c, 0x11, 0x05, 0x83, 0xea, 0x01, 0xff, 0x46, + 0x12, 0x03, 0xe4, 0xf7, 0x01, 0x46, 0xd6, 0x05, 0xeb, 0xf7, 0x41, 0x46, + 0x12, 0x03, 0x35, 0xf5, 0x01, 0x47, 0x95, 0x44, 0x37, 0xf5, 0x01, 0x46, + 0xd6, 0x05, 0xe6, 0xf7, 0x41, 0x51, 0xfd, 0x58, 0xcc, 0x0e, 0x00, 0x06, + 0xef, 0x06, 0x8a, 0x04, 0x48, 0xce, 0x29, 0xaf, 0x0e, 0x00, 0x03, 0xd4, + 0x71, 0xf3, 0x03, 0x45, 0xe0, 0xe7, 0xc6, 0x0e, 0x00, 0x07, 0xec, 0x05, + 0x92, 0x01, 0x49, 0x6c, 0xbc, 0xcd, 0x0e, 0x00, 0xb3, 0x74, 0x09, 0xe7, + 0xbf, 0x57, 0x0b, 0x40, 0x77, 0x06, 0x48, 0xc0, 0xcc, 0xce, 0x0e, 0x40, 0xe1, 0xb0, 0x0e, 0x80, 0x38, 0xe5, 0xc0, 0x0e, 0x80, 0x2f, 0xe9, 0xb4, - 0x0e, 0x80, 0x26, 0x05, 0x52, 0xe5, 0x16, 0xef, 0xc2, 0x0e, 0x00, 0xf5, + 0x0e, 0x80, 0x26, 0x05, 0x67, 0xe8, 0x16, 0xef, 0xc2, 0x0e, 0x00, 0xf5, 0xb8, 0x0e, 0x80, 0x09, 0xf9, 0xb6, 0x0e, 0xc0, 0x00, 0xf9, 0xb7, 0x0e, 0x40, 0xf5, 0xb9, 0x0e, 0x40, 0x42, 0x1a, 0x00, 0xb1, 0x0e, 0x00, 0x42, 0x10, 0x00, 0xbb, 0x0e, 0x40, 0xe9, 0xb5, 0x0e, 0x40, 0xe9, 0xc1, 0x0e, 0x40, 0xe1, 0xb2, 0x0e, 0x00, 0xe9, 0xc4, 0x0e, 0x00, 0xed, 0xb3, 0x0e, - 0x00, 0xf9, 0xc3, 0x0e, 0x40, 0x46, 0x7e, 0xd7, 0xcb, 0x0e, 0x00, 0x42, - 0x69, 0x18, 0xc8, 0x0e, 0x00, 0xb4, 0x01, 0xff, 0x42, 0x0b, 0x00, 0xc9, - 0x0e, 0x00, 0xe9, 0xca, 0x0e, 0x40, 0x0e, 0xce, 0x75, 0x06, 0x4f, 0xc1, - 0x6c, 0xba, 0x0e, 0x40, 0x42, 0x13, 0x01, 0xbc, 0x0e, 0x00, 0x43, 0xc4, - 0x52, 0xbd, 0x0e, 0x40, 0x42, 0x5d, 0x00, 0x9a, 0x0e, 0x00, 0x42, 0xe8, - 0x04, 0x88, 0x0e, 0x00, 0x42, 0x3b, 0x01, 0x94, 0x0e, 0x00, 0x03, 0xf8, - 0xd1, 0xa5, 0x02, 0x03, 0x3a, 0x70, 0x94, 0x02, 0xab, 0xea, 0x01, 0x42, - 0x13, 0x01, 0xa5, 0x0e, 0x80, 0xd1, 0x01, 0x42, 0x98, 0x07, 0xa1, 0x0e, + 0x00, 0xf9, 0xc3, 0x0e, 0x40, 0x46, 0x64, 0xda, 0xcb, 0x0e, 0x00, 0x42, + 0xd5, 0x18, 0xc8, 0x0e, 0x00, 0xb4, 0x01, 0xff, 0x42, 0x0b, 0x00, 0xc9, + 0x0e, 0x00, 0xe9, 0xca, 0x0e, 0x40, 0x0e, 0x3d, 0x77, 0x06, 0x4f, 0x79, + 0x6e, 0xba, 0x0e, 0x40, 0x42, 0x13, 0x01, 0xbc, 0x0e, 0x00, 0x43, 0x0d, + 0x54, 0xbd, 0x0e, 0x40, 0x42, 0x5d, 0x00, 0x9a, 0x0e, 0x00, 0x42, 0x13, + 0x05, 0x88, 0x0e, 0x00, 0x42, 0x3b, 0x01, 0x94, 0x0e, 0x00, 0x03, 0xcb, + 0xd4, 0xa5, 0x02, 0x03, 0xd4, 0x71, 0x94, 0x02, 0xab, 0xea, 0x01, 0x42, + 0x13, 0x01, 0xa5, 0x0e, 0x80, 0xd1, 0x01, 0x42, 0xc3, 0x07, 0xa1, 0x0e, 0x00, 0xae, 0xb8, 0x01, 0xef, 0xad, 0x0e, 0x00, 0xb0, 0x4b, 0x42, 0xd0, 0x00, 0xa3, 0x0e, 0x00, 0xb3, 0x22, 0xb4, 0x0c, 0x42, 0x15, 0x02, 0xa7, - 0x0e, 0x00, 0x42, 0x60, 0x46, 0xa2, 0x0e, 0x40, 0x03, 0x3a, 0x70, 0x04, - 0xef, 0x95, 0x0e, 0x40, 0x44, 0xd4, 0xbd, 0x96, 0x0e, 0x00, 0x43, 0x56, - 0x31, 0x97, 0x0e, 0x40, 0x09, 0xc7, 0xb3, 0x11, 0x02, 0x7b, 0x02, 0x01, - 0xff, 0x44, 0xd4, 0xbd, 0xaa, 0x0e, 0x00, 0x43, 0x56, 0x31, 0x8a, 0x0e, - 0x40, 0x42, 0x22, 0x00, 0xa8, 0x0e, 0x00, 0x42, 0x15, 0x06, 0xa9, 0x0e, - 0x40, 0x04, 0xc6, 0x6c, 0x14, 0x03, 0x3a, 0x70, 0x04, 0xef, 0x9b, 0x0e, - 0x40, 0x44, 0xd4, 0xbd, 0x9c, 0x0e, 0x00, 0x43, 0x56, 0x31, 0x9e, 0x0e, - 0x40, 0x43, 0x50, 0x2a, 0xa0, 0x0e, 0x00, 0x43, 0xef, 0x1f, 0x89, 0x0e, - 0x00, 0xa4, 0x2f, 0x43, 0xf3, 0x99, 0x86, 0x0e, 0x00, 0x43, 0x11, 0xf1, - 0x8c, 0x0e, 0x00, 0x43, 0xdd, 0x0d, 0xac, 0x0e, 0x00, 0xae, 0x0f, 0x02, - 0xc3, 0x05, 0x01, 0xff, 0xe1, 0x8f, 0x0e, 0x00, 0x42, 0x22, 0x00, 0x90, - 0x0e, 0x40, 0x42, 0xff, 0x04, 0x93, 0x0e, 0x00, 0x42, 0x34, 0x22, 0x8e, + 0x0e, 0x00, 0x42, 0xa9, 0x47, 0xa2, 0x0e, 0x40, 0x03, 0xd4, 0x71, 0x04, + 0xef, 0x95, 0x0e, 0x40, 0x44, 0x5b, 0xc0, 0x96, 0x0e, 0x00, 0x43, 0x3c, + 0x32, 0x97, 0x0e, 0x40, 0x09, 0x21, 0xb6, 0x11, 0x02, 0x7b, 0x02, 0x01, + 0xff, 0x44, 0x5b, 0xc0, 0xaa, 0x0e, 0x00, 0x43, 0x3c, 0x32, 0x8a, 0x0e, + 0x40, 0x42, 0x22, 0x00, 0xa8, 0x0e, 0x00, 0x42, 0x40, 0x06, 0xa9, 0x0e, + 0x40, 0x04, 0x7e, 0x6e, 0x14, 0x03, 0xd4, 0x71, 0x04, 0xef, 0x9b, 0x0e, + 0x40, 0x44, 0x5b, 0xc0, 0x9c, 0x0e, 0x00, 0x43, 0x3c, 0x32, 0x9e, 0x0e, + 0x40, 0x43, 0xd9, 0x2a, 0xa0, 0x0e, 0x00, 0x43, 0x91, 0x20, 0x89, 0x0e, + 0x00, 0xa4, 0x2f, 0x43, 0x0e, 0x9c, 0x86, 0x0e, 0x00, 0x43, 0x9c, 0x45, + 0x8c, 0x0e, 0x00, 0x43, 0x2c, 0x0e, 0xac, 0x0e, 0x00, 0xae, 0x0f, 0x02, + 0xee, 0x05, 0x01, 0xff, 0xe1, 0x8f, 0x0e, 0x00, 0x42, 0x22, 0x00, 0x90, + 0x0e, 0x40, 0x42, 0x2a, 0x05, 0x93, 0x0e, 0x00, 0x42, 0xbc, 0x22, 0x8e, 0x0e, 0x40, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x98, 0x0e, 0x40, 0xe1, 0x91, - 0x0e, 0x00, 0x42, 0x22, 0x00, 0x92, 0x0e, 0x40, 0x42, 0xb7, 0x13, 0x87, - 0x0e, 0x00, 0xef, 0x99, 0x0e, 0x00, 0x42, 0x60, 0x46, 0x8d, 0x0e, 0x40, + 0x0e, 0x00, 0x42, 0x22, 0x00, 0x92, 0x0e, 0x40, 0x42, 0x06, 0x14, 0x87, + 0x0e, 0x00, 0xef, 0x99, 0x0e, 0x00, 0x42, 0xa9, 0x47, 0x8d, 0x0e, 0x40, 0x02, 0x73, 0x00, 0x01, 0xff, 0x43, 0xa1, 0x01, 0xa3, 0x0e, 0x00, 0x43, - 0x25, 0x6b, 0xa5, 0x0e, 0x40, 0xa8, 0x04, 0xef, 0x81, 0x0e, 0x40, 0x03, - 0xa1, 0x87, 0x11, 0x02, 0x7b, 0x02, 0x01, 0xff, 0x44, 0xd4, 0xbd, 0x82, - 0x0e, 0x00, 0x43, 0x56, 0x31, 0x84, 0x0e, 0x40, 0x42, 0xb7, 0x13, 0xde, - 0x0e, 0x00, 0x43, 0xc4, 0x52, 0xdf, 0x0e, 0x40, 0x44, 0xd4, 0xbd, 0xab, - 0x0e, 0x00, 0x43, 0x56, 0x31, 0xae, 0x0e, 0x40, 0xa6, 0x0c, 0x44, 0xd4, - 0xbd, 0x9f, 0x0e, 0x00, 0x43, 0x56, 0x31, 0x9d, 0x0e, 0x40, 0x42, 0x9e, - 0x10, 0x9f, 0x0e, 0x00, 0x42, 0x10, 0x00, 0x9d, 0x0e, 0x40, 0x42, 0x98, - 0x07, 0xdd, 0x0e, 0x00, 0x42, 0xb4, 0x01, 0xdc, 0x0e, 0x40, 0x45, 0xc3, - 0x0a, 0xd8, 0x0e, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xd9, 0x0e, 0x00, - 0x43, 0xbf, 0x0a, 0xd1, 0x0e, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, - 0x1d, 0xd0, 0x0e, 0x40, 0x44, 0x25, 0x01, 0xd3, 0x0e, 0x00, 0x42, 0x15, - 0x02, 0xd2, 0x0e, 0x40, 0x44, 0x27, 0x1d, 0xd7, 0x0e, 0x00, 0x42, 0x60, - 0x25, 0xd6, 0x0e, 0x40, 0x43, 0xa7, 0x05, 0xd5, 0x0e, 0x00, 0x43, 0xcb, - 0x06, 0xd4, 0x0e, 0x40, 0x43, 0x4e, 0x1a, 0x9c, 0xfa, 0x01, 0x48, 0xf2, - 0xc9, 0x1e, 0xf4, 0x41, 0x45, 0x95, 0xde, 0x7c, 0xf9, 0x01, 0x42, 0xd8, + 0xbf, 0x6c, 0xa5, 0x0e, 0x40, 0xa8, 0x04, 0xef, 0x81, 0x0e, 0x40, 0x03, + 0x6b, 0x89, 0x11, 0x02, 0x7b, 0x02, 0x01, 0xff, 0x44, 0x5b, 0xc0, 0x82, + 0x0e, 0x00, 0x43, 0x3c, 0x32, 0x84, 0x0e, 0x40, 0x42, 0x06, 0x14, 0xde, + 0x0e, 0x00, 0x43, 0x0d, 0x54, 0xdf, 0x0e, 0x40, 0x44, 0x5b, 0xc0, 0xab, + 0x0e, 0x00, 0x43, 0x3c, 0x32, 0xae, 0x0e, 0x40, 0xa6, 0x0c, 0x44, 0x5b, + 0xc0, 0x9f, 0x0e, 0x00, 0x43, 0x3c, 0x32, 0x9d, 0x0e, 0x40, 0x42, 0xed, + 0x10, 0x9f, 0x0e, 0x00, 0x42, 0x10, 0x00, 0x9d, 0x0e, 0x40, 0x42, 0xc3, + 0x07, 0xdd, 0x0e, 0x00, 0x42, 0xb4, 0x01, 0xdc, 0x0e, 0x40, 0x45, 0x12, + 0x0b, 0xd8, 0x0e, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xd9, 0x0e, 0x00, + 0x43, 0x0e, 0x0b, 0xd1, 0x0e, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, + 0x1e, 0xd0, 0x0e, 0x40, 0x44, 0x25, 0x01, 0xd3, 0x0e, 0x00, 0x42, 0x15, + 0x02, 0xd2, 0x0e, 0x40, 0x44, 0xc9, 0x1d, 0xd7, 0x0e, 0x00, 0x42, 0x01, + 0x26, 0xd6, 0x0e, 0x40, 0x43, 0xd2, 0x05, 0xd5, 0x0e, 0x00, 0x43, 0xf6, + 0x06, 0xd4, 0x0e, 0x40, 0x46, 0x00, 0xdb, 0xd8, 0xf6, 0x01, 0x49, 0x4b, + 0xb9, 0x01, 0x00, 0x4e, 0x43, 0xd5, 0x1a, 0x9c, 0xfa, 0x01, 0x48, 0xb0, + 0xcc, 0x1e, 0xf4, 0x41, 0x45, 0xa5, 0xe1, 0x7c, 0xf9, 0x01, 0x42, 0xd8, 0x00, 0xf7, 0xf3, 0x41, 0xa1, 0x8f, 0x16, 0xa5, 0xe8, 0x15, 0xa8, 0xdf, - 0x03, 0xa9, 0x22, 0xae, 0x14, 0xaf, 0x06, 0x45, 0x55, 0xe7, 0xe3, 0x2b, - 0x40, 0x43, 0xe0, 0x18, 0x28, 0xf4, 0x01, 0x54, 0x07, 0x44, 0x7f, 0x32, - 0x40, 0x4d, 0xe1, 0x80, 0xce, 0xf9, 0x01, 0x42, 0xf0, 0x04, 0xa2, 0xfa, - 0x41, 0x44, 0x52, 0x18, 0x58, 0xf4, 0x01, 0x46, 0x2d, 0x03, 0xad, 0x20, - 0x00, 0x08, 0x82, 0xc7, 0x3c, 0x42, 0xee, 0x00, 0x8f, 0xf4, 0x81, 0x0c, - 0x42, 0x77, 0x00, 0x81, 0xfa, 0x01, 0x47, 0xa9, 0xd4, 0x5d, 0xf9, 0x41, + 0x03, 0xa9, 0x22, 0xae, 0x14, 0xaf, 0x06, 0x45, 0x79, 0xea, 0xe3, 0x2b, + 0x40, 0x43, 0x4d, 0x19, 0x28, 0xf4, 0x01, 0x54, 0x28, 0x45, 0x7f, 0x32, + 0x40, 0x4d, 0x77, 0x82, 0xce, 0xf9, 0x01, 0x42, 0x1b, 0x05, 0xa2, 0xfa, + 0x41, 0x44, 0xbe, 0x18, 0x58, 0xf4, 0x01, 0x46, 0x58, 0x03, 0xad, 0x20, + 0x00, 0x08, 0x30, 0xca, 0x3c, 0x42, 0xee, 0x00, 0x8f, 0xf4, 0x81, 0x0c, + 0x42, 0x77, 0x00, 0x81, 0xfa, 0x01, 0x47, 0x7c, 0xd7, 0x5d, 0xf9, 0x41, 0x45, 0xb8, 0x00, 0x8b, 0xf4, 0x01, 0x04, 0xa1, 0x01, 0x01, 0xff, 0x59, - 0xfd, 0x22, 0x3d, 0xf6, 0x01, 0x44, 0xe1, 0x07, 0x17, 0xf6, 0xc1, 0x00, - 0x06, 0x50, 0x00, 0x01, 0xff, 0x4b, 0x0b, 0x23, 0x1a, 0xf6, 0x01, 0x4c, - 0xce, 0x1e, 0x19, 0xf6, 0x41, 0xa4, 0x9a, 0x02, 0x07, 0xc1, 0x05, 0x54, - 0x05, 0x2f, 0x03, 0x28, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x15, 0xe5, + 0x85, 0x23, 0x3d, 0xf6, 0x01, 0x44, 0x0c, 0x08, 0x17, 0xf6, 0xc1, 0x00, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x4b, 0x93, 0x23, 0x1a, 0xf6, 0x01, 0x4c, + 0x70, 0x1f, 0x19, 0xf6, 0x41, 0xa4, 0x9a, 0x02, 0x07, 0xec, 0x05, 0x54, + 0x05, 0x5a, 0x03, 0x28, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x15, 0xe5, 0x67, 0x6d, 0x01, 0xe9, 0x64, 0x6d, 0x01, 0xef, 0x69, 0x6d, 0x01, 0xf5, 0x65, 0x6d, 0xc1, 0x00, 0xe5, 0x66, 0x6d, 0x41, 0xe1, 0x63, 0x6d, 0x01, - 0xe9, 0x68, 0x6d, 0x01, 0xf5, 0x6a, 0x6d, 0x41, 0x48, 0xd0, 0x15, 0x40, - 0x6d, 0x01, 0x44, 0x36, 0xef, 0x6c, 0x6d, 0x01, 0x45, 0x3b, 0xe8, 0x41, - 0x6d, 0x01, 0x02, 0x02, 0x00, 0x06, 0x44, 0xfa, 0xef, 0x6d, 0x6d, 0x41, - 0x44, 0x5d, 0x23, 0x6b, 0x6d, 0x01, 0x45, 0xa3, 0x4a, 0x42, 0x6d, 0x41, + 0xe9, 0x68, 0x6d, 0x01, 0xf5, 0x6a, 0x6d, 0x41, 0x48, 0x3c, 0x16, 0x40, + 0x6d, 0x01, 0x44, 0x89, 0xf2, 0x6c, 0x6d, 0x01, 0x45, 0x5f, 0xeb, 0x41, + 0x6d, 0x01, 0x02, 0x02, 0x00, 0x06, 0x44, 0x4d, 0xf3, 0x6d, 0x6d, 0x41, + 0x44, 0xe5, 0x23, 0x6b, 0x6d, 0x01, 0x45, 0xec, 0x4b, 0x42, 0x6d, 0x41, 0xe1, 0x43, 0x6d, 0x01, 0xa2, 0xb1, 0x01, 0xa3, 0xa4, 0x01, 0xa4, 0x8b, 0x01, 0xa7, 0x7f, 0x42, 0x22, 0x00, 0x62, 0x6d, 0x01, 0xaa, 0x6d, 0xab, 0x61, 0x42, 0x74, 0x00, 0x5e, 0x6d, 0x01, 0x42, 0x6c, 0x00, 0x5b, 0x6d, 0x01, 0xae, 0x43, 0xb0, 0x37, 0x42, 0x71, 0x00, 0x5d, 0x6d, 0x01, 0xb3, - 0x25, 0xb4, 0x0c, 0x42, 0xa6, 0x0a, 0x5f, 0x6d, 0x01, 0x42, 0x34, 0x22, + 0x25, 0xb4, 0x0c, 0x42, 0xf5, 0x0a, 0x5f, 0x6d, 0x01, 0x42, 0xbc, 0x22, 0x5c, 0x6d, 0x41, 0xe1, 0x52, 0x6d, 0x01, 0x42, 0x22, 0x00, 0x53, 0x6d, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x4e, 0x6d, 0x01, 0x42, 0x22, 0x00, 0x4f, 0x6d, 0x41, 0xe1, 0x60, 0x6d, 0x01, 0x42, 0x22, 0x00, 0x61, 0x6d, 0x41, 0xe1, 0x57, 0x6d, 0x01, 0x42, 0x22, 0x00, 0x58, 0x6d, 0x41, 0xe1, 0x56, - 0x6d, 0x01, 0x42, 0x24, 0x02, 0x48, 0x6d, 0x01, 0x42, 0x34, 0x22, 0x4d, + 0x6d, 0x01, 0x42, 0x24, 0x02, 0x48, 0x6d, 0x01, 0x42, 0xbc, 0x22, 0x4d, 0x6d, 0x41, 0xe1, 0x44, 0x6d, 0x01, 0x42, 0x22, 0x00, 0x45, 0x6d, 0x41, 0xe1, 0x4b, 0x6d, 0x01, 0x42, 0x22, 0x00, 0x4c, 0x6d, 0x41, 0xe1, 0x46, 0x6d, 0x01, 0x42, 0x22, 0x00, 0x47, 0x6d, 0x41, 0xe1, 0x54, 0x6d, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x55, 0x6d, 0x41, 0xe1, 0x50, 0x6d, 0x01, 0x42, 0x22, 0x00, 0x51, 0x6d, 0x41, 0xe1, 0x49, 0x6d, 0x01, 0x42, 0x22, 0x00, 0x4a, 0x6d, 0x41, 0xe1, 0x59, 0x6d, 0x01, 0x42, 0x22, 0x00, 0x5a, - 0x6d, 0x41, 0x44, 0xd1, 0x1f, 0x6e, 0x6d, 0x01, 0x05, 0xc5, 0x06, 0x06, - 0x4b, 0xd8, 0x9e, 0x6f, 0x6d, 0x41, 0x45, 0xc3, 0x0a, 0x78, 0x6d, 0x01, - 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x79, 0x6d, 0x01, 0x43, 0xbf, 0x0a, 0x71, - 0x6d, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x70, 0x6d, 0x41, + 0x6d, 0x41, 0x44, 0x73, 0x20, 0x6e, 0x6d, 0x01, 0x05, 0xf0, 0x06, 0x06, + 0x4b, 0x09, 0xa1, 0x6f, 0x6d, 0x41, 0x45, 0x12, 0x0b, 0x78, 0x6d, 0x01, + 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x79, 0x6d, 0x01, 0x43, 0x0e, 0x0b, 0x71, + 0x6d, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x70, 0x6d, 0x41, 0x44, 0x25, 0x01, 0x73, 0x6d, 0x01, 0x42, 0x15, 0x02, 0x72, 0x6d, 0x41, - 0x44, 0x27, 0x1d, 0x77, 0x6d, 0x01, 0x42, 0x60, 0x25, 0x76, 0x6d, 0x41, - 0x43, 0xa7, 0x05, 0x75, 0x6d, 0x01, 0x43, 0xcb, 0x06, 0x74, 0x6d, 0x41, - 0xa1, 0xaa, 0x0e, 0x12, 0xa4, 0x51, 0x92, 0x0e, 0x04, 0x2b, 0x37, 0xb3, - 0x06, 0x05, 0x56, 0xe6, 0xa4, 0x03, 0x08, 0x42, 0xc9, 0x01, 0xff, 0x06, - 0xc4, 0x06, 0xd8, 0x02, 0x07, 0xc1, 0x05, 0x43, 0x05, 0x2f, 0x03, 0x2d, - 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x1a, 0xe5, 0xe5, 0x12, 0x01, 0xe9, + 0x44, 0xc9, 0x1d, 0x77, 0x6d, 0x01, 0x42, 0x01, 0x26, 0x76, 0x6d, 0x41, + 0x43, 0xd2, 0x05, 0x75, 0x6d, 0x01, 0x43, 0xf6, 0x06, 0x74, 0x6d, 0x41, + 0xa1, 0xaa, 0x0e, 0x12, 0xed, 0x52, 0x92, 0x0e, 0x04, 0xfb, 0x37, 0xb3, + 0x06, 0x05, 0x7a, 0xe9, 0xa4, 0x03, 0x08, 0xf8, 0xcb, 0x01, 0xff, 0x06, + 0xef, 0x06, 0xd8, 0x02, 0x07, 0xec, 0x05, 0x43, 0x05, 0x5a, 0x03, 0x2d, + 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x1a, 0xe5, 0xe5, 0x12, 0x01, 0xe9, 0xe1, 0x12, 0x81, 0x0d, 0xef, 0xe7, 0x12, 0x01, 0xf5, 0xe3, 0x12, 0xc1, 0x00, 0xf5, 0xe4, 0x12, 0x41, 0xe9, 0xe2, 0x12, 0x41, 0xe1, 0xe0, 0x12, - 0x01, 0xe9, 0xe6, 0x12, 0x01, 0xf5, 0xe8, 0x12, 0x41, 0x48, 0xd0, 0x15, - 0xdf, 0x12, 0x01, 0x45, 0x5a, 0x3e, 0xe9, 0x12, 0x01, 0x46, 0x5b, 0x23, + 0x01, 0xe9, 0xe6, 0x12, 0x01, 0xf5, 0xe8, 0x12, 0x41, 0x48, 0x3c, 0x16, + 0xdf, 0x12, 0x01, 0x45, 0x3f, 0x3f, 0xe9, 0x12, 0x01, 0x46, 0xe3, 0x23, 0xea, 0x12, 0x41, 0xe1, 0xb0, 0x12, 0x81, 0xff, 0x01, 0xa2, 0xec, 0x01, 0xa3, 0xdf, 0x01, 0xa4, 0xc0, 0x01, 0xe5, 0xb6, 0x12, 0x01, 0xa7, 0xa9, 0x01, 0x42, 0x22, 0x00, 0xde, 0x12, 0x01, 0xe9, 0xb2, 0x12, 0x81, 0x99, 0x01, 0xaa, 0x86, 0x01, 0xab, 0x7a, 0x42, 0x74, 0x00, 0xda, 0x12, 0x01, 0x42, 0x6c, 0x00, 0xd7, 0x12, 0x01, 0xae, 0x56, 0xef, 0xb8, 0x12, 0x01, 0xb0, 0x46, 0xb2, 0x3a, 0xb3, 0x2e, 0xb4, 0x15, 0xf5, 0xb4, 0x12, 0x81, - 0x0c, 0x42, 0xa6, 0x0a, 0xdb, 0x12, 0x01, 0x42, 0x34, 0x22, 0xd8, 0x12, + 0x0c, 0x42, 0xf5, 0x0a, 0xdb, 0x12, 0x01, 0x42, 0xbc, 0x22, 0xd8, 0x12, 0x41, 0xf5, 0xb5, 0x12, 0x41, 0xe1, 0xcd, 0x12, 0x01, 0x42, 0x22, 0x00, 0xce, 0x12, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0xc6, 0x12, 0x01, 0x42, 0x22, 0x00, 0xc7, 0x12, 0x41, 0xe1, 0xdd, 0x12, 0x01, 0x42, 0x22, 0x00, 0xdc, 0x12, 0x41, 0xe1, 0xd9, 0x12, 0x01, 0x42, 0x71, 0x00, 0xca, 0x12, 0x41, 0xe1, 0xd2, 0x12, 0x01, 0x42, 0x22, 0x00, 0xd3, 0x12, 0x41, 0xe1, 0xd1, - 0x12, 0x01, 0x42, 0x24, 0x02, 0xbf, 0x12, 0x01, 0x42, 0xff, 0x04, 0xcc, - 0x12, 0x01, 0x42, 0x34, 0x22, 0xc5, 0x12, 0x41, 0xe1, 0xba, 0x12, 0x01, + 0x12, 0x01, 0x42, 0x24, 0x02, 0xbf, 0x12, 0x01, 0x42, 0x2a, 0x05, 0xcc, + 0x12, 0x01, 0x42, 0xbc, 0x22, 0xc5, 0x12, 0x41, 0xe1, 0xba, 0x12, 0x01, 0x42, 0x22, 0x00, 0xbb, 0x12, 0x41, 0xe1, 0xc2, 0x12, 0x01, 0x42, 0x22, - 0x00, 0xc4, 0x12, 0x01, 0x42, 0xbd, 0x26, 0xc3, 0x12, 0x41, 0xe9, 0xb3, + 0x00, 0xc4, 0x12, 0x01, 0x42, 0x56, 0x19, 0xc3, 0x12, 0x41, 0xe9, 0xb3, 0x12, 0x41, 0xe1, 0xbc, 0x12, 0x01, 0x42, 0x24, 0x02, 0xbd, 0x12, 0x01, 0x42, 0x22, 0x00, 0xbe, 0x12, 0x41, 0xe1, 0xcf, 0x12, 0x01, 0xa4, 0x06, - 0x42, 0x22, 0x00, 0xd0, 0x12, 0x41, 0xe1, 0xc8, 0x12, 0x01, 0x42, 0xa1, + 0x42, 0x22, 0x00, 0xd0, 0x12, 0x41, 0xe1, 0xc8, 0x12, 0x01, 0x42, 0xf0, 0x10, 0xc9, 0x12, 0x01, 0x42, 0x22, 0x00, 0xcb, 0x12, 0x41, 0xe1, 0xc0, 0x12, 0x01, 0x42, 0x22, 0x00, 0xc1, 0x12, 0x41, 0xe1, 0xd4, 0x12, 0x01, 0x42, 0x16, 0x00, 0xd5, 0x12, 0x01, 0x42, 0x22, 0x00, 0xd6, 0x12, 0x41, 0xe1, 0xb1, 0x12, 0x01, 0xe9, 0xb7, 0x12, 0x01, 0xf5, 0xb9, 0x12, 0x41, - 0x45, 0xc3, 0x0a, 0xf8, 0x12, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xf9, - 0x12, 0x01, 0x43, 0xbf, 0x0a, 0xf1, 0x12, 0x01, 0xb3, 0x14, 0xb4, 0x06, - 0x44, 0xa1, 0x1d, 0xf0, 0x12, 0x41, 0x44, 0x25, 0x01, 0xf3, 0x12, 0x01, - 0x42, 0x15, 0x02, 0xf2, 0x12, 0x41, 0x44, 0x27, 0x1d, 0xf7, 0x12, 0x01, - 0x42, 0x60, 0x25, 0xf6, 0x12, 0x41, 0x43, 0xa7, 0x05, 0xf5, 0x12, 0x01, - 0x43, 0xcb, 0x06, 0xf4, 0x12, 0x41, 0x51, 0x93, 0x56, 0x3d, 0x12, 0x01, - 0xa4, 0xea, 0x02, 0x07, 0xc1, 0x05, 0x60, 0xb3, 0x33, 0x0b, 0xd1, 0x75, - 0x06, 0x4e, 0x68, 0x7d, 0x3a, 0x12, 0x41, 0xa1, 0x1b, 0xe5, 0x30, 0x12, + 0x45, 0x12, 0x0b, 0xf8, 0x12, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xf9, + 0x12, 0x01, 0x43, 0x0e, 0x0b, 0xf1, 0x12, 0x01, 0xb3, 0x14, 0xb4, 0x06, + 0x44, 0x43, 0x1e, 0xf0, 0x12, 0x41, 0x44, 0x25, 0x01, 0xf3, 0x12, 0x01, + 0x42, 0x15, 0x02, 0xf2, 0x12, 0x41, 0x44, 0xc9, 0x1d, 0xf7, 0x12, 0x01, + 0x42, 0x01, 0x26, 0xf6, 0x12, 0x41, 0x43, 0xd2, 0x05, 0xf5, 0x12, 0x01, + 0x43, 0xf6, 0x06, 0xf4, 0x12, 0x41, 0x51, 0xdc, 0x57, 0x3d, 0x12, 0x01, + 0xa4, 0xea, 0x02, 0x07, 0xec, 0x05, 0x60, 0xb3, 0x33, 0x0b, 0x40, 0x77, + 0x06, 0x4e, 0xd7, 0x7e, 0x3a, 0x12, 0x41, 0xa1, 0x1b, 0xe5, 0x30, 0x12, 0x01, 0xe9, 0x2d, 0x12, 0x81, 0x0e, 0xef, 0x32, 0x12, 0x01, 0xf5, 0x2f, - 0x12, 0x01, 0x49, 0x9b, 0xbe, 0x41, 0x12, 0x41, 0xe9, 0x2e, 0x12, 0x41, + 0x12, 0x01, 0x49, 0x22, 0xc1, 0x41, 0x12, 0x41, 0xe9, 0x2e, 0x12, 0x41, 0xe1, 0x2c, 0x12, 0x01, 0xe9, 0x31, 0x12, 0x01, 0xf5, 0x33, 0x12, 0x41, - 0x4b, 0x58, 0x26, 0x3b, 0x12, 0x01, 0x04, 0x30, 0x03, 0x01, 0xff, 0x48, - 0xd0, 0x15, 0x34, 0x12, 0x01, 0x45, 0x5a, 0x3e, 0x36, 0x12, 0x01, 0xb3, - 0x06, 0x46, 0x5b, 0x23, 0x35, 0x12, 0x41, 0x45, 0xb8, 0xe3, 0x37, 0x12, - 0x01, 0x44, 0x00, 0xe8, 0x3e, 0x12, 0x41, 0xe1, 0x00, 0x12, 0x81, 0xf4, + 0x4b, 0xf9, 0x26, 0x3b, 0x12, 0x01, 0x04, 0x5b, 0x03, 0x01, 0xff, 0x48, + 0x3c, 0x16, 0x34, 0x12, 0x01, 0x45, 0x3f, 0x3f, 0x36, 0x12, 0x01, 0xb3, + 0x06, 0x46, 0xe3, 0x23, 0x35, 0x12, 0x41, 0x45, 0xc8, 0xe6, 0x37, 0x12, + 0x01, 0x44, 0x24, 0xeb, 0x3e, 0x12, 0x41, 0xe1, 0x00, 0x12, 0x81, 0xf4, 0x01, 0xa2, 0xe1, 0x01, 0xa3, 0xd4, 0x01, 0xa4, 0xb5, 0x01, 0xe5, 0x04, 0x12, 0x01, 0xa7, 0x9e, 0x01, 0x42, 0x22, 0x00, 0x2a, 0x12, 0x01, 0xe9, 0x02, 0x12, 0x01, 0xaa, 0x87, 0x01, 0xab, 0x7b, 0xac, 0x6f, 0x42, 0x6c, 0x00, 0x24, 0x12, 0x01, 0xae, 0x51, 0xef, 0x06, 0x12, 0x01, 0xb0, 0x41, - 0x42, 0xf4, 0x13, 0x3f, 0x12, 0x01, 0x42, 0x71, 0x00, 0x26, 0x12, 0x01, - 0xb3, 0x29, 0xb4, 0x10, 0xf5, 0x03, 0x12, 0x01, 0x42, 0xa6, 0x0a, 0x28, - 0x12, 0x01, 0x42, 0x34, 0x22, 0x25, 0x12, 0x41, 0xe1, 0x19, 0x12, 0x01, + 0x42, 0x43, 0x14, 0x3f, 0x12, 0x01, 0x42, 0x71, 0x00, 0x26, 0x12, 0x01, + 0xb3, 0x29, 0xb4, 0x10, 0xf5, 0x03, 0x12, 0x01, 0x42, 0xf5, 0x0a, 0x28, + 0x12, 0x01, 0x42, 0xbc, 0x22, 0x25, 0x12, 0x41, 0xe1, 0x19, 0x12, 0x01, 0x42, 0x22, 0x00, 0x1a, 0x12, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x14, 0x12, 0x01, 0x42, 0x22, 0x00, 0x15, 0x12, 0x41, 0xe1, 0x29, 0x12, 0x01, 0x46, - 0xa0, 0xd9, 0x40, 0x12, 0x41, 0xe1, 0x1f, 0x12, 0x01, 0x42, 0x22, 0x00, + 0x98, 0xdc, 0x40, 0x12, 0x41, 0xe1, 0x1f, 0x12, 0x01, 0x42, 0x22, 0x00, 0x20, 0x12, 0x41, 0xe1, 0x1e, 0x12, 0x01, 0x42, 0x24, 0x02, 0x0d, 0x12, - 0x01, 0x42, 0xff, 0x04, 0x18, 0x12, 0x01, 0x42, 0x34, 0x22, 0x13, 0x12, + 0x01, 0x42, 0x2a, 0x05, 0x18, 0x12, 0x01, 0x42, 0xbc, 0x22, 0x13, 0x12, 0x41, 0xe1, 0x27, 0x12, 0x01, 0x42, 0x74, 0x00, 0x2b, 0x12, 0x41, 0xe1, 0x08, 0x12, 0x01, 0x42, 0x22, 0x00, 0x09, 0x12, 0x41, 0xe1, 0x10, 0x12, - 0x01, 0x42, 0xbd, 0x26, 0x11, 0x12, 0x41, 0xe1, 0x0a, 0x12, 0x01, 0x42, + 0x01, 0x42, 0x56, 0x19, 0x11, 0x12, 0x41, 0xe1, 0x0a, 0x12, 0x01, 0x42, 0x24, 0x02, 0x0b, 0x12, 0x01, 0x42, 0x22, 0x00, 0x0c, 0x12, 0x41, 0xe1, 0x1b, 0x12, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x1d, 0x12, 0x41, 0xe1, - 0x16, 0x12, 0x01, 0x42, 0xa1, 0x10, 0x1c, 0x12, 0x01, 0x42, 0x22, 0x00, + 0x16, 0x12, 0x01, 0x42, 0xf0, 0x10, 0x1c, 0x12, 0x01, 0x42, 0x22, 0x00, 0x17, 0x12, 0x41, 0xe1, 0x0e, 0x12, 0x01, 0x42, 0x22, 0x00, 0x0f, 0x12, 0x41, 0xe1, 0x21, 0x12, 0x01, 0x42, 0x16, 0x00, 0x22, 0x12, 0x01, 0x42, 0x22, 0x00, 0x23, 0x12, 0x41, 0xe1, 0x01, 0x12, 0x01, 0xe9, 0x05, 0x12, - 0x01, 0xf5, 0x07, 0x12, 0x41, 0x44, 0xd1, 0x1f, 0x38, 0x12, 0x01, 0x06, - 0x3c, 0x01, 0x01, 0xff, 0x45, 0x34, 0x94, 0x39, 0x12, 0x01, 0x4c, 0x57, - 0x26, 0x3c, 0x12, 0x41, 0x54, 0x5b, 0x40, 0xdb, 0x17, 0x00, 0x06, 0xc4, - 0x06, 0x8d, 0x07, 0x12, 0x80, 0x51, 0xaf, 0x06, 0x07, 0xc1, 0x05, 0xe6, - 0x04, 0xb3, 0x5d, 0x06, 0x6c, 0x38, 0x01, 0xff, 0x0a, 0xa5, 0xa9, 0x4c, - 0x05, 0x2f, 0x03, 0x01, 0xff, 0xa1, 0x35, 0xe5, 0xc1, 0x17, 0x00, 0xe9, + 0x01, 0xf5, 0x07, 0x12, 0x41, 0x44, 0x73, 0x20, 0x38, 0x12, 0x01, 0x06, + 0x3c, 0x01, 0x01, 0xff, 0x45, 0x16, 0x96, 0x39, 0x12, 0x01, 0x4c, 0xf8, + 0x26, 0x3c, 0x12, 0x41, 0x54, 0x54, 0x41, 0xdb, 0x17, 0x00, 0x06, 0xef, + 0x06, 0x8d, 0x07, 0x12, 0xc9, 0x52, 0xaf, 0x06, 0x07, 0xec, 0x05, 0xe6, + 0x04, 0xb3, 0x5d, 0x06, 0x3c, 0x39, 0x01, 0xff, 0x0a, 0xe1, 0xab, 0x4c, + 0x05, 0x5a, 0x03, 0x01, 0xff, 0xa1, 0x35, 0xe5, 0xc1, 0x17, 0x00, 0xe9, 0xb7, 0x17, 0x80, 0x24, 0xaf, 0x1a, 0xf5, 0xbb, 0x17, 0x80, 0x0d, 0xf9, 0xb9, 0x17, 0xc0, 0x00, 0xe1, 0xbf, 0x17, 0x00, 0xf9, 0xba, 0x17, 0x40, 0xe1, 0xbd, 0x17, 0x00, 0xf5, 0xbc, 0x17, 0x40, 0xe5, 0xbe, 0x17, 0x00, 0xef, 0xc4, 0x17, 0x40, 0xe5, 0xc0, 0x17, 0x00, 0xe9, 0xb8, 0x17, 0x40, 0xe1, 0xb6, 0x17, 0x00, 0xe5, 0xc2, 0x17, 0x00, 0xe9, 0xc3, 0x17, 0x00, 0xf5, 0xc5, 0x17, 0x40, 0xe1, 0xb5, 0x17, 0x00, 0xf1, 0xb4, 0x17, 0x40, - 0x04, 0x30, 0x03, 0xe9, 0x02, 0x06, 0xf4, 0x15, 0x01, 0xff, 0xa2, 0xc0, - 0x02, 0x03, 0x27, 0xee, 0xd3, 0x01, 0x0a, 0x81, 0xaa, 0x88, 0x01, 0x05, - 0xc0, 0xe5, 0x78, 0xb0, 0x06, 0x49, 0x9f, 0xbd, 0xf0, 0x19, 0x40, 0x49, - 0x0f, 0xb4, 0xe0, 0x19, 0x00, 0x03, 0x69, 0x74, 0x5a, 0x03, 0x57, 0x18, - 0x01, 0xff, 0x80, 0x47, 0x8d, 0x01, 0xff, 0xa2, 0x21, 0x05, 0xc0, 0xe5, - 0x11, 0x04, 0x68, 0x74, 0x01, 0xff, 0x44, 0xaa, 0xed, 0xe7, 0x19, 0x00, - 0x43, 0x57, 0x3c, 0xf7, 0x19, 0x40, 0x44, 0xaa, 0xed, 0xe6, 0x19, 0x00, - 0x43, 0x57, 0x3c, 0xf6, 0x19, 0x40, 0x03, 0x8a, 0x33, 0x11, 0x04, 0x8e, - 0xef, 0x01, 0xff, 0x44, 0xaa, 0xed, 0xe9, 0x19, 0x00, 0x43, 0x57, 0x3c, - 0xf9, 0x19, 0x40, 0x44, 0xaa, 0xed, 0xe8, 0x19, 0x00, 0x43, 0x57, 0x3c, - 0xf8, 0x19, 0x40, 0x44, 0xaa, 0xed, 0xe5, 0x19, 0x00, 0x43, 0x57, 0x3c, - 0xf5, 0x19, 0x40, 0x44, 0xaa, 0xed, 0xe2, 0x19, 0x00, 0x43, 0x57, 0x3c, - 0xf2, 0x19, 0x40, 0x44, 0xaa, 0xed, 0xe1, 0x19, 0x00, 0x43, 0x57, 0x3c, - 0xf1, 0x19, 0x40, 0xa2, 0x38, 0x44, 0xc0, 0xe5, 0xf1, 0x17, 0x00, 0xb0, - 0x06, 0x43, 0x7f, 0x1c, 0xf0, 0x17, 0x40, 0x42, 0xb1, 0x27, 0xf2, 0x17, - 0x00, 0x43, 0x57, 0x18, 0xf5, 0x17, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xa2, - 0x0c, 0x44, 0xc0, 0xe5, 0xf6, 0x17, 0x00, 0x43, 0x68, 0x74, 0xf7, 0x17, - 0x40, 0x42, 0xc3, 0x0a, 0xf8, 0x17, 0x00, 0x43, 0x8e, 0xef, 0xf9, 0x17, - 0x40, 0x42, 0xc3, 0x0a, 0xf3, 0x17, 0x00, 0x43, 0x8e, 0xef, 0xf4, 0x17, - 0x40, 0x80, 0x5a, 0x8d, 0x01, 0xff, 0xa2, 0x34, 0x05, 0xc0, 0xe5, 0x24, - 0xb0, 0x01, 0xff, 0x03, 0x69, 0x74, 0x11, 0x04, 0x2a, 0x29, 0x01, 0xff, - 0x44, 0xaa, 0xed, 0xef, 0x19, 0x00, 0x43, 0x57, 0x3c, 0xff, 0x19, 0x40, - 0x44, 0xaa, 0xed, 0xec, 0x19, 0x00, 0x43, 0x57, 0x3c, 0xfc, 0x19, 0x40, - 0x44, 0xaa, 0xed, 0xeb, 0x19, 0x00, 0x43, 0x57, 0x3c, 0xfb, 0x19, 0x40, - 0x03, 0x8a, 0x33, 0x11, 0x04, 0x8e, 0xef, 0x01, 0xff, 0x44, 0xaa, 0xed, - 0xee, 0x19, 0x00, 0x43, 0x57, 0x3c, 0xfe, 0x19, 0x40, 0x44, 0xaa, 0xed, - 0xed, 0x19, 0x00, 0x43, 0x57, 0x3c, 0xfd, 0x19, 0x40, 0x44, 0xaa, 0xed, - 0xea, 0x19, 0x00, 0x43, 0x57, 0x3c, 0xfa, 0x19, 0x40, 0x03, 0x8a, 0x33, - 0x11, 0x04, 0x8e, 0xef, 0x01, 0xff, 0x44, 0xaa, 0xed, 0xe4, 0x19, 0x00, - 0x43, 0x57, 0x3c, 0xf4, 0x19, 0x40, 0x44, 0xaa, 0xed, 0xe3, 0x19, 0x00, - 0x43, 0x57, 0x3c, 0xf3, 0x19, 0x40, 0xa1, 0x84, 0x01, 0xa2, 0x68, 0xa3, - 0x5a, 0xab, 0x46, 0x47, 0xf5, 0xcf, 0xd7, 0x17, 0x00, 0x4b, 0xa4, 0x9d, - 0xc9, 0x17, 0x00, 0x47, 0xb9, 0xd0, 0xc6, 0x17, 0x00, 0x4b, 0x1a, 0x9f, - 0xd9, 0x17, 0x00, 0xb2, 0x20, 0x4d, 0xb8, 0x86, 0xd0, 0x17, 0x00, 0xb4, - 0x0c, 0x46, 0x1a, 0xde, 0xd1, 0x17, 0x00, 0x4d, 0x1b, 0x89, 0xc8, 0x17, - 0x40, 0x4a, 0x43, 0xac, 0xcd, 0x17, 0x00, 0x46, 0x8e, 0xdc, 0xca, 0x17, - 0x40, 0x46, 0x2c, 0xd8, 0xc7, 0x17, 0x00, 0x44, 0x72, 0xee, 0xcc, 0x17, - 0x40, 0x46, 0xc4, 0xd6, 0xce, 0x17, 0x00, 0x43, 0x90, 0x00, 0xd4, 0x17, - 0x00, 0x46, 0xda, 0xdb, 0xda, 0x17, 0x40, 0x4e, 0x62, 0x74, 0xd6, 0x17, - 0x00, 0x44, 0xeb, 0xe5, 0xd2, 0x17, 0x40, 0xa1, 0x06, 0x45, 0x31, 0xe3, - 0xd8, 0x17, 0x40, 0x44, 0x5e, 0xee, 0xcb, 0x17, 0x00, 0x48, 0xc2, 0xc7, - 0xd5, 0x17, 0x00, 0x48, 0x10, 0xb4, 0xd3, 0x17, 0x40, 0x44, 0x16, 0xed, - 0xcf, 0x17, 0x00, 0x47, 0xc9, 0xd3, 0xdd, 0x17, 0x00, 0x4c, 0xc9, 0x94, + 0x04, 0x5b, 0x03, 0xe9, 0x02, 0x06, 0x60, 0x16, 0x01, 0xff, 0xa2, 0xc0, + 0x02, 0x03, 0x6a, 0xf1, 0xd3, 0x01, 0x0a, 0xd1, 0xac, 0x88, 0x01, 0x05, + 0xdf, 0xe8, 0x78, 0xb0, 0x06, 0x49, 0x26, 0xc0, 0xf0, 0x19, 0x40, 0x49, + 0x60, 0xb6, 0xe0, 0x19, 0x00, 0x03, 0xe6, 0x75, 0x5a, 0x03, 0xc3, 0x18, + 0x01, 0xff, 0x80, 0x47, 0x8d, 0x01, 0xff, 0xa2, 0x21, 0x05, 0xdf, 0xe8, + 0x11, 0x04, 0xe5, 0x75, 0x01, 0xff, 0x44, 0xe9, 0xf0, 0xe7, 0x19, 0x00, + 0x43, 0x27, 0x3d, 0xf7, 0x19, 0x40, 0x44, 0xe9, 0xf0, 0xe6, 0x19, 0x00, + 0x43, 0x27, 0x3d, 0xf6, 0x19, 0x40, 0x03, 0x5a, 0x34, 0x11, 0x04, 0xdd, + 0xf2, 0x01, 0xff, 0x44, 0xe9, 0xf0, 0xe9, 0x19, 0x00, 0x43, 0x27, 0x3d, + 0xf9, 0x19, 0x40, 0x44, 0xe9, 0xf0, 0xe8, 0x19, 0x00, 0x43, 0x27, 0x3d, + 0xf8, 0x19, 0x40, 0x44, 0xe9, 0xf0, 0xe5, 0x19, 0x00, 0x43, 0x27, 0x3d, + 0xf5, 0x19, 0x40, 0x44, 0xe9, 0xf0, 0xe2, 0x19, 0x00, 0x43, 0x27, 0x3d, + 0xf2, 0x19, 0x40, 0x44, 0xe9, 0xf0, 0xe1, 0x19, 0x00, 0x43, 0x27, 0x3d, + 0xf1, 0x19, 0x40, 0xa2, 0x38, 0x44, 0xdf, 0xe8, 0xf1, 0x17, 0x00, 0xb0, + 0x06, 0x43, 0x21, 0x1d, 0xf0, 0x17, 0x40, 0x42, 0x52, 0x28, 0xf2, 0x17, + 0x00, 0x43, 0xc3, 0x18, 0xf5, 0x17, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xa2, + 0x0c, 0x44, 0xdf, 0xe8, 0xf6, 0x17, 0x00, 0x43, 0xe5, 0x75, 0xf7, 0x17, + 0x40, 0x42, 0x12, 0x0b, 0xf8, 0x17, 0x00, 0x43, 0xdd, 0xf2, 0xf9, 0x17, + 0x40, 0x42, 0x12, 0x0b, 0xf3, 0x17, 0x00, 0x43, 0xdd, 0xf2, 0xf4, 0x17, + 0x40, 0x80, 0x5a, 0x8d, 0x01, 0xff, 0xa2, 0x34, 0x05, 0xdf, 0xe8, 0x24, + 0xb0, 0x01, 0xff, 0x03, 0xe6, 0x75, 0x11, 0x04, 0xee, 0x2e, 0x01, 0xff, + 0x44, 0xe9, 0xf0, 0xef, 0x19, 0x00, 0x43, 0x27, 0x3d, 0xff, 0x19, 0x40, + 0x44, 0xe9, 0xf0, 0xec, 0x19, 0x00, 0x43, 0x27, 0x3d, 0xfc, 0x19, 0x40, + 0x44, 0xe9, 0xf0, 0xeb, 0x19, 0x00, 0x43, 0x27, 0x3d, 0xfb, 0x19, 0x40, + 0x03, 0x5a, 0x34, 0x11, 0x04, 0xdd, 0xf2, 0x01, 0xff, 0x44, 0xe9, 0xf0, + 0xee, 0x19, 0x00, 0x43, 0x27, 0x3d, 0xfe, 0x19, 0x40, 0x44, 0xe9, 0xf0, + 0xed, 0x19, 0x00, 0x43, 0x27, 0x3d, 0xfd, 0x19, 0x40, 0x44, 0xe9, 0xf0, + 0xea, 0x19, 0x00, 0x43, 0x27, 0x3d, 0xfa, 0x19, 0x40, 0x03, 0x5a, 0x34, + 0x11, 0x04, 0xdd, 0xf2, 0x01, 0xff, 0x44, 0xe9, 0xf0, 0xe4, 0x19, 0x00, + 0x43, 0x27, 0x3d, 0xf4, 0x19, 0x40, 0x44, 0xe9, 0xf0, 0xe3, 0x19, 0x00, + 0x43, 0x27, 0x3d, 0xf3, 0x19, 0x40, 0xa1, 0x84, 0x01, 0xa2, 0x68, 0xa3, + 0x5a, 0xab, 0x46, 0x47, 0xc8, 0xd2, 0xd7, 0x17, 0x00, 0x4b, 0xca, 0x9f, + 0xc9, 0x17, 0x00, 0x47, 0x8c, 0xd3, 0xc6, 0x17, 0x00, 0x4b, 0x4b, 0xa1, + 0xd9, 0x17, 0x00, 0xb2, 0x20, 0x4d, 0x75, 0x88, 0xd0, 0x17, 0x00, 0xb4, + 0x0c, 0x46, 0x2a, 0xe1, 0xd1, 0x17, 0x00, 0x4d, 0xe5, 0x8a, 0xc8, 0x17, + 0x40, 0x4a, 0x93, 0xae, 0xcd, 0x17, 0x00, 0x46, 0x92, 0xdf, 0xca, 0x17, + 0x40, 0x46, 0x18, 0xdb, 0xc7, 0x17, 0x00, 0x44, 0xb5, 0xf1, 0xcc, 0x17, + 0x40, 0x46, 0xaa, 0xd9, 0xce, 0x17, 0x00, 0x43, 0x90, 0x00, 0xd4, 0x17, + 0x00, 0x46, 0xd2, 0xde, 0xda, 0x17, 0x40, 0x4e, 0xdf, 0x75, 0xd6, 0x17, + 0x00, 0x44, 0x0a, 0xe9, 0xd2, 0x17, 0x40, 0xa1, 0x06, 0x45, 0x41, 0xe6, + 0xd8, 0x17, 0x40, 0x44, 0xa1, 0xf1, 0xcb, 0x17, 0x00, 0x48, 0x70, 0xca, + 0xd5, 0x17, 0x00, 0x48, 0x61, 0xb6, 0xd3, 0x17, 0x40, 0x44, 0x55, 0xf0, + 0xcf, 0x17, 0x00, 0x47, 0x95, 0xd6, 0xdd, 0x17, 0x00, 0x4c, 0xb7, 0x96, 0xdc, 0x17, 0x40, 0x42, 0x16, 0x00, 0x94, 0x17, 0x00, 0xa3, 0xa9, 0x01, 0xa4, 0x9e, 0x01, 0x42, 0x22, 0x00, 0xa0, 0x17, 0x00, 0xab, 0x83, 0x01, - 0xac, 0x79, 0x42, 0x98, 0x07, 0x98, 0x17, 0x00, 0xae, 0x5b, 0xb0, 0x4b, - 0x42, 0xf4, 0x13, 0xa2, 0x17, 0x00, 0x42, 0xd0, 0x00, 0x9a, 0x17, 0x00, - 0xb3, 0x2d, 0xb4, 0x0c, 0x42, 0x68, 0x1c, 0x9c, 0x17, 0x00, 0x42, 0x60, - 0x46, 0x99, 0x17, 0x40, 0xe1, 0x8f, 0x17, 0x00, 0xa8, 0x11, 0xef, 0x91, + 0xac, 0x79, 0x42, 0xc3, 0x07, 0x98, 0x17, 0x00, 0xae, 0x5b, 0xb0, 0x4b, + 0x42, 0x43, 0x14, 0xa2, 0x17, 0x00, 0x42, 0xd0, 0x00, 0x9a, 0x17, 0x00, + 0xb3, 0x2d, 0xb4, 0x0c, 0x42, 0x0a, 0x1d, 0x9c, 0x17, 0x00, 0x42, 0xa9, + 0x47, 0x99, 0x17, 0x40, 0xe1, 0x8f, 0x17, 0x00, 0xa8, 0x11, 0xef, 0x91, 0x17, 0x00, 0x02, 0x53, 0x00, 0x01, 0xff, 0xe1, 0x8b, 0x17, 0x00, 0xef, 0x8d, 0x17, 0x40, 0xe1, 0x90, 0x17, 0x00, 0xef, 0x92, 0x17, 0x40, 0xe1, - 0x9f, 0x17, 0x00, 0x42, 0x22, 0x00, 0x9d, 0x17, 0x00, 0x42, 0x35, 0x03, + 0x9f, 0x17, 0x00, 0x42, 0x22, 0x00, 0x9d, 0x17, 0x00, 0x42, 0x60, 0x03, 0x9e, 0x17, 0x40, 0xa8, 0x04, 0xef, 0x96, 0x17, 0x40, 0xe1, 0x95, 0x17, - 0x00, 0xef, 0x97, 0x17, 0x40, 0x42, 0xb7, 0x13, 0x84, 0x17, 0x00, 0x42, - 0xb4, 0x01, 0x8e, 0x17, 0x00, 0xef, 0x93, 0x17, 0x00, 0x42, 0x60, 0x46, + 0x00, 0xef, 0x97, 0x17, 0x40, 0x42, 0x06, 0x14, 0x84, 0x17, 0x00, 0x42, + 0xb4, 0x01, 0x8e, 0x17, 0x00, 0xef, 0x93, 0x17, 0x00, 0x42, 0xa9, 0x47, 0x89, 0x17, 0x40, 0xe1, 0xa1, 0x17, 0x00, 0xef, 0x9b, 0x17, 0x40, 0xe1, 0x80, 0x17, 0x00, 0xa8, 0x04, 0xef, 0x82, 0x17, 0x40, 0xe1, 0x81, 0x17, 0x00, 0xef, 0x83, 0x17, 0x40, 0xe1, 0x8a, 0x17, 0x00, 0xef, 0x8c, 0x17, 0x40, 0xe1, 0x85, 0x17, 0x00, 0xa8, 0x04, 0xef, 0x87, 0x17, 0x40, 0xe1, - 0x86, 0x17, 0x00, 0xef, 0x88, 0x17, 0x40, 0x42, 0x26, 0x0b, 0xad, 0x17, - 0x80, 0x4e, 0xb1, 0x0b, 0x42, 0x34, 0x0a, 0xab, 0x17, 0xc0, 0x00, 0xf9, + 0x86, 0x17, 0x00, 0xef, 0x88, 0x17, 0x40, 0x42, 0x75, 0x0b, 0xad, 0x17, + 0x80, 0x4e, 0xb1, 0x0b, 0x42, 0x83, 0x0a, 0xab, 0x17, 0xc0, 0x00, 0xf9, 0xac, 0x17, 0x40, 0xa1, 0x2f, 0xe5, 0xaf, 0x17, 0x00, 0xe9, 0xa5, 0x17, - 0x80, 0x22, 0x08, 0xb2, 0xc6, 0x12, 0xf5, 0xa7, 0x17, 0xc0, 0x00, 0xeb, + 0x80, 0x22, 0x08, 0x58, 0xc9, 0x12, 0xf5, 0xa7, 0x17, 0xc0, 0x00, 0xeb, 0xa8, 0x17, 0x00, 0xf5, 0xa9, 0x17, 0xc0, 0x00, 0xf6, 0xaa, 0x17, 0x40, - 0x43, 0xbf, 0x0a, 0xb1, 0x17, 0x00, 0x43, 0xd0, 0x09, 0xb2, 0x17, 0x40, + 0x43, 0x0e, 0x0b, 0xb1, 0x17, 0x00, 0x43, 0x1f, 0x0a, 0xb2, 0x17, 0x40, 0xe9, 0xa6, 0x17, 0x40, 0xe1, 0xa4, 0x17, 0x00, 0xe9, 0xb0, 0x17, 0x00, 0xf1, 0xa3, 0x17, 0x00, 0xf5, 0xb3, 0x17, 0x40, 0xf9, 0xae, 0x17, 0x40, - 0x45, 0xc3, 0x0a, 0xe8, 0x17, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xe9, - 0x17, 0x00, 0x43, 0xbf, 0x0a, 0xe1, 0x17, 0x00, 0xb3, 0x14, 0xb4, 0x06, - 0x44, 0xa1, 0x1d, 0xe0, 0x17, 0x40, 0x44, 0x25, 0x01, 0xe3, 0x17, 0x00, - 0x42, 0x15, 0x02, 0xe2, 0x17, 0x40, 0x44, 0x27, 0x1d, 0xe7, 0x17, 0x00, - 0x42, 0x60, 0x25, 0xe6, 0x17, 0x40, 0x43, 0xa7, 0x05, 0xe5, 0x17, 0x00, - 0x43, 0xcb, 0x06, 0xe4, 0x17, 0x40, 0x4a, 0x5d, 0xa6, 0x04, 0xd8, 0x80, - 0x06, 0x46, 0x11, 0x81, 0xe4, 0x6f, 0x41, 0x45, 0x4e, 0xdf, 0xff, 0x8c, - 0x41, 0x43, 0xba, 0x17, 0xaf, 0xfa, 0x01, 0x08, 0xca, 0xc7, 0x01, 0xff, - 0x06, 0xc4, 0x06, 0xae, 0x03, 0x51, 0xb3, 0x58, 0x48, 0x0a, 0x01, 0x07, - 0xc1, 0x05, 0xc0, 0x01, 0x07, 0x2f, 0x39, 0x9c, 0x01, 0x0c, 0x01, 0x16, - 0x5b, 0x05, 0x2f, 0x03, 0x2f, 0xb6, 0x01, 0xff, 0x45, 0x5c, 0x23, 0x3f, - 0x0a, 0x01, 0x05, 0x6d, 0x38, 0x01, 0xff, 0x4b, 0x72, 0x38, 0x0c, 0x0a, - 0x01, 0x05, 0x2f, 0x03, 0x01, 0xff, 0xe5, 0x05, 0x0a, 0x01, 0xe9, 0x01, - 0x0a, 0x01, 0xef, 0x06, 0x0a, 0x01, 0xf5, 0x02, 0x0a, 0x01, 0x49, 0x9b, - 0xbe, 0x03, 0x0a, 0x41, 0x48, 0xd0, 0x15, 0x0e, 0x0a, 0x01, 0x49, 0x2b, - 0x32, 0x38, 0x0a, 0x01, 0x45, 0xec, 0xe1, 0x39, 0x0a, 0x01, 0x02, 0x3b, - 0x01, 0x06, 0x47, 0xa1, 0x4a, 0x0f, 0x0a, 0x41, 0x47, 0x52, 0x12, 0x3a, - 0x0a, 0x01, 0x4f, 0x9d, 0x72, 0x0d, 0x0a, 0x41, 0xa3, 0x2f, 0xa4, 0x1a, - 0xac, 0x0c, 0x48, 0x8a, 0xc5, 0x54, 0x0a, 0x01, 0x4c, 0xd3, 0x14, 0x51, - 0x0a, 0x41, 0x44, 0xf8, 0x26, 0x58, 0x0a, 0x01, 0x44, 0x45, 0x78, 0x55, - 0x0a, 0x41, 0x44, 0xd1, 0x1f, 0x56, 0x0a, 0x01, 0xaf, 0x01, 0xff, 0xf4, - 0x50, 0x0a, 0x01, 0x4a, 0xd9, 0x9e, 0x57, 0x0a, 0x41, 0x45, 0xe8, 0x02, - 0x52, 0x0a, 0x01, 0x4b, 0xca, 0x8b, 0x53, 0x0a, 0x41, 0x04, 0xbf, 0x0a, - 0x0f, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x44, 0x0a, 0x01, 0x45, 0xde, - 0x2b, 0x45, 0x0a, 0x41, 0x47, 0x22, 0x11, 0x46, 0x0a, 0x01, 0x48, 0xd5, - 0x5c, 0x47, 0x0a, 0x41, 0xe1, 0x00, 0x0a, 0x01, 0xa2, 0xd2, 0x01, 0xa3, + 0x45, 0x12, 0x0b, 0xe8, 0x17, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xe9, + 0x17, 0x00, 0x43, 0x0e, 0x0b, 0xe1, 0x17, 0x00, 0xb3, 0x14, 0xb4, 0x06, + 0x44, 0x43, 0x1e, 0xe0, 0x17, 0x40, 0x44, 0x25, 0x01, 0xe3, 0x17, 0x00, + 0x42, 0x15, 0x02, 0xe2, 0x17, 0x40, 0x44, 0xc9, 0x1d, 0xe7, 0x17, 0x00, + 0x42, 0x01, 0x26, 0xe6, 0x17, 0x40, 0x43, 0xd2, 0x05, 0xe5, 0x17, 0x00, + 0x43, 0xf6, 0x06, 0xe4, 0x17, 0x40, 0x4a, 0x99, 0xa8, 0x04, 0xd8, 0x80, + 0x06, 0x46, 0xa7, 0x82, 0xe4, 0x6f, 0x41, 0x45, 0x59, 0xe2, 0xff, 0x8c, + 0x41, 0x43, 0x26, 0x18, 0xaf, 0xfa, 0x01, 0x08, 0x78, 0xca, 0x01, 0xff, + 0x06, 0xef, 0x06, 0xae, 0x03, 0x51, 0x1e, 0x5a, 0x48, 0x0a, 0x01, 0x07, + 0xec, 0x05, 0xc0, 0x01, 0x07, 0xff, 0x39, 0x9c, 0x01, 0x0c, 0x6d, 0x16, + 0x5b, 0x05, 0x5a, 0x03, 0x2f, 0xb6, 0x01, 0xff, 0x45, 0xe4, 0x23, 0x3f, + 0x0a, 0x01, 0x05, 0x3d, 0x39, 0x01, 0xff, 0x4b, 0x42, 0x39, 0x0c, 0x0a, + 0x01, 0x05, 0x5a, 0x03, 0x01, 0xff, 0xe5, 0x05, 0x0a, 0x01, 0xe9, 0x01, + 0x0a, 0x01, 0xef, 0x06, 0x0a, 0x01, 0xf5, 0x02, 0x0a, 0x01, 0x49, 0x22, + 0xc1, 0x03, 0x0a, 0x41, 0x48, 0x3c, 0x16, 0x0e, 0x0a, 0x01, 0x49, 0xfb, + 0x32, 0x38, 0x0a, 0x01, 0x45, 0xfc, 0xe4, 0x39, 0x0a, 0x01, 0x02, 0x3b, + 0x01, 0x06, 0x47, 0xea, 0x4b, 0x0f, 0x0a, 0x41, 0x47, 0xa1, 0x12, 0x3a, + 0x0a, 0x01, 0x4f, 0x28, 0x74, 0x0d, 0x0a, 0x41, 0xa3, 0x2f, 0xa4, 0x1a, + 0xac, 0x0c, 0x48, 0x28, 0xc8, 0x54, 0x0a, 0x01, 0x4c, 0x3f, 0x15, 0x51, + 0x0a, 0x41, 0x44, 0x99, 0x27, 0x58, 0x0a, 0x01, 0x44, 0xa6, 0x79, 0x55, + 0x0a, 0x41, 0x44, 0x73, 0x20, 0x56, 0x0a, 0x01, 0xaf, 0x01, 0xff, 0xf4, + 0x50, 0x0a, 0x01, 0x4a, 0x0a, 0xa1, 0x57, 0x0a, 0x41, 0x45, 0x13, 0x03, + 0x52, 0x0a, 0x01, 0x4b, 0x88, 0x8d, 0x53, 0x0a, 0x41, 0x04, 0x0e, 0x0b, + 0x0f, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x44, 0x0a, 0x01, 0x45, 0x7f, + 0x2c, 0x45, 0x0a, 0x41, 0x47, 0x71, 0x11, 0x46, 0x0a, 0x01, 0x48, 0x40, + 0x5e, 0x47, 0x0a, 0x41, 0xe1, 0x00, 0x0a, 0x01, 0xa2, 0xd2, 0x01, 0xa3, 0xc5, 0x01, 0xa4, 0xac, 0x01, 0xa7, 0x9f, 0x01, 0x42, 0x22, 0x00, 0x31, - 0x0a, 0x01, 0x42, 0xbd, 0x26, 0x17, 0x0a, 0x01, 0xab, 0x80, 0x01, 0x42, + 0x0a, 0x01, 0x42, 0x56, 0x19, 0x17, 0x0a, 0x01, 0xab, 0x80, 0x01, 0x42, 0x74, 0x00, 0x2b, 0x0a, 0x01, 0x42, 0x6c, 0x00, 0x28, 0x0a, 0x01, 0xae, 0x62, 0xb0, 0x56, 0x42, 0x71, 0x00, 0x2a, 0x0a, 0x01, 0xb3, 0x3e, 0xb4, - 0x18, 0xb6, 0x0c, 0x42, 0x34, 0x22, 0x29, 0x0a, 0x01, 0x42, 0x59, 0x00, + 0x18, 0xb6, 0x0c, 0x42, 0xbc, 0x22, 0x29, 0x0a, 0x01, 0x42, 0x59, 0x00, 0x30, 0x0a, 0x41, 0xe1, 0x2c, 0x0a, 0x01, 0x42, 0x22, 0x00, 0x35, 0x0a, 0x41, 0xe1, 0x1f, 0x0a, 0x01, 0x42, 0x22, 0x00, 0x20, 0x0a, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x1a, 0x0a, 0x01, 0x42, 0x22, 0x00, 0x1b, 0x0a, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x34, 0x0a, 0x01, 0x42, 0x22, 0x00, 0x33, 0x0a, 0x41, 0xe1, 0x2f, 0x0a, 0x01, 0x42, 0x22, 0x00, 0x2d, 0x0a, 0x01, 0x42, - 0x15, 0x06, 0x2e, 0x0a, 0x41, 0xe1, 0x24, 0x0a, 0x01, 0x42, 0x22, 0x00, - 0x25, 0x0a, 0x41, 0xe1, 0x23, 0x0a, 0x01, 0x42, 0xff, 0x04, 0x1e, 0x0a, - 0x01, 0x42, 0x34, 0x22, 0x19, 0x0a, 0x41, 0xe1, 0x10, 0x0a, 0x01, 0x42, + 0x40, 0x06, 0x2e, 0x0a, 0x41, 0xe1, 0x24, 0x0a, 0x01, 0x42, 0x22, 0x00, + 0x25, 0x0a, 0x41, 0xe1, 0x23, 0x0a, 0x01, 0x42, 0x2a, 0x05, 0x1e, 0x0a, + 0x01, 0x42, 0xbc, 0x22, 0x19, 0x0a, 0x41, 0xe1, 0x10, 0x0a, 0x01, 0x42, 0x22, 0x00, 0x11, 0x0a, 0x01, 0x42, 0x1b, 0x02, 0x32, 0x0a, 0x41, 0xe1, 0x12, 0x0a, 0x01, 0x42, 0x22, 0x00, 0x13, 0x0a, 0x41, 0xe1, 0x21, 0x0a, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x22, 0x0a, 0x41, 0xe1, 0x1c, 0x0a, 0x01, 0x42, 0x22, 0x00, 0x1d, 0x0a, 0x41, 0xe1, 0x15, 0x0a, 0x01, 0x42, 0x22, 0x00, 0x16, 0x0a, 0x41, 0xe1, 0x26, 0x0a, 0x01, 0x42, 0x22, 0x00, - 0x27, 0x0a, 0x41, 0x44, 0xca, 0x06, 0x43, 0x0a, 0x01, 0x43, 0xbf, 0x0a, + 0x27, 0x0a, 0x41, 0x44, 0xf5, 0x06, 0x43, 0x0a, 0x01, 0x43, 0x0e, 0x0b, 0x40, 0x0a, 0x01, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x42, 0x0a, 0x01, - 0x42, 0x15, 0x02, 0x41, 0x0a, 0x41, 0x49, 0x5e, 0xb9, 0x2a, 0x21, 0x00, - 0xf9, 0x11, 0xf5, 0xc1, 0x00, 0x45, 0x26, 0x14, 0x28, 0x23, 0x80, 0x0c, - 0x47, 0xfa, 0xcc, 0x1f, 0xf5, 0x01, 0x44, 0x10, 0x20, 0xb1, 0xce, 0x41, - 0x4a, 0x83, 0xa3, 0xa6, 0xf5, 0x41, 0x43, 0x3f, 0x4f, 0x4b, 0xf5, 0x01, - 0x05, 0x85, 0xe4, 0x90, 0x1d, 0x0f, 0x84, 0x6d, 0x81, 0x1c, 0xae, 0xf2, - 0x0b, 0x06, 0x3a, 0x66, 0xda, 0x06, 0x03, 0xc0, 0xde, 0xb4, 0x02, 0x07, - 0xef, 0xd4, 0x01, 0xff, 0x06, 0xc4, 0x06, 0xe8, 0x01, 0x07, 0xc1, 0x05, - 0x42, 0x05, 0x2f, 0x03, 0x32, 0x05, 0x83, 0x2c, 0x1b, 0x06, 0x6c, 0x38, + 0x42, 0x15, 0x02, 0x41, 0x0a, 0x41, 0x49, 0xc1, 0xbb, 0x2a, 0x21, 0x00, + 0xf9, 0x11, 0xf5, 0xc1, 0x00, 0x45, 0x75, 0x14, 0x28, 0x23, 0x80, 0x0c, + 0x47, 0xcd, 0xcf, 0x1f, 0xf5, 0x01, 0x44, 0xb2, 0x20, 0xb1, 0xce, 0x41, + 0x4a, 0xbf, 0xa5, 0xa6, 0xf5, 0x41, 0x43, 0xe8, 0x60, 0x4b, 0xf5, 0x01, + 0x05, 0x9a, 0xe7, 0x99, 0x1d, 0x0f, 0x2d, 0x6f, 0x8a, 0x1c, 0xae, 0xf2, + 0x0b, 0x06, 0xb6, 0x67, 0xda, 0x06, 0x03, 0xd0, 0xe1, 0xb4, 0x02, 0x07, + 0xc9, 0xd7, 0x01, 0xff, 0x06, 0xef, 0x06, 0xe8, 0x01, 0x07, 0xec, 0x05, + 0x42, 0x05, 0x5a, 0x03, 0x32, 0x05, 0x3b, 0x2d, 0x1b, 0x06, 0x3c, 0x39, 0x01, 0xff, 0xe5, 0x27, 0xa9, 0x80, 0x0d, 0xef, 0x2a, 0xa9, 0x00, 0xf5, 0x28, 0xa9, 0xc0, 0x00, 0xe5, 0x26, 0xa9, 0x40, 0xe5, 0x29, 0xa9, 0x40, - 0x45, 0xe2, 0xe1, 0x2c, 0xa9, 0x80, 0x06, 0x46, 0xbd, 0xca, 0x2b, 0xa9, - 0x40, 0x47, 0xbc, 0xca, 0x2d, 0xa9, 0x40, 0x43, 0xba, 0xf0, 0x2e, 0xa9, - 0x00, 0x44, 0x4e, 0xef, 0x2f, 0xa9, 0x40, 0xe1, 0x22, 0xa9, 0x00, 0x42, + 0x45, 0xf2, 0xe4, 0x2c, 0xa9, 0x80, 0x06, 0x46, 0x7b, 0xcd, 0x2b, 0xa9, + 0x40, 0x47, 0x7a, 0xcd, 0x2d, 0xa9, 0x40, 0x43, 0x0d, 0xf4, 0x2e, 0xa9, + 0x00, 0x44, 0xa5, 0xf2, 0x2f, 0xa9, 0x40, 0xe1, 0x22, 0xa9, 0x00, 0x42, 0x16, 0x00, 0x19, 0xa9, 0x00, 0x42, 0x37, 0x00, 0x21, 0xa9, 0x00, 0x42, - 0xa1, 0x10, 0x18, 0xa9, 0x00, 0x42, 0x24, 0x02, 0x0c, 0xa9, 0x00, 0xa8, + 0xf0, 0x10, 0x18, 0xa9, 0x00, 0x42, 0x24, 0x02, 0x0c, 0xa9, 0x00, 0xa8, 0x7a, 0xe9, 0x24, 0xa9, 0x00, 0xab, 0x6a, 0x42, 0x74, 0x00, 0x1c, 0xa9, 0x00, 0x42, 0x6c, 0x00, 0x17, 0xa9, 0x00, 0xae, 0x4c, 0xaf, 0x42, 0xb0, 0x36, 0x42, 0x71, 0x00, 0x1a, 0xa9, 0x00, 0xb3, 0x24, 0xb4, 0x18, 0x42, - 0xa6, 0x0a, 0x20, 0xa9, 0x00, 0x42, 0xa9, 0x01, 0x1d, 0xa9, 0x00, 0x42, - 0x34, 0x22, 0x1b, 0xa9, 0x00, 0x42, 0x59, 0x00, 0x10, 0xa9, 0x40, 0xe1, + 0xf5, 0x0a, 0x20, 0xa9, 0x00, 0x42, 0xa9, 0x01, 0x1d, 0xa9, 0x00, 0x42, + 0xbc, 0x22, 0x1b, 0xa9, 0x00, 0x42, 0x59, 0x00, 0x10, 0xa9, 0x40, 0xe1, 0x12, 0xa9, 0x00, 0x42, 0x22, 0x00, 0x1e, 0xa9, 0x40, 0xe1, 0x0e, 0xa9, 0x00, 0x42, 0x22, 0x00, 0x0f, 0xa9, 0x40, 0xe1, 0x15, 0xa9, 0x00, 0x42, 0x22, 0x00, 0x16, 0xa9, 0x40, 0xe5, 0x23, 0xa9, 0x00, 0xef, 0x25, 0xa9, 0x40, 0xe1, 0x14, 0xa9, 0x00, 0x42, 0x24, 0x02, 0x0d, 0xa9, 0x00, 0x42, - 0x34, 0x22, 0x11, 0xa9, 0x40, 0xe1, 0x0a, 0xa9, 0x00, 0x42, 0x22, 0x00, + 0xbc, 0x22, 0x11, 0xa9, 0x40, 0xe1, 0x0a, 0xa9, 0x00, 0x42, 0x22, 0x00, 0x0b, 0xa9, 0x40, 0xe1, 0x1f, 0xa9, 0x00, 0x42, 0x12, 0x00, 0x13, 0xa9, - 0x40, 0x45, 0xc3, 0x0a, 0x08, 0xa9, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, - 0x09, 0xa9, 0x00, 0x43, 0xbf, 0x0a, 0x01, 0xa9, 0x00, 0xb3, 0x14, 0xb4, - 0x06, 0x44, 0xa1, 0x1d, 0x00, 0xa9, 0x40, 0x44, 0x25, 0x01, 0x03, 0xa9, - 0x00, 0x42, 0x15, 0x02, 0x02, 0xa9, 0x40, 0x44, 0x27, 0x1d, 0x07, 0xa9, - 0x00, 0x42, 0x60, 0x25, 0x06, 0xa9, 0x40, 0x43, 0xa7, 0x05, 0x05, 0xa9, - 0x00, 0x43, 0xcb, 0x06, 0x04, 0xa9, 0x40, 0x49, 0x0b, 0xb5, 0x42, 0x1f, - 0x01, 0xa4, 0xc6, 0x03, 0x07, 0xc1, 0x05, 0xaf, 0x01, 0x0c, 0x01, 0x16, - 0x5e, 0x05, 0x2f, 0x03, 0x36, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x21, + 0x40, 0x45, 0x12, 0x0b, 0x08, 0xa9, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, + 0x09, 0xa9, 0x00, 0x43, 0x0e, 0x0b, 0x01, 0xa9, 0x00, 0xb3, 0x14, 0xb4, + 0x06, 0x44, 0x43, 0x1e, 0x00, 0xa9, 0x40, 0x44, 0x25, 0x01, 0x03, 0xa9, + 0x00, 0x42, 0x15, 0x02, 0x02, 0xa9, 0x40, 0x44, 0xc9, 0x1d, 0x07, 0xa9, + 0x00, 0x42, 0x01, 0x26, 0x06, 0xa9, 0x40, 0x43, 0xd2, 0x05, 0x05, 0xa9, + 0x00, 0x43, 0xf6, 0x06, 0x04, 0xa9, 0x40, 0x49, 0x5c, 0xb7, 0x42, 0x1f, + 0x01, 0xa4, 0xc6, 0x03, 0x07, 0xec, 0x05, 0xaf, 0x01, 0x0c, 0x6d, 0x16, + 0x5e, 0x05, 0x5a, 0x03, 0x36, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x21, 0xe5, 0x3e, 0x1f, 0x81, 0x18, 0xe9, 0x36, 0x1f, 0x81, 0x0f, 0xf5, 0x38, - 0x1f, 0x81, 0x06, 0x49, 0x9b, 0xbe, 0x3a, 0x1f, 0x41, 0xf5, 0x39, 0x1f, + 0x1f, 0x81, 0x06, 0x49, 0x22, 0xc1, 0x3a, 0x1f, 0x41, 0xf5, 0x39, 0x1f, 0x41, 0xe9, 0x37, 0x1f, 0x41, 0xf5, 0x40, 0x1f, 0x41, 0xe1, 0x34, 0x1f, - 0x01, 0xe9, 0x3f, 0x1f, 0x01, 0x4b, 0xe9, 0x9c, 0x35, 0x1f, 0x41, 0x48, - 0xd0, 0x15, 0x01, 0x1f, 0x01, 0x4b, 0x4f, 0x23, 0x00, 0x1f, 0x01, 0x46, - 0x6c, 0xda, 0x41, 0x1f, 0x01, 0x45, 0x5a, 0x3e, 0x5a, 0x1f, 0x01, 0x45, - 0x32, 0xe7, 0x02, 0x1f, 0x01, 0x47, 0xa1, 0x4a, 0x03, 0x1f, 0x41, 0x58, - 0x4d, 0x26, 0x46, 0x1f, 0x01, 0xa3, 0x39, 0x02, 0x3b, 0x01, 0x2b, 0xa6, - 0x1d, 0xb3, 0x06, 0x4a, 0xe5, 0xaf, 0x4b, 0x1f, 0x41, 0x4d, 0x58, 0x26, - 0x45, 0x1f, 0x01, 0xb0, 0x01, 0xff, 0x4a, 0x1d, 0xa5, 0x48, 0x1f, 0x01, - 0x44, 0xa8, 0x83, 0x4e, 0x1f, 0x41, 0x4c, 0x39, 0x8e, 0x4d, 0x1f, 0x01, - 0x45, 0x13, 0x01, 0x47, 0x1f, 0x41, 0xf4, 0x49, 0x1f, 0x01, 0x48, 0xad, - 0x40, 0x4a, 0x1f, 0x41, 0x45, 0xe8, 0x02, 0x4c, 0x1f, 0x01, 0x4d, 0x9f, - 0x83, 0x4f, 0x1f, 0x41, 0xe1, 0x04, 0x1f, 0x81, 0x84, 0x02, 0xa2, 0xf7, + 0x01, 0xe9, 0x3f, 0x1f, 0x01, 0x4b, 0x0f, 0x9f, 0x35, 0x1f, 0x41, 0x48, + 0x3c, 0x16, 0x01, 0x1f, 0x01, 0x4b, 0xd7, 0x23, 0x00, 0x1f, 0x01, 0x46, + 0x64, 0xdd, 0x41, 0x1f, 0x01, 0x45, 0x3f, 0x3f, 0x5a, 0x1f, 0x01, 0x45, + 0x56, 0xea, 0x02, 0x1f, 0x01, 0x47, 0xea, 0x4b, 0x03, 0x1f, 0x41, 0x58, + 0xee, 0x26, 0x46, 0x1f, 0x01, 0xa3, 0x39, 0x02, 0x3b, 0x01, 0x2b, 0xa6, + 0x1d, 0xb3, 0x06, 0x4a, 0x35, 0xb2, 0x4b, 0x1f, 0x41, 0x4d, 0xf9, 0x26, + 0x45, 0x1f, 0x01, 0xb0, 0x01, 0xff, 0x4a, 0x59, 0xa7, 0x48, 0x1f, 0x01, + 0x44, 0x58, 0x85, 0x4e, 0x1f, 0x41, 0x4c, 0xeb, 0x8f, 0x4d, 0x1f, 0x01, + 0x45, 0x13, 0x01, 0x47, 0x1f, 0x41, 0xf4, 0x49, 0x1f, 0x01, 0x48, 0xba, + 0x41, 0x4a, 0x1f, 0x41, 0x45, 0x13, 0x03, 0x4c, 0x1f, 0x01, 0x4d, 0x4f, + 0x85, 0x4f, 0x1f, 0x41, 0xe1, 0x04, 0x1f, 0x81, 0x84, 0x02, 0xa2, 0xf7, 0x01, 0xa3, 0xea, 0x01, 0xa4, 0xd1, 0x01, 0xe5, 0x0e, 0x1f, 0x01, 0xa7, 0xc0, 0x01, 0x42, 0x22, 0x00, 0x32, 0x1f, 0x01, 0xe9, 0x06, 0x1f, 0x81, 0xb0, 0x01, 0xaa, 0x9d, 0x01, 0xab, 0x90, 0x01, 0x42, 0x74, 0x00, 0x2d, 0x1f, 0x01, 0x42, 0x6c, 0x00, 0x2a, 0x1f, 0x01, 0xae, 0x6c, 0xef, 0x10, 0x1f, 0x01, 0xb0, 0x5c, 0x42, 0x71, 0x00, 0x2c, 0x1f, 0x01, 0xb3, 0x44, - 0xb4, 0x2b, 0xf5, 0x08, 0x1f, 0x81, 0x22, 0x08, 0x9b, 0xbe, 0x0c, 0x42, - 0xa9, 0x01, 0x2e, 0x1f, 0x01, 0x42, 0x34, 0x22, 0x2b, 0x1f, 0x41, 0xec, + 0xb4, 0x2b, 0xf5, 0x08, 0x1f, 0x81, 0x22, 0x08, 0x22, 0xc1, 0x0c, 0x42, + 0xa9, 0x01, 0x2e, 0x1f, 0x01, 0x42, 0xbc, 0x22, 0x2b, 0x1f, 0x41, 0xec, 0x0c, 0x1f, 0x81, 0x09, 0xf2, 0x0a, 0x1f, 0xc1, 0x00, 0xf2, 0x0b, 0x1f, 0x41, 0xec, 0x0d, 0x1f, 0x41, 0xf5, 0x09, 0x1f, 0x41, 0xe1, 0x21, 0x1f, 0x01, 0x42, 0x22, 0x00, 0x22, 0x1f, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x1c, 0x1f, 0x01, 0x42, 0x22, 0x00, 0x1d, 0x1f, 0x41, 0xe1, 0x31, 0x1f, 0x01, - 0x42, 0x22, 0x00, 0x2f, 0x1f, 0x01, 0x42, 0x15, 0x06, 0x30, 0x1f, 0x41, + 0x42, 0x22, 0x00, 0x2f, 0x1f, 0x01, 0x42, 0x40, 0x06, 0x30, 0x1f, 0x41, 0xe1, 0x26, 0x1f, 0x01, 0x42, 0x22, 0x00, 0x27, 0x1f, 0x41, 0xe1, 0x25, - 0x1f, 0x01, 0x42, 0x24, 0x02, 0x16, 0x1f, 0x01, 0x42, 0xff, 0x04, 0x20, - 0x1f, 0x01, 0x42, 0x34, 0x22, 0x1b, 0x1f, 0x41, 0xe1, 0x12, 0x1f, 0x01, + 0x1f, 0x01, 0x42, 0x24, 0x02, 0x16, 0x1f, 0x01, 0x42, 0x2a, 0x05, 0x20, + 0x1f, 0x01, 0x42, 0xbc, 0x22, 0x1b, 0x1f, 0x41, 0xe1, 0x12, 0x1f, 0x01, 0x42, 0x22, 0x00, 0x13, 0x1f, 0x41, 0xe1, 0x19, 0x1f, 0x01, 0x42, 0x22, - 0x00, 0x1a, 0x1f, 0x01, 0x43, 0xd6, 0x34, 0x33, 0x1f, 0x41, 0xe9, 0x07, + 0x00, 0x1a, 0x1f, 0x01, 0x43, 0xa6, 0x35, 0x33, 0x1f, 0x41, 0xe9, 0x07, 0x1f, 0x41, 0xe1, 0x14, 0x1f, 0x01, 0x42, 0x22, 0x00, 0x15, 0x1f, 0x41, 0xe1, 0x23, 0x1f, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x24, 0x1f, 0x41, 0xe1, 0x1e, 0x1f, 0x01, 0x42, 0x22, 0x00, 0x1f, 0x1f, 0x41, 0xe1, 0x17, 0x1f, 0x01, 0x42, 0x22, 0x00, 0x18, 0x1f, 0x41, 0xe1, 0x28, 0x1f, 0x01, 0x42, 0x22, 0x00, 0x29, 0x1f, 0x41, 0xe1, 0x05, 0x1f, 0x01, 0xe9, 0x0f, - 0x1f, 0x41, 0x44, 0xd1, 0x1f, 0x43, 0x1f, 0x01, 0x05, 0xc5, 0x06, 0x06, - 0x4b, 0xd8, 0x9e, 0x44, 0x1f, 0x41, 0x45, 0xc3, 0x0a, 0x58, 0x1f, 0x01, - 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x59, 0x1f, 0x01, 0x43, 0xbf, 0x0a, 0x51, - 0x1f, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x50, 0x1f, 0x41, + 0x1f, 0x41, 0x44, 0x73, 0x20, 0x43, 0x1f, 0x01, 0x05, 0xf0, 0x06, 0x06, + 0x4b, 0x09, 0xa1, 0x44, 0x1f, 0x41, 0x45, 0x12, 0x0b, 0x58, 0x1f, 0x01, + 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x59, 0x1f, 0x01, 0x43, 0x0e, 0x0b, 0x51, + 0x1f, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x50, 0x1f, 0x41, 0x44, 0x25, 0x01, 0x53, 0x1f, 0x01, 0x42, 0x15, 0x02, 0x52, 0x1f, 0x41, - 0x44, 0x27, 0x1d, 0x57, 0x1f, 0x01, 0x42, 0x60, 0x25, 0x56, 0x1f, 0x41, - 0x43, 0xa7, 0x05, 0x55, 0x1f, 0x01, 0x43, 0xcb, 0x06, 0x54, 0x1f, 0x41, - 0x80, 0x1d, 0x0a, 0xf6, 0x11, 0x01, 0xff, 0x4d, 0x86, 0x80, 0xa0, 0x30, - 0x00, 0x54, 0x00, 0x12, 0xfc, 0x30, 0x00, 0x56, 0x4b, 0x36, 0x9c, 0x30, - 0x00, 0x51, 0x50, 0x36, 0x9b, 0x30, 0x40, 0x4c, 0x41, 0x8c, 0xff, 0x30, - 0x00, 0x4e, 0xb6, 0x1f, 0xfd, 0x30, 0x00, 0x07, 0xc1, 0x05, 0x0c, 0x4a, - 0xb1, 0x44, 0xfb, 0x30, 0x00, 0x55, 0x11, 0x3e, 0xfe, 0x30, 0x40, 0xe1, + 0x44, 0xc9, 0x1d, 0x57, 0x1f, 0x01, 0x42, 0x01, 0x26, 0x56, 0x1f, 0x41, + 0x43, 0xd2, 0x05, 0x55, 0x1f, 0x01, 0x43, 0xf6, 0x06, 0x54, 0x1f, 0x41, + 0x80, 0x1d, 0x0a, 0x45, 0x12, 0x01, 0xff, 0x4d, 0x1c, 0x82, 0xa0, 0x30, + 0x00, 0x54, 0x4f, 0x12, 0xfc, 0x30, 0x00, 0x56, 0x1b, 0x37, 0x9c, 0x30, + 0x00, 0x51, 0x20, 0x37, 0x9b, 0x30, 0x40, 0x4c, 0xff, 0x8d, 0xff, 0x30, + 0x00, 0x4e, 0x58, 0x20, 0xfd, 0x30, 0x00, 0x07, 0xec, 0x05, 0x0c, 0x4a, + 0xe6, 0x45, 0xfb, 0x30, 0x00, 0x55, 0xf6, 0x3e, 0xfe, 0x30, 0x40, 0xe1, 0xa2, 0x30, 0x80, 0xb8, 0x04, 0xa2, 0xa1, 0x04, 0xa4, 0x8a, 0x04, 0xe5, 0xa8, 0x30, 0x00, 0xa7, 0xef, 0x03, 0xa8, 0xd8, 0x03, 0xe9, 0xa4, 0x30, 0x00, 0xab, 0xbd, 0x03, 0xad, 0xe3, 0x02, 0xee, 0xf3, 0x30, 0x80, 0xc9, @@ -10382,10 +10523,10 @@ static const unsigned char uname2c_tree[218382] = { 0xe9, 0xf8, 0x30, 0x00, 0xef, 0xfa, 0x30, 0x00, 0xf5, 0xf4, 0x30, 0x40, 0xe1, 0xbf, 0x30, 0x00, 0xe5, 0xc6, 0x30, 0x00, 0xe9, 0xc1, 0x30, 0x00, 0xef, 0xc8, 0x30, 0x00, 0xf5, 0xc4, 0x30, 0x40, 0xe1, 0xb5, 0x30, 0x00, - 0xe5, 0xbb, 0x30, 0x00, 0xe9, 0xb7, 0x30, 0x00, 0x05, 0x0d, 0x07, 0x08, + 0xe5, 0xbb, 0x30, 0x00, 0xe9, 0xb7, 0x30, 0x00, 0x05, 0x5e, 0x07, 0x08, 0xef, 0xbd, 0x30, 0x00, 0xf5, 0xb9, 0x30, 0x40, 0xe1, 0xa1, 0x30, 0x00, 0xe5, 0xa7, 0x30, 0x00, 0xa8, 0x78, 0xe9, 0xa3, 0x30, 0x00, 0xab, 0x62, - 0x42, 0x57, 0x16, 0xfa, 0x31, 0x00, 0xee, 0x67, 0xb1, 0x81, 0x53, 0xef, + 0x42, 0xc3, 0x16, 0xfa, 0x31, 0x00, 0xee, 0x67, 0xb1, 0x81, 0x53, 0xef, 0xa9, 0x30, 0x00, 0xb2, 0x39, 0xb3, 0x2f, 0xb4, 0x25, 0xf5, 0xa5, 0x30, 0x00, 0xb7, 0x0f, 0xb9, 0x01, 0xff, 0xe1, 0xe3, 0x30, 0x00, 0xef, 0xe7, 0x30, 0x00, 0xf5, 0xe5, 0x30, 0x40, 0xe1, 0xee, 0x30, 0x00, 0xe5, 0x65, @@ -10403,7 +10544,7 @@ static const unsigned char uname2c_tree[218382] = { 0x30, 0x00, 0xe9, 0xcb, 0x30, 0x00, 0xef, 0xce, 0x30, 0x00, 0xf5, 0xcc, 0x30, 0x40, 0xe1, 0xde, 0x30, 0x00, 0xe5, 0xe1, 0x30, 0x00, 0xe9, 0xdf, 0x30, 0x80, 0x08, 0xef, 0xe2, 0x30, 0x00, 0xf5, 0xe0, 0x30, 0x40, 0x05, - 0x0b, 0xe6, 0x01, 0xff, 0x0f, 0xdd, 0x6e, 0x1d, 0x05, 0x05, 0x31, 0x01, + 0x2a, 0xe9, 0x01, 0xff, 0x0f, 0x86, 0x70, 0x1d, 0x05, 0xeb, 0x31, 0x01, 0xff, 0xd2, 0xf0, 0xaf, 0x01, 0xd3, 0xf1, 0xaf, 0x01, 0xd4, 0xf2, 0xaf, 0x01, 0xd5, 0xf3, 0xaf, 0x01, 0xd7, 0xf5, 0xaf, 0x01, 0xd8, 0xf6, 0xaf, 0x41, 0xd1, 0xf7, 0xaf, 0x01, 0xd2, 0xf8, 0xaf, 0x01, 0xd3, 0xf9, 0xaf, @@ -10416,8223 +10557,8326 @@ static const unsigned char uname2c_tree[218382] = { 0x00, 0xf5, 0xb0, 0x30, 0x40, 0xe1, 0xc0, 0x30, 0x00, 0xe5, 0xc7, 0x30, 0x00, 0xe9, 0xc2, 0x30, 0x00, 0xef, 0xc9, 0x30, 0x00, 0xf5, 0xc5, 0x30, 0x40, 0xe1, 0xd0, 0x30, 0x00, 0xe5, 0xd9, 0x30, 0x00, 0xe9, 0xd3, 0x30, - 0x00, 0xef, 0xdc, 0x30, 0x00, 0xf5, 0xd6, 0x30, 0x40, 0x07, 0x28, 0x7f, - 0x01, 0xff, 0xe5, 0x00, 0xb0, 0x01, 0x42, 0x45, 0x07, 0x22, 0xb1, 0x01, + 0x00, 0xef, 0xdc, 0x30, 0x00, 0xf5, 0xd6, 0x30, 0x40, 0x07, 0xa4, 0x80, + 0x01, 0xff, 0xe5, 0x00, 0xb0, 0x01, 0x42, 0x7c, 0x31, 0x22, 0xb1, 0x01, 0xb9, 0x01, 0xff, 0xe5, 0x21, 0xb1, 0x01, 0xe9, 0x20, 0xb1, 0x41, 0xa7, - 0xbe, 0x04, 0x05, 0xcf, 0xe5, 0x01, 0xff, 0x4e, 0x38, 0x74, 0xd6, 0x0c, - 0x00, 0x06, 0xc4, 0x06, 0xec, 0x03, 0x02, 0x68, 0x00, 0x9f, 0x01, 0x05, - 0x2f, 0x03, 0x4e, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x3b, 0xe5, 0xc6, - 0x0c, 0x80, 0x32, 0xe9, 0xbf, 0x0c, 0x80, 0x29, 0xef, 0xca, 0x0c, 0x80, - 0x20, 0xf5, 0xc1, 0x0c, 0x80, 0x17, 0x08, 0x9b, 0xbe, 0x01, 0xff, 0xec, - 0xe2, 0x0c, 0x80, 0x09, 0xf2, 0xc3, 0x0c, 0xc0, 0x00, 0xf2, 0xc4, 0x0c, - 0x40, 0xec, 0xe3, 0x0c, 0x40, 0xf5, 0xc2, 0x0c, 0x40, 0xef, 0xcb, 0x0c, - 0x40, 0xe9, 0xc0, 0x0c, 0x40, 0xe5, 0xc7, 0x0c, 0x40, 0xe1, 0xbe, 0x0c, - 0x00, 0xe9, 0xc8, 0x0c, 0x00, 0xf5, 0xcc, 0x0c, 0x40, 0xa1, 0x3f, 0xa3, - 0x31, 0x4b, 0xc0, 0x9b, 0xf1, 0x0c, 0x00, 0x45, 0x5a, 0x3e, 0xbc, 0x0c, - 0x00, 0xb3, 0x17, 0x4b, 0x32, 0xa2, 0xf2, 0x0c, 0x00, 0x02, 0x02, 0x00, - 0x01, 0xff, 0x44, 0x5d, 0x23, 0xcd, 0x0c, 0x00, 0x45, 0xa3, 0x4a, 0x83, - 0x0c, 0x40, 0x46, 0x0d, 0xd3, 0x84, 0x0c, 0x00, 0x52, 0x30, 0x53, 0x80, - 0x0c, 0x40, 0x4a, 0x50, 0x23, 0x81, 0x0c, 0x00, 0x5d, 0xc7, 0x15, 0xf3, - 0x0c, 0x40, 0x47, 0xd1, 0x15, 0x82, 0x0c, 0x00, 0x47, 0xf2, 0x86, 0xbd, - 0x0c, 0x40, 0x49, 0x74, 0x38, 0xd5, 0x0c, 0x00, 0x05, 0xc3, 0x05, 0x01, - 0xff, 0xe1, 0x85, 0x0c, 0x80, 0xab, 0x02, 0xa2, 0x9e, 0x02, 0xa3, 0x91, - 0x02, 0xa4, 0xf8, 0x01, 0xe5, 0x8e, 0x0c, 0x80, 0xee, 0x01, 0x42, 0xe1, - 0x07, 0xde, 0x0c, 0x00, 0xa7, 0xdb, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x0c, - 0x00, 0xe9, 0x87, 0x0c, 0x80, 0xcb, 0x01, 0xaa, 0xbe, 0x01, 0xab, 0xb1, - 0x01, 0xac, 0x9d, 0x01, 0x42, 0x6c, 0x00, 0xae, 0x0c, 0x00, 0xae, 0x78, - 0xef, 0x92, 0x0c, 0x80, 0x6f, 0xb0, 0x63, 0xb2, 0x57, 0xb3, 0x45, 0xb4, - 0x2c, 0xf5, 0x89, 0x0c, 0x80, 0x23, 0xb6, 0x06, 0x42, 0x34, 0x22, 0xaf, - 0x0c, 0x40, 0xe1, 0xb5, 0x0c, 0x00, 0x07, 0x9c, 0xbe, 0x01, 0xff, 0xec, - 0x8c, 0x0c, 0x80, 0x09, 0xf2, 0x8b, 0x0c, 0xc0, 0x00, 0xf2, 0xe0, 0x0c, - 0x40, 0xec, 0xe1, 0x0c, 0x40, 0xf5, 0x8a, 0x0c, 0x40, 0xe1, 0xa4, 0x0c, - 0x00, 0x42, 0x22, 0x00, 0xa5, 0x0c, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x9f, - 0x0c, 0x00, 0x42, 0x22, 0x00, 0xa0, 0x0c, 0x40, 0xe1, 0xb8, 0x0c, 0x00, - 0x42, 0x22, 0x00, 0xb6, 0x0c, 0x00, 0x42, 0x15, 0x06, 0xb7, 0x0c, 0x40, - 0xe1, 0xb0, 0x0c, 0x00, 0x42, 0x71, 0x00, 0xb1, 0x0c, 0x40, 0xe1, 0xaa, - 0x0c, 0x00, 0x42, 0x22, 0x00, 0xab, 0x0c, 0x40, 0xef, 0x93, 0x0c, 0x40, - 0xe1, 0xa8, 0x0c, 0x80, 0x12, 0x42, 0x24, 0x02, 0x99, 0x0c, 0x00, 0x42, - 0xff, 0x04, 0xa3, 0x0c, 0x00, 0x42, 0x34, 0x22, 0x9e, 0x0c, 0x40, 0x4b, - 0xd6, 0x9b, 0xdd, 0x0c, 0x40, 0xe1, 0xb2, 0x0c, 0x00, 0xac, 0x01, 0xff, - 0xe1, 0xb3, 0x0c, 0x00, 0x42, 0x74, 0x00, 0xde, 0x0c, 0x40, 0xe1, 0x95, - 0x0c, 0x00, 0x42, 0x22, 0x00, 0x96, 0x0c, 0x40, 0xe1, 0x9c, 0x0c, 0x00, - 0x42, 0x22, 0x00, 0x9d, 0x0c, 0x40, 0xe9, 0x88, 0x0c, 0x40, 0xe1, 0x97, - 0x0c, 0x00, 0x42, 0x22, 0x00, 0x98, 0x0c, 0x40, 0xe5, 0x8f, 0x0c, 0x40, - 0xe1, 0xa6, 0x0c, 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa7, 0x0c, 0x40, - 0xe1, 0xa1, 0x0c, 0x00, 0x42, 0x22, 0x00, 0xa2, 0x0c, 0x40, 0xe1, 0x9a, - 0x0c, 0x00, 0x42, 0x22, 0x00, 0x9b, 0x0c, 0x40, 0xe1, 0xac, 0x0c, 0x00, - 0x42, 0x22, 0x00, 0xad, 0x0c, 0x40, 0xe1, 0x86, 0x0c, 0x00, 0xe9, 0x90, - 0x0c, 0x00, 0xf5, 0x94, 0x0c, 0x40, 0x45, 0xc3, 0x0a, 0xee, 0x0c, 0x00, - 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xef, 0x0c, 0x00, 0x43, 0xbf, 0x0a, 0xe7, - 0x0c, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xe6, 0x0c, 0x40, - 0x44, 0x25, 0x01, 0xe9, 0x0c, 0x00, 0x42, 0x15, 0x02, 0xe8, 0x0c, 0x40, - 0x44, 0x27, 0x1d, 0xed, 0x0c, 0x00, 0x42, 0x60, 0x25, 0xec, 0x0c, 0x40, - 0x43, 0xa7, 0x05, 0xeb, 0x0c, 0x00, 0x43, 0xcb, 0x06, 0xea, 0x0c, 0x40, - 0x44, 0xe2, 0xeb, 0x98, 0xf9, 0x01, 0x0b, 0x19, 0xa3, 0x01, 0xff, 0xa1, - 0x9b, 0x0b, 0xa2, 0xab, 0x0a, 0xa3, 0xd1, 0x09, 0xa4, 0xdf, 0x08, 0xa5, - 0x9e, 0x08, 0xa6, 0xc1, 0x07, 0xa7, 0x90, 0x07, 0xa8, 0xc1, 0x06, 0xa9, - 0xa9, 0x06, 0x02, 0xbd, 0x26, 0x9a, 0x06, 0x45, 0x7e, 0xa3, 0x11, 0x2f, - 0x00, 0xac, 0xca, 0x05, 0xad, 0xf9, 0x04, 0xae, 0xe3, 0x04, 0xaf, 0xbe, - 0x04, 0xb0, 0x9a, 0x04, 0xb2, 0xe1, 0x03, 0xb3, 0xdf, 0x01, 0xb4, 0x76, - 0x43, 0x1a, 0x03, 0x64, 0x2f, 0x00, 0xb6, 0x62, 0xb7, 0x06, 0x46, 0x04, - 0xd5, 0xc8, 0x2f, 0x40, 0xa1, 0x45, 0xa5, 0x37, 0xa8, 0x29, 0x02, 0x9e, - 0x01, 0x1d, 0xaf, 0x0f, 0xb2, 0x01, 0xff, 0x42, 0xba, 0x05, 0x13, 0x2f, - 0x00, 0x43, 0x63, 0x0e, 0xae, 0x2f, 0x40, 0x43, 0xd5, 0x17, 0x25, 0x2f, - 0x00, 0x42, 0xbb, 0x00, 0x2f, 0x2f, 0x40, 0xe4, 0xb5, 0x2f, 0x00, 0xe5, - 0xa3, 0x2f, 0x40, 0x43, 0x89, 0x00, 0xc6, 0x2f, 0x00, 0x43, 0xaf, 0x02, - 0x69, 0x2f, 0x40, 0x44, 0xd6, 0xeb, 0x4e, 0x2f, 0x00, 0x42, 0x60, 0x01, - 0x91, 0x2f, 0x40, 0x42, 0xf5, 0x59, 0xa1, 0x2f, 0x80, 0x06, 0x43, 0x8b, - 0x00, 0x54, 0x2f, 0x40, 0x4a, 0x20, 0x67, 0x8f, 0x2f, 0x40, 0x45, 0x1f, - 0xe1, 0x95, 0x2f, 0x00, 0x46, 0xe2, 0xd9, 0xa5, 0x2f, 0x40, 0xa1, 0x53, - 0x42, 0x92, 0x01, 0x17, 0x2f, 0x00, 0xa9, 0x3f, 0xaf, 0x31, 0xb2, 0x1d, - 0x02, 0x42, 0x00, 0x0d, 0x42, 0x15, 0x02, 0x06, 0x2f, 0xc0, 0x00, 0x46, - 0x2b, 0x0e, 0x36, 0x2f, 0x40, 0x43, 0xba, 0x15, 0x31, 0x2f, 0x00, 0x43, - 0xbd, 0x01, 0xd4, 0x2f, 0x40, 0x43, 0xe3, 0x02, 0x71, 0x2f, 0x00, 0x42, - 0x27, 0x01, 0x4a, 0x2f, 0x00, 0x44, 0x62, 0xed, 0xcd, 0x2f, 0x40, 0x44, - 0x36, 0x66, 0x86, 0x2f, 0x00, 0x43, 0x28, 0x0e, 0xd2, 0x2f, 0x40, 0x43, - 0x8c, 0x09, 0x8c, 0x2f, 0x00, 0x42, 0x68, 0x00, 0x61, 0x2f, 0x40, 0x43, - 0x3e, 0x01, 0x0f, 0x2f, 0x00, 0x42, 0x0f, 0x07, 0xbc, 0x2f, 0x00, 0x4c, - 0x01, 0x7f, 0xb1, 0x2f, 0x40, 0xa1, 0xec, 0x01, 0xa3, 0xdd, 0x01, 0xa5, - 0xc4, 0x01, 0xa8, 0x99, 0x01, 0xa9, 0x8a, 0x01, 0x43, 0x10, 0x04, 0x6a, - 0x2f, 0x00, 0xac, 0x6e, 0x44, 0x0d, 0x07, 0x29, 0x2f, 0x00, 0x44, 0x0a, - 0xad, 0x39, 0x2f, 0x00, 0x44, 0xf2, 0x0a, 0xb3, 0x2f, 0x00, 0xb0, 0x3a, - 0x45, 0xac, 0x05, 0x45, 0x2f, 0x00, 0xb4, 0x0c, 0x42, 0xf3, 0x0a, 0x47, - 0x2f, 0x00, 0x44, 0xed, 0x4e, 0x62, 0x2f, 0x40, 0x43, 0x1a, 0x00, 0x74, - 0x2f, 0x00, 0xa5, 0x14, 0xaf, 0x01, 0xff, 0x42, 0xa2, 0x05, 0x6f, 0x2f, - 0x00, 0xf0, 0x4c, 0x2f, 0xc0, 0x00, 0x44, 0x45, 0x2f, 0x89, 0x2f, 0x40, - 0x42, 0x57, 0x00, 0x53, 0x2f, 0x00, 0xf0, 0x3b, 0x2f, 0x40, 0xa5, 0x12, - 0x44, 0xe4, 0xbc, 0x70, 0x2f, 0x00, 0x43, 0x69, 0x05, 0x14, 0x2f, 0x00, - 0x44, 0x0e, 0xef, 0x2c, 0x2f, 0x40, 0x42, 0x17, 0x00, 0x6d, 0x2f, 0x00, - 0x43, 0x0a, 0x40, 0x94, 0x2f, 0x40, 0xa1, 0x06, 0x43, 0x6a, 0x1c, 0x5a, - 0x2f, 0x40, 0x42, 0xa4, 0x02, 0x03, 0x2f, 0x00, 0x42, 0x32, 0x00, 0xaa, - 0x2f, 0x40, 0x46, 0xc0, 0xd7, 0x67, 0x2f, 0x00, 0x42, 0xf5, 0x59, 0x77, - 0x2f, 0x40, 0xa5, 0x1a, 0xaf, 0x01, 0xff, 0x42, 0xf0, 0x04, 0x37, 0x2f, - 0x00, 0x04, 0x1e, 0xef, 0x01, 0xff, 0x4a, 0x45, 0xa5, 0xab, 0x2f, 0x00, - 0x45, 0xfd, 0x9b, 0x33, 0x2f, 0x40, 0x42, 0x9c, 0x0a, 0x7a, 0x2f, 0x00, - 0x42, 0x0f, 0x07, 0x99, 0x2f, 0x40, 0x42, 0x13, 0x00, 0x19, 0x2f, 0x00, - 0x44, 0x84, 0x7a, 0x04, 0x2f, 0x00, 0xe5, 0x92, 0x2f, 0x00, 0x42, 0x24, - 0x00, 0x83, 0x2f, 0x40, 0x45, 0x08, 0xe4, 0x20, 0x2f, 0x00, 0x44, 0x4b, - 0x06, 0x42, 0x2f, 0x40, 0x4e, 0x18, 0x75, 0xbf, 0x2f, 0x00, 0x42, 0x8d, - 0x04, 0xc4, 0x2f, 0x00, 0xf9, 0x48, 0x2f, 0x40, 0xa1, 0x26, 0x42, 0x05, - 0x00, 0x9a, 0x2f, 0x00, 0xa9, 0x0c, 0x43, 0x54, 0xc6, 0x27, 0x2f, 0x00, - 0x42, 0xf3, 0x0a, 0x9b, 0x2f, 0x40, 0x42, 0x73, 0x02, 0x76, 0x2f, 0x00, - 0x4c, 0x75, 0x3a, 0x15, 0x2f, 0x00, 0x43, 0x32, 0x00, 0x2e, 0x2f, 0x40, - 0x42, 0x9e, 0x01, 0xac, 0x2f, 0x00, 0xf0, 0x41, 0x2f, 0x00, 0xf4, 0xcf, - 0x2f, 0x40, 0x42, 0x3f, 0x00, 0x97, 0x2f, 0x00, 0x43, 0x13, 0x01, 0x7e, - 0x2f, 0x00, 0x44, 0x14, 0x01, 0x12, 0x2f, 0x00, 0xb2, 0x01, 0xff, 0x45, - 0xa0, 0xd3, 0x1b, 0x2f, 0x00, 0x46, 0xbc, 0xdb, 0x5e, 0x2f, 0x40, 0x42, - 0x5b, 0x1a, 0x7c, 0x2f, 0x00, 0x42, 0xa2, 0x05, 0x00, 0x2f, 0x80, 0x0f, - 0xb0, 0x01, 0xff, 0x46, 0xe8, 0x39, 0x10, 0x2f, 0x00, 0x44, 0xdc, 0x87, - 0x87, 0x2f, 0x40, 0x44, 0x42, 0xef, 0x30, 0x2f, 0x40, 0x42, 0xc2, 0x05, - 0x79, 0x2f, 0x00, 0xaf, 0x01, 0xff, 0x42, 0x1b, 0x03, 0xd0, 0x2f, 0x00, - 0xf4, 0x46, 0x2f, 0x40, 0x42, 0x1a, 0x00, 0x08, 0x2f, 0x00, 0xa5, 0x3a, - 0xa9, 0x2c, 0xaf, 0x01, 0xff, 0x42, 0x10, 0x00, 0x49, 0x2f, 0x00, 0xb2, - 0x15, 0xb5, 0x01, 0xff, 0xae, 0x06, 0x42, 0x53, 0x00, 0x1d, 0x2f, 0x40, - 0xe4, 0xa9, 0x2f, 0x00, 0x44, 0x04, 0x07, 0x2d, 0x2f, 0x40, 0x44, 0x07, - 0x07, 0xa0, 0x2f, 0x00, 0x43, 0xe3, 0x12, 0x85, 0x2f, 0x40, 0x44, 0x2c, - 0x21, 0xc9, 0x2f, 0x00, 0x46, 0x5c, 0xdb, 0x82, 0x2f, 0x40, 0x42, 0x8a, - 0x00, 0x81, 0x2f, 0x00, 0x43, 0x03, 0x12, 0x60, 0x2f, 0x40, 0xa1, 0x39, - 0xa5, 0x1f, 0xa9, 0x0d, 0x43, 0x63, 0x0e, 0xa7, 0x2f, 0xc0, 0x00, 0x47, - 0xd8, 0xca, 0x35, 0x2f, 0x40, 0xe4, 0x07, 0x2f, 0x00, 0x42, 0xa0, 0x19, - 0x63, 0x2f, 0x00, 0x42, 0xa2, 0x05, 0x01, 0x2f, 0x40, 0xa1, 0x0c, 0x42, - 0x69, 0x18, 0xb2, 0x2f, 0x00, 0x42, 0x6d, 0x11, 0x09, 0x2f, 0x40, 0xe6, - 0xb4, 0x2f, 0x00, 0x44, 0xa3, 0x19, 0xb0, 0x2f, 0x40, 0x42, 0x36, 0x01, - 0x4b, 0x2f, 0x00, 0x42, 0x2a, 0x02, 0x2a, 0x2f, 0x40, 0x42, 0x04, 0x00, - 0x5f, 0x2f, 0x00, 0xf2, 0x78, 0x2f, 0x40, 0x42, 0x73, 0x02, 0x0e, 0x2f, - 0x00, 0xae, 0x01, 0xff, 0x42, 0x1e, 0x14, 0x28, 0x2f, 0x00, 0x44, 0x5f, - 0x0a, 0x8d, 0x2f, 0x40, 0xa1, 0x30, 0xa5, 0x1c, 0x4f, 0xb2, 0x6c, 0x16, - 0x2f, 0x00, 0xaf, 0x01, 0xff, 0x42, 0x2a, 0x05, 0x05, 0x2f, 0x00, 0xb2, - 0x01, 0xff, 0xee, 0x93, 0x2f, 0x00, 0x42, 0x1b, 0x03, 0xba, 0x2f, 0x40, - 0xa1, 0x06, 0x42, 0x6b, 0x1b, 0xc7, 0x2f, 0x40, 0xe4, 0xb8, 0x2f, 0x00, - 0x42, 0x34, 0x00, 0x3c, 0x2f, 0x40, 0x42, 0x46, 0x00, 0xbd, 0x2f, 0x00, - 0xac, 0x06, 0x42, 0x1b, 0x00, 0x3f, 0x2f, 0x40, 0x44, 0x06, 0xec, 0x3d, - 0x2f, 0x00, 0x4c, 0x48, 0x74, 0x59, 0x2f, 0x40, 0x43, 0x8a, 0x00, 0xa8, - 0x2f, 0x00, 0x44, 0x5f, 0x7b, 0xc1, 0x2f, 0x00, 0xef, 0x21, 0x2f, 0x80, - 0x11, 0x02, 0x71, 0x00, 0x01, 0xff, 0x42, 0x9e, 0x01, 0x72, 0x2f, 0x00, - 0x42, 0xee, 0x00, 0x8b, 0x2f, 0x40, 0x47, 0xd1, 0xca, 0x22, 0x2f, 0x00, - 0x42, 0x5b, 0x1a, 0xa6, 0x2f, 0x40, 0xa1, 0x46, 0x46, 0xa1, 0x19, 0x7b, - 0x2f, 0x00, 0xa9, 0x26, 0xac, 0x1a, 0x43, 0x25, 0x6b, 0x9c, 0x2f, 0x00, - 0xb2, 0x06, 0x42, 0x42, 0x00, 0x51, 0x2f, 0x40, 0x46, 0xac, 0xd6, 0xb9, - 0x2f, 0x00, 0x42, 0x55, 0x18, 0xcc, 0x2f, 0x40, 0x43, 0x2b, 0x38, 0xd5, - 0x2f, 0x00, 0xf9, 0xb6, 0x2f, 0x40, 0x43, 0x7a, 0x23, 0x65, 0x2f, 0x00, - 0x43, 0xca, 0x00, 0xbe, 0x2f, 0x00, 0x42, 0x88, 0x00, 0x55, 0x2f, 0x00, - 0x42, 0xa4, 0x02, 0xc2, 0x2f, 0x40, 0x42, 0x73, 0x02, 0xaf, 0x2f, 0x00, - 0x42, 0x1d, 0x01, 0x5b, 0x2f, 0x00, 0x44, 0xa3, 0x19, 0x57, 0x2f, 0x40, - 0xa1, 0x2d, 0x44, 0xc9, 0x00, 0x0b, 0x2f, 0x00, 0x49, 0x94, 0xb9, 0xcb, - 0x2f, 0x00, 0xae, 0x13, 0x43, 0x28, 0x1d, 0xd1, 0x2f, 0x80, 0x06, 0x42, - 0x4d, 0x00, 0x6c, 0x2f, 0x40, 0x43, 0xa1, 0x01, 0x23, 0x2f, 0x40, 0x47, - 0x23, 0x67, 0x1e, 0x2f, 0x00, 0x43, 0x8b, 0x00, 0x0a, 0x2f, 0x40, 0xf2, - 0x7f, 0x2f, 0x80, 0x04, 0xf4, 0xb7, 0x2f, 0x40, 0x42, 0x53, 0x00, 0x1f, - 0x2f, 0x40, 0xa5, 0x61, 0xa9, 0x47, 0xaf, 0x13, 0xb2, 0x01, 0xff, 0x44, - 0x44, 0x25, 0xd3, 0x2f, 0x00, 0x42, 0x1d, 0x04, 0xce, 0x2f, 0x00, 0xf9, - 0x32, 0x2f, 0x40, 0x44, 0xee, 0x1c, 0x4f, 0x2f, 0x00, 0xe7, 0x5d, 0x2f, - 0x00, 0x42, 0x0c, 0x00, 0x3e, 0x2f, 0x00, 0xf4, 0x02, 0x2f, 0x80, 0x0c, - 0x46, 0xcc, 0xdd, 0x58, 0x2f, 0x00, 0x46, 0x38, 0xde, 0x0c, 0x2f, 0x40, - 0x04, 0x77, 0x00, 0x01, 0xff, 0x45, 0x46, 0xe2, 0x34, 0x2f, 0x00, 0x44, - 0x01, 0x60, 0x68, 0x2f, 0x40, 0x44, 0x6e, 0x02, 0x43, 0x2f, 0x00, 0xb3, - 0x06, 0x48, 0x6c, 0xb8, 0x18, 0x2f, 0x40, 0xe8, 0x6b, 0x2f, 0x00, 0x48, - 0x25, 0xa3, 0xa4, 0x2f, 0x40, 0x43, 0x25, 0x0f, 0x4d, 0x2f, 0x00, 0x42, - 0x33, 0x00, 0xc5, 0x2f, 0x40, 0xa1, 0x43, 0x44, 0xdf, 0x48, 0x26, 0x2f, - 0x00, 0x43, 0x17, 0x27, 0xa2, 0x2f, 0x00, 0xac, 0x1f, 0xaf, 0x01, 0xff, - 0x43, 0x5b, 0x08, 0x8a, 0x2f, 0x00, 0x45, 0xa7, 0xe5, 0x50, 0x2f, 0x00, - 0x44, 0x12, 0xef, 0x2b, 0x2f, 0x00, 0x43, 0x32, 0x00, 0x0d, 0x2f, 0x00, - 0xf7, 0x5c, 0x2f, 0x40, 0xa1, 0x0c, 0x43, 0x20, 0x47, 0x1a, 0x2f, 0x00, - 0x45, 0x8c, 0x86, 0x90, 0x2f, 0x40, 0xee, 0x52, 0x2f, 0x00, 0xf7, 0x56, - 0x2f, 0x40, 0x42, 0x34, 0x00, 0x9e, 0x2f, 0x00, 0x46, 0x76, 0xcc, 0xc0, - 0x2f, 0x00, 0x42, 0x32, 0x00, 0x73, 0x2f, 0x40, 0xa1, 0x5f, 0x43, 0x71, - 0x1e, 0x96, 0x2f, 0x00, 0xa9, 0x47, 0xac, 0x33, 0xaf, 0x15, 0xb2, 0x01, - 0xff, 0x44, 0x0b, 0x25, 0x40, 0x2f, 0x00, 0x45, 0x80, 0xe4, 0x3a, 0x2f, - 0x00, 0x43, 0xcf, 0x7a, 0x80, 0x2f, 0x40, 0x42, 0x8a, 0x00, 0x88, 0x2f, - 0x00, 0x42, 0xfd, 0x0c, 0x9d, 0x2f, 0x00, 0x4b, 0xd3, 0x9c, 0x66, 0x2f, - 0x00, 0x42, 0xa2, 0x05, 0xbb, 0x2f, 0x00, 0xf7, 0x38, 0x2f, 0x40, 0x43, - 0xe3, 0x02, 0xca, 0x2f, 0x00, 0x43, 0xfc, 0x2c, 0x8e, 0x2f, 0x00, 0x42, - 0x87, 0x13, 0xad, 0x2f, 0x40, 0xe7, 0x24, 0x2f, 0x00, 0x42, 0xab, 0x01, - 0xc3, 0x2f, 0x00, 0x44, 0xc3, 0x05, 0x9f, 0x2f, 0x40, 0x44, 0x52, 0xec, - 0x98, 0x2f, 0x00, 0x44, 0x9f, 0x96, 0x75, 0x2f, 0x40, 0x44, 0xf1, 0x49, - 0x1c, 0x2f, 0x00, 0x42, 0x1b, 0x00, 0x7d, 0x2f, 0x00, 0x02, 0xcf, 0x00, - 0x06, 0x42, 0x60, 0x42, 0x44, 0x2f, 0x40, 0x43, 0xa7, 0x05, 0x84, 0x2f, - 0x00, 0x42, 0xd1, 0x00, 0x6e, 0x2f, 0x40, 0xa5, 0x75, 0xa6, 0x58, 0x44, - 0x46, 0x2a, 0xc9, 0xd2, 0x81, 0x4b, 0x43, 0xbf, 0x0a, 0xc1, 0xd2, 0x01, - 0xb3, 0x29, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xc0, 0xd2, 0x41, 0x42, 0x92, - 0x01, 0xca, 0xd2, 0x01, 0xa8, 0x0d, 0xb7, 0x01, 0xff, 0x44, 0x46, 0x2b, - 0xcc, 0xd2, 0x01, 0xef, 0xc2, 0xd2, 0x41, 0x46, 0x2b, 0x59, 0xcd, 0xd2, - 0x01, 0x43, 0x26, 0x01, 0xc3, 0xd2, 0x41, 0x44, 0x27, 0x1d, 0xc7, 0xd2, - 0x81, 0x0d, 0x42, 0x60, 0x25, 0xc6, 0xd2, 0xc1, 0x00, 0x44, 0x9e, 0x17, - 0xd0, 0xd2, 0x41, 0x44, 0x9e, 0x17, 0xd1, 0xd2, 0x41, 0x44, 0x9e, 0x17, - 0xd3, 0xd2, 0x41, 0xa9, 0x0d, 0x43, 0xcb, 0x06, 0xc4, 0xd2, 0xc1, 0x00, - 0x44, 0x9e, 0x17, 0xce, 0xd2, 0x41, 0x45, 0x9d, 0x17, 0xcf, 0xd2, 0x01, - 0x42, 0x32, 0x00, 0xc5, 0xd2, 0x41, 0x44, 0xc9, 0x00, 0xc8, 0xd2, 0x81, - 0x06, 0x45, 0x0b, 0x6e, 0xcb, 0xd2, 0x41, 0x43, 0x75, 0x09, 0xd2, 0xd2, - 0x41, 0x51, 0x93, 0x56, 0xbb, 0x10, 0x01, 0xa4, 0x80, 0x03, 0x50, 0x5a, - 0x61, 0xbc, 0x10, 0x01, 0x07, 0xc1, 0x05, 0x70, 0x4b, 0x12, 0x9e, 0xbd, - 0x10, 0x81, 0x63, 0xb3, 0x33, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x20, - 0xe5, 0xb5, 0x10, 0x01, 0xe9, 0xb1, 0x10, 0x81, 0x13, 0xef, 0xb7, 0x10, - 0x01, 0xf5, 0xb3, 0x10, 0x81, 0x06, 0x49, 0x9b, 0xbe, 0xc2, 0x10, 0x41, - 0xf5, 0xb4, 0x10, 0x41, 0xe9, 0xb2, 0x10, 0x41, 0xe1, 0xb0, 0x10, 0x01, - 0xe9, 0xb6, 0x10, 0x01, 0xf5, 0xb8, 0x10, 0x41, 0x4b, 0x58, 0x26, 0xbe, - 0x10, 0x01, 0x04, 0x30, 0x03, 0x01, 0xff, 0x48, 0xd0, 0x15, 0x81, 0x10, - 0x01, 0x4b, 0x4f, 0x23, 0x80, 0x10, 0x01, 0x45, 0x5a, 0x3e, 0xba, 0x10, - 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, 0xb9, 0x10, 0x01, - 0x45, 0xa3, 0x4a, 0x82, 0x10, 0x41, 0x46, 0x5b, 0x00, 0xcd, 0x10, 0x41, - 0xe1, 0x83, 0x10, 0x81, 0xf4, 0x01, 0xa2, 0xe7, 0x01, 0xa3, 0xda, 0x01, - 0xa4, 0xbb, 0x01, 0xe5, 0x89, 0x10, 0x01, 0xa7, 0xaa, 0x01, 0x42, 0x22, - 0x00, 0xaf, 0x10, 0x01, 0xe9, 0x85, 0x10, 0x81, 0x9a, 0x01, 0xaa, 0x8d, - 0x01, 0xab, 0x80, 0x01, 0x42, 0x74, 0x00, 0xaa, 0x10, 0x01, 0x42, 0x6c, - 0x00, 0xa7, 0x10, 0x01, 0xae, 0x5c, 0xef, 0x8b, 0x10, 0x01, 0xb0, 0x4c, - 0xb2, 0x40, 0xb3, 0x2e, 0xb4, 0x15, 0xf5, 0x87, 0x10, 0x81, 0x0c, 0x42, - 0xa6, 0x0a, 0xab, 0x10, 0x01, 0x42, 0x34, 0x22, 0xa8, 0x10, 0x41, 0xf5, - 0x88, 0x10, 0x41, 0xe1, 0x9e, 0x10, 0x01, 0x42, 0x22, 0x00, 0x9f, 0x10, - 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x97, 0x10, 0x01, 0x42, 0x22, 0x00, 0x98, - 0x10, 0x41, 0xe1, 0xae, 0x10, 0x01, 0x42, 0x22, 0x00, 0xac, 0x10, 0x01, - 0x42, 0x15, 0x06, 0xad, 0x10, 0x41, 0xe1, 0xa9, 0x10, 0x01, 0x42, 0x22, - 0x00, 0x9c, 0x10, 0x41, 0xe1, 0xa3, 0x10, 0x01, 0x42, 0x22, 0x00, 0xa4, - 0x10, 0x41, 0xe1, 0xa2, 0x10, 0x01, 0x42, 0x24, 0x02, 0x91, 0x10, 0x01, - 0x42, 0xff, 0x04, 0x9d, 0x10, 0x01, 0x42, 0x34, 0x22, 0x96, 0x10, 0x41, - 0xe1, 0x8d, 0x10, 0x01, 0x42, 0x22, 0x00, 0x8e, 0x10, 0x41, 0xe1, 0x94, - 0x10, 0x01, 0x42, 0x22, 0x00, 0x95, 0x10, 0x41, 0xe9, 0x86, 0x10, 0x41, - 0xe1, 0x8f, 0x10, 0x01, 0x42, 0x22, 0x00, 0x90, 0x10, 0x41, 0xe1, 0xa0, - 0x10, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa1, 0x10, 0x41, 0xe1, 0x99, - 0x10, 0x01, 0x43, 0x9e, 0x4a, 0x9a, 0x10, 0x01, 0x42, 0x22, 0x00, 0x9b, - 0x10, 0x41, 0xe1, 0x92, 0x10, 0x01, 0x42, 0x22, 0x00, 0x93, 0x10, 0x41, - 0xe1, 0xa5, 0x10, 0x01, 0x42, 0x22, 0x00, 0xa6, 0x10, 0x41, 0xe1, 0x84, - 0x10, 0x01, 0xe9, 0x8a, 0x10, 0x01, 0xf5, 0x8c, 0x10, 0x41, 0x44, 0xd1, - 0x1f, 0xc0, 0x10, 0x01, 0x06, 0x3c, 0x01, 0x01, 0xff, 0x45, 0x34, 0x94, - 0xc1, 0x10, 0x01, 0x4c, 0x57, 0x26, 0xbf, 0x10, 0x41, 0xa1, 0x37, 0xa5, - 0x29, 0x52, 0x5c, 0x51, 0xe9, 0xf9, 0x01, 0xaf, 0x15, 0xb5, 0x01, 0xff, - 0x46, 0x04, 0xd9, 0x39, 0xf9, 0x01, 0x42, 0xb4, 0x01, 0xb5, 0x26, 0x00, - 0x45, 0xc4, 0xe6, 0x43, 0x26, 0x40, 0x42, 0x9e, 0x01, 0x1d, 0x2a, 0x00, - 0x46, 0x7a, 0xde, 0x79, 0xf5, 0x41, 0x43, 0x0d, 0x45, 0x56, 0xf4, 0x01, - 0x47, 0x26, 0xd0, 0xbc, 0xfa, 0x41, 0x4c, 0xb1, 0x8b, 0x83, 0xf3, 0x01, - 0x07, 0xa7, 0xd1, 0x83, 0x05, 0xf2, 0xd9, 0xfa, 0x01, 0x07, 0x47, 0xd4, - 0x01, 0xff, 0x0f, 0x6d, 0x32, 0xe3, 0x04, 0x06, 0xc4, 0x06, 0x9c, 0x04, - 0x02, 0x68, 0x00, 0xdb, 0x01, 0x02, 0x6c, 0x09, 0x70, 0x4f, 0xf9, 0x70, - 0xc2, 0xa9, 0x00, 0x05, 0x2f, 0x03, 0x47, 0x53, 0x83, 0x4c, 0xcd, 0xa9, - 0x00, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0x4a, 0x1b, 0xa7, 0xbb, 0xa9, 0x00, - 0x45, 0xba, 0xe6, 0xbc, 0xa9, 0x00, 0x44, 0x3d, 0xd3, 0xb8, 0xa9, 0x80, - 0x23, 0xb4, 0x0d, 0x44, 0xde, 0xef, 0xb6, 0xa9, 0xc0, 0x00, 0x46, 0x56, - 0xd5, 0xb7, 0xa9, 0x40, 0xa1, 0x06, 0x45, 0x02, 0x12, 0xb5, 0xa9, 0x40, - 0x44, 0xe0, 0x0a, 0xba, 0xa9, 0x00, 0x44, 0xad, 0xe8, 0xb4, 0xa9, 0x40, - 0x47, 0x92, 0xca, 0xb9, 0xa9, 0x40, 0x45, 0x00, 0xe2, 0x81, 0xa9, 0x80, - 0x12, 0x45, 0x07, 0xe5, 0x82, 0xa9, 0x00, 0x49, 0x83, 0xbb, 0x80, 0xa9, - 0x00, 0x47, 0xb0, 0xd4, 0x83, 0xa9, 0x40, 0x45, 0xd6, 0xde, 0xb3, 0xa9, - 0x40, 0x03, 0xf2, 0x19, 0x11, 0x02, 0x1d, 0x01, 0x01, 0xff, 0x43, 0x78, - 0x6e, 0xc0, 0xa9, 0x00, 0x47, 0x4f, 0xd2, 0xcf, 0xa9, 0x40, 0xa1, 0x3d, - 0x49, 0x50, 0xb8, 0xdf, 0xa9, 0x00, 0xac, 0x20, 0x45, 0x4d, 0xe5, 0xc4, - 0xa9, 0x00, 0xb0, 0x0c, 0x4d, 0x7b, 0x87, 0xde, 0xa9, 0x00, 0x45, 0x26, - 0xe9, 0xc6, 0xa9, 0x40, 0x46, 0xd0, 0xd6, 0xc7, 0xa9, 0x00, 0x46, 0x90, - 0x4c, 0xcc, 0xa9, 0x40, 0x45, 0x62, 0xe4, 0xc8, 0xa9, 0x00, 0xb5, 0x01, - 0xff, 0x43, 0x41, 0x00, 0xc5, 0xa9, 0x00, 0x44, 0x8d, 0x71, 0xc9, 0xa9, - 0x40, 0x43, 0x36, 0x11, 0xca, 0xa9, 0x80, 0x06, 0x44, 0x26, 0xee, 0xc3, - 0xa9, 0x40, 0x45, 0x4d, 0xb3, 0xcb, 0xa9, 0x40, 0x4c, 0x6d, 0x8d, 0xc1, - 0xa9, 0x00, 0x05, 0xc3, 0x05, 0x01, 0xff, 0xe1, 0x84, 0xa9, 0x80, 0xa7, - 0x02, 0x42, 0x16, 0x00, 0xa7, 0xa9, 0x80, 0x99, 0x02, 0x42, 0x37, 0x00, - 0x95, 0xa9, 0x80, 0x8b, 0x02, 0xa4, 0xf0, 0x01, 0xe5, 0x8c, 0xa9, 0x00, - 0x42, 0x24, 0x02, 0x92, 0xa9, 0x80, 0xde, 0x01, 0x42, 0x22, 0x00, 0xb2, - 0xa9, 0x00, 0xe9, 0x86, 0xa9, 0x80, 0xc8, 0x01, 0x42, 0xbd, 0x26, 0x97, - 0xa9, 0x80, 0xba, 0x01, 0x42, 0x1b, 0x02, 0x8f, 0xa9, 0x80, 0xa3, 0x01, - 0x42, 0x74, 0x00, 0xad, 0xa9, 0x00, 0x42, 0x6c, 0x00, 0xa9, 0xa9, 0x00, - 0xae, 0x69, 0xef, 0x8e, 0xa9, 0x00, 0x42, 0x6c, 0x09, 0xa5, 0xa9, 0x80, - 0x4f, 0x42, 0x71, 0x00, 0xab, 0xa9, 0x80, 0x42, 0x42, 0x15, 0x06, 0xb1, - 0xa9, 0x80, 0x2a, 0xb4, 0x10, 0xf5, 0x88, 0xa9, 0x00, 0x42, 0xa9, 0x01, - 0xae, 0xa9, 0x00, 0x42, 0x34, 0x22, 0xaa, 0xa9, 0x40, 0xe1, 0xa0, 0xa9, - 0x80, 0x0d, 0x42, 0x12, 0x00, 0x9b, 0xa9, 0xc0, 0x00, 0x4a, 0xb5, 0x6e, - 0x9c, 0xa9, 0x40, 0x46, 0x5c, 0xd5, 0xa1, 0xa9, 0x40, 0x02, 0x6b, 0x00, - 0x01, 0xff, 0x48, 0xb7, 0x6e, 0xb0, 0xa9, 0x00, 0x44, 0xb1, 0x6e, 0xaf, - 0xa9, 0x40, 0x46, 0x20, 0xd5, 0xac, 0xa9, 0x40, 0x80, 0x01, 0xff, 0x45, - 0x0a, 0xe2, 0x89, 0xa9, 0x00, 0x45, 0xb0, 0x6e, 0xa6, 0xa9, 0x40, 0xe1, - 0xa4, 0xa9, 0x80, 0x21, 0x42, 0x24, 0x02, 0x94, 0xa9, 0x80, 0x0d, 0x42, - 0x34, 0x22, 0x9a, 0xa9, 0xc0, 0x00, 0x46, 0x5c, 0xd5, 0x98, 0xa9, 0x40, - 0x46, 0x4a, 0xd5, 0x8a, 0xa9, 0xc0, 0x00, 0x48, 0xfa, 0xbf, 0x8b, 0xa9, - 0x40, 0x46, 0x5c, 0xd5, 0x9f, 0xa9, 0x40, 0x80, 0x01, 0xff, 0x45, 0xb0, - 0x6e, 0x91, 0xa9, 0x00, 0x45, 0xee, 0xa0, 0x90, 0xa9, 0x40, 0x4a, 0xb5, - 0x6e, 0x99, 0xa9, 0x40, 0x45, 0xbd, 0xde, 0x85, 0xa9, 0x00, 0xe9, 0x87, - 0xa9, 0x40, 0x46, 0x5c, 0xd5, 0x93, 0xa9, 0x40, 0xe1, 0xa2, 0xa9, 0x80, - 0x0d, 0x42, 0xa1, 0x10, 0x9d, 0xa9, 0xc0, 0x00, 0x4a, 0xb5, 0x6e, 0x9e, - 0xa9, 0x40, 0x4a, 0xb5, 0x6e, 0xa3, 0xa9, 0x40, 0x46, 0x5c, 0xd5, 0x96, - 0xa9, 0x40, 0x46, 0x5c, 0xd5, 0xa8, 0xa9, 0x40, 0xe9, 0x8d, 0xa9, 0x40, - 0x45, 0xc3, 0x0a, 0xd8, 0xa9, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xd9, - 0xa9, 0x00, 0x43, 0xbf, 0x0a, 0xd1, 0xa9, 0x00, 0xb3, 0x14, 0xb4, 0x06, - 0x44, 0xa1, 0x1d, 0xd0, 0xa9, 0x40, 0x44, 0x25, 0x01, 0xd3, 0xa9, 0x00, - 0x42, 0x15, 0x02, 0xd2, 0xa9, 0x40, 0x44, 0x27, 0x1d, 0xd7, 0xa9, 0x00, - 0x42, 0x60, 0x25, 0xd6, 0xa9, 0x40, 0x43, 0xa7, 0x05, 0xd5, 0xa9, 0x00, - 0x43, 0xcb, 0x06, 0xd4, 0xa9, 0x40, 0x45, 0xdd, 0xe1, 0xbf, 0xa9, 0x00, - 0x45, 0xb7, 0xe4, 0xbd, 0xa9, 0x00, 0x47, 0xd8, 0xd1, 0xbe, 0xa9, 0x40, - 0x4b, 0x74, 0x97, 0xfb, 0x26, 0x00, 0x46, 0x78, 0xd7, 0xef, 0xf3, 0x01, - 0x45, 0x15, 0xb8, 0x8e, 0xf3, 0x01, 0x46, 0x2e, 0xd9, 0x7a, 0xf4, 0x01, - 0x5a, 0xc4, 0x1f, 0x04, 0x30, 0x00, 0x44, 0x96, 0xd2, 0x79, 0xf4, 0x01, - 0x4b, 0x3b, 0x9f, 0xe3, 0xf3, 0x01, 0x53, 0x11, 0x4c, 0x30, 0xf5, 0x41, - 0x53, 0x5a, 0x46, 0x1f, 0xf9, 0x01, 0x03, 0xe3, 0x07, 0xd7, 0x14, 0x02, - 0x04, 0x00, 0xb6, 0x0d, 0xad, 0xc7, 0x0b, 0xae, 0x06, 0x4e, 0xa0, 0x7d, - 0xee, 0xf3, 0x41, 0x48, 0xca, 0xc1, 0xe5, 0xf4, 0x01, 0xa3, 0x8b, 0x0b, - 0xa4, 0xf5, 0x06, 0xa6, 0xb2, 0x06, 0x06, 0x82, 0xd9, 0xa1, 0x06, 0x0f, - 0x63, 0x70, 0xfa, 0x05, 0xb3, 0xdb, 0x02, 0x02, 0x77, 0x00, 0x9a, 0x01, - 0xb6, 0x01, 0xff, 0x02, 0x33, 0x00, 0x17, 0x07, 0x31, 0xcf, 0x01, 0xff, - 0x44, 0xb7, 0x27, 0x64, 0x20, 0x00, 0x49, 0x36, 0x20, 0x63, 0x20, 0x00, - 0x45, 0x28, 0x02, 0x62, 0x20, 0x40, 0x03, 0x16, 0x04, 0x3e, 0x04, 0x77, - 0x00, 0x01, 0xff, 0x50, 0xad, 0x00, 0xa1, 0x00, 0x00, 0x4b, 0xb3, 0x15, - 0x18, 0x2e, 0x00, 0xac, 0x18, 0x48, 0x7a, 0xc6, 0x27, 0x21, 0x00, 0x49, - 0x10, 0x1b, 0xe7, 0x26, 0x00, 0x4d, 0xd6, 0x33, 0xbf, 0x00, 0x00, 0x48, - 0x62, 0xc9, 0x54, 0x20, 0x40, 0x45, 0x34, 0x6d, 0x3e, 0x22, 0x00, 0x49, - 0x56, 0xbb, 0x45, 0x2e, 0xc0, 0x00, 0x52, 0x9e, 0x4e, 0x46, 0x2e, 0x40, - 0xa2, 0x22, 0x05, 0x1e, 0x14, 0x12, 0x62, 0xe5, 0x0b, 0xb4, 0xfb, 0x01, - 0x4c, 0x19, 0x04, 0x90, 0xfb, 0x01, 0x4c, 0xe3, 0x10, 0xd9, 0x25, 0x40, - 0x45, 0xb8, 0x00, 0xb1, 0xfb, 0x01, 0x4d, 0x08, 0x81, 0x96, 0xfb, 0x41, - 0x05, 0xe2, 0x02, 0x06, 0x45, 0x2b, 0x21, 0xd8, 0x25, 0x40, 0x47, 0x88, - 0x43, 0x8d, 0xcc, 0x01, 0x4c, 0x37, 0x0a, 0x8f, 0xcc, 0x41, 0x44, 0xf7, - 0x25, 0x2b, 0x22, 0x80, 0x6a, 0xb2, 0x01, 0xff, 0x46, 0x72, 0xd7, 0xba, - 0x22, 0x00, 0x4b, 0xd3, 0x3a, 0x3c, 0x2a, 0x00, 0xac, 0x3d, 0x46, 0xb8, - 0x15, 0x3d, 0x20, 0x00, 0x47, 0x5f, 0x0a, 0x29, 0x22, 0xc0, 0x00, 0x80, - 0x01, 0xff, 0x06, 0x5c, 0x00, 0x1d, 0x63, 0x43, 0x0a, 0x4b, 0x2a, 0x00, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x43, 0xd4, 0x09, 0x40, 0x2a, 0x00, 0x4b, - 0x4a, 0x2f, 0x44, 0x2a, 0x00, 0x47, 0x77, 0x7e, 0x43, 0x2a, 0x40, 0x4f, - 0x79, 0x69, 0x49, 0x2a, 0x00, 0x45, 0xe1, 0x16, 0x47, 0x2a, 0x40, 0x11, - 0xa1, 0x59, 0x06, 0x5a, 0xae, 0x20, 0xa4, 0x26, 0x40, 0x46, 0xca, 0xd6, - 0xf9, 0xff, 0x00, 0x49, 0x36, 0x20, 0xfa, 0xff, 0x00, 0x4a, 0x99, 0x84, - 0xfb, 0xff, 0x40, 0x80, 0x01, 0xff, 0xa1, 0x3a, 0x49, 0x56, 0x57, 0xae, - 0x23, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4d, 0xa0, 0x80, 0x0e, 0x2a, - 0x00, 0x4c, 0x5a, 0x0a, 0x19, 0x2a, 0x00, 0x59, 0x10, 0x24, 0x17, 0x2a, - 0x00, 0x47, 0x77, 0x7e, 0x1b, 0x2a, 0x00, 0x4a, 0x9f, 0xaf, 0x18, 0x2a, - 0x00, 0x02, 0xf3, 0x0a, 0x01, 0xff, 0x46, 0x7a, 0x58, 0x1c, 0x2a, 0x00, - 0x43, 0xb5, 0x00, 0x1a, 0x2a, 0x40, 0x56, 0x1f, 0x36, 0x15, 0x2a, 0x00, - 0x51, 0xd0, 0x5d, 0x0f, 0x2a, 0x40, 0x0d, 0x11, 0x80, 0x06, 0x4d, 0x15, - 0x81, 0x80, 0x23, 0x40, 0x06, 0x6b, 0x71, 0xd3, 0x01, 0x07, 0xaa, 0xd2, - 0x01, 0xff, 0x07, 0xc1, 0x05, 0x3d, 0x07, 0x2f, 0x39, 0x01, 0xff, 0x44, - 0xca, 0x06, 0x5b, 0x0b, 0x01, 0x43, 0xbf, 0x0a, 0x58, 0x0b, 0x81, 0x1c, - 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x5c, 0x0b, 0x01, 0x44, 0x25, 0x01, - 0x5a, 0x0b, 0x01, 0xb7, 0x01, 0xff, 0x44, 0x29, 0x1d, 0x5d, 0x0b, 0x01, - 0xef, 0x59, 0x0b, 0x41, 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0x5e, 0x0b, - 0x01, 0x48, 0xd5, 0x5c, 0x5f, 0x0b, 0x41, 0xa1, 0x7f, 0x44, 0x0a, 0xec, - 0x41, 0x0b, 0x01, 0x46, 0xda, 0x48, 0x43, 0x0b, 0x01, 0x45, 0xa1, 0xa8, - 0x42, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x44, 0x0b, 0x81, 0x60, 0x44, 0x8e, - 0xed, 0x4a, 0x0b, 0x01, 0x46, 0x9c, 0xda, 0x4b, 0x0b, 0x01, 0x43, 0x89, - 0x05, 0x4c, 0x0b, 0x01, 0x43, 0x54, 0x22, 0x4d, 0x0b, 0x01, 0x42, 0x6f, - 0x02, 0x50, 0x0b, 0x01, 0x44, 0xae, 0xc5, 0x52, 0x0b, 0x01, 0x44, 0xfa, - 0x64, 0x53, 0x0b, 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, 0xc0, 0x88, 0x45, - 0x0b, 0x01, 0x44, 0x58, 0x51, 0x49, 0x0b, 0x01, 0x45, 0x52, 0x51, 0x46, - 0x0b, 0x41, 0x42, 0x9a, 0x43, 0x55, 0x0b, 0x01, 0x43, 0x39, 0x25, 0x48, - 0x0b, 0x41, 0xa1, 0x06, 0x43, 0x0e, 0x16, 0x54, 0x0b, 0x41, 0x43, 0x89, - 0xe7, 0x51, 0x0b, 0x01, 0x44, 0x39, 0xe1, 0x4e, 0x0b, 0x41, 0x42, 0x53, - 0x00, 0x47, 0x0b, 0x41, 0x44, 0x48, 0x3c, 0x40, 0x0b, 0x01, 0x43, 0xf7, - 0x19, 0x4f, 0x0b, 0x41, 0x07, 0xc1, 0x05, 0x3d, 0x07, 0x2f, 0x39, 0x01, - 0xff, 0x44, 0xca, 0x06, 0x7b, 0x0b, 0x01, 0x43, 0xbf, 0x0a, 0x78, 0x0b, - 0x81, 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x7c, 0x0b, 0x01, 0x44, - 0x25, 0x01, 0x7a, 0x0b, 0x01, 0xb7, 0x01, 0xff, 0x44, 0x29, 0x1d, 0x7d, - 0x0b, 0x01, 0xef, 0x79, 0x0b, 0x41, 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, - 0x7e, 0x0b, 0x01, 0x48, 0xd5, 0x5c, 0x7f, 0x0b, 0x41, 0x45, 0x58, 0xab, - 0x60, 0x0b, 0x01, 0x44, 0x0a, 0xec, 0x61, 0x0b, 0x01, 0x46, 0xda, 0x48, - 0x63, 0x0b, 0x01, 0x45, 0xa1, 0xa8, 0x62, 0x0b, 0x01, 0x42, 0xb0, 0x01, - 0x64, 0x0b, 0x81, 0x54, 0x44, 0x8e, 0xed, 0x6a, 0x0b, 0x01, 0x46, 0x9c, - 0xda, 0x6b, 0x0b, 0x01, 0x48, 0xaa, 0xc5, 0x6c, 0x0b, 0x01, 0x43, 0x54, - 0x22, 0x6d, 0x0b, 0x01, 0x42, 0x6f, 0x02, 0x6f, 0x0b, 0x01, 0xb3, 0x20, - 0xb4, 0x12, 0x4d, 0xc0, 0x88, 0x65, 0x0b, 0x01, 0x44, 0x58, 0x51, 0x69, - 0x0b, 0x01, 0x45, 0x52, 0x51, 0x66, 0x0b, 0x41, 0x42, 0x9a, 0x43, 0x72, - 0x0b, 0x01, 0x43, 0x39, 0x25, 0x68, 0x0b, 0x41, 0xa1, 0x06, 0x43, 0x0e, - 0x16, 0x71, 0x0b, 0x41, 0x43, 0x89, 0xe7, 0x70, 0x0b, 0x01, 0x44, 0x39, - 0xe1, 0x6e, 0x0b, 0x41, 0x42, 0x53, 0x00, 0x67, 0x0b, 0x41, 0x06, 0xb3, - 0x05, 0x0c, 0x47, 0xc7, 0xd0, 0x22, 0xf5, 0x01, 0x47, 0xeb, 0x07, 0x23, - 0xf5, 0x41, 0x4f, 0x00, 0x6a, 0x20, 0xf5, 0x01, 0x47, 0x08, 0x6a, 0x24, - 0xf5, 0x01, 0x4d, 0x13, 0x87, 0x21, 0xf5, 0x41, 0x53, 0xf2, 0x46, 0x6c, - 0x20, 0x00, 0x52, 0x50, 0x54, 0x6a, 0x20, 0x40, 0x45, 0xfa, 0x6a, 0x1e, - 0x22, 0x80, 0x33, 0x09, 0x4c, 0x5b, 0x01, 0xff, 0x4b, 0xd4, 0x98, 0x81, - 0xf4, 0x01, 0xb3, 0x01, 0xff, 0x09, 0x37, 0x20, 0x06, 0x45, 0x56, 0x5b, - 0x39, 0x21, 0x40, 0x44, 0xca, 0x06, 0x1c, 0x00, 0x00, 0x43, 0xbf, 0x0a, - 0x1f, 0x00, 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x1d, 0x00, 0x00, - 0x42, 0x15, 0x02, 0x1e, 0x00, 0x40, 0x5a, 0xf0, 0x1d, 0xde, 0x29, 0x40, - 0x42, 0xad, 0x00, 0x84, 0x00, 0x80, 0x85, 0x04, 0xa9, 0x01, 0xff, 0x4d, - 0xf3, 0x7e, 0xb9, 0x20, 0x00, 0x08, 0xe2, 0xc1, 0x01, 0xff, 0x53, 0xb9, - 0x46, 0xb4, 0xec, 0x01, 0x09, 0xb3, 0x58, 0xd6, 0x03, 0x49, 0xc3, 0x46, - 0xa0, 0xec, 0x01, 0x07, 0x2f, 0x39, 0x0c, 0x4b, 0x3a, 0x64, 0xac, 0xec, - 0x01, 0x4a, 0x69, 0xae, 0xb0, 0xec, 0x41, 0x0a, 0xa2, 0x11, 0xa6, 0x03, - 0x45, 0xc3, 0x0a, 0x78, 0xec, 0x81, 0x85, 0x03, 0xa6, 0xb7, 0x02, 0x45, - 0xad, 0xe4, 0xa1, 0xec, 0x81, 0xa9, 0x02, 0x44, 0xc3, 0x46, 0x9e, 0xec, - 0x81, 0x9b, 0x02, 0x44, 0x46, 0x2a, 0x79, 0xec, 0x81, 0xf8, 0x01, 0x43, - 0xbf, 0x0a, 0x71, 0xec, 0x81, 0xe1, 0x01, 0x09, 0xe1, 0x4a, 0x9f, 0x01, - 0xb3, 0x59, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x7a, 0xec, 0x81, 0x49, - 0xa8, 0x24, 0xb7, 0x01, 0xff, 0x44, 0x29, 0x1d, 0x7b, 0xec, 0x81, 0x14, - 0xef, 0x72, 0xec, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0x84, - 0xec, 0x01, 0x48, 0xd5, 0x5c, 0x8d, 0xec, 0x41, 0x49, 0xd4, 0x5c, 0x96, - 0xec, 0x41, 0x44, 0x2c, 0x11, 0x7c, 0xec, 0x81, 0x16, 0x43, 0x26, 0x01, - 0x73, 0xec, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0x85, 0xec, - 0x01, 0x48, 0xd5, 0x5c, 0x8e, 0xec, 0x41, 0x49, 0xd4, 0x5c, 0x97, 0xec, - 0x41, 0x49, 0xd4, 0x5c, 0x95, 0xec, 0x41, 0x44, 0x27, 0x1d, 0x77, 0xec, - 0x81, 0x22, 0x42, 0x60, 0x25, 0x76, 0xec, 0xc1, 0x00, 0x80, 0x0d, 0x42, - 0x2e, 0x11, 0x7f, 0xec, 0xc1, 0x00, 0x49, 0xd4, 0x5c, 0x9a, 0xec, 0x41, - 0x47, 0x22, 0x11, 0x88, 0xec, 0x01, 0x48, 0xd5, 0x5c, 0x91, 0xec, 0x41, - 0x80, 0x0d, 0x42, 0x2e, 0x11, 0x80, 0xec, 0xc1, 0x00, 0x49, 0xd4, 0x5c, - 0x9b, 0xec, 0x41, 0x47, 0x22, 0x11, 0x89, 0xec, 0x01, 0x48, 0xd5, 0x5c, - 0x92, 0xec, 0x41, 0x45, 0xc3, 0x0a, 0xaa, 0xec, 0x01, 0xa6, 0x29, 0x44, - 0x46, 0x2a, 0xab, 0xec, 0x01, 0x43, 0xbf, 0x0a, 0xa3, 0xec, 0x01, 0xb3, - 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xa5, 0xec, 0x01, 0x42, 0x15, - 0x02, 0xa4, 0xec, 0x41, 0x44, 0x27, 0x1d, 0xa9, 0xec, 0x01, 0x42, 0x60, - 0x25, 0xa8, 0xec, 0x41, 0x43, 0xa7, 0x05, 0xa7, 0xec, 0x01, 0x43, 0xcb, - 0x06, 0xa6, 0xec, 0x41, 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0x83, 0xec, - 0x01, 0x48, 0xd5, 0x5c, 0x8c, 0xec, 0x41, 0x80, 0x0d, 0x42, 0x2e, 0x11, - 0x82, 0xec, 0xc1, 0x00, 0x49, 0xd4, 0x5c, 0x9d, 0xec, 0x41, 0x47, 0x22, - 0x11, 0x8b, 0xec, 0x01, 0x48, 0xd5, 0x5c, 0x94, 0xec, 0x41, 0x42, 0x1a, - 0x00, 0x9f, 0xec, 0x41, 0x42, 0x1a, 0x00, 0xa2, 0xec, 0x41, 0xa9, 0x26, - 0xaf, 0x01, 0xff, 0x43, 0x2d, 0x11, 0x7d, 0xec, 0x81, 0x16, 0x42, 0x42, - 0x00, 0x74, 0xec, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0x86, - 0xec, 0x01, 0x48, 0xd5, 0x5c, 0x8f, 0xec, 0x41, 0x49, 0xd4, 0x5c, 0x98, - 0xec, 0x41, 0x43, 0x09, 0x4c, 0x7e, 0xec, 0x81, 0x16, 0x42, 0x32, 0x00, - 0x75, 0xec, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0x87, 0xec, - 0x01, 0x48, 0xd5, 0x5c, 0x90, 0xec, 0x41, 0x49, 0xd4, 0x5c, 0x99, 0xec, - 0x41, 0x80, 0x0b, 0xf9, 0x81, 0xec, 0xc1, 0x00, 0x49, 0xd4, 0x5c, 0x9c, - 0xec, 0x41, 0x47, 0x22, 0x11, 0x8a, 0xec, 0x01, 0x48, 0xd5, 0x5c, 0x93, - 0xec, 0x41, 0x43, 0xbf, 0x0a, 0xb1, 0xec, 0x01, 0xb4, 0x01, 0xff, 0x4b, - 0xd2, 0x5c, 0xb3, 0xec, 0x01, 0x42, 0x15, 0x02, 0xb2, 0xec, 0x41, 0x04, - 0xbf, 0x0a, 0x06, 0x4e, 0x24, 0x01, 0xaf, 0xec, 0x41, 0x44, 0x22, 0x00, - 0xae, 0xec, 0x01, 0x47, 0x2a, 0x01, 0xad, 0xec, 0x41, 0x57, 0xeb, 0x2b, - 0xf5, 0xfa, 0x41, 0x02, 0xe9, 0x04, 0x1b, 0x02, 0x88, 0x00, 0x01, 0xff, - 0x03, 0xca, 0x34, 0x06, 0x44, 0x01, 0x05, 0x06, 0x22, 0x40, 0x51, 0xcc, - 0x35, 0xda, 0xf5, 0x01, 0x44, 0xcc, 0x03, 0xe1, 0x29, 0x40, 0x4c, 0x5d, - 0x8e, 0xe8, 0xf4, 0x01, 0x4e, 0xcc, 0x79, 0xdc, 0x29, 0x40, 0x46, 0x15, - 0x42, 0xb7, 0x22, 0x80, 0xde, 0x01, 0xf0, 0x7f, 0xf4, 0xc1, 0x00, 0x0e, - 0x06, 0x76, 0x01, 0xff, 0x07, 0xc1, 0x05, 0x43, 0x07, 0x2f, 0x39, 0x06, - 0x4c, 0x49, 0x93, 0x57, 0x08, 0x41, 0x43, 0xbf, 0x0a, 0x58, 0x08, 0x81, - 0x23, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x5b, 0x08, 0x81, 0x13, 0x44, - 0x25, 0x01, 0x5a, 0x08, 0x01, 0xb7, 0x01, 0xff, 0x44, 0x29, 0x1d, 0x5c, - 0x08, 0x01, 0xef, 0x59, 0x08, 0x41, 0x49, 0xd4, 0x5c, 0x5f, 0x08, 0x41, - 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0x5d, 0x08, 0x01, 0x48, 0xd5, 0x5c, - 0x5e, 0x08, 0x41, 0xa1, 0x7f, 0x44, 0x0a, 0xec, 0x41, 0x08, 0x01, 0x46, - 0xda, 0x48, 0x43, 0x08, 0x01, 0x45, 0xa1, 0xa8, 0x42, 0x08, 0x01, 0x42, - 0xb0, 0x01, 0x44, 0x08, 0x81, 0x60, 0x44, 0x8e, 0xed, 0x4a, 0x08, 0x01, - 0x46, 0x9c, 0xda, 0x4b, 0x08, 0x01, 0x43, 0x89, 0x05, 0x4c, 0x08, 0x01, - 0x43, 0x54, 0x22, 0x4d, 0x08, 0x01, 0x42, 0x6f, 0x02, 0x50, 0x08, 0x01, - 0x44, 0xae, 0xc5, 0x52, 0x08, 0x01, 0x44, 0xfa, 0x64, 0x53, 0x08, 0x01, - 0xb3, 0x20, 0xb4, 0x12, 0x43, 0xc0, 0x88, 0x45, 0x08, 0x01, 0x44, 0x58, - 0x51, 0x49, 0x08, 0x01, 0x45, 0x52, 0x51, 0x46, 0x08, 0x41, 0x42, 0x9a, - 0x43, 0x55, 0x08, 0x01, 0x43, 0x39, 0x25, 0x48, 0x08, 0x41, 0xa1, 0x06, - 0x43, 0x0e, 0x16, 0x54, 0x08, 0x41, 0x43, 0x89, 0xe7, 0x51, 0x08, 0x01, - 0x44, 0x39, 0xe1, 0x4e, 0x08, 0x41, 0x42, 0x53, 0x00, 0x47, 0x08, 0x41, - 0x44, 0x48, 0x3c, 0x40, 0x08, 0x01, 0x43, 0xf7, 0x19, 0x4f, 0x08, 0x41, - 0x5a, 0x0a, 0x1e, 0x53, 0x22, 0x40, 0x03, 0x9f, 0x01, 0xfa, 0x06, 0x09, - 0xad, 0x1f, 0x01, 0xff, 0x0b, 0xa7, 0x59, 0x82, 0x06, 0xa3, 0xf3, 0x05, - 0x02, 0x04, 0x00, 0xdf, 0x04, 0x52, 0xf4, 0x4f, 0x2d, 0x30, 0x00, 0x49, - 0x15, 0x16, 0x02, 0x30, 0x00, 0x4f, 0x2b, 0x6c, 0x3f, 0x30, 0x00, 0x4e, - 0xb6, 0x1f, 0x05, 0x30, 0x00, 0x4f, 0xfc, 0x6d, 0x2a, 0x30, 0x00, 0x4b, - 0x1d, 0x9e, 0x07, 0x30, 0x00, 0x50, 0x4a, 0x65, 0x2b, 0x30, 0x00, 0x45, - 0x87, 0x4b, 0x00, 0x30, 0x00, 0xb4, 0x06, 0x53, 0x41, 0x4d, 0x3e, 0x30, - 0x40, 0x0a, 0x77, 0xa5, 0xff, 0x03, 0x09, 0xf5, 0xb5, 0x01, 0xff, 0x5a, - 0x2c, 0x20, 0x37, 0x30, 0x00, 0x0b, 0xd1, 0x20, 0x01, 0xff, 0xa1, 0xe0, - 0x03, 0xa4, 0xf3, 0x01, 0x48, 0x8a, 0xc3, 0xc1, 0x32, 0x00, 0x05, 0x59, - 0xd1, 0x37, 0xaa, 0x20, 0x02, 0x6c, 0x00, 0x12, 0x48, 0x42, 0xc6, 0xca, - 0x32, 0x00, 0x47, 0xdc, 0xd0, 0xc9, 0x32, 0x00, 0x49, 0xb5, 0xbc, 0xc8, - 0x32, 0x40, 0x43, 0x1e, 0x40, 0xc2, 0x32, 0x00, 0xf9, 0xc4, 0x32, 0x40, - 0x46, 0xdc, 0xd6, 0xc0, 0x32, 0x00, 0xb5, 0x01, 0xff, 0x42, 0x26, 0x0b, - 0xc6, 0x32, 0x00, 0x42, 0xa2, 0x05, 0xc5, 0x32, 0x40, 0xa5, 0x9c, 0x01, - 0xa6, 0x7f, 0x44, 0x46, 0x2a, 0x61, 0x33, 0x80, 0x72, 0x43, 0xbf, 0x0a, - 0x59, 0x33, 0x00, 0xb3, 0x50, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x58, 0x33, - 0x40, 0x42, 0x92, 0x01, 0x62, 0x33, 0x00, 0xa8, 0x34, 0xb7, 0x01, 0xff, - 0xa5, 0x04, 0xef, 0x5a, 0x33, 0x40, 0x43, 0x47, 0x2b, 0x64, 0x33, 0x00, - 0x43, 0x2a, 0x1d, 0x6c, 0x33, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x44, 0xca, - 0x06, 0x70, 0x33, 0x00, 0x43, 0xbf, 0x0a, 0x6d, 0x33, 0x00, 0xb4, 0x01, - 0xff, 0x44, 0x25, 0x01, 0x6f, 0x33, 0x00, 0x42, 0x15, 0x02, 0x6e, 0x33, - 0x40, 0x46, 0x2b, 0x59, 0x65, 0x33, 0x00, 0x43, 0x26, 0x01, 0x5b, 0x33, - 0x40, 0x44, 0x27, 0x1d, 0x5f, 0x33, 0x80, 0x0d, 0x42, 0x60, 0x25, 0x5e, - 0x33, 0xc0, 0x00, 0x44, 0x9e, 0x17, 0x68, 0x33, 0x40, 0x44, 0x9e, 0x17, - 0x69, 0x33, 0x40, 0x44, 0x9e, 0x17, 0x6b, 0x33, 0x40, 0xa9, 0x0d, 0x43, - 0xcb, 0x06, 0x5c, 0x33, 0xc0, 0x00, 0x44, 0x9e, 0x17, 0x66, 0x33, 0x40, - 0x45, 0x9d, 0x17, 0x67, 0x33, 0x00, 0x42, 0x32, 0x00, 0x5d, 0x33, 0x40, - 0x44, 0xc9, 0x00, 0x60, 0x33, 0x80, 0x06, 0x45, 0x0b, 0x6e, 0x63, 0x33, - 0x40, 0x43, 0x75, 0x09, 0x6a, 0x33, 0x40, 0x03, 0x63, 0x1f, 0x06, 0x47, - 0xd3, 0xcd, 0xcb, 0x32, 0x40, 0xa5, 0xca, 0x01, 0xa6, 0xac, 0x01, 0x44, - 0x46, 0x2a, 0xe8, 0x33, 0x80, 0x9e, 0x01, 0x43, 0xbf, 0x0a, 0xe0, 0x33, - 0x00, 0xb3, 0x7c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xe9, 0x33, 0x00, - 0xa8, 0x56, 0xb7, 0x01, 0xff, 0xa5, 0x04, 0xef, 0xe1, 0x33, 0x40, 0x43, - 0x47, 0x2b, 0xeb, 0x33, 0x00, 0x43, 0x2a, 0x1d, 0xf3, 0x33, 0xc0, 0x00, - 0x8d, 0x01, 0xff, 0x45, 0xc3, 0x0a, 0xfb, 0x33, 0x00, 0xa6, 0x29, 0x44, - 0x46, 0x2a, 0xfc, 0x33, 0x00, 0x43, 0xbf, 0x0a, 0xf4, 0x33, 0x00, 0xb3, - 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xf6, 0x33, 0x00, 0x42, 0x15, - 0x02, 0xf5, 0x33, 0x40, 0x44, 0x27, 0x1d, 0xfa, 0x33, 0x00, 0x42, 0x60, - 0x25, 0xf9, 0x33, 0x40, 0x43, 0xa7, 0x05, 0xf8, 0x33, 0x00, 0x43, 0xcb, - 0x06, 0xf7, 0x33, 0x40, 0x03, 0x2c, 0x11, 0x06, 0x43, 0x26, 0x01, 0xe2, - 0x33, 0x40, 0x43, 0x75, 0x09, 0xec, 0x33, 0x00, 0xf9, 0xfd, 0x33, 0xc0, - 0x00, 0x44, 0xc5, 0xba, 0xfe, 0x33, 0x40, 0x44, 0x27, 0x1d, 0xe6, 0x33, - 0x80, 0x0d, 0x42, 0x60, 0x25, 0xe5, 0x33, 0xc0, 0x00, 0x44, 0x9e, 0x17, - 0xef, 0x33, 0x40, 0x44, 0x9e, 0x17, 0xf0, 0x33, 0x40, 0x44, 0x9e, 0x17, - 0xf2, 0x33, 0x40, 0xa9, 0x0d, 0x43, 0xcb, 0x06, 0xe3, 0x33, 0xc0, 0x00, - 0x44, 0x9e, 0x17, 0xed, 0x33, 0x40, 0x45, 0x9d, 0x17, 0xee, 0x33, 0x00, - 0x42, 0x32, 0x00, 0xe4, 0x33, 0x40, 0x44, 0xc9, 0x00, 0xe7, 0x33, 0x80, - 0x06, 0x45, 0x0b, 0x6e, 0xea, 0x33, 0x40, 0x43, 0x75, 0x09, 0xf1, 0x33, - 0x40, 0x44, 0xde, 0xee, 0xc3, 0x32, 0x00, 0x45, 0x9f, 0xe8, 0xc7, 0x32, - 0x40, 0xa6, 0x15, 0x43, 0xbf, 0x0a, 0x72, 0xd3, 0x01, 0xb4, 0x01, 0xff, - 0x44, 0x25, 0x01, 0x74, 0xd3, 0x01, 0x42, 0x15, 0x02, 0x73, 0xd3, 0x41, - 0x43, 0xa7, 0x05, 0x76, 0xd3, 0x01, 0x43, 0xcb, 0x06, 0x75, 0xd3, 0x41, - 0x51, 0x7b, 0x2c, 0x2c, 0x30, 0x00, 0x14, 0x7f, 0x44, 0x01, 0xff, 0x09, - 0x2e, 0xb3, 0x74, 0x4d, 0x97, 0x81, 0xf4, 0x2f, 0x00, 0x55, 0xf3, 0x3a, - 0xfe, 0x2f, 0x00, 0x08, 0x84, 0x02, 0x58, 0x48, 0xec, 0x0d, 0xfb, 0x2f, - 0x00, 0x48, 0xf1, 0x5e, 0xff, 0x2f, 0x00, 0x02, 0x6f, 0x00, 0x01, 0xff, - 0x49, 0x96, 0xb4, 0xef, 0x31, 0x00, 0x0c, 0x19, 0x93, 0x01, 0xff, 0x45, - 0x5c, 0x00, 0xf5, 0x2f, 0x00, 0x45, 0xf5, 0x06, 0xf6, 0x2f, 0x00, 0xac, - 0x17, 0x45, 0xc8, 0x00, 0xfc, 0x2f, 0x00, 0x06, 0x6d, 0x02, 0x01, 0xff, - 0x44, 0xc3, 0x00, 0xf8, 0x2f, 0x00, 0x45, 0xc8, 0x00, 0xf9, 0x2f, 0x40, - 0x43, 0xc4, 0x00, 0xf7, 0x2f, 0x00, 0x05, 0x14, 0x01, 0x01, 0xff, 0x44, - 0xc3, 0x00, 0xfa, 0x2f, 0x00, 0x45, 0xc8, 0x00, 0xfd, 0x2f, 0x40, 0x50, - 0xaa, 0x63, 0xf2, 0x2f, 0x00, 0x45, 0xc8, 0x00, 0xf0, 0x2f, 0x40, 0x45, - 0xf5, 0x06, 0xf1, 0x2f, 0x00, 0x50, 0x9a, 0x63, 0xf3, 0x2f, 0x40, 0x4b, - 0xbd, 0x9c, 0x06, 0x30, 0x00, 0x44, 0xe9, 0x04, 0x01, 0x30, 0x40, 0x4b, - 0xa0, 0x97, 0x98, 0x31, 0x00, 0x4a, 0x4d, 0xa7, 0x9e, 0x31, 0x00, 0xa6, - 0x49, 0x4b, 0xad, 0x9a, 0x9d, 0x31, 0x00, 0x4c, 0x95, 0x8f, 0x90, 0x31, - 0x00, 0xad, 0x2f, 0x48, 0x84, 0x2c, 0x92, 0x31, 0x00, 0x4c, 0x95, 0x92, - 0x91, 0x31, 0x00, 0x4b, 0x59, 0xa0, 0x9a, 0x31, 0x00, 0xb4, 0x01, 0xff, - 0xa8, 0x0c, 0x47, 0x29, 0xd1, 0x96, 0x31, 0x00, 0x47, 0xbe, 0xd4, 0x93, - 0x31, 0x40, 0x48, 0x8a, 0xc4, 0x9b, 0x31, 0x00, 0x48, 0xaa, 0xc7, 0x94, - 0x31, 0x40, 0x47, 0xfe, 0xcb, 0x9f, 0x31, 0x00, 0x4a, 0x37, 0xa9, 0x97, - 0x31, 0x40, 0x49, 0x47, 0xb8, 0x99, 0x31, 0x00, 0x03, 0xcb, 0x06, 0x01, - 0xff, 0x45, 0xb8, 0x00, 0x95, 0x31, 0x00, 0x47, 0x76, 0x38, 0x9c, 0x31, - 0x40, 0x04, 0x37, 0x00, 0x06, 0x4d, 0x3c, 0x81, 0xaa, 0xfa, 0x41, 0x42, - 0x1e, 0x00, 0x61, 0x22, 0x80, 0x06, 0x4e, 0xa6, 0x3a, 0x67, 0x2a, 0x40, - 0x55, 0xab, 0x37, 0xe5, 0x29, 0x40, 0xa3, 0x0c, 0x55, 0xde, 0x3a, 0xd2, - 0xf3, 0x01, 0x45, 0xdc, 0xe7, 0xf8, 0x26, 0x40, 0x44, 0x4b, 0x60, 0x68, - 0xf3, 0x01, 0x43, 0xce, 0x3f, 0xca, 0xf9, 0x41, 0xa1, 0xdc, 0x25, 0xa5, - 0xe2, 0x07, 0xa9, 0xcf, 0x03, 0xaf, 0x5c, 0x4b, 0x4e, 0xa0, 0xb4, 0x20, - 0x00, 0xb5, 0x3e, 0xb9, 0x01, 0xff, 0x46, 0x8e, 0xd6, 0xbb, 0xfa, 0x01, - 0x44, 0xc2, 0xec, 0xda, 0x2b, 0x00, 0xb0, 0x06, 0x4f, 0xe9, 0x71, 0x8e, - 0x23, 0x40, 0x43, 0xb0, 0x01, 0x10, 0x20, 0x80, 0x06, 0x49, 0x75, 0xba, - 0x12, 0x2e, 0x40, 0x80, 0x0c, 0x46, 0x1b, 0x8e, 0x2d, 0x00, 0x00, 0x4b, - 0x53, 0x97, 0x27, 0x20, 0x40, 0x46, 0x2a, 0x21, 0x43, 0x20, 0x00, 0x4e, - 0x7b, 0x68, 0x1a, 0x2e, 0x40, 0x4a, 0x83, 0xa8, 0x17, 0xf9, 0x01, 0x53, - 0x23, 0x4a, 0xaf, 0xf4, 0x01, 0x49, 0x84, 0x91, 0x2f, 0xf6, 0x01, 0xf4, - 0xd6, 0xf6, 0x41, 0x43, 0xdb, 0x29, 0x2a, 0xf5, 0x01, 0xac, 0xd7, 0x02, - 0x48, 0x98, 0x78, 0x3b, 0x22, 0x00, 0x03, 0xfc, 0x27, 0xc0, 0x02, 0x42, - 0x2a, 0x05, 0x9d, 0xfa, 0x01, 0xb2, 0x53, 0x46, 0xfa, 0xdc, 0xe5, 0xf3, - 0x01, 0xb4, 0x2b, 0xb5, 0x01, 0xff, 0x46, 0x2c, 0xd4, 0x1b, 0x23, 0x80, - 0x1b, 0x42, 0x1b, 0x03, 0x02, 0x23, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x48, - 0xe3, 0x3c, 0xe0, 0xf3, 0x81, 0x06, 0x4b, 0xed, 0xa2, 0xe1, 0xf3, 0x41, - 0xf3, 0xd8, 0xf3, 0x41, 0x52, 0x8c, 0x4e, 0xf3, 0x23, 0x40, 0x80, 0x06, - 0x42, 0xd8, 0x00, 0xe8, 0xf3, 0x41, 0x48, 0x82, 0xc1, 0x15, 0x26, 0x00, - 0x43, 0xf9, 0xd7, 0x2d, 0xf3, 0x01, 0x46, 0x1c, 0xdc, 0x36, 0xf3, 0x01, - 0x47, 0x28, 0xd3, 0x68, 0x26, 0x40, 0x08, 0x0e, 0x00, 0x16, 0x42, 0x1b, - 0x03, 0x0e, 0xf4, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x44, 0xe1, 0x07, 0x34, - 0xf4, 0x01, 0x46, 0x64, 0xdc, 0xc7, 0xf3, 0x41, 0xa2, 0xb1, 0x01, 0x49, - 0xa8, 0xb4, 0x13, 0xcc, 0x01, 0x48, 0x45, 0x29, 0x26, 0x20, 0x00, 0xac, - 0x78, 0x55, 0x04, 0x3c, 0xa9, 0x26, 0x00, 0x11, 0x6c, 0x5b, 0x50, 0xb2, - 0x42, 0x0a, 0x7d, 0xae, 0x2e, 0xb4, 0x06, 0x4b, 0x45, 0xa3, 0xb0, 0xce, - 0x41, 0x02, 0x5c, 0x00, 0x06, 0x4c, 0x4d, 0x92, 0xa5, 0xf6, 0x41, 0x44, - 0x9c, 0x44, 0x7e, 0x2b, 0x00, 0x47, 0x16, 0x3b, 0x09, 0x00, 0xc0, 0x00, - 0x80, 0x01, 0xff, 0x43, 0x4d, 0x12, 0x88, 0x00, 0x00, 0x52, 0x5e, 0x55, - 0x89, 0x00, 0x40, 0xd1, 0xba, 0x23, 0x00, 0xd3, 0xbb, 0x23, 0x00, 0xd7, - 0xbc, 0x23, 0x00, 0xd9, 0xbd, 0x23, 0x40, 0x49, 0x40, 0xb3, 0x9b, 0xcc, - 0x01, 0x4f, 0x3b, 0x6b, 0x09, 0xcc, 0x41, 0x44, 0x12, 0xea, 0x81, 0xfb, - 0x01, 0xd2, 0x76, 0xfb, 0x01, 0xd3, 0x77, 0xfb, 0x01, 0xd4, 0x78, 0xfb, - 0x01, 0xd5, 0x79, 0xfb, 0x01, 0xd6, 0x7a, 0xfb, 0x01, 0xd7, 0x7b, 0xfb, - 0x41, 0x45, 0xfc, 0xe0, 0x85, 0xcc, 0x01, 0x04, 0xc3, 0x07, 0x01, 0xff, - 0x49, 0x56, 0x57, 0xaf, 0x23, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4f, - 0xb3, 0x6b, 0x91, 0xcc, 0x01, 0xb4, 0x01, 0xff, 0x4f, 0xcd, 0x07, 0x12, - 0xce, 0x01, 0x48, 0xd3, 0x07, 0x0f, 0xce, 0x41, 0x42, 0x17, 0x00, 0x15, - 0x20, 0x00, 0x05, 0xe2, 0x02, 0x01, 0xff, 0x47, 0xb3, 0xce, 0x23, 0x2b, - 0x00, 0x47, 0xce, 0xd0, 0xc3, 0x2b, 0x40, 0x44, 0xf1, 0x4e, 0x6f, 0xf3, - 0x01, 0x43, 0x3c, 0xb4, 0x1d, 0xf4, 0x41, 0xe5, 0x73, 0xf5, 0x01, 0x59, - 0x29, 0x24, 0x68, 0xf6, 0xc1, 0x00, 0x50, 0xef, 0x10, 0x69, 0xf6, 0x41, - 0x46, 0x42, 0xd7, 0x3a, 0xf3, 0x01, 0x02, 0x40, 0x00, 0xe1, 0x03, 0x49, - 0xa1, 0xb8, 0x7e, 0xf9, 0x01, 0x4a, 0xfd, 0xab, 0xd5, 0xf6, 0x01, 0x4a, - 0x6f, 0xad, 0x9b, 0xf9, 0x01, 0x07, 0xf9, 0x11, 0x06, 0x4b, 0xd2, 0xa0, - 0xec, 0x26, 0x40, 0x4c, 0x4d, 0x8c, 0x9f, 0x30, 0x00, 0x4e, 0xb6, 0x1f, - 0x9d, 0x30, 0x00, 0x07, 0xc1, 0x05, 0x06, 0x55, 0x11, 0x3e, 0x9e, 0x30, - 0x40, 0xe1, 0x42, 0x30, 0x80, 0x98, 0x03, 0xa2, 0x81, 0x03, 0xa4, 0xea, - 0x02, 0xe5, 0x48, 0x30, 0x00, 0xa7, 0xcf, 0x02, 0xa8, 0xb8, 0x02, 0xe9, - 0x44, 0x30, 0x00, 0xab, 0x9d, 0x02, 0xad, 0x86, 0x02, 0xee, 0x93, 0x30, - 0x80, 0xec, 0x01, 0xef, 0x4a, 0x30, 0x00, 0xb0, 0xd1, 0x01, 0xb2, 0xba, - 0x01, 0xb3, 0x57, 0xb4, 0x41, 0xf5, 0x46, 0x30, 0x00, 0x42, 0xeb, 0x60, - 0x94, 0x30, 0x00, 0xb7, 0x25, 0xb9, 0x17, 0xba, 0x01, 0xff, 0xe1, 0x56, - 0x30, 0x00, 0xe5, 0x5c, 0x30, 0x00, 0xe9, 0x58, 0x30, 0x00, 0xef, 0x5e, - 0x30, 0x00, 0xf5, 0x5a, 0x30, 0x40, 0xe1, 0x84, 0x30, 0x00, 0xef, 0x88, - 0x30, 0x00, 0xf5, 0x86, 0x30, 0x40, 0xe1, 0x8f, 0x30, 0x00, 0xe5, 0x91, - 0x30, 0x00, 0xe9, 0x90, 0x30, 0x00, 0xef, 0x92, 0x30, 0x40, 0xe1, 0x5f, - 0x30, 0x00, 0xe5, 0x66, 0x30, 0x00, 0xe9, 0x61, 0x30, 0x00, 0xef, 0x68, - 0x30, 0x00, 0xf5, 0x64, 0x30, 0x40, 0xe1, 0x55, 0x30, 0x00, 0xe5, 0x5b, - 0x30, 0x00, 0xe9, 0x57, 0x30, 0x00, 0x05, 0x0d, 0x07, 0x08, 0xef, 0x5d, - 0x30, 0x00, 0xf5, 0x59, 0x30, 0x40, 0xe1, 0x41, 0x30, 0x00, 0xe5, 0x47, - 0x30, 0x00, 0xe9, 0x43, 0x30, 0x00, 0xab, 0x2f, 0xef, 0x49, 0x30, 0x00, - 0x42, 0x5c, 0x01, 0x63, 0x30, 0x00, 0xf5, 0x45, 0x30, 0x00, 0xb7, 0x0f, - 0xb9, 0x01, 0xff, 0xe1, 0x83, 0x30, 0x00, 0xef, 0x87, 0x30, 0x00, 0xf5, - 0x85, 0x30, 0x40, 0xe1, 0x8e, 0x30, 0x00, 0xe5, 0x51, 0xb1, 0x01, 0xe9, - 0x50, 0xb1, 0x01, 0xef, 0x52, 0xb1, 0x41, 0xe1, 0x95, 0x30, 0x00, 0xe5, - 0x96, 0x30, 0x00, 0xef, 0x32, 0xb1, 0x41, 0xe1, 0x89, 0x30, 0x00, 0xe5, - 0x8c, 0x30, 0x00, 0xe9, 0x8a, 0x30, 0x00, 0xef, 0x8d, 0x30, 0x00, 0xf5, - 0x8b, 0x30, 0x40, 0xe1, 0x71, 0x30, 0x00, 0xe5, 0x7a, 0x30, 0x00, 0xe9, - 0x74, 0x30, 0x00, 0xef, 0x7d, 0x30, 0x00, 0xf5, 0x77, 0x30, 0x40, 0xe1, - 0x6a, 0x30, 0x00, 0xe5, 0x6d, 0x30, 0x00, 0xe9, 0x6b, 0x30, 0x00, 0xef, - 0x6e, 0x30, 0x00, 0xf5, 0x6c, 0x30, 0x40, 0xe1, 0x7e, 0x30, 0x00, 0xe5, - 0x81, 0x30, 0x00, 0xe9, 0x7f, 0x30, 0x00, 0xef, 0x82, 0x30, 0x00, 0xf5, - 0x80, 0x30, 0x40, 0xe1, 0x4b, 0x30, 0x00, 0xe5, 0x51, 0x30, 0x00, 0xe9, - 0x4d, 0x30, 0x00, 0xef, 0x53, 0x30, 0x00, 0xf5, 0x4f, 0x30, 0x40, 0xe1, - 0x6f, 0x30, 0x00, 0xe5, 0x78, 0x30, 0x00, 0xe9, 0x72, 0x30, 0x00, 0xef, - 0x7b, 0x30, 0x00, 0xf5, 0x75, 0x30, 0x40, 0xe1, 0x4c, 0x30, 0x00, 0xe5, - 0x52, 0x30, 0x00, 0xe9, 0x4e, 0x30, 0x00, 0xef, 0x54, 0x30, 0x00, 0xf5, - 0x50, 0x30, 0x40, 0xe1, 0x60, 0x30, 0x00, 0xe5, 0x67, 0x30, 0x00, 0xe9, - 0x62, 0x30, 0x00, 0xef, 0x69, 0x30, 0x00, 0xf5, 0x65, 0x30, 0x40, 0xe1, - 0x70, 0x30, 0x00, 0xe5, 0x79, 0x30, 0x00, 0xe9, 0x73, 0x30, 0x00, 0xef, - 0x7c, 0x30, 0x00, 0xf5, 0x76, 0x30, 0x40, 0x07, 0x28, 0x7f, 0x01, 0xff, - 0x42, 0x45, 0x07, 0x1f, 0xb1, 0x01, 0x42, 0x4d, 0x00, 0x01, 0xb0, 0x41, - 0x80, 0x16, 0x8d, 0x01, 0xff, 0x4b, 0xb8, 0x9a, 0x60, 0xf4, 0x01, 0x4b, - 0x9b, 0xa0, 0x84, 0xf6, 0xc1, 0x00, 0x51, 0x1c, 0x56, 0x85, 0xf6, 0x41, - 0x51, 0x5f, 0x57, 0x06, 0xf5, 0x01, 0x4c, 0xed, 0x94, 0xa1, 0x26, 0x40, - 0xa1, 0x83, 0x17, 0x05, 0xc9, 0xe1, 0x8f, 0x0f, 0x46, 0x02, 0xd8, 0x94, - 0xf9, 0x01, 0xac, 0xeb, 0x0e, 0x10, 0xda, 0x63, 0xf0, 0x03, 0xb2, 0xe3, - 0x03, 0x0b, 0x03, 0xa3, 0x01, 0xff, 0xa1, 0xc9, 0x03, 0xa2, 0xb4, 0x03, - 0x02, 0xe8, 0x04, 0x9a, 0x03, 0xa4, 0xe9, 0x02, 0x4a, 0xc5, 0xa7, 0xcf, - 0x4d, 0x00, 0xa6, 0xd4, 0x02, 0xa7, 0xa1, 0x02, 0x50, 0x0a, 0x62, 0xc7, - 0x4d, 0x00, 0x02, 0x9e, 0x01, 0xfb, 0x01, 0x4a, 0xc7, 0xaa, 0xfb, 0x4d, - 0x00, 0x02, 0x98, 0x07, 0xe4, 0x01, 0xaf, 0xca, 0x01, 0xb0, 0xb5, 0x01, - 0x02, 0x88, 0x00, 0x9c, 0x01, 0xb3, 0x7e, 0xb4, 0x14, 0xb7, 0x06, 0x4e, - 0x84, 0x7d, 0xc3, 0x4d, 0x40, 0x46, 0x27, 0x87, 0xc4, 0x4d, 0x00, 0x52, - 0xd6, 0x52, 0xd1, 0x4d, 0x40, 0x03, 0x76, 0x0b, 0x06, 0x47, 0xac, 0x11, - 0xc9, 0x4d, 0x40, 0xa1, 0x47, 0xa3, 0x33, 0x46, 0xc8, 0xd8, 0xe4, 0x4d, - 0x00, 0x4b, 0x3f, 0x9a, 0xf8, 0x4d, 0x00, 0x4b, 0xcb, 0x9b, 0xf9, 0x4d, - 0x00, 0x56, 0x25, 0x34, 0xf3, 0x4d, 0x00, 0x4f, 0x83, 0x6e, 0xf5, 0x4d, - 0x00, 0x4f, 0xae, 0x70, 0xc1, 0x4d, 0x00, 0xb7, 0x01, 0xff, 0x47, 0x0c, - 0xcc, 0xf7, 0x4d, 0x00, 0x43, 0x10, 0x09, 0xef, 0x4d, 0x40, 0x47, 0x75, - 0xcc, 0xf1, 0x4d, 0x00, 0x4c, 0x89, 0x8f, 0xdd, 0x4d, 0x00, 0x4e, 0x20, - 0x7a, 0xc0, 0x4d, 0x40, 0x4c, 0x51, 0x8b, 0xdc, 0x4d, 0x00, 0xb2, 0x01, - 0xff, 0x42, 0x38, 0x57, 0xc6, 0x4d, 0x00, 0x4e, 0x78, 0x79, 0xf2, 0x4d, - 0x40, 0x05, 0x0d, 0x07, 0x0c, 0x4e, 0xda, 0x79, 0xd6, 0x4d, 0x00, 0x49, - 0x33, 0xbd, 0xcb, 0x4d, 0x40, 0x4d, 0xdb, 0x85, 0xfd, 0x4d, 0x00, 0x46, - 0x54, 0xdd, 0xc8, 0x4d, 0x40, 0xb4, 0x06, 0x48, 0x9a, 0xc9, 0xf0, 0x4d, - 0x40, 0x44, 0x88, 0x00, 0xe0, 0x4d, 0x00, 0x43, 0x5d, 0x01, 0xd7, 0x4d, - 0x40, 0x44, 0x91, 0xa2, 0xca, 0x4d, 0x00, 0x47, 0x95, 0xd2, 0xe2, 0x4d, - 0x00, 0x4d, 0x17, 0x88, 0xed, 0x4d, 0x40, 0x4a, 0x2b, 0xa6, 0xe6, 0x4d, - 0x00, 0x02, 0x6e, 0x02, 0x01, 0xff, 0x47, 0xa1, 0x16, 0xe5, 0x4d, 0x00, - 0x47, 0x0a, 0x65, 0xee, 0x4d, 0x40, 0x45, 0x82, 0xe2, 0xce, 0x4d, 0x00, - 0x4b, 0x53, 0xa2, 0xda, 0x4d, 0x40, 0x46, 0xd8, 0xd7, 0xe9, 0x4d, 0x00, - 0x47, 0x51, 0xce, 0xde, 0x4d, 0x00, 0xae, 0x01, 0xff, 0x48, 0x22, 0xc3, - 0xfc, 0x4d, 0x00, 0x46, 0xaa, 0xdb, 0xd8, 0x4d, 0x40, 0x51, 0xf9, 0x56, - 0xec, 0x4d, 0x00, 0xb2, 0x01, 0xff, 0x43, 0xe2, 0x07, 0xd5, 0x4d, 0x00, - 0x04, 0x10, 0x54, 0x01, 0xff, 0xb0, 0x06, 0x46, 0x54, 0xdd, 0xd9, 0x4d, - 0x40, 0xaf, 0x06, 0x4c, 0xdc, 0x85, 0xdb, 0x4d, 0x40, 0x48, 0x73, 0x51, - 0xcd, 0x4d, 0x00, 0x43, 0x15, 0x01, 0xe1, 0x4d, 0x40, 0x49, 0xfe, 0xb5, - 0xcc, 0x4d, 0x00, 0x48, 0x82, 0xc6, 0xd0, 0x4d, 0x40, 0x55, 0x92, 0x38, - 0xe3, 0x4d, 0x00, 0xa5, 0x14, 0xa9, 0x06, 0x47, 0x1d, 0xd4, 0xdf, 0x4d, - 0x40, 0x59, 0xac, 0x23, 0xc2, 0x4d, 0x00, 0x48, 0x72, 0xc8, 0xfa, 0x4d, - 0x40, 0x46, 0xd8, 0xd7, 0xe8, 0x4d, 0x00, 0x49, 0x28, 0xb9, 0xe7, 0x4d, - 0x00, 0x49, 0x53, 0xbe, 0xf4, 0x4d, 0x40, 0x4c, 0x61, 0x90, 0xeb, 0x4d, - 0x00, 0xae, 0x01, 0xff, 0x45, 0x59, 0xe3, 0xc5, 0x4d, 0x00, 0x4a, 0x63, - 0xaf, 0xd3, 0x4d, 0x40, 0x50, 0x1a, 0x61, 0xff, 0x4d, 0x00, 0x4d, 0xe9, - 0x82, 0xd4, 0x4d, 0x00, 0x4b, 0xa9, 0x9f, 0xea, 0x4d, 0x40, 0x48, 0xda, - 0xc1, 0xf6, 0x4d, 0x00, 0x4f, 0xd1, 0x6b, 0xfe, 0x4d, 0x00, 0x47, 0x02, - 0xd2, 0xd2, 0x4d, 0x40, 0xe2, 0x3f, 0xf3, 0x01, 0x57, 0xcb, 0x2e, 0xb9, - 0x22, 0x40, 0x02, 0xf2, 0x18, 0xdf, 0x0a, 0x02, 0x08, 0x02, 0xc2, 0x0a, - 0xa8, 0x99, 0x09, 0x02, 0x4e, 0x36, 0x84, 0x09, 0xab, 0xd3, 0x07, 0xad, - 0xcd, 0x06, 0xae, 0xa4, 0x05, 0x02, 0x22, 0x31, 0x93, 0x05, 0xb2, 0x8f, - 0x04, 0xb3, 0xef, 0x02, 0xb4, 0xd2, 0x01, 0x02, 0xed, 0x38, 0xb9, 0x01, - 0xb7, 0x52, 0xb9, 0x01, 0xff, 0x02, 0xf2, 0x18, 0x31, 0x02, 0x22, 0x31, - 0x15, 0x02, 0xed, 0x38, 0x01, 0xff, 0xd1, 0xe3, 0xb0, 0x01, 0xd2, 0xe4, - 0xb0, 0x01, 0xd3, 0xe5, 0xb0, 0x01, 0xd4, 0xe6, 0xb0, 0x41, 0xd1, 0xe7, - 0xb0, 0x01, 0xd2, 0xe8, 0xb0, 0x01, 0xd3, 0xe9, 0xb0, 0x01, 0xd4, 0xea, - 0xb0, 0x01, 0xd5, 0xeb, 0xb0, 0x01, 0xd6, 0xec, 0xb0, 0x41, 0xd1, 0xdd, - 0xb0, 0x01, 0xd2, 0xde, 0xb0, 0x01, 0xd3, 0xdf, 0xb0, 0x01, 0xd4, 0xe0, - 0xb0, 0x01, 0xd5, 0xe1, 0xb0, 0x01, 0x42, 0x60, 0x46, 0xe2, 0xb0, 0x41, - 0x02, 0xf2, 0x18, 0x4d, 0x02, 0x08, 0x02, 0x39, 0x02, 0x4e, 0x36, 0x21, - 0x02, 0x22, 0x31, 0x01, 0xff, 0xd1, 0x16, 0xb1, 0x01, 0xd2, 0x17, 0xb1, - 0x01, 0xd3, 0x18, 0xb1, 0x01, 0xd4, 0x19, 0xb1, 0x01, 0xd5, 0x1a, 0xb1, - 0x01, 0xd6, 0x1b, 0xb1, 0x01, 0xd7, 0x1c, 0xb1, 0x41, 0xd1, 0x0d, 0xb1, - 0x01, 0xd2, 0x0e, 0xb1, 0x01, 0xd3, 0x0f, 0xb1, 0x01, 0xd4, 0x10, 0xb1, - 0x01, 0xd5, 0x11, 0xb1, 0x41, 0xd1, 0x12, 0xb1, 0x01, 0xd2, 0x13, 0xb1, - 0x01, 0xd3, 0x14, 0xb1, 0x01, 0xd4, 0x15, 0xb1, 0x41, 0xd1, 0x08, 0xb1, - 0x01, 0xd2, 0x09, 0xb1, 0x01, 0xd3, 0x0a, 0xb1, 0x01, 0xd4, 0x0b, 0xb1, - 0x01, 0xd5, 0x0c, 0xb1, 0x41, 0xd1, 0x0a, 0xb0, 0x01, 0xd2, 0x0b, 0xb0, - 0x01, 0xd3, 0x0c, 0xb0, 0x01, 0xd4, 0x0d, 0xb0, 0x01, 0xd5, 0x0e, 0xb0, - 0x41, 0x02, 0xf2, 0x18, 0x85, 0x01, 0x02, 0x08, 0x02, 0x5d, 0x02, 0x4e, - 0x36, 0x3d, 0x02, 0x22, 0x31, 0x1b, 0x02, 0xed, 0x38, 0x01, 0xff, 0xd1, - 0x69, 0xb0, 0x01, 0xd2, 0x6a, 0xb0, 0x01, 0xd3, 0x6b, 0xb0, 0x01, 0xd4, - 0x6c, 0xb0, 0x01, 0x42, 0x1e, 0x00, 0x6d, 0xb0, 0x41, 0xd1, 0x77, 0xb0, - 0x01, 0xd2, 0x78, 0xb0, 0x01, 0xd3, 0x79, 0xb0, 0x01, 0xd4, 0x7a, 0xb0, - 0x01, 0xd5, 0x7b, 0xb0, 0x01, 0xd6, 0x7c, 0xb0, 0x01, 0x42, 0x71, 0x00, - 0x7d, 0xb0, 0x41, 0xd1, 0x62, 0xb0, 0x01, 0xd2, 0x63, 0xb0, 0x01, 0xd3, - 0x64, 0xb0, 0x01, 0xd4, 0x65, 0xb0, 0x01, 0xd5, 0x66, 0xb0, 0x01, 0xd6, - 0x67, 0xb0, 0x01, 0xd7, 0x68, 0xb0, 0x41, 0xd1, 0x6e, 0xb0, 0x01, 0xd2, - 0x6f, 0xb0, 0x01, 0xd3, 0x70, 0xb0, 0x01, 0xd4, 0x71, 0xb0, 0x01, 0xd5, - 0x72, 0xb0, 0x01, 0xd6, 0x73, 0xb0, 0x01, 0xd7, 0x74, 0xb0, 0x01, 0xd8, - 0x75, 0xb0, 0x01, 0xd9, 0x76, 0xb0, 0x41, 0xd1, 0x5e, 0xb0, 0x01, 0xd2, - 0x5f, 0xb0, 0x01, 0xd3, 0x60, 0xb0, 0x01, 0xd4, 0x61, 0xb0, 0x41, 0x02, - 0xf2, 0x18, 0x79, 0x02, 0x08, 0x02, 0x61, 0x02, 0x4e, 0x36, 0x45, 0x02, - 0x22, 0x31, 0x25, 0x02, 0xed, 0x38, 0x01, 0xff, 0xd1, 0x4a, 0xb0, 0x01, - 0xd2, 0x4b, 0xb0, 0x01, 0xd3, 0x4c, 0xb0, 0x01, 0xd4, 0x4d, 0xb0, 0x01, - 0xd5, 0x4e, 0xb0, 0x01, 0xd6, 0x4f, 0xb0, 0x01, 0xd7, 0x50, 0xb0, 0x01, - 0xd8, 0x51, 0xb0, 0x41, 0xd1, 0x57, 0xb0, 0x01, 0xd2, 0x58, 0xb0, 0x01, - 0xd3, 0x59, 0xb0, 0x01, 0xd4, 0x5a, 0xb0, 0x01, 0xd5, 0x5b, 0xb0, 0x01, - 0xd6, 0x5c, 0xb0, 0x01, 0xd7, 0x5d, 0xb0, 0x41, 0xd1, 0x44, 0xb0, 0x01, - 0xd2, 0x45, 0xb0, 0x01, 0xd3, 0x46, 0xb0, 0x01, 0xd4, 0x47, 0xb0, 0x01, - 0xd5, 0x48, 0xb0, 0x01, 0xd6, 0x49, 0xb0, 0x41, 0xd1, 0x52, 0xb0, 0x01, - 0xd2, 0x53, 0xb0, 0x01, 0xd3, 0x54, 0xb0, 0x01, 0xd4, 0x55, 0xb0, 0x01, - 0xd5, 0x56, 0xb0, 0x41, 0xd1, 0x3c, 0xb0, 0x01, 0xd2, 0x3d, 0xb0, 0x01, - 0xd3, 0x3e, 0xb0, 0x01, 0xd4, 0x3f, 0xb0, 0x01, 0xd5, 0x40, 0xb0, 0x01, - 0xd6, 0x41, 0xb0, 0x01, 0xd7, 0x42, 0xb0, 0x01, 0xd8, 0x43, 0xb0, 0x41, - 0x02, 0xf2, 0x18, 0x6d, 0x02, 0x08, 0x02, 0x59, 0x02, 0x4e, 0x36, 0x39, - 0x02, 0x22, 0x31, 0x1d, 0x02, 0xed, 0x38, 0x01, 0xff, 0xd1, 0xf8, 0xb0, - 0x01, 0xd2, 0xf9, 0xb0, 0x01, 0xd3, 0xfa, 0xb0, 0x01, 0xd4, 0xfb, 0xb0, - 0x01, 0xd5, 0xfc, 0xb0, 0x01, 0xd6, 0xfd, 0xb0, 0x41, 0xd1, 0x02, 0xb1, - 0x01, 0xd2, 0x03, 0xb1, 0x01, 0xd3, 0x04, 0xb1, 0x01, 0xd4, 0x05, 0xb1, - 0x01, 0xd5, 0x06, 0xb1, 0x01, 0xd6, 0x07, 0xb1, 0x41, 0xd1, 0xf1, 0xb0, - 0x01, 0xd2, 0xf2, 0xb0, 0x01, 0xd3, 0xf3, 0xb0, 0x01, 0xd4, 0xf4, 0xb0, - 0x01, 0xd5, 0xf5, 0xb0, 0x01, 0xd6, 0xf6, 0xb0, 0x01, 0xd7, 0xf7, 0xb0, - 0x41, 0xd1, 0xfe, 0xb0, 0x01, 0xd2, 0xff, 0xb0, 0x01, 0xd3, 0x00, 0xb1, - 0x01, 0xd4, 0x01, 0xb1, 0x41, 0xd1, 0xed, 0xb0, 0x01, 0xd2, 0xee, 0xb0, - 0x01, 0xd3, 0xef, 0xb0, 0x01, 0xd4, 0xf0, 0xb0, 0x41, 0xd1, 0x14, 0xb0, - 0x01, 0xd2, 0x15, 0xb0, 0x01, 0xd3, 0x16, 0xb0, 0x41, 0x07, 0x09, 0xcb, - 0x99, 0x01, 0x02, 0xf2, 0x18, 0x71, 0x02, 0x08, 0x02, 0x4f, 0x02, 0x4e, - 0x36, 0x29, 0x02, 0x22, 0x31, 0x11, 0x02, 0xed, 0x38, 0x01, 0xff, 0xd1, - 0x8f, 0xb0, 0x01, 0xd2, 0x90, 0xb0, 0x01, 0xd3, 0x91, 0xb0, 0x41, 0xd1, - 0x99, 0xb0, 0x01, 0xd2, 0x9a, 0xb0, 0x01, 0xd3, 0x9b, 0xb0, 0x01, 0xd4, - 0x9c, 0xb0, 0x01, 0xd5, 0x9d, 0xb0, 0x41, 0xd1, 0x87, 0xb0, 0x01, 0xd2, - 0x88, 0xb0, 0x01, 0xd3, 0x89, 0xb0, 0x01, 0xd4, 0x8a, 0xb0, 0x01, 0xd5, - 0x8b, 0xb0, 0x01, 0xd6, 0x8c, 0xb0, 0x01, 0xd7, 0x8d, 0xb0, 0x01, 0x42, - 0x77, 0x00, 0x8e, 0xb0, 0x41, 0xd1, 0x92, 0xb0, 0x01, 0xd2, 0x93, 0xb0, - 0x01, 0xd3, 0x94, 0xb0, 0x01, 0xd4, 0x95, 0xb0, 0x01, 0xd5, 0x96, 0xb0, - 0x01, 0xd6, 0x97, 0xb0, 0x01, 0x42, 0x22, 0x03, 0x98, 0xb0, 0x41, 0xd1, - 0x7e, 0xb0, 0x01, 0xd2, 0x7f, 0xb0, 0x01, 0xd3, 0x80, 0xb0, 0x01, 0xd4, - 0x81, 0xb0, 0x01, 0xd5, 0x82, 0xb0, 0x01, 0xd6, 0x83, 0xb0, 0x01, 0xd7, - 0x84, 0xb0, 0x01, 0xd8, 0x85, 0xb0, 0x01, 0xd9, 0x86, 0xb0, 0x41, 0xd1, - 0x1d, 0xb1, 0x01, 0xd2, 0x1e, 0xb1, 0x41, 0x02, 0xf2, 0x18, 0x63, 0x02, - 0x08, 0x02, 0x51, 0x02, 0x4e, 0x36, 0x31, 0x02, 0x22, 0x31, 0x15, 0x02, - 0xed, 0x38, 0x01, 0xff, 0xd1, 0xd0, 0xb0, 0x01, 0xd2, 0xd1, 0xb0, 0x01, - 0xd3, 0xd2, 0xb0, 0x01, 0xd4, 0xd3, 0xb0, 0x41, 0xd1, 0xd7, 0xb0, 0x01, - 0xd2, 0xd8, 0xb0, 0x01, 0xd3, 0xd9, 0xb0, 0x01, 0xd4, 0xda, 0xb0, 0x01, - 0xd5, 0xdb, 0xb0, 0x01, 0xd6, 0xdc, 0xb0, 0x41, 0xd1, 0xc9, 0xb0, 0x01, - 0xd2, 0xca, 0xb0, 0x01, 0xd3, 0xcb, 0xb0, 0x01, 0xd4, 0xcc, 0xb0, 0x01, - 0xd5, 0xcd, 0xb0, 0x01, 0xd6, 0xce, 0xb0, 0x01, 0xd7, 0xcf, 0xb0, 0x41, - 0xd1, 0xd4, 0xb0, 0x01, 0xd2, 0xd5, 0xb0, 0x01, 0x42, 0x6c, 0x00, 0xd6, - 0xb0, 0x41, 0xd1, 0xc2, 0xb0, 0x01, 0xd2, 0xc3, 0xb0, 0x01, 0xd3, 0xc4, - 0xb0, 0x01, 0xd4, 0xc5, 0xb0, 0x01, 0xd5, 0xc6, 0xb0, 0x01, 0xd6, 0xc7, - 0xb0, 0x01, 0xd7, 0xc8, 0xb0, 0x41, 0x02, 0xf2, 0x18, 0x77, 0x02, 0x08, - 0x02, 0x5b, 0x02, 0x4e, 0x36, 0x37, 0x02, 0x22, 0x31, 0x21, 0x02, 0xed, - 0x38, 0x01, 0xff, 0xd1, 0x2b, 0xb0, 0x01, 0xd2, 0x2c, 0xb0, 0x01, 0xd3, - 0x2d, 0xb0, 0x01, 0xd4, 0x2e, 0xb0, 0x01, 0xd5, 0x2f, 0xb0, 0x01, 0xd6, - 0x30, 0xb0, 0x01, 0xd7, 0x31, 0xb0, 0x41, 0xd1, 0x38, 0xb0, 0x01, 0xd2, - 0x39, 0xb0, 0x01, 0xd3, 0x3a, 0xb0, 0x01, 0x42, 0x45, 0x00, 0x3b, 0xb0, - 0x41, 0xd1, 0x23, 0xb0, 0x01, 0xd2, 0x24, 0xb0, 0x01, 0xd3, 0x25, 0xb0, - 0x01, 0xd4, 0x26, 0xb0, 0x01, 0xd5, 0x27, 0xb0, 0x01, 0xd6, 0x28, 0xb0, - 0x01, 0xd7, 0x29, 0xb0, 0x01, 0xd8, 0x2a, 0xb0, 0x41, 0xd1, 0x32, 0xb0, - 0x01, 0xd2, 0x33, 0xb0, 0x01, 0xd3, 0x34, 0xb0, 0x01, 0xd4, 0x35, 0xb0, - 0x01, 0xd5, 0x36, 0xb0, 0x01, 0xd6, 0x37, 0xb0, 0x41, 0xd1, 0x17, 0xb0, - 0x81, 0x26, 0xd2, 0x18, 0xb0, 0x01, 0xd3, 0x19, 0xb0, 0x01, 0xd4, 0x1a, - 0xb0, 0x01, 0xd5, 0x1b, 0xb0, 0x01, 0xd6, 0x1c, 0xb0, 0x01, 0xd7, 0x1d, - 0xb0, 0x01, 0xd8, 0x1e, 0xb0, 0x01, 0xd9, 0x1f, 0xb0, 0x01, 0x42, 0x37, - 0x01, 0x22, 0xb0, 0x41, 0xd0, 0x20, 0xb0, 0x01, 0xd1, 0x21, 0xb0, 0x41, - 0xd1, 0x06, 0xb0, 0x01, 0xd2, 0x07, 0xb0, 0x01, 0xd3, 0x08, 0xb0, 0x01, - 0xd4, 0x09, 0xb0, 0x41, 0x02, 0xf2, 0x18, 0x75, 0x02, 0x08, 0x02, 0x55, - 0x02, 0x4e, 0x36, 0x35, 0x02, 0x22, 0x31, 0x11, 0x02, 0xed, 0x38, 0x01, - 0xff, 0xd1, 0xb0, 0xb0, 0x01, 0xd2, 0xb1, 0xb0, 0x01, 0xd3, 0xb2, 0xb0, - 0x41, 0xd1, 0xba, 0xb0, 0x01, 0xd2, 0xbb, 0xb0, 0x01, 0xd3, 0xbc, 0xb0, - 0x01, 0xd4, 0xbd, 0xb0, 0x01, 0xd5, 0xbe, 0xb0, 0x01, 0xd6, 0xbf, 0xb0, - 0x01, 0xd7, 0xc0, 0xb0, 0x01, 0xd8, 0xc1, 0xb0, 0x41, 0xd1, 0xa9, 0xb0, - 0x01, 0xd2, 0xaa, 0xb0, 0x01, 0xd3, 0xab, 0xb0, 0x01, 0xd4, 0xac, 0xb0, - 0x01, 0xd5, 0xad, 0xb0, 0x01, 0xd6, 0xae, 0xb0, 0x01, 0xd7, 0xaf, 0xb0, - 0x41, 0xd1, 0xb3, 0xb0, 0x01, 0xd2, 0xb4, 0xb0, 0x01, 0xd3, 0xb5, 0xb0, - 0x01, 0xd4, 0xb6, 0xb0, 0x01, 0xd5, 0xb7, 0xb0, 0x01, 0xd6, 0xb8, 0xb0, - 0x01, 0xd7, 0xb9, 0xb0, 0x41, 0xd1, 0x9e, 0xb0, 0x81, 0x20, 0xd2, 0x9f, - 0xb0, 0x01, 0xd3, 0xa0, 0xb0, 0x01, 0xd4, 0xa1, 0xb0, 0x01, 0xd5, 0xa2, - 0xb0, 0x01, 0xd6, 0xa3, 0xb0, 0x01, 0xd7, 0xa4, 0xb0, 0x01, 0xd8, 0xa5, - 0xb0, 0x01, 0xd9, 0xa6, 0xb0, 0x41, 0xd0, 0xa7, 0xb0, 0x01, 0xd1, 0xa8, - 0xb0, 0x41, 0xd1, 0x01, 0xb0, 0x01, 0xd2, 0x0f, 0xb0, 0x01, 0xd3, 0x10, - 0xb0, 0x01, 0xd4, 0x11, 0xb0, 0x01, 0xd5, 0x12, 0xb0, 0x01, 0xd6, 0x13, - 0xb0, 0x41, 0xd1, 0x02, 0xb0, 0x01, 0xd2, 0x03, 0xb0, 0x01, 0xd3, 0x04, - 0xb0, 0x01, 0x42, 0x15, 0x02, 0x05, 0xb0, 0x41, 0x47, 0xf9, 0xce, 0x81, - 0xf6, 0x01, 0x57, 0xb4, 0x2e, 0xff, 0x2b, 0x00, 0xad, 0x01, 0xff, 0x47, - 0xea, 0x07, 0x88, 0x23, 0x00, 0x53, 0xfc, 0x47, 0xd1, 0x26, 0x40, 0x07, - 0x93, 0x22, 0x8a, 0x06, 0xac, 0xd0, 0x01, 0x05, 0xb9, 0x00, 0xb9, 0x01, - 0xb0, 0x06, 0x4c, 0x41, 0x95, 0xef, 0x05, 0x40, 0x05, 0x5d, 0x17, 0x2d, - 0x0b, 0x02, 0x16, 0x01, 0xff, 0x03, 0x8c, 0x09, 0x18, 0x45, 0x61, 0xe5, - 0xbe, 0x05, 0x00, 0x4b, 0x28, 0x9e, 0xc6, 0x05, 0x00, 0x45, 0x97, 0xe6, - 0xc0, 0x05, 0x00, 0x49, 0xd9, 0xbc, 0xc3, 0x05, 0x40, 0x43, 0x28, 0x59, - 0xf3, 0x05, 0x00, 0x46, 0xca, 0xdc, 0xf4, 0x05, 0x40, 0x4f, 0x4b, 0x6a, - 0xbc, 0x05, 0x00, 0xa8, 0x4f, 0x54, 0x9f, 0x42, 0x1e, 0xfb, 0x00, 0x45, - 0x7f, 0xe5, 0xbd, 0x05, 0x00, 0x45, 0x16, 0x89, 0xb7, 0x05, 0x00, 0xb1, - 0x28, 0x44, 0xf2, 0xee, 0xbf, 0x05, 0x00, 0xb3, 0x06, 0x45, 0x68, 0xe8, - 0xb5, 0x05, 0x40, 0x44, 0xa6, 0xe7, 0xb6, 0x05, 0x00, 0xa8, 0x06, 0x46, - 0xc9, 0x4c, 0xc2, 0x05, 0x40, 0x43, 0x5a, 0x45, 0xb0, 0x05, 0x00, 0x46, - 0xc9, 0x4c, 0xc1, 0x05, 0x40, 0x45, 0x53, 0xdc, 0xb8, 0x05, 0x80, 0x06, - 0x45, 0x95, 0xe8, 0xbb, 0x05, 0x40, 0x46, 0x62, 0xd5, 0xc7, 0x05, 0x40, - 0x05, 0x6a, 0xe1, 0x13, 0x44, 0xf5, 0xe3, 0xb4, 0x05, 0x00, 0x44, 0x04, - 0xe4, 0xb9, 0x05, 0xc0, 0x00, 0x4e, 0xe4, 0x73, 0xba, 0x05, 0x40, 0x45, - 0x16, 0x89, 0xb2, 0x05, 0x00, 0x46, 0x52, 0xdc, 0xb3, 0x05, 0x00, 0x45, - 0xa5, 0xe7, 0xb1, 0x05, 0x40, 0x49, 0x55, 0xb9, 0xc5, 0x05, 0x00, 0x4d, - 0xfa, 0x83, 0xaf, 0x05, 0x00, 0x49, 0xde, 0xbd, 0xc4, 0x05, 0x40, 0x06, - 0xc2, 0x05, 0x2c, 0x08, 0xfb, 0x1e, 0x01, 0xff, 0x4a, 0x59, 0xa5, 0x4f, - 0xfb, 0x00, 0x08, 0x2a, 0xca, 0x01, 0xff, 0x07, 0x3b, 0x01, 0x0c, 0x47, - 0x55, 0xd4, 0xf1, 0x05, 0x00, 0x4d, 0x0e, 0x89, 0x1f, 0xfb, 0x40, 0x43, - 0x2a, 0x0f, 0xf0, 0x05, 0x00, 0x43, 0x58, 0x51, 0xf2, 0x05, 0x40, 0xa1, - 0xcd, 0x03, 0x43, 0x71, 0x09, 0xd1, 0x05, 0x80, 0xb4, 0x03, 0x45, 0xda, - 0x48, 0xd3, 0x05, 0x80, 0xa6, 0x03, 0x06, 0x3d, 0x2c, 0xf5, 0x02, 0x45, - 0xa1, 0xa8, 0xd2, 0x05, 0x80, 0xe7, 0x02, 0x42, 0xb0, 0x01, 0xd4, 0x05, - 0x80, 0xd5, 0x02, 0x43, 0x5e, 0x50, 0xdb, 0x05, 0x80, 0xbc, 0x02, 0x45, - 0x5e, 0xa5, 0xdc, 0x05, 0x80, 0xae, 0x02, 0x43, 0x89, 0x05, 0xde, 0x05, - 0x80, 0xa0, 0x02, 0x43, 0x54, 0x22, 0xe0, 0x05, 0x80, 0x92, 0x02, 0x42, - 0x6f, 0x02, 0xe4, 0x05, 0x80, 0xf9, 0x01, 0x43, 0x44, 0xf1, 0xe7, 0x05, - 0x80, 0xeb, 0x01, 0x44, 0xfa, 0x64, 0xe8, 0x05, 0x80, 0xdd, 0x01, 0xb3, - 0x9a, 0x01, 0xb4, 0x71, 0x43, 0x2a, 0x0f, 0xd5, 0x05, 0x80, 0x59, 0x05, - 0x21, 0xe9, 0x25, 0x43, 0x58, 0x51, 0xd9, 0x05, 0x80, 0x0d, 0x45, 0x52, - 0x51, 0xd6, 0x05, 0xc0, 0x00, 0x4c, 0xc5, 0x89, 0x36, 0xfb, 0x40, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x46, 0x4b, 0x6a, 0x39, 0xfb, 0x00, 0x45, 0xf4, - 0xe3, 0x1d, 0xfb, 0x40, 0x44, 0x67, 0x00, 0x21, 0xfb, 0x00, 0x45, 0xda, - 0x48, 0x22, 0xfb, 0x00, 0x49, 0x8e, 0xb6, 0x26, 0xfb, 0x00, 0x42, 0xb0, - 0x01, 0x23, 0xfb, 0x00, 0x43, 0x5e, 0x50, 0x24, 0xfb, 0x00, 0x45, 0x5e, - 0xa5, 0x25, 0xfb, 0x00, 0x44, 0xfa, 0x64, 0x27, 0xfb, 0x00, 0x43, 0x96, - 0x29, 0x28, 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x4b, 0x6a, - 0x35, 0xfb, 0x00, 0x45, 0x03, 0xe4, 0x4b, 0xfb, 0x40, 0x42, 0x04, 0x08, - 0xea, 0x05, 0x80, 0x1a, 0x42, 0xc2, 0x05, 0xd8, 0x05, 0x80, 0x0d, 0x44, - 0x5f, 0xe8, 0xe6, 0x05, 0xc0, 0x00, 0x4c, 0xc5, 0x89, 0x46, 0xfb, 0x40, - 0x4c, 0xc5, 0x89, 0x38, 0xfb, 0x40, 0x4c, 0xc5, 0x89, 0x4a, 0xfb, 0x40, - 0x45, 0x38, 0xe1, 0xe1, 0x05, 0x80, 0x33, 0x43, 0x0e, 0x16, 0xe9, 0x05, - 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x4b, 0x6a, 0x49, 0xfb, - 0x80, 0x0f, 0xb3, 0x01, 0xff, 0x47, 0xc8, 0x4c, 0x2a, 0xfb, 0x00, 0x46, - 0xc9, 0x4c, 0x2b, 0xfb, 0x40, 0x06, 0x8a, 0x13, 0x01, 0xff, 0x47, 0xc8, - 0x4c, 0x2c, 0xfb, 0x00, 0x46, 0xc9, 0x4c, 0x2d, 0xfb, 0x40, 0x4c, 0xc5, - 0x89, 0x41, 0xfb, 0x40, 0x4c, 0xc5, 0x89, 0x48, 0xfb, 0x40, 0x4c, 0xc5, - 0x89, 0x47, 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x4b, 0x6a, - 0x44, 0xfb, 0x00, 0x44, 0xf2, 0xee, 0x4e, 0xfb, 0x40, 0x4c, 0xc5, 0x89, - 0x40, 0xfb, 0x40, 0x4c, 0xc5, 0x89, 0x3e, 0xfb, 0x40, 0x4c, 0xc5, 0x89, - 0x3c, 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x4b, 0x6a, 0x3b, - 0xfb, 0x00, 0x44, 0xf2, 0xee, 0x4d, 0xfb, 0x40, 0x4b, 0x2a, 0x96, 0x34, - 0xfb, 0x00, 0xf4, 0xd7, 0x05, 0x40, 0x4c, 0xc5, 0x89, 0x32, 0xfb, 0x40, - 0x43, 0x5e, 0x50, 0xda, 0x05, 0x80, 0x1f, 0x43, 0x89, 0x05, 0xdd, 0x05, - 0x00, 0x43, 0x54, 0x22, 0xdf, 0x05, 0x00, 0x42, 0x6f, 0x02, 0xe3, 0x05, - 0x80, 0x06, 0x45, 0x5e, 0xe8, 0xe5, 0x05, 0x40, 0x4c, 0xc5, 0x89, 0x43, - 0xfb, 0x40, 0x4c, 0xc5, 0x89, 0x3a, 0xfb, 0x40, 0x4c, 0xc5, 0x89, 0x33, - 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x4b, 0x6a, 0x31, 0xfb, - 0x00, 0x44, 0xf2, 0xee, 0x4c, 0xfb, 0x40, 0xac, 0x06, 0x43, 0xf7, 0x19, - 0xe2, 0x05, 0x40, 0x42, 0x69, 0x00, 0xd0, 0x05, 0x80, 0x11, 0x0a, 0x6d, - 0xaf, 0x01, 0xff, 0x44, 0xd5, 0x48, 0x20, 0xfb, 0x00, 0x49, 0x45, 0x70, - 0x29, 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x55, 0x6a, 0x30, - 0xfb, 0x00, 0x45, 0x16, 0x89, 0x2e, 0xfb, 0x00, 0x46, 0x52, 0xdc, 0x2f, - 0xfb, 0x40, 0x4c, 0xb5, 0x8a, 0xa2, 0x05, 0x00, 0xa4, 0xcb, 0x01, 0x47, - 0x19, 0xce, 0x91, 0x05, 0x00, 0x03, 0x8c, 0x09, 0xad, 0x01, 0x44, 0x4e, - 0xed, 0xac, 0x05, 0x00, 0xad, 0x8b, 0x01, 0x43, 0x6e, 0x15, 0xab, 0x05, - 0x00, 0x02, 0x6c, 0x09, 0x75, 0x02, 0xf4, 0x13, 0x65, 0x45, 0xb3, 0x4e, - 0x97, 0x05, 0x00, 0xb3, 0x51, 0xb4, 0x31, 0x02, 0x4d, 0x00, 0x21, 0xba, - 0x01, 0xff, 0xa1, 0x06, 0x44, 0x56, 0xed, 0xae, 0x05, 0x40, 0x04, 0xe6, - 0xee, 0x06, 0x43, 0xf3, 0x13, 0x98, 0x05, 0x40, 0x45, 0x6d, 0xe3, 0x95, - 0x05, 0x00, 0x45, 0x63, 0xd5, 0x94, 0x05, 0x40, 0x4c, 0x59, 0x92, 0xaa, - 0x05, 0x00, 0x43, 0xa6, 0x05, 0x9a, 0x05, 0x40, 0xa5, 0x06, 0x45, 0x71, - 0xe4, 0x96, 0x05, 0x40, 0x06, 0xc6, 0xda, 0x06, 0x43, 0x5b, 0x23, 0x9b, - 0x05, 0x40, 0x46, 0xfe, 0xd8, 0xa0, 0x05, 0x00, 0x46, 0x58, 0xdc, 0xa9, - 0x05, 0x40, 0x44, 0xa6, 0xe7, 0x92, 0x05, 0x00, 0x49, 0x0c, 0xb7, 0x93, - 0x05, 0x40, 0x43, 0x53, 0xb3, 0xa8, 0x05, 0x00, 0x49, 0x52, 0xbc, 0x9f, - 0x05, 0x40, 0x44, 0x4a, 0xef, 0x99, 0x05, 0x00, 0x43, 0xa1, 0x1d, 0xa1, - 0x05, 0x40, 0x47, 0xdb, 0xcb, 0xa4, 0x05, 0x00, 0x45, 0x0e, 0xe3, 0xa5, - 0x05, 0x80, 0x06, 0x44, 0xd9, 0xcb, 0xa3, 0x05, 0x40, 0x47, 0x7d, 0xca, - 0xa6, 0x05, 0x40, 0x43, 0x28, 0x59, 0x9c, 0x05, 0x80, 0x06, 0x46, 0xca, - 0xdc, 0x9e, 0x05, 0x40, 0x47, 0xa7, 0xca, 0x9d, 0x05, 0x40, 0x44, 0xa4, - 0x4a, 0xa7, 0x05, 0x00, 0x43, 0xef, 0x50, 0xad, 0x05, 0x40, 0xa4, 0xdb, - 0x06, 0xb2, 0xaa, 0x06, 0x03, 0x04, 0x15, 0x01, 0xff, 0xa1, 0xf6, 0x05, - 0xa2, 0xb9, 0x05, 0xa3, 0x83, 0x05, 0xa4, 0xca, 0x04, 0xa5, 0x8a, 0x04, - 0xa6, 0xf1, 0x03, 0x4b, 0x9f, 0x5f, 0x1a, 0x27, 0x00, 0xa8, 0xdc, 0x03, - 0x54, 0xb3, 0x15, 0x79, 0xf6, 0x01, 0xac, 0x81, 0x03, 0xad, 0xf2, 0x02, - 0x06, 0xb4, 0x01, 0xc1, 0x02, 0xaf, 0xac, 0x02, 0x49, 0x45, 0x70, 0x95, - 0x27, 0x00, 0xb2, 0xf1, 0x01, 0xb3, 0x81, 0x01, 0xb4, 0x4d, 0x02, 0x50, - 0x02, 0x32, 0x4c, 0x32, 0x00, 0x5a, 0x27, 0x00, 0xb7, 0x01, 0xff, 0x5c, - 0x1e, 0x17, 0xbd, 0x27, 0x00, 0x05, 0xae, 0x02, 0x06, 0x5b, 0x4f, 0x1b, - 0x94, 0x27, 0x40, 0x46, 0xe7, 0x02, 0x87, 0xf7, 0x01, 0x56, 0xf1, 0x32, - 0xdb, 0x26, 0x00, 0x46, 0xab, 0x05, 0x91, 0xf7, 0xc1, 0x00, 0x63, 0x20, - 0x0a, 0x05, 0xce, 0x41, 0x69, 0x9a, 0x02, 0xae, 0x27, 0x00, 0x11, 0xe9, - 0x0b, 0x01, 0xff, 0x55, 0xd5, 0x01, 0x19, 0xf8, 0x01, 0x5b, 0xa0, 0x1b, - 0x1d, 0xf8, 0x41, 0x09, 0xd4, 0x0c, 0x17, 0x5f, 0x69, 0x06, 0x9e, 0x27, - 0x00, 0x0e, 0x45, 0x2b, 0x01, 0xff, 0x4a, 0x53, 0x2b, 0xd3, 0xf7, 0x01, - 0x4d, 0xd9, 0x12, 0xd4, 0xf7, 0x41, 0x57, 0xce, 0x2d, 0xbb, 0x27, 0x00, - 0x06, 0xdd, 0x0c, 0x01, 0xff, 0x48, 0xed, 0x0c, 0x3d, 0x27, 0x00, 0x51, - 0xc1, 0x5b, 0x43, 0x27, 0x40, 0xa1, 0x5f, 0x5a, 0xf4, 0x1e, 0x71, 0xf6, - 0x01, 0xa9, 0x36, 0x05, 0x00, 0x20, 0x06, 0x46, 0x85, 0xb2, 0x48, 0x27, - 0x40, 0x05, 0x25, 0x23, 0x11, 0x0e, 0x3a, 0x55, 0x01, 0xff, 0x43, 0xa7, - 0xcd, 0x65, 0xf6, 0x01, 0x49, 0x89, 0xbe, 0x5d, 0xf6, 0x41, 0x45, 0xce, - 0x00, 0x98, 0x27, 0x00, 0x09, 0x9c, 0x01, 0x01, 0xff, 0x43, 0xa7, 0xcd, - 0x67, 0xf6, 0x01, 0x49, 0x89, 0xbe, 0x5f, 0xf6, 0x41, 0x05, 0x07, 0x06, - 0x11, 0x02, 0xad, 0x04, 0x01, 0xff, 0x52, 0x4b, 0x2b, 0xcc, 0xf7, 0x01, - 0x4f, 0x4e, 0x1c, 0xb8, 0xf7, 0x41, 0x5d, 0xe8, 0x04, 0x5c, 0x27, 0x00, - 0x64, 0xd8, 0x09, 0x5b, 0x27, 0x40, 0x45, 0xa8, 0x18, 0xac, 0xf7, 0x01, - 0x5d, 0xaa, 0x15, 0x7b, 0xf6, 0x41, 0x04, 0xc9, 0x00, 0x06, 0x5c, 0x6e, - 0x18, 0x9c, 0x27, 0x40, 0x10, 0x3d, 0x0b, 0x18, 0x4b, 0xb8, 0x02, 0x99, - 0x27, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x55, 0xd5, 0x01, 0x1a, - 0xf8, 0x01, 0x5b, 0xa0, 0x1b, 0x1e, 0xf8, 0x41, 0x50, 0x14, 0x09, 0x71, - 0x27, 0x00, 0x57, 0xee, 0x04, 0x6f, 0x27, 0x40, 0x50, 0x2a, 0x64, 0x1c, - 0x27, 0x00, 0x52, 0x04, 0x55, 0x2e, 0x27, 0x00, 0x54, 0x5b, 0x45, 0x56, - 0x2b, 0x40, 0x05, 0x25, 0x23, 0x11, 0x0e, 0x3a, 0x55, 0x01, 0xff, 0x43, - 0xa7, 0xcd, 0x64, 0xf6, 0x01, 0x49, 0x89, 0xbe, 0x5c, 0xf6, 0x41, 0x45, - 0xce, 0x00, 0x9a, 0x27, 0x00, 0x09, 0x9c, 0x01, 0x01, 0xff, 0x43, 0xa7, - 0xcd, 0x66, 0xf6, 0x01, 0x49, 0x89, 0xbe, 0x5e, 0xf6, 0x41, 0x49, 0x0c, - 0x6d, 0x96, 0x27, 0x00, 0x4f, 0xbb, 0x72, 0x16, 0x27, 0x40, 0xa1, 0x44, - 0x03, 0xc4, 0x00, 0x1f, 0x58, 0x75, 0x28, 0x73, 0xf6, 0x01, 0x02, 0xd1, - 0x00, 0x01, 0xff, 0x80, 0x06, 0x68, 0x9b, 0x02, 0xad, 0x27, 0x40, 0x64, - 0xe1, 0x04, 0x60, 0x27, 0x00, 0x64, 0x90, 0x09, 0x5f, 0x27, 0x40, 0x10, - 0x3d, 0x0b, 0x11, 0x11, 0xe9, 0x0b, 0x01, 0xff, 0x55, 0xd5, 0x01, 0x18, - 0xf8, 0x01, 0x5b, 0xa0, 0x1b, 0x1c, 0xf8, 0x41, 0x50, 0x14, 0x09, 0x70, - 0x27, 0x00, 0x57, 0xee, 0x04, 0x6e, 0x27, 0x40, 0x4a, 0xdd, 0xad, 0x55, - 0x2b, 0x00, 0x49, 0x25, 0x9c, 0x47, 0xf5, 0x41, 0x5e, 0x8c, 0x12, 0x63, - 0x27, 0x00, 0x4e, 0x77, 0x6c, 0x97, 0xfb, 0x41, 0x04, 0xa7, 0x05, 0x06, - 0x5b, 0x42, 0x1c, 0x24, 0x27, 0x40, 0x52, 0x4b, 0x2b, 0xca, 0xf7, 0x01, - 0x4f, 0x4e, 0x1c, 0xb2, 0xf7, 0x41, 0x05, 0xc9, 0x00, 0x17, 0x4a, 0xfa, - 0x12, 0xf0, 0xf7, 0x01, 0x10, 0xae, 0x00, 0x01, 0xff, 0x48, 0xfd, 0x04, - 0x62, 0x27, 0x00, 0x46, 0xeb, 0x07, 0x57, 0x27, 0x40, 0x08, 0x08, 0x08, - 0x0c, 0x4f, 0x4e, 0x1c, 0xbe, 0xf7, 0x01, 0x62, 0xd3, 0x0c, 0x4b, 0x27, - 0x40, 0x4a, 0x53, 0x2b, 0xcf, 0xf7, 0x01, 0x4d, 0xd9, 0x12, 0xd1, 0xf7, - 0x01, 0x56, 0xdd, 0x35, 0x38, 0x27, 0x40, 0x66, 0x62, 0x06, 0xa0, 0x27, - 0x00, 0x4c, 0xf3, 0x31, 0x97, 0x27, 0x00, 0xaf, 0x01, 0xff, 0x49, 0xdd, - 0x0d, 0xb2, 0xf4, 0x01, 0x05, 0x3d, 0x01, 0x11, 0x13, 0xe7, 0x0b, 0x01, - 0xff, 0x55, 0xd5, 0x01, 0x1b, 0xf8, 0x01, 0x5b, 0xa0, 0x1b, 0x1f, 0xf8, - 0x41, 0x5d, 0xe8, 0x04, 0x5e, 0x27, 0x00, 0x64, 0xd8, 0x09, 0x5d, 0x27, - 0x40, 0x02, 0xb0, 0x01, 0x23, 0x45, 0xe8, 0x02, 0x58, 0x2b, 0x80, 0x06, - 0x65, 0x01, 0x08, 0xa8, 0x27, 0x40, 0x06, 0x50, 0x00, 0x06, 0x49, 0x41, - 0xb5, 0x59, 0x2b, 0x40, 0x4d, 0xea, 0x7f, 0x57, 0x2b, 0x00, 0x59, 0xb9, - 0x25, 0xe3, 0x26, 0x40, 0x47, 0xd4, 0x07, 0x14, 0x27, 0x00, 0x4e, 0x30, - 0x7d, 0x46, 0x27, 0x40, 0x47, 0xe9, 0xcb, 0x18, 0x27, 0x00, 0x04, 0xe2, - 0x02, 0x01, 0xff, 0x80, 0x17, 0x0b, 0x9f, 0x19, 0x01, 0xff, 0x50, 0x1f, - 0x23, 0xb9, 0x27, 0x00, 0x50, 0xb3, 0x02, 0xb8, 0x27, 0x00, 0x50, 0x83, - 0x3f, 0xb7, 0x27, 0x40, 0x07, 0x6f, 0x40, 0x06, 0x45, 0x24, 0x21, 0x64, - 0x27, 0x40, 0x5e, 0x6e, 0x12, 0xa5, 0x27, 0x00, 0x5c, 0x32, 0x19, 0xa6, - 0x27, 0x40, 0x51, 0x2e, 0x3d, 0x74, 0xf6, 0x01, 0x11, 0xd5, 0x4e, 0x06, - 0x47, 0xee, 0x0c, 0x31, 0x27, 0x40, 0x43, 0xbf, 0x0a, 0x9c, 0xf8, 0x81, - 0x06, 0x4a, 0x03, 0xb0, 0x9d, 0xf8, 0x41, 0x80, 0x01, 0xff, 0x44, 0x22, - 0x00, 0x9e, 0xf8, 0x01, 0x45, 0x63, 0x73, 0x9f, 0xf8, 0x41, 0x4f, 0xa7, - 0x68, 0x49, 0xf6, 0x01, 0x02, 0xc6, 0x00, 0x01, 0xff, 0x4a, 0x65, 0x95, - 0x9f, 0xf4, 0x01, 0x45, 0x2c, 0x0e, 0xf6, 0xfa, 0x01, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x45, 0xce, 0x00, 0x98, 0xf4, 0x01, 0x46, 0x42, 0x84, 0x9d, - 0xf4, 0x01, 0x4f, 0x43, 0x72, 0x94, 0xf3, 0x41, 0x45, 0x4a, 0x3c, 0xa7, - 0xf3, 0x01, 0x45, 0x30, 0xb8, 0xa6, 0xfa, 0xc1, 0x00, 0x51, 0xb6, 0x55, - 0xfc, 0x26, 0x40, 0x43, 0x55, 0x27, 0xe1, 0x2b, 0x00, 0x02, 0x46, 0x00, - 0x9a, 0x24, 0x08, 0x22, 0xc5, 0xe1, 0x1e, 0xad, 0xad, 0x1e, 0xae, 0xd8, - 0x01, 0x5b, 0x78, 0x1c, 0x4b, 0xf6, 0x01, 0xb2, 0xc5, 0x01, 0xb4, 0x06, - 0x44, 0x41, 0xa7, 0x7b, 0xf7, 0x41, 0x4b, 0x0e, 0x98, 0x23, 0xf4, 0x01, - 0x04, 0x6b, 0xcf, 0x01, 0xff, 0x07, 0xc1, 0x05, 0x27, 0x07, 0x2f, 0x39, - 0x01, 0xff, 0x44, 0x31, 0x11, 0xfc, 0x08, 0x01, 0x43, 0xbf, 0x0a, 0xfb, - 0x08, 0x81, 0x0f, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xfd, 0x08, 0x01, - 0x45, 0xde, 0x2b, 0xfe, 0x08, 0x41, 0x48, 0x21, 0x11, 0xff, 0x08, 0x41, - 0xa1, 0x79, 0x44, 0x0a, 0xec, 0xe1, 0x08, 0x01, 0x4b, 0xa8, 0x98, 0xe3, - 0x08, 0x01, 0x45, 0xa1, 0xa8, 0xe2, 0x08, 0x01, 0x42, 0xb0, 0x01, 0xe4, - 0x08, 0x81, 0x5a, 0x44, 0x8e, 0xed, 0xea, 0x08, 0x01, 0x46, 0x9c, 0xda, - 0xeb, 0x08, 0x01, 0x43, 0x89, 0x05, 0xec, 0x08, 0x01, 0x43, 0x54, 0x22, - 0xed, 0x08, 0x01, 0x42, 0x6f, 0x02, 0xf0, 0x08, 0x01, 0x44, 0xae, 0xc5, - 0xf2, 0x08, 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, 0xc0, 0x88, 0xe5, 0x08, - 0x01, 0x44, 0x58, 0x51, 0xe9, 0x08, 0x01, 0x44, 0x06, 0xf0, 0xe6, 0x08, - 0x41, 0x42, 0x9a, 0x43, 0xf5, 0x08, 0x01, 0x43, 0x39, 0x25, 0xe8, 0x08, - 0x41, 0xa1, 0x06, 0x43, 0x0e, 0x16, 0xf4, 0x08, 0x41, 0x43, 0x89, 0xe7, - 0xf1, 0x08, 0x01, 0x44, 0x39, 0xe1, 0xee, 0x08, 0x41, 0x42, 0x53, 0x00, - 0xe7, 0x08, 0x41, 0x44, 0x48, 0x3c, 0xe0, 0x08, 0x01, 0x42, 0x61, 0x1c, - 0xef, 0x08, 0x41, 0x46, 0xea, 0xd7, 0xb4, 0xf5, 0x01, 0xf0, 0x89, 0xfa, - 0x41, 0xa4, 0xab, 0x1c, 0xa7, 0xce, 0x03, 0x0d, 0x5a, 0x82, 0x82, 0x01, - 0x05, 0xb8, 0xe8, 0x01, 0xff, 0x07, 0xc1, 0x05, 0x13, 0x4d, 0xf9, 0x86, - 0x34, 0x17, 0x00, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xe9, 0x32, 0x17, 0x00, - 0xf5, 0x33, 0x17, 0x40, 0xe1, 0x20, 0x17, 0x00, 0x42, 0x16, 0x00, 0x2a, - 0x17, 0x00, 0x42, 0xa1, 0x10, 0x27, 0x17, 0x00, 0x42, 0x24, 0x02, 0x24, - 0x17, 0x00, 0x42, 0x22, 0x00, 0x31, 0x17, 0x00, 0xe9, 0x21, 0x17, 0x00, - 0x42, 0x1b, 0x02, 0x23, 0x17, 0x00, 0x42, 0x74, 0x00, 0x2e, 0x17, 0x00, - 0x42, 0x6c, 0x00, 0x2b, 0x17, 0x00, 0xae, 0x28, 0x42, 0x6c, 0x09, 0x29, - 0x17, 0x00, 0x42, 0x71, 0x00, 0x2d, 0x17, 0x00, 0x42, 0x15, 0x06, 0x30, - 0x17, 0x00, 0x42, 0x12, 0x00, 0x26, 0x17, 0x00, 0xf5, 0x22, 0x17, 0x00, - 0x42, 0xa9, 0x01, 0x2f, 0x17, 0x00, 0x42, 0x34, 0x22, 0x2c, 0x17, 0x40, - 0xe1, 0x28, 0x17, 0x00, 0x42, 0x24, 0x02, 0x25, 0x17, 0x40, 0x06, 0xc4, - 0x06, 0x80, 0x02, 0x07, 0xc1, 0x05, 0x4a, 0x05, 0xb9, 0x00, 0x3a, 0x05, - 0x2f, 0x03, 0x19, 0x06, 0x6c, 0x38, 0x01, 0xff, 0xe1, 0x1d, 0x0d, 0x01, - 0xe5, 0x20, 0x0d, 0x01, 0xe9, 0x1e, 0x0d, 0x01, 0xef, 0x21, 0x0d, 0x01, - 0xf5, 0x1f, 0x0d, 0x41, 0x48, 0x12, 0xc4, 0x24, 0x0d, 0x01, 0x02, 0x12, - 0x00, 0x01, 0xff, 0x44, 0x71, 0x7b, 0x25, 0x0d, 0x01, 0x42, 0xff, 0x04, - 0x26, 0x0d, 0x01, 0x43, 0x5f, 0x08, 0x27, 0x0d, 0x41, 0x49, 0xc1, 0xb9, - 0x23, 0x0d, 0x01, 0x45, 0x8c, 0xe7, 0x22, 0x0d, 0x41, 0xe1, 0x00, 0x0d, - 0x01, 0x42, 0x16, 0x00, 0x01, 0x0d, 0x01, 0x42, 0x37, 0x00, 0x06, 0x0d, - 0x01, 0xa4, 0x95, 0x01, 0x42, 0xe1, 0x07, 0x09, 0x0d, 0x01, 0x42, 0x24, - 0x02, 0x12, 0x0d, 0x01, 0x42, 0x22, 0x00, 0x07, 0x0d, 0x01, 0x42, 0xbd, - 0x26, 0x05, 0x0d, 0x01, 0xab, 0x60, 0x42, 0x74, 0x00, 0x13, 0x0d, 0x01, - 0x42, 0x6c, 0x00, 0x14, 0x0d, 0x01, 0xae, 0x42, 0x42, 0x6c, 0x09, 0x02, - 0x0d, 0x01, 0xb2, 0x30, 0xb3, 0x24, 0xb4, 0x18, 0x42, 0xa6, 0x0a, 0x1c, - 0x0d, 0x01, 0x42, 0xa9, 0x01, 0x16, 0x0d, 0x01, 0x42, 0x34, 0x22, 0x18, - 0x0d, 0x01, 0x42, 0x59, 0x00, 0x0e, 0x0d, 0x41, 0xe1, 0x03, 0x0d, 0x01, - 0x42, 0x12, 0x00, 0x04, 0x0d, 0x41, 0xe1, 0x0f, 0x0d, 0x01, 0x42, 0x22, - 0x00, 0x10, 0x0d, 0x41, 0xe1, 0x0c, 0x0d, 0x01, 0x42, 0x71, 0x00, 0x0d, - 0x0d, 0x41, 0xe1, 0x15, 0x0d, 0x01, 0x42, 0x24, 0x02, 0x1a, 0x0d, 0x01, - 0x42, 0x34, 0x22, 0x1b, 0x0d, 0x41, 0xe1, 0x11, 0x0d, 0x01, 0x42, 0x22, - 0x00, 0x08, 0x0d, 0x01, 0x05, 0x67, 0xe4, 0x01, 0xff, 0x42, 0xa9, 0x01, - 0x17, 0x0d, 0x01, 0x42, 0x34, 0x22, 0x19, 0x0d, 0x41, 0xe1, 0x0a, 0x0d, - 0x01, 0x42, 0xa1, 0x10, 0x0b, 0x0d, 0x41, 0x45, 0xc3, 0x0a, 0x38, 0x0d, - 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x39, 0x0d, 0x01, 0x43, 0xbf, 0x0a, - 0x31, 0x0d, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x30, 0x0d, - 0x41, 0x44, 0x25, 0x01, 0x33, 0x0d, 0x01, 0x42, 0x15, 0x02, 0x32, 0x0d, - 0x41, 0x44, 0x27, 0x1d, 0x37, 0x0d, 0x01, 0x42, 0x60, 0x25, 0x36, 0x0d, - 0x41, 0x43, 0xa7, 0x05, 0x35, 0x0d, 0x01, 0x43, 0xcb, 0x06, 0x34, 0x0d, - 0x41, 0x03, 0x40, 0x54, 0x57, 0x0d, 0x28, 0x89, 0x01, 0xff, 0x45, 0xc3, - 0x0a, 0x28, 0x30, 0x00, 0xa6, 0x3e, 0x44, 0x46, 0x2a, 0x29, 0x30, 0x00, - 0x43, 0xbf, 0x0a, 0x21, 0x30, 0x00, 0xb3, 0x24, 0xb4, 0x01, 0xff, 0x42, - 0x92, 0x01, 0x38, 0x30, 0x00, 0xa8, 0x0d, 0xb7, 0x01, 0xff, 0x44, 0x29, - 0x1d, 0x39, 0x30, 0x00, 0xef, 0x22, 0x30, 0x40, 0x44, 0x2c, 0x11, 0x3a, - 0x30, 0x00, 0x43, 0x26, 0x01, 0x23, 0x30, 0x40, 0x44, 0x27, 0x1d, 0x27, - 0x30, 0x00, 0x42, 0x60, 0x25, 0x26, 0x30, 0x40, 0x43, 0xa7, 0x05, 0x25, - 0x30, 0x00, 0x43, 0xcb, 0x06, 0x24, 0x30, 0x40, 0x09, 0xe7, 0xb4, 0xf4, - 0x10, 0x54, 0xab, 0x40, 0x2f, 0x30, 0x00, 0x46, 0x11, 0x81, 0x64, 0x31, - 0x00, 0xaa, 0xef, 0x04, 0x07, 0xc1, 0x05, 0x0f, 0xb3, 0x01, 0xff, 0x53, - 0x2c, 0x49, 0x2e, 0x30, 0x00, 0x48, 0xaf, 0x17, 0x00, 0xd8, 0x40, 0xe1, - 0x4f, 0x31, 0x80, 0xc7, 0x04, 0xa3, 0xb8, 0x04, 0xe5, 0x54, 0x31, 0x80, - 0xaa, 0x04, 0x45, 0x35, 0xa3, 0x4e, 0x31, 0x00, 0xe9, 0x63, 0x31, 0x80, - 0x98, 0x04, 0xab, 0xe4, 0x03, 0x45, 0x8e, 0xe5, 0x41, 0x31, 0x80, 0xc5, - 0x03, 0x45, 0xfc, 0xe5, 0x34, 0x31, 0x80, 0x9c, 0x03, 0xef, 0x57, 0x31, - 0x80, 0x92, 0x03, 0xb0, 0xc8, 0x02, 0x45, 0x41, 0xe7, 0x39, 0x31, 0x80, - 0xef, 0x01, 0xb3, 0x8f, 0x01, 0xb4, 0x80, 0x01, 0xf5, 0x5c, 0x31, 0x00, - 0xb7, 0x64, 0xb9, 0x01, 0xff, 0xe1, 0x51, 0x31, 0x80, 0x58, 0xe5, 0x56, - 0x31, 0x80, 0x32, 0xe9, 0x62, 0x31, 0x00, 0xef, 0x5b, 0x31, 0x80, 0x17, - 0xf5, 0x60, 0x31, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xe9, 0x8c, 0x31, 0x00, - 0x42, 0x4d, 0x00, 0x8b, 0x31, 0xc0, 0x00, 0xef, 0x8a, 0x31, 0x40, 0x8d, - 0x01, 0xff, 0xe9, 0x89, 0x31, 0x00, 0x42, 0x34, 0x22, 0x87, 0x31, 0xc0, - 0x00, 0xe5, 0x88, 0x31, 0x40, 0xef, 0x55, 0x31, 0x80, 0x16, 0x46, 0x24, - 0xca, 0x81, 0x31, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x47, 0xae, 0xd1, 0x83, - 0x31, 0x00, 0x44, 0xf0, 0xbc, 0x82, 0x31, 0x40, 0x48, 0x32, 0xa3, 0x86, - 0x31, 0x40, 0xe5, 0x52, 0x31, 0x40, 0xe1, 0x58, 0x31, 0x80, 0x0d, 0xe5, - 0x5e, 0x31, 0x80, 0x04, 0xe9, 0x5f, 0x31, 0x40, 0xef, 0x5d, 0x31, 0x40, - 0xe5, 0x59, 0x31, 0x40, 0x46, 0x8b, 0xd3, 0x4c, 0x31, 0x00, 0x45, 0x20, - 0xcb, 0x37, 0x31, 0x40, 0x43, 0x16, 0x41, 0x45, 0x31, 0x80, 0x35, 0x04, - 0x74, 0x2c, 0x01, 0xff, 0x45, 0x37, 0xe2, 0x49, 0x31, 0x00, 0x45, 0x35, - 0xa3, 0x85, 0x31, 0x00, 0x45, 0x68, 0xc9, 0x80, 0x31, 0x00, 0x46, 0xb6, - 0xa0, 0x32, 0x31, 0x00, 0x45, 0xfc, 0xe5, 0x65, 0x31, 0x00, 0x45, 0x32, - 0x83, 0x43, 0x31, 0x00, 0x44, 0xf0, 0xbc, 0x46, 0x31, 0x00, 0x46, 0x1f, - 0xcb, 0x38, 0x31, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x37, 0xe2, 0x7e, 0x31, - 0x00, 0x46, 0xb6, 0xa0, 0x7a, 0x31, 0x00, 0x45, 0xfc, 0xe5, 0x7b, 0x31, - 0x00, 0x45, 0x32, 0x83, 0x7d, 0x31, 0x00, 0x46, 0x1f, 0xcb, 0x7c, 0x31, - 0x40, 0x8d, 0x01, 0xff, 0x45, 0x35, 0xa3, 0x40, 0x31, 0x00, 0x46, 0xb6, - 0xa0, 0x3a, 0x31, 0x80, 0x3b, 0x45, 0x8e, 0xe5, 0x3b, 0x31, 0x00, 0xb0, - 0x1a, 0x44, 0xf0, 0xbc, 0x3d, 0x31, 0x00, 0xb4, 0x06, 0x4b, 0x2f, 0xa3, - 0x6d, 0x31, 0x40, 0x46, 0x8b, 0xd3, 0x3e, 0x31, 0x00, 0x45, 0x20, 0xcb, - 0x6a, 0x31, 0x40, 0x46, 0xaf, 0xd1, 0x6c, 0x31, 0x00, 0x46, 0x4c, 0xc0, - 0x3f, 0x31, 0x00, 0x44, 0x33, 0x83, 0x3c, 0x31, 0xc0, 0x00, 0x45, 0xea, - 0xde, 0x6b, 0x31, 0x40, 0x45, 0xea, 0xde, 0x69, 0x31, 0x40, 0x46, 0xaf, - 0xd1, 0x7f, 0x31, 0x00, 0x46, 0x4c, 0xc0, 0x4d, 0x31, 0x00, 0x44, 0x33, - 0x83, 0x42, 0x31, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x45, 0x37, 0xe2, 0x76, - 0x31, 0x00, 0x46, 0xb6, 0xa0, 0x72, 0x31, 0x00, 0x44, 0xf0, 0xbc, 0x44, - 0x31, 0x80, 0x0f, 0xb4, 0x01, 0xff, 0x46, 0x8b, 0xd3, 0x77, 0x31, 0x00, - 0x45, 0x20, 0xcb, 0x73, 0x31, 0x40, 0x8d, 0x01, 0xff, 0x46, 0xb6, 0xa0, - 0x74, 0x31, 0x00, 0x46, 0x1f, 0xcb, 0x75, 0x31, 0x40, 0xe5, 0x5a, 0x31, - 0x40, 0x8d, 0x01, 0xff, 0x45, 0x37, 0xe2, 0x35, 0x31, 0x00, 0x45, 0x35, - 0xa3, 0x36, 0x31, 0x00, 0x47, 0xae, 0xd1, 0x68, 0x31, 0x00, 0x44, 0xf0, - 0xbc, 0x67, 0x31, 0x00, 0x46, 0x1f, 0xcb, 0x66, 0x31, 0x40, 0x8d, 0x01, - 0xff, 0xb0, 0x06, 0x44, 0xf0, 0xbc, 0x6f, 0x31, 0x40, 0x46, 0xaf, 0xd1, - 0x70, 0x31, 0x00, 0x44, 0x33, 0x83, 0x6e, 0x31, 0x40, 0x07, 0x2b, 0x83, - 0x13, 0x46, 0x44, 0xc0, 0x4b, 0x31, 0x00, 0x45, 0xb7, 0xa0, 0x31, 0x31, - 0xc0, 0x00, 0x45, 0xea, 0xde, 0x33, 0x31, 0x40, 0x45, 0x8e, 0xe5, 0x71, - 0x31, 0x00, 0xb0, 0x06, 0x4a, 0xf5, 0xae, 0x79, 0x31, 0x40, 0x46, 0x4c, - 0xc0, 0x84, 0x31, 0x00, 0x44, 0x33, 0x83, 0x78, 0x31, 0x40, 0x44, 0x69, - 0xc9, 0x47, 0x31, 0x40, 0xef, 0x53, 0x31, 0x00, 0xf5, 0x61, 0x31, 0x40, - 0x46, 0x17, 0xcd, 0x4a, 0x31, 0x00, 0x44, 0x18, 0xcd, 0x48, 0x31, 0x40, - 0xe5, 0x50, 0x31, 0x00, 0x44, 0xf1, 0xae, 0x8d, 0x31, 0xc0, 0x00, 0xe5, - 0x8e, 0x31, 0x40, 0x09, 0xd8, 0xba, 0xfb, 0x03, 0x09, 0xd5, 0xbd, 0x01, - 0xff, 0xe1, 0x61, 0x11, 0x80, 0xbd, 0x03, 0xe5, 0x66, 0x11, 0x80, 0x80, - 0x03, 0x46, 0x11, 0x81, 0x60, 0x11, 0x00, 0xe9, 0x75, 0x11, 0x80, 0xaa, - 0x02, 0xef, 0x69, 0x11, 0x80, 0xf1, 0x01, 0x4a, 0xeb, 0xae, 0xa2, 0x11, - 0x00, 0xf5, 0x6e, 0x11, 0x80, 0xbe, 0x01, 0xb7, 0xa5, 0x01, 0xb9, 0x01, - 0xff, 0xe1, 0x63, 0x11, 0x80, 0x88, 0x01, 0xe5, 0x68, 0x11, 0x80, 0x6d, - 0xe9, 0x74, 0x11, 0x80, 0x62, 0xef, 0x6d, 0x11, 0x80, 0x31, 0xf5, 0x72, - 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xe1, 0x8e, 0x11, 0x80, 0x20, 0xe5, - 0x90, 0x11, 0x80, 0x17, 0xe9, 0x94, 0x11, 0x00, 0xef, 0xb8, 0xd7, 0x00, - 0xf5, 0x93, 0x11, 0x00, 0x42, 0x4d, 0x00, 0x92, 0x11, 0xc0, 0x00, 0xef, - 0x91, 0x11, 0x40, 0xef, 0x8f, 0x11, 0x40, 0xe5, 0xb7, 0xd7, 0x40, 0x8d, - 0x01, 0xff, 0xe1, 0xb2, 0xd7, 0x80, 0x20, 0x42, 0xf1, 0x0a, 0xb4, 0xd7, - 0x00, 0xe9, 0x88, 0x11, 0x00, 0xef, 0x87, 0x11, 0x00, 0xb9, 0x01, 0xff, - 0xe1, 0x84, 0x11, 0x80, 0x06, 0x42, 0xf1, 0x0a, 0x86, 0x11, 0x40, 0xe5, - 0x85, 0x11, 0x40, 0xe5, 0xb3, 0xd7, 0x40, 0x42, 0x64, 0x08, 0x97, 0x11, - 0x40, 0xef, 0x67, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xef, 0x7d, 0x11, - 0x00, 0xf5, 0x7e, 0x11, 0x00, 0x42, 0x34, 0x22, 0xa5, 0x11, 0x40, 0x8d, - 0x04, 0xe5, 0x64, 0x11, 0x40, 0xef, 0x78, 0x11, 0x00, 0xf5, 0xa4, 0x11, - 0x00, 0x42, 0x60, 0x46, 0x79, 0x11, 0x40, 0xe1, 0x6a, 0x11, 0x80, 0x0d, - 0xe5, 0x70, 0x11, 0x80, 0x04, 0xe9, 0x71, 0x11, 0x40, 0xef, 0x6f, 0x11, - 0x40, 0xe5, 0x6b, 0x11, 0x40, 0x8d, 0x01, 0xff, 0xe1, 0x89, 0x11, 0x80, - 0x1b, 0x45, 0xff, 0xe2, 0x8b, 0x11, 0x00, 0x43, 0x02, 0xf1, 0xb6, 0xd7, - 0x00, 0xf5, 0x8d, 0x11, 0x00, 0x42, 0x4d, 0x00, 0x8c, 0x11, 0xc0, 0x00, - 0xef, 0xb5, 0xd7, 0x40, 0xe5, 0x8a, 0x11, 0x40, 0x8d, 0x04, 0xe5, 0x6c, - 0x11, 0x40, 0xe5, 0x80, 0x11, 0x80, 0x24, 0xef, 0x82, 0x11, 0x80, 0x19, - 0xf5, 0x83, 0x11, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0xa6, 0x11, 0x80, 0x09, - 0xe5, 0x81, 0x11, 0xc0, 0x00, 0xef, 0xb0, 0xd7, 0x40, 0xe5, 0xa7, 0x11, - 0x40, 0x42, 0xbd, 0x06, 0xb1, 0xd7, 0x40, 0xef, 0x7f, 0x11, 0x40, 0x8d, - 0x01, 0xff, 0xe1, 0x98, 0x11, 0x80, 0x3c, 0x42, 0x97, 0x02, 0x9c, 0x11, - 0x00, 0xe9, 0xc4, 0xd7, 0x00, 0xef, 0x9a, 0x11, 0x80, 0x27, 0xf5, 0x9b, - 0x11, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0x99, 0x11, 0x80, 0x11, 0xe5, 0xc0, - 0xd7, 0x80, 0x08, 0xef, 0xc2, 0xd7, 0x00, 0xf5, 0xc3, 0xd7, 0x40, 0xef, - 0xbf, 0xd7, 0x40, 0x42, 0xad, 0x20, 0xbd, 0xd7, 0x00, 0xe5, 0xbe, 0xd7, - 0x40, 0x42, 0xbd, 0x06, 0xc1, 0xd7, 0x40, 0x44, 0xf1, 0xae, 0x9d, 0x11, - 0x40, 0xef, 0x65, 0x11, 0x80, 0x21, 0xf5, 0x73, 0x11, 0xc0, 0x00, 0x8d, - 0x01, 0xff, 0xe1, 0xb9, 0xd7, 0x00, 0xe5, 0xbb, 0xd7, 0x80, 0x08, 0xef, - 0xbc, 0xd7, 0x00, 0xf5, 0x95, 0x11, 0x40, 0xef, 0xba, 0xd7, 0x00, 0xf5, - 0x96, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x42, 0x97, 0x02, 0x7c, 0x11, 0x00, - 0xef, 0x7a, 0x11, 0x00, 0xf5, 0x7b, 0x11, 0x40, 0x8d, 0x23, 0xe5, 0x62, - 0x11, 0x00, 0x44, 0xf1, 0xae, 0x9e, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, - 0xe1, 0xc5, 0xd7, 0x00, 0xe5, 0xc6, 0xd7, 0x80, 0x08, 0xe9, 0xa1, 0x11, - 0x00, 0xf5, 0xa0, 0x11, 0x40, 0xef, 0x9f, 0x11, 0x40, 0x42, 0x97, 0x02, - 0xa3, 0x11, 0x00, 0xef, 0x76, 0x11, 0x00, 0xf5, 0x77, 0x11, 0x40, 0xa3, - 0xd7, 0x07, 0x45, 0x35, 0xa3, 0xc2, 0x11, 0x80, 0xb4, 0x07, 0x45, 0x68, - 0xc9, 0xbc, 0x11, 0x80, 0x95, 0x07, 0xab, 0xb3, 0x06, 0x45, 0x8e, 0xe5, - 0xb7, 0x11, 0x80, 0xd3, 0x05, 0x45, 0xfc, 0xe5, 0xab, 0x11, 0x80, 0x8d, - 0x05, 0xb0, 0x8e, 0x04, 0x45, 0x41, 0xe7, 0xaf, 0x11, 0x80, 0xc0, 0x02, - 0xb3, 0x89, 0x01, 0xb4, 0x44, 0x02, 0x4d, 0x00, 0x01, 0xff, 0x49, 0x31, - 0xa3, 0xf9, 0x11, 0x00, 0x46, 0x24, 0xca, 0xf0, 0x11, 0xc0, 0x00, 0x8d, - 0x01, 0xff, 0x45, 0x35, 0xa3, 0xf6, 0xd7, 0x00, 0xab, 0x1b, 0x45, 0x8e, - 0xe5, 0xf5, 0xd7, 0x00, 0x47, 0xae, 0xd1, 0xf2, 0x11, 0x00, 0xb3, 0x01, - 0xff, 0x43, 0x16, 0x41, 0xf1, 0x11, 0x00, 0x4a, 0xb2, 0xa0, 0xed, 0x11, - 0x40, 0x46, 0x44, 0xc0, 0xef, 0x11, 0x00, 0x45, 0xb7, 0xa0, 0xec, 0x11, - 0x40, 0x46, 0x8b, 0xd3, 0xc0, 0x11, 0x00, 0x45, 0x20, 0xcb, 0xae, 0x11, - 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xa3, 0x25, 0x46, 0xb6, 0xa0, 0xca, 0x11, - 0x00, 0x45, 0x32, 0x83, 0xcf, 0xd7, 0x00, 0x45, 0x41, 0xe7, 0xcb, 0x11, - 0x00, 0x44, 0xf0, 0xbc, 0xd0, 0xd7, 0x80, 0x06, 0x47, 0x8a, 0xd3, 0xd4, - 0xd7, 0x40, 0x47, 0xfb, 0xca, 0xd1, 0xd7, 0x40, 0x46, 0x17, 0xcd, 0xd3, - 0xd7, 0x00, 0x44, 0x18, 0xcd, 0xd2, 0xd7, 0x40, 0x43, 0x16, 0x41, 0xba, - 0x11, 0x80, 0x5f, 0x04, 0x74, 0x2c, 0x01, 0xff, 0x45, 0x37, 0xe2, 0xf9, - 0xd7, 0x00, 0x45, 0x68, 0xc9, 0xee, 0x11, 0x00, 0x46, 0xb6, 0xa0, 0xa9, - 0x11, 0x00, 0x45, 0x8e, 0xe5, 0xe0, 0xd7, 0x00, 0x45, 0xfc, 0xe5, 0xff, - 0x11, 0x00, 0x45, 0x32, 0x83, 0xe6, 0xd7, 0x00, 0x45, 0x41, 0xe7, 0xd0, - 0x11, 0x80, 0x29, 0x44, 0xf0, 0xbc, 0xbb, 0x11, 0x80, 0x13, 0x46, 0x1f, - 0xcb, 0xcd, 0xd7, 0x80, 0x06, 0x48, 0x22, 0xca, 0xee, 0x11, 0x40, 0x46, - 0x86, 0xd5, 0xce, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0x46, 0xb6, 0xa0, 0xec, - 0xd7, 0x00, 0x46, 0x1f, 0xcb, 0xed, 0xd7, 0x40, 0x48, 0x42, 0xc0, 0xd7, - 0xd7, 0x40, 0x8d, 0x01, 0xff, 0xa3, 0x3d, 0x45, 0x35, 0xa3, 0xf2, 0xd7, - 0x00, 0xab, 0x29, 0x45, 0x8e, 0xe5, 0xea, 0xd7, 0x00, 0xb0, 0x15, 0x45, - 0x41, 0xe7, 0xe9, 0x11, 0x00, 0xb4, 0x01, 0xff, 0x46, 0x8b, 0xd3, 0xf1, - 0xd7, 0x00, 0x45, 0x20, 0xcb, 0xe8, 0x11, 0x40, 0x46, 0xaf, 0xd1, 0xee, - 0xd7, 0x00, 0x44, 0x33, 0x83, 0xea, 0x11, 0x40, 0x4c, 0x2b, 0x83, 0xeb, - 0xd7, 0x00, 0x45, 0xb7, 0xa0, 0xe7, 0x11, 0x40, 0x46, 0x17, 0xcd, 0xf0, - 0xd7, 0x00, 0x44, 0x18, 0xcd, 0xef, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0x45, - 0x35, 0xa3, 0xb6, 0x11, 0x00, 0xab, 0x98, 0x01, 0x45, 0x8e, 0xe5, 0xb1, - 0x11, 0x80, 0x7c, 0x45, 0xfc, 0xe5, 0xcd, 0x11, 0x00, 0xb0, 0x46, 0xb3, - 0x2d, 0xb4, 0x18, 0x02, 0x4d, 0x00, 0x01, 0xff, 0x49, 0x31, 0xa3, 0xd9, - 0x11, 0x80, 0x06, 0x46, 0x24, 0xca, 0xdb, 0xd7, 0x40, 0x46, 0x7a, 0xd5, - 0xdc, 0xd7, 0x40, 0x46, 0x8b, 0xd3, 0xb4, 0x11, 0x00, 0x45, 0x20, 0xcb, - 0xce, 0x11, 0xc0, 0x00, 0x46, 0x7a, 0xd5, 0xcf, 0x11, 0x40, 0x43, 0x16, - 0x41, 0xb3, 0x11, 0x00, 0x04, 0x74, 0x2c, 0x01, 0xff, 0x46, 0xb6, 0xa0, - 0xd5, 0xd7, 0x00, 0x44, 0xf0, 0xbc, 0xd6, 0x11, 0x40, 0x46, 0xaf, 0xd1, - 0xd7, 0x11, 0x00, 0x46, 0x4c, 0xc0, 0xb5, 0x11, 0x00, 0x44, 0x33, 0x83, - 0xb2, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x45, 0x35, 0xa3, 0xd4, 0x11, - 0x00, 0x47, 0x4b, 0xc0, 0xda, 0xd7, 0x00, 0x44, 0xf0, 0xbc, 0xd3, 0x11, - 0x00, 0x46, 0x1f, 0xcb, 0xd9, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x35, - 0xa3, 0xd8, 0xd7, 0x00, 0x46, 0xb6, 0xa0, 0xd1, 0x11, 0x00, 0x44, 0xf0, - 0xbc, 0xd2, 0x11, 0x40, 0x4c, 0x2b, 0x83, 0xd5, 0x11, 0x00, 0x46, 0x44, - 0xc0, 0xd8, 0x11, 0x00, 0x45, 0xb7, 0xa0, 0xb0, 0x11, 0xc0, 0x00, 0x8d, - 0x01, 0xff, 0x45, 0x35, 0xa3, 0xd6, 0xd7, 0x00, 0x44, 0xf0, 0xbc, 0xcc, - 0x11, 0x40, 0x46, 0xaf, 0xd1, 0xeb, 0x11, 0x80, 0x66, 0x46, 0x4c, 0xc0, - 0xc1, 0x11, 0x80, 0x4a, 0x44, 0x33, 0x83, 0xb8, 0x11, 0xc0, 0x00, 0x8d, - 0x01, 0xff, 0xa3, 0x32, 0x45, 0x35, 0xa3, 0xe5, 0x11, 0x00, 0x45, 0x8e, - 0xe5, 0xe5, 0xd7, 0x00, 0x47, 0x4b, 0xc0, 0xe4, 0x11, 0x00, 0x45, 0x41, - 0xe7, 0xe3, 0x11, 0x80, 0x13, 0x44, 0xf0, 0xbc, 0xb9, 0x11, 0x80, 0x06, - 0x46, 0x1f, 0xcb, 0xe3, 0xd7, 0x40, 0x47, 0x1e, 0xcb, 0xe7, 0xd7, 0x40, - 0x48, 0x4a, 0xc0, 0xe4, 0xd7, 0x40, 0x46, 0x17, 0xcd, 0xe9, 0xd7, 0x00, - 0x44, 0x18, 0xcd, 0xe8, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x32, 0x83, - 0xf3, 0x11, 0x00, 0x44, 0xf0, 0xbc, 0xfa, 0xd7, 0x00, 0x47, 0x8a, 0xd3, - 0xfb, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0x4d, 0x2a, 0x83, 0xf4, 0xd7, 0x00, - 0x45, 0x32, 0x83, 0xf3, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0xa3, 0x2d, 0x45, - 0x35, 0xa3, 0xad, 0x11, 0x00, 0x46, 0xb6, 0xa0, 0xc5, 0x11, 0x00, 0x47, - 0xae, 0xd1, 0xc8, 0x11, 0x00, 0x45, 0x41, 0xe7, 0xcb, 0xd7, 0x00, 0x44, - 0xf0, 0xbc, 0xc7, 0x11, 0x00, 0xb4, 0x01, 0xff, 0x46, 0x8b, 0xd3, 0xc9, - 0x11, 0x00, 0x45, 0x20, 0xcb, 0xc6, 0x11, 0x40, 0x46, 0x17, 0xcd, 0xcc, - 0xd7, 0x00, 0x44, 0x18, 0xcd, 0xac, 0x11, 0x40, 0x8d, 0x01, 0xff, 0xa3, - 0x47, 0x45, 0x35, 0xa3, 0xe1, 0x11, 0x00, 0x46, 0xb6, 0xa0, 0xda, 0x11, - 0x00, 0x45, 0xfc, 0xe5, 0xde, 0xd7, 0x00, 0xb0, 0x20, 0x45, 0x41, 0xe7, - 0xdb, 0x11, 0x00, 0xb3, 0x01, 0xff, 0x43, 0x16, 0x41, 0xdd, 0x11, 0x00, - 0x04, 0x74, 0x2c, 0x01, 0xff, 0x45, 0xfc, 0xe5, 0xdf, 0xd7, 0x00, 0x44, - 0xf0, 0xbc, 0xde, 0x11, 0x40, 0x46, 0xaf, 0xd1, 0xdf, 0x11, 0x00, 0x44, - 0x33, 0x83, 0xdc, 0x11, 0xc0, 0x00, 0x45, 0xea, 0xde, 0xe1, 0xd7, 0x40, - 0x46, 0x17, 0xcd, 0xe0, 0x11, 0x00, 0x44, 0x18, 0xcd, 0xe2, 0xd7, 0x40, - 0x07, 0x2b, 0x83, 0x41, 0x46, 0x44, 0xc0, 0xbf, 0x11, 0x00, 0x45, 0xb7, - 0xa0, 0xa8, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x47, 0x16, 0xcd, 0xfc, - 0x11, 0x00, 0x45, 0x35, 0xa3, 0xfe, 0x11, 0x00, 0x47, 0x43, 0xc0, 0xfd, - 0x11, 0x00, 0x45, 0xfc, 0xe5, 0xfa, 0x11, 0x00, 0x45, 0x32, 0x83, 0xfb, - 0x11, 0x00, 0x45, 0x41, 0xe7, 0xc3, 0x11, 0x00, 0x44, 0xf0, 0xbc, 0xaa, - 0x11, 0xc0, 0x00, 0x47, 0xfb, 0xca, 0xc4, 0x11, 0x40, 0x45, 0x8e, 0xe5, - 0xe2, 0x11, 0x00, 0xb0, 0x06, 0x45, 0x41, 0xe7, 0xdd, 0xd7, 0x40, 0x46, - 0x4c, 0xc0, 0xf4, 0x11, 0x00, 0x44, 0x33, 0x83, 0xe6, 0x11, 0x40, 0x8d, - 0x01, 0xff, 0xab, 0x06, 0x4b, 0xb1, 0xa0, 0xed, 0x11, 0x40, 0x46, 0x44, - 0xc0, 0xef, 0x11, 0x00, 0x45, 0xb7, 0xa0, 0xec, 0x11, 0x40, 0x8d, 0x01, - 0xff, 0x45, 0x8e, 0xe5, 0xf7, 0x11, 0x00, 0x45, 0xfc, 0xe5, 0xf5, 0x11, - 0x00, 0x45, 0x32, 0x83, 0xf8, 0x11, 0x00, 0x45, 0x41, 0xe7, 0xf6, 0x11, - 0x40, 0x46, 0x17, 0xcd, 0xbe, 0x11, 0x00, 0x44, 0x18, 0xcd, 0xbd, 0x11, - 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x45, 0x32, 0x83, 0xf7, 0xd7, 0x00, 0x4a, - 0xf5, 0xae, 0xf8, 0xd7, 0x40, 0xa3, 0x83, 0x06, 0x46, 0x11, 0x81, 0x5f, - 0x11, 0x00, 0x45, 0x35, 0xa3, 0x12, 0x11, 0x80, 0xef, 0x05, 0x45, 0x68, - 0xc9, 0x0b, 0x11, 0x80, 0x95, 0x05, 0xab, 0xdb, 0x04, 0x45, 0x8e, 0xe5, - 0x06, 0x11, 0x80, 0xb8, 0x04, 0x45, 0xfc, 0xe5, 0x02, 0x11, 0x80, 0x89, - 0x04, 0xb0, 0xf0, 0x02, 0x45, 0x41, 0xe7, 0x05, 0x11, 0x80, 0x8e, 0x02, - 0xb3, 0x47, 0xb4, 0x11, 0x02, 0x4d, 0x00, 0x01, 0xff, 0x49, 0x31, 0xa3, - 0x59, 0x11, 0x00, 0x46, 0x24, 0xca, 0x4c, 0x11, 0x40, 0x46, 0x8b, 0xd3, - 0x10, 0x11, 0x00, 0x45, 0x20, 0xcb, 0x03, 0x11, 0xc0, 0x00, 0x8d, 0x01, - 0xff, 0x45, 0x37, 0xe2, 0x63, 0xa9, 0x00, 0x46, 0xb6, 0xa0, 0x17, 0x11, - 0x00, 0x45, 0x8e, 0xe5, 0x60, 0xa9, 0x00, 0x45, 0x32, 0x83, 0x61, 0xa9, - 0x00, 0x45, 0x41, 0xe7, 0x5e, 0x11, 0x00, 0x44, 0xf0, 0xbc, 0x62, 0xa9, - 0x40, 0x43, 0x16, 0x41, 0x09, 0x11, 0x80, 0x57, 0x04, 0x74, 0x2c, 0x01, - 0xff, 0x45, 0x37, 0xe2, 0x0d, 0x11, 0x80, 0x45, 0x45, 0x35, 0xa3, 0x58, - 0x11, 0x00, 0x45, 0x68, 0xc9, 0x47, 0x11, 0x00, 0x46, 0xb6, 0xa0, 0x01, - 0x11, 0x00, 0x45, 0xfc, 0xe5, 0x14, 0x11, 0x00, 0x45, 0x32, 0x83, 0x08, - 0x11, 0x00, 0x45, 0x41, 0xe7, 0x19, 0x11, 0x00, 0x44, 0xf0, 0xbc, 0x0a, - 0x11, 0x80, 0x14, 0xb4, 0x06, 0x4b, 0x2f, 0xa3, 0x7c, 0xa9, 0x40, 0x46, - 0x8b, 0xd3, 0x79, 0xa9, 0x00, 0x45, 0x20, 0xcb, 0x04, 0x11, 0x40, 0x46, - 0x86, 0xd5, 0x75, 0xa9, 0x40, 0x46, 0x7a, 0xd5, 0x78, 0xa9, 0x40, 0x8d, - 0x01, 0xff, 0xa3, 0x56, 0x45, 0x35, 0xa3, 0x3b, 0x11, 0x00, 0x45, 0x68, - 0xc9, 0x35, 0x11, 0x00, 0xab, 0x3c, 0x45, 0x8e, 0xe5, 0x31, 0x11, 0x00, - 0x45, 0xfc, 0xe5, 0x2e, 0x11, 0x00, 0xb0, 0x1b, 0x45, 0x41, 0xe7, 0x30, - 0x11, 0x00, 0x49, 0xeb, 0xbc, 0x34, 0x11, 0x00, 0xb4, 0x01, 0xff, 0x46, - 0x8b, 0xd3, 0x39, 0x11, 0x00, 0x45, 0x20, 0xcb, 0x2f, 0x11, 0x40, 0x46, - 0x4c, 0xc0, 0x3a, 0x11, 0x00, 0x44, 0x33, 0x83, 0x32, 0x11, 0xc0, 0x00, - 0x47, 0xfb, 0xca, 0x33, 0x11, 0x40, 0x46, 0x44, 0xc0, 0x38, 0x11, 0x00, - 0x45, 0xb7, 0xa0, 0x2d, 0x11, 0x40, 0x46, 0x17, 0xcd, 0x37, 0x11, 0x00, - 0x44, 0x18, 0xcd, 0x36, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x37, 0xe2, - 0x6d, 0xa9, 0x00, 0x45, 0x35, 0xa3, 0x1a, 0x11, 0x00, 0xab, 0x37, 0x45, - 0x8e, 0xe5, 0x68, 0xa9, 0x00, 0x45, 0xfc, 0xe5, 0x18, 0x11, 0x00, 0x45, - 0x32, 0x83, 0x69, 0xa9, 0x00, 0xb3, 0x06, 0x46, 0x1f, 0xcb, 0x66, 0xa9, - 0x40, 0x43, 0x16, 0x41, 0x6c, 0xa9, 0x00, 0x04, 0x74, 0x2c, 0x01, 0xff, - 0x46, 0xb6, 0xa0, 0x65, 0xa9, 0x00, 0x45, 0x32, 0x83, 0x6a, 0xa9, 0x00, - 0x46, 0x1f, 0xcb, 0x67, 0xa9, 0x40, 0x4c, 0x2b, 0x83, 0x6b, 0xa9, 0x00, - 0x46, 0x44, 0xc0, 0x6e, 0xa9, 0x00, 0x45, 0xb7, 0xa0, 0x64, 0xa9, 0x40, - 0x46, 0xaf, 0xd1, 0x40, 0x11, 0x00, 0x46, 0x4c, 0xc0, 0x11, 0x11, 0x80, - 0x7a, 0x44, 0x33, 0x83, 0x07, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xa3, - 0x62, 0x45, 0x35, 0xa3, 0x74, 0xa9, 0x00, 0xab, 0x4e, 0x45, 0xfc, 0xe5, - 0x1f, 0x11, 0x00, 0x47, 0x4b, 0xc0, 0x2a, 0x11, 0x00, 0xb3, 0x0f, 0xb4, - 0x01, 0xff, 0x46, 0x8b, 0xd3, 0x29, 0x11, 0x00, 0x45, 0x20, 0xcb, 0x20, - 0x11, 0x40, 0x43, 0x16, 0x41, 0x21, 0x11, 0x80, 0x06, 0x48, 0xec, 0xbc, - 0x25, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x37, 0xe2, 0x26, 0x11, 0x00, - 0x46, 0xb6, 0xa0, 0x22, 0x11, 0x00, 0x45, 0x32, 0x83, 0x24, 0x11, 0x00, - 0xb4, 0x01, 0xff, 0x46, 0x8b, 0xd3, 0x72, 0xa9, 0x00, 0x45, 0x20, 0xcb, - 0x23, 0x11, 0x40, 0x46, 0x44, 0xc0, 0x73, 0xa9, 0x00, 0x45, 0xb7, 0xa0, - 0x1e, 0x11, 0x40, 0x46, 0x17, 0xcd, 0x28, 0x11, 0x00, 0x44, 0x18, 0xcd, - 0x27, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x35, 0xa3, 0x7a, 0xa9, 0x00, - 0x45, 0x32, 0x83, 0x56, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x37, 0xe2, - 0x5c, 0x11, 0x00, 0x45, 0x35, 0xa3, 0x5d, 0x11, 0x00, 0x46, 0xb6, 0xa0, - 0x13, 0x11, 0x00, 0x45, 0x32, 0x83, 0x16, 0x11, 0x00, 0x44, 0xf0, 0xbc, - 0x5b, 0x11, 0x00, 0x46, 0x1f, 0xcb, 0x15, 0x11, 0x40, 0x8d, 0x01, 0xff, - 0x46, 0xb6, 0xa0, 0x6f, 0xa9, 0x00, 0x45, 0x32, 0x83, 0x1c, 0x11, 0x00, - 0x44, 0xf0, 0xbc, 0x71, 0xa9, 0x00, 0x46, 0x1f, 0xcb, 0x70, 0xa9, 0x40, - 0x07, 0x2b, 0x83, 0x13, 0x46, 0x44, 0xc0, 0x0f, 0x11, 0x00, 0x45, 0xb7, - 0xa0, 0x00, 0x11, 0xc0, 0x00, 0x47, 0x1e, 0xcb, 0x5a, 0x11, 0x40, 0x45, - 0x8e, 0xe5, 0x1d, 0x11, 0x00, 0xb0, 0x0c, 0x45, 0x41, 0xe7, 0x1b, 0x11, - 0x00, 0x4a, 0xf5, 0xae, 0x2c, 0x11, 0x40, 0x46, 0x4c, 0xc0, 0x57, 0x11, - 0x00, 0x44, 0x33, 0x83, 0x2b, 0x11, 0x40, 0x8d, 0x01, 0xff, 0xa3, 0x41, - 0x45, 0x35, 0xa3, 0x77, 0xa9, 0x00, 0x46, 0xb6, 0xa0, 0x41, 0x11, 0x00, - 0x45, 0x8e, 0xe5, 0x43, 0x11, 0x00, 0xb0, 0x1b, 0x45, 0x41, 0xe7, 0x76, - 0xa9, 0x00, 0x44, 0xf0, 0xbc, 0x45, 0x11, 0x00, 0xb4, 0x01, 0xff, 0x46, - 0x8b, 0xd3, 0x4a, 0x11, 0x00, 0x45, 0x20, 0xcb, 0x42, 0x11, 0x40, 0x46, - 0xaf, 0xd1, 0x46, 0x11, 0x00, 0x46, 0x4c, 0xc0, 0x4b, 0x11, 0x00, 0x44, - 0x33, 0x83, 0x44, 0x11, 0x40, 0x46, 0x17, 0xcd, 0x49, 0x11, 0x00, 0x44, - 0x18, 0xcd, 0x48, 0x11, 0x40, 0x45, 0xea, 0xde, 0x7b, 0xa9, 0x40, 0x0a, - 0xcf, 0xa7, 0x54, 0x02, 0x49, 0x00, 0x0d, 0x44, 0x18, 0xcd, 0x0c, 0x11, - 0xc0, 0x00, 0x46, 0x80, 0xd5, 0x4d, 0x11, 0x40, 0x44, 0x19, 0xcd, 0x0e, - 0x11, 0x80, 0x2d, 0x05, 0x77, 0xe8, 0x01, 0xff, 0xa3, 0x1a, 0xb3, 0x01, - 0xff, 0x43, 0x16, 0x41, 0x3c, 0x11, 0x00, 0x04, 0x74, 0x2c, 0x01, 0xff, - 0x45, 0x37, 0xe2, 0x4f, 0x11, 0x00, 0x44, 0xf0, 0xbc, 0x3d, 0x11, 0x40, - 0x46, 0x17, 0xcd, 0x54, 0x11, 0x00, 0x44, 0x18, 0xcd, 0x4e, 0x11, 0x40, - 0x8d, 0x01, 0xff, 0x45, 0x35, 0xa3, 0x53, 0x11, 0x00, 0x47, 0x43, 0xc0, - 0x52, 0x11, 0x40, 0xa3, 0x1a, 0xb3, 0x01, 0xff, 0x43, 0x16, 0x41, 0x3e, - 0x11, 0x00, 0x04, 0x74, 0x2c, 0x01, 0xff, 0x45, 0x37, 0xe2, 0x51, 0x11, - 0x00, 0x44, 0xf0, 0xbc, 0x3f, 0x11, 0x40, 0x46, 0x17, 0xcd, 0x55, 0x11, - 0x00, 0x44, 0x18, 0xcd, 0x50, 0x11, 0x40, 0x0c, 0xd1, 0x89, 0x14, 0x02, - 0x16, 0x00, 0x06, 0x45, 0xcb, 0xca, 0x1d, 0xf9, 0x41, 0xe7, 0x5c, 0xf4, - 0x01, 0x42, 0x0f, 0x07, 0x3e, 0xf9, 0x41, 0x5a, 0x72, 0x1e, 0x1e, 0xf9, - 0x01, 0x58, 0x15, 0x28, 0xf0, 0xfa, 0x41, 0x46, 0x66, 0xd7, 0x54, 0xf3, - 0x01, 0x43, 0x2b, 0x37, 0x28, 0xf5, 0x81, 0x0d, 0xb3, 0x01, 0xff, 0xe1, - 0xac, 0xfa, 0x01, 0x48, 0xba, 0xc8, 0x39, 0xf4, 0x41, 0x05, 0x19, 0x00, - 0x01, 0xff, 0x44, 0x22, 0xdc, 0x92, 0x26, 0x00, 0x46, 0xd6, 0xdc, 0x2d, - 0x26, 0x00, 0x46, 0x4a, 0xde, 0xe0, 0xf6, 0x41, 0x4c, 0xf3, 0x10, 0xed, - 0xff, 0x00, 0x4f, 0xe5, 0x0b, 0xec, 0xff, 0x00, 0x54, 0x5f, 0x41, 0xe8, - 0xff, 0x00, 0x07, 0x9e, 0xce, 0xda, 0x02, 0x0c, 0xaa, 0x1f, 0xc9, 0x02, - 0x08, 0xda, 0xc4, 0x2c, 0x04, 0xc3, 0x00, 0x1c, 0x05, 0xc8, 0x00, 0x0c, - 0x4d, 0x1f, 0x20, 0xea, 0xff, 0x00, 0x4c, 0xe3, 0x10, 0xee, 0xff, 0x40, - 0x4f, 0xb7, 0x67, 0x63, 0xff, 0x00, 0x4b, 0xb8, 0x02, 0xeb, 0xff, 0x40, - 0x4f, 0xb7, 0x67, 0x62, 0xff, 0x00, 0x4b, 0xb8, 0x02, 0xe9, 0xff, 0x40, - 0x80, 0x06, 0x5e, 0xf6, 0x11, 0x70, 0xff, 0x40, 0x07, 0xc1, 0x05, 0x12, - 0x4a, 0xb1, 0x44, 0x65, 0xff, 0x00, 0x56, 0x4b, 0x36, 0x9f, 0xff, 0x00, - 0x51, 0x50, 0x36, 0x9e, 0xff, 0x40, 0xe1, 0x71, 0xff, 0x00, 0xe5, 0x74, - 0xff, 0x00, 0xa8, 0xdc, 0x01, 0xe9, 0x72, 0xff, 0x00, 0xab, 0xc1, 0x01, - 0xad, 0xaa, 0x01, 0xee, 0x9d, 0xff, 0x80, 0x90, 0x01, 0xef, 0x75, 0xff, - 0x00, 0xb2, 0x76, 0xb3, 0x33, 0xb4, 0x1d, 0xf5, 0x73, 0xff, 0x00, 0xb7, - 0x0f, 0xb9, 0x01, 0xff, 0xe1, 0x94, 0xff, 0x00, 0xef, 0x96, 0xff, 0x00, - 0xf5, 0x95, 0xff, 0x40, 0xe1, 0x9c, 0xff, 0x00, 0xef, 0x66, 0xff, 0x40, - 0xe1, 0x80, 0xff, 0x00, 0xe5, 0x83, 0xff, 0x00, 0xe9, 0x81, 0xff, 0x00, - 0xef, 0x84, 0xff, 0x00, 0xf5, 0x82, 0xff, 0x40, 0xe1, 0x7b, 0xff, 0x00, - 0xe5, 0x7e, 0xff, 0x00, 0xe9, 0x7c, 0xff, 0x00, 0x05, 0x0d, 0x07, 0x08, - 0xef, 0x7f, 0xff, 0x00, 0xf5, 0x7d, 0xff, 0x40, 0xe1, 0x67, 0xff, 0x00, - 0xe5, 0x6a, 0xff, 0x00, 0xe9, 0x68, 0xff, 0x00, 0xef, 0x6b, 0xff, 0x00, - 0x42, 0x5c, 0x01, 0x6f, 0xff, 0x00, 0xf5, 0x69, 0xff, 0x00, 0xb9, 0x01, - 0xff, 0xe1, 0x6c, 0xff, 0x00, 0xef, 0x6e, 0xff, 0x00, 0xf5, 0x6d, 0xff, - 0x40, 0xe1, 0x97, 0xff, 0x00, 0xe5, 0x9a, 0xff, 0x00, 0xe9, 0x98, 0xff, - 0x00, 0xef, 0x9b, 0xff, 0x00, 0xf5, 0x99, 0xff, 0x40, 0xe1, 0x85, 0xff, - 0x00, 0xe5, 0x88, 0xff, 0x00, 0xe9, 0x86, 0xff, 0x00, 0xef, 0x89, 0xff, - 0x00, 0xf5, 0x87, 0xff, 0x40, 0xe1, 0x8f, 0xff, 0x00, 0xe5, 0x92, 0xff, - 0x00, 0xe9, 0x90, 0xff, 0x00, 0xef, 0x93, 0xff, 0x00, 0xf5, 0x91, 0xff, - 0x40, 0xe1, 0x76, 0xff, 0x00, 0xe5, 0x79, 0xff, 0x00, 0xe9, 0x77, 0xff, - 0x00, 0xef, 0x7a, 0xff, 0x00, 0xf5, 0x78, 0xff, 0x40, 0xe1, 0x8a, 0xff, - 0x00, 0xe5, 0x8d, 0xff, 0x00, 0xe9, 0x8b, 0xff, 0x00, 0xef, 0x8e, 0xff, - 0x00, 0xf5, 0x8c, 0xff, 0x40, 0x45, 0xe8, 0x04, 0x64, 0xff, 0x00, 0x49, - 0x15, 0x16, 0x61, 0xff, 0x40, 0x46, 0x11, 0x81, 0xa0, 0xff, 0x00, 0x07, - 0xc1, 0x05, 0x01, 0xff, 0xe1, 0xc2, 0xff, 0x80, 0xae, 0x02, 0xa3, 0x9f, - 0x02, 0xe5, 0xc7, 0xff, 0x80, 0x91, 0x02, 0x45, 0x35, 0xa3, 0xbe, 0xff, - 0x00, 0xe9, 0xdc, 0xff, 0x80, 0xff, 0x01, 0xab, 0xe9, 0x01, 0x45, 0x8e, - 0xe5, 0xb1, 0xff, 0x00, 0x45, 0xfc, 0xe5, 0xa4, 0xff, 0x80, 0xcc, 0x01, - 0xef, 0xcc, 0xff, 0x80, 0xc2, 0x01, 0xb0, 0xac, 0x01, 0x45, 0x41, 0xe7, - 0xa9, 0xff, 0x80, 0x76, 0xb3, 0x4b, 0xb4, 0x3d, 0xf5, 0xd3, 0xff, 0x00, - 0xb7, 0x21, 0xb9, 0x01, 0xff, 0xe1, 0xc4, 0xff, 0x80, 0x15, 0xe5, 0xcb, - 0xff, 0x80, 0x0c, 0xe9, 0xdb, 0xff, 0x00, 0xef, 0xd2, 0xff, 0x00, 0xf5, - 0xd7, 0xff, 0x40, 0xef, 0xca, 0xff, 0x40, 0xe5, 0xc5, 0xff, 0x40, 0xe1, - 0xcd, 0xff, 0x80, 0x0d, 0xe5, 0xd5, 0xff, 0x80, 0x04, 0xe9, 0xd6, 0xff, - 0x40, 0xef, 0xd4, 0xff, 0x40, 0xe5, 0xce, 0xff, 0x40, 0x46, 0x8b, 0xd3, - 0xbc, 0xff, 0x00, 0x45, 0x20, 0xcb, 0xa7, 0xff, 0x40, 0x43, 0x16, 0x41, - 0xb5, 0xff, 0x00, 0x04, 0x74, 0x2c, 0x01, 0xff, 0x45, 0x37, 0xe2, 0xb9, - 0xff, 0x00, 0x46, 0xb6, 0xa0, 0xa2, 0xff, 0x00, 0x45, 0x32, 0x83, 0xb3, - 0xff, 0x00, 0x44, 0xf0, 0xbc, 0xb6, 0xff, 0x00, 0x46, 0x1f, 0xcb, 0xa8, - 0xff, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x35, 0xa3, 0xb0, 0xff, 0x00, 0x46, - 0xb6, 0xa0, 0xaa, 0xff, 0x00, 0x45, 0x8e, 0xe5, 0xab, 0xff, 0x00, 0xb0, - 0x0c, 0x44, 0xf0, 0xbc, 0xad, 0xff, 0x00, 0x47, 0x8a, 0xd3, 0xae, 0xff, - 0x40, 0x46, 0x4c, 0xc0, 0xaf, 0xff, 0x00, 0x44, 0x33, 0x83, 0xac, 0xff, - 0x40, 0x46, 0x4c, 0xc0, 0xbd, 0xff, 0x00, 0x44, 0x33, 0x83, 0xb2, 0xff, - 0xc0, 0x00, 0x45, 0xea, 0xde, 0xb4, 0xff, 0x40, 0xe5, 0xcf, 0xff, 0x40, - 0x8d, 0x01, 0xff, 0x45, 0x37, 0xe2, 0xa5, 0xff, 0x00, 0x45, 0x35, 0xa3, - 0xa6, 0xff, 0x40, 0x46, 0x44, 0xc0, 0xbb, 0xff, 0x00, 0x45, 0xb7, 0xa0, - 0xa1, 0xff, 0xc0, 0x00, 0x45, 0xea, 0xde, 0xa3, 0xff, 0x40, 0x44, 0x69, - 0xc9, 0xb7, 0xff, 0x40, 0xef, 0xc6, 0xff, 0x00, 0xf5, 0xda, 0xff, 0x40, - 0x46, 0x17, 0xcd, 0xba, 0xff, 0x00, 0x44, 0x18, 0xcd, 0xb8, 0xff, 0x40, - 0xe5, 0xc3, 0xff, 0x40, 0x80, 0x06, 0x43, 0x2a, 0x27, 0x87, 0xf4, 0x41, - 0x44, 0x22, 0xdc, 0xae, 0xfa, 0x01, 0x45, 0x87, 0x4b, 0x0a, 0x20, 0x40, - 0xa1, 0xd6, 0x42, 0xa5, 0xfa, 0x38, 0x44, 0x5f, 0x7b, 0x7b, 0xf4, 0x01, - 0xa9, 0xd1, 0x38, 0xac, 0x9b, 0x33, 0xaf, 0xb6, 0x31, 0xb2, 0xd7, 0x0e, - 0xb5, 0x01, 0xff, 0x02, 0x17, 0x00, 0xc3, 0x0e, 0xa9, 0xb4, 0x0e, 0x07, - 0x54, 0xcf, 0xf9, 0x09, 0x0c, 0xfd, 0x90, 0xef, 0x06, 0xb2, 0x01, 0xff, - 0x06, 0x1a, 0xdb, 0xf4, 0x02, 0x0a, 0x5d, 0xb0, 0x01, 0xff, 0x16, 0x6d, - 0x32, 0xd2, 0x02, 0x06, 0xc4, 0x06, 0x8b, 0x02, 0x07, 0xc1, 0x05, 0x52, - 0x05, 0x2f, 0x03, 0x42, 0x06, 0x6c, 0x38, 0x01, 0xff, 0x4b, 0x72, 0x38, - 0x29, 0x61, 0x01, 0x05, 0x2f, 0x03, 0x01, 0xff, 0xa1, 0x24, 0xe5, 0x23, - 0x61, 0x81, 0x1b, 0xe9, 0x1f, 0x61, 0x81, 0x12, 0xef, 0x26, 0x61, 0x81, - 0x09, 0xf5, 0x21, 0x61, 0xc1, 0x00, 0xf5, 0x22, 0x61, 0x41, 0xef, 0x27, - 0x61, 0x41, 0xe9, 0x20, 0x61, 0x41, 0xe5, 0x24, 0x61, 0x41, 0xe1, 0x1e, - 0x61, 0x01, 0xe9, 0x25, 0x61, 0x01, 0xf5, 0x28, 0x61, 0x41, 0x48, 0xd0, - 0x15, 0x2d, 0x61, 0x01, 0x48, 0xca, 0xc8, 0x2f, 0x61, 0x41, 0xe1, 0x00, - 0x61, 0x01, 0xa2, 0xa4, 0x01, 0xa3, 0x97, 0x01, 0xa4, 0x7f, 0xa7, 0x73, - 0x42, 0x22, 0x00, 0x0a, 0x61, 0x01, 0xaa, 0x61, 0xab, 0x55, 0x42, 0x74, - 0x00, 0x1c, 0x61, 0x01, 0x42, 0x6c, 0x00, 0x19, 0x61, 0x01, 0xae, 0x3d, - 0xb0, 0x31, 0x42, 0x71, 0x00, 0x1b, 0x61, 0x01, 0x42, 0x15, 0x06, 0x1d, - 0x61, 0x01, 0xb4, 0x0c, 0x42, 0xa6, 0x0a, 0x0f, 0x61, 0x01, 0x42, 0x34, - 0x22, 0x1a, 0x61, 0x41, 0xe1, 0x10, 0x61, 0x01, 0x42, 0x22, 0x00, 0x11, - 0x61, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x0b, 0x61, 0x01, 0x42, 0x22, 0x00, - 0x0c, 0x61, 0x41, 0xe1, 0x15, 0x61, 0x01, 0x42, 0x22, 0x00, 0x16, 0x61, - 0x41, 0xe1, 0x14, 0x61, 0x01, 0x42, 0x24, 0x02, 0x05, 0x61, 0x41, 0xe1, - 0x01, 0x61, 0x01, 0x42, 0x22, 0x00, 0x02, 0x61, 0x41, 0xe1, 0x08, 0x61, - 0x01, 0x42, 0x22, 0x00, 0x09, 0x61, 0x41, 0xe1, 0x03, 0x61, 0x01, 0x42, - 0x22, 0x00, 0x04, 0x61, 0x41, 0xe1, 0x12, 0x61, 0x01, 0xa4, 0x06, 0x42, - 0x22, 0x00, 0x13, 0x61, 0x41, 0xe1, 0x0d, 0x61, 0x01, 0x42, 0x22, 0x00, - 0x0e, 0x61, 0x41, 0xe1, 0x06, 0x61, 0x01, 0x42, 0x22, 0x00, 0x07, 0x61, - 0x41, 0xe1, 0x17, 0x61, 0x01, 0x42, 0x22, 0x00, 0x18, 0x61, 0x41, 0x45, - 0xc3, 0x0a, 0x38, 0x61, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x39, 0x61, - 0x01, 0x43, 0xbf, 0x0a, 0x31, 0x61, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, - 0xa1, 0x1d, 0x30, 0x61, 0x41, 0x44, 0x25, 0x01, 0x33, 0x61, 0x01, 0x42, - 0x15, 0x02, 0x32, 0x61, 0x41, 0x44, 0x27, 0x1d, 0x37, 0x61, 0x01, 0x42, - 0x60, 0x25, 0x36, 0x61, 0x41, 0x43, 0xa7, 0x05, 0x35, 0x61, 0x01, 0x43, - 0xcb, 0x06, 0x34, 0x61, 0x41, 0x42, 0x22, 0x00, 0x2c, 0x61, 0x01, 0x42, - 0x71, 0x00, 0x2e, 0x61, 0x01, 0x42, 0xa6, 0x0a, 0x2b, 0x61, 0x01, 0x42, - 0x34, 0x22, 0x2a, 0x61, 0x41, 0xa1, 0xe4, 0x03, 0x06, 0xc4, 0x06, 0x9d, - 0x03, 0x48, 0xfa, 0xc2, 0x74, 0x0a, 0x00, 0x43, 0x95, 0x0a, 0x72, 0x0a, - 0x00, 0x07, 0xc1, 0x05, 0x6f, 0x05, 0x2f, 0x03, 0x3d, 0x45, 0x27, 0xe8, - 0x70, 0x0a, 0x00, 0x43, 0x70, 0x00, 0x73, 0x0a, 0x00, 0x0b, 0xd1, 0x75, - 0x01, 0xff, 0xa1, 0x1e, 0x42, 0x27, 0x01, 0x47, 0x0a, 0x00, 0xe9, 0x3f, - 0x0a, 0x80, 0x0f, 0x42, 0x69, 0x05, 0x4b, 0x0a, 0x00, 0xf5, 0x41, 0x0a, - 0xc0, 0x00, 0xf5, 0x42, 0x0a, 0x40, 0xe9, 0x40, 0x0a, 0x40, 0xe1, 0x3e, - 0x0a, 0x00, 0xe9, 0x48, 0x0a, 0x00, 0xf5, 0x4c, 0x0a, 0x40, 0x4a, 0x27, - 0xa5, 0x01, 0x0a, 0x00, 0x45, 0xb5, 0x69, 0x02, 0x0a, 0x00, 0x45, 0x5a, - 0x3e, 0x3c, 0x0a, 0x00, 0x45, 0x9a, 0xe8, 0x51, 0x0a, 0x00, 0x02, 0x02, - 0x00, 0x06, 0x46, 0x62, 0xde, 0x75, 0x0a, 0x40, 0x44, 0x5d, 0x23, 0x4d, - 0x0a, 0x00, 0x45, 0xa3, 0x4a, 0x03, 0x0a, 0x40, 0xe1, 0x05, 0x0a, 0x80, - 0x8c, 0x02, 0xa2, 0xff, 0x01, 0xa3, 0xf2, 0x01, 0xa4, 0xd9, 0x01, 0x42, - 0x27, 0x01, 0x0f, 0x0a, 0x00, 0x42, 0xe1, 0x07, 0x5e, 0x0a, 0x00, 0xa7, - 0xb9, 0x01, 0x42, 0x22, 0x00, 0x39, 0x0a, 0x00, 0xe9, 0x07, 0x0a, 0x80, - 0xa9, 0x01, 0xaa, 0x9c, 0x01, 0xab, 0x88, 0x01, 0xac, 0x7c, 0x42, 0x6c, - 0x00, 0x2e, 0x0a, 0x00, 0xae, 0x5e, 0x42, 0x69, 0x05, 0x13, 0x0a, 0x00, - 0xb0, 0x4c, 0xb2, 0x40, 0xb3, 0x34, 0xb4, 0x1b, 0xf5, 0x09, 0x0a, 0x80, - 0x12, 0x42, 0xa6, 0x0a, 0x35, 0x0a, 0x00, 0x42, 0x34, 0x22, 0x2f, 0x0a, - 0x00, 0x42, 0x59, 0x00, 0x5b, 0x0a, 0x40, 0xf5, 0x0a, 0x0a, 0x40, 0xe1, - 0x24, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x25, 0x0a, 0x00, 0xb4, 0x01, 0xff, - 0xe1, 0x1f, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x20, 0x0a, 0x40, 0xe1, 0x38, - 0x0a, 0x00, 0x42, 0x22, 0x00, 0x36, 0x0a, 0x40, 0xe1, 0x30, 0x0a, 0x00, - 0x42, 0x71, 0x00, 0x5c, 0x0a, 0x40, 0xe1, 0x2a, 0x0a, 0x00, 0x42, 0x22, - 0x00, 0x2b, 0x0a, 0x40, 0xe1, 0x28, 0x0a, 0x00, 0x42, 0x24, 0x02, 0x19, - 0x0a, 0x00, 0x42, 0xff, 0x04, 0x23, 0x0a, 0x00, 0x42, 0x34, 0x22, 0x1e, - 0x0a, 0x40, 0xe1, 0x32, 0x0a, 0x00, 0x42, 0x74, 0x00, 0x33, 0x0a, 0x40, - 0xe1, 0x15, 0x0a, 0x00, 0xa8, 0x01, 0xff, 0xe1, 0x16, 0x0a, 0x00, 0x42, - 0x22, 0x00, 0x59, 0x0a, 0x40, 0xe1, 0x1c, 0x0a, 0x00, 0x42, 0x22, 0x00, - 0x1d, 0x0a, 0x40, 0xe9, 0x08, 0x0a, 0x40, 0xe1, 0x17, 0x0a, 0x00, 0xa8, - 0x01, 0xff, 0xe1, 0x18, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x5a, 0x0a, 0x40, - 0xe1, 0x26, 0x0a, 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x27, 0x0a, 0x40, - 0xe1, 0x21, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x22, 0x0a, 0x40, 0xe1, 0x1a, - 0x0a, 0x00, 0x42, 0x22, 0x00, 0x1b, 0x0a, 0x40, 0xe1, 0x2c, 0x0a, 0x00, - 0x42, 0x22, 0x00, 0x2d, 0x0a, 0x40, 0xe1, 0x06, 0x0a, 0x00, 0xe9, 0x10, - 0x0a, 0x00, 0xf5, 0x14, 0x0a, 0x40, 0x45, 0xc3, 0x0a, 0x6e, 0x0a, 0x00, - 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x6f, 0x0a, 0x00, 0x43, 0xbf, 0x0a, 0x67, - 0x0a, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x66, 0x0a, 0x40, - 0x44, 0x25, 0x01, 0x69, 0x0a, 0x00, 0x42, 0x15, 0x02, 0x68, 0x0a, 0x40, - 0x44, 0x27, 0x1d, 0x6d, 0x0a, 0x00, 0x42, 0x60, 0x25, 0x6c, 0x0a, 0x40, - 0x43, 0xa7, 0x05, 0x6b, 0x0a, 0x00, 0x43, 0xcb, 0x06, 0x6a, 0x0a, 0x40, - 0x50, 0x94, 0x56, 0x76, 0x0a, 0x00, 0x44, 0x46, 0xec, 0x71, 0x0a, 0x40, - 0x06, 0xc4, 0x06, 0xbe, 0x02, 0x07, 0xc1, 0x05, 0x50, 0x42, 0xe9, 0x04, - 0x98, 0x1d, 0x01, 0x05, 0x2f, 0x03, 0x3a, 0xb6, 0x01, 0xff, 0x45, 0x5c, - 0x23, 0x97, 0x1d, 0x01, 0x0a, 0xd2, 0x75, 0x01, 0xff, 0xa1, 0x1e, 0x42, - 0x27, 0x01, 0x90, 0x1d, 0x01, 0xe9, 0x8b, 0x1d, 0x81, 0x0f, 0x42, 0x69, - 0x05, 0x93, 0x1d, 0x01, 0xf5, 0x8d, 0x1d, 0xc1, 0x00, 0xf5, 0x8e, 0x1d, - 0x41, 0xe9, 0x8c, 0x1d, 0x41, 0xe1, 0x8a, 0x1d, 0x01, 0xe9, 0x91, 0x1d, - 0x01, 0xf5, 0x94, 0x1d, 0x41, 0x48, 0xd0, 0x15, 0x95, 0x1d, 0x01, 0x47, - 0xa1, 0x4a, 0x96, 0x1d, 0x41, 0xe1, 0x60, 0x1d, 0x81, 0xd8, 0x01, 0xa2, - 0xcb, 0x01, 0xa3, 0xbe, 0x01, 0xa4, 0xa5, 0x01, 0x42, 0x27, 0x01, 0x67, - 0x1d, 0x01, 0xa7, 0x92, 0x01, 0x42, 0x22, 0x00, 0x87, 0x1d, 0x01, 0xe9, - 0x62, 0x1d, 0x81, 0x82, 0x01, 0xaa, 0x76, 0xab, 0x6a, 0xac, 0x5e, 0x42, - 0x6c, 0x00, 0x70, 0x1d, 0x01, 0xae, 0x4c, 0x42, 0x69, 0x05, 0x6a, 0x1d, - 0x01, 0xb0, 0x3a, 0x42, 0x71, 0x00, 0x88, 0x1d, 0x01, 0x42, 0x15, 0x06, - 0x89, 0x1d, 0x01, 0xb4, 0x15, 0xf5, 0x64, 0x1d, 0x81, 0x0c, 0x42, 0xa6, - 0x0a, 0x6d, 0x1d, 0x01, 0x42, 0x34, 0x22, 0x6c, 0x1d, 0x41, 0xf5, 0x65, - 0x1d, 0x41, 0xe1, 0x73, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x74, 0x1d, 0x01, - 0xb4, 0x01, 0xff, 0xe1, 0x7d, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x7e, 0x1d, - 0x41, 0xe1, 0x85, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x86, 0x1d, 0x41, 0xe1, - 0x7a, 0x1d, 0x01, 0x42, 0x24, 0x02, 0x84, 0x1d, 0x41, 0xe1, 0x75, 0x1d, - 0x01, 0x42, 0x74, 0x00, 0x7f, 0x1d, 0x41, 0xe1, 0x71, 0x1d, 0x01, 0x42, - 0x22, 0x00, 0x72, 0x1d, 0x41, 0xe1, 0x80, 0x1d, 0x01, 0x42, 0x22, 0x00, - 0x81, 0x1d, 0x41, 0xe9, 0x63, 0x1d, 0x41, 0xe1, 0x76, 0x1d, 0x01, 0x42, - 0x22, 0x00, 0x77, 0x1d, 0x41, 0xe1, 0x78, 0x1d, 0x01, 0xa4, 0x06, 0x42, - 0x22, 0x00, 0x79, 0x1d, 0x41, 0xe1, 0x82, 0x1d, 0x01, 0x42, 0x22, 0x00, - 0x83, 0x1d, 0x41, 0xe1, 0x7b, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x7c, 0x1d, - 0x41, 0xe1, 0x6e, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x6f, 0x1d, 0x41, 0xe1, - 0x61, 0x1d, 0x01, 0xe9, 0x68, 0x1d, 0x01, 0xf5, 0x6b, 0x1d, 0x41, 0x45, - 0xc3, 0x0a, 0xa8, 0x1d, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xa9, 0x1d, - 0x01, 0x43, 0xbf, 0x0a, 0xa1, 0x1d, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, - 0xa1, 0x1d, 0xa0, 0x1d, 0x41, 0x44, 0x25, 0x01, 0xa3, 0x1d, 0x01, 0x42, - 0x15, 0x02, 0xa2, 0x1d, 0x41, 0x44, 0x27, 0x1d, 0xa7, 0x1d, 0x01, 0x42, - 0x60, 0x25, 0xa6, 0x1d, 0x41, 0x43, 0xa7, 0x05, 0xa5, 0x1d, 0x01, 0x43, - 0xcb, 0x06, 0xa4, 0x1d, 0x41, 0x51, 0x93, 0x56, 0xf0, 0x0a, 0x00, 0x06, - 0xc4, 0x06, 0xe9, 0x03, 0x07, 0xc1, 0x05, 0xc6, 0x01, 0x42, 0xe9, 0x04, - 0xd0, 0x0a, 0x00, 0x4a, 0xf6, 0x7e, 0xf1, 0x0a, 0x00, 0x05, 0x2f, 0x03, - 0x61, 0x06, 0x6c, 0x38, 0x01, 0xff, 0x07, 0xba, 0x5f, 0x50, 0x05, 0x2f, - 0x03, 0x01, 0xff, 0xa1, 0x3d, 0x07, 0xba, 0x5f, 0x31, 0xe5, 0xc7, 0x0a, - 0x00, 0xe9, 0xbf, 0x0a, 0x80, 0x24, 0xef, 0xcb, 0x0a, 0x00, 0xf5, 0xc1, - 0x0a, 0x80, 0x17, 0x08, 0x9b, 0xbe, 0x01, 0xff, 0xec, 0xe2, 0x0a, 0x80, - 0x09, 0xf2, 0xc3, 0x0a, 0xc0, 0x00, 0xf2, 0xc4, 0x0a, 0x40, 0xec, 0xe3, - 0x0a, 0x40, 0xf5, 0xc2, 0x0a, 0x40, 0xe9, 0xc0, 0x0a, 0x40, 0xe5, 0xc5, - 0x0a, 0x00, 0xef, 0xc9, 0x0a, 0x40, 0xe1, 0xbe, 0x0a, 0x00, 0xe9, 0xc8, - 0x0a, 0x00, 0xf5, 0xcc, 0x0a, 0x40, 0xe5, 0x8d, 0x0a, 0x00, 0xef, 0x91, - 0x0a, 0x40, 0xa1, 0x47, 0xa3, 0x39, 0x46, 0xf0, 0xda, 0xfc, 0x0a, 0x00, - 0x45, 0x5a, 0x3e, 0xbc, 0x0a, 0x00, 0xb3, 0x1f, 0xb4, 0x11, 0x02, 0x02, - 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, 0xcd, 0x0a, 0x00, 0x45, 0xa3, 0x4a, - 0x83, 0x0a, 0x40, 0x54, 0xff, 0x41, 0xfd, 0x0a, 0x00, 0x55, 0x50, 0x3e, - 0xff, 0x0a, 0x40, 0x45, 0xb8, 0xe3, 0xfb, 0x0a, 0x00, 0x44, 0x00, 0xe8, - 0xfa, 0x0a, 0x40, 0x4a, 0x50, 0x23, 0x81, 0x0a, 0x00, 0x51, 0x54, 0x3e, - 0xfe, 0x0a, 0x40, 0x47, 0xd1, 0x15, 0x82, 0x0a, 0x00, 0x47, 0xf2, 0x86, - 0xbd, 0x0a, 0x40, 0xe1, 0x85, 0x0a, 0x80, 0x8c, 0x02, 0xa2, 0xff, 0x01, - 0xa3, 0xf2, 0x01, 0xa4, 0xd9, 0x01, 0xe5, 0x8f, 0x0a, 0x00, 0xa7, 0xc8, - 0x01, 0x42, 0x22, 0x00, 0xb9, 0x0a, 0x00, 0xe9, 0x87, 0x0a, 0x80, 0xb8, - 0x01, 0xaa, 0xab, 0x01, 0xab, 0x9e, 0x01, 0xac, 0x91, 0x01, 0x42, 0x6c, - 0x00, 0xae, 0x0a, 0x00, 0xae, 0x73, 0xef, 0x93, 0x0a, 0x00, 0xb0, 0x63, - 0x42, 0x71, 0x00, 0xb0, 0x0a, 0x00, 0xb3, 0x4b, 0xb4, 0x32, 0xf5, 0x89, - 0x0a, 0x80, 0x29, 0xb6, 0x0c, 0x42, 0x34, 0x22, 0xaf, 0x0a, 0x00, 0x43, - 0x44, 0xbe, 0xf9, 0x0a, 0x40, 0xe1, 0xb5, 0x0a, 0x00, 0x07, 0x9c, 0xbe, - 0x01, 0xff, 0xec, 0x8c, 0x0a, 0x80, 0x09, 0xf2, 0x8b, 0x0a, 0xc0, 0x00, - 0xf2, 0xe0, 0x0a, 0x40, 0xec, 0xe1, 0x0a, 0x40, 0xf5, 0x8a, 0x0a, 0x40, - 0xe1, 0xa4, 0x0a, 0x00, 0x42, 0x22, 0x00, 0xa5, 0x0a, 0x00, 0xb4, 0x01, - 0xff, 0xe1, 0x9f, 0x0a, 0x00, 0x42, 0x22, 0x00, 0xa0, 0x0a, 0x40, 0xe1, - 0xb8, 0x0a, 0x00, 0x42, 0x22, 0x00, 0xb6, 0x0a, 0x00, 0x42, 0x15, 0x06, - 0xb7, 0x0a, 0x40, 0xe1, 0xaa, 0x0a, 0x00, 0x42, 0x22, 0x00, 0xab, 0x0a, - 0x40, 0xe1, 0xa8, 0x0a, 0x00, 0x42, 0x24, 0x02, 0x99, 0x0a, 0x00, 0x42, - 0xff, 0x04, 0xa3, 0x0a, 0x00, 0x42, 0x34, 0x22, 0x9e, 0x0a, 0x40, 0xe1, - 0xb2, 0x0a, 0x00, 0x42, 0x74, 0x00, 0xb3, 0x0a, 0x40, 0xe1, 0x95, 0x0a, - 0x00, 0x42, 0x22, 0x00, 0x96, 0x0a, 0x40, 0xe1, 0x9c, 0x0a, 0x00, 0x42, - 0x22, 0x00, 0x9d, 0x0a, 0x40, 0xe9, 0x88, 0x0a, 0x40, 0xe1, 0x97, 0x0a, - 0x00, 0x42, 0x22, 0x00, 0x98, 0x0a, 0x40, 0xe1, 0xa6, 0x0a, 0x00, 0xa4, - 0x06, 0x42, 0x22, 0x00, 0xa7, 0x0a, 0x40, 0xe1, 0xa1, 0x0a, 0x00, 0x42, - 0x22, 0x00, 0xa2, 0x0a, 0x40, 0xe1, 0x9a, 0x0a, 0x00, 0x42, 0x22, 0x00, - 0x9b, 0x0a, 0x40, 0xe1, 0xac, 0x0a, 0x00, 0x42, 0x22, 0x00, 0xad, 0x0a, - 0x40, 0xe1, 0x86, 0x0a, 0x00, 0xe9, 0x90, 0x0a, 0x00, 0xf5, 0x94, 0x0a, - 0x40, 0x45, 0xc3, 0x0a, 0xee, 0x0a, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, - 0xef, 0x0a, 0x00, 0x43, 0xbf, 0x0a, 0xe7, 0x0a, 0x00, 0xb3, 0x14, 0xb4, - 0x06, 0x44, 0xa1, 0x1d, 0xe6, 0x0a, 0x40, 0x44, 0x25, 0x01, 0xe9, 0x0a, - 0x00, 0x42, 0x15, 0x02, 0xe8, 0x0a, 0x40, 0x44, 0x27, 0x1d, 0xed, 0x0a, - 0x00, 0x42, 0x60, 0x25, 0xec, 0x0a, 0x40, 0x43, 0xa7, 0x05, 0xeb, 0x0a, - 0x00, 0x43, 0xcb, 0x06, 0xea, 0x0a, 0x40, 0x46, 0xf6, 0xd7, 0xae, 0xf9, - 0x01, 0x43, 0xe3, 0x12, 0xb8, 0xf3, 0x41, 0x48, 0xf5, 0x99, 0xb2, 0x20, - 0x00, 0x45, 0x9b, 0xe2, 0x82, 0xf4, 0x41, 0xa1, 0x81, 0x1f, 0xa5, 0x4d, - 0xa9, 0x19, 0xaf, 0x01, 0xff, 0x03, 0x11, 0x15, 0x06, 0x4a, 0x39, 0xb1, - 0x97, 0xf4, 0x41, 0x44, 0xb9, 0x00, 0xd2, 0x2b, 0x00, 0x49, 0x36, 0x20, - 0x1d, 0x00, 0x40, 0x4b, 0x15, 0x9d, 0x2c, 0xf6, 0x01, 0x06, 0x45, 0xa0, - 0x01, 0xff, 0x5a, 0xc0, 0x1e, 0x38, 0xf6, 0x01, 0x44, 0xe1, 0x07, 0x00, - 0xf6, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x5b, 0x27, 0x1c, 0x2a, - 0xf9, 0x01, 0xb3, 0x01, 0xff, 0x4b, 0xcf, 0x1e, 0x01, 0xf6, 0x01, 0x48, - 0xb2, 0xc8, 0x29, 0xf9, 0x41, 0x0a, 0x8a, 0x00, 0xce, 0x1c, 0xa5, 0x06, - 0x47, 0xe1, 0xd4, 0x76, 0xfa, 0x41, 0x02, 0xbc, 0x00, 0x1d, 0x02, 0x92, - 0x00, 0x01, 0xff, 0x45, 0x47, 0xe1, 0x4f, 0xf3, 0x01, 0x44, 0x0e, 0xec, - 0xd7, 0xf4, 0x01, 0x45, 0x24, 0x21, 0x9a, 0xf4, 0x01, 0x45, 0x96, 0xe7, - 0x57, 0xf9, 0x41, 0xa1, 0xde, 0x18, 0x4b, 0x8a, 0x97, 0xd0, 0x03, 0x00, - 0x08, 0xb9, 0x05, 0xbe, 0x10, 0xa4, 0xf7, 0x0f, 0xa6, 0xe8, 0x0f, 0x4b, - 0x55, 0x9a, 0x88, 0x01, 0x01, 0x02, 0x9e, 0x01, 0xb8, 0x0e, 0xab, 0x9b, - 0x0e, 0xac, 0xa9, 0x0d, 0xad, 0x9a, 0x0d, 0x4c, 0xb5, 0x5b, 0x74, 0x03, - 0x00, 0xaf, 0xe8, 0x0c, 0xb0, 0xaf, 0x0c, 0x4d, 0xd6, 0x33, 0x7e, 0x03, - 0x00, 0xb2, 0x8f, 0x0c, 0xb3, 0xf4, 0x01, 0xb4, 0xb5, 0x01, 0x0d, 0xf0, - 0x87, 0x9e, 0x01, 0xb6, 0x1a, 0x4b, 0x0e, 0xa3, 0x85, 0x01, 0x01, 0xb9, - 0x06, 0x49, 0x58, 0xbf, 0x8a, 0x01, 0x41, 0x48, 0x1a, 0xbf, 0x79, 0x01, - 0x01, 0x4c, 0xf0, 0x4d, 0x7a, 0x03, 0x40, 0x44, 0xb6, 0x2f, 0xef, 0x1f, - 0x00, 0x15, 0x58, 0x3c, 0x01, 0xff, 0xd1, 0x00, 0xd2, 0x81, 0x4a, 0xd2, - 0x01, 0xd2, 0x81, 0x31, 0xd3, 0x02, 0xd2, 0x01, 0xd4, 0x03, 0xd2, 0x01, - 0xd5, 0x04, 0xd2, 0x81, 0x10, 0xd6, 0x05, 0xd2, 0x01, 0xd7, 0x06, 0xd2, - 0x01, 0xd8, 0x07, 0xd2, 0x01, 0xd9, 0x08, 0xd2, 0x41, 0xd0, 0x18, 0xd2, - 0x01, 0xd1, 0x19, 0xd2, 0x01, 0xd2, 0x1a, 0xd2, 0x01, 0xd3, 0x1b, 0xd2, - 0x01, 0xd4, 0x1c, 0xd2, 0x41, 0xd0, 0x13, 0xd2, 0x01, 0xd1, 0x14, 0xd2, - 0x01, 0xd2, 0x15, 0xd2, 0x01, 0xd3, 0x16, 0xd2, 0x01, 0xd4, 0x17, 0xd2, - 0x41, 0xd0, 0x09, 0xd2, 0x01, 0xd1, 0x0a, 0xd2, 0x01, 0xd2, 0x0b, 0xd2, - 0x01, 0xd3, 0x0c, 0xd2, 0x01, 0xd4, 0x0d, 0xd2, 0x01, 0xd5, 0x0e, 0xd2, - 0x01, 0xd6, 0x0f, 0xd2, 0x01, 0xd7, 0x10, 0xd2, 0x01, 0xd8, 0x11, 0xd2, - 0x01, 0xd9, 0x12, 0xd2, 0x41, 0x55, 0x29, 0x38, 0xd3, 0x03, 0x00, 0x59, - 0x2f, 0x23, 0xd4, 0x03, 0x00, 0x4b, 0x3d, 0x23, 0xd2, 0x03, 0x40, 0x4a, - 0x6d, 0xa5, 0x7a, 0x01, 0x01, 0xa8, 0x1d, 0x44, 0x83, 0x6a, 0x84, 0x03, - 0x00, 0x51, 0x49, 0x5c, 0x89, 0x01, 0x01, 0x03, 0xd1, 0x09, 0x01, 0xff, - 0x4a, 0xae, 0x77, 0x7d, 0x01, 0x01, 0x4b, 0x40, 0xa1, 0x77, 0x01, 0x41, - 0x4a, 0xf3, 0x93, 0xd1, 0x03, 0x00, 0x04, 0x26, 0x01, 0x01, 0xff, 0x4a, - 0xae, 0x77, 0x7e, 0x01, 0x01, 0x4d, 0xe8, 0x85, 0x78, 0x01, 0x41, 0x4c, - 0x99, 0x8e, 0x8c, 0x01, 0x01, 0x05, 0x0d, 0x07, 0x28, 0x16, 0xe5, 0x36, - 0x06, 0x4d, 0x01, 0x89, 0xa0, 0x01, 0x41, 0x44, 0x8a, 0x97, 0x66, 0x1d, - 0x00, 0x43, 0x0d, 0x16, 0x6a, 0x1d, 0x00, 0x45, 0xd2, 0x56, 0x67, 0x1d, - 0x00, 0x43, 0xb1, 0x1f, 0x69, 0x1d, 0x00, 0x43, 0xa6, 0x48, 0x68, 0x1d, - 0x40, 0x5a, 0x0e, 0x1f, 0x7c, 0x03, 0x00, 0x07, 0xc1, 0x05, 0x11, 0x09, - 0x8e, 0x14, 0x01, 0xff, 0x5a, 0x0e, 0x1f, 0x7d, 0x03, 0x00, 0x53, 0x15, - 0x1f, 0x7b, 0x03, 0x40, 0xa1, 0xf6, 0x07, 0x44, 0x8a, 0x97, 0xb2, 0x03, - 0x00, 0x43, 0x0d, 0x16, 0xc7, 0x03, 0x00, 0xa4, 0xdb, 0x07, 0xa5, 0xd6, - 0x05, 0x4b, 0xfd, 0x99, 0xc2, 0x03, 0x00, 0x45, 0xd2, 0x56, 0xb3, 0x03, - 0x00, 0x44, 0xf2, 0x93, 0x71, 0x03, 0x00, 0x44, 0xca, 0x2d, 0xb9, 0x03, - 0x80, 0xac, 0x04, 0xab, 0x9d, 0x04, 0x45, 0xfd, 0xe4, 0xbb, 0x03, 0x00, - 0x42, 0x57, 0x16, 0xbc, 0x03, 0x00, 0x42, 0xd1, 0x15, 0xbd, 0x03, 0x00, - 0x02, 0xe9, 0x04, 0x85, 0x02, 0xb0, 0xec, 0x01, 0x43, 0xa6, 0x48, 0xc1, - 0x03, 0x80, 0xd3, 0x01, 0xb3, 0xb2, 0x01, 0xb4, 0xa3, 0x01, 0x47, 0xf0, - 0x87, 0xc5, 0x03, 0x80, 0x0c, 0x42, 0x93, 0x0c, 0xbe, 0x03, 0x00, 0x44, - 0x0e, 0xf0, 0xb6, 0x03, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, 0x47, - 0x46, 0x04, 0x6f, 0xe1, 0x1f, 0x00, 0x44, 0xae, 0xee, 0x7b, 0x1f, 0x00, - 0xb0, 0x15, 0x45, 0x82, 0x6a, 0xcd, 0x03, 0x00, 0xb6, 0x01, 0xff, 0x44, - 0xb6, 0x2f, 0x7a, 0x1f, 0x00, 0x45, 0x05, 0xe7, 0xe0, 0x1f, 0x40, 0x4a, - 0x10, 0x9f, 0xe6, 0x1f, 0x00, 0x44, 0x06, 0x87, 0x50, 0x1f, 0xc0, 0x00, - 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x54, 0x1f, 0x00, 0x4b, - 0x0f, 0x9f, 0x56, 0x1f, 0x00, 0x45, 0xb5, 0x2f, 0x52, 0x1f, 0x40, 0x44, - 0xcb, 0x5f, 0x51, 0x1f, 0x80, 0x24, 0x48, 0x79, 0x6a, 0xcb, 0x03, 0xc0, - 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0xe3, 0x1f, 0x00, - 0x4b, 0x0f, 0x9f, 0xe7, 0x1f, 0x00, 0x45, 0x82, 0x6a, 0xb0, 0x03, 0x00, - 0x45, 0xb5, 0x2f, 0xe2, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, - 0xae, 0xee, 0x55, 0x1f, 0x00, 0x4b, 0x0f, 0x9f, 0x57, 0x1f, 0x00, 0x45, - 0xb5, 0x2f, 0x53, 0x1f, 0x40, 0x42, 0xd7, 0x23, 0xc4, 0x03, 0x00, 0x44, - 0xf2, 0x93, 0xb8, 0x03, 0x40, 0xa1, 0x12, 0x42, 0x0b, 0x00, 0xf8, 0x03, - 0x00, 0x44, 0x1d, 0x1f, 0xc3, 0x03, 0x00, 0x45, 0x1d, 0xe8, 0xdb, 0x03, - 0x40, 0x43, 0x7a, 0x92, 0xe1, 0x03, 0x00, 0xee, 0xfb, 0x03, 0x40, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x45, 0x34, 0x75, 0xe5, 0x1f, 0x00, 0x45, 0xec, - 0xe6, 0xe4, 0x1f, 0x40, 0x51, 0xc6, 0x56, 0x77, 0x03, 0x00, 0x42, 0x49, - 0x00, 0xc6, 0x03, 0x00, 0xe9, 0xc0, 0x03, 0x00, 0x42, 0x2f, 0x03, 0xc8, - 0x03, 0x40, 0x43, 0xa3, 0x05, 0xc9, 0x03, 0x80, 0x4e, 0x45, 0x3a, 0xe4, - 0xbf, 0x03, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x34, 0x75, - 0x41, 0x1f, 0x80, 0x2a, 0x44, 0xae, 0xee, 0x79, 0x1f, 0x00, 0x45, 0xec, - 0xe6, 0x40, 0x1f, 0x80, 0x0c, 0x45, 0x82, 0x6a, 0xcc, 0x03, 0x00, 0x45, - 0xb5, 0x2f, 0x78, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, - 0xee, 0x44, 0x1f, 0x00, 0x45, 0xb5, 0x2f, 0x42, 0x1f, 0x40, 0x05, 0x19, - 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x45, 0x1f, 0x00, 0x45, 0xb5, 0x2f, - 0x43, 0x1f, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x34, 0x75, 0x61, - 0x1f, 0x80, 0x6e, 0x44, 0xae, 0xee, 0x7d, 0x1f, 0x80, 0x61, 0xb0, 0x19, - 0x45, 0x82, 0x6a, 0xce, 0x03, 0x00, 0x45, 0xb5, 0x2f, 0x7c, 0x1f, 0x80, - 0x06, 0x4d, 0xef, 0x4d, 0xf3, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0xf2, 0x1f, - 0x40, 0x4a, 0x10, 0x9f, 0xf6, 0x1f, 0x80, 0x39, 0x44, 0x06, 0x87, 0x60, - 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x64, - 0x1f, 0x80, 0x20, 0x4b, 0x0f, 0x9f, 0x66, 0x1f, 0x80, 0x13, 0x45, 0xb5, - 0x2f, 0x62, 0x1f, 0x80, 0x06, 0x4d, 0xef, 0x4d, 0xa0, 0x1f, 0x40, 0x52, - 0xea, 0x4d, 0xa2, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0xa6, 0x1f, 0x40, 0x52, - 0xea, 0x4d, 0xa4, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0xf7, 0x1f, 0x40, 0x52, - 0xea, 0x4d, 0xf4, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, - 0xee, 0x65, 0x1f, 0x80, 0x20, 0x4b, 0x0f, 0x9f, 0x67, 0x1f, 0x80, 0x13, - 0x45, 0xb5, 0x2f, 0x63, 0x1f, 0x80, 0x06, 0x4d, 0xef, 0x4d, 0xa1, 0x1f, - 0x40, 0x52, 0xea, 0x4d, 0xa3, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0xa7, 0x1f, - 0x40, 0x52, 0xea, 0x4d, 0xa5, 0x1f, 0x40, 0x44, 0xe2, 0x8e, 0xba, 0x03, - 0x00, 0x44, 0x30, 0x7f, 0xdf, 0x03, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, - 0xa4, 0x47, 0x46, 0x04, 0x6f, 0xd1, 0x1f, 0x00, 0x44, 0xae, 0xee, 0x77, - 0x1f, 0x00, 0xb0, 0x15, 0x45, 0x82, 0x6a, 0xaf, 0x03, 0x00, 0xb6, 0x01, - 0xff, 0x44, 0xb6, 0x2f, 0x76, 0x1f, 0x00, 0x45, 0x05, 0xe7, 0xd0, 0x1f, - 0x40, 0x4a, 0x10, 0x9f, 0xd6, 0x1f, 0x00, 0x44, 0x06, 0x87, 0x30, 0x1f, - 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x34, 0x1f, - 0x00, 0x4b, 0x0f, 0x9f, 0x36, 0x1f, 0x00, 0x45, 0xb5, 0x2f, 0x32, 0x1f, - 0x40, 0x44, 0xcb, 0x5f, 0x31, 0x1f, 0x80, 0x24, 0x48, 0x79, 0x6a, 0xca, - 0x03, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0xd3, - 0x1f, 0x00, 0x4b, 0x0f, 0x9f, 0xd7, 0x1f, 0x00, 0x45, 0x82, 0x6a, 0x90, - 0x03, 0x00, 0x45, 0xb5, 0x2f, 0xd2, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, - 0xff, 0x44, 0xae, 0xee, 0x35, 0x1f, 0x00, 0x4b, 0x0f, 0x9f, 0x37, 0x1f, - 0x00, 0x45, 0xb5, 0x2f, 0x33, 0x1f, 0x40, 0x46, 0x63, 0x15, 0xb5, 0x03, - 0x80, 0xb3, 0x01, 0x42, 0x12, 0x00, 0xb7, 0x03, 0xc0, 0x00, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x45, 0x34, 0x75, 0x21, 0x1f, 0x80, 0x6e, 0x44, 0xae, - 0xee, 0x75, 0x1f, 0x80, 0x61, 0xb0, 0x19, 0x45, 0x82, 0x6a, 0xae, 0x03, - 0x00, 0x45, 0xb5, 0x2f, 0x74, 0x1f, 0x80, 0x06, 0x4d, 0xef, 0x4d, 0xc3, - 0x1f, 0x40, 0x52, 0xea, 0x4d, 0xc2, 0x1f, 0x40, 0x4a, 0x10, 0x9f, 0xc6, - 0x1f, 0x80, 0x39, 0x44, 0x06, 0x87, 0x20, 0x1f, 0xc0, 0x00, 0x05, 0x19, - 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x24, 0x1f, 0x80, 0x20, 0x4b, 0x0f, - 0x9f, 0x26, 0x1f, 0x80, 0x13, 0x45, 0xb5, 0x2f, 0x22, 0x1f, 0x80, 0x06, - 0x4d, 0xef, 0x4d, 0x90, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0x92, 0x1f, 0x40, - 0x52, 0xea, 0x4d, 0x96, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0x94, 0x1f, 0x40, - 0x52, 0xea, 0x4d, 0xc7, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0xc4, 0x1f, 0x40, - 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x25, 0x1f, 0x80, 0x20, - 0x4b, 0x0f, 0x9f, 0x27, 0x1f, 0x80, 0x13, 0x45, 0xb5, 0x2f, 0x23, 0x1f, - 0x80, 0x06, 0x4d, 0xef, 0x4d, 0x91, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0x93, - 0x1f, 0x40, 0x52, 0xea, 0x4d, 0x97, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0x95, - 0x1f, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x34, 0x75, 0x11, 0x1f, - 0x80, 0x2a, 0x44, 0xae, 0xee, 0x73, 0x1f, 0x00, 0x45, 0xec, 0xe6, 0x10, - 0x1f, 0x80, 0x0c, 0x45, 0x82, 0x6a, 0xad, 0x03, 0x00, 0x45, 0xb5, 0x2f, - 0x72, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x14, - 0x1f, 0x00, 0x45, 0xb5, 0x2f, 0x12, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, - 0xff, 0x44, 0xae, 0xee, 0x15, 0x1f, 0x00, 0x45, 0xb5, 0x2f, 0x13, 0x1f, - 0x40, 0x44, 0x6c, 0xd3, 0xb4, 0x03, 0x00, 0x46, 0xd1, 0x56, 0xdd, 0x03, - 0x40, 0x44, 0x2f, 0xe1, 0xb1, 0x03, 0x80, 0x11, 0x07, 0x28, 0x7f, 0x01, - 0xff, 0x45, 0x2f, 0x7f, 0xd9, 0x03, 0x00, 0x45, 0x78, 0x92, 0x73, 0x03, - 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x34, 0x75, 0x01, 0x1f, 0x80, - 0x7c, 0x46, 0x04, 0x6f, 0xb1, 0x1f, 0x00, 0x44, 0xae, 0xee, 0x71, 0x1f, - 0x80, 0x69, 0xb0, 0x21, 0x45, 0x82, 0x6a, 0xac, 0x03, 0x00, 0xb6, 0x06, - 0x4d, 0xef, 0x4d, 0xb3, 0x1f, 0x40, 0x44, 0xb6, 0x2f, 0x70, 0x1f, 0x80, - 0x06, 0x45, 0x05, 0xe7, 0xb0, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0xb2, 0x1f, - 0x40, 0x4a, 0x10, 0x9f, 0xb6, 0x1f, 0x80, 0x39, 0x44, 0x06, 0x87, 0x00, - 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x04, - 0x1f, 0x80, 0x20, 0x4b, 0x0f, 0x9f, 0x06, 0x1f, 0x80, 0x13, 0x45, 0xb5, - 0x2f, 0x02, 0x1f, 0x80, 0x06, 0x4d, 0xef, 0x4d, 0x80, 0x1f, 0x40, 0x52, - 0xea, 0x4d, 0x82, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0x86, 0x1f, 0x40, 0x52, - 0xea, 0x4d, 0x84, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0xb7, 0x1f, 0x40, 0x52, - 0xea, 0x4d, 0xb4, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, - 0xee, 0x05, 0x1f, 0x80, 0x20, 0x4b, 0x0f, 0x9f, 0x07, 0x1f, 0x80, 0x13, - 0x45, 0xb5, 0x2f, 0x03, 0x1f, 0x80, 0x06, 0x4d, 0xef, 0x4d, 0x81, 0x1f, - 0x40, 0x52, 0xea, 0x4d, 0x83, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0x87, 0x1f, - 0x40, 0x52, 0xea, 0x4d, 0x85, 0x1f, 0x40, 0x5d, 0x53, 0x15, 0xf6, 0x03, - 0x00, 0x03, 0x3a, 0x70, 0x01, 0xff, 0x46, 0xeb, 0x07, 0xf1, 0x03, 0x00, - 0x52, 0x70, 0x55, 0xfc, 0x03, 0x40, 0x4a, 0x10, 0x9f, 0xc0, 0x1f, 0x00, - 0x49, 0x30, 0xb7, 0xd5, 0x03, 0x00, 0x48, 0x0b, 0xaa, 0xd6, 0x03, 0x00, - 0x4d, 0x01, 0x46, 0xbe, 0x1f, 0x00, 0x44, 0x06, 0x87, 0xbf, 0x1f, 0xc0, - 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0xce, 0x1f, 0x00, - 0x4b, 0x0f, 0x9f, 0xcf, 0x1f, 0x00, 0x45, 0xb5, 0x2f, 0xcd, 0x1f, 0x40, - 0x48, 0xba, 0xc1, 0x7c, 0x01, 0x01, 0x03, 0xc4, 0x07, 0x0c, 0x4a, 0x67, - 0xb0, 0x84, 0x01, 0x01, 0x43, 0x12, 0x4a, 0xfd, 0x1f, 0x40, 0x49, 0x03, - 0xb7, 0x75, 0x01, 0x81, 0x06, 0x4c, 0x35, 0x92, 0x8b, 0x01, 0x41, 0x4f, - 0x8a, 0x67, 0x76, 0x01, 0x41, 0x4c, 0x01, 0x8d, 0x81, 0x01, 0x01, 0x4d, - 0x24, 0x88, 0x45, 0xd2, 0x41, 0x06, 0xc2, 0x05, 0x1d, 0x49, 0x59, 0xb8, - 0x83, 0x01, 0x01, 0x51, 0xb0, 0x5b, 0x75, 0x03, 0x00, 0x06, 0x5c, 0x15, - 0x01, 0xff, 0x4e, 0x62, 0x15, 0xf5, 0x03, 0x00, 0x4c, 0x1c, 0x1f, 0xf2, - 0x03, 0x40, 0x4d, 0x27, 0x7f, 0xd8, 0x03, 0x00, 0x47, 0xd0, 0x56, 0xdc, - 0x03, 0x00, 0x45, 0x2f, 0x7f, 0xde, 0x03, 0x00, 0xb3, 0x06, 0x43, 0x8c, - 0xf1, 0xf3, 0x03, 0x40, 0x44, 0x79, 0x92, 0xe0, 0x03, 0x00, 0x0d, 0xf7, - 0x3b, 0x06, 0x45, 0x1d, 0xe8, 0xda, 0x03, 0x40, 0x45, 0xd2, 0x56, 0x26, - 0x1d, 0x00, 0x45, 0xfd, 0xe4, 0x27, 0x1d, 0x00, 0x45, 0xe8, 0xac, 0x65, - 0xab, 0x00, 0xb0, 0x06, 0x43, 0xa6, 0x48, 0x29, 0x1d, 0x40, 0xe9, 0x28, - 0x1d, 0x00, 0x42, 0x2f, 0x03, 0x2a, 0x1d, 0x40, 0xa1, 0x0c, 0x46, 0x74, - 0x60, 0xbd, 0x1f, 0x00, 0x50, 0x6a, 0x67, 0x82, 0x01, 0x41, 0x48, 0x0b, - 0xaa, 0xd7, 0x03, 0x00, 0x4a, 0xe3, 0x8e, 0xf0, 0x03, 0x40, 0x4c, 0x35, - 0x8c, 0x8d, 0x01, 0x01, 0x1b, 0xe4, 0x1c, 0x01, 0xff, 0xd1, 0x1d, 0xd2, - 0x81, 0x79, 0xd2, 0x1e, 0xd2, 0x81, 0x5c, 0x93, 0x42, 0xd4, 0x1f, 0xd2, - 0x81, 0x21, 0xd5, 0x20, 0xd2, 0x81, 0x08, 0xd7, 0x21, 0xd2, 0x01, 0xd8, - 0x22, 0xd2, 0x41, 0xd0, 0x3d, 0xd2, 0x01, 0xd1, 0x3e, 0xd2, 0x01, 0xd2, - 0x3f, 0xd2, 0x01, 0xd3, 0x40, 0xd2, 0x01, 0xd4, 0x41, 0xd2, 0x41, 0xd0, - 0x36, 0xd2, 0x01, 0xd2, 0x37, 0xd2, 0x01, 0xd3, 0x38, 0xd2, 0x01, 0xd5, - 0x39, 0xd2, 0x01, 0xd7, 0x3a, 0xd2, 0x01, 0xd8, 0x3b, 0xd2, 0x01, 0xd9, - 0x3c, 0xd2, 0x41, 0xd0, 0x30, 0xd2, 0x01, 0xd2, 0x31, 0xd2, 0x01, 0xd6, - 0x32, 0xd2, 0x01, 0xd7, 0x33, 0xd2, 0x01, 0xd8, 0x34, 0xd2, 0x01, 0xd9, - 0x35, 0xd2, 0x41, 0xd3, 0x2a, 0xd2, 0x01, 0xd4, 0x2b, 0xd2, 0x01, 0xd5, - 0x2c, 0xd2, 0x01, 0xd6, 0x2d, 0xd2, 0x01, 0xd7, 0x2e, 0xd2, 0x01, 0xd9, - 0x2f, 0xd2, 0x41, 0xd1, 0x23, 0xd2, 0x01, 0xd2, 0x24, 0xd2, 0x01, 0xd3, - 0x25, 0xd2, 0x01, 0xd4, 0x26, 0xd2, 0x01, 0xd7, 0x27, 0xd2, 0x01, 0xd8, - 0x28, 0xd2, 0x01, 0xd9, 0x29, 0xd2, 0x41, 0x4e, 0xaa, 0x77, 0x80, 0x01, - 0x01, 0x4e, 0x6a, 0x79, 0x7f, 0x01, 0x41, 0x44, 0xcb, 0x5f, 0xfe, 0x1f, - 0x80, 0x26, 0x09, 0x79, 0x6a, 0x06, 0x4b, 0x72, 0x9f, 0x7b, 0x01, 0x41, - 0x04, 0x1a, 0x00, 0x06, 0x45, 0x82, 0x6a, 0x85, 0x03, 0x40, 0x44, 0xae, - 0xee, 0xee, 0x1f, 0x00, 0x4b, 0x0f, 0x9f, 0xc1, 0x1f, 0x00, 0x45, 0xb5, - 0x2f, 0xed, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, - 0xde, 0x1f, 0x00, 0x4b, 0x0f, 0x9f, 0xdf, 0x1f, 0x00, 0x45, 0xb5, 0x2f, - 0xdd, 0x1f, 0x40, 0x5a, 0x0e, 0x1f, 0xfe, 0x03, 0x00, 0x4a, 0x09, 0xaa, - 0xcf, 0x03, 0x00, 0xac, 0x16, 0x09, 0x8e, 0x14, 0x06, 0x4c, 0xf1, 0x93, - 0xf4, 0x03, 0x40, 0x5a, 0x0e, 0x1f, 0xff, 0x03, 0x00, 0x53, 0x15, 0x1f, - 0xfd, 0x03, 0x40, 0x06, 0xc2, 0x05, 0x06, 0x52, 0x16, 0x1f, 0xf9, 0x03, - 0x40, 0xa1, 0xb3, 0x06, 0x44, 0x8a, 0x97, 0x92, 0x03, 0x00, 0x43, 0x0d, - 0x16, 0xa7, 0x03, 0x00, 0x45, 0x73, 0xe2, 0x94, 0x03, 0x00, 0xa5, 0xb3, - 0x04, 0x45, 0xd2, 0x56, 0x93, 0x03, 0x00, 0x44, 0xf2, 0x93, 0x70, 0x03, - 0x00, 0x44, 0xca, 0x2d, 0x99, 0x03, 0x80, 0xb5, 0x03, 0x45, 0xe1, 0x8e, - 0x9a, 0x03, 0x00, 0x45, 0xfd, 0xe4, 0x9b, 0x03, 0x00, 0x42, 0x57, 0x16, - 0x9c, 0x03, 0x00, 0x42, 0xd1, 0x15, 0x9d, 0x03, 0x00, 0x02, 0xe9, 0x04, - 0xae, 0x01, 0xb0, 0x95, 0x01, 0x43, 0xa6, 0x48, 0xa1, 0x03, 0x80, 0x87, - 0x01, 0xb3, 0x73, 0xb4, 0x65, 0x47, 0xf0, 0x87, 0xa5, 0x03, 0x80, 0x12, - 0x42, 0x93, 0x0c, 0x9e, 0x03, 0x00, 0x43, 0x8c, 0xf1, 0x7f, 0x03, 0x00, - 0x44, 0x0e, 0xf0, 0x96, 0x03, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, - 0x21, 0x46, 0x04, 0x6f, 0xe9, 0x1f, 0x00, 0x44, 0xae, 0xee, 0xeb, 0x1f, - 0x00, 0x45, 0x82, 0x6a, 0x8e, 0x03, 0x00, 0xb6, 0x01, 0xff, 0x44, 0xb6, - 0x2f, 0xea, 0x1f, 0x00, 0x45, 0x05, 0xe7, 0xe8, 0x1f, 0x40, 0x44, 0xcb, - 0x5f, 0x59, 0x1f, 0x80, 0x06, 0x48, 0x79, 0x6a, 0xab, 0x03, 0x40, 0x05, - 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x5d, 0x1f, 0x00, 0x4b, 0x0f, - 0x9f, 0x5f, 0x1f, 0x00, 0x45, 0xb5, 0x2f, 0x5b, 0x1f, 0x40, 0x42, 0xd7, - 0x23, 0xa4, 0x03, 0x00, 0x44, 0xf2, 0x93, 0x98, 0x03, 0x40, 0x42, 0x1a, - 0x00, 0xfa, 0x03, 0x00, 0x42, 0x0b, 0x00, 0xf7, 0x03, 0x00, 0x44, 0x1d, - 0x1f, 0xa3, 0x03, 0x40, 0x4b, 0x09, 0x96, 0xec, 0x1f, 0x40, 0x51, 0xc6, - 0x56, 0x76, 0x03, 0x00, 0x42, 0x49, 0x00, 0xa6, 0x03, 0x00, 0xe9, 0xa0, - 0x03, 0x00, 0x42, 0x2f, 0x03, 0xa8, 0x03, 0x40, 0x43, 0xa3, 0x05, 0xa9, - 0x03, 0x80, 0x4e, 0x45, 0x3a, 0xe4, 0x9f, 0x03, 0xc0, 0x00, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x45, 0x34, 0x75, 0x49, 0x1f, 0x80, 0x2a, 0x44, 0xae, - 0xee, 0xf9, 0x1f, 0x00, 0x45, 0xec, 0xe6, 0x48, 0x1f, 0x80, 0x0c, 0x45, - 0x82, 0x6a, 0x8c, 0x03, 0x00, 0x45, 0xb5, 0x2f, 0xf8, 0x1f, 0x40, 0x05, - 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x4c, 0x1f, 0x00, 0x45, 0xb5, - 0x2f, 0x4a, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, - 0x4d, 0x1f, 0x00, 0x45, 0xb5, 0x2f, 0x4b, 0x1f, 0x40, 0x06, 0x50, 0x00, - 0x01, 0xff, 0x45, 0x34, 0x75, 0x69, 0x1f, 0x80, 0x55, 0x44, 0xae, 0xee, - 0xfb, 0x1f, 0x00, 0xb0, 0x0c, 0x45, 0x82, 0x6a, 0x8f, 0x03, 0x00, 0x45, - 0xb5, 0x2f, 0xfa, 0x1f, 0x40, 0x4d, 0x01, 0x46, 0xfc, 0x1f, 0x00, 0x44, - 0x06, 0x87, 0x68, 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, - 0xae, 0xee, 0x6c, 0x1f, 0x80, 0x22, 0xb0, 0x0d, 0x45, 0xb5, 0x2f, 0x6a, - 0x1f, 0xc0, 0x00, 0x53, 0xfb, 0x45, 0xaa, 0x1f, 0x40, 0x4a, 0x10, 0x9f, - 0x6e, 0x1f, 0x80, 0x06, 0x4d, 0x01, 0x46, 0xa8, 0x1f, 0x40, 0x53, 0xfb, - 0x45, 0xae, 0x1f, 0x40, 0x53, 0xfb, 0x45, 0xac, 0x1f, 0x40, 0x05, 0x19, - 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x6d, 0x1f, 0x80, 0x22, 0xb0, 0x0d, - 0x45, 0xb5, 0x2f, 0x6b, 0x1f, 0xc0, 0x00, 0x53, 0xfb, 0x45, 0xab, 0x1f, - 0x40, 0x4a, 0x10, 0x9f, 0x6f, 0x1f, 0x80, 0x06, 0x4d, 0x01, 0x46, 0xa9, - 0x1f, 0x40, 0x53, 0xfb, 0x45, 0xaf, 0x1f, 0x40, 0x53, 0xfb, 0x45, 0xad, - 0x1f, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, 0x3f, 0x46, 0x04, 0x6f, - 0xd9, 0x1f, 0x00, 0x44, 0xae, 0xee, 0xdb, 0x1f, 0x00, 0x45, 0xec, 0xe6, - 0x38, 0x1f, 0x80, 0x15, 0x45, 0x82, 0x6a, 0x8a, 0x03, 0x00, 0xb6, 0x01, - 0xff, 0x44, 0xb6, 0x2f, 0xda, 0x1f, 0x00, 0x45, 0x05, 0xe7, 0xd8, 0x1f, - 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x3c, 0x1f, 0x00, - 0x4b, 0x0f, 0x9f, 0x3e, 0x1f, 0x00, 0x45, 0xb5, 0x2f, 0x3a, 0x1f, 0x40, - 0x44, 0xcb, 0x5f, 0x39, 0x1f, 0x80, 0x06, 0x48, 0x79, 0x6a, 0xaa, 0x03, - 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x3d, 0x1f, 0x00, - 0x4b, 0x0f, 0x9f, 0x3f, 0x1f, 0x00, 0x45, 0xb5, 0x2f, 0x3b, 0x1f, 0x40, - 0x46, 0x63, 0x15, 0x95, 0x03, 0x80, 0x9c, 0x01, 0x42, 0x12, 0x00, 0x97, - 0x03, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x34, 0x75, 0x29, - 0x1f, 0x80, 0x55, 0x44, 0xae, 0xee, 0xcb, 0x1f, 0x00, 0xb0, 0x0c, 0x45, - 0x82, 0x6a, 0x89, 0x03, 0x00, 0x45, 0xb5, 0x2f, 0xca, 0x1f, 0x40, 0x4d, - 0x01, 0x46, 0xcc, 0x1f, 0x00, 0x44, 0x06, 0x87, 0x28, 0x1f, 0xc0, 0x00, - 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x2c, 0x1f, 0x80, 0x22, - 0xb0, 0x0d, 0x45, 0xb5, 0x2f, 0x2a, 0x1f, 0xc0, 0x00, 0x53, 0xfb, 0x45, - 0x9a, 0x1f, 0x40, 0x4a, 0x10, 0x9f, 0x2e, 0x1f, 0x80, 0x06, 0x4d, 0x01, - 0x46, 0x98, 0x1f, 0x40, 0x53, 0xfb, 0x45, 0x9e, 0x1f, 0x40, 0x53, 0xfb, - 0x45, 0x9c, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, - 0x2d, 0x1f, 0x80, 0x22, 0xb0, 0x0d, 0x45, 0xb5, 0x2f, 0x2b, 0x1f, 0xc0, - 0x00, 0x53, 0xfb, 0x45, 0x9b, 0x1f, 0x40, 0x4a, 0x10, 0x9f, 0x2f, 0x1f, - 0x80, 0x06, 0x4d, 0x01, 0x46, 0x99, 0x1f, 0x40, 0x53, 0xfb, 0x45, 0x9f, - 0x1f, 0x40, 0x53, 0xfb, 0x45, 0x9d, 0x1f, 0x40, 0x06, 0x50, 0x00, 0x01, - 0xff, 0x45, 0x34, 0x75, 0x19, 0x1f, 0x80, 0x2a, 0x44, 0xae, 0xee, 0xc9, - 0x1f, 0x00, 0x45, 0xec, 0xe6, 0x18, 0x1f, 0x80, 0x0c, 0x45, 0x82, 0x6a, - 0x88, 0x03, 0x00, 0x45, 0xb5, 0x2f, 0xc8, 0x1f, 0x40, 0x05, 0x19, 0x00, - 0x01, 0xff, 0x44, 0xae, 0xee, 0x1c, 0x1f, 0x00, 0x45, 0xb5, 0x2f, 0x1a, - 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x1d, 0x1f, - 0x00, 0x45, 0xb5, 0x2f, 0x1b, 0x1f, 0x40, 0x44, 0x2f, 0xe1, 0x91, 0x03, - 0x80, 0x06, 0x4c, 0x71, 0x92, 0x72, 0x03, 0x40, 0x06, 0x50, 0x00, 0x01, - 0xff, 0x45, 0x34, 0x75, 0x09, 0x1f, 0x80, 0x64, 0x46, 0x04, 0x6f, 0xb9, - 0x1f, 0x00, 0x44, 0xae, 0xee, 0xbb, 0x1f, 0x00, 0xb0, 0x15, 0x45, 0x82, - 0x6a, 0x86, 0x03, 0x00, 0xb6, 0x01, 0xff, 0x44, 0xb6, 0x2f, 0xba, 0x1f, - 0x00, 0x45, 0x05, 0xe7, 0xb8, 0x1f, 0x40, 0x4d, 0x01, 0x46, 0xbc, 0x1f, - 0x00, 0x44, 0x06, 0x87, 0x08, 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, - 0xff, 0x44, 0xae, 0xee, 0x0c, 0x1f, 0x80, 0x22, 0xb0, 0x0d, 0x45, 0xb5, - 0x2f, 0x0a, 0x1f, 0xc0, 0x00, 0x53, 0xfb, 0x45, 0x8a, 0x1f, 0x40, 0x4a, - 0x10, 0x9f, 0x0e, 0x1f, 0x80, 0x06, 0x4d, 0x01, 0x46, 0x88, 0x1f, 0x40, - 0x53, 0xfb, 0x45, 0x8e, 0x1f, 0x40, 0x53, 0xfb, 0x45, 0x8c, 0x1f, 0x40, - 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x0d, 0x1f, 0x80, 0x22, - 0xb0, 0x0d, 0x45, 0xb5, 0x2f, 0x0b, 0x1f, 0xc0, 0x00, 0x53, 0xfb, 0x45, - 0x8b, 0x1f, 0x40, 0x4a, 0x10, 0x9f, 0x0f, 0x1f, 0x80, 0x06, 0x4d, 0x01, - 0x46, 0x89, 0x1f, 0x40, 0x53, 0xfb, 0x45, 0x8f, 0x1f, 0x40, 0x53, 0xfb, - 0x45, 0x8d, 0x1f, 0x40, 0x0a, 0xa3, 0xa6, 0x15, 0x49, 0x2d, 0xba, 0x87, - 0x03, 0x00, 0xb2, 0x01, 0xff, 0x49, 0x20, 0xbb, 0x87, 0x01, 0x01, 0x49, - 0x21, 0xbd, 0x86, 0x01, 0x41, 0x06, 0x18, 0xd7, 0xe6, 0x01, 0xa3, 0xd7, - 0x01, 0x51, 0x3c, 0x58, 0x73, 0x01, 0x01, 0x0b, 0xbb, 0x99, 0xb9, 0x01, - 0x03, 0xa4, 0x19, 0x97, 0x01, 0x4d, 0x21, 0x84, 0x63, 0x01, 0x01, 0x53, - 0x10, 0x4a, 0x70, 0x01, 0x01, 0x53, 0xfe, 0x4b, 0x74, 0x01, 0x01, 0xb4, - 0x01, 0xff, 0x08, 0x22, 0xc4, 0x30, 0x0a, 0x37, 0xae, 0x01, 0xff, 0x02, - 0xc8, 0x02, 0x0d, 0x43, 0xb0, 0x06, 0x60, 0x01, 0xc1, 0x00, 0x4f, 0x8a, - 0x67, 0x61, 0x01, 0x41, 0x43, 0x09, 0x4c, 0x66, 0x01, 0x81, 0x0d, 0x42, - 0x32, 0x00, 0x5f, 0x01, 0xc1, 0x00, 0x48, 0x21, 0x11, 0x6d, 0x01, 0x41, - 0x4f, 0x8a, 0x67, 0x67, 0x01, 0x41, 0x02, 0xc8, 0x02, 0x33, 0x43, 0xbf, - 0x0a, 0x59, 0x01, 0x81, 0x1d, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x64, - 0x01, 0x01, 0xa8, 0x06, 0x42, 0x15, 0x02, 0x5c, 0x01, 0x41, 0x44, 0x2c, - 0x11, 0x65, 0x01, 0x01, 0x4b, 0x8f, 0x17, 0x6b, 0x01, 0x41, 0x80, 0x01, - 0xff, 0x47, 0x22, 0x11, 0x6a, 0x01, 0x01, 0x48, 0xd5, 0x5c, 0x71, 0x01, - 0x41, 0x43, 0x09, 0x4c, 0x69, 0x01, 0x01, 0x03, 0x5f, 0x00, 0x01, 0xff, - 0x47, 0x22, 0x11, 0x6e, 0x01, 0x01, 0x48, 0xd5, 0x5c, 0x72, 0x01, 0x41, - 0x51, 0xa4, 0x56, 0x58, 0x01, 0x01, 0x08, 0xb2, 0xc5, 0x01, 0xff, 0x45, - 0x07, 0x4c, 0x68, 0x01, 0x01, 0x43, 0xbf, 0x0a, 0x5a, 0x01, 0x01, 0x43, - 0xb0, 0x06, 0x62, 0x01, 0x41, 0x4c, 0xb0, 0x38, 0x6c, 0x01, 0x01, 0x43, - 0xd0, 0x09, 0x5b, 0x01, 0xc1, 0x00, 0x49, 0xf2, 0x45, 0x5e, 0x01, 0x41, - 0x55, 0xa7, 0x38, 0x6f, 0x01, 0x01, 0x54, 0xe7, 0x45, 0x5d, 0x01, 0x41, - 0x02, 0xc8, 0x02, 0x5a, 0x04, 0xbf, 0x0a, 0x20, 0x04, 0xd1, 0x5c, 0x01, - 0xff, 0x44, 0x0d, 0x4c, 0x57, 0x01, 0x01, 0x47, 0x8d, 0x6c, 0x50, 0x01, - 0x01, 0xb4, 0x01, 0xff, 0x46, 0x1c, 0xc0, 0x49, 0x01, 0x01, 0x4f, 0x85, - 0x6c, 0x55, 0x01, 0x41, 0x47, 0xf3, 0x45, 0x42, 0x01, 0x01, 0xa8, 0x17, - 0x47, 0x2a, 0x01, 0x40, 0x01, 0x01, 0x09, 0xd5, 0x5c, 0x01, 0xff, 0x47, - 0x8d, 0x6c, 0x54, 0x01, 0x01, 0x47, 0x1b, 0xc0, 0x4d, 0x01, 0x41, 0x43, - 0x23, 0x00, 0x41, 0x01, 0x01, 0x07, 0x23, 0x11, 0x01, 0xff, 0x47, 0x8d, - 0x6c, 0x52, 0x01, 0x01, 0x47, 0x1b, 0xc0, 0x4b, 0x01, 0x41, 0x43, 0x09, - 0x4c, 0x44, 0x01, 0x81, 0x3c, 0x42, 0x32, 0x00, 0x43, 0x01, 0xc1, 0x00, - 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0x45, 0x01, 0x81, 0x1c, 0x47, 0x8d, - 0x6c, 0x4f, 0x01, 0x01, 0xb4, 0x01, 0xff, 0x46, 0x1c, 0xc0, 0x48, 0x01, - 0x01, 0x47, 0x1d, 0x3b, 0x46, 0x01, 0xc1, 0x00, 0x48, 0x1a, 0xc0, 0x4e, - 0x01, 0x41, 0x80, 0x01, 0xff, 0x47, 0x8d, 0x6c, 0x53, 0x01, 0x01, 0x47, - 0x1b, 0xc0, 0x4c, 0x01, 0x41, 0x80, 0x01, 0xff, 0x47, 0x8d, 0x6c, 0x51, - 0x01, 0x01, 0xb4, 0x01, 0xff, 0x46, 0x1c, 0xc0, 0x4a, 0x01, 0x01, 0x47, - 0x1d, 0x3b, 0x47, 0x01, 0xc1, 0x00, 0x48, 0x8c, 0x6c, 0x56, 0x01, 0x41, - 0xa1, 0x9c, 0x01, 0xa2, 0x82, 0x01, 0x4f, 0x2d, 0x6a, 0xa7, 0x2a, 0x80, - 0x75, 0x55, 0x21, 0x3a, 0xdb, 0x22, 0x00, 0xaf, 0x1d, 0x44, 0x2f, 0x03, - 0x3e, 0x00, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4d, 0xea, 0x7f, 0x7a, - 0x2a, 0x00, 0x43, 0xd4, 0x09, 0xd7, 0x22, 0x00, 0x53, 0x07, 0x4b, 0x7c, - 0x2a, 0x40, 0x02, 0x18, 0x00, 0x11, 0x03, 0x32, 0x00, 0x01, 0xff, 0x49, - 0xa8, 0x0c, 0x67, 0x22, 0x00, 0x51, 0x3a, 0x5a, 0xa4, 0x2a, 0x40, 0x4b, - 0x0e, 0x1e, 0x86, 0x2a, 0x00, 0x03, 0x7b, 0x00, 0x25, 0x49, 0xec, 0x00, - 0x77, 0x22, 0x00, 0x50, 0xba, 0x65, 0x7e, 0x2a, 0xc0, 0x00, 0x0a, 0xa5, - 0x3a, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x82, 0x2a, 0x80, 0x06, 0x46, 0x58, - 0x13, 0x80, 0x2a, 0x40, 0x45, 0xc2, 0x00, 0x84, 0x2a, 0x40, 0x45, 0xac, - 0x0c, 0x65, 0x22, 0x00, 0x4a, 0x06, 0x39, 0x73, 0x22, 0x40, 0x54, 0x93, - 0x00, 0xa9, 0x2a, 0x40, 0x4f, 0x2c, 0x6b, 0xa5, 0x2a, 0x00, 0x0a, 0xfc, - 0x38, 0x01, 0xff, 0x45, 0xac, 0x0c, 0x69, 0x22, 0x00, 0x4a, 0x06, 0x39, - 0xe7, 0x22, 0x40, 0x05, 0x5d, 0x00, 0x11, 0x03, 0x1b, 0x00, 0x01, 0xff, - 0x4f, 0x37, 0x6f, 0x8a, 0x2a, 0x00, 0x58, 0x6d, 0x2a, 0x88, 0x2a, 0x40, - 0x61, 0x59, 0x0d, 0x8c, 0x2a, 0x00, 0x61, 0xbc, 0x0d, 0x92, 0x2a, 0x00, - 0x50, 0xb3, 0x02, 0x78, 0x29, 0x00, 0xb3, 0x01, 0xff, 0x07, 0x23, 0xcf, - 0x06, 0x70, 0xd9, 0x00, 0x94, 0x2a, 0x40, 0x4f, 0xe6, 0x00, 0x90, 0x2a, - 0x00, 0x48, 0x52, 0x28, 0x8e, 0x2a, 0x40, 0x4b, 0x37, 0x99, 0x93, 0xf3, - 0x01, 0x05, 0x1f, 0xe6, 0x0c, 0x43, 0xc7, 0x63, 0x47, 0xf3, 0x01, 0x49, - 0x90, 0x22, 0x60, 0x00, 0x40, 0x4e, 0x9a, 0x74, 0x57, 0x13, 0x01, 0x07, - 0xc1, 0x05, 0x8b, 0x01, 0x42, 0xe9, 0x04, 0x50, 0x13, 0x01, 0x05, 0x2f, - 0x03, 0x48, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x35, 0x42, 0x27, 0x01, - 0x47, 0x13, 0x01, 0xe9, 0x3f, 0x13, 0x81, 0x26, 0x42, 0x69, 0x05, 0x4b, - 0x13, 0x01, 0xf5, 0x41, 0x13, 0x81, 0x17, 0x08, 0x9b, 0xbe, 0x01, 0xff, - 0xec, 0x62, 0x13, 0x81, 0x09, 0xf2, 0x43, 0x13, 0xc1, 0x00, 0xf2, 0x44, - 0x13, 0x41, 0xec, 0x63, 0x13, 0x41, 0xf5, 0x42, 0x13, 0x41, 0xe9, 0x40, - 0x13, 0x41, 0xe1, 0x3e, 0x13, 0x01, 0xe9, 0x48, 0x13, 0x01, 0xf5, 0x4c, - 0x13, 0x41, 0xa1, 0x2b, 0xa3, 0x1d, 0x45, 0x5a, 0x3e, 0x3c, 0x13, 0x01, - 0x45, 0xce, 0xe6, 0x5d, 0x13, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, - 0x5d, 0x23, 0x4d, 0x13, 0x01, 0x45, 0xa3, 0x4a, 0x03, 0x13, 0x41, 0x4a, - 0x50, 0x23, 0x01, 0x13, 0x01, 0x57, 0xc7, 0x15, 0x00, 0x13, 0x41, 0x47, - 0xd1, 0x15, 0x02, 0x13, 0x01, 0x47, 0xf2, 0x86, 0x3d, 0x13, 0x41, 0xe1, - 0x05, 0x13, 0x81, 0x9a, 0x02, 0xa2, 0x8d, 0x02, 0xa3, 0x80, 0x02, 0xa4, - 0xe7, 0x01, 0x42, 0x27, 0x01, 0x0f, 0x13, 0x01, 0xa7, 0xd4, 0x01, 0x42, - 0x22, 0x00, 0x39, 0x13, 0x01, 0xe9, 0x07, 0x13, 0x81, 0xc4, 0x01, 0xaa, - 0xb7, 0x01, 0xab, 0xaa, 0x01, 0xac, 0x9d, 0x01, 0x42, 0x6c, 0x00, 0x2e, - 0x13, 0x01, 0xae, 0x7f, 0x42, 0x69, 0x05, 0x13, 0x13, 0x01, 0xb0, 0x6d, - 0x42, 0x71, 0x00, 0x30, 0x13, 0x01, 0xb3, 0x55, 0xb4, 0x3c, 0xf5, 0x09, - 0x13, 0x81, 0x33, 0xb6, 0x06, 0x42, 0x34, 0x22, 0x2f, 0x13, 0x41, 0xe1, - 0x35, 0x13, 0x01, 0x05, 0x8b, 0x0a, 0x17, 0x07, 0x9c, 0xbe, 0x01, 0xff, - 0xec, 0x0c, 0x13, 0x81, 0x09, 0xf2, 0x0b, 0x13, 0xc1, 0x00, 0xf2, 0x60, - 0x13, 0x41, 0xec, 0x61, 0x13, 0x41, 0x48, 0xd0, 0x15, 0x5e, 0x13, 0x01, - 0x4f, 0xe6, 0x16, 0x5f, 0x13, 0x41, 0xf5, 0x0a, 0x13, 0x41, 0xe1, 0x24, - 0x13, 0x01, 0x42, 0x22, 0x00, 0x25, 0x13, 0x01, 0xb4, 0x01, 0xff, 0xe1, - 0x1f, 0x13, 0x01, 0x42, 0x22, 0x00, 0x20, 0x13, 0x41, 0xe1, 0x38, 0x13, - 0x01, 0x42, 0x22, 0x00, 0x36, 0x13, 0x01, 0x42, 0x15, 0x06, 0x37, 0x13, - 0x41, 0xe1, 0x2a, 0x13, 0x01, 0x42, 0x22, 0x00, 0x2b, 0x13, 0x41, 0xe1, - 0x28, 0x13, 0x01, 0x42, 0x24, 0x02, 0x19, 0x13, 0x01, 0x42, 0xff, 0x04, - 0x23, 0x13, 0x01, 0x42, 0x34, 0x22, 0x1e, 0x13, 0x41, 0xe1, 0x32, 0x13, - 0x01, 0x42, 0x74, 0x00, 0x33, 0x13, 0x41, 0xe1, 0x15, 0x13, 0x01, 0x42, - 0x22, 0x00, 0x16, 0x13, 0x41, 0xe1, 0x1c, 0x13, 0x01, 0x42, 0x22, 0x00, - 0x1d, 0x13, 0x41, 0xe9, 0x08, 0x13, 0x41, 0xe1, 0x17, 0x13, 0x01, 0x42, - 0x22, 0x00, 0x18, 0x13, 0x41, 0xe1, 0x26, 0x13, 0x01, 0xa4, 0x06, 0x42, - 0x22, 0x00, 0x27, 0x13, 0x41, 0xe1, 0x21, 0x13, 0x01, 0x42, 0x22, 0x00, - 0x22, 0x13, 0x41, 0xe1, 0x1a, 0x13, 0x01, 0x42, 0x22, 0x00, 0x1b, 0x13, - 0x41, 0xe1, 0x2c, 0x13, 0x01, 0x42, 0x22, 0x00, 0x2d, 0x13, 0x41, 0xe1, - 0x06, 0x13, 0x01, 0xe9, 0x10, 0x13, 0x01, 0xf5, 0x14, 0x13, 0x41, 0xa1, - 0xd5, 0x01, 0x45, 0xd7, 0xd9, 0x7d, 0xf9, 0x01, 0x44, 0xba, 0xed, 0xcc, - 0xf3, 0x01, 0x46, 0x50, 0xdb, 0x7d, 0xf7, 0x01, 0x43, 0x55, 0x0d, 0xbf, - 0xfa, 0x01, 0x45, 0x46, 0xe7, 0x8d, 0xf9, 0x01, 0x0c, 0xfd, 0x93, 0x01, - 0xff, 0xa1, 0xa3, 0x01, 0x47, 0x91, 0xcc, 0x31, 0x03, 0x01, 0x44, 0x3e, - 0xec, 0x33, 0x03, 0x01, 0x43, 0xc2, 0xa9, 0x39, 0x03, 0x01, 0x45, 0x4a, - 0xe3, 0x46, 0x03, 0x01, 0x44, 0xba, 0xec, 0x32, 0x03, 0x01, 0xa8, 0x77, - 0xa9, 0x69, 0x43, 0x74, 0xb8, 0x3e, 0x03, 0x01, 0x45, 0xda, 0xe4, 0x3a, - 0x03, 0x01, 0x45, 0xf8, 0xe4, 0x3b, 0x03, 0x01, 0x45, 0x19, 0x90, 0x3c, - 0x03, 0x01, 0xae, 0x38, 0x45, 0x88, 0xe6, 0x49, 0x03, 0x01, 0x48, 0x12, - 0xc7, 0x40, 0x03, 0x01, 0x48, 0x62, 0xc7, 0x35, 0x03, 0x01, 0x45, 0x0a, - 0xe7, 0x42, 0x03, 0x01, 0x45, 0xa0, 0xe7, 0x43, 0x03, 0x01, 0xb4, 0x0c, - 0x44, 0x92, 0xef, 0x3f, 0x03, 0x01, 0x45, 0x2b, 0xe9, 0x45, 0x03, 0x41, - 0x44, 0x72, 0xec, 0x44, 0x03, 0x01, 0x45, 0xfe, 0xe3, 0x38, 0x03, 0x41, - 0x45, 0x74, 0xe1, 0x3d, 0x03, 0x01, 0x03, 0xc3, 0x07, 0x01, 0xff, 0x48, - 0x21, 0x11, 0x4a, 0x03, 0x01, 0x42, 0x2e, 0x11, 0x41, 0x03, 0x41, 0x44, - 0xae, 0xec, 0x47, 0x03, 0x01, 0x43, 0xa6, 0xc8, 0x36, 0x03, 0x41, 0x43, - 0xcf, 0x8f, 0x37, 0x03, 0x01, 0x44, 0xd2, 0xef, 0x48, 0x03, 0x41, 0x43, - 0x77, 0xe1, 0x30, 0x03, 0x01, 0x45, 0x3f, 0xe4, 0x34, 0x03, 0x41, 0x45, - 0xe4, 0xe4, 0x45, 0xf9, 0x01, 0xf4, 0x10, 0xf4, 0x41, 0xa1, 0x1b, 0x4a, - 0x93, 0xa7, 0xe6, 0x29, 0x00, 0xaf, 0x01, 0xff, 0x51, 0x1b, 0x57, 0x10, - 0xf3, 0x01, 0x43, 0xec, 0x49, 0xe4, 0xf9, 0x01, 0x49, 0xbf, 0xbe, 0x1f, - 0xf3, 0x41, 0x08, 0x1a, 0x5a, 0x06, 0x4a, 0xe1, 0xae, 0x5b, 0xf9, 0x41, - 0x0f, 0xb9, 0x05, 0xc6, 0x02, 0x0d, 0x4b, 0x08, 0x01, 0xff, 0x43, 0x9f, - 0xf0, 0x30, 0x2c, 0x00, 0xa2, 0xac, 0x02, 0xa3, 0x9d, 0x02, 0xa4, 0x88, - 0x02, 0xa6, 0xf9, 0x01, 0x47, 0x74, 0xce, 0x33, 0x2c, 0x00, 0x44, 0xee, - 0xec, 0x48, 0x2c, 0x00, 0xe9, 0x3b, 0x2c, 0x80, 0xc2, 0x01, 0x44, 0x86, - 0xed, 0x3d, 0x2c, 0x00, 0xac, 0xad, 0x01, 0x47, 0x63, 0x69, 0x3f, 0x2c, - 0x00, 0x45, 0xd4, 0xe5, 0x40, 0x2c, 0x00, 0xaf, 0x92, 0x01, 0xb0, 0x85, - 0x01, 0x45, 0x4b, 0xe7, 0x43, 0x2c, 0x00, 0xb3, 0x51, 0xb4, 0x3d, 0x43, - 0x3e, 0xd3, 0x46, 0x2c, 0x00, 0x44, 0xa6, 0xef, 0x32, 0x2c, 0x00, 0xb9, - 0x0f, 0xba, 0x01, 0xff, 0x45, 0xe6, 0xe2, 0x38, 0x2c, 0x00, 0x46, 0x94, - 0xd9, 0x36, 0x2c, 0x40, 0x43, 0xb3, 0x00, 0x51, 0x2c, 0x00, 0xa5, 0x08, - 0xef, 0x56, 0x2c, 0x00, 0xf5, 0x53, 0x2c, 0x40, 0xb2, 0x06, 0x43, 0xd7, - 0x09, 0x35, 0x2c, 0x40, 0xe9, 0x50, 0x2c, 0x00, 0xf5, 0x4f, 0x2c, 0x40, - 0x4b, 0x0c, 0xa0, 0x5d, 0x2c, 0x00, 0x42, 0x2f, 0x03, 0x4c, 0x2c, 0x00, - 0x45, 0xfe, 0xe8, 0x45, 0x2c, 0x40, 0xa8, 0x19, 0x44, 0xd2, 0xed, 0x44, - 0x2c, 0x00, 0x48, 0xd1, 0xbc, 0x54, 0x2c, 0x80, 0x06, 0x49, 0x9e, 0xbb, - 0x52, 0x2c, 0x40, 0x4a, 0x5f, 0xa4, 0x55, 0x2c, 0x40, 0xe1, 0x4e, 0x2c, - 0x00, 0x42, 0x12, 0x00, 0x4b, 0x2c, 0xc0, 0x00, 0x43, 0x3a, 0x89, 0x5c, - 0x2c, 0x40, 0xe5, 0x4a, 0x2c, 0x00, 0x45, 0x35, 0xdc, 0x42, 0x2c, 0x40, - 0x42, 0xd1, 0x15, 0x41, 0x2c, 0x00, 0x42, 0x5c, 0x01, 0x49, 0x2c, 0x40, - 0x4f, 0x5b, 0x69, 0x5e, 0x2c, 0x00, 0x46, 0x20, 0xd0, 0x3e, 0x2c, 0x40, - 0x4b, 0xf1, 0x9d, 0x3a, 0x2c, 0x00, 0x07, 0x16, 0x21, 0x0f, 0x02, 0xb3, - 0x27, 0x01, 0xff, 0xe5, 0x39, 0x2c, 0x00, 0x44, 0x1d, 0x84, 0x5b, 0x2c, - 0x40, 0x47, 0xb4, 0xcc, 0x59, 0x2c, 0x00, 0x49, 0xd0, 0xbc, 0x57, 0x2c, - 0x40, 0x43, 0xbc, 0x05, 0x5a, 0x2c, 0x00, 0x44, 0xe5, 0xbc, 0x47, 0x2c, - 0x40, 0x45, 0x94, 0xe4, 0x3c, 0x2c, 0x00, 0x44, 0x76, 0xee, 0x34, 0x2c, - 0x00, 0x44, 0x0a, 0xf0, 0x37, 0x2c, 0x40, 0x4d, 0x68, 0x7f, 0x5f, 0x2c, - 0x00, 0x45, 0x70, 0x7f, 0x4d, 0x2c, 0x40, 0x46, 0xb5, 0xcc, 0x58, 0x2c, - 0x00, 0x43, 0xbc, 0xcf, 0x31, 0x2c, 0x40, 0x43, 0x9f, 0xf0, 0x00, 0x2c, - 0x00, 0xa2, 0xac, 0x02, 0xa3, 0x9d, 0x02, 0xa4, 0x88, 0x02, 0xa6, 0xf9, - 0x01, 0x47, 0x74, 0xce, 0x03, 0x2c, 0x00, 0x44, 0xee, 0xec, 0x18, 0x2c, - 0x00, 0xe9, 0x0b, 0x2c, 0x80, 0xc2, 0x01, 0x44, 0x86, 0xed, 0x0d, 0x2c, - 0x00, 0xac, 0xad, 0x01, 0x47, 0x63, 0x69, 0x0f, 0x2c, 0x00, 0x45, 0xd4, - 0xe5, 0x10, 0x2c, 0x00, 0xaf, 0x92, 0x01, 0xb0, 0x85, 0x01, 0x45, 0x4b, - 0xe7, 0x13, 0x2c, 0x00, 0xb3, 0x51, 0xb4, 0x3d, 0x43, 0x3e, 0xd3, 0x16, - 0x2c, 0x00, 0x44, 0xa6, 0xef, 0x02, 0x2c, 0x00, 0xb9, 0x0f, 0xba, 0x01, - 0xff, 0x45, 0xe6, 0xe2, 0x08, 0x2c, 0x00, 0x46, 0x94, 0xd9, 0x06, 0x2c, - 0x40, 0x43, 0xb3, 0x00, 0x21, 0x2c, 0x00, 0xa5, 0x08, 0xef, 0x26, 0x2c, - 0x00, 0xf5, 0x23, 0x2c, 0x40, 0xb2, 0x06, 0x43, 0xd7, 0x09, 0x05, 0x2c, - 0x40, 0xe9, 0x20, 0x2c, 0x00, 0xf5, 0x1f, 0x2c, 0x40, 0x4b, 0x0c, 0xa0, - 0x2d, 0x2c, 0x00, 0x42, 0x2f, 0x03, 0x1c, 0x2c, 0x00, 0x45, 0xfe, 0xe8, - 0x15, 0x2c, 0x40, 0xa8, 0x19, 0x44, 0xd2, 0xed, 0x14, 0x2c, 0x00, 0x48, - 0xd1, 0xbc, 0x24, 0x2c, 0x80, 0x06, 0x49, 0x9e, 0xbb, 0x22, 0x2c, 0x40, - 0x4a, 0x5f, 0xa4, 0x25, 0x2c, 0x40, 0xe1, 0x1e, 0x2c, 0x00, 0x42, 0x12, - 0x00, 0x1b, 0x2c, 0xc0, 0x00, 0x43, 0x3a, 0x89, 0x2c, 0x2c, 0x40, 0xe5, - 0x1a, 0x2c, 0x00, 0x45, 0x35, 0xdc, 0x12, 0x2c, 0x40, 0x42, 0xd1, 0x15, - 0x11, 0x2c, 0x00, 0x42, 0x5c, 0x01, 0x19, 0x2c, 0x40, 0x4f, 0x5b, 0x69, - 0x2e, 0x2c, 0x00, 0x46, 0x20, 0xd0, 0x0e, 0x2c, 0x40, 0x4b, 0xf1, 0x9d, - 0x0a, 0x2c, 0x00, 0x07, 0x16, 0x21, 0x0f, 0x02, 0xb3, 0x27, 0x01, 0xff, - 0xe5, 0x09, 0x2c, 0x00, 0x44, 0x1d, 0x84, 0x2b, 0x2c, 0x40, 0x47, 0xb4, - 0xcc, 0x29, 0x2c, 0x00, 0x49, 0xd0, 0xbc, 0x27, 0x2c, 0x40, 0x43, 0xbc, - 0x05, 0x2a, 0x2c, 0x00, 0x44, 0xe5, 0xbc, 0x17, 0x2c, 0x40, 0x45, 0x94, - 0xe4, 0x0c, 0x2c, 0x00, 0x44, 0x76, 0xee, 0x04, 0x2c, 0x00, 0x44, 0x0a, - 0xf0, 0x07, 0x2c, 0x40, 0x4d, 0x68, 0x7f, 0x2f, 0x2c, 0x00, 0x45, 0x70, - 0x7f, 0x1d, 0x2c, 0x40, 0x46, 0xb5, 0xcc, 0x28, 0x2c, 0x00, 0x43, 0xbc, - 0xcf, 0x01, 0x2c, 0x40, 0x4a, 0x7b, 0xab, 0x37, 0x21, 0x00, 0x49, 0xee, - 0xb9, 0xda, 0xfa, 0x01, 0xb2, 0x01, 0xff, 0x49, 0x64, 0xb3, 0x92, 0xf9, - 0x01, 0xec, 0x67, 0xf4, 0xc1, 0x00, 0x48, 0x2e, 0x4a, 0xca, 0xf6, 0x41, - 0x42, 0x17, 0x00, 0x99, 0x26, 0x80, 0xc0, 0x09, 0xad, 0xb1, 0x09, 0x43, - 0xde, 0x7c, 0xde, 0xf9, 0x01, 0xaf, 0x0c, 0x4f, 0x26, 0x71, 0xb0, 0x20, - 0x00, 0x47, 0x52, 0xd3, 0x13, 0x30, 0x40, 0x06, 0x53, 0x54, 0x81, 0x09, - 0x06, 0xb2, 0x99, 0x01, 0xff, 0x0f, 0xb9, 0x05, 0xf3, 0x06, 0x07, 0xc1, - 0x05, 0xc1, 0x04, 0x18, 0x95, 0x29, 0x8f, 0x02, 0x53, 0xce, 0x4a, 0xfb, - 0x10, 0x00, 0x0d, 0x4b, 0x08, 0x01, 0xff, 0xa1, 0xf7, 0x01, 0x43, 0xba, - 0x15, 0x01, 0x2d, 0x00, 0xa3, 0xd4, 0x01, 0x43, 0x1d, 0x11, 0x03, 0x2d, - 0x00, 0x42, 0x92, 0x01, 0x04, 0x2d, 0x00, 0xa7, 0xb9, 0x01, 0xa8, 0x9c, - 0x01, 0x42, 0x9e, 0x01, 0x08, 0x2d, 0x00, 0xaa, 0x87, 0x01, 0xab, 0x79, - 0x43, 0xfa, 0x0d, 0x0a, 0x2d, 0x00, 0x43, 0xd5, 0x17, 0x0b, 0x2d, 0x00, - 0x43, 0x7c, 0x26, 0x0c, 0x2d, 0x00, 0x42, 0x10, 0x00, 0x0d, 0x2d, 0x00, - 0xb0, 0x53, 0x43, 0x3b, 0xf1, 0x17, 0x2d, 0x00, 0x43, 0xdf, 0x80, 0x10, - 0x2d, 0x00, 0xb3, 0x39, 0x02, 0x12, 0x00, 0x2d, 0x42, 0xf3, 0x0a, 0x13, - 0x2d, 0x00, 0x43, 0x68, 0x2a, 0x05, 0x2d, 0x00, 0x42, 0x15, 0x01, 0x23, - 0x2d, 0x00, 0x43, 0xcd, 0xeb, 0x1e, 0x2d, 0x00, 0x42, 0x61, 0x1c, 0x27, - 0x2d, 0x00, 0xba, 0x01, 0xff, 0x42, 0x92, 0x01, 0x06, 0x2d, 0x00, 0x43, - 0x65, 0x05, 0x0f, 0x2d, 0x40, 0xee, 0x07, 0x2d, 0x00, 0xf2, 0x12, 0x2d, - 0x40, 0x42, 0x1a, 0x00, 0x11, 0x2d, 0x00, 0x43, 0x0e, 0x16, 0x18, 0x2d, - 0x40, 0x42, 0x17, 0x00, 0x0e, 0x2d, 0x00, 0x43, 0x65, 0x05, 0x14, 0x2d, - 0x40, 0x42, 0x1a, 0x00, 0x09, 0x2d, 0x00, 0x43, 0x65, 0x05, 0x15, 0x2d, - 0x40, 0x43, 0x90, 0x00, 0x1f, 0x2d, 0x00, 0x42, 0x62, 0x01, 0x1b, 0x2d, - 0x40, 0xa1, 0x10, 0xe5, 0x21, 0x2d, 0x00, 0x42, 0xc9, 0x02, 0x22, 0x2d, - 0x00, 0x42, 0x17, 0x50, 0x25, 0x2d, 0x40, 0xe5, 0x20, 0x2d, 0x00, 0xf2, - 0x24, 0x2d, 0x40, 0x42, 0x1a, 0x00, 0x02, 0x2d, 0x00, 0x43, 0x90, 0x00, - 0x16, 0x2d, 0x40, 0x42, 0x1a, 0x00, 0x1a, 0x2d, 0x00, 0xa8, 0x06, 0x42, - 0x62, 0x01, 0x1c, 0x2d, 0x40, 0x42, 0x17, 0x00, 0x1d, 0x2d, 0x00, 0x42, - 0x9e, 0x01, 0x19, 0x2d, 0x40, 0x42, 0x92, 0x01, 0x2d, 0x2d, 0x00, 0xee, - 0x00, 0x2d, 0x40, 0xa1, 0x9a, 0x02, 0x43, 0xba, 0x15, 0x91, 0x1c, 0x00, - 0xa3, 0xf7, 0x01, 0x43, 0x1d, 0x11, 0x93, 0x1c, 0x00, 0xa5, 0xe4, 0x01, - 0x42, 0xc8, 0x02, 0xb6, 0x1c, 0x00, 0xa7, 0xcf, 0x01, 0xa8, 0xab, 0x01, - 0x42, 0x9e, 0x01, 0x98, 0x1c, 0x00, 0xaa, 0x96, 0x01, 0xab, 0x87, 0x01, - 0x02, 0x74, 0x00, 0x79, 0x43, 0xd5, 0x17, 0x9b, 0x1c, 0x00, 0x43, 0x7c, - 0x26, 0x9c, 0x1c, 0x00, 0x42, 0x10, 0x00, 0x9d, 0x1c, 0x00, 0xb0, 0x59, - 0x43, 0x3b, 0xf1, 0xa7, 0x1c, 0x00, 0x43, 0xdf, 0x80, 0xa0, 0x1c, 0x00, - 0xb3, 0x3f, 0xb4, 0x2d, 0x42, 0xf3, 0x0a, 0xa3, 0x1c, 0x00, 0x43, 0x68, - 0x2a, 0x95, 0x1c, 0x00, 0x42, 0x15, 0x01, 0xb3, 0x1c, 0x00, 0x43, 0xcd, - 0xeb, 0xae, 0x1c, 0x00, 0x42, 0x61, 0x1c, 0xb7, 0x1c, 0x00, 0xba, 0x01, - 0xff, 0x42, 0x92, 0x01, 0x96, 0x1c, 0x00, 0x43, 0x65, 0x05, 0x9f, 0x1c, - 0x40, 0xa1, 0x06, 0x49, 0x1d, 0xbe, 0xb9, 0x1c, 0x40, 0xee, 0x97, 0x1c, - 0x00, 0xf2, 0xa2, 0x1c, 0x40, 0x42, 0x1a, 0x00, 0xa1, 0x1c, 0x00, 0x43, - 0x0e, 0x16, 0xa8, 0x1c, 0x40, 0x42, 0x17, 0x00, 0x9e, 0x1c, 0x00, 0x43, - 0x65, 0x05, 0xa4, 0x1c, 0x40, 0x49, 0x45, 0xb4, 0xbf, 0x1c, 0x00, 0xf3, - 0x9a, 0x1c, 0x40, 0x42, 0x1a, 0x00, 0x99, 0x1c, 0x00, 0x43, 0x65, 0x05, - 0xa5, 0x1c, 0x40, 0x43, 0x90, 0x00, 0xaf, 0x1c, 0x00, 0x42, 0x62, 0x01, - 0xab, 0x1c, 0x40, 0xa1, 0x10, 0xe5, 0xb1, 0x1c, 0x00, 0x42, 0xc9, 0x02, - 0xb2, 0x1c, 0x00, 0x42, 0x17, 0x50, 0xb5, 0x1c, 0x40, 0xe5, 0xb0, 0x1c, - 0x00, 0xf2, 0xb4, 0x1c, 0xc0, 0x00, 0x46, 0x67, 0x46, 0xbe, 0x1c, 0x40, - 0x42, 0x1a, 0x00, 0x92, 0x1c, 0x00, 0x43, 0x90, 0x00, 0xa6, 0x1c, 0x40, - 0x44, 0x12, 0x8a, 0xb8, 0x1c, 0x00, 0xee, 0x94, 0x1c, 0x40, 0x42, 0x1a, - 0x00, 0xaa, 0x1c, 0x00, 0xa8, 0x06, 0x42, 0x62, 0x01, 0xac, 0x1c, 0x40, - 0x42, 0x17, 0x00, 0xad, 0x1c, 0x00, 0x42, 0x9e, 0x01, 0xa9, 0x1c, 0x40, - 0x42, 0x92, 0x01, 0xbd, 0x1c, 0x00, 0x42, 0x9e, 0x01, 0xba, 0x1c, 0x00, - 0xee, 0x90, 0x1c, 0x40, 0xa1, 0x9a, 0x02, 0x43, 0xba, 0x15, 0xd1, 0x10, - 0x00, 0xa3, 0xf7, 0x01, 0x43, 0x1d, 0x11, 0xd3, 0x10, 0x00, 0xa5, 0xe4, - 0x01, 0x42, 0xc8, 0x02, 0xf6, 0x10, 0x00, 0xa7, 0xcf, 0x01, 0xa8, 0xab, - 0x01, 0x42, 0x9e, 0x01, 0xd8, 0x10, 0x00, 0xaa, 0x96, 0x01, 0xab, 0x87, - 0x01, 0x02, 0x74, 0x00, 0x79, 0x43, 0xd5, 0x17, 0xdb, 0x10, 0x00, 0x43, - 0x7c, 0x26, 0xdc, 0x10, 0x00, 0x42, 0x10, 0x00, 0xdd, 0x10, 0x00, 0xb0, - 0x59, 0x43, 0x3b, 0xf1, 0xe7, 0x10, 0x00, 0x43, 0xdf, 0x80, 0xe0, 0x10, - 0x00, 0xb3, 0x3f, 0xb4, 0x2d, 0x42, 0xf3, 0x0a, 0xe3, 0x10, 0x00, 0x43, - 0x68, 0x2a, 0xd5, 0x10, 0x00, 0x42, 0x15, 0x01, 0xf3, 0x10, 0x00, 0x43, - 0xcd, 0xeb, 0xee, 0x10, 0x00, 0x42, 0x61, 0x1c, 0xf7, 0x10, 0x00, 0xba, - 0x01, 0xff, 0x42, 0x92, 0x01, 0xd6, 0x10, 0x00, 0x43, 0x65, 0x05, 0xdf, - 0x10, 0x40, 0xa1, 0x06, 0x49, 0x1d, 0xbe, 0xf9, 0x10, 0x40, 0xee, 0xd7, - 0x10, 0x00, 0xf2, 0xe2, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xe1, 0x10, 0x00, - 0x43, 0x0e, 0x16, 0xe8, 0x10, 0x40, 0x42, 0x17, 0x00, 0xde, 0x10, 0x00, - 0x43, 0x65, 0x05, 0xe4, 0x10, 0x40, 0x49, 0x45, 0xb4, 0xff, 0x10, 0x00, - 0xf3, 0xda, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xd9, 0x10, 0x00, 0x43, 0x65, - 0x05, 0xe5, 0x10, 0x40, 0x43, 0x90, 0x00, 0xef, 0x10, 0x00, 0x42, 0x62, - 0x01, 0xeb, 0x10, 0x40, 0xa1, 0x10, 0xe5, 0xf1, 0x10, 0x00, 0x42, 0xc9, - 0x02, 0xf2, 0x10, 0x00, 0x42, 0x17, 0x50, 0xf5, 0x10, 0x40, 0xe5, 0xf0, - 0x10, 0x00, 0xf2, 0xf4, 0x10, 0xc0, 0x00, 0x46, 0x67, 0x46, 0xfe, 0x10, - 0x40, 0x42, 0x1a, 0x00, 0xd2, 0x10, 0x00, 0x43, 0x90, 0x00, 0xe6, 0x10, - 0x40, 0x44, 0x12, 0x8a, 0xf8, 0x10, 0x00, 0xee, 0xd4, 0x10, 0x40, 0x42, - 0x1a, 0x00, 0xea, 0x10, 0x00, 0xa8, 0x06, 0x42, 0x62, 0x01, 0xec, 0x10, - 0x40, 0x42, 0x17, 0x00, 0xed, 0x10, 0x00, 0x42, 0x9e, 0x01, 0xe9, 0x10, - 0x40, 0x42, 0x92, 0x01, 0xfd, 0x10, 0x00, 0x42, 0x9e, 0x01, 0xfa, 0x10, - 0x00, 0xee, 0xd0, 0x10, 0x40, 0xa1, 0xf7, 0x01, 0x43, 0xba, 0x15, 0xa1, - 0x10, 0x00, 0xa3, 0xd4, 0x01, 0x43, 0x1d, 0x11, 0xa3, 0x10, 0x00, 0x42, - 0x92, 0x01, 0xa4, 0x10, 0x00, 0xa7, 0xb9, 0x01, 0xa8, 0x9c, 0x01, 0x42, - 0x9e, 0x01, 0xa8, 0x10, 0x00, 0xaa, 0x87, 0x01, 0xab, 0x79, 0x43, 0xfa, - 0x0d, 0xaa, 0x10, 0x00, 0x43, 0xd5, 0x17, 0xab, 0x10, 0x00, 0x43, 0x7c, - 0x26, 0xac, 0x10, 0x00, 0x42, 0x10, 0x00, 0xad, 0x10, 0x00, 0xb0, 0x53, - 0x43, 0x3b, 0xf1, 0xb7, 0x10, 0x00, 0x43, 0xdf, 0x80, 0xb0, 0x10, 0x00, - 0xb3, 0x39, 0x02, 0x12, 0x00, 0x2d, 0x42, 0xf3, 0x0a, 0xb3, 0x10, 0x00, - 0x43, 0x68, 0x2a, 0xa5, 0x10, 0x00, 0x42, 0x15, 0x01, 0xc3, 0x10, 0x00, - 0x43, 0xcd, 0xeb, 0xbe, 0x10, 0x00, 0x42, 0x61, 0x1c, 0xc7, 0x10, 0x00, - 0xba, 0x01, 0xff, 0x42, 0x92, 0x01, 0xa6, 0x10, 0x00, 0x43, 0x65, 0x05, - 0xaf, 0x10, 0x40, 0xee, 0xa7, 0x10, 0x00, 0xf2, 0xb2, 0x10, 0x40, 0x42, - 0x1a, 0x00, 0xb1, 0x10, 0x00, 0x43, 0x0e, 0x16, 0xb8, 0x10, 0x40, 0x42, - 0x17, 0x00, 0xae, 0x10, 0x00, 0x43, 0x65, 0x05, 0xb4, 0x10, 0x40, 0x42, - 0x1a, 0x00, 0xa9, 0x10, 0x00, 0x43, 0x65, 0x05, 0xb5, 0x10, 0x40, 0x43, - 0x90, 0x00, 0xbf, 0x10, 0x00, 0x42, 0x62, 0x01, 0xbb, 0x10, 0x40, 0xa1, - 0x10, 0xe5, 0xc1, 0x10, 0x00, 0x42, 0xc9, 0x02, 0xc2, 0x10, 0x00, 0x42, - 0x17, 0x50, 0xc5, 0x10, 0x40, 0xe5, 0xc0, 0x10, 0x00, 0xf2, 0xc4, 0x10, - 0x40, 0x42, 0x1a, 0x00, 0xa2, 0x10, 0x00, 0x43, 0x90, 0x00, 0xb6, 0x10, - 0x40, 0x42, 0x1a, 0x00, 0xba, 0x10, 0x00, 0xa8, 0x06, 0x42, 0x62, 0x01, - 0xbc, 0x10, 0x40, 0x42, 0x17, 0x00, 0xbd, 0x10, 0x00, 0x42, 0x9e, 0x01, - 0xb9, 0x10, 0x40, 0x42, 0x92, 0x01, 0xcd, 0x10, 0x00, 0xee, 0xa0, 0x10, - 0x40, 0x4b, 0xbc, 0x95, 0x3a, 0x22, 0x00, 0x08, 0xa4, 0x0c, 0x01, 0xff, - 0x45, 0xac, 0x0c, 0x51, 0x22, 0x00, 0x4a, 0x06, 0x39, 0x4e, 0x22, 0x40, - 0x46, 0x2f, 0xb8, 0x8e, 0xf4, 0x01, 0x43, 0x06, 0x07, 0x4a, 0x26, 0x40, - 0x05, 0x50, 0x00, 0x01, 0xff, 0x48, 0x8a, 0xbf, 0xee, 0x26, 0x00, 0x47, - 0x61, 0xd1, 0xed, 0x26, 0x40, 0x46, 0x08, 0xdb, 0xb2, 0xf3, 0x01, 0xb2, - 0x01, 0xff, 0x03, 0x63, 0x1f, 0x06, 0x43, 0x91, 0x04, 0xc4, 0xf9, 0x41, - 0xa3, 0x96, 0x02, 0x06, 0xc4, 0x06, 0xcf, 0x01, 0x46, 0x1a, 0x62, 0x6e, - 0x0d, 0x01, 0x4a, 0x6d, 0x96, 0x8f, 0x0d, 0x01, 0x49, 0x45, 0x70, 0x8e, - 0x0d, 0x01, 0x52, 0x78, 0x53, 0x6f, 0x0d, 0x01, 0xb3, 0x25, 0x06, 0x6c, - 0x38, 0x01, 0xff, 0x4b, 0x72, 0x38, 0x4e, 0x0d, 0x01, 0x05, 0x2f, 0x03, - 0x01, 0xff, 0xe1, 0x4a, 0x0d, 0x01, 0xe5, 0x69, 0x0d, 0x81, 0x08, 0xe9, - 0x4b, 0x0d, 0x01, 0xef, 0x4c, 0x0d, 0x41, 0xe5, 0x4d, 0x0d, 0x41, 0x0c, - 0x4c, 0x08, 0x06, 0x44, 0x00, 0xe8, 0x4f, 0x0d, 0x41, 0xe1, 0x70, 0x0d, - 0x01, 0x42, 0x16, 0x00, 0x74, 0x0d, 0x01, 0x42, 0x37, 0x00, 0x71, 0x0d, - 0x01, 0x42, 0xa1, 0x10, 0x7a, 0x0d, 0x01, 0x42, 0xe1, 0x07, 0x80, 0x0d, - 0x01, 0x42, 0x24, 0x02, 0x79, 0x0d, 0x01, 0x42, 0x22, 0x00, 0x83, 0x0d, - 0x01, 0x42, 0xbd, 0x26, 0x75, 0x0d, 0x01, 0x42, 0x1b, 0x02, 0x73, 0x0d, - 0x01, 0x42, 0x74, 0x00, 0x78, 0x0d, 0x01, 0x42, 0x6c, 0x00, 0x72, 0x0d, - 0x01, 0xae, 0x3a, 0x04, 0xa6, 0x24, 0x2a, 0x42, 0x6c, 0x09, 0x82, 0x0d, - 0x01, 0x42, 0x71, 0x00, 0x7e, 0x0d, 0x01, 0x42, 0x15, 0x06, 0x76, 0x0d, - 0x01, 0x42, 0x12, 0x00, 0x7d, 0x0d, 0x01, 0x42, 0xa9, 0x01, 0x77, 0x0d, - 0x01, 0x42, 0x4c, 0x26, 0x7b, 0x0d, 0x01, 0x42, 0x34, 0x22, 0x7c, 0x0d, - 0x41, 0x42, 0x1b, 0x02, 0x84, 0x0d, 0x01, 0x42, 0xff, 0x04, 0x85, 0x0d, - 0x41, 0xe1, 0x81, 0x0d, 0x01, 0x42, 0x34, 0x22, 0x7f, 0x0d, 0x41, 0x45, - 0xc3, 0x0a, 0x48, 0x0d, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x49, 0x0d, - 0x01, 0x43, 0xbf, 0x0a, 0x41, 0x0d, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, - 0xa1, 0x1d, 0x40, 0x0d, 0x41, 0x44, 0x25, 0x01, 0x43, 0x0d, 0x01, 0x42, - 0x15, 0x02, 0x42, 0x0d, 0x41, 0x44, 0x27, 0x1d, 0x47, 0x0d, 0x01, 0x42, - 0x60, 0x25, 0x46, 0x0d, 0x41, 0x43, 0xa7, 0x05, 0x45, 0x0d, 0x01, 0x43, - 0xcb, 0x06, 0x44, 0x0d, 0x41, 0x0e, 0xba, 0x05, 0x24, 0xaf, 0x01, 0xff, - 0x0a, 0x5d, 0xab, 0x11, 0x08, 0x59, 0x32, 0x01, 0xff, 0x4f, 0xe0, 0x6b, - 0x6a, 0x0d, 0x01, 0x51, 0xf5, 0x5a, 0x6d, 0x0d, 0x41, 0x47, 0x9a, 0x1d, - 0x6b, 0x0d, 0x01, 0x4e, 0x9c, 0x60, 0x6c, 0x0d, 0x41, 0xe1, 0x50, 0x0d, - 0x01, 0x42, 0x16, 0x00, 0x54, 0x0d, 0x01, 0x42, 0x37, 0x00, 0x51, 0x0d, - 0x01, 0x42, 0xa1, 0x10, 0x5a, 0x0d, 0x01, 0x42, 0xe1, 0x07, 0x60, 0x0d, - 0x01, 0x42, 0x24, 0x02, 0x59, 0x0d, 0x01, 0x42, 0x22, 0x00, 0x63, 0x0d, - 0x01, 0x42, 0xbd, 0x26, 0x55, 0x0d, 0x01, 0x42, 0x1b, 0x02, 0x53, 0x0d, - 0x01, 0x42, 0x74, 0x00, 0x58, 0x0d, 0x01, 0x42, 0x6c, 0x00, 0x52, 0x0d, - 0x01, 0xae, 0x3a, 0x04, 0xa6, 0x24, 0x2a, 0x42, 0x6c, 0x09, 0x62, 0x0d, - 0x01, 0x42, 0x71, 0x00, 0x5e, 0x0d, 0x01, 0x42, 0x15, 0x06, 0x56, 0x0d, - 0x01, 0x42, 0x12, 0x00, 0x5d, 0x0d, 0x01, 0x42, 0xa9, 0x01, 0x57, 0x0d, - 0x01, 0x42, 0x4c, 0x26, 0x5b, 0x0d, 0x01, 0x42, 0x34, 0x22, 0x5c, 0x0d, - 0x41, 0x42, 0x1b, 0x02, 0x64, 0x0d, 0x01, 0x42, 0xff, 0x04, 0x65, 0x0d, - 0x41, 0xe1, 0x61, 0x0d, 0x01, 0x42, 0x34, 0x22, 0x5f, 0x0d, 0x41, 0xa1, - 0xf0, 0x0a, 0xa5, 0xbc, 0x0a, 0xa9, 0xe6, 0x08, 0xac, 0xca, 0x07, 0xaf, - 0x8c, 0x06, 0xb2, 0x9b, 0x05, 0xb5, 0x01, 0xff, 0x47, 0xef, 0xcd, 0xfd, - 0x26, 0x00, 0x02, 0x0f, 0x07, 0x1a, 0xae, 0x06, 0x42, 0x1b, 0x03, 0xdb, - 0x23, 0x40, 0x51, 0x2b, 0x58, 0x61, 0x20, 0x00, 0x48, 0x2a, 0xc3, 0xb1, - 0x26, 0x00, 0x43, 0x50, 0xc5, 0x08, 0xce, 0x41, 0x80, 0xcf, 0x04, 0x06, - 0xe0, 0x4e, 0x01, 0xff, 0xa1, 0xb5, 0x04, 0x4a, 0x21, 0xa6, 0xe4, 0xff, - 0x00, 0xa3, 0x88, 0x04, 0xa4, 0xb9, 0x03, 0xa5, 0xaa, 0x03, 0x49, 0x15, - 0x16, 0x0e, 0xff, 0x00, 0x02, 0x87, 0x00, 0x93, 0x03, 0x4c, 0x15, 0x8e, - 0x0d, 0xff, 0x00, 0xac, 0x83, 0x01, 0x46, 0x04, 0x6f, 0xe3, 0xff, 0x00, - 0xae, 0x6f, 0xb0, 0x5b, 0x02, 0x7c, 0x00, 0x4b, 0xb2, 0x26, 0xb3, 0x18, - 0x45, 0xad, 0x22, 0x5e, 0xff, 0x00, 0x4d, 0x7e, 0x0b, 0x5c, 0xff, 0x00, - 0x48, 0xd2, 0xc9, 0xe6, 0xff, 0x00, 0x48, 0xc0, 0x7d, 0xe5, 0xff, 0x40, - 0x48, 0x6f, 0x58, 0x1b, 0xff, 0x00, 0x46, 0x6a, 0x30, 0x0f, 0xff, 0x40, - 0x4e, 0xcd, 0x70, 0x3c, 0xff, 0x00, 0x05, 0xc9, 0x00, 0x01, 0xff, 0x4d, - 0x23, 0x0b, 0x5d, 0xff, 0x00, 0x4b, 0x50, 0x21, 0x09, 0xff, 0x00, 0x4e, - 0x27, 0x26, 0x3d, 0xff, 0x00, 0x51, 0x03, 0x5e, 0x60, 0xff, 0x40, 0x4b, - 0xd8, 0x33, 0x1f, 0xff, 0x00, 0x4c, 0xf0, 0x04, 0x02, 0xff, 0x40, 0x4b, - 0xc6, 0x99, 0x05, 0xff, 0x00, 0x48, 0x46, 0x70, 0x0b, 0xff, 0x00, 0x49, - 0x5c, 0xad, 0xe1, 0xff, 0x40, 0x47, 0x00, 0x72, 0xe2, 0xff, 0x00, 0x4a, - 0x8a, 0x66, 0x03, 0xff, 0x40, 0x05, 0xb4, 0x05, 0x2a, 0xa5, 0x06, 0x47, - 0xac, 0x88, 0x3f, 0xff, 0x40, 0x03, 0xc5, 0x00, 0x06, 0x4c, 0x9d, 0x93, - 0x1c, 0xff, 0x40, 0x4d, 0x23, 0x0b, 0x5b, 0xff, 0x00, 0x4b, 0x50, 0x21, - 0x08, 0xff, 0x00, 0x4e, 0x27, 0x26, 0x3b, 0xff, 0x00, 0x51, 0x03, 0x5e, - 0x5f, 0xff, 0x40, 0x0f, 0xb9, 0x05, 0x6d, 0x0d, 0x4b, 0x08, 0x01, 0xff, - 0xe1, 0x41, 0xff, 0x00, 0xe2, 0x42, 0xff, 0x00, 0xe3, 0x43, 0xff, 0x00, - 0xe4, 0x44, 0xff, 0x00, 0xe5, 0x45, 0xff, 0x00, 0xe6, 0x46, 0xff, 0x00, - 0xe7, 0x47, 0xff, 0x00, 0xe8, 0x48, 0xff, 0x00, 0xe9, 0x49, 0xff, 0x00, - 0xea, 0x4a, 0xff, 0x00, 0xeb, 0x4b, 0xff, 0x00, 0xec, 0x4c, 0xff, 0x00, - 0xed, 0x4d, 0xff, 0x00, 0xee, 0x4e, 0xff, 0x00, 0xef, 0x4f, 0xff, 0x00, - 0xf0, 0x50, 0xff, 0x00, 0xf1, 0x51, 0xff, 0x00, 0xf2, 0x52, 0xff, 0x00, - 0xf3, 0x53, 0xff, 0x00, 0xf4, 0x54, 0xff, 0x00, 0xf5, 0x55, 0xff, 0x00, - 0xf6, 0x56, 0xff, 0x00, 0xf7, 0x57, 0xff, 0x00, 0xf8, 0x58, 0xff, 0x00, - 0xf9, 0x59, 0xff, 0x00, 0xfa, 0x5a, 0xff, 0x40, 0xe1, 0x21, 0xff, 0x00, - 0xe2, 0x22, 0xff, 0x00, 0xe3, 0x23, 0xff, 0x00, 0xe4, 0x24, 0xff, 0x00, - 0xe5, 0x25, 0xff, 0x00, 0xe6, 0x26, 0xff, 0x00, 0xe7, 0x27, 0xff, 0x00, - 0xe8, 0x28, 0xff, 0x00, 0xe9, 0x29, 0xff, 0x00, 0xea, 0x2a, 0xff, 0x00, - 0xeb, 0x2b, 0xff, 0x00, 0xec, 0x2c, 0xff, 0x00, 0xed, 0x2d, 0xff, 0x00, - 0xee, 0x2e, 0xff, 0x00, 0xef, 0x2f, 0xff, 0x00, 0xf0, 0x30, 0xff, 0x00, - 0xf1, 0x31, 0xff, 0x00, 0xf2, 0x32, 0xff, 0x00, 0xf3, 0x33, 0xff, 0x00, - 0xf4, 0x34, 0xff, 0x00, 0xf5, 0x35, 0xff, 0x00, 0xf6, 0x36, 0xff, 0x00, - 0xf7, 0x37, 0xff, 0x00, 0xf8, 0x38, 0xff, 0x00, 0xf9, 0x39, 0xff, 0x00, - 0xfa, 0x3a, 0xff, 0x40, 0x4a, 0x8f, 0x22, 0x40, 0xff, 0x00, 0x4f, 0xf9, - 0x58, 0x1e, 0xff, 0x40, 0x4a, 0xfa, 0x12, 0x1d, 0xff, 0x00, 0x4f, 0xae, - 0x00, 0x01, 0xff, 0x40, 0x05, 0xc5, 0x06, 0x06, 0x4a, 0xf6, 0x98, 0x04, - 0xff, 0x40, 0x45, 0xc3, 0x0a, 0x18, 0xff, 0x00, 0xa6, 0x2e, 0x44, 0x46, - 0x2a, 0x19, 0xff, 0x00, 0x43, 0xbf, 0x0a, 0x11, 0xff, 0x00, 0xb3, 0x14, - 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x10, 0xff, 0x40, 0x44, 0x25, 0x01, 0x13, - 0xff, 0x00, 0x42, 0x15, 0x02, 0x12, 0xff, 0x40, 0x44, 0x27, 0x1d, 0x17, - 0xff, 0x00, 0x42, 0x60, 0x25, 0x16, 0xff, 0x40, 0x43, 0xa7, 0x05, 0x15, - 0xff, 0x00, 0x43, 0xcb, 0x06, 0x14, 0xff, 0x40, 0x48, 0xc9, 0x99, 0xe0, - 0xff, 0x00, 0x50, 0xa5, 0x04, 0x3e, 0xff, 0x00, 0xaf, 0x01, 0xff, 0x43, - 0x03, 0x12, 0x1a, 0xff, 0x00, 0x02, 0xea, 0x04, 0x01, 0xff, 0xe1, 0x0c, - 0xff, 0x00, 0x49, 0x34, 0xb6, 0x20, 0xff, 0x40, 0x48, 0x2e, 0x3d, 0x06, - 0xff, 0x00, 0x49, 0x92, 0x35, 0x07, 0xff, 0x00, 0x47, 0xee, 0x0c, 0x0a, - 0xff, 0x40, 0x45, 0x33, 0x01, 0x88, 0x25, 0x00, 0x05, 0x28, 0x1b, 0x0c, - 0x4a, 0x01, 0xad, 0xd7, 0x27, 0x00, 0x44, 0x2a, 0x03, 0x2e, 0x00, 0x40, - 0x46, 0xeb, 0x07, 0x15, 0xf3, 0x01, 0x49, 0xc8, 0xbe, 0x1d, 0xf3, 0x41, - 0xa1, 0x45, 0xa5, 0x2c, 0x4a, 0x4b, 0xa9, 0x64, 0xf3, 0x01, 0xaf, 0x01, - 0xff, 0x46, 0x8f, 0x28, 0x38, 0xf4, 0x01, 0x03, 0xe7, 0x0f, 0x0d, 0x42, - 0xa7, 0x01, 0x22, 0x23, 0xc0, 0x00, 0x58, 0x8d, 0x28, 0x26, 0xf6, 0x41, - 0x51, 0x80, 0x58, 0x25, 0xf4, 0x01, 0x66, 0x2e, 0x05, 0xac, 0x27, 0x40, - 0x4a, 0x7a, 0x99, 0x76, 0xf9, 0x01, 0x06, 0x38, 0xdb, 0x01, 0xff, 0x48, - 0xca, 0xc0, 0xa3, 0x20, 0x00, 0x43, 0xee, 0x9b, 0x5f, 0xf3, 0x41, 0x06, - 0x9a, 0x16, 0x17, 0x08, 0xa2, 0xc5, 0x01, 0xff, 0x44, 0xca, 0xeb, 0xbe, - 0xf5, 0x01, 0x47, 0x3a, 0x89, 0xbc, 0xf5, 0x01, 0x45, 0xf3, 0xd2, 0xbd, - 0xf5, 0x41, 0x4d, 0xd7, 0x84, 0x5f, 0x21, 0x00, 0x45, 0xf9, 0x0d, 0x44, - 0x20, 0x40, 0xe7, 0x2b, 0xf3, 0x81, 0xaf, 0x01, 0x02, 0x5b, 0x1a, 0x9e, - 0x01, 0x44, 0x2a, 0xee, 0xd5, 0xfa, 0x01, 0x42, 0xf0, 0x04, 0xb6, 0xf9, - 0x81, 0x8a, 0x01, 0xb2, 0x55, 0xb5, 0x06, 0x46, 0x50, 0xde, 0x8a, 0xf9, - 0x41, 0x45, 0x03, 0x07, 0xf2, 0x26, 0x00, 0xb2, 0x01, 0xff, 0x80, 0x0c, - 0x4d, 0xbf, 0x7e, 0x05, 0x20, 0x00, 0x47, 0x17, 0x9a, 0x1c, 0x22, 0x40, - 0x57, 0x46, 0x1c, 0x23, 0x27, 0x00, 0xa3, 0x22, 0x04, 0xb4, 0x0b, 0x12, - 0x4b, 0x4f, 0x9c, 0x40, 0xf3, 0x01, 0x52, 0x4b, 0x2b, 0xc6, 0xf7, 0x01, - 0x58, 0xcd, 0x2a, 0x22, 0x27, 0x40, 0x44, 0xb9, 0x00, 0x5b, 0x20, 0x00, - 0x4b, 0xb8, 0x0b, 0x58, 0x20, 0x40, 0x53, 0xd7, 0x49, 0x25, 0x27, 0x00, - 0x63, 0xcf, 0x0a, 0x94, 0x2b, 0x40, 0x44, 0x6b, 0x6a, 0x00, 0x22, 0x00, - 0x43, 0xe2, 0x7a, 0xa9, 0x22, 0x00, 0xab, 0x0c, 0x46, 0xc4, 0xc6, 0x0c, - 0x00, 0x00, 0x4b, 0xae, 0xa1, 0x60, 0xf9, 0x41, 0x4a, 0x79, 0xa3, 0x74, - 0xf3, 0x81, 0x0c, 0x4e, 0x76, 0x50, 0x10, 0x2e, 0x00, 0x43, 0xa1, 0x01, - 0xdc, 0x2a, 0x40, 0x4b, 0x35, 0x96, 0x7d, 0xf3, 0x41, 0x46, 0xac, 0xc9, - 0x63, 0xf4, 0x41, 0x42, 0x33, 0x00, 0xc0, 0xf5, 0x01, 0x4c, 0x69, 0x8e, - 0xad, 0xfa, 0x41, 0x42, 0xe7, 0x34, 0x01, 0xf3, 0x41, 0xa1, 0x70, 0xa5, - 0x62, 0xaf, 0x3c, 0xb5, 0x2e, 0xf9, 0xb0, 0xfa, 0xc1, 0x00, 0x04, 0xa1, - 0x01, 0x01, 0xff, 0x44, 0xc0, 0x62, 0x4f, 0xf9, 0x01, 0x48, 0x5d, 0x31, - 0x85, 0xf5, 0x01, 0x46, 0xef, 0x8f, 0xf8, 0xf6, 0xc1, 0x00, 0x05, 0x50, - 0x00, 0x01, 0xff, 0x46, 0x2c, 0xbb, 0x4a, 0xcc, 0x01, 0x49, 0x29, 0xbb, - 0x4b, 0xcc, 0x41, 0x49, 0x84, 0x91, 0x33, 0xf6, 0x01, 0x42, 0x77, 0x00, - 0x88, 0xfa, 0x41, 0x48, 0x8a, 0x38, 0xbe, 0xf4, 0x01, 0x49, 0x20, 0x21, - 0x66, 0x27, 0x00, 0x43, 0x15, 0x01, 0x98, 0x26, 0xc0, 0x00, 0x02, 0x9b, - 0x01, 0x01, 0xff, 0x4c, 0x35, 0x8f, 0xb4, 0xf3, 0x01, 0x4f, 0x89, 0x21, - 0x55, 0x20, 0x40, 0x49, 0xf9, 0xbd, 0x9c, 0x26, 0x00, 0x4a, 0x6b, 0xb1, - 0xaa, 0xf4, 0x41, 0x49, 0xcd, 0xb6, 0xf3, 0x26, 0x00, 0x45, 0x98, 0xe5, - 0xa9, 0xf9, 0x01, 0x4a, 0x65, 0xad, 0x96, 0xcc, 0x01, 0xb4, 0x01, 0xff, - 0x45, 0xd2, 0x95, 0x7f, 0xf9, 0x01, 0x45, 0x63, 0x76, 0xd3, 0xfa, 0x01, - 0x44, 0x9a, 0x23, 0xe5, 0x23, 0x40, 0x59, 0x7a, 0x23, 0xd1, 0xf3, 0x01, - 0x05, 0xa9, 0xe3, 0xbc, 0x01, 0xac, 0x92, 0x01, 0xae, 0x83, 0x01, 0xb2, - 0x30, 0xb3, 0x11, 0x07, 0x63, 0xd4, 0x01, 0xff, 0x44, 0xb9, 0x00, 0x2d, - 0x2e, 0x00, 0x4b, 0xb8, 0x0b, 0x59, 0x20, 0x40, 0xe8, 0x1f, 0xf4, 0x81, - 0x06, 0x4d, 0x61, 0x87, 0x4a, 0xf4, 0x41, 0x57, 0xbd, 0x2b, 0x65, 0xf3, - 0x01, 0x43, 0x3f, 0x1c, 0xc9, 0x25, 0x00, 0x51, 0xb2, 0x59, 0xa3, 0xf3, - 0x41, 0xe5, 0x25, 0xf5, 0x81, 0x27, 0x03, 0x10, 0x18, 0x01, 0xff, 0x4b, - 0xa4, 0x6f, 0x47, 0xf9, 0x01, 0x4c, 0xb0, 0x71, 0x3d, 0x26, 0x80, 0x06, - 0x4e, 0x2a, 0x7b, 0x68, 0x20, 0x40, 0x80, 0x01, 0xff, 0x46, 0xeb, 0x07, - 0x13, 0xf3, 0x01, 0x49, 0xc8, 0xbe, 0x1b, 0xf3, 0x41, 0x02, 0x7a, 0x00, - 0x15, 0x47, 0x4e, 0xcd, 0xe8, 0xf9, 0x01, 0x04, 0x4c, 0x4a, 0x01, 0xff, - 0x49, 0x83, 0xb2, 0x87, 0xf3, 0x01, 0xf3, 0x86, 0xf3, 0x41, 0x45, 0x0e, - 0x9a, 0x92, 0xf6, 0x01, 0x4b, 0x24, 0xa3, 0xef, 0xf9, 0x41, 0x48, 0xda, - 0xc3, 0xc6, 0xfa, 0x01, 0x51, 0xe5, 0x59, 0x0d, 0x2a, 0x40, 0x02, 0x60, - 0x00, 0x11, 0x02, 0x1e, 0x04, 0x01, 0xff, 0x46, 0xe6, 0xd8, 0x9e, 0xf3, - 0x01, 0x49, 0xcb, 0xbb, 0xfd, 0xf4, 0x41, 0x47, 0xf3, 0xcc, 0xc4, 0xf5, - 0x01, 0x46, 0x77, 0xa9, 0xc1, 0xf4, 0x01, 0x49, 0x36, 0x20, 0x1c, 0x00, - 0x40, 0x44, 0x40, 0x12, 0x12, 0x20, 0x00, 0x45, 0x87, 0x4b, 0x07, 0x20, - 0x40, 0xa1, 0x23, 0xad, 0x15, 0x44, 0x22, 0xee, 0x3a, 0xf9, 0x01, 0x02, - 0xcf, 0x00, 0x01, 0xff, 0x48, 0x9a, 0xc4, 0xa1, 0xf3, 0x01, 0xf9, 0xf4, - 0x26, 0x40, 0x48, 0xc0, 0x20, 0x40, 0x26, 0x00, 0x57, 0x41, 0x2e, 0xaa, - 0x00, 0x40, 0x49, 0x40, 0xbc, 0x28, 0xf6, 0x01, 0x44, 0xa3, 0x19, 0xb6, - 0xfa, 0x41, 0xa3, 0x55, 0x43, 0x97, 0xdd, 0xda, 0xf9, 0x01, 0xac, 0x23, - 0x44, 0xca, 0xd8, 0x6a, 0xf4, 0x01, 0x4a, 0x55, 0xae, 0x2b, 0x26, 0x00, - 0x4e, 0x7e, 0x7b, 0x85, 0xf3, 0x01, 0x02, 0xad, 0x04, 0x01, 0xff, 0x44, - 0xaf, 0xde, 0xb7, 0xf5, 0x01, 0x47, 0x37, 0x47, 0xe0, 0xf4, 0x41, 0x44, - 0xae, 0xeb, 0xc6, 0xf9, 0x01, 0xac, 0x01, 0xff, 0x47, 0xf6, 0xcd, 0x42, - 0xf3, 0x01, 0x0d, 0x53, 0x30, 0x01, 0xff, 0x09, 0x46, 0x10, 0x06, 0x5f, - 0xe0, 0x10, 0xde, 0x26, 0x40, 0x50, 0x1f, 0x23, 0x2f, 0x29, 0x00, 0x4f, - 0x15, 0x3d, 0x2c, 0x29, 0x40, 0x02, 0x60, 0x00, 0x0c, 0x4b, 0x7a, 0xa0, - 0x3b, 0x21, 0x00, 0x44, 0xe4, 0x94, 0xed, 0xf3, 0x41, 0x52, 0x02, 0x51, - 0x79, 0xf9, 0x01, 0x47, 0x57, 0xd0, 0x86, 0xf4, 0x01, 0x44, 0xd7, 0x3f, - 0x26, 0xf9, 0x01, 0xb3, 0xcb, 0x01, 0x4f, 0x25, 0x72, 0x18, 0xf6, 0x01, - 0x04, 0x51, 0x00, 0x01, 0xff, 0x80, 0x06, 0x49, 0x32, 0xbb, 0x36, 0xf6, - 0x41, 0x4f, 0x6a, 0x69, 0xe9, 0xfa, 0x01, 0x02, 0xe8, 0x04, 0xa1, 0x01, - 0x4e, 0x5e, 0x75, 0xe4, 0xfa, 0x01, 0x5b, 0xc8, 0x1a, 0x2b, 0xf9, 0x01, - 0x4c, 0xf1, 0x8d, 0x15, 0xf9, 0x01, 0x4f, 0x56, 0x6e, 0x24, 0xf6, 0x01, - 0xad, 0x7b, 0x4f, 0x0a, 0x6f, 0x45, 0xf6, 0x01, 0xaf, 0x46, 0xb0, 0x32, - 0x4c, 0x01, 0x93, 0x44, 0xf6, 0x01, 0x50, 0x2a, 0x66, 0x1b, 0xf6, 0x81, - 0x14, 0xb4, 0x06, 0x5a, 0xe6, 0x21, 0x74, 0xf9, 0x41, 0x4b, 0xda, 0x93, - 0x02, 0xf6, 0x01, 0x4a, 0xf1, 0xa8, 0x12, 0xf9, 0x41, 0x05, 0x19, 0x00, - 0x01, 0xff, 0x53, 0x4a, 0x4c, 0x1d, 0xf6, 0x01, 0x4b, 0xe2, 0xa2, 0x1c, - 0xf6, 0x41, 0x57, 0xa3, 0x2c, 0x73, 0xf9, 0x01, 0x4a, 0x89, 0xa7, 0xe3, - 0xfa, 0x01, 0x4c, 0x41, 0x8f, 0x7a, 0xf9, 0x41, 0x49, 0x7d, 0xb8, 0x46, - 0xf6, 0x01, 0x51, 0x28, 0x5b, 0x28, 0xf9, 0x01, 0x04, 0xcc, 0x04, 0x01, - 0xff, 0x58, 0xfd, 0x27, 0xe2, 0xfa, 0x01, 0x45, 0xfc, 0x07, 0x2e, 0xf6, - 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4e, 0x70, 0x74, 0x30, 0xf6, 0x01, 0x48, - 0xa2, 0xc9, 0x2e, 0xf9, 0x41, 0x4b, 0x6e, 0x99, 0x37, 0xf6, 0x01, 0x46, - 0xd4, 0xdb, 0xd0, 0xf9, 0x41, 0x48, 0x76, 0x74, 0x13, 0xf6, 0x01, 0x48, - 0xba, 0xc9, 0x20, 0xf9, 0x41, 0x57, 0xe8, 0x2c, 0x0b, 0xf6, 0x01, 0x50, - 0x4a, 0x60, 0x31, 0xf6, 0x41, 0x4c, 0xf5, 0x89, 0xe7, 0xf4, 0x01, 0xa1, - 0xa9, 0x48, 0x50, 0x6a, 0x60, 0x0e, 0x2e, 0x00, 0xa7, 0xb1, 0x20, 0x04, - 0xc9, 0x00, 0xe9, 0x1f, 0x4b, 0xb5, 0x9b, 0xcf, 0x23, 0x00, 0xac, 0xdf, - 0x1b, 0xad, 0xab, 0x1a, 0xae, 0xa4, 0x19, 0x02, 0x7c, 0x00, 0xee, 0x17, - 0xb2, 0x99, 0x17, 0xb3, 0x81, 0x17, 0x08, 0xc2, 0xc8, 0x84, 0x02, 0xb5, - 0xd9, 0x01, 0x4d, 0x4b, 0x88, 0x32, 0xf3, 0x01, 0xb8, 0x11, 0x42, 0x4d, - 0x00, 0x41, 0xf4, 0xc1, 0x00, 0x47, 0xce, 0xbd, 0x53, 0xf4, 0x01, 0xf3, - 0x40, 0xf4, 0x41, 0xa3, 0xa6, 0x01, 0xb0, 0x82, 0x01, 0xb4, 0x01, 0xff, - 0x19, 0xb1, 0x06, 0x39, 0xb2, 0x01, 0xff, 0x52, 0x0a, 0x4f, 0x7d, 0xf4, - 0x01, 0x0c, 0xc5, 0x8c, 0x01, 0xff, 0x54, 0x4b, 0x41, 0xb4, 0xf7, 0x01, - 0x4b, 0x9f, 0x5f, 0xa7, 0xf7, 0x01, 0xb3, 0x11, 0x06, 0xad, 0x02, 0x01, - 0xff, 0x46, 0xe7, 0x02, 0x89, 0xf7, 0x01, 0x46, 0xab, 0x05, 0x93, 0xf7, - 0x41, 0x46, 0xa7, 0x18, 0xae, 0xf7, 0x01, 0x52, 0xb6, 0x51, 0xba, 0xf7, - 0x41, 0x45, 0xc3, 0x0a, 0xf8, 0x06, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, - 0xf9, 0x06, 0x00, 0x43, 0xbf, 0x0a, 0xf1, 0x06, 0x00, 0xb3, 0x14, 0xb4, - 0x06, 0x44, 0xa1, 0x1d, 0xf0, 0x06, 0x40, 0x44, 0x25, 0x01, 0xf3, 0x06, - 0x00, 0x42, 0x15, 0x02, 0xf2, 0x06, 0x40, 0x44, 0x27, 0x1d, 0xf7, 0x06, - 0x00, 0x42, 0x60, 0x25, 0xf6, 0x06, 0x40, 0x43, 0xa7, 0x05, 0xf5, 0x06, - 0x00, 0x43, 0xcb, 0x06, 0xf4, 0x06, 0x40, 0x07, 0x2d, 0xd0, 0x06, 0x50, - 0x0a, 0x65, 0x11, 0xf6, 0x41, 0x4a, 0xbd, 0xa5, 0x02, 0xce, 0x01, 0x06, - 0xfd, 0x42, 0x01, 0xff, 0xd1, 0xfd, 0xcd, 0x01, 0xd2, 0xfe, 0xcd, 0x01, - 0xd3, 0xff, 0xcd, 0x41, 0x43, 0xed, 0x00, 0x39, 0x22, 0x00, 0x09, 0xb0, - 0x00, 0x01, 0xff, 0x44, 0xb9, 0x00, 0x21, 0x00, 0x00, 0x4d, 0xd6, 0x33, - 0x49, 0x20, 0x40, 0x4c, 0x65, 0x8f, 0x07, 0x21, 0x00, 0x02, 0xd0, 0x00, - 0x01, 0xff, 0x45, 0x2e, 0x03, 0xac, 0x20, 0x00, 0x4e, 0x0e, 0x74, 0xa0, - 0x20, 0x00, 0x05, 0xa6, 0xe6, 0x01, 0xff, 0x46, 0x78, 0xd7, 0xf0, 0xf3, - 0x01, 0x4b, 0x3b, 0x9f, 0xe4, 0xf3, 0x41, 0x02, 0xe8, 0x04, 0xca, 0x14, - 0x06, 0xc4, 0x06, 0x88, 0x14, 0x49, 0x15, 0x16, 0x62, 0x13, 0x00, 0x07, - 0x2f, 0x39, 0xb3, 0x13, 0xb0, 0xa4, 0x13, 0x4d, 0xd6, 0x33, 0x67, 0x13, - 0x00, 0xb3, 0x4b, 0x0b, 0x6c, 0xa1, 0x06, 0x49, 0xd1, 0xbe, 0x61, 0x13, - 0x40, 0x46, 0xae, 0xd7, 0x96, 0x13, 0x00, 0xa4, 0x26, 0x45, 0x75, 0xd5, - 0x97, 0x13, 0x00, 0xab, 0x12, 0x46, 0x73, 0x93, 0x92, 0x13, 0x00, 0x4c, - 0x6d, 0x93, 0x93, 0x13, 0x00, 0x45, 0x62, 0xe9, 0x90, 0x13, 0x40, 0x44, - 0x1a, 0x4f, 0x95, 0x13, 0x00, 0x43, 0xa0, 0x5b, 0x99, 0x13, 0x40, 0x44, - 0xe1, 0xa7, 0x91, 0x13, 0x80, 0x06, 0x44, 0x3a, 0xed, 0x94, 0x13, 0x40, - 0x46, 0x74, 0xd5, 0x98, 0x13, 0x40, 0xa5, 0xc2, 0x12, 0x08, 0xaf, 0x17, - 0x01, 0xff, 0xa2, 0xe3, 0x11, 0xa3, 0xab, 0x10, 0xa4, 0x98, 0x0f, 0xa6, - 0xde, 0x0e, 0xa7, 0x9c, 0x0c, 0xa8, 0xa2, 0x0b, 0xaa, 0xf6, 0x0a, 0xab, - 0xdc, 0x09, 0xac, 0xb0, 0x09, 0xad, 0xf1, 0x08, 0xae, 0x99, 0x08, 0xb0, - 0x91, 0x07, 0xb1, 0xf7, 0x05, 0xb2, 0xc5, 0x05, 0xb3, 0x89, 0x04, 0xb4, - 0xc4, 0x02, 0xb6, 0x9d, 0x02, 0xb7, 0xf7, 0x01, 0xb8, 0x98, 0x01, 0xb9, - 0x73, 0xba, 0x01, 0xff, 0xe1, 0xd8, 0x12, 0x80, 0x67, 0xe5, 0xdd, 0x12, - 0x80, 0x5e, 0xa8, 0x38, 0xe9, 0xda, 0x12, 0x00, 0xef, 0xde, 0x12, 0x80, - 0x2b, 0xf5, 0xd9, 0x12, 0x00, 0x42, 0xa9, 0x01, 0xdf, 0x12, 0x00, 0xba, - 0x01, 0xff, 0xe1, 0xb0, 0x2d, 0x80, 0x15, 0xe5, 0xb5, 0x2d, 0x80, 0x0c, - 0xe9, 0xb2, 0x2d, 0x00, 0xef, 0xb6, 0x2d, 0x00, 0xf5, 0xb1, 0x2d, 0x40, - 0xe5, 0xb4, 0x2d, 0x40, 0xe1, 0xb3, 0x2d, 0x40, 0xe1, 0x8b, 0x2d, 0x40, - 0xe1, 0xe0, 0x12, 0x80, 0x1b, 0xe5, 0xe5, 0x12, 0x80, 0x12, 0xe9, 0xe2, - 0x12, 0x00, 0xef, 0xe6, 0x12, 0x00, 0xf5, 0xe1, 0x12, 0x00, 0x42, 0xa9, - 0x01, 0xe7, 0x12, 0x40, 0xe5, 0xe4, 0x12, 0x40, 0xe1, 0xe3, 0x12, 0x40, - 0xe5, 0xdc, 0x12, 0x40, 0xe1, 0xdb, 0x12, 0x40, 0xe1, 0xe8, 0x12, 0x80, - 0x1a, 0xe5, 0xed, 0x12, 0x80, 0x11, 0xe9, 0xea, 0x12, 0x00, 0xef, 0xee, - 0x12, 0x80, 0x04, 0xf5, 0xe9, 0x12, 0x40, 0xe1, 0xef, 0x12, 0x40, 0xe5, - 0xec, 0x12, 0x40, 0xe1, 0xeb, 0x12, 0x40, 0xe1, 0x80, 0x12, 0x80, 0x53, - 0xe5, 0x85, 0x12, 0x80, 0x4a, 0xe9, 0x82, 0x12, 0x00, 0xef, 0x86, 0x12, - 0x80, 0x3d, 0xf5, 0x81, 0x12, 0x00, 0xb7, 0x21, 0xb9, 0x01, 0xff, 0xe1, - 0xd0, 0x2d, 0x80, 0x15, 0xe5, 0xd5, 0x2d, 0x80, 0x0c, 0xe9, 0xd2, 0x2d, - 0x00, 0xef, 0xd6, 0x2d, 0x00, 0xf5, 0xd1, 0x2d, 0x40, 0xe5, 0xd4, 0x2d, - 0x40, 0xe1, 0xd3, 0x2d, 0x40, 0xe1, 0x88, 0x12, 0x80, 0x0d, 0xe5, 0x8d, - 0x12, 0x80, 0x04, 0xe9, 0x8a, 0x12, 0x40, 0xe5, 0x8c, 0x12, 0x40, 0xe1, - 0x8b, 0x12, 0x40, 0xe1, 0x87, 0x12, 0x40, 0xe5, 0x84, 0x12, 0x40, 0xe1, - 0x83, 0x12, 0x40, 0xe1, 0xc8, 0x12, 0x80, 0x1a, 0xe5, 0xcd, 0x12, 0x80, - 0x11, 0xe9, 0xca, 0x12, 0x00, 0xef, 0xce, 0x12, 0x80, 0x04, 0xf5, 0xc9, - 0x12, 0x40, 0xe1, 0xcf, 0x12, 0x40, 0xe5, 0xcc, 0x12, 0x40, 0xe1, 0xcb, - 0x12, 0x40, 0xe1, 0x68, 0x12, 0x80, 0x1b, 0xe5, 0x6d, 0x12, 0x80, 0x12, - 0xe9, 0x6a, 0x12, 0x00, 0xef, 0x6e, 0x12, 0x00, 0xf5, 0x69, 0x12, 0x00, - 0x42, 0xa9, 0x01, 0x6f, 0x12, 0x40, 0xe5, 0x6c, 0x12, 0x40, 0xe1, 0x6b, - 0x12, 0x40, 0xe1, 0x70, 0x12, 0x80, 0xb8, 0x01, 0xe5, 0x75, 0x12, 0x80, - 0xae, 0x01, 0xa8, 0x82, 0x01, 0xe9, 0x72, 0x12, 0x00, 0xef, 0x76, 0x12, - 0x80, 0x75, 0xb3, 0x4f, 0x02, 0x53, 0x00, 0x30, 0xf5, 0x71, 0x12, 0x00, - 0x42, 0xa9, 0x01, 0x77, 0x12, 0x00, 0xba, 0x01, 0xff, 0xe1, 0x40, 0x13, - 0x80, 0x1a, 0xe5, 0x45, 0x13, 0x80, 0x11, 0xe9, 0x42, 0x13, 0x00, 0xef, - 0x46, 0x13, 0x80, 0x04, 0xf5, 0x41, 0x13, 0x40, 0xe1, 0x47, 0x13, 0x40, - 0xe5, 0x44, 0x13, 0x40, 0xe1, 0x43, 0x13, 0x40, 0x42, 0x31, 0x12, 0x03, - 0xab, 0x00, 0xe5, 0x05, 0xab, 0x80, 0x0c, 0xe9, 0x02, 0xab, 0x00, 0xef, - 0x06, 0xab, 0x00, 0xf5, 0x01, 0xab, 0x40, 0xe5, 0x04, 0xab, 0x40, 0xe1, - 0x38, 0x13, 0x80, 0x1b, 0xe5, 0x3d, 0x13, 0x80, 0x12, 0xe9, 0x3a, 0x13, - 0x00, 0xef, 0x3e, 0x13, 0x00, 0xf5, 0x39, 0x13, 0x00, 0x42, 0xa9, 0x01, - 0x3f, 0x13, 0x40, 0xe5, 0x3c, 0x13, 0x40, 0xe1, 0x3b, 0x13, 0x40, 0xe1, - 0x86, 0x2d, 0x40, 0xe1, 0x20, 0x13, 0x80, 0x20, 0xe5, 0x25, 0x13, 0x80, - 0x17, 0xe9, 0x22, 0x13, 0x00, 0xef, 0x26, 0x13, 0x80, 0x0a, 0xf5, 0x21, - 0x13, 0x00, 0x42, 0xa9, 0x01, 0x27, 0x13, 0x40, 0xe1, 0x8f, 0x2d, 0x40, - 0xe5, 0x24, 0x13, 0x40, 0xe1, 0x23, 0x13, 0x40, 0xe5, 0x74, 0x12, 0x40, - 0xe1, 0x73, 0x12, 0x40, 0xe1, 0x30, 0x12, 0x80, 0xaf, 0x01, 0xe5, 0x35, - 0x12, 0x80, 0x89, 0x01, 0xa8, 0x5e, 0xe9, 0x32, 0x12, 0x00, 0xef, 0x36, - 0x12, 0x80, 0x51, 0xb3, 0x31, 0xf5, 0x31, 0x12, 0x00, 0x42, 0xa9, 0x01, - 0x37, 0x12, 0x00, 0xba, 0x01, 0xff, 0xe1, 0x20, 0x12, 0x80, 0x1b, 0xe5, - 0x25, 0x12, 0x80, 0x12, 0xe9, 0x22, 0x12, 0x00, 0xef, 0x26, 0x12, 0x00, - 0xf5, 0x21, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x27, 0x12, 0x40, 0xe5, 0x24, - 0x12, 0x40, 0xe1, 0x23, 0x12, 0x40, 0xe1, 0xa0, 0x2d, 0x80, 0x15, 0xe5, - 0xa5, 0x2d, 0x80, 0x0c, 0xe9, 0xa2, 0x2d, 0x00, 0xef, 0xa6, 0x2d, 0x00, - 0xf5, 0xa1, 0x2d, 0x40, 0xe5, 0xa4, 0x2d, 0x40, 0xe1, 0xa3, 0x2d, 0x40, - 0xe1, 0x83, 0x2d, 0x40, 0xe1, 0x38, 0x12, 0x80, 0x20, 0xe5, 0x3d, 0x12, - 0x80, 0x17, 0xe9, 0x3a, 0x12, 0x00, 0xef, 0x3e, 0x12, 0x80, 0x0a, 0xf5, - 0x39, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x3f, 0x12, 0x40, 0xe1, 0x84, 0x2d, - 0x40, 0xe5, 0x3c, 0x12, 0x40, 0xe1, 0x3b, 0x12, 0x40, 0x08, 0x72, 0xc1, - 0x04, 0xe5, 0x34, 0x12, 0x40, 0x43, 0x72, 0xcf, 0x84, 0x13, 0x00, 0x43, - 0x9e, 0xec, 0x88, 0x13, 0x00, 0x43, 0xb5, 0x92, 0x80, 0x13, 0x00, 0x43, - 0x51, 0x02, 0x8c, 0x13, 0x40, 0xe1, 0x33, 0x12, 0x40, 0xe1, 0x28, 0x12, - 0x80, 0x26, 0xe5, 0x2d, 0x12, 0x80, 0x1d, 0xe9, 0x2a, 0x12, 0x00, 0xef, - 0x2e, 0x12, 0x80, 0x10, 0xf5, 0x29, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x2f, - 0x12, 0x00, 0x42, 0x34, 0x22, 0x58, 0x13, 0x40, 0xe1, 0x82, 0x2d, 0x40, - 0xe5, 0x2c, 0x12, 0x40, 0xe1, 0x2b, 0x12, 0x40, 0xe1, 0x40, 0x12, 0x80, - 0x8d, 0x01, 0xe5, 0x45, 0x12, 0x80, 0x83, 0x01, 0xa8, 0x4a, 0xe9, 0x42, - 0x12, 0x00, 0xef, 0x46, 0x12, 0x80, 0x3d, 0xf5, 0x41, 0x12, 0x00, 0xb7, - 0x21, 0xb9, 0x01, 0xff, 0xe1, 0xc0, 0x2d, 0x80, 0x15, 0xe5, 0xc5, 0x2d, - 0x80, 0x0c, 0xe9, 0xc2, 0x2d, 0x00, 0xef, 0xc6, 0x2d, 0x00, 0xf5, 0xc1, - 0x2d, 0x40, 0xe5, 0xc4, 0x2d, 0x40, 0xe1, 0xc3, 0x2d, 0x40, 0xe1, 0x48, - 0x12, 0x80, 0x0d, 0xe5, 0x4d, 0x12, 0x80, 0x04, 0xe9, 0x4a, 0x12, 0x40, - 0xe5, 0x4c, 0x12, 0x40, 0xe1, 0x4b, 0x12, 0x40, 0xe1, 0x47, 0x12, 0x40, - 0xe1, 0x50, 0x12, 0x80, 0x2e, 0xe5, 0x55, 0x12, 0x80, 0x25, 0xe9, 0x52, - 0x12, 0x00, 0xef, 0x56, 0x12, 0x00, 0xf5, 0x51, 0x12, 0x00, 0xb7, 0x01, - 0xff, 0xe1, 0x58, 0x12, 0x80, 0x0d, 0xe5, 0x5d, 0x12, 0x80, 0x04, 0xe9, - 0x5a, 0x12, 0x40, 0xe5, 0x5c, 0x12, 0x40, 0xe1, 0x5b, 0x12, 0x40, 0xe5, - 0x54, 0x12, 0x40, 0xe1, 0x53, 0x12, 0x40, 0xe5, 0x44, 0x12, 0x40, 0xe1, - 0x43, 0x12, 0x40, 0xe1, 0x50, 0x13, 0x80, 0x7c, 0xe5, 0x55, 0x13, 0x80, - 0x73, 0xa8, 0x25, 0xe9, 0x52, 0x13, 0x00, 0xef, 0x56, 0x13, 0x80, 0x18, - 0xf5, 0x51, 0x13, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x57, 0x13, 0x00, 0xe5, - 0x8f, 0x13, 0x80, 0x04, 0xe9, 0x8d, 0x13, 0x40, 0xe5, 0x8e, 0x13, 0x40, - 0xe1, 0x92, 0x2d, 0x40, 0xe1, 0x30, 0x13, 0x80, 0x20, 0xe5, 0x35, 0x13, - 0x80, 0x17, 0xe9, 0x32, 0x13, 0x00, 0xef, 0x36, 0x13, 0x80, 0x0a, 0xf5, - 0x31, 0x13, 0x00, 0x42, 0xa9, 0x01, 0x37, 0x13, 0x40, 0xe1, 0x91, 0x2d, - 0x40, 0xe5, 0x34, 0x13, 0x40, 0xe1, 0x33, 0x13, 0x00, 0x08, 0x60, 0x1c, - 0x01, 0xff, 0xe1, 0xd0, 0x12, 0x80, 0x15, 0xe5, 0xd5, 0x12, 0x80, 0x0c, - 0xe9, 0xd2, 0x12, 0x00, 0xef, 0xd6, 0x12, 0x00, 0xf5, 0xd1, 0x12, 0x40, - 0xe5, 0xd4, 0x12, 0x40, 0xe1, 0xd3, 0x12, 0x40, 0xe5, 0x54, 0x13, 0x40, - 0xe1, 0x53, 0x13, 0x40, 0xe1, 0x90, 0x12, 0x80, 0x4c, 0xe5, 0x95, 0x12, - 0x80, 0x43, 0xe9, 0x92, 0x12, 0x00, 0xef, 0x96, 0x12, 0x80, 0x36, 0xf5, - 0x91, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x97, 0x12, 0x00, 0xb9, 0x01, 0xff, - 0xe1, 0x98, 0x12, 0x80, 0x20, 0xe5, 0x9d, 0x12, 0x80, 0x17, 0xe9, 0x9a, - 0x12, 0x00, 0xef, 0x9e, 0x12, 0x80, 0x0a, 0xf5, 0x99, 0x12, 0x00, 0x42, - 0xa9, 0x01, 0x9f, 0x12, 0x40, 0xe1, 0x89, 0x2d, 0x40, 0xe5, 0x9c, 0x12, - 0x40, 0xe1, 0x9b, 0x12, 0x40, 0xe1, 0x88, 0x2d, 0x40, 0xe5, 0x94, 0x12, - 0x40, 0xe1, 0x93, 0x12, 0x40, 0xe1, 0x18, 0x12, 0x80, 0x33, 0xe5, 0x1d, - 0x12, 0x80, 0x2a, 0xe9, 0x1a, 0x12, 0x00, 0xef, 0x1e, 0x12, 0x80, 0x1d, - 0xf5, 0x19, 0x12, 0x00, 0xb7, 0x06, 0x42, 0x34, 0x22, 0x59, 0x13, 0x40, - 0xe1, 0x1f, 0x12, 0x00, 0xe5, 0x83, 0x13, 0x80, 0x04, 0xe9, 0x81, 0x13, - 0x40, 0xe5, 0x82, 0x13, 0x40, 0xe1, 0x81, 0x2d, 0x40, 0xe5, 0x1c, 0x12, - 0x40, 0xe1, 0x1b, 0x12, 0x40, 0xe1, 0x08, 0x12, 0x80, 0x20, 0xe5, 0x0d, - 0x12, 0x80, 0x17, 0xe9, 0x0a, 0x12, 0x00, 0xef, 0x0e, 0x12, 0x80, 0x0a, - 0xf5, 0x09, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x0f, 0x12, 0x40, 0xe1, 0x80, - 0x2d, 0x40, 0xe5, 0x0c, 0x12, 0x40, 0xe1, 0x0b, 0x12, 0x40, 0xe1, 0xa8, - 0x12, 0x80, 0x8d, 0x01, 0xe5, 0xad, 0x12, 0x80, 0x83, 0x01, 0xe9, 0xaa, - 0x12, 0x00, 0xef, 0xae, 0x12, 0x80, 0x76, 0xf5, 0xa9, 0x12, 0x00, 0xb7, - 0x5a, 0xb8, 0x21, 0xb9, 0x01, 0xff, 0xe1, 0xc8, 0x2d, 0x80, 0x15, 0xe5, - 0xcd, 0x2d, 0x80, 0x0c, 0xe9, 0xca, 0x2d, 0x00, 0xef, 0xce, 0x2d, 0x00, - 0xf5, 0xc9, 0x2d, 0x40, 0xe5, 0xcc, 0x2d, 0x40, 0xe1, 0xcb, 0x2d, 0x40, - 0xe1, 0xb8, 0x12, 0x80, 0x2e, 0xe5, 0xbd, 0x12, 0x80, 0x25, 0xe9, 0xba, - 0x12, 0x00, 0xef, 0xbe, 0x12, 0x00, 0xf5, 0xb9, 0x12, 0x00, 0xb7, 0x01, - 0xff, 0xe1, 0xc0, 0x12, 0x80, 0x0d, 0xe5, 0xc5, 0x12, 0x80, 0x04, 0xe9, - 0xc2, 0x12, 0x40, 0xe5, 0xc4, 0x12, 0x40, 0xe1, 0xc3, 0x12, 0x40, 0xe5, - 0xbc, 0x12, 0x40, 0xe1, 0xbb, 0x12, 0x40, 0xe1, 0xb0, 0x12, 0x80, 0x0d, - 0xe5, 0xb5, 0x12, 0x80, 0x04, 0xe9, 0xb2, 0x12, 0x40, 0xe5, 0xb4, 0x12, - 0x40, 0xe1, 0xb3, 0x12, 0x40, 0xe1, 0xaf, 0x12, 0x40, 0xe5, 0xac, 0x12, - 0x40, 0xe1, 0xab, 0x12, 0x40, 0xe1, 0x00, 0x13, 0x80, 0x20, 0xe5, 0x05, - 0x13, 0x80, 0x17, 0xe9, 0x02, 0x13, 0x00, 0xef, 0x06, 0x13, 0x80, 0x0a, - 0xf5, 0x01, 0x13, 0x00, 0x42, 0xa9, 0x01, 0x07, 0x13, 0x40, 0xe1, 0x8e, - 0x2d, 0x40, 0xe5, 0x04, 0x13, 0x40, 0xe1, 0x03, 0x13, 0x40, 0xe1, 0x00, - 0x12, 0x80, 0x6e, 0xe5, 0x05, 0x12, 0x80, 0x65, 0xa8, 0x11, 0xe9, 0x02, - 0x12, 0x00, 0xef, 0x06, 0x12, 0x80, 0x04, 0xf5, 0x01, 0x12, 0x40, 0xe1, - 0x07, 0x12, 0x40, 0xe1, 0x10, 0x12, 0x80, 0x49, 0xe5, 0x15, 0x12, 0x80, - 0x40, 0xe9, 0x12, 0x12, 0x00, 0xef, 0x16, 0x12, 0x00, 0xf5, 0x11, 0x12, - 0x00, 0xb7, 0x21, 0xb9, 0x01, 0xff, 0xe1, 0xe0, 0xe7, 0x81, 0x15, 0xe5, - 0xe5, 0xe7, 0x81, 0x0c, 0xe9, 0xe2, 0xe7, 0x01, 0xef, 0xe6, 0xe7, 0x01, - 0xf5, 0xe1, 0xe7, 0x41, 0xe5, 0xe4, 0xe7, 0x41, 0xe1, 0xe3, 0xe7, 0x41, - 0xe1, 0x17, 0x12, 0x00, 0xe5, 0xeb, 0xe7, 0x81, 0x04, 0xe9, 0xe9, 0xe7, - 0x41, 0xe5, 0xea, 0xe7, 0x41, 0xe5, 0x14, 0x12, 0x40, 0xe1, 0x13, 0x12, - 0x40, 0xe5, 0x04, 0x12, 0x40, 0xe1, 0x03, 0x12, 0x40, 0xe1, 0x08, 0x13, - 0x80, 0xb5, 0x02, 0xe5, 0x0d, 0x13, 0x80, 0xab, 0x02, 0xa7, 0xf1, 0x01, - 0xe9, 0x0a, 0x13, 0x00, 0x07, 0x2e, 0x28, 0xbf, 0x01, 0xef, 0x0e, 0x13, - 0x80, 0xb5, 0x01, 0xf5, 0x09, 0x13, 0x80, 0x39, 0xb7, 0x21, 0xb9, 0x01, - 0xff, 0xe1, 0xd8, 0x2d, 0x80, 0x15, 0xe5, 0xdd, 0x2d, 0x80, 0x0c, 0xe9, - 0xda, 0x2d, 0x00, 0xef, 0xde, 0x2d, 0x00, 0xf5, 0xd9, 0x2d, 0x40, 0xe5, - 0xdc, 0x2d, 0x40, 0xe1, 0xdb, 0x2d, 0x40, 0xe1, 0x10, 0x13, 0x80, 0x0d, - 0xe5, 0x15, 0x13, 0x80, 0x04, 0xe9, 0x12, 0x13, 0x40, 0xe5, 0x14, 0x13, - 0x40, 0xe1, 0x13, 0x13, 0x40, 0x05, 0xd2, 0x5d, 0x01, 0xff, 0x02, 0x72, - 0xcf, 0x64, 0x02, 0x4b, 0x55, 0x56, 0x02, 0x24, 0xb1, 0x45, 0x44, 0xfe, - 0xec, 0xe8, 0xe7, 0x01, 0x02, 0xed, 0x0a, 0x2e, 0x02, 0x52, 0x37, 0x20, - 0x02, 0x51, 0x02, 0x12, 0x02, 0xc5, 0xef, 0x01, 0xff, 0xe5, 0xf2, 0xe7, - 0x81, 0x04, 0xe9, 0xf0, 0xe7, 0x41, 0xe5, 0xf1, 0xe7, 0x41, 0x42, 0x27, - 0x01, 0xfe, 0xe7, 0x01, 0xe9, 0xfd, 0xe7, 0x41, 0x42, 0x27, 0x01, 0xee, - 0xe7, 0x01, 0xe9, 0xed, 0xe7, 0x41, 0xe5, 0xf7, 0xe7, 0x81, 0x04, 0xe9, - 0xf5, 0xe7, 0x41, 0xe5, 0xf6, 0xe7, 0x41, 0xe5, 0xfa, 0xe7, 0x81, 0x04, - 0xe9, 0xf8, 0xe7, 0x41, 0xe5, 0xf9, 0xe7, 0x41, 0x42, 0x27, 0x01, 0xfc, - 0xe7, 0x01, 0xe9, 0xfb, 0xe7, 0x41, 0x42, 0x27, 0x01, 0xf4, 0xe7, 0x01, - 0xe9, 0xf3, 0xe7, 0x41, 0xe1, 0x0f, 0x13, 0x40, 0xe1, 0xa0, 0x12, 0x80, - 0x20, 0xe5, 0xa5, 0x12, 0x80, 0x17, 0xe9, 0xa2, 0x12, 0x00, 0xef, 0xa6, - 0x12, 0x80, 0x0a, 0xf5, 0xa1, 0x12, 0x00, 0x42, 0xa9, 0x01, 0xa7, 0x12, - 0x40, 0xe1, 0x8a, 0x2d, 0x40, 0xe5, 0xa4, 0x12, 0x40, 0xe1, 0xa3, 0x12, - 0x40, 0xe1, 0x18, 0x13, 0x80, 0x2e, 0xe5, 0x1d, 0x13, 0x80, 0x25, 0xe9, - 0x1a, 0x13, 0x00, 0xef, 0x1e, 0x13, 0x00, 0xf5, 0x19, 0x13, 0x00, 0xb7, - 0x01, 0xff, 0xe1, 0x93, 0x2d, 0x80, 0x0d, 0xe5, 0x96, 0x2d, 0x80, 0x04, - 0xe9, 0x94, 0x2d, 0x40, 0xe5, 0x95, 0x2d, 0x40, 0xe1, 0x1f, 0x13, 0x40, - 0xe5, 0x1c, 0x13, 0x40, 0xe1, 0x1b, 0x13, 0x40, 0xe5, 0x0c, 0x13, 0x40, - 0xe1, 0x0b, 0x13, 0x40, 0xe1, 0x48, 0x13, 0x80, 0x2e, 0xe5, 0x4d, 0x13, - 0x80, 0x25, 0xe9, 0x4a, 0x13, 0x00, 0xef, 0x4e, 0x13, 0x00, 0xf5, 0x49, - 0x13, 0x00, 0xb7, 0x06, 0x42, 0x34, 0x22, 0x5a, 0x13, 0x40, 0xe1, 0x4f, - 0x13, 0x00, 0xe5, 0x8b, 0x13, 0x80, 0x04, 0xe9, 0x89, 0x13, 0x40, 0xe5, - 0x8a, 0x13, 0x40, 0xe5, 0x4c, 0x13, 0x40, 0xe1, 0x4b, 0x13, 0x40, 0xe1, - 0xf0, 0x12, 0x80, 0x86, 0x01, 0xa4, 0x3e, 0xe5, 0xf5, 0x12, 0x80, 0x35, - 0xe9, 0xf2, 0x12, 0x00, 0xef, 0xf6, 0x12, 0x80, 0x28, 0xf5, 0xf1, 0x12, - 0x00, 0x42, 0xa9, 0x01, 0xf7, 0x12, 0x00, 0xba, 0x01, 0xff, 0x42, 0x31, - 0x12, 0x13, 0xab, 0x00, 0xe5, 0x15, 0xab, 0x80, 0x0c, 0xe9, 0x12, 0xab, - 0x00, 0xef, 0x16, 0xab, 0x00, 0xf5, 0x11, 0xab, 0x40, 0xe5, 0x14, 0xab, - 0x40, 0xe1, 0x8c, 0x2d, 0x40, 0xe5, 0xf4, 0x12, 0x40, 0xe1, 0xf8, 0x12, - 0x80, 0x3d, 0xe5, 0xfd, 0x12, 0x80, 0x34, 0xa8, 0x17, 0xe9, 0xfa, 0x12, - 0x00, 0xef, 0xfe, 0x12, 0x80, 0x0a, 0xf5, 0xf9, 0x12, 0x00, 0x42, 0xa9, - 0x01, 0xff, 0x12, 0x40, 0xe1, 0x8d, 0x2d, 0x40, 0x42, 0x31, 0x12, 0x0b, - 0xab, 0x00, 0xe5, 0x0d, 0xab, 0x80, 0x0c, 0xe9, 0x0a, 0xab, 0x00, 0xef, - 0x0e, 0xab, 0x00, 0xf5, 0x09, 0xab, 0x40, 0xe5, 0x0c, 0xab, 0x40, 0xe5, - 0xfc, 0x12, 0x40, 0xe1, 0xfb, 0x12, 0x40, 0xe1, 0xf3, 0x12, 0x40, 0xe1, - 0x78, 0x12, 0x80, 0xab, 0x01, 0xa3, 0x4b, 0xe5, 0x7d, 0x12, 0x80, 0x42, - 0xa8, 0x17, 0xe9, 0x7a, 0x12, 0x00, 0xef, 0x7e, 0x12, 0x80, 0x0a, 0xf5, - 0x79, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x7f, 0x12, 0x40, 0xe1, 0x87, 0x2d, - 0x40, 0xe1, 0x28, 0x13, 0x80, 0x20, 0xe5, 0x2d, 0x13, 0x80, 0x17, 0xe9, - 0x2a, 0x13, 0x00, 0xef, 0x2e, 0x13, 0x80, 0x0a, 0xf5, 0x29, 0x13, 0x00, - 0x42, 0xa9, 0x01, 0x2f, 0x13, 0x40, 0xe1, 0x90, 0x2d, 0x40, 0xe5, 0x2c, - 0x13, 0x40, 0xe1, 0x2b, 0x13, 0x40, 0xe5, 0x7c, 0x12, 0x40, 0xe1, 0xa8, - 0x2d, 0x80, 0x55, 0xe5, 0xad, 0x2d, 0x80, 0x4c, 0xa8, 0x0c, 0xe9, 0xaa, - 0x2d, 0x00, 0xef, 0xae, 0x2d, 0x00, 0xf5, 0xa9, 0x2d, 0x40, 0xe1, 0xb8, - 0x2d, 0x80, 0x35, 0xe5, 0xbd, 0x2d, 0x80, 0x2c, 0xa8, 0x0c, 0xe9, 0xba, - 0x2d, 0x00, 0xef, 0xbe, 0x2d, 0x00, 0xf5, 0xb9, 0x2d, 0x40, 0xe1, 0x20, - 0xab, 0x80, 0x15, 0xe5, 0x25, 0xab, 0x80, 0x0c, 0xe9, 0x22, 0xab, 0x00, - 0xef, 0x26, 0xab, 0x00, 0xf5, 0x21, 0xab, 0x40, 0xe5, 0x24, 0xab, 0x40, - 0xe1, 0x23, 0xab, 0x40, 0xe5, 0xbc, 0x2d, 0x40, 0xe1, 0xbb, 0x2d, 0x40, - 0xe5, 0xac, 0x2d, 0x40, 0xe1, 0xab, 0x2d, 0x40, 0xe1, 0x7b, 0x12, 0x40, - 0xe1, 0x60, 0x12, 0x80, 0x4e, 0xa2, 0x2e, 0xe5, 0x65, 0x12, 0x80, 0x25, - 0xe9, 0x62, 0x12, 0x00, 0xef, 0x66, 0x12, 0x80, 0x18, 0xf5, 0x61, 0x12, - 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x67, 0x12, 0x00, 0xe5, 0x87, 0x13, 0x80, - 0x04, 0xe9, 0x85, 0x13, 0x40, 0xe5, 0x86, 0x13, 0x40, 0xe1, 0x85, 0x2d, - 0x40, 0xe5, 0x64, 0x12, 0x40, 0xe1, 0x28, 0xab, 0x80, 0x15, 0xe5, 0x2d, - 0xab, 0x80, 0x0c, 0xe9, 0x2a, 0xab, 0x00, 0xef, 0x2e, 0xab, 0x00, 0xf5, - 0x29, 0xab, 0x40, 0xe5, 0x2c, 0xab, 0x40, 0xe1, 0x2b, 0xab, 0x40, 0xe1, - 0x63, 0x12, 0x40, 0x4a, 0x59, 0x26, 0x60, 0x13, 0x00, 0x47, 0x70, 0x58, - 0x64, 0x13, 0x40, 0x52, 0xcf, 0x4a, 0x68, 0x13, 0x00, 0x4c, 0x7d, 0x92, - 0x66, 0x13, 0x40, 0x46, 0x44, 0xd8, 0x79, 0x13, 0x00, 0xa6, 0x36, 0x47, - 0x22, 0x11, 0x7b, 0x13, 0x00, 0x46, 0x0b, 0x2c, 0x7a, 0x13, 0x00, 0xb3, - 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x72, 0x13, 0x80, 0x0c, 0x45, - 0x2b, 0x11, 0x74, 0x13, 0x00, 0x45, 0xde, 0x2b, 0x73, 0x13, 0x40, 0x49, - 0xd4, 0x5c, 0x7c, 0x13, 0x40, 0x46, 0x27, 0x1d, 0x78, 0x13, 0x00, 0x44, - 0x4e, 0xda, 0x77, 0x13, 0x40, 0x44, 0x08, 0x4c, 0x76, 0x13, 0x00, 0x44, - 0x85, 0x50, 0x75, 0x13, 0x40, 0x45, 0xc3, 0x0a, 0x70, 0x13, 0x00, 0xa6, - 0x29, 0x44, 0x46, 0x2a, 0x71, 0x13, 0x00, 0x43, 0xbf, 0x0a, 0x69, 0x13, - 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x6b, 0x13, 0x00, - 0x42, 0x15, 0x02, 0x6a, 0x13, 0x40, 0x44, 0x27, 0x1d, 0x6f, 0x13, 0x00, - 0x42, 0x60, 0x25, 0x6e, 0x13, 0x40, 0x43, 0xa7, 0x05, 0x6d, 0x13, 0x00, - 0x43, 0xcb, 0x06, 0x6c, 0x13, 0x40, 0x43, 0x03, 0x12, 0x65, 0x13, 0x00, - 0xad, 0x01, 0xff, 0x07, 0xc9, 0x15, 0x06, 0x42, 0x6c, 0x00, 0x63, 0x13, - 0x40, 0x0b, 0xe0, 0x6b, 0x06, 0x51, 0x6c, 0x38, 0x5e, 0x13, 0x40, 0x55, - 0x68, 0x38, 0x5d, 0x13, 0x00, 0x44, 0xb9, 0x00, 0x5f, 0x13, 0x40, 0x44, - 0x57, 0x69, 0x1b, 0x00, 0x00, 0x06, 0x90, 0xdd, 0x01, 0xff, 0x48, 0xd6, - 0x1f, 0x2e, 0x21, 0x00, 0xf3, 0x59, 0x22, 0x40, 0x0b, 0x3d, 0x97, 0x42, - 0x08, 0x92, 0xc4, 0x32, 0x0b, 0x22, 0xa0, 0x01, 0xff, 0x06, 0xe1, 0x02, - 0x17, 0x06, 0xad, 0x02, 0x01, 0xff, 0x46, 0xe7, 0x02, 0xf2, 0x29, 0x00, - 0x47, 0x88, 0x43, 0xf0, 0x29, 0x00, 0x46, 0xab, 0x05, 0xee, 0x29, 0x40, - 0x46, 0xe7, 0x02, 0xf3, 0x29, 0x00, 0x47, 0x88, 0x43, 0xf1, 0x29, 0x00, - 0x46, 0xab, 0x05, 0xef, 0x29, 0x40, 0x43, 0xbf, 0x0a, 0xf0, 0x2b, 0x00, - 0x43, 0xd0, 0x09, 0xf1, 0x2b, 0x40, 0x44, 0xc3, 0x00, 0x2b, 0x23, 0x00, - 0x45, 0xc8, 0x00, 0x26, 0x23, 0x40, 0x02, 0x13, 0x00, 0x1a, 0xa9, 0x01, - 0xff, 0x4a, 0x95, 0xa5, 0x5a, 0x22, 0x00, 0x07, 0x07, 0x39, 0x01, 0xff, - 0x42, 0x1e, 0x00, 0x4d, 0x22, 0x00, 0x54, 0x97, 0x45, 0x78, 0x2a, 0x40, - 0x80, 0x63, 0x02, 0x31, 0x01, 0x01, 0xff, 0x45, 0xc4, 0x3a, 0x55, 0x22, - 0x00, 0x44, 0x2f, 0x03, 0x3d, 0x00, 0x80, 0x06, 0x4d, 0xda, 0x88, 0x6e, - 0x2a, 0x40, 0x80, 0x01, 0xff, 0xa1, 0x1d, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x4b, 0xb6, 0x97, 0xae, 0x2a, 0x00, 0x49, 0x50, 0x12, 0x66, 0x2a, 0x00, - 0x4e, 0x10, 0x77, 0xf9, 0x2b, 0x00, 0x61, 0xa3, 0x0e, 0x77, 0x2a, 0x40, - 0x05, 0x5d, 0x00, 0x0d, 0x53, 0xad, 0x37, 0xe3, 0x29, 0xc0, 0x00, 0x51, - 0x3e, 0x56, 0xe4, 0x29, 0x40, 0x4f, 0x37, 0x07, 0x40, 0x2b, 0x00, 0x49, - 0x45, 0x70, 0x71, 0x2a, 0x00, 0x50, 0xb3, 0x02, 0x71, 0x29, 0x00, 0x4e, - 0x93, 0x3d, 0x73, 0x2a, 0x40, 0x4f, 0x3d, 0x69, 0xd5, 0x22, 0x00, 0x03, - 0x7a, 0x02, 0x01, 0xff, 0x4d, 0xd0, 0x7f, 0x5d, 0x22, 0x00, 0x03, 0x9d, - 0x07, 0x01, 0xff, 0x4c, 0x87, 0x00, 0xdd, 0x22, 0x00, 0x49, 0xec, 0x00, - 0xdc, 0x22, 0x00, 0x48, 0x42, 0xc7, 0xde, 0x22, 0x00, 0x48, 0x82, 0xc8, - 0xdf, 0x22, 0x40, 0x80, 0x70, 0x02, 0x06, 0x00, 0x24, 0x45, 0xfb, 0xe6, - 0x05, 0x00, 0x00, 0x4a, 0xfd, 0x43, 0x86, 0x23, 0x00, 0x46, 0x5f, 0x31, - 0x09, 0x27, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x55, 0xb8, 0x39, - 0xe9, 0xf4, 0x01, 0x49, 0x04, 0xb9, 0x84, 0xf5, 0x41, 0x03, 0xf4, 0x01, - 0x06, 0x5a, 0x1a, 0x22, 0x1a, 0xf5, 0x41, 0x4c, 0xb5, 0x8d, 0x97, 0x00, - 0x00, 0x44, 0xc2, 0x07, 0x0a, 0x00, 0x00, 0x46, 0x19, 0x04, 0x19, 0x00, - 0x00, 0x03, 0x90, 0x0c, 0x1c, 0x4d, 0xc5, 0x86, 0x87, 0x00, 0x00, 0xb4, - 0x01, 0xff, 0x43, 0xae, 0x06, 0x03, 0x00, 0x00, 0x4b, 0x93, 0x9f, 0x04, - 0x00, 0xc0, 0x00, 0x46, 0x32, 0x01, 0x17, 0x00, 0x40, 0x42, 0xf4, 0x01, - 0x0e, 0x22, 0x00, 0x4b, 0xf9, 0x79, 0x97, 0x00, 0x40, 0x44, 0x40, 0x12, - 0x13, 0x20, 0x00, 0x44, 0x2a, 0x0d, 0x00, 0x20, 0x00, 0x45, 0x87, 0x4b, - 0x02, 0x20, 0x40, 0x80, 0x9c, 0x01, 0x04, 0x82, 0xee, 0x61, 0xb0, 0x01, - 0xff, 0x4c, 0xe5, 0x8d, 0x83, 0x23, 0x00, 0x03, 0x2b, 0x1d, 0x01, 0xff, - 0x48, 0xaa, 0xc2, 0xcb, 0xf5, 0x01, 0xae, 0x2f, 0x44, 0x3d, 0xa4, 0xcc, - 0xf5, 0x81, 0x24, 0x43, 0x4d, 0x12, 0x05, 0x22, 0xc0, 0x00, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x50, 0xfa, 0x62, 0xb4, 0x29, 0x00, 0x47, 0x77, 0x7e, - 0xb1, 0x29, 0x00, 0x51, 0xc8, 0x00, 0xb3, 0x29, 0x00, 0x52, 0x2c, 0x54, - 0xb2, 0x29, 0x40, 0xf3, 0xcd, 0xf5, 0x41, 0x43, 0x38, 0x1a, 0xb9, 0xfa, - 0x01, 0x43, 0x69, 0x27, 0xc5, 0xf5, 0xc1, 0x00, 0x03, 0x9f, 0x0e, 0x01, - 0xff, 0xe4, 0xc7, 0xf5, 0x01, 0x42, 0x8c, 0x09, 0xc6, 0xf5, 0x41, 0x0a, - 0x8f, 0xa6, 0x1b, 0x1a, 0x94, 0x20, 0x01, 0xff, 0x43, 0x33, 0xf0, 0xfb, - 0xf3, 0x01, 0xd3, 0xfc, 0xf3, 0x01, 0xd4, 0xfd, 0xf3, 0x01, 0xd5, 0xfe, - 0xf3, 0x01, 0xd6, 0xff, 0xf3, 0x41, 0x44, 0xf6, 0xeb, 0xb2, 0xf9, 0x01, - 0x4a, 0xc1, 0xa6, 0xb1, 0xf9, 0x01, 0x48, 0xa2, 0xc7, 0xb0, 0xf9, 0x01, - 0x4a, 0x25, 0xb1, 0xb3, 0xf9, 0x41, 0x44, 0x40, 0x12, 0x14, 0x20, 0x00, - 0x44, 0x2a, 0x0d, 0x01, 0x20, 0x00, 0x45, 0x87, 0x4b, 0x03, 0x20, 0x40, - 0x0d, 0x9c, 0x7f, 0x96, 0x02, 0xa5, 0xa0, 0x01, 0xe6, 0xdd, 0xf9, 0x01, - 0x07, 0x0b, 0xd5, 0x01, 0xff, 0x06, 0xc2, 0x05, 0x06, 0x52, 0x4a, 0x51, - 0xf6, 0x0f, 0x41, 0xa1, 0x7f, 0x44, 0x0a, 0xec, 0xe1, 0x0f, 0x01, 0x46, - 0xda, 0x48, 0xe3, 0x0f, 0x01, 0x45, 0xa1, 0xa8, 0xe2, 0x0f, 0x01, 0x42, - 0xb0, 0x01, 0xe4, 0x0f, 0x81, 0x60, 0x44, 0x8e, 0xed, 0xea, 0x0f, 0x01, - 0x46, 0x9c, 0xda, 0xeb, 0x0f, 0x01, 0x43, 0x89, 0x05, 0xec, 0x0f, 0x01, - 0x43, 0x54, 0x22, 0xed, 0x0f, 0x01, 0x42, 0x6f, 0x02, 0xf0, 0x0f, 0x01, - 0x44, 0xae, 0xc5, 0xf2, 0x0f, 0x01, 0x44, 0xfa, 0x64, 0xf3, 0x0f, 0x01, - 0xb3, 0x20, 0xb4, 0x12, 0x43, 0xc0, 0x88, 0xe5, 0x0f, 0x01, 0x44, 0x58, - 0x51, 0xe9, 0x0f, 0x01, 0x45, 0x52, 0x51, 0xe6, 0x0f, 0x41, 0x42, 0x9a, - 0x43, 0xf5, 0x0f, 0x01, 0x43, 0x39, 0x25, 0xe8, 0x0f, 0x41, 0xa1, 0x06, - 0x43, 0x0e, 0x16, 0xf4, 0x0f, 0x41, 0x43, 0x89, 0xe7, 0xf1, 0x0f, 0x01, - 0x44, 0x39, 0xe1, 0xee, 0x0f, 0x41, 0x42, 0x53, 0x00, 0xe7, 0x0f, 0x41, - 0x44, 0x48, 0x3c, 0xe0, 0x0f, 0x01, 0x43, 0xf7, 0x19, 0xef, 0x0f, 0x41, - 0x05, 0x5a, 0xe2, 0x4f, 0x47, 0xa2, 0x90, 0x08, 0x22, 0x80, 0x0c, 0x45, - 0x05, 0xc3, 0x18, 0xf4, 0x01, 0x45, 0xef, 0xe8, 0xd7, 0xf6, 0x41, 0x80, - 0x01, 0xff, 0x08, 0x84, 0x74, 0x29, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, - 0x98, 0x1d, 0xf5, 0x22, 0x00, 0x56, 0xa9, 0x34, 0xf2, 0x22, 0x00, 0x47, - 0x77, 0x7e, 0xf6, 0x22, 0x00, 0x56, 0x5b, 0x0b, 0xf9, 0x22, 0x00, 0x48, - 0x78, 0x58, 0xf8, 0x22, 0x00, 0x68, 0x05, 0x05, 0xf3, 0x22, 0x40, 0x49, - 0xa5, 0x01, 0xd9, 0x2a, 0x00, 0x47, 0x50, 0x02, 0xd2, 0x27, 0x40, 0x80, - 0x06, 0x4f, 0x44, 0x3b, 0xe7, 0x23, 0x40, 0x45, 0xce, 0x00, 0x01, 0x23, - 0x00, 0x4a, 0xbd, 0xaa, 0xa1, 0xf4, 0x01, 0x44, 0xce, 0xee, 0x0c, 0xf5, - 0x01, 0x45, 0x40, 0xe8, 0x26, 0xf5, 0x41, 0xe1, 0x00, 0x05, 0x01, 0x42, - 0x8c, 0x05, 0x01, 0x05, 0x01, 0xa3, 0xcf, 0x01, 0xa4, 0xc2, 0x01, 0xe5, - 0x08, 0x05, 0x81, 0xb8, 0x01, 0x42, 0xa0, 0x19, 0x09, 0x05, 0x01, 0xa7, - 0x99, 0x01, 0x42, 0xb0, 0x01, 0x0c, 0x05, 0x01, 0xe9, 0x0d, 0x05, 0x01, - 0x42, 0xde, 0x1f, 0x0e, 0x05, 0x01, 0xab, 0x7d, 0xac, 0x71, 0x42, 0x2a, - 0x02, 0x12, 0x05, 0x01, 0xae, 0x55, 0xef, 0x16, 0x05, 0x01, 0x42, 0x6f, - 0x02, 0x17, 0x05, 0x01, 0x42, 0x72, 0xa0, 0x18, 0x05, 0x01, 0xb2, 0x39, - 0xb3, 0x2d, 0xb4, 0x21, 0xf5, 0x1f, 0x05, 0x01, 0x42, 0x32, 0x00, 0x20, - 0x05, 0x01, 0x42, 0x60, 0x42, 0x21, 0x05, 0x01, 0xf9, 0x22, 0x05, 0x01, - 0xba, 0x01, 0xff, 0xe5, 0x23, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x24, 0x05, - 0x41, 0xe5, 0x1d, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x1e, 0x05, 0x41, 0xe5, - 0x1b, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x1c, 0x05, 0x41, 0xe5, 0x19, 0x05, - 0x01, 0x42, 0x88, 0x00, 0x1a, 0x05, 0x41, 0xe1, 0x14, 0x05, 0x01, 0x42, - 0x04, 0x00, 0x05, 0x05, 0x01, 0xe5, 0x13, 0x05, 0x01, 0x42, 0xde, 0x1f, - 0x15, 0x05, 0x41, 0xe5, 0x10, 0x05, 0x01, 0x42, 0x68, 0x00, 0x11, 0x05, - 0x41, 0xe5, 0x0f, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x27, 0x05, 0x41, 0xe5, - 0x0a, 0x05, 0x01, 0xa8, 0x06, 0x42, 0xde, 0x1f, 0x0b, 0x05, 0x41, 0x44, - 0x5e, 0x20, 0x26, 0x05, 0x01, 0xe5, 0x25, 0x05, 0x41, 0xe9, 0x07, 0x05, - 0x41, 0xe5, 0x04, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x06, 0x05, 0x41, 0xe5, - 0x02, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x03, 0x05, 0x41, 0x80, 0x06, 0x46, - 0x4e, 0x62, 0x6a, 0x26, 0x40, 0xb0, 0x1c, 0x05, 0xca, 0x64, 0x0c, 0x4f, - 0x4e, 0x1c, 0x33, 0x27, 0x00, 0x62, 0xd3, 0x0c, 0x4a, 0x27, 0x40, 0x46, - 0x18, 0xda, 0x69, 0xcc, 0x01, 0x47, 0x68, 0xd1, 0x6a, 0xcc, 0x41, 0x5f, - 0xc1, 0x10, 0x41, 0x27, 0x00, 0x07, 0x09, 0x08, 0x01, 0xff, 0x4a, 0x53, - 0x2b, 0x34, 0x27, 0x00, 0x4d, 0xd9, 0x12, 0x35, 0x27, 0x00, 0x56, 0xdd, - 0x35, 0x37, 0x27, 0x40, 0xe7, 0x5a, 0xf9, 0x01, 0x11, 0x69, 0x5e, 0x01, - 0xff, 0x80, 0x04, 0xcd, 0x02, 0xd8, 0x40, 0xa1, 0xe6, 0x23, 0xa2, 0x9f, - 0x23, 0x02, 0xc4, 0xf1, 0xa1, 0x22, 0x02, 0xc6, 0xf1, 0x8e, 0x1f, 0xa5, - 0xb1, 0x1d, 0xa6, 0x88, 0x1b, 0x02, 0xc8, 0xf1, 0xeb, 0x18, 0xa8, 0xa9, - 0x18, 0xa9, 0x98, 0x17, 0x03, 0x14, 0xf1, 0xf3, 0x16, 0xac, 0xbc, 0x16, - 0xad, 0x9f, 0x13, 0xae, 0xe7, 0x0f, 0xaf, 0x93, 0x0d, 0x02, 0x8b, 0xd5, - 0xd3, 0x0c, 0x03, 0x38, 0xf1, 0xb2, 0x0c, 0x02, 0x32, 0xcb, 0x9a, 0x0b, - 0x02, 0xee, 0xde, 0xaa, 0x09, 0xb4, 0xdd, 0x07, 0x02, 0xad, 0xe9, 0x8c, - 0x06, 0xb6, 0xaf, 0x03, 0xb7, 0x96, 0x02, 0x03, 0x7d, 0xf1, 0xde, 0x01, - 0x03, 0x89, 0xf1, 0xb4, 0x01, 0x02, 0xd6, 0xf1, 0x01, 0xff, 0x90, 0x65, - 0x91, 0x01, 0xff, 0xd0, 0xf5, 0x33, 0x01, 0xd1, 0xf6, 0x33, 0x01, 0xd2, - 0xf7, 0x33, 0x01, 0xd3, 0xf8, 0x33, 0x01, 0xd4, 0xf9, 0x33, 0x01, 0xd5, - 0xfa, 0x33, 0x81, 0x25, 0xd6, 0x04, 0x34, 0xc1, 0x00, 0xe1, 0x05, 0x34, - 0x01, 0xe2, 0x06, 0x34, 0x01, 0xe3, 0x07, 0x34, 0x01, 0xe4, 0x08, 0x34, - 0x01, 0xe5, 0x09, 0x34, 0x01, 0xe6, 0x0a, 0x34, 0x01, 0xe7, 0x0b, 0x34, - 0x01, 0xe8, 0x0c, 0x34, 0x41, 0xe1, 0xfb, 0x33, 0x01, 0xe2, 0xfc, 0x33, - 0x01, 0xe3, 0xfd, 0x33, 0x01, 0xe4, 0xfe, 0x33, 0x01, 0xe5, 0xff, 0x33, - 0x01, 0xe6, 0x00, 0x34, 0x01, 0xe7, 0x01, 0x34, 0x01, 0xe8, 0x02, 0x34, - 0x01, 0xe9, 0x03, 0x34, 0x41, 0xd1, 0xe4, 0x33, 0x01, 0xd2, 0xe5, 0x33, - 0x81, 0x2f, 0xd3, 0xea, 0x33, 0x81, 0x22, 0xd4, 0xed, 0x33, 0x81, 0x19, - 0xd5, 0xef, 0x33, 0x81, 0x10, 0xd6, 0xf1, 0x33, 0x01, 0xd7, 0xf2, 0x33, - 0x01, 0xd8, 0xf3, 0x33, 0x01, 0xd9, 0xf4, 0x33, 0x41, 0xe1, 0xf0, 0x33, - 0x41, 0xe1, 0xee, 0x33, 0x41, 0xe1, 0xeb, 0x33, 0x01, 0xe2, 0xec, 0x33, - 0x41, 0xe1, 0xe6, 0x33, 0x01, 0xe2, 0xe7, 0x33, 0x01, 0xe3, 0xe8, 0x33, - 0x01, 0xe4, 0xe9, 0x33, 0x41, 0xd1, 0xdb, 0x33, 0x81, 0x1c, 0xd2, 0xdd, - 0x33, 0x01, 0xd3, 0xde, 0x33, 0x01, 0xd4, 0xdf, 0x33, 0x01, 0xd5, 0xe0, - 0x33, 0x01, 0xd6, 0xe1, 0x33, 0x01, 0xd7, 0xe2, 0x33, 0x01, 0xd8, 0xe3, - 0x33, 0x41, 0xe1, 0xdc, 0x33, 0x41, 0xd1, 0xcf, 0x33, 0x01, 0xd2, 0xd0, - 0x33, 0x01, 0xd3, 0xd1, 0x33, 0x01, 0xd4, 0xd2, 0x33, 0x81, 0x1a, 0xd5, - 0xd5, 0x33, 0x01, 0xd6, 0xd6, 0x33, 0x81, 0x0d, 0xd7, 0xd8, 0x33, 0x01, - 0xd8, 0xd9, 0x33, 0xc1, 0x00, 0xe1, 0xda, 0x33, 0x41, 0xe1, 0xd7, 0x33, - 0x41, 0xe1, 0xd3, 0x33, 0x01, 0xe2, 0xd4, 0x33, 0x41, 0x90, 0x06, 0x4d, - 0x4d, 0x82, 0x46, 0x34, 0x41, 0x90, 0x5e, 0x91, 0x20, 0x92, 0x01, 0xff, - 0xd0, 0xc8, 0x33, 0x01, 0xd1, 0xc9, 0x33, 0x01, 0xd2, 0xca, 0x33, 0x01, - 0xd3, 0xcb, 0x33, 0x01, 0xd4, 0xcc, 0x33, 0x81, 0x04, 0xd5, 0xce, 0x33, - 0x41, 0xe1, 0xcd, 0x33, 0x41, 0xd0, 0xba, 0x33, 0x81, 0x33, 0xd1, 0xbc, - 0x33, 0x01, 0xd2, 0xbd, 0x33, 0x01, 0xd3, 0xbe, 0x33, 0x01, 0xd4, 0xbf, - 0x33, 0x81, 0x1e, 0xd5, 0xc1, 0x33, 0x01, 0xd6, 0xc2, 0x33, 0x01, 0xd7, - 0xc3, 0x33, 0x81, 0x0d, 0xd8, 0xc5, 0x33, 0x81, 0x04, 0xd9, 0xc7, 0x33, - 0x41, 0xe1, 0xc6, 0x33, 0x41, 0xe1, 0xc4, 0x33, 0x41, 0xe1, 0xc0, 0x33, - 0x41, 0xe1, 0xbb, 0x33, 0x41, 0xd1, 0xaf, 0x33, 0x01, 0xd2, 0xb0, 0x33, - 0x01, 0xd3, 0xb1, 0x33, 0x81, 0x1d, 0xd4, 0xb3, 0x33, 0x01, 0xd5, 0xb4, - 0x33, 0x01, 0xd6, 0xb5, 0x33, 0x01, 0xd7, 0xb6, 0x33, 0x01, 0xd8, 0xb7, - 0x33, 0x01, 0xd9, 0xb8, 0x33, 0xc1, 0x00, 0xe1, 0xb9, 0x33, 0x41, 0xe1, - 0xb2, 0x33, 0x41, 0x90, 0x06, 0x4e, 0x22, 0x76, 0x30, 0x34, 0x41, 0x90, - 0xf8, 0x01, 0x91, 0xb3, 0x01, 0x92, 0x49, 0x93, 0x0b, 0x42, 0xae, 0xf1, - 0xad, 0x33, 0xc1, 0x00, 0xe1, 0xae, 0x33, 0x41, 0xd0, 0x9f, 0x33, 0x81, - 0x33, 0xd1, 0xa1, 0x33, 0x81, 0x2a, 0xd2, 0xa3, 0x33, 0x01, 0xd3, 0xa4, - 0x33, 0x81, 0x1d, 0xd4, 0xa6, 0x33, 0x01, 0xd5, 0xa7, 0x33, 0x01, 0xd6, - 0xa8, 0x33, 0x01, 0xd7, 0xa9, 0x33, 0x81, 0x08, 0xd8, 0xab, 0x33, 0x01, - 0xd9, 0xac, 0x33, 0x41, 0xe1, 0xaa, 0x33, 0x41, 0xe1, 0xa5, 0x33, 0x41, - 0xe1, 0xa2, 0x33, 0x41, 0xe1, 0xa0, 0x33, 0x41, 0xd0, 0x86, 0x33, 0x81, - 0x33, 0xd1, 0x93, 0x33, 0x01, 0xd2, 0x94, 0x33, 0x01, 0xd3, 0x95, 0x33, - 0x81, 0x22, 0xd4, 0x97, 0x33, 0x01, 0xd5, 0x98, 0x33, 0x01, 0xd6, 0x99, - 0x33, 0x01, 0xd7, 0x9a, 0x33, 0x01, 0xd8, 0x9b, 0x33, 0x81, 0x09, 0xd9, - 0x9d, 0x33, 0xc1, 0x00, 0xe1, 0x9e, 0x33, 0x41, 0xe1, 0x9c, 0x33, 0x41, - 0xe1, 0x96, 0x33, 0x41, 0xe1, 0x87, 0x33, 0x01, 0xe2, 0x88, 0x33, 0x01, - 0xe3, 0x89, 0x33, 0x01, 0xe4, 0x8a, 0x33, 0x01, 0xe5, 0x8b, 0x33, 0x01, - 0xe6, 0x8c, 0x33, 0x01, 0xe7, 0x8d, 0x33, 0x01, 0xe8, 0x8e, 0x33, 0x01, - 0xe9, 0x8f, 0x33, 0x01, 0xea, 0x90, 0x33, 0x01, 0xeb, 0x91, 0x33, 0x01, - 0xec, 0x92, 0x33, 0x41, 0xd0, 0x77, 0x33, 0x01, 0xd1, 0x78, 0x33, 0x81, - 0x29, 0xd2, 0x7c, 0x33, 0x81, 0x1c, 0xd3, 0x7f, 0x33, 0x01, 0xd4, 0x80, - 0x33, 0x01, 0xd5, 0x81, 0x33, 0x01, 0xd6, 0x82, 0x33, 0x01, 0xd7, 0x83, - 0x33, 0x01, 0xd8, 0x84, 0x33, 0x01, 0xd9, 0x85, 0x33, 0x41, 0xe1, 0x7d, - 0x33, 0x01, 0xe2, 0x7e, 0x33, 0x41, 0xe1, 0x79, 0x33, 0x01, 0xe2, 0x7a, - 0x33, 0x01, 0xe3, 0x7b, 0x33, 0x01, 0xe4, 0x2f, 0x34, 0x41, 0xd1, 0x62, - 0x33, 0x81, 0x2e, 0xd2, 0x6c, 0x33, 0x81, 0x25, 0xd3, 0x6e, 0x33, 0x01, - 0xd4, 0x6f, 0x33, 0x01, 0xd5, 0x70, 0x33, 0x01, 0xd6, 0x71, 0x33, 0x01, - 0xd7, 0x72, 0x33, 0x81, 0x08, 0xd8, 0x75, 0x33, 0x01, 0xd9, 0x76, 0x33, - 0x41, 0xe1, 0x73, 0x33, 0x01, 0xe2, 0x74, 0x33, 0x41, 0xe1, 0x6d, 0x33, - 0x41, 0xe1, 0x63, 0x33, 0x01, 0xe2, 0x64, 0x33, 0x01, 0xe3, 0x65, 0x33, - 0x01, 0xe4, 0x66, 0x33, 0x01, 0xe5, 0x67, 0x33, 0x01, 0xe6, 0x68, 0x33, - 0x01, 0xe7, 0x69, 0x33, 0x01, 0xe8, 0x6a, 0x33, 0x01, 0xe9, 0x6b, 0x33, - 0x41, 0x90, 0x9c, 0x01, 0x91, 0x72, 0x92, 0x3e, 0x93, 0x0f, 0x94, 0x01, - 0xff, 0xd0, 0x5f, 0x33, 0x01, 0xd1, 0x60, 0x33, 0x01, 0xd2, 0x61, 0x33, - 0x41, 0xd0, 0x54, 0x33, 0x01, 0xd1, 0x55, 0x33, 0x01, 0xd2, 0x56, 0x33, - 0x81, 0x1c, 0xd3, 0x58, 0x33, 0x01, 0xd4, 0x59, 0x33, 0x01, 0xd5, 0x5a, - 0x33, 0x01, 0xd6, 0x5b, 0x33, 0x01, 0xd7, 0x5c, 0x33, 0x01, 0xd8, 0x5d, - 0x33, 0x01, 0xd9, 0x5e, 0x33, 0x41, 0xe1, 0x57, 0x33, 0x41, 0xd0, 0x48, - 0x33, 0x01, 0xd1, 0x49, 0x33, 0x01, 0xd2, 0x4a, 0x33, 0x01, 0xd3, 0x4b, - 0x33, 0x81, 0x1d, 0xd4, 0x4d, 0x33, 0x01, 0xd5, 0x4e, 0x33, 0x01, 0xd6, - 0x4f, 0x33, 0x01, 0xd7, 0x50, 0x33, 0x01, 0xd8, 0x51, 0x33, 0x01, 0xd9, - 0x52, 0x33, 0xc1, 0x00, 0xe1, 0x53, 0x33, 0x41, 0xe1, 0x4c, 0x33, 0x41, - 0xd0, 0x3e, 0x33, 0x01, 0xd1, 0x3f, 0x33, 0x01, 0xd2, 0x40, 0x33, 0x01, - 0xd3, 0x41, 0x33, 0x01, 0xd4, 0x42, 0x33, 0x01, 0xd5, 0x43, 0x33, 0x01, - 0xd6, 0x44, 0x33, 0x01, 0xd7, 0x45, 0x33, 0x01, 0xd8, 0x46, 0x33, 0x01, - 0xd9, 0x47, 0x33, 0x41, 0xd1, 0x33, 0x33, 0x01, 0xd2, 0x34, 0x33, 0x01, - 0xd3, 0x35, 0x33, 0x01, 0xd4, 0x36, 0x33, 0x01, 0xd5, 0x37, 0x33, 0x01, - 0xd6, 0x38, 0x33, 0x81, 0x0c, 0xd7, 0x3b, 0x33, 0x01, 0xd8, 0x3c, 0x33, - 0x01, 0xd9, 0x3d, 0x33, 0x41, 0xe1, 0x39, 0x33, 0x01, 0xe2, 0x3a, 0x33, - 0x41, 0x90, 0x06, 0x4d, 0xd9, 0x7e, 0x45, 0x34, 0x41, 0x90, 0x87, 0x01, - 0x91, 0x53, 0x92, 0x29, 0x93, 0x01, 0xff, 0xd0, 0x2a, 0x33, 0x01, 0xd1, - 0x2b, 0x33, 0x01, 0xd2, 0x2c, 0x33, 0x81, 0x15, 0xd3, 0x2e, 0x33, 0x81, - 0x0c, 0xd4, 0x30, 0x33, 0x01, 0xd5, 0x31, 0x33, 0x01, 0xd6, 0x32, 0x33, - 0x41, 0xe1, 0x2f, 0x33, 0x41, 0xe1, 0x2d, 0x33, 0x41, 0xd0, 0x20, 0x33, - 0x01, 0xd1, 0x21, 0x33, 0x01, 0xd2, 0x22, 0x33, 0x01, 0xd3, 0x23, 0x33, - 0x01, 0xd4, 0x24, 0x33, 0x01, 0xd5, 0x25, 0x33, 0x01, 0xd6, 0x26, 0x33, - 0x01, 0xd7, 0x27, 0x33, 0x01, 0xd8, 0x28, 0x33, 0x01, 0xd9, 0x29, 0x33, - 0x41, 0xd0, 0x14, 0x33, 0x01, 0xd1, 0x15, 0x33, 0x81, 0x25, 0xd2, 0x17, - 0x33, 0x01, 0xd3, 0x18, 0x33, 0x01, 0xd4, 0x19, 0x33, 0x01, 0xd5, 0x1a, - 0x33, 0x01, 0xd6, 0x1b, 0x33, 0x81, 0x0c, 0xd7, 0x1d, 0x33, 0x01, 0xd8, - 0x1e, 0x33, 0x01, 0xd9, 0x1f, 0x33, 0x41, 0xe1, 0x1c, 0x33, 0x41, 0xe1, - 0x16, 0x33, 0x41, 0xd1, 0x07, 0x33, 0x01, 0xd2, 0x08, 0x33, 0x01, 0xd3, - 0x09, 0x33, 0x81, 0x27, 0xd4, 0x0b, 0x33, 0x01, 0xd5, 0x0c, 0x33, 0x01, - 0xd6, 0x0d, 0x33, 0x01, 0xd7, 0x0e, 0x33, 0x81, 0x12, 0xd8, 0x10, 0x33, - 0x81, 0x09, 0xd9, 0x12, 0x33, 0xc1, 0x00, 0xe1, 0x13, 0x33, 0x41, 0xe1, - 0x11, 0x33, 0x41, 0xe1, 0x0f, 0x33, 0x41, 0xe1, 0x0a, 0x33, 0x41, 0x90, - 0xba, 0x01, 0x91, 0x81, 0x01, 0x92, 0x4e, 0x93, 0x1f, 0x94, 0x01, 0xff, - 0xd0, 0x00, 0x33, 0x01, 0xd1, 0x01, 0x33, 0x01, 0xd2, 0x02, 0x33, 0x01, - 0xd3, 0x03, 0x33, 0x01, 0xd4, 0x04, 0x33, 0x01, 0xd5, 0x05, 0x33, 0x01, - 0xd6, 0x06, 0x33, 0x41, 0xd0, 0xf5, 0x32, 0x01, 0xd1, 0xf6, 0x32, 0x01, - 0xd2, 0xf7, 0x32, 0x01, 0xd3, 0xf8, 0x32, 0x01, 0xd4, 0xf9, 0x32, 0x01, - 0xd5, 0xfa, 0x32, 0x81, 0x10, 0xd6, 0xfc, 0x32, 0x01, 0xd7, 0xfd, 0x32, - 0x01, 0xd8, 0xfe, 0x32, 0x01, 0xd9, 0xff, 0x32, 0x41, 0xe1, 0xfb, 0x32, - 0x41, 0xd0, 0xe9, 0x32, 0x01, 0xd1, 0xea, 0x32, 0x01, 0xd2, 0xeb, 0x32, - 0x01, 0xd3, 0xec, 0x32, 0x01, 0xd4, 0xed, 0x32, 0x01, 0xd5, 0xee, 0x32, - 0x01, 0xd6, 0xef, 0x32, 0x81, 0x0c, 0xd7, 0xf2, 0x32, 0x01, 0xd8, 0xf3, - 0x32, 0x01, 0xd9, 0xf4, 0x32, 0x41, 0xe1, 0xf0, 0x32, 0x01, 0xe2, 0xf1, - 0x32, 0x41, 0xd0, 0xdc, 0x32, 0x01, 0xd1, 0xdd, 0x32, 0x01, 0xd2, 0xde, - 0x32, 0x01, 0xd3, 0xdf, 0x32, 0x01, 0xd4, 0xe0, 0x32, 0x81, 0x19, 0xd5, - 0xe3, 0x32, 0x01, 0xd6, 0xe4, 0x32, 0x01, 0xd7, 0xe5, 0x32, 0x81, 0x08, - 0xd8, 0xe7, 0x32, 0x01, 0xd9, 0xe8, 0x32, 0x41, 0xe1, 0xe6, 0x32, 0x41, - 0xe1, 0xe1, 0x32, 0x01, 0xe2, 0xe2, 0x32, 0x41, 0xd1, 0xd1, 0x32, 0x01, - 0xd2, 0xd2, 0x32, 0x81, 0x21, 0xd3, 0xd4, 0x32, 0x01, 0xd4, 0xd5, 0x32, - 0x01, 0xd5, 0xd6, 0x32, 0x01, 0xd6, 0xd7, 0x32, 0x81, 0x0c, 0xd7, 0xd9, - 0x32, 0x01, 0xd8, 0xda, 0x32, 0x01, 0xd9, 0xdb, 0x32, 0x41, 0xe1, 0xd8, - 0x32, 0x41, 0xe1, 0xd3, 0x32, 0x41, 0x90, 0x5f, 0x91, 0x2b, 0x92, 0x01, - 0xff, 0xd0, 0xc7, 0x32, 0x01, 0xd1, 0xc8, 0x32, 0x01, 0xd2, 0xc9, 0x32, - 0x01, 0xd3, 0xca, 0x32, 0x01, 0xd4, 0xcb, 0x32, 0x01, 0xd5, 0xcc, 0x32, - 0x01, 0xd6, 0xcd, 0x32, 0x01, 0xd7, 0xce, 0x32, 0x01, 0xd8, 0xcf, 0x32, - 0x01, 0xd9, 0xd0, 0x32, 0x41, 0xd0, 0xbb, 0x32, 0x81, 0x29, 0xd1, 0xbd, - 0x32, 0x01, 0xd2, 0xbe, 0x32, 0x01, 0xd3, 0xbf, 0x32, 0x01, 0xd4, 0xc0, - 0x32, 0x01, 0xd5, 0xc1, 0x32, 0x01, 0xd6, 0xc2, 0x32, 0x81, 0x0c, 0xd7, - 0xc4, 0x32, 0x01, 0xd8, 0xc5, 0x32, 0x01, 0xd9, 0xc6, 0x32, 0x41, 0xe1, - 0xc3, 0x32, 0x41, 0xe1, 0xbc, 0x32, 0x41, 0xd1, 0xaf, 0x32, 0x01, 0xd2, - 0xb0, 0x32, 0x81, 0x25, 0xd3, 0xb2, 0x32, 0x81, 0x18, 0xd4, 0xb5, 0x32, - 0x01, 0xd5, 0xb6, 0x32, 0x01, 0xd6, 0xb7, 0x32, 0x01, 0xd7, 0xb8, 0x32, - 0x01, 0xd8, 0xb9, 0x32, 0x01, 0xd9, 0xba, 0x32, 0x41, 0xe1, 0xb3, 0x32, - 0x01, 0xe2, 0xb4, 0x32, 0x41, 0xe1, 0xb1, 0x32, 0x41, 0xd1, 0xa8, 0x32, - 0x01, 0xd2, 0xa9, 0x32, 0x01, 0xd3, 0xaa, 0x32, 0x01, 0xd4, 0xab, 0x32, - 0x01, 0xd5, 0xac, 0x32, 0x01, 0xd6, 0xad, 0x32, 0x01, 0xd7, 0xae, 0x32, - 0x41, 0x90, 0x0b, 0x91, 0x01, 0xff, 0xd0, 0xa6, 0x32, 0x01, 0xd1, 0xa7, - 0x32, 0x41, 0xd1, 0x9b, 0x32, 0x81, 0x25, 0xd2, 0x9d, 0x32, 0x01, 0xd3, - 0x9e, 0x32, 0x81, 0x18, 0xd4, 0xa0, 0x32, 0x01, 0xd5, 0xa1, 0x32, 0x01, - 0xd6, 0xa2, 0x32, 0x01, 0xd7, 0xa3, 0x32, 0x01, 0xd8, 0xa4, 0x32, 0x01, - 0xd9, 0xa5, 0x32, 0x41, 0xe1, 0x9f, 0x32, 0x41, 0xe1, 0x9c, 0x32, 0x41, - 0x90, 0x06, 0x4d, 0x58, 0x88, 0x36, 0x34, 0x41, 0x90, 0xff, 0x01, 0x91, - 0xc2, 0x01, 0x92, 0x83, 0x01, 0x93, 0x3e, 0x94, 0x14, 0x95, 0x01, 0xff, - 0xd0, 0x97, 0x32, 0x81, 0x04, 0xd1, 0x9a, 0x32, 0x41, 0xe1, 0x98, 0x32, - 0x01, 0xe2, 0x99, 0x32, 0x41, 0xd0, 0x8d, 0x32, 0x01, 0xd1, 0x8e, 0x32, - 0x01, 0xd2, 0x8f, 0x32, 0x01, 0xd3, 0x90, 0x32, 0x01, 0xd4, 0x91, 0x32, - 0x01, 0xd5, 0x92, 0x32, 0x01, 0xd6, 0x93, 0x32, 0x01, 0xd7, 0x94, 0x32, - 0x01, 0xd8, 0x95, 0x32, 0x01, 0xd9, 0x96, 0x32, 0x41, 0xd0, 0x7d, 0x32, - 0x81, 0x3a, 0xd1, 0x7f, 0x32, 0x01, 0xd2, 0x80, 0x32, 0x01, 0xd3, 0x81, - 0x32, 0x81, 0x29, 0xd4, 0x83, 0x32, 0x01, 0xd5, 0x84, 0x32, 0x01, 0xd6, - 0x85, 0x32, 0x81, 0x0c, 0xd7, 0x8a, 0x32, 0x01, 0xd8, 0x8b, 0x32, 0x01, - 0xd9, 0x8c, 0x32, 0x41, 0xe1, 0x86, 0x32, 0x01, 0xe2, 0x87, 0x32, 0x01, - 0xe3, 0x88, 0x32, 0x01, 0xe4, 0x89, 0x32, 0x41, 0xe1, 0x82, 0x32, 0x41, - 0xe1, 0x7e, 0x32, 0x41, 0xd0, 0x6f, 0x32, 0x81, 0x33, 0xd1, 0x71, 0x32, - 0x01, 0xd2, 0x72, 0x32, 0x01, 0xd3, 0x73, 0x32, 0x01, 0xd4, 0x74, 0x32, - 0x81, 0x1e, 0xd5, 0x76, 0x32, 0x81, 0x15, 0xd6, 0x78, 0x32, 0x01, 0xd7, - 0x79, 0x32, 0x01, 0xd8, 0x7a, 0x32, 0x01, 0xd9, 0x7b, 0x32, 0xc1, 0x00, - 0xe1, 0x7c, 0x32, 0x41, 0xe1, 0x77, 0x32, 0x41, 0xe1, 0x75, 0x32, 0x41, - 0xe1, 0x70, 0x32, 0x41, 0xd0, 0x61, 0x32, 0x81, 0x29, 0xd1, 0x65, 0x32, - 0x01, 0xd2, 0x66, 0x32, 0x01, 0xd3, 0x67, 0x32, 0x01, 0xd4, 0x68, 0x32, - 0x01, 0xd5, 0x69, 0x32, 0x01, 0xd6, 0x6a, 0x32, 0x01, 0xd7, 0x6b, 0x32, - 0x01, 0xd8, 0x6c, 0x32, 0x01, 0xd9, 0x6d, 0x32, 0xc1, 0x00, 0xe1, 0x6e, - 0x32, 0x41, 0xe1, 0x62, 0x32, 0x01, 0xe2, 0x63, 0x32, 0x01, 0xe3, 0x64, - 0x32, 0x41, 0xd1, 0x50, 0x32, 0x81, 0x3e, 0xd2, 0x52, 0x32, 0x01, 0xd3, - 0x53, 0x32, 0x01, 0xd4, 0x54, 0x32, 0x01, 0xd5, 0x55, 0x32, 0x81, 0x29, - 0xd6, 0x57, 0x32, 0x81, 0x0c, 0xd7, 0x5e, 0x32, 0x01, 0xd8, 0x5f, 0x32, - 0x01, 0xd9, 0x60, 0x32, 0x41, 0xe1, 0x58, 0x32, 0x01, 0xe2, 0x59, 0x32, - 0x01, 0xe3, 0x5a, 0x32, 0x01, 0xe4, 0x5b, 0x32, 0x01, 0xe5, 0x5c, 0x32, - 0x01, 0xe6, 0x5d, 0x32, 0x41, 0xe1, 0x56, 0x32, 0x41, 0xe1, 0x51, 0x32, - 0x41, 0x90, 0xdc, 0x01, 0x02, 0x81, 0x96, 0x78, 0x02, 0xad, 0xe9, 0x01, - 0xff, 0x90, 0x4d, 0x91, 0x14, 0x92, 0x01, 0xff, 0xd0, 0x4c, 0x32, 0x01, - 0xd1, 0x4d, 0x32, 0x01, 0xd2, 0x4e, 0x32, 0xc1, 0x00, 0xe1, 0x4f, 0x32, - 0x41, 0xd0, 0x3f, 0x32, 0x81, 0x2e, 0xd1, 0x41, 0x32, 0x81, 0x25, 0xd2, - 0x43, 0x32, 0x01, 0xd3, 0x44, 0x32, 0x01, 0xd4, 0x45, 0x32, 0x01, 0xd5, - 0x46, 0x32, 0x01, 0xd6, 0x47, 0x32, 0x01, 0xd7, 0x48, 0x32, 0x01, 0xd8, - 0x49, 0x32, 0x81, 0x04, 0xd9, 0x4b, 0x32, 0x41, 0xe1, 0x4a, 0x32, 0x41, - 0xe1, 0x42, 0x32, 0x41, 0xe1, 0x40, 0x32, 0x41, 0xd1, 0x36, 0x32, 0x01, - 0xd2, 0x37, 0x32, 0x01, 0xd3, 0x38, 0x32, 0x01, 0xd4, 0x39, 0x32, 0x01, - 0xd5, 0x3a, 0x32, 0x01, 0xd6, 0x3b, 0x32, 0x01, 0xd7, 0x3c, 0x32, 0x01, - 0xd8, 0x3d, 0x32, 0x01, 0xd9, 0x3e, 0x32, 0x41, 0x90, 0x35, 0x91, 0x06, - 0x42, 0xab, 0xe4, 0x35, 0x32, 0x41, 0xd0, 0x2a, 0x32, 0x01, 0xd1, 0x2b, - 0x32, 0x01, 0xd2, 0x2c, 0x32, 0x01, 0xd3, 0x2d, 0x32, 0x01, 0xd4, 0x2e, - 0x32, 0x01, 0xd5, 0x2f, 0x32, 0x01, 0xd6, 0x30, 0x32, 0x01, 0xd7, 0x31, - 0x32, 0x81, 0x08, 0xd8, 0x33, 0x32, 0x01, 0xd9, 0x34, 0x32, 0x41, 0xe1, - 0x32, 0x32, 0x41, 0xd1, 0x20, 0x32, 0x01, 0xd2, 0x21, 0x32, 0x01, 0xd3, - 0x22, 0x32, 0x01, 0xd4, 0x23, 0x32, 0x01, 0xd5, 0x24, 0x32, 0x81, 0x10, - 0xd6, 0x26, 0x32, 0x01, 0xd7, 0x27, 0x32, 0x01, 0xd8, 0x28, 0x32, 0x01, - 0xd9, 0x29, 0x32, 0x41, 0xe1, 0x25, 0x32, 0x41, 0x90, 0xaf, 0x01, 0x91, - 0x7c, 0x92, 0x4d, 0x93, 0x0f, 0x94, 0x01, 0xff, 0xd0, 0x1d, 0x32, 0x01, - 0xd1, 0x1e, 0x32, 0x01, 0xd2, 0x1f, 0x32, 0x41, 0xd0, 0x0f, 0x32, 0x01, - 0xd1, 0x10, 0x32, 0x01, 0xd2, 0x11, 0x32, 0x01, 0xd3, 0x12, 0x32, 0x81, - 0x27, 0xd4, 0x14, 0x32, 0x81, 0x1e, 0xd5, 0x16, 0x32, 0x81, 0x15, 0xd6, - 0x18, 0x32, 0x01, 0xd7, 0x19, 0x32, 0x81, 0x08, 0xd8, 0x1b, 0x32, 0x01, - 0xd9, 0x1c, 0x32, 0x41, 0xe1, 0x1a, 0x32, 0x41, 0xe1, 0x17, 0x32, 0x41, - 0xe1, 0x15, 0x32, 0x41, 0xe1, 0x13, 0x32, 0x41, 0xd0, 0x04, 0x32, 0x01, - 0xd1, 0x05, 0x32, 0x01, 0xd2, 0x06, 0x32, 0x01, 0xd3, 0x07, 0x32, 0x01, - 0xd4, 0x08, 0x32, 0x01, 0xd5, 0x09, 0x32, 0x81, 0x10, 0xd6, 0x0b, 0x32, - 0x01, 0xd7, 0x0c, 0x32, 0x01, 0xd8, 0x0d, 0x32, 0x01, 0xd9, 0x0e, 0x32, - 0x41, 0xe1, 0x0a, 0x32, 0x41, 0xd0, 0xf8, 0x31, 0x01, 0xd1, 0xf9, 0x31, - 0x01, 0xd2, 0xfa, 0x31, 0x01, 0xd3, 0xfb, 0x31, 0x01, 0xd4, 0xfc, 0x31, - 0x01, 0xd5, 0xfd, 0x31, 0x01, 0xd6, 0xfe, 0x31, 0x01, 0xd7, 0xff, 0x31, - 0x01, 0xd8, 0x00, 0x32, 0x81, 0x04, 0xd9, 0x03, 0x32, 0x41, 0xe1, 0x01, - 0x32, 0x01, 0xe2, 0x02, 0x32, 0x41, 0xd1, 0xef, 0x31, 0x01, 0xd2, 0xf0, - 0x31, 0x01, 0xd3, 0xf1, 0x31, 0x01, 0xd4, 0xf2, 0x31, 0x01, 0xd5, 0xf3, - 0x31, 0x01, 0xd6, 0xf4, 0x31, 0x01, 0xd7, 0xf5, 0x31, 0x01, 0xd8, 0xf6, - 0x31, 0x01, 0xd9, 0xf7, 0x31, 0x41, 0x90, 0x76, 0x52, 0x92, 0x51, 0x40, - 0x34, 0x01, 0x4f, 0x55, 0x6f, 0x55, 0x34, 0xc1, 0x00, 0x04, 0x11, 0x05, - 0x01, 0xff, 0x46, 0x66, 0x0a, 0x50, 0x34, 0x81, 0x41, 0x43, 0x15, 0x05, - 0x52, 0x34, 0x01, 0x45, 0xeb, 0xe7, 0x49, 0x34, 0x81, 0x23, 0x43, 0x1e, - 0x00, 0x4b, 0x34, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x05, 0xcc, 0x53, - 0x34, 0x01, 0x43, 0x15, 0x05, 0x4a, 0x34, 0x01, 0x45, 0xeb, 0xe7, 0x47, - 0x34, 0xc1, 0x00, 0x4f, 0x99, 0x67, 0x4f, 0x34, 0x41, 0x05, 0x19, 0x00, - 0x01, 0xff, 0x46, 0x66, 0x0a, 0x51, 0x34, 0x01, 0x43, 0x1e, 0x00, 0x4d, - 0x34, 0x41, 0x80, 0x01, 0xff, 0x47, 0x05, 0xcc, 0x54, 0x34, 0x01, 0x43, - 0x15, 0x05, 0x4e, 0x34, 0x01, 0x45, 0xeb, 0xe7, 0x48, 0x34, 0xc1, 0x00, - 0x4c, 0x41, 0x89, 0x4c, 0x34, 0x41, 0x90, 0xed, 0x01, 0x91, 0x8d, 0x01, - 0x92, 0x54, 0x93, 0x1c, 0x94, 0x01, 0xff, 0xd0, 0xe9, 0x31, 0x81, 0x10, - 0xd1, 0xeb, 0x31, 0x01, 0xd2, 0xec, 0x31, 0x01, 0xd3, 0xed, 0x31, 0x01, - 0xd4, 0xee, 0x31, 0x41, 0xe1, 0xea, 0x31, 0x41, 0xd0, 0xdc, 0x31, 0x01, - 0xd1, 0xdd, 0x31, 0x81, 0x29, 0xd2, 0xdf, 0x31, 0x01, 0xd3, 0xe0, 0x31, - 0x81, 0x18, 0xd4, 0xe3, 0x31, 0x01, 0xd5, 0xe4, 0x31, 0x01, 0xd6, 0xe5, - 0x31, 0x01, 0xd7, 0xe6, 0x31, 0x01, 0xd8, 0xe7, 0x31, 0x01, 0xd9, 0xe8, - 0x31, 0x41, 0xe1, 0xe1, 0x31, 0x01, 0xe2, 0xe2, 0x31, 0x41, 0xe1, 0xde, - 0x31, 0x41, 0xd0, 0xcf, 0x31, 0x01, 0xd1, 0xd0, 0x31, 0x01, 0xd2, 0xd1, - 0x31, 0x81, 0x26, 0xd3, 0xd3, 0x31, 0x01, 0xd4, 0xd4, 0x31, 0x81, 0x19, - 0xd5, 0xd6, 0x31, 0x01, 0xd6, 0xd7, 0x31, 0x01, 0xd7, 0xd8, 0x31, 0x01, - 0xd8, 0xd9, 0x31, 0x81, 0x04, 0xd9, 0xdb, 0x31, 0x41, 0xe1, 0xda, 0x31, - 0x41, 0xe1, 0xd5, 0x31, 0x41, 0xe1, 0xd2, 0x31, 0x41, 0xd0, 0xb9, 0x31, - 0x81, 0x54, 0xd1, 0xbb, 0x31, 0x01, 0xd2, 0xbc, 0x31, 0x81, 0x2b, 0xd3, - 0xc5, 0x31, 0x01, 0xd4, 0xc6, 0x31, 0x01, 0xd5, 0xc7, 0x31, 0x81, 0x1a, - 0xd6, 0xc9, 0x31, 0x81, 0x11, 0xd7, 0xcb, 0x31, 0x81, 0x08, 0xd8, 0xcd, - 0x31, 0x01, 0xd9, 0xce, 0x31, 0x41, 0xe1, 0xcc, 0x31, 0x41, 0xe1, 0xca, - 0x31, 0x41, 0xe1, 0xc8, 0x31, 0x41, 0xe1, 0xbd, 0x31, 0x01, 0xe2, 0xbe, - 0x31, 0x01, 0xe3, 0xbf, 0x31, 0x01, 0xe4, 0xc0, 0x31, 0x01, 0xe5, 0xc1, - 0x31, 0x01, 0xe6, 0xc2, 0x31, 0x01, 0xe7, 0xc3, 0x31, 0x01, 0xe8, 0xc4, - 0x31, 0x41, 0xe1, 0xba, 0x31, 0x41, 0xd1, 0xad, 0x31, 0x81, 0x25, 0xd2, - 0xb0, 0x31, 0x01, 0xd3, 0xb1, 0x31, 0x81, 0x18, 0xd4, 0xb3, 0x31, 0x01, - 0xd5, 0xb4, 0x31, 0x01, 0xd6, 0xb5, 0x31, 0x01, 0xd7, 0xb6, 0x31, 0x01, - 0xd8, 0xb7, 0x31, 0x01, 0xd9, 0xb8, 0x31, 0x41, 0xe1, 0xb2, 0x31, 0x41, - 0xe1, 0xae, 0x31, 0x01, 0xe2, 0xaf, 0x31, 0x41, 0x02, 0xa4, 0xd5, 0x06, - 0x48, 0xde, 0x7e, 0x43, 0x34, 0x41, 0xd1, 0xa3, 0x31, 0x01, 0xd2, 0xa4, - 0x31, 0x81, 0x1d, 0xd3, 0xa6, 0x31, 0x01, 0xd4, 0xa7, 0x31, 0x01, 0xd5, - 0xa8, 0x31, 0x01, 0xd6, 0xa9, 0x31, 0x81, 0x08, 0xd7, 0xab, 0x31, 0x01, - 0xd8, 0xac, 0x31, 0x41, 0xe1, 0xaa, 0x31, 0x41, 0xe1, 0xa5, 0x31, 0x41, - 0xd1, 0x9b, 0x31, 0x01, 0xd2, 0x9c, 0x31, 0x01, 0xd3, 0x9d, 0x31, 0x01, - 0xd4, 0x9e, 0x31, 0x01, 0xd5, 0x9f, 0x31, 0x01, 0xd6, 0xa0, 0x31, 0x01, - 0xd7, 0xa1, 0x31, 0x01, 0xd8, 0xa2, 0x31, 0x41, 0x90, 0x37, 0x09, 0x36, - 0xba, 0x01, 0xff, 0x46, 0x66, 0x0a, 0x3b, 0x34, 0x81, 0x1c, 0x46, 0x7d, - 0x02, 0x39, 0x34, 0x01, 0x43, 0x1e, 0x00, 0x3a, 0x34, 0xc1, 0x00, 0x80, - 0x01, 0xff, 0x43, 0x15, 0x05, 0x34, 0x34, 0x01, 0x45, 0xeb, 0xe7, 0x32, - 0x34, 0x41, 0x80, 0x01, 0xff, 0x43, 0x15, 0x05, 0x35, 0x34, 0x01, 0x45, - 0xeb, 0xe7, 0x33, 0x34, 0x41, 0x90, 0x25, 0x91, 0x01, 0xff, 0xd0, 0x93, - 0x31, 0x81, 0x19, 0xd1, 0x95, 0x31, 0x81, 0x10, 0xd2, 0x97, 0x31, 0x01, - 0xd3, 0x98, 0x31, 0x01, 0xd4, 0x99, 0x31, 0x01, 0xd5, 0x9a, 0x31, 0x41, - 0xe1, 0x96, 0x31, 0x41, 0xe1, 0x94, 0x31, 0x41, 0xd1, 0x88, 0x31, 0x01, - 0xd2, 0x89, 0x31, 0x01, 0xd3, 0x8a, 0x31, 0x01, 0xd4, 0x8b, 0x31, 0x01, - 0xd5, 0x8c, 0x31, 0x81, 0x15, 0xd6, 0x8e, 0x31, 0x01, 0xd7, 0x8f, 0x31, - 0x01, 0xd8, 0x90, 0x31, 0x01, 0xd9, 0x91, 0x31, 0xc1, 0x00, 0xe1, 0x92, - 0x31, 0x41, 0xe1, 0x8d, 0x31, 0x41, 0x02, 0xa4, 0xd5, 0x16, 0x04, 0x23, - 0x00, 0x06, 0x50, 0x1a, 0x64, 0x31, 0x34, 0x41, 0x45, 0xbe, 0xbd, 0x42, - 0x34, 0x01, 0x49, 0xdd, 0x7e, 0x44, 0x34, 0x41, 0xd1, 0x7f, 0x31, 0x01, - 0xd2, 0x80, 0x31, 0x01, 0xd3, 0x81, 0x31, 0x01, 0xd4, 0x82, 0x31, 0x01, - 0xd5, 0x83, 0x31, 0x01, 0xd6, 0x84, 0x31, 0x81, 0x08, 0xd7, 0x86, 0x31, - 0x01, 0xd8, 0x87, 0x31, 0x41, 0xe1, 0x85, 0x31, 0x41, 0x90, 0xe3, 0x01, - 0x91, 0xb3, 0x01, 0x92, 0x7f, 0x93, 0x4b, 0x94, 0x17, 0x95, 0x01, 0xff, - 0xd0, 0x7a, 0x31, 0x01, 0xd1, 0x7b, 0x31, 0x01, 0xd2, 0x7c, 0x31, 0x01, - 0xd3, 0x7d, 0x31, 0x01, 0xd4, 0x7e, 0x31, 0x41, 0xd0, 0x6e, 0x31, 0x01, - 0xd1, 0x6f, 0x31, 0x01, 0xd2, 0x70, 0x31, 0x01, 0xd3, 0x71, 0x31, 0x81, - 0x1d, 0xd4, 0x73, 0x31, 0x01, 0xd5, 0x74, 0x31, 0x81, 0x10, 0xd6, 0x76, - 0x31, 0x01, 0xd7, 0x77, 0x31, 0x01, 0xd8, 0x78, 0x31, 0x01, 0xd9, 0x79, - 0x31, 0x41, 0xe1, 0x75, 0x31, 0x41, 0xe1, 0x72, 0x31, 0x41, 0xd0, 0x62, - 0x31, 0x01, 0xd1, 0x63, 0x31, 0x01, 0xd2, 0x64, 0x31, 0x01, 0xd3, 0x65, - 0x31, 0x01, 0xd4, 0x66, 0x31, 0x01, 0xd5, 0x67, 0x31, 0x01, 0xd6, 0x68, - 0x31, 0x81, 0x11, 0xd7, 0x6a, 0x31, 0x81, 0x08, 0xd8, 0x6c, 0x31, 0x01, - 0xd9, 0x6d, 0x31, 0x41, 0xe1, 0x6b, 0x31, 0x41, 0xe1, 0x69, 0x31, 0x41, - 0xd0, 0x56, 0x31, 0x81, 0x29, 0xd1, 0x58, 0x31, 0x01, 0xd2, 0x59, 0x31, - 0x01, 0xd3, 0x5a, 0x31, 0x01, 0xd4, 0x5b, 0x31, 0x01, 0xd5, 0x5c, 0x31, - 0x01, 0xd6, 0x5d, 0x31, 0x81, 0x0c, 0xd7, 0x5f, 0x31, 0x01, 0xd8, 0x60, - 0x31, 0x01, 0xd9, 0x61, 0x31, 0x41, 0xe1, 0x5e, 0x31, 0x41, 0xe1, 0x57, - 0x31, 0x41, 0xd0, 0x4b, 0x31, 0x01, 0xd1, 0x4c, 0x31, 0x81, 0x20, 0xd2, - 0x4e, 0x31, 0x01, 0xd3, 0x4f, 0x31, 0x01, 0xd4, 0x50, 0x31, 0x01, 0xd5, - 0x51, 0x31, 0x01, 0xd6, 0x52, 0x31, 0x01, 0xd7, 0x53, 0x31, 0x01, 0xd8, - 0x54, 0x31, 0x01, 0xd9, 0x55, 0x31, 0x41, 0xe1, 0x4d, 0x31, 0x41, 0xd1, - 0x3f, 0x31, 0x01, 0xd2, 0x40, 0x31, 0x01, 0xd3, 0x41, 0x31, 0x01, 0xd4, - 0x42, 0x31, 0x01, 0xd5, 0x43, 0x31, 0x01, 0xd6, 0x44, 0x31, 0x81, 0x15, - 0xd7, 0x46, 0x31, 0x81, 0x08, 0xd8, 0x49, 0x31, 0x01, 0xd9, 0x4a, 0x31, - 0x41, 0xe1, 0x47, 0x31, 0x01, 0xe2, 0x48, 0x31, 0x41, 0xe1, 0x45, 0x31, - 0x41, 0x90, 0x06, 0x49, 0xba, 0xbd, 0x41, 0x34, 0x41, 0x90, 0xf2, 0x01, - 0x91, 0xc2, 0x01, 0x92, 0x92, 0x01, 0x93, 0x59, 0x94, 0x20, 0x95, 0x01, - 0xff, 0xd0, 0x38, 0x31, 0x01, 0xd1, 0x39, 0x31, 0x81, 0x08, 0xd2, 0x3d, - 0x31, 0x01, 0xd3, 0x3e, 0x31, 0x41, 0xe1, 0x3a, 0x31, 0x01, 0xe2, 0x3b, - 0x31, 0x01, 0xe3, 0x3c, 0x31, 0x41, 0xd0, 0x2b, 0x31, 0x01, 0xd1, 0x2c, - 0x31, 0x01, 0xd2, 0x2d, 0x31, 0x01, 0xd3, 0x2e, 0x31, 0x01, 0xd4, 0x2f, - 0x31, 0x01, 0xd5, 0x30, 0x31, 0x81, 0x1a, 0xd6, 0x32, 0x31, 0x81, 0x11, - 0xd7, 0x34, 0x31, 0x81, 0x08, 0xd8, 0x36, 0x31, 0x01, 0xd9, 0x37, 0x31, - 0x41, 0xe1, 0x35, 0x31, 0x41, 0xe1, 0x33, 0x31, 0x41, 0xe1, 0x31, 0x31, - 0x41, 0xd0, 0x1e, 0x31, 0x01, 0xd1, 0x1f, 0x31, 0x81, 0x2a, 0xd2, 0x21, - 0x31, 0x01, 0xd3, 0x22, 0x31, 0x01, 0xd4, 0x23, 0x31, 0x01, 0xd5, 0x24, - 0x31, 0x01, 0xd6, 0x25, 0x31, 0x01, 0xd7, 0x26, 0x31, 0x81, 0x0d, 0xd8, - 0x28, 0x31, 0x81, 0x04, 0xd9, 0x2a, 0x31, 0x41, 0xe1, 0x29, 0x31, 0x41, - 0xe1, 0x27, 0x31, 0x41, 0xe1, 0x20, 0x31, 0x41, 0xd0, 0x13, 0x31, 0x01, - 0xd1, 0x14, 0x31, 0x81, 0x20, 0xd2, 0x16, 0x31, 0x01, 0xd3, 0x17, 0x31, - 0x01, 0xd4, 0x18, 0x31, 0x01, 0xd5, 0x19, 0x31, 0x01, 0xd6, 0x1a, 0x31, - 0x01, 0xd7, 0x1b, 0x31, 0x01, 0xd8, 0x1c, 0x31, 0x01, 0xd9, 0x1d, 0x31, - 0x41, 0xe1, 0x15, 0x31, 0x41, 0xd0, 0x08, 0x31, 0x01, 0xd1, 0x09, 0x31, - 0x01, 0xd2, 0x0a, 0x31, 0x01, 0xd3, 0x0b, 0x31, 0x81, 0x18, 0xd4, 0x0d, - 0x31, 0x01, 0xd5, 0x0e, 0x31, 0x01, 0xd6, 0x0f, 0x31, 0x01, 0xd7, 0x10, - 0x31, 0x01, 0xd8, 0x11, 0x31, 0x01, 0xd9, 0x12, 0x31, 0x41, 0xe1, 0x0c, - 0x31, 0x41, 0xd1, 0xfe, 0x30, 0x81, 0x20, 0xd2, 0x00, 0x31, 0x01, 0xd3, - 0x01, 0x31, 0x01, 0xd4, 0x02, 0x31, 0x01, 0xd5, 0x03, 0x31, 0x01, 0xd6, - 0x04, 0x31, 0x01, 0xd7, 0x05, 0x31, 0x01, 0xd8, 0x06, 0x31, 0x01, 0xd9, - 0x07, 0x31, 0x41, 0xe1, 0xff, 0x30, 0x41, 0x90, 0x17, 0x03, 0x1b, 0x00, - 0x01, 0xff, 0x49, 0x21, 0x67, 0x3d, 0x34, 0x01, 0x47, 0x20, 0x2f, 0x38, - 0x34, 0x01, 0x50, 0x1a, 0x67, 0x3f, 0x34, 0x41, 0x90, 0x90, 0x01, 0x91, - 0x5c, 0x92, 0x28, 0x93, 0x01, 0xff, 0xd0, 0xf5, 0x30, 0x01, 0xd1, 0xf6, - 0x30, 0x01, 0xd2, 0xf7, 0x30, 0x01, 0xd3, 0xf8, 0x30, 0x01, 0xd4, 0xf9, - 0x30, 0x81, 0x0c, 0xd6, 0xfb, 0x30, 0x01, 0xd7, 0xfc, 0x30, 0x01, 0xd8, - 0xfd, 0x30, 0x41, 0xe1, 0xfa, 0x30, 0x41, 0xd0, 0xe9, 0x30, 0x81, 0x29, - 0xd1, 0xeb, 0x30, 0x01, 0xd2, 0xec, 0x30, 0x01, 0xd3, 0xed, 0x30, 0x01, - 0xd4, 0xee, 0x30, 0x01, 0xd5, 0xef, 0x30, 0x01, 0xd6, 0xf0, 0x30, 0x01, - 0xd7, 0xf1, 0x30, 0x01, 0xd8, 0xf2, 0x30, 0x81, 0x04, 0xd9, 0xf4, 0x30, - 0x41, 0xe1, 0xf3, 0x30, 0x41, 0xe1, 0xea, 0x30, 0x41, 0xd0, 0xdd, 0x30, - 0x01, 0xd1, 0xde, 0x30, 0x01, 0xd2, 0xdf, 0x30, 0x01, 0xd3, 0xe0, 0x30, - 0x01, 0xd4, 0xe1, 0x30, 0x01, 0xd5, 0xe2, 0x30, 0x01, 0xd6, 0xe3, 0x30, - 0x81, 0x11, 0xd7, 0xe5, 0x30, 0x81, 0x08, 0xd8, 0xe7, 0x30, 0x01, 0xd9, - 0xe8, 0x30, 0x41, 0xe1, 0xe6, 0x30, 0x41, 0xe1, 0xe4, 0x30, 0x41, 0xd1, - 0xd2, 0x30, 0x01, 0xd2, 0xd3, 0x30, 0x01, 0xd3, 0xd4, 0x30, 0x01, 0xd4, - 0xd5, 0x30, 0x01, 0xd5, 0xd6, 0x30, 0x01, 0xd6, 0xd7, 0x30, 0x01, 0xd7, - 0xd8, 0x30, 0x01, 0xd8, 0xd9, 0x30, 0x81, 0x09, 0xd9, 0xdb, 0x30, 0xc1, - 0x00, 0xe1, 0xdc, 0x30, 0x41, 0xe1, 0xda, 0x30, 0x41, 0x90, 0xe2, 0x02, - 0x91, 0xb7, 0x02, 0x92, 0x87, 0x02, 0x93, 0xd2, 0x01, 0x94, 0x9d, 0x01, - 0x95, 0x44, 0x96, 0x01, 0xff, 0xd0, 0xc2, 0x30, 0x01, 0xd1, 0xc3, 0x30, - 0x01, 0xd2, 0xc4, 0x30, 0x01, 0xd3, 0xc5, 0x30, 0x01, 0xd4, 0xc6, 0x30, - 0x01, 0xd5, 0xc7, 0x30, 0x01, 0xd6, 0xc8, 0x30, 0x01, 0xd7, 0xc9, 0x30, - 0xc1, 0x00, 0xe1, 0xca, 0x30, 0x01, 0xe2, 0xcb, 0x30, 0x01, 0xe3, 0xcc, - 0x30, 0x01, 0xe4, 0xcd, 0x30, 0x01, 0xe5, 0xce, 0x30, 0x01, 0xe6, 0xcf, - 0x30, 0x01, 0xe7, 0xd0, 0x30, 0x01, 0xe8, 0xd1, 0x30, 0x41, 0xd0, 0xad, - 0x30, 0x81, 0x2e, 0xd1, 0xb7, 0x30, 0x01, 0xd2, 0xb8, 0x30, 0x81, 0x21, - 0xd3, 0xba, 0x30, 0x01, 0xd4, 0xbb, 0x30, 0x81, 0x14, 0xd5, 0xbd, 0x30, - 0x01, 0xd6, 0xbe, 0x30, 0x01, 0xd7, 0xbf, 0x30, 0x01, 0xd8, 0xc0, 0x30, - 0x01, 0xd9, 0xc1, 0x30, 0x41, 0xe1, 0xbc, 0x30, 0x41, 0xe1, 0xb9, 0x30, - 0x41, 0xe1, 0xae, 0x30, 0x01, 0xe2, 0xaf, 0x30, 0x01, 0xe3, 0xb0, 0x30, - 0x01, 0xe4, 0xb1, 0x30, 0x01, 0xe5, 0xb2, 0x30, 0x01, 0xe6, 0xb3, 0x30, - 0x01, 0xe7, 0xb4, 0x30, 0x01, 0xe8, 0xb5, 0x30, 0x01, 0xe9, 0xb6, 0x30, - 0x41, 0xd0, 0xa1, 0x30, 0x01, 0xd1, 0xa2, 0x30, 0x01, 0xd2, 0xa3, 0x30, - 0x01, 0xd3, 0xa4, 0x30, 0x01, 0xd4, 0xa5, 0x30, 0x01, 0xd5, 0xa6, 0x30, - 0x01, 0xd6, 0xa7, 0x30, 0x81, 0x11, 0xd7, 0xa9, 0x30, 0x01, 0xd8, 0xaa, - 0x30, 0x81, 0x04, 0xd9, 0xac, 0x30, 0x41, 0xe1, 0xab, 0x30, 0x41, 0xe1, - 0xa8, 0x30, 0x41, 0xd0, 0x95, 0x30, 0x01, 0xd1, 0x96, 0x30, 0x81, 0x25, - 0xd2, 0x98, 0x30, 0x01, 0xd3, 0x99, 0x30, 0x01, 0xd4, 0x9a, 0x30, 0x81, - 0x14, 0xd5, 0x9c, 0x30, 0x01, 0xd6, 0x9d, 0x30, 0x01, 0xd7, 0x9e, 0x30, - 0x01, 0xd8, 0x9f, 0x30, 0x01, 0xd9, 0xa0, 0x30, 0x41, 0xe1, 0x9b, 0x30, - 0x41, 0xe1, 0x97, 0x30, 0x41, 0xd0, 0x8a, 0x30, 0x01, 0xd1, 0x8b, 0x30, - 0x01, 0xd2, 0x8c, 0x30, 0x01, 0xd3, 0x8d, 0x30, 0x01, 0xd4, 0x8e, 0x30, - 0x01, 0xd5, 0x8f, 0x30, 0x01, 0xd6, 0x90, 0x30, 0x01, 0xd7, 0x91, 0x30, - 0x81, 0x08, 0xd8, 0x93, 0x30, 0x01, 0xd9, 0x94, 0x30, 0x41, 0xe1, 0x92, - 0x30, 0x41, 0xd0, 0x80, 0x30, 0x01, 0xd1, 0x81, 0x30, 0x01, 0xd2, 0x82, - 0x30, 0x01, 0xd3, 0x83, 0x30, 0x01, 0xd4, 0x84, 0x30, 0x01, 0xd5, 0x85, - 0x30, 0x01, 0xd6, 0x86, 0x30, 0x01, 0xd7, 0x87, 0x30, 0x01, 0xd8, 0x88, - 0x30, 0x01, 0xd9, 0x89, 0x30, 0x41, 0xd1, 0x76, 0x30, 0x01, 0xd2, 0x77, - 0x30, 0x01, 0xd3, 0x78, 0x30, 0x01, 0xd4, 0x79, 0x30, 0x01, 0xd5, 0x7a, - 0x30, 0x01, 0xd6, 0x7b, 0x30, 0x01, 0xd7, 0x7c, 0x30, 0x01, 0xd8, 0x7d, - 0x30, 0x81, 0x04, 0xd9, 0x7f, 0x30, 0x41, 0xe1, 0x7e, 0x30, 0x41, 0x90, - 0x46, 0x91, 0x17, 0x92, 0x01, 0xff, 0xd0, 0x71, 0x30, 0x01, 0xd1, 0x72, - 0x30, 0x01, 0xd2, 0x73, 0x30, 0x01, 0xd3, 0x74, 0x30, 0x01, 0xd4, 0x75, - 0x30, 0x41, 0xd0, 0x66, 0x30, 0x81, 0x24, 0xd1, 0x68, 0x30, 0x01, 0xd2, - 0x69, 0x30, 0x01, 0xd3, 0x6a, 0x30, 0x01, 0xd4, 0x6b, 0x30, 0x01, 0xd5, - 0x6c, 0x30, 0x01, 0xd6, 0x6d, 0x30, 0x01, 0xd7, 0x6e, 0x30, 0x01, 0xd8, - 0x6f, 0x30, 0x01, 0xd9, 0x70, 0x30, 0x41, 0xe1, 0x67, 0x30, 0x41, 0xd1, - 0x5a, 0x30, 0x01, 0xd2, 0x5b, 0x30, 0x81, 0x1c, 0xd3, 0x5f, 0x30, 0x01, - 0xd4, 0x60, 0x30, 0x01, 0xd5, 0x61, 0x30, 0x01, 0xd6, 0x62, 0x30, 0x01, - 0xd7, 0x63, 0x30, 0x01, 0xd8, 0x64, 0x30, 0x01, 0xd9, 0x65, 0x30, 0x41, - 0xe1, 0x5c, 0x30, 0x01, 0xe2, 0x5d, 0x30, 0x01, 0xe3, 0x5e, 0x30, 0x41, - 0x02, 0xa4, 0xd5, 0x17, 0x05, 0xb9, 0x3e, 0x01, 0xff, 0x49, 0x21, 0x67, - 0x3c, 0x34, 0x01, 0x47, 0x20, 0x2f, 0x37, 0x34, 0x01, 0x50, 0x1a, 0x67, - 0x3e, 0x34, 0x41, 0xd1, 0x50, 0x30, 0x01, 0xd2, 0x51, 0x30, 0x01, 0xd3, - 0x52, 0x30, 0x01, 0xd4, 0x53, 0x30, 0x01, 0xd5, 0x54, 0x30, 0x81, 0x10, - 0xd6, 0x56, 0x30, 0x01, 0xd7, 0x57, 0x30, 0x01, 0xd8, 0x58, 0x30, 0x01, - 0xd9, 0x59, 0x30, 0x41, 0xe1, 0x55, 0x30, 0x41, 0x90, 0x97, 0x01, 0x02, - 0xbd, 0xe9, 0x01, 0xff, 0x90, 0x63, 0x91, 0x39, 0x92, 0x0f, 0x93, 0x01, - 0xff, 0xd0, 0x2c, 0x34, 0x01, 0xd1, 0x2d, 0x34, 0x01, 0xd2, 0x2e, 0x34, - 0x41, 0xd0, 0x22, 0x34, 0x01, 0xd1, 0x23, 0x34, 0x01, 0xd2, 0x24, 0x34, - 0x01, 0xd3, 0x25, 0x34, 0x01, 0xd4, 0x26, 0x34, 0x01, 0xd5, 0x27, 0x34, - 0x01, 0xd6, 0x28, 0x34, 0x01, 0xd7, 0x29, 0x34, 0x01, 0xd8, 0x2a, 0x34, - 0x01, 0xd9, 0x2b, 0x34, 0x41, 0xd0, 0x18, 0x34, 0x01, 0xd1, 0x19, 0x34, - 0x01, 0xd2, 0x1a, 0x34, 0x01, 0xd3, 0x1b, 0x34, 0x01, 0xd4, 0x1c, 0x34, - 0x01, 0xd5, 0x1d, 0x34, 0x01, 0xd6, 0x1e, 0x34, 0x01, 0xd7, 0x1f, 0x34, - 0x01, 0xd8, 0x20, 0x34, 0x01, 0xd9, 0x21, 0x34, 0x41, 0xd1, 0x0d, 0x34, - 0x01, 0xd2, 0x0e, 0x34, 0x01, 0xd3, 0x0f, 0x34, 0x01, 0xd4, 0x10, 0x34, - 0x01, 0xd5, 0x11, 0x34, 0x01, 0xd6, 0x12, 0x34, 0x01, 0xd7, 0x13, 0x34, - 0x81, 0x08, 0xd8, 0x16, 0x34, 0x01, 0xd9, 0x17, 0x34, 0x41, 0xe1, 0x14, - 0x34, 0x01, 0xe2, 0x15, 0x34, 0x41, 0x90, 0xa8, 0x02, 0x91, 0xf3, 0x01, - 0x92, 0xc8, 0x01, 0x93, 0x98, 0x01, 0x94, 0x5a, 0x95, 0x30, 0x96, 0x06, - 0x42, 0xc4, 0xf0, 0x4f, 0x30, 0x41, 0xd0, 0x45, 0x30, 0x01, 0xd1, 0x46, - 0x30, 0x01, 0xd2, 0x47, 0x30, 0x01, 0xd3, 0x48, 0x30, 0x01, 0xd4, 0x49, - 0x30, 0x01, 0xd5, 0x4a, 0x30, 0x01, 0xd6, 0x4b, 0x30, 0x01, 0xd7, 0x4c, - 0x30, 0x01, 0xd8, 0x4d, 0x30, 0x01, 0xd9, 0x4e, 0x30, 0x41, 0xd0, 0x3b, - 0x30, 0x01, 0xd1, 0x3c, 0x30, 0x01, 0xd2, 0x3d, 0x30, 0x01, 0xd3, 0x3e, - 0x30, 0x01, 0xd4, 0x3f, 0x30, 0x01, 0xd5, 0x40, 0x30, 0x01, 0xd6, 0x41, - 0x30, 0x01, 0xd7, 0x42, 0x30, 0x01, 0xd8, 0x43, 0x30, 0x01, 0xd9, 0x44, - 0x30, 0x41, 0xd0, 0x2d, 0x30, 0x81, 0x33, 0xd1, 0x2f, 0x30, 0x01, 0xd2, - 0x30, 0x30, 0x81, 0x26, 0xd3, 0x32, 0x30, 0x81, 0x1d, 0xd4, 0x34, 0x30, - 0x01, 0xd5, 0x35, 0x30, 0x81, 0x10, 0xd6, 0x37, 0x30, 0x01, 0xd7, 0x38, - 0x30, 0x01, 0xd8, 0x39, 0x30, 0x01, 0xd9, 0x3a, 0x30, 0x41, 0xe1, 0x36, - 0x30, 0x41, 0xe1, 0x33, 0x30, 0x41, 0xe1, 0x31, 0x30, 0x41, 0xe1, 0x2e, - 0x30, 0x41, 0xd0, 0x22, 0x30, 0x01, 0xd1, 0x23, 0x30, 0x01, 0xd2, 0x24, - 0x30, 0x81, 0x1c, 0xd3, 0x26, 0x30, 0x01, 0xd4, 0x27, 0x30, 0x01, 0xd5, - 0x28, 0x30, 0x01, 0xd6, 0x29, 0x30, 0x01, 0xd7, 0x2a, 0x30, 0x01, 0xd8, - 0x2b, 0x30, 0x01, 0xd9, 0x2c, 0x30, 0x41, 0xe1, 0x25, 0x30, 0x41, 0xd0, - 0x18, 0x30, 0x01, 0xd1, 0x19, 0x30, 0x01, 0xd2, 0x1a, 0x30, 0x01, 0xd3, - 0x1b, 0x30, 0x01, 0xd4, 0x1c, 0x30, 0x01, 0xd5, 0x1d, 0x30, 0x01, 0xd6, - 0x1e, 0x30, 0x01, 0xd7, 0x1f, 0x30, 0x01, 0xd8, 0x20, 0x30, 0x01, 0xd9, - 0x21, 0x30, 0x41, 0xd0, 0x0c, 0x30, 0x01, 0xd1, 0x0d, 0x30, 0x01, 0xd2, - 0x0e, 0x30, 0x01, 0xd3, 0x0f, 0x30, 0x01, 0xd4, 0x10, 0x30, 0x81, 0x19, - 0xd5, 0x12, 0x30, 0x01, 0xd6, 0x13, 0x30, 0x01, 0xd7, 0x14, 0x30, 0x81, - 0x08, 0xd8, 0x16, 0x30, 0x01, 0xd9, 0x17, 0x30, 0x41, 0xe1, 0x15, 0x30, - 0x41, 0xe1, 0x11, 0x30, 0x41, 0xd1, 0x00, 0x30, 0x01, 0xd2, 0x01, 0x30, - 0x01, 0xd3, 0x02, 0x30, 0x01, 0xd4, 0x03, 0x30, 0x01, 0xd5, 0x04, 0x30, - 0x81, 0x19, 0xd6, 0x06, 0x30, 0x81, 0x0c, 0xd7, 0x09, 0x30, 0x01, 0xd8, - 0x0a, 0x30, 0x01, 0xd9, 0x0b, 0x30, 0x41, 0xe1, 0x07, 0x30, 0x01, 0xe2, - 0x08, 0x30, 0x41, 0xe1, 0x05, 0x30, 0x41, 0x43, 0x06, 0x02, 0x85, 0xf9, - 0x01, 0xf2, 0x42, 0xf4, 0x81, 0x06, 0x4f, 0xbc, 0x71, 0x71, 0x26, 0x40, - 0x80, 0x2a, 0x42, 0x53, 0x00, 0x41, 0x26, 0xc0, 0x00, 0x02, 0x86, 0x00, - 0x01, 0xff, 0x05, 0x1b, 0xe5, 0x06, 0x45, 0x31, 0x16, 0xda, 0x23, 0x40, - 0xa1, 0x06, 0x4d, 0x22, 0x81, 0x0d, 0xf3, 0x41, 0x47, 0x6c, 0xd0, 0x0e, - 0xf3, 0x01, 0x4d, 0xdf, 0x86, 0x0f, 0xf3, 0x41, 0x03, 0xf4, 0x01, 0x06, - 0x50, 0x4a, 0x67, 0xbb, 0xf9, 0x41, 0x45, 0x57, 0xe5, 0x3d, 0xf3, 0x01, - 0x44, 0x85, 0xb1, 0x3e, 0xf3, 0x41, 0xa1, 0xba, 0x31, 0xa5, 0xf0, 0x23, - 0xa9, 0xfd, 0x19, 0x4f, 0xce, 0x6e, 0xec, 0xf9, 0x01, 0xaf, 0xb0, 0x07, - 0xb2, 0xe3, 0x06, 0xb5, 0x06, 0x42, 0xd2, 0xf1, 0xc0, 0xf4, 0x41, 0x42, - 0x36, 0x01, 0x86, 0xf9, 0x01, 0x46, 0x14, 0xdb, 0x5f, 0xf9, 0x01, 0x07, - 0xed, 0xd1, 0x01, 0xff, 0x06, 0xa0, 0xd6, 0xe3, 0x04, 0x4b, 0x16, 0x99, - 0x9e, 0xbc, 0x01, 0x07, 0xc1, 0x05, 0x12, 0x5d, 0x01, 0x16, 0x9f, 0xbc, - 0x01, 0x51, 0x7c, 0x5c, 0x9c, 0xbc, 0x01, 0x55, 0x7e, 0x3d, 0x9d, 0xbc, - 0x41, 0xe1, 0x41, 0xbc, 0x81, 0xbb, 0x04, 0xe2, 0x07, 0xbc, 0x01, 0xe4, - 0x08, 0xbc, 0x81, 0xa7, 0x04, 0xe5, 0x47, 0xbc, 0x81, 0x99, 0x04, 0xe6, - 0x04, 0xbc, 0x81, 0x8d, 0x04, 0xe7, 0x0a, 0xbc, 0x81, 0x81, 0x04, 0xe8, - 0x00, 0xbc, 0x81, 0xf7, 0x03, 0xe9, 0x46, 0xbc, 0x81, 0xed, 0x03, 0xea, - 0x1b, 0xbc, 0x81, 0xb6, 0x03, 0xeb, 0x05, 0xbc, 0x81, 0xa0, 0x03, 0xec, - 0x06, 0xbc, 0x81, 0x89, 0x03, 0xed, 0x19, 0xbc, 0x81, 0xeb, 0x02, 0xee, - 0x1a, 0xbc, 0x81, 0xb9, 0x02, 0xef, 0x44, 0xbc, 0x81, 0xa1, 0x02, 0xf0, - 0x02, 0xbc, 0x81, 0x88, 0x02, 0xf2, 0x0b, 0xbc, 0x81, 0xeb, 0x01, 0xf3, - 0x1c, 0xbc, 0x81, 0x68, 0xf4, 0x03, 0xbc, 0x81, 0x53, 0xf5, 0x51, 0xbc, - 0x81, 0x40, 0xf6, 0x09, 0xbc, 0x81, 0x35, 0xf7, 0x38, 0xbc, 0x81, 0x0f, - 0xf8, 0x01, 0xbc, 0x81, 0x06, 0x42, 0x4d, 0x00, 0x50, 0xbc, 0x41, 0xf7, - 0x53, 0xbc, 0x41, 0x42, 0xc7, 0x00, 0x3a, 0xbc, 0x01, 0xe1, 0x5c, 0xbc, - 0x01, 0x42, 0xc3, 0x0a, 0x5f, 0xbc, 0x01, 0xe8, 0x39, 0xbc, 0x01, 0xe9, - 0x5e, 0xbc, 0x01, 0xef, 0x5d, 0xbc, 0xc1, 0x00, 0xf7, 0x60, 0xbc, 0x41, - 0x48, 0x5a, 0xc6, 0x6a, 0xbc, 0x41, 0x42, 0xb3, 0x01, 0x54, 0xbc, 0x01, - 0xe8, 0x57, 0xbc, 0x01, 0xe9, 0x4a, 0xbc, 0x41, 0x80, 0x04, 0xe8, 0x11, - 0xbc, 0x41, 0x43, 0x5c, 0x0c, 0x37, 0xbc, 0x01, 0xf3, 0x36, 0xbc, 0x41, - 0x80, 0x37, 0x46, 0xa0, 0xd9, 0x49, 0xbc, 0x01, 0x05, 0x16, 0xe5, 0x01, - 0xff, 0x42, 0x1a, 0x00, 0x68, 0xbc, 0x01, 0x42, 0x9e, 0x4a, 0x12, 0xbc, - 0x01, 0xa5, 0x12, 0xea, 0x15, 0xbc, 0x01, 0xaf, 0x04, 0xf5, 0x58, 0xbc, - 0x41, 0xee, 0x69, 0xbc, 0x01, 0xf7, 0x42, 0xbc, 0x41, 0xe5, 0x4e, 0xbc, - 0x01, 0xe8, 0x4c, 0xbc, 0x01, 0xee, 0x67, 0xbc, 0x41, 0xea, 0x20, 0xbc, - 0x81, 0x3a, 0xeb, 0x3f, 0xbc, 0x81, 0x2f, 0xed, 0x3c, 0xbc, 0x01, 0xee, - 0x3b, 0xbc, 0x01, 0xf0, 0x34, 0xbc, 0x81, 0x1c, 0xf3, 0x2a, 0xbc, 0x01, - 0xf4, 0x32, 0xbc, 0x81, 0x0d, 0x48, 0xa6, 0x3a, 0x25, 0xbc, 0xc1, 0x00, - 0x46, 0xf4, 0x06, 0x26, 0xbc, 0x41, 0x42, 0xc7, 0x00, 0x33, 0xbc, 0x41, - 0x42, 0xc7, 0x00, 0x35, 0xbc, 0x41, 0x42, 0xc7, 0x00, 0x40, 0xbc, 0x41, - 0x42, 0x99, 0x00, 0x2e, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x10, 0xbc, 0x01, - 0xe8, 0x18, 0xbc, 0x01, 0x08, 0x92, 0xc6, 0x01, 0xff, 0xe9, 0x4d, 0xbc, - 0x01, 0xf5, 0x56, 0xbc, 0x41, 0x42, 0xb3, 0x01, 0x0c, 0xbc, 0x01, 0x07, - 0x0b, 0xce, 0x01, 0xff, 0xed, 0x66, 0xbc, 0x01, 0xee, 0x65, 0xbc, 0x41, - 0xe1, 0x43, 0xbc, 0x01, 0x42, 0x5c, 0x28, 0x59, 0xbc, 0x01, 0xf5, 0x5b, - 0xbc, 0x01, 0xf7, 0x5a, 0xbc, 0x41, 0x80, 0x15, 0x05, 0xeb, 0x4a, 0x01, - 0xff, 0xe1, 0x64, 0xbc, 0x01, 0xe9, 0x63, 0xbc, 0x01, 0xef, 0x62, 0xbc, - 0x01, 0xf5, 0x61, 0xbc, 0x41, 0xed, 0x1e, 0xbc, 0x81, 0x0a, 0xf3, 0x28, - 0xbc, 0x01, 0x48, 0xa6, 0x3a, 0x22, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x2c, - 0xbc, 0x41, 0x80, 0x01, 0xff, 0xee, 0x1d, 0xbc, 0x81, 0x0a, 0xf3, 0x27, - 0xbc, 0x01, 0x48, 0xa6, 0x3a, 0x21, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x2b, - 0xbc, 0x41, 0xe8, 0x17, 0xbc, 0x01, 0x04, 0x63, 0x0e, 0x01, 0xff, 0xe9, - 0x4f, 0xbc, 0x01, 0xf5, 0x55, 0xbc, 0x41, 0x80, 0x04, 0xeb, 0x14, 0xbc, - 0x41, 0xed, 0x0f, 0xbc, 0x01, 0x43, 0x5c, 0x0c, 0x3d, 0xbc, 0x41, 0x80, - 0x01, 0xff, 0xed, 0x1f, 0xbc, 0x81, 0x23, 0xee, 0x30, 0xbc, 0x81, 0x18, - 0xf3, 0x29, 0xbc, 0x81, 0x0d, 0x48, 0xa6, 0x3a, 0x23, 0xbc, 0xc1, 0x00, - 0x52, 0xae, 0x53, 0x24, 0xbc, 0x41, 0x49, 0xa5, 0x3a, 0x2f, 0xbc, 0x41, - 0x42, 0x99, 0x00, 0x31, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x2d, 0xbc, 0x41, - 0xe5, 0x48, 0xbc, 0x41, 0xec, 0x16, 0xbc, 0x41, 0x44, 0x92, 0xe9, 0x3e, - 0xbc, 0x41, 0x42, 0xb3, 0x01, 0x0e, 0xbc, 0x41, 0xe5, 0x4b, 0xbc, 0x01, - 0xf5, 0x52, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x0d, 0xbc, 0x01, 0xe8, 0x13, - 0xbc, 0x41, 0x42, 0x3c, 0x01, 0x45, 0xbc, 0x41, 0x09, 0x18, 0xb4, 0xad, - 0x01, 0x05, 0xf9, 0x0a, 0x6a, 0xac, 0x16, 0x04, 0xcc, 0xb2, 0x06, 0x57, - 0xdf, 0x2f, 0x72, 0xbc, 0x41, 0x51, 0xe5, 0x2f, 0x71, 0xbc, 0x01, 0x4f, - 0xf7, 0x72, 0x74, 0xbc, 0x41, 0x55, 0xcd, 0x39, 0x70, 0xbc, 0x01, 0x03, - 0xd1, 0x00, 0x01, 0xff, 0xa1, 0x39, 0x46, 0xe7, 0x02, 0x95, 0xbc, 0x01, - 0x43, 0xd4, 0x09, 0x94, 0xbc, 0x01, 0x45, 0x8d, 0x22, 0x92, 0xbc, 0x01, - 0xac, 0x19, 0x4b, 0x61, 0xa1, 0x91, 0xbc, 0x01, 0x48, 0x32, 0x00, 0x98, - 0xbc, 0x81, 0x06, 0x44, 0x39, 0x56, 0x97, 0xbc, 0x41, 0x47, 0xef, 0x2f, - 0x73, 0xbc, 0x41, 0x43, 0xc3, 0x07, 0x96, 0xbc, 0x01, 0x49, 0xcf, 0xba, - 0x93, 0xbc, 0x41, 0x44, 0x2a, 0x38, 0x90, 0xbc, 0x01, 0x44, 0xcf, 0x00, - 0x99, 0xbc, 0x41, 0x45, 0x29, 0x38, 0x80, 0xbc, 0x01, 0x46, 0xe7, 0x02, - 0x85, 0xbc, 0x01, 0x43, 0xd4, 0x09, 0x84, 0xbc, 0x01, 0x45, 0x8d, 0x22, - 0x82, 0xbc, 0x01, 0xac, 0x19, 0x4b, 0x61, 0xa1, 0x81, 0xbc, 0x01, 0x48, - 0x32, 0x00, 0x88, 0xbc, 0x81, 0x06, 0x44, 0x39, 0x56, 0x87, 0xbc, 0x41, - 0x47, 0xef, 0x2f, 0x75, 0xbc, 0x41, 0x43, 0xc3, 0x07, 0x86, 0xbc, 0x01, - 0x49, 0xcf, 0xba, 0x83, 0xbc, 0x41, 0x46, 0x72, 0x9d, 0x7a, 0xbc, 0x01, - 0x46, 0xb2, 0xd9, 0x7b, 0xbc, 0x01, 0x54, 0x3f, 0x43, 0x77, 0xbc, 0x01, - 0x46, 0xf0, 0x2f, 0x76, 0xbc, 0x01, 0x02, 0x12, 0x00, 0x01, 0xff, 0x42, - 0x62, 0x01, 0x79, 0xbc, 0x01, 0x45, 0xed, 0xe5, 0x78, 0xbc, 0xc1, 0x00, - 0x45, 0x5c, 0x0e, 0x7c, 0xbc, 0x41, 0xa1, 0x2f, 0x43, 0xed, 0x00, 0x57, - 0xf4, 0x01, 0x4d, 0x03, 0x83, 0xda, 0x26, 0x00, 0xaf, 0x06, 0x52, 0xce, - 0x54, 0x41, 0xf9, 0x41, 0x4c, 0x31, 0x90, 0x2a, 0xf4, 0x01, 0x4a, 0x61, - 0xac, 0x24, 0xf9, 0x01, 0xb0, 0x01, 0xff, 0x49, 0x0e, 0xb2, 0x78, 0xfa, - 0x01, 0x43, 0xc1, 0x05, 0xa7, 0xf4, 0x41, 0x49, 0x74, 0x9f, 0xaf, 0x20, - 0x00, 0x5c, 0x56, 0x17, 0x9b, 0x27, 0x00, 0x43, 0xb7, 0x13, 0x09, 0xf4, - 0xc1, 0x00, 0x45, 0xe0, 0x07, 0x32, 0xf4, 0x41, 0x52, 0x0e, 0x4e, 0xaf, - 0xf6, 0x01, 0x46, 0xac, 0xc2, 0xce, 0xf5, 0x81, 0x9e, 0x12, 0x42, 0x3b, - 0x01, 0xa4, 0xf9, 0x01, 0x07, 0x98, 0x75, 0xc5, 0x11, 0xe7, 0x15, 0xf4, - 0x81, 0xd1, 0x0e, 0xac, 0xc2, 0x0e, 0x0a, 0x8f, 0xab, 0xd5, 0x0a, 0xae, - 0xc6, 0x0a, 0x42, 0x0c, 0x00, 0xaa, 0xf6, 0x01, 0xb4, 0xe4, 0x09, 0xb5, - 0x89, 0x05, 0x4b, 0x8a, 0xa2, 0x4a, 0xf5, 0x01, 0x02, 0xa7, 0x01, 0x01, - 0xff, 0x80, 0xdc, 0x04, 0x8d, 0xf1, 0x03, 0x04, 0xa9, 0x01, 0x01, 0xff, - 0x08, 0x82, 0xbf, 0xcd, 0x03, 0x02, 0x31, 0x01, 0x01, 0xff, 0xa1, 0xcd, - 0x02, 0x06, 0xe1, 0x02, 0xb5, 0x02, 0x50, 0x0a, 0x60, 0x3f, 0xf8, 0x01, - 0xa4, 0xa0, 0x02, 0x51, 0x91, 0x58, 0x37, 0xf8, 0x01, 0xa8, 0xc1, 0x01, - 0x4d, 0xa7, 0x85, 0xca, 0x21, 0x00, 0x4f, 0x72, 0x70, 0xf1, 0x27, 0x00, - 0x46, 0xa0, 0xdc, 0x6f, 0xf6, 0x01, 0xb3, 0xa0, 0x01, 0xb4, 0x13, 0x4b, - 0xfa, 0x0f, 0xe9, 0x21, 0x80, 0x06, 0x4c, 0x11, 0x33, 0xaf, 0x21, 0x40, - 0x5a, 0x24, 0x1e, 0x97, 0xf8, 0x41, 0x02, 0x0d, 0x00, 0x11, 0x02, 0x15, - 0x02, 0x01, 0xff, 0x4d, 0x16, 0x7e, 0xa1, 0x21, 0x00, 0x66, 0xf0, 0x05, - 0xef, 0x2b, 0x40, 0x05, 0x04, 0x02, 0x06, 0x49, 0x78, 0x70, 0x0b, 0x29, - 0x40, 0x4a, 0xe0, 0x01, 0x93, 0xf8, 0x01, 0x08, 0x09, 0x02, 0x01, 0xff, - 0x45, 0xce, 0x00, 0x63, 0x2b, 0x80, 0x12, 0x4c, 0x05, 0x8c, 0x6d, 0x2b, - 0x00, 0x4d, 0xa7, 0x85, 0x87, 0x2b, 0x00, 0x4c, 0x11, 0x33, 0x4d, 0x2b, - 0x40, 0x80, 0x01, 0xff, 0x6a, 0x41, 0x03, 0x83, 0x2b, 0x00, 0x46, 0x82, - 0x14, 0x73, 0x2b, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0x17, 0xa6, - 0x2b, 0xf8, 0x01, 0x58, 0x85, 0x27, 0x7d, 0x2b, 0x00, 0x4b, 0xef, 0x66, - 0x2f, 0xf8, 0x01, 0x09, 0x4c, 0xb9, 0x12, 0x4c, 0x3d, 0x90, 0x27, 0xf8, - 0x01, 0x4c, 0xa9, 0x90, 0x23, 0xf8, 0x01, 0x50, 0xea, 0x66, 0x33, 0xf8, - 0x41, 0x49, 0xea, 0x01, 0xa0, 0x2b, 0x00, 0x4a, 0xb3, 0x02, 0xa1, 0x2b, - 0x40, 0x4f, 0x6b, 0x65, 0x53, 0xf8, 0x01, 0x4c, 0x29, 0x92, 0x3b, 0xf8, - 0x41, 0x11, 0x66, 0x05, 0x11, 0x05, 0x02, 0x15, 0x01, 0xff, 0x45, 0xce, - 0x00, 0x47, 0xf8, 0x01, 0x50, 0x0a, 0x60, 0x43, 0xf8, 0x41, 0x04, 0xc3, - 0x00, 0x19, 0x05, 0xc8, 0x00, 0x01, 0xff, 0x80, 0x06, 0x45, 0xa9, 0x01, - 0xc2, 0x21, 0x40, 0x48, 0xfd, 0xb1, 0x5d, 0x29, 0x00, 0x46, 0x82, 0x14, - 0x55, 0x29, 0x40, 0x80, 0x06, 0x45, 0xa9, 0x01, 0xc3, 0x21, 0x40, 0x07, - 0x43, 0x0a, 0x0c, 0x48, 0xfd, 0xb1, 0x61, 0x29, 0x00, 0x46, 0x82, 0x14, - 0x59, 0x29, 0x40, 0x61, 0x7a, 0x0d, 0x65, 0x29, 0x00, 0x5f, 0xb9, 0x11, - 0x6f, 0x29, 0x40, 0x4b, 0x06, 0x8c, 0xe3, 0x21, 0x00, 0x4b, 0x72, 0x8c, - 0xd3, 0x21, 0x40, 0x45, 0xce, 0x00, 0x07, 0x2b, 0x80, 0x06, 0x53, 0x8a, - 0x47, 0x8b, 0x2b, 0x40, 0x47, 0x81, 0x14, 0xb3, 0xf8, 0x41, 0x45, 0xd9, - 0xe5, 0x14, 0x2e, 0x00, 0x44, 0xcf, 0x00, 0x93, 0x21, 0xc0, 0x00, 0x80, - 0x01, 0xff, 0x5a, 0x8c, 0x1e, 0xb7, 0xfb, 0x01, 0x48, 0xfd, 0xb1, 0xa7, - 0x21, 0x00, 0x5a, 0x12, 0x20, 0xf5, 0x21, 0x00, 0x46, 0x82, 0x14, 0x13, - 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x50, 0x3a, 0x60, 0xb5, 0x21, - 0x00, 0x4d, 0xa0, 0x80, 0xdf, 0x21, 0x00, 0x55, 0xd5, 0x01, 0x17, 0xf8, - 0x01, 0x51, 0x1c, 0x05, 0x08, 0x29, 0x00, 0x58, 0xd5, 0x28, 0x0b, 0xf8, - 0x01, 0x59, 0x5b, 0x24, 0x07, 0xf8, 0x01, 0x4c, 0x21, 0x91, 0x9b, 0xf8, - 0x01, 0x06, 0x0c, 0x07, 0x11, 0x04, 0xfa, 0x0b, 0x01, 0xff, 0x49, 0xea, - 0x01, 0xb2, 0x21, 0x00, 0x4a, 0xb3, 0x02, 0xb3, 0x21, 0x40, 0x55, 0xd5, - 0x01, 0x13, 0xf8, 0x01, 0x52, 0x03, 0x06, 0x03, 0xf8, 0x41, 0x44, 0x5d, - 0x0e, 0x08, 0xf9, 0x81, 0x0d, 0x4c, 0x15, 0x91, 0x09, 0xf9, 0xc1, 0x00, - 0x49, 0xa5, 0x3a, 0x0b, 0xf9, 0x41, 0x49, 0xa5, 0x3a, 0x0a, 0xf9, 0x41, - 0x17, 0xa0, 0x2d, 0x58, 0x09, 0x9c, 0x01, 0x01, 0xff, 0xa1, 0x45, 0x4b, - 0x8f, 0x99, 0x7b, 0xcc, 0x01, 0x44, 0x9a, 0xec, 0xfc, 0xcd, 0x01, 0xb2, - 0x1f, 0xb3, 0x11, 0x0e, 0xfc, 0x7b, 0x01, 0xff, 0x4f, 0xcf, 0x6d, 0xe8, - 0x29, 0x00, 0x50, 0x3a, 0x65, 0xe9, 0x29, 0x40, 0x51, 0x7e, 0x5a, 0x3d, - 0xf5, 0x01, 0x4b, 0xaa, 0x93, 0x04, 0xcc, 0x41, 0x49, 0x40, 0xb3, 0x9a, - 0xcc, 0x01, 0x4b, 0x65, 0x06, 0x3b, 0xf5, 0x01, 0x44, 0x75, 0xaa, 0x68, - 0xcc, 0x01, 0x4a, 0x4d, 0xac, 0x59, 0xcc, 0x41, 0x47, 0x42, 0x33, 0xf8, - 0xcd, 0x01, 0x4a, 0xb3, 0xaf, 0x63, 0xcc, 0x41, 0x4c, 0xbd, 0x8b, 0x77, - 0xcc, 0x01, 0x4a, 0x9b, 0x28, 0x73, 0xcc, 0x41, 0x49, 0xe1, 0x01, 0x04, - 0x23, 0x00, 0x49, 0xa9, 0xb6, 0x7f, 0x29, 0x00, 0x57, 0xc8, 0x2f, 0xf1, - 0x22, 0x00, 0x44, 0x25, 0x38, 0xa4, 0x22, 0xc0, 0x00, 0x52, 0x68, 0x4e, - 0xf1, 0x2a, 0x40, 0x03, 0x3e, 0x01, 0x06, 0x45, 0x90, 0xe3, 0x69, 0xf3, - 0x41, 0x80, 0xba, 0x01, 0x8d, 0x17, 0x02, 0x06, 0x00, 0x01, 0xff, 0x4b, - 0x72, 0x26, 0xa2, 0x26, 0x00, 0x49, 0xbf, 0x20, 0xa3, 0x26, 0x00, 0x46, - 0xeb, 0x07, 0xfc, 0x2b, 0x40, 0x4e, 0xea, 0x75, 0xdf, 0x29, 0x00, 0x05, - 0xc2, 0x07, 0x66, 0x07, 0xab, 0x75, 0x01, 0xff, 0x08, 0xb9, 0x05, 0x36, - 0x07, 0x38, 0xcf, 0x17, 0x4f, 0xbf, 0x6e, 0x40, 0x21, 0x00, 0x06, 0x0c, - 0x07, 0x01, 0xff, 0x45, 0xd2, 0x56, 0x3d, 0x21, 0x00, 0x42, 0xbb, 0x05, - 0x3c, 0x21, 0x40, 0x49, 0xb1, 0xb4, 0x45, 0x21, 0x00, 0x06, 0x0c, 0x07, - 0x01, 0xff, 0xe4, 0x46, 0x21, 0x00, 0xe5, 0x47, 0x21, 0x00, 0xe9, 0x48, - 0x21, 0x00, 0xea, 0x49, 0x21, 0x40, 0xe3, 0x02, 0x21, 0x00, 0x45, 0xd2, - 0x56, 0x3e, 0x21, 0x00, 0xe8, 0x0d, 0x21, 0x00, 0xee, 0x15, 0x21, 0x00, - 0xf0, 0x19, 0x21, 0x80, 0x0c, 0xf1, 0x1a, 0x21, 0x00, 0xf2, 0x1d, 0x21, - 0x00, 0xfa, 0x24, 0x21, 0x40, 0xe9, 0x3f, 0x21, 0x40, 0x0c, 0xe5, 0x27, - 0x21, 0x08, 0x9a, 0x00, 0x01, 0xff, 0x0c, 0xe5, 0x27, 0x0c, 0x58, 0x45, - 0x28, 0xfa, 0x2a, 0x00, 0x55, 0xda, 0x3b, 0xf9, 0x2a, 0x40, 0x4c, 0x87, - 0x00, 0x9c, 0x2a, 0x00, 0x49, 0xec, 0x00, 0x9b, 0x2a, 0x40, 0x4c, 0x87, - 0x00, 0x9a, 0x2a, 0x00, 0x49, 0xec, 0x00, 0x99, 0x2a, 0x40, 0x4c, 0x3d, - 0x8a, 0xdd, 0x02, 0x00, 0xa3, 0xb1, 0x02, 0xa4, 0xa2, 0x02, 0x50, 0xad, - 0x00, 0x3c, 0x20, 0x00, 0xa8, 0x8d, 0x02, 0x04, 0x0a, 0x08, 0xfc, 0x01, - 0xac, 0xc8, 0x01, 0x07, 0xab, 0xd0, 0xb0, 0x01, 0x4e, 0xd0, 0x78, 0x17, - 0x2e, 0x00, 0xb0, 0x8b, 0x01, 0x4d, 0xd6, 0x33, 0x47, 0x20, 0x00, 0x5b, - 0xae, 0x1c, 0x96, 0x29, 0x00, 0xb3, 0x3e, 0xb5, 0x30, 0x09, 0x32, 0x00, - 0x06, 0x4d, 0xb3, 0x88, 0x4c, 0xfe, 0x40, 0x43, 0x16, 0x00, 0xf8, 0x23, - 0x80, 0x06, 0x44, 0xc2, 0x07, 0x16, 0x20, 0x40, 0x80, 0x01, 0xff, 0x07, - 0x3b, 0x01, 0x06, 0x4e, 0x80, 0x39, 0xe3, 0x2a, 0x40, 0x4e, 0x80, 0x39, - 0xe5, 0x2a, 0x00, 0x4f, 0x56, 0x01, 0xab, 0x22, 0x40, 0x44, 0xe2, 0x16, - 0xd3, 0x22, 0x00, 0x46, 0x17, 0xd4, 0xeb, 0x2a, 0x40, 0x4f, 0x82, 0x6f, - 0xfd, 0x2a, 0x00, 0x06, 0x34, 0x24, 0x29, 0xb4, 0x1b, 0xb5, 0x01, 0xff, - 0x44, 0x4c, 0x12, 0xd0, 0x22, 0x00, 0x46, 0x84, 0xc8, 0xbc, 0x2a, 0x00, - 0x46, 0x59, 0x35, 0xd1, 0x22, 0x00, 0x4d, 0xcf, 0x7c, 0x44, 0x2e, 0x40, - 0x4b, 0xae, 0x96, 0x49, 0x2e, 0x00, 0x4d, 0xfa, 0x71, 0xec, 0x2a, 0x40, - 0x4c, 0x5a, 0x0a, 0x4e, 0x2a, 0x00, 0x45, 0xe1, 0x16, 0x4f, 0x2a, 0x40, - 0x43, 0xb8, 0x27, 0xfa, 0x29, 0x00, 0xb2, 0x01, 0xff, 0x46, 0x44, 0xc7, - 0xbb, 0x2a, 0x00, 0x43, 0x29, 0x02, 0x33, 0x20, 0xc0, 0x00, 0x4f, 0xed, - 0x04, 0x1e, 0x30, 0x40, 0x4c, 0x87, 0x00, 0xa2, 0x2a, 0x00, 0x49, 0xec, - 0x00, 0xa1, 0x2a, 0xc0, 0x00, 0x4e, 0xc2, 0x5d, 0xa3, 0x2a, 0x40, 0x5c, - 0x3a, 0x17, 0x95, 0x29, 0x00, 0xaf, 0x01, 0xff, 0x06, 0xa5, 0x21, 0x18, - 0xb7, 0x01, 0xff, 0x45, 0xc1, 0x07, 0x17, 0x20, 0x00, 0x8d, 0x01, 0xff, - 0x50, 0x12, 0x13, 0x1e, 0x20, 0x00, 0x59, 0x09, 0x13, 0x42, 0x2e, 0x40, - 0x43, 0x1a, 0x00, 0x53, 0x2a, 0x00, 0x42, 0x0c, 0x00, 0x54, 0x2a, 0x40, - 0x44, 0xf7, 0x25, 0x2c, 0x22, 0x00, 0x48, 0x5e, 0x0a, 0xd2, 0x22, 0x40, - 0x5d, 0x05, 0x13, 0x1f, 0x20, 0x00, 0x45, 0x1b, 0x62, 0x40, 0x2e, 0x40, - 0x45, 0xf1, 0xd7, 0x21, 0x20, 0x00, 0x48, 0x21, 0x38, 0xea, 0x2a, 0x40, - 0x07, 0x6e, 0x22, 0x0c, 0x4a, 0x6b, 0xac, 0x74, 0x2a, 0x00, 0x49, 0x0b, - 0xbe, 0xbf, 0x27, 0x40, 0x06, 0xc4, 0x06, 0x06, 0x4a, 0x39, 0xac, 0xfe, - 0x24, 0x40, 0x45, 0xc3, 0x0a, 0xfc, 0x24, 0x00, 0xa6, 0x29, 0x44, 0x46, - 0x2a, 0xfd, 0x24, 0x00, 0x43, 0xbf, 0x0a, 0xf5, 0x24, 0x00, 0xb3, 0x0f, - 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xf7, 0x24, 0x00, 0x42, 0x15, 0x02, - 0xf6, 0x24, 0x40, 0x44, 0x27, 0x1d, 0xfb, 0x24, 0x00, 0x42, 0x60, 0x25, - 0xfa, 0x24, 0x40, 0x43, 0xa7, 0x05, 0xf9, 0x24, 0x00, 0x43, 0xcb, 0x06, - 0xf8, 0x24, 0x40, 0x80, 0x3f, 0x04, 0x77, 0x00, 0x01, 0xff, 0xa3, 0x2c, - 0x45, 0x0c, 0x95, 0x99, 0x29, 0x00, 0x49, 0x0d, 0xb9, 0xe5, 0xfa, 0x01, - 0x46, 0xa4, 0xdb, 0x13, 0x2e, 0x00, 0x54, 0x38, 0x0b, 0x16, 0x2e, 0x00, - 0xb3, 0x06, 0x54, 0x0b, 0x45, 0x08, 0x2e, 0x40, 0x46, 0x6a, 0x30, 0x4a, - 0x2e, 0x00, 0x45, 0xac, 0x05, 0x1a, 0x2b, 0x40, 0x45, 0xe8, 0x02, 0xcc, - 0x25, 0x00, 0x44, 0x47, 0x10, 0x5c, 0x20, 0x40, 0x45, 0x5c, 0x00, 0xd9, - 0x02, 0x00, 0x45, 0xef, 0x1e, 0x38, 0x22, 0x00, 0x48, 0xdc, 0x1c, 0xc5, - 0x22, 0x00, 0x44, 0xb7, 0x27, 0x14, 0x22, 0x40, 0x46, 0x27, 0xba, 0xab, - 0x20, 0x00, 0x43, 0x81, 0x23, 0xcf, 0xfa, 0x41, 0x0a, 0x0b, 0x00, 0xf4, - 0x01, 0x08, 0x32, 0x00, 0x01, 0xff, 0x45, 0xf4, 0x0d, 0x62, 0xf0, 0x01, - 0x02, 0x26, 0x3f, 0x01, 0xff, 0x03, 0x24, 0xf0, 0xc3, 0x01, 0x03, 0x30, - 0xf0, 0xa2, 0x01, 0x03, 0x42, 0xf0, 0x81, 0x01, 0x03, 0x54, 0xf0, 0x61, - 0x03, 0x60, 0xf0, 0x41, 0x03, 0x66, 0xf0, 0x21, 0x03, 0x72, 0xf0, 0x01, - 0xff, 0xd0, 0x8d, 0xf0, 0x01, 0xd1, 0x8e, 0xf0, 0x01, 0xd2, 0x8f, 0xf0, - 0x01, 0xd3, 0x90, 0xf0, 0x01, 0xd4, 0x91, 0xf0, 0x01, 0xd5, 0x92, 0xf0, - 0x01, 0xd6, 0x93, 0xf0, 0x41, 0xd0, 0x86, 0xf0, 0x01, 0xd1, 0x87, 0xf0, - 0x01, 0xd2, 0x88, 0xf0, 0x01, 0xd3, 0x89, 0xf0, 0x01, 0xd4, 0x8a, 0xf0, - 0x01, 0xd5, 0x8b, 0xf0, 0x01, 0xd6, 0x8c, 0xf0, 0x41, 0xd0, 0x7f, 0xf0, - 0x01, 0xd1, 0x80, 0xf0, 0x01, 0xd2, 0x81, 0xf0, 0x01, 0xd3, 0x82, 0xf0, - 0x01, 0xd4, 0x83, 0xf0, 0x01, 0xd5, 0x84, 0xf0, 0x01, 0xd6, 0x85, 0xf0, - 0x41, 0xd0, 0x78, 0xf0, 0x01, 0xd1, 0x79, 0xf0, 0x01, 0xd2, 0x7a, 0xf0, - 0x01, 0xd3, 0x7b, 0xf0, 0x01, 0xd4, 0x7c, 0xf0, 0x01, 0xd5, 0x7d, 0xf0, - 0x01, 0xd6, 0x7e, 0xf0, 0x41, 0xd0, 0x71, 0xf0, 0x01, 0xd1, 0x72, 0xf0, - 0x01, 0xd2, 0x73, 0xf0, 0x01, 0xd3, 0x74, 0xf0, 0x01, 0xd4, 0x75, 0xf0, - 0x01, 0xd5, 0x76, 0xf0, 0x01, 0xd6, 0x77, 0xf0, 0x41, 0xd0, 0x6a, 0xf0, - 0x01, 0xd1, 0x6b, 0xf0, 0x01, 0xd2, 0x6c, 0xf0, 0x01, 0xd3, 0x6d, 0xf0, - 0x01, 0xd4, 0x6e, 0xf0, 0x01, 0xd5, 0x6f, 0xf0, 0x01, 0xd6, 0x70, 0xf0, - 0x41, 0xd0, 0x63, 0xf0, 0x01, 0xd1, 0x64, 0xf0, 0x01, 0xd2, 0x65, 0xf0, - 0x01, 0xd3, 0x66, 0xf0, 0x01, 0xd4, 0x67, 0xf0, 0x01, 0xd5, 0x68, 0xf0, - 0x01, 0xd6, 0x69, 0xf0, 0x41, 0x45, 0xf4, 0x0d, 0x30, 0xf0, 0x01, 0x02, - 0x26, 0x3f, 0x01, 0xff, 0x03, 0x24, 0xf0, 0xc3, 0x01, 0x03, 0x30, 0xf0, - 0xa2, 0x01, 0x03, 0x42, 0xf0, 0x81, 0x01, 0x03, 0x54, 0xf0, 0x61, 0x03, - 0x60, 0xf0, 0x41, 0x03, 0x66, 0xf0, 0x21, 0x03, 0x72, 0xf0, 0x01, 0xff, - 0xd0, 0x5b, 0xf0, 0x01, 0xd1, 0x5c, 0xf0, 0x01, 0xd2, 0x5d, 0xf0, 0x01, - 0xd3, 0x5e, 0xf0, 0x01, 0xd4, 0x5f, 0xf0, 0x01, 0xd5, 0x60, 0xf0, 0x01, - 0xd6, 0x61, 0xf0, 0x41, 0xd0, 0x54, 0xf0, 0x01, 0xd1, 0x55, 0xf0, 0x01, - 0xd2, 0x56, 0xf0, 0x01, 0xd3, 0x57, 0xf0, 0x01, 0xd4, 0x58, 0xf0, 0x01, - 0xd5, 0x59, 0xf0, 0x01, 0xd6, 0x5a, 0xf0, 0x41, 0xd0, 0x4d, 0xf0, 0x01, - 0xd1, 0x4e, 0xf0, 0x01, 0xd2, 0x4f, 0xf0, 0x01, 0xd3, 0x50, 0xf0, 0x01, - 0xd4, 0x51, 0xf0, 0x01, 0xd5, 0x52, 0xf0, 0x01, 0xd6, 0x53, 0xf0, 0x41, - 0xd0, 0x46, 0xf0, 0x01, 0xd1, 0x47, 0xf0, 0x01, 0xd2, 0x48, 0xf0, 0x01, - 0xd3, 0x49, 0xf0, 0x01, 0xd4, 0x4a, 0xf0, 0x01, 0xd5, 0x4b, 0xf0, 0x01, - 0xd6, 0x4c, 0xf0, 0x41, 0xd0, 0x3f, 0xf0, 0x01, 0xd1, 0x40, 0xf0, 0x01, - 0xd2, 0x41, 0xf0, 0x01, 0xd3, 0x42, 0xf0, 0x01, 0xd4, 0x43, 0xf0, 0x01, - 0xd5, 0x44, 0xf0, 0x01, 0xd6, 0x45, 0xf0, 0x41, 0xd0, 0x38, 0xf0, 0x01, - 0xd1, 0x39, 0xf0, 0x01, 0xd2, 0x3a, 0xf0, 0x01, 0xd3, 0x3b, 0xf0, 0x01, - 0xd4, 0x3c, 0xf0, 0x01, 0xd5, 0x3d, 0xf0, 0x01, 0xd6, 0x3e, 0xf0, 0x41, - 0xd0, 0x31, 0xf0, 0x01, 0xd1, 0x32, 0xf0, 0x01, 0xd2, 0x33, 0xf0, 0x01, - 0xd3, 0x34, 0xf0, 0x01, 0xd4, 0x35, 0xf0, 0x01, 0xd5, 0x36, 0xf0, 0x01, - 0xd6, 0x37, 0xf0, 0x41, 0x48, 0xde, 0x0d, 0x24, 0x00, 0x00, 0x44, 0xca, - 0xee, 0x2c, 0xf4, 0x41, 0x45, 0xe0, 0x07, 0x36, 0xf4, 0x01, 0x03, 0x71, - 0x00, 0x01, 0xff, 0x51, 0x93, 0x56, 0x3b, 0x18, 0x01, 0x07, 0xc1, 0x05, - 0x59, 0x05, 0x2f, 0x03, 0x38, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x25, - 0xe5, 0x33, 0x18, 0x01, 0xe9, 0x2d, 0x18, 0x81, 0x18, 0xef, 0x35, 0x18, - 0x01, 0xf5, 0x2f, 0x18, 0x81, 0x0b, 0x49, 0x9b, 0xbe, 0x31, 0x18, 0xc1, - 0x00, 0xf2, 0x32, 0x18, 0x41, 0xf5, 0x30, 0x18, 0x41, 0xe9, 0x2e, 0x18, - 0x41, 0xe1, 0x2c, 0x18, 0x01, 0xe9, 0x34, 0x18, 0x01, 0xf5, 0x36, 0x18, - 0x41, 0x48, 0xd0, 0x15, 0x37, 0x18, 0x01, 0x45, 0x5a, 0x3e, 0x3a, 0x18, - 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, 0x39, 0x18, 0x01, - 0x45, 0xa3, 0x4a, 0x38, 0x18, 0x41, 0xe1, 0x00, 0x18, 0x81, 0xee, 0x01, - 0xa2, 0xe1, 0x01, 0xa3, 0xd4, 0x01, 0xa4, 0xbb, 0x01, 0xe5, 0x06, 0x18, - 0x01, 0xa7, 0xaa, 0x01, 0x42, 0x22, 0x00, 0x2a, 0x18, 0x01, 0xe9, 0x02, - 0x18, 0x81, 0x9a, 0x01, 0xaa, 0x8d, 0x01, 0xab, 0x80, 0x01, 0x42, 0x74, - 0x00, 0x25, 0x18, 0x01, 0x42, 0x6c, 0x00, 0x22, 0x18, 0x01, 0xae, 0x5c, - 0xef, 0x08, 0x18, 0x01, 0xb0, 0x4c, 0xb2, 0x40, 0xb3, 0x2e, 0xb4, 0x15, - 0xf5, 0x04, 0x18, 0x81, 0x0c, 0x42, 0xa6, 0x0a, 0x26, 0x18, 0x01, 0x42, - 0x34, 0x22, 0x23, 0x18, 0x41, 0xf5, 0x05, 0x18, 0x41, 0xe1, 0x19, 0x18, - 0x01, 0x42, 0x22, 0x00, 0x1a, 0x18, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x14, - 0x18, 0x01, 0x42, 0x22, 0x00, 0x15, 0x18, 0x41, 0xe1, 0x29, 0x18, 0x01, - 0x42, 0x22, 0x00, 0x27, 0x18, 0x01, 0x42, 0x15, 0x06, 0x28, 0x18, 0x41, - 0xe1, 0x24, 0x18, 0x01, 0x42, 0x71, 0x00, 0x2b, 0x18, 0x41, 0xe1, 0x1e, - 0x18, 0x01, 0x42, 0x22, 0x00, 0x1f, 0x18, 0x41, 0xe1, 0x1d, 0x18, 0x01, - 0x42, 0x24, 0x02, 0x0e, 0x18, 0x01, 0x42, 0xff, 0x04, 0x18, 0x18, 0x01, - 0x42, 0x34, 0x22, 0x13, 0x18, 0x41, 0xe1, 0x0a, 0x18, 0x01, 0x42, 0x22, - 0x00, 0x0b, 0x18, 0x41, 0xe1, 0x11, 0x18, 0x01, 0x42, 0x22, 0x00, 0x12, - 0x18, 0x41, 0xe9, 0x03, 0x18, 0x41, 0xe1, 0x0c, 0x18, 0x01, 0x42, 0x22, - 0x00, 0x0d, 0x18, 0x41, 0xe1, 0x1b, 0x18, 0x01, 0xa4, 0x06, 0x42, 0x22, - 0x00, 0x1c, 0x18, 0x41, 0xe1, 0x16, 0x18, 0x01, 0x42, 0x22, 0x00, 0x17, - 0x18, 0x41, 0xe1, 0x0f, 0x18, 0x01, 0x42, 0x22, 0x00, 0x10, 0x18, 0x41, - 0xe1, 0x20, 0x18, 0x01, 0x42, 0x22, 0x00, 0x21, 0x18, 0x41, 0xe1, 0x01, - 0x18, 0x01, 0xe9, 0x07, 0x18, 0x01, 0xf5, 0x09, 0x18, 0x41, 0x0b, 0x3a, - 0x98, 0x37, 0x46, 0x00, 0x00, 0x24, 0x22, 0x80, 0x2a, 0x45, 0x63, 0xe3, - 0xae, 0x22, 0x00, 0x02, 0x90, 0x0c, 0x0d, 0x47, 0x82, 0xc8, 0x81, 0x22, - 0xc0, 0x00, 0x49, 0x51, 0x28, 0xe1, 0x22, 0x40, 0x45, 0x87, 0x35, 0x80, - 0x22, 0x80, 0x06, 0x43, 0x5e, 0x00, 0xac, 0x22, 0x40, 0x49, 0x51, 0x28, - 0xe0, 0x22, 0x40, 0x5d, 0x88, 0x14, 0xee, 0x2a, 0x40, 0x46, 0x89, 0x05, - 0x0c, 0x22, 0x00, 0x4f, 0xa0, 0x52, 0xeb, 0x22, 0xc0, 0x00, 0x49, 0x51, - 0x28, 0xed, 0x22, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x47, 0x3a, 0x89, - 0xbb, 0xf5, 0x01, 0x44, 0x96, 0x2f, 0xb9, 0xf5, 0xc1, 0x00, 0x4c, 0x35, - 0x89, 0xba, 0xf5, 0x41, 0xa1, 0xa4, 0x09, 0xa5, 0xff, 0x08, 0x50, 0xba, - 0x61, 0x4f, 0x22, 0x00, 0xa7, 0xc1, 0x06, 0x4e, 0x7c, 0x78, 0x31, 0x23, - 0x00, 0x06, 0x4a, 0xdb, 0xc8, 0x04, 0x05, 0x3a, 0x0d, 0xb7, 0x04, 0xb3, - 0x8f, 0x04, 0x48, 0x1a, 0xc9, 0x03, 0x30, 0x00, 0xb6, 0x17, 0x47, 0xe8, - 0xd4, 0x94, 0xfa, 0x01, 0x04, 0x1a, 0xf0, 0x01, 0xff, 0x44, 0xe1, 0x07, - 0x35, 0xf6, 0x01, 0x46, 0xeb, 0x07, 0xab, 0xf4, 0x41, 0x09, 0x46, 0xb6, - 0x2d, 0xa9, 0x06, 0x4b, 0xb7, 0x9e, 0xae, 0x26, 0x40, 0x43, 0x55, 0x27, - 0x23, 0x22, 0x00, 0x47, 0xb2, 0xd0, 0x3f, 0xf9, 0x01, 0x05, 0xa5, 0x2f, - 0x01, 0xff, 0xb3, 0x06, 0x45, 0x28, 0x02, 0xc7, 0x22, 0x40, 0x43, 0x30, - 0x03, 0xf7, 0x00, 0x00, 0x44, 0xfa, 0x0d, 0x15, 0x22, 0x40, 0xa4, 0xf0, - 0x02, 0x50, 0x3a, 0x61, 0x46, 0x19, 0x01, 0x4a, 0x1e, 0x9a, 0x45, 0x19, - 0x01, 0x4a, 0xaf, 0xa9, 0x41, 0x19, 0x01, 0x07, 0xc1, 0x05, 0x64, 0x07, - 0x7c, 0x32, 0x54, 0x53, 0xe1, 0x4a, 0x3f, 0x19, 0x01, 0x05, 0x2f, 0x03, - 0x32, 0xb6, 0x01, 0xff, 0x45, 0x5c, 0x23, 0x3e, 0x19, 0x01, 0x0a, 0xd2, - 0x75, 0x01, 0xff, 0xa1, 0x1a, 0xe5, 0x35, 0x19, 0x01, 0xe9, 0x31, 0x19, - 0x81, 0x0d, 0xef, 0x38, 0x19, 0x01, 0xf5, 0x33, 0x19, 0xc1, 0x00, 0xf5, - 0x34, 0x19, 0x41, 0xe9, 0x32, 0x19, 0x41, 0xe1, 0x30, 0x19, 0x01, 0xe9, - 0x37, 0x19, 0x41, 0x48, 0xd0, 0x15, 0x3b, 0x19, 0x01, 0x4b, 0x4f, 0x23, - 0x3c, 0x19, 0x01, 0x47, 0x97, 0xce, 0x3d, 0x19, 0x01, 0x45, 0x5a, 0x3e, - 0x43, 0x19, 0x41, 0x42, 0x71, 0x00, 0x42, 0x19, 0x01, 0x42, 0x34, 0x22, - 0x40, 0x19, 0x41, 0xe1, 0x00, 0x19, 0x81, 0xec, 0x01, 0xa2, 0xdf, 0x01, - 0xa3, 0xd2, 0x01, 0xa4, 0xb9, 0x01, 0xe5, 0x06, 0x19, 0x01, 0xa7, 0xa8, - 0x01, 0x42, 0x22, 0x00, 0x2d, 0x19, 0x01, 0xe9, 0x02, 0x19, 0x81, 0x98, - 0x01, 0x42, 0xbd, 0x26, 0x13, 0x19, 0x01, 0xab, 0x85, 0x01, 0xac, 0x79, - 0x42, 0x6c, 0x00, 0x24, 0x19, 0x01, 0xae, 0x5b, 0xef, 0x09, 0x19, 0x01, - 0xb0, 0x4b, 0x42, 0x71, 0x00, 0x27, 0x19, 0x01, 0xb3, 0x33, 0xb4, 0x21, - 0xf5, 0x04, 0x19, 0x81, 0x18, 0x42, 0xa6, 0x0a, 0x29, 0x19, 0x01, 0xb9, - 0x06, 0x42, 0x59, 0x00, 0x2f, 0x19, 0x41, 0xe1, 0x25, 0x19, 0x01, 0x42, - 0x34, 0x22, 0x26, 0x19, 0x41, 0xf5, 0x05, 0x19, 0x41, 0xe1, 0x1b, 0x19, - 0x01, 0x42, 0x22, 0x00, 0x1c, 0x19, 0x01, 0x42, 0x12, 0x00, 0x16, 0x19, - 0x41, 0xe1, 0x2c, 0x19, 0x01, 0x42, 0x22, 0x00, 0x2a, 0x19, 0x01, 0x42, - 0x15, 0x06, 0x2b, 0x19, 0x41, 0xe1, 0x20, 0x19, 0x01, 0x42, 0x22, 0x00, - 0x21, 0x19, 0x41, 0xe1, 0x1f, 0x19, 0x01, 0x42, 0x24, 0x02, 0x10, 0x19, - 0x01, 0x42, 0xff, 0x04, 0x1a, 0x19, 0x01, 0x42, 0x34, 0x22, 0x15, 0x19, - 0x41, 0xe1, 0x28, 0x19, 0x01, 0x42, 0x74, 0x00, 0x2e, 0x19, 0x41, 0xe1, - 0x0c, 0x19, 0x01, 0x42, 0x22, 0x00, 0x0d, 0x19, 0x41, 0xe9, 0x03, 0x19, - 0x41, 0xe1, 0x0e, 0x19, 0x01, 0x42, 0x22, 0x00, 0x0f, 0x19, 0x41, 0xe1, - 0x1d, 0x19, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x1e, 0x19, 0x41, 0xe1, - 0x18, 0x19, 0x01, 0x42, 0x22, 0x00, 0x19, 0x19, 0x41, 0xe1, 0x11, 0x19, - 0x01, 0x42, 0x22, 0x00, 0x12, 0x19, 0x41, 0xe1, 0x22, 0x19, 0x01, 0x42, - 0x22, 0x00, 0x23, 0x19, 0x41, 0xe1, 0x01, 0x19, 0x41, 0x05, 0xc5, 0x06, - 0x06, 0x4b, 0xd8, 0x9e, 0x44, 0x19, 0x41, 0x45, 0xc3, 0x0a, 0x58, 0x19, - 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x59, 0x19, 0x01, 0x43, 0xbf, 0x0a, - 0x51, 0x19, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x50, 0x19, - 0x41, 0x44, 0x25, 0x01, 0x53, 0x19, 0x01, 0x42, 0x15, 0x02, 0x52, 0x19, - 0x41, 0x44, 0x27, 0x1d, 0x57, 0x19, 0x01, 0x42, 0x60, 0x25, 0x56, 0x19, - 0x41, 0x43, 0xa7, 0x05, 0x55, 0x19, 0x01, 0x43, 0xcb, 0x06, 0x54, 0x19, - 0x41, 0xa1, 0x0c, 0x5b, 0x41, 0x1a, 0x82, 0x23, 0x00, 0x4b, 0x76, 0x9a, - 0x78, 0xf9, 0x41, 0x48, 0xaa, 0xc1, 0xcd, 0x26, 0x00, 0x09, 0xb9, 0xbb, - 0x01, 0xff, 0x51, 0x70, 0x57, 0x25, 0xf6, 0x01, 0x44, 0xe1, 0x07, 0x1e, - 0xf6, 0x41, 0x57, 0x44, 0x2d, 0x93, 0x23, 0x00, 0x43, 0xae, 0x02, 0xaf, - 0xf3, 0x41, 0x13, 0x77, 0x47, 0x9d, 0x01, 0x11, 0x39, 0x5b, 0x01, 0xff, - 0x06, 0xc4, 0x06, 0x57, 0x4a, 0x39, 0xac, 0x7f, 0x27, 0x00, 0x0b, 0x7f, - 0x47, 0x01, 0xff, 0x06, 0xc4, 0x06, 0x06, 0x4a, 0x39, 0xac, 0x93, 0x27, - 0x40, 0x45, 0xc3, 0x0a, 0x91, 0x27, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, - 0x92, 0x27, 0x00, 0x43, 0xbf, 0x0a, 0x8a, 0x27, 0x00, 0xb3, 0x14, 0xb4, - 0x06, 0x44, 0xa1, 0x1d, 0x0c, 0xf1, 0x41, 0x44, 0x25, 0x01, 0x8c, 0x27, - 0x00, 0x42, 0x15, 0x02, 0x8b, 0x27, 0x40, 0x44, 0x27, 0x1d, 0x90, 0x27, - 0x00, 0x42, 0x60, 0x25, 0x8f, 0x27, 0x40, 0x43, 0xa7, 0x05, 0x8e, 0x27, - 0x00, 0x43, 0xcb, 0x06, 0x8d, 0x27, 0x40, 0x45, 0xc3, 0x0a, 0x7d, 0x27, - 0x00, 0xa6, 0x29, 0x44, 0x46, 0x2a, 0x7e, 0x27, 0x00, 0x43, 0xbf, 0x0a, - 0x76, 0x27, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x78, - 0x27, 0x00, 0x42, 0x15, 0x02, 0x77, 0x27, 0x40, 0x44, 0x27, 0x1d, 0x7c, - 0x27, 0x00, 0x42, 0x60, 0x25, 0x7b, 0x27, 0x40, 0x43, 0xa7, 0x05, 0x7a, - 0x27, 0x00, 0x43, 0xcb, 0x06, 0x79, 0x27, 0x40, 0x06, 0xc4, 0x06, 0x06, - 0x4a, 0x39, 0xac, 0x89, 0x27, 0x40, 0x45, 0xc3, 0x0a, 0x87, 0x27, 0x00, - 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x88, 0x27, 0x00, 0x43, 0xbf, 0x0a, 0x80, - 0x27, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x0b, 0xf1, 0x41, - 0x44, 0x25, 0x01, 0x82, 0x27, 0x00, 0x42, 0x15, 0x02, 0x81, 0x27, 0x40, - 0x44, 0x27, 0x1d, 0x86, 0x27, 0x00, 0x42, 0x60, 0x25, 0x85, 0x27, 0x40, - 0x43, 0xa7, 0x05, 0x84, 0x27, 0x00, 0x43, 0xcb, 0x06, 0x83, 0x27, 0x40, - 0x03, 0xc7, 0x06, 0x4c, 0x08, 0x25, 0x94, 0x01, 0xff, 0x45, 0xb8, 0x70, - 0x05, 0xd3, 0x81, 0x2f, 0x09, 0xdf, 0xb6, 0x1f, 0xa8, 0x11, 0x08, 0x12, - 0xc5, 0x01, 0xff, 0x43, 0x1c, 0x01, 0x8e, 0x26, 0x00, 0x42, 0x9e, 0x01, - 0x8d, 0x26, 0x40, 0x4d, 0xba, 0x80, 0x01, 0xd3, 0x01, 0x4a, 0x53, 0xb0, - 0x02, 0xd3, 0x41, 0x43, 0x1c, 0x01, 0x8c, 0x26, 0x00, 0x42, 0x9e, 0x01, - 0x8f, 0x26, 0x40, 0x04, 0xc8, 0x8c, 0x01, 0xff, 0x45, 0x29, 0x7a, 0x03, - 0xd3, 0x01, 0x44, 0x11, 0xa2, 0x04, 0xd3, 0x41, 0x45, 0xc3, 0x0a, 0x38, - 0x00, 0x80, 0xce, 0x01, 0xa6, 0x9f, 0x01, 0x44, 0x46, 0x2a, 0x39, 0x00, - 0x80, 0x88, 0x01, 0x43, 0xbf, 0x0a, 0x31, 0x00, 0x80, 0x72, 0xb3, 0x44, - 0xb4, 0x16, 0x44, 0xa1, 0x1d, 0x30, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, - 0x45, 0xe8, 0x04, 0x01, 0xf1, 0x01, 0x49, 0x15, 0x16, 0x00, 0xf1, 0x41, - 0x44, 0x25, 0x01, 0x33, 0x00, 0x80, 0x16, 0x42, 0x15, 0x02, 0x32, 0x00, - 0xc0, 0x00, 0x80, 0x01, 0xff, 0x45, 0xe8, 0x04, 0x03, 0xf1, 0x01, 0x49, - 0x15, 0x16, 0x89, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0xe8, 0x04, 0x04, - 0xf1, 0x01, 0x49, 0x15, 0x16, 0x8a, 0x24, 0x40, 0x44, 0x27, 0x1d, 0x37, - 0x00, 0x80, 0x16, 0x42, 0x60, 0x25, 0x36, 0x00, 0xc0, 0x00, 0x80, 0x01, - 0xff, 0x45, 0xe8, 0x04, 0x07, 0xf1, 0x01, 0x49, 0x15, 0x16, 0x8d, 0x24, - 0x40, 0x80, 0x01, 0xff, 0x45, 0xe8, 0x04, 0x08, 0xf1, 0x01, 0x49, 0x15, - 0x16, 0x8e, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0xe8, 0x04, 0x02, 0xf1, - 0x01, 0x49, 0x15, 0x16, 0x88, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0xe8, - 0x04, 0x0a, 0xf1, 0x01, 0x49, 0x15, 0x16, 0x90, 0x24, 0x40, 0x43, 0xa7, - 0x05, 0x35, 0x00, 0x80, 0x16, 0x43, 0xcb, 0x06, 0x34, 0x00, 0xc0, 0x00, - 0x80, 0x01, 0xff, 0x45, 0xe8, 0x04, 0x05, 0xf1, 0x01, 0x49, 0x15, 0x16, - 0x8b, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0xe8, 0x04, 0x06, 0xf1, 0x01, - 0x49, 0x15, 0x16, 0x8c, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0xe8, 0x04, - 0x09, 0xf1, 0x01, 0x49, 0x15, 0x16, 0x8f, 0x24, 0x40, 0x06, 0x38, 0xd5, - 0x06, 0x4e, 0x90, 0x7a, 0xf2, 0xf6, 0x41, 0xd1, 0x80, 0x26, 0x00, 0xd2, - 0x81, 0x26, 0x00, 0xd3, 0x82, 0x26, 0x00, 0xd4, 0x83, 0x26, 0x00, 0xd5, - 0x84, 0x26, 0x00, 0xd6, 0x85, 0x26, 0x40, 0x46, 0x32, 0x23, 0xa8, 0x00, - 0x00, 0x55, 0x01, 0x21, 0x43, 0xcc, 0x01, 0xad, 0x01, 0xff, 0x49, 0x58, - 0xb6, 0x00, 0x23, 0x00, 0x04, 0x19, 0x56, 0x01, 0xff, 0x48, 0xdc, 0x1c, - 0xc4, 0x22, 0x00, 0x57, 0x3b, 0x30, 0xa0, 0xf4, 0x01, 0x46, 0x5a, 0xdd, - 0x9c, 0xf7, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, 0x51, 0x3d, 0x57, 0x19, - 0x2b, 0x00, 0x4f, 0xcf, 0x6d, 0x16, 0x2b, 0x00, 0x50, 0x3a, 0x65, 0x17, - 0x2b, 0x00, 0x4e, 0xd2, 0x7b, 0x18, 0x2b, 0x40, 0x49, 0x5b, 0xb3, 0xcf, - 0xf9, 0x01, 0xa3, 0x9f, 0x0d, 0x42, 0x33, 0x00, 0x8c, 0xf9, 0x01, 0x05, - 0xb5, 0xa8, 0x82, 0x0d, 0xac, 0xed, 0x0c, 0xae, 0xd8, 0x0b, 0x4e, 0xa2, - 0x79, 0xec, 0xf3, 0x01, 0x55, 0xd6, 0x3c, 0xda, 0xf3, 0x01, 0xb3, 0xe5, - 0x07, 0xb6, 0x01, 0xff, 0x08, 0x4b, 0xbe, 0x26, 0x0c, 0x80, 0x88, 0x01, - 0xff, 0x44, 0xca, 0x06, 0x14, 0x00, 0x00, 0x43, 0xbf, 0x0a, 0x11, 0x00, - 0x00, 0x46, 0x1a, 0x66, 0x90, 0x00, 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, - 0x01, 0x13, 0x00, 0x00, 0x42, 0x15, 0x02, 0x12, 0x00, 0x40, 0xa1, 0xa9, - 0x07, 0x45, 0xf7, 0x7b, 0xfa, 0xa8, 0x00, 0xa4, 0xce, 0x06, 0xa7, 0xbf, - 0x06, 0x04, 0xe6, 0x01, 0xa7, 0x06, 0x47, 0x4d, 0xcf, 0xfd, 0xa8, 0x00, - 0x07, 0xc1, 0x05, 0xc9, 0x02, 0x42, 0xe9, 0x04, 0x50, 0x09, 0x00, 0xb3, - 0x84, 0x01, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x69, 0x07, 0xba, 0x5f, - 0x57, 0xe5, 0x47, 0x09, 0x00, 0xe9, 0x3f, 0x09, 0x80, 0x4a, 0xef, 0x4b, - 0x09, 0x80, 0x3b, 0x4f, 0x54, 0x70, 0x4e, 0x09, 0x00, 0x06, 0x61, 0x36, - 0x29, 0xf5, 0x41, 0x09, 0x80, 0x17, 0x08, 0x9b, 0xbe, 0x01, 0xff, 0xec, - 0x62, 0x09, 0x80, 0x09, 0xf2, 0x43, 0x09, 0xc0, 0x00, 0xf2, 0x44, 0x09, - 0x40, 0xec, 0x63, 0x09, 0x40, 0xe5, 0x56, 0x09, 0x00, 0xf5, 0x42, 0x09, - 0xc0, 0x00, 0xe5, 0x57, 0x09, 0x40, 0xe5, 0x46, 0x09, 0x00, 0xef, 0x4a, - 0x09, 0x40, 0xe5, 0x3a, 0x09, 0x00, 0x42, 0x17, 0x50, 0x3b, 0x09, 0x40, - 0xe9, 0x40, 0x09, 0x40, 0xe5, 0x45, 0x09, 0x00, 0x46, 0xde, 0xda, 0x55, - 0x09, 0x00, 0xef, 0x49, 0x09, 0x40, 0xe1, 0x3e, 0x09, 0x00, 0xe9, 0x48, - 0x09, 0x00, 0xf5, 0x4c, 0x09, 0x00, 0xf7, 0x4f, 0x09, 0x00, 0xf9, 0xff, - 0xa8, 0x40, 0x04, 0x30, 0x03, 0x11, 0x0b, 0x82, 0xa1, 0x01, 0xff, 0x48, - 0x68, 0x7b, 0x52, 0x09, 0x00, 0x46, 0x6a, 0x7b, 0x51, 0x09, 0x40, 0xa1, - 0x98, 0x01, 0x45, 0x50, 0x2a, 0x02, 0x1b, 0x81, 0x8a, 0x01, 0x4b, 0x4f, - 0x23, 0x01, 0x09, 0x80, 0x66, 0x59, 0x48, 0x23, 0xf4, 0xa8, 0x00, 0x4e, - 0x3e, 0x76, 0x04, 0x1b, 0x81, 0x53, 0x50, 0xea, 0x61, 0x71, 0x09, 0x00, - 0x54, 0x77, 0x42, 0x00, 0x09, 0x00, 0x45, 0x93, 0xe5, 0x09, 0x1b, 0x01, - 0x45, 0x5a, 0x3e, 0x3c, 0x09, 0x00, 0x48, 0xce, 0x7a, 0xf8, 0xa8, 0x00, - 0x58, 0x3d, 0x2a, 0x08, 0x1b, 0x01, 0xb3, 0x21, 0x02, 0x02, 0x00, 0x11, - 0x08, 0xf3, 0x30, 0x01, 0xff, 0x4f, 0x77, 0x6b, 0x06, 0x1b, 0x01, 0x4f, - 0x46, 0x2a, 0x07, 0x1b, 0x41, 0x44, 0x5d, 0x23, 0x4d, 0x09, 0x00, 0x45, - 0xa3, 0x4a, 0x03, 0x09, 0x40, 0x46, 0x0d, 0xd3, 0xfc, 0xa8, 0x00, 0x52, - 0x30, 0x53, 0xf2, 0xa8, 0x40, 0x4a, 0x1f, 0x24, 0x05, 0x1b, 0x41, 0x80, - 0x01, 0xff, 0x48, 0xf1, 0x86, 0xf7, 0xa8, 0x00, 0xb4, 0x06, 0x46, 0x5b, - 0x23, 0xf3, 0xa8, 0x40, 0x44, 0x25, 0x01, 0xf6, 0xa8, 0x00, 0x42, 0x15, - 0x02, 0xf5, 0xa8, 0x40, 0x4a, 0x1f, 0x24, 0x03, 0x1b, 0x41, 0x47, 0xd1, - 0x15, 0x02, 0x09, 0x00, 0x47, 0xf2, 0x86, 0x3d, 0x09, 0x40, 0xe1, 0x05, - 0x09, 0x80, 0xb9, 0x03, 0xa2, 0xa6, 0x03, 0xa3, 0x87, 0x03, 0xa4, 0xe2, - 0x02, 0xe5, 0x0f, 0x09, 0x00, 0x42, 0xe1, 0x07, 0x5e, 0x09, 0x00, 0xa7, - 0xb9, 0x02, 0xa8, 0xac, 0x02, 0xe9, 0x07, 0x09, 0x80, 0xa2, 0x02, 0xaa, - 0x8f, 0x02, 0xab, 0xfb, 0x01, 0xac, 0xe7, 0x01, 0x42, 0x6c, 0x00, 0x2e, - 0x09, 0x80, 0xd9, 0x01, 0xae, 0xba, 0x01, 0xef, 0x13, 0x09, 0x80, 0xaa, - 0x01, 0xb0, 0x9d, 0x01, 0x42, 0xf4, 0x13, 0x58, 0x09, 0x00, 0xb2, 0x84, - 0x01, 0xb3, 0x61, 0xb4, 0x48, 0xf5, 0x09, 0x09, 0x80, 0x36, 0xb6, 0x19, - 0xb9, 0x0d, 0xba, 0x01, 0xff, 0xe1, 0x5b, 0x09, 0x00, 0x42, 0x22, 0x00, - 0x79, 0x09, 0x40, 0xe1, 0x2f, 0x09, 0x00, 0x42, 0x34, 0x22, 0x5f, 0x09, - 0x40, 0xe1, 0x35, 0x09, 0x00, 0x07, 0x9c, 0xbe, 0x01, 0xff, 0xec, 0x0c, - 0x09, 0x80, 0x09, 0xf2, 0x0b, 0x09, 0xc0, 0x00, 0xf2, 0x60, 0x09, 0x40, - 0xec, 0x61, 0x09, 0x40, 0xe5, 0x76, 0x09, 0x00, 0xf5, 0x0a, 0x09, 0xc0, - 0x00, 0xe5, 0x77, 0x09, 0x40, 0xe1, 0x24, 0x09, 0x00, 0x42, 0x22, 0x00, - 0x25, 0x09, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x1f, 0x09, 0x00, 0x42, 0x22, - 0x00, 0x20, 0x09, 0x40, 0xe1, 0x38, 0x09, 0x00, 0xa8, 0x06, 0x42, 0x15, - 0x06, 0x37, 0x09, 0x40, 0xe1, 0x36, 0x09, 0x00, 0x04, 0x76, 0x33, 0x01, - 0xff, 0xe1, 0x04, 0x09, 0x00, 0xe5, 0x0e, 0x09, 0x00, 0xef, 0x12, 0x09, - 0x40, 0xe1, 0x30, 0x09, 0x00, 0x42, 0x22, 0x00, 0x5d, 0x09, 0x00, 0x42, - 0x71, 0x00, 0x31, 0x09, 0x40, 0xe1, 0x2a, 0x09, 0x00, 0x42, 0x22, 0x00, - 0x2b, 0x09, 0x40, 0xe5, 0x73, 0x09, 0x00, 0x42, 0x17, 0x50, 0x74, 0x09, - 0x40, 0xe1, 0x28, 0x09, 0x00, 0x42, 0x24, 0x02, 0x19, 0x09, 0x00, 0xae, - 0x06, 0x42, 0x34, 0x22, 0x1e, 0x09, 0x40, 0xe1, 0x23, 0x09, 0x00, 0x42, - 0xff, 0x04, 0x29, 0x09, 0x40, 0x49, 0x9a, 0xbc, 0x78, 0x09, 0x40, 0xe1, - 0x32, 0x09, 0x00, 0xac, 0x01, 0xff, 0xe1, 0x33, 0x09, 0x00, 0x42, 0x74, - 0x00, 0x34, 0x09, 0x40, 0xe1, 0x15, 0x09, 0x00, 0xa8, 0x01, 0xff, 0xe1, - 0x16, 0x09, 0x00, 0x42, 0x22, 0x00, 0x59, 0x09, 0x40, 0xe1, 0x1c, 0x09, - 0x00, 0x42, 0x22, 0x00, 0x1d, 0x09, 0x00, 0x42, 0xbd, 0x26, 0x7c, 0x09, - 0x40, 0xe9, 0x08, 0x09, 0x40, 0xe1, 0x39, 0x09, 0x00, 0x47, 0xcc, 0xcd, - 0x7a, 0x09, 0x40, 0xe1, 0x17, 0x09, 0x00, 0x42, 0x24, 0x02, 0x7b, 0x09, - 0x00, 0xa8, 0x06, 0x4b, 0x2e, 0x28, 0x7d, 0x09, 0x40, 0xe1, 0x18, 0x09, - 0x00, 0x42, 0x22, 0x00, 0x5a, 0x09, 0x40, 0xe1, 0x26, 0x09, 0x00, 0xa4, - 0x06, 0x42, 0x22, 0x00, 0x27, 0x09, 0x40, 0xe1, 0x21, 0x09, 0x00, 0xa4, - 0x06, 0x42, 0x22, 0x00, 0x22, 0x09, 0x40, 0xe1, 0x7e, 0x09, 0x00, 0x42, - 0x22, 0x00, 0x5c, 0x09, 0x40, 0xe1, 0x1a, 0x09, 0x80, 0x06, 0x42, 0x22, - 0x00, 0x1b, 0x09, 0x40, 0x05, 0xbc, 0x5f, 0x01, 0xff, 0xe1, 0x72, 0x09, - 0x00, 0xe5, 0x0d, 0x09, 0x00, 0xef, 0x11, 0x09, 0x40, 0xe1, 0x2c, 0x09, - 0x00, 0x42, 0x16, 0x00, 0x7f, 0x09, 0x00, 0x42, 0x22, 0x00, 0x2d, 0x09, - 0x40, 0xe1, 0x06, 0x09, 0x00, 0xe9, 0x10, 0x09, 0x00, 0xf5, 0x14, 0x09, - 0x00, 0xf7, 0x75, 0x09, 0x00, 0xf9, 0xfe, 0xa8, 0x40, 0x45, 0xb8, 0x00, - 0x00, 0x1b, 0x81, 0x06, 0x46, 0x27, 0x05, 0xfb, 0xa8, 0x40, 0x50, 0x3a, - 0x5f, 0x01, 0x1b, 0x41, 0x49, 0x1f, 0x9a, 0xf9, 0xa8, 0x00, 0x4b, 0x8e, - 0x22, 0x53, 0x09, 0x40, 0x44, 0xd1, 0x1f, 0x64, 0x09, 0x00, 0x05, 0xc5, - 0x06, 0x06, 0x4b, 0xd8, 0x9e, 0x65, 0x09, 0x40, 0x45, 0xc3, 0x0a, 0x6e, - 0x09, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x6f, 0x09, 0x00, 0x43, 0xbf, - 0x0a, 0x67, 0x09, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x66, - 0x09, 0x40, 0x44, 0x25, 0x01, 0x69, 0x09, 0x00, 0x42, 0x15, 0x02, 0x68, - 0x09, 0x40, 0x44, 0x27, 0x1d, 0x6d, 0x09, 0x00, 0x42, 0x60, 0x25, 0x6c, - 0x09, 0x40, 0x43, 0xa7, 0x05, 0x6b, 0x09, 0x00, 0x43, 0xcb, 0x06, 0x6a, - 0x09, 0x40, 0x50, 0x94, 0x56, 0x70, 0x09, 0x00, 0x4b, 0x3e, 0x8a, 0x54, - 0x09, 0x40, 0x4c, 0x75, 0x8b, 0x0b, 0x26, 0x00, 0x02, 0x33, 0x00, 0x11, - 0x05, 0xd0, 0xe4, 0x01, 0xff, 0x48, 0x53, 0x4a, 0xa5, 0xf5, 0x01, 0x46, - 0x2c, 0xde, 0xd4, 0xf5, 0x41, 0x03, 0x19, 0x09, 0x0b, 0xf4, 0xdc, 0xf3, - 0xc1, 0x00, 0x47, 0x76, 0xca, 0xdd, 0xf3, 0x41, 0x0f, 0xb9, 0x05, 0xdd, - 0x01, 0x0d, 0x4b, 0x08, 0x01, 0xff, 0x42, 0x9e, 0x10, 0x34, 0x04, 0x01, - 0x43, 0x3c, 0xb4, 0x3a, 0x04, 0x01, 0x44, 0xf8, 0x49, 0x3d, 0x04, 0x01, - 0x43, 0xca, 0x7f, 0x3c, 0x04, 0x01, 0xa5, 0x91, 0x01, 0x43, 0x29, 0x9a, - 0x40, 0x04, 0x01, 0xe8, 0x38, 0x04, 0x01, 0x43, 0x6e, 0x37, 0x3e, 0x04, - 0x01, 0x43, 0xa2, 0x7d, 0x3f, 0x04, 0x01, 0x05, 0x68, 0x33, 0x5d, 0xaf, - 0x53, 0x43, 0x0f, 0x7b, 0x39, 0x04, 0x01, 0x06, 0x61, 0x36, 0x2f, 0xb4, - 0x21, 0x43, 0xd2, 0x06, 0x42, 0x04, 0x01, 0x42, 0x45, 0x07, 0x36, 0x04, - 0x01, 0x43, 0x91, 0xa7, 0x37, 0x04, 0x01, 0xba, 0x01, 0xff, 0x42, 0x27, - 0x01, 0x46, 0x04, 0x01, 0x43, 0xdd, 0x12, 0x48, 0x04, 0x41, 0x42, 0x27, - 0x01, 0x3b, 0x04, 0x01, 0x43, 0xdd, 0x12, 0x44, 0x04, 0x41, 0xe1, 0x30, - 0x04, 0x81, 0x11, 0xe5, 0x2f, 0x04, 0x01, 0xe9, 0x2e, 0x04, 0x01, 0xef, - 0x32, 0x04, 0xc1, 0x00, 0xef, 0x33, 0x04, 0x41, 0xe8, 0x31, 0x04, 0x41, - 0xe9, 0x4e, 0x04, 0x01, 0xf7, 0x35, 0x04, 0x41, 0xe1, 0x2a, 0x04, 0x81, - 0x11, 0xe5, 0x29, 0x04, 0x01, 0xe9, 0x28, 0x04, 0x01, 0xef, 0x2c, 0x04, - 0xc1, 0x00, 0xef, 0x2d, 0x04, 0x41, 0xe8, 0x2b, 0x04, 0x41, 0xe6, 0x41, - 0x04, 0x01, 0xec, 0x4a, 0x04, 0x01, 0xed, 0x4b, 0x04, 0x01, 0xee, 0x4c, - 0x04, 0x81, 0x17, 0xf2, 0x49, 0x04, 0x01, 0xf3, 0x45, 0x04, 0x81, 0x0a, - 0x42, 0x53, 0x00, 0x43, 0x04, 0x01, 0xf7, 0x4f, 0x04, 0x41, 0xe8, 0x47, - 0x04, 0x41, 0xe7, 0x4d, 0x04, 0x41, 0x42, 0x9e, 0x10, 0x0c, 0x04, 0x01, - 0x43, 0x3c, 0xb4, 0x12, 0x04, 0x01, 0x44, 0xf8, 0x49, 0x15, 0x04, 0x01, - 0x43, 0xca, 0x7f, 0x14, 0x04, 0x01, 0xa5, 0x91, 0x01, 0x43, 0x29, 0x9a, - 0x18, 0x04, 0x01, 0xe8, 0x10, 0x04, 0x01, 0x43, 0x6e, 0x37, 0x16, 0x04, - 0x01, 0x43, 0xa2, 0x7d, 0x17, 0x04, 0x01, 0x05, 0x68, 0x33, 0x5d, 0xaf, - 0x53, 0x43, 0x0f, 0x7b, 0x11, 0x04, 0x01, 0x06, 0x61, 0x36, 0x2f, 0xb4, - 0x21, 0x43, 0xd2, 0x06, 0x1a, 0x04, 0x01, 0x42, 0x45, 0x07, 0x0e, 0x04, - 0x01, 0x43, 0x91, 0xa7, 0x0f, 0x04, 0x01, 0xba, 0x01, 0xff, 0x42, 0x27, - 0x01, 0x1e, 0x04, 0x01, 0x43, 0xdd, 0x12, 0x20, 0x04, 0x41, 0x42, 0x27, - 0x01, 0x13, 0x04, 0x01, 0x43, 0xdd, 0x12, 0x1c, 0x04, 0x41, 0xe1, 0x08, - 0x04, 0x81, 0x11, 0xe5, 0x07, 0x04, 0x01, 0xe9, 0x06, 0x04, 0x01, 0xef, - 0x0a, 0x04, 0xc1, 0x00, 0xef, 0x0b, 0x04, 0x41, 0xe8, 0x09, 0x04, 0x41, - 0xe9, 0x26, 0x04, 0x01, 0xf7, 0x0d, 0x04, 0x41, 0xe1, 0x02, 0x04, 0x81, - 0x11, 0xe5, 0x01, 0x04, 0x01, 0xe9, 0x00, 0x04, 0x01, 0xef, 0x04, 0x04, - 0xc1, 0x00, 0xef, 0x05, 0x04, 0x41, 0xe8, 0x03, 0x04, 0x41, 0xe6, 0x19, - 0x04, 0x01, 0xec, 0x22, 0x04, 0x01, 0xed, 0x23, 0x04, 0x01, 0xee, 0x24, - 0x04, 0x81, 0x17, 0xf2, 0x21, 0x04, 0x01, 0xf3, 0x1d, 0x04, 0x81, 0x0a, - 0x42, 0x53, 0x00, 0x1b, 0x04, 0x01, 0xf7, 0x27, 0x04, 0x41, 0xe8, 0x1f, - 0x04, 0x41, 0xe7, 0x25, 0x04, 0x41, 0x03, 0x16, 0x04, 0x81, 0x01, 0x14, - 0xf7, 0x44, 0x01, 0xff, 0x53, 0xc3, 0x47, 0xc9, 0x23, 0x80, 0x5e, 0x51, - 0x48, 0x5d, 0xca, 0x23, 0x80, 0x40, 0x09, 0x32, 0x00, 0x01, 0xff, 0x04, - 0x1a, 0x00, 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x46, 0xe7, 0x02, 0xc0, - 0x23, 0x00, 0x48, 0x01, 0x02, 0xc3, 0x23, 0x40, 0x07, 0x4c, 0x0d, 0x16, - 0x04, 0x1e, 0x00, 0x06, 0x44, 0x39, 0x56, 0xc6, 0x23, 0x40, 0x44, 0xc3, - 0x00, 0xcb, 0x23, 0x00, 0x45, 0xc8, 0x00, 0xbe, 0x23, 0x40, 0x44, 0xc3, - 0x00, 0xcc, 0x23, 0x00, 0x45, 0xc8, 0x00, 0xbf, 0x23, 0x40, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x46, 0xe7, 0x02, 0xc2, 0x23, 0x00, 0x48, 0x01, 0x02, - 0xc5, 0x23, 0x00, 0x44, 0x39, 0x56, 0xc8, 0x23, 0x40, 0x06, 0x50, 0x00, - 0x01, 0xff, 0x46, 0xe7, 0x02, 0xc1, 0x23, 0x00, 0x48, 0x01, 0x02, 0xc4, - 0x23, 0x00, 0x44, 0x39, 0x56, 0xc7, 0x23, 0x40, 0x4f, 0x76, 0x6c, 0x45, - 0xcc, 0x01, 0x4d, 0x72, 0x88, 0x44, 0xcc, 0x41, 0x43, 0x36, 0x30, 0x7f, - 0x00, 0x00, 0x4b, 0x9f, 0x9b, 0x9a, 0xf6, 0x01, 0x4b, 0xfe, 0xa0, 0x5c, - 0x22, 0x40, 0x47, 0x08, 0xcd, 0x03, 0x21, 0x00, 0x4a, 0x0b, 0xa8, 0x09, - 0x21, 0x00, 0x44, 0x2f, 0x03, 0xb0, 0x00, 0x40, 0xa9, 0x06, 0x56, 0xc7, - 0x35, 0xdb, 0xf5, 0x41, 0x4a, 0x2f, 0xa7, 0x33, 0xf3, 0x01, 0x04, 0x88, - 0x0f, 0x01, 0xff, 0x4f, 0x68, 0x6b, 0xe8, 0x23, 0x00, 0x54, 0x93, 0x44, - 0x96, 0x23, 0x40, 0x44, 0xf2, 0xd7, 0x20, 0x20, 0x80, 0x53, 0x4a, 0x95, - 0xaa, 0x38, 0x21, 0x00, 0xae, 0x3f, 0x04, 0x95, 0x43, 0x2f, 0x02, 0xa4, - 0x02, 0x06, 0x4e, 0x4d, 0x69, 0x10, 0x00, 0x40, 0x80, 0x17, 0x03, 0x05, - 0x00, 0x01, 0xff, 0x48, 0xab, 0x88, 0x4d, 0xfe, 0x00, 0x48, 0xb8, 0x88, - 0x49, 0xfe, 0x00, 0x60, 0x68, 0x06, 0x9f, 0x27, 0x40, 0x46, 0xeb, 0x07, - 0xa8, 0xf4, 0x01, 0x50, 0x5a, 0x67, 0x43, 0x2e, 0x40, 0x44, 0x21, 0x04, - 0x93, 0x25, 0x00, 0x49, 0xcc, 0xbd, 0x76, 0xf5, 0x41, 0x43, 0x75, 0x1f, - 0x83, 0xf4, 0x01, 0x42, 0xb7, 0x13, 0x61, 0xf3, 0x41, 0x80, 0x01, 0xff, - 0x45, 0x7e, 0xa3, 0xe1, 0xf5, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, - 0x4f, 0xaa, 0x36, 0x2e, 0x00, 0x4b, 0xbf, 0x9f, 0x37, 0x2e, 0x40, 0xa1, - 0x83, 0xad, 0x01, 0xa5, 0xbd, 0xac, 0x01, 0xa8, 0xbd, 0x9b, 0x01, 0xa9, - 0x8a, 0x8c, 0x01, 0x03, 0x42, 0x32, 0xd2, 0x83, 0x01, 0xac, 0xd5, 0x7f, - 0xaf, 0x84, 0x5c, 0xb2, 0xcb, 0x5a, 0xb5, 0xaf, 0x1b, 0xb9, 0x01, 0xff, - 0x45, 0x4b, 0xe2, 0x00, 0xf3, 0x01, 0x4a, 0xd1, 0xaa, 0x2d, 0x23, 0x00, - 0x02, 0x90, 0x0c, 0xe0, 0x15, 0x07, 0x3b, 0xca, 0x01, 0xff, 0x09, 0xb9, - 0x05, 0xf2, 0x0b, 0x46, 0xa4, 0x4e, 0x7e, 0xa6, 0x00, 0x07, 0xc1, 0x05, - 0xd5, 0x0b, 0x47, 0xc3, 0xd1, 0x7f, 0xa6, 0x00, 0xb3, 0x06, 0x4e, 0x9a, - 0x7b, 0x82, 0x04, 0x40, 0x06, 0x4c, 0x08, 0x99, 0x01, 0x16, 0xe5, 0x36, - 0x01, 0xff, 0xe1, 0x51, 0xe0, 0x01, 0xa2, 0x83, 0x01, 0x43, 0x1e, 0x14, - 0x63, 0xe0, 0x01, 0xa4, 0x6a, 0xa5, 0x5c, 0x43, 0xdd, 0x50, 0x54, 0xe0, - 0x81, 0x4f, 0x42, 0x22, 0x00, 0x61, 0xe0, 0x81, 0x42, 0xe9, 0x59, 0xe0, - 0x81, 0x39, 0x42, 0x1b, 0x02, 0x5a, 0xe0, 0x01, 0xef, 0x5c, 0xe0, 0x01, - 0x42, 0x6f, 0x02, 0x5d, 0xe0, 0x01, 0x43, 0xa4, 0x02, 0x64, 0xe0, 0x01, - 0x43, 0x6a, 0x5c, 0x62, 0xe0, 0x01, 0xf5, 0x5f, 0xe0, 0x01, 0x42, 0x32, - 0x00, 0x53, 0xe0, 0x01, 0x44, 0x35, 0xd4, 0x66, 0xe0, 0x01, 0xba, 0x01, - 0xff, 0xe5, 0x58, 0xe0, 0x01, 0x42, 0xb0, 0x01, 0x57, 0xe0, 0x41, 0xe5, - 0x56, 0xe0, 0x41, 0x47, 0x4a, 0x91, 0x65, 0xe0, 0x41, 0x4c, 0xdd, 0x89, - 0x67, 0xe0, 0x41, 0xe6, 0x60, 0xe0, 0x01, 0xec, 0x5b, 0xe0, 0x01, 0xf3, - 0x5e, 0xe0, 0x41, 0xe5, 0x55, 0xe0, 0x01, 0xba, 0x01, 0xff, 0xe5, 0x69, - 0xe0, 0x01, 0x42, 0xb0, 0x01, 0x6a, 0xe0, 0x41, 0xe5, 0x52, 0xe0, 0x01, - 0x57, 0x59, 0x08, 0x68, 0xe0, 0x41, 0x06, 0xc2, 0x05, 0x17, 0x08, 0xfb, - 0x1e, 0x01, 0xff, 0x44, 0xa2, 0xeb, 0xd5, 0x04, 0x00, 0x46, 0x5c, 0xd8, - 0xa5, 0x04, 0x00, 0x46, 0x6c, 0xdd, 0xb5, 0x04, 0x40, 0xe1, 0x30, 0x04, - 0x80, 0xd5, 0x09, 0xa2, 0x99, 0x09, 0xa3, 0xe4, 0x08, 0xa4, 0x8f, 0x08, - 0xe5, 0x4d, 0x04, 0x80, 0x94, 0x07, 0x44, 0x96, 0xec, 0x73, 0x04, 0x00, - 0xa7, 0xda, 0x06, 0xa8, 0xb0, 0x06, 0xe9, 0x38, 0x04, 0x80, 0xc0, 0x05, - 0x42, 0xde, 0x1f, 0x58, 0x04, 0x00, 0xab, 0xc7, 0x04, 0xac, 0xac, 0x04, - 0x04, 0x52, 0x18, 0x9b, 0x04, 0xae, 0x86, 0x04, 0xef, 0x3e, 0x04, 0x80, - 0xe9, 0x03, 0xb0, 0xc4, 0x03, 0x42, 0xf4, 0x13, 0x1b, 0x05, 0x00, 0xb2, - 0x88, 0x03, 0xb3, 0x99, 0x02, 0xb4, 0xba, 0x01, 0xf5, 0x43, 0x04, 0x80, - 0x8b, 0x01, 0x42, 0x32, 0x00, 0x32, 0x04, 0x00, 0xb7, 0x79, 0xb9, 0x46, - 0xba, 0x01, 0xff, 0xe5, 0x37, 0x04, 0x80, 0x28, 0xa8, 0x01, 0xff, 0xe5, - 0x36, 0x04, 0x80, 0x06, 0x42, 0x15, 0x01, 0x85, 0xa6, 0x40, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x45, 0xcb, 0x22, 0xc2, 0x04, 0x00, 0xa4, 0x01, 0xff, - 0x48, 0x95, 0x2a, 0x97, 0x04, 0x00, 0x48, 0x30, 0x23, 0xdd, 0x04, 0x40, - 0x07, 0x57, 0x07, 0x06, 0x44, 0xf6, 0xed, 0x41, 0xa6, 0x40, 0x48, 0x95, - 0x2a, 0x99, 0x04, 0x00, 0x48, 0x30, 0x23, 0xdf, 0x04, 0x40, 0xe1, 0x4f, - 0x04, 0x80, 0x24, 0x43, 0xfb, 0x2a, 0x4b, 0x04, 0x80, 0x0c, 0xe9, 0x57, - 0x04, 0x00, 0xee, 0x5f, 0xa6, 0x00, 0xf5, 0x4e, 0x04, 0x40, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x48, 0xf8, 0x73, 0x51, 0xa6, 0x00, 0x49, 0x2f, 0x23, - 0xf9, 0x04, 0x40, 0xe5, 0x19, 0x05, 0x00, 0xf4, 0x63, 0x04, 0x40, 0xe5, - 0x1d, 0x05, 0x00, 0x46, 0xca, 0xd9, 0x83, 0x1c, 0x40, 0x06, 0x50, 0x00, - 0x11, 0xeb, 0x79, 0x04, 0x80, 0x06, 0x4b, 0xba, 0x9d, 0x88, 0x1c, 0x40, - 0x4a, 0xe2, 0x9b, 0x54, 0x04, 0x40, 0xa4, 0x06, 0x46, 0x04, 0x6f, 0xef, - 0x04, 0x40, 0x48, 0x30, 0x23, 0xf1, 0x04, 0x00, 0x4b, 0xcd, 0x9e, 0xf3, - 0x04, 0x40, 0x04, 0x0e, 0x07, 0x46, 0x43, 0x1e, 0x14, 0x93, 0xa6, 0x00, - 0xe5, 0x42, 0x04, 0x80, 0x2a, 0x4e, 0xe6, 0x76, 0x85, 0x1c, 0x00, 0x42, - 0xde, 0x1f, 0x8a, 0x1c, 0x00, 0xb3, 0x06, 0x42, 0x15, 0x01, 0x8d, 0xa6, - 0x40, 0xe5, 0x46, 0x04, 0x00, 0x42, 0xb0, 0x01, 0x5b, 0x04, 0x00, 0x42, - 0x1b, 0x03, 0x91, 0xa6, 0x00, 0x42, 0x15, 0x01, 0x8f, 0xa6, 0x40, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x49, 0x94, 0x2a, 0xad, 0x04, 0x00, 0x4b, 0x6d, - 0x9d, 0x8b, 0xa6, 0x40, 0x49, 0x1e, 0xb7, 0x86, 0x1c, 0x00, 0x42, 0x77, - 0x00, 0x84, 0x1c, 0x00, 0x43, 0xcd, 0x31, 0x87, 0x1c, 0x40, 0x44, 0x54, - 0x7a, 0xd9, 0x04, 0x80, 0x5f, 0x4c, 0xd1, 0x8c, 0x8d, 0x04, 0x00, 0xa8, - 0x27, 0x04, 0x69, 0x6f, 0x0d, 0x49, 0x72, 0xbd, 0xaf, 0x04, 0xc0, 0x00, - 0x4c, 0x39, 0x28, 0xb1, 0x04, 0x40, 0x42, 0x04, 0x00, 0x63, 0xa6, 0x00, - 0xa5, 0x06, 0x44, 0x2f, 0x03, 0x4c, 0x04, 0x40, 0xec, 0x65, 0xa6, 0x00, - 0xed, 0x67, 0xa6, 0x40, 0xe1, 0x48, 0x04, 0x00, 0x43, 0xef, 0x1f, 0x49, - 0x04, 0x00, 0x42, 0x22, 0x00, 0xbb, 0x04, 0x80, 0x19, 0x04, 0x76, 0x33, - 0x06, 0x42, 0x15, 0x01, 0x97, 0xa6, 0x40, 0xe9, 0x39, 0x04, 0x80, 0x04, - 0xf5, 0x5e, 0x04, 0x40, 0x4a, 0x5f, 0xa4, 0x8b, 0x04, 0x40, 0x4f, 0x6b, - 0x68, 0x27, 0x05, 0x40, 0x4f, 0x7a, 0x68, 0xdb, 0x04, 0x40, 0x08, 0x8f, - 0x14, 0x17, 0x42, 0x22, 0x00, 0x17, 0x05, 0x00, 0x04, 0xf2, 0x0a, 0x01, - 0xff, 0x46, 0xe7, 0xac, 0x7b, 0x04, 0x00, 0x45, 0xbd, 0x16, 0x80, 0x1c, - 0x40, 0x43, 0xd5, 0xf0, 0x45, 0xa6, 0x00, 0x43, 0x6a, 0x5c, 0x61, 0xa6, - 0x00, 0x42, 0xe1, 0x4c, 0x55, 0xa6, 0x00, 0x42, 0xfc, 0x09, 0x11, 0x05, - 0x40, 0x47, 0x23, 0xc7, 0xcf, 0x04, 0x00, 0xe5, 0x3f, 0x04, 0x80, 0x06, - 0x42, 0x2f, 0x03, 0x71, 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, - 0x94, 0x2a, 0x25, 0x05, 0x00, 0x4b, 0x6d, 0x9d, 0xa7, 0x04, 0x40, 0x4f, - 0x7a, 0x68, 0xe7, 0x04, 0x00, 0x44, 0x6b, 0x7a, 0x61, 0x04, 0x80, 0x04, - 0xf4, 0x7f, 0x04, 0x40, 0x4b, 0x40, 0x96, 0x7d, 0x04, 0x40, 0x47, 0xba, - 0x03, 0x82, 0x1c, 0x00, 0x4a, 0xed, 0xa7, 0x4f, 0xa6, 0x00, 0x42, 0xde, - 0x1f, 0x5a, 0x04, 0x40, 0x47, 0x82, 0x84, 0x69, 0xa6, 0x00, 0x48, 0x71, - 0x90, 0x4b, 0xa6, 0x40, 0x42, 0x22, 0x00, 0x15, 0x05, 0x00, 0x49, 0xcd, - 0x57, 0x67, 0x04, 0x00, 0x42, 0xde, 0x1f, 0x59, 0x04, 0x00, 0x4d, 0x3f, - 0x85, 0x81, 0x1c, 0x40, 0xe1, 0x3a, 0x04, 0x80, 0x4e, 0x4d, 0xf2, 0x81, - 0xcc, 0x04, 0x00, 0x42, 0xde, 0x1f, 0x5c, 0x04, 0x00, 0xaf, 0x06, 0x42, - 0x2f, 0x03, 0x6f, 0x04, 0x40, 0x03, 0xdc, 0xce, 0x06, 0x43, 0x31, 0x7f, - 0x81, 0x04, 0x40, 0xa4, 0x1e, 0x43, 0xdd, 0x1f, 0x09, 0x05, 0x00, 0x43, - 0x0f, 0x83, 0x0b, 0x05, 0x00, 0x43, 0xb4, 0x9b, 0x0d, 0x05, 0x00, 0x43, - 0x53, 0xf1, 0x0f, 0x05, 0x00, 0x43, 0x8f, 0xf1, 0x05, 0x05, 0x40, 0xe5, - 0x01, 0x05, 0x00, 0x42, 0xde, 0x1f, 0x03, 0x05, 0x00, 0x43, 0x8f, 0xf1, - 0x07, 0x05, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x94, 0x2a, 0x9b, - 0x04, 0x00, 0x44, 0x5d, 0x0e, 0xc4, 0x04, 0x00, 0x46, 0x27, 0x05, 0x9f, - 0x04, 0x00, 0x4f, 0xcc, 0x32, 0x9d, 0x04, 0x40, 0x06, 0x50, 0x00, 0x54, - 0xe5, 0x35, 0x04, 0x80, 0x3e, 0xef, 0x51, 0x04, 0x80, 0x0d, 0x46, 0x80, - 0xde, 0x75, 0x04, 0xc0, 0x00, 0x59, 0x80, 0x22, 0x77, 0x04, 0x40, 0xb4, - 0x01, 0xff, 0xe1, 0x47, 0xa6, 0x00, 0x06, 0xc7, 0x02, 0x01, 0xff, 0xe1, - 0x57, 0xa6, 0x00, 0x47, 0xb4, 0xcc, 0x6d, 0x04, 0x00, 0x51, 0xc5, 0x57, - 0x5d, 0xa6, 0x00, 0xe5, 0x65, 0x04, 0x00, 0x4a, 0xcc, 0x57, 0x69, 0x04, - 0x00, 0x43, 0xcd, 0x31, 0x53, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, - 0x45, 0xcb, 0x22, 0xd7, 0x04, 0x00, 0x45, 0x8d, 0x22, 0x50, 0x04, 0x40, - 0x49, 0x2f, 0x23, 0xe5, 0x04, 0x00, 0x45, 0x8d, 0x22, 0x5d, 0x04, 0x00, - 0x46, 0x04, 0x6f, 0xe3, 0x04, 0x40, 0xe1, 0x45, 0x04, 0x80, 0x06, 0x42, - 0x15, 0x01, 0x95, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x06, 0x47, 0x4a, 0x91, - 0x4a, 0x04, 0x40, 0x49, 0x94, 0x2a, 0xb3, 0x04, 0x00, 0x44, 0x5d, 0x0e, - 0xfd, 0x04, 0x00, 0x46, 0x27, 0x05, 0xff, 0x04, 0x40, 0x42, 0xb0, 0x01, - 0x33, 0x04, 0x80, 0x06, 0x42, 0xde, 0x1f, 0x53, 0x04, 0x40, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x49, 0x94, 0x2a, 0xf7, 0x04, 0x00, 0x4b, 0x6d, 0x9d, - 0x95, 0x04, 0x00, 0x46, 0x27, 0x05, 0x93, 0x04, 0x80, 0x06, 0x46, 0x64, - 0x67, 0x91, 0x04, 0x40, 0x49, 0x38, 0x23, 0xfb, 0x04, 0x40, 0x4f, 0x7a, - 0x68, 0xed, 0x04, 0x00, 0xe6, 0x44, 0x04, 0x00, 0xec, 0x3b, 0x04, 0x80, - 0x49, 0xed, 0x3c, 0x04, 0x80, 0x3e, 0xee, 0x3d, 0x04, 0x80, 0x16, 0xf2, - 0x40, 0x04, 0x80, 0x0b, 0xf3, 0x41, 0x04, 0xc0, 0x00, 0x4f, 0x6b, 0x68, - 0xab, 0x04, 0x40, 0x4a, 0x69, 0xa4, 0x8f, 0x04, 0x40, 0x06, 0x50, 0x00, - 0x01, 0xff, 0x49, 0x94, 0x2a, 0xa3, 0x04, 0x00, 0x44, 0x5d, 0x0e, 0xc8, - 0x04, 0x00, 0x49, 0x68, 0x56, 0x29, 0x05, 0x00, 0x4b, 0x6d, 0x9d, 0x23, - 0x05, 0x00, 0x44, 0x23, 0x17, 0xca, 0x04, 0x40, 0x4a, 0x5f, 0xa4, 0xce, - 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x94, 0x2a, 0x2f, 0x05, - 0x00, 0x44, 0x5d, 0x0e, 0x13, 0x05, 0x00, 0x4b, 0x6d, 0x9d, 0x21, 0x05, - 0x00, 0x44, 0x23, 0x17, 0xc6, 0x04, 0x40, 0x43, 0x1e, 0x14, 0x2d, 0x05, - 0x00, 0xe5, 0x34, 0x04, 0x00, 0x42, 0xde, 0x1f, 0x52, 0x04, 0x80, 0x3b, - 0x06, 0x3c, 0x01, 0x2d, 0x42, 0x15, 0x01, 0x81, 0xa6, 0x00, 0xba, 0x01, - 0xff, 0xe5, 0x55, 0x04, 0x80, 0x19, 0x42, 0xb0, 0x01, 0x5f, 0x04, 0x00, - 0x42, 0x15, 0x01, 0x83, 0xa6, 0x00, 0xba, 0x01, 0xff, 0xe5, 0x89, 0xa6, - 0x00, 0x42, 0xb0, 0x01, 0x2b, 0x05, 0x40, 0x42, 0x13, 0x01, 0x43, 0xa6, - 0x40, 0x4b, 0x83, 0x9d, 0x6d, 0xa6, 0x00, 0xef, 0x99, 0xa6, 0x40, 0x42, - 0x29, 0x0f, 0x49, 0xa6, 0x40, 0x43, 0x1e, 0x14, 0x87, 0xa6, 0x00, 0x42, - 0xb0, 0x01, 0x47, 0x04, 0x80, 0x0c, 0x50, 0xc6, 0x57, 0x59, 0xa6, 0x00, - 0x48, 0xd2, 0xc7, 0x9b, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, - 0x06, 0x4f, 0xcc, 0x32, 0xb9, 0x04, 0x40, 0x48, 0x95, 0x2a, 0xb7, 0x04, - 0x00, 0x48, 0x30, 0x23, 0xf5, 0x04, 0x40, 0xa1, 0x24, 0xe5, 0x31, 0x04, - 0x00, 0xa9, 0x12, 0x4a, 0x8b, 0xaa, 0x5b, 0xa6, 0x00, 0x4a, 0x2d, 0xae, - 0x4d, 0xa6, 0x00, 0x57, 0x59, 0x08, 0x56, 0x04, 0x40, 0x45, 0xb6, 0xcc, - 0x6b, 0x04, 0x00, 0x49, 0x85, 0x9d, 0x6b, 0xa6, 0x40, 0x46, 0x45, 0xcc, - 0xe9, 0x04, 0x80, 0x06, 0x48, 0x22, 0xc8, 0xa1, 0x04, 0x40, 0x4f, 0x7a, - 0x68, 0xeb, 0x04, 0x40, 0x06, 0x50, 0x00, 0x23, 0x09, 0x69, 0xb4, 0x06, - 0x47, 0x03, 0xd0, 0x1f, 0x05, 0x40, 0x43, 0x1e, 0x14, 0xbd, 0x04, 0x80, - 0x0c, 0x43, 0xd5, 0xf0, 0xe1, 0x04, 0x00, 0x42, 0x22, 0x00, 0xa9, 0x04, - 0x40, 0x4f, 0x6b, 0x68, 0xbf, 0x04, 0x40, 0x45, 0xcb, 0x22, 0xd1, 0x04, - 0x00, 0x49, 0x2f, 0x23, 0xd3, 0x04, 0x40, 0x4d, 0x7c, 0x84, 0x6e, 0xa6, - 0x00, 0x48, 0x22, 0xc7, 0xc0, 0x04, 0x00, 0x50, 0xca, 0x65, 0x2b, 0x1d, - 0x40, 0x06, 0xc2, 0x05, 0x17, 0x08, 0xfb, 0x1e, 0x01, 0xff, 0x44, 0xa2, - 0xeb, 0xd4, 0x04, 0x00, 0x46, 0x5c, 0xd8, 0xa4, 0x04, 0x00, 0x46, 0x6c, - 0xdd, 0xb4, 0x04, 0x40, 0xe1, 0x10, 0x04, 0x80, 0x90, 0x09, 0xa2, 0xd4, - 0x08, 0xa3, 0x9f, 0x08, 0xa4, 0xca, 0x07, 0xe5, 0x2d, 0x04, 0x80, 0xcf, - 0x06, 0x44, 0x96, 0xec, 0x72, 0x04, 0x00, 0xa7, 0x95, 0x06, 0xa8, 0xeb, - 0x05, 0xe9, 0x18, 0x04, 0x80, 0xfb, 0x04, 0x42, 0xde, 0x1f, 0x08, 0x04, - 0x00, 0xab, 0x82, 0x04, 0xac, 0xed, 0x03, 0x04, 0x52, 0x18, 0xdc, 0x03, - 0xae, 0xcd, 0x03, 0xef, 0x1e, 0x04, 0x80, 0xb0, 0x03, 0xb0, 0x91, 0x03, - 0x42, 0xf4, 0x13, 0x1a, 0x05, 0x00, 0xb2, 0xe0, 0x02, 0xb3, 0xf1, 0x01, - 0xb4, 0xae, 0x01, 0xf5, 0x23, 0x04, 0x80, 0x85, 0x01, 0x42, 0x32, 0x00, - 0x12, 0x04, 0x00, 0x42, 0x15, 0x01, 0x1c, 0x05, 0x00, 0xb9, 0x46, 0xba, - 0x01, 0xff, 0xe5, 0x17, 0x04, 0x80, 0x28, 0xa8, 0x01, 0xff, 0xe5, 0x16, - 0x04, 0x80, 0x06, 0x42, 0x15, 0x01, 0x84, 0xa6, 0x40, 0x06, 0x50, 0x00, - 0x01, 0xff, 0x45, 0xcb, 0x22, 0xc1, 0x04, 0x00, 0xa4, 0x01, 0xff, 0x48, - 0x95, 0x2a, 0x96, 0x04, 0x00, 0x48, 0x30, 0x23, 0xdc, 0x04, 0x40, 0x07, - 0x57, 0x07, 0x06, 0x44, 0xf6, 0xed, 0x40, 0xa6, 0x40, 0x48, 0x95, 0x2a, - 0x98, 0x04, 0x00, 0x48, 0x30, 0x23, 0xde, 0x04, 0x40, 0xe1, 0x2f, 0x04, - 0x80, 0x24, 0x43, 0xfb, 0x2a, 0x2b, 0x04, 0x80, 0x0c, 0xe9, 0x07, 0x04, - 0x00, 0xee, 0x5e, 0xa6, 0x00, 0xf5, 0x2e, 0x04, 0x40, 0x06, 0x50, 0x00, - 0x01, 0xff, 0x48, 0xf8, 0x73, 0x50, 0xa6, 0x00, 0x49, 0x2f, 0x23, 0xf8, - 0x04, 0x40, 0xe5, 0x18, 0x05, 0x00, 0xf4, 0x62, 0x04, 0x40, 0x06, 0x50, - 0x00, 0x0b, 0xeb, 0x78, 0x04, 0xc0, 0x00, 0x4a, 0xe2, 0x9b, 0x04, 0x04, - 0x40, 0xa4, 0x06, 0x46, 0x04, 0x6f, 0xee, 0x04, 0x40, 0x48, 0x30, 0x23, - 0xf0, 0x04, 0x00, 0x4b, 0xcd, 0x9e, 0xf2, 0x04, 0x40, 0x43, 0x1e, 0x14, - 0x92, 0xa6, 0x00, 0xe5, 0x22, 0x04, 0x80, 0x24, 0x42, 0xde, 0x1f, 0x89, - 0x1c, 0x00, 0xb3, 0x06, 0x42, 0x15, 0x01, 0x8c, 0xa6, 0x40, 0xe5, 0x26, - 0x04, 0x00, 0x42, 0xb0, 0x01, 0x0b, 0x04, 0x00, 0x42, 0x1b, 0x03, 0x90, - 0xa6, 0x00, 0x42, 0x15, 0x01, 0x8e, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, - 0xff, 0x49, 0x94, 0x2a, 0xac, 0x04, 0x00, 0x4b, 0x6d, 0x9d, 0x8a, 0xa6, - 0x40, 0x44, 0x54, 0x7a, 0xd8, 0x04, 0x80, 0x5f, 0x4c, 0xd1, 0x8c, 0x8c, - 0x04, 0x00, 0xa8, 0x27, 0x04, 0x69, 0x6f, 0x0d, 0x49, 0x72, 0xbd, 0xae, - 0x04, 0xc0, 0x00, 0x4c, 0x39, 0x28, 0xb0, 0x04, 0x40, 0x42, 0x04, 0x00, - 0x62, 0xa6, 0x00, 0xa5, 0x06, 0x44, 0x2f, 0x03, 0x2c, 0x04, 0x40, 0xec, - 0x64, 0xa6, 0x00, 0xed, 0x66, 0xa6, 0x40, 0xe1, 0x28, 0x04, 0x00, 0x43, - 0xef, 0x1f, 0x29, 0x04, 0x00, 0x42, 0x22, 0x00, 0xba, 0x04, 0x80, 0x19, - 0x04, 0x76, 0x33, 0x06, 0x42, 0x15, 0x01, 0x96, 0xa6, 0x40, 0xe9, 0x19, - 0x04, 0x80, 0x04, 0xf5, 0x0e, 0x04, 0x40, 0x4a, 0x5f, 0xa4, 0x8a, 0x04, - 0x40, 0x4f, 0x6b, 0x68, 0x26, 0x05, 0x40, 0x4f, 0x7a, 0x68, 0xda, 0x04, - 0x40, 0x08, 0x8f, 0x14, 0x0c, 0x42, 0x22, 0x00, 0x16, 0x05, 0x00, 0x4a, - 0xe3, 0xac, 0x7a, 0x04, 0x40, 0x43, 0xd5, 0xf0, 0x44, 0xa6, 0x00, 0x43, - 0x6a, 0x5c, 0x60, 0xa6, 0x00, 0x42, 0xe1, 0x4c, 0x54, 0xa6, 0x00, 0x42, - 0xfc, 0x09, 0x10, 0x05, 0x40, 0xe5, 0x1f, 0x04, 0x80, 0x06, 0x42, 0x2f, - 0x03, 0x70, 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x94, 0x2a, - 0x24, 0x05, 0x00, 0x4b, 0x6d, 0x9d, 0xa6, 0x04, 0x40, 0x4f, 0x7a, 0x68, - 0xe6, 0x04, 0x00, 0x44, 0x6b, 0x7a, 0x60, 0x04, 0x80, 0x04, 0xf4, 0x7e, - 0x04, 0x40, 0x4b, 0x40, 0x96, 0x7c, 0x04, 0x40, 0x4a, 0xed, 0xa7, 0x4e, - 0xa6, 0x00, 0x42, 0xde, 0x1f, 0x0a, 0x04, 0x40, 0x47, 0x82, 0x84, 0x68, - 0xa6, 0x00, 0x48, 0x71, 0x90, 0x4a, 0xa6, 0x40, 0x42, 0x22, 0x00, 0x14, - 0x05, 0x00, 0x49, 0xcd, 0x57, 0x66, 0x04, 0x00, 0x42, 0xde, 0x1f, 0x09, - 0x04, 0x40, 0xe1, 0x1a, 0x04, 0x80, 0x4e, 0x4d, 0xf2, 0x81, 0xcb, 0x04, - 0x00, 0x42, 0xde, 0x1f, 0x0c, 0x04, 0x00, 0xaf, 0x06, 0x42, 0x2f, 0x03, - 0x6e, 0x04, 0x40, 0x03, 0xdc, 0xce, 0x06, 0x43, 0x31, 0x7f, 0x80, 0x04, - 0x40, 0xa4, 0x1e, 0x43, 0xdd, 0x1f, 0x08, 0x05, 0x00, 0x43, 0x0f, 0x83, - 0x0a, 0x05, 0x00, 0x43, 0xb4, 0x9b, 0x0c, 0x05, 0x00, 0x43, 0x53, 0xf1, - 0x0e, 0x05, 0x00, 0x43, 0x8f, 0xf1, 0x04, 0x05, 0x40, 0xe5, 0x00, 0x05, - 0x00, 0x42, 0xde, 0x1f, 0x02, 0x05, 0x00, 0x43, 0x8f, 0xf1, 0x06, 0x05, - 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x94, 0x2a, 0x9a, 0x04, 0x00, - 0x44, 0x5d, 0x0e, 0xc3, 0x04, 0x00, 0x46, 0x27, 0x05, 0x9e, 0x04, 0x00, - 0x4f, 0xcc, 0x32, 0x9c, 0x04, 0x40, 0x06, 0x50, 0x00, 0x54, 0xe5, 0x15, - 0x04, 0x80, 0x3e, 0xef, 0x01, 0x04, 0x80, 0x0d, 0x46, 0x80, 0xde, 0x74, - 0x04, 0xc0, 0x00, 0x59, 0x80, 0x22, 0x76, 0x04, 0x40, 0xb4, 0x01, 0xff, - 0xe1, 0x46, 0xa6, 0x00, 0x06, 0xc7, 0x02, 0x01, 0xff, 0xe1, 0x56, 0xa6, - 0x00, 0x47, 0xb4, 0xcc, 0x6c, 0x04, 0x00, 0x51, 0xc5, 0x57, 0x5c, 0xa6, - 0x00, 0xe5, 0x64, 0x04, 0x00, 0x4a, 0xcc, 0x57, 0x68, 0x04, 0x00, 0x43, - 0xcd, 0x31, 0x52, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xcb, - 0x22, 0xd6, 0x04, 0x00, 0x45, 0x8d, 0x22, 0x00, 0x04, 0x40, 0x49, 0x2f, - 0x23, 0xe4, 0x04, 0x00, 0x45, 0x8d, 0x22, 0x0d, 0x04, 0x00, 0x46, 0x04, - 0x6f, 0xe2, 0x04, 0x40, 0xe1, 0x25, 0x04, 0x80, 0x06, 0x42, 0x15, 0x01, - 0x94, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x06, 0x47, 0x4a, 0x91, 0x2a, 0x04, - 0x40, 0x49, 0x94, 0x2a, 0xb2, 0x04, 0x00, 0x44, 0x5d, 0x0e, 0xfc, 0x04, - 0x00, 0x46, 0x27, 0x05, 0xfe, 0x04, 0x40, 0x42, 0xb0, 0x01, 0x13, 0x04, - 0x80, 0x06, 0x42, 0xde, 0x1f, 0x03, 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, - 0xff, 0x49, 0x94, 0x2a, 0xf6, 0x04, 0x00, 0x4b, 0x6d, 0x9d, 0x94, 0x04, - 0x00, 0x46, 0x27, 0x05, 0x92, 0x04, 0x80, 0x06, 0x46, 0x64, 0x67, 0x90, - 0x04, 0x40, 0x49, 0x38, 0x23, 0xfa, 0x04, 0x40, 0x4f, 0x7a, 0x68, 0xec, - 0x04, 0x00, 0xe6, 0x24, 0x04, 0x00, 0xec, 0x1b, 0x04, 0x80, 0x49, 0xed, - 0x1c, 0x04, 0x80, 0x3e, 0xee, 0x1d, 0x04, 0x80, 0x16, 0xf2, 0x20, 0x04, - 0x80, 0x0b, 0xf3, 0x21, 0x04, 0xc0, 0x00, 0x4f, 0x6b, 0x68, 0xaa, 0x04, - 0x40, 0x4a, 0x69, 0xa4, 0x8e, 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, - 0x49, 0x94, 0x2a, 0xa2, 0x04, 0x00, 0x44, 0x5d, 0x0e, 0xc7, 0x04, 0x00, - 0x49, 0x68, 0x56, 0x28, 0x05, 0x00, 0x4b, 0x6d, 0x9d, 0x22, 0x05, 0x00, - 0x44, 0x23, 0x17, 0xc9, 0x04, 0x40, 0x4a, 0x5f, 0xa4, 0xcd, 0x04, 0x40, - 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x94, 0x2a, 0x2e, 0x05, 0x00, 0x44, - 0x5d, 0x0e, 0x12, 0x05, 0x00, 0x4b, 0x6d, 0x9d, 0x20, 0x05, 0x00, 0x44, - 0x23, 0x17, 0xc5, 0x04, 0x40, 0x43, 0x1e, 0x14, 0x2c, 0x05, 0x00, 0xe5, - 0x14, 0x04, 0x00, 0x42, 0xde, 0x1f, 0x02, 0x04, 0x80, 0x3b, 0x06, 0x3c, - 0x01, 0x2d, 0x42, 0x15, 0x01, 0x80, 0xa6, 0x00, 0xba, 0x01, 0xff, 0xe5, - 0x05, 0x04, 0x80, 0x19, 0x42, 0xb0, 0x01, 0x0f, 0x04, 0x00, 0x42, 0x15, - 0x01, 0x82, 0xa6, 0x00, 0xba, 0x01, 0xff, 0xe5, 0x88, 0xa6, 0x00, 0x42, - 0xb0, 0x01, 0x2a, 0x05, 0x40, 0x42, 0x13, 0x01, 0x42, 0xa6, 0x40, 0x4b, - 0x83, 0x9d, 0x6c, 0xa6, 0x00, 0xef, 0x98, 0xa6, 0x40, 0x42, 0x29, 0x0f, - 0x48, 0xa6, 0x40, 0x43, 0x1e, 0x14, 0x86, 0xa6, 0x00, 0x42, 0xb0, 0x01, - 0x27, 0x04, 0x80, 0x0c, 0x50, 0xc6, 0x57, 0x58, 0xa6, 0x00, 0x48, 0xd2, - 0xc7, 0x9a, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, 0x06, 0x4f, - 0xcc, 0x32, 0xb8, 0x04, 0x40, 0x48, 0x95, 0x2a, 0xb6, 0x04, 0x00, 0x48, - 0x30, 0x23, 0xf4, 0x04, 0x40, 0xa1, 0x24, 0xe5, 0x11, 0x04, 0x00, 0xa9, - 0x12, 0x4a, 0x8b, 0xaa, 0x5a, 0xa6, 0x00, 0x4a, 0x2d, 0xae, 0x4c, 0xa6, - 0x00, 0x57, 0x59, 0x08, 0x06, 0x04, 0x40, 0x45, 0xb6, 0xcc, 0x6a, 0x04, - 0x00, 0x49, 0x85, 0x9d, 0x6a, 0xa6, 0x40, 0x46, 0x45, 0xcc, 0xe8, 0x04, - 0x80, 0x06, 0x48, 0x22, 0xc8, 0xa0, 0x04, 0x40, 0x4f, 0x7a, 0x68, 0xea, - 0x04, 0x40, 0x06, 0x50, 0x00, 0x23, 0x09, 0x69, 0xb4, 0x06, 0x47, 0x03, - 0xd0, 0x1e, 0x05, 0x40, 0x43, 0x1e, 0x14, 0xbc, 0x04, 0x80, 0x0c, 0x43, - 0xd5, 0xf0, 0xe0, 0x04, 0x00, 0x42, 0x22, 0x00, 0xa8, 0x04, 0x40, 0x4f, - 0x6b, 0x68, 0xbe, 0x04, 0x40, 0x45, 0xcb, 0x22, 0xd0, 0x04, 0x00, 0x49, - 0x2f, 0x23, 0xd2, 0x04, 0x40, 0x0d, 0xc2, 0x82, 0xbc, 0x03, 0x10, 0xea, - 0x63, 0x01, 0xff, 0x90, 0x44, 0x91, 0x0d, 0x02, 0x57, 0xf0, 0x01, 0xff, - 0xd1, 0xf1, 0x2f, 0x01, 0xd2, 0xf2, 0x2f, 0x41, 0x90, 0x0f, 0x91, 0x01, - 0xff, 0xd0, 0xee, 0x2f, 0x01, 0xd2, 0xef, 0x2f, 0x01, 0xd4, 0xf0, 0x2f, - 0x41, 0xd0, 0xe5, 0x2f, 0x01, 0xd1, 0xe6, 0x2f, 0x01, 0xd2, 0xe7, 0x2f, - 0x01, 0xd3, 0xe8, 0x2f, 0x01, 0xd4, 0xe9, 0x2f, 0x01, 0xd5, 0xea, 0x2f, - 0x01, 0xd7, 0xeb, 0x2f, 0x01, 0xd8, 0xec, 0x2f, 0x01, 0xd9, 0xed, 0x2f, - 0x41, 0x90, 0xce, 0x02, 0x91, 0xaa, 0x02, 0x92, 0x87, 0x02, 0x93, 0xe4, - 0x01, 0x94, 0xc9, 0x01, 0x95, 0xa2, 0x01, 0x96, 0x7c, 0x97, 0x51, 0x98, - 0x27, 0x99, 0x01, 0xff, 0xd0, 0xdc, 0x2f, 0x01, 0xd1, 0xdd, 0x2f, 0x01, - 0xd2, 0xde, 0x2f, 0x01, 0xd4, 0xdf, 0x2f, 0x01, 0xd5, 0xe0, 0x2f, 0x01, - 0xd6, 0xe1, 0x2f, 0x01, 0xd7, 0xe2, 0x2f, 0x01, 0xd8, 0xe3, 0x2f, 0x01, - 0xd9, 0xe4, 0x2f, 0x41, 0xd0, 0xd2, 0x2f, 0x01, 0xd1, 0xd3, 0x2f, 0x01, - 0xd2, 0xd4, 0x2f, 0x01, 0xd3, 0xd5, 0x2f, 0x01, 0xd4, 0xd6, 0x2f, 0x01, - 0xd5, 0xd7, 0x2f, 0x01, 0xd6, 0xd8, 0x2f, 0x01, 0xd7, 0xd9, 0x2f, 0x01, - 0xd8, 0xda, 0x2f, 0x01, 0xd9, 0xdb, 0x2f, 0x41, 0xd0, 0xc8, 0x2f, 0x01, - 0xd1, 0xc9, 0x2f, 0x01, 0xd2, 0xca, 0x2f, 0x01, 0xd3, 0xcb, 0x2f, 0x01, - 0xd4, 0xcc, 0x2f, 0x01, 0xd5, 0xcd, 0x2f, 0x81, 0x0c, 0xd6, 0xcf, 0x2f, - 0x01, 0xd8, 0xd0, 0x2f, 0x01, 0xd9, 0xd1, 0x2f, 0x41, 0xe2, 0xce, 0x2f, - 0x41, 0xd0, 0xbf, 0x2f, 0x01, 0xd1, 0xc0, 0x2f, 0x01, 0xd2, 0xc1, 0x2f, - 0x01, 0xd3, 0xc2, 0x2f, 0x01, 0xd4, 0xc3, 0x2f, 0x01, 0xd6, 0xc4, 0x2f, - 0x01, 0xd7, 0xc5, 0x2f, 0x01, 0xd8, 0xc6, 0x2f, 0x01, 0xd9, 0xc7, 0x2f, - 0x41, 0xd0, 0xb6, 0x2f, 0x01, 0xd1, 0xb7, 0x2f, 0x01, 0xd2, 0xb8, 0x2f, - 0x01, 0xd3, 0xb9, 0x2f, 0x01, 0xd4, 0xba, 0x2f, 0x01, 0xd5, 0xbb, 0x2f, - 0x01, 0xd6, 0xbc, 0x2f, 0x01, 0xd8, 0xbd, 0x2f, 0x01, 0xd9, 0xbe, 0x2f, - 0x41, 0xd0, 0xb0, 0x2f, 0x01, 0xd1, 0xb1, 0x2f, 0x01, 0xd4, 0xb2, 0x2f, - 0x01, 0xd6, 0xb3, 0x2f, 0x01, 0xd7, 0xb4, 0x2f, 0x01, 0xd9, 0xb5, 0x2f, - 0x41, 0xd0, 0xa8, 0x2f, 0x01, 0xd3, 0xa9, 0x2f, 0x01, 0xd4, 0xaa, 0x2f, - 0x01, 0xd5, 0xab, 0x2f, 0x01, 0xd6, 0xac, 0x2f, 0x01, 0xd7, 0xad, 0x2f, - 0x01, 0xd8, 0xae, 0x2f, 0x01, 0xd9, 0xaf, 0x2f, 0x41, 0xd1, 0xa0, 0x2f, - 0x01, 0xd3, 0xa1, 0x2f, 0x01, 0xd4, 0xa2, 0x2f, 0x01, 0xd5, 0xa3, 0x2f, - 0x01, 0xd6, 0xa4, 0x2f, 0x01, 0xd7, 0xa5, 0x2f, 0x01, 0xd8, 0xa6, 0x2f, - 0x01, 0xd9, 0xa7, 0x2f, 0x41, 0xd0, 0x98, 0x2f, 0x01, 0xd1, 0x99, 0x2f, - 0x01, 0xd2, 0x9a, 0x2f, 0x81, 0x10, 0xd3, 0x9c, 0x2f, 0x01, 0xd5, 0x9d, - 0x2f, 0x01, 0xd7, 0x9e, 0x2f, 0x01, 0xd9, 0x9f, 0x2f, 0x41, 0xe2, 0x9b, - 0x2f, 0x41, 0xd1, 0x90, 0x2f, 0x01, 0xd2, 0x91, 0x2f, 0x01, 0xd4, 0x92, - 0x2f, 0x01, 0xd5, 0x93, 0x2f, 0x01, 0xd6, 0x94, 0x2f, 0x01, 0xd7, 0x95, - 0x2f, 0x01, 0xd8, 0x96, 0x2f, 0x01, 0xd9, 0x97, 0x2f, 0x41, 0xe1, 0x00, - 0x08, 0x01, 0xe5, 0x01, 0x08, 0x01, 0xe9, 0x02, 0x08, 0x01, 0xaa, 0xe3, - 0x01, 0xab, 0xcc, 0x01, 0xac, 0xb5, 0x01, 0xad, 0x9e, 0x01, 0xae, 0x87, - 0x01, 0xef, 0x03, 0x08, 0x01, 0xb0, 0x6d, 0xb2, 0x57, 0xb3, 0x41, 0xb4, - 0x2b, 0xf5, 0x04, 0x08, 0x01, 0xb7, 0x15, 0xb8, 0x0b, 0xba, 0x01, 0xff, - 0xe1, 0x3c, 0x08, 0x01, 0xef, 0x3f, 0x08, 0x41, 0xe1, 0x37, 0x08, 0x01, - 0xe5, 0x38, 0x08, 0x41, 0xe1, 0x32, 0x08, 0x01, 0xe5, 0x33, 0x08, 0x01, - 0xe9, 0x34, 0x08, 0x01, 0xef, 0x35, 0x08, 0x41, 0xe1, 0x2d, 0x08, 0x01, - 0xe5, 0x2e, 0x08, 0x01, 0xe9, 0x2f, 0x08, 0x01, 0xef, 0x30, 0x08, 0x01, - 0xf5, 0x31, 0x08, 0x41, 0xe1, 0x28, 0x08, 0x01, 0xe5, 0x29, 0x08, 0x01, - 0xe9, 0x2a, 0x08, 0x01, 0xef, 0x2b, 0x08, 0x01, 0xf5, 0x2c, 0x08, 0x41, - 0xe1, 0x23, 0x08, 0x01, 0xe5, 0x24, 0x08, 0x01, 0xe9, 0x25, 0x08, 0x01, - 0xef, 0x26, 0x08, 0x01, 0xf5, 0x27, 0x08, 0x41, 0xe1, 0x1e, 0x08, 0x01, - 0xe5, 0x1f, 0x08, 0x01, 0xe9, 0x20, 0x08, 0x01, 0xef, 0x21, 0x08, 0x01, - 0xf5, 0x22, 0x08, 0x41, 0xe1, 0x19, 0x08, 0x01, 0xe5, 0x1a, 0x08, 0x01, - 0xe9, 0x1b, 0x08, 0x01, 0xef, 0x1c, 0x08, 0x01, 0xf5, 0x1d, 0x08, 0x41, - 0xe1, 0x14, 0x08, 0x01, 0xe5, 0x15, 0x08, 0x01, 0xe9, 0x16, 0x08, 0x01, - 0xef, 0x17, 0x08, 0x01, 0xf5, 0x18, 0x08, 0x41, 0xe1, 0x0f, 0x08, 0x01, - 0xe5, 0x10, 0x08, 0x01, 0xe9, 0x11, 0x08, 0x01, 0xef, 0x12, 0x08, 0x01, - 0xf5, 0x13, 0x08, 0x41, 0xe1, 0x0a, 0x08, 0x01, 0xe5, 0x0b, 0x08, 0x01, - 0xe9, 0x0c, 0x08, 0x01, 0xef, 0x0d, 0x08, 0x01, 0xf5, 0x0e, 0x08, 0x41, - 0xe1, 0x05, 0x08, 0x01, 0xef, 0x08, 0x08, 0x41, 0x47, 0x31, 0xb5, 0x1b, - 0x22, 0x00, 0x46, 0xde, 0xd7, 0x52, 0xf9, 0x01, 0x08, 0x02, 0xc6, 0x80, - 0x01, 0xb0, 0x64, 0xb2, 0x16, 0x02, 0x60, 0x01, 0x06, 0x49, 0x0f, 0xbd, - 0x69, 0xf9, 0x41, 0x43, 0xaa, 0x01, 0x6e, 0xf3, 0x01, 0x43, 0x88, 0x65, - 0xc3, 0xf6, 0x41, 0xac, 0x1e, 0xb2, 0x06, 0x60, 0x25, 0x10, 0x61, 0x27, - 0x40, 0x05, 0x5f, 0x40, 0x06, 0x4a, 0x7f, 0xb1, 0x5b, 0xf3, 0x41, 0x48, - 0x82, 0xc3, 0xb1, 0xf4, 0x01, 0x44, 0x2f, 0x03, 0xa4, 0x00, 0x40, 0x49, - 0x2c, 0xb8, 0x4c, 0xf9, 0x01, 0x02, 0x09, 0x00, 0x01, 0xff, 0x51, 0x4e, - 0x57, 0xaa, 0x23, 0x00, 0x02, 0x13, 0x01, 0x01, 0xff, 0x06, 0xa5, 0x21, - 0x06, 0x42, 0x1f, 0x00, 0xb0, 0x27, 0x40, 0x43, 0x1a, 0x00, 0xcf, 0x22, - 0x00, 0x42, 0x0c, 0x00, 0xce, 0x22, 0x40, 0x80, 0x0c, 0x44, 0xbe, 0x2b, - 0xc1, 0xf9, 0x01, 0x43, 0xbc, 0x64, 0xe0, 0x2b, 0x40, 0x4f, 0x49, 0x5e, - 0xfe, 0x26, 0x00, 0x4a, 0x4d, 0xb1, 0x64, 0xf9, 0x41, 0x0d, 0xe4, 0x84, - 0xfa, 0x37, 0x11, 0xf4, 0x5b, 0xd3, 0x37, 0x05, 0x2f, 0x03, 0x01, 0xff, - 0xe1, 0x00, 0x20, 0x81, 0xf8, 0x33, 0xa2, 0xd1, 0x32, 0xa4, 0x9b, 0x2e, - 0xe5, 0x8a, 0x20, 0x81, 0x9f, 0x2b, 0xa7, 0xe1, 0x23, 0xa8, 0xc2, 0x22, - 0xe9, 0x3f, 0x21, 0x81, 0xb3, 0x21, 0xab, 0xad, 0x1c, 0xac, 0x86, 0x13, - 0xad, 0xab, 0x11, 0xae, 0xaa, 0x0d, 0xb0, 0xa0, 0x0c, 0xb2, 0x8c, 0x0c, - 0xb3, 0x95, 0x07, 0xb4, 0xb2, 0x05, 0xf5, 0x0b, 0x23, 0x81, 0x77, 0xba, - 0x01, 0xff, 0xe1, 0x5d, 0x23, 0x81, 0x53, 0x42, 0x58, 0x99, 0x62, 0x23, - 0x01, 0xe9, 0x63, 0x23, 0x81, 0x29, 0xf5, 0x6a, 0x23, 0xc1, 0x00, 0x51, - 0xe9, 0x55, 0x42, 0x25, 0x01, 0xd5, 0x6b, 0x23, 0x81, 0x0a, 0x43, 0x37, - 0x35, 0x6d, 0x23, 0x01, 0xed, 0x6e, 0x23, 0x41, 0x07, 0x27, 0x02, 0x01, - 0xff, 0xe1, 0x6c, 0x23, 0x01, 0x4f, 0x16, 0x72, 0x43, 0x25, 0x41, 0x48, - 0xd2, 0xbf, 0x64, 0x23, 0x01, 0xd3, 0x65, 0x23, 0x01, 0xe2, 0x66, 0x23, - 0x81, 0x0a, 0xe7, 0x68, 0x23, 0x01, 0x42, 0x18, 0xf0, 0x69, 0x23, 0x41, - 0x4a, 0x97, 0xa3, 0x67, 0x23, 0x41, 0x80, 0x0e, 0xd7, 0x41, 0x25, 0x01, - 0xe7, 0x60, 0x23, 0x01, 0x42, 0x60, 0xf1, 0x61, 0x23, 0x41, 0x51, 0x8d, - 0x5c, 0x5f, 0x23, 0x01, 0x44, 0x06, 0x5f, 0x5e, 0x23, 0x41, 0x80, 0x8c, - 0x04, 0xd2, 0x11, 0x23, 0x01, 0xe2, 0x12, 0x23, 0x01, 0xe4, 0x13, 0x23, - 0x81, 0xbf, 0x03, 0xed, 0x1d, 0x23, 0x81, 0xfa, 0x02, 0xee, 0x26, 0x23, - 0x81, 0xee, 0x02, 0xf2, 0x28, 0x23, 0x81, 0x46, 0x42, 0xa4, 0x02, 0x51, - 0x23, 0x81, 0x18, 0x44, 0x72, 0xef, 0x59, 0x23, 0x01, 0xba, 0x01, 0xff, - 0xd3, 0x5a, 0x23, 0x81, 0x04, 0xf5, 0x5c, 0x23, 0x41, 0x4d, 0x3d, 0x7e, - 0x5b, 0x23, 0x41, 0x07, 0x27, 0x02, 0x0e, 0xd2, 0x57, 0x23, 0x01, 0x43, - 0x5f, 0xf1, 0x58, 0x23, 0x01, 0xf8, 0x56, 0x23, 0x41, 0xe1, 0x52, 0x23, - 0x01, 0x42, 0xd3, 0x03, 0x53, 0x23, 0x81, 0x06, 0x44, 0xef, 0x43, 0x55, - 0x23, 0x41, 0xf2, 0x54, 0x23, 0x41, 0x80, 0x94, 0x02, 0xd2, 0x2b, 0x23, - 0x81, 0xc1, 0x01, 0xd4, 0x34, 0x23, 0x01, 0xe9, 0x35, 0x23, 0x81, 0xb3, - 0x01, 0xf5, 0x37, 0x23, 0xc1, 0x00, 0x07, 0x27, 0x02, 0x0d, 0x42, 0xa1, - 0x10, 0x4f, 0x23, 0xc1, 0x00, 0x48, 0x27, 0x02, 0x50, 0x23, 0x41, 0xe1, - 0x38, 0x23, 0x81, 0x91, 0x01, 0x43, 0x16, 0x00, 0x3a, 0x23, 0x01, 0xa4, - 0x7d, 0xa7, 0x64, 0x42, 0x22, 0x00, 0x41, 0x23, 0x01, 0xa9, 0x4c, 0x42, - 0x45, 0x00, 0x45, 0x23, 0x01, 0xac, 0x33, 0x43, 0x7c, 0x13, 0x47, 0x23, - 0x01, 0x42, 0x6c, 0x09, 0x48, 0x23, 0x01, 0xb3, 0x19, 0x42, 0x5c, 0x01, - 0x4b, 0x23, 0x01, 0xb5, 0x01, 0xff, 0x49, 0x3b, 0xb2, 0x4c, 0x23, 0x01, - 0xe4, 0x4d, 0x23, 0x01, 0x44, 0x41, 0xc9, 0x4e, 0x23, 0x41, 0x42, 0xb0, - 0x01, 0x49, 0x23, 0x01, 0x43, 0x09, 0x68, 0x4a, 0x23, 0x41, 0x46, 0xbe, - 0xd6, 0x3f, 0x25, 0x01, 0xb5, 0x01, 0xff, 0xd3, 0x40, 0x25, 0x01, 0xed, - 0x46, 0x23, 0x41, 0x42, 0xc6, 0x06, 0x42, 0x23, 0x01, 0xed, 0x43, 0x23, - 0x01, 0x42, 0xa4, 0x02, 0x44, 0x23, 0x41, 0xe1, 0x3c, 0x23, 0x81, 0x04, - 0xf5, 0x40, 0x23, 0x41, 0xec, 0x3d, 0x23, 0x01, 0x47, 0x13, 0x5f, 0x3e, - 0x23, 0x01, 0xf2, 0x3f, 0x23, 0x41, 0x44, 0xda, 0xeb, 0x3e, 0x25, 0x01, - 0x42, 0xf3, 0x0a, 0x3b, 0x23, 0x41, 0x45, 0x07, 0xd7, 0x39, 0x23, 0x41, - 0xd3, 0x36, 0x23, 0x41, 0x80, 0x01, 0xff, 0x48, 0xd6, 0x22, 0x3c, 0x25, - 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xa1, 0x29, 0x42, 0x22, 0x00, 0x2f, - 0x23, 0x01, 0x43, 0x54, 0x22, 0x30, 0x23, 0x01, 0xb5, 0x01, 0xff, 0xd2, - 0x31, 0x23, 0x81, 0x04, 0xe4, 0x3d, 0x25, 0x41, 0x06, 0xb6, 0x27, 0x01, - 0xff, 0x43, 0xce, 0x03, 0x32, 0x23, 0x01, 0x42, 0xba, 0x06, 0x33, 0x23, - 0x41, 0x06, 0xb6, 0x27, 0x04, 0xec, 0x2e, 0x23, 0x41, 0x42, 0x22, 0x00, - 0x2c, 0x23, 0x01, 0x42, 0xff, 0x04, 0x2d, 0x23, 0x41, 0x4b, 0x7c, 0x98, - 0x29, 0x23, 0x01, 0x47, 0xba, 0x7a, 0x2a, 0x23, 0x41, 0x45, 0xd6, 0x3e, - 0x27, 0x23, 0x41, 0x07, 0x27, 0x02, 0x1e, 0x43, 0xc9, 0x15, 0x22, 0x23, - 0x01, 0x42, 0x1d, 0x04, 0x23, 0x23, 0xc1, 0x00, 0x07, 0x27, 0x02, 0x01, - 0xff, 0x46, 0x1b, 0x02, 0x24, 0x23, 0x01, 0x42, 0x6c, 0x09, 0x25, 0x23, - 0x41, 0x45, 0x22, 0x02, 0x1e, 0x23, 0x01, 0x42, 0x2a, 0x02, 0x98, 0x23, - 0x81, 0x0a, 0x44, 0x00, 0x56, 0x20, 0x23, 0x01, 0xf5, 0x21, 0x23, 0x41, - 0x48, 0x8b, 0x56, 0x1f, 0x23, 0x41, 0x80, 0x06, 0x42, 0x83, 0x0e, 0x1c, - 0x23, 0x41, 0x44, 0xd7, 0x3e, 0x19, 0x23, 0x01, 0x46, 0x84, 0xda, 0x14, - 0x23, 0x01, 0x47, 0xba, 0x7a, 0x1a, 0x23, 0x81, 0x1e, 0x06, 0x28, 0x02, - 0x01, 0xff, 0x43, 0x4f, 0x6f, 0x15, 0x23, 0x01, 0x42, 0x7d, 0x02, 0x16, - 0x23, 0x01, 0x4f, 0x8e, 0x72, 0x17, 0x23, 0xc1, 0x00, 0x45, 0xd6, 0x3e, - 0x18, 0x23, 0x41, 0x4a, 0x06, 0x9b, 0x1b, 0x23, 0x41, 0x43, 0x8b, 0x79, - 0x0c, 0x23, 0x01, 0x07, 0xd7, 0x21, 0x0b, 0xf5, 0x99, 0x23, 0xc1, 0x00, - 0x42, 0x2d, 0x02, 0x0d, 0x23, 0x41, 0x57, 0x6c, 0x2f, 0x0e, 0x23, 0x01, - 0x4c, 0xb5, 0x93, 0x0f, 0x23, 0x01, 0x5a, 0xcc, 0x21, 0x10, 0x23, 0x41, - 0xe1, 0xeb, 0x22, 0x81, 0x69, 0xe5, 0xfc, 0x22, 0x81, 0x5e, 0xe9, 0xfe, - 0x22, 0x81, 0x30, 0xf5, 0x05, 0x23, 0xc1, 0x00, 0x42, 0x84, 0x0e, 0x06, - 0x23, 0x01, 0xeb, 0x07, 0x23, 0x01, 0xed, 0x08, 0x23, 0x81, 0x0b, 0xf2, - 0x09, 0x23, 0xc1, 0x00, 0x54, 0xdf, 0x3e, 0x0a, 0x23, 0x41, 0x07, 0x27, - 0x02, 0x01, 0xff, 0x49, 0x11, 0x5f, 0x3a, 0x25, 0x01, 0x4a, 0x16, 0x72, - 0x3b, 0x25, 0x41, 0x45, 0x05, 0x5f, 0xff, 0x22, 0x01, 0xd2, 0x97, 0x23, - 0x01, 0xec, 0x00, 0x23, 0x01, 0xf2, 0x01, 0x23, 0xc1, 0x00, 0x80, 0x01, - 0xff, 0x48, 0x02, 0xc7, 0x03, 0x23, 0x81, 0x06, 0x4a, 0xe9, 0x43, 0x02, - 0x23, 0x41, 0x5a, 0xbc, 0x1d, 0x04, 0x23, 0x41, 0x45, 0xd6, 0x3e, 0xfd, - 0x22, 0x41, 0x80, 0x53, 0xe2, 0xf0, 0x22, 0x81, 0x3f, 0xe7, 0xf3, 0x22, - 0x81, 0x11, 0x42, 0xf1, 0x43, 0xfa, 0x22, 0x81, 0x04, 0xf2, 0xfb, 0x22, - 0x41, 0x49, 0x56, 0xb2, 0x39, 0x25, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, - 0x42, 0xba, 0x06, 0xf4, 0x22, 0x01, 0x43, 0x8b, 0x79, 0xf5, 0x22, 0x01, - 0x02, 0xa4, 0x02, 0x0c, 0x44, 0x82, 0x0e, 0xf8, 0x22, 0x01, 0x42, 0x63, - 0x0c, 0xf9, 0x22, 0x41, 0xe5, 0xf6, 0x22, 0x01, 0xf5, 0xf7, 0x22, 0x41, - 0x80, 0x01, 0xff, 0x62, 0x6d, 0x0c, 0xf1, 0x22, 0x01, 0x47, 0xab, 0x05, - 0xf2, 0x22, 0x41, 0x48, 0xed, 0x0c, 0xec, 0x22, 0x01, 0x44, 0xd7, 0x3e, - 0xef, 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0x42, 0x49, 0x00, 0xed, - 0x22, 0x01, 0x42, 0x7d, 0x02, 0xee, 0x22, 0x41, 0xe1, 0x93, 0x22, 0x81, - 0xb3, 0x03, 0xa8, 0x5d, 0xe9, 0xdb, 0x22, 0x81, 0x2e, 0xf5, 0xe2, 0x22, - 0xc1, 0x00, 0x48, 0xb8, 0x93, 0xe3, 0x22, 0x01, 0xe4, 0xe4, 0x22, 0x81, - 0x1a, 0x43, 0x41, 0x00, 0xe6, 0x22, 0x01, 0xed, 0xe7, 0x22, 0x81, 0x09, - 0xf2, 0xe9, 0x22, 0xc1, 0x00, 0xd9, 0xea, 0x22, 0x41, 0x43, 0xce, 0x03, - 0xe8, 0x22, 0x41, 0xd2, 0xe5, 0x22, 0x41, 0x80, 0x1c, 0xe7, 0xdd, 0x22, - 0x81, 0x0c, 0x42, 0xf5, 0xa9, 0xe0, 0x22, 0x01, 0x43, 0xd9, 0xe7, 0xe1, - 0x22, 0x41, 0xd4, 0xde, 0x22, 0xc1, 0x00, 0x4f, 0x02, 0x68, 0xdf, 0x22, - 0x41, 0x44, 0xd7, 0x3e, 0xdc, 0x22, 0x01, 0x4a, 0xe9, 0x43, 0x38, 0x25, - 0x41, 0xe1, 0xad, 0x22, 0x81, 0x80, 0x02, 0xe5, 0xba, 0x22, 0x81, 0xaa, - 0x01, 0xa9, 0x27, 0xf5, 0xd7, 0x22, 0xc1, 0x00, 0x52, 0x20, 0x4e, 0xd8, - 0x22, 0x01, 0xd2, 0xd9, 0x22, 0x81, 0x06, 0x43, 0x37, 0x35, 0xda, 0x22, - 0x41, 0x06, 0xb6, 0x27, 0x01, 0xff, 0x4c, 0x95, 0x8c, 0x36, 0x25, 0x01, - 0x4b, 0x58, 0x99, 0x37, 0x25, 0x41, 0xe4, 0xc3, 0x22, 0x81, 0x6d, 0xed, - 0xc6, 0x22, 0x81, 0x20, 0x43, 0xa0, 0x33, 0xd2, 0x22, 0x01, 0xf2, 0xd3, - 0x22, 0x81, 0x06, 0x42, 0x12, 0x00, 0xd6, 0x22, 0x41, 0x80, 0x01, 0xff, - 0x56, 0x43, 0x35, 0xd5, 0x22, 0x01, 0x44, 0x06, 0x5f, 0xd4, 0x22, 0x41, - 0x07, 0x27, 0x02, 0x01, 0xff, 0xe1, 0xc7, 0x22, 0x01, 0xa2, 0x31, 0x43, - 0xd9, 0x05, 0xca, 0x22, 0x01, 0x43, 0xca, 0x1d, 0xcb, 0x22, 0x01, 0x43, - 0xc5, 0x06, 0xcc, 0x22, 0x81, 0x18, 0x46, 0x84, 0xda, 0xce, 0x22, 0x01, - 0x43, 0x26, 0xf1, 0xcf, 0x22, 0x01, 0x43, 0x41, 0xb4, 0xd0, 0x22, 0x01, - 0x43, 0x16, 0x0d, 0xd1, 0x22, 0x41, 0x45, 0xd6, 0x3e, 0xcd, 0x22, 0x41, - 0x42, 0x13, 0x00, 0xc8, 0x22, 0x01, 0x44, 0x97, 0x95, 0xc9, 0x22, 0x41, - 0x07, 0x27, 0x02, 0x01, 0xff, 0xe1, 0xc4, 0x22, 0x01, 0x42, 0x29, 0x02, - 0xc5, 0x22, 0x41, 0x80, 0x1b, 0x42, 0xcc, 0xf1, 0xbe, 0x22, 0x01, 0xee, - 0xbf, 0x22, 0x01, 0x42, 0xa4, 0x02, 0xc0, 0x22, 0xc1, 0x00, 0xd2, 0xc1, - 0x22, 0x01, 0x43, 0xb0, 0x00, 0xc2, 0x22, 0x41, 0x42, 0x41, 0x00, 0xbb, - 0x22, 0x01, 0x48, 0xfa, 0xc6, 0x32, 0x25, 0x81, 0x17, 0x05, 0xb7, 0x27, - 0x01, 0xff, 0x44, 0x1e, 0xed, 0x33, 0x25, 0x01, 0x44, 0x1a, 0xee, 0x34, - 0x25, 0x01, 0x43, 0xa3, 0x4a, 0x35, 0x25, 0x41, 0x80, 0x01, 0xff, 0x59, - 0xbd, 0x1d, 0xbc, 0x22, 0x01, 0x59, 0xd2, 0x25, 0xbd, 0x22, 0x41, 0xd3, - 0xae, 0x22, 0x81, 0x17, 0xd6, 0xb7, 0x22, 0x81, 0x0c, 0x42, 0x70, 0xf0, - 0xb8, 0x22, 0x01, 0x42, 0xc5, 0x41, 0xb9, 0x22, 0x41, 0x45, 0x05, 0x5f, - 0x31, 0x25, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0xe1, 0xaf, 0x22, 0x01, - 0x43, 0x4f, 0x6f, 0xb0, 0x22, 0x01, 0x44, 0xe4, 0x43, 0xb1, 0x22, 0x01, - 0x42, 0xa2, 0x05, 0xb2, 0x22, 0x01, 0x44, 0x8a, 0x65, 0xb3, 0x22, 0x01, - 0x43, 0x5c, 0x01, 0xb4, 0x22, 0x01, 0xf5, 0xb5, 0x22, 0xc1, 0x00, 0x47, - 0xb6, 0x27, 0xb6, 0x22, 0x41, 0xe7, 0x95, 0x22, 0x81, 0x15, 0xec, 0xa9, - 0x22, 0x81, 0x0a, 0x44, 0x36, 0xee, 0xab, 0x22, 0x01, 0xf2, 0xac, 0x22, - 0x41, 0x51, 0xc7, 0x55, 0xaa, 0x22, 0x41, 0x80, 0x01, 0xff, 0x44, 0xd7, - 0x3e, 0xa8, 0x22, 0x81, 0x90, 0x01, 0x47, 0xa3, 0xbf, 0x94, 0x22, 0x01, - 0x48, 0xf2, 0xc6, 0xa7, 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, - 0x96, 0x22, 0x01, 0x42, 0x6c, 0x02, 0x97, 0x22, 0x81, 0x70, 0x42, 0x92, - 0x01, 0x2e, 0x25, 0x01, 0x42, 0x22, 0x00, 0x99, 0x22, 0x01, 0x48, 0x54, - 0x68, 0x96, 0x23, 0x01, 0xab, 0x50, 0x43, 0x2f, 0xb2, 0x9c, 0x22, 0x01, - 0x42, 0x7d, 0x02, 0x9d, 0x22, 0x01, 0x43, 0x54, 0x22, 0x9e, 0x22, 0x01, - 0xb3, 0x27, 0x02, 0x12, 0x00, 0x19, 0xb5, 0x01, 0xff, 0xd2, 0xa2, 0x22, - 0x01, 0xe2, 0xa3, 0x22, 0x01, 0xed, 0xa4, 0x22, 0x01, 0xf2, 0xa5, 0x22, - 0x01, 0x42, 0xa4, 0x02, 0xa6, 0x22, 0x41, 0xe2, 0xa1, 0x22, 0x01, 0x42, - 0xf1, 0x43, 0x30, 0x25, 0x41, 0x42, 0x13, 0x00, 0x9f, 0x22, 0x01, 0xa8, - 0x01, 0xff, 0x49, 0xa4, 0xb5, 0x2f, 0x25, 0x01, 0x42, 0x03, 0x00, 0xa0, - 0x22, 0x41, 0x42, 0x6d, 0x00, 0x9a, 0x22, 0x01, 0x42, 0x42, 0x00, 0x9b, - 0x22, 0x41, 0xe2, 0x98, 0x22, 0x41, 0x49, 0x95, 0xb2, 0x2d, 0x25, 0x41, - 0xe1, 0x8f, 0x22, 0x81, 0x08, 0xe9, 0x91, 0x22, 0x01, 0xf5, 0x92, 0x22, - 0x41, 0xe2, 0x90, 0x22, 0x41, 0xe1, 0x7a, 0x22, 0x81, 0x76, 0x44, 0xe0, - 0x73, 0x7e, 0x22, 0x81, 0x69, 0xe9, 0x7f, 0x22, 0xc1, 0x00, 0x80, 0x2e, - 0xb2, 0x01, 0xff, 0xd2, 0x95, 0x23, 0x01, 0x42, 0x3f, 0x00, 0x8a, 0x22, - 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4e, 0x16, 0x79, 0x8e, 0x22, 0x01, 0x06, - 0x28, 0x02, 0x01, 0xff, 0x43, 0x1e, 0x02, 0x8b, 0x22, 0x01, 0x42, 0x63, - 0x0c, 0x8c, 0x22, 0x01, 0x42, 0x59, 0x00, 0x8d, 0x22, 0x41, 0x4b, 0x71, - 0x98, 0x89, 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, 0x80, 0x22, - 0x81, 0x20, 0xa2, 0x16, 0xe5, 0x84, 0x22, 0x01, 0xe9, 0x85, 0x22, 0x81, - 0x09, 0xf5, 0x87, 0x22, 0xc1, 0x00, 0xd2, 0x88, 0x22, 0x41, 0xe2, 0x86, - 0x22, 0x41, 0xe9, 0x82, 0x22, 0x01, 0xf5, 0x83, 0x22, 0x41, 0xe2, 0x81, - 0x22, 0x41, 0x49, 0xec, 0x0c, 0x94, 0x23, 0x41, 0xe4, 0x7b, 0x22, 0x01, - 0xee, 0x7c, 0x22, 0x01, 0xf0, 0x7d, 0x22, 0x41, 0xe1, 0x3e, 0x22, 0x81, - 0xc2, 0x03, 0xe5, 0x48, 0x22, 0x81, 0xa4, 0x03, 0xe9, 0x4c, 0x22, 0x81, - 0xbc, 0x01, 0xf5, 0x61, 0x22, 0xc1, 0x00, 0x42, 0x34, 0x35, 0x62, 0x22, - 0x81, 0x9a, 0x01, 0xee, 0x63, 0x22, 0xc1, 0x00, 0x80, 0x57, 0x42, 0x63, - 0x51, 0x6d, 0x22, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x0a, 0x09, 0xa5, 0x0d, - 0x4f, 0x75, 0x6d, 0x78, 0x22, 0xc1, 0x00, 0x42, 0x2d, 0x02, 0x79, 0x22, - 0x41, 0x46, 0x06, 0xd7, 0x6e, 0x22, 0x01, 0x42, 0xba, 0x06, 0x6f, 0x22, - 0x01, 0x43, 0x95, 0x8c, 0x70, 0x22, 0x01, 0x43, 0x8b, 0x79, 0x71, 0x22, - 0x01, 0x48, 0x54, 0x68, 0x72, 0x22, 0x01, 0x44, 0x82, 0xed, 0x73, 0x22, - 0x01, 0x42, 0x74, 0x00, 0x74, 0x22, 0x01, 0x42, 0xa2, 0x05, 0x75, 0x22, - 0x01, 0x45, 0xd7, 0xe7, 0x76, 0x22, 0x01, 0x42, 0x8c, 0x65, 0x77, 0x22, - 0x41, 0x4c, 0xf9, 0x8b, 0x6b, 0x22, 0x81, 0x2f, 0x0c, 0x58, 0x22, 0x0c, - 0x48, 0x4f, 0x22, 0x6a, 0x22, 0x01, 0x44, 0x06, 0x5f, 0x69, 0x22, 0x41, - 0x43, 0xca, 0x1d, 0x64, 0x22, 0x01, 0x44, 0x61, 0x06, 0x65, 0x22, 0x01, - 0x43, 0x16, 0x0d, 0x66, 0x22, 0x81, 0x06, 0x43, 0xcf, 0x7a, 0x68, 0x22, - 0x41, 0x59, 0x4e, 0x22, 0x67, 0x22, 0x41, 0x51, 0xd8, 0x55, 0x6c, 0x22, - 0x41, 0x80, 0x01, 0xff, 0x56, 0x2d, 0x35, 0xd5, 0x22, 0x01, 0x56, 0x03, - 0x2c, 0x93, 0x23, 0x01, 0x44, 0x06, 0x5f, 0xd4, 0x22, 0x41, 0x48, 0xe8, - 0x95, 0x4d, 0x22, 0x01, 0xd2, 0x4e, 0x22, 0x01, 0xed, 0x4f, 0x22, 0x81, - 0xc1, 0x01, 0xee, 0x8f, 0x23, 0x81, 0x06, 0x43, 0x21, 0x87, 0x60, 0x22, - 0x41, 0xd9, 0x90, 0x23, 0x01, 0x43, 0xc6, 0xf0, 0x52, 0x22, 0xc1, 0x00, - 0x07, 0x27, 0x02, 0x01, 0xff, 0xa1, 0x92, 0x01, 0x43, 0x46, 0x1c, 0x91, - 0x23, 0x01, 0x48, 0x9a, 0xc2, 0x22, 0x25, 0x01, 0xa7, 0x6e, 0x42, 0x49, - 0x00, 0x25, 0x25, 0x01, 0x45, 0xbc, 0xe4, 0x26, 0x25, 0x01, 0x47, 0xd2, - 0xcf, 0x27, 0x25, 0x01, 0xad, 0x4e, 0xae, 0x42, 0x4c, 0xac, 0x3c, 0x29, - 0x25, 0x01, 0x43, 0x63, 0x06, 0x5a, 0x22, 0x81, 0x1d, 0xf5, 0x2a, 0x25, - 0xc1, 0x00, 0x47, 0x8f, 0x72, 0x2b, 0x25, 0x01, 0x4a, 0xaf, 0xa4, 0x5e, - 0x22, 0x01, 0x44, 0x41, 0xc9, 0x2c, 0x25, 0x01, 0x42, 0xa4, 0x02, 0x5f, - 0x22, 0x41, 0x07, 0xb6, 0x27, 0x01, 0xff, 0x43, 0x19, 0x00, 0x5b, 0x22, - 0x01, 0x42, 0xa4, 0x02, 0x5c, 0x22, 0xc1, 0x00, 0x49, 0xcf, 0x4b, 0x5d, - 0x22, 0x41, 0xe5, 0x58, 0x22, 0x01, 0x42, 0xf3, 0x0a, 0x59, 0x22, 0x41, - 0x43, 0xce, 0x03, 0x28, 0x25, 0x01, 0x50, 0xfa, 0x60, 0x57, 0x22, 0x41, - 0xe9, 0x92, 0x23, 0x81, 0x0b, 0xb5, 0x01, 0xff, 0xe4, 0x56, 0x22, 0x01, - 0xec, 0x24, 0x25, 0x41, 0x42, 0xa4, 0x02, 0x23, 0x25, 0x41, 0xee, 0x53, - 0x22, 0x01, 0x42, 0xa4, 0x02, 0x54, 0x22, 0xc1, 0x00, 0x49, 0xcf, 0x4b, - 0x55, 0x22, 0x41, 0x09, 0xc7, 0x41, 0x01, 0xff, 0x47, 0x13, 0x5f, 0x50, - 0x22, 0x01, 0x50, 0xaa, 0x64, 0x51, 0x22, 0x41, 0x80, 0x01, 0xff, 0x47, - 0xba, 0x7a, 0x4b, 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, 0x49, - 0x22, 0x01, 0x42, 0x63, 0x0c, 0x4a, 0x22, 0x41, 0xd2, 0x3f, 0x22, 0x01, - 0xd4, 0x8e, 0x23, 0x01, 0x42, 0x24, 0x02, 0x40, 0x22, 0x81, 0x0f, 0xed, - 0x46, 0x22, 0xc1, 0x00, 0x48, 0xa2, 0xbf, 0x45, 0x22, 0x01, 0xd2, 0x47, - 0x22, 0x41, 0x80, 0x04, 0xf2, 0x44, 0x22, 0x41, 0x48, 0xd6, 0x22, 0x41, - 0x22, 0x01, 0x4d, 0x66, 0x85, 0x43, 0x22, 0x01, 0x4e, 0xc4, 0x7b, 0x42, - 0x22, 0x41, 0xe1, 0x20, 0x22, 0x81, 0xad, 0x01, 0xe5, 0x28, 0x22, 0x81, - 0x9e, 0x01, 0xe9, 0x2a, 0x22, 0x81, 0x8e, 0x01, 0xf5, 0x2c, 0x22, 0xc1, - 0x00, 0x48, 0xca, 0xbf, 0x2d, 0x22, 0x01, 0xe7, 0x2e, 0x22, 0x81, 0x78, - 0x44, 0x56, 0xee, 0x30, 0x22, 0x01, 0x44, 0xfa, 0xee, 0x31, 0x22, 0x01, - 0x42, 0xa4, 0x02, 0x32, 0x22, 0xc1, 0x00, 0x80, 0x2a, 0xd3, 0x39, 0x22, - 0xc1, 0x00, 0x80, 0x01, 0xff, 0x44, 0xd7, 0x3e, 0x3d, 0x22, 0x01, 0x06, - 0x28, 0x02, 0x01, 0xff, 0xe1, 0x3a, 0x22, 0x81, 0x0c, 0x42, 0x00, 0x00, - 0x3c, 0x22, 0x01, 0x42, 0x59, 0x00, 0x8d, 0x23, 0x41, 0x48, 0xda, 0xbf, - 0x3b, 0x22, 0x41, 0x4d, 0x38, 0x80, 0x38, 0x22, 0x01, 0x49, 0x4d, 0xbb, - 0x36, 0x22, 0x81, 0x15, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, 0x33, 0x22, - 0x01, 0x43, 0x9b, 0x5c, 0x34, 0x22, 0x01, 0x42, 0x59, 0x00, 0x35, 0x22, - 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x49, 0x25, 0xb3, 0x37, 0x22, 0x01, - 0x42, 0x24, 0x02, 0x20, 0x25, 0x01, 0x43, 0xe0, 0x5e, 0x21, 0x25, 0x41, - 0x45, 0xd6, 0x3e, 0x2f, 0x22, 0x41, 0x49, 0x68, 0xb2, 0x1f, 0x25, 0x01, - 0xee, 0x2b, 0x22, 0x41, 0xf3, 0x29, 0x22, 0xc1, 0x00, 0xe8, 0x8c, 0x23, - 0x41, 0x80, 0x17, 0xd2, 0x23, 0x22, 0x01, 0xe8, 0x24, 0x22, 0x01, 0xf2, - 0x25, 0x22, 0x01, 0x42, 0xa4, 0x02, 0x26, 0x22, 0xc1, 0x00, 0xd2, 0x27, - 0x22, 0x41, 0x44, 0xd7, 0x3e, 0x22, 0x22, 0x01, 0x4a, 0xe9, 0x43, 0x21, - 0x22, 0x41, 0xe1, 0xb7, 0x21, 0x81, 0xca, 0x02, 0xe9, 0xf7, 0x21, 0x81, - 0xb4, 0x02, 0xf5, 0xfb, 0x21, 0xc1, 0x00, 0x4a, 0x06, 0x9b, 0xfc, 0x21, - 0x01, 0xd2, 0xfd, 0x21, 0x81, 0x3c, 0xd3, 0x16, 0x22, 0x01, 0x43, 0xce, - 0x41, 0x17, 0x22, 0x81, 0x1a, 0xe8, 0x1b, 0x22, 0x01, 0xec, 0x1c, 0x22, - 0x01, 0xed, 0x1d, 0x22, 0xc1, 0x00, 0x49, 0x29, 0xb2, 0x1e, 0x22, 0xc1, - 0x00, 0x4d, 0xc9, 0x1d, 0x1f, 0x22, 0x41, 0x80, 0x01, 0xff, 0xaf, 0x06, - 0x47, 0xba, 0x7a, 0x1a, 0x22, 0x41, 0x4d, 0xce, 0x85, 0x19, 0x22, 0x01, - 0x49, 0x5c, 0xbe, 0x18, 0x22, 0x41, 0x80, 0x01, 0xff, 0x4c, 0xed, 0x8b, - 0x12, 0x22, 0x01, 0x4e, 0xae, 0x76, 0x19, 0x25, 0x01, 0x4c, 0xa5, 0x91, - 0x13, 0x22, 0x01, 0xb3, 0xbd, 0x01, 0xb4, 0x01, 0xff, 0x43, 0x07, 0x5f, - 0x11, 0x22, 0x01, 0x05, 0x29, 0x02, 0x01, 0xff, 0x42, 0x13, 0x00, 0xfe, - 0x21, 0x01, 0x43, 0x4f, 0x6f, 0xff, 0x21, 0x01, 0x44, 0x81, 0x0c, 0x1a, - 0x25, 0x01, 0x44, 0xe0, 0x73, 0x00, 0x22, 0x81, 0x86, 0x01, 0x49, 0x11, - 0x5f, 0x02, 0x22, 0x01, 0xa8, 0x72, 0x42, 0x29, 0x02, 0x04, 0x22, 0x01, - 0xab, 0x53, 0x02, 0x74, 0x00, 0x43, 0x4a, 0x67, 0xab, 0x0b, 0x22, 0x01, - 0xae, 0x33, 0x43, 0xa0, 0x0e, 0x1c, 0x25, 0x81, 0x26, 0xb3, 0x0f, 0xb4, - 0x01, 0xff, 0x43, 0xf0, 0x43, 0x1e, 0x25, 0x01, 0x43, 0x83, 0x0e, 0x10, - 0x22, 0x41, 0x42, 0x41, 0x00, 0x8b, 0x23, 0x01, 0xa9, 0x01, 0xff, 0x49, - 0xcf, 0x4b, 0x0e, 0x22, 0x01, 0x4a, 0xf5, 0xa9, 0x0f, 0x22, 0x41, 0x52, - 0xaf, 0x3c, 0x1d, 0x25, 0x41, 0xe5, 0x0c, 0x22, 0x01, 0xf5, 0x0d, 0x22, - 0x41, 0x49, 0xcf, 0x4b, 0x09, 0x22, 0x01, 0x43, 0x24, 0x02, 0x0a, 0x22, - 0x41, 0x02, 0xe8, 0x01, 0x04, 0xe9, 0x08, 0x22, 0x41, 0xd2, 0x05, 0x22, - 0x01, 0xd3, 0x06, 0x22, 0xc1, 0x00, 0x49, 0xcf, 0x4b, 0x07, 0x22, 0x41, - 0x42, 0x13, 0x00, 0x1b, 0x25, 0x01, 0x4b, 0x05, 0x9b, 0x03, 0x22, 0x41, - 0x80, 0x01, 0xff, 0x48, 0x4e, 0xb2, 0x8a, 0x23, 0x01, 0x44, 0x06, 0x5f, - 0x01, 0x22, 0x41, 0x46, 0xbb, 0x7a, 0x15, 0x22, 0x81, 0x06, 0x46, 0xac, - 0x05, 0x14, 0x22, 0x41, 0x4a, 0x06, 0x9b, 0x89, 0x23, 0x41, 0xec, 0xf8, - 0x21, 0x01, 0x44, 0xfa, 0xed, 0xf9, 0x21, 0x01, 0x42, 0xa4, 0x02, 0xfa, - 0x21, 0x41, 0x02, 0x24, 0x02, 0xd0, 0x03, 0x44, 0x1a, 0xed, 0xf1, 0x21, - 0x01, 0x02, 0x66, 0x10, 0x1d, 0xec, 0xf2, 0x21, 0x81, 0x12, 0xed, 0xf4, - 0x21, 0xc1, 0x00, 0x4a, 0x94, 0x5c, 0xf5, 0x21, 0xc1, 0x00, 0x48, 0xea, - 0xbf, 0xf6, 0x21, 0x41, 0x4a, 0x03, 0x9c, 0xf3, 0x21, 0x41, 0x90, 0xe8, - 0x02, 0x91, 0xd9, 0x02, 0x92, 0xad, 0x02, 0x93, 0x8c, 0x02, 0x94, 0xae, - 0x01, 0x43, 0x69, 0xf0, 0xff, 0x24, 0x01, 0x96, 0x0f, 0x97, 0x01, 0xff, - 0x42, 0xf8, 0xb2, 0x17, 0x25, 0x01, 0x42, 0xb2, 0xf1, 0x18, 0x25, 0x41, - 0x42, 0x27, 0x74, 0x00, 0x25, 0x01, 0x42, 0xa0, 0xf1, 0x01, 0x25, 0x81, - 0x4a, 0x42, 0xa8, 0xf1, 0x0c, 0x25, 0x01, 0x42, 0xb0, 0xf1, 0x0d, 0x25, - 0xc1, 0x00, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, 0xd2, 0xf0, 0x0e, 0x25, - 0x01, 0x42, 0x24, 0x02, 0x0f, 0x25, 0x01, 0x43, 0xc5, 0x06, 0x10, 0x25, - 0x81, 0x1f, 0x42, 0x26, 0x03, 0x12, 0x25, 0x01, 0x55, 0xac, 0x3c, 0x13, - 0x25, 0x01, 0x4d, 0xd2, 0x86, 0x14, 0x25, 0x01, 0xb5, 0x01, 0xff, 0xe4, - 0x15, 0x25, 0x01, 0x44, 0x41, 0xc9, 0x16, 0x25, 0x41, 0x45, 0xd6, 0x3e, - 0x11, 0x25, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, 0xce, 0x03, 0x02, - 0x25, 0x01, 0x43, 0x4f, 0x6f, 0x03, 0x25, 0x01, 0x4e, 0xb2, 0x75, 0x04, - 0x25, 0x01, 0x43, 0x4a, 0xb2, 0x05, 0x25, 0x01, 0x42, 0x74, 0x00, 0x06, - 0x25, 0x01, 0xb4, 0x11, 0xb5, 0x01, 0xff, 0xd2, 0x09, 0x25, 0x01, 0xe4, - 0x0a, 0x25, 0x01, 0x44, 0x41, 0xc9, 0x0b, 0x25, 0x41, 0x42, 0x17, 0x00, - 0x07, 0x25, 0x01, 0xe5, 0x08, 0x25, 0x41, 0x94, 0x29, 0x95, 0x1f, 0x42, - 0xc4, 0xf0, 0xf9, 0x24, 0x01, 0x42, 0xab, 0xf1, 0xfa, 0x24, 0x01, 0x99, - 0x01, 0xff, 0xd0, 0xfb, 0x24, 0x01, 0xd2, 0xfc, 0x24, 0x01, 0xd3, 0xfd, - 0x24, 0x01, 0xd5, 0xfe, 0x24, 0x41, 0xd0, 0xf7, 0x24, 0x01, 0xd7, 0xf8, - 0x24, 0x41, 0xd1, 0xf0, 0x24, 0x01, 0xd9, 0xf1, 0x24, 0xc1, 0x00, 0x07, - 0x27, 0x02, 0x01, 0xff, 0x42, 0x1e, 0x01, 0xf2, 0x24, 0x01, 0x43, 0xc5, - 0x06, 0xf3, 0x24, 0x01, 0x09, 0xac, 0x3c, 0x06, 0x4a, 0x21, 0xb0, 0xf6, - 0x24, 0x41, 0x43, 0xbe, 0x3c, 0xf4, 0x24, 0x01, 0x4c, 0xb5, 0x3c, 0xf5, - 0x24, 0x41, 0x94, 0x10, 0x98, 0x06, 0x42, 0xbc, 0xf1, 0xef, 0x24, 0x41, - 0xd3, 0xed, 0x24, 0x01, 0xd4, 0xee, 0x24, 0x41, 0xd3, 0xea, 0x24, 0x01, - 0xd7, 0xeb, 0x24, 0x01, 0xd8, 0xec, 0x24, 0x41, 0x91, 0x1f, 0x92, 0x11, - 0x42, 0xaa, 0xf1, 0xe7, 0x24, 0x01, 0x96, 0x01, 0xff, 0xd5, 0xe8, 0x24, - 0x01, 0xd6, 0xe9, 0x24, 0x41, 0xd0, 0xe4, 0x24, 0x01, 0xd5, 0xe5, 0x24, - 0x01, 0xd8, 0xe6, 0x24, 0x41, 0xd0, 0xe2, 0x24, 0x01, 0xd9, 0xe3, 0x24, - 0x41, 0x42, 0x57, 0xf0, 0xe0, 0x24, 0x01, 0x42, 0xc1, 0xf0, 0xe1, 0x24, - 0x41, 0x42, 0x56, 0xf0, 0xd5, 0x24, 0x01, 0x92, 0x2e, 0x42, 0x57, 0xf0, - 0xd8, 0x24, 0x01, 0x95, 0x1e, 0x42, 0x75, 0xf0, 0xdb, 0x24, 0x01, 0x54, - 0x1b, 0x3f, 0xdc, 0x24, 0x01, 0x98, 0x06, 0x42, 0xbe, 0xf1, 0xdf, 0x24, - 0x41, 0xd0, 0xdd, 0x24, 0x01, 0x4e, 0x1c, 0x74, 0xde, 0x24, 0x41, 0xd0, - 0xd9, 0x24, 0x01, 0xd1, 0xda, 0x24, 0x41, 0xd1, 0xd6, 0x24, 0x01, 0xd5, - 0xd7, 0x24, 0x41, 0xe2, 0xb8, 0x21, 0x81, 0x22, 0xf2, 0xec, 0x21, 0xc1, - 0x00, 0x80, 0x01, 0xff, 0x44, 0xd7, 0x3e, 0xef, 0x21, 0x81, 0x0d, 0x49, - 0xfc, 0xa3, 0xed, 0x21, 0xc1, 0x00, 0x49, 0x3a, 0xa7, 0xee, 0x21, 0x41, - 0x54, 0xcb, 0x3e, 0xf0, 0x21, 0x41, 0x80, 0x01, 0xff, 0x47, 0xab, 0x05, - 0xeb, 0x21, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, 0xb9, 0x21, 0x81, - 0xa0, 0x02, 0xa2, 0x93, 0x02, 0x43, 0xbb, 0x17, 0xc2, 0x21, 0x01, 0x42, - 0x92, 0x01, 0xc3, 0x21, 0x01, 0xa7, 0xea, 0x01, 0xa8, 0xd8, 0x01, 0xa9, - 0xb9, 0x01, 0xab, 0x9b, 0x01, 0xac, 0x83, 0x01, 0xad, 0x70, 0x42, 0xa2, - 0x05, 0xdb, 0x21, 0x01, 0xb3, 0x3d, 0xb4, 0x29, 0xf5, 0xe5, 0x21, 0x81, - 0x06, 0x4a, 0xc5, 0xb1, 0xd4, 0x24, 0x41, 0x06, 0xb6, 0x27, 0x10, 0x4a, - 0xaf, 0xa4, 0xe8, 0x21, 0x01, 0xe4, 0xe9, 0x21, 0x01, 0x42, 0xa4, 0x02, - 0xea, 0x21, 0x41, 0xe1, 0xe6, 0x21, 0x01, 0x48, 0x8e, 0x72, 0xe7, 0x21, - 0x41, 0xa1, 0x06, 0x58, 0xb5, 0x27, 0xe4, 0x21, 0x41, 0xe7, 0xe2, 0x21, - 0x01, 0x42, 0xf1, 0x43, 0xe3, 0x21, 0x41, 0xa8, 0x06, 0x42, 0x1d, 0x04, - 0xe1, 0x21, 0x41, 0x4a, 0x39, 0xa7, 0xdc, 0x21, 0x01, 0x0e, 0x8e, 0x77, - 0x0d, 0x42, 0x8c, 0x65, 0xdf, 0x21, 0xc1, 0x00, 0x4a, 0xbf, 0xa3, 0xe0, - 0x21, 0x41, 0x4a, 0x3d, 0xad, 0xdd, 0x21, 0x01, 0x44, 0x06, 0x5f, 0xde, - 0x21, 0x41, 0xe5, 0xd8, 0x21, 0x81, 0x06, 0x43, 0xcf, 0x7a, 0xda, 0x21, - 0x41, 0x48, 0x69, 0xab, 0xd9, 0x21, 0x41, 0x44, 0x23, 0x02, 0xd4, 0x21, - 0x01, 0x43, 0x82, 0x0c, 0xd5, 0x21, 0x01, 0xf5, 0xd6, 0x21, 0xc1, 0x00, - 0xec, 0xd7, 0x21, 0x41, 0xe9, 0xcf, 0x21, 0x81, 0x12, 0xb5, 0x01, 0xff, - 0xd3, 0xd1, 0x21, 0x01, 0xec, 0xd2, 0x21, 0xc1, 0x00, 0x4f, 0x20, 0x68, - 0xd3, 0x21, 0x41, 0xee, 0xd0, 0x21, 0x41, 0x47, 0x55, 0x68, 0xcb, 0x21, - 0x01, 0xed, 0xcc, 0x21, 0xc1, 0x00, 0x06, 0xb6, 0x27, 0x01, 0xff, 0x42, - 0x22, 0x00, 0xcd, 0x21, 0x01, 0x42, 0x5b, 0x15, 0xce, 0x21, 0x41, 0xe1, - 0xc8, 0x21, 0x81, 0x06, 0x4b, 0x10, 0x9b, 0xca, 0x21, 0x41, 0xec, 0xc9, - 0x21, 0x41, 0xe1, 0xc4, 0x21, 0x81, 0x11, 0xe9, 0x88, 0x23, 0x01, 0x42, - 0x63, 0x0c, 0xc6, 0x21, 0xc1, 0x00, 0x49, 0x3b, 0xb2, 0xc7, 0x21, 0x41, - 0xf2, 0xc5, 0x21, 0x41, 0x42, 0xe8, 0x01, 0xc0, 0x21, 0x01, 0xe9, 0xc1, - 0x21, 0x41, 0x06, 0xb6, 0x27, 0x0e, 0xec, 0xbd, 0x21, 0x01, 0xee, 0xbe, - 0x21, 0x01, 0x4c, 0x55, 0x93, 0xbf, 0x21, 0x41, 0x4a, 0xe9, 0xa6, 0xba, - 0x21, 0x01, 0x43, 0xca, 0x1d, 0xbb, 0x21, 0x01, 0x43, 0x47, 0x20, 0xbc, - 0x21, 0x41, 0xe1, 0x57, 0x21, 0x81, 0x84, 0x01, 0x44, 0xe0, 0x73, 0x9f, - 0x21, 0x01, 0xe9, 0xa0, 0x21, 0x81, 0x44, 0xf5, 0xaa, 0x21, 0x81, 0x06, - 0x45, 0x35, 0xe9, 0xb6, 0x21, 0x41, 0x69, 0xbf, 0x03, 0xab, 0x21, 0x01, - 0xd3, 0xac, 0x21, 0x01, 0xd4, 0xad, 0x21, 0x81, 0x24, 0xd7, 0xaf, 0x21, - 0x01, 0xec, 0xb0, 0x21, 0x81, 0x15, 0xee, 0xb2, 0x21, 0x01, 0xf2, 0xb3, - 0x21, 0x81, 0x06, 0x44, 0x8a, 0x65, 0xb5, 0x21, 0x41, 0x4d, 0x30, 0x7e, - 0xb4, 0x21, 0x41, 0x45, 0xd6, 0x3e, 0xb1, 0x21, 0x41, 0x4d, 0x4a, 0x7e, - 0xae, 0x21, 0x41, 0x07, 0x27, 0x02, 0x22, 0xe4, 0xa4, 0x21, 0x01, 0xee, - 0xa5, 0x21, 0x01, 0xb3, 0x01, 0xff, 0x42, 0x13, 0x00, 0xa6, 0x21, 0x01, - 0xe8, 0xa7, 0x21, 0x01, 0x43, 0x78, 0x6d, 0xa8, 0x21, 0xc1, 0x00, 0x4c, - 0x95, 0x89, 0xa9, 0x21, 0x41, 0x43, 0x4f, 0x6f, 0xa1, 0x21, 0x01, 0xf5, - 0xa2, 0x21, 0xc1, 0x00, 0xe4, 0xa3, 0x21, 0x41, 0x07, 0x27, 0x02, 0x72, - 0xd2, 0x8d, 0x21, 0x81, 0x67, 0xe2, 0x8f, 0x21, 0x01, 0xa4, 0x4a, 0xeb, - 0x95, 0x21, 0x81, 0x3f, 0xec, 0x97, 0x21, 0x81, 0x26, 0xad, 0x1c, 0x49, - 0x68, 0xbb, 0x6f, 0x23, 0x01, 0x44, 0x1d, 0x02, 0x9c, 0x21, 0xc1, 0x00, - 0x80, 0x01, 0xff, 0x60, 0x22, 0x02, 0x9d, 0x21, 0x01, 0x6c, 0x16, 0x02, - 0x9e, 0x21, 0x41, 0xd2, 0x9a, 0x21, 0x01, 0xd4, 0x9b, 0x21, 0x41, 0x80, - 0x06, 0x42, 0x57, 0x00, 0x27, 0x23, 0x41, 0x4c, 0xe1, 0x8b, 0x99, 0x21, - 0x01, 0x49, 0x07, 0x9b, 0x98, 0x21, 0x41, 0x4f, 0x4d, 0x68, 0x96, 0x21, - 0x41, 0xd2, 0x90, 0x21, 0x01, 0xd3, 0x91, 0x21, 0x01, 0xd4, 0x92, 0x21, - 0x01, 0xd5, 0x93, 0x21, 0xc1, 0x00, 0x4a, 0xb5, 0xa3, 0x94, 0x21, 0x41, - 0x4d, 0xef, 0x7d, 0x8e, 0x21, 0x41, 0xe1, 0x58, 0x21, 0x81, 0xdf, 0x02, - 0xa2, 0xc4, 0x02, 0xa5, 0xb5, 0x02, 0xa7, 0xe8, 0x01, 0x4d, 0xc5, 0x03, - 0x82, 0x23, 0x01, 0xa9, 0xd5, 0x01, 0xab, 0xc0, 0x01, 0xac, 0xb0, 0x01, - 0xad, 0x86, 0x01, 0xae, 0x7a, 0xb0, 0x70, 0x42, 0x3d, 0x00, 0x7d, 0x21, - 0x01, 0xb3, 0x3a, 0xb4, 0x2e, 0xf5, 0x87, 0x21, 0x81, 0x06, 0x42, 0x11, - 0x33, 0x8c, 0x21, 0x41, 0x44, 0x87, 0xe8, 0xd2, 0x24, 0x01, 0xd2, 0x88, - 0x21, 0x01, 0xe4, 0x89, 0x21, 0x01, 0x4c, 0x91, 0x90, 0x8a, 0x21, 0x01, - 0xf2, 0xd3, 0x24, 0x81, 0x06, 0x42, 0xa4, 0x02, 0x8b, 0x21, 0x41, 0xd2, - 0x87, 0x23, 0x41, 0x42, 0x17, 0x00, 0x86, 0x21, 0x01, 0xf5, 0x86, 0x23, - 0x41, 0xe1, 0x7e, 0x21, 0x81, 0x25, 0xa8, 0x0c, 0x42, 0x3f, 0x00, 0x84, - 0x21, 0x01, 0x44, 0x82, 0xef, 0x85, 0x21, 0x41, 0xe1, 0x80, 0x21, 0x01, - 0xe5, 0x81, 0x21, 0x01, 0x42, 0x03, 0x00, 0x82, 0x21, 0x01, 0xf5, 0x83, - 0x21, 0xc1, 0x00, 0xec, 0x85, 0x23, 0x41, 0xf2, 0x7f, 0x21, 0x41, 0xe1, - 0x84, 0x23, 0x01, 0xe9, 0x7c, 0x21, 0x41, 0xe5, 0x7a, 0x21, 0x01, 0x42, - 0xf3, 0x0a, 0x7b, 0x21, 0x41, 0xe5, 0x74, 0x21, 0x81, 0x0b, 0xe9, 0x78, - 0x21, 0xc1, 0x00, 0x4b, 0xb1, 0x95, 0x79, 0x21, 0x41, 0x06, 0xb6, 0x27, - 0x01, 0xff, 0x42, 0x6c, 0x02, 0x75, 0x21, 0x01, 0x42, 0xc6, 0x06, 0x76, - 0x21, 0x01, 0x42, 0x77, 0x00, 0x77, 0x21, 0x41, 0xe9, 0x72, 0x21, 0x01, - 0xf5, 0x73, 0x21, 0xc1, 0x00, 0xed, 0x83, 0x23, 0x41, 0xe1, 0xd1, 0x24, - 0x81, 0x09, 0xe9, 0x70, 0x21, 0xc1, 0x00, 0xe4, 0x71, 0x21, 0x41, 0xeb, - 0x6f, 0x21, 0x41, 0x42, 0xc6, 0x06, 0x6d, 0x21, 0x01, 0xed, 0x6e, 0x21, - 0x41, 0xe1, 0x62, 0x21, 0x81, 0x30, 0xe9, 0x67, 0x21, 0x81, 0x0f, 0xf5, - 0x6b, 0x21, 0xc1, 0x00, 0xe4, 0x81, 0x23, 0x01, 0x42, 0xd0, 0xf1, 0x6c, - 0x21, 0x41, 0x42, 0xc5, 0x41, 0x68, 0x21, 0x01, 0x42, 0xa4, 0x02, 0x80, - 0x23, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4d, 0xbf, 0x50, 0x6a, 0x21, 0x01, - 0x48, 0xf2, 0x55, 0x69, 0x21, 0x41, 0xec, 0x63, 0x21, 0x01, 0x47, 0x13, - 0x5f, 0x64, 0x21, 0x01, 0xf2, 0x65, 0x21, 0xc1, 0x00, 0x51, 0xfa, 0x55, - 0x66, 0x21, 0x41, 0x44, 0x43, 0xad, 0x60, 0x21, 0x01, 0x43, 0xcf, 0x03, - 0x61, 0x21, 0x41, 0xa1, 0x08, 0xe9, 0x5f, 0x21, 0x01, 0xf5, 0xd0, 0x24, - 0x41, 0xe4, 0x5c, 0x21, 0x01, 0x43, 0x22, 0x02, 0x5d, 0x21, 0x01, 0xf2, - 0x5e, 0x21, 0x41, 0xe4, 0x59, 0x21, 0x81, 0x13, 0x44, 0x52, 0xee, 0x7e, - 0x23, 0x01, 0x02, 0xa4, 0x02, 0x01, 0xff, 0xd2, 0x5b, 0x21, 0x01, 0xd3, - 0x7f, 0x23, 0x41, 0x49, 0x44, 0xb2, 0x5a, 0x21, 0x41, 0x42, 0x19, 0x00, - 0x40, 0x21, 0x01, 0xe2, 0x41, 0x21, 0x01, 0x43, 0xfd, 0x7d, 0x42, 0x21, - 0x81, 0x67, 0xe7, 0x45, 0x21, 0x81, 0x42, 0xec, 0x4b, 0x21, 0x81, 0x33, - 0xed, 0x4e, 0x21, 0x81, 0x0e, 0xee, 0x54, 0x21, 0x01, 0xf2, 0x55, 0x21, - 0x01, 0x42, 0xa4, 0x02, 0x56, 0x21, 0x41, 0x80, 0x06, 0x42, 0x9e, 0x01, - 0x53, 0x21, 0x41, 0x4b, 0x66, 0x98, 0x50, 0x21, 0x01, 0x4b, 0xa1, 0x9e, - 0x51, 0x21, 0x01, 0x47, 0xab, 0x05, 0x52, 0x21, 0x01, 0x4a, 0xe9, 0x43, - 0x4f, 0x21, 0x41, 0x50, 0x0a, 0x5f, 0x4c, 0x21, 0x01, 0xd2, 0x4d, 0x21, - 0x41, 0xe9, 0x46, 0x21, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x43, 0xcc, 0xf0, - 0x47, 0x21, 0x01, 0x44, 0xd7, 0x3e, 0x4a, 0x21, 0x01, 0x62, 0x4b, 0x0c, - 0x49, 0x21, 0x01, 0x42, 0x0d, 0x00, 0x48, 0x21, 0x41, 0x0b, 0x9b, 0x95, - 0x01, 0xff, 0x43, 0x37, 0x35, 0x43, 0x21, 0x01, 0x47, 0xab, 0x05, 0x44, - 0x21, 0x41, 0xe1, 0x29, 0x21, 0x81, 0x7e, 0xe9, 0x2d, 0x21, 0x81, 0x3b, - 0xf5, 0x37, 0x21, 0xc1, 0x00, 0x42, 0x8a, 0x5f, 0x38, 0x21, 0x81, 0x0c, - 0x42, 0x20, 0xea, 0x3e, 0x21, 0x01, 0x42, 0xa4, 0x02, 0x7d, 0x23, 0x41, - 0x07, 0x27, 0x02, 0x01, 0xff, 0x42, 0x1a, 0x00, 0x39, 0x21, 0x01, 0x43, - 0x22, 0x00, 0x3a, 0x21, 0x01, 0x46, 0x1b, 0x02, 0x3b, 0x21, 0x01, 0x44, - 0x29, 0x90, 0x3c, 0x21, 0x01, 0x42, 0x63, 0x0c, 0x3d, 0x21, 0x41, 0x07, - 0x27, 0x02, 0x01, 0xff, 0x43, 0xce, 0x03, 0x2e, 0x21, 0x81, 0x28, 0x43, - 0x4f, 0x6f, 0x30, 0x21, 0x01, 0x44, 0x81, 0x0c, 0x31, 0x21, 0x01, 0x43, - 0xbd, 0x1d, 0x32, 0x21, 0x01, 0x43, 0x10, 0x04, 0x33, 0x21, 0x01, 0x43, - 0x54, 0x22, 0x34, 0x21, 0x01, 0x43, 0x63, 0x06, 0x35, 0x21, 0x01, 0xf5, - 0x36, 0x21, 0x41, 0x52, 0xbf, 0x03, 0xcf, 0x24, 0x01, 0xd2, 0x2f, 0x21, - 0x41, 0x80, 0x04, 0xec, 0x2c, 0x21, 0x41, 0x44, 0xd7, 0x3e, 0x2b, 0x21, - 0x01, 0x44, 0x06, 0x5f, 0x2a, 0x21, 0xc1, 0x00, 0x45, 0xd6, 0x3e, 0xce, - 0x24, 0x41, 0xe1, 0xb5, 0x20, 0x81, 0xcc, 0x02, 0xa5, 0xad, 0x02, 0xe9, - 0x00, 0x21, 0x81, 0x87, 0x01, 0xf5, 0x16, 0x21, 0xc1, 0x00, 0x4c, 0x4d, - 0x89, 0x17, 0x21, 0x01, 0xd2, 0x18, 0x21, 0x81, 0x4a, 0xe4, 0x1e, 0x21, - 0x81, 0x25, 0xec, 0x22, 0x21, 0x01, 0xed, 0x23, 0x21, 0x81, 0x16, 0xf2, - 0x25, 0x21, 0xc1, 0x00, 0xd7, 0x26, 0x21, 0x01, 0xb5, 0x01, 0xff, 0xee, - 0x27, 0x21, 0x01, 0x42, 0xa4, 0x02, 0x28, 0x21, 0x41, 0x4a, 0xfb, 0xa3, - 0x24, 0x21, 0x41, 0x80, 0x01, 0xff, 0x4e, 0x86, 0x79, 0x21, 0x21, 0x01, - 0x54, 0xdf, 0x43, 0xcd, 0x24, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0x4a, - 0xf5, 0xa4, 0x1f, 0x21, 0x01, 0x43, 0x9b, 0x5c, 0x20, 0x21, 0x41, 0x80, - 0x01, 0xff, 0x44, 0xd7, 0x3e, 0x1d, 0x21, 0x01, 0x06, 0x28, 0x02, 0x01, - 0xff, 0x48, 0x54, 0x68, 0xcc, 0x24, 0x01, 0x43, 0xe0, 0x5e, 0x19, 0x21, - 0x81, 0x0c, 0x43, 0x54, 0x22, 0x1b, 0x21, 0x01, 0x4d, 0xab, 0x86, 0x1c, - 0x21, 0x41, 0x4f, 0x4d, 0x68, 0x1a, 0x21, 0x41, 0x80, 0x8a, 0x01, 0xd4, - 0x04, 0x21, 0x81, 0x76, 0x43, 0xfd, 0x7d, 0x07, 0x21, 0x01, 0xe7, 0x7c, - 0x23, 0x01, 0xb2, 0x37, 0xb3, 0x01, 0xff, 0x42, 0x13, 0x00, 0x10, 0x21, - 0x01, 0xe8, 0x11, 0x21, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4d, 0xbf, 0x50, - 0x12, 0x21, 0x01, 0xb4, 0x01, 0xff, 0x43, 0x07, 0x5f, 0x15, 0x21, 0x01, - 0x05, 0x29, 0x02, 0x01, 0xff, 0x43, 0x4f, 0x6f, 0x13, 0x21, 0x01, 0x52, - 0xba, 0x50, 0xcb, 0x24, 0x01, 0x44, 0xef, 0x43, 0x14, 0x21, 0x41, 0xd2, - 0x08, 0x21, 0x81, 0x28, 0xd3, 0x0a, 0x21, 0xc1, 0x00, 0x07, 0x27, 0x02, - 0x01, 0xff, 0x4a, 0xeb, 0xa4, 0x0b, 0x21, 0x01, 0x49, 0x11, 0x5f, 0x0c, - 0x21, 0x01, 0x43, 0xc5, 0x06, 0x0d, 0x21, 0x01, 0x4b, 0xff, 0x9c, 0x0e, - 0x21, 0x01, 0x42, 0x6c, 0x09, 0x0f, 0x21, 0x41, 0x45, 0xd6, 0x3e, 0x09, - 0x21, 0x41, 0x80, 0x01, 0xff, 0x4c, 0xd5, 0x8b, 0x06, 0x21, 0x01, 0x48, - 0xea, 0xc6, 0x05, 0x21, 0x41, 0x4b, 0xbf, 0x50, 0x03, 0x21, 0x01, 0x06, - 0x28, 0x02, 0x01, 0xff, 0xe5, 0x01, 0x21, 0x01, 0xf5, 0x02, 0x21, 0x41, - 0x42, 0x21, 0xea, 0x7b, 0x23, 0x01, 0x45, 0xcd, 0xe7, 0xfe, 0x20, 0xc1, - 0x00, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, 0x9b, 0x5c, 0xff, 0x20, 0x01, - 0xf5, 0xca, 0x24, 0x41, 0x45, 0xd6, 0x3e, 0xb6, 0x20, 0x01, 0xd2, 0xb7, - 0x20, 0x81, 0x64, 0x42, 0x16, 0x00, 0xee, 0x20, 0x81, 0x4e, 0xe4, 0xf0, - 0x20, 0x81, 0x43, 0xec, 0xf2, 0x20, 0x81, 0x32, 0xed, 0xf5, 0x20, 0x01, - 0xee, 0xf6, 0x20, 0x81, 0x0f, 0xf2, 0xfb, 0x20, 0x81, 0x06, 0x44, 0x66, - 0x38, 0xfd, 0x20, 0x41, 0xd3, 0xfc, 0x20, 0x41, 0xd2, 0xf7, 0x20, 0xc1, - 0x00, 0x80, 0x01, 0xff, 0x4d, 0x2b, 0x80, 0xfa, 0x20, 0x01, 0x49, 0x44, - 0xbb, 0xf9, 0x20, 0x01, 0x44, 0x06, 0x5f, 0xf8, 0x20, 0x41, 0x5a, 0xbc, - 0x1d, 0xf3, 0x20, 0x01, 0x42, 0x57, 0x00, 0xf4, 0x20, 0x41, 0x56, 0xc0, - 0x1d, 0xf1, 0x20, 0x41, 0x80, 0x01, 0xff, 0x4d, 0x1e, 0x80, 0xef, 0x20, - 0x01, 0x56, 0x03, 0x2c, 0xc9, 0x24, 0x41, 0x80, 0x01, 0xff, 0x48, 0xe2, - 0xc6, 0xed, 0x20, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xa1, 0xb0, 0x03, - 0xa2, 0x8e, 0x03, 0xa4, 0xd9, 0x02, 0xa5, 0xba, 0x02, 0xa7, 0x80, 0x02, - 0xa8, 0xd6, 0x01, 0xa9, 0xc7, 0x01, 0xab, 0x9c, 0x01, 0xac, 0x83, 0x01, - 0xad, 0x71, 0xae, 0x4c, 0x42, 0x6c, 0x09, 0xe2, 0x20, 0x01, 0xb3, 0x1c, - 0x44, 0xef, 0x43, 0xe9, 0x20, 0x01, 0xf5, 0xea, 0x20, 0x81, 0x06, 0x44, - 0x16, 0xf0, 0xc8, 0x24, 0x41, 0xe4, 0xeb, 0x20, 0xc1, 0x00, 0x48, 0xe2, - 0xbf, 0xec, 0x20, 0x41, 0xa1, 0x1e, 0xa8, 0x06, 0x42, 0x1d, 0x04, 0xe8, - 0x20, 0x41, 0xe5, 0xe5, 0x20, 0x81, 0x0b, 0xa9, 0x01, 0xff, 0xe4, 0xe7, - 0x20, 0x01, 0xed, 0xc7, 0x24, 0x41, 0x49, 0x5f, 0xb2, 0xe6, 0x20, 0x41, - 0xec, 0xe3, 0x20, 0x01, 0xf2, 0xe4, 0x20, 0x41, 0xe5, 0xc4, 0x24, 0x81, - 0x0d, 0x42, 0xf3, 0x0a, 0xe0, 0x20, 0xc1, 0x00, 0x49, 0x4e, 0x22, 0xe1, - 0x20, 0x41, 0x06, 0xb6, 0x27, 0x01, 0xff, 0x42, 0x58, 0x99, 0xc5, 0x24, - 0x01, 0x42, 0xc6, 0x06, 0xc6, 0x24, 0x41, 0x49, 0x68, 0xab, 0xde, 0x20, - 0x01, 0xe9, 0xdf, 0x20, 0x01, 0x43, 0xcf, 0x7a, 0xc3, 0x24, 0x41, 0xe1, - 0xdd, 0x20, 0x81, 0x06, 0x42, 0x5e, 0x74, 0xc2, 0x24, 0x41, 0xed, 0xc0, - 0x24, 0xc1, 0x00, 0x4a, 0x94, 0x5c, 0xc1, 0x24, 0x41, 0xa1, 0x1c, 0x42, - 0x03, 0x00, 0xda, 0x20, 0x81, 0x0f, 0xb5, 0x01, 0xff, 0x49, 0x01, 0xb3, - 0xdc, 0x20, 0x01, 0x50, 0x8a, 0x65, 0xbf, 0x24, 0x41, 0x49, 0x4d, 0xb2, - 0xdb, 0x20, 0x41, 0xeb, 0xd8, 0x20, 0x01, 0x44, 0x1d, 0x02, 0xd9, 0x20, - 0x41, 0x47, 0x55, 0x68, 0xd6, 0x20, 0x01, 0x53, 0xc5, 0x4b, 0xd7, 0x20, - 0x41, 0xa1, 0x0c, 0x49, 0x78, 0xb7, 0xd4, 0x20, 0x01, 0x43, 0x1f, 0xed, - 0xd5, 0x20, 0x41, 0x06, 0xb6, 0x27, 0x0b, 0xec, 0xd2, 0x20, 0xc1, 0x00, - 0x48, 0x4d, 0xb2, 0xd3, 0x20, 0x41, 0xe1, 0xbe, 0x24, 0x01, 0x4c, 0xd1, - 0x8f, 0xd1, 0x20, 0x41, 0xe1, 0xbb, 0x24, 0x81, 0x16, 0xe9, 0xcd, 0x20, - 0xc1, 0x00, 0xd4, 0xce, 0x20, 0x81, 0x06, 0x4a, 0x8d, 0xad, 0xd0, 0x20, - 0x41, 0x47, 0xb6, 0x27, 0xcf, 0x20, 0x41, 0x47, 0x13, 0x5f, 0xcb, 0x20, - 0x01, 0xf2, 0xcc, 0x20, 0xc1, 0x00, 0x06, 0xb6, 0x27, 0x01, 0xff, 0x42, - 0x00, 0x00, 0xbc, 0x24, 0x01, 0x42, 0xa2, 0x05, 0xbd, 0x24, 0x41, 0xec, - 0xc7, 0x20, 0x81, 0x11, 0xee, 0xc9, 0x20, 0x81, 0x06, 0x43, 0x52, 0x21, - 0xba, 0x24, 0x41, 0x50, 0x0a, 0x5f, 0xca, 0x20, 0x41, 0x48, 0x4d, 0xb2, - 0xc8, 0x20, 0x41, 0xe1, 0xc3, 0x20, 0x01, 0xe9, 0xc4, 0x20, 0x81, 0x18, - 0xb5, 0x01, 0xff, 0xe2, 0xc6, 0x20, 0x01, 0x08, 0xc0, 0x7a, 0x01, 0xff, - 0x48, 0x54, 0x68, 0xb8, 0x24, 0x01, 0x46, 0x1b, 0x02, 0xb9, 0x24, 0x41, - 0x02, 0x1e, 0x04, 0x01, 0xff, 0x44, 0xd7, 0x3e, 0xb7, 0x24, 0x01, 0x49, - 0xfc, 0xa3, 0xc5, 0x20, 0x41, 0xa1, 0x0d, 0x42, 0x42, 0x00, 0xc1, 0x20, - 0xc1, 0x00, 0x48, 0xf9, 0xbb, 0xc2, 0x20, 0x41, 0xe4, 0xbf, 0x20, 0x01, - 0x44, 0xc3, 0x41, 0xb6, 0x24, 0x01, 0x49, 0xf8, 0xbb, 0xc0, 0x20, 0x41, - 0x06, 0xb6, 0x27, 0x23, 0x50, 0x8a, 0x5f, 0xbb, 0x20, 0x01, 0xee, 0xbc, - 0x20, 0x81, 0x12, 0x42, 0xa4, 0x02, 0xbd, 0x20, 0xc1, 0x00, 0xd2, 0x7a, - 0x23, 0xc1, 0x00, 0x49, 0x32, 0xb2, 0xbe, 0x20, 0x41, 0x50, 0xda, 0x5e, - 0x79, 0x23, 0x41, 0x4a, 0xe9, 0xa6, 0xb8, 0x20, 0x01, 0x42, 0x22, 0x00, - 0xb9, 0x20, 0x01, 0x43, 0xc5, 0x06, 0xba, 0x20, 0x41, 0x80, 0xe7, 0x02, - 0xd2, 0x8d, 0x20, 0x81, 0xac, 0x02, 0x43, 0xd9, 0x05, 0x94, 0x20, 0x01, - 0x43, 0x7a, 0xe4, 0x95, 0x20, 0x01, 0xec, 0x96, 0x20, 0x01, 0xee, 0x97, - 0x20, 0x81, 0xe9, 0x01, 0xb2, 0xd3, 0x01, 0x43, 0xcf, 0x03, 0xa0, 0x20, - 0x81, 0xc5, 0x01, 0x43, 0xfc, 0x09, 0xa1, 0x20, 0xc1, 0x00, 0x80, 0x01, - 0xff, 0x0e, 0xba, 0x7a, 0x88, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, - 0xa2, 0x20, 0x81, 0x6d, 0x43, 0x4f, 0x6f, 0xa6, 0x20, 0x01, 0x49, 0xb2, - 0x75, 0xa7, 0x20, 0x81, 0x5a, 0x43, 0x8b, 0x79, 0x77, 0x23, 0x01, 0x42, - 0x22, 0x00, 0xa9, 0x20, 0x81, 0x47, 0x48, 0x54, 0x68, 0xab, 0x20, 0x01, - 0xab, 0x2c, 0xac, 0x17, 0xb3, 0x0b, 0xb5, 0x01, 0xff, 0xd2, 0xb3, 0x20, - 0x01, 0xe4, 0xb4, 0x20, 0x41, 0x42, 0xb0, 0x01, 0x78, 0x23, 0x01, 0xf5, - 0xb5, 0x24, 0x41, 0xe1, 0xaf, 0x20, 0x81, 0x08, 0xe9, 0xb1, 0x20, 0x01, - 0xf5, 0xb2, 0x20, 0x41, 0x4b, 0x02, 0x9c, 0xb0, 0x20, 0x41, 0x45, 0x1c, - 0x02, 0xac, 0x20, 0x81, 0x06, 0x42, 0xbf, 0x3c, 0xae, 0x20, 0x41, 0x48, - 0xaa, 0x05, 0xad, 0x20, 0x41, 0x45, 0xd6, 0x3e, 0xaa, 0x20, 0x41, 0x45, - 0xd6, 0x3e, 0xa8, 0x20, 0x41, 0x49, 0x4d, 0xb2, 0xa3, 0x20, 0x81, 0x04, - 0xee, 0xa5, 0x20, 0x41, 0x4a, 0x03, 0x9c, 0xa4, 0x20, 0x41, 0x43, 0xce, - 0x03, 0xad, 0x24, 0x01, 0x42, 0x49, 0x00, 0xae, 0x24, 0x01, 0x48, 0x54, - 0x68, 0xaf, 0x24, 0x01, 0x42, 0x74, 0x00, 0xb0, 0x24, 0x81, 0x11, 0x42, - 0x2a, 0x02, 0xb2, 0x24, 0x81, 0x06, 0x42, 0x6f, 0x00, 0xb4, 0x24, 0x41, - 0xf3, 0xb3, 0x24, 0x41, 0xec, 0xb1, 0x24, 0x41, 0x4e, 0xd6, 0x73, 0xac, - 0x24, 0x41, 0x42, 0x92, 0x01, 0x9e, 0x20, 0x01, 0x43, 0x44, 0xad, 0x9f, - 0x20, 0xc1, 0x00, 0x42, 0xaf, 0x62, 0xab, 0x24, 0x41, 0x80, 0x01, 0xff, - 0x4b, 0x5b, 0x98, 0x9b, 0x20, 0x01, 0x4b, 0x96, 0x9e, 0x9c, 0x20, 0x01, - 0x47, 0xab, 0x05, 0x9d, 0x20, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0x44, - 0x11, 0x5f, 0x98, 0x20, 0x81, 0x06, 0x42, 0x2a, 0x02, 0x9a, 0x20, 0x41, - 0x45, 0x05, 0x5f, 0x99, 0x20, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x51, - 0x82, 0x56, 0x8e, 0x20, 0x01, 0x43, 0xca, 0x1d, 0x8f, 0x20, 0x01, 0x43, - 0x9b, 0x5c, 0xa9, 0x24, 0x01, 0x42, 0x7d, 0x02, 0x90, 0x20, 0x01, 0x43, - 0xa0, 0x0e, 0xaa, 0x24, 0x01, 0xb3, 0x04, 0xf5, 0x93, 0x20, 0x41, 0x42, - 0x13, 0x00, 0x91, 0x20, 0x01, 0x42, 0xb0, 0x01, 0x92, 0x20, 0x41, 0x53, - 0xa8, 0x4a, 0x8c, 0x20, 0x01, 0x49, 0x57, 0xbd, 0x8b, 0x20, 0x41, 0xe1, - 0x55, 0x20, 0x81, 0xe6, 0x02, 0xe9, 0x72, 0x20, 0x81, 0x9e, 0x02, 0xf5, - 0x7a, 0x20, 0xc1, 0x00, 0x80, 0x84, 0x02, 0xe2, 0x7e, 0x20, 0x81, 0xea, - 0x01, 0xe7, 0x81, 0x20, 0x81, 0x25, 0xe8, 0x83, 0x20, 0x01, 0xee, 0x84, - 0x20, 0x81, 0x06, 0x42, 0xc5, 0x41, 0x89, 0x20, 0x41, 0xd3, 0x85, 0x20, - 0x81, 0x04, 0xd4, 0x88, 0x20, 0x41, 0x45, 0xd6, 0x3e, 0x86, 0x20, 0xc1, - 0x00, 0x45, 0xd6, 0x3e, 0x87, 0x20, 0x41, 0x07, 0x27, 0x02, 0x06, 0x42, - 0x63, 0x0c, 0x82, 0x20, 0x41, 0xa1, 0xa0, 0x01, 0xa4, 0x91, 0x01, 0x45, - 0x42, 0xad, 0x92, 0x24, 0x01, 0xa7, 0x74, 0xa8, 0x6a, 0x48, 0x54, 0x68, - 0x99, 0x24, 0x01, 0xab, 0x48, 0xac, 0x2d, 0xad, 0x1b, 0x42, 0x26, 0x03, - 0xa5, 0x24, 0x01, 0x42, 0xbb, 0x05, 0xa6, 0x24, 0x01, 0xb3, 0x01, 0xff, - 0x42, 0xb0, 0x01, 0xa7, 0x24, 0x01, 0x46, 0x56, 0x68, 0xa8, 0x24, 0x41, - 0x43, 0xce, 0x03, 0xa2, 0x24, 0x01, 0x42, 0xed, 0x00, 0xa3, 0x24, 0x01, - 0xe9, 0xa4, 0x24, 0x41, 0xa1, 0x06, 0x4c, 0x5d, 0x94, 0xa1, 0x24, 0x41, - 0x45, 0xa8, 0xe4, 0x9e, 0x24, 0x01, 0xed, 0x9f, 0x24, 0xc1, 0x00, 0x4a, - 0x94, 0x5c, 0xa0, 0x24, 0x41, 0x45, 0x1c, 0x02, 0x9a, 0x24, 0x01, 0xb5, - 0x01, 0xff, 0xf2, 0x9b, 0x24, 0x01, 0x44, 0x8a, 0x65, 0x9c, 0x24, 0xc1, - 0x00, 0x4c, 0x8e, 0x65, 0x9d, 0x24, 0x41, 0xe1, 0x97, 0x24, 0x01, 0xe9, - 0x98, 0x24, 0x41, 0xe1, 0x93, 0x24, 0x01, 0xe9, 0x94, 0x24, 0xc1, 0x00, - 0x47, 0x3a, 0xd2, 0x95, 0x24, 0x01, 0x42, 0xa4, 0x02, 0x96, 0x24, 0x41, - 0x42, 0x9e, 0x01, 0x90, 0x24, 0x01, 0x42, 0xf3, 0x0a, 0x91, 0x24, 0x41, - 0x44, 0x52, 0xee, 0x8d, 0x24, 0x01, 0x42, 0xa4, 0x02, 0x8e, 0x24, 0xc1, - 0x00, 0x48, 0x8a, 0x16, 0x8f, 0x24, 0x41, 0x07, 0x27, 0x02, 0x04, 0xd2, - 0x80, 0x20, 0x41, 0x44, 0xe0, 0x73, 0x7f, 0x20, 0x01, 0x43, 0x63, 0x06, - 0x76, 0x23, 0x41, 0x44, 0xd7, 0x3e, 0x7c, 0x20, 0x01, 0x47, 0x76, 0xd1, - 0x7b, 0x20, 0x01, 0x47, 0xba, 0x7a, 0x7d, 0x20, 0x41, 0xe2, 0x73, 0x20, - 0x01, 0xed, 0x74, 0x20, 0x81, 0x18, 0xee, 0x77, 0x20, 0x81, 0x0d, 0x42, - 0xa4, 0x02, 0x79, 0x20, 0xc1, 0x00, 0x49, 0xbf, 0xa3, 0x75, 0x23, 0x41, - 0x53, 0x47, 0x46, 0x78, 0x20, 0x41, 0x07, 0x27, 0x02, 0x0b, 0xd2, 0x76, - 0x20, 0xc1, 0x00, 0x49, 0x9e, 0xb2, 0x8c, 0x24, 0x41, 0x43, 0xc5, 0x06, - 0x8a, 0x24, 0x01, 0x43, 0x63, 0x06, 0x75, 0x20, 0x01, 0x45, 0x86, 0xe8, - 0x8b, 0x24, 0x41, 0x4b, 0xe8, 0x43, 0x88, 0x24, 0x01, 0xe7, 0x56, 0x20, - 0x81, 0x14, 0xed, 0x6e, 0x20, 0x01, 0xf2, 0x6f, 0x20, 0xc1, 0x00, 0xa1, - 0x01, 0xff, 0xd3, 0x70, 0x20, 0x01, 0xd4, 0x71, 0x20, 0x41, 0x80, 0x04, - 0xd3, 0x74, 0x23, 0x41, 0x0d, 0x75, 0x6d, 0x06, 0x49, 0x95, 0x5c, 0x89, - 0x24, 0x41, 0xa1, 0x89, 0x01, 0xa2, 0x7d, 0xa7, 0x5f, 0x42, 0x22, 0x00, - 0x60, 0x20, 0x01, 0x42, 0x46, 0x00, 0x61, 0x20, 0x81, 0x4c, 0x43, 0xe0, - 0x5e, 0x63, 0x20, 0x01, 0xac, 0x31, 0x42, 0xa2, 0x05, 0x68, 0x20, 0x01, - 0x4c, 0xac, 0x3c, 0x69, 0x20, 0x01, 0x42, 0x2f, 0x03, 0x6a, 0x20, 0x01, - 0x44, 0xef, 0x43, 0x6b, 0x20, 0x01, 0xb5, 0x01, 0xff, 0x07, 0x8d, 0x65, - 0x06, 0x42, 0xa4, 0x02, 0x6d, 0x20, 0x41, 0x44, 0xc6, 0xec, 0x6c, 0x20, - 0x01, 0x44, 0x61, 0x06, 0x73, 0x23, 0x41, 0xe1, 0x64, 0x20, 0x01, 0xf5, - 0x65, 0x20, 0xc1, 0x00, 0x4b, 0xa6, 0x95, 0x66, 0x20, 0x01, 0xed, 0x67, - 0x20, 0x41, 0x48, 0xb8, 0x3c, 0x62, 0x20, 0x41, 0xe1, 0x5b, 0x20, 0x81, - 0x11, 0xe9, 0x5d, 0x20, 0x81, 0x06, 0x42, 0x63, 0x0c, 0x5f, 0x20, 0x41, - 0x42, 0xc5, 0x41, 0x5e, 0x20, 0x41, 0x4a, 0xa6, 0x95, 0x5c, 0x20, 0x41, - 0x44, 0x8e, 0xe1, 0x59, 0x20, 0x01, 0xe9, 0x5a, 0x20, 0x41, 0x4a, 0xa6, - 0x95, 0x57, 0x20, 0x01, 0x43, 0xb9, 0x00, 0x58, 0x20, 0x41, 0xe1, 0x40, - 0x20, 0x81, 0x54, 0xe9, 0x49, 0x20, 0x81, 0x3a, 0xf5, 0x4d, 0x20, 0xc1, - 0x00, 0x80, 0x16, 0x43, 0x8f, 0x79, 0x51, 0x20, 0x81, 0x09, 0xf2, 0x53, - 0x20, 0xc1, 0x00, 0xd2, 0x54, 0x20, 0x41, 0x4b, 0x90, 0x95, 0x52, 0x20, - 0x41, 0x4b, 0x50, 0x98, 0x50, 0x20, 0x01, 0x08, 0xda, 0xc6, 0x01, 0xff, - 0x42, 0x5c, 0x00, 0x4e, 0x20, 0x01, 0x49, 0x4e, 0xbd, 0x87, 0x24, 0x01, - 0x42, 0xf3, 0x0a, 0x4f, 0x20, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0xe1, - 0x4a, 0x20, 0x01, 0x43, 0xca, 0x1d, 0x4b, 0x20, 0x01, 0x48, 0x54, 0x68, - 0x4c, 0x20, 0x41, 0xe4, 0x41, 0x20, 0x81, 0x40, 0x42, 0xca, 0xf1, 0x42, - 0x20, 0x01, 0x44, 0xc3, 0x41, 0x43, 0x20, 0x81, 0x1c, 0xec, 0x44, 0x20, - 0x81, 0x0b, 0xf2, 0x47, 0x20, 0xc1, 0x00, 0x42, 0xfa, 0x7d, 0x48, 0x20, - 0x41, 0x49, 0x20, 0xb2, 0x45, 0x20, 0x01, 0x42, 0x23, 0x02, 0x46, 0x20, - 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, 0x09, 0xa5, 0x84, 0x24, 0x01, - 0x42, 0x26, 0x03, 0x85, 0x24, 0x01, 0x42, 0x59, 0x00, 0x86, 0x24, 0x41, - 0x50, 0xfa, 0x5e, 0x83, 0x24, 0x41, 0x07, 0x27, 0x02, 0x9d, 0x03, 0xd2, - 0x09, 0x20, 0x01, 0xe2, 0x0a, 0x20, 0x81, 0x83, 0x02, 0xe4, 0x1c, 0x20, - 0x81, 0xf7, 0x01, 0xeb, 0x1d, 0x20, 0x81, 0xe0, 0x01, 0xec, 0x20, 0x20, - 0x81, 0x9a, 0x01, 0x43, 0xb9, 0x00, 0x2b, 0x20, 0x81, 0x81, 0x01, 0xee, - 0x2d, 0x20, 0x81, 0x58, 0x43, 0xd9, 0x12, 0x33, 0x20, 0x01, 0xb2, 0x3d, - 0xb3, 0x01, 0xff, 0x43, 0x96, 0xf0, 0x37, 0x20, 0x01, 0xe8, 0x38, 0x20, - 0xc1, 0x00, 0x80, 0x0a, 0xd2, 0x3e, 0x20, 0x01, 0x43, 0x24, 0x02, 0x3f, - 0x20, 0x41, 0x49, 0x98, 0xa3, 0x3a, 0x20, 0x01, 0x09, 0x53, 0x10, 0x06, - 0x49, 0x58, 0x93, 0x39, 0x20, 0x41, 0x48, 0x53, 0x10, 0x3c, 0x20, 0x81, - 0x06, 0x61, 0x82, 0x0e, 0x3b, 0x20, 0x41, 0x5f, 0x45, 0x10, 0x3d, 0x20, - 0x41, 0x42, 0xe8, 0x01, 0x34, 0x20, 0x81, 0x06, 0x43, 0xf4, 0x9b, 0x36, - 0x20, 0x41, 0x4a, 0x94, 0x5c, 0x35, 0x20, 0x41, 0x80, 0x06, 0x43, 0x63, - 0x06, 0x32, 0x20, 0x41, 0x47, 0x6f, 0xd1, 0x2e, 0x20, 0x01, 0x0a, 0x47, - 0xad, 0x06, 0x4b, 0x4b, 0xa1, 0x2f, 0x20, 0x41, 0x55, 0x97, 0x3c, 0x30, - 0x20, 0x01, 0x47, 0xab, 0x05, 0x31, 0x20, 0x41, 0x07, 0x27, 0x02, 0x01, - 0xff, 0x43, 0x1d, 0xf1, 0x72, 0x23, 0x01, 0x43, 0x63, 0x06, 0x2c, 0x20, - 0x41, 0x07, 0x27, 0x02, 0x0c, 0x42, 0x1a, 0x00, 0x29, 0x20, 0x01, 0x43, - 0x49, 0x3c, 0x2a, 0x20, 0x41, 0x42, 0x13, 0x00, 0x21, 0x20, 0x01, 0x44, - 0x56, 0xec, 0x22, 0x20, 0x01, 0x44, 0xe4, 0x43, 0x23, 0x20, 0x01, 0x42, - 0x22, 0x00, 0x24, 0x20, 0x01, 0xab, 0x0c, 0x43, 0x63, 0x06, 0x27, 0x20, - 0x01, 0x43, 0xcf, 0x7a, 0x28, 0x20, 0x41, 0x43, 0x83, 0xed, 0x25, 0x20, - 0x01, 0xe9, 0x26, 0x20, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x45, 0x42, - 0xad, 0x1e, 0x20, 0x01, 0x4f, 0x71, 0x71, 0x1f, 0x20, 0x41, 0x4b, 0xe8, - 0x95, 0x82, 0x24, 0x41, 0x80, 0x2c, 0xd2, 0x16, 0x20, 0xc1, 0x00, 0x07, - 0x27, 0x02, 0x01, 0xff, 0xe1, 0x71, 0x23, 0x01, 0x45, 0x8d, 0xe1, 0x17, - 0x20, 0x01, 0x49, 0x11, 0x5f, 0x18, 0x20, 0x01, 0x4a, 0x67, 0xab, 0x19, - 0x20, 0x01, 0x44, 0x00, 0x56, 0x1a, 0x20, 0x01, 0x44, 0xef, 0x43, 0x1b, - 0x20, 0x41, 0x44, 0xd7, 0x3e, 0x15, 0x20, 0x01, 0x06, 0x28, 0x02, 0x01, - 0xff, 0x44, 0xce, 0x03, 0x0b, 0x20, 0x01, 0x49, 0xb2, 0x75, 0x0c, 0x20, - 0x01, 0x02, 0x24, 0x02, 0x3d, 0x42, 0x22, 0x00, 0x0f, 0x20, 0x01, 0xa9, - 0x29, 0x45, 0x22, 0x02, 0x12, 0x20, 0x01, 0x43, 0x54, 0x22, 0x70, 0x23, - 0x81, 0x16, 0x02, 0xa4, 0x02, 0x06, 0x4f, 0x8e, 0x72, 0x14, 0x20, 0x41, - 0x43, 0x28, 0x59, 0x13, 0x20, 0x01, 0x42, 0x8c, 0x65, 0x81, 0x24, 0x41, - 0x45, 0x05, 0x5f, 0x80, 0x24, 0x41, 0x47, 0x55, 0x68, 0x10, 0x20, 0x01, - 0x43, 0x7c, 0x13, 0x11, 0x20, 0x41, 0xec, 0x0d, 0x20, 0x01, 0x47, 0x13, - 0x5f, 0x0e, 0x20, 0x41, 0xe1, 0x01, 0x20, 0x01, 0x43, 0x4f, 0x6f, 0x02, - 0x20, 0x01, 0x49, 0x11, 0x5f, 0x03, 0x20, 0x01, 0x42, 0x22, 0x00, 0x04, - 0x20, 0x01, 0x43, 0xc5, 0x06, 0x05, 0x20, 0x01, 0x4a, 0xd1, 0x3e, 0x06, - 0x20, 0x01, 0x44, 0x41, 0x80, 0x07, 0x20, 0x01, 0x43, 0x21, 0x87, 0x08, - 0x20, 0x41, 0x09, 0x42, 0x25, 0x0c, 0x59, 0xa6, 0x24, 0x70, 0x24, 0x01, - 0x4e, 0xf8, 0x7c, 0x71, 0x24, 0x41, 0x45, 0xc4, 0x3a, 0x72, 0x24, 0x01, - 0x49, 0xd4, 0xbb, 0x74, 0x24, 0x01, 0x48, 0x0a, 0xc9, 0x73, 0x24, 0x41, - 0xa5, 0xb5, 0x05, 0xa6, 0xf6, 0x03, 0x02, 0x26, 0x03, 0xa4, 0x03, 0xaf, - 0xb7, 0x02, 0xb3, 0xb5, 0x01, 0xb4, 0x01, 0xff, 0x05, 0x25, 0x01, 0x4f, - 0x03, 0xd1, 0x09, 0x01, 0xff, 0x43, 0xce, 0x03, 0x00, 0x24, 0x81, 0x3d, - 0xa2, 0x2f, 0x45, 0x13, 0xe3, 0x59, 0x24, 0x01, 0x04, 0x4d, 0x6a, 0x1d, - 0x04, 0xa5, 0xae, 0x11, 0x07, 0x63, 0x73, 0x01, 0xff, 0x44, 0x81, 0x0c, - 0x5b, 0x24, 0x01, 0x4e, 0x8c, 0x5d, 0x5e, 0x24, 0x41, 0xd2, 0x23, 0x24, - 0x01, 0xf5, 0x2d, 0x24, 0x41, 0xd2, 0x16, 0x24, 0x01, 0xf5, 0x1f, 0x24, - 0x41, 0x43, 0x12, 0x5f, 0x50, 0x24, 0x01, 0x43, 0x7d, 0xa8, 0x35, 0x24, - 0x41, 0x45, 0x05, 0x5f, 0x4a, 0x24, 0x41, 0x43, 0xce, 0x03, 0x01, 0x24, - 0x81, 0x52, 0xa2, 0x3d, 0x44, 0x81, 0x0c, 0x08, 0x24, 0x01, 0x04, 0x4d, - 0x6a, 0x2b, 0x04, 0xa5, 0xae, 0x11, 0x10, 0xda, 0x66, 0x01, 0xff, 0x42, - 0x9e, 0xf1, 0x3a, 0x24, 0x01, 0x42, 0xa9, 0xd5, 0x3b, 0x24, 0x41, 0xd2, - 0x24, 0x24, 0x81, 0x0b, 0xf5, 0x2e, 0x24, 0xc1, 0x00, 0x4d, 0x4a, 0x7e, - 0x2f, 0x24, 0x41, 0x4d, 0x4a, 0x7e, 0x25, 0x24, 0x41, 0xd2, 0x17, 0x24, - 0x01, 0xf5, 0x20, 0x24, 0x41, 0x43, 0x12, 0x5f, 0x51, 0x24, 0x01, 0x43, - 0x7d, 0xa8, 0x36, 0x24, 0xc1, 0x00, 0x4d, 0x4a, 0x7e, 0x37, 0x24, 0x41, - 0x45, 0x05, 0x5f, 0x4b, 0x24, 0x41, 0x05, 0xe8, 0x21, 0x45, 0x14, 0xc3, - 0x41, 0x35, 0x03, 0xb6, 0x51, 0x01, 0xff, 0x43, 0xce, 0x03, 0x04, 0x24, - 0x81, 0x23, 0x44, 0x81, 0x0c, 0x0b, 0x24, 0x01, 0x45, 0x8b, 0xe3, 0x1a, - 0x24, 0x01, 0x45, 0xb4, 0xe7, 0x28, 0x24, 0x01, 0xf5, 0x11, 0x24, 0x81, - 0x06, 0x51, 0x8c, 0x5d, 0x40, 0x24, 0x41, 0x4d, 0x4a, 0x7e, 0x6b, 0x24, - 0x41, 0x45, 0x05, 0x5f, 0x4e, 0x24, 0x41, 0x44, 0x81, 0x0c, 0x32, 0x24, - 0x01, 0x43, 0x7c, 0x13, 0x33, 0x24, 0x41, 0x43, 0xce, 0x03, 0x05, 0x24, - 0x01, 0x44, 0x81, 0x0c, 0x0c, 0x24, 0x01, 0x45, 0x8b, 0xe3, 0x1b, 0x24, - 0x01, 0x45, 0xb4, 0xe7, 0x29, 0x24, 0x01, 0xf5, 0x12, 0x24, 0x81, 0x13, - 0x11, 0x9d, 0x5d, 0x01, 0xff, 0x80, 0x04, 0xd3, 0x41, 0x24, 0x41, 0xe1, - 0x42, 0x24, 0x01, 0xe2, 0x43, 0x24, 0x41, 0x4d, 0x4a, 0x7e, 0x6c, 0x24, - 0x41, 0x10, 0xea, 0x62, 0x5a, 0x03, 0xc4, 0x07, 0x01, 0xff, 0xa2, 0x47, - 0xa5, 0x39, 0x04, 0x4d, 0x6a, 0x2d, 0x48, 0x02, 0xc4, 0x64, 0x24, 0x01, - 0x08, 0xd9, 0x02, 0x17, 0x45, 0xbe, 0xe7, 0x2c, 0x24, 0x01, 0x06, 0x6e, - 0x87, 0x01, 0xff, 0x44, 0x81, 0x0c, 0x5a, 0x24, 0x01, 0x4e, 0x8c, 0x5d, - 0x5d, 0x24, 0x41, 0x43, 0xce, 0x03, 0x60, 0x24, 0x01, 0x43, 0xb1, 0x93, - 0x63, 0x24, 0x41, 0xd2, 0x15, 0x24, 0x01, 0xf5, 0x1e, 0x24, 0x41, 0x49, - 0xb7, 0xb7, 0x5f, 0x24, 0x01, 0x44, 0x14, 0xe3, 0x58, 0x24, 0x41, 0x43, - 0x12, 0x5f, 0x4f, 0x24, 0x01, 0x43, 0x7d, 0xa8, 0x34, 0x24, 0x41, 0x47, - 0x2a, 0x01, 0x62, 0x24, 0x01, 0x45, 0xdc, 0xdc, 0x61, 0x24, 0x41, 0x04, - 0xbe, 0xec, 0x3d, 0x03, 0xc4, 0x07, 0x01, 0xff, 0x43, 0xce, 0x03, 0x07, - 0x24, 0x01, 0x44, 0x81, 0x0c, 0x0e, 0x24, 0x01, 0x45, 0x8b, 0xe3, 0x1d, - 0x24, 0x01, 0x45, 0xb4, 0xe7, 0x2b, 0x24, 0x01, 0xf5, 0x14, 0x24, 0x81, - 0x15, 0x53, 0x1b, 0x4d, 0x46, 0x24, 0xc1, 0x00, 0x42, 0x19, 0x00, 0x49, - 0x24, 0x01, 0xd3, 0x47, 0x24, 0x01, 0xd4, 0x48, 0x24, 0x41, 0x4d, 0x4a, - 0x7e, 0x6e, 0x24, 0x41, 0x43, 0x28, 0x59, 0x57, 0x24, 0x01, 0x43, 0x7c, - 0x13, 0x56, 0x24, 0x41, 0x04, 0xa7, 0x05, 0x65, 0x04, 0xcb, 0x06, 0x01, - 0xff, 0x43, 0xce, 0x03, 0x02, 0x24, 0x81, 0x53, 0xa2, 0x3e, 0x44, 0x81, - 0x0c, 0x09, 0x24, 0x01, 0x04, 0x4d, 0x6a, 0x2c, 0x04, 0xa5, 0xae, 0x20, - 0xf5, 0x0f, 0x24, 0x81, 0x15, 0x52, 0x16, 0x55, 0x3c, 0x24, 0xc1, 0x00, - 0x80, 0x04, 0xd4, 0x3d, 0x24, 0x41, 0xe1, 0x3e, 0x24, 0x01, 0xe2, 0x3f, - 0x24, 0x41, 0x4d, 0x4a, 0x7e, 0x69, 0x24, 0x41, 0xd2, 0x26, 0x24, 0x01, - 0xf5, 0x30, 0x24, 0x41, 0xd2, 0x18, 0x24, 0x01, 0xf5, 0x21, 0x24, 0x41, - 0x43, 0x12, 0x5f, 0x52, 0x24, 0x81, 0x06, 0x43, 0x7d, 0xa8, 0x38, 0x24, - 0x41, 0x4d, 0x4a, 0x7e, 0x53, 0x24, 0x41, 0x45, 0x05, 0x5f, 0x4c, 0x24, - 0x41, 0x43, 0xce, 0x03, 0x03, 0x24, 0x81, 0x46, 0xa2, 0x31, 0x44, 0x81, - 0x0c, 0x0a, 0x24, 0x01, 0x04, 0x4d, 0x6a, 0x1f, 0xb3, 0x0b, 0xf5, 0x10, - 0x24, 0xc1, 0x00, 0x4d, 0x4a, 0x7e, 0x6a, 0x24, 0x41, 0x03, 0x65, 0x05, - 0x06, 0x4a, 0xe1, 0xa9, 0x5c, 0x24, 0x41, 0xd2, 0x27, 0x24, 0x01, 0xf5, - 0x31, 0x24, 0x41, 0xd2, 0x19, 0x24, 0x01, 0xf5, 0x22, 0x24, 0x41, 0x43, - 0x12, 0x5f, 0x54, 0x24, 0x81, 0x06, 0x43, 0x7d, 0xa8, 0x39, 0x24, 0x41, - 0x4d, 0x4a, 0x7e, 0x55, 0x24, 0x41, 0x45, 0x05, 0x5f, 0x4d, 0x24, 0x41, - 0x05, 0xc9, 0x00, 0x1f, 0x07, 0xd9, 0xcf, 0x01, 0xff, 0xa6, 0x0c, 0x49, - 0xc6, 0xba, 0x65, 0x24, 0x01, 0x4a, 0x03, 0xb0, 0x66, 0x24, 0x41, 0x44, - 0x08, 0x4c, 0x68, 0x24, 0x01, 0x44, 0x85, 0x50, 0x67, 0x24, 0x41, 0x43, - 0xce, 0x03, 0x06, 0x24, 0x01, 0x44, 0x81, 0x0c, 0x0d, 0x24, 0x01, 0x45, - 0x8b, 0xe3, 0x1c, 0x24, 0x01, 0x45, 0xb4, 0xe7, 0x2a, 0x24, 0x01, 0xf5, - 0x13, 0x24, 0x81, 0x0b, 0x51, 0xae, 0x5d, 0x44, 0x24, 0xc1, 0x00, 0xd3, - 0x45, 0x24, 0x41, 0x4d, 0x4a, 0x7e, 0x6d, 0x24, 0x41, 0x42, 0x5c, 0x00, - 0x80, 0xf9, 0x01, 0xa5, 0xa1, 0x01, 0x45, 0x88, 0x77, 0x97, 0xf9, 0x81, - 0x93, 0x01, 0xaf, 0x27, 0xb5, 0x19, 0xb9, 0x01, 0xff, 0x04, 0xa1, 0x01, - 0x06, 0x49, 0xf4, 0xbc, 0x2e, 0xf5, 0x41, 0x48, 0xc0, 0x1e, 0x3f, 0xf6, - 0x01, 0x44, 0xe1, 0x07, 0x22, 0xf6, 0x41, 0x43, 0x0e, 0x21, 0x7c, 0xfa, - 0x01, 0x4a, 0xb1, 0xb1, 0xa2, 0x20, 0x40, 0x46, 0xcc, 0xd7, 0x0a, 0xf4, - 0x01, 0x46, 0x24, 0xda, 0x50, 0xf9, 0x01, 0x02, 0xee, 0x00, 0x06, 0x42, - 0xa7, 0x01, 0x51, 0xf4, 0x41, 0x80, 0x1c, 0x03, 0x05, 0x00, 0x06, 0x49, - 0x23, 0xb8, 0xcc, 0x26, 0x40, 0x45, 0x54, 0xe3, 0x8c, 0xf3, 0x01, 0x67, - 0xa2, 0x05, 0x8a, 0xf1, 0x01, 0x46, 0x36, 0xdd, 0x94, 0x26, 0x40, 0x44, - 0xb9, 0x00, 0x4c, 0x27, 0x00, 0x03, 0xf4, 0x01, 0x20, 0xb0, 0x01, 0xff, - 0x0a, 0xd1, 0xa5, 0x0d, 0x45, 0x3b, 0xdc, 0x42, 0xf5, 0xc1, 0x00, 0x57, - 0x19, 0x2c, 0x41, 0xf5, 0x41, 0x4d, 0x51, 0x83, 0x51, 0x2e, 0x00, 0x4e, - 0x58, 0x7a, 0x50, 0x2e, 0x40, 0x49, 0x74, 0xb8, 0x29, 0x26, 0x00, 0x48, - 0x4a, 0xc5, 0x28, 0x26, 0x40, 0x4d, 0xd5, 0x7d, 0xcf, 0xf3, 0x41, 0x48, - 0xa2, 0xc2, 0xb3, 0xf4, 0x01, 0x4a, 0x4a, 0x40, 0x19, 0xf3, 0x41, 0x42, - 0x8a, 0x00, 0xe5, 0xf9, 0x01, 0xa3, 0xb1, 0x23, 0x44, 0x8e, 0xec, 0xb0, - 0x26, 0x00, 0x42, 0x9e, 0x01, 0x99, 0xfa, 0x01, 0xac, 0x86, 0x23, 0xad, - 0xbd, 0x0c, 0xae, 0xad, 0x0b, 0x02, 0x2a, 0x05, 0x95, 0x0b, 0xb0, 0xcb, - 0x01, 0xb2, 0xb6, 0x01, 0xb5, 0x0b, 0xf7, 0x04, 0xf4, 0xc1, 0x00, 0x45, - 0xe0, 0x07, 0x2e, 0xf4, 0x41, 0x4b, 0x03, 0x98, 0xcb, 0xf6, 0x01, 0x02, - 0x11, 0x00, 0x06, 0x4e, 0xbe, 0x79, 0x91, 0xf4, 0x41, 0x02, 0x33, 0x00, - 0x88, 0x01, 0x08, 0x82, 0xc4, 0x01, 0xff, 0x0b, 0x09, 0xa1, 0x42, 0x0b, - 0x1c, 0xa2, 0x01, 0xff, 0x45, 0xc3, 0x0a, 0x67, 0xd3, 0x01, 0xa6, 0x29, - 0x44, 0x46, 0x2a, 0x68, 0xd3, 0x01, 0x43, 0xbf, 0x0a, 0x60, 0xd3, 0x01, - 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x62, 0xd3, 0x01, 0x42, - 0x15, 0x02, 0x61, 0xd3, 0x41, 0x44, 0x27, 0x1d, 0x66, 0xd3, 0x01, 0x42, - 0x60, 0x25, 0x65, 0xd3, 0x41, 0x43, 0xa7, 0x05, 0x64, 0xd3, 0x01, 0x43, - 0xcb, 0x06, 0x63, 0xd3, 0x41, 0x45, 0xc3, 0x0a, 0x70, 0xd3, 0x01, 0xa6, - 0x29, 0x44, 0x46, 0x2a, 0x71, 0xd3, 0x01, 0x43, 0xbf, 0x0a, 0x69, 0xd3, - 0x01, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x6b, 0xd3, 0x01, - 0x42, 0x15, 0x02, 0x6a, 0xd3, 0x41, 0x44, 0x27, 0x1d, 0x6f, 0xd3, 0x01, - 0x42, 0x60, 0x25, 0x6e, 0xd3, 0x41, 0x43, 0xa7, 0x05, 0x6d, 0xd3, 0x01, - 0x43, 0xcb, 0x06, 0x6c, 0xd3, 0x41, 0x44, 0x12, 0xec, 0x34, 0x23, 0x00, - 0x44, 0x5a, 0xef, 0x35, 0x23, 0x40, 0x42, 0x13, 0x00, 0xb8, 0xfa, 0x01, - 0x52, 0x8e, 0x52, 0x4f, 0x2e, 0x00, 0x4b, 0xb4, 0x9f, 0x58, 0x22, 0x40, - 0x04, 0x84, 0x1f, 0x0f, 0xb9, 0x01, 0xff, 0x4b, 0x7b, 0x9c, 0x2f, 0xf1, - 0x01, 0x4a, 0x05, 0xae, 0xa9, 0x00, 0x40, 0xa3, 0xed, 0x05, 0x06, 0x6e, - 0xd8, 0x90, 0x04, 0xa6, 0x81, 0x04, 0x55, 0x2e, 0x3c, 0xff, 0x2c, 0x00, - 0x0b, 0x6a, 0x9e, 0xde, 0x03, 0xb3, 0x01, 0xff, 0x0c, 0x4c, 0x08, 0x33, - 0x06, 0xf4, 0x15, 0x01, 0xff, 0xab, 0x20, 0x45, 0x89, 0xe5, 0xe5, 0x2c, - 0x00, 0x45, 0xbf, 0xe6, 0xe6, 0x2c, 0x00, 0xb3, 0x06, 0x46, 0x60, 0xdd, - 0xe8, 0x2c, 0x40, 0x49, 0x39, 0xb7, 0xea, 0x2c, 0x00, 0x46, 0x66, 0xdd, - 0xe7, 0x2c, 0x40, 0x42, 0x05, 0x07, 0xe4, 0x2c, 0x00, 0x45, 0xcf, 0xc7, - 0xe9, 0x2c, 0x40, 0xa1, 0x95, 0x03, 0x4d, 0xa9, 0x7f, 0xf3, 0x2c, 0x00, - 0x02, 0x4a, 0x06, 0xe7, 0x02, 0xa4, 0xbb, 0x02, 0x43, 0xde, 0xf0, 0x89, - 0x2c, 0x00, 0xa6, 0xa8, 0x02, 0x02, 0x24, 0x02, 0x97, 0x02, 0xa8, 0x88, - 0x02, 0x45, 0x30, 0xe4, 0x93, 0x2c, 0x00, 0xab, 0xe7, 0x01, 0xac, 0xd8, - 0x01, 0x42, 0x7d, 0x02, 0x99, 0x2c, 0x00, 0x42, 0x26, 0x03, 0x9b, 0x2c, - 0x00, 0xef, 0x9f, 0x2c, 0x80, 0x54, 0xb0, 0x48, 0x42, 0xd0, 0x00, 0xa3, - 0x2c, 0x00, 0xb3, 0x20, 0xb4, 0x12, 0x42, 0x7d, 0x00, 0xa9, 0x2c, 0x00, - 0x44, 0xb6, 0xef, 0x83, 0x2c, 0x00, 0x44, 0x02, 0xf0, 0x8d, 0x2c, 0x40, - 0x42, 0xd7, 0x23, 0xa7, 0x2c, 0x00, 0x45, 0xea, 0xe3, 0x91, 0x2c, 0x40, - 0x44, 0x79, 0x92, 0xc1, 0x2c, 0x00, 0xa8, 0x0c, 0x43, 0x94, 0x0c, 0xa5, - 0x2c, 0x00, 0x42, 0x3c, 0x01, 0x8b, 0x2c, 0x40, 0x42, 0xc3, 0x0a, 0xe3, - 0x03, 0x00, 0x43, 0x94, 0x0c, 0xed, 0x03, 0x40, 0xe9, 0xa1, 0x2c, 0x00, - 0x42, 0x2f, 0x03, 0xaf, 0x2c, 0x40, 0x03, 0x7b, 0x23, 0x06, 0x42, 0x3c, - 0x01, 0xb1, 0x2c, 0x40, 0x07, 0x47, 0xcd, 0x1f, 0x07, 0x6e, 0x9e, 0x01, - 0xff, 0xae, 0x0c, 0x45, 0xc3, 0xe7, 0xdd, 0x2c, 0x00, 0x43, 0x77, 0xf1, - 0xe3, 0x2c, 0x40, 0x42, 0xc6, 0x06, 0xdf, 0x2c, 0x00, 0x42, 0xf7, 0x19, - 0xe1, 0x2c, 0x40, 0x43, 0x05, 0x07, 0xb5, 0x2c, 0x00, 0x43, 0xcf, 0xf0, - 0xd9, 0x2c, 0x00, 0x43, 0x28, 0x59, 0xc7, 0x2c, 0x00, 0x46, 0xec, 0xd8, - 0xd7, 0x2c, 0x00, 0xa8, 0x17, 0x43, 0xc8, 0x91, 0xbf, 0x2c, 0x00, 0x02, - 0xa4, 0x02, 0x01, 0xff, 0x42, 0xc3, 0x0a, 0xc5, 0x2c, 0x00, 0x43, 0x94, - 0x0c, 0xdb, 0x2c, 0x40, 0xe1, 0xcf, 0x2c, 0x80, 0x0c, 0x42, 0xc3, 0x0a, - 0xd3, 0x2c, 0x00, 0x43, 0x0c, 0x00, 0xcd, 0x2c, 0x40, 0xf4, 0xd5, 0x2c, - 0x40, 0x4a, 0x7d, 0xa4, 0xd1, 0x2c, 0x00, 0x44, 0xf2, 0xeb, 0x97, 0x2c, - 0x40, 0x43, 0xab, 0x3c, 0x95, 0x2c, 0x00, 0xa8, 0x06, 0x42, 0x2f, 0x03, - 0x9d, 0x2c, 0x40, 0x42, 0xc3, 0x0a, 0xe7, 0x03, 0x00, 0xe9, 0xad, 0x2c, - 0x40, 0x43, 0x8a, 0x00, 0x8f, 0x2c, 0x00, 0x43, 0x0c, 0x00, 0xe9, 0x03, - 0x40, 0x43, 0xea, 0x04, 0x85, 0x2c, 0x00, 0x44, 0xee, 0xd8, 0xeb, 0x03, - 0x40, 0x42, 0xc3, 0x0a, 0xe5, 0x03, 0x00, 0xe9, 0xab, 0x2c, 0x40, 0x44, - 0xbe, 0xeb, 0x87, 0x2c, 0x00, 0x42, 0xc3, 0x0a, 0xef, 0x03, 0x00, 0x09, - 0x8a, 0xb7, 0x01, 0xff, 0x44, 0x67, 0x00, 0xb3, 0x2c, 0x00, 0x44, 0x0b, - 0x00, 0xcb, 0x2c, 0x00, 0x44, 0x28, 0xc7, 0xb9, 0x2c, 0x00, 0x42, 0x26, - 0x03, 0xbb, 0x2c, 0x40, 0x4a, 0xc5, 0xac, 0xc3, 0x2c, 0x00, 0x0c, 0x4c, - 0x24, 0x01, 0xff, 0x43, 0xde, 0xf0, 0xb7, 0x2c, 0x00, 0x46, 0xec, 0xd8, - 0xee, 0x2c, 0x00, 0x42, 0x26, 0x03, 0xbd, 0x2c, 0x00, 0x44, 0xcb, 0xac, - 0xec, 0x2c, 0x40, 0x4c, 0xf9, 0x8e, 0xc9, 0x2c, 0x00, 0x43, 0x20, 0xf1, - 0x81, 0x2c, 0x40, 0x54, 0xcf, 0x33, 0xfa, 0x2c, 0x00, 0x49, 0x15, 0x16, - 0xf9, 0x2c, 0x00, 0x56, 0xcd, 0x33, 0xfb, 0x2c, 0x00, 0x4d, 0x93, 0x52, - 0xfc, 0x2c, 0x40, 0x50, 0xb4, 0x58, 0xfd, 0x2c, 0x00, 0x48, 0x16, 0x16, - 0xfe, 0x2c, 0x40, 0x06, 0xc4, 0x06, 0x96, 0x01, 0x07, 0x2f, 0x39, 0x06, - 0x4e, 0x8c, 0x7b, 0xe0, 0x02, 0x41, 0x05, 0xc3, 0x0a, 0x7e, 0xa6, 0x5f, - 0x04, 0x46, 0x2a, 0x4f, 0x4b, 0x1e, 0x11, 0xf3, 0x02, 0x01, 0xb3, 0x26, - 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xea, 0x02, 0x01, 0xa8, 0x0f, 0xb7, - 0x01, 0xff, 0x44, 0x29, 0x1d, 0xeb, 0x02, 0x01, 0x49, 0x1c, 0x1d, 0xf4, - 0x02, 0x41, 0x44, 0x2c, 0x11, 0xec, 0x02, 0x01, 0x4b, 0x8f, 0x17, 0xf5, - 0x02, 0x41, 0x04, 0x27, 0x1d, 0x11, 0x02, 0x60, 0x25, 0x01, 0xff, 0x48, - 0x21, 0x11, 0xf8, 0x02, 0x01, 0x42, 0x2e, 0x11, 0xef, 0x02, 0x41, 0x48, - 0x21, 0x11, 0xf9, 0x02, 0x01, 0x42, 0x2e, 0x11, 0xf0, 0x02, 0x41, 0x48, - 0x21, 0x11, 0xfb, 0x02, 0x01, 0x42, 0x2e, 0x11, 0xf2, 0x02, 0x41, 0xa9, - 0x0f, 0xaf, 0x01, 0xff, 0x43, 0x2d, 0x11, 0xed, 0x02, 0x01, 0x4a, 0xa3, - 0xb0, 0xf6, 0x02, 0x41, 0x43, 0x09, 0x4c, 0xee, 0x02, 0x01, 0x4a, 0xb2, - 0x38, 0xf7, 0x02, 0x41, 0x48, 0x21, 0x11, 0xfa, 0x02, 0x01, 0xf9, 0xf1, - 0x02, 0x41, 0x45, 0xc3, 0x0a, 0xe8, 0x02, 0x01, 0xa6, 0x29, 0x44, 0x46, - 0x2a, 0xe9, 0x02, 0x01, 0x43, 0xbf, 0x0a, 0xe1, 0x02, 0x01, 0xb3, 0x0f, - 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xe3, 0x02, 0x01, 0x42, 0x15, 0x02, - 0xe2, 0x02, 0x41, 0x44, 0x27, 0x1d, 0xe7, 0x02, 0x01, 0x42, 0x60, 0x25, - 0xe6, 0x02, 0x41, 0x43, 0xa7, 0x05, 0xe5, 0x02, 0x01, 0x43, 0xcb, 0x06, - 0xe4, 0x02, 0x41, 0x0e, 0xba, 0x05, 0x1c, 0x09, 0xc7, 0x15, 0x01, 0xff, - 0x48, 0x12, 0xc6, 0xef, 0x2c, 0x00, 0x09, 0xe2, 0xbc, 0x01, 0xff, 0x45, - 0x65, 0xe1, 0xf0, 0x2c, 0x00, 0x45, 0x11, 0xe5, 0xf1, 0x2c, 0x40, 0xa1, - 0x95, 0x03, 0x4d, 0xa9, 0x7f, 0xf2, 0x2c, 0x00, 0x02, 0x4a, 0x06, 0xe7, - 0x02, 0xa4, 0xbb, 0x02, 0x43, 0xde, 0xf0, 0x88, 0x2c, 0x00, 0xa6, 0xa8, - 0x02, 0x02, 0x24, 0x02, 0x97, 0x02, 0xa8, 0x88, 0x02, 0x45, 0x30, 0xe4, - 0x92, 0x2c, 0x00, 0xab, 0xe7, 0x01, 0xac, 0xd8, 0x01, 0x42, 0x7d, 0x02, - 0x98, 0x2c, 0x00, 0x42, 0x26, 0x03, 0x9a, 0x2c, 0x00, 0xef, 0x9e, 0x2c, - 0x80, 0x54, 0xb0, 0x48, 0x42, 0xd0, 0x00, 0xa2, 0x2c, 0x00, 0xb3, 0x20, - 0xb4, 0x12, 0x42, 0x7d, 0x00, 0xa8, 0x2c, 0x00, 0x44, 0xb6, 0xef, 0x82, - 0x2c, 0x00, 0x44, 0x02, 0xf0, 0x8c, 0x2c, 0x40, 0x42, 0xd7, 0x23, 0xa6, - 0x2c, 0x00, 0x45, 0xea, 0xe3, 0x90, 0x2c, 0x40, 0x44, 0x79, 0x92, 0xc0, - 0x2c, 0x00, 0xa8, 0x0c, 0x43, 0x94, 0x0c, 0xa4, 0x2c, 0x00, 0x42, 0x3c, - 0x01, 0x8a, 0x2c, 0x40, 0x42, 0xc3, 0x0a, 0xe2, 0x03, 0x00, 0x43, 0x94, - 0x0c, 0xec, 0x03, 0x40, 0xe9, 0xa0, 0x2c, 0x00, 0x42, 0x2f, 0x03, 0xae, - 0x2c, 0x40, 0x03, 0x7b, 0x23, 0x06, 0x42, 0x3c, 0x01, 0xb0, 0x2c, 0x40, - 0x07, 0x47, 0xcd, 0x1f, 0x07, 0x6e, 0x9e, 0x01, 0xff, 0xae, 0x0c, 0x45, - 0xc3, 0xe7, 0xdc, 0x2c, 0x00, 0x43, 0x77, 0xf1, 0xe2, 0x2c, 0x40, 0x42, - 0xc6, 0x06, 0xde, 0x2c, 0x00, 0x42, 0xf7, 0x19, 0xe0, 0x2c, 0x40, 0x43, - 0x05, 0x07, 0xb4, 0x2c, 0x00, 0x43, 0xcf, 0xf0, 0xd8, 0x2c, 0x00, 0x43, - 0x28, 0x59, 0xc6, 0x2c, 0x00, 0x46, 0xec, 0xd8, 0xd6, 0x2c, 0x00, 0xa8, - 0x17, 0x43, 0xc8, 0x91, 0xbe, 0x2c, 0x00, 0x02, 0xa4, 0x02, 0x01, 0xff, - 0x42, 0xc3, 0x0a, 0xc4, 0x2c, 0x00, 0x43, 0x94, 0x0c, 0xda, 0x2c, 0x40, - 0xe1, 0xce, 0x2c, 0x80, 0x0c, 0x42, 0xc3, 0x0a, 0xd2, 0x2c, 0x00, 0x43, - 0x0c, 0x00, 0xcc, 0x2c, 0x40, 0xf4, 0xd4, 0x2c, 0x40, 0x4a, 0x7d, 0xa4, - 0xd0, 0x2c, 0x00, 0x44, 0xf2, 0xeb, 0x96, 0x2c, 0x40, 0x43, 0xab, 0x3c, - 0x94, 0x2c, 0x00, 0xa8, 0x06, 0x42, 0x2f, 0x03, 0x9c, 0x2c, 0x40, 0x42, - 0xc3, 0x0a, 0xe6, 0x03, 0x00, 0xe9, 0xac, 0x2c, 0x40, 0x43, 0x8a, 0x00, - 0x8e, 0x2c, 0x00, 0x43, 0x0c, 0x00, 0xe8, 0x03, 0x40, 0x43, 0xea, 0x04, - 0x84, 0x2c, 0x00, 0x44, 0xee, 0xd8, 0xea, 0x03, 0x40, 0x42, 0xc3, 0x0a, - 0xe4, 0x03, 0x00, 0xe9, 0xaa, 0x2c, 0x40, 0x44, 0xbe, 0xeb, 0x86, 0x2c, - 0x00, 0x42, 0xc3, 0x0a, 0xee, 0x03, 0x00, 0x09, 0x8a, 0xb7, 0x01, 0xff, - 0x44, 0x67, 0x00, 0xb2, 0x2c, 0x00, 0x44, 0x0b, 0x00, 0xca, 0x2c, 0x00, - 0x44, 0x28, 0xc7, 0xb8, 0x2c, 0x00, 0x42, 0x26, 0x03, 0xba, 0x2c, 0x40, - 0x4a, 0xc5, 0xac, 0xc2, 0x2c, 0x00, 0x0c, 0x4c, 0x24, 0x01, 0xff, 0x43, - 0xde, 0xf0, 0xb6, 0x2c, 0x00, 0x46, 0xec, 0xd8, 0xed, 0x2c, 0x00, 0x42, - 0x26, 0x03, 0xbc, 0x2c, 0x00, 0x44, 0xcb, 0xac, 0xeb, 0x2c, 0x40, 0x4c, - 0xf9, 0x8e, 0xc8, 0x2c, 0x00, 0x43, 0x20, 0xf1, 0x80, 0x2c, 0x40, 0x47, - 0xda, 0xcd, 0x5a, 0xf3, 0x01, 0xa9, 0x01, 0xff, 0xe5, 0x6a, 0xf3, 0x01, - 0x42, 0x1d, 0x01, 0x73, 0xf3, 0x41, 0xa6, 0x79, 0x55, 0x9f, 0x3a, 0x6d, - 0x2a, 0x00, 0x4a, 0x2d, 0xa9, 0x32, 0x23, 0x00, 0x48, 0xc2, 0xc4, 0x0c, - 0x26, 0x00, 0x0a, 0x27, 0xaf, 0x57, 0xb4, 0x06, 0x4e, 0xdc, 0x7c, 0xea, - 0xf3, 0x41, 0x05, 0xfe, 0x67, 0x1d, 0x57, 0x45, 0x1a, 0x81, 0x23, 0x00, - 0x4c, 0xc1, 0x6f, 0x2e, 0x22, 0x00, 0x04, 0x88, 0x88, 0x01, 0xff, 0x45, - 0xc6, 0xe4, 0x9b, 0xf3, 0x01, 0x53, 0x9f, 0x4b, 0x9b, 0x00, 0x40, 0x03, - 0x1f, 0x03, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x56, 0xa9, 0x34, 0xfa, - 0x22, 0x00, 0x47, 0x77, 0x7e, 0xfd, 0x22, 0x00, 0x68, 0x05, 0x05, 0xfb, - 0x22, 0x40, 0x46, 0x89, 0x05, 0x0b, 0x22, 0x00, 0x4f, 0xa0, 0x52, 0xb3, - 0x22, 0xc0, 0x00, 0x4c, 0x51, 0x28, 0xb5, 0x22, 0x40, 0x44, 0x2f, 0x03, - 0xa7, 0xf6, 0x01, 0x46, 0x44, 0xde, 0x77, 0xf4, 0x41, 0x49, 0x6a, 0xb6, - 0x8a, 0xf3, 0x01, 0x4b, 0xe3, 0x9e, 0x16, 0xf6, 0x01, 0x49, 0x08, 0x97, - 0x15, 0xf6, 0x41, 0x07, 0xc9, 0x15, 0x38, 0x42, 0xc2, 0x05, 0x04, 0x26, - 0x00, 0xad, 0x1b, 0xb0, 0x01, 0xff, 0x43, 0x7b, 0x1f, 0xed, 0xf9, 0x01, - 0x46, 0xa0, 0x90, 0x01, 0x22, 0x00, 0x4e, 0x40, 0x79, 0x84, 0x23, 0x00, - 0x47, 0x0a, 0x65, 0xdc, 0xf5, 0x41, 0xe1, 0x2c, 0x00, 0x00, 0x07, 0x34, - 0xb6, 0x01, 0xff, 0x42, 0x8a, 0x00, 0x40, 0x00, 0x00, 0x4a, 0x6d, 0x96, - 0x52, 0x20, 0x40, 0xa1, 0xa5, 0x15, 0xa2, 0xf5, 0x14, 0xa3, 0xa5, 0x11, - 0xa4, 0x89, 0x0e, 0xa5, 0xcf, 0x0d, 0xa6, 0xc0, 0x0d, 0xa7, 0x81, 0x0a, - 0x02, 0x0b, 0x00, 0xea, 0x09, 0xa9, 0xac, 0x09, 0x02, 0x1b, 0x02, 0x86, - 0x09, 0xac, 0xfb, 0x04, 0xad, 0xb4, 0x04, 0xae, 0xa5, 0x04, 0xaf, 0xe7, - 0x03, 0xb0, 0xb4, 0x03, 0xb2, 0x8b, 0x02, 0xb3, 0xc8, 0x01, 0xb4, 0x81, - 0x01, 0xb5, 0x5b, 0x09, 0x32, 0x00, 0x41, 0x02, 0x51, 0x00, 0x27, 0xb8, - 0x11, 0x07, 0x11, 0x33, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x5b, 0x03, 0x00, - 0x45, 0xf5, 0x06, 0xcf, 0x1d, 0x40, 0x80, 0x06, 0x48, 0x52, 0xc0, 0xb5, - 0x1a, 0x40, 0x45, 0x5c, 0x00, 0x3d, 0x03, 0x00, 0x45, 0xf5, 0x06, 0x53, - 0x03, 0x40, 0x03, 0x23, 0x04, 0x06, 0x4f, 0xef, 0x6b, 0xb6, 0x1a, 0x40, - 0x4c, 0x2d, 0x8b, 0xe9, 0x20, 0x00, 0x55, 0x5c, 0x3b, 0xf9, 0x1d, 0x40, - 0x05, 0xc2, 0x07, 0x06, 0x45, 0xad, 0x22, 0x3e, 0x03, 0x40, 0x45, 0x5c, - 0x00, 0x0d, 0x03, 0x00, 0x45, 0xf5, 0x06, 0x29, 0x03, 0x40, 0xb0, 0x0c, - 0x47, 0xcd, 0x06, 0xd1, 0x1d, 0x00, 0x47, 0xaa, 0x0e, 0xd2, 0x1d, 0x40, - 0x06, 0xdd, 0x95, 0x06, 0x51, 0x8a, 0x41, 0x4e, 0x03, 0x40, 0x45, 0x5c, - 0x00, 0xf5, 0x1d, 0x00, 0x45, 0xf5, 0x06, 0x1d, 0x03, 0x40, 0x4f, 0x5f, - 0x12, 0xdb, 0x20, 0x00, 0x44, 0xae, 0x22, 0x03, 0x03, 0x80, 0x1c, 0x06, - 0xc9, 0x1c, 0x06, 0x51, 0x6a, 0x5d, 0x12, 0x03, 0x40, 0x4c, 0x3d, 0x8a, - 0xcb, 0x1a, 0x00, 0x43, 0xd4, 0x09, 0xb4, 0x1a, 0x00, 0x48, 0x5a, 0xc9, - 0xe8, 0x20, 0x40, 0x80, 0x01, 0xff, 0x45, 0xf5, 0x06, 0x30, 0x03, 0x00, - 0x4f, 0xc0, 0x6d, 0x29, 0xfe, 0x00, 0x47, 0x79, 0x22, 0x34, 0x03, 0x00, - 0x50, 0x2a, 0x65, 0x2a, 0xfe, 0x40, 0x4c, 0xa1, 0x8c, 0x3c, 0x03, 0x00, - 0x05, 0x75, 0x33, 0x22, 0x4a, 0xd5, 0xab, 0xc2, 0x1d, 0x00, 0x07, 0x28, - 0x26, 0x0c, 0x61, 0x61, 0x0e, 0xba, 0x1a, 0x00, 0x4e, 0xce, 0x7c, 0xc3, - 0x1d, 0x40, 0x44, 0xf6, 0x06, 0x3b, 0x03, 0x00, 0x4d, 0xf5, 0x85, 0xc5, - 0x1a, 0x40, 0xb3, 0x06, 0x55, 0xe7, 0x3d, 0xd3, 0x20, 0x40, 0x4e, 0xb7, - 0x32, 0x37, 0x03, 0x00, 0x4d, 0xad, 0x48, 0x35, 0x03, 0x40, 0xa5, 0x8c, - 0x01, 0xa9, 0x01, 0xff, 0x03, 0xca, 0x00, 0x17, 0x03, 0xa2, 0x01, 0x01, - 0xff, 0x45, 0x5c, 0x00, 0x0a, 0x03, 0x00, 0x45, 0xf5, 0x06, 0x25, 0x03, - 0x00, 0x47, 0x79, 0x22, 0xd8, 0x20, 0x40, 0x80, 0x06, 0x61, 0xc4, 0x0e, - 0xec, 0x20, 0x40, 0x05, 0xce, 0x00, 0x30, 0x02, 0x22, 0x00, 0x16, 0x0c, - 0x50, 0x21, 0x06, 0x4a, 0xde, 0x95, 0x19, 0x03, 0x40, 0x4b, 0x54, 0x05, - 0xc2, 0x1a, 0x00, 0x4b, 0x7f, 0x97, 0xc4, 0x1a, 0x40, 0x08, 0x1a, 0xc5, - 0x06, 0x4b, 0x38, 0xa0, 0xd1, 0x20, 0x40, 0x45, 0x5c, 0x00, 0x57, 0x03, - 0x00, 0x45, 0xf5, 0x06, 0x39, 0x03, 0x40, 0x80, 0x24, 0x05, 0x19, 0x1b, - 0x01, 0xff, 0xa1, 0x06, 0x45, 0xf5, 0x06, 0x55, 0x03, 0x40, 0x44, 0x5d, - 0x00, 0x50, 0x03, 0x00, 0x03, 0x1b, 0x00, 0x01, 0xff, 0x54, 0xbf, 0x40, - 0xff, 0x1d, 0x00, 0x52, 0xe0, 0x54, 0x56, 0x03, 0x40, 0x45, 0x5c, 0x00, - 0xd7, 0x20, 0x00, 0x45, 0xf5, 0x06, 0xef, 0x20, 0x40, 0x52, 0x98, 0x54, - 0x22, 0x03, 0x00, 0x05, 0x13, 0x04, 0x01, 0xff, 0x50, 0xb5, 0x32, 0xe5, - 0x20, 0x00, 0x4d, 0x6e, 0x5d, 0x14, 0x03, 0x40, 0xa1, 0x11, 0x09, 0x46, - 0x70, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xc8, 0x1a, 0x00, 0x45, 0xf5, 0x06, - 0x1f, 0x03, 0x40, 0x54, 0x03, 0x43, 0x21, 0x03, 0x00, 0x0a, 0x7b, 0x5f, - 0x01, 0xff, 0x45, 0x5c, 0x00, 0xbb, 0x1a, 0x00, 0x45, 0xf5, 0x06, 0xbd, - 0x1a, 0x00, 0x47, 0x79, 0x22, 0xbe, 0x1a, 0x40, 0x45, 0xc3, 0xdb, 0x28, - 0x03, 0x80, 0x2e, 0x11, 0x4b, 0x5a, 0x0c, 0x4e, 0xb0, 0x79, 0xb7, 0x1a, - 0x00, 0x47, 0xb9, 0x88, 0x05, 0x03, 0x40, 0x42, 0x1a, 0x00, 0x76, 0x03, - 0x01, 0x43, 0x96, 0x6a, 0x77, 0x03, 0x01, 0x45, 0xe8, 0xe5, 0x79, 0x03, - 0x01, 0x43, 0x4d, 0xf1, 0x7a, 0x03, 0x01, 0x44, 0x02, 0xf0, 0x78, 0x03, - 0x41, 0x46, 0x5b, 0x00, 0xce, 0x1d, 0x40, 0x4e, 0x4e, 0x79, 0x4a, 0x03, - 0x00, 0x50, 0x8a, 0x66, 0xc6, 0x1a, 0x40, 0x45, 0x05, 0x6f, 0x04, 0x03, - 0x80, 0x06, 0x4f, 0x0c, 0x6d, 0x20, 0x03, 0x40, 0x80, 0x15, 0x8d, 0x01, - 0xff, 0x45, 0x29, 0x38, 0xc4, 0x1d, 0x00, 0x45, 0xcb, 0x22, 0xcc, 0x1d, - 0x00, 0x45, 0x8d, 0x22, 0xc6, 0x1d, 0x40, 0x45, 0xf5, 0x06, 0x31, 0x03, - 0x00, 0x49, 0xaa, 0x13, 0x24, 0xfe, 0x80, 0x0d, 0x4a, 0x2a, 0x04, 0x25, - 0xfe, 0xc0, 0x00, 0x46, 0xf4, 0x06, 0x2c, 0xfe, 0x40, 0x46, 0xf4, 0x06, - 0x2b, 0xfe, 0x40, 0x05, 0xb4, 0x05, 0xdc, 0x01, 0x03, 0xc4, 0x00, 0x4f, - 0x02, 0x3f, 0x00, 0x27, 0xaf, 0x01, 0xff, 0x03, 0xa2, 0x01, 0x06, 0x46, - 0xad, 0x88, 0x32, 0x03, 0x40, 0x56, 0xaf, 0x32, 0xeb, 0x20, 0x00, 0xb3, - 0x06, 0x55, 0xe7, 0x3d, 0xd2, 0x20, 0x40, 0x4e, 0xb7, 0x32, 0x38, 0x03, - 0x00, 0x4d, 0xad, 0x48, 0x36, 0x03, 0x40, 0x06, 0xfd, 0x1e, 0x06, 0x5e, - 0x22, 0x13, 0xb9, 0x1a, 0x40, 0x49, 0xaa, 0x13, 0x20, 0xfe, 0x80, 0x0d, - 0x4a, 0x2a, 0x04, 0x21, 0xfe, 0xc0, 0x00, 0x46, 0xf4, 0x06, 0x28, 0xfe, - 0x40, 0x46, 0xf4, 0x06, 0x27, 0xfe, 0x40, 0x80, 0x11, 0x06, 0xa9, 0x01, - 0x01, 0xff, 0x4d, 0x5b, 0x7f, 0xea, 0x20, 0x00, 0x5b, 0xca, 0x0e, 0xed, - 0x20, 0x40, 0xa1, 0x40, 0x02, 0x22, 0x00, 0x26, 0x0c, 0x50, 0x21, 0x16, - 0x0c, 0xc8, 0x00, 0x06, 0x4a, 0xde, 0x95, 0x18, 0x03, 0x40, 0x45, 0x5c, - 0x00, 0xe1, 0x20, 0x00, 0x45, 0xf5, 0x06, 0x4d, 0x03, 0x40, 0x4a, 0x16, - 0x06, 0xc1, 0x1a, 0x00, 0x4a, 0xf9, 0xa5, 0xc3, 0x1a, 0x40, 0x08, 0x1a, - 0xc5, 0x06, 0x4b, 0x38, 0xa0, 0xd0, 0x20, 0x40, 0x45, 0x5c, 0x00, 0x51, - 0x03, 0x00, 0x45, 0xf5, 0x06, 0x1c, 0x03, 0x40, 0x05, 0x07, 0x06, 0x24, - 0x04, 0xcf, 0x00, 0x01, 0xff, 0x80, 0x11, 0x05, 0x19, 0x1b, 0x01, 0xff, - 0x45, 0x5c, 0x00, 0xfe, 0x1d, 0x00, 0x45, 0xf5, 0x06, 0x54, 0x03, 0x40, - 0x45, 0x5c, 0x00, 0xd6, 0x20, 0x00, 0x45, 0xf5, 0x06, 0xee, 0x20, 0x40, - 0x45, 0x5c, 0x00, 0x1a, 0x03, 0x00, 0x45, 0xf5, 0x06, 0x49, 0x03, 0x40, - 0x15, 0xef, 0x3b, 0x8e, 0x02, 0x0d, 0x4b, 0x08, 0x01, 0xff, 0xe1, 0x63, - 0x03, 0x80, 0xeb, 0x01, 0xe2, 0xe8, 0x1d, 0x80, 0xdf, 0x01, 0xe3, 0x68, - 0x03, 0x80, 0xd3, 0x01, 0xe4, 0x69, 0x03, 0x00, 0xe5, 0x64, 0x03, 0x80, - 0xbd, 0x01, 0xe6, 0xeb, 0x1d, 0x80, 0xb1, 0x01, 0xe7, 0xda, 0x1d, 0x00, - 0xe8, 0x6a, 0x03, 0x00, 0xe9, 0x65, 0x03, 0x80, 0x8e, 0x01, 0xeb, 0xdc, - 0x1d, 0x00, 0xec, 0xdd, 0x1d, 0x80, 0x79, 0xed, 0x6b, 0x03, 0x00, 0xee, - 0xe0, 0x1d, 0x00, 0xef, 0x66, 0x03, 0x80, 0x5b, 0xf0, 0xee, 0x1d, 0x00, - 0xf2, 0x6c, 0x03, 0x80, 0x43, 0xf3, 0xe4, 0x1d, 0x80, 0x38, 0xf4, 0x6d, - 0x03, 0x80, 0x2d, 0xf5, 0x67, 0x03, 0x80, 0x17, 0xf6, 0x6e, 0x03, 0x00, - 0xf7, 0xf1, 0x1d, 0x80, 0x08, 0xf8, 0x6f, 0x03, 0x00, 0xfa, 0xe6, 0x1d, - 0x40, 0x46, 0xf4, 0x06, 0xbf, 0x1a, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, - 0x49, 0x2f, 0x23, 0xf4, 0x1d, 0x00, 0x5b, 0xd6, 0x1b, 0xf0, 0x1d, 0x40, - 0x4d, 0x0a, 0x88, 0xc0, 0x1a, 0x40, 0x44, 0x54, 0x7a, 0xea, 0x1d, 0x40, - 0x80, 0x01, 0xff, 0x45, 0xf5, 0x06, 0xca, 0x1d, 0x00, 0x47, 0x4c, 0xb0, - 0xe3, 0x1d, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x2f, 0x23, 0xf3, - 0x1d, 0x00, 0x5b, 0xd6, 0x1b, 0xed, 0x1d, 0x40, 0x59, 0x99, 0x22, 0xec, - 0x1d, 0x00, 0x45, 0xe4, 0xb9, 0xe5, 0x1d, 0x40, 0x07, 0x6c, 0x6e, 0x01, - 0xff, 0xe4, 0xd8, 0x1d, 0x00, 0xe7, 0xcc, 0x1a, 0x00, 0xf2, 0xcd, 0x1a, - 0x00, 0xf4, 0xce, 0x1a, 0x40, 0x55, 0xc5, 0x3b, 0xd3, 0x1d, 0x40, 0x42, - 0xa4, 0x02, 0xef, 0x1d, 0x00, 0x42, 0x53, 0x00, 0xd9, 0x1d, 0x40, 0x48, - 0x7a, 0xbf, 0xd7, 0x1d, 0x40, 0x43, 0x45, 0x0f, 0xe9, 0x1d, 0x40, 0x4f, - 0x7a, 0x68, 0xf2, 0x1d, 0x00, 0xe5, 0xd4, 0x1d, 0x00, 0x44, 0x2f, 0xe1, - 0xe7, 0x1d, 0x00, 0xef, 0xd5, 0x1d, 0x00, 0xf6, 0xd6, 0x1d, 0x40, 0xe7, - 0xdb, 0x1d, 0x00, 0xec, 0xde, 0x1d, 0x00, 0xed, 0xdf, 0x1d, 0x00, 0xee, - 0xe1, 0x1d, 0x00, 0xf2, 0xe2, 0x1d, 0x40, 0x10, 0x3a, 0x66, 0x11, 0x0b, - 0xab, 0xa2, 0x01, 0xff, 0x44, 0xc3, 0x00, 0xf7, 0x1d, 0x00, 0x45, 0xc8, - 0x00, 0xf6, 0x1d, 0x40, 0x56, 0x4b, 0x36, 0x9a, 0x30, 0x00, 0x51, 0x50, - 0x36, 0x99, 0x30, 0x40, 0xae, 0x06, 0x47, 0xbd, 0x0e, 0xd0, 0x1d, 0x40, - 0x46, 0xf9, 0x6a, 0xb2, 0x1a, 0x00, 0x07, 0xd8, 0x22, 0x01, 0xff, 0x02, - 0x14, 0x09, 0x11, 0x0c, 0x65, 0x8c, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xc7, - 0x1a, 0x00, 0x45, 0xf5, 0x06, 0x2b, 0x03, 0x40, 0x43, 0x0a, 0x13, 0x11, - 0x03, 0x80, 0x06, 0x4a, 0x67, 0x3b, 0x3a, 0x03, 0x40, 0x46, 0xf4, 0x06, - 0x2f, 0x03, 0x40, 0x4e, 0x98, 0x78, 0x4b, 0x03, 0x00, 0x48, 0xfd, 0xa8, - 0x09, 0x03, 0x00, 0x42, 0x5e, 0x01, 0x1b, 0x03, 0x40, 0x11, 0x18, 0x5a, - 0xc1, 0x01, 0xb2, 0x01, 0xff, 0xa1, 0x36, 0x04, 0xb9, 0x2d, 0x01, 0xff, - 0x4f, 0x78, 0x6a, 0x44, 0x03, 0x00, 0x47, 0xa8, 0xcf, 0x43, 0x03, 0x00, - 0x08, 0x60, 0x27, 0x0c, 0x4b, 0x0f, 0x9f, 0x42, 0x03, 0x00, 0x4d, 0xef, - 0x4d, 0x45, 0x03, 0x40, 0x49, 0x95, 0xbb, 0x44, 0xd2, 0x01, 0xb4, 0x01, - 0xff, 0x48, 0x62, 0xc3, 0x43, 0xd2, 0x01, 0x46, 0x94, 0xdc, 0x42, 0xd2, - 0x41, 0x05, 0x1f, 0xe6, 0x2f, 0x4c, 0xed, 0x91, 0x4f, 0x03, 0x00, 0x02, - 0x32, 0x00, 0x01, 0xff, 0x80, 0x0f, 0x8d, 0x01, 0xff, 0x4b, 0xc4, 0x96, - 0xc8, 0x1d, 0x00, 0x46, 0x04, 0x6f, 0xc5, 0x1d, 0x40, 0x46, 0xaf, 0x04, - 0x00, 0x03, 0x80, 0x06, 0x49, 0x83, 0x2c, 0x40, 0x03, 0x40, 0x46, 0xf4, - 0x06, 0x16, 0x03, 0x40, 0x06, 0xc4, 0x06, 0x21, 0x07, 0xc1, 0x05, 0x01, - 0xff, 0xe1, 0x70, 0x13, 0x01, 0x42, 0x1b, 0x02, 0x71, 0x13, 0x01, 0x42, - 0xff, 0x04, 0x72, 0x13, 0x01, 0x42, 0x6c, 0x09, 0x74, 0x13, 0x01, 0x42, - 0x02, 0x00, 0x73, 0x13, 0x41, 0xa6, 0x20, 0x43, 0xbf, 0x0a, 0x67, 0x13, - 0x01, 0x43, 0x5f, 0x25, 0x6c, 0x13, 0x01, 0xb4, 0x06, 0x44, 0xa1, 0x1d, - 0x66, 0x13, 0x41, 0x44, 0x25, 0x01, 0x69, 0x13, 0x01, 0x42, 0x15, 0x02, - 0x68, 0x13, 0x41, 0x43, 0xa7, 0x05, 0x6b, 0x13, 0x01, 0x43, 0xcb, 0x06, - 0x6a, 0x13, 0x41, 0x43, 0x9f, 0xf0, 0x00, 0xe0, 0x01, 0xa2, 0xe1, 0x01, - 0x46, 0x6f, 0x7f, 0x1d, 0xe0, 0x01, 0xa4, 0xcc, 0x01, 0xa6, 0xbd, 0x01, - 0x47, 0x74, 0xce, 0x03, 0xe0, 0x01, 0x44, 0xee, 0xec, 0x18, 0xe0, 0x01, - 0xe9, 0x0b, 0xe0, 0x81, 0x8f, 0x01, 0x44, 0x86, 0xed, 0x0d, 0xe0, 0x01, - 0x47, 0x1f, 0xd0, 0x0e, 0xe0, 0x01, 0x47, 0x63, 0x69, 0x0f, 0xe0, 0x01, - 0x45, 0xd4, 0xe5, 0x10, 0xe0, 0x01, 0x43, 0x7e, 0x30, 0x11, 0xe0, 0x01, - 0x46, 0x34, 0xdc, 0x12, 0xe0, 0x01, 0x45, 0x4b, 0xe7, 0x13, 0xe0, 0x01, - 0xb3, 0x4b, 0xb4, 0x3d, 0x43, 0x3e, 0xd3, 0x16, 0xe0, 0x01, 0x44, 0xa6, - 0xef, 0x02, 0xe0, 0x01, 0xb9, 0x0f, 0xba, 0x01, 0xff, 0x45, 0xe6, 0xe2, - 0x08, 0xe0, 0x01, 0x46, 0x94, 0xd9, 0x06, 0xe0, 0x41, 0x43, 0xb3, 0x00, - 0x21, 0xe0, 0x01, 0xa5, 0x08, 0xef, 0x26, 0xe0, 0x01, 0xf5, 0x23, 0xe0, - 0x41, 0xb2, 0x06, 0x43, 0xd7, 0x09, 0x05, 0xe0, 0x41, 0xe9, 0x20, 0xe0, - 0x01, 0xf5, 0x1f, 0xe0, 0x41, 0x42, 0x2f, 0x03, 0x1c, 0xe0, 0x01, 0x45, - 0xfe, 0xe8, 0x15, 0xe0, 0x41, 0xa8, 0x0c, 0x44, 0xd2, 0xed, 0x14, 0xe0, - 0x01, 0x48, 0xd1, 0xbc, 0x24, 0xe0, 0x41, 0xe1, 0x1e, 0xe0, 0x01, 0x42, - 0x12, 0x00, 0x1b, 0xe0, 0x41, 0x4b, 0xf1, 0x9d, 0x0a, 0xe0, 0x01, 0x07, - 0x16, 0x21, 0x06, 0x43, 0xb3, 0x27, 0x09, 0xe0, 0x41, 0x47, 0xb4, 0xcc, - 0x29, 0xe0, 0x01, 0x49, 0xd0, 0xbc, 0x27, 0xe0, 0x41, 0x43, 0xbc, 0x05, - 0x2a, 0xe0, 0x01, 0x44, 0xe5, 0xbc, 0x17, 0xe0, 0x41, 0x45, 0x94, 0xe4, - 0x0c, 0xe0, 0x01, 0x44, 0x76, 0xee, 0x04, 0xe0, 0x41, 0x46, 0xb5, 0xcc, - 0x28, 0xe0, 0x01, 0x43, 0xbc, 0xcf, 0x01, 0xe0, 0x41, 0x46, 0x74, 0xd8, - 0x52, 0x03, 0x00, 0x4e, 0x9d, 0x45, 0xdc, 0x20, 0x40, 0x09, 0xca, 0xb9, - 0x06, 0x50, 0x9a, 0x64, 0x47, 0x03, 0x40, 0x46, 0xe7, 0x02, 0xdd, 0x20, - 0x80, 0x20, 0x47, 0x88, 0x43, 0xdf, 0x20, 0x00, 0x46, 0x66, 0xda, 0xe3, - 0x20, 0x00, 0xb3, 0x06, 0x58, 0x15, 0x2b, 0xe4, 0x20, 0x40, 0x45, 0x63, - 0x58, 0xe2, 0x20, 0x00, 0x45, 0xac, 0x05, 0xde, 0x20, 0x40, 0x4a, 0xf4, - 0x0d, 0xe0, 0x20, 0x40, 0xa5, 0x95, 0x02, 0x48, 0x30, 0x23, 0x08, 0x03, - 0x80, 0x81, 0x02, 0xaf, 0x01, 0xff, 0xb4, 0xc5, 0x01, 0x04, 0x3d, 0x01, - 0x11, 0x02, 0xa7, 0x01, 0x01, 0xff, 0x4b, 0xdd, 0x95, 0x1e, 0x03, 0x00, - 0x4b, 0xb8, 0x02, 0xb3, 0x1a, 0x40, 0x80, 0x06, 0x53, 0x9d, 0x47, 0xb0, - 0x1a, 0x40, 0x4c, 0x3d, 0x8a, 0x0b, 0x03, 0x00, 0x45, 0xcb, 0x22, 0x5d, - 0x03, 0x80, 0x94, 0x01, 0x50, 0x97, 0x31, 0xcd, 0x1d, 0x00, 0x4c, 0x8d, - 0x22, 0x0f, 0x03, 0x00, 0x4e, 0xd6, 0x22, 0x61, 0x03, 0x80, 0x7b, 0x48, - 0xab, 0x88, 0x33, 0x03, 0x00, 0x46, 0x04, 0x6f, 0x5e, 0x03, 0x80, 0x68, - 0xaf, 0x5a, 0xb0, 0x41, 0x02, 0x0d, 0x00, 0x31, 0x45, 0xad, 0x22, 0x60, - 0x03, 0x80, 0x1b, 0x09, 0x32, 0x00, 0x01, 0xff, 0x05, 0xc2, 0x07, 0x06, - 0x4e, 0xac, 0x48, 0xe6, 0x20, 0x40, 0x45, 0x5c, 0x00, 0x0e, 0x03, 0x00, - 0x45, 0xf5, 0x06, 0x48, 0x03, 0x40, 0x80, 0x01, 0xff, 0x49, 0xaa, 0x13, - 0x22, 0xfe, 0x00, 0x4a, 0x2a, 0x04, 0x23, 0xfe, 0x40, 0x54, 0x87, 0x41, - 0x62, 0x03, 0x00, 0x48, 0xa4, 0x72, 0x5a, 0x03, 0x40, 0x50, 0x7a, 0x5f, - 0xbc, 0x1a, 0x00, 0x09, 0x46, 0x70, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xc9, - 0x1a, 0x00, 0x45, 0xf5, 0x06, 0xca, 0x1a, 0x40, 0x4e, 0xb0, 0x79, 0xb8, - 0x1a, 0x00, 0x47, 0xb9, 0x88, 0x3f, 0x03, 0x40, 0x46, 0xf4, 0x06, 0x5f, - 0x03, 0x40, 0x46, 0xf4, 0x06, 0xfc, 0x1d, 0x40, 0x46, 0xf4, 0x06, 0x5c, - 0x03, 0x40, 0x80, 0x11, 0x04, 0x77, 0x00, 0x01, 0xff, 0x4c, 0x3d, 0x8a, - 0xc1, 0x1d, 0x00, 0x4c, 0x8d, 0x22, 0xc0, 0x1d, 0x40, 0x45, 0x5c, 0x00, - 0x07, 0x03, 0x80, 0x0d, 0x45, 0xf5, 0x06, 0x23, 0x03, 0xc0, 0x00, 0x45, - 0xc2, 0x00, 0xfa, 0x1d, 0x40, 0x80, 0x01, 0xff, 0x44, 0xc3, 0x00, 0xf8, - 0x1d, 0x00, 0x45, 0xc8, 0x00, 0x58, 0x03, 0x40, 0x46, 0xf4, 0x06, 0x24, - 0x03, 0x00, 0x45, 0xe5, 0xde, 0xb1, 0x1a, 0x40, 0x4b, 0x86, 0x9c, 0xfb, - 0x1d, 0x00, 0x09, 0x4a, 0xbe, 0x01, 0xff, 0x06, 0xc4, 0x06, 0x30, 0x07, - 0xc1, 0x05, 0x06, 0x4d, 0xec, 0x86, 0xf1, 0xa8, 0x40, 0xe1, 0xea, 0xa8, - 0x00, 0x42, 0x1b, 0x02, 0xec, 0xa8, 0x00, 0x42, 0xff, 0x04, 0xed, 0xa8, - 0x00, 0x42, 0x6c, 0x09, 0xee, 0xa8, 0x00, 0x42, 0x71, 0x00, 0xef, 0xa8, - 0x00, 0xf5, 0xeb, 0xa8, 0x00, 0x42, 0x02, 0x00, 0xf0, 0xa8, 0x40, 0x45, - 0xc3, 0x0a, 0xe8, 0xa8, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xe9, 0xa8, - 0x00, 0x43, 0xbf, 0x0a, 0xe1, 0xa8, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, - 0xa1, 0x1d, 0xe0, 0xa8, 0x40, 0x44, 0x25, 0x01, 0xe3, 0xa8, 0x00, 0x42, - 0x15, 0x02, 0xe2, 0xa8, 0x40, 0x44, 0x27, 0x1d, 0xe7, 0xa8, 0x00, 0x42, - 0x60, 0x25, 0xe6, 0xa8, 0x40, 0x43, 0xa7, 0x05, 0xe5, 0xa8, 0x00, 0x43, - 0xcb, 0x06, 0xe4, 0xa8, 0x40, 0xa1, 0xb7, 0x03, 0x46, 0x7c, 0xbf, 0x27, - 0x03, 0x00, 0x50, 0xa5, 0x04, 0x02, 0x03, 0x80, 0xa3, 0x03, 0x09, 0x17, - 0x10, 0x92, 0x03, 0xaf, 0xeb, 0x02, 0x08, 0x3a, 0xca, 0x01, 0xff, 0x4e, - 0x34, 0x75, 0x85, 0x04, 0x00, 0x08, 0x22, 0x11, 0xcf, 0x02, 0x46, 0xa4, - 0x4e, 0x7c, 0xa6, 0x00, 0x07, 0xc1, 0x05, 0x52, 0x4d, 0x25, 0x3b, 0x89, - 0x04, 0x00, 0xb0, 0x30, 0x65, 0x4b, 0x08, 0x8f, 0xe0, 0x01, 0xb4, 0x06, - 0x45, 0x03, 0xe9, 0x6f, 0xa6, 0x40, 0x50, 0x2a, 0x61, 0x70, 0xa6, 0x00, - 0x55, 0x1d, 0x3b, 0x72, 0xa6, 0x00, 0x44, 0x47, 0x96, 0x83, 0x04, 0xc0, - 0x00, 0x80, 0x01, 0xff, 0x49, 0xaa, 0x13, 0x2e, 0xfe, 0x00, 0x4a, 0x2a, - 0x04, 0x2f, 0xfe, 0x40, 0xa1, 0x0c, 0x47, 0xf8, 0xd0, 0x87, 0x04, 0x00, - 0x4d, 0x06, 0x87, 0x86, 0x04, 0x40, 0x4c, 0x29, 0x8f, 0x84, 0x04, 0x00, - 0x45, 0xc5, 0xd1, 0x7d, 0xa6, 0x40, 0xe1, 0xf6, 0x2d, 0x00, 0xa2, 0xe2, - 0x01, 0x43, 0x1e, 0x14, 0xf1, 0x2d, 0x00, 0xa4, 0xcf, 0x01, 0xa5, 0xad, - 0x01, 0x44, 0x96, 0xec, 0xf4, 0x2d, 0x00, 0x43, 0xdd, 0x50, 0xe2, 0x2d, - 0x00, 0x42, 0x22, 0x00, 0xef, 0x2d, 0x80, 0x93, 0x01, 0xe9, 0x75, 0xa6, - 0x80, 0x77, 0x42, 0x1b, 0x02, 0xe6, 0x2d, 0x00, 0x4a, 0xcc, 0x57, 0xfd, - 0x2d, 0x00, 0x4c, 0x6d, 0x90, 0xf9, 0x2d, 0x00, 0xef, 0xea, 0x2d, 0x80, - 0x5a, 0x42, 0x6f, 0x02, 0xeb, 0x2d, 0x00, 0xb3, 0x40, 0xb4, 0x34, 0xf5, - 0x77, 0xa6, 0x80, 0x29, 0x42, 0x32, 0x00, 0xe1, 0x2d, 0x00, 0xb9, 0x0d, - 0xba, 0x01, 0xff, 0xe5, 0xe5, 0x2d, 0x00, 0x42, 0xb0, 0x01, 0xe4, 0x2d, - 0x40, 0x42, 0x8a, 0x00, 0xfa, 0x2d, 0x00, 0x43, 0xfb, 0x2a, 0x79, 0xa6, - 0x00, 0xe9, 0x76, 0xa6, 0x00, 0xf5, 0xfb, 0x2d, 0x40, 0x4b, 0xe1, 0x9b, - 0x74, 0xa6, 0x40, 0xe5, 0xee, 0x2d, 0x00, 0x42, 0x1b, 0x03, 0xf0, 0x2d, - 0x40, 0xa8, 0x06, 0x48, 0xd5, 0x8c, 0x7a, 0xa6, 0x40, 0xe1, 0xf2, 0x2d, - 0x00, 0x43, 0xef, 0x1f, 0xf3, 0x2d, 0x40, 0x44, 0x6b, 0x7a, 0x7b, 0xa6, - 0x40, 0xe5, 0xf7, 0x2d, 0x00, 0x08, 0xd2, 0xc6, 0x01, 0xff, 0xe1, 0xfc, - 0x2d, 0x00, 0x47, 0xb4, 0xcc, 0xff, 0x2d, 0x00, 0xe5, 0x9f, 0xa6, 0x40, - 0x47, 0x4a, 0x91, 0x78, 0xa6, 0x40, 0xe6, 0x9e, 0xa6, 0x00, 0xec, 0xe7, - 0x2d, 0x00, 0xed, 0xe8, 0x2d, 0x00, 0xee, 0xe9, 0x2d, 0x00, 0xf2, 0xec, - 0x2d, 0x00, 0xf3, 0xed, 0x2d, 0xc0, 0x00, 0x43, 0x53, 0x7b, 0xf5, 0x2d, - 0x40, 0xe5, 0xe3, 0x2d, 0x00, 0x44, 0x94, 0xe4, 0xf8, 0x2d, 0x40, 0xe5, - 0xe0, 0x2d, 0x00, 0x46, 0xb5, 0xcc, 0xfe, 0x2d, 0x40, 0x4d, 0x25, 0x3b, - 0x71, 0xa6, 0x00, 0x4e, 0x9a, 0x7b, 0x88, 0x04, 0x40, 0x04, 0xea, 0x04, - 0x0d, 0x4f, 0xfb, 0x6e, 0x26, 0xfe, 0xc0, 0x00, 0x46, 0xf4, 0x06, 0x2d, - 0xfe, 0x40, 0x45, 0x5c, 0x00, 0x13, 0x03, 0x80, 0x06, 0x45, 0xf5, 0x06, - 0x26, 0x03, 0x40, 0x46, 0xc7, 0x00, 0x15, 0x03, 0x40, 0x4b, 0xce, 0x00, - 0xd5, 0x20, 0x00, 0x4c, 0xd1, 0x92, 0xd9, 0x20, 0x40, 0x46, 0xf4, 0x06, - 0x2d, 0x03, 0x40, 0x49, 0x51, 0x23, 0x10, 0x03, 0x00, 0x43, 0x62, 0x0e, - 0x0c, 0x03, 0xc0, 0x00, 0x46, 0xf4, 0x06, 0x2c, 0x03, 0x40, 0x4a, 0x87, - 0xa9, 0x3b, 0x13, 0x01, 0xb2, 0x01, 0xff, 0x43, 0x0a, 0x13, 0x06, 0x03, - 0x80, 0x11, 0x05, 0x67, 0x3b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x46, 0x03, - 0x00, 0x45, 0xf5, 0x06, 0x2a, 0x03, 0x40, 0x46, 0xf4, 0x06, 0x2e, 0x03, - 0x00, 0x47, 0x02, 0xcb, 0xcb, 0x1d, 0x40, 0x04, 0x2a, 0x38, 0x3a, 0x0f, - 0x29, 0x6e, 0x2a, 0xae, 0x11, 0x08, 0xea, 0x65, 0x01, 0xff, 0x45, 0x5c, - 0x00, 0xf0, 0x20, 0x00, 0x45, 0xf5, 0x06, 0x59, 0x03, 0x40, 0x4c, 0x2d, - 0x91, 0xe7, 0x20, 0x00, 0x0c, 0x14, 0x10, 0x01, 0xff, 0x4b, 0xce, 0x00, - 0xd4, 0x20, 0x00, 0x4c, 0xd1, 0x92, 0xda, 0x20, 0x40, 0x45, 0x5c, 0x00, - 0x4c, 0x03, 0x00, 0x45, 0xf5, 0x06, 0xfd, 0x1d, 0x40, 0x80, 0x0f, 0x8d, - 0x01, 0xff, 0x4b, 0x60, 0x9a, 0xc9, 0x1d, 0x00, 0x46, 0x04, 0x6f, 0xc7, - 0x1d, 0x40, 0x46, 0xaf, 0x04, 0x01, 0x03, 0x80, 0x06, 0x49, 0x83, 0x2c, - 0x41, 0x03, 0x40, 0x46, 0xf4, 0x06, 0x17, 0x03, 0x40, 0x4d, 0x6b, 0x83, - 0xa5, 0xf4, 0x01, 0x42, 0x10, 0x00, 0x3a, 0x00, 0xc0, 0x00, 0x80, 0x01, - 0xff, 0x46, 0xf9, 0x12, 0x54, 0x22, 0x00, 0x44, 0x2f, 0x03, 0xa1, 0x20, - 0x40, 0xab, 0x06, 0x44, 0x8e, 0xee, 0x65, 0xf9, 0x41, 0x45, 0x04, 0xd2, - 0xb3, 0xfa, 0x01, 0x4a, 0x45, 0xaf, 0x78, 0xf3, 0x41, 0xa1, 0xdb, 0x03, - 0x51, 0x5e, 0x58, 0x9a, 0x23, 0x00, 0xa9, 0xbc, 0x03, 0xaf, 0x01, 0xff, - 0x02, 0x36, 0x01, 0x8f, 0x01, 0x02, 0x1b, 0x03, 0x2a, 0x42, 0x63, 0x0c, - 0x01, 0x26, 0x80, 0x06, 0x47, 0xdd, 0x7a, 0x21, 0xf9, 0x41, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x49, 0x04, 0xb9, 0x29, 0xf3, 0x01, 0x44, 0x67, 0x08, - 0x27, 0xf3, 0x01, 0x44, 0x0a, 0x2e, 0x28, 0xf3, 0x01, 0x47, 0xa6, 0xd3, - 0x2a, 0xf3, 0x41, 0x43, 0x4f, 0x02, 0x50, 0x20, 0x00, 0x02, 0x06, 0x00, - 0x01, 0xff, 0x44, 0x0e, 0xec, 0xd5, 0xf4, 0x01, 0x58, 0xa5, 0x28, 0x4d, - 0x2a, 0x00, 0x4d, 0x85, 0x83, 0x10, 0xf5, 0x01, 0x0d, 0xc6, 0x83, 0x34, - 0x02, 0x6f, 0x00, 0x16, 0xb5, 0x01, 0xff, 0x47, 0xe3, 0x5f, 0x02, 0xf3, - 0x01, 0x50, 0xca, 0x63, 0x4c, 0x2a, 0xc0, 0x00, 0x52, 0xd8, 0x4d, 0x50, - 0x2a, 0x40, 0x44, 0x4c, 0x12, 0xcf, 0x2a, 0x80, 0x0d, 0x46, 0x59, 0x35, - 0xd0, 0x2a, 0xc0, 0x00, 0x4c, 0x51, 0x28, 0xd2, 0x2a, 0x40, 0x4c, 0x51, - 0x28, 0xd1, 0x2a, 0x40, 0x4c, 0xc5, 0x8f, 0xea, 0xf4, 0x01, 0x4b, 0x88, - 0x9f, 0xeb, 0xf4, 0x41, 0x06, 0xe0, 0x07, 0x51, 0x05, 0x1b, 0x10, 0x01, - 0xff, 0xa3, 0x3e, 0x68, 0xb5, 0x04, 0x03, 0xf5, 0x01, 0x53, 0x5b, 0x48, - 0xf3, 0x27, 0x00, 0x48, 0xf3, 0x25, 0x31, 0x22, 0x00, 0x51, 0xcb, 0x04, - 0xbb, 0x21, 0x00, 0x05, 0xc8, 0x00, 0x0f, 0xb4, 0x01, 0xff, 0x53, 0x82, - 0x4a, 0xb7, 0x21, 0x00, 0x60, 0xa5, 0x0f, 0x6e, 0x2b, 0x40, 0x5b, 0x4e, - 0x19, 0xd8, 0xf5, 0x01, 0x66, 0x6c, 0x07, 0x01, 0xf5, 0xc1, 0x00, 0x59, - 0x67, 0x22, 0x02, 0xf5, 0x41, 0x52, 0x34, 0x52, 0x41, 0x29, 0x00, 0x4f, - 0xbe, 0x6f, 0x32, 0x22, 0x40, 0xa5, 0xac, 0x01, 0xa6, 0x88, 0x01, 0x04, - 0x46, 0x2a, 0x78, 0x03, 0xbf, 0x0a, 0x68, 0xb3, 0x45, 0xb4, 0x01, 0xff, - 0x02, 0x92, 0x01, 0x32, 0x04, 0x25, 0x01, 0x22, 0xb7, 0x01, 0xff, 0x04, - 0x46, 0x2b, 0x0f, 0xaf, 0x01, 0xff, 0x47, 0xae, 0xca, 0x51, 0xf5, 0x01, - 0x47, 0x17, 0xcb, 0x5d, 0xf5, 0x41, 0x47, 0xae, 0xca, 0x5b, 0xf5, 0x01, - 0x47, 0x17, 0xcb, 0x67, 0xf5, 0x41, 0x47, 0xae, 0xca, 0x52, 0xf5, 0x01, - 0x47, 0x17, 0xcb, 0x5e, 0xf5, 0x41, 0x47, 0xae, 0xca, 0x59, 0xf5, 0x01, - 0x47, 0x17, 0xcb, 0x65, 0xf5, 0x41, 0x04, 0x27, 0x1d, 0x11, 0x02, 0x60, - 0x25, 0x01, 0xff, 0x47, 0xae, 0xca, 0x55, 0xf5, 0x01, 0x47, 0x17, 0xcb, - 0x61, 0xf5, 0x41, 0x47, 0xae, 0xca, 0x56, 0xf5, 0x01, 0x47, 0x17, 0xcb, - 0x62, 0xf5, 0x41, 0x47, 0xae, 0xca, 0x50, 0xf5, 0x01, 0x47, 0x17, 0xcb, - 0x5c, 0xf5, 0x41, 0x47, 0xae, 0xca, 0x58, 0xf5, 0x01, 0x47, 0x17, 0xcb, - 0x64, 0xf5, 0x41, 0x03, 0xa7, 0x05, 0x11, 0x03, 0xcb, 0x06, 0x01, 0xff, - 0x47, 0xae, 0xca, 0x53, 0xf5, 0x01, 0x47, 0x17, 0xcb, 0x5f, 0xf5, 0x41, - 0x47, 0xae, 0xca, 0x54, 0xf5, 0x01, 0x47, 0x17, 0xcb, 0x60, 0xf5, 0x41, - 0x04, 0xc9, 0x00, 0x11, 0x05, 0x0b, 0x6e, 0x01, 0xff, 0x47, 0xae, 0xca, - 0x5a, 0xf5, 0x01, 0x47, 0x17, 0xcb, 0x66, 0xf5, 0x41, 0x47, 0xae, 0xca, - 0x57, 0xf5, 0x01, 0x47, 0x17, 0xcb, 0x63, 0xf5, 0x41, 0x06, 0x97, 0x8f, - 0x06, 0x46, 0x04, 0xdc, 0xcb, 0xf4, 0x41, 0x49, 0x3c, 0xb4, 0x7b, 0xf3, - 0x01, 0x47, 0xce, 0xbd, 0x42, 0xf9, 0x41, 0x53, 0xfd, 0x49, 0x81, 0xf5, - 0x01, 0x02, 0x6e, 0x02, 0x06, 0x4f, 0x9e, 0x71, 0xdb, 0xf3, 0x41, 0x48, - 0x23, 0x14, 0xac, 0xf3, 0x01, 0x4e, 0x1e, 0x77, 0x4f, 0xf4, 0x41, 0x58, - 0x0d, 0x27, 0x06, 0xd8, 0x00, 0x08, 0x1c, 0xa3, 0xbb, 0x01, 0x07, 0x76, - 0x0e, 0x06, 0x52, 0x45, 0x32, 0x01, 0xd8, 0x40, 0x43, 0xab, 0xf0, 0xc3, - 0x31, 0x00, 0xe4, 0xd4, 0x31, 0x00, 0xe8, 0xd0, 0x31, 0x80, 0x5f, 0xee, - 0xcf, 0x31, 0x00, 0xf0, 0xd2, 0x31, 0x80, 0x4a, 0xf1, 0xe3, 0x31, 0x00, - 0xf3, 0xd1, 0x31, 0x80, 0x15, 0xf4, 0xc0, 0x31, 0x80, 0x0c, 0x42, 0x9a, - 0x41, 0xc1, 0x31, 0x00, 0x42, 0xac, 0xf0, 0xc2, 0x31, 0x40, 0xee, 0xdd, - 0x31, 0x40, 0xe7, 0xda, 0x31, 0x00, 0xf0, 0xd3, 0x31, 0x00, 0xf4, 0xd9, - 0x31, 0x00, 0xf7, 0xc4, 0x31, 0x80, 0x13, 0xfa, 0xd7, 0x31, 0xc0, 0x00, - 0xf0, 0xe5, 0x31, 0x00, 0x42, 0x9a, 0x41, 0xc9, 0x31, 0x00, 0xfa, 0xde, - 0x31, 0x40, 0xe7, 0xdf, 0x31, 0x00, 0xfa, 0xd8, 0x31, 0x40, 0xe4, 0xdb, - 0x31, 0x00, 0xe7, 0xe2, 0x31, 0x00, 0xfa, 0xdc, 0x31, 0x40, 0xe7, 0xd6, - 0x31, 0x00, 0xf0, 0xc7, 0x31, 0x80, 0x34, 0xb8, 0x28, 0xfa, 0xd5, 0x31, - 0xc0, 0x00, 0xe7, 0xc6, 0x31, 0x00, 0xf4, 0xca, 0x31, 0x00, 0xf7, 0xcd, - 0x31, 0x80, 0x12, 0xfa, 0xc5, 0x31, 0xc0, 0x00, 0xf0, 0xcb, 0x31, 0x00, - 0xfa, 0xce, 0x31, 0xc0, 0x00, 0xe7, 0xe1, 0x31, 0x40, 0xe7, 0xc8, 0x31, - 0x40, 0xe7, 0xe4, 0x31, 0x00, 0x42, 0x9a, 0x41, 0xe0, 0x31, 0x40, 0x42, - 0x9a, 0x41, 0xcc, 0x31, 0x40, 0xa2, 0xba, 0x06, 0xa3, 0xfb, 0x04, 0xa4, - 0xe6, 0x04, 0xa5, 0xbe, 0x04, 0xa6, 0xaf, 0x04, 0xa7, 0x8c, 0x04, 0xa8, - 0xe4, 0x03, 0xaa, 0xbc, 0x03, 0x06, 0x7e, 0xa3, 0xab, 0x03, 0xac, 0xf8, - 0x02, 0xad, 0xc1, 0x02, 0x04, 0xfb, 0x47, 0xa1, 0x02, 0x43, 0x5a, 0x1a, - 0xb9, 0x2e, 0x00, 0xb0, 0x82, 0x02, 0xb2, 0xe9, 0x01, 0xb3, 0x51, 0xb4, - 0x37, 0xb7, 0x01, 0xff, 0xa1, 0x11, 0x04, 0x38, 0x1a, 0x01, 0xff, 0x43, - 0xbf, 0x0a, 0xc3, 0x2e, 0x00, 0x43, 0xd0, 0x09, 0xc4, 0x2e, 0x40, 0x03, - 0x23, 0xf1, 0x11, 0x04, 0xdd, 0x02, 0x01, 0xff, 0x43, 0xbf, 0x0a, 0xa1, - 0x2e, 0x00, 0x43, 0xd0, 0x09, 0xa2, 0x2e, 0x40, 0x43, 0xbf, 0x0a, 0xcd, - 0x2e, 0x00, 0x43, 0xd0, 0x09, 0xce, 0x2e, 0x40, 0x44, 0xb2, 0x17, 0x87, - 0x2e, 0x00, 0x45, 0xfd, 0x9b, 0x93, 0x2e, 0x00, 0x44, 0x3e, 0xed, 0xc1, - 0x2e, 0x00, 0x45, 0xcc, 0xe8, 0xf1, 0x2e, 0x40, 0xa5, 0x74, 0x44, 0xe6, - 0xec, 0xb6, 0x2e, 0x00, 0xa9, 0x3f, 0x05, 0x0d, 0x07, 0x2f, 0xae, 0x16, - 0x06, 0x2e, 0xdc, 0x06, 0x42, 0xf3, 0x0a, 0x9c, 0x2e, 0x40, 0x43, 0xbf, - 0x0a, 0xac, 0x2e, 0x00, 0x43, 0xd0, 0x09, 0xad, 0x2e, 0x40, 0x43, 0xf1, - 0x26, 0x92, 0x2e, 0x00, 0x04, 0xb4, 0x4f, 0x01, 0xff, 0x43, 0xbf, 0x0a, - 0x94, 0x2e, 0x00, 0x43, 0xd0, 0x09, 0x95, 0x2e, 0x40, 0x43, 0xbf, 0x0a, - 0x8c, 0x2e, 0x00, 0x43, 0xd0, 0x09, 0x8d, 0x2e, 0x40, 0x42, 0xf5, 0x59, - 0xaf, 0x2e, 0x00, 0x09, 0x10, 0x8a, 0x01, 0xff, 0xa8, 0x14, 0xb7, 0x06, - 0x46, 0x04, 0xd5, 0xe9, 0x2e, 0x40, 0x43, 0xf4, 0x59, 0xcc, 0x2e, 0x00, - 0x44, 0xa2, 0x9a, 0xe8, 0x2e, 0x40, 0x4e, 0x46, 0x74, 0xa6, 0x2e, 0x00, - 0x43, 0xfd, 0x04, 0xc6, 0x2e, 0x40, 0x42, 0x13, 0x00, 0x8b, 0x2e, 0x00, - 0x05, 0x84, 0x7a, 0x01, 0xff, 0x43, 0xbf, 0x0a, 0x82, 0x2e, 0x00, 0xb4, - 0x01, 0xff, 0x44, 0x25, 0x01, 0x84, 0x2e, 0x00, 0x42, 0x15, 0x02, 0x83, - 0x2e, 0x40, 0xa1, 0x06, 0x45, 0x04, 0x6b, 0x80, 0x2e, 0x40, 0x42, 0x9e, - 0x01, 0xd7, 0x2e, 0x00, 0xed, 0xb7, 0x2e, 0x00, 0xf0, 0x99, 0x2e, 0x40, - 0x03, 0x9a, 0x43, 0x06, 0x45, 0x7d, 0x1c, 0x85, 0x2e, 0x40, 0x43, 0xbf, - 0x0a, 0xa4, 0x2e, 0x00, 0x43, 0xd0, 0x09, 0xa5, 0x2e, 0x40, 0x44, 0xca, - 0x06, 0xb4, 0x2e, 0x00, 0x43, 0xbf, 0x0a, 0xb1, 0x2e, 0x00, 0xb4, 0x01, - 0xff, 0x44, 0x25, 0x01, 0xb3, 0x2e, 0x00, 0x42, 0x15, 0x02, 0xb2, 0x2e, - 0x40, 0xa5, 0x26, 0xaf, 0x01, 0xff, 0x42, 0x10, 0x00, 0x9d, 0x2e, 0x00, - 0x44, 0x23, 0x4c, 0xbd, 0x2e, 0x00, 0x44, 0xa3, 0x19, 0x9f, 0x2e, 0x00, - 0x04, 0x0c, 0x12, 0x01, 0xff, 0x43, 0xbf, 0x0a, 0xd5, 0x2e, 0x00, 0x43, - 0xd0, 0x09, 0xd6, 0x2e, 0x40, 0x42, 0x8a, 0x00, 0xbc, 0x2e, 0x00, 0x42, - 0xa4, 0x02, 0xb5, 0x2e, 0x40, 0x04, 0x51, 0xb6, 0x11, 0x04, 0x63, 0x0e, - 0x01, 0xff, 0x43, 0xbf, 0x0a, 0xd1, 0x2e, 0x00, 0x43, 0xd0, 0x09, 0xd2, - 0x2e, 0x40, 0x44, 0xca, 0x06, 0x91, 0x2e, 0x00, 0x43, 0xbf, 0x0a, 0x8e, - 0x2e, 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x90, 0x2e, 0x00, 0x42, - 0x15, 0x02, 0x8f, 0x2e, 0x40, 0x43, 0xbf, 0x0a, 0x88, 0x2e, 0x00, 0x43, - 0xd0, 0x09, 0x89, 0x2e, 0x40, 0x0c, 0x0d, 0x8a, 0x06, 0x43, 0x0c, 0x02, - 0xa9, 0x2e, 0x40, 0x46, 0xa3, 0x8d, 0xef, 0x2e, 0x00, 0x44, 0x27, 0x1d, - 0xeb, 0x2e, 0x00, 0xb4, 0x01, 0xff, 0x44, 0x96, 0xee, 0xed, 0x2e, 0x00, - 0x45, 0xcc, 0xe8, 0xf2, 0x2e, 0x40, 0x43, 0x1a, 0x00, 0x98, 0x2e, 0x00, - 0x02, 0x89, 0x00, 0x06, 0x43, 0xfd, 0x04, 0xc7, 0x2e, 0x40, 0xe4, 0xe1, - 0x2e, 0x00, 0x03, 0x6e, 0x09, 0x01, 0xff, 0x43, 0xbf, 0x0a, 0x96, 0x2e, - 0x00, 0x43, 0xd0, 0x09, 0x97, 0x2e, 0x40, 0x44, 0x5f, 0x7b, 0xe4, 0x2e, - 0x00, 0x05, 0x7a, 0x1f, 0x01, 0xff, 0x43, 0xbf, 0x0a, 0xbe, 0x2e, 0x00, - 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xc0, 0x2e, 0x00, 0x42, 0x15, 0x02, - 0xbf, 0x2e, 0x40, 0x43, 0x39, 0x0d, 0xa3, 0x2e, 0x00, 0x43, 0x25, 0x6b, - 0xca, 0x2e, 0x40, 0x03, 0x12, 0x05, 0x0c, 0x42, 0x15, 0x01, 0xb8, 0x2e, - 0x00, 0x42, 0x4d, 0x00, 0xab, 0x2e, 0x40, 0x43, 0xbf, 0x0a, 0xdd, 0x2e, - 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xdf, 0x2e, 0x00, 0x42, 0x15, - 0x02, 0xde, 0x2e, 0x40, 0x44, 0x24, 0x0f, 0x9e, 0x2e, 0x00, 0x49, 0x6b, - 0xb8, 0x8a, 0x2e, 0x00, 0x42, 0x55, 0x18, 0xa8, 0x2e, 0x40, 0x0c, 0x0d, - 0x8a, 0x28, 0x44, 0x64, 0xda, 0x9b, 0x2e, 0x00, 0xa9, 0x14, 0xac, 0x06, - 0x42, 0xd1, 0x00, 0xa7, 0x2e, 0x40, 0x43, 0x20, 0x47, 0x81, 0x2e, 0x00, - 0x45, 0x8c, 0x86, 0xc2, 0x2e, 0x40, 0x42, 0x2e, 0x11, 0xcf, 0x2e, 0x00, - 0x46, 0x14, 0xde, 0xa0, 0x2e, 0x40, 0x44, 0x4b, 0xa5, 0xe6, 0x2e, 0x00, - 0x44, 0x9c, 0x6a, 0xcb, 0x2e, 0x00, 0x46, 0xa3, 0x8d, 0xf0, 0x2e, 0x00, - 0xa5, 0x70, 0xa6, 0x5c, 0xa7, 0x4e, 0x45, 0xd0, 0xb0, 0xe2, 0x2e, 0x00, - 0xac, 0x3a, 0xb3, 0x1a, 0xb4, 0x06, 0x44, 0x3f, 0x13, 0xdb, 0x2e, 0x40, - 0x4d, 0x00, 0x7f, 0xd9, 0x2e, 0x00, 0x44, 0x96, 0xee, 0xee, 0x2e, 0x00, - 0x45, 0xcc, 0xe8, 0xf3, 0x2e, 0x40, 0x43, 0xa2, 0x11, 0xe7, 0x2e, 0x00, - 0x42, 0x27, 0x01, 0xc5, 0x2e, 0x00, 0x44, 0x0f, 0x09, 0xc9, 0x2e, 0x00, - 0x43, 0xe8, 0xae, 0xb0, 0x2e, 0x00, 0x45, 0x0f, 0x7b, 0xc8, 0x2e, 0x40, - 0x43, 0xf1, 0x4f, 0xda, 0x2e, 0x00, 0x43, 0x63, 0x0e, 0xd3, 0x2e, 0x40, - 0x43, 0x8a, 0x00, 0xd4, 0x2e, 0x00, 0x43, 0x5a, 0x1a, 0xd0, 0x2e, 0x40, - 0x43, 0x82, 0x0c, 0xe5, 0x2e, 0x00, 0x42, 0x26, 0x0b, 0xdc, 0x2e, 0x00, - 0x43, 0x27, 0x29, 0xea, 0x2e, 0x40, 0x42, 0x8a, 0x00, 0xe0, 0x2e, 0x00, - 0x43, 0x28, 0x1d, 0xec, 0x2e, 0x40, 0x45, 0x99, 0xcc, 0xae, 0x2e, 0x00, - 0x43, 0x16, 0x8b, 0xd8, 0x2e, 0x00, 0xaf, 0x11, 0x05, 0x7d, 0xe7, 0x01, - 0xff, 0x43, 0xbf, 0x0a, 0xba, 0x2e, 0x00, 0x43, 0xd0, 0x09, 0xbb, 0x2e, - 0x40, 0x4b, 0xd3, 0x9c, 0xaa, 0x2e, 0x00, 0x42, 0xa2, 0x05, 0xe3, 0x2e, - 0x00, 0xf8, 0x86, 0x2e, 0x40, 0x44, 0x2e, 0xee, 0xa6, 0xf3, 0x01, 0x02, - 0xe9, 0x02, 0x0d, 0x47, 0xd7, 0xd3, 0xd9, 0xf3, 0xc1, 0x00, 0x48, 0x72, - 0xbf, 0x06, 0xf3, 0x41, 0x02, 0x68, 0x00, 0x15, 0xb5, 0x01, 0xff, 0x4f, - 0x93, 0x6d, 0x10, 0x2a, 0x00, 0x4c, 0xa9, 0x04, 0x5e, 0x00, 0x00, 0x46, - 0xbe, 0xdc, 0xaa, 0xf3, 0x41, 0x80, 0xa7, 0x0e, 0x02, 0x06, 0x00, 0x01, - 0xff, 0xa1, 0x89, 0x0e, 0xa2, 0xfa, 0x0d, 0xa3, 0xbe, 0x0d, 0xa4, 0xcd, - 0x0c, 0x46, 0xf9, 0x12, 0x9c, 0x22, 0x00, 0x4c, 0x87, 0x00, 0xc1, 0x29, - 0x00, 0xa8, 0xe1, 0x0a, 0xa9, 0xc7, 0x07, 0xab, 0xdd, 0x05, 0xac, 0xf7, - 0x03, 0xad, 0xe8, 0x03, 0x07, 0x2f, 0x39, 0x6f, 0x5e, 0xd6, 0x13, 0x42, - 0x27, 0x00, 0xb0, 0x4f, 0xb2, 0x41, 0x46, 0xab, 0x05, 0xd7, 0xf7, 0x01, - 0xb4, 0x26, 0x4c, 0x32, 0x00, 0xb6, 0x29, 0x00, 0xb7, 0x0a, 0xf8, 0xbe, - 0x2b, 0x00, 0x4f, 0xab, 0x73, 0x0d, 0xf1, 0x41, 0x05, 0xae, 0x02, 0x04, - 0xfa, 0x2e, 0xf1, 0x41, 0x46, 0x2a, 0x21, 0xbe, 0x29, 0x00, 0x44, 0xe2, - 0x12, 0x2a, 0x27, 0x40, 0x44, 0x29, 0x02, 0x97, 0x22, 0x00, 0x47, 0x02, - 0x02, 0xd5, 0xf7, 0xc1, 0x00, 0x45, 0xa4, 0x01, 0x8a, 0x23, 0x40, 0x4e, - 0xcd, 0x70, 0xb8, 0x29, 0x00, 0x4c, 0x81, 0x8e, 0x9a, 0x22, 0x40, 0x47, - 0xb9, 0x37, 0xb7, 0x29, 0x00, 0x4c, 0xf5, 0x8c, 0xb9, 0x29, 0x00, 0x43, - 0xb8, 0x27, 0x95, 0x22, 0x00, 0x4a, 0xcf, 0xac, 0x36, 0x30, 0x40, 0xa5, - 0xdc, 0x02, 0xa6, 0xec, 0x01, 0x48, 0x7c, 0x52, 0x72, 0x24, 0x00, 0xb3, - 0xc2, 0x01, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x69, 0x24, 0x80, 0xb1, - 0x01, 0x04, 0x2b, 0x11, 0x5a, 0x02, 0x15, 0x01, 0x01, 0xff, 0x43, 0x47, - 0x2b, 0x6b, 0x24, 0x00, 0x43, 0x2a, 0x1d, 0x73, 0x24, 0xc0, 0x00, 0x80, - 0x01, 0xff, 0x45, 0xc3, 0x0a, 0x58, 0x32, 0x00, 0xa6, 0x31, 0x44, 0x46, - 0x2a, 0x59, 0x32, 0x00, 0x02, 0x10, 0x00, 0x1d, 0xb3, 0x0f, 0xb4, 0x01, - 0xff, 0x44, 0x25, 0x01, 0x53, 0x32, 0x00, 0x42, 0x15, 0x02, 0x52, 0x32, - 0x40, 0x44, 0x27, 0x1d, 0x57, 0x32, 0x00, 0x42, 0x60, 0x25, 0x56, 0x32, - 0x40, 0x4d, 0xf2, 0x10, 0x49, 0x32, 0x00, 0xe5, 0x51, 0x32, 0x40, 0x43, - 0xa7, 0x05, 0x55, 0x32, 0x00, 0x43, 0xcb, 0x06, 0x54, 0x32, 0x40, 0x43, - 0x75, 0x09, 0x6c, 0x24, 0x00, 0xf9, 0x5a, 0x32, 0xc0, 0x00, 0x80, 0x01, - 0xff, 0x45, 0xc3, 0x0a, 0xb3, 0x32, 0x00, 0xa6, 0x31, 0x44, 0x46, 0x2a, - 0xb4, 0x32, 0x00, 0x02, 0x10, 0x00, 0x1d, 0xb3, 0x0f, 0xb4, 0x01, 0xff, - 0x44, 0x25, 0x01, 0x5d, 0x32, 0x00, 0x42, 0x15, 0x02, 0x5c, 0x32, 0x40, - 0x44, 0x27, 0x1d, 0xb2, 0x32, 0x00, 0x42, 0x60, 0x25, 0xb1, 0x32, 0x40, - 0x4d, 0xf2, 0x10, 0x4a, 0x32, 0x00, 0xe5, 0x5b, 0x32, 0x40, 0x43, 0xa7, - 0x05, 0x5f, 0x32, 0x00, 0x43, 0xcb, 0x06, 0x5e, 0x32, 0x40, 0x50, 0x48, - 0x5e, 0x48, 0x32, 0x40, 0x05, 0x27, 0x1d, 0x11, 0x03, 0x60, 0x25, 0x01, - 0xff, 0x43, 0x75, 0x09, 0x6f, 0x24, 0x00, 0x51, 0x47, 0x5e, 0x4d, 0x32, - 0x40, 0x43, 0x75, 0x09, 0x70, 0x24, 0x00, 0x51, 0x47, 0x5e, 0x4e, 0x32, - 0x40, 0x03, 0x9c, 0x17, 0x58, 0xaf, 0x01, 0xff, 0x43, 0x2d, 0x11, 0xb5, - 0x32, 0x80, 0x06, 0x46, 0xa0, 0x5b, 0x6d, 0x24, 0x40, 0x80, 0x01, 0xff, - 0x45, 0xc3, 0x0a, 0xbd, 0x32, 0x00, 0xa6, 0x31, 0x44, 0x46, 0x2a, 0xbe, + 0xc7, 0x04, 0x05, 0xee, 0xe8, 0x01, 0xff, 0xa1, 0xb3, 0x04, 0x06, 0xef, + 0x06, 0xec, 0x03, 0x02, 0x68, 0x00, 0x9f, 0x01, 0x05, 0x5a, 0x03, 0x4e, + 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x3b, 0xe5, 0xc6, 0x0c, 0x80, 0x32, + 0xe9, 0xbf, 0x0c, 0x80, 0x29, 0xef, 0xca, 0x0c, 0x80, 0x20, 0xf5, 0xc1, + 0x0c, 0x80, 0x17, 0x08, 0x22, 0xc1, 0x01, 0xff, 0xec, 0xe2, 0x0c, 0x80, + 0x09, 0xf2, 0xc3, 0x0c, 0xc0, 0x00, 0xf2, 0xc4, 0x0c, 0x40, 0xec, 0xe3, + 0x0c, 0x40, 0xf5, 0xc2, 0x0c, 0x40, 0xef, 0xcb, 0x0c, 0x40, 0xe9, 0xc0, + 0x0c, 0x40, 0xe5, 0xc7, 0x0c, 0x40, 0xe1, 0xbe, 0x0c, 0x00, 0xe9, 0xc8, + 0x0c, 0x00, 0xf5, 0xcc, 0x0c, 0x40, 0xa1, 0x3f, 0xa3, 0x31, 0x4b, 0xe6, + 0x9d, 0xf1, 0x0c, 0x00, 0x45, 0x3f, 0x3f, 0xbc, 0x0c, 0x00, 0xb3, 0x17, + 0x4b, 0x6e, 0xa4, 0xf2, 0x0c, 0x00, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, + 0xe5, 0x23, 0xcd, 0x0c, 0x00, 0x45, 0xec, 0x4b, 0x83, 0x0c, 0x40, 0x46, + 0xd9, 0xd5, 0x84, 0x0c, 0x00, 0x52, 0x79, 0x54, 0x80, 0x0c, 0x40, 0x4a, + 0xd8, 0x23, 0x81, 0x0c, 0x00, 0x5d, 0x33, 0x16, 0xf3, 0x0c, 0x40, 0x47, + 0x3d, 0x16, 0x82, 0x0c, 0x00, 0x47, 0xaf, 0x88, 0xbd, 0x0c, 0x40, 0x49, + 0x44, 0x39, 0xd5, 0x0c, 0x00, 0x05, 0xee, 0x05, 0x01, 0xff, 0xe1, 0x85, + 0x0c, 0x80, 0xab, 0x02, 0xa2, 0x9e, 0x02, 0xa3, 0x91, 0x02, 0xa4, 0xf8, + 0x01, 0xe5, 0x8e, 0x0c, 0x80, 0xee, 0x01, 0x42, 0x0c, 0x08, 0xde, 0x0c, + 0x00, 0xa7, 0xdb, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x0c, 0x00, 0xe9, 0x87, + 0x0c, 0x80, 0xcb, 0x01, 0xaa, 0xbe, 0x01, 0xab, 0xb1, 0x01, 0xac, 0x9d, + 0x01, 0x42, 0x6c, 0x00, 0xae, 0x0c, 0x00, 0xae, 0x78, 0xef, 0x92, 0x0c, + 0x80, 0x6f, 0xb0, 0x63, 0xb2, 0x57, 0xb3, 0x45, 0xb4, 0x2c, 0xf5, 0x89, + 0x0c, 0x80, 0x23, 0xb6, 0x06, 0x42, 0xbc, 0x22, 0xaf, 0x0c, 0x40, 0xe1, + 0xb5, 0x0c, 0x00, 0x07, 0x23, 0xc1, 0x01, 0xff, 0xec, 0x8c, 0x0c, 0x80, + 0x09, 0xf2, 0x8b, 0x0c, 0xc0, 0x00, 0xf2, 0xe0, 0x0c, 0x40, 0xec, 0xe1, + 0x0c, 0x40, 0xf5, 0x8a, 0x0c, 0x40, 0xe1, 0xa4, 0x0c, 0x00, 0x42, 0x22, + 0x00, 0xa5, 0x0c, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x9f, 0x0c, 0x00, 0x42, + 0x22, 0x00, 0xa0, 0x0c, 0x40, 0xe1, 0xb8, 0x0c, 0x00, 0x42, 0x22, 0x00, + 0xb6, 0x0c, 0x00, 0x42, 0x40, 0x06, 0xb7, 0x0c, 0x40, 0xe1, 0xb0, 0x0c, + 0x00, 0x42, 0x71, 0x00, 0xb1, 0x0c, 0x40, 0xe1, 0xaa, 0x0c, 0x00, 0x42, + 0x22, 0x00, 0xab, 0x0c, 0x40, 0xef, 0x93, 0x0c, 0x40, 0xe1, 0xa8, 0x0c, + 0x80, 0x12, 0x42, 0x24, 0x02, 0x99, 0x0c, 0x00, 0x42, 0x2a, 0x05, 0xa3, + 0x0c, 0x00, 0x42, 0xbc, 0x22, 0x9e, 0x0c, 0x40, 0x4b, 0xfc, 0x9d, 0xdd, + 0x0c, 0x40, 0xe1, 0xb2, 0x0c, 0x00, 0xac, 0x01, 0xff, 0xe1, 0xb3, 0x0c, + 0x00, 0x42, 0x74, 0x00, 0xde, 0x0c, 0x40, 0xe1, 0x95, 0x0c, 0x00, 0x42, + 0x22, 0x00, 0x96, 0x0c, 0x40, 0xe1, 0x9c, 0x0c, 0x00, 0x42, 0x22, 0x00, + 0x9d, 0x0c, 0x40, 0xe9, 0x88, 0x0c, 0x40, 0xe1, 0x97, 0x0c, 0x00, 0x42, + 0x22, 0x00, 0x98, 0x0c, 0x40, 0xe5, 0x8f, 0x0c, 0x40, 0xe1, 0xa6, 0x0c, + 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa7, 0x0c, 0x40, 0xe1, 0xa1, 0x0c, + 0x00, 0x42, 0x22, 0x00, 0xa2, 0x0c, 0x40, 0xe1, 0x9a, 0x0c, 0x00, 0x42, + 0x22, 0x00, 0x9b, 0x0c, 0x40, 0xe1, 0xac, 0x0c, 0x00, 0x42, 0x22, 0x00, + 0xad, 0x0c, 0x40, 0xe1, 0x86, 0x0c, 0x00, 0xe9, 0x90, 0x0c, 0x00, 0xf5, + 0x94, 0x0c, 0x40, 0x45, 0x12, 0x0b, 0xee, 0x0c, 0x00, 0xa6, 0x2e, 0x44, + 0xcf, 0x2a, 0xef, 0x0c, 0x00, 0x43, 0x0e, 0x0b, 0xe7, 0x0c, 0x00, 0xb3, + 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xe6, 0x0c, 0x40, 0x44, 0x25, 0x01, + 0xe9, 0x0c, 0x00, 0x42, 0x15, 0x02, 0xe8, 0x0c, 0x40, 0x44, 0xc9, 0x1d, + 0xed, 0x0c, 0x00, 0x42, 0x01, 0x26, 0xec, 0x0c, 0x40, 0x43, 0xd2, 0x05, + 0xeb, 0x0c, 0x00, 0x43, 0xf6, 0x06, 0xea, 0x0c, 0x40, 0x4d, 0xd6, 0x83, + 0xd6, 0x0c, 0x00, 0x4c, 0x3b, 0x94, 0xdc, 0x0c, 0x40, 0x44, 0x19, 0xef, + 0x98, 0xf9, 0x01, 0x0b, 0x55, 0xa5, 0x01, 0xff, 0xa1, 0x9b, 0x0b, 0xa2, + 0xab, 0x0a, 0xa3, 0xd1, 0x09, 0xa4, 0xdf, 0x08, 0xa5, 0x9e, 0x08, 0xa6, + 0xc1, 0x07, 0xa7, 0x90, 0x07, 0xa8, 0xc1, 0x06, 0xa9, 0xa9, 0x06, 0x02, + 0x56, 0x19, 0x9a, 0x06, 0x45, 0xba, 0xa5, 0x11, 0x2f, 0x00, 0xac, 0xca, + 0x05, 0xad, 0xf9, 0x04, 0xae, 0xe3, 0x04, 0xaf, 0xbe, 0x04, 0xb0, 0x9a, + 0x04, 0xb2, 0xe1, 0x03, 0xb3, 0xdf, 0x01, 0xb4, 0x76, 0x43, 0x45, 0x03, + 0x64, 0x2f, 0x00, 0xb6, 0x62, 0xb7, 0x06, 0x46, 0xde, 0xd7, 0xc8, 0x2f, + 0x40, 0xa1, 0x45, 0xa5, 0x37, 0xa8, 0x29, 0x02, 0x9e, 0x01, 0x1d, 0xaf, + 0x0f, 0xb2, 0x01, 0xff, 0x42, 0xe5, 0x05, 0x13, 0x2f, 0x00, 0x43, 0xd8, + 0x02, 0xae, 0x2f, 0x40, 0x43, 0x41, 0x18, 0x25, 0x2f, 0x00, 0x42, 0xbb, + 0x00, 0x2f, 0x2f, 0x40, 0xe4, 0xb5, 0x2f, 0x00, 0xe5, 0xa3, 0x2f, 0x40, + 0x43, 0x89, 0x00, 0xc6, 0x2f, 0x00, 0x43, 0xaf, 0x02, 0x69, 0x2f, 0x40, + 0x44, 0x0d, 0xef, 0x4e, 0x2f, 0x00, 0x42, 0x60, 0x01, 0x91, 0x2f, 0x40, + 0x42, 0x60, 0x5b, 0xa1, 0x2f, 0x80, 0x06, 0x43, 0x8b, 0x00, 0x54, 0x2f, + 0x40, 0x4a, 0x9c, 0x68, 0x8f, 0x2f, 0x40, 0x45, 0x2f, 0xe4, 0x95, 0x2f, + 0x00, 0x46, 0xda, 0xdc, 0xa5, 0x2f, 0x40, 0xa1, 0x53, 0x42, 0x92, 0x01, + 0x17, 0x2f, 0x00, 0xa9, 0x3f, 0xaf, 0x31, 0xb2, 0x1d, 0x02, 0x42, 0x00, + 0x0d, 0x42, 0x15, 0x02, 0x06, 0x2f, 0xc0, 0x00, 0x46, 0x7a, 0x0e, 0x36, + 0x2f, 0x40, 0x43, 0x26, 0x16, 0x31, 0x2f, 0x00, 0x43, 0xbd, 0x01, 0xd4, + 0x2f, 0x40, 0x43, 0x0e, 0x03, 0x71, 0x2f, 0x00, 0x42, 0x27, 0x01, 0x4a, + 0x2f, 0x00, 0x44, 0xa1, 0xf0, 0xcd, 0x2f, 0x40, 0x44, 0xb2, 0x67, 0x86, + 0x2f, 0x00, 0x43, 0x77, 0x0e, 0xd2, 0x2f, 0x40, 0x43, 0xdb, 0x09, 0x8c, + 0x2f, 0x00, 0x42, 0x68, 0x00, 0x61, 0x2f, 0x40, 0x43, 0x3e, 0x01, 0x0f, + 0x2f, 0x00, 0x42, 0x60, 0x07, 0xbc, 0x2f, 0x00, 0x4c, 0x70, 0x80, 0xb1, + 0x2f, 0x40, 0xa1, 0xec, 0x01, 0xa3, 0xdd, 0x01, 0xa5, 0xc4, 0x01, 0xa8, + 0x99, 0x01, 0xa9, 0x8a, 0x01, 0x43, 0x3b, 0x04, 0x6a, 0x2f, 0x00, 0xac, + 0x6e, 0x44, 0x5e, 0x07, 0x29, 0x2f, 0x00, 0x44, 0x5a, 0xaf, 0x39, 0x2f, + 0x00, 0x44, 0x41, 0x0b, 0xb3, 0x2f, 0x00, 0xb0, 0x3a, 0x45, 0xd7, 0x05, + 0x45, 0x2f, 0x00, 0xb4, 0x0c, 0x42, 0x42, 0x0b, 0x47, 0x2f, 0x00, 0x44, + 0x48, 0x50, 0x62, 0x2f, 0x40, 0x43, 0x1a, 0x00, 0x74, 0x2f, 0x00, 0xa5, + 0x14, 0xaf, 0x01, 0xff, 0x42, 0xcd, 0x05, 0x6f, 0x2f, 0x00, 0xf0, 0x4c, + 0x2f, 0xc0, 0x00, 0x44, 0x2b, 0x30, 0x89, 0x2f, 0x40, 0x42, 0x57, 0x00, + 0x53, 0x2f, 0x00, 0xf0, 0x3b, 0x2f, 0x40, 0xa5, 0x12, 0x44, 0x59, 0xbf, + 0x70, 0x2f, 0x00, 0x43, 0xcd, 0x02, 0x14, 0x2f, 0x00, 0x44, 0x61, 0xf2, + 0x2c, 0x2f, 0x40, 0x42, 0x17, 0x00, 0x6d, 0x2f, 0x00, 0x43, 0x03, 0x41, + 0x94, 0x2f, 0x40, 0xa1, 0x06, 0x43, 0x0c, 0x1d, 0x5a, 0x2f, 0x40, 0x42, + 0xa4, 0x02, 0x03, 0x2f, 0x00, 0x42, 0x32, 0x00, 0xaa, 0x2f, 0x40, 0x46, + 0xa6, 0xda, 0x67, 0x2f, 0x00, 0x42, 0x60, 0x5b, 0x77, 0x2f, 0x40, 0xa5, + 0x1a, 0xaf, 0x01, 0xff, 0x42, 0x1b, 0x05, 0x37, 0x2f, 0x00, 0x04, 0x71, + 0xf2, 0x01, 0xff, 0x4a, 0x81, 0xa7, 0xab, 0x2f, 0x00, 0x45, 0x23, 0x9e, + 0x33, 0x2f, 0x40, 0x42, 0xeb, 0x0a, 0x7a, 0x2f, 0x00, 0x42, 0x60, 0x07, + 0x99, 0x2f, 0x40, 0x42, 0x13, 0x00, 0x19, 0x2f, 0x00, 0x44, 0xe5, 0x7b, + 0x04, 0x2f, 0x00, 0xe5, 0x92, 0x2f, 0x00, 0x42, 0x24, 0x00, 0x83, 0x2f, + 0x40, 0x45, 0x18, 0xe7, 0x20, 0x2f, 0x00, 0x44, 0x76, 0x06, 0x42, 0x2f, + 0x40, 0x4e, 0x95, 0x76, 0xbf, 0x2f, 0x00, 0x42, 0xb8, 0x04, 0xc4, 0x2f, + 0x00, 0xf9, 0x48, 0x2f, 0x40, 0xa1, 0x26, 0x42, 0x05, 0x00, 0x9a, 0x2f, + 0x00, 0xa9, 0x0c, 0x43, 0xf2, 0xc8, 0x27, 0x2f, 0x00, 0x42, 0x42, 0x0b, + 0x9b, 0x2f, 0x40, 0x42, 0x73, 0x02, 0x76, 0x2f, 0x00, 0x4c, 0x45, 0x3b, + 0x15, 0x2f, 0x00, 0x43, 0x32, 0x00, 0x2e, 0x2f, 0x40, 0x42, 0x9e, 0x01, + 0xac, 0x2f, 0x00, 0xf0, 0x41, 0x2f, 0x00, 0xf4, 0xcf, 0x2f, 0x40, 0x42, + 0x3f, 0x00, 0x97, 0x2f, 0x00, 0x43, 0x13, 0x01, 0x7e, 0x2f, 0x00, 0x44, + 0x14, 0x01, 0x12, 0x2f, 0x00, 0xb2, 0x01, 0xff, 0x45, 0x6c, 0xd6, 0x1b, + 0x2f, 0x00, 0x46, 0xb4, 0xde, 0x5e, 0x2f, 0x40, 0x42, 0xe2, 0x1a, 0x7c, + 0x2f, 0x00, 0x42, 0xcd, 0x05, 0x00, 0x2f, 0x80, 0x0f, 0xb0, 0x01, 0xff, + 0x46, 0xb8, 0x3a, 0x10, 0x2f, 0x00, 0x44, 0x99, 0x89, 0x87, 0x2f, 0x40, + 0x44, 0x99, 0xf2, 0x30, 0x2f, 0x40, 0x42, 0xed, 0x05, 0x79, 0x2f, 0x00, + 0xaf, 0x01, 0xff, 0x42, 0x46, 0x03, 0xd0, 0x2f, 0x00, 0xf4, 0x46, 0x2f, + 0x40, 0x42, 0x1a, 0x00, 0x08, 0x2f, 0x00, 0xa5, 0x3a, 0xa9, 0x2c, 0xaf, + 0x01, 0xff, 0x42, 0x10, 0x00, 0x49, 0x2f, 0x00, 0xb2, 0x15, 0xb5, 0x01, + 0xff, 0xae, 0x06, 0x42, 0x53, 0x00, 0x1d, 0x2f, 0x40, 0xe4, 0xa9, 0x2f, + 0x00, 0x44, 0x55, 0x07, 0x2d, 0x2f, 0x40, 0x44, 0x58, 0x07, 0xa0, 0x2f, + 0x00, 0x43, 0x32, 0x13, 0x85, 0x2f, 0x40, 0x44, 0xb4, 0x21, 0xc9, 0x2f, + 0x00, 0x46, 0x54, 0xde, 0x82, 0x2f, 0x40, 0x42, 0x8a, 0x00, 0x81, 0x2f, + 0x00, 0x43, 0xd7, 0x02, 0x60, 0x2f, 0x40, 0xa1, 0x39, 0xa5, 0x1f, 0xa9, + 0x0d, 0x43, 0xd8, 0x02, 0xa7, 0x2f, 0xc0, 0x00, 0x47, 0x96, 0xcd, 0x35, + 0x2f, 0x40, 0xe4, 0x07, 0x2f, 0x00, 0x42, 0x0c, 0x1a, 0x63, 0x2f, 0x00, + 0x42, 0xcd, 0x05, 0x01, 0x2f, 0x40, 0xa1, 0x0c, 0x42, 0xd5, 0x18, 0xb2, + 0x2f, 0x00, 0x42, 0xbc, 0x11, 0x09, 0x2f, 0x40, 0xe6, 0xb4, 0x2f, 0x00, + 0x44, 0x0f, 0x1a, 0xb0, 0x2f, 0x40, 0x42, 0x36, 0x01, 0x4b, 0x2f, 0x00, + 0x42, 0x2a, 0x02, 0x2a, 0x2f, 0x40, 0x42, 0x04, 0x00, 0x5f, 0x2f, 0x00, + 0xf2, 0x78, 0x2f, 0x40, 0x42, 0x73, 0x02, 0x0e, 0x2f, 0x00, 0xae, 0x01, + 0xff, 0x42, 0x6d, 0x14, 0x28, 0x2f, 0x00, 0x44, 0xae, 0x0a, 0x8d, 0x2f, + 0x40, 0xa1, 0x30, 0xa5, 0x1c, 0x4f, 0x6a, 0x6e, 0x16, 0x2f, 0x00, 0xaf, + 0x01, 0xff, 0x42, 0x55, 0x05, 0x05, 0x2f, 0x00, 0xb2, 0x01, 0xff, 0xee, + 0x93, 0x2f, 0x00, 0x42, 0x46, 0x03, 0xba, 0x2f, 0x40, 0xa1, 0x06, 0x42, + 0xf2, 0x1b, 0xc7, 0x2f, 0x40, 0xe4, 0xb8, 0x2f, 0x00, 0x42, 0x34, 0x00, + 0x3c, 0x2f, 0x40, 0x42, 0x46, 0x00, 0xbd, 0x2f, 0x00, 0xac, 0x06, 0x42, + 0x1b, 0x00, 0x3f, 0x2f, 0x40, 0x44, 0x3d, 0xef, 0x3d, 0x2f, 0x00, 0x4c, + 0xc5, 0x75, 0x59, 0x2f, 0x40, 0x43, 0x8a, 0x00, 0xa8, 0x2f, 0x00, 0x44, + 0xc0, 0x7c, 0xc1, 0x2f, 0x00, 0xef, 0x21, 0x2f, 0x80, 0x11, 0x02, 0x71, + 0x00, 0x01, 0xff, 0x42, 0x9e, 0x01, 0x72, 0x2f, 0x00, 0x42, 0xee, 0x00, + 0x8b, 0x2f, 0x40, 0x47, 0x8f, 0xcd, 0x22, 0x2f, 0x00, 0x42, 0xe2, 0x1a, + 0xa6, 0x2f, 0x40, 0xa1, 0x46, 0x46, 0x0d, 0x1a, 0x7b, 0x2f, 0x00, 0xa9, + 0x26, 0xac, 0x1a, 0x43, 0xbf, 0x6c, 0x9c, 0x2f, 0x00, 0xb2, 0x06, 0x42, + 0x42, 0x00, 0x51, 0x2f, 0x40, 0x46, 0x92, 0xd9, 0xb9, 0x2f, 0x00, 0x42, + 0xc1, 0x18, 0xcc, 0x2f, 0x40, 0x43, 0xfb, 0x38, 0xd5, 0x2f, 0x00, 0xf9, + 0xb6, 0x2f, 0x40, 0x43, 0x02, 0x24, 0x65, 0x2f, 0x00, 0x43, 0xca, 0x00, + 0xbe, 0x2f, 0x00, 0x42, 0x88, 0x00, 0x55, 0x2f, 0x00, 0x42, 0xa4, 0x02, + 0xc2, 0x2f, 0x40, 0x42, 0x73, 0x02, 0xaf, 0x2f, 0x00, 0x42, 0x1d, 0x01, + 0x5b, 0x2f, 0x00, 0x44, 0x0f, 0x1a, 0x57, 0x2f, 0x40, 0xa1, 0x2d, 0x44, + 0xc9, 0x00, 0x0b, 0x2f, 0x00, 0x49, 0xf7, 0xbb, 0xcb, 0x2f, 0x00, 0xae, + 0x13, 0x43, 0xca, 0x1d, 0xd1, 0x2f, 0x80, 0x06, 0x42, 0x4d, 0x00, 0x6c, + 0x2f, 0x40, 0x43, 0xa1, 0x01, 0x23, 0x2f, 0x40, 0x47, 0x9f, 0x68, 0x1e, + 0x2f, 0x00, 0x43, 0x8b, 0x00, 0x0a, 0x2f, 0x40, 0xf2, 0x7f, 0x2f, 0x80, + 0x04, 0xf4, 0xb7, 0x2f, 0x40, 0x42, 0x53, 0x00, 0x1f, 0x2f, 0x40, 0xa5, + 0x61, 0xa9, 0x47, 0xaf, 0x13, 0xb2, 0x01, 0xff, 0x44, 0xe5, 0x25, 0xd3, + 0x2f, 0x00, 0x42, 0x48, 0x04, 0xce, 0x2f, 0x00, 0xf9, 0x32, 0x2f, 0x40, + 0x44, 0x90, 0x1d, 0x4f, 0x2f, 0x00, 0xe7, 0x5d, 0x2f, 0x00, 0x42, 0x0c, + 0x00, 0x3e, 0x2f, 0x00, 0xf4, 0x02, 0x2f, 0x80, 0x0c, 0x46, 0xd6, 0xe0, + 0x58, 0x2f, 0x00, 0x46, 0x48, 0xe1, 0x0c, 0x2f, 0x40, 0x04, 0x77, 0x00, + 0x01, 0xff, 0x45, 0x51, 0xe5, 0x34, 0x2f, 0x00, 0x44, 0x7d, 0x61, 0x68, + 0x2f, 0x40, 0x44, 0x6e, 0x02, 0x43, 0x2f, 0x00, 0xb3, 0x06, 0x48, 0xd8, + 0xba, 0x18, 0x2f, 0x40, 0xe8, 0x6b, 0x2f, 0x00, 0x48, 0x61, 0xa5, 0xa4, + 0x2f, 0x40, 0x43, 0x74, 0x0f, 0x4d, 0x2f, 0x00, 0x42, 0x33, 0x00, 0xc5, + 0x2f, 0x40, 0xa1, 0x43, 0x44, 0x28, 0x4a, 0x26, 0x2f, 0x00, 0x43, 0xb8, + 0x27, 0xa2, 0x2f, 0x00, 0xac, 0x1f, 0xaf, 0x01, 0xff, 0x43, 0x86, 0x08, + 0x8a, 0x2f, 0x00, 0x45, 0xc1, 0xe8, 0x50, 0x2f, 0x00, 0x44, 0x65, 0xf2, + 0x2b, 0x2f, 0x00, 0x43, 0x32, 0x00, 0x0d, 0x2f, 0x00, 0xf7, 0x5c, 0x2f, + 0x40, 0xa1, 0x0c, 0x43, 0x56, 0x48, 0x1a, 0x2f, 0x00, 0x45, 0x49, 0x88, + 0x90, 0x2f, 0x40, 0xee, 0x52, 0x2f, 0x00, 0xf7, 0x56, 0x2f, 0x40, 0x42, + 0x34, 0x00, 0x9e, 0x2f, 0x00, 0x46, 0x3b, 0xcf, 0xc0, 0x2f, 0x00, 0x42, + 0x32, 0x00, 0x73, 0x2f, 0x40, 0xa1, 0x5f, 0x43, 0x13, 0x1f, 0x96, 0x2f, + 0x00, 0xa9, 0x47, 0xac, 0x33, 0xaf, 0x15, 0xb2, 0x01, 0xff, 0x44, 0xac, + 0x25, 0x40, 0x2f, 0x00, 0x45, 0x95, 0xe7, 0x3a, 0x2f, 0x00, 0x43, 0x30, + 0x7c, 0x80, 0x2f, 0x40, 0x42, 0x8a, 0x00, 0x88, 0x2f, 0x00, 0x42, 0x4c, + 0x0d, 0x9d, 0x2f, 0x00, 0x4b, 0xf9, 0x9e, 0x66, 0x2f, 0x00, 0x42, 0xcd, + 0x05, 0xbb, 0x2f, 0x00, 0xf7, 0x38, 0x2f, 0x40, 0x43, 0x0e, 0x03, 0xca, + 0x2f, 0x00, 0x43, 0xb4, 0x2d, 0x8e, 0x2f, 0x00, 0x42, 0xd6, 0x13, 0xad, + 0x2f, 0x40, 0xe7, 0x24, 0x2f, 0x00, 0x42, 0xab, 0x01, 0xc3, 0x2f, 0x00, + 0x44, 0xee, 0x05, 0x9f, 0x2f, 0x40, 0x44, 0x89, 0xef, 0x98, 0x2f, 0x00, + 0x44, 0x99, 0x98, 0x75, 0x2f, 0x40, 0x44, 0x3a, 0x4b, 0x1c, 0x2f, 0x00, + 0x42, 0x1b, 0x00, 0x7d, 0x2f, 0x00, 0x02, 0xcf, 0x00, 0x06, 0x42, 0x6d, + 0x43, 0x44, 0x2f, 0x40, 0x43, 0xd2, 0x05, 0x84, 0x2f, 0x00, 0x42, 0xd1, + 0x00, 0x6e, 0x2f, 0x40, 0xa5, 0x75, 0xa6, 0x58, 0x44, 0xcf, 0x2a, 0xc9, + 0xd2, 0x81, 0x4b, 0x43, 0x0e, 0x0b, 0xc1, 0xd2, 0x01, 0xb3, 0x29, 0xb4, + 0x06, 0x44, 0x43, 0x1e, 0xc0, 0xd2, 0x41, 0x42, 0x92, 0x01, 0xca, 0xd2, + 0x01, 0xa8, 0x0d, 0xb7, 0x01, 0xff, 0x44, 0xe7, 0x2b, 0xcc, 0xd2, 0x01, + 0xef, 0xc2, 0xd2, 0x41, 0x46, 0x96, 0x5a, 0xcd, 0xd2, 0x01, 0x43, 0x26, + 0x01, 0xc3, 0xd2, 0x41, 0x44, 0xc9, 0x1d, 0xc7, 0xd2, 0x81, 0x0d, 0x42, + 0x01, 0x26, 0xc6, 0xd2, 0xc1, 0x00, 0x44, 0x0a, 0x18, 0xd0, 0xd2, 0x41, + 0x44, 0x0a, 0x18, 0xd1, 0xd2, 0x41, 0x44, 0x0a, 0x18, 0xd3, 0xd2, 0x41, + 0xa9, 0x0d, 0x43, 0xf6, 0x06, 0xc4, 0xd2, 0xc1, 0x00, 0x44, 0x0a, 0x18, + 0xce, 0xd2, 0x41, 0x45, 0x09, 0x18, 0xcf, 0xd2, 0x01, 0x42, 0x32, 0x00, + 0xc5, 0xd2, 0x41, 0x44, 0xc9, 0x00, 0xc8, 0xd2, 0x81, 0x06, 0x45, 0xb4, + 0x6f, 0xcb, 0xd2, 0x41, 0x43, 0xc4, 0x09, 0xd2, 0xd2, 0x41, 0x51, 0xdc, + 0x57, 0xbb, 0x10, 0x01, 0xa4, 0x80, 0x03, 0x50, 0xd6, 0x62, 0xbc, 0x10, + 0x01, 0x07, 0xec, 0x05, 0x70, 0x4b, 0x43, 0xa0, 0xbd, 0x10, 0x81, 0x63, + 0xb3, 0x33, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x20, 0xe5, 0xb5, 0x10, + 0x01, 0xe9, 0xb1, 0x10, 0x81, 0x13, 0xef, 0xb7, 0x10, 0x01, 0xf5, 0xb3, + 0x10, 0x81, 0x06, 0x49, 0x22, 0xc1, 0xc2, 0x10, 0x41, 0xf5, 0xb4, 0x10, + 0x41, 0xe9, 0xb2, 0x10, 0x41, 0xe1, 0xb0, 0x10, 0x01, 0xe9, 0xb6, 0x10, + 0x01, 0xf5, 0xb8, 0x10, 0x41, 0x4b, 0xf9, 0x26, 0xbe, 0x10, 0x01, 0x04, + 0x5b, 0x03, 0x01, 0xff, 0x48, 0x3c, 0x16, 0x81, 0x10, 0x01, 0x4b, 0xd7, + 0x23, 0x80, 0x10, 0x01, 0x45, 0x3f, 0x3f, 0xba, 0x10, 0x01, 0x02, 0x02, + 0x00, 0x01, 0xff, 0x44, 0xe5, 0x23, 0xb9, 0x10, 0x01, 0x45, 0xec, 0x4b, + 0x82, 0x10, 0x41, 0x46, 0x5b, 0x00, 0xcd, 0x10, 0x41, 0xe1, 0x83, 0x10, + 0x81, 0xf4, 0x01, 0xa2, 0xe7, 0x01, 0xa3, 0xda, 0x01, 0xa4, 0xbb, 0x01, + 0xe5, 0x89, 0x10, 0x01, 0xa7, 0xaa, 0x01, 0x42, 0x22, 0x00, 0xaf, 0x10, + 0x01, 0xe9, 0x85, 0x10, 0x81, 0x9a, 0x01, 0xaa, 0x8d, 0x01, 0xab, 0x80, + 0x01, 0x42, 0x74, 0x00, 0xaa, 0x10, 0x01, 0x42, 0x6c, 0x00, 0xa7, 0x10, + 0x01, 0xae, 0x5c, 0xef, 0x8b, 0x10, 0x01, 0xb0, 0x4c, 0xb2, 0x40, 0xb3, + 0x2e, 0xb4, 0x15, 0xf5, 0x87, 0x10, 0x81, 0x0c, 0x42, 0xf5, 0x0a, 0xab, + 0x10, 0x01, 0x42, 0xbc, 0x22, 0xa8, 0x10, 0x41, 0xf5, 0x88, 0x10, 0x41, + 0xe1, 0x9e, 0x10, 0x01, 0x42, 0x22, 0x00, 0x9f, 0x10, 0x01, 0xb4, 0x01, + 0xff, 0xe1, 0x97, 0x10, 0x01, 0x42, 0x22, 0x00, 0x98, 0x10, 0x41, 0xe1, + 0xae, 0x10, 0x01, 0x42, 0x22, 0x00, 0xac, 0x10, 0x01, 0x42, 0x40, 0x06, + 0xad, 0x10, 0x41, 0xe1, 0xa9, 0x10, 0x01, 0x42, 0x22, 0x00, 0x9c, 0x10, + 0x41, 0xe1, 0xa3, 0x10, 0x01, 0x42, 0x22, 0x00, 0xa4, 0x10, 0x41, 0xe1, + 0xa2, 0x10, 0x01, 0x42, 0x24, 0x02, 0x91, 0x10, 0x01, 0x42, 0x2a, 0x05, + 0x9d, 0x10, 0x01, 0x42, 0xbc, 0x22, 0x96, 0x10, 0x41, 0xe1, 0x8d, 0x10, + 0x01, 0x42, 0x22, 0x00, 0x8e, 0x10, 0x41, 0xe1, 0x94, 0x10, 0x01, 0x42, + 0x22, 0x00, 0x95, 0x10, 0x41, 0xe9, 0x86, 0x10, 0x41, 0xe1, 0x8f, 0x10, + 0x01, 0x42, 0x22, 0x00, 0x90, 0x10, 0x41, 0xe1, 0xa0, 0x10, 0x01, 0xa4, + 0x06, 0x42, 0x22, 0x00, 0xa1, 0x10, 0x41, 0xe1, 0x99, 0x10, 0x01, 0x43, + 0xe7, 0x4b, 0x9a, 0x10, 0x01, 0x42, 0x22, 0x00, 0x9b, 0x10, 0x41, 0xe1, + 0x92, 0x10, 0x01, 0x42, 0x22, 0x00, 0x93, 0x10, 0x41, 0xe1, 0xa5, 0x10, + 0x01, 0x42, 0x22, 0x00, 0xa6, 0x10, 0x41, 0xe1, 0x84, 0x10, 0x01, 0xe9, + 0x8a, 0x10, 0x01, 0xf5, 0x8c, 0x10, 0x41, 0x44, 0x73, 0x20, 0xc0, 0x10, + 0x01, 0x06, 0x3c, 0x01, 0x01, 0xff, 0x45, 0x16, 0x96, 0xc1, 0x10, 0x01, + 0x4c, 0xf8, 0x26, 0xbf, 0x10, 0x41, 0xa1, 0x37, 0xa5, 0x29, 0x52, 0xa5, + 0x52, 0xe9, 0xf9, 0x01, 0xaf, 0x15, 0xb5, 0x01, 0xff, 0x46, 0xf6, 0xdb, + 0x39, 0xf9, 0x01, 0x42, 0xb4, 0x01, 0xb5, 0x26, 0x00, 0x45, 0xe8, 0xe9, + 0x43, 0x26, 0x40, 0x42, 0x9e, 0x01, 0x1d, 0x2a, 0x00, 0x46, 0x8a, 0xe1, + 0x79, 0xf5, 0x41, 0x43, 0x42, 0x46, 0x56, 0xf4, 0x01, 0x47, 0xf9, 0xd2, + 0xbc, 0xfa, 0x41, 0x4c, 0x6f, 0x8d, 0x83, 0xf3, 0x01, 0x07, 0x7a, 0xd4, + 0x83, 0x05, 0xf2, 0xd9, 0xfa, 0x01, 0x07, 0x1a, 0xd7, 0x01, 0xff, 0x0f, + 0x3d, 0x33, 0xe3, 0x04, 0x06, 0xef, 0x06, 0x9c, 0x04, 0x02, 0x68, 0x00, + 0xdb, 0x01, 0x02, 0xbb, 0x09, 0x70, 0x4f, 0x93, 0x72, 0xc2, 0xa9, 0x00, + 0x05, 0x5a, 0x03, 0x47, 0x53, 0xcc, 0x4d, 0xcd, 0xa9, 0x00, 0x0b, 0x40, + 0x77, 0x01, 0xff, 0x4a, 0x57, 0xa9, 0xbb, 0xa9, 0x00, 0x45, 0xde, 0xe9, + 0xbc, 0xa9, 0x00, 0x44, 0x09, 0xd6, 0xb8, 0xa9, 0x80, 0x23, 0xb4, 0x0d, + 0x44, 0x2d, 0xf3, 0xb6, 0xa9, 0xc0, 0x00, 0x46, 0x30, 0xd8, 0xb7, 0xa9, + 0x40, 0xa1, 0x06, 0x45, 0x51, 0x12, 0xb5, 0xa9, 0x40, 0x44, 0x2f, 0x0b, + 0xba, 0xa9, 0x00, 0x44, 0xd1, 0xeb, 0xb4, 0xa9, 0x40, 0x47, 0x50, 0xcd, + 0xb9, 0xa9, 0x40, 0x45, 0x10, 0xe5, 0x81, 0xa9, 0x80, 0x12, 0x45, 0x21, + 0xe8, 0x82, 0xa9, 0x00, 0x49, 0xef, 0xbd, 0x80, 0xa9, 0x00, 0x47, 0x83, + 0xd7, 0x83, 0xa9, 0x40, 0x45, 0xe6, 0xe1, 0xb3, 0xa9, 0x40, 0x03, 0x79, + 0x1a, 0x11, 0x02, 0x1d, 0x01, 0x01, 0xff, 0x43, 0x21, 0x70, 0xc0, 0xa9, + 0x00, 0x47, 0x22, 0xd5, 0xcf, 0xa9, 0x40, 0xa1, 0x3d, 0x49, 0xbc, 0xba, + 0xdf, 0xa9, 0x00, 0xac, 0x20, 0x45, 0x62, 0xe8, 0xc4, 0xa9, 0x00, 0xb0, + 0x0c, 0x4d, 0x45, 0x89, 0xde, 0xa9, 0x00, 0x45, 0x59, 0xec, 0xc6, 0xa9, + 0x40, 0x46, 0xb6, 0xd9, 0xc7, 0xa9, 0x00, 0x46, 0xd9, 0x4d, 0xcc, 0xa9, + 0x40, 0x45, 0x77, 0xe7, 0xc8, 0xa9, 0x00, 0xb5, 0x01, 0xff, 0x43, 0x41, + 0x00, 0xc5, 0xa9, 0x00, 0x44, 0x18, 0x73, 0xc9, 0xa9, 0x40, 0x43, 0x85, + 0x11, 0xca, 0xa9, 0x80, 0x06, 0x44, 0x69, 0xf1, 0xc3, 0xa9, 0x40, 0x45, + 0xa7, 0xb5, 0xcb, 0xa9, 0x40, 0x4c, 0x1f, 0x8f, 0xc1, 0xa9, 0x00, 0x05, + 0xee, 0x05, 0x01, 0xff, 0xe1, 0x84, 0xa9, 0x80, 0xa7, 0x02, 0x42, 0x16, + 0x00, 0xa7, 0xa9, 0x80, 0x99, 0x02, 0x42, 0x37, 0x00, 0x95, 0xa9, 0x80, + 0x8b, 0x02, 0xa4, 0xf0, 0x01, 0xe5, 0x8c, 0xa9, 0x00, 0x42, 0x24, 0x02, + 0x92, 0xa9, 0x80, 0xde, 0x01, 0x42, 0x22, 0x00, 0xb2, 0xa9, 0x00, 0xe9, + 0x86, 0xa9, 0x80, 0xc8, 0x01, 0x42, 0x56, 0x19, 0x97, 0xa9, 0x80, 0xba, + 0x01, 0x42, 0x1b, 0x02, 0x8f, 0xa9, 0x80, 0xa3, 0x01, 0x42, 0x74, 0x00, + 0xad, 0xa9, 0x00, 0x42, 0x6c, 0x00, 0xa9, 0xa9, 0x00, 0xae, 0x69, 0xef, + 0x8e, 0xa9, 0x00, 0x42, 0xbb, 0x09, 0xa5, 0xa9, 0x80, 0x4f, 0x42, 0x71, + 0x00, 0xab, 0xa9, 0x80, 0x42, 0x42, 0x40, 0x06, 0xb1, 0xa9, 0x80, 0x2a, + 0xb4, 0x10, 0xf5, 0x88, 0xa9, 0x00, 0x42, 0xa9, 0x01, 0xae, 0xa9, 0x00, + 0x42, 0xbc, 0x22, 0xaa, 0xa9, 0x40, 0xe1, 0xa0, 0xa9, 0x80, 0x0d, 0x42, + 0x12, 0x00, 0x9b, 0xa9, 0xc0, 0x00, 0x4a, 0x5e, 0x70, 0x9c, 0xa9, 0x40, + 0x46, 0x36, 0xd8, 0xa1, 0xa9, 0x40, 0x02, 0x6b, 0x00, 0x01, 0xff, 0x48, + 0x60, 0x70, 0xb0, 0xa9, 0x00, 0x44, 0x5a, 0x70, 0xaf, 0xa9, 0x40, 0x46, + 0xfa, 0xd7, 0xac, 0xa9, 0x40, 0x80, 0x01, 0xff, 0x45, 0x1a, 0xe5, 0x89, + 0xa9, 0x00, 0x45, 0x59, 0x70, 0xa6, 0xa9, 0x40, 0xe1, 0xa4, 0xa9, 0x80, + 0x21, 0x42, 0x24, 0x02, 0x94, 0xa9, 0x80, 0x0d, 0x42, 0xbc, 0x22, 0x9a, + 0xa9, 0xc0, 0x00, 0x46, 0x36, 0xd8, 0x98, 0xa9, 0x40, 0x46, 0x24, 0xd8, + 0x8a, 0xa9, 0xc0, 0x00, 0x48, 0x78, 0xc2, 0x8b, 0xa9, 0x40, 0x46, 0x36, + 0xd8, 0x9f, 0xa9, 0x40, 0x80, 0x01, 0xff, 0x45, 0x59, 0x70, 0x91, 0xa9, + 0x00, 0x45, 0x14, 0xa3, 0x90, 0xa9, 0x40, 0x4a, 0x5e, 0x70, 0x99, 0xa9, + 0x40, 0x45, 0xcd, 0xe1, 0x85, 0xa9, 0x00, 0xe9, 0x87, 0xa9, 0x40, 0x46, + 0x36, 0xd8, 0x93, 0xa9, 0x40, 0xe1, 0xa2, 0xa9, 0x80, 0x0d, 0x42, 0xf0, + 0x10, 0x9d, 0xa9, 0xc0, 0x00, 0x4a, 0x5e, 0x70, 0x9e, 0xa9, 0x40, 0x4a, + 0x5e, 0x70, 0xa3, 0xa9, 0x40, 0x46, 0x36, 0xd8, 0x96, 0xa9, 0x40, 0x46, + 0x36, 0xd8, 0xa8, 0xa9, 0x40, 0xe9, 0x8d, 0xa9, 0x40, 0x45, 0x12, 0x0b, + 0xd8, 0xa9, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xd9, 0xa9, 0x00, 0x43, + 0x0e, 0x0b, 0xd1, 0xa9, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, + 0xd0, 0xa9, 0x40, 0x44, 0x25, 0x01, 0xd3, 0xa9, 0x00, 0x42, 0x15, 0x02, + 0xd2, 0xa9, 0x40, 0x44, 0xc9, 0x1d, 0xd7, 0xa9, 0x00, 0x42, 0x01, 0x26, + 0xd6, 0xa9, 0x40, 0x43, 0xd2, 0x05, 0xd5, 0xa9, 0x00, 0x43, 0xf6, 0x06, + 0xd4, 0xa9, 0x40, 0x45, 0xed, 0xe4, 0xbf, 0xa9, 0x00, 0x45, 0xcc, 0xe7, + 0xbd, 0xa9, 0x00, 0x47, 0xab, 0xd4, 0xbe, 0xa9, 0x40, 0x4b, 0x79, 0x99, + 0xfb, 0x26, 0x00, 0x46, 0x5e, 0xda, 0xef, 0xf3, 0x01, 0x45, 0x81, 0xba, + 0x8e, 0xf3, 0x01, 0x46, 0x20, 0xdc, 0x7a, 0xf4, 0x01, 0x5a, 0x66, 0x20, + 0x04, 0x30, 0x00, 0x44, 0x69, 0xd5, 0x79, 0xf4, 0x01, 0x4b, 0x6c, 0xa1, + 0xe3, 0xf3, 0x01, 0x53, 0x5a, 0x4d, 0x30, 0xf5, 0x41, 0x53, 0xa3, 0x47, + 0x1f, 0xf9, 0x01, 0x03, 0x0e, 0x08, 0xe5, 0x14, 0x02, 0x04, 0x00, 0xc4, + 0x0d, 0xad, 0xd5, 0x0b, 0xae, 0x14, 0xb2, 0x06, 0x4e, 0x0f, 0x7f, 0xee, + 0xf3, 0x41, 0x43, 0x21, 0x24, 0xc7, 0xce, 0x01, 0x42, 0x5f, 0x03, 0xc1, + 0xce, 0x41, 0x48, 0x50, 0xc4, 0xe5, 0xf4, 0x01, 0xa3, 0x8b, 0x0b, 0xa4, + 0xf5, 0x06, 0xa6, 0xb2, 0x06, 0x06, 0x80, 0xdc, 0xa1, 0x06, 0x0f, 0xfd, + 0x71, 0xfa, 0x05, 0xb3, 0xdb, 0x02, 0x02, 0x77, 0x00, 0x9a, 0x01, 0xb6, + 0x01, 0xff, 0x02, 0x33, 0x00, 0x17, 0x07, 0x04, 0xd2, 0x01, 0xff, 0x44, + 0x58, 0x28, 0x64, 0x20, 0x00, 0x49, 0xd8, 0x20, 0x63, 0x20, 0x00, 0x45, + 0x28, 0x02, 0x62, 0x20, 0x40, 0x03, 0x41, 0x04, 0x3e, 0x04, 0x77, 0x00, + 0x01, 0xff, 0x50, 0xad, 0x00, 0xa1, 0x00, 0x00, 0x4b, 0x1f, 0x16, 0x18, + 0x2e, 0x00, 0xac, 0x18, 0x48, 0x18, 0xc9, 0x27, 0x21, 0x00, 0x49, 0x97, + 0x1b, 0xe7, 0x26, 0x00, 0x4d, 0xa6, 0x34, 0xbf, 0x00, 0x00, 0x48, 0x18, + 0xcc, 0x54, 0x20, 0x40, 0x45, 0xdd, 0x6e, 0x3e, 0x22, 0x00, 0x49, 0xc2, + 0xbd, 0x45, 0x2e, 0xc0, 0x00, 0x52, 0xe7, 0x4f, 0x46, 0x2e, 0x40, 0xa2, + 0x22, 0x05, 0x6d, 0x14, 0x12, 0x62, 0x34, 0x0c, 0xb4, 0xfb, 0x01, 0x4c, + 0x44, 0x04, 0x90, 0xfb, 0x01, 0x4c, 0x32, 0x11, 0xd9, 0x25, 0x40, 0x45, + 0xb8, 0x00, 0xb1, 0xfb, 0x01, 0x4d, 0x9e, 0x82, 0x96, 0xfb, 0x41, 0x05, + 0x0d, 0x03, 0x06, 0x45, 0xb3, 0x21, 0xd8, 0x25, 0x40, 0x47, 0x95, 0x44, + 0x8d, 0xcc, 0x01, 0x4c, 0x86, 0x0a, 0x8f, 0xcc, 0x41, 0x44, 0x98, 0x26, + 0x2b, 0x22, 0x80, 0x6a, 0xb2, 0x01, 0xff, 0x46, 0x58, 0xda, 0xba, 0x22, + 0x00, 0x4b, 0xa3, 0x3b, 0x3c, 0x2a, 0x00, 0xac, 0x3d, 0x46, 0x24, 0x16, + 0x3d, 0x20, 0x00, 0x47, 0xae, 0x0a, 0x29, 0x22, 0xc0, 0x00, 0x80, 0x01, + 0xff, 0x06, 0x5c, 0x00, 0x1d, 0x63, 0x92, 0x0a, 0x4b, 0x2a, 0x00, 0x05, + 0x51, 0x00, 0x01, 0xff, 0x43, 0x23, 0x0a, 0x40, 0x2a, 0x00, 0x4b, 0x30, + 0x30, 0x44, 0x2a, 0x00, 0x47, 0xe6, 0x7f, 0x43, 0x2a, 0x40, 0x4f, 0x13, + 0x6b, 0x49, 0x2a, 0x00, 0x45, 0x4d, 0x17, 0x47, 0x2a, 0x40, 0x11, 0x0c, + 0x5b, 0x06, 0x5a, 0x50, 0x21, 0xa4, 0x26, 0x40, 0x46, 0xb0, 0xd9, 0xf9, + 0xff, 0x00, 0x49, 0xd8, 0x20, 0xfa, 0xff, 0x00, 0x4a, 0x56, 0x86, 0xfb, + 0xff, 0x40, 0x80, 0x01, 0xff, 0xa1, 0x3a, 0x49, 0xc1, 0x58, 0xae, 0x23, + 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4d, 0x36, 0x82, 0x0e, 0x2a, 0x00, + 0x4c, 0xa9, 0x0a, 0x19, 0x2a, 0x00, 0x59, 0x98, 0x24, 0x17, 0x2a, 0x00, + 0x47, 0xe6, 0x7f, 0x1b, 0x2a, 0x00, 0x4a, 0xef, 0xb1, 0x18, 0x2a, 0x00, + 0x02, 0x42, 0x0b, 0x01, 0xff, 0x46, 0xe5, 0x59, 0x1c, 0x2a, 0x00, 0x43, + 0xb5, 0x00, 0x1a, 0x2a, 0x40, 0x56, 0xef, 0x36, 0x15, 0x2a, 0x00, 0x51, + 0x3b, 0x5f, 0x0f, 0x2a, 0x40, 0x0d, 0x9a, 0x81, 0x06, 0x4d, 0xab, 0x82, + 0x80, 0x23, 0x40, 0x06, 0xd9, 0x75, 0xd3, 0x01, 0x07, 0x7d, 0xd5, 0x01, + 0xff, 0x07, 0xec, 0x05, 0x3d, 0x07, 0xff, 0x39, 0x01, 0xff, 0x44, 0xf5, + 0x06, 0x5b, 0x0b, 0x01, 0x43, 0x0e, 0x0b, 0x58, 0x0b, 0x81, 0x1c, 0xb4, + 0x01, 0xff, 0x42, 0x92, 0x01, 0x5c, 0x0b, 0x01, 0x44, 0x25, 0x01, 0x5a, + 0x0b, 0x01, 0xb7, 0x01, 0xff, 0x44, 0xcb, 0x1d, 0x5d, 0x0b, 0x01, 0xef, + 0x59, 0x0b, 0x41, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x5e, 0x0b, 0x01, + 0x48, 0x40, 0x5e, 0x5f, 0x0b, 0x41, 0xa1, 0x7f, 0x44, 0x41, 0xef, 0x41, + 0x0b, 0x01, 0x46, 0x23, 0x4a, 0x43, 0x0b, 0x01, 0x45, 0xdd, 0xaa, 0x42, + 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x44, 0x0b, 0x81, 0x60, 0x44, 0xcd, 0xf0, + 0x4a, 0x0b, 0x01, 0x46, 0x94, 0xdd, 0x4b, 0x0b, 0x01, 0x43, 0xb4, 0x05, + 0x4c, 0x0b, 0x01, 0x43, 0xdc, 0x22, 0x4d, 0x0b, 0x01, 0x42, 0x6f, 0x02, + 0x50, 0x0b, 0x01, 0x44, 0x4c, 0xc8, 0x52, 0x0b, 0x01, 0x44, 0x76, 0x66, + 0x53, 0x0b, 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, 0x8a, 0x8a, 0x45, 0x0b, + 0x01, 0x44, 0xa1, 0x52, 0x49, 0x0b, 0x01, 0x45, 0x9b, 0x52, 0x46, 0x0b, + 0x41, 0x42, 0xb7, 0x2d, 0x55, 0x0b, 0x01, 0x43, 0xda, 0x25, 0x48, 0x0b, + 0x41, 0xa1, 0x06, 0x43, 0x7a, 0x16, 0x54, 0x0b, 0x41, 0x43, 0xad, 0xea, + 0x51, 0x0b, 0x01, 0x44, 0x49, 0xe4, 0x4e, 0x0b, 0x41, 0x42, 0x53, 0x00, + 0x47, 0x0b, 0x41, 0x44, 0x18, 0x3d, 0x40, 0x0b, 0x01, 0x43, 0x7e, 0x1a, + 0x4f, 0x0b, 0x41, 0x07, 0xec, 0x05, 0x3d, 0x07, 0xff, 0x39, 0x01, 0xff, + 0x44, 0xf5, 0x06, 0x7b, 0x0b, 0x01, 0x43, 0x0e, 0x0b, 0x78, 0x0b, 0x81, + 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x7c, 0x0b, 0x01, 0x44, 0x25, + 0x01, 0x7a, 0x0b, 0x01, 0xb7, 0x01, 0xff, 0x44, 0xcb, 0x1d, 0x7d, 0x0b, + 0x01, 0xef, 0x79, 0x0b, 0x41, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x7e, + 0x0b, 0x01, 0x48, 0x40, 0x5e, 0x7f, 0x0b, 0x41, 0x45, 0xb2, 0xad, 0x60, + 0x0b, 0x01, 0x44, 0x41, 0xef, 0x61, 0x0b, 0x01, 0x46, 0x23, 0x4a, 0x63, + 0x0b, 0x01, 0x45, 0xdd, 0xaa, 0x62, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x64, + 0x0b, 0x81, 0x54, 0x44, 0xcd, 0xf0, 0x6a, 0x0b, 0x01, 0x46, 0x94, 0xdd, + 0x6b, 0x0b, 0x01, 0x48, 0x48, 0xc8, 0x6c, 0x0b, 0x01, 0x43, 0xdc, 0x22, + 0x6d, 0x0b, 0x01, 0x42, 0x6f, 0x02, 0x6f, 0x0b, 0x01, 0xb3, 0x20, 0xb4, + 0x12, 0x4d, 0x8a, 0x8a, 0x65, 0x0b, 0x01, 0x44, 0xa1, 0x52, 0x69, 0x0b, + 0x01, 0x45, 0x9b, 0x52, 0x66, 0x0b, 0x41, 0x42, 0xb7, 0x2d, 0x72, 0x0b, + 0x01, 0x43, 0xda, 0x25, 0x68, 0x0b, 0x41, 0xa1, 0x06, 0x43, 0x7a, 0x16, + 0x71, 0x0b, 0x41, 0x43, 0xad, 0xea, 0x70, 0x0b, 0x01, 0x44, 0x49, 0xe4, + 0x6e, 0x0b, 0x41, 0x42, 0x53, 0x00, 0x67, 0x0b, 0x41, 0x06, 0xde, 0x05, + 0x0c, 0x47, 0x9a, 0xd3, 0x22, 0xf5, 0x01, 0x47, 0x16, 0x08, 0x23, 0xf5, + 0x41, 0x4f, 0x9a, 0x6b, 0x20, 0xf5, 0x01, 0x47, 0xa2, 0x6b, 0x24, 0xf5, + 0x01, 0x4d, 0xdd, 0x88, 0x21, 0xf5, 0x41, 0x53, 0x28, 0x48, 0x6c, 0x20, + 0x00, 0x52, 0x99, 0x55, 0x6a, 0x20, 0x40, 0x45, 0x94, 0x6c, 0x1e, 0x22, + 0x80, 0x33, 0x09, 0xb7, 0x5c, 0x01, 0xff, 0x4b, 0xe4, 0x9a, 0x81, 0xf4, + 0x01, 0xb3, 0x01, 0xff, 0x09, 0xd9, 0x20, 0x06, 0x45, 0xc1, 0x5c, 0x39, + 0x21, 0x40, 0x44, 0xf5, 0x06, 0x1c, 0x00, 0x00, 0x43, 0x0e, 0x0b, 0x1f, + 0x00, 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x1d, 0x00, 0x00, 0x42, + 0x15, 0x02, 0x1e, 0x00, 0x40, 0x5a, 0x92, 0x1e, 0xde, 0x29, 0x40, 0x42, + 0xad, 0x00, 0x84, 0x00, 0x80, 0x85, 0x04, 0xa9, 0x01, 0xff, 0x4d, 0x62, + 0x80, 0xb9, 0x20, 0x00, 0x08, 0x68, 0xc4, 0x01, 0xff, 0x53, 0xef, 0x47, + 0xb4, 0xec, 0x01, 0x09, 0x1e, 0x5a, 0xd6, 0x03, 0x49, 0xf9, 0x47, 0xa0, + 0xec, 0x01, 0x07, 0xff, 0x39, 0x0c, 0x4b, 0xc6, 0x65, 0xac, 0xec, 0x01, + 0x4a, 0xb9, 0xb0, 0xb0, 0xec, 0x41, 0x0a, 0xf1, 0x11, 0xa6, 0x03, 0x45, + 0x12, 0x0b, 0x78, 0xec, 0x81, 0x85, 0x03, 0xa6, 0xb7, 0x02, 0x45, 0xc2, + 0xe7, 0xa1, 0xec, 0x81, 0xa9, 0x02, 0x44, 0xf9, 0x47, 0x9e, 0xec, 0x81, + 0x9b, 0x02, 0x44, 0xcf, 0x2a, 0x79, 0xec, 0x81, 0xf8, 0x01, 0x43, 0x0e, + 0x0b, 0x71, 0xec, 0x81, 0xe1, 0x01, 0x09, 0x2a, 0x4c, 0x9f, 0x01, 0xb3, + 0x59, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x7a, 0xec, 0x81, 0x49, 0xa8, + 0x24, 0xb7, 0x01, 0xff, 0x44, 0xcb, 0x1d, 0x7b, 0xec, 0x81, 0x14, 0xef, + 0x72, 0xec, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x84, 0xec, + 0x01, 0x48, 0x40, 0x5e, 0x8d, 0xec, 0x41, 0x49, 0x3f, 0x5e, 0x96, 0xec, + 0x41, 0x44, 0x7b, 0x11, 0x7c, 0xec, 0x81, 0x16, 0x43, 0x26, 0x01, 0x73, + 0xec, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x85, 0xec, 0x01, + 0x48, 0x40, 0x5e, 0x8e, 0xec, 0x41, 0x49, 0x3f, 0x5e, 0x97, 0xec, 0x41, + 0x49, 0x3f, 0x5e, 0x95, 0xec, 0x41, 0x44, 0xc9, 0x1d, 0x77, 0xec, 0x81, + 0x22, 0x42, 0x01, 0x26, 0x76, 0xec, 0xc1, 0x00, 0x80, 0x0d, 0x42, 0x7d, + 0x11, 0x7f, 0xec, 0xc1, 0x00, 0x49, 0x3f, 0x5e, 0x9a, 0xec, 0x41, 0x47, + 0x71, 0x11, 0x88, 0xec, 0x01, 0x48, 0x40, 0x5e, 0x91, 0xec, 0x41, 0x80, + 0x0d, 0x42, 0x7d, 0x11, 0x80, 0xec, 0xc1, 0x00, 0x49, 0x3f, 0x5e, 0x9b, + 0xec, 0x41, 0x47, 0x71, 0x11, 0x89, 0xec, 0x01, 0x48, 0x40, 0x5e, 0x92, + 0xec, 0x41, 0x45, 0x12, 0x0b, 0xaa, 0xec, 0x01, 0xa6, 0x29, 0x44, 0xcf, + 0x2a, 0xab, 0xec, 0x01, 0x43, 0x0e, 0x0b, 0xa3, 0xec, 0x01, 0xb3, 0x0f, + 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xa5, 0xec, 0x01, 0x42, 0x15, 0x02, + 0xa4, 0xec, 0x41, 0x44, 0xc9, 0x1d, 0xa9, 0xec, 0x01, 0x42, 0x01, 0x26, + 0xa8, 0xec, 0x41, 0x43, 0xd2, 0x05, 0xa7, 0xec, 0x01, 0x43, 0xf6, 0x06, + 0xa6, 0xec, 0x41, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x83, 0xec, 0x01, + 0x48, 0x40, 0x5e, 0x8c, 0xec, 0x41, 0x80, 0x0d, 0x42, 0x7d, 0x11, 0x82, + 0xec, 0xc1, 0x00, 0x49, 0x3f, 0x5e, 0x9d, 0xec, 0x41, 0x47, 0x71, 0x11, + 0x8b, 0xec, 0x01, 0x48, 0x40, 0x5e, 0x94, 0xec, 0x41, 0x42, 0x1a, 0x00, + 0x9f, 0xec, 0x41, 0x42, 0x1a, 0x00, 0xa2, 0xec, 0x41, 0xa9, 0x26, 0xaf, + 0x01, 0xff, 0x43, 0x7c, 0x11, 0x7d, 0xec, 0x81, 0x16, 0x42, 0x42, 0x00, + 0x74, 0xec, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x86, 0xec, + 0x01, 0x48, 0x40, 0x5e, 0x8f, 0xec, 0x41, 0x49, 0x3f, 0x5e, 0x98, 0xec, + 0x41, 0x43, 0x52, 0x4d, 0x7e, 0xec, 0x81, 0x16, 0x42, 0x32, 0x00, 0x75, + 0xec, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x87, 0xec, 0x01, + 0x48, 0x40, 0x5e, 0x90, 0xec, 0x41, 0x49, 0x3f, 0x5e, 0x99, 0xec, 0x41, + 0x80, 0x0b, 0xf9, 0x81, 0xec, 0xc1, 0x00, 0x49, 0x3f, 0x5e, 0x9c, 0xec, + 0x41, 0x47, 0x71, 0x11, 0x8a, 0xec, 0x01, 0x48, 0x40, 0x5e, 0x93, 0xec, + 0x41, 0x43, 0x0e, 0x0b, 0xb1, 0xec, 0x01, 0xb4, 0x01, 0xff, 0x4b, 0x3d, + 0x5e, 0xb3, 0xec, 0x01, 0x42, 0x15, 0x02, 0xb2, 0xec, 0x41, 0x04, 0x0e, + 0x0b, 0x06, 0x4e, 0x24, 0x01, 0xaf, 0xec, 0x41, 0x44, 0x22, 0x00, 0xae, + 0xec, 0x01, 0x47, 0x2a, 0x01, 0xad, 0xec, 0x41, 0x57, 0x8c, 0x2c, 0xf5, + 0xfa, 0x41, 0x02, 0x14, 0x05, 0x1b, 0x02, 0x88, 0x00, 0x01, 0xff, 0x03, + 0x9a, 0x35, 0x06, 0x44, 0x2c, 0x05, 0x06, 0x22, 0x40, 0x51, 0x9c, 0x36, + 0xda, 0xf5, 0x01, 0x44, 0xf7, 0x03, 0xe1, 0x29, 0x40, 0x4c, 0x0f, 0x90, + 0xe8, 0xf4, 0x01, 0x4e, 0x2d, 0x7b, 0xdc, 0x29, 0x40, 0x46, 0x22, 0x43, + 0xb7, 0x22, 0x80, 0xde, 0x01, 0xf0, 0x7f, 0xf4, 0xc1, 0x00, 0x0e, 0x75, + 0x77, 0x01, 0xff, 0x07, 0xec, 0x05, 0x43, 0x07, 0xff, 0x39, 0x06, 0x4c, + 0x13, 0x95, 0x57, 0x08, 0x41, 0x43, 0x0e, 0x0b, 0x58, 0x08, 0x81, 0x23, + 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x5b, 0x08, 0x81, 0x13, 0x44, 0x25, + 0x01, 0x5a, 0x08, 0x01, 0xb7, 0x01, 0xff, 0x44, 0xcb, 0x1d, 0x5c, 0x08, + 0x01, 0xef, 0x59, 0x08, 0x41, 0x49, 0x3f, 0x5e, 0x5f, 0x08, 0x41, 0x80, + 0x01, 0xff, 0x47, 0x71, 0x11, 0x5d, 0x08, 0x01, 0x48, 0x40, 0x5e, 0x5e, + 0x08, 0x41, 0xa1, 0x7f, 0x44, 0x41, 0xef, 0x41, 0x08, 0x01, 0x46, 0x23, + 0x4a, 0x43, 0x08, 0x01, 0x45, 0xdd, 0xaa, 0x42, 0x08, 0x01, 0x42, 0xb0, + 0x01, 0x44, 0x08, 0x81, 0x60, 0x44, 0xcd, 0xf0, 0x4a, 0x08, 0x01, 0x46, + 0x94, 0xdd, 0x4b, 0x08, 0x01, 0x43, 0xb4, 0x05, 0x4c, 0x08, 0x01, 0x43, + 0xdc, 0x22, 0x4d, 0x08, 0x01, 0x42, 0x6f, 0x02, 0x50, 0x08, 0x01, 0x44, + 0x4c, 0xc8, 0x52, 0x08, 0x01, 0x44, 0x76, 0x66, 0x53, 0x08, 0x01, 0xb3, + 0x20, 0xb4, 0x12, 0x43, 0x8a, 0x8a, 0x45, 0x08, 0x01, 0x44, 0xa1, 0x52, + 0x49, 0x08, 0x01, 0x45, 0x9b, 0x52, 0x46, 0x08, 0x41, 0x42, 0xb7, 0x2d, + 0x55, 0x08, 0x01, 0x43, 0xda, 0x25, 0x48, 0x08, 0x41, 0xa1, 0x06, 0x43, + 0x7a, 0x16, 0x54, 0x08, 0x41, 0x43, 0xad, 0xea, 0x51, 0x08, 0x01, 0x44, + 0x49, 0xe4, 0x4e, 0x08, 0x41, 0x42, 0x53, 0x00, 0x47, 0x08, 0x41, 0x44, + 0x18, 0x3d, 0x40, 0x08, 0x01, 0x43, 0x7e, 0x1a, 0x4f, 0x08, 0x41, 0x5a, + 0xac, 0x1e, 0x53, 0x22, 0x40, 0x03, 0x9f, 0x01, 0xfa, 0x06, 0x09, 0x4f, + 0x20, 0x01, 0xff, 0x0b, 0x12, 0x5b, 0x82, 0x06, 0xa3, 0xf3, 0x05, 0x02, + 0x04, 0x00, 0xdf, 0x04, 0x52, 0x3d, 0x51, 0x2d, 0x30, 0x00, 0x49, 0x81, + 0x16, 0x02, 0x30, 0x00, 0x4f, 0xd4, 0x6d, 0x3f, 0x30, 0x00, 0x4e, 0x58, + 0x20, 0x05, 0x30, 0x00, 0x4f, 0xa5, 0x6f, 0x2a, 0x30, 0x00, 0x4b, 0x4e, + 0xa0, 0x07, 0x30, 0x00, 0x50, 0xc6, 0x66, 0x2b, 0x30, 0x00, 0x45, 0xd0, + 0x4c, 0x00, 0x30, 0x00, 0xb4, 0x06, 0x53, 0x8a, 0x4e, 0x3e, 0x30, 0x40, + 0x0a, 0xb3, 0xa7, 0xff, 0x03, 0x09, 0x46, 0xb8, 0x01, 0xff, 0x5a, 0xce, + 0x20, 0x37, 0x30, 0x00, 0x0b, 0x4c, 0x32, 0x01, 0xff, 0xa1, 0xe0, 0x03, + 0xa4, 0xf3, 0x01, 0x48, 0x18, 0xc6, 0xc1, 0x32, 0x00, 0x05, 0x2c, 0xd4, + 0x37, 0xaa, 0x20, 0x02, 0x6c, 0x00, 0x12, 0x48, 0xe0, 0xc8, 0xca, 0x32, + 0x00, 0x47, 0xaf, 0xd3, 0xc9, 0x32, 0x00, 0x49, 0x2a, 0xbf, 0xc8, 0x32, + 0x40, 0x43, 0x17, 0x41, 0xc2, 0x32, 0x00, 0xf9, 0xc4, 0x32, 0x40, 0x46, + 0xc2, 0xd9, 0xc0, 0x32, 0x00, 0xb5, 0x01, 0xff, 0x42, 0x75, 0x0b, 0xc6, + 0x32, 0x00, 0x42, 0xcd, 0x05, 0xc5, 0x32, 0x40, 0xa5, 0x9c, 0x01, 0xa6, + 0x7f, 0x44, 0xcf, 0x2a, 0x61, 0x33, 0x80, 0x72, 0x43, 0x0e, 0x0b, 0x59, + 0x33, 0x00, 0xb3, 0x50, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x58, 0x33, 0x40, + 0x42, 0x92, 0x01, 0x62, 0x33, 0x00, 0xa8, 0x34, 0xb7, 0x01, 0xff, 0xa5, + 0x04, 0xef, 0x5a, 0x33, 0x40, 0x43, 0xe8, 0x2b, 0x64, 0x33, 0x00, 0x43, + 0xcc, 0x1d, 0x6c, 0x33, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x44, 0xf5, 0x06, + 0x70, 0x33, 0x00, 0x43, 0x0e, 0x0b, 0x6d, 0x33, 0x00, 0xb4, 0x01, 0xff, + 0x44, 0x25, 0x01, 0x6f, 0x33, 0x00, 0x42, 0x15, 0x02, 0x6e, 0x33, 0x40, + 0x46, 0x96, 0x5a, 0x65, 0x33, 0x00, 0x43, 0x26, 0x01, 0x5b, 0x33, 0x40, + 0x44, 0xc9, 0x1d, 0x5f, 0x33, 0x80, 0x0d, 0x42, 0x01, 0x26, 0x5e, 0x33, + 0xc0, 0x00, 0x44, 0x0a, 0x18, 0x68, 0x33, 0x40, 0x44, 0x0a, 0x18, 0x69, + 0x33, 0x40, 0x44, 0x0a, 0x18, 0x6b, 0x33, 0x40, 0xa9, 0x0d, 0x43, 0xf6, + 0x06, 0x5c, 0x33, 0xc0, 0x00, 0x44, 0x0a, 0x18, 0x66, 0x33, 0x40, 0x45, + 0x09, 0x18, 0x67, 0x33, 0x00, 0x42, 0x32, 0x00, 0x5d, 0x33, 0x40, 0x44, + 0xc9, 0x00, 0x60, 0x33, 0x80, 0x06, 0x45, 0xb4, 0x6f, 0x63, 0x33, 0x40, + 0x43, 0xc4, 0x09, 0x6a, 0x33, 0x40, 0x03, 0x05, 0x20, 0x06, 0x47, 0xad, + 0xd0, 0xcb, 0x32, 0x40, 0xa5, 0xca, 0x01, 0xa6, 0xac, 0x01, 0x44, 0xcf, + 0x2a, 0xe8, 0x33, 0x80, 0x9e, 0x01, 0x43, 0x0e, 0x0b, 0xe0, 0x33, 0x00, + 0xb3, 0x7c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xe9, 0x33, 0x00, 0xa8, + 0x56, 0xb7, 0x01, 0xff, 0xa5, 0x04, 0xef, 0xe1, 0x33, 0x40, 0x43, 0xe8, + 0x2b, 0xeb, 0x33, 0x00, 0x43, 0xcc, 0x1d, 0xf3, 0x33, 0xc0, 0x00, 0x8d, + 0x01, 0xff, 0x45, 0x12, 0x0b, 0xfb, 0x33, 0x00, 0xa6, 0x29, 0x44, 0xcf, + 0x2a, 0xfc, 0x33, 0x00, 0x43, 0x0e, 0x0b, 0xf4, 0x33, 0x00, 0xb3, 0x0f, + 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xf6, 0x33, 0x00, 0x42, 0x15, 0x02, + 0xf5, 0x33, 0x40, 0x44, 0xc9, 0x1d, 0xfa, 0x33, 0x00, 0x42, 0x01, 0x26, + 0xf9, 0x33, 0x40, 0x43, 0xd2, 0x05, 0xf8, 0x33, 0x00, 0x43, 0xf6, 0x06, + 0xf7, 0x33, 0x40, 0x03, 0x7b, 0x11, 0x06, 0x43, 0x26, 0x01, 0xe2, 0x33, + 0x40, 0x43, 0xc4, 0x09, 0xec, 0x33, 0x00, 0xf9, 0xfd, 0x33, 0xc0, 0x00, + 0x44, 0x28, 0xbd, 0xfe, 0x33, 0x40, 0x44, 0xc9, 0x1d, 0xe6, 0x33, 0x80, + 0x0d, 0x42, 0x01, 0x26, 0xe5, 0x33, 0xc0, 0x00, 0x44, 0x0a, 0x18, 0xef, + 0x33, 0x40, 0x44, 0x0a, 0x18, 0xf0, 0x33, 0x40, 0x44, 0x0a, 0x18, 0xf2, + 0x33, 0x40, 0xa9, 0x0d, 0x43, 0xf6, 0x06, 0xe3, 0x33, 0xc0, 0x00, 0x44, + 0x0a, 0x18, 0xed, 0x33, 0x40, 0x45, 0x09, 0x18, 0xee, 0x33, 0x00, 0x42, + 0x32, 0x00, 0xe4, 0x33, 0x40, 0x44, 0xc9, 0x00, 0xe7, 0x33, 0x80, 0x06, + 0x45, 0xb4, 0x6f, 0xea, 0x33, 0x40, 0x43, 0xc4, 0x09, 0xf1, 0x33, 0x40, + 0x44, 0x25, 0xf2, 0xc3, 0x32, 0x00, 0x45, 0xc3, 0xeb, 0xc7, 0x32, 0x40, + 0xa6, 0x15, 0x43, 0x0e, 0x0b, 0x72, 0xd3, 0x01, 0xb4, 0x01, 0xff, 0x44, + 0x25, 0x01, 0x74, 0xd3, 0x01, 0x42, 0x15, 0x02, 0x73, 0xd3, 0x41, 0x43, + 0xd2, 0x05, 0x76, 0xd3, 0x01, 0x43, 0xf6, 0x06, 0x75, 0xd3, 0x41, 0x51, + 0x33, 0x2d, 0x2c, 0x30, 0x00, 0x14, 0xb4, 0x45, 0x01, 0xff, 0x09, 0x88, + 0xb5, 0x74, 0x4d, 0x2d, 0x83, 0xf4, 0x2f, 0x00, 0x55, 0xc3, 0x3b, 0xfe, + 0x2f, 0x00, 0x08, 0x84, 0x02, 0x58, 0x48, 0x3b, 0x0e, 0xfb, 0x2f, 0x00, + 0x48, 0x6d, 0x60, 0xff, 0x2f, 0x00, 0x02, 0x6f, 0x00, 0x01, 0xff, 0x49, + 0xe7, 0xb6, 0xef, 0x31, 0x00, 0x0c, 0xe3, 0x94, 0x01, 0xff, 0x45, 0x5c, + 0x00, 0xf5, 0x2f, 0x00, 0x45, 0x20, 0x07, 0xf6, 0x2f, 0x00, 0xac, 0x17, + 0x45, 0xc8, 0x00, 0xfc, 0x2f, 0x00, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x44, + 0xc3, 0x00, 0xf8, 0x2f, 0x00, 0x45, 0xc8, 0x00, 0xf9, 0x2f, 0x40, 0x43, + 0xc4, 0x00, 0xf7, 0x2f, 0x00, 0x05, 0x14, 0x01, 0x01, 0xff, 0x44, 0xc3, + 0x00, 0xfa, 0x2f, 0x00, 0x45, 0xc8, 0x00, 0xfd, 0x2f, 0x40, 0x50, 0x26, + 0x65, 0xf2, 0x2f, 0x00, 0x45, 0xc8, 0x00, 0xf0, 0x2f, 0x40, 0x45, 0x20, + 0x07, 0xf1, 0x2f, 0x00, 0x50, 0x16, 0x65, 0xf3, 0x2f, 0x40, 0x4b, 0xe3, + 0x9e, 0x06, 0x30, 0x00, 0x44, 0x14, 0x05, 0x01, 0x30, 0x40, 0x4b, 0xb0, + 0x99, 0x98, 0x31, 0x00, 0x4a, 0x89, 0xa9, 0x9e, 0x31, 0x00, 0xa6, 0x49, + 0x4b, 0xd3, 0x9c, 0x9d, 0x31, 0x00, 0x4c, 0x47, 0x91, 0x90, 0x31, 0x00, + 0xad, 0x2f, 0x48, 0x3c, 0x2d, 0x92, 0x31, 0x00, 0x4c, 0x5f, 0x94, 0x91, + 0x31, 0x00, 0x4b, 0x7f, 0xa2, 0x9a, 0x31, 0x00, 0xb4, 0x01, 0xff, 0xa8, + 0x0c, 0x47, 0xfc, 0xd3, 0x96, 0x31, 0x00, 0x47, 0x91, 0xd7, 0x93, 0x31, + 0x40, 0x48, 0x28, 0xc7, 0x9b, 0x31, 0x00, 0x48, 0x58, 0xca, 0x94, 0x31, + 0x40, 0x47, 0xc3, 0xce, 0x9f, 0x31, 0x00, 0x4a, 0x73, 0xab, 0x97, 0x31, + 0x40, 0x49, 0xb3, 0xba, 0x99, 0x31, 0x00, 0x03, 0xf6, 0x06, 0x01, 0xff, + 0x45, 0xb8, 0x00, 0x95, 0x31, 0x00, 0x47, 0x46, 0x39, 0x9c, 0x31, 0x40, + 0x04, 0x37, 0x00, 0x06, 0x4d, 0xd2, 0x82, 0xaa, 0xfa, 0x41, 0x42, 0x1e, + 0x00, 0x61, 0x22, 0x80, 0x06, 0x4e, 0x76, 0x3b, 0x67, 0x2a, 0x40, 0x55, + 0x7b, 0x38, 0xe5, 0x29, 0x40, 0xa3, 0x0c, 0x55, 0xae, 0x3b, 0xd2, 0xf3, + 0x01, 0x45, 0x00, 0xeb, 0xf8, 0x26, 0x40, 0x44, 0xc7, 0x61, 0x68, 0xf3, + 0x01, 0x43, 0xc7, 0x40, 0xca, 0xf9, 0x41, 0xa1, 0xea, 0x25, 0xa5, 0xe9, + 0x07, 0xa9, 0xd6, 0x03, 0xaf, 0x63, 0x4b, 0x74, 0xa2, 0xb4, 0x20, 0x00, + 0xb5, 0x45, 0xb9, 0x01, 0xff, 0x46, 0x74, 0xd9, 0xbb, 0xfa, 0x01, 0x44, + 0x01, 0xf0, 0xda, 0x2b, 0x80, 0x2f, 0xb0, 0x06, 0x4f, 0x74, 0x73, 0x8e, + 0x23, 0x40, 0x43, 0xb0, 0x01, 0x10, 0x20, 0x80, 0x06, 0x49, 0xd8, 0xbc, + 0x12, 0x2e, 0x40, 0x80, 0x0c, 0x46, 0xcd, 0x8f, 0x2d, 0x00, 0x00, 0x4b, + 0x63, 0x99, 0x27, 0x20, 0x40, 0x46, 0xb2, 0x21, 0x43, 0x20, 0x00, 0x4e, + 0xf7, 0x69, 0x1a, 0x2e, 0x40, 0x49, 0x21, 0x2e, 0x79, 0xf7, 0x41, 0x4a, + 0xbf, 0xaa, 0x17, 0xf9, 0x01, 0x53, 0x6c, 0x4b, 0xaf, 0xf4, 0x01, 0x49, + 0x36, 0x93, 0x2f, 0xf6, 0x01, 0xf4, 0xd6, 0xf6, 0x41, 0x43, 0x64, 0x2a, + 0x2a, 0xf5, 0x01, 0xac, 0xd7, 0x02, 0x48, 0xf9, 0x79, 0x3b, 0x22, 0x00, + 0x03, 0x9d, 0x28, 0xc0, 0x02, 0x42, 0x55, 0x05, 0x9d, 0xfa, 0x01, 0xb2, + 0x53, 0x46, 0x04, 0xe0, 0xe5, 0xf3, 0x01, 0xb4, 0x2b, 0xb5, 0x01, 0xff, + 0x46, 0xff, 0xd6, 0x1b, 0x23, 0x80, 0x1b, 0x42, 0x46, 0x03, 0x02, 0x23, + 0xc0, 0x00, 0x80, 0x01, 0xff, 0x48, 0xb3, 0x3d, 0xe0, 0xf3, 0x81, 0x06, + 0x4b, 0x29, 0xa5, 0xe1, 0xf3, 0x41, 0xf3, 0xd8, 0xf3, 0x41, 0x52, 0xd5, + 0x4f, 0xf3, 0x23, 0x40, 0x80, 0x06, 0x42, 0xd8, 0x00, 0xe8, 0xf3, 0x41, + 0x48, 0x08, 0xc4, 0x15, 0x26, 0x00, 0x43, 0xdf, 0xda, 0x2d, 0xf3, 0x01, + 0x46, 0x1a, 0xdf, 0x36, 0xf3, 0x01, 0x47, 0xf4, 0xd5, 0x68, 0x26, 0x40, + 0x08, 0x0e, 0x00, 0x16, 0x42, 0x46, 0x03, 0x0e, 0xf4, 0xc1, 0x00, 0x80, + 0x01, 0xff, 0x44, 0x0c, 0x08, 0x34, 0xf4, 0x01, 0x46, 0x68, 0xdf, 0xc7, + 0xf3, 0x41, 0xa2, 0xb1, 0x01, 0x49, 0xf9, 0xb6, 0x13, 0xcc, 0x01, 0x48, + 0xce, 0x29, 0x26, 0x20, 0x00, 0xac, 0x78, 0x55, 0xd4, 0x3c, 0xa9, 0x26, + 0x00, 0x11, 0xd7, 0x5c, 0x50, 0xb2, 0x42, 0x0a, 0xcd, 0xb0, 0x2e, 0xb4, + 0x06, 0x4b, 0x81, 0xa5, 0xb0, 0xce, 0x41, 0x02, 0x5c, 0x00, 0x06, 0x4c, + 0x0b, 0x94, 0xa5, 0xf6, 0x41, 0x44, 0xd1, 0x45, 0x7e, 0x2b, 0x00, 0x47, + 0xe6, 0x3b, 0x09, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x43, 0x9c, 0x12, + 0x88, 0x00, 0x00, 0x52, 0xa7, 0x56, 0x89, 0x00, 0x40, 0xd1, 0xba, 0x23, + 0x00, 0xd3, 0xbb, 0x23, 0x00, 0xd7, 0xbc, 0x23, 0x00, 0xd9, 0xbd, 0x23, + 0x40, 0x49, 0x9a, 0xb5, 0x9b, 0xcc, 0x01, 0x4f, 0xd5, 0x6c, 0x09, 0xcc, + 0x41, 0x44, 0x45, 0xed, 0x81, 0xfb, 0x01, 0xd2, 0x76, 0xfb, 0x01, 0xd3, + 0x77, 0xfb, 0x01, 0xd4, 0x78, 0xfb, 0x01, 0xd5, 0x79, 0xfb, 0x01, 0xd6, + 0x7a, 0xfb, 0x01, 0xd7, 0x7b, 0xfb, 0x41, 0x45, 0x07, 0xe4, 0x85, 0xcc, + 0x01, 0x04, 0xee, 0x07, 0x01, 0xff, 0x49, 0xc1, 0x58, 0xaf, 0x23, 0x00, + 0x05, 0x51, 0x00, 0x01, 0xff, 0x4f, 0x5c, 0x6d, 0x91, 0xcc, 0x01, 0xb4, + 0x01, 0xff, 0x4f, 0xf8, 0x07, 0x12, 0xce, 0x01, 0x48, 0xfe, 0x07, 0x0f, + 0xce, 0x41, 0x42, 0x17, 0x00, 0x15, 0x20, 0x00, 0x05, 0x0d, 0x03, 0x01, + 0xff, 0x47, 0x8d, 0xd1, 0x23, 0x2b, 0x00, 0x47, 0xa1, 0xd3, 0xc3, 0x2b, + 0x40, 0x44, 0x4c, 0x50, 0x6f, 0xf3, 0x01, 0x43, 0x8d, 0xb6, 0x1d, 0xf4, + 0x41, 0xe5, 0x73, 0xf5, 0x01, 0x59, 0xb1, 0x24, 0x68, 0xf6, 0xc1, 0x00, + 0x50, 0x3e, 0x11, 0x69, 0xf6, 0x41, 0x46, 0x28, 0xda, 0x3a, 0xf3, 0x01, + 0x02, 0x40, 0x00, 0xe1, 0x03, 0x49, 0x0d, 0xbb, 0x7e, 0xf9, 0x01, 0x4a, + 0x57, 0xae, 0xd5, 0xf6, 0x01, 0x4a, 0xbf, 0xaf, 0x9b, 0xf9, 0x01, 0x07, + 0x48, 0x12, 0x06, 0x4b, 0xf8, 0xa2, 0xec, 0x26, 0x40, 0x4c, 0x0b, 0x8e, + 0x9f, 0x30, 0x00, 0x4e, 0x58, 0x20, 0x9d, 0x30, 0x00, 0x07, 0xec, 0x05, + 0x06, 0x55, 0xf6, 0x3e, 0x9e, 0x30, 0x40, 0xe1, 0x42, 0x30, 0x80, 0x98, + 0x03, 0xa2, 0x81, 0x03, 0xa4, 0xea, 0x02, 0xe5, 0x48, 0x30, 0x00, 0xa7, + 0xcf, 0x02, 0xa8, 0xb8, 0x02, 0xe9, 0x44, 0x30, 0x00, 0xab, 0x9d, 0x02, + 0xad, 0x86, 0x02, 0xee, 0x93, 0x30, 0x80, 0xec, 0x01, 0xef, 0x4a, 0x30, + 0x00, 0xb0, 0xd1, 0x01, 0xb2, 0xba, 0x01, 0xb3, 0x57, 0xb4, 0x41, 0xf5, + 0x46, 0x30, 0x00, 0x42, 0x67, 0x62, 0x94, 0x30, 0x00, 0xb7, 0x25, 0xb9, + 0x17, 0xba, 0x01, 0xff, 0xe1, 0x56, 0x30, 0x00, 0xe5, 0x5c, 0x30, 0x00, + 0xe9, 0x58, 0x30, 0x00, 0xef, 0x5e, 0x30, 0x00, 0xf5, 0x5a, 0x30, 0x40, + 0xe1, 0x84, 0x30, 0x00, 0xef, 0x88, 0x30, 0x00, 0xf5, 0x86, 0x30, 0x40, + 0xe1, 0x8f, 0x30, 0x00, 0xe5, 0x91, 0x30, 0x00, 0xe9, 0x90, 0x30, 0x00, + 0xef, 0x92, 0x30, 0x40, 0xe1, 0x5f, 0x30, 0x00, 0xe5, 0x66, 0x30, 0x00, + 0xe9, 0x61, 0x30, 0x00, 0xef, 0x68, 0x30, 0x00, 0xf5, 0x64, 0x30, 0x40, + 0xe1, 0x55, 0x30, 0x00, 0xe5, 0x5b, 0x30, 0x00, 0xe9, 0x57, 0x30, 0x00, + 0x05, 0x5e, 0x07, 0x08, 0xef, 0x5d, 0x30, 0x00, 0xf5, 0x59, 0x30, 0x40, + 0xe1, 0x41, 0x30, 0x00, 0xe5, 0x47, 0x30, 0x00, 0xe9, 0x43, 0x30, 0x00, + 0xab, 0x2f, 0xef, 0x49, 0x30, 0x00, 0x42, 0x5c, 0x01, 0x63, 0x30, 0x00, + 0xf5, 0x45, 0x30, 0x00, 0xb7, 0x0f, 0xb9, 0x01, 0xff, 0xe1, 0x83, 0x30, + 0x00, 0xef, 0x87, 0x30, 0x00, 0xf5, 0x85, 0x30, 0x40, 0xe1, 0x8e, 0x30, + 0x00, 0xe5, 0x51, 0xb1, 0x01, 0xe9, 0x50, 0xb1, 0x01, 0xef, 0x52, 0xb1, + 0x41, 0xe1, 0x95, 0x30, 0x00, 0xe5, 0x96, 0x30, 0x00, 0xef, 0x32, 0xb1, + 0x41, 0xe1, 0x89, 0x30, 0x00, 0xe5, 0x8c, 0x30, 0x00, 0xe9, 0x8a, 0x30, + 0x00, 0xef, 0x8d, 0x30, 0x00, 0xf5, 0x8b, 0x30, 0x40, 0xe1, 0x71, 0x30, + 0x00, 0xe5, 0x7a, 0x30, 0x00, 0xe9, 0x74, 0x30, 0x00, 0xef, 0x7d, 0x30, + 0x00, 0xf5, 0x77, 0x30, 0x40, 0xe1, 0x6a, 0x30, 0x00, 0xe5, 0x6d, 0x30, + 0x00, 0xe9, 0x6b, 0x30, 0x00, 0xef, 0x6e, 0x30, 0x00, 0xf5, 0x6c, 0x30, + 0x40, 0xe1, 0x7e, 0x30, 0x00, 0xe5, 0x81, 0x30, 0x00, 0xe9, 0x7f, 0x30, + 0x00, 0xef, 0x82, 0x30, 0x00, 0xf5, 0x80, 0x30, 0x40, 0xe1, 0x4b, 0x30, + 0x00, 0xe5, 0x51, 0x30, 0x00, 0xe9, 0x4d, 0x30, 0x00, 0xef, 0x53, 0x30, + 0x00, 0xf5, 0x4f, 0x30, 0x40, 0xe1, 0x6f, 0x30, 0x00, 0xe5, 0x78, 0x30, + 0x00, 0xe9, 0x72, 0x30, 0x00, 0xef, 0x7b, 0x30, 0x00, 0xf5, 0x75, 0x30, + 0x40, 0xe1, 0x4c, 0x30, 0x00, 0xe5, 0x52, 0x30, 0x00, 0xe9, 0x4e, 0x30, + 0x00, 0xef, 0x54, 0x30, 0x00, 0xf5, 0x50, 0x30, 0x40, 0xe1, 0x60, 0x30, + 0x00, 0xe5, 0x67, 0x30, 0x00, 0xe9, 0x62, 0x30, 0x00, 0xef, 0x69, 0x30, + 0x00, 0xf5, 0x65, 0x30, 0x40, 0xe1, 0x70, 0x30, 0x00, 0xe5, 0x79, 0x30, + 0x00, 0xe9, 0x73, 0x30, 0x00, 0xef, 0x7c, 0x30, 0x00, 0xf5, 0x76, 0x30, + 0x40, 0x07, 0xa4, 0x80, 0x01, 0xff, 0x42, 0x7c, 0x31, 0x1f, 0xb1, 0x01, + 0x42, 0x4d, 0x00, 0x01, 0xb0, 0x41, 0x80, 0x16, 0x8d, 0x01, 0xff, 0x4b, + 0xde, 0x9c, 0x60, 0xf4, 0x01, 0x4b, 0xc1, 0xa2, 0x84, 0xf6, 0xc1, 0x00, + 0x51, 0x65, 0x57, 0x85, 0xf6, 0x41, 0x51, 0xca, 0x58, 0x06, 0xf5, 0x01, + 0x4c, 0xdb, 0x96, 0xa1, 0x26, 0x40, 0xa1, 0x8a, 0x17, 0xa2, 0x8f, 0x0f, + 0x46, 0xe8, 0xda, 0x94, 0xf9, 0x01, 0xac, 0xeb, 0x0e, 0x10, 0x66, 0x65, + 0xf0, 0x03, 0xb2, 0xe3, 0x03, 0x0b, 0x3f, 0xa5, 0x01, 0xff, 0xa1, 0xc9, + 0x03, 0xa2, 0xb4, 0x03, 0x02, 0x13, 0x05, 0x9a, 0x03, 0xa4, 0xe9, 0x02, + 0x4a, 0x01, 0xaa, 0xcf, 0x4d, 0x00, 0xa6, 0xd4, 0x02, 0xa7, 0xa1, 0x02, + 0x50, 0x86, 0x63, 0xc7, 0x4d, 0x00, 0x02, 0x9e, 0x01, 0xfb, 0x01, 0x4a, + 0x17, 0xad, 0xfb, 0x4d, 0x00, 0x02, 0xc3, 0x07, 0xe4, 0x01, 0xaf, 0xca, + 0x01, 0xb0, 0xb5, 0x01, 0x02, 0x88, 0x00, 0x9c, 0x01, 0xb3, 0x7e, 0xb4, + 0x14, 0xb7, 0x06, 0x4e, 0xf3, 0x7e, 0xc3, 0x4d, 0x40, 0x46, 0xf1, 0x88, + 0xc4, 0x4d, 0x00, 0x52, 0x1f, 0x54, 0xd1, 0x4d, 0x40, 0x03, 0xc5, 0x0b, + 0x06, 0x47, 0xfb, 0x11, 0xc9, 0x4d, 0x40, 0xa1, 0x47, 0xa3, 0x33, 0x46, + 0xb4, 0xdb, 0xe4, 0x4d, 0x00, 0x4b, 0x5a, 0x9c, 0xf8, 0x4d, 0x00, 0x4b, + 0xf1, 0x9d, 0xf9, 0x4d, 0x00, 0x56, 0xf5, 0x34, 0xf3, 0x4d, 0x00, 0x4f, + 0x2c, 0x70, 0xf5, 0x4d, 0x00, 0x4f, 0x48, 0x72, 0xc1, 0x4d, 0x00, 0xb7, + 0x01, 0xff, 0x47, 0xd1, 0xce, 0xf7, 0x4d, 0x00, 0x43, 0x5f, 0x09, 0xef, + 0x4d, 0x40, 0x47, 0x3a, 0xcf, 0xf1, 0x4d, 0x00, 0x4c, 0x3b, 0x91, 0xdd, + 0x4d, 0x00, 0x4e, 0x81, 0x7b, 0xc0, 0x4d, 0x40, 0x4c, 0x0f, 0x8d, 0xdc, + 0x4d, 0x00, 0xb2, 0x01, 0xff, 0x42, 0xa3, 0x58, 0xc6, 0x4d, 0x00, 0x4e, + 0xd9, 0x7a, 0xf2, 0x4d, 0x40, 0x05, 0x5e, 0x07, 0x0c, 0x4e, 0x3b, 0x7b, + 0xd6, 0x4d, 0x00, 0x49, 0xa8, 0xbf, 0xcb, 0x4d, 0x40, 0x4d, 0x98, 0x87, + 0xfd, 0x4d, 0x00, 0x46, 0x5e, 0xe0, 0xc8, 0x4d, 0x40, 0xb4, 0x06, 0x48, + 0x50, 0xcc, 0xf0, 0x4d, 0x40, 0x44, 0x88, 0x00, 0xe0, 0x4d, 0x00, 0x43, + 0x5d, 0x01, 0xd7, 0x4d, 0x40, 0x44, 0xcd, 0xa4, 0xca, 0x4d, 0x00, 0x47, + 0x68, 0xd5, 0xe2, 0x4d, 0x00, 0x4d, 0xd4, 0x89, 0xed, 0x4d, 0x40, 0x4a, + 0x67, 0xa8, 0xe6, 0x4d, 0x00, 0x02, 0x6e, 0x02, 0x01, 0xff, 0x47, 0x0d, + 0x17, 0xe5, 0x4d, 0x00, 0x47, 0x86, 0x66, 0xee, 0x4d, 0x40, 0x45, 0x8d, + 0xe5, 0xce, 0x4d, 0x00, 0x4b, 0x8f, 0xa4, 0xda, 0x4d, 0x40, 0x46, 0xbe, + 0xda, 0xe9, 0x4d, 0x00, 0x47, 0x2b, 0xd1, 0xde, 0x4d, 0x00, 0xae, 0x01, + 0xff, 0x48, 0xb0, 0xc5, 0xfc, 0x4d, 0x00, 0x46, 0xa2, 0xde, 0xd8, 0x4d, + 0x40, 0x51, 0x64, 0x58, 0xec, 0x4d, 0x00, 0xb2, 0x01, 0xff, 0x43, 0x0d, + 0x08, 0xd5, 0x4d, 0x00, 0x04, 0x59, 0x55, 0x01, 0xff, 0xb0, 0x06, 0x46, + 0x5e, 0xe0, 0xd9, 0x4d, 0x40, 0xaf, 0x06, 0x4c, 0x99, 0x87, 0xdb, 0x4d, + 0x40, 0x48, 0xbc, 0x52, 0xcd, 0x4d, 0x00, 0x43, 0x15, 0x01, 0xe1, 0x4d, + 0x40, 0x49, 0x4f, 0xb8, 0xcc, 0x4d, 0x00, 0x48, 0x20, 0xc9, 0xd0, 0x4d, + 0x40, 0x55, 0x62, 0x39, 0xe3, 0x4d, 0x00, 0xa5, 0x14, 0xa9, 0x06, 0x47, + 0xf0, 0xd6, 0xdf, 0x4d, 0x40, 0x59, 0x34, 0x24, 0xc2, 0x4d, 0x00, 0x48, + 0x20, 0xcb, 0xfa, 0x4d, 0x40, 0x46, 0xbe, 0xda, 0xe8, 0x4d, 0x00, 0x49, + 0x8b, 0xbb, 0xe7, 0x4d, 0x00, 0x49, 0xda, 0xc0, 0xf4, 0x4d, 0x40, 0x4c, + 0x13, 0x92, 0xeb, 0x4d, 0x00, 0xae, 0x01, 0xff, 0x45, 0x6e, 0xe6, 0xc5, + 0x4d, 0x00, 0x4a, 0xb3, 0xb1, 0xd3, 0x4d, 0x40, 0x50, 0x96, 0x62, 0xff, + 0x4d, 0x00, 0x4d, 0x8c, 0x84, 0xd4, 0x4d, 0x00, 0x4b, 0xda, 0xa1, 0xea, + 0x4d, 0x40, 0x48, 0x60, 0xc4, 0xf6, 0x4d, 0x00, 0x4f, 0x7a, 0x6d, 0xfe, + 0x4d, 0x00, 0x47, 0xd5, 0xd4, 0xd2, 0x4d, 0x40, 0xe2, 0x3f, 0xf3, 0x01, + 0x57, 0xb1, 0x2f, 0xb9, 0x22, 0x40, 0x02, 0x66, 0x2b, 0xdf, 0x0a, 0x02, + 0x08, 0x02, 0xc2, 0x0a, 0xa8, 0x99, 0x09, 0x02, 0x1e, 0x37, 0x84, 0x09, + 0xab, 0xd3, 0x07, 0xad, 0xcd, 0x06, 0xae, 0xa4, 0x05, 0x02, 0x08, 0x32, + 0x93, 0x05, 0xb2, 0x8f, 0x04, 0xb3, 0xef, 0x02, 0xb4, 0xd2, 0x01, 0x02, + 0xbd, 0x39, 0xb9, 0x01, 0xb7, 0x52, 0xb9, 0x01, 0xff, 0x02, 0x66, 0x2b, + 0x31, 0x02, 0x08, 0x32, 0x15, 0x02, 0xbd, 0x39, 0x01, 0xff, 0xd1, 0xe3, + 0xb0, 0x01, 0xd2, 0xe4, 0xb0, 0x01, 0xd3, 0xe5, 0xb0, 0x01, 0xd4, 0xe6, + 0xb0, 0x41, 0xd1, 0xe7, 0xb0, 0x01, 0xd2, 0xe8, 0xb0, 0x01, 0xd3, 0xe9, + 0xb0, 0x01, 0xd4, 0xea, 0xb0, 0x01, 0xd5, 0xeb, 0xb0, 0x01, 0xd6, 0xec, + 0xb0, 0x41, 0xd1, 0xdd, 0xb0, 0x01, 0xd2, 0xde, 0xb0, 0x01, 0xd3, 0xdf, + 0xb0, 0x01, 0xd4, 0xe0, 0xb0, 0x01, 0xd5, 0xe1, 0xb0, 0x01, 0x42, 0xa9, + 0x47, 0xe2, 0xb0, 0x41, 0x02, 0x66, 0x2b, 0x4d, 0x02, 0x08, 0x02, 0x39, + 0x02, 0x1e, 0x37, 0x21, 0x02, 0x08, 0x32, 0x01, 0xff, 0xd1, 0x16, 0xb1, + 0x01, 0xd2, 0x17, 0xb1, 0x01, 0xd3, 0x18, 0xb1, 0x01, 0xd4, 0x19, 0xb1, + 0x01, 0xd5, 0x1a, 0xb1, 0x01, 0xd6, 0x1b, 0xb1, 0x01, 0xd7, 0x1c, 0xb1, + 0x41, 0xd1, 0x0d, 0xb1, 0x01, 0xd2, 0x0e, 0xb1, 0x01, 0xd3, 0x0f, 0xb1, + 0x01, 0xd4, 0x10, 0xb1, 0x01, 0xd5, 0x11, 0xb1, 0x41, 0xd1, 0x12, 0xb1, + 0x01, 0xd2, 0x13, 0xb1, 0x01, 0xd3, 0x14, 0xb1, 0x01, 0xd4, 0x15, 0xb1, + 0x41, 0xd1, 0x08, 0xb1, 0x01, 0xd2, 0x09, 0xb1, 0x01, 0xd3, 0x0a, 0xb1, + 0x01, 0xd4, 0x0b, 0xb1, 0x01, 0xd5, 0x0c, 0xb1, 0x41, 0xd1, 0x0a, 0xb0, + 0x01, 0xd2, 0x0b, 0xb0, 0x01, 0xd3, 0x0c, 0xb0, 0x01, 0xd4, 0x0d, 0xb0, + 0x01, 0xd5, 0x0e, 0xb0, 0x41, 0x02, 0x66, 0x2b, 0x85, 0x01, 0x02, 0x08, + 0x02, 0x5d, 0x02, 0x1e, 0x37, 0x3d, 0x02, 0x08, 0x32, 0x1b, 0x02, 0xbd, + 0x39, 0x01, 0xff, 0xd1, 0x69, 0xb0, 0x01, 0xd2, 0x6a, 0xb0, 0x01, 0xd3, + 0x6b, 0xb0, 0x01, 0xd4, 0x6c, 0xb0, 0x01, 0x42, 0x1e, 0x00, 0x6d, 0xb0, + 0x41, 0xd1, 0x77, 0xb0, 0x01, 0xd2, 0x78, 0xb0, 0x01, 0xd3, 0x79, 0xb0, + 0x01, 0xd4, 0x7a, 0xb0, 0x01, 0xd5, 0x7b, 0xb0, 0x01, 0xd6, 0x7c, 0xb0, + 0x01, 0x42, 0x71, 0x00, 0x7d, 0xb0, 0x41, 0xd1, 0x62, 0xb0, 0x01, 0xd2, + 0x63, 0xb0, 0x01, 0xd3, 0x64, 0xb0, 0x01, 0xd4, 0x65, 0xb0, 0x01, 0xd5, + 0x66, 0xb0, 0x01, 0xd6, 0x67, 0xb0, 0x01, 0xd7, 0x68, 0xb0, 0x41, 0xd1, + 0x6e, 0xb0, 0x01, 0xd2, 0x6f, 0xb0, 0x01, 0xd3, 0x70, 0xb0, 0x01, 0xd4, + 0x71, 0xb0, 0x01, 0xd5, 0x72, 0xb0, 0x01, 0xd6, 0x73, 0xb0, 0x01, 0xd7, + 0x74, 0xb0, 0x01, 0xd8, 0x75, 0xb0, 0x01, 0xd9, 0x76, 0xb0, 0x41, 0xd1, + 0x5e, 0xb0, 0x01, 0xd2, 0x5f, 0xb0, 0x01, 0xd3, 0x60, 0xb0, 0x01, 0xd4, + 0x61, 0xb0, 0x41, 0x02, 0x66, 0x2b, 0x79, 0x02, 0x08, 0x02, 0x61, 0x02, + 0x1e, 0x37, 0x45, 0x02, 0x08, 0x32, 0x25, 0x02, 0xbd, 0x39, 0x01, 0xff, + 0xd1, 0x4a, 0xb0, 0x01, 0xd2, 0x4b, 0xb0, 0x01, 0xd3, 0x4c, 0xb0, 0x01, + 0xd4, 0x4d, 0xb0, 0x01, 0xd5, 0x4e, 0xb0, 0x01, 0xd6, 0x4f, 0xb0, 0x01, + 0xd7, 0x50, 0xb0, 0x01, 0xd8, 0x51, 0xb0, 0x41, 0xd1, 0x57, 0xb0, 0x01, + 0xd2, 0x58, 0xb0, 0x01, 0xd3, 0x59, 0xb0, 0x01, 0xd4, 0x5a, 0xb0, 0x01, + 0xd5, 0x5b, 0xb0, 0x01, 0xd6, 0x5c, 0xb0, 0x01, 0xd7, 0x5d, 0xb0, 0x41, + 0xd1, 0x44, 0xb0, 0x01, 0xd2, 0x45, 0xb0, 0x01, 0xd3, 0x46, 0xb0, 0x01, + 0xd4, 0x47, 0xb0, 0x01, 0xd5, 0x48, 0xb0, 0x01, 0xd6, 0x49, 0xb0, 0x41, + 0xd1, 0x52, 0xb0, 0x01, 0xd2, 0x53, 0xb0, 0x01, 0xd3, 0x54, 0xb0, 0x01, + 0xd4, 0x55, 0xb0, 0x01, 0xd5, 0x56, 0xb0, 0x41, 0xd1, 0x3c, 0xb0, 0x01, + 0xd2, 0x3d, 0xb0, 0x01, 0xd3, 0x3e, 0xb0, 0x01, 0xd4, 0x3f, 0xb0, 0x01, + 0xd5, 0x40, 0xb0, 0x01, 0xd6, 0x41, 0xb0, 0x01, 0xd7, 0x42, 0xb0, 0x01, + 0xd8, 0x43, 0xb0, 0x41, 0x02, 0x66, 0x2b, 0x6d, 0x02, 0x08, 0x02, 0x59, + 0x02, 0x1e, 0x37, 0x39, 0x02, 0x08, 0x32, 0x1d, 0x02, 0xbd, 0x39, 0x01, + 0xff, 0xd1, 0xf8, 0xb0, 0x01, 0xd2, 0xf9, 0xb0, 0x01, 0xd3, 0xfa, 0xb0, + 0x01, 0xd4, 0xfb, 0xb0, 0x01, 0xd5, 0xfc, 0xb0, 0x01, 0xd6, 0xfd, 0xb0, + 0x41, 0xd1, 0x02, 0xb1, 0x01, 0xd2, 0x03, 0xb1, 0x01, 0xd3, 0x04, 0xb1, + 0x01, 0xd4, 0x05, 0xb1, 0x01, 0xd5, 0x06, 0xb1, 0x01, 0xd6, 0x07, 0xb1, + 0x41, 0xd1, 0xf1, 0xb0, 0x01, 0xd2, 0xf2, 0xb0, 0x01, 0xd3, 0xf3, 0xb0, + 0x01, 0xd4, 0xf4, 0xb0, 0x01, 0xd5, 0xf5, 0xb0, 0x01, 0xd6, 0xf6, 0xb0, + 0x01, 0xd7, 0xf7, 0xb0, 0x41, 0xd1, 0xfe, 0xb0, 0x01, 0xd2, 0xff, 0xb0, + 0x01, 0xd3, 0x00, 0xb1, 0x01, 0xd4, 0x01, 0xb1, 0x41, 0xd1, 0xed, 0xb0, + 0x01, 0xd2, 0xee, 0xb0, 0x01, 0xd3, 0xef, 0xb0, 0x01, 0xd4, 0xf0, 0xb0, + 0x41, 0xd1, 0x14, 0xb0, 0x01, 0xd2, 0x15, 0xb0, 0x01, 0xd3, 0x16, 0xb0, + 0x41, 0x07, 0xce, 0xcd, 0x99, 0x01, 0x02, 0x66, 0x2b, 0x71, 0x02, 0x08, + 0x02, 0x4f, 0x02, 0x1e, 0x37, 0x29, 0x02, 0x08, 0x32, 0x11, 0x02, 0xbd, + 0x39, 0x01, 0xff, 0xd1, 0x8f, 0xb0, 0x01, 0xd2, 0x90, 0xb0, 0x01, 0xd3, + 0x91, 0xb0, 0x41, 0xd1, 0x99, 0xb0, 0x01, 0xd2, 0x9a, 0xb0, 0x01, 0xd3, + 0x9b, 0xb0, 0x01, 0xd4, 0x9c, 0xb0, 0x01, 0xd5, 0x9d, 0xb0, 0x41, 0xd1, + 0x87, 0xb0, 0x01, 0xd2, 0x88, 0xb0, 0x01, 0xd3, 0x89, 0xb0, 0x01, 0xd4, + 0x8a, 0xb0, 0x01, 0xd5, 0x8b, 0xb0, 0x01, 0xd6, 0x8c, 0xb0, 0x01, 0xd7, + 0x8d, 0xb0, 0x01, 0x42, 0x77, 0x00, 0x8e, 0xb0, 0x41, 0xd1, 0x92, 0xb0, + 0x01, 0xd2, 0x93, 0xb0, 0x01, 0xd3, 0x94, 0xb0, 0x01, 0xd4, 0x95, 0xb0, + 0x01, 0xd5, 0x96, 0xb0, 0x01, 0xd6, 0x97, 0xb0, 0x01, 0x42, 0x4d, 0x03, + 0x98, 0xb0, 0x41, 0xd1, 0x7e, 0xb0, 0x01, 0xd2, 0x7f, 0xb0, 0x01, 0xd3, + 0x80, 0xb0, 0x01, 0xd4, 0x81, 0xb0, 0x01, 0xd5, 0x82, 0xb0, 0x01, 0xd6, + 0x83, 0xb0, 0x01, 0xd7, 0x84, 0xb0, 0x01, 0xd8, 0x85, 0xb0, 0x01, 0xd9, + 0x86, 0xb0, 0x41, 0xd1, 0x1d, 0xb1, 0x01, 0xd2, 0x1e, 0xb1, 0x41, 0x02, + 0x66, 0x2b, 0x63, 0x02, 0x08, 0x02, 0x51, 0x02, 0x1e, 0x37, 0x31, 0x02, + 0x08, 0x32, 0x15, 0x02, 0xbd, 0x39, 0x01, 0xff, 0xd1, 0xd0, 0xb0, 0x01, + 0xd2, 0xd1, 0xb0, 0x01, 0xd3, 0xd2, 0xb0, 0x01, 0xd4, 0xd3, 0xb0, 0x41, + 0xd1, 0xd7, 0xb0, 0x01, 0xd2, 0xd8, 0xb0, 0x01, 0xd3, 0xd9, 0xb0, 0x01, + 0xd4, 0xda, 0xb0, 0x01, 0xd5, 0xdb, 0xb0, 0x01, 0xd6, 0xdc, 0xb0, 0x41, + 0xd1, 0xc9, 0xb0, 0x01, 0xd2, 0xca, 0xb0, 0x01, 0xd3, 0xcb, 0xb0, 0x01, + 0xd4, 0xcc, 0xb0, 0x01, 0xd5, 0xcd, 0xb0, 0x01, 0xd6, 0xce, 0xb0, 0x01, + 0xd7, 0xcf, 0xb0, 0x41, 0xd1, 0xd4, 0xb0, 0x01, 0xd2, 0xd5, 0xb0, 0x01, + 0x42, 0x6c, 0x00, 0xd6, 0xb0, 0x41, 0xd1, 0xc2, 0xb0, 0x01, 0xd2, 0xc3, + 0xb0, 0x01, 0xd3, 0xc4, 0xb0, 0x01, 0xd4, 0xc5, 0xb0, 0x01, 0xd5, 0xc6, + 0xb0, 0x01, 0xd6, 0xc7, 0xb0, 0x01, 0xd7, 0xc8, 0xb0, 0x41, 0x02, 0x66, + 0x2b, 0x77, 0x02, 0x08, 0x02, 0x5b, 0x02, 0x1e, 0x37, 0x37, 0x02, 0x08, + 0x32, 0x21, 0x02, 0xbd, 0x39, 0x01, 0xff, 0xd1, 0x2b, 0xb0, 0x01, 0xd2, + 0x2c, 0xb0, 0x01, 0xd3, 0x2d, 0xb0, 0x01, 0xd4, 0x2e, 0xb0, 0x01, 0xd5, + 0x2f, 0xb0, 0x01, 0xd6, 0x30, 0xb0, 0x01, 0xd7, 0x31, 0xb0, 0x41, 0xd1, + 0x38, 0xb0, 0x01, 0xd2, 0x39, 0xb0, 0x01, 0xd3, 0x3a, 0xb0, 0x01, 0x42, + 0x45, 0x00, 0x3b, 0xb0, 0x41, 0xd1, 0x23, 0xb0, 0x01, 0xd2, 0x24, 0xb0, + 0x01, 0xd3, 0x25, 0xb0, 0x01, 0xd4, 0x26, 0xb0, 0x01, 0xd5, 0x27, 0xb0, + 0x01, 0xd6, 0x28, 0xb0, 0x01, 0xd7, 0x29, 0xb0, 0x01, 0xd8, 0x2a, 0xb0, + 0x41, 0xd1, 0x32, 0xb0, 0x01, 0xd2, 0x33, 0xb0, 0x01, 0xd3, 0x34, 0xb0, + 0x01, 0xd4, 0x35, 0xb0, 0x01, 0xd5, 0x36, 0xb0, 0x01, 0xd6, 0x37, 0xb0, + 0x41, 0xd1, 0x17, 0xb0, 0x81, 0x26, 0xd2, 0x18, 0xb0, 0x01, 0xd3, 0x19, + 0xb0, 0x01, 0xd4, 0x1a, 0xb0, 0x01, 0xd5, 0x1b, 0xb0, 0x01, 0xd6, 0x1c, + 0xb0, 0x01, 0xd7, 0x1d, 0xb0, 0x01, 0xd8, 0x1e, 0xb0, 0x01, 0xd9, 0x1f, + 0xb0, 0x01, 0x42, 0x37, 0x01, 0x22, 0xb0, 0x41, 0xd0, 0x20, 0xb0, 0x01, + 0xd1, 0x21, 0xb0, 0x41, 0xd1, 0x06, 0xb0, 0x01, 0xd2, 0x07, 0xb0, 0x01, + 0xd3, 0x08, 0xb0, 0x01, 0xd4, 0x09, 0xb0, 0x41, 0x02, 0x66, 0x2b, 0x75, + 0x02, 0x08, 0x02, 0x55, 0x02, 0x1e, 0x37, 0x35, 0x02, 0x08, 0x32, 0x11, + 0x02, 0xbd, 0x39, 0x01, 0xff, 0xd1, 0xb0, 0xb0, 0x01, 0xd2, 0xb1, 0xb0, + 0x01, 0xd3, 0xb2, 0xb0, 0x41, 0xd1, 0xba, 0xb0, 0x01, 0xd2, 0xbb, 0xb0, + 0x01, 0xd3, 0xbc, 0xb0, 0x01, 0xd4, 0xbd, 0xb0, 0x01, 0xd5, 0xbe, 0xb0, + 0x01, 0xd6, 0xbf, 0xb0, 0x01, 0xd7, 0xc0, 0xb0, 0x01, 0xd8, 0xc1, 0xb0, + 0x41, 0xd1, 0xa9, 0xb0, 0x01, 0xd2, 0xaa, 0xb0, 0x01, 0xd3, 0xab, 0xb0, + 0x01, 0xd4, 0xac, 0xb0, 0x01, 0xd5, 0xad, 0xb0, 0x01, 0xd6, 0xae, 0xb0, + 0x01, 0xd7, 0xaf, 0xb0, 0x41, 0xd1, 0xb3, 0xb0, 0x01, 0xd2, 0xb4, 0xb0, + 0x01, 0xd3, 0xb5, 0xb0, 0x01, 0xd4, 0xb6, 0xb0, 0x01, 0xd5, 0xb7, 0xb0, + 0x01, 0xd6, 0xb8, 0xb0, 0x01, 0xd7, 0xb9, 0xb0, 0x41, 0xd1, 0x9e, 0xb0, + 0x81, 0x20, 0xd2, 0x9f, 0xb0, 0x01, 0xd3, 0xa0, 0xb0, 0x01, 0xd4, 0xa1, + 0xb0, 0x01, 0xd5, 0xa2, 0xb0, 0x01, 0xd6, 0xa3, 0xb0, 0x01, 0xd7, 0xa4, + 0xb0, 0x01, 0xd8, 0xa5, 0xb0, 0x01, 0xd9, 0xa6, 0xb0, 0x41, 0xd0, 0xa7, + 0xb0, 0x01, 0xd1, 0xa8, 0xb0, 0x41, 0xd1, 0x01, 0xb0, 0x01, 0xd2, 0x0f, + 0xb0, 0x01, 0xd3, 0x10, 0xb0, 0x01, 0xd4, 0x11, 0xb0, 0x01, 0xd5, 0x12, + 0xb0, 0x01, 0xd6, 0x13, 0xb0, 0x41, 0xd1, 0x02, 0xb0, 0x01, 0xd2, 0x03, + 0xb0, 0x01, 0xd3, 0x04, 0xb0, 0x01, 0x42, 0x15, 0x02, 0x05, 0xb0, 0x41, + 0x47, 0xd3, 0xd1, 0x81, 0xf6, 0x01, 0x57, 0x9a, 0x2f, 0xff, 0x2b, 0x00, + 0xad, 0x01, 0xff, 0x47, 0x15, 0x08, 0x88, 0x23, 0x00, 0x53, 0x45, 0x49, + 0xd1, 0x26, 0x40, 0xe5, 0xc0, 0xce, 0x01, 0x04, 0x45, 0xf2, 0x01, 0xff, + 0x07, 0x1b, 0x23, 0x8a, 0x06, 0xac, 0xd0, 0x01, 0x05, 0xb9, 0x00, 0xb9, + 0x01, 0xb0, 0x06, 0x4c, 0x3b, 0x97, 0xef, 0x05, 0x40, 0x05, 0xc9, 0x17, + 0x2d, 0x0b, 0x6e, 0x16, 0x01, 0xff, 0x03, 0xdb, 0x09, 0x18, 0x45, 0x76, + 0xe8, 0xbe, 0x05, 0x00, 0x4b, 0x59, 0xa0, 0xc6, 0x05, 0x00, 0x45, 0xbb, + 0xe9, 0xc0, 0x05, 0x00, 0x49, 0x4e, 0xbf, 0xc3, 0x05, 0x40, 0x43, 0x93, + 0x5a, 0xf3, 0x05, 0x00, 0x46, 0xd4, 0xdf, 0xf4, 0x05, 0x40, 0x4f, 0xe5, + 0x6b, 0xbc, 0x05, 0x00, 0xa8, 0x4f, 0x54, 0xac, 0x43, 0x1e, 0xfb, 0x00, + 0x45, 0x99, 0xe8, 0xbd, 0x05, 0x00, 0x45, 0xe0, 0x8a, 0xb7, 0x05, 0x00, + 0xb1, 0x28, 0x44, 0x39, 0xf2, 0xbf, 0x05, 0x00, 0xb3, 0x06, 0x45, 0x8c, + 0xeb, 0xb5, 0x05, 0x40, 0x44, 0xca, 0xea, 0xb6, 0x05, 0x00, 0xa8, 0x06, + 0x46, 0x12, 0x4e, 0xc2, 0x05, 0x40, 0x43, 0x8f, 0x46, 0xb0, 0x05, 0x00, + 0x46, 0x12, 0x4e, 0xc1, 0x05, 0x40, 0x45, 0x57, 0xdf, 0xb8, 0x05, 0x80, + 0x06, 0x45, 0xb9, 0xeb, 0xbb, 0x05, 0x40, 0x46, 0x3c, 0xd8, 0xc7, 0x05, + 0x40, 0x05, 0x7f, 0xe4, 0x13, 0x44, 0x05, 0xe7, 0xb4, 0x05, 0x00, 0x44, + 0x14, 0xe7, 0xb9, 0x05, 0xc0, 0x00, 0x4e, 0x6f, 0x75, 0xba, 0x05, 0x40, + 0x45, 0xe0, 0x8a, 0xb2, 0x05, 0x00, 0x46, 0x56, 0xdf, 0xb3, 0x05, 0x00, + 0x45, 0xc9, 0xea, 0xb1, 0x05, 0x40, 0x49, 0xb8, 0xbb, 0xc5, 0x05, 0x00, + 0x4d, 0xaa, 0x85, 0xaf, 0x05, 0x00, 0x49, 0x65, 0xc0, 0xc4, 0x05, 0x40, + 0x06, 0xed, 0x05, 0x2c, 0x08, 0x9d, 0x1f, 0x01, 0xff, 0x4a, 0x95, 0xa7, + 0x4f, 0xfb, 0x00, 0x08, 0xe8, 0xcc, 0x01, 0xff, 0x07, 0x3b, 0x01, 0x0c, + 0x47, 0x28, 0xd7, 0xf1, 0x05, 0x00, 0x4d, 0xd8, 0x8a, 0x1f, 0xfb, 0x40, + 0x43, 0x79, 0x0f, 0xf0, 0x05, 0x00, 0x43, 0xa1, 0x52, 0xf2, 0x05, 0x40, + 0xa1, 0xcd, 0x03, 0x43, 0xc0, 0x09, 0xd1, 0x05, 0x80, 0xb4, 0x03, 0x45, + 0x23, 0x4a, 0xd3, 0x05, 0x80, 0xa6, 0x03, 0x06, 0xf5, 0x2c, 0xf5, 0x02, + 0x45, 0xdd, 0xaa, 0xd2, 0x05, 0x80, 0xe7, 0x02, 0x42, 0xb0, 0x01, 0xd4, + 0x05, 0x80, 0xd5, 0x02, 0x43, 0xa7, 0x51, 0xdb, 0x05, 0x80, 0xbc, 0x02, + 0x45, 0x9a, 0xa7, 0xdc, 0x05, 0x80, 0xae, 0x02, 0x43, 0xb4, 0x05, 0xde, + 0x05, 0x80, 0xa0, 0x02, 0x43, 0xdc, 0x22, 0xe0, 0x05, 0x80, 0x92, 0x02, + 0x42, 0x6f, 0x02, 0xe4, 0x05, 0x80, 0xf9, 0x01, 0x43, 0x91, 0xf4, 0xe7, + 0x05, 0x80, 0xeb, 0x01, 0x44, 0x76, 0x66, 0xe8, 0x05, 0x80, 0xdd, 0x01, + 0xb3, 0x9a, 0x01, 0xb4, 0x71, 0x43, 0x79, 0x0f, 0xd5, 0x05, 0x80, 0x59, + 0x05, 0x54, 0xec, 0x25, 0x43, 0xa1, 0x52, 0xd9, 0x05, 0x80, 0x0d, 0x45, + 0x9b, 0x52, 0xd6, 0x05, 0xc0, 0x00, 0x4c, 0x8f, 0x8b, 0x36, 0xfb, 0x40, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0xe5, 0x6b, 0x39, 0xfb, 0x00, 0x45, + 0x04, 0xe7, 0x1d, 0xfb, 0x40, 0x44, 0x67, 0x00, 0x21, 0xfb, 0x00, 0x45, + 0x23, 0x4a, 0x22, 0xfb, 0x00, 0x49, 0xdf, 0xb8, 0x26, 0xfb, 0x00, 0x42, + 0xb0, 0x01, 0x23, 0xfb, 0x00, 0x43, 0xa7, 0x51, 0x24, 0xfb, 0x00, 0x45, + 0x9a, 0xa7, 0x25, 0xfb, 0x00, 0x44, 0x76, 0x66, 0x27, 0xfb, 0x00, 0x43, + 0x1f, 0x2a, 0x28, 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0xe5, + 0x6b, 0x35, 0xfb, 0x00, 0x45, 0x13, 0xe7, 0x4b, 0xfb, 0x40, 0x42, 0x2f, + 0x08, 0xea, 0x05, 0x80, 0x1a, 0x42, 0xed, 0x05, 0xd8, 0x05, 0x80, 0x0d, + 0x44, 0x83, 0xeb, 0xe6, 0x05, 0xc0, 0x00, 0x4c, 0x8f, 0x8b, 0x46, 0xfb, + 0x40, 0x4c, 0x8f, 0x8b, 0x38, 0xfb, 0x40, 0x4c, 0x8f, 0x8b, 0x4a, 0xfb, + 0x40, 0x45, 0x48, 0xe4, 0xe1, 0x05, 0x80, 0x33, 0x43, 0x7a, 0x16, 0xe9, + 0x05, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0xe5, 0x6b, 0x49, + 0xfb, 0x80, 0x0f, 0xb3, 0x01, 0xff, 0x47, 0x11, 0x4e, 0x2a, 0xfb, 0x00, + 0x46, 0x12, 0x4e, 0x2b, 0xfb, 0x40, 0x06, 0xd9, 0x13, 0x01, 0xff, 0x47, + 0x11, 0x4e, 0x2c, 0xfb, 0x00, 0x46, 0x12, 0x4e, 0x2d, 0xfb, 0x40, 0x4c, + 0x8f, 0x8b, 0x41, 0xfb, 0x40, 0x4c, 0x8f, 0x8b, 0x48, 0xfb, 0x40, 0x4c, + 0x8f, 0x8b, 0x47, 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0xe5, + 0x6b, 0x44, 0xfb, 0x00, 0x44, 0x39, 0xf2, 0x4e, 0xfb, 0x40, 0x4c, 0x8f, + 0x8b, 0x40, 0xfb, 0x40, 0x4c, 0x8f, 0x8b, 0x3e, 0xfb, 0x40, 0x4c, 0x8f, + 0x8b, 0x3c, 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0xe5, 0x6b, + 0x3b, 0xfb, 0x00, 0x44, 0x39, 0xf2, 0x4d, 0xfb, 0x40, 0x4b, 0x24, 0x98, + 0x34, 0xfb, 0x00, 0xf4, 0xd7, 0x05, 0x40, 0x4c, 0x8f, 0x8b, 0x32, 0xfb, + 0x40, 0x43, 0xa7, 0x51, 0xda, 0x05, 0x80, 0x1f, 0x43, 0xb4, 0x05, 0xdd, + 0x05, 0x00, 0x43, 0xdc, 0x22, 0xdf, 0x05, 0x00, 0x42, 0x6f, 0x02, 0xe3, + 0x05, 0x80, 0x06, 0x45, 0x82, 0xeb, 0xe5, 0x05, 0x40, 0x4c, 0x8f, 0x8b, + 0x43, 0xfb, 0x40, 0x4c, 0x8f, 0x8b, 0x3a, 0xfb, 0x40, 0x4c, 0x8f, 0x8b, + 0x33, 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0xe5, 0x6b, 0x31, + 0xfb, 0x00, 0x44, 0x39, 0xf2, 0x4c, 0xfb, 0x40, 0xac, 0x06, 0x43, 0x7e, + 0x1a, 0xe2, 0x05, 0x40, 0x42, 0x69, 0x00, 0xd0, 0x05, 0x80, 0x11, 0x0a, + 0xbd, 0xb1, 0x01, 0xff, 0x44, 0x1e, 0x4a, 0x20, 0xfb, 0x00, 0x49, 0xdf, + 0x71, 0x29, 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xef, 0x6b, + 0x30, 0xfb, 0x00, 0x45, 0xe0, 0x8a, 0x2e, 0xfb, 0x00, 0x46, 0x56, 0xdf, + 0x2f, 0xfb, 0x40, 0x4c, 0x73, 0x8c, 0xa2, 0x05, 0x00, 0xa4, 0xcb, 0x01, + 0x47, 0xf3, 0xd0, 0x91, 0x05, 0x00, 0x03, 0xdb, 0x09, 0xad, 0x01, 0x44, + 0x8d, 0xf0, 0xac, 0x05, 0x00, 0xad, 0x8b, 0x01, 0x43, 0xda, 0x15, 0xab, + 0x05, 0x00, 0x02, 0xbb, 0x09, 0x75, 0x02, 0x43, 0x14, 0x65, 0x45, 0x0e, + 0x50, 0x97, 0x05, 0x00, 0xb3, 0x51, 0xb4, 0x31, 0x02, 0x4d, 0x00, 0x21, + 0xba, 0x01, 0xff, 0xa1, 0x06, 0x44, 0x95, 0xf0, 0xae, 0x05, 0x40, 0x04, + 0x2d, 0xf2, 0x06, 0x43, 0x42, 0x14, 0x98, 0x05, 0x40, 0x45, 0x82, 0xe6, + 0x95, 0x05, 0x00, 0x45, 0x3d, 0xd8, 0x94, 0x05, 0x40, 0x4c, 0x17, 0x94, + 0xaa, 0x05, 0x00, 0x43, 0xd1, 0x05, 0x9a, 0x05, 0x40, 0xa5, 0x06, 0x45, + 0x86, 0xe7, 0x96, 0x05, 0x40, 0x06, 0xbe, 0xdd, 0x06, 0x43, 0xe3, 0x23, + 0x9b, 0x05, 0x40, 0x46, 0xf0, 0xdb, 0xa0, 0x05, 0x00, 0x46, 0x5c, 0xdf, + 0xa9, 0x05, 0x40, 0x44, 0xca, 0xea, 0x92, 0x05, 0x00, 0x49, 0x6f, 0xb9, + 0x93, 0x05, 0x40, 0x43, 0xad, 0xb5, 0xa8, 0x05, 0x00, 0x49, 0xc7, 0xbe, + 0x9f, 0x05, 0x40, 0x44, 0xa1, 0xf2, 0x99, 0x05, 0x00, 0x43, 0x43, 0x1e, + 0xa1, 0x05, 0x40, 0x47, 0xa0, 0xce, 0xa4, 0x05, 0x00, 0x45, 0x19, 0xe6, + 0xa5, 0x05, 0x80, 0x06, 0x44, 0x9e, 0xce, 0xa3, 0x05, 0x40, 0x47, 0x3b, + 0xcd, 0xa6, 0x05, 0x40, 0x43, 0x93, 0x5a, 0x9c, 0x05, 0x80, 0x06, 0x46, + 0xd4, 0xdf, 0x9e, 0x05, 0x40, 0x47, 0x65, 0xcd, 0x9d, 0x05, 0x40, 0x44, + 0xed, 0x4b, 0xa7, 0x05, 0x00, 0x43, 0x38, 0x52, 0xad, 0x05, 0x40, 0xa4, + 0xdb, 0x06, 0xb2, 0xaa, 0x06, 0x03, 0x70, 0x15, 0x01, 0xff, 0xa1, 0xf6, + 0x05, 0xa2, 0xb9, 0x05, 0xa3, 0x83, 0x05, 0xa4, 0xca, 0x04, 0xa5, 0x8a, + 0x04, 0xa6, 0xf1, 0x03, 0x4b, 0x1b, 0x61, 0x1a, 0x27, 0x00, 0xa8, 0xdc, + 0x03, 0x54, 0x1f, 0x16, 0x79, 0xf6, 0x01, 0xac, 0x81, 0x03, 0xad, 0xf2, + 0x02, 0x06, 0xb4, 0x01, 0xc1, 0x02, 0xaf, 0xac, 0x02, 0x49, 0xdf, 0x71, + 0x95, 0x27, 0x00, 0xb2, 0xf1, 0x01, 0xb3, 0x81, 0x01, 0xb4, 0x4d, 0x02, + 0x50, 0x02, 0x32, 0x4c, 0x32, 0x00, 0x5a, 0x27, 0x00, 0xb7, 0x01, 0xff, + 0x5c, 0x8a, 0x17, 0xbd, 0x27, 0x00, 0x05, 0xae, 0x02, 0x06, 0x5b, 0xd6, + 0x1b, 0x94, 0x27, 0x40, 0x46, 0x12, 0x03, 0x87, 0xf7, 0x01, 0x56, 0xc1, + 0x33, 0xdb, 0x26, 0x00, 0x46, 0xd6, 0x05, 0x91, 0xf7, 0xc1, 0x00, 0x63, + 0x6f, 0x0a, 0x05, 0xce, 0x41, 0x69, 0x9a, 0x02, 0xae, 0x27, 0x00, 0x11, + 0x38, 0x0c, 0x01, 0xff, 0x55, 0xd5, 0x01, 0x19, 0xf8, 0x01, 0x5b, 0x27, + 0x1c, 0x1d, 0xf8, 0x41, 0x09, 0x23, 0x0d, 0x17, 0x5f, 0x94, 0x06, 0x9e, + 0x27, 0x00, 0x0e, 0xe6, 0x2b, 0x01, 0xff, 0x4a, 0xf4, 0x2b, 0xd3, 0xf7, + 0x01, 0x4d, 0x28, 0x13, 0xd4, 0xf7, 0x41, 0x57, 0x9d, 0x2e, 0xbb, 0x27, + 0x00, 0x06, 0x2c, 0x0d, 0x01, 0xff, 0x48, 0x3c, 0x0d, 0x3d, 0x27, 0x00, + 0x51, 0x2c, 0x5d, 0x43, 0x27, 0x40, 0xa1, 0x5f, 0x5a, 0x96, 0x1f, 0x71, + 0xf6, 0x01, 0xa9, 0x36, 0x05, 0xa2, 0x20, 0x06, 0x46, 0xdf, 0xb4, 0x48, + 0x27, 0x40, 0x05, 0xad, 0x23, 0x11, 0x0e, 0x83, 0x56, 0x01, 0xff, 0x43, + 0x7a, 0xd0, 0x65, 0xf6, 0x01, 0x49, 0x10, 0xc1, 0x5d, 0xf6, 0x41, 0x45, + 0xce, 0x00, 0x98, 0x27, 0x00, 0x09, 0x9c, 0x01, 0x01, 0xff, 0x43, 0x7a, + 0xd0, 0x67, 0xf6, 0x01, 0x49, 0x10, 0xc1, 0x5f, 0xf6, 0x41, 0x05, 0x32, + 0x06, 0x11, 0x02, 0xd8, 0x04, 0x01, 0xff, 0x52, 0xec, 0x2b, 0xcc, 0xf7, + 0x01, 0x4f, 0xd5, 0x1c, 0xb8, 0xf7, 0x41, 0x5d, 0x13, 0x05, 0x5c, 0x27, + 0x00, 0x64, 0x27, 0x0a, 0x5b, 0x27, 0x40, 0x45, 0x14, 0x19, 0xac, 0xf7, + 0x01, 0x5d, 0x16, 0x16, 0x7b, 0xf6, 0x41, 0x04, 0xc9, 0x00, 0x06, 0x5c, + 0xda, 0x18, 0x9c, 0x27, 0x40, 0x10, 0x8c, 0x0b, 0x18, 0x4b, 0xb8, 0x02, + 0x99, 0x27, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x55, 0xd5, 0x01, + 0x1a, 0xf8, 0x01, 0x5b, 0x27, 0x1c, 0x1e, 0xf8, 0x41, 0x50, 0x63, 0x09, + 0x71, 0x27, 0x00, 0x57, 0x19, 0x05, 0x6f, 0x27, 0x40, 0x50, 0xb6, 0x65, + 0x1c, 0x27, 0x00, 0x52, 0x4d, 0x56, 0x2e, 0x27, 0x00, 0x54, 0x90, 0x46, + 0x56, 0x2b, 0x40, 0x05, 0xad, 0x23, 0x11, 0x0e, 0x83, 0x56, 0x01, 0xff, + 0x43, 0x7a, 0xd0, 0x64, 0xf6, 0x01, 0x49, 0x10, 0xc1, 0x5c, 0xf6, 0x41, + 0x45, 0xce, 0x00, 0x9a, 0x27, 0x00, 0x09, 0x9c, 0x01, 0x01, 0xff, 0x43, + 0x7a, 0xd0, 0x66, 0xf6, 0x01, 0x49, 0x10, 0xc1, 0x5e, 0xf6, 0x41, 0x49, + 0x68, 0x98, 0x96, 0x27, 0x00, 0x4f, 0x46, 0x74, 0x16, 0x27, 0x40, 0xa1, + 0x44, 0x03, 0xc4, 0x00, 0x1f, 0x58, 0x16, 0x29, 0x73, 0xf6, 0x01, 0x02, + 0xd1, 0x00, 0x01, 0xff, 0x80, 0x06, 0x68, 0x9b, 0x02, 0xad, 0x27, 0x40, + 0x64, 0x0c, 0x05, 0x60, 0x27, 0x00, 0x64, 0xdf, 0x09, 0x5f, 0x27, 0x40, + 0x10, 0x8c, 0x0b, 0x11, 0x11, 0x38, 0x0c, 0x01, 0xff, 0x55, 0xd5, 0x01, + 0x18, 0xf8, 0x01, 0x5b, 0x27, 0x1c, 0x1c, 0xf8, 0x41, 0x50, 0x63, 0x09, + 0x70, 0x27, 0x00, 0x57, 0x19, 0x05, 0x6e, 0x27, 0x40, 0x4a, 0x2d, 0xb0, + 0x55, 0x2b, 0x00, 0x49, 0x4b, 0x9e, 0x47, 0xf5, 0x41, 0x5e, 0xdb, 0x12, + 0x63, 0x27, 0x00, 0x4e, 0x20, 0x6e, 0x97, 0xfb, 0x41, 0x04, 0xd2, 0x05, + 0x06, 0x5b, 0xc9, 0x1c, 0x24, 0x27, 0x40, 0x52, 0xec, 0x2b, 0xca, 0xf7, + 0x01, 0x4f, 0xd5, 0x1c, 0xb2, 0xf7, 0x41, 0x05, 0xc9, 0x00, 0x17, 0x4a, + 0x49, 0x13, 0xf0, 0xf7, 0x01, 0x10, 0xae, 0x00, 0x01, 0xff, 0x48, 0x28, + 0x05, 0x62, 0x27, 0x00, 0x46, 0x16, 0x08, 0x57, 0x27, 0x40, 0x08, 0x33, + 0x08, 0x0c, 0x4f, 0xd5, 0x1c, 0xbe, 0xf7, 0x01, 0x62, 0x22, 0x0d, 0x4b, + 0x27, 0x40, 0x4a, 0xf4, 0x2b, 0xcf, 0xf7, 0x01, 0x4d, 0x28, 0x13, 0xd1, + 0xf7, 0x01, 0x56, 0xad, 0x36, 0x38, 0x27, 0x40, 0x66, 0x8d, 0x06, 0xa0, + 0x27, 0x00, 0x4c, 0xc3, 0x32, 0x97, 0x27, 0x00, 0xaf, 0x01, 0xff, 0x49, + 0x2c, 0x0e, 0xb2, 0xf4, 0x01, 0x05, 0x3d, 0x01, 0x11, 0x13, 0x36, 0x0c, + 0x01, 0xff, 0x55, 0xd5, 0x01, 0x1b, 0xf8, 0x01, 0x5b, 0x27, 0x1c, 0x1f, + 0xf8, 0x41, 0x5d, 0x13, 0x05, 0x5e, 0x27, 0x00, 0x64, 0x27, 0x0a, 0x5d, + 0x27, 0x40, 0x02, 0xb0, 0x01, 0x23, 0x45, 0x13, 0x03, 0x58, 0x2b, 0x80, + 0x06, 0x65, 0x2c, 0x08, 0xa8, 0x27, 0x40, 0x06, 0x50, 0x00, 0x06, 0x49, + 0x9b, 0xb7, 0x59, 0x2b, 0x40, 0x4d, 0x73, 0x81, 0x57, 0x2b, 0x00, 0x59, + 0x5a, 0x26, 0xe3, 0x26, 0x40, 0x47, 0xff, 0x07, 0x14, 0x27, 0x00, 0x4e, + 0x9f, 0x7e, 0x46, 0x27, 0x40, 0x47, 0xae, 0xce, 0x18, 0x27, 0x00, 0x04, + 0x0d, 0x03, 0x01, 0xff, 0x80, 0x17, 0x0b, 0x0b, 0x1a, 0x01, 0xff, 0x50, + 0xa7, 0x23, 0xb9, 0x27, 0x00, 0x50, 0xb3, 0x02, 0xb8, 0x27, 0x00, 0x50, + 0x7c, 0x40, 0xb7, 0x27, 0x40, 0x07, 0x68, 0x41, 0x06, 0x45, 0xac, 0x21, + 0x64, 0x27, 0x40, 0x5e, 0xbd, 0x12, 0xa5, 0x27, 0x00, 0x5c, 0x9e, 0x19, + 0xa6, 0x27, 0x40, 0x51, 0x13, 0x3e, 0x74, 0xf6, 0x01, 0x11, 0x30, 0x50, + 0x06, 0x47, 0x3d, 0x0d, 0x31, 0x27, 0x40, 0x43, 0x0e, 0x0b, 0x9c, 0xf8, + 0x81, 0x06, 0x4a, 0x53, 0xb2, 0x9d, 0xf8, 0x41, 0x80, 0x01, 0xff, 0x44, + 0x22, 0x00, 0x9e, 0xf8, 0x01, 0x45, 0xee, 0x74, 0x9f, 0xf8, 0x41, 0x4f, + 0x32, 0x6a, 0x49, 0xf6, 0x01, 0x02, 0xc6, 0x00, 0x01, 0xff, 0x4a, 0x5f, + 0x97, 0x9f, 0xf4, 0x01, 0x45, 0x7b, 0x0e, 0xf6, 0xfa, 0x01, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x45, 0xce, 0x00, 0x98, 0xf4, 0x01, 0x46, 0xff, 0x85, + 0x9d, 0xf4, 0x01, 0x4f, 0xce, 0x73, 0x94, 0xf3, 0x41, 0x45, 0x1a, 0x3d, + 0xa7, 0xf3, 0x01, 0x45, 0x9c, 0xba, 0xa6, 0xfa, 0xc1, 0x00, 0x51, 0xff, + 0x56, 0xfc, 0x26, 0x40, 0x43, 0xf6, 0x27, 0xe1, 0x2b, 0x00, 0x02, 0x46, + 0x00, 0x9a, 0x24, 0x08, 0xc8, 0xc7, 0xe1, 0x1e, 0xad, 0xad, 0x1e, 0xae, + 0xd8, 0x01, 0x5b, 0x1a, 0x1d, 0x4b, 0xf6, 0x01, 0xb2, 0xc5, 0x01, 0xb4, + 0x06, 0x44, 0x7d, 0xa9, 0x7b, 0xf7, 0x41, 0x4b, 0x1e, 0x9a, 0x23, 0xf4, + 0x01, 0x04, 0x3e, 0xd2, 0x01, 0xff, 0x07, 0xec, 0x05, 0x27, 0x07, 0xff, + 0x39, 0x01, 0xff, 0x44, 0x80, 0x11, 0xfc, 0x08, 0x01, 0x43, 0x0e, 0x0b, + 0xfb, 0x08, 0x81, 0x0f, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xfd, 0x08, + 0x01, 0x45, 0x7f, 0x2c, 0xfe, 0x08, 0x41, 0x48, 0x70, 0x11, 0xff, 0x08, + 0x41, 0xa1, 0x79, 0x44, 0x41, 0xef, 0xe1, 0x08, 0x01, 0x4b, 0xb8, 0x9a, + 0xe3, 0x08, 0x01, 0x45, 0xdd, 0xaa, 0xe2, 0x08, 0x01, 0x42, 0xb0, 0x01, + 0xe4, 0x08, 0x81, 0x5a, 0x44, 0xcd, 0xf0, 0xea, 0x08, 0x01, 0x46, 0x94, + 0xdd, 0xeb, 0x08, 0x01, 0x43, 0xb4, 0x05, 0xec, 0x08, 0x01, 0x43, 0xdc, + 0x22, 0xed, 0x08, 0x01, 0x42, 0x6f, 0x02, 0xf0, 0x08, 0x01, 0x44, 0x4c, + 0xc8, 0xf2, 0x08, 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, 0x8a, 0x8a, 0xe5, + 0x08, 0x01, 0x44, 0xa1, 0x52, 0xe9, 0x08, 0x01, 0x44, 0x59, 0xf3, 0xe6, + 0x08, 0x41, 0x42, 0xb7, 0x2d, 0xf5, 0x08, 0x01, 0x43, 0xda, 0x25, 0xe8, + 0x08, 0x41, 0xa1, 0x06, 0x43, 0x7a, 0x16, 0xf4, 0x08, 0x41, 0x43, 0xad, + 0xea, 0xf1, 0x08, 0x01, 0x44, 0x49, 0xe4, 0xee, 0x08, 0x41, 0x42, 0x53, + 0x00, 0xe7, 0x08, 0x41, 0x44, 0x18, 0x3d, 0xe0, 0x08, 0x01, 0x42, 0x03, + 0x1d, 0xef, 0x08, 0x41, 0x46, 0xd0, 0xda, 0xb4, 0xf5, 0x01, 0xf0, 0x89, + 0xfa, 0x41, 0xa4, 0xab, 0x1c, 0xa7, 0xce, 0x03, 0x0d, 0xfd, 0x83, 0x82, + 0x01, 0x05, 0xe1, 0xeb, 0x01, 0xff, 0x07, 0xec, 0x05, 0x13, 0x4d, 0xb6, + 0x88, 0x34, 0x17, 0x00, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xe9, 0x32, 0x17, + 0x00, 0xf5, 0x33, 0x17, 0x40, 0xe1, 0x20, 0x17, 0x00, 0x42, 0x16, 0x00, + 0x2a, 0x17, 0x00, 0x42, 0xf0, 0x10, 0x27, 0x17, 0x00, 0x42, 0x24, 0x02, + 0x24, 0x17, 0x00, 0x42, 0x22, 0x00, 0x31, 0x17, 0x00, 0xe9, 0x21, 0x17, + 0x00, 0x42, 0x1b, 0x02, 0x23, 0x17, 0x00, 0x42, 0x74, 0x00, 0x2e, 0x17, + 0x00, 0x42, 0x6c, 0x00, 0x2b, 0x17, 0x00, 0xae, 0x28, 0x42, 0xbb, 0x09, + 0x29, 0x17, 0x00, 0x42, 0x71, 0x00, 0x2d, 0x17, 0x00, 0x42, 0x40, 0x06, + 0x30, 0x17, 0x00, 0x42, 0x12, 0x00, 0x26, 0x17, 0x00, 0xf5, 0x22, 0x17, + 0x00, 0x42, 0xa9, 0x01, 0x2f, 0x17, 0x00, 0x42, 0xbc, 0x22, 0x2c, 0x17, + 0x40, 0xe1, 0x28, 0x17, 0x00, 0x42, 0x24, 0x02, 0x25, 0x17, 0x40, 0x06, + 0xef, 0x06, 0x80, 0x02, 0x07, 0xec, 0x05, 0x4a, 0x05, 0xb9, 0x00, 0x3a, + 0x05, 0x5a, 0x03, 0x19, 0x06, 0x3c, 0x39, 0x01, 0xff, 0xe1, 0x1d, 0x0d, + 0x01, 0xe5, 0x20, 0x0d, 0x01, 0xe9, 0x1e, 0x0d, 0x01, 0xef, 0x21, 0x0d, + 0x01, 0xf5, 0x1f, 0x0d, 0x41, 0x48, 0xa0, 0xc6, 0x24, 0x0d, 0x01, 0x02, + 0x12, 0x00, 0x01, 0xff, 0x44, 0xd2, 0x7c, 0x25, 0x0d, 0x01, 0x42, 0x2a, + 0x05, 0x26, 0x0d, 0x01, 0x43, 0x8a, 0x08, 0x27, 0x0d, 0x41, 0x49, 0x24, + 0xbc, 0x23, 0x0d, 0x01, 0x45, 0xb0, 0xea, 0x22, 0x0d, 0x41, 0xe1, 0x00, + 0x0d, 0x01, 0x42, 0x16, 0x00, 0x01, 0x0d, 0x01, 0x42, 0x37, 0x00, 0x06, + 0x0d, 0x01, 0xa4, 0x95, 0x01, 0x42, 0x0c, 0x08, 0x09, 0x0d, 0x01, 0x42, + 0x24, 0x02, 0x12, 0x0d, 0x01, 0x42, 0x22, 0x00, 0x07, 0x0d, 0x01, 0x42, + 0x56, 0x19, 0x05, 0x0d, 0x01, 0xab, 0x60, 0x42, 0x74, 0x00, 0x13, 0x0d, + 0x01, 0x42, 0x6c, 0x00, 0x14, 0x0d, 0x01, 0xae, 0x42, 0x42, 0xbb, 0x09, + 0x02, 0x0d, 0x01, 0xb2, 0x30, 0xb3, 0x24, 0xb4, 0x18, 0x42, 0xf5, 0x0a, + 0x1c, 0x0d, 0x01, 0x42, 0xa9, 0x01, 0x16, 0x0d, 0x01, 0x42, 0xbc, 0x22, + 0x18, 0x0d, 0x01, 0x42, 0x59, 0x00, 0x0e, 0x0d, 0x41, 0xe1, 0x03, 0x0d, + 0x01, 0x42, 0x12, 0x00, 0x04, 0x0d, 0x41, 0xe1, 0x0f, 0x0d, 0x01, 0x42, + 0x22, 0x00, 0x10, 0x0d, 0x41, 0xe1, 0x0c, 0x0d, 0x01, 0x42, 0x71, 0x00, + 0x0d, 0x0d, 0x41, 0xe1, 0x15, 0x0d, 0x01, 0x42, 0x24, 0x02, 0x1a, 0x0d, + 0x01, 0x42, 0xbc, 0x22, 0x1b, 0x0d, 0x41, 0xe1, 0x11, 0x0d, 0x01, 0x42, + 0x22, 0x00, 0x08, 0x0d, 0x01, 0x05, 0x7c, 0xe7, 0x01, 0xff, 0x42, 0xa9, + 0x01, 0x17, 0x0d, 0x01, 0x42, 0xbc, 0x22, 0x19, 0x0d, 0x41, 0xe1, 0x0a, + 0x0d, 0x01, 0x42, 0xf0, 0x10, 0x0b, 0x0d, 0x41, 0x45, 0x12, 0x0b, 0x38, + 0x0d, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x39, 0x0d, 0x01, 0x43, 0x0e, + 0x0b, 0x31, 0x0d, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x30, + 0x0d, 0x41, 0x44, 0x25, 0x01, 0x33, 0x0d, 0x01, 0x42, 0x15, 0x02, 0x32, + 0x0d, 0x41, 0x44, 0xc9, 0x1d, 0x37, 0x0d, 0x01, 0x42, 0x01, 0x26, 0x36, + 0x0d, 0x41, 0x43, 0xd2, 0x05, 0x35, 0x0d, 0x01, 0x43, 0xf6, 0x06, 0x34, + 0x0d, 0x41, 0x03, 0x89, 0x55, 0x57, 0x0d, 0xf2, 0x8a, 0x01, 0xff, 0x45, + 0x12, 0x0b, 0x28, 0x30, 0x00, 0xa6, 0x3e, 0x44, 0xcf, 0x2a, 0x29, 0x30, + 0x00, 0x43, 0x0e, 0x0b, 0x21, 0x30, 0x00, 0xb3, 0x24, 0xb4, 0x01, 0xff, + 0x42, 0x92, 0x01, 0x38, 0x30, 0x00, 0xa8, 0x0d, 0xb7, 0x01, 0xff, 0x44, + 0xcb, 0x1d, 0x39, 0x30, 0x00, 0xef, 0x22, 0x30, 0x40, 0x44, 0x7b, 0x11, + 0x3a, 0x30, 0x00, 0x43, 0x26, 0x01, 0x23, 0x30, 0x40, 0x44, 0xc9, 0x1d, + 0x27, 0x30, 0x00, 0x42, 0x01, 0x26, 0x26, 0x30, 0x40, 0x43, 0xd2, 0x05, + 0x25, 0x30, 0x00, 0x43, 0xf6, 0x06, 0x24, 0x30, 0x40, 0x09, 0x38, 0xb7, + 0xf4, 0x10, 0x54, 0xb8, 0x41, 0x2f, 0x30, 0x00, 0x46, 0xa7, 0x82, 0x64, + 0x31, 0x00, 0xaa, 0xef, 0x04, 0x07, 0xec, 0x05, 0x0f, 0xb3, 0x01, 0xff, + 0x53, 0x75, 0x4a, 0x2e, 0x30, 0x00, 0x48, 0x1b, 0x18, 0x00, 0xd8, 0x40, + 0xe1, 0x4f, 0x31, 0x80, 0xc7, 0x04, 0xa3, 0xb8, 0x04, 0xe5, 0x54, 0x31, + 0x80, 0xaa, 0x04, 0x45, 0x71, 0xa5, 0x4e, 0x31, 0x00, 0xe9, 0x63, 0x31, + 0x80, 0x98, 0x04, 0xab, 0xe4, 0x03, 0x45, 0xa8, 0xe8, 0x41, 0x31, 0x80, + 0xc5, 0x03, 0x45, 0x1b, 0xe9, 0x34, 0x31, 0x80, 0x9c, 0x03, 0xef, 0x57, + 0x31, 0x80, 0x92, 0x03, 0xb0, 0xc8, 0x02, 0x45, 0x65, 0xea, 0x39, 0x31, + 0x80, 0xef, 0x01, 0xb3, 0x8f, 0x01, 0xb4, 0x80, 0x01, 0xf5, 0x5c, 0x31, + 0x00, 0xb7, 0x64, 0xb9, 0x01, 0xff, 0xe1, 0x51, 0x31, 0x80, 0x58, 0xe5, + 0x56, 0x31, 0x80, 0x32, 0xe9, 0x62, 0x31, 0x00, 0xef, 0x5b, 0x31, 0x80, + 0x17, 0xf5, 0x60, 0x31, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xe9, 0x8c, 0x31, + 0x00, 0x42, 0x4d, 0x00, 0x8b, 0x31, 0xc0, 0x00, 0xef, 0x8a, 0x31, 0x40, + 0x8d, 0x01, 0xff, 0xe9, 0x89, 0x31, 0x00, 0x42, 0xbc, 0x22, 0x87, 0x31, + 0xc0, 0x00, 0xe5, 0x88, 0x31, 0x40, 0xef, 0x55, 0x31, 0x80, 0x16, 0x46, + 0xe2, 0xcc, 0x81, 0x31, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x47, 0x81, 0xd4, + 0x83, 0x31, 0x00, 0x44, 0x65, 0xbf, 0x82, 0x31, 0x40, 0x48, 0x6e, 0xa5, + 0x86, 0x31, 0x40, 0xe5, 0x52, 0x31, 0x40, 0xe1, 0x58, 0x31, 0x80, 0x0d, + 0xe5, 0x5e, 0x31, 0x80, 0x04, 0xe9, 0x5f, 0x31, 0x40, 0xef, 0x5d, 0x31, + 0x40, 0xe5, 0x59, 0x31, 0x40, 0x46, 0x57, 0xd6, 0x4c, 0x31, 0x00, 0x45, + 0xe5, 0xcd, 0x37, 0x31, 0x40, 0x43, 0x23, 0x42, 0x45, 0x31, 0x80, 0x35, + 0x04, 0x2c, 0x2d, 0x01, 0xff, 0x45, 0x42, 0xe5, 0x49, 0x31, 0x00, 0x45, + 0x71, 0xa5, 0x85, 0x31, 0x00, 0x45, 0x1e, 0xcc, 0x80, 0x31, 0x00, 0x46, + 0xdc, 0xa2, 0x32, 0x31, 0x00, 0x45, 0x1b, 0xe9, 0x65, 0x31, 0x00, 0x45, + 0xe2, 0x84, 0x43, 0x31, 0x00, 0x44, 0x65, 0xbf, 0x46, 0x31, 0x00, 0x46, + 0xe4, 0xcd, 0x38, 0x31, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x42, 0xe5, 0x7e, + 0x31, 0x00, 0x46, 0xdc, 0xa2, 0x7a, 0x31, 0x00, 0x45, 0x1b, 0xe9, 0x7b, + 0x31, 0x00, 0x45, 0xe2, 0x84, 0x7d, 0x31, 0x00, 0x46, 0xe4, 0xcd, 0x7c, + 0x31, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x71, 0xa5, 0x40, 0x31, 0x00, 0x46, + 0xdc, 0xa2, 0x3a, 0x31, 0x80, 0x3b, 0x45, 0xa8, 0xe8, 0x3b, 0x31, 0x00, + 0xb0, 0x1a, 0x44, 0x65, 0xbf, 0x3d, 0x31, 0x00, 0xb4, 0x06, 0x4b, 0x6b, + 0xa5, 0x6d, 0x31, 0x40, 0x46, 0x57, 0xd6, 0x3e, 0x31, 0x00, 0x45, 0xe5, + 0xcd, 0x6a, 0x31, 0x40, 0x46, 0x82, 0xd4, 0x6c, 0x31, 0x00, 0x46, 0xd2, + 0xc2, 0x3f, 0x31, 0x00, 0x44, 0xe3, 0x84, 0x3c, 0x31, 0xc0, 0x00, 0x45, + 0xf5, 0xe1, 0x6b, 0x31, 0x40, 0x45, 0xf5, 0xe1, 0x69, 0x31, 0x40, 0x46, + 0x82, 0xd4, 0x7f, 0x31, 0x00, 0x46, 0xd2, 0xc2, 0x4d, 0x31, 0x00, 0x44, + 0xe3, 0x84, 0x42, 0x31, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x45, 0x42, 0xe5, + 0x76, 0x31, 0x00, 0x46, 0xdc, 0xa2, 0x72, 0x31, 0x00, 0x44, 0x65, 0xbf, + 0x44, 0x31, 0x80, 0x0f, 0xb4, 0x01, 0xff, 0x46, 0x57, 0xd6, 0x77, 0x31, + 0x00, 0x45, 0xe5, 0xcd, 0x73, 0x31, 0x40, 0x8d, 0x01, 0xff, 0x46, 0xdc, + 0xa2, 0x74, 0x31, 0x00, 0x46, 0xe4, 0xcd, 0x75, 0x31, 0x40, 0xe5, 0x5a, + 0x31, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x42, 0xe5, 0x35, 0x31, 0x00, 0x45, + 0x71, 0xa5, 0x36, 0x31, 0x00, 0x47, 0x81, 0xd4, 0x68, 0x31, 0x00, 0x44, + 0x65, 0xbf, 0x67, 0x31, 0x00, 0x46, 0xe4, 0xcd, 0x66, 0x31, 0x40, 0x8d, + 0x01, 0xff, 0xb0, 0x06, 0x44, 0x65, 0xbf, 0x6f, 0x31, 0x40, 0x46, 0x82, + 0xd4, 0x70, 0x31, 0x00, 0x44, 0xe3, 0x84, 0x6e, 0x31, 0x40, 0x07, 0xdb, + 0x84, 0x13, 0x46, 0xca, 0xc2, 0x4b, 0x31, 0x00, 0x45, 0xdd, 0xa2, 0x31, + 0x31, 0xc0, 0x00, 0x45, 0xf5, 0xe1, 0x33, 0x31, 0x40, 0x45, 0xa8, 0xe8, + 0x71, 0x31, 0x00, 0xb0, 0x06, 0x4a, 0x45, 0xb1, 0x79, 0x31, 0x40, 0x46, + 0xd2, 0xc2, 0x84, 0x31, 0x00, 0x44, 0xe3, 0x84, 0x78, 0x31, 0x40, 0x44, + 0x1f, 0xcc, 0x47, 0x31, 0x40, 0xef, 0x53, 0x31, 0x00, 0xf5, 0x61, 0x31, + 0x40, 0x46, 0xea, 0xcf, 0x4a, 0x31, 0x00, 0x44, 0xeb, 0xcf, 0x48, 0x31, + 0x40, 0xe5, 0x50, 0x31, 0x00, 0x44, 0x41, 0xb1, 0x8d, 0x31, 0xc0, 0x00, + 0xe5, 0x8e, 0x31, 0x40, 0x09, 0x3b, 0xbd, 0xfb, 0x03, 0x09, 0x5c, 0xc0, + 0x01, 0xff, 0xe1, 0x61, 0x11, 0x80, 0xbd, 0x03, 0xe5, 0x66, 0x11, 0x80, + 0x80, 0x03, 0x46, 0xa7, 0x82, 0x60, 0x11, 0x00, 0xe9, 0x75, 0x11, 0x80, + 0xaa, 0x02, 0xef, 0x69, 0x11, 0x80, 0xf1, 0x01, 0x4a, 0x3b, 0xb1, 0xa2, + 0x11, 0x00, 0xf5, 0x6e, 0x11, 0x80, 0xbe, 0x01, 0xb7, 0xa5, 0x01, 0xb9, + 0x01, 0xff, 0xe1, 0x63, 0x11, 0x80, 0x88, 0x01, 0xe5, 0x68, 0x11, 0x80, + 0x6d, 0xe9, 0x74, 0x11, 0x80, 0x62, 0xef, 0x6d, 0x11, 0x80, 0x31, 0xf5, + 0x72, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xe1, 0x8e, 0x11, 0x80, 0x20, + 0xe5, 0x90, 0x11, 0x80, 0x17, 0xe9, 0x94, 0x11, 0x00, 0xef, 0xb8, 0xd7, + 0x00, 0xf5, 0x93, 0x11, 0x00, 0x42, 0x4d, 0x00, 0x92, 0x11, 0xc0, 0x00, + 0xef, 0x91, 0x11, 0x40, 0xef, 0x8f, 0x11, 0x40, 0xe5, 0xb7, 0xd7, 0x40, + 0x8d, 0x01, 0xff, 0xe1, 0xb2, 0xd7, 0x80, 0x20, 0x42, 0x40, 0x0b, 0xb4, + 0xd7, 0x00, 0xe9, 0x88, 0x11, 0x00, 0xef, 0x87, 0x11, 0x00, 0xb9, 0x01, + 0xff, 0xe1, 0x84, 0x11, 0x80, 0x06, 0x42, 0x40, 0x0b, 0x86, 0x11, 0x40, + 0xe5, 0x85, 0x11, 0x40, 0xe5, 0xb3, 0xd7, 0x40, 0x42, 0x8f, 0x08, 0x97, + 0x11, 0x40, 0xef, 0x67, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xef, 0x7d, + 0x11, 0x00, 0xf5, 0x7e, 0x11, 0x00, 0x42, 0xbc, 0x22, 0xa5, 0x11, 0x40, + 0x8d, 0x04, 0xe5, 0x64, 0x11, 0x40, 0xef, 0x78, 0x11, 0x00, 0xf5, 0xa4, + 0x11, 0x00, 0x42, 0xa9, 0x47, 0x79, 0x11, 0x40, 0xe1, 0x6a, 0x11, 0x80, + 0x0d, 0xe5, 0x70, 0x11, 0x80, 0x04, 0xe9, 0x71, 0x11, 0x40, 0xef, 0x6f, + 0x11, 0x40, 0xe5, 0x6b, 0x11, 0x40, 0x8d, 0x01, 0xff, 0xe1, 0x89, 0x11, + 0x80, 0x1b, 0x45, 0x0a, 0xe6, 0x8b, 0x11, 0x00, 0x43, 0x55, 0xf4, 0xb6, + 0xd7, 0x00, 0xf5, 0x8d, 0x11, 0x00, 0x42, 0x4d, 0x00, 0x8c, 0x11, 0xc0, + 0x00, 0xef, 0xb5, 0xd7, 0x40, 0xe5, 0x8a, 0x11, 0x40, 0x8d, 0x04, 0xe5, + 0x6c, 0x11, 0x40, 0xe5, 0x80, 0x11, 0x80, 0x24, 0xef, 0x82, 0x11, 0x80, + 0x19, 0xf5, 0x83, 0x11, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0xa6, 0x11, 0x80, + 0x09, 0xe5, 0x81, 0x11, 0xc0, 0x00, 0xef, 0xb0, 0xd7, 0x40, 0xe5, 0xa7, + 0x11, 0x40, 0x42, 0xe8, 0x06, 0xb1, 0xd7, 0x40, 0xef, 0x7f, 0x11, 0x40, + 0x8d, 0x01, 0xff, 0xe1, 0x98, 0x11, 0x80, 0x3c, 0x42, 0x97, 0x02, 0x9c, + 0x11, 0x00, 0xe9, 0xc4, 0xd7, 0x00, 0xef, 0x9a, 0x11, 0x80, 0x27, 0xf5, + 0x9b, 0x11, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0x99, 0x11, 0x80, 0x11, 0xe5, + 0xc0, 0xd7, 0x80, 0x08, 0xef, 0xc2, 0xd7, 0x00, 0xf5, 0xc3, 0xd7, 0x40, + 0xef, 0xbf, 0xd7, 0x40, 0x42, 0x4f, 0x21, 0xbd, 0xd7, 0x00, 0xe5, 0xbe, + 0xd7, 0x40, 0x42, 0xe8, 0x06, 0xc1, 0xd7, 0x40, 0x44, 0x41, 0xb1, 0x9d, + 0x11, 0x40, 0xef, 0x65, 0x11, 0x80, 0x21, 0xf5, 0x73, 0x11, 0xc0, 0x00, + 0x8d, 0x01, 0xff, 0xe1, 0xb9, 0xd7, 0x00, 0xe5, 0xbb, 0xd7, 0x80, 0x08, + 0xef, 0xbc, 0xd7, 0x00, 0xf5, 0x95, 0x11, 0x40, 0xef, 0xba, 0xd7, 0x00, + 0xf5, 0x96, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x42, 0x97, 0x02, 0x7c, 0x11, + 0x00, 0xef, 0x7a, 0x11, 0x00, 0xf5, 0x7b, 0x11, 0x40, 0x8d, 0x23, 0xe5, + 0x62, 0x11, 0x00, 0x44, 0x41, 0xb1, 0x9e, 0x11, 0xc0, 0x00, 0x8d, 0x01, + 0xff, 0xe1, 0xc5, 0xd7, 0x00, 0xe5, 0xc6, 0xd7, 0x80, 0x08, 0xe9, 0xa1, + 0x11, 0x00, 0xf5, 0xa0, 0x11, 0x40, 0xef, 0x9f, 0x11, 0x40, 0x42, 0x97, + 0x02, 0xa3, 0x11, 0x00, 0xef, 0x76, 0x11, 0x00, 0xf5, 0x77, 0x11, 0x40, + 0xa3, 0xd7, 0x07, 0x45, 0x71, 0xa5, 0xc2, 0x11, 0x80, 0xb4, 0x07, 0x45, + 0x1e, 0xcc, 0xbc, 0x11, 0x80, 0x95, 0x07, 0xab, 0xb3, 0x06, 0x45, 0xa8, + 0xe8, 0xb7, 0x11, 0x80, 0xd3, 0x05, 0x45, 0x1b, 0xe9, 0xab, 0x11, 0x80, + 0x8d, 0x05, 0xb0, 0x8e, 0x04, 0x45, 0x65, 0xea, 0xaf, 0x11, 0x80, 0xc0, + 0x02, 0xb3, 0x89, 0x01, 0xb4, 0x44, 0x02, 0x4d, 0x00, 0x01, 0xff, 0x49, + 0x6d, 0xa5, 0xf9, 0x11, 0x00, 0x46, 0xe2, 0xcc, 0xf0, 0x11, 0xc0, 0x00, + 0x8d, 0x01, 0xff, 0x45, 0x71, 0xa5, 0xf6, 0xd7, 0x00, 0xab, 0x1b, 0x45, + 0xa8, 0xe8, 0xf5, 0xd7, 0x00, 0x47, 0x81, 0xd4, 0xf2, 0x11, 0x00, 0xb3, + 0x01, 0xff, 0x43, 0x23, 0x42, 0xf1, 0x11, 0x00, 0x4a, 0xd8, 0xa2, 0xed, + 0x11, 0x40, 0x46, 0xca, 0xc2, 0xef, 0x11, 0x00, 0x45, 0xdd, 0xa2, 0xec, + 0x11, 0x40, 0x46, 0x57, 0xd6, 0xc0, 0x11, 0x00, 0x45, 0xe5, 0xcd, 0xae, + 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xa3, 0x25, 0x46, 0xdc, 0xa2, 0xca, + 0x11, 0x00, 0x45, 0xe2, 0x84, 0xcf, 0xd7, 0x00, 0x45, 0x65, 0xea, 0xcb, + 0x11, 0x00, 0x44, 0x65, 0xbf, 0xd0, 0xd7, 0x80, 0x06, 0x47, 0x56, 0xd6, + 0xd4, 0xd7, 0x40, 0x47, 0xc0, 0xcd, 0xd1, 0xd7, 0x40, 0x46, 0xea, 0xcf, + 0xd3, 0xd7, 0x00, 0x44, 0xeb, 0xcf, 0xd2, 0xd7, 0x40, 0x43, 0x23, 0x42, + 0xba, 0x11, 0x80, 0x5f, 0x04, 0x2c, 0x2d, 0x01, 0xff, 0x45, 0x42, 0xe5, + 0xf9, 0xd7, 0x00, 0x45, 0x1e, 0xcc, 0xee, 0x11, 0x00, 0x46, 0xdc, 0xa2, + 0xa9, 0x11, 0x00, 0x45, 0xa8, 0xe8, 0xe0, 0xd7, 0x00, 0x45, 0x1b, 0xe9, + 0xff, 0x11, 0x00, 0x45, 0xe2, 0x84, 0xe6, 0xd7, 0x00, 0x45, 0x65, 0xea, + 0xd0, 0x11, 0x80, 0x29, 0x44, 0x65, 0xbf, 0xbb, 0x11, 0x80, 0x13, 0x46, + 0xe4, 0xcd, 0xcd, 0xd7, 0x80, 0x06, 0x48, 0xe0, 0xcc, 0xee, 0x11, 0x40, + 0x46, 0x6c, 0xd8, 0xce, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0x46, 0xdc, 0xa2, + 0xec, 0xd7, 0x00, 0x46, 0xe4, 0xcd, 0xed, 0xd7, 0x40, 0x48, 0xc8, 0xc2, + 0xd7, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0xa3, 0x3d, 0x45, 0x71, 0xa5, 0xf2, + 0xd7, 0x00, 0xab, 0x29, 0x45, 0xa8, 0xe8, 0xea, 0xd7, 0x00, 0xb0, 0x15, + 0x45, 0x65, 0xea, 0xe9, 0x11, 0x00, 0xb4, 0x01, 0xff, 0x46, 0x57, 0xd6, + 0xf1, 0xd7, 0x00, 0x45, 0xe5, 0xcd, 0xe8, 0x11, 0x40, 0x46, 0x82, 0xd4, + 0xee, 0xd7, 0x00, 0x44, 0xe3, 0x84, 0xea, 0x11, 0x40, 0x4c, 0xdb, 0x84, + 0xeb, 0xd7, 0x00, 0x45, 0xdd, 0xa2, 0xe7, 0x11, 0x40, 0x46, 0xea, 0xcf, + 0xf0, 0xd7, 0x00, 0x44, 0xeb, 0xcf, 0xef, 0xd7, 0x40, 0x8d, 0x01, 0xff, + 0x45, 0x71, 0xa5, 0xb6, 0x11, 0x00, 0xab, 0x98, 0x01, 0x45, 0xa8, 0xe8, + 0xb1, 0x11, 0x80, 0x7c, 0x45, 0x1b, 0xe9, 0xcd, 0x11, 0x00, 0xb0, 0x46, + 0xb3, 0x2d, 0xb4, 0x18, 0x02, 0x4d, 0x00, 0x01, 0xff, 0x49, 0x6d, 0xa5, + 0xd9, 0x11, 0x80, 0x06, 0x46, 0xe2, 0xcc, 0xdb, 0xd7, 0x40, 0x46, 0x5a, + 0xd8, 0xdc, 0xd7, 0x40, 0x46, 0x57, 0xd6, 0xb4, 0x11, 0x00, 0x45, 0xe5, + 0xcd, 0xce, 0x11, 0xc0, 0x00, 0x46, 0x5a, 0xd8, 0xcf, 0x11, 0x40, 0x43, + 0x23, 0x42, 0xb3, 0x11, 0x00, 0x04, 0x2c, 0x2d, 0x01, 0xff, 0x46, 0xdc, + 0xa2, 0xd5, 0xd7, 0x00, 0x44, 0x65, 0xbf, 0xd6, 0x11, 0x40, 0x46, 0x82, + 0xd4, 0xd7, 0x11, 0x00, 0x46, 0xd2, 0xc2, 0xb5, 0x11, 0x00, 0x44, 0xe3, + 0x84, 0xb2, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x45, 0x71, 0xa5, 0xd4, + 0x11, 0x00, 0x47, 0xd1, 0xc2, 0xda, 0xd7, 0x00, 0x44, 0x65, 0xbf, 0xd3, + 0x11, 0x00, 0x46, 0xe4, 0xcd, 0xd9, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0x45, + 0x71, 0xa5, 0xd8, 0xd7, 0x00, 0x46, 0xdc, 0xa2, 0xd1, 0x11, 0x00, 0x44, + 0x65, 0xbf, 0xd2, 0x11, 0x40, 0x4c, 0xdb, 0x84, 0xd5, 0x11, 0x00, 0x46, + 0xca, 0xc2, 0xd8, 0x11, 0x00, 0x45, 0xdd, 0xa2, 0xb0, 0x11, 0xc0, 0x00, + 0x8d, 0x01, 0xff, 0x45, 0x71, 0xa5, 0xd6, 0xd7, 0x00, 0x44, 0x65, 0xbf, + 0xcc, 0x11, 0x40, 0x46, 0x82, 0xd4, 0xeb, 0x11, 0x80, 0x66, 0x46, 0xd2, + 0xc2, 0xc1, 0x11, 0x80, 0x4a, 0x44, 0xe3, 0x84, 0xb8, 0x11, 0xc0, 0x00, + 0x8d, 0x01, 0xff, 0xa3, 0x32, 0x45, 0x71, 0xa5, 0xe5, 0x11, 0x00, 0x45, + 0xa8, 0xe8, 0xe5, 0xd7, 0x00, 0x47, 0xd1, 0xc2, 0xe4, 0x11, 0x00, 0x45, + 0x65, 0xea, 0xe3, 0x11, 0x80, 0x13, 0x44, 0x65, 0xbf, 0xb9, 0x11, 0x80, + 0x06, 0x46, 0xe4, 0xcd, 0xe3, 0xd7, 0x40, 0x47, 0xe3, 0xcd, 0xe7, 0xd7, + 0x40, 0x48, 0xd0, 0xc2, 0xe4, 0xd7, 0x40, 0x46, 0xea, 0xcf, 0xe9, 0xd7, + 0x00, 0x44, 0xeb, 0xcf, 0xe8, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0x45, 0xe2, + 0x84, 0xf3, 0x11, 0x00, 0x44, 0x65, 0xbf, 0xfa, 0xd7, 0x00, 0x47, 0x56, + 0xd6, 0xfb, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0x4d, 0xda, 0x84, 0xf4, 0xd7, + 0x00, 0x45, 0xe2, 0x84, 0xf3, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0xa3, 0x2d, + 0x45, 0x71, 0xa5, 0xad, 0x11, 0x00, 0x46, 0xdc, 0xa2, 0xc5, 0x11, 0x00, + 0x47, 0x81, 0xd4, 0xc8, 0x11, 0x00, 0x45, 0x65, 0xea, 0xcb, 0xd7, 0x00, + 0x44, 0x65, 0xbf, 0xc7, 0x11, 0x00, 0xb4, 0x01, 0xff, 0x46, 0x57, 0xd6, + 0xc9, 0x11, 0x00, 0x45, 0xe5, 0xcd, 0xc6, 0x11, 0x40, 0x46, 0xea, 0xcf, + 0xcc, 0xd7, 0x00, 0x44, 0xeb, 0xcf, 0xac, 0x11, 0x40, 0x8d, 0x01, 0xff, + 0xa3, 0x47, 0x45, 0x71, 0xa5, 0xe1, 0x11, 0x00, 0x46, 0xdc, 0xa2, 0xda, + 0x11, 0x00, 0x45, 0x1b, 0xe9, 0xde, 0xd7, 0x00, 0xb0, 0x20, 0x45, 0x65, + 0xea, 0xdb, 0x11, 0x00, 0xb3, 0x01, 0xff, 0x43, 0x23, 0x42, 0xdd, 0x11, + 0x00, 0x04, 0x2c, 0x2d, 0x01, 0xff, 0x45, 0x1b, 0xe9, 0xdf, 0xd7, 0x00, + 0x44, 0x65, 0xbf, 0xde, 0x11, 0x40, 0x46, 0x82, 0xd4, 0xdf, 0x11, 0x00, + 0x44, 0xe3, 0x84, 0xdc, 0x11, 0xc0, 0x00, 0x45, 0xf5, 0xe1, 0xe1, 0xd7, + 0x40, 0x46, 0xea, 0xcf, 0xe0, 0x11, 0x00, 0x44, 0xeb, 0xcf, 0xe2, 0xd7, + 0x40, 0x07, 0xdb, 0x84, 0x41, 0x46, 0xca, 0xc2, 0xbf, 0x11, 0x00, 0x45, + 0xdd, 0xa2, 0xa8, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x47, 0xe9, 0xcf, + 0xfc, 0x11, 0x00, 0x45, 0x71, 0xa5, 0xfe, 0x11, 0x00, 0x47, 0xc9, 0xc2, + 0xfd, 0x11, 0x00, 0x45, 0x1b, 0xe9, 0xfa, 0x11, 0x00, 0x45, 0xe2, 0x84, + 0xfb, 0x11, 0x00, 0x45, 0x65, 0xea, 0xc3, 0x11, 0x00, 0x44, 0x65, 0xbf, + 0xaa, 0x11, 0xc0, 0x00, 0x47, 0xc0, 0xcd, 0xc4, 0x11, 0x40, 0x45, 0xa8, + 0xe8, 0xe2, 0x11, 0x00, 0xb0, 0x06, 0x45, 0x65, 0xea, 0xdd, 0xd7, 0x40, + 0x46, 0xd2, 0xc2, 0xf4, 0x11, 0x00, 0x44, 0xe3, 0x84, 0xe6, 0x11, 0x40, + 0x8d, 0x01, 0xff, 0xab, 0x06, 0x4b, 0xd7, 0xa2, 0xed, 0x11, 0x40, 0x46, + 0xca, 0xc2, 0xef, 0x11, 0x00, 0x45, 0xdd, 0xa2, 0xec, 0x11, 0x40, 0x8d, + 0x01, 0xff, 0x45, 0xa8, 0xe8, 0xf7, 0x11, 0x00, 0x45, 0x1b, 0xe9, 0xf5, + 0x11, 0x00, 0x45, 0xe2, 0x84, 0xf8, 0x11, 0x00, 0x45, 0x65, 0xea, 0xf6, + 0x11, 0x40, 0x46, 0xea, 0xcf, 0xbe, 0x11, 0x00, 0x44, 0xeb, 0xcf, 0xbd, + 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x45, 0xe2, 0x84, 0xf7, 0xd7, 0x00, + 0x4a, 0x45, 0xb1, 0xf8, 0xd7, 0x40, 0xa3, 0x83, 0x06, 0x46, 0xa7, 0x82, + 0x5f, 0x11, 0x00, 0x45, 0x71, 0xa5, 0x12, 0x11, 0x80, 0xef, 0x05, 0x45, + 0x1e, 0xcc, 0x0b, 0x11, 0x80, 0x95, 0x05, 0xab, 0xdb, 0x04, 0x45, 0xa8, + 0xe8, 0x06, 0x11, 0x80, 0xb8, 0x04, 0x45, 0x1b, 0xe9, 0x02, 0x11, 0x80, + 0x89, 0x04, 0xb0, 0xf0, 0x02, 0x45, 0x65, 0xea, 0x05, 0x11, 0x80, 0x8e, + 0x02, 0xb3, 0x47, 0xb4, 0x11, 0x02, 0x4d, 0x00, 0x01, 0xff, 0x49, 0x6d, + 0xa5, 0x59, 0x11, 0x00, 0x46, 0xe2, 0xcc, 0x4c, 0x11, 0x40, 0x46, 0x57, + 0xd6, 0x10, 0x11, 0x00, 0x45, 0xe5, 0xcd, 0x03, 0x11, 0xc0, 0x00, 0x8d, + 0x01, 0xff, 0x45, 0x42, 0xe5, 0x63, 0xa9, 0x00, 0x46, 0xdc, 0xa2, 0x17, + 0x11, 0x00, 0x45, 0xa8, 0xe8, 0x60, 0xa9, 0x00, 0x45, 0xe2, 0x84, 0x61, + 0xa9, 0x00, 0x45, 0x65, 0xea, 0x5e, 0x11, 0x00, 0x44, 0x65, 0xbf, 0x62, + 0xa9, 0x40, 0x43, 0x23, 0x42, 0x09, 0x11, 0x80, 0x57, 0x04, 0x2c, 0x2d, + 0x01, 0xff, 0x45, 0x42, 0xe5, 0x0d, 0x11, 0x80, 0x45, 0x45, 0x71, 0xa5, + 0x58, 0x11, 0x00, 0x45, 0x1e, 0xcc, 0x47, 0x11, 0x00, 0x46, 0xdc, 0xa2, + 0x01, 0x11, 0x00, 0x45, 0x1b, 0xe9, 0x14, 0x11, 0x00, 0x45, 0xe2, 0x84, + 0x08, 0x11, 0x00, 0x45, 0x65, 0xea, 0x19, 0x11, 0x00, 0x44, 0x65, 0xbf, + 0x0a, 0x11, 0x80, 0x14, 0xb4, 0x06, 0x4b, 0x6b, 0xa5, 0x7c, 0xa9, 0x40, + 0x46, 0x57, 0xd6, 0x79, 0xa9, 0x00, 0x45, 0xe5, 0xcd, 0x04, 0x11, 0x40, + 0x46, 0x6c, 0xd8, 0x75, 0xa9, 0x40, 0x46, 0x5a, 0xd8, 0x78, 0xa9, 0x40, + 0x8d, 0x01, 0xff, 0xa3, 0x56, 0x45, 0x71, 0xa5, 0x3b, 0x11, 0x00, 0x45, + 0x1e, 0xcc, 0x35, 0x11, 0x00, 0xab, 0x3c, 0x45, 0xa8, 0xe8, 0x31, 0x11, + 0x00, 0x45, 0x1b, 0xe9, 0x2e, 0x11, 0x00, 0xb0, 0x1b, 0x45, 0x65, 0xea, + 0x30, 0x11, 0x00, 0x49, 0x60, 0xbf, 0x34, 0x11, 0x00, 0xb4, 0x01, 0xff, + 0x46, 0x57, 0xd6, 0x39, 0x11, 0x00, 0x45, 0xe5, 0xcd, 0x2f, 0x11, 0x40, + 0x46, 0xd2, 0xc2, 0x3a, 0x11, 0x00, 0x44, 0xe3, 0x84, 0x32, 0x11, 0xc0, + 0x00, 0x47, 0xc0, 0xcd, 0x33, 0x11, 0x40, 0x46, 0xca, 0xc2, 0x38, 0x11, + 0x00, 0x45, 0xdd, 0xa2, 0x2d, 0x11, 0x40, 0x46, 0xea, 0xcf, 0x37, 0x11, + 0x00, 0x44, 0xeb, 0xcf, 0x36, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x42, + 0xe5, 0x6d, 0xa9, 0x00, 0x45, 0x71, 0xa5, 0x1a, 0x11, 0x00, 0xab, 0x37, + 0x45, 0xa8, 0xe8, 0x68, 0xa9, 0x00, 0x45, 0x1b, 0xe9, 0x18, 0x11, 0x00, + 0x45, 0xe2, 0x84, 0x69, 0xa9, 0x00, 0xb3, 0x06, 0x46, 0xe4, 0xcd, 0x66, + 0xa9, 0x40, 0x43, 0x23, 0x42, 0x6c, 0xa9, 0x00, 0x04, 0x2c, 0x2d, 0x01, + 0xff, 0x46, 0xdc, 0xa2, 0x65, 0xa9, 0x00, 0x45, 0xe2, 0x84, 0x6a, 0xa9, + 0x00, 0x46, 0xe4, 0xcd, 0x67, 0xa9, 0x40, 0x4c, 0xdb, 0x84, 0x6b, 0xa9, + 0x00, 0x46, 0xca, 0xc2, 0x6e, 0xa9, 0x00, 0x45, 0xdd, 0xa2, 0x64, 0xa9, + 0x40, 0x46, 0x82, 0xd4, 0x40, 0x11, 0x00, 0x46, 0xd2, 0xc2, 0x11, 0x11, + 0x80, 0x7a, 0x44, 0xe3, 0x84, 0x07, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, + 0xa3, 0x62, 0x45, 0x71, 0xa5, 0x74, 0xa9, 0x00, 0xab, 0x4e, 0x45, 0x1b, + 0xe9, 0x1f, 0x11, 0x00, 0x47, 0xd1, 0xc2, 0x2a, 0x11, 0x00, 0xb3, 0x0f, + 0xb4, 0x01, 0xff, 0x46, 0x57, 0xd6, 0x29, 0x11, 0x00, 0x45, 0xe5, 0xcd, + 0x20, 0x11, 0x40, 0x43, 0x23, 0x42, 0x21, 0x11, 0x80, 0x06, 0x48, 0x61, + 0xbf, 0x25, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x42, 0xe5, 0x26, 0x11, + 0x00, 0x46, 0xdc, 0xa2, 0x22, 0x11, 0x00, 0x45, 0xe2, 0x84, 0x24, 0x11, + 0x00, 0xb4, 0x01, 0xff, 0x46, 0x57, 0xd6, 0x72, 0xa9, 0x00, 0x45, 0xe5, + 0xcd, 0x23, 0x11, 0x40, 0x46, 0xca, 0xc2, 0x73, 0xa9, 0x00, 0x45, 0xdd, + 0xa2, 0x1e, 0x11, 0x40, 0x46, 0xea, 0xcf, 0x28, 0x11, 0x00, 0x44, 0xeb, + 0xcf, 0x27, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x71, 0xa5, 0x7a, 0xa9, + 0x00, 0x45, 0xe2, 0x84, 0x56, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x42, + 0xe5, 0x5c, 0x11, 0x00, 0x45, 0x71, 0xa5, 0x5d, 0x11, 0x00, 0x46, 0xdc, + 0xa2, 0x13, 0x11, 0x00, 0x45, 0xe2, 0x84, 0x16, 0x11, 0x00, 0x44, 0x65, + 0xbf, 0x5b, 0x11, 0x00, 0x46, 0xe4, 0xcd, 0x15, 0x11, 0x40, 0x8d, 0x01, + 0xff, 0x46, 0xdc, 0xa2, 0x6f, 0xa9, 0x00, 0x45, 0xe2, 0x84, 0x1c, 0x11, + 0x00, 0x44, 0x65, 0xbf, 0x71, 0xa9, 0x00, 0x46, 0xe4, 0xcd, 0x70, 0xa9, + 0x40, 0x07, 0xdb, 0x84, 0x13, 0x46, 0xca, 0xc2, 0x0f, 0x11, 0x00, 0x45, + 0xdd, 0xa2, 0x00, 0x11, 0xc0, 0x00, 0x47, 0xe3, 0xcd, 0x5a, 0x11, 0x40, + 0x45, 0xa8, 0xe8, 0x1d, 0x11, 0x00, 0xb0, 0x0c, 0x45, 0x65, 0xea, 0x1b, + 0x11, 0x00, 0x4a, 0x45, 0xb1, 0x2c, 0x11, 0x40, 0x46, 0xd2, 0xc2, 0x57, + 0x11, 0x00, 0x44, 0xe3, 0x84, 0x2b, 0x11, 0x40, 0x8d, 0x01, 0xff, 0xa3, + 0x41, 0x45, 0x71, 0xa5, 0x77, 0xa9, 0x00, 0x46, 0xdc, 0xa2, 0x41, 0x11, + 0x00, 0x45, 0xa8, 0xe8, 0x43, 0x11, 0x00, 0xb0, 0x1b, 0x45, 0x65, 0xea, + 0x76, 0xa9, 0x00, 0x44, 0x65, 0xbf, 0x45, 0x11, 0x00, 0xb4, 0x01, 0xff, + 0x46, 0x57, 0xd6, 0x4a, 0x11, 0x00, 0x45, 0xe5, 0xcd, 0x42, 0x11, 0x40, + 0x46, 0x82, 0xd4, 0x46, 0x11, 0x00, 0x46, 0xd2, 0xc2, 0x4b, 0x11, 0x00, + 0x44, 0xe3, 0x84, 0x44, 0x11, 0x40, 0x46, 0xea, 0xcf, 0x49, 0x11, 0x00, + 0x44, 0xeb, 0xcf, 0x48, 0x11, 0x40, 0x45, 0xf5, 0xe1, 0x7b, 0xa9, 0x40, + 0x0a, 0x0b, 0xaa, 0x54, 0x02, 0x49, 0x00, 0x0d, 0x44, 0xeb, 0xcf, 0x0c, + 0x11, 0xc0, 0x00, 0x46, 0x60, 0xd8, 0x4d, 0x11, 0x40, 0x44, 0xec, 0xcf, + 0x0e, 0x11, 0x80, 0x2d, 0x05, 0x9b, 0xeb, 0x01, 0xff, 0xa3, 0x1a, 0xb3, + 0x01, 0xff, 0x43, 0x23, 0x42, 0x3c, 0x11, 0x00, 0x04, 0x2c, 0x2d, 0x01, + 0xff, 0x45, 0x42, 0xe5, 0x4f, 0x11, 0x00, 0x44, 0x65, 0xbf, 0x3d, 0x11, + 0x40, 0x46, 0xea, 0xcf, 0x54, 0x11, 0x00, 0x44, 0xeb, 0xcf, 0x4e, 0x11, + 0x40, 0x8d, 0x01, 0xff, 0x45, 0x71, 0xa5, 0x53, 0x11, 0x00, 0x47, 0xc9, + 0xc2, 0x52, 0x11, 0x40, 0xa3, 0x1a, 0xb3, 0x01, 0xff, 0x43, 0x23, 0x42, + 0x3e, 0x11, 0x00, 0x04, 0x2c, 0x2d, 0x01, 0xff, 0x45, 0x42, 0xe5, 0x51, + 0x11, 0x00, 0x44, 0x65, 0xbf, 0x3f, 0x11, 0x40, 0x46, 0xea, 0xcf, 0x55, + 0x11, 0x00, 0x44, 0xeb, 0xcf, 0x50, 0x11, 0x40, 0x0c, 0x9b, 0x8b, 0x14, + 0x02, 0x16, 0x00, 0x06, 0x45, 0x89, 0xcd, 0x1d, 0xf9, 0x41, 0xe7, 0x5c, + 0xf4, 0x01, 0x42, 0x60, 0x07, 0x3e, 0xf9, 0x41, 0x5a, 0x14, 0x1f, 0x1e, + 0xf9, 0x01, 0x58, 0xb6, 0x28, 0xf0, 0xfa, 0x41, 0x46, 0x4c, 0xda, 0x54, + 0xf3, 0x01, 0x43, 0xfb, 0x37, 0x28, 0xf5, 0x81, 0x0d, 0xb3, 0x01, 0xff, + 0xe1, 0xac, 0xfa, 0x01, 0x48, 0x70, 0xcb, 0x39, 0xf4, 0x41, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x44, 0x20, 0xdf, 0x92, 0x26, 0x00, 0x46, 0xe0, 0xdf, + 0x2d, 0x26, 0x00, 0x46, 0x5a, 0xe1, 0xe0, 0xf6, 0x41, 0x4c, 0x42, 0x11, + 0xed, 0xff, 0x00, 0x4f, 0x34, 0x0c, 0xec, 0xff, 0x00, 0x54, 0x6c, 0x42, + 0xe8, 0xff, 0x00, 0x07, 0x78, 0xd1, 0xda, 0x02, 0x0c, 0x4c, 0x20, 0xc9, + 0x02, 0x08, 0x78, 0xc7, 0x2c, 0x04, 0xc3, 0x00, 0x1c, 0x05, 0xc8, 0x00, + 0x0c, 0x4d, 0xc1, 0x20, 0xea, 0xff, 0x00, 0x4c, 0x32, 0x11, 0xee, 0xff, + 0x40, 0x4f, 0x33, 0x69, 0x63, 0xff, 0x00, 0x4b, 0xb8, 0x02, 0xeb, 0xff, + 0x40, 0x4f, 0x33, 0x69, 0x62, 0xff, 0x00, 0x4b, 0xb8, 0x02, 0xe9, 0xff, + 0x40, 0x80, 0x06, 0x5e, 0x45, 0x12, 0x70, 0xff, 0x40, 0x07, 0xec, 0x05, + 0x12, 0x4a, 0xe6, 0x45, 0x65, 0xff, 0x00, 0x56, 0x1b, 0x37, 0x9f, 0xff, + 0x00, 0x51, 0x20, 0x37, 0x9e, 0xff, 0x40, 0xe1, 0x71, 0xff, 0x00, 0xe5, + 0x74, 0xff, 0x00, 0xa8, 0xdc, 0x01, 0xe9, 0x72, 0xff, 0x00, 0xab, 0xc1, + 0x01, 0xad, 0xaa, 0x01, 0xee, 0x9d, 0xff, 0x80, 0x90, 0x01, 0xef, 0x75, + 0xff, 0x00, 0xb2, 0x76, 0xb3, 0x33, 0xb4, 0x1d, 0xf5, 0x73, 0xff, 0x00, + 0xb7, 0x0f, 0xb9, 0x01, 0xff, 0xe1, 0x94, 0xff, 0x00, 0xef, 0x96, 0xff, + 0x00, 0xf5, 0x95, 0xff, 0x40, 0xe1, 0x9c, 0xff, 0x00, 0xef, 0x66, 0xff, + 0x40, 0xe1, 0x80, 0xff, 0x00, 0xe5, 0x83, 0xff, 0x00, 0xe9, 0x81, 0xff, + 0x00, 0xef, 0x84, 0xff, 0x00, 0xf5, 0x82, 0xff, 0x40, 0xe1, 0x7b, 0xff, + 0x00, 0xe5, 0x7e, 0xff, 0x00, 0xe9, 0x7c, 0xff, 0x00, 0x05, 0x5e, 0x07, + 0x08, 0xef, 0x7f, 0xff, 0x00, 0xf5, 0x7d, 0xff, 0x40, 0xe1, 0x67, 0xff, + 0x00, 0xe5, 0x6a, 0xff, 0x00, 0xe9, 0x68, 0xff, 0x00, 0xef, 0x6b, 0xff, + 0x00, 0x42, 0x5c, 0x01, 0x6f, 0xff, 0x00, 0xf5, 0x69, 0xff, 0x00, 0xb9, + 0x01, 0xff, 0xe1, 0x6c, 0xff, 0x00, 0xef, 0x6e, 0xff, 0x00, 0xf5, 0x6d, + 0xff, 0x40, 0xe1, 0x97, 0xff, 0x00, 0xe5, 0x9a, 0xff, 0x00, 0xe9, 0x98, + 0xff, 0x00, 0xef, 0x9b, 0xff, 0x00, 0xf5, 0x99, 0xff, 0x40, 0xe1, 0x85, + 0xff, 0x00, 0xe5, 0x88, 0xff, 0x00, 0xe9, 0x86, 0xff, 0x00, 0xef, 0x89, + 0xff, 0x00, 0xf5, 0x87, 0xff, 0x40, 0xe1, 0x8f, 0xff, 0x00, 0xe5, 0x92, + 0xff, 0x00, 0xe9, 0x90, 0xff, 0x00, 0xef, 0x93, 0xff, 0x00, 0xf5, 0x91, + 0xff, 0x40, 0xe1, 0x76, 0xff, 0x00, 0xe5, 0x79, 0xff, 0x00, 0xe9, 0x77, + 0xff, 0x00, 0xef, 0x7a, 0xff, 0x00, 0xf5, 0x78, 0xff, 0x40, 0xe1, 0x8a, + 0xff, 0x00, 0xe5, 0x8d, 0xff, 0x00, 0xe9, 0x8b, 0xff, 0x00, 0xef, 0x8e, + 0xff, 0x00, 0xf5, 0x8c, 0xff, 0x40, 0x45, 0x13, 0x05, 0x64, 0xff, 0x00, + 0x49, 0x81, 0x16, 0x61, 0xff, 0x40, 0x46, 0xa7, 0x82, 0xa0, 0xff, 0x00, + 0x07, 0xec, 0x05, 0x01, 0xff, 0xe1, 0xc2, 0xff, 0x80, 0xae, 0x02, 0xa3, + 0x9f, 0x02, 0xe5, 0xc7, 0xff, 0x80, 0x91, 0x02, 0x45, 0x71, 0xa5, 0xbe, + 0xff, 0x00, 0xe9, 0xdc, 0xff, 0x80, 0xff, 0x01, 0xab, 0xe9, 0x01, 0x45, + 0xa8, 0xe8, 0xb1, 0xff, 0x00, 0x45, 0x1b, 0xe9, 0xa4, 0xff, 0x80, 0xcc, + 0x01, 0xef, 0xcc, 0xff, 0x80, 0xc2, 0x01, 0xb0, 0xac, 0x01, 0x45, 0x65, + 0xea, 0xa9, 0xff, 0x80, 0x76, 0xb3, 0x4b, 0xb4, 0x3d, 0xf5, 0xd3, 0xff, + 0x00, 0xb7, 0x21, 0xb9, 0x01, 0xff, 0xe1, 0xc4, 0xff, 0x80, 0x15, 0xe5, + 0xcb, 0xff, 0x80, 0x0c, 0xe9, 0xdb, 0xff, 0x00, 0xef, 0xd2, 0xff, 0x00, + 0xf5, 0xd7, 0xff, 0x40, 0xef, 0xca, 0xff, 0x40, 0xe5, 0xc5, 0xff, 0x40, + 0xe1, 0xcd, 0xff, 0x80, 0x0d, 0xe5, 0xd5, 0xff, 0x80, 0x04, 0xe9, 0xd6, + 0xff, 0x40, 0xef, 0xd4, 0xff, 0x40, 0xe5, 0xce, 0xff, 0x40, 0x46, 0x57, + 0xd6, 0xbc, 0xff, 0x00, 0x45, 0xe5, 0xcd, 0xa7, 0xff, 0x40, 0x43, 0x23, + 0x42, 0xb5, 0xff, 0x00, 0x04, 0x2c, 0x2d, 0x01, 0xff, 0x45, 0x42, 0xe5, + 0xb9, 0xff, 0x00, 0x46, 0xdc, 0xa2, 0xa2, 0xff, 0x00, 0x45, 0xe2, 0x84, + 0xb3, 0xff, 0x00, 0x44, 0x65, 0xbf, 0xb6, 0xff, 0x00, 0x46, 0xe4, 0xcd, + 0xa8, 0xff, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x71, 0xa5, 0xb0, 0xff, 0x00, + 0x46, 0xdc, 0xa2, 0xaa, 0xff, 0x00, 0x45, 0xa8, 0xe8, 0xab, 0xff, 0x00, + 0xb0, 0x0c, 0x44, 0x65, 0xbf, 0xad, 0xff, 0x00, 0x47, 0x56, 0xd6, 0xae, + 0xff, 0x40, 0x46, 0xd2, 0xc2, 0xaf, 0xff, 0x00, 0x44, 0xe3, 0x84, 0xac, + 0xff, 0x40, 0x46, 0xd2, 0xc2, 0xbd, 0xff, 0x00, 0x44, 0xe3, 0x84, 0xb2, + 0xff, 0xc0, 0x00, 0x45, 0xf5, 0xe1, 0xb4, 0xff, 0x40, 0xe5, 0xcf, 0xff, + 0x40, 0x8d, 0x01, 0xff, 0x45, 0x42, 0xe5, 0xa5, 0xff, 0x00, 0x45, 0x71, + 0xa5, 0xa6, 0xff, 0x40, 0x46, 0xca, 0xc2, 0xbb, 0xff, 0x00, 0x45, 0xdd, + 0xa2, 0xa1, 0xff, 0xc0, 0x00, 0x45, 0xf5, 0xe1, 0xa3, 0xff, 0x40, 0x44, + 0x1f, 0xcc, 0xb7, 0xff, 0x40, 0xef, 0xc6, 0xff, 0x00, 0xf5, 0xda, 0xff, + 0x40, 0x46, 0xea, 0xcf, 0xba, 0xff, 0x00, 0x44, 0xeb, 0xcf, 0xb8, 0xff, + 0x40, 0xe5, 0xc3, 0xff, 0x40, 0x80, 0x0c, 0x43, 0xcb, 0x27, 0x87, 0xf4, + 0x01, 0x4a, 0xd9, 0xb3, 0xc8, 0xfa, 0x41, 0x44, 0x20, 0xdf, 0xae, 0xfa, + 0x01, 0x45, 0xd0, 0x4c, 0x0a, 0x20, 0x40, 0xa1, 0xcc, 0x43, 0xa5, 0xfa, + 0x38, 0x44, 0xc0, 0x7c, 0x7b, 0xf4, 0x01, 0xa9, 0xd1, 0x38, 0xac, 0x9b, + 0x33, 0xaf, 0xb6, 0x31, 0xb2, 0xd7, 0x0e, 0xb5, 0x01, 0xff, 0x02, 0x17, + 0x00, 0xc3, 0x0e, 0xa9, 0xb4, 0x0e, 0x07, 0x27, 0xd2, 0xf9, 0x09, 0x0c, + 0xaf, 0x92, 0xef, 0x06, 0xb2, 0x01, 0xff, 0x06, 0x12, 0xde, 0xf4, 0x02, + 0x0a, 0xad, 0xb2, 0x01, 0xff, 0x16, 0x3d, 0x33, 0xd2, 0x02, 0x06, 0xef, + 0x06, 0x8b, 0x02, 0x07, 0xec, 0x05, 0x52, 0x05, 0x5a, 0x03, 0x42, 0x06, + 0x3c, 0x39, 0x01, 0xff, 0x4b, 0x42, 0x39, 0x29, 0x61, 0x01, 0x05, 0x5a, + 0x03, 0x01, 0xff, 0xa1, 0x24, 0xe5, 0x23, 0x61, 0x81, 0x1b, 0xe9, 0x1f, + 0x61, 0x81, 0x12, 0xef, 0x26, 0x61, 0x81, 0x09, 0xf5, 0x21, 0x61, 0xc1, + 0x00, 0xf5, 0x22, 0x61, 0x41, 0xef, 0x27, 0x61, 0x41, 0xe9, 0x20, 0x61, + 0x41, 0xe5, 0x24, 0x61, 0x41, 0xe1, 0x1e, 0x61, 0x01, 0xe9, 0x25, 0x61, + 0x01, 0xf5, 0x28, 0x61, 0x41, 0x48, 0x3c, 0x16, 0x2d, 0x61, 0x01, 0x48, + 0x80, 0xcb, 0x2f, 0x61, 0x41, 0xe1, 0x00, 0x61, 0x01, 0xa2, 0xa4, 0x01, + 0xa3, 0x97, 0x01, 0xa4, 0x7f, 0xa7, 0x73, 0x42, 0x22, 0x00, 0x0a, 0x61, + 0x01, 0xaa, 0x61, 0xab, 0x55, 0x42, 0x74, 0x00, 0x1c, 0x61, 0x01, 0x42, + 0x6c, 0x00, 0x19, 0x61, 0x01, 0xae, 0x3d, 0xb0, 0x31, 0x42, 0x71, 0x00, + 0x1b, 0x61, 0x01, 0x42, 0x40, 0x06, 0x1d, 0x61, 0x01, 0xb4, 0x0c, 0x42, + 0xf5, 0x0a, 0x0f, 0x61, 0x01, 0x42, 0xbc, 0x22, 0x1a, 0x61, 0x41, 0xe1, + 0x10, 0x61, 0x01, 0x42, 0x22, 0x00, 0x11, 0x61, 0x01, 0xb4, 0x01, 0xff, + 0xe1, 0x0b, 0x61, 0x01, 0x42, 0x22, 0x00, 0x0c, 0x61, 0x41, 0xe1, 0x15, + 0x61, 0x01, 0x42, 0x22, 0x00, 0x16, 0x61, 0x41, 0xe1, 0x14, 0x61, 0x01, + 0x42, 0x24, 0x02, 0x05, 0x61, 0x41, 0xe1, 0x01, 0x61, 0x01, 0x42, 0x22, + 0x00, 0x02, 0x61, 0x41, 0xe1, 0x08, 0x61, 0x01, 0x42, 0x22, 0x00, 0x09, + 0x61, 0x41, 0xe1, 0x03, 0x61, 0x01, 0x42, 0x22, 0x00, 0x04, 0x61, 0x41, + 0xe1, 0x12, 0x61, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x13, 0x61, 0x41, + 0xe1, 0x0d, 0x61, 0x01, 0x42, 0x22, 0x00, 0x0e, 0x61, 0x41, 0xe1, 0x06, + 0x61, 0x01, 0x42, 0x22, 0x00, 0x07, 0x61, 0x41, 0xe1, 0x17, 0x61, 0x01, + 0x42, 0x22, 0x00, 0x18, 0x61, 0x41, 0x45, 0x12, 0x0b, 0x38, 0x61, 0x01, + 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x39, 0x61, 0x01, 0x43, 0x0e, 0x0b, 0x31, + 0x61, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x30, 0x61, 0x41, + 0x44, 0x25, 0x01, 0x33, 0x61, 0x01, 0x42, 0x15, 0x02, 0x32, 0x61, 0x41, + 0x44, 0xc9, 0x1d, 0x37, 0x61, 0x01, 0x42, 0x01, 0x26, 0x36, 0x61, 0x41, + 0x43, 0xd2, 0x05, 0x35, 0x61, 0x01, 0x43, 0xf6, 0x06, 0x34, 0x61, 0x41, + 0x42, 0x22, 0x00, 0x2c, 0x61, 0x01, 0x42, 0x71, 0x00, 0x2e, 0x61, 0x01, + 0x42, 0xf5, 0x0a, 0x2b, 0x61, 0x01, 0x42, 0xbc, 0x22, 0x2a, 0x61, 0x41, + 0xa1, 0xe4, 0x03, 0x06, 0xef, 0x06, 0x9d, 0x03, 0x48, 0x88, 0xc5, 0x74, + 0x0a, 0x00, 0x43, 0xe4, 0x0a, 0x72, 0x0a, 0x00, 0x07, 0xec, 0x05, 0x6f, + 0x05, 0x5a, 0x03, 0x3d, 0x45, 0x4b, 0xeb, 0x70, 0x0a, 0x00, 0x43, 0x70, + 0x00, 0x73, 0x0a, 0x00, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x1e, 0x42, + 0x27, 0x01, 0x47, 0x0a, 0x00, 0xe9, 0x3f, 0x0a, 0x80, 0x0f, 0x42, 0xcd, + 0x02, 0x4b, 0x0a, 0x00, 0xf5, 0x41, 0x0a, 0xc0, 0x00, 0xf5, 0x42, 0x0a, + 0x40, 0xe9, 0x40, 0x0a, 0x40, 0xe1, 0x3e, 0x0a, 0x00, 0xe9, 0x48, 0x0a, + 0x00, 0xf5, 0x4c, 0x0a, 0x40, 0x4a, 0x63, 0xa7, 0x01, 0x0a, 0x00, 0x45, + 0x4f, 0x6b, 0x02, 0x0a, 0x00, 0x45, 0x3f, 0x3f, 0x3c, 0x0a, 0x00, 0x45, + 0xbe, 0xeb, 0x51, 0x0a, 0x00, 0x02, 0x02, 0x00, 0x06, 0x46, 0x72, 0xe1, + 0x75, 0x0a, 0x40, 0x44, 0xe5, 0x23, 0x4d, 0x0a, 0x00, 0x45, 0xec, 0x4b, + 0x03, 0x0a, 0x40, 0xe1, 0x05, 0x0a, 0x80, 0x8c, 0x02, 0xa2, 0xff, 0x01, + 0xa3, 0xf2, 0x01, 0xa4, 0xd9, 0x01, 0x42, 0x27, 0x01, 0x0f, 0x0a, 0x00, + 0x42, 0x0c, 0x08, 0x5e, 0x0a, 0x00, 0xa7, 0xb9, 0x01, 0x42, 0x22, 0x00, + 0x39, 0x0a, 0x00, 0xe9, 0x07, 0x0a, 0x80, 0xa9, 0x01, 0xaa, 0x9c, 0x01, + 0xab, 0x88, 0x01, 0xac, 0x7c, 0x42, 0x6c, 0x00, 0x2e, 0x0a, 0x00, 0xae, + 0x5e, 0x42, 0xcd, 0x02, 0x13, 0x0a, 0x00, 0xb0, 0x4c, 0xb2, 0x40, 0xb3, + 0x34, 0xb4, 0x1b, 0xf5, 0x09, 0x0a, 0x80, 0x12, 0x42, 0xf5, 0x0a, 0x35, + 0x0a, 0x00, 0x42, 0xbc, 0x22, 0x2f, 0x0a, 0x00, 0x42, 0x59, 0x00, 0x5b, + 0x0a, 0x40, 0xf5, 0x0a, 0x0a, 0x40, 0xe1, 0x24, 0x0a, 0x00, 0x42, 0x22, + 0x00, 0x25, 0x0a, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x1f, 0x0a, 0x00, 0x42, + 0x22, 0x00, 0x20, 0x0a, 0x40, 0xe1, 0x38, 0x0a, 0x00, 0x42, 0x22, 0x00, + 0x36, 0x0a, 0x40, 0xe1, 0x30, 0x0a, 0x00, 0x42, 0x71, 0x00, 0x5c, 0x0a, + 0x40, 0xe1, 0x2a, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x2b, 0x0a, 0x40, 0xe1, + 0x28, 0x0a, 0x00, 0x42, 0x24, 0x02, 0x19, 0x0a, 0x00, 0x42, 0x2a, 0x05, + 0x23, 0x0a, 0x00, 0x42, 0xbc, 0x22, 0x1e, 0x0a, 0x40, 0xe1, 0x32, 0x0a, + 0x00, 0x42, 0x74, 0x00, 0x33, 0x0a, 0x40, 0xe1, 0x15, 0x0a, 0x00, 0xa8, + 0x01, 0xff, 0xe1, 0x16, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x59, 0x0a, 0x40, + 0xe1, 0x1c, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x1d, 0x0a, 0x40, 0xe9, 0x08, + 0x0a, 0x40, 0xe1, 0x17, 0x0a, 0x00, 0xa8, 0x01, 0xff, 0xe1, 0x18, 0x0a, + 0x00, 0x42, 0x22, 0x00, 0x5a, 0x0a, 0x40, 0xe1, 0x26, 0x0a, 0x00, 0xa4, + 0x06, 0x42, 0x22, 0x00, 0x27, 0x0a, 0x40, 0xe1, 0x21, 0x0a, 0x00, 0x42, + 0x22, 0x00, 0x22, 0x0a, 0x40, 0xe1, 0x1a, 0x0a, 0x00, 0x42, 0x22, 0x00, + 0x1b, 0x0a, 0x40, 0xe1, 0x2c, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x2d, 0x0a, + 0x40, 0xe1, 0x06, 0x0a, 0x00, 0xe9, 0x10, 0x0a, 0x00, 0xf5, 0x14, 0x0a, + 0x40, 0x45, 0x12, 0x0b, 0x6e, 0x0a, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, + 0x6f, 0x0a, 0x00, 0x43, 0x0e, 0x0b, 0x67, 0x0a, 0x00, 0xb3, 0x14, 0xb4, + 0x06, 0x44, 0x43, 0x1e, 0x66, 0x0a, 0x40, 0x44, 0x25, 0x01, 0x69, 0x0a, + 0x00, 0x42, 0x15, 0x02, 0x68, 0x0a, 0x40, 0x44, 0xc9, 0x1d, 0x6d, 0x0a, + 0x00, 0x42, 0x01, 0x26, 0x6c, 0x0a, 0x40, 0x43, 0xd2, 0x05, 0x6b, 0x0a, + 0x00, 0x43, 0xf6, 0x06, 0x6a, 0x0a, 0x40, 0x50, 0xdd, 0x57, 0x76, 0x0a, + 0x00, 0x44, 0x7d, 0xef, 0x71, 0x0a, 0x40, 0x06, 0xef, 0x06, 0xbe, 0x02, + 0x07, 0xec, 0x05, 0x50, 0x42, 0x14, 0x05, 0x98, 0x1d, 0x01, 0x05, 0x5a, + 0x03, 0x3a, 0xb6, 0x01, 0xff, 0x45, 0xe4, 0x23, 0x97, 0x1d, 0x01, 0x0a, + 0x41, 0x77, 0x01, 0xff, 0xa1, 0x1e, 0x42, 0x27, 0x01, 0x90, 0x1d, 0x01, + 0xe9, 0x8b, 0x1d, 0x81, 0x0f, 0x42, 0xcd, 0x02, 0x93, 0x1d, 0x01, 0xf5, + 0x8d, 0x1d, 0xc1, 0x00, 0xf5, 0x8e, 0x1d, 0x41, 0xe9, 0x8c, 0x1d, 0x41, + 0xe1, 0x8a, 0x1d, 0x01, 0xe9, 0x91, 0x1d, 0x01, 0xf5, 0x94, 0x1d, 0x41, + 0x48, 0x3c, 0x16, 0x95, 0x1d, 0x01, 0x47, 0xea, 0x4b, 0x96, 0x1d, 0x41, + 0xe1, 0x60, 0x1d, 0x81, 0xd8, 0x01, 0xa2, 0xcb, 0x01, 0xa3, 0xbe, 0x01, + 0xa4, 0xa5, 0x01, 0x42, 0x27, 0x01, 0x67, 0x1d, 0x01, 0xa7, 0x92, 0x01, + 0x42, 0x22, 0x00, 0x87, 0x1d, 0x01, 0xe9, 0x62, 0x1d, 0x81, 0x82, 0x01, + 0xaa, 0x76, 0xab, 0x6a, 0xac, 0x5e, 0x42, 0x6c, 0x00, 0x70, 0x1d, 0x01, + 0xae, 0x4c, 0x42, 0xcd, 0x02, 0x6a, 0x1d, 0x01, 0xb0, 0x3a, 0x42, 0x71, + 0x00, 0x88, 0x1d, 0x01, 0x42, 0x40, 0x06, 0x89, 0x1d, 0x01, 0xb4, 0x15, + 0xf5, 0x64, 0x1d, 0x81, 0x0c, 0x42, 0xf5, 0x0a, 0x6d, 0x1d, 0x01, 0x42, + 0xbc, 0x22, 0x6c, 0x1d, 0x41, 0xf5, 0x65, 0x1d, 0x41, 0xe1, 0x73, 0x1d, + 0x01, 0x42, 0x22, 0x00, 0x74, 0x1d, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x7d, + 0x1d, 0x01, 0x42, 0x22, 0x00, 0x7e, 0x1d, 0x41, 0xe1, 0x85, 0x1d, 0x01, + 0x42, 0x22, 0x00, 0x86, 0x1d, 0x41, 0xe1, 0x7a, 0x1d, 0x01, 0x42, 0x24, + 0x02, 0x84, 0x1d, 0x41, 0xe1, 0x75, 0x1d, 0x01, 0x42, 0x74, 0x00, 0x7f, + 0x1d, 0x41, 0xe1, 0x71, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x72, 0x1d, 0x41, + 0xe1, 0x80, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x81, 0x1d, 0x41, 0xe9, 0x63, + 0x1d, 0x41, 0xe1, 0x76, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x77, 0x1d, 0x41, + 0xe1, 0x78, 0x1d, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x79, 0x1d, 0x41, + 0xe1, 0x82, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x83, 0x1d, 0x41, 0xe1, 0x7b, + 0x1d, 0x01, 0x42, 0x22, 0x00, 0x7c, 0x1d, 0x41, 0xe1, 0x6e, 0x1d, 0x01, + 0x42, 0x22, 0x00, 0x6f, 0x1d, 0x41, 0xe1, 0x61, 0x1d, 0x01, 0xe9, 0x68, + 0x1d, 0x01, 0xf5, 0x6b, 0x1d, 0x41, 0x45, 0x12, 0x0b, 0xa8, 0x1d, 0x01, + 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xa9, 0x1d, 0x01, 0x43, 0x0e, 0x0b, 0xa1, + 0x1d, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xa0, 0x1d, 0x41, + 0x44, 0x25, 0x01, 0xa3, 0x1d, 0x01, 0x42, 0x15, 0x02, 0xa2, 0x1d, 0x41, + 0x44, 0xc9, 0x1d, 0xa7, 0x1d, 0x01, 0x42, 0x01, 0x26, 0xa6, 0x1d, 0x41, + 0x43, 0xd2, 0x05, 0xa5, 0x1d, 0x01, 0x43, 0xf6, 0x06, 0xa4, 0x1d, 0x41, + 0x51, 0xdc, 0x57, 0xf0, 0x0a, 0x00, 0x06, 0xef, 0x06, 0xe9, 0x03, 0x07, + 0xec, 0x05, 0xc6, 0x01, 0x42, 0x14, 0x05, 0xd0, 0x0a, 0x00, 0x4a, 0x65, + 0x80, 0xf1, 0x0a, 0x00, 0x05, 0x5a, 0x03, 0x61, 0x06, 0x3c, 0x39, 0x01, + 0xff, 0x07, 0x36, 0x61, 0x50, 0x05, 0x5a, 0x03, 0x01, 0xff, 0xa1, 0x3d, + 0x07, 0x36, 0x61, 0x31, 0xe5, 0xc7, 0x0a, 0x00, 0xe9, 0xbf, 0x0a, 0x80, + 0x24, 0xef, 0xcb, 0x0a, 0x00, 0xf5, 0xc1, 0x0a, 0x80, 0x17, 0x08, 0x22, + 0xc1, 0x01, 0xff, 0xec, 0xe2, 0x0a, 0x80, 0x09, 0xf2, 0xc3, 0x0a, 0xc0, + 0x00, 0xf2, 0xc4, 0x0a, 0x40, 0xec, 0xe3, 0x0a, 0x40, 0xf5, 0xc2, 0x0a, + 0x40, 0xe9, 0xc0, 0x0a, 0x40, 0xe5, 0xc5, 0x0a, 0x00, 0xef, 0xc9, 0x0a, + 0x40, 0xe1, 0xbe, 0x0a, 0x00, 0xe9, 0xc8, 0x0a, 0x00, 0xf5, 0xcc, 0x0a, + 0x40, 0xe5, 0x8d, 0x0a, 0x00, 0xef, 0x91, 0x0a, 0x40, 0xa1, 0x47, 0xa3, + 0x39, 0x46, 0xe8, 0xdd, 0xfc, 0x0a, 0x00, 0x45, 0x3f, 0x3f, 0xbc, 0x0a, + 0x00, 0xb3, 0x1f, 0xb4, 0x11, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0xe5, + 0x23, 0xcd, 0x0a, 0x00, 0x45, 0xec, 0x4b, 0x83, 0x0a, 0x40, 0x54, 0xf8, + 0x42, 0xfd, 0x0a, 0x00, 0x55, 0x35, 0x3f, 0xff, 0x0a, 0x40, 0x45, 0xc8, + 0xe6, 0xfb, 0x0a, 0x00, 0x44, 0x24, 0xeb, 0xfa, 0x0a, 0x40, 0x4a, 0xd8, + 0x23, 0x81, 0x0a, 0x00, 0x51, 0x39, 0x3f, 0xfe, 0x0a, 0x40, 0x47, 0x3d, + 0x16, 0x82, 0x0a, 0x00, 0x47, 0xaf, 0x88, 0xbd, 0x0a, 0x40, 0xe1, 0x85, + 0x0a, 0x80, 0x8c, 0x02, 0xa2, 0xff, 0x01, 0xa3, 0xf2, 0x01, 0xa4, 0xd9, + 0x01, 0xe5, 0x8f, 0x0a, 0x00, 0xa7, 0xc8, 0x01, 0x42, 0x22, 0x00, 0xb9, + 0x0a, 0x00, 0xe9, 0x87, 0x0a, 0x80, 0xb8, 0x01, 0xaa, 0xab, 0x01, 0xab, + 0x9e, 0x01, 0xac, 0x91, 0x01, 0x42, 0x6c, 0x00, 0xae, 0x0a, 0x00, 0xae, + 0x73, 0xef, 0x93, 0x0a, 0x00, 0xb0, 0x63, 0x42, 0x71, 0x00, 0xb0, 0x0a, + 0x00, 0xb3, 0x4b, 0xb4, 0x32, 0xf5, 0x89, 0x0a, 0x80, 0x29, 0xb6, 0x0c, + 0x42, 0xbc, 0x22, 0xaf, 0x0a, 0x00, 0x43, 0xcb, 0xc0, 0xf9, 0x0a, 0x40, + 0xe1, 0xb5, 0x0a, 0x00, 0x07, 0x23, 0xc1, 0x01, 0xff, 0xec, 0x8c, 0x0a, + 0x80, 0x09, 0xf2, 0x8b, 0x0a, 0xc0, 0x00, 0xf2, 0xe0, 0x0a, 0x40, 0xec, + 0xe1, 0x0a, 0x40, 0xf5, 0x8a, 0x0a, 0x40, 0xe1, 0xa4, 0x0a, 0x00, 0x42, + 0x22, 0x00, 0xa5, 0x0a, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x9f, 0x0a, 0x00, + 0x42, 0x22, 0x00, 0xa0, 0x0a, 0x40, 0xe1, 0xb8, 0x0a, 0x00, 0x42, 0x22, + 0x00, 0xb6, 0x0a, 0x00, 0x42, 0x40, 0x06, 0xb7, 0x0a, 0x40, 0xe1, 0xaa, + 0x0a, 0x00, 0x42, 0x22, 0x00, 0xab, 0x0a, 0x40, 0xe1, 0xa8, 0x0a, 0x00, + 0x42, 0x24, 0x02, 0x99, 0x0a, 0x00, 0x42, 0x2a, 0x05, 0xa3, 0x0a, 0x00, + 0x42, 0xbc, 0x22, 0x9e, 0x0a, 0x40, 0xe1, 0xb2, 0x0a, 0x00, 0x42, 0x74, + 0x00, 0xb3, 0x0a, 0x40, 0xe1, 0x95, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x96, + 0x0a, 0x40, 0xe1, 0x9c, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x9d, 0x0a, 0x40, + 0xe9, 0x88, 0x0a, 0x40, 0xe1, 0x97, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x98, + 0x0a, 0x40, 0xe1, 0xa6, 0x0a, 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa7, + 0x0a, 0x40, 0xe1, 0xa1, 0x0a, 0x00, 0x42, 0x22, 0x00, 0xa2, 0x0a, 0x40, + 0xe1, 0x9a, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x9b, 0x0a, 0x40, 0xe1, 0xac, + 0x0a, 0x00, 0x42, 0x22, 0x00, 0xad, 0x0a, 0x40, 0xe1, 0x86, 0x0a, 0x00, + 0xe9, 0x90, 0x0a, 0x00, 0xf5, 0x94, 0x0a, 0x40, 0x45, 0x12, 0x0b, 0xee, + 0x0a, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xef, 0x0a, 0x00, 0x43, 0x0e, + 0x0b, 0xe7, 0x0a, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xe6, + 0x0a, 0x40, 0x44, 0x25, 0x01, 0xe9, 0x0a, 0x00, 0x42, 0x15, 0x02, 0xe8, + 0x0a, 0x40, 0x44, 0xc9, 0x1d, 0xed, 0x0a, 0x00, 0x42, 0x01, 0x26, 0xec, + 0x0a, 0x40, 0x43, 0xd2, 0x05, 0xeb, 0x0a, 0x00, 0x43, 0xf6, 0x06, 0xea, + 0x0a, 0x40, 0x46, 0xdc, 0xda, 0xae, 0xf9, 0x01, 0x43, 0x32, 0x13, 0xb8, + 0xf3, 0x41, 0x48, 0x10, 0x9c, 0xb2, 0x20, 0x00, 0x45, 0xa6, 0xe5, 0x82, + 0xf4, 0x41, 0xa1, 0x81, 0x1f, 0xa5, 0x4d, 0xa9, 0x19, 0xaf, 0x01, 0xff, + 0x03, 0x7d, 0x15, 0x06, 0x4a, 0x89, 0xb3, 0x97, 0xf4, 0x41, 0x44, 0xb9, + 0x00, 0xd2, 0x2b, 0x00, 0x49, 0xd8, 0x20, 0x1d, 0x00, 0x40, 0x4b, 0x3b, + 0x9f, 0x2c, 0xf6, 0x01, 0x06, 0x6b, 0xa2, 0x01, 0xff, 0x5a, 0x62, 0x1f, + 0x38, 0xf6, 0x01, 0x44, 0x0c, 0x08, 0x00, 0xf6, 0xc1, 0x00, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x5b, 0xae, 0x1c, 0x2a, 0xf9, 0x01, 0xb3, 0x01, 0xff, + 0x4b, 0x71, 0x1f, 0x01, 0xf6, 0x01, 0x48, 0x60, 0xcb, 0x29, 0xf9, 0x41, + 0x0a, 0x8a, 0x00, 0xce, 0x1c, 0xa5, 0x06, 0x47, 0xbb, 0xd7, 0x76, 0xfa, + 0x41, 0x02, 0xbc, 0x00, 0x1d, 0x02, 0x92, 0x00, 0x01, 0xff, 0x45, 0x57, + 0xe4, 0x4f, 0xf3, 0x01, 0x44, 0x45, 0xef, 0xd7, 0xf4, 0x01, 0x45, 0xac, + 0x21, 0x9a, 0xf4, 0x01, 0x45, 0xba, 0xea, 0x57, 0xf9, 0x41, 0xa1, 0xde, + 0x18, 0x4b, 0x9a, 0x99, 0xd0, 0x03, 0x00, 0x08, 0xe4, 0x05, 0xbe, 0x10, + 0xa4, 0xf7, 0x0f, 0xa6, 0xe8, 0x0f, 0x4b, 0x7b, 0x9c, 0x88, 0x01, 0x01, + 0x02, 0x9e, 0x01, 0xb8, 0x0e, 0xab, 0x9b, 0x0e, 0xac, 0xa9, 0x0d, 0xad, + 0x9a, 0x0d, 0x4c, 0x20, 0x5d, 0x74, 0x03, 0x00, 0xaf, 0xe8, 0x0c, 0xb0, + 0xaf, 0x0c, 0x4d, 0xa6, 0x34, 0x7e, 0x03, 0x00, 0xb2, 0x8f, 0x0c, 0xb3, + 0xf4, 0x01, 0xb4, 0xb5, 0x01, 0x0d, 0xad, 0x89, 0x9e, 0x01, 0xb6, 0x1a, + 0x4b, 0x4a, 0xa5, 0x85, 0x01, 0x01, 0xb9, 0x06, 0x49, 0xd6, 0xc1, 0x8a, + 0x01, 0x41, 0x48, 0x98, 0xc1, 0x79, 0x01, 0x01, 0x4c, 0x39, 0x4f, 0x7a, + 0x03, 0x40, 0x44, 0x9c, 0x30, 0xef, 0x1f, 0x00, 0x15, 0x28, 0x3d, 0x01, + 0xff, 0xd1, 0x00, 0xd2, 0x81, 0x4a, 0xd2, 0x01, 0xd2, 0x81, 0x31, 0xd3, + 0x02, 0xd2, 0x01, 0xd4, 0x03, 0xd2, 0x01, 0xd5, 0x04, 0xd2, 0x81, 0x10, + 0xd6, 0x05, 0xd2, 0x01, 0xd7, 0x06, 0xd2, 0x01, 0xd8, 0x07, 0xd2, 0x01, + 0xd9, 0x08, 0xd2, 0x41, 0xd0, 0x18, 0xd2, 0x01, 0xd1, 0x19, 0xd2, 0x01, + 0xd2, 0x1a, 0xd2, 0x01, 0xd3, 0x1b, 0xd2, 0x01, 0xd4, 0x1c, 0xd2, 0x41, + 0xd0, 0x13, 0xd2, 0x01, 0xd1, 0x14, 0xd2, 0x01, 0xd2, 0x15, 0xd2, 0x01, + 0xd3, 0x16, 0xd2, 0x01, 0xd4, 0x17, 0xd2, 0x41, 0xd0, 0x09, 0xd2, 0x01, + 0xd1, 0x0a, 0xd2, 0x01, 0xd2, 0x0b, 0xd2, 0x01, 0xd3, 0x0c, 0xd2, 0x01, + 0xd4, 0x0d, 0xd2, 0x01, 0xd5, 0x0e, 0xd2, 0x01, 0xd6, 0x0f, 0xd2, 0x01, + 0xd7, 0x10, 0xd2, 0x01, 0xd8, 0x11, 0xd2, 0x01, 0xd9, 0x12, 0xd2, 0x41, + 0x55, 0xf9, 0x38, 0xd3, 0x03, 0x00, 0x59, 0xb7, 0x23, 0xd4, 0x03, 0x00, + 0x4b, 0xc5, 0x23, 0xd2, 0x03, 0x40, 0x4a, 0xa9, 0xa7, 0x7a, 0x01, 0x01, + 0xa8, 0x1d, 0x44, 0x1d, 0x6c, 0x84, 0x03, 0x00, 0x51, 0xb4, 0x5d, 0x89, + 0x01, 0x01, 0x03, 0x20, 0x0a, 0x01, 0xff, 0x4a, 0x0f, 0x79, 0x7d, 0x01, + 0x01, 0x4b, 0x71, 0xa3, 0x77, 0x01, 0x41, 0x4a, 0xc9, 0x95, 0xd1, 0x03, + 0x00, 0x04, 0x26, 0x01, 0x01, 0xff, 0x4a, 0x0f, 0x79, 0x7e, 0x01, 0x01, + 0x4d, 0xa5, 0x87, 0x78, 0x01, 0x41, 0x4c, 0x4b, 0x90, 0x8c, 0x01, 0x01, + 0x05, 0x5e, 0x07, 0x28, 0x16, 0xb5, 0x37, 0x06, 0x4d, 0xcb, 0x8a, 0xa0, + 0x01, 0x41, 0x44, 0x9a, 0x99, 0x66, 0x1d, 0x00, 0x43, 0x79, 0x16, 0x6a, + 0x1d, 0x00, 0x45, 0x2c, 0x58, 0x67, 0x1d, 0x00, 0x43, 0x53, 0x20, 0x69, + 0x1d, 0x00, 0x43, 0xef, 0x49, 0x68, 0x1d, 0x40, 0x5a, 0xb0, 0x1f, 0x7c, + 0x03, 0x00, 0x07, 0xec, 0x05, 0x11, 0x09, 0xdd, 0x14, 0x01, 0xff, 0x5a, + 0xb0, 0x1f, 0x7d, 0x03, 0x00, 0x53, 0xb7, 0x1f, 0x7b, 0x03, 0x40, 0xa1, + 0xf6, 0x07, 0x44, 0x9a, 0x99, 0xb2, 0x03, 0x00, 0x43, 0x79, 0x16, 0xc7, + 0x03, 0x00, 0xa4, 0xdb, 0x07, 0xa5, 0xd6, 0x05, 0x4b, 0x18, 0x9c, 0xc2, + 0x03, 0x00, 0x45, 0x2c, 0x58, 0xb3, 0x03, 0x00, 0x44, 0xc8, 0x95, 0x71, + 0x03, 0x00, 0x44, 0x99, 0x2e, 0xb9, 0x03, 0x80, 0xac, 0x04, 0xab, 0x9d, + 0x04, 0x45, 0x17, 0xe8, 0xbb, 0x03, 0x00, 0x42, 0xc3, 0x16, 0xbc, 0x03, + 0x00, 0x42, 0x3d, 0x16, 0xbd, 0x03, 0x00, 0x02, 0x14, 0x05, 0x85, 0x02, + 0xb0, 0xec, 0x01, 0x43, 0xef, 0x49, 0xc1, 0x03, 0x80, 0xd3, 0x01, 0xb3, + 0xb2, 0x01, 0xb4, 0xa3, 0x01, 0x47, 0xad, 0x89, 0xc5, 0x03, 0x80, 0x0c, + 0x42, 0xe2, 0x0c, 0xbe, 0x03, 0x00, 0x44, 0x61, 0xf3, 0xb6, 0x03, 0x40, + 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, 0x47, 0x46, 0xad, 0x70, 0xe1, 0x1f, + 0x00, 0x44, 0xf5, 0xf1, 0x7b, 0x1f, 0x00, 0xb0, 0x15, 0x45, 0x1c, 0x6c, + 0xcd, 0x03, 0x00, 0xb6, 0x01, 0xff, 0x44, 0x9c, 0x30, 0x7a, 0x1f, 0x00, + 0x45, 0x29, 0xea, 0xe0, 0x1f, 0x40, 0x4a, 0x41, 0xa1, 0xe6, 0x1f, 0x00, + 0x44, 0xc3, 0x88, 0x50, 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, + 0x44, 0xf5, 0xf1, 0x54, 0x1f, 0x00, 0x4b, 0x40, 0xa1, 0x56, 0x1f, 0x00, + 0x45, 0x9b, 0x30, 0x52, 0x1f, 0x40, 0x44, 0x47, 0x61, 0x51, 0x1f, 0x80, + 0x24, 0x48, 0x13, 0x6c, 0xcb, 0x03, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, + 0xff, 0x44, 0xf5, 0xf1, 0xe3, 0x1f, 0x00, 0x4b, 0x40, 0xa1, 0xe7, 0x1f, + 0x00, 0x45, 0x1c, 0x6c, 0xb0, 0x03, 0x00, 0x45, 0x9b, 0x30, 0xe2, 0x1f, + 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x55, 0x1f, 0x00, + 0x4b, 0x40, 0xa1, 0x57, 0x1f, 0x00, 0x45, 0x9b, 0x30, 0x53, 0x1f, 0x40, + 0x42, 0x5f, 0x24, 0xc4, 0x03, 0x00, 0x44, 0xc8, 0x95, 0xb8, 0x03, 0x40, + 0xa1, 0x12, 0x42, 0x0b, 0x00, 0xf8, 0x03, 0x00, 0x44, 0xbf, 0x1f, 0xc3, + 0x03, 0x00, 0x45, 0x41, 0xeb, 0xdb, 0x03, 0x40, 0x43, 0x38, 0x94, 0xe1, + 0x03, 0x00, 0xee, 0xfb, 0x03, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, + 0xb1, 0x76, 0xe5, 0x1f, 0x00, 0x45, 0x10, 0xea, 0xe4, 0x1f, 0x40, 0x51, + 0x20, 0x58, 0x77, 0x03, 0x00, 0x42, 0x49, 0x00, 0xc6, 0x03, 0x00, 0xe9, + 0xc0, 0x03, 0x00, 0x42, 0x5a, 0x03, 0xc8, 0x03, 0x40, 0x43, 0xce, 0x05, + 0xc9, 0x03, 0x80, 0x4e, 0x45, 0x4a, 0xe7, 0xbf, 0x03, 0xc0, 0x00, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x45, 0xb1, 0x76, 0x41, 0x1f, 0x80, 0x2a, 0x44, + 0xf5, 0xf1, 0x79, 0x1f, 0x00, 0x45, 0x10, 0xea, 0x40, 0x1f, 0x80, 0x0c, + 0x45, 0x1c, 0x6c, 0xcc, 0x03, 0x00, 0x45, 0x9b, 0x30, 0x78, 0x1f, 0x40, + 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x44, 0x1f, 0x00, 0x45, + 0x9b, 0x30, 0x42, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, + 0xf1, 0x45, 0x1f, 0x00, 0x45, 0x9b, 0x30, 0x43, 0x1f, 0x40, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x45, 0xb1, 0x76, 0x61, 0x1f, 0x80, 0x6e, 0x44, 0xf5, + 0xf1, 0x7d, 0x1f, 0x80, 0x61, 0xb0, 0x19, 0x45, 0x1c, 0x6c, 0xce, 0x03, + 0x00, 0x45, 0x9b, 0x30, 0x7c, 0x1f, 0x80, 0x06, 0x4d, 0x38, 0x4f, 0xf3, + 0x1f, 0x40, 0x52, 0x33, 0x4f, 0xf2, 0x1f, 0x40, 0x4a, 0x41, 0xa1, 0xf6, + 0x1f, 0x80, 0x39, 0x44, 0xc3, 0x88, 0x60, 0x1f, 0xc0, 0x00, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x64, 0x1f, 0x80, 0x20, 0x4b, 0x40, + 0xa1, 0x66, 0x1f, 0x80, 0x13, 0x45, 0x9b, 0x30, 0x62, 0x1f, 0x80, 0x06, + 0x4d, 0x38, 0x4f, 0xa0, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0xa2, 0x1f, 0x40, + 0x52, 0x33, 0x4f, 0xa6, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0xa4, 0x1f, 0x40, + 0x52, 0x33, 0x4f, 0xf7, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0xf4, 0x1f, 0x40, + 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x65, 0x1f, 0x80, 0x20, + 0x4b, 0x40, 0xa1, 0x67, 0x1f, 0x80, 0x13, 0x45, 0x9b, 0x30, 0x63, 0x1f, + 0x80, 0x06, 0x4d, 0x38, 0x4f, 0xa1, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0xa3, + 0x1f, 0x40, 0x52, 0x33, 0x4f, 0xa7, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0xa5, + 0x1f, 0x40, 0x44, 0x94, 0x90, 0xba, 0x03, 0x00, 0x44, 0xac, 0x80, 0xdf, + 0x03, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, 0x47, 0x46, 0xad, 0x70, + 0xd1, 0x1f, 0x00, 0x44, 0xf5, 0xf1, 0x77, 0x1f, 0x00, 0xb0, 0x15, 0x45, + 0x1c, 0x6c, 0xaf, 0x03, 0x00, 0xb6, 0x01, 0xff, 0x44, 0x9c, 0x30, 0x76, + 0x1f, 0x00, 0x45, 0x29, 0xea, 0xd0, 0x1f, 0x40, 0x4a, 0x41, 0xa1, 0xd6, + 0x1f, 0x00, 0x44, 0xc3, 0x88, 0x30, 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, + 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x34, 0x1f, 0x00, 0x4b, 0x40, 0xa1, 0x36, + 0x1f, 0x00, 0x45, 0x9b, 0x30, 0x32, 0x1f, 0x40, 0x44, 0x47, 0x61, 0x31, + 0x1f, 0x80, 0x24, 0x48, 0x13, 0x6c, 0xca, 0x03, 0xc0, 0x00, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0xd3, 0x1f, 0x00, 0x4b, 0x40, 0xa1, + 0xd7, 0x1f, 0x00, 0x45, 0x1c, 0x6c, 0x90, 0x03, 0x00, 0x45, 0x9b, 0x30, + 0xd2, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x35, + 0x1f, 0x00, 0x4b, 0x40, 0xa1, 0x37, 0x1f, 0x00, 0x45, 0x9b, 0x30, 0x33, + 0x1f, 0x40, 0x46, 0xcf, 0x15, 0xb5, 0x03, 0x80, 0xb3, 0x01, 0x42, 0x12, + 0x00, 0xb7, 0x03, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xb1, + 0x76, 0x21, 0x1f, 0x80, 0x6e, 0x44, 0xf5, 0xf1, 0x75, 0x1f, 0x80, 0x61, + 0xb0, 0x19, 0x45, 0x1c, 0x6c, 0xae, 0x03, 0x00, 0x45, 0x9b, 0x30, 0x74, + 0x1f, 0x80, 0x06, 0x4d, 0x38, 0x4f, 0xc3, 0x1f, 0x40, 0x52, 0x33, 0x4f, + 0xc2, 0x1f, 0x40, 0x4a, 0x41, 0xa1, 0xc6, 0x1f, 0x80, 0x39, 0x44, 0xc3, + 0x88, 0x20, 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, + 0xf1, 0x24, 0x1f, 0x80, 0x20, 0x4b, 0x40, 0xa1, 0x26, 0x1f, 0x80, 0x13, + 0x45, 0x9b, 0x30, 0x22, 0x1f, 0x80, 0x06, 0x4d, 0x38, 0x4f, 0x90, 0x1f, + 0x40, 0x52, 0x33, 0x4f, 0x92, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0x96, 0x1f, + 0x40, 0x52, 0x33, 0x4f, 0x94, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0xc7, 0x1f, + 0x40, 0x52, 0x33, 0x4f, 0xc4, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, + 0x44, 0xf5, 0xf1, 0x25, 0x1f, 0x80, 0x20, 0x4b, 0x40, 0xa1, 0x27, 0x1f, + 0x80, 0x13, 0x45, 0x9b, 0x30, 0x23, 0x1f, 0x80, 0x06, 0x4d, 0x38, 0x4f, + 0x91, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0x93, 0x1f, 0x40, 0x52, 0x33, 0x4f, + 0x97, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0x95, 0x1f, 0x40, 0x06, 0x50, 0x00, + 0x01, 0xff, 0x45, 0xb1, 0x76, 0x11, 0x1f, 0x80, 0x2a, 0x44, 0xf5, 0xf1, + 0x73, 0x1f, 0x00, 0x45, 0x10, 0xea, 0x10, 0x1f, 0x80, 0x0c, 0x45, 0x1c, + 0x6c, 0xad, 0x03, 0x00, 0x45, 0x9b, 0x30, 0x72, 0x1f, 0x40, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x14, 0x1f, 0x00, 0x45, 0x9b, 0x30, + 0x12, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x15, + 0x1f, 0x00, 0x45, 0x9b, 0x30, 0x13, 0x1f, 0x40, 0x44, 0x38, 0xd6, 0xb4, + 0x03, 0x00, 0x46, 0x2b, 0x58, 0xdd, 0x03, 0x40, 0x44, 0x3f, 0xe4, 0xb1, + 0x03, 0x80, 0x11, 0x07, 0xa4, 0x80, 0x01, 0xff, 0x45, 0xab, 0x80, 0xd9, + 0x03, 0x00, 0x45, 0x36, 0x94, 0x73, 0x03, 0x40, 0x06, 0x50, 0x00, 0x01, + 0xff, 0x45, 0xb1, 0x76, 0x01, 0x1f, 0x80, 0x7c, 0x46, 0xad, 0x70, 0xb1, + 0x1f, 0x00, 0x44, 0xf5, 0xf1, 0x71, 0x1f, 0x80, 0x69, 0xb0, 0x21, 0x45, + 0x1c, 0x6c, 0xac, 0x03, 0x00, 0xb6, 0x06, 0x4d, 0x38, 0x4f, 0xb3, 0x1f, + 0x40, 0x44, 0x9c, 0x30, 0x70, 0x1f, 0x80, 0x06, 0x45, 0x29, 0xea, 0xb0, + 0x1f, 0x40, 0x52, 0x33, 0x4f, 0xb2, 0x1f, 0x40, 0x4a, 0x41, 0xa1, 0xb6, + 0x1f, 0x80, 0x39, 0x44, 0xc3, 0x88, 0x00, 0x1f, 0xc0, 0x00, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x04, 0x1f, 0x80, 0x20, 0x4b, 0x40, + 0xa1, 0x06, 0x1f, 0x80, 0x13, 0x45, 0x9b, 0x30, 0x02, 0x1f, 0x80, 0x06, + 0x4d, 0x38, 0x4f, 0x80, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0x82, 0x1f, 0x40, + 0x52, 0x33, 0x4f, 0x86, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0x84, 0x1f, 0x40, + 0x52, 0x33, 0x4f, 0xb7, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0xb4, 0x1f, 0x40, + 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x05, 0x1f, 0x80, 0x20, + 0x4b, 0x40, 0xa1, 0x07, 0x1f, 0x80, 0x13, 0x45, 0x9b, 0x30, 0x03, 0x1f, + 0x80, 0x06, 0x4d, 0x38, 0x4f, 0x81, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0x83, + 0x1f, 0x40, 0x52, 0x33, 0x4f, 0x87, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0x85, + 0x1f, 0x40, 0x5d, 0xbf, 0x15, 0xf6, 0x03, 0x00, 0x03, 0xd4, 0x71, 0x01, + 0xff, 0x46, 0x16, 0x08, 0xf1, 0x03, 0x00, 0x52, 0xb9, 0x56, 0xfc, 0x03, + 0x40, 0x4a, 0x41, 0xa1, 0xc0, 0x1f, 0x00, 0x49, 0x93, 0xb9, 0xd5, 0x03, + 0x00, 0x48, 0x5b, 0xac, 0xd6, 0x03, 0x00, 0x4d, 0x4a, 0x47, 0xbe, 0x1f, + 0x00, 0x44, 0xc3, 0x88, 0xbf, 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, + 0xff, 0x44, 0xf5, 0xf1, 0xce, 0x1f, 0x00, 0x4b, 0x40, 0xa1, 0xcf, 0x1f, + 0x00, 0x45, 0x9b, 0x30, 0xcd, 0x1f, 0x40, 0x48, 0x40, 0xc4, 0x7c, 0x01, + 0x01, 0x03, 0xef, 0x07, 0x0c, 0x4a, 0xb7, 0xb2, 0x84, 0x01, 0x01, 0x43, + 0x5b, 0x4b, 0xfd, 0x1f, 0x40, 0x49, 0x66, 0xb9, 0x75, 0x01, 0x81, 0x06, + 0x4c, 0xf3, 0x93, 0x8b, 0x01, 0x41, 0x4f, 0x06, 0x69, 0x76, 0x01, 0x41, + 0x4c, 0xb3, 0x8e, 0x81, 0x01, 0x01, 0x4d, 0xe1, 0x89, 0x45, 0xd2, 0x41, + 0x06, 0xed, 0x05, 0x1d, 0x49, 0xc5, 0xba, 0x83, 0x01, 0x01, 0x51, 0x1b, + 0x5d, 0x75, 0x03, 0x00, 0x06, 0xc8, 0x15, 0x01, 0xff, 0x4e, 0xce, 0x15, + 0xf5, 0x03, 0x00, 0x4c, 0xbe, 0x1f, 0xf2, 0x03, 0x40, 0x4d, 0xa3, 0x80, + 0xd8, 0x03, 0x00, 0x47, 0x2a, 0x58, 0xdc, 0x03, 0x00, 0x45, 0xab, 0x80, + 0xde, 0x03, 0x00, 0xb3, 0x06, 0x43, 0xd6, 0xf4, 0xf3, 0x03, 0x40, 0x44, + 0x37, 0x94, 0xe0, 0x03, 0x00, 0x0d, 0xc7, 0x3c, 0x06, 0x45, 0x41, 0xeb, + 0xda, 0x03, 0x40, 0x45, 0x2c, 0x58, 0x26, 0x1d, 0x00, 0x45, 0x17, 0xe8, + 0x27, 0x1d, 0x00, 0x45, 0x38, 0xaf, 0x65, 0xab, 0x00, 0xb0, 0x06, 0x43, + 0xef, 0x49, 0x29, 0x1d, 0x40, 0xe9, 0x28, 0x1d, 0x00, 0x42, 0x5a, 0x03, + 0x2a, 0x1d, 0x40, 0xa1, 0x0c, 0x46, 0xf0, 0x61, 0xbd, 0x1f, 0x00, 0x50, + 0xe6, 0x68, 0x82, 0x01, 0x41, 0x48, 0x5b, 0xac, 0xd7, 0x03, 0x00, 0x4a, + 0x95, 0x90, 0xf0, 0x03, 0x40, 0x4c, 0xf3, 0x8d, 0x8d, 0x01, 0x01, 0x1b, + 0x86, 0x1d, 0x01, 0xff, 0xd1, 0x1d, 0xd2, 0x81, 0x79, 0xd2, 0x1e, 0xd2, + 0x81, 0x5c, 0x93, 0x42, 0xd4, 0x1f, 0xd2, 0x81, 0x21, 0xd5, 0x20, 0xd2, + 0x81, 0x08, 0xd7, 0x21, 0xd2, 0x01, 0xd8, 0x22, 0xd2, 0x41, 0xd0, 0x3d, + 0xd2, 0x01, 0xd1, 0x3e, 0xd2, 0x01, 0xd2, 0x3f, 0xd2, 0x01, 0xd3, 0x40, + 0xd2, 0x01, 0xd4, 0x41, 0xd2, 0x41, 0xd0, 0x36, 0xd2, 0x01, 0xd2, 0x37, + 0xd2, 0x01, 0xd3, 0x38, 0xd2, 0x01, 0xd5, 0x39, 0xd2, 0x01, 0xd7, 0x3a, + 0xd2, 0x01, 0xd8, 0x3b, 0xd2, 0x01, 0xd9, 0x3c, 0xd2, 0x41, 0xd0, 0x30, + 0xd2, 0x01, 0xd2, 0x31, 0xd2, 0x01, 0xd6, 0x32, 0xd2, 0x01, 0xd7, 0x33, + 0xd2, 0x01, 0xd8, 0x34, 0xd2, 0x01, 0xd9, 0x35, 0xd2, 0x41, 0xd3, 0x2a, + 0xd2, 0x01, 0xd4, 0x2b, 0xd2, 0x01, 0xd5, 0x2c, 0xd2, 0x01, 0xd6, 0x2d, + 0xd2, 0x01, 0xd7, 0x2e, 0xd2, 0x01, 0xd9, 0x2f, 0xd2, 0x41, 0xd1, 0x23, + 0xd2, 0x01, 0xd2, 0x24, 0xd2, 0x01, 0xd3, 0x25, 0xd2, 0x01, 0xd4, 0x26, + 0xd2, 0x01, 0xd7, 0x27, 0xd2, 0x01, 0xd8, 0x28, 0xd2, 0x01, 0xd9, 0x29, + 0xd2, 0x41, 0x4e, 0x0b, 0x79, 0x80, 0x01, 0x01, 0x4e, 0xcb, 0x7a, 0x7f, + 0x01, 0x41, 0x44, 0x47, 0x61, 0xfe, 0x1f, 0x80, 0x26, 0x09, 0x13, 0x6c, + 0x06, 0x4b, 0xae, 0xa1, 0x7b, 0x01, 0x41, 0x04, 0x1a, 0x00, 0x06, 0x45, + 0x1c, 0x6c, 0x85, 0x03, 0x40, 0x44, 0xf5, 0xf1, 0xee, 0x1f, 0x00, 0x4b, + 0x40, 0xa1, 0xc1, 0x1f, 0x00, 0x45, 0x9b, 0x30, 0xed, 0x1f, 0x40, 0x05, + 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0xde, 0x1f, 0x00, 0x4b, 0x40, + 0xa1, 0xdf, 0x1f, 0x00, 0x45, 0x9b, 0x30, 0xdd, 0x1f, 0x40, 0x5a, 0xb0, + 0x1f, 0xfe, 0x03, 0x00, 0x4a, 0x59, 0xac, 0xcf, 0x03, 0x00, 0xac, 0x16, + 0x09, 0xdd, 0x14, 0x06, 0x4c, 0xc7, 0x95, 0xf4, 0x03, 0x40, 0x5a, 0xb0, + 0x1f, 0xff, 0x03, 0x00, 0x53, 0xb7, 0x1f, 0xfd, 0x03, 0x40, 0x06, 0xed, + 0x05, 0x06, 0x52, 0xb8, 0x1f, 0xf9, 0x03, 0x40, 0xa1, 0xb3, 0x06, 0x44, + 0x9a, 0x99, 0x92, 0x03, 0x00, 0x43, 0x79, 0x16, 0xa7, 0x03, 0x00, 0x45, + 0x7e, 0xe5, 0x94, 0x03, 0x00, 0xa5, 0xb3, 0x04, 0x45, 0x2c, 0x58, 0x93, + 0x03, 0x00, 0x44, 0xc8, 0x95, 0x70, 0x03, 0x00, 0x44, 0x99, 0x2e, 0x99, + 0x03, 0x80, 0xb5, 0x03, 0x45, 0x93, 0x90, 0x9a, 0x03, 0x00, 0x45, 0x17, + 0xe8, 0x9b, 0x03, 0x00, 0x42, 0xc3, 0x16, 0x9c, 0x03, 0x00, 0x42, 0x3d, + 0x16, 0x9d, 0x03, 0x00, 0x02, 0x14, 0x05, 0xae, 0x01, 0xb0, 0x95, 0x01, + 0x43, 0xef, 0x49, 0xa1, 0x03, 0x80, 0x87, 0x01, 0xb3, 0x73, 0xb4, 0x65, + 0x47, 0xad, 0x89, 0xa5, 0x03, 0x80, 0x12, 0x42, 0xe2, 0x0c, 0x9e, 0x03, + 0x00, 0x43, 0xd6, 0xf4, 0x7f, 0x03, 0x00, 0x44, 0x61, 0xf3, 0x96, 0x03, + 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, 0x21, 0x46, 0xad, 0x70, 0xe9, + 0x1f, 0x00, 0x44, 0xf5, 0xf1, 0xeb, 0x1f, 0x00, 0x45, 0x1c, 0x6c, 0x8e, + 0x03, 0x00, 0xb6, 0x01, 0xff, 0x44, 0x9c, 0x30, 0xea, 0x1f, 0x00, 0x45, + 0x29, 0xea, 0xe8, 0x1f, 0x40, 0x44, 0x47, 0x61, 0x59, 0x1f, 0x80, 0x06, + 0x48, 0x13, 0x6c, 0xab, 0x03, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, + 0xf5, 0xf1, 0x5d, 0x1f, 0x00, 0x4b, 0x40, 0xa1, 0x5f, 0x1f, 0x00, 0x45, + 0x9b, 0x30, 0x5b, 0x1f, 0x40, 0x42, 0x5f, 0x24, 0xa4, 0x03, 0x00, 0x44, + 0xc8, 0x95, 0x98, 0x03, 0x40, 0x42, 0x1a, 0x00, 0xfa, 0x03, 0x00, 0x42, + 0x0b, 0x00, 0xf7, 0x03, 0x00, 0x44, 0xbf, 0x1f, 0xa3, 0x03, 0x40, 0x4b, + 0xf8, 0x97, 0xec, 0x1f, 0x40, 0x51, 0x20, 0x58, 0x76, 0x03, 0x00, 0x42, + 0x49, 0x00, 0xa6, 0x03, 0x00, 0xe9, 0xa0, 0x03, 0x00, 0x42, 0x5a, 0x03, + 0xa8, 0x03, 0x40, 0x43, 0xce, 0x05, 0xa9, 0x03, 0x80, 0x4e, 0x45, 0x4a, + 0xe7, 0x9f, 0x03, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xb1, + 0x76, 0x49, 0x1f, 0x80, 0x2a, 0x44, 0xf5, 0xf1, 0xf9, 0x1f, 0x00, 0x45, + 0x10, 0xea, 0x48, 0x1f, 0x80, 0x0c, 0x45, 0x1c, 0x6c, 0x8c, 0x03, 0x00, + 0x45, 0x9b, 0x30, 0xf8, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, + 0xf5, 0xf1, 0x4c, 0x1f, 0x00, 0x45, 0x9b, 0x30, 0x4a, 0x1f, 0x40, 0x05, + 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x4d, 0x1f, 0x00, 0x45, 0x9b, + 0x30, 0x4b, 0x1f, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xb1, 0x76, + 0x69, 0x1f, 0x80, 0x55, 0x44, 0xf5, 0xf1, 0xfb, 0x1f, 0x00, 0xb0, 0x0c, + 0x45, 0x1c, 0x6c, 0x8f, 0x03, 0x00, 0x45, 0x9b, 0x30, 0xfa, 0x1f, 0x40, + 0x4d, 0x4a, 0x47, 0xfc, 0x1f, 0x00, 0x44, 0xc3, 0x88, 0x68, 0x1f, 0xc0, + 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x6c, 0x1f, 0x80, + 0x22, 0xb0, 0x0d, 0x45, 0x9b, 0x30, 0x6a, 0x1f, 0xc0, 0x00, 0x53, 0x44, + 0x47, 0xaa, 0x1f, 0x40, 0x4a, 0x41, 0xa1, 0x6e, 0x1f, 0x80, 0x06, 0x4d, + 0x4a, 0x47, 0xa8, 0x1f, 0x40, 0x53, 0x44, 0x47, 0xae, 0x1f, 0x40, 0x53, + 0x44, 0x47, 0xac, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, + 0xf1, 0x6d, 0x1f, 0x80, 0x22, 0xb0, 0x0d, 0x45, 0x9b, 0x30, 0x6b, 0x1f, + 0xc0, 0x00, 0x53, 0x44, 0x47, 0xab, 0x1f, 0x40, 0x4a, 0x41, 0xa1, 0x6f, + 0x1f, 0x80, 0x06, 0x4d, 0x4a, 0x47, 0xa9, 0x1f, 0x40, 0x53, 0x44, 0x47, + 0xaf, 0x1f, 0x40, 0x53, 0x44, 0x47, 0xad, 0x1f, 0x40, 0x06, 0x50, 0x00, + 0x01, 0xff, 0xa4, 0x3f, 0x46, 0xad, 0x70, 0xd9, 0x1f, 0x00, 0x44, 0xf5, + 0xf1, 0xdb, 0x1f, 0x00, 0x45, 0x10, 0xea, 0x38, 0x1f, 0x80, 0x15, 0x45, + 0x1c, 0x6c, 0x8a, 0x03, 0x00, 0xb6, 0x01, 0xff, 0x44, 0x9c, 0x30, 0xda, + 0x1f, 0x00, 0x45, 0x29, 0xea, 0xd8, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, + 0xff, 0x44, 0xf5, 0xf1, 0x3c, 0x1f, 0x00, 0x4b, 0x40, 0xa1, 0x3e, 0x1f, + 0x00, 0x45, 0x9b, 0x30, 0x3a, 0x1f, 0x40, 0x44, 0x47, 0x61, 0x39, 0x1f, + 0x80, 0x06, 0x48, 0x13, 0x6c, 0xaa, 0x03, 0x40, 0x05, 0x19, 0x00, 0x01, + 0xff, 0x44, 0xf5, 0xf1, 0x3d, 0x1f, 0x00, 0x4b, 0x40, 0xa1, 0x3f, 0x1f, + 0x00, 0x45, 0x9b, 0x30, 0x3b, 0x1f, 0x40, 0x46, 0xcf, 0x15, 0x95, 0x03, + 0x80, 0x9c, 0x01, 0x42, 0x12, 0x00, 0x97, 0x03, 0xc0, 0x00, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x45, 0xb1, 0x76, 0x29, 0x1f, 0x80, 0x55, 0x44, 0xf5, + 0xf1, 0xcb, 0x1f, 0x00, 0xb0, 0x0c, 0x45, 0x1c, 0x6c, 0x89, 0x03, 0x00, + 0x45, 0x9b, 0x30, 0xca, 0x1f, 0x40, 0x4d, 0x4a, 0x47, 0xcc, 0x1f, 0x00, + 0x44, 0xc3, 0x88, 0x28, 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, + 0x44, 0xf5, 0xf1, 0x2c, 0x1f, 0x80, 0x22, 0xb0, 0x0d, 0x45, 0x9b, 0x30, + 0x2a, 0x1f, 0xc0, 0x00, 0x53, 0x44, 0x47, 0x9a, 0x1f, 0x40, 0x4a, 0x41, + 0xa1, 0x2e, 0x1f, 0x80, 0x06, 0x4d, 0x4a, 0x47, 0x98, 0x1f, 0x40, 0x53, + 0x44, 0x47, 0x9e, 0x1f, 0x40, 0x53, 0x44, 0x47, 0x9c, 0x1f, 0x40, 0x05, + 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x2d, 0x1f, 0x80, 0x22, 0xb0, + 0x0d, 0x45, 0x9b, 0x30, 0x2b, 0x1f, 0xc0, 0x00, 0x53, 0x44, 0x47, 0x9b, + 0x1f, 0x40, 0x4a, 0x41, 0xa1, 0x2f, 0x1f, 0x80, 0x06, 0x4d, 0x4a, 0x47, + 0x99, 0x1f, 0x40, 0x53, 0x44, 0x47, 0x9f, 0x1f, 0x40, 0x53, 0x44, 0x47, + 0x9d, 0x1f, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xb1, 0x76, 0x19, + 0x1f, 0x80, 0x2a, 0x44, 0xf5, 0xf1, 0xc9, 0x1f, 0x00, 0x45, 0x10, 0xea, + 0x18, 0x1f, 0x80, 0x0c, 0x45, 0x1c, 0x6c, 0x88, 0x03, 0x00, 0x45, 0x9b, + 0x30, 0xc8, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, + 0x1c, 0x1f, 0x00, 0x45, 0x9b, 0x30, 0x1a, 0x1f, 0x40, 0x05, 0x19, 0x00, + 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x1d, 0x1f, 0x00, 0x45, 0x9b, 0x30, 0x1b, + 0x1f, 0x40, 0x44, 0x3f, 0xe4, 0x91, 0x03, 0x80, 0x06, 0x4c, 0x2f, 0x94, + 0x72, 0x03, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xb1, 0x76, 0x09, + 0x1f, 0x80, 0x64, 0x46, 0xad, 0x70, 0xb9, 0x1f, 0x00, 0x44, 0xf5, 0xf1, + 0xbb, 0x1f, 0x00, 0xb0, 0x15, 0x45, 0x1c, 0x6c, 0x86, 0x03, 0x00, 0xb6, + 0x01, 0xff, 0x44, 0x9c, 0x30, 0xba, 0x1f, 0x00, 0x45, 0x29, 0xea, 0xb8, + 0x1f, 0x40, 0x4d, 0x4a, 0x47, 0xbc, 0x1f, 0x00, 0x44, 0xc3, 0x88, 0x08, + 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x0c, + 0x1f, 0x80, 0x22, 0xb0, 0x0d, 0x45, 0x9b, 0x30, 0x0a, 0x1f, 0xc0, 0x00, + 0x53, 0x44, 0x47, 0x8a, 0x1f, 0x40, 0x4a, 0x41, 0xa1, 0x0e, 0x1f, 0x80, + 0x06, 0x4d, 0x4a, 0x47, 0x88, 0x1f, 0x40, 0x53, 0x44, 0x47, 0x8e, 0x1f, + 0x40, 0x53, 0x44, 0x47, 0x8c, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, + 0x44, 0xf5, 0xf1, 0x0d, 0x1f, 0x80, 0x22, 0xb0, 0x0d, 0x45, 0x9b, 0x30, + 0x0b, 0x1f, 0xc0, 0x00, 0x53, 0x44, 0x47, 0x8b, 0x1f, 0x40, 0x4a, 0x41, + 0xa1, 0x0f, 0x1f, 0x80, 0x06, 0x4d, 0x4a, 0x47, 0x89, 0x1f, 0x40, 0x53, + 0x44, 0x47, 0x8f, 0x1f, 0x40, 0x53, 0x44, 0x47, 0x8d, 0x1f, 0x40, 0x0a, + 0xdf, 0xa8, 0x15, 0x49, 0x90, 0xbc, 0x87, 0x03, 0x00, 0xb2, 0x01, 0xff, + 0x49, 0x8c, 0xbd, 0x87, 0x01, 0x01, 0x49, 0x96, 0xbf, 0x86, 0x01, 0x41, + 0x06, 0xfe, 0xd9, 0xe6, 0x01, 0xa3, 0xd7, 0x01, 0x51, 0xa7, 0x59, 0x73, + 0x01, 0x01, 0x0b, 0xd6, 0x9b, 0xb9, 0x01, 0x03, 0x10, 0x1a, 0x97, 0x01, + 0x4d, 0xde, 0x85, 0x63, 0x01, 0x01, 0x53, 0x59, 0x4b, 0x70, 0x01, 0x01, + 0x53, 0x47, 0x4d, 0x74, 0x01, 0x01, 0xb4, 0x01, 0xff, 0x08, 0xb0, 0xc6, + 0x30, 0x0a, 0x87, 0xb0, 0x01, 0xff, 0x02, 0xf3, 0x02, 0x0d, 0x43, 0xdb, + 0x06, 0x60, 0x01, 0xc1, 0x00, 0x4f, 0x06, 0x69, 0x61, 0x01, 0x41, 0x43, + 0x52, 0x4d, 0x66, 0x01, 0x81, 0x0d, 0x42, 0x32, 0x00, 0x5f, 0x01, 0xc1, + 0x00, 0x48, 0x70, 0x11, 0x6d, 0x01, 0x41, 0x4f, 0x06, 0x69, 0x67, 0x01, + 0x41, 0x02, 0xf3, 0x02, 0x33, 0x43, 0x0e, 0x0b, 0x59, 0x01, 0x81, 0x1d, + 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x64, 0x01, 0x01, 0xa8, 0x06, 0x42, + 0x15, 0x02, 0x5c, 0x01, 0x41, 0x44, 0x7b, 0x11, 0x65, 0x01, 0x01, 0x4b, + 0xfb, 0x17, 0x6b, 0x01, 0x41, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x6a, + 0x01, 0x01, 0x48, 0x40, 0x5e, 0x71, 0x01, 0x41, 0x43, 0x52, 0x4d, 0x69, + 0x01, 0x01, 0x03, 0x5f, 0x00, 0x01, 0xff, 0x47, 0x71, 0x11, 0x6e, 0x01, + 0x01, 0x48, 0x40, 0x5e, 0x72, 0x01, 0x41, 0x51, 0xed, 0x57, 0x58, 0x01, + 0x01, 0x08, 0x50, 0xc8, 0x01, 0xff, 0x45, 0x50, 0x4d, 0x68, 0x01, 0x01, + 0x43, 0x0e, 0x0b, 0x5a, 0x01, 0x01, 0x43, 0xdb, 0x06, 0x62, 0x01, 0x41, + 0x4c, 0x80, 0x39, 0x6c, 0x01, 0x01, 0x43, 0x1f, 0x0a, 0x5b, 0x01, 0xc1, + 0x00, 0x49, 0x3b, 0x47, 0x5e, 0x01, 0x41, 0x55, 0x77, 0x39, 0x6f, 0x01, + 0x01, 0x54, 0x30, 0x47, 0x5d, 0x01, 0x41, 0x02, 0xf3, 0x02, 0x5a, 0x04, + 0x0e, 0x0b, 0x20, 0x04, 0x3c, 0x5e, 0x01, 0xff, 0x44, 0x56, 0x4d, 0x57, + 0x01, 0x01, 0x47, 0x36, 0x6e, 0x50, 0x01, 0x01, 0xb4, 0x01, 0xff, 0x46, + 0x9a, 0xc2, 0x49, 0x01, 0x01, 0x4f, 0x2e, 0x6e, 0x55, 0x01, 0x41, 0x47, + 0x3c, 0x47, 0x42, 0x01, 0x01, 0xa8, 0x17, 0x47, 0x2a, 0x01, 0x40, 0x01, + 0x01, 0x09, 0x40, 0x5e, 0x01, 0xff, 0x47, 0x36, 0x6e, 0x54, 0x01, 0x01, + 0x47, 0x99, 0xc2, 0x4d, 0x01, 0x41, 0x43, 0x23, 0x00, 0x41, 0x01, 0x01, + 0x07, 0x72, 0x11, 0x01, 0xff, 0x47, 0x36, 0x6e, 0x52, 0x01, 0x01, 0x47, + 0x99, 0xc2, 0x4b, 0x01, 0x41, 0x43, 0x52, 0x4d, 0x44, 0x01, 0x81, 0x3c, + 0x42, 0x32, 0x00, 0x43, 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, + 0x11, 0x45, 0x01, 0x81, 0x1c, 0x47, 0x36, 0x6e, 0x4f, 0x01, 0x01, 0xb4, + 0x01, 0xff, 0x46, 0x9a, 0xc2, 0x48, 0x01, 0x01, 0x47, 0xed, 0x3b, 0x46, + 0x01, 0xc1, 0x00, 0x48, 0x98, 0xc2, 0x4e, 0x01, 0x41, 0x80, 0x01, 0xff, + 0x47, 0x36, 0x6e, 0x53, 0x01, 0x01, 0x47, 0x99, 0xc2, 0x4c, 0x01, 0x41, + 0x80, 0x01, 0xff, 0x47, 0x36, 0x6e, 0x51, 0x01, 0x01, 0xb4, 0x01, 0xff, + 0x46, 0x9a, 0xc2, 0x4a, 0x01, 0x01, 0x47, 0xed, 0x3b, 0x47, 0x01, 0xc1, + 0x00, 0x48, 0x35, 0x6e, 0x56, 0x01, 0x41, 0xa1, 0x9c, 0x01, 0xa2, 0x82, + 0x01, 0x4f, 0xc7, 0x6b, 0xa7, 0x2a, 0x80, 0x75, 0x55, 0xf1, 0x3a, 0xdb, + 0x22, 0x00, 0xaf, 0x1d, 0x44, 0x5a, 0x03, 0x3e, 0x00, 0x00, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x4d, 0x73, 0x81, 0x7a, 0x2a, 0x00, 0x43, 0x23, 0x0a, + 0xd7, 0x22, 0x00, 0x53, 0x50, 0x4c, 0x7c, 0x2a, 0x40, 0x02, 0x18, 0x00, + 0x11, 0x03, 0x32, 0x00, 0x01, 0xff, 0x49, 0xf7, 0x0c, 0x67, 0x22, 0x00, + 0x51, 0xa5, 0x5b, 0xa4, 0x2a, 0x40, 0x4b, 0xb0, 0x1e, 0x86, 0x2a, 0x00, + 0x03, 0x7b, 0x00, 0x25, 0x49, 0xec, 0x00, 0x77, 0x22, 0x00, 0x50, 0x36, + 0x67, 0x7e, 0x2a, 0xc0, 0x00, 0x0a, 0x75, 0x3b, 0x01, 0xff, 0x45, 0x5c, + 0x00, 0x82, 0x2a, 0x80, 0x06, 0x46, 0xa7, 0x13, 0x80, 0x2a, 0x40, 0x45, + 0xc2, 0x00, 0x84, 0x2a, 0x40, 0x45, 0xfb, 0x0c, 0x65, 0x22, 0x00, 0x4a, + 0xd6, 0x39, 0x73, 0x22, 0x40, 0x54, 0x93, 0x00, 0xa9, 0x2a, 0x40, 0x4f, + 0xc6, 0x6c, 0xa5, 0x2a, 0x00, 0x0a, 0xcc, 0x39, 0x01, 0xff, 0x45, 0xfb, + 0x0c, 0x69, 0x22, 0x00, 0x4a, 0xd6, 0x39, 0xe7, 0x22, 0x40, 0x05, 0x5d, + 0x00, 0x11, 0x03, 0x1b, 0x00, 0x01, 0xff, 0x4f, 0xd1, 0x70, 0x8a, 0x2a, + 0x00, 0x58, 0xf6, 0x2a, 0x88, 0x2a, 0x40, 0x61, 0xa8, 0x0d, 0x8c, 0x2a, + 0x00, 0x61, 0x0b, 0x0e, 0x92, 0x2a, 0x00, 0x50, 0xb3, 0x02, 0x78, 0x29, + 0x00, 0xb3, 0x01, 0xff, 0x07, 0xf6, 0xd1, 0x06, 0x70, 0xd9, 0x00, 0x94, + 0x2a, 0x40, 0x4f, 0xe6, 0x00, 0x90, 0x2a, 0x00, 0x48, 0xf3, 0x28, 0x8e, + 0x2a, 0x40, 0x4b, 0x52, 0x9b, 0x93, 0xf3, 0x01, 0x05, 0x43, 0xe9, 0x0c, + 0x43, 0x43, 0x65, 0x47, 0xf3, 0x01, 0x49, 0x18, 0x23, 0x60, 0x00, 0x40, + 0x4e, 0x17, 0x76, 0x57, 0x13, 0x01, 0x07, 0xec, 0x05, 0x8b, 0x01, 0x42, + 0x14, 0x05, 0x50, 0x13, 0x01, 0x05, 0x5a, 0x03, 0x48, 0x0b, 0x40, 0x77, + 0x01, 0xff, 0xa1, 0x35, 0x42, 0x27, 0x01, 0x47, 0x13, 0x01, 0xe9, 0x3f, + 0x13, 0x81, 0x26, 0x42, 0xcd, 0x02, 0x4b, 0x13, 0x01, 0xf5, 0x41, 0x13, + 0x81, 0x17, 0x08, 0x22, 0xc1, 0x01, 0xff, 0xec, 0x62, 0x13, 0x81, 0x09, + 0xf2, 0x43, 0x13, 0xc1, 0x00, 0xf2, 0x44, 0x13, 0x41, 0xec, 0x63, 0x13, + 0x41, 0xf5, 0x42, 0x13, 0x41, 0xe9, 0x40, 0x13, 0x41, 0xe1, 0x3e, 0x13, + 0x01, 0xe9, 0x48, 0x13, 0x01, 0xf5, 0x4c, 0x13, 0x41, 0xa1, 0x2b, 0xa3, + 0x1d, 0x45, 0x3f, 0x3f, 0x3c, 0x13, 0x01, 0x45, 0xf2, 0xe9, 0x5d, 0x13, + 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0xe5, 0x23, 0x4d, 0x13, 0x01, + 0x45, 0xec, 0x4b, 0x03, 0x13, 0x41, 0x4a, 0xd8, 0x23, 0x01, 0x13, 0x01, + 0x57, 0x33, 0x16, 0x00, 0x13, 0x41, 0x47, 0x3d, 0x16, 0x02, 0x13, 0x01, + 0x47, 0xaf, 0x88, 0x3d, 0x13, 0x41, 0xe1, 0x05, 0x13, 0x81, 0x9a, 0x02, + 0xa2, 0x8d, 0x02, 0xa3, 0x80, 0x02, 0xa4, 0xe7, 0x01, 0x42, 0x27, 0x01, + 0x0f, 0x13, 0x01, 0xa7, 0xd4, 0x01, 0x42, 0x22, 0x00, 0x39, 0x13, 0x01, + 0xe9, 0x07, 0x13, 0x81, 0xc4, 0x01, 0xaa, 0xb7, 0x01, 0xab, 0xaa, 0x01, + 0xac, 0x9d, 0x01, 0x42, 0x6c, 0x00, 0x2e, 0x13, 0x01, 0xae, 0x7f, 0x42, + 0xcd, 0x02, 0x13, 0x13, 0x01, 0xb0, 0x6d, 0x42, 0x71, 0x00, 0x30, 0x13, + 0x01, 0xb3, 0x55, 0xb4, 0x3c, 0xf5, 0x09, 0x13, 0x81, 0x33, 0xb6, 0x06, + 0x42, 0xbc, 0x22, 0x2f, 0x13, 0x41, 0xe1, 0x35, 0x13, 0x01, 0x05, 0xda, + 0x0a, 0x17, 0x07, 0x23, 0xc1, 0x01, 0xff, 0xec, 0x0c, 0x13, 0x81, 0x09, + 0xf2, 0x0b, 0x13, 0xc1, 0x00, 0xf2, 0x60, 0x13, 0x41, 0xec, 0x61, 0x13, + 0x41, 0x48, 0x3c, 0x16, 0x5e, 0x13, 0x01, 0x4f, 0x52, 0x17, 0x5f, 0x13, + 0x41, 0xf5, 0x0a, 0x13, 0x41, 0xe1, 0x24, 0x13, 0x01, 0x42, 0x22, 0x00, + 0x25, 0x13, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x1f, 0x13, 0x01, 0x42, 0x22, + 0x00, 0x20, 0x13, 0x41, 0xe1, 0x38, 0x13, 0x01, 0x42, 0x22, 0x00, 0x36, + 0x13, 0x01, 0x42, 0x40, 0x06, 0x37, 0x13, 0x41, 0xe1, 0x2a, 0x13, 0x01, + 0x42, 0x22, 0x00, 0x2b, 0x13, 0x41, 0xe1, 0x28, 0x13, 0x01, 0x42, 0x24, + 0x02, 0x19, 0x13, 0x01, 0x42, 0x2a, 0x05, 0x23, 0x13, 0x01, 0x42, 0xbc, + 0x22, 0x1e, 0x13, 0x41, 0xe1, 0x32, 0x13, 0x01, 0x42, 0x74, 0x00, 0x33, + 0x13, 0x41, 0xe1, 0x15, 0x13, 0x01, 0x42, 0x22, 0x00, 0x16, 0x13, 0x41, + 0xe1, 0x1c, 0x13, 0x01, 0x42, 0x22, 0x00, 0x1d, 0x13, 0x41, 0xe9, 0x08, + 0x13, 0x41, 0xe1, 0x17, 0x13, 0x01, 0x42, 0x22, 0x00, 0x18, 0x13, 0x41, + 0xe1, 0x26, 0x13, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x27, 0x13, 0x41, + 0xe1, 0x21, 0x13, 0x01, 0x42, 0x22, 0x00, 0x22, 0x13, 0x41, 0xe1, 0x1a, + 0x13, 0x01, 0x42, 0x22, 0x00, 0x1b, 0x13, 0x41, 0xe1, 0x2c, 0x13, 0x01, + 0x42, 0x22, 0x00, 0x2d, 0x13, 0x41, 0xe1, 0x06, 0x13, 0x01, 0xe9, 0x10, + 0x13, 0x01, 0xf5, 0x14, 0x13, 0x41, 0xa1, 0xd5, 0x01, 0x45, 0xcf, 0xdc, + 0x7d, 0xf9, 0x01, 0x44, 0xfd, 0xf0, 0xcc, 0xf3, 0x01, 0x46, 0x48, 0xde, + 0x7d, 0xf7, 0x01, 0x43, 0xa4, 0x0d, 0xbf, 0xfa, 0x01, 0x45, 0x6a, 0xea, + 0x8d, 0xf9, 0x01, 0x0c, 0xd3, 0x95, 0x01, 0xff, 0xa1, 0xa3, 0x01, 0x47, + 0x56, 0xcf, 0x31, 0x03, 0x01, 0x44, 0x75, 0xef, 0x33, 0x03, 0x01, 0x43, + 0x08, 0xac, 0x39, 0x03, 0x01, 0x45, 0x5a, 0xe6, 0x46, 0x03, 0x01, 0x44, + 0xf9, 0xef, 0x32, 0x03, 0x01, 0xa8, 0x77, 0xa9, 0x69, 0x43, 0xe0, 0xba, + 0x3e, 0x03, 0x01, 0x45, 0xef, 0xe7, 0x3a, 0x03, 0x01, 0x45, 0x0d, 0xe8, + 0x3b, 0x03, 0x01, 0x45, 0xcb, 0x91, 0x3c, 0x03, 0x01, 0xae, 0x38, 0x45, + 0xac, 0xe9, 0x49, 0x03, 0x01, 0x48, 0xb8, 0xc9, 0x40, 0x03, 0x01, 0x48, + 0x08, 0xca, 0x35, 0x03, 0x01, 0x45, 0x2e, 0xea, 0x42, 0x03, 0x01, 0x45, + 0xc4, 0xea, 0x43, 0x03, 0x01, 0xb4, 0x0c, 0x44, 0xe1, 0xf2, 0x3f, 0x03, + 0x01, 0x45, 0x5e, 0xec, 0x45, 0x03, 0x41, 0x44, 0xa9, 0xef, 0x44, 0x03, + 0x01, 0x45, 0x0e, 0xe7, 0x38, 0x03, 0x41, 0x45, 0x89, 0xe4, 0x3d, 0x03, + 0x01, 0x03, 0xee, 0x07, 0x01, 0xff, 0x48, 0x70, 0x11, 0x4a, 0x03, 0x01, + 0x42, 0x7d, 0x11, 0x41, 0x03, 0x41, 0x44, 0xed, 0xef, 0x47, 0x03, 0x01, + 0x43, 0x54, 0xcb, 0x36, 0x03, 0x41, 0x43, 0x81, 0x91, 0x37, 0x03, 0x01, + 0x44, 0x21, 0xf3, 0x48, 0x03, 0x41, 0x43, 0x8c, 0xe4, 0x30, 0x03, 0x01, + 0x45, 0x4f, 0xe7, 0x34, 0x03, 0x41, 0x45, 0xf9, 0xe7, 0x45, 0xf9, 0x01, + 0xf4, 0x10, 0xf4, 0x41, 0xa1, 0x1b, 0x4a, 0xcf, 0xa9, 0xe6, 0x29, 0x00, + 0xaf, 0x01, 0xff, 0x51, 0x86, 0x58, 0x10, 0xf3, 0x01, 0x43, 0x35, 0x4b, + 0xe4, 0xf9, 0x01, 0x49, 0x46, 0xc1, 0x1f, 0xf3, 0x41, 0x08, 0x85, 0x5b, + 0x06, 0x4a, 0x31, 0xb1, 0x5b, 0xf9, 0x41, 0x0f, 0xe4, 0x05, 0xc6, 0x02, + 0x0d, 0x76, 0x08, 0x01, 0xff, 0x43, 0xf2, 0xf3, 0x30, 0x2c, 0x00, 0xa2, + 0xac, 0x02, 0xa3, 0x9d, 0x02, 0xa4, 0x88, 0x02, 0xa6, 0xf9, 0x01, 0x47, + 0x4e, 0xd1, 0x33, 0x2c, 0x00, 0x44, 0x2d, 0xf0, 0x48, 0x2c, 0x00, 0xe9, + 0x3b, 0x2c, 0x80, 0xc2, 0x01, 0x44, 0xc5, 0xf0, 0x3d, 0x2c, 0x00, 0xac, + 0xad, 0x01, 0x47, 0xfd, 0x6a, 0x3f, 0x2c, 0x00, 0x45, 0xf3, 0xe8, 0x40, + 0x2c, 0x00, 0xaf, 0x92, 0x01, 0xb0, 0x85, 0x01, 0x45, 0x6f, 0xea, 0x43, + 0x2c, 0x00, 0xb3, 0x51, 0xb4, 0x3d, 0x43, 0x0a, 0xd6, 0x46, 0x2c, 0x00, + 0x44, 0xf5, 0xf2, 0x32, 0x2c, 0x00, 0xb9, 0x0f, 0xba, 0x01, 0xff, 0x45, + 0xf1, 0xe5, 0x38, 0x2c, 0x00, 0x46, 0x8c, 0xdc, 0x36, 0x2c, 0x40, 0x43, + 0xb3, 0x00, 0x51, 0x2c, 0x00, 0xa5, 0x08, 0xef, 0x56, 0x2c, 0x00, 0xf5, + 0x53, 0x2c, 0x40, 0xb2, 0x06, 0x43, 0x26, 0x0a, 0x35, 0x2c, 0x40, 0xe9, + 0x50, 0x2c, 0x00, 0xf5, 0x4f, 0x2c, 0x40, 0x4b, 0x3d, 0xa2, 0x5d, 0x2c, + 0x00, 0x42, 0x5a, 0x03, 0x4c, 0x2c, 0x00, 0x45, 0x27, 0xec, 0x45, 0x2c, + 0x40, 0xa8, 0x19, 0x44, 0x15, 0xf1, 0x44, 0x2c, 0x00, 0x48, 0x46, 0xbf, + 0x54, 0x2c, 0x80, 0x06, 0x49, 0x0a, 0xbe, 0x52, 0x2c, 0x40, 0x4a, 0x9b, + 0xa6, 0x55, 0x2c, 0x40, 0xe1, 0x4e, 0x2c, 0x00, 0x42, 0x12, 0x00, 0x4b, + 0x2c, 0xc0, 0x00, 0x43, 0x04, 0x8b, 0x5c, 0x2c, 0x40, 0xe5, 0x4a, 0x2c, + 0x00, 0x45, 0x33, 0xdf, 0x42, 0x2c, 0x40, 0x42, 0x3d, 0x16, 0x41, 0x2c, + 0x00, 0x42, 0x5c, 0x01, 0x49, 0x2c, 0x40, 0x4f, 0xf5, 0x6a, 0x5e, 0x2c, + 0x00, 0x46, 0xf3, 0xd2, 0x3e, 0x2c, 0x40, 0x4b, 0x22, 0xa0, 0x3a, 0x2c, + 0x00, 0x07, 0x9e, 0x21, 0x0f, 0x02, 0x54, 0x28, 0x01, 0xff, 0xe5, 0x39, + 0x2c, 0x00, 0x44, 0xda, 0x85, 0x5b, 0x2c, 0x40, 0x47, 0x80, 0xcf, 0x59, + 0x2c, 0x00, 0x49, 0x45, 0xbf, 0x57, 0x2c, 0x40, 0x43, 0xe7, 0x05, 0x5a, + 0x2c, 0x00, 0x44, 0x5a, 0xbf, 0x47, 0x2c, 0x40, 0x45, 0xa9, 0xe7, 0x3c, + 0x2c, 0x00, 0x44, 0xb9, 0xf1, 0x34, 0x2c, 0x00, 0x44, 0x5d, 0xf3, 0x37, + 0x2c, 0x40, 0x4d, 0xe4, 0x80, 0x5f, 0x2c, 0x00, 0x45, 0xec, 0x80, 0x4d, + 0x2c, 0x40, 0x46, 0x81, 0xcf, 0x58, 0x2c, 0x00, 0x43, 0x8f, 0xd2, 0x31, + 0x2c, 0x40, 0x43, 0xf2, 0xf3, 0x00, 0x2c, 0x00, 0xa2, 0xac, 0x02, 0xa3, + 0x9d, 0x02, 0xa4, 0x88, 0x02, 0xa6, 0xf9, 0x01, 0x47, 0x4e, 0xd1, 0x03, + 0x2c, 0x00, 0x44, 0x2d, 0xf0, 0x18, 0x2c, 0x00, 0xe9, 0x0b, 0x2c, 0x80, + 0xc2, 0x01, 0x44, 0xc5, 0xf0, 0x0d, 0x2c, 0x00, 0xac, 0xad, 0x01, 0x47, + 0xfd, 0x6a, 0x0f, 0x2c, 0x00, 0x45, 0xf3, 0xe8, 0x10, 0x2c, 0x00, 0xaf, + 0x92, 0x01, 0xb0, 0x85, 0x01, 0x45, 0x6f, 0xea, 0x13, 0x2c, 0x00, 0xb3, + 0x51, 0xb4, 0x3d, 0x43, 0x0a, 0xd6, 0x16, 0x2c, 0x00, 0x44, 0xf5, 0xf2, + 0x02, 0x2c, 0x00, 0xb9, 0x0f, 0xba, 0x01, 0xff, 0x45, 0xf1, 0xe5, 0x08, + 0x2c, 0x00, 0x46, 0x8c, 0xdc, 0x06, 0x2c, 0x40, 0x43, 0xb3, 0x00, 0x21, + 0x2c, 0x00, 0xa5, 0x08, 0xef, 0x26, 0x2c, 0x00, 0xf5, 0x23, 0x2c, 0x40, + 0xb2, 0x06, 0x43, 0x26, 0x0a, 0x05, 0x2c, 0x40, 0xe9, 0x20, 0x2c, 0x00, + 0xf5, 0x1f, 0x2c, 0x40, 0x4b, 0x3d, 0xa2, 0x2d, 0x2c, 0x00, 0x42, 0x5a, + 0x03, 0x1c, 0x2c, 0x00, 0x45, 0x27, 0xec, 0x15, 0x2c, 0x40, 0xa8, 0x19, + 0x44, 0x15, 0xf1, 0x14, 0x2c, 0x00, 0x48, 0x46, 0xbf, 0x24, 0x2c, 0x80, + 0x06, 0x49, 0x0a, 0xbe, 0x22, 0x2c, 0x40, 0x4a, 0x9b, 0xa6, 0x25, 0x2c, + 0x40, 0xe1, 0x1e, 0x2c, 0x00, 0x42, 0x12, 0x00, 0x1b, 0x2c, 0xc0, 0x00, + 0x43, 0x04, 0x8b, 0x2c, 0x2c, 0x40, 0xe5, 0x1a, 0x2c, 0x00, 0x45, 0x33, + 0xdf, 0x12, 0x2c, 0x40, 0x42, 0x3d, 0x16, 0x11, 0x2c, 0x00, 0x42, 0x5c, + 0x01, 0x19, 0x2c, 0x40, 0x4f, 0xf5, 0x6a, 0x2e, 0x2c, 0x00, 0x46, 0xf3, + 0xd2, 0x0e, 0x2c, 0x40, 0x4b, 0x22, 0xa0, 0x0a, 0x2c, 0x00, 0x07, 0x9e, + 0x21, 0x0f, 0x02, 0x54, 0x28, 0x01, 0xff, 0xe5, 0x09, 0x2c, 0x00, 0x44, + 0xda, 0x85, 0x2b, 0x2c, 0x40, 0x47, 0x80, 0xcf, 0x29, 0x2c, 0x00, 0x49, + 0x45, 0xbf, 0x27, 0x2c, 0x40, 0x43, 0xe7, 0x05, 0x2a, 0x2c, 0x00, 0x44, + 0x5a, 0xbf, 0x17, 0x2c, 0x40, 0x45, 0xa9, 0xe7, 0x0c, 0x2c, 0x00, 0x44, + 0xb9, 0xf1, 0x04, 0x2c, 0x00, 0x44, 0x5d, 0xf3, 0x07, 0x2c, 0x40, 0x4d, + 0xe4, 0x80, 0x2f, 0x2c, 0x00, 0x45, 0xec, 0x80, 0x1d, 0x2c, 0x40, 0x46, + 0x81, 0xcf, 0x28, 0x2c, 0x00, 0x43, 0x8f, 0xd2, 0x01, 0x2c, 0x40, 0x4a, + 0xd5, 0xad, 0x37, 0x21, 0x00, 0x49, 0x51, 0xbc, 0xda, 0xfa, 0x01, 0xb2, + 0x01, 0xff, 0x49, 0xbe, 0xb5, 0x92, 0xf9, 0x01, 0xec, 0x67, 0xf4, 0xc1, + 0x00, 0x48, 0x77, 0x4b, 0xca, 0xf6, 0x41, 0x42, 0x17, 0x00, 0x99, 0x26, + 0x80, 0xb6, 0x0a, 0xad, 0xa7, 0x0a, 0x43, 0x4d, 0x7e, 0xde, 0xf9, 0x01, + 0xaf, 0x0c, 0x4f, 0xc0, 0x72, 0xb0, 0x20, 0x00, 0x47, 0x1e, 0xd6, 0x13, + 0x30, 0x40, 0xad, 0x81, 0x09, 0x06, 0xcd, 0x9b, 0x01, 0xff, 0x0f, 0xe4, + 0x05, 0xf3, 0x06, 0x07, 0xec, 0x05, 0xc1, 0x04, 0x18, 0x1e, 0x2a, 0x8f, + 0x02, 0x53, 0x17, 0x4c, 0xfb, 0x10, 0x00, 0x0d, 0x76, 0x08, 0x01, 0xff, + 0xa1, 0xf7, 0x01, 0x43, 0x26, 0x16, 0x01, 0x2d, 0x00, 0xa3, 0xd4, 0x01, + 0x43, 0x6c, 0x11, 0x03, 0x2d, 0x00, 0x42, 0x92, 0x01, 0x04, 0x2d, 0x00, + 0xa7, 0xb9, 0x01, 0xa8, 0x9c, 0x01, 0x42, 0x9e, 0x01, 0x08, 0x2d, 0x00, + 0xaa, 0x87, 0x01, 0xab, 0x79, 0x43, 0x49, 0x0e, 0x0a, 0x2d, 0x00, 0x43, + 0x41, 0x18, 0x0b, 0x2d, 0x00, 0x43, 0x1d, 0x27, 0x0c, 0x2d, 0x00, 0x42, + 0x10, 0x00, 0x0d, 0x2d, 0x00, 0xb0, 0x53, 0x43, 0x88, 0xf4, 0x17, 0x2d, + 0x00, 0x43, 0x75, 0x82, 0x10, 0x2d, 0x00, 0xb3, 0x39, 0x02, 0x12, 0x00, + 0x2d, 0x42, 0x42, 0x0b, 0x13, 0x2d, 0x00, 0x43, 0xf1, 0x2a, 0x05, 0x2d, + 0x00, 0x42, 0x15, 0x01, 0x23, 0x2d, 0x00, 0x43, 0x04, 0xef, 0x1e, 0x2d, + 0x00, 0x42, 0x03, 0x1d, 0x27, 0x2d, 0x00, 0xba, 0x01, 0xff, 0x42, 0x92, + 0x01, 0x06, 0x2d, 0x00, 0x43, 0xc9, 0x02, 0x0f, 0x2d, 0x40, 0xee, 0x07, + 0x2d, 0x00, 0xf2, 0x12, 0x2d, 0x40, 0x42, 0x1a, 0x00, 0x11, 0x2d, 0x00, + 0x43, 0x7a, 0x16, 0x18, 0x2d, 0x40, 0x42, 0x17, 0x00, 0x0e, 0x2d, 0x00, + 0x43, 0xc9, 0x02, 0x14, 0x2d, 0x40, 0x42, 0x1a, 0x00, 0x09, 0x2d, 0x00, + 0x43, 0xc9, 0x02, 0x15, 0x2d, 0x40, 0x43, 0x90, 0x00, 0x1f, 0x2d, 0x00, + 0x42, 0x62, 0x01, 0x1b, 0x2d, 0x40, 0xa1, 0x10, 0xe5, 0x21, 0x2d, 0x00, + 0x42, 0xf4, 0x02, 0x22, 0x2d, 0x00, 0x42, 0x60, 0x51, 0x25, 0x2d, 0x40, + 0xe5, 0x20, 0x2d, 0x00, 0xf2, 0x24, 0x2d, 0x40, 0x42, 0x1a, 0x00, 0x02, + 0x2d, 0x00, 0x43, 0x90, 0x00, 0x16, 0x2d, 0x40, 0x42, 0x1a, 0x00, 0x1a, + 0x2d, 0x00, 0xa8, 0x06, 0x42, 0x62, 0x01, 0x1c, 0x2d, 0x40, 0x42, 0x17, + 0x00, 0x1d, 0x2d, 0x00, 0x42, 0x9e, 0x01, 0x19, 0x2d, 0x40, 0x42, 0x92, + 0x01, 0x2d, 0x2d, 0x00, 0xee, 0x00, 0x2d, 0x40, 0xa1, 0x9a, 0x02, 0x43, + 0x26, 0x16, 0x91, 0x1c, 0x00, 0xa3, 0xf7, 0x01, 0x43, 0x6c, 0x11, 0x93, + 0x1c, 0x00, 0xa5, 0xe4, 0x01, 0x42, 0xf3, 0x02, 0xb6, 0x1c, 0x00, 0xa7, + 0xcf, 0x01, 0xa8, 0xab, 0x01, 0x42, 0x9e, 0x01, 0x98, 0x1c, 0x00, 0xaa, + 0x96, 0x01, 0xab, 0x87, 0x01, 0x02, 0x74, 0x00, 0x79, 0x43, 0x41, 0x18, + 0x9b, 0x1c, 0x00, 0x43, 0x1d, 0x27, 0x9c, 0x1c, 0x00, 0x42, 0x10, 0x00, + 0x9d, 0x1c, 0x00, 0xb0, 0x59, 0x43, 0x88, 0xf4, 0xa7, 0x1c, 0x00, 0x43, + 0x75, 0x82, 0xa0, 0x1c, 0x00, 0xb3, 0x3f, 0xb4, 0x2d, 0x42, 0x42, 0x0b, + 0xa3, 0x1c, 0x00, 0x43, 0xf1, 0x2a, 0x95, 0x1c, 0x00, 0x42, 0x15, 0x01, + 0xb3, 0x1c, 0x00, 0x43, 0x04, 0xef, 0xae, 0x1c, 0x00, 0x42, 0x03, 0x1d, + 0xb7, 0x1c, 0x00, 0xba, 0x01, 0xff, 0x42, 0x92, 0x01, 0x96, 0x1c, 0x00, + 0x43, 0xc9, 0x02, 0x9f, 0x1c, 0x40, 0xa1, 0x06, 0x49, 0xa4, 0xc0, 0xb9, + 0x1c, 0x40, 0xee, 0x97, 0x1c, 0x00, 0xf2, 0xa2, 0x1c, 0x40, 0x42, 0x1a, + 0x00, 0xa1, 0x1c, 0x00, 0x43, 0x7a, 0x16, 0xa8, 0x1c, 0x40, 0x42, 0x17, + 0x00, 0x9e, 0x1c, 0x00, 0x43, 0xc9, 0x02, 0xa4, 0x1c, 0x40, 0x49, 0x96, + 0xb6, 0xbf, 0x1c, 0x00, 0xf3, 0x9a, 0x1c, 0x40, 0x42, 0x1a, 0x00, 0x99, + 0x1c, 0x00, 0x43, 0xc9, 0x02, 0xa5, 0x1c, 0x40, 0x43, 0x90, 0x00, 0xaf, + 0x1c, 0x00, 0x42, 0x62, 0x01, 0xab, 0x1c, 0x40, 0xa1, 0x10, 0xe5, 0xb1, + 0x1c, 0x00, 0x42, 0xf4, 0x02, 0xb2, 0x1c, 0x00, 0x42, 0x60, 0x51, 0xb5, + 0x1c, 0x40, 0xe5, 0xb0, 0x1c, 0x00, 0xf2, 0xb4, 0x1c, 0xc0, 0x00, 0x46, + 0xb0, 0x47, 0xbe, 0x1c, 0x40, 0x42, 0x1a, 0x00, 0x92, 0x1c, 0x00, 0x43, + 0x90, 0x00, 0xa6, 0x1c, 0x40, 0x44, 0xd4, 0x88, 0xb8, 0x1c, 0x00, 0xee, + 0x94, 0x1c, 0x40, 0x42, 0x1a, 0x00, 0xaa, 0x1c, 0x00, 0xa8, 0x06, 0x42, + 0x62, 0x01, 0xac, 0x1c, 0x40, 0x42, 0x17, 0x00, 0xad, 0x1c, 0x00, 0x42, + 0x9e, 0x01, 0xa9, 0x1c, 0x40, 0x42, 0x92, 0x01, 0xbd, 0x1c, 0x00, 0x42, + 0x9e, 0x01, 0xba, 0x1c, 0x00, 0xee, 0x90, 0x1c, 0x40, 0xa1, 0x9a, 0x02, + 0x43, 0x26, 0x16, 0xd1, 0x10, 0x00, 0xa3, 0xf7, 0x01, 0x43, 0x6c, 0x11, + 0xd3, 0x10, 0x00, 0xa5, 0xe4, 0x01, 0x42, 0xf3, 0x02, 0xf6, 0x10, 0x00, + 0xa7, 0xcf, 0x01, 0xa8, 0xab, 0x01, 0x42, 0x9e, 0x01, 0xd8, 0x10, 0x00, + 0xaa, 0x96, 0x01, 0xab, 0x87, 0x01, 0x02, 0x74, 0x00, 0x79, 0x43, 0x41, + 0x18, 0xdb, 0x10, 0x00, 0x43, 0x1d, 0x27, 0xdc, 0x10, 0x00, 0x42, 0x10, + 0x00, 0xdd, 0x10, 0x00, 0xb0, 0x59, 0x43, 0x88, 0xf4, 0xe7, 0x10, 0x00, + 0x43, 0x75, 0x82, 0xe0, 0x10, 0x00, 0xb3, 0x3f, 0xb4, 0x2d, 0x42, 0x42, + 0x0b, 0xe3, 0x10, 0x00, 0x43, 0xf1, 0x2a, 0xd5, 0x10, 0x00, 0x42, 0x15, + 0x01, 0xf3, 0x10, 0x00, 0x43, 0x04, 0xef, 0xee, 0x10, 0x00, 0x42, 0x03, + 0x1d, 0xf7, 0x10, 0x00, 0xba, 0x01, 0xff, 0x42, 0x92, 0x01, 0xd6, 0x10, + 0x00, 0x43, 0xc9, 0x02, 0xdf, 0x10, 0x40, 0xa1, 0x06, 0x49, 0xa4, 0xc0, + 0xf9, 0x10, 0x40, 0xee, 0xd7, 0x10, 0x00, 0xf2, 0xe2, 0x10, 0x40, 0x42, + 0x1a, 0x00, 0xe1, 0x10, 0x00, 0x43, 0x7a, 0x16, 0xe8, 0x10, 0x40, 0x42, + 0x17, 0x00, 0xde, 0x10, 0x00, 0x43, 0xc9, 0x02, 0xe4, 0x10, 0x40, 0x49, + 0x96, 0xb6, 0xff, 0x10, 0x00, 0xf3, 0xda, 0x10, 0x40, 0x42, 0x1a, 0x00, + 0xd9, 0x10, 0x00, 0x43, 0xc9, 0x02, 0xe5, 0x10, 0x40, 0x43, 0x90, 0x00, + 0xef, 0x10, 0x00, 0x42, 0x62, 0x01, 0xeb, 0x10, 0x40, 0xa1, 0x10, 0xe5, + 0xf1, 0x10, 0x00, 0x42, 0xf4, 0x02, 0xf2, 0x10, 0x00, 0x42, 0x60, 0x51, + 0xf5, 0x10, 0x40, 0xe5, 0xf0, 0x10, 0x00, 0xf2, 0xf4, 0x10, 0xc0, 0x00, + 0x46, 0xb0, 0x47, 0xfe, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xd2, 0x10, 0x00, + 0x43, 0x90, 0x00, 0xe6, 0x10, 0x40, 0x44, 0xd4, 0x88, 0xf8, 0x10, 0x00, + 0xee, 0xd4, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xea, 0x10, 0x00, 0xa8, 0x06, + 0x42, 0x62, 0x01, 0xec, 0x10, 0x40, 0x42, 0x17, 0x00, 0xed, 0x10, 0x00, + 0x42, 0x9e, 0x01, 0xe9, 0x10, 0x40, 0x42, 0x92, 0x01, 0xfd, 0x10, 0x00, + 0x42, 0x9e, 0x01, 0xfa, 0x10, 0x00, 0xee, 0xd0, 0x10, 0x40, 0xa1, 0xf7, + 0x01, 0x43, 0x26, 0x16, 0xa1, 0x10, 0x00, 0xa3, 0xd4, 0x01, 0x43, 0x6c, + 0x11, 0xa3, 0x10, 0x00, 0x42, 0x92, 0x01, 0xa4, 0x10, 0x00, 0xa7, 0xb9, + 0x01, 0xa8, 0x9c, 0x01, 0x42, 0x9e, 0x01, 0xa8, 0x10, 0x00, 0xaa, 0x87, + 0x01, 0xab, 0x79, 0x43, 0x49, 0x0e, 0xaa, 0x10, 0x00, 0x43, 0x41, 0x18, + 0xab, 0x10, 0x00, 0x43, 0x1d, 0x27, 0xac, 0x10, 0x00, 0x42, 0x10, 0x00, + 0xad, 0x10, 0x00, 0xb0, 0x53, 0x43, 0x88, 0xf4, 0xb7, 0x10, 0x00, 0x43, + 0x75, 0x82, 0xb0, 0x10, 0x00, 0xb3, 0x39, 0x02, 0x12, 0x00, 0x2d, 0x42, + 0x42, 0x0b, 0xb3, 0x10, 0x00, 0x43, 0xf1, 0x2a, 0xa5, 0x10, 0x00, 0x42, + 0x15, 0x01, 0xc3, 0x10, 0x00, 0x43, 0x04, 0xef, 0xbe, 0x10, 0x00, 0x42, + 0x03, 0x1d, 0xc7, 0x10, 0x00, 0xba, 0x01, 0xff, 0x42, 0x92, 0x01, 0xa6, + 0x10, 0x00, 0x43, 0xc9, 0x02, 0xaf, 0x10, 0x40, 0xee, 0xa7, 0x10, 0x00, + 0xf2, 0xb2, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xb1, 0x10, 0x00, 0x43, 0x7a, + 0x16, 0xb8, 0x10, 0x40, 0x42, 0x17, 0x00, 0xae, 0x10, 0x00, 0x43, 0xc9, + 0x02, 0xb4, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xa9, 0x10, 0x00, 0x43, 0xc9, + 0x02, 0xb5, 0x10, 0x40, 0x43, 0x90, 0x00, 0xbf, 0x10, 0x00, 0x42, 0x62, + 0x01, 0xbb, 0x10, 0x40, 0xa1, 0x10, 0xe5, 0xc1, 0x10, 0x00, 0x42, 0xf4, + 0x02, 0xc2, 0x10, 0x00, 0x42, 0x60, 0x51, 0xc5, 0x10, 0x40, 0xe5, 0xc0, + 0x10, 0x00, 0xf2, 0xc4, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xa2, 0x10, 0x00, + 0x43, 0x90, 0x00, 0xb6, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xba, 0x10, 0x00, + 0xa8, 0x06, 0x42, 0x62, 0x01, 0xbc, 0x10, 0x40, 0x42, 0x17, 0x00, 0xbd, + 0x10, 0x00, 0x42, 0x9e, 0x01, 0xb9, 0x10, 0x40, 0x42, 0x92, 0x01, 0xcd, + 0x10, 0x00, 0xee, 0xa0, 0x10, 0x40, 0x0d, 0x7c, 0x80, 0x1c, 0x05, 0x9d, + 0x55, 0x01, 0xff, 0x4b, 0xb6, 0x97, 0x3a, 0x22, 0x00, 0x08, 0xf3, 0x0c, + 0x01, 0xff, 0x45, 0xfb, 0x0c, 0x51, 0x22, 0x00, 0x4a, 0xd6, 0x39, 0x4e, + 0x22, 0x40, 0xa1, 0x5b, 0xa3, 0x3f, 0x09, 0x0c, 0xb9, 0x2f, 0x48, 0x98, + 0xc7, 0xe8, 0xce, 0x01, 0xb0, 0x12, 0x46, 0xbc, 0xdf, 0xe4, 0xce, 0x01, + 0x49, 0x0b, 0xc0, 0xe1, 0xce, 0x01, 0x43, 0x10, 0x50, 0xef, 0xce, 0x41, + 0x46, 0xea, 0xde, 0xe0, 0xce, 0x01, 0x02, 0xd6, 0x13, 0x01, 0xff, 0x43, + 0x2c, 0x0e, 0xeb, 0xce, 0x01, 0xf2, 0xed, 0xce, 0x41, 0x44, 0xed, 0xee, + 0xe3, 0xce, 0x01, 0x44, 0x95, 0xf0, 0xec, 0xce, 0x41, 0xa1, 0x06, 0x49, + 0x44, 0xbd, 0xe6, 0xce, 0x41, 0x4c, 0xdb, 0x93, 0xe7, 0xce, 0x01, 0x44, + 0x3d, 0xf2, 0xe9, 0xce, 0x01, 0x4c, 0x33, 0x96, 0xee, 0xce, 0x41, 0x49, + 0x6e, 0xb7, 0xe5, 0xce, 0x01, 0x44, 0xf9, 0xf0, 0xe2, 0xce, 0x01, 0x46, + 0x88, 0x30, 0xea, 0xce, 0x41, 0x46, 0x9b, 0xba, 0x8e, 0xf4, 0x01, 0x43, + 0x57, 0x07, 0x4a, 0x26, 0x40, 0x05, 0x50, 0x00, 0x01, 0xff, 0x48, 0x08, + 0xc2, 0xee, 0x26, 0x00, 0x47, 0x34, 0xd4, 0xed, 0x26, 0x40, 0x46, 0x00, + 0xde, 0xb2, 0xf3, 0x01, 0xb2, 0x01, 0xff, 0x03, 0x05, 0x20, 0x06, 0x43, + 0xbc, 0x04, 0xc4, 0xf9, 0x41, 0xa3, 0x96, 0x02, 0x06, 0xef, 0x06, 0xcf, + 0x01, 0x46, 0x96, 0x63, 0x6e, 0x0d, 0x01, 0x4a, 0x67, 0x98, 0x8f, 0x0d, + 0x01, 0x49, 0xdf, 0x71, 0x8e, 0x0d, 0x01, 0x52, 0xc1, 0x54, 0x6f, 0x0d, + 0x01, 0xb3, 0x25, 0x06, 0x3c, 0x39, 0x01, 0xff, 0x4b, 0x42, 0x39, 0x4e, + 0x0d, 0x01, 0x05, 0x5a, 0x03, 0x01, 0xff, 0xe1, 0x4a, 0x0d, 0x01, 0xe5, + 0x69, 0x0d, 0x81, 0x08, 0xe9, 0x4b, 0x0d, 0x01, 0xef, 0x4c, 0x0d, 0x41, + 0xe5, 0x4d, 0x0d, 0x41, 0x0c, 0x77, 0x08, 0x06, 0x44, 0x24, 0xeb, 0x4f, + 0x0d, 0x41, 0xe1, 0x70, 0x0d, 0x01, 0x42, 0x16, 0x00, 0x74, 0x0d, 0x01, + 0x42, 0x37, 0x00, 0x71, 0x0d, 0x01, 0x42, 0xf0, 0x10, 0x7a, 0x0d, 0x01, + 0x42, 0x0c, 0x08, 0x80, 0x0d, 0x01, 0x42, 0x24, 0x02, 0x79, 0x0d, 0x01, + 0x42, 0x22, 0x00, 0x83, 0x0d, 0x01, 0x42, 0x56, 0x19, 0x75, 0x0d, 0x01, + 0x42, 0x1b, 0x02, 0x73, 0x0d, 0x01, 0x42, 0x74, 0x00, 0x78, 0x0d, 0x01, + 0x42, 0x6c, 0x00, 0x72, 0x0d, 0x01, 0xae, 0x3a, 0x04, 0x2e, 0x25, 0x2a, + 0x42, 0xbb, 0x09, 0x82, 0x0d, 0x01, 0x42, 0x71, 0x00, 0x7e, 0x0d, 0x01, + 0x42, 0x40, 0x06, 0x76, 0x0d, 0x01, 0x42, 0x12, 0x00, 0x7d, 0x0d, 0x01, + 0x42, 0xa9, 0x01, 0x77, 0x0d, 0x01, 0x42, 0xed, 0x26, 0x7b, 0x0d, 0x01, + 0x42, 0xbc, 0x22, 0x7c, 0x0d, 0x41, 0x42, 0x1b, 0x02, 0x84, 0x0d, 0x01, + 0x42, 0x2a, 0x05, 0x85, 0x0d, 0x41, 0xe1, 0x81, 0x0d, 0x01, 0x42, 0xbc, + 0x22, 0x7f, 0x0d, 0x41, 0x45, 0x12, 0x0b, 0x48, 0x0d, 0x01, 0xa6, 0x2e, + 0x44, 0xcf, 0x2a, 0x49, 0x0d, 0x01, 0x43, 0x0e, 0x0b, 0x41, 0x0d, 0x01, + 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x40, 0x0d, 0x41, 0x44, 0x25, + 0x01, 0x43, 0x0d, 0x01, 0x42, 0x15, 0x02, 0x42, 0x0d, 0x41, 0x44, 0xc9, + 0x1d, 0x47, 0x0d, 0x01, 0x42, 0x01, 0x26, 0x46, 0x0d, 0x41, 0x43, 0xd2, + 0x05, 0x45, 0x0d, 0x01, 0x43, 0xf6, 0x06, 0x44, 0x0d, 0x41, 0x0e, 0xe5, + 0x05, 0x24, 0xaf, 0x01, 0xff, 0x0a, 0xb7, 0xad, 0x11, 0x08, 0x29, 0x33, + 0x01, 0xff, 0x4f, 0x89, 0x6d, 0x6a, 0x0d, 0x01, 0x51, 0x60, 0x5c, 0x6d, + 0x0d, 0x41, 0x47, 0x3c, 0x1e, 0x6b, 0x0d, 0x01, 0x4e, 0x18, 0x62, 0x6c, + 0x0d, 0x41, 0xe1, 0x50, 0x0d, 0x01, 0x42, 0x16, 0x00, 0x54, 0x0d, 0x01, + 0x42, 0x37, 0x00, 0x51, 0x0d, 0x01, 0x42, 0xf0, 0x10, 0x5a, 0x0d, 0x01, + 0x42, 0x0c, 0x08, 0x60, 0x0d, 0x01, 0x42, 0x24, 0x02, 0x59, 0x0d, 0x01, + 0x42, 0x22, 0x00, 0x63, 0x0d, 0x01, 0x42, 0x56, 0x19, 0x55, 0x0d, 0x01, + 0x42, 0x1b, 0x02, 0x53, 0x0d, 0x01, 0x42, 0x74, 0x00, 0x58, 0x0d, 0x01, + 0x42, 0x6c, 0x00, 0x52, 0x0d, 0x01, 0xae, 0x3a, 0x04, 0x2e, 0x25, 0x2a, + 0x42, 0xbb, 0x09, 0x62, 0x0d, 0x01, 0x42, 0x71, 0x00, 0x5e, 0x0d, 0x01, + 0x42, 0x40, 0x06, 0x56, 0x0d, 0x01, 0x42, 0x12, 0x00, 0x5d, 0x0d, 0x01, + 0x42, 0xa9, 0x01, 0x57, 0x0d, 0x01, 0x42, 0xed, 0x26, 0x5b, 0x0d, 0x01, + 0x42, 0xbc, 0x22, 0x5c, 0x0d, 0x41, 0x42, 0x1b, 0x02, 0x64, 0x0d, 0x01, + 0x42, 0x2a, 0x05, 0x65, 0x0d, 0x41, 0xe1, 0x61, 0x0d, 0x01, 0x42, 0xbc, + 0x22, 0x5f, 0x0d, 0x41, 0xa1, 0x99, 0x0b, 0xa5, 0xe5, 0x0a, 0xa9, 0x86, + 0x09, 0xac, 0xd9, 0x07, 0xaf, 0x92, 0x06, 0xb2, 0x9b, 0x05, 0xb5, 0x01, + 0xff, 0x47, 0xc9, 0xd0, 0xfd, 0x26, 0x00, 0x02, 0x60, 0x07, 0x1a, 0xae, + 0x06, 0x42, 0x46, 0x03, 0xdb, 0x23, 0x40, 0x51, 0x96, 0x59, 0x61, 0x20, + 0x00, 0x48, 0xb8, 0xc5, 0xb1, 0x26, 0x00, 0x43, 0xf6, 0xc7, 0x08, 0xce, + 0x41, 0x80, 0xcf, 0x04, 0x06, 0x3b, 0x50, 0x01, 0xff, 0xa1, 0xb5, 0x04, + 0x4a, 0x5d, 0xa8, 0xe4, 0xff, 0x00, 0xa3, 0x88, 0x04, 0xa4, 0xb9, 0x03, + 0xa5, 0xaa, 0x03, 0x49, 0x81, 0x16, 0x0e, 0xff, 0x00, 0x02, 0x87, 0x00, + 0x93, 0x03, 0x4c, 0xc7, 0x8f, 0x0d, 0xff, 0x00, 0xac, 0x83, 0x01, 0x46, + 0xad, 0x70, 0xe3, 0xff, 0x00, 0xae, 0x6f, 0xb0, 0x5b, 0x02, 0x7c, 0x00, + 0x4b, 0xb2, 0x26, 0xb3, 0x18, 0x45, 0x35, 0x23, 0x5e, 0xff, 0x00, 0x4d, + 0xcd, 0x0b, 0x5c, 0xff, 0x00, 0x48, 0x90, 0xcc, 0xe6, 0xff, 0x00, 0x48, + 0x2f, 0x7f, 0xe5, 0xff, 0x40, 0x48, 0xda, 0x59, 0x1b, 0xff, 0x00, 0x46, + 0x50, 0x31, 0x0f, 0xff, 0x40, 0x4e, 0x67, 0x72, 0x3c, 0xff, 0x00, 0x05, + 0xc9, 0x00, 0x01, 0xff, 0x4d, 0x72, 0x0b, 0x5d, 0xff, 0x00, 0x4b, 0xd8, + 0x21, 0x09, 0xff, 0x00, 0x4e, 0xc8, 0x26, 0x3d, 0xff, 0x00, 0x51, 0x6e, + 0x5f, 0x60, 0xff, 0x40, 0x4b, 0xa8, 0x34, 0x1f, 0xff, 0x00, 0x4c, 0x1b, + 0x05, 0x02, 0xff, 0x40, 0x4b, 0xe1, 0x9b, 0x05, 0xff, 0x00, 0x48, 0xe0, + 0x71, 0x0b, 0xff, 0x00, 0x49, 0xac, 0xaf, 0xe1, 0xff, 0x40, 0x47, 0x8b, + 0x73, 0xe2, 0xff, 0x00, 0x4a, 0x06, 0x68, 0x03, 0xff, 0x40, 0x05, 0xdf, + 0x05, 0x2a, 0xa5, 0x06, 0x47, 0x76, 0x8a, 0x3f, 0xff, 0x40, 0x03, 0xc5, + 0x00, 0x06, 0x4c, 0x67, 0x95, 0x1c, 0xff, 0x40, 0x4d, 0x72, 0x0b, 0x5b, + 0xff, 0x00, 0x4b, 0xd8, 0x21, 0x08, 0xff, 0x00, 0x4e, 0xc8, 0x26, 0x3b, + 0xff, 0x00, 0x51, 0x6e, 0x5f, 0x5f, 0xff, 0x40, 0x0f, 0xe4, 0x05, 0x6d, + 0x0d, 0x76, 0x08, 0x01, 0xff, 0xe1, 0x41, 0xff, 0x00, 0xe2, 0x42, 0xff, + 0x00, 0xe3, 0x43, 0xff, 0x00, 0xe4, 0x44, 0xff, 0x00, 0xe5, 0x45, 0xff, + 0x00, 0xe6, 0x46, 0xff, 0x00, 0xe7, 0x47, 0xff, 0x00, 0xe8, 0x48, 0xff, + 0x00, 0xe9, 0x49, 0xff, 0x00, 0xea, 0x4a, 0xff, 0x00, 0xeb, 0x4b, 0xff, + 0x00, 0xec, 0x4c, 0xff, 0x00, 0xed, 0x4d, 0xff, 0x00, 0xee, 0x4e, 0xff, + 0x00, 0xef, 0x4f, 0xff, 0x00, 0xf0, 0x50, 0xff, 0x00, 0xf1, 0x51, 0xff, + 0x00, 0xf2, 0x52, 0xff, 0x00, 0xf3, 0x53, 0xff, 0x00, 0xf4, 0x54, 0xff, + 0x00, 0xf5, 0x55, 0xff, 0x00, 0xf6, 0x56, 0xff, 0x00, 0xf7, 0x57, 0xff, + 0x00, 0xf8, 0x58, 0xff, 0x00, 0xf9, 0x59, 0xff, 0x00, 0xfa, 0x5a, 0xff, + 0x40, 0xe1, 0x21, 0xff, 0x00, 0xe2, 0x22, 0xff, 0x00, 0xe3, 0x23, 0xff, + 0x00, 0xe4, 0x24, 0xff, 0x00, 0xe5, 0x25, 0xff, 0x00, 0xe6, 0x26, 0xff, + 0x00, 0xe7, 0x27, 0xff, 0x00, 0xe8, 0x28, 0xff, 0x00, 0xe9, 0x29, 0xff, + 0x00, 0xea, 0x2a, 0xff, 0x00, 0xeb, 0x2b, 0xff, 0x00, 0xec, 0x2c, 0xff, + 0x00, 0xed, 0x2d, 0xff, 0x00, 0xee, 0x2e, 0xff, 0x00, 0xef, 0x2f, 0xff, + 0x00, 0xf0, 0x30, 0xff, 0x00, 0xf1, 0x31, 0xff, 0x00, 0xf2, 0x32, 0xff, + 0x00, 0xf3, 0x33, 0xff, 0x00, 0xf4, 0x34, 0xff, 0x00, 0xf5, 0x35, 0xff, + 0x00, 0xf6, 0x36, 0xff, 0x00, 0xf7, 0x37, 0xff, 0x00, 0xf8, 0x38, 0xff, + 0x00, 0xf9, 0x39, 0xff, 0x00, 0xfa, 0x3a, 0xff, 0x40, 0x4a, 0x17, 0x23, + 0x40, 0xff, 0x00, 0x4f, 0x64, 0x5a, 0x1e, 0xff, 0x40, 0x4a, 0x49, 0x13, + 0x1d, 0xff, 0x00, 0x4f, 0xae, 0x00, 0x01, 0xff, 0x40, 0x05, 0xf0, 0x06, + 0x06, 0x4a, 0x11, 0x9b, 0x04, 0xff, 0x40, 0x45, 0x12, 0x0b, 0x18, 0xff, + 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x19, 0xff, 0x00, 0x43, 0x0e, 0x0b, + 0x11, 0xff, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x10, 0xff, + 0x40, 0x44, 0x25, 0x01, 0x13, 0xff, 0x00, 0x42, 0x15, 0x02, 0x12, 0xff, + 0x40, 0x44, 0xc9, 0x1d, 0x17, 0xff, 0x00, 0x42, 0x01, 0x26, 0x16, 0xff, + 0x40, 0x43, 0xd2, 0x05, 0x15, 0xff, 0x00, 0x43, 0xf6, 0x06, 0x14, 0xff, + 0x40, 0x48, 0xe4, 0x9b, 0xe0, 0xff, 0x00, 0x50, 0xd0, 0x04, 0x3e, 0xff, + 0x00, 0xaf, 0x01, 0xff, 0x43, 0xd7, 0x02, 0x1a, 0xff, 0x00, 0x02, 0x15, + 0x05, 0x01, 0xff, 0xe1, 0x0c, 0xff, 0x00, 0x49, 0x85, 0xb8, 0x20, 0xff, + 0x40, 0x48, 0x13, 0x3e, 0x06, 0xff, 0x00, 0x49, 0x62, 0x36, 0x07, 0xff, + 0x00, 0x47, 0x3d, 0x0d, 0x0a, 0xff, 0x40, 0x45, 0x33, 0x01, 0x88, 0x25, + 0x00, 0x05, 0xaf, 0x1b, 0x0c, 0x4a, 0x51, 0xaf, 0xd7, 0x27, 0x00, 0x44, + 0x55, 0x03, 0x2e, 0x00, 0x40, 0x46, 0x16, 0x08, 0x15, 0xf3, 0x01, 0x49, + 0x4f, 0xc1, 0x1d, 0xf3, 0x41, 0xa1, 0x45, 0xa5, 0x2c, 0x4a, 0x87, 0xab, + 0x64, 0xf3, 0x01, 0xaf, 0x01, 0xff, 0x46, 0x30, 0x29, 0x38, 0xf4, 0x01, + 0x03, 0x36, 0x10, 0x0d, 0x42, 0xa7, 0x01, 0x22, 0x23, 0xc0, 0x00, 0x58, + 0x2e, 0x29, 0x26, 0xf6, 0x41, 0x51, 0xeb, 0x59, 0x25, 0xf4, 0x01, 0x66, + 0x59, 0x05, 0xac, 0x27, 0x40, 0x4a, 0x95, 0x9b, 0x76, 0xf9, 0x01, 0x06, + 0x30, 0xde, 0x01, 0xff, 0x48, 0x50, 0xc3, 0xa3, 0x20, 0x00, 0x43, 0x14, + 0x9e, 0x5f, 0xf3, 0x41, 0x06, 0x06, 0x17, 0x1d, 0x4b, 0x70, 0x9c, 0xba, + 0xce, 0x01, 0x08, 0x40, 0xc8, 0x01, 0xff, 0x44, 0x01, 0xef, 0xbe, 0xf5, + 0x01, 0x47, 0x04, 0x8b, 0xbc, 0xf5, 0x01, 0x45, 0xbf, 0xd5, 0xbd, 0xf5, + 0x41, 0x4d, 0x94, 0x86, 0x5f, 0x21, 0x00, 0x45, 0x48, 0x0e, 0x44, 0x20, + 0x40, 0xe7, 0x2b, 0xf3, 0x81, 0xb8, 0x01, 0x02, 0xe2, 0x1a, 0xa7, 0x01, + 0x44, 0x6d, 0xf1, 0xd5, 0xfa, 0x01, 0x42, 0x1b, 0x05, 0xb6, 0xf9, 0x81, + 0x93, 0x01, 0xb2, 0x55, 0xb5, 0x06, 0x46, 0x60, 0xe1, 0x8a, 0xf9, 0x41, + 0x45, 0x54, 0x07, 0xf2, 0x26, 0x00, 0xb2, 0x01, 0xff, 0x80, 0x0c, 0x4d, + 0x2e, 0x80, 0x05, 0x20, 0x00, 0x47, 0x32, 0x9c, 0x1c, 0x22, 0x40, 0x57, + 0xcd, 0x1c, 0x23, 0x27, 0x00, 0xa3, 0x22, 0x04, 0x03, 0x0c, 0x12, 0x4b, + 0x75, 0x9e, 0x40, 0xf3, 0x01, 0x52, 0xec, 0x2b, 0xc6, 0xf7, 0x01, 0x58, + 0x6e, 0x2b, 0x22, 0x27, 0x40, 0x44, 0xb9, 0x00, 0x5b, 0x20, 0x00, 0x4b, + 0x07, 0x0c, 0x58, 0x20, 0x40, 0x53, 0x20, 0x4b, 0x25, 0x27, 0x00, 0x63, + 0x1e, 0x0b, 0x94, 0x2b, 0x40, 0x44, 0xbd, 0x2d, 0x00, 0x22, 0x00, 0x43, + 0x43, 0x7c, 0xa9, 0x22, 0x00, 0xab, 0x15, 0x46, 0x6a, 0xc9, 0x0c, 0x00, + 0x00, 0x03, 0x86, 0x97, 0x01, 0xff, 0xe1, 0xcc, 0xce, 0x01, 0x48, 0x58, + 0xc5, 0x60, 0xf9, 0x41, 0x4a, 0xb5, 0xa5, 0x74, 0xf3, 0x81, 0x0c, 0x4e, + 0xbf, 0x51, 0x10, 0x2e, 0x00, 0x43, 0xa1, 0x01, 0xdc, 0x2a, 0x40, 0x4b, + 0x2f, 0x98, 0x7d, 0xf3, 0x41, 0x46, 0x62, 0xcc, 0x63, 0xf4, 0x41, 0x42, + 0x33, 0x00, 0xc0, 0xf5, 0x01, 0x4c, 0x1b, 0x90, 0xad, 0xfa, 0x41, 0x42, + 0xb7, 0x35, 0x01, 0xf3, 0x41, 0xa1, 0x80, 0x01, 0xa5, 0x72, 0xaf, 0x45, + 0xb5, 0x37, 0xf9, 0xb0, 0xfa, 0xc1, 0x00, 0x04, 0xa1, 0x01, 0x01, 0xff, + 0x44, 0x3c, 0x64, 0x4f, 0xf9, 0x01, 0x48, 0x43, 0x32, 0x85, 0xf5, 0x01, + 0x46, 0xa1, 0x91, 0xf8, 0xf6, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x46, 0x16, + 0x08, 0xfb, 0xcc, 0x01, 0x04, 0x51, 0x00, 0x01, 0xff, 0x46, 0x98, 0xbd, + 0x4a, 0xcc, 0x01, 0x49, 0x95, 0xbd, 0x4b, 0xcc, 0x41, 0x49, 0x36, 0x93, + 0x33, 0xf6, 0x01, 0x42, 0x77, 0x00, 0x88, 0xfa, 0x41, 0x48, 0x5a, 0x39, + 0xbe, 0xf4, 0x01, 0x42, 0x71, 0x00, 0xc2, 0xce, 0x81, 0x18, 0x43, 0x15, + 0x01, 0x98, 0x26, 0xc0, 0x00, 0x02, 0x9b, 0x01, 0x01, 0xff, 0x4c, 0xe7, + 0x90, 0xb4, 0xf3, 0x01, 0x4f, 0x11, 0x22, 0x55, 0x20, 0x40, 0x47, 0xaa, + 0x21, 0x66, 0x27, 0x40, 0x49, 0x80, 0xc0, 0x9c, 0x26, 0x00, 0x4a, 0xbb, + 0xb3, 0xaa, 0xf4, 0x41, 0x49, 0x27, 0xb9, 0xf3, 0x26, 0x00, 0x45, 0xb2, + 0xe8, 0xa9, 0xf9, 0x01, 0x4a, 0xb5, 0xaf, 0x96, 0xcc, 0x01, 0xb4, 0x01, + 0xff, 0x45, 0xcc, 0x97, 0x7f, 0xf9, 0x01, 0x45, 0xd2, 0x77, 0xd3, 0xfa, + 0x01, 0x44, 0x22, 0x24, 0xe5, 0x23, 0x40, 0x59, 0x02, 0x24, 0xd1, 0xf3, + 0x01, 0xa7, 0xbc, 0x01, 0xac, 0x92, 0x01, 0xae, 0x83, 0x01, 0xb2, 0x30, + 0xb3, 0x11, 0x07, 0x36, 0xd7, 0x01, 0xff, 0x44, 0xb9, 0x00, 0x2d, 0x2e, + 0x00, 0x4b, 0x07, 0x0c, 0x59, 0x20, 0x40, 0xe8, 0x1f, 0xf4, 0x81, 0x06, + 0x4d, 0x2b, 0x89, 0x4a, 0xf4, 0x41, 0x57, 0x5e, 0x2c, 0x65, 0xf3, 0x01, + 0x43, 0xc6, 0x1c, 0xc9, 0x25, 0x00, 0x51, 0x1d, 0x5b, 0xa3, 0xf3, 0x41, + 0xe5, 0x25, 0xf5, 0x81, 0x27, 0x03, 0x7c, 0x18, 0x01, 0xff, 0x4b, 0x3e, + 0x71, 0x47, 0xf9, 0x01, 0x4c, 0x3b, 0x73, 0x3d, 0x26, 0x80, 0x06, 0x4e, + 0x8b, 0x7c, 0x68, 0x20, 0x40, 0x80, 0x01, 0xff, 0x46, 0x16, 0x08, 0x13, + 0xf3, 0x01, 0x49, 0x4f, 0xc1, 0x1b, 0xf3, 0x41, 0x02, 0x7a, 0x00, 0x15, + 0x47, 0x21, 0xd0, 0xe8, 0xf9, 0x01, 0x04, 0x95, 0x4b, 0x01, 0xff, 0x49, + 0xdd, 0xb4, 0x87, 0xf3, 0x01, 0xf3, 0x86, 0xf3, 0x41, 0x45, 0x29, 0x9c, + 0x92, 0xf6, 0x01, 0x4b, 0x60, 0xa5, 0xef, 0xf9, 0x41, 0x48, 0x68, 0xc6, + 0xc6, 0xfa, 0x01, 0x51, 0x50, 0x5b, 0x0d, 0x2a, 0x40, 0x02, 0x60, 0x00, + 0x11, 0x02, 0x49, 0x04, 0x01, 0xff, 0x46, 0xd8, 0xdb, 0x9e, 0xf3, 0x01, + 0x49, 0x37, 0xbe, 0xfd, 0xf4, 0x41, 0x47, 0xc6, 0xcf, 0xc4, 0xf5, 0x01, + 0x46, 0xb3, 0xab, 0xc1, 0xf4, 0x01, 0x49, 0xd8, 0x20, 0x1c, 0x00, 0x40, + 0x48, 0xd0, 0xc6, 0xef, 0xfa, 0x01, 0x04, 0x75, 0x18, 0x01, 0xff, 0x44, + 0x8f, 0x12, 0x12, 0x20, 0x00, 0x45, 0xd0, 0x4c, 0x07, 0x20, 0x40, 0xa1, + 0x23, 0xad, 0x15, 0x44, 0x65, 0xf1, 0x3a, 0xf9, 0x01, 0x02, 0xcf, 0x00, + 0x01, 0xff, 0x48, 0x38, 0xc7, 0xa1, 0xf3, 0x01, 0xf9, 0xf4, 0x26, 0x40, + 0x48, 0x62, 0x21, 0x40, 0x26, 0x00, 0x57, 0x27, 0x2f, 0xaa, 0x00, 0x40, + 0x49, 0xac, 0xbe, 0x28, 0xf6, 0x01, 0x44, 0x0f, 0x1a, 0xb6, 0xfa, 0x41, + 0xa3, 0x55, 0x43, 0xa1, 0xe0, 0xda, 0xf9, 0x01, 0xac, 0x23, 0x44, 0xb6, + 0xdb, 0x6a, 0xf4, 0x01, 0x4a, 0xa5, 0xb0, 0x2b, 0x26, 0x00, 0x4e, 0xdf, + 0x7c, 0x85, 0xf3, 0x01, 0x02, 0xd8, 0x04, 0x01, 0xff, 0x44, 0xbf, 0xe1, + 0xb7, 0xf5, 0x01, 0x47, 0x80, 0x48, 0xe0, 0xf4, 0x41, 0x44, 0xe1, 0xee, + 0xc6, 0xf9, 0x01, 0xac, 0x01, 0xff, 0x47, 0xd0, 0xd0, 0x42, 0xf3, 0x01, + 0x0d, 0x39, 0x31, 0x01, 0xff, 0x09, 0x95, 0x10, 0x06, 0x5f, 0x2f, 0x11, + 0xde, 0x26, 0x40, 0x50, 0xa7, 0x23, 0x2f, 0x29, 0x00, 0x4f, 0xfa, 0x3d, + 0x2c, 0x29, 0x40, 0x02, 0x60, 0x00, 0x0c, 0x4b, 0xa0, 0xa2, 0x3b, 0x21, + 0x00, 0x44, 0xd2, 0x96, 0xed, 0xf3, 0x41, 0x52, 0x4b, 0x52, 0x79, 0xf9, + 0x01, 0x47, 0x2a, 0xd3, 0x86, 0xf4, 0x01, 0x44, 0xd0, 0x40, 0x26, 0xf9, + 0x01, 0xb3, 0xcb, 0x01, 0x4f, 0xb0, 0x73, 0x18, 0xf6, 0x01, 0x04, 0x51, + 0x00, 0x01, 0xff, 0x80, 0x06, 0x49, 0x9e, 0xbd, 0x36, 0xf6, 0x41, 0x4f, + 0x04, 0x6b, 0xe9, 0xfa, 0x01, 0x02, 0x13, 0x05, 0xa1, 0x01, 0x4e, 0xcd, + 0x76, 0xe4, 0xfa, 0x01, 0x5b, 0x4f, 0x1b, 0x2b, 0xf9, 0x01, 0x4c, 0xa3, + 0x8f, 0x15, 0xf9, 0x01, 0x4f, 0xff, 0x6f, 0x24, 0xf6, 0x01, 0xad, 0x7b, + 0x4f, 0xb3, 0x70, 0x45, 0xf6, 0x01, 0xaf, 0x46, 0xb0, 0x32, 0x4c, 0xcb, + 0x94, 0x44, 0xf6, 0x01, 0x50, 0xa6, 0x67, 0x1b, 0xf6, 0x81, 0x14, 0xb4, + 0x06, 0x5a, 0x6e, 0x22, 0x74, 0xf9, 0x41, 0x4b, 0xb0, 0x95, 0x02, 0xf6, + 0x01, 0x4a, 0x2d, 0xab, 0x12, 0xf9, 0x41, 0x05, 0x19, 0x00, 0x01, 0xff, + 0x53, 0x93, 0x4d, 0x1d, 0xf6, 0x01, 0x4b, 0x1e, 0xa5, 0x1c, 0xf6, 0x41, + 0x57, 0x5b, 0x2d, 0x73, 0xf9, 0x01, 0x4a, 0xc5, 0xa9, 0xe3, 0xfa, 0x01, + 0x4c, 0xf3, 0x90, 0x7a, 0xf9, 0x41, 0x49, 0xe9, 0xba, 0x46, 0xf6, 0x01, + 0x51, 0x93, 0x5c, 0x28, 0xf9, 0x01, 0x04, 0xf7, 0x04, 0x01, 0xff, 0x58, + 0x9e, 0x28, 0xe2, 0xfa, 0x01, 0x45, 0x27, 0x08, 0x2e, 0xf6, 0xc1, 0x00, + 0x80, 0x01, 0xff, 0x4e, 0xed, 0x75, 0x30, 0xf6, 0x01, 0x48, 0x58, 0xcc, + 0x2e, 0xf9, 0x41, 0x4b, 0x89, 0x9b, 0x37, 0xf6, 0x01, 0x46, 0xcc, 0xde, + 0xd0, 0xf9, 0x41, 0x48, 0xf3, 0x75, 0x13, 0xf6, 0x01, 0x48, 0x70, 0xcc, + 0x20, 0xf9, 0x41, 0x57, 0xa0, 0x2d, 0x0b, 0xf6, 0x01, 0x50, 0xc6, 0x61, + 0x31, 0xf6, 0x41, 0x4c, 0xbf, 0x8b, 0xe7, 0xf4, 0x01, 0xa1, 0xbf, 0x48, + 0x50, 0xe6, 0x61, 0x0e, 0x2e, 0x00, 0xa7, 0xc1, 0x20, 0x04, 0xc9, 0x00, + 0xf9, 0x1f, 0x4b, 0xdb, 0x9d, 0xcf, 0x23, 0x00, 0xac, 0xef, 0x1b, 0xad, + 0xbb, 0x1a, 0xae, 0xb4, 0x19, 0x02, 0x7c, 0x00, 0xf4, 0x17, 0xb2, 0x9f, + 0x17, 0xb3, 0x87, 0x17, 0x08, 0x78, 0xcb, 0x8a, 0x02, 0xb5, 0xd9, 0x01, + 0x4d, 0x08, 0x8a, 0x32, 0xf3, 0x01, 0xb8, 0x11, 0x42, 0x4d, 0x00, 0x41, + 0xf4, 0xc1, 0x00, 0x47, 0x55, 0xc0, 0x53, 0xf4, 0x01, 0xf3, 0x40, 0xf4, + 0x41, 0xa3, 0xa6, 0x01, 0xb0, 0x82, 0x01, 0xb4, 0x01, 0xff, 0x19, 0xdc, + 0x06, 0x39, 0xb2, 0x01, 0xff, 0x52, 0x65, 0x50, 0x7d, 0xf4, 0x01, 0x0c, + 0x77, 0x8e, 0x01, 0xff, 0x54, 0x58, 0x42, 0xb4, 0xf7, 0x01, 0x4b, 0x1b, + 0x61, 0xa7, 0xf7, 0x01, 0xb3, 0x11, 0x06, 0xad, 0x02, 0x01, 0xff, 0x46, + 0x12, 0x03, 0x89, 0xf7, 0x01, 0x46, 0xd6, 0x05, 0x93, 0xf7, 0x41, 0x46, + 0x13, 0x19, 0xae, 0xf7, 0x01, 0x52, 0xff, 0x52, 0xba, 0xf7, 0x41, 0x45, + 0x12, 0x0b, 0xf8, 0x06, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xf9, 0x06, + 0x00, 0x43, 0x0e, 0x0b, 0xf1, 0x06, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, + 0x43, 0x1e, 0xf0, 0x06, 0x40, 0x44, 0x25, 0x01, 0xf3, 0x06, 0x00, 0x42, + 0x15, 0x02, 0xf2, 0x06, 0x40, 0x44, 0xc9, 0x1d, 0xf7, 0x06, 0x00, 0x42, + 0x01, 0x26, 0xf6, 0x06, 0x40, 0x43, 0xd2, 0x05, 0xf5, 0x06, 0x00, 0x43, + 0xf6, 0x06, 0xf4, 0x06, 0x40, 0x07, 0x00, 0xd3, 0x06, 0x50, 0x86, 0x66, + 0x11, 0xf6, 0x41, 0x4a, 0xf9, 0xa7, 0x02, 0xce, 0x01, 0x06, 0x0a, 0x44, + 0x01, 0xff, 0xd1, 0xfd, 0xcd, 0x01, 0xd2, 0xfe, 0xcd, 0x01, 0xd3, 0xff, + 0xcd, 0x41, 0x43, 0xed, 0x00, 0x39, 0x22, 0x00, 0x09, 0xb0, 0x00, 0x01, + 0xff, 0x44, 0xb9, 0x00, 0x21, 0x00, 0x00, 0x4d, 0xa6, 0x34, 0x49, 0x20, + 0x40, 0x4c, 0x17, 0x91, 0x07, 0x21, 0x00, 0x45, 0x2f, 0xe9, 0xc8, 0xce, + 0x01, 0x02, 0xd0, 0x00, 0x01, 0xff, 0x45, 0x59, 0x03, 0xac, 0x20, 0x00, + 0x4e, 0x99, 0x75, 0xa0, 0x20, 0x00, 0x05, 0xca, 0xe9, 0x01, 0xff, 0x46, + 0x5e, 0xda, 0xf0, 0xf3, 0x01, 0x4b, 0x6c, 0xa1, 0xe4, 0xf3, 0x41, 0x02, + 0x13, 0x05, 0xca, 0x14, 0x06, 0xef, 0x06, 0x88, 0x14, 0x49, 0x81, 0x16, + 0x62, 0x13, 0x00, 0x07, 0xff, 0x39, 0xb3, 0x13, 0xb0, 0xa4, 0x13, 0x4d, + 0xa6, 0x34, 0x67, 0x13, 0x00, 0xb3, 0x4b, 0x0b, 0x9d, 0xa3, 0x06, 0x49, + 0x58, 0xc1, 0x61, 0x13, 0x40, 0x46, 0x94, 0xda, 0x96, 0x13, 0x00, 0xa4, + 0x26, 0x45, 0x55, 0xd8, 0x97, 0x13, 0x00, 0xab, 0x12, 0x46, 0x3d, 0x95, + 0x92, 0x13, 0x00, 0x4c, 0x37, 0x95, 0x93, 0x13, 0x00, 0x45, 0x95, 0xec, + 0x90, 0x13, 0x40, 0x44, 0x75, 0x50, 0x95, 0x13, 0x00, 0x43, 0x0b, 0x5d, + 0x99, 0x13, 0x40, 0x44, 0x1d, 0xaa, 0x91, 0x13, 0x80, 0x06, 0x44, 0x79, + 0xf0, 0x94, 0x13, 0x40, 0x46, 0x54, 0xd8, 0x98, 0x13, 0x40, 0xa5, 0xc2, + 0x12, 0x08, 0x1b, 0x18, 0x01, 0xff, 0xa2, 0xe3, 0x11, 0xa3, 0xab, 0x10, + 0xa4, 0x98, 0x0f, 0xa6, 0xde, 0x0e, 0xa7, 0x9c, 0x0c, 0xa8, 0xa2, 0x0b, + 0xaa, 0xf6, 0x0a, 0xab, 0xdc, 0x09, 0xac, 0xb0, 0x09, 0xad, 0xf1, 0x08, + 0xae, 0x99, 0x08, 0xb0, 0x91, 0x07, 0xb1, 0xf7, 0x05, 0xb2, 0xc5, 0x05, + 0xb3, 0x89, 0x04, 0xb4, 0xc4, 0x02, 0xb6, 0x9d, 0x02, 0xb7, 0xf7, 0x01, + 0xb8, 0x98, 0x01, 0xb9, 0x73, 0xba, 0x01, 0xff, 0xe1, 0xd8, 0x12, 0x80, + 0x67, 0xe5, 0xdd, 0x12, 0x80, 0x5e, 0xa8, 0x38, 0xe9, 0xda, 0x12, 0x00, + 0xef, 0xde, 0x12, 0x80, 0x2b, 0xf5, 0xd9, 0x12, 0x00, 0x42, 0xa9, 0x01, + 0xdf, 0x12, 0x00, 0xba, 0x01, 0xff, 0xe1, 0xb0, 0x2d, 0x80, 0x15, 0xe5, + 0xb5, 0x2d, 0x80, 0x0c, 0xe9, 0xb2, 0x2d, 0x00, 0xef, 0xb6, 0x2d, 0x00, + 0xf5, 0xb1, 0x2d, 0x40, 0xe5, 0xb4, 0x2d, 0x40, 0xe1, 0xb3, 0x2d, 0x40, + 0xe1, 0x8b, 0x2d, 0x40, 0xe1, 0xe0, 0x12, 0x80, 0x1b, 0xe5, 0xe5, 0x12, + 0x80, 0x12, 0xe9, 0xe2, 0x12, 0x00, 0xef, 0xe6, 0x12, 0x00, 0xf5, 0xe1, + 0x12, 0x00, 0x42, 0xa9, 0x01, 0xe7, 0x12, 0x40, 0xe5, 0xe4, 0x12, 0x40, + 0xe1, 0xe3, 0x12, 0x40, 0xe5, 0xdc, 0x12, 0x40, 0xe1, 0xdb, 0x12, 0x40, + 0xe1, 0xe8, 0x12, 0x80, 0x1a, 0xe5, 0xed, 0x12, 0x80, 0x11, 0xe9, 0xea, + 0x12, 0x00, 0xef, 0xee, 0x12, 0x80, 0x04, 0xf5, 0xe9, 0x12, 0x40, 0xe1, + 0xef, 0x12, 0x40, 0xe5, 0xec, 0x12, 0x40, 0xe1, 0xeb, 0x12, 0x40, 0xe1, + 0x80, 0x12, 0x80, 0x53, 0xe5, 0x85, 0x12, 0x80, 0x4a, 0xe9, 0x82, 0x12, + 0x00, 0xef, 0x86, 0x12, 0x80, 0x3d, 0xf5, 0x81, 0x12, 0x00, 0xb7, 0x21, + 0xb9, 0x01, 0xff, 0xe1, 0xd0, 0x2d, 0x80, 0x15, 0xe5, 0xd5, 0x2d, 0x80, + 0x0c, 0xe9, 0xd2, 0x2d, 0x00, 0xef, 0xd6, 0x2d, 0x00, 0xf5, 0xd1, 0x2d, + 0x40, 0xe5, 0xd4, 0x2d, 0x40, 0xe1, 0xd3, 0x2d, 0x40, 0xe1, 0x88, 0x12, + 0x80, 0x0d, 0xe5, 0x8d, 0x12, 0x80, 0x04, 0xe9, 0x8a, 0x12, 0x40, 0xe5, + 0x8c, 0x12, 0x40, 0xe1, 0x8b, 0x12, 0x40, 0xe1, 0x87, 0x12, 0x40, 0xe5, + 0x84, 0x12, 0x40, 0xe1, 0x83, 0x12, 0x40, 0xe1, 0xc8, 0x12, 0x80, 0x1a, + 0xe5, 0xcd, 0x12, 0x80, 0x11, 0xe9, 0xca, 0x12, 0x00, 0xef, 0xce, 0x12, + 0x80, 0x04, 0xf5, 0xc9, 0x12, 0x40, 0xe1, 0xcf, 0x12, 0x40, 0xe5, 0xcc, + 0x12, 0x40, 0xe1, 0xcb, 0x12, 0x40, 0xe1, 0x68, 0x12, 0x80, 0x1b, 0xe5, + 0x6d, 0x12, 0x80, 0x12, 0xe9, 0x6a, 0x12, 0x00, 0xef, 0x6e, 0x12, 0x00, + 0xf5, 0x69, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x6f, 0x12, 0x40, 0xe5, 0x6c, + 0x12, 0x40, 0xe1, 0x6b, 0x12, 0x40, 0xe1, 0x70, 0x12, 0x80, 0xb8, 0x01, + 0xe5, 0x75, 0x12, 0x80, 0xae, 0x01, 0xa8, 0x82, 0x01, 0xe9, 0x72, 0x12, + 0x00, 0xef, 0x76, 0x12, 0x80, 0x75, 0xb3, 0x4f, 0x02, 0x53, 0x00, 0x30, + 0xf5, 0x71, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x77, 0x12, 0x00, 0xba, 0x01, + 0xff, 0xe1, 0x40, 0x13, 0x80, 0x1a, 0xe5, 0x45, 0x13, 0x80, 0x11, 0xe9, + 0x42, 0x13, 0x00, 0xef, 0x46, 0x13, 0x80, 0x04, 0xf5, 0x41, 0x13, 0x40, + 0xe1, 0x47, 0x13, 0x40, 0xe5, 0x44, 0x13, 0x40, 0xe1, 0x43, 0x13, 0x40, + 0x42, 0x80, 0x12, 0x03, 0xab, 0x00, 0xe5, 0x05, 0xab, 0x80, 0x0c, 0xe9, + 0x02, 0xab, 0x00, 0xef, 0x06, 0xab, 0x00, 0xf5, 0x01, 0xab, 0x40, 0xe5, + 0x04, 0xab, 0x40, 0xe1, 0x38, 0x13, 0x80, 0x1b, 0xe5, 0x3d, 0x13, 0x80, + 0x12, 0xe9, 0x3a, 0x13, 0x00, 0xef, 0x3e, 0x13, 0x00, 0xf5, 0x39, 0x13, + 0x00, 0x42, 0xa9, 0x01, 0x3f, 0x13, 0x40, 0xe5, 0x3c, 0x13, 0x40, 0xe1, + 0x3b, 0x13, 0x40, 0xe1, 0x86, 0x2d, 0x40, 0xe1, 0x20, 0x13, 0x80, 0x20, + 0xe5, 0x25, 0x13, 0x80, 0x17, 0xe9, 0x22, 0x13, 0x00, 0xef, 0x26, 0x13, + 0x80, 0x0a, 0xf5, 0x21, 0x13, 0x00, 0x42, 0xa9, 0x01, 0x27, 0x13, 0x40, + 0xe1, 0x8f, 0x2d, 0x40, 0xe5, 0x24, 0x13, 0x40, 0xe1, 0x23, 0x13, 0x40, + 0xe5, 0x74, 0x12, 0x40, 0xe1, 0x73, 0x12, 0x40, 0xe1, 0x30, 0x12, 0x80, + 0xaf, 0x01, 0xe5, 0x35, 0x12, 0x80, 0x89, 0x01, 0xa8, 0x5e, 0xe9, 0x32, + 0x12, 0x00, 0xef, 0x36, 0x12, 0x80, 0x51, 0xb3, 0x31, 0xf5, 0x31, 0x12, + 0x00, 0x42, 0xa9, 0x01, 0x37, 0x12, 0x00, 0xba, 0x01, 0xff, 0xe1, 0x20, + 0x12, 0x80, 0x1b, 0xe5, 0x25, 0x12, 0x80, 0x12, 0xe9, 0x22, 0x12, 0x00, + 0xef, 0x26, 0x12, 0x00, 0xf5, 0x21, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x27, + 0x12, 0x40, 0xe5, 0x24, 0x12, 0x40, 0xe1, 0x23, 0x12, 0x40, 0xe1, 0xa0, + 0x2d, 0x80, 0x15, 0xe5, 0xa5, 0x2d, 0x80, 0x0c, 0xe9, 0xa2, 0x2d, 0x00, + 0xef, 0xa6, 0x2d, 0x00, 0xf5, 0xa1, 0x2d, 0x40, 0xe5, 0xa4, 0x2d, 0x40, + 0xe1, 0xa3, 0x2d, 0x40, 0xe1, 0x83, 0x2d, 0x40, 0xe1, 0x38, 0x12, 0x80, + 0x20, 0xe5, 0x3d, 0x12, 0x80, 0x17, 0xe9, 0x3a, 0x12, 0x00, 0xef, 0x3e, + 0x12, 0x80, 0x0a, 0xf5, 0x39, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x3f, 0x12, + 0x40, 0xe1, 0x84, 0x2d, 0x40, 0xe5, 0x3c, 0x12, 0x40, 0xe1, 0x3b, 0x12, + 0x40, 0x08, 0xf8, 0xc3, 0x04, 0xe5, 0x34, 0x12, 0x40, 0x43, 0x45, 0xd2, + 0x84, 0x13, 0x00, 0x43, 0xd9, 0xef, 0x88, 0x13, 0x00, 0x43, 0x7f, 0x94, + 0x80, 0x13, 0x00, 0x43, 0x51, 0x02, 0x8c, 0x13, 0x40, 0xe1, 0x33, 0x12, + 0x40, 0xe1, 0x28, 0x12, 0x80, 0x26, 0xe5, 0x2d, 0x12, 0x80, 0x1d, 0xe9, + 0x2a, 0x12, 0x00, 0xef, 0x2e, 0x12, 0x80, 0x10, 0xf5, 0x29, 0x12, 0x00, + 0x42, 0xa9, 0x01, 0x2f, 0x12, 0x00, 0x42, 0xbc, 0x22, 0x58, 0x13, 0x40, + 0xe1, 0x82, 0x2d, 0x40, 0xe5, 0x2c, 0x12, 0x40, 0xe1, 0x2b, 0x12, 0x40, + 0xe1, 0x40, 0x12, 0x80, 0x8d, 0x01, 0xe5, 0x45, 0x12, 0x80, 0x83, 0x01, + 0xa8, 0x4a, 0xe9, 0x42, 0x12, 0x00, 0xef, 0x46, 0x12, 0x80, 0x3d, 0xf5, + 0x41, 0x12, 0x00, 0xb7, 0x21, 0xb9, 0x01, 0xff, 0xe1, 0xc0, 0x2d, 0x80, + 0x15, 0xe5, 0xc5, 0x2d, 0x80, 0x0c, 0xe9, 0xc2, 0x2d, 0x00, 0xef, 0xc6, + 0x2d, 0x00, 0xf5, 0xc1, 0x2d, 0x40, 0xe5, 0xc4, 0x2d, 0x40, 0xe1, 0xc3, + 0x2d, 0x40, 0xe1, 0x48, 0x12, 0x80, 0x0d, 0xe5, 0x4d, 0x12, 0x80, 0x04, + 0xe9, 0x4a, 0x12, 0x40, 0xe5, 0x4c, 0x12, 0x40, 0xe1, 0x4b, 0x12, 0x40, + 0xe1, 0x47, 0x12, 0x40, 0xe1, 0x50, 0x12, 0x80, 0x2e, 0xe5, 0x55, 0x12, + 0x80, 0x25, 0xe9, 0x52, 0x12, 0x00, 0xef, 0x56, 0x12, 0x00, 0xf5, 0x51, + 0x12, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x58, 0x12, 0x80, 0x0d, 0xe5, 0x5d, + 0x12, 0x80, 0x04, 0xe9, 0x5a, 0x12, 0x40, 0xe5, 0x5c, 0x12, 0x40, 0xe1, + 0x5b, 0x12, 0x40, 0xe5, 0x54, 0x12, 0x40, 0xe1, 0x53, 0x12, 0x40, 0xe5, + 0x44, 0x12, 0x40, 0xe1, 0x43, 0x12, 0x40, 0xe1, 0x50, 0x13, 0x80, 0x7c, + 0xe5, 0x55, 0x13, 0x80, 0x73, 0xa8, 0x25, 0xe9, 0x52, 0x13, 0x00, 0xef, + 0x56, 0x13, 0x80, 0x18, 0xf5, 0x51, 0x13, 0x00, 0xb7, 0x01, 0xff, 0xe1, + 0x57, 0x13, 0x00, 0xe5, 0x8f, 0x13, 0x80, 0x04, 0xe9, 0x8d, 0x13, 0x40, + 0xe5, 0x8e, 0x13, 0x40, 0xe1, 0x92, 0x2d, 0x40, 0xe1, 0x30, 0x13, 0x80, + 0x20, 0xe5, 0x35, 0x13, 0x80, 0x17, 0xe9, 0x32, 0x13, 0x00, 0xef, 0x36, + 0x13, 0x80, 0x0a, 0xf5, 0x31, 0x13, 0x00, 0x42, 0xa9, 0x01, 0x37, 0x13, + 0x40, 0xe1, 0x91, 0x2d, 0x40, 0xe5, 0x34, 0x13, 0x40, 0xe1, 0x33, 0x13, + 0x00, 0x08, 0x02, 0x1d, 0x01, 0xff, 0xe1, 0xd0, 0x12, 0x80, 0x15, 0xe5, + 0xd5, 0x12, 0x80, 0x0c, 0xe9, 0xd2, 0x12, 0x00, 0xef, 0xd6, 0x12, 0x00, + 0xf5, 0xd1, 0x12, 0x40, 0xe5, 0xd4, 0x12, 0x40, 0xe1, 0xd3, 0x12, 0x40, + 0xe5, 0x54, 0x13, 0x40, 0xe1, 0x53, 0x13, 0x40, 0xe1, 0x90, 0x12, 0x80, + 0x4c, 0xe5, 0x95, 0x12, 0x80, 0x43, 0xe9, 0x92, 0x12, 0x00, 0xef, 0x96, + 0x12, 0x80, 0x36, 0xf5, 0x91, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x97, 0x12, + 0x00, 0xb9, 0x01, 0xff, 0xe1, 0x98, 0x12, 0x80, 0x20, 0xe5, 0x9d, 0x12, + 0x80, 0x17, 0xe9, 0x9a, 0x12, 0x00, 0xef, 0x9e, 0x12, 0x80, 0x0a, 0xf5, + 0x99, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x9f, 0x12, 0x40, 0xe1, 0x89, 0x2d, + 0x40, 0xe5, 0x9c, 0x12, 0x40, 0xe1, 0x9b, 0x12, 0x40, 0xe1, 0x88, 0x2d, + 0x40, 0xe5, 0x94, 0x12, 0x40, 0xe1, 0x93, 0x12, 0x40, 0xe1, 0x18, 0x12, + 0x80, 0x33, 0xe5, 0x1d, 0x12, 0x80, 0x2a, 0xe9, 0x1a, 0x12, 0x00, 0xef, + 0x1e, 0x12, 0x80, 0x1d, 0xf5, 0x19, 0x12, 0x00, 0xb7, 0x06, 0x42, 0xbc, + 0x22, 0x59, 0x13, 0x40, 0xe1, 0x1f, 0x12, 0x00, 0xe5, 0x83, 0x13, 0x80, + 0x04, 0xe9, 0x81, 0x13, 0x40, 0xe5, 0x82, 0x13, 0x40, 0xe1, 0x81, 0x2d, + 0x40, 0xe5, 0x1c, 0x12, 0x40, 0xe1, 0x1b, 0x12, 0x40, 0xe1, 0x08, 0x12, + 0x80, 0x20, 0xe5, 0x0d, 0x12, 0x80, 0x17, 0xe9, 0x0a, 0x12, 0x00, 0xef, + 0x0e, 0x12, 0x80, 0x0a, 0xf5, 0x09, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x0f, + 0x12, 0x40, 0xe1, 0x80, 0x2d, 0x40, 0xe5, 0x0c, 0x12, 0x40, 0xe1, 0x0b, + 0x12, 0x40, 0xe1, 0xa8, 0x12, 0x80, 0x8d, 0x01, 0xe5, 0xad, 0x12, 0x80, + 0x83, 0x01, 0xe9, 0xaa, 0x12, 0x00, 0xef, 0xae, 0x12, 0x80, 0x76, 0xf5, + 0xa9, 0x12, 0x00, 0xb7, 0x5a, 0xb8, 0x21, 0xb9, 0x01, 0xff, 0xe1, 0xc8, + 0x2d, 0x80, 0x15, 0xe5, 0xcd, 0x2d, 0x80, 0x0c, 0xe9, 0xca, 0x2d, 0x00, + 0xef, 0xce, 0x2d, 0x00, 0xf5, 0xc9, 0x2d, 0x40, 0xe5, 0xcc, 0x2d, 0x40, + 0xe1, 0xcb, 0x2d, 0x40, 0xe1, 0xb8, 0x12, 0x80, 0x2e, 0xe5, 0xbd, 0x12, + 0x80, 0x25, 0xe9, 0xba, 0x12, 0x00, 0xef, 0xbe, 0x12, 0x00, 0xf5, 0xb9, + 0x12, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0xc0, 0x12, 0x80, 0x0d, 0xe5, 0xc5, + 0x12, 0x80, 0x04, 0xe9, 0xc2, 0x12, 0x40, 0xe5, 0xc4, 0x12, 0x40, 0xe1, + 0xc3, 0x12, 0x40, 0xe5, 0xbc, 0x12, 0x40, 0xe1, 0xbb, 0x12, 0x40, 0xe1, + 0xb0, 0x12, 0x80, 0x0d, 0xe5, 0xb5, 0x12, 0x80, 0x04, 0xe9, 0xb2, 0x12, + 0x40, 0xe5, 0xb4, 0x12, 0x40, 0xe1, 0xb3, 0x12, 0x40, 0xe1, 0xaf, 0x12, + 0x40, 0xe5, 0xac, 0x12, 0x40, 0xe1, 0xab, 0x12, 0x40, 0xe1, 0x00, 0x13, + 0x80, 0x20, 0xe5, 0x05, 0x13, 0x80, 0x17, 0xe9, 0x02, 0x13, 0x00, 0xef, + 0x06, 0x13, 0x80, 0x0a, 0xf5, 0x01, 0x13, 0x00, 0x42, 0xa9, 0x01, 0x07, + 0x13, 0x40, 0xe1, 0x8e, 0x2d, 0x40, 0xe5, 0x04, 0x13, 0x40, 0xe1, 0x03, + 0x13, 0x40, 0xe1, 0x00, 0x12, 0x80, 0x6e, 0xe5, 0x05, 0x12, 0x80, 0x65, + 0xa8, 0x11, 0xe9, 0x02, 0x12, 0x00, 0xef, 0x06, 0x12, 0x80, 0x04, 0xf5, + 0x01, 0x12, 0x40, 0xe1, 0x07, 0x12, 0x40, 0xe1, 0x10, 0x12, 0x80, 0x49, + 0xe5, 0x15, 0x12, 0x80, 0x40, 0xe9, 0x12, 0x12, 0x00, 0xef, 0x16, 0x12, + 0x00, 0xf5, 0x11, 0x12, 0x00, 0xb7, 0x21, 0xb9, 0x01, 0xff, 0xe1, 0xe0, + 0xe7, 0x81, 0x15, 0xe5, 0xe5, 0xe7, 0x81, 0x0c, 0xe9, 0xe2, 0xe7, 0x01, + 0xef, 0xe6, 0xe7, 0x01, 0xf5, 0xe1, 0xe7, 0x41, 0xe5, 0xe4, 0xe7, 0x41, + 0xe1, 0xe3, 0xe7, 0x41, 0xe1, 0x17, 0x12, 0x00, 0xe5, 0xeb, 0xe7, 0x81, + 0x04, 0xe9, 0xe9, 0xe7, 0x41, 0xe5, 0xea, 0xe7, 0x41, 0xe5, 0x14, 0x12, + 0x40, 0xe1, 0x13, 0x12, 0x40, 0xe5, 0x04, 0x12, 0x40, 0xe1, 0x03, 0x12, + 0x40, 0xe1, 0x08, 0x13, 0x80, 0xb5, 0x02, 0xe5, 0x0d, 0x13, 0x80, 0xab, + 0x02, 0xa7, 0xf1, 0x01, 0xe9, 0x0a, 0x13, 0x00, 0x07, 0xcf, 0x28, 0xbf, + 0x01, 0xef, 0x0e, 0x13, 0x80, 0xb5, 0x01, 0xf5, 0x09, 0x13, 0x80, 0x39, + 0xb7, 0x21, 0xb9, 0x01, 0xff, 0xe1, 0xd8, 0x2d, 0x80, 0x15, 0xe5, 0xdd, + 0x2d, 0x80, 0x0c, 0xe9, 0xda, 0x2d, 0x00, 0xef, 0xde, 0x2d, 0x00, 0xf5, + 0xd9, 0x2d, 0x40, 0xe5, 0xdc, 0x2d, 0x40, 0xe1, 0xdb, 0x2d, 0x40, 0xe1, + 0x10, 0x13, 0x80, 0x0d, 0xe5, 0x15, 0x13, 0x80, 0x04, 0xe9, 0x12, 0x13, + 0x40, 0xe5, 0x14, 0x13, 0x40, 0xe1, 0x13, 0x13, 0x40, 0x05, 0x3d, 0x5f, + 0x01, 0xff, 0x02, 0x45, 0xd2, 0x64, 0x02, 0x94, 0x56, 0x56, 0x02, 0x74, + 0xb3, 0x45, 0x44, 0x3d, 0xf0, 0xe8, 0xe7, 0x01, 0x02, 0x3c, 0x0b, 0x2e, + 0x02, 0x22, 0x38, 0x20, 0x02, 0x51, 0x02, 0x12, 0x02, 0x14, 0xf3, 0x01, + 0xff, 0xe5, 0xf2, 0xe7, 0x81, 0x04, 0xe9, 0xf0, 0xe7, 0x41, 0xe5, 0xf1, + 0xe7, 0x41, 0x42, 0x27, 0x01, 0xfe, 0xe7, 0x01, 0xe9, 0xfd, 0xe7, 0x41, + 0x42, 0x27, 0x01, 0xee, 0xe7, 0x01, 0xe9, 0xed, 0xe7, 0x41, 0xe5, 0xf7, + 0xe7, 0x81, 0x04, 0xe9, 0xf5, 0xe7, 0x41, 0xe5, 0xf6, 0xe7, 0x41, 0xe5, + 0xfa, 0xe7, 0x81, 0x04, 0xe9, 0xf8, 0xe7, 0x41, 0xe5, 0xf9, 0xe7, 0x41, + 0x42, 0x27, 0x01, 0xfc, 0xe7, 0x01, 0xe9, 0xfb, 0xe7, 0x41, 0x42, 0x27, + 0x01, 0xf4, 0xe7, 0x01, 0xe9, 0xf3, 0xe7, 0x41, 0xe1, 0x0f, 0x13, 0x40, + 0xe1, 0xa0, 0x12, 0x80, 0x20, 0xe5, 0xa5, 0x12, 0x80, 0x17, 0xe9, 0xa2, + 0x12, 0x00, 0xef, 0xa6, 0x12, 0x80, 0x0a, 0xf5, 0xa1, 0x12, 0x00, 0x42, + 0xa9, 0x01, 0xa7, 0x12, 0x40, 0xe1, 0x8a, 0x2d, 0x40, 0xe5, 0xa4, 0x12, + 0x40, 0xe1, 0xa3, 0x12, 0x40, 0xe1, 0x18, 0x13, 0x80, 0x2e, 0xe5, 0x1d, + 0x13, 0x80, 0x25, 0xe9, 0x1a, 0x13, 0x00, 0xef, 0x1e, 0x13, 0x00, 0xf5, + 0x19, 0x13, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x93, 0x2d, 0x80, 0x0d, 0xe5, + 0x96, 0x2d, 0x80, 0x04, 0xe9, 0x94, 0x2d, 0x40, 0xe5, 0x95, 0x2d, 0x40, + 0xe1, 0x1f, 0x13, 0x40, 0xe5, 0x1c, 0x13, 0x40, 0xe1, 0x1b, 0x13, 0x40, + 0xe5, 0x0c, 0x13, 0x40, 0xe1, 0x0b, 0x13, 0x40, 0xe1, 0x48, 0x13, 0x80, + 0x2e, 0xe5, 0x4d, 0x13, 0x80, 0x25, 0xe9, 0x4a, 0x13, 0x00, 0xef, 0x4e, + 0x13, 0x00, 0xf5, 0x49, 0x13, 0x00, 0xb7, 0x06, 0x42, 0xbc, 0x22, 0x5a, + 0x13, 0x40, 0xe1, 0x4f, 0x13, 0x00, 0xe5, 0x8b, 0x13, 0x80, 0x04, 0xe9, + 0x89, 0x13, 0x40, 0xe5, 0x8a, 0x13, 0x40, 0xe5, 0x4c, 0x13, 0x40, 0xe1, + 0x4b, 0x13, 0x40, 0xe1, 0xf0, 0x12, 0x80, 0x86, 0x01, 0xa4, 0x3e, 0xe5, + 0xf5, 0x12, 0x80, 0x35, 0xe9, 0xf2, 0x12, 0x00, 0xef, 0xf6, 0x12, 0x80, + 0x28, 0xf5, 0xf1, 0x12, 0x00, 0x42, 0xa9, 0x01, 0xf7, 0x12, 0x00, 0xba, + 0x01, 0xff, 0x42, 0x80, 0x12, 0x13, 0xab, 0x00, 0xe5, 0x15, 0xab, 0x80, + 0x0c, 0xe9, 0x12, 0xab, 0x00, 0xef, 0x16, 0xab, 0x00, 0xf5, 0x11, 0xab, + 0x40, 0xe5, 0x14, 0xab, 0x40, 0xe1, 0x8c, 0x2d, 0x40, 0xe5, 0xf4, 0x12, + 0x40, 0xe1, 0xf8, 0x12, 0x80, 0x3d, 0xe5, 0xfd, 0x12, 0x80, 0x34, 0xa8, + 0x17, 0xe9, 0xfa, 0x12, 0x00, 0xef, 0xfe, 0x12, 0x80, 0x0a, 0xf5, 0xf9, + 0x12, 0x00, 0x42, 0xa9, 0x01, 0xff, 0x12, 0x40, 0xe1, 0x8d, 0x2d, 0x40, + 0x42, 0x80, 0x12, 0x0b, 0xab, 0x00, 0xe5, 0x0d, 0xab, 0x80, 0x0c, 0xe9, + 0x0a, 0xab, 0x00, 0xef, 0x0e, 0xab, 0x00, 0xf5, 0x09, 0xab, 0x40, 0xe5, + 0x0c, 0xab, 0x40, 0xe5, 0xfc, 0x12, 0x40, 0xe1, 0xfb, 0x12, 0x40, 0xe1, + 0xf3, 0x12, 0x40, 0xe1, 0x78, 0x12, 0x80, 0xab, 0x01, 0xa3, 0x4b, 0xe5, + 0x7d, 0x12, 0x80, 0x42, 0xa8, 0x17, 0xe9, 0x7a, 0x12, 0x00, 0xef, 0x7e, + 0x12, 0x80, 0x0a, 0xf5, 0x79, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x7f, 0x12, + 0x40, 0xe1, 0x87, 0x2d, 0x40, 0xe1, 0x28, 0x13, 0x80, 0x20, 0xe5, 0x2d, + 0x13, 0x80, 0x17, 0xe9, 0x2a, 0x13, 0x00, 0xef, 0x2e, 0x13, 0x80, 0x0a, + 0xf5, 0x29, 0x13, 0x00, 0x42, 0xa9, 0x01, 0x2f, 0x13, 0x40, 0xe1, 0x90, + 0x2d, 0x40, 0xe5, 0x2c, 0x13, 0x40, 0xe1, 0x2b, 0x13, 0x40, 0xe5, 0x7c, + 0x12, 0x40, 0xe1, 0xa8, 0x2d, 0x80, 0x55, 0xe5, 0xad, 0x2d, 0x80, 0x4c, + 0xa8, 0x0c, 0xe9, 0xaa, 0x2d, 0x00, 0xef, 0xae, 0x2d, 0x00, 0xf5, 0xa9, + 0x2d, 0x40, 0xe1, 0xb8, 0x2d, 0x80, 0x35, 0xe5, 0xbd, 0x2d, 0x80, 0x2c, + 0xa8, 0x0c, 0xe9, 0xba, 0x2d, 0x00, 0xef, 0xbe, 0x2d, 0x00, 0xf5, 0xb9, + 0x2d, 0x40, 0xe1, 0x20, 0xab, 0x80, 0x15, 0xe5, 0x25, 0xab, 0x80, 0x0c, + 0xe9, 0x22, 0xab, 0x00, 0xef, 0x26, 0xab, 0x00, 0xf5, 0x21, 0xab, 0x40, + 0xe5, 0x24, 0xab, 0x40, 0xe1, 0x23, 0xab, 0x40, 0xe5, 0xbc, 0x2d, 0x40, + 0xe1, 0xbb, 0x2d, 0x40, 0xe5, 0xac, 0x2d, 0x40, 0xe1, 0xab, 0x2d, 0x40, + 0xe1, 0x7b, 0x12, 0x40, 0xe1, 0x60, 0x12, 0x80, 0x4e, 0xa2, 0x2e, 0xe5, + 0x65, 0x12, 0x80, 0x25, 0xe9, 0x62, 0x12, 0x00, 0xef, 0x66, 0x12, 0x80, + 0x18, 0xf5, 0x61, 0x12, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x67, 0x12, 0x00, + 0xe5, 0x87, 0x13, 0x80, 0x04, 0xe9, 0x85, 0x13, 0x40, 0xe5, 0x86, 0x13, + 0x40, 0xe1, 0x85, 0x2d, 0x40, 0xe5, 0x64, 0x12, 0x40, 0xe1, 0x28, 0xab, + 0x80, 0x15, 0xe5, 0x2d, 0xab, 0x80, 0x0c, 0xe9, 0x2a, 0xab, 0x00, 0xef, + 0x2e, 0xab, 0x00, 0xf5, 0x29, 0xab, 0x40, 0xe5, 0x2c, 0xab, 0x40, 0xe1, + 0x2b, 0xab, 0x40, 0xe1, 0x63, 0x12, 0x40, 0x4a, 0xfa, 0x26, 0x60, 0x13, + 0x00, 0x47, 0xdb, 0x59, 0x64, 0x13, 0x40, 0x52, 0x18, 0x4c, 0x68, 0x13, + 0x00, 0x4c, 0x47, 0x94, 0x66, 0x13, 0x40, 0x46, 0x30, 0xdb, 0x79, 0x13, + 0x00, 0xa6, 0x36, 0x47, 0x71, 0x11, 0x7b, 0x13, 0x00, 0x46, 0xac, 0x2c, + 0x7a, 0x13, 0x00, 0xb3, 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x72, + 0x13, 0x80, 0x0c, 0x45, 0x7a, 0x11, 0x74, 0x13, 0x00, 0x45, 0x7f, 0x2c, + 0x73, 0x13, 0x40, 0x49, 0x3f, 0x5e, 0x7c, 0x13, 0x40, 0x46, 0xc9, 0x1d, + 0x78, 0x13, 0x00, 0x44, 0x46, 0xdd, 0x77, 0x13, 0x40, 0x44, 0x51, 0x4d, + 0x76, 0x13, 0x00, 0x44, 0xce, 0x51, 0x75, 0x13, 0x40, 0x45, 0x12, 0x0b, + 0x70, 0x13, 0x00, 0xa6, 0x29, 0x44, 0xcf, 0x2a, 0x71, 0x13, 0x00, 0x43, + 0x0e, 0x0b, 0x69, 0x13, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, + 0x01, 0x6b, 0x13, 0x00, 0x42, 0x15, 0x02, 0x6a, 0x13, 0x40, 0x44, 0xc9, + 0x1d, 0x6f, 0x13, 0x00, 0x42, 0x01, 0x26, 0x6e, 0x13, 0x40, 0x43, 0xd2, + 0x05, 0x6d, 0x13, 0x00, 0x43, 0xf6, 0x06, 0x6c, 0x13, 0x40, 0x43, 0xd7, + 0x02, 0x65, 0x13, 0x00, 0xad, 0x01, 0xff, 0x07, 0x35, 0x16, 0x06, 0x42, + 0x6c, 0x00, 0x63, 0x13, 0x40, 0x0b, 0x89, 0x6d, 0x06, 0x51, 0x3c, 0x39, + 0x5e, 0x13, 0x40, 0x55, 0x38, 0x39, 0x5d, 0x13, 0x00, 0x44, 0xb9, 0x00, + 0x5f, 0x13, 0x40, 0x44, 0xf1, 0x6a, 0x1b, 0x00, 0x00, 0x06, 0x9a, 0xe0, + 0x01, 0xff, 0x48, 0x78, 0x20, 0x2e, 0x21, 0x00, 0xf3, 0x59, 0x22, 0x40, + 0x0b, 0x42, 0x99, 0x42, 0x08, 0x30, 0xc7, 0x32, 0x0b, 0x53, 0xa2, 0x01, + 0xff, 0x06, 0x0c, 0x03, 0x17, 0x06, 0xad, 0x02, 0x01, 0xff, 0x46, 0x12, + 0x03, 0xf2, 0x29, 0x00, 0x47, 0x95, 0x44, 0xf0, 0x29, 0x00, 0x46, 0xd6, + 0x05, 0xee, 0x29, 0x40, 0x46, 0x12, 0x03, 0xf3, 0x29, 0x00, 0x47, 0x95, + 0x44, 0xf1, 0x29, 0x00, 0x46, 0xd6, 0x05, 0xef, 0x29, 0x40, 0x43, 0x0e, + 0x0b, 0xf0, 0x2b, 0x00, 0x43, 0x1f, 0x0a, 0xf1, 0x2b, 0x40, 0x44, 0xc3, + 0x00, 0x2b, 0x23, 0x00, 0x45, 0xc8, 0x00, 0x26, 0x23, 0x40, 0x02, 0x13, + 0x00, 0x1a, 0xa9, 0x01, 0xff, 0x4a, 0xd1, 0xa7, 0x5a, 0x22, 0x00, 0x07, + 0xd7, 0x39, 0x01, 0xff, 0x42, 0x1e, 0x00, 0x4d, 0x22, 0x00, 0x54, 0xcc, + 0x46, 0x78, 0x2a, 0x40, 0x80, 0x6d, 0x02, 0x31, 0x01, 0x01, 0xff, 0x45, + 0x94, 0x3b, 0x55, 0x22, 0x00, 0x44, 0x5a, 0x03, 0x3d, 0x00, 0x80, 0x06, + 0x4d, 0xa4, 0x8a, 0x6e, 0x2a, 0x40, 0x80, 0x01, 0xff, 0xa1, 0x27, 0x05, + 0x51, 0x00, 0x01, 0xff, 0x4b, 0xc6, 0x99, 0xae, 0x2a, 0x00, 0x49, 0x9f, + 0x12, 0x66, 0x2a, 0x00, 0x09, 0x6b, 0xba, 0x06, 0x61, 0xf2, 0x0e, 0x77, + 0x2a, 0x40, 0x45, 0x5c, 0x00, 0x96, 0x2b, 0x00, 0x45, 0x20, 0x07, 0xf9, + 0x2b, 0x40, 0x05, 0x5d, 0x00, 0x0d, 0x53, 0x7d, 0x38, 0xe3, 0x29, 0xc0, + 0x00, 0x51, 0x87, 0x57, 0xe4, 0x29, 0x40, 0x4f, 0x4d, 0x1a, 0x40, 0x2b, + 0x00, 0x49, 0xdf, 0x71, 0x71, 0x2a, 0x00, 0x50, 0xb3, 0x02, 0x71, 0x29, + 0x00, 0x4e, 0x78, 0x3e, 0x73, 0x2a, 0x40, 0x4f, 0xd7, 0x6a, 0xd5, 0x22, + 0x00, 0x03, 0x7a, 0x02, 0x01, 0xff, 0x4d, 0x4c, 0x81, 0x5d, 0x22, 0x00, + 0x03, 0xc8, 0x07, 0x01, 0xff, 0x4c, 0x87, 0x00, 0xdd, 0x22, 0x00, 0x49, + 0xec, 0x00, 0xdc, 0x22, 0x00, 0x48, 0xe8, 0xc9, 0xde, 0x22, 0x00, 0x48, + 0x30, 0xcb, 0xdf, 0x22, 0x40, 0x80, 0x70, 0x02, 0x06, 0x00, 0x24, 0x45, + 0x1f, 0xea, 0x05, 0x00, 0x00, 0x4a, 0x1e, 0x45, 0x86, 0x23, 0x00, 0x46, + 0x45, 0x32, 0x09, 0x27, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x55, + 0x88, 0x3a, 0xe9, 0xf4, 0x01, 0x49, 0x67, 0xbb, 0x84, 0xf5, 0x41, 0x03, + 0xf4, 0x01, 0x06, 0x5a, 0xa2, 0x22, 0x1a, 0xf5, 0x41, 0x4c, 0x67, 0x8f, + 0x97, 0x00, 0x00, 0x44, 0xed, 0x07, 0x0a, 0x00, 0x00, 0x46, 0x44, 0x04, + 0x19, 0x00, 0x00, 0x03, 0xdf, 0x0c, 0x1c, 0x4d, 0x82, 0x88, 0x87, 0x00, + 0x00, 0xb4, 0x01, 0xff, 0x43, 0xd9, 0x06, 0x03, 0x00, 0x00, 0x4b, 0xc4, + 0xa1, 0x04, 0x00, 0xc0, 0x00, 0x46, 0x32, 0x01, 0x17, 0x00, 0x40, 0x42, + 0xf4, 0x01, 0x0e, 0x22, 0x00, 0x4b, 0x5a, 0x7b, 0x97, 0x00, 0x40, 0x44, + 0x8f, 0x12, 0x13, 0x20, 0x00, 0x44, 0x79, 0x0d, 0x00, 0x20, 0x00, 0x45, + 0xd0, 0x4c, 0x02, 0x20, 0x40, 0x80, 0x9c, 0x01, 0x04, 0xc5, 0xf1, 0x61, + 0xb0, 0x01, 0xff, 0x4c, 0x97, 0x8f, 0x83, 0x23, 0x00, 0x03, 0xcd, 0x1d, + 0x01, 0xff, 0x48, 0x30, 0xc5, 0xcb, 0xf5, 0x01, 0xae, 0x2f, 0x44, 0x79, + 0xa6, 0xcc, 0xf5, 0x81, 0x24, 0x43, 0x9c, 0x12, 0x05, 0x22, 0xc0, 0x00, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x50, 0x76, 0x64, 0xb4, 0x29, 0x00, 0x47, + 0xe6, 0x7f, 0xb1, 0x29, 0x00, 0x51, 0xc8, 0x00, 0xb3, 0x29, 0x00, 0x52, + 0x75, 0x55, 0xb2, 0x29, 0x40, 0xf3, 0xcd, 0xf5, 0x41, 0x43, 0xbf, 0x1a, + 0xb9, 0xfa, 0x01, 0x43, 0x0a, 0x28, 0xc5, 0xf5, 0xc1, 0x00, 0x03, 0xee, + 0x0e, 0x01, 0xff, 0xe4, 0xc7, 0xf5, 0x01, 0x42, 0xdb, 0x09, 0xc6, 0xf5, + 0x41, 0x0a, 0xcb, 0xa8, 0x1b, 0x1a, 0x36, 0x21, 0x01, 0xff, 0x43, 0x86, + 0xf3, 0xfb, 0xf3, 0x01, 0xd3, 0xfc, 0xf3, 0x01, 0xd4, 0xfd, 0xf3, 0x01, + 0xd5, 0xfe, 0xf3, 0x01, 0xd6, 0xff, 0xf3, 0x41, 0x44, 0x2d, 0xef, 0xb2, + 0xf9, 0x01, 0x4a, 0xfd, 0xa8, 0xb1, 0xf9, 0x01, 0x48, 0x50, 0xca, 0xb0, + 0xf9, 0x01, 0x4a, 0x75, 0xb3, 0xb3, 0xf9, 0x41, 0x44, 0x8f, 0x12, 0x14, + 0x20, 0x00, 0x44, 0x79, 0x0d, 0x01, 0x20, 0x00, 0x45, 0xd0, 0x4c, 0x03, + 0x20, 0x40, 0x0d, 0x18, 0x81, 0x96, 0x02, 0xa5, 0xa0, 0x01, 0xe6, 0xdd, + 0xf9, 0x01, 0x07, 0xe5, 0xd7, 0x01, 0xff, 0x06, 0xed, 0x05, 0x06, 0x52, + 0x93, 0x52, 0xf6, 0x0f, 0x41, 0xa1, 0x7f, 0x44, 0x41, 0xef, 0xe1, 0x0f, + 0x01, 0x46, 0x23, 0x4a, 0xe3, 0x0f, 0x01, 0x45, 0xdd, 0xaa, 0xe2, 0x0f, + 0x01, 0x42, 0xb0, 0x01, 0xe4, 0x0f, 0x81, 0x60, 0x44, 0xcd, 0xf0, 0xea, + 0x0f, 0x01, 0x46, 0x94, 0xdd, 0xeb, 0x0f, 0x01, 0x43, 0xb4, 0x05, 0xec, + 0x0f, 0x01, 0x43, 0xdc, 0x22, 0xed, 0x0f, 0x01, 0x42, 0x6f, 0x02, 0xf0, + 0x0f, 0x01, 0x44, 0x4c, 0xc8, 0xf2, 0x0f, 0x01, 0x44, 0x76, 0x66, 0xf3, + 0x0f, 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, 0x8a, 0x8a, 0xe5, 0x0f, 0x01, + 0x44, 0xa1, 0x52, 0xe9, 0x0f, 0x01, 0x45, 0x9b, 0x52, 0xe6, 0x0f, 0x41, + 0x42, 0xb7, 0x2d, 0xf5, 0x0f, 0x01, 0x43, 0xda, 0x25, 0xe8, 0x0f, 0x41, + 0xa1, 0x06, 0x43, 0x7a, 0x16, 0xf4, 0x0f, 0x41, 0x43, 0xad, 0xea, 0xf1, + 0x0f, 0x01, 0x44, 0x49, 0xe4, 0xee, 0x0f, 0x41, 0x42, 0x53, 0x00, 0xe7, + 0x0f, 0x41, 0x44, 0x18, 0x3d, 0xe0, 0x0f, 0x01, 0x43, 0x7e, 0x1a, 0xef, + 0x0f, 0x41, 0x05, 0x65, 0xe5, 0x4f, 0x47, 0x54, 0x92, 0x08, 0x22, 0x80, + 0x0c, 0x45, 0x93, 0xc5, 0x18, 0xf4, 0x01, 0x45, 0x18, 0xec, 0xd7, 0xf6, + 0x41, 0x80, 0x01, 0xff, 0x08, 0x01, 0x76, 0x29, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x49, 0x3a, 0x1e, 0xf5, 0x22, 0x00, 0x56, 0x79, 0x35, 0xf2, 0x22, + 0x00, 0x47, 0xe6, 0x7f, 0xf6, 0x22, 0x00, 0x56, 0xaa, 0x0b, 0xf9, 0x22, + 0x00, 0x48, 0xe3, 0x59, 0xf8, 0x22, 0x00, 0x68, 0x30, 0x05, 0xf3, 0x22, + 0x40, 0x49, 0xa5, 0x01, 0xd9, 0x2a, 0x00, 0x47, 0x50, 0x02, 0xd2, 0x27, + 0x40, 0x80, 0x06, 0x4f, 0x14, 0x3c, 0xe7, 0x23, 0x40, 0x45, 0xce, 0x00, + 0x01, 0x23, 0x00, 0x4a, 0x0d, 0xad, 0xa1, 0xf4, 0x01, 0x44, 0x15, 0xf2, + 0x0c, 0xf5, 0x01, 0x45, 0x64, 0xeb, 0x26, 0xf5, 0x41, 0xe1, 0x00, 0x05, + 0x01, 0x42, 0xb7, 0x05, 0x01, 0x05, 0x01, 0xa3, 0xcf, 0x01, 0xa4, 0xc2, + 0x01, 0xe5, 0x08, 0x05, 0x81, 0xb8, 0x01, 0x42, 0x0c, 0x1a, 0x09, 0x05, + 0x01, 0xa7, 0x99, 0x01, 0x42, 0xb0, 0x01, 0x0c, 0x05, 0x01, 0xe9, 0x0d, + 0x05, 0x01, 0x42, 0x80, 0x20, 0x0e, 0x05, 0x01, 0xab, 0x7d, 0xac, 0x71, + 0x42, 0x2a, 0x02, 0x12, 0x05, 0x01, 0xae, 0x55, 0xef, 0x16, 0x05, 0x01, + 0x42, 0x6f, 0x02, 0x17, 0x05, 0x01, 0x42, 0x98, 0xa2, 0x18, 0x05, 0x01, + 0xb2, 0x39, 0xb3, 0x2d, 0xb4, 0x21, 0xf5, 0x1f, 0x05, 0x01, 0x42, 0x32, + 0x00, 0x20, 0x05, 0x01, 0x42, 0x6d, 0x43, 0x21, 0x05, 0x01, 0xf9, 0x22, + 0x05, 0x01, 0xba, 0x01, 0xff, 0xe5, 0x23, 0x05, 0x01, 0x42, 0xb0, 0x01, + 0x24, 0x05, 0x41, 0xe5, 0x1d, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x1e, 0x05, + 0x41, 0xe5, 0x1b, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x1c, 0x05, 0x41, 0xe5, + 0x19, 0x05, 0x01, 0x42, 0x88, 0x00, 0x1a, 0x05, 0x41, 0xe1, 0x14, 0x05, + 0x01, 0x42, 0x04, 0x00, 0x05, 0x05, 0x01, 0xe5, 0x13, 0x05, 0x01, 0x42, + 0x80, 0x20, 0x15, 0x05, 0x41, 0xe5, 0x10, 0x05, 0x01, 0x42, 0x68, 0x00, + 0x11, 0x05, 0x41, 0xe5, 0x0f, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x27, 0x05, + 0x41, 0xe5, 0x0a, 0x05, 0x01, 0xa8, 0x06, 0x42, 0x80, 0x20, 0x0b, 0x05, + 0x41, 0x44, 0x00, 0x21, 0x26, 0x05, 0x01, 0xe5, 0x25, 0x05, 0x41, 0xe9, + 0x07, 0x05, 0x41, 0xe5, 0x04, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x06, 0x05, + 0x41, 0xe5, 0x02, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x03, 0x05, 0x41, 0x80, + 0x06, 0x46, 0xca, 0x63, 0x6a, 0x26, 0x40, 0xb0, 0x1c, 0x05, 0x46, 0x66, + 0x0c, 0x4f, 0xd5, 0x1c, 0x33, 0x27, 0x00, 0x62, 0x22, 0x0d, 0x4a, 0x27, + 0x40, 0x46, 0x0a, 0xdd, 0x69, 0xcc, 0x01, 0x47, 0x3b, 0xd4, 0x6a, 0xcc, + 0x41, 0x5f, 0x10, 0x11, 0x41, 0x27, 0x00, 0x07, 0x34, 0x08, 0x01, 0xff, + 0x4a, 0xf4, 0x2b, 0x34, 0x27, 0x00, 0x4d, 0x28, 0x13, 0x35, 0x27, 0x00, + 0x56, 0xad, 0x36, 0x37, 0x27, 0x40, 0x44, 0x4b, 0x5a, 0xc6, 0xce, 0x01, + 0xe7, 0x5a, 0xf9, 0x01, 0x11, 0xe5, 0x5f, 0x01, 0xff, 0x80, 0x04, 0xcd, + 0x02, 0xd8, 0x40, 0xa1, 0xe6, 0x23, 0xa2, 0x9f, 0x23, 0x02, 0x0e, 0xf5, + 0xa1, 0x22, 0x02, 0x10, 0xf5, 0x8e, 0x1f, 0xa5, 0xb1, 0x1d, 0xa6, 0x88, + 0x1b, 0x02, 0x12, 0xf5, 0xeb, 0x18, 0xa8, 0xa9, 0x18, 0xa9, 0x98, 0x17, + 0x03, 0x61, 0xf4, 0xf3, 0x16, 0xac, 0xbc, 0x16, 0xad, 0x9f, 0x13, 0xae, + 0xe7, 0x0f, 0xaf, 0x93, 0x0d, 0x02, 0x71, 0xd8, 0xd3, 0x0c, 0x03, 0x85, + 0xf4, 0xb2, 0x0c, 0x02, 0xf7, 0xcd, 0x9a, 0x0b, 0x02, 0xf9, 0xe1, 0xaa, + 0x09, 0xb4, 0xdd, 0x07, 0x02, 0xe0, 0xec, 0x8c, 0x06, 0xb6, 0xaf, 0x03, + 0xb7, 0x96, 0x02, 0x03, 0xc7, 0xf4, 0xde, 0x01, 0x03, 0xd3, 0xf4, 0xb4, + 0x01, 0x02, 0x20, 0xf5, 0x01, 0xff, 0x90, 0x65, 0x91, 0x01, 0xff, 0xd0, + 0xf5, 0x33, 0x01, 0xd1, 0xf6, 0x33, 0x01, 0xd2, 0xf7, 0x33, 0x01, 0xd3, + 0xf8, 0x33, 0x01, 0xd4, 0xf9, 0x33, 0x01, 0xd5, 0xfa, 0x33, 0x81, 0x25, + 0xd6, 0x04, 0x34, 0xc1, 0x00, 0xe1, 0x05, 0x34, 0x01, 0xe2, 0x06, 0x34, + 0x01, 0xe3, 0x07, 0x34, 0x01, 0xe4, 0x08, 0x34, 0x01, 0xe5, 0x09, 0x34, + 0x01, 0xe6, 0x0a, 0x34, 0x01, 0xe7, 0x0b, 0x34, 0x01, 0xe8, 0x0c, 0x34, + 0x41, 0xe1, 0xfb, 0x33, 0x01, 0xe2, 0xfc, 0x33, 0x01, 0xe3, 0xfd, 0x33, + 0x01, 0xe4, 0xfe, 0x33, 0x01, 0xe5, 0xff, 0x33, 0x01, 0xe6, 0x00, 0x34, + 0x01, 0xe7, 0x01, 0x34, 0x01, 0xe8, 0x02, 0x34, 0x01, 0xe9, 0x03, 0x34, + 0x41, 0xd1, 0xe4, 0x33, 0x01, 0xd2, 0xe5, 0x33, 0x81, 0x2f, 0xd3, 0xea, + 0x33, 0x81, 0x22, 0xd4, 0xed, 0x33, 0x81, 0x19, 0xd5, 0xef, 0x33, 0x81, + 0x10, 0xd6, 0xf1, 0x33, 0x01, 0xd7, 0xf2, 0x33, 0x01, 0xd8, 0xf3, 0x33, + 0x01, 0xd9, 0xf4, 0x33, 0x41, 0xe1, 0xf0, 0x33, 0x41, 0xe1, 0xee, 0x33, + 0x41, 0xe1, 0xeb, 0x33, 0x01, 0xe2, 0xec, 0x33, 0x41, 0xe1, 0xe6, 0x33, + 0x01, 0xe2, 0xe7, 0x33, 0x01, 0xe3, 0xe8, 0x33, 0x01, 0xe4, 0xe9, 0x33, + 0x41, 0xd1, 0xdb, 0x33, 0x81, 0x1c, 0xd2, 0xdd, 0x33, 0x01, 0xd3, 0xde, + 0x33, 0x01, 0xd4, 0xdf, 0x33, 0x01, 0xd5, 0xe0, 0x33, 0x01, 0xd6, 0xe1, + 0x33, 0x01, 0xd7, 0xe2, 0x33, 0x01, 0xd8, 0xe3, 0x33, 0x41, 0xe1, 0xdc, + 0x33, 0x41, 0xd1, 0xcf, 0x33, 0x01, 0xd2, 0xd0, 0x33, 0x01, 0xd3, 0xd1, + 0x33, 0x01, 0xd4, 0xd2, 0x33, 0x81, 0x1a, 0xd5, 0xd5, 0x33, 0x01, 0xd6, + 0xd6, 0x33, 0x81, 0x0d, 0xd7, 0xd8, 0x33, 0x01, 0xd8, 0xd9, 0x33, 0xc1, + 0x00, 0xe1, 0xda, 0x33, 0x41, 0xe1, 0xd7, 0x33, 0x41, 0xe1, 0xd3, 0x33, + 0x01, 0xe2, 0xd4, 0x33, 0x41, 0x90, 0x06, 0x4d, 0xf0, 0x83, 0x46, 0x34, + 0x41, 0x90, 0x5e, 0x91, 0x20, 0x92, 0x01, 0xff, 0xd0, 0xc8, 0x33, 0x01, + 0xd1, 0xc9, 0x33, 0x01, 0xd2, 0xca, 0x33, 0x01, 0xd3, 0xcb, 0x33, 0x01, + 0xd4, 0xcc, 0x33, 0x81, 0x04, 0xd5, 0xce, 0x33, 0x41, 0xe1, 0xcd, 0x33, + 0x41, 0xd0, 0xba, 0x33, 0x81, 0x33, 0xd1, 0xbc, 0x33, 0x01, 0xd2, 0xbd, + 0x33, 0x01, 0xd3, 0xbe, 0x33, 0x01, 0xd4, 0xbf, 0x33, 0x81, 0x1e, 0xd5, + 0xc1, 0x33, 0x01, 0xd6, 0xc2, 0x33, 0x01, 0xd7, 0xc3, 0x33, 0x81, 0x0d, + 0xd8, 0xc5, 0x33, 0x81, 0x04, 0xd9, 0xc7, 0x33, 0x41, 0xe1, 0xc6, 0x33, + 0x41, 0xe1, 0xc4, 0x33, 0x41, 0xe1, 0xc0, 0x33, 0x41, 0xe1, 0xbb, 0x33, + 0x41, 0xd1, 0xaf, 0x33, 0x01, 0xd2, 0xb0, 0x33, 0x01, 0xd3, 0xb1, 0x33, + 0x81, 0x1d, 0xd4, 0xb3, 0x33, 0x01, 0xd5, 0xb4, 0x33, 0x01, 0xd6, 0xb5, + 0x33, 0x01, 0xd7, 0xb6, 0x33, 0x01, 0xd8, 0xb7, 0x33, 0x01, 0xd9, 0xb8, + 0x33, 0xc1, 0x00, 0xe1, 0xb9, 0x33, 0x41, 0xe1, 0xb2, 0x33, 0x41, 0x90, + 0x06, 0x4e, 0x91, 0x77, 0x30, 0x34, 0x41, 0x90, 0xf8, 0x01, 0x91, 0xb3, + 0x01, 0x92, 0x49, 0x93, 0x0b, 0x42, 0xf8, 0xf4, 0xad, 0x33, 0xc1, 0x00, + 0xe1, 0xae, 0x33, 0x41, 0xd0, 0x9f, 0x33, 0x81, 0x33, 0xd1, 0xa1, 0x33, + 0x81, 0x2a, 0xd2, 0xa3, 0x33, 0x01, 0xd3, 0xa4, 0x33, 0x81, 0x1d, 0xd4, + 0xa6, 0x33, 0x01, 0xd5, 0xa7, 0x33, 0x01, 0xd6, 0xa8, 0x33, 0x01, 0xd7, + 0xa9, 0x33, 0x81, 0x08, 0xd8, 0xab, 0x33, 0x01, 0xd9, 0xac, 0x33, 0x41, + 0xe1, 0xaa, 0x33, 0x41, 0xe1, 0xa5, 0x33, 0x41, 0xe1, 0xa2, 0x33, 0x41, + 0xe1, 0xa0, 0x33, 0x41, 0xd0, 0x86, 0x33, 0x81, 0x33, 0xd1, 0x93, 0x33, + 0x01, 0xd2, 0x94, 0x33, 0x01, 0xd3, 0x95, 0x33, 0x81, 0x22, 0xd4, 0x97, + 0x33, 0x01, 0xd5, 0x98, 0x33, 0x01, 0xd6, 0x99, 0x33, 0x01, 0xd7, 0x9a, + 0x33, 0x01, 0xd8, 0x9b, 0x33, 0x81, 0x09, 0xd9, 0x9d, 0x33, 0xc1, 0x00, + 0xe1, 0x9e, 0x33, 0x41, 0xe1, 0x9c, 0x33, 0x41, 0xe1, 0x96, 0x33, 0x41, + 0xe1, 0x87, 0x33, 0x01, 0xe2, 0x88, 0x33, 0x01, 0xe3, 0x89, 0x33, 0x01, + 0xe4, 0x8a, 0x33, 0x01, 0xe5, 0x8b, 0x33, 0x01, 0xe6, 0x8c, 0x33, 0x01, + 0xe7, 0x8d, 0x33, 0x01, 0xe8, 0x8e, 0x33, 0x01, 0xe9, 0x8f, 0x33, 0x01, + 0xea, 0x90, 0x33, 0x01, 0xeb, 0x91, 0x33, 0x01, 0xec, 0x92, 0x33, 0x41, + 0xd0, 0x77, 0x33, 0x01, 0xd1, 0x78, 0x33, 0x81, 0x29, 0xd2, 0x7c, 0x33, + 0x81, 0x1c, 0xd3, 0x7f, 0x33, 0x01, 0xd4, 0x80, 0x33, 0x01, 0xd5, 0x81, + 0x33, 0x01, 0xd6, 0x82, 0x33, 0x01, 0xd7, 0x83, 0x33, 0x01, 0xd8, 0x84, + 0x33, 0x01, 0xd9, 0x85, 0x33, 0x41, 0xe1, 0x7d, 0x33, 0x01, 0xe2, 0x7e, + 0x33, 0x41, 0xe1, 0x79, 0x33, 0x01, 0xe2, 0x7a, 0x33, 0x01, 0xe3, 0x7b, + 0x33, 0x01, 0xe4, 0x2f, 0x34, 0x41, 0xd1, 0x62, 0x33, 0x81, 0x2e, 0xd2, + 0x6c, 0x33, 0x81, 0x25, 0xd3, 0x6e, 0x33, 0x01, 0xd4, 0x6f, 0x33, 0x01, + 0xd5, 0x70, 0x33, 0x01, 0xd6, 0x71, 0x33, 0x01, 0xd7, 0x72, 0x33, 0x81, + 0x08, 0xd8, 0x75, 0x33, 0x01, 0xd9, 0x76, 0x33, 0x41, 0xe1, 0x73, 0x33, + 0x01, 0xe2, 0x74, 0x33, 0x41, 0xe1, 0x6d, 0x33, 0x41, 0xe1, 0x63, 0x33, + 0x01, 0xe2, 0x64, 0x33, 0x01, 0xe3, 0x65, 0x33, 0x01, 0xe4, 0x66, 0x33, + 0x01, 0xe5, 0x67, 0x33, 0x01, 0xe6, 0x68, 0x33, 0x01, 0xe7, 0x69, 0x33, + 0x01, 0xe8, 0x6a, 0x33, 0x01, 0xe9, 0x6b, 0x33, 0x41, 0x90, 0x9c, 0x01, + 0x91, 0x72, 0x92, 0x3e, 0x93, 0x0f, 0x94, 0x01, 0xff, 0xd0, 0x5f, 0x33, + 0x01, 0xd1, 0x60, 0x33, 0x01, 0xd2, 0x61, 0x33, 0x41, 0xd0, 0x54, 0x33, + 0x01, 0xd1, 0x55, 0x33, 0x01, 0xd2, 0x56, 0x33, 0x81, 0x1c, 0xd3, 0x58, + 0x33, 0x01, 0xd4, 0x59, 0x33, 0x01, 0xd5, 0x5a, 0x33, 0x01, 0xd6, 0x5b, + 0x33, 0x01, 0xd7, 0x5c, 0x33, 0x01, 0xd8, 0x5d, 0x33, 0x01, 0xd9, 0x5e, + 0x33, 0x41, 0xe1, 0x57, 0x33, 0x41, 0xd0, 0x48, 0x33, 0x01, 0xd1, 0x49, + 0x33, 0x01, 0xd2, 0x4a, 0x33, 0x01, 0xd3, 0x4b, 0x33, 0x81, 0x1d, 0xd4, + 0x4d, 0x33, 0x01, 0xd5, 0x4e, 0x33, 0x01, 0xd6, 0x4f, 0x33, 0x01, 0xd7, + 0x50, 0x33, 0x01, 0xd8, 0x51, 0x33, 0x01, 0xd9, 0x52, 0x33, 0xc1, 0x00, + 0xe1, 0x53, 0x33, 0x41, 0xe1, 0x4c, 0x33, 0x41, 0xd0, 0x3e, 0x33, 0x01, + 0xd1, 0x3f, 0x33, 0x01, 0xd2, 0x40, 0x33, 0x01, 0xd3, 0x41, 0x33, 0x01, + 0xd4, 0x42, 0x33, 0x01, 0xd5, 0x43, 0x33, 0x01, 0xd6, 0x44, 0x33, 0x01, + 0xd7, 0x45, 0x33, 0x01, 0xd8, 0x46, 0x33, 0x01, 0xd9, 0x47, 0x33, 0x41, + 0xd1, 0x33, 0x33, 0x01, 0xd2, 0x34, 0x33, 0x01, 0xd3, 0x35, 0x33, 0x01, + 0xd4, 0x36, 0x33, 0x01, 0xd5, 0x37, 0x33, 0x01, 0xd6, 0x38, 0x33, 0x81, + 0x0c, 0xd7, 0x3b, 0x33, 0x01, 0xd8, 0x3c, 0x33, 0x01, 0xd9, 0x3d, 0x33, + 0x41, 0xe1, 0x39, 0x33, 0x01, 0xe2, 0x3a, 0x33, 0x41, 0x90, 0x06, 0x4d, + 0x48, 0x80, 0x45, 0x34, 0x41, 0x90, 0x87, 0x01, 0x91, 0x53, 0x92, 0x29, + 0x93, 0x01, 0xff, 0xd0, 0x2a, 0x33, 0x01, 0xd1, 0x2b, 0x33, 0x01, 0xd2, + 0x2c, 0x33, 0x81, 0x15, 0xd3, 0x2e, 0x33, 0x81, 0x0c, 0xd4, 0x30, 0x33, + 0x01, 0xd5, 0x31, 0x33, 0x01, 0xd6, 0x32, 0x33, 0x41, 0xe1, 0x2f, 0x33, + 0x41, 0xe1, 0x2d, 0x33, 0x41, 0xd0, 0x20, 0x33, 0x01, 0xd1, 0x21, 0x33, + 0x01, 0xd2, 0x22, 0x33, 0x01, 0xd3, 0x23, 0x33, 0x01, 0xd4, 0x24, 0x33, + 0x01, 0xd5, 0x25, 0x33, 0x01, 0xd6, 0x26, 0x33, 0x01, 0xd7, 0x27, 0x33, + 0x01, 0xd8, 0x28, 0x33, 0x01, 0xd9, 0x29, 0x33, 0x41, 0xd0, 0x14, 0x33, + 0x01, 0xd1, 0x15, 0x33, 0x81, 0x25, 0xd2, 0x17, 0x33, 0x01, 0xd3, 0x18, + 0x33, 0x01, 0xd4, 0x19, 0x33, 0x01, 0xd5, 0x1a, 0x33, 0x01, 0xd6, 0x1b, + 0x33, 0x81, 0x0c, 0xd7, 0x1d, 0x33, 0x01, 0xd8, 0x1e, 0x33, 0x01, 0xd9, + 0x1f, 0x33, 0x41, 0xe1, 0x1c, 0x33, 0x41, 0xe1, 0x16, 0x33, 0x41, 0xd1, + 0x07, 0x33, 0x01, 0xd2, 0x08, 0x33, 0x01, 0xd3, 0x09, 0x33, 0x81, 0x27, + 0xd4, 0x0b, 0x33, 0x01, 0xd5, 0x0c, 0x33, 0x01, 0xd6, 0x0d, 0x33, 0x01, + 0xd7, 0x0e, 0x33, 0x81, 0x12, 0xd8, 0x10, 0x33, 0x81, 0x09, 0xd9, 0x12, + 0x33, 0xc1, 0x00, 0xe1, 0x13, 0x33, 0x41, 0xe1, 0x11, 0x33, 0x41, 0xe1, + 0x0f, 0x33, 0x41, 0xe1, 0x0a, 0x33, 0x41, 0x90, 0xba, 0x01, 0x91, 0x81, + 0x01, 0x92, 0x4e, 0x93, 0x1f, 0x94, 0x01, 0xff, 0xd0, 0x00, 0x33, 0x01, + 0xd1, 0x01, 0x33, 0x01, 0xd2, 0x02, 0x33, 0x01, 0xd3, 0x03, 0x33, 0x01, + 0xd4, 0x04, 0x33, 0x01, 0xd5, 0x05, 0x33, 0x01, 0xd6, 0x06, 0x33, 0x41, + 0xd0, 0xf5, 0x32, 0x01, 0xd1, 0xf6, 0x32, 0x01, 0xd2, 0xf7, 0x32, 0x01, + 0xd3, 0xf8, 0x32, 0x01, 0xd4, 0xf9, 0x32, 0x01, 0xd5, 0xfa, 0x32, 0x81, + 0x10, 0xd6, 0xfc, 0x32, 0x01, 0xd7, 0xfd, 0x32, 0x01, 0xd8, 0xfe, 0x32, + 0x01, 0xd9, 0xff, 0x32, 0x41, 0xe1, 0xfb, 0x32, 0x41, 0xd0, 0xe9, 0x32, + 0x01, 0xd1, 0xea, 0x32, 0x01, 0xd2, 0xeb, 0x32, 0x01, 0xd3, 0xec, 0x32, + 0x01, 0xd4, 0xed, 0x32, 0x01, 0xd5, 0xee, 0x32, 0x01, 0xd6, 0xef, 0x32, + 0x81, 0x0c, 0xd7, 0xf2, 0x32, 0x01, 0xd8, 0xf3, 0x32, 0x01, 0xd9, 0xf4, + 0x32, 0x41, 0xe1, 0xf0, 0x32, 0x01, 0xe2, 0xf1, 0x32, 0x41, 0xd0, 0xdc, + 0x32, 0x01, 0xd1, 0xdd, 0x32, 0x01, 0xd2, 0xde, 0x32, 0x01, 0xd3, 0xdf, + 0x32, 0x01, 0xd4, 0xe0, 0x32, 0x81, 0x19, 0xd5, 0xe3, 0x32, 0x01, 0xd6, + 0xe4, 0x32, 0x01, 0xd7, 0xe5, 0x32, 0x81, 0x08, 0xd8, 0xe7, 0x32, 0x01, + 0xd9, 0xe8, 0x32, 0x41, 0xe1, 0xe6, 0x32, 0x41, 0xe1, 0xe1, 0x32, 0x01, + 0xe2, 0xe2, 0x32, 0x41, 0xd1, 0xd1, 0x32, 0x01, 0xd2, 0xd2, 0x32, 0x81, + 0x21, 0xd3, 0xd4, 0x32, 0x01, 0xd4, 0xd5, 0x32, 0x01, 0xd5, 0xd6, 0x32, + 0x01, 0xd6, 0xd7, 0x32, 0x81, 0x0c, 0xd7, 0xd9, 0x32, 0x01, 0xd8, 0xda, + 0x32, 0x01, 0xd9, 0xdb, 0x32, 0x41, 0xe1, 0xd8, 0x32, 0x41, 0xe1, 0xd3, + 0x32, 0x41, 0x90, 0x5f, 0x91, 0x2b, 0x92, 0x01, 0xff, 0xd0, 0xc7, 0x32, + 0x01, 0xd1, 0xc8, 0x32, 0x01, 0xd2, 0xc9, 0x32, 0x01, 0xd3, 0xca, 0x32, + 0x01, 0xd4, 0xcb, 0x32, 0x01, 0xd5, 0xcc, 0x32, 0x01, 0xd6, 0xcd, 0x32, + 0x01, 0xd7, 0xce, 0x32, 0x01, 0xd8, 0xcf, 0x32, 0x01, 0xd9, 0xd0, 0x32, + 0x41, 0xd0, 0xbb, 0x32, 0x81, 0x29, 0xd1, 0xbd, 0x32, 0x01, 0xd2, 0xbe, + 0x32, 0x01, 0xd3, 0xbf, 0x32, 0x01, 0xd4, 0xc0, 0x32, 0x01, 0xd5, 0xc1, + 0x32, 0x01, 0xd6, 0xc2, 0x32, 0x81, 0x0c, 0xd7, 0xc4, 0x32, 0x01, 0xd8, + 0xc5, 0x32, 0x01, 0xd9, 0xc6, 0x32, 0x41, 0xe1, 0xc3, 0x32, 0x41, 0xe1, + 0xbc, 0x32, 0x41, 0xd1, 0xaf, 0x32, 0x01, 0xd2, 0xb0, 0x32, 0x81, 0x25, + 0xd3, 0xb2, 0x32, 0x81, 0x18, 0xd4, 0xb5, 0x32, 0x01, 0xd5, 0xb6, 0x32, + 0x01, 0xd6, 0xb7, 0x32, 0x01, 0xd7, 0xb8, 0x32, 0x01, 0xd8, 0xb9, 0x32, + 0x01, 0xd9, 0xba, 0x32, 0x41, 0xe1, 0xb3, 0x32, 0x01, 0xe2, 0xb4, 0x32, + 0x41, 0xe1, 0xb1, 0x32, 0x41, 0xd1, 0xa8, 0x32, 0x01, 0xd2, 0xa9, 0x32, + 0x01, 0xd3, 0xaa, 0x32, 0x01, 0xd4, 0xab, 0x32, 0x01, 0xd5, 0xac, 0x32, + 0x01, 0xd6, 0xad, 0x32, 0x01, 0xd7, 0xae, 0x32, 0x41, 0x90, 0x0b, 0x91, + 0x01, 0xff, 0xd0, 0xa6, 0x32, 0x01, 0xd1, 0xa7, 0x32, 0x41, 0xd1, 0x9b, + 0x32, 0x81, 0x25, 0xd2, 0x9d, 0x32, 0x01, 0xd3, 0x9e, 0x32, 0x81, 0x18, + 0xd4, 0xa0, 0x32, 0x01, 0xd5, 0xa1, 0x32, 0x01, 0xd6, 0xa2, 0x32, 0x01, + 0xd7, 0xa3, 0x32, 0x01, 0xd8, 0xa4, 0x32, 0x01, 0xd9, 0xa5, 0x32, 0x41, + 0xe1, 0x9f, 0x32, 0x41, 0xe1, 0x9c, 0x32, 0x41, 0x90, 0x06, 0x4d, 0x15, + 0x8a, 0x36, 0x34, 0x41, 0x90, 0xff, 0x01, 0x91, 0xc2, 0x01, 0x92, 0x83, + 0x01, 0x93, 0x3e, 0x94, 0x14, 0x95, 0x01, 0xff, 0xd0, 0x97, 0x32, 0x81, + 0x04, 0xd1, 0x9a, 0x32, 0x41, 0xe1, 0x98, 0x32, 0x01, 0xe2, 0x99, 0x32, + 0x41, 0xd0, 0x8d, 0x32, 0x01, 0xd1, 0x8e, 0x32, 0x01, 0xd2, 0x8f, 0x32, + 0x01, 0xd3, 0x90, 0x32, 0x01, 0xd4, 0x91, 0x32, 0x01, 0xd5, 0x92, 0x32, + 0x01, 0xd6, 0x93, 0x32, 0x01, 0xd7, 0x94, 0x32, 0x01, 0xd8, 0x95, 0x32, + 0x01, 0xd9, 0x96, 0x32, 0x41, 0xd0, 0x7d, 0x32, 0x81, 0x3a, 0xd1, 0x7f, + 0x32, 0x01, 0xd2, 0x80, 0x32, 0x01, 0xd3, 0x81, 0x32, 0x81, 0x29, 0xd4, + 0x83, 0x32, 0x01, 0xd5, 0x84, 0x32, 0x01, 0xd6, 0x85, 0x32, 0x81, 0x0c, + 0xd7, 0x8a, 0x32, 0x01, 0xd8, 0x8b, 0x32, 0x01, 0xd9, 0x8c, 0x32, 0x41, + 0xe1, 0x86, 0x32, 0x01, 0xe2, 0x87, 0x32, 0x01, 0xe3, 0x88, 0x32, 0x01, + 0xe4, 0x89, 0x32, 0x41, 0xe1, 0x82, 0x32, 0x41, 0xe1, 0x7e, 0x32, 0x41, + 0xd0, 0x6f, 0x32, 0x81, 0x33, 0xd1, 0x71, 0x32, 0x01, 0xd2, 0x72, 0x32, + 0x01, 0xd3, 0x73, 0x32, 0x01, 0xd4, 0x74, 0x32, 0x81, 0x1e, 0xd5, 0x76, + 0x32, 0x81, 0x15, 0xd6, 0x78, 0x32, 0x01, 0xd7, 0x79, 0x32, 0x01, 0xd8, + 0x7a, 0x32, 0x01, 0xd9, 0x7b, 0x32, 0xc1, 0x00, 0xe1, 0x7c, 0x32, 0x41, + 0xe1, 0x77, 0x32, 0x41, 0xe1, 0x75, 0x32, 0x41, 0xe1, 0x70, 0x32, 0x41, + 0xd0, 0x61, 0x32, 0x81, 0x29, 0xd1, 0x65, 0x32, 0x01, 0xd2, 0x66, 0x32, + 0x01, 0xd3, 0x67, 0x32, 0x01, 0xd4, 0x68, 0x32, 0x01, 0xd5, 0x69, 0x32, + 0x01, 0xd6, 0x6a, 0x32, 0x01, 0xd7, 0x6b, 0x32, 0x01, 0xd8, 0x6c, 0x32, + 0x01, 0xd9, 0x6d, 0x32, 0xc1, 0x00, 0xe1, 0x6e, 0x32, 0x41, 0xe1, 0x62, + 0x32, 0x01, 0xe2, 0x63, 0x32, 0x01, 0xe3, 0x64, 0x32, 0x41, 0xd1, 0x50, + 0x32, 0x81, 0x3e, 0xd2, 0x52, 0x32, 0x01, 0xd3, 0x53, 0x32, 0x01, 0xd4, + 0x54, 0x32, 0x01, 0xd5, 0x55, 0x32, 0x81, 0x29, 0xd6, 0x57, 0x32, 0x81, + 0x0c, 0xd7, 0x5e, 0x32, 0x01, 0xd8, 0x5f, 0x32, 0x01, 0xd9, 0x60, 0x32, + 0x41, 0xe1, 0x58, 0x32, 0x01, 0xe2, 0x59, 0x32, 0x01, 0xe3, 0x5a, 0x32, + 0x01, 0xe4, 0x5b, 0x32, 0x01, 0xe5, 0x5c, 0x32, 0x01, 0xe6, 0x5d, 0x32, + 0x41, 0xe1, 0x56, 0x32, 0x41, 0xe1, 0x51, 0x32, 0x41, 0x90, 0xdc, 0x01, + 0x02, 0x7b, 0x98, 0x78, 0x02, 0xe0, 0xec, 0x01, 0xff, 0x90, 0x4d, 0x91, + 0x14, 0x92, 0x01, 0xff, 0xd0, 0x4c, 0x32, 0x01, 0xd1, 0x4d, 0x32, 0x01, + 0xd2, 0x4e, 0x32, 0xc1, 0x00, 0xe1, 0x4f, 0x32, 0x41, 0xd0, 0x3f, 0x32, + 0x81, 0x2e, 0xd1, 0x41, 0x32, 0x81, 0x25, 0xd2, 0x43, 0x32, 0x01, 0xd3, + 0x44, 0x32, 0x01, 0xd4, 0x45, 0x32, 0x01, 0xd5, 0x46, 0x32, 0x01, 0xd6, + 0x47, 0x32, 0x01, 0xd7, 0x48, 0x32, 0x01, 0xd8, 0x49, 0x32, 0x81, 0x04, + 0xd9, 0x4b, 0x32, 0x41, 0xe1, 0x4a, 0x32, 0x41, 0xe1, 0x42, 0x32, 0x41, + 0xe1, 0x40, 0x32, 0x41, 0xd1, 0x36, 0x32, 0x01, 0xd2, 0x37, 0x32, 0x01, + 0xd3, 0x38, 0x32, 0x01, 0xd4, 0x39, 0x32, 0x01, 0xd5, 0x3a, 0x32, 0x01, + 0xd6, 0x3b, 0x32, 0x01, 0xd7, 0x3c, 0x32, 0x01, 0xd8, 0x3d, 0x32, 0x01, + 0xd9, 0x3e, 0x32, 0x41, 0x90, 0x35, 0x91, 0x06, 0x42, 0xc0, 0xe7, 0x35, + 0x32, 0x41, 0xd0, 0x2a, 0x32, 0x01, 0xd1, 0x2b, 0x32, 0x01, 0xd2, 0x2c, + 0x32, 0x01, 0xd3, 0x2d, 0x32, 0x01, 0xd4, 0x2e, 0x32, 0x01, 0xd5, 0x2f, + 0x32, 0x01, 0xd6, 0x30, 0x32, 0x01, 0xd7, 0x31, 0x32, 0x81, 0x08, 0xd8, + 0x33, 0x32, 0x01, 0xd9, 0x34, 0x32, 0x41, 0xe1, 0x32, 0x32, 0x41, 0xd1, + 0x20, 0x32, 0x01, 0xd2, 0x21, 0x32, 0x01, 0xd3, 0x22, 0x32, 0x01, 0xd4, + 0x23, 0x32, 0x01, 0xd5, 0x24, 0x32, 0x81, 0x10, 0xd6, 0x26, 0x32, 0x01, + 0xd7, 0x27, 0x32, 0x01, 0xd8, 0x28, 0x32, 0x01, 0xd9, 0x29, 0x32, 0x41, + 0xe1, 0x25, 0x32, 0x41, 0x90, 0xaf, 0x01, 0x91, 0x7c, 0x92, 0x4d, 0x93, + 0x0f, 0x94, 0x01, 0xff, 0xd0, 0x1d, 0x32, 0x01, 0xd1, 0x1e, 0x32, 0x01, + 0xd2, 0x1f, 0x32, 0x41, 0xd0, 0x0f, 0x32, 0x01, 0xd1, 0x10, 0x32, 0x01, + 0xd2, 0x11, 0x32, 0x01, 0xd3, 0x12, 0x32, 0x81, 0x27, 0xd4, 0x14, 0x32, + 0x81, 0x1e, 0xd5, 0x16, 0x32, 0x81, 0x15, 0xd6, 0x18, 0x32, 0x01, 0xd7, + 0x19, 0x32, 0x81, 0x08, 0xd8, 0x1b, 0x32, 0x01, 0xd9, 0x1c, 0x32, 0x41, + 0xe1, 0x1a, 0x32, 0x41, 0xe1, 0x17, 0x32, 0x41, 0xe1, 0x15, 0x32, 0x41, + 0xe1, 0x13, 0x32, 0x41, 0xd0, 0x04, 0x32, 0x01, 0xd1, 0x05, 0x32, 0x01, + 0xd2, 0x06, 0x32, 0x01, 0xd3, 0x07, 0x32, 0x01, 0xd4, 0x08, 0x32, 0x01, + 0xd5, 0x09, 0x32, 0x81, 0x10, 0xd6, 0x0b, 0x32, 0x01, 0xd7, 0x0c, 0x32, + 0x01, 0xd8, 0x0d, 0x32, 0x01, 0xd9, 0x0e, 0x32, 0x41, 0xe1, 0x0a, 0x32, + 0x41, 0xd0, 0xf8, 0x31, 0x01, 0xd1, 0xf9, 0x31, 0x01, 0xd2, 0xfa, 0x31, + 0x01, 0xd3, 0xfb, 0x31, 0x01, 0xd4, 0xfc, 0x31, 0x01, 0xd5, 0xfd, 0x31, + 0x01, 0xd6, 0xfe, 0x31, 0x01, 0xd7, 0xff, 0x31, 0x01, 0xd8, 0x00, 0x32, + 0x81, 0x04, 0xd9, 0x03, 0x32, 0x41, 0xe1, 0x01, 0x32, 0x01, 0xe2, 0x02, + 0x32, 0x41, 0xd1, 0xef, 0x31, 0x01, 0xd2, 0xf0, 0x31, 0x01, 0xd3, 0xf1, + 0x31, 0x01, 0xd4, 0xf2, 0x31, 0x01, 0xd5, 0xf3, 0x31, 0x01, 0xd6, 0xf4, + 0x31, 0x01, 0xd7, 0xf5, 0x31, 0x01, 0xd8, 0xf6, 0x31, 0x01, 0xd9, 0xf7, + 0x31, 0x41, 0x90, 0x76, 0x52, 0xdb, 0x52, 0x40, 0x34, 0x01, 0x4f, 0xef, + 0x70, 0x55, 0x34, 0xc1, 0x00, 0x04, 0x3c, 0x05, 0x01, 0xff, 0x46, 0xb5, + 0x0a, 0x50, 0x34, 0x81, 0x41, 0x43, 0x40, 0x05, 0x52, 0x34, 0x01, 0x45, + 0x0f, 0xeb, 0x49, 0x34, 0x81, 0x23, 0x43, 0x1e, 0x00, 0x4b, 0x34, 0xc1, + 0x00, 0x80, 0x01, 0xff, 0x47, 0xca, 0xce, 0x53, 0x34, 0x01, 0x43, 0x40, + 0x05, 0x4a, 0x34, 0x01, 0x45, 0x0f, 0xeb, 0x47, 0x34, 0xc1, 0x00, 0x4f, + 0x15, 0x69, 0x4f, 0x34, 0x41, 0x05, 0x19, 0x00, 0x01, 0xff, 0x46, 0xb5, + 0x0a, 0x51, 0x34, 0x01, 0x43, 0x1e, 0x00, 0x4d, 0x34, 0x41, 0x80, 0x01, + 0xff, 0x47, 0xca, 0xce, 0x54, 0x34, 0x01, 0x43, 0x40, 0x05, 0x4e, 0x34, + 0x01, 0x45, 0x0f, 0xeb, 0x48, 0x34, 0xc1, 0x00, 0x4c, 0x0b, 0x8b, 0x4c, + 0x34, 0x41, 0x90, 0xed, 0x01, 0x91, 0x8d, 0x01, 0x92, 0x54, 0x93, 0x1c, + 0x94, 0x01, 0xff, 0xd0, 0xe9, 0x31, 0x81, 0x10, 0xd1, 0xeb, 0x31, 0x01, + 0xd2, 0xec, 0x31, 0x01, 0xd3, 0xed, 0x31, 0x01, 0xd4, 0xee, 0x31, 0x41, + 0xe1, 0xea, 0x31, 0x41, 0xd0, 0xdc, 0x31, 0x01, 0xd1, 0xdd, 0x31, 0x81, + 0x29, 0xd2, 0xdf, 0x31, 0x01, 0xd3, 0xe0, 0x31, 0x81, 0x18, 0xd4, 0xe3, + 0x31, 0x01, 0xd5, 0xe4, 0x31, 0x01, 0xd6, 0xe5, 0x31, 0x01, 0xd7, 0xe6, + 0x31, 0x01, 0xd8, 0xe7, 0x31, 0x01, 0xd9, 0xe8, 0x31, 0x41, 0xe1, 0xe1, + 0x31, 0x01, 0xe2, 0xe2, 0x31, 0x41, 0xe1, 0xde, 0x31, 0x41, 0xd0, 0xcf, + 0x31, 0x01, 0xd1, 0xd0, 0x31, 0x01, 0xd2, 0xd1, 0x31, 0x81, 0x26, 0xd3, + 0xd3, 0x31, 0x01, 0xd4, 0xd4, 0x31, 0x81, 0x19, 0xd5, 0xd6, 0x31, 0x01, + 0xd6, 0xd7, 0x31, 0x01, 0xd7, 0xd8, 0x31, 0x01, 0xd8, 0xd9, 0x31, 0x81, + 0x04, 0xd9, 0xdb, 0x31, 0x41, 0xe1, 0xda, 0x31, 0x41, 0xe1, 0xd5, 0x31, + 0x41, 0xe1, 0xd2, 0x31, 0x41, 0xd0, 0xb9, 0x31, 0x81, 0x54, 0xd1, 0xbb, + 0x31, 0x01, 0xd2, 0xbc, 0x31, 0x81, 0x2b, 0xd3, 0xc5, 0x31, 0x01, 0xd4, + 0xc6, 0x31, 0x01, 0xd5, 0xc7, 0x31, 0x81, 0x1a, 0xd6, 0xc9, 0x31, 0x81, + 0x11, 0xd7, 0xcb, 0x31, 0x81, 0x08, 0xd8, 0xcd, 0x31, 0x01, 0xd9, 0xce, + 0x31, 0x41, 0xe1, 0xcc, 0x31, 0x41, 0xe1, 0xca, 0x31, 0x41, 0xe1, 0xc8, + 0x31, 0x41, 0xe1, 0xbd, 0x31, 0x01, 0xe2, 0xbe, 0x31, 0x01, 0xe3, 0xbf, + 0x31, 0x01, 0xe4, 0xc0, 0x31, 0x01, 0xe5, 0xc1, 0x31, 0x01, 0xe6, 0xc2, + 0x31, 0x01, 0xe7, 0xc3, 0x31, 0x01, 0xe8, 0xc4, 0x31, 0x41, 0xe1, 0xba, + 0x31, 0x41, 0xd1, 0xad, 0x31, 0x81, 0x25, 0xd2, 0xb0, 0x31, 0x01, 0xd3, + 0xb1, 0x31, 0x81, 0x18, 0xd4, 0xb3, 0x31, 0x01, 0xd5, 0xb4, 0x31, 0x01, + 0xd6, 0xb5, 0x31, 0x01, 0xd7, 0xb6, 0x31, 0x01, 0xd8, 0xb7, 0x31, 0x01, + 0xd9, 0xb8, 0x31, 0x41, 0xe1, 0xb2, 0x31, 0x41, 0xe1, 0xae, 0x31, 0x01, + 0xe2, 0xaf, 0x31, 0x41, 0x02, 0x8a, 0xd8, 0x06, 0x48, 0x4d, 0x80, 0x43, + 0x34, 0x41, 0xd1, 0xa3, 0x31, 0x01, 0xd2, 0xa4, 0x31, 0x81, 0x1d, 0xd3, + 0xa6, 0x31, 0x01, 0xd4, 0xa7, 0x31, 0x01, 0xd5, 0xa8, 0x31, 0x01, 0xd6, + 0xa9, 0x31, 0x81, 0x08, 0xd7, 0xab, 0x31, 0x01, 0xd8, 0xac, 0x31, 0x41, + 0xe1, 0xaa, 0x31, 0x41, 0xe1, 0xa5, 0x31, 0x41, 0xd1, 0x9b, 0x31, 0x01, + 0xd2, 0x9c, 0x31, 0x01, 0xd3, 0x9d, 0x31, 0x01, 0xd4, 0x9e, 0x31, 0x01, + 0xd5, 0x9f, 0x31, 0x01, 0xd6, 0xa0, 0x31, 0x01, 0xd7, 0xa1, 0x31, 0x01, + 0xd8, 0xa2, 0x31, 0x41, 0x90, 0x37, 0x09, 0x99, 0xbc, 0x01, 0xff, 0x46, + 0xb5, 0x0a, 0x3b, 0x34, 0x81, 0x1c, 0x46, 0x7d, 0x02, 0x39, 0x34, 0x01, + 0x43, 0x1e, 0x00, 0x3a, 0x34, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x43, 0x40, + 0x05, 0x34, 0x34, 0x01, 0x45, 0x0f, 0xeb, 0x32, 0x34, 0x41, 0x80, 0x01, + 0xff, 0x43, 0x40, 0x05, 0x35, 0x34, 0x01, 0x45, 0x0f, 0xeb, 0x33, 0x34, + 0x41, 0x90, 0x25, 0x91, 0x01, 0xff, 0xd0, 0x93, 0x31, 0x81, 0x19, 0xd1, + 0x95, 0x31, 0x81, 0x10, 0xd2, 0x97, 0x31, 0x01, 0xd3, 0x98, 0x31, 0x01, + 0xd4, 0x99, 0x31, 0x01, 0xd5, 0x9a, 0x31, 0x41, 0xe1, 0x96, 0x31, 0x41, + 0xe1, 0x94, 0x31, 0x41, 0xd1, 0x88, 0x31, 0x01, 0xd2, 0x89, 0x31, 0x01, + 0xd3, 0x8a, 0x31, 0x01, 0xd4, 0x8b, 0x31, 0x01, 0xd5, 0x8c, 0x31, 0x81, + 0x15, 0xd6, 0x8e, 0x31, 0x01, 0xd7, 0x8f, 0x31, 0x01, 0xd8, 0x90, 0x31, + 0x01, 0xd9, 0x91, 0x31, 0xc1, 0x00, 0xe1, 0x92, 0x31, 0x41, 0xe1, 0x8d, + 0x31, 0x41, 0x02, 0x8a, 0xd8, 0x16, 0x04, 0x23, 0x00, 0x06, 0x50, 0xa6, + 0x65, 0x31, 0x34, 0x41, 0x45, 0x45, 0xc0, 0x42, 0x34, 0x01, 0x49, 0x4c, + 0x80, 0x44, 0x34, 0x41, 0xd1, 0x7f, 0x31, 0x01, 0xd2, 0x80, 0x31, 0x01, + 0xd3, 0x81, 0x31, 0x01, 0xd4, 0x82, 0x31, 0x01, 0xd5, 0x83, 0x31, 0x01, + 0xd6, 0x84, 0x31, 0x81, 0x08, 0xd7, 0x86, 0x31, 0x01, 0xd8, 0x87, 0x31, + 0x41, 0xe1, 0x85, 0x31, 0x41, 0x90, 0xe3, 0x01, 0x91, 0xb3, 0x01, 0x92, + 0x7f, 0x93, 0x4b, 0x94, 0x17, 0x95, 0x01, 0xff, 0xd0, 0x7a, 0x31, 0x01, + 0xd1, 0x7b, 0x31, 0x01, 0xd2, 0x7c, 0x31, 0x01, 0xd3, 0x7d, 0x31, 0x01, + 0xd4, 0x7e, 0x31, 0x41, 0xd0, 0x6e, 0x31, 0x01, 0xd1, 0x6f, 0x31, 0x01, + 0xd2, 0x70, 0x31, 0x01, 0xd3, 0x71, 0x31, 0x81, 0x1d, 0xd4, 0x73, 0x31, + 0x01, 0xd5, 0x74, 0x31, 0x81, 0x10, 0xd6, 0x76, 0x31, 0x01, 0xd7, 0x77, + 0x31, 0x01, 0xd8, 0x78, 0x31, 0x01, 0xd9, 0x79, 0x31, 0x41, 0xe1, 0x75, + 0x31, 0x41, 0xe1, 0x72, 0x31, 0x41, 0xd0, 0x62, 0x31, 0x01, 0xd1, 0x63, + 0x31, 0x01, 0xd2, 0x64, 0x31, 0x01, 0xd3, 0x65, 0x31, 0x01, 0xd4, 0x66, + 0x31, 0x01, 0xd5, 0x67, 0x31, 0x01, 0xd6, 0x68, 0x31, 0x81, 0x11, 0xd7, + 0x6a, 0x31, 0x81, 0x08, 0xd8, 0x6c, 0x31, 0x01, 0xd9, 0x6d, 0x31, 0x41, + 0xe1, 0x6b, 0x31, 0x41, 0xe1, 0x69, 0x31, 0x41, 0xd0, 0x56, 0x31, 0x81, + 0x29, 0xd1, 0x58, 0x31, 0x01, 0xd2, 0x59, 0x31, 0x01, 0xd3, 0x5a, 0x31, + 0x01, 0xd4, 0x5b, 0x31, 0x01, 0xd5, 0x5c, 0x31, 0x01, 0xd6, 0x5d, 0x31, + 0x81, 0x0c, 0xd7, 0x5f, 0x31, 0x01, 0xd8, 0x60, 0x31, 0x01, 0xd9, 0x61, + 0x31, 0x41, 0xe1, 0x5e, 0x31, 0x41, 0xe1, 0x57, 0x31, 0x41, 0xd0, 0x4b, + 0x31, 0x01, 0xd1, 0x4c, 0x31, 0x81, 0x20, 0xd2, 0x4e, 0x31, 0x01, 0xd3, + 0x4f, 0x31, 0x01, 0xd4, 0x50, 0x31, 0x01, 0xd5, 0x51, 0x31, 0x01, 0xd6, + 0x52, 0x31, 0x01, 0xd7, 0x53, 0x31, 0x01, 0xd8, 0x54, 0x31, 0x01, 0xd9, + 0x55, 0x31, 0x41, 0xe1, 0x4d, 0x31, 0x41, 0xd1, 0x3f, 0x31, 0x01, 0xd2, + 0x40, 0x31, 0x01, 0xd3, 0x41, 0x31, 0x01, 0xd4, 0x42, 0x31, 0x01, 0xd5, + 0x43, 0x31, 0x01, 0xd6, 0x44, 0x31, 0x81, 0x15, 0xd7, 0x46, 0x31, 0x81, + 0x08, 0xd8, 0x49, 0x31, 0x01, 0xd9, 0x4a, 0x31, 0x41, 0xe1, 0x47, 0x31, + 0x01, 0xe2, 0x48, 0x31, 0x41, 0xe1, 0x45, 0x31, 0x41, 0x90, 0x06, 0x49, + 0x41, 0xc0, 0x41, 0x34, 0x41, 0x90, 0xf2, 0x01, 0x91, 0xc2, 0x01, 0x92, + 0x92, 0x01, 0x93, 0x59, 0x94, 0x20, 0x95, 0x01, 0xff, 0xd0, 0x38, 0x31, + 0x01, 0xd1, 0x39, 0x31, 0x81, 0x08, 0xd2, 0x3d, 0x31, 0x01, 0xd3, 0x3e, + 0x31, 0x41, 0xe1, 0x3a, 0x31, 0x01, 0xe2, 0x3b, 0x31, 0x01, 0xe3, 0x3c, + 0x31, 0x41, 0xd0, 0x2b, 0x31, 0x01, 0xd1, 0x2c, 0x31, 0x01, 0xd2, 0x2d, + 0x31, 0x01, 0xd3, 0x2e, 0x31, 0x01, 0xd4, 0x2f, 0x31, 0x01, 0xd5, 0x30, + 0x31, 0x81, 0x1a, 0xd6, 0x32, 0x31, 0x81, 0x11, 0xd7, 0x34, 0x31, 0x81, + 0x08, 0xd8, 0x36, 0x31, 0x01, 0xd9, 0x37, 0x31, 0x41, 0xe1, 0x35, 0x31, + 0x41, 0xe1, 0x33, 0x31, 0x41, 0xe1, 0x31, 0x31, 0x41, 0xd0, 0x1e, 0x31, + 0x01, 0xd1, 0x1f, 0x31, 0x81, 0x2a, 0xd2, 0x21, 0x31, 0x01, 0xd3, 0x22, + 0x31, 0x01, 0xd4, 0x23, 0x31, 0x01, 0xd5, 0x24, 0x31, 0x01, 0xd6, 0x25, + 0x31, 0x01, 0xd7, 0x26, 0x31, 0x81, 0x0d, 0xd8, 0x28, 0x31, 0x81, 0x04, + 0xd9, 0x2a, 0x31, 0x41, 0xe1, 0x29, 0x31, 0x41, 0xe1, 0x27, 0x31, 0x41, + 0xe1, 0x20, 0x31, 0x41, 0xd0, 0x13, 0x31, 0x01, 0xd1, 0x14, 0x31, 0x81, + 0x20, 0xd2, 0x16, 0x31, 0x01, 0xd3, 0x17, 0x31, 0x01, 0xd4, 0x18, 0x31, + 0x01, 0xd5, 0x19, 0x31, 0x01, 0xd6, 0x1a, 0x31, 0x01, 0xd7, 0x1b, 0x31, + 0x01, 0xd8, 0x1c, 0x31, 0x01, 0xd9, 0x1d, 0x31, 0x41, 0xe1, 0x15, 0x31, + 0x41, 0xd0, 0x08, 0x31, 0x01, 0xd1, 0x09, 0x31, 0x01, 0xd2, 0x0a, 0x31, + 0x01, 0xd3, 0x0b, 0x31, 0x81, 0x18, 0xd4, 0x0d, 0x31, 0x01, 0xd5, 0x0e, + 0x31, 0x01, 0xd6, 0x0f, 0x31, 0x01, 0xd7, 0x10, 0x31, 0x01, 0xd8, 0x11, + 0x31, 0x01, 0xd9, 0x12, 0x31, 0x41, 0xe1, 0x0c, 0x31, 0x41, 0xd1, 0xfe, + 0x30, 0x81, 0x20, 0xd2, 0x00, 0x31, 0x01, 0xd3, 0x01, 0x31, 0x01, 0xd4, + 0x02, 0x31, 0x01, 0xd5, 0x03, 0x31, 0x01, 0xd6, 0x04, 0x31, 0x01, 0xd7, + 0x05, 0x31, 0x01, 0xd8, 0x06, 0x31, 0x01, 0xd9, 0x07, 0x31, 0x41, 0xe1, + 0xff, 0x30, 0x41, 0x90, 0x17, 0x03, 0x1b, 0x00, 0x01, 0xff, 0x49, 0x9d, + 0x68, 0x3d, 0x34, 0x01, 0x47, 0x06, 0x30, 0x38, 0x34, 0x01, 0x50, 0x96, + 0x68, 0x3f, 0x34, 0x41, 0x90, 0x90, 0x01, 0x91, 0x5c, 0x92, 0x28, 0x93, + 0x01, 0xff, 0xd0, 0xf5, 0x30, 0x01, 0xd1, 0xf6, 0x30, 0x01, 0xd2, 0xf7, + 0x30, 0x01, 0xd3, 0xf8, 0x30, 0x01, 0xd4, 0xf9, 0x30, 0x81, 0x0c, 0xd6, + 0xfb, 0x30, 0x01, 0xd7, 0xfc, 0x30, 0x01, 0xd8, 0xfd, 0x30, 0x41, 0xe1, + 0xfa, 0x30, 0x41, 0xd0, 0xe9, 0x30, 0x81, 0x29, 0xd1, 0xeb, 0x30, 0x01, + 0xd2, 0xec, 0x30, 0x01, 0xd3, 0xed, 0x30, 0x01, 0xd4, 0xee, 0x30, 0x01, + 0xd5, 0xef, 0x30, 0x01, 0xd6, 0xf0, 0x30, 0x01, 0xd7, 0xf1, 0x30, 0x01, + 0xd8, 0xf2, 0x30, 0x81, 0x04, 0xd9, 0xf4, 0x30, 0x41, 0xe1, 0xf3, 0x30, + 0x41, 0xe1, 0xea, 0x30, 0x41, 0xd0, 0xdd, 0x30, 0x01, 0xd1, 0xde, 0x30, + 0x01, 0xd2, 0xdf, 0x30, 0x01, 0xd3, 0xe0, 0x30, 0x01, 0xd4, 0xe1, 0x30, + 0x01, 0xd5, 0xe2, 0x30, 0x01, 0xd6, 0xe3, 0x30, 0x81, 0x11, 0xd7, 0xe5, + 0x30, 0x81, 0x08, 0xd8, 0xe7, 0x30, 0x01, 0xd9, 0xe8, 0x30, 0x41, 0xe1, + 0xe6, 0x30, 0x41, 0xe1, 0xe4, 0x30, 0x41, 0xd1, 0xd2, 0x30, 0x01, 0xd2, + 0xd3, 0x30, 0x01, 0xd3, 0xd4, 0x30, 0x01, 0xd4, 0xd5, 0x30, 0x01, 0xd5, + 0xd6, 0x30, 0x01, 0xd6, 0xd7, 0x30, 0x01, 0xd7, 0xd8, 0x30, 0x01, 0xd8, + 0xd9, 0x30, 0x81, 0x09, 0xd9, 0xdb, 0x30, 0xc1, 0x00, 0xe1, 0xdc, 0x30, + 0x41, 0xe1, 0xda, 0x30, 0x41, 0x90, 0xe2, 0x02, 0x91, 0xb7, 0x02, 0x92, + 0x87, 0x02, 0x93, 0xd2, 0x01, 0x94, 0x9d, 0x01, 0x95, 0x44, 0x96, 0x01, + 0xff, 0xd0, 0xc2, 0x30, 0x01, 0xd1, 0xc3, 0x30, 0x01, 0xd2, 0xc4, 0x30, + 0x01, 0xd3, 0xc5, 0x30, 0x01, 0xd4, 0xc6, 0x30, 0x01, 0xd5, 0xc7, 0x30, + 0x01, 0xd6, 0xc8, 0x30, 0x01, 0xd7, 0xc9, 0x30, 0xc1, 0x00, 0xe1, 0xca, + 0x30, 0x01, 0xe2, 0xcb, 0x30, 0x01, 0xe3, 0xcc, 0x30, 0x01, 0xe4, 0xcd, + 0x30, 0x01, 0xe5, 0xce, 0x30, 0x01, 0xe6, 0xcf, 0x30, 0x01, 0xe7, 0xd0, + 0x30, 0x01, 0xe8, 0xd1, 0x30, 0x41, 0xd0, 0xad, 0x30, 0x81, 0x2e, 0xd1, + 0xb7, 0x30, 0x01, 0xd2, 0xb8, 0x30, 0x81, 0x21, 0xd3, 0xba, 0x30, 0x01, + 0xd4, 0xbb, 0x30, 0x81, 0x14, 0xd5, 0xbd, 0x30, 0x01, 0xd6, 0xbe, 0x30, + 0x01, 0xd7, 0xbf, 0x30, 0x01, 0xd8, 0xc0, 0x30, 0x01, 0xd9, 0xc1, 0x30, + 0x41, 0xe1, 0xbc, 0x30, 0x41, 0xe1, 0xb9, 0x30, 0x41, 0xe1, 0xae, 0x30, + 0x01, 0xe2, 0xaf, 0x30, 0x01, 0xe3, 0xb0, 0x30, 0x01, 0xe4, 0xb1, 0x30, + 0x01, 0xe5, 0xb2, 0x30, 0x01, 0xe6, 0xb3, 0x30, 0x01, 0xe7, 0xb4, 0x30, + 0x01, 0xe8, 0xb5, 0x30, 0x01, 0xe9, 0xb6, 0x30, 0x41, 0xd0, 0xa1, 0x30, + 0x01, 0xd1, 0xa2, 0x30, 0x01, 0xd2, 0xa3, 0x30, 0x01, 0xd3, 0xa4, 0x30, + 0x01, 0xd4, 0xa5, 0x30, 0x01, 0xd5, 0xa6, 0x30, 0x01, 0xd6, 0xa7, 0x30, + 0x81, 0x11, 0xd7, 0xa9, 0x30, 0x01, 0xd8, 0xaa, 0x30, 0x81, 0x04, 0xd9, + 0xac, 0x30, 0x41, 0xe1, 0xab, 0x30, 0x41, 0xe1, 0xa8, 0x30, 0x41, 0xd0, + 0x95, 0x30, 0x01, 0xd1, 0x96, 0x30, 0x81, 0x25, 0xd2, 0x98, 0x30, 0x01, + 0xd3, 0x99, 0x30, 0x01, 0xd4, 0x9a, 0x30, 0x81, 0x14, 0xd5, 0x9c, 0x30, + 0x01, 0xd6, 0x9d, 0x30, 0x01, 0xd7, 0x9e, 0x30, 0x01, 0xd8, 0x9f, 0x30, + 0x01, 0xd9, 0xa0, 0x30, 0x41, 0xe1, 0x9b, 0x30, 0x41, 0xe1, 0x97, 0x30, + 0x41, 0xd0, 0x8a, 0x30, 0x01, 0xd1, 0x8b, 0x30, 0x01, 0xd2, 0x8c, 0x30, + 0x01, 0xd3, 0x8d, 0x30, 0x01, 0xd4, 0x8e, 0x30, 0x01, 0xd5, 0x8f, 0x30, + 0x01, 0xd6, 0x90, 0x30, 0x01, 0xd7, 0x91, 0x30, 0x81, 0x08, 0xd8, 0x93, + 0x30, 0x01, 0xd9, 0x94, 0x30, 0x41, 0xe1, 0x92, 0x30, 0x41, 0xd0, 0x80, + 0x30, 0x01, 0xd1, 0x81, 0x30, 0x01, 0xd2, 0x82, 0x30, 0x01, 0xd3, 0x83, + 0x30, 0x01, 0xd4, 0x84, 0x30, 0x01, 0xd5, 0x85, 0x30, 0x01, 0xd6, 0x86, + 0x30, 0x01, 0xd7, 0x87, 0x30, 0x01, 0xd8, 0x88, 0x30, 0x01, 0xd9, 0x89, + 0x30, 0x41, 0xd1, 0x76, 0x30, 0x01, 0xd2, 0x77, 0x30, 0x01, 0xd3, 0x78, + 0x30, 0x01, 0xd4, 0x79, 0x30, 0x01, 0xd5, 0x7a, 0x30, 0x01, 0xd6, 0x7b, + 0x30, 0x01, 0xd7, 0x7c, 0x30, 0x01, 0xd8, 0x7d, 0x30, 0x81, 0x04, 0xd9, + 0x7f, 0x30, 0x41, 0xe1, 0x7e, 0x30, 0x41, 0x90, 0x46, 0x91, 0x17, 0x92, + 0x01, 0xff, 0xd0, 0x71, 0x30, 0x01, 0xd1, 0x72, 0x30, 0x01, 0xd2, 0x73, + 0x30, 0x01, 0xd3, 0x74, 0x30, 0x01, 0xd4, 0x75, 0x30, 0x41, 0xd0, 0x66, + 0x30, 0x81, 0x24, 0xd1, 0x68, 0x30, 0x01, 0xd2, 0x69, 0x30, 0x01, 0xd3, + 0x6a, 0x30, 0x01, 0xd4, 0x6b, 0x30, 0x01, 0xd5, 0x6c, 0x30, 0x01, 0xd6, + 0x6d, 0x30, 0x01, 0xd7, 0x6e, 0x30, 0x01, 0xd8, 0x6f, 0x30, 0x01, 0xd9, + 0x70, 0x30, 0x41, 0xe1, 0x67, 0x30, 0x41, 0xd1, 0x5a, 0x30, 0x01, 0xd2, + 0x5b, 0x30, 0x81, 0x1c, 0xd3, 0x5f, 0x30, 0x01, 0xd4, 0x60, 0x30, 0x01, + 0xd5, 0x61, 0x30, 0x01, 0xd6, 0x62, 0x30, 0x01, 0xd7, 0x63, 0x30, 0x01, + 0xd8, 0x64, 0x30, 0x01, 0xd9, 0x65, 0x30, 0x41, 0xe1, 0x5c, 0x30, 0x01, + 0xe2, 0x5d, 0x30, 0x01, 0xe3, 0x5e, 0x30, 0x41, 0x02, 0x8a, 0xd8, 0x17, + 0x05, 0x9e, 0x3f, 0x01, 0xff, 0x49, 0x9d, 0x68, 0x3c, 0x34, 0x01, 0x47, + 0x06, 0x30, 0x37, 0x34, 0x01, 0x50, 0x96, 0x68, 0x3e, 0x34, 0x41, 0xd1, + 0x50, 0x30, 0x01, 0xd2, 0x51, 0x30, 0x01, 0xd3, 0x52, 0x30, 0x01, 0xd4, + 0x53, 0x30, 0x01, 0xd5, 0x54, 0x30, 0x81, 0x10, 0xd6, 0x56, 0x30, 0x01, + 0xd7, 0x57, 0x30, 0x01, 0xd8, 0x58, 0x30, 0x01, 0xd9, 0x59, 0x30, 0x41, + 0xe1, 0x55, 0x30, 0x41, 0x90, 0x97, 0x01, 0x02, 0xf0, 0xec, 0x01, 0xff, + 0x90, 0x63, 0x91, 0x39, 0x92, 0x0f, 0x93, 0x01, 0xff, 0xd0, 0x2c, 0x34, + 0x01, 0xd1, 0x2d, 0x34, 0x01, 0xd2, 0x2e, 0x34, 0x41, 0xd0, 0x22, 0x34, + 0x01, 0xd1, 0x23, 0x34, 0x01, 0xd2, 0x24, 0x34, 0x01, 0xd3, 0x25, 0x34, + 0x01, 0xd4, 0x26, 0x34, 0x01, 0xd5, 0x27, 0x34, 0x01, 0xd6, 0x28, 0x34, + 0x01, 0xd7, 0x29, 0x34, 0x01, 0xd8, 0x2a, 0x34, 0x01, 0xd9, 0x2b, 0x34, + 0x41, 0xd0, 0x18, 0x34, 0x01, 0xd1, 0x19, 0x34, 0x01, 0xd2, 0x1a, 0x34, + 0x01, 0xd3, 0x1b, 0x34, 0x01, 0xd4, 0x1c, 0x34, 0x01, 0xd5, 0x1d, 0x34, + 0x01, 0xd6, 0x1e, 0x34, 0x01, 0xd7, 0x1f, 0x34, 0x01, 0xd8, 0x20, 0x34, + 0x01, 0xd9, 0x21, 0x34, 0x41, 0xd1, 0x0d, 0x34, 0x01, 0xd2, 0x0e, 0x34, + 0x01, 0xd3, 0x0f, 0x34, 0x01, 0xd4, 0x10, 0x34, 0x01, 0xd5, 0x11, 0x34, + 0x01, 0xd6, 0x12, 0x34, 0x01, 0xd7, 0x13, 0x34, 0x81, 0x08, 0xd8, 0x16, + 0x34, 0x01, 0xd9, 0x17, 0x34, 0x41, 0xe1, 0x14, 0x34, 0x01, 0xe2, 0x15, + 0x34, 0x41, 0x90, 0xa8, 0x02, 0x91, 0xf3, 0x01, 0x92, 0xc8, 0x01, 0x93, + 0x98, 0x01, 0x94, 0x5a, 0x95, 0x30, 0x96, 0x06, 0x42, 0x17, 0xf4, 0x4f, + 0x30, 0x41, 0xd0, 0x45, 0x30, 0x01, 0xd1, 0x46, 0x30, 0x01, 0xd2, 0x47, + 0x30, 0x01, 0xd3, 0x48, 0x30, 0x01, 0xd4, 0x49, 0x30, 0x01, 0xd5, 0x4a, + 0x30, 0x01, 0xd6, 0x4b, 0x30, 0x01, 0xd7, 0x4c, 0x30, 0x01, 0xd8, 0x4d, + 0x30, 0x01, 0xd9, 0x4e, 0x30, 0x41, 0xd0, 0x3b, 0x30, 0x01, 0xd1, 0x3c, + 0x30, 0x01, 0xd2, 0x3d, 0x30, 0x01, 0xd3, 0x3e, 0x30, 0x01, 0xd4, 0x3f, + 0x30, 0x01, 0xd5, 0x40, 0x30, 0x01, 0xd6, 0x41, 0x30, 0x01, 0xd7, 0x42, + 0x30, 0x01, 0xd8, 0x43, 0x30, 0x01, 0xd9, 0x44, 0x30, 0x41, 0xd0, 0x2d, + 0x30, 0x81, 0x33, 0xd1, 0x2f, 0x30, 0x01, 0xd2, 0x30, 0x30, 0x81, 0x26, + 0xd3, 0x32, 0x30, 0x81, 0x1d, 0xd4, 0x34, 0x30, 0x01, 0xd5, 0x35, 0x30, + 0x81, 0x10, 0xd6, 0x37, 0x30, 0x01, 0xd7, 0x38, 0x30, 0x01, 0xd8, 0x39, + 0x30, 0x01, 0xd9, 0x3a, 0x30, 0x41, 0xe1, 0x36, 0x30, 0x41, 0xe1, 0x33, + 0x30, 0x41, 0xe1, 0x31, 0x30, 0x41, 0xe1, 0x2e, 0x30, 0x41, 0xd0, 0x22, + 0x30, 0x01, 0xd1, 0x23, 0x30, 0x01, 0xd2, 0x24, 0x30, 0x81, 0x1c, 0xd3, + 0x26, 0x30, 0x01, 0xd4, 0x27, 0x30, 0x01, 0xd5, 0x28, 0x30, 0x01, 0xd6, + 0x29, 0x30, 0x01, 0xd7, 0x2a, 0x30, 0x01, 0xd8, 0x2b, 0x30, 0x01, 0xd9, + 0x2c, 0x30, 0x41, 0xe1, 0x25, 0x30, 0x41, 0xd0, 0x18, 0x30, 0x01, 0xd1, + 0x19, 0x30, 0x01, 0xd2, 0x1a, 0x30, 0x01, 0xd3, 0x1b, 0x30, 0x01, 0xd4, + 0x1c, 0x30, 0x01, 0xd5, 0x1d, 0x30, 0x01, 0xd6, 0x1e, 0x30, 0x01, 0xd7, + 0x1f, 0x30, 0x01, 0xd8, 0x20, 0x30, 0x01, 0xd9, 0x21, 0x30, 0x41, 0xd0, + 0x0c, 0x30, 0x01, 0xd1, 0x0d, 0x30, 0x01, 0xd2, 0x0e, 0x30, 0x01, 0xd3, + 0x0f, 0x30, 0x01, 0xd4, 0x10, 0x30, 0x81, 0x19, 0xd5, 0x12, 0x30, 0x01, + 0xd6, 0x13, 0x30, 0x01, 0xd7, 0x14, 0x30, 0x81, 0x08, 0xd8, 0x16, 0x30, + 0x01, 0xd9, 0x17, 0x30, 0x41, 0xe1, 0x15, 0x30, 0x41, 0xe1, 0x11, 0x30, + 0x41, 0xd1, 0x00, 0x30, 0x01, 0xd2, 0x01, 0x30, 0x01, 0xd3, 0x02, 0x30, + 0x01, 0xd4, 0x03, 0x30, 0x01, 0xd5, 0x04, 0x30, 0x81, 0x19, 0xd6, 0x06, + 0x30, 0x81, 0x0c, 0xd7, 0x09, 0x30, 0x01, 0xd8, 0x0a, 0x30, 0x01, 0xd9, + 0x0b, 0x30, 0x41, 0xe1, 0x07, 0x30, 0x01, 0xe2, 0x08, 0x30, 0x41, 0xe1, + 0x05, 0x30, 0x41, 0x43, 0x06, 0x02, 0x85, 0xf9, 0x01, 0xf2, 0x42, 0xf4, + 0x81, 0x06, 0x4f, 0x47, 0x73, 0x71, 0x26, 0x40, 0x80, 0x2a, 0x42, 0x53, + 0x00, 0x41, 0x26, 0xc0, 0x00, 0x02, 0x86, 0x00, 0x01, 0xff, 0x05, 0xe8, + 0x3f, 0x06, 0x45, 0x9d, 0x16, 0xda, 0x23, 0x40, 0xa1, 0x06, 0x4d, 0xb8, + 0x82, 0x0d, 0xf3, 0x41, 0x47, 0x3f, 0xd3, 0x0e, 0xf3, 0x01, 0x4d, 0x9c, + 0x88, 0x0f, 0xf3, 0x41, 0x03, 0xf4, 0x01, 0x06, 0x50, 0xc6, 0x68, 0xbb, + 0xf9, 0x41, 0x45, 0x6c, 0xe8, 0x3d, 0xf3, 0x01, 0x44, 0xd5, 0xb3, 0x3e, + 0xf3, 0x41, 0xa1, 0xc0, 0x31, 0xa5, 0xf6, 0x23, 0xa9, 0xfd, 0x19, 0x4f, + 0x77, 0x70, 0xec, 0xf9, 0x01, 0xaf, 0xb0, 0x07, 0xb2, 0xe3, 0x06, 0xb5, + 0x06, 0x42, 0x1c, 0xf5, 0xc0, 0xf4, 0x41, 0x42, 0x36, 0x01, 0x86, 0xf9, + 0x01, 0x46, 0x0c, 0xde, 0x5f, 0xf9, 0x01, 0x07, 0xc0, 0xd4, 0x01, 0xff, + 0x06, 0x86, 0xd9, 0xe3, 0x04, 0x4b, 0x31, 0x9b, 0x9e, 0xbc, 0x01, 0x07, + 0xec, 0x05, 0x12, 0x5d, 0x6d, 0x16, 0x9f, 0xbc, 0x01, 0x51, 0xe7, 0x5d, + 0x9c, 0xbc, 0x01, 0x55, 0x63, 0x3e, 0x9d, 0xbc, 0x41, 0xe1, 0x41, 0xbc, + 0x81, 0xbb, 0x04, 0xe2, 0x07, 0xbc, 0x01, 0xe4, 0x08, 0xbc, 0x81, 0xa7, + 0x04, 0xe5, 0x47, 0xbc, 0x81, 0x99, 0x04, 0xe6, 0x04, 0xbc, 0x81, 0x8d, + 0x04, 0xe7, 0x0a, 0xbc, 0x81, 0x81, 0x04, 0xe8, 0x00, 0xbc, 0x81, 0xf7, + 0x03, 0xe9, 0x46, 0xbc, 0x81, 0xed, 0x03, 0xea, 0x1b, 0xbc, 0x81, 0xb6, + 0x03, 0xeb, 0x05, 0xbc, 0x81, 0xa0, 0x03, 0xec, 0x06, 0xbc, 0x81, 0x89, + 0x03, 0xed, 0x19, 0xbc, 0x81, 0xeb, 0x02, 0xee, 0x1a, 0xbc, 0x81, 0xb9, + 0x02, 0xef, 0x44, 0xbc, 0x81, 0xa1, 0x02, 0xf0, 0x02, 0xbc, 0x81, 0x88, + 0x02, 0xf2, 0x0b, 0xbc, 0x81, 0xeb, 0x01, 0xf3, 0x1c, 0xbc, 0x81, 0x68, + 0xf4, 0x03, 0xbc, 0x81, 0x53, 0xf5, 0x51, 0xbc, 0x81, 0x40, 0xf6, 0x09, + 0xbc, 0x81, 0x35, 0xf7, 0x38, 0xbc, 0x81, 0x0f, 0xf8, 0x01, 0xbc, 0x81, + 0x06, 0x42, 0x4d, 0x00, 0x50, 0xbc, 0x41, 0xf7, 0x53, 0xbc, 0x41, 0x42, + 0xc7, 0x00, 0x3a, 0xbc, 0x01, 0xe1, 0x5c, 0xbc, 0x01, 0x42, 0x12, 0x0b, + 0x5f, 0xbc, 0x01, 0xe8, 0x39, 0xbc, 0x01, 0xe9, 0x5e, 0xbc, 0x01, 0xef, + 0x5d, 0xbc, 0xc1, 0x00, 0xf7, 0x60, 0xbc, 0x41, 0x48, 0xf8, 0xc8, 0x6a, + 0xbc, 0x41, 0x42, 0xb3, 0x01, 0x54, 0xbc, 0x01, 0xe8, 0x57, 0xbc, 0x01, + 0xe9, 0x4a, 0xbc, 0x41, 0x80, 0x04, 0xe8, 0x11, 0xbc, 0x41, 0x43, 0xab, + 0x0c, 0x37, 0xbc, 0x01, 0xf3, 0x36, 0xbc, 0x41, 0x80, 0x37, 0x46, 0x98, + 0xdc, 0x49, 0xbc, 0x01, 0x05, 0x30, 0xe8, 0x01, 0xff, 0x42, 0x1a, 0x00, + 0x68, 0xbc, 0x01, 0x42, 0xe7, 0x4b, 0x12, 0xbc, 0x01, 0xa5, 0x12, 0xea, + 0x15, 0xbc, 0x01, 0xaf, 0x04, 0xf5, 0x58, 0xbc, 0x41, 0xee, 0x69, 0xbc, + 0x01, 0xf7, 0x42, 0xbc, 0x41, 0xe5, 0x4e, 0xbc, 0x01, 0xe8, 0x4c, 0xbc, + 0x01, 0xee, 0x67, 0xbc, 0x41, 0xea, 0x20, 0xbc, 0x81, 0x3a, 0xeb, 0x3f, + 0xbc, 0x81, 0x2f, 0xed, 0x3c, 0xbc, 0x01, 0xee, 0x3b, 0xbc, 0x01, 0xf0, + 0x34, 0xbc, 0x81, 0x1c, 0xf3, 0x2a, 0xbc, 0x01, 0xf4, 0x32, 0xbc, 0x81, + 0x0d, 0x48, 0x76, 0x3b, 0x25, 0xbc, 0xc1, 0x00, 0x46, 0x1f, 0x07, 0x26, + 0xbc, 0x41, 0x42, 0xc7, 0x00, 0x33, 0xbc, 0x41, 0x42, 0xc7, 0x00, 0x35, + 0xbc, 0x41, 0x42, 0xc7, 0x00, 0x40, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x2e, + 0xbc, 0x41, 0x42, 0x99, 0x00, 0x10, 0xbc, 0x01, 0xe8, 0x18, 0xbc, 0x01, + 0x08, 0x30, 0xc9, 0x01, 0xff, 0xe9, 0x4d, 0xbc, 0x01, 0xf5, 0x56, 0xbc, + 0x41, 0x42, 0xb3, 0x01, 0x0c, 0xbc, 0x01, 0x07, 0xe5, 0xd0, 0x01, 0xff, + 0xed, 0x66, 0xbc, 0x01, 0xee, 0x65, 0xbc, 0x41, 0xe1, 0x43, 0xbc, 0x01, + 0x42, 0xfd, 0x28, 0x59, 0xbc, 0x01, 0xf5, 0x5b, 0xbc, 0x01, 0xf7, 0x5a, + 0xbc, 0x41, 0x80, 0x15, 0x05, 0x34, 0x4c, 0x01, 0xff, 0xe1, 0x64, 0xbc, + 0x01, 0xe9, 0x63, 0xbc, 0x01, 0xef, 0x62, 0xbc, 0x01, 0xf5, 0x61, 0xbc, + 0x41, 0xed, 0x1e, 0xbc, 0x81, 0x0a, 0xf3, 0x28, 0xbc, 0x01, 0x48, 0x76, + 0x3b, 0x22, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x2c, 0xbc, 0x41, 0x80, 0x01, + 0xff, 0xee, 0x1d, 0xbc, 0x81, 0x0a, 0xf3, 0x27, 0xbc, 0x01, 0x48, 0x76, + 0x3b, 0x21, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x2b, 0xbc, 0x41, 0xe8, 0x17, + 0xbc, 0x01, 0x04, 0xd8, 0x02, 0x01, 0xff, 0xe9, 0x4f, 0xbc, 0x01, 0xf5, + 0x55, 0xbc, 0x41, 0x80, 0x04, 0xeb, 0x14, 0xbc, 0x41, 0xed, 0x0f, 0xbc, + 0x01, 0x43, 0xab, 0x0c, 0x3d, 0xbc, 0x41, 0x80, 0x01, 0xff, 0xed, 0x1f, + 0xbc, 0x81, 0x23, 0xee, 0x30, 0xbc, 0x81, 0x18, 0xf3, 0x29, 0xbc, 0x81, + 0x0d, 0x48, 0x76, 0x3b, 0x23, 0xbc, 0xc1, 0x00, 0x52, 0xf7, 0x54, 0x24, + 0xbc, 0x41, 0x49, 0x75, 0x3b, 0x2f, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x31, + 0xbc, 0x41, 0x42, 0x99, 0x00, 0x2d, 0xbc, 0x41, 0xe5, 0x48, 0xbc, 0x41, + 0xec, 0x16, 0xbc, 0x41, 0x44, 0xc5, 0xec, 0x3e, 0xbc, 0x41, 0x42, 0xb3, + 0x01, 0x0e, 0xbc, 0x41, 0xe5, 0x4b, 0xbc, 0x01, 0xf5, 0x52, 0xbc, 0x41, + 0x42, 0x99, 0x00, 0x0d, 0xbc, 0x01, 0xe8, 0x13, 0xbc, 0x41, 0x42, 0x3c, + 0x01, 0x45, 0xbc, 0x41, 0x09, 0x69, 0xb6, 0xad, 0x01, 0x05, 0x48, 0x0b, + 0x6a, 0xac, 0x16, 0x04, 0x26, 0xb5, 0x06, 0x57, 0xc5, 0x30, 0x72, 0xbc, + 0x41, 0x51, 0xcb, 0x30, 0x71, 0xbc, 0x01, 0x4f, 0x82, 0x74, 0x74, 0xbc, + 0x41, 0x55, 0x9d, 0x3a, 0x70, 0xbc, 0x01, 0x03, 0xd1, 0x00, 0x01, 0xff, + 0xa1, 0x39, 0x46, 0x12, 0x03, 0x95, 0xbc, 0x01, 0x43, 0x23, 0x0a, 0x94, + 0xbc, 0x01, 0x45, 0x15, 0x23, 0x92, 0xbc, 0x01, 0xac, 0x19, 0x4b, 0x92, + 0xa3, 0x91, 0xbc, 0x01, 0x48, 0x32, 0x00, 0x98, 0xbc, 0x81, 0x06, 0x44, + 0x82, 0x57, 0x97, 0xbc, 0x41, 0x47, 0xd5, 0x30, 0x73, 0xbc, 0x41, 0x43, + 0xee, 0x07, 0x96, 0xbc, 0x01, 0x49, 0x32, 0xbd, 0x93, 0xbc, 0x41, 0x44, + 0xfa, 0x38, 0x90, 0xbc, 0x01, 0x44, 0xcf, 0x00, 0x99, 0xbc, 0x41, 0x45, + 0xf9, 0x38, 0x80, 0xbc, 0x01, 0x46, 0x12, 0x03, 0x85, 0xbc, 0x01, 0x43, + 0x23, 0x0a, 0x84, 0xbc, 0x01, 0x45, 0x15, 0x23, 0x82, 0xbc, 0x01, 0xac, + 0x19, 0x4b, 0x92, 0xa3, 0x81, 0xbc, 0x01, 0x48, 0x32, 0x00, 0x88, 0xbc, + 0x81, 0x06, 0x44, 0x82, 0x57, 0x87, 0xbc, 0x41, 0x47, 0xd5, 0x30, 0x75, + 0xbc, 0x41, 0x43, 0xee, 0x07, 0x86, 0xbc, 0x01, 0x49, 0x32, 0xbd, 0x83, + 0xbc, 0x41, 0x46, 0x98, 0x9f, 0x7a, 0xbc, 0x01, 0x46, 0xaa, 0xdc, 0x7b, + 0xbc, 0x01, 0x54, 0x4c, 0x44, 0x77, 0xbc, 0x01, 0x46, 0xd6, 0x30, 0x76, + 0xbc, 0x01, 0x02, 0x12, 0x00, 0x01, 0xff, 0x42, 0x62, 0x01, 0x79, 0xbc, + 0x01, 0x45, 0x0c, 0xe9, 0x78, 0xbc, 0xc1, 0x00, 0x45, 0xab, 0x0e, 0x7c, + 0xbc, 0x41, 0xa1, 0x2f, 0x43, 0xed, 0x00, 0x57, 0xf4, 0x01, 0x4d, 0xa6, + 0x84, 0xda, 0x26, 0x00, 0xaf, 0x06, 0x52, 0x17, 0x56, 0x41, 0xf9, 0x41, + 0x4c, 0xe3, 0x91, 0x2a, 0xf4, 0x01, 0x4a, 0xb1, 0xae, 0x24, 0xf9, 0x01, + 0xb0, 0x01, 0xff, 0x49, 0x68, 0xb4, 0x78, 0xfa, 0x01, 0x43, 0xec, 0x05, + 0xa7, 0xf4, 0x41, 0x49, 0xb0, 0xa1, 0xaf, 0x20, 0x00, 0x5c, 0xc2, 0x17, + 0x9b, 0x27, 0x00, 0x43, 0x06, 0x14, 0x09, 0xf4, 0xc1, 0x00, 0x45, 0x0b, + 0x08, 0x32, 0xf4, 0x41, 0x52, 0x57, 0x4f, 0xaf, 0xf6, 0x01, 0x46, 0x32, + 0xc5, 0xce, 0xf5, 0x81, 0x9e, 0x12, 0x42, 0x3b, 0x01, 0xa4, 0xf9, 0x01, + 0x07, 0x07, 0x77, 0xc5, 0x11, 0xe7, 0x15, 0xf4, 0x81, 0xd1, 0x0e, 0xac, + 0xc2, 0x0e, 0x0a, 0xe9, 0xad, 0xd5, 0x0a, 0xae, 0xc6, 0x0a, 0x42, 0x0c, + 0x00, 0xaa, 0xf6, 0x01, 0xb4, 0xe4, 0x09, 0xb5, 0x89, 0x05, 0x4b, 0xc6, + 0xa4, 0x4a, 0xf5, 0x01, 0x02, 0xa7, 0x01, 0x01, 0xff, 0x80, 0xdc, 0x04, + 0x8d, 0xf1, 0x03, 0x04, 0xa9, 0x01, 0x01, 0xff, 0x08, 0x00, 0xc2, 0xcd, + 0x03, 0x02, 0x31, 0x01, 0x01, 0xff, 0xa1, 0xcd, 0x02, 0x06, 0x0c, 0x03, + 0xb5, 0x02, 0x50, 0x86, 0x61, 0x3f, 0xf8, 0x01, 0xa4, 0xa0, 0x02, 0x51, + 0xfc, 0x59, 0x37, 0xf8, 0x01, 0xa8, 0xc1, 0x01, 0x4d, 0x64, 0x87, 0xca, + 0x21, 0x00, 0x4f, 0x0c, 0x72, 0xf1, 0x27, 0x00, 0x46, 0xa4, 0xdf, 0x6f, + 0xf6, 0x01, 0xb3, 0xa0, 0x01, 0xb4, 0x13, 0x4b, 0x49, 0x10, 0xe9, 0x21, + 0x80, 0x06, 0x4c, 0xe1, 0x33, 0xaf, 0x21, 0x40, 0x5a, 0xc6, 0x1e, 0x97, + 0xf8, 0x41, 0x02, 0x0d, 0x00, 0x11, 0x02, 0x15, 0x02, 0x01, 0xff, 0x4d, + 0x85, 0x7f, 0xa1, 0x21, 0x00, 0x66, 0x1b, 0x06, 0xef, 0x2b, 0x40, 0x05, + 0x04, 0x02, 0x06, 0x49, 0x12, 0x72, 0x0b, 0x29, 0x40, 0x4a, 0xe0, 0x01, + 0x93, 0xf8, 0x01, 0x08, 0x09, 0x02, 0x01, 0xff, 0x45, 0xce, 0x00, 0x63, + 0x2b, 0x80, 0x12, 0x4c, 0xc3, 0x8d, 0x6d, 0x2b, 0x00, 0x4d, 0x64, 0x87, + 0x87, 0x2b, 0x00, 0x4c, 0xe1, 0x33, 0x4d, 0x2b, 0x40, 0x80, 0x01, 0xff, + 0x6a, 0x6c, 0x03, 0x83, 0x2b, 0x00, 0x46, 0xd1, 0x14, 0x73, 0x2b, 0x00, + 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0x53, 0xa8, 0x2b, 0xf8, 0x01, 0x58, + 0x26, 0x28, 0x7d, 0x2b, 0x00, 0x4b, 0x6b, 0x68, 0x2f, 0xf8, 0x01, 0x09, + 0xaf, 0xbb, 0x12, 0x4c, 0xef, 0x91, 0x27, 0xf8, 0x01, 0x4c, 0x5b, 0x92, + 0x23, 0xf8, 0x01, 0x50, 0x66, 0x68, 0x33, 0xf8, 0x41, 0x49, 0xea, 0x01, + 0xa0, 0x2b, 0x00, 0x4a, 0xb3, 0x02, 0xa1, 0x2b, 0x40, 0x4f, 0xe7, 0x66, + 0x53, 0xf8, 0x01, 0x4c, 0xe7, 0x93, 0x3b, 0xf8, 0x41, 0x11, 0x91, 0x05, + 0x11, 0x05, 0x6e, 0x15, 0x01, 0xff, 0x45, 0xce, 0x00, 0x47, 0xf8, 0x01, + 0x50, 0x86, 0x61, 0x43, 0xf8, 0x41, 0x04, 0xc3, 0x00, 0x19, 0x05, 0xc8, + 0x00, 0x01, 0xff, 0x80, 0x06, 0x45, 0xa9, 0x01, 0xc2, 0x21, 0x40, 0x48, + 0x57, 0xb4, 0x5d, 0x29, 0x00, 0x46, 0xd1, 0x14, 0x55, 0x29, 0x40, 0x80, + 0x06, 0x45, 0xa9, 0x01, 0xc3, 0x21, 0x40, 0x07, 0x92, 0x0a, 0x0c, 0x48, + 0x57, 0xb4, 0x61, 0x29, 0x00, 0x46, 0xd1, 0x14, 0x59, 0x29, 0x40, 0x61, + 0xc9, 0x0d, 0x65, 0x29, 0x00, 0x5f, 0x08, 0x12, 0x6f, 0x29, 0x40, 0x4b, + 0xc4, 0x8d, 0xe3, 0x21, 0x00, 0x4b, 0x30, 0x8e, 0xd3, 0x21, 0x40, 0x45, + 0xce, 0x00, 0x07, 0x2b, 0x80, 0x06, 0x53, 0xd3, 0x48, 0x8b, 0x2b, 0x40, + 0x47, 0xd0, 0x14, 0xb3, 0xf8, 0x41, 0x45, 0xf8, 0xe8, 0x14, 0x2e, 0x00, + 0x44, 0xcf, 0x00, 0x93, 0x21, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x5a, 0x2e, + 0x1f, 0xb7, 0xfb, 0x01, 0x48, 0x57, 0xb4, 0xa7, 0x21, 0x00, 0x5a, 0xb4, + 0x20, 0xf5, 0x21, 0x00, 0x46, 0xd1, 0x14, 0x13, 0x29, 0x00, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x50, 0xb6, 0x61, 0xb5, 0x21, 0x00, 0x4d, 0x36, 0x82, + 0xdf, 0x21, 0x00, 0x55, 0xd5, 0x01, 0x17, 0xf8, 0x01, 0x51, 0x47, 0x05, + 0x08, 0x29, 0x00, 0x58, 0x76, 0x29, 0x0b, 0xf8, 0x01, 0x59, 0xe3, 0x24, + 0x07, 0xf8, 0x01, 0x4c, 0xd3, 0x92, 0x9b, 0xf8, 0x01, 0x06, 0x5d, 0x07, + 0x11, 0x04, 0x49, 0x0c, 0x01, 0xff, 0x49, 0xea, 0x01, 0xb2, 0x21, 0x00, + 0x4a, 0xb3, 0x02, 0xb3, 0x21, 0x40, 0x55, 0xd5, 0x01, 0x13, 0xf8, 0x01, + 0x52, 0x2e, 0x06, 0x03, 0xf8, 0x41, 0x44, 0xac, 0x0e, 0x08, 0xf9, 0x81, + 0x0d, 0x4c, 0xc7, 0x92, 0x09, 0xf9, 0xc1, 0x00, 0x49, 0x75, 0x3b, 0x0b, + 0xf9, 0x41, 0x49, 0x75, 0x3b, 0x0a, 0xf9, 0x41, 0x17, 0x6f, 0x2e, 0x58, + 0x09, 0x9c, 0x01, 0x01, 0xff, 0xa1, 0x45, 0x4b, 0xaa, 0x9b, 0x7b, 0xcc, + 0x01, 0x44, 0xd5, 0xef, 0xfc, 0xcd, 0x01, 0xb2, 0x1f, 0xb3, 0x11, 0x0e, + 0x6b, 0x7d, 0x01, 0xff, 0x4f, 0x78, 0x6f, 0xe8, 0x29, 0x00, 0x50, 0xb6, + 0x66, 0xe9, 0x29, 0x40, 0x51, 0xe9, 0x5b, 0x3d, 0xf5, 0x01, 0x4b, 0x74, + 0x95, 0x04, 0xcc, 0x41, 0x49, 0x9a, 0xb5, 0x9a, 0xcc, 0x01, 0x4b, 0x90, + 0x06, 0x3b, 0xf5, 0x01, 0x44, 0xc5, 0xac, 0x68, 0xcc, 0x01, 0x4a, 0x9d, + 0xae, 0x59, 0xcc, 0x41, 0x47, 0x12, 0x34, 0xf8, 0xcd, 0x01, 0x4a, 0x03, + 0xb2, 0x63, 0xcc, 0x41, 0x4c, 0x7b, 0x8d, 0x77, 0xcc, 0x01, 0x4a, 0x3c, + 0x29, 0x73, 0xcc, 0x41, 0x49, 0xe1, 0x01, 0x04, 0x23, 0x00, 0x49, 0xfa, + 0xb8, 0x7f, 0x29, 0x00, 0x57, 0xae, 0x30, 0xf1, 0x22, 0x00, 0x44, 0xf5, + 0x38, 0xa4, 0x22, 0xc0, 0x00, 0x52, 0xb1, 0x4f, 0xf1, 0x2a, 0x40, 0x03, + 0x3e, 0x01, 0x06, 0x45, 0xa5, 0xe6, 0x69, 0xf3, 0x41, 0x80, 0xba, 0x01, + 0x8d, 0x17, 0x02, 0x06, 0x00, 0x01, 0xff, 0x4b, 0x13, 0x27, 0xa2, 0x26, + 0x00, 0x49, 0x61, 0x21, 0xa3, 0x26, 0x00, 0x46, 0x16, 0x08, 0xfc, 0x2b, + 0x40, 0x4e, 0x59, 0x77, 0xdf, 0x29, 0x00, 0x05, 0xed, 0x07, 0x66, 0x07, + 0x1a, 0x77, 0x01, 0xff, 0x08, 0xe4, 0x05, 0x36, 0x07, 0x0b, 0xd2, 0x17, + 0x4f, 0x68, 0x70, 0x40, 0x21, 0x00, 0x06, 0x5d, 0x07, 0x01, 0xff, 0x45, + 0x2c, 0x58, 0x3d, 0x21, 0x00, 0x42, 0xe6, 0x05, 0x3c, 0x21, 0x40, 0x49, + 0x02, 0xb7, 0x45, 0x21, 0x00, 0x06, 0x5d, 0x07, 0x01, 0xff, 0xe4, 0x46, + 0x21, 0x00, 0xe5, 0x47, 0x21, 0x00, 0xe9, 0x48, 0x21, 0x00, 0xea, 0x49, + 0x21, 0x40, 0xe3, 0x02, 0x21, 0x00, 0x45, 0x2c, 0x58, 0x3e, 0x21, 0x00, + 0xe8, 0x0d, 0x21, 0x00, 0xee, 0x15, 0x21, 0x00, 0xf0, 0x19, 0x21, 0x80, + 0x0c, 0xf1, 0x1a, 0x21, 0x00, 0xf2, 0x1d, 0x21, 0x00, 0xfa, 0x24, 0x21, + 0x40, 0xe9, 0x3f, 0x21, 0x40, 0x0c, 0x86, 0x28, 0x21, 0x08, 0x9a, 0x00, + 0x01, 0xff, 0x0c, 0x86, 0x28, 0x0c, 0x58, 0xe6, 0x28, 0xfa, 0x2a, 0x00, + 0x55, 0xaa, 0x3c, 0xf9, 0x2a, 0x40, 0x4c, 0x87, 0x00, 0x9c, 0x2a, 0x00, + 0x49, 0xec, 0x00, 0x9b, 0x2a, 0x40, 0x4c, 0x87, 0x00, 0x9a, 0x2a, 0x00, + 0x49, 0xec, 0x00, 0x99, 0x2a, 0x40, 0x4c, 0xfb, 0x8b, 0xdd, 0x02, 0x00, + 0xa3, 0xb1, 0x02, 0xa4, 0xa2, 0x02, 0x50, 0xad, 0x00, 0x3c, 0x20, 0x00, + 0xa8, 0x8d, 0x02, 0x04, 0x35, 0x08, 0xfc, 0x01, 0xac, 0xc8, 0x01, 0x07, + 0x7e, 0xd3, 0xb0, 0x01, 0x4e, 0x31, 0x7a, 0x17, 0x2e, 0x00, 0xb0, 0x8b, + 0x01, 0x4d, 0xa6, 0x34, 0x47, 0x20, 0x00, 0x5b, 0x50, 0x1d, 0x96, 0x29, + 0x00, 0xb3, 0x3e, 0xb5, 0x30, 0x09, 0x32, 0x00, 0x06, 0x4d, 0x7d, 0x8a, + 0x4c, 0xfe, 0x40, 0x43, 0x16, 0x00, 0xf8, 0x23, 0x80, 0x06, 0x44, 0xed, + 0x07, 0x16, 0x20, 0x40, 0x80, 0x01, 0xff, 0x07, 0x3b, 0x01, 0x06, 0x4e, + 0x50, 0x3a, 0xe3, 0x2a, 0x40, 0x4e, 0x50, 0x3a, 0xe5, 0x2a, 0x00, 0x4f, + 0x56, 0x01, 0xab, 0x22, 0x40, 0x44, 0x4e, 0x17, 0xd3, 0x22, 0x00, 0x46, + 0xea, 0xd6, 0xeb, 0x2a, 0x40, 0x4f, 0x1c, 0x71, 0xfd, 0x2a, 0x00, 0x06, + 0xbc, 0x24, 0x29, 0xb4, 0x1b, 0xb5, 0x01, 0xff, 0x44, 0x9b, 0x12, 0xd0, + 0x22, 0x00, 0x46, 0x32, 0xcb, 0xbc, 0x2a, 0x00, 0x46, 0x29, 0x36, 0xd1, + 0x22, 0x00, 0x4d, 0x3e, 0x7e, 0x44, 0x2e, 0x40, 0x4b, 0xb3, 0x98, 0x49, + 0x2e, 0x00, 0x4d, 0x85, 0x73, 0xec, 0x2a, 0x40, 0x4c, 0xa9, 0x0a, 0x4e, + 0x2a, 0x00, 0x45, 0x4d, 0x17, 0x4f, 0x2a, 0x40, 0x43, 0x59, 0x28, 0xfa, + 0x29, 0x00, 0xb2, 0x01, 0xff, 0x46, 0xea, 0xc9, 0xbb, 0x2a, 0x00, 0x43, + 0x29, 0x02, 0x33, 0x20, 0xc0, 0x00, 0x4f, 0x18, 0x05, 0x1e, 0x30, 0x40, + 0x4c, 0x87, 0x00, 0xa2, 0x2a, 0x00, 0x49, 0xec, 0x00, 0xa1, 0x2a, 0xc0, + 0x00, 0x4e, 0x2d, 0x5f, 0xa3, 0x2a, 0x40, 0x5c, 0xa6, 0x17, 0x95, 0x29, + 0x00, 0xaf, 0x01, 0xff, 0x06, 0x2d, 0x22, 0x18, 0xb7, 0x01, 0xff, 0x45, + 0xec, 0x07, 0x17, 0x20, 0x00, 0x8d, 0x01, 0xff, 0x50, 0x61, 0x13, 0x1e, + 0x20, 0x00, 0x59, 0x58, 0x13, 0x42, 0x2e, 0x40, 0x43, 0x1a, 0x00, 0x53, + 0x2a, 0x00, 0x42, 0x0c, 0x00, 0x54, 0x2a, 0x40, 0x44, 0x98, 0x26, 0x2c, + 0x22, 0x00, 0x48, 0xad, 0x0a, 0xd2, 0x22, 0x40, 0x5d, 0x54, 0x13, 0x1f, + 0x20, 0x00, 0x45, 0x97, 0x63, 0x40, 0x2e, 0x40, 0x45, 0xd7, 0xda, 0x21, + 0x20, 0x00, 0x48, 0xf1, 0x38, 0xea, 0x2a, 0x40, 0x07, 0xf6, 0x22, 0x0c, + 0x4a, 0xbb, 0xae, 0x74, 0x2a, 0x00, 0x49, 0x92, 0xc0, 0xbf, 0x27, 0x40, + 0x06, 0xef, 0x06, 0x06, 0x4a, 0x89, 0xae, 0xfe, 0x24, 0x40, 0x45, 0x12, + 0x0b, 0xfc, 0x24, 0x00, 0xa6, 0x29, 0x44, 0xcf, 0x2a, 0xfd, 0x24, 0x00, + 0x43, 0x0e, 0x0b, 0xf5, 0x24, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, + 0x25, 0x01, 0xf7, 0x24, 0x00, 0x42, 0x15, 0x02, 0xf6, 0x24, 0x40, 0x44, + 0xc9, 0x1d, 0xfb, 0x24, 0x00, 0x42, 0x01, 0x26, 0xfa, 0x24, 0x40, 0x43, + 0xd2, 0x05, 0xf9, 0x24, 0x00, 0x43, 0xf6, 0x06, 0xf8, 0x24, 0x40, 0x80, + 0x3f, 0x04, 0x77, 0x00, 0x01, 0xff, 0xa3, 0x2c, 0x45, 0xfa, 0x96, 0x99, + 0x29, 0x00, 0x49, 0x70, 0xbb, 0xe5, 0xfa, 0x01, 0x46, 0x9c, 0xde, 0x13, + 0x2e, 0x00, 0x54, 0x87, 0x0b, 0x16, 0x2e, 0x00, 0xb3, 0x06, 0x54, 0x40, + 0x46, 0x08, 0x2e, 0x40, 0x46, 0x50, 0x31, 0x4a, 0x2e, 0x00, 0x45, 0xd7, + 0x05, 0x1a, 0x2b, 0x40, 0x45, 0x13, 0x03, 0xcc, 0x25, 0x00, 0x44, 0x96, + 0x10, 0x5c, 0x20, 0x40, 0x45, 0x5c, 0x00, 0xd9, 0x02, 0x00, 0x45, 0x91, + 0x1f, 0x38, 0x22, 0x00, 0x48, 0x7e, 0x1d, 0xc5, 0x22, 0x00, 0x44, 0x58, + 0x28, 0x14, 0x22, 0x40, 0x46, 0x8a, 0xbc, 0xab, 0x20, 0x00, 0x43, 0x09, + 0x24, 0xcf, 0xfa, 0x41, 0x0a, 0x0b, 0x00, 0xf4, 0x01, 0x08, 0x32, 0x00, + 0x01, 0xff, 0x45, 0x43, 0x0e, 0x62, 0xf0, 0x01, 0x02, 0x1f, 0x40, 0x01, + 0xff, 0x03, 0x77, 0xf3, 0xc3, 0x01, 0x03, 0x83, 0xf3, 0xa2, 0x01, 0x03, + 0x95, 0xf3, 0x81, 0x01, 0x03, 0xa7, 0xf3, 0x61, 0x03, 0xb3, 0xf3, 0x41, + 0x03, 0xb9, 0xf3, 0x21, 0x03, 0xc5, 0xf3, 0x01, 0xff, 0xd0, 0x8d, 0xf0, + 0x01, 0xd1, 0x8e, 0xf0, 0x01, 0xd2, 0x8f, 0xf0, 0x01, 0xd3, 0x90, 0xf0, + 0x01, 0xd4, 0x91, 0xf0, 0x01, 0xd5, 0x92, 0xf0, 0x01, 0xd6, 0x93, 0xf0, + 0x41, 0xd0, 0x86, 0xf0, 0x01, 0xd1, 0x87, 0xf0, 0x01, 0xd2, 0x88, 0xf0, + 0x01, 0xd3, 0x89, 0xf0, 0x01, 0xd4, 0x8a, 0xf0, 0x01, 0xd5, 0x8b, 0xf0, + 0x01, 0xd6, 0x8c, 0xf0, 0x41, 0xd0, 0x7f, 0xf0, 0x01, 0xd1, 0x80, 0xf0, + 0x01, 0xd2, 0x81, 0xf0, 0x01, 0xd3, 0x82, 0xf0, 0x01, 0xd4, 0x83, 0xf0, + 0x01, 0xd5, 0x84, 0xf0, 0x01, 0xd6, 0x85, 0xf0, 0x41, 0xd0, 0x78, 0xf0, + 0x01, 0xd1, 0x79, 0xf0, 0x01, 0xd2, 0x7a, 0xf0, 0x01, 0xd3, 0x7b, 0xf0, + 0x01, 0xd4, 0x7c, 0xf0, 0x01, 0xd5, 0x7d, 0xf0, 0x01, 0xd6, 0x7e, 0xf0, + 0x41, 0xd0, 0x71, 0xf0, 0x01, 0xd1, 0x72, 0xf0, 0x01, 0xd2, 0x73, 0xf0, + 0x01, 0xd3, 0x74, 0xf0, 0x01, 0xd4, 0x75, 0xf0, 0x01, 0xd5, 0x76, 0xf0, + 0x01, 0xd6, 0x77, 0xf0, 0x41, 0xd0, 0x6a, 0xf0, 0x01, 0xd1, 0x6b, 0xf0, + 0x01, 0xd2, 0x6c, 0xf0, 0x01, 0xd3, 0x6d, 0xf0, 0x01, 0xd4, 0x6e, 0xf0, + 0x01, 0xd5, 0x6f, 0xf0, 0x01, 0xd6, 0x70, 0xf0, 0x41, 0xd0, 0x63, 0xf0, + 0x01, 0xd1, 0x64, 0xf0, 0x01, 0xd2, 0x65, 0xf0, 0x01, 0xd3, 0x66, 0xf0, + 0x01, 0xd4, 0x67, 0xf0, 0x01, 0xd5, 0x68, 0xf0, 0x01, 0xd6, 0x69, 0xf0, + 0x41, 0x45, 0x43, 0x0e, 0x30, 0xf0, 0x01, 0x02, 0x1f, 0x40, 0x01, 0xff, + 0x03, 0x77, 0xf3, 0xc3, 0x01, 0x03, 0x83, 0xf3, 0xa2, 0x01, 0x03, 0x95, + 0xf3, 0x81, 0x01, 0x03, 0xa7, 0xf3, 0x61, 0x03, 0xb3, 0xf3, 0x41, 0x03, + 0xb9, 0xf3, 0x21, 0x03, 0xc5, 0xf3, 0x01, 0xff, 0xd0, 0x5b, 0xf0, 0x01, + 0xd1, 0x5c, 0xf0, 0x01, 0xd2, 0x5d, 0xf0, 0x01, 0xd3, 0x5e, 0xf0, 0x01, + 0xd4, 0x5f, 0xf0, 0x01, 0xd5, 0x60, 0xf0, 0x01, 0xd6, 0x61, 0xf0, 0x41, + 0xd0, 0x54, 0xf0, 0x01, 0xd1, 0x55, 0xf0, 0x01, 0xd2, 0x56, 0xf0, 0x01, + 0xd3, 0x57, 0xf0, 0x01, 0xd4, 0x58, 0xf0, 0x01, 0xd5, 0x59, 0xf0, 0x01, + 0xd6, 0x5a, 0xf0, 0x41, 0xd0, 0x4d, 0xf0, 0x01, 0xd1, 0x4e, 0xf0, 0x01, + 0xd2, 0x4f, 0xf0, 0x01, 0xd3, 0x50, 0xf0, 0x01, 0xd4, 0x51, 0xf0, 0x01, + 0xd5, 0x52, 0xf0, 0x01, 0xd6, 0x53, 0xf0, 0x41, 0xd0, 0x46, 0xf0, 0x01, + 0xd1, 0x47, 0xf0, 0x01, 0xd2, 0x48, 0xf0, 0x01, 0xd3, 0x49, 0xf0, 0x01, + 0xd4, 0x4a, 0xf0, 0x01, 0xd5, 0x4b, 0xf0, 0x01, 0xd6, 0x4c, 0xf0, 0x41, + 0xd0, 0x3f, 0xf0, 0x01, 0xd1, 0x40, 0xf0, 0x01, 0xd2, 0x41, 0xf0, 0x01, + 0xd3, 0x42, 0xf0, 0x01, 0xd4, 0x43, 0xf0, 0x01, 0xd5, 0x44, 0xf0, 0x01, + 0xd6, 0x45, 0xf0, 0x41, 0xd0, 0x38, 0xf0, 0x01, 0xd1, 0x39, 0xf0, 0x01, + 0xd2, 0x3a, 0xf0, 0x01, 0xd3, 0x3b, 0xf0, 0x01, 0xd4, 0x3c, 0xf0, 0x01, + 0xd5, 0x3d, 0xf0, 0x01, 0xd6, 0x3e, 0xf0, 0x41, 0xd0, 0x31, 0xf0, 0x01, + 0xd1, 0x32, 0xf0, 0x01, 0xd2, 0x33, 0xf0, 0x01, 0xd3, 0x34, 0xf0, 0x01, + 0xd4, 0x35, 0xf0, 0x01, 0xd5, 0x36, 0xf0, 0x01, 0xd6, 0x37, 0xf0, 0x41, + 0x48, 0x2d, 0x0e, 0x24, 0x00, 0x00, 0x44, 0x11, 0xf2, 0x2c, 0xf4, 0x41, + 0x45, 0x0b, 0x08, 0x36, 0xf4, 0x01, 0x03, 0x71, 0x00, 0x01, 0xff, 0x51, + 0xdc, 0x57, 0x3b, 0x18, 0x01, 0x07, 0xec, 0x05, 0x59, 0x05, 0x5a, 0x03, + 0x38, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x25, 0xe5, 0x33, 0x18, 0x01, + 0xe9, 0x2d, 0x18, 0x81, 0x18, 0xef, 0x35, 0x18, 0x01, 0xf5, 0x2f, 0x18, + 0x81, 0x0b, 0x49, 0x22, 0xc1, 0x31, 0x18, 0xc1, 0x00, 0xf2, 0x32, 0x18, + 0x41, 0xf5, 0x30, 0x18, 0x41, 0xe9, 0x2e, 0x18, 0x41, 0xe1, 0x2c, 0x18, + 0x01, 0xe9, 0x34, 0x18, 0x01, 0xf5, 0x36, 0x18, 0x41, 0x48, 0x3c, 0x16, + 0x37, 0x18, 0x01, 0x45, 0x3f, 0x3f, 0x3a, 0x18, 0x01, 0x02, 0x02, 0x00, + 0x01, 0xff, 0x44, 0xe5, 0x23, 0x39, 0x18, 0x01, 0x45, 0xec, 0x4b, 0x38, + 0x18, 0x41, 0xe1, 0x00, 0x18, 0x81, 0xee, 0x01, 0xa2, 0xe1, 0x01, 0xa3, + 0xd4, 0x01, 0xa4, 0xbb, 0x01, 0xe5, 0x06, 0x18, 0x01, 0xa7, 0xaa, 0x01, + 0x42, 0x22, 0x00, 0x2a, 0x18, 0x01, 0xe9, 0x02, 0x18, 0x81, 0x9a, 0x01, + 0xaa, 0x8d, 0x01, 0xab, 0x80, 0x01, 0x42, 0x74, 0x00, 0x25, 0x18, 0x01, + 0x42, 0x6c, 0x00, 0x22, 0x18, 0x01, 0xae, 0x5c, 0xef, 0x08, 0x18, 0x01, + 0xb0, 0x4c, 0xb2, 0x40, 0xb3, 0x2e, 0xb4, 0x15, 0xf5, 0x04, 0x18, 0x81, + 0x0c, 0x42, 0xf5, 0x0a, 0x26, 0x18, 0x01, 0x42, 0xbc, 0x22, 0x23, 0x18, + 0x41, 0xf5, 0x05, 0x18, 0x41, 0xe1, 0x19, 0x18, 0x01, 0x42, 0x22, 0x00, + 0x1a, 0x18, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x14, 0x18, 0x01, 0x42, 0x22, + 0x00, 0x15, 0x18, 0x41, 0xe1, 0x29, 0x18, 0x01, 0x42, 0x22, 0x00, 0x27, + 0x18, 0x01, 0x42, 0x40, 0x06, 0x28, 0x18, 0x41, 0xe1, 0x24, 0x18, 0x01, + 0x42, 0x71, 0x00, 0x2b, 0x18, 0x41, 0xe1, 0x1e, 0x18, 0x01, 0x42, 0x22, + 0x00, 0x1f, 0x18, 0x41, 0xe1, 0x1d, 0x18, 0x01, 0x42, 0x24, 0x02, 0x0e, + 0x18, 0x01, 0x42, 0x2a, 0x05, 0x18, 0x18, 0x01, 0x42, 0xbc, 0x22, 0x13, + 0x18, 0x41, 0xe1, 0x0a, 0x18, 0x01, 0x42, 0x22, 0x00, 0x0b, 0x18, 0x41, + 0xe1, 0x11, 0x18, 0x01, 0x42, 0x22, 0x00, 0x12, 0x18, 0x41, 0xe9, 0x03, + 0x18, 0x41, 0xe1, 0x0c, 0x18, 0x01, 0x42, 0x22, 0x00, 0x0d, 0x18, 0x41, + 0xe1, 0x1b, 0x18, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x1c, 0x18, 0x41, + 0xe1, 0x16, 0x18, 0x01, 0x42, 0x22, 0x00, 0x17, 0x18, 0x41, 0xe1, 0x0f, + 0x18, 0x01, 0x42, 0x22, 0x00, 0x10, 0x18, 0x41, 0xe1, 0x20, 0x18, 0x01, + 0x42, 0x22, 0x00, 0x21, 0x18, 0x41, 0xe1, 0x01, 0x18, 0x01, 0xe9, 0x07, + 0x18, 0x01, 0xf5, 0x09, 0x18, 0x41, 0x0b, 0x4a, 0x9a, 0x37, 0x46, 0x00, + 0x00, 0x24, 0x22, 0x80, 0x2a, 0x45, 0x78, 0xe6, 0xae, 0x22, 0x00, 0x02, + 0xdf, 0x0c, 0x0d, 0x47, 0x30, 0xcb, 0x81, 0x22, 0xc0, 0x00, 0x49, 0xf2, + 0x28, 0xe1, 0x22, 0x40, 0x45, 0x57, 0x36, 0x80, 0x22, 0x80, 0x06, 0x43, + 0x5e, 0x00, 0xac, 0x22, 0x40, 0x49, 0xf2, 0x28, 0xe0, 0x22, 0x40, 0x5d, + 0xd7, 0x14, 0xee, 0x2a, 0x40, 0x46, 0xb4, 0x05, 0x0c, 0x22, 0x00, 0x4f, + 0xe9, 0x53, 0xeb, 0x22, 0xc0, 0x00, 0x49, 0xf2, 0x28, 0xed, 0x22, 0x40, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x47, 0x04, 0x8b, 0xbb, 0xf5, 0x01, 0x44, + 0x7c, 0x30, 0xb9, 0xf5, 0xc1, 0x00, 0x4c, 0xff, 0x8a, 0xba, 0xf5, 0x41, + 0xa1, 0xaa, 0x09, 0xa5, 0x85, 0x09, 0x50, 0x36, 0x63, 0x4f, 0x22, 0x00, + 0xa7, 0xc7, 0x06, 0x4e, 0xdd, 0x79, 0x31, 0x23, 0x00, 0x06, 0x42, 0xde, + 0xce, 0x04, 0x05, 0x89, 0x0d, 0xbd, 0x04, 0xb3, 0x8f, 0x04, 0x48, 0xd0, + 0xcb, 0x03, 0x30, 0x00, 0xb6, 0x17, 0x47, 0xc2, 0xd7, 0x94, 0xfa, 0x01, + 0x04, 0x6d, 0xf3, 0x01, 0xff, 0x44, 0x0c, 0x08, 0x35, 0xf6, 0x01, 0x46, + 0x16, 0x08, 0xab, 0xf4, 0x41, 0x09, 0x97, 0xb8, 0x2d, 0xa9, 0x06, 0x4b, + 0xe8, 0xa0, 0xae, 0x26, 0x40, 0x43, 0xf6, 0x27, 0x23, 0x22, 0x00, 0x47, + 0x85, 0xd3, 0x3f, 0xf9, 0x01, 0x05, 0x8b, 0x30, 0x01, 0xff, 0xb3, 0x06, + 0x45, 0x28, 0x02, 0xc7, 0x22, 0x40, 0x43, 0x5b, 0x03, 0xf7, 0x00, 0x00, + 0x44, 0x49, 0x0e, 0x15, 0x22, 0x40, 0xa4, 0xf0, 0x02, 0x50, 0xb6, 0x62, + 0x46, 0x19, 0x01, 0x4a, 0x39, 0x9c, 0x45, 0x19, 0x01, 0x4a, 0xeb, 0xab, + 0x41, 0x19, 0x01, 0x07, 0xec, 0x05, 0x64, 0x07, 0x4c, 0x33, 0x54, 0x53, + 0x2a, 0x4c, 0x3f, 0x19, 0x01, 0x05, 0x5a, 0x03, 0x32, 0xb6, 0x01, 0xff, + 0x45, 0xe4, 0x23, 0x3e, 0x19, 0x01, 0x0a, 0x41, 0x77, 0x01, 0xff, 0xa1, + 0x1a, 0xe5, 0x35, 0x19, 0x01, 0xe9, 0x31, 0x19, 0x81, 0x0d, 0xef, 0x38, + 0x19, 0x01, 0xf5, 0x33, 0x19, 0xc1, 0x00, 0xf5, 0x34, 0x19, 0x41, 0xe9, + 0x32, 0x19, 0x41, 0xe1, 0x30, 0x19, 0x01, 0xe9, 0x37, 0x19, 0x41, 0x48, + 0x3c, 0x16, 0x3b, 0x19, 0x01, 0x4b, 0xd7, 0x23, 0x3c, 0x19, 0x01, 0x47, + 0x71, 0xd1, 0x3d, 0x19, 0x01, 0x45, 0x3f, 0x3f, 0x43, 0x19, 0x41, 0x42, + 0x71, 0x00, 0x42, 0x19, 0x01, 0x42, 0xbc, 0x22, 0x40, 0x19, 0x41, 0xe1, + 0x00, 0x19, 0x81, 0xec, 0x01, 0xa2, 0xdf, 0x01, 0xa3, 0xd2, 0x01, 0xa4, + 0xb9, 0x01, 0xe5, 0x06, 0x19, 0x01, 0xa7, 0xa8, 0x01, 0x42, 0x22, 0x00, + 0x2d, 0x19, 0x01, 0xe9, 0x02, 0x19, 0x81, 0x98, 0x01, 0x42, 0x56, 0x19, + 0x13, 0x19, 0x01, 0xab, 0x85, 0x01, 0xac, 0x79, 0x42, 0x6c, 0x00, 0x24, + 0x19, 0x01, 0xae, 0x5b, 0xef, 0x09, 0x19, 0x01, 0xb0, 0x4b, 0x42, 0x71, + 0x00, 0x27, 0x19, 0x01, 0xb3, 0x33, 0xb4, 0x21, 0xf5, 0x04, 0x19, 0x81, + 0x18, 0x42, 0xf5, 0x0a, 0x29, 0x19, 0x01, 0xb9, 0x06, 0x42, 0x59, 0x00, + 0x2f, 0x19, 0x41, 0xe1, 0x25, 0x19, 0x01, 0x42, 0xbc, 0x22, 0x26, 0x19, + 0x41, 0xf5, 0x05, 0x19, 0x41, 0xe1, 0x1b, 0x19, 0x01, 0x42, 0x22, 0x00, + 0x1c, 0x19, 0x01, 0x42, 0x12, 0x00, 0x16, 0x19, 0x41, 0xe1, 0x2c, 0x19, + 0x01, 0x42, 0x22, 0x00, 0x2a, 0x19, 0x01, 0x42, 0x40, 0x06, 0x2b, 0x19, + 0x41, 0xe1, 0x20, 0x19, 0x01, 0x42, 0x22, 0x00, 0x21, 0x19, 0x41, 0xe1, + 0x1f, 0x19, 0x01, 0x42, 0x24, 0x02, 0x10, 0x19, 0x01, 0x42, 0x2a, 0x05, + 0x1a, 0x19, 0x01, 0x42, 0xbc, 0x22, 0x15, 0x19, 0x41, 0xe1, 0x28, 0x19, + 0x01, 0x42, 0x74, 0x00, 0x2e, 0x19, 0x41, 0xe1, 0x0c, 0x19, 0x01, 0x42, + 0x22, 0x00, 0x0d, 0x19, 0x41, 0xe9, 0x03, 0x19, 0x41, 0xe1, 0x0e, 0x19, + 0x01, 0x42, 0x22, 0x00, 0x0f, 0x19, 0x41, 0xe1, 0x1d, 0x19, 0x01, 0xa4, + 0x06, 0x42, 0x22, 0x00, 0x1e, 0x19, 0x41, 0xe1, 0x18, 0x19, 0x01, 0x42, + 0x22, 0x00, 0x19, 0x19, 0x41, 0xe1, 0x11, 0x19, 0x01, 0x42, 0x22, 0x00, + 0x12, 0x19, 0x41, 0xe1, 0x22, 0x19, 0x01, 0x42, 0x22, 0x00, 0x23, 0x19, + 0x41, 0xe1, 0x01, 0x19, 0x41, 0x05, 0xf0, 0x06, 0x06, 0x4b, 0x09, 0xa1, + 0x44, 0x19, 0x41, 0x45, 0x12, 0x0b, 0x58, 0x19, 0x01, 0xa6, 0x2e, 0x44, + 0xcf, 0x2a, 0x59, 0x19, 0x01, 0x43, 0x0e, 0x0b, 0x51, 0x19, 0x01, 0xb3, + 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x50, 0x19, 0x41, 0x44, 0x25, 0x01, + 0x53, 0x19, 0x01, 0x42, 0x15, 0x02, 0x52, 0x19, 0x41, 0x44, 0xc9, 0x1d, + 0x57, 0x19, 0x01, 0x42, 0x01, 0x26, 0x56, 0x19, 0x41, 0x43, 0xd2, 0x05, + 0x55, 0x19, 0x01, 0x43, 0xf6, 0x06, 0x54, 0x19, 0x41, 0xa1, 0x12, 0x5b, + 0xc8, 0x1a, 0x82, 0x23, 0x00, 0x4b, 0x9c, 0x9c, 0x78, 0xf9, 0x01, 0x4b, + 0xa8, 0xa3, 0xea, 0xfa, 0x41, 0x48, 0x30, 0xc4, 0xcd, 0x26, 0x00, 0x09, + 0x25, 0xbe, 0x01, 0xff, 0x51, 0xdb, 0x58, 0x25, 0xf6, 0x01, 0x44, 0x0c, + 0x08, 0x1e, 0xf6, 0x41, 0x57, 0x13, 0x2e, 0x93, 0x23, 0x00, 0x43, 0xae, + 0x02, 0xaf, 0xf3, 0x41, 0x13, 0xc0, 0x48, 0x9d, 0x01, 0x11, 0xa4, 0x5c, + 0x01, 0xff, 0x06, 0xef, 0x06, 0x57, 0x4a, 0x89, 0xae, 0x7f, 0x27, 0x00, + 0x0b, 0xc8, 0x48, 0x01, 0xff, 0x06, 0xef, 0x06, 0x06, 0x4a, 0x89, 0xae, + 0x93, 0x27, 0x40, 0x45, 0x12, 0x0b, 0x91, 0x27, 0x00, 0xa6, 0x2e, 0x44, + 0xcf, 0x2a, 0x92, 0x27, 0x00, 0x43, 0x0e, 0x0b, 0x8a, 0x27, 0x00, 0xb3, + 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x0c, 0xf1, 0x41, 0x44, 0x25, 0x01, + 0x8c, 0x27, 0x00, 0x42, 0x15, 0x02, 0x8b, 0x27, 0x40, 0x44, 0xc9, 0x1d, + 0x90, 0x27, 0x00, 0x42, 0x01, 0x26, 0x8f, 0x27, 0x40, 0x43, 0xd2, 0x05, + 0x8e, 0x27, 0x00, 0x43, 0xf6, 0x06, 0x8d, 0x27, 0x40, 0x45, 0x12, 0x0b, + 0x7d, 0x27, 0x00, 0xa6, 0x29, 0x44, 0xcf, 0x2a, 0x7e, 0x27, 0x00, 0x43, + 0x0e, 0x0b, 0x76, 0x27, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, + 0x01, 0x78, 0x27, 0x00, 0x42, 0x15, 0x02, 0x77, 0x27, 0x40, 0x44, 0xc9, + 0x1d, 0x7c, 0x27, 0x00, 0x42, 0x01, 0x26, 0x7b, 0x27, 0x40, 0x43, 0xd2, + 0x05, 0x7a, 0x27, 0x00, 0x43, 0xf6, 0x06, 0x79, 0x27, 0x40, 0x06, 0xef, + 0x06, 0x06, 0x4a, 0x89, 0xae, 0x89, 0x27, 0x40, 0x45, 0x12, 0x0b, 0x87, + 0x27, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x88, 0x27, 0x00, 0x43, 0x0e, + 0x0b, 0x80, 0x27, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x0b, + 0xf1, 0x41, 0x44, 0x25, 0x01, 0x82, 0x27, 0x00, 0x42, 0x15, 0x02, 0x81, + 0x27, 0x40, 0x44, 0xc9, 0x1d, 0x86, 0x27, 0x00, 0x42, 0x01, 0x26, 0x85, + 0x27, 0x40, 0x43, 0xd2, 0x05, 0x84, 0x27, 0x00, 0x43, 0xf6, 0x06, 0x83, + 0x27, 0x40, 0x03, 0xf2, 0x06, 0x4c, 0x08, 0x07, 0x96, 0x01, 0xff, 0x45, + 0x52, 0x72, 0x05, 0xd3, 0x81, 0x2f, 0x09, 0x39, 0xb9, 0x1f, 0xa8, 0x11, + 0x08, 0xb8, 0xc7, 0x01, 0xff, 0x43, 0x1c, 0x01, 0x8e, 0x26, 0x00, 0x42, + 0x9e, 0x01, 0x8d, 0x26, 0x40, 0x4d, 0x50, 0x82, 0x01, 0xd3, 0x01, 0x4a, + 0xa3, 0xb2, 0x02, 0xd3, 0x41, 0x43, 0x1c, 0x01, 0x8c, 0x26, 0x00, 0x42, + 0x9e, 0x01, 0x8f, 0x26, 0x40, 0x04, 0x7a, 0x8e, 0x01, 0xff, 0x45, 0x8a, + 0x7b, 0x03, 0xd3, 0x01, 0x44, 0x4d, 0xa4, 0x04, 0xd3, 0x41, 0x45, 0x12, + 0x0b, 0x38, 0x00, 0x80, 0xce, 0x01, 0xa6, 0x9f, 0x01, 0x44, 0xcf, 0x2a, + 0x39, 0x00, 0x80, 0x88, 0x01, 0x43, 0x0e, 0x0b, 0x31, 0x00, 0x80, 0x72, + 0xb3, 0x44, 0xb4, 0x16, 0x44, 0x43, 0x1e, 0x30, 0x00, 0xc0, 0x00, 0x80, + 0x01, 0xff, 0x45, 0x13, 0x05, 0x01, 0xf1, 0x01, 0x49, 0x81, 0x16, 0x00, + 0xf1, 0x41, 0x44, 0x25, 0x01, 0x33, 0x00, 0x80, 0x16, 0x42, 0x15, 0x02, + 0x32, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x45, 0x13, 0x05, 0x03, 0xf1, + 0x01, 0x49, 0x81, 0x16, 0x89, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0x13, + 0x05, 0x04, 0xf1, 0x01, 0x49, 0x81, 0x16, 0x8a, 0x24, 0x40, 0x44, 0xc9, + 0x1d, 0x37, 0x00, 0x80, 0x16, 0x42, 0x01, 0x26, 0x36, 0x00, 0xc0, 0x00, + 0x80, 0x01, 0xff, 0x45, 0x13, 0x05, 0x07, 0xf1, 0x01, 0x49, 0x81, 0x16, + 0x8d, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0x13, 0x05, 0x08, 0xf1, 0x01, + 0x49, 0x81, 0x16, 0x8e, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0x13, 0x05, + 0x02, 0xf1, 0x01, 0x49, 0x81, 0x16, 0x88, 0x24, 0x40, 0x80, 0x01, 0xff, + 0x45, 0x13, 0x05, 0x0a, 0xf1, 0x01, 0x49, 0x81, 0x16, 0x90, 0x24, 0x40, + 0x43, 0xd2, 0x05, 0x35, 0x00, 0x80, 0x16, 0x43, 0xf6, 0x06, 0x34, 0x00, + 0xc0, 0x00, 0x80, 0x01, 0xff, 0x45, 0x13, 0x05, 0x05, 0xf1, 0x01, 0x49, + 0x81, 0x16, 0x8b, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0x13, 0x05, 0x06, + 0xf1, 0x01, 0x49, 0x81, 0x16, 0x8c, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, + 0x13, 0x05, 0x09, 0xf1, 0x01, 0x49, 0x81, 0x16, 0x8f, 0x24, 0x40, 0x06, + 0x12, 0xd8, 0x06, 0x4e, 0xf1, 0x7b, 0xf2, 0xf6, 0x41, 0xd1, 0x80, 0x26, + 0x00, 0xd2, 0x81, 0x26, 0x00, 0xd3, 0x82, 0x26, 0x00, 0xd4, 0x83, 0x26, + 0x00, 0xd5, 0x84, 0x26, 0x00, 0xd6, 0x85, 0x26, 0x40, 0x46, 0xba, 0x23, + 0xa8, 0x00, 0x00, 0x55, 0x89, 0x21, 0x43, 0xcc, 0x01, 0xad, 0x01, 0xff, + 0x49, 0xa9, 0xb8, 0x00, 0x23, 0x00, 0x04, 0x62, 0x57, 0x01, 0xff, 0x48, + 0x7e, 0x1d, 0xc4, 0x22, 0x00, 0x57, 0x21, 0x31, 0xa0, 0xf4, 0x01, 0x46, + 0x64, 0xe0, 0x9c, 0xf7, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, 0x51, 0xa8, + 0x58, 0x19, 0x2b, 0x00, 0x4f, 0x78, 0x6f, 0x16, 0x2b, 0x00, 0x50, 0xb6, + 0x66, 0x17, 0x2b, 0x00, 0x4e, 0x33, 0x7d, 0x18, 0x2b, 0x40, 0x49, 0xb5, + 0xb5, 0xcf, 0xf9, 0x01, 0xa3, 0x9f, 0x0d, 0x42, 0x33, 0x00, 0x8c, 0xf9, + 0x01, 0x05, 0xf1, 0xaa, 0x82, 0x0d, 0xac, 0xed, 0x0c, 0xae, 0xd8, 0x0b, + 0x4e, 0x03, 0x7b, 0xec, 0xf3, 0x01, 0x55, 0xa6, 0x3d, 0xda, 0xf3, 0x01, + 0xb3, 0xe5, 0x07, 0xb6, 0x01, 0xff, 0x08, 0xd2, 0xc0, 0x26, 0x0c, 0x4a, + 0x8a, 0x01, 0xff, 0x44, 0xf5, 0x06, 0x14, 0x00, 0x00, 0x43, 0x0e, 0x0b, + 0x11, 0x00, 0x00, 0x46, 0x96, 0x67, 0x90, 0x00, 0x00, 0xb4, 0x01, 0xff, + 0x44, 0x25, 0x01, 0x13, 0x00, 0x00, 0x42, 0x15, 0x02, 0x12, 0x00, 0x40, + 0xa1, 0xa9, 0x07, 0x45, 0x66, 0x7d, 0xfa, 0xa8, 0x00, 0xa4, 0xce, 0x06, + 0xa7, 0xbf, 0x06, 0x04, 0xe6, 0x01, 0xa7, 0x06, 0x47, 0x20, 0xd2, 0xfd, + 0xa8, 0x00, 0x07, 0xec, 0x05, 0xc9, 0x02, 0x42, 0x14, 0x05, 0x50, 0x09, + 0x00, 0xb3, 0x84, 0x01, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x69, 0x07, + 0x36, 0x61, 0x57, 0xe5, 0x47, 0x09, 0x00, 0xe9, 0x3f, 0x09, 0x80, 0x4a, + 0xef, 0x4b, 0x09, 0x80, 0x3b, 0x4f, 0xee, 0x71, 0x4e, 0x09, 0x00, 0x06, + 0x33, 0x07, 0x29, 0xf5, 0x41, 0x09, 0x80, 0x17, 0x08, 0x22, 0xc1, 0x01, + 0xff, 0xec, 0x62, 0x09, 0x80, 0x09, 0xf2, 0x43, 0x09, 0xc0, 0x00, 0xf2, + 0x44, 0x09, 0x40, 0xec, 0x63, 0x09, 0x40, 0xe5, 0x56, 0x09, 0x00, 0xf5, + 0x42, 0x09, 0xc0, 0x00, 0xe5, 0x57, 0x09, 0x40, 0xe5, 0x46, 0x09, 0x00, + 0xef, 0x4a, 0x09, 0x40, 0xe5, 0x3a, 0x09, 0x00, 0x42, 0x60, 0x51, 0x3b, + 0x09, 0x40, 0xe9, 0x40, 0x09, 0x40, 0xe5, 0x45, 0x09, 0x00, 0x46, 0xd6, + 0xdd, 0x55, 0x09, 0x00, 0xef, 0x49, 0x09, 0x40, 0xe1, 0x3e, 0x09, 0x00, + 0xe9, 0x48, 0x09, 0x00, 0xf5, 0x4c, 0x09, 0x00, 0xf7, 0x4f, 0x09, 0x00, + 0xf9, 0xff, 0xa8, 0x40, 0x04, 0x5b, 0x03, 0x11, 0x0b, 0xbe, 0xa3, 0x01, + 0xff, 0x48, 0xc9, 0x7c, 0x52, 0x09, 0x00, 0x46, 0xcb, 0x7c, 0x51, 0x09, + 0x40, 0xa1, 0x98, 0x01, 0x45, 0xd9, 0x2a, 0x02, 0x1b, 0x81, 0x8a, 0x01, + 0x4b, 0xd7, 0x23, 0x01, 0x09, 0x80, 0x66, 0x59, 0xd0, 0x23, 0xf4, 0xa8, + 0x00, 0x4e, 0xad, 0x77, 0x04, 0x1b, 0x81, 0x53, 0x50, 0x66, 0x63, 0x71, + 0x09, 0x00, 0x54, 0x84, 0x43, 0x00, 0x09, 0x00, 0x45, 0xad, 0xe8, 0x09, + 0x1b, 0x01, 0x45, 0x3f, 0x3f, 0x3c, 0x09, 0x00, 0x48, 0x2f, 0x7c, 0xf8, + 0xa8, 0x00, 0x58, 0xc6, 0x2a, 0x08, 0x1b, 0x01, 0xb3, 0x21, 0x02, 0x02, + 0x00, 0x11, 0x08, 0xd9, 0x31, 0x01, 0xff, 0x4f, 0x11, 0x6d, 0x06, 0x1b, + 0x01, 0x4f, 0xcf, 0x2a, 0x07, 0x1b, 0x41, 0x44, 0xe5, 0x23, 0x4d, 0x09, + 0x00, 0x45, 0xec, 0x4b, 0x03, 0x09, 0x40, 0x46, 0xd9, 0xd5, 0xfc, 0xa8, + 0x00, 0x52, 0x79, 0x54, 0xf2, 0xa8, 0x40, 0x4a, 0xa7, 0x24, 0x05, 0x1b, + 0x41, 0x80, 0x01, 0xff, 0x48, 0xae, 0x88, 0xf7, 0xa8, 0x00, 0xb4, 0x06, + 0x46, 0xe3, 0x23, 0xf3, 0xa8, 0x40, 0x44, 0x25, 0x01, 0xf6, 0xa8, 0x00, + 0x42, 0x15, 0x02, 0xf5, 0xa8, 0x40, 0x4a, 0xa7, 0x24, 0x03, 0x1b, 0x41, + 0x47, 0x3d, 0x16, 0x02, 0x09, 0x00, 0x47, 0xaf, 0x88, 0x3d, 0x09, 0x40, + 0xe1, 0x05, 0x09, 0x80, 0xb9, 0x03, 0xa2, 0xa6, 0x03, 0xa3, 0x87, 0x03, + 0xa4, 0xe2, 0x02, 0xe5, 0x0f, 0x09, 0x00, 0x42, 0x0c, 0x08, 0x5e, 0x09, + 0x00, 0xa7, 0xb9, 0x02, 0xa8, 0xac, 0x02, 0xe9, 0x07, 0x09, 0x80, 0xa2, + 0x02, 0xaa, 0x8f, 0x02, 0xab, 0xfb, 0x01, 0xac, 0xe7, 0x01, 0x42, 0x6c, + 0x00, 0x2e, 0x09, 0x80, 0xd9, 0x01, 0xae, 0xba, 0x01, 0xef, 0x13, 0x09, + 0x80, 0xaa, 0x01, 0xb0, 0x9d, 0x01, 0x42, 0x43, 0x14, 0x58, 0x09, 0x00, + 0xb2, 0x84, 0x01, 0xb3, 0x61, 0xb4, 0x48, 0xf5, 0x09, 0x09, 0x80, 0x36, + 0xb6, 0x19, 0xb9, 0x0d, 0xba, 0x01, 0xff, 0xe1, 0x5b, 0x09, 0x00, 0x42, + 0x22, 0x00, 0x79, 0x09, 0x40, 0xe1, 0x2f, 0x09, 0x00, 0x42, 0xbc, 0x22, + 0x5f, 0x09, 0x40, 0xe1, 0x35, 0x09, 0x00, 0x07, 0x23, 0xc1, 0x01, 0xff, + 0xec, 0x0c, 0x09, 0x80, 0x09, 0xf2, 0x0b, 0x09, 0xc0, 0x00, 0xf2, 0x60, + 0x09, 0x40, 0xec, 0x61, 0x09, 0x40, 0xe5, 0x76, 0x09, 0x00, 0xf5, 0x0a, + 0x09, 0xc0, 0x00, 0xe5, 0x77, 0x09, 0x40, 0xe1, 0x24, 0x09, 0x00, 0x42, + 0x22, 0x00, 0x25, 0x09, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x1f, 0x09, 0x00, + 0x42, 0x22, 0x00, 0x20, 0x09, 0x40, 0xe1, 0x38, 0x09, 0x00, 0xa8, 0x06, + 0x42, 0x40, 0x06, 0x37, 0x09, 0x40, 0xe1, 0x36, 0x09, 0x00, 0x04, 0x35, + 0x07, 0x01, 0xff, 0xe1, 0x04, 0x09, 0x00, 0xe5, 0x0e, 0x09, 0x00, 0xef, + 0x12, 0x09, 0x40, 0xe1, 0x30, 0x09, 0x00, 0x42, 0x22, 0x00, 0x5d, 0x09, + 0x00, 0x42, 0x71, 0x00, 0x31, 0x09, 0x40, 0xe1, 0x2a, 0x09, 0x00, 0x42, + 0x22, 0x00, 0x2b, 0x09, 0x40, 0xe5, 0x73, 0x09, 0x00, 0x42, 0x60, 0x51, + 0x74, 0x09, 0x40, 0xe1, 0x28, 0x09, 0x00, 0x42, 0x24, 0x02, 0x19, 0x09, + 0x00, 0xae, 0x06, 0x42, 0xbc, 0x22, 0x1e, 0x09, 0x40, 0xe1, 0x23, 0x09, + 0x00, 0x42, 0x2a, 0x05, 0x29, 0x09, 0x40, 0x49, 0x0f, 0xbf, 0x78, 0x09, + 0x40, 0xe1, 0x32, 0x09, 0x00, 0xac, 0x01, 0xff, 0xe1, 0x33, 0x09, 0x00, + 0x42, 0x74, 0x00, 0x34, 0x09, 0x40, 0xe1, 0x15, 0x09, 0x00, 0xa8, 0x01, + 0xff, 0xe1, 0x16, 0x09, 0x00, 0x42, 0x22, 0x00, 0x59, 0x09, 0x40, 0xe1, + 0x1c, 0x09, 0x00, 0x42, 0x22, 0x00, 0x1d, 0x09, 0x00, 0x42, 0x56, 0x19, + 0x7c, 0x09, 0x40, 0xe9, 0x08, 0x09, 0x40, 0xe1, 0x39, 0x09, 0x00, 0x47, + 0xa6, 0xd0, 0x7a, 0x09, 0x40, 0xe1, 0x17, 0x09, 0x00, 0x42, 0x24, 0x02, + 0x7b, 0x09, 0x00, 0xa8, 0x06, 0x4b, 0xcf, 0x28, 0x7d, 0x09, 0x40, 0xe1, + 0x18, 0x09, 0x00, 0x42, 0x22, 0x00, 0x5a, 0x09, 0x40, 0xe1, 0x26, 0x09, + 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x27, 0x09, 0x40, 0xe1, 0x21, 0x09, + 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x22, 0x09, 0x40, 0xe1, 0x7e, 0x09, + 0x00, 0x42, 0x22, 0x00, 0x5c, 0x09, 0x40, 0xe1, 0x1a, 0x09, 0x80, 0x06, + 0x42, 0x22, 0x00, 0x1b, 0x09, 0x40, 0x05, 0x38, 0x61, 0x01, 0xff, 0xe1, + 0x72, 0x09, 0x00, 0xe5, 0x0d, 0x09, 0x00, 0xef, 0x11, 0x09, 0x40, 0xe1, + 0x2c, 0x09, 0x00, 0x42, 0x16, 0x00, 0x7f, 0x09, 0x00, 0x42, 0x22, 0x00, + 0x2d, 0x09, 0x40, 0xe1, 0x06, 0x09, 0x00, 0xe9, 0x10, 0x09, 0x00, 0xf5, + 0x14, 0x09, 0x00, 0xf7, 0x75, 0x09, 0x00, 0xf9, 0xfe, 0xa8, 0x40, 0x45, + 0xb8, 0x00, 0x00, 0x1b, 0x81, 0x06, 0x46, 0x52, 0x05, 0xfb, 0xa8, 0x40, + 0x50, 0xb6, 0x60, 0x01, 0x1b, 0x41, 0x49, 0x3a, 0x9c, 0xf9, 0xa8, 0x00, + 0x4b, 0x16, 0x23, 0x53, 0x09, 0x40, 0x44, 0x73, 0x20, 0x64, 0x09, 0x00, + 0x05, 0xf0, 0x06, 0x06, 0x4b, 0x09, 0xa1, 0x65, 0x09, 0x40, 0x45, 0x12, + 0x0b, 0x6e, 0x09, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x6f, 0x09, 0x00, + 0x43, 0x0e, 0x0b, 0x67, 0x09, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, + 0x1e, 0x66, 0x09, 0x40, 0x44, 0x25, 0x01, 0x69, 0x09, 0x00, 0x42, 0x15, + 0x02, 0x68, 0x09, 0x40, 0x44, 0xc9, 0x1d, 0x6d, 0x09, 0x00, 0x42, 0x01, + 0x26, 0x6c, 0x09, 0x40, 0x43, 0xd2, 0x05, 0x6b, 0x09, 0x00, 0x43, 0xf6, + 0x06, 0x6a, 0x09, 0x40, 0x50, 0xdd, 0x57, 0x70, 0x09, 0x00, 0x4b, 0xfc, + 0x8b, 0x54, 0x09, 0x40, 0x4c, 0x33, 0x8d, 0x0b, 0x26, 0x00, 0x02, 0x33, + 0x00, 0x11, 0x05, 0xe5, 0xe7, 0x01, 0xff, 0x48, 0x9c, 0x4b, 0xa5, 0xf5, + 0x01, 0x46, 0x3c, 0xe1, 0xd4, 0xf5, 0x41, 0x03, 0x68, 0x09, 0x0b, 0xf4, + 0xdc, 0xf3, 0xc1, 0x00, 0x47, 0x34, 0xcd, 0xdd, 0xf3, 0x41, 0x0f, 0xe4, + 0x05, 0xdd, 0x01, 0x0d, 0x76, 0x08, 0x01, 0xff, 0x42, 0xed, 0x10, 0x34, + 0x04, 0x01, 0x43, 0x8d, 0xb6, 0x3a, 0x04, 0x01, 0x44, 0x41, 0x4b, 0x3d, + 0x04, 0x01, 0x43, 0x46, 0x81, 0x3c, 0x04, 0x01, 0xa5, 0x91, 0x01, 0x43, + 0x44, 0x9c, 0x40, 0x04, 0x01, 0xe8, 0x38, 0x04, 0x01, 0x43, 0x3e, 0x38, + 0x3e, 0x04, 0x01, 0x43, 0x11, 0x7f, 0x3f, 0x04, 0x01, 0x05, 0xd7, 0x02, + 0x5d, 0xaf, 0x53, 0x43, 0x70, 0x7c, 0x39, 0x04, 0x01, 0x06, 0x33, 0x07, + 0x2f, 0xb4, 0x21, 0x43, 0xfd, 0x06, 0x42, 0x04, 0x01, 0x42, 0x7c, 0x31, + 0x36, 0x04, 0x01, 0x43, 0xcd, 0xa9, 0x37, 0x04, 0x01, 0xba, 0x01, 0xff, + 0x42, 0x27, 0x01, 0x46, 0x04, 0x01, 0x43, 0x2c, 0x13, 0x48, 0x04, 0x41, + 0x42, 0x27, 0x01, 0x3b, 0x04, 0x01, 0x43, 0x2c, 0x13, 0x44, 0x04, 0x41, + 0xe1, 0x30, 0x04, 0x81, 0x11, 0xe5, 0x2f, 0x04, 0x01, 0xe9, 0x2e, 0x04, + 0x01, 0xef, 0x32, 0x04, 0xc1, 0x00, 0xef, 0x33, 0x04, 0x41, 0xe8, 0x31, + 0x04, 0x41, 0xe9, 0x4e, 0x04, 0x01, 0xf7, 0x35, 0x04, 0x41, 0xe1, 0x2a, + 0x04, 0x81, 0x11, 0xe5, 0x29, 0x04, 0x01, 0xe9, 0x28, 0x04, 0x01, 0xef, + 0x2c, 0x04, 0xc1, 0x00, 0xef, 0x2d, 0x04, 0x41, 0xe8, 0x2b, 0x04, 0x41, + 0xe6, 0x41, 0x04, 0x01, 0xec, 0x4a, 0x04, 0x01, 0xed, 0x4b, 0x04, 0x01, + 0xee, 0x4c, 0x04, 0x81, 0x17, 0xf2, 0x49, 0x04, 0x01, 0xf3, 0x45, 0x04, + 0x81, 0x0a, 0x42, 0x53, 0x00, 0x43, 0x04, 0x01, 0xf7, 0x4f, 0x04, 0x41, + 0xe8, 0x47, 0x04, 0x41, 0xe7, 0x4d, 0x04, 0x41, 0x42, 0xed, 0x10, 0x0c, + 0x04, 0x01, 0x43, 0x8d, 0xb6, 0x12, 0x04, 0x01, 0x44, 0x41, 0x4b, 0x15, + 0x04, 0x01, 0x43, 0x46, 0x81, 0x14, 0x04, 0x01, 0xa5, 0x91, 0x01, 0x43, + 0x44, 0x9c, 0x18, 0x04, 0x01, 0xe8, 0x10, 0x04, 0x01, 0x43, 0x3e, 0x38, + 0x16, 0x04, 0x01, 0x43, 0x11, 0x7f, 0x17, 0x04, 0x01, 0x05, 0xd7, 0x02, + 0x5d, 0xaf, 0x53, 0x43, 0x70, 0x7c, 0x11, 0x04, 0x01, 0x06, 0x33, 0x07, + 0x2f, 0xb4, 0x21, 0x43, 0xfd, 0x06, 0x1a, 0x04, 0x01, 0x42, 0x7c, 0x31, + 0x0e, 0x04, 0x01, 0x43, 0xcd, 0xa9, 0x0f, 0x04, 0x01, 0xba, 0x01, 0xff, + 0x42, 0x27, 0x01, 0x1e, 0x04, 0x01, 0x43, 0x2c, 0x13, 0x20, 0x04, 0x41, + 0x42, 0x27, 0x01, 0x13, 0x04, 0x01, 0x43, 0x2c, 0x13, 0x1c, 0x04, 0x41, + 0xe1, 0x08, 0x04, 0x81, 0x11, 0xe5, 0x07, 0x04, 0x01, 0xe9, 0x06, 0x04, + 0x01, 0xef, 0x0a, 0x04, 0xc1, 0x00, 0xef, 0x0b, 0x04, 0x41, 0xe8, 0x09, + 0x04, 0x41, 0xe9, 0x26, 0x04, 0x01, 0xf7, 0x0d, 0x04, 0x41, 0xe1, 0x02, + 0x04, 0x81, 0x11, 0xe5, 0x01, 0x04, 0x01, 0xe9, 0x00, 0x04, 0x01, 0xef, + 0x04, 0x04, 0xc1, 0x00, 0xef, 0x05, 0x04, 0x41, 0xe8, 0x03, 0x04, 0x41, + 0xe6, 0x19, 0x04, 0x01, 0xec, 0x22, 0x04, 0x01, 0xed, 0x23, 0x04, 0x01, + 0xee, 0x24, 0x04, 0x81, 0x17, 0xf2, 0x21, 0x04, 0x01, 0xf3, 0x1d, 0x04, + 0x81, 0x0a, 0x42, 0x53, 0x00, 0x1b, 0x04, 0x01, 0xf7, 0x27, 0x04, 0x41, + 0xe8, 0x1f, 0x04, 0x41, 0xe7, 0x25, 0x04, 0x41, 0x03, 0x41, 0x04, 0x81, + 0x01, 0x14, 0x2c, 0x46, 0x01, 0xff, 0x53, 0x0c, 0x49, 0xc9, 0x23, 0x80, + 0x5e, 0x51, 0xb3, 0x5e, 0xca, 0x23, 0x80, 0x40, 0x09, 0x32, 0x00, 0x01, + 0xff, 0x04, 0x1a, 0x00, 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x46, 0x12, + 0x03, 0xc0, 0x23, 0x00, 0x48, 0x01, 0x02, 0xc3, 0x23, 0x40, 0x07, 0x9b, + 0x0d, 0x16, 0x04, 0x1e, 0x00, 0x06, 0x44, 0x82, 0x57, 0xc6, 0x23, 0x40, + 0x44, 0xc3, 0x00, 0xcb, 0x23, 0x00, 0x45, 0xc8, 0x00, 0xbe, 0x23, 0x40, + 0x44, 0xc3, 0x00, 0xcc, 0x23, 0x00, 0x45, 0xc8, 0x00, 0xbf, 0x23, 0x40, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x12, 0x03, 0xc2, 0x23, 0x00, 0x48, + 0x01, 0x02, 0xc5, 0x23, 0x00, 0x44, 0x82, 0x57, 0xc8, 0x23, 0x40, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x46, 0x12, 0x03, 0xc1, 0x23, 0x00, 0x48, 0x01, + 0x02, 0xc4, 0x23, 0x00, 0x44, 0x82, 0x57, 0xc7, 0x23, 0x40, 0x4f, 0x1f, + 0x6e, 0x45, 0xcc, 0x01, 0x4d, 0x2f, 0x8a, 0x44, 0xcc, 0x41, 0x43, 0x1c, + 0x31, 0x7f, 0x00, 0x00, 0x4b, 0xc5, 0x9d, 0x9a, 0xf6, 0x01, 0x4b, 0x24, + 0xa3, 0x5c, 0x22, 0x40, 0x47, 0xdb, 0xcf, 0x03, 0x21, 0x00, 0x4a, 0x47, + 0xaa, 0x09, 0x21, 0x00, 0x44, 0x5a, 0x03, 0xb0, 0x00, 0x40, 0xa9, 0x06, + 0x56, 0x97, 0x36, 0xdb, 0xf5, 0x41, 0x4a, 0x6b, 0xa9, 0x33, 0xf3, 0x01, + 0x04, 0xd7, 0x0f, 0x01, 0xff, 0x4f, 0x02, 0x6d, 0xe8, 0x23, 0x00, 0x54, + 0xc8, 0x45, 0x96, 0x23, 0x40, 0x44, 0xd8, 0xda, 0x20, 0x20, 0x80, 0x53, + 0x4a, 0xe5, 0xac, 0x38, 0x21, 0x00, 0xae, 0x3f, 0x04, 0xa2, 0x44, 0x2f, + 0x02, 0xa4, 0x02, 0x06, 0x4e, 0xe7, 0x6a, 0x10, 0x00, 0x40, 0x80, 0x17, + 0x03, 0x05, 0x00, 0x01, 0xff, 0x48, 0x75, 0x8a, 0x4d, 0xfe, 0x00, 0x48, + 0x82, 0x8a, 0x49, 0xfe, 0x00, 0x60, 0x93, 0x06, 0x9f, 0x27, 0x40, 0x46, + 0x16, 0x08, 0xa8, 0xf4, 0x01, 0x50, 0xd6, 0x68, 0x43, 0x2e, 0x40, 0x44, + 0x4c, 0x04, 0x93, 0x25, 0x00, 0x49, 0x53, 0xc0, 0x76, 0xf5, 0x41, 0x43, + 0x17, 0x20, 0x83, 0xf4, 0x01, 0x42, 0x06, 0x14, 0x61, 0xf3, 0x41, 0x80, + 0x01, 0xff, 0x45, 0xba, 0xa5, 0xe1, 0xf5, 0x01, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x4a, 0x9f, 0xac, 0x36, 0x2e, 0x00, 0x4b, 0xf0, 0xa1, 0x37, 0x2e, + 0x40, 0xa1, 0x8a, 0xaf, 0x01, 0xa5, 0xc4, 0xae, 0x01, 0xa8, 0xa9, 0x9d, + 0x01, 0xa9, 0xf6, 0x8d, 0x01, 0x03, 0x12, 0x33, 0xbe, 0x85, 0x01, 0xac, + 0xc0, 0x81, 0x01, 0xaf, 0x84, 0x5c, 0xb2, 0xcb, 0x5a, 0xb5, 0xaf, 0x1b, + 0xb9, 0x01, 0xff, 0x45, 0x56, 0xe5, 0x00, 0xf3, 0x01, 0x4a, 0x21, 0xad, + 0x2d, 0x23, 0x00, 0x02, 0xdf, 0x0c, 0xe0, 0x15, 0x07, 0xf9, 0xcc, 0x01, + 0xff, 0x09, 0xe4, 0x05, 0xf2, 0x0b, 0x46, 0xed, 0x4f, 0x7e, 0xa6, 0x00, + 0x07, 0xec, 0x05, 0xd5, 0x0b, 0x47, 0x96, 0xd4, 0x7f, 0xa6, 0x00, 0xb3, + 0x06, 0x4e, 0xfb, 0x7c, 0x82, 0x04, 0x40, 0x06, 0x77, 0x08, 0x99, 0x01, + 0x16, 0xb5, 0x37, 0x01, 0xff, 0xe1, 0x51, 0xe0, 0x01, 0xa2, 0x83, 0x01, + 0x43, 0x6d, 0x14, 0x63, 0xe0, 0x01, 0xa4, 0x6a, 0xa5, 0x5c, 0x43, 0x26, + 0x52, 0x54, 0xe0, 0x81, 0x4f, 0x42, 0x22, 0x00, 0x61, 0xe0, 0x81, 0x42, + 0xe9, 0x59, 0xe0, 0x81, 0x39, 0x42, 0x1b, 0x02, 0x5a, 0xe0, 0x01, 0xef, + 0x5c, 0xe0, 0x01, 0x42, 0x6f, 0x02, 0x5d, 0xe0, 0x01, 0x43, 0xa4, 0x02, + 0x64, 0xe0, 0x01, 0x43, 0xd5, 0x5d, 0x62, 0xe0, 0x01, 0xf5, 0x5f, 0xe0, + 0x01, 0x42, 0x32, 0x00, 0x53, 0xe0, 0x01, 0x44, 0x08, 0xd7, 0x66, 0xe0, + 0x01, 0xba, 0x01, 0xff, 0xe5, 0x58, 0xe0, 0x01, 0x42, 0xb0, 0x01, 0x57, + 0xe0, 0x41, 0xe5, 0x56, 0xe0, 0x41, 0x47, 0xfc, 0x92, 0x65, 0xe0, 0x41, + 0x4c, 0xa7, 0x8b, 0x67, 0xe0, 0x41, 0xe6, 0x60, 0xe0, 0x01, 0xec, 0x5b, + 0xe0, 0x01, 0xf3, 0x5e, 0xe0, 0x41, 0xe5, 0x55, 0xe0, 0x01, 0xba, 0x01, + 0xff, 0xe5, 0x69, 0xe0, 0x01, 0x42, 0xb0, 0x01, 0x6a, 0xe0, 0x41, 0xe5, + 0x52, 0xe0, 0x01, 0x57, 0x84, 0x08, 0x68, 0xe0, 0x41, 0x06, 0xed, 0x05, + 0x17, 0x08, 0x9d, 0x1f, 0x01, 0xff, 0x44, 0xd5, 0xee, 0xd5, 0x04, 0x00, + 0x46, 0x48, 0xdb, 0xa5, 0x04, 0x00, 0x46, 0x76, 0xe0, 0xb5, 0x04, 0x40, + 0xe1, 0x30, 0x04, 0x80, 0xd5, 0x09, 0xa2, 0x99, 0x09, 0xa3, 0xe4, 0x08, + 0xa4, 0x8f, 0x08, 0xe5, 0x4d, 0x04, 0x80, 0x94, 0x07, 0x44, 0xd1, 0xef, + 0x73, 0x04, 0x00, 0xa7, 0xda, 0x06, 0xa8, 0xb0, 0x06, 0xe9, 0x38, 0x04, + 0x80, 0xc0, 0x05, 0x42, 0x80, 0x20, 0x58, 0x04, 0x00, 0xab, 0xc7, 0x04, + 0xac, 0xac, 0x04, 0x04, 0xbe, 0x18, 0x9b, 0x04, 0xae, 0x86, 0x04, 0xef, + 0x3e, 0x04, 0x80, 0xe9, 0x03, 0xb0, 0xc4, 0x03, 0x42, 0x43, 0x14, 0x1b, + 0x05, 0x00, 0xb2, 0x88, 0x03, 0xb3, 0x99, 0x02, 0xb4, 0xba, 0x01, 0xf5, + 0x43, 0x04, 0x80, 0x8b, 0x01, 0x42, 0x32, 0x00, 0x32, 0x04, 0x00, 0xb7, + 0x79, 0xb9, 0x46, 0xba, 0x01, 0xff, 0xe5, 0x37, 0x04, 0x80, 0x28, 0xa8, + 0x01, 0xff, 0xe5, 0x36, 0x04, 0x80, 0x06, 0x42, 0x15, 0x01, 0x85, 0xa6, + 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x53, 0x23, 0xc2, 0x04, 0x00, + 0xa4, 0x01, 0xff, 0x48, 0x1e, 0x2b, 0x97, 0x04, 0x00, 0x48, 0xb8, 0x23, + 0xdd, 0x04, 0x40, 0x07, 0x82, 0x07, 0x06, 0x44, 0x39, 0xf1, 0x41, 0xa6, + 0x40, 0x48, 0x1e, 0x2b, 0x99, 0x04, 0x00, 0x48, 0xb8, 0x23, 0xdf, 0x04, + 0x40, 0xe1, 0x4f, 0x04, 0x80, 0x24, 0x43, 0x9c, 0x2b, 0x4b, 0x04, 0x80, + 0x0c, 0xe9, 0x57, 0x04, 0x00, 0xee, 0x5f, 0xa6, 0x00, 0xf5, 0x4e, 0x04, + 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x48, 0x83, 0x75, 0x51, 0xa6, 0x00, + 0x49, 0xb7, 0x23, 0xf9, 0x04, 0x40, 0xe5, 0x19, 0x05, 0x00, 0xf4, 0x63, + 0x04, 0x40, 0xe5, 0x1d, 0x05, 0x00, 0x46, 0xc2, 0xdc, 0x83, 0x1c, 0x40, + 0x06, 0x50, 0x00, 0x11, 0xeb, 0x79, 0x04, 0x80, 0x06, 0x4b, 0xe0, 0x9f, + 0x88, 0x1c, 0x40, 0x4a, 0x08, 0x9e, 0x54, 0x04, 0x40, 0xa4, 0x06, 0x46, + 0xad, 0x70, 0xef, 0x04, 0x40, 0x48, 0xb8, 0x23, 0xf1, 0x04, 0x00, 0x4b, + 0xfe, 0xa0, 0xf3, 0x04, 0x40, 0x04, 0x5f, 0x07, 0x46, 0x43, 0x6d, 0x14, + 0x93, 0xa6, 0x00, 0xe5, 0x42, 0x04, 0x80, 0x2a, 0x4e, 0x55, 0x78, 0x85, + 0x1c, 0x00, 0x42, 0x80, 0x20, 0x8a, 0x1c, 0x00, 0xb3, 0x06, 0x42, 0x15, + 0x01, 0x8d, 0xa6, 0x40, 0xe5, 0x46, 0x04, 0x00, 0x42, 0xb0, 0x01, 0x5b, + 0x04, 0x00, 0x42, 0x46, 0x03, 0x91, 0xa6, 0x00, 0x42, 0x15, 0x01, 0x8f, + 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x1d, 0x2b, 0xad, 0x04, + 0x00, 0x4b, 0x93, 0x9f, 0x8b, 0xa6, 0x40, 0x49, 0x81, 0xb9, 0x86, 0x1c, + 0x00, 0x42, 0x77, 0x00, 0x84, 0x1c, 0x00, 0x43, 0x9d, 0x32, 0x87, 0x1c, + 0x40, 0x44, 0xb5, 0x7b, 0xd9, 0x04, 0x80, 0x5f, 0x4c, 0x83, 0x8e, 0x8d, + 0x04, 0x00, 0xa8, 0x27, 0x04, 0x03, 0x71, 0x0d, 0x49, 0xf0, 0xbf, 0xaf, + 0x04, 0xc0, 0x00, 0x4c, 0xda, 0x28, 0xb1, 0x04, 0x40, 0x42, 0x04, 0x00, + 0x63, 0xa6, 0x00, 0xa5, 0x06, 0x44, 0x5a, 0x03, 0x4c, 0x04, 0x40, 0xec, + 0x65, 0xa6, 0x00, 0xed, 0x67, 0xa6, 0x40, 0xe1, 0x48, 0x04, 0x00, 0x43, + 0x91, 0x20, 0x49, 0x04, 0x00, 0x42, 0x22, 0x00, 0xbb, 0x04, 0x80, 0x19, + 0x04, 0x35, 0x07, 0x06, 0x42, 0x15, 0x01, 0x97, 0xa6, 0x40, 0xe9, 0x39, + 0x04, 0x80, 0x04, 0xf5, 0x5e, 0x04, 0x40, 0x4a, 0x9b, 0xa6, 0x8b, 0x04, + 0x40, 0x4f, 0xe7, 0x69, 0x27, 0x05, 0x40, 0x4f, 0xf6, 0x69, 0xdb, 0x04, + 0x40, 0x08, 0xde, 0x14, 0x17, 0x42, 0x22, 0x00, 0x17, 0x05, 0x00, 0x04, + 0x41, 0x0b, 0x01, 0xff, 0x46, 0x37, 0xaf, 0x7b, 0x04, 0x00, 0x45, 0x29, + 0x17, 0x80, 0x1c, 0x40, 0x43, 0x28, 0xf4, 0x45, 0xa6, 0x00, 0x43, 0xd5, + 0x5d, 0x61, 0xa6, 0x00, 0x42, 0x2a, 0x4e, 0x55, 0xa6, 0x00, 0x42, 0x4b, + 0x0a, 0x11, 0x05, 0x40, 0x47, 0xc9, 0xc9, 0xcf, 0x04, 0x00, 0xe5, 0x3f, + 0x04, 0x80, 0x06, 0x42, 0x5a, 0x03, 0x71, 0x04, 0x40, 0x06, 0x50, 0x00, + 0x01, 0xff, 0x49, 0x1d, 0x2b, 0x25, 0x05, 0x00, 0x4b, 0x93, 0x9f, 0xa7, + 0x04, 0x40, 0x4f, 0xf6, 0x69, 0xe7, 0x04, 0x00, 0x44, 0xcc, 0x7b, 0x61, + 0x04, 0x80, 0x04, 0xf4, 0x7f, 0x04, 0x40, 0x4b, 0x3a, 0x98, 0x7d, 0x04, + 0x40, 0x47, 0xe5, 0x03, 0x82, 0x1c, 0x00, 0x4a, 0x29, 0xaa, 0x4f, 0xa6, + 0x00, 0x42, 0x80, 0x20, 0x5a, 0x04, 0x40, 0x47, 0x3f, 0x86, 0x69, 0xa6, + 0x00, 0x48, 0x23, 0x92, 0x4b, 0xa6, 0x40, 0x42, 0x22, 0x00, 0x15, 0x05, + 0x00, 0x49, 0x38, 0x59, 0x67, 0x04, 0x00, 0x42, 0x80, 0x20, 0x59, 0x04, + 0x00, 0x4d, 0xfc, 0x86, 0x81, 0x1c, 0x40, 0xe1, 0x3a, 0x04, 0x80, 0x4e, + 0x4d, 0x88, 0x83, 0xcc, 0x04, 0x00, 0x42, 0x80, 0x20, 0x5c, 0x04, 0x00, + 0xaf, 0x06, 0x42, 0x5a, 0x03, 0x6f, 0x04, 0x40, 0x03, 0xb6, 0xd1, 0x06, + 0x43, 0xad, 0x80, 0x81, 0x04, 0x40, 0xa4, 0x1e, 0x43, 0x7f, 0x20, 0x09, + 0x05, 0x00, 0x43, 0xb2, 0x84, 0x0b, 0x05, 0x00, 0x43, 0xda, 0x9d, 0x0d, + 0x05, 0x00, 0x43, 0xa0, 0xf4, 0x0f, 0x05, 0x00, 0x43, 0xd9, 0xf4, 0x05, + 0x05, 0x40, 0xe5, 0x01, 0x05, 0x00, 0x42, 0x80, 0x20, 0x03, 0x05, 0x00, + 0x43, 0xd9, 0xf4, 0x07, 0x05, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, + 0x1d, 0x2b, 0x9b, 0x04, 0x00, 0x44, 0xac, 0x0e, 0xc4, 0x04, 0x00, 0x46, + 0x52, 0x05, 0x9f, 0x04, 0x00, 0x4f, 0x9c, 0x33, 0x9d, 0x04, 0x40, 0x06, + 0x50, 0x00, 0x54, 0xe5, 0x35, 0x04, 0x80, 0x3e, 0xef, 0x51, 0x04, 0x80, + 0x0d, 0x46, 0x90, 0xe1, 0x75, 0x04, 0xc0, 0x00, 0x59, 0x08, 0x23, 0x77, + 0x04, 0x40, 0xb4, 0x01, 0xff, 0xe1, 0x47, 0xa6, 0x00, 0x06, 0xf2, 0x02, + 0x01, 0xff, 0xe1, 0x57, 0xa6, 0x00, 0x47, 0x80, 0xcf, 0x6d, 0x04, 0x00, + 0x51, 0x30, 0x59, 0x5d, 0xa6, 0x00, 0xe5, 0x65, 0x04, 0x00, 0x4a, 0x37, + 0x59, 0x69, 0x04, 0x00, 0x43, 0x9d, 0x32, 0x53, 0xa6, 0x40, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x45, 0x53, 0x23, 0xd7, 0x04, 0x00, 0x45, 0x15, 0x23, + 0x50, 0x04, 0x40, 0x49, 0xb7, 0x23, 0xe5, 0x04, 0x00, 0x45, 0x15, 0x23, + 0x5d, 0x04, 0x00, 0x46, 0xad, 0x70, 0xe3, 0x04, 0x40, 0xe1, 0x45, 0x04, + 0x80, 0x06, 0x42, 0x15, 0x01, 0x95, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x06, + 0x47, 0xfc, 0x92, 0x4a, 0x04, 0x40, 0x49, 0x1d, 0x2b, 0xb3, 0x04, 0x00, + 0x44, 0xac, 0x0e, 0xfd, 0x04, 0x00, 0x46, 0x52, 0x05, 0xff, 0x04, 0x40, + 0x42, 0xb0, 0x01, 0x33, 0x04, 0x80, 0x06, 0x42, 0x80, 0x20, 0x53, 0x04, + 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x1d, 0x2b, 0xf7, 0x04, 0x00, + 0x4b, 0x93, 0x9f, 0x95, 0x04, 0x00, 0x46, 0x52, 0x05, 0x93, 0x04, 0x80, + 0x06, 0x46, 0xe0, 0x68, 0x91, 0x04, 0x40, 0x49, 0xc0, 0x23, 0xfb, 0x04, + 0x40, 0x4f, 0xf6, 0x69, 0xed, 0x04, 0x00, 0xe6, 0x44, 0x04, 0x00, 0xec, + 0x3b, 0x04, 0x80, 0x49, 0xed, 0x3c, 0x04, 0x80, 0x3e, 0xee, 0x3d, 0x04, + 0x80, 0x16, 0xf2, 0x40, 0x04, 0x80, 0x0b, 0xf3, 0x41, 0x04, 0xc0, 0x00, + 0x4f, 0xe7, 0x69, 0xab, 0x04, 0x40, 0x4a, 0xa5, 0xa6, 0x8f, 0x04, 0x40, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x1d, 0x2b, 0xa3, 0x04, 0x00, 0x44, + 0xac, 0x0e, 0xc8, 0x04, 0x00, 0x49, 0xb1, 0x57, 0x29, 0x05, 0x00, 0x4b, + 0x93, 0x9f, 0x23, 0x05, 0x00, 0x44, 0x8f, 0x17, 0xca, 0x04, 0x40, 0x4a, + 0x9b, 0xa6, 0xce, 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x1d, + 0x2b, 0x2f, 0x05, 0x00, 0x44, 0xac, 0x0e, 0x13, 0x05, 0x00, 0x4b, 0x93, + 0x9f, 0x21, 0x05, 0x00, 0x44, 0x8f, 0x17, 0xc6, 0x04, 0x40, 0x43, 0x6d, + 0x14, 0x2d, 0x05, 0x00, 0xe5, 0x34, 0x04, 0x00, 0x42, 0x80, 0x20, 0x52, + 0x04, 0x80, 0x3b, 0x06, 0x3c, 0x01, 0x2d, 0x42, 0x15, 0x01, 0x81, 0xa6, + 0x00, 0xba, 0x01, 0xff, 0xe5, 0x55, 0x04, 0x80, 0x19, 0x42, 0xb0, 0x01, + 0x5f, 0x04, 0x00, 0x42, 0x15, 0x01, 0x83, 0xa6, 0x00, 0xba, 0x01, 0xff, + 0xe5, 0x89, 0xa6, 0x00, 0x42, 0xb0, 0x01, 0x2b, 0x05, 0x40, 0x42, 0x13, + 0x01, 0x43, 0xa6, 0x40, 0x4b, 0xa9, 0x9f, 0x6d, 0xa6, 0x00, 0xef, 0x99, + 0xa6, 0x40, 0x42, 0x78, 0x0f, 0x49, 0xa6, 0x40, 0x43, 0x6d, 0x14, 0x87, + 0xa6, 0x00, 0x42, 0xb0, 0x01, 0x47, 0x04, 0x80, 0x0c, 0x50, 0x31, 0x59, + 0x59, 0xa6, 0x00, 0x48, 0x80, 0xca, 0x9b, 0xa6, 0x40, 0x06, 0x50, 0x00, + 0x01, 0xff, 0xa4, 0x06, 0x4f, 0x9c, 0x33, 0xb9, 0x04, 0x40, 0x48, 0x1e, + 0x2b, 0xb7, 0x04, 0x00, 0x48, 0xb8, 0x23, 0xf5, 0x04, 0x40, 0xa1, 0x24, + 0xe5, 0x31, 0x04, 0x00, 0xa9, 0x12, 0x4a, 0xdb, 0xac, 0x5b, 0xa6, 0x00, + 0x4a, 0x7d, 0xb0, 0x4d, 0xa6, 0x00, 0x57, 0x84, 0x08, 0x56, 0x04, 0x40, + 0x45, 0x82, 0xcf, 0x6b, 0x04, 0x00, 0x49, 0xab, 0x9f, 0x6b, 0xa6, 0x40, + 0x46, 0x0a, 0xcf, 0xe9, 0x04, 0x80, 0x06, 0x48, 0xd0, 0xca, 0xa1, 0x04, + 0x40, 0x4f, 0xf6, 0x69, 0xeb, 0x04, 0x40, 0x06, 0x50, 0x00, 0x23, 0x09, + 0xba, 0xb6, 0x06, 0x47, 0xd6, 0xd2, 0x1f, 0x05, 0x40, 0x43, 0x6d, 0x14, + 0xbd, 0x04, 0x80, 0x0c, 0x43, 0x28, 0xf4, 0xe1, 0x04, 0x00, 0x42, 0x22, + 0x00, 0xa9, 0x04, 0x40, 0x4f, 0xe7, 0x69, 0xbf, 0x04, 0x40, 0x45, 0x53, + 0x23, 0xd1, 0x04, 0x00, 0x49, 0xb7, 0x23, 0xd3, 0x04, 0x40, 0x4d, 0x39, + 0x86, 0x6e, 0xa6, 0x00, 0x48, 0xc8, 0xc9, 0xc0, 0x04, 0x00, 0x50, 0x46, + 0x67, 0x2b, 0x1d, 0x40, 0x06, 0xed, 0x05, 0x17, 0x08, 0x9d, 0x1f, 0x01, + 0xff, 0x44, 0xd5, 0xee, 0xd4, 0x04, 0x00, 0x46, 0x48, 0xdb, 0xa4, 0x04, + 0x00, 0x46, 0x76, 0xe0, 0xb4, 0x04, 0x40, 0xe1, 0x10, 0x04, 0x80, 0x90, + 0x09, 0xa2, 0xd4, 0x08, 0xa3, 0x9f, 0x08, 0xa4, 0xca, 0x07, 0xe5, 0x2d, + 0x04, 0x80, 0xcf, 0x06, 0x44, 0xd1, 0xef, 0x72, 0x04, 0x00, 0xa7, 0x95, + 0x06, 0xa8, 0xeb, 0x05, 0xe9, 0x18, 0x04, 0x80, 0xfb, 0x04, 0x42, 0x80, + 0x20, 0x08, 0x04, 0x00, 0xab, 0x82, 0x04, 0xac, 0xed, 0x03, 0x04, 0xbe, + 0x18, 0xdc, 0x03, 0xae, 0xcd, 0x03, 0xef, 0x1e, 0x04, 0x80, 0xb0, 0x03, + 0xb0, 0x91, 0x03, 0x42, 0x43, 0x14, 0x1a, 0x05, 0x00, 0xb2, 0xe0, 0x02, + 0xb3, 0xf1, 0x01, 0xb4, 0xae, 0x01, 0xf5, 0x23, 0x04, 0x80, 0x85, 0x01, + 0x42, 0x32, 0x00, 0x12, 0x04, 0x00, 0x42, 0x15, 0x01, 0x1c, 0x05, 0x00, + 0xb9, 0x46, 0xba, 0x01, 0xff, 0xe5, 0x17, 0x04, 0x80, 0x28, 0xa8, 0x01, + 0xff, 0xe5, 0x16, 0x04, 0x80, 0x06, 0x42, 0x15, 0x01, 0x84, 0xa6, 0x40, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x53, 0x23, 0xc1, 0x04, 0x00, 0xa4, + 0x01, 0xff, 0x48, 0x1e, 0x2b, 0x96, 0x04, 0x00, 0x48, 0xb8, 0x23, 0xdc, + 0x04, 0x40, 0x07, 0x82, 0x07, 0x06, 0x44, 0x39, 0xf1, 0x40, 0xa6, 0x40, + 0x48, 0x1e, 0x2b, 0x98, 0x04, 0x00, 0x48, 0xb8, 0x23, 0xde, 0x04, 0x40, + 0xe1, 0x2f, 0x04, 0x80, 0x24, 0x43, 0x9c, 0x2b, 0x2b, 0x04, 0x80, 0x0c, + 0xe9, 0x07, 0x04, 0x00, 0xee, 0x5e, 0xa6, 0x00, 0xf5, 0x2e, 0x04, 0x40, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x48, 0x83, 0x75, 0x50, 0xa6, 0x00, 0x49, + 0xb7, 0x23, 0xf8, 0x04, 0x40, 0xe5, 0x18, 0x05, 0x00, 0xf4, 0x62, 0x04, + 0x40, 0x06, 0x50, 0x00, 0x0b, 0xeb, 0x78, 0x04, 0xc0, 0x00, 0x4a, 0x08, + 0x9e, 0x04, 0x04, 0x40, 0xa4, 0x06, 0x46, 0xad, 0x70, 0xee, 0x04, 0x40, + 0x48, 0xb8, 0x23, 0xf0, 0x04, 0x00, 0x4b, 0xfe, 0xa0, 0xf2, 0x04, 0x40, + 0x43, 0x6d, 0x14, 0x92, 0xa6, 0x00, 0xe5, 0x22, 0x04, 0x80, 0x24, 0x42, + 0x80, 0x20, 0x89, 0x1c, 0x00, 0xb3, 0x06, 0x42, 0x15, 0x01, 0x8c, 0xa6, + 0x40, 0xe5, 0x26, 0x04, 0x00, 0x42, 0xb0, 0x01, 0x0b, 0x04, 0x00, 0x42, + 0x46, 0x03, 0x90, 0xa6, 0x00, 0x42, 0x15, 0x01, 0x8e, 0xa6, 0x40, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x49, 0x1d, 0x2b, 0xac, 0x04, 0x00, 0x4b, 0x93, + 0x9f, 0x8a, 0xa6, 0x40, 0x44, 0xb5, 0x7b, 0xd8, 0x04, 0x80, 0x5f, 0x4c, + 0x83, 0x8e, 0x8c, 0x04, 0x00, 0xa8, 0x27, 0x04, 0x03, 0x71, 0x0d, 0x49, + 0xf0, 0xbf, 0xae, 0x04, 0xc0, 0x00, 0x4c, 0xda, 0x28, 0xb0, 0x04, 0x40, + 0x42, 0x04, 0x00, 0x62, 0xa6, 0x00, 0xa5, 0x06, 0x44, 0x5a, 0x03, 0x2c, + 0x04, 0x40, 0xec, 0x64, 0xa6, 0x00, 0xed, 0x66, 0xa6, 0x40, 0xe1, 0x28, + 0x04, 0x00, 0x43, 0x91, 0x20, 0x29, 0x04, 0x00, 0x42, 0x22, 0x00, 0xba, + 0x04, 0x80, 0x19, 0x04, 0x35, 0x07, 0x06, 0x42, 0x15, 0x01, 0x96, 0xa6, + 0x40, 0xe9, 0x19, 0x04, 0x80, 0x04, 0xf5, 0x0e, 0x04, 0x40, 0x4a, 0x9b, + 0xa6, 0x8a, 0x04, 0x40, 0x4f, 0xe7, 0x69, 0x26, 0x05, 0x40, 0x4f, 0xf6, + 0x69, 0xda, 0x04, 0x40, 0x08, 0xde, 0x14, 0x0c, 0x42, 0x22, 0x00, 0x16, + 0x05, 0x00, 0x4a, 0x33, 0xaf, 0x7a, 0x04, 0x40, 0x43, 0x28, 0xf4, 0x44, + 0xa6, 0x00, 0x43, 0xd5, 0x5d, 0x60, 0xa6, 0x00, 0x42, 0x2a, 0x4e, 0x54, + 0xa6, 0x00, 0x42, 0x4b, 0x0a, 0x10, 0x05, 0x40, 0xe5, 0x1f, 0x04, 0x80, + 0x06, 0x42, 0x5a, 0x03, 0x70, 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, + 0x49, 0x1d, 0x2b, 0x24, 0x05, 0x00, 0x4b, 0x93, 0x9f, 0xa6, 0x04, 0x40, + 0x4f, 0xf6, 0x69, 0xe6, 0x04, 0x00, 0x44, 0xcc, 0x7b, 0x60, 0x04, 0x80, + 0x04, 0xf4, 0x7e, 0x04, 0x40, 0x4b, 0x3a, 0x98, 0x7c, 0x04, 0x40, 0x4a, + 0x29, 0xaa, 0x4e, 0xa6, 0x00, 0x42, 0x80, 0x20, 0x0a, 0x04, 0x40, 0x47, + 0x3f, 0x86, 0x68, 0xa6, 0x00, 0x48, 0x23, 0x92, 0x4a, 0xa6, 0x40, 0x42, + 0x22, 0x00, 0x14, 0x05, 0x00, 0x49, 0x38, 0x59, 0x66, 0x04, 0x00, 0x42, + 0x80, 0x20, 0x09, 0x04, 0x40, 0xe1, 0x1a, 0x04, 0x80, 0x4e, 0x4d, 0x88, + 0x83, 0xcb, 0x04, 0x00, 0x42, 0x80, 0x20, 0x0c, 0x04, 0x00, 0xaf, 0x06, + 0x42, 0x5a, 0x03, 0x6e, 0x04, 0x40, 0x03, 0xb6, 0xd1, 0x06, 0x43, 0xad, + 0x80, 0x80, 0x04, 0x40, 0xa4, 0x1e, 0x43, 0x7f, 0x20, 0x08, 0x05, 0x00, + 0x43, 0xb2, 0x84, 0x0a, 0x05, 0x00, 0x43, 0xda, 0x9d, 0x0c, 0x05, 0x00, + 0x43, 0xa0, 0xf4, 0x0e, 0x05, 0x00, 0x43, 0xd9, 0xf4, 0x04, 0x05, 0x40, + 0xe5, 0x00, 0x05, 0x00, 0x42, 0x80, 0x20, 0x02, 0x05, 0x00, 0x43, 0xd9, + 0xf4, 0x06, 0x05, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x1d, 0x2b, + 0x9a, 0x04, 0x00, 0x44, 0xac, 0x0e, 0xc3, 0x04, 0x00, 0x46, 0x52, 0x05, + 0x9e, 0x04, 0x00, 0x4f, 0x9c, 0x33, 0x9c, 0x04, 0x40, 0x06, 0x50, 0x00, + 0x54, 0xe5, 0x15, 0x04, 0x80, 0x3e, 0xef, 0x01, 0x04, 0x80, 0x0d, 0x46, + 0x90, 0xe1, 0x74, 0x04, 0xc0, 0x00, 0x59, 0x08, 0x23, 0x76, 0x04, 0x40, + 0xb4, 0x01, 0xff, 0xe1, 0x46, 0xa6, 0x00, 0x06, 0xf2, 0x02, 0x01, 0xff, + 0xe1, 0x56, 0xa6, 0x00, 0x47, 0x80, 0xcf, 0x6c, 0x04, 0x00, 0x51, 0x30, + 0x59, 0x5c, 0xa6, 0x00, 0xe5, 0x64, 0x04, 0x00, 0x4a, 0x37, 0x59, 0x68, + 0x04, 0x00, 0x43, 0x9d, 0x32, 0x52, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, + 0xff, 0x45, 0x53, 0x23, 0xd6, 0x04, 0x00, 0x45, 0x15, 0x23, 0x00, 0x04, + 0x40, 0x49, 0xb7, 0x23, 0xe4, 0x04, 0x00, 0x45, 0x15, 0x23, 0x0d, 0x04, + 0x00, 0x46, 0xad, 0x70, 0xe2, 0x04, 0x40, 0xe1, 0x25, 0x04, 0x80, 0x06, + 0x42, 0x15, 0x01, 0x94, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x06, 0x47, 0xfc, + 0x92, 0x2a, 0x04, 0x40, 0x49, 0x1d, 0x2b, 0xb2, 0x04, 0x00, 0x44, 0xac, + 0x0e, 0xfc, 0x04, 0x00, 0x46, 0x52, 0x05, 0xfe, 0x04, 0x40, 0x42, 0xb0, + 0x01, 0x13, 0x04, 0x80, 0x06, 0x42, 0x80, 0x20, 0x03, 0x04, 0x40, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x49, 0x1d, 0x2b, 0xf6, 0x04, 0x00, 0x4b, 0x93, + 0x9f, 0x94, 0x04, 0x00, 0x46, 0x52, 0x05, 0x92, 0x04, 0x80, 0x06, 0x46, + 0xe0, 0x68, 0x90, 0x04, 0x40, 0x49, 0xc0, 0x23, 0xfa, 0x04, 0x40, 0x4f, + 0xf6, 0x69, 0xec, 0x04, 0x00, 0xe6, 0x24, 0x04, 0x00, 0xec, 0x1b, 0x04, + 0x80, 0x49, 0xed, 0x1c, 0x04, 0x80, 0x3e, 0xee, 0x1d, 0x04, 0x80, 0x16, + 0xf2, 0x20, 0x04, 0x80, 0x0b, 0xf3, 0x21, 0x04, 0xc0, 0x00, 0x4f, 0xe7, + 0x69, 0xaa, 0x04, 0x40, 0x4a, 0xa5, 0xa6, 0x8e, 0x04, 0x40, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x49, 0x1d, 0x2b, 0xa2, 0x04, 0x00, 0x44, 0xac, 0x0e, + 0xc7, 0x04, 0x00, 0x49, 0xb1, 0x57, 0x28, 0x05, 0x00, 0x4b, 0x93, 0x9f, + 0x22, 0x05, 0x00, 0x44, 0x8f, 0x17, 0xc9, 0x04, 0x40, 0x4a, 0x9b, 0xa6, + 0xcd, 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x1d, 0x2b, 0x2e, + 0x05, 0x00, 0x44, 0xac, 0x0e, 0x12, 0x05, 0x00, 0x4b, 0x93, 0x9f, 0x20, + 0x05, 0x00, 0x44, 0x8f, 0x17, 0xc5, 0x04, 0x40, 0x43, 0x6d, 0x14, 0x2c, + 0x05, 0x00, 0xe5, 0x14, 0x04, 0x00, 0x42, 0x80, 0x20, 0x02, 0x04, 0x80, + 0x3b, 0x06, 0x3c, 0x01, 0x2d, 0x42, 0x15, 0x01, 0x80, 0xa6, 0x00, 0xba, + 0x01, 0xff, 0xe5, 0x05, 0x04, 0x80, 0x19, 0x42, 0xb0, 0x01, 0x0f, 0x04, + 0x00, 0x42, 0x15, 0x01, 0x82, 0xa6, 0x00, 0xba, 0x01, 0xff, 0xe5, 0x88, + 0xa6, 0x00, 0x42, 0xb0, 0x01, 0x2a, 0x05, 0x40, 0x42, 0x13, 0x01, 0x42, + 0xa6, 0x40, 0x4b, 0xa9, 0x9f, 0x6c, 0xa6, 0x00, 0xef, 0x98, 0xa6, 0x40, + 0x42, 0x78, 0x0f, 0x48, 0xa6, 0x40, 0x43, 0x6d, 0x14, 0x86, 0xa6, 0x00, + 0x42, 0xb0, 0x01, 0x27, 0x04, 0x80, 0x0c, 0x50, 0x31, 0x59, 0x58, 0xa6, + 0x00, 0x48, 0x80, 0xca, 0x9a, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, + 0xa4, 0x06, 0x4f, 0x9c, 0x33, 0xb8, 0x04, 0x40, 0x48, 0x1e, 0x2b, 0xb6, + 0x04, 0x00, 0x48, 0xb8, 0x23, 0xf4, 0x04, 0x40, 0xa1, 0x24, 0xe5, 0x11, + 0x04, 0x00, 0xa9, 0x12, 0x4a, 0xdb, 0xac, 0x5a, 0xa6, 0x00, 0x4a, 0x7d, + 0xb0, 0x4c, 0xa6, 0x00, 0x57, 0x84, 0x08, 0x06, 0x04, 0x40, 0x45, 0x82, + 0xcf, 0x6a, 0x04, 0x00, 0x49, 0xab, 0x9f, 0x6a, 0xa6, 0x40, 0x46, 0x0a, + 0xcf, 0xe8, 0x04, 0x80, 0x06, 0x48, 0xd0, 0xca, 0xa0, 0x04, 0x40, 0x4f, + 0xf6, 0x69, 0xea, 0x04, 0x40, 0x06, 0x50, 0x00, 0x23, 0x09, 0xba, 0xb6, + 0x06, 0x47, 0xd6, 0xd2, 0x1e, 0x05, 0x40, 0x43, 0x6d, 0x14, 0xbc, 0x04, + 0x80, 0x0c, 0x43, 0x28, 0xf4, 0xe0, 0x04, 0x00, 0x42, 0x22, 0x00, 0xa8, + 0x04, 0x40, 0x4f, 0xe7, 0x69, 0xbe, 0x04, 0x40, 0x45, 0x53, 0x23, 0xd0, + 0x04, 0x00, 0x49, 0xb7, 0x23, 0xd2, 0x04, 0x40, 0x0d, 0x65, 0x84, 0xbc, + 0x03, 0x10, 0x76, 0x65, 0x01, 0xff, 0x90, 0x44, 0x91, 0x0d, 0x02, 0xaa, + 0xf3, 0x01, 0xff, 0xd1, 0xf1, 0x2f, 0x01, 0xd2, 0xf2, 0x2f, 0x41, 0x90, + 0x0f, 0x91, 0x01, 0xff, 0xd0, 0xee, 0x2f, 0x01, 0xd2, 0xef, 0x2f, 0x01, + 0xd4, 0xf0, 0x2f, 0x41, 0xd0, 0xe5, 0x2f, 0x01, 0xd1, 0xe6, 0x2f, 0x01, + 0xd2, 0xe7, 0x2f, 0x01, 0xd3, 0xe8, 0x2f, 0x01, 0xd4, 0xe9, 0x2f, 0x01, + 0xd5, 0xea, 0x2f, 0x01, 0xd7, 0xeb, 0x2f, 0x01, 0xd8, 0xec, 0x2f, 0x01, + 0xd9, 0xed, 0x2f, 0x41, 0x90, 0xce, 0x02, 0x91, 0xaa, 0x02, 0x92, 0x87, + 0x02, 0x93, 0xe4, 0x01, 0x94, 0xc9, 0x01, 0x95, 0xa2, 0x01, 0x96, 0x7c, + 0x97, 0x51, 0x98, 0x27, 0x99, 0x01, 0xff, 0xd0, 0xdc, 0x2f, 0x01, 0xd1, + 0xdd, 0x2f, 0x01, 0xd2, 0xde, 0x2f, 0x01, 0xd4, 0xdf, 0x2f, 0x01, 0xd5, + 0xe0, 0x2f, 0x01, 0xd6, 0xe1, 0x2f, 0x01, 0xd7, 0xe2, 0x2f, 0x01, 0xd8, + 0xe3, 0x2f, 0x01, 0xd9, 0xe4, 0x2f, 0x41, 0xd0, 0xd2, 0x2f, 0x01, 0xd1, + 0xd3, 0x2f, 0x01, 0xd2, 0xd4, 0x2f, 0x01, 0xd3, 0xd5, 0x2f, 0x01, 0xd4, + 0xd6, 0x2f, 0x01, 0xd5, 0xd7, 0x2f, 0x01, 0xd6, 0xd8, 0x2f, 0x01, 0xd7, + 0xd9, 0x2f, 0x01, 0xd8, 0xda, 0x2f, 0x01, 0xd9, 0xdb, 0x2f, 0x41, 0xd0, + 0xc8, 0x2f, 0x01, 0xd1, 0xc9, 0x2f, 0x01, 0xd2, 0xca, 0x2f, 0x01, 0xd3, + 0xcb, 0x2f, 0x01, 0xd4, 0xcc, 0x2f, 0x01, 0xd5, 0xcd, 0x2f, 0x81, 0x0c, + 0xd6, 0xcf, 0x2f, 0x01, 0xd8, 0xd0, 0x2f, 0x01, 0xd9, 0xd1, 0x2f, 0x41, + 0xe2, 0xce, 0x2f, 0x41, 0xd0, 0xbf, 0x2f, 0x01, 0xd1, 0xc0, 0x2f, 0x01, + 0xd2, 0xc1, 0x2f, 0x01, 0xd3, 0xc2, 0x2f, 0x01, 0xd4, 0xc3, 0x2f, 0x01, + 0xd6, 0xc4, 0x2f, 0x01, 0xd7, 0xc5, 0x2f, 0x01, 0xd8, 0xc6, 0x2f, 0x01, + 0xd9, 0xc7, 0x2f, 0x41, 0xd0, 0xb6, 0x2f, 0x01, 0xd1, 0xb7, 0x2f, 0x01, + 0xd2, 0xb8, 0x2f, 0x01, 0xd3, 0xb9, 0x2f, 0x01, 0xd4, 0xba, 0x2f, 0x01, + 0xd5, 0xbb, 0x2f, 0x01, 0xd6, 0xbc, 0x2f, 0x01, 0xd8, 0xbd, 0x2f, 0x01, + 0xd9, 0xbe, 0x2f, 0x41, 0xd0, 0xb0, 0x2f, 0x01, 0xd1, 0xb1, 0x2f, 0x01, + 0xd4, 0xb2, 0x2f, 0x01, 0xd6, 0xb3, 0x2f, 0x01, 0xd7, 0xb4, 0x2f, 0x01, + 0xd9, 0xb5, 0x2f, 0x41, 0xd0, 0xa8, 0x2f, 0x01, 0xd3, 0xa9, 0x2f, 0x01, + 0xd4, 0xaa, 0x2f, 0x01, 0xd5, 0xab, 0x2f, 0x01, 0xd6, 0xac, 0x2f, 0x01, + 0xd7, 0xad, 0x2f, 0x01, 0xd8, 0xae, 0x2f, 0x01, 0xd9, 0xaf, 0x2f, 0x41, + 0xd1, 0xa0, 0x2f, 0x01, 0xd3, 0xa1, 0x2f, 0x01, 0xd4, 0xa2, 0x2f, 0x01, + 0xd5, 0xa3, 0x2f, 0x01, 0xd6, 0xa4, 0x2f, 0x01, 0xd7, 0xa5, 0x2f, 0x01, + 0xd8, 0xa6, 0x2f, 0x01, 0xd9, 0xa7, 0x2f, 0x41, 0xd0, 0x98, 0x2f, 0x01, + 0xd1, 0x99, 0x2f, 0x01, 0xd2, 0x9a, 0x2f, 0x81, 0x10, 0xd3, 0x9c, 0x2f, + 0x01, 0xd5, 0x9d, 0x2f, 0x01, 0xd7, 0x9e, 0x2f, 0x01, 0xd9, 0x9f, 0x2f, + 0x41, 0xe2, 0x9b, 0x2f, 0x41, 0xd1, 0x90, 0x2f, 0x01, 0xd2, 0x91, 0x2f, + 0x01, 0xd4, 0x92, 0x2f, 0x01, 0xd5, 0x93, 0x2f, 0x01, 0xd6, 0x94, 0x2f, + 0x01, 0xd7, 0x95, 0x2f, 0x01, 0xd8, 0x96, 0x2f, 0x01, 0xd9, 0x97, 0x2f, + 0x41, 0xe1, 0x00, 0x08, 0x01, 0xe5, 0x01, 0x08, 0x01, 0xe9, 0x02, 0x08, + 0x01, 0xaa, 0xe3, 0x01, 0xab, 0xcc, 0x01, 0xac, 0xb5, 0x01, 0xad, 0x9e, + 0x01, 0xae, 0x87, 0x01, 0xef, 0x03, 0x08, 0x01, 0xb0, 0x6d, 0xb2, 0x57, + 0xb3, 0x41, 0xb4, 0x2b, 0xf5, 0x04, 0x08, 0x01, 0xb7, 0x15, 0xb8, 0x0b, + 0xba, 0x01, 0xff, 0xe1, 0x3c, 0x08, 0x01, 0xef, 0x3f, 0x08, 0x41, 0xe1, + 0x37, 0x08, 0x01, 0xe5, 0x38, 0x08, 0x41, 0xe1, 0x32, 0x08, 0x01, 0xe5, + 0x33, 0x08, 0x01, 0xe9, 0x34, 0x08, 0x01, 0xef, 0x35, 0x08, 0x41, 0xe1, + 0x2d, 0x08, 0x01, 0xe5, 0x2e, 0x08, 0x01, 0xe9, 0x2f, 0x08, 0x01, 0xef, + 0x30, 0x08, 0x01, 0xf5, 0x31, 0x08, 0x41, 0xe1, 0x28, 0x08, 0x01, 0xe5, + 0x29, 0x08, 0x01, 0xe9, 0x2a, 0x08, 0x01, 0xef, 0x2b, 0x08, 0x01, 0xf5, + 0x2c, 0x08, 0x41, 0xe1, 0x23, 0x08, 0x01, 0xe5, 0x24, 0x08, 0x01, 0xe9, + 0x25, 0x08, 0x01, 0xef, 0x26, 0x08, 0x01, 0xf5, 0x27, 0x08, 0x41, 0xe1, + 0x1e, 0x08, 0x01, 0xe5, 0x1f, 0x08, 0x01, 0xe9, 0x20, 0x08, 0x01, 0xef, + 0x21, 0x08, 0x01, 0xf5, 0x22, 0x08, 0x41, 0xe1, 0x19, 0x08, 0x01, 0xe5, + 0x1a, 0x08, 0x01, 0xe9, 0x1b, 0x08, 0x01, 0xef, 0x1c, 0x08, 0x01, 0xf5, + 0x1d, 0x08, 0x41, 0xe1, 0x14, 0x08, 0x01, 0xe5, 0x15, 0x08, 0x01, 0xe9, + 0x16, 0x08, 0x01, 0xef, 0x17, 0x08, 0x01, 0xf5, 0x18, 0x08, 0x41, 0xe1, + 0x0f, 0x08, 0x01, 0xe5, 0x10, 0x08, 0x01, 0xe9, 0x11, 0x08, 0x01, 0xef, + 0x12, 0x08, 0x01, 0xf5, 0x13, 0x08, 0x41, 0xe1, 0x0a, 0x08, 0x01, 0xe5, + 0x0b, 0x08, 0x01, 0xe9, 0x0c, 0x08, 0x01, 0xef, 0x0d, 0x08, 0x01, 0xf5, + 0x0e, 0x08, 0x41, 0xe1, 0x05, 0x08, 0x01, 0xef, 0x08, 0x08, 0x41, 0x47, + 0x8b, 0xb7, 0x1b, 0x22, 0x00, 0x46, 0xc4, 0xda, 0x52, 0xf9, 0x01, 0x08, + 0xa0, 0xc8, 0x80, 0x01, 0xb0, 0x64, 0xb2, 0x16, 0x02, 0x60, 0x01, 0x06, + 0x49, 0x84, 0xbf, 0x69, 0xf9, 0x41, 0x43, 0xaa, 0x01, 0x6e, 0xf3, 0x01, + 0x43, 0x04, 0x67, 0xc3, 0xf6, 0x41, 0xac, 0x1e, 0xb2, 0x06, 0x60, 0x74, + 0x10, 0x61, 0x27, 0x40, 0x05, 0x58, 0x41, 0x06, 0x4a, 0xcf, 0xb3, 0x5b, + 0xf3, 0x41, 0x48, 0x10, 0xc6, 0xb1, 0xf4, 0x01, 0x44, 0x5a, 0x03, 0xa4, + 0x00, 0x40, 0x49, 0x98, 0xba, 0x4c, 0xf9, 0x01, 0x02, 0x09, 0x00, 0x01, + 0xff, 0x51, 0xb9, 0x58, 0xaa, 0x23, 0x00, 0x02, 0x13, 0x01, 0x01, 0xff, + 0x06, 0x2d, 0x22, 0x06, 0x42, 0x1f, 0x00, 0xb0, 0x27, 0x40, 0x43, 0x1a, + 0x00, 0xcf, 0x22, 0x00, 0x42, 0x0c, 0x00, 0xce, 0x22, 0x40, 0x80, 0x0c, + 0x44, 0x5f, 0x2c, 0xc1, 0xf9, 0x01, 0x43, 0x38, 0x66, 0xe0, 0x2b, 0x40, + 0x4f, 0xc5, 0x5f, 0xfe, 0x26, 0x00, 0x4a, 0x9d, 0xb3, 0x64, 0xf9, 0x41, + 0x0d, 0xa1, 0x86, 0xfa, 0x37, 0x11, 0x5f, 0x5d, 0xd3, 0x37, 0x05, 0x5a, + 0x03, 0x01, 0xff, 0xe1, 0x00, 0x20, 0x81, 0xf8, 0x33, 0xa2, 0xd1, 0x32, + 0xa4, 0x9b, 0x2e, 0xe5, 0x8a, 0x20, 0x81, 0x9f, 0x2b, 0xa7, 0xe1, 0x23, + 0xa8, 0xc2, 0x22, 0xe9, 0x3f, 0x21, 0x81, 0xb3, 0x21, 0xab, 0xad, 0x1c, + 0xac, 0x86, 0x13, 0xad, 0xab, 0x11, 0xae, 0xaa, 0x0d, 0xb0, 0xa0, 0x0c, + 0xb2, 0x8c, 0x0c, 0xb3, 0x95, 0x07, 0xb4, 0xb2, 0x05, 0xf5, 0x0b, 0x23, + 0x81, 0x77, 0xba, 0x01, 0xff, 0xe1, 0x5d, 0x23, 0x81, 0x53, 0x42, 0x73, + 0x9b, 0x62, 0x23, 0x01, 0xe9, 0x63, 0x23, 0x81, 0x29, 0xf5, 0x6a, 0x23, + 0xc1, 0x00, 0x51, 0x32, 0x57, 0x42, 0x25, 0x01, 0xd5, 0x6b, 0x23, 0x81, + 0x0a, 0x43, 0x07, 0x36, 0x6d, 0x23, 0x01, 0xed, 0x6e, 0x23, 0x41, 0x07, + 0x27, 0x02, 0x01, 0xff, 0xe1, 0x6c, 0x23, 0x01, 0x4f, 0xa1, 0x73, 0x43, + 0x25, 0x41, 0x48, 0x50, 0xc2, 0x64, 0x23, 0x01, 0xd3, 0x65, 0x23, 0x01, + 0xe2, 0x66, 0x23, 0x81, 0x0a, 0xe7, 0x68, 0x23, 0x01, 0x42, 0x6b, 0xf3, + 0x69, 0x23, 0x41, 0x4a, 0xd3, 0xa5, 0x67, 0x23, 0x41, 0x80, 0x0e, 0xd7, + 0x41, 0x25, 0x01, 0xe7, 0x60, 0x23, 0x01, 0x42, 0xad, 0xf4, 0x61, 0x23, + 0x41, 0x51, 0xf8, 0x5d, 0x5f, 0x23, 0x01, 0x44, 0x82, 0x60, 0x5e, 0x23, + 0x41, 0x80, 0x8c, 0x04, 0xd2, 0x11, 0x23, 0x01, 0xe2, 0x12, 0x23, 0x01, + 0xe4, 0x13, 0x23, 0x81, 0xbf, 0x03, 0xed, 0x1d, 0x23, 0x81, 0xfa, 0x02, + 0xee, 0x26, 0x23, 0x81, 0xee, 0x02, 0xf2, 0x28, 0x23, 0x81, 0x46, 0x42, + 0xa4, 0x02, 0x51, 0x23, 0x81, 0x18, 0x44, 0xc1, 0xf2, 0x59, 0x23, 0x01, + 0xba, 0x01, 0xff, 0xd3, 0x5a, 0x23, 0x81, 0x04, 0xf5, 0x5c, 0x23, 0x41, + 0x4d, 0xac, 0x7f, 0x5b, 0x23, 0x41, 0x07, 0x27, 0x02, 0x0e, 0xd2, 0x57, + 0x23, 0x01, 0x43, 0xac, 0xf4, 0x58, 0x23, 0x01, 0xf8, 0x56, 0x23, 0x41, + 0xe1, 0x52, 0x23, 0x01, 0x42, 0xfe, 0x03, 0x53, 0x23, 0x81, 0x06, 0x44, + 0x10, 0x45, 0x55, 0x23, 0x41, 0xf2, 0x54, 0x23, 0x41, 0x80, 0x94, 0x02, + 0xd2, 0x2b, 0x23, 0x81, 0xc1, 0x01, 0xd4, 0x34, 0x23, 0x01, 0xe9, 0x35, + 0x23, 0x81, 0xb3, 0x01, 0xf5, 0x37, 0x23, 0xc1, 0x00, 0x07, 0x27, 0x02, + 0x0d, 0x42, 0xf0, 0x10, 0x4f, 0x23, 0xc1, 0x00, 0x48, 0x27, 0x02, 0x50, + 0x23, 0x41, 0xe1, 0x38, 0x23, 0x81, 0x91, 0x01, 0x43, 0x16, 0x00, 0x3a, + 0x23, 0x01, 0xa4, 0x7d, 0xa7, 0x64, 0x42, 0x22, 0x00, 0x41, 0x23, 0x01, + 0xa9, 0x4c, 0x42, 0x45, 0x00, 0x45, 0x23, 0x01, 0xac, 0x33, 0x43, 0xcb, + 0x13, 0x47, 0x23, 0x01, 0x42, 0xbb, 0x09, 0x48, 0x23, 0x01, 0xb3, 0x19, + 0x42, 0x5c, 0x01, 0x4b, 0x23, 0x01, 0xb5, 0x01, 0xff, 0x49, 0x95, 0xb4, + 0x4c, 0x23, 0x01, 0xe4, 0x4d, 0x23, 0x01, 0x44, 0xf7, 0xcb, 0x4e, 0x23, + 0x41, 0x42, 0xb0, 0x01, 0x49, 0x23, 0x01, 0x43, 0x85, 0x69, 0x4a, 0x23, + 0x41, 0x46, 0xa4, 0xd9, 0x3f, 0x25, 0x01, 0xb5, 0x01, 0xff, 0xd3, 0x40, + 0x25, 0x01, 0xed, 0x46, 0x23, 0x41, 0x42, 0xf1, 0x06, 0x42, 0x23, 0x01, + 0xed, 0x43, 0x23, 0x01, 0x42, 0xa4, 0x02, 0x44, 0x23, 0x41, 0xe1, 0x3c, + 0x23, 0x81, 0x04, 0xf5, 0x40, 0x23, 0x41, 0xec, 0x3d, 0x23, 0x01, 0x47, + 0x8f, 0x60, 0x3e, 0x23, 0x01, 0xf2, 0x3f, 0x23, 0x41, 0x44, 0x11, 0xef, + 0x3e, 0x25, 0x01, 0x42, 0x42, 0x0b, 0x3b, 0x23, 0x41, 0x45, 0xed, 0xd9, + 0x39, 0x23, 0x41, 0xd3, 0x36, 0x23, 0x41, 0x80, 0x01, 0xff, 0x48, 0x5e, + 0x23, 0x3c, 0x25, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xa1, 0x29, 0x42, + 0x22, 0x00, 0x2f, 0x23, 0x01, 0x43, 0xdc, 0x22, 0x30, 0x23, 0x01, 0xb5, + 0x01, 0xff, 0xd2, 0x31, 0x23, 0x81, 0x04, 0xe4, 0x3d, 0x25, 0x41, 0x06, + 0x57, 0x28, 0x01, 0xff, 0x43, 0xf9, 0x03, 0x32, 0x23, 0x01, 0x42, 0xe5, + 0x06, 0x33, 0x23, 0x41, 0x06, 0x57, 0x28, 0x04, 0xec, 0x2e, 0x23, 0x41, + 0x42, 0x22, 0x00, 0x2c, 0x23, 0x01, 0x42, 0x2a, 0x05, 0x2d, 0x23, 0x41, + 0x4b, 0x8c, 0x9a, 0x29, 0x23, 0x01, 0x47, 0x1b, 0x7c, 0x2a, 0x23, 0x41, + 0x45, 0xbb, 0x3f, 0x27, 0x23, 0x41, 0x07, 0x27, 0x02, 0x1e, 0x43, 0x35, + 0x16, 0x22, 0x23, 0x01, 0x42, 0x48, 0x04, 0x23, 0x23, 0xc1, 0x00, 0x07, + 0x27, 0x02, 0x01, 0xff, 0x46, 0x1b, 0x02, 0x24, 0x23, 0x01, 0x42, 0xbb, + 0x09, 0x25, 0x23, 0x41, 0x45, 0x22, 0x02, 0x1e, 0x23, 0x01, 0x42, 0x2a, + 0x02, 0x98, 0x23, 0x81, 0x0a, 0x44, 0x49, 0x57, 0x20, 0x23, 0x01, 0xf5, + 0x21, 0x23, 0x41, 0x48, 0xd4, 0x57, 0x1f, 0x23, 0x41, 0x80, 0x06, 0x42, + 0xd2, 0x0e, 0x1c, 0x23, 0x41, 0x44, 0xbc, 0x3f, 0x19, 0x23, 0x01, 0x46, + 0x7c, 0xdd, 0x14, 0x23, 0x01, 0x47, 0x1b, 0x7c, 0x1a, 0x23, 0x81, 0x1e, + 0x06, 0x28, 0x02, 0x01, 0xff, 0x43, 0xe9, 0x70, 0x15, 0x23, 0x01, 0x42, + 0x7d, 0x02, 0x16, 0x23, 0x01, 0x4f, 0x19, 0x74, 0x17, 0x23, 0xc1, 0x00, + 0x45, 0xbb, 0x3f, 0x18, 0x23, 0x41, 0x4a, 0x2c, 0x9d, 0x1b, 0x23, 0x41, + 0x43, 0xec, 0x7a, 0x0c, 0x23, 0x01, 0x07, 0x5f, 0x22, 0x0b, 0xf5, 0x99, + 0x23, 0xc1, 0x00, 0x42, 0x2d, 0x02, 0x0d, 0x23, 0x41, 0x57, 0x52, 0x30, + 0x0e, 0x23, 0x01, 0x4c, 0x7f, 0x95, 0x0f, 0x23, 0x01, 0x5a, 0x54, 0x22, + 0x10, 0x23, 0x41, 0xe1, 0xeb, 0x22, 0x81, 0x69, 0xe5, 0xfc, 0x22, 0x81, + 0x5e, 0xe9, 0xfe, 0x22, 0x81, 0x30, 0xf5, 0x05, 0x23, 0xc1, 0x00, 0x42, + 0xd3, 0x0e, 0x06, 0x23, 0x01, 0xeb, 0x07, 0x23, 0x01, 0xed, 0x08, 0x23, + 0x81, 0x0b, 0xf2, 0x09, 0x23, 0xc1, 0x00, 0x54, 0xc4, 0x3f, 0x0a, 0x23, + 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x49, 0x8d, 0x60, 0x3a, 0x25, 0x01, + 0x4a, 0xa1, 0x73, 0x3b, 0x25, 0x41, 0x45, 0x81, 0x60, 0xff, 0x22, 0x01, + 0xd2, 0x97, 0x23, 0x01, 0xec, 0x00, 0x23, 0x01, 0xf2, 0x01, 0x23, 0xc1, + 0x00, 0x80, 0x01, 0xff, 0x48, 0xa8, 0xc9, 0x03, 0x23, 0x81, 0x06, 0x4a, + 0x0a, 0x45, 0x02, 0x23, 0x41, 0x5a, 0x5e, 0x1e, 0x04, 0x23, 0x41, 0x45, + 0xbb, 0x3f, 0xfd, 0x22, 0x41, 0x80, 0x53, 0xe2, 0xf0, 0x22, 0x81, 0x3f, + 0xe7, 0xf3, 0x22, 0x81, 0x11, 0x42, 0x12, 0x45, 0xfa, 0x22, 0x81, 0x04, + 0xf2, 0xfb, 0x22, 0x41, 0x49, 0xb0, 0xb4, 0x39, 0x25, 0x41, 0x07, 0x27, + 0x02, 0x01, 0xff, 0x42, 0xe5, 0x06, 0xf4, 0x22, 0x01, 0x43, 0xec, 0x7a, + 0xf5, 0x22, 0x01, 0x02, 0xa4, 0x02, 0x0c, 0x44, 0xd1, 0x0e, 0xf8, 0x22, + 0x01, 0x42, 0xb2, 0x0c, 0xf9, 0x22, 0x41, 0xe5, 0xf6, 0x22, 0x01, 0xf5, + 0xf7, 0x22, 0x41, 0x80, 0x01, 0xff, 0x62, 0xbc, 0x0c, 0xf1, 0x22, 0x01, + 0x47, 0xd6, 0x05, 0xf2, 0x22, 0x41, 0x48, 0x3c, 0x0d, 0xec, 0x22, 0x01, + 0x44, 0xbc, 0x3f, 0xef, 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0x42, + 0x49, 0x00, 0xed, 0x22, 0x01, 0x42, 0x7d, 0x02, 0xee, 0x22, 0x41, 0xe1, + 0x93, 0x22, 0x81, 0xb3, 0x03, 0xa8, 0x5d, 0xe9, 0xdb, 0x22, 0x81, 0x2e, + 0xf5, 0xe2, 0x22, 0xc1, 0x00, 0x48, 0x82, 0x95, 0xe3, 0x22, 0x01, 0xe4, + 0xe4, 0x22, 0x81, 0x1a, 0x43, 0x41, 0x00, 0xe6, 0x22, 0x01, 0xed, 0xe7, + 0x22, 0x81, 0x09, 0xf2, 0xe9, 0x22, 0xc1, 0x00, 0xd9, 0xea, 0x22, 0x41, + 0x43, 0xf9, 0x03, 0xe8, 0x22, 0x41, 0xd2, 0xe5, 0x22, 0x41, 0x80, 0x1c, + 0xe7, 0xdd, 0x22, 0x81, 0x0c, 0x42, 0x45, 0xac, 0xe0, 0x22, 0x01, 0x43, + 0xfd, 0xea, 0xe1, 0x22, 0x41, 0xd4, 0xde, 0x22, 0xc1, 0x00, 0x4f, 0x7e, + 0x69, 0xdf, 0x22, 0x41, 0x44, 0xbc, 0x3f, 0xdc, 0x22, 0x01, 0x4a, 0x0a, + 0x45, 0x38, 0x25, 0x41, 0xe1, 0xad, 0x22, 0x81, 0x80, 0x02, 0xe5, 0xba, + 0x22, 0x81, 0xaa, 0x01, 0xa9, 0x27, 0xf5, 0xd7, 0x22, 0xc1, 0x00, 0x52, + 0x69, 0x4f, 0xd8, 0x22, 0x01, 0xd2, 0xd9, 0x22, 0x81, 0x06, 0x43, 0x07, + 0x36, 0xda, 0x22, 0x41, 0x06, 0x57, 0x28, 0x01, 0xff, 0x4c, 0x53, 0x8e, + 0x36, 0x25, 0x01, 0x4b, 0x73, 0x9b, 0x37, 0x25, 0x41, 0xe4, 0xc3, 0x22, + 0x81, 0x6d, 0xed, 0xc6, 0x22, 0x81, 0x20, 0x43, 0x4e, 0x09, 0xd2, 0x22, + 0x01, 0xf2, 0xd3, 0x22, 0x81, 0x06, 0x42, 0x12, 0x00, 0xd6, 0x22, 0x41, + 0x80, 0x01, 0xff, 0x56, 0x13, 0x36, 0xd5, 0x22, 0x01, 0x44, 0x82, 0x60, + 0xd4, 0x22, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0xe1, 0xc7, 0x22, 0x01, + 0xa2, 0x31, 0x43, 0x04, 0x06, 0xca, 0x22, 0x01, 0x43, 0x6c, 0x1e, 0xcb, + 0x22, 0x01, 0x43, 0xf0, 0x06, 0xcc, 0x22, 0x81, 0x18, 0x46, 0x7c, 0xdd, + 0xce, 0x22, 0x01, 0x43, 0x73, 0xf4, 0xcf, 0x22, 0x01, 0x43, 0x92, 0xb6, + 0xd0, 0x22, 0x01, 0x43, 0x65, 0x0d, 0xd1, 0x22, 0x41, 0x45, 0xbb, 0x3f, + 0xcd, 0x22, 0x41, 0x42, 0x13, 0x00, 0xc8, 0x22, 0x01, 0x44, 0x91, 0x97, + 0xc9, 0x22, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0xe1, 0xc4, 0x22, 0x01, + 0x42, 0x29, 0x02, 0xc5, 0x22, 0x41, 0x80, 0x1b, 0x42, 0x16, 0xf5, 0xbe, + 0x22, 0x01, 0xee, 0xbf, 0x22, 0x01, 0x42, 0xa4, 0x02, 0xc0, 0x22, 0xc1, + 0x00, 0xd2, 0xc1, 0x22, 0x01, 0x43, 0xb0, 0x00, 0xc2, 0x22, 0x41, 0x42, + 0x41, 0x00, 0xbb, 0x22, 0x01, 0x48, 0xa0, 0xc9, 0x32, 0x25, 0x81, 0x17, + 0x05, 0x58, 0x28, 0x01, 0xff, 0x44, 0x5d, 0xf0, 0x33, 0x25, 0x01, 0x44, + 0x5d, 0xf1, 0x34, 0x25, 0x01, 0x43, 0xec, 0x4b, 0x35, 0x25, 0x41, 0x80, + 0x01, 0xff, 0x59, 0x5f, 0x1e, 0xbc, 0x22, 0x01, 0x59, 0x73, 0x26, 0xbd, + 0x22, 0x41, 0xd3, 0xae, 0x22, 0x81, 0x17, 0xd6, 0xb7, 0x22, 0x81, 0x0c, + 0x42, 0xc3, 0xf3, 0xb8, 0x22, 0x01, 0x42, 0xbe, 0x42, 0xb9, 0x22, 0x41, + 0x45, 0x81, 0x60, 0x31, 0x25, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0xe1, + 0xaf, 0x22, 0x01, 0x43, 0xe9, 0x70, 0xb0, 0x22, 0x01, 0x44, 0x05, 0x45, + 0xb1, 0x22, 0x01, 0x42, 0xcd, 0x05, 0xb2, 0x22, 0x01, 0x44, 0x06, 0x67, + 0xb3, 0x22, 0x01, 0x43, 0x5c, 0x01, 0xb4, 0x22, 0x01, 0xf5, 0xb5, 0x22, + 0xc1, 0x00, 0x47, 0x57, 0x28, 0xb6, 0x22, 0x41, 0xe7, 0x95, 0x22, 0x81, + 0x15, 0xec, 0xa9, 0x22, 0x81, 0x0a, 0x44, 0x79, 0xf1, 0xab, 0x22, 0x01, + 0xf2, 0xac, 0x22, 0x41, 0x51, 0x10, 0x57, 0xaa, 0x22, 0x41, 0x80, 0x01, + 0xff, 0x44, 0xbc, 0x3f, 0xa8, 0x22, 0x81, 0x90, 0x01, 0x47, 0x21, 0xc2, + 0x94, 0x22, 0x01, 0x48, 0x98, 0xc9, 0xa7, 0x22, 0x01, 0x06, 0x28, 0x02, + 0x01, 0xff, 0xe1, 0x96, 0x22, 0x01, 0x42, 0x6c, 0x02, 0x97, 0x22, 0x81, + 0x70, 0x42, 0x92, 0x01, 0x2e, 0x25, 0x01, 0x42, 0x22, 0x00, 0x99, 0x22, + 0x01, 0x48, 0xd0, 0x69, 0x96, 0x23, 0x01, 0xab, 0x50, 0x43, 0x89, 0xb4, + 0x9c, 0x22, 0x01, 0x42, 0x7d, 0x02, 0x9d, 0x22, 0x01, 0x43, 0xdc, 0x22, + 0x9e, 0x22, 0x01, 0xb3, 0x27, 0x02, 0x12, 0x00, 0x19, 0xb5, 0x01, 0xff, + 0xd2, 0xa2, 0x22, 0x01, 0xe2, 0xa3, 0x22, 0x01, 0xed, 0xa4, 0x22, 0x01, + 0xf2, 0xa5, 0x22, 0x01, 0x42, 0xa4, 0x02, 0xa6, 0x22, 0x41, 0xe2, 0xa1, + 0x22, 0x01, 0x42, 0x12, 0x45, 0x30, 0x25, 0x41, 0x42, 0x13, 0x00, 0x9f, + 0x22, 0x01, 0xa8, 0x01, 0xff, 0x49, 0xf5, 0xb7, 0x2f, 0x25, 0x01, 0x42, + 0x03, 0x00, 0xa0, 0x22, 0x41, 0x42, 0x6d, 0x00, 0x9a, 0x22, 0x01, 0x42, + 0x42, 0x00, 0x9b, 0x22, 0x41, 0xe2, 0x98, 0x22, 0x41, 0x49, 0xef, 0xb4, + 0x2d, 0x25, 0x41, 0xe1, 0x8f, 0x22, 0x81, 0x08, 0xe9, 0x91, 0x22, 0x01, + 0xf5, 0x92, 0x22, 0x41, 0xe2, 0x90, 0x22, 0x41, 0xe1, 0x7a, 0x22, 0x81, + 0x76, 0x44, 0x6b, 0x75, 0x7e, 0x22, 0x81, 0x69, 0xe9, 0x7f, 0x22, 0xc1, + 0x00, 0x80, 0x2e, 0xb2, 0x01, 0xff, 0xd2, 0x95, 0x23, 0x01, 0x42, 0x3f, + 0x00, 0x8a, 0x22, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4e, 0x77, 0x7a, 0x8e, + 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0x43, 0x1e, 0x02, 0x8b, 0x22, + 0x01, 0x42, 0xb2, 0x0c, 0x8c, 0x22, 0x01, 0x42, 0x59, 0x00, 0x8d, 0x22, + 0x41, 0x4b, 0x81, 0x9a, 0x89, 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, + 0xe1, 0x80, 0x22, 0x81, 0x20, 0xa2, 0x16, 0xe5, 0x84, 0x22, 0x01, 0xe9, + 0x85, 0x22, 0x81, 0x09, 0xf5, 0x87, 0x22, 0xc1, 0x00, 0xd2, 0x88, 0x22, + 0x41, 0xe2, 0x86, 0x22, 0x41, 0xe9, 0x82, 0x22, 0x01, 0xf5, 0x83, 0x22, + 0x41, 0xe2, 0x81, 0x22, 0x41, 0x49, 0x3b, 0x0d, 0x94, 0x23, 0x41, 0xe4, + 0x7b, 0x22, 0x01, 0xee, 0x7c, 0x22, 0x01, 0xf0, 0x7d, 0x22, 0x41, 0xe1, + 0x3e, 0x22, 0x81, 0xc2, 0x03, 0xe5, 0x48, 0x22, 0x81, 0xa4, 0x03, 0xe9, + 0x4c, 0x22, 0x81, 0xbc, 0x01, 0xf5, 0x61, 0x22, 0xc1, 0x00, 0x42, 0x04, + 0x36, 0x62, 0x22, 0x81, 0x9a, 0x01, 0xee, 0x63, 0x22, 0xc1, 0x00, 0x80, + 0x57, 0x42, 0xac, 0x52, 0x6d, 0x22, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x0a, + 0x45, 0xa7, 0x0d, 0x4f, 0x1e, 0x6f, 0x78, 0x22, 0xc1, 0x00, 0x42, 0x2d, + 0x02, 0x79, 0x22, 0x41, 0x46, 0xec, 0xd9, 0x6e, 0x22, 0x01, 0x42, 0xe5, + 0x06, 0x6f, 0x22, 0x01, 0x43, 0x53, 0x8e, 0x70, 0x22, 0x01, 0x43, 0xec, + 0x7a, 0x71, 0x22, 0x01, 0x48, 0xd0, 0x69, 0x72, 0x22, 0x01, 0x44, 0xc1, + 0xf0, 0x73, 0x22, 0x01, 0x42, 0x74, 0x00, 0x74, 0x22, 0x01, 0x42, 0xcd, + 0x05, 0x75, 0x22, 0x01, 0x45, 0xfb, 0xea, 0x76, 0x22, 0x01, 0x42, 0x08, + 0x67, 0x77, 0x22, 0x41, 0x4c, 0xb7, 0x8d, 0x6b, 0x22, 0x81, 0x2f, 0x0c, + 0xe0, 0x22, 0x0c, 0x48, 0xd7, 0x22, 0x6a, 0x22, 0x01, 0x44, 0x82, 0x60, + 0x69, 0x22, 0x41, 0x43, 0x6c, 0x1e, 0x64, 0x22, 0x01, 0x44, 0x8c, 0x06, + 0x65, 0x22, 0x01, 0x43, 0x65, 0x0d, 0x66, 0x22, 0x81, 0x06, 0x43, 0x30, + 0x7c, 0x68, 0x22, 0x41, 0x59, 0xd6, 0x22, 0x67, 0x22, 0x41, 0x51, 0x21, + 0x57, 0x6c, 0x22, 0x41, 0x80, 0x01, 0xff, 0x56, 0xfd, 0x35, 0xd5, 0x22, + 0x01, 0x56, 0xa4, 0x2c, 0x93, 0x23, 0x01, 0x44, 0x82, 0x60, 0xd4, 0x22, + 0x41, 0x48, 0xd7, 0x97, 0x4d, 0x22, 0x01, 0xd2, 0x4e, 0x22, 0x01, 0xed, + 0x4f, 0x22, 0x81, 0xc1, 0x01, 0xee, 0x8f, 0x23, 0x81, 0x06, 0x43, 0xeb, + 0x88, 0x60, 0x22, 0x41, 0xd9, 0x90, 0x23, 0x01, 0x43, 0x19, 0xf4, 0x52, + 0x22, 0xc1, 0x00, 0x07, 0x27, 0x02, 0x01, 0xff, 0xa1, 0x92, 0x01, 0x43, + 0xcd, 0x1c, 0x91, 0x23, 0x01, 0x48, 0x20, 0xc5, 0x22, 0x25, 0x01, 0xa7, + 0x6e, 0x42, 0x49, 0x00, 0x25, 0x25, 0x01, 0x45, 0xd1, 0xe7, 0x26, 0x25, + 0x01, 0x47, 0xa5, 0xd2, 0x27, 0x25, 0x01, 0xad, 0x4e, 0xae, 0x42, 0x4c, + 0x7c, 0x3d, 0x29, 0x25, 0x01, 0x43, 0x8e, 0x06, 0x5a, 0x22, 0x81, 0x1d, + 0xf5, 0x2a, 0x25, 0xc1, 0x00, 0x47, 0x1a, 0x74, 0x2b, 0x25, 0x01, 0x4a, + 0xeb, 0xa6, 0x5e, 0x22, 0x01, 0x44, 0xf7, 0xcb, 0x2c, 0x25, 0x01, 0x42, + 0xa4, 0x02, 0x5f, 0x22, 0x41, 0x07, 0x57, 0x28, 0x01, 0xff, 0x43, 0x19, + 0x00, 0x5b, 0x22, 0x01, 0x42, 0xa4, 0x02, 0x5c, 0x22, 0xc1, 0x00, 0x49, + 0x18, 0x4d, 0x5d, 0x22, 0x41, 0xe5, 0x58, 0x22, 0x01, 0x42, 0x42, 0x0b, + 0x59, 0x22, 0x41, 0x43, 0xf9, 0x03, 0x28, 0x25, 0x01, 0x50, 0x76, 0x62, + 0x57, 0x22, 0x41, 0xe9, 0x92, 0x23, 0x81, 0x0b, 0xb5, 0x01, 0xff, 0xe4, + 0x56, 0x22, 0x01, 0xec, 0x24, 0x25, 0x41, 0x42, 0xa4, 0x02, 0x23, 0x25, + 0x41, 0xee, 0x53, 0x22, 0x01, 0x42, 0xa4, 0x02, 0x54, 0x22, 0xc1, 0x00, + 0x49, 0x18, 0x4d, 0x55, 0x22, 0x41, 0x09, 0xc0, 0x42, 0x01, 0xff, 0x47, + 0x8f, 0x60, 0x50, 0x22, 0x01, 0x50, 0x26, 0x66, 0x51, 0x22, 0x41, 0x80, + 0x01, 0xff, 0x47, 0x1b, 0x7c, 0x4b, 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, + 0xff, 0xe1, 0x49, 0x22, 0x01, 0x42, 0xb2, 0x0c, 0x4a, 0x22, 0x41, 0xd2, + 0x3f, 0x22, 0x01, 0xd4, 0x8e, 0x23, 0x01, 0x42, 0x24, 0x02, 0x40, 0x22, + 0x81, 0x0f, 0xed, 0x46, 0x22, 0xc1, 0x00, 0x48, 0x20, 0xc2, 0x45, 0x22, + 0x01, 0xd2, 0x47, 0x22, 0x41, 0x80, 0x04, 0xf2, 0x44, 0x22, 0x41, 0x48, + 0x5e, 0x23, 0x41, 0x22, 0x01, 0x4d, 0x23, 0x87, 0x43, 0x22, 0x01, 0x4e, + 0x25, 0x7d, 0x42, 0x22, 0x41, 0xe1, 0x20, 0x22, 0x81, 0xad, 0x01, 0xe5, + 0x28, 0x22, 0x81, 0x9e, 0x01, 0xe9, 0x2a, 0x22, 0x81, 0x8e, 0x01, 0xf5, + 0x2c, 0x22, 0xc1, 0x00, 0x48, 0x48, 0xc2, 0x2d, 0x22, 0x01, 0xe7, 0x2e, + 0x22, 0x81, 0x78, 0x44, 0x99, 0xf1, 0x30, 0x22, 0x01, 0x44, 0x49, 0xf2, + 0x31, 0x22, 0x01, 0x42, 0xa4, 0x02, 0x32, 0x22, 0xc1, 0x00, 0x80, 0x2a, + 0xd3, 0x39, 0x22, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x44, 0xbc, 0x3f, 0x3d, + 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, 0x3a, 0x22, 0x81, 0x0c, + 0x42, 0x00, 0x00, 0x3c, 0x22, 0x01, 0x42, 0x59, 0x00, 0x8d, 0x23, 0x41, + 0x48, 0x58, 0xc2, 0x3b, 0x22, 0x41, 0x4d, 0xc1, 0x81, 0x38, 0x22, 0x01, + 0x49, 0xb9, 0xbd, 0x36, 0x22, 0x81, 0x15, 0x06, 0x28, 0x02, 0x01, 0xff, + 0xe1, 0x33, 0x22, 0x01, 0x43, 0x06, 0x5e, 0x34, 0x22, 0x01, 0x42, 0x59, + 0x00, 0x35, 0x22, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x49, 0x7f, 0xb5, + 0x37, 0x22, 0x01, 0x42, 0x24, 0x02, 0x20, 0x25, 0x01, 0x43, 0x5c, 0x60, + 0x21, 0x25, 0x41, 0x45, 0xbb, 0x3f, 0x2f, 0x22, 0x41, 0x49, 0xc2, 0xb4, + 0x1f, 0x25, 0x01, 0xee, 0x2b, 0x22, 0x41, 0xf3, 0x29, 0x22, 0xc1, 0x00, + 0xe8, 0x8c, 0x23, 0x41, 0x80, 0x17, 0xd2, 0x23, 0x22, 0x01, 0xe8, 0x24, + 0x22, 0x01, 0xf2, 0x25, 0x22, 0x01, 0x42, 0xa4, 0x02, 0x26, 0x22, 0xc1, + 0x00, 0xd2, 0x27, 0x22, 0x41, 0x44, 0xbc, 0x3f, 0x22, 0x22, 0x01, 0x4a, + 0x0a, 0x45, 0x21, 0x22, 0x41, 0xe1, 0xb7, 0x21, 0x81, 0xca, 0x02, 0xe9, + 0xf7, 0x21, 0x81, 0xb4, 0x02, 0xf5, 0xfb, 0x21, 0xc1, 0x00, 0x4a, 0x2c, + 0x9d, 0xfc, 0x21, 0x01, 0xd2, 0xfd, 0x21, 0x81, 0x3c, 0xd3, 0x16, 0x22, + 0x01, 0x43, 0xc7, 0x42, 0x17, 0x22, 0x81, 0x1a, 0xe8, 0x1b, 0x22, 0x01, + 0xec, 0x1c, 0x22, 0x01, 0xed, 0x1d, 0x22, 0xc1, 0x00, 0x49, 0x83, 0xb4, + 0x1e, 0x22, 0xc1, 0x00, 0x4d, 0x6b, 0x1e, 0x1f, 0x22, 0x41, 0x80, 0x01, + 0xff, 0xaf, 0x06, 0x47, 0x1b, 0x7c, 0x1a, 0x22, 0x41, 0x4d, 0x8b, 0x87, + 0x19, 0x22, 0x01, 0x49, 0xe3, 0xc0, 0x18, 0x22, 0x41, 0x80, 0x01, 0xff, + 0x4c, 0xab, 0x8d, 0x12, 0x22, 0x01, 0x4e, 0x1d, 0x78, 0x19, 0x25, 0x01, + 0x4c, 0x57, 0x93, 0x13, 0x22, 0x01, 0xb3, 0xbd, 0x01, 0xb4, 0x01, 0xff, + 0x43, 0x83, 0x60, 0x11, 0x22, 0x01, 0x05, 0x29, 0x02, 0x01, 0xff, 0x42, + 0x13, 0x00, 0xfe, 0x21, 0x01, 0x43, 0xe9, 0x70, 0xff, 0x21, 0x01, 0x44, + 0xd0, 0x0c, 0x1a, 0x25, 0x01, 0x44, 0x6b, 0x75, 0x00, 0x22, 0x81, 0x86, + 0x01, 0x49, 0x8d, 0x60, 0x02, 0x22, 0x01, 0xa8, 0x72, 0x42, 0x29, 0x02, + 0x04, 0x22, 0x01, 0xab, 0x53, 0x02, 0x74, 0x00, 0x43, 0x4a, 0xc1, 0xad, + 0x0b, 0x22, 0x01, 0xae, 0x33, 0x43, 0xef, 0x0e, 0x1c, 0x25, 0x81, 0x26, + 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x43, 0x11, 0x45, 0x1e, 0x25, 0x01, 0x43, + 0xd2, 0x0e, 0x10, 0x22, 0x41, 0x42, 0x41, 0x00, 0x8b, 0x23, 0x01, 0xa9, + 0x01, 0xff, 0x49, 0x18, 0x4d, 0x0e, 0x22, 0x01, 0x4a, 0x45, 0xac, 0x0f, + 0x22, 0x41, 0x52, 0x7f, 0x3d, 0x1d, 0x25, 0x41, 0xe5, 0x0c, 0x22, 0x01, + 0xf5, 0x0d, 0x22, 0x41, 0x49, 0x18, 0x4d, 0x09, 0x22, 0x01, 0x43, 0x24, + 0x02, 0x0a, 0x22, 0x41, 0x02, 0xe8, 0x01, 0x04, 0xe9, 0x08, 0x22, 0x41, + 0xd2, 0x05, 0x22, 0x01, 0xd3, 0x06, 0x22, 0xc1, 0x00, 0x49, 0x18, 0x4d, + 0x07, 0x22, 0x41, 0x42, 0x13, 0x00, 0x1b, 0x25, 0x01, 0x4b, 0x2b, 0x9d, + 0x03, 0x22, 0x41, 0x80, 0x01, 0xff, 0x48, 0xa8, 0xb4, 0x8a, 0x23, 0x01, + 0x44, 0x82, 0x60, 0x01, 0x22, 0x41, 0x46, 0x1c, 0x7c, 0x15, 0x22, 0x81, + 0x06, 0x46, 0xd7, 0x05, 0x14, 0x22, 0x41, 0x4a, 0x2c, 0x9d, 0x89, 0x23, + 0x41, 0xec, 0xf8, 0x21, 0x01, 0x44, 0x3d, 0xf1, 0xf9, 0x21, 0x01, 0x42, + 0xa4, 0x02, 0xfa, 0x21, 0x41, 0x02, 0x24, 0x02, 0xd0, 0x03, 0x44, 0x59, + 0xf0, 0xf1, 0x21, 0x01, 0x02, 0xb5, 0x10, 0x1d, 0xec, 0xf2, 0x21, 0x81, + 0x12, 0xed, 0xf4, 0x21, 0xc1, 0x00, 0x4a, 0xff, 0x5d, 0xf5, 0x21, 0xc1, + 0x00, 0x48, 0x68, 0xc2, 0xf6, 0x21, 0x41, 0x4a, 0x29, 0x9e, 0xf3, 0x21, + 0x41, 0x90, 0xe8, 0x02, 0x91, 0xd9, 0x02, 0x92, 0xad, 0x02, 0x93, 0x8c, + 0x02, 0x94, 0xae, 0x01, 0x43, 0xbc, 0xf3, 0xff, 0x24, 0x01, 0x96, 0x0f, + 0x97, 0x01, 0xff, 0x42, 0x52, 0xb5, 0x17, 0x25, 0x01, 0x42, 0xfc, 0xf4, + 0x18, 0x25, 0x41, 0x42, 0xb2, 0x75, 0x00, 0x25, 0x01, 0x42, 0xea, 0xf4, + 0x01, 0x25, 0x81, 0x4a, 0x42, 0xf2, 0xf4, 0x0c, 0x25, 0x01, 0x42, 0xfa, + 0xf4, 0x0d, 0x25, 0xc1, 0x00, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, 0x25, + 0xf4, 0x0e, 0x25, 0x01, 0x42, 0x24, 0x02, 0x0f, 0x25, 0x01, 0x43, 0xf0, + 0x06, 0x10, 0x25, 0x81, 0x1f, 0x42, 0x51, 0x03, 0x12, 0x25, 0x01, 0x55, + 0x7c, 0x3d, 0x13, 0x25, 0x01, 0x4d, 0x8f, 0x88, 0x14, 0x25, 0x01, 0xb5, + 0x01, 0xff, 0xe4, 0x15, 0x25, 0x01, 0x44, 0xf7, 0xcb, 0x16, 0x25, 0x41, + 0x45, 0xbb, 0x3f, 0x11, 0x25, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, + 0xf9, 0x03, 0x02, 0x25, 0x01, 0x43, 0xe9, 0x70, 0x03, 0x25, 0x01, 0x4e, + 0x21, 0x77, 0x04, 0x25, 0x01, 0x43, 0xa4, 0xb4, 0x05, 0x25, 0x01, 0x42, + 0x74, 0x00, 0x06, 0x25, 0x01, 0xb4, 0x11, 0xb5, 0x01, 0xff, 0xd2, 0x09, + 0x25, 0x01, 0xe4, 0x0a, 0x25, 0x01, 0x44, 0xf7, 0xcb, 0x0b, 0x25, 0x41, + 0x42, 0x17, 0x00, 0x07, 0x25, 0x01, 0xe5, 0x08, 0x25, 0x41, 0x94, 0x29, + 0x95, 0x1f, 0x42, 0x17, 0xf4, 0xf9, 0x24, 0x01, 0x42, 0xf5, 0xf4, 0xfa, + 0x24, 0x01, 0x99, 0x01, 0xff, 0xd0, 0xfb, 0x24, 0x01, 0xd2, 0xfc, 0x24, + 0x01, 0xd3, 0xfd, 0x24, 0x01, 0xd5, 0xfe, 0x24, 0x41, 0xd0, 0xf7, 0x24, + 0x01, 0xd7, 0xf8, 0x24, 0x41, 0xd1, 0xf0, 0x24, 0x01, 0xd9, 0xf1, 0x24, + 0xc1, 0x00, 0x07, 0x27, 0x02, 0x01, 0xff, 0x42, 0x1e, 0x01, 0xf2, 0x24, + 0x01, 0x43, 0xf0, 0x06, 0xf3, 0x24, 0x01, 0x09, 0x7c, 0x3d, 0x06, 0x4a, + 0x71, 0xb2, 0xf6, 0x24, 0x41, 0x43, 0x8e, 0x3d, 0xf4, 0x24, 0x01, 0x4c, + 0x85, 0x3d, 0xf5, 0x24, 0x41, 0x94, 0x10, 0x98, 0x06, 0x42, 0x06, 0xf5, + 0xef, 0x24, 0x41, 0xd3, 0xed, 0x24, 0x01, 0xd4, 0xee, 0x24, 0x41, 0xd3, + 0xea, 0x24, 0x01, 0xd7, 0xeb, 0x24, 0x01, 0xd8, 0xec, 0x24, 0x41, 0x91, + 0x1f, 0x92, 0x11, 0x42, 0xf4, 0xf4, 0xe7, 0x24, 0x01, 0x96, 0x01, 0xff, + 0xd5, 0xe8, 0x24, 0x01, 0xd6, 0xe9, 0x24, 0x41, 0xd0, 0xe4, 0x24, 0x01, + 0xd5, 0xe5, 0x24, 0x01, 0xd8, 0xe6, 0x24, 0x41, 0xd0, 0xe2, 0x24, 0x01, + 0xd9, 0xe3, 0x24, 0x41, 0x42, 0xaa, 0xf3, 0xe0, 0x24, 0x01, 0x42, 0x14, + 0xf4, 0xe1, 0x24, 0x41, 0x42, 0xa9, 0xf3, 0xd5, 0x24, 0x01, 0x92, 0x2e, + 0x42, 0xaa, 0xf3, 0xd8, 0x24, 0x01, 0x95, 0x1e, 0x42, 0xc8, 0xf3, 0xdb, + 0x24, 0x01, 0x54, 0x14, 0x40, 0xdc, 0x24, 0x01, 0x98, 0x06, 0x42, 0x08, + 0xf5, 0xdf, 0x24, 0x41, 0xd0, 0xdd, 0x24, 0x01, 0x4e, 0xa7, 0x75, 0xde, + 0x24, 0x41, 0xd0, 0xd9, 0x24, 0x01, 0xd1, 0xda, 0x24, 0x41, 0xd1, 0xd6, + 0x24, 0x01, 0xd5, 0xd7, 0x24, 0x41, 0xe2, 0xb8, 0x21, 0x81, 0x22, 0xf2, + 0xec, 0x21, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x44, 0xbc, 0x3f, 0xef, 0x21, + 0x81, 0x0d, 0x49, 0x38, 0xa6, 0xed, 0x21, 0xc1, 0x00, 0x49, 0x76, 0xa9, + 0xee, 0x21, 0x41, 0x54, 0xb0, 0x3f, 0xf0, 0x21, 0x41, 0x80, 0x01, 0xff, + 0x47, 0xd6, 0x05, 0xeb, 0x21, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, + 0xb9, 0x21, 0x81, 0xa0, 0x02, 0xa2, 0x93, 0x02, 0x43, 0x27, 0x18, 0xc2, + 0x21, 0x01, 0x42, 0x92, 0x01, 0xc3, 0x21, 0x01, 0xa7, 0xea, 0x01, 0xa8, + 0xd8, 0x01, 0xa9, 0xb9, 0x01, 0xab, 0x9b, 0x01, 0xac, 0x83, 0x01, 0xad, + 0x70, 0x42, 0xcd, 0x05, 0xdb, 0x21, 0x01, 0xb3, 0x3d, 0xb4, 0x29, 0xf5, + 0xe5, 0x21, 0x81, 0x06, 0x4a, 0x1f, 0xb4, 0xd4, 0x24, 0x41, 0x06, 0x57, + 0x28, 0x10, 0x4a, 0xeb, 0xa6, 0xe8, 0x21, 0x01, 0xe4, 0xe9, 0x21, 0x01, + 0x42, 0xa4, 0x02, 0xea, 0x21, 0x41, 0xe1, 0xe6, 0x21, 0x01, 0x48, 0x19, + 0x74, 0xe7, 0x21, 0x41, 0xa1, 0x06, 0x58, 0x56, 0x28, 0xe4, 0x21, 0x41, + 0xe7, 0xe2, 0x21, 0x01, 0x42, 0x12, 0x45, 0xe3, 0x21, 0x41, 0xa8, 0x06, + 0x42, 0x48, 0x04, 0xe1, 0x21, 0x41, 0x4a, 0x75, 0xa9, 0xdc, 0x21, 0x01, + 0x0e, 0xef, 0x78, 0x0d, 0x42, 0x08, 0x67, 0xdf, 0x21, 0xc1, 0x00, 0x4a, + 0xfb, 0xa5, 0xe0, 0x21, 0x41, 0x4a, 0x8d, 0xaf, 0xdd, 0x21, 0x01, 0x44, + 0x82, 0x60, 0xde, 0x21, 0x41, 0xe5, 0xd8, 0x21, 0x81, 0x06, 0x43, 0x30, + 0x7c, 0xda, 0x21, 0x41, 0x48, 0xc3, 0xad, 0xd9, 0x21, 0x41, 0x44, 0x23, + 0x02, 0xd4, 0x21, 0x01, 0x43, 0xd1, 0x0c, 0xd5, 0x21, 0x01, 0xf5, 0xd6, + 0x21, 0xc1, 0x00, 0xec, 0xd7, 0x21, 0x41, 0xe9, 0xcf, 0x21, 0x81, 0x12, + 0xb5, 0x01, 0xff, 0xd3, 0xd1, 0x21, 0x01, 0xec, 0xd2, 0x21, 0xc1, 0x00, + 0x4f, 0x9c, 0x69, 0xd3, 0x21, 0x41, 0xee, 0xd0, 0x21, 0x41, 0x47, 0xd1, + 0x69, 0xcb, 0x21, 0x01, 0xed, 0xcc, 0x21, 0xc1, 0x00, 0x06, 0x57, 0x28, + 0x01, 0xff, 0x42, 0x22, 0x00, 0xcd, 0x21, 0x01, 0x42, 0xc7, 0x15, 0xce, + 0x21, 0x41, 0xe1, 0xc8, 0x21, 0x81, 0x06, 0x4b, 0x36, 0x9d, 0xca, 0x21, + 0x41, 0xec, 0xc9, 0x21, 0x41, 0xe1, 0xc4, 0x21, 0x81, 0x11, 0xe9, 0x88, + 0x23, 0x01, 0x42, 0xb2, 0x0c, 0xc6, 0x21, 0xc1, 0x00, 0x49, 0x95, 0xb4, + 0xc7, 0x21, 0x41, 0xf2, 0xc5, 0x21, 0x41, 0x42, 0xe8, 0x01, 0xc0, 0x21, + 0x01, 0xe9, 0xc1, 0x21, 0x41, 0x06, 0x57, 0x28, 0x0e, 0xec, 0xbd, 0x21, + 0x01, 0xee, 0xbe, 0x21, 0x01, 0x4c, 0x1f, 0x95, 0xbf, 0x21, 0x41, 0x4a, + 0x25, 0xa9, 0xba, 0x21, 0x01, 0x43, 0x6c, 0x1e, 0xbb, 0x21, 0x01, 0x43, + 0xe9, 0x20, 0xbc, 0x21, 0x41, 0xe1, 0x57, 0x21, 0x81, 0x84, 0x01, 0x44, + 0x6b, 0x75, 0x9f, 0x21, 0x01, 0xe9, 0xa0, 0x21, 0x81, 0x44, 0xf5, 0xaa, + 0x21, 0x81, 0x06, 0x45, 0x68, 0xec, 0xb6, 0x21, 0x41, 0x69, 0xea, 0x03, + 0xab, 0x21, 0x01, 0xd3, 0xac, 0x21, 0x01, 0xd4, 0xad, 0x21, 0x81, 0x24, + 0xd7, 0xaf, 0x21, 0x01, 0xec, 0xb0, 0x21, 0x81, 0x15, 0xee, 0xb2, 0x21, + 0x01, 0xf2, 0xb3, 0x21, 0x81, 0x06, 0x44, 0x06, 0x67, 0xb5, 0x21, 0x41, + 0x4d, 0x9f, 0x7f, 0xb4, 0x21, 0x41, 0x45, 0xbb, 0x3f, 0xb1, 0x21, 0x41, + 0x4d, 0xb9, 0x7f, 0xae, 0x21, 0x41, 0x07, 0x27, 0x02, 0x22, 0xe4, 0xa4, + 0x21, 0x01, 0xee, 0xa5, 0x21, 0x01, 0xb3, 0x01, 0xff, 0x42, 0x13, 0x00, + 0xa6, 0x21, 0x01, 0xe8, 0xa7, 0x21, 0x01, 0x43, 0x21, 0x6f, 0xa8, 0x21, + 0xc1, 0x00, 0x4c, 0x5f, 0x8b, 0xa9, 0x21, 0x41, 0x43, 0xe9, 0x70, 0xa1, + 0x21, 0x01, 0xf5, 0xa2, 0x21, 0xc1, 0x00, 0xe4, 0xa3, 0x21, 0x41, 0x07, + 0x27, 0x02, 0x72, 0xd2, 0x8d, 0x21, 0x81, 0x67, 0xe2, 0x8f, 0x21, 0x01, + 0xa4, 0x4a, 0xeb, 0x95, 0x21, 0x81, 0x3f, 0xec, 0x97, 0x21, 0x81, 0x26, + 0xad, 0x1c, 0x49, 0xd4, 0xbd, 0x6f, 0x23, 0x01, 0x44, 0x1d, 0x02, 0x9c, + 0x21, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x60, 0x22, 0x02, 0x9d, 0x21, 0x01, + 0x6c, 0x16, 0x02, 0x9e, 0x21, 0x41, 0xd2, 0x9a, 0x21, 0x01, 0xd4, 0x9b, + 0x21, 0x41, 0x80, 0x06, 0x42, 0x57, 0x00, 0x27, 0x23, 0x41, 0x4c, 0x9f, + 0x8d, 0x99, 0x21, 0x01, 0x49, 0x2d, 0x9d, 0x98, 0x21, 0x41, 0x4f, 0xc9, + 0x69, 0x96, 0x21, 0x41, 0xd2, 0x90, 0x21, 0x01, 0xd3, 0x91, 0x21, 0x01, + 0xd4, 0x92, 0x21, 0x01, 0xd5, 0x93, 0x21, 0xc1, 0x00, 0x4a, 0xf1, 0xa5, + 0x94, 0x21, 0x41, 0x4d, 0x5e, 0x7f, 0x8e, 0x21, 0x41, 0xe1, 0x58, 0x21, + 0x81, 0xdf, 0x02, 0xa2, 0xc4, 0x02, 0xa5, 0xb5, 0x02, 0xa7, 0xe8, 0x01, + 0x4d, 0xf0, 0x03, 0x82, 0x23, 0x01, 0xa9, 0xd5, 0x01, 0xab, 0xc0, 0x01, + 0xac, 0xb0, 0x01, 0xad, 0x86, 0x01, 0xae, 0x7a, 0xb0, 0x70, 0x42, 0x3d, + 0x00, 0x7d, 0x21, 0x01, 0xb3, 0x3a, 0xb4, 0x2e, 0xf5, 0x87, 0x21, 0x81, + 0x06, 0x42, 0xe1, 0x33, 0x8c, 0x21, 0x41, 0x44, 0xab, 0xeb, 0xd2, 0x24, + 0x01, 0xd2, 0x88, 0x21, 0x01, 0xe4, 0x89, 0x21, 0x01, 0x4c, 0x43, 0x92, + 0x8a, 0x21, 0x01, 0xf2, 0xd3, 0x24, 0x81, 0x06, 0x42, 0xa4, 0x02, 0x8b, + 0x21, 0x41, 0xd2, 0x87, 0x23, 0x41, 0x42, 0x17, 0x00, 0x86, 0x21, 0x01, + 0xf5, 0x86, 0x23, 0x41, 0xe1, 0x7e, 0x21, 0x81, 0x25, 0xa8, 0x0c, 0x42, + 0x3f, 0x00, 0x84, 0x21, 0x01, 0x44, 0xd1, 0xf2, 0x85, 0x21, 0x41, 0xe1, + 0x80, 0x21, 0x01, 0xe5, 0x81, 0x21, 0x01, 0x42, 0x03, 0x00, 0x82, 0x21, + 0x01, 0xf5, 0x83, 0x21, 0xc1, 0x00, 0xec, 0x85, 0x23, 0x41, 0xf2, 0x7f, + 0x21, 0x41, 0xe1, 0x84, 0x23, 0x01, 0xe9, 0x7c, 0x21, 0x41, 0xe5, 0x7a, + 0x21, 0x01, 0x42, 0x42, 0x0b, 0x7b, 0x21, 0x41, 0xe5, 0x74, 0x21, 0x81, + 0x0b, 0xe9, 0x78, 0x21, 0xc1, 0x00, 0x4b, 0xab, 0x97, 0x79, 0x21, 0x41, + 0x06, 0x57, 0x28, 0x01, 0xff, 0x42, 0x6c, 0x02, 0x75, 0x21, 0x01, 0x42, + 0xf1, 0x06, 0x76, 0x21, 0x01, 0x42, 0x77, 0x00, 0x77, 0x21, 0x41, 0xe9, + 0x72, 0x21, 0x01, 0xf5, 0x73, 0x21, 0xc1, 0x00, 0xed, 0x83, 0x23, 0x41, + 0xe1, 0xd1, 0x24, 0x81, 0x09, 0xe9, 0x70, 0x21, 0xc1, 0x00, 0xe4, 0x71, + 0x21, 0x41, 0xeb, 0x6f, 0x21, 0x41, 0x42, 0xf1, 0x06, 0x6d, 0x21, 0x01, + 0xed, 0x6e, 0x21, 0x41, 0xe1, 0x62, 0x21, 0x81, 0x30, 0xe9, 0x67, 0x21, + 0x81, 0x0f, 0xf5, 0x6b, 0x21, 0xc1, 0x00, 0xe4, 0x81, 0x23, 0x01, 0x42, + 0x1a, 0xf5, 0x6c, 0x21, 0x41, 0x42, 0xbe, 0x42, 0x68, 0x21, 0x01, 0x42, + 0xa4, 0x02, 0x80, 0x23, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4d, 0x08, 0x52, + 0x6a, 0x21, 0x01, 0x48, 0x3b, 0x57, 0x69, 0x21, 0x41, 0xec, 0x63, 0x21, + 0x01, 0x47, 0x8f, 0x60, 0x64, 0x21, 0x01, 0xf2, 0x65, 0x21, 0xc1, 0x00, + 0x51, 0x43, 0x57, 0x66, 0x21, 0x41, 0x44, 0x93, 0xaf, 0x60, 0x21, 0x01, + 0x43, 0xfa, 0x03, 0x61, 0x21, 0x41, 0xa1, 0x08, 0xe9, 0x5f, 0x21, 0x01, + 0xf5, 0xd0, 0x24, 0x41, 0xe4, 0x5c, 0x21, 0x01, 0x43, 0x22, 0x02, 0x5d, + 0x21, 0x01, 0xf2, 0x5e, 0x21, 0x41, 0xe4, 0x59, 0x21, 0x81, 0x13, 0x44, + 0x95, 0xf1, 0x7e, 0x23, 0x01, 0x02, 0xa4, 0x02, 0x01, 0xff, 0xd2, 0x5b, + 0x21, 0x01, 0xd3, 0x7f, 0x23, 0x41, 0x49, 0x9e, 0xb4, 0x5a, 0x21, 0x41, + 0x42, 0x19, 0x00, 0x40, 0x21, 0x01, 0xe2, 0x41, 0x21, 0x01, 0x43, 0x6c, + 0x7f, 0x42, 0x21, 0x81, 0x67, 0xe7, 0x45, 0x21, 0x81, 0x42, 0xec, 0x4b, + 0x21, 0x81, 0x33, 0xed, 0x4e, 0x21, 0x81, 0x0e, 0xee, 0x54, 0x21, 0x01, + 0xf2, 0x55, 0x21, 0x01, 0x42, 0xa4, 0x02, 0x56, 0x21, 0x41, 0x80, 0x06, + 0x42, 0x9e, 0x01, 0x53, 0x21, 0x41, 0x4b, 0x76, 0x9a, 0x50, 0x21, 0x01, + 0x4b, 0xd2, 0xa0, 0x51, 0x21, 0x01, 0x47, 0xd6, 0x05, 0x52, 0x21, 0x01, + 0x4a, 0x0a, 0x45, 0x4f, 0x21, 0x41, 0x50, 0x86, 0x60, 0x4c, 0x21, 0x01, + 0xd2, 0x4d, 0x21, 0x41, 0xe9, 0x46, 0x21, 0xc1, 0x00, 0x80, 0x01, 0xff, + 0x43, 0x1f, 0xf4, 0x47, 0x21, 0x01, 0x44, 0xbc, 0x3f, 0x4a, 0x21, 0x01, + 0x62, 0x9a, 0x0c, 0x49, 0x21, 0x01, 0x42, 0x0d, 0x00, 0x48, 0x21, 0x41, + 0x0b, 0x95, 0x97, 0x01, 0xff, 0x43, 0x07, 0x36, 0x43, 0x21, 0x01, 0x47, + 0xd6, 0x05, 0x44, 0x21, 0x41, 0xe1, 0x29, 0x21, 0x81, 0x7e, 0xe9, 0x2d, + 0x21, 0x81, 0x3b, 0xf5, 0x37, 0x21, 0xc1, 0x00, 0x42, 0x06, 0x61, 0x38, + 0x21, 0x81, 0x0c, 0x42, 0x53, 0xed, 0x3e, 0x21, 0x01, 0x42, 0xa4, 0x02, + 0x7d, 0x23, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x42, 0x1a, 0x00, 0x39, + 0x21, 0x01, 0x43, 0x22, 0x00, 0x3a, 0x21, 0x01, 0x46, 0x1b, 0x02, 0x3b, + 0x21, 0x01, 0x44, 0xdb, 0x91, 0x3c, 0x21, 0x01, 0x42, 0xb2, 0x0c, 0x3d, + 0x21, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, 0xf9, 0x03, 0x2e, 0x21, + 0x81, 0x28, 0x43, 0xe9, 0x70, 0x30, 0x21, 0x01, 0x44, 0xd0, 0x0c, 0x31, + 0x21, 0x01, 0x43, 0x5f, 0x1e, 0x32, 0x21, 0x01, 0x43, 0x3b, 0x04, 0x33, + 0x21, 0x01, 0x43, 0xdc, 0x22, 0x34, 0x21, 0x01, 0x43, 0x8e, 0x06, 0x35, + 0x21, 0x01, 0xf5, 0x36, 0x21, 0x41, 0x52, 0xea, 0x03, 0xcf, 0x24, 0x01, + 0xd2, 0x2f, 0x21, 0x41, 0x80, 0x04, 0xec, 0x2c, 0x21, 0x41, 0x44, 0xbc, + 0x3f, 0x2b, 0x21, 0x01, 0x44, 0x82, 0x60, 0x2a, 0x21, 0xc1, 0x00, 0x45, + 0xbb, 0x3f, 0xce, 0x24, 0x41, 0xe1, 0xb5, 0x20, 0x81, 0xcc, 0x02, 0xa5, + 0xad, 0x02, 0xe9, 0x00, 0x21, 0x81, 0x87, 0x01, 0xf5, 0x16, 0x21, 0xc1, + 0x00, 0x4c, 0x17, 0x8b, 0x17, 0x21, 0x01, 0xd2, 0x18, 0x21, 0x81, 0x4a, + 0xe4, 0x1e, 0x21, 0x81, 0x25, 0xec, 0x22, 0x21, 0x01, 0xed, 0x23, 0x21, + 0x81, 0x16, 0xf2, 0x25, 0x21, 0xc1, 0x00, 0xd7, 0x26, 0x21, 0x01, 0xb5, + 0x01, 0xff, 0xee, 0x27, 0x21, 0x01, 0x42, 0xa4, 0x02, 0x28, 0x21, 0x41, + 0x4a, 0x37, 0xa6, 0x24, 0x21, 0x41, 0x80, 0x01, 0xff, 0x4e, 0xe7, 0x7a, + 0x21, 0x21, 0x01, 0x54, 0x00, 0x45, 0xcd, 0x24, 0x01, 0x06, 0x28, 0x02, + 0x01, 0xff, 0x4a, 0x31, 0xa7, 0x1f, 0x21, 0x01, 0x43, 0x06, 0x5e, 0x20, + 0x21, 0x41, 0x80, 0x01, 0xff, 0x44, 0xbc, 0x3f, 0x1d, 0x21, 0x01, 0x06, + 0x28, 0x02, 0x01, 0xff, 0x48, 0xd0, 0x69, 0xcc, 0x24, 0x01, 0x43, 0x5c, + 0x60, 0x19, 0x21, 0x81, 0x0c, 0x43, 0xdc, 0x22, 0x1b, 0x21, 0x01, 0x4d, + 0x68, 0x88, 0x1c, 0x21, 0x41, 0x4f, 0xc9, 0x69, 0x1a, 0x21, 0x41, 0x80, + 0x8a, 0x01, 0xd4, 0x04, 0x21, 0x81, 0x76, 0x43, 0x6c, 0x7f, 0x07, 0x21, + 0x01, 0xe7, 0x7c, 0x23, 0x01, 0xb2, 0x37, 0xb3, 0x01, 0xff, 0x42, 0x13, + 0x00, 0x10, 0x21, 0x01, 0xe8, 0x11, 0x21, 0xc1, 0x00, 0x80, 0x01, 0xff, + 0x4d, 0x08, 0x52, 0x12, 0x21, 0x01, 0xb4, 0x01, 0xff, 0x43, 0x83, 0x60, + 0x15, 0x21, 0x01, 0x05, 0x29, 0x02, 0x01, 0xff, 0x43, 0xe9, 0x70, 0x13, + 0x21, 0x01, 0x52, 0x03, 0x52, 0xcb, 0x24, 0x01, 0x44, 0x10, 0x45, 0x14, + 0x21, 0x41, 0xd2, 0x08, 0x21, 0x81, 0x28, 0xd3, 0x0a, 0x21, 0xc1, 0x00, + 0x07, 0x27, 0x02, 0x01, 0xff, 0x4a, 0x27, 0xa7, 0x0b, 0x21, 0x01, 0x49, + 0x8d, 0x60, 0x0c, 0x21, 0x01, 0x43, 0xf0, 0x06, 0x0d, 0x21, 0x01, 0x4b, + 0x25, 0x9f, 0x0e, 0x21, 0x01, 0x42, 0xbb, 0x09, 0x0f, 0x21, 0x41, 0x45, + 0xbb, 0x3f, 0x09, 0x21, 0x41, 0x80, 0x01, 0xff, 0x4c, 0x93, 0x8d, 0x06, + 0x21, 0x01, 0x48, 0x90, 0xc9, 0x05, 0x21, 0x41, 0x4b, 0x08, 0x52, 0x03, + 0x21, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe5, 0x01, 0x21, 0x01, 0xf5, + 0x02, 0x21, 0x41, 0x42, 0x54, 0xed, 0x7b, 0x23, 0x01, 0x45, 0xf1, 0xea, + 0xfe, 0x20, 0xc1, 0x00, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, 0x06, 0x5e, + 0xff, 0x20, 0x01, 0xf5, 0xca, 0x24, 0x41, 0x45, 0xbb, 0x3f, 0xb6, 0x20, + 0x01, 0xd2, 0xb7, 0x20, 0x81, 0x64, 0x42, 0x16, 0x00, 0xee, 0x20, 0x81, + 0x4e, 0xe4, 0xf0, 0x20, 0x81, 0x43, 0xec, 0xf2, 0x20, 0x81, 0x32, 0xed, + 0xf5, 0x20, 0x01, 0xee, 0xf6, 0x20, 0x81, 0x0f, 0xf2, 0xfb, 0x20, 0x81, + 0x06, 0x44, 0x36, 0x39, 0xfd, 0x20, 0x41, 0xd3, 0xfc, 0x20, 0x41, 0xd2, + 0xf7, 0x20, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4d, 0xb4, 0x81, 0xfa, 0x20, + 0x01, 0x49, 0xb0, 0xbd, 0xf9, 0x20, 0x01, 0x44, 0x82, 0x60, 0xf8, 0x20, + 0x41, 0x5a, 0x5e, 0x1e, 0xf3, 0x20, 0x01, 0x42, 0x57, 0x00, 0xf4, 0x20, + 0x41, 0x56, 0x62, 0x1e, 0xf1, 0x20, 0x41, 0x80, 0x01, 0xff, 0x4d, 0xa7, + 0x81, 0xef, 0x20, 0x01, 0x56, 0xa4, 0x2c, 0xc9, 0x24, 0x41, 0x80, 0x01, + 0xff, 0x48, 0x88, 0xc9, 0xed, 0x20, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, + 0xa1, 0xb0, 0x03, 0xa2, 0x8e, 0x03, 0xa4, 0xd9, 0x02, 0xa5, 0xba, 0x02, + 0xa7, 0x80, 0x02, 0xa8, 0xd6, 0x01, 0xa9, 0xc7, 0x01, 0xab, 0x9c, 0x01, + 0xac, 0x83, 0x01, 0xad, 0x71, 0xae, 0x4c, 0x42, 0xbb, 0x09, 0xe2, 0x20, + 0x01, 0xb3, 0x1c, 0x44, 0x10, 0x45, 0xe9, 0x20, 0x01, 0xf5, 0xea, 0x20, + 0x81, 0x06, 0x44, 0x69, 0xf3, 0xc8, 0x24, 0x41, 0xe4, 0xeb, 0x20, 0xc1, + 0x00, 0x48, 0x60, 0xc2, 0xec, 0x20, 0x41, 0xa1, 0x1e, 0xa8, 0x06, 0x42, + 0x48, 0x04, 0xe8, 0x20, 0x41, 0xe5, 0xe5, 0x20, 0x81, 0x0b, 0xa9, 0x01, + 0xff, 0xe4, 0xe7, 0x20, 0x01, 0xed, 0xc7, 0x24, 0x41, 0x49, 0xb9, 0xb4, + 0xe6, 0x20, 0x41, 0xec, 0xe3, 0x20, 0x01, 0xf2, 0xe4, 0x20, 0x41, 0xe5, + 0xc4, 0x24, 0x81, 0x0d, 0x42, 0x42, 0x0b, 0xe0, 0x20, 0xc1, 0x00, 0x49, + 0xd6, 0x22, 0xe1, 0x20, 0x41, 0x06, 0x57, 0x28, 0x01, 0xff, 0x42, 0x73, + 0x9b, 0xc5, 0x24, 0x01, 0x42, 0xf1, 0x06, 0xc6, 0x24, 0x41, 0x49, 0xc2, + 0xad, 0xde, 0x20, 0x01, 0xe9, 0xdf, 0x20, 0x01, 0x43, 0x30, 0x7c, 0xc3, + 0x24, 0x41, 0xe1, 0xdd, 0x20, 0x81, 0x06, 0x42, 0x1c, 0x58, 0xc2, 0x24, + 0x41, 0xed, 0xc0, 0x24, 0xc1, 0x00, 0x4a, 0xff, 0x5d, 0xc1, 0x24, 0x41, + 0xa1, 0x1c, 0x42, 0x03, 0x00, 0xda, 0x20, 0x81, 0x0f, 0xb5, 0x01, 0xff, + 0x49, 0x5b, 0xb5, 0xdc, 0x20, 0x01, 0x50, 0x06, 0x67, 0xbf, 0x24, 0x41, + 0x49, 0xa7, 0xb4, 0xdb, 0x20, 0x41, 0xeb, 0xd8, 0x20, 0x01, 0x44, 0x1d, + 0x02, 0xd9, 0x20, 0x41, 0x47, 0xd1, 0x69, 0xd6, 0x20, 0x01, 0x53, 0x0e, + 0x4d, 0xd7, 0x20, 0x41, 0xa1, 0x0c, 0x49, 0xdb, 0xb9, 0xd4, 0x20, 0x01, + 0x43, 0x5e, 0xf0, 0xd5, 0x20, 0x41, 0x06, 0x57, 0x28, 0x0b, 0xec, 0xd2, + 0x20, 0xc1, 0x00, 0x48, 0xa7, 0xb4, 0xd3, 0x20, 0x41, 0xe1, 0xbe, 0x24, + 0x01, 0x4c, 0x83, 0x91, 0xd1, 0x20, 0x41, 0xe1, 0xbb, 0x24, 0x81, 0x16, + 0xe9, 0xcd, 0x20, 0xc1, 0x00, 0xd4, 0xce, 0x20, 0x81, 0x06, 0x4a, 0xdd, + 0xaf, 0xd0, 0x20, 0x41, 0x47, 0x57, 0x28, 0xcf, 0x20, 0x41, 0x47, 0x8f, + 0x60, 0xcb, 0x20, 0x01, 0xf2, 0xcc, 0x20, 0xc1, 0x00, 0x06, 0x57, 0x28, + 0x01, 0xff, 0x42, 0x00, 0x00, 0xbc, 0x24, 0x01, 0x42, 0xcd, 0x05, 0xbd, + 0x24, 0x41, 0xec, 0xc7, 0x20, 0x81, 0x11, 0xee, 0xc9, 0x20, 0x81, 0x06, + 0x43, 0xda, 0x21, 0xba, 0x24, 0x41, 0x50, 0x86, 0x60, 0xca, 0x20, 0x41, + 0x48, 0xa7, 0xb4, 0xc8, 0x20, 0x41, 0xe1, 0xc3, 0x20, 0x01, 0xe9, 0xc4, + 0x20, 0x81, 0x18, 0xb5, 0x01, 0xff, 0xe2, 0xc6, 0x20, 0x01, 0x08, 0x21, + 0x7c, 0x01, 0xff, 0x48, 0xd0, 0x69, 0xb8, 0x24, 0x01, 0x46, 0x1b, 0x02, + 0xb9, 0x24, 0x41, 0x02, 0x49, 0x04, 0x01, 0xff, 0x44, 0xbc, 0x3f, 0xb7, + 0x24, 0x01, 0x49, 0x38, 0xa6, 0xc5, 0x20, 0x41, 0xa1, 0x0d, 0x42, 0x42, + 0x00, 0xc1, 0x20, 0xc1, 0x00, 0x48, 0x65, 0xbe, 0xc2, 0x20, 0x41, 0xe4, + 0xbf, 0x20, 0x01, 0x44, 0xbc, 0x42, 0xb6, 0x24, 0x01, 0x49, 0x64, 0xbe, + 0xc0, 0x20, 0x41, 0x06, 0x57, 0x28, 0x23, 0x50, 0x06, 0x61, 0xbb, 0x20, + 0x01, 0xee, 0xbc, 0x20, 0x81, 0x12, 0x42, 0xa4, 0x02, 0xbd, 0x20, 0xc1, + 0x00, 0xd2, 0x7a, 0x23, 0xc1, 0x00, 0x49, 0x8c, 0xb4, 0xbe, 0x20, 0x41, + 0x50, 0x56, 0x60, 0x79, 0x23, 0x41, 0x4a, 0x25, 0xa9, 0xb8, 0x20, 0x01, + 0x42, 0x22, 0x00, 0xb9, 0x20, 0x01, 0x43, 0xf0, 0x06, 0xba, 0x20, 0x41, + 0x80, 0xe7, 0x02, 0xd2, 0x8d, 0x20, 0x81, 0xac, 0x02, 0x43, 0x04, 0x06, + 0x94, 0x20, 0x01, 0x43, 0x8f, 0xe7, 0x95, 0x20, 0x01, 0xec, 0x96, 0x20, + 0x01, 0xee, 0x97, 0x20, 0x81, 0xe9, 0x01, 0xb2, 0xd3, 0x01, 0x43, 0xfa, + 0x03, 0xa0, 0x20, 0x81, 0xc5, 0x01, 0x43, 0x4b, 0x0a, 0xa1, 0x20, 0xc1, + 0x00, 0x80, 0x01, 0xff, 0x0e, 0x1b, 0x7c, 0x88, 0x01, 0x06, 0x28, 0x02, + 0x01, 0xff, 0xe1, 0xa2, 0x20, 0x81, 0x6d, 0x43, 0xe9, 0x70, 0xa6, 0x20, + 0x01, 0x49, 0x21, 0x77, 0xa7, 0x20, 0x81, 0x5a, 0x43, 0xec, 0x7a, 0x77, + 0x23, 0x01, 0x42, 0x22, 0x00, 0xa9, 0x20, 0x81, 0x47, 0x48, 0xd0, 0x69, + 0xab, 0x20, 0x01, 0xab, 0x2c, 0xac, 0x17, 0xb3, 0x0b, 0xb5, 0x01, 0xff, + 0xd2, 0xb3, 0x20, 0x01, 0xe4, 0xb4, 0x20, 0x41, 0x42, 0xb0, 0x01, 0x78, + 0x23, 0x01, 0xf5, 0xb5, 0x24, 0x41, 0xe1, 0xaf, 0x20, 0x81, 0x08, 0xe9, + 0xb1, 0x20, 0x01, 0xf5, 0xb2, 0x20, 0x41, 0x4b, 0x28, 0x9e, 0xb0, 0x20, + 0x41, 0x45, 0x1c, 0x02, 0xac, 0x20, 0x81, 0x06, 0x42, 0x8f, 0x3d, 0xae, + 0x20, 0x41, 0x48, 0xd5, 0x05, 0xad, 0x20, 0x41, 0x45, 0xbb, 0x3f, 0xaa, + 0x20, 0x41, 0x45, 0xbb, 0x3f, 0xa8, 0x20, 0x41, 0x49, 0xa7, 0xb4, 0xa3, + 0x20, 0x81, 0x04, 0xee, 0xa5, 0x20, 0x41, 0x4a, 0x29, 0x9e, 0xa4, 0x20, + 0x41, 0x43, 0xf9, 0x03, 0xad, 0x24, 0x01, 0x42, 0x49, 0x00, 0xae, 0x24, + 0x01, 0x48, 0xd0, 0x69, 0xaf, 0x24, 0x01, 0x42, 0x74, 0x00, 0xb0, 0x24, + 0x81, 0x11, 0x42, 0x2a, 0x02, 0xb2, 0x24, 0x81, 0x06, 0x42, 0x6f, 0x00, + 0xb4, 0x24, 0x41, 0xf3, 0xb3, 0x24, 0x41, 0xec, 0xb1, 0x24, 0x41, 0x4e, + 0x61, 0x75, 0xac, 0x24, 0x41, 0x42, 0x92, 0x01, 0x9e, 0x20, 0x01, 0x43, + 0x94, 0xaf, 0x9f, 0x20, 0xc1, 0x00, 0x42, 0x2b, 0x64, 0xab, 0x24, 0x41, + 0x80, 0x01, 0xff, 0x4b, 0x6b, 0x9a, 0x9b, 0x20, 0x01, 0x4b, 0xc7, 0xa0, + 0x9c, 0x20, 0x01, 0x47, 0xd6, 0x05, 0x9d, 0x20, 0x01, 0x06, 0x28, 0x02, + 0x01, 0xff, 0x44, 0x8d, 0x60, 0x98, 0x20, 0x81, 0x06, 0x42, 0x2a, 0x02, + 0x9a, 0x20, 0x41, 0x45, 0x81, 0x60, 0x99, 0x20, 0x41, 0x07, 0x27, 0x02, + 0x01, 0xff, 0x51, 0xcb, 0x57, 0x8e, 0x20, 0x01, 0x43, 0x6c, 0x1e, 0x8f, + 0x20, 0x01, 0x43, 0x06, 0x5e, 0xa9, 0x24, 0x01, 0x42, 0x7d, 0x02, 0x90, + 0x20, 0x01, 0x43, 0xef, 0x0e, 0xaa, 0x24, 0x01, 0xb3, 0x04, 0xf5, 0x93, + 0x20, 0x41, 0x42, 0x13, 0x00, 0x91, 0x20, 0x01, 0x42, 0xb0, 0x01, 0x92, + 0x20, 0x41, 0x53, 0xf1, 0x4b, 0x8c, 0x20, 0x01, 0x49, 0xd5, 0xbf, 0x8b, + 0x20, 0x41, 0xe1, 0x55, 0x20, 0x81, 0xe6, 0x02, 0xe9, 0x72, 0x20, 0x81, + 0x9e, 0x02, 0xf5, 0x7a, 0x20, 0xc1, 0x00, 0x80, 0x84, 0x02, 0xe2, 0x7e, + 0x20, 0x81, 0xea, 0x01, 0xe7, 0x81, 0x20, 0x81, 0x25, 0xe8, 0x83, 0x20, + 0x01, 0xee, 0x84, 0x20, 0x81, 0x06, 0x42, 0xbe, 0x42, 0x89, 0x20, 0x41, + 0xd3, 0x85, 0x20, 0x81, 0x04, 0xd4, 0x88, 0x20, 0x41, 0x45, 0xbb, 0x3f, + 0x86, 0x20, 0xc1, 0x00, 0x45, 0xbb, 0x3f, 0x87, 0x20, 0x41, 0x07, 0x27, + 0x02, 0x06, 0x42, 0xb2, 0x0c, 0x82, 0x20, 0x41, 0xa1, 0xa0, 0x01, 0xa4, + 0x91, 0x01, 0x45, 0x92, 0xaf, 0x92, 0x24, 0x01, 0xa7, 0x74, 0xa8, 0x6a, + 0x48, 0xd0, 0x69, 0x99, 0x24, 0x01, 0xab, 0x48, 0xac, 0x2d, 0xad, 0x1b, + 0x42, 0x51, 0x03, 0xa5, 0x24, 0x01, 0x42, 0xe6, 0x05, 0xa6, 0x24, 0x01, + 0xb3, 0x01, 0xff, 0x42, 0xb0, 0x01, 0xa7, 0x24, 0x01, 0x46, 0xd2, 0x69, + 0xa8, 0x24, 0x41, 0x43, 0xf9, 0x03, 0xa2, 0x24, 0x01, 0x42, 0xed, 0x00, + 0xa3, 0x24, 0x01, 0xe9, 0xa4, 0x24, 0x41, 0xa1, 0x06, 0x4c, 0x4b, 0x96, + 0xa1, 0x24, 0x41, 0x45, 0xbd, 0xe7, 0x9e, 0x24, 0x01, 0xed, 0x9f, 0x24, + 0xc1, 0x00, 0x4a, 0xff, 0x5d, 0xa0, 0x24, 0x41, 0x45, 0x1c, 0x02, 0x9a, + 0x24, 0x01, 0xb5, 0x01, 0xff, 0xf2, 0x9b, 0x24, 0x01, 0x44, 0x06, 0x67, + 0x9c, 0x24, 0xc1, 0x00, 0x4c, 0x0a, 0x67, 0x9d, 0x24, 0x41, 0xe1, 0x97, + 0x24, 0x01, 0xe9, 0x98, 0x24, 0x41, 0xe1, 0x93, 0x24, 0x01, 0xe9, 0x94, + 0x24, 0xc1, 0x00, 0x47, 0x0d, 0xd5, 0x95, 0x24, 0x01, 0x42, 0xa4, 0x02, + 0x96, 0x24, 0x41, 0x42, 0x9e, 0x01, 0x90, 0x24, 0x01, 0x42, 0x42, 0x0b, + 0x91, 0x24, 0x41, 0x44, 0x95, 0xf1, 0x8d, 0x24, 0x01, 0x42, 0xa4, 0x02, + 0x8e, 0x24, 0xc1, 0x00, 0x48, 0xf6, 0x16, 0x8f, 0x24, 0x41, 0x07, 0x27, + 0x02, 0x04, 0xd2, 0x80, 0x20, 0x41, 0x44, 0x6b, 0x75, 0x7f, 0x20, 0x01, + 0x43, 0x8e, 0x06, 0x76, 0x23, 0x41, 0x44, 0xbc, 0x3f, 0x7c, 0x20, 0x01, + 0x47, 0x49, 0xd4, 0x7b, 0x20, 0x01, 0x47, 0x1b, 0x7c, 0x7d, 0x20, 0x41, + 0xe2, 0x73, 0x20, 0x01, 0xed, 0x74, 0x20, 0x81, 0x18, 0xee, 0x77, 0x20, + 0x81, 0x0d, 0x42, 0xa4, 0x02, 0x79, 0x20, 0xc1, 0x00, 0x49, 0xfb, 0xa5, + 0x75, 0x23, 0x41, 0x53, 0x90, 0x47, 0x78, 0x20, 0x41, 0x07, 0x27, 0x02, + 0x0b, 0xd2, 0x76, 0x20, 0xc1, 0x00, 0x49, 0xf8, 0xb4, 0x8c, 0x24, 0x41, + 0x43, 0xf0, 0x06, 0x8a, 0x24, 0x01, 0x43, 0x8e, 0x06, 0x75, 0x20, 0x01, + 0x45, 0xaa, 0xeb, 0x8b, 0x24, 0x41, 0x4b, 0x09, 0x45, 0x88, 0x24, 0x01, + 0xe7, 0x56, 0x20, 0x81, 0x14, 0xed, 0x6e, 0x20, 0x01, 0xf2, 0x6f, 0x20, + 0xc1, 0x00, 0xa1, 0x01, 0xff, 0xd3, 0x70, 0x20, 0x01, 0xd4, 0x71, 0x20, + 0x41, 0x80, 0x04, 0xd3, 0x74, 0x23, 0x41, 0x0d, 0x1e, 0x6f, 0x06, 0x49, + 0x00, 0x5e, 0x89, 0x24, 0x41, 0xa1, 0x89, 0x01, 0xa2, 0x7d, 0xa7, 0x5f, + 0x42, 0x22, 0x00, 0x60, 0x20, 0x01, 0x42, 0x46, 0x00, 0x61, 0x20, 0x81, + 0x4c, 0x43, 0x5c, 0x60, 0x63, 0x20, 0x01, 0xac, 0x31, 0x42, 0xcd, 0x05, + 0x68, 0x20, 0x01, 0x4c, 0x7c, 0x3d, 0x69, 0x20, 0x01, 0x42, 0x5a, 0x03, + 0x6a, 0x20, 0x01, 0x44, 0x10, 0x45, 0x6b, 0x20, 0x01, 0xb5, 0x01, 0xff, + 0x07, 0x09, 0x67, 0x06, 0x42, 0xa4, 0x02, 0x6d, 0x20, 0x41, 0x44, 0x05, + 0xf0, 0x6c, 0x20, 0x01, 0x44, 0x8c, 0x06, 0x73, 0x23, 0x41, 0xe1, 0x64, + 0x20, 0x01, 0xf5, 0x65, 0x20, 0xc1, 0x00, 0x4b, 0xa0, 0x97, 0x66, 0x20, + 0x01, 0xed, 0x67, 0x20, 0x41, 0x48, 0x88, 0x3d, 0x62, 0x20, 0x41, 0xe1, + 0x5b, 0x20, 0x81, 0x11, 0xe9, 0x5d, 0x20, 0x81, 0x06, 0x42, 0xb2, 0x0c, + 0x5f, 0x20, 0x41, 0x42, 0xbe, 0x42, 0x5e, 0x20, 0x41, 0x4a, 0xa0, 0x97, + 0x5c, 0x20, 0x41, 0x44, 0xa3, 0xe4, 0x59, 0x20, 0x01, 0xe9, 0x5a, 0x20, + 0x41, 0x4a, 0xa0, 0x97, 0x57, 0x20, 0x01, 0x43, 0xb9, 0x00, 0x58, 0x20, + 0x41, 0xe1, 0x40, 0x20, 0x81, 0x54, 0xe9, 0x49, 0x20, 0x81, 0x3a, 0xf5, + 0x4d, 0x20, 0xc1, 0x00, 0x80, 0x16, 0x43, 0xf0, 0x7a, 0x51, 0x20, 0x81, + 0x09, 0xf2, 0x53, 0x20, 0xc1, 0x00, 0xd2, 0x54, 0x20, 0x41, 0x4b, 0x8a, + 0x97, 0x52, 0x20, 0x41, 0x4b, 0x60, 0x9a, 0x50, 0x20, 0x01, 0x08, 0x80, + 0xc9, 0x01, 0xff, 0x42, 0x5c, 0x00, 0x4e, 0x20, 0x01, 0x49, 0xcc, 0xbf, + 0x87, 0x24, 0x01, 0x42, 0x42, 0x0b, 0x4f, 0x20, 0x41, 0x07, 0x27, 0x02, + 0x01, 0xff, 0xe1, 0x4a, 0x20, 0x01, 0x43, 0x6c, 0x1e, 0x4b, 0x20, 0x01, + 0x48, 0xd0, 0x69, 0x4c, 0x20, 0x41, 0xe4, 0x41, 0x20, 0x81, 0x40, 0x42, + 0x14, 0xf5, 0x42, 0x20, 0x01, 0x44, 0xbc, 0x42, 0x43, 0x20, 0x81, 0x1c, + 0xec, 0x44, 0x20, 0x81, 0x0b, 0xf2, 0x47, 0x20, 0xc1, 0x00, 0x42, 0x69, + 0x7f, 0x48, 0x20, 0x41, 0x49, 0x7a, 0xb4, 0x45, 0x20, 0x01, 0x42, 0x23, + 0x02, 0x46, 0x20, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, 0x45, 0xa7, + 0x84, 0x24, 0x01, 0x42, 0x51, 0x03, 0x85, 0x24, 0x01, 0x42, 0x59, 0x00, + 0x86, 0x24, 0x41, 0x50, 0x76, 0x60, 0x83, 0x24, 0x41, 0x07, 0x27, 0x02, + 0x9d, 0x03, 0xd2, 0x09, 0x20, 0x01, 0xe2, 0x0a, 0x20, 0x81, 0x83, 0x02, + 0xe4, 0x1c, 0x20, 0x81, 0xf7, 0x01, 0xeb, 0x1d, 0x20, 0x81, 0xe0, 0x01, + 0xec, 0x20, 0x20, 0x81, 0x9a, 0x01, 0x43, 0xb9, 0x00, 0x2b, 0x20, 0x81, + 0x81, 0x01, 0xee, 0x2d, 0x20, 0x81, 0x58, 0x43, 0x28, 0x13, 0x33, 0x20, + 0x01, 0xb2, 0x3d, 0xb3, 0x01, 0xff, 0x43, 0xe9, 0xf3, 0x37, 0x20, 0x01, + 0xe8, 0x38, 0x20, 0xc1, 0x00, 0x80, 0x0a, 0xd2, 0x3e, 0x20, 0x01, 0x43, + 0x24, 0x02, 0x3f, 0x20, 0x41, 0x49, 0xd4, 0xa5, 0x3a, 0x20, 0x01, 0x09, + 0xa2, 0x10, 0x06, 0x49, 0x22, 0x95, 0x39, 0x20, 0x41, 0x48, 0xa2, 0x10, + 0x3c, 0x20, 0x81, 0x06, 0x61, 0xd1, 0x0e, 0x3b, 0x20, 0x41, 0x5f, 0x94, + 0x10, 0x3d, 0x20, 0x41, 0x42, 0xe8, 0x01, 0x34, 0x20, 0x81, 0x06, 0x43, + 0x1a, 0x9e, 0x36, 0x20, 0x41, 0x4a, 0xff, 0x5d, 0x35, 0x20, 0x41, 0x80, + 0x06, 0x43, 0x8e, 0x06, 0x32, 0x20, 0x41, 0x47, 0x42, 0xd4, 0x2e, 0x20, + 0x01, 0x0a, 0x97, 0xaf, 0x06, 0x4b, 0x7c, 0xa3, 0x2f, 0x20, 0x41, 0x55, + 0x67, 0x3d, 0x30, 0x20, 0x01, 0x47, 0xd6, 0x05, 0x31, 0x20, 0x41, 0x07, + 0x27, 0x02, 0x01, 0xff, 0x43, 0x6a, 0xf4, 0x72, 0x23, 0x01, 0x43, 0x8e, + 0x06, 0x2c, 0x20, 0x41, 0x07, 0x27, 0x02, 0x0c, 0x42, 0x1a, 0x00, 0x29, + 0x20, 0x01, 0x43, 0x19, 0x3d, 0x2a, 0x20, 0x41, 0x42, 0x13, 0x00, 0x21, + 0x20, 0x01, 0x44, 0x8d, 0xef, 0x22, 0x20, 0x01, 0x44, 0x05, 0x45, 0x23, + 0x20, 0x01, 0x42, 0x22, 0x00, 0x24, 0x20, 0x01, 0xab, 0x0c, 0x43, 0x8e, + 0x06, 0x27, 0x20, 0x01, 0x43, 0x30, 0x7c, 0x28, 0x20, 0x41, 0x43, 0xc2, + 0xf0, 0x25, 0x20, 0x01, 0xe9, 0x26, 0x20, 0x41, 0x07, 0x27, 0x02, 0x01, + 0xff, 0x45, 0x92, 0xaf, 0x1e, 0x20, 0x01, 0x4f, 0xfc, 0x72, 0x1f, 0x20, + 0x41, 0x4b, 0xd7, 0x97, 0x82, 0x24, 0x41, 0x80, 0x2c, 0xd2, 0x16, 0x20, + 0xc1, 0x00, 0x07, 0x27, 0x02, 0x01, 0xff, 0xe1, 0x71, 0x23, 0x01, 0x45, + 0xa2, 0xe4, 0x17, 0x20, 0x01, 0x49, 0x8d, 0x60, 0x18, 0x20, 0x01, 0x4a, + 0xc1, 0xad, 0x19, 0x20, 0x01, 0x44, 0x49, 0x57, 0x1a, 0x20, 0x01, 0x44, + 0x10, 0x45, 0x1b, 0x20, 0x41, 0x44, 0xbc, 0x3f, 0x15, 0x20, 0x01, 0x06, + 0x28, 0x02, 0x01, 0xff, 0x44, 0xf9, 0x03, 0x0b, 0x20, 0x01, 0x49, 0x21, + 0x77, 0x0c, 0x20, 0x01, 0x02, 0x24, 0x02, 0x3d, 0x42, 0x22, 0x00, 0x0f, + 0x20, 0x01, 0xa9, 0x29, 0x45, 0x22, 0x02, 0x12, 0x20, 0x01, 0x43, 0xdc, + 0x22, 0x70, 0x23, 0x81, 0x16, 0x02, 0xa4, 0x02, 0x06, 0x4f, 0x19, 0x74, + 0x14, 0x20, 0x41, 0x43, 0x93, 0x5a, 0x13, 0x20, 0x01, 0x42, 0x08, 0x67, + 0x81, 0x24, 0x41, 0x45, 0x81, 0x60, 0x80, 0x24, 0x41, 0x47, 0xd1, 0x69, + 0x10, 0x20, 0x01, 0x43, 0xcb, 0x13, 0x11, 0x20, 0x41, 0xec, 0x0d, 0x20, + 0x01, 0x47, 0x8f, 0x60, 0x0e, 0x20, 0x41, 0xe1, 0x01, 0x20, 0x01, 0x43, + 0xe9, 0x70, 0x02, 0x20, 0x01, 0x49, 0x8d, 0x60, 0x03, 0x20, 0x01, 0x42, + 0x22, 0x00, 0x04, 0x20, 0x01, 0x43, 0xf0, 0x06, 0x05, 0x20, 0x01, 0x4a, + 0xb6, 0x3f, 0x06, 0x20, 0x01, 0x44, 0xca, 0x81, 0x07, 0x20, 0x01, 0x43, + 0xeb, 0x88, 0x08, 0x20, 0x41, 0x09, 0xe3, 0x25, 0x0c, 0x59, 0x2e, 0x25, + 0x70, 0x24, 0x01, 0x4e, 0x67, 0x7e, 0x71, 0x24, 0x41, 0x45, 0x94, 0x3b, + 0x72, 0x24, 0x01, 0x49, 0x40, 0xbe, 0x74, 0x24, 0x01, 0x48, 0xc0, 0xcb, + 0x73, 0x24, 0x41, 0xa5, 0xb5, 0x05, 0xa6, 0xf6, 0x03, 0x02, 0x51, 0x03, + 0xa4, 0x03, 0xaf, 0xb7, 0x02, 0xb3, 0xb5, 0x01, 0xb4, 0x01, 0xff, 0x05, + 0x25, 0x01, 0x4f, 0x03, 0x20, 0x0a, 0x01, 0xff, 0x43, 0xf9, 0x03, 0x00, + 0x24, 0x81, 0x3d, 0xa2, 0x2f, 0x45, 0x1e, 0xe6, 0x59, 0x24, 0x01, 0x04, + 0xe7, 0x6b, 0x1d, 0x04, 0x5f, 0x19, 0x11, 0x07, 0xee, 0x74, 0x01, 0xff, + 0x44, 0xd0, 0x0c, 0x5b, 0x24, 0x01, 0x4e, 0xf7, 0x5e, 0x5e, 0x24, 0x41, + 0xd2, 0x23, 0x24, 0x01, 0xf5, 0x2d, 0x24, 0x41, 0xd2, 0x16, 0x24, 0x01, + 0xf5, 0x1f, 0x24, 0x41, 0x43, 0x8e, 0x60, 0x50, 0x24, 0x01, 0x43, 0xb9, + 0xaa, 0x35, 0x24, 0x41, 0x45, 0x81, 0x60, 0x4a, 0x24, 0x41, 0x43, 0xf9, + 0x03, 0x01, 0x24, 0x81, 0x52, 0xa2, 0x3d, 0x44, 0xd0, 0x0c, 0x08, 0x24, + 0x01, 0x04, 0xe7, 0x6b, 0x2b, 0x04, 0x5f, 0x19, 0x11, 0x10, 0x56, 0x68, + 0x01, 0xff, 0x42, 0xe8, 0xf4, 0x3a, 0x24, 0x01, 0x42, 0x8f, 0xd8, 0x3b, + 0x24, 0x41, 0xd2, 0x24, 0x24, 0x81, 0x0b, 0xf5, 0x2e, 0x24, 0xc1, 0x00, + 0x4d, 0xb9, 0x7f, 0x2f, 0x24, 0x41, 0x4d, 0xb9, 0x7f, 0x25, 0x24, 0x41, + 0xd2, 0x17, 0x24, 0x01, 0xf5, 0x20, 0x24, 0x41, 0x43, 0x8e, 0x60, 0x51, + 0x24, 0x01, 0x43, 0xb9, 0xaa, 0x36, 0x24, 0xc1, 0x00, 0x4d, 0xb9, 0x7f, + 0x37, 0x24, 0x41, 0x45, 0x81, 0x60, 0x4b, 0x24, 0x41, 0x05, 0x70, 0x22, + 0x45, 0x14, 0xbc, 0x42, 0x35, 0x03, 0xff, 0x52, 0x01, 0xff, 0x43, 0xf9, + 0x03, 0x04, 0x24, 0x81, 0x23, 0x44, 0xd0, 0x0c, 0x0b, 0x24, 0x01, 0x45, + 0xa0, 0xe6, 0x1a, 0x24, 0x01, 0x45, 0xd8, 0xea, 0x28, 0x24, 0x01, 0xf5, + 0x11, 0x24, 0x81, 0x06, 0x51, 0xf7, 0x5e, 0x40, 0x24, 0x41, 0x4d, 0xb9, + 0x7f, 0x6b, 0x24, 0x41, 0x45, 0x81, 0x60, 0x4e, 0x24, 0x41, 0x44, 0xd0, + 0x0c, 0x32, 0x24, 0x01, 0x43, 0xcb, 0x13, 0x33, 0x24, 0x41, 0x43, 0xf9, + 0x03, 0x05, 0x24, 0x01, 0x44, 0xd0, 0x0c, 0x0c, 0x24, 0x01, 0x45, 0xa0, + 0xe6, 0x1b, 0x24, 0x01, 0x45, 0xd8, 0xea, 0x29, 0x24, 0x01, 0xf5, 0x12, + 0x24, 0x81, 0x13, 0x11, 0x08, 0x5f, 0x01, 0xff, 0x80, 0x04, 0xd3, 0x41, + 0x24, 0x41, 0xe1, 0x42, 0x24, 0x01, 0xe2, 0x43, 0x24, 0x41, 0x4d, 0xb9, + 0x7f, 0x6c, 0x24, 0x41, 0x10, 0x66, 0x64, 0x5a, 0x03, 0xef, 0x07, 0x01, + 0xff, 0xa2, 0x47, 0xa5, 0x39, 0x04, 0xe7, 0x6b, 0x2d, 0x48, 0x90, 0xc6, + 0x64, 0x24, 0x01, 0x08, 0x04, 0x03, 0x17, 0x45, 0xe2, 0xea, 0x2c, 0x24, + 0x01, 0x06, 0x38, 0x89, 0x01, 0xff, 0x44, 0xd0, 0x0c, 0x5a, 0x24, 0x01, + 0x4e, 0xf7, 0x5e, 0x5d, 0x24, 0x41, 0x43, 0xf9, 0x03, 0x60, 0x24, 0x01, + 0x43, 0x84, 0x80, 0x63, 0x24, 0x41, 0xd2, 0x15, 0x24, 0x01, 0xf5, 0x1e, + 0x24, 0x41, 0x49, 0x1a, 0xba, 0x5f, 0x24, 0x01, 0x44, 0x1f, 0xe6, 0x58, + 0x24, 0x41, 0x43, 0x8e, 0x60, 0x4f, 0x24, 0x01, 0x43, 0xb9, 0xaa, 0x34, + 0x24, 0x41, 0x47, 0x2a, 0x01, 0x62, 0x24, 0x01, 0x45, 0xe6, 0xdf, 0x61, + 0x24, 0x41, 0x04, 0xfd, 0xef, 0x3d, 0x03, 0xef, 0x07, 0x01, 0xff, 0x43, + 0xf9, 0x03, 0x07, 0x24, 0x01, 0x44, 0xd0, 0x0c, 0x0e, 0x24, 0x01, 0x45, + 0xa0, 0xe6, 0x1d, 0x24, 0x01, 0x45, 0xd8, 0xea, 0x2b, 0x24, 0x01, 0xf5, + 0x14, 0x24, 0x81, 0x15, 0x53, 0x64, 0x4e, 0x46, 0x24, 0xc1, 0x00, 0x42, + 0x19, 0x00, 0x49, 0x24, 0x01, 0xd3, 0x47, 0x24, 0x01, 0xd4, 0x48, 0x24, + 0x41, 0x4d, 0xb9, 0x7f, 0x6e, 0x24, 0x41, 0x43, 0x93, 0x5a, 0x57, 0x24, + 0x01, 0x43, 0xcb, 0x13, 0x56, 0x24, 0x41, 0x04, 0xd2, 0x05, 0x65, 0x04, + 0xf6, 0x06, 0x01, 0xff, 0x43, 0xf9, 0x03, 0x02, 0x24, 0x81, 0x53, 0xa2, + 0x3e, 0x44, 0xd0, 0x0c, 0x09, 0x24, 0x01, 0x04, 0xe7, 0x6b, 0x2c, 0x04, + 0x5f, 0x19, 0x20, 0xf5, 0x0f, 0x24, 0x81, 0x15, 0x52, 0x5f, 0x56, 0x3c, + 0x24, 0xc1, 0x00, 0x80, 0x04, 0xd4, 0x3d, 0x24, 0x41, 0xe1, 0x3e, 0x24, + 0x01, 0xe2, 0x3f, 0x24, 0x41, 0x4d, 0xb9, 0x7f, 0x69, 0x24, 0x41, 0xd2, + 0x26, 0x24, 0x01, 0xf5, 0x30, 0x24, 0x41, 0xd2, 0x18, 0x24, 0x01, 0xf5, + 0x21, 0x24, 0x41, 0x43, 0x8e, 0x60, 0x52, 0x24, 0x81, 0x06, 0x43, 0xb9, + 0xaa, 0x38, 0x24, 0x41, 0x4d, 0xb9, 0x7f, 0x53, 0x24, 0x41, 0x45, 0x81, + 0x60, 0x4c, 0x24, 0x41, 0x43, 0xf9, 0x03, 0x03, 0x24, 0x81, 0x46, 0xa2, + 0x31, 0x44, 0xd0, 0x0c, 0x0a, 0x24, 0x01, 0x04, 0xe7, 0x6b, 0x1f, 0xb3, + 0x0b, 0xf5, 0x10, 0x24, 0xc1, 0x00, 0x4d, 0xb9, 0x7f, 0x6a, 0x24, 0x41, + 0x03, 0xc9, 0x02, 0x06, 0x4a, 0x27, 0xac, 0x5c, 0x24, 0x41, 0xd2, 0x27, + 0x24, 0x01, 0xf5, 0x31, 0x24, 0x41, 0xd2, 0x19, 0x24, 0x01, 0xf5, 0x22, + 0x24, 0x41, 0x43, 0x8e, 0x60, 0x54, 0x24, 0x81, 0x06, 0x43, 0xb9, 0xaa, + 0x39, 0x24, 0x41, 0x4d, 0xb9, 0x7f, 0x55, 0x24, 0x41, 0x45, 0x81, 0x60, + 0x4d, 0x24, 0x41, 0x05, 0xc9, 0x00, 0x1f, 0x07, 0xac, 0xd2, 0x01, 0xff, + 0xa6, 0x0c, 0x49, 0x29, 0xbd, 0x65, 0x24, 0x01, 0x4a, 0x53, 0xb2, 0x66, + 0x24, 0x41, 0x44, 0x51, 0x4d, 0x68, 0x24, 0x01, 0x44, 0xce, 0x51, 0x67, + 0x24, 0x41, 0x43, 0xf9, 0x03, 0x06, 0x24, 0x01, 0x44, 0xd0, 0x0c, 0x0d, + 0x24, 0x01, 0x45, 0xa0, 0xe6, 0x1c, 0x24, 0x01, 0x45, 0xd8, 0xea, 0x2a, + 0x24, 0x01, 0xf5, 0x13, 0x24, 0x81, 0x0b, 0x51, 0x19, 0x5f, 0x44, 0x24, + 0xc1, 0x00, 0xd3, 0x45, 0x24, 0x41, 0x4d, 0xb9, 0x7f, 0x6d, 0x24, 0x41, + 0x42, 0x5c, 0x00, 0x80, 0xf9, 0x01, 0xa5, 0xa1, 0x01, 0x45, 0xe9, 0x78, + 0x97, 0xf9, 0x81, 0x93, 0x01, 0xaf, 0x27, 0xb5, 0x19, 0xb9, 0x01, 0xff, + 0x04, 0xa1, 0x01, 0x06, 0x49, 0x69, 0xbf, 0x2e, 0xf5, 0x41, 0x48, 0x62, + 0x1f, 0x3f, 0xf6, 0x01, 0x44, 0x0c, 0x08, 0x22, 0xf6, 0x41, 0x43, 0x96, + 0x21, 0x7c, 0xfa, 0x01, 0x4a, 0x0b, 0xb4, 0xa2, 0x20, 0x40, 0x46, 0xb2, + 0xda, 0x0a, 0xf4, 0x01, 0x46, 0x16, 0xdd, 0x50, 0xf9, 0x01, 0x02, 0xee, + 0x00, 0x06, 0x42, 0xa7, 0x01, 0x51, 0xf4, 0x41, 0x80, 0x1c, 0x03, 0x05, + 0x00, 0x06, 0x49, 0x8f, 0xba, 0xcc, 0x26, 0x40, 0x45, 0x69, 0xe6, 0x8c, + 0xf3, 0x01, 0x67, 0xcd, 0x05, 0x8a, 0xf1, 0x01, 0x46, 0x40, 0xe0, 0x94, + 0x26, 0x40, 0x44, 0xb9, 0x00, 0x4c, 0x27, 0x00, 0x03, 0xf4, 0x01, 0x20, + 0xb0, 0x01, 0xff, 0x0a, 0x0d, 0xa8, 0x0d, 0x45, 0x3f, 0xdf, 0x42, 0xf5, + 0xc1, 0x00, 0x57, 0xba, 0x2c, 0x41, 0xf5, 0x41, 0x4d, 0x01, 0x85, 0x51, + 0x2e, 0x00, 0x4e, 0xb9, 0x7b, 0x50, 0x2e, 0x40, 0x49, 0xe0, 0xba, 0x29, + 0x26, 0x00, 0x48, 0xf0, 0xc7, 0x28, 0x26, 0x40, 0x4d, 0x44, 0x7f, 0xcf, + 0xf3, 0x41, 0x48, 0x28, 0xc5, 0xb3, 0xf4, 0x01, 0x4a, 0x43, 0x41, 0x19, + 0xf3, 0x41, 0x42, 0x8a, 0x00, 0xe5, 0xf9, 0x01, 0xa3, 0x9c, 0x25, 0x44, + 0xc9, 0xef, 0xb0, 0x26, 0x00, 0x42, 0x9e, 0x01, 0x99, 0xfa, 0x01, 0xac, + 0xf1, 0x24, 0xad, 0xbd, 0x0c, 0xae, 0xad, 0x0b, 0x02, 0x55, 0x05, 0x95, + 0x0b, 0xb0, 0xcb, 0x01, 0xb2, 0xb6, 0x01, 0xb5, 0x0b, 0xf7, 0x04, 0xf4, + 0xc1, 0x00, 0x45, 0x0b, 0x08, 0x2e, 0xf4, 0x41, 0x4b, 0x13, 0x9a, 0xcb, + 0xf6, 0x01, 0x02, 0x11, 0x00, 0x06, 0x4e, 0x1f, 0x7b, 0x91, 0xf4, 0x41, + 0x02, 0x33, 0x00, 0x88, 0x01, 0x08, 0x20, 0xc7, 0x01, 0xff, 0x0b, 0x3a, + 0xa3, 0x42, 0x0b, 0x58, 0xa4, 0x01, 0xff, 0x45, 0x12, 0x0b, 0x67, 0xd3, + 0x01, 0xa6, 0x29, 0x44, 0xcf, 0x2a, 0x68, 0xd3, 0x01, 0x43, 0x0e, 0x0b, + 0x60, 0xd3, 0x01, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x62, + 0xd3, 0x01, 0x42, 0x15, 0x02, 0x61, 0xd3, 0x41, 0x44, 0xc9, 0x1d, 0x66, + 0xd3, 0x01, 0x42, 0x01, 0x26, 0x65, 0xd3, 0x41, 0x43, 0xd2, 0x05, 0x64, + 0xd3, 0x01, 0x43, 0xf6, 0x06, 0x63, 0xd3, 0x41, 0x45, 0x12, 0x0b, 0x70, + 0xd3, 0x01, 0xa6, 0x29, 0x44, 0xcf, 0x2a, 0x71, 0xd3, 0x01, 0x43, 0x0e, + 0x0b, 0x69, 0xd3, 0x01, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, + 0x6b, 0xd3, 0x01, 0x42, 0x15, 0x02, 0x6a, 0xd3, 0x41, 0x44, 0xc9, 0x1d, + 0x6f, 0xd3, 0x01, 0x42, 0x01, 0x26, 0x6e, 0xd3, 0x41, 0x43, 0xd2, 0x05, + 0x6d, 0xd3, 0x01, 0x43, 0xf6, 0x06, 0x6c, 0xd3, 0x41, 0x44, 0x49, 0xef, + 0x34, 0x23, 0x00, 0x44, 0xad, 0xf2, 0x35, 0x23, 0x40, 0x42, 0x13, 0x00, + 0xb8, 0xfa, 0x01, 0x52, 0xd7, 0x53, 0x4f, 0x2e, 0x00, 0x4b, 0xe5, 0xa1, + 0x58, 0x22, 0x40, 0x04, 0x26, 0x20, 0x0f, 0xb9, 0x01, 0xff, 0x4b, 0xa1, + 0x9e, 0x2f, 0xf1, 0x01, 0x4a, 0x55, 0xb0, 0xa9, 0x00, 0x40, 0xa3, 0xed, + 0x05, 0x06, 0x5a, 0xdb, 0x90, 0x04, 0xa6, 0x81, 0x04, 0x55, 0xfe, 0x3c, + 0xff, 0x2c, 0x00, 0x0b, 0x9b, 0xa0, 0xde, 0x03, 0xb3, 0x01, 0xff, 0x0c, + 0x77, 0x08, 0x33, 0x06, 0x60, 0x16, 0x01, 0xff, 0xab, 0x20, 0x45, 0xa3, + 0xe8, 0xe5, 0x2c, 0x00, 0x45, 0xe3, 0xe9, 0xe6, 0x2c, 0x00, 0xb3, 0x06, + 0x46, 0x6a, 0xe0, 0xe8, 0x2c, 0x40, 0x49, 0x9c, 0xb9, 0xea, 0x2c, 0x00, + 0x46, 0x70, 0xe0, 0xe7, 0x2c, 0x40, 0x42, 0x56, 0x07, 0xe4, 0x2c, 0x00, + 0x45, 0x7d, 0xca, 0xe9, 0x2c, 0x40, 0xa1, 0x95, 0x03, 0x4d, 0x25, 0x81, + 0xf3, 0x2c, 0x00, 0x02, 0x75, 0x06, 0xe7, 0x02, 0xa4, 0xbb, 0x02, 0x43, + 0x31, 0xf4, 0x89, 0x2c, 0x00, 0xa6, 0xa8, 0x02, 0x02, 0x24, 0x02, 0x97, + 0x02, 0xa8, 0x88, 0x02, 0x45, 0x40, 0xe7, 0x93, 0x2c, 0x00, 0xab, 0xe7, + 0x01, 0xac, 0xd8, 0x01, 0x42, 0x7d, 0x02, 0x99, 0x2c, 0x00, 0x42, 0x51, + 0x03, 0x9b, 0x2c, 0x00, 0xef, 0x9f, 0x2c, 0x80, 0x54, 0xb0, 0x48, 0x42, + 0xd0, 0x00, 0xa3, 0x2c, 0x00, 0xb3, 0x20, 0xb4, 0x12, 0x42, 0x7d, 0x00, + 0xa9, 0x2c, 0x00, 0x44, 0x05, 0xf3, 0x83, 0x2c, 0x00, 0x44, 0x55, 0xf3, + 0x8d, 0x2c, 0x40, 0x42, 0x5f, 0x24, 0xa7, 0x2c, 0x00, 0x45, 0xfa, 0xe6, + 0x91, 0x2c, 0x40, 0x44, 0x37, 0x94, 0xc1, 0x2c, 0x00, 0xa8, 0x0c, 0x43, + 0xe3, 0x0c, 0xa5, 0x2c, 0x00, 0x42, 0x3c, 0x01, 0x8b, 0x2c, 0x40, 0x42, + 0x12, 0x0b, 0xe3, 0x03, 0x00, 0x43, 0xe3, 0x0c, 0xed, 0x03, 0x40, 0xe9, + 0xa1, 0x2c, 0x00, 0x42, 0x5a, 0x03, 0xaf, 0x2c, 0x40, 0x03, 0x03, 0x24, + 0x06, 0x42, 0x3c, 0x01, 0xb1, 0x2c, 0x40, 0x07, 0x1a, 0xd0, 0x1f, 0x07, + 0x9f, 0xa0, 0x01, 0xff, 0xae, 0x0c, 0x45, 0xe7, 0xea, 0xdd, 0x2c, 0x00, + 0x43, 0x09, 0xa4, 0xe3, 0x2c, 0x40, 0x42, 0xf1, 0x06, 0xdf, 0x2c, 0x00, + 0x42, 0x7e, 0x1a, 0xe1, 0x2c, 0x40, 0x43, 0x56, 0x07, 0xb5, 0x2c, 0x00, + 0x43, 0x22, 0xf4, 0xd9, 0x2c, 0x00, 0x43, 0x93, 0x5a, 0xc7, 0x2c, 0x00, + 0x46, 0xde, 0xdb, 0xd7, 0x2c, 0x00, 0xa8, 0x17, 0x43, 0x7a, 0x93, 0xbf, + 0x2c, 0x00, 0x02, 0xa4, 0x02, 0x01, 0xff, 0x42, 0x12, 0x0b, 0xc5, 0x2c, + 0x00, 0x43, 0xe3, 0x0c, 0xdb, 0x2c, 0x40, 0xe1, 0xcf, 0x2c, 0x80, 0x0c, + 0x42, 0x12, 0x0b, 0xd3, 0x2c, 0x00, 0x43, 0x0c, 0x00, 0xcd, 0x2c, 0x40, + 0xf4, 0xd5, 0x2c, 0x40, 0x4a, 0xb9, 0xa6, 0xd1, 0x2c, 0x00, 0x44, 0x29, + 0xef, 0x97, 0x2c, 0x40, 0x43, 0x7b, 0x3d, 0x95, 0x2c, 0x00, 0xa8, 0x06, + 0x42, 0x5a, 0x03, 0x9d, 0x2c, 0x40, 0x42, 0x12, 0x0b, 0xe7, 0x03, 0x00, + 0xe9, 0xad, 0x2c, 0x40, 0x43, 0x8a, 0x00, 0x8f, 0x2c, 0x00, 0x43, 0x0c, + 0x00, 0xe9, 0x03, 0x40, 0x43, 0x15, 0x05, 0x85, 0x2c, 0x00, 0x44, 0xe0, + 0xdb, 0xeb, 0x03, 0x40, 0x42, 0x12, 0x0b, 0xe5, 0x03, 0x00, 0xe9, 0xab, + 0x2c, 0x40, 0x44, 0xf5, 0xee, 0x87, 0x2c, 0x00, 0x42, 0x12, 0x0b, 0xef, + 0x03, 0x00, 0x09, 0xed, 0xb9, 0x01, 0xff, 0x44, 0x67, 0x00, 0xb3, 0x2c, + 0x00, 0x44, 0x0b, 0x00, 0xcb, 0x2c, 0x00, 0x44, 0xce, 0xc9, 0xb9, 0x2c, + 0x00, 0x42, 0x51, 0x03, 0xbb, 0x2c, 0x40, 0x4a, 0x15, 0xaf, 0xc3, 0x2c, + 0x00, 0x0c, 0xd4, 0x24, 0x01, 0xff, 0x43, 0x31, 0xf4, 0xb7, 0x2c, 0x00, + 0x46, 0xde, 0xdb, 0xee, 0x2c, 0x00, 0x42, 0x51, 0x03, 0xbd, 0x2c, 0x00, + 0x44, 0x1b, 0xaf, 0xec, 0x2c, 0x40, 0x4c, 0xab, 0x90, 0xc9, 0x2c, 0x00, + 0x43, 0x6d, 0xf4, 0x81, 0x2c, 0x40, 0x54, 0x9f, 0x34, 0xfa, 0x2c, 0x00, + 0x49, 0x81, 0x16, 0xf9, 0x2c, 0x00, 0x56, 0x9d, 0x34, 0xfb, 0x2c, 0x00, + 0x4d, 0xdc, 0x53, 0xfc, 0x2c, 0x40, 0x50, 0x1f, 0x5a, 0xfd, 0x2c, 0x00, + 0x48, 0x82, 0x16, 0xfe, 0x2c, 0x40, 0x06, 0xef, 0x06, 0x96, 0x01, 0x07, + 0xff, 0x39, 0x06, 0x4e, 0xed, 0x7c, 0xe0, 0x02, 0x41, 0x05, 0x12, 0x0b, + 0x7e, 0xa6, 0x5f, 0x04, 0xcf, 0x2a, 0x4f, 0x4b, 0x6d, 0x11, 0xf3, 0x02, + 0x01, 0xb3, 0x26, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xea, 0x02, 0x01, + 0xa8, 0x0f, 0xb7, 0x01, 0xff, 0x44, 0xcb, 0x1d, 0xeb, 0x02, 0x01, 0x49, + 0xbe, 0x1d, 0xf4, 0x02, 0x41, 0x44, 0x7b, 0x11, 0xec, 0x02, 0x01, 0x4b, + 0xfb, 0x17, 0xf5, 0x02, 0x41, 0x04, 0xc9, 0x1d, 0x11, 0x02, 0x01, 0x26, + 0x01, 0xff, 0x48, 0x70, 0x11, 0xf8, 0x02, 0x01, 0x42, 0x7d, 0x11, 0xef, + 0x02, 0x41, 0x48, 0x70, 0x11, 0xf9, 0x02, 0x01, 0x42, 0x7d, 0x11, 0xf0, + 0x02, 0x41, 0x48, 0x70, 0x11, 0xfb, 0x02, 0x01, 0x42, 0x7d, 0x11, 0xf2, + 0x02, 0x41, 0xa9, 0x0f, 0xaf, 0x01, 0xff, 0x43, 0x7c, 0x11, 0xed, 0x02, + 0x01, 0x4a, 0xf3, 0xb2, 0xf6, 0x02, 0x41, 0x43, 0x52, 0x4d, 0xee, 0x02, + 0x01, 0x4a, 0x82, 0x39, 0xf7, 0x02, 0x41, 0x48, 0x70, 0x11, 0xfa, 0x02, + 0x01, 0xf9, 0xf1, 0x02, 0x41, 0x45, 0x12, 0x0b, 0xe8, 0x02, 0x01, 0xa6, + 0x29, 0x44, 0xcf, 0x2a, 0xe9, 0x02, 0x01, 0x43, 0x0e, 0x0b, 0xe1, 0x02, + 0x01, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xe3, 0x02, 0x01, + 0x42, 0x15, 0x02, 0xe2, 0x02, 0x41, 0x44, 0xc9, 0x1d, 0xe7, 0x02, 0x01, + 0x42, 0x01, 0x26, 0xe6, 0x02, 0x41, 0x43, 0xd2, 0x05, 0xe5, 0x02, 0x01, + 0x43, 0xf6, 0x06, 0xe4, 0x02, 0x41, 0x0e, 0xe5, 0x05, 0x1c, 0x09, 0x33, + 0x16, 0x01, 0xff, 0x48, 0xb0, 0xc8, 0xef, 0x2c, 0x00, 0x09, 0x57, 0xbf, + 0x01, 0xff, 0x45, 0x7a, 0xe4, 0xf0, 0x2c, 0x00, 0x45, 0x2b, 0xe8, 0xf1, + 0x2c, 0x40, 0xa1, 0x95, 0x03, 0x4d, 0x25, 0x81, 0xf2, 0x2c, 0x00, 0x02, + 0x75, 0x06, 0xe7, 0x02, 0xa4, 0xbb, 0x02, 0x43, 0x31, 0xf4, 0x88, 0x2c, + 0x00, 0xa6, 0xa8, 0x02, 0x02, 0x24, 0x02, 0x97, 0x02, 0xa8, 0x88, 0x02, + 0x45, 0x40, 0xe7, 0x92, 0x2c, 0x00, 0xab, 0xe7, 0x01, 0xac, 0xd8, 0x01, + 0x42, 0x7d, 0x02, 0x98, 0x2c, 0x00, 0x42, 0x51, 0x03, 0x9a, 0x2c, 0x00, + 0xef, 0x9e, 0x2c, 0x80, 0x54, 0xb0, 0x48, 0x42, 0xd0, 0x00, 0xa2, 0x2c, + 0x00, 0xb3, 0x20, 0xb4, 0x12, 0x42, 0x7d, 0x00, 0xa8, 0x2c, 0x00, 0x44, + 0x05, 0xf3, 0x82, 0x2c, 0x00, 0x44, 0x55, 0xf3, 0x8c, 0x2c, 0x40, 0x42, + 0x5f, 0x24, 0xa6, 0x2c, 0x00, 0x45, 0xfa, 0xe6, 0x90, 0x2c, 0x40, 0x44, + 0x37, 0x94, 0xc0, 0x2c, 0x00, 0xa8, 0x0c, 0x43, 0xe3, 0x0c, 0xa4, 0x2c, + 0x00, 0x42, 0x3c, 0x01, 0x8a, 0x2c, 0x40, 0x42, 0x12, 0x0b, 0xe2, 0x03, + 0x00, 0x43, 0xe3, 0x0c, 0xec, 0x03, 0x40, 0xe9, 0xa0, 0x2c, 0x00, 0x42, + 0x5a, 0x03, 0xae, 0x2c, 0x40, 0x03, 0x03, 0x24, 0x06, 0x42, 0x3c, 0x01, + 0xb0, 0x2c, 0x40, 0x07, 0x1a, 0xd0, 0x1f, 0x07, 0x9f, 0xa0, 0x01, 0xff, + 0xae, 0x0c, 0x45, 0xe7, 0xea, 0xdc, 0x2c, 0x00, 0x43, 0x09, 0xa4, 0xe2, + 0x2c, 0x40, 0x42, 0xf1, 0x06, 0xde, 0x2c, 0x00, 0x42, 0x7e, 0x1a, 0xe0, + 0x2c, 0x40, 0x43, 0x56, 0x07, 0xb4, 0x2c, 0x00, 0x43, 0x22, 0xf4, 0xd8, + 0x2c, 0x00, 0x43, 0x93, 0x5a, 0xc6, 0x2c, 0x00, 0x46, 0xde, 0xdb, 0xd6, + 0x2c, 0x00, 0xa8, 0x17, 0x43, 0x7a, 0x93, 0xbe, 0x2c, 0x00, 0x02, 0xa4, + 0x02, 0x01, 0xff, 0x42, 0x12, 0x0b, 0xc4, 0x2c, 0x00, 0x43, 0xe3, 0x0c, + 0xda, 0x2c, 0x40, 0xe1, 0xce, 0x2c, 0x80, 0x0c, 0x42, 0x12, 0x0b, 0xd2, + 0x2c, 0x00, 0x43, 0x0c, 0x00, 0xcc, 0x2c, 0x40, 0xf4, 0xd4, 0x2c, 0x40, + 0x4a, 0xb9, 0xa6, 0xd0, 0x2c, 0x00, 0x44, 0x29, 0xef, 0x96, 0x2c, 0x40, + 0x43, 0x7b, 0x3d, 0x94, 0x2c, 0x00, 0xa8, 0x06, 0x42, 0x5a, 0x03, 0x9c, + 0x2c, 0x40, 0x42, 0x12, 0x0b, 0xe6, 0x03, 0x00, 0xe9, 0xac, 0x2c, 0x40, + 0x43, 0x8a, 0x00, 0x8e, 0x2c, 0x00, 0x43, 0x0c, 0x00, 0xe8, 0x03, 0x40, + 0x43, 0x15, 0x05, 0x84, 0x2c, 0x00, 0x44, 0xe0, 0xdb, 0xea, 0x03, 0x40, + 0x42, 0x12, 0x0b, 0xe4, 0x03, 0x00, 0xe9, 0xaa, 0x2c, 0x40, 0x44, 0xf5, + 0xee, 0x86, 0x2c, 0x00, 0x42, 0x12, 0x0b, 0xee, 0x03, 0x00, 0x09, 0xed, + 0xb9, 0x01, 0xff, 0x44, 0x67, 0x00, 0xb2, 0x2c, 0x00, 0x44, 0x0b, 0x00, + 0xca, 0x2c, 0x00, 0x44, 0xce, 0xc9, 0xb8, 0x2c, 0x00, 0x42, 0x51, 0x03, + 0xba, 0x2c, 0x40, 0x4a, 0x15, 0xaf, 0xc2, 0x2c, 0x00, 0x0c, 0xd4, 0x24, + 0x01, 0xff, 0x43, 0x31, 0xf4, 0xb6, 0x2c, 0x00, 0x46, 0xde, 0xdb, 0xed, + 0x2c, 0x00, 0x42, 0x51, 0x03, 0xbc, 0x2c, 0x00, 0x44, 0x1b, 0xaf, 0xeb, + 0x2c, 0x40, 0x4c, 0xab, 0x90, 0xc8, 0x2c, 0x00, 0x43, 0x6d, 0xf4, 0x80, + 0x2c, 0x40, 0x47, 0xb4, 0xd0, 0x5a, 0xf3, 0x01, 0xa9, 0x01, 0xff, 0xe5, + 0x6a, 0xf3, 0x01, 0x42, 0x1d, 0x01, 0x73, 0xf3, 0x41, 0xa6, 0x79, 0x55, + 0x6f, 0x3b, 0x6d, 0x2a, 0x00, 0x4a, 0x69, 0xab, 0x32, 0x23, 0x00, 0x48, + 0x60, 0xc7, 0x0c, 0x26, 0x00, 0x0a, 0x77, 0xb1, 0x57, 0xb4, 0x06, 0x4e, + 0x4b, 0x7e, 0xea, 0xf3, 0x41, 0x05, 0x7a, 0x69, 0x1d, 0x57, 0xcc, 0x1a, + 0x81, 0x23, 0x00, 0x4c, 0x5b, 0x71, 0x2e, 0x22, 0x00, 0x04, 0x52, 0x8a, + 0x01, 0xff, 0x45, 0xdb, 0xe7, 0x9b, 0xf3, 0x01, 0x53, 0xe8, 0x4c, 0x9b, + 0x00, 0x40, 0x03, 0x4a, 0x03, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x56, + 0x79, 0x35, 0xfa, 0x22, 0x00, 0x47, 0xe6, 0x7f, 0xfd, 0x22, 0x00, 0x68, + 0x30, 0x05, 0xfb, 0x22, 0x40, 0x46, 0xb4, 0x05, 0x0b, 0x22, 0x00, 0x4f, + 0xe9, 0x53, 0xb3, 0x22, 0xc0, 0x00, 0x4c, 0xf2, 0x28, 0xb5, 0x22, 0x40, + 0x44, 0x5a, 0x03, 0xa7, 0xf6, 0x01, 0x46, 0x54, 0xe1, 0x77, 0xf4, 0x41, + 0x49, 0xbb, 0xb8, 0x8a, 0xf3, 0x01, 0x4b, 0x14, 0xa1, 0x16, 0xf6, 0x01, + 0x49, 0x0d, 0x99, 0x15, 0xf6, 0x41, 0x07, 0x35, 0x16, 0x38, 0x42, 0xed, + 0x05, 0x04, 0x26, 0x00, 0xad, 0x1b, 0xb0, 0x01, 0xff, 0x43, 0x1d, 0x20, + 0xed, 0xf9, 0x01, 0x46, 0x52, 0x92, 0x01, 0x22, 0x00, 0x4e, 0xa1, 0x7a, + 0x84, 0x23, 0x00, 0x47, 0x86, 0x66, 0xdc, 0xf5, 0x41, 0xe1, 0x2c, 0x00, + 0x00, 0x07, 0x85, 0xb8, 0x01, 0xff, 0x42, 0x8a, 0x00, 0x40, 0x00, 0x00, + 0x4a, 0x67, 0x98, 0x52, 0x20, 0x40, 0xa1, 0x8a, 0x17, 0xa2, 0xda, 0x16, + 0xa3, 0x8a, 0x13, 0xa4, 0xae, 0x0f, 0xa5, 0xe9, 0x0e, 0xa6, 0xd4, 0x0e, + 0xa7, 0x8f, 0x0b, 0x02, 0x0b, 0x00, 0xf8, 0x0a, 0xa9, 0xaf, 0x0a, 0x02, + 0x1b, 0x02, 0x89, 0x0a, 0xac, 0xed, 0x05, 0xad, 0x8e, 0x05, 0xae, 0xff, + 0x04, 0xaf, 0xc1, 0x04, 0xb0, 0x8e, 0x04, 0xb2, 0xda, 0x02, 0xb3, 0xfb, + 0x01, 0xb4, 0xb4, 0x01, 0xb5, 0x82, 0x01, 0x08, 0x32, 0x00, 0x41, 0x02, + 0x51, 0x00, 0x27, 0xb8, 0x11, 0x07, 0xe1, 0x33, 0x01, 0xff, 0x45, 0x5c, + 0x00, 0x5b, 0x03, 0x00, 0x45, 0x20, 0x07, 0xcf, 0x1d, 0x40, 0x80, 0x06, + 0x48, 0xd8, 0xc2, 0xb5, 0x1a, 0x40, 0x45, 0x5c, 0x00, 0x3d, 0x03, 0x00, + 0x45, 0x20, 0x07, 0x53, 0x03, 0x40, 0x03, 0x4e, 0x04, 0x06, 0x4f, 0x98, + 0x6d, 0xb6, 0x1a, 0x40, 0x4c, 0xeb, 0x8c, 0xe9, 0x20, 0x00, 0x55, 0x2c, + 0x3c, 0xf9, 0x1d, 0x40, 0x80, 0x25, 0x06, 0x66, 0xd8, 0x01, 0xff, 0x45, + 0xf9, 0x38, 0xd0, 0x1a, 0x80, 0x13, 0x45, 0x15, 0x23, 0xd2, 0x1a, 0x80, + 0x06, 0x46, 0xad, 0x70, 0xd4, 0x1a, 0x40, 0x46, 0x8b, 0x9c, 0xd7, 0x1a, + 0x40, 0x46, 0xce, 0x98, 0xd6, 0x1a, 0x40, 0x05, 0xed, 0x07, 0x06, 0x45, + 0x35, 0x23, 0x3e, 0x03, 0x40, 0x45, 0x5c, 0x00, 0x0d, 0x03, 0x00, 0x45, + 0x20, 0x07, 0x29, 0x03, 0x40, 0xb0, 0x0c, 0x47, 0xf8, 0x06, 0xd1, 0x1d, + 0x00, 0x47, 0xf9, 0x0e, 0xd2, 0x1d, 0x40, 0x06, 0x48, 0xd8, 0x11, 0x0c, + 0xdf, 0x03, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xea, 0x1a, 0x00, 0x45, 0x20, + 0x07, 0x4e, 0x03, 0x40, 0x45, 0x5c, 0x00, 0xf5, 0x1d, 0x00, 0x45, 0x20, + 0x07, 0x1d, 0x03, 0x40, 0x4f, 0xae, 0x12, 0xdb, 0x20, 0x00, 0x44, 0x36, + 0x23, 0x03, 0x03, 0x80, 0x1c, 0x06, 0x6b, 0x1d, 0x06, 0x51, 0xd5, 0x5e, + 0x12, 0x03, 0x40, 0x4c, 0xfb, 0x8b, 0xcb, 0x1a, 0x00, 0x43, 0x23, 0x0a, + 0xb4, 0x1a, 0x00, 0x48, 0x10, 0xcc, 0xe8, 0x20, 0x40, 0x80, 0x01, 0xff, + 0x45, 0x20, 0x07, 0x30, 0x03, 0x00, 0x4f, 0x69, 0x6f, 0x29, 0xfe, 0x00, + 0x47, 0x01, 0x23, 0x34, 0x03, 0x00, 0x50, 0xa6, 0x66, 0x2a, 0xfe, 0x40, + 0x07, 0x9f, 0xd0, 0x4c, 0xa8, 0x2b, 0x4a, 0x2f, 0xae, 0xc2, 0x1d, 0x00, + 0x06, 0xbc, 0x24, 0x0c, 0x61, 0xb0, 0x0e, 0xba, 0x1a, 0x00, 0x4e, 0x3d, + 0x7e, 0xc3, 0x1d, 0x40, 0x45, 0x5c, 0x00, 0xe4, 0x1a, 0x00, 0xa2, 0x01, + 0xff, 0x44, 0x21, 0x07, 0x3b, 0x03, 0x00, 0x4d, 0xb2, 0x87, 0xc5, 0x1a, + 0x40, 0x48, 0xf7, 0xb0, 0xd9, 0x1a, 0x00, 0x04, 0x35, 0x07, 0x01, 0xff, + 0xb3, 0x06, 0x55, 0xcc, 0x3e, 0xd3, 0x20, 0x40, 0x4e, 0x87, 0x33, 0x37, + 0x03, 0x00, 0x4d, 0xf6, 0x49, 0x35, 0x03, 0x40, 0x45, 0x5c, 0x00, 0xe5, + 0x1a, 0x00, 0x45, 0x20, 0x07, 0x3c, 0x03, 0x40, 0xa5, 0x97, 0x01, 0xa9, + 0x01, 0xff, 0x03, 0xca, 0x00, 0x17, 0x03, 0xa2, 0x01, 0x01, 0xff, 0x45, + 0x5c, 0x00, 0x0a, 0x03, 0x00, 0x45, 0x20, 0x07, 0x25, 0x03, 0x00, 0x47, + 0x01, 0x23, 0xd8, 0x20, 0x40, 0x80, 0x06, 0x61, 0x13, 0x0f, 0xec, 0x20, + 0x40, 0x05, 0xce, 0x00, 0x3b, 0x02, 0x22, 0x00, 0x21, 0x0c, 0xd8, 0x21, + 0x11, 0x05, 0x49, 0xd8, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xe1, 0x1a, 0x00, + 0x45, 0x20, 0x07, 0x19, 0x03, 0x40, 0x4b, 0x7f, 0x05, 0xc2, 0x1a, 0x00, + 0x4b, 0x8f, 0x99, 0xc4, 0x1a, 0x40, 0x08, 0xc0, 0xc7, 0x06, 0x4b, 0xcb, + 0x02, 0xd1, 0x20, 0x40, 0x45, 0x5c, 0x00, 0x57, 0x03, 0x00, 0x45, 0x20, + 0x07, 0x39, 0x03, 0x40, 0x80, 0x24, 0x05, 0xa0, 0x1b, 0x01, 0xff, 0xa1, + 0x06, 0x45, 0x20, 0x07, 0x55, 0x03, 0x40, 0x44, 0x5d, 0x00, 0x50, 0x03, + 0x00, 0x03, 0x1b, 0x00, 0x01, 0xff, 0x54, 0xcc, 0x41, 0xff, 0x1d, 0x00, + 0x52, 0x29, 0x56, 0x56, 0x03, 0x40, 0x45, 0x5c, 0x00, 0xd7, 0x20, 0x00, + 0x45, 0x20, 0x07, 0xef, 0x20, 0x40, 0x52, 0xe1, 0x55, 0x22, 0x03, 0x00, + 0x05, 0x3e, 0x04, 0x01, 0xff, 0x50, 0x85, 0x33, 0xe5, 0x20, 0x00, 0x4d, + 0xd9, 0x5e, 0x14, 0x03, 0x40, 0xa1, 0x11, 0x09, 0xe0, 0x71, 0x01, 0xff, + 0x45, 0x5c, 0x00, 0xc8, 0x1a, 0x00, 0x45, 0x20, 0x07, 0x1f, 0x03, 0x40, + 0x54, 0x10, 0x44, 0x21, 0x03, 0x00, 0x0a, 0xf7, 0x60, 0x01, 0xff, 0x45, + 0x5c, 0x00, 0xbb, 0x1a, 0x00, 0x45, 0x20, 0x07, 0xbd, 0x1a, 0x00, 0x47, + 0x01, 0x23, 0xbe, 0x1a, 0x40, 0x45, 0xbb, 0xde, 0x28, 0x03, 0x80, 0x2e, + 0x11, 0xb6, 0x5b, 0x0c, 0x4e, 0x11, 0x7b, 0xb7, 0x1a, 0x00, 0x47, 0x83, + 0x8a, 0x05, 0x03, 0x40, 0x42, 0x1a, 0x00, 0x76, 0x03, 0x01, 0x43, 0x30, + 0x6c, 0x77, 0x03, 0x01, 0x45, 0x07, 0xe9, 0x79, 0x03, 0x01, 0x43, 0x9a, + 0xf4, 0x7a, 0x03, 0x01, 0x44, 0x55, 0xf3, 0x78, 0x03, 0x41, 0x46, 0x5b, + 0x00, 0xce, 0x1d, 0x40, 0x4e, 0xaf, 0x7a, 0x4a, 0x03, 0x00, 0x50, 0x06, + 0x68, 0xc6, 0x1a, 0x40, 0x45, 0xae, 0x70, 0x04, 0x03, 0x80, 0x11, 0x0a, + 0xf5, 0xab, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xe2, 0x1a, 0x00, 0x45, 0x20, + 0x07, 0x20, 0x03, 0x40, 0x80, 0x22, 0x8d, 0x01, 0xff, 0x45, 0xf9, 0x38, + 0xc4, 0x1d, 0x80, 0x12, 0x45, 0x53, 0x23, 0xcc, 0x1d, 0x00, 0x45, 0x15, + 0x23, 0xc6, 0x1d, 0x00, 0x4d, 0x3c, 0x8a, 0xd5, 0x1a, 0x40, 0x46, 0xce, + 0x98, 0xd8, 0x1a, 0x40, 0x45, 0x20, 0x07, 0x31, 0x03, 0x00, 0x49, 0xf9, + 0x13, 0x24, 0xfe, 0x80, 0x0d, 0x4a, 0x55, 0x04, 0x25, 0xfe, 0xc0, 0x00, + 0x46, 0x1f, 0x07, 0x2c, 0xfe, 0x40, 0x46, 0x1f, 0x07, 0x2b, 0xfe, 0x40, + 0x05, 0xdf, 0x05, 0xed, 0x01, 0x03, 0xc4, 0x00, 0x4f, 0x02, 0x3f, 0x00, + 0x27, 0xaf, 0x01, 0xff, 0x03, 0xa2, 0x01, 0x06, 0x46, 0x77, 0x8a, 0x32, + 0x03, 0x40, 0x56, 0x7f, 0x33, 0xeb, 0x20, 0x00, 0xb3, 0x06, 0x55, 0xcc, + 0x3e, 0xd2, 0x20, 0x40, 0x4e, 0x87, 0x33, 0x38, 0x03, 0x00, 0x4d, 0xf6, + 0x49, 0x36, 0x03, 0x40, 0x06, 0x9f, 0x1f, 0x06, 0x5e, 0x71, 0x13, 0xb9, + 0x1a, 0x40, 0x49, 0xf9, 0x13, 0x20, 0xfe, 0x80, 0x0d, 0x4a, 0x55, 0x04, + 0x21, 0xfe, 0xc0, 0x00, 0x46, 0x1f, 0x07, 0x28, 0xfe, 0x40, 0x46, 0x1f, + 0x07, 0x27, 0xfe, 0x40, 0x80, 0x11, 0x06, 0xa9, 0x01, 0x01, 0xff, 0x4d, + 0xd7, 0x80, 0xea, 0x20, 0x00, 0x5b, 0x19, 0x0f, 0xed, 0x20, 0x40, 0xa1, + 0x4b, 0x02, 0x22, 0x00, 0x31, 0x0c, 0xd8, 0x21, 0x21, 0x0c, 0xc8, 0x00, + 0x11, 0x05, 0x49, 0xd8, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xe0, 0x1a, 0x00, + 0x45, 0x20, 0x07, 0x18, 0x03, 0x40, 0x45, 0x5c, 0x00, 0xe1, 0x20, 0x00, + 0x45, 0x20, 0x07, 0x4d, 0x03, 0x40, 0x4a, 0x41, 0x06, 0xc1, 0x1a, 0x00, + 0x4a, 0x35, 0xa8, 0xc3, 0x1a, 0x40, 0x08, 0xc0, 0xc7, 0x06, 0x4b, 0xcb, + 0x02, 0xd0, 0x20, 0x40, 0x45, 0x5c, 0x00, 0x51, 0x03, 0x00, 0x45, 0x20, + 0x07, 0x1c, 0x03, 0x40, 0x05, 0x32, 0x06, 0x24, 0x04, 0xcf, 0x00, 0x01, + 0xff, 0x80, 0x11, 0x05, 0xa0, 0x1b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xfe, + 0x1d, 0x00, 0x45, 0x20, 0x07, 0x54, 0x03, 0x40, 0x45, 0x5c, 0x00, 0xd6, + 0x20, 0x00, 0x45, 0x20, 0x07, 0xee, 0x20, 0x40, 0x45, 0x5c, 0x00, 0x1a, + 0x03, 0x00, 0x45, 0x20, 0x07, 0x49, 0x03, 0x00, 0x4d, 0x59, 0x81, 0xe9, + 0x1a, 0x40, 0x15, 0xbf, 0x3c, 0x8e, 0x02, 0x0d, 0x76, 0x08, 0x01, 0xff, + 0xe1, 0x63, 0x03, 0x80, 0xeb, 0x01, 0xe2, 0xe8, 0x1d, 0x80, 0xdf, 0x01, + 0xe3, 0x68, 0x03, 0x80, 0xd3, 0x01, 0xe4, 0x69, 0x03, 0x00, 0xe5, 0x64, + 0x03, 0x80, 0xbd, 0x01, 0xe6, 0xeb, 0x1d, 0x80, 0xb1, 0x01, 0xe7, 0xda, + 0x1d, 0x00, 0xe8, 0x6a, 0x03, 0x00, 0xe9, 0x65, 0x03, 0x80, 0x8e, 0x01, + 0xeb, 0xdc, 0x1d, 0x00, 0xec, 0xdd, 0x1d, 0x80, 0x79, 0xed, 0x6b, 0x03, + 0x00, 0xee, 0xe0, 0x1d, 0x00, 0xef, 0x66, 0x03, 0x80, 0x5b, 0xf0, 0xee, + 0x1d, 0x00, 0xf2, 0x6c, 0x03, 0x80, 0x43, 0xf3, 0xe4, 0x1d, 0x80, 0x38, + 0xf4, 0x6d, 0x03, 0x80, 0x2d, 0xf5, 0x67, 0x03, 0x80, 0x17, 0xf6, 0x6e, + 0x03, 0x00, 0xf7, 0xf1, 0x1d, 0x80, 0x08, 0xf8, 0x6f, 0x03, 0x00, 0xfa, + 0xe6, 0x1d, 0x40, 0x46, 0x1f, 0x07, 0xbf, 0x1a, 0x40, 0x06, 0x50, 0x00, + 0x01, 0xff, 0x49, 0xb7, 0x23, 0xf4, 0x1d, 0x00, 0x5b, 0x5d, 0x1c, 0xf0, + 0x1d, 0x40, 0x4d, 0xc7, 0x89, 0xc0, 0x1a, 0x40, 0x44, 0xb5, 0x7b, 0xea, + 0x1d, 0x40, 0x80, 0x01, 0xff, 0x45, 0x20, 0x07, 0xca, 0x1d, 0x00, 0x47, + 0x9c, 0xb2, 0xe3, 0x1d, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0xb7, + 0x23, 0xf3, 0x1d, 0x00, 0x5b, 0x5d, 0x1c, 0xed, 0x1d, 0x40, 0x59, 0x21, + 0x23, 0xec, 0x1d, 0x00, 0x45, 0x54, 0xad, 0xe5, 0x1d, 0x40, 0x07, 0x15, + 0x70, 0x01, 0xff, 0xe4, 0xd8, 0x1d, 0x00, 0xe7, 0xcc, 0x1a, 0x00, 0xf2, + 0xcd, 0x1a, 0x00, 0xf4, 0xce, 0x1a, 0x40, 0x55, 0x95, 0x3c, 0xd3, 0x1d, + 0x40, 0x42, 0xa4, 0x02, 0xef, 0x1d, 0x00, 0x42, 0x53, 0x00, 0xd9, 0x1d, + 0x40, 0x48, 0xf8, 0xc1, 0xd7, 0x1d, 0x40, 0x43, 0x94, 0x0f, 0xe9, 0x1d, + 0x40, 0x4f, 0xf6, 0x69, 0xf2, 0x1d, 0x00, 0xe5, 0xd4, 0x1d, 0x00, 0x44, + 0x3f, 0xe4, 0xe7, 0x1d, 0x00, 0xef, 0xd5, 0x1d, 0x00, 0xf6, 0xd6, 0x1d, + 0x40, 0xe7, 0xdb, 0x1d, 0x00, 0xec, 0xde, 0x1d, 0x00, 0xed, 0xdf, 0x1d, + 0x00, 0xee, 0xe1, 0x1d, 0x00, 0xf2, 0xe2, 0x1d, 0x40, 0x10, 0xb6, 0x67, + 0x11, 0x0b, 0xe7, 0xa4, 0x01, 0xff, 0x44, 0xc3, 0x00, 0xf7, 0x1d, 0x00, + 0x45, 0xc8, 0x00, 0xf6, 0x1d, 0x40, 0x56, 0x1b, 0x37, 0x9a, 0x30, 0x00, + 0x51, 0x20, 0x37, 0x99, 0x30, 0x40, 0xae, 0x06, 0x47, 0x0c, 0x0f, 0xd0, + 0x1d, 0x40, 0x46, 0x93, 0x6c, 0xb2, 0x1a, 0x00, 0x07, 0x60, 0x23, 0x01, + 0xff, 0x02, 0x63, 0x09, 0x11, 0x0c, 0x23, 0x8e, 0x01, 0xff, 0x45, 0x5c, + 0x00, 0xc7, 0x1a, 0x00, 0x45, 0x20, 0x07, 0x2b, 0x03, 0x40, 0x43, 0x59, + 0x13, 0x11, 0x03, 0x80, 0x11, 0x05, 0x37, 0x3c, 0x01, 0xff, 0x45, 0x5c, + 0x00, 0xe3, 0x1a, 0x00, 0x45, 0x20, 0x07, 0x3a, 0x03, 0x40, 0x46, 0x1f, + 0x07, 0x2f, 0x03, 0x40, 0x4e, 0xf9, 0x79, 0x4b, 0x03, 0x00, 0x48, 0x39, + 0xab, 0x09, 0x03, 0x00, 0x42, 0x5e, 0x01, 0x1b, 0x03, 0x40, 0x11, 0x83, + 0x5b, 0xc7, 0x01, 0xb2, 0x01, 0xff, 0xa1, 0x36, 0x04, 0x88, 0x2e, 0x01, + 0xff, 0x4f, 0x12, 0x6c, 0x44, 0x03, 0x00, 0x47, 0x7b, 0xd2, 0x43, 0x03, + 0x00, 0x08, 0x01, 0x28, 0x0c, 0x4b, 0x40, 0xa1, 0x42, 0x03, 0x00, 0x4d, + 0x38, 0x4f, 0x45, 0x03, 0x40, 0x49, 0x01, 0xbe, 0x44, 0xd2, 0x01, 0xb4, + 0x01, 0xff, 0x48, 0xf0, 0xc5, 0x43, 0xd2, 0x01, 0x46, 0x98, 0xdf, 0x42, + 0xd2, 0x41, 0x05, 0x43, 0xe9, 0x35, 0x4c, 0x9f, 0x93, 0x4f, 0x03, 0x00, + 0x02, 0x32, 0x00, 0x01, 0xff, 0x80, 0x15, 0x8d, 0x01, 0xff, 0x4b, 0xc9, + 0x98, 0xc8, 0x1d, 0x00, 0x46, 0xad, 0x70, 0xc5, 0x1d, 0x00, 0x4d, 0x3c, + 0x8a, 0xd1, 0x1a, 0x40, 0x46, 0xda, 0x04, 0x00, 0x03, 0x80, 0x06, 0x49, + 0x3b, 0x2d, 0x40, 0x03, 0x40, 0x46, 0x1f, 0x07, 0x16, 0x03, 0x40, 0x06, + 0xef, 0x06, 0x21, 0x07, 0xec, 0x05, 0x01, 0xff, 0xe1, 0x70, 0x13, 0x01, + 0x42, 0x1b, 0x02, 0x71, 0x13, 0x01, 0x42, 0x2a, 0x05, 0x72, 0x13, 0x01, + 0x42, 0xbb, 0x09, 0x74, 0x13, 0x01, 0x42, 0x02, 0x00, 0x73, 0x13, 0x41, + 0xa6, 0x20, 0x43, 0x0e, 0x0b, 0x67, 0x13, 0x01, 0x43, 0x00, 0x26, 0x6c, + 0x13, 0x01, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x66, 0x13, 0x41, 0x44, 0x25, + 0x01, 0x69, 0x13, 0x01, 0x42, 0x15, 0x02, 0x68, 0x13, 0x41, 0x43, 0xd2, + 0x05, 0x6b, 0x13, 0x01, 0x43, 0xf6, 0x06, 0x6a, 0x13, 0x41, 0x43, 0xf2, + 0xf3, 0x00, 0xe0, 0x01, 0xa2, 0xe1, 0x01, 0x46, 0xeb, 0x80, 0x1d, 0xe0, + 0x01, 0xa4, 0xcc, 0x01, 0xa6, 0xbd, 0x01, 0x47, 0x4e, 0xd1, 0x03, 0xe0, + 0x01, 0x44, 0x2d, 0xf0, 0x18, 0xe0, 0x01, 0xe9, 0x0b, 0xe0, 0x81, 0x8f, + 0x01, 0x44, 0xc5, 0xf0, 0x0d, 0xe0, 0x01, 0x47, 0xf2, 0xd2, 0x0e, 0xe0, + 0x01, 0x47, 0xfd, 0x6a, 0x0f, 0xe0, 0x01, 0x45, 0xf3, 0xe8, 0x10, 0xe0, + 0x01, 0x43, 0x64, 0x31, 0x11, 0xe0, 0x01, 0x46, 0x32, 0xdf, 0x12, 0xe0, + 0x01, 0x45, 0x6f, 0xea, 0x13, 0xe0, 0x01, 0xb3, 0x4b, 0xb4, 0x3d, 0x43, + 0x0a, 0xd6, 0x16, 0xe0, 0x01, 0x44, 0xf5, 0xf2, 0x02, 0xe0, 0x01, 0xb9, + 0x0f, 0xba, 0x01, 0xff, 0x45, 0xf1, 0xe5, 0x08, 0xe0, 0x01, 0x46, 0x8c, + 0xdc, 0x06, 0xe0, 0x41, 0x43, 0xb3, 0x00, 0x21, 0xe0, 0x01, 0xa5, 0x08, + 0xef, 0x26, 0xe0, 0x01, 0xf5, 0x23, 0xe0, 0x41, 0xb2, 0x06, 0x43, 0x26, + 0x0a, 0x05, 0xe0, 0x41, 0xe9, 0x20, 0xe0, 0x01, 0xf5, 0x1f, 0xe0, 0x41, + 0x42, 0x5a, 0x03, 0x1c, 0xe0, 0x01, 0x45, 0x27, 0xec, 0x15, 0xe0, 0x41, + 0xa8, 0x0c, 0x44, 0x15, 0xf1, 0x14, 0xe0, 0x01, 0x48, 0x46, 0xbf, 0x24, + 0xe0, 0x41, 0xe1, 0x1e, 0xe0, 0x01, 0x42, 0x12, 0x00, 0x1b, 0xe0, 0x41, + 0x4b, 0x22, 0xa0, 0x0a, 0xe0, 0x01, 0x07, 0x9e, 0x21, 0x06, 0x43, 0x54, + 0x28, 0x09, 0xe0, 0x41, 0x47, 0x80, 0xcf, 0x29, 0xe0, 0x01, 0x49, 0x45, + 0xbf, 0x27, 0xe0, 0x41, 0x43, 0xe7, 0x05, 0x2a, 0xe0, 0x01, 0x44, 0x5a, + 0xbf, 0x17, 0xe0, 0x41, 0x45, 0xa9, 0xe7, 0x0c, 0xe0, 0x01, 0x44, 0xb9, + 0xf1, 0x04, 0xe0, 0x41, 0x46, 0x81, 0xcf, 0x28, 0xe0, 0x01, 0x43, 0x8f, + 0xd2, 0x01, 0xe0, 0x41, 0x46, 0x60, 0xdb, 0x52, 0x03, 0x00, 0x48, 0x04, + 0xb9, 0xda, 0x1a, 0x00, 0x4e, 0xd2, 0x46, 0xdc, 0x20, 0x40, 0x09, 0x2d, + 0xbc, 0x11, 0x0b, 0x82, 0xa1, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xe8, 0x1a, + 0x00, 0x45, 0x20, 0x07, 0x47, 0x03, 0x40, 0x46, 0x12, 0x03, 0xdd, 0x20, + 0x80, 0x20, 0x47, 0x95, 0x44, 0xdf, 0x20, 0x00, 0x46, 0x5e, 0xdd, 0xe3, + 0x20, 0x00, 0xb3, 0x06, 0x58, 0xb6, 0x2b, 0xe4, 0x20, 0x40, 0x45, 0xce, + 0x59, 0xe2, 0x20, 0x00, 0x45, 0xd7, 0x05, 0xde, 0x20, 0x40, 0x4a, 0x43, + 0x0e, 0xe0, 0x20, 0x40, 0xa5, 0xd5, 0x02, 0x48, 0xb8, 0x23, 0x08, 0x03, + 0x80, 0xb9, 0x02, 0xaf, 0x01, 0xff, 0xb4, 0xf7, 0x01, 0x04, 0x3d, 0x01, + 0x1b, 0x02, 0xa7, 0x01, 0x01, 0xff, 0x06, 0x48, 0xd8, 0x06, 0x4b, 0xb8, + 0x02, 0xb3, 0x1a, 0x40, 0x45, 0x5c, 0x00, 0xdb, 0x1a, 0x00, 0x45, 0x20, + 0x07, 0x1e, 0x03, 0x40, 0x80, 0x06, 0x53, 0xe6, 0x48, 0xb0, 0x1a, 0x40, + 0xa1, 0xb6, 0x01, 0x45, 0x53, 0x23, 0x5d, 0x03, 0x80, 0xa8, 0x01, 0xa3, + 0x99, 0x01, 0x4c, 0x15, 0x23, 0x0f, 0x03, 0x00, 0x4e, 0x5e, 0x23, 0x61, + 0x03, 0x80, 0x85, 0x01, 0x48, 0x75, 0x8a, 0x33, 0x03, 0x00, 0x46, 0xad, + 0x70, 0x5e, 0x03, 0x80, 0x72, 0xaf, 0x64, 0xb0, 0x4b, 0x02, 0x0d, 0x00, + 0x31, 0x45, 0x35, 0x23, 0x60, 0x03, 0x80, 0x1b, 0x09, 0x32, 0x00, 0x01, + 0xff, 0x05, 0xed, 0x07, 0x06, 0x4e, 0xf5, 0x49, 0xe6, 0x20, 0x40, 0x45, + 0x5c, 0x00, 0x0e, 0x03, 0x00, 0x45, 0x20, 0x07, 0x48, 0x03, 0x40, 0x80, + 0x01, 0xff, 0x49, 0xf9, 0x13, 0x22, 0xfe, 0x00, 0x4a, 0x55, 0x04, 0x23, + 0xfe, 0x40, 0x0f, 0xdc, 0x03, 0x06, 0x48, 0x1b, 0x6a, 0x5a, 0x03, 0x40, + 0x45, 0x5c, 0x00, 0xeb, 0x1a, 0x00, 0x45, 0x20, 0x07, 0x62, 0x03, 0x40, + 0x50, 0xf6, 0x60, 0xbc, 0x1a, 0x00, 0x09, 0xe0, 0x71, 0x01, 0xff, 0x45, + 0x5c, 0x00, 0xc9, 0x1a, 0x00, 0x45, 0x20, 0x07, 0xca, 0x1a, 0x40, 0x4e, + 0x11, 0x7b, 0xb8, 0x1a, 0x00, 0x47, 0x83, 0x8a, 0x3f, 0x03, 0x40, 0x46, + 0x1f, 0x07, 0x5f, 0x03, 0x40, 0x46, 0x1f, 0x07, 0xfc, 0x1d, 0x40, 0x44, + 0xe7, 0x6c, 0xcf, 0x1a, 0x00, 0x4f, 0x68, 0x32, 0xcd, 0x1d, 0x40, 0x46, + 0x1f, 0x07, 0x5c, 0x03, 0x40, 0x4b, 0xfc, 0x8b, 0x0b, 0x03, 0x00, 0x04, + 0x2b, 0x8e, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xe7, 0x1a, 0x00, 0x45, 0x20, + 0x07, 0xe6, 0x1a, 0x40, 0x80, 0x17, 0x4f, 0x14, 0x6a, 0xdd, 0x1a, 0x00, + 0x04, 0x77, 0x00, 0x01, 0xff, 0x4c, 0xfb, 0x8b, 0xc1, 0x1d, 0x00, 0x4c, + 0x15, 0x23, 0xc0, 0x1d, 0x40, 0x45, 0x5c, 0x00, 0x07, 0x03, 0x80, 0x0d, + 0x45, 0x20, 0x07, 0x23, 0x03, 0xc0, 0x00, 0x45, 0xc2, 0x00, 0xfa, 0x1d, + 0x40, 0x80, 0x01, 0xff, 0x44, 0xc3, 0x00, 0xf8, 0x1d, 0x00, 0x45, 0xc8, + 0x00, 0x58, 0x03, 0x40, 0x80, 0x06, 0x45, 0x18, 0x6a, 0xb1, 0x1a, 0x40, + 0x45, 0x20, 0x07, 0x24, 0x03, 0x00, 0x54, 0xe0, 0x46, 0xdc, 0x1a, 0x40, + 0x4b, 0xac, 0x9e, 0xfb, 0x1d, 0x00, 0x09, 0xd1, 0xc0, 0x01, 0xff, 0x06, + 0xef, 0x06, 0x30, 0x07, 0xec, 0x05, 0x06, 0x4d, 0xa9, 0x88, 0xf1, 0xa8, + 0x40, 0xe1, 0xea, 0xa8, 0x00, 0x42, 0x1b, 0x02, 0xec, 0xa8, 0x00, 0x42, + 0x2a, 0x05, 0xed, 0xa8, 0x00, 0x42, 0xbb, 0x09, 0xee, 0xa8, 0x00, 0x42, + 0x71, 0x00, 0xef, 0xa8, 0x00, 0xf5, 0xeb, 0xa8, 0x00, 0x42, 0x02, 0x00, + 0xf0, 0xa8, 0x40, 0x45, 0x12, 0x0b, 0xe8, 0xa8, 0x00, 0xa6, 0x2e, 0x44, + 0xcf, 0x2a, 0xe9, 0xa8, 0x00, 0x43, 0x0e, 0x0b, 0xe1, 0xa8, 0x00, 0xb3, + 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xe0, 0xa8, 0x40, 0x44, 0x25, 0x01, + 0xe3, 0xa8, 0x00, 0x42, 0x15, 0x02, 0xe2, 0xa8, 0x40, 0x44, 0xc9, 0x1d, + 0xe7, 0xa8, 0x00, 0x42, 0x01, 0x26, 0xe6, 0xa8, 0x40, 0x43, 0xd2, 0x05, + 0xe5, 0xa8, 0x00, 0x43, 0xf6, 0x06, 0xe4, 0xa8, 0x40, 0xa1, 0xb7, 0x03, + 0x46, 0xfa, 0xc1, 0x27, 0x03, 0x00, 0x50, 0xd0, 0x04, 0x02, 0x03, 0x80, + 0xa3, 0x03, 0x09, 0x66, 0x10, 0x92, 0x03, 0xaf, 0xeb, 0x02, 0x08, 0xf8, + 0xcc, 0x01, 0xff, 0x4e, 0xb1, 0x76, 0x85, 0x04, 0x00, 0x08, 0x71, 0x11, + 0xcf, 0x02, 0x46, 0xed, 0x4f, 0x7c, 0xa6, 0x00, 0x07, 0xec, 0x05, 0x52, + 0x4d, 0xf5, 0x3b, 0x89, 0x04, 0x00, 0xb0, 0x30, 0x65, 0x76, 0x08, 0x8f, + 0xe0, 0x01, 0xb4, 0x06, 0x45, 0x2c, 0xec, 0x6f, 0xa6, 0x40, 0x50, 0xa6, + 0x62, 0x70, 0xa6, 0x00, 0x55, 0xed, 0x3b, 0x72, 0xa6, 0x00, 0x44, 0x41, + 0x98, 0x83, 0x04, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x49, 0xf9, 0x13, 0x2e, + 0xfe, 0x00, 0x4a, 0x55, 0x04, 0x2f, 0xfe, 0x40, 0xa1, 0x0c, 0x47, 0xcb, + 0xd3, 0x87, 0x04, 0x00, 0x4d, 0xc3, 0x88, 0x86, 0x04, 0x40, 0x4c, 0xdb, + 0x90, 0x84, 0x04, 0x00, 0x45, 0x98, 0xd4, 0x7d, 0xa6, 0x40, 0xe1, 0xf6, + 0x2d, 0x00, 0xa2, 0xe2, 0x01, 0x43, 0x6d, 0x14, 0xf1, 0x2d, 0x00, 0xa4, + 0xcf, 0x01, 0xa5, 0xad, 0x01, 0x44, 0xd1, 0xef, 0xf4, 0x2d, 0x00, 0x43, + 0x26, 0x52, 0xe2, 0x2d, 0x00, 0x42, 0x22, 0x00, 0xef, 0x2d, 0x80, 0x93, + 0x01, 0xe9, 0x75, 0xa6, 0x80, 0x77, 0x42, 0x1b, 0x02, 0xe6, 0x2d, 0x00, + 0x4a, 0x37, 0x59, 0xfd, 0x2d, 0x00, 0x4c, 0x1f, 0x92, 0xf9, 0x2d, 0x00, + 0xef, 0xea, 0x2d, 0x80, 0x5a, 0x42, 0x6f, 0x02, 0xeb, 0x2d, 0x00, 0xb3, + 0x40, 0xb4, 0x34, 0xf5, 0x77, 0xa6, 0x80, 0x29, 0x42, 0x32, 0x00, 0xe1, + 0x2d, 0x00, 0xb9, 0x0d, 0xba, 0x01, 0xff, 0xe5, 0xe5, 0x2d, 0x00, 0x42, + 0xb0, 0x01, 0xe4, 0x2d, 0x40, 0x42, 0x8a, 0x00, 0xfa, 0x2d, 0x00, 0x43, + 0x9c, 0x2b, 0x79, 0xa6, 0x00, 0xe9, 0x76, 0xa6, 0x00, 0xf5, 0xfb, 0x2d, + 0x40, 0x4b, 0x07, 0x9e, 0x74, 0xa6, 0x40, 0xe5, 0xee, 0x2d, 0x00, 0x42, + 0x46, 0x03, 0xf0, 0x2d, 0x40, 0xa8, 0x06, 0x48, 0x87, 0x8e, 0x7a, 0xa6, + 0x40, 0xe1, 0xf2, 0x2d, 0x00, 0x43, 0x91, 0x20, 0xf3, 0x2d, 0x40, 0x44, + 0xcc, 0x7b, 0x7b, 0xa6, 0x40, 0xe5, 0xf7, 0x2d, 0x00, 0x08, 0x78, 0xc9, + 0x01, 0xff, 0xe1, 0xfc, 0x2d, 0x00, 0x47, 0x80, 0xcf, 0xff, 0x2d, 0x00, + 0xe5, 0x9f, 0xa6, 0x40, 0x47, 0xfc, 0x92, 0x78, 0xa6, 0x40, 0xe6, 0x9e, + 0xa6, 0x00, 0xec, 0xe7, 0x2d, 0x00, 0xed, 0xe8, 0x2d, 0x00, 0xee, 0xe9, + 0x2d, 0x00, 0xf2, 0xec, 0x2d, 0x00, 0xf3, 0xed, 0x2d, 0xc0, 0x00, 0x43, + 0xb4, 0x7c, 0xf5, 0x2d, 0x40, 0xe5, 0xe3, 0x2d, 0x00, 0x44, 0xa9, 0xe7, + 0xf8, 0x2d, 0x40, 0xe5, 0xe0, 0x2d, 0x00, 0x46, 0x81, 0xcf, 0xfe, 0x2d, + 0x40, 0x4d, 0xf5, 0x3b, 0x71, 0xa6, 0x00, 0x4e, 0xfb, 0x7c, 0x88, 0x04, + 0x40, 0x04, 0x15, 0x05, 0x0d, 0x4f, 0xa4, 0x70, 0x26, 0xfe, 0xc0, 0x00, + 0x46, 0x1f, 0x07, 0x2d, 0xfe, 0x40, 0x45, 0x5c, 0x00, 0x13, 0x03, 0x80, + 0x06, 0x45, 0x20, 0x07, 0x26, 0x03, 0x40, 0x46, 0xc7, 0x00, 0x15, 0x03, + 0x40, 0x4b, 0xce, 0x00, 0xd5, 0x20, 0x00, 0x4c, 0x9b, 0x94, 0xd9, 0x20, + 0x40, 0x46, 0x1f, 0x07, 0x2d, 0x03, 0x40, 0x49, 0xd9, 0x23, 0x10, 0x03, + 0x00, 0x43, 0xb1, 0x0e, 0x0c, 0x03, 0xc0, 0x00, 0x46, 0x1f, 0x07, 0x2c, + 0x03, 0x40, 0x4a, 0xc3, 0xab, 0x3b, 0x13, 0x01, 0xb2, 0x01, 0xff, 0x43, + 0x59, 0x13, 0x06, 0x03, 0x80, 0x11, 0x05, 0x37, 0x3c, 0x01, 0xff, 0x45, + 0x5c, 0x00, 0x46, 0x03, 0x00, 0x45, 0x20, 0x07, 0x2a, 0x03, 0x40, 0x46, + 0x1f, 0x07, 0x2e, 0x03, 0x00, 0x47, 0xc7, 0xcd, 0xcb, 0x1d, 0x40, 0x04, + 0xfa, 0x38, 0x3a, 0x0f, 0xd2, 0x6f, 0x2a, 0xae, 0x11, 0x08, 0x66, 0x67, + 0x01, 0xff, 0x45, 0x5c, 0x00, 0xf0, 0x20, 0x00, 0x45, 0x20, 0x07, 0x59, + 0x03, 0x40, 0x4c, 0xdf, 0x92, 0xe7, 0x20, 0x00, 0x0c, 0x63, 0x10, 0x01, + 0xff, 0x4b, 0xce, 0x00, 0xd4, 0x20, 0x00, 0x4c, 0x9b, 0x94, 0xda, 0x20, + 0x40, 0x45, 0x5c, 0x00, 0x4c, 0x03, 0x00, 0x45, 0x20, 0x07, 0xfd, 0x1d, + 0x40, 0x80, 0x15, 0x8d, 0x01, 0xff, 0x4b, 0x86, 0x9c, 0xc9, 0x1d, 0x00, + 0x46, 0xad, 0x70, 0xc7, 0x1d, 0x00, 0x4d, 0x3c, 0x8a, 0xd3, 0x1a, 0x40, + 0x46, 0xda, 0x04, 0x01, 0x03, 0x80, 0x06, 0x49, 0x3b, 0x2d, 0x41, 0x03, + 0x40, 0x46, 0x1f, 0x07, 0x17, 0x03, 0x40, 0x4d, 0x1b, 0x85, 0xa5, 0xf4, + 0x01, 0x42, 0x10, 0x00, 0x3a, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x46, + 0x48, 0x13, 0x54, 0x22, 0x00, 0x44, 0x5a, 0x03, 0xa1, 0x20, 0x40, 0xab, + 0x06, 0x44, 0xd1, 0xf1, 0x65, 0xf9, 0x41, 0x45, 0xd7, 0xd4, 0xb3, 0xfa, + 0x01, 0x4a, 0x95, 0xb1, 0x78, 0xf3, 0x41, 0xa1, 0xdb, 0x03, 0x51, 0xc9, + 0x59, 0x9a, 0x23, 0x00, 0xa9, 0xbc, 0x03, 0xaf, 0x01, 0xff, 0x02, 0x36, + 0x01, 0x8f, 0x01, 0x02, 0x46, 0x03, 0x2a, 0x42, 0xb2, 0x0c, 0x01, 0x26, + 0x80, 0x06, 0x47, 0x3e, 0x7c, 0x21, 0xf9, 0x41, 0x06, 0x50, 0x00, 0x01, + 0xff, 0x49, 0x67, 0xbb, 0x29, 0xf3, 0x01, 0x44, 0x92, 0x08, 0x27, 0xf3, + 0x01, 0x44, 0xd9, 0x2e, 0x28, 0xf3, 0x01, 0x47, 0x72, 0xd6, 0x2a, 0xf3, + 0x41, 0x43, 0x4f, 0x02, 0x50, 0x20, 0x00, 0x02, 0x06, 0x00, 0x01, 0xff, + 0x44, 0x45, 0xef, 0xd5, 0xf4, 0x01, 0x58, 0x46, 0x29, 0x4d, 0x2a, 0x00, + 0x4d, 0x35, 0x85, 0x10, 0xf5, 0x01, 0x0d, 0x76, 0x85, 0x34, 0x02, 0x6f, + 0x00, 0x16, 0xb5, 0x01, 0xff, 0x47, 0x5f, 0x61, 0x02, 0xf3, 0x01, 0x50, + 0x56, 0x65, 0x4c, 0x2a, 0xc0, 0x00, 0x52, 0x21, 0x4f, 0x50, 0x2a, 0x40, + 0x44, 0x9b, 0x12, 0xcf, 0x2a, 0x80, 0x0d, 0x46, 0x29, 0x36, 0xd0, 0x2a, + 0xc0, 0x00, 0x4c, 0xf2, 0x28, 0xd2, 0x2a, 0x40, 0x4c, 0xf2, 0x28, 0xd1, + 0x2a, 0x40, 0x4c, 0x77, 0x91, 0xea, 0xf4, 0x01, 0x4b, 0xb9, 0xa1, 0xeb, + 0xf4, 0x41, 0x06, 0x0b, 0x08, 0x51, 0x05, 0x6a, 0x10, 0x01, 0xff, 0xa3, + 0x3e, 0x68, 0xe0, 0x04, 0x03, 0xf5, 0x01, 0x53, 0xa4, 0x49, 0xf3, 0x27, + 0x00, 0x48, 0x94, 0x26, 0x31, 0x22, 0x00, 0x51, 0xf6, 0x04, 0xbb, 0x21, + 0x00, 0x05, 0xc8, 0x00, 0x0f, 0xb4, 0x01, 0xff, 0x53, 0xcb, 0x4b, 0xb7, + 0x21, 0x00, 0x60, 0xf4, 0x0f, 0x6e, 0x2b, 0x40, 0x5b, 0xba, 0x19, 0xd8, + 0xf5, 0x01, 0x66, 0x97, 0x07, 0x01, 0xf5, 0xc1, 0x00, 0x59, 0xef, 0x22, + 0x02, 0xf5, 0x41, 0x52, 0x7d, 0x53, 0x41, 0x29, 0x00, 0x4f, 0x58, 0x71, + 0x32, 0x22, 0x40, 0xa5, 0xac, 0x01, 0xa6, 0x88, 0x01, 0x04, 0xcf, 0x2a, + 0x78, 0x03, 0x0e, 0x0b, 0x68, 0xb3, 0x45, 0xb4, 0x01, 0xff, 0x02, 0x92, + 0x01, 0x32, 0x04, 0x25, 0x01, 0x22, 0xb7, 0x01, 0xff, 0x04, 0xe7, 0x2b, + 0x0f, 0xaf, 0x01, 0xff, 0x47, 0x6c, 0xcd, 0x51, 0xf5, 0x01, 0x47, 0xdc, + 0xcd, 0x5d, 0xf5, 0x41, 0x47, 0x6c, 0xcd, 0x5b, 0xf5, 0x01, 0x47, 0xdc, + 0xcd, 0x67, 0xf5, 0x41, 0x47, 0x6c, 0xcd, 0x52, 0xf5, 0x01, 0x47, 0xdc, + 0xcd, 0x5e, 0xf5, 0x41, 0x47, 0x6c, 0xcd, 0x59, 0xf5, 0x01, 0x47, 0xdc, + 0xcd, 0x65, 0xf5, 0x41, 0x04, 0xc9, 0x1d, 0x11, 0x02, 0x01, 0x26, 0x01, + 0xff, 0x47, 0x6c, 0xcd, 0x55, 0xf5, 0x01, 0x47, 0xdc, 0xcd, 0x61, 0xf5, + 0x41, 0x47, 0x6c, 0xcd, 0x56, 0xf5, 0x01, 0x47, 0xdc, 0xcd, 0x62, 0xf5, + 0x41, 0x47, 0x6c, 0xcd, 0x50, 0xf5, 0x01, 0x47, 0xdc, 0xcd, 0x5c, 0xf5, + 0x41, 0x47, 0x6c, 0xcd, 0x58, 0xf5, 0x01, 0x47, 0xdc, 0xcd, 0x64, 0xf5, + 0x41, 0x03, 0xd2, 0x05, 0x11, 0x03, 0xf6, 0x06, 0x01, 0xff, 0x47, 0x6c, + 0xcd, 0x53, 0xf5, 0x01, 0x47, 0xdc, 0xcd, 0x5f, 0xf5, 0x41, 0x47, 0x6c, + 0xcd, 0x54, 0xf5, 0x01, 0x47, 0xdc, 0xcd, 0x60, 0xf5, 0x41, 0x04, 0xc9, + 0x00, 0x11, 0x05, 0xb4, 0x6f, 0x01, 0xff, 0x47, 0x6c, 0xcd, 0x5a, 0xf5, + 0x01, 0x47, 0xdc, 0xcd, 0x66, 0xf5, 0x41, 0x47, 0x6c, 0xcd, 0x57, 0xf5, + 0x01, 0x47, 0xdc, 0xcd, 0x63, 0xf5, 0x41, 0x06, 0x49, 0x91, 0x06, 0x46, + 0x02, 0xdf, 0xcb, 0xf4, 0x41, 0x49, 0x8d, 0xb6, 0x7b, 0xf3, 0x01, 0x47, + 0x55, 0xc0, 0x42, 0xf9, 0x41, 0x53, 0x46, 0x4b, 0x81, 0xf5, 0x01, 0x02, + 0x6e, 0x02, 0x06, 0x4f, 0x29, 0x73, 0xdb, 0xf3, 0x41, 0x48, 0x72, 0x14, + 0xac, 0xf3, 0x01, 0x4e, 0x7f, 0x78, 0x4f, 0xf4, 0x41, 0x58, 0xae, 0x27, + 0x06, 0xd8, 0x00, 0x08, 0x58, 0xa5, 0xbb, 0x01, 0x07, 0xc5, 0x0e, 0x06, + 0x52, 0x15, 0x33, 0x01, 0xd8, 0x40, 0x43, 0xfe, 0xf3, 0xc3, 0x31, 0x00, + 0xe4, 0xd4, 0x31, 0x00, 0xe8, 0xd0, 0x31, 0x80, 0x5f, 0xee, 0xcf, 0x31, + 0x00, 0xf0, 0xd2, 0x31, 0x80, 0x4a, 0xf1, 0xe3, 0x31, 0x00, 0xf3, 0xd1, + 0x31, 0x80, 0x15, 0xf4, 0xc0, 0x31, 0x80, 0x0c, 0x42, 0xb6, 0x49, 0xc1, + 0x31, 0x00, 0x42, 0xff, 0xf3, 0xc2, 0x31, 0x40, 0xee, 0xdd, 0x31, 0x40, + 0xe7, 0xda, 0x31, 0x00, 0xf0, 0xd3, 0x31, 0x00, 0xf4, 0xd9, 0x31, 0x00, + 0xf7, 0xc4, 0x31, 0x80, 0x13, 0xfa, 0xd7, 0x31, 0xc0, 0x00, 0xf0, 0xe5, + 0x31, 0x00, 0x42, 0xb6, 0x49, 0xc9, 0x31, 0x00, 0xfa, 0xde, 0x31, 0x40, + 0xe7, 0xdf, 0x31, 0x00, 0xfa, 0xd8, 0x31, 0x40, 0xe4, 0xdb, 0x31, 0x00, + 0xe7, 0xe2, 0x31, 0x00, 0xfa, 0xdc, 0x31, 0x40, 0xe7, 0xd6, 0x31, 0x00, + 0xf0, 0xc7, 0x31, 0x80, 0x34, 0xb8, 0x28, 0xfa, 0xd5, 0x31, 0xc0, 0x00, + 0xe7, 0xc6, 0x31, 0x00, 0xf4, 0xca, 0x31, 0x00, 0xf7, 0xcd, 0x31, 0x80, + 0x12, 0xfa, 0xc5, 0x31, 0xc0, 0x00, 0xf0, 0xcb, 0x31, 0x00, 0xfa, 0xce, + 0x31, 0xc0, 0x00, 0xe7, 0xe1, 0x31, 0x40, 0xe7, 0xc8, 0x31, 0x40, 0xe7, + 0xe4, 0x31, 0x00, 0x42, 0xb6, 0x49, 0xe0, 0x31, 0x40, 0x42, 0xb6, 0x49, + 0xcc, 0x31, 0x40, 0xa2, 0xba, 0x06, 0xa3, 0xfb, 0x04, 0xa4, 0xe6, 0x04, + 0xa5, 0xbe, 0x04, 0xa6, 0xaf, 0x04, 0xa7, 0x8c, 0x04, 0xa8, 0xe4, 0x03, + 0xaa, 0xbc, 0x03, 0x06, 0xba, 0xa5, 0xab, 0x03, 0xac, 0xf8, 0x02, 0xad, + 0xc1, 0x02, 0x04, 0x44, 0x49, 0xa1, 0x02, 0x43, 0xe1, 0x1a, 0xb9, 0x2e, + 0x00, 0xb0, 0x82, 0x02, 0xb2, 0xe9, 0x01, 0xb3, 0x51, 0xb4, 0x37, 0xb7, + 0x01, 0xff, 0xa1, 0x11, 0x04, 0xbf, 0x1a, 0x01, 0xff, 0x43, 0x0e, 0x0b, + 0xc3, 0x2e, 0x00, 0x43, 0x1f, 0x0a, 0xc4, 0x2e, 0x40, 0x03, 0x70, 0xf4, + 0x11, 0x04, 0x08, 0x03, 0x01, 0xff, 0x43, 0x0e, 0x0b, 0xa1, 0x2e, 0x00, + 0x43, 0x1f, 0x0a, 0xa2, 0x2e, 0x40, 0x43, 0x0e, 0x0b, 0xcd, 0x2e, 0x00, + 0x43, 0x1f, 0x0a, 0xce, 0x2e, 0x40, 0x44, 0x1e, 0x18, 0x87, 0x2e, 0x00, + 0x45, 0x23, 0x9e, 0x93, 0x2e, 0x00, 0x44, 0x7d, 0xf0, 0xc1, 0x2e, 0x00, + 0x45, 0xf5, 0xeb, 0xf1, 0x2e, 0x40, 0xa5, 0x74, 0x44, 0x25, 0xf0, 0xb6, + 0x2e, 0x00, 0xa9, 0x3f, 0x05, 0x5e, 0x07, 0x2f, 0xae, 0x16, 0x06, 0x2c, + 0xdf, 0x06, 0x42, 0x42, 0x0b, 0x9c, 0x2e, 0x40, 0x43, 0x0e, 0x0b, 0xac, + 0x2e, 0x00, 0x43, 0x1f, 0x0a, 0xad, 0x2e, 0x40, 0x43, 0x92, 0x27, 0x92, + 0x2e, 0x00, 0x04, 0xfd, 0x50, 0x01, 0xff, 0x43, 0x0e, 0x0b, 0x94, 0x2e, + 0x00, 0x43, 0x1f, 0x0a, 0x95, 0x2e, 0x40, 0x43, 0x0e, 0x0b, 0x8c, 0x2e, + 0x00, 0x43, 0x1f, 0x0a, 0x8d, 0x2e, 0x40, 0x42, 0x60, 0x5b, 0xaf, 0x2e, + 0x00, 0x09, 0xd2, 0x88, 0x01, 0xff, 0xa8, 0x14, 0xb7, 0x06, 0x46, 0xde, + 0xd7, 0xe9, 0x2e, 0x40, 0x43, 0x5f, 0x5b, 0xcc, 0x2e, 0x00, 0x44, 0xc8, + 0x9c, 0xe8, 0x2e, 0x40, 0x4e, 0xc3, 0x75, 0xa6, 0x2e, 0x00, 0x43, 0x28, + 0x05, 0xc6, 0x2e, 0x40, 0x42, 0x13, 0x00, 0x8b, 0x2e, 0x00, 0x05, 0xe5, + 0x7b, 0x01, 0xff, 0x43, 0x0e, 0x0b, 0x82, 0x2e, 0x00, 0xb4, 0x01, 0xff, + 0x44, 0x25, 0x01, 0x84, 0x2e, 0x00, 0x42, 0x15, 0x02, 0x83, 0x2e, 0x40, + 0xa1, 0x06, 0x45, 0x9e, 0x6c, 0x80, 0x2e, 0x40, 0x42, 0x9e, 0x01, 0xd7, + 0x2e, 0x00, 0xed, 0xb7, 0x2e, 0x00, 0xf0, 0x99, 0x2e, 0x40, 0x03, 0xa7, + 0x44, 0x06, 0x45, 0x1f, 0x1d, 0x85, 0x2e, 0x40, 0x43, 0x0e, 0x0b, 0xa4, + 0x2e, 0x00, 0x43, 0x1f, 0x0a, 0xa5, 0x2e, 0x40, 0x44, 0xf5, 0x06, 0xb4, + 0x2e, 0x00, 0x43, 0x0e, 0x0b, 0xb1, 0x2e, 0x00, 0xb4, 0x01, 0xff, 0x44, + 0x25, 0x01, 0xb3, 0x2e, 0x00, 0x42, 0x15, 0x02, 0xb2, 0x2e, 0x40, 0xa5, + 0x26, 0xaf, 0x01, 0xff, 0x42, 0x10, 0x00, 0x9d, 0x2e, 0x00, 0x44, 0x6c, + 0x4d, 0xbd, 0x2e, 0x00, 0x44, 0x0f, 0x1a, 0x9f, 0x2e, 0x00, 0x04, 0x5b, + 0x12, 0x01, 0xff, 0x43, 0x0e, 0x0b, 0xd5, 0x2e, 0x00, 0x43, 0x1f, 0x0a, + 0xd6, 0x2e, 0x40, 0x42, 0x8a, 0x00, 0xbc, 0x2e, 0x00, 0x42, 0xa4, 0x02, + 0xb5, 0x2e, 0x40, 0x04, 0xa2, 0xb8, 0x11, 0x04, 0xd8, 0x02, 0x01, 0xff, + 0x43, 0x0e, 0x0b, 0xd1, 0x2e, 0x00, 0x43, 0x1f, 0x0a, 0xd2, 0x2e, 0x40, + 0x44, 0xf5, 0x06, 0x91, 0x2e, 0x00, 0x43, 0x0e, 0x0b, 0x8e, 0x2e, 0x00, + 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x90, 0x2e, 0x00, 0x42, 0x15, 0x02, + 0x8f, 0x2e, 0x40, 0x43, 0x0e, 0x0b, 0x88, 0x2e, 0x00, 0x43, 0x1f, 0x0a, + 0x89, 0x2e, 0x40, 0x0c, 0xd7, 0x8b, 0x06, 0x43, 0x0c, 0x02, 0xa9, 0x2e, + 0x40, 0x46, 0x55, 0x8f, 0xef, 0x2e, 0x00, 0x44, 0xc9, 0x1d, 0xeb, 0x2e, + 0x00, 0xb4, 0x01, 0xff, 0x44, 0xd9, 0xf1, 0xed, 0x2e, 0x00, 0x45, 0xf5, + 0xeb, 0xf2, 0x2e, 0x40, 0x43, 0x1a, 0x00, 0x98, 0x2e, 0x00, 0x02, 0x89, + 0x00, 0x06, 0x43, 0x28, 0x05, 0xc7, 0x2e, 0x40, 0xe4, 0xe1, 0x2e, 0x00, + 0x03, 0x36, 0x07, 0x01, 0xff, 0x43, 0x0e, 0x0b, 0x96, 0x2e, 0x00, 0x43, + 0x1f, 0x0a, 0x97, 0x2e, 0x40, 0x44, 0xc0, 0x7c, 0xe4, 0x2e, 0x00, 0x05, + 0x1c, 0x20, 0x01, 0xff, 0x43, 0x0e, 0x0b, 0xbe, 0x2e, 0x00, 0xb4, 0x01, + 0xff, 0x44, 0x25, 0x01, 0xc0, 0x2e, 0x00, 0x42, 0x15, 0x02, 0xbf, 0x2e, + 0x40, 0x43, 0x88, 0x0d, 0xa3, 0x2e, 0x00, 0x43, 0xbf, 0x6c, 0xca, 0x2e, + 0x40, 0x03, 0x3d, 0x05, 0x0c, 0x42, 0x15, 0x01, 0xb8, 0x2e, 0x00, 0x42, + 0x4d, 0x00, 0xab, 0x2e, 0x40, 0x43, 0x0e, 0x0b, 0xdd, 0x2e, 0x00, 0xb4, + 0x01, 0xff, 0x44, 0x25, 0x01, 0xdf, 0x2e, 0x00, 0x42, 0x15, 0x02, 0xde, + 0x2e, 0x40, 0x44, 0x73, 0x0f, 0x9e, 0x2e, 0x00, 0x49, 0xd7, 0xba, 0x8a, + 0x2e, 0x00, 0x42, 0xc1, 0x18, 0xa8, 0x2e, 0x40, 0x0c, 0xd7, 0x8b, 0x28, + 0x44, 0x5c, 0xdd, 0x9b, 0x2e, 0x00, 0xa9, 0x14, 0xac, 0x06, 0x42, 0xd1, + 0x00, 0xa7, 0x2e, 0x40, 0x43, 0x56, 0x48, 0x81, 0x2e, 0x00, 0x45, 0x49, + 0x88, 0xc2, 0x2e, 0x40, 0x42, 0x7d, 0x11, 0xcf, 0x2e, 0x00, 0x46, 0x24, + 0xe1, 0xa0, 0x2e, 0x40, 0x44, 0x87, 0xa7, 0xe6, 0x2e, 0x00, 0x44, 0x36, + 0x6c, 0xcb, 0x2e, 0x00, 0x46, 0x55, 0x8f, 0xf0, 0x2e, 0x00, 0xa5, 0x70, + 0xa6, 0x5c, 0xa7, 0x4e, 0x45, 0x20, 0xb3, 0xe2, 0x2e, 0x00, 0xac, 0x3a, + 0xb3, 0x1a, 0xb4, 0x06, 0x44, 0x8e, 0x13, 0xdb, 0x2e, 0x40, 0x4d, 0x6f, + 0x80, 0xd9, 0x2e, 0x00, 0x44, 0xd9, 0xf1, 0xee, 0x2e, 0x00, 0x45, 0xf5, + 0xeb, 0xf3, 0x2e, 0x40, 0x43, 0xf1, 0x11, 0xe7, 0x2e, 0x00, 0x42, 0x27, + 0x01, 0xc5, 0x2e, 0x00, 0x44, 0x5e, 0x09, 0xc9, 0x2e, 0x00, 0x43, 0x38, + 0xb1, 0xb0, 0x2e, 0x00, 0x45, 0x70, 0x7c, 0xc8, 0x2e, 0x40, 0x43, 0x3a, + 0x51, 0xda, 0x2e, 0x00, 0x43, 0xd8, 0x02, 0xd3, 0x2e, 0x40, 0x43, 0x8a, + 0x00, 0xd4, 0x2e, 0x00, 0x43, 0xe1, 0x1a, 0xd0, 0x2e, 0x40, 0x43, 0xd1, + 0x0c, 0xe5, 0x2e, 0x00, 0x42, 0x75, 0x0b, 0xdc, 0x2e, 0x00, 0x43, 0xeb, + 0x2e, 0xea, 0x2e, 0x40, 0x42, 0x8a, 0x00, 0xe0, 0x2e, 0x00, 0x43, 0xca, + 0x1d, 0xec, 0x2e, 0x40, 0x45, 0x5e, 0xcf, 0xae, 0x2e, 0x00, 0x43, 0xd4, + 0x8c, 0xd8, 0x2e, 0x00, 0xaf, 0x11, 0x05, 0xa1, 0xea, 0x01, 0xff, 0x43, + 0x0e, 0x0b, 0xba, 0x2e, 0x00, 0x43, 0x1f, 0x0a, 0xbb, 0x2e, 0x40, 0x4b, + 0xf9, 0x9e, 0xaa, 0x2e, 0x00, 0x42, 0xcd, 0x05, 0xe3, 0x2e, 0x00, 0xf8, + 0x86, 0x2e, 0x40, 0x44, 0x71, 0xf1, 0xa6, 0xf3, 0x01, 0x02, 0x14, 0x03, + 0x0d, 0x47, 0xa3, 0xd6, 0xd9, 0xf3, 0xc1, 0x00, 0x48, 0xf0, 0xc1, 0x06, + 0xf3, 0x41, 0x02, 0x68, 0x00, 0x15, 0xb5, 0x01, 0xff, 0x4f, 0x3c, 0x6f, + 0x10, 0x2a, 0x00, 0x4c, 0xd4, 0x04, 0x5e, 0x00, 0x00, 0x46, 0xc8, 0xdf, + 0xaa, 0xf3, 0x41, 0x80, 0xa7, 0x0e, 0x02, 0x06, 0x00, 0x01, 0xff, 0xa1, + 0x89, 0x0e, 0xa2, 0xfa, 0x0d, 0xa3, 0xbe, 0x0d, 0xa4, 0xcd, 0x0c, 0x46, + 0x48, 0x13, 0x9c, 0x22, 0x00, 0x4c, 0x87, 0x00, 0xc1, 0x29, 0x00, 0xa8, + 0xe1, 0x0a, 0xa9, 0xc7, 0x07, 0xab, 0xdd, 0x05, 0xac, 0xf7, 0x03, 0xad, + 0xe8, 0x03, 0x07, 0xff, 0x39, 0x6f, 0x5e, 0x25, 0x14, 0x42, 0x27, 0x00, + 0xb0, 0x4f, 0xb2, 0x41, 0x46, 0xd6, 0x05, 0xd7, 0xf7, 0x01, 0xb4, 0x26, + 0x4c, 0x32, 0x00, 0xb6, 0x29, 0x00, 0xb7, 0x0a, 0xf8, 0xbe, 0x2b, 0x00, + 0x4f, 0x36, 0x75, 0x0d, 0xf1, 0x41, 0x05, 0xae, 0x02, 0x04, 0xfa, 0x2e, + 0xf1, 0x41, 0x46, 0xb2, 0x21, 0xbe, 0x29, 0x00, 0x44, 0x31, 0x13, 0x2a, + 0x27, 0x40, 0x44, 0x29, 0x02, 0x97, 0x22, 0x00, 0x47, 0x02, 0x02, 0xd5, + 0xf7, 0xc1, 0x00, 0x45, 0xa4, 0x01, 0x8a, 0x23, 0x40, 0x4e, 0x67, 0x72, + 0xb8, 0x29, 0x00, 0x4c, 0x33, 0x90, 0x9a, 0x22, 0x40, 0x47, 0x89, 0x38, + 0xb7, 0x29, 0x00, 0x4c, 0xa7, 0x8e, 0xb9, 0x29, 0x00, 0x43, 0x59, 0x28, + 0x95, 0x22, 0x00, 0x4a, 0x1f, 0xaf, 0x36, 0x30, 0x40, 0xa5, 0xdc, 0x02, + 0xa6, 0xec, 0x01, 0x48, 0xc5, 0x53, 0x72, 0x24, 0x00, 0xb3, 0xc2, 0x01, + 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x69, 0x24, 0x80, 0xb1, 0x01, 0x04, + 0x7a, 0x11, 0x5a, 0x02, 0x15, 0x01, 0x01, 0xff, 0x43, 0xe8, 0x2b, 0x6b, + 0x24, 0x00, 0x43, 0xcc, 0x1d, 0x73, 0x24, 0xc0, 0x00, 0x80, 0x01, 0xff, + 0x45, 0x12, 0x0b, 0x58, 0x32, 0x00, 0xa6, 0x31, 0x44, 0xcf, 0x2a, 0x59, 0x32, 0x00, 0x02, 0x10, 0x00, 0x1d, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, - 0x25, 0x01, 0xb8, 0x32, 0x00, 0x42, 0x15, 0x02, 0xb7, 0x32, 0x40, 0x44, - 0x27, 0x1d, 0xbc, 0x32, 0x00, 0x42, 0x60, 0x25, 0xbb, 0x32, 0x40, 0x4d, - 0xf2, 0x10, 0x4b, 0x32, 0x00, 0xe5, 0xb6, 0x32, 0x40, 0x43, 0xa7, 0x05, - 0xba, 0x32, 0x00, 0x43, 0xcb, 0x06, 0xb9, 0x32, 0x40, 0x43, 0x75, 0x09, - 0x6e, 0x24, 0x00, 0xf9, 0xbf, 0x32, 0xc0, 0x00, 0x50, 0x48, 0x5e, 0x4c, - 0x32, 0x40, 0x04, 0xc9, 0x00, 0x06, 0x45, 0x0b, 0x6e, 0x6a, 0x24, 0x40, - 0x43, 0x75, 0x09, 0x71, 0x24, 0x00, 0x51, 0x47, 0x5e, 0x4f, 0x32, 0x40, - 0x44, 0xf0, 0x1e, 0x96, 0x22, 0x00, 0x69, 0x8c, 0x04, 0x36, 0x2a, 0x40, - 0x05, 0xb4, 0x05, 0x06, 0x48, 0xed, 0x00, 0xc0, 0x29, 0x40, 0x0f, 0xb9, - 0x05, 0x6d, 0x0d, 0x4b, 0x08, 0x01, 0xff, 0xe1, 0xd0, 0x24, 0x00, 0xe2, - 0xd1, 0x24, 0x00, 0xe3, 0xd2, 0x24, 0x00, 0xe4, 0xd3, 0x24, 0x00, 0xe5, - 0xd4, 0x24, 0x00, 0xe6, 0xd5, 0x24, 0x00, 0xe7, 0xd6, 0x24, 0x00, 0xe8, - 0xd7, 0x24, 0x00, 0xe9, 0xd8, 0x24, 0x00, 0xea, 0xd9, 0x24, 0x00, 0xeb, - 0xda, 0x24, 0x00, 0xec, 0xdb, 0x24, 0x00, 0xed, 0xdc, 0x24, 0x00, 0xee, - 0xdd, 0x24, 0x00, 0xef, 0xde, 0x24, 0x00, 0xf0, 0xdf, 0x24, 0x00, 0xf1, - 0xe0, 0x24, 0x00, 0xf2, 0xe1, 0x24, 0x00, 0xf3, 0xe2, 0x24, 0x00, 0xf4, - 0xe3, 0x24, 0x00, 0xf5, 0xe4, 0x24, 0x00, 0xf6, 0xe5, 0x24, 0x00, 0xf7, - 0xe6, 0x24, 0x00, 0xf8, 0xe7, 0x24, 0x00, 0xf9, 0xe8, 0x24, 0x00, 0xfa, - 0xe9, 0x24, 0x40, 0xe1, 0xb6, 0x24, 0x00, 0xe2, 0xb7, 0x24, 0x00, 0xe3, - 0xb8, 0x24, 0x00, 0xe4, 0xb9, 0x24, 0x00, 0xe5, 0xba, 0x24, 0x00, 0xe6, - 0xbb, 0x24, 0x00, 0xe7, 0xbc, 0x24, 0x00, 0xe8, 0xbd, 0x24, 0x00, 0xe9, - 0xbe, 0x24, 0x00, 0xea, 0xbf, 0x24, 0x00, 0xeb, 0xc0, 0x24, 0x00, 0xec, - 0xc1, 0x24, 0x00, 0xed, 0xc2, 0x24, 0x00, 0xee, 0xc3, 0x24, 0x00, 0xef, - 0xc4, 0x24, 0x00, 0xf0, 0xc5, 0x24, 0x00, 0xf1, 0xc6, 0x24, 0x00, 0xf2, - 0xc7, 0x24, 0x00, 0xf3, 0xc8, 0x24, 0x00, 0xf4, 0xc9, 0x24, 0x00, 0xf5, - 0xca, 0x24, 0x00, 0xf6, 0xcb, 0x24, 0x00, 0xf7, 0xcc, 0x24, 0x00, 0xf8, - 0xcd, 0x24, 0x00, 0xf9, 0xce, 0x24, 0x00, 0xfa, 0xcf, 0x24, 0x40, 0x08, - 0x2a, 0xc1, 0x11, 0x10, 0xff, 0x51, 0x01, 0xff, 0x46, 0x90, 0xd7, 0x7c, - 0x32, 0x00, 0x45, 0xa3, 0xe4, 0x7d, 0x32, 0x40, 0xe1, 0xd0, 0x32, 0x00, - 0xe5, 0xd3, 0x32, 0x00, 0xa8, 0xb3, 0x01, 0xe9, 0xd1, 0x32, 0x00, 0xab, - 0x98, 0x01, 0xad, 0x81, 0x01, 0xae, 0x6b, 0xef, 0xd4, 0x32, 0x00, 0xb2, - 0x51, 0xb3, 0x3b, 0xb4, 0x25, 0xf5, 0xd2, 0x32, 0x00, 0xb7, 0x0f, 0xb9, - 0x01, 0xff, 0xe1, 0xf3, 0x32, 0x00, 0xef, 0xf5, 0x32, 0x00, 0xf5, 0xf4, - 0x32, 0x40, 0xe1, 0xfb, 0x32, 0x00, 0xe5, 0xfd, 0x32, 0x00, 0xe9, 0xfc, - 0x32, 0x00, 0xef, 0xfe, 0x32, 0x40, 0xe1, 0xdf, 0x32, 0x00, 0xe5, 0xe2, - 0x32, 0x00, 0xe9, 0xe0, 0x32, 0x00, 0xef, 0xe3, 0x32, 0x00, 0xf5, 0xe1, - 0x32, 0x40, 0xe1, 0xda, 0x32, 0x00, 0xe5, 0xdd, 0x32, 0x00, 0xe9, 0xdb, - 0x32, 0x00, 0xef, 0xde, 0x32, 0x00, 0xf5, 0xdc, 0x32, 0x40, 0xe1, 0xf6, - 0x32, 0x00, 0xe5, 0xf9, 0x32, 0x00, 0xe9, 0xf7, 0x32, 0x00, 0xef, 0xfa, - 0x32, 0x00, 0xf5, 0xf8, 0x32, 0x40, 0xe1, 0xe4, 0x32, 0x00, 0xe5, 0xe7, - 0x32, 0x00, 0xe9, 0xe5, 0x32, 0x00, 0xef, 0xe8, 0x32, 0x00, 0xf5, 0xe6, - 0x32, 0x40, 0xe1, 0xee, 0x32, 0x00, 0xe5, 0xf1, 0x32, 0x00, 0xe9, 0xef, - 0x32, 0x00, 0xef, 0xf2, 0x32, 0x00, 0xf5, 0xf0, 0x32, 0x40, 0xe1, 0xd5, - 0x32, 0x00, 0xe5, 0xd8, 0x32, 0x00, 0xe9, 0xd6, 0x32, 0x00, 0xef, 0xd9, - 0x32, 0x00, 0xf5, 0xd7, 0x32, 0x40, 0xe1, 0xe9, 0x32, 0x00, 0xe5, 0xec, - 0x32, 0x00, 0xe9, 0xea, 0x32, 0x00, 0xef, 0xed, 0x32, 0x00, 0xf5, 0xeb, - 0x32, 0x40, 0x09, 0x42, 0xa9, 0x13, 0x51, 0x4a, 0x5b, 0xc8, 0xf6, 0x01, - 0x1b, 0xff, 0x1c, 0x01, 0xff, 0xe3, 0x2b, 0xf1, 0x01, 0xf2, 0x2c, 0xf1, - 0x41, 0xa1, 0xe5, 0x02, 0xa3, 0xc7, 0x02, 0xa5, 0xac, 0x02, 0xa6, 0x89, - 0x02, 0xa8, 0xfa, 0x01, 0x44, 0xee, 0xbe, 0xa0, 0x32, 0x00, 0xab, 0xe5, - 0x01, 0xac, 0xd0, 0x01, 0xad, 0xb3, 0x01, 0xae, 0x9b, 0x01, 0x43, 0xbf, - 0x0a, 0x80, 0x32, 0x00, 0x45, 0xdd, 0xc3, 0x9e, 0x32, 0x00, 0x48, 0xd6, - 0x33, 0x44, 0x32, 0x00, 0xb2, 0x6c, 0xb3, 0x23, 0xb4, 0x0f, 0xb7, 0x01, - 0xff, 0x44, 0x8a, 0x00, 0x8c, 0x32, 0x00, 0x43, 0xfc, 0x2c, 0x8d, 0x32, - 0x40, 0x42, 0x92, 0x01, 0x89, 0x32, 0x00, 0x44, 0x25, 0x01, 0x82, 0x32, - 0x00, 0x42, 0x15, 0x02, 0x81, 0x32, 0x40, 0x45, 0x28, 0xe2, 0x46, 0x32, - 0x00, 0xa5, 0x33, 0x42, 0x60, 0x25, 0x85, 0x32, 0x00, 0x46, 0xb0, 0xdb, - 0x93, 0x32, 0x00, 0x46, 0x10, 0xdc, 0x95, 0x32, 0x00, 0xb4, 0x13, 0xb5, - 0x01, 0xff, 0x46, 0x36, 0xda, 0x9c, 0x32, 0x00, 0xee, 0x90, 0x32, 0x00, - 0x47, 0xdf, 0xd1, 0xac, 0x32, 0x40, 0x43, 0x35, 0x01, 0x91, 0x32, 0x00, - 0x43, 0x59, 0xf1, 0xab, 0x32, 0x40, 0x44, 0x36, 0xec, 0x99, 0x32, 0x00, - 0x43, 0x28, 0x1d, 0x86, 0x32, 0x40, 0xa5, 0x06, 0x44, 0xc9, 0x00, 0xa8, - 0x32, 0x40, 0x46, 0xba, 0xda, 0xaa, 0x32, 0x00, 0xb3, 0x01, 0xff, 0x45, - 0x56, 0x5b, 0xae, 0x32, 0x00, 0xf4, 0xa1, 0x32, 0x40, 0x43, 0x00, 0x05, - 0x94, 0x32, 0x00, 0xa9, 0x01, 0xff, 0x43, 0xca, 0x00, 0xb0, 0x32, 0x00, - 0x42, 0xa2, 0x05, 0x88, 0x32, 0x40, 0x43, 0x67, 0x00, 0x9a, 0x32, 0x00, - 0xa5, 0x06, 0x43, 0x69, 0x05, 0x8a, 0x32, 0x40, 0x46, 0x08, 0xd8, 0xa9, - 0x32, 0x00, 0x43, 0x12, 0x00, 0x8e, 0x32, 0x40, 0x44, 0xf4, 0xe4, 0x98, - 0x32, 0x00, 0x43, 0xc4, 0x00, 0xa7, 0x32, 0x00, 0x42, 0xd1, 0x00, 0xa6, - 0x32, 0x40, 0x4b, 0x5d, 0x9b, 0x45, 0x32, 0x00, 0x43, 0x4a, 0x8c, 0x47, - 0x32, 0x40, 0x43, 0x04, 0x08, 0x92, 0x32, 0x00, 0x43, 0x3f, 0x00, 0xa4, - 0x32, 0x40, 0x45, 0xb5, 0x20, 0x9b, 0x32, 0x00, 0xa9, 0x06, 0x43, 0xcb, - 0x06, 0x83, 0x32, 0x40, 0x47, 0x96, 0xd0, 0x96, 0x32, 0x00, 0x42, 0x88, - 0x00, 0x8b, 0x32, 0x00, 0x42, 0x32, 0x00, 0x84, 0x32, 0x40, 0x44, 0xb9, - 0x70, 0x8f, 0x32, 0x00, 0x44, 0xc9, 0x00, 0x87, 0x32, 0x00, 0x49, 0x3f, - 0xba, 0xad, 0x32, 0x00, 0x48, 0xea, 0xc9, 0x9d, 0x32, 0x40, 0x45, 0x74, - 0x02, 0xa5, 0x32, 0x00, 0xaf, 0x01, 0xff, 0x4c, 0x4d, 0x85, 0x97, 0x32, - 0x00, 0x42, 0x79, 0x1c, 0xa2, 0x32, 0x00, 0x45, 0xa3, 0xd2, 0xa3, 0x32, - 0x40, 0x45, 0xf6, 0xe1, 0x51, 0xf2, 0x01, 0x48, 0xc2, 0xc2, 0x50, 0xf2, - 0x01, 0x47, 0xbb, 0xc0, 0xaf, 0x32, 0x00, 0x48, 0x12, 0xc9, 0x9f, 0x32, - 0x40, 0x06, 0x9f, 0xce, 0x12, 0x5b, 0x77, 0x1a, 0xb2, 0x27, 0x00, 0x58, - 0xc5, 0x29, 0x89, 0x23, 0x00, 0x4b, 0x11, 0xa2, 0x6f, 0xf1, 0x41, 0xa3, - 0xaa, 0x01, 0x45, 0x35, 0xa3, 0x6d, 0x32, 0x80, 0x9c, 0x01, 0x45, 0x68, - 0xc9, 0x67, 0x32, 0x80, 0x89, 0x01, 0xab, 0x6d, 0x45, 0x8e, 0xe5, 0x64, - 0x32, 0x80, 0x60, 0x45, 0xfc, 0xe5, 0x61, 0x32, 0x80, 0x53, 0xb0, 0x37, - 0x45, 0x41, 0xe7, 0x63, 0x32, 0x80, 0x2a, 0x44, 0xf0, 0xbc, 0x66, 0x32, - 0x80, 0x1d, 0xb4, 0x01, 0xff, 0x46, 0x8b, 0xd3, 0x6b, 0x32, 0x80, 0x0d, - 0x45, 0x20, 0xcb, 0x62, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, 0x70, 0x32, - 0x40, 0x42, 0x19, 0x00, 0x79, 0x32, 0x40, 0x42, 0x19, 0x00, 0x74, 0x32, - 0x40, 0x42, 0x19, 0x00, 0x71, 0x32, 0x40, 0x46, 0x4c, 0xc0, 0x6c, 0x32, - 0x80, 0x0d, 0x44, 0x33, 0x83, 0x65, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, - 0x73, 0x32, 0x40, 0x42, 0x19, 0x00, 0x7a, 0x32, 0x40, 0x42, 0x19, 0x00, - 0x6f, 0x32, 0x40, 0x42, 0x19, 0x00, 0x72, 0x32, 0x40, 0x46, 0x44, 0xc0, - 0x6a, 0x32, 0x80, 0x0d, 0x45, 0xb7, 0xa0, 0x60, 0x32, 0xc0, 0x00, 0x42, - 0x19, 0x00, 0x6e, 0x32, 0x40, 0x42, 0x19, 0x00, 0x78, 0x32, 0x40, 0x80, - 0x01, 0xff, 0xe1, 0x75, 0x32, 0x00, 0xf5, 0x7e, 0x32, 0x40, 0x42, 0x19, - 0x00, 0x7b, 0x32, 0x40, 0x46, 0x17, 0xcd, 0x69, 0x32, 0x80, 0x0d, 0x44, - 0x18, 0xcd, 0x68, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, 0x76, 0x32, 0x40, - 0x42, 0x19, 0x00, 0x77, 0x32, 0x40, 0x43, 0xce, 0x03, 0x9d, 0x22, 0x00, - 0xa9, 0x0f, 0xaf, 0x01, 0xff, 0x61, 0xdd, 0x0d, 0x0f, 0xf1, 0x01, 0x4a, - 0x2b, 0x36, 0x99, 0x22, 0x40, 0x04, 0xc6, 0x06, 0x11, 0x08, 0xf4, 0x31, - 0x01, 0xff, 0x43, 0x30, 0x03, 0x38, 0x2a, 0x00, 0x44, 0xfa, 0x0d, 0x98, - 0x22, 0x40, 0x45, 0xc3, 0x0a, 0x67, 0x24, 0x00, 0xa6, 0x2e, 0x44, 0x46, - 0x2a, 0x68, 0x24, 0x00, 0x43, 0xbf, 0x0a, 0x60, 0x24, 0x00, 0xb3, 0x14, - 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xea, 0x24, 0x40, 0x44, 0x25, 0x01, 0x62, - 0x24, 0x00, 0x42, 0x15, 0x02, 0x61, 0x24, 0x40, 0x44, 0x27, 0x1d, 0x66, - 0x24, 0x00, 0x42, 0x60, 0x25, 0x65, 0x24, 0x40, 0x43, 0xa7, 0x05, 0x64, - 0x24, 0x00, 0x43, 0xcb, 0x06, 0x63, 0x24, 0x40, 0x58, 0xe6, 0x0d, 0x6e, - 0xf1, 0x01, 0xe3, 0x6d, 0xf1, 0x01, 0xe4, 0x2d, 0xf1, 0x01, 0x04, 0x47, - 0x10, 0x01, 0xff, 0x80, 0x06, 0x49, 0x23, 0xb8, 0xd2, 0x26, 0x40, 0x46, - 0xda, 0xd8, 0x02, 0xf9, 0x81, 0x06, 0x46, 0x3a, 0xdc, 0x40, 0xf5, 0x41, - 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x9c, 0x45, 0x00, 0xf9, 0x01, 0x48, - 0xd0, 0x09, 0x01, 0xf9, 0x41, 0x45, 0x65, 0xe6, 0xbf, 0x2b, 0x00, 0x45, - 0x2b, 0x21, 0xbf, 0x29, 0x40, 0x0c, 0xe6, 0x0a, 0x06, 0x50, 0xea, 0x65, - 0x9b, 0x22, 0x40, 0x46, 0xcd, 0x00, 0x0e, 0xf1, 0x01, 0x56, 0xe9, 0x31, - 0xbc, 0x29, 0x40, 0x7e, 0x00, 0x00, 0xba, 0x29, 0x00, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x61, 0x17, 0x0d, 0xd5, 0x25, 0x00, 0x4e, 0x0b, 0x00, 0xb5, - 0x29, 0x00, 0xac, 0x30, 0x50, 0x3a, 0x65, 0xd1, 0x25, 0x00, 0xb3, 0x1c, - 0x63, 0x5b, 0x0b, 0xc3, 0x29, 0x00, 0x06, 0x6d, 0x02, 0x06, 0x4d, 0x72, - 0x88, 0xcd, 0x25, 0x40, 0x4a, 0x4b, 0x25, 0xd3, 0x25, 0x00, 0x54, 0x43, - 0x44, 0xd4, 0x25, 0x40, 0x58, 0x65, 0x29, 0xc2, 0x29, 0x00, 0x4d, 0xd6, - 0x87, 0xbb, 0x29, 0x40, 0x4e, 0xd0, 0x6d, 0xd0, 0x25, 0x00, 0x4f, 0x09, - 0x70, 0xd2, 0x25, 0x40, 0xa1, 0xdf, 0x08, 0xa5, 0x82, 0x02, 0xa9, 0xda, - 0x01, 0xaf, 0x0c, 0x4c, 0xe9, 0x92, 0x84, 0xf3, 0x01, 0x44, 0xbc, 0xd7, - 0xea, 0x26, 0x40, 0x4a, 0x85, 0xa6, 0x6b, 0xf3, 0x01, 0x47, 0x10, 0xd2, - 0x62, 0xf9, 0x01, 0x08, 0x7a, 0xc7, 0x01, 0xff, 0x07, 0xc1, 0x05, 0x34, - 0x07, 0x2f, 0x39, 0x01, 0xff, 0x44, 0xca, 0x06, 0xc8, 0x0f, 0x01, 0x43, - 0xbf, 0x0a, 0xc5, 0x0f, 0x81, 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, - 0xc9, 0x0f, 0x01, 0x44, 0x25, 0x01, 0xc7, 0x0f, 0x01, 0xb7, 0x01, 0xff, - 0x44, 0x29, 0x1d, 0xca, 0x0f, 0x01, 0xef, 0xc6, 0x0f, 0x41, 0x48, 0x21, - 0x11, 0xcb, 0x0f, 0x41, 0xa1, 0x75, 0x44, 0x0a, 0xec, 0xb2, 0x0f, 0x01, - 0x4a, 0xb7, 0xa6, 0xb7, 0x0f, 0x01, 0x46, 0xda, 0x48, 0xb4, 0x0f, 0x01, - 0x45, 0xa1, 0xa8, 0xb3, 0x0f, 0x01, 0x42, 0xb0, 0x01, 0xb5, 0x0f, 0x81, - 0x50, 0x44, 0x8e, 0xed, 0xbb, 0x0f, 0x01, 0x46, 0x9c, 0xda, 0xbc, 0x0f, - 0x01, 0x43, 0x89, 0x05, 0xbd, 0x0f, 0x01, 0x43, 0x54, 0x22, 0xbe, 0x0f, - 0x01, 0x42, 0x6f, 0x02, 0xc1, 0x0f, 0x01, 0x44, 0xfa, 0x64, 0xc2, 0x0f, - 0x01, 0xb3, 0x18, 0x43, 0x1e, 0xc2, 0xc4, 0x0f, 0x01, 0x43, 0xc0, 0x88, - 0xb6, 0x0f, 0x01, 0x44, 0x58, 0x51, 0xba, 0x0f, 0x01, 0x45, 0x52, 0x51, - 0xb8, 0x0f, 0x41, 0x45, 0x38, 0xe1, 0xbf, 0x0f, 0x01, 0x43, 0x0e, 0x16, - 0xc3, 0x0f, 0x01, 0x4a, 0x53, 0xab, 0xb1, 0x0f, 0x41, 0x42, 0x53, 0x00, - 0xb9, 0x0f, 0x41, 0x44, 0x48, 0x3c, 0xb0, 0x0f, 0x01, 0x43, 0xf7, 0x19, - 0xc0, 0x0f, 0x41, 0x44, 0x0a, 0x89, 0x27, 0x26, 0x00, 0x44, 0x90, 0x01, - 0x14, 0xf4, 0x01, 0x42, 0x5b, 0x1a, 0xd2, 0xf9, 0x81, 0x0c, 0x45, 0xd8, - 0xe6, 0x3f, 0xf4, 0x01, 0x43, 0x62, 0x0e, 0xb7, 0x26, 0x40, 0x4c, 0x89, - 0x92, 0xb8, 0xf6, 0x41, 0x02, 0x36, 0x01, 0xc2, 0x06, 0xa5, 0xb3, 0x06, - 0x4b, 0x51, 0x9f, 0xc1, 0xf3, 0x01, 0xb2, 0x06, 0x45, 0xf5, 0xe7, 0x30, - 0xf3, 0x41, 0x05, 0x60, 0xe6, 0x0f, 0xb2, 0x01, 0xff, 0x43, 0xee, 0x9b, - 0x52, 0xf3, 0x01, 0x49, 0xfe, 0xbe, 0x38, 0xf3, 0x41, 0x07, 0xc1, 0x05, - 0x89, 0x03, 0x0d, 0x4b, 0x08, 0x01, 0xff, 0xe1, 0x70, 0xab, 0x00, 0xa4, - 0xdf, 0x02, 0xe5, 0x71, 0xab, 0x00, 0xa7, 0xc0, 0x02, 0xa8, 0x9f, 0x02, - 0xe9, 0x72, 0xab, 0x00, 0x42, 0x1b, 0x02, 0x77, 0xab, 0x00, 0xac, 0xfa, - 0x01, 0xad, 0xdf, 0x01, 0xae, 0xbf, 0x01, 0xef, 0x73, 0xab, 0x00, 0x02, - 0x7c, 0x00, 0x9e, 0x01, 0xf3, 0x9d, 0xab, 0x80, 0x80, 0x01, 0xb4, 0x3d, - 0xf5, 0x74, 0xab, 0x00, 0xf6, 0x75, 0xab, 0x00, 0xb7, 0x1b, 0xb9, 0x01, - 0xff, 0xe1, 0xbf, 0xab, 0x00, 0xe5, 0xf8, 0x13, 0x00, 0xe9, 0xf9, 0x13, - 0x00, 0xef, 0xfa, 0x13, 0x00, 0xf5, 0xfb, 0x13, 0x00, 0xf6, 0xfc, 0x13, - 0x40, 0xe1, 0xb9, 0xab, 0x00, 0xe5, 0xba, 0xab, 0x00, 0xe9, 0xbb, 0xab, - 0x00, 0xef, 0xbc, 0xab, 0x00, 0xf5, 0xbd, 0xab, 0x00, 0xf6, 0xbe, 0xab, - 0x40, 0xe1, 0xa4, 0xab, 0x00, 0xe5, 0xa6, 0xab, 0x00, 0xe9, 0xa8, 0xab, - 0x00, 0xac, 0x1b, 0xb3, 0x01, 0xff, 0xe1, 0xb3, 0xab, 0x00, 0xe5, 0xb4, - 0xab, 0x00, 0xe9, 0xb5, 0xab, 0x00, 0xef, 0xb6, 0xab, 0x00, 0xf5, 0xb7, - 0xab, 0x00, 0xf6, 0xb8, 0xab, 0x40, 0xe1, 0xad, 0xab, 0x00, 0xe5, 0xae, - 0xab, 0x00, 0xe9, 0xaf, 0xab, 0x00, 0xef, 0xb0, 0xab, 0x00, 0xf5, 0xb1, - 0xab, 0x00, 0xf6, 0xb2, 0xab, 0x40, 0xe1, 0x9c, 0xab, 0x00, 0xe5, 0x9e, - 0xab, 0x00, 0xe9, 0x9f, 0xab, 0x00, 0xef, 0xa0, 0xab, 0x00, 0xf5, 0xa1, - 0xab, 0x00, 0xf6, 0xa2, 0xab, 0x40, 0xe1, 0x96, 0xab, 0x00, 0xe5, 0x97, - 0xab, 0x00, 0xe9, 0x98, 0xab, 0x00, 0xef, 0x99, 0xab, 0x00, 0xf5, 0x9a, - 0xab, 0x00, 0xf6, 0x9b, 0xab, 0x40, 0xe1, 0x8e, 0xab, 0x80, 0x14, 0xe5, - 0x91, 0xab, 0x00, 0xe9, 0x92, 0xab, 0x00, 0xef, 0x93, 0xab, 0x00, 0xf5, - 0x94, 0xab, 0x00, 0xf6, 0x95, 0xab, 0x40, 0xe8, 0x90, 0xab, 0x40, 0xe1, - 0x89, 0xab, 0x00, 0xe5, 0x8a, 0xab, 0x00, 0xe9, 0x8b, 0xab, 0x00, 0xef, - 0x8c, 0xab, 0x00, 0xf5, 0x8d, 0xab, 0x00, 0xf6, 0xfd, 0x13, 0x40, 0xe1, - 0x83, 0xab, 0x00, 0xe5, 0x84, 0xab, 0x00, 0xe9, 0x85, 0xab, 0x00, 0xef, - 0x86, 0xab, 0x00, 0xf5, 0x87, 0xab, 0x00, 0xf6, 0x88, 0xab, 0x40, 0xe1, - 0x7d, 0xab, 0x00, 0xe5, 0x7e, 0xab, 0x00, 0xe9, 0x7f, 0xab, 0x00, 0x42, - 0xff, 0x04, 0x8f, 0xab, 0x00, 0xef, 0x80, 0xab, 0x00, 0xf5, 0x81, 0xab, - 0x00, 0xf6, 0x82, 0xab, 0x40, 0xe1, 0x76, 0xab, 0x00, 0xe5, 0x78, 0xab, - 0x00, 0xe9, 0x79, 0xab, 0x00, 0xef, 0x7a, 0xab, 0x00, 0xf5, 0x7b, 0xab, - 0x00, 0xf6, 0x7c, 0xab, 0x40, 0xe1, 0xa3, 0xab, 0x00, 0xe5, 0xa5, 0xab, - 0x00, 0xe9, 0xa7, 0xab, 0x00, 0x42, 0x74, 0x00, 0xac, 0xab, 0x00, 0xef, - 0xa9, 0xab, 0x00, 0xf5, 0xaa, 0xab, 0x00, 0xf6, 0xab, 0xab, 0x40, 0xe1, - 0xa0, 0x13, 0x00, 0xa4, 0xdf, 0x02, 0xe5, 0xa1, 0x13, 0x00, 0xa7, 0xc0, - 0x02, 0xa8, 0x9f, 0x02, 0xe9, 0xa2, 0x13, 0x00, 0x42, 0x1b, 0x02, 0xa7, - 0x13, 0x00, 0xac, 0xfa, 0x01, 0xad, 0xdf, 0x01, 0xae, 0xbf, 0x01, 0xef, - 0xa3, 0x13, 0x00, 0x02, 0x7c, 0x00, 0x9e, 0x01, 0xf3, 0xcd, 0x13, 0x80, - 0x80, 0x01, 0xb4, 0x3d, 0xf5, 0xa4, 0x13, 0x00, 0xf6, 0xa5, 0x13, 0x00, - 0xb7, 0x1b, 0xb9, 0x01, 0xff, 0xe1, 0xef, 0x13, 0x00, 0xe5, 0xf0, 0x13, - 0x00, 0xe9, 0xf1, 0x13, 0x00, 0xef, 0xf2, 0x13, 0x00, 0xf5, 0xf3, 0x13, - 0x00, 0xf6, 0xf4, 0x13, 0x40, 0xe1, 0xe9, 0x13, 0x00, 0xe5, 0xea, 0x13, - 0x00, 0xe9, 0xeb, 0x13, 0x00, 0xef, 0xec, 0x13, 0x00, 0xf5, 0xed, 0x13, - 0x00, 0xf6, 0xee, 0x13, 0x40, 0xe1, 0xd4, 0x13, 0x00, 0xe5, 0xd6, 0x13, - 0x00, 0xe9, 0xd8, 0x13, 0x00, 0xac, 0x1b, 0xb3, 0x01, 0xff, 0xe1, 0xe3, - 0x13, 0x00, 0xe5, 0xe4, 0x13, 0x00, 0xe9, 0xe5, 0x13, 0x00, 0xef, 0xe6, - 0x13, 0x00, 0xf5, 0xe7, 0x13, 0x00, 0xf6, 0xe8, 0x13, 0x40, 0xe1, 0xdd, - 0x13, 0x00, 0xe5, 0xde, 0x13, 0x00, 0xe9, 0xdf, 0x13, 0x00, 0xef, 0xe0, - 0x13, 0x00, 0xf5, 0xe1, 0x13, 0x00, 0xf6, 0xe2, 0x13, 0x40, 0xe1, 0xcc, - 0x13, 0x00, 0xe5, 0xce, 0x13, 0x00, 0xe9, 0xcf, 0x13, 0x00, 0xef, 0xd0, - 0x13, 0x00, 0xf5, 0xd1, 0x13, 0x00, 0xf6, 0xd2, 0x13, 0x40, 0xe1, 0xc6, - 0x13, 0x00, 0xe5, 0xc7, 0x13, 0x00, 0xe9, 0xc8, 0x13, 0x00, 0xef, 0xc9, - 0x13, 0x00, 0xf5, 0xca, 0x13, 0x00, 0xf6, 0xcb, 0x13, 0x40, 0xe1, 0xbe, - 0x13, 0x80, 0x14, 0xe5, 0xc1, 0x13, 0x00, 0xe9, 0xc2, 0x13, 0x00, 0xef, - 0xc3, 0x13, 0x00, 0xf5, 0xc4, 0x13, 0x00, 0xf6, 0xc5, 0x13, 0x40, 0xe8, - 0xc0, 0x13, 0x40, 0xe1, 0xb9, 0x13, 0x00, 0xe5, 0xba, 0x13, 0x00, 0xe9, - 0xbb, 0x13, 0x00, 0xef, 0xbc, 0x13, 0x00, 0xf5, 0xbd, 0x13, 0x00, 0xf6, - 0xf5, 0x13, 0x40, 0xe1, 0xb3, 0x13, 0x00, 0xe5, 0xb4, 0x13, 0x00, 0xe9, - 0xb5, 0x13, 0x00, 0xef, 0xb6, 0x13, 0x00, 0xf5, 0xb7, 0x13, 0x00, 0xf6, - 0xb8, 0x13, 0x40, 0xe1, 0xad, 0x13, 0x00, 0xe5, 0xae, 0x13, 0x00, 0xe9, - 0xaf, 0x13, 0x00, 0x42, 0xff, 0x04, 0xbf, 0x13, 0x00, 0xef, 0xb0, 0x13, - 0x00, 0xf5, 0xb1, 0x13, 0x00, 0xf6, 0xb2, 0x13, 0x40, 0xe1, 0xa6, 0x13, - 0x00, 0xe5, 0xa8, 0x13, 0x00, 0xe9, 0xa9, 0x13, 0x00, 0xef, 0xaa, 0x13, - 0x00, 0xf5, 0xab, 0x13, 0x00, 0xf6, 0xac, 0x13, 0x40, 0xe1, 0xd3, 0x13, - 0x00, 0xe5, 0xd5, 0x13, 0x00, 0xe9, 0xd7, 0x13, 0x00, 0x42, 0x74, 0x00, - 0xdc, 0x13, 0x00, 0xef, 0xd9, 0x13, 0x00, 0xf5, 0xda, 0x13, 0x00, 0xf6, - 0xdb, 0x13, 0x40, 0x4e, 0x66, 0x7a, 0xe3, 0xf4, 0x01, 0x48, 0x0a, 0xc8, - 0xc0, 0xf9, 0x41, 0x45, 0xb8, 0x00, 0x13, 0x27, 0x00, 0x48, 0x23, 0x14, - 0x7e, 0xf6, 0xc1, 0x00, 0x45, 0x07, 0x0b, 0x95, 0xfb, 0x41, 0xa9, 0x8d, - 0x08, 0x04, 0xa2, 0xed, 0xb5, 0x04, 0x02, 0x1e, 0x04, 0x3b, 0xb2, 0x01, - 0xff, 0x07, 0xbf, 0xcb, 0x18, 0x07, 0x45, 0x0d, 0x01, 0xff, 0x4f, 0xc3, - 0x6a, 0xc9, 0xf4, 0x01, 0x4d, 0xfd, 0x87, 0xc8, 0xf4, 0xc1, 0x00, 0x4d, - 0xbb, 0x7d, 0xb9, 0xf4, 0x41, 0x49, 0x14, 0x3b, 0x09, 0x00, 0x80, 0x06, - 0x42, 0xc9, 0x02, 0x40, 0x20, 0x40, 0x80, 0x01, 0xff, 0x43, 0x4d, 0x12, - 0x88, 0x00, 0x00, 0x52, 0x5e, 0x55, 0x89, 0x00, 0x40, 0x0f, 0x6d, 0x32, - 0xc7, 0x03, 0x06, 0xc4, 0x06, 0x80, 0x03, 0x07, 0xc1, 0x05, 0x52, 0x0c, - 0x01, 0x16, 0x34, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x21, 0x42, 0xc3, - 0x0a, 0x2c, 0xaa, 0x00, 0xe9, 0x2a, 0xaa, 0x80, 0x12, 0xef, 0x2f, 0xaa, - 0x80, 0x09, 0xf5, 0x2d, 0xaa, 0xc0, 0x00, 0xe5, 0x32, 0xaa, 0x40, 0xe5, - 0x2e, 0xaa, 0x40, 0xe9, 0x2b, 0xaa, 0x40, 0xe1, 0x29, 0xaa, 0x00, 0xe9, - 0x30, 0xaa, 0x00, 0xf5, 0x31, 0xaa, 0x40, 0xa4, 0x0c, 0x46, 0xa6, 0x83, - 0x5c, 0xaa, 0x00, 0x4c, 0x2d, 0x94, 0x5f, 0xaa, 0x40, 0x44, 0xd1, 0x1f, - 0x5d, 0xaa, 0x00, 0x4b, 0xd8, 0x9e, 0x5e, 0xaa, 0x40, 0xe1, 0x00, 0xaa, - 0x80, 0xa0, 0x02, 0xa2, 0x8d, 0x02, 0x02, 0x1e, 0x14, 0xfe, 0x01, 0xa4, - 0xeb, 0x01, 0xe5, 0x03, 0xaa, 0x00, 0x06, 0x3d, 0x2c, 0xb1, 0x01, 0xa7, - 0xa4, 0x01, 0x42, 0x22, 0x00, 0x28, 0xaa, 0x00, 0xe9, 0x01, 0xaa, 0x00, - 0xaa, 0x8d, 0x01, 0xab, 0x80, 0x01, 0x42, 0x74, 0x00, 0x24, 0xaa, 0x00, - 0xad, 0x6e, 0xae, 0x44, 0xef, 0x05, 0xaa, 0x00, 0xb0, 0x2e, 0x42, 0x71, - 0x00, 0x23, 0xaa, 0x00, 0xb3, 0x1c, 0xb4, 0x10, 0xf5, 0x02, 0xaa, 0x00, - 0x42, 0xa6, 0x0a, 0x25, 0xaa, 0x00, 0x42, 0x34, 0x22, 0x22, 0xaa, 0x40, - 0xe1, 0x13, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x14, 0xaa, 0x40, 0xe1, 0x27, - 0xaa, 0x00, 0x42, 0x15, 0x06, 0x26, 0xaa, 0x40, 0xe1, 0x1a, 0xaa, 0x00, - 0x42, 0x22, 0x00, 0x1c, 0xaa, 0x00, 0x42, 0x6c, 0x09, 0x1b, 0xaa, 0x40, - 0xe1, 0x18, 0xaa, 0x00, 0xa7, 0x18, 0xa8, 0x06, 0x42, 0x87, 0x13, 0x17, - 0xaa, 0x40, 0xe1, 0x11, 0xaa, 0x00, 0x42, 0xbd, 0x26, 0x12, 0xaa, 0x00, - 0x42, 0x87, 0x13, 0x10, 0xaa, 0x40, 0xe1, 0x0b, 0xaa, 0x00, 0x42, 0x87, - 0x13, 0x0a, 0xaa, 0x40, 0xe1, 0x20, 0xaa, 0x00, 0x42, 0x87, 0x13, 0x1f, - 0xaa, 0x40, 0xe1, 0x06, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x07, 0xaa, 0x40, - 0xe1, 0x0e, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x0f, 0xaa, 0x40, 0xe1, 0x08, - 0xaa, 0x00, 0x42, 0x22, 0x00, 0x09, 0xaa, 0x40, 0x42, 0x1e, 0x14, 0x44, - 0xaa, 0x00, 0xe7, 0x41, 0xaa, 0x00, 0xeb, 0x40, 0xaa, 0x00, 0xec, 0x4a, - 0xaa, 0x00, 0xee, 0x46, 0xaa, 0x80, 0x16, 0xf0, 0x47, 0xaa, 0x00, 0xf2, - 0x49, 0xaa, 0x00, 0x42, 0xee, 0x00, 0x4b, 0xaa, 0x00, 0xf4, 0x45, 0xaa, - 0x00, 0xf9, 0x48, 0xaa, 0x40, 0xe7, 0x42, 0xaa, 0x40, 0xe1, 0x15, 0xaa, - 0x00, 0x42, 0xa1, 0x10, 0x19, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x16, 0xaa, - 0x40, 0xe1, 0x0c, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x0d, 0xaa, 0x40, 0xe1, - 0x1d, 0xaa, 0x00, 0x42, 0x16, 0x00, 0x21, 0xaa, 0x00, 0x42, 0x22, 0x00, - 0x1e, 0xaa, 0x40, 0xe9, 0x04, 0xaa, 0x40, 0x45, 0xc3, 0x0a, 0x58, 0xaa, - 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x59, 0xaa, 0x00, 0x43, 0xbf, 0x0a, - 0x51, 0xaa, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x50, 0xaa, - 0x40, 0x44, 0x25, 0x01, 0x53, 0xaa, 0x00, 0x42, 0x15, 0x02, 0x52, 0xaa, - 0x40, 0x44, 0x27, 0x1d, 0x57, 0xaa, 0x00, 0x42, 0x60, 0x25, 0x56, 0xaa, - 0x40, 0x43, 0xa7, 0x05, 0x55, 0xaa, 0x00, 0x43, 0xcb, 0x06, 0x54, 0xaa, - 0x40, 0x06, 0x3d, 0x2c, 0x18, 0x42, 0x74, 0x00, 0x35, 0xaa, 0x00, 0x42, - 0x71, 0x00, 0x34, 0xaa, 0x00, 0x42, 0xa9, 0x01, 0x36, 0xaa, 0x00, 0x42, - 0x34, 0x22, 0x33, 0xaa, 0x40, 0xe8, 0x4d, 0xaa, 0x00, 0xed, 0x4c, 0xaa, - 0x00, 0x42, 0x1d, 0x01, 0x43, 0xaa, 0x40, 0x47, 0x6e, 0xcc, 0x32, 0x11, - 0x01, 0xa4, 0xf8, 0x02, 0x07, 0xc1, 0x05, 0x74, 0x47, 0x3b, 0xd0, 0x34, - 0x11, 0x01, 0x46, 0x1c, 0xc9, 0x31, 0x11, 0x01, 0x4d, 0xd6, 0x33, 0x43, - 0x11, 0x01, 0xb3, 0x43, 0xb6, 0x01, 0xff, 0x45, 0x5c, 0x23, 0x33, 0x11, - 0x01, 0x0a, 0xd2, 0x75, 0x01, 0xff, 0xe1, 0x27, 0x11, 0x81, 0x24, 0xe5, - 0x2c, 0x11, 0x81, 0x1b, 0xe9, 0x28, 0x11, 0x81, 0x12, 0xef, 0x2e, 0x11, - 0x81, 0x09, 0xf5, 0x2a, 0x11, 0xc1, 0x00, 0xf5, 0x2b, 0x11, 0x41, 0xe9, - 0x30, 0x11, 0x41, 0xe9, 0x29, 0x11, 0x41, 0xe9, 0x46, 0x11, 0x41, 0xe1, - 0x45, 0x11, 0x01, 0xe9, 0x2d, 0x11, 0x01, 0xf5, 0x2f, 0x11, 0x41, 0x4b, - 0x58, 0x26, 0x40, 0x11, 0x01, 0x04, 0x30, 0x03, 0x01, 0xff, 0x48, 0xd0, - 0x15, 0x01, 0x11, 0x01, 0x4b, 0x4f, 0x23, 0x00, 0x11, 0x01, 0x47, 0xa1, - 0x4a, 0x02, 0x11, 0x41, 0x42, 0x31, 0x12, 0x03, 0x11, 0x01, 0xa2, 0xeb, - 0x01, 0xa3, 0xdc, 0x01, 0xa4, 0xbf, 0x01, 0xe5, 0x06, 0x11, 0x01, 0xa7, - 0xac, 0x01, 0x43, 0x42, 0x40, 0x26, 0x11, 0x01, 0xe9, 0x04, 0x11, 0x01, - 0xaa, 0x93, 0x01, 0xab, 0x84, 0x01, 0xac, 0x76, 0x43, 0xd5, 0x56, 0x1f, - 0x11, 0x01, 0xae, 0x56, 0xb0, 0x48, 0x43, 0xcd, 0xa8, 0x22, 0x11, 0x01, - 0x43, 0xc4, 0xdc, 0x25, 0x11, 0x01, 0xb4, 0x1f, 0xf5, 0x05, 0x11, 0x01, - 0x43, 0xe5, 0xe8, 0x47, 0x11, 0x01, 0x43, 0xe7, 0x18, 0x24, 0x11, 0x01, - 0xb9, 0x01, 0xff, 0x42, 0x31, 0x12, 0x21, 0x11, 0x01, 0x43, 0x4e, 0xb7, - 0x20, 0x11, 0x41, 0x42, 0x31, 0x12, 0x16, 0x11, 0x01, 0x43, 0x42, 0x40, - 0x17, 0x11, 0x01, 0xb4, 0x01, 0xff, 0x42, 0x31, 0x12, 0x11, 0x11, 0x01, - 0x43, 0x42, 0x40, 0x12, 0x11, 0x41, 0x42, 0x31, 0x12, 0x1b, 0x11, 0x01, - 0x43, 0x42, 0x40, 0x1c, 0x11, 0x41, 0x42, 0x31, 0x12, 0x1a, 0x11, 0x01, - 0x43, 0x50, 0x56, 0x0b, 0x11, 0x01, 0x43, 0xe2, 0x51, 0x15, 0x11, 0x01, - 0x43, 0x4e, 0xb7, 0x10, 0x11, 0x41, 0x42, 0x31, 0x12, 0x23, 0x11, 0x01, - 0x43, 0x42, 0x40, 0x44, 0x11, 0x41, 0x42, 0x31, 0x12, 0x07, 0x11, 0x01, - 0x43, 0x42, 0x40, 0x08, 0x11, 0x41, 0x42, 0x31, 0x12, 0x0e, 0x11, 0x01, - 0x43, 0x42, 0x40, 0x0f, 0x11, 0x41, 0x42, 0x31, 0x12, 0x09, 0x11, 0x01, - 0x43, 0x42, 0x40, 0x0a, 0x11, 0x41, 0x42, 0x31, 0x12, 0x18, 0x11, 0x01, - 0xa4, 0x06, 0x43, 0x42, 0x40, 0x19, 0x11, 0x41, 0x42, 0x31, 0x12, 0x13, - 0x11, 0x01, 0x43, 0x42, 0x40, 0x14, 0x11, 0x41, 0x42, 0x31, 0x12, 0x0c, - 0x11, 0x01, 0x43, 0x42, 0x40, 0x0d, 0x11, 0x41, 0x42, 0x31, 0x12, 0x1d, - 0x11, 0x01, 0x43, 0x42, 0x40, 0x1e, 0x11, 0x41, 0x44, 0xd1, 0x1f, 0x41, - 0x11, 0x01, 0x05, 0xc5, 0x06, 0x06, 0x4b, 0xd8, 0x9e, 0x42, 0x11, 0x41, - 0x45, 0xc3, 0x0a, 0x3e, 0x11, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x3f, - 0x11, 0x01, 0x43, 0xbf, 0x0a, 0x37, 0x11, 0x01, 0xb3, 0x14, 0xb4, 0x06, - 0x44, 0xa1, 0x1d, 0x36, 0x11, 0x41, 0x44, 0x25, 0x01, 0x39, 0x11, 0x01, - 0x42, 0x15, 0x02, 0x38, 0x11, 0x41, 0x44, 0x27, 0x1d, 0x3d, 0x11, 0x01, - 0x42, 0x60, 0x25, 0x3c, 0x11, 0x41, 0x43, 0xa7, 0x05, 0x3b, 0x11, 0x01, - 0x43, 0xcb, 0x06, 0x3a, 0x11, 0x41, 0x42, 0x5f, 0x01, 0xd3, 0x26, 0x00, - 0xf2, 0x91, 0xfa, 0x41, 0x02, 0x00, 0x00, 0x32, 0x4a, 0x35, 0xab, 0x48, - 0xf5, 0x01, 0x02, 0x11, 0x00, 0x06, 0x43, 0x33, 0x23, 0xb3, 0x26, 0x40, - 0x45, 0x2e, 0x03, 0xa2, 0x00, 0x00, 0x02, 0x88, 0x00, 0x01, 0xff, 0x4c, - 0x71, 0x89, 0x04, 0x21, 0x00, 0x05, 0xc2, 0x07, 0x01, 0xff, 0x48, 0xab, - 0x88, 0x4e, 0xfe, 0x00, 0x48, 0xb8, 0x88, 0x4a, 0xfe, 0x40, 0x45, 0x2e, - 0x03, 0xb5, 0x20, 0x00, 0x43, 0xdd, 0x0d, 0xb8, 0x00, 0x40, 0x44, 0xa6, - 0xd2, 0x35, 0xf3, 0x01, 0xa4, 0xfb, 0x22, 0xac, 0xec, 0x22, 0xad, 0xd6, - 0x22, 0xae, 0xf4, 0x05, 0xb0, 0xe5, 0x05, 0xb2, 0x9a, 0x03, 0x44, 0xbc, - 0x01, 0xeb, 0x26, 0x00, 0xf4, 0x08, 0xf4, 0x81, 0xf6, 0x02, 0xb5, 0x01, - 0xff, 0x10, 0xca, 0x5f, 0x06, 0x49, 0x95, 0x04, 0x21, 0x26, 0x40, 0x4d, - 0xf7, 0x7f, 0x6f, 0x05, 0x01, 0x07, 0xc1, 0x05, 0x01, 0xff, 0xa1, 0xcf, - 0x02, 0x43, 0x71, 0x09, 0x31, 0x05, 0x01, 0xa3, 0x98, 0x02, 0xa4, 0xfa, - 0x01, 0xa5, 0xed, 0x01, 0x43, 0xc8, 0xd8, 0x54, 0x05, 0x01, 0xa7, 0xd8, - 0x01, 0x44, 0xfa, 0xec, 0x46, 0x05, 0x01, 0xa9, 0xbd, 0x01, 0xaa, 0xae, - 0x01, 0xab, 0x9f, 0x01, 0xac, 0x90, 0x01, 0x43, 0x61, 0xe5, 0x4c, 0x05, - 0x01, 0x44, 0x46, 0xee, 0x4e, 0x05, 0x01, 0x42, 0x10, 0x00, 0x52, 0x05, - 0x01, 0xb0, 0x70, 0x02, 0xf4, 0x13, 0x64, 0x43, 0x3a, 0x0e, 0x59, 0x05, - 0x01, 0xb3, 0x44, 0xb4, 0x30, 0x44, 0xb2, 0xef, 0x5b, 0x05, 0x01, 0x44, - 0xe6, 0xef, 0x40, 0x05, 0x01, 0xb9, 0x16, 0xba, 0x01, 0xff, 0x43, 0x65, - 0x34, 0x35, 0x05, 0x01, 0xa8, 0x01, 0xff, 0xe1, 0x3b, 0x05, 0x01, 0x42, - 0x62, 0x01, 0x37, 0x05, 0x41, 0x43, 0xc3, 0x32, 0x61, 0x05, 0x01, 0x43, - 0x2d, 0x23, 0x3a, 0x05, 0x41, 0x42, 0xbb, 0x01, 0x38, 0x05, 0x01, 0x43, - 0x08, 0xf1, 0x5c, 0x05, 0x01, 0x43, 0xe8, 0x51, 0x53, 0x05, 0x41, 0x43, - 0xe1, 0xf0, 0x5a, 0x05, 0x01, 0xa8, 0x01, 0xff, 0xe1, 0x3d, 0x05, 0x81, - 0x06, 0x42, 0xdc, 0x67, 0x5d, 0x05, 0x41, 0xeb, 0x50, 0x05, 0x41, 0xf2, - 0x4d, 0x05, 0x01, 0xf9, 0x47, 0x05, 0x41, 0x42, 0x92, 0x01, 0x57, 0x05, - 0x01, 0x43, 0x08, 0xf1, 0x62, 0x05, 0x41, 0x42, 0x1a, 0x00, 0x3e, 0x05, - 0x01, 0x43, 0xa3, 0x51, 0x45, 0x05, 0x41, 0x42, 0x17, 0x00, 0x44, 0x05, - 0x01, 0x42, 0x4f, 0x3e, 0x63, 0x05, 0x41, 0x43, 0xee, 0x7e, 0x51, 0x05, - 0x01, 0x43, 0xff, 0xf0, 0x43, 0x05, 0x41, 0x43, 0xd6, 0x34, 0x3f, 0x05, - 0x01, 0x42, 0x74, 0x05, 0x3c, 0x05, 0x01, 0x42, 0xa7, 0x01, 0x5e, 0x05, - 0x41, 0x44, 0xf6, 0xec, 0x58, 0x05, 0x01, 0x42, 0x29, 0x02, 0x32, 0x05, - 0x41, 0xe2, 0x34, 0x05, 0x01, 0x42, 0x61, 0x1c, 0x36, 0x05, 0x41, 0x42, - 0x8a, 0x00, 0x33, 0x05, 0x01, 0x43, 0xe8, 0x34, 0x41, 0x05, 0x01, 0xba, - 0x01, 0xff, 0x42, 0x9e, 0x10, 0x55, 0x05, 0x01, 0x43, 0xe8, 0x51, 0x4f, - 0x05, 0x41, 0xa1, 0x22, 0xa8, 0x0d, 0x02, 0x34, 0x22, 0x01, 0xff, 0xf7, - 0x5f, 0x05, 0x01, 0xf9, 0x4b, 0x05, 0x41, 0xe1, 0x39, 0x05, 0x81, 0x0a, - 0xe9, 0x4a, 0x05, 0x01, 0x42, 0xdc, 0x67, 0x49, 0x05, 0x41, 0xf4, 0x56, - 0x05, 0x41, 0xf2, 0x42, 0x05, 0x01, 0x42, 0x61, 0x1c, 0x60, 0x05, 0x41, - 0x42, 0x8d, 0x04, 0x30, 0x05, 0x01, 0x42, 0x0c, 0x00, 0x48, 0x05, 0x41, - 0x45, 0xe0, 0x07, 0x31, 0xf4, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, - 0x4c, 0xd9, 0x93, 0x39, 0xf6, 0x01, 0x49, 0xe3, 0xbe, 0x3c, 0xf6, 0x41, - 0x48, 0x12, 0xc0, 0xd0, 0x26, 0x00, 0x02, 0x06, 0x00, 0xaa, 0x02, 0xa5, - 0x96, 0x02, 0x0b, 0x8e, 0x8b, 0x29, 0xaf, 0x1d, 0xb0, 0x0f, 0xb2, 0x01, - 0xff, 0x4b, 0x6c, 0x86, 0x0d, 0x00, 0x00, 0x42, 0xf0, 0x04, 0x55, 0xf9, - 0x41, 0x49, 0x8c, 0xb2, 0x8f, 0xf3, 0x01, 0x49, 0x22, 0xb6, 0x9a, 0xfa, - 0x41, 0xee, 0xc7, 0x02, 0x00, 0x4a, 0xcb, 0xb0, 0xa0, 0xf3, 0x41, 0xe1, - 0xa0, 0x02, 0x81, 0xdf, 0x01, 0xe2, 0xa9, 0x02, 0x01, 0x02, 0xbc, 0x06, - 0xca, 0x01, 0xe4, 0xa2, 0x02, 0x81, 0xc0, 0x01, 0xe5, 0xba, 0x02, 0x81, - 0xb6, 0x01, 0xe7, 0xc0, 0x02, 0x81, 0xac, 0x01, 0xe9, 0xb9, 0x02, 0x81, - 0xa2, 0x01, 0xeb, 0xbc, 0x02, 0x81, 0x98, 0x01, 0xec, 0xa3, 0x02, 0x81, - 0x89, 0x01, 0xed, 0xaa, 0x02, 0x81, 0x73, 0xee, 0xb5, 0x02, 0x81, 0x62, - 0xef, 0xab, 0x02, 0x01, 0xf0, 0xb7, 0x02, 0x81, 0x55, 0xf1, 0xa8, 0x02, - 0x01, 0xf2, 0xa5, 0x02, 0x81, 0x48, 0xf3, 0xb0, 0x02, 0x81, 0x2d, 0xf4, - 0xad, 0x02, 0x81, 0x1f, 0xf5, 0xb2, 0x02, 0x81, 0x04, 0xf8, 0xb4, 0x02, - 0x41, 0xf5, 0xbf, 0x02, 0xc1, 0x00, 0xf5, 0xa4, 0x02, 0xc1, 0x00, 0xd2, - 0xc8, 0x02, 0x01, 0xd3, 0xd0, 0x02, 0x01, 0xf5, 0xbb, 0x02, 0x41, 0xf4, - 0xc7, 0x02, 0xc1, 0x00, 0xd2, 0xb6, 0x02, 0x41, 0xe8, 0xae, 0x02, 0x81, - 0x0d, 0xf3, 0xb8, 0x02, 0x01, 0xf4, 0xc2, 0x02, 0xc1, 0x00, 0xd2, 0xc3, - 0x02, 0x41, 0xd2, 0xaf, 0x02, 0x41, 0xf2, 0xc9, 0x02, 0x41, 0xd2, 0xa1, - 0x02, 0x41, 0xe4, 0xbe, 0x02, 0x01, 0xe7, 0xc4, 0x02, 0x01, 0xee, 0xb3, - 0x02, 0x41, 0xe2, 0xca, 0x02, 0xc1, 0x00, 0xd2, 0xcb, 0x02, 0x01, 0xd3, - 0xcc, 0x02, 0x01, 0xd4, 0xcd, 0x02, 0x41, 0xe4, 0xa6, 0x02, 0xc1, 0x00, - 0xd2, 0xce, 0x02, 0x41, 0xd2, 0xbd, 0x02, 0x41, 0xe9, 0xc5, 0x02, 0x41, - 0xd2, 0xc1, 0x02, 0x41, 0xd2, 0xcf, 0x02, 0x41, 0xd2, 0xac, 0x02, 0x41, - 0x42, 0x4e, 0xdf, 0xb1, 0x02, 0x01, 0x42, 0xac, 0xf1, 0xc6, 0x02, 0x41, - 0xd2, 0xa7, 0x02, 0x41, 0x43, 0xf3, 0x01, 0x05, 0x21, 0x00, 0xf4, 0x38, - 0x20, 0xc0, 0x00, 0x50, 0xaa, 0x5e, 0x41, 0x20, 0x40, 0x48, 0x92, 0xc3, - 0xc3, 0xf5, 0x01, 0x45, 0x40, 0x13, 0xc7, 0xf4, 0xc1, 0x00, 0x49, 0xf3, - 0xb1, 0xc2, 0xf5, 0x41, 0x46, 0x42, 0xda, 0x3f, 0x2e, 0x00, 0x46, 0x88, - 0xdc, 0x51, 0x26, 0x40, 0x10, 0x4a, 0x5f, 0x39, 0x02, 0x73, 0x02, 0x18, - 0xa4, 0x0c, 0x48, 0xfa, 0xc5, 0x6b, 0xf9, 0x01, 0x42, 0x17, 0x50, 0xf6, - 0xf6, 0x41, 0x42, 0x68, 0x00, 0x6f, 0xf5, 0x01, 0xf9, 0x6c, 0xf3, 0x41, - 0xec, 0x18, 0x00, 0x80, 0x04, 0xf2, 0x4b, 0x26, 0x40, 0x80, 0x06, 0x48, - 0xfa, 0xc4, 0xd9, 0xf5, 0x41, 0x49, 0xef, 0x1f, 0x94, 0x00, 0x00, 0x43, - 0x13, 0x1b, 0x7f, 0x00, 0x4e, 0xe1, 0x0a, 0x14, 0x80, 0xf0, 0x1b, 0xa2, - 0x89, 0x1b, 0xe3, 0xa1, 0x14, 0x80, 0xe0, 0x13, 0xe5, 0x01, 0x14, 0x80, - 0xd0, 0x13, 0xe6, 0x5d, 0x15, 0x80, 0xb1, 0x12, 0x4c, 0x2d, 0x28, 0x1e, - 0x14, 0x00, 0xa8, 0x9e, 0x12, 0xe9, 0x03, 0x14, 0x80, 0x90, 0x12, 0xeb, - 0x83, 0x14, 0x80, 0xba, 0x11, 0xec, 0xea, 0x14, 0x80, 0xca, 0x10, 0xed, - 0xbb, 0x14, 0x80, 0xe1, 0x0f, 0xee, 0xd0, 0x14, 0x80, 0xd6, 0x0c, 0xef, - 0x05, 0x14, 0x80, 0x89, 0x0c, 0xf0, 0x49, 0x14, 0x80, 0xb1, 0x0b, 0xf1, - 0x85, 0x15, 0x80, 0x87, 0x0b, 0xf2, 0x50, 0x15, 0x80, 0xa7, 0x0a, 0xf3, - 0x05, 0x15, 0x80, 0xf5, 0x07, 0xf4, 0x66, 0x14, 0x80, 0xe0, 0x05, 0xb7, - 0x9f, 0x01, 0xf9, 0x3e, 0x15, 0xc0, 0x00, 0x06, 0x1f, 0x9b, 0x4e, 0xe1, - 0x2d, 0x15, 0x80, 0x3c, 0xe5, 0x26, 0x15, 0x00, 0xe9, 0x28, 0x15, 0x80, - 0x2f, 0xef, 0x2a, 0x15, 0x80, 0x22, 0xb7, 0x01, 0xff, 0xe1, 0x39, 0x15, - 0x80, 0x16, 0xe5, 0x2f, 0x15, 0x00, 0xe9, 0x31, 0x15, 0x80, 0x09, 0xef, - 0x35, 0x15, 0xc0, 0x00, 0xef, 0x37, 0x15, 0x40, 0xe9, 0x33, 0x15, 0x40, - 0xe1, 0x3b, 0x15, 0x40, 0xef, 0x2b, 0x15, 0x00, 0xf9, 0xc3, 0x18, 0x40, - 0xe9, 0x29, 0x15, 0x40, 0xe1, 0x2e, 0x15, 0x80, 0x04, 0xf9, 0xc4, 0x18, - 0x40, 0xe9, 0x27, 0x15, 0x40, 0x43, 0xb3, 0xa1, 0x8f, 0x14, 0x00, 0x43, - 0x27, 0xe0, 0x71, 0x14, 0x00, 0x43, 0x49, 0x1c, 0xd9, 0x14, 0x00, 0x43, - 0x28, 0x1b, 0xa9, 0x14, 0x00, 0x43, 0x10, 0x16, 0xc6, 0x14, 0x00, 0x42, - 0x69, 0x05, 0x07, 0x14, 0x00, 0xb0, 0x16, 0x43, 0xe1, 0x20, 0xf3, 0x14, - 0x00, 0x43, 0x0e, 0x2f, 0x52, 0x14, 0x00, 0xf7, 0x1d, 0x14, 0x00, 0x43, - 0xb9, 0x52, 0x2c, 0x15, 0x40, 0x42, 0x69, 0x05, 0x35, 0x14, 0x00, 0x43, - 0xe7, 0x18, 0x48, 0x14, 0x40, 0xe1, 0x17, 0x14, 0x80, 0xb0, 0x04, 0xe5, - 0x0c, 0x14, 0x80, 0x59, 0xe9, 0x0e, 0x14, 0x80, 0x50, 0xef, 0x12, 0x14, - 0xc0, 0x00, 0xef, 0x14, 0x14, 0xc0, 0x00, 0x08, 0xb2, 0xc2, 0x01, 0xff, - 0x48, 0x9a, 0xc3, 0x7e, 0x16, 0x00, 0x42, 0x53, 0x00, 0x9f, 0x15, 0xc0, - 0x00, 0xe1, 0x9e, 0x15, 0x00, 0xe5, 0x9b, 0x15, 0x00, 0xe9, 0x9c, 0x15, - 0x00, 0xef, 0x9d, 0x15, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x7c, 0x16, 0x80, - 0x18, 0x42, 0x27, 0x01, 0x77, 0x16, 0x00, 0xe9, 0x78, 0x16, 0x80, 0x09, - 0xef, 0x7a, 0x16, 0xc0, 0x00, 0xef, 0x7b, 0x16, 0x40, 0xe9, 0x79, 0x16, - 0x40, 0xe1, 0x7d, 0x16, 0x40, 0xe9, 0x10, 0x14, 0x40, 0x02, 0x60, 0x01, - 0x01, 0xff, 0x06, 0x1f, 0x9b, 0x06, 0x45, 0x25, 0xc1, 0xdd, 0x18, 0x40, - 0x02, 0x3a, 0xec, 0x9f, 0x03, 0x44, 0x9e, 0xec, 0x5c, 0x15, 0x00, 0x02, - 0xed, 0x0a, 0xf5, 0x02, 0xec, 0xeb, 0x14, 0x80, 0xb7, 0x02, 0xed, 0xbc, - 0x14, 0x80, 0x8f, 0x02, 0x02, 0xa8, 0x01, 0xfd, 0x01, 0xf0, 0x4a, 0x14, - 0x80, 0xd5, 0x01, 0xf2, 0x51, 0x15, 0x80, 0xb9, 0x01, 0xb3, 0x72, 0xb4, - 0x48, 0xb7, 0x27, 0xf9, 0x40, 0x15, 0xc0, 0x00, 0xb7, 0x01, 0xff, 0xe1, - 0x3a, 0x15, 0x80, 0x16, 0xe5, 0x30, 0x15, 0x00, 0xe9, 0x32, 0x15, 0x80, - 0x09, 0xef, 0x36, 0x15, 0xc0, 0x00, 0xef, 0x38, 0x15, 0x40, 0xe9, 0x34, - 0x15, 0x40, 0xe1, 0x3c, 0x15, 0x40, 0xe1, 0x18, 0x14, 0x80, 0x16, 0xe5, - 0x0d, 0x14, 0x00, 0xe9, 0x0f, 0x14, 0x80, 0x09, 0xef, 0x13, 0x14, 0xc0, - 0x00, 0xef, 0x15, 0x14, 0x40, 0xe9, 0x11, 0x14, 0x40, 0xe1, 0x1a, 0x14, - 0x40, 0x44, 0x2a, 0xed, 0x69, 0x15, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x62, - 0x14, 0x80, 0x16, 0xe5, 0x58, 0x14, 0x00, 0xe9, 0x5a, 0x14, 0x80, 0x09, - 0xef, 0x5e, 0x14, 0xc0, 0x00, 0xef, 0x60, 0x14, 0x40, 0xe9, 0x5c, 0x14, - 0x40, 0xe1, 0x64, 0x14, 0x40, 0x02, 0x36, 0x1a, 0x22, 0xb7, 0x01, 0xff, - 0xe1, 0x01, 0x15, 0x80, 0x16, 0xe5, 0xf7, 0x14, 0x00, 0xe9, 0xf9, 0x14, - 0x80, 0x09, 0xef, 0xfd, 0x14, 0xc0, 0x00, 0xef, 0xff, 0x14, 0x40, 0xe9, - 0xfb, 0x14, 0x40, 0xe1, 0x03, 0x15, 0x40, 0xe1, 0x22, 0x15, 0x80, 0x16, - 0xe5, 0x18, 0x15, 0x00, 0xe9, 0x1a, 0x15, 0x80, 0x09, 0xef, 0x1e, 0x15, - 0xc0, 0x00, 0xef, 0x20, 0x15, 0x40, 0xe9, 0x1c, 0x15, 0x40, 0xe1, 0x24, - 0x15, 0x40, 0xe1, 0x8d, 0x15, 0x00, 0xe5, 0x8a, 0x15, 0x00, 0xe9, 0x8b, - 0x15, 0x00, 0xef, 0x8c, 0x15, 0x00, 0x43, 0xe7, 0x18, 0x4f, 0x15, 0x40, - 0xb7, 0x01, 0xff, 0xe1, 0x45, 0x14, 0x80, 0x16, 0xe5, 0x3b, 0x14, 0x00, - 0xe9, 0x3d, 0x14, 0x80, 0x09, 0xef, 0x41, 0x14, 0xc0, 0x00, 0xef, 0x43, - 0x14, 0x40, 0xe9, 0x3f, 0x14, 0x40, 0xe1, 0x47, 0x14, 0x40, 0xe1, 0xcc, - 0x14, 0x80, 0x04, 0xe5, 0xca, 0x14, 0x40, 0xe1, 0xce, 0x14, 0x40, 0xb7, - 0x01, 0xff, 0xe1, 0xb7, 0x14, 0x80, 0x16, 0xe5, 0xad, 0x14, 0x00, 0xe9, - 0xaf, 0x14, 0x80, 0x09, 0xef, 0xb3, 0x14, 0xc0, 0x00, 0xef, 0xb5, 0x14, - 0x40, 0xe9, 0xb1, 0x14, 0x40, 0xe1, 0xb9, 0x14, 0x40, 0xe1, 0x4d, 0x15, - 0x80, 0x2f, 0xe5, 0x44, 0x15, 0x00, 0xef, 0x4a, 0x15, 0x80, 0x22, 0xb7, - 0x01, 0xff, 0xe1, 0xe7, 0x14, 0x80, 0x16, 0xe5, 0xdd, 0x14, 0x00, 0xe9, - 0xdf, 0x14, 0x80, 0x09, 0xef, 0xe3, 0x14, 0xc0, 0x00, 0xef, 0xe5, 0x14, - 0x40, 0xe9, 0xe1, 0x14, 0x40, 0xe1, 0xe9, 0x14, 0x40, 0xef, 0xe1, 0x18, - 0x40, 0xe1, 0xe2, 0x18, 0x40, 0xe1, 0x7f, 0x14, 0x80, 0x16, 0xe5, 0x75, - 0x14, 0x00, 0xe9, 0x77, 0x14, 0x80, 0x09, 0xef, 0x7b, 0x14, 0xc0, 0x00, - 0xef, 0x7d, 0x14, 0x40, 0xe9, 0x79, 0x14, 0x40, 0xe1, 0x81, 0x14, 0x40, - 0xe1, 0x9d, 0x14, 0x80, 0x16, 0xe5, 0x93, 0x14, 0x00, 0xe9, 0x95, 0x14, - 0x80, 0x09, 0xef, 0x99, 0x14, 0xc0, 0x00, 0xef, 0x9b, 0x14, 0x40, 0xe9, - 0x97, 0x14, 0x40, 0xe1, 0x9f, 0x14, 0x40, 0xe1, 0x19, 0x14, 0x00, 0xf9, - 0xb3, 0x18, 0x40, 0xe1, 0x55, 0x14, 0x80, 0xfc, 0x01, 0xe5, 0x4c, 0x14, - 0x00, 0xe8, 0x6a, 0x15, 0x80, 0x9d, 0x01, 0xe9, 0x4e, 0x14, 0x80, 0x93, - 0x01, 0x02, 0xf1, 0x33, 0x74, 0xef, 0x50, 0x14, 0x80, 0x6b, 0xb4, 0x34, - 0xb7, 0x13, 0xb9, 0x01, 0xff, 0xe1, 0x73, 0x15, 0x00, 0xe5, 0x70, 0x15, - 0x00, 0xe9, 0x71, 0x15, 0x00, 0xef, 0x72, 0x15, 0x40, 0xe1, 0x61, 0x14, - 0x80, 0x16, 0xe5, 0x57, 0x14, 0x00, 0xe9, 0x59, 0x14, 0x80, 0x09, 0xef, - 0x5d, 0x14, 0xc0, 0x00, 0xef, 0x5f, 0x14, 0x40, 0xe9, 0x5b, 0x14, 0x40, - 0xe1, 0x63, 0x14, 0x40, 0xe1, 0x6a, 0x14, 0x00, 0xe5, 0x67, 0x14, 0x00, - 0xe8, 0x6f, 0x15, 0x80, 0x08, 0xe9, 0x68, 0x14, 0x00, 0xef, 0x69, 0x14, - 0x40, 0xe1, 0x6e, 0x15, 0x80, 0x17, 0xe5, 0x6b, 0x15, 0x00, 0xe9, 0x6c, - 0x15, 0x00, 0xef, 0x6d, 0x15, 0x80, 0x06, 0x42, 0x15, 0x01, 0xe5, 0x18, - 0x40, 0xef, 0xe6, 0x18, 0x40, 0xe1, 0xe7, 0x18, 0x40, 0xef, 0x51, 0x14, - 0x40, 0xe1, 0x89, 0x15, 0x00, 0xe5, 0x86, 0x15, 0x00, 0xe9, 0x87, 0x15, - 0x00, 0xef, 0x88, 0x15, 0x80, 0x06, 0x42, 0x15, 0x01, 0xe8, 0x18, 0x40, - 0xef, 0xe9, 0x18, 0x40, 0xe9, 0x4f, 0x14, 0x40, 0x48, 0x32, 0xc0, 0xae, - 0x15, 0x80, 0x2f, 0xe1, 0x66, 0x15, 0x80, 0x26, 0xe5, 0x5e, 0x15, 0x00, - 0xe9, 0x60, 0x15, 0x80, 0x19, 0xef, 0x64, 0x15, 0x80, 0x10, 0xb7, 0x01, - 0xff, 0xe1, 0xe4, 0x18, 0x80, 0x04, 0xe5, 0xe3, 0x18, 0x40, 0xe1, 0x68, - 0x15, 0x40, 0xef, 0x65, 0x15, 0x40, 0xe9, 0x62, 0x15, 0x40, 0xe1, 0x67, - 0x15, 0x40, 0xe1, 0xac, 0x15, 0x80, 0x16, 0xe5, 0xa7, 0x15, 0x00, 0xe9, - 0xa8, 0x15, 0x80, 0x09, 0xef, 0xaa, 0x15, 0xc0, 0x00, 0xef, 0xab, 0x15, - 0x40, 0xe9, 0xa9, 0x15, 0x40, 0xe1, 0xad, 0x15, 0x40, 0xe1, 0x56, 0x14, - 0x80, 0x04, 0xf9, 0xb7, 0x18, 0x40, 0xe9, 0x4d, 0x14, 0x40, 0xe1, 0xf4, - 0x14, 0x80, 0xbe, 0x01, 0xe5, 0xed, 0x14, 0x00, 0xe8, 0x25, 0x15, 0x80, - 0x68, 0xe9, 0xef, 0x14, 0x80, 0x5f, 0xef, 0xf1, 0x14, 0x80, 0x36, 0xb0, - 0x24, 0xf7, 0x07, 0x15, 0xc0, 0x00, 0xe1, 0x00, 0x15, 0x80, 0x16, 0xe5, - 0xf6, 0x14, 0x00, 0xe9, 0xf8, 0x14, 0x80, 0x09, 0xef, 0xfc, 0x14, 0xc0, - 0x00, 0xef, 0xfe, 0x14, 0x40, 0xe9, 0xfa, 0x14, 0x40, 0xe1, 0x02, 0x15, - 0x40, 0xe1, 0xbf, 0x1a, 0x01, 0xe5, 0xbc, 0x1a, 0x01, 0xe9, 0xbd, 0x1a, - 0x01, 0xef, 0xbe, 0x1a, 0x41, 0xef, 0xf2, 0x14, 0x00, 0x0c, 0xbd, 0x94, - 0x04, 0xf9, 0xbe, 0x18, 0x40, 0x42, 0xc9, 0x09, 0x88, 0x14, 0x00, 0x42, - 0x4e, 0x00, 0x85, 0x14, 0x00, 0x42, 0xec, 0x18, 0x86, 0x14, 0x00, 0x42, - 0x5c, 0x28, 0x87, 0x14, 0x40, 0xe9, 0xf0, 0x14, 0x40, 0xe1, 0x15, 0x15, - 0x80, 0x40, 0xe5, 0x10, 0x15, 0x00, 0xe9, 0x11, 0x15, 0x80, 0x33, 0xef, - 0x13, 0x15, 0x80, 0x26, 0xb7, 0x01, 0xff, 0xe1, 0x21, 0x15, 0x80, 0x1a, - 0xe5, 0x17, 0x15, 0x00, 0xe9, 0x19, 0x15, 0x80, 0x0d, 0xef, 0x1d, 0x15, - 0xc0, 0x00, 0xef, 0x1f, 0x15, 0x00, 0xf9, 0xc2, 0x18, 0x40, 0xe9, 0x1b, - 0x15, 0x40, 0xe1, 0x23, 0x15, 0x40, 0xef, 0x14, 0x15, 0x00, 0xf9, 0xc0, - 0x18, 0x40, 0xe9, 0x12, 0x15, 0x40, 0xe1, 0x16, 0x15, 0x00, 0xf9, 0xc1, - 0x18, 0x40, 0xe1, 0xf5, 0x14, 0x80, 0x5f, 0xf9, 0xbf, 0x18, 0xc0, 0x00, - 0x04, 0x6a, 0xed, 0x01, 0xff, 0xa8, 0x3e, 0xaa, 0x2f, 0xed, 0xbf, 0x14, - 0x00, 0x02, 0xa4, 0x02, 0x0c, 0x42, 0x53, 0x00, 0xa2, 0x14, 0x00, 0x42, - 0xf7, 0x19, 0x41, 0x15, 0x40, 0xe1, 0x9a, 0x15, 0x00, 0xe5, 0x97, 0x15, - 0x00, 0xe9, 0x98, 0x15, 0x00, 0xef, 0x99, 0x15, 0x80, 0x06, 0x42, 0x15, - 0x01, 0xea, 0x18, 0x40, 0xef, 0xeb, 0x18, 0x40, 0xe9, 0x1a, 0x16, 0x00, - 0xf5, 0x15, 0x16, 0xc0, 0x00, 0xf5, 0xf1, 0x18, 0x40, 0xe1, 0xc3, 0x15, - 0x00, 0xe5, 0xc0, 0x15, 0x00, 0xe9, 0xc1, 0x15, 0x00, 0xef, 0xc2, 0x15, - 0xc0, 0x00, 0xef, 0xec, 0x18, 0x40, 0xe9, 0xee, 0x14, 0x40, 0x07, 0xf4, - 0xca, 0x4c, 0xe1, 0x4b, 0x15, 0x80, 0x3a, 0xe5, 0x42, 0x15, 0x00, 0xe9, - 0x46, 0x15, 0x80, 0x2d, 0xef, 0x48, 0x15, 0x80, 0x24, 0xb7, 0x01, 0xff, - 0xe1, 0xd3, 0x18, 0x80, 0x18, 0x42, 0x27, 0x01, 0xce, 0x18, 0x00, 0xe9, - 0xcf, 0x18, 0x80, 0x09, 0xef, 0xd1, 0x18, 0xc0, 0x00, 0xef, 0xd2, 0x18, - 0x40, 0xe9, 0xd0, 0x18, 0x40, 0xe1, 0x4e, 0x15, 0x40, 0xef, 0x49, 0x15, - 0x40, 0xe9, 0x47, 0x15, 0x40, 0xe1, 0x4c, 0x15, 0x80, 0x04, 0xf9, 0xc5, - 0x18, 0x40, 0xe9, 0x45, 0x15, 0x40, 0xe5, 0x43, 0x15, 0x00, 0x42, 0x15, - 0x01, 0xe0, 0x18, 0x40, 0xe1, 0x83, 0x15, 0x80, 0x12, 0xe9, 0x7f, 0x15, - 0x80, 0x09, 0xef, 0x81, 0x15, 0xc0, 0x00, 0xef, 0x82, 0x15, 0x40, 0xe9, - 0x80, 0x15, 0x40, 0xe1, 0x84, 0x15, 0x80, 0x04, 0xe9, 0x6f, 0x16, 0x40, - 0xe9, 0x7e, 0x15, 0x40, 0xe1, 0x38, 0x14, 0x80, 0x40, 0xe5, 0x2f, 0x14, - 0x00, 0xe9, 0x31, 0x14, 0x80, 0x33, 0xef, 0x33, 0x14, 0x80, 0x26, 0xb7, - 0x01, 0xff, 0xe1, 0x44, 0x14, 0x80, 0x1a, 0xe5, 0x3a, 0x14, 0x00, 0xe9, - 0x3c, 0x14, 0x80, 0x0d, 0xef, 0x40, 0x14, 0xc0, 0x00, 0xef, 0x42, 0x14, - 0x00, 0xf9, 0xb6, 0x18, 0x40, 0xe9, 0x3e, 0x14, 0x40, 0xe1, 0x46, 0x14, - 0x40, 0xef, 0x34, 0x14, 0x00, 0xf9, 0xb4, 0x18, 0x40, 0xe9, 0x32, 0x14, - 0x40, 0xe1, 0x39, 0x14, 0x80, 0x04, 0xf9, 0xb5, 0x18, 0x40, 0xe9, 0x30, - 0x14, 0x40, 0x07, 0x70, 0xcf, 0x0c, 0xee, 0x2d, 0x14, 0x00, 0xef, 0x06, - 0x14, 0x00, 0xf9, 0xb0, 0x18, 0x40, 0xe3, 0xd7, 0x18, 0x00, 0xeb, 0xd6, - 0x18, 0x00, 0xed, 0xd8, 0x18, 0x00, 0xee, 0xd9, 0x18, 0x80, 0x11, 0xf0, - 0xd4, 0x18, 0x00, 0xf3, 0xda, 0x18, 0x80, 0x04, 0xf4, 0xd5, 0x18, 0x40, - 0xe8, 0xdb, 0x18, 0x40, 0xb7, 0x01, 0xff, 0xe9, 0xc7, 0x18, 0x80, 0x09, - 0xef, 0xcb, 0x18, 0xc0, 0x00, 0xef, 0xcd, 0x18, 0x40, 0xe9, 0xc9, 0x18, - 0x40, 0x08, 0x32, 0xc0, 0xf3, 0x02, 0xe1, 0xc7, 0x14, 0x80, 0xbd, 0x01, - 0xe5, 0xc0, 0x14, 0x00, 0xe7, 0x95, 0x15, 0x80, 0x8f, 0x01, 0xe8, 0xd2, - 0x14, 0x00, 0xe9, 0xc2, 0x14, 0x80, 0x81, 0x01, 0x42, 0x1d, 0x01, 0x96, - 0x15, 0x80, 0x5f, 0xef, 0xc4, 0x14, 0x80, 0x52, 0x04, 0x8a, 0xef, 0x22, - 0xb7, 0x01, 0xff, 0xe1, 0xcb, 0x14, 0x80, 0x16, 0xe5, 0xc9, 0x14, 0x00, - 0xe9, 0xc6, 0x18, 0x80, 0x09, 0xef, 0xca, 0x18, 0xc0, 0x00, 0xef, 0xcc, - 0x18, 0x40, 0xe9, 0xc8, 0x18, 0x40, 0xe1, 0xcd, 0x14, 0x40, 0x44, 0x46, - 0xed, 0x7b, 0x15, 0x80, 0x06, 0x44, 0xb5, 0x4f, 0x7c, 0x15, 0x40, 0xe1, - 0x79, 0x15, 0x80, 0x16, 0xe5, 0x74, 0x15, 0x00, 0xe9, 0x75, 0x15, 0x80, - 0x09, 0xef, 0x77, 0x15, 0xc0, 0x00, 0xef, 0x78, 0x15, 0x40, 0xe9, 0x76, - 0x15, 0x40, 0xe1, 0x7a, 0x15, 0x40, 0xef, 0xc5, 0x14, 0x00, 0xf9, 0xbb, - 0x18, 0x40, 0xe1, 0x75, 0x16, 0x80, 0x12, 0xe9, 0x71, 0x16, 0x80, 0x09, - 0xef, 0x73, 0x16, 0xc0, 0x00, 0xef, 0x74, 0x16, 0x40, 0xe9, 0x72, 0x16, - 0x40, 0xe1, 0x76, 0x16, 0x40, 0xe9, 0xc3, 0x14, 0x40, 0xe1, 0x93, 0x15, - 0x80, 0x12, 0xe9, 0x8f, 0x15, 0x80, 0x09, 0xef, 0x91, 0x15, 0xc0, 0x00, - 0xef, 0x92, 0x15, 0x40, 0xe9, 0x90, 0x15, 0x40, 0xe1, 0x94, 0x15, 0x80, - 0x04, 0xe9, 0x70, 0x16, 0x40, 0xe9, 0x8e, 0x15, 0x40, 0xe1, 0xc8, 0x14, - 0x80, 0xa6, 0x01, 0x06, 0xe2, 0xdc, 0x45, 0x07, 0xd0, 0xd3, 0x04, 0xf9, - 0xbc, 0x18, 0x40, 0xa8, 0x20, 0x03, 0x14, 0x5c, 0x01, 0xff, 0xe1, 0xba, - 0x1a, 0x81, 0x12, 0xe9, 0xb6, 0x1a, 0x81, 0x09, 0xef, 0xb8, 0x1a, 0xc1, - 0x00, 0xef, 0xb9, 0x1a, 0x41, 0xe9, 0xb7, 0x1a, 0x41, 0xe1, 0xbb, 0x1a, - 0x41, 0xe1, 0xb4, 0x1a, 0x81, 0x12, 0xe9, 0xb0, 0x1a, 0x81, 0x09, 0xef, - 0xb2, 0x1a, 0xc1, 0x00, 0xef, 0xb3, 0x1a, 0x41, 0xe9, 0xb1, 0x1a, 0x41, - 0xe1, 0xb5, 0x1a, 0x41, 0x44, 0x3a, 0xec, 0xa0, 0x14, 0x00, 0x44, 0xb6, - 0xed, 0x82, 0x14, 0x00, 0x44, 0x0e, 0xee, 0xba, 0x14, 0x00, 0x44, 0x6a, - 0xee, 0xcf, 0x14, 0x00, 0xb3, 0x1a, 0x44, 0x07, 0xe9, 0x65, 0x14, 0x00, - 0xb7, 0x06, 0x44, 0xfe, 0xef, 0x3d, 0x15, 0x40, 0x42, 0x31, 0x12, 0x1b, - 0x14, 0x00, 0x42, 0x69, 0x05, 0x16, 0x14, 0x40, 0x42, 0x61, 0x1f, 0x0b, - 0x15, 0x00, 0x43, 0x3a, 0xec, 0x0f, 0x15, 0x00, 0x42, 0xed, 0x0a, 0x0a, - 0x15, 0x80, 0x12, 0x43, 0x51, 0x02, 0x0c, 0x15, 0x00, 0x43, 0xed, 0x01, - 0x0d, 0x15, 0x00, 0x43, 0xe7, 0x18, 0x04, 0x15, 0x40, 0xe1, 0x0e, 0x15, - 0x40, 0xe9, 0xc1, 0x14, 0x40, 0xe5, 0x5f, 0x15, 0x00, 0xe9, 0x61, 0x15, - 0xc0, 0x00, 0xe9, 0x63, 0x15, 0x40, 0xe1, 0xaa, 0x14, 0x80, 0x51, 0xe5, - 0xa3, 0x14, 0x80, 0x3f, 0xe8, 0xbd, 0x14, 0x00, 0xe9, 0xa5, 0x14, 0x80, - 0x32, 0xef, 0xa7, 0x14, 0x80, 0x22, 0xb7, 0x01, 0xff, 0xe1, 0xb6, 0x14, - 0x80, 0x16, 0xe5, 0xac, 0x14, 0x00, 0xe9, 0xae, 0x14, 0x80, 0x09, 0xef, - 0xb2, 0x14, 0xc0, 0x00, 0xef, 0xb4, 0x14, 0x40, 0xe9, 0xb0, 0x14, 0x40, - 0xe1, 0xb8, 0x14, 0x40, 0xef, 0xa8, 0x14, 0xc0, 0x00, 0x4a, 0x87, 0xae, - 0x09, 0x15, 0x40, 0xe9, 0xa6, 0x14, 0x40, 0x05, 0x7e, 0x32, 0x01, 0xff, - 0xec, 0xec, 0x14, 0x00, 0xf2, 0x52, 0x15, 0x40, 0xe1, 0xab, 0x14, 0x80, - 0x04, 0xf9, 0xba, 0x18, 0x40, 0xe9, 0xa4, 0x14, 0x40, 0xe1, 0xda, 0x14, - 0x80, 0x58, 0xe5, 0xd3, 0x14, 0x00, 0xe8, 0xa6, 0x15, 0x80, 0x34, 0xe9, - 0xd5, 0x14, 0x80, 0x2b, 0xef, 0xd7, 0x14, 0x80, 0x22, 0xb7, 0x01, 0xff, - 0xe1, 0xe6, 0x14, 0x80, 0x16, 0xe5, 0xdc, 0x14, 0x00, 0xe9, 0xde, 0x14, - 0x80, 0x09, 0xef, 0xe2, 0x14, 0xc0, 0x00, 0xef, 0xe4, 0x14, 0x40, 0xe9, - 0xe0, 0x14, 0x40, 0xe1, 0xe8, 0x14, 0x40, 0xef, 0xd8, 0x14, 0x40, 0xe9, - 0xd6, 0x14, 0x40, 0xe1, 0xa4, 0x15, 0x80, 0x12, 0xe9, 0xa0, 0x15, 0x80, - 0x09, 0xef, 0xa2, 0x15, 0xc0, 0x00, 0xef, 0xa3, 0x15, 0x40, 0xe9, 0xa1, - 0x15, 0x40, 0xe1, 0xa5, 0x15, 0x40, 0xe1, 0xdb, 0x14, 0x80, 0x04, 0xf9, - 0xbd, 0x18, 0x40, 0xe9, 0xd4, 0x14, 0x40, 0xe1, 0x72, 0x14, 0x80, 0x3e, - 0xe5, 0x6b, 0x14, 0x00, 0xe9, 0x6d, 0x14, 0x80, 0x31, 0xef, 0x6f, 0x14, - 0x80, 0x28, 0xf7, 0x84, 0x14, 0xc0, 0x00, 0xe1, 0x7e, 0x14, 0x80, 0x16, - 0xe5, 0x74, 0x14, 0x00, 0xe9, 0x76, 0x14, 0x80, 0x09, 0xef, 0x7a, 0x14, - 0xc0, 0x00, 0xef, 0x7c, 0x14, 0x40, 0xe9, 0x78, 0x14, 0x40, 0xe1, 0x80, - 0x14, 0x00, 0xf9, 0xb9, 0x18, 0x40, 0xef, 0x70, 0x14, 0x40, 0xe9, 0x6e, - 0x14, 0x40, 0xe1, 0x73, 0x14, 0x80, 0x04, 0xf9, 0xb8, 0x18, 0x40, 0xe9, - 0x6c, 0x14, 0x40, 0xe9, 0x04, 0x14, 0x00, 0xee, 0x2c, 0x14, 0x40, 0xeb, - 0x7d, 0x15, 0x00, 0x45, 0x1b, 0x62, 0x00, 0x14, 0x40, 0xe1, 0x59, 0x15, - 0x80, 0x8a, 0x01, 0xe5, 0x53, 0x15, 0x00, 0xe9, 0x55, 0x15, 0x80, 0x15, - 0xef, 0x57, 0x15, 0x80, 0x0c, 0x48, 0x16, 0x16, 0x6e, 0x16, 0x00, 0x43, - 0xe7, 0x18, 0x5b, 0x15, 0x40, 0xef, 0x58, 0x15, 0x40, 0xe9, 0x56, 0x15, - 0x00, 0x04, 0x3b, 0x06, 0x01, 0xff, 0x45, 0x29, 0x38, 0x1f, 0x14, 0x00, - 0x50, 0xaa, 0x5f, 0x21, 0x14, 0x00, 0x02, 0x3b, 0x01, 0x3d, 0x45, 0x8d, - 0x22, 0x20, 0x14, 0x00, 0x4a, 0xb1, 0x44, 0x27, 0x14, 0x00, 0x44, 0xb7, - 0x27, 0x29, 0x14, 0x00, 0xb2, 0x14, 0xb3, 0x06, 0x4d, 0x88, 0x87, 0x22, - 0x14, 0x40, 0x56, 0x75, 0x33, 0x28, 0x14, 0x00, 0x49, 0x79, 0xb9, 0xde, - 0x18, 0x40, 0x49, 0x76, 0xb3, 0xdf, 0x18, 0x00, 0xa9, 0x01, 0xff, 0x4d, - 0xec, 0x70, 0x23, 0x14, 0x00, 0x42, 0x1d, 0x01, 0x24, 0x14, 0x40, 0x05, - 0x3d, 0x01, 0x06, 0x47, 0x22, 0x38, 0x2a, 0x14, 0x40, 0x45, 0x29, 0x38, - 0x25, 0x14, 0x00, 0x56, 0x77, 0x36, 0x26, 0x14, 0x40, 0xe1, 0x5a, 0x15, - 0xc0, 0x00, 0xe9, 0x54, 0x15, 0x40, 0x48, 0x22, 0xc1, 0xdc, 0x18, 0x00, - 0xee, 0x2b, 0x14, 0x40, 0xe1, 0x90, 0x14, 0x80, 0x3e, 0xe5, 0x89, 0x14, - 0x00, 0x47, 0xba, 0xce, 0x6d, 0x16, 0x00, 0xe9, 0x8b, 0x14, 0x80, 0x2b, - 0xef, 0x8d, 0x14, 0x80, 0x22, 0xb7, 0x01, 0xff, 0xe1, 0x9c, 0x14, 0x80, - 0x16, 0xe5, 0x92, 0x14, 0x00, 0xe9, 0x94, 0x14, 0x80, 0x09, 0xef, 0x98, - 0x14, 0xc0, 0x00, 0xef, 0x9a, 0x14, 0x40, 0xe9, 0x96, 0x14, 0x40, 0xe1, - 0x9e, 0x14, 0x40, 0xef, 0x8e, 0x14, 0x40, 0xe9, 0x8c, 0x14, 0x40, 0xe1, - 0x91, 0x14, 0x80, 0xd6, 0x06, 0x06, 0x9b, 0x68, 0x01, 0xff, 0x02, 0x1e, - 0x14, 0xb3, 0x06, 0xa4, 0xe0, 0x05, 0x42, 0x27, 0x01, 0x08, 0x14, 0x00, - 0xa7, 0x93, 0x05, 0xe8, 0x4b, 0x14, 0x80, 0xe7, 0x04, 0xe9, 0x09, 0x14, - 0x80, 0xdb, 0x04, 0xaa, 0x9e, 0x04, 0xab, 0xe2, 0x03, 0xac, 0xab, 0x03, - 0xad, 0x8f, 0x03, 0xae, 0xef, 0x02, 0xf0, 0xee, 0x15, 0x80, 0xd0, 0x02, - 0xb2, 0xb4, 0x02, 0xb3, 0xfa, 0x01, 0xb4, 0x54, 0xb7, 0x39, 0xb9, 0x1e, - 0xfa, 0x46, 0x16, 0xc0, 0x00, 0xe1, 0x45, 0x16, 0x00, 0xe5, 0x42, 0x16, - 0x80, 0x0c, 0xe9, 0x44, 0x16, 0x00, 0xef, 0x41, 0x16, 0x00, 0xf5, 0x40, - 0x16, 0x40, 0xe5, 0x43, 0x16, 0x40, 0xe1, 0x13, 0x16, 0x00, 0xe5, 0x10, - 0x16, 0x80, 0x0c, 0xe9, 0x12, 0x16, 0x00, 0xef, 0x0f, 0x16, 0x00, 0xf5, - 0x0e, 0x16, 0x40, 0xe5, 0x11, 0x16, 0x40, 0xe1, 0xd5, 0x15, 0x00, 0xe5, - 0xd2, 0x15, 0x80, 0x0c, 0xe9, 0xd4, 0x15, 0x00, 0xef, 0xd1, 0x15, 0x00, - 0xf5, 0xd0, 0x15, 0x40, 0xe5, 0xd3, 0x15, 0x40, 0xa8, 0x88, 0x01, 0xac, - 0x52, 0xb3, 0x37, 0xb4, 0x01, 0xff, 0xe1, 0xe7, 0x15, 0x00, 0xe5, 0xe4, - 0x15, 0x80, 0x27, 0xe9, 0xe6, 0x15, 0x00, 0xef, 0xe3, 0x15, 0x00, 0xb3, - 0x04, 0xf5, 0xe2, 0x15, 0x40, 0xe1, 0x6c, 0x16, 0x00, 0xe5, 0x69, 0x16, - 0x80, 0x0c, 0xe9, 0x6b, 0x16, 0x00, 0xef, 0x68, 0x16, 0x00, 0xf5, 0x67, - 0x16, 0x40, 0xe5, 0x6a, 0x16, 0x40, 0xe5, 0xe5, 0x15, 0x40, 0xe1, 0x60, - 0x16, 0x00, 0xe5, 0x5d, 0x16, 0x80, 0x0c, 0xe9, 0x5f, 0x16, 0x00, 0xef, - 0x5c, 0x16, 0x00, 0xf5, 0x5b, 0x16, 0x40, 0xe5, 0x5e, 0x16, 0x40, 0xe1, - 0x3f, 0x16, 0x00, 0xe5, 0x3c, 0x16, 0x80, 0x27, 0xa8, 0x0c, 0xe9, 0x3e, - 0x16, 0x00, 0xef, 0x3b, 0x16, 0x00, 0xf5, 0x3a, 0x16, 0x40, 0xe1, 0x39, - 0x16, 0x00, 0xe5, 0x36, 0x16, 0x80, 0x0c, 0xe9, 0x38, 0x16, 0x00, 0xef, - 0x35, 0x16, 0x00, 0xf5, 0x34, 0x16, 0x40, 0xe5, 0x37, 0x16, 0x40, 0xe5, - 0x3d, 0x16, 0x40, 0xe1, 0xe1, 0x15, 0x00, 0xe5, 0xde, 0x15, 0x80, 0x0c, - 0xe9, 0xe0, 0x15, 0x00, 0xef, 0xdd, 0x15, 0x00, 0xf5, 0xdc, 0x15, 0x40, - 0xe5, 0xdf, 0x15, 0x40, 0xe1, 0x53, 0x16, 0x00, 0xe5, 0x50, 0x16, 0x80, - 0x2a, 0xe8, 0x5a, 0x16, 0x80, 0x0c, 0xe9, 0x52, 0x16, 0x00, 0xef, 0x4f, - 0x16, 0x00, 0xf5, 0x4e, 0x16, 0x40, 0xe1, 0x59, 0x16, 0x00, 0xe5, 0x56, - 0x16, 0x80, 0x0c, 0xe9, 0x58, 0x16, 0x00, 0xef, 0x55, 0x16, 0x00, 0xf5, - 0x54, 0x16, 0x40, 0xe5, 0x57, 0x16, 0x40, 0xe5, 0x51, 0x16, 0x40, 0xe1, - 0xcf, 0x15, 0x00, 0xe5, 0xcc, 0x15, 0x80, 0x0c, 0xe9, 0xce, 0x15, 0x00, - 0xef, 0xcb, 0x15, 0x00, 0xf5, 0xca, 0x15, 0x40, 0xe5, 0xcd, 0x15, 0x40, - 0xe1, 0xed, 0x15, 0x00, 0xe5, 0xea, 0x15, 0x80, 0x0c, 0xe9, 0xec, 0x15, - 0x00, 0xef, 0xe9, 0x15, 0x00, 0xf5, 0xe8, 0x15, 0x40, 0xe5, 0xeb, 0x15, - 0x40, 0xe1, 0x07, 0x16, 0x00, 0xe5, 0x04, 0x16, 0x80, 0x10, 0xe7, 0xd1, - 0x14, 0x00, 0xe9, 0x06, 0x16, 0x00, 0xef, 0x03, 0x16, 0x00, 0xf5, 0x02, - 0x16, 0x40, 0xe5, 0x05, 0x16, 0x40, 0xe1, 0x0d, 0x16, 0x00, 0xe5, 0x0a, - 0x16, 0x80, 0x0c, 0xe9, 0x0c, 0x16, 0x00, 0xef, 0x09, 0x16, 0x00, 0xf5, - 0x08, 0x16, 0x40, 0xe5, 0x0b, 0x16, 0x40, 0xe1, 0x27, 0x16, 0x00, 0xe5, - 0x24, 0x16, 0x80, 0x27, 0xa8, 0x0c, 0xe9, 0x26, 0x16, 0x00, 0xef, 0x23, - 0x16, 0x00, 0xf5, 0x22, 0x16, 0x40, 0xe1, 0x33, 0x16, 0x00, 0xe5, 0x30, - 0x16, 0x80, 0x0c, 0xe9, 0x32, 0x16, 0x00, 0xef, 0x2f, 0x16, 0x00, 0xf5, - 0x2e, 0x16, 0x40, 0xe5, 0x31, 0x16, 0x40, 0xe5, 0x25, 0x16, 0x40, 0xa8, - 0x1e, 0xeb, 0x01, 0x16, 0xc0, 0x00, 0xe1, 0x00, 0x16, 0x00, 0xe5, 0xfd, - 0x15, 0x80, 0x0c, 0xe9, 0xff, 0x15, 0x00, 0xef, 0xfc, 0x15, 0x00, 0xf5, - 0xfb, 0x15, 0x40, 0xe5, 0xfe, 0x15, 0x40, 0xe1, 0xfa, 0x15, 0x00, 0xe5, - 0xf7, 0x15, 0x80, 0x0c, 0xe9, 0xf9, 0x15, 0x00, 0xef, 0xf6, 0x15, 0x00, - 0xf5, 0xf5, 0x15, 0x40, 0xe5, 0xf8, 0x15, 0x40, 0xe1, 0x1b, 0x16, 0x00, - 0xe5, 0x17, 0x16, 0x80, 0x2d, 0xe9, 0x19, 0x16, 0x00, 0xaa, 0x0e, 0xef, - 0x16, 0x16, 0x00, 0xf5, 0x14, 0x16, 0x00, 0x42, 0xa9, 0x01, 0xf2, 0x18, - 0x40, 0xe1, 0x21, 0x16, 0x00, 0xe5, 0x1e, 0x16, 0x80, 0x0c, 0xe9, 0x20, - 0x16, 0x00, 0xef, 0x1d, 0x16, 0x00, 0xf5, 0x1c, 0x16, 0x40, 0xe5, 0x1f, - 0x16, 0x40, 0xe5, 0x18, 0x16, 0x40, 0x48, 0x22, 0xc6, 0x47, 0x16, 0x40, - 0x42, 0x27, 0x01, 0x36, 0x14, 0x00, 0xe9, 0x37, 0x14, 0x00, 0xb7, 0x01, - 0xff, 0xe1, 0xdb, 0x15, 0x00, 0xe5, 0xd8, 0x15, 0x80, 0x0c, 0xe9, 0xda, - 0x15, 0x00, 0xef, 0xd7, 0x15, 0x00, 0xf5, 0xd6, 0x15, 0x40, 0xe5, 0xd9, - 0x15, 0x40, 0xe1, 0xf4, 0x15, 0x80, 0x3b, 0xe5, 0xf1, 0x15, 0x80, 0x32, - 0xa8, 0x17, 0xe9, 0xf3, 0x15, 0x00, 0xef, 0xf0, 0x15, 0x00, 0xf5, 0xef, - 0x15, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0xf0, 0x18, 0x00, 0xf5, 0xed, 0x18, - 0x40, 0xe1, 0xc9, 0x15, 0x00, 0xe5, 0xc6, 0x15, 0x80, 0x0c, 0xe9, 0xc8, - 0x15, 0x00, 0xef, 0xc5, 0x15, 0x00, 0xf5, 0xc4, 0x15, 0x40, 0xe5, 0xc7, - 0x15, 0x40, 0xe5, 0xf2, 0x15, 0x40, 0xe1, 0xef, 0x18, 0x40, 0xa5, 0x3b, - 0xe9, 0x54, 0x14, 0x00, 0xac, 0x1c, 0xba, 0x01, 0xff, 0xe1, 0x4d, 0x16, - 0x00, 0xe5, 0x4a, 0x16, 0x80, 0x0c, 0xe9, 0x4c, 0x16, 0x00, 0xef, 0x49, - 0x16, 0x00, 0xf5, 0x48, 0x16, 0x40, 0xe5, 0x4b, 0x16, 0x40, 0xe1, 0x2d, - 0x16, 0x00, 0xe5, 0x2a, 0x16, 0x80, 0x0c, 0xe9, 0x2c, 0x16, 0x00, 0xef, - 0x29, 0x16, 0x00, 0xf5, 0x28, 0x16, 0x40, 0xe5, 0x2b, 0x16, 0x40, 0xe5, - 0x53, 0x14, 0x00, 0xae, 0x01, 0xff, 0x45, 0xa5, 0xe2, 0xee, 0x18, 0x00, - 0x45, 0x23, 0x05, 0xf5, 0x18, 0x40, 0xe1, 0x66, 0x16, 0x00, 0xe5, 0x63, - 0x16, 0x80, 0x0c, 0xe9, 0x65, 0x16, 0x00, 0xef, 0x62, 0x16, 0x00, 0xf5, - 0x61, 0x16, 0x40, 0xe5, 0x64, 0x16, 0x40, 0xe9, 0x8a, 0x14, 0x40, 0x0b, - 0x63, 0x99, 0x58, 0x4b, 0x1b, 0x9b, 0x3f, 0x15, 0x00, 0x09, 0xce, 0xb8, - 0x01, 0xff, 0xe1, 0xb3, 0x15, 0x00, 0xe5, 0xb0, 0x15, 0x00, 0xe9, 0xb1, - 0x15, 0x00, 0xab, 0x2f, 0xae, 0x1d, 0xef, 0xb2, 0x15, 0x00, 0xf3, 0x08, - 0x15, 0x00, 0xf7, 0x7f, 0x16, 0xc0, 0x00, 0xe1, 0xb7, 0x15, 0x00, 0xe5, - 0xb4, 0x15, 0x00, 0xe9, 0xb5, 0x15, 0x00, 0xef, 0xb6, 0x15, 0x40, 0xe1, - 0xbb, 0x15, 0x00, 0xe5, 0xb8, 0x15, 0x00, 0xe9, 0xb9, 0x15, 0x00, 0xef, - 0xba, 0x15, 0x40, 0xe1, 0xbf, 0x15, 0x00, 0xe5, 0xbc, 0x15, 0x00, 0xe9, - 0xbd, 0x15, 0x00, 0xef, 0xbe, 0x15, 0x40, 0xec, 0xf3, 0x18, 0x00, 0xf2, - 0xf4, 0x18, 0x40, 0xe1, 0x0b, 0x14, 0x80, 0x1f, 0xe9, 0x1c, 0x14, 0x80, - 0x14, 0xee, 0x2e, 0x14, 0x00, 0x0a, 0x81, 0xaf, 0x04, 0xf9, 0xb1, 0x18, - 0x40, 0xed, 0xbe, 0x14, 0x00, 0xf3, 0x06, 0x15, 0x40, 0x47, 0x78, 0xd4, - 0xaf, 0x15, 0x40, 0xe9, 0x02, 0x14, 0x00, 0xf9, 0xb2, 0x18, 0x40, 0x43, - 0xdc, 0x01, 0xf7, 0xf4, 0x81, 0x06, 0x44, 0x45, 0x2f, 0xd5, 0xf3, 0x41, - 0x4b, 0x14, 0x96, 0xf8, 0xf4, 0x41, 0x45, 0xad, 0x7e, 0xc5, 0xf4, 0x01, - 0x49, 0xc5, 0xb8, 0x19, 0xf9, 0x41, 0x45, 0xe3, 0xe0, 0x06, 0x21, 0x00, - 0x45, 0x1b, 0xd8, 0x24, 0x26, 0x40, 0xa1, 0xe6, 0x55, 0xa5, 0xc2, 0x4f, - 0x09, 0xf1, 0xb6, 0xd6, 0x4a, 0xa9, 0xf8, 0x49, 0xac, 0x8c, 0x34, 0xaf, - 0xdf, 0x22, 0xb2, 0xe9, 0x12, 0xb5, 0xc0, 0x0f, 0xb9, 0x01, 0xff, 0x4d, - 0x54, 0x87, 0xff, 0xfe, 0x00, 0x17, 0x38, 0x31, 0x01, 0xff, 0xa1, 0xba, - 0x0d, 0x02, 0x1e, 0x14, 0x80, 0x0d, 0xa4, 0xd9, 0x0b, 0xa5, 0xa0, 0x0b, - 0xa6, 0xf4, 0x09, 0xa7, 0x91, 0x09, 0xa9, 0xcc, 0x08, 0xab, 0xf4, 0x06, - 0xac, 0xbe, 0x06, 0xad, 0xc9, 0x05, 0x44, 0x1e, 0xee, 0x40, 0xd0, 0x01, - 0xaf, 0xfb, 0x04, 0xb0, 0xd4, 0x03, 0xb2, 0xc5, 0x03, 0xb3, 0xa3, 0x02, - 0xb4, 0x8b, 0x01, 0x02, 0xa6, 0x0a, 0x63, 0x4c, 0x1d, 0x95, 0x6a, 0xd0, - 0x01, 0xb9, 0x01, 0xff, 0x02, 0xa0, 0x19, 0x1e, 0xb0, 0x01, 0xff, 0xaf, - 0x06, 0x44, 0x06, 0x87, 0x50, 0xd0, 0x41, 0x46, 0x78, 0xda, 0x0a, 0xd0, - 0x81, 0x06, 0x44, 0x16, 0xef, 0x53, 0xd0, 0x41, 0x46, 0x26, 0xd5, 0x0b, - 0xd0, 0x41, 0x02, 0x92, 0x00, 0x28, 0x04, 0x58, 0x21, 0x01, 0xff, 0x51, - 0xe8, 0x56, 0xd4, 0xd0, 0x01, 0x55, 0x64, 0x39, 0xd6, 0xd0, 0x01, 0x5c, - 0x52, 0x18, 0xd5, 0xd0, 0x01, 0x03, 0x19, 0x01, 0x01, 0xff, 0x55, 0x8a, - 0x3a, 0xd7, 0xd0, 0x01, 0x48, 0x99, 0x33, 0xcd, 0xd0, 0x41, 0x43, 0x36, - 0x6f, 0x7d, 0xd0, 0x01, 0x44, 0xa9, 0x9d, 0x7c, 0xd0, 0x41, 0x04, 0xf6, - 0xee, 0x06, 0x43, 0xb7, 0x52, 0x19, 0xd0, 0x41, 0x80, 0x06, 0x4a, 0x23, - 0xa9, 0x21, 0xd0, 0x41, 0x45, 0x27, 0xd5, 0x06, 0xd0, 0x01, 0x4b, 0x79, - 0x7d, 0x05, 0xd0, 0x01, 0x43, 0x1c, 0x53, 0x58, 0xd0, 0x41, 0xa5, 0x80, - 0x01, 0xa8, 0x52, 0x46, 0xee, 0xd9, 0x27, 0xd0, 0x01, 0xb2, 0x01, 0xff, - 0xa9, 0x37, 0x05, 0xaa, 0xb2, 0x01, 0xff, 0x47, 0x34, 0xd0, 0x6d, 0xd0, - 0x01, 0x02, 0x92, 0x00, 0x14, 0xb0, 0x06, 0x47, 0x44, 0xd3, 0x70, 0xd0, - 0x41, 0x4a, 0x05, 0x9f, 0x6e, 0xd0, 0x01, 0x48, 0x3a, 0xc8, 0x6b, 0xd0, - 0x41, 0xa1, 0x06, 0x43, 0x1c, 0x53, 0x63, 0xd0, 0x41, 0x43, 0x48, 0x1c, - 0x43, 0xd0, 0x01, 0x47, 0x26, 0xa9, 0x36, 0xd0, 0x41, 0xe1, 0x30, 0xd0, - 0x01, 0x46, 0x34, 0xd9, 0x96, 0xd0, 0x01, 0x43, 0x90, 0x04, 0x87, 0xd0, - 0x41, 0xa5, 0x06, 0x43, 0xbc, 0x05, 0x14, 0xd0, 0x41, 0x42, 0x6c, 0x00, - 0x2d, 0xd0, 0x81, 0x06, 0x4d, 0x84, 0x86, 0x79, 0xd0, 0x41, 0x47, 0x5a, - 0xca, 0x78, 0xd0, 0x01, 0x08, 0xea, 0xc8, 0x01, 0xff, 0x42, 0x35, 0x03, - 0x76, 0xd0, 0x01, 0x42, 0xe1, 0x2e, 0x77, 0xd0, 0x41, 0x44, 0x5b, 0x59, - 0x0f, 0xd0, 0x01, 0x45, 0x60, 0x18, 0x31, 0xd0, 0x01, 0x46, 0xa2, 0xdd, - 0x88, 0xd0, 0x41, 0x47, 0x83, 0xcc, 0x1d, 0xd0, 0x01, 0x45, 0xd2, 0xe2, - 0x29, 0xd0, 0x81, 0x8b, 0x01, 0x08, 0x5a, 0xc4, 0x49, 0xb4, 0x2e, 0xb9, - 0x01, 0xff, 0xae, 0x0d, 0x43, 0x60, 0x06, 0x66, 0xd0, 0xc1, 0x00, 0x44, - 0xce, 0xda, 0x08, 0xd0, 0x41, 0x05, 0x15, 0xe1, 0x06, 0x44, 0x39, 0xd1, - 0x13, 0xd0, 0x41, 0x48, 0x25, 0xa9, 0x2a, 0xd0, 0x01, 0x4c, 0x49, 0x90, - 0x2b, 0xd0, 0x01, 0x43, 0x1c, 0x53, 0x65, 0xd0, 0x41, 0x45, 0x79, 0xe1, - 0x7e, 0xd0, 0x81, 0x0c, 0x44, 0x1d, 0x1f, 0xe8, 0xd0, 0x01, 0x4a, 0x97, - 0xad, 0x44, 0xd0, 0x41, 0x49, 0xea, 0xb1, 0x1f, 0xd0, 0x41, 0x46, 0x00, - 0xd7, 0xe2, 0xd0, 0x81, 0x1f, 0x47, 0x83, 0xd3, 0xde, 0xd0, 0xc1, 0x00, - 0x80, 0x01, 0xff, 0x47, 0x94, 0xcd, 0xdf, 0xd0, 0x01, 0xb4, 0x01, 0xff, - 0x49, 0x61, 0xb6, 0xe1, 0xd0, 0x01, 0x47, 0x8e, 0xd2, 0xe0, 0xd0, 0x41, - 0x80, 0x01, 0xff, 0x47, 0x94, 0xcd, 0xe3, 0xd0, 0x01, 0xb4, 0x01, 0xff, - 0x49, 0x61, 0xb6, 0xe5, 0xd0, 0x01, 0x47, 0x8e, 0xd2, 0xe4, 0xd0, 0x41, - 0x44, 0x50, 0x87, 0x69, 0xd0, 0x41, 0x46, 0xe2, 0xd6, 0x3c, 0xd0, 0x01, - 0x44, 0x39, 0xd1, 0x25, 0xd0, 0x41, 0x02, 0x17, 0x00, 0x70, 0xa5, 0x43, - 0x06, 0xbe, 0xd9, 0x33, 0x02, 0x2f, 0x03, 0x01, 0xff, 0x05, 0x3c, 0xc8, - 0x0d, 0xac, 0x01, 0xff, 0xe9, 0x00, 0xd0, 0x01, 0x42, 0x10, 0x00, 0x17, - 0xd0, 0x41, 0x47, 0x34, 0xd0, 0x6c, 0xd0, 0x01, 0xee, 0x39, 0xd0, 0x81, - 0x0c, 0x4b, 0x04, 0x9f, 0x6f, 0xd0, 0x01, 0x47, 0x44, 0xd3, 0x71, 0xd0, - 0x41, 0x44, 0x50, 0x87, 0x5a, 0xd0, 0x41, 0x48, 0x25, 0xa9, 0x26, 0xd0, - 0x01, 0x43, 0x1c, 0x53, 0x59, 0xd0, 0x41, 0x46, 0xa8, 0xda, 0x38, 0xd0, - 0x81, 0x1e, 0x49, 0x11, 0x9f, 0x02, 0xd0, 0x01, 0x03, 0xb9, 0x2c, 0x01, - 0xff, 0x42, 0x6c, 0x00, 0x41, 0xd0, 0x01, 0xb4, 0x01, 0xff, 0xe9, 0x49, - 0xd0, 0x01, 0x49, 0x99, 0xba, 0x4b, 0xd0, 0x41, 0x44, 0x50, 0x87, 0x4d, - 0xd0, 0x41, 0x02, 0x6d, 0x00, 0x06, 0x45, 0x35, 0xe4, 0x1e, 0xd0, 0x41, - 0x07, 0xe2, 0xcb, 0x16, 0x46, 0xcc, 0xda, 0x09, 0xd0, 0xc1, 0x00, 0x80, - 0x01, 0xff, 0x48, 0x25, 0xa9, 0x3e, 0xd0, 0x01, 0x43, 0x1c, 0x53, 0x5e, - 0xd0, 0x41, 0x48, 0x25, 0xa9, 0x3d, 0xd0, 0x01, 0x43, 0x1c, 0x53, 0x5f, - 0xd0, 0x41, 0x06, 0xc0, 0xda, 0x35, 0x45, 0x5c, 0xe5, 0x5b, 0xd0, 0x01, - 0x04, 0xe2, 0xef, 0x11, 0x09, 0x2b, 0xbf, 0x01, 0xff, 0x48, 0x25, 0xa9, - 0x2c, 0xd0, 0x01, 0x43, 0x1c, 0x53, 0x75, 0xd0, 0x41, 0x80, 0x06, 0x4a, - 0x23, 0xa9, 0x20, 0xd0, 0x41, 0x45, 0x27, 0xd5, 0x04, 0xd0, 0x01, 0x4b, - 0x79, 0x7d, 0x03, 0xd0, 0x01, 0x43, 0x1c, 0x53, 0x48, 0xd0, 0x41, 0x48, - 0x25, 0xa9, 0x15, 0xd0, 0x01, 0x43, 0x1c, 0x53, 0x47, 0xd0, 0x41, 0x08, - 0x12, 0xc1, 0x06, 0x4a, 0x69, 0xa9, 0x57, 0xd0, 0x41, 0x05, 0x24, 0xe1, - 0x58, 0x4e, 0x42, 0x75, 0xa4, 0xd0, 0x01, 0x4d, 0x5e, 0x83, 0xaa, 0xd0, - 0x01, 0xb0, 0x29, 0xb4, 0x06, 0x4b, 0x7f, 0xa2, 0xb1, 0xd0, 0x41, 0x08, - 0x55, 0x7b, 0x11, 0x02, 0x0d, 0x00, 0x01, 0xff, 0x46, 0x19, 0xa1, 0xa7, - 0xd0, 0x01, 0x49, 0x59, 0x7b, 0xa6, 0xd0, 0x41, 0x45, 0x4b, 0x75, 0xa8, - 0xd0, 0x01, 0x4d, 0x5e, 0x83, 0xa9, 0xd0, 0x41, 0x07, 0xcb, 0xcf, 0x11, - 0x04, 0x1e, 0x92, 0x01, 0xff, 0x47, 0x49, 0x75, 0xa2, 0xd0, 0x01, 0x4b, - 0x7f, 0xa2, 0xb2, 0xd0, 0x41, 0x45, 0x4b, 0x75, 0xab, 0xd0, 0x01, 0x4e, - 0x54, 0x7b, 0xb3, 0xd0, 0x41, 0x4e, 0x42, 0x75, 0xa5, 0xd0, 0x01, 0x4c, - 0x1d, 0x92, 0xa3, 0xd0, 0x41, 0xa5, 0x06, 0x46, 0x35, 0xd0, 0x5d, 0xd0, - 0x41, 0x05, 0x58, 0xe4, 0x06, 0x43, 0x54, 0xc4, 0x2e, 0xd0, 0x41, 0x4b, - 0x42, 0x99, 0x8b, 0xd0, 0x01, 0x4c, 0xe9, 0x8c, 0x8a, 0xd0, 0x01, 0x4f, - 0xd0, 0x6c, 0x8e, 0xd0, 0x01, 0xb4, 0x01, 0xff, 0x4f, 0x4a, 0x6b, 0x8d, - 0xd0, 0x01, 0x4c, 0xdd, 0x92, 0x8c, 0xd0, 0x41, 0x02, 0x8a, 0x00, 0xba, - 0x01, 0x06, 0x68, 0xd8, 0x70, 0x45, 0x24, 0x95, 0x24, 0xd0, 0x81, 0x5a, - 0xaf, 0x3f, 0xb2, 0x06, 0x46, 0xbe, 0xcf, 0x61, 0xd0, 0x41, 0x04, 0xea, - 0xeb, 0x06, 0x46, 0x50, 0xd8, 0x0c, 0xd0, 0x41, 0xa1, 0x0f, 0xaf, 0x01, - 0xff, 0x48, 0x9a, 0xba, 0x4c, 0xd0, 0x01, 0x48, 0x32, 0xca, 0x54, 0xd0, - 0x41, 0x80, 0x06, 0x42, 0x12, 0x00, 0x32, 0xd0, 0x41, 0xa1, 0x06, 0x43, - 0x1c, 0x53, 0x83, 0xd0, 0x41, 0x43, 0x48, 0x1c, 0x82, 0xd0, 0x01, 0x47, - 0x26, 0xa9, 0x81, 0xd0, 0x41, 0x46, 0x92, 0xdb, 0x3a, 0xd0, 0x81, 0x0c, - 0x45, 0x75, 0x60, 0x89, 0xd0, 0x01, 0x46, 0x9c, 0xba, 0x4a, 0xd0, 0x41, - 0x45, 0xe8, 0xcb, 0x42, 0xd0, 0x41, 0x80, 0x01, 0xff, 0x43, 0x36, 0x6f, - 0x7f, 0xd0, 0x01, 0x44, 0xa9, 0x9d, 0xf4, 0xd0, 0x41, 0x80, 0x27, 0x42, - 0x12, 0x00, 0x10, 0xd0, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x48, 0x25, 0xa9, - 0x1c, 0xd0, 0x01, 0x04, 0x32, 0xee, 0x01, 0xff, 0x43, 0x36, 0x6f, 0x4e, - 0xd0, 0x01, 0x44, 0xa9, 0x9d, 0xf2, 0xd0, 0x01, 0x44, 0xe6, 0xed, 0xf0, - 0xd0, 0x41, 0x48, 0x25, 0xa9, 0x1b, 0xd0, 0x01, 0x04, 0x32, 0xee, 0x01, - 0xff, 0x43, 0x36, 0x6f, 0x4f, 0xd0, 0x01, 0x44, 0xa9, 0x9d, 0xf3, 0xd0, - 0x01, 0x44, 0xe6, 0xed, 0xf1, 0xd0, 0x41, 0x03, 0x18, 0x12, 0x06, 0x45, - 0xf9, 0xe3, 0x07, 0xd0, 0x41, 0x49, 0xa7, 0xb2, 0x37, 0xd0, 0x01, 0x43, - 0x0c, 0x07, 0x7a, 0xd0, 0x41, 0x46, 0x8a, 0xd7, 0x3f, 0xd0, 0x01, 0x02, - 0x7d, 0x02, 0x1a, 0xb3, 0x01, 0xff, 0x55, 0x3e, 0x38, 0xac, 0xd0, 0x01, - 0x03, 0xb6, 0x00, 0x01, 0xff, 0x48, 0x25, 0xa9, 0x1a, 0xd0, 0x01, 0x43, - 0x1c, 0x53, 0x46, 0xd0, 0x41, 0x47, 0x86, 0xcd, 0x98, 0xd0, 0x01, 0xa6, - 0x01, 0xff, 0x44, 0x55, 0x6b, 0xb7, 0xd0, 0x01, 0x04, 0xc3, 0x29, 0x01, - 0xff, 0xe1, 0x35, 0xd0, 0x01, 0x42, 0x10, 0x00, 0xb8, 0xd0, 0x41, 0x06, - 0x62, 0xd8, 0x50, 0x02, 0x0c, 0x00, 0x06, 0x4b, 0x17, 0xa0, 0x45, 0xd0, - 0x41, 0x02, 0xb7, 0x13, 0x11, 0x0a, 0x95, 0xaf, 0x01, 0xff, 0x46, 0x5b, - 0xca, 0xb4, 0xd0, 0x01, 0x47, 0x8d, 0xcd, 0xb5, 0xd0, 0x41, 0x02, 0x92, - 0x00, 0x06, 0x49, 0x38, 0x7f, 0x72, 0xd0, 0x41, 0x48, 0x25, 0xa9, 0x16, - 0xd0, 0x01, 0x04, 0x32, 0xee, 0x11, 0x0e, 0x12, 0x68, 0x01, 0xff, 0x48, - 0xf4, 0xb3, 0x90, 0xd0, 0x01, 0x45, 0xee, 0xb1, 0x91, 0xd0, 0x41, 0x43, - 0x36, 0x6f, 0x8f, 0xd0, 0x01, 0x44, 0xa9, 0x9d, 0xf5, 0xd0, 0x41, 0x46, - 0x0e, 0xd8, 0xd8, 0xd0, 0x01, 0x46, 0x8d, 0x33, 0xd9, 0xd0, 0x41, 0x09, - 0xac, 0xb3, 0x92, 0x01, 0x5a, 0x90, 0x1f, 0xc5, 0xd0, 0x01, 0x06, 0xc6, - 0x3f, 0x01, 0xff, 0x48, 0x25, 0xa9, 0x34, 0xd0, 0x81, 0x7a, 0x0a, 0x07, - 0xa7, 0x45, 0x54, 0x0f, 0x41, 0xcc, 0xd0, 0x01, 0x56, 0x8b, 0x33, 0xcb, - 0xd0, 0x01, 0x0f, 0x74, 0x6e, 0x29, 0xae, 0x1b, 0x08, 0x96, 0x1f, 0x01, - 0xff, 0x07, 0x9e, 0x1f, 0x06, 0x4b, 0xdf, 0x98, 0xbe, 0xd0, 0x41, 0x46, - 0x3c, 0xdd, 0xc6, 0xd0, 0x01, 0x45, 0xa5, 0x1f, 0xc5, 0xd0, 0x41, 0x49, - 0xe2, 0xb3, 0xbc, 0xd0, 0x01, 0x45, 0xeb, 0xe2, 0xc7, 0xd0, 0x41, 0x48, - 0x92, 0xc2, 0xc3, 0xd0, 0x01, 0x4a, 0x99, 0xab, 0xc4, 0xd0, 0x41, 0x42, - 0x00, 0x00, 0xbd, 0xd0, 0x01, 0x42, 0x37, 0x01, 0xbf, 0xd0, 0x01, 0xae, - 0x0c, 0x42, 0x6c, 0x09, 0xba, 0xd0, 0x01, 0x42, 0x0f, 0x00, 0xc0, 0xd0, - 0x41, 0x43, 0xfc, 0x11, 0xbb, 0xd0, 0x01, 0x02, 0xc6, 0x03, 0x01, 0xff, - 0x43, 0x36, 0x6f, 0xc2, 0xd0, 0x01, 0x44, 0xa9, 0x9d, 0xc1, 0xd0, 0x41, - 0x4f, 0xc6, 0x67, 0xb9, 0xd0, 0x41, 0x48, 0x92, 0xc2, 0xb0, 0xd0, 0x01, - 0x4a, 0x99, 0xab, 0xaf, 0xd0, 0x01, 0x4b, 0x14, 0xa1, 0xae, 0xd0, 0x41, - 0x49, 0xaa, 0xb8, 0x64, 0xd0, 0x01, 0x46, 0x90, 0xda, 0x55, 0xd0, 0x01, - 0xae, 0x1c, 0x47, 0xd1, 0xd1, 0x68, 0xd0, 0x01, 0x06, 0x78, 0xdd, 0x06, - 0x4e, 0x76, 0x7d, 0x0e, 0xd0, 0x41, 0x4d, 0x34, 0x7f, 0x74, 0xd0, 0x01, - 0x4b, 0x04, 0x9f, 0x60, 0xd0, 0x41, 0x54, 0xbb, 0x3f, 0xb6, 0xd0, 0x01, - 0x47, 0x9b, 0xcd, 0x7b, 0xd0, 0x41, 0x45, 0x60, 0xe1, 0x01, 0xd0, 0x01, - 0xa9, 0x06, 0x42, 0x60, 0x46, 0x2f, 0xd0, 0x41, 0xa1, 0x6d, 0x05, 0x57, - 0x21, 0x3d, 0x4a, 0x47, 0xa8, 0xe7, 0xd0, 0x01, 0xa7, 0x0d, 0x43, 0x90, - 0x04, 0x86, 0xd0, 0xc1, 0x00, 0x49, 0x24, 0xa9, 0x80, 0xd0, 0x41, 0x45, - 0x35, 0xd9, 0x92, 0xd0, 0x81, 0x06, 0x48, 0x72, 0xc7, 0xe6, 0xd0, 0x41, - 0x0f, 0x11, 0x68, 0x01, 0xff, 0x09, 0xf4, 0xb3, 0x06, 0x45, 0xee, 0xb1, - 0x95, 0xd0, 0x41, 0x43, 0x36, 0x6f, 0x94, 0xd0, 0x01, 0x44, 0xa9, 0x9d, - 0x93, 0xd0, 0x41, 0x51, 0xe8, 0x56, 0xd0, 0xd0, 0x01, 0x55, 0x64, 0x39, - 0xd2, 0xd0, 0x01, 0x5c, 0x52, 0x18, 0xd1, 0xd0, 0x01, 0xb4, 0x01, 0xff, - 0x4c, 0x95, 0x33, 0xcf, 0xd0, 0x01, 0x02, 0x0d, 0x00, 0x01, 0xff, 0x55, - 0x8a, 0x3a, 0xd3, 0xd0, 0x01, 0x48, 0x99, 0x33, 0xce, 0xd0, 0x41, 0x44, - 0x89, 0xcd, 0x99, 0xd0, 0x01, 0x06, 0x18, 0xdd, 0x01, 0xff, 0x06, 0xe8, - 0xd6, 0x0c, 0x45, 0x27, 0xd5, 0xdc, 0xd0, 0x01, 0x47, 0x83, 0xd3, 0xdd, - 0xd0, 0x41, 0x45, 0xbe, 0xe2, 0xdb, 0xd0, 0x01, 0x44, 0x74, 0x93, 0xda, - 0xd0, 0x41, 0x04, 0xff, 0x63, 0x27, 0x07, 0x37, 0xd1, 0x17, 0x04, 0x02, - 0xef, 0x01, 0xff, 0x46, 0x72, 0xda, 0xc9, 0xd0, 0x01, 0x46, 0xf4, 0xdc, - 0xca, 0xd0, 0x01, 0x45, 0x85, 0xe9, 0xc8, 0xd0, 0x41, 0x48, 0x25, 0xa9, - 0x3b, 0xd0, 0x01, 0x43, 0x1c, 0x53, 0x67, 0xd0, 0x41, 0xe9, 0x56, 0xd0, - 0x01, 0x42, 0x10, 0x00, 0x18, 0xd0, 0x41, 0x05, 0x9a, 0xe3, 0xb3, 0x01, - 0xae, 0x99, 0x01, 0xb0, 0x40, 0xb2, 0x01, 0xff, 0x02, 0xb7, 0x13, 0x2f, - 0x06, 0x7e, 0xda, 0x01, 0xff, 0x42, 0x00, 0x00, 0xec, 0xd0, 0x01, 0x42, - 0x24, 0x02, 0xeb, 0xd0, 0x01, 0x42, 0x37, 0x01, 0xed, 0xd0, 0x01, 0x42, - 0x26, 0x03, 0xef, 0xd0, 0x01, 0x42, 0x6c, 0x09, 0xe9, 0xd0, 0x01, 0x43, - 0xe9, 0x2c, 0xea, 0xd0, 0x01, 0x42, 0x0f, 0x00, 0xee, 0xd0, 0x41, 0xee, - 0x97, 0xd0, 0x01, 0x49, 0x38, 0x7f, 0x73, 0xd0, 0x41, 0x05, 0x18, 0xe3, - 0x47, 0x42, 0xc3, 0x01, 0x85, 0xd0, 0x01, 0xaf, 0x01, 0xff, 0x06, 0xfc, - 0xd7, 0x2e, 0x06, 0x1e, 0xdd, 0x06, 0x45, 0x5a, 0x52, 0x23, 0xd0, 0x41, - 0x02, 0xc6, 0x03, 0x14, 0xf3, 0x11, 0xd0, 0xc1, 0x00, 0x80, 0x01, 0xff, - 0x45, 0x27, 0xd5, 0x12, 0xd0, 0x01, 0x43, 0x1c, 0x53, 0x51, 0xd0, 0x41, - 0x4d, 0x47, 0x87, 0x52, 0xd0, 0x01, 0x50, 0x43, 0x38, 0xad, 0xd0, 0x41, - 0x48, 0x25, 0xa9, 0x22, 0xd0, 0x01, 0x43, 0x1c, 0x53, 0x84, 0xd0, 0x41, - 0x4a, 0x7a, 0x7d, 0x0d, 0xd0, 0x01, 0x46, 0x5c, 0xde, 0x33, 0xd0, 0x41, - 0x4a, 0xc7, 0xa5, 0x28, 0xd0, 0x01, 0x06, 0x8a, 0xdd, 0x01, 0xff, 0x47, - 0xbd, 0xcf, 0x62, 0xd0, 0x01, 0x42, 0x6c, 0x00, 0x5c, 0xd0, 0x41, 0x03, - 0xe4, 0x12, 0x2f, 0x04, 0x34, 0xd9, 0x21, 0x02, 0x2a, 0x02, 0x11, 0x05, - 0xdd, 0xe6, 0x01, 0xff, 0x44, 0xde, 0xeb, 0x9a, 0xd0, 0x01, 0x45, 0x9f, - 0xe3, 0xa1, 0xd0, 0x41, 0x42, 0x2f, 0x03, 0x9e, 0xd0, 0x01, 0x44, 0x19, - 0x01, 0x9d, 0xd0, 0x41, 0xe9, 0x9f, 0xd0, 0x01, 0x45, 0x83, 0xe6, 0xa0, - 0xd0, 0x41, 0xe9, 0x9c, 0xd0, 0x01, 0x45, 0x83, 0xe6, 0x9b, 0xd0, 0x41, - 0x04, 0x17, 0x7b, 0x97, 0x03, 0x44, 0x17, 0x09, 0xa3, 0xfa, 0x01, 0xe7, - 0x1b, 0xf4, 0x81, 0xd2, 0x01, 0x04, 0x02, 0xed, 0x57, 0x53, 0xe0, 0x48, - 0xd7, 0xf3, 0x01, 0x02, 0x0f, 0x07, 0x2d, 0x45, 0x64, 0xe7, 0x2f, 0xf3, - 0x01, 0xf3, 0x8c, 0xf6, 0x81, 0x0d, 0x44, 0xc3, 0x05, 0xc8, 0xf9, 0xc1, - 0x00, 0x43, 0xf0, 0xf0, 0x8b, 0xf9, 0x41, 0x45, 0x29, 0x03, 0x8f, 0xf6, - 0x01, 0xb4, 0x01, 0xff, 0x4e, 0xeb, 0x33, 0x64, 0xf4, 0x01, 0x4f, 0x53, - 0x71, 0x65, 0xf4, 0x41, 0x42, 0xc2, 0x05, 0x22, 0x20, 0x80, 0x13, 0x44, - 0xa8, 0x2c, 0x6b, 0xf5, 0x81, 0x06, 0x44, 0x46, 0xef, 0xce, 0x25, 0x40, - 0x51, 0x2d, 0x56, 0x6c, 0xf5, 0x41, 0x49, 0xdb, 0x1c, 0x19, 0x22, 0x40, - 0x07, 0xc1, 0x05, 0x0d, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xe9, 0x52, 0x17, - 0x00, 0xf5, 0x53, 0x17, 0x40, 0xe1, 0x40, 0x17, 0x00, 0x42, 0x16, 0x00, - 0x4a, 0x17, 0x00, 0x42, 0xa1, 0x10, 0x47, 0x17, 0x00, 0x42, 0x24, 0x02, - 0x44, 0x17, 0x00, 0x42, 0x22, 0x00, 0x51, 0x17, 0x00, 0xe9, 0x41, 0x17, - 0x00, 0x42, 0x1b, 0x02, 0x43, 0x17, 0x00, 0x42, 0x74, 0x00, 0x4e, 0x17, - 0x00, 0x42, 0x6c, 0x00, 0x4b, 0x17, 0x00, 0xae, 0x28, 0x42, 0x6c, 0x09, - 0x49, 0x17, 0x00, 0x42, 0x71, 0x00, 0x4d, 0x17, 0x00, 0x42, 0x15, 0x06, - 0x50, 0x17, 0x00, 0x42, 0x12, 0x00, 0x46, 0x17, 0x00, 0xf5, 0x42, 0x17, - 0x00, 0x42, 0xa9, 0x01, 0x4f, 0x17, 0x00, 0x42, 0x34, 0x22, 0x4c, 0x17, - 0x40, 0xe1, 0x48, 0x17, 0x00, 0x42, 0x24, 0x02, 0x45, 0x17, 0x40, 0x06, - 0x27, 0x82, 0x01, 0xff, 0x4e, 0xdc, 0x75, 0x1f, 0x1a, 0x00, 0x07, 0xc1, - 0x05, 0x21, 0x47, 0xa0, 0xd1, 0x1e, 0x1a, 0x00, 0x0b, 0xd1, 0x75, 0x01, - 0xff, 0x42, 0x44, 0x0f, 0x1b, 0x1a, 0x00, 0xe5, 0x19, 0x1a, 0x00, 0xe9, - 0x17, 0x1a, 0x00, 0xef, 0x1a, 0x1a, 0x00, 0xf5, 0x18, 0x1a, 0x40, 0xe1, - 0x15, 0x1a, 0x00, 0x42, 0x16, 0x00, 0x05, 0x1a, 0x00, 0x42, 0x37, 0x00, - 0x0c, 0x1a, 0x00, 0x42, 0xa1, 0x10, 0x09, 0x1a, 0x00, 0x42, 0x24, 0x02, - 0x01, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x16, 0x1a, 0x00, 0x42, 0xbd, 0x26, - 0x0d, 0x1a, 0x00, 0x42, 0x1b, 0x02, 0x00, 0x1a, 0x00, 0x42, 0x74, 0x00, - 0x12, 0x1a, 0x00, 0xad, 0x49, 0xae, 0x24, 0x42, 0x6c, 0x09, 0x04, 0x1a, - 0x00, 0x42, 0x71, 0x00, 0x11, 0x1a, 0x00, 0x42, 0x15, 0x06, 0x14, 0x1a, - 0x00, 0x42, 0x12, 0x00, 0x08, 0x1a, 0x00, 0x42, 0xa6, 0x0a, 0x13, 0x1a, - 0x00, 0x42, 0x34, 0x22, 0x10, 0x1a, 0x40, 0xe1, 0x0a, 0x1a, 0x00, 0xa7, - 0x13, 0x42, 0x71, 0x00, 0x0b, 0x1a, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0x0e, - 0x1a, 0x00, 0x42, 0x37, 0x00, 0x0f, 0x1a, 0x40, 0xe1, 0x02, 0x1a, 0x00, - 0x42, 0x1b, 0x02, 0x03, 0x1a, 0x40, 0xe1, 0x06, 0x1a, 0x00, 0x42, 0x6c, - 0x09, 0x07, 0x1a, 0x40, 0x44, 0x0e, 0x51, 0xcb, 0xf9, 0x01, 0xf3, 0xe7, - 0xfa, 0x41, 0xa1, 0x6a, 0xa5, 0x50, 0xa9, 0x2b, 0xaf, 0x01, 0xff, 0x45, - 0xfb, 0xe1, 0x66, 0xf9, 0x01, 0x04, 0x24, 0xa6, 0x0c, 0x42, 0xe9, 0x04, - 0xf9, 0xf9, 0x01, 0x48, 0xc2, 0xc9, 0x0e, 0xf9, 0x41, 0x43, 0x16, 0x00, - 0xa6, 0x00, 0x00, 0x5b, 0x26, 0x1a, 0x8b, 0x23, 0x00, 0x45, 0x24, 0x21, - 0x94, 0xf4, 0x41, 0x42, 0x36, 0x01, 0xf1, 0xf9, 0x01, 0xa4, 0x0f, 0x02, - 0x69, 0x00, 0x01, 0xff, 0x44, 0x22, 0xec, 0xbc, 0xf4, 0x01, 0xf3, 0x72, - 0xfa, 0x41, 0x4b, 0x4d, 0x99, 0x70, 0xf4, 0x01, 0x4b, 0x34, 0x9a, 0x09, - 0xf3, 0x41, 0xa1, 0x06, 0x42, 0x32, 0x00, 0xd8, 0x02, 0x40, 0xe4, 0x5e, - 0xf3, 0x01, 0x50, 0xda, 0x62, 0x82, 0x00, 0x00, 0x4a, 0x09, 0xaf, 0x31, - 0xf9, 0x41, 0x04, 0x0a, 0xed, 0x98, 0x09, 0xa9, 0x01, 0xff, 0x0c, 0xad, - 0x8f, 0x04, 0xee, 0xe0, 0xf9, 0x41, 0x45, 0xbe, 0xbd, 0x00, 0x28, 0x00, - 0x05, 0x96, 0xe2, 0x01, 0xff, 0xd1, 0x01, 0x28, 0x80, 0xbe, 0x04, 0xd2, - 0x02, 0x28, 0x80, 0x9c, 0x02, 0xd3, 0x04, 0x28, 0x80, 0x8b, 0x01, 0xd4, - 0x08, 0x28, 0x80, 0x43, 0xd5, 0x10, 0x28, 0x80, 0x1f, 0xd6, 0x20, 0x28, - 0x80, 0x0d, 0xd7, 0x40, 0x28, 0x80, 0x04, 0xd8, 0x80, 0x28, 0x40, 0xd8, - 0xc0, 0x28, 0x40, 0xd7, 0x60, 0x28, 0x80, 0x04, 0xd8, 0xa0, 0x28, 0x40, - 0xd8, 0xe0, 0x28, 0x40, 0xd6, 0x30, 0x28, 0x80, 0x0d, 0xd7, 0x50, 0x28, - 0x80, 0x04, 0xd8, 0x90, 0x28, 0x40, 0xd8, 0xd0, 0x28, 0x40, 0xd7, 0x70, - 0x28, 0x80, 0x04, 0xd8, 0xb0, 0x28, 0x40, 0xd8, 0xf0, 0x28, 0x40, 0xd5, - 0x18, 0x28, 0x80, 0x1f, 0xd6, 0x28, 0x28, 0x80, 0x0d, 0xd7, 0x48, 0x28, - 0x80, 0x04, 0xd8, 0x88, 0x28, 0x40, 0xd8, 0xc8, 0x28, 0x40, 0xd7, 0x68, - 0x28, 0x80, 0x04, 0xd8, 0xa8, 0x28, 0x40, 0xd8, 0xe8, 0x28, 0x40, 0xd6, - 0x38, 0x28, 0x80, 0x0d, 0xd7, 0x58, 0x28, 0x80, 0x04, 0xd8, 0x98, 0x28, - 0x40, 0xd8, 0xd8, 0x28, 0x40, 0xd7, 0x78, 0x28, 0x80, 0x04, 0xd8, 0xb8, - 0x28, 0x40, 0xd8, 0xf8, 0x28, 0x40, 0xd4, 0x0c, 0x28, 0x80, 0x43, 0xd5, - 0x14, 0x28, 0x80, 0x1f, 0xd6, 0x24, 0x28, 0x80, 0x0d, 0xd7, 0x44, 0x28, - 0x80, 0x04, 0xd8, 0x84, 0x28, 0x40, 0xd8, 0xc4, 0x28, 0x40, 0xd7, 0x64, - 0x28, 0x80, 0x04, 0xd8, 0xa4, 0x28, 0x40, 0xd8, 0xe4, 0x28, 0x40, 0xd6, - 0x34, 0x28, 0x80, 0x0d, 0xd7, 0x54, 0x28, 0x80, 0x04, 0xd8, 0x94, 0x28, - 0x40, 0xd8, 0xd4, 0x28, 0x40, 0xd7, 0x74, 0x28, 0x80, 0x04, 0xd8, 0xb4, - 0x28, 0x40, 0xd8, 0xf4, 0x28, 0x40, 0xd5, 0x1c, 0x28, 0x80, 0x1f, 0xd6, - 0x2c, 0x28, 0x80, 0x0d, 0xd7, 0x4c, 0x28, 0x80, 0x04, 0xd8, 0x8c, 0x28, - 0x40, 0xd8, 0xcc, 0x28, 0x40, 0xd7, 0x6c, 0x28, 0x80, 0x04, 0xd8, 0xac, - 0x28, 0x40, 0xd8, 0xec, 0x28, 0x40, 0xd6, 0x3c, 0x28, 0x80, 0x0d, 0xd7, - 0x5c, 0x28, 0x80, 0x04, 0xd8, 0x9c, 0x28, 0x40, 0xd8, 0xdc, 0x28, 0x40, - 0xd7, 0x7c, 0x28, 0x80, 0x04, 0xd8, 0xbc, 0x28, 0x40, 0xd8, 0xfc, 0x28, - 0x40, 0xd3, 0x06, 0x28, 0x80, 0x8b, 0x01, 0xd4, 0x0a, 0x28, 0x80, 0x43, - 0xd5, 0x12, 0x28, 0x80, 0x1f, 0xd6, 0x22, 0x28, 0x80, 0x0d, 0xd7, 0x42, - 0x28, 0x80, 0x04, 0xd8, 0x82, 0x28, 0x40, 0xd8, 0xc2, 0x28, 0x40, 0xd7, - 0x62, 0x28, 0x80, 0x04, 0xd8, 0xa2, 0x28, 0x40, 0xd8, 0xe2, 0x28, 0x40, - 0xd6, 0x32, 0x28, 0x80, 0x0d, 0xd7, 0x52, 0x28, 0x80, 0x04, 0xd8, 0x92, - 0x28, 0x40, 0xd8, 0xd2, 0x28, 0x40, 0xd7, 0x72, 0x28, 0x80, 0x04, 0xd8, - 0xb2, 0x28, 0x40, 0xd8, 0xf2, 0x28, 0x40, 0xd5, 0x1a, 0x28, 0x80, 0x1f, - 0xd6, 0x2a, 0x28, 0x80, 0x0d, 0xd7, 0x4a, 0x28, 0x80, 0x04, 0xd8, 0x8a, - 0x28, 0x40, 0xd8, 0xca, 0x28, 0x40, 0xd7, 0x6a, 0x28, 0x80, 0x04, 0xd8, - 0xaa, 0x28, 0x40, 0xd8, 0xea, 0x28, 0x40, 0xd6, 0x3a, 0x28, 0x80, 0x0d, - 0xd7, 0x5a, 0x28, 0x80, 0x04, 0xd8, 0x9a, 0x28, 0x40, 0xd8, 0xda, 0x28, - 0x40, 0xd7, 0x7a, 0x28, 0x80, 0x04, 0xd8, 0xba, 0x28, 0x40, 0xd8, 0xfa, - 0x28, 0x40, 0xd4, 0x0e, 0x28, 0x80, 0x43, 0xd5, 0x16, 0x28, 0x80, 0x1f, - 0xd6, 0x26, 0x28, 0x80, 0x0d, 0xd7, 0x46, 0x28, 0x80, 0x04, 0xd8, 0x86, - 0x28, 0x40, 0xd8, 0xc6, 0x28, 0x40, 0xd7, 0x66, 0x28, 0x80, 0x04, 0xd8, - 0xa6, 0x28, 0x40, 0xd8, 0xe6, 0x28, 0x40, 0xd6, 0x36, 0x28, 0x80, 0x0d, - 0xd7, 0x56, 0x28, 0x80, 0x04, 0xd8, 0x96, 0x28, 0x40, 0xd8, 0xd6, 0x28, - 0x40, 0xd7, 0x76, 0x28, 0x80, 0x04, 0xd8, 0xb6, 0x28, 0x40, 0xd8, 0xf6, - 0x28, 0x40, 0xd5, 0x1e, 0x28, 0x80, 0x1f, 0xd6, 0x2e, 0x28, 0x80, 0x0d, - 0xd7, 0x4e, 0x28, 0x80, 0x04, 0xd8, 0x8e, 0x28, 0x40, 0xd8, 0xce, 0x28, - 0x40, 0xd7, 0x6e, 0x28, 0x80, 0x04, 0xd8, 0xae, 0x28, 0x40, 0xd8, 0xee, - 0x28, 0x40, 0xd6, 0x3e, 0x28, 0x80, 0x0d, 0xd7, 0x5e, 0x28, 0x80, 0x04, - 0xd8, 0x9e, 0x28, 0x40, 0xd8, 0xde, 0x28, 0x40, 0xd7, 0x7e, 0x28, 0x80, - 0x04, 0xd8, 0xbe, 0x28, 0x40, 0xd8, 0xfe, 0x28, 0x40, 0xd2, 0x03, 0x28, - 0x80, 0x9c, 0x02, 0xd3, 0x05, 0x28, 0x80, 0x8b, 0x01, 0xd4, 0x09, 0x28, - 0x80, 0x43, 0xd5, 0x11, 0x28, 0x80, 0x1f, 0xd6, 0x21, 0x28, 0x80, 0x0d, - 0xd7, 0x41, 0x28, 0x80, 0x04, 0xd8, 0x81, 0x28, 0x40, 0xd8, 0xc1, 0x28, - 0x40, 0xd7, 0x61, 0x28, 0x80, 0x04, 0xd8, 0xa1, 0x28, 0x40, 0xd8, 0xe1, - 0x28, 0x40, 0xd6, 0x31, 0x28, 0x80, 0x0d, 0xd7, 0x51, 0x28, 0x80, 0x04, - 0xd8, 0x91, 0x28, 0x40, 0xd8, 0xd1, 0x28, 0x40, 0xd7, 0x71, 0x28, 0x80, - 0x04, 0xd8, 0xb1, 0x28, 0x40, 0xd8, 0xf1, 0x28, 0x40, 0xd5, 0x19, 0x28, - 0x80, 0x1f, 0xd6, 0x29, 0x28, 0x80, 0x0d, 0xd7, 0x49, 0x28, 0x80, 0x04, - 0xd8, 0x89, 0x28, 0x40, 0xd8, 0xc9, 0x28, 0x40, 0xd7, 0x69, 0x28, 0x80, - 0x04, 0xd8, 0xa9, 0x28, 0x40, 0xd8, 0xe9, 0x28, 0x40, 0xd6, 0x39, 0x28, - 0x80, 0x0d, 0xd7, 0x59, 0x28, 0x80, 0x04, 0xd8, 0x99, 0x28, 0x40, 0xd8, - 0xd9, 0x28, 0x40, 0xd7, 0x79, 0x28, 0x80, 0x04, 0xd8, 0xb9, 0x28, 0x40, - 0xd8, 0xf9, 0x28, 0x40, 0xd4, 0x0d, 0x28, 0x80, 0x43, 0xd5, 0x15, 0x28, - 0x80, 0x1f, 0xd6, 0x25, 0x28, 0x80, 0x0d, 0xd7, 0x45, 0x28, 0x80, 0x04, - 0xd8, 0x85, 0x28, 0x40, 0xd8, 0xc5, 0x28, 0x40, 0xd7, 0x65, 0x28, 0x80, - 0x04, 0xd8, 0xa5, 0x28, 0x40, 0xd8, 0xe5, 0x28, 0x40, 0xd6, 0x35, 0x28, - 0x80, 0x0d, 0xd7, 0x55, 0x28, 0x80, 0x04, 0xd8, 0x95, 0x28, 0x40, 0xd8, - 0xd5, 0x28, 0x40, 0xd7, 0x75, 0x28, 0x80, 0x04, 0xd8, 0xb5, 0x28, 0x40, - 0xd8, 0xf5, 0x28, 0x40, 0xd5, 0x1d, 0x28, 0x80, 0x1f, 0xd6, 0x2d, 0x28, - 0x80, 0x0d, 0xd7, 0x4d, 0x28, 0x80, 0x04, 0xd8, 0x8d, 0x28, 0x40, 0xd8, - 0xcd, 0x28, 0x40, 0xd7, 0x6d, 0x28, 0x80, 0x04, 0xd8, 0xad, 0x28, 0x40, - 0xd8, 0xed, 0x28, 0x40, 0xd6, 0x3d, 0x28, 0x80, 0x0d, 0xd7, 0x5d, 0x28, - 0x80, 0x04, 0xd8, 0x9d, 0x28, 0x40, 0xd8, 0xdd, 0x28, 0x40, 0xd7, 0x7d, - 0x28, 0x80, 0x04, 0xd8, 0xbd, 0x28, 0x40, 0xd8, 0xfd, 0x28, 0x40, 0xd3, - 0x07, 0x28, 0x80, 0x8b, 0x01, 0xd4, 0x0b, 0x28, 0x80, 0x43, 0xd5, 0x13, - 0x28, 0x80, 0x1f, 0xd6, 0x23, 0x28, 0x80, 0x0d, 0xd7, 0x43, 0x28, 0x80, - 0x04, 0xd8, 0x83, 0x28, 0x40, 0xd8, 0xc3, 0x28, 0x40, 0xd7, 0x63, 0x28, - 0x80, 0x04, 0xd8, 0xa3, 0x28, 0x40, 0xd8, 0xe3, 0x28, 0x40, 0xd6, 0x33, - 0x28, 0x80, 0x0d, 0xd7, 0x53, 0x28, 0x80, 0x04, 0xd8, 0x93, 0x28, 0x40, - 0xd8, 0xd3, 0x28, 0x40, 0xd7, 0x73, 0x28, 0x80, 0x04, 0xd8, 0xb3, 0x28, - 0x40, 0xd8, 0xf3, 0x28, 0x40, 0xd5, 0x1b, 0x28, 0x80, 0x1f, 0xd6, 0x2b, - 0x28, 0x80, 0x0d, 0xd7, 0x4b, 0x28, 0x80, 0x04, 0xd8, 0x8b, 0x28, 0x40, - 0xd8, 0xcb, 0x28, 0x40, 0xd7, 0x6b, 0x28, 0x80, 0x04, 0xd8, 0xab, 0x28, - 0x40, 0xd8, 0xeb, 0x28, 0x40, 0xd6, 0x3b, 0x28, 0x80, 0x0d, 0xd7, 0x5b, - 0x28, 0x80, 0x04, 0xd8, 0x9b, 0x28, 0x40, 0xd8, 0xdb, 0x28, 0x40, 0xd7, - 0x7b, 0x28, 0x80, 0x04, 0xd8, 0xbb, 0x28, 0x40, 0xd8, 0xfb, 0x28, 0x40, - 0xd4, 0x0f, 0x28, 0x80, 0x43, 0xd5, 0x17, 0x28, 0x80, 0x1f, 0xd6, 0x27, - 0x28, 0x80, 0x0d, 0xd7, 0x47, 0x28, 0x80, 0x04, 0xd8, 0x87, 0x28, 0x40, - 0xd8, 0xc7, 0x28, 0x40, 0xd7, 0x67, 0x28, 0x80, 0x04, 0xd8, 0xa7, 0x28, - 0x40, 0xd8, 0xe7, 0x28, 0x40, 0xd6, 0x37, 0x28, 0x80, 0x0d, 0xd7, 0x57, - 0x28, 0x80, 0x04, 0xd8, 0x97, 0x28, 0x40, 0xd8, 0xd7, 0x28, 0x40, 0xd7, - 0x77, 0x28, 0x80, 0x04, 0xd8, 0xb7, 0x28, 0x40, 0xd8, 0xf7, 0x28, 0x40, - 0xd5, 0x1f, 0x28, 0x80, 0x1f, 0xd6, 0x2f, 0x28, 0x80, 0x0d, 0xd7, 0x4f, - 0x28, 0x80, 0x04, 0xd8, 0x8f, 0x28, 0x40, 0xd8, 0xcf, 0x28, 0x40, 0xd7, - 0x6f, 0x28, 0x80, 0x04, 0xd8, 0xaf, 0x28, 0x40, 0xd8, 0xef, 0x28, 0x40, - 0xd6, 0x3f, 0x28, 0x80, 0x0d, 0xd7, 0x5f, 0x28, 0x80, 0x04, 0xd8, 0x9f, - 0x28, 0x40, 0xd8, 0xdf, 0x28, 0x40, 0xd7, 0x7f, 0x28, 0x80, 0x04, 0xd8, - 0xbf, 0x28, 0x40, 0xd8, 0xff, 0x28, 0x40, 0xa4, 0x95, 0x05, 0x07, 0xc1, - 0x05, 0xca, 0x02, 0x07, 0x2f, 0x39, 0xb1, 0x01, 0x0c, 0x01, 0x16, 0x89, - 0x01, 0x05, 0x2f, 0x03, 0x61, 0xb6, 0x01, 0xff, 0x45, 0x5c, 0x23, 0x46, - 0x10, 0x01, 0x0a, 0xd2, 0x75, 0x01, 0xff, 0xa1, 0x45, 0x4e, 0xb6, 0x74, - 0x39, 0x10, 0x01, 0xe5, 0x42, 0x10, 0x01, 0xe9, 0x3a, 0x10, 0x81, 0x32, - 0xef, 0x44, 0x10, 0x81, 0x20, 0xf5, 0x3c, 0x10, 0x81, 0x17, 0x08, 0x9b, - 0xbe, 0x01, 0xff, 0xec, 0x40, 0x10, 0x81, 0x09, 0xf2, 0x3e, 0x10, 0xc1, - 0x00, 0xf2, 0x3f, 0x10, 0x41, 0xec, 0x41, 0x10, 0x41, 0xf5, 0x3d, 0x10, - 0x41, 0x0f, 0xa2, 0x6d, 0x01, 0xff, 0xe5, 0x73, 0x10, 0x01, 0xef, 0x74, - 0x10, 0x41, 0xe9, 0x3b, 0x10, 0x41, 0xe1, 0x38, 0x10, 0x01, 0xe9, 0x43, - 0x10, 0x01, 0xf5, 0x45, 0x10, 0x41, 0x48, 0xd0, 0x15, 0x01, 0x10, 0x01, - 0x4b, 0x4f, 0x23, 0x00, 0x10, 0x01, 0x4b, 0xc0, 0x9b, 0x03, 0x10, 0x01, - 0x50, 0xfa, 0x63, 0x70, 0x10, 0x01, 0x4b, 0x32, 0xa2, 0x04, 0x10, 0x01, - 0x47, 0xa1, 0x4a, 0x02, 0x10, 0x41, 0x4c, 0xc9, 0x8b, 0x4c, 0x10, 0x01, - 0x02, 0x3b, 0x01, 0x0f, 0xac, 0x01, 0xff, 0x43, 0xc3, 0x07, 0x4b, 0x10, - 0x01, 0x44, 0x45, 0x78, 0x4d, 0x10, 0x41, 0xf4, 0x49, 0x10, 0x01, 0x48, - 0xad, 0x40, 0x4a, 0x10, 0x41, 0x45, 0xc3, 0x0a, 0x59, 0x10, 0x81, 0x88, - 0x01, 0xa6, 0x69, 0x46, 0x24, 0x60, 0x7f, 0x10, 0x01, 0x44, 0x46, 0x2a, - 0x5a, 0x10, 0x81, 0x56, 0x43, 0xbf, 0x0a, 0x52, 0x10, 0x81, 0x40, 0xb3, - 0x24, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x5b, 0x10, 0x01, 0xa8, 0x0d, - 0xb7, 0x01, 0xff, 0x44, 0x29, 0x1d, 0x5c, 0x10, 0x01, 0xef, 0x53, 0x10, - 0x41, 0x44, 0x2c, 0x11, 0x5d, 0x10, 0x01, 0x43, 0x26, 0x01, 0x54, 0x10, - 0x41, 0x44, 0x27, 0x1d, 0x58, 0x10, 0x81, 0x0d, 0x42, 0x60, 0x25, 0x57, - 0x10, 0xc1, 0x00, 0x42, 0x2e, 0x11, 0x60, 0x10, 0x41, 0x42, 0x2e, 0x11, - 0x61, 0x10, 0x41, 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0x64, 0x10, 0x01, - 0x48, 0xd5, 0x5c, 0x65, 0x10, 0x41, 0x42, 0x2e, 0x11, 0x63, 0x10, 0x41, - 0xa9, 0x0f, 0xaf, 0x01, 0xff, 0x43, 0x2d, 0x11, 0x5e, 0x10, 0x01, 0x42, - 0x42, 0x00, 0x55, 0x10, 0x41, 0x43, 0x09, 0x4c, 0x5f, 0x10, 0x01, 0x42, - 0x32, 0x00, 0x56, 0x10, 0x41, 0xf9, 0x62, 0x10, 0x41, 0xe1, 0x05, 0x10, - 0x81, 0xb4, 0x02, 0xa2, 0xa7, 0x02, 0xa3, 0x9a, 0x02, 0xa4, 0x81, 0x02, - 0xe5, 0x0f, 0x10, 0x01, 0xa7, 0xf0, 0x01, 0x42, 0x22, 0x00, 0x33, 0x10, - 0x01, 0xe9, 0x07, 0x10, 0x81, 0xe0, 0x01, 0xaa, 0xd3, 0x01, 0xab, 0xc6, - 0x01, 0xac, 0xb9, 0x01, 0x42, 0x6c, 0x00, 0x2b, 0x10, 0x01, 0xae, 0x9a, - 0x01, 0xef, 0x11, 0x10, 0x81, 0x69, 0xb0, 0x5d, 0x42, 0x71, 0x00, 0x2d, - 0x10, 0x01, 0xb3, 0x45, 0xb4, 0x2c, 0xf5, 0x09, 0x10, 0x81, 0x23, 0xb6, - 0x06, 0x42, 0x34, 0x22, 0x2c, 0x10, 0x41, 0xe1, 0x2f, 0x10, 0x01, 0x07, - 0x9c, 0xbe, 0x01, 0xff, 0xec, 0x0d, 0x10, 0x81, 0x09, 0xf2, 0x0b, 0x10, - 0xc1, 0x00, 0xf2, 0x0c, 0x10, 0x41, 0xec, 0x0e, 0x10, 0x41, 0xf5, 0x0a, - 0x10, 0x41, 0xe1, 0x22, 0x10, 0x01, 0x42, 0x22, 0x00, 0x23, 0x10, 0x01, - 0xb4, 0x01, 0xff, 0xe1, 0x1d, 0x10, 0x01, 0x42, 0x22, 0x00, 0x1e, 0x10, - 0x41, 0xe1, 0x32, 0x10, 0x01, 0x42, 0x22, 0x00, 0x30, 0x10, 0x01, 0x42, - 0x15, 0x06, 0x31, 0x10, 0x41, 0xe1, 0x27, 0x10, 0x01, 0x42, 0x22, 0x00, - 0x28, 0x10, 0x41, 0x09, 0xfb, 0x63, 0x01, 0xff, 0x02, 0x0f, 0x07, 0x19, - 0x44, 0x42, 0xee, 0x37, 0x10, 0x01, 0x43, 0xc9, 0x64, 0x36, 0x10, 0x01, - 0x06, 0x61, 0x36, 0x01, 0xff, 0xe5, 0x71, 0x10, 0x01, 0xef, 0x72, 0x10, - 0x41, 0xe1, 0x75, 0x10, 0x01, 0x42, 0x74, 0x00, 0x35, 0x10, 0x41, 0xe1, - 0x26, 0x10, 0x01, 0x42, 0x24, 0x02, 0x17, 0x10, 0x01, 0x42, 0xff, 0x04, - 0x21, 0x10, 0x01, 0x42, 0x34, 0x22, 0x1c, 0x10, 0x41, 0xe1, 0x2e, 0x10, - 0x01, 0x42, 0x74, 0x00, 0x34, 0x10, 0x41, 0xe1, 0x13, 0x10, 0x01, 0x42, - 0x22, 0x00, 0x14, 0x10, 0x41, 0xe1, 0x1a, 0x10, 0x01, 0x42, 0x22, 0x00, - 0x1b, 0x10, 0x41, 0xe9, 0x08, 0x10, 0x41, 0xe1, 0x15, 0x10, 0x01, 0x42, - 0x22, 0x00, 0x16, 0x10, 0x41, 0xe1, 0x24, 0x10, 0x01, 0xa4, 0x06, 0x42, - 0x22, 0x00, 0x25, 0x10, 0x41, 0xe1, 0x1f, 0x10, 0x01, 0x42, 0x22, 0x00, - 0x20, 0x10, 0x41, 0xe1, 0x18, 0x10, 0x01, 0x42, 0x22, 0x00, 0x19, 0x10, - 0x41, 0xe1, 0x29, 0x10, 0x01, 0x42, 0x22, 0x00, 0x2a, 0x10, 0x41, 0xe1, - 0x06, 0x10, 0x01, 0xe9, 0x10, 0x10, 0x01, 0xf5, 0x12, 0x10, 0x41, 0x44, - 0xd1, 0x1f, 0x47, 0x10, 0x01, 0x05, 0xc5, 0x06, 0x06, 0x4b, 0xd8, 0x9e, - 0x48, 0x10, 0x41, 0x45, 0xc3, 0x0a, 0x6e, 0x10, 0x01, 0xa6, 0x2e, 0x44, - 0x46, 0x2a, 0x6f, 0x10, 0x01, 0x43, 0xbf, 0x0a, 0x67, 0x10, 0x01, 0xb3, - 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x66, 0x10, 0x41, 0x44, 0x25, 0x01, - 0x69, 0x10, 0x01, 0x42, 0x15, 0x02, 0x68, 0x10, 0x41, 0x44, 0x27, 0x1d, - 0x6d, 0x10, 0x01, 0x42, 0x60, 0x25, 0x6c, 0x10, 0x41, 0x43, 0xa7, 0x05, - 0x6b, 0x10, 0x01, 0x43, 0xcb, 0x06, 0x6a, 0x10, 0x41, 0x42, 0x17, 0x00, - 0x17, 0xf4, 0x01, 0x03, 0x7b, 0x23, 0xee, 0x10, 0x42, 0x8b, 0x05, 0xa3, - 0xf4, 0x01, 0x42, 0xa2, 0x05, 0xb4, 0xf9, 0x01, 0xaf, 0xc3, 0x10, 0x07, - 0xf4, 0xd1, 0xe0, 0x0d, 0x02, 0xc3, 0x05, 0xe6, 0x0b, 0x45, 0xbd, 0xe8, - 0x90, 0xf4, 0x81, 0xd8, 0x0b, 0xb7, 0xa1, 0x0b, 0xb8, 0x0b, 0xf9, 0x66, - 0xf4, 0xc1, 0x00, 0x48, 0x2e, 0x4a, 0xc9, 0xf6, 0x41, 0x0a, 0x8d, 0xa3, - 0x06, 0x49, 0x1a, 0xb8, 0x4a, 0xf9, 0x41, 0x02, 0x3b, 0x01, 0xf6, 0x08, - 0x06, 0x01, 0x15, 0xc2, 0x07, 0xac, 0xae, 0x02, 0x06, 0xc8, 0x00, 0xf1, - 0x01, 0x03, 0x11, 0x15, 0x5e, 0x09, 0x32, 0x00, 0x01, 0xff, 0x0b, 0x0b, - 0x99, 0x43, 0x0a, 0x01, 0x15, 0x2d, 0x0a, 0x1a, 0x63, 0x17, 0x0b, 0x85, - 0xa0, 0x01, 0xff, 0x51, 0x3b, 0x59, 0x6a, 0x25, 0x00, 0x4b, 0x65, 0x9c, - 0x61, 0x25, 0x00, 0x4c, 0xb9, 0x92, 0x5e, 0x25, 0x40, 0x50, 0x93, 0x39, - 0x3f, 0x25, 0x00, 0x4a, 0x59, 0xaa, 0x25, 0x25, 0x00, 0x4b, 0xca, 0x9f, - 0x1d, 0x25, 0x40, 0x50, 0xa8, 0x39, 0x42, 0x25, 0x00, 0x4a, 0x63, 0xaa, - 0x28, 0x25, 0x00, 0x4b, 0x24, 0x63, 0x20, 0x25, 0x40, 0x51, 0x4c, 0x59, - 0x6b, 0x25, 0x00, 0x4b, 0x70, 0x9c, 0x62, 0x25, 0x00, 0x4c, 0xc5, 0x92, - 0x5f, 0x25, 0x40, 0x0b, 0x0b, 0x99, 0x79, 0x0a, 0x01, 0x15, 0x48, 0x0a, - 0x1a, 0x63, 0x17, 0x0b, 0x85, 0xa0, 0x01, 0xff, 0x51, 0x3b, 0x59, 0x67, - 0x25, 0x00, 0x4b, 0x65, 0x9c, 0x5b, 0x25, 0x00, 0x4c, 0xb9, 0x92, 0x58, - 0x25, 0x40, 0x55, 0x8e, 0x39, 0x48, 0x25, 0x00, 0x50, 0x93, 0x39, 0x37, - 0x25, 0x00, 0x05, 0xc3, 0x00, 0x11, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x4a, - 0xfc, 0x14, 0x22, 0x25, 0x00, 0x45, 0x01, 0x15, 0x15, 0x25, 0x40, 0x4a, - 0xfc, 0x14, 0x2a, 0x25, 0x00, 0x45, 0x01, 0x15, 0x19, 0x25, 0x40, 0x55, - 0xa3, 0x39, 0x40, 0x25, 0x00, 0x50, 0xa8, 0x39, 0x38, 0x25, 0x00, 0x05, - 0xc3, 0x00, 0x11, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x4a, 0x6b, 0x16, 0x1e, - 0x25, 0x00, 0x45, 0xc3, 0x01, 0x16, 0x25, 0x40, 0x4a, 0x6b, 0x16, 0x26, - 0x25, 0x00, 0x45, 0xc3, 0x01, 0x1a, 0x25, 0x40, 0x51, 0x4c, 0x59, 0x68, - 0x25, 0x00, 0x4b, 0x70, 0x9c, 0x5c, 0x25, 0x00, 0x4c, 0xc5, 0x92, 0x59, - 0x25, 0x40, 0x5c, 0x02, 0x17, 0x46, 0x25, 0x00, 0x0f, 0x07, 0x17, 0x1c, - 0x0f, 0x1a, 0x6e, 0x06, 0x5c, 0xfa, 0x18, 0x44, 0x25, 0x40, 0x4a, 0xfc, - 0x14, 0x31, 0x25, 0x00, 0x48, 0x58, 0x16, 0x39, 0x25, 0x00, 0x4e, 0x06, - 0x7d, 0x49, 0x25, 0x40, 0x4a, 0x6b, 0x16, 0x2e, 0x25, 0x00, 0x48, 0x11, - 0x15, 0x36, 0x25, 0x00, 0x4e, 0x14, 0x7d, 0x3e, 0x25, 0x40, 0x04, 0xc4, - 0x00, 0xd4, 0x04, 0x05, 0xc9, 0x00, 0x01, 0xff, 0x04, 0x3e, 0x17, 0xa9, - 0x04, 0x55, 0xd1, 0x38, 0x1e, 0xcc, 0x01, 0xa4, 0xc4, 0x01, 0x4a, 0x0b, - 0x00, 0x00, 0x25, 0x80, 0xa3, 0x01, 0x44, 0xc3, 0x00, 0x74, 0x25, 0x80, - 0x95, 0x01, 0x0f, 0x81, 0x70, 0x84, 0x01, 0x45, 0xc8, 0x00, 0x76, 0x25, - 0x00, 0xb4, 0x65, 0x42, 0x50, 0x02, 0x75, 0x25, 0x80, 0x3f, 0x48, 0x32, - 0x00, 0x02, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x07, 0x4c, - 0x0d, 0x23, 0x4a, 0x0b, 0x00, 0x3c, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x24, - 0x25, 0x00, 0x45, 0xc8, 0x00, 0x1c, 0x25, 0x00, 0x04, 0x1e, 0x00, 0x01, - 0xff, 0x44, 0xc3, 0x00, 0x18, 0xce, 0x01, 0x45, 0xc8, 0x00, 0x16, 0xce, - 0x41, 0x44, 0xc3, 0x00, 0x19, 0xce, 0x01, 0x45, 0xc8, 0x00, 0x17, 0xce, - 0x41, 0x05, 0x19, 0x00, 0x01, 0xff, 0xa8, 0x0c, 0x44, 0xc3, 0x00, 0x18, - 0x25, 0x00, 0x45, 0xc8, 0x00, 0x14, 0x25, 0x40, 0x49, 0xad, 0xb5, 0x7d, - 0x25, 0x00, 0x49, 0x0c, 0x00, 0x34, 0x25, 0x40, 0x51, 0x7d, 0x5b, 0x1d, - 0xcc, 0x01, 0x0b, 0xa4, 0x36, 0x01, 0xff, 0x4a, 0x0b, 0x00, 0x04, 0x25, - 0x00, 0x48, 0x32, 0x00, 0x06, 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x08, 0x25, - 0x00, 0x48, 0x32, 0x00, 0x0a, 0x25, 0x40, 0x50, 0x7a, 0x5e, 0x7c, 0x25, - 0x40, 0x80, 0x01, 0xff, 0x04, 0x1a, 0x00, 0x06, 0x54, 0xd6, 0x37, 0xaf, - 0xfb, 0x41, 0x4b, 0xcd, 0x02, 0x1c, 0xcc, 0x01, 0x4b, 0x98, 0x02, 0x1b, - 0xcc, 0x41, 0x08, 0x43, 0x25, 0x31, 0xaf, 0x01, 0xff, 0x0a, 0x3f, 0xb0, - 0x1e, 0x42, 0xa7, 0x01, 0x77, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, - 0xff, 0x4a, 0x0b, 0x00, 0x2c, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x10, 0x25, - 0x00, 0x45, 0xc8, 0x00, 0x0c, 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x4c, 0x25, - 0x00, 0x48, 0x32, 0x00, 0x4e, 0x25, 0x40, 0x45, 0x46, 0x10, 0x73, 0x25, - 0x00, 0x47, 0x88, 0x43, 0xae, 0xfb, 0x01, 0x0e, 0x6b, 0x03, 0x8a, 0x02, - 0x07, 0x7d, 0x02, 0xc2, 0x01, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x0a, 0x73, - 0x02, 0x6a, 0x08, 0x84, 0x02, 0x2d, 0x09, 0x10, 0x0f, 0x01, 0xff, 0x06, - 0x13, 0x01, 0x18, 0x07, 0x7d, 0x02, 0x01, 0xff, 0x55, 0x80, 0x03, 0xd9, - 0xfb, 0x01, 0x44, 0xc3, 0x00, 0xd1, 0xfb, 0xc1, 0x00, 0x4f, 0x86, 0x03, - 0xdd, 0xfb, 0x41, 0x46, 0x73, 0x02, 0xd6, 0xfb, 0x01, 0x44, 0xc3, 0x00, - 0x71, 0x25, 0x40, 0x06, 0x13, 0x01, 0x22, 0x07, 0x7d, 0x02, 0x01, 0xff, - 0x0a, 0x73, 0x02, 0x0d, 0x45, 0xc8, 0x00, 0xd2, 0xfb, 0xc1, 0x00, 0x4e, - 0x6b, 0x4b, 0xdf, 0xfb, 0x41, 0x4a, 0x6b, 0x03, 0xdb, 0xfb, 0x01, 0x4b, - 0x98, 0x02, 0xd8, 0xfb, 0x41, 0x46, 0x73, 0x02, 0xd4, 0xfb, 0x81, 0x06, - 0x45, 0xc8, 0x00, 0x72, 0x25, 0x40, 0x4f, 0x27, 0x18, 0xdc, 0xfb, 0x41, - 0x06, 0x13, 0x01, 0x3f, 0x07, 0x7d, 0x02, 0x01, 0xff, 0x44, 0xc3, 0x00, - 0xa0, 0xfb, 0x81, 0x1d, 0x45, 0xc8, 0x00, 0xa1, 0xfb, 0xc1, 0x00, 0x80, - 0x01, 0xff, 0x5f, 0xa2, 0x10, 0xa9, 0xfb, 0x01, 0x4f, 0x89, 0x02, 0xa5, - 0xfb, 0xc1, 0x00, 0x4f, 0x79, 0x02, 0xaa, 0xfb, 0x41, 0x80, 0x01, 0xff, - 0x60, 0x05, 0x0f, 0xa8, 0xfb, 0x01, 0x4f, 0x89, 0x02, 0xa4, 0xfb, 0xc1, - 0x00, 0x50, 0x22, 0x19, 0xab, 0xfb, 0x41, 0x44, 0xc3, 0x00, 0xd7, 0xfb, - 0x01, 0x45, 0xc8, 0x00, 0xd5, 0xfb, 0x41, 0x08, 0x84, 0x02, 0x1b, 0x09, - 0x10, 0x0f, 0x01, 0xff, 0x06, 0x13, 0x01, 0x06, 0x6b, 0x6d, 0x02, 0xad, - 0xfb, 0x41, 0x46, 0x73, 0x02, 0xa3, 0xfb, 0x01, 0x44, 0xc3, 0x00, 0xd0, - 0xfb, 0x41, 0x06, 0x13, 0x01, 0x0d, 0x5c, 0x16, 0x19, 0xa7, 0xfb, 0xc1, - 0x00, 0x50, 0x88, 0x02, 0xac, 0xfb, 0x41, 0x46, 0x73, 0x02, 0xa2, 0xfb, - 0x81, 0x06, 0x45, 0xc8, 0x00, 0xd3, 0xfb, 0x41, 0x50, 0x22, 0x19, 0xa6, - 0xfb, 0x41, 0x5c, 0x79, 0x03, 0xda, 0xfb, 0x01, 0x5b, 0x35, 0x1d, 0xde, - 0xfb, 0x41, 0x09, 0xc3, 0x47, 0x11, 0x07, 0x48, 0x5d, 0x01, 0xff, 0x44, - 0xc3, 0x00, 0x6f, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x70, 0x25, 0x40, 0x44, - 0xc3, 0x00, 0x6e, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x6d, 0x25, 0x40, 0x5d, - 0xfc, 0x14, 0x45, 0x25, 0x00, 0x10, 0x01, 0x15, 0x1c, 0x10, 0x1a, 0x63, - 0x06, 0x5d, 0x58, 0x16, 0x43, 0x25, 0x40, 0x4a, 0xfc, 0x14, 0x32, 0x25, - 0x00, 0x48, 0x58, 0x16, 0x3a, 0x25, 0x00, 0x4e, 0x06, 0x7d, 0x4a, 0x25, - 0x40, 0x4a, 0x6b, 0x16, 0x2d, 0x25, 0x00, 0x48, 0x11, 0x15, 0x35, 0x25, - 0x00, 0x4e, 0x14, 0x7d, 0x3d, 0x25, 0x40, 0x02, 0x3b, 0x01, 0x7d, 0x4a, - 0x0b, 0x00, 0x01, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x78, 0x25, 0x80, 0x6a, - 0x0f, 0x81, 0x70, 0x5a, 0x45, 0xc8, 0x00, 0x7a, 0x25, 0x00, 0x0c, 0xa3, - 0x36, 0x44, 0x42, 0x50, 0x02, 0x79, 0x25, 0x80, 0x1e, 0x48, 0x32, 0x00, - 0x03, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0x0b, 0x00, - 0x4b, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x2b, 0x25, 0x00, 0x45, 0xc8, 0x00, - 0x23, 0x25, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0x0b, 0x00, 0x3b, - 0x25, 0x00, 0xac, 0x06, 0x45, 0xc8, 0x00, 0x17, 0x25, 0x40, 0x43, 0xc4, - 0x00, 0x1b, 0x25, 0x00, 0x49, 0x66, 0x16, 0x7f, 0x25, 0x40, 0x4a, 0x0b, - 0x00, 0x05, 0x25, 0x00, 0x48, 0x32, 0x00, 0x07, 0x25, 0x40, 0x4a, 0x0b, - 0x00, 0x09, 0x25, 0x00, 0x48, 0x32, 0x00, 0x0b, 0x25, 0x40, 0x50, 0x8a, - 0x5e, 0x7e, 0x25, 0x40, 0x0a, 0x3f, 0xb0, 0x1e, 0x42, 0xa7, 0x01, 0x7b, - 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0x0b, 0x00, 0x33, - 0x25, 0x00, 0x44, 0xc3, 0x00, 0x13, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x0f, - 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x4d, 0x25, 0x00, 0x48, 0x32, 0x00, 0x4f, - 0x25, 0x40, 0x05, 0x3d, 0x01, 0x92, 0x01, 0x03, 0x51, 0x14, 0x01, 0xff, - 0x0b, 0x0b, 0x99, 0x77, 0x0a, 0x01, 0x15, 0x47, 0x0a, 0x1a, 0x63, 0x17, - 0x0b, 0x85, 0xa0, 0x01, 0xff, 0x51, 0x3b, 0x59, 0x64, 0x25, 0x00, 0x4b, - 0x65, 0x9c, 0x55, 0x25, 0x00, 0x4c, 0xb9, 0x92, 0x52, 0x25, 0x40, 0x50, - 0x93, 0x39, 0x2f, 0x25, 0x00, 0x05, 0xc3, 0x00, 0x16, 0x06, 0xc8, 0x00, - 0x06, 0x53, 0xcf, 0x4c, 0x47, 0x25, 0x40, 0x45, 0x01, 0x15, 0x0d, 0x25, - 0x00, 0x48, 0x58, 0x16, 0x21, 0x25, 0x40, 0x45, 0x01, 0x15, 0x11, 0x25, - 0x00, 0x48, 0x58, 0x16, 0x29, 0x25, 0x40, 0x50, 0xa8, 0x39, 0x30, 0x25, - 0x00, 0x05, 0xc3, 0x00, 0x16, 0x06, 0xc8, 0x00, 0x06, 0x53, 0xe2, 0x4c, - 0x41, 0x25, 0x40, 0x45, 0xc3, 0x01, 0x0e, 0x25, 0x00, 0x48, 0x11, 0x15, - 0x1f, 0x25, 0x40, 0x45, 0xc3, 0x01, 0x12, 0x25, 0x00, 0x48, 0x11, 0x15, - 0x27, 0x25, 0x40, 0x51, 0x4c, 0x59, 0x65, 0x25, 0x00, 0x4b, 0x70, 0x9c, - 0x56, 0x25, 0x00, 0x4c, 0xc5, 0x92, 0x53, 0x25, 0x40, 0xa4, 0x3a, 0x4a, - 0x0b, 0x00, 0x50, 0x25, 0x00, 0x07, 0x48, 0x5d, 0x1e, 0x48, 0x32, 0x00, - 0x51, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0x0b, 0x00, - 0x6c, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x63, 0x25, 0x00, 0x45, 0xc8, 0x00, - 0x60, 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x69, 0x25, 0x00, 0x44, 0xc3, 0x00, - 0x5d, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x5a, 0x25, 0x40, 0x08, 0x43, 0x25, - 0x17, 0x08, 0xc4, 0x47, 0x01, 0xff, 0x4a, 0x0b, 0x00, 0x66, 0x25, 0x00, - 0x44, 0xc3, 0x00, 0x57, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x54, 0x25, 0x40, - 0x6a, 0x6b, 0x03, 0x09, 0xce, 0x01, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x08, - 0x84, 0x02, 0x06, 0x53, 0x66, 0x4b, 0x1f, 0xcc, 0x41, 0x4b, 0xcd, 0x02, - 0x20, 0xcc, 0x01, 0x5c, 0x1a, 0x18, 0x0a, 0xce, 0x41, 0x4a, 0x65, 0xa3, - 0xf9, 0xf3, 0x01, 0xac, 0x18, 0x43, 0x37, 0x25, 0xc8, 0x22, 0xc0, 0x00, - 0x06, 0x50, 0x00, 0x01, 0xff, 0x4f, 0xcf, 0x6d, 0xd1, 0x29, 0x00, 0x50, - 0x3a, 0x65, 0xd2, 0x29, 0x40, 0x80, 0x06, 0x43, 0xa1, 0x01, 0xb3, 0xf3, - 0x41, 0x4a, 0x57, 0xac, 0x4f, 0xf5, 0x01, 0x4a, 0x43, 0xb1, 0x63, 0xf9, - 0x41, 0x4b, 0x7a, 0x95, 0x95, 0xf3, 0x41, 0x54, 0x17, 0x43, 0x7e, 0xf3, - 0x01, 0x03, 0x81, 0x05, 0x01, 0xff, 0x57, 0x38, 0x1b, 0x3b, 0x29, 0x00, - 0x4d, 0x23, 0x0b, 0xdf, 0x23, 0x00, 0x05, 0x22, 0x00, 0x65, 0x15, 0xb0, - 0x3b, 0x55, 0x05, 0xc3, 0x00, 0x37, 0x4b, 0x50, 0x21, 0xdd, 0x23, 0x00, - 0x06, 0xc8, 0x00, 0x13, 0x4e, 0x27, 0x26, 0xb5, 0x23, 0x80, 0x06, 0x56, - 0x05, 0x09, 0xe1, 0x23, 0x40, 0x58, 0x1d, 0x26, 0xb6, 0x23, 0x40, 0xa3, - 0x0c, 0x4c, 0xcd, 0x8d, 0x25, 0x2e, 0x00, 0x69, 0x63, 0x04, 0xee, 0xfb, - 0x41, 0x45, 0xcf, 0x0a, 0x1f, 0x23, 0x00, 0x43, 0xd8, 0x0c, 0x0c, 0x23, - 0x40, 0xa3, 0x0c, 0x4c, 0xcd, 0x8d, 0x24, 0x2e, 0x00, 0x6a, 0xed, 0x02, - 0xed, 0xfb, 0x41, 0x45, 0xcf, 0x0a, 0x1e, 0x23, 0x00, 0x43, 0xd8, 0x0c, - 0x0d, 0x23, 0x40, 0x4c, 0xe1, 0x02, 0xea, 0xfb, 0x01, 0x4c, 0xe3, 0x10, - 0xe2, 0xfb, 0x41, 0x4c, 0xe1, 0x02, 0xcb, 0x2b, 0x00, 0x10, 0xda, 0x61, - 0x50, 0x48, 0xf3, 0x25, 0x21, 0x23, 0x00, 0x04, 0xc3, 0x00, 0x28, 0x05, - 0xc8, 0x00, 0x06, 0x4f, 0xda, 0x71, 0xe7, 0xcd, 0x41, 0x4c, 0x4f, 0x21, - 0x5c, 0x2e, 0x00, 0x09, 0xe1, 0x61, 0x01, 0xff, 0x44, 0xf8, 0x42, 0x5f, - 0xcc, 0x01, 0x0c, 0x8d, 0x94, 0x01, 0xff, 0xd1, 0xe9, 0xcd, 0x01, 0xd2, - 0xeb, 0xcd, 0x41, 0x4c, 0x4f, 0x21, 0x5b, 0x2e, 0x00, 0x09, 0xe1, 0x61, - 0x01, 0xff, 0x44, 0xf8, 0x42, 0x5d, 0xcc, 0x01, 0x0c, 0x8d, 0x94, 0x01, - 0xff, 0xd1, 0xed, 0xcd, 0x01, 0xd2, 0xef, 0xcd, 0x41, 0x44, 0xf8, 0x42, - 0x5e, 0xcc, 0x01, 0x0c, 0x8d, 0x94, 0x01, 0xff, 0xd1, 0xf1, 0xcd, 0x01, - 0xd2, 0xf2, 0xcd, 0x01, 0xd3, 0xf3, 0xcd, 0x01, 0xd4, 0xf4, 0xcd, 0x41, - 0x0d, 0x49, 0x81, 0xc5, 0x02, 0x07, 0xc1, 0x05, 0x01, 0xff, 0xe1, 0x1a, - 0x31, 0x80, 0x8f, 0x02, 0xe2, 0x05, 0x31, 0x80, 0x85, 0x02, 0xe3, 0x18, - 0x31, 0x80, 0xfb, 0x01, 0xe4, 0x09, 0x31, 0x00, 0xe5, 0x1c, 0x31, 0x80, - 0xd4, 0x01, 0xe6, 0x08, 0x31, 0x00, 0xe7, 0x0d, 0x31, 0x80, 0xba, 0x01, - 0xe8, 0x0f, 0x31, 0x00, 0xe9, 0x27, 0x31, 0x80, 0x95, 0x01, 0xea, 0x10, - 0x31, 0x80, 0x8b, 0x01, 0xeb, 0x0e, 0x31, 0x80, 0x81, 0x01, 0xec, 0x0c, - 0x31, 0x80, 0x78, 0xed, 0x07, 0x31, 0x00, 0xee, 0x0b, 0x31, 0x80, 0x62, - 0xef, 0x1b, 0x31, 0x80, 0x3d, 0xf0, 0x06, 0x31, 0x00, 0xf1, 0x11, 0x31, - 0x00, 0xf2, 0x16, 0x31, 0x00, 0xf3, 0x19, 0x31, 0x80, 0x28, 0xf4, 0x0a, - 0x31, 0x00, 0xf5, 0x28, 0x31, 0x80, 0x19, 0xf6, 0x2a, 0x31, 0x00, 0xf8, - 0x12, 0x31, 0x00, 0xfa, 0x17, 0x31, 0xc0, 0x00, 0xe8, 0x13, 0x31, 0x00, - 0xe9, 0xa1, 0x31, 0x00, 0xf9, 0xba, 0x31, 0x40, 0x42, 0xac, 0x1e, 0xab, - 0x31, 0x40, 0xe8, 0x15, 0x31, 0x40, 0x4f, 0xa5, 0x3a, 0x2e, 0x31, 0x00, - 0xe5, 0xbe, 0x31, 0x00, 0xed, 0xb1, 0x31, 0x00, 0xae, 0x08, 0xef, 0xa6, - 0x31, 0x00, 0xf5, 0x21, 0x31, 0x40, 0xe7, 0xb2, 0x31, 0x00, 0xee, 0xa7, - 0x31, 0x40, 0xe7, 0x2b, 0x31, 0x80, 0x04, 0xee, 0x2f, 0x31, 0x40, 0xe7, - 0xad, 0x31, 0x40, 0xe8, 0xb9, 0x31, 0x40, 0xf7, 0xbd, 0x31, 0x40, 0xe9, - 0xa2, 0x31, 0x40, 0xe8, 0x2d, 0x31, 0x00, 0xed, 0xac, 0x31, 0x00, 0x42, - 0xac, 0x1e, 0xaa, 0x31, 0x80, 0x08, 0xf2, 0xa8, 0x31, 0x00, 0xf5, 0x29, - 0x31, 0x40, 0xee, 0xb3, 0x31, 0x40, 0xe8, 0xb8, 0x31, 0x00, 0xee, 0x2c, - 0x31, 0x00, 0xf5, 0xa3, 0x31, 0x00, 0xf7, 0xbc, 0x31, 0x40, 0xe5, 0xa4, - 0x31, 0x00, 0xe8, 0x1d, 0x31, 0x00, 0xe9, 0x1f, 0x31, 0x00, 0xee, 0x23, - 0x31, 0x80, 0x04, 0xf2, 0x26, 0x31, 0x40, 0xe7, 0x25, 0x31, 0x00, 0xee, - 0xa5, 0x31, 0x40, 0xe8, 0x14, 0x31, 0x40, 0xf5, 0xa0, 0x31, 0x40, 0xe8, - 0xbf, 0x31, 0x00, 0xe9, 0x1e, 0x31, 0x80, 0x1c, 0xed, 0xb0, 0x31, 0x00, - 0xee, 0x22, 0x31, 0x80, 0x0b, 0xf5, 0x20, 0x31, 0xc0, 0x00, 0x42, 0xac, - 0x1e, 0xaf, 0x31, 0x40, 0xe7, 0x24, 0x31, 0x00, 0xee, 0xa9, 0x31, 0x40, - 0x42, 0xac, 0x1e, 0xae, 0x31, 0x40, 0xe7, 0xbb, 0x31, 0x00, 0xe8, 0xb7, - 0x31, 0x00, 0xeb, 0xb6, 0x31, 0x00, 0xf0, 0xb4, 0x31, 0x00, 0xf4, 0xb5, - 0x31, 0x40, 0xeb, 0x6e, 0xf5, 0x81, 0x06, 0x46, 0x07, 0xd1, 0x83, 0xfa, - 0x41, 0x44, 0xb9, 0x00, 0x16, 0xf5, 0x81, 0x04, 0xf3, 0xda, 0xf4, 0x41, - 0x45, 0xd1, 0xde, 0xd1, 0xf4, 0x41, 0x55, 0xf7, 0x39, 0xbd, 0xf7, 0x01, - 0x54, 0x4b, 0x41, 0xb1, 0xf7, 0x01, 0x4b, 0x9f, 0x5f, 0xa4, 0xf7, 0x01, - 0xb3, 0x11, 0x06, 0xad, 0x02, 0x01, 0xff, 0x46, 0xe7, 0x02, 0x86, 0xf7, - 0x01, 0x46, 0xab, 0x05, 0x90, 0xf7, 0x41, 0x46, 0xa7, 0x18, 0xab, 0xf7, - 0x01, 0x52, 0xb6, 0x51, 0xb7, 0xf7, 0x41, 0xa1, 0xe8, 0x0a, 0xaf, 0x19, - 0x02, 0x87, 0x13, 0x01, 0xff, 0x80, 0x06, 0x47, 0xad, 0xcc, 0xd0, 0xfa, - 0x41, 0x44, 0x0e, 0xec, 0xd8, 0xf4, 0x01, 0x45, 0x24, 0x21, 0x99, 0xf4, - 0x41, 0x03, 0xe4, 0x02, 0x0c, 0x44, 0x03, 0xbf, 0x3c, 0xf3, 0x01, 0x45, - 0x1c, 0xe9, 0x21, 0xf4, 0x41, 0x07, 0xd5, 0xd0, 0x95, 0x02, 0x08, 0x1a, - 0xc8, 0x01, 0xff, 0xd1, 0x00, 0xfb, 0x81, 0x87, 0x01, 0xd2, 0x01, 0xfb, - 0x81, 0x43, 0xd3, 0x03, 0xfb, 0x81, 0x1f, 0xd4, 0x07, 0xfb, 0x81, 0x0d, - 0xd5, 0x0f, 0xfb, 0x81, 0x04, 0xd6, 0x1e, 0xfb, 0x41, 0xd6, 0x2d, 0xfb, - 0x41, 0xd5, 0x16, 0xfb, 0x81, 0x04, 0xd6, 0x26, 0xfb, 0x41, 0xd6, 0x35, - 0xfb, 0x41, 0xd4, 0x0b, 0xfb, 0x81, 0x0d, 0xd5, 0x13, 0xfb, 0x81, 0x04, - 0xd6, 0x22, 0xfb, 0x41, 0xd6, 0x31, 0xfb, 0x41, 0xd5, 0x1a, 0xfb, 0x81, - 0x04, 0xd6, 0x29, 0xfb, 0x41, 0xd6, 0x39, 0xfb, 0x41, 0xd3, 0x05, 0xfb, - 0x81, 0x1b, 0xd4, 0x09, 0xfb, 0x81, 0x0d, 0xd5, 0x11, 0xfb, 0x81, 0x04, - 0xd6, 0x20, 0xfb, 0x41, 0xd6, 0x2f, 0xfb, 0x41, 0xd5, 0x18, 0xfb, 0xc1, - 0x00, 0xd6, 0x37, 0xfb, 0x41, 0xd4, 0x0d, 0xfb, 0x81, 0x0d, 0xd5, 0x14, - 0xfb, 0x81, 0x04, 0xd6, 0x24, 0xfb, 0x41, 0xd6, 0x33, 0xfb, 0x41, 0xd5, - 0x1c, 0xfb, 0x81, 0x04, 0xd6, 0x2b, 0xfb, 0x41, 0xd6, 0x3b, 0xfb, 0x41, - 0xd2, 0x02, 0xfb, 0x81, 0x40, 0xd3, 0x04, 0xfb, 0x81, 0x1f, 0xd4, 0x08, - 0xfb, 0x81, 0x0d, 0xd5, 0x10, 0xfb, 0x81, 0x04, 0xd6, 0x1f, 0xfb, 0x41, - 0xd6, 0x2e, 0xfb, 0x41, 0xd5, 0x17, 0xfb, 0x81, 0x04, 0xd6, 0x27, 0xfb, - 0x41, 0xd6, 0x36, 0xfb, 0x41, 0xd4, 0x0c, 0xfb, 0x81, 0x0a, 0x42, 0x7a, - 0xc0, 0x32, 0xfb, 0x01, 0xd6, 0x23, 0xfb, 0x41, 0xd5, 0x1b, 0xfb, 0x81, - 0x04, 0xd6, 0x2a, 0xfb, 0x41, 0xd6, 0x3a, 0xfb, 0x41, 0xd3, 0x06, 0xfb, - 0x81, 0x1f, 0xd4, 0x0a, 0xfb, 0x81, 0x0d, 0xd5, 0x12, 0xfb, 0x81, 0x04, - 0xd6, 0x21, 0xfb, 0x41, 0xd6, 0x30, 0xfb, 0x41, 0xd5, 0x19, 0xfb, 0x81, - 0x04, 0xd6, 0x28, 0xfb, 0x41, 0xd6, 0x38, 0xfb, 0x41, 0xd4, 0x0e, 0xfb, - 0x81, 0x0d, 0xd5, 0x15, 0xfb, 0x81, 0x04, 0xd6, 0x25, 0xfb, 0x41, 0xd6, - 0x34, 0xfb, 0x41, 0xd5, 0x1d, 0xfb, 0x01, 0xd6, 0x2c, 0xfb, 0x41, 0x91, - 0x86, 0x04, 0x92, 0xf7, 0x01, 0xd3, 0x00, 0xcd, 0x81, 0x6f, 0xd4, 0x03, - 0xcd, 0x81, 0x2a, 0xd5, 0x09, 0xcd, 0x81, 0x0e, 0xd6, 0x18, 0xcd, 0xc1, - 0x00, 0xd7, 0x51, 0xcd, 0xc1, 0x00, 0xd8, 0xcb, 0xcd, 0x41, 0xd6, 0x27, - 0xcd, 0x81, 0x0a, 0x42, 0xba, 0xf1, 0xbb, 0xcd, 0x01, 0xd8, 0x80, 0xcd, - 0x41, 0xd7, 0x61, 0xcd, 0x01, 0xd8, 0x9c, 0xcd, 0x41, 0xd5, 0x10, 0xcd, - 0x81, 0x1c, 0x96, 0x0d, 0xd7, 0x3d, 0xcd, 0x81, 0x04, 0xd8, 0x78, 0xcd, - 0x41, 0xd8, 0xb3, 0xcd, 0x41, 0xd7, 0x59, 0xcd, 0x81, 0x04, 0xd8, 0x96, - 0xcd, 0x41, 0xd8, 0xd3, 0xcd, 0x41, 0xd6, 0x2f, 0xcd, 0x81, 0x0d, 0xd7, - 0x4b, 0xcd, 0x81, 0x04, 0xd8, 0x88, 0xcd, 0x41, 0xd8, 0xc3, 0xcd, 0x41, - 0xd7, 0x69, 0xcd, 0x81, 0x04, 0xd8, 0xa4, 0xcd, 0x41, 0xd8, 0xe1, 0xcd, - 0x41, 0xd4, 0x06, 0xcd, 0x81, 0x40, 0x95, 0x1f, 0xd6, 0x1c, 0xcd, 0x81, - 0x0d, 0xd7, 0x39, 0xcd, 0x81, 0x04, 0xd8, 0x74, 0xcd, 0x41, 0xd8, 0xaf, - 0xcd, 0x41, 0xd7, 0x55, 0xcd, 0x81, 0x04, 0xd8, 0x93, 0xcd, 0x41, 0xd8, - 0xcf, 0xcd, 0x41, 0xd6, 0x2b, 0xcd, 0x81, 0x0d, 0xd7, 0x48, 0xcd, 0x81, - 0x04, 0xd8, 0x84, 0xcd, 0x41, 0xd8, 0xbf, 0xcd, 0x41, 0xd7, 0x65, 0xcd, - 0x81, 0x04, 0xd8, 0xa0, 0xcd, 0x41, 0xd8, 0xde, 0xcd, 0x41, 0xd5, 0x14, - 0xcd, 0x81, 0x1f, 0xd6, 0x23, 0xcd, 0x81, 0x0d, 0xd7, 0x41, 0xcd, 0x81, - 0x04, 0xd8, 0x7c, 0xcd, 0x41, 0xd8, 0xb7, 0xcd, 0x41, 0xd7, 0x5d, 0xcd, - 0x81, 0x04, 0xd8, 0x99, 0xcd, 0x41, 0xd8, 0xd7, 0xcd, 0x41, 0xd6, 0x33, - 0xcd, 0x81, 0x0d, 0xd7, 0x4e, 0xcd, 0x81, 0x04, 0xd8, 0x8c, 0xcd, 0x41, - 0xd8, 0xc7, 0xcd, 0x41, 0xd7, 0x6d, 0xcd, 0x01, 0xd8, 0xa8, 0xcd, 0x41, - 0xd3, 0x01, 0xcd, 0x81, 0x7c, 0x94, 0x43, 0xd5, 0x0b, 0xcd, 0x81, 0x1f, - 0xd6, 0x1a, 0xcd, 0x81, 0x0d, 0xd7, 0x37, 0xcd, 0x81, 0x04, 0xd8, 0x72, - 0xcd, 0x41, 0xd8, 0xad, 0xcd, 0x41, 0xd7, 0x53, 0xcd, 0x81, 0x04, 0xd8, - 0x91, 0xcd, 0x41, 0xd8, 0xcd, 0xcd, 0x41, 0xd6, 0x29, 0xcd, 0x81, 0x0d, - 0xd7, 0x46, 0xcd, 0x81, 0x04, 0xd8, 0x82, 0xcd, 0x41, 0xd8, 0xbd, 0xcd, - 0x41, 0xd7, 0x63, 0xcd, 0x81, 0x04, 0xd8, 0x9e, 0xcd, 0x41, 0xd8, 0xdc, - 0xcd, 0x41, 0xd5, 0x12, 0xcd, 0x81, 0x1b, 0xd6, 0x21, 0xcd, 0x81, 0x0d, - 0xd7, 0x3f, 0xcd, 0x81, 0x04, 0xd8, 0x7a, 0xcd, 0x41, 0xd8, 0xb5, 0xcd, - 0x41, 0xd7, 0x5b, 0xcd, 0xc1, 0x00, 0xd8, 0xd5, 0xcd, 0x41, 0xd6, 0x31, - 0xcd, 0x81, 0x0a, 0x42, 0xba, 0xf1, 0xc5, 0xcd, 0x01, 0xd8, 0x8a, 0xcd, - 0x41, 0xd7, 0x6b, 0xcd, 0x01, 0xd8, 0xa6, 0xcd, 0x41, 0xd4, 0x08, 0xcd, - 0x81, 0x43, 0xd5, 0x0e, 0xcd, 0x81, 0x1f, 0xd6, 0x1e, 0xcd, 0x81, 0x0d, - 0xd7, 0x3b, 0xcd, 0x81, 0x04, 0xd8, 0x76, 0xcd, 0x41, 0xd8, 0xb1, 0xcd, - 0x41, 0xd7, 0x57, 0xcd, 0x81, 0x04, 0xd8, 0x94, 0xcd, 0x41, 0xd8, 0xd1, - 0xcd, 0x41, 0xd6, 0x2d, 0xcd, 0x81, 0x0d, 0xd7, 0x49, 0xcd, 0x81, 0x04, - 0xd8, 0x86, 0xcd, 0x41, 0xd8, 0xc1, 0xcd, 0x41, 0xd7, 0x67, 0xcd, 0x81, - 0x04, 0xd8, 0xa2, 0xcd, 0x41, 0xd8, 0xdf, 0xcd, 0x41, 0xd5, 0x16, 0xcd, - 0x81, 0x1f, 0xd6, 0x25, 0xcd, 0x81, 0x0d, 0xd7, 0x43, 0xcd, 0x81, 0x04, - 0xd8, 0x7e, 0xcd, 0x41, 0xd8, 0xb9, 0xcd, 0x41, 0xd7, 0x5f, 0xcd, 0x81, - 0x04, 0xd8, 0x9b, 0xcd, 0x41, 0xd8, 0xd9, 0xcd, 0x41, 0xd6, 0x35, 0xcd, - 0x81, 0x0d, 0xd7, 0x50, 0xcd, 0x81, 0x04, 0xd8, 0x8e, 0xcd, 0x41, 0xd8, - 0xc9, 0xcd, 0x41, 0xd7, 0x6f, 0xcd, 0x81, 0x04, 0xd8, 0xaa, 0xcd, 0x41, - 0xd8, 0xe5, 0xcd, 0x41, 0x92, 0x8d, 0x02, 0x93, 0x8b, 0x01, 0xd4, 0x04, - 0xcd, 0x81, 0x43, 0xd5, 0x0a, 0xcd, 0x81, 0x1f, 0xd6, 0x19, 0xcd, 0x81, - 0x0d, 0xd7, 0x36, 0xcd, 0x81, 0x04, 0xd8, 0x71, 0xcd, 0x41, 0xd8, 0xac, - 0xcd, 0x41, 0xd7, 0x52, 0xcd, 0x81, 0x04, 0xd8, 0x90, 0xcd, 0x41, 0xd8, - 0xcc, 0xcd, 0x41, 0xd6, 0x28, 0xcd, 0x81, 0x0d, 0xd7, 0x45, 0xcd, 0x81, - 0x04, 0xd8, 0x81, 0xcd, 0x41, 0xd8, 0xbc, 0xcd, 0x41, 0xd7, 0x62, 0xcd, - 0x81, 0x04, 0xd8, 0x9d, 0xcd, 0x41, 0xd8, 0xdb, 0xcd, 0x41, 0xd5, 0x11, - 0xcd, 0x81, 0x1f, 0xd6, 0x20, 0xcd, 0x81, 0x0d, 0xd7, 0x3e, 0xcd, 0x81, - 0x04, 0xd8, 0x79, 0xcd, 0x41, 0xd8, 0xb4, 0xcd, 0x41, 0xd7, 0x5a, 0xcd, - 0x81, 0x04, 0xd8, 0x97, 0xcd, 0x41, 0xd8, 0xd4, 0xcd, 0x41, 0xd6, 0x30, - 0xcd, 0x81, 0x0d, 0xd7, 0x4c, 0xcd, 0x81, 0x04, 0xd8, 0x89, 0xcd, 0x41, - 0xd8, 0xc4, 0xcd, 0x41, 0xd7, 0x6a, 0xcd, 0x81, 0x04, 0xd8, 0xa5, 0xcd, - 0x41, 0xd8, 0xe2, 0xcd, 0x41, 0xd4, 0x07, 0xcd, 0x81, 0x37, 0xd5, 0x0d, - 0xcd, 0x81, 0x1b, 0xd6, 0x1d, 0xcd, 0x81, 0x0d, 0xd7, 0x3a, 0xcd, 0x81, - 0x04, 0xd8, 0x75, 0xcd, 0x41, 0xd8, 0xb0, 0xcd, 0x41, 0xd7, 0x56, 0xcd, - 0xc1, 0x00, 0xd8, 0xd0, 0xcd, 0x41, 0xd6, 0x2c, 0xcd, 0x81, 0x0a, 0x42, - 0xba, 0xf1, 0xc0, 0xcd, 0x01, 0xd8, 0x85, 0xcd, 0x41, 0xd7, 0x66, 0xcd, - 0x01, 0xd8, 0xa1, 0xcd, 0x41, 0xd5, 0x15, 0xcd, 0x81, 0x1f, 0xd6, 0x24, - 0xcd, 0x81, 0x0d, 0xd7, 0x42, 0xcd, 0x81, 0x04, 0xd8, 0x7d, 0xcd, 0x41, - 0xd8, 0xb8, 0xcd, 0x41, 0xd7, 0x5e, 0xcd, 0x81, 0x04, 0xd8, 0x9a, 0xcd, - 0x41, 0xd8, 0xd8, 0xcd, 0x41, 0xd6, 0x34, 0xcd, 0x81, 0x0d, 0xd7, 0x4f, - 0xcd, 0x81, 0x04, 0xd8, 0x8d, 0xcd, 0x41, 0xd8, 0xc8, 0xcd, 0x41, 0xd7, - 0x6e, 0xcd, 0x81, 0x04, 0xd8, 0xa9, 0xcd, 0x41, 0xd8, 0xe4, 0xcd, 0x41, - 0xd3, 0x02, 0xcd, 0x81, 0x8b, 0x01, 0xd4, 0x05, 0xcd, 0x81, 0x43, 0xd5, - 0x0c, 0xcd, 0x81, 0x1f, 0xd6, 0x1b, 0xcd, 0x81, 0x0d, 0xd7, 0x38, 0xcd, - 0x81, 0x04, 0xd8, 0x73, 0xcd, 0x41, 0xd8, 0xae, 0xcd, 0x41, 0xd7, 0x54, - 0xcd, 0x81, 0x04, 0xd8, 0x92, 0xcd, 0x41, 0xd8, 0xce, 0xcd, 0x41, 0xd6, - 0x2a, 0xcd, 0x81, 0x0d, 0xd7, 0x47, 0xcd, 0x81, 0x04, 0xd8, 0x83, 0xcd, - 0x41, 0xd8, 0xbe, 0xcd, 0x41, 0xd7, 0x64, 0xcd, 0x81, 0x04, 0xd8, 0x9f, - 0xcd, 0x41, 0xd8, 0xdd, 0xcd, 0x41, 0xd5, 0x13, 0xcd, 0x81, 0x1f, 0xd6, - 0x22, 0xcd, 0x81, 0x0d, 0xd7, 0x40, 0xcd, 0x81, 0x04, 0xd8, 0x7b, 0xcd, - 0x41, 0xd8, 0xb6, 0xcd, 0x41, 0xd7, 0x5c, 0xcd, 0x81, 0x04, 0xd8, 0x98, - 0xcd, 0x41, 0xd8, 0xd6, 0xcd, 0x41, 0xd6, 0x32, 0xcd, 0x81, 0x0d, 0xd7, - 0x4d, 0xcd, 0x81, 0x04, 0xd8, 0x8b, 0xcd, 0x41, 0xd8, 0xc6, 0xcd, 0x41, - 0xd7, 0x6c, 0xcd, 0x81, 0x04, 0xd8, 0xa7, 0xcd, 0x41, 0xd8, 0xe3, 0xcd, - 0x41, 0x94, 0x43, 0xd5, 0x0f, 0xcd, 0x81, 0x1f, 0xd6, 0x1f, 0xcd, 0x81, - 0x0d, 0xd7, 0x3c, 0xcd, 0x81, 0x04, 0xd8, 0x77, 0xcd, 0x41, 0xd8, 0xb2, - 0xcd, 0x41, 0xd7, 0x58, 0xcd, 0x81, 0x04, 0xd8, 0x95, 0xcd, 0x41, 0xd8, - 0xd2, 0xcd, 0x41, 0xd6, 0x2e, 0xcd, 0x81, 0x0d, 0xd7, 0x4a, 0xcd, 0x81, - 0x04, 0xd8, 0x87, 0xcd, 0x41, 0xd8, 0xc2, 0xcd, 0x41, 0xd7, 0x68, 0xcd, - 0x81, 0x04, 0xd8, 0xa3, 0xcd, 0x41, 0xd8, 0xe0, 0xcd, 0x41, 0xd5, 0x17, - 0xcd, 0x81, 0x1b, 0xd6, 0x26, 0xcd, 0x81, 0x0d, 0xd7, 0x44, 0xcd, 0x81, - 0x04, 0xd8, 0x7f, 0xcd, 0x41, 0xd8, 0xba, 0xcd, 0x41, 0xd7, 0x60, 0xcd, - 0xc1, 0x00, 0xd8, 0xda, 0xcd, 0x41, 0x96, 0x0a, 0x42, 0xba, 0xf1, 0xca, - 0xcd, 0x01, 0xd8, 0x8f, 0xcd, 0x41, 0xd7, 0x70, 0xcd, 0x01, 0xd8, 0xab, - 0xcd, 0x41, 0x02, 0x36, 0x01, 0x06, 0x49, 0x76, 0x97, 0x22, 0x24, 0x40, - 0x80, 0x32, 0x8d, 0x01, 0xff, 0x0a, 0xa0, 0x19, 0x19, 0x0f, 0xed, 0x6d, - 0x01, 0xff, 0xe3, 0x2d, 0x21, 0x00, 0xe8, 0x0c, 0x21, 0x00, 0xe9, 0x11, - 0x21, 0x00, 0xf2, 0x1c, 0x21, 0x00, 0xfa, 0x28, 0x21, 0x40, 0x50, 0x1f, - 0x23, 0xb6, 0x27, 0x00, 0x50, 0xb3, 0x02, 0xb5, 0x27, 0x00, 0x50, 0x83, - 0x3f, 0xb4, 0x27, 0x40, 0x46, 0x5a, 0xd7, 0xd3, 0x29, 0x00, 0xa3, 0xb4, - 0x07, 0xa4, 0xc4, 0x06, 0xa6, 0xa4, 0x06, 0xa8, 0xf7, 0x05, 0xac, 0xd4, - 0x04, 0xad, 0xe5, 0x03, 0xae, 0xd6, 0x03, 0x47, 0xce, 0xd0, 0xc4, 0x2b, - 0x00, 0xb0, 0xb1, 0x03, 0x56, 0xb1, 0x35, 0x53, 0x27, 0x00, 0xb2, 0xaa, - 0x02, 0xb3, 0x9f, 0x01, 0xb4, 0x6f, 0xb5, 0x2c, 0x03, 0x32, 0x00, 0x01, - 0xff, 0x06, 0x35, 0x00, 0x17, 0x08, 0x35, 0x0a, 0x01, 0xff, 0x47, 0x88, - 0x43, 0x98, 0xf7, 0x01, 0x47, 0x19, 0x0a, 0x9e, 0xf7, 0x01, 0x46, 0xab, - 0x05, 0x1d, 0x2b, 0x40, 0x47, 0x63, 0x65, 0x2e, 0x2b, 0x00, 0x49, 0x3a, - 0x46, 0xae, 0x25, 0x40, 0x59, 0x8d, 0x24, 0x7b, 0x26, 0x00, 0xb0, 0x01, - 0xff, 0x58, 0x35, 0x26, 0xa2, 0xf5, 0x01, 0x0a, 0x3d, 0x0b, 0x16, 0x04, - 0x6f, 0x02, 0x06, 0x5b, 0xcf, 0x01, 0x9d, 0x2b, 0x40, 0x4d, 0x7d, 0x34, - 0xe4, 0x25, 0x00, 0x4e, 0xc7, 0x28, 0xe5, 0x25, 0x40, 0x4f, 0xa5, 0x6a, - 0xeb, 0x23, 0x00, 0x58, 0xbd, 0x28, 0x81, 0xf7, 0x01, 0x4e, 0xd7, 0x0b, - 0xb4, 0x25, 0x00, 0x48, 0x01, 0x02, 0xb2, 0x25, 0x40, 0x48, 0x47, 0x3c, - 0x0e, 0x26, 0x00, 0x04, 0x5a, 0xed, 0x12, 0x52, 0x0c, 0x53, 0x7f, 0xf5, - 0x01, 0x44, 0xad, 0x75, 0xdf, 0x26, 0x00, 0x57, 0x21, 0x31, 0xd6, 0x26, - 0x40, 0x47, 0x88, 0x43, 0x97, 0xf7, 0x01, 0x47, 0x19, 0x0a, 0x9d, 0xf7, - 0x01, 0x46, 0xab, 0x05, 0x8c, 0xf7, 0x41, 0x4e, 0x2a, 0x74, 0x00, 0x27, - 0x00, 0x47, 0x62, 0x3d, 0x02, 0x27, 0x00, 0x4a, 0x1b, 0x5e, 0x17, 0x26, - 0x00, 0x53, 0x78, 0x49, 0x71, 0xf5, 0x01, 0x0e, 0x28, 0x78, 0x60, 0xad, - 0x34, 0x46, 0x7a, 0xdb, 0xc7, 0x26, 0x00, 0x49, 0x7a, 0xbb, 0x60, 0x26, - 0x00, 0x45, 0xac, 0x05, 0xa0, 0x25, 0x80, 0x0c, 0x43, 0xe3, 0x12, 0x05, - 0x26, 0x00, 0x4c, 0x81, 0x94, 0x00, 0x26, 0x40, 0x80, 0x01, 0xff, 0x46, - 0x45, 0x8b, 0x32, 0xf5, 0x01, 0x47, 0x3f, 0x67, 0xc0, 0x2b, 0x00, 0x48, - 0xaa, 0xc3, 0xf9, 0x23, 0x40, 0x04, 0x0e, 0x07, 0x06, 0x4a, 0x93, 0x93, - 0x3b, 0x26, 0x40, 0x47, 0x88, 0x43, 0x29, 0x2b, 0x00, 0x47, 0x19, 0x0a, - 0x2a, 0x2b, 0x00, 0xb3, 0x06, 0x53, 0xf5, 0x4c, 0xcd, 0xfb, 0x41, 0x45, - 0xac, 0x05, 0xaa, 0x25, 0x00, 0x43, 0xe3, 0x12, 0x51, 0x2b, 0x40, 0x46, - 0xe7, 0x02, 0x84, 0xf7, 0x01, 0x46, 0xab, 0x05, 0x8d, 0xf7, 0x41, 0x48, - 0x3b, 0x46, 0xac, 0x25, 0x00, 0x04, 0xc9, 0x00, 0x06, 0x46, 0xf2, 0xdb, - 0xf6, 0xf3, 0x41, 0x80, 0x56, 0x0a, 0x3d, 0x0b, 0x1e, 0x06, 0xa9, 0x01, - 0x01, 0xff, 0x45, 0xce, 0x00, 0xa1, 0x27, 0x80, 0x0c, 0x46, 0x2a, 0x21, - 0x4d, 0x20, 0x00, 0x55, 0xd5, 0x01, 0x9e, 0x2b, 0x40, 0x44, 0xe6, 0x01, - 0xa4, 0x27, 0x40, 0x4f, 0xa5, 0x6a, 0xe9, 0x23, 0x80, 0x27, 0x58, 0xbd, - 0x28, 0x82, 0xf7, 0x01, 0xb0, 0x13, 0x4e, 0xd7, 0x0b, 0xb8, 0x25, 0x00, - 0x48, 0x01, 0x02, 0xb6, 0x25, 0xc0, 0x00, 0x59, 0xb2, 0x22, 0xef, 0x23, - 0x40, 0x47, 0x3b, 0xc7, 0x53, 0x2b, 0x00, 0x46, 0xa1, 0x48, 0xba, 0x25, - 0x40, 0x52, 0xf8, 0x1d, 0xed, 0x23, 0x40, 0x09, 0x9c, 0x01, 0x06, 0x4e, - 0xee, 0x7b, 0xb3, 0xce, 0x41, 0x4e, 0x3f, 0x26, 0x9d, 0xf5, 0x01, 0x45, - 0x40, 0x13, 0x1b, 0x26, 0x40, 0x4c, 0xa9, 0x8a, 0xb0, 0x25, 0x00, 0x02, - 0x92, 0x01, 0x06, 0x46, 0x26, 0xd2, 0x88, 0xf5, 0x41, 0x44, 0x5c, 0x32, - 0xf2, 0xf3, 0x01, 0x45, 0x3d, 0xc7, 0x1f, 0x2b, 0x40, 0x4b, 0xe6, 0x90, - 0x6f, 0xcc, 0x01, 0x42, 0xaa, 0x17, 0x12, 0x27, 0x40, 0x06, 0x1a, 0x04, - 0x06, 0x4a, 0x89, 0xac, 0xb8, 0x26, 0x40, 0xa4, 0x4d, 0xac, 0x38, 0x57, - 0x0d, 0x30, 0xf5, 0x23, 0x80, 0x2b, 0xb3, 0x0d, 0x54, 0x47, 0x45, 0xf6, - 0x23, 0xc0, 0x00, 0x48, 0x3e, 0x67, 0xc5, 0x2b, 0x40, 0x05, 0x0d, 0x07, - 0x06, 0x45, 0xac, 0x05, 0xfc, 0x25, 0x40, 0x47, 0x88, 0x43, 0x99, 0xf7, - 0x01, 0x47, 0x19, 0x0a, 0x9f, 0xf7, 0x01, 0x46, 0xab, 0x05, 0xfe, 0x25, - 0x40, 0x48, 0x3e, 0x67, 0xc8, 0x2b, 0x40, 0x55, 0x94, 0x34, 0xf4, 0x23, - 0x80, 0x06, 0x46, 0x1a, 0x0a, 0x27, 0x2b, 0x40, 0x48, 0x3e, 0x67, 0xc7, - 0x2b, 0x40, 0x46, 0x89, 0x43, 0x25, 0x2b, 0x00, 0x55, 0xf2, 0x32, 0xf7, - 0x23, 0xc0, 0x00, 0x48, 0x3e, 0x67, 0xc6, 0x2b, 0x40, 0x05, 0xa1, 0x1b, - 0x70, 0x03, 0xc4, 0x00, 0x19, 0xaf, 0x01, 0xff, 0x04, 0x15, 0x01, 0x06, - 0x45, 0xfc, 0x09, 0xeb, 0x29, 0x40, 0x4d, 0x7d, 0x34, 0xe3, 0x25, 0x00, - 0x4e, 0xc7, 0x28, 0xe2, 0x25, 0x40, 0x80, 0x3a, 0x0a, 0x3d, 0x0b, 0x11, - 0x06, 0xa9, 0x01, 0x01, 0xff, 0x46, 0x2a, 0x21, 0x4c, 0x20, 0x00, 0x55, - 0xd5, 0x01, 0x9c, 0x2b, 0x40, 0x4f, 0xa5, 0x6a, 0xea, 0x23, 0x80, 0x18, - 0x58, 0xbd, 0x28, 0x80, 0xf7, 0x01, 0x47, 0xa0, 0x48, 0xc4, 0x25, 0x00, - 0x4e, 0xd7, 0x0b, 0xc2, 0x25, 0x00, 0x48, 0x01, 0x02, 0xc0, 0x25, 0x40, - 0x52, 0xf8, 0x1d, 0xee, 0x23, 0x40, 0x4a, 0x31, 0xaa, 0xd8, 0x26, 0x00, - 0x09, 0x9c, 0x01, 0x01, 0xff, 0x4e, 0x3f, 0x26, 0x9c, 0xf5, 0x01, 0x45, - 0x40, 0x13, 0x1a, 0x26, 0x40, 0x46, 0xe7, 0x02, 0x24, 0x2b, 0x80, 0x06, - 0x46, 0xab, 0x05, 0x1b, 0x2b, 0x40, 0x07, 0x99, 0xca, 0x01, 0xff, 0xac, - 0x0c, 0x55, 0x00, 0x3d, 0x6d, 0xcc, 0x01, 0x55, 0xd2, 0x3d, 0x6c, 0xcc, - 0x41, 0x53, 0xe9, 0x47, 0x6b, 0xcc, 0x01, 0x54, 0xcb, 0x43, 0x6e, 0xcc, - 0x41, 0x55, 0x7d, 0x38, 0xaa, 0xf5, 0x01, 0xa5, 0x0f, 0xaf, 0x01, 0xff, - 0x50, 0x5a, 0x65, 0x2c, 0x2b, 0x00, 0x47, 0x2b, 0xd4, 0xd7, 0x29, 0x40, - 0x43, 0x2c, 0x01, 0xa4, 0xf5, 0x81, 0x06, 0x45, 0xb5, 0xce, 0x22, 0x2b, - 0x40, 0x45, 0xfd, 0x26, 0x65, 0x26, 0x40, 0xac, 0x0f, 0xaf, 0x01, 0xff, - 0x44, 0x79, 0x1d, 0xbf, 0xf5, 0x01, 0x4f, 0xd9, 0x72, 0x26, 0x27, 0x40, - 0x42, 0x23, 0x02, 0x91, 0x26, 0x00, 0x46, 0x5f, 0x0f, 0x3f, 0x27, 0x40, - 0x46, 0x89, 0x43, 0xc6, 0x25, 0x80, 0x45, 0x03, 0xa6, 0x01, 0x19, 0xb2, - 0x01, 0xff, 0x07, 0x8b, 0xc7, 0x06, 0x45, 0x74, 0xe6, 0x22, 0xf3, 0x41, - 0x44, 0xe2, 0x33, 0xc3, 0x26, 0x00, 0x43, 0xd5, 0x17, 0xc2, 0x26, 0x40, - 0x58, 0x35, 0x26, 0xa3, 0xf5, 0x01, 0x0a, 0x3d, 0x0b, 0x06, 0x5b, 0xcf, - 0x01, 0x9f, 0x2b, 0x40, 0x4f, 0xa5, 0x6a, 0xec, 0x23, 0x00, 0x58, 0xbd, - 0x28, 0x83, 0xf7, 0x01, 0x4e, 0xd7, 0x0b, 0xbe, 0x25, 0x00, 0x48, 0x01, - 0x02, 0xbc, 0x25, 0x40, 0x80, 0x01, 0xff, 0x47, 0x3f, 0x67, 0xc1, 0x2b, - 0x00, 0x4d, 0x55, 0x84, 0x56, 0x27, 0x00, 0x48, 0xa2, 0xc6, 0xde, 0x2b, - 0x00, 0x44, 0xfe, 0x26, 0x66, 0x26, 0x00, 0x4f, 0x42, 0x73, 0xea, 0x29, - 0x40, 0x50, 0x4a, 0x61, 0x2c, 0x27, 0x00, 0x05, 0x8e, 0x86, 0x79, 0x45, - 0xe8, 0x02, 0xcf, 0x25, 0x80, 0x52, 0x48, 0x6a, 0xc5, 0x63, 0x26, 0x00, - 0x4e, 0x74, 0x7a, 0xe8, 0x26, 0x00, 0x06, 0x70, 0x40, 0x01, 0xff, 0x0e, - 0xb5, 0x04, 0x31, 0x0e, 0xe2, 0x77, 0x21, 0x0f, 0x08, 0x71, 0x11, 0x0c, - 0x32, 0x19, 0x01, 0xff, 0x4f, 0x37, 0x07, 0xaa, 0x2b, 0x00, 0x50, 0xb3, - 0x02, 0xab, 0x2b, 0x40, 0x4f, 0xe5, 0x0b, 0xaf, 0x2b, 0x00, 0x4d, 0x1f, - 0x20, 0xad, 0x2b, 0x40, 0x4f, 0xe5, 0x0b, 0xae, 0x2b, 0x00, 0x4d, 0x1f, - 0x20, 0xac, 0x2b, 0x40, 0x4f, 0x37, 0x07, 0xa8, 0x2b, 0x00, 0x50, 0xb3, - 0x02, 0xa9, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x29, 0xa8, 0xfa, 0x23, - 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0xbf, 0x40, 0xed, 0x29, 0x00, - 0x4e, 0x42, 0x7c, 0x89, 0x26, 0x00, 0x4f, 0x33, 0x73, 0x88, 0x26, 0x40, - 0x46, 0x48, 0xd7, 0x5d, 0x26, 0x80, 0xe7, 0x01, 0x4a, 0xd9, 0xa7, 0x49, - 0xfa, 0x81, 0xd9, 0x01, 0xab, 0x73, 0x44, 0xb6, 0xee, 0x5f, 0x26, 0x80, - 0x5b, 0x45, 0xe6, 0xbb, 0x5b, 0x26, 0x80, 0x43, 0x44, 0x0a, 0xef, 0x5c, - 0x26, 0x80, 0x2b, 0x07, 0xd8, 0x09, 0x01, 0xff, 0x46, 0x48, 0xd7, 0x27, - 0xfa, 0x01, 0xab, 0x12, 0x44, 0xb6, 0xee, 0x29, 0xfa, 0x01, 0x45, 0xe6, - 0xbb, 0x25, 0xfa, 0x01, 0x44, 0x0a, 0xef, 0x26, 0xfa, 0x41, 0x43, 0xa1, - 0x01, 0x24, 0xfa, 0x01, 0x45, 0xd5, 0x71, 0x28, 0xfa, 0x41, 0x09, 0x02, - 0x2c, 0x01, 0xff, 0x4e, 0x0b, 0x2c, 0x11, 0xfa, 0x01, 0x5b, 0x1a, 0x1d, - 0x3b, 0xfa, 0x41, 0x09, 0x02, 0x2c, 0x01, 0xff, 0x4e, 0x0b, 0x2c, 0x10, - 0xfa, 0x01, 0x5b, 0x1a, 0x1d, 0x3a, 0xfa, 0x41, 0x09, 0x02, 0x2c, 0x01, - 0xff, 0x4e, 0x0b, 0x2c, 0x14, 0xfa, 0x01, 0x5b, 0x1a, 0x1d, 0x3e, 0xfa, - 0x41, 0x43, 0xa1, 0x01, 0x5a, 0x26, 0x80, 0x4c, 0x45, 0xd5, 0x71, 0x5e, - 0x26, 0xc0, 0x00, 0x09, 0x02, 0x2c, 0x15, 0x8d, 0x01, 0xff, 0x46, 0x48, - 0xd7, 0x53, 0xfa, 0x01, 0x45, 0xe6, 0xbb, 0x51, 0xfa, 0x01, 0x44, 0x0a, - 0xef, 0x52, 0xfa, 0x41, 0x52, 0x84, 0x50, 0x07, 0xfa, 0x01, 0x4e, 0x0b, - 0x2c, 0x13, 0xfa, 0x01, 0x5f, 0x1e, 0x11, 0x1c, 0xfa, 0x01, 0xb4, 0x01, - 0xff, 0x5c, 0x8e, 0x17, 0x46, 0xfa, 0x01, 0x0b, 0x1b, 0x1d, 0x01, 0xff, - 0x4f, 0x26, 0x1d, 0x3d, 0xfa, 0x01, 0x53, 0xa9, 0x4c, 0x31, 0xfa, 0x41, - 0x09, 0x02, 0x2c, 0x01, 0xff, 0x4e, 0x0b, 0x2c, 0x0f, 0xfa, 0x01, 0x5b, - 0x1a, 0x1d, 0x39, 0xfa, 0x41, 0x57, 0x02, 0x2c, 0x4c, 0xfa, 0x41, 0x09, - 0x02, 0x2c, 0x01, 0xff, 0x4e, 0x0b, 0x2c, 0x12, 0xfa, 0x01, 0x5b, 0x1a, - 0x1d, 0x3c, 0xfa, 0x41, 0x04, 0x98, 0x24, 0x4d, 0x02, 0xa3, 0x01, 0x3d, - 0x44, 0x9e, 0xed, 0x59, 0xf4, 0x01, 0x02, 0x0f, 0x07, 0x27, 0x4c, 0x45, - 0x91, 0x23, 0x26, 0x00, 0xb2, 0x15, 0x43, 0x7f, 0x1c, 0xac, 0xf9, 0x01, - 0xb4, 0x01, 0xff, 0x49, 0xf9, 0xb4, 0xbf, 0x20, 0x00, 0x47, 0x75, 0x8f, - 0xe6, 0xfa, 0x41, 0xe4, 0x26, 0xf4, 0x01, 0x4a, 0x8b, 0xaf, 0x82, 0xf3, - 0x41, 0x46, 0x32, 0xd8, 0xe2, 0xf9, 0x01, 0x45, 0x2b, 0xe4, 0xb1, 0xf3, - 0x41, 0x4f, 0xcc, 0x70, 0xf9, 0x29, 0x00, 0x47, 0x69, 0x30, 0xf8, 0x29, - 0x40, 0xe5, 0xb2, 0xf6, 0x01, 0x43, 0xa3, 0x23, 0xb4, 0xf6, 0x41, 0xa4, - 0x92, 0x04, 0x0b, 0x1e, 0x9a, 0x85, 0x04, 0x52, 0x38, 0x51, 0x6c, 0x1c, - 0x01, 0x07, 0xc1, 0x05, 0xee, 0x01, 0x07, 0x2f, 0x39, 0x6d, 0x05, 0x2f, - 0x03, 0x44, 0x0b, 0xd1, 0x75, 0x06, 0x4e, 0x68, 0x7d, 0x43, 0x1c, 0x41, - 0xa1, 0x2c, 0xe5, 0x38, 0x1c, 0x01, 0xe9, 0x30, 0x1c, 0x81, 0x1f, 0xef, - 0x3a, 0x1c, 0x01, 0xf5, 0x32, 0x1c, 0x81, 0x12, 0x08, 0x9b, 0xbe, 0x01, - 0xff, 0xec, 0x36, 0x1c, 0x01, 0xf2, 0x34, 0x1c, 0xc1, 0x00, 0xf2, 0x35, - 0x1c, 0x41, 0xf5, 0x33, 0x1c, 0x41, 0xe9, 0x31, 0x1c, 0x41, 0xe1, 0x2f, - 0x1c, 0x01, 0xe9, 0x39, 0x1c, 0x01, 0xf5, 0x3b, 0x1c, 0x41, 0xa1, 0x17, - 0x4b, 0x4f, 0x23, 0x3c, 0x1c, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, - 0x5d, 0x23, 0x3f, 0x1c, 0x01, 0x45, 0xa3, 0x4a, 0x3e, 0x1c, 0x41, 0x47, - 0xd1, 0x15, 0x3d, 0x1c, 0x01, 0x47, 0xf2, 0x86, 0x40, 0x1c, 0x41, 0x45, - 0xc3, 0x0a, 0x61, 0x1c, 0x81, 0x72, 0xa6, 0x53, 0x44, 0x46, 0x2a, 0x62, - 0x1c, 0x81, 0x46, 0x43, 0xbf, 0x0a, 0x5a, 0x1c, 0x01, 0xb3, 0x24, 0xb4, - 0x01, 0xff, 0x42, 0x92, 0x01, 0x63, 0x1c, 0x01, 0xa8, 0x0d, 0xb7, 0x01, - 0xff, 0x44, 0x29, 0x1d, 0x64, 0x1c, 0x01, 0xef, 0x5b, 0x1c, 0x41, 0x44, - 0x2c, 0x11, 0x65, 0x1c, 0x01, 0x43, 0x26, 0x01, 0x5c, 0x1c, 0x41, 0x44, - 0x27, 0x1d, 0x60, 0x1c, 0x81, 0x0d, 0x42, 0x60, 0x25, 0x5f, 0x1c, 0xc1, - 0x00, 0x42, 0x2e, 0x11, 0x68, 0x1c, 0x41, 0x42, 0x2e, 0x11, 0x69, 0x1c, - 0x41, 0x42, 0x2e, 0x11, 0x6b, 0x1c, 0x41, 0xa9, 0x0f, 0xaf, 0x01, 0xff, - 0x43, 0x2d, 0x11, 0x66, 0x1c, 0x01, 0x42, 0x42, 0x00, 0x5d, 0x1c, 0x41, - 0x43, 0x09, 0x4c, 0x67, 0x1c, 0x01, 0x42, 0x32, 0x00, 0x5e, 0x1c, 0x41, - 0xf9, 0x6a, 0x1c, 0x41, 0xe1, 0x00, 0x1c, 0x81, 0xfa, 0x01, 0xa2, 0xed, - 0x01, 0xa3, 0xe0, 0x01, 0xa4, 0xc7, 0x01, 0xe5, 0x0a, 0x1c, 0x01, 0xa7, - 0xb6, 0x01, 0x42, 0x22, 0x00, 0x2e, 0x1c, 0x01, 0xe9, 0x02, 0x1c, 0x81, - 0xa6, 0x01, 0xaa, 0x99, 0x01, 0xab, 0x8c, 0x01, 0x42, 0x74, 0x00, 0x29, - 0x1c, 0x01, 0x42, 0x6c, 0x00, 0x26, 0x1c, 0x01, 0xae, 0x68, 0xef, 0x0c, - 0x1c, 0x01, 0xb0, 0x58, 0x42, 0x71, 0x00, 0x28, 0x1c, 0x01, 0xb3, 0x40, - 0xb4, 0x27, 0xf5, 0x04, 0x1c, 0x81, 0x1e, 0xb6, 0x06, 0x42, 0x34, 0x22, - 0x27, 0x1c, 0x41, 0xe1, 0x2a, 0x1c, 0x01, 0x07, 0x9c, 0xbe, 0x01, 0xff, - 0xec, 0x08, 0x1c, 0x01, 0xf2, 0x06, 0x1c, 0xc1, 0x00, 0xf2, 0x07, 0x1c, - 0x41, 0xf5, 0x05, 0x1c, 0x41, 0xe1, 0x1d, 0x1c, 0x01, 0x42, 0x22, 0x00, - 0x1e, 0x1c, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x18, 0x1c, 0x01, 0x42, 0x22, - 0x00, 0x19, 0x1c, 0x41, 0xe1, 0x2d, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x2b, - 0x1c, 0x01, 0x42, 0x15, 0x06, 0x2c, 0x1c, 0x41, 0xe1, 0x22, 0x1c, 0x01, - 0x42, 0x22, 0x00, 0x23, 0x1c, 0x41, 0xe1, 0x21, 0x1c, 0x01, 0x42, 0x24, - 0x02, 0x12, 0x1c, 0x01, 0x42, 0xff, 0x04, 0x1c, 0x1c, 0x01, 0x42, 0x34, - 0x22, 0x17, 0x1c, 0x41, 0xe1, 0x0e, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x0f, - 0x1c, 0x41, 0xe1, 0x15, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x16, 0x1c, 0x41, - 0xe9, 0x03, 0x1c, 0x41, 0xe1, 0x10, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x11, - 0x1c, 0x41, 0xe1, 0x1f, 0x1c, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x20, - 0x1c, 0x41, 0xe1, 0x1a, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x1b, 0x1c, 0x41, - 0xe1, 0x13, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x14, 0x1c, 0x41, 0xe1, 0x24, - 0x1c, 0x01, 0x42, 0x22, 0x00, 0x25, 0x1c, 0x41, 0xe1, 0x01, 0x1c, 0x01, - 0xe9, 0x0b, 0x1c, 0x01, 0xf5, 0x0d, 0x1c, 0x41, 0xd1, 0x44, 0x1c, 0x01, - 0xd2, 0x45, 0x1c, 0x41, 0x44, 0xd1, 0x1f, 0x41, 0x1c, 0x01, 0x05, 0xc5, - 0x06, 0x06, 0x4b, 0xd8, 0x9e, 0x42, 0x1c, 0x41, 0x45, 0xc3, 0x0a, 0x58, - 0x1c, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x59, 0x1c, 0x01, 0x43, 0xbf, - 0x0a, 0x51, 0x1c, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x50, - 0x1c, 0x41, 0x44, 0x25, 0x01, 0x53, 0x1c, 0x01, 0x42, 0x15, 0x02, 0x52, - 0x1c, 0x41, 0x44, 0x27, 0x1d, 0x57, 0x1c, 0x01, 0x42, 0x60, 0x25, 0x56, - 0x1c, 0x41, 0x43, 0xa7, 0x05, 0x55, 0x1c, 0x01, 0x43, 0xcb, 0x06, 0x54, - 0x1c, 0x41, 0xa1, 0xdc, 0x05, 0x45, 0xf1, 0xe1, 0x35, 0x22, 0x00, 0xe4, - 0xcf, 0xf6, 0x01, 0xa5, 0xc3, 0x05, 0x42, 0x0f, 0x07, 0x14, 0xf5, 0x81, - 0xa1, 0x05, 0xae, 0x14, 0xb4, 0x06, 0x4a, 0xf3, 0xb0, 0xc3, 0xf9, 0x41, - 0x47, 0xea, 0x07, 0x36, 0x21, 0x00, 0x44, 0x74, 0x09, 0x6c, 0x22, 0x40, - 0x05, 0x9e, 0xb3, 0x1b, 0xb4, 0x0d, 0x49, 0x4f, 0xbf, 0x2c, 0x23, 0xc0, - 0x00, 0x4c, 0x67, 0x22, 0xe3, 0x23, 0x40, 0x69, 0x95, 0x01, 0x5e, 0x2b, - 0x00, 0x45, 0x38, 0xe6, 0x71, 0xf3, 0x41, 0xa1, 0xd7, 0x04, 0x09, 0x5b, - 0x40, 0xa5, 0x04, 0x06, 0xc4, 0x06, 0xde, 0x03, 0x4a, 0x65, 0xa8, 0xfb, - 0x09, 0x00, 0x46, 0x2a, 0xda, 0xfa, 0x09, 0x00, 0x07, 0xc1, 0x05, 0x8c, - 0x01, 0x06, 0xf6, 0x7e, 0x7c, 0xb3, 0x44, 0x0b, 0xd1, 0x75, 0x01, 0xff, - 0xa1, 0x31, 0xe5, 0xc7, 0x09, 0x00, 0xe9, 0xbf, 0x09, 0x80, 0x24, 0xef, - 0xcb, 0x09, 0x00, 0xf5, 0xc1, 0x09, 0x80, 0x17, 0x08, 0x9b, 0xbe, 0x01, - 0xff, 0xec, 0xe2, 0x09, 0x80, 0x09, 0xf2, 0xc3, 0x09, 0xc0, 0x00, 0xf2, - 0xc4, 0x09, 0x40, 0xec, 0xe3, 0x09, 0x40, 0xf5, 0xc2, 0x09, 0x40, 0xe9, - 0xc0, 0x09, 0x40, 0xe1, 0xbe, 0x09, 0x00, 0xe9, 0xc8, 0x09, 0x00, 0xf5, - 0xcc, 0x09, 0x40, 0x4a, 0x81, 0xa5, 0xfe, 0x09, 0x00, 0x04, 0x30, 0x03, - 0x01, 0xff, 0xa1, 0x1d, 0x4b, 0x4f, 0x23, 0x81, 0x09, 0x00, 0x45, 0x5a, - 0x3e, 0xbc, 0x09, 0x00, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, - 0xcd, 0x09, 0x00, 0x45, 0xa3, 0x4a, 0x83, 0x09, 0x40, 0x47, 0xd1, 0x15, - 0x82, 0x09, 0x00, 0x47, 0xf2, 0x86, 0xbd, 0x09, 0x40, 0x44, 0xb9, 0x00, - 0xf2, 0x09, 0x00, 0x44, 0x2f, 0x03, 0xf3, 0x09, 0x40, 0xe1, 0x85, 0x09, - 0x80, 0xaf, 0x02, 0xa2, 0xa2, 0x02, 0xa3, 0x95, 0x02, 0xa4, 0xfc, 0x01, - 0xe5, 0x8f, 0x09, 0x00, 0xa7, 0xeb, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x09, - 0x00, 0xe9, 0x87, 0x09, 0x80, 0xdb, 0x01, 0xaa, 0xce, 0x01, 0xab, 0xba, - 0x01, 0x42, 0x74, 0x00, 0xb2, 0x09, 0x00, 0x42, 0x6c, 0x00, 0xae, 0x09, - 0x00, 0xae, 0x95, 0x01, 0xef, 0x93, 0x09, 0x00, 0xb0, 0x84, 0x01, 0xb2, - 0x60, 0xb3, 0x4e, 0xb4, 0x35, 0xf5, 0x89, 0x09, 0x80, 0x2c, 0xb6, 0x0d, - 0xb9, 0x01, 0xff, 0xe1, 0xaf, 0x09, 0x00, 0x42, 0x34, 0x22, 0xdf, 0x09, - 0x40, 0x4d, 0xd4, 0x80, 0xfc, 0x09, 0x00, 0x07, 0x9c, 0xbe, 0x01, 0xff, - 0xec, 0x8c, 0x09, 0x80, 0x09, 0xf2, 0x8b, 0x09, 0xc0, 0x00, 0xf2, 0xe0, - 0x09, 0x40, 0xec, 0xe1, 0x09, 0x40, 0xf5, 0x8a, 0x09, 0x40, 0xe1, 0xa4, - 0x09, 0x00, 0x42, 0x22, 0x00, 0xa5, 0x09, 0x00, 0xb4, 0x01, 0xff, 0xe1, - 0x9f, 0x09, 0x00, 0x42, 0x22, 0x00, 0xa0, 0x09, 0x40, 0xe1, 0xb8, 0x09, - 0x00, 0x42, 0x22, 0x00, 0xb6, 0x09, 0x00, 0x42, 0x15, 0x06, 0xb7, 0x09, - 0x40, 0xe1, 0xb0, 0x09, 0x80, 0x0c, 0x42, 0x22, 0x00, 0xdd, 0x09, 0x00, - 0x42, 0x71, 0x00, 0xdc, 0x09, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4e, - 0x52, 0x78, 0xf1, 0x09, 0x00, 0x4f, 0xa1, 0x6e, 0xf0, 0x09, 0x40, 0xe1, - 0xaa, 0x09, 0x00, 0x42, 0x22, 0x00, 0xab, 0x09, 0x40, 0xe1, 0xa8, 0x09, - 0x00, 0x42, 0x24, 0x02, 0x99, 0x09, 0x00, 0x42, 0xff, 0x04, 0xa3, 0x09, - 0x00, 0x42, 0x34, 0x22, 0x9e, 0x09, 0x40, 0xe1, 0x95, 0x09, 0x00, 0x42, - 0x22, 0x00, 0x96, 0x09, 0xc0, 0x00, 0x46, 0x3e, 0xdb, 0xce, 0x09, 0x40, - 0xe1, 0x9c, 0x09, 0x00, 0x42, 0x22, 0x00, 0x9d, 0x09, 0x40, 0xe9, 0x88, - 0x09, 0x40, 0xe1, 0x97, 0x09, 0x00, 0x42, 0x22, 0x00, 0x98, 0x09, 0x40, - 0xe1, 0xa6, 0x09, 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa7, 0x09, 0x40, - 0xe1, 0xa1, 0x09, 0x00, 0x42, 0x22, 0x00, 0xa2, 0x09, 0x40, 0xe1, 0x9a, - 0x09, 0x00, 0x42, 0x22, 0x00, 0x9b, 0x09, 0x40, 0xe1, 0xac, 0x09, 0x00, - 0x42, 0x22, 0x00, 0xad, 0x09, 0x40, 0xe1, 0x86, 0x09, 0x00, 0xe9, 0x90, - 0x09, 0x00, 0xf5, 0x94, 0x09, 0x40, 0x45, 0xc3, 0x0a, 0xee, 0x09, 0x00, - 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xef, 0x09, 0x00, 0x43, 0xbf, 0x0a, 0xe7, - 0x09, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xe6, 0x09, 0x40, - 0x44, 0x25, 0x01, 0xe9, 0x09, 0x00, 0x42, 0x15, 0x02, 0xe8, 0x09, 0x40, - 0x44, 0x27, 0x1d, 0xed, 0x09, 0x00, 0x42, 0x60, 0x25, 0xec, 0x09, 0x40, - 0x43, 0xa7, 0x05, 0xeb, 0x09, 0x00, 0x43, 0xcb, 0x06, 0xea, 0x09, 0x40, - 0x53, 0xb0, 0x47, 0xf9, 0x09, 0x00, 0x0a, 0xd7, 0x84, 0x01, 0xff, 0x44, - 0xca, 0x06, 0xf7, 0x09, 0x00, 0x43, 0xbf, 0x0a, 0xf4, 0x09, 0x80, 0x0f, - 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xf6, 0x09, 0x00, 0x42, 0x15, 0x02, - 0xf5, 0x09, 0x40, 0x5a, 0xd6, 0x1d, 0xf8, 0x09, 0x40, 0x50, 0x94, 0x56, - 0xfd, 0x09, 0x00, 0x43, 0x9d, 0x85, 0x80, 0x09, 0x00, 0x4d, 0x9b, 0x74, - 0xd7, 0x09, 0x40, 0x80, 0x06, 0x48, 0x2a, 0xc4, 0xce, 0xf6, 0x41, 0x46, - 0x1c, 0xdc, 0xd1, 0xfa, 0x01, 0x46, 0xeb, 0x07, 0x7e, 0x23, 0x00, 0x58, - 0x5d, 0x2b, 0x15, 0xf5, 0x41, 0x45, 0x3f, 0xb4, 0x7a, 0xf3, 0x01, 0x43, - 0xbd, 0x01, 0xb2, 0xfa, 0x41, 0x50, 0xda, 0x5f, 0xd6, 0xf3, 0x01, 0x04, - 0x41, 0x9d, 0x20, 0x42, 0x5f, 0x01, 0xd8, 0xfa, 0x01, 0xb2, 0x0c, 0x4a, - 0xa9, 0xaf, 0x93, 0xf4, 0x01, 0x43, 0x32, 0x00, 0xab, 0xf9, 0x41, 0x45, - 0xe0, 0x07, 0x3b, 0xf4, 0x01, 0x4a, 0xfd, 0xa6, 0xd4, 0xf9, 0x41, 0x57, - 0xba, 0x2c, 0x9c, 0xf3, 0x01, 0x58, 0x55, 0x27, 0x9d, 0xf3, 0x01, 0x4c, - 0xb9, 0x8c, 0x6b, 0x26, 0x00, 0x4f, 0x8f, 0x71, 0x6c, 0x26, 0x40, 0x42, - 0x08, 0x00, 0x76, 0xf4, 0x81, 0x8b, 0x30, 0xa3, 0xcd, 0x2f, 0xa4, 0xbe, - 0x2f, 0xa7, 0xa9, 0x2f, 0xac, 0x8b, 0x27, 0x04, 0x91, 0x90, 0xca, 0x05, - 0xae, 0x99, 0x05, 0xb2, 0x82, 0x05, 0xb3, 0x80, 0x03, 0xf4, 0x87, 0xf9, - 0xc1, 0x00, 0x03, 0x84, 0x4b, 0x11, 0xe8, 0xc0, 0xf6, 0x81, 0x06, 0x44, - 0x14, 0xd7, 0x0b, 0xf5, 0x41, 0x43, 0x10, 0xb3, 0xc1, 0xf6, 0x41, 0x0f, - 0x6d, 0x32, 0xd7, 0x02, 0x07, 0xc1, 0x05, 0x6b, 0x03, 0xa6, 0x42, 0x5b, - 0xb3, 0x33, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xe5, 0xe7, 0x1b, 0x80, 0x25, - 0xe9, 0xea, 0x1b, 0x00, 0x05, 0x77, 0xcf, 0x15, 0xef, 0xec, 0x1b, 0x00, - 0x48, 0x1a, 0xc7, 0xe8, 0x1b, 0x00, 0xf5, 0xee, 0x1b, 0xc0, 0x00, 0x52, - 0xfc, 0x4d, 0xef, 0x1b, 0x40, 0xe9, 0xeb, 0x1b, 0x00, 0xef, 0xed, 0x1b, - 0x40, 0xe5, 0xe9, 0x1b, 0x40, 0x49, 0xd2, 0xb7, 0xe6, 0x1b, 0x00, 0x0c, - 0x35, 0x95, 0x01, 0xff, 0x45, 0x9e, 0xe4, 0xfe, 0x1b, 0x00, 0x48, 0xda, - 0xc5, 0xfc, 0x1b, 0x00, 0xb0, 0x01, 0xff, 0x47, 0x28, 0xcc, 0xff, 0x1b, - 0x00, 0x49, 0xff, 0xb7, 0xfd, 0x1b, 0x40, 0x45, 0x2a, 0xcc, 0xf2, 0x1b, - 0x00, 0x47, 0x1b, 0xd1, 0xf3, 0x1b, 0x40, 0xe1, 0xc0, 0x1b, 0x00, 0x42, - 0x16, 0x00, 0xc5, 0x1b, 0x00, 0x42, 0x37, 0x00, 0xe1, 0x1b, 0x00, 0x42, - 0xa1, 0x10, 0xd1, 0x1b, 0x00, 0x42, 0x24, 0x02, 0xce, 0x1b, 0x00, 0x42, - 0x22, 0x00, 0xc2, 0x1b, 0x00, 0xe9, 0xe4, 0x1b, 0x00, 0x42, 0xbd, 0x26, - 0xd0, 0x1b, 0x00, 0x47, 0x77, 0xcf, 0xc6, 0x1b, 0x00, 0x42, 0x74, 0x00, - 0xde, 0x1b, 0x00, 0xad, 0x8b, 0x01, 0xae, 0x6d, 0x42, 0x6c, 0x09, 0xc7, - 0x1b, 0x80, 0x60, 0x42, 0x71, 0x00, 0xd2, 0x1b, 0x00, 0xb3, 0x10, 0xf5, - 0xe5, 0x1b, 0x00, 0x42, 0xa9, 0x01, 0xcb, 0x1b, 0x00, 0x42, 0x34, 0x22, - 0xdb, 0x1b, 0x40, 0xe1, 0xd8, 0x1b, 0x00, 0x0a, 0x02, 0x4e, 0x06, 0x4a, - 0x0b, 0xad, 0xd6, 0x1b, 0x40, 0xe1, 0xc1, 0x1b, 0x00, 0x42, 0x24, 0x02, - 0xcf, 0x1b, 0x00, 0x42, 0x22, 0x00, 0xc3, 0x1b, 0x00, 0x42, 0x74, 0x00, - 0xdf, 0x1b, 0x00, 0x42, 0x6c, 0x00, 0xd5, 0x1b, 0x00, 0x42, 0x6c, 0x09, - 0xc8, 0x1b, 0x00, 0x42, 0x71, 0x00, 0xd3, 0x1b, 0x00, 0x42, 0x15, 0x06, - 0xd9, 0x1b, 0x00, 0x42, 0xa9, 0x01, 0xcc, 0x1b, 0x00, 0x42, 0x34, 0x22, - 0xdc, 0x1b, 0x40, 0x47, 0xaf, 0xcf, 0xcd, 0x1b, 0x40, 0xe1, 0xc9, 0x1b, - 0x00, 0x42, 0xa1, 0x10, 0xe2, 0x1b, 0x00, 0x42, 0x24, 0x02, 0xdd, 0x1b, - 0x00, 0x4a, 0xbb, 0xac, 0xd7, 0x1b, 0x00, 0x42, 0x34, 0x22, 0xe0, 0x1b, - 0x40, 0xe1, 0xd4, 0x1b, 0x80, 0x06, 0x42, 0x16, 0x00, 0xe3, 0x1b, 0x40, - 0x09, 0xd3, 0xb9, 0x01, 0xff, 0x42, 0x22, 0x00, 0xc4, 0x1b, 0x00, 0x42, - 0xff, 0x04, 0xca, 0x1b, 0x00, 0x42, 0x15, 0x06, 0xda, 0x1b, 0x40, 0xe8, - 0xf1, 0x1b, 0x00, 0x42, 0x1d, 0x01, 0xf0, 0x1b, 0x40, 0x45, 0xb4, 0xe2, - 0xbe, 0x26, 0x00, 0x43, 0x18, 0x09, 0xfa, 0xf9, 0x81, 0xeb, 0x01, 0x07, - 0xbf, 0xd2, 0x01, 0xff, 0x0a, 0xd6, 0x57, 0xbb, 0x01, 0x49, 0x15, 0x16, - 0xf5, 0x6a, 0x01, 0x07, 0xc1, 0x05, 0x01, 0xff, 0xe1, 0xe7, 0x6a, 0x01, - 0x42, 0x16, 0x00, 0xe2, 0x6a, 0x01, 0x42, 0x73, 0x02, 0xdf, 0x6a, 0x01, - 0xa4, 0x93, 0x01, 0xe5, 0xec, 0x6a, 0x81, 0x83, 0x01, 0x42, 0xe1, 0x07, - 0xd3, 0x6a, 0x01, 0xa7, 0x6f, 0x44, 0xff, 0xec, 0xda, 0x6a, 0x01, 0xe9, - 0xed, 0x6a, 0x01, 0x42, 0x4e, 0x0a, 0xd9, 0x6a, 0x01, 0xab, 0x53, 0x43, - 0x8b, 0x05, 0xd4, 0x6a, 0x01, 0xef, 0xe8, 0x6a, 0x81, 0x44, 0x42, 0x6c, - 0x09, 0xe5, 0x6a, 0x01, 0x42, 0x1b, 0x03, 0xd2, 0x6a, 0x01, 0x42, 0x1e, - 0x00, 0xe1, 0x6a, 0x01, 0xf5, 0xea, 0x6a, 0x81, 0x27, 0x42, 0xeb, 0x60, - 0xe3, 0x6a, 0x01, 0x42, 0xa9, 0x01, 0xdb, 0x6a, 0x81, 0x14, 0xb9, 0x06, - 0x42, 0x0f, 0x00, 0xdc, 0x6a, 0x41, 0x43, 0xdf, 0x10, 0xe4, 0x6a, 0x01, - 0x42, 0xc9, 0x02, 0xd5, 0x6a, 0x41, 0x43, 0xaa, 0x35, 0xe6, 0x6a, 0x41, - 0x42, 0x45, 0x07, 0xe0, 0x6a, 0x41, 0xef, 0xe9, 0x6a, 0x41, 0xe1, 0xd1, - 0x6a, 0x01, 0x43, 0xe9, 0x41, 0xd8, 0x6a, 0x41, 0x42, 0xc9, 0x09, 0xd6, - 0x6a, 0x01, 0x42, 0x1b, 0x0d, 0xdd, 0x6a, 0x41, 0xe5, 0xeb, 0x6a, 0x01, - 0x43, 0xac, 0x1e, 0xd0, 0x6a, 0x41, 0x43, 0x06, 0xed, 0xd7, 0x6a, 0x01, - 0xef, 0xde, 0x6a, 0x41, 0x04, 0xf9, 0x0a, 0x16, 0x03, 0x13, 0x01, 0x06, - 0x48, 0xcc, 0xb2, 0xf2, 0x6a, 0x41, 0x45, 0x82, 0x2c, 0xf1, 0x6a, 0x01, - 0x49, 0xcb, 0xb2, 0xf3, 0x6a, 0x41, 0x45, 0x82, 0x2c, 0xf0, 0x6a, 0x01, - 0x49, 0xc2, 0xb2, 0xf4, 0x6a, 0x41, 0x4d, 0x8f, 0x7f, 0xc0, 0xf3, 0x41, - 0x80, 0x06, 0x48, 0x7a, 0xc1, 0x88, 0xf4, 0x41, 0x45, 0x2d, 0xc2, 0xca, - 0xf4, 0x01, 0x47, 0xe3, 0xd0, 0xfc, 0xf9, 0x41, 0x43, 0xfc, 0x11, 0x4c, - 0xf3, 0x01, 0x42, 0x4e, 0x0a, 0x95, 0xfa, 0x01, 0xeb, 0xe6, 0xf3, 0xc1, - 0x00, 0x0a, 0x1b, 0xac, 0x01, 0xff, 0x4b, 0xf5, 0x98, 0xb5, 0xf4, 0x01, - 0x49, 0x73, 0xb6, 0xb6, 0xf4, 0x01, 0x4a, 0x5b, 0xad, 0xb7, 0xf4, 0x01, - 0x48, 0xc0, 0x7d, 0xb4, 0xf4, 0x41, 0x02, 0xe8, 0x04, 0x98, 0x21, 0x49, - 0x15, 0x16, 0xf3, 0xa6, 0x00, 0x07, 0xc1, 0x05, 0x12, 0x47, 0xc0, 0xd0, - 0xf2, 0xa6, 0x00, 0x4d, 0xd6, 0x33, 0xf7, 0xa6, 0x00, 0x49, 0xac, 0xbc, - 0xf6, 0xa6, 0x40, 0xe1, 0xa0, 0xa6, 0x00, 0x42, 0x27, 0x01, 0xa4, 0xa6, - 0x00, 0xa6, 0xd9, 0x20, 0xe9, 0xa9, 0xa6, 0x00, 0xab, 0x99, 0x20, 0xac, - 0xfe, 0x1f, 0xed, 0xb3, 0xa6, 0x80, 0xce, 0x1f, 0xae, 0xf2, 0x1e, 0xef, - 0xa7, 0xa6, 0x00, 0xb0, 0x93, 0x01, 0xb2, 0x6b, 0xb3, 0x3d, 0xb4, 0x23, - 0xf5, 0xa2, 0xa6, 0x00, 0xb7, 0x13, 0xb9, 0x01, 0xff, 0xe1, 0xc2, 0xa6, - 0x00, 0x42, 0xb1, 0x91, 0xbf, 0xa6, 0x00, 0x42, 0xf0, 0x99, 0xc1, 0xa6, - 0x40, 0xe1, 0xda, 0xa6, 0x00, 0x42, 0x87, 0x13, 0xc9, 0xa6, 0x40, 0xa1, - 0x0e, 0xa5, 0x04, 0xe9, 0xe4, 0xa6, 0x40, 0xee, 0xea, 0xa6, 0x00, 0xf4, - 0xe8, 0xa6, 0x40, 0xe1, 0xb0, 0xa6, 0x00, 0xe5, 0xa6, 0xa6, 0x40, 0x44, - 0xc5, 0xca, 0xec, 0xa6, 0x00, 0x43, 0xd3, 0xe8, 0xb9, 0xa6, 0x00, 0xa8, - 0x0a, 0xe9, 0xb7, 0xa6, 0x00, 0x42, 0x9c, 0x72, 0xb4, 0xa6, 0x40, 0x43, - 0xd3, 0xe8, 0xb8, 0xa6, 0x00, 0x42, 0xb1, 0x27, 0xb6, 0xa6, 0x00, 0xef, - 0xd6, 0xa6, 0x00, 0xf5, 0xc0, 0xa6, 0x40, 0x42, 0x44, 0x0f, 0xd1, 0xa6, - 0x00, 0xa5, 0x10, 0xa9, 0x04, 0xf5, 0xcc, 0xa6, 0x40, 0x42, 0x27, 0x01, - 0xad, 0xa6, 0x00, 0xe9, 0xac, 0xa6, 0x40, 0xe5, 0xa5, 0xa6, 0x00, 0xee, - 0xe1, 0xa6, 0x00, 0x42, 0xb5, 0xdd, 0xd0, 0xa6, 0x40, 0xe1, 0xab, 0xa6, - 0x00, 0xa5, 0xc7, 0x1d, 0x05, 0xd6, 0xe3, 0x11, 0xe9, 0xdd, 0xa6, 0x00, - 0xb5, 0x01, 0xff, 0x42, 0x44, 0x0f, 0xd7, 0xa6, 0x00, 0xe5, 0xc8, 0xa6, - 0x40, 0x02, 0x5a, 0x00, 0xc1, 0x18, 0x02, 0x26, 0x02, 0xac, 0x15, 0x02, - 0x28, 0x03, 0x8e, 0x10, 0x02, 0x06, 0x00, 0x90, 0x0a, 0x02, 0x60, 0x00, - 0xc2, 0x02, 0x02, 0x25, 0x00, 0x01, 0xff, 0x42, 0x27, 0x01, 0x06, 0x6a, - 0x01, 0x43, 0xf3, 0xf0, 0x2b, 0x6a, 0x01, 0xab, 0x8c, 0x02, 0xac, 0xfb, - 0x01, 0xed, 0x11, 0x6a, 0x81, 0xd9, 0x01, 0xae, 0x93, 0x01, 0xb0, 0x7f, - 0xb2, 0x5d, 0xb3, 0x35, 0xb4, 0x23, 0xf5, 0x04, 0x6a, 0x01, 0x44, 0xc2, - 0xef, 0x38, 0x6a, 0x01, 0xb7, 0x0d, 0xb9, 0x01, 0xff, 0xe1, 0x1d, 0x6a, - 0x01, 0x42, 0xb1, 0x91, 0x1b, 0x6a, 0x41, 0xe1, 0x2c, 0x6a, 0x01, 0x42, - 0x87, 0x13, 0x21, 0x6a, 0x41, 0xa1, 0x06, 0x42, 0xc2, 0x05, 0x35, 0x6a, - 0x41, 0xe1, 0x0e, 0x6a, 0x01, 0xe5, 0x08, 0x6a, 0x41, 0x44, 0xc5, 0xca, - 0x37, 0x6a, 0x01, 0x43, 0xd3, 0xe8, 0x15, 0x6a, 0x01, 0xa8, 0x0a, 0xe9, - 0x14, 0x6a, 0x01, 0x42, 0x9c, 0x72, 0x12, 0x6a, 0x41, 0x42, 0xb1, 0x27, - 0x13, 0x6a, 0x01, 0xef, 0x29, 0x6a, 0x01, 0xf5, 0x1c, 0x6a, 0x41, 0xa5, - 0x10, 0xa9, 0x04, 0xf5, 0x23, 0x6a, 0x41, 0x42, 0x27, 0x01, 0x0c, 0x6a, - 0x01, 0xe9, 0x0b, 0x6a, 0x41, 0xe5, 0x07, 0x6a, 0x01, 0xee, 0x31, 0x6a, - 0x01, 0x42, 0xb5, 0xdd, 0x25, 0x6a, 0x41, 0xa5, 0x06, 0x43, 0xc9, 0x93, - 0x2a, 0x6a, 0x41, 0xe5, 0x22, 0x6a, 0x01, 0x42, 0xb5, 0xdd, 0x1f, 0x6a, - 0x41, 0x43, 0x5c, 0x56, 0x0f, 0x6a, 0x01, 0xa7, 0x2f, 0xe9, 0x24, 0x6a, - 0x01, 0xaa, 0x1d, 0x43, 0xa4, 0x02, 0x1e, 0x6a, 0x01, 0x43, 0x9e, 0x17, - 0x20, 0x6a, 0x01, 0xf5, 0x19, 0x6a, 0x81, 0x06, 0x42, 0xf7, 0x19, 0x09, - 0x6a, 0x41, 0x42, 0x44, 0x0f, 0x18, 0x6a, 0x41, 0x43, 0xa4, 0x85, 0x10, - 0x6a, 0x01, 0x43, 0xc9, 0x93, 0x1a, 0x6a, 0x41, 0x42, 0x24, 0x02, 0x28, - 0x6a, 0x01, 0x45, 0xdf, 0xe4, 0x27, 0x6a, 0x41, 0xe1, 0x32, 0x6a, 0x01, - 0xa2, 0x0a, 0x44, 0x61, 0xec, 0x0d, 0x6a, 0x01, 0xef, 0x33, 0x6a, 0x41, - 0x42, 0x31, 0x12, 0x34, 0x6a, 0x01, 0x42, 0x92, 0x01, 0x30, 0x6a, 0x41, - 0xe1, 0x0a, 0x6a, 0x01, 0xe9, 0x2d, 0x6a, 0x01, 0x42, 0xb1, 0x91, 0x2e, - 0x6a, 0x41, 0xe1, 0x03, 0x6a, 0x01, 0xa5, 0x14, 0xef, 0x2f, 0x6a, 0x01, - 0x42, 0x6c, 0x09, 0x36, 0x6a, 0x01, 0xf5, 0x05, 0x6a, 0x01, 0x43, 0x91, - 0xa7, 0x16, 0x6a, 0x41, 0xee, 0x26, 0x6a, 0x01, 0xf4, 0x17, 0x6a, 0x41, - 0xe1, 0xd5, 0x69, 0x01, 0xa6, 0x8f, 0x07, 0xa7, 0xd8, 0x06, 0xe9, 0xd8, - 0x69, 0x01, 0xab, 0x9d, 0x06, 0xac, 0xec, 0x05, 0xad, 0x8e, 0x05, 0xae, - 0x81, 0x03, 0xef, 0xd7, 0x69, 0x01, 0xb0, 0x98, 0x02, 0xb2, 0xff, 0x01, - 0xb3, 0xc9, 0x01, 0xb4, 0x7a, 0xb6, 0x66, 0xb7, 0x53, 0xb9, 0x01, 0xff, - 0x42, 0xba, 0x05, 0xac, 0x69, 0x01, 0x02, 0x97, 0x02, 0x33, 0xa9, 0x27, - 0x03, 0xb1, 0x91, 0x17, 0xb5, 0x01, 0xff, 0x43, 0x0e, 0x41, 0xe1, 0x69, - 0x01, 0x42, 0x7b, 0x00, 0xb2, 0x69, 0x01, 0xee, 0xe5, 0x69, 0x01, 0xf1, - 0xe4, 0x69, 0x41, 0x45, 0xf3, 0x07, 0xe3, 0x69, 0x01, 0x48, 0x92, 0xc8, - 0xe2, 0x69, 0x41, 0x42, 0x27, 0x01, 0x94, 0x69, 0x01, 0xf4, 0xae, 0x69, - 0x41, 0x42, 0x44, 0x0f, 0x97, 0x69, 0x81, 0x08, 0xed, 0xbe, 0x69, 0x01, - 0xf8, 0xdf, 0x69, 0x41, 0xf4, 0xcf, 0x69, 0x41, 0x43, 0xd3, 0xe8, 0x9e, - 0x69, 0x01, 0xb5, 0x01, 0xff, 0xe5, 0xea, 0x69, 0x01, 0xef, 0x75, 0x69, - 0x41, 0xa5, 0x06, 0x42, 0xe9, 0x04, 0x6a, 0x69, 0x41, 0xe5, 0xec, 0x69, - 0x01, 0x43, 0xc9, 0x93, 0x9d, 0x69, 0x41, 0xa1, 0x34, 0xa5, 0x23, 0xaf, - 0x14, 0xb5, 0x01, 0xff, 0x42, 0x44, 0x0f, 0x96, 0x69, 0x01, 0xed, 0xaa, - 0x69, 0xc1, 0x00, 0x42, 0x44, 0x0f, 0x99, 0x69, 0x41, 0xef, 0x79, 0x69, - 0x81, 0x04, 0xf1, 0xd6, 0x69, 0x41, 0xee, 0x67, 0x69, 0x41, 0xee, 0x00, - 0x6a, 0x01, 0xf5, 0xfd, 0x69, 0xc1, 0x00, 0x43, 0xca, 0x93, 0x9c, 0x69, - 0x41, 0xe1, 0xdb, 0x69, 0x81, 0x0e, 0x48, 0x0a, 0xc3, 0x8f, 0x69, 0x01, - 0xed, 0x72, 0x69, 0x01, 0xf1, 0xdc, 0x69, 0x41, 0xf1, 0xa1, 0x69, 0x41, - 0x42, 0x31, 0x12, 0x85, 0x69, 0x01, 0xa5, 0x23, 0xa8, 0x0c, 0x42, 0xe9, - 0x04, 0x6d, 0x69, 0x01, 0x44, 0x70, 0xbe, 0x9b, 0x69, 0x41, 0x45, 0xc8, - 0x93, 0xa4, 0x69, 0x01, 0x42, 0xff, 0x17, 0xde, 0x69, 0x01, 0xef, 0xf3, - 0x69, 0xc1, 0x00, 0xf1, 0xf4, 0x69, 0x41, 0xe5, 0x76, 0x69, 0x01, 0xf4, - 0x90, 0x69, 0x41, 0xa1, 0x0c, 0x43, 0xd3, 0xe8, 0xef, 0x69, 0x01, 0x45, - 0x53, 0xe4, 0x82, 0x69, 0x41, 0xe5, 0xf0, 0x69, 0x01, 0xf1, 0x6e, 0x69, - 0x41, 0xa1, 0x47, 0xa5, 0x34, 0xe9, 0xf7, 0x69, 0x81, 0x22, 0xef, 0x98, - 0x69, 0x81, 0x17, 0xf5, 0xa0, 0x69, 0xc1, 0x00, 0xa1, 0x08, 0xe5, 0xe9, - 0x69, 0x01, 0xed, 0x91, 0x69, 0x41, 0xe5, 0x71, 0x69, 0x01, 0xf1, 0xca, - 0x69, 0x41, 0x42, 0x10, 0x00, 0xc2, 0x69, 0x41, 0xa5, 0x01, 0xff, 0x42, - 0x7b, 0x00, 0xb1, 0x69, 0x01, 0xf4, 0xcd, 0x69, 0x41, 0x42, 0x8a, 0x05, - 0x84, 0x69, 0x01, 0xb5, 0x01, 0xff, 0xf4, 0xbd, 0x69, 0x01, 0xf8, 0xe7, - 0x69, 0x41, 0x02, 0x9b, 0x01, 0x09, 0xe1, 0x6c, 0x69, 0xc1, 0x00, 0xed, - 0x78, 0x69, 0x41, 0x45, 0x04, 0xe3, 0xd1, 0x69, 0x01, 0x45, 0x2f, 0xe5, - 0xda, 0x69, 0x41, 0xe1, 0xf6, 0x69, 0x81, 0x80, 0x02, 0xa4, 0xd5, 0x01, - 0xa7, 0x66, 0xaa, 0x4a, 0x43, 0xe7, 0xc7, 0xa8, 0x69, 0x01, 0x02, 0xa4, - 0x02, 0x2d, 0xb4, 0x1f, 0x03, 0xc3, 0x78, 0x0f, 0xba, 0x01, 0xff, 0x42, - 0xb0, 0x35, 0xa7, 0x69, 0x01, 0x42, 0xf0, 0x99, 0xc1, 0x69, 0x41, 0x47, - 0x71, 0x09, 0xc0, 0x69, 0x01, 0x47, 0x24, 0xcd, 0xad, 0x69, 0x41, 0x42, - 0xba, 0x05, 0xce, 0x69, 0x01, 0x42, 0x1d, 0x04, 0xbc, 0x69, 0x41, 0x43, - 0x57, 0xa1, 0x7c, 0x69, 0x01, 0xb5, 0x01, 0xff, 0xe5, 0x81, 0x69, 0x01, - 0x42, 0x1f, 0x00, 0x6f, 0x69, 0x41, 0x45, 0xc2, 0xd0, 0x8a, 0x69, 0x01, - 0xa5, 0x01, 0xff, 0xe5, 0xd4, 0x69, 0x81, 0x06, 0x42, 0xb5, 0xdd, 0x83, - 0x69, 0x41, 0x46, 0x2c, 0xd5, 0xe8, 0x69, 0x41, 0xe1, 0xf2, 0x69, 0x01, - 0x46, 0x9e, 0xd8, 0xa3, 0x69, 0x01, 0xa7, 0x3b, 0xab, 0x15, 0xaf, 0x0b, - 0x43, 0xc9, 0x93, 0xe0, 0x69, 0xc1, 0x00, 0xf4, 0xf1, 0x69, 0x41, 0xf0, - 0x7d, 0x69, 0x01, 0xf1, 0x80, 0x69, 0x41, 0xe1, 0x73, 0x69, 0x81, 0x19, - 0x02, 0x97, 0x02, 0x0b, 0xb5, 0x01, 0xff, 0xed, 0xcb, 0x69, 0x01, 0xf0, - 0xb6, 0x69, 0x41, 0x43, 0xa4, 0x85, 0x89, 0x69, 0x01, 0xf8, 0x7f, 0x69, - 0x41, 0x43, 0x4d, 0x60, 0xb9, 0x69, 0x41, 0xa5, 0x13, 0xb5, 0x01, 0xff, - 0x4b, 0xda, 0x96, 0x93, 0x69, 0x01, 0xf0, 0xd0, 0x69, 0x01, 0x43, 0xdf, - 0x80, 0x86, 0x69, 0x41, 0x43, 0x37, 0xa7, 0x8d, 0x69, 0x01, 0x43, 0xc9, - 0x93, 0xbf, 0x69, 0xc1, 0x00, 0xf4, 0x77, 0x69, 0x41, 0xa1, 0x12, 0xa9, - 0x06, 0x42, 0xf3, 0x0a, 0x70, 0x69, 0x41, 0x42, 0xb0, 0x35, 0xb0, 0x69, - 0x01, 0xf1, 0x8e, 0x69, 0x41, 0x02, 0x5a, 0x00, 0x04, 0xf0, 0x66, 0x69, - 0x41, 0x48, 0xca, 0xc5, 0xdd, 0x69, 0x01, 0x48, 0x6a, 0xc8, 0x92, 0x69, - 0x41, 0xe5, 0xc5, 0x69, 0x41, 0xe1, 0xfb, 0x69, 0x81, 0x45, 0x02, 0x8c, - 0x05, 0x37, 0x42, 0x92, 0x01, 0xfa, 0x69, 0x01, 0x44, 0x8a, 0xec, 0xaf, - 0x69, 0x01, 0x02, 0x50, 0x47, 0x1d, 0xe9, 0xee, 0x69, 0x81, 0x12, 0x42, - 0x10, 0x00, 0xff, 0x69, 0x01, 0x43, 0xc9, 0x93, 0xc6, 0x69, 0x01, 0x42, - 0x02, 0x00, 0xc9, 0x69, 0x41, 0x42, 0x27, 0x01, 0xc3, 0x69, 0x41, 0xe1, - 0x87, 0x69, 0x01, 0x42, 0x92, 0x01, 0xa5, 0x69, 0x41, 0xe5, 0xa6, 0x69, - 0x01, 0x42, 0x1d, 0x04, 0x68, 0x69, 0x41, 0xe5, 0xb8, 0x69, 0x81, 0x08, - 0xf0, 0x8b, 0x69, 0x01, 0xf1, 0xfc, 0x69, 0x41, 0xed, 0x7e, 0x69, 0x41, - 0xa1, 0x1e, 0x45, 0x22, 0xe3, 0xb3, 0x69, 0x01, 0xaf, 0x04, 0xf5, 0xed, - 0x69, 0x41, 0xed, 0x7b, 0x69, 0x01, 0xaf, 0x04, 0xf1, 0xf8, 0x69, 0x41, - 0xee, 0x6b, 0x69, 0x01, 0xf4, 0x8c, 0x69, 0x41, 0x42, 0x57, 0x00, 0x9f, - 0x69, 0x01, 0xf0, 0x69, 0x69, 0x01, 0xf1, 0xd9, 0x69, 0x41, 0xa5, 0x21, - 0xe9, 0xfe, 0x69, 0x01, 0xef, 0xf9, 0x69, 0x01, 0x44, 0xc2, 0xee, 0x74, - 0x69, 0x01, 0xb5, 0x01, 0xff, 0x42, 0xc2, 0x05, 0xab, 0x69, 0x01, 0x42, - 0x1f, 0x00, 0x7a, 0x69, 0x01, 0xf4, 0xcc, 0x69, 0x41, 0xf4, 0xb7, 0x69, - 0x01, 0xb5, 0x01, 0xff, 0x42, 0x44, 0x0f, 0x9a, 0x69, 0x01, 0xf8, 0xe6, - 0x69, 0x41, 0x02, 0x8c, 0x05, 0x26, 0xa8, 0x01, 0xff, 0x45, 0xf2, 0xe0, - 0xa2, 0x69, 0x01, 0xa5, 0x06, 0x42, 0xe9, 0x04, 0x02, 0x6a, 0x41, 0xf4, - 0xba, 0x69, 0x01, 0xb5, 0x01, 0xff, 0x42, 0x44, 0x0f, 0xc7, 0x69, 0x01, - 0xee, 0x95, 0x69, 0x01, 0xf8, 0x88, 0x69, 0x41, 0xf4, 0xa9, 0x69, 0x01, - 0x42, 0xb5, 0xdd, 0xb5, 0x69, 0x41, 0xe1, 0xbb, 0x69, 0x81, 0x2a, 0x42, - 0x27, 0x01, 0xeb, 0x69, 0x01, 0x42, 0xe9, 0x04, 0xd3, 0x69, 0x01, 0xb5, - 0x01, 0xff, 0x80, 0x09, 0xe5, 0xb4, 0x69, 0xc1, 0x00, 0xf4, 0xc4, 0x69, - 0x41, 0x44, 0xc5, 0x16, 0xd2, 0x69, 0x01, 0xe9, 0xc8, 0x69, 0x01, 0x46, - 0x7c, 0xdc, 0xf5, 0x69, 0x41, 0xf1, 0x01, 0x6a, 0x41, 0xa6, 0xea, 0x05, - 0x02, 0x40, 0x00, 0xd9, 0x05, 0xab, 0x9a, 0x05, 0xac, 0xec, 0x04, 0xed, - 0x51, 0x69, 0x81, 0xeb, 0x03, 0xae, 0xfb, 0x01, 0xb0, 0xd3, 0x01, 0xb2, - 0xb4, 0x01, 0xb3, 0x66, 0xb4, 0x30, 0xb7, 0x22, 0xb9, 0x01, 0xff, 0x46, - 0x94, 0xd6, 0x05, 0x69, 0x01, 0x42, 0x92, 0x01, 0x0d, 0x69, 0x01, 0xb5, - 0x01, 0xff, 0xaf, 0x06, 0x43, 0x7a, 0xf1, 0x25, 0x69, 0x41, 0xed, 0x34, - 0x69, 0x01, 0xf0, 0x36, 0x69, 0x41, 0x42, 0xba, 0x05, 0xf2, 0x68, 0x01, - 0x44, 0x70, 0xbe, 0xfb, 0x68, 0x41, 0x42, 0x44, 0x0f, 0x4b, 0x69, 0x01, - 0xa5, 0x15, 0xe9, 0x61, 0x69, 0x01, 0x42, 0xb1, 0x91, 0x4c, 0x69, 0x01, - 0xf5, 0x11, 0x69, 0xc1, 0x00, 0x42, 0xf0, 0x04, 0x3d, 0x69, 0x41, 0x43, - 0x37, 0xa7, 0x28, 0x69, 0x01, 0xb5, 0x01, 0xff, 0x43, 0x0e, 0x41, 0x23, - 0x69, 0x01, 0xee, 0x41, 0x69, 0x01, 0xf4, 0x00, 0x69, 0x41, 0xa1, 0x42, - 0x45, 0xc8, 0x93, 0x0c, 0x69, 0x01, 0xa8, 0x17, 0x42, 0xf0, 0x04, 0x24, - 0x69, 0x01, 0xb5, 0x01, 0xff, 0x42, 0x44, 0x0f, 0x39, 0x69, 0x01, 0xe5, - 0x03, 0x69, 0x01, 0xf5, 0x52, 0x69, 0x41, 0xa5, 0x10, 0x42, 0xb1, 0x27, - 0x54, 0x69, 0x01, 0x42, 0xb1, 0x91, 0x5c, 0x69, 0x01, 0xf5, 0x58, 0x69, - 0x41, 0xe5, 0xfd, 0x68, 0x01, 0xb5, 0x01, 0xff, 0x42, 0x44, 0x0f, 0x01, - 0x69, 0x01, 0xf8, 0x55, 0x69, 0x41, 0xf0, 0x07, 0x69, 0x01, 0xf1, 0x64, - 0x69, 0x41, 0x43, 0xa4, 0x85, 0x27, 0x69, 0x01, 0x03, 0xb1, 0x01, 0x06, - 0x42, 0xb1, 0x27, 0x4e, 0x69, 0x41, 0x44, 0xb6, 0xe5, 0x60, 0x69, 0x01, - 0x43, 0x5a, 0x1a, 0x4a, 0x69, 0x41, 0x42, 0xba, 0x05, 0x35, 0x69, 0x01, - 0xa5, 0x13, 0x42, 0x8f, 0x04, 0x2d, 0x69, 0x01, 0xb5, 0x01, 0xff, 0xf1, - 0x5d, 0x69, 0x01, 0x42, 0xfe, 0x07, 0x1b, 0x69, 0x41, 0xe5, 0x5a, 0x69, - 0x01, 0x44, 0x9a, 0xef, 0x2e, 0x69, 0x41, 0xa4, 0xd2, 0x01, 0xa7, 0x7e, - 0xe9, 0x5b, 0x69, 0x01, 0xaa, 0x53, 0xb3, 0x31, 0xb4, 0x1d, 0xf5, 0x57, - 0x69, 0x01, 0xb9, 0x01, 0xff, 0x42, 0x57, 0x00, 0xfa, 0x68, 0x01, 0x42, - 0xc2, 0x05, 0x22, 0x69, 0x01, 0xe9, 0x4d, 0x69, 0x01, 0x42, 0x87, 0x13, - 0x2f, 0x69, 0x41, 0xa5, 0x06, 0x42, 0x9c, 0x72, 0x62, 0x69, 0x41, 0xe5, - 0x59, 0x69, 0x01, 0x42, 0x1d, 0x04, 0x38, 0x69, 0x41, 0xa8, 0x12, 0x03, - 0x57, 0xa1, 0x06, 0x42, 0x1d, 0x04, 0x40, 0x69, 0x41, 0xf0, 0x1f, 0x69, - 0x01, 0xf4, 0x2b, 0x69, 0x41, 0x42, 0x27, 0x01, 0xf8, 0x68, 0x01, 0x42, - 0xfe, 0x07, 0x46, 0x69, 0x41, 0x42, 0xba, 0x05, 0x02, 0x69, 0x01, 0x02, - 0x97, 0x02, 0x11, 0xe9, 0xf3, 0x68, 0x81, 0x06, 0x43, 0xc3, 0xef, 0x47, - 0x69, 0x41, 0x42, 0x27, 0x01, 0xf5, 0x68, 0x41, 0x43, 0xa4, 0x85, 0x0e, - 0x69, 0x01, 0xf4, 0xf7, 0x68, 0x41, 0xa7, 0x2b, 0xab, 0x01, 0xff, 0x42, - 0xba, 0x05, 0xfe, 0x68, 0x01, 0x02, 0x97, 0x02, 0x12, 0x43, 0x57, 0xa1, - 0x3c, 0x69, 0x01, 0x42, 0xf3, 0x0a, 0xfc, 0x68, 0x01, 0x43, 0x91, 0xa7, - 0x13, 0x69, 0x41, 0x43, 0xca, 0x93, 0x29, 0x69, 0x01, 0x42, 0x0d, 0x00, - 0x10, 0x69, 0x41, 0xa1, 0x12, 0x43, 0xd3, 0xe8, 0x3b, 0x69, 0x01, 0x43, - 0xa2, 0xca, 0x45, 0x69, 0x01, 0x44, 0xc8, 0xd4, 0x33, 0x69, 0x41, 0x42, - 0x57, 0x00, 0x31, 0x69, 0x81, 0x04, 0xf0, 0x43, 0x69, 0x41, 0x42, 0x44, - 0x0f, 0xf9, 0x68, 0x41, 0x42, 0x57, 0x00, 0x37, 0x69, 0x01, 0xa5, 0x06, - 0x42, 0x10, 0x00, 0x18, 0x69, 0x41, 0xe5, 0x15, 0x69, 0x01, 0x42, 0xb5, - 0xdd, 0x09, 0x69, 0x41, 0xa1, 0x6d, 0xa2, 0x58, 0xa5, 0x45, 0xa6, 0x26, - 0x02, 0x50, 0x47, 0x10, 0x43, 0x99, 0x07, 0x19, 0x69, 0x01, 0xf5, 0x53, - 0x69, 0x01, 0x43, 0x1a, 0xaa, 0x5e, 0x69, 0x41, 0x43, 0x87, 0x67, 0x1a, - 0x69, 0x01, 0x43, 0x57, 0xa1, 0x1c, 0x69, 0x01, 0x44, 0x7e, 0xee, 0x16, - 0x69, 0x41, 0x02, 0x97, 0x02, 0x0f, 0x43, 0x57, 0xa1, 0x32, 0x69, 0x01, - 0xef, 0x1d, 0x69, 0xc1, 0x00, 0xee, 0xf4, 0x68, 0x41, 0x42, 0x44, 0x0f, - 0x2a, 0x69, 0x01, 0xf4, 0x08, 0x69, 0x41, 0x43, 0x37, 0xa7, 0x50, 0x69, - 0x01, 0xb5, 0x01, 0xff, 0xee, 0x3e, 0x69, 0x01, 0xf4, 0x0b, 0x69, 0x41, - 0x42, 0x31, 0x12, 0x20, 0x69, 0x81, 0x06, 0x42, 0xef, 0x04, 0xf1, 0x68, - 0x41, 0x46, 0x25, 0x1d, 0x63, 0x69, 0x41, 0x45, 0xfa, 0xe2, 0x42, 0x69, - 0x01, 0x45, 0x07, 0xe3, 0x0a, 0x69, 0x41, 0xa5, 0x12, 0x43, 0x57, 0xa1, - 0xf6, 0x68, 0x01, 0x42, 0xb1, 0x91, 0x5f, 0x69, 0x01, 0x42, 0x1d, 0x04, - 0x1e, 0x69, 0x41, 0x43, 0x37, 0xa7, 0x4f, 0x69, 0x01, 0xf4, 0x30, 0x69, - 0x01, 0xb5, 0x01, 0xff, 0x43, 0x6d, 0xd8, 0x17, 0x69, 0x01, 0xed, 0x44, - 0x69, 0x41, 0xa5, 0x1f, 0xf5, 0x49, 0x69, 0x81, 0x0c, 0x44, 0xca, 0xef, - 0x21, 0x69, 0x01, 0x43, 0x91, 0xa7, 0x56, 0x69, 0x41, 0xee, 0x3a, 0x69, - 0x01, 0x42, 0xe9, 0x04, 0x06, 0x69, 0x01, 0xf1, 0x3f, 0x69, 0x41, 0xf4, - 0x04, 0x69, 0x01, 0xb5, 0x01, 0xff, 0x47, 0xd4, 0xcb, 0xff, 0x68, 0x01, - 0xed, 0x26, 0x69, 0x01, 0x48, 0xca, 0xc6, 0x0f, 0x69, 0x01, 0xf0, 0x2c, - 0x69, 0x41, 0x42, 0x31, 0x12, 0x12, 0x69, 0x01, 0x44, 0xc8, 0x93, 0x48, - 0x69, 0x41, 0x42, 0x31, 0x12, 0x65, 0x69, 0x01, 0x48, 0x6a, 0xc3, 0x14, - 0x69, 0x41, 0x44, 0x16, 0xec, 0xc0, 0x68, 0x01, 0x43, 0xf6, 0xf0, 0xbc, - 0x68, 0x01, 0xa7, 0xf5, 0x04, 0xab, 0xa7, 0x04, 0xac, 0x90, 0x04, 0xad, - 0x8d, 0x03, 0xae, 0xa3, 0x01, 0xb0, 0x8d, 0x01, 0x42, 0x3d, 0x00, 0xc3, - 0x68, 0x01, 0xb3, 0x63, 0xb4, 0x3e, 0x03, 0x79, 0x5d, 0x30, 0xb7, 0x22, - 0xb9, 0x01, 0xff, 0x42, 0x31, 0x12, 0xd9, 0x68, 0x01, 0x43, 0xef, 0x99, - 0xa7, 0x68, 0x01, 0xb5, 0x01, 0xff, 0x47, 0xa0, 0xca, 0xa2, 0x68, 0x01, - 0xed, 0x91, 0x68, 0x01, 0x43, 0x7a, 0xf1, 0xe4, 0x68, 0x41, 0x47, 0x13, - 0xcc, 0x92, 0x68, 0x01, 0x42, 0x50, 0x02, 0xd1, 0x68, 0x41, 0x45, 0x0b, - 0xe1, 0xc1, 0x68, 0x01, 0xf8, 0xb1, 0x68, 0x41, 0x46, 0x88, 0xd6, 0xac, - 0x68, 0x01, 0xa5, 0x11, 0x02, 0x52, 0x00, 0x01, 0xff, 0x45, 0xe8, 0xe0, - 0xae, 0x68, 0x01, 0x44, 0x7e, 0xd9, 0xc6, 0x68, 0x41, 0xf4, 0xf0, 0x68, - 0x01, 0x45, 0xd1, 0xe8, 0xba, 0x68, 0x41, 0xa5, 0x14, 0xa8, 0x06, 0x44, - 0xd1, 0xab, 0xaf, 0x68, 0x41, 0x42, 0xff, 0x17, 0xe8, 0x68, 0x01, 0x43, - 0xc3, 0xef, 0xdb, 0x68, 0x41, 0x44, 0x6e, 0xef, 0xdc, 0x68, 0x01, 0x42, - 0xb5, 0xdd, 0xaa, 0x68, 0x41, 0x42, 0x92, 0x01, 0xef, 0x68, 0x01, 0xa9, - 0x01, 0xff, 0xee, 0xee, 0x68, 0x01, 0x45, 0x3c, 0xe7, 0x9c, 0x68, 0x41, - 0xa1, 0xda, 0x01, 0xa4, 0xb3, 0x01, 0xa7, 0x74, 0xaa, 0x52, 0xb3, 0x2d, - 0xb4, 0x13, 0x50, 0x7a, 0x67, 0x99, 0x68, 0x01, 0xba, 0x01, 0xff, 0xe1, - 0x90, 0x68, 0x01, 0x43, 0xa5, 0x56, 0xa3, 0x68, 0x41, 0x42, 0x31, 0x12, - 0xb4, 0x68, 0x01, 0xa5, 0x06, 0x46, 0xba, 0xdd, 0x9a, 0x68, 0x41, 0xee, - 0xd4, 0x68, 0x01, 0x45, 0xae, 0xe8, 0xb9, 0x68, 0x41, 0xe1, 0xbe, 0x68, - 0x01, 0x45, 0x6f, 0xbe, 0xa5, 0x68, 0x01, 0x43, 0xf9, 0xf0, 0xbf, 0x68, - 0x01, 0x42, 0xe9, 0x04, 0xd3, 0x68, 0x01, 0xb5, 0x01, 0xff, 0xee, 0xd6, - 0x68, 0x01, 0x47, 0x4c, 0xd1, 0xc7, 0x68, 0x41, 0xa1, 0x14, 0xa5, 0x06, - 0x43, 0xc3, 0xef, 0xad, 0x68, 0x41, 0x43, 0x37, 0xa7, 0xc8, 0x68, 0x01, - 0x42, 0xb5, 0xdd, 0xe5, 0x68, 0x41, 0x42, 0x8a, 0x05, 0xc4, 0x68, 0x01, - 0xed, 0xcf, 0x68, 0x41, 0x42, 0xb0, 0x35, 0xeb, 0x68, 0x01, 0xa7, 0x14, - 0xab, 0x06, 0x42, 0xe9, 0x04, 0xd0, 0x68, 0x41, 0x42, 0xb0, 0x35, 0x95, - 0x68, 0x01, 0x49, 0xb1, 0xbd, 0x8f, 0x68, 0x41, 0x42, 0x92, 0x01, 0x93, - 0x68, 0x01, 0xf5, 0xca, 0x68, 0xc1, 0x00, 0x48, 0xaa, 0xc0, 0xb0, 0x68, - 0x01, 0x43, 0xc0, 0x10, 0xd2, 0x68, 0x01, 0xed, 0xbb, 0x68, 0x01, 0x42, - 0x10, 0x00, 0xb5, 0x68, 0x41, 0xa1, 0x1a, 0x02, 0x97, 0x02, 0x0c, 0x43, - 0x59, 0x93, 0xab, 0x68, 0x01, 0x44, 0x9b, 0xcf, 0x9d, 0x68, 0x41, 0x45, - 0x10, 0xe1, 0x94, 0x68, 0x01, 0xf4, 0xbd, 0x68, 0x41, 0xed, 0xd7, 0x68, - 0x01, 0xf0, 0xda, 0x68, 0x41, 0x46, 0x86, 0xdb, 0xb2, 0x68, 0x01, 0xf1, - 0xec, 0x68, 0x41, 0xa1, 0x61, 0xa2, 0x12, 0x46, 0xf2, 0xd8, 0xb8, 0x68, - 0x01, 0x43, 0x57, 0xa1, 0xe6, 0x68, 0x01, 0x43, 0xc9, 0x93, 0xe7, 0x68, - 0x41, 0xa1, 0x35, 0xa5, 0x1c, 0xe9, 0xdd, 0x68, 0x81, 0x0d, 0xb5, 0x01, - 0xff, 0x43, 0xa4, 0x85, 0xcc, 0x68, 0x01, 0xe5, 0xa4, 0x68, 0x41, 0x45, - 0x3c, 0xe7, 0xb7, 0x68, 0x01, 0xf4, 0xa6, 0x68, 0x41, 0x45, 0xd7, 0xe2, - 0x97, 0x68, 0x01, 0x43, 0xdf, 0x80, 0xc2, 0x68, 0x01, 0xb5, 0x01, 0xff, - 0xed, 0x9b, 0x68, 0x01, 0xf8, 0xe1, 0x68, 0x41, 0x02, 0x5a, 0x00, 0x06, - 0x43, 0xf6, 0x19, 0xdf, 0x68, 0x41, 0x4c, 0x5d, 0x8b, 0x9e, 0x68, 0x01, - 0x46, 0x22, 0xdc, 0xe3, 0x68, 0x41, 0x80, 0x0f, 0xa5, 0x01, 0xff, 0x43, - 0x20, 0x9d, 0xde, 0x68, 0x01, 0x42, 0x2f, 0x03, 0xcb, 0x68, 0x41, 0x47, - 0x85, 0xcf, 0xb3, 0x68, 0x01, 0x45, 0x10, 0xe6, 0xd8, 0x68, 0x41, 0xa1, - 0x0a, 0x42, 0xff, 0x17, 0xed, 0x68, 0x01, 0xf5, 0xcd, 0x68, 0x41, 0xed, - 0xc5, 0x68, 0x01, 0xf0, 0xb6, 0x68, 0x41, 0x42, 0x31, 0x12, 0xa9, 0x68, - 0x01, 0xa5, 0x13, 0x45, 0x80, 0x67, 0xa8, 0x68, 0x01, 0xb5, 0x01, 0xff, - 0x4a, 0x9d, 0xac, 0xd5, 0x68, 0x01, 0xf4, 0xce, 0x68, 0x41, 0x02, 0x92, - 0x00, 0x20, 0xf4, 0xc9, 0x68, 0x01, 0xb5, 0x01, 0xff, 0x43, 0x17, 0xf1, - 0xa1, 0x68, 0x01, 0xed, 0xe2, 0x68, 0x01, 0xb3, 0x01, 0xff, 0x43, 0xd3, - 0xe8, 0xe0, 0x68, 0x01, 0x46, 0x7c, 0xd9, 0x9f, 0x68, 0x41, 0x47, 0x35, - 0xce, 0xea, 0x68, 0x01, 0x43, 0xa3, 0xd1, 0xe9, 0x68, 0x41, 0x44, 0xfe, - 0xeb, 0x98, 0x68, 0x01, 0x02, 0x22, 0x00, 0x01, 0xff, 0xf0, 0xa0, 0x68, - 0x01, 0x43, 0xdf, 0x80, 0x96, 0x68, 0x41, 0x02, 0xa0, 0x19, 0x81, 0x03, - 0x07, 0x6d, 0xce, 0xf2, 0x02, 0xab, 0xc6, 0x02, 0xac, 0xa9, 0x02, 0xad, - 0xcc, 0x01, 0xae, 0x78, 0xb0, 0x5e, 0xb3, 0x34, 0xb4, 0x1b, 0x44, 0xaa, - 0xef, 0x73, 0x68, 0x01, 0x45, 0x3a, 0xe9, 0x76, 0x68, 0x01, 0xb9, 0x01, - 0xff, 0x4c, 0x49, 0x8a, 0x62, 0x68, 0x01, 0x45, 0x27, 0xe3, 0x5e, 0x68, - 0x41, 0x43, 0x9f, 0x87, 0x78, 0x68, 0x01, 0x02, 0x2e, 0x02, 0x01, 0xff, - 0x49, 0x70, 0xb9, 0x58, 0x68, 0x01, 0x45, 0x10, 0xe6, 0x68, 0x68, 0x41, - 0x46, 0x84, 0xcf, 0x77, 0x68, 0x01, 0x45, 0x1d, 0xe3, 0x5a, 0x68, 0x01, - 0x02, 0xb0, 0x01, 0x0c, 0x43, 0x57, 0xa1, 0x59, 0x68, 0x01, 0x42, 0x87, - 0x13, 0x7d, 0x68, 0x41, 0x46, 0x48, 0xdd, 0x69, 0x68, 0x01, 0x46, 0xc0, - 0xdd, 0x6a, 0x68, 0x41, 0x44, 0xe6, 0xeb, 0x72, 0x68, 0x01, 0x45, 0xb9, - 0xe2, 0x61, 0x68, 0x01, 0x42, 0x52, 0x00, 0x67, 0x68, 0x01, 0x46, 0xe4, - 0xdd, 0x81, 0x68, 0x41, 0x47, 0xa9, 0xcd, 0x65, 0x68, 0x01, 0xa7, 0x23, - 0xb3, 0x15, 0x4b, 0x56, 0xa1, 0x64, 0x68, 0x01, 0xb9, 0x01, 0xff, 0x45, - 0x06, 0xe1, 0x80, 0x68, 0x01, 0x47, 0xd6, 0xce, 0x6d, 0x68, 0x41, 0x42, - 0x92, 0x01, 0x8b, 0x68, 0x01, 0x44, 0x00, 0xce, 0x57, 0x68, 0x41, 0xa7, - 0x0c, 0x4a, 0x13, 0xaa, 0x74, 0x68, 0x01, 0x42, 0xe9, 0x04, 0x8e, 0x68, - 0x41, 0x43, 0x9f, 0x87, 0x8a, 0x68, 0x01, 0x46, 0x8c, 0xd8, 0x75, 0x68, - 0x01, 0x43, 0x5e, 0xa1, 0x7a, 0x68, 0xc1, 0x00, 0x46, 0x2a, 0x1c, 0x7b, - 0x68, 0x41, 0xe1, 0x8c, 0x68, 0x81, 0x44, 0xa2, 0x22, 0x02, 0x97, 0x02, - 0x14, 0xa6, 0x06, 0x47, 0x22, 0xd1, 0x7f, 0x68, 0x41, 0x44, 0xae, 0x35, - 0x7c, 0x68, 0x01, 0x49, 0xb4, 0xba, 0x6b, 0x68, 0x41, 0xf1, 0x79, 0x68, - 0x01, 0x48, 0x9a, 0xc8, 0x82, 0x68, 0x41, 0xa1, 0x12, 0x44, 0xc6, 0xe8, - 0x7e, 0x68, 0x01, 0x4a, 0xcd, 0xa9, 0x6c, 0x68, 0x01, 0x43, 0x5e, 0xa1, - 0x84, 0x68, 0x41, 0x47, 0x8b, 0xca, 0x5c, 0x68, 0x01, 0x44, 0xde, 0x80, - 0x5f, 0x68, 0x41, 0x03, 0x9c, 0x85, 0x01, 0xff, 0x46, 0x92, 0xd8, 0x87, - 0x68, 0x01, 0x43, 0x65, 0xf1, 0x88, 0x68, 0x41, 0xa1, 0x0c, 0x42, 0xc2, - 0x05, 0x89, 0x68, 0x01, 0x48, 0x8a, 0xc6, 0x5b, 0x68, 0x41, 0x44, 0xce, - 0xeb, 0x71, 0x68, 0x01, 0x4c, 0xf5, 0x8f, 0x63, 0x68, 0x41, 0x42, 0x57, - 0x00, 0x60, 0x68, 0x01, 0x02, 0x97, 0x02, 0x0d, 0xa9, 0x01, 0xff, 0x43, - 0xdf, 0x17, 0x5d, 0x68, 0x01, 0xf1, 0x8d, 0x68, 0x41, 0x43, 0xa4, 0x85, - 0x86, 0x68, 0x01, 0x43, 0x35, 0xf1, 0x6e, 0x68, 0x01, 0x44, 0xee, 0xef, - 0x70, 0x68, 0x41, 0xee, 0x6f, 0x68, 0x01, 0x44, 0x23, 0xe3, 0x66, 0x68, - 0x41, 0xe5, 0x85, 0x68, 0x01, 0x42, 0xb5, 0xdd, 0x83, 0x68, 0x41, 0x44, - 0x92, 0xec, 0x39, 0x68, 0x01, 0xa7, 0xcc, 0x04, 0xab, 0xa5, 0x04, 0xac, - 0x85, 0x04, 0xad, 0x8a, 0x03, 0xae, 0xdc, 0x01, 0xb0, 0x88, 0x01, 0x43, - 0x80, 0x05, 0x3a, 0x68, 0x01, 0xb3, 0x3b, 0xb4, 0x14, 0xb5, 0x06, 0x43, - 0xd2, 0x06, 0x52, 0x68, 0x41, 0x48, 0x2a, 0xc0, 0x20, 0x68, 0x01, 0x46, - 0x68, 0xdb, 0x44, 0x68, 0x41, 0x02, 0x97, 0x02, 0x15, 0x48, 0xaa, 0xc4, - 0x06, 0x68, 0x01, 0xb5, 0x01, 0xff, 0x47, 0xb3, 0xbd, 0x0c, 0x68, 0x01, - 0x43, 0x6d, 0xd8, 0x2e, 0x68, 0x41, 0x43, 0x0e, 0x41, 0x4a, 0x68, 0x01, - 0x46, 0x7e, 0xdd, 0x31, 0x68, 0x41, 0x46, 0x98, 0xd8, 0x11, 0x68, 0x01, - 0xa8, 0x1c, 0x43, 0xbd, 0x48, 0x23, 0x68, 0x01, 0xaf, 0x06, 0x42, 0x9c, - 0x72, 0x15, 0x68, 0x41, 0x44, 0x3e, 0xee, 0x30, 0x68, 0x01, 0xf1, 0x3c, - 0x68, 0x01, 0xf4, 0x4b, 0x68, 0x41, 0xa9, 0x13, 0x4c, 0xb1, 0x91, 0x40, - 0x68, 0x01, 0xb5, 0x01, 0xff, 0x47, 0xfd, 0xcd, 0x05, 0x68, 0x01, 0xed, - 0x37, 0x68, 0x41, 0x4a, 0xf3, 0xab, 0x08, 0x68, 0x01, 0x43, 0xdf, 0x80, - 0x3e, 0x68, 0x41, 0xa1, 0x31, 0x42, 0xc2, 0x05, 0x2a, 0x68, 0x01, 0x03, - 0xb6, 0x00, 0x06, 0x42, 0x50, 0x02, 0x2d, 0x68, 0x41, 0x0b, 0x4c, 0x9d, - 0x11, 0x0d, 0x9a, 0x85, 0x01, 0xff, 0x42, 0x16, 0x00, 0x0a, 0x68, 0x01, - 0x45, 0x74, 0xb9, 0x09, 0x68, 0x41, 0x42, 0x16, 0x00, 0x03, 0x68, 0x01, - 0x45, 0x74, 0xb9, 0x02, 0x68, 0x41, 0x49, 0x4c, 0x8a, 0x28, 0x68, 0x01, - 0xa1, 0x0c, 0x45, 0xb1, 0xe5, 0x1d, 0x68, 0x01, 0x44, 0xdc, 0x96, 0x1b, - 0x68, 0x41, 0xed, 0x4c, 0x68, 0x01, 0x43, 0xdf, 0x80, 0x42, 0x68, 0x41, - 0xa1, 0x9e, 0x01, 0x02, 0xa1, 0x10, 0x8d, 0x01, 0x42, 0x92, 0x01, 0x54, - 0x68, 0x01, 0xa7, 0x68, 0x43, 0xb0, 0x42, 0x2c, 0x68, 0x01, 0x43, 0x3f, - 0xee, 0x47, 0x68, 0x01, 0xab, 0x4e, 0x02, 0xa4, 0x02, 0x40, 0xb4, 0x22, - 0xb9, 0x0f, 0xba, 0x01, 0xff, 0x46, 0xac, 0xc4, 0x07, 0x68, 0x01, 0x47, - 0xf3, 0xd3, 0x1f, 0x68, 0x41, 0x42, 0xc2, 0x05, 0x49, 0x68, 0x01, 0xe9, - 0x4f, 0x68, 0xc1, 0x00, 0x4c, 0xc1, 0x93, 0x41, 0x68, 0x41, 0x42, 0xba, - 0x05, 0x3f, 0x68, 0x81, 0x06, 0x45, 0x79, 0xe6, 0x12, 0x68, 0x41, 0x80, - 0x01, 0xff, 0x44, 0xea, 0xed, 0x19, 0x68, 0x01, 0x44, 0x5a, 0xee, 0x22, - 0x68, 0x41, 0xe1, 0x51, 0x68, 0x01, 0x43, 0x57, 0xa1, 0x4d, 0x68, 0x41, - 0x45, 0xa2, 0xac, 0x43, 0x68, 0x01, 0x44, 0xbe, 0x06, 0x14, 0x68, 0x41, - 0x44, 0x1c, 0x01, 0x0d, 0x68, 0x01, 0x43, 0xd5, 0x58, 0x45, 0x68, 0x01, - 0x03, 0x1a, 0xf1, 0x01, 0xff, 0x45, 0xad, 0xc4, 0x00, 0x68, 0x01, 0x45, - 0x2e, 0xe6, 0x16, 0x68, 0x41, 0x49, 0x4c, 0x8a, 0x29, 0x68, 0x01, 0x49, - 0xbe, 0xb3, 0x34, 0x68, 0x41, 0x46, 0xac, 0xc4, 0x04, 0x68, 0x01, 0xf1, - 0x55, 0x68, 0x41, 0xa1, 0x39, 0x02, 0x16, 0x00, 0x2b, 0x4b, 0xe7, 0x99, - 0x25, 0x68, 0x01, 0x45, 0xf2, 0xd8, 0x24, 0x68, 0x01, 0xaf, 0x06, 0x49, - 0x6e, 0xbe, 0x10, 0x68, 0x41, 0x4a, 0xcb, 0xab, 0x1e, 0x68, 0x01, 0x02, - 0xe9, 0x04, 0x01, 0xff, 0x43, 0x8f, 0x8c, 0x36, 0x68, 0x01, 0x43, 0x35, - 0xf1, 0x26, 0x68, 0x41, 0x43, 0xf6, 0x19, 0x48, 0x68, 0x01, 0xf1, 0x56, - 0x68, 0x41, 0xa5, 0x0c, 0x45, 0x15, 0xe6, 0x0f, 0x68, 0x01, 0x47, 0x99, - 0xd1, 0x3d, 0x68, 0x41, 0x44, 0x96, 0xed, 0x1a, 0x68, 0x01, 0xed, 0x4e, - 0x68, 0x81, 0x0c, 0x43, 0xf6, 0x19, 0x32, 0x68, 0x01, 0x42, 0x2f, 0x03, - 0x46, 0x68, 0x41, 0x46, 0x3c, 0xd7, 0x0b, 0x68, 0x01, 0x45, 0x74, 0xb9, - 0x0b, 0x68, 0x01, 0x44, 0x17, 0x70, 0x2b, 0x68, 0x01, 0x44, 0xae, 0xef, - 0x0e, 0x68, 0x41, 0x44, 0xd2, 0xeb, 0x17, 0x68, 0x01, 0x46, 0x86, 0xd8, - 0x18, 0x68, 0x01, 0x45, 0x6f, 0xe6, 0x38, 0x68, 0x01, 0xf5, 0x53, 0x68, - 0xc1, 0x00, 0x43, 0x6d, 0xd8, 0x2f, 0x68, 0x41, 0xa1, 0x18, 0xa5, 0x0c, - 0x43, 0x32, 0xf1, 0x3b, 0x68, 0x01, 0x43, 0x5e, 0xa1, 0x35, 0x68, 0x41, - 0xf4, 0x33, 0x68, 0x01, 0x48, 0x4a, 0xc9, 0x13, 0x68, 0x41, 0x42, 0xe1, - 0x07, 0x27, 0x68, 0x01, 0xf1, 0x50, 0x68, 0x41, 0x48, 0x8a, 0xc1, 0x01, - 0x68, 0x01, 0x05, 0x17, 0xd9, 0x01, 0xff, 0x46, 0x16, 0xd9, 0x21, 0x68, - 0x01, 0x43, 0xdf, 0x80, 0x1c, 0x68, 0x41, 0xe5, 0xca, 0xa6, 0x00, 0x42, - 0xb5, 0xdd, 0xc5, 0xa6, 0x40, 0xe1, 0xdb, 0xa6, 0x00, 0x43, 0x5c, 0x56, - 0xb1, 0xa6, 0x00, 0xa7, 0x3d, 0xe9, 0xcf, 0xa6, 0x00, 0xaa, 0x25, 0x43, - 0xa4, 0x02, 0xc3, 0xa6, 0x00, 0xb4, 0x11, 0xf5, 0xbd, 0xa6, 0x80, 0x06, - 0x42, 0xf7, 0x19, 0xa8, 0xa6, 0x40, 0x42, 0x44, 0x0f, 0xbc, 0xa6, 0x40, - 0x42, 0x27, 0x01, 0xc7, 0xa6, 0x00, 0x42, 0x9c, 0x72, 0xeb, 0xa6, 0x40, - 0x43, 0xa4, 0x85, 0xb2, 0xa6, 0x00, 0x42, 0x27, 0x01, 0xc6, 0xa6, 0x00, - 0x43, 0xc9, 0x93, 0xbe, 0xa6, 0x40, 0xe1, 0xd5, 0xa6, 0x00, 0x42, 0x24, - 0x02, 0xd4, 0xa6, 0x00, 0x45, 0xdf, 0xe4, 0xd3, 0xa6, 0x40, 0xe1, 0xe3, - 0xa6, 0x00, 0xa2, 0x18, 0xa5, 0x0c, 0xe9, 0xce, 0xa6, 0x00, 0xef, 0xe6, - 0xa6, 0x00, 0xf5, 0xb5, 0xa6, 0x40, 0x43, 0x37, 0xa7, 0xaf, 0xa6, 0x00, - 0xee, 0xe2, 0xa6, 0x40, 0x42, 0x31, 0x12, 0xe7, 0xa6, 0x00, 0x42, 0x92, - 0x01, 0xe0, 0xa6, 0x40, 0xe1, 0xaa, 0xa6, 0x00, 0x44, 0x62, 0xec, 0xae, - 0xa6, 0x00, 0xe9, 0xdc, 0xa6, 0x00, 0x42, 0xb1, 0x91, 0xde, 0xa6, 0x00, - 0xf5, 0xcd, 0xa6, 0x40, 0xe1, 0xa1, 0xa6, 0x00, 0xa5, 0x25, 0xe9, 0xe5, - 0xa6, 0x00, 0xef, 0xdf, 0xa6, 0x80, 0x10, 0x42, 0x6c, 0x09, 0xe9, 0xa6, - 0x00, 0xf5, 0xa3, 0xa6, 0x00, 0x43, 0x91, 0xa7, 0xba, 0xa6, 0x40, 0x44, - 0xb2, 0xec, 0xef, 0xa6, 0x00, 0x43, 0x74, 0xf1, 0xee, 0xa6, 0x40, 0xee, - 0xd2, 0xa6, 0x00, 0xf4, 0xbb, 0xa6, 0x00, 0x42, 0xb5, 0xdd, 0xc4, 0xa6, - 0x40, 0x45, 0xf2, 0xe0, 0xed, 0xa6, 0x00, 0x42, 0x27, 0x01, 0xcb, 0xa6, - 0x00, 0x42, 0xe9, 0x04, 0xd9, 0xa6, 0x00, 0xf5, 0xd8, 0xa6, 0x40, 0x43, - 0x03, 0x12, 0xf4, 0xa6, 0x00, 0xad, 0x01, 0xff, 0x0c, 0xfd, 0x8a, 0x06, - 0x42, 0x6c, 0x00, 0xf5, 0xa6, 0x40, 0x47, 0xa1, 0xcf, 0xf0, 0xa6, 0x00, - 0x49, 0x96, 0xbd, 0xf1, 0xa6, 0x40, 0x06, 0x27, 0x82, 0x71, 0xac, 0x01, - 0xff, 0x48, 0xaa, 0xbf, 0xf6, 0xf9, 0x01, 0x48, 0x52, 0xc3, 0x70, 0xfa, - 0x01, 0xaf, 0x01, 0xff, 0x42, 0x10, 0x00, 0x88, 0xf3, 0x81, 0x52, 0x02, - 0xc6, 0x00, 0x01, 0xff, 0x02, 0x5d, 0x00, 0x0a, 0x48, 0x47, 0x9c, 0xf4, - 0xf5, 0x01, 0xf8, 0x17, 0x27, 0x40, 0x4b, 0x44, 0x9c, 0xf6, 0xf5, 0x01, - 0xf8, 0x10, 0x26, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa2, 0x16, - 0x45, 0x1e, 0x14, 0x11, 0x26, 0x00, 0x47, 0x18, 0xd0, 0xbd, 0x2b, 0x00, - 0x48, 0x47, 0x9c, 0xf5, 0xf5, 0x01, 0xf8, 0x12, 0x26, 0x40, 0x45, 0xe9, - 0xcb, 0xf3, 0xf5, 0x01, 0x04, 0xa6, 0x24, 0x01, 0xff, 0x45, 0x1e, 0x14, - 0xf9, 0xf5, 0x01, 0x48, 0x47, 0x9c, 0xf7, 0xf5, 0x41, 0x50, 0x4d, 0x1c, - 0x49, 0x27, 0x40, 0x49, 0x49, 0xb3, 0x44, 0x1b, 0x00, 0x06, 0x24, 0x6d, - 0x85, 0x07, 0x06, 0xc4, 0x06, 0xbe, 0x06, 0x0f, 0x1b, 0x6d, 0xad, 0x06, - 0x07, 0xc1, 0x05, 0xaa, 0x03, 0x0f, 0x40, 0x31, 0xcd, 0x01, 0x02, 0x6c, - 0x09, 0x9d, 0x01, 0x05, 0x2f, 0x03, 0x70, 0x0b, 0xd1, 0x75, 0x06, 0x45, - 0x26, 0xe9, 0x5c, 0x1b, 0x40, 0x48, 0xf2, 0xc4, 0x3c, 0x1b, 0x80, 0x59, - 0x45, 0xba, 0xe6, 0x42, 0x1b, 0x80, 0x4c, 0x47, 0x41, 0xd2, 0x3a, 0x1b, - 0x80, 0x3f, 0x44, 0x3d, 0xd3, 0x38, 0x1b, 0x80, 0x32, 0xb4, 0x0d, 0x43, - 0x97, 0x95, 0x36, 0x1b, 0xc0, 0x00, 0x45, 0xcc, 0xde, 0x37, 0x1b, 0x40, - 0x45, 0xa3, 0x27, 0x3e, 0x1b, 0x80, 0x06, 0x45, 0xe1, 0xca, 0x35, 0x1b, - 0x40, 0x80, 0x01, 0xff, 0x44, 0x59, 0xcb, 0x3f, 0x1b, 0x80, 0x06, 0x46, - 0xe0, 0xca, 0x40, 0x1b, 0x40, 0x47, 0xdf, 0xca, 0x41, 0x1b, 0x40, 0x45, - 0xb3, 0xde, 0x39, 0x1b, 0x40, 0x47, 0xdf, 0xca, 0x3b, 0x1b, 0x40, 0x47, - 0xdf, 0xca, 0x43, 0x1b, 0x40, 0x47, 0xdf, 0xca, 0x3d, 0x1b, 0x40, 0x45, - 0xb5, 0xe1, 0x04, 0x1b, 0x00, 0x45, 0x05, 0xe2, 0x02, 0x1b, 0x00, 0x47, - 0x79, 0xd2, 0x34, 0x1b, 0x00, 0x46, 0x2a, 0xdd, 0x03, 0x1b, 0x00, 0x04, - 0x86, 0xef, 0x01, 0xff, 0x46, 0x4f, 0x23, 0x01, 0x1b, 0x00, 0x45, 0x37, - 0xe7, 0x00, 0x1b, 0x40, 0xad, 0x16, 0x43, 0x9f, 0x01, 0x5a, 0x1b, 0xc0, - 0x00, 0x80, 0x01, 0xff, 0x45, 0x9c, 0xe1, 0x7f, 0x1b, 0x00, 0x47, 0x9b, - 0xbf, 0x7d, 0x1b, 0x40, 0x43, 0x3c, 0x1e, 0x5b, 0x1b, 0x80, 0x06, 0x45, - 0xf5, 0xe2, 0x60, 0x1b, 0x40, 0x48, 0x9a, 0xbf, 0x7e, 0x1b, 0x40, 0x0a, - 0xd6, 0x57, 0x97, 0x01, 0xa4, 0x51, 0x0a, 0x77, 0xaa, 0x26, 0x0b, 0xd5, - 0x9f, 0x01, 0xff, 0x08, 0xfa, 0x5f, 0x11, 0x06, 0xe0, 0xdb, 0x01, 0xff, - 0x42, 0x23, 0x02, 0x75, 0x1b, 0x00, 0x42, 0x83, 0x0e, 0x74, 0x1b, 0x40, - 0x42, 0x6d, 0x00, 0x77, 0x1b, 0x00, 0x42, 0x65, 0x08, 0x76, 0x1b, 0x40, - 0x09, 0xf0, 0xb4, 0x17, 0x06, 0xe6, 0xdb, 0x01, 0xff, 0x43, 0x1c, 0x01, - 0x78, 0x1b, 0x00, 0x43, 0xa1, 0x01, 0x7c, 0x1b, 0x00, 0x43, 0x75, 0x44, - 0x79, 0x1b, 0x40, 0x42, 0x6d, 0x00, 0x7a, 0x1b, 0x00, 0x42, 0x65, 0x08, - 0x7b, 0x1b, 0x40, 0xa1, 0x20, 0xa5, 0x12, 0x43, 0xa1, 0x01, 0x66, 0x1b, - 0x00, 0x43, 0x63, 0x0e, 0x61, 0x1b, 0x00, 0x43, 0x75, 0x44, 0x63, 0x1b, - 0x40, 0x42, 0x1d, 0x01, 0x62, 0x1b, 0x00, 0x43, 0x75, 0x44, 0x68, 0x1b, - 0x40, 0x43, 0xfd, 0x09, 0x67, 0x1b, 0x00, 0x43, 0xa1, 0x01, 0x69, 0x1b, - 0x00, 0x42, 0x1d, 0x01, 0x64, 0x1b, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x44, - 0xaa, 0xec, 0x6a, 0x1b, 0x00, 0x46, 0x2a, 0xdd, 0x65, 0x1b, 0x40, 0x45, - 0xa6, 0xe1, 0x72, 0x1b, 0x00, 0x45, 0xf0, 0xe2, 0x6c, 0x1b, 0x00, 0x44, - 0x3e, 0x85, 0x73, 0x1b, 0x00, 0x47, 0x6a, 0x7e, 0x6f, 0x1b, 0x00, 0x04, - 0x98, 0xb8, 0x06, 0x45, 0x0e, 0xe8, 0x6b, 0x1b, 0x40, 0x42, 0xc3, 0x01, - 0x6e, 0x1b, 0x80, 0x0d, 0x42, 0x1f, 0x01, 0x6d, 0x1b, 0xc0, 0x00, 0x4d, - 0x64, 0x7e, 0x70, 0x1b, 0x40, 0x4d, 0x64, 0x7e, 0x71, 0x1b, 0x40, 0xa1, - 0xdc, 0x02, 0x42, 0x16, 0x00, 0x29, 0x1b, 0x80, 0xce, 0x02, 0x42, 0x37, - 0x00, 0x18, 0x1b, 0x80, 0xc0, 0x02, 0x42, 0xa1, 0x10, 0x24, 0x1b, 0x80, - 0x9c, 0x02, 0xa5, 0x8d, 0x02, 0x42, 0x24, 0x02, 0x15, 0x1b, 0x80, 0xff, - 0x01, 0x42, 0x22, 0x00, 0x33, 0x1b, 0x00, 0x45, 0x44, 0xe4, 0x07, 0x1b, - 0x80, 0xeb, 0x01, 0x42, 0xbd, 0x26, 0x1a, 0x1b, 0x80, 0xdd, 0x01, 0xab, - 0xc3, 0x01, 0x42, 0x74, 0x00, 0x2e, 0x1b, 0x80, 0xae, 0x01, 0x42, 0x6c, - 0x00, 0x2b, 0x1b, 0x00, 0xae, 0x8e, 0x01, 0x45, 0x5b, 0xe6, 0x11, 0x1b, - 0x80, 0x80, 0x01, 0x42, 0x6c, 0x09, 0x27, 0x1b, 0x80, 0x73, 0x42, 0x71, - 0x00, 0x2d, 0x1b, 0x80, 0x5f, 0x42, 0x15, 0x06, 0x32, 0x1b, 0x80, 0x47, - 0xb4, 0x25, 0x45, 0xa4, 0xe8, 0x09, 0x1b, 0x80, 0x18, 0x48, 0x82, 0xc9, - 0x49, 0x1b, 0x00, 0x42, 0xa9, 0x01, 0x2f, 0x1b, 0x00, 0x42, 0x34, 0x22, - 0x2c, 0x1b, 0x00, 0x49, 0x46, 0xbf, 0x4a, 0x1b, 0x40, 0x47, 0xdf, 0xca, - 0x0a, 0x1b, 0x40, 0xe1, 0x22, 0x1b, 0x80, 0x06, 0x49, 0x61, 0xbf, 0x47, - 0x1b, 0x40, 0x80, 0x01, 0xff, 0x45, 0x02, 0xe5, 0x1d, 0x1b, 0x00, 0x4f, - 0xb0, 0x6e, 0x1e, 0x1b, 0x00, 0x44, 0x1e, 0xc2, 0x23, 0x1b, 0x40, 0x03, - 0x63, 0x22, 0x01, 0xff, 0x42, 0x24, 0x02, 0x30, 0x1b, 0x00, 0x42, 0x6c, - 0x09, 0x31, 0x1b, 0x40, 0x45, 0x43, 0xd2, 0x0b, 0x1b, 0xc0, 0x00, 0x47, - 0xdf, 0xca, 0x0c, 0x1b, 0x40, 0x46, 0x44, 0xd5, 0x28, 0x1b, 0x40, 0x47, - 0xdf, 0xca, 0x12, 0x1b, 0x40, 0xe1, 0x26, 0x1b, 0x80, 0x0c, 0x42, 0x24, - 0x02, 0x17, 0x1b, 0x00, 0x42, 0x34, 0x22, 0x1c, 0x1b, 0x40, 0x47, 0xc3, - 0xca, 0x21, 0x1b, 0x40, 0x46, 0xf4, 0xc4, 0x0d, 0x1b, 0xc0, 0x00, 0x47, - 0xdf, 0xca, 0x0e, 0x1b, 0x40, 0xe1, 0x13, 0x1b, 0x80, 0x06, 0x49, 0x5d, - 0xb7, 0x46, 0x1b, 0x40, 0x4a, 0xb5, 0x6e, 0x14, 0x1b, 0x00, 0x47, 0x2e, - 0xce, 0x45, 0x1b, 0x40, 0x45, 0xb8, 0xde, 0x1b, 0x1b, 0x40, 0x47, 0xdf, - 0xca, 0x08, 0x1b, 0x40, 0x45, 0xa4, 0xde, 0x16, 0x1b, 0x40, 0x47, 0x2e, - 0xce, 0x48, 0x1b, 0x00, 0x44, 0x8b, 0x2c, 0x0f, 0x1b, 0x40, 0x02, 0x6b, - 0x00, 0x01, 0xff, 0x43, 0x6b, 0x02, 0x25, 0x1b, 0x00, 0x05, 0xb1, 0x6e, - 0x01, 0xff, 0x49, 0xa3, 0xb3, 0x1f, 0x1b, 0x00, 0x49, 0xb6, 0x6e, 0x20, - 0x1b, 0x40, 0x45, 0xc2, 0xde, 0x19, 0x1b, 0x40, 0x48, 0x92, 0xbf, 0x2a, - 0x1b, 0x40, 0x45, 0x44, 0xe4, 0x10, 0x1b, 0x00, 0x44, 0x8b, 0x2c, 0x05, - 0x1b, 0x80, 0x0c, 0x4b, 0x9e, 0x9f, 0x4c, 0x1b, 0x00, 0x4b, 0xe8, 0xa0, - 0x4b, 0x1b, 0x40, 0x47, 0xdf, 0xca, 0x06, 0x1b, 0x40, 0x47, 0xb5, 0xd1, - 0x4f, 0x1b, 0x00, 0x44, 0x56, 0xef, 0x4e, 0x1b, 0x40, 0x45, 0xc3, 0x0a, - 0x58, 0x1b, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x59, 0x1b, 0x00, 0x43, - 0xbf, 0x0a, 0x51, 0x1b, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, - 0x50, 0x1b, 0x40, 0x44, 0x25, 0x01, 0x53, 0x1b, 0x00, 0x42, 0x15, 0x02, - 0x52, 0x1b, 0x40, 0x44, 0x27, 0x1d, 0x57, 0x1b, 0x00, 0x42, 0x60, 0x25, - 0x56, 0x1b, 0x40, 0x43, 0xa7, 0x05, 0x55, 0x1b, 0x00, 0x43, 0xcb, 0x06, - 0x54, 0x1b, 0x40, 0x02, 0x6c, 0x09, 0x06, 0x44, 0x56, 0xef, 0x5e, 0x1b, - 0x40, 0x47, 0x8f, 0xd0, 0x5d, 0x1b, 0x00, 0x45, 0xff, 0x70, 0x5f, 0x1b, - 0x40, 0x42, 0xd8, 0x00, 0x6f, 0xf9, 0x01, 0x4a, 0x5b, 0xa8, 0xc4, 0xf6, - 0x01, 0x4b, 0xe5, 0xa1, 0x56, 0xf9, 0x41, 0x43, 0x8c, 0x09, 0xa1, 0xf9, - 0x01, 0x5e, 0x7c, 0x13, 0xf8, 0xf3, 0x41, 0xab, 0x0c, 0x42, 0x10, 0x00, - 0x53, 0xf9, 0x01, 0x4b, 0x98, 0xa1, 0x2b, 0xf4, 0x41, 0x80, 0x1f, 0x67, - 0x2d, 0x05, 0xab, 0x27, 0x00, 0xb3, 0x01, 0xff, 0x1a, 0xf8, 0x1f, 0x06, - 0x44, 0x88, 0x4b, 0x08, 0x00, 0x40, 0x49, 0x90, 0xba, 0x5b, 0x2b, 0x00, - 0x4d, 0x36, 0x86, 0x5d, 0x2b, 0x40, 0x4b, 0x49, 0x9e, 0x82, 0xf5, 0x01, - 0x5a, 0x1a, 0x22, 0x19, 0xf5, 0x41, 0x80, 0x01, 0xff, 0x45, 0x3d, 0xe1, - 0x7c, 0xf4, 0x01, 0x46, 0xf9, 0x59, 0x7c, 0xf3, 0x01, 0x45, 0x8c, 0x58, - 0x24, 0xf4, 0x01, 0x46, 0xeb, 0x07, 0xbc, 0xf6, 0x41, 0x45, 0x88, 0xe1, - 0xee, 0xf9, 0x01, 0xa3, 0x96, 0x8a, 0x01, 0xa4, 0xaf, 0x85, 0x01, 0xa5, - 0xfa, 0x81, 0x01, 0x4b, 0xf2, 0x99, 0x0b, 0x06, 0x00, 0x04, 0x0e, 0xed, - 0xcc, 0x7e, 0x47, 0x42, 0x33, 0x08, 0x27, 0x80, 0xb5, 0x7e, 0x4b, 0xec, - 0x9b, 0x4d, 0x21, 0x00, 0xac, 0xb3, 0x76, 0xad, 0x8f, 0x76, 0xae, 0xda, - 0x60, 0xb0, 0xff, 0x5b, 0x47, 0x2c, 0xd2, 0x52, 0x26, 0x00, 0xb2, 0xcf, - 0x03, 0xb3, 0x88, 0x03, 0xb4, 0xf9, 0x02, 0xb5, 0xd0, 0x02, 0xb6, 0x06, - 0x42, 0x60, 0x42, 0x93, 0xfa, 0x41, 0x06, 0x80, 0xd8, 0x06, 0x45, 0x51, - 0xe6, 0x51, 0xf9, 0x41, 0x51, 0xb0, 0x4e, 0x39, 0x0b, 0x01, 0x07, 0xc1, - 0x05, 0x01, 0xff, 0xe1, 0x00, 0x0b, 0x81, 0x8f, 0x02, 0xa2, 0x82, 0x02, - 0x42, 0x73, 0x02, 0x17, 0x0b, 0x01, 0xa4, 0xef, 0x01, 0xe5, 0x08, 0x0b, - 0x81, 0xe5, 0x01, 0x42, 0xa0, 0x19, 0x1f, 0x0b, 0x01, 0xa7, 0xcc, 0x01, - 0xa8, 0xbf, 0x01, 0xe9, 0x0c, 0x0b, 0x81, 0xb5, 0x01, 0x42, 0xde, 0x1f, - 0x18, 0x0b, 0x01, 0x42, 0x37, 0x01, 0x10, 0x0b, 0x01, 0x42, 0x68, 0x00, - 0x2e, 0x0b, 0x01, 0x42, 0x2a, 0x02, 0x28, 0x0b, 0x01, 0xae, 0x79, 0xef, - 0x0a, 0x0b, 0x81, 0x70, 0x42, 0x6f, 0x02, 0x1e, 0x0b, 0x01, 0x42, 0x88, - 0x00, 0x2d, 0x0b, 0x01, 0xb3, 0x4c, 0xb4, 0x3a, 0xf5, 0x0e, 0x0b, 0x81, - 0x31, 0x42, 0x32, 0x00, 0x2c, 0x0b, 0x01, 0xb8, 0x19, 0xb9, 0x0d, 0xba, - 0x01, 0xff, 0xe5, 0x30, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x32, 0x0b, 0x41, - 0xe5, 0x2b, 0x0b, 0x01, 0x42, 0x4d, 0x00, 0x2a, 0x0b, 0x41, 0xe5, 0x11, - 0x0b, 0x01, 0x42, 0x32, 0x00, 0x13, 0x0b, 0x01, 0x42, 0x4d, 0x00, 0x12, - 0x0b, 0x41, 0xf5, 0x0f, 0x0b, 0x41, 0xe5, 0x19, 0x0b, 0x01, 0x42, 0xb0, - 0x01, 0x1a, 0x0b, 0x01, 0x42, 0x77, 0x00, 0x1d, 0x0b, 0x41, 0xe5, 0x2f, - 0x0b, 0x01, 0xa8, 0x06, 0x43, 0x63, 0x06, 0x34, 0x0b, 0x41, 0xe5, 0x31, - 0x0b, 0x01, 0x42, 0x4d, 0x00, 0x33, 0x0b, 0x41, 0xef, 0x0b, 0x0b, 0x41, - 0xe5, 0x25, 0x0b, 0x01, 0xa7, 0x0c, 0x42, 0xa2, 0x05, 0x27, 0x0b, 0x01, - 0x42, 0x4d, 0x00, 0x26, 0x0b, 0x41, 0xe5, 0x22, 0x0b, 0x01, 0x42, 0x32, - 0x00, 0x24, 0x0b, 0x01, 0x42, 0x4d, 0x00, 0x23, 0x0b, 0x41, 0xe9, 0x0d, - 0x0b, 0x41, 0xe5, 0x35, 0x0b, 0x01, 0x42, 0x2a, 0x02, 0x29, 0x0b, 0x41, - 0xe5, 0x14, 0x0b, 0x01, 0x42, 0x8c, 0x09, 0x15, 0x0b, 0x01, 0x42, 0xb0, - 0x01, 0x16, 0x0b, 0x41, 0xe5, 0x09, 0x0b, 0x41, 0xe5, 0x1b, 0x0b, 0x01, - 0x42, 0xb0, 0x01, 0x1c, 0x0b, 0x41, 0xe5, 0x20, 0x0b, 0x01, 0x42, 0xb0, - 0x01, 0x21, 0x0b, 0x41, 0xe1, 0x01, 0x0b, 0x81, 0x11, 0xe5, 0x06, 0x0b, - 0x81, 0x08, 0xee, 0x04, 0x0b, 0x01, 0xef, 0x02, 0x0b, 0x41, 0xe5, 0x07, - 0x0b, 0x41, 0xee, 0x05, 0x0b, 0x01, 0xef, 0x03, 0x0b, 0x41, 0x47, 0xa6, - 0xcc, 0x46, 0xf3, 0x01, 0x4a, 0x13, 0xaf, 0xb3, 0x20, 0x00, 0x02, 0x1e, - 0x00, 0x01, 0xff, 0x49, 0x7a, 0xb2, 0xfa, 0xf6, 0x01, 0xad, 0x01, 0xff, - 0x53, 0x2b, 0x47, 0xe7, 0xf3, 0x01, 0x45, 0x05, 0x4a, 0x97, 0xf6, 0x41, - 0x4b, 0xd9, 0x9a, 0x5f, 0xf4, 0x01, 0x49, 0xa2, 0xba, 0x9b, 0x26, 0x40, - 0xa3, 0x36, 0x47, 0xad, 0x5e, 0xa6, 0x22, 0x00, 0xb4, 0x06, 0x55, 0x8e, - 0x36, 0x43, 0x22, 0x40, 0x04, 0xf0, 0x0c, 0x15, 0x4c, 0x81, 0x91, 0x32, - 0xf6, 0x01, 0xb2, 0x01, 0xff, 0x43, 0xcc, 0x27, 0xd9, 0x2b, 0x00, 0x5a, - 0xc8, 0x20, 0xe2, 0x26, 0x40, 0xeb, 0x2a, 0x00, 0x80, 0x04, 0xed, 0x42, - 0x20, 0x40, 0x49, 0xdb, 0x1c, 0x17, 0x22, 0x40, 0x4b, 0x76, 0x8b, 0x0a, - 0x26, 0x00, 0x49, 0x81, 0xb7, 0x9c, 0x01, 0x41, 0x04, 0xb9, 0x06, 0xbd, - 0x05, 0xe3, 0x12, 0x23, 0x00, 0x43, 0xee, 0x9b, 0x48, 0x26, 0x00, 0x07, - 0x17, 0x32, 0x4b, 0x03, 0xd0, 0x00, 0x11, 0x02, 0x35, 0x00, 0x01, 0xff, - 0x4d, 0x45, 0x80, 0x9b, 0xf6, 0x01, 0x4a, 0xff, 0xae, 0xa8, 0xf3, 0x41, - 0x0a, 0x9b, 0x01, 0x06, 0x53, 0x94, 0x48, 0xb0, 0xfb, 0x41, 0x17, 0x72, - 0x2d, 0x1c, 0x18, 0x55, 0x2a, 0x06, 0x57, 0xc5, 0x30, 0xb0, 0xf8, 0x41, - 0x49, 0xa5, 0x01, 0x35, 0x29, 0x00, 0x4a, 0x97, 0x3f, 0xb1, 0xf8, 0x01, - 0x47, 0x50, 0x02, 0x34, 0x29, 0x40, 0x49, 0xea, 0x01, 0x36, 0x29, 0x00, - 0x4a, 0xb3, 0x02, 0x37, 0x29, 0x40, 0xa1, 0xd5, 0x04, 0xa3, 0xdc, 0x02, - 0x49, 0x92, 0xb5, 0x8f, 0x05, 0x00, 0xa5, 0xc7, 0x02, 0x49, 0x15, 0x16, - 0x89, 0x05, 0x00, 0x46, 0x1a, 0x62, 0x8a, 0x05, 0x00, 0x5e, 0x9a, 0x13, - 0x59, 0x05, 0x00, 0x4d, 0xd6, 0x33, 0x5e, 0x05, 0x00, 0x07, 0x4b, 0x08, - 0x01, 0xff, 0x06, 0xc2, 0x05, 0x2d, 0x08, 0xfb, 0x1e, 0x01, 0xff, 0x48, - 0xe2, 0xc2, 0x87, 0x05, 0x00, 0x04, 0xb5, 0x4d, 0x06, 0x47, 0x71, 0xd4, - 0x16, 0xfb, 0x40, 0x43, 0x0a, 0x40, 0x14, 0xfb, 0x00, 0x43, 0x06, 0x07, - 0x15, 0xfb, 0x00, 0x43, 0x0b, 0x2e, 0x13, 0xfb, 0x00, 0x43, 0x83, 0xf1, - 0x17, 0xfb, 0x40, 0x43, 0x1a, 0xbe, 0x61, 0x05, 0x00, 0x43, 0xfa, 0x1a, - 0x62, 0x05, 0x00, 0xa3, 0xd6, 0x01, 0x42, 0xa1, 0x10, 0x64, 0x05, 0x00, - 0xa5, 0xbf, 0x01, 0x43, 0x85, 0xb6, 0x86, 0x05, 0x00, 0xa7, 0xaa, 0x01, - 0x42, 0x0b, 0x00, 0x70, 0x05, 0x00, 0x43, 0x06, 0x07, 0x6b, 0x05, 0x00, - 0xaa, 0x91, 0x01, 0x02, 0x37, 0x01, 0x84, 0x01, 0x44, 0xca, 0xed, 0x6c, - 0x05, 0x00, 0x43, 0x01, 0x05, 0x74, 0x05, 0x00, 0x43, 0x0b, 0x2e, 0x76, - 0x05, 0x00, 0x42, 0x5c, 0x28, 0x85, 0x05, 0x00, 0xb0, 0x5e, 0xb2, 0x52, - 0xb3, 0x44, 0xb4, 0x32, 0xb6, 0x26, 0x43, 0x83, 0xf1, 0x6d, 0x05, 0x00, - 0x42, 0xf7, 0x19, 0x75, 0x05, 0x80, 0x0d, 0xba, 0x01, 0xff, 0xe1, 0x66, - 0x05, 0x00, 0x42, 0xb0, 0x01, 0x6a, 0x05, 0x40, 0x4c, 0x39, 0x28, 0x88, - 0x05, 0x00, 0x42, 0xa7, 0x01, 0x82, 0x05, 0x40, 0x42, 0x85, 0x1d, 0x7e, - 0x05, 0x00, 0xef, 0x78, 0x05, 0x40, 0x43, 0xe7, 0xc2, 0x7f, 0x05, 0x00, - 0xef, 0x69, 0x05, 0x00, 0x49, 0x14, 0xbe, 0x60, 0x05, 0x40, 0x42, 0x4e, - 0x00, 0x7d, 0x05, 0x00, 0x42, 0x22, 0x00, 0x77, 0x05, 0x40, 0xe1, 0x7c, - 0x05, 0x00, 0x42, 0x4e, 0x00, 0x80, 0x05, 0x40, 0x42, 0x4e, 0x00, 0x7a, - 0x05, 0x00, 0x43, 0x08, 0xf1, 0x83, 0x05, 0x40, 0xe8, 0x84, 0x05, 0x00, - 0xee, 0x6f, 0x05, 0x40, 0xe1, 0x71, 0x05, 0x00, 0x43, 0xfd, 0x41, 0x7b, - 0x05, 0x40, 0x43, 0xa5, 0x02, 0x72, 0x05, 0x00, 0x42, 0x29, 0x02, 0x63, - 0x05, 0x40, 0x42, 0x1e, 0x14, 0x65, 0x05, 0x00, 0xe8, 0x67, 0x05, 0x00, - 0xf4, 0x68, 0x05, 0x40, 0xe1, 0x6e, 0x05, 0x00, 0xa8, 0x04, 0xef, 0x81, - 0x05, 0x40, 0xe1, 0x79, 0x05, 0x00, 0x42, 0x4e, 0x00, 0x73, 0x05, 0x40, - 0x4c, 0x79, 0x90, 0x5b, 0x05, 0x00, 0x4f, 0xae, 0x00, 0x5c, 0x05, 0x40, - 0x0e, 0xba, 0x05, 0x06, 0x44, 0xe9, 0x04, 0x5d, 0x05, 0x40, 0x43, 0x1a, - 0xbe, 0x31, 0x05, 0x00, 0x43, 0xfa, 0x1a, 0x32, 0x05, 0x00, 0xa3, 0xc9, - 0x01, 0x42, 0xa1, 0x10, 0x34, 0x05, 0x00, 0xa5, 0xb2, 0x01, 0x43, 0x85, - 0xb6, 0x56, 0x05, 0x00, 0xa7, 0x9d, 0x01, 0x42, 0x0b, 0x00, 0x40, 0x05, - 0x00, 0x43, 0x06, 0x07, 0x3b, 0x05, 0x00, 0xaa, 0x84, 0x01, 0x02, 0x37, - 0x01, 0x78, 0x44, 0xca, 0xed, 0x3c, 0x05, 0x00, 0x43, 0x01, 0x05, 0x44, - 0x05, 0x00, 0x43, 0x0b, 0x2e, 0x46, 0x05, 0x00, 0x42, 0x5c, 0x28, 0x55, - 0x05, 0x00, 0xb0, 0x52, 0xb2, 0x46, 0xb3, 0x38, 0xb4, 0x2c, 0xb6, 0x20, - 0x43, 0x83, 0xf1, 0x3d, 0x05, 0x00, 0x42, 0xf7, 0x19, 0x45, 0x05, 0x80, - 0x0d, 0xba, 0x01, 0xff, 0xe1, 0x36, 0x05, 0x00, 0x42, 0xb0, 0x01, 0x3a, - 0x05, 0x40, 0x42, 0xa7, 0x01, 0x52, 0x05, 0x40, 0x42, 0x85, 0x1d, 0x4e, - 0x05, 0x00, 0xef, 0x48, 0x05, 0x40, 0x43, 0xe7, 0xc2, 0x4f, 0x05, 0x00, - 0xef, 0x39, 0x05, 0x40, 0x42, 0x4e, 0x00, 0x4d, 0x05, 0x00, 0x42, 0x22, - 0x00, 0x47, 0x05, 0x40, 0xe1, 0x4c, 0x05, 0x00, 0x42, 0x4e, 0x00, 0x50, - 0x05, 0x40, 0x42, 0x4e, 0x00, 0x4a, 0x05, 0x00, 0x43, 0x08, 0xf1, 0x53, - 0x05, 0x40, 0xe8, 0x54, 0x05, 0x00, 0xee, 0x3f, 0x05, 0x40, 0xe1, 0x41, - 0x05, 0x00, 0x43, 0xfd, 0x41, 0x4b, 0x05, 0x40, 0x43, 0xa5, 0x02, 0x42, - 0x05, 0x00, 0x42, 0x29, 0x02, 0x33, 0x05, 0x40, 0x42, 0x1e, 0x14, 0x35, - 0x05, 0x00, 0xe8, 0x37, 0x05, 0x00, 0xf4, 0x38, 0x05, 0x40, 0xe1, 0x3e, - 0x05, 0x00, 0xa8, 0x04, 0xef, 0x51, 0x05, 0x40, 0xe1, 0x49, 0x05, 0x00, - 0x42, 0x4e, 0x00, 0x43, 0x05, 0x40, 0x50, 0xb1, 0x4e, 0x5f, 0x05, 0x00, - 0x49, 0x92, 0x35, 0x5a, 0x05, 0x40, 0x80, 0x68, 0x07, 0xbd, 0x06, 0x01, - 0xff, 0x49, 0x2f, 0xb5, 0x06, 0x06, 0x00, 0x06, 0xc4, 0x06, 0x17, 0x4b, - 0x13, 0x9a, 0x07, 0x06, 0x00, 0x04, 0x6f, 0x02, 0x01, 0xff, 0x4a, 0x85, - 0xab, 0x09, 0x06, 0x00, 0x51, 0xd1, 0x5c, 0x0a, 0x06, 0x40, 0x45, 0xc3, - 0x0a, 0x68, 0x06, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x69, 0x06, 0x00, - 0x43, 0xbf, 0x0a, 0x61, 0x06, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, - 0x1d, 0x60, 0x06, 0x40, 0x44, 0x25, 0x01, 0x63, 0x06, 0x00, 0x42, 0x15, - 0x02, 0x62, 0x06, 0x40, 0x44, 0x27, 0x1d, 0x67, 0x06, 0x00, 0x42, 0x60, - 0x25, 0x66, 0x06, 0x40, 0x43, 0xa7, 0x05, 0x65, 0x06, 0x00, 0x43, 0xcb, - 0x06, 0x64, 0x06, 0x40, 0x52, 0x40, 0x4f, 0x87, 0x08, 0x00, 0xa3, 0xb6, - 0x51, 0xa4, 0xdf, 0x50, 0xa5, 0xbb, 0x50, 0xa6, 0xed, 0x4f, 0x02, 0x22, - 0x00, 0xd1, 0x4f, 0x4e, 0x56, 0x77, 0x57, 0x06, 0x00, 0x45, 0x5f, 0x4f, - 0x50, 0x06, 0x80, 0xa2, 0x4f, 0xac, 0xe8, 0x0f, 0x02, 0x6c, 0x00, 0xeb, - 0x07, 0x07, 0x2f, 0x39, 0xda, 0x07, 0x05, 0xcb, 0x04, 0xc3, 0x07, 0xb0, - 0x97, 0x07, 0x4d, 0xd6, 0x33, 0x1f, 0x06, 0x00, 0xb2, 0xdf, 0x06, 0xb3, - 0xa4, 0x01, 0xb4, 0x2b, 0xb6, 0x0c, 0x50, 0x2a, 0x67, 0x5f, 0x06, 0x00, - 0x48, 0x4a, 0xca, 0x59, 0x06, 0x40, 0x4c, 0x87, 0x46, 0x8e, 0x08, 0x00, - 0x0a, 0xd2, 0x75, 0x01, 0xff, 0x49, 0x50, 0x12, 0x5c, 0x06, 0x00, 0x56, - 0xf9, 0x33, 0x5b, 0x06, 0x00, 0x4d, 0x02, 0x34, 0x5a, 0x06, 0x40, 0xa1, - 0x47, 0x52, 0x26, 0x51, 0x6c, 0x06, 0x00, 0x04, 0xbf, 0x0a, 0x0c, 0x5a, - 0x7e, 0x21, 0x1e, 0x06, 0x00, 0x51, 0x7b, 0x5d, 0xe3, 0x08, 0x40, 0x05, - 0x25, 0xe5, 0x21, 0x08, 0xb0, 0x0b, 0x11, 0x09, 0xa2, 0x0b, 0x01, 0xff, - 0x45, 0x5c, 0x00, 0xeb, 0x08, 0x00, 0x45, 0xf5, 0x06, 0xee, 0x08, 0x40, - 0x45, 0x5c, 0x00, 0xea, 0x08, 0x00, 0x45, 0xf5, 0x06, 0xed, 0x08, 0x40, - 0x45, 0x5c, 0x00, 0xec, 0x08, 0x00, 0x45, 0xf5, 0x06, 0xef, 0x08, 0x40, - 0x4b, 0x26, 0x9b, 0x73, 0xfe, 0x00, 0x45, 0x8f, 0x20, 0x40, 0x06, 0xc0, - 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4e, 0x4c, 0x76, 0x71, 0xfe, 0x00, - 0x0b, 0xf9, 0x9e, 0x06, 0x4e, 0xb6, 0x0e, 0x85, 0x08, 0x40, 0x45, 0x56, - 0x00, 0x83, 0x08, 0x00, 0x43, 0xc0, 0x88, 0x84, 0x08, 0x40, 0x48, 0x6f, - 0x58, 0x1b, 0x06, 0x00, 0x45, 0xb8, 0xe3, 0x51, 0x06, 0x80, 0x9b, 0x05, - 0x04, 0x30, 0x03, 0xc7, 0x04, 0x05, 0x0d, 0x07, 0xc1, 0x01, 0x53, 0x24, - 0x4c, 0xde, 0x06, 0x00, 0xb5, 0x90, 0x01, 0x06, 0xf4, 0x15, 0x01, 0xff, - 0x02, 0x3b, 0x01, 0x71, 0x0a, 0x9c, 0x45, 0x61, 0x44, 0xf7, 0x07, 0xbf, - 0xfb, 0x00, 0x0a, 0xcd, 0x73, 0x4b, 0xb4, 0x06, 0x4b, 0xb6, 0xa2, 0xc2, - 0xfb, 0x40, 0x0a, 0x5f, 0x12, 0x22, 0x08, 0xa3, 0x0b, 0x01, 0xff, 0x45, - 0x5c, 0x00, 0xb4, 0xfb, 0x00, 0x45, 0xf5, 0x06, 0xb5, 0xfb, 0x00, 0x0b, - 0x95, 0x2b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xbd, 0xfb, 0x00, 0x45, 0xf5, - 0x06, 0xbe, 0xfb, 0x40, 0x45, 0x5c, 0x00, 0xb6, 0xfb, 0x00, 0x45, 0xf5, - 0x06, 0xb7, 0xfb, 0x00, 0x13, 0x9c, 0x01, 0x01, 0xff, 0x45, 0x5c, 0x00, - 0xb8, 0xfb, 0x00, 0x45, 0xf5, 0x06, 0xb9, 0xfb, 0x40, 0x45, 0x5c, 0x00, - 0xc0, 0xfb, 0x00, 0x45, 0xf5, 0x06, 0xc1, 0xfb, 0x40, 0x45, 0x5c, 0x00, - 0xba, 0xfb, 0x00, 0x45, 0xf5, 0x06, 0xbb, 0xfb, 0x40, 0x02, 0xc6, 0x00, - 0x06, 0x57, 0x80, 0x30, 0xbc, 0xfb, 0x40, 0x45, 0x5c, 0x00, 0xb2, 0xfb, - 0x00, 0x45, 0xf5, 0x06, 0xb3, 0xfb, 0x40, 0x4c, 0x39, 0x8b, 0x56, 0x06, - 0x00, 0x43, 0xa7, 0x35, 0x52, 0x06, 0x80, 0x06, 0x58, 0x0d, 0x2a, 0x9d, - 0x08, 0x40, 0x80, 0x01, 0xff, 0x45, 0xf5, 0x06, 0xd0, 0x08, 0x00, 0x4d, - 0x34, 0x03, 0x7e, 0xfe, 0x00, 0x4b, 0x4d, 0x6c, 0x7f, 0xfe, 0x40, 0x45, - 0x81, 0x5d, 0x19, 0x06, 0x00, 0x02, 0xe1, 0x07, 0xea, 0x02, 0x05, 0xf9, - 0x0a, 0x5c, 0x45, 0x5f, 0x4f, 0x1a, 0x06, 0x00, 0x04, 0xdd, 0x04, 0x0c, - 0x43, 0xc0, 0x88, 0xe5, 0x06, 0x00, 0x43, 0x4d, 0x00, 0xe6, 0x06, 0x40, - 0x44, 0x7a, 0x20, 0xed, 0x06, 0x00, 0x4f, 0x28, 0x6f, 0xd9, 0x08, 0x00, - 0x44, 0x3a, 0xef, 0xe3, 0x06, 0x00, 0xb7, 0x01, 0xff, 0x42, 0x9a, 0x43, - 0xd3, 0x08, 0x00, 0x04, 0xb4, 0x24, 0x01, 0xff, 0xa9, 0x18, 0x45, 0xc7, - 0x49, 0xff, 0x0e, 0x01, 0x44, 0xe2, 0xee, 0xfe, 0x0e, 0x01, 0x45, 0x91, - 0xe7, 0xfd, 0x0e, 0x01, 0x47, 0x67, 0xd3, 0x9b, 0x08, 0x40, 0x45, 0x43, - 0xe5, 0x9a, 0x08, 0x00, 0x46, 0xd0, 0xdc, 0x99, 0x08, 0x40, 0x43, 0x05, - 0x07, 0xd6, 0x08, 0x00, 0x54, 0x83, 0x40, 0xe1, 0x06, 0x00, 0xa6, 0xef, - 0x01, 0x44, 0x6e, 0x37, 0xda, 0x06, 0x00, 0xac, 0xbf, 0x01, 0xad, 0xa5, - 0x01, 0x44, 0xc4, 0x44, 0xe8, 0x06, 0x80, 0x97, 0x01, 0x43, 0xf4, 0x13, - 0xd7, 0x08, 0x00, 0x4c, 0x0d, 0x93, 0xdf, 0x06, 0x00, 0xb3, 0x77, 0xb4, - 0x69, 0x58, 0xfd, 0x2a, 0xe0, 0x06, 0x00, 0xb7, 0x1c, 0x43, 0x4d, 0x00, - 0xe7, 0x06, 0x80, 0x0f, 0x02, 0x59, 0x00, 0x01, 0xff, 0xe8, 0xcd, 0x08, - 0x00, 0x42, 0x9e, 0x01, 0x17, 0x06, 0x40, 0x5b, 0x69, 0x19, 0xcb, 0x08, - 0x40, 0x42, 0x9a, 0x43, 0xf3, 0x08, 0x00, 0x04, 0xb4, 0x24, 0x01, 0xff, - 0xa1, 0x1a, 0x43, 0x3e, 0xf1, 0xde, 0x08, 0x00, 0x02, 0x15, 0x06, 0x06, - 0x45, 0x0d, 0xe9, 0xdf, 0x08, 0x40, 0xe8, 0xcc, 0x08, 0x00, 0x43, 0x5c, - 0x3e, 0xdd, 0x08, 0x40, 0x45, 0xe9, 0xe4, 0x98, 0x08, 0x00, 0x46, 0x2c, - 0xdb, 0xdc, 0x08, 0x00, 0x45, 0x00, 0xe7, 0xd4, 0x08, 0x00, 0x47, 0xb8, - 0xd2, 0xdb, 0x08, 0x00, 0x4b, 0x1f, 0xa1, 0xda, 0x08, 0x40, 0x42, 0xc9, - 0x09, 0x15, 0x06, 0x00, 0x49, 0xdc, 0x0f, 0xdb, 0x06, 0x40, 0x42, 0xe8, - 0x01, 0xd5, 0x08, 0x00, 0x43, 0x75, 0x09, 0xdc, 0x06, 0x00, 0x49, 0xc9, - 0xb7, 0xe1, 0x08, 0x40, 0x4b, 0x2c, 0x6f, 0xd8, 0x08, 0x40, 0x44, 0xc8, - 0x49, 0xe4, 0x06, 0x00, 0x05, 0x6f, 0x37, 0x01, 0xff, 0x4b, 0x4d, 0x16, - 0xd8, 0x06, 0x00, 0x4c, 0x35, 0x03, 0xe2, 0x06, 0x40, 0x47, 0xf7, 0xcb, - 0xd9, 0x06, 0x00, 0x08, 0xfb, 0x1e, 0x01, 0xff, 0x0a, 0x63, 0xa5, 0x0c, - 0x5e, 0xf4, 0x13, 0xd7, 0x06, 0x00, 0x5e, 0x30, 0x14, 0xd6, 0x06, 0x40, - 0x4c, 0x05, 0x8f, 0x16, 0x06, 0x00, 0x4a, 0x89, 0xb1, 0x16, 0x06, 0x40, - 0x48, 0x0a, 0xc1, 0xca, 0x08, 0x00, 0x4e, 0xfa, 0x78, 0xe0, 0x08, 0x40, - 0x47, 0x0b, 0xc1, 0xc9, 0x08, 0x00, 0x43, 0x8f, 0x00, 0x18, 0x06, 0x40, - 0x4f, 0xf2, 0x68, 0x11, 0x06, 0x00, 0x45, 0x9d, 0xe5, 0x0f, 0x06, 0x00, - 0x02, 0x71, 0x00, 0x33, 0xb3, 0x06, 0x49, 0x2a, 0xbd, 0x14, 0x06, 0x40, - 0xa1, 0x11, 0x06, 0xfa, 0xd9, 0x01, 0xff, 0x49, 0x2d, 0x3d, 0xfd, 0x06, - 0x00, 0x50, 0x5a, 0x64, 0xfe, 0x06, 0x40, 0x43, 0xcf, 0xb7, 0x03, 0x06, - 0x00, 0x5a, 0x46, 0x20, 0x10, 0x06, 0x00, 0x44, 0x0a, 0xee, 0x04, 0x06, - 0x00, 0x43, 0x24, 0x45, 0x01, 0x06, 0x40, 0x4f, 0x69, 0x6a, 0x13, 0x06, - 0x00, 0x50, 0xfa, 0x61, 0x12, 0x06, 0x40, 0x80, 0x01, 0xff, 0x4d, 0x34, - 0x03, 0x7c, 0xfe, 0x00, 0x4b, 0x4d, 0x6c, 0x7d, 0xfe, 0x40, 0xa1, 0x23, - 0x4d, 0x2f, 0x81, 0x5d, 0x06, 0x00, 0x0f, 0x67, 0x31, 0x06, 0x63, 0xf2, - 0x0a, 0xec, 0x06, 0x40, 0x45, 0x5c, 0x00, 0xf8, 0x08, 0x80, 0x06, 0x45, - 0xf5, 0x06, 0xfa, 0x08, 0x40, 0x49, 0xa5, 0x3a, 0xfd, 0x08, 0x40, 0x4e, - 0x72, 0x77, 0x88, 0x08, 0x00, 0xf9, 0x08, 0x06, 0x40, 0xa5, 0x1b, 0x51, - 0x5d, 0x59, 0x91, 0x08, 0x00, 0x4e, 0xd4, 0x77, 0xe9, 0x06, 0x00, 0xaf, - 0x01, 0xff, 0x4f, 0x59, 0x6b, 0x0e, 0x06, 0x00, 0x4e, 0x6c, 0x7c, 0x90, - 0x08, 0x40, 0x43, 0xa8, 0x2a, 0x97, 0x08, 0x00, 0x4a, 0xc7, 0x99, 0x6a, - 0x06, 0x40, 0x48, 0x72, 0xc2, 0xf1, 0x08, 0x00, 0x48, 0x4c, 0x76, 0xf0, - 0x08, 0x00, 0x48, 0xd2, 0xc4, 0xf2, 0x08, 0x40, 0x4a, 0x10, 0x4b, 0x05, - 0x06, 0x00, 0x44, 0x2f, 0x03, 0x00, 0x06, 0x40, 0x03, 0xaa, 0x35, 0xe7, - 0x07, 0x03, 0xbb, 0x00, 0xd6, 0x07, 0x0b, 0x5a, 0x52, 0x01, 0xff, 0xa1, - 0xc2, 0x07, 0x43, 0xe5, 0x8a, 0x01, 0xee, 0x01, 0xa4, 0xe8, 0x05, 0x43, - 0x85, 0xb6, 0x10, 0xee, 0x01, 0x45, 0x4a, 0x9a, 0x1b, 0xee, 0x01, 0x43, - 0x84, 0x20, 0x07, 0xee, 0x01, 0x08, 0x4c, 0x16, 0xd1, 0x04, 0x44, 0x6e, - 0x37, 0x02, 0xee, 0x01, 0xab, 0xbc, 0x04, 0xac, 0xfc, 0x02, 0x44, 0x7a, - 0x20, 0x0c, 0xee, 0x01, 0x44, 0xc4, 0x44, 0x0d, 0xee, 0x01, 0x09, 0x99, - 0x3d, 0xdf, 0x02, 0x43, 0xf4, 0x13, 0x12, 0xee, 0x01, 0x43, 0xee, 0x50, - 0x13, 0xee, 0x01, 0xb3, 0xa0, 0x01, 0xb4, 0x1b, 0x43, 0xc0, 0x88, 0x05, - 0xee, 0x01, 0x43, 0x4d, 0x00, 0x09, 0xee, 0x01, 0x02, 0x59, 0x00, 0x01, - 0xff, 0xe8, 0x1a, 0xee, 0x01, 0x42, 0x9e, 0x01, 0x06, 0xee, 0x41, 0xa1, - 0x15, 0x42, 0x4e, 0x00, 0x15, 0xee, 0x01, 0xa8, 0x01, 0xff, 0x42, 0x13, - 0x00, 0x18, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x16, 0xee, 0x41, 0xe8, 0x08, - 0xee, 0x01, 0x05, 0x25, 0x17, 0x01, 0xff, 0x43, 0x05, 0x07, 0x4f, 0xee, - 0x01, 0xa4, 0x44, 0x45, 0x4a, 0x9a, 0x5b, 0xee, 0x01, 0x43, 0x84, 0x20, - 0x47, 0xee, 0x01, 0x44, 0x6e, 0x37, 0x42, 0xee, 0x01, 0x44, 0x93, 0x40, - 0x57, 0xee, 0x01, 0x43, 0xb0, 0x00, 0x4b, 0xee, 0x01, 0x44, 0xc4, 0x44, - 0x4d, 0xee, 0x01, 0x43, 0xf4, 0x13, 0x52, 0xee, 0x01, 0xb3, 0x06, 0x43, - 0x4d, 0x00, 0x49, 0xee, 0x41, 0x42, 0xe8, 0x01, 0x51, 0xee, 0x01, 0x43, - 0x75, 0x09, 0x4e, 0xee, 0x01, 0x44, 0x60, 0xd8, 0x54, 0xee, 0x41, 0x42, - 0xe8, 0x01, 0x59, 0xee, 0x01, 0x07, 0x84, 0x40, 0x01, 0xff, 0x44, 0xc4, - 0x44, 0x5d, 0xee, 0x01, 0x43, 0xf4, 0x13, 0x5f, 0xee, 0x41, 0x42, 0xe8, - 0x01, 0x11, 0xee, 0x01, 0x43, 0x75, 0x09, 0x0e, 0xee, 0x01, 0x44, 0x60, - 0xd8, 0x14, 0xee, 0x01, 0x09, 0xdb, 0xaf, 0x01, 0xff, 0x43, 0x05, 0x07, - 0x6f, 0xee, 0x01, 0x43, 0xe5, 0x8a, 0x61, 0xee, 0x01, 0xa4, 0x74, 0x43, - 0x85, 0xb6, 0x70, 0xee, 0x01, 0x45, 0x4a, 0x9a, 0x7b, 0xee, 0x01, 0xa8, - 0x5a, 0x44, 0x6e, 0x37, 0x62, 0xee, 0x01, 0xab, 0x46, 0x44, 0x7a, 0x20, - 0x6c, 0xee, 0x01, 0x44, 0xc4, 0x44, 0x6d, 0xee, 0x01, 0x43, 0xf4, 0x13, - 0x72, 0xee, 0x01, 0xb3, 0x20, 0xb4, 0x0c, 0x43, 0x4d, 0x00, 0x69, 0xee, - 0x01, 0x43, 0x92, 0x7d, 0x7a, 0xee, 0x41, 0x42, 0xc9, 0x09, 0x68, 0xee, - 0x01, 0x42, 0x4e, 0x00, 0x75, 0xee, 0x01, 0x43, 0xfd, 0x41, 0x76, 0xee, - 0x41, 0x42, 0xe8, 0x01, 0x71, 0xee, 0x01, 0x43, 0x75, 0x09, 0x6e, 0xee, - 0x01, 0x44, 0x60, 0xd8, 0x74, 0xee, 0x41, 0x42, 0xf5, 0x13, 0x6a, 0xee, - 0x01, 0x43, 0x84, 0x20, 0x77, 0xee, 0x41, 0x42, 0xc9, 0x09, 0x67, 0xee, - 0x01, 0x42, 0x4e, 0x00, 0x64, 0xee, 0x41, 0x42, 0xe8, 0x01, 0x79, 0xee, - 0x01, 0x07, 0x84, 0x40, 0x01, 0xff, 0x43, 0xe5, 0x8a, 0x7c, 0xee, 0x01, - 0x43, 0x85, 0xb6, 0x7e, 0xee, 0x41, 0x4c, 0xc1, 0x8d, 0xf1, 0xee, 0x01, - 0x5a, 0x7a, 0x20, 0xf0, 0xee, 0x41, 0x42, 0x57, 0x00, 0x0b, 0xee, 0x01, - 0x06, 0x93, 0x83, 0x01, 0xff, 0xa1, 0xa3, 0x01, 0x43, 0xe5, 0x8a, 0x81, - 0xee, 0x01, 0x02, 0xa1, 0x10, 0x90, 0x01, 0x43, 0x85, 0xb6, 0x90, 0xee, - 0x01, 0x45, 0x4a, 0x9a, 0x9b, 0xee, 0x01, 0xa8, 0x76, 0x44, 0x6e, 0x37, - 0x82, 0xee, 0x01, 0x44, 0x93, 0x40, 0x97, 0xee, 0x01, 0x43, 0xb0, 0x00, - 0x8b, 0xee, 0x01, 0x44, 0x7a, 0x20, 0x8c, 0xee, 0x01, 0x44, 0xc4, 0x44, - 0x8d, 0xee, 0x01, 0x43, 0xf4, 0x13, 0x92, 0xee, 0x01, 0x43, 0xee, 0x50, - 0x93, 0xee, 0x01, 0xb3, 0x38, 0xb4, 0x1b, 0x43, 0xc0, 0x88, 0x85, 0xee, - 0x01, 0x43, 0x4d, 0x00, 0x89, 0xee, 0x01, 0x02, 0x59, 0x00, 0x01, 0xff, - 0xe8, 0x9a, 0xee, 0x01, 0x42, 0x9e, 0x01, 0x86, 0xee, 0x41, 0x42, 0xc9, - 0x09, 0x88, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x95, 0xee, 0x01, 0xa8, 0x01, - 0xff, 0x42, 0x13, 0x00, 0x98, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x96, 0xee, - 0x41, 0x42, 0xe8, 0x01, 0x91, 0xee, 0x01, 0x43, 0x75, 0x09, 0x8e, 0xee, - 0x01, 0x44, 0x60, 0xd8, 0x94, 0xee, 0x41, 0x42, 0xc9, 0x09, 0x87, 0xee, - 0x01, 0x42, 0x4e, 0x00, 0x84, 0xee, 0x41, 0xe4, 0x99, 0xee, 0x01, 0xec, - 0x83, 0xee, 0x41, 0x42, 0x9e, 0x01, 0x8f, 0xee, 0x01, 0x43, 0x68, 0x00, - 0x80, 0xee, 0x41, 0x42, 0xf5, 0x13, 0x0a, 0xee, 0x01, 0x43, 0x84, 0x20, - 0x17, 0xee, 0x41, 0x43, 0x05, 0x07, 0x2f, 0xee, 0x01, 0x43, 0xe5, 0x8a, - 0x21, 0xee, 0x01, 0x43, 0x4a, 0xb5, 0x39, 0xee, 0x01, 0x43, 0x85, 0xb6, - 0x30, 0xee, 0x01, 0x45, 0x4a, 0x9a, 0x3b, 0xee, 0x01, 0xa8, 0x54, 0x44, - 0x6e, 0x37, 0x22, 0xee, 0x01, 0xab, 0x40, 0x43, 0xb0, 0x00, 0x2b, 0xee, - 0x01, 0x44, 0x7a, 0x20, 0x2c, 0xee, 0x01, 0x44, 0xc4, 0x44, 0x2d, 0xee, - 0x01, 0x43, 0xf4, 0x13, 0x32, 0xee, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x43, - 0x4d, 0x00, 0x29, 0xee, 0x41, 0x42, 0x4e, 0x00, 0x35, 0xee, 0x01, 0x43, - 0xfd, 0x41, 0x36, 0xee, 0x41, 0x42, 0xe8, 0x01, 0x31, 0xee, 0x01, 0x43, - 0x75, 0x09, 0x2e, 0xee, 0x01, 0x44, 0x60, 0xd8, 0x34, 0xee, 0x41, 0x42, - 0xf5, 0x13, 0x2a, 0xee, 0x01, 0x43, 0x84, 0x20, 0x37, 0xee, 0x41, 0x42, - 0xc9, 0x09, 0x27, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x24, 0xee, 0x41, 0xa1, - 0xc6, 0x01, 0xaf, 0x01, 0xff, 0x06, 0x85, 0x40, 0xa6, 0x01, 0x0c, 0xa6, - 0x75, 0x01, 0xff, 0x43, 0x05, 0x07, 0xaf, 0xee, 0x01, 0x43, 0xe5, 0x8a, - 0xa1, 0xee, 0x01, 0x02, 0xa1, 0x10, 0x88, 0x01, 0x43, 0x85, 0xb6, 0xb0, - 0xee, 0x01, 0x45, 0x4a, 0x9a, 0xbb, 0xee, 0x01, 0x43, 0x84, 0x20, 0xa7, - 0xee, 0x01, 0x44, 0x6e, 0x37, 0xa2, 0xee, 0x01, 0x44, 0x93, 0x40, 0xb7, - 0xee, 0x01, 0x43, 0xb0, 0x00, 0xab, 0xee, 0x01, 0x44, 0x7a, 0x20, 0xac, - 0xee, 0x01, 0x44, 0xc4, 0x44, 0xad, 0xee, 0x01, 0x43, 0xf4, 0x13, 0xb2, - 0xee, 0x01, 0x43, 0xee, 0x50, 0xb3, 0xee, 0x01, 0xb3, 0x38, 0xb4, 0x1b, - 0x43, 0xc0, 0x88, 0xa5, 0xee, 0x01, 0x43, 0x4d, 0x00, 0xa9, 0xee, 0x01, - 0x02, 0x59, 0x00, 0x01, 0xff, 0xe8, 0xba, 0xee, 0x01, 0x42, 0x9e, 0x01, - 0xa6, 0xee, 0x41, 0x42, 0xc9, 0x09, 0xa8, 0xee, 0x01, 0x42, 0x4e, 0x00, - 0xb5, 0xee, 0x01, 0xa8, 0x01, 0xff, 0x42, 0x13, 0x00, 0xb8, 0xee, 0x01, - 0x42, 0x4e, 0x00, 0xb6, 0xee, 0x41, 0x42, 0xe8, 0x01, 0xb1, 0xee, 0x01, - 0x43, 0x75, 0x09, 0xae, 0xee, 0x01, 0x44, 0x60, 0xd8, 0xb4, 0xee, 0x41, - 0xe4, 0xb9, 0xee, 0x01, 0xec, 0xa3, 0xee, 0x41, 0x43, 0xe5, 0x8a, 0x1c, - 0xee, 0x01, 0x43, 0x85, 0xb6, 0x1e, 0xee, 0x01, 0x44, 0xc4, 0x44, 0x1d, - 0xee, 0x01, 0x43, 0xf4, 0x13, 0x1f, 0xee, 0x41, 0xe4, 0x19, 0xee, 0x01, - 0xec, 0x03, 0xee, 0x41, 0x42, 0x9e, 0x01, 0x0f, 0xee, 0x01, 0x43, 0x68, - 0x00, 0x00, 0xee, 0x41, 0x4b, 0xc4, 0x44, 0x58, 0x06, 0x00, 0x54, 0xbb, - 0x44, 0xff, 0x08, 0x40, 0x47, 0xe6, 0xca, 0x9c, 0x08, 0x00, 0x47, 0x9c, - 0x2c, 0x53, 0x06, 0x40, 0x05, 0xa1, 0x1b, 0x95, 0x3f, 0xa5, 0xc6, 0x20, - 0x08, 0xfb, 0x1e, 0x01, 0xff, 0xa1, 0xda, 0x1e, 0xa2, 0xa9, 0x1d, 0x09, - 0x4a, 0xb5, 0x8c, 0x1c, 0x09, 0x85, 0xb6, 0x8b, 0x1b, 0x0b, 0x4a, 0x9a, - 0xac, 0x1a, 0xa8, 0xff, 0x18, 0xaa, 0xfa, 0x17, 0xab, 0xec, 0x15, 0x09, - 0xfd, 0x13, 0xa5, 0x13, 0xad, 0xe2, 0x11, 0x0a, 0x28, 0x6f, 0xeb, 0x0f, - 0xb1, 0xf2, 0x0e, 0xb2, 0xb0, 0x0e, 0xb3, 0x83, 0x08, 0xb4, 0x92, 0x04, - 0x36, 0x3e, 0x00, 0xf8, 0x03, 0x56, 0x3d, 0x37, 0xf8, 0xfd, 0x00, 0x09, - 0x4d, 0x00, 0x19, 0x0e, 0x92, 0x7d, 0x01, 0xff, 0xa9, 0x06, 0x4b, 0x4d, - 0x6c, 0x3b, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xb9, 0xfc, 0x00, 0x4c, 0x35, - 0x03, 0x28, 0xfc, 0x40, 0x0d, 0x67, 0x00, 0xc4, 0x03, 0xa8, 0x83, 0x01, - 0x05, 0x6e, 0x37, 0x6b, 0x06, 0x07, 0x5a, 0x5b, 0x05, 0x7a, 0x20, 0x22, - 0x4f, 0x19, 0x6f, 0x94, 0xfc, 0x00, 0x4e, 0x3c, 0x7a, 0x91, 0xfc, 0x00, - 0x04, 0x4d, 0x00, 0x06, 0x4f, 0x9c, 0x73, 0x92, 0xfc, 0x40, 0x4a, 0x3d, - 0x2c, 0x96, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x5a, 0xfc, 0x40, 0x4a, 0x3d, - 0x2c, 0x93, 0xfc, 0x00, 0xa9, 0x21, 0x4b, 0x4d, 0x6c, 0xf0, 0xfc, 0x00, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x7a, 0x20, 0x06, 0x4e, 0xa5, 0x4d, - 0xb0, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x9c, 0xfd, 0x00, 0x4c, 0x4c, 0x16, - 0x9d, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xdd, 0xfc, 0x00, 0x4c, 0x35, 0x03, - 0x58, 0xfc, 0x40, 0x4b, 0x4d, 0x16, 0xdc, 0xfc, 0x00, 0x4c, 0x35, 0x03, - 0x57, 0xfc, 0x40, 0xa9, 0x06, 0x53, 0xa0, 0x4d, 0xaf, 0xfd, 0x40, 0x4b, - 0x4d, 0x16, 0xda, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x55, 0xfc, 0x40, 0xa1, - 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, 0x4c, 0x16, 0xde, 0xfc, 0x00, - 0x4b, 0x4d, 0x6c, 0xf1, 0xfc, 0x40, 0x02, 0x4f, 0x00, 0x92, 0x02, 0x0f, - 0x58, 0x00, 0x01, 0xff, 0xa1, 0xd8, 0x01, 0x02, 0x60, 0x00, 0xbe, 0x01, - 0xa8, 0x9a, 0x01, 0x06, 0x6e, 0x37, 0x89, 0x01, 0x51, 0x07, 0x5a, 0x99, - 0xfc, 0x00, 0x05, 0x7a, 0x20, 0x65, 0x4f, 0x19, 0x6f, 0x67, 0xfc, 0x00, - 0x03, 0xd5, 0x95, 0x4f, 0x4e, 0x3c, 0x7a, 0x64, 0xfc, 0x00, 0x02, 0x2e, - 0x02, 0x39, 0x04, 0xd6, 0xef, 0x29, 0xb9, 0x06, 0x4f, 0x9c, 0x73, 0x65, - 0xfc, 0x40, 0x03, 0x4e, 0x00, 0x11, 0x02, 0x2e, 0x02, 0x01, 0xff, 0x4a, - 0x3d, 0x2c, 0xf5, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0xf4, 0xfb, 0x40, 0x4a, - 0x3d, 0x2c, 0x69, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x04, 0xfc, 0x40, 0x4a, - 0x3d, 0x2c, 0xef, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0xee, 0xfb, 0x40, 0x4a, - 0x3d, 0x2c, 0xf1, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0xf0, 0xfb, 0x40, 0x4a, - 0x3d, 0x2c, 0xf3, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0xf2, 0xfb, 0x40, 0x4a, - 0x3d, 0x2c, 0x66, 0xfc, 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, 0xdf, 0xfc, - 0x40, 0x4b, 0x4d, 0x16, 0x9a, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x02, 0xfc, - 0x40, 0x4b, 0x4d, 0x16, 0x97, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x00, 0xfc, - 0x40, 0x04, 0x09, 0x59, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, 0x4c, - 0x16, 0x9b, 0xfc, 0x00, 0x4b, 0x4d, 0x6c, 0xe0, 0xfc, 0x40, 0x4b, 0x4d, - 0x16, 0x98, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x01, 0xfc, 0x40, 0x4a, 0x3d, - 0x2c, 0xf7, 0xfb, 0x00, 0xa9, 0x01, 0xff, 0x4b, 0x4d, 0x16, 0xf8, 0xfb, - 0x00, 0x4c, 0x35, 0x03, 0xf6, 0xfb, 0x40, 0x02, 0x60, 0x00, 0x22, 0x04, - 0x68, 0x00, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xeb, 0xfb, 0x00, 0x4d, 0x34, - 0x03, 0xea, 0xfb, 0x00, 0x08, 0x6c, 0x00, 0x01, 0xff, 0x4a, 0x3d, 0x2c, - 0x68, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x03, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, - 0xed, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0xec, 0xfb, 0x40, 0xa9, 0x06, 0x53, - 0xa0, 0x4d, 0xae, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xdb, 0xfc, 0x00, 0x4c, - 0x35, 0x03, 0x56, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x95, 0xfc, 0x00, 0x4d, - 0x34, 0x03, 0x59, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0xfa, 0xfb, 0x00, 0xa9, - 0x01, 0xff, 0x4b, 0x4d, 0x16, 0xfb, 0xfb, 0x00, 0x4c, 0x35, 0x03, 0xf9, - 0xfb, 0x40, 0xa1, 0xf6, 0x02, 0x08, 0x4e, 0x00, 0x6a, 0xa8, 0x01, 0xff, - 0x66, 0x3c, 0x06, 0x5b, 0xfc, 0x00, 0x08, 0x4e, 0x00, 0x01, 0xff, 0x0d, - 0x67, 0x00, 0x4c, 0x4f, 0x49, 0x6c, 0xe6, 0xfc, 0x00, 0x52, 0xc8, 0x51, - 0x11, 0xfc, 0x00, 0x05, 0x7a, 0x20, 0x22, 0x4f, 0x19, 0x6f, 0x79, 0xfc, - 0x00, 0x4e, 0x3c, 0x7a, 0x76, 0xfc, 0x00, 0x04, 0x4d, 0x00, 0x06, 0x4f, - 0x9c, 0x73, 0x77, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x7b, 0xfc, 0x00, 0x4d, - 0x34, 0x03, 0x14, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x78, 0xfc, 0x00, 0xa9, - 0x06, 0x4b, 0x4d, 0x6c, 0xe5, 0xfc, 0x40, 0x4b, 0x4d, 0x16, 0xa6, 0xfc, - 0x00, 0x4c, 0x35, 0x03, 0x12, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x7a, 0xfc, - 0x00, 0x4d, 0x34, 0x03, 0x13, 0xfc, 0x40, 0x0d, 0x67, 0x00, 0xf7, 0x01, - 0xa8, 0xb6, 0x01, 0x05, 0x6e, 0x37, 0x8c, 0x01, 0x05, 0x07, 0x5a, 0x63, - 0x05, 0x7a, 0x20, 0x22, 0x4f, 0x19, 0x6f, 0x73, 0xfc, 0x00, 0x4e, 0x3c, - 0x7a, 0x70, 0xfc, 0x00, 0x04, 0x4d, 0x00, 0x06, 0x4f, 0x9c, 0x73, 0x71, - 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x75, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x10, - 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x72, 0xfc, 0x00, 0xa9, 0x29, 0x4b, 0x4d, - 0x6c, 0xe3, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x30, 0x2c, - 0xa4, 0xfd, 0x00, 0x50, 0x08, 0x5a, 0x56, 0xfd, 0x00, 0x51, 0x6e, 0x37, - 0x55, 0xfd, 0x00, 0x51, 0x07, 0x5a, 0x57, 0xfd, 0x00, 0x4e, 0xa5, 0x4d, - 0xa3, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xa4, 0xfc, 0x00, 0x4c, 0x35, 0x03, - 0x0e, 0xfc, 0x40, 0xa9, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x30, - 0x2c, 0xa2, 0xfd, 0x00, 0x51, 0xd3, 0x5a, 0x54, 0xfd, 0x00, 0x4e, 0xa5, - 0x4d, 0xa1, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xa3, 0xfc, 0x00, 0x4c, 0x35, - 0x03, 0x0d, 0xfc, 0x40, 0xa9, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, - 0x30, 0x2c, 0xa0, 0xfd, 0x00, 0x51, 0xd3, 0x5a, 0x50, 0xfd, 0x00, 0x4e, - 0xa5, 0x4d, 0x9f, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xa1, 0xfc, 0x00, 0x4c, - 0x35, 0x03, 0x0b, 0xfc, 0x40, 0x03, 0xc9, 0x09, 0x11, 0x03, 0x4e, 0x00, - 0x01, 0xff, 0x4c, 0x4c, 0x16, 0xa5, 0xfc, 0x00, 0x4b, 0x4d, 0x6c, 0xe4, - 0xfc, 0x40, 0xa9, 0x1b, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x6e, 0x37, - 0x06, 0x51, 0xd3, 0x5a, 0x53, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x51, 0xfd, - 0x00, 0x4c, 0x4c, 0x16, 0x52, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xa2, 0xfc, - 0x00, 0x4c, 0x35, 0x03, 0x0c, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x74, 0xfc, - 0x00, 0x4d, 0x34, 0x03, 0x0f, 0xfc, 0x40, 0x52, 0x2e, 0x4f, 0x4e, 0xfd, - 0x00, 0x07, 0x4f, 0x00, 0x01, 0xff, 0x0d, 0x67, 0x00, 0x5a, 0x05, 0x08, - 0x59, 0x4a, 0x05, 0x7a, 0x20, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, - 0x3d, 0x2c, 0x12, 0xfd, 0x00, 0x4d, 0x34, 0x03, 0xf6, 0xfc, 0x40, 0xa9, - 0x27, 0x4b, 0x4d, 0x6c, 0x3a, 0xfd, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x04, 0x84, 0x20, 0x0c, 0x51, 0xd3, 0x5a, 0x73, 0xfd, 0x00, 0x4e, 0xa5, - 0x4d, 0x74, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x71, 0xfd, 0x00, 0x4c, 0x4c, - 0x16, 0x72, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0x33, 0xfd, 0x00, 0x4c, 0x35, - 0x03, 0x27, 0xfc, 0x40, 0x4b, 0x4d, 0x16, 0xb8, 0xfc, 0x00, 0x4c, 0x35, - 0x03, 0x26, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x11, 0xfd, 0x00, 0x4d, 0x34, - 0x03, 0xf5, 0xfc, 0x40, 0xa1, 0xde, 0x04, 0x09, 0xd1, 0xb5, 0xde, 0x02, - 0xa8, 0x06, 0x54, 0x1f, 0x45, 0xfe, 0xfd, 0x40, 0x0a, 0x31, 0xa5, 0x8b, - 0x02, 0x09, 0xd1, 0xb5, 0x01, 0xff, 0x0d, 0x67, 0x00, 0xf5, 0x01, 0xa8, - 0xa8, 0x01, 0x05, 0x6e, 0x37, 0x83, 0x01, 0x05, 0x07, 0x5a, 0x65, 0x05, - 0x7a, 0x20, 0x21, 0x04, 0x3c, 0x7a, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, - 0x4a, 0x3d, 0x2c, 0x1a, 0xfd, 0x00, 0x4d, 0x34, 0x03, 0xfe, 0xfc, 0x40, - 0x4a, 0x3d, 0x2c, 0x29, 0xfd, 0x00, 0x4d, 0x34, 0x03, 0x0d, 0xfd, 0x40, - 0x4a, 0x3d, 0x2c, 0x28, 0xfd, 0x00, 0xa9, 0x2c, 0x4b, 0x4d, 0x6c, 0xe9, - 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x07, 0x5a, 0x11, 0x05, - 0x7a, 0x20, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x6c, 0xfd, 0x00, 0x4c, 0x4c, - 0x16, 0x6d, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x6a, 0xfd, 0x00, 0x4c, 0x4c, - 0x16, 0x6b, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0x30, 0xfd, 0x00, 0x4c, 0x35, - 0x03, 0x0c, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x27, 0xfd, 0x00, 0xa9, 0x06, - 0x4b, 0x4d, 0x6c, 0x39, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0x2f, 0xfd, 0x00, - 0x4c, 0x35, 0x03, 0x0b, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x25, 0xfd, 0x00, - 0xa9, 0x0c, 0x4b, 0x4d, 0x6c, 0x37, 0xfd, 0x00, 0x53, 0xa0, 0x4d, 0x69, - 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0x2d, 0xfd, 0x00, 0x4c, 0x35, 0x03, 0x09, - 0xfd, 0x40, 0x03, 0xc9, 0x09, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, - 0x4c, 0x16, 0x32, 0xfd, 0x00, 0x4b, 0x4d, 0x6c, 0xea, 0xfc, 0x40, 0x4a, - 0x3d, 0x2c, 0x26, 0xfd, 0x00, 0xa9, 0x21, 0x4b, 0x4d, 0x6c, 0x38, 0xfd, - 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x7a, 0x20, 0x06, 0x4e, 0xa5, - 0x4d, 0xaa, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x67, 0xfd, 0x00, 0x4c, 0x4c, - 0x16, 0x68, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0x2e, 0xfd, 0x00, 0x4c, 0x35, - 0x03, 0x0a, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x19, 0xfd, 0x00, 0x4d, 0x34, - 0x03, 0xfd, 0xfc, 0x40, 0x05, 0x81, 0x5d, 0x2e, 0x06, 0xce, 0xd8, 0x1e, - 0x05, 0x5f, 0x4f, 0x06, 0x5e, 0x44, 0x06, 0x63, 0xfc, 0x40, 0x80, 0x06, - 0x51, 0xaf, 0x5c, 0x5f, 0xfc, 0x40, 0x4d, 0x34, 0x03, 0x62, 0xfc, 0x00, - 0x4b, 0x4d, 0x6c, 0xf4, 0xfc, 0x40, 0x4d, 0x34, 0x03, 0x60, 0xfc, 0x00, - 0x4b, 0x4d, 0x6c, 0xf2, 0xfc, 0x40, 0x80, 0x06, 0x51, 0xaf, 0x5c, 0x5e, - 0xfc, 0x40, 0x4d, 0x34, 0x03, 0x61, 0xfc, 0x00, 0x4b, 0x4d, 0x6c, 0xf3, - 0xfc, 0x40, 0x0d, 0x67, 0x00, 0xea, 0x01, 0xa8, 0xb8, 0x01, 0x05, 0x6e, - 0x37, 0x8e, 0x01, 0x05, 0x07, 0x5a, 0x65, 0x05, 0x7a, 0x20, 0x21, 0x04, - 0x3c, 0x7a, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x18, - 0xfd, 0x00, 0x4d, 0x34, 0x03, 0xfc, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x2a, - 0xfd, 0x00, 0x4d, 0x34, 0x03, 0x0e, 0xfd, 0x40, 0xa9, 0x32, 0x4b, 0x4d, - 0x6c, 0xe7, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x84, 0x20, - 0x17, 0x51, 0x6e, 0x37, 0x61, 0xfd, 0x00, 0x05, 0x7a, 0x20, 0x01, 0xff, - 0x4a, 0x3d, 0x2c, 0x62, 0xfd, 0x00, 0x4c, 0x4c, 0x16, 0x63, 0xfd, 0x40, - 0x4a, 0x3d, 0x2c, 0x5f, 0xfd, 0x00, 0x4c, 0x4c, 0x16, 0x60, 0xfd, 0x40, - 0x4b, 0x4d, 0x16, 0xb0, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x1f, 0xfc, 0x40, - 0xa9, 0x17, 0x4b, 0x4d, 0x6c, 0x36, 0xfd, 0x00, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x57, 0x30, 0x2c, 0xa8, 0xfd, 0x00, 0x4e, 0xa5, 0x4d, 0xc6, 0xfd, - 0x40, 0x4b, 0x4d, 0x16, 0xaf, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x1e, 0xfc, - 0x40, 0xa9, 0x17, 0x4b, 0x4d, 0x6c, 0x34, 0xfd, 0x00, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x57, 0x30, 0x2c, 0x5e, 0xfd, 0x00, 0x50, 0x08, 0x5a, 0x5d, - 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xad, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x1c, - 0xfc, 0x40, 0x03, 0xc9, 0x09, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, - 0x4c, 0x16, 0x31, 0xfd, 0x00, 0x4b, 0x4d, 0x6c, 0xe8, 0xfc, 0x40, 0xa9, - 0x0c, 0x4b, 0x4d, 0x6c, 0x35, 0xfd, 0x00, 0x56, 0x69, 0x37, 0x5c, 0xfd, - 0x40, 0x4b, 0x4d, 0x16, 0xae, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x1d, 0xfc, - 0x40, 0x4a, 0x3d, 0x2c, 0x17, 0xfd, 0x00, 0x4d, 0x34, 0x03, 0xfb, 0xfc, - 0x40, 0x07, 0x53, 0x0a, 0x3e, 0xac, 0x01, 0xff, 0xa1, 0x2d, 0x02, 0x74, - 0x00, 0x01, 0xff, 0x80, 0x1a, 0x03, 0xdd, 0x0d, 0x01, 0xff, 0x53, 0xa6, - 0x46, 0x46, 0xfd, 0x00, 0xa8, 0x01, 0xff, 0x52, 0xfa, 0x52, 0xfa, 0xfd, - 0x00, 0x5c, 0xde, 0x18, 0x4c, 0xfd, 0x40, 0x4d, 0x34, 0x03, 0xf9, 0xfd, - 0x00, 0x67, 0x1a, 0x03, 0xf0, 0xfd, 0x40, 0x4d, 0xe6, 0x7e, 0xcf, 0xfd, - 0x00, 0x4f, 0x44, 0x37, 0xf5, 0xfd, 0x40, 0x0d, 0x67, 0x00, 0x77, 0x04, - 0x84, 0x20, 0x4a, 0x51, 0x07, 0x5a, 0xb2, 0xfc, 0x00, 0x05, 0x7a, 0x20, - 0x21, 0x04, 0x3c, 0x7a, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x3d, - 0x2c, 0x22, 0xfd, 0x00, 0x4d, 0x34, 0x03, 0x06, 0xfd, 0x40, 0x4a, 0x3d, - 0x2c, 0x2b, 0xfd, 0x00, 0x4d, 0x34, 0x03, 0x0f, 0xfd, 0x40, 0xa9, 0x11, - 0x0a, 0x96, 0x7d, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x66, 0xfd, 0x00, 0x4c, - 0x4c, 0x16, 0xc5, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xb3, 0xfc, 0x00, 0x4c, - 0x35, 0x03, 0x21, 0xfc, 0x40, 0xa9, 0x1b, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x04, 0x84, 0x20, 0x06, 0x4e, 0xa5, 0x4d, 0xa9, 0xfd, 0x40, 0x4a, 0x3d, - 0x2c, 0x64, 0xfd, 0x00, 0x4c, 0x4c, 0x16, 0x65, 0xfd, 0x40, 0x4b, 0x4d, - 0x16, 0xb1, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x20, 0xfc, 0x40, 0x4a, 0x3d, - 0x2c, 0x21, 0xfd, 0x00, 0x4d, 0x34, 0x03, 0x05, 0xfd, 0x40, 0xa1, 0x06, - 0x66, 0x88, 0x06, 0x5c, 0xfc, 0x40, 0x4e, 0x50, 0x75, 0x41, 0xfd, 0x80, - 0x16, 0x06, 0x88, 0xd9, 0x06, 0x52, 0x3e, 0x54, 0xf6, 0xfd, 0x40, 0x47, - 0x52, 0x75, 0x40, 0xfd, 0x00, 0x48, 0x72, 0xc5, 0x4f, 0xfd, 0x40, 0x42, - 0x31, 0x12, 0x42, 0xfd, 0x00, 0xb5, 0x01, 0xff, 0xed, 0x43, 0xfd, 0x80, - 0x06, 0x43, 0xcc, 0x44, 0x45, 0xfd, 0x40, 0x42, 0x31, 0x12, 0x44, 0xfd, - 0x40, 0xa1, 0x06, 0x4d, 0xaf, 0x87, 0x4b, 0xfd, 0x40, 0x07, 0xf6, 0x13, - 0x06, 0x6a, 0x17, 0x03, 0xf1, 0xfd, 0x40, 0x0d, 0x67, 0x00, 0x54, 0x05, - 0x08, 0x59, 0x44, 0x05, 0x7a, 0x20, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, - 0x4a, 0x3d, 0x2c, 0x7f, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x36, 0xfc, 0x40, - 0xa9, 0x21, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x84, 0x20, 0x0c, 0x4f, - 0x92, 0x6e, 0x7f, 0xfd, 0x00, 0x4e, 0xa5, 0x4d, 0xb2, 0xfd, 0x40, 0x4a, - 0x3d, 0x2c, 0x7e, 0xfd, 0x00, 0x4c, 0x4c, 0x16, 0xb4, 0xfd, 0x40, 0x4b, - 0x4d, 0x16, 0xc3, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x34, 0xfc, 0x40, 0x4b, - 0x4d, 0x16, 0xc2, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x33, 0xfc, 0x40, 0x4a, - 0x3d, 0x2c, 0x7e, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x35, 0xfc, 0x40, 0x0d, - 0x67, 0x00, 0xe1, 0x01, 0xa8, 0xa4, 0x01, 0x05, 0x6e, 0x37, 0x61, 0x06, - 0x07, 0x5a, 0x51, 0x05, 0x7a, 0x20, 0x22, 0x4f, 0x19, 0x6f, 0x8d, 0xfc, - 0x00, 0x4e, 0x3c, 0x7a, 0x8a, 0xfc, 0x00, 0x04, 0x4d, 0x00, 0x06, 0x4f, - 0x9c, 0x73, 0x8b, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x8f, 0xfc, 0x00, 0x4d, - 0x34, 0x03, 0x50, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x8c, 0xfc, 0x00, 0xa9, - 0x17, 0x4b, 0x4d, 0x6c, 0xee, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x57, 0x30, 0x2c, 0x9b, 0xfd, 0x00, 0x4e, 0xa5, 0x4d, 0x9a, 0xfd, 0x40, - 0x4b, 0x4d, 0x16, 0xd5, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x4e, 0xfc, 0x40, - 0x4b, 0x4d, 0x16, 0xd4, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x4d, 0xfc, 0x40, - 0xa9, 0x31, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x30, 0x2c, 0x99, 0xfd, - 0x00, 0x04, 0x84, 0x20, 0x16, 0x05, 0x7a, 0x20, 0x06, 0x4e, 0xa5, 0x4d, - 0xc7, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x97, 0xfd, 0x00, 0x4c, 0x4c, 0x16, - 0x98, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0xbd, 0xfd, 0x00, 0x4c, 0x4c, 0x16, - 0xb8, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xd2, 0xfc, 0x00, 0x4c, 0x35, 0x03, - 0x4b, 0xfc, 0x40, 0x03, 0xc9, 0x09, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, - 0x4c, 0x4c, 0x16, 0xd6, 0xfc, 0x00, 0x4b, 0x4d, 0x6c, 0xef, 0xfc, 0x40, - 0xa9, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x30, 0x2c, 0x96, 0xfd, - 0x00, 0x51, 0xd3, 0x5a, 0x95, 0xfd, 0x00, 0x4e, 0xa5, 0x4d, 0xb3, 0xfd, - 0x40, 0x4b, 0x4d, 0x16, 0xd3, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x4c, 0xfc, - 0x40, 0x4a, 0x3d, 0x2c, 0x8e, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x4f, 0xfc, - 0x40, 0x09, 0x7b, 0x20, 0x06, 0x55, 0x6d, 0x3c, 0xf4, 0xfd, 0x40, 0x05, - 0x67, 0x00, 0xa5, 0x01, 0x04, 0x84, 0x20, 0x7c, 0x05, 0x6e, 0x37, 0x4d, - 0x05, 0x07, 0x5a, 0x24, 0x05, 0x7a, 0x20, 0x06, 0x51, 0x58, 0x5e, 0x4a, - 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x89, 0xfc, 0x00, 0xa9, 0x06, 0x53, 0xa0, - 0x4d, 0xb1, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xd1, 0xfc, 0x00, 0x4c, 0x35, - 0x03, 0x48, 0xfc, 0x40, 0xa9, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x51, - 0x6e, 0x37, 0x8e, 0xfd, 0x00, 0x51, 0xd3, 0x5a, 0x8f, 0xfd, 0x00, 0x4e, - 0xa5, 0x4d, 0xb9, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xd0, 0xfc, 0x00, 0x4c, - 0x35, 0x03, 0x47, 0xfc, 0x40, 0xa9, 0x1d, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x50, 0x08, 0x5a, 0x8c, 0xfd, 0x00, 0x51, 0x07, 0x5a, 0x92, 0xfd, 0x00, - 0x51, 0xd3, 0x5a, 0x8d, 0xfd, 0x00, 0x4e, 0xa5, 0x4d, 0xc0, 0xfd, 0x40, - 0x4b, 0x4d, 0x16, 0xce, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x45, 0xfc, 0x40, - 0xa9, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x51, 0x6e, 0x37, 0x89, 0xfd, - 0x00, 0x51, 0xd3, 0x5a, 0x8a, 0xfd, 0x00, 0x4e, 0xa5, 0x4d, 0x8b, 0xfd, - 0x40, 0x4b, 0x4d, 0x16, 0xcf, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x46, 0xfc, - 0x40, 0x4a, 0x3d, 0x2c, 0x88, 0xfc, 0x00, 0x55, 0x43, 0x1e, 0x49, 0xfc, - 0x40, 0x05, 0x67, 0x00, 0xe6, 0x01, 0xa8, 0xaa, 0x01, 0x05, 0x6e, 0x37, - 0x6d, 0x05, 0x07, 0x5a, 0x4a, 0x05, 0x7a, 0x20, 0x11, 0x04, 0x4d, 0x00, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x87, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x44, - 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x85, 0xfc, 0x00, 0xa9, 0x21, 0x4b, 0x4d, - 0x6c, 0xed, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x84, 0x20, - 0x06, 0x4e, 0xa5, 0x4d, 0xad, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x87, 0xfd, - 0x00, 0x4c, 0x4c, 0x16, 0x88, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xcc, 0xfc, - 0x00, 0x4c, 0x35, 0x03, 0x42, 0xfc, 0x40, 0xa9, 0x11, 0x0a, 0x96, 0x7d, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x85, 0xfd, 0x00, 0x4c, 0x4c, 0x16, 0x86, - 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xcb, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x41, - 0xfc, 0x40, 0xa9, 0x2b, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x6e, 0x37, - 0x16, 0x05, 0x7a, 0x20, 0x06, 0x4e, 0xa5, 0x4d, 0xac, 0xfd, 0x40, 0x4a, - 0x3d, 0x2c, 0xbc, 0xfd, 0x00, 0x4c, 0x4c, 0x16, 0xba, 0xfd, 0x40, 0x4a, - 0x3d, 0x2c, 0x84, 0xfd, 0x00, 0x4c, 0x4c, 0x16, 0x83, 0xfd, 0x40, 0x4b, - 0x4d, 0x16, 0xc9, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x3f, 0xfc, 0x40, 0x03, - 0xc9, 0x09, 0x06, 0x4f, 0x0e, 0x6b, 0xcd, 0xfc, 0x40, 0xa9, 0x21, 0x05, - 0x51, 0x00, 0x01, 0xff, 0x57, 0x30, 0x2c, 0x82, 0xfd, 0x00, 0x05, 0x7a, - 0x20, 0x06, 0x4e, 0xa5, 0x4d, 0x81, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x80, - 0xfd, 0x00, 0x4c, 0x4c, 0x16, 0xb5, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xca, - 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x40, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0xfc, - 0xfe, 0x00, 0x4d, 0x34, 0x03, 0xfb, 0xfe, 0x00, 0x08, 0x6c, 0x00, 0x3b, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x06, 0x56, 0x00, 0x11, 0x0c, 0x01, 0x90, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xf6, 0xfe, 0x00, 0x4d, 0x34, 0x03, 0xf5, - 0xfe, 0x40, 0x06, 0x5c, 0x00, 0x11, 0x06, 0x54, 0x12, 0x01, 0xff, 0x4a, - 0x3d, 0x2c, 0xfa, 0xfe, 0x00, 0x4d, 0x34, 0x03, 0xf9, 0xfe, 0x40, 0x4a, - 0x3d, 0x2c, 0xf8, 0xfe, 0x00, 0x4d, 0x34, 0x03, 0xf7, 0xfe, 0x40, 0x4a, - 0x3d, 0x2c, 0x86, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x43, 0xfc, 0x40, 0x08, - 0xf5, 0x13, 0x4c, 0x09, 0x84, 0x20, 0x01, 0xff, 0x0d, 0x67, 0x00, 0x37, - 0x51, 0x08, 0x59, 0x1a, 0xfc, 0x00, 0x06, 0x6e, 0x37, 0x21, 0x06, 0xd3, - 0x5a, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x20, 0xfd, - 0x00, 0x4d, 0x34, 0x03, 0x04, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xac, 0xfc, - 0x00, 0x4c, 0x35, 0x03, 0x1b, 0xfc, 0x40, 0x4b, 0x4d, 0x16, 0xab, 0xfc, - 0x00, 0x4c, 0x35, 0x03, 0x19, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x1f, 0xfd, - 0x00, 0x4d, 0x34, 0x03, 0x03, 0xfd, 0x40, 0x05, 0x67, 0x00, 0x99, 0x01, - 0x05, 0x08, 0x59, 0x88, 0x01, 0x06, 0x6e, 0x37, 0x78, 0x06, 0x07, 0x5a, - 0x68, 0x04, 0xfd, 0x13, 0x4a, 0x05, 0x7a, 0x20, 0x11, 0x04, 0x4d, 0x00, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x84, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x3e, - 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x82, 0xfc, 0x00, 0xa9, 0x21, 0x4b, 0x4d, - 0x6c, 0xec, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x7a, 0x20, - 0x06, 0x4e, 0xa5, 0x4d, 0xb7, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0xbb, 0xfd, - 0x00, 0x4c, 0x4c, 0x16, 0xc3, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xc8, 0xfc, - 0x00, 0x4c, 0x35, 0x03, 0x3c, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x81, 0xfc, - 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, 0xeb, 0xfc, 0x40, 0x4b, 0x4d, 0x16, - 0xc7, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x3b, 0xfc, 0x40, 0x4b, 0x4d, 0x16, - 0xc6, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x3a, 0xfc, 0x40, 0x4b, 0x4d, 0x16, - 0xc4, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x38, 0xfc, 0x40, 0x4b, 0x4d, 0x16, - 0xc5, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x39, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, - 0x80, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x37, 0xfc, 0x00, 0x08, 0x6c, 0x00, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x83, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x3d, - 0xfc, 0x40, 0x4e, 0x54, 0x74, 0xfb, 0xfd, 0x00, 0x09, 0x7b, 0x20, 0x01, - 0xff, 0x0d, 0x67, 0x00, 0x67, 0x04, 0x84, 0x20, 0x44, 0x05, 0x7a, 0x20, - 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x1e, 0xfd, 0x00, - 0x4d, 0x34, 0x03, 0x02, 0xfd, 0x40, 0xa9, 0x21, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x57, 0x30, 0x2c, 0xa7, 0xfd, 0x00, 0x04, 0x84, 0x20, 0x06, 0x4e, - 0xa5, 0x4d, 0xa5, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x58, 0xfd, 0x00, 0x4c, - 0x4c, 0x16, 0x59, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xa8, 0xfc, 0x00, 0x4c, - 0x35, 0x03, 0x16, 0xfc, 0x40, 0xa9, 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x57, 0x30, 0x2c, 0xa6, 0xfd, 0x00, 0x4e, 0xa5, 0x4d, 0xbe, 0xfd, 0x40, - 0x4b, 0x4d, 0x16, 0xa7, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x15, 0xfc, 0x40, - 0x4a, 0x3d, 0x2c, 0x1d, 0xfd, 0x00, 0x4d, 0x34, 0x03, 0x01, 0xfd, 0x40, - 0x08, 0x85, 0x20, 0x4a, 0x08, 0x4e, 0x00, 0x01, 0xff, 0x5a, 0x3e, 0x1e, - 0x53, 0xfc, 0x00, 0x06, 0x6e, 0x37, 0x2f, 0x05, 0x7a, 0x20, 0x0c, 0x5d, - 0x3b, 0x16, 0xd9, 0xfc, 0x00, 0x51, 0x58, 0x5e, 0x54, 0xfc, 0x40, 0xa9, - 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x51, 0x6e, 0x37, 0x93, 0xfd, 0x00, - 0x51, 0xd3, 0x5a, 0x94, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xd8, 0xfc, 0x00, - 0x4c, 0x35, 0x03, 0x52, 0xfc, 0x40, 0x4b, 0x4d, 0x16, 0xd7, 0xfc, 0x00, - 0x4c, 0x35, 0x03, 0x51, 0xfc, 0x40, 0x0d, 0x67, 0x00, 0x4c, 0x05, 0x6e, - 0x37, 0x34, 0x05, 0x7a, 0x20, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, - 0x3d, 0x2c, 0x1c, 0xfd, 0x00, 0x4d, 0x34, 0x03, 0x00, 0xfd, 0x40, 0xa9, - 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x30, 0x2c, 0x5b, 0xfd, 0x00, - 0x4e, 0xa5, 0x4d, 0x5a, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xaa, 0xfc, 0x00, - 0x4c, 0x35, 0x03, 0x18, 0xfc, 0x40, 0xa9, 0x06, 0x53, 0xa0, 0x4d, 0xbf, - 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xa9, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x17, - 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x1b, 0xfd, 0x00, 0x4d, 0x34, 0x03, 0xff, - 0xfc, 0x40, 0x0d, 0x67, 0x00, 0x4a, 0x06, 0x6e, 0x37, 0x3a, 0x05, 0x7a, - 0x20, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x16, 0xfd, - 0x00, 0x4d, 0x34, 0x03, 0xfa, 0xfc, 0x40, 0xa9, 0x17, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x57, 0x30, 0x2c, 0x7b, 0xfd, 0x00, 0x4f, 0x92, 0x6e, 0x79, - 0xfd, 0x00, 0x4e, 0xa5, 0x4d, 0x7a, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xbd, - 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x2c, 0xfc, 0x40, 0x4b, 0x4d, 0x16, 0xbc, - 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x2b, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x15, - 0xfd, 0x00, 0x4d, 0x34, 0x03, 0xf9, 0xfc, 0x40, 0x0d, 0x67, 0x00, 0x6c, - 0x05, 0x08, 0x59, 0x5c, 0x06, 0x6e, 0x37, 0x4c, 0x05, 0x07, 0x5a, 0x29, - 0x05, 0x7a, 0x20, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x3d, 0x2c, - 0x7d, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x32, 0xfc, 0x40, 0xa9, 0x06, 0x53, - 0xa0, 0x4d, 0xc1, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xc1, 0xfc, 0x00, 0x4c, - 0x35, 0x03, 0x30, 0xfc, 0x40, 0xa9, 0x11, 0x0a, 0x96, 0x7d, 0x01, 0xff, - 0x4a, 0x3d, 0x2c, 0x7c, 0xfd, 0x00, 0x4c, 0x4c, 0x16, 0x7d, 0xfd, 0x40, - 0x4b, 0x4d, 0x16, 0xc0, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x2f, 0xfc, 0x40, - 0x4b, 0x4d, 0x16, 0xbe, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x2d, 0xfc, 0x40, - 0x4b, 0x4d, 0x16, 0xbf, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x2e, 0xfc, 0x40, - 0x4a, 0x3d, 0x2c, 0x7c, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x31, 0xfc, 0x40, - 0x0d, 0x67, 0x00, 0x87, 0x01, 0x04, 0x84, 0x20, 0x64, 0x06, 0x6e, 0x37, - 0x54, 0x05, 0x07, 0x5a, 0x31, 0x06, 0xd3, 0x5a, 0x21, 0x04, 0x3c, 0x7a, - 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x24, 0xfd, 0x00, - 0x4d, 0x34, 0x03, 0x08, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x2c, 0xfd, 0x00, - 0x4d, 0x34, 0x03, 0x10, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xb7, 0xfc, 0x00, - 0x4c, 0x35, 0x03, 0x25, 0xfc, 0x40, 0xa9, 0x11, 0x0a, 0x96, 0x7d, 0x01, - 0xff, 0x4a, 0x3d, 0x2c, 0x6f, 0xfd, 0x00, 0x4c, 0x4c, 0x16, 0x70, 0xfd, - 0x40, 0x4b, 0x4d, 0x16, 0xb6, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x24, 0xfc, - 0x40, 0x4b, 0x4d, 0x16, 0xb4, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x22, 0xfc, - 0x40, 0xa9, 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x30, 0x2c, 0x6e, - 0xfd, 0x00, 0x4e, 0xa5, 0x4d, 0xab, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xb5, - 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x23, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x23, - 0xfd, 0x00, 0x4d, 0x34, 0x03, 0x07, 0xfd, 0x40, 0x08, 0x4e, 0x00, 0x06, - 0x5c, 0xc6, 0x17, 0xfd, 0xfd, 0x40, 0x0d, 0x67, 0x00, 0x93, 0x01, 0xa8, - 0x68, 0x06, 0x6e, 0x37, 0x58, 0x05, 0x07, 0x5a, 0x40, 0x05, 0x7a, 0x20, - 0x22, 0x4f, 0x19, 0x6f, 0x6d, 0xfc, 0x00, 0x4e, 0x3c, 0x7a, 0x6a, 0xfc, - 0x00, 0x04, 0x4d, 0x00, 0x06, 0x4f, 0x9c, 0x73, 0x6b, 0xfc, 0x40, 0x4a, - 0x3d, 0x2c, 0x6f, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x0a, 0xfc, 0x40, 0x4a, - 0x3d, 0x2c, 0x6c, 0xfc, 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, 0xe1, 0xfc, - 0x40, 0x4b, 0x4d, 0x16, 0x9f, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x08, 0xfc, - 0x40, 0xa9, 0x06, 0x53, 0xa0, 0x4d, 0x9e, 0xfd, 0x40, 0x4b, 0x4d, 0x16, - 0x9e, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x07, 0xfc, 0x40, 0x4b, 0x4d, 0x16, - 0x9c, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x05, 0xfc, 0x40, 0x03, 0xc9, 0x09, - 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, 0x4c, 0x16, 0xa0, 0xfc, 0x00, - 0x4b, 0x4d, 0x6c, 0xe2, 0xfc, 0x40, 0xa9, 0x06, 0x53, 0xa0, 0x4d, 0xc2, - 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0x9d, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x06, - 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x6e, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x09, - 0xfc, 0x40, 0x08, 0x4d, 0x9a, 0x69, 0x52, 0xec, 0x51, 0xf3, 0xfd, 0x00, - 0xac, 0x06, 0x4b, 0x50, 0xa3, 0xff, 0xfd, 0x40, 0x03, 0xe2, 0x18, 0x2b, - 0x03, 0x69, 0x00, 0x06, 0x51, 0x29, 0x5a, 0xf2, 0xfd, 0x40, 0x1e, 0x5e, - 0x13, 0x11, 0x0e, 0x4c, 0x7d, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x3c, 0xfd, - 0x00, 0x4d, 0x34, 0x03, 0x3d, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x90, 0xfc, - 0x00, 0x4d, 0x34, 0x03, 0x5d, 0xfc, 0x40, 0x4c, 0x25, 0x8a, 0x4d, 0xfd, - 0x00, 0x4f, 0xd2, 0x6a, 0xf7, 0xfd, 0x00, 0xa9, 0x01, 0xff, 0x09, 0x27, - 0x8a, 0x0f, 0xad, 0x01, 0xff, 0x4a, 0x27, 0x8a, 0x48, 0xfd, 0x00, 0x4c, - 0x25, 0x8a, 0x49, 0xfd, 0x40, 0xed, 0x47, 0xfd, 0x00, 0x4d, 0x95, 0x87, - 0x4a, 0xfd, 0x40, 0x0d, 0x67, 0x00, 0x67, 0x05, 0x6e, 0x37, 0x44, 0x05, - 0x7a, 0x20, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x14, - 0xfd, 0x00, 0x4d, 0x34, 0x03, 0xf8, 0xfc, 0x40, 0xa9, 0x21, 0x05, 0x51, - 0x00, 0x01, 0xff, 0x57, 0x30, 0x2c, 0x78, 0xfd, 0x00, 0x05, 0x7a, 0x20, - 0x06, 0x4e, 0xa5, 0x4d, 0xb6, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x76, 0xfd, - 0x00, 0x4c, 0x4c, 0x16, 0x77, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xbb, 0xfc, - 0x00, 0x4c, 0x35, 0x03, 0x2a, 0xfc, 0x40, 0xa9, 0x11, 0x0a, 0x96, 0x7d, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x75, 0xfd, 0x00, 0x4c, 0x4c, 0x16, 0xc4, - 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xba, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x29, - 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x13, 0xfd, 0x00, 0x4d, 0x34, 0x03, 0xf7, - 0xfc, 0x40, 0x0d, 0x8a, 0x81, 0xbb, 0x1e, 0x05, 0xc3, 0x05, 0x01, 0xff, - 0xa1, 0xf5, 0x1a, 0x02, 0x8c, 0x05, 0xba, 0x19, 0xa4, 0x99, 0x17, 0xe5, - 0xd0, 0x06, 0x80, 0xf6, 0x16, 0xa6, 0xc3, 0x15, 0xa7, 0x9d, 0x14, 0xa8, - 0xe6, 0x11, 0x02, 0xde, 0x1f, 0x8e, 0x11, 0xab, 0xf7, 0x0e, 0xac, 0x90, - 0x0e, 0xad, 0xc8, 0x0d, 0xae, 0xed, 0x0b, 0x42, 0x17, 0x50, 0xc6, 0x06, - 0x80, 0xd6, 0x0b, 0x43, 0x72, 0xe4, 0x7e, 0x06, 0x80, 0xff, 0x0a, 0x43, - 0xf4, 0x13, 0x42, 0x06, 0x80, 0xb8, 0x0a, 0xb2, 0xfb, 0x08, 0xb3, 0x9f, - 0x07, 0xb4, 0xdb, 0x03, 0xf5, 0xc7, 0x06, 0x80, 0xa9, 0x03, 0x42, 0x32, - 0x00, 0xcb, 0x06, 0x80, 0xf1, 0x02, 0x43, 0xc0, 0x88, 0x48, 0x06, 0x80, - 0x93, 0x02, 0xb9, 0x43, 0x02, 0x59, 0x00, 0x01, 0xff, 0xe8, 0x38, 0x06, - 0x80, 0x1c, 0x42, 0x9e, 0x01, 0x32, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, - 0x4a, 0x3d, 0x2c, 0xb0, 0xfe, 0x00, 0x4d, 0x34, 0x03, 0xaf, 0xfe, 0x00, - 0x55, 0x26, 0x3e, 0xb2, 0x08, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, - 0xc6, 0xfe, 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, 0xc8, 0xfe, 0x40, 0x4b, - 0x4d, 0x16, 0xc7, 0xfe, 0x00, 0x4c, 0x35, 0x03, 0xc5, 0xfe, 0x40, 0x42, - 0x4e, 0x00, 0x4a, 0x06, 0x80, 0x14, 0xf5, 0xc8, 0x06, 0xc0, 0x00, 0x80, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xdc, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0xdb, - 0xfb, 0x40, 0x80, 0x01, 0xff, 0x46, 0x6a, 0x19, 0xd2, 0x06, 0x80, 0x6f, - 0x4a, 0x3d, 0x2c, 0xf2, 0xfe, 0x00, 0xa9, 0x5b, 0x4b, 0x4d, 0x6c, 0xf4, - 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4b, 0x56, 0x00, 0x26, 0x06, - 0x80, 0x2c, 0x47, 0x02, 0x34, 0xce, 0x06, 0x00, 0xb4, 0x01, 0xff, 0x43, - 0x24, 0x17, 0xcd, 0x06, 0x00, 0x4f, 0x94, 0x6c, 0xd1, 0x06, 0x00, 0x12, - 0x86, 0x1d, 0x01, 0xff, 0x49, 0x98, 0x1d, 0xa9, 0x08, 0x00, 0x4b, 0x56, - 0x00, 0xa8, 0x08, 0x00, 0x50, 0xda, 0x65, 0xba, 0x08, 0x40, 0x80, 0x01, - 0xff, 0x4a, 0x3d, 0x2c, 0x8a, 0xfe, 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, - 0x8c, 0xfe, 0x40, 0x4b, 0x4d, 0x16, 0x8b, 0xfe, 0x00, 0x4c, 0x35, 0x03, - 0x89, 0xfe, 0x40, 0x4b, 0x4d, 0x16, 0xf3, 0xfe, 0x00, 0x4c, 0x35, 0x03, - 0xf1, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xaf, 0xfb, 0x00, - 0x4d, 0x34, 0x03, 0xae, 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x1d, - 0x70, 0x15, 0x16, 0x4b, 0x56, 0x00, 0xd3, 0x06, 0xc0, 0x00, 0x80, 0x01, - 0xff, 0x4a, 0x3d, 0x2c, 0xb1, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0xb0, 0xfb, - 0x40, 0x4a, 0x0f, 0xa9, 0x7b, 0x07, 0x00, 0x48, 0xca, 0xc9, 0x7a, 0x07, - 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xee, 0xfe, 0x00, 0x4d, 0x34, - 0x03, 0xed, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0xb4, 0x0b, - 0x32, 0x1d, 0x70, 0x15, 0x22, 0x4b, 0x56, 0x00, 0x24, 0x06, 0x80, 0x0c, - 0x44, 0xf7, 0x07, 0xc4, 0x06, 0x00, 0x4e, 0xa3, 0x0e, 0xca, 0x06, 0x40, - 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x86, 0xfe, 0x00, 0x4d, 0x34, 0x03, - 0x85, 0xfe, 0x40, 0x4a, 0x0f, 0xa9, 0x79, 0x07, 0x00, 0x48, 0xca, 0xc9, - 0x78, 0x07, 0x40, 0x45, 0x5c, 0x00, 0xcf, 0x06, 0x00, 0x46, 0x25, 0x1e, - 0xab, 0x08, 0x40, 0x80, 0x22, 0xe8, 0xa4, 0x06, 0xc0, 0x00, 0x80, 0x01, - 0xff, 0x4a, 0x3d, 0x2c, 0x6b, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, - 0x6d, 0xfb, 0x40, 0x4b, 0x4d, 0x16, 0x6c, 0xfb, 0x00, 0x4c, 0x35, 0x03, - 0x6a, 0xfb, 0x40, 0x4a, 0x3d, 0x2c, 0xdf, 0xfb, 0x00, 0x4d, 0x34, 0x03, - 0xde, 0xfb, 0x40, 0x80, 0x11, 0x22, 0x07, 0x0c, 0x01, 0xff, 0x4c, 0x4c, - 0x16, 0xe8, 0xfb, 0x00, 0x4b, 0x4d, 0x6c, 0xe9, 0xfb, 0x40, 0x4a, 0x3d, - 0x2c, 0xd8, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0xd7, 0xfb, 0x00, 0x50, 0x51, - 0x00, 0x77, 0x06, 0xc0, 0x00, 0x4e, 0x33, 0x03, 0xdd, 0xfb, 0x40, 0x42, - 0xc9, 0x09, 0x37, 0x06, 0x80, 0xed, 0x02, 0x44, 0xfc, 0x81, 0x86, 0x06, - 0x80, 0x94, 0x02, 0x42, 0x4e, 0x00, 0x2a, 0x06, 0x80, 0x8f, 0x01, 0xa8, - 0x4d, 0x43, 0x63, 0x0f, 0x79, 0x06, 0xc0, 0x00, 0x80, 0x24, 0x42, 0x4e, - 0x00, 0x7a, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x5f, - 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, 0x61, 0xfb, 0x40, 0x4b, 0x4d, - 0x16, 0x60, 0xfb, 0x00, 0x4c, 0x35, 0x03, 0x5e, 0xfb, 0x40, 0x4a, 0x3d, - 0x2c, 0x67, 0xfb, 0x00, 0xa9, 0x0c, 0x4b, 0x4d, 0x6c, 0x69, 0xfb, 0x00, - 0x4c, 0x11, 0x95, 0xc0, 0x08, 0x40, 0x4b, 0x4d, 0x16, 0x68, 0xfb, 0x00, - 0x4c, 0x35, 0x03, 0x66, 0xfb, 0x40, 0x42, 0x13, 0x00, 0x30, 0x06, 0x80, - 0x2a, 0x42, 0x4e, 0x00, 0x2b, 0x06, 0x80, 0x06, 0x46, 0xe8, 0xd9, 0x86, - 0x08, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x9a, 0xfe, 0x00, 0xa9, - 0x06, 0x4b, 0x4d, 0x6c, 0x9c, 0xfe, 0x40, 0x4b, 0x4d, 0x16, 0x9b, 0xfe, - 0x00, 0x4c, 0x35, 0x03, 0x99, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, - 0x2c, 0xac, 0xfe, 0x00, 0x4d, 0x34, 0x03, 0xab, 0xfe, 0x40, 0x80, 0x24, - 0x42, 0x4e, 0x00, 0x7f, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, - 0x2c, 0x63, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, 0x65, 0xfb, 0x40, - 0x4b, 0x4d, 0x16, 0x64, 0xfb, 0x00, 0x4c, 0x35, 0x03, 0x62, 0xfb, 0x40, - 0x4a, 0x3d, 0x2c, 0x96, 0xfe, 0x00, 0xa9, 0x43, 0xad, 0x1f, 0x05, 0x51, - 0x00, 0x01, 0xff, 0x44, 0xf7, 0x07, 0x7c, 0x06, 0x00, 0x06, 0x0c, 0x07, - 0x06, 0x5a, 0xb2, 0x21, 0x7d, 0x06, 0x40, 0x49, 0x45, 0xbd, 0xb8, 0x08, - 0x00, 0xf6, 0xbf, 0x08, 0x40, 0x46, 0xfa, 0xd6, 0x29, 0x06, 0x80, 0x06, - 0x4a, 0x4e, 0x6c, 0x98, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, - 0x94, 0xfe, 0x00, 0x44, 0xca, 0xec, 0xc3, 0x06, 0x00, 0x4d, 0x34, 0x03, - 0x93, 0xfe, 0x40, 0x4b, 0x4d, 0x16, 0x97, 0xfe, 0x00, 0x4c, 0x35, 0x03, - 0x95, 0xfe, 0x40, 0x80, 0x24, 0x42, 0x4e, 0x00, 0x87, 0x06, 0xc0, 0x00, - 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x7f, 0xfb, 0x00, 0xa9, 0x06, 0x4b, - 0x4d, 0x6c, 0x81, 0xfb, 0x40, 0x4b, 0x4d, 0x16, 0x80, 0xfb, 0x00, 0x4c, - 0x35, 0x03, 0x7e, 0xfb, 0x40, 0x4a, 0x3d, 0x2c, 0x7b, 0xfb, 0x00, 0xa9, - 0x17, 0x4b, 0x4d, 0x6c, 0x7d, 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x49, 0x98, 0x1d, 0xbf, 0x06, 0x00, 0x47, 0x02, 0x34, 0xc1, 0x08, 0x40, - 0x4b, 0x4d, 0x16, 0x7c, 0xfb, 0x00, 0x4c, 0x35, 0x03, 0x7a, 0xfb, 0x40, - 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xc2, 0xfe, 0x00, 0xa9, 0x35, 0x4b, - 0x4d, 0x6c, 0xc4, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0x50, - 0x12, 0x8b, 0x08, 0x00, 0xb4, 0x01, 0xff, 0x0a, 0x5f, 0x12, 0x11, 0x08, - 0xa3, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xa3, 0x08, 0x00, 0x50, 0xad, - 0x2b, 0xc3, 0x0e, 0x41, 0x45, 0x5c, 0x00, 0x9f, 0x06, 0x00, 0x45, 0xf5, - 0x06, 0x8c, 0x08, 0x40, 0x4b, 0x4d, 0x16, 0xc3, 0xfe, 0x00, 0x4c, 0x35, - 0x03, 0xc1, 0xfe, 0x40, 0x42, 0xe8, 0x01, 0x35, 0x06, 0x80, 0x99, 0x01, - 0x43, 0x75, 0x09, 0x33, 0x06, 0x80, 0x3c, 0x44, 0x60, 0xd8, 0x34, 0x06, - 0x80, 0x12, 0x4b, 0x77, 0xa1, 0xb1, 0x08, 0x00, 0x4f, 0x45, 0x06, 0x70, - 0x06, 0x00, 0x48, 0xb2, 0xc9, 0xaa, 0x06, 0x40, 0x80, 0x01, 0xff, 0x4a, - 0x3d, 0x2c, 0xb6, 0xfe, 0x00, 0xa9, 0x0c, 0x4b, 0x4d, 0x6c, 0xb8, 0xfe, - 0x00, 0x4e, 0x3e, 0x7d, 0xfa, 0x06, 0x40, 0x4b, 0x4d, 0x16, 0xb7, 0xfe, - 0x00, 0x4c, 0x35, 0x03, 0xb5, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, - 0x2c, 0xb2, 0xfe, 0x00, 0xa9, 0x3f, 0x4b, 0x4d, 0x6c, 0xb4, 0xfe, 0x00, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x5b, 0x2d, 0x9a, 0x06, 0x00, 0x66, - 0xae, 0x06, 0x7d, 0x07, 0x00, 0x4f, 0x9c, 0x45, 0x5c, 0x07, 0x00, 0x4a, - 0x2b, 0x3e, 0x7e, 0x07, 0x00, 0x64, 0xb4, 0x09, 0x70, 0x07, 0x00, 0xb4, - 0x01, 0xff, 0x4f, 0x94, 0x6c, 0x9b, 0x06, 0x80, 0x06, 0x58, 0x8d, 0x2b, - 0x6d, 0x07, 0x40, 0x55, 0x59, 0x12, 0x9c, 0x06, 0x40, 0x4b, 0x4d, 0x16, - 0xb3, 0xfe, 0x00, 0x4c, 0x35, 0x03, 0xb1, 0xfe, 0x40, 0x80, 0x01, 0xff, - 0x4a, 0x3d, 0x2c, 0xba, 0xfe, 0x00, 0xa9, 0x21, 0x4b, 0x4d, 0x6c, 0xbc, - 0xfe, 0x00, 0x06, 0xfe, 0x05, 0x01, 0xff, 0x0a, 0x5f, 0x12, 0x06, 0x4d, - 0xb7, 0x0e, 0x9d, 0x06, 0x40, 0x45, 0x5c, 0x00, 0x9e, 0x06, 0x00, 0x45, - 0xf5, 0x06, 0xaf, 0x08, 0x40, 0x4b, 0x4d, 0x16, 0xbb, 0xfe, 0x00, 0x4c, - 0x35, 0x03, 0xb9, 0xfe, 0x40, 0x42, 0x4e, 0x00, 0x31, 0x06, 0x80, 0x40, - 0x44, 0xc4, 0x44, 0xbb, 0x06, 0x80, 0x1c, 0x4b, 0x5f, 0x9e, 0xac, 0x08, - 0x00, 0x43, 0xee, 0x50, 0x91, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, - 0x3d, 0x2c, 0x8d, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0x8c, 0xfb, 0x40, 0x80, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xa1, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x4d, - 0x6c, 0xa3, 0xfb, 0x40, 0x4b, 0x4d, 0x16, 0xa2, 0xfb, 0x00, 0x4c, 0x35, - 0x03, 0xa0, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xae, 0xfe, - 0x00, 0x4d, 0x34, 0x03, 0xad, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x49, 0x50, 0x12, 0x94, 0x06, 0x80, 0x52, 0x4f, 0x9c, 0x45, 0x99, 0x06, - 0x00, 0x4b, 0x56, 0x00, 0x6c, 0x07, 0x00, 0x4a, 0x2b, 0x3e, 0xef, 0x06, - 0x00, 0x44, 0x92, 0x83, 0xaa, 0x08, 0x00, 0x44, 0xf7, 0x07, 0x93, 0x06, - 0x00, 0xb3, 0x11, 0x09, 0xa2, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x97, - 0x06, 0x00, 0x50, 0x95, 0x2b, 0x6b, 0x07, 0x40, 0x05, 0x0d, 0x07, 0x06, - 0x45, 0x28, 0x05, 0x5b, 0x07, 0x40, 0x5e, 0xba, 0x09, 0x71, 0x07, 0x00, - 0x4a, 0xe0, 0x65, 0xb9, 0x08, 0x00, 0xf6, 0x92, 0x06, 0xc0, 0x00, 0x46, - 0xf4, 0x06, 0x95, 0x06, 0x40, 0x4e, 0x93, 0x1d, 0x96, 0x06, 0x40, 0x80, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xd6, 0xfe, 0x00, 0xa9, 0x28, 0x4b, 0x4d, - 0x6c, 0xd8, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0xb4, 0x0b, - 0x06, 0x50, 0x5e, 0x12, 0xa8, 0x06, 0x40, 0x45, 0x5c, 0x00, 0xa7, 0x06, - 0x00, 0x45, 0xf5, 0x06, 0xa5, 0x08, 0xc0, 0x00, 0x52, 0xc6, 0x4d, 0xb5, - 0x08, 0x40, 0x4b, 0x4d, 0x16, 0xd7, 0xfe, 0x00, 0x4c, 0x35, 0x03, 0xd5, - 0xfe, 0x40, 0x80, 0x24, 0x42, 0x4e, 0x00, 0xa6, 0x06, 0xc0, 0x00, 0x80, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x6f, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x4d, - 0x6c, 0x71, 0xfb, 0x40, 0x4b, 0x4d, 0x16, 0x70, 0xfb, 0x00, 0x4c, 0x35, - 0x03, 0x6e, 0xfb, 0x40, 0x4a, 0x3d, 0x2c, 0x57, 0xfb, 0x00, 0xa9, 0x15, - 0x4b, 0x4d, 0x6c, 0x59, 0xfb, 0x00, 0x0b, 0x11, 0x95, 0x01, 0xff, 0x4a, - 0x71, 0xab, 0xb7, 0x08, 0x00, 0xf6, 0xbe, 0x08, 0x40, 0x4b, 0x4d, 0x16, - 0x58, 0xfb, 0x00, 0x4c, 0x35, 0x03, 0x56, 0xfb, 0x40, 0x80, 0x01, 0xff, - 0x4a, 0x3d, 0x2c, 0xda, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0xd9, 0xfb, 0x40, - 0xe7, 0xad, 0x06, 0x80, 0x92, 0x01, 0x43, 0x69, 0x05, 0x46, 0x06, 0x80, - 0x24, 0x43, 0x4d, 0x00, 0x83, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, - 0x3d, 0x2c, 0x77, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, 0x79, 0xfb, - 0x40, 0x4b, 0x4d, 0x16, 0x78, 0xfb, 0x00, 0x4c, 0x35, 0x03, 0x76, 0xfb, - 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xe6, 0xfe, 0x00, 0x46, 0xc9, - 0x44, 0xba, 0x06, 0x80, 0x48, 0xa9, 0x3a, 0x4b, 0x4d, 0x6c, 0xe8, 0xfe, - 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0x50, 0x12, 0xb9, 0x06, 0x00, - 0x50, 0xf9, 0x33, 0x89, 0x08, 0x00, 0x44, 0xf7, 0x07, 0xbc, 0x06, 0x00, - 0x06, 0x0c, 0x07, 0x0f, 0xb4, 0x01, 0xff, 0x4f, 0x5f, 0x12, 0xbd, 0x06, - 0x00, 0x4d, 0xb7, 0x0e, 0x67, 0x07, 0x40, 0x43, 0xc8, 0x09, 0x68, 0x07, - 0x00, 0xf6, 0x69, 0x07, 0x40, 0x4b, 0x4d, 0x16, 0xe7, 0xfe, 0x00, 0x4c, - 0x35, 0x03, 0xe5, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x9f, - 0xfb, 0x00, 0x4d, 0x34, 0x03, 0x9e, 0xfb, 0x40, 0x80, 0x24, 0x43, 0xc1, - 0x9a, 0xb1, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x9b, - 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, 0x9d, 0xfb, 0x40, 0x4b, 0x4d, - 0x16, 0x9c, 0xfb, 0x00, 0x4c, 0x35, 0x03, 0x9a, 0xfb, 0x40, 0x4a, 0x3d, - 0x2c, 0xd4, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, 0xd6, 0xfb, 0x40, - 0x4b, 0x4d, 0x16, 0xd5, 0xfb, 0x00, 0x4c, 0x35, 0x03, 0xd3, 0xfb, 0x40, - 0x43, 0xba, 0x00, 0x1c, 0x06, 0x00, 0x43, 0xdf, 0x17, 0x45, 0x06, 0xc0, - 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xe2, 0xfe, 0x00, 0xa9, 0x21, - 0x4b, 0x4d, 0x6c, 0xe4, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, - 0xb4, 0x0b, 0x06, 0x50, 0x5e, 0x12, 0xa7, 0x08, 0x40, 0x45, 0x5c, 0x00, - 0x65, 0x07, 0x00, 0x45, 0xf5, 0x06, 0x66, 0x07, 0x40, 0x4b, 0x4d, 0x16, - 0xe3, 0xfe, 0x00, 0x4c, 0x35, 0x03, 0xe1, 0xfe, 0x40, 0x42, 0x57, 0x00, - 0x44, 0x06, 0x80, 0x06, 0x47, 0x7d, 0xd1, 0xad, 0x08, 0x40, 0x80, 0x01, - 0xff, 0x4a, 0x3d, 0x2c, 0xde, 0xfe, 0x00, 0xa9, 0x40, 0x4b, 0x4d, 0x6c, - 0xe0, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x43, 0x16, 0x00, 0x6a, - 0x07, 0x00, 0x02, 0x3b, 0x01, 0x1f, 0x06, 0x0c, 0x07, 0x11, 0x0b, 0x5e, - 0x12, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xb7, 0x06, 0x00, 0x45, 0xf5, 0x06, - 0xb8, 0x06, 0x40, 0x57, 0x8c, 0x2c, 0xc7, 0x08, 0x00, 0xf6, 0xb5, 0x06, - 0x40, 0x47, 0x9a, 0x1d, 0xb6, 0x06, 0x00, 0x48, 0x27, 0xa7, 0xa6, 0x08, - 0x40, 0x4b, 0x4d, 0x16, 0xdf, 0xfe, 0x00, 0x4c, 0x35, 0x03, 0xdd, 0xfe, - 0x40, 0xa1, 0xb4, 0x01, 0x44, 0x6a, 0xec, 0xa9, 0x06, 0x80, 0x55, 0x43, - 0x84, 0x20, 0x2e, 0x06, 0x80, 0x31, 0x07, 0x46, 0x00, 0x01, 0xff, 0x42, - 0x17, 0x50, 0xc5, 0x06, 0x80, 0x16, 0x42, 0xe1, 0x4c, 0xc9, 0x06, 0xc0, - 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xe3, 0xfb, 0x00, 0x4d, 0x34, - 0x03, 0xe2, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xe1, 0xfb, - 0x00, 0x4d, 0x34, 0x03, 0xe0, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, - 0x2c, 0xa6, 0xfe, 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, 0xa8, 0xfe, 0x40, - 0x4b, 0x4d, 0x16, 0xa7, 0xfe, 0x00, 0x4c, 0x35, 0x03, 0xa5, 0xfe, 0x40, - 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x8f, 0xfb, 0x00, 0xa9, 0x41, 0x4b, - 0x4d, 0x6c, 0x91, 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0x98, - 0x1d, 0x62, 0x07, 0x00, 0x47, 0x02, 0x34, 0xc2, 0x08, 0x00, 0xb4, 0x01, - 0xff, 0x0a, 0x5f, 0x12, 0x11, 0x08, 0xa3, 0x0b, 0x01, 0xff, 0x45, 0x5c, - 0x00, 0x3b, 0x06, 0x00, 0x50, 0xad, 0x2b, 0x8d, 0x08, 0x40, 0x45, 0x5c, - 0x00, 0x63, 0x07, 0x00, 0x45, 0xf5, 0x06, 0x3c, 0x06, 0x00, 0x56, 0x6f, - 0x35, 0x64, 0x07, 0x40, 0x4b, 0x4d, 0x16, 0x90, 0xfb, 0x00, 0x4c, 0x35, - 0x03, 0x8e, 0xfb, 0x40, 0xe6, 0x43, 0x06, 0x80, 0x06, 0x4a, 0xaf, 0xae, - 0x20, 0x06, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xda, 0xfe, 0x00, - 0xa9, 0x3b, 0x4b, 0x4d, 0x6c, 0xdc, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x04, 0xb4, 0x0b, 0x20, 0x44, 0xf7, 0x07, 0xab, 0x06, 0x00, 0xb4, - 0x01, 0xff, 0x4f, 0x94, 0x6c, 0xae, 0x06, 0x00, 0x08, 0xa3, 0x0b, 0x01, - 0xff, 0x45, 0x5c, 0x00, 0x7f, 0x07, 0x00, 0x50, 0xad, 0x2b, 0xc4, 0x0e, - 0x41, 0x45, 0x5c, 0x00, 0xac, 0x06, 0x00, 0x45, 0xf5, 0x06, 0xb4, 0x08, - 0x40, 0x4b, 0x4d, 0x16, 0xdb, 0xfe, 0x00, 0x4c, 0x35, 0x03, 0xd9, 0xfe, - 0x40, 0x42, 0x8a, 0x05, 0x2c, 0x06, 0x80, 0x14, 0xe8, 0x98, 0x06, 0xc0, - 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x8b, 0xfb, 0x00, 0x4d, 0x34, - 0x03, 0x8a, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x9e, 0xfe, - 0x00, 0xa9, 0x21, 0x4b, 0x4d, 0x6c, 0xa0, 0xfe, 0x00, 0x06, 0xfe, 0x05, - 0x01, 0xff, 0x0a, 0x5f, 0x12, 0x06, 0x4d, 0xa4, 0x0e, 0xa2, 0x08, 0x40, - 0x45, 0x5c, 0x00, 0xc5, 0x08, 0x00, 0x45, 0xf5, 0x06, 0xc6, 0x08, 0x40, - 0x4b, 0x4d, 0x16, 0x9f, 0xfe, 0x00, 0x4c, 0x35, 0x03, 0x9d, 0xfe, 0x40, - 0xa1, 0xaf, 0x01, 0x42, 0x4e, 0x00, 0x47, 0x06, 0x80, 0x1c, 0x49, 0xae, - 0xb7, 0x74, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x44, 0x67, 0x00, 0x75, - 0x06, 0x00, 0x43, 0xc0, 0x88, 0x76, 0x06, 0x00, 0x43, 0x4d, 0x00, 0x78, - 0x06, 0x40, 0x80, 0x01, 0xff, 0x4b, 0xea, 0x98, 0xbe, 0x06, 0x80, 0x65, - 0x4a, 0x3d, 0x2c, 0xea, 0xfe, 0x00, 0x44, 0xca, 0xec, 0xc1, 0x06, 0x80, - 0x35, 0xa9, 0x27, 0x4b, 0x4d, 0x6c, 0xec, 0xfe, 0x00, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x4a, 0x2b, 0x3e, 0xff, 0x06, 0x00, 0x49, 0x22, 0xbf, 0xc0, - 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xa5, 0xfb, 0x00, - 0x4d, 0x34, 0x03, 0xa4, 0xfb, 0x40, 0x4b, 0x4d, 0x16, 0xeb, 0xfe, 0x00, - 0x4c, 0x35, 0x03, 0xe9, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, - 0xa7, 0xfb, 0x00, 0xa9, 0x0c, 0x4b, 0x4d, 0x6c, 0xa9, 0xfb, 0x00, 0x50, - 0x51, 0x00, 0xc2, 0x06, 0x40, 0x4b, 0x4d, 0x16, 0xa8, 0xfb, 0x00, 0x4c, - 0x35, 0x03, 0xa6, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xab, - 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, 0xad, 0xfb, 0x40, 0x4b, 0x4d, - 0x16, 0xac, 0xfb, 0x00, 0x4c, 0x35, 0x03, 0xaa, 0xfb, 0x40, 0xe8, 0x2d, - 0x06, 0x80, 0x0d, 0x43, 0x58, 0x00, 0x21, 0x06, 0xc0, 0x00, 0x4e, 0x33, - 0x03, 0x80, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xa2, 0xfe, - 0x00, 0xa9, 0x59, 0x4b, 0x4d, 0x6c, 0xa4, 0xfe, 0x00, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x66, 0xd4, 0x06, 0x7c, 0x07, 0x00, 0x4b, 0x56, 0x00, 0x81, - 0x06, 0x00, 0x56, 0x0f, 0x34, 0x8a, 0x08, 0x00, 0x18, 0xb4, 0x09, 0x24, - 0xb4, 0x01, 0xff, 0x0a, 0x5f, 0x12, 0x11, 0x08, 0xa3, 0x0b, 0x01, 0xff, - 0x45, 0x5c, 0x00, 0x57, 0x07, 0x00, 0x4e, 0xea, 0x7c, 0x82, 0x06, 0x40, - 0x45, 0x5c, 0x00, 0x85, 0x06, 0x00, 0x56, 0x6f, 0x35, 0x58, 0x07, 0x40, - 0xa1, 0x06, 0x45, 0xf5, 0x06, 0x6e, 0x07, 0x40, 0x44, 0x5d, 0x00, 0x72, - 0x07, 0x00, 0x4b, 0xcd, 0x09, 0x6f, 0x07, 0x40, 0x4b, 0x4d, 0x16, 0xa3, - 0xfe, 0x00, 0x4c, 0x35, 0x03, 0xa1, 0xfe, 0x40, 0x42, 0xf5, 0x13, 0xaf, - 0x06, 0x80, 0x5f, 0x44, 0x4b, 0x9a, 0x3a, 0x06, 0x80, 0x2a, 0x43, 0x70, - 0x1f, 0xc8, 0x08, 0x00, 0x43, 0x69, 0xec, 0xb3, 0x06, 0xc0, 0x00, 0x80, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x97, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x4d, - 0x6c, 0x99, 0xfb, 0x40, 0x4b, 0x4d, 0x16, 0x98, 0xfb, 0x00, 0x4c, 0x35, - 0x03, 0x96, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xce, 0xfe, - 0x00, 0xa9, 0x17, 0x4b, 0x4d, 0x6c, 0xd0, 0xfe, 0x00, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x49, 0x50, 0x12, 0xfc, 0x06, 0x00, 0x50, 0x5e, 0x12, 0xc3, - 0x08, 0x40, 0x4b, 0x4d, 0x16, 0xcf, 0xfe, 0x00, 0x4c, 0x35, 0x03, 0xcd, - 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x93, 0xfb, 0x00, 0xa9, - 0x26, 0x4b, 0x4d, 0x6c, 0x95, 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x4f, 0x39, 0x6d, 0xb0, 0x08, 0x00, 0x44, 0xf7, 0x07, 0xb0, 0x06, 0x00, - 0xb4, 0x01, 0xff, 0x4f, 0x5f, 0x12, 0xb4, 0x06, 0x00, 0x4d, 0xb7, 0x0e, - 0xb2, 0x06, 0x40, 0x4b, 0x4d, 0x16, 0x94, 0xfb, 0x00, 0x4c, 0x35, 0x03, - 0x92, 0xfb, 0x40, 0x48, 0x0a, 0xc1, 0xcc, 0x06, 0x80, 0x59, 0x42, 0x4e, - 0x00, 0x41, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xd2, - 0xfe, 0x00, 0xa9, 0x3b, 0x4b, 0x4d, 0x6c, 0xd4, 0xfe, 0x00, 0x05, 0x51, - 0x00, 0x01, 0xff, 0x04, 0xb4, 0x0b, 0x19, 0xb4, 0x01, 0xff, 0x0a, 0x5f, - 0x12, 0x06, 0x4d, 0xb7, 0x0e, 0x60, 0x07, 0x40, 0x45, 0xf5, 0x06, 0xa5, - 0x06, 0x00, 0x56, 0x6f, 0x35, 0x61, 0x07, 0x40, 0x45, 0xf5, 0x06, 0xa3, - 0x06, 0x80, 0x06, 0x4b, 0x8e, 0x9d, 0xa2, 0x06, 0x40, 0x55, 0x59, 0x12, - 0xa4, 0x08, 0x40, 0x4b, 0x4d, 0x16, 0xd3, 0xfe, 0x00, 0x4c, 0x35, 0x03, - 0xd1, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xfd, 0xfb, 0x00, - 0xa9, 0x39, 0x4b, 0x4d, 0x6c, 0xff, 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x1c, 0xae, 0x06, 0x15, 0x4a, 0x2b, 0x3e, 0x3d, 0x06, 0x00, 0xb4, - 0x01, 0xff, 0x4f, 0x5f, 0x12, 0x3f, 0x06, 0x00, 0x4d, 0xa4, 0x0e, 0x3e, - 0x06, 0x40, 0x4a, 0xf0, 0x06, 0x77, 0x07, 0x00, 0xb4, 0x01, 0xff, 0x4a, - 0x0f, 0xa9, 0x76, 0x07, 0x00, 0x48, 0xca, 0xc9, 0x75, 0x07, 0x40, 0x4b, - 0x4d, 0x16, 0xfe, 0xfb, 0x00, 0x4c, 0x35, 0x03, 0xfc, 0xfb, 0x40, 0x80, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xe5, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x4d, - 0x6c, 0xe7, 0xfb, 0x40, 0x4b, 0x4d, 0x16, 0xe6, 0xfb, 0x00, 0x4c, 0x35, - 0x03, 0xe4, 0xfb, 0x40, 0xa1, 0x7e, 0x02, 0xa1, 0x10, 0x50, 0x07, 0x84, - 0x40, 0x3a, 0x42, 0x1f, 0x01, 0x8e, 0x06, 0x80, 0x24, 0x43, 0x4d, 0x00, - 0x84, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x73, 0xfb, - 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, 0x75, 0xfb, 0x40, 0x4b, 0x4d, 0x16, - 0x74, 0xfb, 0x00, 0x4c, 0x35, 0x03, 0x72, 0xfb, 0x40, 0x80, 0x01, 0xff, - 0x4a, 0x3d, 0x2c, 0x87, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0x86, 0xfb, 0x40, - 0x43, 0xe5, 0x8a, 0x6e, 0x06, 0x00, 0x43, 0x85, 0xb6, 0xa1, 0x06, 0x00, - 0x43, 0xf4, 0x13, 0x6f, 0x06, 0x40, 0x43, 0x22, 0x00, 0x8d, 0x06, 0x80, - 0x14, 0xec, 0x88, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, - 0x89, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0x88, 0xfb, 0x40, 0x80, 0x01, 0xff, - 0x4a, 0x3d, 0x2c, 0x83, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0x82, 0xfb, 0x40, - 0xe4, 0x36, 0x06, 0x80, 0x76, 0x43, 0x22, 0x00, 0x8c, 0x06, 0x80, 0x60, - 0xec, 0x2f, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xaa, - 0xfe, 0x00, 0x4d, 0x34, 0x03, 0xa9, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x49, 0x50, 0x12, 0x8a, 0x06, 0x80, 0x3a, 0x4f, 0x9c, 0x45, 0x90, - 0x06, 0x00, 0x09, 0xd6, 0x22, 0x26, 0x44, 0xf7, 0x07, 0x89, 0x06, 0x00, - 0xb4, 0x01, 0xff, 0x0a, 0x5f, 0x12, 0x0d, 0x58, 0xa5, 0x2b, 0xc2, 0x0e, - 0xc1, 0x00, 0x4e, 0xc8, 0x73, 0x59, 0x07, 0x40, 0x4f, 0xbd, 0x21, 0x8f, - 0x06, 0x00, 0x45, 0xf5, 0x06, 0xae, 0x08, 0x40, 0x4d, 0x18, 0x34, 0x5a, - 0x07, 0x00, 0xf6, 0xee, 0x06, 0x40, 0x4e, 0xc8, 0x73, 0x8b, 0x06, 0x40, - 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x85, 0xfb, 0x00, 0x4d, 0x34, 0x03, - 0x84, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xbe, 0xfe, 0x00, - 0xa9, 0x0c, 0x4b, 0x4d, 0x6c, 0xc0, 0xfe, 0x00, 0x4e, 0x3e, 0x7d, 0xfb, - 0x06, 0x40, 0x4b, 0x4d, 0x16, 0xbf, 0xfe, 0x00, 0x4c, 0x35, 0x03, 0xbd, - 0xfe, 0x40, 0x42, 0x4e, 0x00, 0x7b, 0x06, 0x80, 0x91, 0x01, 0xe8, 0x28, - 0x06, 0xc0, 0x00, 0x80, 0x24, 0x42, 0x4e, 0x00, 0x80, 0x06, 0xc0, 0x00, - 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x5b, 0xfb, 0x00, 0xa9, 0x06, 0x4b, - 0x4d, 0x6c, 0x5d, 0xfb, 0x40, 0x4b, 0x4d, 0x16, 0x5c, 0xfb, 0x00, 0x4c, - 0x35, 0x03, 0x5a, 0xfb, 0x40, 0x4a, 0x3d, 0x2c, 0x90, 0xfe, 0x00, 0xa9, - 0x52, 0x4b, 0x4d, 0x6c, 0x92, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x5e, 0x50, 0x12, 0x51, 0x07, 0x00, 0x4b, 0x56, 0x00, 0xa1, 0x08, 0x00, - 0x56, 0x0f, 0x34, 0x55, 0x07, 0x00, 0x06, 0x0c, 0x07, 0x20, 0xb4, 0x01, - 0xff, 0x0a, 0x5f, 0x12, 0x06, 0x5b, 0x86, 0x1d, 0x54, 0x07, 0x40, 0x52, - 0x14, 0x51, 0x50, 0x07, 0x00, 0x56, 0x6f, 0x35, 0x52, 0x07, 0xc0, 0x00, - 0x53, 0xbf, 0x25, 0x53, 0x07, 0x40, 0x4a, 0x71, 0xab, 0xb6, 0x08, 0x00, - 0xf6, 0x56, 0x07, 0xc0, 0x00, 0x46, 0xf4, 0x06, 0xa0, 0x08, 0x40, 0x4b, - 0x4d, 0x16, 0x91, 0xfe, 0x00, 0x4c, 0x35, 0x03, 0x8f, 0xfe, 0x40, 0x80, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x53, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x4d, - 0x6c, 0x55, 0xfb, 0x40, 0x4b, 0x4d, 0x16, 0x54, 0xfb, 0x00, 0x4c, 0x35, - 0x03, 0x52, 0xfb, 0x40, 0xe5, 0xd5, 0x06, 0x00, 0x07, 0xba, 0xc3, 0x9c, - 0x03, 0x42, 0x9e, 0x01, 0x39, 0x06, 0x80, 0xcb, 0x02, 0x43, 0x68, 0x00, - 0x27, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x8e, 0xfe, - 0x00, 0x4d, 0x34, 0x03, 0x8d, 0xfe, 0x00, 0x47, 0x6c, 0x00, 0x49, 0x06, - 0x80, 0x9e, 0x02, 0xb7, 0x01, 0xff, 0x44, 0xb7, 0xa2, 0x71, 0x06, 0x80, - 0x84, 0x02, 0x04, 0x52, 0x00, 0x01, 0xff, 0x09, 0x18, 0xb4, 0x8b, 0x01, - 0x49, 0x98, 0x1d, 0x7a, 0x08, 0x00, 0x1d, 0x70, 0x15, 0x75, 0x06, 0x56, - 0x00, 0x45, 0x52, 0x10, 0x52, 0x73, 0x08, 0x00, 0x4b, 0x01, 0x90, 0x22, - 0x06, 0x80, 0x29, 0x53, 0x53, 0x4b, 0x72, 0x08, 0x80, 0x11, 0x0b, 0x2a, - 0x67, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x72, 0x06, 0x00, 0x45, 0xf5, 0x06, - 0x73, 0x06, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x49, 0x98, 0x1d, 0x7c, - 0x08, 0x00, 0x49, 0xe9, 0xb8, 0x7f, 0x08, 0x40, 0x80, 0x01, 0xff, 0x4a, - 0x3d, 0x2c, 0x82, 0xfe, 0x00, 0x4d, 0x34, 0x03, 0x81, 0xfe, 0x40, 0x45, - 0x5c, 0x00, 0x23, 0x06, 0x80, 0x16, 0x45, 0xf5, 0x06, 0x25, 0x06, 0xc0, - 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x88, 0xfe, 0x00, 0x4d, 0x34, - 0x03, 0x87, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x84, 0xfe, - 0x00, 0x4d, 0x34, 0x03, 0x83, 0xfe, 0x40, 0x4a, 0x0f, 0xa9, 0x74, 0x07, - 0x00, 0x48, 0xca, 0xc9, 0x73, 0x07, 0x40, 0x52, 0x52, 0x4f, 0x75, 0x08, - 0x80, 0x57, 0x45, 0x5c, 0x72, 0x70, 0x08, 0x00, 0x45, 0x5f, 0x4f, 0x74, - 0x08, 0x00, 0x05, 0xc3, 0x00, 0x3b, 0xb2, 0x18, 0x4f, 0x52, 0x72, 0x71, - 0x08, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x49, 0x98, 0x1d, 0x7b, - 0x08, 0x00, 0x49, 0xe9, 0xb8, 0x7e, 0x08, 0x40, 0x05, 0xc9, 0x00, 0x11, - 0x09, 0x42, 0xae, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x76, 0x08, 0x00, 0x45, - 0xf5, 0x06, 0x79, 0x08, 0x40, 0x45, 0x56, 0x00, 0x81, 0x08, 0x00, 0x49, - 0x49, 0x4f, 0x77, 0x08, 0x40, 0x45, 0x56, 0x00, 0x82, 0x08, 0x00, 0x49, - 0x49, 0x4f, 0x78, 0x08, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x49, 0x98, - 0x1d, 0x7d, 0x08, 0x00, 0x49, 0xe9, 0xb8, 0x80, 0x08, 0x40, 0x80, 0x01, - 0xff, 0x4a, 0x3d, 0x2c, 0x51, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0x50, 0xfb, - 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xf0, 0xfe, 0x00, 0x4d, 0x34, - 0x03, 0xef, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xca, 0xfe, - 0x00, 0xa9, 0x32, 0x4b, 0x4d, 0x6c, 0xcc, 0xfe, 0x00, 0x06, 0xfe, 0x05, - 0x01, 0xff, 0x0a, 0x5f, 0x12, 0x11, 0x08, 0xa3, 0x0b, 0x01, 0xff, 0x45, - 0x5c, 0x00, 0x5d, 0x07, 0x00, 0x50, 0x95, 0x2b, 0x5f, 0x07, 0x40, 0x45, - 0x5c, 0x00, 0xa0, 0x06, 0x00, 0x45, 0xf5, 0x06, 0xb3, 0x08, 0x00, 0x58, - 0x25, 0x2a, 0x5e, 0x07, 0x40, 0x4b, 0x4d, 0x16, 0xcb, 0xfe, 0x00, 0x4c, - 0x35, 0x03, 0xc9, 0xfe, 0x40, 0x43, 0x85, 0xb6, 0xbb, 0x08, 0x00, 0x44, - 0xc4, 0x44, 0xbd, 0x08, 0x00, 0x43, 0xf4, 0x13, 0xbc, 0x08, 0xc0, 0x00, - 0x56, 0xd3, 0x31, 0xc4, 0x08, 0x40, 0x45, 0x5c, 0x00, 0xf7, 0x08, 0x00, - 0x45, 0xf5, 0x06, 0xf9, 0x08, 0x40, 0x4c, 0x24, 0x2c, 0xd1, 0x08, 0x00, - 0x0a, 0x41, 0xae, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xce, 0x08, 0x00, 0x45, - 0xf5, 0x06, 0xcf, 0x08, 0x00, 0x53, 0x3f, 0x49, 0xd2, 0x08, 0x40, 0x80, - 0x0d, 0x43, 0xaa, 0x0a, 0x4d, 0x06, 0xc0, 0x00, 0x4e, 0x33, 0x03, 0x74, - 0xfe, 0x40, 0x4d, 0x34, 0x03, 0x7a, 0xfe, 0x00, 0x4b, 0x4d, 0x6c, 0x7b, - 0xfe, 0x00, 0x4e, 0x3e, 0x7d, 0xf6, 0x08, 0x40, 0x53, 0xc4, 0x49, 0x9f, - 0x08, 0x00, 0x04, 0x58, 0x00, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x54, 0x06, - 0x00, 0x45, 0xf5, 0x06, 0x55, 0x06, 0x40, 0x44, 0x25, 0x0f, 0x4e, 0x06, - 0x80, 0x12, 0x50, 0xca, 0x62, 0x6d, 0x06, 0x00, 0x4e, 0xfa, 0x78, 0x02, - 0x06, 0x00, 0x48, 0x16, 0x16, 0xd4, 0x06, 0x40, 0x80, 0x0d, 0x43, 0xaa, - 0x0a, 0x4b, 0x06, 0xc0, 0x00, 0x4e, 0x33, 0x03, 0x70, 0xfe, 0x40, 0x4d, - 0x34, 0x03, 0x76, 0xfe, 0x00, 0x4b, 0x4d, 0x6c, 0x77, 0xfe, 0x00, 0x05, - 0x51, 0x00, 0x01, 0xff, 0x49, 0x98, 0x1d, 0xf5, 0x08, 0x00, 0x44, 0xf7, - 0x07, 0xf4, 0x08, 0x00, 0x48, 0xd0, 0x09, 0x5e, 0x06, 0x40, 0x0c, 0x85, - 0x90, 0x11, 0x06, 0x16, 0x05, 0x01, 0xff, 0x44, 0x61, 0x49, 0xdd, 0x06, - 0x00, 0x49, 0x41, 0x61, 0x1d, 0x06, 0x40, 0x49, 0xf9, 0x0a, 0xeb, 0x06, - 0x00, 0x48, 0x52, 0xc5, 0xea, 0x06, 0x40, 0xa1, 0x24, 0x50, 0x0a, 0x61, - 0x6b, 0x06, 0x00, 0x53, 0x52, 0x49, 0xe2, 0x08, 0x00, 0x05, 0x3c, 0x01, - 0x01, 0xff, 0x56, 0x65, 0x31, 0xfb, 0x08, 0x80, 0x06, 0x47, 0x55, 0xcd, - 0x9e, 0x08, 0x40, 0x49, 0xa5, 0x3a, 0xfc, 0x08, 0x40, 0x43, 0xea, 0x04, - 0x4f, 0x06, 0x80, 0x06, 0x4c, 0xcd, 0x93, 0x0d, 0x06, 0x40, 0x80, 0x0d, - 0x43, 0xaa, 0x0a, 0x4c, 0x06, 0xc0, 0x00, 0x4e, 0x33, 0x03, 0x72, 0xfe, - 0x40, 0x4d, 0x34, 0x03, 0x78, 0xfe, 0x00, 0x4b, 0x4d, 0x6c, 0x79, 0xfe, - 0x00, 0x48, 0xa6, 0x3a, 0xfe, 0x08, 0x40, 0x02, 0xe9, 0x04, 0x2c, 0x05, - 0x24, 0x0b, 0x01, 0xff, 0x45, 0x81, 0x5d, 0xe5, 0x08, 0x80, 0x1a, 0x45, - 0x5c, 0x72, 0xe4, 0x08, 0x80, 0x0d, 0x45, 0x5f, 0x4f, 0xe6, 0x08, 0xc0, - 0x00, 0x43, 0xaa, 0x0a, 0xe9, 0x08, 0x40, 0x43, 0xaa, 0x0a, 0xe7, 0x08, - 0x40, 0x43, 0xaa, 0x0a, 0xe8, 0x08, 0x40, 0x53, 0x51, 0x47, 0xfc, 0x0e, - 0x01, 0x42, 0x6c, 0x00, 0x0c, 0x06, 0x40, 0x14, 0xdb, 0x42, 0x45, 0xaf, - 0x37, 0xb0, 0x01, 0xff, 0x58, 0x1d, 0x29, 0x9f, 0x00, 0x00, 0x02, 0xd0, - 0x00, 0x01, 0xff, 0x4f, 0xd4, 0x68, 0x50, 0x22, 0x00, 0x09, 0x93, 0x0c, - 0x01, 0xff, 0x59, 0xe4, 0x22, 0x46, 0x22, 0x00, 0x06, 0x7b, 0x00, 0x01, - 0xff, 0x4b, 0x52, 0x28, 0x70, 0x2a, 0x00, 0x42, 0x1e, 0x00, 0x45, 0x22, - 0xc0, 0x00, 0x50, 0xca, 0x5e, 0x52, 0x22, 0x40, 0x44, 0x79, 0x43, 0xe4, - 0x2b, 0x00, 0x47, 0x94, 0x35, 0x27, 0x00, 0x40, 0x45, 0x2e, 0xe1, 0x7a, - 0x23, 0x80, 0x81, 0x04, 0x4d, 0x82, 0x7f, 0x40, 0x23, 0x00, 0xa3, 0xc6, - 0x03, 0xa4, 0xea, 0x02, 0x50, 0x6a, 0x61, 0x77, 0x23, 0x00, 0x56, 0x49, - 0x33, 0x69, 0x23, 0x00, 0xa9, 0xc8, 0x02, 0x04, 0x76, 0xed, 0xb7, 0x02, - 0x04, 0xc3, 0x00, 0xa6, 0x02, 0x45, 0xe8, 0xac, 0x75, 0x23, 0x80, 0x98, - 0x02, 0x02, 0x7c, 0x00, 0x6c, 0xb2, 0x5e, 0xb3, 0x3b, 0x4f, 0x34, 0x72, - 0x68, 0x23, 0x00, 0x02, 0x50, 0x02, 0x06, 0x45, 0x7b, 0xe9, 0x6c, 0x23, - 0x40, 0x80, 0x06, 0x4a, 0xf8, 0x76, 0x4f, 0x23, 0x40, 0x4b, 0xd7, 0x97, - 0x72, 0x23, 0x00, 0x48, 0x2a, 0xc8, 0x5d, 0x23, 0x00, 0x05, 0xde, 0x95, - 0x01, 0xff, 0x49, 0x2f, 0x23, 0x61, 0x23, 0x00, 0x43, 0x2f, 0xc8, 0x55, - 0x23, 0x00, 0x47, 0x77, 0x7e, 0x51, 0x23, 0x40, 0x51, 0x6f, 0x58, 0x6e, - 0x23, 0x00, 0x48, 0x87, 0x7f, 0x3f, 0x23, 0x00, 0x4a, 0x83, 0xad, 0x37, - 0x23, 0x00, 0xb4, 0x01, 0xff, 0x4c, 0x9d, 0x8a, 0x63, 0x23, 0x00, 0x49, - 0xdb, 0xb7, 0x6d, 0x23, 0x40, 0x42, 0x0b, 0x00, 0x74, 0x23, 0x00, 0x4e, - 0xf4, 0x76, 0x46, 0x23, 0x40, 0x42, 0xe8, 0x01, 0x95, 0x23, 0x80, 0x11, - 0x04, 0x6f, 0x53, 0x01, 0xff, 0x44, 0x2a, 0x0d, 0x5e, 0x23, 0x00, 0x48, - 0x78, 0x58, 0x58, 0x23, 0x40, 0x80, 0x01, 0xff, 0x49, 0xf5, 0x0d, 0x42, + 0x25, 0x01, 0x53, 0x32, 0x00, 0x42, 0x15, 0x02, 0x52, 0x32, 0x40, 0x44, + 0xc9, 0x1d, 0x57, 0x32, 0x00, 0x42, 0x01, 0x26, 0x56, 0x32, 0x40, 0x4d, + 0x41, 0x11, 0x49, 0x32, 0x00, 0xe5, 0x51, 0x32, 0x40, 0x43, 0xd2, 0x05, + 0x55, 0x32, 0x00, 0x43, 0xf6, 0x06, 0x54, 0x32, 0x40, 0x43, 0xc4, 0x09, + 0x6c, 0x24, 0x00, 0xf9, 0x5a, 0x32, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x45, + 0x12, 0x0b, 0xb3, 0x32, 0x00, 0xa6, 0x31, 0x44, 0xcf, 0x2a, 0xb4, 0x32, + 0x00, 0x02, 0x10, 0x00, 0x1d, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, + 0x01, 0x5d, 0x32, 0x00, 0x42, 0x15, 0x02, 0x5c, 0x32, 0x40, 0x44, 0xc9, + 0x1d, 0xb2, 0x32, 0x00, 0x42, 0x01, 0x26, 0xb1, 0x32, 0x40, 0x4d, 0x41, + 0x11, 0x4a, 0x32, 0x00, 0xe5, 0x5b, 0x32, 0x40, 0x43, 0xd2, 0x05, 0x5f, + 0x32, 0x00, 0x43, 0xf6, 0x06, 0x5e, 0x32, 0x40, 0x50, 0xc4, 0x5f, 0x48, + 0x32, 0x40, 0x05, 0xc9, 0x1d, 0x11, 0x03, 0x01, 0x26, 0x01, 0xff, 0x43, + 0xc4, 0x09, 0x6f, 0x24, 0x00, 0x51, 0xc3, 0x5f, 0x4d, 0x32, 0x40, 0x43, + 0xc4, 0x09, 0x70, 0x24, 0x00, 0x51, 0xc3, 0x5f, 0x4e, 0x32, 0x40, 0x03, + 0x08, 0x18, 0x58, 0xaf, 0x01, 0xff, 0x43, 0x7c, 0x11, 0xb5, 0x32, 0x80, + 0x06, 0x46, 0x0b, 0x5d, 0x6d, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0x12, + 0x0b, 0xbd, 0x32, 0x00, 0xa6, 0x31, 0x44, 0xcf, 0x2a, 0xbe, 0x32, 0x00, + 0x02, 0x10, 0x00, 0x1d, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, + 0xb8, 0x32, 0x00, 0x42, 0x15, 0x02, 0xb7, 0x32, 0x40, 0x44, 0xc9, 0x1d, + 0xbc, 0x32, 0x00, 0x42, 0x01, 0x26, 0xbb, 0x32, 0x40, 0x4d, 0x41, 0x11, + 0x4b, 0x32, 0x00, 0xe5, 0xb6, 0x32, 0x40, 0x43, 0xd2, 0x05, 0xba, 0x32, + 0x00, 0x43, 0xf6, 0x06, 0xb9, 0x32, 0x40, 0x43, 0xc4, 0x09, 0x6e, 0x24, + 0x00, 0xf9, 0xbf, 0x32, 0xc0, 0x00, 0x50, 0xc4, 0x5f, 0x4c, 0x32, 0x40, + 0x04, 0xc9, 0x00, 0x06, 0x45, 0xb4, 0x6f, 0x6a, 0x24, 0x40, 0x43, 0xc4, + 0x09, 0x71, 0x24, 0x00, 0x51, 0xc3, 0x5f, 0x4f, 0x32, 0x40, 0x44, 0x92, + 0x1f, 0x96, 0x22, 0x00, 0x69, 0xb7, 0x04, 0x36, 0x2a, 0x40, 0x05, 0xdf, + 0x05, 0x06, 0x48, 0xed, 0x00, 0xc0, 0x29, 0x40, 0x0f, 0xe4, 0x05, 0x6d, + 0x0d, 0x76, 0x08, 0x01, 0xff, 0xe1, 0xd0, 0x24, 0x00, 0xe2, 0xd1, 0x24, + 0x00, 0xe3, 0xd2, 0x24, 0x00, 0xe4, 0xd3, 0x24, 0x00, 0xe5, 0xd4, 0x24, + 0x00, 0xe6, 0xd5, 0x24, 0x00, 0xe7, 0xd6, 0x24, 0x00, 0xe8, 0xd7, 0x24, + 0x00, 0xe9, 0xd8, 0x24, 0x00, 0xea, 0xd9, 0x24, 0x00, 0xeb, 0xda, 0x24, + 0x00, 0xec, 0xdb, 0x24, 0x00, 0xed, 0xdc, 0x24, 0x00, 0xee, 0xdd, 0x24, + 0x00, 0xef, 0xde, 0x24, 0x00, 0xf0, 0xdf, 0x24, 0x00, 0xf1, 0xe0, 0x24, + 0x00, 0xf2, 0xe1, 0x24, 0x00, 0xf3, 0xe2, 0x24, 0x00, 0xf4, 0xe3, 0x24, + 0x00, 0xf5, 0xe4, 0x24, 0x00, 0xf6, 0xe5, 0x24, 0x00, 0xf7, 0xe6, 0x24, + 0x00, 0xf8, 0xe7, 0x24, 0x00, 0xf9, 0xe8, 0x24, 0x00, 0xfa, 0xe9, 0x24, + 0x40, 0xe1, 0xb6, 0x24, 0x00, 0xe2, 0xb7, 0x24, 0x00, 0xe3, 0xb8, 0x24, + 0x00, 0xe4, 0xb9, 0x24, 0x00, 0xe5, 0xba, 0x24, 0x00, 0xe6, 0xbb, 0x24, + 0x00, 0xe7, 0xbc, 0x24, 0x00, 0xe8, 0xbd, 0x24, 0x00, 0xe9, 0xbe, 0x24, + 0x00, 0xea, 0xbf, 0x24, 0x00, 0xeb, 0xc0, 0x24, 0x00, 0xec, 0xc1, 0x24, + 0x00, 0xed, 0xc2, 0x24, 0x00, 0xee, 0xc3, 0x24, 0x00, 0xef, 0xc4, 0x24, + 0x00, 0xf0, 0xc5, 0x24, 0x00, 0xf1, 0xc6, 0x24, 0x00, 0xf2, 0xc7, 0x24, + 0x00, 0xf3, 0xc8, 0x24, 0x00, 0xf4, 0xc9, 0x24, 0x00, 0xf5, 0xca, 0x24, + 0x00, 0xf6, 0xcb, 0x24, 0x00, 0xf7, 0xcc, 0x24, 0x00, 0xf8, 0xcd, 0x24, + 0x00, 0xf9, 0xce, 0x24, 0x00, 0xfa, 0xcf, 0x24, 0x40, 0x08, 0xb0, 0xc3, + 0x11, 0x10, 0x48, 0x53, 0x01, 0xff, 0x46, 0x76, 0xda, 0x7c, 0x32, 0x00, + 0x45, 0xb8, 0xe7, 0x7d, 0x32, 0x40, 0xe1, 0xd0, 0x32, 0x00, 0xe5, 0xd3, + 0x32, 0x00, 0xa8, 0xb3, 0x01, 0xe9, 0xd1, 0x32, 0x00, 0xab, 0x98, 0x01, + 0xad, 0x81, 0x01, 0xae, 0x6b, 0xef, 0xd4, 0x32, 0x00, 0xb2, 0x51, 0xb3, + 0x3b, 0xb4, 0x25, 0xf5, 0xd2, 0x32, 0x00, 0xb7, 0x0f, 0xb9, 0x01, 0xff, + 0xe1, 0xf3, 0x32, 0x00, 0xef, 0xf5, 0x32, 0x00, 0xf5, 0xf4, 0x32, 0x40, + 0xe1, 0xfb, 0x32, 0x00, 0xe5, 0xfd, 0x32, 0x00, 0xe9, 0xfc, 0x32, 0x00, + 0xef, 0xfe, 0x32, 0x40, 0xe1, 0xdf, 0x32, 0x00, 0xe5, 0xe2, 0x32, 0x00, + 0xe9, 0xe0, 0x32, 0x00, 0xef, 0xe3, 0x32, 0x00, 0xf5, 0xe1, 0x32, 0x40, + 0xe1, 0xda, 0x32, 0x00, 0xe5, 0xdd, 0x32, 0x00, 0xe9, 0xdb, 0x32, 0x00, + 0xef, 0xde, 0x32, 0x00, 0xf5, 0xdc, 0x32, 0x40, 0xe1, 0xf6, 0x32, 0x00, + 0xe5, 0xf9, 0x32, 0x00, 0xe9, 0xf7, 0x32, 0x00, 0xef, 0xfa, 0x32, 0x00, + 0xf5, 0xf8, 0x32, 0x40, 0xe1, 0xe4, 0x32, 0x00, 0xe5, 0xe7, 0x32, 0x00, + 0xe9, 0xe5, 0x32, 0x00, 0xef, 0xe8, 0x32, 0x00, 0xf5, 0xe6, 0x32, 0x40, + 0xe1, 0xee, 0x32, 0x00, 0xe5, 0xf1, 0x32, 0x00, 0xe9, 0xef, 0x32, 0x00, + 0xef, 0xf2, 0x32, 0x00, 0xf5, 0xf0, 0x32, 0x40, 0xe1, 0xd5, 0x32, 0x00, + 0xe5, 0xd8, 0x32, 0x00, 0xe9, 0xd6, 0x32, 0x00, 0xef, 0xd9, 0x32, 0x00, + 0xf5, 0xd7, 0x32, 0x40, 0xe1, 0xe9, 0x32, 0x00, 0xe5, 0xec, 0x32, 0x00, + 0xe9, 0xea, 0x32, 0x00, 0xef, 0xed, 0x32, 0x00, 0xf5, 0xeb, 0x32, 0x40, + 0x09, 0x7e, 0xab, 0x13, 0x51, 0xb5, 0x5c, 0xc8, 0xf6, 0x01, 0x1b, 0xa1, + 0x1d, 0x01, 0xff, 0xe3, 0x2b, 0xf1, 0x01, 0xf2, 0x2c, 0xf1, 0x41, 0xa1, + 0xe5, 0x02, 0xa3, 0xc7, 0x02, 0xa5, 0xac, 0x02, 0xa6, 0x89, 0x02, 0xa8, + 0xfa, 0x01, 0x44, 0x75, 0xc1, 0xa0, 0x32, 0x00, 0xab, 0xe5, 0x01, 0xac, + 0xd0, 0x01, 0xad, 0xb3, 0x01, 0xae, 0x9b, 0x01, 0x43, 0x0e, 0x0b, 0x80, + 0x32, 0x00, 0x45, 0x6b, 0xc6, 0x9e, 0x32, 0x00, 0x48, 0xa6, 0x34, 0x44, + 0x32, 0x00, 0xb2, 0x6c, 0xb3, 0x23, 0xb4, 0x0f, 0xb7, 0x01, 0xff, 0x44, + 0x8a, 0x00, 0x8c, 0x32, 0x00, 0x43, 0xb4, 0x2d, 0x8d, 0x32, 0x40, 0x42, + 0x92, 0x01, 0x89, 0x32, 0x00, 0x44, 0x25, 0x01, 0x82, 0x32, 0x00, 0x42, + 0x15, 0x02, 0x81, 0x32, 0x40, 0x45, 0x33, 0xe5, 0x46, 0x32, 0x00, 0xa5, + 0x33, 0x42, 0x01, 0x26, 0x85, 0x32, 0x00, 0x46, 0xa8, 0xde, 0x93, 0x32, + 0x00, 0x46, 0x0e, 0xdf, 0x95, 0x32, 0x00, 0xb4, 0x13, 0xb5, 0x01, 0xff, + 0x46, 0x28, 0xdd, 0x9c, 0x32, 0x00, 0xee, 0x90, 0x32, 0x00, 0x47, 0xb2, + 0xd4, 0xac, 0x32, 0x40, 0x43, 0x35, 0x01, 0x91, 0x32, 0x00, 0x43, 0xa6, + 0xf4, 0xab, 0x32, 0x40, 0x44, 0x6d, 0xef, 0x99, 0x32, 0x00, 0x43, 0xca, + 0x1d, 0x86, 0x32, 0x40, 0xa5, 0x06, 0x44, 0xc9, 0x00, 0xa8, 0x32, 0x40, + 0x46, 0xb2, 0xdd, 0xaa, 0x32, 0x00, 0xb3, 0x01, 0xff, 0x45, 0xc1, 0x5c, + 0xae, 0x32, 0x00, 0xf4, 0xa1, 0x32, 0x40, 0x43, 0x2b, 0x05, 0x94, 0x32, + 0x00, 0xa9, 0x01, 0xff, 0x43, 0xca, 0x00, 0xb0, 0x32, 0x00, 0x42, 0xcd, + 0x05, 0x88, 0x32, 0x40, 0x43, 0x67, 0x00, 0x9a, 0x32, 0x00, 0xa5, 0x06, + 0x43, 0xcd, 0x02, 0x8a, 0x32, 0x40, 0x46, 0xee, 0xda, 0xa9, 0x32, 0x00, + 0x43, 0x12, 0x00, 0x8e, 0x32, 0x40, 0x44, 0x09, 0xe8, 0x98, 0x32, 0x00, + 0x43, 0xc4, 0x00, 0xa7, 0x32, 0x00, 0x42, 0xd1, 0x00, 0xa6, 0x32, 0x40, + 0x4b, 0x83, 0x9d, 0x45, 0x32, 0x00, 0x43, 0x08, 0x8e, 0x47, 0x32, 0x40, + 0x43, 0x2f, 0x08, 0x92, 0x32, 0x00, 0x43, 0x3f, 0x00, 0xa4, 0x32, 0x40, + 0x45, 0x57, 0x21, 0x9b, 0x32, 0x00, 0xa9, 0x06, 0x43, 0xf6, 0x06, 0x83, + 0x32, 0x40, 0x47, 0x69, 0xd3, 0x96, 0x32, 0x00, 0x42, 0x88, 0x00, 0x8b, + 0x32, 0x00, 0x42, 0x32, 0x00, 0x84, 0x32, 0x40, 0x44, 0x53, 0x72, 0x8f, + 0x32, 0x00, 0x44, 0xc9, 0x00, 0x87, 0x32, 0x00, 0x49, 0xa2, 0xbc, 0xad, + 0x32, 0x00, 0x48, 0xa8, 0xcc, 0x9d, 0x32, 0x40, 0x45, 0x74, 0x02, 0xa5, + 0x32, 0x00, 0xaf, 0x01, 0xff, 0x4c, 0x0a, 0x87, 0x97, 0x32, 0x00, 0x42, + 0x1b, 0x1d, 0xa2, 0x32, 0x00, 0x45, 0x76, 0xd5, 0xa3, 0x32, 0x40, 0x45, + 0x06, 0xe5, 0x51, 0xf2, 0x01, 0x48, 0x48, 0xc5, 0x50, 0xf2, 0x01, 0x47, + 0x41, 0xc3, 0xaf, 0x32, 0x00, 0x48, 0xc8, 0xcb, 0x9f, 0x32, 0x40, 0x06, + 0x79, 0xd1, 0x12, 0x5b, 0xfe, 0x1a, 0xb2, 0x27, 0x00, 0x58, 0x4e, 0x2a, + 0x89, 0x23, 0x00, 0x4b, 0x4d, 0xa4, 0x6f, 0xf1, 0x41, 0xa3, 0xaa, 0x01, + 0x45, 0x71, 0xa5, 0x6d, 0x32, 0x80, 0x9c, 0x01, 0x45, 0x1e, 0xcc, 0x67, + 0x32, 0x80, 0x89, 0x01, 0xab, 0x6d, 0x45, 0xa8, 0xe8, 0x64, 0x32, 0x80, + 0x60, 0x45, 0x1b, 0xe9, 0x61, 0x32, 0x80, 0x53, 0xb0, 0x37, 0x45, 0x65, + 0xea, 0x63, 0x32, 0x80, 0x2a, 0x44, 0x65, 0xbf, 0x66, 0x32, 0x80, 0x1d, + 0xb4, 0x01, 0xff, 0x46, 0x57, 0xd6, 0x6b, 0x32, 0x80, 0x0d, 0x45, 0xe5, + 0xcd, 0x62, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, 0x70, 0x32, 0x40, 0x42, + 0x19, 0x00, 0x79, 0x32, 0x40, 0x42, 0x19, 0x00, 0x74, 0x32, 0x40, 0x42, + 0x19, 0x00, 0x71, 0x32, 0x40, 0x46, 0xd2, 0xc2, 0x6c, 0x32, 0x80, 0x0d, + 0x44, 0xe3, 0x84, 0x65, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, 0x73, 0x32, + 0x40, 0x42, 0x19, 0x00, 0x7a, 0x32, 0x40, 0x42, 0x19, 0x00, 0x6f, 0x32, + 0x40, 0x42, 0x19, 0x00, 0x72, 0x32, 0x40, 0x46, 0xca, 0xc2, 0x6a, 0x32, + 0x80, 0x0d, 0x45, 0xdd, 0xa2, 0x60, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, + 0x6e, 0x32, 0x40, 0x42, 0x19, 0x00, 0x78, 0x32, 0x40, 0x80, 0x01, 0xff, + 0xe1, 0x75, 0x32, 0x00, 0xf5, 0x7e, 0x32, 0x40, 0x42, 0x19, 0x00, 0x7b, + 0x32, 0x40, 0x46, 0xea, 0xcf, 0x69, 0x32, 0x80, 0x0d, 0x44, 0xeb, 0xcf, + 0x68, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, 0x76, 0x32, 0x40, 0x42, 0x19, + 0x00, 0x77, 0x32, 0x40, 0x43, 0xf9, 0x03, 0x9d, 0x22, 0x00, 0xa9, 0x0f, + 0xaf, 0x01, 0xff, 0x61, 0x2c, 0x0e, 0x0f, 0xf1, 0x01, 0x4a, 0xfb, 0x36, + 0x99, 0x22, 0x40, 0x04, 0xf1, 0x06, 0x11, 0x08, 0xc4, 0x32, 0x01, 0xff, + 0x43, 0x5b, 0x03, 0x38, 0x2a, 0x00, 0x44, 0x49, 0x0e, 0x98, 0x22, 0x40, + 0x45, 0x12, 0x0b, 0x67, 0x24, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x68, + 0x24, 0x00, 0x43, 0x0e, 0x0b, 0x60, 0x24, 0x00, 0xb3, 0x14, 0xb4, 0x06, + 0x44, 0x43, 0x1e, 0xea, 0x24, 0x40, 0x44, 0x25, 0x01, 0x62, 0x24, 0x00, + 0x42, 0x15, 0x02, 0x61, 0x24, 0x40, 0x44, 0xc9, 0x1d, 0x66, 0x24, 0x00, + 0x42, 0x01, 0x26, 0x65, 0x24, 0x40, 0x43, 0xd2, 0x05, 0x64, 0x24, 0x00, + 0x43, 0xf6, 0x06, 0x63, 0x24, 0x40, 0x58, 0x35, 0x0e, 0x6e, 0xf1, 0x01, + 0xe3, 0x6d, 0xf1, 0x01, 0xe4, 0x2d, 0xf1, 0x01, 0x04, 0x96, 0x10, 0x01, + 0xff, 0x80, 0x06, 0x49, 0x8f, 0xba, 0xd2, 0x26, 0x40, 0x46, 0xcc, 0xdb, + 0x02, 0xf9, 0x81, 0x06, 0x46, 0x3e, 0xdf, 0x40, 0xf5, 0x41, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x49, 0xd1, 0x46, 0x00, 0xf9, 0x01, 0x48, 0x1f, 0x0a, + 0x01, 0xf9, 0x41, 0x45, 0x89, 0xe9, 0xbf, 0x2b, 0x00, 0x45, 0xb3, 0x21, + 0xbf, 0x29, 0x40, 0x0c, 0x35, 0x0b, 0x06, 0x50, 0x66, 0x67, 0x9b, 0x22, + 0x40, 0x46, 0xcd, 0x00, 0x0e, 0xf1, 0x01, 0x56, 0xb9, 0x32, 0xbc, 0x29, + 0x40, 0x7e, 0x00, 0x00, 0xba, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, + 0x61, 0x66, 0x0d, 0xd5, 0x25, 0x00, 0x4e, 0x0b, 0x00, 0xb5, 0x29, 0x00, + 0xac, 0x30, 0x50, 0xb6, 0x66, 0xd1, 0x25, 0x00, 0xb3, 0x1c, 0x63, 0xaa, + 0x0b, 0xc3, 0x29, 0x00, 0x06, 0x6d, 0x02, 0x06, 0x4d, 0x2f, 0x8a, 0xcd, + 0x25, 0x40, 0x4a, 0xec, 0x25, 0xd3, 0x25, 0x00, 0x54, 0x64, 0x45, 0xd4, + 0x25, 0x40, 0x58, 0xee, 0x29, 0xc2, 0x29, 0x00, 0x4d, 0x93, 0x89, 0xbb, + 0x29, 0x40, 0x4e, 0x79, 0x6f, 0xd0, 0x25, 0x00, 0x4f, 0xa3, 0x71, 0xd2, + 0x25, 0x40, 0xa1, 0xfa, 0x08, 0xa5, 0x92, 0x02, 0xa9, 0xda, 0x01, 0xaf, + 0x0c, 0x4c, 0xb3, 0x94, 0x84, 0xf3, 0x01, 0x44, 0xa2, 0xda, 0xea, 0x26, + 0x40, 0x4a, 0xc1, 0xa8, 0x6b, 0xf3, 0x01, 0x47, 0xe3, 0xd4, 0x62, 0xf9, + 0x01, 0x08, 0x28, 0xca, 0x01, 0xff, 0x07, 0xec, 0x05, 0x34, 0x07, 0xff, + 0x39, 0x01, 0xff, 0x44, 0xf5, 0x06, 0xc8, 0x0f, 0x01, 0x43, 0x0e, 0x0b, + 0xc5, 0x0f, 0x81, 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xc9, 0x0f, + 0x01, 0x44, 0x25, 0x01, 0xc7, 0x0f, 0x01, 0xb7, 0x01, 0xff, 0x44, 0xcb, + 0x1d, 0xca, 0x0f, 0x01, 0xef, 0xc6, 0x0f, 0x41, 0x48, 0x70, 0x11, 0xcb, + 0x0f, 0x41, 0xa1, 0x75, 0x44, 0x41, 0xef, 0xb2, 0x0f, 0x01, 0x4a, 0xf3, + 0xa8, 0xb7, 0x0f, 0x01, 0x46, 0x23, 0x4a, 0xb4, 0x0f, 0x01, 0x45, 0xdd, + 0xaa, 0xb3, 0x0f, 0x01, 0x42, 0xb0, 0x01, 0xb5, 0x0f, 0x81, 0x50, 0x44, + 0xcd, 0xf0, 0xbb, 0x0f, 0x01, 0x46, 0x94, 0xdd, 0xbc, 0x0f, 0x01, 0x43, + 0xb4, 0x05, 0xbd, 0x0f, 0x01, 0x43, 0xdc, 0x22, 0xbe, 0x0f, 0x01, 0x42, + 0x6f, 0x02, 0xc1, 0x0f, 0x01, 0x44, 0x76, 0x66, 0xc2, 0x0f, 0x01, 0xb3, + 0x18, 0x43, 0xa4, 0xc4, 0xc4, 0x0f, 0x01, 0x43, 0x8a, 0x8a, 0xb6, 0x0f, + 0x01, 0x44, 0xa1, 0x52, 0xba, 0x0f, 0x01, 0x45, 0x9b, 0x52, 0xb8, 0x0f, + 0x41, 0x45, 0x48, 0xe4, 0xbf, 0x0f, 0x01, 0x43, 0x7a, 0x16, 0xc3, 0x0f, + 0x01, 0x4a, 0xad, 0xad, 0xb1, 0x0f, 0x41, 0x42, 0x53, 0x00, 0xb9, 0x0f, + 0x41, 0x44, 0x18, 0x3d, 0xb0, 0x0f, 0x01, 0x43, 0x7e, 0x1a, 0xc0, 0x0f, + 0x41, 0x44, 0xd4, 0x8a, 0x27, 0x26, 0x00, 0x44, 0x90, 0x01, 0x14, 0xf4, + 0x01, 0x42, 0xe2, 0x1a, 0xd2, 0xf9, 0x81, 0x1c, 0x0b, 0x01, 0xa0, 0x0c, + 0x45, 0xfc, 0xe9, 0x3f, 0xf4, 0x01, 0x43, 0xb1, 0x0e, 0xb7, 0x26, 0x40, + 0x4d, 0xd0, 0x88, 0xf2, 0x6f, 0x01, 0x4e, 0x41, 0x7d, 0xf3, 0x6f, 0x41, + 0x4c, 0x53, 0x94, 0xb8, 0xf6, 0x41, 0x02, 0x36, 0x01, 0xcd, 0x06, 0xa5, + 0xbe, 0x06, 0x4b, 0x8d, 0xa1, 0xc1, 0xf3, 0x01, 0xb2, 0x06, 0x45, 0x19, + 0xeb, 0x30, 0xf3, 0x41, 0x05, 0x84, 0xe9, 0x1a, 0xb2, 0x01, 0xff, 0x43, + 0x14, 0x9e, 0x52, 0xf3, 0x01, 0x02, 0x09, 0x00, 0x01, 0xff, 0x47, 0x8e, + 0xcf, 0x38, 0xf3, 0x01, 0x46, 0x16, 0x08, 0xbe, 0xce, 0x41, 0x07, 0xec, + 0x05, 0x89, 0x03, 0x0d, 0x76, 0x08, 0x01, 0xff, 0xe1, 0x70, 0xab, 0x00, + 0xa4, 0xdf, 0x02, 0xe5, 0x71, 0xab, 0x00, 0xa7, 0xc0, 0x02, 0xa8, 0x9f, + 0x02, 0xe9, 0x72, 0xab, 0x00, 0x42, 0x1b, 0x02, 0x77, 0xab, 0x00, 0xac, + 0xfa, 0x01, 0xad, 0xdf, 0x01, 0xae, 0xbf, 0x01, 0xef, 0x73, 0xab, 0x00, + 0x02, 0x7c, 0x00, 0x9e, 0x01, 0xf3, 0x9d, 0xab, 0x80, 0x80, 0x01, 0xb4, + 0x3d, 0xf5, 0x74, 0xab, 0x00, 0xf6, 0x75, 0xab, 0x00, 0xb7, 0x1b, 0xb9, + 0x01, 0xff, 0xe1, 0xbf, 0xab, 0x00, 0xe5, 0xf8, 0x13, 0x00, 0xe9, 0xf9, + 0x13, 0x00, 0xef, 0xfa, 0x13, 0x00, 0xf5, 0xfb, 0x13, 0x00, 0xf6, 0xfc, + 0x13, 0x40, 0xe1, 0xb9, 0xab, 0x00, 0xe5, 0xba, 0xab, 0x00, 0xe9, 0xbb, + 0xab, 0x00, 0xef, 0xbc, 0xab, 0x00, 0xf5, 0xbd, 0xab, 0x00, 0xf6, 0xbe, + 0xab, 0x40, 0xe1, 0xa4, 0xab, 0x00, 0xe5, 0xa6, 0xab, 0x00, 0xe9, 0xa8, + 0xab, 0x00, 0xac, 0x1b, 0xb3, 0x01, 0xff, 0xe1, 0xb3, 0xab, 0x00, 0xe5, + 0xb4, 0xab, 0x00, 0xe9, 0xb5, 0xab, 0x00, 0xef, 0xb6, 0xab, 0x00, 0xf5, + 0xb7, 0xab, 0x00, 0xf6, 0xb8, 0xab, 0x40, 0xe1, 0xad, 0xab, 0x00, 0xe5, + 0xae, 0xab, 0x00, 0xe9, 0xaf, 0xab, 0x00, 0xef, 0xb0, 0xab, 0x00, 0xf5, + 0xb1, 0xab, 0x00, 0xf6, 0xb2, 0xab, 0x40, 0xe1, 0x9c, 0xab, 0x00, 0xe5, + 0x9e, 0xab, 0x00, 0xe9, 0x9f, 0xab, 0x00, 0xef, 0xa0, 0xab, 0x00, 0xf5, + 0xa1, 0xab, 0x00, 0xf6, 0xa2, 0xab, 0x40, 0xe1, 0x96, 0xab, 0x00, 0xe5, + 0x97, 0xab, 0x00, 0xe9, 0x98, 0xab, 0x00, 0xef, 0x99, 0xab, 0x00, 0xf5, + 0x9a, 0xab, 0x00, 0xf6, 0x9b, 0xab, 0x40, 0xe1, 0x8e, 0xab, 0x80, 0x14, + 0xe5, 0x91, 0xab, 0x00, 0xe9, 0x92, 0xab, 0x00, 0xef, 0x93, 0xab, 0x00, + 0xf5, 0x94, 0xab, 0x00, 0xf6, 0x95, 0xab, 0x40, 0xe8, 0x90, 0xab, 0x40, + 0xe1, 0x89, 0xab, 0x00, 0xe5, 0x8a, 0xab, 0x00, 0xe9, 0x8b, 0xab, 0x00, + 0xef, 0x8c, 0xab, 0x00, 0xf5, 0x8d, 0xab, 0x00, 0xf6, 0xfd, 0x13, 0x40, + 0xe1, 0x83, 0xab, 0x00, 0xe5, 0x84, 0xab, 0x00, 0xe9, 0x85, 0xab, 0x00, + 0xef, 0x86, 0xab, 0x00, 0xf5, 0x87, 0xab, 0x00, 0xf6, 0x88, 0xab, 0x40, + 0xe1, 0x7d, 0xab, 0x00, 0xe5, 0x7e, 0xab, 0x00, 0xe9, 0x7f, 0xab, 0x00, + 0x42, 0x2a, 0x05, 0x8f, 0xab, 0x00, 0xef, 0x80, 0xab, 0x00, 0xf5, 0x81, + 0xab, 0x00, 0xf6, 0x82, 0xab, 0x40, 0xe1, 0x76, 0xab, 0x00, 0xe5, 0x78, + 0xab, 0x00, 0xe9, 0x79, 0xab, 0x00, 0xef, 0x7a, 0xab, 0x00, 0xf5, 0x7b, + 0xab, 0x00, 0xf6, 0x7c, 0xab, 0x40, 0xe1, 0xa3, 0xab, 0x00, 0xe5, 0xa5, + 0xab, 0x00, 0xe9, 0xa7, 0xab, 0x00, 0x42, 0x74, 0x00, 0xac, 0xab, 0x00, + 0xef, 0xa9, 0xab, 0x00, 0xf5, 0xaa, 0xab, 0x00, 0xf6, 0xab, 0xab, 0x40, + 0xe1, 0xa0, 0x13, 0x00, 0xa4, 0xdf, 0x02, 0xe5, 0xa1, 0x13, 0x00, 0xa7, + 0xc0, 0x02, 0xa8, 0x9f, 0x02, 0xe9, 0xa2, 0x13, 0x00, 0x42, 0x1b, 0x02, + 0xa7, 0x13, 0x00, 0xac, 0xfa, 0x01, 0xad, 0xdf, 0x01, 0xae, 0xbf, 0x01, + 0xef, 0xa3, 0x13, 0x00, 0x02, 0x7c, 0x00, 0x9e, 0x01, 0xf3, 0xcd, 0x13, + 0x80, 0x80, 0x01, 0xb4, 0x3d, 0xf5, 0xa4, 0x13, 0x00, 0xf6, 0xa5, 0x13, + 0x00, 0xb7, 0x1b, 0xb9, 0x01, 0xff, 0xe1, 0xef, 0x13, 0x00, 0xe5, 0xf0, + 0x13, 0x00, 0xe9, 0xf1, 0x13, 0x00, 0xef, 0xf2, 0x13, 0x00, 0xf5, 0xf3, + 0x13, 0x00, 0xf6, 0xf4, 0x13, 0x40, 0xe1, 0xe9, 0x13, 0x00, 0xe5, 0xea, + 0x13, 0x00, 0xe9, 0xeb, 0x13, 0x00, 0xef, 0xec, 0x13, 0x00, 0xf5, 0xed, + 0x13, 0x00, 0xf6, 0xee, 0x13, 0x40, 0xe1, 0xd4, 0x13, 0x00, 0xe5, 0xd6, + 0x13, 0x00, 0xe9, 0xd8, 0x13, 0x00, 0xac, 0x1b, 0xb3, 0x01, 0xff, 0xe1, + 0xe3, 0x13, 0x00, 0xe5, 0xe4, 0x13, 0x00, 0xe9, 0xe5, 0x13, 0x00, 0xef, + 0xe6, 0x13, 0x00, 0xf5, 0xe7, 0x13, 0x00, 0xf6, 0xe8, 0x13, 0x40, 0xe1, + 0xdd, 0x13, 0x00, 0xe5, 0xde, 0x13, 0x00, 0xe9, 0xdf, 0x13, 0x00, 0xef, + 0xe0, 0x13, 0x00, 0xf5, 0xe1, 0x13, 0x00, 0xf6, 0xe2, 0x13, 0x40, 0xe1, + 0xcc, 0x13, 0x00, 0xe5, 0xce, 0x13, 0x00, 0xe9, 0xcf, 0x13, 0x00, 0xef, + 0xd0, 0x13, 0x00, 0xf5, 0xd1, 0x13, 0x00, 0xf6, 0xd2, 0x13, 0x40, 0xe1, + 0xc6, 0x13, 0x00, 0xe5, 0xc7, 0x13, 0x00, 0xe9, 0xc8, 0x13, 0x00, 0xef, + 0xc9, 0x13, 0x00, 0xf5, 0xca, 0x13, 0x00, 0xf6, 0xcb, 0x13, 0x40, 0xe1, + 0xbe, 0x13, 0x80, 0x14, 0xe5, 0xc1, 0x13, 0x00, 0xe9, 0xc2, 0x13, 0x00, + 0xef, 0xc3, 0x13, 0x00, 0xf5, 0xc4, 0x13, 0x00, 0xf6, 0xc5, 0x13, 0x40, + 0xe8, 0xc0, 0x13, 0x40, 0xe1, 0xb9, 0x13, 0x00, 0xe5, 0xba, 0x13, 0x00, + 0xe9, 0xbb, 0x13, 0x00, 0xef, 0xbc, 0x13, 0x00, 0xf5, 0xbd, 0x13, 0x00, + 0xf6, 0xf5, 0x13, 0x40, 0xe1, 0xb3, 0x13, 0x00, 0xe5, 0xb4, 0x13, 0x00, + 0xe9, 0xb5, 0x13, 0x00, 0xef, 0xb6, 0x13, 0x00, 0xf5, 0xb7, 0x13, 0x00, + 0xf6, 0xb8, 0x13, 0x40, 0xe1, 0xad, 0x13, 0x00, 0xe5, 0xae, 0x13, 0x00, + 0xe9, 0xaf, 0x13, 0x00, 0x42, 0x2a, 0x05, 0xbf, 0x13, 0x00, 0xef, 0xb0, + 0x13, 0x00, 0xf5, 0xb1, 0x13, 0x00, 0xf6, 0xb2, 0x13, 0x40, 0xe1, 0xa6, + 0x13, 0x00, 0xe5, 0xa8, 0x13, 0x00, 0xe9, 0xa9, 0x13, 0x00, 0xef, 0xaa, + 0x13, 0x00, 0xf5, 0xab, 0x13, 0x00, 0xf6, 0xac, 0x13, 0x40, 0xe1, 0xd3, + 0x13, 0x00, 0xe5, 0xd5, 0x13, 0x00, 0xe9, 0xd7, 0x13, 0x00, 0x42, 0x74, + 0x00, 0xdc, 0x13, 0x00, 0xef, 0xd9, 0x13, 0x00, 0xf5, 0xda, 0x13, 0x00, + 0xf6, 0xdb, 0x13, 0x40, 0x4e, 0xc7, 0x7b, 0xe3, 0xf4, 0x01, 0x48, 0xb8, + 0xca, 0xc0, 0xf9, 0x41, 0x45, 0xb8, 0x00, 0x13, 0x27, 0x00, 0x48, 0x72, + 0x14, 0x7e, 0xf6, 0xc1, 0x00, 0x45, 0x56, 0x0b, 0x95, 0xfb, 0x41, 0xa9, + 0x8d, 0x08, 0x04, 0xe1, 0xf0, 0xb5, 0x04, 0x02, 0x49, 0x04, 0x3b, 0xb2, + 0x01, 0xff, 0x07, 0x84, 0xce, 0x18, 0x07, 0x94, 0x0d, 0x01, 0xff, 0x4f, + 0x5d, 0x6c, 0xc9, 0xf4, 0x01, 0x4d, 0xba, 0x89, 0xc8, 0xf4, 0xc1, 0x00, + 0x4d, 0x2a, 0x7f, 0xb9, 0xf4, 0x41, 0x49, 0xe4, 0x3b, 0x09, 0x00, 0x80, + 0x06, 0x42, 0xf4, 0x02, 0x40, 0x20, 0x40, 0x80, 0x01, 0xff, 0x43, 0x9c, + 0x12, 0x88, 0x00, 0x00, 0x52, 0xa7, 0x56, 0x89, 0x00, 0x40, 0x0f, 0x3d, + 0x33, 0xc7, 0x03, 0x06, 0xef, 0x06, 0x80, 0x03, 0x07, 0xec, 0x05, 0x52, + 0x0c, 0x6d, 0x16, 0x34, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x21, 0x42, + 0x12, 0x0b, 0x2c, 0xaa, 0x00, 0xe9, 0x2a, 0xaa, 0x80, 0x12, 0xef, 0x2f, + 0xaa, 0x80, 0x09, 0xf5, 0x2d, 0xaa, 0xc0, 0x00, 0xe5, 0x32, 0xaa, 0x40, + 0xe5, 0x2e, 0xaa, 0x40, 0xe9, 0x2b, 0xaa, 0x40, 0xe1, 0x29, 0xaa, 0x00, + 0xe9, 0x30, 0xaa, 0x00, 0xf5, 0x31, 0xaa, 0x40, 0xa4, 0x0c, 0x46, 0x56, + 0x85, 0x5c, 0xaa, 0x00, 0x4c, 0x0f, 0x96, 0x5f, 0xaa, 0x40, 0x44, 0x73, + 0x20, 0x5d, 0xaa, 0x00, 0x4b, 0x09, 0xa1, 0x5e, 0xaa, 0x40, 0xe1, 0x00, + 0xaa, 0x80, 0xa0, 0x02, 0xa2, 0x8d, 0x02, 0x02, 0x6d, 0x14, 0xfe, 0x01, + 0xa4, 0xeb, 0x01, 0xe5, 0x03, 0xaa, 0x00, 0x06, 0xf5, 0x2c, 0xb1, 0x01, + 0xa7, 0xa4, 0x01, 0x42, 0x22, 0x00, 0x28, 0xaa, 0x00, 0xe9, 0x01, 0xaa, + 0x00, 0xaa, 0x8d, 0x01, 0xab, 0x80, 0x01, 0x42, 0x74, 0x00, 0x24, 0xaa, + 0x00, 0xad, 0x6e, 0xae, 0x44, 0xef, 0x05, 0xaa, 0x00, 0xb0, 0x2e, 0x42, + 0x71, 0x00, 0x23, 0xaa, 0x00, 0xb3, 0x1c, 0xb4, 0x10, 0xf5, 0x02, 0xaa, + 0x00, 0x42, 0xf5, 0x0a, 0x25, 0xaa, 0x00, 0x42, 0xbc, 0x22, 0x22, 0xaa, + 0x40, 0xe1, 0x13, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x14, 0xaa, 0x40, 0xe1, + 0x27, 0xaa, 0x00, 0x42, 0x40, 0x06, 0x26, 0xaa, 0x40, 0xe1, 0x1a, 0xaa, + 0x00, 0x42, 0x22, 0x00, 0x1c, 0xaa, 0x00, 0x42, 0xbb, 0x09, 0x1b, 0xaa, + 0x40, 0xe1, 0x18, 0xaa, 0x00, 0xa7, 0x18, 0xa8, 0x06, 0x42, 0xd6, 0x13, + 0x17, 0xaa, 0x40, 0xe1, 0x11, 0xaa, 0x00, 0x42, 0x56, 0x19, 0x12, 0xaa, + 0x00, 0x42, 0xd6, 0x13, 0x10, 0xaa, 0x40, 0xe1, 0x0b, 0xaa, 0x00, 0x42, + 0xd6, 0x13, 0x0a, 0xaa, 0x40, 0xe1, 0x20, 0xaa, 0x00, 0x42, 0xd6, 0x13, + 0x1f, 0xaa, 0x40, 0xe1, 0x06, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x07, 0xaa, + 0x40, 0xe1, 0x0e, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x0f, 0xaa, 0x40, 0xe1, + 0x08, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x09, 0xaa, 0x40, 0x42, 0x6d, 0x14, + 0x44, 0xaa, 0x00, 0xe7, 0x41, 0xaa, 0x00, 0xeb, 0x40, 0xaa, 0x00, 0xec, + 0x4a, 0xaa, 0x00, 0xee, 0x46, 0xaa, 0x80, 0x16, 0xf0, 0x47, 0xaa, 0x00, + 0xf2, 0x49, 0xaa, 0x00, 0x42, 0xee, 0x00, 0x4b, 0xaa, 0x00, 0xf4, 0x45, + 0xaa, 0x00, 0xf9, 0x48, 0xaa, 0x40, 0xe7, 0x42, 0xaa, 0x40, 0xe1, 0x15, + 0xaa, 0x00, 0x42, 0xf0, 0x10, 0x19, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x16, + 0xaa, 0x40, 0xe1, 0x0c, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x0d, 0xaa, 0x40, + 0xe1, 0x1d, 0xaa, 0x00, 0x42, 0x16, 0x00, 0x21, 0xaa, 0x00, 0x42, 0x22, + 0x00, 0x1e, 0xaa, 0x40, 0xe9, 0x04, 0xaa, 0x40, 0x45, 0x12, 0x0b, 0x58, + 0xaa, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x59, 0xaa, 0x00, 0x43, 0x0e, + 0x0b, 0x51, 0xaa, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x50, + 0xaa, 0x40, 0x44, 0x25, 0x01, 0x53, 0xaa, 0x00, 0x42, 0x15, 0x02, 0x52, + 0xaa, 0x40, 0x44, 0xc9, 0x1d, 0x57, 0xaa, 0x00, 0x42, 0x01, 0x26, 0x56, + 0xaa, 0x40, 0x43, 0xd2, 0x05, 0x55, 0xaa, 0x00, 0x43, 0xf6, 0x06, 0x54, + 0xaa, 0x40, 0x06, 0xf5, 0x2c, 0x18, 0x42, 0x74, 0x00, 0x35, 0xaa, 0x00, + 0x42, 0x71, 0x00, 0x34, 0xaa, 0x00, 0x42, 0xa9, 0x01, 0x36, 0xaa, 0x00, + 0x42, 0xbc, 0x22, 0x33, 0xaa, 0x40, 0xe8, 0x4d, 0xaa, 0x00, 0xed, 0x4c, + 0xaa, 0x00, 0x42, 0x1d, 0x01, 0x43, 0xaa, 0x40, 0x47, 0x33, 0xcf, 0x32, + 0x11, 0x01, 0xa4, 0xf8, 0x02, 0x07, 0xec, 0x05, 0x74, 0x47, 0x0e, 0xd3, + 0x34, 0x11, 0x01, 0x46, 0xd2, 0xcb, 0x31, 0x11, 0x01, 0x4d, 0xa6, 0x34, + 0x43, 0x11, 0x01, 0xb3, 0x43, 0xb6, 0x01, 0xff, 0x45, 0xe4, 0x23, 0x33, + 0x11, 0x01, 0x0a, 0x41, 0x77, 0x01, 0xff, 0xe1, 0x27, 0x11, 0x81, 0x24, + 0xe5, 0x2c, 0x11, 0x81, 0x1b, 0xe9, 0x28, 0x11, 0x81, 0x12, 0xef, 0x2e, + 0x11, 0x81, 0x09, 0xf5, 0x2a, 0x11, 0xc1, 0x00, 0xf5, 0x2b, 0x11, 0x41, + 0xe9, 0x30, 0x11, 0x41, 0xe9, 0x29, 0x11, 0x41, 0xe9, 0x46, 0x11, 0x41, + 0xe1, 0x45, 0x11, 0x01, 0xe9, 0x2d, 0x11, 0x01, 0xf5, 0x2f, 0x11, 0x41, + 0x4b, 0xf9, 0x26, 0x40, 0x11, 0x01, 0x04, 0x5b, 0x03, 0x01, 0xff, 0x48, + 0x3c, 0x16, 0x01, 0x11, 0x01, 0x4b, 0xd7, 0x23, 0x00, 0x11, 0x01, 0x47, + 0xea, 0x4b, 0x02, 0x11, 0x41, 0x42, 0x80, 0x12, 0x03, 0x11, 0x01, 0xa2, + 0xeb, 0x01, 0xa3, 0xdc, 0x01, 0xa4, 0xbf, 0x01, 0xe5, 0x06, 0x11, 0x01, + 0xa7, 0xac, 0x01, 0x43, 0x3b, 0x41, 0x26, 0x11, 0x01, 0xe9, 0x04, 0x11, + 0x01, 0xaa, 0x93, 0x01, 0xab, 0x84, 0x01, 0xac, 0x76, 0x43, 0x2f, 0x58, + 0x1f, 0x11, 0x01, 0xae, 0x56, 0xb0, 0x48, 0x43, 0x8f, 0x95, 0x22, 0x11, + 0x01, 0x43, 0xce, 0xdf, 0x25, 0x11, 0x01, 0xb4, 0x1f, 0xf5, 0x05, 0x11, + 0x01, 0x43, 0x0e, 0xec, 0x47, 0x11, 0x01, 0x43, 0x11, 0x8c, 0x24, 0x11, + 0x01, 0xb9, 0x01, 0xff, 0x42, 0x80, 0x12, 0x21, 0x11, 0x01, 0x43, 0xb1, + 0xb9, 0x20, 0x11, 0x41, 0x42, 0x80, 0x12, 0x16, 0x11, 0x01, 0x43, 0x3b, + 0x41, 0x17, 0x11, 0x01, 0xb4, 0x01, 0xff, 0x42, 0x80, 0x12, 0x11, 0x11, + 0x01, 0x43, 0x3b, 0x41, 0x12, 0x11, 0x41, 0x42, 0x80, 0x12, 0x1b, 0x11, + 0x01, 0x43, 0x3b, 0x41, 0x1c, 0x11, 0x41, 0x42, 0x80, 0x12, 0x1a, 0x11, + 0x01, 0x43, 0x99, 0x57, 0x0b, 0x11, 0x01, 0x43, 0x72, 0x48, 0x15, 0x11, + 0x01, 0x43, 0xb1, 0xb9, 0x10, 0x11, 0x41, 0x42, 0x80, 0x12, 0x23, 0x11, + 0x01, 0x43, 0x3b, 0x41, 0x44, 0x11, 0x41, 0x42, 0x80, 0x12, 0x07, 0x11, + 0x01, 0x43, 0x3b, 0x41, 0x08, 0x11, 0x41, 0x42, 0x80, 0x12, 0x0e, 0x11, + 0x01, 0x43, 0x3b, 0x41, 0x0f, 0x11, 0x41, 0x42, 0x80, 0x12, 0x09, 0x11, + 0x01, 0x43, 0x3b, 0x41, 0x0a, 0x11, 0x41, 0x42, 0x80, 0x12, 0x18, 0x11, + 0x01, 0xa4, 0x06, 0x43, 0x3b, 0x41, 0x19, 0x11, 0x41, 0x42, 0x80, 0x12, + 0x13, 0x11, 0x01, 0x43, 0x3b, 0x41, 0x14, 0x11, 0x41, 0x42, 0x80, 0x12, + 0x0c, 0x11, 0x01, 0x43, 0x3b, 0x41, 0x0d, 0x11, 0x41, 0x42, 0x80, 0x12, + 0x1d, 0x11, 0x01, 0x43, 0x3b, 0x41, 0x1e, 0x11, 0x41, 0x44, 0x73, 0x20, + 0x41, 0x11, 0x01, 0x05, 0xf0, 0x06, 0x06, 0x4b, 0x09, 0xa1, 0x42, 0x11, + 0x41, 0x45, 0x12, 0x0b, 0x3e, 0x11, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, + 0x3f, 0x11, 0x01, 0x43, 0x0e, 0x0b, 0x37, 0x11, 0x01, 0xb3, 0x14, 0xb4, + 0x06, 0x44, 0x43, 0x1e, 0x36, 0x11, 0x41, 0x44, 0x25, 0x01, 0x39, 0x11, + 0x01, 0x42, 0x15, 0x02, 0x38, 0x11, 0x41, 0x44, 0xc9, 0x1d, 0x3d, 0x11, + 0x01, 0x42, 0x01, 0x26, 0x3c, 0x11, 0x41, 0x43, 0xd2, 0x05, 0x3b, 0x11, + 0x01, 0x43, 0xf6, 0x06, 0x3a, 0x11, 0x41, 0x42, 0x5f, 0x01, 0xd3, 0x26, + 0x00, 0xf2, 0x91, 0xfa, 0x41, 0x02, 0x00, 0x00, 0x32, 0x4a, 0x8f, 0xad, + 0x48, 0xf5, 0x01, 0x02, 0x11, 0x00, 0x06, 0x43, 0xbb, 0x23, 0xb3, 0x26, + 0x40, 0x45, 0x59, 0x03, 0xa2, 0x00, 0x00, 0x02, 0x88, 0x00, 0x01, 0xff, + 0x4c, 0x3b, 0x8b, 0x04, 0x21, 0x00, 0x05, 0xed, 0x07, 0x01, 0xff, 0x48, + 0x75, 0x8a, 0x4e, 0xfe, 0x00, 0x48, 0x82, 0x8a, 0x4a, 0xfe, 0x40, 0x45, + 0x59, 0x03, 0xb5, 0x20, 0x00, 0x43, 0x2c, 0x0e, 0xb8, 0x00, 0x40, 0x44, + 0x79, 0xd5, 0x35, 0xf3, 0x01, 0xa4, 0xfb, 0x22, 0xac, 0xec, 0x22, 0xad, + 0xd6, 0x22, 0xae, 0xf4, 0x05, 0xb0, 0xe5, 0x05, 0xb2, 0x9a, 0x03, 0x44, + 0xbc, 0x01, 0xeb, 0x26, 0x00, 0xf4, 0x08, 0xf4, 0x81, 0xf6, 0x02, 0xb5, + 0x01, 0xff, 0x10, 0x46, 0x61, 0x06, 0x49, 0xc0, 0x04, 0x21, 0x26, 0x40, + 0x4d, 0x80, 0x81, 0x6f, 0x05, 0x01, 0x07, 0xec, 0x05, 0x01, 0xff, 0xa1, + 0xcf, 0x02, 0x43, 0xc0, 0x09, 0x31, 0x05, 0x01, 0xa3, 0x98, 0x02, 0xa4, + 0xfa, 0x01, 0xa5, 0xed, 0x01, 0x43, 0xb4, 0xdb, 0x54, 0x05, 0x01, 0xa7, + 0xd8, 0x01, 0x44, 0x39, 0xf0, 0x46, 0x05, 0x01, 0xa9, 0xbd, 0x01, 0xaa, + 0xae, 0x01, 0xab, 0x9f, 0x01, 0xac, 0x90, 0x01, 0x43, 0x76, 0xe8, 0x4c, + 0x05, 0x01, 0x44, 0x89, 0xf1, 0x4e, 0x05, 0x01, 0x42, 0x10, 0x00, 0x52, + 0x05, 0x01, 0xb0, 0x70, 0x02, 0x43, 0x14, 0x64, 0x43, 0x89, 0x0e, 0x59, + 0x05, 0x01, 0xb3, 0x44, 0xb4, 0x30, 0x44, 0x01, 0xf3, 0x5b, 0x05, 0x01, + 0x44, 0x35, 0xf3, 0x40, 0x05, 0x01, 0xb9, 0x16, 0xba, 0x01, 0xff, 0x43, + 0x35, 0x35, 0x35, 0x05, 0x01, 0xa8, 0x01, 0xff, 0xe1, 0x3b, 0x05, 0x01, + 0x42, 0x62, 0x01, 0x37, 0x05, 0x41, 0x43, 0x93, 0x33, 0x61, 0x05, 0x01, + 0x43, 0xb5, 0x23, 0x3a, 0x05, 0x41, 0x42, 0xbb, 0x01, 0x38, 0x05, 0x01, + 0x43, 0x5b, 0xf4, 0x5c, 0x05, 0x01, 0x43, 0x31, 0x53, 0x53, 0x05, 0x41, + 0x43, 0x34, 0xf4, 0x5a, 0x05, 0x01, 0xa8, 0x01, 0xff, 0xe1, 0x3d, 0x05, + 0x81, 0x06, 0x42, 0x58, 0x69, 0x5d, 0x05, 0x41, 0xeb, 0x50, 0x05, 0x41, + 0xf2, 0x4d, 0x05, 0x01, 0xf9, 0x47, 0x05, 0x41, 0x42, 0x92, 0x01, 0x57, + 0x05, 0x01, 0x43, 0x5b, 0xf4, 0x62, 0x05, 0x41, 0x42, 0x1a, 0x00, 0x3e, + 0x05, 0x01, 0x43, 0xec, 0x52, 0x45, 0x05, 0x41, 0x42, 0x17, 0x00, 0x44, + 0x05, 0x01, 0x42, 0x34, 0x3f, 0x63, 0x05, 0x41, 0x43, 0x5d, 0x80, 0x51, + 0x05, 0x01, 0x43, 0x52, 0xf4, 0x43, 0x05, 0x41, 0x43, 0xa6, 0x35, 0x3f, + 0x05, 0x01, 0x42, 0x9f, 0x05, 0x3c, 0x05, 0x01, 0x42, 0xa7, 0x01, 0x5e, + 0x05, 0x41, 0x44, 0x35, 0xf0, 0x58, 0x05, 0x01, 0x42, 0x29, 0x02, 0x32, + 0x05, 0x41, 0xe2, 0x34, 0x05, 0x01, 0x42, 0x03, 0x1d, 0x36, 0x05, 0x41, + 0x42, 0x8a, 0x00, 0x33, 0x05, 0x01, 0x43, 0xb8, 0x35, 0x41, 0x05, 0x01, + 0xba, 0x01, 0xff, 0x42, 0xed, 0x10, 0x55, 0x05, 0x01, 0x43, 0x31, 0x53, + 0x4f, 0x05, 0x41, 0xa1, 0x22, 0xa8, 0x0d, 0x02, 0xbc, 0x22, 0x01, 0xff, + 0xf7, 0x5f, 0x05, 0x01, 0xf9, 0x4b, 0x05, 0x41, 0xe1, 0x39, 0x05, 0x81, + 0x0a, 0xe9, 0x4a, 0x05, 0x01, 0x42, 0x58, 0x69, 0x49, 0x05, 0x41, 0xf4, + 0x56, 0x05, 0x41, 0xf2, 0x42, 0x05, 0x01, 0x42, 0x03, 0x1d, 0x60, 0x05, + 0x41, 0x42, 0xb8, 0x04, 0x30, 0x05, 0x01, 0x42, 0x0c, 0x00, 0x48, 0x05, + 0x41, 0x45, 0x0b, 0x08, 0x31, 0xf4, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x01, + 0xff, 0x4c, 0xaf, 0x95, 0x39, 0xf6, 0x01, 0x49, 0x6a, 0xc1, 0x3c, 0xf6, + 0x41, 0x48, 0x90, 0xc2, 0xd0, 0x26, 0x00, 0x02, 0x06, 0x00, 0xaa, 0x02, + 0xa5, 0x96, 0x02, 0x0b, 0x4c, 0x8d, 0x29, 0xaf, 0x1d, 0xb0, 0x0f, 0xb2, + 0x01, 0xff, 0x4b, 0x29, 0x88, 0x0d, 0x00, 0x00, 0x42, 0x1b, 0x05, 0x55, + 0xf9, 0x41, 0x49, 0xe6, 0xb4, 0x8f, 0xf3, 0x01, 0x49, 0x73, 0xb8, 0x9a, + 0xfa, 0x41, 0xee, 0xc7, 0x02, 0x00, 0x4a, 0x1b, 0xb3, 0xa0, 0xf3, 0x41, + 0xe1, 0xa0, 0x02, 0x81, 0xdf, 0x01, 0xe2, 0xa9, 0x02, 0x01, 0x02, 0xe7, + 0x06, 0xca, 0x01, 0xe4, 0xa2, 0x02, 0x81, 0xc0, 0x01, 0xe5, 0xba, 0x02, + 0x81, 0xb6, 0x01, 0xe7, 0xc0, 0x02, 0x81, 0xac, 0x01, 0xe9, 0xb9, 0x02, + 0x81, 0xa2, 0x01, 0xeb, 0xbc, 0x02, 0x81, 0x98, 0x01, 0xec, 0xa3, 0x02, + 0x81, 0x89, 0x01, 0xed, 0xaa, 0x02, 0x81, 0x73, 0xee, 0xb5, 0x02, 0x81, + 0x62, 0xef, 0xab, 0x02, 0x01, 0xf0, 0xb7, 0x02, 0x81, 0x55, 0xf1, 0xa8, + 0x02, 0x01, 0xf2, 0xa5, 0x02, 0x81, 0x48, 0xf3, 0xb0, 0x02, 0x81, 0x2d, + 0xf4, 0xad, 0x02, 0x81, 0x1f, 0xf5, 0xb2, 0x02, 0x81, 0x04, 0xf8, 0xb4, + 0x02, 0x41, 0xf5, 0xbf, 0x02, 0xc1, 0x00, 0xf5, 0xa4, 0x02, 0xc1, 0x00, + 0xd2, 0xc8, 0x02, 0x01, 0xd3, 0xd0, 0x02, 0x01, 0xf5, 0xbb, 0x02, 0x41, + 0xf4, 0xc7, 0x02, 0xc1, 0x00, 0xd2, 0xb6, 0x02, 0x41, 0xe8, 0xae, 0x02, + 0x81, 0x0d, 0xf3, 0xb8, 0x02, 0x01, 0xf4, 0xc2, 0x02, 0xc1, 0x00, 0xd2, + 0xc3, 0x02, 0x41, 0xd2, 0xaf, 0x02, 0x41, 0xf2, 0xc9, 0x02, 0x41, 0xd2, + 0xa1, 0x02, 0x41, 0xe4, 0xbe, 0x02, 0x01, 0xe7, 0xc4, 0x02, 0x01, 0xee, + 0xb3, 0x02, 0x41, 0xe2, 0xca, 0x02, 0xc1, 0x00, 0xd2, 0xcb, 0x02, 0x01, + 0xd3, 0xcc, 0x02, 0x01, 0xd4, 0xcd, 0x02, 0x41, 0xe4, 0xa6, 0x02, 0xc1, + 0x00, 0xd2, 0xce, 0x02, 0x41, 0xd2, 0xbd, 0x02, 0x41, 0xe9, 0xc5, 0x02, + 0x41, 0xd2, 0xc1, 0x02, 0x41, 0xd2, 0xcf, 0x02, 0x41, 0xd2, 0xac, 0x02, + 0x41, 0x42, 0x59, 0xe2, 0xb1, 0x02, 0x01, 0x42, 0xf6, 0xf4, 0xc6, 0x02, + 0x41, 0xd2, 0xa7, 0x02, 0x41, 0x43, 0xf3, 0x01, 0x05, 0x21, 0x00, 0xf4, + 0x38, 0x20, 0xc0, 0x00, 0x50, 0x26, 0x60, 0x41, 0x20, 0x40, 0x48, 0x20, + 0xc6, 0xc3, 0xf5, 0x01, 0x45, 0x8f, 0x13, 0xc7, 0xf4, 0xc1, 0x00, 0x49, + 0x4d, 0xb4, 0xc2, 0xf5, 0x41, 0x46, 0x3a, 0xdd, 0x3f, 0x2e, 0x00, 0x46, + 0x8c, 0xdf, 0x51, 0x26, 0x40, 0x10, 0xc6, 0x60, 0x39, 0x02, 0x73, 0x02, + 0x18, 0xa4, 0x0c, 0x48, 0x98, 0xc8, 0x6b, 0xf9, 0x01, 0x42, 0x60, 0x51, + 0xf6, 0xf6, 0x41, 0x42, 0x68, 0x00, 0x6f, 0xf5, 0x01, 0xf9, 0x6c, 0xf3, + 0x41, 0xec, 0x18, 0x00, 0x80, 0x04, 0xf2, 0x4b, 0x26, 0x40, 0x80, 0x06, + 0x48, 0xa0, 0xc7, 0xd9, 0xf5, 0x41, 0x49, 0x91, 0x20, 0x94, 0x00, 0x00, + 0x43, 0x9a, 0x1b, 0x7f, 0x00, 0x4e, 0xe1, 0x0a, 0x14, 0x80, 0xf0, 0x1b, + 0xa2, 0x89, 0x1b, 0xe3, 0xa1, 0x14, 0x80, 0xe0, 0x13, 0xe5, 0x01, 0x14, + 0x80, 0xd0, 0x13, 0xe6, 0x5d, 0x15, 0x80, 0xb1, 0x12, 0x4c, 0xce, 0x28, + 0x1e, 0x14, 0x00, 0xa8, 0x9e, 0x12, 0xe9, 0x03, 0x14, 0x80, 0x90, 0x12, + 0xeb, 0x83, 0x14, 0x80, 0xba, 0x11, 0xec, 0xea, 0x14, 0x80, 0xca, 0x10, + 0xed, 0xbb, 0x14, 0x80, 0xe1, 0x0f, 0xee, 0xd0, 0x14, 0x80, 0xd6, 0x0c, + 0xef, 0x05, 0x14, 0x80, 0x89, 0x0c, 0xf0, 0x49, 0x14, 0x80, 0xb1, 0x0b, + 0xf1, 0x85, 0x15, 0x80, 0x87, 0x0b, 0xf2, 0x50, 0x15, 0x80, 0xa7, 0x0a, + 0xf3, 0x05, 0x15, 0x80, 0xf5, 0x07, 0xf4, 0x66, 0x14, 0x80, 0xe0, 0x05, + 0xb7, 0x9f, 0x01, 0xf9, 0x3e, 0x15, 0xc0, 0x00, 0x06, 0x45, 0x9d, 0x4e, + 0xe1, 0x2d, 0x15, 0x80, 0x3c, 0xe5, 0x26, 0x15, 0x00, 0xe9, 0x28, 0x15, + 0x80, 0x2f, 0xef, 0x2a, 0x15, 0x80, 0x22, 0xb7, 0x01, 0xff, 0xe1, 0x39, + 0x15, 0x80, 0x16, 0xe5, 0x2f, 0x15, 0x00, 0xe9, 0x31, 0x15, 0x80, 0x09, + 0xef, 0x35, 0x15, 0xc0, 0x00, 0xef, 0x37, 0x15, 0x40, 0xe9, 0x33, 0x15, + 0x40, 0xe1, 0x3b, 0x15, 0x40, 0xef, 0x2b, 0x15, 0x00, 0xf9, 0xc3, 0x18, + 0x40, 0xe9, 0x29, 0x15, 0x40, 0xe1, 0x2e, 0x15, 0x80, 0x04, 0xf9, 0xc4, + 0x18, 0x40, 0xe9, 0x27, 0x15, 0x40, 0x43, 0x5a, 0xc5, 0x8f, 0x14, 0x00, + 0x43, 0x32, 0xe3, 0x71, 0x14, 0x00, 0x43, 0xd0, 0x1c, 0xd9, 0x14, 0x00, + 0x43, 0xaf, 0x1b, 0xa9, 0x14, 0x00, 0x43, 0x7c, 0x16, 0xc6, 0x14, 0x00, + 0x42, 0xcd, 0x02, 0x07, 0x14, 0x00, 0xb0, 0x16, 0x43, 0x41, 0xe3, 0xf3, + 0x14, 0x00, 0x43, 0xf4, 0x2f, 0x52, 0x14, 0x00, 0xf7, 0x1d, 0x14, 0x00, + 0x43, 0x02, 0x54, 0x2c, 0x15, 0x40, 0x42, 0xcd, 0x02, 0x35, 0x14, 0x00, + 0x43, 0x11, 0x8c, 0x48, 0x14, 0x40, 0xe1, 0x17, 0x14, 0x80, 0xb0, 0x04, + 0xe5, 0x0c, 0x14, 0x80, 0x59, 0xe9, 0x0e, 0x14, 0x80, 0x50, 0xef, 0x12, + 0x14, 0xc0, 0x00, 0xef, 0x14, 0x14, 0xc0, 0x00, 0x08, 0x38, 0xc5, 0x01, + 0xff, 0x48, 0x28, 0xc6, 0x7e, 0x16, 0x00, 0x42, 0x53, 0x00, 0x9f, 0x15, + 0xc0, 0x00, 0xe1, 0x9e, 0x15, 0x00, 0xe5, 0x9b, 0x15, 0x00, 0xe9, 0x9c, + 0x15, 0x00, 0xef, 0x9d, 0x15, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x7c, 0x16, + 0x80, 0x18, 0x42, 0x27, 0x01, 0x77, 0x16, 0x00, 0xe9, 0x78, 0x16, 0x80, + 0x09, 0xef, 0x7a, 0x16, 0xc0, 0x00, 0xef, 0x7b, 0x16, 0x40, 0xe9, 0x79, + 0x16, 0x40, 0xe1, 0x7d, 0x16, 0x40, 0xe9, 0x10, 0x14, 0x40, 0x02, 0x60, + 0x01, 0x01, 0xff, 0x06, 0x45, 0x9d, 0x06, 0x45, 0xab, 0xc3, 0xdd, 0x18, + 0x40, 0x02, 0x71, 0xef, 0x9f, 0x03, 0x44, 0xd9, 0xef, 0x5c, 0x15, 0x00, + 0x02, 0x3c, 0x0b, 0xf5, 0x02, 0xec, 0xeb, 0x14, 0x80, 0xb7, 0x02, 0xed, + 0xbc, 0x14, 0x80, 0x8f, 0x02, 0x02, 0xa8, 0x01, 0xfd, 0x01, 0xf0, 0x4a, + 0x14, 0x80, 0xd5, 0x01, 0xf2, 0x51, 0x15, 0x80, 0xb9, 0x01, 0xb3, 0x72, + 0xb4, 0x48, 0xb7, 0x27, 0xf9, 0x40, 0x15, 0xc0, 0x00, 0xb7, 0x01, 0xff, + 0xe1, 0x3a, 0x15, 0x80, 0x16, 0xe5, 0x30, 0x15, 0x00, 0xe9, 0x32, 0x15, + 0x80, 0x09, 0xef, 0x36, 0x15, 0xc0, 0x00, 0xef, 0x38, 0x15, 0x40, 0xe9, + 0x34, 0x15, 0x40, 0xe1, 0x3c, 0x15, 0x40, 0xe1, 0x18, 0x14, 0x80, 0x16, + 0xe5, 0x0d, 0x14, 0x00, 0xe9, 0x0f, 0x14, 0x80, 0x09, 0xef, 0x13, 0x14, + 0xc0, 0x00, 0xef, 0x15, 0x14, 0x40, 0xe9, 0x11, 0x14, 0x40, 0xe1, 0x1a, + 0x14, 0x40, 0x44, 0x69, 0xf0, 0x69, 0x15, 0x00, 0xb7, 0x01, 0xff, 0xe1, + 0x62, 0x14, 0x80, 0x16, 0xe5, 0x58, 0x14, 0x00, 0xe9, 0x5a, 0x14, 0x80, + 0x09, 0xef, 0x5e, 0x14, 0xc0, 0x00, 0xef, 0x60, 0x14, 0x40, 0xe9, 0x5c, + 0x14, 0x40, 0xe1, 0x64, 0x14, 0x40, 0x02, 0xbd, 0x1a, 0x22, 0xb7, 0x01, + 0xff, 0xe1, 0x01, 0x15, 0x80, 0x16, 0xe5, 0xf7, 0x14, 0x00, 0xe9, 0xf9, + 0x14, 0x80, 0x09, 0xef, 0xfd, 0x14, 0xc0, 0x00, 0xef, 0xff, 0x14, 0x40, + 0xe9, 0xfb, 0x14, 0x40, 0xe1, 0x03, 0x15, 0x40, 0xe1, 0x22, 0x15, 0x80, + 0x16, 0xe5, 0x18, 0x15, 0x00, 0xe9, 0x1a, 0x15, 0x80, 0x09, 0xef, 0x1e, + 0x15, 0xc0, 0x00, 0xef, 0x20, 0x15, 0x40, 0xe9, 0x1c, 0x15, 0x40, 0xe1, + 0x24, 0x15, 0x40, 0xe1, 0x8d, 0x15, 0x00, 0xe5, 0x8a, 0x15, 0x00, 0xe9, + 0x8b, 0x15, 0x00, 0xef, 0x8c, 0x15, 0x00, 0x43, 0x11, 0x8c, 0x4f, 0x15, + 0x40, 0xb7, 0x01, 0xff, 0xe1, 0x45, 0x14, 0x80, 0x16, 0xe5, 0x3b, 0x14, + 0x00, 0xe9, 0x3d, 0x14, 0x80, 0x09, 0xef, 0x41, 0x14, 0xc0, 0x00, 0xef, + 0x43, 0x14, 0x40, 0xe9, 0x3f, 0x14, 0x40, 0xe1, 0x47, 0x14, 0x40, 0xe1, + 0xcc, 0x14, 0x80, 0x04, 0xe5, 0xca, 0x14, 0x40, 0xe1, 0xce, 0x14, 0x40, + 0xb7, 0x01, 0xff, 0xe1, 0xb7, 0x14, 0x80, 0x16, 0xe5, 0xad, 0x14, 0x00, + 0xe9, 0xaf, 0x14, 0x80, 0x09, 0xef, 0xb3, 0x14, 0xc0, 0x00, 0xef, 0xb5, + 0x14, 0x40, 0xe9, 0xb1, 0x14, 0x40, 0xe1, 0xb9, 0x14, 0x40, 0xe1, 0x4d, + 0x15, 0x80, 0x2f, 0xe5, 0x44, 0x15, 0x00, 0xef, 0x4a, 0x15, 0x80, 0x22, + 0xb7, 0x01, 0xff, 0xe1, 0xe7, 0x14, 0x80, 0x16, 0xe5, 0xdd, 0x14, 0x00, + 0xe9, 0xdf, 0x14, 0x80, 0x09, 0xef, 0xe3, 0x14, 0xc0, 0x00, 0xef, 0xe5, + 0x14, 0x40, 0xe9, 0xe1, 0x14, 0x40, 0xe1, 0xe9, 0x14, 0x40, 0xef, 0xe1, + 0x18, 0x40, 0xe1, 0xe2, 0x18, 0x40, 0xe1, 0x7f, 0x14, 0x80, 0x16, 0xe5, + 0x75, 0x14, 0x00, 0xe9, 0x77, 0x14, 0x80, 0x09, 0xef, 0x7b, 0x14, 0xc0, + 0x00, 0xef, 0x7d, 0x14, 0x40, 0xe9, 0x79, 0x14, 0x40, 0xe1, 0x81, 0x14, + 0x40, 0xe1, 0x9d, 0x14, 0x80, 0x16, 0xe5, 0x93, 0x14, 0x00, 0xe9, 0x95, + 0x14, 0x80, 0x09, 0xef, 0x99, 0x14, 0xc0, 0x00, 0xef, 0x9b, 0x14, 0x40, + 0xe9, 0x97, 0x14, 0x40, 0xe1, 0x9f, 0x14, 0x40, 0xe1, 0x19, 0x14, 0x00, + 0xf9, 0xb3, 0x18, 0x40, 0xe1, 0x55, 0x14, 0x80, 0xfc, 0x01, 0xe5, 0x4c, + 0x14, 0x00, 0xe8, 0x6a, 0x15, 0x80, 0x9d, 0x01, 0xe9, 0x4e, 0x14, 0x80, + 0x93, 0x01, 0x02, 0x2a, 0x09, 0x74, 0xef, 0x50, 0x14, 0x80, 0x6b, 0xb4, + 0x34, 0xb7, 0x13, 0xb9, 0x01, 0xff, 0xe1, 0x73, 0x15, 0x00, 0xe5, 0x70, + 0x15, 0x00, 0xe9, 0x71, 0x15, 0x00, 0xef, 0x72, 0x15, 0x40, 0xe1, 0x61, + 0x14, 0x80, 0x16, 0xe5, 0x57, 0x14, 0x00, 0xe9, 0x59, 0x14, 0x80, 0x09, + 0xef, 0x5d, 0x14, 0xc0, 0x00, 0xef, 0x5f, 0x14, 0x40, 0xe9, 0x5b, 0x14, + 0x40, 0xe1, 0x63, 0x14, 0x40, 0xe1, 0x6a, 0x14, 0x00, 0xe5, 0x67, 0x14, + 0x00, 0xe8, 0x6f, 0x15, 0x80, 0x08, 0xe9, 0x68, 0x14, 0x00, 0xef, 0x69, + 0x14, 0x40, 0xe1, 0x6e, 0x15, 0x80, 0x17, 0xe5, 0x6b, 0x15, 0x00, 0xe9, + 0x6c, 0x15, 0x00, 0xef, 0x6d, 0x15, 0x80, 0x06, 0x42, 0x15, 0x01, 0xe5, + 0x18, 0x40, 0xef, 0xe6, 0x18, 0x40, 0xe1, 0xe7, 0x18, 0x40, 0xef, 0x51, + 0x14, 0x40, 0xe1, 0x89, 0x15, 0x00, 0xe5, 0x86, 0x15, 0x00, 0xe9, 0x87, + 0x15, 0x00, 0xef, 0x88, 0x15, 0x80, 0x06, 0x42, 0x15, 0x01, 0xe8, 0x18, + 0x40, 0xef, 0xe9, 0x18, 0x40, 0xe9, 0x4f, 0x14, 0x40, 0x48, 0xb8, 0xc2, + 0xae, 0x15, 0x80, 0x2f, 0xe1, 0x66, 0x15, 0x80, 0x26, 0xe5, 0x5e, 0x15, + 0x00, 0xe9, 0x60, 0x15, 0x80, 0x19, 0xef, 0x64, 0x15, 0x80, 0x10, 0xb7, + 0x01, 0xff, 0xe1, 0xe4, 0x18, 0x80, 0x04, 0xe5, 0xe3, 0x18, 0x40, 0xe1, + 0x68, 0x15, 0x40, 0xef, 0x65, 0x15, 0x40, 0xe9, 0x62, 0x15, 0x40, 0xe1, + 0x67, 0x15, 0x40, 0xe1, 0xac, 0x15, 0x80, 0x16, 0xe5, 0xa7, 0x15, 0x00, + 0xe9, 0xa8, 0x15, 0x80, 0x09, 0xef, 0xaa, 0x15, 0xc0, 0x00, 0xef, 0xab, + 0x15, 0x40, 0xe9, 0xa9, 0x15, 0x40, 0xe1, 0xad, 0x15, 0x40, 0xe1, 0x56, + 0x14, 0x80, 0x04, 0xf9, 0xb7, 0x18, 0x40, 0xe9, 0x4d, 0x14, 0x40, 0xe1, + 0xf4, 0x14, 0x80, 0xbe, 0x01, 0xe5, 0xed, 0x14, 0x00, 0xe8, 0x25, 0x15, + 0x80, 0x68, 0xe9, 0xef, 0x14, 0x80, 0x5f, 0xef, 0xf1, 0x14, 0x80, 0x36, + 0xb0, 0x24, 0xf7, 0x07, 0x15, 0xc0, 0x00, 0xe1, 0x00, 0x15, 0x80, 0x16, + 0xe5, 0xf6, 0x14, 0x00, 0xe9, 0xf8, 0x14, 0x80, 0x09, 0xef, 0xfc, 0x14, + 0xc0, 0x00, 0xef, 0xfe, 0x14, 0x40, 0xe9, 0xfa, 0x14, 0x40, 0xe1, 0x02, + 0x15, 0x40, 0xe1, 0xbf, 0x1a, 0x01, 0xe5, 0xbc, 0x1a, 0x01, 0xe9, 0xbd, + 0x1a, 0x01, 0xef, 0xbe, 0x1a, 0x41, 0xef, 0xf2, 0x14, 0x00, 0x0c, 0xab, + 0x96, 0x04, 0xf9, 0xbe, 0x18, 0x40, 0x42, 0x18, 0x0a, 0x88, 0x14, 0x00, + 0x42, 0x4e, 0x00, 0x85, 0x14, 0x00, 0x42, 0xda, 0x2c, 0x86, 0x14, 0x00, + 0x42, 0xfd, 0x28, 0x87, 0x14, 0x40, 0xe9, 0xf0, 0x14, 0x40, 0xe1, 0x15, + 0x15, 0x80, 0x40, 0xe5, 0x10, 0x15, 0x00, 0xe9, 0x11, 0x15, 0x80, 0x33, + 0xef, 0x13, 0x15, 0x80, 0x26, 0xb7, 0x01, 0xff, 0xe1, 0x21, 0x15, 0x80, + 0x1a, 0xe5, 0x17, 0x15, 0x00, 0xe9, 0x19, 0x15, 0x80, 0x0d, 0xef, 0x1d, + 0x15, 0xc0, 0x00, 0xef, 0x1f, 0x15, 0x00, 0xf9, 0xc2, 0x18, 0x40, 0xe9, + 0x1b, 0x15, 0x40, 0xe1, 0x23, 0x15, 0x40, 0xef, 0x14, 0x15, 0x00, 0xf9, + 0xc0, 0x18, 0x40, 0xe9, 0x12, 0x15, 0x40, 0xe1, 0x16, 0x15, 0x00, 0xf9, + 0xc1, 0x18, 0x40, 0xe1, 0xf5, 0x14, 0x80, 0x5f, 0xf9, 0xbf, 0x18, 0xc0, + 0x00, 0x04, 0xa9, 0xf0, 0x01, 0xff, 0xa8, 0x3e, 0xaa, 0x2f, 0xed, 0xbf, + 0x14, 0x00, 0x02, 0xa4, 0x02, 0x0c, 0x42, 0x53, 0x00, 0xa2, 0x14, 0x00, + 0x42, 0x7e, 0x1a, 0x41, 0x15, 0x40, 0xe1, 0x9a, 0x15, 0x00, 0xe5, 0x97, + 0x15, 0x00, 0xe9, 0x98, 0x15, 0x00, 0xef, 0x99, 0x15, 0x80, 0x06, 0x42, + 0x15, 0x01, 0xea, 0x18, 0x40, 0xef, 0xeb, 0x18, 0x40, 0xe9, 0x1a, 0x16, + 0x00, 0xf5, 0x15, 0x16, 0xc0, 0x00, 0xf5, 0xf1, 0x18, 0x40, 0xe1, 0xc3, + 0x15, 0x00, 0xe5, 0xc0, 0x15, 0x00, 0xe9, 0xc1, 0x15, 0x00, 0xef, 0xc2, + 0x15, 0xc0, 0x00, 0xef, 0xec, 0x18, 0x40, 0xe9, 0xee, 0x14, 0x40, 0x07, + 0xb9, 0xcd, 0x4c, 0xe1, 0x4b, 0x15, 0x80, 0x3a, 0xe5, 0x42, 0x15, 0x00, + 0xe9, 0x46, 0x15, 0x80, 0x2d, 0xef, 0x48, 0x15, 0x80, 0x24, 0xb7, 0x01, + 0xff, 0xe1, 0xd3, 0x18, 0x80, 0x18, 0x42, 0x27, 0x01, 0xce, 0x18, 0x00, + 0xe9, 0xcf, 0x18, 0x80, 0x09, 0xef, 0xd1, 0x18, 0xc0, 0x00, 0xef, 0xd2, + 0x18, 0x40, 0xe9, 0xd0, 0x18, 0x40, 0xe1, 0x4e, 0x15, 0x40, 0xef, 0x49, + 0x15, 0x40, 0xe9, 0x47, 0x15, 0x40, 0xe1, 0x4c, 0x15, 0x80, 0x04, 0xf9, + 0xc5, 0x18, 0x40, 0xe9, 0x45, 0x15, 0x40, 0xe5, 0x43, 0x15, 0x00, 0x42, + 0x15, 0x01, 0xe0, 0x18, 0x40, 0xe1, 0x83, 0x15, 0x80, 0x12, 0xe9, 0x7f, + 0x15, 0x80, 0x09, 0xef, 0x81, 0x15, 0xc0, 0x00, 0xef, 0x82, 0x15, 0x40, + 0xe9, 0x80, 0x15, 0x40, 0xe1, 0x84, 0x15, 0x80, 0x04, 0xe9, 0x6f, 0x16, + 0x40, 0xe9, 0x7e, 0x15, 0x40, 0xe1, 0x38, 0x14, 0x80, 0x40, 0xe5, 0x2f, + 0x14, 0x00, 0xe9, 0x31, 0x14, 0x80, 0x33, 0xef, 0x33, 0x14, 0x80, 0x26, + 0xb7, 0x01, 0xff, 0xe1, 0x44, 0x14, 0x80, 0x1a, 0xe5, 0x3a, 0x14, 0x00, + 0xe9, 0x3c, 0x14, 0x80, 0x0d, 0xef, 0x40, 0x14, 0xc0, 0x00, 0xef, 0x42, + 0x14, 0x00, 0xf9, 0xb6, 0x18, 0x40, 0xe9, 0x3e, 0x14, 0x40, 0xe1, 0x46, + 0x14, 0x40, 0xef, 0x34, 0x14, 0x00, 0xf9, 0xb4, 0x18, 0x40, 0xe9, 0x32, + 0x14, 0x40, 0xe1, 0x39, 0x14, 0x80, 0x04, 0xf9, 0xb5, 0x18, 0x40, 0xe9, + 0x30, 0x14, 0x40, 0x07, 0x43, 0xd2, 0x0c, 0xee, 0x2d, 0x14, 0x00, 0xef, + 0x06, 0x14, 0x00, 0xf9, 0xb0, 0x18, 0x40, 0xe3, 0xd7, 0x18, 0x00, 0xeb, + 0xd6, 0x18, 0x00, 0xed, 0xd8, 0x18, 0x00, 0xee, 0xd9, 0x18, 0x80, 0x11, + 0xf0, 0xd4, 0x18, 0x00, 0xf3, 0xda, 0x18, 0x80, 0x04, 0xf4, 0xd5, 0x18, + 0x40, 0xe8, 0xdb, 0x18, 0x40, 0xb7, 0x01, 0xff, 0xe9, 0xc7, 0x18, 0x80, + 0x09, 0xef, 0xcb, 0x18, 0xc0, 0x00, 0xef, 0xcd, 0x18, 0x40, 0xe9, 0xc9, + 0x18, 0x40, 0x08, 0xb8, 0xc2, 0xf3, 0x02, 0xe1, 0xc7, 0x14, 0x80, 0xbd, + 0x01, 0xe5, 0xc0, 0x14, 0x00, 0xe7, 0x95, 0x15, 0x80, 0x8f, 0x01, 0xe8, + 0xd2, 0x14, 0x00, 0xe9, 0xc2, 0x14, 0x80, 0x81, 0x01, 0x42, 0x1d, 0x01, + 0x96, 0x15, 0x80, 0x5f, 0xef, 0xc4, 0x14, 0x80, 0x52, 0x04, 0xd9, 0xf2, + 0x22, 0xb7, 0x01, 0xff, 0xe1, 0xcb, 0x14, 0x80, 0x16, 0xe5, 0xc9, 0x14, + 0x00, 0xe9, 0xc6, 0x18, 0x80, 0x09, 0xef, 0xca, 0x18, 0xc0, 0x00, 0xef, + 0xcc, 0x18, 0x40, 0xe9, 0xc8, 0x18, 0x40, 0xe1, 0xcd, 0x14, 0x40, 0x44, + 0x85, 0xf0, 0x7b, 0x15, 0x80, 0x06, 0x44, 0xfe, 0x50, 0x7c, 0x15, 0x40, + 0xe1, 0x79, 0x15, 0x80, 0x16, 0xe5, 0x74, 0x15, 0x00, 0xe9, 0x75, 0x15, + 0x80, 0x09, 0xef, 0x77, 0x15, 0xc0, 0x00, 0xef, 0x78, 0x15, 0x40, 0xe9, + 0x76, 0x15, 0x40, 0xe1, 0x7a, 0x15, 0x40, 0xef, 0xc5, 0x14, 0x00, 0xf9, + 0xbb, 0x18, 0x40, 0xe1, 0x75, 0x16, 0x80, 0x12, 0xe9, 0x71, 0x16, 0x80, + 0x09, 0xef, 0x73, 0x16, 0xc0, 0x00, 0xef, 0x74, 0x16, 0x40, 0xe9, 0x72, + 0x16, 0x40, 0xe1, 0x76, 0x16, 0x40, 0xe9, 0xc3, 0x14, 0x40, 0xe1, 0x93, + 0x15, 0x80, 0x12, 0xe9, 0x8f, 0x15, 0x80, 0x09, 0xef, 0x91, 0x15, 0xc0, + 0x00, 0xef, 0x92, 0x15, 0x40, 0xe9, 0x90, 0x15, 0x40, 0xe1, 0x94, 0x15, + 0x80, 0x04, 0xe9, 0x70, 0x16, 0x40, 0xe9, 0x8e, 0x15, 0x40, 0xe1, 0xc8, + 0x14, 0x80, 0xa6, 0x01, 0x06, 0xec, 0xdf, 0x45, 0x07, 0x9c, 0xd6, 0x04, + 0xf9, 0xbc, 0x18, 0x40, 0xa8, 0x20, 0x03, 0x7f, 0x5d, 0x01, 0xff, 0xe1, + 0xba, 0x1a, 0x81, 0x12, 0xe9, 0xb6, 0x1a, 0x81, 0x09, 0xef, 0xb8, 0x1a, + 0xc1, 0x00, 0xef, 0xb9, 0x1a, 0x41, 0xe9, 0xb7, 0x1a, 0x41, 0xe1, 0xbb, + 0x1a, 0x41, 0xe1, 0xb4, 0x1a, 0x81, 0x12, 0xe9, 0xb0, 0x1a, 0x81, 0x09, + 0xef, 0xb2, 0x1a, 0xc1, 0x00, 0xef, 0xb3, 0x1a, 0x41, 0xe9, 0xb1, 0x1a, + 0x41, 0xe1, 0xb5, 0x1a, 0x41, 0x44, 0x71, 0xef, 0xa0, 0x14, 0x00, 0x44, + 0xf5, 0xf0, 0x82, 0x14, 0x00, 0x44, 0x51, 0xf1, 0xba, 0x14, 0x00, 0x44, + 0xad, 0xf1, 0xcf, 0x14, 0x00, 0xb3, 0x1a, 0x44, 0x30, 0xec, 0x65, 0x14, + 0x00, 0xb7, 0x06, 0x44, 0x51, 0xf3, 0x3d, 0x15, 0x40, 0x42, 0x80, 0x12, + 0x1b, 0x14, 0x00, 0x42, 0xcd, 0x02, 0x16, 0x14, 0x40, 0x42, 0x03, 0x20, + 0x0b, 0x15, 0x00, 0x43, 0x71, 0xef, 0x0f, 0x15, 0x00, 0x42, 0x3c, 0x0b, + 0x0a, 0x15, 0x80, 0x12, 0x43, 0x51, 0x02, 0x0c, 0x15, 0x00, 0x43, 0xed, + 0x01, 0x0d, 0x15, 0x00, 0x43, 0x11, 0x8c, 0x04, 0x15, 0x40, 0xe1, 0x0e, + 0x15, 0x40, 0xe9, 0xc1, 0x14, 0x40, 0xe5, 0x5f, 0x15, 0x00, 0xe9, 0x61, + 0x15, 0xc0, 0x00, 0xe9, 0x63, 0x15, 0x40, 0xe1, 0xaa, 0x14, 0x80, 0x51, + 0xe5, 0xa3, 0x14, 0x80, 0x3f, 0xe8, 0xbd, 0x14, 0x00, 0xe9, 0xa5, 0x14, + 0x80, 0x32, 0xef, 0xa7, 0x14, 0x80, 0x22, 0xb7, 0x01, 0xff, 0xe1, 0xb6, + 0x14, 0x80, 0x16, 0xe5, 0xac, 0x14, 0x00, 0xe9, 0xae, 0x14, 0x80, 0x09, + 0xef, 0xb2, 0x14, 0xc0, 0x00, 0xef, 0xb4, 0x14, 0x40, 0xe9, 0xb0, 0x14, + 0x40, 0xe1, 0xb8, 0x14, 0x40, 0xef, 0xa8, 0x14, 0xc0, 0x00, 0x4a, 0xd7, + 0xb0, 0x09, 0x15, 0x40, 0xe9, 0xa6, 0x14, 0x40, 0x05, 0x4e, 0x33, 0x01, + 0xff, 0xec, 0xec, 0x14, 0x00, 0xf2, 0x52, 0x15, 0x40, 0xe1, 0xab, 0x14, + 0x80, 0x04, 0xf9, 0xba, 0x18, 0x40, 0xe9, 0xa4, 0x14, 0x40, 0xe1, 0xda, + 0x14, 0x80, 0x58, 0xe5, 0xd3, 0x14, 0x00, 0xe8, 0xa6, 0x15, 0x80, 0x34, + 0xe9, 0xd5, 0x14, 0x80, 0x2b, 0xef, 0xd7, 0x14, 0x80, 0x22, 0xb7, 0x01, + 0xff, 0xe1, 0xe6, 0x14, 0x80, 0x16, 0xe5, 0xdc, 0x14, 0x00, 0xe9, 0xde, + 0x14, 0x80, 0x09, 0xef, 0xe2, 0x14, 0xc0, 0x00, 0xef, 0xe4, 0x14, 0x40, + 0xe9, 0xe0, 0x14, 0x40, 0xe1, 0xe8, 0x14, 0x40, 0xef, 0xd8, 0x14, 0x40, + 0xe9, 0xd6, 0x14, 0x40, 0xe1, 0xa4, 0x15, 0x80, 0x12, 0xe9, 0xa0, 0x15, + 0x80, 0x09, 0xef, 0xa2, 0x15, 0xc0, 0x00, 0xef, 0xa3, 0x15, 0x40, 0xe9, + 0xa1, 0x15, 0x40, 0xe1, 0xa5, 0x15, 0x40, 0xe1, 0xdb, 0x14, 0x80, 0x04, + 0xf9, 0xbd, 0x18, 0x40, 0xe9, 0xd4, 0x14, 0x40, 0xe1, 0x72, 0x14, 0x80, + 0x3e, 0xe5, 0x6b, 0x14, 0x00, 0xe9, 0x6d, 0x14, 0x80, 0x31, 0xef, 0x6f, + 0x14, 0x80, 0x28, 0xf7, 0x84, 0x14, 0xc0, 0x00, 0xe1, 0x7e, 0x14, 0x80, + 0x16, 0xe5, 0x74, 0x14, 0x00, 0xe9, 0x76, 0x14, 0x80, 0x09, 0xef, 0x7a, + 0x14, 0xc0, 0x00, 0xef, 0x7c, 0x14, 0x40, 0xe9, 0x78, 0x14, 0x40, 0xe1, + 0x80, 0x14, 0x00, 0xf9, 0xb9, 0x18, 0x40, 0xef, 0x70, 0x14, 0x40, 0xe9, + 0x6e, 0x14, 0x40, 0xe1, 0x73, 0x14, 0x80, 0x04, 0xf9, 0xb8, 0x18, 0x40, + 0xe9, 0x6c, 0x14, 0x40, 0xe9, 0x04, 0x14, 0x00, 0xee, 0x2c, 0x14, 0x40, + 0xeb, 0x7d, 0x15, 0x00, 0x45, 0x97, 0x63, 0x00, 0x14, 0x40, 0xe1, 0x59, + 0x15, 0x80, 0x8a, 0x01, 0xe5, 0x53, 0x15, 0x00, 0xe9, 0x55, 0x15, 0x80, + 0x15, 0xef, 0x57, 0x15, 0x80, 0x0c, 0x48, 0x82, 0x16, 0x6e, 0x16, 0x00, + 0x43, 0x11, 0x8c, 0x5b, 0x15, 0x40, 0xef, 0x58, 0x15, 0x40, 0xe9, 0x56, + 0x15, 0x00, 0x04, 0x66, 0x06, 0x01, 0xff, 0x45, 0xf9, 0x38, 0x1f, 0x14, + 0x00, 0x50, 0x26, 0x61, 0x21, 0x14, 0x00, 0x02, 0x3b, 0x01, 0x3d, 0x45, + 0x15, 0x23, 0x20, 0x14, 0x00, 0x4a, 0xe6, 0x45, 0x27, 0x14, 0x00, 0x44, + 0x58, 0x28, 0x29, 0x14, 0x00, 0xb2, 0x14, 0xb3, 0x06, 0x4d, 0x52, 0x89, + 0x22, 0x14, 0x40, 0x56, 0x45, 0x34, 0x28, 0x14, 0x00, 0x49, 0xdc, 0xbb, + 0xde, 0x18, 0x40, 0x49, 0xd0, 0xb5, 0xdf, 0x18, 0x00, 0xa9, 0x01, 0xff, + 0x4d, 0x86, 0x72, 0x23, 0x14, 0x00, 0x42, 0x1d, 0x01, 0x24, 0x14, 0x40, + 0x05, 0x3d, 0x01, 0x06, 0x47, 0xf2, 0x38, 0x2a, 0x14, 0x40, 0x45, 0xf9, + 0x38, 0x25, 0x14, 0x00, 0x56, 0x47, 0x37, 0x26, 0x14, 0x40, 0xe1, 0x5a, + 0x15, 0xc0, 0x00, 0xe9, 0x54, 0x15, 0x40, 0x48, 0xa8, 0xc3, 0xdc, 0x18, + 0x00, 0xee, 0x2b, 0x14, 0x40, 0xe1, 0x90, 0x14, 0x80, 0x3e, 0xe5, 0x89, + 0x14, 0x00, 0x47, 0x94, 0xd1, 0x6d, 0x16, 0x00, 0xe9, 0x8b, 0x14, 0x80, + 0x2b, 0xef, 0x8d, 0x14, 0x80, 0x22, 0xb7, 0x01, 0xff, 0xe1, 0x9c, 0x14, + 0x80, 0x16, 0xe5, 0x92, 0x14, 0x00, 0xe9, 0x94, 0x14, 0x80, 0x09, 0xef, + 0x98, 0x14, 0xc0, 0x00, 0xef, 0x9a, 0x14, 0x40, 0xe9, 0x96, 0x14, 0x40, + 0xe1, 0x9e, 0x14, 0x40, 0xef, 0x8e, 0x14, 0x40, 0xe9, 0x8c, 0x14, 0x40, + 0xe1, 0x91, 0x14, 0x80, 0xd6, 0x06, 0x06, 0x26, 0x6a, 0x01, 0xff, 0x02, + 0x6d, 0x14, 0xb3, 0x06, 0xa4, 0xe0, 0x05, 0x42, 0x27, 0x01, 0x08, 0x14, + 0x00, 0xa7, 0x93, 0x05, 0xe8, 0x4b, 0x14, 0x80, 0xe7, 0x04, 0xe9, 0x09, + 0x14, 0x80, 0xdb, 0x04, 0xaa, 0x9e, 0x04, 0xab, 0xe2, 0x03, 0xac, 0xab, + 0x03, 0xad, 0x8f, 0x03, 0xae, 0xef, 0x02, 0xf0, 0xee, 0x15, 0x80, 0xd0, + 0x02, 0xb2, 0xb4, 0x02, 0xb3, 0xfa, 0x01, 0xb4, 0x54, 0xb7, 0x39, 0xb9, + 0x1e, 0xfa, 0x46, 0x16, 0xc0, 0x00, 0xe1, 0x45, 0x16, 0x00, 0xe5, 0x42, + 0x16, 0x80, 0x0c, 0xe9, 0x44, 0x16, 0x00, 0xef, 0x41, 0x16, 0x00, 0xf5, + 0x40, 0x16, 0x40, 0xe5, 0x43, 0x16, 0x40, 0xe1, 0x13, 0x16, 0x00, 0xe5, + 0x10, 0x16, 0x80, 0x0c, 0xe9, 0x12, 0x16, 0x00, 0xef, 0x0f, 0x16, 0x00, + 0xf5, 0x0e, 0x16, 0x40, 0xe5, 0x11, 0x16, 0x40, 0xe1, 0xd5, 0x15, 0x00, + 0xe5, 0xd2, 0x15, 0x80, 0x0c, 0xe9, 0xd4, 0x15, 0x00, 0xef, 0xd1, 0x15, + 0x00, 0xf5, 0xd0, 0x15, 0x40, 0xe5, 0xd3, 0x15, 0x40, 0xa8, 0x88, 0x01, + 0xac, 0x52, 0xb3, 0x37, 0xb4, 0x01, 0xff, 0xe1, 0xe7, 0x15, 0x00, 0xe5, + 0xe4, 0x15, 0x80, 0x27, 0xe9, 0xe6, 0x15, 0x00, 0xef, 0xe3, 0x15, 0x00, + 0xb3, 0x04, 0xf5, 0xe2, 0x15, 0x40, 0xe1, 0x6c, 0x16, 0x00, 0xe5, 0x69, + 0x16, 0x80, 0x0c, 0xe9, 0x6b, 0x16, 0x00, 0xef, 0x68, 0x16, 0x00, 0xf5, + 0x67, 0x16, 0x40, 0xe5, 0x6a, 0x16, 0x40, 0xe5, 0xe5, 0x15, 0x40, 0xe1, + 0x60, 0x16, 0x00, 0xe5, 0x5d, 0x16, 0x80, 0x0c, 0xe9, 0x5f, 0x16, 0x00, + 0xef, 0x5c, 0x16, 0x00, 0xf5, 0x5b, 0x16, 0x40, 0xe5, 0x5e, 0x16, 0x40, + 0xe1, 0x3f, 0x16, 0x00, 0xe5, 0x3c, 0x16, 0x80, 0x27, 0xa8, 0x0c, 0xe9, + 0x3e, 0x16, 0x00, 0xef, 0x3b, 0x16, 0x00, 0xf5, 0x3a, 0x16, 0x40, 0xe1, + 0x39, 0x16, 0x00, 0xe5, 0x36, 0x16, 0x80, 0x0c, 0xe9, 0x38, 0x16, 0x00, + 0xef, 0x35, 0x16, 0x00, 0xf5, 0x34, 0x16, 0x40, 0xe5, 0x37, 0x16, 0x40, + 0xe5, 0x3d, 0x16, 0x40, 0xe1, 0xe1, 0x15, 0x00, 0xe5, 0xde, 0x15, 0x80, + 0x0c, 0xe9, 0xe0, 0x15, 0x00, 0xef, 0xdd, 0x15, 0x00, 0xf5, 0xdc, 0x15, + 0x40, 0xe5, 0xdf, 0x15, 0x40, 0xe1, 0x53, 0x16, 0x00, 0xe5, 0x50, 0x16, + 0x80, 0x2a, 0xe8, 0x5a, 0x16, 0x80, 0x0c, 0xe9, 0x52, 0x16, 0x00, 0xef, + 0x4f, 0x16, 0x00, 0xf5, 0x4e, 0x16, 0x40, 0xe1, 0x59, 0x16, 0x00, 0xe5, + 0x56, 0x16, 0x80, 0x0c, 0xe9, 0x58, 0x16, 0x00, 0xef, 0x55, 0x16, 0x00, + 0xf5, 0x54, 0x16, 0x40, 0xe5, 0x57, 0x16, 0x40, 0xe5, 0x51, 0x16, 0x40, + 0xe1, 0xcf, 0x15, 0x00, 0xe5, 0xcc, 0x15, 0x80, 0x0c, 0xe9, 0xce, 0x15, + 0x00, 0xef, 0xcb, 0x15, 0x00, 0xf5, 0xca, 0x15, 0x40, 0xe5, 0xcd, 0x15, + 0x40, 0xe1, 0xed, 0x15, 0x00, 0xe5, 0xea, 0x15, 0x80, 0x0c, 0xe9, 0xec, + 0x15, 0x00, 0xef, 0xe9, 0x15, 0x00, 0xf5, 0xe8, 0x15, 0x40, 0xe5, 0xeb, + 0x15, 0x40, 0xe1, 0x07, 0x16, 0x00, 0xe5, 0x04, 0x16, 0x80, 0x10, 0xe7, + 0xd1, 0x14, 0x00, 0xe9, 0x06, 0x16, 0x00, 0xef, 0x03, 0x16, 0x00, 0xf5, + 0x02, 0x16, 0x40, 0xe5, 0x05, 0x16, 0x40, 0xe1, 0x0d, 0x16, 0x00, 0xe5, + 0x0a, 0x16, 0x80, 0x0c, 0xe9, 0x0c, 0x16, 0x00, 0xef, 0x09, 0x16, 0x00, + 0xf5, 0x08, 0x16, 0x40, 0xe5, 0x0b, 0x16, 0x40, 0xe1, 0x27, 0x16, 0x00, + 0xe5, 0x24, 0x16, 0x80, 0x27, 0xa8, 0x0c, 0xe9, 0x26, 0x16, 0x00, 0xef, + 0x23, 0x16, 0x00, 0xf5, 0x22, 0x16, 0x40, 0xe1, 0x33, 0x16, 0x00, 0xe5, + 0x30, 0x16, 0x80, 0x0c, 0xe9, 0x32, 0x16, 0x00, 0xef, 0x2f, 0x16, 0x00, + 0xf5, 0x2e, 0x16, 0x40, 0xe5, 0x31, 0x16, 0x40, 0xe5, 0x25, 0x16, 0x40, + 0xa8, 0x1e, 0xeb, 0x01, 0x16, 0xc0, 0x00, 0xe1, 0x00, 0x16, 0x00, 0xe5, + 0xfd, 0x15, 0x80, 0x0c, 0xe9, 0xff, 0x15, 0x00, 0xef, 0xfc, 0x15, 0x00, + 0xf5, 0xfb, 0x15, 0x40, 0xe5, 0xfe, 0x15, 0x40, 0xe1, 0xfa, 0x15, 0x00, + 0xe5, 0xf7, 0x15, 0x80, 0x0c, 0xe9, 0xf9, 0x15, 0x00, 0xef, 0xf6, 0x15, + 0x00, 0xf5, 0xf5, 0x15, 0x40, 0xe5, 0xf8, 0x15, 0x40, 0xe1, 0x1b, 0x16, + 0x00, 0xe5, 0x17, 0x16, 0x80, 0x2d, 0xe9, 0x19, 0x16, 0x00, 0xaa, 0x0e, + 0xef, 0x16, 0x16, 0x00, 0xf5, 0x14, 0x16, 0x00, 0x42, 0xa9, 0x01, 0xf2, + 0x18, 0x40, 0xe1, 0x21, 0x16, 0x00, 0xe5, 0x1e, 0x16, 0x80, 0x0c, 0xe9, + 0x20, 0x16, 0x00, 0xef, 0x1d, 0x16, 0x00, 0xf5, 0x1c, 0x16, 0x40, 0xe5, + 0x1f, 0x16, 0x40, 0xe5, 0x18, 0x16, 0x40, 0x48, 0xc0, 0xc8, 0x47, 0x16, + 0x40, 0x42, 0x27, 0x01, 0x36, 0x14, 0x00, 0xe9, 0x37, 0x14, 0x00, 0xb7, + 0x01, 0xff, 0xe1, 0xdb, 0x15, 0x00, 0xe5, 0xd8, 0x15, 0x80, 0x0c, 0xe9, + 0xda, 0x15, 0x00, 0xef, 0xd7, 0x15, 0x00, 0xf5, 0xd6, 0x15, 0x40, 0xe5, + 0xd9, 0x15, 0x40, 0xe1, 0xf4, 0x15, 0x80, 0x3b, 0xe5, 0xf1, 0x15, 0x80, + 0x32, 0xa8, 0x17, 0xe9, 0xf3, 0x15, 0x00, 0xef, 0xf0, 0x15, 0x00, 0xf5, + 0xef, 0x15, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0xf0, 0x18, 0x00, 0xf5, 0xed, + 0x18, 0x40, 0xe1, 0xc9, 0x15, 0x00, 0xe5, 0xc6, 0x15, 0x80, 0x0c, 0xe9, + 0xc8, 0x15, 0x00, 0xef, 0xc5, 0x15, 0x00, 0xf5, 0xc4, 0x15, 0x40, 0xe5, + 0xc7, 0x15, 0x40, 0xe5, 0xf2, 0x15, 0x40, 0xe1, 0xef, 0x18, 0x40, 0xa5, + 0x3b, 0xe9, 0x54, 0x14, 0x00, 0xac, 0x1c, 0xba, 0x01, 0xff, 0xe1, 0x4d, + 0x16, 0x00, 0xe5, 0x4a, 0x16, 0x80, 0x0c, 0xe9, 0x4c, 0x16, 0x00, 0xef, + 0x49, 0x16, 0x00, 0xf5, 0x48, 0x16, 0x40, 0xe5, 0x4b, 0x16, 0x40, 0xe1, + 0x2d, 0x16, 0x00, 0xe5, 0x2a, 0x16, 0x80, 0x0c, 0xe9, 0x2c, 0x16, 0x00, + 0xef, 0x29, 0x16, 0x00, 0xf5, 0x28, 0x16, 0x40, 0xe5, 0x2b, 0x16, 0x40, + 0xe5, 0x53, 0x14, 0x00, 0xae, 0x01, 0xff, 0x45, 0xb0, 0xe5, 0xee, 0x18, + 0x00, 0x45, 0x4e, 0x05, 0xf5, 0x18, 0x40, 0xe1, 0x66, 0x16, 0x00, 0xe5, + 0x63, 0x16, 0x80, 0x0c, 0xe9, 0x65, 0x16, 0x00, 0xef, 0x62, 0x16, 0x00, + 0xf5, 0x61, 0x16, 0x40, 0xe5, 0x64, 0x16, 0x40, 0xe9, 0x8a, 0x14, 0x40, + 0x0b, 0x7e, 0x9b, 0x58, 0x4b, 0x41, 0x9d, 0x3f, 0x15, 0x00, 0x09, 0x3a, + 0xbb, 0x01, 0xff, 0xe1, 0xb3, 0x15, 0x00, 0xe5, 0xb0, 0x15, 0x00, 0xe9, + 0xb1, 0x15, 0x00, 0xab, 0x2f, 0xae, 0x1d, 0xef, 0xb2, 0x15, 0x00, 0xf3, + 0x08, 0x15, 0x00, 0xf7, 0x7f, 0x16, 0xc0, 0x00, 0xe1, 0xb7, 0x15, 0x00, + 0xe5, 0xb4, 0x15, 0x00, 0xe9, 0xb5, 0x15, 0x00, 0xef, 0xb6, 0x15, 0x40, + 0xe1, 0xbb, 0x15, 0x00, 0xe5, 0xb8, 0x15, 0x00, 0xe9, 0xb9, 0x15, 0x00, + 0xef, 0xba, 0x15, 0x40, 0xe1, 0xbf, 0x15, 0x00, 0xe5, 0xbc, 0x15, 0x00, + 0xe9, 0xbd, 0x15, 0x00, 0xef, 0xbe, 0x15, 0x40, 0xec, 0xf3, 0x18, 0x00, + 0xf2, 0xf4, 0x18, 0x40, 0xe1, 0x0b, 0x14, 0x80, 0x1f, 0xe9, 0x1c, 0x14, + 0x80, 0x14, 0xee, 0x2e, 0x14, 0x00, 0x0a, 0xd1, 0xb1, 0x04, 0xf9, 0xb1, + 0x18, 0x40, 0xed, 0xbe, 0x14, 0x00, 0xf3, 0x06, 0x15, 0x40, 0x47, 0x4b, + 0xd7, 0xaf, 0x15, 0x40, 0xe9, 0x02, 0x14, 0x00, 0xf9, 0xb2, 0x18, 0x40, + 0x43, 0xdc, 0x01, 0xf7, 0xf4, 0x81, 0x06, 0x44, 0x2b, 0x30, 0xd5, 0xf3, + 0x41, 0x4b, 0x03, 0x98, 0xf8, 0xf4, 0x41, 0x45, 0x1c, 0x80, 0xc5, 0xf4, + 0x01, 0x49, 0x31, 0xbb, 0x19, 0xf9, 0x41, 0x45, 0xee, 0xe3, 0x06, 0x21, + 0x00, 0x45, 0x07, 0xdb, 0x24, 0x26, 0x40, 0xa1, 0xc3, 0x58, 0xa5, 0xce, + 0x4f, 0x09, 0x54, 0xb9, 0xe2, 0x4a, 0xa9, 0x84, 0x4a, 0xac, 0x8c, 0x34, + 0xaf, 0xdf, 0x22, 0xb2, 0xe9, 0x12, 0xb5, 0xc0, 0x0f, 0xb9, 0x01, 0xff, + 0x4d, 0x1e, 0x89, 0xff, 0xfe, 0x00, 0x17, 0x1e, 0x32, 0x01, 0xff, 0xa1, + 0xba, 0x0d, 0x02, 0x6d, 0x14, 0x80, 0x0d, 0xa4, 0xd9, 0x0b, 0xa5, 0xa0, + 0x0b, 0xa6, 0xf4, 0x09, 0xa7, 0x91, 0x09, 0xa9, 0xcc, 0x08, 0xab, 0xf4, + 0x06, 0xac, 0xbe, 0x06, 0xad, 0xc9, 0x05, 0x44, 0x61, 0xf1, 0x40, 0xd0, + 0x01, 0xaf, 0xfb, 0x04, 0xb0, 0xd4, 0x03, 0xb2, 0xc5, 0x03, 0xb3, 0xa3, + 0x02, 0xb4, 0x8b, 0x01, 0x02, 0xf5, 0x0a, 0x63, 0x4c, 0x0b, 0x97, 0x6a, + 0xd0, 0x01, 0xb9, 0x01, 0xff, 0x02, 0x0c, 0x1a, 0x1e, 0xb0, 0x01, 0xff, + 0xaf, 0x06, 0x44, 0xc3, 0x88, 0x50, 0xd0, 0x41, 0x46, 0x70, 0xdd, 0x0a, + 0xd0, 0x81, 0x06, 0x44, 0x69, 0xf2, 0x53, 0xd0, 0x41, 0x46, 0x00, 0xd8, + 0x0b, 0xd0, 0x41, 0x02, 0x92, 0x00, 0x28, 0x04, 0xe0, 0x21, 0x01, 0xff, + 0x51, 0x42, 0x58, 0xd4, 0xd0, 0x01, 0x55, 0x34, 0x3a, 0xd6, 0xd0, 0x01, + 0x5c, 0xbe, 0x18, 0xd5, 0xd0, 0x01, 0x03, 0x19, 0x01, 0x01, 0xff, 0x55, + 0x5a, 0x3b, 0xd7, 0xd0, 0x01, 0x48, 0x69, 0x34, 0xcd, 0xd0, 0x41, 0x43, + 0x14, 0x7a, 0x7d, 0xd0, 0x01, 0x44, 0xcf, 0x9f, 0x7c, 0xd0, 0x41, 0x04, + 0x41, 0xf2, 0x06, 0x43, 0x00, 0x54, 0x19, 0xd0, 0x41, 0x80, 0x06, 0x4a, + 0x5f, 0xab, 0x21, 0xd0, 0x41, 0x45, 0x01, 0xd8, 0x06, 0xd0, 0x01, 0x4b, + 0xe8, 0x7e, 0x05, 0xd0, 0x01, 0x43, 0x65, 0x54, 0x58, 0xd0, 0x41, 0xa5, + 0x80, 0x01, 0xa8, 0x52, 0x46, 0xe0, 0xdc, 0x27, 0xd0, 0x01, 0xb2, 0x01, + 0xff, 0xa9, 0x37, 0x05, 0x04, 0xb5, 0x01, 0xff, 0x47, 0x07, 0xd3, 0x6d, + 0xd0, 0x01, 0x02, 0x92, 0x00, 0x14, 0xb0, 0x06, 0x47, 0x10, 0xd6, 0x70, + 0xd0, 0x41, 0x4a, 0x36, 0xa1, 0x6e, 0xd0, 0x01, 0x48, 0xe8, 0xca, 0x6b, + 0xd0, 0x41, 0xa1, 0x06, 0x43, 0x65, 0x54, 0x63, 0xd0, 0x41, 0x43, 0xcf, + 0x1c, 0x43, 0xd0, 0x01, 0x47, 0x62, 0xab, 0x36, 0xd0, 0x41, 0xe1, 0x30, + 0xd0, 0x01, 0x46, 0x26, 0xdc, 0x96, 0xd0, 0x01, 0x43, 0xbb, 0x04, 0x87, + 0xd0, 0x41, 0xa5, 0x06, 0x43, 0xe7, 0x05, 0x14, 0xd0, 0x41, 0x42, 0x6c, + 0x00, 0x2d, 0xd0, 0x81, 0x06, 0x4d, 0x41, 0x88, 0x79, 0xd0, 0x41, 0x47, + 0x18, 0xcd, 0x78, 0xd0, 0x01, 0x08, 0xa0, 0xcb, 0x01, 0xff, 0x42, 0x60, + 0x03, 0x76, 0xd0, 0x01, 0x42, 0xc7, 0x2f, 0x77, 0xd0, 0x41, 0x44, 0xc6, + 0x5a, 0x0f, 0xd0, 0x01, 0x45, 0xcc, 0x18, 0x31, 0xd0, 0x01, 0x46, 0xac, + 0xe0, 0x88, 0xd0, 0x41, 0x47, 0x48, 0xcf, 0x1d, 0xd0, 0x01, 0x45, 0xdd, + 0xe5, 0x29, 0xd0, 0x81, 0x8b, 0x01, 0x08, 0xf8, 0xc6, 0x49, 0xb4, 0x2e, + 0xb9, 0x01, 0xff, 0xae, 0x0d, 0x43, 0x8b, 0x06, 0x66, 0xd0, 0xc1, 0x00, + 0x44, 0xc6, 0xdd, 0x08, 0xd0, 0x41, 0x05, 0x20, 0xe4, 0x06, 0x44, 0x0c, + 0xd4, 0x13, 0xd0, 0x41, 0x48, 0x61, 0xab, 0x2a, 0xd0, 0x01, 0x4c, 0xfb, + 0x91, 0x2b, 0xd0, 0x01, 0x43, 0x65, 0x54, 0x65, 0xd0, 0x41, 0x45, 0x8e, + 0xe4, 0x7e, 0xd0, 0x81, 0x0c, 0x44, 0xbf, 0x1f, 0xe8, 0xd0, 0x01, 0x4a, + 0xe7, 0xaf, 0x44, 0xd0, 0x41, 0x49, 0x44, 0xb4, 0x1f, 0xd0, 0x41, 0x46, + 0xe6, 0xd9, 0xe2, 0xd0, 0x81, 0x1f, 0x47, 0x4f, 0xd6, 0xde, 0xd0, 0xc1, + 0x00, 0x80, 0x01, 0xff, 0x47, 0x67, 0xd0, 0xdf, 0xd0, 0x01, 0xb4, 0x01, + 0xff, 0x49, 0xb2, 0xb8, 0xe1, 0xd0, 0x01, 0x47, 0x61, 0xd5, 0xe0, 0xd0, + 0x41, 0x80, 0x01, 0xff, 0x47, 0x67, 0xd0, 0xe3, 0xd0, 0x01, 0xb4, 0x01, + 0xff, 0x49, 0xb2, 0xb8, 0xe5, 0xd0, 0x01, 0x47, 0x61, 0xd5, 0xe4, 0xd0, + 0x41, 0x44, 0x1a, 0x89, 0x69, 0xd0, 0x41, 0x46, 0xc8, 0xd9, 0x3c, 0xd0, + 0x01, 0x44, 0x0c, 0xd4, 0x25, 0xd0, 0x41, 0x02, 0x17, 0x00, 0x70, 0xa5, + 0x43, 0x06, 0xb6, 0xdc, 0x33, 0x02, 0x5a, 0x03, 0x01, 0xff, 0x05, 0xea, + 0xca, 0x0d, 0xac, 0x01, 0xff, 0xe9, 0x00, 0xd0, 0x01, 0x42, 0x10, 0x00, + 0x17, 0xd0, 0x41, 0x47, 0x07, 0xd3, 0x6c, 0xd0, 0x01, 0xee, 0x39, 0xd0, + 0x81, 0x0c, 0x4b, 0x35, 0xa1, 0x6f, 0xd0, 0x01, 0x47, 0x10, 0xd6, 0x71, + 0xd0, 0x41, 0x44, 0x1a, 0x89, 0x5a, 0xd0, 0x41, 0x48, 0x61, 0xab, 0x26, + 0xd0, 0x01, 0x43, 0x65, 0x54, 0x59, 0xd0, 0x41, 0x46, 0xa0, 0xdd, 0x38, + 0xd0, 0x81, 0x1e, 0x49, 0x42, 0xa1, 0x02, 0xd0, 0x01, 0x03, 0x71, 0x2d, + 0x01, 0xff, 0x42, 0x6c, 0x00, 0x41, 0xd0, 0x01, 0xb4, 0x01, 0xff, 0xe9, + 0x49, 0xd0, 0x01, 0x49, 0xfc, 0xbc, 0x4b, 0xd0, 0x41, 0x44, 0x1a, 0x89, + 0x4d, 0xd0, 0x41, 0x02, 0x6d, 0x00, 0x06, 0x45, 0x45, 0xe7, 0x1e, 0xd0, + 0x41, 0x07, 0xa7, 0xce, 0x16, 0x46, 0xc4, 0xdd, 0x09, 0xd0, 0xc1, 0x00, + 0x80, 0x01, 0xff, 0x48, 0x61, 0xab, 0x3e, 0xd0, 0x01, 0x43, 0x65, 0x54, + 0x5e, 0xd0, 0x41, 0x48, 0x61, 0xab, 0x3d, 0xd0, 0x01, 0x43, 0x65, 0x54, + 0x5f, 0xd0, 0x41, 0x06, 0xb8, 0xdd, 0x35, 0x45, 0x71, 0xe8, 0x5b, 0xd0, + 0x01, 0x04, 0x31, 0xf3, 0x11, 0x09, 0xa9, 0xc1, 0x01, 0xff, 0x48, 0x61, + 0xab, 0x2c, 0xd0, 0x01, 0x43, 0x65, 0x54, 0x75, 0xd0, 0x41, 0x80, 0x06, + 0x4a, 0x5f, 0xab, 0x20, 0xd0, 0x41, 0x45, 0x01, 0xd8, 0x04, 0xd0, 0x01, + 0x4b, 0xe8, 0x7e, 0x03, 0xd0, 0x01, 0x43, 0x65, 0x54, 0x48, 0xd0, 0x41, + 0x48, 0x61, 0xab, 0x15, 0xd0, 0x01, 0x43, 0x65, 0x54, 0x47, 0xd0, 0x41, + 0x08, 0x98, 0xc3, 0x06, 0x4a, 0xa5, 0xab, 0x57, 0xd0, 0x41, 0x05, 0x34, + 0xe4, 0x58, 0x4e, 0xbf, 0x76, 0xa4, 0xd0, 0x01, 0x4d, 0x0e, 0x85, 0xaa, + 0xd0, 0x01, 0xb0, 0x29, 0xb4, 0x06, 0x4b, 0xbb, 0xa4, 0xb1, 0xd0, 0x41, + 0x08, 0xb6, 0x7c, 0x11, 0x02, 0x0d, 0x00, 0x01, 0xff, 0x46, 0x4a, 0xa3, + 0xa7, 0xd0, 0x01, 0x49, 0xba, 0x7c, 0xa6, 0xd0, 0x41, 0x45, 0xc8, 0x76, + 0xa8, 0xd0, 0x01, 0x4d, 0x0e, 0x85, 0xa9, 0xd0, 0x41, 0x07, 0x9e, 0xd2, + 0x11, 0x04, 0xd0, 0x93, 0x01, 0xff, 0x47, 0xc6, 0x76, 0xa2, 0xd0, 0x01, + 0x4b, 0xbb, 0xa4, 0xb2, 0xd0, 0x41, 0x45, 0xc8, 0x76, 0xab, 0xd0, 0x01, + 0x4e, 0xb5, 0x7c, 0xb3, 0xd0, 0x41, 0x4e, 0xbf, 0x76, 0xa5, 0xd0, 0x01, + 0x4c, 0xcf, 0x93, 0xa3, 0xd0, 0x41, 0xa5, 0x06, 0x46, 0x08, 0xd3, 0x5d, + 0xd0, 0x41, 0x05, 0x6d, 0xe7, 0x06, 0x43, 0xf2, 0xc6, 0x2e, 0xd0, 0x41, + 0x4b, 0x5d, 0x9b, 0x8b, 0xd0, 0x01, 0x4c, 0x9b, 0x8e, 0x8a, 0xd0, 0x01, + 0x4f, 0x88, 0x6e, 0x8e, 0xd0, 0x01, 0xb4, 0x01, 0xff, 0x4f, 0xe4, 0x6c, + 0x8d, 0xd0, 0x01, 0x4c, 0xa7, 0x94, 0x8c, 0xd0, 0x41, 0x02, 0x8a, 0x00, + 0xba, 0x01, 0x06, 0x54, 0xdb, 0x70, 0x45, 0x12, 0x97, 0x24, 0xd0, 0x81, + 0x5a, 0xaf, 0x3f, 0xb2, 0x06, 0x46, 0x91, 0xd2, 0x61, 0xd0, 0x41, 0x04, + 0x21, 0xef, 0x06, 0x46, 0x3c, 0xdb, 0x0c, 0xd0, 0x41, 0xa1, 0x0f, 0xaf, + 0x01, 0xff, 0x48, 0xfd, 0xbc, 0x4c, 0xd0, 0x01, 0x48, 0xf0, 0xcc, 0x54, + 0xd0, 0x41, 0x80, 0x06, 0x42, 0x12, 0x00, 0x32, 0xd0, 0x41, 0xa1, 0x06, + 0x43, 0x65, 0x54, 0x83, 0xd0, 0x41, 0x43, 0xcf, 0x1c, 0x82, 0xd0, 0x01, + 0x47, 0x62, 0xab, 0x81, 0xd0, 0x41, 0x46, 0x8a, 0xde, 0x3a, 0xd0, 0x81, + 0x0c, 0x45, 0xf1, 0x61, 0x89, 0xd0, 0x01, 0x46, 0xff, 0xbc, 0x4a, 0xd0, + 0x41, 0x45, 0xad, 0xce, 0x42, 0xd0, 0x41, 0x80, 0x01, 0xff, 0x43, 0x14, + 0x7a, 0x7f, 0xd0, 0x01, 0x44, 0xcf, 0x9f, 0xf4, 0xd0, 0x41, 0x80, 0x27, + 0x42, 0x12, 0x00, 0x10, 0xd0, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x48, 0x61, + 0xab, 0x1c, 0xd0, 0x01, 0x04, 0x75, 0xf1, 0x01, 0xff, 0x43, 0x14, 0x7a, + 0x4e, 0xd0, 0x01, 0x44, 0xcf, 0x9f, 0xf2, 0xd0, 0x01, 0x44, 0x29, 0xf1, + 0xf0, 0xd0, 0x41, 0x48, 0x61, 0xab, 0x1b, 0xd0, 0x01, 0x04, 0x75, 0xf1, + 0x01, 0xff, 0x43, 0x14, 0x7a, 0x4f, 0xd0, 0x01, 0x44, 0xcf, 0x9f, 0xf3, + 0xd0, 0x01, 0x44, 0x29, 0xf1, 0xf1, 0xd0, 0x41, 0x03, 0x67, 0x12, 0x06, + 0x45, 0x09, 0xe7, 0x07, 0xd0, 0x41, 0x49, 0x01, 0xb5, 0x37, 0xd0, 0x01, + 0x43, 0x5d, 0x07, 0x7a, 0xd0, 0x41, 0x46, 0x70, 0xda, 0x3f, 0xd0, 0x01, + 0x02, 0x7d, 0x02, 0x1a, 0xb3, 0x01, 0xff, 0x55, 0x0e, 0x39, 0xac, 0xd0, + 0x01, 0x03, 0xb6, 0x00, 0x01, 0xff, 0x48, 0x61, 0xab, 0x1a, 0xd0, 0x01, + 0x43, 0x65, 0x54, 0x46, 0xd0, 0x41, 0x47, 0x59, 0xd0, 0x98, 0xd0, 0x01, + 0xa6, 0x01, 0xff, 0x44, 0xef, 0x6c, 0xb7, 0xd0, 0x01, 0x04, 0x4c, 0x2a, + 0x01, 0xff, 0xe1, 0x35, 0xd0, 0x01, 0x42, 0x10, 0x00, 0xb8, 0xd0, 0x41, + 0x06, 0x4e, 0xdb, 0x50, 0x02, 0x0c, 0x00, 0x06, 0x4b, 0x48, 0xa2, 0x45, + 0xd0, 0x41, 0x02, 0x06, 0x14, 0x11, 0x0a, 0xe5, 0xb1, 0x01, 0xff, 0x46, + 0x19, 0xcd, 0xb4, 0xd0, 0x01, 0x47, 0x60, 0xd0, 0xb5, 0xd0, 0x41, 0x02, + 0x92, 0x00, 0x06, 0x49, 0xb4, 0x80, 0x72, 0xd0, 0x41, 0x48, 0x61, 0xab, + 0x16, 0xd0, 0x01, 0x04, 0x75, 0xf1, 0x11, 0x0e, 0x8e, 0x69, 0x01, 0xff, + 0x48, 0x4e, 0xb6, 0x90, 0xd0, 0x01, 0x45, 0x48, 0xb4, 0x91, 0xd0, 0x41, + 0x43, 0x14, 0x7a, 0x8f, 0xd0, 0x01, 0x44, 0xcf, 0x9f, 0xf5, 0xd0, 0x41, + 0x46, 0xf4, 0xda, 0xd8, 0xd0, 0x01, 0x46, 0x5d, 0x34, 0xd9, 0xd0, 0x41, + 0x09, 0x06, 0xb6, 0x92, 0x01, 0x5a, 0x32, 0x20, 0xc5, 0xd0, 0x01, 0x06, + 0xbf, 0x40, 0x01, 0xff, 0x48, 0x61, 0xab, 0x34, 0xd0, 0x81, 0x7a, 0x0a, + 0x43, 0xa9, 0x45, 0x54, 0x1c, 0x42, 0xcc, 0xd0, 0x01, 0x56, 0x5b, 0x34, + 0xcb, 0xd0, 0x01, 0x0f, 0x1d, 0x70, 0x29, 0xae, 0x1b, 0x08, 0x38, 0x20, + 0x01, 0xff, 0x07, 0x40, 0x20, 0x06, 0x4b, 0xfa, 0x9a, 0xbe, 0xd0, 0x41, + 0x46, 0x46, 0xe0, 0xc6, 0xd0, 0x01, 0x45, 0x47, 0x20, 0xc5, 0xd0, 0x41, + 0x49, 0x3c, 0xb6, 0xbc, 0xd0, 0x01, 0x45, 0xf6, 0xe5, 0xc7, 0xd0, 0x41, + 0x48, 0x18, 0xc5, 0xc3, 0xd0, 0x01, 0x4a, 0xf3, 0xad, 0xc4, 0xd0, 0x41, + 0x42, 0x00, 0x00, 0xbd, 0xd0, 0x01, 0x42, 0x37, 0x01, 0xbf, 0xd0, 0x01, + 0xae, 0x0c, 0x42, 0xbb, 0x09, 0xba, 0xd0, 0x01, 0x42, 0x0f, 0x00, 0xc0, + 0xd0, 0x41, 0x43, 0x4b, 0x12, 0xbb, 0xd0, 0x01, 0x02, 0xf1, 0x03, 0x01, + 0xff, 0x43, 0x14, 0x7a, 0xc2, 0xd0, 0x01, 0x44, 0xcf, 0x9f, 0xc1, 0xd0, + 0x41, 0x4f, 0x42, 0x69, 0xb9, 0xd0, 0x41, 0x48, 0x18, 0xc5, 0xb0, 0xd0, + 0x01, 0x4a, 0xf3, 0xad, 0xaf, 0xd0, 0x01, 0x4b, 0x45, 0xa3, 0xae, 0xd0, + 0x41, 0x49, 0x16, 0xbb, 0x64, 0xd0, 0x01, 0x46, 0x88, 0xdd, 0x55, 0xd0, + 0x01, 0xae, 0x1c, 0x47, 0xa4, 0xd4, 0x68, 0xd0, 0x01, 0x06, 0x82, 0xe0, + 0x06, 0x4e, 0xe5, 0x7e, 0x0e, 0xd0, 0x41, 0x4d, 0xb0, 0x80, 0x74, 0xd0, + 0x01, 0x4b, 0x35, 0xa1, 0x60, 0xd0, 0x41, 0x54, 0xb4, 0x40, 0xb6, 0xd0, + 0x01, 0x47, 0x6e, 0xd0, 0x7b, 0xd0, 0x41, 0x45, 0x75, 0xe4, 0x01, 0xd0, + 0x01, 0xa9, 0x06, 0x42, 0xa9, 0x47, 0x2f, 0xd0, 0x41, 0xa1, 0x6d, 0x05, + 0xdf, 0x21, 0x3d, 0x4a, 0x83, 0xaa, 0xe7, 0xd0, 0x01, 0xa7, 0x0d, 0x43, + 0xbb, 0x04, 0x86, 0xd0, 0xc1, 0x00, 0x49, 0x60, 0xab, 0x80, 0xd0, 0x41, + 0x45, 0x27, 0xdc, 0x92, 0xd0, 0x81, 0x06, 0x48, 0x20, 0xca, 0xe6, 0xd0, + 0x41, 0x0f, 0x8d, 0x69, 0x01, 0xff, 0x09, 0x4e, 0xb6, 0x06, 0x45, 0x48, + 0xb4, 0x95, 0xd0, 0x41, 0x43, 0x14, 0x7a, 0x94, 0xd0, 0x01, 0x44, 0xcf, + 0x9f, 0x93, 0xd0, 0x41, 0x51, 0x42, 0x58, 0xd0, 0xd0, 0x01, 0x55, 0x34, + 0x3a, 0xd2, 0xd0, 0x01, 0x5c, 0xbe, 0x18, 0xd1, 0xd0, 0x01, 0xb4, 0x01, + 0xff, 0x4c, 0x65, 0x34, 0xcf, 0xd0, 0x01, 0x02, 0x0d, 0x00, 0x01, 0xff, + 0x55, 0x5a, 0x3b, 0xd3, 0xd0, 0x01, 0x48, 0x69, 0x34, 0xce, 0xd0, 0x41, + 0x44, 0x5c, 0xd0, 0x99, 0xd0, 0x01, 0x06, 0x22, 0xe0, 0x01, 0xff, 0x06, + 0xce, 0xd9, 0x0c, 0x45, 0x01, 0xd8, 0xdc, 0xd0, 0x01, 0x47, 0x4f, 0xd6, + 0xdd, 0xd0, 0x41, 0x45, 0xc9, 0xe5, 0xdb, 0xd0, 0x01, 0x44, 0x3e, 0x95, + 0xda, 0xd0, 0x41, 0x04, 0x8b, 0x65, 0x27, 0x07, 0x0a, 0xd4, 0x17, 0x04, + 0x55, 0xf2, 0x01, 0xff, 0x46, 0x6a, 0xdd, 0xc9, 0xd0, 0x01, 0x46, 0xfe, + 0xdf, 0xca, 0xd0, 0x01, 0x45, 0xb8, 0xec, 0xc8, 0xd0, 0x41, 0x48, 0x61, + 0xab, 0x3b, 0xd0, 0x01, 0x43, 0x65, 0x54, 0x67, 0xd0, 0x41, 0xe9, 0x56, + 0xd0, 0x01, 0x42, 0x10, 0x00, 0x18, 0xd0, 0x41, 0x05, 0xaf, 0xe6, 0xb3, + 0x01, 0xae, 0x99, 0x01, 0xb0, 0x40, 0xb2, 0x01, 0xff, 0x02, 0x06, 0x14, + 0x2f, 0x06, 0x76, 0xdd, 0x01, 0xff, 0x42, 0x00, 0x00, 0xec, 0xd0, 0x01, + 0x42, 0x24, 0x02, 0xeb, 0xd0, 0x01, 0x42, 0x37, 0x01, 0xed, 0xd0, 0x01, + 0x42, 0x51, 0x03, 0xef, 0xd0, 0x01, 0x42, 0xbb, 0x09, 0xe9, 0xd0, 0x01, + 0x43, 0xa1, 0x2d, 0xea, 0xd0, 0x01, 0x42, 0x0f, 0x00, 0xee, 0xd0, 0x41, + 0xee, 0x97, 0xd0, 0x01, 0x49, 0xb4, 0x80, 0x73, 0xd0, 0x41, 0x05, 0x23, + 0xe6, 0x47, 0x42, 0xc3, 0x01, 0x85, 0xd0, 0x01, 0xaf, 0x01, 0xff, 0x06, + 0xe2, 0xda, 0x2e, 0x06, 0x28, 0xe0, 0x06, 0x45, 0xa3, 0x53, 0x23, 0xd0, + 0x41, 0x02, 0xf1, 0x03, 0x14, 0xf3, 0x11, 0xd0, 0xc1, 0x00, 0x80, 0x01, + 0xff, 0x45, 0x01, 0xd8, 0x12, 0xd0, 0x01, 0x43, 0x65, 0x54, 0x51, 0xd0, + 0x41, 0x4d, 0x11, 0x89, 0x52, 0xd0, 0x01, 0x50, 0x13, 0x39, 0xad, 0xd0, + 0x41, 0x48, 0x61, 0xab, 0x22, 0xd0, 0x01, 0x43, 0x65, 0x54, 0x84, 0xd0, + 0x41, 0x4a, 0xe9, 0x7e, 0x0d, 0xd0, 0x01, 0x46, 0x6c, 0xe1, 0x33, 0xd0, + 0x41, 0x4a, 0x03, 0xa8, 0x28, 0xd0, 0x01, 0x06, 0x94, 0xe0, 0x01, 0xff, + 0x47, 0x90, 0xd2, 0x62, 0xd0, 0x01, 0x42, 0x6c, 0x00, 0x5c, 0xd0, 0x41, + 0x03, 0x33, 0x13, 0x2f, 0x04, 0x26, 0xdc, 0x21, 0x02, 0x2a, 0x02, 0x11, + 0x05, 0x01, 0xea, 0x01, 0xff, 0x44, 0x15, 0xef, 0x9a, 0xd0, 0x01, 0x45, + 0xb4, 0xe6, 0xa1, 0xd0, 0x41, 0x42, 0x5a, 0x03, 0x9e, 0xd0, 0x01, 0x44, + 0x19, 0x01, 0x9d, 0xd0, 0x41, 0xe9, 0x9f, 0xd0, 0x01, 0x45, 0xa7, 0xe9, + 0xa0, 0xd0, 0x41, 0xe9, 0x9c, 0xd0, 0x01, 0x45, 0xa7, 0xe9, 0x9b, 0xd0, + 0x41, 0x04, 0x78, 0x7c, 0x97, 0x03, 0x44, 0x66, 0x09, 0xa3, 0xfa, 0x01, + 0xe7, 0x1b, 0xf4, 0x81, 0xd2, 0x01, 0x04, 0x41, 0xf0, 0x57, 0x53, 0x29, + 0x4a, 0xd7, 0xf3, 0x01, 0x02, 0x60, 0x07, 0x2d, 0x45, 0x88, 0xea, 0x2f, + 0xf3, 0x01, 0xf3, 0x8c, 0xf6, 0x81, 0x0d, 0x44, 0xee, 0x05, 0xc8, 0xf9, + 0xc1, 0x00, 0x43, 0x43, 0xf4, 0x8b, 0xf9, 0x41, 0x45, 0x54, 0x03, 0x8f, + 0xf6, 0x01, 0xb4, 0x01, 0xff, 0x4e, 0xbb, 0x34, 0x64, 0xf4, 0x01, 0x4f, + 0xed, 0x72, 0x65, 0xf4, 0x41, 0x42, 0xed, 0x05, 0x22, 0x20, 0x80, 0x13, + 0x44, 0x60, 0x2d, 0x6b, 0xf5, 0x81, 0x06, 0x44, 0x9d, 0xf2, 0xce, 0x25, + 0x40, 0x51, 0x76, 0x57, 0x6c, 0xf5, 0x41, 0x49, 0x7d, 0x1d, 0x19, 0x22, + 0x40, 0x07, 0xec, 0x05, 0x0d, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xe9, 0x52, + 0x17, 0x00, 0xf5, 0x53, 0x17, 0x40, 0xe1, 0x40, 0x17, 0x00, 0x42, 0x16, + 0x00, 0x4a, 0x17, 0x00, 0x42, 0xf0, 0x10, 0x47, 0x17, 0x00, 0x42, 0x24, + 0x02, 0x44, 0x17, 0x00, 0x42, 0x22, 0x00, 0x51, 0x17, 0x00, 0xe9, 0x41, + 0x17, 0x00, 0x42, 0x1b, 0x02, 0x43, 0x17, 0x00, 0x42, 0x74, 0x00, 0x4e, + 0x17, 0x00, 0x42, 0x6c, 0x00, 0x4b, 0x17, 0x00, 0xae, 0x28, 0x42, 0xbb, + 0x09, 0x49, 0x17, 0x00, 0x42, 0x71, 0x00, 0x4d, 0x17, 0x00, 0x42, 0x40, + 0x06, 0x50, 0x17, 0x00, 0x42, 0x12, 0x00, 0x46, 0x17, 0x00, 0xf5, 0x42, + 0x17, 0x00, 0x42, 0xa9, 0x01, 0x4f, 0x17, 0x00, 0x42, 0xbc, 0x22, 0x4c, + 0x17, 0x40, 0xe1, 0x48, 0x17, 0x00, 0x42, 0x24, 0x02, 0x45, 0x17, 0x40, + 0x06, 0xbd, 0x83, 0x01, 0xff, 0x4e, 0x4b, 0x77, 0x1f, 0x1a, 0x00, 0x07, + 0xec, 0x05, 0x21, 0x47, 0x73, 0xd4, 0x1e, 0x1a, 0x00, 0x0b, 0x40, 0x77, + 0x01, 0xff, 0x42, 0x93, 0x0f, 0x1b, 0x1a, 0x00, 0xe5, 0x19, 0x1a, 0x00, + 0xe9, 0x17, 0x1a, 0x00, 0xef, 0x1a, 0x1a, 0x00, 0xf5, 0x18, 0x1a, 0x40, + 0xe1, 0x15, 0x1a, 0x00, 0x42, 0x16, 0x00, 0x05, 0x1a, 0x00, 0x42, 0x37, + 0x00, 0x0c, 0x1a, 0x00, 0x42, 0xf0, 0x10, 0x09, 0x1a, 0x00, 0x42, 0x24, + 0x02, 0x01, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x16, 0x1a, 0x00, 0x42, 0x56, + 0x19, 0x0d, 0x1a, 0x00, 0x42, 0x1b, 0x02, 0x00, 0x1a, 0x00, 0x42, 0x74, + 0x00, 0x12, 0x1a, 0x00, 0xad, 0x49, 0xae, 0x24, 0x42, 0xbb, 0x09, 0x04, + 0x1a, 0x00, 0x42, 0x71, 0x00, 0x11, 0x1a, 0x00, 0x42, 0x40, 0x06, 0x14, + 0x1a, 0x00, 0x42, 0x12, 0x00, 0x08, 0x1a, 0x00, 0x42, 0xf5, 0x0a, 0x13, + 0x1a, 0x00, 0x42, 0xbc, 0x22, 0x10, 0x1a, 0x40, 0xe1, 0x0a, 0x1a, 0x00, + 0xa7, 0x13, 0x42, 0x71, 0x00, 0x0b, 0x1a, 0x00, 0xb9, 0x01, 0xff, 0xe1, + 0x0e, 0x1a, 0x00, 0x42, 0x37, 0x00, 0x0f, 0x1a, 0x40, 0xe1, 0x02, 0x1a, + 0x00, 0x42, 0x1b, 0x02, 0x03, 0x1a, 0x40, 0xe1, 0x06, 0x1a, 0x00, 0x42, + 0xbb, 0x09, 0x07, 0x1a, 0x40, 0x44, 0x57, 0x52, 0xcb, 0xf9, 0x01, 0xf3, + 0xe7, 0xfa, 0x41, 0xa1, 0x6a, 0xa5, 0x50, 0xa9, 0x2b, 0xaf, 0x01, 0xff, + 0x45, 0x0b, 0xe5, 0x66, 0xf9, 0x01, 0x04, 0x60, 0xa8, 0x0c, 0x42, 0x14, + 0x05, 0xf9, 0xf9, 0x01, 0x48, 0x78, 0xcc, 0x0e, 0xf9, 0x41, 0x43, 0x16, + 0x00, 0xa6, 0x00, 0x00, 0x5b, 0xad, 0x1a, 0x8b, 0x23, 0x00, 0x45, 0xac, + 0x21, 0x94, 0xf4, 0x41, 0x42, 0x36, 0x01, 0xf1, 0xf9, 0x01, 0xa4, 0x0f, + 0x02, 0x69, 0x00, 0x01, 0xff, 0x44, 0x59, 0xef, 0xbc, 0xf4, 0x01, 0xf3, + 0x72, 0xfa, 0x41, 0x4b, 0x68, 0x9b, 0x70, 0xf4, 0x01, 0x4b, 0x4f, 0x9c, + 0x09, 0xf3, 0x41, 0xa1, 0x06, 0x42, 0x32, 0x00, 0xd8, 0x02, 0x40, 0xe4, + 0x5e, 0xf3, 0x01, 0x50, 0x56, 0x64, 0x82, 0x00, 0x00, 0x4a, 0x59, 0xb1, + 0x31, 0xf9, 0x41, 0x04, 0x49, 0xf0, 0x98, 0x09, 0xa9, 0x01, 0xff, 0x0c, + 0x5f, 0x91, 0x04, 0xee, 0xe0, 0xf9, 0x41, 0x45, 0x45, 0xc0, 0x00, 0x28, + 0x00, 0x05, 0xa1, 0xe5, 0x01, 0xff, 0xd1, 0x01, 0x28, 0x80, 0xbe, 0x04, + 0xd2, 0x02, 0x28, 0x80, 0x9c, 0x02, 0xd3, 0x04, 0x28, 0x80, 0x8b, 0x01, + 0xd4, 0x08, 0x28, 0x80, 0x43, 0xd5, 0x10, 0x28, 0x80, 0x1f, 0xd6, 0x20, + 0x28, 0x80, 0x0d, 0xd7, 0x40, 0x28, 0x80, 0x04, 0xd8, 0x80, 0x28, 0x40, + 0xd8, 0xc0, 0x28, 0x40, 0xd7, 0x60, 0x28, 0x80, 0x04, 0xd8, 0xa0, 0x28, + 0x40, 0xd8, 0xe0, 0x28, 0x40, 0xd6, 0x30, 0x28, 0x80, 0x0d, 0xd7, 0x50, + 0x28, 0x80, 0x04, 0xd8, 0x90, 0x28, 0x40, 0xd8, 0xd0, 0x28, 0x40, 0xd7, + 0x70, 0x28, 0x80, 0x04, 0xd8, 0xb0, 0x28, 0x40, 0xd8, 0xf0, 0x28, 0x40, + 0xd5, 0x18, 0x28, 0x80, 0x1f, 0xd6, 0x28, 0x28, 0x80, 0x0d, 0xd7, 0x48, + 0x28, 0x80, 0x04, 0xd8, 0x88, 0x28, 0x40, 0xd8, 0xc8, 0x28, 0x40, 0xd7, + 0x68, 0x28, 0x80, 0x04, 0xd8, 0xa8, 0x28, 0x40, 0xd8, 0xe8, 0x28, 0x40, + 0xd6, 0x38, 0x28, 0x80, 0x0d, 0xd7, 0x58, 0x28, 0x80, 0x04, 0xd8, 0x98, + 0x28, 0x40, 0xd8, 0xd8, 0x28, 0x40, 0xd7, 0x78, 0x28, 0x80, 0x04, 0xd8, + 0xb8, 0x28, 0x40, 0xd8, 0xf8, 0x28, 0x40, 0xd4, 0x0c, 0x28, 0x80, 0x43, + 0xd5, 0x14, 0x28, 0x80, 0x1f, 0xd6, 0x24, 0x28, 0x80, 0x0d, 0xd7, 0x44, + 0x28, 0x80, 0x04, 0xd8, 0x84, 0x28, 0x40, 0xd8, 0xc4, 0x28, 0x40, 0xd7, + 0x64, 0x28, 0x80, 0x04, 0xd8, 0xa4, 0x28, 0x40, 0xd8, 0xe4, 0x28, 0x40, + 0xd6, 0x34, 0x28, 0x80, 0x0d, 0xd7, 0x54, 0x28, 0x80, 0x04, 0xd8, 0x94, + 0x28, 0x40, 0xd8, 0xd4, 0x28, 0x40, 0xd7, 0x74, 0x28, 0x80, 0x04, 0xd8, + 0xb4, 0x28, 0x40, 0xd8, 0xf4, 0x28, 0x40, 0xd5, 0x1c, 0x28, 0x80, 0x1f, + 0xd6, 0x2c, 0x28, 0x80, 0x0d, 0xd7, 0x4c, 0x28, 0x80, 0x04, 0xd8, 0x8c, + 0x28, 0x40, 0xd8, 0xcc, 0x28, 0x40, 0xd7, 0x6c, 0x28, 0x80, 0x04, 0xd8, + 0xac, 0x28, 0x40, 0xd8, 0xec, 0x28, 0x40, 0xd6, 0x3c, 0x28, 0x80, 0x0d, + 0xd7, 0x5c, 0x28, 0x80, 0x04, 0xd8, 0x9c, 0x28, 0x40, 0xd8, 0xdc, 0x28, + 0x40, 0xd7, 0x7c, 0x28, 0x80, 0x04, 0xd8, 0xbc, 0x28, 0x40, 0xd8, 0xfc, + 0x28, 0x40, 0xd3, 0x06, 0x28, 0x80, 0x8b, 0x01, 0xd4, 0x0a, 0x28, 0x80, + 0x43, 0xd5, 0x12, 0x28, 0x80, 0x1f, 0xd6, 0x22, 0x28, 0x80, 0x0d, 0xd7, + 0x42, 0x28, 0x80, 0x04, 0xd8, 0x82, 0x28, 0x40, 0xd8, 0xc2, 0x28, 0x40, + 0xd7, 0x62, 0x28, 0x80, 0x04, 0xd8, 0xa2, 0x28, 0x40, 0xd8, 0xe2, 0x28, + 0x40, 0xd6, 0x32, 0x28, 0x80, 0x0d, 0xd7, 0x52, 0x28, 0x80, 0x04, 0xd8, + 0x92, 0x28, 0x40, 0xd8, 0xd2, 0x28, 0x40, 0xd7, 0x72, 0x28, 0x80, 0x04, + 0xd8, 0xb2, 0x28, 0x40, 0xd8, 0xf2, 0x28, 0x40, 0xd5, 0x1a, 0x28, 0x80, + 0x1f, 0xd6, 0x2a, 0x28, 0x80, 0x0d, 0xd7, 0x4a, 0x28, 0x80, 0x04, 0xd8, + 0x8a, 0x28, 0x40, 0xd8, 0xca, 0x28, 0x40, 0xd7, 0x6a, 0x28, 0x80, 0x04, + 0xd8, 0xaa, 0x28, 0x40, 0xd8, 0xea, 0x28, 0x40, 0xd6, 0x3a, 0x28, 0x80, + 0x0d, 0xd7, 0x5a, 0x28, 0x80, 0x04, 0xd8, 0x9a, 0x28, 0x40, 0xd8, 0xda, + 0x28, 0x40, 0xd7, 0x7a, 0x28, 0x80, 0x04, 0xd8, 0xba, 0x28, 0x40, 0xd8, + 0xfa, 0x28, 0x40, 0xd4, 0x0e, 0x28, 0x80, 0x43, 0xd5, 0x16, 0x28, 0x80, + 0x1f, 0xd6, 0x26, 0x28, 0x80, 0x0d, 0xd7, 0x46, 0x28, 0x80, 0x04, 0xd8, + 0x86, 0x28, 0x40, 0xd8, 0xc6, 0x28, 0x40, 0xd7, 0x66, 0x28, 0x80, 0x04, + 0xd8, 0xa6, 0x28, 0x40, 0xd8, 0xe6, 0x28, 0x40, 0xd6, 0x36, 0x28, 0x80, + 0x0d, 0xd7, 0x56, 0x28, 0x80, 0x04, 0xd8, 0x96, 0x28, 0x40, 0xd8, 0xd6, + 0x28, 0x40, 0xd7, 0x76, 0x28, 0x80, 0x04, 0xd8, 0xb6, 0x28, 0x40, 0xd8, + 0xf6, 0x28, 0x40, 0xd5, 0x1e, 0x28, 0x80, 0x1f, 0xd6, 0x2e, 0x28, 0x80, + 0x0d, 0xd7, 0x4e, 0x28, 0x80, 0x04, 0xd8, 0x8e, 0x28, 0x40, 0xd8, 0xce, + 0x28, 0x40, 0xd7, 0x6e, 0x28, 0x80, 0x04, 0xd8, 0xae, 0x28, 0x40, 0xd8, + 0xee, 0x28, 0x40, 0xd6, 0x3e, 0x28, 0x80, 0x0d, 0xd7, 0x5e, 0x28, 0x80, + 0x04, 0xd8, 0x9e, 0x28, 0x40, 0xd8, 0xde, 0x28, 0x40, 0xd7, 0x7e, 0x28, + 0x80, 0x04, 0xd8, 0xbe, 0x28, 0x40, 0xd8, 0xfe, 0x28, 0x40, 0xd2, 0x03, + 0x28, 0x80, 0x9c, 0x02, 0xd3, 0x05, 0x28, 0x80, 0x8b, 0x01, 0xd4, 0x09, + 0x28, 0x80, 0x43, 0xd5, 0x11, 0x28, 0x80, 0x1f, 0xd6, 0x21, 0x28, 0x80, + 0x0d, 0xd7, 0x41, 0x28, 0x80, 0x04, 0xd8, 0x81, 0x28, 0x40, 0xd8, 0xc1, + 0x28, 0x40, 0xd7, 0x61, 0x28, 0x80, 0x04, 0xd8, 0xa1, 0x28, 0x40, 0xd8, + 0xe1, 0x28, 0x40, 0xd6, 0x31, 0x28, 0x80, 0x0d, 0xd7, 0x51, 0x28, 0x80, + 0x04, 0xd8, 0x91, 0x28, 0x40, 0xd8, 0xd1, 0x28, 0x40, 0xd7, 0x71, 0x28, + 0x80, 0x04, 0xd8, 0xb1, 0x28, 0x40, 0xd8, 0xf1, 0x28, 0x40, 0xd5, 0x19, + 0x28, 0x80, 0x1f, 0xd6, 0x29, 0x28, 0x80, 0x0d, 0xd7, 0x49, 0x28, 0x80, + 0x04, 0xd8, 0x89, 0x28, 0x40, 0xd8, 0xc9, 0x28, 0x40, 0xd7, 0x69, 0x28, + 0x80, 0x04, 0xd8, 0xa9, 0x28, 0x40, 0xd8, 0xe9, 0x28, 0x40, 0xd6, 0x39, + 0x28, 0x80, 0x0d, 0xd7, 0x59, 0x28, 0x80, 0x04, 0xd8, 0x99, 0x28, 0x40, + 0xd8, 0xd9, 0x28, 0x40, 0xd7, 0x79, 0x28, 0x80, 0x04, 0xd8, 0xb9, 0x28, + 0x40, 0xd8, 0xf9, 0x28, 0x40, 0xd4, 0x0d, 0x28, 0x80, 0x43, 0xd5, 0x15, + 0x28, 0x80, 0x1f, 0xd6, 0x25, 0x28, 0x80, 0x0d, 0xd7, 0x45, 0x28, 0x80, + 0x04, 0xd8, 0x85, 0x28, 0x40, 0xd8, 0xc5, 0x28, 0x40, 0xd7, 0x65, 0x28, + 0x80, 0x04, 0xd8, 0xa5, 0x28, 0x40, 0xd8, 0xe5, 0x28, 0x40, 0xd6, 0x35, + 0x28, 0x80, 0x0d, 0xd7, 0x55, 0x28, 0x80, 0x04, 0xd8, 0x95, 0x28, 0x40, + 0xd8, 0xd5, 0x28, 0x40, 0xd7, 0x75, 0x28, 0x80, 0x04, 0xd8, 0xb5, 0x28, + 0x40, 0xd8, 0xf5, 0x28, 0x40, 0xd5, 0x1d, 0x28, 0x80, 0x1f, 0xd6, 0x2d, + 0x28, 0x80, 0x0d, 0xd7, 0x4d, 0x28, 0x80, 0x04, 0xd8, 0x8d, 0x28, 0x40, + 0xd8, 0xcd, 0x28, 0x40, 0xd7, 0x6d, 0x28, 0x80, 0x04, 0xd8, 0xad, 0x28, + 0x40, 0xd8, 0xed, 0x28, 0x40, 0xd6, 0x3d, 0x28, 0x80, 0x0d, 0xd7, 0x5d, + 0x28, 0x80, 0x04, 0xd8, 0x9d, 0x28, 0x40, 0xd8, 0xdd, 0x28, 0x40, 0xd7, + 0x7d, 0x28, 0x80, 0x04, 0xd8, 0xbd, 0x28, 0x40, 0xd8, 0xfd, 0x28, 0x40, + 0xd3, 0x07, 0x28, 0x80, 0x8b, 0x01, 0xd4, 0x0b, 0x28, 0x80, 0x43, 0xd5, + 0x13, 0x28, 0x80, 0x1f, 0xd6, 0x23, 0x28, 0x80, 0x0d, 0xd7, 0x43, 0x28, + 0x80, 0x04, 0xd8, 0x83, 0x28, 0x40, 0xd8, 0xc3, 0x28, 0x40, 0xd7, 0x63, + 0x28, 0x80, 0x04, 0xd8, 0xa3, 0x28, 0x40, 0xd8, 0xe3, 0x28, 0x40, 0xd6, + 0x33, 0x28, 0x80, 0x0d, 0xd7, 0x53, 0x28, 0x80, 0x04, 0xd8, 0x93, 0x28, + 0x40, 0xd8, 0xd3, 0x28, 0x40, 0xd7, 0x73, 0x28, 0x80, 0x04, 0xd8, 0xb3, + 0x28, 0x40, 0xd8, 0xf3, 0x28, 0x40, 0xd5, 0x1b, 0x28, 0x80, 0x1f, 0xd6, + 0x2b, 0x28, 0x80, 0x0d, 0xd7, 0x4b, 0x28, 0x80, 0x04, 0xd8, 0x8b, 0x28, + 0x40, 0xd8, 0xcb, 0x28, 0x40, 0xd7, 0x6b, 0x28, 0x80, 0x04, 0xd8, 0xab, + 0x28, 0x40, 0xd8, 0xeb, 0x28, 0x40, 0xd6, 0x3b, 0x28, 0x80, 0x0d, 0xd7, + 0x5b, 0x28, 0x80, 0x04, 0xd8, 0x9b, 0x28, 0x40, 0xd8, 0xdb, 0x28, 0x40, + 0xd7, 0x7b, 0x28, 0x80, 0x04, 0xd8, 0xbb, 0x28, 0x40, 0xd8, 0xfb, 0x28, + 0x40, 0xd4, 0x0f, 0x28, 0x80, 0x43, 0xd5, 0x17, 0x28, 0x80, 0x1f, 0xd6, + 0x27, 0x28, 0x80, 0x0d, 0xd7, 0x47, 0x28, 0x80, 0x04, 0xd8, 0x87, 0x28, + 0x40, 0xd8, 0xc7, 0x28, 0x40, 0xd7, 0x67, 0x28, 0x80, 0x04, 0xd8, 0xa7, + 0x28, 0x40, 0xd8, 0xe7, 0x28, 0x40, 0xd6, 0x37, 0x28, 0x80, 0x0d, 0xd7, + 0x57, 0x28, 0x80, 0x04, 0xd8, 0x97, 0x28, 0x40, 0xd8, 0xd7, 0x28, 0x40, + 0xd7, 0x77, 0x28, 0x80, 0x04, 0xd8, 0xb7, 0x28, 0x40, 0xd8, 0xf7, 0x28, + 0x40, 0xd5, 0x1f, 0x28, 0x80, 0x1f, 0xd6, 0x2f, 0x28, 0x80, 0x0d, 0xd7, + 0x4f, 0x28, 0x80, 0x04, 0xd8, 0x8f, 0x28, 0x40, 0xd8, 0xcf, 0x28, 0x40, + 0xd7, 0x6f, 0x28, 0x80, 0x04, 0xd8, 0xaf, 0x28, 0x40, 0xd8, 0xef, 0x28, + 0x40, 0xd6, 0x3f, 0x28, 0x80, 0x0d, 0xd7, 0x5f, 0x28, 0x80, 0x04, 0xd8, + 0x9f, 0x28, 0x40, 0xd8, 0xdf, 0x28, 0x40, 0xd7, 0x7f, 0x28, 0x80, 0x04, + 0xd8, 0xbf, 0x28, 0x40, 0xd8, 0xff, 0x28, 0x40, 0xa4, 0x95, 0x05, 0x07, + 0xec, 0x05, 0xca, 0x02, 0x07, 0xff, 0x39, 0xb1, 0x01, 0x0c, 0x6d, 0x16, + 0x89, 0x01, 0x05, 0x5a, 0x03, 0x61, 0xb6, 0x01, 0xff, 0x45, 0xe4, 0x23, + 0x46, 0x10, 0x01, 0x0a, 0x41, 0x77, 0x01, 0xff, 0xa1, 0x45, 0x4e, 0x33, + 0x76, 0x39, 0x10, 0x01, 0xe5, 0x42, 0x10, 0x01, 0xe9, 0x3a, 0x10, 0x81, + 0x32, 0xef, 0x44, 0x10, 0x81, 0x20, 0xf5, 0x3c, 0x10, 0x81, 0x17, 0x08, + 0x22, 0xc1, 0x01, 0xff, 0xec, 0x40, 0x10, 0x81, 0x09, 0xf2, 0x3e, 0x10, + 0xc1, 0x00, 0xf2, 0x3f, 0x10, 0x41, 0xec, 0x41, 0x10, 0x41, 0xf5, 0x3d, + 0x10, 0x41, 0x0f, 0x4b, 0x6f, 0x01, 0xff, 0xe5, 0x73, 0x10, 0x01, 0xef, + 0x74, 0x10, 0x41, 0xe9, 0x3b, 0x10, 0x41, 0xe1, 0x38, 0x10, 0x01, 0xe9, + 0x43, 0x10, 0x01, 0xf5, 0x45, 0x10, 0x41, 0x48, 0x3c, 0x16, 0x01, 0x10, + 0x01, 0x4b, 0xd7, 0x23, 0x00, 0x10, 0x01, 0x4b, 0xe6, 0x9d, 0x03, 0x10, + 0x01, 0x50, 0x86, 0x65, 0x70, 0x10, 0x01, 0x4b, 0x6e, 0xa4, 0x04, 0x10, + 0x01, 0x47, 0xea, 0x4b, 0x02, 0x10, 0x41, 0x4c, 0x87, 0x8d, 0x4c, 0x10, + 0x01, 0x02, 0x3b, 0x01, 0x0f, 0xac, 0x01, 0xff, 0x43, 0xee, 0x07, 0x4b, + 0x10, 0x01, 0x44, 0xa6, 0x79, 0x4d, 0x10, 0x41, 0xf4, 0x49, 0x10, 0x01, + 0x48, 0xba, 0x41, 0x4a, 0x10, 0x41, 0x45, 0x12, 0x0b, 0x59, 0x10, 0x81, + 0x88, 0x01, 0xa6, 0x69, 0x46, 0xa0, 0x61, 0x7f, 0x10, 0x01, 0x44, 0xcf, + 0x2a, 0x5a, 0x10, 0x81, 0x56, 0x43, 0x0e, 0x0b, 0x52, 0x10, 0x81, 0x40, + 0xb3, 0x24, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x5b, 0x10, 0x01, 0xa8, + 0x0d, 0xb7, 0x01, 0xff, 0x44, 0xcb, 0x1d, 0x5c, 0x10, 0x01, 0xef, 0x53, + 0x10, 0x41, 0x44, 0x7b, 0x11, 0x5d, 0x10, 0x01, 0x43, 0x26, 0x01, 0x54, + 0x10, 0x41, 0x44, 0xc9, 0x1d, 0x58, 0x10, 0x81, 0x0d, 0x42, 0x01, 0x26, + 0x57, 0x10, 0xc1, 0x00, 0x42, 0x7d, 0x11, 0x60, 0x10, 0x41, 0x42, 0x7d, + 0x11, 0x61, 0x10, 0x41, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x64, 0x10, + 0x01, 0x48, 0x40, 0x5e, 0x65, 0x10, 0x41, 0x42, 0x7d, 0x11, 0x63, 0x10, + 0x41, 0xa9, 0x0f, 0xaf, 0x01, 0xff, 0x43, 0x7c, 0x11, 0x5e, 0x10, 0x01, + 0x42, 0x42, 0x00, 0x55, 0x10, 0x41, 0x43, 0x52, 0x4d, 0x5f, 0x10, 0x01, + 0x42, 0x32, 0x00, 0x56, 0x10, 0x41, 0xf9, 0x62, 0x10, 0x41, 0xe1, 0x05, + 0x10, 0x81, 0xb4, 0x02, 0xa2, 0xa7, 0x02, 0xa3, 0x9a, 0x02, 0xa4, 0x81, + 0x02, 0xe5, 0x0f, 0x10, 0x01, 0xa7, 0xf0, 0x01, 0x42, 0x22, 0x00, 0x33, + 0x10, 0x01, 0xe9, 0x07, 0x10, 0x81, 0xe0, 0x01, 0xaa, 0xd3, 0x01, 0xab, + 0xc6, 0x01, 0xac, 0xb9, 0x01, 0x42, 0x6c, 0x00, 0x2b, 0x10, 0x01, 0xae, + 0x9a, 0x01, 0xef, 0x11, 0x10, 0x81, 0x69, 0xb0, 0x5d, 0x42, 0x71, 0x00, + 0x2d, 0x10, 0x01, 0xb3, 0x45, 0xb4, 0x2c, 0xf5, 0x09, 0x10, 0x81, 0x23, + 0xb6, 0x06, 0x42, 0xbc, 0x22, 0x2c, 0x10, 0x41, 0xe1, 0x2f, 0x10, 0x01, + 0x07, 0x23, 0xc1, 0x01, 0xff, 0xec, 0x0d, 0x10, 0x81, 0x09, 0xf2, 0x0b, + 0x10, 0xc1, 0x00, 0xf2, 0x0c, 0x10, 0x41, 0xec, 0x0e, 0x10, 0x41, 0xf5, + 0x0a, 0x10, 0x41, 0xe1, 0x22, 0x10, 0x01, 0x42, 0x22, 0x00, 0x23, 0x10, + 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x1d, 0x10, 0x01, 0x42, 0x22, 0x00, 0x1e, + 0x10, 0x41, 0xe1, 0x32, 0x10, 0x01, 0x42, 0x22, 0x00, 0x30, 0x10, 0x01, + 0x42, 0x40, 0x06, 0x31, 0x10, 0x41, 0xe1, 0x27, 0x10, 0x01, 0x42, 0x22, + 0x00, 0x28, 0x10, 0x41, 0x09, 0x87, 0x65, 0x01, 0xff, 0x02, 0x60, 0x07, + 0x19, 0x44, 0x85, 0xf1, 0x37, 0x10, 0x01, 0x43, 0x8c, 0x41, 0x36, 0x10, + 0x01, 0x06, 0x33, 0x07, 0x01, 0xff, 0xe5, 0x71, 0x10, 0x01, 0xef, 0x72, + 0x10, 0x41, 0xe1, 0x75, 0x10, 0x01, 0x42, 0x74, 0x00, 0x35, 0x10, 0x41, + 0xe1, 0x26, 0x10, 0x01, 0x42, 0x24, 0x02, 0x17, 0x10, 0x01, 0x42, 0x2a, + 0x05, 0x21, 0x10, 0x01, 0x42, 0xbc, 0x22, 0x1c, 0x10, 0x41, 0xe1, 0x2e, + 0x10, 0x01, 0x42, 0x74, 0x00, 0x34, 0x10, 0x41, 0xe1, 0x13, 0x10, 0x01, + 0x42, 0x22, 0x00, 0x14, 0x10, 0x41, 0xe1, 0x1a, 0x10, 0x01, 0x42, 0x22, + 0x00, 0x1b, 0x10, 0x41, 0xe9, 0x08, 0x10, 0x41, 0xe1, 0x15, 0x10, 0x01, + 0x42, 0x22, 0x00, 0x16, 0x10, 0x41, 0xe1, 0x24, 0x10, 0x01, 0xa4, 0x06, + 0x42, 0x22, 0x00, 0x25, 0x10, 0x41, 0xe1, 0x1f, 0x10, 0x01, 0x42, 0x22, + 0x00, 0x20, 0x10, 0x41, 0xe1, 0x18, 0x10, 0x01, 0x42, 0x22, 0x00, 0x19, + 0x10, 0x41, 0xe1, 0x29, 0x10, 0x01, 0x42, 0x22, 0x00, 0x2a, 0x10, 0x41, + 0xe1, 0x06, 0x10, 0x01, 0xe9, 0x10, 0x10, 0x01, 0xf5, 0x12, 0x10, 0x41, + 0x44, 0x73, 0x20, 0x47, 0x10, 0x01, 0x05, 0xf0, 0x06, 0x06, 0x4b, 0x09, + 0xa1, 0x48, 0x10, 0x41, 0x45, 0x12, 0x0b, 0x6e, 0x10, 0x01, 0xa6, 0x2e, + 0x44, 0xcf, 0x2a, 0x6f, 0x10, 0x01, 0x43, 0x0e, 0x0b, 0x67, 0x10, 0x01, + 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x66, 0x10, 0x41, 0x44, 0x25, + 0x01, 0x69, 0x10, 0x01, 0x42, 0x15, 0x02, 0x68, 0x10, 0x41, 0x44, 0xc9, + 0x1d, 0x6d, 0x10, 0x01, 0x42, 0x01, 0x26, 0x6c, 0x10, 0x41, 0x43, 0xd2, + 0x05, 0x6b, 0x10, 0x01, 0x43, 0xf6, 0x06, 0x6a, 0x10, 0x41, 0x42, 0x17, + 0x00, 0x17, 0xf4, 0x01, 0x03, 0x03, 0x24, 0xee, 0x10, 0x42, 0xb6, 0x05, + 0xa3, 0xf4, 0x01, 0x42, 0xcd, 0x05, 0xb4, 0xf9, 0x01, 0xaf, 0xc3, 0x10, + 0x07, 0xc7, 0xd4, 0xe0, 0x0d, 0x02, 0xee, 0x05, 0xe6, 0x0b, 0x45, 0xe6, + 0xeb, 0x90, 0xf4, 0x81, 0xd8, 0x0b, 0xb7, 0xa1, 0x0b, 0xb8, 0x0b, 0xf9, + 0x66, 0xf4, 0xc1, 0x00, 0x48, 0x77, 0x4b, 0xc9, 0xf6, 0x41, 0x0a, 0xc9, + 0xa5, 0x06, 0x49, 0x86, 0xba, 0x4a, 0xf9, 0x41, 0x02, 0x3b, 0x01, 0xf6, + 0x08, 0x06, 0x6d, 0x15, 0xc2, 0x07, 0xac, 0xae, 0x02, 0x06, 0xc8, 0x00, + 0xf1, 0x01, 0x03, 0x7d, 0x15, 0x5e, 0x09, 0x32, 0x00, 0x01, 0xff, 0x0b, + 0x26, 0x9b, 0x43, 0x0a, 0x6d, 0x15, 0x2d, 0x0a, 0x96, 0x64, 0x17, 0x0b, + 0xab, 0xa2, 0x01, 0xff, 0x51, 0xa6, 0x5a, 0x6a, 0x25, 0x00, 0x4b, 0x8b, + 0x9e, 0x61, 0x25, 0x00, 0x4c, 0x83, 0x94, 0x5e, 0x25, 0x40, 0x50, 0x63, + 0x3a, 0x3f, 0x25, 0x00, 0x4a, 0xa9, 0xac, 0x25, 0x25, 0x00, 0x4b, 0xfb, + 0xa1, 0x1d, 0x25, 0x40, 0x50, 0x78, 0x3a, 0x42, 0x25, 0x00, 0x4a, 0xb3, + 0xac, 0x28, 0x25, 0x00, 0x4b, 0xa0, 0x64, 0x20, 0x25, 0x40, 0x51, 0xb7, + 0x5a, 0x6b, 0x25, 0x00, 0x4b, 0x96, 0x9e, 0x62, 0x25, 0x00, 0x4c, 0x8f, + 0x94, 0x5f, 0x25, 0x40, 0x0b, 0x26, 0x9b, 0x79, 0x0a, 0x6d, 0x15, 0x48, + 0x0a, 0x96, 0x64, 0x17, 0x0b, 0xab, 0xa2, 0x01, 0xff, 0x51, 0xa6, 0x5a, + 0x67, 0x25, 0x00, 0x4b, 0x8b, 0x9e, 0x5b, 0x25, 0x00, 0x4c, 0x83, 0x94, + 0x58, 0x25, 0x40, 0x55, 0x5e, 0x3a, 0x48, 0x25, 0x00, 0x50, 0x63, 0x3a, + 0x37, 0x25, 0x00, 0x05, 0xc3, 0x00, 0x11, 0x06, 0xc8, 0x00, 0x01, 0xff, + 0x4a, 0x68, 0x15, 0x22, 0x25, 0x00, 0x45, 0x6d, 0x15, 0x15, 0x25, 0x40, + 0x4a, 0x68, 0x15, 0x2a, 0x25, 0x00, 0x45, 0x6d, 0x15, 0x19, 0x25, 0x40, + 0x55, 0x73, 0x3a, 0x40, 0x25, 0x00, 0x50, 0x78, 0x3a, 0x38, 0x25, 0x00, + 0x05, 0xc3, 0x00, 0x11, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x4a, 0xd7, 0x16, + 0x1e, 0x25, 0x00, 0x45, 0xc3, 0x01, 0x16, 0x25, 0x40, 0x4a, 0xd7, 0x16, + 0x26, 0x25, 0x00, 0x45, 0xc3, 0x01, 0x1a, 0x25, 0x40, 0x51, 0xb7, 0x5a, + 0x68, 0x25, 0x00, 0x4b, 0x96, 0x9e, 0x5c, 0x25, 0x00, 0x4c, 0x8f, 0x94, + 0x59, 0x25, 0x40, 0x5c, 0x6e, 0x17, 0x46, 0x25, 0x00, 0x0f, 0x73, 0x17, + 0x1c, 0x0f, 0xc3, 0x6f, 0x06, 0x5c, 0x66, 0x19, 0x44, 0x25, 0x40, 0x4a, + 0x68, 0x15, 0x31, 0x25, 0x00, 0x48, 0xc4, 0x16, 0x39, 0x25, 0x00, 0x4e, + 0x75, 0x7e, 0x49, 0x25, 0x40, 0x4a, 0xd7, 0x16, 0x2e, 0x25, 0x00, 0x48, + 0x7d, 0x15, 0x36, 0x25, 0x00, 0x4e, 0x83, 0x7e, 0x3e, 0x25, 0x40, 0x04, + 0xc4, 0x00, 0xd4, 0x04, 0x05, 0xc9, 0x00, 0x01, 0xff, 0x04, 0xaa, 0x17, + 0xa9, 0x04, 0x55, 0xa1, 0x39, 0x1e, 0xcc, 0x01, 0xa4, 0xc4, 0x01, 0x4a, + 0x0b, 0x00, 0x00, 0x25, 0x80, 0xa3, 0x01, 0x44, 0xc3, 0x00, 0x74, 0x25, + 0x80, 0x95, 0x01, 0x0f, 0x1b, 0x72, 0x84, 0x01, 0x45, 0xc8, 0x00, 0x76, + 0x25, 0x00, 0xb4, 0x65, 0x42, 0x50, 0x02, 0x75, 0x25, 0x80, 0x3f, 0x48, + 0x32, 0x00, 0x02, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x07, + 0x9b, 0x0d, 0x23, 0x4a, 0x0b, 0x00, 0x3c, 0x25, 0x00, 0x44, 0xc3, 0x00, + 0x24, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x1c, 0x25, 0x00, 0x04, 0x1e, 0x00, + 0x01, 0xff, 0x44, 0xc3, 0x00, 0x18, 0xce, 0x01, 0x45, 0xc8, 0x00, 0x16, + 0xce, 0x41, 0x44, 0xc3, 0x00, 0x19, 0xce, 0x01, 0x45, 0xc8, 0x00, 0x17, + 0xce, 0x41, 0x05, 0x19, 0x00, 0x01, 0xff, 0xa8, 0x0c, 0x44, 0xc3, 0x00, + 0x18, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x14, 0x25, 0x40, 0x49, 0xfe, 0xb7, + 0x7d, 0x25, 0x00, 0x49, 0x0c, 0x00, 0x34, 0x25, 0x40, 0x51, 0xe8, 0x5c, + 0x1d, 0xcc, 0x01, 0x0b, 0x74, 0x37, 0x01, 0xff, 0x4a, 0x0b, 0x00, 0x04, + 0x25, 0x00, 0x48, 0x32, 0x00, 0x06, 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x08, + 0x25, 0x00, 0x48, 0x32, 0x00, 0x0a, 0x25, 0x40, 0x50, 0xf6, 0x5f, 0x7c, + 0x25, 0x40, 0x80, 0x01, 0xff, 0x04, 0x1a, 0x00, 0x06, 0x54, 0xa6, 0x38, + 0xaf, 0xfb, 0x41, 0x4b, 0xf8, 0x02, 0x1c, 0xcc, 0x01, 0x4b, 0x98, 0x02, + 0x1b, 0xcc, 0x41, 0x08, 0xe4, 0x25, 0x31, 0xaf, 0x01, 0xff, 0x0a, 0x8f, + 0xb2, 0x1e, 0x42, 0xa7, 0x01, 0x77, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, + 0x01, 0xff, 0x4a, 0x0b, 0x00, 0x2c, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x10, + 0x25, 0x00, 0x45, 0xc8, 0x00, 0x0c, 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x4c, + 0x25, 0x00, 0x48, 0x32, 0x00, 0x4e, 0x25, 0x40, 0x45, 0x95, 0x10, 0x73, + 0x25, 0x00, 0x47, 0x95, 0x44, 0xae, 0xfb, 0x01, 0x0e, 0x96, 0x03, 0x8a, + 0x02, 0x07, 0x7d, 0x02, 0xc2, 0x01, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x0a, + 0x73, 0x02, 0x6a, 0x08, 0x84, 0x02, 0x2d, 0x09, 0x5f, 0x0f, 0x01, 0xff, + 0x06, 0x13, 0x01, 0x18, 0x07, 0x7d, 0x02, 0x01, 0xff, 0x55, 0xab, 0x03, + 0xd9, 0xfb, 0x01, 0x44, 0xc3, 0x00, 0xd1, 0xfb, 0xc1, 0x00, 0x4f, 0xb1, + 0x03, 0xdd, 0xfb, 0x41, 0x46, 0x73, 0x02, 0xd6, 0xfb, 0x01, 0x44, 0xc3, + 0x00, 0x71, 0x25, 0x40, 0x06, 0x13, 0x01, 0x22, 0x07, 0x7d, 0x02, 0x01, + 0xff, 0x0a, 0x73, 0x02, 0x0d, 0x45, 0xc8, 0x00, 0xd2, 0xfb, 0xc1, 0x00, + 0x4e, 0xb4, 0x4c, 0xdf, 0xfb, 0x41, 0x4a, 0x96, 0x03, 0xdb, 0xfb, 0x01, + 0x4b, 0x98, 0x02, 0xd8, 0xfb, 0x41, 0x46, 0x73, 0x02, 0xd4, 0xfb, 0x81, + 0x06, 0x45, 0xc8, 0x00, 0x72, 0x25, 0x40, 0x4f, 0x93, 0x18, 0xdc, 0xfb, + 0x41, 0x06, 0x13, 0x01, 0x3f, 0x07, 0x7d, 0x02, 0x01, 0xff, 0x44, 0xc3, + 0x00, 0xa0, 0xfb, 0x81, 0x1d, 0x45, 0xc8, 0x00, 0xa1, 0xfb, 0xc1, 0x00, + 0x80, 0x01, 0xff, 0x5f, 0xf1, 0x10, 0xa9, 0xfb, 0x01, 0x4f, 0x89, 0x02, + 0xa5, 0xfb, 0xc1, 0x00, 0x4f, 0x79, 0x02, 0xaa, 0xfb, 0x41, 0x80, 0x01, + 0xff, 0x60, 0x54, 0x0f, 0xa8, 0xfb, 0x01, 0x4f, 0x89, 0x02, 0xa4, 0xfb, + 0xc1, 0x00, 0x50, 0x8e, 0x19, 0xab, 0xfb, 0x41, 0x44, 0xc3, 0x00, 0xd7, + 0xfb, 0x01, 0x45, 0xc8, 0x00, 0xd5, 0xfb, 0x41, 0x08, 0x84, 0x02, 0x1b, + 0x09, 0x5f, 0x0f, 0x01, 0xff, 0x06, 0x13, 0x01, 0x06, 0x6b, 0x6d, 0x02, + 0xad, 0xfb, 0x41, 0x46, 0x73, 0x02, 0xa3, 0xfb, 0x01, 0x44, 0xc3, 0x00, + 0xd0, 0xfb, 0x41, 0x06, 0x13, 0x01, 0x0d, 0x5c, 0x82, 0x19, 0xa7, 0xfb, + 0xc1, 0x00, 0x50, 0x88, 0x02, 0xac, 0xfb, 0x41, 0x46, 0x73, 0x02, 0xa2, + 0xfb, 0x81, 0x06, 0x45, 0xc8, 0x00, 0xd3, 0xfb, 0x41, 0x50, 0x8e, 0x19, + 0xa6, 0xfb, 0x41, 0x5c, 0xa4, 0x03, 0xda, 0xfb, 0x01, 0x5b, 0xd7, 0x1d, + 0xde, 0xfb, 0x41, 0x09, 0x0c, 0x49, 0x11, 0x07, 0xb3, 0x5e, 0x01, 0xff, + 0x44, 0xc3, 0x00, 0x6f, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x70, 0x25, 0x40, + 0x44, 0xc3, 0x00, 0x6e, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x6d, 0x25, 0x40, + 0x5d, 0x68, 0x15, 0x45, 0x25, 0x00, 0x10, 0x6d, 0x15, 0x1c, 0x10, 0x96, + 0x64, 0x06, 0x5d, 0xc4, 0x16, 0x43, 0x25, 0x40, 0x4a, 0x68, 0x15, 0x32, + 0x25, 0x00, 0x48, 0xc4, 0x16, 0x3a, 0x25, 0x00, 0x4e, 0x75, 0x7e, 0x4a, + 0x25, 0x40, 0x4a, 0xd7, 0x16, 0x2d, 0x25, 0x00, 0x48, 0x7d, 0x15, 0x35, + 0x25, 0x00, 0x4e, 0x83, 0x7e, 0x3d, 0x25, 0x40, 0x02, 0x3b, 0x01, 0x7d, + 0x4a, 0x0b, 0x00, 0x01, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x78, 0x25, 0x80, + 0x6a, 0x0f, 0x1b, 0x72, 0x5a, 0x45, 0xc8, 0x00, 0x7a, 0x25, 0x00, 0x0c, + 0x73, 0x37, 0x44, 0x42, 0x50, 0x02, 0x79, 0x25, 0x80, 0x1e, 0x48, 0x32, + 0x00, 0x03, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0x0b, + 0x00, 0x4b, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x2b, 0x25, 0x00, 0x45, 0xc8, + 0x00, 0x23, 0x25, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0x0b, 0x00, + 0x3b, 0x25, 0x00, 0xac, 0x06, 0x45, 0xc8, 0x00, 0x17, 0x25, 0x40, 0x43, + 0xc4, 0x00, 0x1b, 0x25, 0x00, 0x49, 0xd2, 0x16, 0x7f, 0x25, 0x40, 0x4a, + 0x0b, 0x00, 0x05, 0x25, 0x00, 0x48, 0x32, 0x00, 0x07, 0x25, 0x40, 0x4a, + 0x0b, 0x00, 0x09, 0x25, 0x00, 0x48, 0x32, 0x00, 0x0b, 0x25, 0x40, 0x50, + 0x06, 0x60, 0x7e, 0x25, 0x40, 0x0a, 0x8f, 0xb2, 0x1e, 0x42, 0xa7, 0x01, + 0x7b, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0x0b, 0x00, + 0x33, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x13, 0x25, 0x00, 0x45, 0xc8, 0x00, + 0x0f, 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x4d, 0x25, 0x00, 0x48, 0x32, 0x00, + 0x4f, 0x25, 0x40, 0x05, 0x3d, 0x01, 0x92, 0x01, 0x03, 0xa0, 0x14, 0x01, + 0xff, 0x0b, 0x26, 0x9b, 0x77, 0x0a, 0x6d, 0x15, 0x47, 0x0a, 0x96, 0x64, + 0x17, 0x0b, 0xab, 0xa2, 0x01, 0xff, 0x51, 0xa6, 0x5a, 0x64, 0x25, 0x00, + 0x4b, 0x8b, 0x9e, 0x55, 0x25, 0x00, 0x4c, 0x83, 0x94, 0x52, 0x25, 0x40, + 0x50, 0x63, 0x3a, 0x2f, 0x25, 0x00, 0x05, 0xc3, 0x00, 0x16, 0x06, 0xc8, + 0x00, 0x06, 0x53, 0x18, 0x4e, 0x47, 0x25, 0x40, 0x45, 0x6d, 0x15, 0x0d, + 0x25, 0x00, 0x48, 0xc4, 0x16, 0x21, 0x25, 0x40, 0x45, 0x6d, 0x15, 0x11, + 0x25, 0x00, 0x48, 0xc4, 0x16, 0x29, 0x25, 0x40, 0x50, 0x78, 0x3a, 0x30, + 0x25, 0x00, 0x05, 0xc3, 0x00, 0x16, 0x06, 0xc8, 0x00, 0x06, 0x53, 0x2b, + 0x4e, 0x41, 0x25, 0x40, 0x45, 0xc3, 0x01, 0x0e, 0x25, 0x00, 0x48, 0x7d, + 0x15, 0x1f, 0x25, 0x40, 0x45, 0xc3, 0x01, 0x12, 0x25, 0x00, 0x48, 0x7d, + 0x15, 0x27, 0x25, 0x40, 0x51, 0xb7, 0x5a, 0x65, 0x25, 0x00, 0x4b, 0x96, + 0x9e, 0x56, 0x25, 0x00, 0x4c, 0x8f, 0x94, 0x53, 0x25, 0x40, 0xa4, 0x3a, + 0x4a, 0x0b, 0x00, 0x50, 0x25, 0x00, 0x07, 0xb3, 0x5e, 0x1e, 0x48, 0x32, + 0x00, 0x51, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0x0b, + 0x00, 0x6c, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x63, 0x25, 0x00, 0x45, 0xc8, + 0x00, 0x60, 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x69, 0x25, 0x00, 0x44, 0xc3, + 0x00, 0x5d, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x5a, 0x25, 0x40, 0x08, 0xe4, + 0x25, 0x17, 0x08, 0x0d, 0x49, 0x01, 0xff, 0x4a, 0x0b, 0x00, 0x66, 0x25, + 0x00, 0x44, 0xc3, 0x00, 0x57, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x54, 0x25, + 0x40, 0x6a, 0x96, 0x03, 0x09, 0xce, 0x01, 0x06, 0x6d, 0x02, 0x01, 0xff, + 0x08, 0x84, 0x02, 0x06, 0x53, 0xaf, 0x4c, 0x1f, 0xcc, 0x41, 0x4b, 0xf8, + 0x02, 0x20, 0xcc, 0x01, 0x5c, 0x86, 0x18, 0x0a, 0xce, 0x41, 0x4a, 0xa1, + 0xa5, 0xf9, 0xf3, 0x01, 0xac, 0x18, 0x43, 0xd8, 0x25, 0xc8, 0x22, 0xc0, + 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4f, 0x78, 0x6f, 0xd1, 0x29, 0x00, + 0x50, 0xb6, 0x66, 0xd2, 0x29, 0x40, 0x80, 0x06, 0x43, 0xa1, 0x01, 0xb3, + 0xf3, 0x41, 0x4a, 0xa7, 0xae, 0x4f, 0xf5, 0x01, 0x4a, 0x93, 0xb3, 0x63, + 0xf9, 0x41, 0x4b, 0x74, 0x97, 0x95, 0xf3, 0x41, 0x54, 0x24, 0x44, 0x7e, + 0xf3, 0x01, 0x03, 0xac, 0x05, 0x01, 0xff, 0x57, 0xbf, 0x1b, 0x3b, 0x29, + 0x00, 0x4d, 0x72, 0x0b, 0xdf, 0x23, 0x00, 0x05, 0x22, 0x00, 0x65, 0x15, + 0x80, 0x3c, 0x55, 0x05, 0xc3, 0x00, 0x37, 0x4b, 0xd8, 0x21, 0xdd, 0x23, + 0x00, 0x06, 0xc8, 0x00, 0x13, 0x4e, 0xc8, 0x26, 0xb5, 0x23, 0x80, 0x06, + 0x56, 0x54, 0x09, 0xe1, 0x23, 0x40, 0x58, 0xbe, 0x26, 0xb6, 0x23, 0x40, + 0xa3, 0x0c, 0x4c, 0x7f, 0x8f, 0x25, 0x2e, 0x00, 0x69, 0x8e, 0x04, 0xee, + 0xfb, 0x41, 0x45, 0x1e, 0x0b, 0x1f, 0x23, 0x00, 0x43, 0x27, 0x0d, 0x0c, + 0x23, 0x40, 0xa3, 0x0c, 0x4c, 0x7f, 0x8f, 0x24, 0x2e, 0x00, 0x6a, 0x18, + 0x03, 0xed, 0xfb, 0x41, 0x45, 0x1e, 0x0b, 0x1e, 0x23, 0x00, 0x43, 0x27, + 0x0d, 0x0d, 0x23, 0x40, 0x4c, 0x0c, 0x03, 0xea, 0xfb, 0x01, 0x4c, 0x32, + 0x11, 0xe2, 0xfb, 0x41, 0x4c, 0x0c, 0x03, 0xcb, 0x2b, 0x00, 0x10, 0x56, + 0x63, 0x50, 0x48, 0x94, 0x26, 0x21, 0x23, 0x00, 0x04, 0xc3, 0x00, 0x28, + 0x05, 0xc8, 0x00, 0x06, 0x4f, 0x65, 0x73, 0xe7, 0xcd, 0x41, 0x4c, 0xd7, + 0x21, 0x5c, 0x2e, 0x00, 0x09, 0x5d, 0x63, 0x01, 0xff, 0x44, 0x05, 0x44, + 0x5f, 0xcc, 0x01, 0x0c, 0x7b, 0x96, 0x01, 0xff, 0xd1, 0xe9, 0xcd, 0x01, + 0xd2, 0xeb, 0xcd, 0x41, 0x4c, 0xd7, 0x21, 0x5b, 0x2e, 0x00, 0x09, 0x5d, + 0x63, 0x01, 0xff, 0x44, 0x05, 0x44, 0x5d, 0xcc, 0x01, 0x0c, 0x7b, 0x96, + 0x01, 0xff, 0xd1, 0xed, 0xcd, 0x01, 0xd2, 0xef, 0xcd, 0x41, 0x44, 0x05, + 0x44, 0x5e, 0xcc, 0x01, 0x0c, 0x7b, 0x96, 0x01, 0xff, 0xd1, 0xf1, 0xcd, + 0x01, 0xd2, 0xf2, 0xcd, 0x01, 0xd3, 0xf3, 0xcd, 0x01, 0xd4, 0xf4, 0xcd, + 0x41, 0x0d, 0xdf, 0x82, 0xc5, 0x02, 0x07, 0xec, 0x05, 0x01, 0xff, 0xe1, + 0x1a, 0x31, 0x80, 0x8f, 0x02, 0xe2, 0x05, 0x31, 0x80, 0x85, 0x02, 0xe3, + 0x18, 0x31, 0x80, 0xfb, 0x01, 0xe4, 0x09, 0x31, 0x00, 0xe5, 0x1c, 0x31, + 0x80, 0xd4, 0x01, 0xe6, 0x08, 0x31, 0x00, 0xe7, 0x0d, 0x31, 0x80, 0xba, + 0x01, 0xe8, 0x0f, 0x31, 0x00, 0xe9, 0x27, 0x31, 0x80, 0x95, 0x01, 0xea, + 0x10, 0x31, 0x80, 0x8b, 0x01, 0xeb, 0x0e, 0x31, 0x80, 0x81, 0x01, 0xec, + 0x0c, 0x31, 0x80, 0x78, 0xed, 0x07, 0x31, 0x00, 0xee, 0x0b, 0x31, 0x80, + 0x62, 0xef, 0x1b, 0x31, 0x80, 0x3d, 0xf0, 0x06, 0x31, 0x00, 0xf1, 0x11, + 0x31, 0x00, 0xf2, 0x16, 0x31, 0x00, 0xf3, 0x19, 0x31, 0x80, 0x28, 0xf4, + 0x0a, 0x31, 0x00, 0xf5, 0x28, 0x31, 0x80, 0x19, 0xf6, 0x2a, 0x31, 0x00, + 0xf8, 0x12, 0x31, 0x00, 0xfa, 0x17, 0x31, 0xc0, 0x00, 0xe8, 0x13, 0x31, + 0x00, 0xe9, 0xa1, 0x31, 0x00, 0xf9, 0xba, 0x31, 0x40, 0x42, 0x4e, 0x1f, + 0xab, 0x31, 0x40, 0xe8, 0x15, 0x31, 0x40, 0x4f, 0x75, 0x3b, 0x2e, 0x31, + 0x00, 0xe5, 0xbe, 0x31, 0x00, 0xed, 0xb1, 0x31, 0x00, 0xae, 0x08, 0xef, + 0xa6, 0x31, 0x00, 0xf5, 0x21, 0x31, 0x40, 0xe7, 0xb2, 0x31, 0x00, 0xee, + 0xa7, 0x31, 0x40, 0xe7, 0x2b, 0x31, 0x80, 0x04, 0xee, 0x2f, 0x31, 0x40, + 0xe7, 0xad, 0x31, 0x40, 0xe8, 0xb9, 0x31, 0x40, 0xf7, 0xbd, 0x31, 0x40, + 0xe9, 0xa2, 0x31, 0x40, 0xe8, 0x2d, 0x31, 0x00, 0xed, 0xac, 0x31, 0x00, + 0x42, 0x4e, 0x1f, 0xaa, 0x31, 0x80, 0x08, 0xf2, 0xa8, 0x31, 0x00, 0xf5, + 0x29, 0x31, 0x40, 0xee, 0xb3, 0x31, 0x40, 0xe8, 0xb8, 0x31, 0x00, 0xee, + 0x2c, 0x31, 0x00, 0xf5, 0xa3, 0x31, 0x00, 0xf7, 0xbc, 0x31, 0x40, 0xe5, + 0xa4, 0x31, 0x00, 0xe8, 0x1d, 0x31, 0x00, 0xe9, 0x1f, 0x31, 0x00, 0xee, + 0x23, 0x31, 0x80, 0x04, 0xf2, 0x26, 0x31, 0x40, 0xe7, 0x25, 0x31, 0x00, + 0xee, 0xa5, 0x31, 0x40, 0xe8, 0x14, 0x31, 0x40, 0xf5, 0xa0, 0x31, 0x40, + 0xe8, 0xbf, 0x31, 0x00, 0xe9, 0x1e, 0x31, 0x80, 0x1c, 0xed, 0xb0, 0x31, + 0x00, 0xee, 0x22, 0x31, 0x80, 0x0b, 0xf5, 0x20, 0x31, 0xc0, 0x00, 0x42, + 0x4e, 0x1f, 0xaf, 0x31, 0x40, 0xe7, 0x24, 0x31, 0x00, 0xee, 0xa9, 0x31, + 0x40, 0x42, 0x4e, 0x1f, 0xae, 0x31, 0x40, 0xe7, 0xbb, 0x31, 0x00, 0xe8, + 0xb7, 0x31, 0x00, 0xeb, 0xb6, 0x31, 0x00, 0xf0, 0xb4, 0x31, 0x00, 0xf4, + 0xb5, 0x31, 0x40, 0xeb, 0x6e, 0xf5, 0x81, 0x06, 0x46, 0xda, 0xd3, 0x83, + 0xfa, 0x41, 0x44, 0xb9, 0x00, 0x16, 0xf5, 0x81, 0x04, 0xf3, 0xda, 0xf4, + 0x41, 0x45, 0xe1, 0xe1, 0xd1, 0xf4, 0x41, 0x55, 0xc7, 0x3a, 0xbd, 0xf7, + 0x01, 0x54, 0x58, 0x42, 0xb1, 0xf7, 0x01, 0x4b, 0x1b, 0x61, 0xa4, 0xf7, + 0x01, 0xb3, 0x11, 0x06, 0xad, 0x02, 0x01, 0xff, 0x46, 0x12, 0x03, 0x86, + 0xf7, 0x01, 0x46, 0xd6, 0x05, 0x90, 0xf7, 0x41, 0x46, 0x13, 0x19, 0xab, + 0xf7, 0x01, 0x52, 0xff, 0x52, 0xb7, 0xf7, 0x41, 0xa1, 0xe8, 0x0a, 0xaf, + 0x19, 0x02, 0xd6, 0x13, 0x01, 0xff, 0x80, 0x06, 0x47, 0x79, 0xcf, 0xd0, + 0xfa, 0x41, 0x44, 0x45, 0xef, 0xd8, 0xf4, 0x01, 0x45, 0xac, 0x21, 0x99, + 0xf4, 0x41, 0x03, 0x0f, 0x03, 0x0c, 0x44, 0x91, 0xcf, 0x3c, 0xf3, 0x01, + 0x45, 0x4a, 0xec, 0x21, 0xf4, 0x41, 0x07, 0xa8, 0xd3, 0x95, 0x02, 0x08, + 0xc8, 0xca, 0x01, 0xff, 0xd1, 0x00, 0xfb, 0x81, 0x87, 0x01, 0xd2, 0x01, + 0xfb, 0x81, 0x43, 0xd3, 0x03, 0xfb, 0x81, 0x1f, 0xd4, 0x07, 0xfb, 0x81, + 0x0d, 0xd5, 0x0f, 0xfb, 0x81, 0x04, 0xd6, 0x1e, 0xfb, 0x41, 0xd6, 0x2d, + 0xfb, 0x41, 0xd5, 0x16, 0xfb, 0x81, 0x04, 0xd6, 0x26, 0xfb, 0x41, 0xd6, + 0x35, 0xfb, 0x41, 0xd4, 0x0b, 0xfb, 0x81, 0x0d, 0xd5, 0x13, 0xfb, 0x81, + 0x04, 0xd6, 0x22, 0xfb, 0x41, 0xd6, 0x31, 0xfb, 0x41, 0xd5, 0x1a, 0xfb, + 0x81, 0x04, 0xd6, 0x29, 0xfb, 0x41, 0xd6, 0x39, 0xfb, 0x41, 0xd3, 0x05, + 0xfb, 0x81, 0x1b, 0xd4, 0x09, 0xfb, 0x81, 0x0d, 0xd5, 0x11, 0xfb, 0x81, + 0x04, 0xd6, 0x20, 0xfb, 0x41, 0xd6, 0x2f, 0xfb, 0x41, 0xd5, 0x18, 0xfb, + 0xc1, 0x00, 0xd6, 0x37, 0xfb, 0x41, 0xd4, 0x0d, 0xfb, 0x81, 0x0d, 0xd5, + 0x14, 0xfb, 0x81, 0x04, 0xd6, 0x24, 0xfb, 0x41, 0xd6, 0x33, 0xfb, 0x41, + 0xd5, 0x1c, 0xfb, 0x81, 0x04, 0xd6, 0x2b, 0xfb, 0x41, 0xd6, 0x3b, 0xfb, + 0x41, 0xd2, 0x02, 0xfb, 0x81, 0x40, 0xd3, 0x04, 0xfb, 0x81, 0x1f, 0xd4, + 0x08, 0xfb, 0x81, 0x0d, 0xd5, 0x10, 0xfb, 0x81, 0x04, 0xd6, 0x1f, 0xfb, + 0x41, 0xd6, 0x2e, 0xfb, 0x41, 0xd5, 0x17, 0xfb, 0x81, 0x04, 0xd6, 0x27, + 0xfb, 0x41, 0xd6, 0x36, 0xfb, 0x41, 0xd4, 0x0c, 0xfb, 0x81, 0x0a, 0x42, + 0x00, 0xc3, 0x32, 0xfb, 0x01, 0xd6, 0x23, 0xfb, 0x41, 0xd5, 0x1b, 0xfb, + 0x81, 0x04, 0xd6, 0x2a, 0xfb, 0x41, 0xd6, 0x3a, 0xfb, 0x41, 0xd3, 0x06, + 0xfb, 0x81, 0x1f, 0xd4, 0x0a, 0xfb, 0x81, 0x0d, 0xd5, 0x12, 0xfb, 0x81, + 0x04, 0xd6, 0x21, 0xfb, 0x41, 0xd6, 0x30, 0xfb, 0x41, 0xd5, 0x19, 0xfb, + 0x81, 0x04, 0xd6, 0x28, 0xfb, 0x41, 0xd6, 0x38, 0xfb, 0x41, 0xd4, 0x0e, + 0xfb, 0x81, 0x0d, 0xd5, 0x15, 0xfb, 0x81, 0x04, 0xd6, 0x25, 0xfb, 0x41, + 0xd6, 0x34, 0xfb, 0x41, 0xd5, 0x1d, 0xfb, 0x01, 0xd6, 0x2c, 0xfb, 0x41, + 0x91, 0x86, 0x04, 0x92, 0xf7, 0x01, 0xd3, 0x00, 0xcd, 0x81, 0x6f, 0xd4, + 0x03, 0xcd, 0x81, 0x2a, 0xd5, 0x09, 0xcd, 0x81, 0x0e, 0xd6, 0x18, 0xcd, + 0xc1, 0x00, 0xd7, 0x51, 0xcd, 0xc1, 0x00, 0xd8, 0xcb, 0xcd, 0x41, 0xd6, + 0x27, 0xcd, 0x81, 0x0a, 0x42, 0x04, 0xf5, 0xbb, 0xcd, 0x01, 0xd8, 0x80, + 0xcd, 0x41, 0xd7, 0x61, 0xcd, 0x01, 0xd8, 0x9c, 0xcd, 0x41, 0xd5, 0x10, + 0xcd, 0x81, 0x1c, 0x96, 0x0d, 0xd7, 0x3d, 0xcd, 0x81, 0x04, 0xd8, 0x78, + 0xcd, 0x41, 0xd8, 0xb3, 0xcd, 0x41, 0xd7, 0x59, 0xcd, 0x81, 0x04, 0xd8, + 0x96, 0xcd, 0x41, 0xd8, 0xd3, 0xcd, 0x41, 0xd6, 0x2f, 0xcd, 0x81, 0x0d, + 0xd7, 0x4b, 0xcd, 0x81, 0x04, 0xd8, 0x88, 0xcd, 0x41, 0xd8, 0xc3, 0xcd, + 0x41, 0xd7, 0x69, 0xcd, 0x81, 0x04, 0xd8, 0xa4, 0xcd, 0x41, 0xd8, 0xe1, + 0xcd, 0x41, 0xd4, 0x06, 0xcd, 0x81, 0x40, 0x95, 0x1f, 0xd6, 0x1c, 0xcd, + 0x81, 0x0d, 0xd7, 0x39, 0xcd, 0x81, 0x04, 0xd8, 0x74, 0xcd, 0x41, 0xd8, + 0xaf, 0xcd, 0x41, 0xd7, 0x55, 0xcd, 0x81, 0x04, 0xd8, 0x93, 0xcd, 0x41, + 0xd8, 0xcf, 0xcd, 0x41, 0xd6, 0x2b, 0xcd, 0x81, 0x0d, 0xd7, 0x48, 0xcd, + 0x81, 0x04, 0xd8, 0x84, 0xcd, 0x41, 0xd8, 0xbf, 0xcd, 0x41, 0xd7, 0x65, + 0xcd, 0x81, 0x04, 0xd8, 0xa0, 0xcd, 0x41, 0xd8, 0xde, 0xcd, 0x41, 0xd5, + 0x14, 0xcd, 0x81, 0x1f, 0xd6, 0x23, 0xcd, 0x81, 0x0d, 0xd7, 0x41, 0xcd, + 0x81, 0x04, 0xd8, 0x7c, 0xcd, 0x41, 0xd8, 0xb7, 0xcd, 0x41, 0xd7, 0x5d, + 0xcd, 0x81, 0x04, 0xd8, 0x99, 0xcd, 0x41, 0xd8, 0xd7, 0xcd, 0x41, 0xd6, + 0x33, 0xcd, 0x81, 0x0d, 0xd7, 0x4e, 0xcd, 0x81, 0x04, 0xd8, 0x8c, 0xcd, + 0x41, 0xd8, 0xc7, 0xcd, 0x41, 0xd7, 0x6d, 0xcd, 0x01, 0xd8, 0xa8, 0xcd, + 0x41, 0xd3, 0x01, 0xcd, 0x81, 0x7c, 0x94, 0x43, 0xd5, 0x0b, 0xcd, 0x81, + 0x1f, 0xd6, 0x1a, 0xcd, 0x81, 0x0d, 0xd7, 0x37, 0xcd, 0x81, 0x04, 0xd8, + 0x72, 0xcd, 0x41, 0xd8, 0xad, 0xcd, 0x41, 0xd7, 0x53, 0xcd, 0x81, 0x04, + 0xd8, 0x91, 0xcd, 0x41, 0xd8, 0xcd, 0xcd, 0x41, 0xd6, 0x29, 0xcd, 0x81, + 0x0d, 0xd7, 0x46, 0xcd, 0x81, 0x04, 0xd8, 0x82, 0xcd, 0x41, 0xd8, 0xbd, + 0xcd, 0x41, 0xd7, 0x63, 0xcd, 0x81, 0x04, 0xd8, 0x9e, 0xcd, 0x41, 0xd8, + 0xdc, 0xcd, 0x41, 0xd5, 0x12, 0xcd, 0x81, 0x1b, 0xd6, 0x21, 0xcd, 0x81, + 0x0d, 0xd7, 0x3f, 0xcd, 0x81, 0x04, 0xd8, 0x7a, 0xcd, 0x41, 0xd8, 0xb5, + 0xcd, 0x41, 0xd7, 0x5b, 0xcd, 0xc1, 0x00, 0xd8, 0xd5, 0xcd, 0x41, 0xd6, + 0x31, 0xcd, 0x81, 0x0a, 0x42, 0x04, 0xf5, 0xc5, 0xcd, 0x01, 0xd8, 0x8a, + 0xcd, 0x41, 0xd7, 0x6b, 0xcd, 0x01, 0xd8, 0xa6, 0xcd, 0x41, 0xd4, 0x08, + 0xcd, 0x81, 0x43, 0xd5, 0x0e, 0xcd, 0x81, 0x1f, 0xd6, 0x1e, 0xcd, 0x81, + 0x0d, 0xd7, 0x3b, 0xcd, 0x81, 0x04, 0xd8, 0x76, 0xcd, 0x41, 0xd8, 0xb1, + 0xcd, 0x41, 0xd7, 0x57, 0xcd, 0x81, 0x04, 0xd8, 0x94, 0xcd, 0x41, 0xd8, + 0xd1, 0xcd, 0x41, 0xd6, 0x2d, 0xcd, 0x81, 0x0d, 0xd7, 0x49, 0xcd, 0x81, + 0x04, 0xd8, 0x86, 0xcd, 0x41, 0xd8, 0xc1, 0xcd, 0x41, 0xd7, 0x67, 0xcd, + 0x81, 0x04, 0xd8, 0xa2, 0xcd, 0x41, 0xd8, 0xdf, 0xcd, 0x41, 0xd5, 0x16, + 0xcd, 0x81, 0x1f, 0xd6, 0x25, 0xcd, 0x81, 0x0d, 0xd7, 0x43, 0xcd, 0x81, + 0x04, 0xd8, 0x7e, 0xcd, 0x41, 0xd8, 0xb9, 0xcd, 0x41, 0xd7, 0x5f, 0xcd, + 0x81, 0x04, 0xd8, 0x9b, 0xcd, 0x41, 0xd8, 0xd9, 0xcd, 0x41, 0xd6, 0x35, + 0xcd, 0x81, 0x0d, 0xd7, 0x50, 0xcd, 0x81, 0x04, 0xd8, 0x8e, 0xcd, 0x41, + 0xd8, 0xc9, 0xcd, 0x41, 0xd7, 0x6f, 0xcd, 0x81, 0x04, 0xd8, 0xaa, 0xcd, + 0x41, 0xd8, 0xe5, 0xcd, 0x41, 0x92, 0x8d, 0x02, 0x93, 0x8b, 0x01, 0xd4, + 0x04, 0xcd, 0x81, 0x43, 0xd5, 0x0a, 0xcd, 0x81, 0x1f, 0xd6, 0x19, 0xcd, + 0x81, 0x0d, 0xd7, 0x36, 0xcd, 0x81, 0x04, 0xd8, 0x71, 0xcd, 0x41, 0xd8, + 0xac, 0xcd, 0x41, 0xd7, 0x52, 0xcd, 0x81, 0x04, 0xd8, 0x90, 0xcd, 0x41, + 0xd8, 0xcc, 0xcd, 0x41, 0xd6, 0x28, 0xcd, 0x81, 0x0d, 0xd7, 0x45, 0xcd, + 0x81, 0x04, 0xd8, 0x81, 0xcd, 0x41, 0xd8, 0xbc, 0xcd, 0x41, 0xd7, 0x62, + 0xcd, 0x81, 0x04, 0xd8, 0x9d, 0xcd, 0x41, 0xd8, 0xdb, 0xcd, 0x41, 0xd5, + 0x11, 0xcd, 0x81, 0x1f, 0xd6, 0x20, 0xcd, 0x81, 0x0d, 0xd7, 0x3e, 0xcd, + 0x81, 0x04, 0xd8, 0x79, 0xcd, 0x41, 0xd8, 0xb4, 0xcd, 0x41, 0xd7, 0x5a, + 0xcd, 0x81, 0x04, 0xd8, 0x97, 0xcd, 0x41, 0xd8, 0xd4, 0xcd, 0x41, 0xd6, + 0x30, 0xcd, 0x81, 0x0d, 0xd7, 0x4c, 0xcd, 0x81, 0x04, 0xd8, 0x89, 0xcd, + 0x41, 0xd8, 0xc4, 0xcd, 0x41, 0xd7, 0x6a, 0xcd, 0x81, 0x04, 0xd8, 0xa5, + 0xcd, 0x41, 0xd8, 0xe2, 0xcd, 0x41, 0xd4, 0x07, 0xcd, 0x81, 0x37, 0xd5, + 0x0d, 0xcd, 0x81, 0x1b, 0xd6, 0x1d, 0xcd, 0x81, 0x0d, 0xd7, 0x3a, 0xcd, + 0x81, 0x04, 0xd8, 0x75, 0xcd, 0x41, 0xd8, 0xb0, 0xcd, 0x41, 0xd7, 0x56, + 0xcd, 0xc1, 0x00, 0xd8, 0xd0, 0xcd, 0x41, 0xd6, 0x2c, 0xcd, 0x81, 0x0a, + 0x42, 0x04, 0xf5, 0xc0, 0xcd, 0x01, 0xd8, 0x85, 0xcd, 0x41, 0xd7, 0x66, + 0xcd, 0x01, 0xd8, 0xa1, 0xcd, 0x41, 0xd5, 0x15, 0xcd, 0x81, 0x1f, 0xd6, + 0x24, 0xcd, 0x81, 0x0d, 0xd7, 0x42, 0xcd, 0x81, 0x04, 0xd8, 0x7d, 0xcd, + 0x41, 0xd8, 0xb8, 0xcd, 0x41, 0xd7, 0x5e, 0xcd, 0x81, 0x04, 0xd8, 0x9a, + 0xcd, 0x41, 0xd8, 0xd8, 0xcd, 0x41, 0xd6, 0x34, 0xcd, 0x81, 0x0d, 0xd7, + 0x4f, 0xcd, 0x81, 0x04, 0xd8, 0x8d, 0xcd, 0x41, 0xd8, 0xc8, 0xcd, 0x41, + 0xd7, 0x6e, 0xcd, 0x81, 0x04, 0xd8, 0xa9, 0xcd, 0x41, 0xd8, 0xe4, 0xcd, + 0x41, 0xd3, 0x02, 0xcd, 0x81, 0x8b, 0x01, 0xd4, 0x05, 0xcd, 0x81, 0x43, + 0xd5, 0x0c, 0xcd, 0x81, 0x1f, 0xd6, 0x1b, 0xcd, 0x81, 0x0d, 0xd7, 0x38, + 0xcd, 0x81, 0x04, 0xd8, 0x73, 0xcd, 0x41, 0xd8, 0xae, 0xcd, 0x41, 0xd7, + 0x54, 0xcd, 0x81, 0x04, 0xd8, 0x92, 0xcd, 0x41, 0xd8, 0xce, 0xcd, 0x41, + 0xd6, 0x2a, 0xcd, 0x81, 0x0d, 0xd7, 0x47, 0xcd, 0x81, 0x04, 0xd8, 0x83, + 0xcd, 0x41, 0xd8, 0xbe, 0xcd, 0x41, 0xd7, 0x64, 0xcd, 0x81, 0x04, 0xd8, + 0x9f, 0xcd, 0x41, 0xd8, 0xdd, 0xcd, 0x41, 0xd5, 0x13, 0xcd, 0x81, 0x1f, + 0xd6, 0x22, 0xcd, 0x81, 0x0d, 0xd7, 0x40, 0xcd, 0x81, 0x04, 0xd8, 0x7b, + 0xcd, 0x41, 0xd8, 0xb6, 0xcd, 0x41, 0xd7, 0x5c, 0xcd, 0x81, 0x04, 0xd8, + 0x98, 0xcd, 0x41, 0xd8, 0xd6, 0xcd, 0x41, 0xd6, 0x32, 0xcd, 0x81, 0x0d, + 0xd7, 0x4d, 0xcd, 0x81, 0x04, 0xd8, 0x8b, 0xcd, 0x41, 0xd8, 0xc6, 0xcd, + 0x41, 0xd7, 0x6c, 0xcd, 0x81, 0x04, 0xd8, 0xa7, 0xcd, 0x41, 0xd8, 0xe3, + 0xcd, 0x41, 0x94, 0x43, 0xd5, 0x0f, 0xcd, 0x81, 0x1f, 0xd6, 0x1f, 0xcd, + 0x81, 0x0d, 0xd7, 0x3c, 0xcd, 0x81, 0x04, 0xd8, 0x77, 0xcd, 0x41, 0xd8, + 0xb2, 0xcd, 0x41, 0xd7, 0x58, 0xcd, 0x81, 0x04, 0xd8, 0x95, 0xcd, 0x41, + 0xd8, 0xd2, 0xcd, 0x41, 0xd6, 0x2e, 0xcd, 0x81, 0x0d, 0xd7, 0x4a, 0xcd, + 0x81, 0x04, 0xd8, 0x87, 0xcd, 0x41, 0xd8, 0xc2, 0xcd, 0x41, 0xd7, 0x68, + 0xcd, 0x81, 0x04, 0xd8, 0xa3, 0xcd, 0x41, 0xd8, 0xe0, 0xcd, 0x41, 0xd5, + 0x17, 0xcd, 0x81, 0x1b, 0xd6, 0x26, 0xcd, 0x81, 0x0d, 0xd7, 0x44, 0xcd, + 0x81, 0x04, 0xd8, 0x7f, 0xcd, 0x41, 0xd8, 0xba, 0xcd, 0x41, 0xd7, 0x60, + 0xcd, 0xc1, 0x00, 0xd8, 0xda, 0xcd, 0x41, 0x96, 0x0a, 0x42, 0x04, 0xf5, + 0xca, 0xcd, 0x01, 0xd8, 0x8f, 0xcd, 0x41, 0xd7, 0x70, 0xcd, 0x01, 0xd8, + 0xab, 0xcd, 0x41, 0x02, 0x36, 0x01, 0x06, 0x49, 0x7b, 0x99, 0x22, 0x24, + 0x40, 0x80, 0x32, 0x8d, 0x01, 0xff, 0x0a, 0x0c, 0x1a, 0x19, 0x0f, 0x96, + 0x6f, 0x01, 0xff, 0xe3, 0x2d, 0x21, 0x00, 0xe8, 0x0c, 0x21, 0x00, 0xe9, + 0x11, 0x21, 0x00, 0xf2, 0x1c, 0x21, 0x00, 0xfa, 0x28, 0x21, 0x40, 0x50, + 0xa7, 0x23, 0xb6, 0x27, 0x00, 0x50, 0xb3, 0x02, 0xb5, 0x27, 0x00, 0x50, + 0x7c, 0x40, 0xb4, 0x27, 0x40, 0x46, 0x40, 0xda, 0xd3, 0x29, 0x00, 0xa3, + 0xb4, 0x07, 0xa4, 0xc4, 0x06, 0xa6, 0xa4, 0x06, 0xa8, 0xf7, 0x05, 0xac, + 0xd4, 0x04, 0xad, 0xe5, 0x03, 0xae, 0xd6, 0x03, 0x47, 0xa1, 0xd3, 0xc4, + 0x2b, 0x00, 0xb0, 0xb1, 0x03, 0x56, 0x81, 0x36, 0x53, 0x27, 0x00, 0xb2, + 0xaa, 0x02, 0xb3, 0x9f, 0x01, 0xb4, 0x6f, 0xb5, 0x2c, 0x03, 0x32, 0x00, + 0x01, 0xff, 0x06, 0x35, 0x00, 0x17, 0x08, 0x84, 0x0a, 0x01, 0xff, 0x47, + 0x95, 0x44, 0x98, 0xf7, 0x01, 0x47, 0x68, 0x0a, 0x9e, 0xf7, 0x01, 0x46, + 0xd6, 0x05, 0x1d, 0x2b, 0x40, 0x47, 0xdf, 0x66, 0x2e, 0x2b, 0x00, 0x49, + 0x83, 0x47, 0xae, 0x25, 0x40, 0x59, 0x15, 0x25, 0x7b, 0x26, 0x00, 0xb0, + 0x01, 0xff, 0x58, 0xd6, 0x26, 0xa2, 0xf5, 0x01, 0x0a, 0x8c, 0x0b, 0x16, + 0x04, 0x6f, 0x02, 0x06, 0x5b, 0xcf, 0x01, 0x9d, 0x2b, 0x40, 0x4d, 0x4d, + 0x35, 0xe4, 0x25, 0x00, 0x4e, 0x68, 0x29, 0xe5, 0x25, 0x40, 0x4f, 0x3f, + 0x6c, 0xeb, 0x23, 0x00, 0x58, 0x5e, 0x29, 0x81, 0xf7, 0x01, 0x4e, 0x26, + 0x0c, 0xb4, 0x25, 0x00, 0x48, 0x01, 0x02, 0xb2, 0x25, 0x40, 0x48, 0x17, + 0x3d, 0x0e, 0x26, 0x00, 0x04, 0x99, 0xf0, 0x12, 0x52, 0x55, 0x54, 0x7f, + 0xf5, 0x01, 0x44, 0x1c, 0x77, 0xdf, 0x26, 0x00, 0x57, 0x07, 0x32, 0xd6, + 0x26, 0x40, 0x47, 0x95, 0x44, 0x97, 0xf7, 0x01, 0x47, 0x68, 0x0a, 0x9d, + 0xf7, 0x01, 0x46, 0xd6, 0x05, 0x8c, 0xf7, 0x41, 0x4e, 0xb5, 0x75, 0x00, + 0x27, 0x00, 0x47, 0x47, 0x3e, 0x02, 0x27, 0x00, 0x4a, 0x86, 0x5f, 0x17, + 0x26, 0x00, 0x53, 0xc1, 0x4a, 0x71, 0xf5, 0x01, 0x0e, 0x89, 0x79, 0x60, + 0xad, 0x34, 0x46, 0x72, 0xde, 0xc7, 0x26, 0x00, 0x49, 0xe6, 0xbd, 0x60, + 0x26, 0x00, 0x45, 0xd7, 0x05, 0xa0, 0x25, 0x80, 0x0c, 0x43, 0x32, 0x13, + 0x05, 0x26, 0x00, 0x4c, 0x6f, 0x96, 0x00, 0x26, 0x40, 0x80, 0x01, 0xff, + 0x46, 0x03, 0x8d, 0x32, 0xf5, 0x01, 0x47, 0xbb, 0x68, 0xc0, 0x2b, 0x00, + 0x48, 0x38, 0xc6, 0xf9, 0x23, 0x40, 0x04, 0x5f, 0x07, 0x06, 0x4a, 0x5d, + 0x95, 0x3b, 0x26, 0x40, 0x47, 0x95, 0x44, 0x29, 0x2b, 0x00, 0x47, 0x68, + 0x0a, 0x2a, 0x2b, 0x00, 0xb3, 0x06, 0x53, 0x3e, 0x4e, 0xcd, 0xfb, 0x41, + 0x45, 0xd7, 0x05, 0xaa, 0x25, 0x00, 0x43, 0x32, 0x13, 0x51, 0x2b, 0x40, + 0x46, 0x12, 0x03, 0x84, 0xf7, 0x01, 0x46, 0xd6, 0x05, 0x8d, 0xf7, 0x41, + 0x48, 0x84, 0x47, 0xac, 0x25, 0x00, 0x04, 0xc9, 0x00, 0x06, 0x46, 0xf0, + 0xde, 0xf6, 0xf3, 0x41, 0x80, 0x56, 0x0a, 0x8c, 0x0b, 0x1e, 0x06, 0xa9, + 0x01, 0x01, 0xff, 0x45, 0xce, 0x00, 0xa1, 0x27, 0x80, 0x0c, 0x46, 0xb2, + 0x21, 0x4d, 0x20, 0x00, 0x55, 0xd5, 0x01, 0x9e, 0x2b, 0x40, 0x44, 0xe6, + 0x01, 0xa4, 0x27, 0x40, 0x4f, 0x3f, 0x6c, 0xe9, 0x23, 0x80, 0x27, 0x58, + 0x5e, 0x29, 0x82, 0xf7, 0x01, 0xb0, 0x13, 0x4e, 0x26, 0x0c, 0xb8, 0x25, + 0x00, 0x48, 0x01, 0x02, 0xb6, 0x25, 0xc0, 0x00, 0x59, 0x3a, 0x23, 0xef, + 0x23, 0x40, 0x47, 0xe1, 0xc9, 0x53, 0x2b, 0x00, 0x46, 0xea, 0x49, 0xba, + 0x25, 0x40, 0x52, 0x9a, 0x1e, 0xed, 0x23, 0x40, 0x09, 0x9c, 0x01, 0x06, + 0x4e, 0x5d, 0x7d, 0xb3, 0xce, 0x41, 0x4e, 0xe0, 0x26, 0x9d, 0xf5, 0x01, + 0x45, 0x8f, 0x13, 0x1b, 0x26, 0x40, 0x4c, 0x67, 0x8c, 0xb0, 0x25, 0x00, + 0x02, 0x92, 0x01, 0x06, 0x46, 0xf9, 0xd4, 0x88, 0xf5, 0x41, 0x44, 0x2c, + 0x33, 0xf2, 0xf3, 0x01, 0x45, 0xe3, 0xc9, 0x1f, 0x2b, 0x40, 0x4b, 0x98, + 0x92, 0x6f, 0xcc, 0x01, 0x42, 0x16, 0x18, 0x12, 0x27, 0x40, 0x06, 0x45, + 0x04, 0x06, 0x4a, 0xd9, 0xae, 0xb8, 0x26, 0x40, 0xa4, 0x4d, 0xac, 0x38, + 0x57, 0xf3, 0x30, 0xf5, 0x23, 0x80, 0x2b, 0xb3, 0x0d, 0x54, 0x7c, 0x46, + 0xf6, 0x23, 0xc0, 0x00, 0x48, 0xba, 0x68, 0xc5, 0x2b, 0x40, 0x05, 0x5e, + 0x07, 0x06, 0x45, 0xd7, 0x05, 0xfc, 0x25, 0x40, 0x47, 0x95, 0x44, 0x99, + 0xf7, 0x01, 0x47, 0x68, 0x0a, 0x9f, 0xf7, 0x01, 0x46, 0xd6, 0x05, 0xfe, + 0x25, 0x40, 0x48, 0xba, 0x68, 0xc8, 0x2b, 0x40, 0x55, 0x64, 0x35, 0xf4, + 0x23, 0x80, 0x06, 0x46, 0x69, 0x0a, 0x27, 0x2b, 0x40, 0x48, 0xba, 0x68, + 0xc7, 0x2b, 0x40, 0x46, 0x96, 0x44, 0x25, 0x2b, 0x00, 0x55, 0xc2, 0x33, + 0xf7, 0x23, 0xc0, 0x00, 0x48, 0xba, 0x68, 0xc6, 0x2b, 0x40, 0x05, 0x28, + 0x1c, 0x70, 0x03, 0xc4, 0x00, 0x19, 0xaf, 0x01, 0xff, 0x04, 0x15, 0x01, + 0x06, 0x45, 0x4b, 0x0a, 0xeb, 0x29, 0x40, 0x4d, 0x4d, 0x35, 0xe3, 0x25, + 0x00, 0x4e, 0x68, 0x29, 0xe2, 0x25, 0x40, 0x80, 0x3a, 0x0a, 0x8c, 0x0b, + 0x11, 0x06, 0xa9, 0x01, 0x01, 0xff, 0x46, 0xb2, 0x21, 0x4c, 0x20, 0x00, + 0x55, 0xd5, 0x01, 0x9c, 0x2b, 0x40, 0x4f, 0x3f, 0x6c, 0xea, 0x23, 0x80, + 0x18, 0x58, 0x5e, 0x29, 0x80, 0xf7, 0x01, 0x47, 0xe9, 0x49, 0xc4, 0x25, + 0x00, 0x4e, 0x26, 0x0c, 0xc2, 0x25, 0x00, 0x48, 0x01, 0x02, 0xc0, 0x25, + 0x40, 0x52, 0x9a, 0x1e, 0xee, 0x23, 0x40, 0x4a, 0x81, 0xac, 0xd8, 0x26, + 0x00, 0x09, 0x9c, 0x01, 0x01, 0xff, 0x4e, 0xe0, 0x26, 0x9c, 0xf5, 0x01, + 0x45, 0x8f, 0x13, 0x1a, 0x26, 0x40, 0x46, 0x12, 0x03, 0x24, 0x2b, 0x80, + 0x06, 0x46, 0xd6, 0x05, 0x1b, 0x2b, 0x40, 0x07, 0x57, 0xcd, 0x01, 0xff, + 0xac, 0x0c, 0x55, 0xe5, 0x3d, 0x6d, 0xcc, 0x01, 0x55, 0xb7, 0x3e, 0x6c, + 0xcc, 0x41, 0x53, 0x32, 0x49, 0x6b, 0xcc, 0x01, 0x54, 0xec, 0x44, 0x6e, + 0xcc, 0x41, 0x55, 0x4d, 0x39, 0xaa, 0xf5, 0x01, 0xa5, 0x0f, 0xaf, 0x01, + 0xff, 0x50, 0xd6, 0x66, 0x2c, 0x2b, 0x00, 0x47, 0xfe, 0xd6, 0xd7, 0x29, + 0x40, 0x43, 0x2c, 0x01, 0xa4, 0xf5, 0x81, 0x06, 0x45, 0x8f, 0xd1, 0x22, + 0x2b, 0x40, 0x45, 0x9e, 0x27, 0x65, 0x26, 0x40, 0xac, 0x0f, 0xaf, 0x01, + 0xff, 0x44, 0x1b, 0x1e, 0xbf, 0xf5, 0x01, 0x4f, 0x64, 0x74, 0x26, 0x27, + 0x40, 0x42, 0x23, 0x02, 0x91, 0x26, 0x00, 0x46, 0xae, 0x0f, 0x3f, 0x27, + 0x40, 0x46, 0x96, 0x44, 0xc6, 0x25, 0x80, 0x45, 0x03, 0xa6, 0x01, 0x19, + 0xb2, 0x01, 0xff, 0x07, 0x39, 0xca, 0x06, 0x45, 0x98, 0xe9, 0x22, 0xf3, + 0x41, 0x44, 0xb2, 0x34, 0xc3, 0x26, 0x00, 0x43, 0x41, 0x18, 0xc2, 0x26, + 0x40, 0x58, 0xd6, 0x26, 0xa3, 0xf5, 0x01, 0x0a, 0x8c, 0x0b, 0x06, 0x5b, + 0xcf, 0x01, 0x9f, 0x2b, 0x40, 0x4f, 0x3f, 0x6c, 0xec, 0x23, 0x00, 0x58, + 0x5e, 0x29, 0x83, 0xf7, 0x01, 0x4e, 0x26, 0x0c, 0xbe, 0x25, 0x00, 0x48, + 0x01, 0x02, 0xbc, 0x25, 0x40, 0x80, 0x01, 0xff, 0x47, 0xbb, 0x68, 0xc1, + 0x2b, 0x00, 0x4d, 0x12, 0x86, 0x56, 0x27, 0x00, 0x48, 0x40, 0xc9, 0xde, + 0x2b, 0x00, 0x44, 0x9f, 0x27, 0x66, 0x26, 0x00, 0x4f, 0xcd, 0x74, 0xea, + 0x29, 0x40, 0x50, 0xc6, 0x62, 0x2c, 0x27, 0x00, 0x05, 0x4b, 0x88, 0x79, + 0x45, 0x13, 0x03, 0xcf, 0x25, 0x80, 0x52, 0x48, 0x10, 0xc8, 0x63, 0x26, + 0x00, 0x4e, 0xd5, 0x7b, 0xe8, 0x26, 0x00, 0x06, 0x69, 0x41, 0x01, 0xff, + 0x0e, 0xe0, 0x04, 0x31, 0x0e, 0x43, 0x79, 0x21, 0x0f, 0xa2, 0x72, 0x11, + 0x0c, 0x9e, 0x19, 0x01, 0xff, 0x4f, 0x4d, 0x1a, 0xaa, 0x2b, 0x00, 0x50, + 0xb3, 0x02, 0xab, 0x2b, 0x40, 0x4f, 0x34, 0x0c, 0xaf, 0x2b, 0x00, 0x4d, + 0xc1, 0x20, 0xad, 0x2b, 0x40, 0x4f, 0x34, 0x0c, 0xae, 0x2b, 0x00, 0x4d, + 0xc1, 0x20, 0xac, 0x2b, 0x40, 0x4f, 0x4d, 0x1a, 0xa8, 0x2b, 0x00, 0x50, + 0xb3, 0x02, 0xa9, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x65, 0xaa, 0xfa, + 0x23, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0xcc, 0x41, 0xed, 0x29, + 0x00, 0x4e, 0xb1, 0x7d, 0x89, 0x26, 0x00, 0x4f, 0xbe, 0x74, 0x88, 0x26, + 0x40, 0x45, 0x25, 0xe4, 0x57, 0xfa, 0x01, 0x46, 0x2e, 0xda, 0x5d, 0x26, + 0x80, 0xed, 0x01, 0x4a, 0x15, 0xaa, 0x49, 0xfa, 0x81, 0xdf, 0x01, 0x44, + 0xbd, 0xef, 0x56, 0xfa, 0x01, 0xab, 0x73, 0x44, 0xfd, 0xf1, 0x5f, 0x26, + 0x80, 0x5b, 0x45, 0x52, 0xbe, 0x5b, 0x26, 0x80, 0x43, 0x44, 0x5d, 0xf2, + 0x5c, 0x26, 0x80, 0x2b, 0x07, 0x27, 0x0a, 0x01, 0xff, 0x46, 0x2e, 0xda, + 0x27, 0xfa, 0x01, 0xab, 0x12, 0x44, 0xfd, 0xf1, 0x29, 0xfa, 0x01, 0x45, + 0x52, 0xbe, 0x25, 0xfa, 0x01, 0x44, 0x5d, 0xf2, 0x26, 0xfa, 0x41, 0x43, + 0xa1, 0x01, 0x24, 0xfa, 0x01, 0x45, 0x4e, 0x09, 0x28, 0xfa, 0x41, 0x09, + 0xa3, 0x2c, 0x01, 0xff, 0x4e, 0xac, 0x2c, 0x11, 0xfa, 0x01, 0x5b, 0xbc, + 0x1d, 0x3b, 0xfa, 0x41, 0x09, 0xa3, 0x2c, 0x01, 0xff, 0x4e, 0xac, 0x2c, + 0x10, 0xfa, 0x01, 0x5b, 0xbc, 0x1d, 0x3a, 0xfa, 0x41, 0x09, 0xa3, 0x2c, + 0x01, 0xff, 0x4e, 0xac, 0x2c, 0x14, 0xfa, 0x01, 0x5b, 0xbc, 0x1d, 0x3e, + 0xfa, 0x41, 0x43, 0xa1, 0x01, 0x5a, 0x26, 0x80, 0x4c, 0x45, 0x4e, 0x09, + 0x5e, 0x26, 0xc0, 0x00, 0x09, 0xa3, 0x2c, 0x15, 0x8d, 0x01, 0xff, 0x46, + 0x2e, 0xda, 0x53, 0xfa, 0x01, 0x45, 0x52, 0xbe, 0x51, 0xfa, 0x01, 0x44, + 0x5d, 0xf2, 0x52, 0xfa, 0x41, 0x52, 0xcd, 0x51, 0x07, 0xfa, 0x01, 0x4e, + 0xac, 0x2c, 0x13, 0xfa, 0x01, 0x5f, 0x6d, 0x11, 0x1c, 0xfa, 0x01, 0xb4, + 0x01, 0xff, 0x5c, 0xfa, 0x17, 0x46, 0xfa, 0x01, 0x0b, 0xbd, 0x1d, 0x01, + 0xff, 0x4f, 0xc8, 0x1d, 0x3d, 0xfa, 0x01, 0x53, 0xf2, 0x4d, 0x31, 0xfa, + 0x41, 0x09, 0xa3, 0x2c, 0x01, 0xff, 0x4e, 0xac, 0x2c, 0x0f, 0xfa, 0x01, + 0x5b, 0xbc, 0x1d, 0x39, 0xfa, 0x41, 0x57, 0xa3, 0x2c, 0x4c, 0xfa, 0x41, + 0x09, 0xa3, 0x2c, 0x01, 0xff, 0x4e, 0xac, 0x2c, 0x12, 0xfa, 0x01, 0x5b, + 0xbc, 0x1d, 0x3c, 0xfa, 0x41, 0x04, 0x20, 0x25, 0x4d, 0x02, 0xa3, 0x01, + 0x3d, 0x44, 0xdd, 0xf0, 0x59, 0xf4, 0x01, 0x02, 0x60, 0x07, 0x27, 0x4c, + 0xf7, 0x92, 0x23, 0x26, 0x00, 0xb2, 0x15, 0x43, 0x21, 0x1d, 0xac, 0xf9, + 0x01, 0xb4, 0x01, 0xff, 0x49, 0x4a, 0xb7, 0xbf, 0x20, 0x00, 0x47, 0x27, + 0x91, 0xe6, 0xfa, 0x41, 0xe4, 0x26, 0xf4, 0x01, 0x4a, 0xdb, 0xb1, 0x82, + 0xf3, 0x41, 0x46, 0x1e, 0xdb, 0xe2, 0xf9, 0x01, 0x45, 0x3b, 0xe7, 0xb1, + 0xf3, 0x41, 0x4f, 0x66, 0x72, 0xf9, 0x29, 0x00, 0x47, 0x4f, 0x31, 0xf8, + 0x29, 0x40, 0xe5, 0xb2, 0xf6, 0x01, 0x43, 0x2b, 0x24, 0xb4, 0xf6, 0x41, + 0xa4, 0x92, 0x04, 0x0b, 0x39, 0x9c, 0x85, 0x04, 0x52, 0x81, 0x52, 0x6c, + 0x1c, 0x01, 0x07, 0xec, 0x05, 0xee, 0x01, 0x07, 0xff, 0x39, 0x6d, 0x05, + 0x5a, 0x03, 0x44, 0x0b, 0x40, 0x77, 0x06, 0x4e, 0xd7, 0x7e, 0x43, 0x1c, + 0x41, 0xa1, 0x2c, 0xe5, 0x38, 0x1c, 0x01, 0xe9, 0x30, 0x1c, 0x81, 0x1f, + 0xef, 0x3a, 0x1c, 0x01, 0xf5, 0x32, 0x1c, 0x81, 0x12, 0x08, 0x22, 0xc1, + 0x01, 0xff, 0xec, 0x36, 0x1c, 0x01, 0xf2, 0x34, 0x1c, 0xc1, 0x00, 0xf2, + 0x35, 0x1c, 0x41, 0xf5, 0x33, 0x1c, 0x41, 0xe9, 0x31, 0x1c, 0x41, 0xe1, + 0x2f, 0x1c, 0x01, 0xe9, 0x39, 0x1c, 0x01, 0xf5, 0x3b, 0x1c, 0x41, 0xa1, + 0x17, 0x4b, 0xd7, 0x23, 0x3c, 0x1c, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, + 0x44, 0xe5, 0x23, 0x3f, 0x1c, 0x01, 0x45, 0xec, 0x4b, 0x3e, 0x1c, 0x41, + 0x47, 0x3d, 0x16, 0x3d, 0x1c, 0x01, 0x47, 0xaf, 0x88, 0x40, 0x1c, 0x41, + 0x45, 0x12, 0x0b, 0x61, 0x1c, 0x81, 0x72, 0xa6, 0x53, 0x44, 0xcf, 0x2a, + 0x62, 0x1c, 0x81, 0x46, 0x43, 0x0e, 0x0b, 0x5a, 0x1c, 0x01, 0xb3, 0x24, + 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x63, 0x1c, 0x01, 0xa8, 0x0d, 0xb7, + 0x01, 0xff, 0x44, 0xcb, 0x1d, 0x64, 0x1c, 0x01, 0xef, 0x5b, 0x1c, 0x41, + 0x44, 0x7b, 0x11, 0x65, 0x1c, 0x01, 0x43, 0x26, 0x01, 0x5c, 0x1c, 0x41, + 0x44, 0xc9, 0x1d, 0x60, 0x1c, 0x81, 0x0d, 0x42, 0x01, 0x26, 0x5f, 0x1c, + 0xc1, 0x00, 0x42, 0x7d, 0x11, 0x68, 0x1c, 0x41, 0x42, 0x7d, 0x11, 0x69, + 0x1c, 0x41, 0x42, 0x7d, 0x11, 0x6b, 0x1c, 0x41, 0xa9, 0x0f, 0xaf, 0x01, + 0xff, 0x43, 0x7c, 0x11, 0x66, 0x1c, 0x01, 0x42, 0x42, 0x00, 0x5d, 0x1c, + 0x41, 0x43, 0x52, 0x4d, 0x67, 0x1c, 0x01, 0x42, 0x32, 0x00, 0x5e, 0x1c, + 0x41, 0xf9, 0x6a, 0x1c, 0x41, 0xe1, 0x00, 0x1c, 0x81, 0xfa, 0x01, 0xa2, + 0xed, 0x01, 0xa3, 0xe0, 0x01, 0xa4, 0xc7, 0x01, 0xe5, 0x0a, 0x1c, 0x01, + 0xa7, 0xb6, 0x01, 0x42, 0x22, 0x00, 0x2e, 0x1c, 0x01, 0xe9, 0x02, 0x1c, + 0x81, 0xa6, 0x01, 0xaa, 0x99, 0x01, 0xab, 0x8c, 0x01, 0x42, 0x74, 0x00, + 0x29, 0x1c, 0x01, 0x42, 0x6c, 0x00, 0x26, 0x1c, 0x01, 0xae, 0x68, 0xef, + 0x0c, 0x1c, 0x01, 0xb0, 0x58, 0x42, 0x71, 0x00, 0x28, 0x1c, 0x01, 0xb3, + 0x40, 0xb4, 0x27, 0xf5, 0x04, 0x1c, 0x81, 0x1e, 0xb6, 0x06, 0x42, 0xbc, + 0x22, 0x27, 0x1c, 0x41, 0xe1, 0x2a, 0x1c, 0x01, 0x07, 0x23, 0xc1, 0x01, + 0xff, 0xec, 0x08, 0x1c, 0x01, 0xf2, 0x06, 0x1c, 0xc1, 0x00, 0xf2, 0x07, + 0x1c, 0x41, 0xf5, 0x05, 0x1c, 0x41, 0xe1, 0x1d, 0x1c, 0x01, 0x42, 0x22, + 0x00, 0x1e, 0x1c, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x18, 0x1c, 0x01, 0x42, + 0x22, 0x00, 0x19, 0x1c, 0x41, 0xe1, 0x2d, 0x1c, 0x01, 0x42, 0x22, 0x00, + 0x2b, 0x1c, 0x01, 0x42, 0x40, 0x06, 0x2c, 0x1c, 0x41, 0xe1, 0x22, 0x1c, + 0x01, 0x42, 0x22, 0x00, 0x23, 0x1c, 0x41, 0xe1, 0x21, 0x1c, 0x01, 0x42, + 0x24, 0x02, 0x12, 0x1c, 0x01, 0x42, 0x2a, 0x05, 0x1c, 0x1c, 0x01, 0x42, + 0xbc, 0x22, 0x17, 0x1c, 0x41, 0xe1, 0x0e, 0x1c, 0x01, 0x42, 0x22, 0x00, + 0x0f, 0x1c, 0x41, 0xe1, 0x15, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x16, 0x1c, + 0x41, 0xe9, 0x03, 0x1c, 0x41, 0xe1, 0x10, 0x1c, 0x01, 0x42, 0x22, 0x00, + 0x11, 0x1c, 0x41, 0xe1, 0x1f, 0x1c, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, + 0x20, 0x1c, 0x41, 0xe1, 0x1a, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x1b, 0x1c, + 0x41, 0xe1, 0x13, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x14, 0x1c, 0x41, 0xe1, + 0x24, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x25, 0x1c, 0x41, 0xe1, 0x01, 0x1c, + 0x01, 0xe9, 0x0b, 0x1c, 0x01, 0xf5, 0x0d, 0x1c, 0x41, 0xd1, 0x44, 0x1c, + 0x01, 0xd2, 0x45, 0x1c, 0x41, 0x44, 0x73, 0x20, 0x41, 0x1c, 0x01, 0x05, + 0xf0, 0x06, 0x06, 0x4b, 0x09, 0xa1, 0x42, 0x1c, 0x41, 0x45, 0x12, 0x0b, + 0x58, 0x1c, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x59, 0x1c, 0x01, 0x43, + 0x0e, 0x0b, 0x51, 0x1c, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, + 0x50, 0x1c, 0x41, 0x44, 0x25, 0x01, 0x53, 0x1c, 0x01, 0x42, 0x15, 0x02, + 0x52, 0x1c, 0x41, 0x44, 0xc9, 0x1d, 0x57, 0x1c, 0x01, 0x42, 0x01, 0x26, + 0x56, 0x1c, 0x41, 0x43, 0xd2, 0x05, 0x55, 0x1c, 0x01, 0x43, 0xf6, 0x06, + 0x54, 0x1c, 0x41, 0xa1, 0xad, 0x08, 0x45, 0x01, 0xe5, 0x35, 0x22, 0x00, + 0xe4, 0xcf, 0xf6, 0x01, 0xa5, 0x94, 0x08, 0x42, 0x60, 0x07, 0x14, 0xf5, + 0x81, 0xec, 0x07, 0xae, 0xde, 0x02, 0x09, 0xb5, 0xbe, 0x14, 0xb4, 0x06, + 0x4a, 0x43, 0xb3, 0xc3, 0xf9, 0x41, 0x47, 0x15, 0x08, 0x36, 0x21, 0x00, + 0x44, 0xc3, 0x09, 0x6c, 0x22, 0x40, 0x0f, 0xe4, 0x05, 0xa3, 0x01, 0x0d, + 0x76, 0x08, 0x01, 0xff, 0xa1, 0x91, 0x01, 0x47, 0x6b, 0xcf, 0xbc, 0x6e, + 0x01, 0xa4, 0x7d, 0xa5, 0x6a, 0x45, 0x64, 0xe6, 0xbf, 0x6e, 0x01, 0xa7, + 0x56, 0x48, 0xb8, 0xc6, 0xc1, 0x6e, 0x01, 0xe9, 0xc2, 0x6e, 0x01, 0x44, + 0xd2, 0xe4, 0xc4, 0x6e, 0x01, 0x45, 0x12, 0xe8, 0xc5, 0x6e, 0x01, 0x44, + 0x8e, 0x58, 0xc6, 0x6e, 0x01, 0xae, 0x2c, 0x42, 0x9d, 0x01, 0xca, 0x6e, + 0x01, 0x42, 0xe6, 0x05, 0xcb, 0x6e, 0x01, 0xb3, 0x12, 0x48, 0x68, 0xcb, + 0xd0, 0x6e, 0x01, 0x42, 0x3e, 0x00, 0xd1, 0x6e, 0x01, 0x45, 0x3b, 0xec, + 0xd2, 0x6e, 0x41, 0x43, 0x21, 0x08, 0xce, 0x6e, 0x01, 0x43, 0x69, 0x36, + 0xcf, 0x6e, 0x41, 0x43, 0x44, 0x9c, 0xc9, 0x6e, 0x01, 0x43, 0x57, 0x07, + 0xc7, 0x6e, 0x41, 0x42, 0x2a, 0x05, 0xc8, 0x6e, 0x01, 0x44, 0xf1, 0xf1, + 0xc0, 0x6e, 0x41, 0xe8, 0xbe, 0x6e, 0x01, 0x44, 0x82, 0x7a, 0xcc, 0x6e, + 0xc1, 0x00, 0x47, 0x9d, 0xcd, 0xcd, 0x6e, 0x41, 0x45, 0x61, 0xe4, 0xbd, + 0x6e, 0x01, 0x43, 0x20, 0xd2, 0xc3, 0x6e, 0x41, 0x44, 0x51, 0xf2, 0xbb, + 0x6e, 0x01, 0xf9, 0xd3, 0x6e, 0x41, 0xa1, 0x91, 0x01, 0x47, 0x6b, 0xcf, + 0xa1, 0x6e, 0x01, 0xa4, 0x7d, 0xa5, 0x6a, 0x45, 0x64, 0xe6, 0xa4, 0x6e, + 0x01, 0xa7, 0x56, 0x48, 0xb8, 0xc6, 0xa6, 0x6e, 0x01, 0xe9, 0xa7, 0x6e, + 0x01, 0x44, 0xd2, 0xe4, 0xa9, 0x6e, 0x01, 0x45, 0x12, 0xe8, 0xaa, 0x6e, + 0x01, 0x44, 0x8e, 0x58, 0xab, 0x6e, 0x01, 0xae, 0x2c, 0x42, 0x9d, 0x01, + 0xaf, 0x6e, 0x01, 0x42, 0xe6, 0x05, 0xb0, 0x6e, 0x01, 0xb3, 0x12, 0x48, + 0x68, 0xcb, 0xb5, 0x6e, 0x01, 0x42, 0x3e, 0x00, 0xb6, 0x6e, 0x01, 0x45, + 0x3b, 0xec, 0xb7, 0x6e, 0x41, 0x43, 0x21, 0x08, 0xb3, 0x6e, 0x01, 0x43, + 0x69, 0x36, 0xb4, 0x6e, 0x41, 0x43, 0x44, 0x9c, 0xae, 0x6e, 0x01, 0x43, + 0x57, 0x07, 0xac, 0x6e, 0x41, 0x42, 0x2a, 0x05, 0xad, 0x6e, 0x01, 0x44, + 0xf1, 0xf1, 0xa5, 0x6e, 0x41, 0xe8, 0xa3, 0x6e, 0x01, 0x44, 0x82, 0x7a, + 0xb1, 0x6e, 0xc1, 0x00, 0x47, 0x9d, 0xcd, 0xb2, 0x6e, 0x41, 0x45, 0x61, + 0xe4, 0xa2, 0x6e, 0x01, 0x43, 0x20, 0xd2, 0xa8, 0x6e, 0x41, 0x44, 0x51, + 0xf2, 0xa0, 0x6e, 0x01, 0xf9, 0xb8, 0x6e, 0x41, 0x05, 0xf8, 0xb5, 0x1b, + 0xb4, 0x0d, 0x49, 0xcd, 0xc1, 0x2c, 0x23, 0xc0, 0x00, 0x4c, 0xef, 0x22, + 0xe3, 0x23, 0x40, 0x69, 0x95, 0x01, 0x5e, 0x2b, 0x00, 0x45, 0x5c, 0xe9, + 0x71, 0xf3, 0x41, 0xa1, 0xd7, 0x04, 0x09, 0x54, 0x41, 0xa5, 0x04, 0x06, + 0xef, 0x06, 0xde, 0x03, 0x4a, 0xa1, 0xaa, 0xfb, 0x09, 0x00, 0x46, 0x1c, + 0xdd, 0xfa, 0x09, 0x00, 0x07, 0xec, 0x05, 0x8c, 0x01, 0x06, 0x65, 0x80, + 0x7c, 0xb3, 0x44, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x31, 0xe5, 0xc7, + 0x09, 0x00, 0xe9, 0xbf, 0x09, 0x80, 0x24, 0xef, 0xcb, 0x09, 0x00, 0xf5, + 0xc1, 0x09, 0x80, 0x17, 0x08, 0x22, 0xc1, 0x01, 0xff, 0xec, 0xe2, 0x09, + 0x80, 0x09, 0xf2, 0xc3, 0x09, 0xc0, 0x00, 0xf2, 0xc4, 0x09, 0x40, 0xec, + 0xe3, 0x09, 0x40, 0xf5, 0xc2, 0x09, 0x40, 0xe9, 0xc0, 0x09, 0x40, 0xe1, + 0xbe, 0x09, 0x00, 0xe9, 0xc8, 0x09, 0x00, 0xf5, 0xcc, 0x09, 0x40, 0x4a, + 0xbd, 0xa7, 0xfe, 0x09, 0x00, 0x04, 0x5b, 0x03, 0x01, 0xff, 0xa1, 0x1d, + 0x4b, 0xd7, 0x23, 0x81, 0x09, 0x00, 0x45, 0x3f, 0x3f, 0xbc, 0x09, 0x00, + 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0xe5, 0x23, 0xcd, 0x09, 0x00, 0x45, + 0xec, 0x4b, 0x83, 0x09, 0x40, 0x47, 0x3d, 0x16, 0x82, 0x09, 0x00, 0x47, + 0xaf, 0x88, 0xbd, 0x09, 0x40, 0x44, 0xb9, 0x00, 0xf2, 0x09, 0x00, 0x44, + 0x5a, 0x03, 0xf3, 0x09, 0x40, 0xe1, 0x85, 0x09, 0x80, 0xaf, 0x02, 0xa2, + 0xa2, 0x02, 0xa3, 0x95, 0x02, 0xa4, 0xfc, 0x01, 0xe5, 0x8f, 0x09, 0x00, + 0xa7, 0xeb, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x09, 0x00, 0xe9, 0x87, 0x09, + 0x80, 0xdb, 0x01, 0xaa, 0xce, 0x01, 0xab, 0xba, 0x01, 0x42, 0x74, 0x00, + 0xb2, 0x09, 0x00, 0x42, 0x6c, 0x00, 0xae, 0x09, 0x00, 0xae, 0x95, 0x01, + 0xef, 0x93, 0x09, 0x00, 0xb0, 0x84, 0x01, 0xb2, 0x60, 0xb3, 0x4e, 0xb4, + 0x35, 0xf5, 0x89, 0x09, 0x80, 0x2c, 0xb6, 0x0d, 0xb9, 0x01, 0xff, 0xe1, + 0xaf, 0x09, 0x00, 0x42, 0xbc, 0x22, 0xdf, 0x09, 0x40, 0x4d, 0x6a, 0x82, + 0xfc, 0x09, 0x00, 0x07, 0x23, 0xc1, 0x01, 0xff, 0xec, 0x8c, 0x09, 0x80, + 0x09, 0xf2, 0x8b, 0x09, 0xc0, 0x00, 0xf2, 0xe0, 0x09, 0x40, 0xec, 0xe1, + 0x09, 0x40, 0xf5, 0x8a, 0x09, 0x40, 0xe1, 0xa4, 0x09, 0x00, 0x42, 0x22, + 0x00, 0xa5, 0x09, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x9f, 0x09, 0x00, 0x42, + 0x22, 0x00, 0xa0, 0x09, 0x40, 0xe1, 0xb8, 0x09, 0x00, 0x42, 0x22, 0x00, + 0xb6, 0x09, 0x00, 0x42, 0x40, 0x06, 0xb7, 0x09, 0x40, 0xe1, 0xb0, 0x09, + 0x80, 0x0c, 0x42, 0x22, 0x00, 0xdd, 0x09, 0x00, 0x42, 0x71, 0x00, 0xdc, + 0x09, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4e, 0xb3, 0x79, 0xf1, 0x09, + 0x00, 0x4f, 0x4a, 0x70, 0xf0, 0x09, 0x40, 0xe1, 0xaa, 0x09, 0x00, 0x42, + 0x22, 0x00, 0xab, 0x09, 0x40, 0xe1, 0xa8, 0x09, 0x00, 0x42, 0x24, 0x02, + 0x99, 0x09, 0x00, 0x42, 0x2a, 0x05, 0xa3, 0x09, 0x00, 0x42, 0xbc, 0x22, + 0x9e, 0x09, 0x40, 0xe1, 0x95, 0x09, 0x00, 0x42, 0x22, 0x00, 0x96, 0x09, + 0xc0, 0x00, 0x46, 0x36, 0xde, 0xce, 0x09, 0x40, 0xe1, 0x9c, 0x09, 0x00, + 0x42, 0x22, 0x00, 0x9d, 0x09, 0x40, 0xe9, 0x88, 0x09, 0x40, 0xe1, 0x97, + 0x09, 0x00, 0x42, 0x22, 0x00, 0x98, 0x09, 0x40, 0xe1, 0xa6, 0x09, 0x00, + 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa7, 0x09, 0x40, 0xe1, 0xa1, 0x09, 0x00, + 0x42, 0x22, 0x00, 0xa2, 0x09, 0x40, 0xe1, 0x9a, 0x09, 0x00, 0x42, 0x22, + 0x00, 0x9b, 0x09, 0x40, 0xe1, 0xac, 0x09, 0x00, 0x42, 0x22, 0x00, 0xad, + 0x09, 0x40, 0xe1, 0x86, 0x09, 0x00, 0xe9, 0x90, 0x09, 0x00, 0xf5, 0x94, + 0x09, 0x40, 0x45, 0x12, 0x0b, 0xee, 0x09, 0x00, 0xa6, 0x2e, 0x44, 0xcf, + 0x2a, 0xef, 0x09, 0x00, 0x43, 0x0e, 0x0b, 0xe7, 0x09, 0x00, 0xb3, 0x14, + 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xe6, 0x09, 0x40, 0x44, 0x25, 0x01, 0xe9, + 0x09, 0x00, 0x42, 0x15, 0x02, 0xe8, 0x09, 0x40, 0x44, 0xc9, 0x1d, 0xed, + 0x09, 0x00, 0x42, 0x01, 0x26, 0xec, 0x09, 0x40, 0x43, 0xd2, 0x05, 0xeb, + 0x09, 0x00, 0x43, 0xf6, 0x06, 0xea, 0x09, 0x40, 0x53, 0xf9, 0x48, 0xf9, + 0x09, 0x00, 0x0a, 0x94, 0x86, 0x01, 0xff, 0x44, 0xf5, 0x06, 0xf7, 0x09, + 0x00, 0x43, 0x0e, 0x0b, 0xf4, 0x09, 0x80, 0x0f, 0xb4, 0x01, 0xff, 0x44, + 0x25, 0x01, 0xf6, 0x09, 0x00, 0x42, 0x15, 0x02, 0xf5, 0x09, 0x40, 0x5a, + 0x78, 0x1e, 0xf8, 0x09, 0x40, 0x50, 0xdd, 0x57, 0xfd, 0x09, 0x00, 0x43, + 0x5a, 0x87, 0x80, 0x09, 0x00, 0x4d, 0x18, 0x76, 0xd7, 0x09, 0x40, 0x80, + 0x0c, 0x48, 0xc0, 0xc6, 0xce, 0xf6, 0x01, 0x43, 0x50, 0x16, 0xce, 0xce, + 0x41, 0x46, 0x1a, 0xdf, 0xd1, 0xfa, 0x01, 0x46, 0x16, 0x08, 0x7e, 0x23, + 0x00, 0x58, 0xfe, 0x2b, 0x15, 0xf5, 0x41, 0x45, 0x90, 0xb6, 0x7a, 0xf3, + 0x01, 0x43, 0xbd, 0x01, 0xb2, 0xfa, 0x41, 0x50, 0x56, 0x61, 0xd6, 0xf3, + 0x01, 0x04, 0x67, 0x9f, 0x20, 0x42, 0x5f, 0x01, 0xd8, 0xfa, 0x01, 0xb2, + 0x0c, 0x4a, 0xf9, 0xb1, 0x93, 0xf4, 0x01, 0x43, 0x32, 0x00, 0xab, 0xf9, + 0x41, 0x45, 0x0b, 0x08, 0x3b, 0xf4, 0x01, 0x4a, 0x39, 0xa9, 0xd4, 0xf9, + 0x41, 0x57, 0x72, 0x2d, 0x9c, 0xf3, 0x01, 0x58, 0xf6, 0x27, 0x9d, 0xf3, + 0x01, 0x4c, 0x6b, 0x8e, 0x6b, 0x26, 0x00, 0x4f, 0x1a, 0x73, 0x6c, 0x26, + 0x40, 0x42, 0x08, 0x00, 0x76, 0xf4, 0x81, 0xa9, 0x30, 0xa3, 0xeb, 0x2f, + 0xa4, 0xdc, 0x2f, 0xa7, 0xc7, 0x2f, 0xac, 0xa9, 0x27, 0x04, 0x43, 0x92, + 0xca, 0x05, 0xae, 0x99, 0x05, 0xb2, 0x82, 0x05, 0xb3, 0x80, 0x03, 0xf4, + 0x87, 0xf9, 0xc1, 0x00, 0x03, 0xcd, 0x4c, 0x11, 0xe8, 0xc0, 0xf6, 0x81, + 0x06, 0x44, 0xfa, 0xd9, 0x0b, 0xf5, 0x41, 0x43, 0x6a, 0xb5, 0xc1, 0xf6, + 0x41, 0x0f, 0x3d, 0x33, 0xd7, 0x02, 0x07, 0xec, 0x05, 0x6b, 0x03, 0xb3, + 0x43, 0x5b, 0xb3, 0x33, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xe5, 0xe7, 0x1b, + 0x80, 0x25, 0xe9, 0xea, 0x1b, 0x00, 0x05, 0x4a, 0xd2, 0x15, 0xef, 0xec, + 0x1b, 0x00, 0x48, 0xc0, 0xc9, 0xe8, 0x1b, 0x00, 0xf5, 0xee, 0x1b, 0xc0, + 0x00, 0x52, 0x45, 0x4f, 0xef, 0x1b, 0x40, 0xe9, 0xeb, 0x1b, 0x00, 0xef, + 0xed, 0x1b, 0x40, 0xe5, 0xe9, 0x1b, 0x40, 0x49, 0x35, 0xba, 0xe6, 0x1b, + 0x00, 0x0c, 0x23, 0x97, 0x01, 0xff, 0x45, 0xb3, 0xe7, 0xfe, 0x1b, 0x00, + 0x48, 0x78, 0xc8, 0xfc, 0x1b, 0x00, 0xb0, 0x01, 0xff, 0x47, 0xed, 0xce, + 0xff, 0x1b, 0x00, 0x49, 0x62, 0xba, 0xfd, 0x1b, 0x40, 0x45, 0xef, 0xce, + 0xf2, 0x1b, 0x00, 0x47, 0xee, 0xd3, 0xf3, 0x1b, 0x40, 0xe1, 0xc0, 0x1b, + 0x00, 0x42, 0x16, 0x00, 0xc5, 0x1b, 0x00, 0x42, 0x37, 0x00, 0xe1, 0x1b, + 0x00, 0x42, 0xf0, 0x10, 0xd1, 0x1b, 0x00, 0x42, 0x24, 0x02, 0xce, 0x1b, + 0x00, 0x42, 0x22, 0x00, 0xc2, 0x1b, 0x00, 0xe9, 0xe4, 0x1b, 0x00, 0x42, + 0x56, 0x19, 0xd0, 0x1b, 0x00, 0x47, 0x4a, 0xd2, 0xc6, 0x1b, 0x00, 0x42, + 0x74, 0x00, 0xde, 0x1b, 0x00, 0xad, 0x8b, 0x01, 0xae, 0x6d, 0x42, 0xbb, + 0x09, 0xc7, 0x1b, 0x80, 0x60, 0x42, 0x71, 0x00, 0xd2, 0x1b, 0x00, 0xb3, + 0x10, 0xf5, 0xe5, 0x1b, 0x00, 0x42, 0xa9, 0x01, 0xcb, 0x1b, 0x00, 0x42, + 0xbc, 0x22, 0xdb, 0x1b, 0x40, 0xe1, 0xd8, 0x1b, 0x00, 0x0a, 0x4b, 0x4f, + 0x06, 0x4a, 0x5b, 0xaf, 0xd6, 0x1b, 0x40, 0xe1, 0xc1, 0x1b, 0x00, 0x42, + 0x24, 0x02, 0xcf, 0x1b, 0x00, 0x42, 0x22, 0x00, 0xc3, 0x1b, 0x00, 0x42, + 0x74, 0x00, 0xdf, 0x1b, 0x00, 0x42, 0x6c, 0x00, 0xd5, 0x1b, 0x00, 0x42, + 0xbb, 0x09, 0xc8, 0x1b, 0x00, 0x42, 0x71, 0x00, 0xd3, 0x1b, 0x00, 0x42, + 0x40, 0x06, 0xd9, 0x1b, 0x00, 0x42, 0xa9, 0x01, 0xcc, 0x1b, 0x00, 0x42, + 0xbc, 0x22, 0xdc, 0x1b, 0x40, 0x47, 0x82, 0xd2, 0xcd, 0x1b, 0x40, 0xe1, + 0xc9, 0x1b, 0x00, 0x42, 0xf0, 0x10, 0xe2, 0x1b, 0x00, 0x42, 0x24, 0x02, + 0xdd, 0x1b, 0x00, 0x4a, 0x0b, 0xaf, 0xd7, 0x1b, 0x00, 0x42, 0xbc, 0x22, + 0xe0, 0x1b, 0x40, 0xe1, 0xd4, 0x1b, 0x80, 0x06, 0x42, 0x16, 0x00, 0xe3, + 0x1b, 0x40, 0x09, 0x36, 0xbc, 0x01, 0xff, 0x42, 0x22, 0x00, 0xc4, 0x1b, + 0x00, 0x42, 0x2a, 0x05, 0xca, 0x1b, 0x00, 0x42, 0x40, 0x06, 0xda, 0x1b, + 0x40, 0xe8, 0xf1, 0x1b, 0x00, 0x42, 0x1d, 0x01, 0xf0, 0x1b, 0x40, 0x45, + 0xbf, 0xe5, 0xbe, 0x26, 0x00, 0x43, 0x67, 0x09, 0xfa, 0xf9, 0x81, 0xeb, + 0x01, 0x07, 0x92, 0xd5, 0x01, 0xff, 0x0a, 0x41, 0x59, 0xbb, 0x01, 0x49, + 0x81, 0x16, 0xf5, 0x6a, 0x01, 0x07, 0xec, 0x05, 0x01, 0xff, 0xe1, 0xe7, + 0x6a, 0x01, 0x42, 0x16, 0x00, 0xe2, 0x6a, 0x01, 0x42, 0x73, 0x02, 0xdf, + 0x6a, 0x01, 0xa4, 0x93, 0x01, 0xe5, 0xec, 0x6a, 0x81, 0x83, 0x01, 0x42, + 0x0c, 0x08, 0xd3, 0x6a, 0x01, 0xa7, 0x6f, 0x44, 0x3e, 0xf0, 0xda, 0x6a, + 0x01, 0xe9, 0xed, 0x6a, 0x01, 0x42, 0x9d, 0x0a, 0xd9, 0x6a, 0x01, 0xab, + 0x53, 0x43, 0xb6, 0x05, 0xd4, 0x6a, 0x01, 0xef, 0xe8, 0x6a, 0x81, 0x44, + 0x42, 0xbb, 0x09, 0xe5, 0x6a, 0x01, 0x42, 0x46, 0x03, 0xd2, 0x6a, 0x01, + 0x42, 0x1e, 0x00, 0xe1, 0x6a, 0x01, 0xf5, 0xea, 0x6a, 0x81, 0x27, 0x42, + 0x67, 0x62, 0xe3, 0x6a, 0x01, 0x42, 0xa9, 0x01, 0xdb, 0x6a, 0x81, 0x14, + 0xb9, 0x06, 0x42, 0x0f, 0x00, 0xdc, 0x6a, 0x41, 0x43, 0x2e, 0x11, 0xe4, + 0x6a, 0x01, 0x42, 0xf4, 0x02, 0xd5, 0x6a, 0x41, 0x43, 0x7a, 0x36, 0xe6, + 0x6a, 0x41, 0x42, 0x7c, 0x31, 0xe0, 0x6a, 0x41, 0xef, 0xe9, 0x6a, 0x41, + 0xe1, 0xd1, 0x6a, 0x01, 0x43, 0xe2, 0x42, 0xd8, 0x6a, 0x41, 0x42, 0x18, + 0x0a, 0xd6, 0x6a, 0x01, 0x42, 0x6a, 0x0d, 0xdd, 0x6a, 0x41, 0xe5, 0xeb, + 0x6a, 0x01, 0x43, 0x4e, 0x1f, 0xd0, 0x6a, 0x41, 0x43, 0x45, 0xf0, 0xd7, + 0x6a, 0x01, 0xef, 0xde, 0x6a, 0x41, 0x04, 0x48, 0x0b, 0x16, 0x03, 0x13, + 0x01, 0x06, 0x48, 0x26, 0xb5, 0xf2, 0x6a, 0x41, 0x45, 0x3a, 0x2d, 0xf1, + 0x6a, 0x01, 0x49, 0x25, 0xb5, 0xf3, 0x6a, 0x41, 0x45, 0x3a, 0x2d, 0xf0, + 0x6a, 0x01, 0x49, 0x1c, 0xb5, 0xf4, 0x6a, 0x41, 0x4d, 0x0b, 0x81, 0xc0, + 0xf3, 0x41, 0x80, 0x06, 0x48, 0x00, 0xc4, 0x88, 0xf4, 0x41, 0x45, 0xb3, + 0xc4, 0xca, 0xf4, 0x01, 0x47, 0xb6, 0xd3, 0xfc, 0xf9, 0x41, 0x43, 0x4b, + 0x12, 0x4c, 0xf3, 0x01, 0x42, 0x9d, 0x0a, 0x95, 0xfa, 0x01, 0xeb, 0xe6, + 0xf3, 0xc1, 0x00, 0x0a, 0x6b, 0xae, 0x01, 0xff, 0x4b, 0x10, 0x9b, 0xb5, + 0xf4, 0x01, 0x49, 0xc4, 0xb8, 0xb6, 0xf4, 0x01, 0x4a, 0xab, 0xaf, 0xb7, + 0xf4, 0x01, 0x48, 0x2f, 0x7f, 0xb4, 0xf4, 0x41, 0x02, 0x13, 0x05, 0xb6, + 0x21, 0x49, 0x81, 0x16, 0xf3, 0xa6, 0x00, 0x07, 0xec, 0x05, 0x12, 0x47, + 0x93, 0xd3, 0xf2, 0xa6, 0x00, 0x4d, 0xa6, 0x34, 0xf7, 0xa6, 0x00, 0x49, + 0x21, 0xbf, 0xf6, 0xa6, 0x40, 0xe1, 0xa0, 0xa6, 0x00, 0x42, 0x27, 0x01, + 0xa4, 0xa6, 0x00, 0xa6, 0xf7, 0x20, 0xe9, 0xa9, 0xa6, 0x00, 0xab, 0xb7, + 0x20, 0xac, 0x9c, 0x20, 0xed, 0xb3, 0xa6, 0x80, 0xec, 0x1f, 0xae, 0x90, + 0x1f, 0xef, 0xa7, 0xa6, 0x00, 0xb0, 0x93, 0x01, 0xb2, 0x6b, 0xb3, 0x3d, + 0xb4, 0x23, 0xf5, 0xa2, 0xa6, 0x00, 0xb7, 0x13, 0xb9, 0x01, 0xff, 0xe1, + 0xc2, 0xa6, 0x00, 0x42, 0x63, 0x93, 0xbf, 0xa6, 0x00, 0x42, 0x0b, 0x9c, + 0xc1, 0xa6, 0x40, 0xe1, 0xda, 0xa6, 0x00, 0x42, 0xd6, 0x13, 0xc9, 0xa6, + 0x40, 0xa1, 0x0e, 0xa5, 0x04, 0xe9, 0xe4, 0xa6, 0x40, 0xee, 0xea, 0xa6, + 0x00, 0xf4, 0xe8, 0xa6, 0x40, 0xe1, 0xb0, 0xa6, 0x00, 0xe5, 0xa6, 0xa6, + 0x40, 0x44, 0x83, 0xcd, 0xec, 0xa6, 0x00, 0x43, 0xfc, 0xeb, 0xb9, 0xa6, + 0x00, 0xa8, 0x0a, 0xe9, 0xb7, 0xa6, 0x00, 0x42, 0x27, 0x74, 0xb4, 0xa6, + 0x40, 0x43, 0xfc, 0xeb, 0xb8, 0xa6, 0x00, 0x42, 0x52, 0x28, 0xb6, 0xa6, + 0x00, 0xef, 0xd6, 0xa6, 0x00, 0xf5, 0xc0, 0xa6, 0x40, 0x42, 0x93, 0x0f, + 0xd1, 0xa6, 0x00, 0xa5, 0x10, 0xa9, 0x04, 0xf5, 0xcc, 0xa6, 0x40, 0x42, + 0x27, 0x01, 0xad, 0xa6, 0x00, 0xe9, 0xac, 0xa6, 0x40, 0xe5, 0xa5, 0xa6, + 0x00, 0xee, 0xe1, 0xa6, 0x00, 0x42, 0xbf, 0xe0, 0xd0, 0xa6, 0x40, 0xe1, + 0xab, 0xa6, 0x00, 0xa5, 0xe5, 0x1d, 0x05, 0xe6, 0xe6, 0x11, 0xe9, 0xdd, + 0xa6, 0x00, 0xb5, 0x01, 0xff, 0x42, 0x93, 0x0f, 0xd7, 0xa6, 0x00, 0xe5, + 0xc8, 0xa6, 0x40, 0x02, 0x5a, 0x00, 0xdf, 0x18, 0x02, 0x26, 0x02, 0xb8, + 0x15, 0x02, 0x53, 0x03, 0x94, 0x10, 0x02, 0x06, 0x00, 0x96, 0x0a, 0x02, + 0x60, 0x00, 0xc2, 0x02, 0x02, 0x25, 0x00, 0x01, 0xff, 0x42, 0x27, 0x01, + 0x06, 0x6a, 0x01, 0x43, 0x46, 0xf4, 0x2b, 0x6a, 0x01, 0xab, 0x8c, 0x02, + 0xac, 0xfb, 0x01, 0xed, 0x11, 0x6a, 0x81, 0xd9, 0x01, 0xae, 0x93, 0x01, + 0xb0, 0x7f, 0xb2, 0x5d, 0xb3, 0x35, 0xb4, 0x23, 0xf5, 0x04, 0x6a, 0x01, + 0x44, 0x11, 0xf3, 0x38, 0x6a, 0x01, 0xb7, 0x0d, 0xb9, 0x01, 0xff, 0xe1, + 0x1d, 0x6a, 0x01, 0x42, 0x63, 0x93, 0x1b, 0x6a, 0x41, 0xe1, 0x2c, 0x6a, + 0x01, 0x42, 0xd6, 0x13, 0x21, 0x6a, 0x41, 0xa1, 0x06, 0x42, 0xed, 0x05, + 0x35, 0x6a, 0x41, 0xe1, 0x0e, 0x6a, 0x01, 0xe5, 0x08, 0x6a, 0x41, 0x44, + 0x83, 0xcd, 0x37, 0x6a, 0x01, 0x43, 0xfc, 0xeb, 0x15, 0x6a, 0x01, 0xa8, + 0x0a, 0xe9, 0x14, 0x6a, 0x01, 0x42, 0x27, 0x74, 0x12, 0x6a, 0x41, 0x42, + 0x52, 0x28, 0x13, 0x6a, 0x01, 0xef, 0x29, 0x6a, 0x01, 0xf5, 0x1c, 0x6a, + 0x41, 0xa5, 0x10, 0xa9, 0x04, 0xf5, 0x23, 0x6a, 0x41, 0x42, 0x27, 0x01, + 0x0c, 0x6a, 0x01, 0xe9, 0x0b, 0x6a, 0x41, 0xe5, 0x07, 0x6a, 0x01, 0xee, + 0x31, 0x6a, 0x01, 0x42, 0xbf, 0xe0, 0x25, 0x6a, 0x41, 0xa5, 0x06, 0x43, + 0x9f, 0x95, 0x2a, 0x6a, 0x41, 0xe5, 0x22, 0x6a, 0x01, 0x42, 0xbf, 0xe0, + 0x1f, 0x6a, 0x41, 0x43, 0xa5, 0x57, 0x0f, 0x6a, 0x01, 0xa7, 0x2f, 0xe9, + 0x24, 0x6a, 0x01, 0xaa, 0x1d, 0x43, 0xa4, 0x02, 0x1e, 0x6a, 0x01, 0x43, + 0x0a, 0x18, 0x20, 0x6a, 0x01, 0xf5, 0x19, 0x6a, 0x81, 0x06, 0x42, 0x7e, + 0x1a, 0x09, 0x6a, 0x41, 0x42, 0x93, 0x0f, 0x18, 0x6a, 0x41, 0x43, 0x61, + 0x87, 0x10, 0x6a, 0x01, 0x43, 0x9f, 0x95, 0x1a, 0x6a, 0x41, 0x42, 0x24, + 0x02, 0x28, 0x6a, 0x01, 0x45, 0xf4, 0xe7, 0x27, 0x6a, 0x41, 0xe1, 0x32, + 0x6a, 0x01, 0xa2, 0x0a, 0x44, 0x98, 0xef, 0x0d, 0x6a, 0x01, 0xef, 0x33, + 0x6a, 0x41, 0x42, 0x80, 0x12, 0x34, 0x6a, 0x01, 0x42, 0x92, 0x01, 0x30, + 0x6a, 0x41, 0xe1, 0x0a, 0x6a, 0x01, 0xe9, 0x2d, 0x6a, 0x01, 0x42, 0x63, + 0x93, 0x2e, 0x6a, 0x41, 0xe1, 0x03, 0x6a, 0x01, 0xa5, 0x14, 0xef, 0x2f, + 0x6a, 0x01, 0x42, 0xbb, 0x09, 0x36, 0x6a, 0x01, 0xf5, 0x05, 0x6a, 0x01, + 0x43, 0xcd, 0xa9, 0x16, 0x6a, 0x41, 0xee, 0x26, 0x6a, 0x01, 0xf4, 0x17, + 0x6a, 0x41, 0xe1, 0xd5, 0x69, 0x01, 0xa6, 0x95, 0x07, 0xa7, 0xde, 0x06, + 0xe9, 0xd8, 0x69, 0x01, 0xab, 0xa3, 0x06, 0xac, 0xf2, 0x05, 0xad, 0x94, + 0x05, 0xae, 0x81, 0x03, 0xef, 0xd7, 0x69, 0x01, 0xb0, 0x98, 0x02, 0xb2, + 0xff, 0x01, 0xb3, 0xc9, 0x01, 0xb4, 0x7a, 0xb6, 0x66, 0xb7, 0x53, 0xb9, + 0x01, 0xff, 0x42, 0xe5, 0x05, 0xac, 0x69, 0x01, 0x02, 0x97, 0x02, 0x33, + 0xa9, 0x27, 0x03, 0x63, 0x93, 0x17, 0xb5, 0x01, 0xff, 0x43, 0x1b, 0x42, + 0xe1, 0x69, 0x01, 0x42, 0x7b, 0x00, 0xb2, 0x69, 0x01, 0xee, 0xe5, 0x69, + 0x01, 0xf1, 0xe4, 0x69, 0x41, 0x45, 0x1e, 0x08, 0xe3, 0x69, 0x01, 0x48, + 0x40, 0xcb, 0xe2, 0x69, 0x41, 0x42, 0x27, 0x01, 0x94, 0x69, 0x01, 0xf4, + 0xae, 0x69, 0x41, 0x42, 0x93, 0x0f, 0x97, 0x69, 0x81, 0x08, 0xed, 0xbe, + 0x69, 0x01, 0xf8, 0xdf, 0x69, 0x41, 0xf4, 0xcf, 0x69, 0x41, 0x43, 0xfc, + 0xeb, 0x9e, 0x69, 0x01, 0xb5, 0x01, 0xff, 0xe5, 0xea, 0x69, 0x01, 0xef, + 0x75, 0x69, 0x41, 0xa5, 0x06, 0x42, 0x14, 0x05, 0x6a, 0x69, 0x41, 0xe5, + 0xec, 0x69, 0x01, 0x43, 0x9f, 0x95, 0x9d, 0x69, 0x41, 0xa1, 0x34, 0xa5, + 0x23, 0xaf, 0x14, 0xb5, 0x01, 0xff, 0x42, 0x93, 0x0f, 0x96, 0x69, 0x01, + 0xed, 0xaa, 0x69, 0xc1, 0x00, 0x42, 0x93, 0x0f, 0x99, 0x69, 0x41, 0xef, + 0x79, 0x69, 0x81, 0x04, 0xf1, 0xd6, 0x69, 0x41, 0xee, 0x67, 0x69, 0x41, + 0xee, 0x00, 0x6a, 0x01, 0xf5, 0xfd, 0x69, 0xc1, 0x00, 0x43, 0xa0, 0x95, + 0x9c, 0x69, 0x41, 0xe1, 0xdb, 0x69, 0x81, 0x0e, 0x48, 0x98, 0xc5, 0x8f, + 0x69, 0x01, 0xed, 0x72, 0x69, 0x01, 0xf1, 0xdc, 0x69, 0x41, 0xf1, 0xa1, + 0x69, 0x41, 0x42, 0x80, 0x12, 0x85, 0x69, 0x01, 0xa5, 0x23, 0xa8, 0x0c, + 0x42, 0x14, 0x05, 0x6d, 0x69, 0x01, 0x44, 0xf7, 0xc0, 0x9b, 0x69, 0x41, + 0x45, 0x9e, 0x95, 0xa4, 0x69, 0x01, 0x42, 0x6b, 0x18, 0xde, 0x69, 0x01, + 0xef, 0xf3, 0x69, 0xc1, 0x00, 0xf1, 0xf4, 0x69, 0x41, 0xe5, 0x76, 0x69, + 0x01, 0xf4, 0x90, 0x69, 0x41, 0xa1, 0x0c, 0x43, 0xfc, 0xeb, 0xef, 0x69, + 0x01, 0x45, 0x68, 0xe7, 0x82, 0x69, 0x41, 0xe5, 0xf0, 0x69, 0x01, 0xf1, + 0x6e, 0x69, 0x41, 0xa1, 0x47, 0xa5, 0x34, 0xe9, 0xf7, 0x69, 0x81, 0x22, + 0xef, 0x98, 0x69, 0x81, 0x17, 0xf5, 0xa0, 0x69, 0xc1, 0x00, 0xa1, 0x08, + 0xe5, 0xe9, 0x69, 0x01, 0xed, 0x91, 0x69, 0x41, 0xe5, 0x71, 0x69, 0x01, + 0xf1, 0xca, 0x69, 0x41, 0x42, 0x10, 0x00, 0xc2, 0x69, 0x41, 0xa5, 0x01, + 0xff, 0x42, 0x7b, 0x00, 0xb1, 0x69, 0x01, 0xf4, 0xcd, 0x69, 0x41, 0x42, + 0xb5, 0x05, 0x84, 0x69, 0x01, 0xb5, 0x01, 0xff, 0xf4, 0xbd, 0x69, 0x01, + 0xf8, 0xe7, 0x69, 0x41, 0x02, 0x9b, 0x01, 0x09, 0xe1, 0x6c, 0x69, 0xc1, + 0x00, 0xed, 0x78, 0x69, 0x41, 0x45, 0x0f, 0xe6, 0xd1, 0x69, 0x01, 0x45, + 0x44, 0xe8, 0xda, 0x69, 0x41, 0xe1, 0xf6, 0x69, 0x81, 0x86, 0x02, 0xa4, + 0xdb, 0x01, 0xa7, 0x66, 0xaa, 0x4a, 0x43, 0x95, 0xca, 0xa8, 0x69, 0x01, + 0x02, 0xa4, 0x02, 0x2d, 0xb4, 0x1f, 0x03, 0x24, 0x7a, 0x0f, 0xba, 0x01, + 0xff, 0x42, 0x80, 0x36, 0xa7, 0x69, 0x01, 0x42, 0x0b, 0x9c, 0xc1, 0x69, + 0x41, 0x47, 0xc0, 0x09, 0xc0, 0x69, 0x01, 0x47, 0xf7, 0xcf, 0xad, 0x69, + 0x41, 0x42, 0xe5, 0x05, 0xce, 0x69, 0x01, 0x42, 0x48, 0x04, 0xbc, 0x69, + 0x41, 0x43, 0x5e, 0x8e, 0x7c, 0x69, 0x01, 0xb5, 0x01, 0xff, 0xe5, 0x81, + 0x69, 0x01, 0x42, 0x1f, 0x00, 0x6f, 0x69, 0x41, 0x45, 0x95, 0xd3, 0x8a, + 0x69, 0x01, 0xa5, 0x01, 0xff, 0xe5, 0xd4, 0x69, 0x81, 0x06, 0x42, 0xbf, + 0xe0, 0x83, 0x69, 0x41, 0x46, 0x06, 0xd8, 0xe8, 0x69, 0x41, 0xe1, 0xf2, + 0x69, 0x01, 0x46, 0x8a, 0xdb, 0xa3, 0x69, 0x01, 0xa7, 0x3b, 0xab, 0x15, + 0xaf, 0x0b, 0x43, 0x9f, 0x95, 0xe0, 0x69, 0xc1, 0x00, 0xf4, 0xf1, 0x69, + 0x41, 0xf0, 0x7d, 0x69, 0x01, 0xf1, 0x80, 0x69, 0x41, 0xe1, 0x73, 0x69, + 0x81, 0x19, 0x02, 0x97, 0x02, 0x0b, 0xb5, 0x01, 0xff, 0xed, 0xcb, 0x69, + 0x01, 0xf0, 0xb6, 0x69, 0x41, 0x43, 0x61, 0x87, 0x89, 0x69, 0x01, 0xf8, + 0x7f, 0x69, 0x41, 0x43, 0xc9, 0x61, 0xb9, 0x69, 0x41, 0xa5, 0x19, 0x42, + 0x1f, 0x00, 0x7d, 0x69, 0x01, 0xb5, 0x01, 0xff, 0x4b, 0xdf, 0x98, 0x93, + 0x69, 0x01, 0xf0, 0xd0, 0x69, 0x01, 0x43, 0x75, 0x82, 0x86, 0x69, 0x41, + 0x43, 0x73, 0xa9, 0x8d, 0x69, 0x01, 0x43, 0x9f, 0x95, 0xbf, 0x69, 0xc1, + 0x00, 0xf4, 0x77, 0x69, 0x41, 0xa1, 0x12, 0xa9, 0x06, 0x42, 0x42, 0x0b, + 0x70, 0x69, 0x41, 0x42, 0x80, 0x36, 0xb0, 0x69, 0x01, 0xf1, 0x8e, 0x69, + 0x41, 0x02, 0x5a, 0x00, 0x04, 0xf0, 0x66, 0x69, 0x41, 0x48, 0x68, 0xc8, + 0xdd, 0x69, 0x01, 0x48, 0x18, 0xcb, 0x92, 0x69, 0x41, 0xe5, 0xc5, 0x69, + 0x41, 0xe1, 0xfb, 0x69, 0x81, 0x45, 0x02, 0xb7, 0x05, 0x37, 0x42, 0x92, + 0x01, 0xfa, 0x69, 0x01, 0x44, 0xc5, 0xef, 0xaf, 0x69, 0x01, 0x02, 0x99, + 0x48, 0x1d, 0xe9, 0xee, 0x69, 0x81, 0x12, 0x42, 0x10, 0x00, 0xff, 0x69, + 0x01, 0x43, 0x9f, 0x95, 0xc6, 0x69, 0x01, 0x42, 0x02, 0x00, 0xc9, 0x69, + 0x41, 0x42, 0x27, 0x01, 0xc3, 0x69, 0x41, 0xe1, 0x87, 0x69, 0x01, 0x42, + 0x92, 0x01, 0xa5, 0x69, 0x41, 0xe5, 0xa6, 0x69, 0x01, 0x42, 0x48, 0x04, + 0x68, 0x69, 0x41, 0xe5, 0xb8, 0x69, 0x81, 0x08, 0xf0, 0x8b, 0x69, 0x01, + 0xf1, 0xfc, 0x69, 0x41, 0xed, 0x7e, 0x69, 0x41, 0xa1, 0x1e, 0x45, 0x32, + 0xe6, 0xb3, 0x69, 0x01, 0xaf, 0x04, 0xf5, 0xed, 0x69, 0x41, 0xed, 0x7b, + 0x69, 0x01, 0xaf, 0x04, 0xf1, 0xf8, 0x69, 0x41, 0xee, 0x6b, 0x69, 0x01, + 0xf4, 0x8c, 0x69, 0x41, 0x42, 0x57, 0x00, 0x9f, 0x69, 0x01, 0xf0, 0x69, + 0x69, 0x01, 0xf1, 0xd9, 0x69, 0x41, 0xa5, 0x21, 0xe9, 0xfe, 0x69, 0x01, + 0xef, 0xf9, 0x69, 0x01, 0x44, 0x09, 0xf2, 0x74, 0x69, 0x01, 0xb5, 0x01, + 0xff, 0x42, 0xed, 0x05, 0xab, 0x69, 0x01, 0x42, 0x1f, 0x00, 0x7a, 0x69, + 0x01, 0xf4, 0xcc, 0x69, 0x41, 0xf4, 0xb7, 0x69, 0x01, 0xb5, 0x01, 0xff, + 0x42, 0x93, 0x0f, 0x9a, 0x69, 0x01, 0xf8, 0xe6, 0x69, 0x41, 0x02, 0xb7, + 0x05, 0x26, 0xa8, 0x01, 0xff, 0x45, 0xfd, 0xe3, 0xa2, 0x69, 0x01, 0xa5, + 0x06, 0x42, 0x14, 0x05, 0x02, 0x6a, 0x41, 0xf4, 0xba, 0x69, 0x01, 0xb5, + 0x01, 0xff, 0x42, 0x93, 0x0f, 0xc7, 0x69, 0x01, 0xee, 0x95, 0x69, 0x01, + 0xf8, 0x88, 0x69, 0x41, 0xf4, 0xa9, 0x69, 0x01, 0x42, 0xbf, 0xe0, 0xb5, + 0x69, 0x41, 0xe1, 0xbb, 0x69, 0x81, 0x2a, 0x42, 0x27, 0x01, 0xeb, 0x69, + 0x01, 0x42, 0x14, 0x05, 0xd3, 0x69, 0x01, 0xb5, 0x01, 0xff, 0x80, 0x09, + 0xe5, 0xb4, 0x69, 0xc1, 0x00, 0xf4, 0xc4, 0x69, 0x41, 0x44, 0x31, 0x17, + 0xd2, 0x69, 0x01, 0xe9, 0xc8, 0x69, 0x01, 0x46, 0x80, 0xdf, 0xf5, 0x69, + 0x41, 0xf1, 0x01, 0x6a, 0x41, 0xa6, 0xea, 0x05, 0x02, 0x40, 0x00, 0xd9, + 0x05, 0xab, 0x9a, 0x05, 0xac, 0xec, 0x04, 0xed, 0x51, 0x69, 0x81, 0xeb, + 0x03, 0xae, 0xfb, 0x01, 0xb0, 0xd3, 0x01, 0xb2, 0xb4, 0x01, 0xb3, 0x66, + 0xb4, 0x30, 0xb7, 0x22, 0xb9, 0x01, 0xff, 0x46, 0x7a, 0xd9, 0x05, 0x69, + 0x01, 0x42, 0x92, 0x01, 0x0d, 0x69, 0x01, 0xb5, 0x01, 0xff, 0xaf, 0x06, + 0x43, 0xc4, 0xf4, 0x25, 0x69, 0x41, 0xed, 0x34, 0x69, 0x01, 0xf0, 0x36, + 0x69, 0x41, 0x42, 0xe5, 0x05, 0xf2, 0x68, 0x01, 0x44, 0xf7, 0xc0, 0xfb, + 0x68, 0x41, 0x42, 0x93, 0x0f, 0x4b, 0x69, 0x01, 0xa5, 0x15, 0xe9, 0x61, + 0x69, 0x01, 0x42, 0x63, 0x93, 0x4c, 0x69, 0x01, 0xf5, 0x11, 0x69, 0xc1, + 0x00, 0x42, 0x1b, 0x05, 0x3d, 0x69, 0x41, 0x43, 0x73, 0xa9, 0x28, 0x69, + 0x01, 0xb5, 0x01, 0xff, 0x43, 0x1b, 0x42, 0x23, 0x69, 0x01, 0xee, 0x41, + 0x69, 0x01, 0xf4, 0x00, 0x69, 0x41, 0xa1, 0x42, 0x45, 0x9e, 0x95, 0x0c, + 0x69, 0x01, 0xa8, 0x17, 0x42, 0x1b, 0x05, 0x24, 0x69, 0x01, 0xb5, 0x01, + 0xff, 0x42, 0x93, 0x0f, 0x39, 0x69, 0x01, 0xe5, 0x03, 0x69, 0x01, 0xf5, + 0x52, 0x69, 0x41, 0xa5, 0x10, 0x42, 0x52, 0x28, 0x54, 0x69, 0x01, 0x42, + 0x63, 0x93, 0x5c, 0x69, 0x01, 0xf5, 0x58, 0x69, 0x41, 0xe5, 0xfd, 0x68, + 0x01, 0xb5, 0x01, 0xff, 0x42, 0x93, 0x0f, 0x01, 0x69, 0x01, 0xf8, 0x55, + 0x69, 0x41, 0xf0, 0x07, 0x69, 0x01, 0xf1, 0x64, 0x69, 0x41, 0x43, 0x61, + 0x87, 0x27, 0x69, 0x01, 0x03, 0xb1, 0x01, 0x06, 0x42, 0x52, 0x28, 0x4e, + 0x69, 0x41, 0x44, 0xd5, 0xe8, 0x60, 0x69, 0x01, 0x43, 0xe1, 0x1a, 0x4a, + 0x69, 0x41, 0x42, 0xe5, 0x05, 0x35, 0x69, 0x01, 0xa5, 0x13, 0x42, 0xba, + 0x04, 0x2d, 0x69, 0x01, 0xb5, 0x01, 0xff, 0xf1, 0x5d, 0x69, 0x01, 0x42, + 0x29, 0x08, 0x1b, 0x69, 0x41, 0xe5, 0x5a, 0x69, 0x01, 0x44, 0xe9, 0xf2, + 0x2e, 0x69, 0x41, 0xa4, 0xd2, 0x01, 0xa7, 0x7e, 0xe9, 0x5b, 0x69, 0x01, + 0xaa, 0x53, 0xb3, 0x31, 0xb4, 0x1d, 0xf5, 0x57, 0x69, 0x01, 0xb9, 0x01, + 0xff, 0x42, 0x57, 0x00, 0xfa, 0x68, 0x01, 0x42, 0xed, 0x05, 0x22, 0x69, + 0x01, 0xe9, 0x4d, 0x69, 0x01, 0x42, 0xd6, 0x13, 0x2f, 0x69, 0x41, 0xa5, + 0x06, 0x42, 0x27, 0x74, 0x62, 0x69, 0x41, 0xe5, 0x59, 0x69, 0x01, 0x42, + 0x48, 0x04, 0x38, 0x69, 0x41, 0xa8, 0x12, 0x03, 0x5e, 0x8e, 0x06, 0x42, + 0x48, 0x04, 0x40, 0x69, 0x41, 0xf0, 0x1f, 0x69, 0x01, 0xf4, 0x2b, 0x69, + 0x41, 0x42, 0x27, 0x01, 0xf8, 0x68, 0x01, 0x42, 0x29, 0x08, 0x46, 0x69, + 0x41, 0x42, 0xe5, 0x05, 0x02, 0x69, 0x01, 0x02, 0x97, 0x02, 0x11, 0xe9, + 0xf3, 0x68, 0x81, 0x06, 0x43, 0x12, 0xf3, 0x47, 0x69, 0x41, 0x42, 0x27, + 0x01, 0xf5, 0x68, 0x41, 0x43, 0x61, 0x87, 0x0e, 0x69, 0x01, 0xf4, 0xf7, + 0x68, 0x41, 0xa7, 0x2b, 0xab, 0x01, 0xff, 0x42, 0xe5, 0x05, 0xfe, 0x68, + 0x01, 0x02, 0x97, 0x02, 0x12, 0x43, 0x5e, 0x8e, 0x3c, 0x69, 0x01, 0x42, + 0x42, 0x0b, 0xfc, 0x68, 0x01, 0x43, 0xcd, 0xa9, 0x13, 0x69, 0x41, 0x43, + 0xa0, 0x95, 0x29, 0x69, 0x01, 0x42, 0x0d, 0x00, 0x10, 0x69, 0x41, 0xa1, + 0x12, 0x43, 0xfc, 0xeb, 0x3b, 0x69, 0x01, 0x43, 0x60, 0xcd, 0x45, 0x69, + 0x01, 0x44, 0x9b, 0xd7, 0x33, 0x69, 0x41, 0x42, 0x57, 0x00, 0x31, 0x69, + 0x81, 0x04, 0xf0, 0x43, 0x69, 0x41, 0x42, 0x93, 0x0f, 0xf9, 0x68, 0x41, + 0x42, 0x57, 0x00, 0x37, 0x69, 0x01, 0xa5, 0x06, 0x42, 0x10, 0x00, 0x18, + 0x69, 0x41, 0xe5, 0x15, 0x69, 0x01, 0x42, 0xbf, 0xe0, 0x09, 0x69, 0x41, + 0xa1, 0x6d, 0xa2, 0x58, 0xa5, 0x45, 0xa6, 0x26, 0x02, 0x99, 0x48, 0x10, + 0x43, 0x49, 0x07, 0x19, 0x69, 0x01, 0xf5, 0x53, 0x69, 0x01, 0x43, 0x6a, + 0xac, 0x5e, 0x69, 0x41, 0x43, 0x03, 0x69, 0x1a, 0x69, 0x01, 0x43, 0x5e, + 0x8e, 0x1c, 0x69, 0x01, 0x44, 0xc1, 0xf1, 0x16, 0x69, 0x41, 0x02, 0x97, + 0x02, 0x0f, 0x43, 0x5e, 0x8e, 0x32, 0x69, 0x01, 0xef, 0x1d, 0x69, 0xc1, + 0x00, 0xee, 0xf4, 0x68, 0x41, 0x42, 0x93, 0x0f, 0x2a, 0x69, 0x01, 0xf4, + 0x08, 0x69, 0x41, 0x43, 0x73, 0xa9, 0x50, 0x69, 0x01, 0xb5, 0x01, 0xff, + 0xee, 0x3e, 0x69, 0x01, 0xf4, 0x0b, 0x69, 0x41, 0x42, 0x80, 0x12, 0x20, + 0x69, 0x81, 0x06, 0x42, 0x1a, 0x05, 0xf1, 0x68, 0x41, 0x46, 0xc7, 0x1d, + 0x63, 0x69, 0x41, 0x45, 0x05, 0xe6, 0x42, 0x69, 0x01, 0x45, 0x12, 0xe6, + 0x0a, 0x69, 0x41, 0xa5, 0x12, 0x43, 0x5e, 0x8e, 0xf6, 0x68, 0x01, 0x42, + 0x63, 0x93, 0x5f, 0x69, 0x01, 0x42, 0x48, 0x04, 0x1e, 0x69, 0x41, 0x43, + 0x73, 0xa9, 0x4f, 0x69, 0x01, 0xf4, 0x30, 0x69, 0x01, 0xb5, 0x01, 0xff, + 0x43, 0x59, 0xdb, 0x17, 0x69, 0x01, 0xed, 0x44, 0x69, 0x41, 0xa5, 0x1f, + 0xf5, 0x49, 0x69, 0x81, 0x0c, 0x44, 0x19, 0xf3, 0x21, 0x69, 0x01, 0x43, + 0xcd, 0xa9, 0x56, 0x69, 0x41, 0xee, 0x3a, 0x69, 0x01, 0x42, 0x14, 0x05, + 0x06, 0x69, 0x01, 0xf1, 0x3f, 0x69, 0x41, 0xf4, 0x04, 0x69, 0x01, 0xb5, + 0x01, 0xff, 0x47, 0x99, 0xce, 0xff, 0x68, 0x01, 0xed, 0x26, 0x69, 0x01, + 0x48, 0x70, 0xc9, 0x0f, 0x69, 0x01, 0xf0, 0x2c, 0x69, 0x41, 0x42, 0x80, + 0x12, 0x12, 0x69, 0x01, 0x44, 0x9e, 0x95, 0x48, 0x69, 0x41, 0x42, 0x80, + 0x12, 0x65, 0x69, 0x01, 0x48, 0xf8, 0xc5, 0x14, 0x69, 0x41, 0x44, 0x4d, + 0xef, 0xc0, 0x68, 0x01, 0x43, 0x49, 0xf4, 0xbc, 0x68, 0x01, 0xa7, 0xfb, + 0x04, 0xab, 0xad, 0x04, 0xac, 0x96, 0x04, 0xad, 0x93, 0x03, 0xae, 0xa9, + 0x01, 0xb0, 0x93, 0x01, 0x42, 0x3d, 0x00, 0xc3, 0x68, 0x01, 0xb3, 0x63, + 0xb4, 0x3e, 0x03, 0xe4, 0x5e, 0x30, 0xb7, 0x22, 0xb9, 0x01, 0xff, 0x42, + 0x80, 0x12, 0xd9, 0x68, 0x01, 0x43, 0x0a, 0x9c, 0xa7, 0x68, 0x01, 0xb5, + 0x01, 0xff, 0x47, 0x5e, 0xcd, 0xa2, 0x68, 0x01, 0xed, 0x91, 0x68, 0x01, + 0x43, 0xc4, 0xf4, 0xe4, 0x68, 0x41, 0x47, 0xd8, 0xce, 0x92, 0x68, 0x01, + 0x42, 0x50, 0x02, 0xd1, 0x68, 0x41, 0x45, 0x16, 0xe4, 0xc1, 0x68, 0x01, + 0xf8, 0xb1, 0x68, 0x41, 0x46, 0x6e, 0xd9, 0xac, 0x68, 0x01, 0xa5, 0x11, + 0x02, 0x52, 0x00, 0x01, 0xff, 0x45, 0xf3, 0xe3, 0xae, 0x68, 0x01, 0x44, + 0x7c, 0xdc, 0xc6, 0x68, 0x41, 0xf4, 0xf0, 0x68, 0x01, 0x45, 0xfa, 0xeb, + 0xba, 0x68, 0x41, 0xa5, 0x1a, 0xa8, 0x06, 0x44, 0x2b, 0xae, 0xaf, 0x68, + 0x41, 0x45, 0x2d, 0xe6, 0xdc, 0x68, 0x01, 0x42, 0x6b, 0x18, 0xe8, 0x68, + 0x01, 0x43, 0x12, 0xf3, 0xdb, 0x68, 0x41, 0x44, 0x2e, 0xe6, 0xdc, 0x68, + 0x01, 0x42, 0xbf, 0xe0, 0xaa, 0x68, 0x41, 0x42, 0x92, 0x01, 0xef, 0x68, + 0x01, 0xa9, 0x01, 0xff, 0xee, 0xee, 0x68, 0x01, 0x45, 0x60, 0xea, 0x9c, + 0x68, 0x41, 0xa1, 0xda, 0x01, 0xa4, 0xb3, 0x01, 0xa7, 0x74, 0xaa, 0x52, + 0xb3, 0x2d, 0xb4, 0x13, 0x50, 0xf6, 0x68, 0x99, 0x68, 0x01, 0xba, 0x01, + 0xff, 0xe1, 0x90, 0x68, 0x01, 0x43, 0xee, 0x57, 0xa3, 0x68, 0x41, 0x42, + 0x80, 0x12, 0xb4, 0x68, 0x01, 0xa5, 0x06, 0x46, 0xc4, 0xe0, 0x9a, 0x68, + 0x41, 0xee, 0xd4, 0x68, 0x01, 0x45, 0xd2, 0xeb, 0xb9, 0x68, 0x41, 0xe1, + 0xbe, 0x68, 0x01, 0x45, 0xf6, 0xc0, 0xa5, 0x68, 0x01, 0x43, 0x4c, 0xf4, + 0xbf, 0x68, 0x01, 0x42, 0x14, 0x05, 0xd3, 0x68, 0x01, 0xb5, 0x01, 0xff, + 0xee, 0xd6, 0x68, 0x01, 0x47, 0x1f, 0xd4, 0xc7, 0x68, 0x41, 0xa1, 0x14, + 0xa5, 0x06, 0x43, 0x12, 0xf3, 0xad, 0x68, 0x41, 0x43, 0x73, 0xa9, 0xc8, + 0x68, 0x01, 0x42, 0xbf, 0xe0, 0xe5, 0x68, 0x41, 0x42, 0xb5, 0x05, 0xc4, + 0x68, 0x01, 0xed, 0xcf, 0x68, 0x41, 0x42, 0x80, 0x36, 0xeb, 0x68, 0x01, + 0xa7, 0x14, 0xab, 0x06, 0x42, 0x14, 0x05, 0xd0, 0x68, 0x41, 0x42, 0x80, + 0x36, 0x95, 0x68, 0x01, 0x49, 0x38, 0xc0, 0x8f, 0x68, 0x41, 0x42, 0x92, + 0x01, 0x93, 0x68, 0x01, 0xf5, 0xca, 0x68, 0xc1, 0x00, 0x48, 0x30, 0xc3, + 0xb0, 0x68, 0x01, 0x43, 0x0f, 0x11, 0xd2, 0x68, 0x01, 0xed, 0xbb, 0x68, + 0x01, 0x42, 0x10, 0x00, 0xb5, 0x68, 0x41, 0xa1, 0x1a, 0x02, 0x97, 0x02, + 0x0c, 0x43, 0x23, 0x95, 0xab, 0x68, 0x01, 0x44, 0x6e, 0xd2, 0x9d, 0x68, + 0x41, 0x45, 0x1b, 0xe4, 0x94, 0x68, 0x01, 0xf4, 0xbd, 0x68, 0x41, 0xed, + 0xd7, 0x68, 0x01, 0xf0, 0xda, 0x68, 0x41, 0x46, 0x7e, 0xde, 0xb2, 0x68, + 0x01, 0xf1, 0xec, 0x68, 0x41, 0xa1, 0x61, 0xa2, 0x12, 0x46, 0xe4, 0xdb, + 0xb8, 0x68, 0x01, 0x43, 0x5e, 0x8e, 0xe6, 0x68, 0x01, 0x43, 0x9f, 0x95, + 0xe7, 0x68, 0x41, 0xa1, 0x35, 0xa5, 0x1c, 0xe9, 0xdd, 0x68, 0x81, 0x0d, + 0xb5, 0x01, 0xff, 0x43, 0x61, 0x87, 0xcc, 0x68, 0x01, 0xe5, 0xa4, 0x68, + 0x41, 0x45, 0x60, 0xea, 0xb7, 0x68, 0x01, 0xf4, 0xa6, 0x68, 0x41, 0x45, + 0xe2, 0xe5, 0x97, 0x68, 0x01, 0x43, 0x75, 0x82, 0xc2, 0x68, 0x01, 0xb5, + 0x01, 0xff, 0xed, 0x9b, 0x68, 0x01, 0xf8, 0xe1, 0x68, 0x41, 0x02, 0x5a, + 0x00, 0x06, 0x43, 0x7d, 0x1a, 0xdf, 0x68, 0x41, 0x4c, 0x1b, 0x8d, 0x9e, + 0x68, 0x01, 0x46, 0x20, 0xdf, 0xe3, 0x68, 0x41, 0x80, 0x0f, 0xa5, 0x01, + 0xff, 0x43, 0x46, 0x9f, 0xde, 0x68, 0x01, 0x42, 0x5a, 0x03, 0xcb, 0x68, + 0x41, 0x47, 0x58, 0xd2, 0xb3, 0x68, 0x01, 0x45, 0x34, 0xe9, 0xd8, 0x68, + 0x41, 0xa1, 0x0a, 0x42, 0x6b, 0x18, 0xed, 0x68, 0x01, 0xf5, 0xcd, 0x68, + 0x41, 0xed, 0xc5, 0x68, 0x01, 0xf0, 0xb6, 0x68, 0x41, 0x42, 0x80, 0x12, + 0xa9, 0x68, 0x01, 0xa5, 0x13, 0x45, 0xfc, 0x68, 0xa8, 0x68, 0x01, 0xb5, + 0x01, 0xff, 0x4a, 0xed, 0xae, 0xd5, 0x68, 0x01, 0xf4, 0xce, 0x68, 0x41, + 0x02, 0x92, 0x00, 0x20, 0xf4, 0xc9, 0x68, 0x01, 0xb5, 0x01, 0xff, 0x43, + 0x64, 0xf4, 0xa1, 0x68, 0x01, 0xed, 0xe2, 0x68, 0x01, 0xb3, 0x01, 0xff, + 0x43, 0xfc, 0xeb, 0xe0, 0x68, 0x01, 0x46, 0x7a, 0xdc, 0x9f, 0x68, 0x41, + 0x47, 0x0f, 0xd1, 0xea, 0x68, 0x01, 0x43, 0x76, 0xd4, 0xe9, 0x68, 0x41, + 0x44, 0x35, 0xef, 0x98, 0x68, 0x01, 0x02, 0x22, 0x00, 0x01, 0xff, 0xf0, + 0xa0, 0x68, 0x01, 0x43, 0x75, 0x82, 0x96, 0x68, 0x41, 0x02, 0x0c, 0x1a, + 0x93, 0x03, 0x07, 0x47, 0xd1, 0x84, 0x03, 0xab, 0xd8, 0x02, 0xac, 0xbb, + 0x02, 0xad, 0xde, 0x01, 0xae, 0x83, 0x01, 0xb0, 0x5e, 0xb3, 0x34, 0xb4, + 0x1b, 0x44, 0xf9, 0xf2, 0x73, 0x68, 0x01, 0x45, 0x6d, 0xec, 0x76, 0x68, + 0x01, 0xb9, 0x01, 0xff, 0x4c, 0x07, 0x8c, 0x62, 0x68, 0x01, 0x45, 0x37, + 0xe6, 0x5e, 0x68, 0x41, 0x43, 0x69, 0x89, 0x78, 0x68, 0x01, 0x02, 0x2e, + 0x02, 0x01, 0xff, 0x49, 0xd3, 0xbb, 0x58, 0x68, 0x01, 0x45, 0x34, 0xe9, + 0x68, 0x68, 0x41, 0x46, 0x57, 0xd2, 0x77, 0x68, 0x01, 0x45, 0x28, 0xe6, + 0x5a, 0x68, 0x01, 0x02, 0xb0, 0x01, 0x0c, 0x43, 0x5e, 0x8e, 0x59, 0x68, + 0x01, 0x42, 0xd6, 0x13, 0x7d, 0x68, 0x41, 0x46, 0x52, 0xe0, 0x69, 0x68, + 0x01, 0x46, 0xca, 0xe0, 0x6a, 0x68, 0x41, 0x44, 0x1d, 0xef, 0x72, 0x68, + 0x01, 0x45, 0xc4, 0xe5, 0x61, 0x68, 0x01, 0x42, 0x52, 0x00, 0x67, 0x68, + 0x01, 0x03, 0xaa, 0x45, 0x01, 0xff, 0x43, 0x69, 0x89, 0x81, 0x68, 0x01, + 0x44, 0xdd, 0xef, 0x81, 0x68, 0x41, 0x47, 0x7c, 0xd0, 0x65, 0x68, 0x01, + 0xa7, 0x23, 0xb3, 0x15, 0x4b, 0x87, 0xa3, 0x64, 0x68, 0x01, 0xb9, 0x01, + 0xff, 0x45, 0x11, 0xe4, 0x80, 0x68, 0x01, 0x47, 0xb0, 0xd1, 0x6d, 0x68, + 0x41, 0x42, 0x92, 0x01, 0x8b, 0x68, 0x01, 0x44, 0xda, 0xd0, 0x57, 0x68, + 0x41, 0xa7, 0x0c, 0x4a, 0x63, 0xac, 0x74, 0x68, 0x01, 0x42, 0x14, 0x05, + 0x8e, 0x68, 0x41, 0x43, 0x69, 0x89, 0x8a, 0x68, 0x01, 0x46, 0x78, 0xdb, + 0x75, 0x68, 0x01, 0x42, 0x14, 0x05, 0x8e, 0x68, 0x01, 0x43, 0x8f, 0xa3, + 0x7a, 0x68, 0xc1, 0x00, 0x46, 0xb1, 0x1c, 0x7b, 0x68, 0x41, 0xe1, 0x8c, + 0x68, 0x81, 0x44, 0xa2, 0x22, 0x02, 0x97, 0x02, 0x14, 0xa6, 0x06, 0x47, + 0xf5, 0xd3, 0x7f, 0x68, 0x41, 0x44, 0x7e, 0x36, 0x7c, 0x68, 0x01, 0x49, + 0x17, 0xbd, 0x6b, 0x68, 0x41, 0xf1, 0x79, 0x68, 0x01, 0x48, 0x48, 0xcb, + 0x82, 0x68, 0x41, 0xa1, 0x12, 0x44, 0xef, 0xeb, 0x7e, 0x68, 0x01, 0x4a, + 0x13, 0xac, 0x6c, 0x68, 0x01, 0x43, 0x8f, 0xa3, 0x84, 0x68, 0x41, 0x47, + 0x49, 0xcd, 0x5c, 0x68, 0x01, 0x44, 0x74, 0x82, 0x5f, 0x68, 0x41, 0x03, + 0x59, 0x87, 0x01, 0xff, 0x46, 0x7e, 0xdb, 0x87, 0x68, 0x01, 0x43, 0xb2, + 0xf4, 0x88, 0x68, 0x41, 0xa1, 0x0c, 0x42, 0xed, 0x05, 0x89, 0x68, 0x01, + 0x48, 0x28, 0xc9, 0x5b, 0x68, 0x41, 0x44, 0x05, 0xef, 0x71, 0x68, 0x01, + 0x4c, 0xa7, 0x91, 0x63, 0x68, 0x41, 0x42, 0x57, 0x00, 0x60, 0x68, 0x01, + 0x02, 0x97, 0x02, 0x0d, 0xa9, 0x01, 0xff, 0x43, 0x4b, 0x18, 0x5d, 0x68, + 0x01, 0xf1, 0x8d, 0x68, 0x41, 0x43, 0x61, 0x87, 0x86, 0x68, 0x01, 0x43, + 0x82, 0xf4, 0x6e, 0x68, 0x01, 0x44, 0x41, 0xf3, 0x70, 0x68, 0x41, 0xee, + 0x6f, 0x68, 0x01, 0x44, 0x33, 0xe6, 0x66, 0x68, 0x41, 0xe5, 0x85, 0x68, + 0x01, 0x42, 0xbf, 0xe0, 0x83, 0x68, 0x41, 0x44, 0xcd, 0xef, 0x39, 0x68, + 0x01, 0xa7, 0xcc, 0x04, 0xab, 0xa5, 0x04, 0xac, 0x85, 0x04, 0xad, 0x8a, + 0x03, 0xae, 0xdc, 0x01, 0xb0, 0x88, 0x01, 0x43, 0xab, 0x05, 0x3a, 0x68, + 0x01, 0xb3, 0x3b, 0xb4, 0x14, 0xb5, 0x06, 0x43, 0xfd, 0x06, 0x52, 0x68, + 0x41, 0x48, 0xb0, 0xc2, 0x20, 0x68, 0x01, 0x46, 0x60, 0xde, 0x44, 0x68, + 0x41, 0x02, 0x97, 0x02, 0x15, 0x48, 0x48, 0xc7, 0x06, 0x68, 0x01, 0xb5, + 0x01, 0xff, 0x47, 0x3a, 0xc0, 0x0c, 0x68, 0x01, 0x43, 0x59, 0xdb, 0x2e, + 0x68, 0x41, 0x43, 0x1b, 0x42, 0x4a, 0x68, 0x01, 0x46, 0x88, 0xe0, 0x31, + 0x68, 0x41, 0x46, 0x84, 0xdb, 0x11, 0x68, 0x01, 0xa8, 0x1c, 0x43, 0x06, + 0x4a, 0x23, 0x68, 0x01, 0xaf, 0x06, 0x42, 0x27, 0x74, 0x15, 0x68, 0x41, + 0x44, 0x81, 0xf1, 0x30, 0x68, 0x01, 0xf1, 0x3c, 0x68, 0x01, 0xf4, 0x4b, + 0x68, 0x41, 0xa9, 0x13, 0x4c, 0x63, 0x93, 0x40, 0x68, 0x01, 0xb5, 0x01, + 0xff, 0x47, 0xd7, 0xd0, 0x05, 0x68, 0x01, 0xed, 0x37, 0x68, 0x41, 0x4a, + 0x4d, 0xae, 0x08, 0x68, 0x01, 0x43, 0x75, 0x82, 0x3e, 0x68, 0x41, 0xa1, + 0x31, 0x42, 0xed, 0x05, 0x2a, 0x68, 0x01, 0x03, 0xb6, 0x00, 0x06, 0x42, + 0x50, 0x02, 0x2d, 0x68, 0x41, 0x0b, 0x72, 0x9f, 0x11, 0x0d, 0x57, 0x87, + 0x01, 0xff, 0x42, 0x16, 0x00, 0x0a, 0x68, 0x01, 0x45, 0xd7, 0xbb, 0x09, + 0x68, 0x41, 0x42, 0x16, 0x00, 0x03, 0x68, 0x01, 0x45, 0xd7, 0xbb, 0x02, + 0x68, 0x41, 0x49, 0x0a, 0x8c, 0x28, 0x68, 0x01, 0xa1, 0x0c, 0x45, 0xd0, + 0xe8, 0x1d, 0x68, 0x01, 0x44, 0xe1, 0x98, 0x1b, 0x68, 0x41, 0xed, 0x4c, + 0x68, 0x01, 0x43, 0x75, 0x82, 0x42, 0x68, 0x41, 0xa1, 0x9e, 0x01, 0x02, + 0xf0, 0x10, 0x8d, 0x01, 0x42, 0x92, 0x01, 0x54, 0x68, 0x01, 0xa7, 0x68, + 0x43, 0xbd, 0x43, 0x2c, 0x68, 0x01, 0x43, 0x82, 0xf1, 0x47, 0x68, 0x01, + 0xab, 0x4e, 0x02, 0xa4, 0x02, 0x40, 0xb4, 0x22, 0xb9, 0x0f, 0xba, 0x01, + 0xff, 0x46, 0x4a, 0xc7, 0x07, 0x68, 0x01, 0x47, 0xc6, 0xd6, 0x1f, 0x68, + 0x41, 0x42, 0xed, 0x05, 0x49, 0x68, 0x01, 0xe9, 0x4f, 0x68, 0xc1, 0x00, + 0x4c, 0x97, 0x95, 0x41, 0x68, 0x41, 0x42, 0xe5, 0x05, 0x3f, 0x68, 0x81, + 0x06, 0x45, 0x9d, 0xe9, 0x12, 0x68, 0x41, 0x80, 0x01, 0xff, 0x44, 0x2d, + 0xf1, 0x19, 0x68, 0x01, 0x44, 0x9d, 0xf1, 0x22, 0x68, 0x41, 0xe1, 0x51, + 0x68, 0x01, 0x43, 0x5e, 0x8e, 0x4d, 0x68, 0x41, 0x45, 0xf2, 0xae, 0x43, + 0x68, 0x01, 0x44, 0xe9, 0x06, 0x14, 0x68, 0x41, 0x44, 0x1c, 0x01, 0x0d, + 0x68, 0x01, 0x43, 0x40, 0x5a, 0x45, 0x68, 0x01, 0x03, 0x67, 0xf4, 0x01, + 0xff, 0x45, 0x4b, 0xc7, 0x00, 0x68, 0x01, 0x45, 0x52, 0xe9, 0x16, 0x68, + 0x41, 0x49, 0x0a, 0x8c, 0x29, 0x68, 0x01, 0x49, 0x18, 0xb6, 0x34, 0x68, + 0x41, 0x46, 0x4a, 0xc7, 0x04, 0x68, 0x01, 0xf1, 0x55, 0x68, 0x41, 0xa1, + 0x39, 0x02, 0x16, 0x00, 0x2b, 0x4b, 0x02, 0x9c, 0x25, 0x68, 0x01, 0x45, + 0xe4, 0xdb, 0x24, 0x68, 0x01, 0xaf, 0x06, 0x49, 0xf5, 0xc0, 0x10, 0x68, + 0x41, 0x4a, 0x25, 0xae, 0x1e, 0x68, 0x01, 0x02, 0x14, 0x05, 0x01, 0xff, + 0x43, 0x4d, 0x8e, 0x36, 0x68, 0x01, 0x43, 0x82, 0xf4, 0x26, 0x68, 0x41, + 0x43, 0x7d, 0x1a, 0x48, 0x68, 0x01, 0xf1, 0x56, 0x68, 0x41, 0xa5, 0x0c, + 0x45, 0x39, 0xe9, 0x0f, 0x68, 0x01, 0x47, 0x6c, 0xd4, 0x3d, 0x68, 0x41, + 0x44, 0xd5, 0xf0, 0x1a, 0x68, 0x01, 0xed, 0x4e, 0x68, 0x81, 0x0c, 0x43, + 0x7d, 0x1a, 0x32, 0x68, 0x01, 0x42, 0x5a, 0x03, 0x46, 0x68, 0x41, 0x46, + 0x22, 0xda, 0x0b, 0x68, 0x01, 0x45, 0xd7, 0xbb, 0x0b, 0x68, 0x01, 0x44, + 0xb1, 0x71, 0x2b, 0x68, 0x01, 0x44, 0xfd, 0xf2, 0x0e, 0x68, 0x41, 0x44, + 0x09, 0xef, 0x17, 0x68, 0x01, 0x46, 0x72, 0xdb, 0x18, 0x68, 0x01, 0x45, + 0x93, 0xe9, 0x38, 0x68, 0x01, 0xf5, 0x53, 0x68, 0xc1, 0x00, 0x43, 0x59, + 0xdb, 0x2f, 0x68, 0x41, 0xa1, 0x18, 0xa5, 0x0c, 0x43, 0x7f, 0xf4, 0x3b, + 0x68, 0x01, 0x43, 0x8f, 0xa3, 0x35, 0x68, 0x41, 0xf4, 0x33, 0x68, 0x01, + 0x48, 0x00, 0xcc, 0x13, 0x68, 0x41, 0x42, 0x0c, 0x08, 0x27, 0x68, 0x01, + 0xf1, 0x50, 0x68, 0x41, 0x48, 0x10, 0xc4, 0x01, 0x68, 0x01, 0x05, 0x09, + 0xdc, 0x01, 0xff, 0x46, 0x08, 0xdc, 0x21, 0x68, 0x01, 0x43, 0x75, 0x82, + 0x1c, 0x68, 0x41, 0xe5, 0xca, 0xa6, 0x00, 0x42, 0xbf, 0xe0, 0xc5, 0xa6, + 0x40, 0xe1, 0xdb, 0xa6, 0x00, 0x43, 0xa5, 0x57, 0xb1, 0xa6, 0x00, 0xa7, + 0x3d, 0xe9, 0xcf, 0xa6, 0x00, 0xaa, 0x25, 0x43, 0xa4, 0x02, 0xc3, 0xa6, + 0x00, 0xb4, 0x11, 0xf5, 0xbd, 0xa6, 0x80, 0x06, 0x42, 0x7e, 0x1a, 0xa8, + 0xa6, 0x40, 0x42, 0x93, 0x0f, 0xbc, 0xa6, 0x40, 0x42, 0x27, 0x01, 0xc7, + 0xa6, 0x00, 0x42, 0x27, 0x74, 0xeb, 0xa6, 0x40, 0x43, 0x61, 0x87, 0xb2, + 0xa6, 0x00, 0x42, 0x27, 0x01, 0xc6, 0xa6, 0x00, 0x43, 0x9f, 0x95, 0xbe, + 0xa6, 0x40, 0xe1, 0xd5, 0xa6, 0x00, 0x42, 0x24, 0x02, 0xd4, 0xa6, 0x00, + 0x45, 0xf4, 0xe7, 0xd3, 0xa6, 0x40, 0xe1, 0xe3, 0xa6, 0x00, 0xa2, 0x18, + 0xa5, 0x0c, 0xe9, 0xce, 0xa6, 0x00, 0xef, 0xe6, 0xa6, 0x00, 0xf5, 0xb5, + 0xa6, 0x40, 0x43, 0x73, 0xa9, 0xaf, 0xa6, 0x00, 0xee, 0xe2, 0xa6, 0x40, + 0x42, 0x80, 0x12, 0xe7, 0xa6, 0x00, 0x42, 0x92, 0x01, 0xe0, 0xa6, 0x40, + 0xe1, 0xaa, 0xa6, 0x00, 0x44, 0x99, 0xef, 0xae, 0xa6, 0x00, 0xe9, 0xdc, + 0xa6, 0x00, 0x42, 0x63, 0x93, 0xde, 0xa6, 0x00, 0xf5, 0xcd, 0xa6, 0x40, + 0xe1, 0xa1, 0xa6, 0x00, 0xa5, 0x25, 0xe9, 0xe5, 0xa6, 0x00, 0xef, 0xdf, + 0xa6, 0x80, 0x10, 0x42, 0xbb, 0x09, 0xe9, 0xa6, 0x00, 0xf5, 0xa3, 0xa6, + 0x00, 0x43, 0xcd, 0xa9, 0xba, 0xa6, 0x40, 0x44, 0xf1, 0xef, 0xef, 0xa6, + 0x00, 0x43, 0xc1, 0xf4, 0xee, 0xa6, 0x40, 0xee, 0xd2, 0xa6, 0x00, 0xf4, + 0xbb, 0xa6, 0x00, 0x42, 0xbf, 0xe0, 0xc4, 0xa6, 0x40, 0x45, 0xfd, 0xe3, + 0xed, 0xa6, 0x00, 0x42, 0x27, 0x01, 0xcb, 0xa6, 0x00, 0x42, 0x14, 0x05, + 0xd9, 0xa6, 0x00, 0xf5, 0xd8, 0xa6, 0x40, 0x43, 0xd7, 0x02, 0xf4, 0xa6, + 0x00, 0xad, 0x01, 0xff, 0x0c, 0xbb, 0x8c, 0x06, 0x42, 0x6c, 0x00, 0xf5, + 0xa6, 0x40, 0x47, 0x74, 0xd2, 0xf0, 0xa6, 0x00, 0x49, 0x1d, 0xc0, 0xf1, + 0xa6, 0x40, 0x06, 0xbd, 0x83, 0x71, 0xac, 0x01, 0xff, 0x48, 0x28, 0xc2, + 0xf6, 0xf9, 0x01, 0x48, 0xe0, 0xc5, 0x70, 0xfa, 0x01, 0xaf, 0x01, 0xff, + 0x42, 0x10, 0x00, 0x88, 0xf3, 0x81, 0x52, 0x02, 0xc6, 0x00, 0x01, 0xff, + 0x02, 0x5d, 0x00, 0x0a, 0x48, 0x6d, 0x9e, 0xf4, 0xf5, 0x01, 0xf8, 0x17, + 0x27, 0x40, 0x4b, 0x6a, 0x9e, 0xf6, 0xf5, 0x01, 0xf8, 0x10, 0x26, 0xc0, + 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa2, 0x16, 0x45, 0x6d, 0x14, 0x11, + 0x26, 0x00, 0x47, 0xeb, 0xd2, 0xbd, 0x2b, 0x00, 0x48, 0x6d, 0x9e, 0xf5, + 0xf5, 0x01, 0xf8, 0x12, 0x26, 0x40, 0x45, 0xae, 0xce, 0xf3, 0xf5, 0x01, + 0x04, 0x2e, 0x25, 0x01, 0xff, 0x45, 0x6d, 0x14, 0xf9, 0xf5, 0x01, 0x48, + 0x6d, 0x9e, 0xf7, 0xf5, 0x41, 0x50, 0xd4, 0x1c, 0x49, 0x27, 0x40, 0x49, + 0xa3, 0xb5, 0x44, 0x1b, 0x00, 0x06, 0xcd, 0x6e, 0x85, 0x07, 0x06, 0xef, + 0x06, 0xbe, 0x06, 0x0f, 0xc4, 0x6e, 0xad, 0x06, 0x07, 0xec, 0x05, 0xaa, + 0x03, 0x0f, 0x26, 0x32, 0xcd, 0x01, 0x02, 0xbb, 0x09, 0x9d, 0x01, 0x05, + 0x5a, 0x03, 0x70, 0x0b, 0x40, 0x77, 0x06, 0x45, 0x59, 0xec, 0x5c, 0x1b, + 0x40, 0x48, 0x90, 0xc7, 0x3c, 0x1b, 0x80, 0x59, 0x45, 0xde, 0xe9, 0x42, + 0x1b, 0x80, 0x4c, 0x47, 0x14, 0xd5, 0x3a, 0x1b, 0x80, 0x3f, 0x44, 0x09, + 0xd6, 0x38, 0x1b, 0x80, 0x32, 0xb4, 0x0d, 0x43, 0x91, 0x97, 0x36, 0x1b, + 0xc0, 0x00, 0x45, 0xdc, 0xe1, 0x37, 0x1b, 0x40, 0x45, 0x44, 0x28, 0x3e, + 0x1b, 0x80, 0x06, 0x45, 0xa6, 0xcd, 0x35, 0x1b, 0x40, 0x80, 0x01, 0xff, + 0x44, 0x1e, 0xce, 0x3f, 0x1b, 0x80, 0x06, 0x46, 0xa5, 0xcd, 0x40, 0x1b, + 0x40, 0x47, 0xa4, 0xcd, 0x41, 0x1b, 0x40, 0x45, 0xc3, 0xe1, 0x39, 0x1b, + 0x40, 0x47, 0xa4, 0xcd, 0x3b, 0x1b, 0x40, 0x47, 0xa4, 0xcd, 0x43, 0x1b, + 0x40, 0x47, 0xa4, 0xcd, 0x3d, 0x1b, 0x40, 0x45, 0xca, 0xe4, 0x04, 0x1b, + 0x00, 0x45, 0x15, 0xe5, 0x02, 0x1b, 0x00, 0x47, 0x4c, 0xd5, 0x34, 0x1b, + 0x00, 0x46, 0x34, 0xe0, 0x03, 0x1b, 0x00, 0x04, 0xd5, 0xf2, 0x01, 0xff, + 0x46, 0xd7, 0x23, 0x01, 0x1b, 0x00, 0x45, 0x5b, 0xea, 0x00, 0x1b, 0x40, + 0xad, 0x16, 0x43, 0x9f, 0x01, 0x5a, 0x1b, 0xc0, 0x00, 0x80, 0x01, 0xff, + 0x45, 0xb1, 0xe4, 0x7f, 0x1b, 0x00, 0x47, 0x19, 0xc2, 0x7d, 0x1b, 0x40, + 0x43, 0xde, 0x1e, 0x5b, 0x1b, 0x80, 0x06, 0x45, 0x00, 0xe6, 0x60, 0x1b, + 0x40, 0x48, 0x18, 0xc2, 0x7e, 0x1b, 0x40, 0x0a, 0x41, 0x59, 0x97, 0x01, + 0xa4, 0x51, 0x0a, 0xc7, 0xac, 0x26, 0x0b, 0x06, 0xa2, 0x01, 0xff, 0x08, + 0x76, 0x61, 0x11, 0x06, 0xd8, 0xde, 0x01, 0xff, 0x42, 0x23, 0x02, 0x75, + 0x1b, 0x00, 0x42, 0xd2, 0x0e, 0x74, 0x1b, 0x40, 0x42, 0x6d, 0x00, 0x77, + 0x1b, 0x00, 0x42, 0x90, 0x08, 0x76, 0x1b, 0x40, 0x09, 0x41, 0xb7, 0x17, + 0x06, 0xde, 0xde, 0x01, 0xff, 0x43, 0x1c, 0x01, 0x78, 0x1b, 0x00, 0x43, + 0xa1, 0x01, 0x7c, 0x1b, 0x00, 0x43, 0xaa, 0x45, 0x79, 0x1b, 0x40, 0x42, + 0x6d, 0x00, 0x7a, 0x1b, 0x00, 0x42, 0x90, 0x08, 0x7b, 0x1b, 0x40, 0xa1, + 0x20, 0xa5, 0x12, 0x43, 0xa1, 0x01, 0x66, 0x1b, 0x00, 0x43, 0xd8, 0x02, + 0x61, 0x1b, 0x00, 0x43, 0xaa, 0x45, 0x63, 0x1b, 0x40, 0x42, 0x1d, 0x01, + 0x62, 0x1b, 0x00, 0x43, 0xaa, 0x45, 0x68, 0x1b, 0x40, 0x43, 0x4c, 0x0a, + 0x67, 0x1b, 0x00, 0x43, 0xa1, 0x01, 0x69, 0x1b, 0x00, 0x42, 0x1d, 0x01, + 0x64, 0x1b, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x44, 0xe9, 0xef, 0x6a, 0x1b, + 0x00, 0x46, 0x34, 0xe0, 0x65, 0x1b, 0x40, 0x45, 0xbb, 0xe4, 0x72, 0x1b, + 0x00, 0x45, 0xfb, 0xe5, 0x6c, 0x1b, 0x00, 0x44, 0xfb, 0x86, 0x73, 0x1b, + 0x00, 0x47, 0xd9, 0x7f, 0x6f, 0x1b, 0x00, 0x04, 0x04, 0xbb, 0x06, 0x45, + 0x32, 0xeb, 0x6b, 0x1b, 0x40, 0x42, 0xc3, 0x01, 0x6e, 0x1b, 0x80, 0x0d, + 0x42, 0x1f, 0x01, 0x6d, 0x1b, 0xc0, 0x00, 0x4d, 0xd3, 0x7f, 0x70, 0x1b, + 0x40, 0x4d, 0xd3, 0x7f, 0x71, 0x1b, 0x40, 0xa1, 0xdc, 0x02, 0x42, 0x16, + 0x00, 0x29, 0x1b, 0x80, 0xce, 0x02, 0x42, 0x37, 0x00, 0x18, 0x1b, 0x80, + 0xc0, 0x02, 0x42, 0xf0, 0x10, 0x24, 0x1b, 0x80, 0x9c, 0x02, 0xa5, 0x8d, + 0x02, 0x42, 0x24, 0x02, 0x15, 0x1b, 0x80, 0xff, 0x01, 0x42, 0x22, 0x00, + 0x33, 0x1b, 0x00, 0x45, 0x54, 0xe7, 0x07, 0x1b, 0x80, 0xeb, 0x01, 0x42, + 0x56, 0x19, 0x1a, 0x1b, 0x80, 0xdd, 0x01, 0xab, 0xc3, 0x01, 0x42, 0x74, + 0x00, 0x2e, 0x1b, 0x80, 0xae, 0x01, 0x42, 0x6c, 0x00, 0x2b, 0x1b, 0x00, + 0xae, 0x8e, 0x01, 0x45, 0x7f, 0xe9, 0x11, 0x1b, 0x80, 0x80, 0x01, 0x42, + 0xbb, 0x09, 0x27, 0x1b, 0x80, 0x73, 0x42, 0x71, 0x00, 0x2d, 0x1b, 0x80, + 0x5f, 0x42, 0x40, 0x06, 0x32, 0x1b, 0x80, 0x47, 0xb4, 0x25, 0x45, 0xc8, + 0xeb, 0x09, 0x1b, 0x80, 0x18, 0x48, 0x38, 0xcc, 0x49, 0x1b, 0x00, 0x42, + 0xa9, 0x01, 0x2f, 0x1b, 0x00, 0x42, 0xbc, 0x22, 0x2c, 0x1b, 0x00, 0x49, + 0xc4, 0xc1, 0x4a, 0x1b, 0x40, 0x47, 0xa4, 0xcd, 0x0a, 0x1b, 0x40, 0xe1, + 0x22, 0x1b, 0x80, 0x06, 0x49, 0xdf, 0xc1, 0x47, 0x1b, 0x40, 0x80, 0x01, + 0xff, 0x45, 0x1c, 0xe8, 0x1d, 0x1b, 0x00, 0x4f, 0x59, 0x70, 0x1e, 0x1b, + 0x00, 0x44, 0xa4, 0xc4, 0x23, 0x1b, 0x40, 0x03, 0xeb, 0x22, 0x01, 0xff, + 0x42, 0x24, 0x02, 0x30, 0x1b, 0x00, 0x42, 0xbb, 0x09, 0x31, 0x1b, 0x40, + 0x45, 0x16, 0xd5, 0x0b, 0x1b, 0xc0, 0x00, 0x47, 0xa4, 0xcd, 0x0c, 0x1b, + 0x40, 0x46, 0x1e, 0xd8, 0x28, 0x1b, 0x40, 0x47, 0xa4, 0xcd, 0x12, 0x1b, + 0x40, 0xe1, 0x26, 0x1b, 0x80, 0x0c, 0x42, 0x24, 0x02, 0x17, 0x1b, 0x00, + 0x42, 0xbc, 0x22, 0x1c, 0x1b, 0x40, 0x47, 0x81, 0xcd, 0x21, 0x1b, 0x40, + 0x46, 0x92, 0xc7, 0x0d, 0x1b, 0xc0, 0x00, 0x47, 0xa4, 0xcd, 0x0e, 0x1b, + 0x40, 0xe1, 0x13, 0x1b, 0x80, 0x06, 0x49, 0xc0, 0xb9, 0x46, 0x1b, 0x40, + 0x4a, 0x5e, 0x70, 0x14, 0x1b, 0x00, 0x47, 0x08, 0xd1, 0x45, 0x1b, 0x40, + 0x45, 0xc8, 0xe1, 0x1b, 0x1b, 0x40, 0x47, 0xa4, 0xcd, 0x08, 0x1b, 0x40, + 0x45, 0xb4, 0xe1, 0x16, 0x1b, 0x40, 0x47, 0x08, 0xd1, 0x48, 0x1b, 0x00, + 0x44, 0x43, 0x2d, 0x0f, 0x1b, 0x40, 0x02, 0x6b, 0x00, 0x01, 0xff, 0x43, + 0x6b, 0x02, 0x25, 0x1b, 0x00, 0x05, 0x5a, 0x70, 0x01, 0xff, 0x49, 0xfd, + 0xb5, 0x1f, 0x1b, 0x00, 0x49, 0x5f, 0x70, 0x20, 0x1b, 0x40, 0x45, 0xd2, + 0xe1, 0x19, 0x1b, 0x40, 0x48, 0x10, 0xc2, 0x2a, 0x1b, 0x40, 0x45, 0x54, + 0xe7, 0x10, 0x1b, 0x00, 0x44, 0x43, 0x2d, 0x05, 0x1b, 0x80, 0x0c, 0x4b, + 0xcf, 0xa1, 0x4c, 0x1b, 0x00, 0x4b, 0x0e, 0xa3, 0x4b, 0x1b, 0x40, 0x47, + 0xa4, 0xcd, 0x06, 0x1b, 0x40, 0x47, 0x88, 0xd4, 0x4f, 0x1b, 0x00, 0x44, + 0x58, 0xad, 0x4e, 0x1b, 0x40, 0x45, 0x12, 0x0b, 0x58, 0x1b, 0x00, 0xa6, + 0x2e, 0x44, 0xcf, 0x2a, 0x59, 0x1b, 0x00, 0x43, 0x0e, 0x0b, 0x51, 0x1b, + 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x50, 0x1b, 0x40, 0x44, + 0x25, 0x01, 0x53, 0x1b, 0x00, 0x42, 0x15, 0x02, 0x52, 0x1b, 0x40, 0x44, + 0xc9, 0x1d, 0x57, 0x1b, 0x00, 0x42, 0x01, 0x26, 0x56, 0x1b, 0x40, 0x43, + 0xd2, 0x05, 0x55, 0x1b, 0x00, 0x43, 0xf6, 0x06, 0x54, 0x1b, 0x40, 0x02, + 0xbb, 0x09, 0x06, 0x44, 0x58, 0xad, 0x5e, 0x1b, 0x40, 0x47, 0x62, 0xd3, + 0x5d, 0x1b, 0x00, 0x45, 0x99, 0x72, 0x5f, 0x1b, 0x40, 0x42, 0xd8, 0x00, + 0x6f, 0xf9, 0x01, 0x4a, 0x97, 0xaa, 0xc4, 0xf6, 0x01, 0x4b, 0x21, 0xa4, + 0x56, 0xf9, 0x41, 0x43, 0xdb, 0x09, 0xa1, 0xf9, 0x01, 0x5e, 0xcb, 0x13, + 0xf8, 0xf3, 0x41, 0xab, 0x0c, 0x42, 0x10, 0x00, 0x53, 0xf9, 0x01, 0x4b, + 0xd4, 0xa3, 0x2b, 0xf4, 0x41, 0x80, 0x1f, 0x67, 0x58, 0x05, 0xab, 0x27, + 0x00, 0xb3, 0x01, 0xff, 0x1a, 0x9a, 0x20, 0x06, 0x44, 0xd1, 0x4c, 0x08, + 0x00, 0x40, 0x49, 0xf3, 0xbc, 0x5b, 0x2b, 0x00, 0x4d, 0xf3, 0x87, 0x5d, + 0x2b, 0x40, 0x4b, 0x7a, 0xa0, 0x82, 0xf5, 0x01, 0x5a, 0xa2, 0x22, 0x19, + 0xf5, 0x41, 0x80, 0x01, 0xff, 0x45, 0x4d, 0xe4, 0x7c, 0xf4, 0x01, 0x46, + 0x64, 0x5b, 0x7c, 0xf3, 0x01, 0x45, 0xf7, 0x59, 0x24, 0xf4, 0x01, 0x46, + 0x16, 0x08, 0xbc, 0xf6, 0x41, 0x45, 0x9d, 0xe4, 0xee, 0xf9, 0x01, 0xa3, + 0x96, 0x8d, 0x01, 0xa4, 0xaf, 0x88, 0x01, 0xa5, 0xfa, 0x84, 0x01, 0x4b, + 0x0d, 0x9c, 0x0b, 0x06, 0x00, 0x04, 0x4d, 0xf0, 0xcb, 0x81, 0x01, 0x47, + 0x12, 0x34, 0x08, 0x27, 0x80, 0xb3, 0x81, 0x01, 0x4b, 0x12, 0x9e, 0x4d, + 0x21, 0x00, 0xac, 0xa6, 0x79, 0xad, 0xf9, 0x78, 0xae, 0xc4, 0x63, 0xb0, + 0xe1, 0x5e, 0x47, 0xff, 0xd4, 0x52, 0x26, 0x00, 0xb2, 0xe1, 0x03, 0xb3, + 0x88, 0x03, 0xb4, 0xf9, 0x02, 0xb5, 0xd0, 0x02, 0xb6, 0x06, 0x42, 0x6d, + 0x43, 0x93, 0xfa, 0x41, 0x06, 0x6c, 0xdb, 0x06, 0x45, 0x75, 0xe9, 0x51, + 0xf9, 0x41, 0x51, 0x0b, 0x50, 0x39, 0x0b, 0x01, 0x07, 0xec, 0x05, 0x01, + 0xff, 0xe1, 0x00, 0x0b, 0x81, 0x8f, 0x02, 0xa2, 0x82, 0x02, 0x42, 0x73, + 0x02, 0x17, 0x0b, 0x01, 0xa4, 0xef, 0x01, 0xe5, 0x08, 0x0b, 0x81, 0xe5, + 0x01, 0x42, 0x0c, 0x1a, 0x1f, 0x0b, 0x01, 0xa7, 0xcc, 0x01, 0xa8, 0xbf, + 0x01, 0xe9, 0x0c, 0x0b, 0x81, 0xb5, 0x01, 0x42, 0x80, 0x20, 0x18, 0x0b, + 0x01, 0x42, 0x37, 0x01, 0x10, 0x0b, 0x01, 0x42, 0x68, 0x00, 0x2e, 0x0b, + 0x01, 0x42, 0x2a, 0x02, 0x28, 0x0b, 0x01, 0xae, 0x79, 0xef, 0x0a, 0x0b, + 0x81, 0x70, 0x42, 0x6f, 0x02, 0x1e, 0x0b, 0x01, 0x42, 0x88, 0x00, 0x2d, + 0x0b, 0x01, 0xb3, 0x4c, 0xb4, 0x3a, 0xf5, 0x0e, 0x0b, 0x81, 0x31, 0x42, + 0x32, 0x00, 0x2c, 0x0b, 0x01, 0xb8, 0x19, 0xb9, 0x0d, 0xba, 0x01, 0xff, + 0xe5, 0x30, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x32, 0x0b, 0x41, 0xe5, 0x2b, + 0x0b, 0x01, 0x42, 0x4d, 0x00, 0x2a, 0x0b, 0x41, 0xe5, 0x11, 0x0b, 0x01, + 0x42, 0x32, 0x00, 0x13, 0x0b, 0x01, 0x42, 0x4d, 0x00, 0x12, 0x0b, 0x41, + 0xf5, 0x0f, 0x0b, 0x41, 0xe5, 0x19, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x1a, + 0x0b, 0x01, 0x42, 0x77, 0x00, 0x1d, 0x0b, 0x41, 0xe5, 0x2f, 0x0b, 0x01, + 0xa8, 0x06, 0x43, 0x8e, 0x06, 0x34, 0x0b, 0x41, 0xe5, 0x31, 0x0b, 0x01, + 0x42, 0x4d, 0x00, 0x33, 0x0b, 0x41, 0xef, 0x0b, 0x0b, 0x41, 0xe5, 0x25, + 0x0b, 0x01, 0xa7, 0x0c, 0x42, 0xcd, 0x05, 0x27, 0x0b, 0x01, 0x42, 0x4d, + 0x00, 0x26, 0x0b, 0x41, 0xe5, 0x22, 0x0b, 0x01, 0x42, 0x32, 0x00, 0x24, + 0x0b, 0x01, 0x42, 0x4d, 0x00, 0x23, 0x0b, 0x41, 0xe9, 0x0d, 0x0b, 0x41, + 0xe5, 0x35, 0x0b, 0x01, 0x42, 0x2a, 0x02, 0x29, 0x0b, 0x41, 0xe5, 0x14, + 0x0b, 0x01, 0x42, 0xdb, 0x09, 0x15, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x16, + 0x0b, 0x41, 0xe5, 0x09, 0x0b, 0x41, 0xe5, 0x1b, 0x0b, 0x01, 0x42, 0xb0, + 0x01, 0x1c, 0x0b, 0x41, 0xe5, 0x20, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x21, + 0x0b, 0x41, 0xe1, 0x01, 0x0b, 0x81, 0x11, 0xe5, 0x06, 0x0b, 0x81, 0x08, + 0xee, 0x04, 0x0b, 0x01, 0xef, 0x02, 0x0b, 0x41, 0xe5, 0x07, 0x0b, 0x41, + 0xee, 0x05, 0x0b, 0x01, 0xef, 0x03, 0x0b, 0x41, 0x47, 0x72, 0xcf, 0x46, + 0xf3, 0x01, 0x4a, 0x63, 0xb1, 0xb3, 0x20, 0x00, 0x02, 0x1e, 0x00, 0x01, + 0xff, 0x49, 0xd4, 0xb4, 0xfa, 0xf6, 0x01, 0xad, 0x01, 0xff, 0x53, 0x74, + 0x48, 0xe7, 0xf3, 0x01, 0x45, 0x4e, 0x4b, 0x97, 0xf6, 0x41, 0x4b, 0xff, + 0x9c, 0x5f, 0xf4, 0x01, 0x49, 0x05, 0xbd, 0x9b, 0x26, 0x40, 0xa3, 0x48, + 0x47, 0x29, 0x60, 0xa6, 0x22, 0x00, 0xb4, 0x06, 0x55, 0x5e, 0x37, 0x43, + 0x22, 0x40, 0x04, 0x3f, 0x0d, 0x27, 0x4c, 0x33, 0x93, 0x32, 0xf6, 0x01, + 0xb2, 0x01, 0xff, 0x43, 0x6d, 0x28, 0xd9, 0x2b, 0x80, 0x11, 0x14, 0xb0, + 0x44, 0x01, 0xff, 0x53, 0x61, 0x48, 0xcd, 0xce, 0x01, 0x46, 0x00, 0xe1, + 0xe2, 0x26, 0x40, 0x49, 0x21, 0x2e, 0x78, 0xf7, 0x41, 0xeb, 0x2a, 0x00, + 0x80, 0x04, 0xed, 0x42, 0x20, 0x40, 0x49, 0x7d, 0x1d, 0x17, 0x22, 0x40, + 0x4b, 0x34, 0x8d, 0x0a, 0x26, 0x00, 0x49, 0xe4, 0xb9, 0x9c, 0x01, 0x41, + 0x04, 0xe4, 0x06, 0xbd, 0x05, 0xe3, 0x12, 0x23, 0x00, 0x43, 0x14, 0x9e, + 0x48, 0x26, 0x00, 0x07, 0xe7, 0x32, 0x4b, 0x03, 0xd0, 0x00, 0x11, 0x02, + 0x35, 0x00, 0x01, 0xff, 0x4d, 0xce, 0x81, 0x9b, 0xf6, 0x01, 0x4a, 0x4f, + 0xb1, 0xa8, 0xf3, 0x41, 0x0a, 0x9b, 0x01, 0x06, 0x53, 0xdd, 0x49, 0xb0, + 0xfb, 0x41, 0x17, 0x41, 0x2e, 0x1c, 0x18, 0xde, 0x2a, 0x06, 0x57, 0xab, + 0x31, 0xb0, 0xf8, 0x41, 0x49, 0xa5, 0x01, 0x35, 0x29, 0x00, 0x4a, 0x90, + 0x40, 0xb1, 0xf8, 0x01, 0x47, 0x50, 0x02, 0x34, 0x29, 0x40, 0x49, 0xea, + 0x01, 0x36, 0x29, 0x00, 0x4a, 0xb3, 0x02, 0x37, 0x29, 0x40, 0xa1, 0xd5, + 0x04, 0xa3, 0xdc, 0x02, 0x49, 0xe3, 0xb7, 0x8f, 0x05, 0x00, 0xa5, 0xc7, + 0x02, 0x49, 0x81, 0x16, 0x89, 0x05, 0x00, 0x46, 0x96, 0x63, 0x8a, 0x05, + 0x00, 0x5e, 0xe9, 0x13, 0x59, 0x05, 0x00, 0x4d, 0xa6, 0x34, 0x5e, 0x05, + 0x00, 0x07, 0x76, 0x08, 0x01, 0xff, 0x06, 0xed, 0x05, 0x2d, 0x08, 0x9d, + 0x1f, 0x01, 0xff, 0x48, 0x70, 0xc5, 0x87, 0x05, 0x00, 0x04, 0xfe, 0x4e, + 0x06, 0x47, 0x44, 0xd7, 0x16, 0xfb, 0x40, 0x43, 0x03, 0x41, 0x14, 0xfb, + 0x00, 0x43, 0x57, 0x07, 0x15, 0xfb, 0x00, 0x43, 0xda, 0x2e, 0x13, 0xfb, + 0x00, 0x43, 0xcd, 0xf4, 0x17, 0xfb, 0x40, 0x43, 0xa1, 0xc0, 0x61, 0x05, + 0x00, 0x43, 0x81, 0x1b, 0x62, 0x05, 0x00, 0xa3, 0xd6, 0x01, 0x42, 0xf0, + 0x10, 0x64, 0x05, 0x00, 0xa5, 0xbf, 0x01, 0x43, 0xd6, 0xb8, 0x86, 0x05, + 0x00, 0xa7, 0xaa, 0x01, 0x42, 0x0b, 0x00, 0x70, 0x05, 0x00, 0x43, 0x57, + 0x07, 0x6b, 0x05, 0x00, 0xaa, 0x91, 0x01, 0x02, 0x37, 0x01, 0x84, 0x01, + 0x44, 0x0d, 0xf1, 0x6c, 0x05, 0x00, 0x43, 0x2c, 0x05, 0x74, 0x05, 0x00, + 0x43, 0xda, 0x2e, 0x76, 0x05, 0x00, 0x42, 0xfd, 0x28, 0x85, 0x05, 0x00, + 0xb0, 0x5e, 0xb2, 0x52, 0xb3, 0x44, 0xb4, 0x32, 0xb6, 0x26, 0x43, 0xcd, + 0xf4, 0x6d, 0x05, 0x00, 0x42, 0x7e, 0x1a, 0x75, 0x05, 0x80, 0x0d, 0xba, + 0x01, 0xff, 0xe1, 0x66, 0x05, 0x00, 0x42, 0xb0, 0x01, 0x6a, 0x05, 0x40, + 0x4c, 0xda, 0x28, 0x88, 0x05, 0x00, 0x42, 0xa7, 0x01, 0x82, 0x05, 0x40, + 0x42, 0x27, 0x1e, 0x7e, 0x05, 0x00, 0xef, 0x78, 0x05, 0x40, 0x43, 0x75, + 0xc5, 0x7f, 0x05, 0x00, 0xef, 0x69, 0x05, 0x00, 0x49, 0x9b, 0xc0, 0x60, + 0x05, 0x40, 0x42, 0x4e, 0x00, 0x7d, 0x05, 0x00, 0x42, 0x22, 0x00, 0x77, + 0x05, 0x40, 0xe1, 0x7c, 0x05, 0x00, 0x42, 0x4e, 0x00, 0x80, 0x05, 0x40, + 0x42, 0x4e, 0x00, 0x7a, 0x05, 0x00, 0x43, 0x5b, 0xf4, 0x83, 0x05, 0x40, + 0xe8, 0x84, 0x05, 0x00, 0xee, 0x6f, 0x05, 0x40, 0xe1, 0x71, 0x05, 0x00, + 0x43, 0xf6, 0x42, 0x7b, 0x05, 0x40, 0x43, 0xa5, 0x02, 0x72, 0x05, 0x00, + 0x42, 0x29, 0x02, 0x63, 0x05, 0x40, 0x42, 0x6d, 0x14, 0x65, 0x05, 0x00, + 0xe8, 0x67, 0x05, 0x00, 0xf4, 0x68, 0x05, 0x40, 0xe1, 0x6e, 0x05, 0x00, + 0xa8, 0x04, 0xef, 0x81, 0x05, 0x40, 0xe1, 0x79, 0x05, 0x00, 0x42, 0x4e, + 0x00, 0x73, 0x05, 0x40, 0x4c, 0x2b, 0x92, 0x5b, 0x05, 0x00, 0x4f, 0xae, + 0x00, 0x5c, 0x05, 0x40, 0x0e, 0xe5, 0x05, 0x06, 0x44, 0x14, 0x05, 0x5d, + 0x05, 0x40, 0x43, 0xa1, 0xc0, 0x31, 0x05, 0x00, 0x43, 0x81, 0x1b, 0x32, + 0x05, 0x00, 0xa3, 0xc9, 0x01, 0x42, 0xf0, 0x10, 0x34, 0x05, 0x00, 0xa5, + 0xb2, 0x01, 0x43, 0xd6, 0xb8, 0x56, 0x05, 0x00, 0xa7, 0x9d, 0x01, 0x42, + 0x0b, 0x00, 0x40, 0x05, 0x00, 0x43, 0x57, 0x07, 0x3b, 0x05, 0x00, 0xaa, + 0x84, 0x01, 0x02, 0x37, 0x01, 0x78, 0x44, 0x0d, 0xf1, 0x3c, 0x05, 0x00, + 0x43, 0x2c, 0x05, 0x44, 0x05, 0x00, 0x43, 0xda, 0x2e, 0x46, 0x05, 0x00, + 0x42, 0xfd, 0x28, 0x55, 0x05, 0x00, 0xb0, 0x52, 0xb2, 0x46, 0xb3, 0x38, + 0xb4, 0x2c, 0xb6, 0x20, 0x43, 0xcd, 0xf4, 0x3d, 0x05, 0x00, 0x42, 0x7e, + 0x1a, 0x45, 0x05, 0x80, 0x0d, 0xba, 0x01, 0xff, 0xe1, 0x36, 0x05, 0x00, + 0x42, 0xb0, 0x01, 0x3a, 0x05, 0x40, 0x42, 0xa7, 0x01, 0x52, 0x05, 0x40, + 0x42, 0x27, 0x1e, 0x4e, 0x05, 0x00, 0xef, 0x48, 0x05, 0x40, 0x43, 0x75, + 0xc5, 0x4f, 0x05, 0x00, 0xef, 0x39, 0x05, 0x40, 0x42, 0x4e, 0x00, 0x4d, + 0x05, 0x00, 0x42, 0x22, 0x00, 0x47, 0x05, 0x40, 0xe1, 0x4c, 0x05, 0x00, + 0x42, 0x4e, 0x00, 0x50, 0x05, 0x40, 0x42, 0x4e, 0x00, 0x4a, 0x05, 0x00, + 0x43, 0x5b, 0xf4, 0x53, 0x05, 0x40, 0xe8, 0x54, 0x05, 0x00, 0xee, 0x3f, + 0x05, 0x40, 0xe1, 0x41, 0x05, 0x00, 0x43, 0xf6, 0x42, 0x4b, 0x05, 0x40, + 0x43, 0xa5, 0x02, 0x42, 0x05, 0x00, 0x42, 0x29, 0x02, 0x33, 0x05, 0x40, + 0x42, 0x6d, 0x14, 0x35, 0x05, 0x00, 0xe8, 0x37, 0x05, 0x00, 0xf4, 0x38, + 0x05, 0x40, 0xe1, 0x3e, 0x05, 0x00, 0xa8, 0x04, 0xef, 0x51, 0x05, 0x40, + 0xe1, 0x49, 0x05, 0x00, 0x42, 0x4e, 0x00, 0x43, 0x05, 0x40, 0x50, 0x0c, + 0x50, 0x5f, 0x05, 0x00, 0x49, 0x62, 0x36, 0x5a, 0x05, 0x40, 0x80, 0x68, + 0x07, 0xe8, 0x06, 0x01, 0xff, 0x49, 0x89, 0xb7, 0x06, 0x06, 0x00, 0x06, + 0xef, 0x06, 0x17, 0x4b, 0x2e, 0x9c, 0x07, 0x06, 0x00, 0x04, 0x6f, 0x02, + 0x01, 0xff, 0x4a, 0xdf, 0xad, 0x09, 0x06, 0x00, 0x51, 0x3c, 0x5e, 0x0a, + 0x06, 0x40, 0x45, 0x12, 0x0b, 0x68, 0x06, 0x00, 0xa6, 0x2e, 0x44, 0xcf, + 0x2a, 0x69, 0x06, 0x00, 0x43, 0x0e, 0x0b, 0x61, 0x06, 0x00, 0xb3, 0x14, + 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x60, 0x06, 0x40, 0x44, 0x25, 0x01, 0x63, + 0x06, 0x00, 0x42, 0x15, 0x02, 0x62, 0x06, 0x40, 0x44, 0xc9, 0x1d, 0x67, + 0x06, 0x00, 0x42, 0x01, 0x26, 0x66, 0x06, 0x40, 0x43, 0xd2, 0x05, 0x65, + 0x06, 0x00, 0x43, 0xf6, 0x06, 0x64, 0x06, 0x40, 0xa2, 0xbc, 0x54, 0xa3, + 0xfd, 0x53, 0xa4, 0x9e, 0x53, 0xa5, 0xfa, 0x52, 0xa6, 0xac, 0x52, 0x02, + 0x22, 0x00, 0x90, 0x52, 0x4e, 0xb7, 0x78, 0x57, 0x06, 0x00, 0x45, 0xa8, + 0x50, 0x50, 0x06, 0x80, 0xe1, 0x51, 0xac, 0xf6, 0x0f, 0x02, 0x6c, 0x00, + 0xf9, 0x07, 0x07, 0xff, 0x39, 0xe8, 0x07, 0x05, 0xf6, 0x04, 0xd1, 0x07, + 0xb0, 0xa5, 0x07, 0x4d, 0xa6, 0x34, 0x1f, 0x06, 0x00, 0xb2, 0xed, 0x06, + 0xb3, 0xa4, 0x01, 0xb4, 0x2b, 0xb6, 0x0c, 0x50, 0xa6, 0x68, 0x5f, 0x06, + 0x00, 0x48, 0x08, 0xcd, 0x59, 0x06, 0x40, 0x4c, 0xd0, 0x47, 0x8e, 0x08, + 0x00, 0x0a, 0x41, 0x77, 0x01, 0xff, 0x49, 0x9f, 0x12, 0x5c, 0x06, 0x00, + 0x56, 0xc9, 0x34, 0x5b, 0x06, 0x00, 0x4d, 0xd2, 0x34, 0x5a, 0x06, 0x40, + 0xa1, 0x47, 0x52, 0x6f, 0x52, 0x6c, 0x06, 0x00, 0x04, 0x0e, 0x0b, 0x0c, + 0x5a, 0x06, 0x22, 0x1e, 0x06, 0x00, 0x51, 0xe6, 0x5e, 0xe3, 0x08, 0x40, + 0x05, 0x3a, 0xe8, 0x21, 0x08, 0xff, 0x0b, 0x11, 0x09, 0xf1, 0x0b, 0x01, + 0xff, 0x45, 0x5c, 0x00, 0xeb, 0x08, 0x00, 0x45, 0x20, 0x07, 0xee, 0x08, + 0x40, 0x45, 0x5c, 0x00, 0xea, 0x08, 0x00, 0x45, 0x20, 0x07, 0xed, 0x08, + 0x40, 0x45, 0x5c, 0x00, 0xec, 0x08, 0x00, 0x45, 0x20, 0x07, 0xef, 0x08, + 0x40, 0x4b, 0x4c, 0x9d, 0x73, 0xfe, 0x00, 0x45, 0x31, 0x21, 0x40, 0x06, + 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4e, 0xbb, 0x77, 0x71, 0xfe, + 0x00, 0x0b, 0x2a, 0xa1, 0x06, 0x4e, 0x05, 0x0f, 0x85, 0x08, 0x40, 0x45, + 0x56, 0x00, 0x83, 0x08, 0x00, 0x43, 0x8a, 0x8a, 0x84, 0x08, 0x40, 0x48, + 0xda, 0x59, 0x1b, 0x06, 0x00, 0x45, 0xc8, 0xe6, 0x51, 0x06, 0x80, 0xa9, + 0x05, 0x04, 0x5b, 0x03, 0xd5, 0x04, 0x05, 0x5e, 0x07, 0xc1, 0x01, 0x53, + 0x6d, 0x4d, 0xde, 0x06, 0x00, 0xb5, 0x90, 0x01, 0x06, 0x60, 0x16, 0x01, + 0xff, 0x02, 0x3b, 0x01, 0x71, 0x0a, 0xd1, 0x46, 0x61, 0x44, 0x22, 0x08, + 0xbf, 0xfb, 0x00, 0x0a, 0x58, 0x75, 0x4b, 0xb4, 0x06, 0x4b, 0xf2, 0xa4, + 0xc2, 0xfb, 0x40, 0x0a, 0xae, 0x12, 0x22, 0x08, 0xf2, 0x0b, 0x01, 0xff, + 0x45, 0x5c, 0x00, 0xb4, 0xfb, 0x00, 0x45, 0x20, 0x07, 0xb5, 0xfb, 0x00, + 0x0b, 0x36, 0x2c, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xbd, 0xfb, 0x00, 0x45, + 0x20, 0x07, 0xbe, 0xfb, 0x40, 0x45, 0x5c, 0x00, 0xb6, 0xfb, 0x00, 0x45, + 0x20, 0x07, 0xb7, 0xfb, 0x00, 0x13, 0x9c, 0x01, 0x01, 0xff, 0x45, 0x5c, + 0x00, 0xb8, 0xfb, 0x00, 0x45, 0x20, 0x07, 0xb9, 0xfb, 0x40, 0x45, 0x5c, + 0x00, 0xc0, 0xfb, 0x00, 0x45, 0x20, 0x07, 0xc1, 0xfb, 0x40, 0x45, 0x5c, + 0x00, 0xba, 0xfb, 0x00, 0x45, 0x20, 0x07, 0xbb, 0xfb, 0x40, 0x02, 0xc6, + 0x00, 0x06, 0x57, 0x66, 0x31, 0xbc, 0xfb, 0x40, 0x45, 0x5c, 0x00, 0xb2, + 0xfb, 0x00, 0x45, 0x20, 0x07, 0xb3, 0xfb, 0x40, 0x4c, 0xf7, 0x8c, 0x56, + 0x06, 0x00, 0x43, 0x77, 0x36, 0x52, 0x06, 0x80, 0x06, 0x58, 0x96, 0x2a, + 0x9d, 0x08, 0x40, 0x80, 0x01, 0xff, 0x45, 0x20, 0x07, 0xd0, 0x08, 0x00, + 0x4d, 0x5f, 0x03, 0x7e, 0xfe, 0x00, 0x4b, 0xf6, 0x6d, 0x7f, 0xfe, 0x40, + 0x45, 0xec, 0x5e, 0x19, 0x06, 0x00, 0x02, 0x0c, 0x08, 0xf8, 0x02, 0x05, + 0x48, 0x0b, 0x6a, 0x45, 0xa8, 0x50, 0x1a, 0x06, 0x00, 0x04, 0x08, 0x05, + 0x13, 0x43, 0x8a, 0x8a, 0xe5, 0x06, 0x00, 0x43, 0x4d, 0x00, 0xe6, 0x06, + 0xc0, 0x00, 0x5b, 0xd5, 0x19, 0xc5, 0x0e, 0x41, 0x44, 0x1c, 0x21, 0xed, + 0x06, 0x00, 0x44, 0xf9, 0x45, 0xfb, 0x0e, 0x81, 0x3a, 0x44, 0x8d, 0xf2, + 0xe3, 0x06, 0x00, 0xb7, 0x01, 0xff, 0x42, 0xb7, 0x2d, 0xd3, 0x08, 0x00, + 0x04, 0x3c, 0x25, 0x01, 0xff, 0xa9, 0x18, 0x45, 0x10, 0x4b, 0xff, 0x0e, + 0x01, 0x44, 0x29, 0xf2, 0xfe, 0x0e, 0x01, 0x45, 0xb5, 0xea, 0xfd, 0x0e, + 0x01, 0x47, 0x33, 0xd6, 0x9b, 0x08, 0x40, 0x45, 0x58, 0xe8, 0x9a, 0x08, + 0x00, 0x46, 0xda, 0xdf, 0x99, 0x08, 0x40, 0x4b, 0x19, 0x98, 0xd9, 0x08, + 0x40, 0x43, 0x56, 0x07, 0xd6, 0x08, 0x00, 0x54, 0x90, 0x41, 0xe1, 0x06, + 0x00, 0xa6, 0xef, 0x01, 0x44, 0x3e, 0x38, 0xda, 0x06, 0x00, 0xac, 0xbf, + 0x01, 0xad, 0xa5, 0x01, 0x44, 0xf9, 0x45, 0xe8, 0x06, 0x80, 0x97, 0x01, + 0x43, 0x43, 0x14, 0xd7, 0x08, 0x00, 0x4c, 0xd7, 0x94, 0xdf, 0x06, 0x00, + 0xb3, 0x77, 0xb4, 0x69, 0x58, 0x9e, 0x2b, 0xe0, 0x06, 0x00, 0xb7, 0x1c, + 0x43, 0x4d, 0x00, 0xe7, 0x06, 0x80, 0x0f, 0x02, 0x59, 0x00, 0x01, 0xff, + 0xe8, 0xcd, 0x08, 0x00, 0x42, 0x9e, 0x01, 0x17, 0x06, 0x40, 0x5b, 0xd5, + 0x19, 0xcb, 0x08, 0x40, 0x42, 0xb7, 0x2d, 0xf3, 0x08, 0x00, 0x04, 0x3c, + 0x25, 0x01, 0xff, 0xa1, 0x1a, 0x43, 0x8b, 0xf4, 0xde, 0x08, 0x00, 0x02, + 0x40, 0x06, 0x06, 0x45, 0x36, 0xec, 0xdf, 0x08, 0x40, 0xe8, 0xcc, 0x08, + 0x00, 0x43, 0x41, 0x3f, 0xdd, 0x08, 0x40, 0x45, 0xfe, 0xe7, 0x98, 0x08, + 0x00, 0x46, 0x24, 0xde, 0xdc, 0x08, 0x00, 0x45, 0x24, 0xea, 0xd4, 0x08, + 0x00, 0x47, 0x8b, 0xd5, 0xdb, 0x08, 0x00, 0x4b, 0x50, 0xa3, 0xda, 0x08, + 0x40, 0x42, 0x18, 0x0a, 0x15, 0x06, 0x00, 0x49, 0x2b, 0x10, 0xdb, 0x06, + 0x40, 0x42, 0xe8, 0x01, 0xd5, 0x08, 0x00, 0x43, 0xc4, 0x09, 0xdc, 0x06, + 0x00, 0x49, 0x2c, 0xba, 0xe1, 0x08, 0x40, 0x4b, 0x19, 0x98, 0xd8, 0x08, + 0x40, 0x44, 0x11, 0x4b, 0xe4, 0x06, 0x00, 0x05, 0x3f, 0x38, 0x01, 0xff, + 0x4b, 0xb9, 0x16, 0xd8, 0x06, 0x00, 0x4c, 0x60, 0x03, 0xe2, 0x06, 0x40, + 0x47, 0xbc, 0xce, 0xd9, 0x06, 0x00, 0x08, 0x9d, 0x1f, 0x01, 0xff, 0x0a, + 0x9f, 0xa7, 0x0c, 0x5e, 0x43, 0x14, 0xd7, 0x06, 0x00, 0x5e, 0x7f, 0x14, + 0xd6, 0x06, 0x40, 0x4c, 0xb7, 0x90, 0x16, 0x06, 0x00, 0x4a, 0xe3, 0xb3, + 0x16, 0x06, 0x40, 0x48, 0x90, 0xc3, 0xca, 0x08, 0x00, 0x4e, 0x5b, 0x7a, + 0xe0, 0x08, 0x40, 0x47, 0x91, 0xc3, 0xc9, 0x08, 0x00, 0x43, 0x8f, 0x00, + 0x18, 0x06, 0x40, 0x4f, 0x7d, 0x6a, 0x11, 0x06, 0x00, 0x45, 0xb7, 0xe8, + 0x0f, 0x06, 0x00, 0x02, 0x71, 0x00, 0x33, 0xb3, 0x06, 0x49, 0x9f, 0xbf, + 0x14, 0x06, 0x40, 0xa1, 0x11, 0x06, 0xec, 0xdc, 0x01, 0xff, 0x49, 0x12, + 0x3e, 0xfd, 0x06, 0x00, 0x50, 0xe6, 0x65, 0xfe, 0x06, 0x40, 0x43, 0x32, + 0xba, 0x03, 0x06, 0x00, 0x5a, 0xe8, 0x20, 0x10, 0x06, 0x00, 0x44, 0x4d, + 0xf1, 0x04, 0x06, 0x00, 0x43, 0x59, 0x46, 0x01, 0x06, 0x40, 0x4f, 0x03, + 0x6c, 0x13, 0x06, 0x00, 0x50, 0x76, 0x63, 0x12, 0x06, 0x40, 0x80, 0x01, + 0xff, 0x4d, 0x5f, 0x03, 0x7c, 0xfe, 0x00, 0x4b, 0xf6, 0x6d, 0x7d, 0xfe, + 0x40, 0xa1, 0x23, 0x4d, 0xc5, 0x82, 0x5d, 0x06, 0x00, 0x0f, 0xd1, 0x3d, + 0x06, 0x63, 0x41, 0x0b, 0xec, 0x06, 0x40, 0x45, 0x5c, 0x00, 0xf8, 0x08, + 0x80, 0x06, 0x45, 0x20, 0x07, 0xfa, 0x08, 0x40, 0x49, 0x75, 0x3b, 0xfd, + 0x08, 0x40, 0x4e, 0xd3, 0x78, 0x88, 0x08, 0x00, 0xf9, 0x08, 0x06, 0x40, + 0xa5, 0x1b, 0x51, 0xc8, 0x5a, 0x91, 0x08, 0x00, 0x4e, 0x35, 0x79, 0xe9, + 0x06, 0x00, 0xaf, 0x01, 0xff, 0x4f, 0xf3, 0x6c, 0x0e, 0x06, 0x00, 0x4e, + 0xdb, 0x7d, 0x90, 0x08, 0x40, 0x43, 0x31, 0x2b, 0x97, 0x08, 0x00, 0x4a, + 0xe2, 0x9b, 0x6a, 0x06, 0x40, 0x48, 0xf8, 0xc4, 0xf1, 0x08, 0x00, 0x48, + 0xbb, 0x77, 0xf0, 0x08, 0x00, 0x48, 0x70, 0xc7, 0xf2, 0x08, 0x40, 0x4a, + 0x59, 0x4c, 0x05, 0x06, 0x00, 0x44, 0x5a, 0x03, 0x00, 0x06, 0x40, 0x03, + 0x7a, 0x36, 0xe7, 0x07, 0x03, 0xbb, 0x00, 0xd6, 0x07, 0x0b, 0xa3, 0x53, + 0x01, 0xff, 0xa1, 0xc2, 0x07, 0x43, 0xa3, 0x8c, 0x01, 0xee, 0x01, 0xa4, + 0xe8, 0x05, 0x43, 0xd6, 0xb8, 0x10, 0xee, 0x01, 0x45, 0x65, 0x9c, 0x1b, + 0xee, 0x01, 0x43, 0x26, 0x21, 0x07, 0xee, 0x01, 0x08, 0xb8, 0x16, 0xd1, + 0x04, 0x44, 0x3e, 0x38, 0x02, 0xee, 0x01, 0xab, 0xbc, 0x04, 0xac, 0xfc, + 0x02, 0x44, 0x1c, 0x21, 0x0c, 0xee, 0x01, 0x44, 0xf9, 0x45, 0x0d, 0xee, + 0x01, 0x09, 0x7e, 0x3e, 0xdf, 0x02, 0x43, 0x43, 0x14, 0x12, 0xee, 0x01, + 0x43, 0x37, 0x52, 0x13, 0xee, 0x01, 0xb3, 0xa0, 0x01, 0xb4, 0x1b, 0x43, + 0x8a, 0x8a, 0x05, 0xee, 0x01, 0x43, 0x4d, 0x00, 0x09, 0xee, 0x01, 0x02, + 0x59, 0x00, 0x01, 0xff, 0xe8, 0x1a, 0xee, 0x01, 0x42, 0x9e, 0x01, 0x06, + 0xee, 0x41, 0xa1, 0x15, 0x42, 0x4e, 0x00, 0x15, 0xee, 0x01, 0xa8, 0x01, + 0xff, 0x42, 0x13, 0x00, 0x18, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x16, 0xee, + 0x41, 0xe8, 0x08, 0xee, 0x01, 0x05, 0x91, 0x17, 0x01, 0xff, 0x43, 0x56, + 0x07, 0x4f, 0xee, 0x01, 0xa4, 0x44, 0x45, 0x65, 0x9c, 0x5b, 0xee, 0x01, + 0x43, 0x26, 0x21, 0x47, 0xee, 0x01, 0x44, 0x3e, 0x38, 0x42, 0xee, 0x01, + 0x44, 0xa0, 0x41, 0x57, 0xee, 0x01, 0x43, 0xb0, 0x00, 0x4b, 0xee, 0x01, + 0x44, 0xf9, 0x45, 0x4d, 0xee, 0x01, 0x43, 0x43, 0x14, 0x52, 0xee, 0x01, + 0xb3, 0x06, 0x43, 0x4d, 0x00, 0x49, 0xee, 0x41, 0x42, 0xe8, 0x01, 0x51, + 0xee, 0x01, 0x43, 0xc4, 0x09, 0x4e, 0xee, 0x01, 0x44, 0x4c, 0xdb, 0x54, + 0xee, 0x41, 0x42, 0xe8, 0x01, 0x59, 0xee, 0x01, 0x07, 0x91, 0x41, 0x01, + 0xff, 0x44, 0xf9, 0x45, 0x5d, 0xee, 0x01, 0x43, 0x43, 0x14, 0x5f, 0xee, + 0x41, 0x42, 0xe8, 0x01, 0x11, 0xee, 0x01, 0x43, 0xc4, 0x09, 0x0e, 0xee, + 0x01, 0x44, 0x4c, 0xdb, 0x14, 0xee, 0x01, 0x09, 0x2b, 0xb2, 0x01, 0xff, + 0x43, 0x56, 0x07, 0x6f, 0xee, 0x01, 0x43, 0xa3, 0x8c, 0x61, 0xee, 0x01, + 0xa4, 0x74, 0x43, 0xd6, 0xb8, 0x70, 0xee, 0x01, 0x45, 0x65, 0x9c, 0x7b, + 0xee, 0x01, 0xa8, 0x5a, 0x44, 0x3e, 0x38, 0x62, 0xee, 0x01, 0xab, 0x46, + 0x44, 0x1c, 0x21, 0x6c, 0xee, 0x01, 0x44, 0xf9, 0x45, 0x6d, 0xee, 0x01, + 0x43, 0x43, 0x14, 0x72, 0xee, 0x01, 0xb3, 0x20, 0xb4, 0x0c, 0x43, 0x4d, + 0x00, 0x69, 0xee, 0x01, 0x43, 0x01, 0x7f, 0x7a, 0xee, 0x41, 0x42, 0x18, + 0x0a, 0x68, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x75, 0xee, 0x01, 0x43, 0xf6, + 0x42, 0x76, 0xee, 0x41, 0x42, 0xe8, 0x01, 0x71, 0xee, 0x01, 0x43, 0xc4, + 0x09, 0x6e, 0xee, 0x01, 0x44, 0x4c, 0xdb, 0x74, 0xee, 0x41, 0x42, 0x44, + 0x14, 0x6a, 0xee, 0x01, 0x43, 0x26, 0x21, 0x77, 0xee, 0x41, 0x42, 0x18, + 0x0a, 0x67, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x64, 0xee, 0x41, 0x42, 0xe8, + 0x01, 0x79, 0xee, 0x01, 0x07, 0x91, 0x41, 0x01, 0xff, 0x43, 0xa3, 0x8c, + 0x7c, 0xee, 0x01, 0x43, 0xd6, 0xb8, 0x7e, 0xee, 0x41, 0x4c, 0x73, 0x8f, + 0xf1, 0xee, 0x01, 0x5a, 0x1c, 0x21, 0xf0, 0xee, 0x41, 0x42, 0x57, 0x00, + 0x0b, 0xee, 0x01, 0x06, 0x43, 0x85, 0x01, 0xff, 0xa1, 0xa3, 0x01, 0x43, + 0xa3, 0x8c, 0x81, 0xee, 0x01, 0x02, 0xf0, 0x10, 0x90, 0x01, 0x43, 0xd6, + 0xb8, 0x90, 0xee, 0x01, 0x45, 0x65, 0x9c, 0x9b, 0xee, 0x01, 0xa8, 0x76, + 0x44, 0x3e, 0x38, 0x82, 0xee, 0x01, 0x44, 0xa0, 0x41, 0x97, 0xee, 0x01, + 0x43, 0xb0, 0x00, 0x8b, 0xee, 0x01, 0x44, 0x1c, 0x21, 0x8c, 0xee, 0x01, + 0x44, 0xf9, 0x45, 0x8d, 0xee, 0x01, 0x43, 0x43, 0x14, 0x92, 0xee, 0x01, + 0x43, 0x37, 0x52, 0x93, 0xee, 0x01, 0xb3, 0x38, 0xb4, 0x1b, 0x43, 0x8a, + 0x8a, 0x85, 0xee, 0x01, 0x43, 0x4d, 0x00, 0x89, 0xee, 0x01, 0x02, 0x59, + 0x00, 0x01, 0xff, 0xe8, 0x9a, 0xee, 0x01, 0x42, 0x9e, 0x01, 0x86, 0xee, + 0x41, 0x42, 0x18, 0x0a, 0x88, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x95, 0xee, + 0x01, 0xa8, 0x01, 0xff, 0x42, 0x13, 0x00, 0x98, 0xee, 0x01, 0x42, 0x4e, + 0x00, 0x96, 0xee, 0x41, 0x42, 0xe8, 0x01, 0x91, 0xee, 0x01, 0x43, 0xc4, + 0x09, 0x8e, 0xee, 0x01, 0x44, 0x4c, 0xdb, 0x94, 0xee, 0x41, 0x42, 0x18, + 0x0a, 0x87, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x84, 0xee, 0x41, 0xe4, 0x99, + 0xee, 0x01, 0xec, 0x83, 0xee, 0x41, 0x42, 0x9e, 0x01, 0x8f, 0xee, 0x01, + 0x43, 0x68, 0x00, 0x80, 0xee, 0x41, 0x42, 0x44, 0x14, 0x0a, 0xee, 0x01, + 0x43, 0x26, 0x21, 0x17, 0xee, 0x41, 0x43, 0x56, 0x07, 0x2f, 0xee, 0x01, + 0x43, 0xa3, 0x8c, 0x21, 0xee, 0x01, 0x43, 0x2d, 0xd0, 0x39, 0xee, 0x01, + 0x43, 0xd6, 0xb8, 0x30, 0xee, 0x01, 0x45, 0x65, 0x9c, 0x3b, 0xee, 0x01, + 0xa8, 0x54, 0x44, 0x3e, 0x38, 0x22, 0xee, 0x01, 0xab, 0x40, 0x43, 0xb0, + 0x00, 0x2b, 0xee, 0x01, 0x44, 0x1c, 0x21, 0x2c, 0xee, 0x01, 0x44, 0xf9, + 0x45, 0x2d, 0xee, 0x01, 0x43, 0x43, 0x14, 0x32, 0xee, 0x01, 0xb3, 0x14, + 0xb4, 0x06, 0x43, 0x4d, 0x00, 0x29, 0xee, 0x41, 0x42, 0x4e, 0x00, 0x35, + 0xee, 0x01, 0x43, 0xf6, 0x42, 0x36, 0xee, 0x41, 0x42, 0xe8, 0x01, 0x31, + 0xee, 0x01, 0x43, 0xc4, 0x09, 0x2e, 0xee, 0x01, 0x44, 0x4c, 0xdb, 0x34, + 0xee, 0x41, 0x42, 0x44, 0x14, 0x2a, 0xee, 0x01, 0x43, 0x26, 0x21, 0x37, + 0xee, 0x41, 0x42, 0x18, 0x0a, 0x27, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x24, + 0xee, 0x41, 0xa1, 0xc6, 0x01, 0xaf, 0x01, 0xff, 0x06, 0x92, 0x41, 0xa6, + 0x01, 0x0c, 0x15, 0x77, 0x01, 0xff, 0x43, 0x56, 0x07, 0xaf, 0xee, 0x01, + 0x43, 0xa3, 0x8c, 0xa1, 0xee, 0x01, 0x02, 0xf0, 0x10, 0x88, 0x01, 0x43, + 0xd6, 0xb8, 0xb0, 0xee, 0x01, 0x45, 0x65, 0x9c, 0xbb, 0xee, 0x01, 0x43, + 0x26, 0x21, 0xa7, 0xee, 0x01, 0x44, 0x3e, 0x38, 0xa2, 0xee, 0x01, 0x44, + 0xa0, 0x41, 0xb7, 0xee, 0x01, 0x43, 0xb0, 0x00, 0xab, 0xee, 0x01, 0x44, + 0x1c, 0x21, 0xac, 0xee, 0x01, 0x44, 0xf9, 0x45, 0xad, 0xee, 0x01, 0x43, + 0x43, 0x14, 0xb2, 0xee, 0x01, 0x43, 0x37, 0x52, 0xb3, 0xee, 0x01, 0xb3, + 0x38, 0xb4, 0x1b, 0x43, 0x8a, 0x8a, 0xa5, 0xee, 0x01, 0x43, 0x4d, 0x00, + 0xa9, 0xee, 0x01, 0x02, 0x59, 0x00, 0x01, 0xff, 0xe8, 0xba, 0xee, 0x01, + 0x42, 0x9e, 0x01, 0xa6, 0xee, 0x41, 0x42, 0x18, 0x0a, 0xa8, 0xee, 0x01, + 0x42, 0x4e, 0x00, 0xb5, 0xee, 0x01, 0xa8, 0x01, 0xff, 0x42, 0x13, 0x00, + 0xb8, 0xee, 0x01, 0x42, 0x4e, 0x00, 0xb6, 0xee, 0x41, 0x42, 0xe8, 0x01, + 0xb1, 0xee, 0x01, 0x43, 0xc4, 0x09, 0xae, 0xee, 0x01, 0x44, 0x4c, 0xdb, + 0xb4, 0xee, 0x41, 0xe4, 0xb9, 0xee, 0x01, 0xec, 0xa3, 0xee, 0x41, 0x43, + 0xa3, 0x8c, 0x1c, 0xee, 0x01, 0x43, 0xd6, 0xb8, 0x1e, 0xee, 0x01, 0x44, + 0xf9, 0x45, 0x1d, 0xee, 0x01, 0x43, 0x43, 0x14, 0x1f, 0xee, 0x41, 0xe4, + 0x19, 0xee, 0x01, 0xec, 0x03, 0xee, 0x41, 0x42, 0x9e, 0x01, 0x0f, 0xee, + 0x01, 0x43, 0x68, 0x00, 0x00, 0xee, 0x41, 0x4b, 0xf9, 0x45, 0x58, 0x06, + 0x00, 0x54, 0xf0, 0x45, 0xff, 0x08, 0x40, 0x47, 0xab, 0xcd, 0x9c, 0x08, + 0x00, 0x47, 0x54, 0x2d, 0x53, 0x06, 0x40, 0x05, 0x28, 0x1c, 0xc6, 0x41, + 0xa5, 0xdf, 0x22, 0x08, 0x9d, 0x1f, 0x01, 0xff, 0xa1, 0xbd, 0x20, 0xa2, + 0x8c, 0x1f, 0x02, 0xf0, 0x10, 0xe4, 0x1d, 0x09, 0xd6, 0xb8, 0xe3, 0x1c, + 0x0b, 0x65, 0x9c, 0x84, 0x1c, 0xa8, 0xb4, 0x1a, 0xaa, 0xa5, 0x19, 0xab, + 0x8f, 0x17, 0x09, 0x4c, 0x14, 0xc8, 0x14, 0xad, 0x85, 0x13, 0xae, 0x85, + 0x11, 0xb1, 0xea, 0x0f, 0xb2, 0xc5, 0x0e, 0xb3, 0x83, 0x08, 0xb4, 0x92, + 0x04, 0x36, 0x3e, 0x00, 0xf8, 0x03, 0x56, 0x0d, 0x38, 0xf8, 0xfd, 0x00, + 0x09, 0x4d, 0x00, 0x19, 0x0e, 0x01, 0x7f, 0x01, 0xff, 0xa9, 0x06, 0x4b, + 0xf6, 0x6d, 0x3b, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xb9, 0xfc, 0x00, 0x4c, + 0x60, 0x03, 0x28, 0xfc, 0x40, 0x0d, 0x67, 0x00, 0xc4, 0x03, 0xa8, 0x83, + 0x01, 0x05, 0x3e, 0x38, 0x6b, 0x06, 0x72, 0x5b, 0x5b, 0x05, 0x1c, 0x21, + 0x22, 0x4f, 0xc2, 0x70, 0x94, 0xfc, 0x00, 0x4e, 0x9d, 0x7b, 0x91, 0xfc, + 0x00, 0x04, 0x4d, 0x00, 0x06, 0x4f, 0x27, 0x75, 0x92, 0xfc, 0x40, 0x4a, + 0xf5, 0x2c, 0x96, 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x5a, 0xfc, 0x40, 0x4a, + 0xf5, 0x2c, 0x93, 0xfc, 0x00, 0xa9, 0x21, 0x4b, 0xf6, 0x6d, 0xf0, 0xfc, + 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x1c, 0x21, 0x06, 0x4e, 0xee, + 0x4e, 0xb0, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x9c, 0xfd, 0x00, 0x4c, 0xb8, + 0x16, 0x9d, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xdd, 0xfc, 0x00, 0x4c, 0x60, + 0x03, 0x58, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0xdc, 0xfc, 0x00, 0x4c, 0x60, + 0x03, 0x57, 0xfc, 0x40, 0xa9, 0x06, 0x53, 0xe9, 0x4e, 0xaf, 0xfd, 0x40, + 0x4b, 0xb9, 0x16, 0xda, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x55, 0xfc, 0x40, + 0xa1, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, 0xb8, 0x16, 0xde, 0xfc, + 0x00, 0x4b, 0xf6, 0x6d, 0xf1, 0xfc, 0x40, 0x02, 0x4f, 0x00, 0x92, 0x02, + 0x0f, 0x58, 0x00, 0x01, 0xff, 0xa1, 0xd8, 0x01, 0x02, 0x60, 0x00, 0xbe, + 0x01, 0xa8, 0x9a, 0x01, 0x06, 0x3e, 0x38, 0x89, 0x01, 0x51, 0x72, 0x5b, + 0x99, 0xfc, 0x00, 0x05, 0x1c, 0x21, 0x65, 0x4f, 0xc2, 0x70, 0x67, 0xfc, + 0x00, 0x03, 0xcf, 0x97, 0x4f, 0x4e, 0x9d, 0x7b, 0x64, 0xfc, 0x00, 0x02, + 0x2e, 0x02, 0x39, 0x04, 0x25, 0xf3, 0x29, 0xb9, 0x06, 0x4f, 0x27, 0x75, + 0x65, 0xfc, 0x40, 0x03, 0x4e, 0x00, 0x11, 0x02, 0x2e, 0x02, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0xf5, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0xf4, 0xfb, 0x40, + 0x4a, 0xf5, 0x2c, 0x69, 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x04, 0xfc, 0x40, + 0x4a, 0xf5, 0x2c, 0xef, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0xee, 0xfb, 0x40, + 0x4a, 0xf5, 0x2c, 0xf1, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0xf0, 0xfb, 0x40, + 0x4a, 0xf5, 0x2c, 0xf3, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0xf2, 0xfb, 0x40, + 0x4a, 0xf5, 0x2c, 0x66, 0xfc, 0x00, 0xa9, 0x06, 0x4b, 0xf6, 0x6d, 0xdf, + 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0x9a, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x02, + 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0x97, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x00, + 0xfc, 0x40, 0x04, 0x74, 0x5a, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, + 0xb8, 0x16, 0x9b, 0xfc, 0x00, 0x4b, 0xf6, 0x6d, 0xe0, 0xfc, 0x40, 0x4b, + 0xb9, 0x16, 0x98, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x01, 0xfc, 0x40, 0x4a, + 0xf5, 0x2c, 0xf7, 0xfb, 0x00, 0xa9, 0x01, 0xff, 0x4b, 0xb9, 0x16, 0xf8, + 0xfb, 0x00, 0x4c, 0x60, 0x03, 0xf6, 0xfb, 0x40, 0x02, 0x60, 0x00, 0x22, + 0x04, 0x68, 0x00, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xeb, 0xfb, 0x00, 0x4d, + 0x5f, 0x03, 0xea, 0xfb, 0x00, 0x08, 0x6c, 0x00, 0x01, 0xff, 0x4a, 0xf5, + 0x2c, 0x68, 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x03, 0xfc, 0x40, 0x4a, 0xf5, + 0x2c, 0xed, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0xec, 0xfb, 0x40, 0xa9, 0x06, + 0x53, 0xe9, 0x4e, 0xae, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xdb, 0xfc, 0x00, + 0x4c, 0x60, 0x03, 0x56, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x95, 0xfc, 0x00, + 0x4d, 0x5f, 0x03, 0x59, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0xfa, 0xfb, 0x00, + 0xa9, 0x01, 0xff, 0x4b, 0xb9, 0x16, 0xfb, 0xfb, 0x00, 0x4c, 0x60, 0x03, + 0xf9, 0xfb, 0x40, 0xa1, 0xf6, 0x02, 0x08, 0x4e, 0x00, 0x6a, 0xa8, 0x01, + 0xff, 0x66, 0x67, 0x06, 0x5b, 0xfc, 0x00, 0x08, 0x4e, 0x00, 0x01, 0xff, + 0x0d, 0x67, 0x00, 0x4c, 0x4f, 0xf2, 0x6d, 0xe6, 0xfc, 0x00, 0x52, 0x11, + 0x53, 0x11, 0xfc, 0x00, 0x05, 0x1c, 0x21, 0x22, 0x4f, 0xc2, 0x70, 0x79, + 0xfc, 0x00, 0x4e, 0x9d, 0x7b, 0x76, 0xfc, 0x00, 0x04, 0x4d, 0x00, 0x06, + 0x4f, 0x27, 0x75, 0x77, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x7b, 0xfc, 0x00, + 0x4d, 0x5f, 0x03, 0x14, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x78, 0xfc, 0x00, + 0xa9, 0x06, 0x4b, 0xf6, 0x6d, 0xe5, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0xa6, + 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x12, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x7a, + 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x13, 0xfc, 0x40, 0x0d, 0x67, 0x00, 0xf7, + 0x01, 0xa8, 0xb6, 0x01, 0x05, 0x3e, 0x38, 0x8c, 0x01, 0x05, 0x72, 0x5b, + 0x63, 0x05, 0x1c, 0x21, 0x22, 0x4f, 0xc2, 0x70, 0x73, 0xfc, 0x00, 0x4e, + 0x9d, 0x7b, 0x70, 0xfc, 0x00, 0x04, 0x4d, 0x00, 0x06, 0x4f, 0x27, 0x75, + 0x71, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x75, 0xfc, 0x00, 0x4d, 0x5f, 0x03, + 0x10, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x72, 0xfc, 0x00, 0xa9, 0x29, 0x4b, + 0xf6, 0x6d, 0xe3, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0xe8, + 0x2c, 0xa4, 0xfd, 0x00, 0x50, 0x73, 0x5b, 0x56, 0xfd, 0x00, 0x51, 0x3e, + 0x38, 0x55, 0xfd, 0x00, 0x51, 0x72, 0x5b, 0x57, 0xfd, 0x00, 0x4e, 0xee, + 0x4e, 0xa3, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xa4, 0xfc, 0x00, 0x4c, 0x60, + 0x03, 0x0e, 0xfc, 0x40, 0xa9, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, + 0xe8, 0x2c, 0xa2, 0xfd, 0x00, 0x51, 0x3e, 0x5c, 0x54, 0xfd, 0x00, 0x4e, + 0xee, 0x4e, 0xa1, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xa3, 0xfc, 0x00, 0x4c, + 0x60, 0x03, 0x0d, 0xfc, 0x40, 0xa9, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, + 0x57, 0xe8, 0x2c, 0xa0, 0xfd, 0x00, 0x51, 0x3e, 0x5c, 0x50, 0xfd, 0x00, + 0x4e, 0xee, 0x4e, 0x9f, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xa1, 0xfc, 0x00, + 0x4c, 0x60, 0x03, 0x0b, 0xfc, 0x40, 0x03, 0x18, 0x0a, 0x11, 0x03, 0x4e, + 0x00, 0x01, 0xff, 0x4c, 0xb8, 0x16, 0xa5, 0xfc, 0x00, 0x4b, 0xf6, 0x6d, + 0xe4, 0xfc, 0x40, 0xa9, 0x1b, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x3e, + 0x38, 0x06, 0x51, 0x3e, 0x5c, 0x53, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x51, + 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0x52, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xa2, + 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x0c, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x74, + 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x0f, 0xfc, 0x40, 0x52, 0x89, 0x50, 0x4e, + 0xfd, 0x00, 0x07, 0x4f, 0x00, 0x01, 0xff, 0x0d, 0x67, 0x00, 0x5a, 0x05, + 0x73, 0x5a, 0x4a, 0x05, 0x1c, 0x21, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0x12, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0xf6, 0xfc, 0x40, + 0xa9, 0x27, 0x4b, 0xf6, 0x6d, 0x3a, 0xfd, 0x00, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x04, 0x26, 0x21, 0x0c, 0x51, 0x3e, 0x5c, 0x73, 0xfd, 0x00, 0x4e, + 0xee, 0x4e, 0x74, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x71, 0xfd, 0x00, 0x4c, + 0xb8, 0x16, 0x72, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0x33, 0xfd, 0x00, 0x4c, + 0x60, 0x03, 0x27, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0xb8, 0xfc, 0x00, 0x4c, + 0x60, 0x03, 0x26, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x11, 0xfd, 0x00, 0x4d, + 0x5f, 0x03, 0xf5, 0xfc, 0x40, 0xa1, 0xde, 0x04, 0x09, 0x22, 0xb8, 0xde, + 0x02, 0xa8, 0x06, 0x54, 0x54, 0x46, 0xfe, 0xfd, 0x40, 0x0a, 0x6d, 0xa7, + 0x8b, 0x02, 0x09, 0x22, 0xb8, 0x01, 0xff, 0x0d, 0x67, 0x00, 0xf5, 0x01, + 0xa8, 0xa8, 0x01, 0x05, 0x3e, 0x38, 0x83, 0x01, 0x05, 0x72, 0x5b, 0x65, + 0x05, 0x1c, 0x21, 0x21, 0x04, 0x9d, 0x7b, 0x11, 0x04, 0x4d, 0x00, 0x01, + 0xff, 0x4a, 0xf5, 0x2c, 0x1a, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0xfe, 0xfc, + 0x40, 0x4a, 0xf5, 0x2c, 0x29, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0x0d, 0xfd, + 0x40, 0x4a, 0xf5, 0x2c, 0x28, 0xfd, 0x00, 0xa9, 0x2c, 0x4b, 0xf6, 0x6d, + 0xe9, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x72, 0x5b, 0x11, + 0x05, 0x1c, 0x21, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x6c, 0xfd, 0x00, 0x4c, + 0xb8, 0x16, 0x6d, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x6a, 0xfd, 0x00, 0x4c, + 0xb8, 0x16, 0x6b, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0x30, 0xfd, 0x00, 0x4c, + 0x60, 0x03, 0x0c, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x27, 0xfd, 0x00, 0xa9, + 0x06, 0x4b, 0xf6, 0x6d, 0x39, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0x2f, 0xfd, + 0x00, 0x4c, 0x60, 0x03, 0x0b, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x25, 0xfd, + 0x00, 0xa9, 0x0c, 0x4b, 0xf6, 0x6d, 0x37, 0xfd, 0x00, 0x53, 0xe9, 0x4e, + 0x69, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0x2d, 0xfd, 0x00, 0x4c, 0x60, 0x03, + 0x09, 0xfd, 0x40, 0x03, 0x18, 0x0a, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, + 0x4c, 0xb8, 0x16, 0x32, 0xfd, 0x00, 0x4b, 0xf6, 0x6d, 0xea, 0xfc, 0x40, + 0x4a, 0xf5, 0x2c, 0x26, 0xfd, 0x00, 0xa9, 0x21, 0x4b, 0xf6, 0x6d, 0x38, + 0xfd, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x1c, 0x21, 0x06, 0x4e, + 0xee, 0x4e, 0xaa, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x67, 0xfd, 0x00, 0x4c, + 0xb8, 0x16, 0x68, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0x2e, 0xfd, 0x00, 0x4c, + 0x60, 0x03, 0x0a, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x19, 0xfd, 0x00, 0x4d, + 0x5f, 0x03, 0xfd, 0xfc, 0x40, 0x05, 0xec, 0x5e, 0x2e, 0x06, 0xba, 0xdb, + 0x1e, 0x05, 0xa8, 0x50, 0x06, 0x5e, 0x6f, 0x06, 0x63, 0xfc, 0x40, 0x80, + 0x06, 0x51, 0x1a, 0x5e, 0x5f, 0xfc, 0x40, 0x4d, 0x5f, 0x03, 0x62, 0xfc, + 0x00, 0x4b, 0xf6, 0x6d, 0xf4, 0xfc, 0x40, 0x4d, 0x5f, 0x03, 0x60, 0xfc, + 0x00, 0x4b, 0xf6, 0x6d, 0xf2, 0xfc, 0x40, 0x80, 0x06, 0x51, 0x1a, 0x5e, + 0x5e, 0xfc, 0x40, 0x4d, 0x5f, 0x03, 0x61, 0xfc, 0x00, 0x4b, 0xf6, 0x6d, + 0xf3, 0xfc, 0x40, 0x0d, 0x67, 0x00, 0xea, 0x01, 0xa8, 0xb8, 0x01, 0x05, + 0x3e, 0x38, 0x8e, 0x01, 0x05, 0x72, 0x5b, 0x65, 0x05, 0x1c, 0x21, 0x21, + 0x04, 0x9d, 0x7b, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0xf5, 0x2c, + 0x18, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0xfc, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, + 0x2a, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0x0e, 0xfd, 0x40, 0xa9, 0x32, 0x4b, + 0xf6, 0x6d, 0xe7, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x26, + 0x21, 0x17, 0x51, 0x3e, 0x38, 0x61, 0xfd, 0x00, 0x05, 0x1c, 0x21, 0x01, + 0xff, 0x4a, 0xf5, 0x2c, 0x62, 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0x63, 0xfd, + 0x40, 0x4a, 0xf5, 0x2c, 0x5f, 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0x60, 0xfd, + 0x40, 0x4b, 0xb9, 0x16, 0xb0, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x1f, 0xfc, + 0x40, 0xa9, 0x17, 0x4b, 0xf6, 0x6d, 0x36, 0xfd, 0x00, 0x05, 0x51, 0x00, + 0x01, 0xff, 0x57, 0xe8, 0x2c, 0xa8, 0xfd, 0x00, 0x4e, 0xee, 0x4e, 0xc6, + 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xaf, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x1e, + 0xfc, 0x40, 0xa9, 0x17, 0x4b, 0xf6, 0x6d, 0x34, 0xfd, 0x00, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x57, 0xe8, 0x2c, 0x5e, 0xfd, 0x00, 0x50, 0x73, 0x5b, + 0x5d, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xad, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x1c, 0xfc, 0x40, 0x03, 0x18, 0x0a, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, + 0x4c, 0xb8, 0x16, 0x31, 0xfd, 0x00, 0x4b, 0xf6, 0x6d, 0xe8, 0xfc, 0x40, + 0xa9, 0x0c, 0x4b, 0xf6, 0x6d, 0x35, 0xfd, 0x00, 0x56, 0x39, 0x38, 0x5c, + 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xae, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x1d, + 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x17, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0xfb, + 0xfc, 0x40, 0x07, 0xa2, 0x0a, 0x53, 0xac, 0x01, 0xff, 0xa1, 0x42, 0x02, + 0x74, 0x00, 0x01, 0xff, 0x80, 0x2f, 0x03, 0x2c, 0x0e, 0x01, 0xff, 0x04, + 0x57, 0x19, 0x1a, 0xa8, 0x01, 0xff, 0x52, 0x43, 0x54, 0xfa, 0xfd, 0x00, + 0x0b, 0x00, 0xa4, 0x01, 0xff, 0x57, 0xd1, 0x2c, 0xcc, 0xfd, 0x00, 0x51, + 0xd7, 0x2c, 0x4c, 0xfd, 0x40, 0x4f, 0x8c, 0x6a, 0x46, 0xfd, 0x00, 0x58, + 0x56, 0x2b, 0xd0, 0xfb, 0x40, 0x4d, 0x5f, 0x03, 0xf9, 0xfd, 0x00, 0x67, + 0x45, 0x03, 0xf0, 0xfd, 0x40, 0x4d, 0x55, 0x80, 0xcf, 0xfd, 0x00, 0x4f, + 0x14, 0x38, 0xf5, 0xfd, 0x40, 0x0d, 0x67, 0x00, 0x77, 0x04, 0x26, 0x21, + 0x4a, 0x51, 0x72, 0x5b, 0xb2, 0xfc, 0x00, 0x05, 0x1c, 0x21, 0x21, 0x04, + 0x9d, 0x7b, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x22, + 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0x06, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x2b, + 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0x0f, 0xfd, 0x40, 0xa9, 0x11, 0x0a, 0x05, + 0x7f, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x66, 0xfd, 0x00, 0x4c, 0xb8, 0x16, + 0xc5, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xb3, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x21, 0xfc, 0x40, 0xa9, 0x1b, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x26, + 0x21, 0x06, 0x4e, 0xee, 0x4e, 0xa9, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x64, + 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0x65, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xb1, + 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x20, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x21, + 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0x05, 0xfd, 0x40, 0xa1, 0x06, 0x66, 0xb3, + 0x06, 0x5c, 0xfc, 0x40, 0x0b, 0xef, 0x9a, 0x5b, 0xa8, 0x06, 0x52, 0x87, + 0x55, 0xf6, 0xfd, 0x40, 0x05, 0x63, 0xe7, 0x25, 0x0d, 0xb7, 0x85, 0x01, + 0xff, 0x45, 0xf2, 0x20, 0x90, 0xfd, 0x80, 0x06, 0x4d, 0x56, 0x2b, 0xc5, + 0xfb, 0x40, 0x42, 0x80, 0x12, 0x91, 0xfd, 0x00, 0x42, 0x29, 0x02, 0xc6, + 0xfb, 0xc0, 0x00, 0x42, 0x80, 0x12, 0xc7, 0xfb, 0x40, 0x47, 0xbd, 0x2d, + 0x40, 0xfd, 0x80, 0x1d, 0xad, 0x01, 0xff, 0x47, 0xbd, 0x2d, 0x4f, 0xfd, + 0x80, 0x0d, 0x49, 0xf9, 0x4f, 0xc9, 0xfb, 0xc0, 0x00, 0x49, 0x02, 0x50, + 0xca, 0xfb, 0x40, 0x49, 0x02, 0x50, 0xc8, 0xfb, 0x40, 0x48, 0x60, 0x46, + 0xc8, 0xfd, 0x40, 0x43, 0x0e, 0x6c, 0x41, 0xfd, 0x80, 0x1a, 0x4b, 0x2f, + 0xa3, 0xc9, 0xfd, 0xc0, 0x00, 0x42, 0x80, 0x12, 0xca, 0xfd, 0x00, 0x42, + 0x48, 0x04, 0xcb, 0xfb, 0xc0, 0x00, 0x42, 0x80, 0x12, 0xcb, 0xfd, 0x40, + 0x42, 0x80, 0x12, 0x42, 0xfd, 0x00, 0xb5, 0x01, 0xff, 0xed, 0x43, 0xfd, + 0x80, 0x06, 0x43, 0x01, 0x46, 0x45, 0xfd, 0x40, 0x42, 0x80, 0x12, 0x44, + 0xfd, 0x40, 0xa1, 0x22, 0x06, 0xe8, 0xe0, 0x01, 0xff, 0x05, 0x89, 0x41, + 0x06, 0x4c, 0x8b, 0x95, 0xd7, 0x0e, 0x41, 0x42, 0x18, 0x0a, 0x4b, 0xfd, + 0x00, 0x44, 0x1c, 0x58, 0xd5, 0x0e, 0xc1, 0x00, 0x42, 0x80, 0x12, 0xd6, + 0x0e, 0x41, 0x54, 0x7c, 0x41, 0xd4, 0x0e, 0x01, 0x07, 0x45, 0x14, 0x06, + 0x6a, 0x42, 0x03, 0xf1, 0xfd, 0x40, 0x0d, 0x67, 0x00, 0x54, 0x05, 0x73, + 0x5a, 0x44, 0x05, 0x1c, 0x21, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, + 0xf5, 0x2c, 0x7f, 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x36, 0xfc, 0x40, 0xa9, + 0x21, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x26, 0x21, 0x0c, 0x4f, 0x3b, + 0x70, 0x7f, 0xfd, 0x00, 0x4e, 0xee, 0x4e, 0xb2, 0xfd, 0x40, 0x4a, 0xf5, + 0x2c, 0x7e, 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0xb4, 0xfd, 0x40, 0x4b, 0xb9, + 0x16, 0xc3, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x34, 0xfc, 0x40, 0x4b, 0xb9, + 0x16, 0xc2, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x33, 0xfc, 0x40, 0x4a, 0xf5, + 0x2c, 0x7e, 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x35, 0xfc, 0x40, 0x57, 0xb7, + 0x2d, 0xd8, 0x0e, 0x01, 0x09, 0x94, 0x05, 0x01, 0xff, 0x0d, 0x67, 0x00, + 0xe1, 0x01, 0xa8, 0xa4, 0x01, 0x05, 0x3e, 0x38, 0x61, 0x06, 0x72, 0x5b, + 0x51, 0x05, 0x1c, 0x21, 0x22, 0x4f, 0xc2, 0x70, 0x8d, 0xfc, 0x00, 0x4e, + 0x9d, 0x7b, 0x8a, 0xfc, 0x00, 0x04, 0x4d, 0x00, 0x06, 0x4f, 0x27, 0x75, + 0x8b, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x8f, 0xfc, 0x00, 0x4d, 0x5f, 0x03, + 0x50, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x8c, 0xfc, 0x00, 0xa9, 0x17, 0x4b, + 0xf6, 0x6d, 0xee, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0xe8, + 0x2c, 0x9b, 0xfd, 0x00, 0x4e, 0xee, 0x4e, 0x9a, 0xfd, 0x40, 0x4b, 0xb9, + 0x16, 0xd5, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x4e, 0xfc, 0x40, 0x4b, 0xb9, + 0x16, 0xd4, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x4d, 0xfc, 0x40, 0xa9, 0x31, + 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0xe8, 0x2c, 0x99, 0xfd, 0x00, 0x04, + 0x26, 0x21, 0x16, 0x05, 0x1c, 0x21, 0x06, 0x4e, 0xee, 0x4e, 0xc7, 0xfd, + 0x40, 0x4a, 0xf5, 0x2c, 0x97, 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0x98, 0xfd, + 0x40, 0x4a, 0xf5, 0x2c, 0xbd, 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0xb8, 0xfd, + 0x40, 0x4b, 0xb9, 0x16, 0xd2, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x4b, 0xfc, + 0x40, 0x03, 0x18, 0x0a, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, 0xb8, + 0x16, 0xd6, 0xfc, 0x00, 0x4b, 0xf6, 0x6d, 0xef, 0xfc, 0x40, 0xa9, 0x17, + 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0xe8, 0x2c, 0x96, 0xfd, 0x00, 0x51, + 0x3e, 0x5c, 0x95, 0xfd, 0x00, 0x4e, 0xee, 0x4e, 0xb3, 0xfd, 0x40, 0x4b, + 0xb9, 0x16, 0xd3, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x4c, 0xfc, 0x40, 0x4a, + 0xf5, 0x2c, 0x8e, 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x4f, 0xfc, 0x40, 0x09, + 0x1d, 0x21, 0x06, 0x55, 0x3d, 0x3d, 0xf4, 0xfd, 0x40, 0x05, 0x67, 0x00, + 0xa5, 0x01, 0x04, 0x26, 0x21, 0x7c, 0x05, 0x3e, 0x38, 0x4d, 0x05, 0x72, + 0x5b, 0x24, 0x05, 0x1c, 0x21, 0x06, 0x51, 0xd4, 0x5f, 0x4a, 0xfc, 0x40, + 0x4a, 0xf5, 0x2c, 0x89, 0xfc, 0x00, 0xa9, 0x06, 0x53, 0xe9, 0x4e, 0xb1, + 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xd1, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x48, + 0xfc, 0x40, 0xa9, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x51, 0x3e, 0x38, + 0x8e, 0xfd, 0x00, 0x51, 0x3e, 0x5c, 0x8f, 0xfd, 0x00, 0x4e, 0xee, 0x4e, + 0xb9, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xd0, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x47, 0xfc, 0x40, 0xa9, 0x1d, 0x05, 0x51, 0x00, 0x01, 0xff, 0x50, 0x73, + 0x5b, 0x8c, 0xfd, 0x00, 0x51, 0x72, 0x5b, 0x92, 0xfd, 0x00, 0x51, 0x3e, + 0x5c, 0x8d, 0xfd, 0x00, 0x4e, 0xee, 0x4e, 0xc0, 0xfd, 0x40, 0x4b, 0xb9, + 0x16, 0xce, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x45, 0xfc, 0x40, 0xa9, 0x17, + 0x05, 0x51, 0x00, 0x01, 0xff, 0x51, 0x3e, 0x38, 0x89, 0xfd, 0x00, 0x51, + 0x3e, 0x5c, 0x8a, 0xfd, 0x00, 0x4e, 0xee, 0x4e, 0x8b, 0xfd, 0x40, 0x4b, + 0xb9, 0x16, 0xcf, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x46, 0xfc, 0x40, 0x4a, + 0xf5, 0x2c, 0x88, 0xfc, 0x00, 0x55, 0xe5, 0x1e, 0x49, 0xfc, 0x40, 0x05, + 0x67, 0x00, 0xe6, 0x01, 0xa8, 0xaa, 0x01, 0x05, 0x3e, 0x38, 0x6d, 0x05, + 0x72, 0x5b, 0x4a, 0x05, 0x1c, 0x21, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0x87, 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x44, 0xfc, 0x40, + 0x4a, 0xf5, 0x2c, 0x85, 0xfc, 0x00, 0xa9, 0x21, 0x4b, 0xf6, 0x6d, 0xed, + 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x26, 0x21, 0x06, 0x4e, + 0xee, 0x4e, 0xad, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x87, 0xfd, 0x00, 0x4c, + 0xb8, 0x16, 0x88, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xcc, 0xfc, 0x00, 0x4c, + 0x60, 0x03, 0x42, 0xfc, 0x40, 0xa9, 0x11, 0x0a, 0x05, 0x7f, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0x85, 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0x86, 0xfd, 0x40, + 0x4b, 0xb9, 0x16, 0xcb, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x41, 0xfc, 0x40, + 0xa9, 0x2b, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x3e, 0x38, 0x16, 0x05, + 0x1c, 0x21, 0x06, 0x4e, 0xee, 0x4e, 0xac, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, + 0xbc, 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0xba, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, + 0x84, 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0x83, 0xfd, 0x40, 0x4b, 0xb9, 0x16, + 0xc9, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x3f, 0xfc, 0x40, 0x03, 0x18, 0x0a, + 0x06, 0x4f, 0xa8, 0x6c, 0xcd, 0xfc, 0x40, 0xa9, 0x21, 0x05, 0x51, 0x00, + 0x01, 0xff, 0x57, 0xe8, 0x2c, 0x82, 0xfd, 0x00, 0x05, 0x1c, 0x21, 0x06, + 0x4e, 0xee, 0x4e, 0x81, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x80, 0xfd, 0x00, + 0x4c, 0xb8, 0x16, 0xb5, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xca, 0xfc, 0x00, + 0x4c, 0x60, 0x03, 0x40, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0xfc, 0xfe, 0x00, + 0x4d, 0x5f, 0x03, 0xfb, 0xfe, 0x00, 0x08, 0x6c, 0x00, 0x3b, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x06, 0x56, 0x00, 0x11, 0x0c, 0xb3, 0x91, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0xf6, 0xfe, 0x00, 0x4d, 0x5f, 0x03, 0xf5, 0xfe, 0x40, + 0x06, 0x5c, 0x00, 0x11, 0x06, 0xa3, 0x12, 0x01, 0xff, 0x4a, 0xf5, 0x2c, + 0xfa, 0xfe, 0x00, 0x4d, 0x5f, 0x03, 0xf9, 0xfe, 0x40, 0x4a, 0xf5, 0x2c, + 0xf8, 0xfe, 0x00, 0x4d, 0x5f, 0x03, 0xf7, 0xfe, 0x40, 0x4a, 0xf5, 0x2c, + 0x86, 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x43, 0xfc, 0x40, 0xa1, 0x4c, 0x09, + 0x26, 0x21, 0x01, 0xff, 0x0d, 0x67, 0x00, 0x37, 0x51, 0x73, 0x5a, 0x1a, + 0xfc, 0x00, 0x06, 0x3e, 0x38, 0x21, 0x06, 0x3e, 0x5c, 0x11, 0x04, 0x4d, + 0x00, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x20, 0xfd, 0x00, 0x4d, 0x5f, 0x03, + 0x04, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xac, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x1b, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0xab, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x19, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x1f, 0xfd, 0x00, 0x4d, 0x5f, 0x03, + 0x03, 0xfd, 0x40, 0x07, 0x45, 0x14, 0x06, 0x54, 0x8c, 0x45, 0xce, 0xfd, + 0x40, 0x05, 0x67, 0x00, 0x99, 0x01, 0x05, 0x73, 0x5a, 0x88, 0x01, 0x06, + 0x3e, 0x38, 0x78, 0x06, 0x72, 0x5b, 0x68, 0x04, 0x4c, 0x14, 0x4a, 0x05, + 0x1c, 0x21, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x84, + 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x3e, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x82, + 0xfc, 0x00, 0xa9, 0x21, 0x4b, 0xf6, 0x6d, 0xec, 0xfc, 0x00, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x05, 0x1c, 0x21, 0x06, 0x4e, 0xee, 0x4e, 0xb7, 0xfd, + 0x40, 0x4a, 0xf5, 0x2c, 0xbb, 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0xc3, 0xfd, + 0x40, 0x4b, 0xb9, 0x16, 0xc8, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x3c, 0xfc, + 0x40, 0x4a, 0xf5, 0x2c, 0x81, 0xfc, 0x00, 0xa9, 0x06, 0x4b, 0xf6, 0x6d, + 0xeb, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0xc7, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x3b, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0xc6, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x3a, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0xc4, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x38, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0xc5, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x39, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x80, 0xfc, 0x00, 0x4d, 0x5f, 0x03, + 0x37, 0xfc, 0x00, 0x08, 0x6c, 0x00, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x83, + 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x3d, 0xfc, 0x40, 0x04, 0xea, 0x20, 0x7c, + 0x09, 0x1d, 0x21, 0x01, 0xff, 0x0d, 0x67, 0x00, 0x67, 0x04, 0x26, 0x21, + 0x44, 0x05, 0x1c, 0x21, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0xf5, + 0x2c, 0x1e, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0x02, 0xfd, 0x40, 0xa9, 0x21, + 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0xe8, 0x2c, 0xa7, 0xfd, 0x00, 0x04, + 0x26, 0x21, 0x06, 0x4e, 0xee, 0x4e, 0xa5, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, + 0x58, 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0x59, 0xfd, 0x40, 0x4b, 0xb9, 0x16, + 0xa8, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x16, 0xfc, 0x40, 0xa9, 0x11, 0x05, + 0x51, 0x00, 0x01, 0xff, 0x57, 0xe8, 0x2c, 0xa6, 0xfd, 0x00, 0x4e, 0xee, + 0x4e, 0xbe, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xa7, 0xfc, 0x00, 0x4c, 0x60, + 0x03, 0x15, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x1d, 0xfd, 0x00, 0x4d, 0x5f, + 0x03, 0x01, 0xfd, 0x40, 0x48, 0xa8, 0xc2, 0xc3, 0xfb, 0x00, 0x4a, 0x31, + 0xac, 0xfb, 0xfd, 0x40, 0xa1, 0x4a, 0x08, 0x4e, 0x00, 0x01, 0xff, 0x5a, + 0xe0, 0x1e, 0x53, 0xfc, 0x00, 0x06, 0x3e, 0x38, 0x2f, 0x05, 0x1c, 0x21, + 0x0c, 0x5d, 0xa7, 0x16, 0xd9, 0xfc, 0x00, 0x51, 0xd4, 0x5f, 0x54, 0xfc, + 0x40, 0xa9, 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x51, 0x3e, 0x38, 0x93, + 0xfd, 0x00, 0x51, 0x3e, 0x5c, 0x94, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xd8, + 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x52, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0xd7, + 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x51, 0xfc, 0x40, 0x06, 0xc6, 0xdb, 0x61, + 0x07, 0x4f, 0x00, 0x01, 0xff, 0x0d, 0x67, 0x00, 0x4c, 0x05, 0x3e, 0x38, + 0x34, 0x05, 0x1c, 0x21, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0xf5, + 0x2c, 0x1c, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0x00, 0xfd, 0x40, 0xa9, 0x11, + 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0xe8, 0x2c, 0x5b, 0xfd, 0x00, 0x4e, + 0xee, 0x4e, 0x5a, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xaa, 0xfc, 0x00, 0x4c, + 0x60, 0x03, 0x18, 0xfc, 0x40, 0xa9, 0x06, 0x53, 0xe9, 0x4e, 0xbf, 0xfd, + 0x40, 0x4b, 0xb9, 0x16, 0xa9, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x17, 0xfc, + 0x40, 0x4a, 0xf5, 0x2c, 0x1b, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0xff, 0xfc, + 0x40, 0x47, 0xbd, 0x2d, 0xcc, 0xfb, 0x80, 0x0f, 0xad, 0x01, 0xff, 0x50, + 0xfb, 0x4f, 0xce, 0xfb, 0x00, 0x52, 0xf9, 0x4f, 0xcf, 0xfb, 0x40, 0x49, + 0x02, 0x50, 0xcd, 0xfb, 0x40, 0x0d, 0x67, 0x00, 0x4a, 0x06, 0x3e, 0x38, + 0x3a, 0x05, 0x1c, 0x21, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0xf5, + 0x2c, 0x16, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0xfa, 0xfc, 0x40, 0xa9, 0x17, + 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0xe8, 0x2c, 0x7b, 0xfd, 0x00, 0x4f, + 0x3b, 0x70, 0x79, 0xfd, 0x00, 0x4e, 0xee, 0x4e, 0x7a, 0xfd, 0x40, 0x4b, + 0xb9, 0x16, 0xbd, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x2c, 0xfc, 0x40, 0x4b, + 0xb9, 0x16, 0xbc, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x2b, 0xfc, 0x40, 0x4a, + 0xf5, 0x2c, 0x15, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0xf9, 0xfc, 0x40, 0x0d, + 0x67, 0x00, 0x6c, 0x05, 0x73, 0x5a, 0x5c, 0x06, 0x3e, 0x38, 0x4c, 0x05, + 0x72, 0x5b, 0x29, 0x05, 0x1c, 0x21, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0x7d, 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x32, 0xfc, 0x40, + 0xa9, 0x06, 0x53, 0xe9, 0x4e, 0xc1, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xc1, + 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x30, 0xfc, 0x40, 0xa9, 0x11, 0x0a, 0x05, + 0x7f, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x7c, 0xfd, 0x00, 0x4c, 0xb8, 0x16, + 0x7d, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xc0, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x2f, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0xbe, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x2d, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0xbf, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x2e, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x7c, 0xfc, 0x00, 0x4d, 0x5f, 0x03, + 0x31, 0xfc, 0x40, 0x51, 0x0f, 0x58, 0xc4, 0xfb, 0x00, 0x07, 0xa2, 0x0a, + 0x01, 0xff, 0x0d, 0x67, 0x00, 0x87, 0x01, 0x04, 0x26, 0x21, 0x64, 0x06, + 0x3e, 0x38, 0x54, 0x05, 0x72, 0x5b, 0x31, 0x06, 0x3e, 0x5c, 0x21, 0x04, + 0x9d, 0x7b, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x24, + 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0x08, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x2c, + 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0x10, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xb7, + 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x25, 0xfc, 0x40, 0xa9, 0x11, 0x0a, 0x05, + 0x7f, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x6f, 0xfd, 0x00, 0x4c, 0xb8, 0x16, + 0x70, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xb6, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x24, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0xb4, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x22, 0xfc, 0x40, 0xa9, 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0xe8, + 0x2c, 0x6e, 0xfd, 0x00, 0x4e, 0xee, 0x4e, 0xab, 0xfd, 0x40, 0x4b, 0xb9, + 0x16, 0xb5, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x23, 0xfc, 0x40, 0x4a, 0xf5, + 0x2c, 0x23, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0x07, 0xfd, 0x40, 0x08, 0x4e, + 0x00, 0x06, 0x5c, 0x32, 0x18, 0xfd, 0xfd, 0x40, 0x0d, 0x67, 0x00, 0x93, + 0x01, 0xa8, 0x68, 0x06, 0x3e, 0x38, 0x58, 0x05, 0x72, 0x5b, 0x40, 0x05, + 0x1c, 0x21, 0x22, 0x4f, 0xc2, 0x70, 0x6d, 0xfc, 0x00, 0x4e, 0x9d, 0x7b, + 0x6a, 0xfc, 0x00, 0x04, 0x4d, 0x00, 0x06, 0x4f, 0x27, 0x75, 0x6b, 0xfc, + 0x40, 0x4a, 0xf5, 0x2c, 0x6f, 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x0a, 0xfc, + 0x40, 0x4a, 0xf5, 0x2c, 0x6c, 0xfc, 0x00, 0xa9, 0x06, 0x4b, 0xf6, 0x6d, + 0xe1, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0x9f, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x08, 0xfc, 0x40, 0xa9, 0x06, 0x53, 0xe9, 0x4e, 0x9e, 0xfd, 0x40, 0x4b, + 0xb9, 0x16, 0x9e, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x07, 0xfc, 0x40, 0x4b, + 0xb9, 0x16, 0x9c, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x05, 0xfc, 0x40, 0x03, + 0x18, 0x0a, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, 0xb8, 0x16, 0xa0, + 0xfc, 0x00, 0x4b, 0xf6, 0x6d, 0xe2, 0xfc, 0x40, 0xa9, 0x06, 0x53, 0xe9, + 0x4e, 0xc2, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0x9d, 0xfc, 0x00, 0x4c, 0x60, + 0x03, 0x06, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x6e, 0xfc, 0x00, 0x4d, 0x5f, + 0x03, 0x09, 0xfc, 0x40, 0x08, 0x68, 0x9c, 0x9e, 0x01, 0x0d, 0xc0, 0x84, + 0x8d, 0x01, 0x52, 0x35, 0x53, 0xf3, 0xfd, 0x00, 0xac, 0x06, 0x4b, 0x8c, + 0xa5, 0xff, 0xfd, 0x40, 0x03, 0xf4, 0x20, 0x2b, 0x03, 0x69, 0x00, 0x06, + 0x51, 0x94, 0x5b, 0xf2, 0xfd, 0x40, 0x1e, 0xad, 0x13, 0x11, 0x0e, 0xbb, + 0x7e, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x3c, 0xfd, 0x00, 0x4d, 0x5f, 0x03, + 0x3d, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x90, 0xfc, 0x00, 0x4d, 0x5f, 0x03, + 0x5d, 0xfc, 0x40, 0x0b, 0xa8, 0x98, 0x42, 0x4f, 0x6c, 0x6c, 0xf7, 0xfd, + 0x00, 0xa9, 0x01, 0xff, 0x02, 0x19, 0x00, 0x20, 0xad, 0x01, 0xff, 0x09, + 0xaa, 0x98, 0x0f, 0x0b, 0xa8, 0x98, 0x01, 0xff, 0xed, 0x49, 0xfd, 0x00, + 0x4d, 0x5f, 0x89, 0xd3, 0x0e, 0x41, 0xed, 0x48, 0xfd, 0x00, 0x4d, 0x5f, + 0x89, 0xd2, 0x0e, 0x41, 0x48, 0x18, 0xca, 0xd2, 0xfb, 0x00, 0x07, 0x64, + 0x89, 0x01, 0xff, 0xed, 0x47, 0xfd, 0x00, 0x4d, 0x5f, 0x89, 0x4a, 0xfd, + 0x40, 0xed, 0x4d, 0xfd, 0x00, 0x4d, 0x5f, 0x89, 0xd1, 0x0e, 0x41, 0x54, + 0x52, 0x19, 0xd1, 0xfb, 0x00, 0x5c, 0x4a, 0x19, 0xcd, 0xfd, 0x40, 0x0d, + 0x67, 0x00, 0x67, 0x05, 0x3e, 0x38, 0x44, 0x05, 0x1c, 0x21, 0x11, 0x04, + 0x4d, 0x00, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x14, 0xfd, 0x00, 0x4d, 0x5f, + 0x03, 0xf8, 0xfc, 0x40, 0xa9, 0x21, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, + 0xe8, 0x2c, 0x78, 0xfd, 0x00, 0x05, 0x1c, 0x21, 0x06, 0x4e, 0xee, 0x4e, + 0xb6, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x76, 0xfd, 0x00, 0x4c, 0xb8, 0x16, + 0x77, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xbb, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x2a, 0xfc, 0x40, 0xa9, 0x11, 0x0a, 0x05, 0x7f, 0x01, 0xff, 0x4a, 0xf5, + 0x2c, 0x75, 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0xc4, 0xfd, 0x40, 0x4b, 0xb9, + 0x16, 0xba, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x29, 0xfc, 0x40, 0x4a, 0xf5, + 0x2c, 0x13, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0xf7, 0xfc, 0x40, 0x0d, 0x20, + 0x83, 0xd3, 0x1e, 0x05, 0xee, 0x05, 0x01, 0xff, 0xa1, 0x8d, 0x1b, 0x02, + 0xb7, 0x05, 0xd2, 0x19, 0xa4, 0xb1, 0x17, 0xe5, 0xd0, 0x06, 0x80, 0x8e, + 0x17, 0xa6, 0xdb, 0x15, 0xa7, 0xb5, 0x14, 0xa8, 0xfe, 0x11, 0x02, 0x80, + 0x20, 0xa6, 0x11, 0xab, 0x8f, 0x0f, 0xac, 0xa8, 0x0e, 0xad, 0xe0, 0x0d, + 0xae, 0xfe, 0x0b, 0x42, 0x60, 0x51, 0xc6, 0x06, 0x80, 0xe7, 0x0b, 0x43, + 0x72, 0xdc, 0x7e, 0x06, 0x80, 0x90, 0x0b, 0x43, 0x43, 0x14, 0x42, 0x06, + 0x80, 0xc9, 0x0a, 0xb2, 0x8c, 0x09, 0xb3, 0xb0, 0x07, 0xb4, 0xe1, 0x03, + 0xf5, 0xc7, 0x06, 0x80, 0xaf, 0x03, 0x42, 0x32, 0x00, 0xcb, 0x06, 0x80, + 0xf7, 0x02, 0x43, 0x8a, 0x8a, 0x48, 0x06, 0x80, 0x99, 0x02, 0xb9, 0x43, + 0x02, 0x59, 0x00, 0x01, 0xff, 0xe8, 0x38, 0x06, 0x80, 0x1c, 0x42, 0x9e, + 0x01, 0x32, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xb0, + 0xfe, 0x00, 0x4d, 0x5f, 0x03, 0xaf, 0xfe, 0x00, 0x55, 0x0b, 0x3f, 0xb2, + 0x08, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xc6, 0xfe, 0x00, 0xa9, + 0x06, 0x4b, 0xf6, 0x6d, 0xc8, 0xfe, 0x40, 0x4b, 0xb9, 0x16, 0xc7, 0xfe, + 0x00, 0x4c, 0x60, 0x03, 0xc5, 0xfe, 0x40, 0x42, 0x4e, 0x00, 0x4a, 0x06, + 0x80, 0x14, 0xf5, 0xc8, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0xf5, + 0x2c, 0xdc, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0xdb, 0xfb, 0x40, 0x80, 0x01, + 0xff, 0x46, 0xd6, 0x19, 0xd2, 0x06, 0x80, 0x75, 0x4a, 0xf5, 0x2c, 0xf2, + 0xfe, 0x00, 0xa9, 0x61, 0x4b, 0xf6, 0x6d, 0xf4, 0xfe, 0x00, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x4f, 0x2f, 0x6d, 0xc7, 0x0e, 0x01, 0x4b, 0x56, 0x00, + 0x26, 0x06, 0x80, 0x2c, 0x47, 0xd2, 0x34, 0xce, 0x06, 0x00, 0xb4, 0x01, + 0xff, 0x43, 0x90, 0x17, 0xcd, 0x06, 0x00, 0x4f, 0x3d, 0x6e, 0xd1, 0x06, + 0x00, 0x12, 0x28, 0x1e, 0x01, 0xff, 0x49, 0x3a, 0x1e, 0xa9, 0x08, 0x00, + 0x4b, 0x56, 0x00, 0xa8, 0x08, 0x00, 0x50, 0x56, 0x67, 0xba, 0x08, 0x40, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x8a, 0xfe, 0x00, 0xa9, 0x06, 0x4b, + 0xf6, 0x6d, 0x8c, 0xfe, 0x40, 0x4b, 0xb9, 0x16, 0x8b, 0xfe, 0x00, 0x4c, + 0x60, 0x03, 0x89, 0xfe, 0x40, 0x4b, 0xb9, 0x16, 0xf3, 0xfe, 0x00, 0x4c, + 0x60, 0x03, 0xf1, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xaf, + 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0xae, 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x1d, 0xdc, 0x15, 0x16, 0x4b, 0x56, 0x00, 0xd3, 0x06, 0xc0, 0x00, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xb1, 0xfb, 0x00, 0x4d, 0x5f, 0x03, + 0xb0, 0xfb, 0x40, 0x4a, 0x4b, 0xab, 0x7b, 0x07, 0x00, 0x48, 0x80, 0xcc, + 0x7a, 0x07, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xee, 0xfe, 0x00, + 0x4d, 0x5f, 0x03, 0xed, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, + 0x03, 0x0c, 0x32, 0x1d, 0xdc, 0x15, 0x22, 0x4b, 0x56, 0x00, 0x24, 0x06, + 0x80, 0x0c, 0x44, 0x22, 0x08, 0xc4, 0x06, 0x00, 0x4e, 0xf2, 0x0e, 0xca, + 0x06, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x86, 0xfe, 0x00, 0x4d, + 0x5f, 0x03, 0x85, 0xfe, 0x40, 0x4a, 0x4b, 0xab, 0x79, 0x07, 0x00, 0x48, + 0x80, 0xcc, 0x78, 0x07, 0x40, 0x45, 0x5c, 0x00, 0xcf, 0x06, 0x00, 0x46, + 0xc7, 0x1e, 0xab, 0x08, 0x40, 0x80, 0x22, 0xe8, 0xa4, 0x06, 0xc0, 0x00, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x6b, 0xfb, 0x00, 0xa9, 0x06, 0x4b, + 0xf6, 0x6d, 0x6d, 0xfb, 0x40, 0x4b, 0xb9, 0x16, 0x6c, 0xfb, 0x00, 0x4c, + 0x60, 0x03, 0x6a, 0xfb, 0x40, 0x4a, 0xf5, 0x2c, 0xdf, 0xfb, 0x00, 0x4d, + 0x5f, 0x03, 0xde, 0xfb, 0x40, 0x80, 0x11, 0x22, 0x56, 0x0c, 0x01, 0xff, + 0x4c, 0xb8, 0x16, 0xe8, 0xfb, 0x00, 0x4b, 0xf6, 0x6d, 0xe9, 0xfb, 0x40, + 0x4a, 0xf5, 0x2c, 0xd8, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0xd7, 0xfb, 0x00, + 0x50, 0x51, 0x00, 0x77, 0x06, 0xc0, 0x00, 0x4e, 0x5e, 0x03, 0xdd, 0xfb, + 0x40, 0x42, 0x18, 0x0a, 0x37, 0x06, 0x80, 0xf8, 0x02, 0x44, 0x92, 0x83, + 0x86, 0x06, 0x80, 0x9f, 0x02, 0x42, 0x4e, 0x00, 0x2a, 0x06, 0x80, 0x9a, + 0x01, 0xa8, 0x4d, 0x43, 0xb2, 0x0f, 0x79, 0x06, 0xc0, 0x00, 0x80, 0x24, + 0x42, 0x4e, 0x00, 0x7a, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0xf5, + 0x2c, 0x5f, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0xf6, 0x6d, 0x61, 0xfb, 0x40, + 0x4b, 0xb9, 0x16, 0x60, 0xfb, 0x00, 0x4c, 0x60, 0x03, 0x5e, 0xfb, 0x40, + 0x4a, 0xf5, 0x2c, 0x67, 0xfb, 0x00, 0xa9, 0x0c, 0x4b, 0xf6, 0x6d, 0x69, + 0xfb, 0x00, 0x4c, 0xff, 0x96, 0xc0, 0x08, 0x40, 0x4b, 0xb9, 0x16, 0x68, + 0xfb, 0x00, 0x4c, 0x60, 0x03, 0x66, 0xfb, 0x40, 0x42, 0x13, 0x00, 0x30, + 0x06, 0x80, 0x35, 0x42, 0x4e, 0x00, 0x2b, 0x06, 0x80, 0x11, 0x03, 0xe1, + 0x05, 0x01, 0xff, 0x44, 0xf9, 0x45, 0xc6, 0x0e, 0x01, 0x43, 0x4d, 0x00, + 0x86, 0x08, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x9a, 0xfe, 0x00, + 0xa9, 0x06, 0x4b, 0xf6, 0x6d, 0x9c, 0xfe, 0x40, 0x4b, 0xb9, 0x16, 0x9b, + 0xfe, 0x00, 0x4c, 0x60, 0x03, 0x99, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, + 0xf5, 0x2c, 0xac, 0xfe, 0x00, 0x4d, 0x5f, 0x03, 0xab, 0xfe, 0x40, 0x80, + 0x24, 0x42, 0x4e, 0x00, 0x7f, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, + 0xf5, 0x2c, 0x63, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0xf6, 0x6d, 0x65, 0xfb, + 0x40, 0x4b, 0xb9, 0x16, 0x64, 0xfb, 0x00, 0x4c, 0x60, 0x03, 0x62, 0xfb, + 0x40, 0x4a, 0xf5, 0x2c, 0x96, 0xfe, 0x00, 0xa9, 0x43, 0xad, 0x1f, 0x05, + 0x51, 0x00, 0x01, 0xff, 0x44, 0x22, 0x08, 0x7c, 0x06, 0x00, 0x06, 0x5d, + 0x07, 0x06, 0x5a, 0x3a, 0x22, 0x7d, 0x06, 0x40, 0x49, 0xba, 0xbf, 0xb8, + 0x08, 0x00, 0xf6, 0xbf, 0x08, 0x40, 0x46, 0xe0, 0xd9, 0x29, 0x06, 0x80, + 0x06, 0x4a, 0xf7, 0x6d, 0x98, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, + 0x2c, 0x94, 0xfe, 0x00, 0x44, 0x09, 0xf0, 0xc3, 0x06, 0x00, 0x4d, 0x5f, + 0x03, 0x93, 0xfe, 0x40, 0x4b, 0xb9, 0x16, 0x97, 0xfe, 0x00, 0x4c, 0x60, + 0x03, 0x95, 0xfe, 0x40, 0x80, 0x24, 0x42, 0x4e, 0x00, 0x87, 0x06, 0xc0, + 0x00, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x7f, 0xfb, 0x00, 0xa9, 0x06, + 0x4b, 0xf6, 0x6d, 0x81, 0xfb, 0x40, 0x4b, 0xb9, 0x16, 0x80, 0xfb, 0x00, + 0x4c, 0x60, 0x03, 0x7e, 0xfb, 0x40, 0x4a, 0xf5, 0x2c, 0x7b, 0xfb, 0x00, + 0xa9, 0x17, 0x4b, 0xf6, 0x6d, 0x7d, 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x49, 0x3a, 0x1e, 0xbf, 0x06, 0x00, 0x47, 0xd2, 0x34, 0xc1, 0x08, + 0x40, 0x4b, 0xb9, 0x16, 0x7c, 0xfb, 0x00, 0x4c, 0x60, 0x03, 0x7a, 0xfb, + 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xc2, 0xfe, 0x00, 0xa9, 0x35, + 0x4b, 0xf6, 0x6d, 0xc4, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, + 0x9f, 0x12, 0x8b, 0x08, 0x00, 0xb4, 0x01, 0xff, 0x0a, 0xae, 0x12, 0x11, + 0x08, 0xf2, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xa3, 0x08, 0x00, 0x50, + 0x4e, 0x2c, 0xc3, 0x0e, 0x41, 0x45, 0x5c, 0x00, 0x9f, 0x06, 0x00, 0x45, + 0x20, 0x07, 0x8c, 0x08, 0x40, 0x4b, 0xb9, 0x16, 0xc3, 0xfe, 0x00, 0x4c, + 0x60, 0x03, 0xc1, 0xfe, 0x40, 0x42, 0xe8, 0x01, 0x35, 0x06, 0x80, 0x99, + 0x01, 0x43, 0xc4, 0x09, 0x33, 0x06, 0x80, 0x3c, 0x44, 0x4c, 0xdb, 0x34, + 0x06, 0x80, 0x12, 0x4b, 0xb3, 0xa3, 0xb1, 0x08, 0x00, 0x4f, 0x70, 0x06, + 0x70, 0x06, 0x00, 0x48, 0x68, 0xcc, 0xaa, 0x06, 0x40, 0x80, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0xb6, 0xfe, 0x00, 0xa9, 0x0c, 0x4b, 0xf6, 0x6d, 0xb8, + 0xfe, 0x00, 0x4e, 0xad, 0x7e, 0xfa, 0x06, 0x40, 0x4b, 0xb9, 0x16, 0xb7, + 0xfe, 0x00, 0x4c, 0x60, 0x03, 0xb5, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, + 0xf5, 0x2c, 0xb2, 0xfe, 0x00, 0xa9, 0x3f, 0x4b, 0xf6, 0x6d, 0xb4, 0xfe, + 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x2a, 0x2e, 0x9a, 0x06, 0x00, + 0x66, 0xd9, 0x06, 0x7d, 0x07, 0x00, 0x4f, 0xd1, 0x46, 0x5c, 0x07, 0x00, + 0x4a, 0x10, 0x3f, 0x7e, 0x07, 0x00, 0x64, 0x03, 0x0a, 0x70, 0x07, 0x00, + 0xb4, 0x01, 0xff, 0x4f, 0x3d, 0x6e, 0x9b, 0x06, 0x80, 0x06, 0x58, 0x2e, + 0x2c, 0x6d, 0x07, 0x40, 0x55, 0xa8, 0x12, 0x9c, 0x06, 0x40, 0x4b, 0xb9, + 0x16, 0xb3, 0xfe, 0x00, 0x4c, 0x60, 0x03, 0xb1, 0xfe, 0x40, 0x80, 0x01, + 0xff, 0x4a, 0xf5, 0x2c, 0xba, 0xfe, 0x00, 0xa9, 0x21, 0x4b, 0xf6, 0x6d, + 0xbc, 0xfe, 0x00, 0x06, 0x29, 0x06, 0x01, 0xff, 0x0a, 0xae, 0x12, 0x06, + 0x4d, 0x06, 0x0f, 0x9d, 0x06, 0x40, 0x45, 0x5c, 0x00, 0x9e, 0x06, 0x00, + 0x45, 0x20, 0x07, 0xaf, 0x08, 0x40, 0x4b, 0xb9, 0x16, 0xbb, 0xfe, 0x00, + 0x4c, 0x60, 0x03, 0xb9, 0xfe, 0x40, 0x42, 0x4e, 0x00, 0x31, 0x06, 0x80, + 0x40, 0x44, 0xf9, 0x45, 0xbb, 0x06, 0x80, 0x1c, 0x4b, 0x90, 0xa0, 0xac, + 0x08, 0x00, 0x43, 0x37, 0x52, 0x91, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0x8d, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0x8c, 0xfb, 0x40, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xa1, 0xfb, 0x00, 0xa9, 0x06, 0x4b, + 0xf6, 0x6d, 0xa3, 0xfb, 0x40, 0x4b, 0xb9, 0x16, 0xa2, 0xfb, 0x00, 0x4c, + 0x60, 0x03, 0xa0, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xae, + 0xfe, 0x00, 0x4d, 0x5f, 0x03, 0xad, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x49, 0x9f, 0x12, 0x94, 0x06, 0x80, 0x52, 0x4f, 0xd1, 0x46, 0x99, + 0x06, 0x00, 0x4b, 0x56, 0x00, 0x6c, 0x07, 0x00, 0x4a, 0x10, 0x3f, 0xef, + 0x06, 0x00, 0x44, 0x42, 0x85, 0xaa, 0x08, 0x00, 0x44, 0x22, 0x08, 0x93, + 0x06, 0x00, 0xb3, 0x11, 0x09, 0xf1, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, + 0x97, 0x06, 0x00, 0x50, 0x36, 0x2c, 0x6b, 0x07, 0x40, 0x05, 0x5e, 0x07, + 0x06, 0x45, 0x53, 0x05, 0x5b, 0x07, 0x40, 0x5e, 0x09, 0x0a, 0x71, 0x07, + 0x00, 0x4a, 0x5c, 0x67, 0xb9, 0x08, 0x00, 0xf6, 0x92, 0x06, 0xc0, 0x00, + 0x46, 0x1f, 0x07, 0x95, 0x06, 0x40, 0x4e, 0x35, 0x1e, 0x96, 0x06, 0x40, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xd6, 0xfe, 0x00, 0xa9, 0x28, 0x4b, + 0xf6, 0x6d, 0xd8, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x03, + 0x0c, 0x06, 0x50, 0xad, 0x12, 0xa8, 0x06, 0x40, 0x45, 0x5c, 0x00, 0xa7, + 0x06, 0x00, 0x45, 0x20, 0x07, 0xa5, 0x08, 0xc0, 0x00, 0x52, 0x0f, 0x4f, + 0xb5, 0x08, 0x40, 0x4b, 0xb9, 0x16, 0xd7, 0xfe, 0x00, 0x4c, 0x60, 0x03, + 0xd5, 0xfe, 0x40, 0x80, 0x24, 0x42, 0x4e, 0x00, 0xa6, 0x06, 0xc0, 0x00, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x6f, 0xfb, 0x00, 0xa9, 0x06, 0x4b, + 0xf6, 0x6d, 0x71, 0xfb, 0x40, 0x4b, 0xb9, 0x16, 0x70, 0xfb, 0x00, 0x4c, + 0x60, 0x03, 0x6e, 0xfb, 0x40, 0x4a, 0xf5, 0x2c, 0x57, 0xfb, 0x00, 0xa9, + 0x15, 0x4b, 0xf6, 0x6d, 0x59, 0xfb, 0x00, 0x0b, 0xff, 0x96, 0x01, 0xff, + 0x4a, 0xcb, 0xad, 0xb7, 0x08, 0x00, 0xf6, 0xbe, 0x08, 0x40, 0x4b, 0xb9, + 0x16, 0x58, 0xfb, 0x00, 0x4c, 0x60, 0x03, 0x56, 0xfb, 0x40, 0x80, 0x01, + 0xff, 0x4a, 0xf5, 0x2c, 0xda, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0xd9, 0xfb, + 0x40, 0xe7, 0xad, 0x06, 0x80, 0x99, 0x01, 0x43, 0xcd, 0x02, 0x46, 0x06, + 0x80, 0x24, 0x43, 0x4d, 0x00, 0x83, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0x77, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0xf6, 0x6d, 0x79, + 0xfb, 0x40, 0x4b, 0xb9, 0x16, 0x78, 0xfb, 0x00, 0x4c, 0x60, 0x03, 0x76, + 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xe6, 0xfe, 0x00, 0x46, + 0xfe, 0x45, 0xba, 0x06, 0x80, 0x4f, 0xa9, 0x41, 0x4b, 0xf6, 0x6d, 0xe8, + 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0x9f, 0x12, 0xb9, 0x06, + 0x00, 0x50, 0xc9, 0x34, 0x89, 0x08, 0x00, 0x44, 0x22, 0x08, 0xbc, 0x06, + 0x80, 0x1d, 0x06, 0x5d, 0x07, 0x0f, 0xb4, 0x01, 0xff, 0x4f, 0xae, 0x12, + 0xbd, 0x06, 0x00, 0x4d, 0x06, 0x0f, 0x67, 0x07, 0x40, 0x43, 0x17, 0x0a, + 0x68, 0x07, 0x00, 0xf6, 0x69, 0x07, 0x40, 0x46, 0x5b, 0x00, 0x8f, 0x08, + 0x40, 0x4b, 0xb9, 0x16, 0xe7, 0xfe, 0x00, 0x4c, 0x60, 0x03, 0xe5, 0xfe, + 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x9f, 0xfb, 0x00, 0x4d, 0x5f, + 0x03, 0x9e, 0xfb, 0x40, 0x80, 0x24, 0x43, 0xe7, 0x9c, 0xb1, 0x06, 0xc0, + 0x00, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x9b, 0xfb, 0x00, 0xa9, 0x06, + 0x4b, 0xf6, 0x6d, 0x9d, 0xfb, 0x40, 0x4b, 0xb9, 0x16, 0x9c, 0xfb, 0x00, + 0x4c, 0x60, 0x03, 0x9a, 0xfb, 0x40, 0x4a, 0xf5, 0x2c, 0xd4, 0xfb, 0x00, + 0xa9, 0x06, 0x4b, 0xf6, 0x6d, 0xd6, 0xfb, 0x40, 0x4b, 0xb9, 0x16, 0xd5, + 0xfb, 0x00, 0x4c, 0x60, 0x03, 0xd3, 0xfb, 0x40, 0x43, 0xba, 0x00, 0x1c, + 0x06, 0x00, 0x43, 0x4b, 0x18, 0x45, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0xe2, 0xfe, 0x00, 0xa9, 0x21, 0x4b, 0xf6, 0x6d, 0xe4, + 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x03, 0x0c, 0x06, 0x50, + 0xad, 0x12, 0xa7, 0x08, 0x40, 0x45, 0x5c, 0x00, 0x65, 0x07, 0x00, 0x45, + 0x20, 0x07, 0x66, 0x07, 0x40, 0x4b, 0xb9, 0x16, 0xe3, 0xfe, 0x00, 0x4c, + 0x60, 0x03, 0xe1, 0xfe, 0x40, 0x42, 0x57, 0x00, 0x44, 0x06, 0x80, 0x06, + 0x47, 0x50, 0xd4, 0xad, 0x08, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, + 0xde, 0xfe, 0x00, 0xa9, 0x40, 0x4b, 0xf6, 0x6d, 0xe0, 0xfe, 0x00, 0x05, + 0x51, 0x00, 0x01, 0xff, 0x43, 0x16, 0x00, 0x6a, 0x07, 0x00, 0x02, 0x3b, + 0x01, 0x1f, 0x06, 0x5d, 0x07, 0x11, 0x0b, 0xad, 0x12, 0x01, 0xff, 0x45, + 0x5c, 0x00, 0xb7, 0x06, 0x00, 0x45, 0x20, 0x07, 0xb8, 0x06, 0x40, 0x57, + 0x44, 0x2d, 0xc7, 0x08, 0x00, 0xf6, 0xb5, 0x06, 0x40, 0x47, 0x3c, 0x1e, + 0xb6, 0x06, 0x00, 0x48, 0x63, 0xa9, 0xa6, 0x08, 0x40, 0x4b, 0xb9, 0x16, + 0xdf, 0xfe, 0x00, 0x4c, 0x60, 0x03, 0xdd, 0xfe, 0x40, 0xa1, 0xb4, 0x01, + 0x44, 0xa1, 0xef, 0xa9, 0x06, 0x80, 0x55, 0x43, 0x26, 0x21, 0x2e, 0x06, + 0x80, 0x31, 0x07, 0x46, 0x00, 0x01, 0xff, 0x42, 0x60, 0x51, 0xc5, 0x06, + 0x80, 0x16, 0x42, 0x2a, 0x4e, 0xc9, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0xe3, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0xe2, 0xfb, 0x40, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xe1, 0xfb, 0x00, 0x4d, 0x5f, 0x03, + 0xe0, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xa6, 0xfe, 0x00, + 0xa9, 0x06, 0x4b, 0xf6, 0x6d, 0xa8, 0xfe, 0x40, 0x4b, 0xb9, 0x16, 0xa7, + 0xfe, 0x00, 0x4c, 0x60, 0x03, 0xa5, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, + 0xf5, 0x2c, 0x8f, 0xfb, 0x00, 0xa9, 0x41, 0x4b, 0xf6, 0x6d, 0x91, 0xfb, + 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0x3a, 0x1e, 0x62, 0x07, 0x00, + 0x47, 0xd2, 0x34, 0xc2, 0x08, 0x00, 0xb4, 0x01, 0xff, 0x0a, 0xae, 0x12, + 0x11, 0x08, 0xf2, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x3b, 0x06, 0x00, + 0x50, 0x4e, 0x2c, 0x8d, 0x08, 0x40, 0x45, 0x5c, 0x00, 0x63, 0x07, 0x00, + 0x45, 0x20, 0x07, 0x3c, 0x06, 0x00, 0x56, 0x3f, 0x36, 0x64, 0x07, 0x40, + 0x4b, 0xb9, 0x16, 0x90, 0xfb, 0x00, 0x4c, 0x60, 0x03, 0x8e, 0xfb, 0x40, + 0xe6, 0x43, 0x06, 0x80, 0x06, 0x4a, 0xff, 0xb0, 0x20, 0x06, 0x40, 0x80, + 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xda, 0xfe, 0x00, 0xa9, 0x3b, 0x4b, 0xf6, + 0x6d, 0xdc, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x03, 0x0c, + 0x20, 0x44, 0x22, 0x08, 0xab, 0x06, 0x00, 0xb4, 0x01, 0xff, 0x4f, 0x3d, + 0x6e, 0xae, 0x06, 0x00, 0x08, 0xf2, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, + 0x7f, 0x07, 0x00, 0x50, 0x4e, 0x2c, 0xc4, 0x0e, 0x41, 0x45, 0x5c, 0x00, + 0xac, 0x06, 0x00, 0x45, 0x20, 0x07, 0xb4, 0x08, 0x40, 0x4b, 0xb9, 0x16, + 0xdb, 0xfe, 0x00, 0x4c, 0x60, 0x03, 0xd9, 0xfe, 0x40, 0x42, 0xb5, 0x05, + 0x2c, 0x06, 0x80, 0x14, 0xe8, 0x98, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0x8b, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0x8a, 0xfb, 0x40, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x9e, 0xfe, 0x00, 0xa9, 0x21, 0x4b, + 0xf6, 0x6d, 0xa0, 0xfe, 0x00, 0x06, 0x29, 0x06, 0x01, 0xff, 0x0a, 0xae, + 0x12, 0x06, 0x4d, 0xf3, 0x0e, 0xa2, 0x08, 0x40, 0x45, 0x5c, 0x00, 0xc5, + 0x08, 0x00, 0x45, 0x20, 0x07, 0xc6, 0x08, 0x40, 0x4b, 0xb9, 0x16, 0x9f, + 0xfe, 0x00, 0x4c, 0x60, 0x03, 0x9d, 0xfe, 0x40, 0xa1, 0xaf, 0x01, 0x42, + 0x4e, 0x00, 0x47, 0x06, 0x80, 0x1c, 0x49, 0x11, 0xba, 0x74, 0x06, 0xc0, + 0x00, 0x80, 0x01, 0xff, 0x44, 0x67, 0x00, 0x75, 0x06, 0x00, 0x43, 0x8a, + 0x8a, 0x76, 0x06, 0x00, 0x43, 0x4d, 0x00, 0x78, 0x06, 0x40, 0x80, 0x01, + 0xff, 0x4b, 0x05, 0x9b, 0xbe, 0x06, 0x80, 0x65, 0x4a, 0xf5, 0x2c, 0xea, + 0xfe, 0x00, 0x44, 0x09, 0xf0, 0xc1, 0x06, 0x80, 0x35, 0xa9, 0x27, 0x4b, + 0xf6, 0x6d, 0xec, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0x10, + 0x3f, 0xff, 0x06, 0x00, 0x49, 0xa0, 0xc1, 0xc0, 0x06, 0xc0, 0x00, 0x80, + 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xa5, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0xa4, + 0xfb, 0x40, 0x4b, 0xb9, 0x16, 0xeb, 0xfe, 0x00, 0x4c, 0x60, 0x03, 0xe9, + 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xa7, 0xfb, 0x00, 0xa9, + 0x0c, 0x4b, 0xf6, 0x6d, 0xa9, 0xfb, 0x00, 0x50, 0x51, 0x00, 0xc2, 0x06, + 0x40, 0x4b, 0xb9, 0x16, 0xa8, 0xfb, 0x00, 0x4c, 0x60, 0x03, 0xa6, 0xfb, + 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xab, 0xfb, 0x00, 0xa9, 0x06, + 0x4b, 0xf6, 0x6d, 0xad, 0xfb, 0x40, 0x4b, 0xb9, 0x16, 0xac, 0xfb, 0x00, + 0x4c, 0x60, 0x03, 0xaa, 0xfb, 0x40, 0xe8, 0x2d, 0x06, 0x80, 0x0d, 0x43, + 0x58, 0x00, 0x21, 0x06, 0xc0, 0x00, 0x4e, 0x5e, 0x03, 0x80, 0xfe, 0x40, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xa2, 0xfe, 0x00, 0xa9, 0x59, 0x4b, + 0xf6, 0x6d, 0xa4, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x66, 0xff, + 0x06, 0x7c, 0x07, 0x00, 0x4b, 0x56, 0x00, 0x81, 0x06, 0x00, 0x56, 0xdf, + 0x34, 0x8a, 0x08, 0x00, 0x18, 0x03, 0x0a, 0x24, 0xb4, 0x01, 0xff, 0x0a, + 0xae, 0x12, 0x11, 0x08, 0xf2, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x57, + 0x07, 0x00, 0x4e, 0x59, 0x7e, 0x82, 0x06, 0x40, 0x45, 0x5c, 0x00, 0x85, + 0x06, 0x00, 0x56, 0x3f, 0x36, 0x58, 0x07, 0x40, 0xa1, 0x06, 0x45, 0x20, + 0x07, 0x6e, 0x07, 0x40, 0x44, 0x5d, 0x00, 0x72, 0x07, 0x00, 0x4b, 0x1c, + 0x0a, 0x6f, 0x07, 0x40, 0x4b, 0xb9, 0x16, 0xa3, 0xfe, 0x00, 0x4c, 0x60, + 0x03, 0xa1, 0xfe, 0x40, 0x42, 0x44, 0x14, 0xaf, 0x06, 0x80, 0x5f, 0x44, + 0x66, 0x9c, 0x3a, 0x06, 0x80, 0x2a, 0x43, 0x12, 0x20, 0xc8, 0x08, 0x00, + 0x43, 0xa0, 0xef, 0xb3, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0xf5, + 0x2c, 0x97, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0xf6, 0x6d, 0x99, 0xfb, 0x40, + 0x4b, 0xb9, 0x16, 0x98, 0xfb, 0x00, 0x4c, 0x60, 0x03, 0x96, 0xfb, 0x40, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xce, 0xfe, 0x00, 0xa9, 0x17, 0x4b, + 0xf6, 0x6d, 0xd0, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0x9f, + 0x12, 0xfc, 0x06, 0x00, 0x50, 0xad, 0x12, 0xc3, 0x08, 0x40, 0x4b, 0xb9, + 0x16, 0xcf, 0xfe, 0x00, 0x4c, 0x60, 0x03, 0xcd, 0xfe, 0x40, 0x80, 0x01, + 0xff, 0x4a, 0xf5, 0x2c, 0x93, 0xfb, 0x00, 0xa9, 0x26, 0x4b, 0xf6, 0x6d, + 0x95, 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4f, 0xe2, 0x6e, 0xb0, + 0x08, 0x00, 0x44, 0x22, 0x08, 0xb0, 0x06, 0x00, 0xb4, 0x01, 0xff, 0x4f, + 0xae, 0x12, 0xb4, 0x06, 0x00, 0x4d, 0x06, 0x0f, 0xb2, 0x06, 0x40, 0x4b, + 0xb9, 0x16, 0x94, 0xfb, 0x00, 0x4c, 0x60, 0x03, 0x92, 0xfb, 0x40, 0x48, + 0x90, 0xc3, 0xcc, 0x06, 0x80, 0x59, 0x42, 0x4e, 0x00, 0x41, 0x06, 0xc0, + 0x00, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xd2, 0xfe, 0x00, 0xa9, 0x3b, + 0x4b, 0xf6, 0x6d, 0xd4, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, + 0x03, 0x0c, 0x19, 0xb4, 0x01, 0xff, 0x0a, 0xae, 0x12, 0x06, 0x4d, 0x06, + 0x0f, 0x60, 0x07, 0x40, 0x45, 0x20, 0x07, 0xa5, 0x06, 0x00, 0x56, 0x3f, + 0x36, 0x61, 0x07, 0x40, 0x45, 0x20, 0x07, 0xa3, 0x06, 0x80, 0x06, 0x4b, + 0xb4, 0x9f, 0xa2, 0x06, 0x40, 0x55, 0xa8, 0x12, 0xa4, 0x08, 0x40, 0x4b, + 0xb9, 0x16, 0xd3, 0xfe, 0x00, 0x4c, 0x60, 0x03, 0xd1, 0xfe, 0x40, 0x80, + 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xfd, 0xfb, 0x00, 0xa9, 0x39, 0x4b, 0xf6, + 0x6d, 0xff, 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x1c, 0xd9, 0x06, + 0x15, 0x4a, 0x10, 0x3f, 0x3d, 0x06, 0x00, 0xb4, 0x01, 0xff, 0x4f, 0xae, + 0x12, 0x3f, 0x06, 0x00, 0x4d, 0xf3, 0x0e, 0x3e, 0x06, 0x40, 0x4a, 0x1b, + 0x07, 0x77, 0x07, 0x00, 0xb4, 0x01, 0xff, 0x4a, 0x4b, 0xab, 0x76, 0x07, + 0x00, 0x48, 0x80, 0xcc, 0x75, 0x07, 0x40, 0x4b, 0xb9, 0x16, 0xfe, 0xfb, + 0x00, 0x4c, 0x60, 0x03, 0xfc, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, + 0x2c, 0xe5, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0xf6, 0x6d, 0xe7, 0xfb, 0x40, + 0x4b, 0xb9, 0x16, 0xe6, 0xfb, 0x00, 0x4c, 0x60, 0x03, 0xe4, 0xfb, 0x40, + 0xa1, 0x7e, 0x02, 0xf0, 0x10, 0x50, 0x07, 0x91, 0x41, 0x3a, 0x42, 0x1f, + 0x01, 0x8e, 0x06, 0x80, 0x24, 0x43, 0x4d, 0x00, 0x84, 0x06, 0xc0, 0x00, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x73, 0xfb, 0x00, 0xa9, 0x06, 0x4b, + 0xf6, 0x6d, 0x75, 0xfb, 0x40, 0x4b, 0xb9, 0x16, 0x74, 0xfb, 0x00, 0x4c, + 0x60, 0x03, 0x72, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x87, + 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0x86, 0xfb, 0x40, 0x43, 0xa3, 0x8c, 0x6e, + 0x06, 0x00, 0x43, 0xd6, 0xb8, 0xa1, 0x06, 0x00, 0x43, 0x43, 0x14, 0x6f, + 0x06, 0x40, 0x43, 0x22, 0x00, 0x8d, 0x06, 0x80, 0x14, 0xec, 0x88, 0x06, + 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x89, 0xfb, 0x00, 0x4d, + 0x5f, 0x03, 0x88, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x83, + 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0x82, 0xfb, 0x40, 0xe4, 0x36, 0x06, 0x80, + 0x76, 0x43, 0x22, 0x00, 0x8c, 0x06, 0x80, 0x60, 0xec, 0x2f, 0x06, 0xc0, + 0x00, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xaa, 0xfe, 0x00, 0x4d, 0x5f, + 0x03, 0xa9, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0x9f, 0x12, + 0x8a, 0x06, 0x80, 0x3a, 0x4f, 0xd1, 0x46, 0x90, 0x06, 0x00, 0x09, 0x5e, + 0x23, 0x26, 0x44, 0x22, 0x08, 0x89, 0x06, 0x00, 0xb4, 0x01, 0xff, 0x0a, + 0xae, 0x12, 0x0d, 0x58, 0x46, 0x2c, 0xc2, 0x0e, 0xc1, 0x00, 0x4e, 0x53, + 0x75, 0x59, 0x07, 0x40, 0x4f, 0x45, 0x22, 0x8f, 0x06, 0x00, 0x45, 0x20, + 0x07, 0xae, 0x08, 0x40, 0x4d, 0xe8, 0x34, 0x5a, 0x07, 0x00, 0xf6, 0xee, + 0x06, 0x40, 0x4e, 0x53, 0x75, 0x8b, 0x06, 0x40, 0x80, 0x01, 0xff, 0x4a, + 0xf5, 0x2c, 0x85, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0x84, 0xfb, 0x40, 0x80, + 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xbe, 0xfe, 0x00, 0xa9, 0x0c, 0x4b, 0xf6, + 0x6d, 0xc0, 0xfe, 0x00, 0x4e, 0xad, 0x7e, 0xfb, 0x06, 0x40, 0x4b, 0xb9, + 0x16, 0xbf, 0xfe, 0x00, 0x4c, 0x60, 0x03, 0xbd, 0xfe, 0x40, 0x42, 0x4e, + 0x00, 0x7b, 0x06, 0x80, 0x91, 0x01, 0xe8, 0x28, 0x06, 0xc0, 0x00, 0x80, + 0x24, 0x42, 0x4e, 0x00, 0x80, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, + 0xf5, 0x2c, 0x5b, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0xf6, 0x6d, 0x5d, 0xfb, + 0x40, 0x4b, 0xb9, 0x16, 0x5c, 0xfb, 0x00, 0x4c, 0x60, 0x03, 0x5a, 0xfb, + 0x40, 0x4a, 0xf5, 0x2c, 0x90, 0xfe, 0x00, 0xa9, 0x52, 0x4b, 0xf6, 0x6d, + 0x92, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x5e, 0x9f, 0x12, 0x51, + 0x07, 0x00, 0x4b, 0x56, 0x00, 0xa1, 0x08, 0x00, 0x56, 0xdf, 0x34, 0x55, + 0x07, 0x00, 0x06, 0x5d, 0x07, 0x20, 0xb4, 0x01, 0xff, 0x0a, 0xae, 0x12, + 0x06, 0x5b, 0x28, 0x1e, 0x54, 0x07, 0x40, 0x52, 0x5d, 0x52, 0x50, 0x07, + 0x00, 0x56, 0x3f, 0x36, 0x52, 0x07, 0xc0, 0x00, 0x53, 0x60, 0x26, 0x53, + 0x07, 0x40, 0x4a, 0xcb, 0xad, 0xb6, 0x08, 0x00, 0xf6, 0x56, 0x07, 0xc0, + 0x00, 0x46, 0x1f, 0x07, 0xa0, 0x08, 0x40, 0x4b, 0xb9, 0x16, 0x91, 0xfe, + 0x00, 0x4c, 0x60, 0x03, 0x8f, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, + 0x2c, 0x53, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0xf6, 0x6d, 0x55, 0xfb, 0x40, + 0x4b, 0xb9, 0x16, 0x54, 0xfb, 0x00, 0x4c, 0x60, 0x03, 0x52, 0xfb, 0x40, + 0xe5, 0xd5, 0x06, 0x00, 0x07, 0x48, 0xc6, 0x9c, 0x03, 0x42, 0x9e, 0x01, + 0x39, 0x06, 0x80, 0xcb, 0x02, 0x43, 0x68, 0x00, 0x27, 0x06, 0xc0, 0x00, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x8e, 0xfe, 0x00, 0x4d, 0x5f, 0x03, + 0x8d, 0xfe, 0x00, 0x47, 0x6c, 0x00, 0x49, 0x06, 0x80, 0x9e, 0x02, 0xb7, + 0x01, 0xff, 0x44, 0xf3, 0xa4, 0x71, 0x06, 0x80, 0x84, 0x02, 0x04, 0x52, + 0x00, 0x01, 0xff, 0x09, 0x69, 0xb6, 0x8b, 0x01, 0x49, 0x3a, 0x1e, 0x7a, + 0x08, 0x00, 0x1d, 0xdc, 0x15, 0x75, 0x06, 0x56, 0x00, 0x45, 0x52, 0x59, + 0x53, 0x73, 0x08, 0x00, 0x4b, 0xb3, 0x91, 0x22, 0x06, 0x80, 0x29, 0x53, + 0x9c, 0x4c, 0x72, 0x08, 0x80, 0x11, 0x0b, 0xa6, 0x68, 0x01, 0xff, 0x45, + 0x5c, 0x00, 0x72, 0x06, 0x00, 0x45, 0x20, 0x07, 0x73, 0x06, 0x40, 0x05, + 0x19, 0x00, 0x01, 0xff, 0x49, 0x3a, 0x1e, 0x7c, 0x08, 0x00, 0x49, 0x55, + 0xbb, 0x7f, 0x08, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x82, 0xfe, + 0x00, 0x4d, 0x5f, 0x03, 0x81, 0xfe, 0x40, 0x45, 0x5c, 0x00, 0x23, 0x06, + 0x80, 0x16, 0x45, 0x20, 0x07, 0x25, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0x88, 0xfe, 0x00, 0x4d, 0x5f, 0x03, 0x87, 0xfe, 0x40, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x84, 0xfe, 0x00, 0x4d, 0x5f, 0x03, + 0x83, 0xfe, 0x40, 0x4a, 0x4b, 0xab, 0x74, 0x07, 0x00, 0x48, 0x80, 0xcc, + 0x73, 0x07, 0x40, 0x52, 0x9b, 0x50, 0x75, 0x08, 0x80, 0x57, 0x45, 0xe7, + 0x73, 0x70, 0x08, 0x00, 0x45, 0xa8, 0x50, 0x74, 0x08, 0x00, 0x05, 0xc3, + 0x00, 0x3b, 0xb2, 0x18, 0x4f, 0xdd, 0x73, 0x71, 0x08, 0xc0, 0x00, 0x05, + 0x19, 0x00, 0x01, 0xff, 0x49, 0x3a, 0x1e, 0x7b, 0x08, 0x00, 0x49, 0x55, + 0xbb, 0x7e, 0x08, 0x40, 0x05, 0xc9, 0x00, 0x11, 0x09, 0x92, 0xb0, 0x01, + 0xff, 0x45, 0x5c, 0x00, 0x76, 0x08, 0x00, 0x45, 0x20, 0x07, 0x79, 0x08, + 0x40, 0x45, 0x56, 0x00, 0x81, 0x08, 0x00, 0x49, 0x5b, 0x58, 0x77, 0x08, + 0x40, 0x45, 0x56, 0x00, 0x82, 0x08, 0x00, 0x49, 0x5b, 0x58, 0x78, 0x08, + 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x49, 0x3a, 0x1e, 0x7d, 0x08, 0x00, + 0x49, 0x55, 0xbb, 0x80, 0x08, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, + 0x51, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0x50, 0xfb, 0x40, 0x80, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0xf0, 0xfe, 0x00, 0x4d, 0x5f, 0x03, 0xef, 0xfe, 0x40, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xca, 0xfe, 0x00, 0xa9, 0x32, 0x4b, + 0xf6, 0x6d, 0xcc, 0xfe, 0x00, 0x06, 0x29, 0x06, 0x01, 0xff, 0x0a, 0xae, + 0x12, 0x11, 0x08, 0xf2, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x5d, 0x07, + 0x00, 0x50, 0x36, 0x2c, 0x5f, 0x07, 0x40, 0x45, 0x5c, 0x00, 0xa0, 0x06, + 0x00, 0x45, 0x20, 0x07, 0xb3, 0x08, 0x00, 0x58, 0xae, 0x2a, 0x5e, 0x07, + 0x40, 0x4b, 0xb9, 0x16, 0xcb, 0xfe, 0x00, 0x4c, 0x60, 0x03, 0xc9, 0xfe, + 0x40, 0x43, 0xd6, 0xb8, 0xbb, 0x08, 0x00, 0x44, 0xf9, 0x45, 0xbd, 0x08, + 0x00, 0x43, 0x43, 0x14, 0xbc, 0x08, 0xc0, 0x00, 0x56, 0xa3, 0x32, 0xc4, + 0x08, 0x40, 0x45, 0x5c, 0x00, 0xf7, 0x08, 0x00, 0x45, 0x20, 0x07, 0xf9, + 0x08, 0x40, 0x4c, 0xc5, 0x2c, 0xd1, 0x08, 0x00, 0x0a, 0x91, 0xb0, 0x01, + 0xff, 0x45, 0x5c, 0x00, 0xce, 0x08, 0x00, 0x45, 0x20, 0x07, 0xcf, 0x08, + 0x00, 0x53, 0x88, 0x4a, 0xd2, 0x08, 0x40, 0x80, 0x0d, 0x43, 0xf9, 0x0a, + 0x4d, 0x06, 0xc0, 0x00, 0x4e, 0x5e, 0x03, 0x74, 0xfe, 0x40, 0x4d, 0x5f, + 0x03, 0x7a, 0xfe, 0x00, 0x4b, 0xf6, 0x6d, 0x7b, 0xfe, 0x00, 0x4e, 0xad, + 0x7e, 0xf6, 0x08, 0x40, 0x53, 0x0d, 0x4b, 0x9f, 0x08, 0x00, 0x04, 0x58, + 0x00, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x54, 0x06, 0x00, 0x45, 0x20, 0x07, + 0x55, 0x06, 0x40, 0x44, 0x74, 0x0f, 0x4e, 0x06, 0x80, 0x12, 0x50, 0x46, + 0x64, 0x6d, 0x06, 0x00, 0x4e, 0x5b, 0x7a, 0x02, 0x06, 0x00, 0x48, 0x82, + 0x16, 0xd4, 0x06, 0x40, 0x80, 0x0d, 0x43, 0xf9, 0x0a, 0x4b, 0x06, 0xc0, + 0x00, 0x4e, 0x5e, 0x03, 0x70, 0xfe, 0x40, 0x4d, 0x5f, 0x03, 0x76, 0xfe, + 0x00, 0x4b, 0xf6, 0x6d, 0x77, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, + 0x49, 0x3a, 0x1e, 0xf5, 0x08, 0x00, 0x44, 0x22, 0x08, 0xf4, 0x08, 0x00, + 0x48, 0x1f, 0x0a, 0x5e, 0x06, 0x40, 0x0c, 0x37, 0x92, 0x11, 0x06, 0x41, + 0x05, 0x01, 0xff, 0x44, 0xaa, 0x4a, 0xdd, 0x06, 0x00, 0x49, 0xbd, 0x62, + 0x1d, 0x06, 0x40, 0x49, 0x48, 0x0b, 0xeb, 0x06, 0x00, 0x48, 0xf8, 0xc7, + 0xea, 0x06, 0x40, 0xa1, 0x2c, 0x50, 0x86, 0x62, 0x6b, 0x06, 0x00, 0x53, + 0x9b, 0x4a, 0xe2, 0x08, 0x00, 0x05, 0x3c, 0x01, 0x01, 0xff, 0x80, 0x06, + 0x47, 0x28, 0xd0, 0x9e, 0x08, 0x40, 0x55, 0xd0, 0x3d, 0xfb, 0x08, 0x80, + 0x06, 0x52, 0x6b, 0x31, 0xfa, 0x0e, 0x41, 0x49, 0x75, 0x3b, 0xfc, 0x08, + 0x40, 0x43, 0x15, 0x05, 0x4f, 0x06, 0x80, 0x06, 0x4c, 0xa3, 0x95, 0x0d, + 0x06, 0x40, 0x80, 0x0d, 0x43, 0xf9, 0x0a, 0x4c, 0x06, 0xc0, 0x00, 0x4e, + 0x5e, 0x03, 0x72, 0xfe, 0x40, 0x4d, 0x5f, 0x03, 0x78, 0xfe, 0x00, 0x4b, + 0xf6, 0x6d, 0x79, 0xfe, 0x00, 0x48, 0x76, 0x3b, 0xfe, 0x08, 0x40, 0x02, + 0x14, 0x05, 0x2c, 0x05, 0x73, 0x0b, 0x01, 0xff, 0x45, 0xec, 0x5e, 0xe5, + 0x08, 0x80, 0x1a, 0x45, 0xe7, 0x73, 0xe4, 0x08, 0x80, 0x0d, 0x45, 0xa8, + 0x50, 0xe6, 0x08, 0xc0, 0x00, 0x43, 0xf9, 0x0a, 0xe9, 0x08, 0x40, 0x43, + 0xf9, 0x0a, 0xe7, 0x08, 0x40, 0x43, 0xf9, 0x0a, 0xe8, 0x08, 0x40, 0x53, + 0x9a, 0x48, 0xfc, 0x0e, 0x01, 0x42, 0x6c, 0x00, 0x0c, 0x06, 0x40, 0x51, + 0x53, 0x58, 0x87, 0x08, 0x00, 0x54, 0x0c, 0x43, 0xd0, 0x0e, 0x41, 0x14, + 0xe8, 0x43, 0x4d, 0xaf, 0x3f, 0xb0, 0x01, 0xff, 0xac, 0x2e, 0x02, 0xd0, + 0x00, 0x01, 0xff, 0x4f, 0x5f, 0x6a, 0x50, 0x22, 0x00, 0x09, 0xe2, 0x0c, + 0x01, 0xff, 0x59, 0x6c, 0x23, 0x46, 0x22, 0x00, 0x06, 0x7b, 0x00, 0x01, + 0xff, 0x4b, 0xf3, 0x28, 0x70, 0x2a, 0x00, 0x42, 0x1e, 0x00, 0x45, 0x22, + 0xc0, 0x00, 0x50, 0x46, 0x60, 0x52, 0x22, 0x40, 0x48, 0x42, 0x19, 0xbd, + 0xce, 0x01, 0x57, 0xe2, 0x2e, 0x9f, 0x00, 0x40, 0x44, 0x86, 0x44, 0xe4, + 0x2b, 0x00, 0x47, 0x64, 0x36, 0x27, 0x00, 0x40, 0x45, 0x3e, 0xe4, 0x7a, + 0x23, 0x80, 0x81, 0x04, 0x4d, 0xfe, 0x80, 0x40, 0x23, 0x00, 0xa3, 0xc6, + 0x03, 0xa4, 0xea, 0x02, 0x50, 0xe6, 0x62, 0x77, 0x23, 0x00, 0x56, 0x19, + 0x34, 0x69, 0x23, 0x00, 0xa9, 0xc8, 0x02, 0x04, 0xb5, 0xf0, 0xb7, 0x02, + 0x04, 0xc3, 0x00, 0xa6, 0x02, 0x45, 0x38, 0xaf, 0x75, 0x23, 0x80, 0x98, + 0x02, 0x02, 0x7c, 0x00, 0x6c, 0xb2, 0x5e, 0xb3, 0x3b, 0x4f, 0xbf, 0x73, + 0x68, 0x23, 0x00, 0x02, 0x50, 0x02, 0x06, 0x45, 0xae, 0xec, 0x6c, 0x23, + 0x40, 0x80, 0x06, 0x4a, 0x67, 0x78, 0x4f, 0x23, 0x40, 0x4b, 0xe7, 0x99, + 0x72, 0x23, 0x00, 0x48, 0xd8, 0xca, 0x5d, 0x23, 0x00, 0x05, 0x49, 0xd8, + 0x01, 0xff, 0x49, 0xb7, 0x23, 0x61, 0x23, 0x00, 0x43, 0xdd, 0xca, 0x55, + 0x23, 0x00, 0x47, 0xe6, 0x7f, 0x51, 0x23, 0x40, 0x51, 0xda, 0x59, 0x6e, + 0x23, 0x00, 0x48, 0x03, 0x81, 0x3f, 0x23, 0x00, 0x4a, 0xd3, 0xaf, 0x37, + 0x23, 0x00, 0xb4, 0x01, 0xff, 0x4c, 0x5b, 0x8c, 0x63, 0x23, 0x00, 0x49, + 0x3e, 0xba, 0x6d, 0x23, 0x40, 0x42, 0x0b, 0x00, 0x74, 0x23, 0x00, 0x4e, + 0x63, 0x78, 0x46, 0x23, 0x40, 0x42, 0xe8, 0x01, 0x95, 0x23, 0x80, 0x11, + 0x04, 0xb8, 0x54, 0x01, 0xff, 0x44, 0x79, 0x0d, 0x5e, 0x23, 0x00, 0x48, + 0xe3, 0x59, 0x58, 0x23, 0x40, 0x80, 0x01, 0xff, 0x49, 0x44, 0x0e, 0x42, 0x23, 0x00, 0xa3, 0x79, 0xa4, 0x4b, 0x45, 0x7b, 0x00, 0x38, 0x23, 0x00, - 0x4c, 0x87, 0x00, 0x44, 0x23, 0x00, 0x43, 0x2f, 0xc8, 0x3b, 0x23, 0x00, - 0x02, 0x68, 0x00, 0x29, 0x49, 0x79, 0x2a, 0x6f, 0x23, 0x00, 0x48, 0xd6, - 0x33, 0x70, 0x23, 0x00, 0x50, 0xb3, 0x02, 0x48, 0x23, 0x00, 0x45, 0xf9, - 0x0d, 0x41, 0x23, 0x00, 0x02, 0x50, 0x02, 0x01, 0xff, 0x46, 0xf6, 0x7b, - 0x53, 0x23, 0x00, 0x4b, 0xb8, 0x02, 0x50, 0x23, 0x40, 0x4d, 0x39, 0x07, + 0x4c, 0x87, 0x00, 0x44, 0x23, 0x00, 0x43, 0xdd, 0xca, 0x3b, 0x23, 0x00, + 0x02, 0x68, 0x00, 0x29, 0x49, 0x02, 0x2b, 0x6f, 0x23, 0x00, 0x48, 0xa6, + 0x34, 0x70, 0x23, 0x00, 0x50, 0xb3, 0x02, 0x48, 0x23, 0x00, 0x45, 0x48, + 0x0e, 0x41, 0x23, 0x00, 0x02, 0x50, 0x02, 0x01, 0xff, 0x46, 0x65, 0x7d, + 0x53, 0x23, 0x00, 0x4b, 0xb8, 0x02, 0x50, 0x23, 0x40, 0x4d, 0x4f, 0x1a, 0x47, 0x23, 0x00, 0x47, 0xee, 0x00, 0x43, 0x23, 0x40, 0x42, 0xd8, 0x00, 0x54, 0x23, 0x80, 0x1f, 0xa9, 0x11, 0x03, 0xa6, 0x01, 0x01, 0xff, 0x46, - 0xf6, 0x7b, 0x4c, 0x23, 0x00, 0x4b, 0xb8, 0x02, 0x57, 0x23, 0x40, 0x45, - 0x8a, 0x43, 0x3a, 0x23, 0x00, 0x44, 0x02, 0x00, 0x39, 0x23, 0x40, 0x42, - 0x12, 0x00, 0x4d, 0x23, 0x40, 0x45, 0xe8, 0x02, 0x3c, 0x23, 0x00, 0x44, - 0x02, 0x12, 0x60, 0x23, 0x40, 0x49, 0x77, 0x58, 0x79, 0x23, 0x40, 0x4b, - 0xd2, 0x95, 0x67, 0x23, 0x00, 0x4a, 0xf8, 0x76, 0x45, 0x23, 0x40, 0x49, - 0x2f, 0x23, 0x64, 0x23, 0x00, 0x48, 0x78, 0x58, 0x5b, 0x23, 0x40, 0x45, - 0xe0, 0xde, 0x36, 0x23, 0x00, 0x43, 0xf0, 0x04, 0x73, 0x23, 0xc0, 0x00, - 0x49, 0x77, 0x58, 0x78, 0x23, 0x40, 0x02, 0xd8, 0x00, 0x30, 0x4f, 0xa3, - 0x6c, 0x5a, 0x23, 0x00, 0x03, 0xa6, 0x01, 0x01, 0xff, 0x80, 0x06, 0x4a, - 0xf8, 0x76, 0x56, 0x23, 0x40, 0x4b, 0xd7, 0x97, 0x71, 0x23, 0x00, 0x4a, - 0xd3, 0x95, 0x66, 0x23, 0x00, 0x05, 0xde, 0x95, 0x01, 0xff, 0x43, 0x2f, - 0xc8, 0x4e, 0x23, 0x00, 0x48, 0x78, 0x58, 0x4a, 0x23, 0x40, 0x80, 0x11, - 0x03, 0x4c, 0x22, 0x01, 0xff, 0x45, 0x60, 0x01, 0x4b, 0x23, 0x00, 0x48, - 0x78, 0x58, 0x59, 0x23, 0x40, 0x49, 0x2f, 0x23, 0x62, 0x23, 0x00, 0x45, - 0x60, 0x01, 0x52, 0x23, 0x00, 0x45, 0xad, 0x22, 0x6b, 0x23, 0x40, 0x06, - 0xd1, 0x04, 0x06, 0x48, 0x9a, 0xc6, 0x6a, 0x23, 0x40, 0x49, 0xf5, 0x0d, - 0x49, 0x23, 0x00, 0x49, 0x2f, 0x23, 0x65, 0x23, 0x00, 0x43, 0x2f, 0xc8, - 0x3e, 0x23, 0x00, 0x02, 0x60, 0x01, 0x06, 0x48, 0x78, 0x58, 0x5c, 0x23, + 0x65, 0x7d, 0x4c, 0x23, 0x00, 0x4b, 0xb8, 0x02, 0x57, 0x23, 0x40, 0x45, + 0x97, 0x44, 0x3a, 0x23, 0x00, 0x44, 0x02, 0x00, 0x39, 0x23, 0x40, 0x42, + 0x12, 0x00, 0x4d, 0x23, 0x40, 0x45, 0x13, 0x03, 0x3c, 0x23, 0x00, 0x44, + 0x51, 0x12, 0x60, 0x23, 0x40, 0x49, 0xe2, 0x59, 0x79, 0x23, 0x40, 0x4b, + 0xcc, 0x97, 0x67, 0x23, 0x00, 0x4a, 0x67, 0x78, 0x45, 0x23, 0x40, 0x49, + 0xb7, 0x23, 0x64, 0x23, 0x00, 0x48, 0xe3, 0x59, 0x5b, 0x23, 0x40, 0x45, + 0xf0, 0xe1, 0x36, 0x23, 0x00, 0x43, 0x1b, 0x05, 0x73, 0x23, 0xc0, 0x00, + 0x49, 0xe2, 0x59, 0x78, 0x23, 0x40, 0x02, 0xd8, 0x00, 0x30, 0x4f, 0x5b, + 0x6e, 0x5a, 0x23, 0x00, 0x03, 0xa6, 0x01, 0x01, 0xff, 0x80, 0x06, 0x4a, + 0x67, 0x78, 0x56, 0x23, 0x40, 0x4b, 0xe7, 0x99, 0x71, 0x23, 0x00, 0x4a, + 0xcd, 0x97, 0x66, 0x23, 0x00, 0x05, 0x49, 0xd8, 0x01, 0xff, 0x43, 0xdd, + 0xca, 0x4e, 0x23, 0x00, 0x48, 0xe3, 0x59, 0x4a, 0x23, 0x40, 0x80, 0x11, + 0x03, 0xd4, 0x22, 0x01, 0xff, 0x45, 0x60, 0x01, 0x4b, 0x23, 0x00, 0x48, + 0xe3, 0x59, 0x59, 0x23, 0x40, 0x49, 0xb7, 0x23, 0x62, 0x23, 0x00, 0x45, + 0x60, 0x01, 0x52, 0x23, 0x00, 0x45, 0x35, 0x23, 0x6b, 0x23, 0x40, 0x06, + 0xfc, 0x04, 0x06, 0x48, 0x38, 0xc9, 0x6a, 0x23, 0x40, 0x49, 0x44, 0x0e, + 0x49, 0x23, 0x00, 0x49, 0xb7, 0x23, 0x65, 0x23, 0x00, 0x43, 0xdd, 0xca, + 0x3e, 0x23, 0x00, 0x02, 0x60, 0x01, 0x06, 0x48, 0xe3, 0x59, 0x5c, 0x23, 0x40, 0x42, 0x17, 0x00, 0x5f, 0x23, 0x00, 0x43, 0x62, 0x01, 0x3d, 0x23, - 0x40, 0x49, 0x77, 0x58, 0x76, 0x23, 0x40, 0x03, 0xee, 0x15, 0xad, 0x01, - 0x44, 0xcc, 0xd6, 0x93, 0x26, 0x00, 0x4a, 0xdf, 0xa6, 0xd1, 0x27, 0x00, - 0xa7, 0x6f, 0x42, 0x11, 0x0c, 0x25, 0x26, 0x00, 0xf4, 0x1c, 0xf4, 0xc1, - 0x00, 0x44, 0x6e, 0xbf, 0x08, 0xcc, 0x81, 0x57, 0x0b, 0x15, 0x10, 0x01, - 0xff, 0xa3, 0x44, 0x68, 0xb5, 0x04, 0x04, 0xf5, 0x01, 0x53, 0x5b, 0x48, - 0xf2, 0x27, 0x00, 0x4b, 0x8d, 0x8e, 0x11, 0x2a, 0x00, 0x51, 0xcb, 0x04, - 0xba, 0x21, 0x00, 0xb4, 0x01, 0xff, 0x53, 0x82, 0x4a, 0xb6, 0x21, 0x00, - 0x0f, 0x02, 0x02, 0x01, 0xff, 0x55, 0xe6, 0x38, 0x8d, 0x2b, 0x00, 0x53, - 0xb1, 0x49, 0x8e, 0x2b, 0x00, 0x51, 0xcb, 0x04, 0x6f, 0x2b, 0x00, 0x54, - 0x57, 0x44, 0x8c, 0x2b, 0x00, 0x52, 0x86, 0x54, 0x8f, 0x2b, 0x40, 0x52, - 0x34, 0x52, 0x40, 0x29, 0x00, 0x4f, 0xbe, 0x6f, 0x33, 0x22, 0x40, 0x4a, - 0x05, 0xa4, 0xf6, 0xf4, 0x41, 0x49, 0x5c, 0x29, 0xa2, 0xf4, 0x01, 0x42, - 0x68, 0x00, 0x20, 0x22, 0x80, 0x12, 0x47, 0xb1, 0xd2, 0x20, 0xf6, 0x01, - 0x4a, 0x1d, 0xaf, 0x2b, 0x21, 0x00, 0x4b, 0xfb, 0xa1, 0x27, 0xf6, 0x41, - 0x06, 0x50, 0x00, 0x01, 0xff, 0x48, 0xae, 0x53, 0x9e, 0x29, 0x00, 0x48, - 0x78, 0x58, 0xa4, 0x29, 0x40, 0x11, 0x6d, 0x5a, 0x06, 0x4b, 0x57, 0x9d, + 0x40, 0x49, 0xe2, 0x59, 0x76, 0x23, 0x40, 0x03, 0x5a, 0x16, 0xad, 0x01, + 0x44, 0xb2, 0xd9, 0x93, 0x26, 0x00, 0x4a, 0x1b, 0xa9, 0xd1, 0x27, 0x00, + 0xa7, 0x6f, 0x42, 0x60, 0x0c, 0x25, 0x26, 0x00, 0xf4, 0x1c, 0xf4, 0xc1, + 0x00, 0x44, 0xec, 0xc1, 0x08, 0xcc, 0x81, 0x57, 0x0b, 0x64, 0x10, 0x01, + 0xff, 0xa3, 0x44, 0x68, 0xe0, 0x04, 0x04, 0xf5, 0x01, 0x53, 0xa4, 0x49, + 0xf2, 0x27, 0x00, 0x4b, 0x3f, 0x90, 0x11, 0x2a, 0x00, 0x51, 0xf6, 0x04, + 0xba, 0x21, 0x00, 0xb4, 0x01, 0xff, 0x53, 0xcb, 0x4b, 0xb6, 0x21, 0x00, + 0x0f, 0x02, 0x02, 0x01, 0xff, 0x55, 0xb6, 0x39, 0x8d, 0x2b, 0x00, 0x53, + 0xfa, 0x4a, 0x8e, 0x2b, 0x00, 0x51, 0xf6, 0x04, 0x6f, 0x2b, 0x00, 0x54, + 0x78, 0x45, 0x8c, 0x2b, 0x00, 0x52, 0xcf, 0x55, 0x8f, 0x2b, 0x40, 0x52, + 0x7d, 0x53, 0x40, 0x29, 0x00, 0x4f, 0x58, 0x71, 0x33, 0x22, 0x40, 0x4a, + 0x41, 0xa6, 0xf6, 0xf4, 0x41, 0x49, 0xe5, 0x29, 0xa2, 0xf4, 0x01, 0x42, + 0x68, 0x00, 0x20, 0x22, 0x80, 0x12, 0x47, 0x84, 0xd5, 0x20, 0xf6, 0x01, + 0x4a, 0x6d, 0xb1, 0x2b, 0x21, 0x00, 0x4b, 0x37, 0xa4, 0x27, 0xf6, 0x41, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x48, 0xf7, 0x54, 0x9e, 0x29, 0x00, 0x48, + 0xe3, 0x59, 0xa4, 0x29, 0x40, 0x11, 0xd8, 0x5b, 0x06, 0x4b, 0x7d, 0x9f, 0xc0, 0xfa, 0x41, 0x90, 0x92, 0x10, 0x91, 0x9a, 0x0c, 0x92, 0xb5, 0x08, 0x93, 0xbd, 0x04, 0x94, 0x83, 0x01, 0x95, 0x01, 0xff, 0x90, 0x5a, 0x91, - 0x30, 0x92, 0x06, 0x42, 0x57, 0xf0, 0x46, 0x46, 0x41, 0xd0, 0x3c, 0x46, + 0x30, 0x92, 0x06, 0x42, 0xaa, 0xf3, 0x46, 0x46, 0x41, 0xd0, 0x3c, 0x46, 0x01, 0xd1, 0x3d, 0x46, 0x01, 0xd2, 0x3e, 0x46, 0x01, 0xd3, 0x3f, 0x46, 0x01, 0xd4, 0x40, 0x46, 0x01, 0xd5, 0x41, 0x46, 0x01, 0xd6, 0x42, 0x46, 0x01, 0xd7, 0x43, 0x46, 0x01, 0xd8, 0x44, 0x46, 0x01, 0xd9, 0x45, 0x46, @@ -18674,21 +18918,21 @@ static const unsigned char uname2c_tree[218382] = { 0x45, 0x01, 0xd9, 0xe2, 0x45, 0x41, 0x90, 0x24, 0xd1, 0xd0, 0x45, 0x01, 0xd2, 0xd1, 0x45, 0x01, 0xd3, 0xd2, 0x45, 0x01, 0xd4, 0xd3, 0x45, 0x01, 0xd5, 0xd4, 0x45, 0x01, 0xd6, 0xd5, 0x45, 0x01, 0xd7, 0xd6, 0x45, 0x01, - 0xd8, 0xd7, 0x45, 0x01, 0xd9, 0xd8, 0x45, 0x41, 0x54, 0xb7, 0x3e, 0xce, - 0x45, 0x01, 0x53, 0x93, 0x46, 0xcf, 0x45, 0x41, 0xd0, 0xc4, 0x45, 0x01, + 0xd8, 0xd7, 0x45, 0x01, 0xd9, 0xd8, 0x45, 0x41, 0x54, 0x9c, 0x3f, 0xce, + 0x45, 0x01, 0x53, 0xdc, 0x47, 0xcf, 0x45, 0x41, 0xd0, 0xc4, 0x45, 0x01, 0xd1, 0xc5, 0x45, 0x01, 0xd2, 0xc6, 0x45, 0x01, 0xd3, 0xc7, 0x45, 0x01, 0xd4, 0xc8, 0x45, 0x01, 0xd5, 0xc9, 0x45, 0x01, 0xd6, 0xca, 0x45, 0x01, 0xd7, 0xcb, 0x45, 0x01, 0xd8, 0xcc, 0x45, 0x01, 0xd9, 0xcd, 0x45, 0x41, 0x90, 0xc5, 0x03, 0x91, 0x9a, 0x03, 0x92, 0xea, 0x02, 0x93, 0xa8, 0x02, 0x94, 0xfd, 0x01, 0x95, 0xcd, 0x01, 0x96, 0x98, 0x01, 0x97, 0x69, 0x98, 0x2d, 0x99, 0x01, 0xff, 0xd0, 0xba, 0x45, 0x01, 0xd1, 0xbb, 0x45, 0x01, - 0xd2, 0xbc, 0x45, 0x01, 0x47, 0x5d, 0xcb, 0xbd, 0x45, 0x01, 0xd4, 0xbe, + 0xd2, 0xbc, 0x45, 0x01, 0x47, 0x22, 0xce, 0xbd, 0x45, 0x01, 0xd4, 0xbe, 0x45, 0x01, 0xd5, 0xbf, 0x45, 0x01, 0xd6, 0xc0, 0x45, 0x01, 0xd7, 0xc1, 0x45, 0x01, 0xd8, 0xc2, 0x45, 0x01, 0xd9, 0xc3, 0x45, 0x41, 0xd0, 0xad, 0x45, 0x01, 0xd1, 0xae, 0x45, 0x81, 0x2d, 0xd2, 0xb0, 0x45, 0x01, 0x93, 0x1d, 0xd4, 0xb3, 0x45, 0x01, 0xd5, 0xb4, 0x45, 0x01, 0xd6, 0xb5, 0x45, 0x81, 0x0c, 0xd7, 0xb7, 0x45, 0x01, 0xd8, 0xb8, 0x45, 0x01, 0xd9, 0xb9, - 0x45, 0x41, 0xe1, 0xb6, 0x45, 0x41, 0x49, 0x71, 0xb2, 0xb1, 0x45, 0x01, + 0x45, 0x41, 0xe1, 0xb6, 0x45, 0x41, 0x49, 0xcb, 0xb4, 0xb1, 0x45, 0x01, 0xe1, 0xb2, 0x45, 0x41, 0xe1, 0xaf, 0x45, 0x41, 0xd0, 0xa2, 0x45, 0x01, 0xd1, 0xa3, 0x45, 0x81, 0x20, 0xd2, 0xa5, 0x45, 0x01, 0xd3, 0xa6, 0x45, 0x01, 0xd4, 0xa7, 0x45, 0x01, 0xd5, 0xa8, 0x45, 0x01, 0xd6, 0xa9, 0x45, @@ -18842,239 +19086,242 @@ static const unsigned char uname2c_tree[218382] = { 0x01, 0xd9, 0x13, 0x44, 0x41, 0xe1, 0x0a, 0x44, 0x41, 0xd1, 0x00, 0x44, 0x01, 0xd2, 0x01, 0x44, 0x01, 0xd3, 0x02, 0x44, 0x01, 0xd4, 0x03, 0x44, 0x01, 0xd5, 0x04, 0x44, 0x01, 0xd6, 0x05, 0x44, 0x01, 0xd7, 0x06, 0x44, - 0x01, 0xd8, 0x07, 0x44, 0x01, 0xd9, 0x08, 0x44, 0x41, 0x57, 0x47, 0x2c, - 0x3f, 0x2a, 0x00, 0x47, 0xec, 0xcc, 0x91, 0xf6, 0x01, 0x4f, 0x1d, 0x6b, - 0xc8, 0xf3, 0x01, 0xb0, 0x01, 0xff, 0x46, 0x30, 0x3d, 0x26, 0x00, 0x00, - 0x44, 0xc7, 0x3f, 0xfa, 0xf3, 0x41, 0x49, 0xfd, 0xb3, 0xf0, 0x23, 0x00, - 0x14, 0x1f, 0x40, 0xa8, 0x01, 0xa5, 0x93, 0x01, 0x04, 0x36, 0xed, 0x38, - 0x02, 0x14, 0x00, 0x28, 0x0b, 0x12, 0x69, 0x11, 0x06, 0xa4, 0x11, 0x01, - 0xff, 0x5a, 0x5c, 0x1f, 0xd5, 0x26, 0x00, 0x4e, 0x9c, 0x77, 0x87, 0x23, - 0x40, 0x4b, 0x52, 0x28, 0x4a, 0x22, 0x00, 0x42, 0x1e, 0x00, 0x48, 0x22, - 0xc0, 0x00, 0x57, 0x9e, 0x04, 0x6f, 0x2a, 0x40, 0x4e, 0x8c, 0x74, 0x2e, - 0x23, 0x00, 0x48, 0xa9, 0x0c, 0x4c, 0x22, 0x40, 0x0e, 0x0a, 0x75, 0x47, - 0x47, 0x81, 0xd0, 0x7e, 0xf4, 0x81, 0x24, 0xb3, 0x01, 0xff, 0x06, 0x28, - 0xdc, 0x11, 0x05, 0x00, 0x18, 0x01, 0xff, 0x50, 0xfa, 0x5f, 0x4f, 0xcc, - 0x01, 0x4e, 0x08, 0x79, 0x4e, 0xcc, 0x41, 0x49, 0x26, 0xb5, 0x52, 0xcc, - 0x01, 0x46, 0x7b, 0x2e, 0x53, 0xcc, 0x41, 0x80, 0x01, 0xff, 0x4b, 0x19, - 0x98, 0x4d, 0xcc, 0x01, 0x49, 0xfc, 0xba, 0x4c, 0xcc, 0x01, 0x05, 0xf0, - 0xe7, 0x01, 0xff, 0xd1, 0x54, 0xcc, 0x01, 0xd2, 0x55, 0xcc, 0x41, 0x44, - 0xc3, 0x00, 0x51, 0xcc, 0x01, 0x45, 0xc8, 0x00, 0x50, 0xcc, 0x41, 0x48, - 0x7a, 0x96, 0x35, 0x21, 0x00, 0x44, 0xe2, 0xe2, 0x97, 0x26, 0x00, 0x42, - 0x34, 0x00, 0x07, 0x00, 0x40, 0xa1, 0xde, 0x05, 0xa2, 0xa7, 0x05, 0xa3, - 0xc6, 0x04, 0xa4, 0xa5, 0x04, 0x45, 0xb8, 0x70, 0x03, 0xf7, 0x01, 0x44, - 0x91, 0x8f, 0x02, 0xf7, 0x01, 0xa7, 0x8a, 0x04, 0xa8, 0xe8, 0x03, 0x04, - 0x99, 0x1f, 0xd0, 0x03, 0xac, 0xc1, 0x03, 0xad, 0xa0, 0x03, 0x02, 0x26, - 0x03, 0x8f, 0x03, 0x43, 0x1e, 0xdf, 0x46, 0xf7, 0x01, 0xb0, 0xd6, 0x02, - 0x03, 0xd6, 0x01, 0xc5, 0x02, 0xb2, 0xf3, 0x01, 0xb3, 0x70, 0xb4, 0x45, - 0x45, 0xc2, 0xe8, 0x55, 0xf7, 0x01, 0xb6, 0x0f, 0x02, 0xa9, 0x01, 0x01, - 0xff, 0x43, 0x8b, 0x00, 0x04, 0xf7, 0x01, 0xf8, 0x4a, 0xf7, 0x41, 0x48, - 0x32, 0xc3, 0x28, 0xf7, 0x01, 0xa9, 0x01, 0xff, 0x45, 0xde, 0xe5, 0x0a, - 0xf7, 0x81, 0x0d, 0x45, 0x59, 0xe8, 0x16, 0xf7, 0xc1, 0x00, 0x42, 0x34, - 0xf0, 0x17, 0xf7, 0x41, 0x4c, 0x7d, 0x89, 0x2f, 0xf7, 0x01, 0x8d, 0x01, - 0xff, 0xd2, 0x0b, 0xf7, 0x01, 0xd3, 0x0c, 0xf7, 0x41, 0x45, 0x56, 0xe1, - 0x3f, 0xf7, 0x81, 0x1c, 0x02, 0x9e, 0x01, 0x0c, 0x46, 0x55, 0x7f, 0x51, - 0xf7, 0x01, 0x44, 0xa2, 0xef, 0x4d, 0xf7, 0x41, 0x44, 0x68, 0x96, 0x29, - 0xf7, 0x01, 0x45, 0x3c, 0x89, 0x48, 0xf7, 0x41, 0x42, 0x34, 0xf0, 0x40, - 0xf7, 0x41, 0x02, 0x13, 0x00, 0x61, 0x4e, 0xe0, 0x74, 0x4f, 0xf7, 0x01, - 0x45, 0x4e, 0xe4, 0x1b, 0xf7, 0x01, 0x43, 0xe7, 0xd0, 0x54, 0xf7, 0x01, - 0x45, 0xe3, 0xbc, 0x47, 0xf7, 0x01, 0xb4, 0x34, 0xb5, 0x01, 0xff, 0x06, - 0x83, 0x61, 0x06, 0x44, 0xfe, 0x50, 0x0d, 0xf7, 0x41, 0x05, 0x17, 0x42, - 0x06, 0x43, 0xb5, 0x00, 0x5e, 0xf7, 0x41, 0x48, 0x81, 0x89, 0x2c, 0xf7, - 0x01, 0x46, 0x88, 0x4f, 0x22, 0xf7, 0x01, 0x08, 0xea, 0xc7, 0x01, 0xff, - 0x48, 0x81, 0x89, 0x2e, 0xf7, 0x01, 0x46, 0x88, 0x4f, 0x27, 0xf7, 0x41, - 0x4d, 0x4e, 0x7f, 0x52, 0xf7, 0x01, 0x53, 0x2d, 0x4b, 0x5c, 0xf7, 0xc1, - 0x00, 0x42, 0x34, 0xf0, 0x5d, 0xf7, 0x41, 0x49, 0xb0, 0xb2, 0x39, 0xf7, - 0x01, 0xf4, 0x14, 0xf7, 0xc1, 0x00, 0x04, 0xf3, 0x01, 0x01, 0xff, 0x48, - 0x81, 0x89, 0x2d, 0xf7, 0x01, 0x52, 0x88, 0x4f, 0x26, 0xf7, 0x41, 0xa5, - 0x0d, 0x48, 0x62, 0xc6, 0x18, 0xf7, 0xc1, 0x00, 0x42, 0x34, 0xf0, 0x19, - 0xf7, 0x41, 0x45, 0x1a, 0xe1, 0x3b, 0xf7, 0x81, 0x33, 0x45, 0xa4, 0xe3, - 0x32, 0xf7, 0x81, 0x06, 0x44, 0x05, 0x09, 0x6d, 0xf7, 0x41, 0x04, 0xf3, - 0x01, 0x0f, 0x8d, 0x01, 0xff, 0xd2, 0x33, 0xf7, 0x01, 0xd3, 0x34, 0xf7, - 0x01, 0xd4, 0x35, 0xf7, 0x41, 0x48, 0x81, 0x89, 0x30, 0xf7, 0x81, 0x06, - 0x44, 0x99, 0x1f, 0x1f, 0xf7, 0x41, 0x42, 0x34, 0xf0, 0x31, 0xf7, 0x41, - 0x42, 0x34, 0xf0, 0x3c, 0xf7, 0x41, 0x47, 0x1d, 0xcd, 0x41, 0xf7, 0x01, - 0x49, 0x48, 0xba, 0x00, 0xf7, 0x41, 0x52, 0xf0, 0x50, 0x0e, 0xf7, 0x01, - 0xaf, 0x15, 0x4a, 0xb5, 0xad, 0x5f, 0xf7, 0x01, 0xb5, 0x01, 0xff, 0x44, - 0xfe, 0xee, 0x63, 0xf7, 0x01, 0x4a, 0xc7, 0xaf, 0x64, 0xf7, 0x41, 0x47, - 0x4b, 0xd3, 0x58, 0xf7, 0x01, 0x44, 0xda, 0xef, 0x4b, 0xf7, 0xc1, 0x00, - 0x48, 0xea, 0xc2, 0x5a, 0xf7, 0x41, 0x43, 0xca, 0x00, 0x6f, 0xf7, 0x01, - 0x43, 0x76, 0x02, 0x15, 0xf7, 0x41, 0x48, 0xf2, 0xc0, 0x38, 0xf7, 0x01, - 0x50, 0x7a, 0x61, 0x10, 0xf7, 0x81, 0x06, 0x44, 0x18, 0xa0, 0x71, 0xf7, - 0x41, 0x8d, 0x01, 0xff, 0xd2, 0x11, 0xf7, 0x01, 0xd3, 0x12, 0xf7, 0x41, - 0x47, 0xc5, 0xcd, 0x2a, 0xf7, 0x01, 0x48, 0x72, 0xc6, 0x53, 0xf7, 0x41, - 0x44, 0x68, 0x96, 0x1c, 0xf7, 0x81, 0x06, 0x4b, 0x61, 0x96, 0x21, 0xf7, - 0x41, 0x42, 0x34, 0xf0, 0x1d, 0xf7, 0x41, 0x04, 0x23, 0x00, 0x0f, 0xaf, - 0x01, 0xff, 0x48, 0xda, 0xc7, 0x56, 0xf7, 0x01, 0x42, 0x42, 0x00, 0x6e, - 0xf7, 0x41, 0x44, 0x92, 0xb5, 0x72, 0xf7, 0x01, 0x45, 0x92, 0xe6, 0x73, - 0xf7, 0x41, 0x43, 0x5a, 0x1a, 0x1a, 0xf7, 0x01, 0x42, 0x1d, 0x04, 0x49, - 0xf7, 0x41, 0x48, 0x52, 0xc1, 0x70, 0xf7, 0x01, 0x02, 0x34, 0x03, 0x01, - 0xff, 0x45, 0xe1, 0xe7, 0x61, 0xf7, 0x81, 0x06, 0x44, 0x2e, 0x34, 0x60, - 0xf7, 0x41, 0x42, 0x34, 0xf0, 0x62, 0xf7, 0x41, 0xa1, 0x4a, 0x47, 0x2a, - 0xcf, 0x13, 0xf7, 0x01, 0x06, 0x89, 0x4f, 0x34, 0xb2, 0x01, 0xff, 0x08, - 0x6a, 0xc6, 0x1a, 0x46, 0xd2, 0xdd, 0x65, 0xf7, 0xc1, 0x00, 0x8d, 0x01, - 0xff, 0xd2, 0x66, 0xf7, 0x01, 0xd3, 0x67, 0xf7, 0x01, 0xd4, 0x68, 0xf7, - 0x01, 0xd5, 0x69, 0xf7, 0x41, 0x46, 0x88, 0x4f, 0x23, 0xf7, 0x81, 0x06, - 0x44, 0x99, 0x1f, 0x1e, 0xf7, 0x41, 0x42, 0x34, 0xf0, 0x24, 0xf7, 0x41, - 0x4b, 0x8f, 0x4f, 0x25, 0xf7, 0x01, 0x43, 0x5f, 0x0f, 0x20, 0xf7, 0x41, - 0x46, 0x1a, 0xd8, 0x50, 0xf7, 0x01, 0x42, 0xce, 0xf1, 0x4c, 0xf7, 0x01, - 0x4b, 0x46, 0x9f, 0x4e, 0xf7, 0x41, 0x07, 0x67, 0xcc, 0x24, 0x4a, 0xc3, - 0xa9, 0x3e, 0xf7, 0x01, 0x4b, 0x0d, 0x9c, 0x0f, 0xf7, 0x01, 0x44, 0xa2, - 0xee, 0x42, 0xf7, 0x81, 0x06, 0x44, 0xa4, 0x20, 0x59, 0xf7, 0x41, 0x8d, - 0x01, 0xff, 0xd2, 0x43, 0xf7, 0x01, 0xd3, 0x44, 0xf7, 0x41, 0x44, 0xe2, - 0xed, 0x6b, 0xf7, 0x01, 0x47, 0x4e, 0xd4, 0x6c, 0xf7, 0x41, 0x42, 0x46, - 0x00, 0x01, 0xf7, 0x01, 0xac, 0x44, 0x46, 0x46, 0x2c, 0x5b, 0xf7, 0x01, - 0x4b, 0x07, 0x9e, 0x2b, 0xf7, 0x01, 0x03, 0x7c, 0x00, 0x12, 0x46, 0xa6, - 0xdc, 0x3a, 0xf7, 0x01, 0x44, 0xba, 0x7a, 0x57, 0xf7, 0x01, 0x4a, 0xb7, - 0xb0, 0x3d, 0xf7, 0x41, 0x80, 0x06, 0x46, 0xe0, 0xd8, 0x05, 0xf7, 0x41, - 0x45, 0x1e, 0xe7, 0x06, 0xf7, 0x81, 0x0d, 0x45, 0xf9, 0xe8, 0x08, 0xf7, - 0xc1, 0x00, 0x42, 0x34, 0xf0, 0x09, 0xf7, 0x41, 0x42, 0x34, 0xf0, 0x07, - 0xf7, 0x41, 0x45, 0xe1, 0xe2, 0x6a, 0xf7, 0x01, 0x44, 0x8a, 0xed, 0x36, - 0xf7, 0x81, 0x06, 0x42, 0x1d, 0x04, 0x45, 0xf7, 0x41, 0x42, 0x34, 0xf0, - 0x37, 0xf7, 0x41, 0x80, 0x01, 0xff, 0x48, 0x02, 0xc1, 0xec, 0xf6, 0x01, - 0x49, 0x5c, 0xb5, 0xeb, 0xf6, 0x41, 0x16, 0x6d, 0x32, 0x8c, 0x03, 0x06, - 0xc4, 0x06, 0xc5, 0x02, 0x07, 0xc1, 0x05, 0x6b, 0x08, 0x39, 0xac, 0x5b, - 0xb3, 0x34, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xe1, 0x20, 0x17, 0x81, 0x1a, - 0xe5, 0x26, 0x17, 0x01, 0xe9, 0x22, 0x17, 0x81, 0x0d, 0xef, 0x28, 0x17, - 0x01, 0xf5, 0x24, 0x17, 0xc1, 0x00, 0xf5, 0x25, 0x17, 0x41, 0xe9, 0x23, - 0x17, 0x41, 0xe1, 0x21, 0x17, 0x01, 0xe9, 0x29, 0x17, 0x01, 0xed, 0x2a, - 0x17, 0x01, 0xf7, 0x27, 0x17, 0x41, 0x04, 0x30, 0x03, 0x06, 0x48, 0xde, - 0xa0, 0x3f, 0x17, 0x41, 0x46, 0x6c, 0xda, 0x2b, 0x17, 0x01, 0x45, 0x73, - 0xe7, 0x3e, 0x17, 0x01, 0xb3, 0x01, 0xff, 0x46, 0x60, 0x0a, 0x3d, 0x17, - 0x01, 0x4c, 0x0d, 0x90, 0x3c, 0x17, 0x41, 0x42, 0x92, 0x01, 0x3a, 0x17, - 0x01, 0x45, 0xde, 0x2b, 0x3b, 0x17, 0x41, 0xe1, 0x12, 0x17, 0x81, 0xb9, - 0x01, 0xa2, 0xac, 0x01, 0xa3, 0x9f, 0x01, 0xa4, 0x86, 0x01, 0xa7, 0x7a, - 0x42, 0x22, 0x00, 0x11, 0x17, 0x01, 0xaa, 0x68, 0xab, 0x5c, 0xac, 0x50, - 0x42, 0x6c, 0x00, 0x09, 0x17, 0x01, 0xae, 0x32, 0xb0, 0x26, 0x42, 0x71, - 0x00, 0x0d, 0x17, 0x01, 0x42, 0x15, 0x06, 0x0f, 0x17, 0x01, 0xb4, 0x01, - 0xff, 0xe1, 0x04, 0x17, 0x01, 0x42, 0x22, 0x00, 0x0c, 0x17, 0x01, 0xb4, - 0x01, 0xff, 0xe1, 0x41, 0x17, 0x01, 0x42, 0x22, 0x00, 0x42, 0x17, 0x41, - 0xe1, 0x06, 0x17, 0x01, 0x42, 0x22, 0x00, 0x07, 0x17, 0x41, 0xe1, 0x03, - 0x17, 0x01, 0x42, 0x24, 0x02, 0x02, 0x17, 0x01, 0x42, 0xff, 0x04, 0x45, - 0x17, 0x01, 0x42, 0x34, 0x22, 0x10, 0x17, 0x41, 0xe1, 0x0e, 0x17, 0x01, - 0x42, 0x74, 0x00, 0x46, 0x17, 0x41, 0xe1, 0x00, 0x17, 0x01, 0x42, 0x22, - 0x00, 0x01, 0x17, 0x41, 0xe1, 0x0a, 0x17, 0x01, 0x42, 0x22, 0x00, 0x19, - 0x17, 0x41, 0xe1, 0x15, 0x17, 0x01, 0x42, 0x22, 0x00, 0x17, 0x17, 0x41, - 0xe1, 0x13, 0x17, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x14, 0x17, 0x41, - 0xe1, 0x43, 0x17, 0x01, 0x42, 0x22, 0x00, 0x44, 0x17, 0x41, 0xe1, 0x40, - 0x17, 0x01, 0x42, 0x22, 0x00, 0x0b, 0x17, 0x41, 0xe1, 0x08, 0x17, 0x01, - 0x42, 0x22, 0x00, 0x18, 0x17, 0x41, 0x09, 0xa3, 0x11, 0x01, 0xff, 0x42, - 0x16, 0x00, 0x1a, 0x17, 0x01, 0x42, 0x24, 0x02, 0x16, 0x17, 0x01, 0x42, - 0x12, 0x00, 0x05, 0x17, 0x41, 0x45, 0xc3, 0x0a, 0x38, 0x17, 0x01, 0xa6, - 0x2e, 0x44, 0x46, 0x2a, 0x39, 0x17, 0x01, 0x43, 0xbf, 0x0a, 0x31, 0x17, - 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x30, 0x17, 0x41, 0x44, - 0x25, 0x01, 0x33, 0x17, 0x01, 0x42, 0x15, 0x02, 0x32, 0x17, 0x41, 0x44, - 0x27, 0x1d, 0x37, 0x17, 0x01, 0x42, 0x60, 0x25, 0x36, 0x17, 0x41, 0x43, - 0xa7, 0x05, 0x35, 0x17, 0x01, 0x43, 0xcb, 0x06, 0x34, 0x17, 0x41, 0xac, - 0x06, 0x42, 0x71, 0x00, 0x1e, 0x17, 0x41, 0xe1, 0x1d, 0x17, 0x01, 0x4a, - 0x55, 0xa9, 0x1f, 0x17, 0x41, 0x05, 0x86, 0xe3, 0x06, 0x4c, 0xad, 0x92, - 0xa1, 0xf6, 0x41, 0x4a, 0x67, 0xa6, 0x02, 0x01, 0x01, 0x59, 0x61, 0x23, - 0x3c, 0x01, 0x01, 0x5c, 0xfe, 0x17, 0x3d, 0x01, 0x01, 0x08, 0x05, 0x18, - 0x84, 0x03, 0x07, 0x2f, 0x39, 0x38, 0xb7, 0x01, 0xff, 0x06, 0xe2, 0x13, - 0x11, 0x0e, 0x32, 0x79, 0x01, 0xff, 0x43, 0xd4, 0x09, 0x01, 0x01, 0x01, - 0x44, 0xc2, 0x07, 0x00, 0x01, 0x41, 0x49, 0x33, 0xb4, 0x37, 0x01, 0x01, - 0xa6, 0x0c, 0x4e, 0x82, 0x7a, 0x39, 0x01, 0x01, 0x4d, 0x6e, 0x87, 0x3a, - 0x01, 0x41, 0x4c, 0x0e, 0x18, 0x38, 0x01, 0x01, 0x4d, 0x80, 0x85, 0x3b, - 0x01, 0x41, 0x45, 0xc3, 0x0a, 0x0e, 0x01, 0x81, 0xa7, 0x02, 0xa6, 0xd9, - 0x01, 0x44, 0x46, 0x2a, 0x0f, 0x01, 0x81, 0xb6, 0x01, 0x43, 0xbf, 0x0a, - 0x07, 0x01, 0x81, 0x9f, 0x01, 0xb3, 0x59, 0xb4, 0x01, 0xff, 0x42, 0x92, - 0x01, 0x10, 0x01, 0x81, 0x49, 0xa8, 0x24, 0xb7, 0x01, 0xff, 0x44, 0x29, - 0x1d, 0x11, 0x01, 0x81, 0x14, 0xef, 0x08, 0x01, 0xc1, 0x00, 0x80, 0x01, - 0xff, 0x47, 0x22, 0x11, 0x1a, 0x01, 0x01, 0x48, 0xd5, 0x5c, 0x23, 0x01, - 0x41, 0x49, 0xd4, 0x5c, 0x2c, 0x01, 0x41, 0x44, 0x2c, 0x11, 0x12, 0x01, - 0x81, 0x16, 0x43, 0x26, 0x01, 0x09, 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, - 0x47, 0x22, 0x11, 0x1b, 0x01, 0x01, 0x48, 0xd5, 0x5c, 0x24, 0x01, 0x41, - 0x49, 0xd4, 0x5c, 0x2d, 0x01, 0x41, 0x49, 0xd4, 0x5c, 0x2b, 0x01, 0x41, - 0x44, 0x27, 0x1d, 0x0d, 0x01, 0x81, 0x22, 0x42, 0x60, 0x25, 0x0c, 0x01, - 0xc1, 0x00, 0x80, 0x0d, 0x42, 0x2e, 0x11, 0x15, 0x01, 0xc1, 0x00, 0x49, - 0xd4, 0x5c, 0x30, 0x01, 0x41, 0x47, 0x22, 0x11, 0x1e, 0x01, 0x01, 0x48, - 0xd5, 0x5c, 0x27, 0x01, 0x41, 0x80, 0x0d, 0x42, 0x2e, 0x11, 0x16, 0x01, - 0xc1, 0x00, 0x49, 0xd4, 0x5c, 0x31, 0x01, 0x41, 0x47, 0x22, 0x11, 0x1f, - 0x01, 0x01, 0x48, 0xd5, 0x5c, 0x28, 0x01, 0x41, 0x80, 0x01, 0xff, 0x47, - 0x22, 0x11, 0x19, 0x01, 0x01, 0x48, 0xd5, 0x5c, 0x22, 0x01, 0x41, 0x80, - 0x0d, 0x42, 0x2e, 0x11, 0x18, 0x01, 0xc1, 0x00, 0x49, 0xd4, 0x5c, 0x33, - 0x01, 0x41, 0x47, 0x22, 0x11, 0x21, 0x01, 0x01, 0x48, 0xd5, 0x5c, 0x2a, - 0x01, 0x41, 0xa9, 0x26, 0xaf, 0x01, 0xff, 0x43, 0x2d, 0x11, 0x13, 0x01, - 0x81, 0x16, 0x42, 0x42, 0x00, 0x0a, 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, - 0x47, 0x22, 0x11, 0x1c, 0x01, 0x01, 0x48, 0xd5, 0x5c, 0x25, 0x01, 0x41, - 0x49, 0xd4, 0x5c, 0x2e, 0x01, 0x41, 0x43, 0x09, 0x4c, 0x14, 0x01, 0x81, - 0x16, 0x42, 0x32, 0x00, 0x0b, 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, - 0x22, 0x11, 0x1d, 0x01, 0x01, 0x48, 0xd5, 0x5c, 0x26, 0x01, 0x41, 0x49, - 0xd4, 0x5c, 0x2f, 0x01, 0x41, 0x80, 0x0b, 0xf9, 0x17, 0x01, 0xc1, 0x00, - 0x49, 0xd4, 0x5c, 0x32, 0x01, 0x41, 0x47, 0x22, 0x11, 0x20, 0x01, 0x01, - 0x48, 0xd5, 0x5c, 0x29, 0x01, 0x41, 0x4e, 0x82, 0x7a, 0x3e, 0x01, 0x01, - 0x4d, 0x6e, 0x87, 0x3f, 0x01, 0x41, 0x56, 0x1d, 0x33, 0x01, 0x21, 0x00, - 0x4e, 0xca, 0x76, 0x79, 0xfa, 0x01, 0x48, 0x3a, 0xc4, 0x2c, 0x26, 0x00, - 0x04, 0xfd, 0x13, 0x14, 0xad, 0x06, 0x43, 0x8c, 0x04, 0xd1, 0xf9, 0x41, - 0x44, 0x61, 0x83, 0xe5, 0x2b, 0x00, 0x4e, 0x80, 0x77, 0x9f, 0xf3, 0x41, - 0x4f, 0x01, 0x69, 0x44, 0xe9, 0x01, 0xa3, 0xd7, 0x02, 0x06, 0xc4, 0x06, - 0x90, 0x02, 0x07, 0xe0, 0x6b, 0xff, 0x01, 0x45, 0x56, 0x00, 0x47, 0xe9, - 0x01, 0x08, 0x4c, 0x16, 0xe8, 0x01, 0xae, 0xd9, 0x01, 0x0d, 0x4b, 0x08, - 0x06, 0x50, 0x0a, 0x67, 0x45, 0xe9, 0x41, 0x44, 0x01, 0x69, 0x22, 0xe9, - 0x01, 0xa2, 0xbc, 0x01, 0x43, 0x0d, 0x16, 0x37, 0xe9, 0x01, 0xa4, 0xa7, - 0x01, 0xe5, 0x2b, 0xe9, 0x01, 0x42, 0xe1, 0x07, 0x2c, 0xe9, 0x01, 0xa7, - 0x90, 0x01, 0x42, 0x22, 0x00, 0x38, 0xe9, 0x01, 0xe9, 0x2d, 0xe9, 0x01, - 0x44, 0x72, 0xed, 0x36, 0xe9, 0x01, 0xab, 0x6c, 0x44, 0x9e, 0x87, 0x24, - 0xe9, 0x01, 0x44, 0xee, 0xed, 0x25, 0xe9, 0x01, 0xae, 0x4c, 0xef, 0x2e, - 0xe9, 0x01, 0x42, 0x6f, 0x02, 0x28, 0xe9, 0x01, 0x44, 0xf6, 0xe6, 0x39, - 0xe9, 0x01, 0x42, 0x71, 0x00, 0x2a, 0xe9, 0x01, 0xb3, 0x28, 0x42, 0x5c, - 0x01, 0x3c, 0xe9, 0x01, 0xf5, 0x35, 0xe9, 0x01, 0x42, 0xa6, 0x0a, 0x3e, - 0xe9, 0x01, 0x43, 0xc0, 0x88, 0x31, 0xe9, 0x01, 0xb9, 0x06, 0x43, 0x46, - 0xbf, 0x41, 0xe9, 0x41, 0xe1, 0x34, 0xe9, 0x01, 0x42, 0xb0, 0x01, 0x30, - 0xe9, 0x41, 0x42, 0x22, 0x00, 0x43, 0xe9, 0x01, 0x49, 0x3e, 0xb8, 0x27, - 0xe9, 0x41, 0x42, 0x22, 0x00, 0x3d, 0xe9, 0x01, 0x42, 0xf3, 0x0a, 0x32, - 0xe9, 0x01, 0x42, 0x34, 0x22, 0x3b, 0xe9, 0x41, 0x42, 0xf5, 0x13, 0x33, - 0xe9, 0x01, 0x42, 0x22, 0x00, 0x3f, 0xe9, 0x01, 0x42, 0x9c, 0x01, 0x42, - 0xe9, 0x41, 0xe1, 0x3a, 0xe9, 0x01, 0x42, 0x8c, 0x05, 0x40, 0xe9, 0x41, - 0x44, 0xe9, 0x18, 0x23, 0xe9, 0x01, 0x42, 0x22, 0x00, 0x2f, 0xe9, 0x41, - 0xe1, 0x26, 0xe9, 0x01, 0x42, 0xb0, 0x01, 0x29, 0xe9, 0x41, 0x50, 0xf6, - 0x5a, 0x4b, 0xe9, 0x01, 0x44, 0x5b, 0x3e, 0x4a, 0xe9, 0x41, 0x50, 0xad, - 0x00, 0x5e, 0xe9, 0x01, 0x4d, 0xd6, 0x33, 0x5f, 0xe9, 0x41, 0x54, 0xd3, - 0x40, 0x49, 0xe9, 0x01, 0x48, 0xb5, 0x00, 0x46, 0xe9, 0x41, 0x45, 0xc3, - 0x0a, 0x58, 0xe9, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x59, 0xe9, 0x01, - 0x43, 0xbf, 0x0a, 0x51, 0xe9, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, - 0x1d, 0x50, 0xe9, 0x41, 0x44, 0x25, 0x01, 0x53, 0xe9, 0x01, 0x42, 0x15, - 0x02, 0x52, 0xe9, 0x41, 0x44, 0x27, 0x1d, 0x57, 0xe9, 0x01, 0x42, 0x60, - 0x25, 0x56, 0xe9, 0x41, 0x43, 0xa7, 0x05, 0x55, 0xe9, 0x01, 0x43, 0xcb, - 0x06, 0x54, 0xe9, 0x41, 0x0e, 0xba, 0x05, 0x06, 0x51, 0x58, 0x32, 0x48, - 0xe9, 0x41, 0x44, 0x01, 0x69, 0x00, 0xe9, 0x01, 0xa2, 0xbc, 0x01, 0x43, - 0x0d, 0x16, 0x15, 0xe9, 0x01, 0xa4, 0xa7, 0x01, 0xe5, 0x09, 0xe9, 0x01, - 0x42, 0xe1, 0x07, 0x0a, 0xe9, 0x01, 0xa7, 0x90, 0x01, 0x42, 0x22, 0x00, - 0x16, 0xe9, 0x01, 0xe9, 0x0b, 0xe9, 0x01, 0x44, 0x72, 0xed, 0x14, 0xe9, - 0x01, 0xab, 0x6c, 0x44, 0x9e, 0x87, 0x02, 0xe9, 0x01, 0x44, 0xee, 0xed, - 0x03, 0xe9, 0x01, 0xae, 0x4c, 0xef, 0x0c, 0xe9, 0x01, 0x42, 0x6f, 0x02, - 0x06, 0xe9, 0x01, 0x44, 0xf6, 0xe6, 0x17, 0xe9, 0x01, 0x42, 0x71, 0x00, - 0x08, 0xe9, 0x01, 0xb3, 0x28, 0x42, 0x5c, 0x01, 0x1a, 0xe9, 0x01, 0xf5, - 0x13, 0xe9, 0x01, 0x42, 0xa6, 0x0a, 0x1c, 0xe9, 0x01, 0x43, 0xc0, 0x88, - 0x0f, 0xe9, 0x01, 0xb9, 0x06, 0x43, 0x46, 0xbf, 0x1f, 0xe9, 0x41, 0xe1, - 0x12, 0xe9, 0x01, 0x42, 0xb0, 0x01, 0x0e, 0xe9, 0x41, 0x42, 0x22, 0x00, - 0x21, 0xe9, 0x01, 0x49, 0x3e, 0xb8, 0x05, 0xe9, 0x41, 0x42, 0x22, 0x00, - 0x1b, 0xe9, 0x01, 0x42, 0xf3, 0x0a, 0x10, 0xe9, 0x01, 0x42, 0x34, 0x22, - 0x19, 0xe9, 0x41, 0x42, 0xf5, 0x13, 0x11, 0xe9, 0x01, 0x42, 0x22, 0x00, - 0x1d, 0xe9, 0x01, 0x42, 0x9c, 0x01, 0x20, 0xe9, 0x41, 0xe1, 0x18, 0xe9, - 0x01, 0x42, 0x8c, 0x05, 0x1e, 0xe9, 0x41, 0x44, 0xe9, 0x18, 0x01, 0xe9, - 0x01, 0x42, 0x22, 0x00, 0x0d, 0xe9, 0x41, 0xe1, 0x04, 0xe9, 0x01, 0x42, - 0xb0, 0x01, 0x07, 0xe9, 0x41, 0x48, 0x43, 0x2d, 0xe6, 0x23, 0x00, 0x02, - 0xe8, 0x04, 0x27, 0x49, 0x9f, 0x50, 0x06, 0x00, 0x00, 0x07, 0x9f, 0xd3, - 0x11, 0x05, 0x2b, 0x38, 0x01, 0xff, 0x45, 0xb0, 0x04, 0xb4, 0x00, 0x00, - 0x44, 0x05, 0x02, 0x9f, 0x29, 0x40, 0x53, 0xf2, 0x46, 0x6d, 0x20, 0x00, - 0x52, 0x50, 0x54, 0x6b, 0x20, 0x40, 0x45, 0x19, 0xe7, 0x97, 0xfa, 0x01, - 0x46, 0x31, 0x69, 0x00, 0x21, 0x40 }; + 0x01, 0xd8, 0x07, 0x44, 0x01, 0xd9, 0x08, 0x44, 0x41, 0x57, 0xff, 0x2c, + 0x3f, 0x2a, 0x00, 0x47, 0xbf, 0xcf, 0x91, 0xf6, 0x01, 0x4f, 0xb7, 0x6c, + 0xc8, 0xf3, 0x01, 0xb0, 0x01, 0xff, 0x46, 0x15, 0x3e, 0x26, 0x00, 0x00, + 0xa8, 0x01, 0xff, 0x46, 0x34, 0xdd, 0xcf, 0xce, 0x01, 0x43, 0x4e, 0x03, + 0xfa, 0xf3, 0x41, 0x04, 0xfe, 0x05, 0xf3, 0x07, 0x14, 0x18, 0x41, 0xa8, + 0x01, 0xa5, 0x93, 0x01, 0x04, 0x75, 0xf0, 0x38, 0x02, 0x14, 0x00, 0x28, + 0x0b, 0xac, 0x6a, 0x11, 0x06, 0xf3, 0x11, 0x01, 0xff, 0x5a, 0xfe, 0x1f, + 0xd5, 0x26, 0x00, 0x4e, 0xfd, 0x78, 0x87, 0x23, 0x40, 0x4b, 0xf3, 0x28, + 0x4a, 0x22, 0x00, 0x42, 0x1e, 0x00, 0x48, 0x22, 0xc0, 0x00, 0x57, 0xc9, + 0x04, 0x6f, 0x2a, 0x40, 0x4e, 0x09, 0x76, 0x2e, 0x23, 0x00, 0x48, 0xf8, + 0x0c, 0x4c, 0x22, 0x40, 0x0e, 0x87, 0x76, 0x47, 0x47, 0x54, 0xd3, 0x7e, + 0xf4, 0x81, 0x24, 0xb3, 0x01, 0xff, 0x06, 0x26, 0xdf, 0x11, 0x05, 0x6c, + 0x18, 0x01, 0xff, 0x50, 0x76, 0x61, 0x4f, 0xcc, 0x01, 0x4e, 0x69, 0x7a, + 0x4e, 0xcc, 0x41, 0x49, 0x80, 0xb7, 0x52, 0xcc, 0x01, 0x46, 0x61, 0x2f, + 0x53, 0xcc, 0x41, 0x80, 0x01, 0xff, 0x4b, 0x29, 0x9a, 0x4d, 0xcc, 0x01, + 0x49, 0x68, 0xbd, 0x4c, 0xcc, 0x01, 0x05, 0x14, 0xeb, 0x01, 0xff, 0xd1, + 0x54, 0xcc, 0x01, 0xd2, 0x55, 0xcc, 0x41, 0x44, 0xc3, 0x00, 0x51, 0xcc, + 0x01, 0x45, 0xc8, 0x00, 0x50, 0xcc, 0x41, 0x48, 0x74, 0x98, 0x35, 0x21, + 0x00, 0x44, 0xed, 0xe5, 0x97, 0x26, 0x00, 0x42, 0x34, 0x00, 0x07, 0x00, + 0x40, 0xa1, 0xde, 0x05, 0xa2, 0xa7, 0x05, 0xa3, 0xc6, 0x04, 0xa4, 0xa5, + 0x04, 0x45, 0x52, 0x72, 0x03, 0xf7, 0x01, 0x44, 0x43, 0x91, 0x02, 0xf7, + 0x01, 0xa7, 0x8a, 0x04, 0xa8, 0xe8, 0x03, 0x04, 0x3b, 0x20, 0xd0, 0x03, + 0xac, 0xc1, 0x03, 0xad, 0xa0, 0x03, 0x02, 0x51, 0x03, 0x8f, 0x03, 0x43, + 0x29, 0xe2, 0x46, 0xf7, 0x01, 0xb0, 0xd6, 0x02, 0x03, 0xd6, 0x01, 0xc5, + 0x02, 0xb2, 0xf3, 0x01, 0xb3, 0x70, 0xb4, 0x45, 0x45, 0xeb, 0xeb, 0x55, + 0xf7, 0x01, 0xb6, 0x0f, 0x02, 0xa9, 0x01, 0x01, 0xff, 0x43, 0x8b, 0x00, + 0x04, 0xf7, 0x01, 0xf8, 0x4a, 0xf7, 0x41, 0x48, 0xc0, 0xc5, 0x28, 0xf7, + 0x01, 0xa9, 0x01, 0xff, 0x45, 0xfd, 0xe8, 0x0a, 0xf7, 0x81, 0x0d, 0x45, + 0x7d, 0xeb, 0x16, 0xf7, 0xc1, 0x00, 0x42, 0x87, 0xf3, 0x17, 0xf7, 0x41, + 0x4c, 0x47, 0x8b, 0x2f, 0xf7, 0x01, 0x8d, 0x01, 0xff, 0xd2, 0x0b, 0xf7, + 0x01, 0xd3, 0x0c, 0xf7, 0x41, 0x45, 0x6b, 0xe4, 0x3f, 0xf7, 0x81, 0x1c, + 0x02, 0x9e, 0x01, 0x0c, 0x46, 0xd1, 0x80, 0x51, 0xf7, 0x01, 0x44, 0xf1, + 0xf2, 0x4d, 0xf7, 0x41, 0x44, 0x62, 0x98, 0x29, 0xf7, 0x01, 0x45, 0x06, + 0x8b, 0x48, 0xf7, 0x41, 0x42, 0x87, 0xf3, 0x40, 0xf7, 0x41, 0x02, 0x13, + 0x00, 0x61, 0x4e, 0x5d, 0x76, 0x4f, 0xf7, 0x01, 0x45, 0x5e, 0xe7, 0x1b, + 0xf7, 0x01, 0x43, 0xba, 0xd3, 0x54, 0xf7, 0x01, 0x45, 0x58, 0xbf, 0x47, + 0xf7, 0x01, 0xb4, 0x34, 0xb5, 0x01, 0xff, 0x06, 0xff, 0x62, 0x06, 0x44, + 0x47, 0x52, 0x0d, 0xf7, 0x41, 0x05, 0x24, 0x43, 0x06, 0x43, 0xb5, 0x00, + 0x5e, 0xf7, 0x41, 0x48, 0x4b, 0x8b, 0x2c, 0xf7, 0x01, 0x46, 0xd1, 0x50, + 0x22, 0xf7, 0x01, 0x08, 0x98, 0xca, 0x01, 0xff, 0x48, 0x4b, 0x8b, 0x2e, + 0xf7, 0x01, 0x46, 0xd1, 0x50, 0x27, 0xf7, 0x41, 0x4d, 0xca, 0x80, 0x52, + 0xf7, 0x01, 0x53, 0x76, 0x4c, 0x5c, 0xf7, 0xc1, 0x00, 0x42, 0x87, 0xf3, + 0x5d, 0xf7, 0x41, 0x49, 0x0a, 0xb5, 0x39, 0xf7, 0x01, 0xf4, 0x14, 0xf7, + 0xc1, 0x00, 0x04, 0xf3, 0x01, 0x01, 0xff, 0x48, 0x4b, 0x8b, 0x2d, 0xf7, + 0x01, 0x52, 0xd1, 0x50, 0x26, 0xf7, 0x41, 0xa5, 0x0d, 0x48, 0x00, 0xc9, + 0x18, 0xf7, 0xc1, 0x00, 0x42, 0x87, 0xf3, 0x19, 0xf7, 0x41, 0x45, 0x2a, + 0xe4, 0x3b, 0xf7, 0x81, 0x33, 0x45, 0xb9, 0xe6, 0x32, 0xf7, 0x81, 0x06, + 0x44, 0x54, 0x09, 0x6d, 0xf7, 0x41, 0x04, 0xf3, 0x01, 0x0f, 0x8d, 0x01, + 0xff, 0xd2, 0x33, 0xf7, 0x01, 0xd3, 0x34, 0xf7, 0x01, 0xd4, 0x35, 0xf7, + 0x41, 0x48, 0x4b, 0x8b, 0x30, 0xf7, 0x81, 0x06, 0x44, 0x3b, 0x20, 0x1f, + 0xf7, 0x41, 0x42, 0x87, 0xf3, 0x31, 0xf7, 0x41, 0x42, 0x87, 0xf3, 0x3c, + 0xf7, 0x41, 0x47, 0xf0, 0xcf, 0x41, 0xf7, 0x01, 0x49, 0xab, 0xbc, 0x00, + 0xf7, 0x41, 0x52, 0x39, 0x52, 0x0e, 0xf7, 0x01, 0xaf, 0x15, 0x4a, 0x05, + 0xb0, 0x5f, 0xf7, 0x01, 0xb5, 0x01, 0xff, 0x44, 0x4d, 0xf2, 0x63, 0xf7, + 0x01, 0x4a, 0x17, 0xb2, 0x64, 0xf7, 0x41, 0x47, 0x17, 0xd6, 0x58, 0xf7, + 0x01, 0x44, 0x29, 0xf3, 0x4b, 0xf7, 0xc1, 0x00, 0x48, 0x78, 0xc5, 0x5a, + 0xf7, 0x41, 0x43, 0xca, 0x00, 0x6f, 0xf7, 0x01, 0x43, 0x76, 0x02, 0x15, + 0xf7, 0x41, 0x48, 0x78, 0xc3, 0x38, 0xf7, 0x01, 0x50, 0xf6, 0x62, 0x10, + 0xf7, 0x81, 0x06, 0x44, 0x49, 0xa2, 0x71, 0xf7, 0x41, 0x8d, 0x01, 0xff, + 0xd2, 0x11, 0xf7, 0x01, 0xd3, 0x12, 0xf7, 0x41, 0x47, 0x98, 0xd0, 0x2a, + 0xf7, 0x01, 0x48, 0x10, 0xc9, 0x53, 0xf7, 0x41, 0x44, 0x62, 0x98, 0x1c, + 0xf7, 0x81, 0x06, 0x4b, 0x5b, 0x98, 0x21, 0xf7, 0x41, 0x42, 0x87, 0xf3, + 0x1d, 0xf7, 0x41, 0x04, 0x23, 0x00, 0x0f, 0xaf, 0x01, 0xff, 0x48, 0x88, + 0xca, 0x56, 0xf7, 0x01, 0x42, 0x42, 0x00, 0x6e, 0xf7, 0x41, 0x44, 0xe3, + 0xb7, 0x72, 0xf7, 0x01, 0x45, 0xb6, 0xe9, 0x73, 0xf7, 0x41, 0x43, 0xe1, + 0x1a, 0x1a, 0xf7, 0x01, 0x42, 0x48, 0x04, 0x49, 0xf7, 0x41, 0x48, 0xd8, + 0xc3, 0x70, 0xf7, 0x01, 0x02, 0x5f, 0x03, 0x01, 0xff, 0x45, 0x05, 0xeb, + 0x61, 0xf7, 0x81, 0x06, 0x44, 0xfe, 0x34, 0x60, 0xf7, 0x41, 0x42, 0x87, + 0xf3, 0x62, 0xf7, 0x41, 0xa1, 0x4a, 0x47, 0xfd, 0xd1, 0x13, 0xf7, 0x01, + 0x06, 0xd2, 0x50, 0x34, 0xb2, 0x01, 0xff, 0x08, 0x08, 0xc9, 0x1a, 0x46, + 0xdc, 0xe0, 0x65, 0xf7, 0xc1, 0x00, 0x8d, 0x01, 0xff, 0xd2, 0x66, 0xf7, + 0x01, 0xd3, 0x67, 0xf7, 0x01, 0xd4, 0x68, 0xf7, 0x01, 0xd5, 0x69, 0xf7, + 0x41, 0x46, 0xd1, 0x50, 0x23, 0xf7, 0x81, 0x06, 0x44, 0x3b, 0x20, 0x1e, + 0xf7, 0x41, 0x42, 0x87, 0xf3, 0x24, 0xf7, 0x41, 0x4b, 0xd8, 0x50, 0x25, + 0xf7, 0x01, 0x43, 0xae, 0x0f, 0x20, 0xf7, 0x41, 0x46, 0x06, 0xdb, 0x50, + 0xf7, 0x01, 0x42, 0x18, 0xf5, 0x4c, 0xf7, 0x01, 0x4b, 0x77, 0xa1, 0x4e, + 0xf7, 0x41, 0x07, 0x2c, 0xcf, 0x24, 0x4a, 0x09, 0xac, 0x3e, 0xf7, 0x01, + 0x4b, 0x33, 0x9e, 0x0f, 0xf7, 0x01, 0x44, 0xe5, 0xf1, 0x42, 0xf7, 0x81, + 0x06, 0x44, 0x46, 0x21, 0x59, 0xf7, 0x41, 0x8d, 0x01, 0xff, 0xd2, 0x43, + 0xf7, 0x01, 0xd3, 0x44, 0xf7, 0x41, 0x44, 0x25, 0xf1, 0x6b, 0xf7, 0x01, + 0x47, 0x21, 0xd7, 0x6c, 0xf7, 0x41, 0x42, 0x46, 0x00, 0x01, 0xf7, 0x01, + 0xac, 0x44, 0x46, 0xfe, 0x2c, 0x5b, 0xf7, 0x01, 0x4b, 0x38, 0xa0, 0x2b, + 0xf7, 0x01, 0x03, 0x7c, 0x00, 0x12, 0x46, 0xaa, 0xdf, 0x3a, 0xf7, 0x01, + 0x44, 0x1b, 0x7c, 0x57, 0xf7, 0x01, 0x4a, 0x07, 0xb3, 0x3d, 0xf7, 0x41, + 0x80, 0x06, 0x46, 0xd2, 0xdb, 0x05, 0xf7, 0x41, 0x45, 0x42, 0xea, 0x06, + 0xf7, 0x81, 0x0d, 0x45, 0x22, 0xec, 0x08, 0xf7, 0xc1, 0x00, 0x42, 0x87, + 0xf3, 0x09, 0xf7, 0x41, 0x42, 0x87, 0xf3, 0x07, 0xf7, 0x41, 0x45, 0xec, + 0xe5, 0x6a, 0xf7, 0x01, 0x44, 0xc9, 0xf0, 0x36, 0xf7, 0x81, 0x06, 0x42, + 0x48, 0x04, 0x45, 0xf7, 0x41, 0x42, 0x87, 0xf3, 0x37, 0xf7, 0x41, 0x4b, + 0x84, 0x99, 0xfa, 0xfb, 0x01, 0x45, 0x38, 0x0b, 0xf0, 0x23, 0x40, 0x80, + 0x01, 0xff, 0x48, 0x88, 0xc3, 0xec, 0xf6, 0x01, 0x49, 0xad, 0xb7, 0xeb, + 0xf6, 0x41, 0x16, 0x3d, 0x33, 0x8c, 0x03, 0x06, 0xef, 0x06, 0xc5, 0x02, + 0x07, 0xec, 0x05, 0x6b, 0x08, 0x89, 0xae, 0x5b, 0xb3, 0x34, 0x0b, 0x40, + 0x77, 0x01, 0xff, 0xe1, 0x20, 0x17, 0x81, 0x1a, 0xe5, 0x26, 0x17, 0x01, + 0xe9, 0x22, 0x17, 0x81, 0x0d, 0xef, 0x28, 0x17, 0x01, 0xf5, 0x24, 0x17, + 0xc1, 0x00, 0xf5, 0x25, 0x17, 0x41, 0xe9, 0x23, 0x17, 0x41, 0xe1, 0x21, + 0x17, 0x01, 0xe9, 0x29, 0x17, 0x01, 0xed, 0x2a, 0x17, 0x01, 0xf7, 0x27, + 0x17, 0x41, 0x04, 0x5b, 0x03, 0x06, 0x48, 0x04, 0xa3, 0x3f, 0x17, 0x41, + 0x46, 0x64, 0xdd, 0x2b, 0x17, 0x01, 0x45, 0x97, 0xea, 0x3e, 0x17, 0x01, + 0xb3, 0x01, 0xff, 0x46, 0xaf, 0x0a, 0x3d, 0x17, 0x01, 0x4c, 0xbf, 0x91, + 0x3c, 0x17, 0x41, 0x42, 0x92, 0x01, 0x3a, 0x17, 0x01, 0x45, 0x7f, 0x2c, + 0x3b, 0x17, 0x41, 0xe1, 0x12, 0x17, 0x81, 0xb9, 0x01, 0xa2, 0xac, 0x01, + 0xa3, 0x9f, 0x01, 0xa4, 0x86, 0x01, 0xa7, 0x7a, 0x42, 0x22, 0x00, 0x11, + 0x17, 0x01, 0xaa, 0x68, 0xab, 0x5c, 0xac, 0x50, 0x42, 0x6c, 0x00, 0x09, + 0x17, 0x01, 0xae, 0x32, 0xb0, 0x26, 0x42, 0x71, 0x00, 0x0d, 0x17, 0x01, + 0x42, 0x40, 0x06, 0x0f, 0x17, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x04, 0x17, + 0x01, 0x42, 0x22, 0x00, 0x0c, 0x17, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x41, + 0x17, 0x01, 0x42, 0x22, 0x00, 0x42, 0x17, 0x41, 0xe1, 0x06, 0x17, 0x01, + 0x42, 0x22, 0x00, 0x07, 0x17, 0x41, 0xe1, 0x03, 0x17, 0x01, 0x42, 0x24, + 0x02, 0x02, 0x17, 0x01, 0x42, 0x2a, 0x05, 0x45, 0x17, 0x01, 0x42, 0xbc, + 0x22, 0x10, 0x17, 0x41, 0xe1, 0x0e, 0x17, 0x01, 0x42, 0x74, 0x00, 0x46, + 0x17, 0x41, 0xe1, 0x00, 0x17, 0x01, 0x42, 0x22, 0x00, 0x01, 0x17, 0x41, + 0xe1, 0x0a, 0x17, 0x01, 0x42, 0x22, 0x00, 0x19, 0x17, 0x41, 0xe1, 0x15, + 0x17, 0x01, 0x42, 0x22, 0x00, 0x17, 0x17, 0x41, 0xe1, 0x13, 0x17, 0x01, + 0xa4, 0x06, 0x42, 0x22, 0x00, 0x14, 0x17, 0x41, 0xe1, 0x43, 0x17, 0x01, + 0x42, 0x22, 0x00, 0x44, 0x17, 0x41, 0xe1, 0x40, 0x17, 0x01, 0x42, 0x22, + 0x00, 0x0b, 0x17, 0x41, 0xe1, 0x08, 0x17, 0x01, 0x42, 0x22, 0x00, 0x18, + 0x17, 0x41, 0x09, 0xf2, 0x11, 0x01, 0xff, 0x42, 0x16, 0x00, 0x1a, 0x17, + 0x01, 0x42, 0x24, 0x02, 0x16, 0x17, 0x01, 0x42, 0x12, 0x00, 0x05, 0x17, + 0x41, 0x45, 0x12, 0x0b, 0x38, 0x17, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, + 0x39, 0x17, 0x01, 0x43, 0x0e, 0x0b, 0x31, 0x17, 0x01, 0xb3, 0x14, 0xb4, + 0x06, 0x44, 0x43, 0x1e, 0x30, 0x17, 0x41, 0x44, 0x25, 0x01, 0x33, 0x17, + 0x01, 0x42, 0x15, 0x02, 0x32, 0x17, 0x41, 0x44, 0xc9, 0x1d, 0x37, 0x17, + 0x01, 0x42, 0x01, 0x26, 0x36, 0x17, 0x41, 0x43, 0xd2, 0x05, 0x35, 0x17, + 0x01, 0x43, 0xf6, 0x06, 0x34, 0x17, 0x41, 0xac, 0x06, 0x42, 0x71, 0x00, + 0x1e, 0x17, 0x41, 0xe1, 0x1d, 0x17, 0x01, 0x4a, 0x91, 0xab, 0x1f, 0x17, + 0x41, 0x05, 0x9b, 0xe6, 0x06, 0x4c, 0x77, 0x94, 0xa1, 0xf6, 0x41, 0x4a, + 0xa3, 0xa8, 0x02, 0x01, 0x01, 0x59, 0xe9, 0x23, 0x3c, 0x01, 0x01, 0x5c, + 0x6a, 0x18, 0x3d, 0x01, 0x01, 0x08, 0x71, 0x18, 0x84, 0x03, 0x07, 0xff, + 0x39, 0x38, 0xb7, 0x01, 0xff, 0x06, 0x31, 0x14, 0x11, 0x0e, 0x93, 0x7a, + 0x01, 0xff, 0x43, 0x23, 0x0a, 0x01, 0x01, 0x01, 0x44, 0xed, 0x07, 0x00, + 0x01, 0x41, 0x49, 0x84, 0xb6, 0x37, 0x01, 0x01, 0xa6, 0x0c, 0x4e, 0xe3, + 0x7b, 0x39, 0x01, 0x01, 0x4d, 0x38, 0x89, 0x3a, 0x01, 0x41, 0x4c, 0x7a, + 0x18, 0x38, 0x01, 0x01, 0x4d, 0x3d, 0x87, 0x3b, 0x01, 0x41, 0x45, 0x12, + 0x0b, 0x0e, 0x01, 0x81, 0xa7, 0x02, 0xa6, 0xd9, 0x01, 0x44, 0xcf, 0x2a, + 0x0f, 0x01, 0x81, 0xb6, 0x01, 0x43, 0x0e, 0x0b, 0x07, 0x01, 0x81, 0x9f, + 0x01, 0xb3, 0x59, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x10, 0x01, 0x81, + 0x49, 0xa8, 0x24, 0xb7, 0x01, 0xff, 0x44, 0xcb, 0x1d, 0x11, 0x01, 0x81, + 0x14, 0xef, 0x08, 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, + 0x1a, 0x01, 0x01, 0x48, 0x40, 0x5e, 0x23, 0x01, 0x41, 0x49, 0x3f, 0x5e, + 0x2c, 0x01, 0x41, 0x44, 0x7b, 0x11, 0x12, 0x01, 0x81, 0x16, 0x43, 0x26, + 0x01, 0x09, 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x1b, + 0x01, 0x01, 0x48, 0x40, 0x5e, 0x24, 0x01, 0x41, 0x49, 0x3f, 0x5e, 0x2d, + 0x01, 0x41, 0x49, 0x3f, 0x5e, 0x2b, 0x01, 0x41, 0x44, 0xc9, 0x1d, 0x0d, + 0x01, 0x81, 0x22, 0x42, 0x01, 0x26, 0x0c, 0x01, 0xc1, 0x00, 0x80, 0x0d, + 0x42, 0x7d, 0x11, 0x15, 0x01, 0xc1, 0x00, 0x49, 0x3f, 0x5e, 0x30, 0x01, + 0x41, 0x47, 0x71, 0x11, 0x1e, 0x01, 0x01, 0x48, 0x40, 0x5e, 0x27, 0x01, + 0x41, 0x80, 0x0d, 0x42, 0x7d, 0x11, 0x16, 0x01, 0xc1, 0x00, 0x49, 0x3f, + 0x5e, 0x31, 0x01, 0x41, 0x47, 0x71, 0x11, 0x1f, 0x01, 0x01, 0x48, 0x40, + 0x5e, 0x28, 0x01, 0x41, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x19, 0x01, + 0x01, 0x48, 0x40, 0x5e, 0x22, 0x01, 0x41, 0x80, 0x0d, 0x42, 0x7d, 0x11, + 0x18, 0x01, 0xc1, 0x00, 0x49, 0x3f, 0x5e, 0x33, 0x01, 0x41, 0x47, 0x71, + 0x11, 0x21, 0x01, 0x01, 0x48, 0x40, 0x5e, 0x2a, 0x01, 0x41, 0xa9, 0x26, + 0xaf, 0x01, 0xff, 0x43, 0x7c, 0x11, 0x13, 0x01, 0x81, 0x16, 0x42, 0x42, + 0x00, 0x0a, 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x1c, + 0x01, 0x01, 0x48, 0x40, 0x5e, 0x25, 0x01, 0x41, 0x49, 0x3f, 0x5e, 0x2e, + 0x01, 0x41, 0x43, 0x52, 0x4d, 0x14, 0x01, 0x81, 0x16, 0x42, 0x32, 0x00, + 0x0b, 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x1d, 0x01, + 0x01, 0x48, 0x40, 0x5e, 0x26, 0x01, 0x41, 0x49, 0x3f, 0x5e, 0x2f, 0x01, + 0x41, 0x80, 0x0b, 0xf9, 0x17, 0x01, 0xc1, 0x00, 0x49, 0x3f, 0x5e, 0x32, + 0x01, 0x41, 0x47, 0x71, 0x11, 0x20, 0x01, 0x01, 0x48, 0x40, 0x5e, 0x29, + 0x01, 0x41, 0x4e, 0xe3, 0x7b, 0x3e, 0x01, 0x01, 0x4d, 0x38, 0x89, 0x3f, + 0x01, 0x41, 0x56, 0xed, 0x33, 0x01, 0x21, 0x00, 0x4e, 0x39, 0x78, 0x79, + 0xfa, 0x01, 0x48, 0xd8, 0xc6, 0x2c, 0x26, 0x00, 0x04, 0x4c, 0x14, 0x14, + 0xad, 0x06, 0x43, 0xb7, 0x04, 0xd1, 0xf9, 0x41, 0x44, 0x11, 0x85, 0xe5, + 0x2b, 0x00, 0x4e, 0xe1, 0x78, 0x9f, 0xf3, 0x41, 0x4f, 0x9b, 0x6a, 0x44, + 0xe9, 0x01, 0xa3, 0xd7, 0x02, 0x06, 0xef, 0x06, 0x90, 0x02, 0x07, 0x89, + 0x6d, 0xff, 0x01, 0x45, 0x56, 0x00, 0x47, 0xe9, 0x01, 0x08, 0xb8, 0x16, + 0xe8, 0x01, 0xae, 0xd9, 0x01, 0x0d, 0x76, 0x08, 0x06, 0x50, 0x86, 0x68, + 0x45, 0xe9, 0x41, 0x44, 0x9b, 0x6a, 0x22, 0xe9, 0x01, 0xa2, 0xbc, 0x01, + 0x43, 0x79, 0x16, 0x37, 0xe9, 0x01, 0xa4, 0xa7, 0x01, 0xe5, 0x2b, 0xe9, + 0x01, 0x42, 0x0c, 0x08, 0x2c, 0xe9, 0x01, 0xa7, 0x90, 0x01, 0x42, 0x22, + 0x00, 0x38, 0xe9, 0x01, 0xe9, 0x2d, 0xe9, 0x01, 0x44, 0xb1, 0xf0, 0x36, + 0xe9, 0x01, 0xab, 0x6c, 0x44, 0x68, 0x89, 0x24, 0xe9, 0x01, 0x44, 0x31, + 0xf1, 0x25, 0xe9, 0x01, 0xae, 0x4c, 0xef, 0x2e, 0xe9, 0x01, 0x42, 0x6f, + 0x02, 0x28, 0xe9, 0x01, 0x44, 0x1a, 0xea, 0x39, 0xe9, 0x01, 0x42, 0x71, + 0x00, 0x2a, 0xe9, 0x01, 0xb3, 0x28, 0x42, 0x5c, 0x01, 0x3c, 0xe9, 0x01, + 0xf5, 0x35, 0xe9, 0x01, 0x42, 0xf5, 0x0a, 0x3e, 0xe9, 0x01, 0x43, 0x8a, + 0x8a, 0x31, 0xe9, 0x01, 0xb9, 0x06, 0x43, 0xc4, 0xc1, 0x41, 0xe9, 0x41, + 0xe1, 0x34, 0xe9, 0x01, 0x42, 0xb0, 0x01, 0x30, 0xe9, 0x41, 0x42, 0x22, + 0x00, 0x43, 0xe9, 0x01, 0x49, 0xaa, 0xba, 0x27, 0xe9, 0x41, 0x42, 0x22, + 0x00, 0x3d, 0xe9, 0x01, 0x42, 0x42, 0x0b, 0x32, 0xe9, 0x01, 0x42, 0xbc, + 0x22, 0x3b, 0xe9, 0x41, 0x42, 0x44, 0x14, 0x33, 0xe9, 0x01, 0x42, 0x22, + 0x00, 0x3f, 0xe9, 0x01, 0x42, 0x9c, 0x01, 0x42, 0xe9, 0x41, 0xe1, 0x3a, + 0xe9, 0x01, 0x42, 0xb7, 0x05, 0x40, 0xe9, 0x41, 0x44, 0xd7, 0x2c, 0x23, + 0xe9, 0x01, 0x42, 0x22, 0x00, 0x2f, 0xe9, 0x41, 0xe1, 0x26, 0xe9, 0x01, + 0x42, 0xb0, 0x01, 0x29, 0xe9, 0x41, 0x50, 0x61, 0x5c, 0x4b, 0xe9, 0x01, + 0x44, 0x40, 0x3f, 0x4a, 0xe9, 0x41, 0x50, 0xad, 0x00, 0x5e, 0xe9, 0x01, + 0x4d, 0xa6, 0x34, 0x5f, 0xe9, 0x41, 0x54, 0xe0, 0x41, 0x49, 0xe9, 0x01, + 0x48, 0xb5, 0x00, 0x46, 0xe9, 0x41, 0x45, 0x12, 0x0b, 0x58, 0xe9, 0x01, + 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x59, 0xe9, 0x01, 0x43, 0x0e, 0x0b, 0x51, + 0xe9, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x50, 0xe9, 0x41, + 0x44, 0x25, 0x01, 0x53, 0xe9, 0x01, 0x42, 0x15, 0x02, 0x52, 0xe9, 0x41, + 0x44, 0xc9, 0x1d, 0x57, 0xe9, 0x01, 0x42, 0x01, 0x26, 0x56, 0xe9, 0x41, + 0x43, 0xd2, 0x05, 0x55, 0xe9, 0x01, 0x43, 0xf6, 0x06, 0x54, 0xe9, 0x41, + 0x0e, 0xe5, 0x05, 0x06, 0x51, 0x28, 0x33, 0x48, 0xe9, 0x41, 0x44, 0x9b, + 0x6a, 0x00, 0xe9, 0x01, 0xa2, 0xbc, 0x01, 0x43, 0x79, 0x16, 0x15, 0xe9, + 0x01, 0xa4, 0xa7, 0x01, 0xe5, 0x09, 0xe9, 0x01, 0x42, 0x0c, 0x08, 0x0a, + 0xe9, 0x01, 0xa7, 0x90, 0x01, 0x42, 0x22, 0x00, 0x16, 0xe9, 0x01, 0xe9, + 0x0b, 0xe9, 0x01, 0x44, 0xb1, 0xf0, 0x14, 0xe9, 0x01, 0xab, 0x6c, 0x44, + 0x68, 0x89, 0x02, 0xe9, 0x01, 0x44, 0x31, 0xf1, 0x03, 0xe9, 0x01, 0xae, + 0x4c, 0xef, 0x0c, 0xe9, 0x01, 0x42, 0x6f, 0x02, 0x06, 0xe9, 0x01, 0x44, + 0x1a, 0xea, 0x17, 0xe9, 0x01, 0x42, 0x71, 0x00, 0x08, 0xe9, 0x01, 0xb3, + 0x28, 0x42, 0x5c, 0x01, 0x1a, 0xe9, 0x01, 0xf5, 0x13, 0xe9, 0x01, 0x42, + 0xf5, 0x0a, 0x1c, 0xe9, 0x01, 0x43, 0x8a, 0x8a, 0x0f, 0xe9, 0x01, 0xb9, + 0x06, 0x43, 0xc4, 0xc1, 0x1f, 0xe9, 0x41, 0xe1, 0x12, 0xe9, 0x01, 0x42, + 0xb0, 0x01, 0x0e, 0xe9, 0x41, 0x42, 0x22, 0x00, 0x21, 0xe9, 0x01, 0x49, + 0xaa, 0xba, 0x05, 0xe9, 0x41, 0x42, 0x22, 0x00, 0x1b, 0xe9, 0x01, 0x42, + 0x42, 0x0b, 0x10, 0xe9, 0x01, 0x42, 0xbc, 0x22, 0x19, 0xe9, 0x41, 0x42, + 0x44, 0x14, 0x11, 0xe9, 0x01, 0x42, 0x22, 0x00, 0x1d, 0xe9, 0x01, 0x42, + 0x9c, 0x01, 0x20, 0xe9, 0x41, 0xe1, 0x18, 0xe9, 0x01, 0x42, 0xb7, 0x05, + 0x1e, 0xe9, 0x41, 0x44, 0xd7, 0x2c, 0x01, 0xe9, 0x01, 0x42, 0x22, 0x00, + 0x0d, 0xe9, 0x41, 0xe1, 0x04, 0xe9, 0x01, 0x42, 0xb0, 0x01, 0x07, 0xe9, + 0x41, 0x48, 0x12, 0x2e, 0xe6, 0x23, 0x00, 0x02, 0x13, 0x05, 0x27, 0x49, + 0xe8, 0x51, 0x06, 0x00, 0x00, 0x07, 0x6b, 0xd6, 0x11, 0x05, 0xfb, 0x38, + 0x01, 0xff, 0x45, 0xdb, 0x04, 0xb4, 0x00, 0x00, 0x44, 0x05, 0x02, 0x9f, + 0x29, 0x40, 0x53, 0x28, 0x48, 0x6d, 0x20, 0x00, 0x52, 0x99, 0x55, 0x6b, + 0x20, 0x40, 0x45, 0x3d, 0xea, 0x97, 0xfa, 0x01, 0x46, 0xcb, 0x6a, 0x00, + 0x21, 0x40 }; static const cppchar_t uname2c_pairs[] = { 0xac00, 0xd7a3 /* HANGUL SYLLABLE */, 0, 0x3400, 0x4dbf /* CJK UNIFIED IDEOGRAPH- */, 0x4e00, 0x9fff /* CJK UNIFIED IDEOGRAPH- */, 0x20000, 0x2a6df /* CJK UNIFIED IDEOGRAPH- */, - 0x2a700, 0x2b739 /* CJK UNIFIED IDEOGRAPH- */, + 0x2a700, 0x2b73f /* CJK UNIFIED IDEOGRAPH- */, 0x2b740, 0x2b81d /* CJK UNIFIED IDEOGRAPH- */, - 0x2b820, 0x2cea1 /* CJK UNIFIED IDEOGRAPH- */, + 0x2b820, 0x2cead /* CJK UNIFIED IDEOGRAPH- */, 0x2ceb0, 0x2ebe0 /* CJK UNIFIED IDEOGRAPH- */, 0x2ebf0, 0x2ee5d /* CJK UNIFIED IDEOGRAPH- */, 0x30000, 0x3134a /* CJK UNIFIED IDEOGRAPH- */, - 0x31350, 0x323af /* CJK UNIFIED IDEOGRAPH- */, 0, + 0x31350, 0x323af /* CJK UNIFIED IDEOGRAPH- */, + 0x323b0, 0x33479 /* CJK UNIFIED IDEOGRAPH- */, 0, 0x13460, 0x143fa /* EGYPTIAN HIEROGLYPH- */, 0, - 0x17000, 0x187f7 /* TANGUT IDEOGRAPH- */, - 0x18d00, 0x18d08 /* TANGUT IDEOGRAPH- */, 0, + 0x17000, 0x187ff /* TANGUT IDEOGRAPH- */, + 0x18d00, 0x18d1e /* TANGUT IDEOGRAPH- */, 0, 0x18b00, 0x18cd5 /* KHITAN SMALL SCRIPT CHARACTER- */, 0, 0x1b170, 0x1b2fb /* NUSHU CHARACTER- */, 0, 0xf900, 0xfa6d /* CJK COMPATIBILITY IDEOGRAPH- */, @@ -19084,11 +19331,11 @@ static const cppchar_t uname2c_pairs[] = { static const unsigned char uname2c_generated[] = { 0 /* HANGUL SYLLABLE */, 3 /* CJK UNIFIED IDEOGRAPH- */, - 24 /* EGYPTIAN HIEROGLYPH- */, - 27 /* TANGUT IDEOGRAPH- */, - 32 /* KHITAN SMALL SCRIPT CHARACTER- */, - 35 /* NUSHU CHARACTER- */, - 38 /* CJK COMPATIBILITY IDEOGRAPH- */ }; + 26 /* EGYPTIAN HIEROGLYPH- */, + 29 /* TANGUT IDEOGRAPH- */, + 34 /* KHITAN SMALL SCRIPT CHARACTER- */, + 37 /* NUSHU CHARACTER- */, + 40 /* CJK COMPATIBILITY IDEOGRAPH- */ }; static const unsigned int uname2c_max_name_len = 88; diff --git a/libstdc++-v3/include/bits/unicode-data.h b/libstdc++-v3/include/bits/unicode-data.h index 0ab5ecb56a71..45a68de3edb7 100644 --- a/libstdc++-v3/include/bits/unicode-data.h +++ b/libstdc++-v3/include/bits/unicode-data.h @@ -51,17 +51,17 @@ 0x3250, 0xa48d, 0xa490, 0xa4c7, 0xa960, 0xa97d, 0xac00, 0xd7a4, 0xf900, 0xfb00, 0xfe10, 0xfe1a, 0xfe30, 0xfe53, 0xfe54, 0xfe67, 0xfe68, 0xfe6c, 0xff01, 0xff61, 0xffe0, 0xffe7, 0x16fe0, 0x16fe5, - 0x16ff0, 0x16ff2, 0x17000, 0x187f8, 0x18800, 0x18cd6, 0x18cff, 0x18d09, + 0x16ff0, 0x16ff7, 0x17000, 0x18cd6, 0x18cff, 0x18d1f, 0x18d80, 0x18df3, 0x1aff0, 0x1aff4, 0x1aff5, 0x1affc, 0x1affd, 0x1afff, 0x1b000, 0x1b123, 0x1b132, 0x1b133, 0x1b150, 0x1b153, 0x1b155, 0x1b156, 0x1b164, 0x1b168, 0x1b170, 0x1b2fc, 0x1d300, 0x1d357, 0x1d360, 0x1d377, 0x1f004, 0x1f005, 0x1f0cf, 0x1f0d0, 0x1f18e, 0x1f18f, 0x1f191, 0x1f19b, 0x1f200, 0x1f203, 0x1f210, 0x1f23c, 0x1f240, 0x1f249, 0x1f250, 0x1f252, 0x1f260, 0x1f266, 0x1f300, 0x1f650, 0x1f680, 0x1f6c6, 0x1f6cc, 0x1f6cd, 0x1f6d0, 0x1f6d3, - 0x1f6d5, 0x1f6d8, 0x1f6dc, 0x1f6e0, 0x1f6eb, 0x1f6ed, 0x1f6f4, 0x1f6fd, + 0x1f6d5, 0x1f6d9, 0x1f6dc, 0x1f6e0, 0x1f6eb, 0x1f6ed, 0x1f6f4, 0x1f6fd, 0x1f7e0, 0x1f7ec, 0x1f7f0, 0x1f7f1, 0x1f900, 0x1fa00, 0x1fa70, 0x1fa7d, - 0x1fa80, 0x1fa8a, 0x1fa8f, 0x1fac7, 0x1face, 0x1fadd, 0x1fadf, 0x1faea, - 0x1faf0, 0x1faf9, 0x20000, 0x2fffe, 0x30000, 0x3fffe, + 0x1fa80, 0x1fa8b, 0x1fa8e, 0x1fac7, 0x1fac8, 0x1fac9, 0x1facd, 0x1fadd, + 0x1fadf, 0x1faeb, 0x1faef, 0x1faf9, 0x20000, 0x2fffe, 0x30000, 0x3fffe, }; // Values generated by contrib/unicode/gen_libstdcxx_unicode_data.py, @@ -76,7 +76,7 @@ 0xc39, 0xc3a, 0xdbb, 0xdbc, 0xe1d, 0xe20, 0xe97, 0xe9a, 0xf65, 0xf80, 0xff7, 0xffa, 0x105d, 0x1060, 0x107f, 0x1080, 0x10b9, 0x10bc, - 0x10bf, 0x10c0, 0x10d7, 0x10e0, 0x111f, 0x112e, + 0x10bf, 0x10c0, 0x10d7, 0x10e0, 0x1121, 0x112e, 0x11c5, 0x11c6, 0x1309, 0x130a, 0x131b, 0x131e, 0x1323, 0x1326, 0x1353, 0x1354, 0x1363, 0x1364, 0x1367, 0x136c, 0x1375, 0x1378, 0x138b, 0x138e, @@ -104,11 +104,11 @@ 0x17a3, 0x17ae, 0x17b1, 0x17cc, 0x17f7, 0x1800, 0x181b, 0x181c, 0x1823, 0x1824, 0x1853, 0x1854, 0x1875, 0x1878, 0x188b, 0x188c, 0x1893, 0x1894, - 0x189d, 0x18aa, 0x18af, 0x18b0, 0x18b7, 0x18ba, + 0x189d, 0x18aa, 0x18af, 0x18b0, 0x18b7, 0x18b8, 0x18bd, 0x18c0, 0x18c9, 0x18cc, 0x18e1, 0x18ee, 0x191b, 0x191c, 0x1923, 0x1924, 0x1953, 0x1954, 0x1969, 0x196a, 0x1975, 0x1978, 0x198b, 0x198c, - 0x1993, 0x1994, 0x199d, 0x19aa, 0x19af, 0x19ba, + 0x1993, 0x1994, 0x199d, 0x19aa, 0x19af, 0x19b8, 0x19bf, 0x19c0, 0x19c9, 0x19cc, 0x19e1, 0x19e2, 0x19e9, 0x1a00, 0x1a1b, 0x1a1c, 0x1a23, 0x1a24, 0x1a8b, 0x1a8c, 0x1a93, 0x1a94, 0x1aa1, 0x1aa8, @@ -141,19 +141,19 @@ 0x32eb, 0x3300, 0x3359, 0x3360, 0x3395, 0x33a0, 0x33b7, 0x33bc, 0x3439, 0x343c, 0x34bf, 0x34c0, 0x34fb, 0x34fe, 0x3515, 0x3520, 0x3535, 0x3540, - 0x355d, 0x3560, 0x359f, 0x3600, 0x369b, 0x369c, - 0x37e9, 0x37f8, 0x3871, 0x3876, 0x3895, 0x389a, - 0x3917, 0x3920, 0x3977, 0x397a, 0x3991, 0x39a0, - 0x39f7, 0x3a00, 0x3e2d, 0x3e30, 0x3e3d, 0x3e40, - 0x3e8d, 0x3e90, 0x3e9d, 0x3ea0, 0x3eb1, 0x3eb2, - 0x3eb5, 0x3eb6, 0x3eb9, 0x3eba, 0x3ebd, 0x3ebe, - 0x3efd, 0x3f00, 0x3f6b, 0x3f6c, 0x3f8b, 0x3f8c, - 0x3fa9, 0x3fac, 0x3fb9, 0x3fba, 0x3fe1, 0x3fe4, - 0x3feb, 0x3fec, 0x3fff, 0x4020, 0x4051, 0x4060, - 0x40bf, 0x40e0, 0x40e5, 0x40e8, 0x411f, 0x4120, - 0x413b, 0x4140, 0x4183, 0x41a0, 0x41e3, 0x4200, - 0x4319, 0x4320, 0x4855, 0x4880, 0x4897, 0x48c0, - 0x56e9, 0x56ec, 0x572d, 0x572e, 0x59e9, 0x59f2, + 0x355d, 0x3560, 0x35bd, 0x35c0, 0x35d9, 0x3600, + 0x369b, 0x369c, 0x37e9, 0x37f8, 0x3871, 0x3876, + 0x3895, 0x389a, 0x3917, 0x3920, 0x3977, 0x397a, + 0x3991, 0x39a0, 0x39f7, 0x3a00, 0x3e2d, 0x3e30, + 0x3e3d, 0x3e40, 0x3e8d, 0x3e90, 0x3e9d, 0x3ea0, + 0x3eb1, 0x3eb2, 0x3eb5, 0x3eb6, 0x3eb9, 0x3eba, + 0x3ebd, 0x3ebe, 0x3efd, 0x3f00, 0x3f6b, 0x3f6c, + 0x3f8b, 0x3f8c, 0x3fa9, 0x3fac, 0x3fb9, 0x3fba, + 0x3fe1, 0x3fe4, 0x3feb, 0x3fec, 0x3fff, 0x4020, + 0x4051, 0x4060, 0x40bf, 0x40e0, 0x40e5, 0x40e8, + 0x411f, 0x4120, 0x413b, 0x4140, 0x4185, 0x41a0, + 0x41e3, 0x4200, 0x4319, 0x4320, 0x4855, 0x4880, + 0x4897, 0x48c0, 0x56e9, 0x56ec, 0x59e9, 0x59f2, 0x5a4d, 0x5a4e, 0x5a51, 0x5a5a, 0x5a5d, 0x5a60, 0x5ad1, 0x5ade, 0x5ae3, 0x5afe, 0x5b2f, 0x5b40, 0x5b4f, 0x5b50, 0x5b5f, 0x5b60, 0x5b6f, 0x5b70, @@ -164,8 +164,7 @@ 0x6201, 0x620a, 0x6261, 0x6262, 0x631f, 0x6320, 0x63cd, 0x63de, 0x643f, 0x6440, 0x1491b, 0x14920, 0x1498f, 0x149a0, 0x14c59, 0x14c80, 0x14df1, 0x14e00, - 0x14f9d, 0x14fa0, 0x14fa5, 0x14fa6, 0x14fa9, 0x14faa, - 0x14fbb, 0x14fe4, 0x1505b, 0x15060, 0x15075, 0x15080, + 0x14fbb, 0x14fe2, 0x1505b, 0x15060, 0x15075, 0x15080, 0x150f1, 0x15100, 0x1518d, 0x1519c, 0x151b5, 0x151c0, 0x152a9, 0x152be, 0x152fb, 0x15300, 0x1539d, 0x1539e, 0x153b5, 0x153bc, 0x153ff, 0x15400, 0x1546f, 0x15480, @@ -177,7 +176,6 @@ 0x1f4dd, 0x1f4e0, 0x1f5b5, 0x1f600, 0x1f60f, 0x1f626, 0x1f631, 0x1f63a, 0x1f66f, 0x1f670, 0x1f67b, 0x1f67c, 0x1f67f, 0x1f680, 0x1f685, 0x1f686, 0x1f68b, 0x1f68c, - 0x1f787, 0x1f7a6, 0x1fb21, 0x1fb24, 0x1fb91, 0x1fb9e, 0x1fba1, 0x1fbe0, 0x1fc35, 0x1fc40, 0x1fca7, 0x1fca8, 0x1fccf, 0x1fcd0, 0x1fcd9, 0x1fce0, 0x1fceb, 0x1fcec, 0x1fdfb, 0x1fe02, 0x1ff7f, 0x1ff84, 0x1ff91, 0x1ff94, @@ -201,7 +199,7 @@ 0x2106d, 0x2106e, 0x21073, 0x21078, 0x2107b, 0x2107e, 0x210ad, 0x210ae, 0x2113f, 0x2114e, 0x21161, 0x211c0, 0x211e7, 0x211e8, 0x211ed, 0x211f6, 0x21239, 0x2123e, - 0x21275, 0x2127e, 0x21281, 0x21300, 0x21371, 0x21378, + 0x21275, 0x2127e, 0x212b5, 0x21300, 0x21371, 0x21378, 0x213a1, 0x213a4, 0x21409, 0x2140a, 0x2140f, 0x21418, 0x21429, 0x2142a, 0x21431, 0x21432, 0x2146d, 0x21470, 0x21477, 0x2147e, 0x21493, 0x214a0, 0x214b3, 0x214c0, @@ -212,108 +210,112 @@ 0x21a51, 0x21a60, 0x21a75, 0x21a80, 0x21acd, 0x21ad2, 0x21b0d, 0x21b1c, 0x21b21, 0x21cc0, 0x21cff, 0x21d00, 0x21d55, 0x21d56, 0x21d5d, 0x21d60, 0x21d65, 0x21d84, - 0x21d8b, 0x21df8, 0x21e51, 0x21e60, 0x21eb5, 0x21ee0, - 0x21f15, 0x21f60, 0x21f99, 0x21fc0, 0x21fef, 0x22000, - 0x2209d, 0x220a4, 0x220ed, 0x220fe, 0x2217b, 0x2217c, - 0x22187, 0x221a0, 0x221d3, 0x221e0, 0x221f5, 0x22200, - 0x2226b, 0x2226c, 0x22291, 0x222a0, 0x222ef, 0x22300, - 0x223c1, 0x223c2, 0x223eb, 0x22400, 0x22425, 0x22426, - 0x22485, 0x22500, 0x2250f, 0x22510, 0x22513, 0x22514, - 0x2251d, 0x2251e, 0x2253d, 0x2253e, 0x22555, 0x22560, - 0x225d7, 0x225e0, 0x225f5, 0x22600, 0x22609, 0x2260a, - 0x2261b, 0x2261e, 0x22623, 0x22626, 0x22653, 0x22654, - 0x22663, 0x22664, 0x22669, 0x2266a, 0x22675, 0x22676, - 0x2268b, 0x2268e, 0x22693, 0x22696, 0x2269d, 0x226a0, - 0x226a3, 0x226ae, 0x226b1, 0x226ba, 0x226c9, 0x226cc, - 0x226db, 0x226e0, 0x226eb, 0x22700, 0x22715, 0x22716, - 0x22719, 0x2271c, 0x2271f, 0x22720, 0x2276d, 0x2276e, - 0x22783, 0x22784, 0x22787, 0x2278a, 0x2278d, 0x2278e, - 0x22797, 0x22798, 0x227ad, 0x227ae, 0x227b3, 0x227c2, - 0x227c7, 0x22800, 0x228b9, 0x228ba, 0x228c5, 0x22900, - 0x22991, 0x229a0, 0x229b5, 0x22b00, 0x22b6d, 0x22b70, - 0x22bbd, 0x22c00, 0x22c8b, 0x22ca0, 0x22cb5, 0x22cc0, - 0x22cdb, 0x22d00, 0x22d75, 0x22d80, 0x22d95, 0x22da0, - 0x22dc9, 0x22e00, 0x22e37, 0x22e3a, 0x22e59, 0x22e60, - 0x22e8f, 0x23000, 0x23079, 0x23140, 0x231e7, 0x231fe, - 0x2320f, 0x23212, 0x23215, 0x23218, 0x23229, 0x2322a, - 0x2322f, 0x23230, 0x2326d, 0x2326e, 0x23273, 0x23276, - 0x2328f, 0x232a0, 0x232b5, 0x23340, 0x23351, 0x23354, - 0x233b1, 0x233b4, 0x233cb, 0x23400, 0x23491, 0x234a0, - 0x23547, 0x23560, 0x235f3, 0x23600, 0x23615, 0x23780, - 0x237c5, 0x237e0, 0x237f5, 0x23800, 0x23813, 0x23814, - 0x2386f, 0x23870, 0x2388d, 0x238a0, 0x238db, 0x238e0, - 0x23921, 0x23924, 0x23951, 0x23952, 0x2396f, 0x23a00, - 0x23a0f, 0x23a10, 0x23a15, 0x23a16, 0x23a6f, 0x23a74, - 0x23a77, 0x23a78, 0x23a7d, 0x23a7e, 0x23a91, 0x23aa0, - 0x23ab5, 0x23ac0, 0x23acd, 0x23ace, 0x23ad3, 0x23ad4, - 0x23b1f, 0x23b20, 0x23b25, 0x23b26, 0x23b33, 0x23b40, - 0x23b55, 0x23dc0, 0x23df3, 0x23e00, 0x23e23, 0x23e24, - 0x23e77, 0x23e7c, 0x23eb7, 0x23f60, 0x23f63, 0x23f80, - 0x23fe5, 0x23ffe, 0x24735, 0x24800, 0x248df, 0x248e0, - 0x248eb, 0x24900, 0x24a89, 0x25f20, 0x25fe7, 0x26000, - 0x26861, 0x26880, 0x268ad, 0x268c0, 0x287f7, 0x28800, - 0x28c8f, 0x2c200, 0x2c275, 0x2d000, 0x2d473, 0x2d480, - 0x2d4bf, 0x2d4c0, 0x2d4d5, 0x2d4dc, 0x2d57f, 0x2d580, - 0x2d595, 0x2d5a0, 0x2d5dd, 0x2d5e0, 0x2d5ed, 0x2d600, - 0x2d68d, 0x2d6a0, 0x2d6b5, 0x2d6b6, 0x2d6c5, 0x2d6c6, - 0x2d6f1, 0x2d6fa, 0x2d721, 0x2da80, 0x2daf5, 0x2dc80, - 0x2dd37, 0x2de00, 0x2de97, 0x2de9e, 0x2df11, 0x2df1e, - 0x2df41, 0x2dfc0, 0x2dfcb, 0x2dfe0, 0x2dfe5, 0x2e000, - 0x30ff1, 0x31000, 0x319ad, 0x319fe, 0x31a13, 0x35fe0, + 0x21d91, 0x21da0, 0x21db3, 0x21df4, 0x21e51, 0x21e60, + 0x21eb5, 0x21ee0, 0x21f15, 0x21f60, 0x21f99, 0x21fc0, + 0x21fef, 0x22000, 0x2209d, 0x220a4, 0x220ed, 0x220fe, + 0x2217b, 0x2217c, 0x22187, 0x221a0, 0x221d3, 0x221e0, + 0x221f5, 0x22200, 0x2226b, 0x2226c, 0x22291, 0x222a0, + 0x222ef, 0x22300, 0x223c1, 0x223c2, 0x223eb, 0x22400, + 0x22425, 0x22426, 0x22485, 0x22500, 0x2250f, 0x22510, + 0x22513, 0x22514, 0x2251d, 0x2251e, 0x2253d, 0x2253e, + 0x22555, 0x22560, 0x225d7, 0x225e0, 0x225f5, 0x22600, + 0x22609, 0x2260a, 0x2261b, 0x2261e, 0x22623, 0x22626, + 0x22653, 0x22654, 0x22663, 0x22664, 0x22669, 0x2266a, + 0x22675, 0x22676, 0x2268b, 0x2268e, 0x22693, 0x22696, + 0x2269d, 0x226a0, 0x226a3, 0x226ae, 0x226b1, 0x226ba, + 0x226c9, 0x226cc, 0x226db, 0x226e0, 0x226eb, 0x22700, + 0x22715, 0x22716, 0x22719, 0x2271c, 0x2271f, 0x22720, + 0x2276d, 0x2276e, 0x22783, 0x22784, 0x22787, 0x2278a, + 0x2278d, 0x2278e, 0x22797, 0x22798, 0x227ad, 0x227ae, + 0x227b3, 0x227c2, 0x227c7, 0x22800, 0x228b9, 0x228ba, + 0x228c5, 0x22900, 0x22991, 0x229a0, 0x229b5, 0x22b00, + 0x22b6d, 0x22b70, 0x22bbd, 0x22c00, 0x22c8b, 0x22ca0, + 0x22cb5, 0x22cc0, 0x22cdb, 0x22d00, 0x22d75, 0x22d80, + 0x22d95, 0x22da0, 0x22dc9, 0x22e00, 0x22e37, 0x22e3a, + 0x22e59, 0x22e60, 0x22e8f, 0x23000, 0x23079, 0x23140, + 0x231e7, 0x231fe, 0x2320f, 0x23212, 0x23215, 0x23218, + 0x23229, 0x2322a, 0x2322f, 0x23230, 0x2326d, 0x2326e, + 0x23273, 0x23276, 0x2328f, 0x232a0, 0x232b5, 0x23340, + 0x23351, 0x23354, 0x233b1, 0x233b4, 0x233cb, 0x23400, + 0x23491, 0x234a0, 0x23547, 0x23560, 0x235f3, 0x23600, + 0x23615, 0x236c0, 0x236d1, 0x23780, 0x237c5, 0x237e0, + 0x237f5, 0x23800, 0x23813, 0x23814, 0x2386f, 0x23870, + 0x2388d, 0x238a0, 0x238db, 0x238e0, 0x23921, 0x23924, + 0x23951, 0x23952, 0x2396f, 0x23a00, 0x23a0f, 0x23a10, + 0x23a15, 0x23a16, 0x23a6f, 0x23a74, 0x23a77, 0x23a78, + 0x23a7d, 0x23a7e, 0x23a91, 0x23aa0, 0x23ab5, 0x23ac0, + 0x23acd, 0x23ace, 0x23ad3, 0x23ad4, 0x23b1f, 0x23b20, + 0x23b25, 0x23b26, 0x23b33, 0x23b40, 0x23b55, 0x23b60, + 0x23bb9, 0x23bc0, 0x23bd5, 0x23dc0, 0x23df3, 0x23e00, + 0x23e23, 0x23e24, 0x23e77, 0x23e7c, 0x23eb7, 0x23f60, + 0x23f63, 0x23f80, 0x23fe5, 0x23ffe, 0x24735, 0x24800, + 0x248df, 0x248e0, 0x248eb, 0x24900, 0x24a89, 0x25f20, + 0x25fe7, 0x26000, 0x26861, 0x26880, 0x268ad, 0x268c0, + 0x287f7, 0x28800, 0x28c8f, 0x2c200, 0x2c275, 0x2d000, + 0x2d473, 0x2d480, 0x2d4bf, 0x2d4c0, 0x2d4d5, 0x2d4dc, + 0x2d57f, 0x2d580, 0x2d595, 0x2d5a0, 0x2d5dd, 0x2d5e0, + 0x2d5ed, 0x2d600, 0x2d68d, 0x2d6a0, 0x2d6b5, 0x2d6b6, + 0x2d6c5, 0x2d6c6, 0x2d6f1, 0x2d6fa, 0x2d721, 0x2da80, + 0x2daf5, 0x2dc80, 0x2dd37, 0x2dd40, 0x2dd73, 0x2dd76, + 0x2dda9, 0x2de00, 0x2de97, 0x2de9e, 0x2df11, 0x2df1e, + 0x2df41, 0x2dfc0, 0x2dfcb, 0x2dfe0, 0x2dfef, 0x2e000, + 0x319ad, 0x319fe, 0x31a3f, 0x31b00, 0x31be7, 0x35fe0, 0x35fe9, 0x35fea, 0x35ff9, 0x35ffa, 0x35fff, 0x36000, 0x36247, 0x36264, 0x36267, 0x362a0, 0x362a7, 0x362aa, 0x362ad, 0x362c8, 0x362d1, 0x362e0, 0x365f9, 0x37800, 0x378d7, 0x378e0, 0x378fb, 0x37900, 0x37913, 0x37920, - 0x37935, 0x37938, 0x37941, 0x39800, 0x399f5, 0x39a00, - 0x39d69, 0x39e00, 0x39e5d, 0x39e60, 0x39e8f, 0x39ea0, - 0x39f89, 0x3a000, 0x3a1ed, 0x3a200, 0x3a24f, 0x3a252, - 0x3a2e7, 0x3a2f6, 0x3a3d7, 0x3a400, 0x3a48d, 0x3a580, - 0x3a5a9, 0x3a5c0, 0x3a5e9, 0x3a600, 0x3a6af, 0x3a6c0, - 0x3a6f3, 0x3a800, 0x3a8ab, 0x3a8ac, 0x3a93b, 0x3a93c, - 0x3a941, 0x3a944, 0x3a947, 0x3a94a, 0x3a94f, 0x3a952, - 0x3a95b, 0x3a95c, 0x3a975, 0x3a976, 0x3a979, 0x3a97a, - 0x3a989, 0x3a98a, 0x3aa0d, 0x3aa0e, 0x3aa17, 0x3aa1a, - 0x3aa2b, 0x3aa2c, 0x3aa3b, 0x3aa3c, 0x3aa75, 0x3aa76, - 0x3aa7f, 0x3aa80, 0x3aa8b, 0x3aa8c, 0x3aa8f, 0x3aa94, - 0x3aaa3, 0x3aaa4, 0x3ad4d, 0x3ad50, 0x3af99, 0x3af9c, - 0x3b519, 0x3b536, 0x3b541, 0x3b542, 0x3b561, 0x3be00, - 0x3be3f, 0x3be4a, 0x3be57, 0x3c000, 0x3c00f, 0x3c010, - 0x3c033, 0x3c036, 0x3c045, 0x3c046, 0x3c04b, 0x3c04c, - 0x3c057, 0x3c060, 0x3c0dd, 0x3c11e, 0x3c121, 0x3c200, - 0x3c25b, 0x3c260, 0x3c27d, 0x3c280, 0x3c295, 0x3c29c, - 0x3c2a1, 0x3c520, 0x3c55f, 0x3c580, 0x3c5f5, 0x3c5fe, - 0x3c601, 0x3c9a0, 0x3c9f5, 0x3cba0, 0x3cbf7, 0x3cbfe, - 0x3cc01, 0x3cfc0, 0x3cfcf, 0x3cfd0, 0x3cfd9, 0x3cfda, - 0x3cfdf, 0x3cfe0, 0x3cfff, 0x3d000, 0x3d18b, 0x3d18e, - 0x3d1af, 0x3d200, 0x3d299, 0x3d2a0, 0x3d2b5, 0x3d2bc, - 0x3d2c1, 0x3d8e2, 0x3d96b, 0x3da02, 0x3da7d, 0x3dc00, - 0x3dc09, 0x3dc0a, 0x3dc41, 0x3dc42, 0x3dc47, 0x3dc48, - 0x3dc4b, 0x3dc4e, 0x3dc51, 0x3dc52, 0x3dc67, 0x3dc68, - 0x3dc71, 0x3dc72, 0x3dc75, 0x3dc76, 0x3dc79, 0x3dc84, - 0x3dc87, 0x3dc8e, 0x3dc91, 0x3dc92, 0x3dc95, 0x3dc96, - 0x3dc99, 0x3dc9a, 0x3dca1, 0x3dca2, 0x3dca7, 0x3dca8, - 0x3dcab, 0x3dcae, 0x3dcb1, 0x3dcb2, 0x3dcb5, 0x3dcb6, - 0x3dcb9, 0x3dcba, 0x3dcbd, 0x3dcbe, 0x3dcc1, 0x3dcc2, - 0x3dcc7, 0x3dcc8, 0x3dccb, 0x3dcce, 0x3dcd7, 0x3dcd8, - 0x3dce7, 0x3dce8, 0x3dcf1, 0x3dcf2, 0x3dcfb, 0x3dcfc, - 0x3dcff, 0x3dd00, 0x3dd15, 0x3dd16, 0x3dd39, 0x3dd42, - 0x3dd49, 0x3dd4a, 0x3dd55, 0x3dd56, 0x3dd79, 0x3dde0, - 0x3dde5, 0x3e000, 0x3e059, 0x3e060, 0x3e129, 0x3e140, - 0x3e15f, 0x3e162, 0x3e181, 0x3e182, 0x3e1a1, 0x3e1a2, - 0x3e1ed, 0x3e200, 0x3e35d, 0x3e3cc, 0x3e407, 0x3e420, - 0x3e479, 0x3e480, 0x3e493, 0x3e4a0, 0x3e4a5, 0x3e4c0, - 0x3e4cd, 0x3e600, 0x3edb1, 0x3edb8, 0x3eddb, 0x3ede0, - 0x3edfb, 0x3ee00, 0x3eeef, 0x3eef6, 0x3efb5, 0x3efc0, - 0x3efd9, 0x3efe0, 0x3efe3, 0x3f000, 0x3f019, 0x3f020, - 0x3f091, 0x3f0a0, 0x3f0b5, 0x3f0c0, 0x3f111, 0x3f120, - 0x3f15d, 0x3f160, 0x3f179, 0x3f180, 0x3f185, 0x3f200, - 0x3f4a9, 0x3f4c0, 0x3f4dd, 0x3f4e0, 0x3f4fb, 0x3f500, - 0x3f515, 0x3f51e, 0x3f58f, 0x3f59c, 0x3f5bb, 0x3f5be, - 0x3f5d5, 0x3f5e0, 0x3f5f3, 0x3f600, 0x3f727, 0x3f728, - 0x3f7f5, 0x40000, 0x54dc1, 0x54e00, 0x56e75, 0x56e80, - 0x5703d, 0x57040, 0x59d45, 0x59d60, 0x5d7c3, 0x5d7e0, - 0x5dcbd, 0x5f000, 0x5f43d, 0x60000, 0x62697, 0x626a0, - 0x64761, 0x1c0200, 0x1c03e1, + 0x37935, 0x37938, 0x37941, 0x39800, 0x399fb, 0x39a00, + 0x39d69, 0x39d74, 0x39da3, 0x39dc0, 0x39de3, 0x39e00, + 0x39e5d, 0x39e60, 0x39e8f, 0x39ea0, 0x39f89, 0x3a000, + 0x3a1ed, 0x3a200, 0x3a24f, 0x3a252, 0x3a2e7, 0x3a2f6, + 0x3a3d7, 0x3a400, 0x3a48d, 0x3a580, 0x3a5a9, 0x3a5c0, + 0x3a5e9, 0x3a600, 0x3a6af, 0x3a6c0, 0x3a6f3, 0x3a800, + 0x3a8ab, 0x3a8ac, 0x3a93b, 0x3a93c, 0x3a941, 0x3a944, + 0x3a947, 0x3a94a, 0x3a94f, 0x3a952, 0x3a95b, 0x3a95c, + 0x3a975, 0x3a976, 0x3a979, 0x3a97a, 0x3a989, 0x3a98a, + 0x3aa0d, 0x3aa0e, 0x3aa17, 0x3aa1a, 0x3aa2b, 0x3aa2c, + 0x3aa3b, 0x3aa3c, 0x3aa75, 0x3aa76, 0x3aa7f, 0x3aa80, + 0x3aa8b, 0x3aa8c, 0x3aa8f, 0x3aa94, 0x3aaa3, 0x3aaa4, + 0x3ad4d, 0x3ad50, 0x3af99, 0x3af9c, 0x3b519, 0x3b536, + 0x3b541, 0x3b542, 0x3b561, 0x3be00, 0x3be3f, 0x3be4a, + 0x3be57, 0x3c000, 0x3c00f, 0x3c010, 0x3c033, 0x3c036, + 0x3c045, 0x3c046, 0x3c04b, 0x3c04c, 0x3c057, 0x3c060, + 0x3c0dd, 0x3c11e, 0x3c121, 0x3c200, 0x3c25b, 0x3c260, + 0x3c27d, 0x3c280, 0x3c295, 0x3c29c, 0x3c2a1, 0x3c520, + 0x3c55f, 0x3c580, 0x3c5f5, 0x3c5fe, 0x3c601, 0x3c9a0, + 0x3c9f5, 0x3cba0, 0x3cbf7, 0x3cbfe, 0x3cc01, 0x3cd80, + 0x3cdbf, 0x3cdc0, 0x3cded, 0x3cdfc, 0x3ce01, 0x3cfc0, + 0x3cfcf, 0x3cfd0, 0x3cfd9, 0x3cfda, 0x3cfdf, 0x3cfe0, + 0x3cfff, 0x3d000, 0x3d18b, 0x3d18e, 0x3d1af, 0x3d200, + 0x3d299, 0x3d2a0, 0x3d2b5, 0x3d2bc, 0x3d2c1, 0x3d8e2, + 0x3d96b, 0x3da02, 0x3da7d, 0x3dc00, 0x3dc09, 0x3dc0a, + 0x3dc41, 0x3dc42, 0x3dc47, 0x3dc48, 0x3dc4b, 0x3dc4e, + 0x3dc51, 0x3dc52, 0x3dc67, 0x3dc68, 0x3dc71, 0x3dc72, + 0x3dc75, 0x3dc76, 0x3dc79, 0x3dc84, 0x3dc87, 0x3dc8e, + 0x3dc91, 0x3dc92, 0x3dc95, 0x3dc96, 0x3dc99, 0x3dc9a, + 0x3dca1, 0x3dca2, 0x3dca7, 0x3dca8, 0x3dcab, 0x3dcae, + 0x3dcb1, 0x3dcb2, 0x3dcb5, 0x3dcb6, 0x3dcb9, 0x3dcba, + 0x3dcbd, 0x3dcbe, 0x3dcc1, 0x3dcc2, 0x3dcc7, 0x3dcc8, + 0x3dccb, 0x3dcce, 0x3dcd7, 0x3dcd8, 0x3dce7, 0x3dce8, + 0x3dcf1, 0x3dcf2, 0x3dcfb, 0x3dcfc, 0x3dcff, 0x3dd00, + 0x3dd15, 0x3dd16, 0x3dd39, 0x3dd42, 0x3dd49, 0x3dd4a, + 0x3dd55, 0x3dd56, 0x3dd79, 0x3dde0, 0x3dde5, 0x3e000, + 0x3e059, 0x3e060, 0x3e129, 0x3e140, 0x3e15f, 0x3e162, + 0x3e181, 0x3e182, 0x3e1a1, 0x3e1a2, 0x3e1ed, 0x3e200, + 0x3e35d, 0x3e3cc, 0x3e407, 0x3e420, 0x3e479, 0x3e480, + 0x3e493, 0x3e4a0, 0x3e4a5, 0x3e4c0, 0x3e4cd, 0x3e600, + 0x3edb3, 0x3edb8, 0x3eddb, 0x3ede0, 0x3edfb, 0x3ee00, + 0x3efb5, 0x3efc0, 0x3efd9, 0x3efe0, 0x3efe3, 0x3f000, + 0x3f019, 0x3f020, 0x3f091, 0x3f0a0, 0x3f0b5, 0x3f0c0, + 0x3f111, 0x3f120, 0x3f15d, 0x3f160, 0x3f179, 0x3f180, + 0x3f185, 0x3f1a0, 0x3f1b3, 0x3f200, 0x3f4b1, 0x3f4c0, + 0x3f4dd, 0x3f4e0, 0x3f4fb, 0x3f500, 0x3f517, 0x3f51c, + 0x3f58f, 0x3f590, 0x3f593, 0x3f59a, 0x3f5bb, 0x3f5be, + 0x3f5d7, 0x3f5de, 0x3f5f3, 0x3f600, 0x3f727, 0x3f728, + 0x3f7f7, 0x40000, 0x54dc1, 0x54e00, 0x5703d, 0x57040, + 0x59d5d, 0x59d60, 0x5d7c3, 0x5d7e0, 0x5dcbd, 0x5f000, + 0x5f43d, 0x60000, 0x62697, 0x626a0, 0x668f5, 0x1c0200, + 0x1c03e1, }; enum class _Gcb_property { @@ -399,236 +401,238 @@ 0x19336, 0x19394, 0x193c0, 0x1a174, 0x1a196, 0x1a1b4, 0x1a1c0, 0x1a556, 0x1a564, 0x1a576, 0x1a584, 0x1a5f0, 0x1a604, 0x1a610, 0x1a624, 0x1a630, 0x1a654, 0x1a6d6, - 0x1a734, 0x1a7d0, 0x1a7f4, 0x1a800, 0x1ab04, 0x1acf0, - 0x1b004, 0x1b046, 0x1b050, 0x1b344, 0x1b3e6, 0x1b424, - 0x1b450, 0x1b6b4, 0x1b740, 0x1b804, 0x1b826, 0x1b830, - 0x1ba16, 0x1ba24, 0x1ba66, 0x1ba84, 0x1bae0, 0x1be64, - 0x1be76, 0x1be84, 0x1bea6, 0x1bed4, 0x1bee6, 0x1bef4, - 0x1bf40, 0x1c246, 0x1c2c4, 0x1c346, 0x1c364, 0x1c380, - 0x1cd04, 0x1cd30, 0x1cd44, 0x1ce16, 0x1ce24, 0x1ce90, - 0x1ced4, 0x1cee0, 0x1cf44, 0x1cf50, 0x1cf76, 0x1cf84, - 0x1cfa0, 0x1dc04, 0x1e000, 0x200b1, 0x200c4, 0x200da, - 0x200e1, 0x20100, 0x20281, 0x202f0, 0x20601, 0x20700, - 0x20d04, 0x20f10, 0x2cef4, 0x2cf20, 0x2d7f4, 0x2d800, - 0x2de04, 0x2e000, 0x302a4, 0x30300, 0x30994, 0x309b0, - 0xa66f4, 0xa6730, 0xa6744, 0xa67e0, 0xa69e4, 0xa6a00, - 0xa6f04, 0xa6f20, 0xa8024, 0xa8030, 0xa8064, 0xa8070, - 0xa80b4, 0xa80c0, 0xa8236, 0xa8254, 0xa8276, 0xa8280, - 0xa82c4, 0xa82d0, 0xa8806, 0xa8820, 0xa8b46, 0xa8c44, - 0xa8c60, 0xa8e04, 0xa8f20, 0xa8ff4, 0xa9000, 0xa9264, - 0xa92e0, 0xa9474, 0xa9526, 0xa9534, 0xa9540, 0xa9607, - 0xa97d0, 0xa9804, 0xa9836, 0xa9840, 0xa9b34, 0xa9b46, - 0xa9b64, 0xa9ba6, 0xa9bc4, 0xa9be6, 0xa9c04, 0xa9c10, - 0xa9e54, 0xa9e60, 0xaa294, 0xaa2f6, 0xaa314, 0xaa336, - 0xaa354, 0xaa370, 0xaa434, 0xaa440, 0xaa4c4, 0xaa4d6, - 0xaa4e0, 0xaa7c4, 0xaa7d0, 0xaab04, 0xaab10, 0xaab24, - 0xaab50, 0xaab74, 0xaab90, 0xaabe4, 0xaac00, 0xaac14, - 0xaac20, 0xaaeb6, 0xaaec4, 0xaaee6, 0xaaf00, 0xaaf56, - 0xaaf64, 0xaaf70, 0xabe36, 0xabe54, 0xabe66, 0xabe84, - 0xabe96, 0xabeb0, 0xabec6, 0xabed4, 0xabee0, 0xac00b, - 0xac01c, 0xac1cb, 0xac1dc, 0xac38b, 0xac39c, 0xac54b, - 0xac55c, 0xac70b, 0xac71c, 0xac8cb, 0xac8dc, 0xaca8b, - 0xaca9c, 0xacc4b, 0xacc5c, 0xace0b, 0xace1c, 0xacfcb, - 0xacfdc, 0xad18b, 0xad19c, 0xad34b, 0xad35c, 0xad50b, - 0xad51c, 0xad6cb, 0xad6dc, 0xad88b, 0xad89c, 0xada4b, - 0xada5c, 0xadc0b, 0xadc1c, 0xaddcb, 0xadddc, 0xadf8b, - 0xadf9c, 0xae14b, 0xae15c, 0xae30b, 0xae31c, 0xae4cb, - 0xae4dc, 0xae68b, 0xae69c, 0xae84b, 0xae85c, 0xaea0b, - 0xaea1c, 0xaebcb, 0xaebdc, 0xaed8b, 0xaed9c, 0xaef4b, - 0xaef5c, 0xaf10b, 0xaf11c, 0xaf2cb, 0xaf2dc, 0xaf48b, - 0xaf49c, 0xaf64b, 0xaf65c, 0xaf80b, 0xaf81c, 0xaf9cb, - 0xaf9dc, 0xafb8b, 0xafb9c, 0xafd4b, 0xafd5c, 0xaff0b, - 0xaff1c, 0xb00cb, 0xb00dc, 0xb028b, 0xb029c, 0xb044b, - 0xb045c, 0xb060b, 0xb061c, 0xb07cb, 0xb07dc, 0xb098b, - 0xb099c, 0xb0b4b, 0xb0b5c, 0xb0d0b, 0xb0d1c, 0xb0ecb, - 0xb0edc, 0xb108b, 0xb109c, 0xb124b, 0xb125c, 0xb140b, - 0xb141c, 0xb15cb, 0xb15dc, 0xb178b, 0xb179c, 0xb194b, - 0xb195c, 0xb1b0b, 0xb1b1c, 0xb1ccb, 0xb1cdc, 0xb1e8b, - 0xb1e9c, 0xb204b, 0xb205c, 0xb220b, 0xb221c, 0xb23cb, - 0xb23dc, 0xb258b, 0xb259c, 0xb274b, 0xb275c, 0xb290b, - 0xb291c, 0xb2acb, 0xb2adc, 0xb2c8b, 0xb2c9c, 0xb2e4b, - 0xb2e5c, 0xb300b, 0xb301c, 0xb31cb, 0xb31dc, 0xb338b, - 0xb339c, 0xb354b, 0xb355c, 0xb370b, 0xb371c, 0xb38cb, - 0xb38dc, 0xb3a8b, 0xb3a9c, 0xb3c4b, 0xb3c5c, 0xb3e0b, - 0xb3e1c, 0xb3fcb, 0xb3fdc, 0xb418b, 0xb419c, 0xb434b, - 0xb435c, 0xb450b, 0xb451c, 0xb46cb, 0xb46dc, 0xb488b, - 0xb489c, 0xb4a4b, 0xb4a5c, 0xb4c0b, 0xb4c1c, 0xb4dcb, - 0xb4ddc, 0xb4f8b, 0xb4f9c, 0xb514b, 0xb515c, 0xb530b, - 0xb531c, 0xb54cb, 0xb54dc, 0xb568b, 0xb569c, 0xb584b, - 0xb585c, 0xb5a0b, 0xb5a1c, 0xb5bcb, 0xb5bdc, 0xb5d8b, - 0xb5d9c, 0xb5f4b, 0xb5f5c, 0xb610b, 0xb611c, 0xb62cb, - 0xb62dc, 0xb648b, 0xb649c, 0xb664b, 0xb665c, 0xb680b, - 0xb681c, 0xb69cb, 0xb69dc, 0xb6b8b, 0xb6b9c, 0xb6d4b, - 0xb6d5c, 0xb6f0b, 0xb6f1c, 0xb70cb, 0xb70dc, 0xb728b, - 0xb729c, 0xb744b, 0xb745c, 0xb760b, 0xb761c, 0xb77cb, - 0xb77dc, 0xb798b, 0xb799c, 0xb7b4b, 0xb7b5c, 0xb7d0b, - 0xb7d1c, 0xb7ecb, 0xb7edc, 0xb808b, 0xb809c, 0xb824b, - 0xb825c, 0xb840b, 0xb841c, 0xb85cb, 0xb85dc, 0xb878b, - 0xb879c, 0xb894b, 0xb895c, 0xb8b0b, 0xb8b1c, 0xb8ccb, - 0xb8cdc, 0xb8e8b, 0xb8e9c, 0xb904b, 0xb905c, 0xb920b, - 0xb921c, 0xb93cb, 0xb93dc, 0xb958b, 0xb959c, 0xb974b, - 0xb975c, 0xb990b, 0xb991c, 0xb9acb, 0xb9adc, 0xb9c8b, - 0xb9c9c, 0xb9e4b, 0xb9e5c, 0xba00b, 0xba01c, 0xba1cb, - 0xba1dc, 0xba38b, 0xba39c, 0xba54b, 0xba55c, 0xba70b, - 0xba71c, 0xba8cb, 0xba8dc, 0xbaa8b, 0xbaa9c, 0xbac4b, - 0xbac5c, 0xbae0b, 0xbae1c, 0xbafcb, 0xbafdc, 0xbb18b, - 0xbb19c, 0xbb34b, 0xbb35c, 0xbb50b, 0xbb51c, 0xbb6cb, - 0xbb6dc, 0xbb88b, 0xbb89c, 0xbba4b, 0xbba5c, 0xbbc0b, - 0xbbc1c, 0xbbdcb, 0xbbddc, 0xbbf8b, 0xbbf9c, 0xbc14b, - 0xbc15c, 0xbc30b, 0xbc31c, 0xbc4cb, 0xbc4dc, 0xbc68b, - 0xbc69c, 0xbc84b, 0xbc85c, 0xbca0b, 0xbca1c, 0xbcbcb, - 0xbcbdc, 0xbcd8b, 0xbcd9c, 0xbcf4b, 0xbcf5c, 0xbd10b, - 0xbd11c, 0xbd2cb, 0xbd2dc, 0xbd48b, 0xbd49c, 0xbd64b, - 0xbd65c, 0xbd80b, 0xbd81c, 0xbd9cb, 0xbd9dc, 0xbdb8b, - 0xbdb9c, 0xbdd4b, 0xbdd5c, 0xbdf0b, 0xbdf1c, 0xbe0cb, - 0xbe0dc, 0xbe28b, 0xbe29c, 0xbe44b, 0xbe45c, 0xbe60b, - 0xbe61c, 0xbe7cb, 0xbe7dc, 0xbe98b, 0xbe99c, 0xbeb4b, - 0xbeb5c, 0xbed0b, 0xbed1c, 0xbeecb, 0xbeedc, 0xbf08b, - 0xbf09c, 0xbf24b, 0xbf25c, 0xbf40b, 0xbf41c, 0xbf5cb, - 0xbf5dc, 0xbf78b, 0xbf79c, 0xbf94b, 0xbf95c, 0xbfb0b, - 0xbfb1c, 0xbfccb, 0xbfcdc, 0xbfe8b, 0xbfe9c, 0xc004b, - 0xc005c, 0xc020b, 0xc021c, 0xc03cb, 0xc03dc, 0xc058b, - 0xc059c, 0xc074b, 0xc075c, 0xc090b, 0xc091c, 0xc0acb, - 0xc0adc, 0xc0c8b, 0xc0c9c, 0xc0e4b, 0xc0e5c, 0xc100b, - 0xc101c, 0xc11cb, 0xc11dc, 0xc138b, 0xc139c, 0xc154b, - 0xc155c, 0xc170b, 0xc171c, 0xc18cb, 0xc18dc, 0xc1a8b, - 0xc1a9c, 0xc1c4b, 0xc1c5c, 0xc1e0b, 0xc1e1c, 0xc1fcb, - 0xc1fdc, 0xc218b, 0xc219c, 0xc234b, 0xc235c, 0xc250b, - 0xc251c, 0xc26cb, 0xc26dc, 0xc288b, 0xc289c, 0xc2a4b, - 0xc2a5c, 0xc2c0b, 0xc2c1c, 0xc2dcb, 0xc2ddc, 0xc2f8b, - 0xc2f9c, 0xc314b, 0xc315c, 0xc330b, 0xc331c, 0xc34cb, - 0xc34dc, 0xc368b, 0xc369c, 0xc384b, 0xc385c, 0xc3a0b, - 0xc3a1c, 0xc3bcb, 0xc3bdc, 0xc3d8b, 0xc3d9c, 0xc3f4b, - 0xc3f5c, 0xc410b, 0xc411c, 0xc42cb, 0xc42dc, 0xc448b, - 0xc449c, 0xc464b, 0xc465c, 0xc480b, 0xc481c, 0xc49cb, - 0xc49dc, 0xc4b8b, 0xc4b9c, 0xc4d4b, 0xc4d5c, 0xc4f0b, - 0xc4f1c, 0xc50cb, 0xc50dc, 0xc528b, 0xc529c, 0xc544b, - 0xc545c, 0xc560b, 0xc561c, 0xc57cb, 0xc57dc, 0xc598b, - 0xc599c, 0xc5b4b, 0xc5b5c, 0xc5d0b, 0xc5d1c, 0xc5ecb, - 0xc5edc, 0xc608b, 0xc609c, 0xc624b, 0xc625c, 0xc640b, - 0xc641c, 0xc65cb, 0xc65dc, 0xc678b, 0xc679c, 0xc694b, - 0xc695c, 0xc6b0b, 0xc6b1c, 0xc6ccb, 0xc6cdc, 0xc6e8b, - 0xc6e9c, 0xc704b, 0xc705c, 0xc720b, 0xc721c, 0xc73cb, - 0xc73dc, 0xc758b, 0xc759c, 0xc774b, 0xc775c, 0xc790b, - 0xc791c, 0xc7acb, 0xc7adc, 0xc7c8b, 0xc7c9c, 0xc7e4b, - 0xc7e5c, 0xc800b, 0xc801c, 0xc81cb, 0xc81dc, 0xc838b, - 0xc839c, 0xc854b, 0xc855c, 0xc870b, 0xc871c, 0xc88cb, - 0xc88dc, 0xc8a8b, 0xc8a9c, 0xc8c4b, 0xc8c5c, 0xc8e0b, - 0xc8e1c, 0xc8fcb, 0xc8fdc, 0xc918b, 0xc919c, 0xc934b, - 0xc935c, 0xc950b, 0xc951c, 0xc96cb, 0xc96dc, 0xc988b, - 0xc989c, 0xc9a4b, 0xc9a5c, 0xc9c0b, 0xc9c1c, 0xc9dcb, - 0xc9ddc, 0xc9f8b, 0xc9f9c, 0xca14b, 0xca15c, 0xca30b, - 0xca31c, 0xca4cb, 0xca4dc, 0xca68b, 0xca69c, 0xca84b, - 0xca85c, 0xcaa0b, 0xcaa1c, 0xcabcb, 0xcabdc, 0xcad8b, - 0xcad9c, 0xcaf4b, 0xcaf5c, 0xcb10b, 0xcb11c, 0xcb2cb, - 0xcb2dc, 0xcb48b, 0xcb49c, 0xcb64b, 0xcb65c, 0xcb80b, - 0xcb81c, 0xcb9cb, 0xcb9dc, 0xcbb8b, 0xcbb9c, 0xcbd4b, - 0xcbd5c, 0xcbf0b, 0xcbf1c, 0xcc0cb, 0xcc0dc, 0xcc28b, - 0xcc29c, 0xcc44b, 0xcc45c, 0xcc60b, 0xcc61c, 0xcc7cb, - 0xcc7dc, 0xcc98b, 0xcc99c, 0xccb4b, 0xccb5c, 0xccd0b, - 0xccd1c, 0xccecb, 0xccedc, 0xcd08b, 0xcd09c, 0xcd24b, - 0xcd25c, 0xcd40b, 0xcd41c, 0xcd5cb, 0xcd5dc, 0xcd78b, - 0xcd79c, 0xcd94b, 0xcd95c, 0xcdb0b, 0xcdb1c, 0xcdccb, - 0xcdcdc, 0xcde8b, 0xcde9c, 0xce04b, 0xce05c, 0xce20b, - 0xce21c, 0xce3cb, 0xce3dc, 0xce58b, 0xce59c, 0xce74b, - 0xce75c, 0xce90b, 0xce91c, 0xceacb, 0xceadc, 0xcec8b, - 0xcec9c, 0xcee4b, 0xcee5c, 0xcf00b, 0xcf01c, 0xcf1cb, - 0xcf1dc, 0xcf38b, 0xcf39c, 0xcf54b, 0xcf55c, 0xcf70b, - 0xcf71c, 0xcf8cb, 0xcf8dc, 0xcfa8b, 0xcfa9c, 0xcfc4b, - 0xcfc5c, 0xcfe0b, 0xcfe1c, 0xcffcb, 0xcffdc, 0xd018b, - 0xd019c, 0xd034b, 0xd035c, 0xd050b, 0xd051c, 0xd06cb, - 0xd06dc, 0xd088b, 0xd089c, 0xd0a4b, 0xd0a5c, 0xd0c0b, - 0xd0c1c, 0xd0dcb, 0xd0ddc, 0xd0f8b, 0xd0f9c, 0xd114b, - 0xd115c, 0xd130b, 0xd131c, 0xd14cb, 0xd14dc, 0xd168b, - 0xd169c, 0xd184b, 0xd185c, 0xd1a0b, 0xd1a1c, 0xd1bcb, - 0xd1bdc, 0xd1d8b, 0xd1d9c, 0xd1f4b, 0xd1f5c, 0xd210b, - 0xd211c, 0xd22cb, 0xd22dc, 0xd248b, 0xd249c, 0xd264b, - 0xd265c, 0xd280b, 0xd281c, 0xd29cb, 0xd29dc, 0xd2b8b, - 0xd2b9c, 0xd2d4b, 0xd2d5c, 0xd2f0b, 0xd2f1c, 0xd30cb, - 0xd30dc, 0xd328b, 0xd329c, 0xd344b, 0xd345c, 0xd360b, - 0xd361c, 0xd37cb, 0xd37dc, 0xd398b, 0xd399c, 0xd3b4b, - 0xd3b5c, 0xd3d0b, 0xd3d1c, 0xd3ecb, 0xd3edc, 0xd408b, - 0xd409c, 0xd424b, 0xd425c, 0xd440b, 0xd441c, 0xd45cb, - 0xd45dc, 0xd478b, 0xd479c, 0xd494b, 0xd495c, 0xd4b0b, - 0xd4b1c, 0xd4ccb, 0xd4cdc, 0xd4e8b, 0xd4e9c, 0xd504b, - 0xd505c, 0xd520b, 0xd521c, 0xd53cb, 0xd53dc, 0xd558b, - 0xd559c, 0xd574b, 0xd575c, 0xd590b, 0xd591c, 0xd5acb, - 0xd5adc, 0xd5c8b, 0xd5c9c, 0xd5e4b, 0xd5e5c, 0xd600b, - 0xd601c, 0xd61cb, 0xd61dc, 0xd638b, 0xd639c, 0xd654b, - 0xd655c, 0xd670b, 0xd671c, 0xd68cb, 0xd68dc, 0xd6a8b, - 0xd6a9c, 0xd6c4b, 0xd6c5c, 0xd6e0b, 0xd6e1c, 0xd6fcb, - 0xd6fdc, 0xd718b, 0xd719c, 0xd734b, 0xd735c, 0xd750b, - 0xd751c, 0xd76cb, 0xd76dc, 0xd788b, 0xd789c, 0xd7a40, - 0xd7b08, 0xd7c70, 0xd7cb9, 0xd7fc0, 0xfb1e4, 0xfb1f0, - 0xfe004, 0xfe100, 0xfe204, 0xfe300, 0xfeff1, 0xff000, - 0xff9e4, 0xffa00, 0xfff01, 0xfffc0, 0x101fd4, 0x101fe0, - 0x102e04, 0x102e10, 0x103764, 0x1037b0, 0x10a014, 0x10a040, - 0x10a054, 0x10a070, 0x10a0c4, 0x10a100, 0x10a384, 0x10a3b0, - 0x10a3f4, 0x10a400, 0x10ae54, 0x10ae70, 0x10d244, 0x10d280, - 0x10d694, 0x10d6e0, 0x10eab4, 0x10ead0, 0x10efc4, 0x10f000, - 0x10f464, 0x10f510, 0x10f824, 0x10f860, 0x110006, 0x110014, - 0x110026, 0x110030, 0x110384, 0x110470, 0x110704, 0x110710, - 0x110734, 0x110750, 0x1107f4, 0x110826, 0x110830, 0x110b06, - 0x110b34, 0x110b76, 0x110b94, 0x110bb0, 0x110bd5, 0x110be0, - 0x110c24, 0x110c30, 0x110cd5, 0x110ce0, 0x111004, 0x111030, - 0x111274, 0x1112c6, 0x1112d4, 0x111350, 0x111456, 0x111470, - 0x111734, 0x111740, 0x111804, 0x111826, 0x111830, 0x111b36, - 0x111b64, 0x111bf6, 0x111c04, 0x111c10, 0x111c25, 0x111c40, - 0x111c94, 0x111cd0, 0x111ce6, 0x111cf4, 0x111d00, 0x1122c6, - 0x1122f4, 0x112326, 0x112344, 0x112380, 0x1123e4, 0x1123f0, - 0x112414, 0x112420, 0x112df4, 0x112e06, 0x112e34, 0x112eb0, - 0x113004, 0x113026, 0x113040, 0x1133b4, 0x1133d0, 0x1133e4, - 0x1133f6, 0x113404, 0x113416, 0x113450, 0x113476, 0x113490, - 0x1134b6, 0x1134d4, 0x1134e0, 0x113574, 0x113580, 0x113626, - 0x113640, 0x113664, 0x1136d0, 0x113704, 0x113750, 0x113b84, - 0x113b96, 0x113bb4, 0x113c10, 0x113c24, 0x113c30, 0x113c54, - 0x113c60, 0x113c74, 0x113ca6, 0x113cb0, 0x113cc6, 0x113ce4, - 0x113d15, 0x113d24, 0x113d30, 0x113e14, 0x113e30, 0x114356, - 0x114384, 0x114406, 0x114424, 0x114456, 0x114464, 0x114470, - 0x1145e4, 0x1145f0, 0x114b04, 0x114b16, 0x114b34, 0x114b96, - 0x114ba4, 0x114bb6, 0x114bd4, 0x114be6, 0x114bf4, 0x114c16, - 0x114c24, 0x114c40, 0x115af4, 0x115b06, 0x115b24, 0x115b60, - 0x115b86, 0x115bc4, 0x115be6, 0x115bf4, 0x115c10, 0x115dc4, - 0x115de0, 0x116306, 0x116334, 0x1163b6, 0x1163d4, 0x1163e6, - 0x1163f4, 0x116410, 0x116ab4, 0x116ac6, 0x116ad4, 0x116ae6, - 0x116b04, 0x116b80, 0x1171d4, 0x1171e6, 0x1171f4, 0x117200, - 0x117224, 0x117266, 0x117274, 0x1172c0, 0x1182c6, 0x1182f4, - 0x118386, 0x118394, 0x1183b0, 0x119304, 0x119316, 0x119360, - 0x119376, 0x119390, 0x1193b4, 0x1193f5, 0x119406, 0x119415, - 0x119426, 0x119434, 0x119440, 0x119d16, 0x119d44, 0x119d80, - 0x119da4, 0x119dc6, 0x119e04, 0x119e10, 0x119e46, 0x119e50, - 0x11a014, 0x11a0b0, 0x11a334, 0x11a396, 0x11a3a5, 0x11a3b4, - 0x11a3f0, 0x11a474, 0x11a480, 0x11a514, 0x11a576, 0x11a594, - 0x11a5c0, 0x11a845, 0x11a8a4, 0x11a976, 0x11a984, 0x11a9a0, - 0x11c2f6, 0x11c304, 0x11c370, 0x11c384, 0x11c3e6, 0x11c3f4, - 0x11c400, 0x11c924, 0x11ca80, 0x11ca96, 0x11caa4, 0x11cb16, - 0x11cb24, 0x11cb46, 0x11cb54, 0x11cb70, 0x11d314, 0x11d370, - 0x11d3a4, 0x11d3b0, 0x11d3c4, 0x11d3e0, 0x11d3f4, 0x11d465, - 0x11d474, 0x11d480, 0x11d8a6, 0x11d8f0, 0x11d904, 0x11d920, - 0x11d936, 0x11d954, 0x11d966, 0x11d974, 0x11d980, 0x11ef34, - 0x11ef56, 0x11ef70, 0x11f004, 0x11f025, 0x11f036, 0x11f040, - 0x11f346, 0x11f364, 0x11f3b0, 0x11f3e6, 0x11f404, 0x11f430, - 0x11f5a4, 0x11f5b0, 0x134301, 0x134404, 0x134410, 0x134474, - 0x134560, 0x1611e4, 0x1612a6, 0x1612d4, 0x161300, 0x16af04, - 0x16af50, 0x16b304, 0x16b370, 0x16d638, 0x16d640, 0x16d678, - 0x16d6b0, 0x16f4f4, 0x16f500, 0x16f516, 0x16f880, 0x16f8f4, - 0x16f930, 0x16fe44, 0x16fe50, 0x16ff04, 0x16ff20, 0x1bc9d4, - 0x1bc9f0, 0x1bca01, 0x1bca40, 0x1cf004, 0x1cf2e0, 0x1cf304, - 0x1cf470, 0x1d1654, 0x1d16a0, 0x1d16d4, 0x1d1731, 0x1d17b4, - 0x1d1830, 0x1d1854, 0x1d18c0, 0x1d1aa4, 0x1d1ae0, 0x1d2424, - 0x1d2450, 0x1da004, 0x1da370, 0x1da3b4, 0x1da6d0, 0x1da754, - 0x1da760, 0x1da844, 0x1da850, 0x1da9b4, 0x1daa00, 0x1daa14, - 0x1dab00, 0x1e0004, 0x1e0070, 0x1e0084, 0x1e0190, 0x1e01b4, - 0x1e0220, 0x1e0234, 0x1e0250, 0x1e0264, 0x1e02b0, 0x1e08f4, - 0x1e0900, 0x1e1304, 0x1e1370, 0x1e2ae4, 0x1e2af0, 0x1e2ec4, - 0x1e2f00, 0x1e4ec4, 0x1e4f00, 0x1e5ee4, 0x1e5f00, 0x1e8d04, - 0x1e8d70, 0x1e9444, 0x1e94b0, 0x1f1e6d, 0x1f2000, 0x1f3fb4, - 0x1f4000, 0xe00001, 0xe00204, 0xe00801, 0xe01004, 0xe01f01, - 0xe10000, + 0x1a734, 0x1a7d0, 0x1a7f4, 0x1a800, 0x1ab04, 0x1ade0, + 0x1ae04, 0x1aec0, 0x1b004, 0x1b046, 0x1b050, 0x1b344, + 0x1b3e6, 0x1b424, 0x1b450, 0x1b6b4, 0x1b740, 0x1b804, + 0x1b826, 0x1b830, 0x1ba16, 0x1ba24, 0x1ba66, 0x1ba84, + 0x1bae0, 0x1be64, 0x1be76, 0x1be84, 0x1bea6, 0x1bed4, + 0x1bee6, 0x1bef4, 0x1bf40, 0x1c246, 0x1c2c4, 0x1c346, + 0x1c364, 0x1c380, 0x1cd04, 0x1cd30, 0x1cd44, 0x1ce16, + 0x1ce24, 0x1ce90, 0x1ced4, 0x1cee0, 0x1cf44, 0x1cf50, + 0x1cf76, 0x1cf84, 0x1cfa0, 0x1dc04, 0x1e000, 0x200b1, + 0x200c4, 0x200da, 0x200e1, 0x20100, 0x20281, 0x202f0, + 0x20601, 0x20700, 0x20d04, 0x20f10, 0x2cef4, 0x2cf20, + 0x2d7f4, 0x2d800, 0x2de04, 0x2e000, 0x302a4, 0x30300, + 0x30994, 0x309b0, 0xa66f4, 0xa6730, 0xa6744, 0xa67e0, + 0xa69e4, 0xa6a00, 0xa6f04, 0xa6f20, 0xa8024, 0xa8030, + 0xa8064, 0xa8070, 0xa80b4, 0xa80c0, 0xa8236, 0xa8254, + 0xa8276, 0xa8280, 0xa82c4, 0xa82d0, 0xa8806, 0xa8820, + 0xa8b46, 0xa8c44, 0xa8c60, 0xa8e04, 0xa8f20, 0xa8ff4, + 0xa9000, 0xa9264, 0xa92e0, 0xa9474, 0xa9526, 0xa9534, + 0xa9540, 0xa9607, 0xa97d0, 0xa9804, 0xa9836, 0xa9840, + 0xa9b34, 0xa9b46, 0xa9b64, 0xa9ba6, 0xa9bc4, 0xa9be6, + 0xa9c04, 0xa9c10, 0xa9e54, 0xa9e60, 0xaa294, 0xaa2f6, + 0xaa314, 0xaa336, 0xaa354, 0xaa370, 0xaa434, 0xaa440, + 0xaa4c4, 0xaa4d6, 0xaa4e0, 0xaa7c4, 0xaa7d0, 0xaab04, + 0xaab10, 0xaab24, 0xaab50, 0xaab74, 0xaab90, 0xaabe4, + 0xaac00, 0xaac14, 0xaac20, 0xaaeb6, 0xaaec4, 0xaaee6, + 0xaaf00, 0xaaf56, 0xaaf64, 0xaaf70, 0xabe36, 0xabe54, + 0xabe66, 0xabe84, 0xabe96, 0xabeb0, 0xabec6, 0xabed4, + 0xabee0, 0xac00b, 0xac01c, 0xac1cb, 0xac1dc, 0xac38b, + 0xac39c, 0xac54b, 0xac55c, 0xac70b, 0xac71c, 0xac8cb, + 0xac8dc, 0xaca8b, 0xaca9c, 0xacc4b, 0xacc5c, 0xace0b, + 0xace1c, 0xacfcb, 0xacfdc, 0xad18b, 0xad19c, 0xad34b, + 0xad35c, 0xad50b, 0xad51c, 0xad6cb, 0xad6dc, 0xad88b, + 0xad89c, 0xada4b, 0xada5c, 0xadc0b, 0xadc1c, 0xaddcb, + 0xadddc, 0xadf8b, 0xadf9c, 0xae14b, 0xae15c, 0xae30b, + 0xae31c, 0xae4cb, 0xae4dc, 0xae68b, 0xae69c, 0xae84b, + 0xae85c, 0xaea0b, 0xaea1c, 0xaebcb, 0xaebdc, 0xaed8b, + 0xaed9c, 0xaef4b, 0xaef5c, 0xaf10b, 0xaf11c, 0xaf2cb, + 0xaf2dc, 0xaf48b, 0xaf49c, 0xaf64b, 0xaf65c, 0xaf80b, + 0xaf81c, 0xaf9cb, 0xaf9dc, 0xafb8b, 0xafb9c, 0xafd4b, + 0xafd5c, 0xaff0b, 0xaff1c, 0xb00cb, 0xb00dc, 0xb028b, + 0xb029c, 0xb044b, 0xb045c, 0xb060b, 0xb061c, 0xb07cb, + 0xb07dc, 0xb098b, 0xb099c, 0xb0b4b, 0xb0b5c, 0xb0d0b, + 0xb0d1c, 0xb0ecb, 0xb0edc, 0xb108b, 0xb109c, 0xb124b, + 0xb125c, 0xb140b, 0xb141c, 0xb15cb, 0xb15dc, 0xb178b, + 0xb179c, 0xb194b, 0xb195c, 0xb1b0b, 0xb1b1c, 0xb1ccb, + 0xb1cdc, 0xb1e8b, 0xb1e9c, 0xb204b, 0xb205c, 0xb220b, + 0xb221c, 0xb23cb, 0xb23dc, 0xb258b, 0xb259c, 0xb274b, + 0xb275c, 0xb290b, 0xb291c, 0xb2acb, 0xb2adc, 0xb2c8b, + 0xb2c9c, 0xb2e4b, 0xb2e5c, 0xb300b, 0xb301c, 0xb31cb, + 0xb31dc, 0xb338b, 0xb339c, 0xb354b, 0xb355c, 0xb370b, + 0xb371c, 0xb38cb, 0xb38dc, 0xb3a8b, 0xb3a9c, 0xb3c4b, + 0xb3c5c, 0xb3e0b, 0xb3e1c, 0xb3fcb, 0xb3fdc, 0xb418b, + 0xb419c, 0xb434b, 0xb435c, 0xb450b, 0xb451c, 0xb46cb, + 0xb46dc, 0xb488b, 0xb489c, 0xb4a4b, 0xb4a5c, 0xb4c0b, + 0xb4c1c, 0xb4dcb, 0xb4ddc, 0xb4f8b, 0xb4f9c, 0xb514b, + 0xb515c, 0xb530b, 0xb531c, 0xb54cb, 0xb54dc, 0xb568b, + 0xb569c, 0xb584b, 0xb585c, 0xb5a0b, 0xb5a1c, 0xb5bcb, + 0xb5bdc, 0xb5d8b, 0xb5d9c, 0xb5f4b, 0xb5f5c, 0xb610b, + 0xb611c, 0xb62cb, 0xb62dc, 0xb648b, 0xb649c, 0xb664b, + 0xb665c, 0xb680b, 0xb681c, 0xb69cb, 0xb69dc, 0xb6b8b, + 0xb6b9c, 0xb6d4b, 0xb6d5c, 0xb6f0b, 0xb6f1c, 0xb70cb, + 0xb70dc, 0xb728b, 0xb729c, 0xb744b, 0xb745c, 0xb760b, + 0xb761c, 0xb77cb, 0xb77dc, 0xb798b, 0xb799c, 0xb7b4b, + 0xb7b5c, 0xb7d0b, 0xb7d1c, 0xb7ecb, 0xb7edc, 0xb808b, + 0xb809c, 0xb824b, 0xb825c, 0xb840b, 0xb841c, 0xb85cb, + 0xb85dc, 0xb878b, 0xb879c, 0xb894b, 0xb895c, 0xb8b0b, + 0xb8b1c, 0xb8ccb, 0xb8cdc, 0xb8e8b, 0xb8e9c, 0xb904b, + 0xb905c, 0xb920b, 0xb921c, 0xb93cb, 0xb93dc, 0xb958b, + 0xb959c, 0xb974b, 0xb975c, 0xb990b, 0xb991c, 0xb9acb, + 0xb9adc, 0xb9c8b, 0xb9c9c, 0xb9e4b, 0xb9e5c, 0xba00b, + 0xba01c, 0xba1cb, 0xba1dc, 0xba38b, 0xba39c, 0xba54b, + 0xba55c, 0xba70b, 0xba71c, 0xba8cb, 0xba8dc, 0xbaa8b, + 0xbaa9c, 0xbac4b, 0xbac5c, 0xbae0b, 0xbae1c, 0xbafcb, + 0xbafdc, 0xbb18b, 0xbb19c, 0xbb34b, 0xbb35c, 0xbb50b, + 0xbb51c, 0xbb6cb, 0xbb6dc, 0xbb88b, 0xbb89c, 0xbba4b, + 0xbba5c, 0xbbc0b, 0xbbc1c, 0xbbdcb, 0xbbddc, 0xbbf8b, + 0xbbf9c, 0xbc14b, 0xbc15c, 0xbc30b, 0xbc31c, 0xbc4cb, + 0xbc4dc, 0xbc68b, 0xbc69c, 0xbc84b, 0xbc85c, 0xbca0b, + 0xbca1c, 0xbcbcb, 0xbcbdc, 0xbcd8b, 0xbcd9c, 0xbcf4b, + 0xbcf5c, 0xbd10b, 0xbd11c, 0xbd2cb, 0xbd2dc, 0xbd48b, + 0xbd49c, 0xbd64b, 0xbd65c, 0xbd80b, 0xbd81c, 0xbd9cb, + 0xbd9dc, 0xbdb8b, 0xbdb9c, 0xbdd4b, 0xbdd5c, 0xbdf0b, + 0xbdf1c, 0xbe0cb, 0xbe0dc, 0xbe28b, 0xbe29c, 0xbe44b, + 0xbe45c, 0xbe60b, 0xbe61c, 0xbe7cb, 0xbe7dc, 0xbe98b, + 0xbe99c, 0xbeb4b, 0xbeb5c, 0xbed0b, 0xbed1c, 0xbeecb, + 0xbeedc, 0xbf08b, 0xbf09c, 0xbf24b, 0xbf25c, 0xbf40b, + 0xbf41c, 0xbf5cb, 0xbf5dc, 0xbf78b, 0xbf79c, 0xbf94b, + 0xbf95c, 0xbfb0b, 0xbfb1c, 0xbfccb, 0xbfcdc, 0xbfe8b, + 0xbfe9c, 0xc004b, 0xc005c, 0xc020b, 0xc021c, 0xc03cb, + 0xc03dc, 0xc058b, 0xc059c, 0xc074b, 0xc075c, 0xc090b, + 0xc091c, 0xc0acb, 0xc0adc, 0xc0c8b, 0xc0c9c, 0xc0e4b, + 0xc0e5c, 0xc100b, 0xc101c, 0xc11cb, 0xc11dc, 0xc138b, + 0xc139c, 0xc154b, 0xc155c, 0xc170b, 0xc171c, 0xc18cb, + 0xc18dc, 0xc1a8b, 0xc1a9c, 0xc1c4b, 0xc1c5c, 0xc1e0b, + 0xc1e1c, 0xc1fcb, 0xc1fdc, 0xc218b, 0xc219c, 0xc234b, + 0xc235c, 0xc250b, 0xc251c, 0xc26cb, 0xc26dc, 0xc288b, + 0xc289c, 0xc2a4b, 0xc2a5c, 0xc2c0b, 0xc2c1c, 0xc2dcb, + 0xc2ddc, 0xc2f8b, 0xc2f9c, 0xc314b, 0xc315c, 0xc330b, + 0xc331c, 0xc34cb, 0xc34dc, 0xc368b, 0xc369c, 0xc384b, + 0xc385c, 0xc3a0b, 0xc3a1c, 0xc3bcb, 0xc3bdc, 0xc3d8b, + 0xc3d9c, 0xc3f4b, 0xc3f5c, 0xc410b, 0xc411c, 0xc42cb, + 0xc42dc, 0xc448b, 0xc449c, 0xc464b, 0xc465c, 0xc480b, + 0xc481c, 0xc49cb, 0xc49dc, 0xc4b8b, 0xc4b9c, 0xc4d4b, + 0xc4d5c, 0xc4f0b, 0xc4f1c, 0xc50cb, 0xc50dc, 0xc528b, + 0xc529c, 0xc544b, 0xc545c, 0xc560b, 0xc561c, 0xc57cb, + 0xc57dc, 0xc598b, 0xc599c, 0xc5b4b, 0xc5b5c, 0xc5d0b, + 0xc5d1c, 0xc5ecb, 0xc5edc, 0xc608b, 0xc609c, 0xc624b, + 0xc625c, 0xc640b, 0xc641c, 0xc65cb, 0xc65dc, 0xc678b, + 0xc679c, 0xc694b, 0xc695c, 0xc6b0b, 0xc6b1c, 0xc6ccb, + 0xc6cdc, 0xc6e8b, 0xc6e9c, 0xc704b, 0xc705c, 0xc720b, + 0xc721c, 0xc73cb, 0xc73dc, 0xc758b, 0xc759c, 0xc774b, + 0xc775c, 0xc790b, 0xc791c, 0xc7acb, 0xc7adc, 0xc7c8b, + 0xc7c9c, 0xc7e4b, 0xc7e5c, 0xc800b, 0xc801c, 0xc81cb, + 0xc81dc, 0xc838b, 0xc839c, 0xc854b, 0xc855c, 0xc870b, + 0xc871c, 0xc88cb, 0xc88dc, 0xc8a8b, 0xc8a9c, 0xc8c4b, + 0xc8c5c, 0xc8e0b, 0xc8e1c, 0xc8fcb, 0xc8fdc, 0xc918b, + 0xc919c, 0xc934b, 0xc935c, 0xc950b, 0xc951c, 0xc96cb, + 0xc96dc, 0xc988b, 0xc989c, 0xc9a4b, 0xc9a5c, 0xc9c0b, + 0xc9c1c, 0xc9dcb, 0xc9ddc, 0xc9f8b, 0xc9f9c, 0xca14b, + 0xca15c, 0xca30b, 0xca31c, 0xca4cb, 0xca4dc, 0xca68b, + 0xca69c, 0xca84b, 0xca85c, 0xcaa0b, 0xcaa1c, 0xcabcb, + 0xcabdc, 0xcad8b, 0xcad9c, 0xcaf4b, 0xcaf5c, 0xcb10b, + 0xcb11c, 0xcb2cb, 0xcb2dc, 0xcb48b, 0xcb49c, 0xcb64b, + 0xcb65c, 0xcb80b, 0xcb81c, 0xcb9cb, 0xcb9dc, 0xcbb8b, + 0xcbb9c, 0xcbd4b, 0xcbd5c, 0xcbf0b, 0xcbf1c, 0xcc0cb, + 0xcc0dc, 0xcc28b, 0xcc29c, 0xcc44b, 0xcc45c, 0xcc60b, + 0xcc61c, 0xcc7cb, 0xcc7dc, 0xcc98b, 0xcc99c, 0xccb4b, + 0xccb5c, 0xccd0b, 0xccd1c, 0xccecb, 0xccedc, 0xcd08b, + 0xcd09c, 0xcd24b, 0xcd25c, 0xcd40b, 0xcd41c, 0xcd5cb, + 0xcd5dc, 0xcd78b, 0xcd79c, 0xcd94b, 0xcd95c, 0xcdb0b, + 0xcdb1c, 0xcdccb, 0xcdcdc, 0xcde8b, 0xcde9c, 0xce04b, + 0xce05c, 0xce20b, 0xce21c, 0xce3cb, 0xce3dc, 0xce58b, + 0xce59c, 0xce74b, 0xce75c, 0xce90b, 0xce91c, 0xceacb, + 0xceadc, 0xcec8b, 0xcec9c, 0xcee4b, 0xcee5c, 0xcf00b, + 0xcf01c, 0xcf1cb, 0xcf1dc, 0xcf38b, 0xcf39c, 0xcf54b, + 0xcf55c, 0xcf70b, 0xcf71c, 0xcf8cb, 0xcf8dc, 0xcfa8b, + 0xcfa9c, 0xcfc4b, 0xcfc5c, 0xcfe0b, 0xcfe1c, 0xcffcb, + 0xcffdc, 0xd018b, 0xd019c, 0xd034b, 0xd035c, 0xd050b, + 0xd051c, 0xd06cb, 0xd06dc, 0xd088b, 0xd089c, 0xd0a4b, + 0xd0a5c, 0xd0c0b, 0xd0c1c, 0xd0dcb, 0xd0ddc, 0xd0f8b, + 0xd0f9c, 0xd114b, 0xd115c, 0xd130b, 0xd131c, 0xd14cb, + 0xd14dc, 0xd168b, 0xd169c, 0xd184b, 0xd185c, 0xd1a0b, + 0xd1a1c, 0xd1bcb, 0xd1bdc, 0xd1d8b, 0xd1d9c, 0xd1f4b, + 0xd1f5c, 0xd210b, 0xd211c, 0xd22cb, 0xd22dc, 0xd248b, + 0xd249c, 0xd264b, 0xd265c, 0xd280b, 0xd281c, 0xd29cb, + 0xd29dc, 0xd2b8b, 0xd2b9c, 0xd2d4b, 0xd2d5c, 0xd2f0b, + 0xd2f1c, 0xd30cb, 0xd30dc, 0xd328b, 0xd329c, 0xd344b, + 0xd345c, 0xd360b, 0xd361c, 0xd37cb, 0xd37dc, 0xd398b, + 0xd399c, 0xd3b4b, 0xd3b5c, 0xd3d0b, 0xd3d1c, 0xd3ecb, + 0xd3edc, 0xd408b, 0xd409c, 0xd424b, 0xd425c, 0xd440b, + 0xd441c, 0xd45cb, 0xd45dc, 0xd478b, 0xd479c, 0xd494b, + 0xd495c, 0xd4b0b, 0xd4b1c, 0xd4ccb, 0xd4cdc, 0xd4e8b, + 0xd4e9c, 0xd504b, 0xd505c, 0xd520b, 0xd521c, 0xd53cb, + 0xd53dc, 0xd558b, 0xd559c, 0xd574b, 0xd575c, 0xd590b, + 0xd591c, 0xd5acb, 0xd5adc, 0xd5c8b, 0xd5c9c, 0xd5e4b, + 0xd5e5c, 0xd600b, 0xd601c, 0xd61cb, 0xd61dc, 0xd638b, + 0xd639c, 0xd654b, 0xd655c, 0xd670b, 0xd671c, 0xd68cb, + 0xd68dc, 0xd6a8b, 0xd6a9c, 0xd6c4b, 0xd6c5c, 0xd6e0b, + 0xd6e1c, 0xd6fcb, 0xd6fdc, 0xd718b, 0xd719c, 0xd734b, + 0xd735c, 0xd750b, 0xd751c, 0xd76cb, 0xd76dc, 0xd788b, + 0xd789c, 0xd7a40, 0xd7b08, 0xd7c70, 0xd7cb9, 0xd7fc0, + 0xfb1e4, 0xfb1f0, 0xfe004, 0xfe100, 0xfe204, 0xfe300, + 0xfeff1, 0xff000, 0xff9e4, 0xffa00, 0xfff01, 0xfffc0, + 0x101fd4, 0x101fe0, 0x102e04, 0x102e10, 0x103764, 0x1037b0, + 0x10a014, 0x10a040, 0x10a054, 0x10a070, 0x10a0c4, 0x10a100, + 0x10a384, 0x10a3b0, 0x10a3f4, 0x10a400, 0x10ae54, 0x10ae70, + 0x10d244, 0x10d280, 0x10d694, 0x10d6e0, 0x10eab4, 0x10ead0, + 0x10efa4, 0x10f000, 0x10f464, 0x10f510, 0x10f824, 0x10f860, + 0x110006, 0x110014, 0x110026, 0x110030, 0x110384, 0x110470, + 0x110704, 0x110710, 0x110734, 0x110750, 0x1107f4, 0x110826, + 0x110830, 0x110b06, 0x110b34, 0x110b76, 0x110b94, 0x110bb0, + 0x110bd5, 0x110be0, 0x110c24, 0x110c30, 0x110cd5, 0x110ce0, + 0x111004, 0x111030, 0x111274, 0x1112c6, 0x1112d4, 0x111350, + 0x111456, 0x111470, 0x111734, 0x111740, 0x111804, 0x111826, + 0x111830, 0x111b36, 0x111b64, 0x111bf6, 0x111c04, 0x111c10, + 0x111c25, 0x111c40, 0x111c94, 0x111cd0, 0x111ce6, 0x111cf4, + 0x111d00, 0x1122c6, 0x1122f4, 0x112326, 0x112344, 0x112380, + 0x1123e4, 0x1123f0, 0x112414, 0x112420, 0x112df4, 0x112e06, + 0x112e34, 0x112eb0, 0x113004, 0x113026, 0x113040, 0x1133b4, + 0x1133d0, 0x1133e4, 0x1133f6, 0x113404, 0x113416, 0x113450, + 0x113476, 0x113490, 0x1134b6, 0x1134d4, 0x1134e0, 0x113574, + 0x113580, 0x113626, 0x113640, 0x113664, 0x1136d0, 0x113704, + 0x113750, 0x113b84, 0x113b96, 0x113bb4, 0x113c10, 0x113c24, + 0x113c30, 0x113c54, 0x113c60, 0x113c74, 0x113ca6, 0x113cb0, + 0x113cc6, 0x113ce4, 0x113d15, 0x113d24, 0x113d30, 0x113e14, + 0x113e30, 0x114356, 0x114384, 0x114406, 0x114424, 0x114456, + 0x114464, 0x114470, 0x1145e4, 0x1145f0, 0x114b04, 0x114b16, + 0x114b34, 0x114b96, 0x114ba4, 0x114bb6, 0x114bd4, 0x114be6, + 0x114bf4, 0x114c16, 0x114c24, 0x114c40, 0x115af4, 0x115b06, + 0x115b24, 0x115b60, 0x115b86, 0x115bc4, 0x115be6, 0x115bf4, + 0x115c10, 0x115dc4, 0x115de0, 0x116306, 0x116334, 0x1163b6, + 0x1163d4, 0x1163e6, 0x1163f4, 0x116410, 0x116ab4, 0x116ac6, + 0x116ad4, 0x116ae6, 0x116b04, 0x116b80, 0x1171d4, 0x1171e6, + 0x1171f4, 0x117200, 0x117224, 0x117266, 0x117274, 0x1172c0, + 0x1182c6, 0x1182f4, 0x118386, 0x118394, 0x1183b0, 0x119304, + 0x119316, 0x119360, 0x119376, 0x119390, 0x1193b4, 0x1193f5, + 0x119406, 0x119415, 0x119426, 0x119434, 0x119440, 0x119d16, + 0x119d44, 0x119d80, 0x119da4, 0x119dc6, 0x119e04, 0x119e10, + 0x119e46, 0x119e50, 0x11a014, 0x11a0b0, 0x11a334, 0x11a396, + 0x11a3a0, 0x11a3b4, 0x11a3f0, 0x11a474, 0x11a480, 0x11a514, + 0x11a576, 0x11a594, 0x11a5c0, 0x11a845, 0x11a8a4, 0x11a976, + 0x11a984, 0x11a9a0, 0x11b604, 0x11b616, 0x11b624, 0x11b656, + 0x11b664, 0x11b676, 0x11b680, 0x11c2f6, 0x11c304, 0x11c370, + 0x11c384, 0x11c3e6, 0x11c3f4, 0x11c400, 0x11c924, 0x11ca80, + 0x11ca96, 0x11caa4, 0x11cb16, 0x11cb24, 0x11cb46, 0x11cb54, + 0x11cb70, 0x11d314, 0x11d370, 0x11d3a4, 0x11d3b0, 0x11d3c4, + 0x11d3e0, 0x11d3f4, 0x11d465, 0x11d474, 0x11d480, 0x11d8a6, + 0x11d8f0, 0x11d904, 0x11d920, 0x11d936, 0x11d954, 0x11d966, + 0x11d974, 0x11d980, 0x11ef34, 0x11ef56, 0x11ef70, 0x11f004, + 0x11f025, 0x11f036, 0x11f040, 0x11f346, 0x11f364, 0x11f3b0, + 0x11f3e6, 0x11f404, 0x11f430, 0x11f5a4, 0x11f5b0, 0x134301, + 0x134404, 0x134410, 0x134474, 0x134560, 0x1611e4, 0x1612a6, + 0x1612d4, 0x161300, 0x16af04, 0x16af50, 0x16b304, 0x16b370, + 0x16d638, 0x16d640, 0x16d678, 0x16d6b0, 0x16f4f4, 0x16f500, + 0x16f516, 0x16f880, 0x16f8f4, 0x16f930, 0x16fe44, 0x16fe50, + 0x16ff04, 0x16ff20, 0x1bc9d4, 0x1bc9f0, 0x1bca01, 0x1bca40, + 0x1cf004, 0x1cf2e0, 0x1cf304, 0x1cf470, 0x1d1654, 0x1d16a0, + 0x1d16d4, 0x1d1731, 0x1d17b4, 0x1d1830, 0x1d1854, 0x1d18c0, + 0x1d1aa4, 0x1d1ae0, 0x1d2424, 0x1d2450, 0x1da004, 0x1da370, + 0x1da3b4, 0x1da6d0, 0x1da754, 0x1da760, 0x1da844, 0x1da850, + 0x1da9b4, 0x1daa00, 0x1daa14, 0x1dab00, 0x1e0004, 0x1e0070, + 0x1e0084, 0x1e0190, 0x1e01b4, 0x1e0220, 0x1e0234, 0x1e0250, + 0x1e0264, 0x1e02b0, 0x1e08f4, 0x1e0900, 0x1e1304, 0x1e1370, + 0x1e2ae4, 0x1e2af0, 0x1e2ec4, 0x1e2f00, 0x1e4ec4, 0x1e4f00, + 0x1e5ee4, 0x1e5f00, 0x1e6e34, 0x1e6e40, 0x1e6e64, 0x1e6e70, + 0x1e6ee4, 0x1e6f00, 0x1e6f54, 0x1e6f60, 0x1e8d04, 0x1e8d70, + 0x1e9444, 0x1e94b0, 0x1f1e6d, 0x1f2000, 0x1f3fb4, 0x1f4000, + 0xe00001, 0xe00204, 0xe00801, 0xe01004, 0xe01f01, 0xe10000, }; inline constexpr char32_t __incb_linkers[] = { - 0x094d, 0x09cd, 0x0acd, 0x0b4d, 0x0c4d, 0x0d4d, + 0x094d, 0x09cd, 0x0acd, 0x0b4d, 0x0c4d, 0x0d4d, 0x1039, 0x17d2, 0x1a60, 0x1b44, 0x1bab, 0xa9c0, 0xaaf6, 0x10a3f, 0x11133, 0x113d0, 0x1193e, 0x11a47, 0x11a99, 0x11f42, }; enum class _InCB { _Consonant = 1, _Extend = 2 }; @@ -681,94 +685,109 @@ 0x3cd6, 0x3cd8, 0x3cde, 0x3ce0, 0x3ce6, 0x3ce8, 0x3dc6, 0x3dfc, 0x3e02, 0x3e14, 0x3e1a, 0x3e20, 0x3e36, 0x3e60, 0x3e66, 0x3ef4, 0x3f1a, 0x3f1c, - 0x40b6, 0x40c4, 0x40ca, 0x40e0, 0x40e6, 0x40ec, - 0x40f6, 0x40fc, 0x4162, 0x4168, 0x417a, 0x4184, - 0x41c6, 0x41d4, 0x420a, 0x420c, 0x4216, 0x421c, - 0x4236, 0x4238, 0x4276, 0x4278, 0x4d76, 0x4d80, - 0x5c4a, 0x5c58, 0x5cca, 0x5cd4, 0x5d4a, 0x5d50, - 0x5dca, 0x5dd0, 0x5ed2, 0x5ed8, 0x5ede, 0x5ef8, - 0x5f1a, 0x5f1c, 0x5f26, 0x5f50, 0x5f76, 0x5f78, - 0x602e, 0x6038, 0x603e, 0x6040, 0x6216, 0x621c, - 0x62a6, 0x62a8, 0x6482, 0x648c, 0x649e, 0x64a4, - 0x64ca, 0x64cc, 0x64e6, 0x64f0, 0x685e, 0x6864, - 0x686e, 0x6870, 0x695a, 0x695c, 0x6962, 0x697c, - 0x6982, 0x6984, 0x698a, 0x698c, 0x6996, 0x69b4, - 0x69ce, 0x69f4, 0x69fe, 0x6a00, 0x6ac2, 0x6b3c, - 0x6c02, 0x6c10, 0x6cd2, 0x6cf8, 0x6d0a, 0x6d14, - 0x6dae, 0x6dd0, 0x6e02, 0x6e08, 0x6e8a, 0x6e98, - 0x6ea2, 0x6eb8, 0x6f9a, 0x6f9c, 0x6fa2, 0x6fa8, - 0x6fb6, 0x6fb8, 0x6fbe, 0x6fd0, 0x70b2, 0x70d0, - 0x70da, 0x70e0, 0x7342, 0x734c, 0x7352, 0x7384, - 0x738a, 0x73a4, 0x73b6, 0x73b8, 0x73d2, 0x73d4, - 0x73e2, 0x73e8, 0x7702, 0x7800, 0x8036, 0x8038, - 0x8342, 0x83c4, 0xb3be, 0xb3c8, 0xb5fe, 0xb600, - 0xb782, 0xb800, 0xc0aa, 0xc0c0, 0xc266, 0xc26c, - 0x299be, 0x299cc, 0x299d2, 0x299f8, 0x29a7a, 0x29a80, - 0x29bc2, 0x29bc8, 0x2a00a, 0x2a00c, 0x2a01a, 0x2a01c, - 0x2a02e, 0x2a030, 0x2a096, 0x2a09c, 0x2a0b2, 0x2a0b4, - 0x2a312, 0x2a318, 0x2a382, 0x2a3c8, 0x2a3fe, 0x2a400, - 0x2a49a, 0x2a4b8, 0x2a51e, 0x2a548, 0x2a54e, 0x2a550, - 0x2a602, 0x2a60c, 0x2a6ce, 0x2a6d0, 0x2a6da, 0x2a6e8, - 0x2a6f2, 0x2a6f8, 0x2a702, 0x2a704, 0x2a796, 0x2a798, - 0x2a8a6, 0x2a8bc, 0x2a8c6, 0x2a8cc, 0x2a8d6, 0x2a8dc, - 0x2a90e, 0x2a910, 0x2a932, 0x2a934, 0x2a9f2, 0x2a9f4, - 0x2aac2, 0x2aac4, 0x2aaca, 0x2aad4, 0x2aade, 0x2aae4, - 0x2aafa, 0x2ab00, 0x2ab06, 0x2ab08, 0x2abb2, 0x2abb8, - 0x2abda, 0x2abdc, 0x2af96, 0x2af98, 0x2afa2, 0x2afa4, - 0x2afb6, 0x2afb8, 0x3ec7a, 0x3ec7c, 0x3f802, 0x3f840, - 0x3f882, 0x3f8c0, 0x3fe7a, 0x3fe80, 0x407f6, 0x407f8, - 0x40b82, 0x40b84, 0x40dda, 0x40dec, 0x42806, 0x42810, - 0x42816, 0x4281c, 0x42832, 0x42840, 0x428e2, 0x428ec, - 0x428fe, 0x42900, 0x42b96, 0x42b9c, 0x43492, 0x434a0, - 0x435a6, 0x435b8, 0x43aae, 0x43ab4, 0x43bf2, 0x43c00, - 0x43d1a, 0x43d44, 0x43e0a, 0x43e18, 0x44006, 0x44008, - 0x440e2, 0x4411c, 0x441c2, 0x441c4, 0x441ce, 0x441d4, - 0x441fe, 0x44208, 0x442ce, 0x442dc, 0x442e6, 0x442ec, - 0x4430a, 0x4430c, 0x44402, 0x4440c, 0x4449e, 0x444b0, - 0x444b6, 0x444d4, 0x445ce, 0x445d0, 0x44602, 0x44608, - 0x446da, 0x446fc, 0x44702, 0x44704, 0x44726, 0x44734, - 0x4473e, 0x44740, 0x448be, 0x448c8, 0x448d2, 0x448e0, - 0x448fa, 0x448fc, 0x44906, 0x44908, 0x44b7e, 0x44b80, - 0x44b8e, 0x44bac, 0x44c02, 0x44c08, 0x44cee, 0x44cf4, - 0x44cfa, 0x44cfc, 0x44d02, 0x44d04, 0x44d36, 0x44d38, - 0x44d5e, 0x44d60, 0x44d9a, 0x44db4, 0x44dc2, 0x44dd4, - 0x44ee2, 0x44ee4, 0x44eee, 0x44f04, 0x44f0a, 0x44f0c, - 0x44f16, 0x44f18, 0x44f1e, 0x44f28, 0x44f3a, 0x44f44, - 0x44f4a, 0x44f4c, 0x44f86, 0x44f8c, 0x450e2, 0x45100, - 0x4510a, 0x45114, 0x4511a, 0x4511c, 0x4517a, 0x4517c, - 0x452c2, 0x452c4, 0x452ce, 0x452e4, 0x452ea, 0x452ec, - 0x452f6, 0x452f8, 0x452fe, 0x45304, 0x4530a, 0x45310, - 0x456be, 0x456c0, 0x456ca, 0x456d8, 0x456f2, 0x456f8, - 0x456fe, 0x45704, 0x45772, 0x45778, 0x458ce, 0x458ec, - 0x458f6, 0x458f8, 0x458fe, 0x45904, 0x45aae, 0x45ab0, - 0x45ab6, 0x45ab8, 0x45ac2, 0x45ae0, 0x45c76, 0x45c78, - 0x45c7e, 0x45c80, 0x45c8a, 0x45c98, 0x45c9e, 0x45cb0, - 0x460be, 0x460e0, 0x460e6, 0x460ec, 0x464c2, 0x464c4, - 0x464ee, 0x464fc, 0x4650e, 0x46510, 0x46752, 0x46760, - 0x4676a, 0x46770, 0x46782, 0x46784, 0x46806, 0x4682c, - 0x468ce, 0x468e4, 0x468ee, 0x468fc, 0x4691e, 0x46920, - 0x46946, 0x4695c, 0x46966, 0x46970, 0x46a2a, 0x46a5c, - 0x46a62, 0x46a68, 0x470c2, 0x470dc, 0x470e2, 0x470f8, - 0x470fe, 0x47100, 0x4724a, 0x472a0, 0x472aa, 0x472c4, - 0x472ca, 0x472d0, 0x472d6, 0x472dc, 0x474c6, 0x474dc, - 0x474ea, 0x474ec, 0x474f2, 0x474f8, 0x474fe, 0x47518, - 0x4751e, 0x47520, 0x47642, 0x47648, 0x47656, 0x47658, - 0x4765e, 0x47660, 0x47bce, 0x47bd4, 0x47c02, 0x47c08, - 0x47cda, 0x47cec, 0x47d02, 0x47d0c, 0x47d6a, 0x47d6c, - 0x4d102, 0x4d104, 0x4d11e, 0x4d158, 0x5847a, 0x584a8, - 0x584b6, 0x584c0, 0x5abc2, 0x5abd4, 0x5acc2, 0x5acdc, - 0x5bd3e, 0x5bd40, 0x5be3e, 0x5be4c, 0x5bf92, 0x5bf94, - 0x5bfc2, 0x5bfc8, 0x6f276, 0x6f27c, 0x73c02, 0x73cb8, - 0x73cc2, 0x73d1c, 0x74596, 0x745a8, 0x745b6, 0x745cc, - 0x745ee, 0x7460c, 0x74616, 0x74630, 0x746aa, 0x746b8, - 0x7490a, 0x74914, 0x76802, 0x768dc, 0x768ee, 0x769b4, - 0x769d6, 0x769d8, 0x76a12, 0x76a14, 0x76a6e, 0x76a80, - 0x76a86, 0x76ac0, 0x78002, 0x7801c, 0x78022, 0x78064, - 0x7806e, 0x78088, 0x7808e, 0x78094, 0x7809a, 0x780ac, - 0x7823e, 0x78240, 0x784c2, 0x784dc, 0x78aba, 0x78abc, - 0x78bb2, 0x78bc0, 0x793b2, 0x793c0, 0x797ba, 0x797c0, - 0x7a342, 0x7a35c, 0x7a512, 0x7a52c, 0x7cfee, 0x7d000, - 0x380082, 0x380200, 0x380402, 0x3807c0, + 0x4001, 0x40ac, 0x40b6, 0x40c4, 0x40ca, 0x40e0, + 0x40ea, 0x40ec, 0x40f6, 0x40fd, 0x4100, 0x4141, + 0x4158, 0x4162, 0x4169, 0x417a, 0x4185, 0x4188, + 0x4195, 0x419c, 0x41b9, 0x41c6, 0x41d5, 0x420a, + 0x420c, 0x4216, 0x421c, 0x4236, 0x4239, 0x423c, + 0x4276, 0x4278, 0x4d76, 0x4d80, 0x5c4a, 0x5c58, + 0x5cca, 0x5cd4, 0x5d4a, 0x5d50, 0x5dca, 0x5dd0, + 0x5e01, 0x5ed2, 0x5ed8, 0x5ede, 0x5ef8, 0x5f1a, + 0x5f1c, 0x5f26, 0x5f48, 0x5f4e, 0x5f50, 0x5f76, + 0x5f78, 0x602e, 0x6038, 0x603e, 0x6040, 0x6216, + 0x621c, 0x62a6, 0x62a8, 0x6482, 0x648c, 0x649e, + 0x64a4, 0x64ca, 0x64cc, 0x64e6, 0x64f0, 0x685e, + 0x6864, 0x686e, 0x6870, 0x6881, 0x6954, 0x695a, + 0x695c, 0x6962, 0x697c, 0x698a, 0x698c, 0x6996, + 0x69b4, 0x69ce, 0x69f4, 0x69fe, 0x6a00, 0x6ac2, + 0x6b78, 0x6b82, 0x6bb0, 0x6c02, 0x6c10, 0x6c2d, + 0x6c34, 0x6c4d, 0x6cd2, 0x6cf8, 0x6d0a, 0x6d10, + 0x6d15, 0x6d34, 0x6dae, 0x6dd0, 0x6e02, 0x6e08, + 0x6e0d, 0x6e84, 0x6e8a, 0x6e98, 0x6ea2, 0x6eac, + 0x6eb2, 0x6eb9, 0x6ec0, 0x6eed, 0x6ef8, 0x6f9a, + 0x6f9c, 0x6fa2, 0x6fa8, 0x6fb6, 0x6fb8, 0x6fbe, + 0x6fd0, 0x70b2, 0x70d0, 0x70da, 0x70e0, 0x7342, + 0x734c, 0x7352, 0x7384, 0x738a, 0x73a4, 0x73b6, + 0x73b8, 0x73d2, 0x73d4, 0x73e2, 0x73e8, 0x7702, + 0x7800, 0x8036, 0x8038, 0x8342, 0x83c4, 0xb3be, + 0xb3c8, 0xb5fe, 0xb600, 0xb782, 0xb800, 0xc0aa, + 0xc0c0, 0xc266, 0xc26c, 0x299be, 0x299cc, 0x299d2, + 0x299f8, 0x29a7a, 0x29a80, 0x29bc2, 0x29bc8, 0x2a00a, + 0x2a00c, 0x2a01a, 0x2a01c, 0x2a02e, 0x2a030, 0x2a096, + 0x2a09c, 0x2a0b2, 0x2a0b4, 0x2a312, 0x2a318, 0x2a382, + 0x2a3c8, 0x2a3fe, 0x2a400, 0x2a49a, 0x2a4b8, 0x2a51e, + 0x2a548, 0x2a54e, 0x2a550, 0x2a602, 0x2a60c, 0x2a625, + 0x2a630, 0x2a63d, 0x2a6ce, 0x2a6d0, 0x2a6da, 0x2a6e8, + 0x2a6f2, 0x2a6f8, 0x2a781, 0x2a796, 0x2a798, 0x2a79d, + 0x2a7c0, 0x2a7e9, 0x2a7fc, 0x2a8a6, 0x2a8bc, 0x2a8c6, + 0x2a8cc, 0x2a8d6, 0x2a8dc, 0x2a90e, 0x2a910, 0x2a932, + 0x2a934, 0x2a981, 0x2a9c0, 0x2a9c5, 0x2a9d0, 0x2a9e9, + 0x2a9ec, 0x2a9f2, 0x2a9f4, 0x2a9f9, 0x2aa00, 0x2aac2, + 0x2aac4, 0x2aaca, 0x2aad4, 0x2aade, 0x2aae4, 0x2aafa, + 0x2ab00, 0x2ab06, 0x2ab08, 0x2ab81, 0x2abac, 0x2abb2, + 0x2abb8, 0x2af01, 0x2af6c, 0x2af96, 0x2af98, 0x2afa2, + 0x2afa4, 0x2afb6, 0x2afb8, 0x3ec7a, 0x3ec7c, 0x3f802, + 0x3f840, 0x3f882, 0x3f8c0, 0x3fe7a, 0x3fe80, 0x407f6, + 0x407f8, 0x40b82, 0x40b84, 0x40dda, 0x40dec, 0x42801, + 0x42806, 0x42810, 0x42816, 0x4281c, 0x42832, 0x42841, + 0x42850, 0x42855, 0x42860, 0x42865, 0x428d8, 0x428e2, + 0x428ec, 0x42b96, 0x42b9c, 0x43492, 0x434a0, 0x435a6, + 0x435b8, 0x43aae, 0x43ab4, 0x43bea, 0x43c00, 0x43d1a, + 0x43d44, 0x43e0a, 0x43e18, 0x44006, 0x44008, 0x440e2, + 0x4411c, 0x441c2, 0x441c4, 0x441ce, 0x441d4, 0x441fe, + 0x44208, 0x442ce, 0x442dc, 0x442e6, 0x442ec, 0x4430a, + 0x4430c, 0x44402, 0x4440d, 0x4449e, 0x444b0, 0x444b6, + 0x444cc, 0x444d2, 0x444d4, 0x44511, 0x44514, 0x4451d, + 0x44520, 0x445ce, 0x445d0, 0x44602, 0x44608, 0x446da, + 0x446fc, 0x44702, 0x44704, 0x44726, 0x44734, 0x4473e, + 0x44740, 0x448be, 0x448c8, 0x448d2, 0x448e0, 0x448fa, + 0x448fc, 0x44906, 0x44908, 0x44b7e, 0x44b80, 0x44b8e, + 0x44bac, 0x44c02, 0x44c08, 0x44cee, 0x44cf4, 0x44cfa, + 0x44cfc, 0x44d02, 0x44d04, 0x44d36, 0x44d38, 0x44d5e, + 0x44d60, 0x44d9a, 0x44db4, 0x44dc2, 0x44dd4, 0x44e01, + 0x44e28, 0x44e2d, 0x44e30, 0x44e39, 0x44e3c, 0x44e41, + 0x44ed8, 0x44ee2, 0x44ee4, 0x44eee, 0x44f04, 0x44f0a, + 0x44f0c, 0x44f16, 0x44f18, 0x44f1e, 0x44f28, 0x44f3a, + 0x44f40, 0x44f4a, 0x44f4c, 0x44f86, 0x44f8c, 0x450e2, + 0x45100, 0x4510a, 0x45114, 0x4511a, 0x4511c, 0x4517a, + 0x4517c, 0x452c2, 0x452c4, 0x452ce, 0x452e4, 0x452ea, + 0x452ec, 0x452f6, 0x452f8, 0x452fe, 0x45304, 0x4530a, + 0x45310, 0x456be, 0x456c0, 0x456ca, 0x456d8, 0x456f2, + 0x456f8, 0x456fe, 0x45704, 0x45772, 0x45778, 0x458ce, + 0x458ec, 0x458f6, 0x458f8, 0x458fe, 0x45904, 0x45aae, + 0x45ab0, 0x45ab6, 0x45ab8, 0x45ac2, 0x45ae0, 0x45c76, + 0x45c78, 0x45c7e, 0x45c80, 0x45c8a, 0x45c98, 0x45c9e, + 0x45cb0, 0x460be, 0x460e0, 0x460e6, 0x460ec, 0x46401, + 0x4641c, 0x46425, 0x46428, 0x46431, 0x46450, 0x46455, + 0x4645c, 0x46461, 0x464c2, 0x464c4, 0x464ee, 0x464f8, + 0x4650e, 0x46510, 0x46752, 0x46760, 0x4676a, 0x46770, + 0x46782, 0x46784, 0x46801, 0x46806, 0x4682d, 0x468ce, + 0x468e4, 0x468ee, 0x468fc, 0x46941, 0x46946, 0x4695c, + 0x46966, 0x46971, 0x46a10, 0x46a2a, 0x46a5c, 0x46a62, + 0x46a64, 0x46d82, 0x46d84, 0x46d8a, 0x46d94, 0x46d9a, + 0x46d9c, 0x470c2, 0x470dc, 0x470e2, 0x470f8, 0x470fe, + 0x47100, 0x4724a, 0x472a0, 0x472aa, 0x472c4, 0x472ca, + 0x472d0, 0x472d6, 0x472dc, 0x474c6, 0x474dc, 0x474ea, + 0x474ec, 0x474f2, 0x474f8, 0x474fe, 0x47518, 0x4751e, + 0x47520, 0x47642, 0x47648, 0x47656, 0x47658, 0x4765e, + 0x47660, 0x47bce, 0x47bd4, 0x47c02, 0x47c08, 0x47c11, + 0x47c44, 0x47c49, 0x47cd0, 0x47cda, 0x47cec, 0x47d02, + 0x47d08, 0x47d6a, 0x47d6c, 0x4d102, 0x4d104, 0x4d11e, + 0x4d158, 0x5847a, 0x584a8, 0x584b6, 0x584c0, 0x5abc2, + 0x5abd4, 0x5acc2, 0x5acdc, 0x5bd3e, 0x5bd40, 0x5be3e, + 0x5be4c, 0x5bf92, 0x5bf94, 0x5bfc2, 0x5bfc8, 0x6f276, + 0x6f27c, 0x73c02, 0x73cb8, 0x73cc2, 0x73d1c, 0x74596, + 0x745a8, 0x745b6, 0x745cc, 0x745ee, 0x7460c, 0x74616, + 0x74630, 0x746aa, 0x746b8, 0x7490a, 0x74914, 0x76802, + 0x768dc, 0x768ee, 0x769b4, 0x769d6, 0x769d8, 0x76a12, + 0x76a14, 0x76a6e, 0x76a80, 0x76a86, 0x76ac0, 0x78002, + 0x7801c, 0x78022, 0x78064, 0x7806e, 0x78088, 0x7808e, + 0x78094, 0x7809a, 0x780ac, 0x7823e, 0x78240, 0x784c2, + 0x784dc, 0x78aba, 0x78abc, 0x78bb2, 0x78bc0, 0x793b2, + 0x793c0, 0x797ba, 0x797c0, 0x79b8e, 0x79b90, 0x79b9a, + 0x79b9c, 0x79bba, 0x79bc0, 0x79bd6, 0x79bd8, 0x7a342, + 0x7a35c, 0x7a512, 0x7a52c, 0x7cfee, 0x7d000, 0x380082, + 0x380200, 0x380402, 0x3807c0, }; // Table generated by contrib/unicode/gen_libstdcxx_unicode_data.py, @@ -776,24 +795,43 @@ inline constexpr char32_t __xpicto_edges[] = { 0xa9, 0xaa, 0xae, 0xaf, 0x203c, 0x203d, 0x2049, 0x204a, 0x2122, 0x2123, 0x2139, 0x213a, 0x2194, 0x219a, 0x21a9, 0x21ab, - 0x231a, 0x231c, 0x2328, 0x2329, 0x2388, 0x2389, 0x23cf, 0x23d0, - 0x23e9, 0x23f4, 0x23f8, 0x23fb, 0x24c2, 0x24c3, 0x25aa, 0x25ac, - 0x25b6, 0x25b7, 0x25c0, 0x25c1, 0x25fb, 0x25ff, 0x2600, 0x2606, - 0x2607, 0x2613, 0x2614, 0x2686, 0x2690, 0x2706, 0x2708, 0x2713, - 0x2714, 0x2715, 0x2716, 0x2717, 0x271d, 0x271e, 0x2721, 0x2722, - 0x2728, 0x2729, 0x2733, 0x2735, 0x2744, 0x2745, 0x2747, 0x2748, - 0x274c, 0x274d, 0x274e, 0x274f, 0x2753, 0x2756, 0x2757, 0x2758, - 0x2763, 0x2768, 0x2795, 0x2798, 0x27a1, 0x27a2, 0x27b0, 0x27b1, - 0x27bf, 0x27c0, 0x2934, 0x2936, 0x2b05, 0x2b08, 0x2b1b, 0x2b1d, - 0x2b50, 0x2b51, 0x2b55, 0x2b56, 0x3030, 0x3031, 0x303d, 0x303e, - 0x3297, 0x3298, 0x3299, 0x329a, 0x1f000, 0x1f100, 0x1f10d, 0x1f110, - 0x1f12f, 0x1f130, 0x1f16c, 0x1f172, 0x1f17e, 0x1f180, 0x1f18e, 0x1f18f, - 0x1f191, 0x1f19b, 0x1f1ad, 0x1f1e6, 0x1f201, 0x1f210, 0x1f21a, 0x1f21b, - 0x1f22f, 0x1f230, 0x1f232, 0x1f23b, 0x1f23c, 0x1f240, 0x1f249, 0x1f3fb, - 0x1f400, 0x1f53e, 0x1f546, 0x1f650, 0x1f680, 0x1f700, 0x1f774, 0x1f780, - 0x1f7d5, 0x1f800, 0x1f80c, 0x1f810, 0x1f848, 0x1f850, 0x1f85a, 0x1f860, - 0x1f888, 0x1f890, 0x1f8ae, 0x1f900, 0x1f90c, 0x1f93b, 0x1f93c, 0x1f946, - 0x1f947, 0x1fb00, 0x1fc00, 0x1fffe, + 0x231a, 0x231c, 0x2328, 0x2329, 0x23cf, 0x23d0, 0x23e9, 0x23f4, + 0x23f8, 0x23fb, 0x24c2, 0x24c3, 0x25aa, 0x25ac, 0x25b6, 0x25b7, + 0x25c0, 0x25c1, 0x25fb, 0x25ff, 0x2600, 0x2605, 0x260e, 0x260f, + 0x2611, 0x2612, 0x2614, 0x2616, 0x2618, 0x2619, 0x261d, 0x261e, + 0x2620, 0x2621, 0x2622, 0x2624, 0x2626, 0x2627, 0x262a, 0x262b, + 0x262e, 0x2630, 0x2638, 0x263b, 0x2640, 0x2641, 0x2642, 0x2643, + 0x2648, 0x2654, 0x265f, 0x2661, 0x2663, 0x2664, 0x2665, 0x2667, + 0x2668, 0x2669, 0x267b, 0x267c, 0x267e, 0x2680, 0x2692, 0x2698, + 0x2699, 0x269a, 0x269b, 0x269d, 0x26a0, 0x26a2, 0x26a7, 0x26a8, + 0x26aa, 0x26ac, 0x26b0, 0x26b2, 0x26bd, 0x26bf, 0x26c4, 0x26c6, + 0x26c8, 0x26c9, 0x26ce, 0x26d0, 0x26d1, 0x26d2, 0x26d3, 0x26d5, + 0x26e9, 0x26eb, 0x26f0, 0x26f6, 0x26f7, 0x26fb, 0x26fd, 0x26fe, + 0x2702, 0x2703, 0x2705, 0x2706, 0x2708, 0x270e, 0x270f, 0x2710, + 0x2712, 0x2713, 0x2714, 0x2715, 0x2716, 0x2717, 0x271d, 0x271e, + 0x2721, 0x2722, 0x2728, 0x2729, 0x2733, 0x2735, 0x2744, 0x2745, + 0x2747, 0x2748, 0x274c, 0x274d, 0x274e, 0x274f, 0x2753, 0x2756, + 0x2757, 0x2758, 0x2763, 0x2765, 0x2795, 0x2798, 0x27a1, 0x27a2, + 0x27b0, 0x27b1, 0x27bf, 0x27c0, 0x2934, 0x2936, 0x2b05, 0x2b08, + 0x2b1b, 0x2b1d, 0x2b50, 0x2b51, 0x2b55, 0x2b56, 0x3030, 0x3031, + 0x303d, 0x303e, 0x3297, 0x3298, 0x3299, 0x329a, 0x1f004, 0x1f005, + 0x1f02c, 0x1f030, 0x1f094, 0x1f0a0, 0x1f0af, 0x1f0b1, 0x1f0c0, 0x1f0c1, + 0x1f0cf, 0x1f0d1, 0x1f0f6, 0x1f100, 0x1f170, 0x1f172, 0x1f17e, 0x1f180, + 0x1f18e, 0x1f18f, 0x1f191, 0x1f19b, 0x1f1ae, 0x1f1e6, 0x1f201, 0x1f210, + 0x1f21a, 0x1f21b, 0x1f22f, 0x1f230, 0x1f232, 0x1f23b, 0x1f23c, 0x1f240, + 0x1f249, 0x1f260, 0x1f266, 0x1f322, 0x1f324, 0x1f394, 0x1f396, 0x1f398, + 0x1f399, 0x1f39c, 0x1f39e, 0x1f3f1, 0x1f3f3, 0x1f3f6, 0x1f3f7, 0x1f3fb, + 0x1f400, 0x1f4fe, 0x1f4ff, 0x1f53e, 0x1f549, 0x1f54f, 0x1f550, 0x1f568, + 0x1f56f, 0x1f571, 0x1f573, 0x1f57b, 0x1f587, 0x1f588, 0x1f58a, 0x1f58e, + 0x1f590, 0x1f591, 0x1f595, 0x1f597, 0x1f5a4, 0x1f5a6, 0x1f5a8, 0x1f5a9, + 0x1f5b1, 0x1f5b3, 0x1f5bc, 0x1f5bd, 0x1f5c2, 0x1f5c5, 0x1f5d1, 0x1f5d4, + 0x1f5dc, 0x1f5df, 0x1f5e1, 0x1f5e2, 0x1f5e3, 0x1f5e4, 0x1f5e8, 0x1f5e9, + 0x1f5ef, 0x1f5f0, 0x1f5f3, 0x1f5f4, 0x1f5fa, 0x1f650, 0x1f680, 0x1f6c6, + 0x1f6cb, 0x1f6d3, 0x1f6d5, 0x1f6e6, 0x1f6e9, 0x1f6ea, 0x1f6eb, 0x1f6f1, + 0x1f6f3, 0x1f700, 0x1f7da, 0x1f800, 0x1f80c, 0x1f810, 0x1f848, 0x1f850, + 0x1f85a, 0x1f860, 0x1f888, 0x1f890, 0x1f8ae, 0x1f8b0, 0x1f8bc, 0x1f8c0, + 0x1f8c2, 0x1f8d0, 0x1f8d9, 0x1f900, 0x1f90c, 0x1f93b, 0x1f93c, 0x1f946, + 0x1f947, 0x1fa00, 0x1fa58, 0x1fa60, 0x1fa6e, 0x1fb00, 0x1fc00, 0x1fffe, }; #undef _GLIBCXX_GET_UNICODE_DATA diff --git a/libstdc++-v3/testsuite/ext/unicode/properties.cc b/libstdc++-v3/testsuite/ext/unicode/properties.cc index 50b215e95635..120192d59f5c 100644 --- a/libstdc++-v3/testsuite/ext/unicode/properties.cc +++ b/libstdc++-v3/testsuite/ext/unicode/properties.cc @@ -122,7 +122,7 @@ static_assert( uc::__is_extended_pictographic(U'\N{SOUTH WEST ARROW}') ); static_assert( ! uc::__is_extended_pictographic(U'\N{SOUTH WEST ARROW}' + 1) ); static_assert( uc::__is_extended_pictographic(U'\N{POSTBOX}') ); static_assert( ! uc::__is_extended_pictographic(U'\U0001EFFF') ); -static_assert( uc::__is_extended_pictographic(U'\U0001F000') ); +static_assert( uc::__is_extended_pictographic(U'\U0001F004') ); static_assert( uc::__is_extended_pictographic(U'\U0001FFFD') ); static_assert( ! uc::__is_extended_pictographic(U'\U0001FFFE') ); static_assert( ! uc::__is_extended_pictographic(U'\U0001FFFF') ); From 152f4daab44d897b08cce8e259525e0a306be8dc Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 1 Oct 2025 12:45:17 +0100 Subject: [PATCH 160/216] libstdc++: Fix allocator propagation and tests for std::indirect and std::polymorphic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I noticed that several tests were doing: static_assert([] { /* ... */; return true; }); i.e. just testing a lambda, not invoking it and testing the result. This change fixes that, so that all the lambdas are invoked. After fixing that, most of the tests failed because they were using __gnu_test::tracker_allocator or std::scoped_allocator_adaptor in constexpr functions. The tracker_allocator modifies global state, so can never be constexpr, and none of std::scoped_allocator_adaptor's members are marked constexpr. This change makes __gnu_test::uneq_allocator and __gnu_test::propagating_allocator usable in constant expressions, which allows some of the tests which can't be constexpr to be duplicated to new functions which use uneq_allocator or propagating_allocator instead of tracker_allocator. This new functions can be tested with the static_assert calling a lambda. In some cases none of the tests could be adapted to be constexpr, so the static_assert and lambda were just removed. Two changes were also needed for the actual library code, because the move assignment operators for std::indirect and std::polymorphic were using copy-assignment on the allocator. Although the semantics of move-assignment for allocators should be equivalent to copy-assignment, an allocator isn't actually required to support copy-assignment unless propagate_on_container_copy_assignment is true. So we have to use move-assignment for propagate_on_container_move_assignment cases. libstdc++-v3/ChangeLog: * include/bits/indirect.h (indirect::operator=(indirect&&)): Move assign allocator when POCMA is true. (polymorphic::operator=(polymorphic&&)): Likewise. * testsuite/std/memory/indirect/copy.cc: Remove constexpr from functions that use tracker_allocator. Add test_constexpr(). * testsuite/std/memory/indirect/copy_alloc.cc: Remove constexpr from all functions and remove static_assert. * testsuite/std/memory/indirect/ctor.cc: Do not use scoped_allocator_adaptor during constant evaluation. * testsuite/std/memory/indirect/move.cc: Remove constexpr from functions that use tracker_allocator. Add test_constexpr(). * testsuite/std/memory/indirect/move_alloc.cc: Remove constexpr from all functions and remove static_assert. * testsuite/std/memory/indirect/relops.cc: Invoke lambda in static_assert. * testsuite/std/memory/polymorphic/copy.cc: Remove constexpr from functions that use tracker_allocator. Add test_constexpr(). * testsuite/std/memory/polymorphic/copy_alloc.cc: Remove constexpr from all functions and remove static_assert. * testsuite/std/memory/polymorphic/ctor.cc: Do not use scoped_allocator_adaptor during constant evaluation. * testsuite/std/memory/polymorphic/ctor_poly.cc: Likewise. * testsuite/std/memory/polymorphic/move.cc: Remove constexpr from functions that use tracker_allocator. Add test_constexpr(). * testsuite/std/memory/polymorphic/move_alloc.cc: Remove constexpr from all functions and remove static_assert. * testsuite/util/testsuite_allocator.h (tracker_allocator): Remove redundant 'inline' from friend. (uneq_allocator): Make all functions constexpr. (uneq_allocator::base, uneq_allocator::swap_base): Remove. (uneq_allocator::~uneq_allocator): Remove. (uneq_allocator::allocate, uneq_allocator::deallocate): Do not use map of allocations during constant evaluation. (propagating_allocator): Make all functions constexpr. (propagating_allocator::base): Remove. (propagating_allocator::swap_base): Simplify. (ExplicitConsAlloc, CustomPointerAlloc, NullablePointer): Add constexpr to all functions. Reviewed-by: Tomasz Kamiński --- libstdc++-v3/include/bits/indirect.h | 4 +- .../testsuite/std/memory/indirect/copy.cc | 55 +++++++++--- .../std/memory/indirect/copy_alloc.cc | 12 +-- .../testsuite/std/memory/indirect/ctor.cc | 11 ++- .../testsuite/std/memory/indirect/move.cc | 85 +++++++++++++++--- .../std/memory/indirect/move_alloc.cc | 18 ++-- .../testsuite/std/memory/indirect/relops.cc | 2 +- .../testsuite/std/memory/polymorphic/copy.cc | 55 +++++++++--- .../std/memory/polymorphic/copy_alloc.cc | 24 ++--- .../testsuite/std/memory/polymorphic/ctor.cc | 11 ++- .../std/memory/polymorphic/ctor_poly.cc | 8 +- .../testsuite/std/memory/polymorphic/move.cc | 81 ++++++++++++++--- .../std/memory/polymorphic/move_alloc.cc | 18 ++-- .../testsuite/util/testsuite_allocator.h | 89 +++++++++++-------- 14 files changed, 337 insertions(+), 136 deletions(-) diff --git a/libstdc++-v3/include/bits/indirect.h b/libstdc++-v3/include/bits/indirect.h index 89fa8c874fbd..2df46cc39a21 100644 --- a/libstdc++-v3/include/bits/indirect.h +++ b/libstdc++-v3/include/bits/indirect.h @@ -263,7 +263,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _M_reset(__ptr); if constexpr (__pocma) - _M_alloc = __other._M_alloc; + _M_alloc = std::move(__other._M_alloc); return *this; } @@ -736,7 +736,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _M_reset(__ptr); if constexpr (__pocma) - _M_alloc = __other._M_alloc; + _M_alloc = std::move(__other._M_alloc); return *this; } diff --git a/libstdc++-v3/testsuite/std/memory/indirect/copy.cc b/libstdc++-v3/testsuite/std/memory/indirect/copy.cc index 0ac6e92a9213..5ecfbbd898f4 100644 --- a/libstdc++-v3/testsuite/std/memory/indirect/copy.cc +++ b/libstdc++-v3/testsuite/std/memory/indirect/copy.cc @@ -14,7 +14,7 @@ using Vector = std::vector; using Indirect = std::indirect>; const Indirect src(std::in_place, {1, 2, 3}); -constexpr void +void test_ctor() { Counter::reset(); @@ -36,7 +36,7 @@ test_ctor() VERIFY( Counter::get_destruct_count() == 0 ); } -constexpr void +void test_assign() { Indirect i1; @@ -62,7 +62,7 @@ test_assign() VERIFY( Counter::get_destruct_count() == 0 ); } -constexpr void +void test_valueless() { Indirect e; @@ -103,19 +103,54 @@ test_valueless() } constexpr void -test_all() +test_constexpr() { - test_ctor(); - test_assign(); - test_valueless(); + using Alloc = __gnu_test::uneq_allocator; + using Indirect = std::indirect; + const Indirect src(std::in_place, {1, 2, 3}); + + Indirect i1(src); + VERIFY( *i1 == *src ); + VERIFY( &*i1 != &*src ); + VERIFY( i1.get_allocator() == Alloc{} ); + + Indirect i2(std::allocator_arg, Alloc{2}, src); + VERIFY( *i2 == *src ); + VERIFY( &*i2 != &*src ); + VERIFY( i2.get_allocator() == Alloc{2} ); + + Indirect i3(std::allocator_arg, Alloc{3}); + i3 = src; + VERIFY( *i3 == *src ); + VERIFY( &*i3 != &*src ); + VERIFY( i3.get_allocator() == Alloc{3} ); + + Indirect e; + auto(std::move(e)); + VERIFY( e.valueless_after_move() ); + + Indirect e1(e); + VERIFY( e1.valueless_after_move() ); + + Indirect e2(std::allocator_arg, {}, e); + VERIFY( e2.valueless_after_move() ); + + i3 = e; + VERIFY( i3.valueless_after_move() ); + + i3 = e; + VERIFY( i3.valueless_after_move() ); } int main() { - test_all(); + test_ctor(); + test_assign(); + test_valueless(); + test_constexpr(); static_assert([] { - test_all(); + test_constexpr(); return true; - }); + }()); } diff --git a/libstdc++-v3/testsuite/std/memory/indirect/copy_alloc.cc b/libstdc++-v3/testsuite/std/memory/indirect/copy_alloc.cc index d5865b9a580d..e48855a0eac5 100644 --- a/libstdc++-v3/testsuite/std/memory/indirect/copy_alloc.cc +++ b/libstdc++-v3/testsuite/std/memory/indirect/copy_alloc.cc @@ -13,7 +13,7 @@ using __gnu_test::tracker_allocator; using Counter = __gnu_test::tracker_allocator_counter; template -constexpr void +void test_ctor() { using PropAlloc = propagating_allocator; @@ -59,7 +59,7 @@ test_ctor() } template -constexpr void +void test_assign() { using PropAlloc = propagating_allocator; @@ -144,7 +144,7 @@ test_assign() } template -constexpr void +void test_valueless() { using PropAlloc = propagating_allocator; @@ -219,10 +219,4 @@ int main() { test_all(); test_all(); - - static_assert([] { - test_all(); - test_all(); - return true; - }); } diff --git a/libstdc++-v3/testsuite/std/memory/indirect/ctor.cc b/libstdc++-v3/testsuite/std/memory/indirect/ctor.cc index 124874d02fe6..dfd9341582f5 100644 --- a/libstdc++-v3/testsuite/std/memory/indirect/ctor.cc +++ b/libstdc++-v3/testsuite/std/memory/indirect/ctor.cc @@ -58,6 +58,9 @@ test_default_ctor() std::indirect> i2(std::allocator_arg, a); VERIFY( i2.get_allocator() == a ); + if (std::is_constant_evaluated()) + return; + // Object is constructed using allocator-aware constructor. std::indirect, ScopedAlloc> i3(std::allocator_arg, ScopedAlloc(11, 22)); @@ -93,6 +96,9 @@ test_forwarding_ctor() std::indirect i6(7); VERIFY( i6->i == 7 ); + if (std::is_constant_evaluated()) + return; + std::vector v{1, 2, 3, 4, 5}; // Object is constructed using allocator-aware constructor. std::indirect, ScopedAlloc> @@ -165,6 +171,9 @@ test_inplace_ctor() VERIFY( i10->at(2) == 3 ); VERIFY( i10->get_allocator().get_personality() == 42 ); + if (std::is_constant_evaluated()) + return; + std::indirect, ScopedAlloc> i14(std::allocator_arg, ScopedAlloc(11, 22), std::in_place); @@ -200,5 +209,5 @@ int main() test_forwarding_ctor(); test_inplace_ctor(); return true; - }); + }()); } diff --git a/libstdc++-v3/testsuite/std/memory/indirect/move.cc b/libstdc++-v3/testsuite/std/memory/indirect/move.cc index 6e87c60adb0d..9800f7fd1a79 100644 --- a/libstdc++-v3/testsuite/std/memory/indirect/move.cc +++ b/libstdc++-v3/testsuite/std/memory/indirect/move.cc @@ -15,7 +15,7 @@ using Vector = std::vector; using Indirect = std::indirect>; const Indirect val(std::in_place, {1, 2, 3}); -constexpr void +void verifyNoAllocations() { VERIFY( Counter::get_allocation_count() == 0 ); @@ -24,7 +24,7 @@ verifyNoAllocations() VERIFY( Counter::get_destruct_count() == 0 ); } -constexpr void +void test_ctor() { std::optional src; @@ -45,7 +45,7 @@ test_ctor() verifyNoAllocations(); } -constexpr void +void test_assign() { std::optional src; @@ -72,7 +72,7 @@ test_assign() verifyNoAllocations(); } -constexpr void +void test_swap() { const Indirect val1(std::in_place, {1, 2, 3}); @@ -87,7 +87,7 @@ test_swap() verifyNoAllocations(); auto(std::move(i1)); - + Counter::reset(); i1.swap(i2); VERIFY( *i1 == *val1 ); @@ -95,7 +95,7 @@ test_swap() verifyNoAllocations(); } -constexpr void +void test_valueless() { auto e = [] { @@ -125,20 +125,77 @@ test_valueless() } constexpr void -test_all() +test_constexpr() { - test_ctor(); - test_assign(); - test_swap(); - test_valueless(); + using Alloc = __gnu_test::uneq_allocator; + using Indirect = std::indirect; + const Indirect val(std::in_place, {1, 2, 3}); + + std::optional src; + auto make = [&src, &val] -> Indirect&& { + src.emplace(val); + return std::move(*src); + }; + + Indirect i1(make()); + VERIFY( src->valueless_after_move() ); + VERIFY( *i1 == *val ); + + Indirect i2(std::allocator_arg, {}, make()); + VERIFY( src->valueless_after_move() ); + VERIFY( *i2 == *val ); + + i2 = make(); + VERIFY( src->valueless_after_move() ); + VERIFY( *i2 == *val ); + + auto(std::move(i2)); + i2 = make(); + VERIFY( *i2 == *val ); + VERIFY( src->valueless_after_move() ); + + const Indirect val1(std::in_place, {1, 2, 3}); + const Indirect val2(std::in_place, {2, 4, 6}); + + Indirect s1(val1); + Indirect s2(val2); + s1.swap(s2); + VERIFY( *s2 == *val1 ); + VERIFY( *s1 == *val2 ); + + auto(std::move(s1)); + + s1.swap(s2); + VERIFY( *s1 == *val1 ); + VERIFY( s2.valueless_after_move() ); + + auto e = [] { + Indirect res; + auto(std::move(res)); + return res; + }; + + Indirect e1(e()); + VERIFY( e1.valueless_after_move() ); + + Indirect e2(std::allocator_arg, {}, e()); + VERIFY( e2.valueless_after_move() ); + + Indirect e3(val); + e3 = e(); + e3 = e(); } int main() { - test_all(); + test_ctor(); + test_assign(); + test_swap(); + test_valueless(); + test_constexpr(); static_assert([] { - test_all(); + test_constexpr(); return true; - }); + }()); } diff --git a/libstdc++-v3/testsuite/std/memory/indirect/move_alloc.cc b/libstdc++-v3/testsuite/std/memory/indirect/move_alloc.cc index cd6f90dcdc56..cf35e83310f7 100644 --- a/libstdc++-v3/testsuite/std/memory/indirect/move_alloc.cc +++ b/libstdc++-v3/testsuite/std/memory/indirect/move_alloc.cc @@ -13,7 +13,7 @@ using __gnu_test::propagating_allocator; using __gnu_test::tracker_allocator; using Counter = __gnu_test::tracker_allocator_counter; -constexpr void +void verifyNoAllocations() { VERIFY( Counter::get_allocation_count() == 0 ); @@ -23,7 +23,7 @@ verifyNoAllocations() } template -constexpr void +void test_ctor() { using PropAlloc = propagating_allocator; @@ -68,7 +68,7 @@ test_ctor() } template -constexpr void +void test_assign() { using PropAlloc = propagating_allocator; @@ -159,7 +159,7 @@ test_assign() } template -constexpr void +void test_swap() { using PropAlloc = propagating_allocator; @@ -212,7 +212,7 @@ test_swap() } template -constexpr void +void test_valueless() { using PropAlloc = propagating_allocator; @@ -274,7 +274,7 @@ test_valueless() } template -constexpr void +void test_all() { test_ctor(); @@ -287,10 +287,4 @@ int main() { test_all(); test_all(); - - static_assert([] { - test_all(); - test_all(); - return true; - }); } diff --git a/libstdc++-v3/testsuite/std/memory/indirect/relops.cc b/libstdc++-v3/testsuite/std/memory/indirect/relops.cc index d77fef2a4306..77d599c80861 100644 --- a/libstdc++-v3/testsuite/std/memory/indirect/relops.cc +++ b/libstdc++-v3/testsuite/std/memory/indirect/relops.cc @@ -78,5 +78,5 @@ int main() test_relops(); test_comp_with_t(); return true; - }); + }()); } diff --git a/libstdc++-v3/testsuite/std/memory/polymorphic/copy.cc b/libstdc++-v3/testsuite/std/memory/polymorphic/copy.cc index d66cc0657b39..34c78220e320 100644 --- a/libstdc++-v3/testsuite/std/memory/polymorphic/copy.cc +++ b/libstdc++-v3/testsuite/std/memory/polymorphic/copy.cc @@ -47,7 +47,7 @@ using Counter = __gnu_test::tracker_allocator_counter; using Polymorphic = std::polymorphic>; const Polymorphic src(std::in_place_type, 1, 2, 3); -constexpr void +void test_ctor() { Counter::reset(); @@ -69,7 +69,7 @@ test_ctor() VERIFY( Counter::get_destruct_count() == 0 ); } -constexpr void +void test_assign() { Counter::reset(); @@ -98,7 +98,7 @@ test_assign() VERIFY( Counter::get_destruct_count() == 0 ); } -constexpr void +void test_valueless() { Polymorphic e(std::in_place_type); @@ -139,19 +139,54 @@ test_valueless() } constexpr void -test_all() +test_constexpr() { - test_ctor(); - test_assign(); - test_valueless(); + using Polymorphic = std::polymorphic>; + const Polymorphic src(std::in_place_type, 1, 2, 3); + + Polymorphic i1(src); + VERIFY( *i1 == *src ); + VERIFY( &*i1 != &*src ); + + Polymorphic i2(std::allocator_arg, {}, src); + VERIFY( *i2 == *src ); + VERIFY( &*i2 != &*src ); + + i1 = Polymorphic(std::in_place_type); + VERIFY( *i1 != *src ); + i1 = src; + VERIFY( *i1 == *src ); + VERIFY( &*i1 != &*src ); + + auto(std::move(i1)); + i1 = src; + VERIFY( *i1 == *src ); + VERIFY( &*i1 != &*src ); + + Polymorphic e(std::in_place_type); + auto(std::move(e)); + VERIFY( e.valueless_after_move() ); + + Polymorphic e1(e); + VERIFY( e1.valueless_after_move() ); + + Polymorphic e2(std::allocator_arg, {}, e); + VERIFY( e2.valueless_after_move() ); + + Polymorphic e3(src); + e3 = e; + VERIFY( e3.valueless_after_move() ); } int main() { - test_all(); + test_ctor(); + test_assign(); + test_valueless(); + test_constexpr(); static_assert([] { - test_all(); + test_constexpr(); return true; - }); + }()); } diff --git a/libstdc++-v3/testsuite/std/memory/polymorphic/copy_alloc.cc b/libstdc++-v3/testsuite/std/memory/polymorphic/copy_alloc.cc index f41c32e1e1de..f149fc860e02 100644 --- a/libstdc++-v3/testsuite/std/memory/polymorphic/copy_alloc.cc +++ b/libstdc++-v3/testsuite/std/memory/polymorphic/copy_alloc.cc @@ -9,16 +9,16 @@ #include struct Base { - friend constexpr + friend bool operator==(const Base& lhs, const Base& rhs) { return lhs.eq(rhs); } - virtual constexpr int + virtual int get_alloc_personality() const { return -1; } private: - constexpr virtual bool + virtual bool eq(const Base& other) const = 0; }; @@ -29,13 +29,13 @@ struct VecDerived : Base, std::vector using VecBase::VecBase; - constexpr int + int get_alloc_personality() const override { return this->get_allocator().get_personality(); } private: - constexpr bool + bool eq(const Base& other) const override { if (auto op = dynamic_cast(&other)) @@ -50,7 +50,7 @@ using __gnu_test::tracker_allocator; using Counter = __gnu_test::tracker_allocator_counter; template -constexpr void +void test_ctor() { using PropAlloc = propagating_allocator; @@ -96,7 +96,7 @@ test_ctor() } template -constexpr void +void test_assign() { using PropAlloc = propagating_allocator; @@ -185,7 +185,7 @@ test_assign() } template -constexpr void +void test_valueless() { using PropAlloc = propagating_allocator; @@ -249,7 +249,7 @@ test_valueless() } template -constexpr void +void test_all() { test_ctor(); @@ -261,10 +261,4 @@ int main() { test_all(); test_all(); - - static_assert([] { - test_all(); - test_all(); - return true; - }); } diff --git a/libstdc++-v3/testsuite/std/memory/polymorphic/ctor.cc b/libstdc++-v3/testsuite/std/memory/polymorphic/ctor.cc index bb4c947285e7..4d043db0ea4a 100644 --- a/libstdc++-v3/testsuite/std/memory/polymorphic/ctor.cc +++ b/libstdc++-v3/testsuite/std/memory/polymorphic/ctor.cc @@ -45,6 +45,9 @@ test_default_ctor() std::polymorphic> i2(std::allocator_arg, a); VERIFY( i2.get_allocator() == a ); + if (std::is_constant_evaluated()) + return; + // Object is constructed using allocator-aware constructor. std::polymorphic, ScopedAlloc> i3(std::allocator_arg, ScopedAlloc(11, 22)); @@ -76,6 +79,9 @@ test_forwarding_ctor() std::polymorphic i5({1, {'2', '3'}}); verify(i5); + if (std::is_constant_evaluated()) + return; + std::vector v{1, 2, 3, 4, 5}; // Object is constructed using allocator-aware constructor. std::polymorphic, ScopedAlloc> @@ -151,6 +157,9 @@ test_inplace_ctor() VERIFY( i10->at(2) == 3 ); VERIFY( i10->get_allocator().get_personality() == 42 ); + if (std::is_constant_evaluated()) + return; + std::polymorphic, ScopedAlloc> i14(std::allocator_arg, ScopedAlloc(11, 22), std::in_place_type>); @@ -186,5 +195,5 @@ int main() test_forwarding_ctor(); test_inplace_ctor(); return true; - }); + }()); } diff --git a/libstdc++-v3/testsuite/std/memory/polymorphic/ctor_poly.cc b/libstdc++-v3/testsuite/std/memory/polymorphic/ctor_poly.cc index 03519a1db004..cb18031a9037 100644 --- a/libstdc++-v3/testsuite/std/memory/polymorphic/ctor_poly.cc +++ b/libstdc++-v3/testsuite/std/memory/polymorphic/ctor_poly.cc @@ -126,6 +126,9 @@ test_forwarding_ctor() VERIFY( *i4 == src ); VERIFY( i4->get_personality() == -2 ); + if (std::is_constant_evaluated()) + return; + const VecDerived v{1, 2, 3, 4, 5}; // Object is constructed using allocator-aware constructor. std::polymorphic @@ -183,6 +186,9 @@ test_inplace_ctor() VERIFY( *i7 == il ); VERIFY( i7->get_personality() == 42 ); + if (std::is_constant_evaluated()) + return; + std::polymorphic i8(std::allocator_arg, ScopedAlloc(11, 22), std::in_place_type>); @@ -216,5 +222,5 @@ int main() test_forwarding_ctor(); test_inplace_ctor(); return true; - }); + }()); } diff --git a/libstdc++-v3/testsuite/std/memory/polymorphic/move.cc b/libstdc++-v3/testsuite/std/memory/polymorphic/move.cc index c80215983b6c..97e598e69220 100644 --- a/libstdc++-v3/testsuite/std/memory/polymorphic/move.cc +++ b/libstdc++-v3/testsuite/std/memory/polymorphic/move.cc @@ -48,7 +48,7 @@ using Counter = __gnu_test::tracker_allocator_counter; using Polymorphic = std::polymorphic>; const Polymorphic val(std::in_place_type, 1, 2, 3); -constexpr void +void verifyNoAllocations() { VERIFY( Counter::get_allocation_count() == 0 ); @@ -57,7 +57,7 @@ verifyNoAllocations() VERIFY( Counter::get_destruct_count() == 0 ); } -constexpr void +void test_ctor() { std::optional src; @@ -78,7 +78,7 @@ test_ctor() verifyNoAllocations(); } -constexpr void +void test_assign() { std::optional src; @@ -105,7 +105,7 @@ test_assign() verifyNoAllocations(); } -constexpr void +void test_swap() { const Polymorphic val1(std::in_place_type, 1, 2, 3); @@ -128,7 +128,7 @@ test_swap() verifyNoAllocations(); } -constexpr void +void test_valueless() { auto e = [] { @@ -158,20 +158,75 @@ test_valueless() } constexpr void -test_all() +test_constexpr() { - test_ctor(); - test_assign(); - test_swap(); - test_valueless(); + using Polymorphic = std::polymorphic>; + const Polymorphic val(std::in_place_type, 1, 2, 3); + + std::optional src; + auto make = [&src, &val] -> Polymorphic&& { + src.emplace(val); + return std::move(*src); + }; + + Polymorphic i1(make()); + VERIFY( src->valueless_after_move() ); + VERIFY( *i1 == *val ); + + Polymorphic i2(std::allocator_arg, {}, make()); + VERIFY( src->valueless_after_move() ); + VERIFY( *i2 == *val ); + + i1 = make(); + VERIFY( src->valueless_after_move() ); + VERIFY( *i1 == *val ); + + auto(std::move(i1)); + i1 = make(); + VERIFY( *i1 == *val ); + VERIFY( src->valueless_after_move() ); + + const Polymorphic val1(std::in_place_type, 1, 2, 3); + const Polymorphic val2(std::in_place_type, 2, 4, 6); + + Polymorphic s1(val1); + Polymorphic s2(val2); + s1.swap(s2); + VERIFY( *s2 == *val1 ); + VERIFY( *s1 == *val2 ); + + auto(std::move(s1)); + s1.swap(s2); + VERIFY( *s1 == *val1 ); + VERIFY( s2.valueless_after_move() ); + + auto e = [] { + Polymorphic res(std::in_place_type); + auto(std::move(res)); + return res; + }; + + Polymorphic e1(e()); + VERIFY( e1.valueless_after_move() ); + + Polymorphic e2(std::allocator_arg, {}, e()); + VERIFY( e2.valueless_after_move() ); + + Polymorphic e3(val); + e3 = e(); + e3 = e(); } int main() { - test_all(); + test_ctor(); + test_assign(); + test_swap(); + test_valueless(); + test_constexpr(); static_assert([] { - test_all(); + test_constexpr(); return true; - }); + }()); } diff --git a/libstdc++-v3/testsuite/std/memory/polymorphic/move_alloc.cc b/libstdc++-v3/testsuite/std/memory/polymorphic/move_alloc.cc index 09afedb78848..490bffb8c392 100644 --- a/libstdc++-v3/testsuite/std/memory/polymorphic/move_alloc.cc +++ b/libstdc++-v3/testsuite/std/memory/polymorphic/move_alloc.cc @@ -50,7 +50,7 @@ using __gnu_test::propagating_allocator; using __gnu_test::tracker_allocator; using Counter = __gnu_test::tracker_allocator_counter; -constexpr void +void verifyNoAllocations() { VERIFY( Counter::get_allocation_count() == 0 ); @@ -60,7 +60,7 @@ verifyNoAllocations() } template -constexpr void +void test_ctor() { using PropAlloc = propagating_allocator; @@ -105,7 +105,7 @@ test_ctor() } template -constexpr void +void test_assign() { using PropAlloc = propagating_allocator; @@ -201,7 +201,7 @@ test_assign() } template -constexpr void +void test_swap() { using PropAlloc = propagating_allocator; @@ -254,7 +254,7 @@ test_swap() } template -constexpr void +void test_valueless() { using PropAlloc = propagating_allocator; @@ -317,7 +317,7 @@ test_valueless() } template -constexpr void +void test_all() { test_ctor(); @@ -330,10 +330,4 @@ int main() { test_all(); test_all(); - - static_assert([] { - test_all(); - test_all(); - return true; - }); } diff --git a/libstdc++-v3/testsuite/util/testsuite_allocator.h b/libstdc++-v3/testsuite/util/testsuite_allocator.h index ee9575266a00..086685b4ac6d 100644 --- a/libstdc++-v3/testsuite/util/testsuite_allocator.h +++ b/libstdc++-v3/testsuite/util/testsuite_allocator.h @@ -216,7 +216,7 @@ namespace __gnu_test } // Implement swap for underlying allocators that might need it. - friend inline void + friend void swap(tracker_allocator& a, tracker_allocator& b) { using std::swap; @@ -310,10 +310,6 @@ namespace __gnu_test { typedef __gnu_cxx::__alloc_traits AllocTraits; - Alloc& base() { return *this; } - const Alloc& base() const { return *this; } - void swap_base(Alloc& b) { using std::swap; swap(b, this->base()); } - public: typedef typename check_consistent_alloc_value_type::value_type value_type; @@ -332,9 +328,11 @@ namespace __gnu_test typename AllocTraits::template rebind::other> other; }; + _GLIBCXX_CONSTEXPR uneq_allocator() _GLIBCXX_USE_NOEXCEPT : personality(0) { } + _GLIBCXX_CONSTEXPR uneq_allocator(int person) _GLIBCXX_USE_NOEXCEPT : personality(person) { } @@ -344,21 +342,23 @@ namespace __gnu_test #endif template + _GLIBCXX_CONSTEXPR uneq_allocator(const uneq_allocator::other>& b) _GLIBCXX_USE_NOEXCEPT : personality(b.get_personality()) { } - ~uneq_allocator() _GLIBCXX_USE_NOEXCEPT - { } - - int get_personality() const { return personality; } + _GLIBCXX_CONSTEXPR int get_personality() const { return personality; } + _GLIBCXX20_CONSTEXPR pointer allocate(size_type n, const void* = 0) { pointer p = AllocTraits::allocate(*this, n); + if (std::__is_constant_evaluated()) + return p; + try { get_map().insert(map_type::value_type(reinterpret_cast(p), @@ -373,19 +373,24 @@ namespace __gnu_test return p; } + _GLIBCXX14_CONSTEXPR void deallocate(pointer p, size_type n) { VERIFY( p ); - map_type::iterator it = get_map().find(reinterpret_cast(p)); - VERIFY( it != get_map().end() ); + if (!std::__is_constant_evaluated()) + { + map_type::iterator it = get_map().find(reinterpret_cast(p)); + VERIFY( it != get_map().end() ); + + // Enforce requirements in Table 32 about deallocation vs + // allocator equality. + VERIFY( it->second == personality ); - // Enforce requirements in Table 32 about deallocation vs - // allocator equality. - VERIFY( it->second == personality ); + get_map().erase(it); + } - get_map().erase(it); AllocTraits::deallocate(*this, p, n); } @@ -406,22 +411,23 @@ namespace __gnu_test private: // ... yet swappable! - friend inline void + friend _GLIBCXX_CONSTEXPR void swap(uneq_allocator& a, uneq_allocator& b) { std::swap(a.personality, b.personality); - a.swap_base(b); + using std::swap; + swap(static_cast(a), static_cast(b)); } template - friend inline bool + friend _GLIBCXX_CONSTEXPR bool operator==(const uneq_allocator& a, const uneq_allocator::other>& b) { return a.personality == b.get_personality(); } template - friend inline bool + friend _GLIBCXX_CONSTEXPR bool operator!=(const uneq_allocator& a, const uneq_allocator::other>& b) @@ -438,9 +444,12 @@ namespace __gnu_test typedef __gnu_cxx::__alloc_traits AllocTraits; typedef uneq_allocator base_alloc; - base_alloc& base() { return *this; } - const base_alloc& base() const { return *this; } - void swap_base(base_alloc& b) { swap(b, this->base()); } + _GLIBCXX14_CONSTEXPR void + swap_base(base_alloc& b) + { + using std::swap; + swap(b, static_cast(*this)); + } typedef std::integral_constant trait_type; @@ -454,11 +463,13 @@ namespace __gnu_test typename AllocTraits::template rebind::other> other; }; + constexpr propagating_allocator(int i) noexcept : base_alloc(i) { } template + constexpr propagating_allocator(const propagating_allocator::other>& a) noexcept @@ -469,6 +480,7 @@ namespace __gnu_test propagating_allocator(const propagating_allocator&) noexcept = default; + _GLIBCXX14_CONSTEXPR propagating_allocator& operator=(const propagating_allocator& a) noexcept { @@ -478,6 +490,7 @@ namespace __gnu_test } template + _GLIBCXX14_CONSTEXPR propagating_allocator& operator=(const propagating_allocator& a) noexcept { @@ -487,11 +500,13 @@ namespace __gnu_test } // postcondition: LWG2593 a.get_personality() un-changed. + constexpr propagating_allocator(propagating_allocator&& a) noexcept - : base_alloc(std::move(a.base())) + : base_alloc(static_cast(a)) { } // postcondition: LWG2593 a.get_personality() un-changed + _GLIBCXX14_CONSTEXPR propagating_allocator& operator=(propagating_allocator&& a) noexcept { @@ -503,7 +518,8 @@ namespace __gnu_test typedef trait_type propagate_on_container_move_assignment; typedef trait_type propagate_on_container_swap; - propagating_allocator select_on_container_copy_construction() const + constexpr propagating_allocator + select_on_container_copy_construction() const { return Propagate ? *this : propagating_allocator(); } }; @@ -551,11 +567,11 @@ namespace __gnu_test : state(a.state) { } - constexpr T* + _GLIBCXX14_CONSTEXPR T* allocate(std::size_t n) { return std::allocator().allocate(n); } - constexpr void + _GLIBCXX14_CONSTEXPR void deallocate(T* p, std::size_t n) { std::allocator().deallocate(p, n); } @@ -581,7 +597,7 @@ namespace __gnu_test ExplicitConsAlloc() { } template - explicit + explicit _GLIBCXX_CONSTEXPR ExplicitConsAlloc(const ExplicitConsAlloc&) { } template @@ -600,6 +616,7 @@ namespace __gnu_test CustomPointerAlloc() = default; template + constexpr CustomPointerAlloc(const CustomPointerAlloc&) { } template @@ -611,9 +628,11 @@ namespace __gnu_test typedef Ptr void_pointer; typedef Ptr const_void_pointer; + _GLIBCXX14_CONSTEXPR pointer allocate(std::size_t n, const_void_pointer = {}) { return pointer(std::allocator::allocate(n)); } + _GLIBCXX14_CONSTEXPR void deallocate(pointer p, std::size_t n) { std::allocator::deallocate(std::addressof(*p), n); } }; @@ -631,16 +650,16 @@ namespace __gnu_test explicit operator bool() const noexcept { return value != nullptr; } - friend inline bool + friend constexpr bool operator==(NullablePointer lhs, NullablePointer rhs) noexcept { return lhs.value == rhs.value; } - friend inline bool + friend constexpr bool operator!=(NullablePointer lhs, NullablePointer rhs) noexcept { return lhs.value != rhs.value; } protected: - explicit NullablePointer(Ptr p) noexcept : value(p) { } + constexpr explicit NullablePointer(Ptr p) noexcept : value(p) { } Ptr value; }; @@ -649,16 +668,16 @@ namespace __gnu_test struct NullablePointer { NullablePointer() = default; - NullablePointer(std::nullptr_t) noexcept { } - explicit NullablePointer(const volatile void*) noexcept { } + constexpr NullablePointer(std::nullptr_t) noexcept { } + constexpr explicit NullablePointer(const volatile void*) noexcept { } - explicit operator bool() const noexcept { return false; } + constexpr explicit operator bool() const noexcept { return false; } - friend inline bool + friend constexpr bool operator==(NullablePointer, NullablePointer) noexcept { return true; } - friend inline bool + friend constexpr bool operator!=(NullablePointer, NullablePointer) noexcept { return false; } }; From bca9dd11059bbcdb3bcc0d8d8dfc29a499e228a8 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 7 Oct 2025 15:06:43 +0100 Subject: [PATCH 161/216] libstdc++: Remove unused config/cpu/cris/atomicity.h file [PR122172] This file is no longer used, because we always use the definitions in config/cpu/generic/atomicity_builtins/atomicity.h now. H-P confirmed that the code generated by __atomic_fetch_add is fine and we don't need the handwritten assembly. libstdc++-v3/ChangeLog: PR libstdc++/122172 * config/cpu/cris/atomicity.h: Removed. Reviewed-by: Hans-Peter Nilsson --- libstdc++-v3/config/cpu/cris/atomicity.h | 89 ------------------------ 1 file changed, 89 deletions(-) delete mode 100644 libstdc++-v3/config/cpu/cris/atomicity.h diff --git a/libstdc++-v3/config/cpu/cris/atomicity.h b/libstdc++-v3/config/cpu/cris/atomicity.h deleted file mode 100644 index 9d3cec403a14..000000000000 --- a/libstdc++-v3/config/cpu/cris/atomicity.h +++ /dev/null @@ -1,89 +0,0 @@ -// Low-level functions for atomic operations: CRIS version -*- C++ -*- - -// Copyright (C) 2001-2025 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// . - -#include - -namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) -{ -_GLIBCXX_BEGIN_NAMESPACE_VERSION - - _Atomic_word - __exchange_and_add(volatile _Atomic_word* __mem, int __val) throw () - { - int __tmp; - _Atomic_word __result; - -#if (__CRIS_arch_version >= 32) - __asm__ __volatile__ (" clearf p \n" - "0: \n" - " move.d %4,%2 \n" - " move.d [%3],%0 \n" - " add.d %0,%2 \n" - " ax \n" - " move.d %2,[%3] \n" - " bcs 0b \n" - " clearf p \n" - : "=&r" (__result), "=Q" (*__mem), "=&r" (__tmp) - : "r" (__mem), "g" (__val), "Q" (*__mem) - : "memory"); -#elif (__CRIS_arch_version >= 10) - __asm__ __volatile__ (" clearf \n" - "0: \n" - " move.d %4,%2 \n" - " move.d [%3],%0 \n" - " add.d %0,%2 \n" - " ax \n" - " move.d %2,[%3] \n" - " bwf 0b \n" - " clearf \n" - : "=&r" (__result), "=Q" (*__mem), "=&r" (__tmp) - : "r" (__mem), "g" (__val), "Q" (*__mem) - /* The memory clobber must stay, regardless of - current uses of this function. */ - : "memory"); -#else - __asm__ __volatile__ (" move $ccr,$r9 \n" - " di \n" - " move.d %4,%2 \n" - " move.d [%3],%0 \n" - " add.d %0,%2 \n" - " move.d %2,[%3] \n" - " move $r9,$ccr \n" - : "=&r" (__result), "=Q" (*__mem), "=&r" (__tmp) - : "r" (__mem), "g" (__val), "Q" (*__mem) - : "r9", - /* The memory clobber must stay, regardless of - current uses of this function. */ - "memory"); -#endif - - return __result; - } - - void - __atomic_add(volatile _Atomic_word* __mem, int __val) throw () - { __exchange_and_add(__mem, __val); } - -_GLIBCXX_END_NAMESPACE_VERSION -} // namespace From 65b6d374fc7c67462e939a0df762fd81887c4865 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 7 Oct 2025 15:06:43 +0100 Subject: [PATCH 162/216] libstdc++: Remove unused config/cpu/i486/atomicity.h file This file is no longer used, because we always use the definitions in config/cpu/generic/atomicity_builtins/atomicity.h now. libstdc++-v3/ChangeLog: * config/cpu/i486/atomicity.h: Removed. Reviewed-by: Uros Bizjak --- libstdc++-v3/config/cpu/i486/atomicity.h | 52 ------------------------ 1 file changed, 52 deletions(-) delete mode 100644 libstdc++-v3/config/cpu/i486/atomicity.h diff --git a/libstdc++-v3/config/cpu/i486/atomicity.h b/libstdc++-v3/config/cpu/i486/atomicity.h deleted file mode 100644 index 092ea9d1e892..000000000000 --- a/libstdc++-v3/config/cpu/i486/atomicity.h +++ /dev/null @@ -1,52 +0,0 @@ -// Low-level functions for atomic operations: x86, x >= 4 version -*- C++ -*- - -// Copyright (C) 1999-2025 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// . - -#include - -namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) -{ -_GLIBCXX_BEGIN_NAMESPACE_VERSION - - _Atomic_word - __attribute__ ((__unused__)) - __exchange_and_add(volatile _Atomic_word* __mem, int __val) throw () - { - register _Atomic_word __result; - __asm__ __volatile__ ("lock; xadd{l} {%0,%1|%1,%0}" - : "=r" (__result), "=m" (*__mem) - : "0" (__val), "m" (*__mem)); - return __result; - } - - void - __attribute__ ((__unused__)) - __atomic_add(volatile _Atomic_word* __mem, int __val) throw () - { - __asm__ __volatile__ ("lock; add{l} {%1,%0|%0,%1}" - : "=m" (*__mem) : "ir" (__val), "m" (*__mem)); - } - -_GLIBCXX_END_NAMESPACE_VERSION -} // namespace - From 3f70e625531ea9da1263b806f1d726630b8d600a Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 8 Oct 2025 12:41:16 +0100 Subject: [PATCH 163/216] libstdc++: Update dead links to PSTL upstream in docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The pstl code has been removed from the llvm repo so point to the Intel upstream project where it really originates from. libstdc++-v3/ChangeLog: * doc/xml/manual/status_cxx2017.xml: Replace broken link to PSTL upstream. * doc/xml/manual/status_cxx2020.xml: Likewise. * doc/html/manual/status.html: Regenerate. Reviewed-by: Tomasz Kamiński --- libstdc++-v3/doc/html/manual/status.html | 4 ++-- libstdc++-v3/doc/xml/manual/status_cxx2017.xml | 2 +- libstdc++-v3/doc/xml/manual/status_cxx2020.xml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libstdc++-v3/doc/html/manual/status.html b/libstdc++-v3/doc/html/manual/status.html index 465bc6ccafe9..64a484082689 100644 --- a/libstdc++-v3/doc/html/manual/status.html +++ b/libstdc++-v3/doc/html/manual/status.html @@ -970,7 +970,7 @@ 28
Algorithms -
28.1General  
28.2Header <algorithm> synopsis  
28.3Algorithms requirements  
28.4Parallel algorithms Using PSTL
28.5Non-modifying sequence operationsY 
28.6Mutating sequence operationsY 
28.7Sorting and related operationsY 
28.8C library algorithmsY 
+
28.1General  
28.2Header <algorithm> synopsis  
28.3Algorithms requirements  
28.4Parallel algorithms Uses code from oneDPL
28.5Non-modifying sequence operationsY 
28.6Mutating sequence operationsY 
28.7Sorting and related operationsY 
28.8C library algorithmsY 
29 Numerics @@ -1815,7 +1815,7 @@ 25 Algorithms library -
25.1General  
25.2Algorithms requirementsY 
25.3Parallel algorithms Using PSTL
25.4Header <algorithm> synopsisY 
25.5Algorithm result typesY 
25.6Non-modifying sequence operations  
25.6.1All ofY 
25.6.2Any ofY 
25.6.3None ofY 
25.6.4For eachY 
25.6.5FindY 
25.6.6Find endY 
25.6.7Find firstY 
25.6.8Adjacent findY 
25.6.9CountY 
25.6.10MismatchY 
25.6.11EqualY 
25.6.12Is permutationY 
25.6.13SearchY 
25.7Mutating sequence operations  
25.7.1CopyY 
25.7.2MoveY 
25.7.3SwapY 
25.7.4TransformY 
25.7.5ReplaceY 
25.7.6FillY 
25.7.7GenerateY 
25.7.8RemoveY 
25.7.9UniqueY 
25.7.10ReverseY 
25.7.11RotateY 
25.7.12SampleY 
25.7.13ShuffleY 
25.7.14ShiftY 
25.8Sorting and related operations  
25.8.1GeneralY 
25.8.2SortingY 
25.8.3Nth elementY 
25.8.4Binary searchY 
25.8.5PartitionsY 
25.8.6MergeY 
25.8.7Set operations on sorted structuresY 
25.8.8Heap operationsY 
25.8.9Minimum and maximumY 
25.8.10Bounded valueY 
25.8.11Lexicographical comparisonY 
25.8.12Three-way comparison algorithmsY 
25.8.13Permutation generatorsY 
25.9Header <numeric> synopsisY 
25.10Generalized numeric operations  
25.10.1General  
25.10.2Definitions  
25.10.3AccumulateY 
25.10.4ReduceY 
25.10.5Inner productY 
25.10.6Transform reduceY 
25.10.7Partial sumY 
25.10.8Exclusive scanY 
25.10.9Inclusive scanY 
25.10.10Transform exclusive scanY 
25.10.11Transform inclusive scanY 
25.10.12Adjacent differenceY 
25.10.13IotaY 
25.10.14Greatest common divisorY 
25.10.15Least common multipleY 
25.10.16MidpointY 
25.11Specialized <memory> algorithms  
25.11.1General  
25.11.2Special memory conceptsY 
25.11.3uninitialized_default_constructY 
25.11.4uninitialized_value_constructY 
25.11.5uninitialized_copyY 
25.11.6uninitialized_moveY 
25.11.7uninitialized_fillY 
25.11.8construct_atY 
25.11.9destroyY 
25.12C library algorithmsY 
+
25.1General  
25.2Algorithms requirementsY 
25.3Parallel algorithms Uses code from oneDPL
25.4Header <algorithm> synopsisY 
25.5Algorithm result typesY 
25.6Non-modifying sequence operations  
25.6.1All ofY 
25.6.2Any ofY 
25.6.3None ofY 
25.6.4For eachY 
25.6.5FindY 
25.6.6Find endY 
25.6.7Find firstY 
25.6.8Adjacent findY 
25.6.9CountY 
25.6.10MismatchY 
25.6.11EqualY 
25.6.12Is permutationY 
25.6.13SearchY 
25.7Mutating sequence operations  
25.7.1CopyY 
25.7.2MoveY 
25.7.3SwapY 
25.7.4TransformY 
25.7.5ReplaceY 
25.7.6FillY 
25.7.7GenerateY 
25.7.8RemoveY 
25.7.9UniqueY 
25.7.10ReverseY 
25.7.11RotateY 
25.7.12SampleY 
25.7.13ShuffleY 
25.7.14ShiftY 
25.8Sorting and related operations  
25.8.1GeneralY 
25.8.2SortingY 
25.8.3Nth elementY 
25.8.4Binary searchY 
25.8.5PartitionsY 
25.8.6MergeY 
25.8.7Set operations on sorted structuresY 
25.8.8Heap operationsY 
25.8.9Minimum and maximumY 
25.8.10Bounded valueY 
25.8.11Lexicographical comparisonY 
25.8.12Three-way comparison algorithmsY 
25.8.13Permutation generatorsY 
25.9Header <numeric> synopsisY 
25.10Generalized numeric operations  
25.10.1General  
25.10.2Definitions  
25.10.3AccumulateY 
25.10.4ReduceY 
25.10.5Inner productY 
25.10.6Transform reduceY 
25.10.7Partial sumY 
25.10.8Exclusive scanY 
25.10.9Inclusive scanY 
25.10.10Transform exclusive scanY 
25.10.11Transform inclusive scanY 
25.10.12Adjacent differenceY 
25.10.13IotaY 
25.10.14Greatest common divisorY 
25.10.15Least common multipleY 
25.10.16MidpointY 
25.11Specialized <memory> algorithms  
25.11.1General  
25.11.2Special memory conceptsY 
25.11.3uninitialized_default_constructY 
25.11.4uninitialized_value_constructY 
25.11.5uninitialized_copyY 
25.11.6uninitialized_moveY 
25.11.7uninitialized_fillY 
25.11.8construct_atY 
25.11.9destroyY 
25.12C library algorithmsY 
26 Numerics library diff --git a/libstdc++-v3/doc/xml/manual/status_cxx2017.xml b/libstdc++-v3/doc/xml/manual/status_cxx2017.xml index 253aa4832aa9..9c13caa084b1 100644 --- a/libstdc++-v3/doc/xml/manual/status_cxx2017.xml +++ b/libstdc++-v3/doc/xml/manual/status_cxx2017.xml @@ -1896,7 +1896,7 @@ since C++14 and the implementation is complete. 28.4 Parallel algorithms - Using PSTL + Uses code from oneDPL 28.5 diff --git a/libstdc++-v3/doc/xml/manual/status_cxx2020.xml b/libstdc++-v3/doc/xml/manual/status_cxx2020.xml index ab44d726fb48..a1d3843abeff 100644 --- a/libstdc++-v3/doc/xml/manual/status_cxx2020.xml +++ b/libstdc++-v3/doc/xml/manual/status_cxx2020.xml @@ -3425,7 +3425,7 @@ since C++17 and the implementation is complete. 25.3 Parallel algorithms - Using PSTL + Uses code from oneDPL From d4077ce639a2e5f8a12e531aa84fcf631aa5ba34 Mon Sep 17 00:00:00 2001 From: Martin Uecker Date: Sat, 30 Aug 2025 19:05:05 +0200 Subject: [PATCH 164/216] c: Allow variably-modified types in generic associations for C2Y This implements part of N3348 to allow variably-modified types in generic associations in C2Y and making it a pedantic warning before. Allowing star * is not yet implemented. gcc/c/ChangeLog: * c-parser.cc (c_parser_generic_selection): Change error_at to pedwarn_c23. gcc/testsuite/ChangeLog: * gcc.dg/c11-generic-2.c: Adapt error message. * gcc.dg/c2y-generic-3.c: Adapt test. * gcc.dg/c2y-generic-4.c: New test. --- gcc/c/c-parser.cc | 6 +++--- gcc/testsuite/gcc.dg/c11-generic-2.c | 2 +- gcc/testsuite/gcc.dg/c2y-generic-3.c | 4 ++-- gcc/testsuite/gcc.dg/c2y-generic-4.c | 10 ++++++++++ 4 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/c2y-generic-4.c diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc index 7c2452644bde..bc90be47151b 100644 --- a/gcc/c/c-parser.cc +++ b/gcc/c/c-parser.cc @@ -11253,9 +11253,9 @@ c_parser_generic_selection (c_parser *parser) "incomplete type before C2Y"); if (c_type_variably_modified_p (assoc.type)) - error_at (assoc.type_location, - "%<_Generic%> association has " - "variable length type"); + pedwarn_c23 (assoc.type_location, OPT_Wpedantic, + "ISO C does not support %<_Generic%> association with " + "variably-modified type before C2Y"); } if (!c_parser_require (parser, CPP_COLON, "expected %<:%>")) diff --git a/gcc/testsuite/gcc.dg/c11-generic-2.c b/gcc/testsuite/gcc.dg/c11-generic-2.c index 90be650af280..a74838025386 100644 --- a/gcc/testsuite/gcc.dg/c11-generic-2.c +++ b/gcc/testsuite/gcc.dg/c11-generic-2.c @@ -11,7 +11,7 @@ f (int n) _Generic (n, default: 1, default: 2); /* { dg-error "duplicate .*default.* case" } */ /* Variably-modified type not ok. */ - _Generic (n, int[n]: 0, default: 1); /* { dg-error "variable length type" } */ + _Generic (n, int[n]: 0, default: 1); /* { dg-error "variably-modified" } */ /* Type must be complete. */ _Generic (n, struct incomplete: 0, default: 1); /* { dg-error "incomplete type" } */ _Generic (n, void: 0, default: 1); /* { dg-error "incomplete type" } */ diff --git a/gcc/testsuite/gcc.dg/c2y-generic-3.c b/gcc/testsuite/gcc.dg/c2y-generic-3.c index 09174fdb095d..f3a807e06b49 100644 --- a/gcc/testsuite/gcc.dg/c2y-generic-3.c +++ b/gcc/testsuite/gcc.dg/c2y-generic-3.c @@ -1,9 +1,9 @@ -/* Test C2Y _Generic features: VM types still not allowed. */ +/* Test C2Y _Generic features: VM types allowed. */ /* { dg-do compile } */ /* { dg-options "-std=c2y -pedantic-errors" } */ void f (int i) { - (void) _Generic (i, int : 1, int (*)[i] : 2); /* { dg-error "variable length" } */ + (void) _Generic (i, int : 1, int (*)[i] : 2); } diff --git a/gcc/testsuite/gcc.dg/c2y-generic-4.c b/gcc/testsuite/gcc.dg/c2y-generic-4.c new file mode 100644 index 000000000000..8172ed45e741 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-generic-4.c @@ -0,0 +1,10 @@ +/* Test C2Y _Generic features: VM types allowed. Warn for -Wc23-c2y-compat */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors -Wc23-c2y-compat" } */ + +void +f (int i) +{ + (void) _Generic (i, int : 1, int (*)[i] : 2); /* { dg-warning "variably-modified type" } */ +} + From 50959e53e40ae087ee7bdbce7229b4b8b3cd1bb6 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Tue, 7 Oct 2025 21:54:45 +0200 Subject: [PATCH 165/216] Fortran: fix warnings for symbols with C binding and declared PRIVATE [PR49111] The Fortran standard does not prohibit restricting the accessibility of a symbol by use of the PRIVATE attribute and exposing it via a C binding label. Instead of unconditionally generating a warning, only warn if the binding label is surprisingly identical to the privatized Fortran symbol and when -Wsurprising is specified. PR fortran/49111 gcc/fortran/ChangeLog: * decl.cc (verify_bind_c_sym): Modify condition for generation of accessibility warning, and adjust warning message. gcc/testsuite/ChangeLog: * gfortran.dg/binding_label_tests_9.f03: Adjust test. * gfortran.dg/module_private_2.f90: Likewise. * gfortran.dg/public_private_module_2.f90: Likewise. * gfortran.dg/binding_label_tests_35.f90: New test. --- gcc/fortran/decl.cc | 18 +++++++------ .../gfortran.dg/binding_label_tests_35.f90 | 21 +++++++++++++++ .../gfortran.dg/binding_label_tests_9.f03 | 5 ++-- .../gfortran.dg/module_private_2.f90 | 2 +- .../gfortran.dg/public_private_module_2.f90 | 26 +++++++++---------- 5 files changed, 48 insertions(+), 24 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/binding_label_tests_35.f90 diff --git a/gcc/fortran/decl.cc b/gcc/fortran/decl.cc index ab43cec6f4ba..3fba8b1af396 100644 --- a/gcc/fortran/decl.cc +++ b/gcc/fortran/decl.cc @@ -6420,15 +6420,17 @@ verify_bind_c_sym (gfc_symbol *tmp_sym, gfc_typespec *ts, &(tmp_sym->declared_at)); } - /* See if the symbol has been marked as private. If it has, make sure - there is no binding label and warn the user if there is one. */ + /* See if the symbol has been marked as private. If it has, warn if + there is a binding label with default binding name. */ if (tmp_sym->attr.access == ACCESS_PRIVATE - && tmp_sym->binding_label) - /* Use gfc_warning_now because we won't say that the symbol fails - just because of this. */ - gfc_warning_now (0, "Symbol %qs at %L is marked PRIVATE but has been " - "given the binding label %qs", tmp_sym->name, - &(tmp_sym->declared_at), tmp_sym->binding_label); + && tmp_sym->binding_label + && strcmp (tmp_sym->name, tmp_sym->binding_label) == 0 + && (tmp_sym->attr.flavor == FL_VARIABLE + || tmp_sym->attr.if_source == IFSRC_DECL)) + gfc_warning (OPT_Wsurprising, + "Symbol %qs at %L is marked PRIVATE but is accessible " + "via its default binding name %qs", tmp_sym->name, + &(tmp_sym->declared_at), tmp_sym->binding_label); return retval; } diff --git a/gcc/testsuite/gfortran.dg/binding_label_tests_35.f90 b/gcc/testsuite/gfortran.dg/binding_label_tests_35.f90 new file mode 100644 index 000000000000..ae3973fe5bf2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/binding_label_tests_35.f90 @@ -0,0 +1,21 @@ +! { dg-do compile } +! { dg-options "-Wsurprising" } +! PR fortran/49111 +! +! Do not warn for interface declarations with C binding declared PRIVATE + +module mod1 + use iso_c_binding + implicit none + save + + interface + function strerror(errnum) bind(C, NAME = 'strerror') + import + type(C_PTR) :: strerror + integer(C_INT), value :: errnum + end function strerror + end interface + + private strerror +end module mod1 diff --git a/gcc/testsuite/gfortran.dg/binding_label_tests_9.f03 b/gcc/testsuite/gfortran.dg/binding_label_tests_9.f03 index bb61cbf12c77..81d74af019e2 100644 --- a/gcc/testsuite/gfortran.dg/binding_label_tests_9.f03 +++ b/gcc/testsuite/gfortran.dg/binding_label_tests_9.f03 @@ -1,4 +1,5 @@ ! { dg-do compile } +! { dg-options "-Wsurprising" } module x use iso_c_binding implicit none @@ -7,13 +8,13 @@ module x private :: my_private_sub_2 public :: my_public_sub contains - subroutine bar() bind(c,name="foo") ! { dg-warning "PRIVATE but has been given the binding label" } + subroutine bar() bind(c,name="foo") end subroutine bar subroutine my_private_sub() bind(c, name="") end subroutine my_private_sub - subroutine my_private_sub_2() bind(c) ! { dg-warning "PRIVATE but has been given the binding label" } + subroutine my_private_sub_2() bind(c) ! { dg-warning "is marked PRIVATE" } end subroutine my_private_sub_2 subroutine my_public_sub() bind(c, name="my_sub") diff --git a/gcc/testsuite/gfortran.dg/module_private_2.f90 b/gcc/testsuite/gfortran.dg/module_private_2.f90 index 847c58d5e37c..58dbb1e23fe5 100644 --- a/gcc/testsuite/gfortran.dg/module_private_2.f90 +++ b/gcc/testsuite/gfortran.dg/module_private_2.f90 @@ -1,5 +1,5 @@ ! { dg-do compile } -! { dg-options "-O2 -fdump-tree-optimized" } +! { dg-options "-O2 -Wsurprising -fdump-tree-optimized" } ! ! PR fortran/47266 ! diff --git a/gcc/testsuite/gfortran.dg/public_private_module_2.f90 b/gcc/testsuite/gfortran.dg/public_private_module_2.f90 index e84429e10033..87276ccdfd18 100644 --- a/gcc/testsuite/gfortran.dg/public_private_module_2.f90 +++ b/gcc/testsuite/gfortran.dg/public_private_module_2.f90 @@ -1,5 +1,5 @@ ! { dg-do compile } -! { dg-options "-O2" } +! { dg-options "-O2 -Wsurprising" } ! { dg-require-visibility "" } ! ! PR fortran/52751 (top, "module mod") @@ -8,16 +8,16 @@ ! Ensure that (only) those module variables and procedures which are PRIVATE ! and have no C-binding label are optimized away. ! - module mod - integer :: aa - integer, private :: iii - integer, private, bind(C) :: jj ! { dg-warning "PRIVATE but has been given the binding label" } - integer, private, bind(C,name='lll') :: kk ! { dg-warning "PRIVATE but has been given the binding label" } - integer, private, bind(C,name='') :: mmmm - integer, bind(C) :: nnn - integer, bind(C,name='oo') :: pp - integer, bind(C,name='') :: qq - end module mod +module mod + integer :: aa + integer, private :: iii + integer, private, bind(C) :: jj ! { dg-warning "is marked PRIVATE" } + integer, private, bind(C,name='lll') :: kk + integer, private, bind(C,name='') :: mmmm + integer, bind(C) :: nnn + integer, bind(C,name='oo') :: pp + integer, bind(C,name='') :: qq +end module mod ! The two xfails below have appeared with the introduction of submodules. 'iii' and ! 'mmm' now are TREE_PUBLIC but has DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN set. @@ -43,10 +43,10 @@ END SUBROUTINE one integer FUNCTION two() two = 42 END FUNCTION two - integer FUNCTION three() bind(C) ! { dg-warning "PRIVATE but has been given the binding label" } + integer FUNCTION three() bind(C) ! { dg-warning "is marked PRIVATE" } three = 43 END FUNCTION three - integer FUNCTION four() bind(C, name='five') ! { dg-warning "PRIVATE but has been given the binding label" } + integer FUNCTION four() bind(C, name='five') four = 44 END FUNCTION four integer FUNCTION six() bind(C, name='') From 921d6497aeecbde19ee4a022abe491fbfc59eb0c Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Wed, 8 Oct 2025 23:12:11 +0000 Subject: [PATCH 166/216] c: Implement C23 rules for undefined static functions in _Generic A fairly late change in C23, the resolution of CD2 ballot comments US-077 and US-078, added certain locations in _Generic to the obviously unevaluated locations where it is permitted to have a reference to a static function that is never defined. Implement this feature in GCC. The main complication is that, unlike previous cases where it's known at the end of an operand to a construct such as sizeof whether that operand is obviously unevaluated and so an appropriate argument can be passed to pop_maybe_used, in the case of a default generic association in _Generic it may not be known until the end of that _Generic expression whether that case is evaluated or not. Thus, we arrange for the state of the maybe_used_decls stack to be saved in this case and later restored once the correct argument to pop_maybe_used is known. There may well be further changes in this area in C2y (if the "discarded" proposal is adopted, further locations will be OK for such references to undefined static functions). For now, only expressions and not type names in _Generic have this special treatment. Bootstrapped with no regressions for x86_64-pc-linux-gnu. gcc/c/ * c-typeck.cc (in_generic, save_maybe_used, restore_maybe_used): New. (mark_decl_used, record_maybe_used_decl, pop_maybe_used): Use in_generic. (struct maybe_used_decl): Move to c-tree.h. * c-tree.h (struct maybe_used_decl): Move from c-typeck.cc. (in_generic, save_maybe_used, restore_maybe_used): Declare. * c-parser.cc (c_parser_generic_selection): Increment and decrement in_generic. Use pop_maybe_used, save_maybe_used and restore_maybe_used. gcc/testsuite/ * gcc.dg/c11-generic-4.c, gcc.dg/c23-generic-5.c, gcc.dg/c2y-generic-5.c: New tests. --- gcc/c/c-parser.cc | 26 +++++++++++ gcc/c/c-tree.h | 16 +++++++ gcc/c/c-typeck.cc | 68 ++++++++++++++++++---------- gcc/testsuite/gcc.dg/c11-generic-4.c | 38 ++++++++++++++++ gcc/testsuite/gcc.dg/c23-generic-5.c | 38 ++++++++++++++++ gcc/testsuite/gcc.dg/c2y-generic-5.c | 13 ++++++ 6 files changed, 176 insertions(+), 23 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/c11-generic-4.c create mode 100644 gcc/testsuite/gcc.dg/c23-generic-5.c create mode 100644 gcc/testsuite/gcc.dg/c2y-generic-5.c diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc index bc90be47151b..ea0294f0738e 100644 --- a/gcc/c/c-parser.cc +++ b/gcc/c/c-parser.cc @@ -11183,9 +11183,12 @@ c_parser_generic_selection (c_parser *parser) else { c_inhibit_evaluation_warnings++; + in_generic++; selector = c_parser_expr_no_commas (parser, NULL); selector = default_function_array_conversion (selector_loc, selector); c_inhibit_evaluation_warnings--; + in_generic--; + pop_maybe_used (!flag_isoc23); if (selector.value == error_mark_node) { @@ -11214,6 +11217,7 @@ c_parser_generic_selection (c_parser *parser) } auto_vec associations; + struct maybe_used_decl *maybe_used_default = NULL; while (1) { struct c_generic_association assoc, *iter; @@ -11269,11 +11273,19 @@ c_parser_generic_selection (c_parser *parser) if (!match) c_inhibit_evaluation_warnings++; + in_generic++; assoc.expression = c_parser_expr_no_commas (parser, NULL); if (!match) c_inhibit_evaluation_warnings--; + in_generic--; + if (!match) + pop_maybe_used (!flag_isoc23); + else if (assoc.type == NULL_TREE) + maybe_used_default = save_maybe_used (); + else + pop_maybe_used (true); if (assoc.expression.value == error_mark_node) { @@ -11334,6 +11346,20 @@ c_parser_generic_selection (c_parser *parser) c_parser_consume_token (parser); } + if (match_found >= 0 && matched_assoc.type == NULL_TREE) + { + /* Declarations referenced in the default association are used. */ + restore_maybe_used (maybe_used_default); + pop_maybe_used (true); + } + else if (maybe_used_default) + { + /* Declarations referenced in the default association are not used, but + are treated as used before C23. */ + restore_maybe_used (maybe_used_default); + pop_maybe_used (!flag_isoc23); + } + unsigned int ix; struct c_generic_association *iter; FOR_EACH_VEC_ELT (associations, ix, iter) diff --git a/gcc/c/c-tree.h b/gcc/c/c-tree.h index a06565d1e8bc..162add0522ac 100644 --- a/gcc/c/c-tree.h +++ b/gcc/c/c-tree.h @@ -624,6 +624,19 @@ enum c_inline_static_type { csi_modifiable }; +/* Record details of decls possibly used inside sizeof or typeof. */ +struct maybe_used_decl +{ + /* The decl. */ + tree decl; + /* The level seen at (in_sizeof + in_typeof + in_countof + in_generic). */ + int level; + /* Seen in address-of. */ + bool address; + /* The next one at this level or above, or NULL. */ + struct maybe_used_decl *next; +}; + /* in c-parser.cc */ struct c_tree_token_vec; @@ -774,6 +787,7 @@ extern int in_alignof; extern int in_sizeof; extern int in_countof; extern int in_typeof; +extern int in_generic; extern bool c_in_omp_for; extern bool c_omp_array_section_p; @@ -833,6 +847,8 @@ extern tree build_array_ref (location_t, tree, tree); extern tree build_omp_array_section (location_t, tree, tree, tree); extern tree build_external_ref (location_t, tree, bool, tree *); extern void pop_maybe_used (bool); +extern struct maybe_used_decl *save_maybe_used (); +extern void restore_maybe_used (struct maybe_used_decl *); extern void mark_decl_used (tree, bool); extern struct c_expr c_expr_sizeof_expr (location_t, struct c_expr); extern struct c_expr c_expr_sizeof_type (location_t, struct c_type_name *); diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc index 9b2aeea50f4a..371583bd64ed 100644 --- a/gcc/c/c-typeck.cc +++ b/gcc/c/c-typeck.cc @@ -78,6 +78,9 @@ int in_countof; /* The level of nesting inside "typeof". */ int in_typeof; +/* The level of nesting inside "_Generic". */ +int in_generic; + /* True when parsing OpenMP loop expressions. */ bool c_in_omp_for; @@ -3690,7 +3693,7 @@ mark_decl_used (tree ref, bool address) return; /* If we may be in an unevaluated context, delay the decision. */ - if (in_sizeof || in_typeof || in_countof) + if (in_sizeof || in_typeof || in_countof || in_generic) return record_maybe_used_decl (ref, address); if (static_p) @@ -3842,46 +3845,36 @@ build_external_ref (location_t loc, tree id, bool fun, tree *type) return ref; } -/* Record details of decls possibly used inside sizeof or typeof. */ -struct maybe_used_decl -{ - /* The decl. */ - tree decl; - /* The level seen at (in_sizeof + in_typeof + in_countof). */ - int level; - /* Seen in address-of. */ - bool address; - /* The next one at this level or above, or NULL. */ - struct maybe_used_decl *next; -}; - static struct maybe_used_decl *maybe_used_decls; -/* Record that DECL, a reference seen inside sizeof or typeof, might be used - if the operand of sizeof is a VLA type or the operand of typeof is a variably - modified type. */ +/* Record that DECL, a reference seen inside sizeof or typeof or _Countof or + _Generic, might be used if the operand of sizeof is a VLA type or the + operand of typeof is a variably modified type or the operand of _Countof has + a variable number of elements or the operand of _Generic is the one selected + as the result. */ static void record_maybe_used_decl (tree decl, bool address) { struct maybe_used_decl *t = XOBNEW (&parser_obstack, struct maybe_used_decl); t->decl = decl; - t->level = in_sizeof + in_typeof + in_countof; + t->level = in_sizeof + in_typeof + in_countof + in_generic; t->address = address; t->next = maybe_used_decls; maybe_used_decls = t; } -/* Pop the stack of decls possibly used inside sizeof or typeof. If - USED is false, just discard them. If it is true, mark them used - (if no longer inside sizeof or typeof) or move them to the next - level up (if still inside sizeof or typeof). */ +/* Pop the stack of decls possibly used inside sizeof or typeof or _Countof or + _Generic. If USED is false, just discard them. If it is true, mark them + used (if no longer inside sizeof or typeof or _Countof or _Generic) or move + them to the next level up (if still inside sizeof or typeof or _Countof or + _Generic). */ void pop_maybe_used (bool used) { struct maybe_used_decl *p = maybe_used_decls; - int cur_level = in_sizeof + in_typeof + in_countof; + int cur_level = in_sizeof + in_typeof + in_countof + in_generic; while (p && p->level > cur_level) { if (used) @@ -3897,6 +3890,35 @@ pop_maybe_used (bool used) maybe_used_decls = p; } +/* Pop the stack of decls possibly used inside sizeof or typeof or _Countof or + _Generic, without acting on them, and return the pointer to the previous top + of the stack. This for use at the end of a default generic association when + it is not yet known whether the expression is used. If it later turns out + the expression is used (or treated as used before C23), restore_maybe_used + should be called on the return value followed by pop_maybe_used (true); + otherwise, the return value can be discarded. */ + +struct maybe_used_decl * +save_maybe_used () +{ + struct maybe_used_decl *p = maybe_used_decls, *orig = p; + int cur_level = in_sizeof + in_typeof + in_countof + in_generic; + while (p && p->level > cur_level) + p = p->next; + maybe_used_decls = p; + return orig; +} + +/* Restore the stack of decls possibly used inside sizeof or typeof or _Countof + or _Generic returned by save_maybe_used. It is required that the stack is + at exactly the point where it was left by save_maybe_used. */ + +void +restore_maybe_used (struct maybe_used_decl *stack) +{ + maybe_used_decls = stack; +} + /* Return the result of sizeof applied to EXPR. */ struct c_expr diff --git a/gcc/testsuite/gcc.dg/c11-generic-4.c b/gcc/testsuite/gcc.dg/c11-generic-4.c new file mode 100644 index 000000000000..41309dff6318 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c11-generic-4.c @@ -0,0 +1,38 @@ +/* Test references to never-defined static functions in _Generic: allowed in + certain places for C23 but not before. */ +/* { dg-do compile } */ +/* { dg-options "-std=c11 -pedantic-errors" } */ + +static int ok1_c23 (); /* { dg-error "used but never defined" } */ +static int ok2_c23 (); /* { dg-error "used but never defined" } */ +static int ok3_c23 (); /* { dg-error "used but never defined" } */ +static int ok4_c23 (); /* { dg-error "used but never defined" } */ +static int ok5_c23 (); /* { dg-error "used but never defined" } */ +static int ok6 (); +static int ok7 (); +static int ok8 (); +static int ok9 (); +static int ok10 (); +static int ok11 (); +static int ok12 (); +static int not_ok1 (); /* { dg-error "used but never defined" } */ +static int not_ok2 (); /* { dg-error "used but never defined" } */ + +void +f () +{ + _Generic (ok1_c23 (), int: 2); + _Generic (1, int: 2, default: ok2_c23 ()); + _Generic (1, default: ok3_c23 (), int: 3); + _Generic (1, int: 2, float: ok4_c23 ()); + _Generic (1, float: ok5_c23 (), int: 3); + sizeof (_Generic (ok8 (), int: 2)); + sizeof (_Generic (1, int: 2, default: ok9 ())); + sizeof (_Generic (1, default: ok10 (), int: 3)); + sizeof (_Generic (1, int: 2, float: ok11 ())); + sizeof (_Generic (1, float: ok12 (), int: 3)); + _Generic (1.0, int: 2, default: not_ok1 ()); + _Generic (1.0, default: not_ok2 (), int: 3); + sizeof (_Generic (1.0, int: 2, default: ok6 ())); + sizeof (_Generic (1.0, default: ok7 (), int: 3)); +} diff --git a/gcc/testsuite/gcc.dg/c23-generic-5.c b/gcc/testsuite/gcc.dg/c23-generic-5.c new file mode 100644 index 000000000000..4603ec829a29 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c23-generic-5.c @@ -0,0 +1,38 @@ +/* Test references to never-defined static functions in _Generic: allowed in + certain places for C23 but not before. */ +/* { dg-do compile } */ +/* { dg-options "-std=c23 -pedantic-errors" } */ + +static int ok1_c23 (); +static int ok2_c23 (); +static int ok3_c23 (); +static int ok4_c23 (); +static int ok5_c23 (); +static int ok6 (); +static int ok7 (); +static int ok8 (); +static int ok9 (); +static int ok10 (); +static int ok11 (); +static int ok12 (); +static int not_ok1 (); /* { dg-error "used but never defined" } */ +static int not_ok2 (); /* { dg-error "used but never defined" } */ + +void +f () +{ + _Generic (ok1_c23 (), int: 2); + _Generic (1, int: 2, default: ok2_c23 ()); + _Generic (1, default: ok3_c23 (), int: 3); + _Generic (1, int: 2, float: ok4_c23 ()); + _Generic (1, float: ok5_c23 (), int: 3); + sizeof (_Generic (ok8 (), int: 2)); + sizeof (_Generic (1, int: 2, default: ok9 ())); + sizeof (_Generic (1, default: ok10 (), int: 3)); + sizeof (_Generic (1, int: 2, float: ok11 ())); + sizeof (_Generic (1, float: ok12 (), int: 3)); + _Generic (1.0, int: 2, default: not_ok1 ()); + _Generic (1.0, default: not_ok2 (), int: 3); + sizeof (_Generic (1.0, int: 2, default: ok6 ())); + sizeof (_Generic (1.0, default: ok7 (), int: 3)); +} diff --git a/gcc/testsuite/gcc.dg/c2y-generic-5.c b/gcc/testsuite/gcc.dg/c2y-generic-5.c new file mode 100644 index 000000000000..80097f0ea37a --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-generic-5.c @@ -0,0 +1,13 @@ +/* Test references to never-defined static functions in _Generic: still not + allowed in a type name used for selection, only an expression (may change if + "discarded" is adopted). */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +static int not_ok1 (); /* { dg-error "used but never defined" } */ + +void +f () +{ + _Generic (int (*)[not_ok1 ()], default: 1); +} From 954b679175190d06c0ceaf3aaea648c874497d71 Mon Sep 17 00:00:00 2001 From: GCC Administrator Date: Thu, 9 Oct 2025 00:21:21 +0000 Subject: [PATCH 167/216] Daily bump. --- contrib/ChangeLog | 17 +++++ gcc/ChangeLog | 67 ++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/c-family/ChangeLog | 6 ++ gcc/c/ChangeLog | 23 ++++++ gcc/cp/ChangeLog | 7 ++ gcc/fortran/ChangeLog | 32 +++++++++ gcc/jit/ChangeLog | 33 +++++++++ gcc/testsuite/ChangeLog | 87 +++++++++++++++++++++++ libcpp/ChangeLog | 13 ++++ libstdc++-v3/ChangeLog | 150 ++++++++++++++++++++++++++++++++++++++++ 11 files changed, 436 insertions(+), 1 deletion(-) diff --git a/contrib/ChangeLog b/contrib/ChangeLog index 2938e98a104e..55737ced848a 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,20 @@ +2025-10-08 Jakub Jelinek + + * unicode/README: Add HangulSyllableType.txt file to the + list as newest utf8_gen.py from glibc now needs it. Adjust + git commit hash and change unicode 16 version to 17. + * unicode/from_glibc/utf8_gen.py: Updated from glibc. + * unicode/DerivedCoreProperties.txt: Updated from Unicode 17.0.0. + * unicode/emoji-data.txt: Likewise. + * unicode/PropList.txt: Likewise. + * unicode/GraphemeBreakProperty.txt: Likewise. + * unicode/DerivedNormalizationProps.txt: Likewise. + * unicode/NameAliases.txt: Likewise. + * unicode/UnicodeData.txt: Likewise. + * unicode/EastAsianWidth.txt: Likewise. + * unicode/DerivedGeneralCategory.txt: Likewise. + * unicode/HangulSyllableType.txt: New file. + 2025-10-05 Mark Wielaard * gcc-changelog/git_update_version.py (ignored_commits): Add diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0dec12e27852..19a17a393597 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,70 @@ +2025-10-08 Antoni Boucher + + * configure: Regenerate. + +2025-10-08 Trevor Gross + + PR target/115054 + * config/i386/i386.cc (function_arg_ms_64, + function_value_ms_64): Pass and return _Float16 in vector + registers on Windows. + +2025-10-08 Richard Biener + + PR tree-optimization/110223 + PR tree-optimization/122128 + * tree-vect-patterns.cc (vect_recog_bool_pattern): Add + compensation for mixed mask/data bitwise operations. + +2025-10-08 Richard Biener + + * tree-vect-patterns.cc (integer_type_for_mask): Only + reject vect_external_defs. + +2025-10-08 Richard Biener + + * doc/tm.texi.in (JIT Language and ABI): Add menu item. + * doc/tm.texi: Re-generate. + +2025-10-08 Richard Biener + + PR tree-optimization/110223 + * tree-vect-patterns.cc (vect_recog_bool_pattern): Fix + mistakes in the store-from-mask bool pattern. Add + required mask conversions. + +2025-10-08 Richard Biener + + PR tree-optimization/105490 + * tree-vect-patterns.cc (build_mask_conversion): Move earlier. + (vect_convert_mask_for_vectype): Likewise. + (vect_recog_bool_pattern): Remove redundant truth type + construction. Add missing possibly required mask conversion. + +2025-10-08 Antoni Boucher + + PR jit/112466 + * Makefile.in (tm_jit_file_list, tm_jit_include_list, TM_JIT_H, + JIT_TARGET_DEF, JIT_TARGET_H, JIT_TARGET_OBJS): New variables. + (tm_jit.h, cs-tm_jit.h, jit/jit-target-hooks-def.h, + s-jit-target-hooks-def-h, default-jit.o): New rules. + (s-tm-texi): Also check timestamp on jit-target.def. + (generated_files): Add TM_JIT_H and jit/jit-target-hooks-def.h. + (build/genhooks.o): Also depend on JIT_TARGET_DEF. + * config.gcc (tm_jit_file, jit_target_objs, target_has_targetjitm): + New variables. + * config/i386/t-i386 (i386-jit.o): New rule. + * configure: Regenerate. + * configure.ac (tm_jit_file_list, tm_jit_include_list, + jit_target_objs): Add substitutes. + * doc/tm.texi: Regenerate. + * doc/tm.texi.in (targetjitm): Document. + (target_has_targetjitm): Document. + * genhooks.cc: Include jit/jit-target.def. + * config/default-jit.cc: New file. + * config/i386/i386-jit.cc: New file. + * config/i386/i386-jit.h: New file. + 2025-10-07 Alfie Richards * doc/tm.texi: Regenerate. diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index b95af03f6e9b..80c58c12bccf 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20251008 +20251009 diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 465ab18c7d82..1142d0640640 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,9 @@ +2025-10-08 Jakub Jelinek + + PR c/122188 + * c-gimplify.cc (c_gimplify_expr): Gimplify CALL_EXPR_ARG (*expr_p, 0) + instead of calling save_expr on it. + 2025-10-04 Jakub Jelinek PR c++/114457 diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 5b6a56e3c421..241e71bf25ce 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,26 @@ +2025-10-08 Joseph Myers + + * c-typeck.cc (in_generic, save_maybe_used, restore_maybe_used): + New. + (mark_decl_used, record_maybe_used_decl, pop_maybe_used): Use + in_generic. + (struct maybe_used_decl): Move to c-tree.h. + * c-tree.h (struct maybe_used_decl): Move from c-typeck.cc. + (in_generic, save_maybe_used, restore_maybe_used): Declare. + * c-parser.cc (c_parser_generic_selection): Increment and + decrement in_generic. Use pop_maybe_used, save_maybe_used and + restore_maybe_used. + +2025-10-08 Martin Uecker + + * c-parser.cc (c_parser_generic_selection): Change + error_at to pedwarn_c23. + +2025-10-08 Alfie Richards + + PR target/122180 + * c-decl.cc (pushdecl): Add TARGET_HAS_FMV_TARGET_ATTRIBUTE check. + 2025-10-07 Joseph Myers PR c/26581 diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 26434756b336..5099caab06d1 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2025-10-08 Jason Merrill + + * init.cc (build_new_1): Also clobber for non-placement new. + Only loop clobber in constexpr. + * expr.cc (wrap_with_if_consteval): New. + * cp-tree.h (wrap_with_if_consteval): Declare. + 2025-10-07 Jason Merrill * init.cc (build_new_1): Clobber a constant-bound array as a whole. diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index b57bfb9d513a..08bc1b3d8bf0 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,35 @@ +2025-10-08 Harald Anlauf + + PR fortran/49111 + * decl.cc (verify_bind_c_sym): Modify condition for generation of + accessibility warning, and adjust warning message. + +2025-10-08 Paul Thomas + + PR fortran/93175 + PR fortran/102240 + PR fortran/102686 + * array.cc (match_array_element_spec): For pdt templates, call + gfc_correct_parm_expr to elimante extraneous symbols from the + bound expressions. + * decl.cc (correct_parm_expr, gfc_correct_parm_expr): New fcns + that remove symbols that are not PDT parameters from the type + specification expressions. + (insert_parameter_exprs): Process function symbols as if they + are variables in the substitution with parameter expressions. + (gfc_get_pdt_instance): Make sure that the parameter list of + PDT components is updated as the instance is built. Move the + construction of pdt_strings down a bit in the function and + remove the tie up with pdt_arrays. + * gfortran.h: Add prototype for gfc_correct_parm_expr. + * resolve.cc (resolve_component): Skip testing for constant + specification expressions in pdt_template component string + lengths and pdt_strings. + * trans-array.cc (structure_alloc_comps): Remove testing for + deferred parameters and instead make sure that components of + PDT type have parameters substituted with the parameter exprs + of the enclosing PDT. + 2025-10-07 Paul Thomas PR fortran/102901 diff --git a/gcc/jit/ChangeLog b/gcc/jit/ChangeLog index 7e31500bae0b..1577ea06aac5 100644 --- a/gcc/jit/ChangeLog +++ b/gcc/jit/ChangeLog @@ -1,3 +1,36 @@ +2025-10-08 Antoni Boucher + + PR jit/112466 + * Make-lang.in (JIT_OBJS): New variable. + * jit-playback.cc (replay): Include jit-target.h and initialize + target. + * jit-playback.h (class populate_target_info): New class. + * jit-recording.cc (recording::context::populate_target_info): New + method. + * jit-recording.h (recording::context::populate_target_info): New + method. + (recording::context::m_populated_target_info): New field. + * libgccjit.cc: Include jit-target.h. + (struct gcc_jit_target_info): New struct. + (gcc_jit_context_get_target_info, gcc_jit_target_info_release, + gcc_jit_target_info_cpu_supports, gcc_jit_target_info_arch, + gcc_jit_target_info_supports_target_dependent_type): New functions. + * libgccjit.h (gcc_jit_context_get_target_info, + gcc_jit_target_info_release, gcc_jit_target_info_cpu_supports, + gcc_jit_target_info_arch, + gcc_jit_target_info_supports_target_dependent_type): + New functions. + * libgccjit.map (LIBGCCJIT_ABI_35): New ABI tag. + * docs/topics/compilation.rst: Add documentation for the + functions gcc_jit_context_get_target_info, gcc_jit_target_info_release, + gcc_jit_target_info_cpu_supports, gcc_jit_target_info_arch, + gcc_jit_target_info_supports_target_dependent_type. + * docs/topics/compatibility.rst (LIBGCCJIT_ABI_35): New ABI tag. + * jit-target-def.h: New file. + * jit-target.cc: New file. + * jit-target.def: New file. + * jit-target.h: New file. + 2025-10-07 Jonathan Wakely * docs/_build/texinfo/libgccjit.texi: Fix spelling. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ff10abf7b227..3b6a2744e0b4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,90 @@ +2025-10-08 Joseph Myers + + * gcc.dg/c11-generic-4.c, gcc.dg/c23-generic-5.c, + gcc.dg/c2y-generic-5.c: New tests. + +2025-10-08 Harald Anlauf + + PR fortran/49111 + * gfortran.dg/binding_label_tests_9.f03: Adjust test. + * gfortran.dg/module_private_2.f90: Likewise. + * gfortran.dg/public_private_module_2.f90: Likewise. + * gfortran.dg/binding_label_tests_35.f90: New test. + +2025-10-08 Martin Uecker + + * gcc.dg/c11-generic-2.c: Adapt error message. + * gcc.dg/c2y-generic-3.c: Adapt test. + * gcc.dg/c2y-generic-4.c: New test. + +2025-10-08 Jakub Jelinek + + * c-c++-common/cpp/named-universal-char-escape-1.c: Add test for + \N{CJK UNIFIED IDEOGRAPH-3340E}. + +2025-10-08 Jason Merrill + + * g++.dg/analyzer/new-2.C: Adjust diags. + * g++.dg/analyzer/noexcept-new.C: Adjust diags. + * g++.dg/warn/Warray-bounds-23.C: Add warnings. + * g++.dg/warn/Warray-bounds-24.C: Add warnings. + * g++.dg/cpp26/constexpr-new4a.C: New test. + +2025-10-08 Richard Biener + + PR tree-optimization/110223 + PR tree-optimization/122128 + * gcc.dg/vect/vect-bool-2.c: New testcase. + * gcc.dg/vect/vect-bool-cmp-3.c: Likewise. + * gcc.dg/vect/vect-bool-cmp-4.c: Likewise. + +2025-10-08 Richard Biener + + PR testsuite/120100 + * g++.dg/vect/pr64410.cc: Adjust. + +2025-10-08 Richard Biener + + PR target/120091 + * gcc.target/i386/pr119919.c: Only check for vectorization + when !ia32. + +2025-10-08 Alfie Richards + + PR target/122180 + * gcc.target/i386/pr122180.c: New test. + +2025-10-08 Jakub Jelinek + + PR c/122188 + * c-c++-common/pr122188.c: New test. + +2025-10-08 Jakub Jelinek + + PR tree-optimization/121206 + * gcc.dg/pr121987.c (main): Use unsigned long long type for e instead + of unsigned long and use ULL suffix on the initializer. + +2025-10-08 Paul Thomas + + PR fortran/93175 + PR fortran/102240 + PR fortran/102686 + * gfortran.dg/pdt_55.f03: New test. + +2025-10-08 Richard Biener + + PR tree-optimization/105490 + * gcc.dg/vect/vect-cond-14.c: New testcase. + +2025-10-08 Antoni Boucher + + PR jit/112466 + * jit.dg/all-non-failing-tests.h: Mention + test-target-info.c. + * jit.dg/test-target-info.c: New test. + * jit.dg/test-error-target-info.c: New test. + 2025-10-07 Joseph Myers PR c/26581 diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 4a05748a368d..43d3f39dd086 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,16 @@ +2025-10-08 Jakub Jelinek + + * makeucnid.cc (write_copyright): Adjust copyright year. + * makeuname2c.cc (generated_ranges): Adjust end points for a couple + of ranges based on UnicodeData.txt Last changes and add a whole new + CJK UNIFIED IDEOGRAPH- entry. None of these changes are in the 4-8 + table, but clearly it has just been forgotten. + (write_copyright): Adjust copyright year. + (write_dict): Fix up condition when to print semicolon. + * generated_cpp_wcwidth.h: Regenerate. + * ucnid.h: Regenerate. + * uname2c.h: Regenerate. + 2025-09-23 David Malcolm PR diagnostics/121986 diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index e8f244b9364e..5eeb4cffdc22 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,153 @@ +2025-10-08 Jonathan Wakely + + * doc/xml/manual/status_cxx2017.xml: Replace broken link to PSTL + upstream. + * doc/xml/manual/status_cxx2020.xml: Likewise. + * doc/html/manual/status.html: Regenerate. + +2025-10-08 Jonathan Wakely + + * config/cpu/i486/atomicity.h: Removed. + +2025-10-08 Jonathan Wakely + + PR libstdc++/122172 + * config/cpu/cris/atomicity.h: Removed. + +2025-10-08 Jonathan Wakely + + * include/bits/indirect.h (indirect::operator=(indirect&&)): + Move assign allocator when POCMA is true. + (polymorphic::operator=(polymorphic&&)): Likewise. + * testsuite/std/memory/indirect/copy.cc: Remove constexpr from + functions that use tracker_allocator. Add test_constexpr(). + * testsuite/std/memory/indirect/copy_alloc.cc: Remove constexpr + from all functions and remove static_assert. + * testsuite/std/memory/indirect/ctor.cc: Do not use + scoped_allocator_adaptor during constant evaluation. + * testsuite/std/memory/indirect/move.cc: Remove constexpr from + functions that use tracker_allocator. Add test_constexpr(). + * testsuite/std/memory/indirect/move_alloc.cc: Remove constexpr + from all functions and remove static_assert. + * testsuite/std/memory/indirect/relops.cc: Invoke lambda in + static_assert. + * testsuite/std/memory/polymorphic/copy.cc: Remove constexpr + from functions that use tracker_allocator. Add test_constexpr(). + * testsuite/std/memory/polymorphic/copy_alloc.cc: Remove + constexpr from all functions and remove static_assert. + * testsuite/std/memory/polymorphic/ctor.cc: Do not use + scoped_allocator_adaptor during constant evaluation. + * testsuite/std/memory/polymorphic/ctor_poly.cc: Likewise. + * testsuite/std/memory/polymorphic/move.cc: Remove constexpr + from functions that use tracker_allocator. Add test_constexpr(). + * testsuite/std/memory/polymorphic/move_alloc.cc: Remove + constexpr from all functions and remove static_assert. + * testsuite/util/testsuite_allocator.h (tracker_allocator): + Remove redundant 'inline' from friend. + (uneq_allocator): Make all functions constexpr. + (uneq_allocator::base, uneq_allocator::swap_base): Remove. + (uneq_allocator::~uneq_allocator): Remove. + (uneq_allocator::allocate, uneq_allocator::deallocate): Do not + use map of allocations during constant evaluation. + (propagating_allocator): Make all functions constexpr. + (propagating_allocator::base): Remove. + (propagating_allocator::swap_base): Simplify. + (ExplicitConsAlloc, CustomPointerAlloc, NullablePointer): Add + constexpr to all functions. + +2025-10-08 Jakub Jelinek + + * include/bits/unicode-data.h: Regenerate. + * testsuite/ext/unicode/properties.cc: Test __is_extended_pictographic + on U+1F004 rather than U+1F000. + +2025-10-08 Tomasz Kamiński + + * include/bits/chrono_io.h (_ChronoData::_M_fill_day): Replace + '%' by '/'. + +2025-10-08 Jonathan Wakely + + * testsuite/std/time/format/format.cc: Include . + +2025-10-08 Luc Grosheintz + + PR libstdc++/110352 + * include/std/mdspan (submdspan_mapping_result): New class. + * src/c++23/std.cc.in (submdspan_mapping_result): Add. + +2025-10-08 Luc Grosheintz + + PR libstdc++/110352 + * include/std/mdspan (full_extent_t): New class. + * src/c++23/std.cc.in (full_extent_t): Add. + +2025-10-08 Luc Grosheintz + + PR libstdc++/110352 + * include/bits/version.def (submdspan): New internal macro. + * include/bits/version.h: Regenerate. + * include/std/mdspan (strided_slice): New class. + * src/c++23/std.cc.in (strided_slice): Add. + * testsuite/23_containers/mdspan/submdspan/strided_slice.cc: New test. + * testsuite/23_containers/mdspan/submdspan/strided_slice_neg.cc: New test. + +2025-10-08 Luc Grosheintz + + * include/std/mdspan (__mdspan::__index_type_cast): Optimize by + skipping a __glibcxx_assert if it's know at compile-time. + (std::layout_left_padded, std::layout_righ_padded): Reorder + is_always_strided and is_unique member functions. + * testsuite/23_containers/mdspan/int_like.h: Rename _M_i to + value. + +2025-10-08 Luc Grosheintz + + PR libstdc++/110352 + * include/std/mdspan (_RightPaddedIndices): Traits for right + padded layouts. + (layout_right::mapping::mapping) New overload for right padded + layouts. + (layout_right_padded): Add implementation. + * src/c++23/std.cc.in (layout_right_padded): Add. + * testsuite/23_containers/mdspan/layouts/ctors.cc: Update + test for right padded layouts. + * testsuite/23_containers/mdspan/layouts/empty.cc: Ditto. + * testsuite/23_containers/mdspan/layouts/mapping.cc: Ditto. + * testsuite/23_containers/mdspan/layouts/padded.cc: Ditto. + * testsuite/23_containers/mdspan/layouts/padded_neg.cc: Ditto. + * testsuite/23_containers/mdspan/layouts/padded_traits.h: Ditto. + +2025-10-08 Luc Grosheintz + + PR libstdc++/110352 + * include/bits/version.def (padded_layouts): Add new internal + feature testing macro. + * include/bits/version.h: Regenerate. + * include/std/mdspan (__fwd_prod): New overload. + (layout_left_padded): Add declaration and implementation. + (layout_right_padded): Add declaration only. + (layout_left::mapping::mapping): New overload for left + padded mappings. + (__index_type_cast): New function that performs a checked cast + to index_type. + (__is_left_padded_mapping): New concept. + (__is_right_padded_mapping): Ditto. + (__standardized_mapping): Recognize left and right padded + mappings. + (_LeftPaddedIndices): Traits for left padded details. + (_PaddedStorage): New class for implementing padded layouts. + * src/c++23/std.cc.in (layout_left_padded): Add. + * testsuite/23_containers/mdspan/layouts/class_mandate_neg.cc: + Refactor and add tests for layout_left_padded. + * testsuite/23_containers/mdspan/layouts/ctors.cc: Ditto. + * testsuite/23_containers/mdspan/layouts/empty.cc: Ditto. + * testsuite/23_containers/mdspan/layouts/mapping.cc: Ditto. + * testsuite/23_containers/mdspan/layouts/padded.cc: Ditto. + * testsuite/23_containers/mdspan/layouts/padded_neg.cc: Ditto. + * testsuite/23_containers/mdspan/layouts/padded_traits.h: New + traits. + 2025-10-07 Jonathan Wakely * configure.host: Fix spelling in comment. From c3f8414d18c4b6644fcd414cd8d89427fbe1f3d8 Mon Sep 17 00:00:00 2001 From: Sam James Date: Tue, 7 Oct 2025 01:51:55 +0100 Subject: [PATCH 168/216] doc: mention -Wmaybe-uninitialized vs CCP CCP interacts poorly with -Wmaybe-uninitialized in some cases by assuming a value which stops us warning about it (false negatives). Inform users about this infamous interaction. gcc/ChangeLog: PR tree-optimization/18501 * doc/invoke.texi (-Wmaybe-uninitialized): Mention interaction with CCP. --- gcc/doc/invoke.texi | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index f93fe43733dc..8802d416b30c 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -8375,7 +8375,10 @@ known to read the object.) Annotating the function with attribute the object and avoids the warning (@pxref{Common Function Attributes}). These warnings are only possible in optimizing compilation, because otherwise -GCC does not keep track of the state of variables. +GCC does not keep track of the state of variables. On the other hand, +@option{-Wmaybe-uninitialized} is known not to warn in many situations +(false negatives) due to optimizations taking advantage of undefinedness +of uninitialized uses like constant propagation. These warnings are made optional because GCC may not be able to determine when the code is correct in spite of appearing to have an error. Here is one From 24ba6f2f96340f98d0d84b60c5f6bb1141500b03 Mon Sep 17 00:00:00 2001 From: Sam James Date: Thu, 9 Oct 2025 03:38:06 +0100 Subject: [PATCH 169/216] doc: fix grammar nit gcc/ChangeLog: * doc/invoke.texi: Add missing full stop. --- gcc/doc/invoke.texi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 8802d416b30c..41ce025350e7 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -8464,7 +8464,7 @@ It warns about code that might break the strict aliasing rules that the compiler is using for optimization. The warning does not catch all cases, but does attempt to catch the more common pitfalls. It is included in @option{-Wall}. -It is equivalent to @option{-Wstrict-aliasing=3} +It is equivalent to @option{-Wstrict-aliasing=3}. @opindex Wstrict-aliasing=n @item -Wstrict-aliasing=n From b52a90e7a03fef3c237a78c91dcad37237338d1b Mon Sep 17 00:00:00 2001 From: Sam James Date: Thu, 9 Oct 2025 03:40:58 +0100 Subject: [PATCH 170/216] doc: type-punning through a union is a GNU extension for C++ We didn't explicitly say that type-punning through a union is undefined behavior in C++. Mention that, and that we support it as a GNU extension. This was reported on LLVM's Discourse (forums) [0]. [0] https://discourse.llvm.org/t/ub-when-type-punning-through-unions/88527/6 gcc/ChangeLog: PR c++/117219 * doc/invoke.texi (-fstrict-aliasing): Explain that type-punning through a union in C++ is supported as a GNU extension. --- gcc/doc/invoke.texi | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 41ce025350e7..c0d1442f7b19 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -15049,10 +15049,11 @@ int f() @{ @end smallexample The practice of reading from a different union member than the one most recently written to (called ``type-punning'') is common. Even with -@option{-fstrict-aliasing}, type-punning is allowed, provided the memory -is accessed through the union type. So, the code above works as -expected. @xref{Structures unions enumerations and bit-fields -implementation}. However, this code might not: +@option{-fstrict-aliasing}, type-punning is allowed in C, provided the memory +is accessed through the union type. In ISO C++, type-punning through a union +type is undefined behavior, but GCC supports it as an extension. So, the code +above works as expected. @xref{Structures unions enumerations and +bit-fields implementation}. However, this code might not: @smallexample int f() @{ union a_union t; From 5e9eecc66867ba0ae7df20f1cd526ad38fd1888f Mon Sep 17 00:00:00 2001 From: Robin Dapp Date: Thu, 11 Sep 2025 15:20:36 +0200 Subject: [PATCH 171/216] vect: Remove type from misalignment hook. This patch removes the type argument from the vector_misalignment hook. Ever since we switched from element to byte misalignment its semantics haven't been particularly clear and nowadays it should be redundant. Also, in case of gather/scatter, the patch sets misalignment to the misalignment of one unit of the vector mode so targets can distinguish between element size alignment and element mode alignment. is_packed is now always set, regardless of misalignment. gcc/ChangeLog: * config/aarch64/aarch64.cc (aarch64_builtin_support_vector_misalignment): Remove type. * config/arm/arm.cc (arm_builtin_support_vector_misalignment): Ditto. * config/epiphany/epiphany.cc (epiphany_support_vector_misalignment): Ditto. * config/gcn/gcn.cc (gcn_vectorize_support_vector_misalignment): Ditto. * config/loongarch/loongarch.cc (loongarch_builtin_support_vector_misalignment): Ditto. * config/riscv/riscv.cc (riscv_support_vector_misalignment): Ditto. * config/rs6000/rs6000.cc (rs6000_builtin_support_vector_misalignment): Ditto. * config/s390/s390.cc (s390_support_vector_misalignment): Ditto. * doc/tm.texi: Adjust vector misalignment docs. * target.def: Ditto. * targhooks.cc (default_builtin_support_vector_misalignment): Remove type. * targhooks.h (default_builtin_support_vector_misalignment): Ditto. * tree-vect-data-refs.cc (vect_can_force_dr_alignment_p): Set misalignment for gather/scatter and remove type. (vect_supportable_dr_alignment): Ditto. --- gcc/config/aarch64/aarch64.cc | 5 ++--- gcc/config/arm/arm.cc | 5 ++--- gcc/config/epiphany/epiphany.cc | 6 +++--- gcc/config/gcn/gcn.cc | 3 +-- gcc/config/loongarch/loongarch.cc | 3 +-- gcc/config/riscv/riscv.cc | 11 +++++------ gcc/config/rs6000/rs6000.cc | 13 ++++++------- gcc/config/s390/s390.cc | 3 +-- gcc/doc/tm.texi | 12 ++++++------ gcc/target.def | 12 ++++++------ gcc/targhooks.cc | 2 -- gcc/targhooks.h | 1 - gcc/tree-vect-data-refs.cc | 15 +++++++++------ 13 files changed, 42 insertions(+), 49 deletions(-) diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index 031da8638602..9d2c3431ad36 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -355,7 +355,6 @@ static void aarch64_override_options_after_change (void); static bool aarch64_vector_mode_supported_p (machine_mode); static int aarch64_address_cost (rtx, machine_mode, addr_space_t, bool); static bool aarch64_builtin_support_vector_misalignment (machine_mode mode, - const_tree type, int misalignment, bool is_packed, bool is_gather_scatter); @@ -24564,7 +24563,7 @@ aarch64_simd_vector_alignment_reachable (const_tree type, bool is_packed) target. */ static bool aarch64_builtin_support_vector_misalignment (machine_mode mode, - const_tree type, int misalignment, + int misalignment, bool is_packed, bool is_gather_scatter) { @@ -24581,7 +24580,7 @@ aarch64_builtin_support_vector_misalignment (machine_mode mode, if (misalignment == -1) return false; } - return default_builtin_support_vector_misalignment (mode, type, misalignment, + return default_builtin_support_vector_misalignment (mode, misalignment, is_packed, is_gather_scatter); } diff --git a/gcc/config/arm/arm.cc b/gcc/config/arm/arm.cc index 8b951f3d4a67..f074a429200b 100644 --- a/gcc/config/arm/arm.cc +++ b/gcc/config/arm/arm.cc @@ -287,7 +287,6 @@ static bool arm_class_likely_spilled_p (reg_class_t); static HOST_WIDE_INT arm_vector_alignment (const_tree type); static bool arm_vector_alignment_reachable (const_tree type, bool is_packed); static bool arm_builtin_support_vector_misalignment (machine_mode mode, - const_tree type, int misalignment, bool is_packed, bool is_gather_scatter); @@ -30662,7 +30661,7 @@ arm_vector_alignment_reachable (const_tree type, bool is_packed) static bool arm_builtin_support_vector_misalignment (machine_mode mode, - const_tree type, int misalignment, + int misalignment, bool is_packed, bool is_gather_scatter) { @@ -30688,7 +30687,7 @@ arm_builtin_support_vector_misalignment (machine_mode mode, return ((misalignment % align) == 0); } - return default_builtin_support_vector_misalignment (mode, type, misalignment, + return default_builtin_support_vector_misalignment (mode, misalignment, is_packed, is_gather_scatter); } diff --git a/gcc/config/epiphany/epiphany.cc b/gcc/config/epiphany/epiphany.cc index f53a643575b1..2446b02389aa 100644 --- a/gcc/config/epiphany/epiphany.cc +++ b/gcc/config/epiphany/epiphany.cc @@ -2815,15 +2815,15 @@ epiphany_vector_alignment_reachable (const_tree type, bool is_packed) } static bool -epiphany_support_vector_misalignment (machine_mode mode, const_tree type, - int misalignment, bool is_packed, +epiphany_support_vector_misalignment (machine_mode mode, int misalignment, + bool is_packed, bool is_gather_scatter) { if (is_gather_scatter) return true; if (GET_MODE_SIZE (mode) == 8 && misalignment % 4 == 0) return true; - return default_builtin_support_vector_misalignment (mode, type, misalignment, + return default_builtin_support_vector_misalignment (mode, misalignment, is_packed, is_gather_scatter); } diff --git a/gcc/config/gcn/gcn.cc b/gcc/config/gcn/gcn.cc index f3b6efc40c9d..1e04074d78b7 100644 --- a/gcc/config/gcn/gcn.cc +++ b/gcc/config/gcn/gcn.cc @@ -5368,14 +5368,13 @@ gcn_preferred_vector_alignment (const_tree type) static bool gcn_vectorize_support_vector_misalignment (machine_mode ARG_UNUSED (mode), - const_tree ARG_UNUSED (type), int ARG_UNUSED (misalignment), bool is_packed, bool ARG_UNUSED (is_gather_scatter)) { /* All Flat and Global load instructions support arbitrary alignment, so the types and such are irrelevant (Buffer instructions are not used). */ - + /* Disallow packed accesses because expand attempts to take scalar subregs of vector registers, which is nonsense. Testcase: gfortran.dg/recursive_alloc_comp_4.f08 */ diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index 4d82fc8b6ec4..3fe8c766cc77 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -11058,7 +11058,6 @@ void loongarch_emit_swdivsf (rtx res, rtx a, rtx b, machine_mode mode) static bool loongarch_builtin_support_vector_misalignment (machine_mode mode, - const_tree type, int misalignment, bool is_packed, bool is_gather_scatter) @@ -11072,7 +11071,7 @@ loongarch_builtin_support_vector_misalignment (machine_mode mode, if (misalignment == -1) return false; } - return default_builtin_support_vector_misalignment (mode, type, misalignment, + return default_builtin_support_vector_misalignment (mode, misalignment, is_packed, is_gather_scatter); } diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index c81a2e4b4919..a30c9f1dd146 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -12659,12 +12659,11 @@ riscv_estimated_poly_value (poly_int64 val, /* Return true if the vector misalignment factor is supported by the target. */ bool -riscv_support_vector_misalignment (machine_mode mode, const_tree type, - int misalignment, bool is_packed, - bool is_gather_scatter) +riscv_support_vector_misalignment (machine_mode mode, int misalignment, + bool is_packed, bool is_gather_scatter) { /* IS_PACKED is true if the corresponding scalar element is not naturally - aligned. If the misalignment is unknown and the the access is packed + aligned. If the misalignment is unknown and the access is packed we defer to the default hook which will check if movmisalign is present. Movmisalign, in turn, depends on TARGET_VECTOR_MISALIGN_SUPPORTED. */ if (misalignment == DR_MISALIGNMENT_UNKNOWN) @@ -12676,12 +12675,12 @@ riscv_support_vector_misalignment (machine_mode mode, const_tree type, { /* If we know that misalignment is a multiple of the element size, we're good. */ - if (misalignment % TYPE_ALIGN_UNIT (type) == 0) + if (misalignment % (GET_MODE_UNIT_SIZE (mode)) == 0) return true; } /* Otherwise fall back to movmisalign again. */ - return default_builtin_support_vector_misalignment (mode, type, misalignment, + return default_builtin_support_vector_misalignment (mode, misalignment, is_packed, is_gather_scatter); } diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc index 1049c446c402..1d5cd25c0f08 100644 --- a/gcc/config/rs6000/rs6000.cc +++ b/gcc/config/rs6000/rs6000.cc @@ -4947,7 +4947,6 @@ rs6000_vector_alignment_reachable (const_tree type ATTRIBUTE_UNUSED, bool is_pac target. */ static bool rs6000_builtin_support_vector_misalignment (machine_mode mode, - const_tree type, int misalignment, bool is_packed, bool is_gather_scatter) @@ -4973,13 +4972,13 @@ rs6000_builtin_support_vector_misalignment (machine_mode mode, { /* Misalignment factor is unknown at compile time but we know it's word aligned. */ - if (rs6000_vector_alignment_reachable (type, is_packed)) - { - int element_size = TREE_INT_CST_LOW (TYPE_SIZE (type)); + if (rs6000_vector_alignment_reachable (NULL_TREE, is_packed)) + { + int element_size = GET_MODE_UNIT_BITSIZE (mode); - if (element_size == 64 || element_size == 32) - return true; - } + if (element_size == 64 || element_size == 32) + return true; + } return false; } diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc index 1a47f477dd3c..d65109026f2a 100644 --- a/gcc/config/s390/s390.cc +++ b/gcc/config/s390/s390.cc @@ -17503,7 +17503,6 @@ s390_preferred_simd_mode (scalar_mode mode) /* Our hardware does not require vectors to be strictly aligned. */ static bool s390_support_vector_misalignment (machine_mode mode ATTRIBUTE_UNUSED, - const_tree type ATTRIBUTE_UNUSED, int misalignment ATTRIBUTE_UNUSED, bool is_packed ATTRIBUTE_UNUSED, bool is_gather_scatter ATTRIBUTE_UNUSED) @@ -17511,7 +17510,7 @@ s390_support_vector_misalignment (machine_mode mode ATTRIBUTE_UNUSED, if (TARGET_VX) return true; - return default_builtin_support_vector_misalignment (mode, type, misalignment, + return default_builtin_support_vector_misalignment (mode, misalignment, is_packed, is_gather_scatter); } diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index 989e01fbd18a..930003725378 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -6397,14 +6397,14 @@ return type of the vectorized function shall be of vector type @var{vec_type_out} and the argument types should be @var{vec_type_in}. @end deftypefn -@deftypefn {Target Hook} bool TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT (machine_mode @var{mode}, const_tree @var{type}, int @var{misalignment}, bool @var{is_packed}, bool @var{is_gather_scatter}) +@deftypefn {Target Hook} bool TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT (machine_mode @var{mode}, int @var{misalignment}, bool @var{is_packed}, bool @var{is_gather_scatter}) This hook should return true if the target supports misaligned vector store/load of a specific factor denoted in the @var{misalignment} -parameter. The vector store/load should be of machine mode @var{mode} and -the elements in the vectors should be of type @var{type}. The -@var{is_packed} parameter is true if the misalignment is unknown and the -memory access is defined in a packed struct. @var{is_gather_scatter} is true -if the load/store is a gather or scatter. +parameter. The vector store/load should be of machine mode @var{mode}. +The @var{is_packed} parameter is true if the original memory access is +not naturally aligned. @var{is_gather_scatter} is true if the +load/store is a gather or scatter. In that case misalignment +denotes the misalignment of @var{mode}'s element mode. @end deftypefn @deftypefn {Target Hook} machine_mode TARGET_VECTORIZE_PREFERRED_SIMD_MODE (scalar_mode @var{mode}) diff --git a/gcc/target.def b/gcc/target.def index 3e58dcf54a98..31c7af1f8bcc 100644 --- a/gcc/target.def +++ b/gcc/target.def @@ -1925,13 +1925,13 @@ DEFHOOK (support_vector_misalignment, "This hook should return true if the target supports misaligned vector\n\ store/load of a specific factor denoted in the @var{misalignment}\n\ -parameter. The vector store/load should be of machine mode @var{mode} and\n\ -the elements in the vectors should be of type @var{type}. The\n\ -@var{is_packed} parameter is true if the misalignment is unknown and the\n\ -memory access is defined in a packed struct. @var{is_gather_scatter} is true\n\ -if the load/store is a gather or scatter.", +parameter. The vector store/load should be of machine mode @var{mode}.\n\ +The @var{is_packed} parameter is true if the original memory access is\n\ +not naturally aligned. @var{is_gather_scatter} is true if the\n\ +load/store is a gather or scatter. In that case misalignment\n\ +denotes the misalignment of @var{mode}'s element mode.", bool, - (machine_mode mode, const_tree type, int misalignment, bool is_packed, + (machine_mode mode, int misalignment, bool is_packed, bool is_gather_scatter), default_builtin_support_vector_misalignment) diff --git a/gcc/targhooks.cc b/gcc/targhooks.cc index 947e39aedc18..dfd46eeb8af8 100644 --- a/gcc/targhooks.cc +++ b/gcc/targhooks.cc @@ -1551,8 +1551,6 @@ default_builtin_vector_alignment_reachable (const_tree /*type*/, bool is_packed) is_packed is true if the memory access is defined in a packed struct. */ bool default_builtin_support_vector_misalignment (machine_mode mode, - const_tree type - ATTRIBUTE_UNUSED, int misalignment ATTRIBUTE_UNUSED, bool is_packed diff --git a/gcc/targhooks.h b/gcc/targhooks.h index 34c30d4af453..441206763451 100644 --- a/gcc/targhooks.h +++ b/gcc/targhooks.h @@ -113,7 +113,6 @@ extern poly_uint64 default_preferred_vector_alignment (const_tree); extern bool default_builtin_vector_alignment_reachable (const_tree, bool); extern bool default_builtin_support_vector_misalignment (machine_mode mode, - const_tree, int, bool, bool); extern machine_mode default_preferred_simd_mode (scalar_mode mode); extern machine_mode default_split_reduction (machine_mode); diff --git a/gcc/tree-vect-data-refs.cc b/gcc/tree-vect-data-refs.cc index c40a52059112..c7941108887e 100644 --- a/gcc/tree-vect-data-refs.cc +++ b/gcc/tree-vect-data-refs.cc @@ -6522,7 +6522,8 @@ vect_can_force_dr_alignment_p (const_tree decl, poly_uint64 alignment) alignment. If CHECK_ALIGNED_ACCESSES is TRUE, check if the access is supported even it is aligned, i.e., check if it is possible to vectorize it with different - alignment. If GS_INFO is passed we are dealing with a gather/scatter. */ + alignment. If IS_GATHER_SCATTER is true we are dealing with a + gather/scatter. */ enum dr_alignment_support vect_supportable_dr_alignment (vec_info *vinfo, dr_vec_info *dr_info, @@ -6636,11 +6637,13 @@ vect_supportable_dr_alignment (vec_info *vinfo, dr_vec_info *dr_info, } } - bool is_packed = false; - tree type = TREE_TYPE (DR_REF (dr)); - if (misalignment == DR_MISALIGNMENT_UNKNOWN) - is_packed = not_size_aligned (DR_REF (dr)); - if (targetm.vectorize.support_vector_misalignment (mode, type, misalignment, + bool is_packed = not_size_aligned (DR_REF (dr)); + if (misalignment == DR_MISALIGNMENT_UNKNOWN + && is_gather_scatter) + misalignment = (get_object_alignment (DR_REF (dr)) + % (GET_MODE_BITSIZE (GET_MODE_INNER (mode)))) + / BITS_PER_UNIT; + if (targetm.vectorize.support_vector_misalignment (mode, misalignment, is_packed, is_gather_scatter)) return dr_unaligned_supported; From e63cf4b130b86dd7dde1bf499d3d40faca10ea2e Mon Sep 17 00:00:00 2001 From: Prathamesh Kulkarni Date: Thu, 9 Oct 2025 07:07:24 +0000 Subject: [PATCH 172/216] PR81358: Enable automatic linking of libatomic. ChangeLog: PR driver/81358 * Makefile.def: Add no_atomic=true for libraries that don't depend on libatomic. * Makefile.tpl: Export TARGET_CONFIGDIRS and create rule to add dependencies for libatomic. * configure.ac: Add libatomic to bootstrap_target_libs. * Makefile.in: Regenerate. * configure: Regenerate. gcc/ChangeLog: PR driver/81358 * common.opt: New option -flink-libatomic. * gcc.cc (LINK_LIBATOMIC_SPEC): New macro. * config/alpha/linux.h (LINK_GCC_C_SEQUENCE_SPEC): Use LINK_LIBATOMIC_SPEC. * config/arm/uclinux-elf.h: Likewise. * config/arm/unknown-elf.h: Likewise. * config/avr/avrlibc.h: Likewise. * config/bfin/linux.h: Likewise. * config/darwin.h: Likewise. * config/gnu-user.h: Likewise. * config/lm32/uclinux-elf.h: Likewise. * config/rs6000/linux64.h: Likewise. * config/rs6000/rtems.h: Likewise. * config/sparc/sparc.h: Likewise. * doc/invoke.texi: Document -flink-libatomic. * configure.ac: Define TARGET_PROVIDES_LIBATOMIC. * configure: Regenerate. * config.in: Regenerate. * common.opt.urls: Regenerate. libatomic/ChangeLog: PR driver/81358 * Makefile.am: Pass -fno-link-libatomic. New rule all-local. * configure.ac: Assert that CFLAGS is set and pass -fno-link-libatomic. Use __libatomic_save_CFLAGS__ instead of save_CFLAGS. * Makefile.in: Regenerate. * configure: Regenerate. Signed-off-by: Prathamesh Kulkarni Co-authored-by: Matthew Malcolmson --- Makefile.def | 11 +- Makefile.in | 3279 +++++++++++++++++++++++++++++++++ Makefile.tpl | 17 + configure | 5 + configure.ac | 5 + gcc/common.opt | 4 + gcc/common.opt.urls | 3 + gcc/config.in | 6 + gcc/config/alpha/linux.h | 2 +- gcc/config/arm/uclinux-elf.h | 5 +- gcc/config/arm/unknown-elf.h | 2 +- gcc/config/avr/avrlibc.h | 2 +- gcc/config/bfin/linux.h | 2 +- gcc/config/darwin.h | 2 +- gcc/config/gnu-user.h | 3 +- gcc/config/lm32/uclinux-elf.h | 2 +- gcc/config/rs6000/linux64.h | 4 +- gcc/config/rs6000/rtems.h | 4 +- gcc/config/sparc/sparc.h | 4 +- gcc/configure | 6 + gcc/configure.ac | 5 + gcc/doc/invoke.texi | 8 +- gcc/gcc.cc | 7 + libatomic/Makefile.am | 15 +- libatomic/Makefile.in | 14 +- libatomic/configure | 37 +- libatomic/configure.ac | 33 +- 27 files changed, 3445 insertions(+), 42 deletions(-) diff --git a/Makefile.def b/Makefile.def index e5b95d7f705f..e7f33345aa82 100644 --- a/Makefile.def +++ b/Makefile.def @@ -650,14 +650,15 @@ dependencies = { module=all-m4; on=all-build-texinfo; }; // on libgcc and newlib/libgloss. lang_env_dependencies = { module=libitm; cxx=true; }; lang_env_dependencies = { module=libffi; cxx=true; }; -lang_env_dependencies = { module=newlib; no_c=true; }; -lang_env_dependencies = { module=libgloss; no_c=true; }; -lang_env_dependencies = { module=libgcc; no_gcc=true; no_c=true; }; +lang_env_dependencies = { module=newlib; no_c=true; no_atomic=true; }; +lang_env_dependencies = { module=libgloss; no_c=true; no_atomic=true; }; +lang_env_dependencies = { module=libgcc; no_gcc=true; no_c=true; no_atomic=true; }; // libiberty does not depend on newlib or libgloss because it must be // built newlib on some targets (e.g. Cygwin). It still needs // a dependency on libgcc for native targets to configure. -lang_env_dependencies = { module=libiberty; no_c=true; }; -lang_env_dependencies = { module=libgcobol; cxx=true; }; +lang_env_dependencies = { module=libiberty; no_c=true; no_atomic=true; }; +lang_env_dependencies = { module=libgcobol; cxx=true; no_atomic=true; }; +lang_env_dependencies = { module=libatomic; no_atomic=true; }; dependencies = { module=configure-target-fastjar; on=configure-target-zlib; }; dependencies = { module=all-target-fastjar; on=all-target-zlib; }; diff --git a/Makefile.in b/Makefile.in index 621e8dedc099..8ac778a0e09c 100644 --- a/Makefile.in +++ b/Makefile.in @@ -243,6 +243,7 @@ HOST_EXPORTS = \ GMPINC="$(HOST_GMPINC)"; export GMPINC; \ ISLLIBS="$(HOST_ISLLIBS)"; export ISLLIBS; \ ISLINC="$(HOST_ISLINC)"; export ISLINC; \ + TARGET_CONFIGDIRS="$(TARGET_CONFIGDIRS)"; export TARGET_CONFIGDIRS; \ XGCC_FLAGS_FOR_TARGET="$(XGCC_FLAGS_FOR_TARGET)"; export XGCC_FLAGS_FOR_TARGET; \ @if gcc-bootstrap $(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \ @@ -69399,54 +69400,3332 @@ configure-target-libgcobol: maybe-all-target-libgcc configure-target-libstdc++-v3: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libssp: maybe-all-stage1-target-libatomic +configure-stage2-target-libssp: maybe-all-stage2-target-libatomic +configure-stage3-target-libssp: maybe-all-stage3-target-libatomic +configure-stage4-target-libssp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libssp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libssp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libssp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libssp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libssp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libquadmath: maybe-all-stage1-target-libatomic +configure-stage2-target-libquadmath: maybe-all-stage2-target-libatomic +configure-stage3-target-libquadmath: maybe-all-stage3-target-libatomic +configure-stage4-target-libquadmath: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libquadmath: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libquadmath: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libquadmath: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libquadmath: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libquadmath: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgfortran: maybe-all-stage1-target-libatomic +configure-stage2-target-libgfortran: maybe-all-stage2-target-libatomic +configure-stage3-target-libgfortran: maybe-all-stage3-target-libatomic +configure-stage4-target-libgfortran: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgfortran: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgfortran: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgfortran: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgfortran: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgfortran: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libobjc: maybe-all-stage1-target-libatomic +configure-stage2-target-libobjc: maybe-all-stage2-target-libatomic +configure-stage3-target-libobjc: maybe-all-stage3-target-libatomic +configure-stage4-target-libobjc: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libobjc: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libobjc: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libobjc: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libobjc: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libobjc: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgo: maybe-all-stage1-target-libatomic +configure-stage2-target-libgo: maybe-all-stage2-target-libatomic +configure-stage3-target-libgo: maybe-all-stage3-target-libatomic +configure-stage4-target-libgo: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgo: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgo: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgo: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgo: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgo: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libtermcap: maybe-all-stage1-target-libatomic +configure-stage2-target-libtermcap: maybe-all-stage2-target-libatomic +configure-stage3-target-libtermcap: maybe-all-stage3-target-libatomic +configure-stage4-target-libtermcap: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libtermcap: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libtermcap: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libtermcap: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libtermcap: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libtermcap: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-winsup: maybe-all-stage1-target-libatomic +configure-stage2-target-winsup: maybe-all-stage2-target-libatomic +configure-stage3-target-winsup: maybe-all-stage3-target-libatomic +configure-stage4-target-winsup: maybe-all-stage4-target-libatomic +configure-stageprofile-target-winsup: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-winsup: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-winsup: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-winsup: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-winsup: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libffi: maybe-all-stage1-target-libatomic +configure-stage2-target-libffi: maybe-all-stage2-target-libatomic +configure-stage3-target-libffi: maybe-all-stage3-target-libatomic +configure-stage4-target-libffi: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libffi: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libffi: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libffi: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libffi: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libffi: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-rda: maybe-all-stage1-target-libatomic +configure-stage2-target-rda: maybe-all-stage2-target-libatomic +configure-stage3-target-rda: maybe-all-stage3-target-libatomic +configure-stage4-target-rda: maybe-all-stage4-target-libatomic +configure-stageprofile-target-rda: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-rda: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-rda: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-rda: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-rda: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libada: maybe-all-stage1-target-libatomic +configure-stage2-target-libada: maybe-all-stage2-target-libatomic +configure-stage3-target-libada: maybe-all-stage3-target-libatomic +configure-stage4-target-libada: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libada: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libada: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libada: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libada: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libada: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgm2: maybe-all-stage1-target-libatomic +configure-stage2-target-libgm2: maybe-all-stage2-target-libatomic +configure-stage3-target-libgm2: maybe-all-stage3-target-libatomic +configure-stage4-target-libgm2: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgm2: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgm2: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgm2: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgm2: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgm2: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libitm: maybe-all-stage1-target-libatomic +configure-stage2-target-libitm: maybe-all-stage2-target-libatomic +configure-stage3-target-libitm: maybe-all-stage3-target-libatomic +configure-stage4-target-libitm: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libitm: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libitm: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libitm: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libitm: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libitm: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgrust: maybe-all-stage1-target-libatomic +configure-stage2-target-libgrust: maybe-all-stage2-target-libatomic +configure-stage3-target-libgrust: maybe-all-stage3-target-libatomic +configure-stage4-target-libgrust: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgrust: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgrust: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgrust: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgrust: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgrust: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libsanitizer: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libssp: maybe-all-stage1-target-libatomic +configure-stage2-target-libssp: maybe-all-stage2-target-libatomic +configure-stage3-target-libssp: maybe-all-stage3-target-libatomic +configure-stage4-target-libssp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libssp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libssp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libssp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libssp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libssp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libquadmath: maybe-all-stage1-target-libatomic +configure-stage2-target-libquadmath: maybe-all-stage2-target-libatomic +configure-stage3-target-libquadmath: maybe-all-stage3-target-libatomic +configure-stage4-target-libquadmath: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libquadmath: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libquadmath: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libquadmath: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libquadmath: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libquadmath: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgfortran: maybe-all-stage1-target-libatomic +configure-stage2-target-libgfortran: maybe-all-stage2-target-libatomic +configure-stage3-target-libgfortran: maybe-all-stage3-target-libatomic +configure-stage4-target-libgfortran: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgfortran: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgfortran: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgfortran: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgfortran: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgfortran: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libobjc: maybe-all-stage1-target-libatomic +configure-stage2-target-libobjc: maybe-all-stage2-target-libatomic +configure-stage3-target-libobjc: maybe-all-stage3-target-libatomic +configure-stage4-target-libobjc: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libobjc: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libobjc: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libobjc: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libobjc: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libobjc: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgo: maybe-all-stage1-target-libatomic +configure-stage2-target-libgo: maybe-all-stage2-target-libatomic +configure-stage3-target-libgo: maybe-all-stage3-target-libatomic +configure-stage4-target-libgo: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgo: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgo: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgo: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgo: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgo: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libtermcap: maybe-all-stage1-target-libatomic +configure-stage2-target-libtermcap: maybe-all-stage2-target-libatomic +configure-stage3-target-libtermcap: maybe-all-stage3-target-libatomic +configure-stage4-target-libtermcap: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libtermcap: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libtermcap: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libtermcap: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libtermcap: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libtermcap: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-winsup: maybe-all-stage1-target-libatomic +configure-stage2-target-winsup: maybe-all-stage2-target-libatomic +configure-stage3-target-winsup: maybe-all-stage3-target-libatomic +configure-stage4-target-winsup: maybe-all-stage4-target-libatomic +configure-stageprofile-target-winsup: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-winsup: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-winsup: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-winsup: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-winsup: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libffi: maybe-all-stage1-target-libatomic +configure-stage2-target-libffi: maybe-all-stage2-target-libatomic +configure-stage3-target-libffi: maybe-all-stage3-target-libatomic +configure-stage4-target-libffi: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libffi: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libffi: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libffi: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libffi: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libffi: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-rda: maybe-all-stage1-target-libatomic +configure-stage2-target-rda: maybe-all-stage2-target-libatomic +configure-stage3-target-rda: maybe-all-stage3-target-libatomic +configure-stage4-target-rda: maybe-all-stage4-target-libatomic +configure-stageprofile-target-rda: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-rda: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-rda: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-rda: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-rda: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libada: maybe-all-stage1-target-libatomic +configure-stage2-target-libada: maybe-all-stage2-target-libatomic +configure-stage3-target-libada: maybe-all-stage3-target-libatomic +configure-stage4-target-libada: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libada: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libada: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libada: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libada: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libada: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgm2: maybe-all-stage1-target-libatomic +configure-stage2-target-libgm2: maybe-all-stage2-target-libatomic +configure-stage3-target-libgm2: maybe-all-stage3-target-libatomic +configure-stage4-target-libgm2: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgm2: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgm2: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgm2: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgm2: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgm2: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libitm: maybe-all-stage1-target-libatomic +configure-stage2-target-libitm: maybe-all-stage2-target-libatomic +configure-stage3-target-libitm: maybe-all-stage3-target-libatomic +configure-stage4-target-libitm: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libitm: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libitm: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libitm: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libitm: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libitm: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgrust: maybe-all-stage1-target-libatomic +configure-stage2-target-libgrust: maybe-all-stage2-target-libatomic +configure-stage3-target-libgrust: maybe-all-stage3-target-libatomic +configure-stage4-target-libgrust: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgrust: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgrust: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgrust: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgrust: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgrust: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libvtv: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libssp: maybe-all-stage1-target-libatomic +configure-stage2-target-libssp: maybe-all-stage2-target-libatomic +configure-stage3-target-libssp: maybe-all-stage3-target-libatomic +configure-stage4-target-libssp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libssp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libssp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libssp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libssp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libssp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libquadmath: maybe-all-stage1-target-libatomic +configure-stage2-target-libquadmath: maybe-all-stage2-target-libatomic +configure-stage3-target-libquadmath: maybe-all-stage3-target-libatomic +configure-stage4-target-libquadmath: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libquadmath: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libquadmath: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libquadmath: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libquadmath: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libquadmath: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgfortran: maybe-all-stage1-target-libatomic +configure-stage2-target-libgfortran: maybe-all-stage2-target-libatomic +configure-stage3-target-libgfortran: maybe-all-stage3-target-libatomic +configure-stage4-target-libgfortran: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgfortran: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgfortran: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgfortran: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgfortran: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgfortran: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libobjc: maybe-all-stage1-target-libatomic +configure-stage2-target-libobjc: maybe-all-stage2-target-libatomic +configure-stage3-target-libobjc: maybe-all-stage3-target-libatomic +configure-stage4-target-libobjc: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libobjc: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libobjc: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libobjc: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libobjc: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libobjc: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgo: maybe-all-stage1-target-libatomic +configure-stage2-target-libgo: maybe-all-stage2-target-libatomic +configure-stage3-target-libgo: maybe-all-stage3-target-libatomic +configure-stage4-target-libgo: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgo: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgo: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgo: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgo: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgo: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libtermcap: maybe-all-stage1-target-libatomic +configure-stage2-target-libtermcap: maybe-all-stage2-target-libatomic +configure-stage3-target-libtermcap: maybe-all-stage3-target-libatomic +configure-stage4-target-libtermcap: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libtermcap: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libtermcap: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libtermcap: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libtermcap: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libtermcap: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-winsup: maybe-all-stage1-target-libatomic +configure-stage2-target-winsup: maybe-all-stage2-target-libatomic +configure-stage3-target-winsup: maybe-all-stage3-target-libatomic +configure-stage4-target-winsup: maybe-all-stage4-target-libatomic +configure-stageprofile-target-winsup: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-winsup: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-winsup: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-winsup: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-winsup: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libffi: maybe-all-stage1-target-libatomic +configure-stage2-target-libffi: maybe-all-stage2-target-libatomic +configure-stage3-target-libffi: maybe-all-stage3-target-libatomic +configure-stage4-target-libffi: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libffi: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libffi: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libffi: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libffi: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libffi: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-rda: maybe-all-stage1-target-libatomic +configure-stage2-target-rda: maybe-all-stage2-target-libatomic +configure-stage3-target-rda: maybe-all-stage3-target-libatomic +configure-stage4-target-rda: maybe-all-stage4-target-libatomic +configure-stageprofile-target-rda: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-rda: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-rda: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-rda: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-rda: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libada: maybe-all-stage1-target-libatomic +configure-stage2-target-libada: maybe-all-stage2-target-libatomic +configure-stage3-target-libada: maybe-all-stage3-target-libatomic +configure-stage4-target-libada: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libada: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libada: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libada: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libada: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libada: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgm2: maybe-all-stage1-target-libatomic +configure-stage2-target-libgm2: maybe-all-stage2-target-libatomic +configure-stage3-target-libgm2: maybe-all-stage3-target-libatomic +configure-stage4-target-libgm2: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgm2: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgm2: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgm2: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgm2: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgm2: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libitm: maybe-all-stage1-target-libatomic +configure-stage2-target-libitm: maybe-all-stage2-target-libatomic +configure-stage3-target-libitm: maybe-all-stage3-target-libatomic +configure-stage4-target-libitm: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libitm: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libitm: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libitm: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libitm: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libitm: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgrust: maybe-all-stage1-target-libatomic +configure-stage2-target-libgrust: maybe-all-stage2-target-libatomic +configure-stage3-target-libgrust: maybe-all-stage3-target-libatomic +configure-stage4-target-libgrust: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgrust: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgrust: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgrust: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgrust: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgrust: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libssp: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + + +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libssp: maybe-all-stage1-target-libatomic +configure-stage2-target-libssp: maybe-all-stage2-target-libatomic +configure-stage3-target-libssp: maybe-all-stage3-target-libatomic +configure-stage4-target-libssp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libssp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libssp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libssp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libssp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libssp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libquadmath: maybe-all-stage1-target-libatomic +configure-stage2-target-libquadmath: maybe-all-stage2-target-libatomic +configure-stage3-target-libquadmath: maybe-all-stage3-target-libatomic +configure-stage4-target-libquadmath: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libquadmath: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libquadmath: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libquadmath: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libquadmath: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libquadmath: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgfortran: maybe-all-stage1-target-libatomic +configure-stage2-target-libgfortran: maybe-all-stage2-target-libatomic +configure-stage3-target-libgfortran: maybe-all-stage3-target-libatomic +configure-stage4-target-libgfortran: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgfortran: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgfortran: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgfortran: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgfortran: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgfortran: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libobjc: maybe-all-stage1-target-libatomic +configure-stage2-target-libobjc: maybe-all-stage2-target-libatomic +configure-stage3-target-libobjc: maybe-all-stage3-target-libatomic +configure-stage4-target-libobjc: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libobjc: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libobjc: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libobjc: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libobjc: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libobjc: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgo: maybe-all-stage1-target-libatomic +configure-stage2-target-libgo: maybe-all-stage2-target-libatomic +configure-stage3-target-libgo: maybe-all-stage3-target-libatomic +configure-stage4-target-libgo: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgo: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgo: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgo: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgo: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgo: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libtermcap: maybe-all-stage1-target-libatomic +configure-stage2-target-libtermcap: maybe-all-stage2-target-libatomic +configure-stage3-target-libtermcap: maybe-all-stage3-target-libatomic +configure-stage4-target-libtermcap: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libtermcap: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libtermcap: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libtermcap: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libtermcap: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libtermcap: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-winsup: maybe-all-stage1-target-libatomic +configure-stage2-target-winsup: maybe-all-stage2-target-libatomic +configure-stage3-target-winsup: maybe-all-stage3-target-libatomic +configure-stage4-target-winsup: maybe-all-stage4-target-libatomic +configure-stageprofile-target-winsup: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-winsup: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-winsup: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-winsup: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-winsup: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libffi: maybe-all-stage1-target-libatomic +configure-stage2-target-libffi: maybe-all-stage2-target-libatomic +configure-stage3-target-libffi: maybe-all-stage3-target-libatomic +configure-stage4-target-libffi: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libffi: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libffi: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libffi: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libffi: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libffi: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-rda: maybe-all-stage1-target-libatomic +configure-stage2-target-rda: maybe-all-stage2-target-libatomic +configure-stage3-target-rda: maybe-all-stage3-target-libatomic +configure-stage4-target-rda: maybe-all-stage4-target-libatomic +configure-stageprofile-target-rda: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-rda: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-rda: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-rda: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-rda: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libada: maybe-all-stage1-target-libatomic +configure-stage2-target-libada: maybe-all-stage2-target-libatomic +configure-stage3-target-libada: maybe-all-stage3-target-libatomic +configure-stage4-target-libada: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libada: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libada: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libada: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libada: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libada: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgm2: maybe-all-stage1-target-libatomic +configure-stage2-target-libgm2: maybe-all-stage2-target-libatomic +configure-stage3-target-libgm2: maybe-all-stage3-target-libatomic +configure-stage4-target-libgm2: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgm2: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgm2: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgm2: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgm2: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgm2: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libitm: maybe-all-stage1-target-libatomic +configure-stage2-target-libitm: maybe-all-stage2-target-libatomic +configure-stage3-target-libitm: maybe-all-stage3-target-libatomic +configure-stage4-target-libitm: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libitm: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libitm: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libitm: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libitm: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libitm: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgrust: maybe-all-stage1-target-libatomic +configure-stage2-target-libgrust: maybe-all-stage2-target-libatomic +configure-stage3-target-libgrust: maybe-all-stage3-target-libatomic +configure-stage4-target-libgrust: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgrust: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgrust: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgrust: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgrust: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgrust: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap configure-target-libbacktrace: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libssp: maybe-all-stage1-target-libatomic +configure-stage2-target-libssp: maybe-all-stage2-target-libatomic +configure-stage3-target-libssp: maybe-all-stage3-target-libatomic +configure-stage4-target-libssp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libssp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libssp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libssp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libssp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libssp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libquadmath: maybe-all-stage1-target-libatomic +configure-stage2-target-libquadmath: maybe-all-stage2-target-libatomic +configure-stage3-target-libquadmath: maybe-all-stage3-target-libatomic +configure-stage4-target-libquadmath: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libquadmath: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libquadmath: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libquadmath: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libquadmath: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libquadmath: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgfortran: maybe-all-stage1-target-libatomic +configure-stage2-target-libgfortran: maybe-all-stage2-target-libatomic +configure-stage3-target-libgfortran: maybe-all-stage3-target-libatomic +configure-stage4-target-libgfortran: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgfortran: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgfortran: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgfortran: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgfortran: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgfortran: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libobjc: maybe-all-stage1-target-libatomic +configure-stage2-target-libobjc: maybe-all-stage2-target-libatomic +configure-stage3-target-libobjc: maybe-all-stage3-target-libatomic +configure-stage4-target-libobjc: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libobjc: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libobjc: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libobjc: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libobjc: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libobjc: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgo: maybe-all-stage1-target-libatomic +configure-stage2-target-libgo: maybe-all-stage2-target-libatomic +configure-stage3-target-libgo: maybe-all-stage3-target-libatomic +configure-stage4-target-libgo: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgo: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgo: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgo: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgo: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgo: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libtermcap: maybe-all-stage1-target-libatomic +configure-stage2-target-libtermcap: maybe-all-stage2-target-libatomic +configure-stage3-target-libtermcap: maybe-all-stage3-target-libatomic +configure-stage4-target-libtermcap: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libtermcap: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libtermcap: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libtermcap: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libtermcap: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libtermcap: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-winsup: maybe-all-stage1-target-libatomic +configure-stage2-target-winsup: maybe-all-stage2-target-libatomic +configure-stage3-target-winsup: maybe-all-stage3-target-libatomic +configure-stage4-target-winsup: maybe-all-stage4-target-libatomic +configure-stageprofile-target-winsup: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-winsup: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-winsup: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-winsup: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-winsup: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libffi: maybe-all-stage1-target-libatomic +configure-stage2-target-libffi: maybe-all-stage2-target-libatomic +configure-stage3-target-libffi: maybe-all-stage3-target-libatomic +configure-stage4-target-libffi: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libffi: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libffi: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libffi: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libffi: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libffi: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-rda: maybe-all-stage1-target-libatomic +configure-stage2-target-rda: maybe-all-stage2-target-libatomic +configure-stage3-target-rda: maybe-all-stage3-target-libatomic +configure-stage4-target-rda: maybe-all-stage4-target-libatomic +configure-stageprofile-target-rda: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-rda: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-rda: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-rda: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-rda: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libada: maybe-all-stage1-target-libatomic +configure-stage2-target-libada: maybe-all-stage2-target-libatomic +configure-stage3-target-libada: maybe-all-stage3-target-libatomic +configure-stage4-target-libada: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libada: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libada: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libada: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libada: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libada: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgm2: maybe-all-stage1-target-libatomic +configure-stage2-target-libgm2: maybe-all-stage2-target-libatomic +configure-stage3-target-libgm2: maybe-all-stage3-target-libatomic +configure-stage4-target-libgm2: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgm2: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgm2: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgm2: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgm2: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgm2: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libitm: maybe-all-stage1-target-libatomic +configure-stage2-target-libitm: maybe-all-stage2-target-libatomic +configure-stage3-target-libitm: maybe-all-stage3-target-libatomic +configure-stage4-target-libitm: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libitm: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libitm: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libitm: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libitm: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libitm: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgrust: maybe-all-stage1-target-libatomic +configure-stage2-target-libgrust: maybe-all-stage2-target-libatomic +configure-stage3-target-libgrust: maybe-all-stage3-target-libatomic +configure-stage4-target-libgrust: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgrust: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgrust: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgrust: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgrust: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgrust: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libquadmath: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libgfortran: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libobjc: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libgo: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libphobos: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libssp: maybe-all-stage1-target-libatomic +configure-stage2-target-libssp: maybe-all-stage2-target-libatomic +configure-stage3-target-libssp: maybe-all-stage3-target-libatomic +configure-stage4-target-libssp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libssp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libssp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libssp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libssp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libssp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libquadmath: maybe-all-stage1-target-libatomic +configure-stage2-target-libquadmath: maybe-all-stage2-target-libatomic +configure-stage3-target-libquadmath: maybe-all-stage3-target-libatomic +configure-stage4-target-libquadmath: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libquadmath: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libquadmath: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libquadmath: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libquadmath: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libquadmath: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgfortran: maybe-all-stage1-target-libatomic +configure-stage2-target-libgfortran: maybe-all-stage2-target-libatomic +configure-stage3-target-libgfortran: maybe-all-stage3-target-libatomic +configure-stage4-target-libgfortran: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgfortran: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgfortran: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgfortran: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgfortran: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgfortran: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libobjc: maybe-all-stage1-target-libatomic +configure-stage2-target-libobjc: maybe-all-stage2-target-libatomic +configure-stage3-target-libobjc: maybe-all-stage3-target-libatomic +configure-stage4-target-libobjc: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libobjc: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libobjc: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libobjc: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libobjc: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libobjc: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgo: maybe-all-stage1-target-libatomic +configure-stage2-target-libgo: maybe-all-stage2-target-libatomic +configure-stage3-target-libgo: maybe-all-stage3-target-libatomic +configure-stage4-target-libgo: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgo: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgo: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgo: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgo: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgo: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libtermcap: maybe-all-stage1-target-libatomic +configure-stage2-target-libtermcap: maybe-all-stage2-target-libatomic +configure-stage3-target-libtermcap: maybe-all-stage3-target-libatomic +configure-stage4-target-libtermcap: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libtermcap: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libtermcap: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libtermcap: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libtermcap: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libtermcap: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-winsup: maybe-all-stage1-target-libatomic +configure-stage2-target-winsup: maybe-all-stage2-target-libatomic +configure-stage3-target-winsup: maybe-all-stage3-target-libatomic +configure-stage4-target-winsup: maybe-all-stage4-target-libatomic +configure-stageprofile-target-winsup: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-winsup: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-winsup: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-winsup: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-winsup: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libffi: maybe-all-stage1-target-libatomic +configure-stage2-target-libffi: maybe-all-stage2-target-libatomic +configure-stage3-target-libffi: maybe-all-stage3-target-libatomic +configure-stage4-target-libffi: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libffi: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libffi: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libffi: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libffi: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libffi: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-rda: maybe-all-stage1-target-libatomic +configure-stage2-target-rda: maybe-all-stage2-target-libatomic +configure-stage3-target-rda: maybe-all-stage3-target-libatomic +configure-stage4-target-rda: maybe-all-stage4-target-libatomic +configure-stageprofile-target-rda: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-rda: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-rda: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-rda: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-rda: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libada: maybe-all-stage1-target-libatomic +configure-stage2-target-libada: maybe-all-stage2-target-libatomic +configure-stage3-target-libada: maybe-all-stage3-target-libatomic +configure-stage4-target-libada: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libada: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libada: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libada: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libada: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libada: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgm2: maybe-all-stage1-target-libatomic +configure-stage2-target-libgm2: maybe-all-stage2-target-libatomic +configure-stage3-target-libgm2: maybe-all-stage3-target-libatomic +configure-stage4-target-libgm2: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgm2: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgm2: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgm2: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgm2: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgm2: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libitm: maybe-all-stage1-target-libatomic +configure-stage2-target-libitm: maybe-all-stage2-target-libatomic +configure-stage3-target-libitm: maybe-all-stage3-target-libatomic +configure-stage4-target-libitm: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libitm: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libitm: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libitm: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libitm: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libitm: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgrust: maybe-all-stage1-target-libatomic +configure-stage2-target-libgrust: maybe-all-stage2-target-libatomic +configure-stage3-target-libgrust: maybe-all-stage3-target-libatomic +configure-stage4-target-libgrust: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgrust: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgrust: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgrust: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgrust: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgrust: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libtermcap: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-winsup: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + + +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap configure-target-libffi: maybe-all-target-newlib maybe-all-target-libgloss configure-target-libffi: maybe-all-target-libstdc++-v3 +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-zlib: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libssp: maybe-all-stage1-target-libatomic +configure-stage2-target-libssp: maybe-all-stage2-target-libatomic +configure-stage3-target-libssp: maybe-all-stage3-target-libatomic +configure-stage4-target-libssp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libssp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libssp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libssp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libssp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libssp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libquadmath: maybe-all-stage1-target-libatomic +configure-stage2-target-libquadmath: maybe-all-stage2-target-libatomic +configure-stage3-target-libquadmath: maybe-all-stage3-target-libatomic +configure-stage4-target-libquadmath: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libquadmath: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libquadmath: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libquadmath: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libquadmath: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libquadmath: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgfortran: maybe-all-stage1-target-libatomic +configure-stage2-target-libgfortran: maybe-all-stage2-target-libatomic +configure-stage3-target-libgfortran: maybe-all-stage3-target-libatomic +configure-stage4-target-libgfortran: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgfortran: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgfortran: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgfortran: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgfortran: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgfortran: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libobjc: maybe-all-stage1-target-libatomic +configure-stage2-target-libobjc: maybe-all-stage2-target-libatomic +configure-stage3-target-libobjc: maybe-all-stage3-target-libatomic +configure-stage4-target-libobjc: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libobjc: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libobjc: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libobjc: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libobjc: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libobjc: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgo: maybe-all-stage1-target-libatomic +configure-stage2-target-libgo: maybe-all-stage2-target-libatomic +configure-stage3-target-libgo: maybe-all-stage3-target-libatomic +configure-stage4-target-libgo: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgo: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgo: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgo: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgo: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgo: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libtermcap: maybe-all-stage1-target-libatomic +configure-stage2-target-libtermcap: maybe-all-stage2-target-libatomic +configure-stage3-target-libtermcap: maybe-all-stage3-target-libatomic +configure-stage4-target-libtermcap: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libtermcap: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libtermcap: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libtermcap: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libtermcap: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libtermcap: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-winsup: maybe-all-stage1-target-libatomic +configure-stage2-target-winsup: maybe-all-stage2-target-libatomic +configure-stage3-target-winsup: maybe-all-stage3-target-libatomic +configure-stage4-target-winsup: maybe-all-stage4-target-libatomic +configure-stageprofile-target-winsup: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-winsup: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-winsup: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-winsup: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-winsup: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libffi: maybe-all-stage1-target-libatomic +configure-stage2-target-libffi: maybe-all-stage2-target-libatomic +configure-stage3-target-libffi: maybe-all-stage3-target-libatomic +configure-stage4-target-libffi: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libffi: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libffi: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libffi: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libffi: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libffi: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-rda: maybe-all-stage1-target-libatomic +configure-stage2-target-rda: maybe-all-stage2-target-libatomic +configure-stage3-target-rda: maybe-all-stage3-target-libatomic +configure-stage4-target-rda: maybe-all-stage4-target-libatomic +configure-stageprofile-target-rda: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-rda: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-rda: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-rda: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-rda: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libada: maybe-all-stage1-target-libatomic +configure-stage2-target-libada: maybe-all-stage2-target-libatomic +configure-stage3-target-libada: maybe-all-stage3-target-libatomic +configure-stage4-target-libada: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libada: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libada: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libada: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libada: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libada: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgm2: maybe-all-stage1-target-libatomic +configure-stage2-target-libgm2: maybe-all-stage2-target-libatomic +configure-stage3-target-libgm2: maybe-all-stage3-target-libatomic +configure-stage4-target-libgm2: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgm2: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgm2: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgm2: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgm2: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgm2: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libitm: maybe-all-stage1-target-libatomic +configure-stage2-target-libitm: maybe-all-stage2-target-libatomic +configure-stage3-target-libitm: maybe-all-stage3-target-libatomic +configure-stage4-target-libitm: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libitm: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libitm: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libitm: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libitm: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libitm: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgrust: maybe-all-stage1-target-libatomic +configure-stage2-target-libgrust: maybe-all-stage2-target-libatomic +configure-stage3-target-libgrust: maybe-all-stage3-target-libatomic +configure-stage4-target-libgrust: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgrust: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgrust: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgrust: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgrust: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgrust: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-rda: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libada: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libgm2: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libgomp: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libssp: maybe-all-stage1-target-libatomic +configure-stage2-target-libssp: maybe-all-stage2-target-libatomic +configure-stage3-target-libssp: maybe-all-stage3-target-libatomic +configure-stage4-target-libssp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libssp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libssp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libssp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libssp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libssp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libquadmath: maybe-all-stage1-target-libatomic +configure-stage2-target-libquadmath: maybe-all-stage2-target-libatomic +configure-stage3-target-libquadmath: maybe-all-stage3-target-libatomic +configure-stage4-target-libquadmath: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libquadmath: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libquadmath: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libquadmath: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libquadmath: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libquadmath: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgfortran: maybe-all-stage1-target-libatomic +configure-stage2-target-libgfortran: maybe-all-stage2-target-libatomic +configure-stage3-target-libgfortran: maybe-all-stage3-target-libatomic +configure-stage4-target-libgfortran: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgfortran: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgfortran: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgfortran: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgfortran: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgfortran: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libobjc: maybe-all-stage1-target-libatomic +configure-stage2-target-libobjc: maybe-all-stage2-target-libatomic +configure-stage3-target-libobjc: maybe-all-stage3-target-libatomic +configure-stage4-target-libobjc: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libobjc: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libobjc: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libobjc: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libobjc: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libobjc: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgo: maybe-all-stage1-target-libatomic +configure-stage2-target-libgo: maybe-all-stage2-target-libatomic +configure-stage3-target-libgo: maybe-all-stage3-target-libatomic +configure-stage4-target-libgo: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgo: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgo: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgo: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgo: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgo: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libtermcap: maybe-all-stage1-target-libatomic +configure-stage2-target-libtermcap: maybe-all-stage2-target-libatomic +configure-stage3-target-libtermcap: maybe-all-stage3-target-libatomic +configure-stage4-target-libtermcap: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libtermcap: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libtermcap: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libtermcap: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libtermcap: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libtermcap: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-winsup: maybe-all-stage1-target-libatomic +configure-stage2-target-winsup: maybe-all-stage2-target-libatomic +configure-stage3-target-winsup: maybe-all-stage3-target-libatomic +configure-stage4-target-winsup: maybe-all-stage4-target-libatomic +configure-stageprofile-target-winsup: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-winsup: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-winsup: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-winsup: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-winsup: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libffi: maybe-all-stage1-target-libatomic +configure-stage2-target-libffi: maybe-all-stage2-target-libatomic +configure-stage3-target-libffi: maybe-all-stage3-target-libatomic +configure-stage4-target-libffi: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libffi: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libffi: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libffi: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libffi: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libffi: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-rda: maybe-all-stage1-target-libatomic +configure-stage2-target-rda: maybe-all-stage2-target-libatomic +configure-stage3-target-rda: maybe-all-stage3-target-libatomic +configure-stage4-target-rda: maybe-all-stage4-target-libatomic +configure-stageprofile-target-rda: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-rda: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-rda: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-rda: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-rda: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libada: maybe-all-stage1-target-libatomic +configure-stage2-target-libada: maybe-all-stage2-target-libatomic +configure-stage3-target-libada: maybe-all-stage3-target-libatomic +configure-stage4-target-libada: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libada: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libada: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libada: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libada: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libada: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgm2: maybe-all-stage1-target-libatomic +configure-stage2-target-libgm2: maybe-all-stage2-target-libatomic +configure-stage3-target-libgm2: maybe-all-stage3-target-libatomic +configure-stage4-target-libgm2: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgm2: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgm2: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgm2: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgm2: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgm2: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libitm: maybe-all-stage1-target-libatomic +configure-stage2-target-libitm: maybe-all-stage2-target-libatomic +configure-stage3-target-libitm: maybe-all-stage3-target-libatomic +configure-stage4-target-libitm: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libitm: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libitm: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libitm: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libitm: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libitm: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgrust: maybe-all-stage1-target-libatomic +configure-stage2-target-libgrust: maybe-all-stage2-target-libatomic +configure-stage3-target-libgrust: maybe-all-stage3-target-libatomic +configure-stage4-target-libgrust: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgrust: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgrust: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgrust: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgrust: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgrust: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libitm: maybe-all-target-newlib maybe-all-target-libgloss configure-target-libitm: maybe-all-target-libstdc++-v3 +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libatomic: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libssp: maybe-all-stage1-target-libatomic +configure-stage2-target-libssp: maybe-all-stage2-target-libatomic +configure-stage3-target-libssp: maybe-all-stage3-target-libatomic +configure-stage4-target-libssp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libssp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libssp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libssp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libssp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libssp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libquadmath: maybe-all-stage1-target-libatomic +configure-stage2-target-libquadmath: maybe-all-stage2-target-libatomic +configure-stage3-target-libquadmath: maybe-all-stage3-target-libatomic +configure-stage4-target-libquadmath: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libquadmath: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libquadmath: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libquadmath: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libquadmath: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libquadmath: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgfortran: maybe-all-stage1-target-libatomic +configure-stage2-target-libgfortran: maybe-all-stage2-target-libatomic +configure-stage3-target-libgfortran: maybe-all-stage3-target-libatomic +configure-stage4-target-libgfortran: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgfortran: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgfortran: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgfortran: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgfortran: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgfortran: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libobjc: maybe-all-stage1-target-libatomic +configure-stage2-target-libobjc: maybe-all-stage2-target-libatomic +configure-stage3-target-libobjc: maybe-all-stage3-target-libatomic +configure-stage4-target-libobjc: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libobjc: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libobjc: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libobjc: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libobjc: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libobjc: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgo: maybe-all-stage1-target-libatomic +configure-stage2-target-libgo: maybe-all-stage2-target-libatomic +configure-stage3-target-libgo: maybe-all-stage3-target-libatomic +configure-stage4-target-libgo: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgo: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgo: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgo: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgo: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgo: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libtermcap: maybe-all-stage1-target-libatomic +configure-stage2-target-libtermcap: maybe-all-stage2-target-libatomic +configure-stage3-target-libtermcap: maybe-all-stage3-target-libatomic +configure-stage4-target-libtermcap: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libtermcap: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libtermcap: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libtermcap: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libtermcap: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libtermcap: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-winsup: maybe-all-stage1-target-libatomic +configure-stage2-target-winsup: maybe-all-stage2-target-libatomic +configure-stage3-target-winsup: maybe-all-stage3-target-libatomic +configure-stage4-target-winsup: maybe-all-stage4-target-libatomic +configure-stageprofile-target-winsup: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-winsup: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-winsup: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-winsup: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-winsup: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libffi: maybe-all-stage1-target-libatomic +configure-stage2-target-libffi: maybe-all-stage2-target-libatomic +configure-stage3-target-libffi: maybe-all-stage3-target-libatomic +configure-stage4-target-libffi: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libffi: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libffi: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libffi: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libffi: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libffi: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-rda: maybe-all-stage1-target-libatomic +configure-stage2-target-rda: maybe-all-stage2-target-libatomic +configure-stage3-target-rda: maybe-all-stage3-target-libatomic +configure-stage4-target-rda: maybe-all-stage4-target-libatomic +configure-stageprofile-target-rda: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-rda: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-rda: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-rda: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-rda: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libada: maybe-all-stage1-target-libatomic +configure-stage2-target-libada: maybe-all-stage2-target-libatomic +configure-stage3-target-libada: maybe-all-stage3-target-libatomic +configure-stage4-target-libada: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libada: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libada: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libada: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libada: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libada: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgm2: maybe-all-stage1-target-libatomic +configure-stage2-target-libgm2: maybe-all-stage2-target-libatomic +configure-stage3-target-libgm2: maybe-all-stage3-target-libatomic +configure-stage4-target-libgm2: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgm2: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgm2: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgm2: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgm2: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgm2: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libitm: maybe-all-stage1-target-libatomic +configure-stage2-target-libitm: maybe-all-stage2-target-libatomic +configure-stage3-target-libitm: maybe-all-stage3-target-libatomic +configure-stage4-target-libitm: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libitm: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libitm: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libitm: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libitm: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libitm: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgrust: maybe-all-stage1-target-libatomic +configure-stage2-target-libgrust: maybe-all-stage2-target-libatomic +configure-stage3-target-libgrust: maybe-all-stage3-target-libatomic +configure-stage4-target-libgrust: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgrust: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgrust: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgrust: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgrust: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgrust: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libgrust: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libgcobol: maybe-all-target-newlib maybe-all-target-libgloss configure-target-libgcobol: maybe-all-target-libstdc++-v3 +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + CONFIGURE_GDB_TK = @CONFIGURE_GDB_TK@ GDB_TK = @GDB_TK@ diff --git a/Makefile.tpl b/Makefile.tpl index 2ac4d5b46686..431ce5ceb9c0 100644 --- a/Makefile.tpl +++ b/Makefile.tpl @@ -246,6 +246,7 @@ HOST_EXPORTS = \ GMPINC="$(HOST_GMPINC)"; export GMPINC; \ ISLLIBS="$(HOST_ISLLIBS)"; export ISLLIBS; \ ISLINC="$(HOST_ISLINC)"; export ISLINC; \ + TARGET_CONFIGDIRS="$(TARGET_CONFIGDIRS)"; export TARGET_CONFIGDIRS; \ XGCC_FLAGS_FOR_TARGET="$(XGCC_FLAGS_FOR_TARGET)"; export XGCC_FLAGS_FOR_TARGET; \ @if gcc-bootstrap $(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \ @@ -2098,6 +2099,11 @@ ENDFOR dependencies +]@endif gcc-bootstrap (if (exist? "no_gcc") (hash-create-handle! lang-env-deps (string-append (get "module") "-" "no_gcc") #t)) + + (if (exist? "no_atomic") + (hash-create-handle! lang-env-deps + (string-append (get "module") "-" "no_atomic") #t)) + "" +][+ ENDFOR lang_env_dependencies +] @if gcc-bootstrap[+ FOR target_modules +][+ IF (not (lang-dep "no_gcc")) @@ -2116,6 +2122,17 @@ configure-target-[+module+]: maybe-all-target-newlib maybe-all-target-libgloss[+ ENDIF +][+ IF (lang-dep "cxx") +] configure-target-[+module+]: maybe-all-target-libstdc++-v3[+ ENDIF +] + +@if gcc-bootstrap[+ FOR target_modules +][+ IF (not (lang-dep "no_atomic")) + +][+ IF bootstrap +][+ FOR bootstrap_stage +] +configure-stage[+id+]-target-[+module+]: maybe-all-stage[+id+]-target-libatomic[+ + ENDFOR +][+ ENDIF bootstrap +][+ ENDIF +][+ ENDFOR target_modules +] +@endif gcc-bootstrap + +@if gcc-no-bootstrap[+ FOR target_modules +][+ IF (not (lang-dep "no_atomic")) +] +configure-target-[+module+]: maybe-all-target-libatomic[+ + ENDIF +][+ ENDFOR target_modules +] +@endif gcc-no-bootstrap [+ ENDFOR target_modules +] CONFIGURE_GDB_TK = @CONFIGURE_GDB_TK@ diff --git a/configure b/configure index 54b71af5d3be..4f2ba5e8a056 100755 --- a/configure +++ b/configure @@ -11075,6 +11075,11 @@ if echo " ${target_configdirs} " | grep " libgomp " > /dev/null 2>&1 ; then bootstrap_target_libs=${bootstrap_target_libs}target-libgomp, fi +# If we are building libatomic, bootstrap it. +if echo " ${target_configdirs} " | grep " libatomic " > /dev/null 2>&1 ; then + bootstrap_target_libs=${bootstrap_target_libs}target-libatomic, +fi + # If we are building libsanitizer and $BUILD_CONFIG contains bootstrap-asan # or bootstrap-ubsan, bootstrap it. if echo " ${target_configdirs} " | grep " libsanitizer " > /dev/null 2>&1; then diff --git a/configure.ac b/configure.ac index 2996a124206a..94321ffd20ab 100644 --- a/configure.ac +++ b/configure.ac @@ -3251,6 +3251,11 @@ if echo " ${target_configdirs} " | grep " libgomp " > /dev/null 2>&1 ; then bootstrap_target_libs=${bootstrap_target_libs}target-libgomp, fi +# If we are building libatomic, bootstrap it. +if echo " ${target_configdirs} " | grep " libatomic " > /dev/null 2>&1 ; then + bootstrap_target_libs=${bootstrap_target_libs}target-libatomic, +fi + # If we are building libsanitizer and $BUILD_CONFIG contains bootstrap-asan # or bootstrap-ubsan, bootstrap it. if echo " ${target_configdirs} " | grep " libsanitizer " > /dev/null 2>&1; then diff --git a/gcc/common.opt b/gcc/common.opt index f6d93dc05fbd..6c993a8a6d38 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -3439,6 +3439,10 @@ Use the Modern linker (MOLD) linker instead of the default linker. fuse-linker-plugin Common Undocumented Var(flag_use_linker_plugin) +flink-libatomic +Common Driver Var(flag_link_libatomic) Init(1) +Enable linking of libatomic. + ; Positive if we should track variables, negative if we should run ; the var-tracking pass only to discard debug annotations, zero if ; we're not to run it. diff --git a/gcc/common.opt.urls b/gcc/common.opt.urls index ddc5eaf9c6be..ab6b4316df9f 100644 --- a/gcc/common.opt.urls +++ b/gcc/common.opt.urls @@ -1634,6 +1634,9 @@ UrlSuffix(gcc/Link-Options.html#index-fuse-ld_003dmold) fuse-linker-plugin UrlSuffix(gcc/Optimize-Options.html#index-fuse-linker-plugin) +flink-libatomic +UrlSuffix(gcc/Link-Options.html#index-flink-libatomic) + fvar-tracking UrlSuffix(gcc/Debugging-Options.html#index-fvar-tracking) diff --git a/gcc/config.in b/gcc/config.in index 183d0dfcada4..0c634dfc538e 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -2626,6 +2626,12 @@ #endif +/* Define if libatomic is built for the target. */ +#ifndef USED_FOR_TARGET +#undef TARGET_PROVIDES_LIBATOMIC +#endif + + /* Define to 1 if you can safely include both and . */ #ifndef USED_FOR_TARGET #undef TIME_WITH_SYS_TIME diff --git a/gcc/config/alpha/linux.h b/gcc/config/alpha/linux.h index c4e843ff6f5b..758817a1c661 100644 --- a/gcc/config/alpha/linux.h +++ b/gcc/config/alpha/linux.h @@ -110,7 +110,7 @@ along with GCC; see the file COPYING3. If not see %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s" #define LINK_GCC_C_SEQUENCE_SPEC \ - "%{static|static-pie:--start-group} %G %{!nolibc:%L} \ + "%{static|static-pie:--start-group} %G %{!nolibc:" LINK_LIBATOMIC_SPEC "%L} \ %{static|static-pie:--end-group}%{!static:%{!static-pie:%G}}" /* Use --as-needed -lgcc_s for eh support. */ diff --git a/gcc/config/arm/uclinux-elf.h b/gcc/config/arm/uclinux-elf.h index 1e953d65281e..d7b99f5ff9af 100644 --- a/gcc/config/arm/uclinux-elf.h +++ b/gcc/config/arm/uclinux-elf.h @@ -67,8 +67,9 @@ #undef LINK_GCC_C_SEQUENCE_SPEC #define LINK_GCC_C_SEQUENCE_SPEC \ - "%{static|static-pie:--start-group} %G %{!nolibc:%L} \ - %{static|static-pie:--end-group}%{!static:%{!static-pie:%G %{!nolibc:%L}}}" + "%{static|static-pie:--start-group} %G %{!nolibc:" LINK_LIBATOMIC_SPEC "%L} \ + %{static|static-pie:--end-group}%{!static:%{!static-pie:%G %{!nolibc:" \ + LINK_LIBATOMIC_SPEC "%L}}}" /* Use --as-needed -lgcc_s for eh support. */ #ifdef HAVE_LD_AS_NEEDED diff --git a/gcc/config/arm/unknown-elf.h b/gcc/config/arm/unknown-elf.h index ab3918283d8c..a796d8702bd0 100644 --- a/gcc/config/arm/unknown-elf.h +++ b/gcc/config/arm/unknown-elf.h @@ -93,4 +93,4 @@ udivmoddi4, which will depend on the exception unwind routines, which will depend on abort, which is defined in libc. */ #undef LINK_GCC_C_SEQUENCE_SPEC -#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %{!nolibc:%L} --end-group" +#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %{!nolibc:" LINK_LIBATOMIC_SPEC "%L} --end-group" diff --git a/gcc/config/avr/avrlibc.h b/gcc/config/avr/avrlibc.h index 409a69451621..0e87fc4b8c55 100644 --- a/gcc/config/avr/avrlibc.h +++ b/gcc/config/avr/avrlibc.h @@ -36,4 +36,4 @@ along with GCC; see the file COPYING3. If not see #undef LINK_GCC_C_SEQUENCE_SPEC #define LINK_GCC_C_SEQUENCE_SPEC \ - "--start-group %G %{!nolibc:%L} --end-group" + "--start-group %G %{!nolibc:" LINK_LIBATOMIC_SPEC "%L} --end-group" diff --git a/gcc/config/bfin/linux.h b/gcc/config/bfin/linux.h index c3cecf776df6..b7599798742c 100644 --- a/gcc/config/bfin/linux.h +++ b/gcc/config/bfin/linux.h @@ -35,7 +35,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #undef LINK_GCC_C_SEQUENCE_SPEC #define LINK_GCC_C_SEQUENCE_SPEC \ - "%{static|static-pie:--start-group} %{mfast-fp:-lbffastfp} %G %{!nolibc:%L} \ + "%{static|static-pie:--start-group} %{mfast-fp:-lbffastfp} %G %{!nolibc:" LINK_LIBATOMIC_SPEC "%L} \ %{static|static-pie:--end-group} \ %{!static:%{!static-pie:%{mfast-fp:-lbffastfp} %G}}" diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h index c3e28e2fa81c..e23414c00b6d 100644 --- a/gcc/config/darwin.h +++ b/gcc/config/darwin.h @@ -487,7 +487,7 @@ extern GTY(()) int darwin_ms_struct; depend on libgcc. */ #undef LINK_GCC_C_SEQUENCE_SPEC #define LINK_GCC_C_SEQUENCE_SPEC \ - "%G %{!nolibc:%L} " + "%G %{!nolibc:" LINK_LIBATOMIC_SPEC "%L} " /* ld64 supports a sysroot, it just has a different name and there's no easy way to check for it at config time. */ diff --git a/gcc/config/gnu-user.h b/gcc/config/gnu-user.h index 4c4e31efa393..151871540e7b 100644 --- a/gcc/config/gnu-user.h +++ b/gcc/config/gnu-user.h @@ -109,8 +109,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} " #endif + #define GNU_USER_TARGET_LINK_GCC_C_SEQUENCE_SPEC \ - "%{static|static-pie:--start-group} %G %{!nolibc:%L} \ + "%{static|static-pie:--start-group} %G %{!nolibc:" LINK_LIBATOMIC_SPEC "%L} \ %{static|static-pie:--end-group}%{!static:%{!static-pie:%G}}" #undef LINK_GCC_C_SEQUENCE_SPEC diff --git a/gcc/config/lm32/uclinux-elf.h b/gcc/config/lm32/uclinux-elf.h index e3f51b39d029..1926e26ae014 100644 --- a/gcc/config/lm32/uclinux-elf.h +++ b/gcc/config/lm32/uclinux-elf.h @@ -69,7 +69,7 @@ #undef LINK_GCC_C_SEQUENCE_SPEC #define LINK_GCC_C_SEQUENCE_SPEC \ - "%{static|static-pie:--start-group} %G %{!nolibc:%L} \ + "%{static|static-pie:--start-group} %G %{!nolibc:" LINK_LIBATOMIC_SPEC "%L} \ %{static|static-pie:--end-group}%{!static:%{!static-pie:%G}}" #undef CC1_SPEC diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h index 0316d8cb65da..dd4d3f1f2095 100644 --- a/gcc/config/rs6000/linux64.h +++ b/gcc/config/rs6000/linux64.h @@ -393,9 +393,9 @@ extern int dot_symbols; /* Use gnu-user.h LINK_GCC_SEQUENCE_SPEC for linux. */ #undef LINK_GCC_C_SEQUENCE_SPEC #define LINK_GCC_C_SEQUENCE_SPEC \ - "%{mads|myellowknife|mmvme|msim:%G %L %G;" \ + "%{mads|myellowknife|mmvme|msim:%G" LINK_LIBATOMIC_SPEC "%L %G;" \ "!mcall-*|mcall-linux:" GNU_USER_TARGET_LINK_GCC_C_SEQUENCE_SPEC ";" \ - ":%G %L %G}" + ":%G" LINK_LIBATOMIC_SPEC "%L %G}" #undef TOC_SECTION_ASM_OP #define TOC_SECTION_ASM_OP \ diff --git a/gcc/config/rs6000/rtems.h b/gcc/config/rs6000/rtems.h index 95b59f60a1b0..a7b8f0f3cc30 100644 --- a/gcc/config/rs6000/rtems.h +++ b/gcc/config/rs6000/rtems.h @@ -297,9 +297,9 @@ /* Use gnu-user.h LINK_GCC_SEQUENCE_SPEC for rtems. */ #undef LINK_GCC_C_SEQUENCE_SPEC #define LINK_GCC_C_SEQUENCE_SPEC \ - "%{mads|myellowknife|mmvme|msim:%G %L %G;" \ + "%{mads|myellowknife|mmvme|msim:%G" LINK_LIBATOMIC_SPEC "%L %G;" \ "!mcall-*|mcall-linux:" GNU_USER_TARGET_LINK_GCC_C_SEQUENCE_SPEC ";" \ - ":%G %L %G}" + ":%G" LINK_LIBATOMIC_SPEC "%L %G}" #define RTEMS_STARTFILE_SPEC "ecrti%O%s rtems_crti%O%s crtbegin%O%s" #define RTEMS_ENDFILE_SPEC "crtend%O%s rtems_crtn%O%s ecrtn%O%s" diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h index 68aba07881d9..48ddb3d96c21 100644 --- a/gcc/config/sparc/sparc.h +++ b/gcc/config/sparc/sparc.h @@ -409,7 +409,9 @@ along with GCC; see the file COPYING3. If not see /* Because libgcc can generate references back to libc (via .umul etc.) we have to list libc again after the second libgcc. */ -#define LINK_GCC_C_SEQUENCE_SPEC "%G %{!nolibc:%L} %G %{!nolibc:%L}" +#define LINK_GCC_C_SEQUENCE_SPEC \ + "%G %{!nolibc:" LINK_LIBATOMIC_SPEC "%L} \ + %G %{!nolibc:" LINK_LIBATOMIC_SPEC "%L}" #define PTRDIFF_TYPE (TARGET_ARCH64 ? "long int" : "int") diff --git a/gcc/configure b/gcc/configure index c8184de6cf0c..485219bb80b2 100755 --- a/gcc/configure +++ b/gcc/configure @@ -33934,6 +33934,12 @@ $as_echo "#define ENABLE_DEFAULT_SSP 1" >>confdefs.h fi +if echo " ${TARGET_CONFIGDIRS} " | grep " libatomic " > /dev/null 2>&1 ; then + +$as_echo "#define TARGET_PROVIDES_LIBATOMIC 1" >>confdefs.h + +fi + # Test for on the target. { $as_echo "$as_me:${as_lineno-$LINENO}: checking sys/sdt.h in the target C library" >&5 diff --git a/gcc/configure.ac b/gcc/configure.ac index 684639d4cafd..04f86b52ef84 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -7060,6 +7060,11 @@ if test x$enable_default_ssp = xyes ; then fi AC_SUBST([enable_default_ssp]) +if echo " ${TARGET_CONFIGDIRS} " | grep " libatomic " > /dev/null 2>&1 ; then + AC_DEFINE(TARGET_PROVIDES_LIBATOMIC, 1, + [Define if libatomic is built for the target.]) +fi + # Test for on the target. GCC_TARGET_TEMPLATE([HAVE_SYS_SDT_H]) AC_CACHE_CHECK([sys/sdt.h in the target C library], [gcc_cv_sys_sdt_h], [ diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index c0d1442f7b19..faa49afad818 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -731,7 +731,7 @@ Objective-C and Objective-C++ Dialects}. @item Linker Options @xref{Link Options,,Options for Linking}. -@gccoptlist{@var{object-file-name} -fuse-ld=@var{linker} -l@var{library} +@gccoptlist{@var{object-file-name} -flink-libatomic -fuse-ld=@var{linker} -l@var{library} -nostartfiles -nodefaultlibs -nolibc -nostdlib -nostdlib++ -e @var{entry} --entry=@var{entry} -pie -pthread -r -rdynamic @@ -19470,6 +19470,12 @@ If any of these options is used, then the linker is not run, and object file names should not be used as arguments. @xref{Overall Options}. +@opindex flink-libatomic +@item -flink-libatomic +Enable linking of libatomic if it's supported by target, and is enabled by +default. The negative form @option{-fno-link-libatomic} can be used to +explicitly disable linking of libatomic. + @opindex flinker-output @item -flinker-output=@var{type} This option controls code generation of the link-time optimizer. By diff --git a/gcc/gcc.cc b/gcc/gcc.cc index 8da821e92ac4..5dd33c2dfcbd 100644 --- a/gcc/gcc.cc +++ b/gcc/gcc.cc @@ -984,6 +984,13 @@ proper position among the other output files. */ /* Here is the spec for running the linker, after compiling all files. */ +#if defined(TARGET_PROVIDES_LIBATOMIC) && defined(USE_LD_AS_NEEDED) +#define LINK_LIBATOMIC_SPEC "%{!fno-link-libatomic:" LD_AS_NEEDED_OPTION \ + " -latomic " LD_NO_AS_NEEDED_OPTION "} " +#else +#define LINK_LIBATOMIC_SPEC "" +#endif + /* This is overridable by the target in case they need to specify the -lgcc and -lc order specially, yet not require them to override all of LINK_COMMAND_SPEC. */ diff --git a/libatomic/Makefile.am b/libatomic/Makefile.am index 65dff6ece9ff..6dde874fa388 100644 --- a/libatomic/Makefile.am +++ b/libatomic/Makefile.am @@ -69,7 +69,7 @@ libatomic_darwin_rpath += -Wl,-rpath,@loader_path endif libatomic_la_LDFLAGS = $(libatomic_version_info) $(libatomic_version_script) \ - $(lt_host_flags) $(libatomic_darwin_rpath) + -Wc,-fno-link-libatomic $(lt_host_flags) $(libatomic_darwin_rpath) SIZES = @SIZES@ @@ -168,6 +168,19 @@ libatomic_convenience_la_LIBADD = $(libatomic_la_LIBADD) # when it is reloaded during the build of all-multi. all-multi: $(libatomic_la_LIBADD) +# Copy built libatomic library to $build/gcc so it's easier to locate, +# similar to libgcc. +# +# FIXME: libtool --mode=install also ends up copying libatomic.la in $gcc_objdir, +# which (somehow) ends up adding $gcc_objdir to RPATH for libraries that get +# built after libatomic, which makes RPATH insecure. Removing libatomic.la +# from $gcc_objdir seems to fix the issue. + +gcc_objdir = `pwd`/$(MULTIBUILDTOP)../../gcc/ +all-local: libatomic.la + $(LIBTOOL) --mode=install $(INSTALL_DATA) libatomic.la $(gcc_objdir)$(MULTISUBDIR)/ + rm $(gcc_objdir)$(MULTISUBDIR)/libatomic.la + # target overrides -include $(tmake_file) diff --git a/libatomic/Makefile.in b/libatomic/Makefile.in index 5f9de22d6c5a..be06e38e7235 100644 --- a/libatomic/Makefile.in +++ b/libatomic/Makefile.in @@ -432,7 +432,7 @@ libatomic_version_info = -version-info $(libtool_VERSION) @ENABLE_DARWIN_AT_RPATH_TRUE@ -Wc,-nodefaultrpaths \ @ENABLE_DARWIN_AT_RPATH_TRUE@ -Wl,-rpath,@loader_path libatomic_la_LDFLAGS = $(libatomic_version_info) $(libatomic_version_script) \ - $(lt_host_flags) $(libatomic_darwin_rpath) + -Wc,-fno-link-libatomic $(lt_host_flags) $(libatomic_darwin_rpath) @PARTIAL_VXWORKS_FALSE@libatomic_la_SOURCES = gload.c gstore.c gcas.c \ @PARTIAL_VXWORKS_FALSE@ gexch.c glfree.c lock.c init.c fenv.c \ @@ -474,6 +474,15 @@ libatomic_la_LDFLAGS = $(libatomic_version_info) $(libatomic_version_script) \ @ARCH_X86_64_TRUE@@HAVE_IFUNC_TRUE@@PARTIAL_VXWORKS_FALSE@IFUNC_OPTIONS = -mcx16 -mcx16 libatomic_convenience_la_SOURCES = $(libatomic_la_SOURCES) libatomic_convenience_la_LIBADD = $(libatomic_la_LIBADD) + +# Copy built libatomic library to $build/gcc so it's easier to locate, +# similar to libgcc. +# +# FIXME: libtool --mode=install also ends up copying libatomic.la in $gcc_objdir, +# which (somehow) ends up adding $gcc_objdir to RPATH for libraries that get +# built after libatomic, which makes RPATH insecure. Removing libatomic.la +# from $gcc_objdir seems to fix the issue. +gcc_objdir = `pwd`/$(MULTIBUILDTOP)../../gcc/ MULTISRCTOP = MULTIBUILDTOP = MULTIDIRS = @@ -917,6 +926,9 @@ vpath % $(strip $(search_path)) # makefile fragments to avoid broken *.Ppo getting included into the Makefile # when it is reloaded during the build of all-multi. all-multi: $(libatomic_la_LIBADD) +all-local: libatomic.la + $(LIBTOOL) --mode=install $(INSTALL_DATA) libatomic.la $(gcc_objdir)$(MULTISUBDIR)/ + rm $(gcc_objdir)$(MULTISUBDIR)/libatomic.la # target overrides -include $(tmake_file) diff --git a/libatomic/configure b/libatomic/configure index 0945b173f6cc..cd9fcdb15181 100755 --- a/libatomic/configure +++ b/libatomic/configure @@ -3418,6 +3418,26 @@ esac # the wrong, non-multilib-adjusted value will be used in multilibs. # As a side effect, we have to subst CFLAGS ourselves. +# AC_PROG_CC sets CFLAGS to "-g -O2" by default (if unset), and +# then compile conftests with default CFLAGS, leaving no place to temporarily +# modify CFLAGS and restore them later. However we need to pass +# -fno-link-libatomic in CFLAGS so conftests compiled in AC_PROG_CC don't fail. +# Assert that CFLAGS is always set by user so the default setting of CFLAGS by +# AC_PROG_CC won't be applicable anyway. +if test -z "${CFLAGS}"; then + as_fn_error $? "CFLAGS must be set." "$LINENO" 5 +fi + +# In order to override CFLAGS_FOR_TARGET, all of our special flags go +# in XCFLAGS. But we need them in CFLAGS during configury. So put them +# in both places for now and restore CFLAGS at the end of config. +__libatomic_save_CFLAGS__="$CFLAGS" + +# Append -fno-link-libatomic to avoid automatically linking libatomic, +# while building libatomic itself. +XCFLAGS="$XCFLAGS -fno-link-libatomic" +CFLAGS="$__libatomic_save_CFLAGS__ $XCFLAGS" + ac_ext=c @@ -4596,11 +4616,6 @@ fi -# In order to override CFLAGS_FOR_TARGET, all of our special flags go -# in XCFLAGS. But we need them in CFLAGS during configury. So put them -# in both places for now and restore CFLAGS at the end of config. -save_CFLAGS="$CFLAGS" - # Find other programs we need. if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. @@ -11833,7 +11848,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11836 "configure" +#line 11851 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11939,7 +11954,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11942 "configure" +#line 11957 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12333,7 +12348,7 @@ _ACEOF # Disable fallbacks to __sync routines from libgcc. Otherwise we'll # make silly decisions about what the cpu can do. -CFLAGS="$save_CFLAGS -fno-sync-libcalls $XCFLAGS" +CFLAGS="$__libatomic_save_CFLAGS__ -fno-sync-libcalls $XCFLAGS" # Check header files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 @@ -15354,7 +15369,7 @@ _ACEOF if ac_fn_c_try_link "$LINENO"; then : XPCFLAGS=" -pthread" else - CFLAGS="$save_CFLAGS $XCFLAGS" LIBS="-lpthread $LIBS" + CFLAGS="$__libatomic_save_CFLAGS__ $XCFLAGS" LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -15377,7 +15392,7 @@ rm -f core conftest.err conftest.$ac_objext \ fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - CFLAGS="$save_CFLAGS $XPCFLAGS" + CFLAGS="$__libatomic_save_CFLAGS__ $XPCFLAGS $XCFLAGS" ;; esac @@ -15952,7 +15967,7 @@ $as_echo "$as_me: versioning on shared library symbols is $enable_symvers" >&6;} # Cleanup and exit. -CFLAGS="$save_CFLAGS" +CFLAGS="$__libatomic_save_CFLAGS__" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure diff --git a/libatomic/configure.ac b/libatomic/configure.ac index 01141f643769..ded382233562 100644 --- a/libatomic/configure.ac +++ b/libatomic/configure.ac @@ -129,6 +129,26 @@ AC_SUBST(toolexeclibdir) # the wrong, non-multilib-adjusted value will be used in multilibs. # As a side effect, we have to subst CFLAGS ourselves. +# AC_PROG_CC sets CFLAGS to "-g -O2" by default (if unset), and +# then compile conftests with default CFLAGS, leaving no place to temporarily +# modify CFLAGS and restore them later. However we need to pass +# -fno-link-libatomic in CFLAGS so conftests compiled in AC_PROG_CC don't fail. +# Assert that CFLAGS is always set by user so the default setting of CFLAGS by +# AC_PROG_CC won't be applicable anyway. +if test -z "${CFLAGS}"; then + AC_MSG_ERROR([CFLAGS must be set.]) +fi + +# In order to override CFLAGS_FOR_TARGET, all of our special flags go +# in XCFLAGS. But we need them in CFLAGS during configury. So put them +# in both places for now and restore CFLAGS at the end of config. +__libatomic_save_CFLAGS__="$CFLAGS" + +# Append -fno-link-libatomic to avoid automatically linking libatomic, +# while building libatomic itself. +XCFLAGS="$XCFLAGS -fno-link-libatomic" +CFLAGS="$__libatomic_save_CFLAGS__ $XCFLAGS" + m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS]) m4_define([_AC_ARG_VAR_PRECIOUS],[]) AC_PROG_CC @@ -137,11 +157,6 @@ m4_rename_force([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS]) AC_SUBST(CFLAGS) -# In order to override CFLAGS_FOR_TARGET, all of our special flags go -# in XCFLAGS. But we need them in CFLAGS during configury. So put them -# in both places for now and restore CFLAGS at the end of config. -save_CFLAGS="$CFLAGS" - # Find other programs we need. AC_CHECK_TOOL(AR, ar) AC_CHECK_TOOL(NM, nm) @@ -189,7 +204,7 @@ AC_DEFINE_UNQUOTED(IFUNC_RESOLVER_ARGS, $IFUNC_RESOLVER_ARGS, # Disable fallbacks to __sync routines from libgcc. Otherwise we'll # make silly decisions about what the cpu can do. -CFLAGS="$save_CFLAGS -fno-sync-libcalls $XCFLAGS" +CFLAGS="$__libatomic_save_CFLAGS__ -fno-sync-libcalls $XCFLAGS" # Check header files. AC_STDC_HEADERS @@ -230,7 +245,7 @@ case " $config_path " in void *g(void *d) { return NULL; }], [pthread_t t; pthread_create(&t,NULL,g,NULL);])], [XPCFLAGS=" -pthread"], - [CFLAGS="$save_CFLAGS $XCFLAGS" LIBS="-lpthread $LIBS" + [CFLAGS="$__libatomic_save_CFLAGS__ $XCFLAGS" LIBS="-lpthread $LIBS" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [#include @@ -238,7 +253,7 @@ case " $config_path " in [pthread_t t; pthread_create(&t,NULL,g,NULL);])], [], [AC_MSG_ERROR([Pthreads are required to build libatomic])])]) - CFLAGS="$save_CFLAGS $XPCFLAGS" + CFLAGS="$__libatomic_save_CFLAGS__ $XPCFLAGS $XCFLAGS" ;; esac @@ -254,7 +269,7 @@ fi LIBAT_ENABLE_SYMVERS # Cleanup and exit. -CFLAGS="$save_CFLAGS" +CFLAGS="$__libatomic_save_CFLAGS__" AC_CACHE_SAVE AC_ARG_ENABLE([werror], From 76eb9c49275941e15cb598af5d9b58361dd65a98 Mon Sep 17 00:00:00 2001 From: Kito Cheng Date: Mon, 1 Sep 2025 18:29:53 +0800 Subject: [PATCH 173/216] RISC-V: Allow VLS types using up to LMUL 8 We used to apply -mrvv-max-lmul= to limit VLS code gen, auto vectorizer, and builtin string function expansion. But I think the VLS code gen part doesn't need this limit, since it only happens when the user explicitly writes vector types. For example, int32x8_t under -mrvv-max-lmul=m1 with VLEN=128 would be split into two int32x4_t, which generate more instructions and runs slower. In this patch, I changed -mrvv-max-lmul= to only affect auto vectorization and builtin string function expansion. Actually, the option's help text already says it only controls the LMUL used by auto-vectorization, so I believe this change is makes sense :) Changes since v1: - Add testase to make sure auto vectorizer is still constrained by -mrvv-max-lmul=. gcc/ChangeLog: * config/riscv/riscv-protos.h (vls_mode_valid_p): New argument allow_up_to_lmul_8. * config/riscv/riscv-v.cc (autovectorize_vector_modes): Set allow_up_to_lmul_8 to false. (vls_mode_valid_p): Add new argument allow_up_to_lmul_8, and use it to determine whether to allow LMUL 8. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/vls-type-rvv-max-lmul.c: New test. * gcc.target/riscv/rvv/vls-type-rvv-max-lmul-autovec.c: New test. --- gcc/config/riscv/riscv-protos.h | 2 +- gcc/config/riscv/riscv-v.cc | 31 ++++++++++--------- .../riscv/rvv/vls-type-rvv-max-lmul-autovec.c | 12 +++++++ .../riscv/rvv/vls-type-rvv-max-lmul.c | 12 +++++++ 4 files changed, 41 insertions(+), 16 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/vls-type-rvv-max-lmul-autovec.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/vls-type-rvv-max-lmul.c diff --git a/gcc/config/riscv/riscv-protos.h b/gcc/config/riscv/riscv-protos.h index 346d7a812fbd..013b1ddff691 100644 --- a/gcc/config/riscv/riscv-protos.h +++ b/gcc/config/riscv/riscv-protos.h @@ -766,7 +766,7 @@ opt_machine_mode vectorize_related_mode (machine_mode, scalar_mode, unsigned int autovectorize_vector_modes (vec *, bool); bool cmp_lmul_le_one (machine_mode); bool cmp_lmul_gt_one (machine_mode); -bool vls_mode_valid_p (machine_mode); +bool vls_mode_valid_p (machine_mode, bool allow_up_to_lmul_8 = true); bool vlmax_avl_type_p (rtx_insn *); bool has_vl_op (rtx_insn *); bool tail_agnostic_p (rtx_insn *); diff --git a/gcc/config/riscv/riscv-v.cc b/gcc/config/riscv/riscv-v.cc index 70f02fd01537..707924db6a37 100644 --- a/gcc/config/riscv/riscv-v.cc +++ b/gcc/config/riscv/riscv-v.cc @@ -3016,7 +3016,7 @@ autovectorize_vector_modes (vector_modes *modes, bool) machine_mode mode; while (size > 0 && get_vector_mode (QImode, size).exists (&mode)) { - if (vls_mode_valid_p (mode)) + if (vls_mode_valid_p (mode, /* allow_up_to_lmul_8 */ false)) modes->safe_push (mode); i++; @@ -5181,26 +5181,27 @@ cmp_lmul_gt_one (machine_mode mode) Then we can have the condition for VLS mode in fixed-vlmax, aka: PRECISION (VLSmode) < VLEN / (64 / PRECISION(VLS_inner_mode)). */ bool -vls_mode_valid_p (machine_mode vls_mode) +vls_mode_valid_p (machine_mode vls_mode, bool allow_up_to_lmul_8) { if (!TARGET_VECTOR || TARGET_XTHEADVECTOR) return false; if (rvv_vector_bits == RVV_VECTOR_BITS_SCALABLE) { - if (GET_MODE_CLASS (vls_mode) != MODE_VECTOR_BOOL - && !ordered_p (TARGET_MAX_LMUL * BITS_PER_RISCV_VECTOR, - GET_MODE_PRECISION (vls_mode))) - /* We enable VLS modes which are aligned with TARGET_MAX_LMUL and - BITS_PER_RISCV_VECTOR. - - e.g. When TARGET_MAX_LMUL = 1 and BITS_PER_RISCV_VECTOR = (128,128). - We enable VLS modes have fixed size <= 128bit. Since ordered_p is - false between VLA modes with size = (128, 128) bits and VLS mode - with size = 128 bits, we will end up with multiple ICEs in - middle-end generic codes. */ - return false; - return true; + if (GET_MODE_CLASS (vls_mode) != MODE_VECTOR_BOOL) + return true; + if (allow_up_to_lmul_8) + return true; + /* We enable VLS modes which are aligned with TARGET_MAX_LMUL and + BITS_PER_RISCV_VECTOR. + + e.g. When TARGET_MAX_LMUL = 1 and BITS_PER_RISCV_VECTOR = (128,128). + We enable VLS modes have fixed size <= 128bit. Since ordered_p is + false between VLA modes with size = (128, 128) bits and VLS mode + with size = 128 bits, we will end up with multiple ICEs in + middle-end generic codes. */ + return !ordered_p (TARGET_MAX_LMUL * BITS_PER_RISCV_VECTOR, + GET_MODE_PRECISION (vls_mode)); } if (rvv_vector_bits == RVV_VECTOR_BITS_ZVL) diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vls-type-rvv-max-lmul-autovec.c b/gcc/testsuite/gcc.target/riscv/rvv/vls-type-rvv-max-lmul-autovec.c new file mode 100644 index 000000000000..3b083e8f67c7 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/vls-type-rvv-max-lmul-autovec.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-max-lmul=m2 -fdump-tree-optimized" } */ + +void foo(int * restrict a, int *b, int *c) +{ + for (int i=0;i<32;++i) + a[i] = b[i] + c[i]; +} + +/* Make sure -mrvv-max-lmul still constraint the auto vectorizer for VLS + types. */ +/* { dg-final { scan-assembler {vsetivli\s+zero,8,e32,m2,t[au],m[au]} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vls-type-rvv-max-lmul.c b/gcc/testsuite/gcc.target/riscv/rvv/vls-type-rvv-max-lmul.c new file mode 100644 index 000000000000..5d52f7798d59 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/vls-type-rvv-max-lmul.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-max-lmul=m1 -fdump-tree-optimized" } */ + +typedef long long int64x8_t __attribute__((vector_size(64))); + +int64x8_t foo(int64x8_t a, int64x8_t b) +{ + return a + b; +} +/* Make sure we can us up to LMUL 4 to process int64x8_t at once rather than + break that into 4 LMUL 1 operations. */ +/* { dg-final { scan-assembler {vsetivli\s+zero,8,e64,m4,t[au],m[au]} } } */ From 7304e83f1f29c39df7a9de888d9c6d40b58c512a Mon Sep 17 00:00:00 2001 From: Georg-Johann Lay Date: Wed, 8 Oct 2025 20:02:53 +0200 Subject: [PATCH 174/216] AVR: target/122210 - Add fixed-point -> double conversions. PR target/122210 libgcc/config/avr/libf7/ * libf7-common.mk (F7_ASM_PARTS): Add 2D modules. * libf7-asm.sx: Implement the 2D modules. gcc/testsuite/ * gcc.target/avr/fxtod.c: New test. --- gcc/testsuite/gcc.target/avr/fxtod.c | 115 ++++++++++++++++++++++++ libgcc/config/avr/libf7/libf7-asm.sx | 112 +++++++++++++++++++++++ libgcc/config/avr/libf7/libf7-common.mk | 4 + 3 files changed, 231 insertions(+) create mode 100644 gcc/testsuite/gcc.target/avr/fxtod.c diff --git a/gcc/testsuite/gcc.target/avr/fxtod.c b/gcc/testsuite/gcc.target/avr/fxtod.c new file mode 100644 index 000000000000..e069a312290d --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/fxtod.c @@ -0,0 +1,115 @@ +/* { dg-do run { target { ! avr_tiny } } } */ +/* { dg-additional-options { -std=gnu99 -Os -mcall-prologues -fwrapv -Wno-overflow } } */ + +#include + +#if __SIZEOF_LONG_DOUBLE__ == 8 + +#define NI __attribute__((noipa)) + +typedef long double D; + +extern D ldexpl (D, int); + +typedef short fract hr_t; +typedef unsigned short fract uhr_t; +typedef fract r_t; +typedef unsigned fract ur_t; + +typedef short accum hk_t; +typedef unsigned short accum uhk_t; +typedef accum k_t; +typedef unsigned accum uk_t; + +#define FBITuhr 8 +#define FBIThr 7 +#define FBITur 16 +#define FBITr 15 + +#define FBITuhk 8 +#define FBIThk 7 +#define FBITuk 16 +#define FBITk 15 + +#define VALff(S) ((2ul << (8 * sizeof (S##bits(0)) - 1)) - 1) +#define VAL80(S) (1ul << (8 * sizeof (S##bits(0)) - 1)) +#define VAL00(S) 0 +#define VAL01(S) 1 + + +#define TEST_U(S, V) \ + NI void test_##S##_##V (void) \ + { \ + S##_t x = S##bits (VAL##V (S)); \ + __asm ("" : "+r" (x)); \ + D d = (D) x; \ + D z = ldexpl (VAL##V (S), - FBIT##S); \ + if (d != z) \ + __builtin_exit (1); \ + } + +#define TEST_S(S, V) \ + NI void test_##S##_##V (void) \ + { \ + uint32_t u32 = (VAL##V (S) & VAL80 (S)) \ + ? 1u + (VAL##V (S) ^ VALff (S)) \ + : VAL##V (S); \ + S##_t x = S##bits (VAL##V (S)); \ + __asm ("" : "+r" (x)); \ + D d = (D) x; \ + D z = ldexpl (u32, - FBIT##S); \ + int s = (VAL##V (S) & VAL80 (S)) != 0; \ + if (s == 0 && d != z) \ + __builtin_exit (2); \ + if (s == 1 && d != -z) \ + __builtin_exit (3); \ + } + +#define TESTS_U(S) \ + TEST_U (S, 00) \ + TEST_U (S, 01) \ + TEST_U (S, ff) \ + TEST_U (S, 80) + +#define TESTS_S(S) \ + TEST_S (S, 00) \ + TEST_S (S, 01) \ + TEST_S (S, ff) \ + TEST_S (S, 80) + +TESTS_U (uhr) +TESTS_U (ur) +TESTS_U (uhk) +TESTS_U (uk) + +TESTS_S (hr) +TESTS_S (r) +TESTS_S (hk) +TESTS_S (k) + +#define RUN(S) \ + test_##S##_00 (); \ + test_##S##_01 (); \ + test_##S##_ff (); \ + test_##S##_80 () + +int main (void) +{ + RUN (uhr); + RUN (ur); + RUN (uhk); + RUN (uk); + + RUN (hr); + RUN (r); + RUN (hk); + RUN (k); + + return 0; +} +#else +int main (void) +{ + return 0; +} +#endif diff --git a/libgcc/config/avr/libf7/libf7-asm.sx b/libgcc/config/avr/libf7/libf7-asm.sx index bafb490c5c7e..18e676ace0f8 100644 --- a/libgcc/config/avr/libf7/libf7-asm.sx +++ b/libgcc/config/avr/libf7/libf7-asm.sx @@ -2209,4 +2209,116 @@ _DEFUN __powidf2 _ENDF __powidf2 #endif /* F7MOD_D_powi_ */ + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Fixed-point -> double conversions. + +;;; The double exponent starts at bit 52 since the encoded mantissa has 52 bits. +;;; Note that when X is a multiple of 16, then dex_lo(x) evaluates to 0. +#define dex_lo(x) hlo8((x) << (52 - 32)) +#define dex_hi(x) hhi8((x) << (52 - 32)) + +#ifdef F7MOD_usa2D_ +_DEFUN __fractusadf + ;; Convert USI to DF. + XCALL __floatunsidf + ;; The MSB indicates a value of 0. + cpse r25, __zero_reg__ + ;; Divide non-zero values by 2^16 in order to adjust for FBIT = 16. + subi r25, dex_hi (16) + ret +_ENDF __fractusadf +#endif /* F7MOD_usa2D_ */ + +#ifdef F7MOD_sa2D_ +_DEFUN __fractsadf + ;; Convert SI to DF. + XCALL __floatsidf + ;; The MSB indicates a value of 0. + tst r25 + breq 0f + ;; Divide non-zero values by 2^15 in order to adjust for FBIT = 15. + subi r24, dex_lo (15) + sbci r25, dex_hi (15) +0: ret +_ENDF __fractsadf +#endif /* F7MOD_sa2D_ */ + +#ifdef F7MOD_uha2D_ +_DEFUN __fractuhadf + ;; Extend UHA to USA. + clr r22 + mov r23, r24 + mov r24, r25 + clr r25 + XJMP __fractusadf +_ENDF __fractuhadf +#endif /* F7MOD_uha2D_ */ + +#ifdef F7MOD_ha2D_ +_DEFUN __fracthadf + ;; Extend HA to SA. + clr r22 + mov r23, r24 + mov r24, r25 + lsl r25 + sbc r25, r25 + XJMP __fractsadf +_ENDF __fracthadf +#endif /* F7MOD_ha2D_ */ + + +#ifdef F7MOD_usq2D_ +_DEFUN __fractusqdf + ;; Convert USI to DF. + XCALL __floatunsidf + ;; The MSB indicates a value of 0. + cpse r25, __zero_reg__ + ;; Divide non-zero values by 2^32 in order to adjust for FBIT = 32. + subi r25, dex_hi (32) + ret +_ENDF __fractusqdf +#endif /* F7MOD_usq2D_ */ + +#ifdef F7MOD_sq2D_ +_DEFUN __fractsqdf + ;; Convert SI to DF. + XCALL __floatsidf + ;; The MSB indicates a value of 0. + tst r25 + breq 0f + ;; Divide non-zero values by 2^31 in order to adjust for FBIT = 31. + subi r24, dex_lo (31) + sbci r25, dex_hi (31) +0: ret +_ENDF __fractsqdf +#endif /* F7MOD_sq2D_ */ + +#ifdef F7MOD_uqq2D_ +_DEFUN __fractuqqdf + ;; Extend UQQ to UHQ. + mov r25, r24 + clr r24 +_LABEL __fractuhqdf + ;; Extend UHQ to USQ. + clr r23 + clr r22 + XJMP __fractusqdf +_ENDF __fractuqqdf +#endif /* F7MOD_uqq2D_ */ + +#ifdef F7MOD_qq2D_ +_DEFUN __fractqqdf + ;; Extend QQ to HQ. + mov r25, r24 + clr r24 +_LABEL __fracthqdf + ;; Extend HQ to SQ. + clr r23 + clr r22 + XJMP __fractsqdf +_ENDF __fractqqdf +#endif /* F7MOD_qq2D_ */ + + #endif /* !AVR_TINY */ diff --git a/libgcc/config/avr/libf7/libf7-common.mk b/libgcc/config/avr/libf7/libf7-common.mk index 153266ba141e..85f835049698 100644 --- a/libgcc/config/avr/libf7/libf7-common.mk +++ b/libgcc/config/avr/libf7/libf7-common.mk @@ -28,6 +28,10 @@ F7_ASM_PARTS += D_cmp D_eq D_ne D_ge D_gt D_le D_lt D_unord D_fminfmax F7_ASM_PARTS += call_dd call_ddd +# Fixed-point -> double conversions +F7_ASM_PARTS += qq2D uqq2D sq2D usq2D +F7_ASM_PARTS += ha2D uha2D sa2D usa2D + # Stuff that will be wrapped in f7-wraps.h (included by libf7-asm.sx) # and give f7_asm_D_*.o modules. g_ddd += add sub mul div From b0bc615d9374ca6293996cf3afca8cabaca0defd Mon Sep 17 00:00:00 2001 From: Georg-Johann Lay Date: Wed, 8 Oct 2025 20:02:53 +0200 Subject: [PATCH 175/216] AVR: target/122210 - Add double -> fixed-point conversions. PR target/122210 libgcc/config/avr/libf7/ * libf7-common.mk (F7_ASM_PARTS): Add D2 modules. * libf7-asm.sx: Implement the D2 modules. gcc/testsuite/ * gcc.target/avr/dtofx.c: New test. --- gcc/testsuite/gcc.target/avr/dtofx.c | 98 +++++++++++++++++++++++++ libgcc/config/avr/libf7/libf7-asm.sx | 81 ++++++++++++++++++++ libgcc/config/avr/libf7/libf7-common.mk | 4 + 3 files changed, 183 insertions(+) create mode 100644 gcc/testsuite/gcc.target/avr/dtofx.c diff --git a/gcc/testsuite/gcc.target/avr/dtofx.c b/gcc/testsuite/gcc.target/avr/dtofx.c new file mode 100644 index 000000000000..f7e28159f920 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/dtofx.c @@ -0,0 +1,98 @@ +/* { dg-do run { target { ! avr_tiny } } } */ +/* { dg-additional-options { -std=gnu99 -Os -mcall-prologues -Wno-pedantic } } */ + +#include + +#if __SIZEOF_LONG_DOUBLE__ == 8 + +typedef long double D; + +volatile D d0 = 0; +volatile D dm15 = -1.5; +volatile D dp15 = +1.5; +volatile D dm05 = -0.5; +volatile D dp05 = +0.5; + +void test0 (void) +{ + if (0hk != (short accum) d0) + __builtin_exit (__LINE__); + + if (0uhk != (unsigned short accum) d0) + __builtin_exit (__LINE__); + + if (0hr != (short fract) d0) + __builtin_exit (__LINE__); + + if (0uhr != (unsigned short fract) d0) + __builtin_exit (__LINE__); + + if (0k != (accum) d0) + __builtin_exit (__LINE__); + + if (0uk != (unsigned accum) d0) + __builtin_exit (__LINE__); + + if (0r != (fract) d0) + __builtin_exit (__LINE__); + + if (0ur != (unsigned fract) d0) + __builtin_exit (__LINE__); +} + +void testp (void) +{ + if (0.5hr != (short fract) dp05) + __builtin_exit (__LINE__); + + if (0.5uhr != (unsigned short fract) dp05) + __builtin_exit (__LINE__); + + if (0.5r != (fract) dp05) + __builtin_exit (__LINE__); + + if (0.5ur != (unsigned fract) dp05) + __builtin_exit (__LINE__); + + if (1.5hk != (short accum) dp15) + __builtin_exit (__LINE__); + + if (1.5uhk != (unsigned short accum) dp15) + __builtin_exit (__LINE__); + + if (1.5k != (accum) dp15) + __builtin_exit (__LINE__); + + if (1.5uk != (unsigned accum) dp15) + __builtin_exit (__LINE__); +} + +void testm (void) +{ + if (-0.5hr != (short fract) dm05) + __builtin_exit (__LINE__); + + if (-0.5r != (fract) dm05) + __builtin_exit (__LINE__); + + if (-1.5hk != (short accum) dm15) + __builtin_exit (__LINE__); + + if (-1.5k != (accum) dm15) + __builtin_exit (__LINE__); +} + +int main (void) +{ + test0 (); + testp (); + testm (); + + return 0; +} +#else +int main (void) +{ + return 0; +} +#endif diff --git a/libgcc/config/avr/libf7/libf7-asm.sx b/libgcc/config/avr/libf7/libf7-asm.sx index 18e676ace0f8..4b42947e2ed6 100644 --- a/libgcc/config/avr/libf7/libf7-asm.sx +++ b/libgcc/config/avr/libf7/libf7-asm.sx @@ -2321,4 +2321,85 @@ _ENDF __fractqqdf #endif /* F7MOD_qq2D_ */ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Fixed-point -> double conversions. + +#ifdef F7MOD_D2qq_ +_DEFUN __fractdfqq + ;; Multiply with 2^{24+7} to get a QQ result in r25. + subi r24, dex_lo (-31) + sbci r25, dex_hi (-31) + XCALL __fixdfsi + mov r24, r25 + ret +_ENDF __fractdfqq +#endif /* F7MOD_D2qq_ */ + +#ifdef F7MOD_D2uqq_ +_DEFUN __fractdfuqq + ;; Multiply with 2^{24+8} to get a UQQ result in r25. + subi r25, dex_hi (-32) + XCALL __fixunsdfsi + mov r24, r25 + ret +_ENDF __fractdfuqq +#endif /* F7MOD_D2uqq_ */ + +#ifdef F7MOD_D2ha_ +_DEFUN __fractdfha + ;; Multiply with 2^{16+7} to get a HA result in r25:r24 + subi r24, dex_lo (-23) + sbci r25, dex_hi (-23) + XJMP __fixdfsi +_ENDF __fractdfha +#endif /* F7MOD_D2ha_ */ + +#ifdef F7MOD_D2uha_ +_DEFUN __fractdfuha + ;; Multiply with 2^24 to get a UHA result in r25:r24. + subi r24, dex_lo (-24) + sbci r25, dex_hi (-24) + XJMP __fixunsdfsi +_ENDF __fractdfuha +#endif /* F7MOD_D2uha_ */ + +#ifdef F7MOD_D2hq_ +_DEFUN __fractdfhq + ;; Multiply with 2^{16+15} to get a HQ result in r25:r24 + ;; resp. with 2^31 to get a SQ result in r25:r22. +_LABEL __fractdfsq + subi r24, dex_lo (-31) + sbci r25, dex_hi (-31) + XJMP __fixdfsi +_ENDF __fractdfhq +#endif /* F7MOD_D2hq_ */ + +#ifdef F7MOD_D2uhq_ +_DEFUN __fractdfuhq + ;; Multiply with 2^{16+16} to get a UHQ result in r25:r24 + ;; resp. with 2^32 to get a USQ result in r25:r22. +_LABEL __fractdfusq + subi r25, dex_hi (-32) + XJMP __fixunsdfsi +_ENDF __fractdfuhq +#endif /* F7MOD_D2uhq_ */ + +#ifdef F7MOD_D2sa_ +_DEFUN __fractdfsa + ;; Multiply with 2^15 to get a SA result in r25:r22. + subi r24, dex_lo (-15) + sbci r25, dex_hi (-15) + XJMP __fixdfsi +_ENDF __fractdfsa +#endif /* F7MOD_D2sa_ */ + +#ifdef F7MOD_D2usa_ +_DEFUN __fractdfusa + ;; Multiply with 2^16 to get a USA result in r25:r22. + subi r25, dex_hi (-16) + XJMP __fixunsdfsi +_ENDF __fractdfusa +#endif /* F7MOD_D2usa_ */ + + #endif /* !AVR_TINY */ diff --git a/libgcc/config/avr/libf7/libf7-common.mk b/libgcc/config/avr/libf7/libf7-common.mk index 85f835049698..6d35454ee044 100644 --- a/libgcc/config/avr/libf7/libf7-common.mk +++ b/libgcc/config/avr/libf7/libf7-common.mk @@ -32,6 +32,10 @@ F7_ASM_PARTS += call_dd call_ddd F7_ASM_PARTS += qq2D uqq2D sq2D usq2D F7_ASM_PARTS += ha2D uha2D sa2D usa2D +# Double -> fixed-point conversions +F7_ASM_PARTS += D2qq D2uqq D2hq D2uhq +F7_ASM_PARTS += D2ha D2uha D2sa D2usa + # Stuff that will be wrapped in f7-wraps.h (included by libf7-asm.sx) # and give f7_asm_D_*.o modules. g_ddd += add sub mul div From 5ab4db545906270de5dc2a21447392ac3332cf2b Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Thu, 9 Oct 2025 09:06:27 +0200 Subject: [PATCH 176/216] tree-optimization/122212 - fix CLZ detection The following corrects a mistake with the zero value handling which was broken because the bits bias was applied first which works for the special-case using a bit-and but not when using a conditional move. Apply this after the fact instead where it also more easily folds with an existing bias we compensate. PR tree-optimization/122212 * tree-ssa-forwprop.cc (simplify_count_zeroes): Apply bias for CLZ after dealing with the zero special value. * gcc.dg/torture/pr122212.c: New testcase. --- gcc/testsuite/gcc.dg/torture/pr122212.c | 28 +++++++++++++++++++++++++ gcc/tree-ssa-forwprop.cc | 23 ++++++++++---------- 2 files changed, 40 insertions(+), 11 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr122212.c diff --git a/gcc/testsuite/gcc.dg/torture/pr122212.c b/gcc/testsuite/gcc.dg/torture/pr122212.c new file mode 100644 index 000000000000..01a66313bbb8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr122212.c @@ -0,0 +1,28 @@ +/* { dg-do run } */ + +typedef __UINT32_TYPE__ uint32_t; + +uint32_t __attribute__((noipa)) +ZSTD_countLeadingZeros32_fallback(uint32_t val) +{ + static const uint32_t DeBruijnClz[32] + = { 0, 9, 1, 10, 13, 21, 2, 29, + 11, 14, 16, 18, 22, 25, 3, 30, + 8, 12, 20, 28, 15, 17, 24, 7, + 19, 27, 23, 6, 26, 5, 4, 31}; + val |= val >> 1; + val |= val >> 2; + val |= val >> 4; + val |= val >> 8; + val |= val >> 16; + return 31 - DeBruijnClz[(val * 0x07C4ACDDU) >> 27]; +} + +int main() +{ + if (ZSTD_countLeadingZeros32_fallback (0) != 31) + __builtin_abort (); + if (ZSTD_countLeadingZeros32_fallback (-1U) != 0) + __builtin_abort (); + return 0; +} diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc index ee3bb401f31a..749708f05a29 100644 --- a/gcc/tree-ssa-forwprop.cc +++ b/gcc/tree-ssa-forwprop.cc @@ -3295,17 +3295,6 @@ simplify_count_zeroes (gimple_stmt_iterator *gsi) gimple_seq_add_stmt (&seq, call); tree prev_lhs = gimple_call_lhs (call); - if (fn == IFN_CLZ) - { - g = gimple_build_assign (make_ssa_name (integer_type_node), - MINUS_EXPR, - build_int_cst (integer_type_node, - input_bits - 1), - prev_lhs); - gimple_set_location (g, gimple_location (stmt)); - gimple_seq_add_stmt (&seq, g); - prev_lhs = gimple_assign_lhs (g); - } if (zero_ok && zero_val == ctz_val) ; @@ -3337,6 +3326,18 @@ simplify_count_zeroes (gimple_stmt_iterator *gsi) prev_lhs = gimple_assign_lhs (g); } + if (fn == IFN_CLZ) + { + g = gimple_build_assign (make_ssa_name (integer_type_node), + MINUS_EXPR, + build_int_cst (integer_type_node, + input_bits - 1), + prev_lhs); + gimple_set_location (g, gimple_location (stmt)); + gimple_seq_add_stmt (&seq, g); + prev_lhs = gimple_assign_lhs (g); + } + g = gimple_build_assign (gimple_assign_lhs (stmt), NOP_EXPR, prev_lhs); gimple_seq_add_stmt (&seq, g); gsi_replace_with_seq (gsi, seq, true); From 2ce24fb6d9e4275b03b205f22c2629bd371008c1 Mon Sep 17 00:00:00 2001 From: Takayuki 'January June' Suwa Date: Fri, 19 Sep 2025 21:23:51 +0900 Subject: [PATCH 177/216] xtensa: Implement TARGET_MD_ASM_ADJUST The behavior of the 'g'-constraint on asm statement operands does not strictly match that described in the GCC User Manual: "'g' Any register, memory, or immediate integer operand is allowed, except for registers that are not general registers." -- 6.12.3.1 Simple Constraints, Using the GCC (the latest) Contrary to the quote above, the following example will produce different results depending on whether TARGET_CONST16 or TARGET_AUTO_LITPOOLS is enabled: /* example */ void test(void) { asm volatile ("# %0"::"g"(65536)); } ;; TARGET_CONST16 || TARGET_AUTO_LITPOOLS test: entry sp, 32 # 65536 retw.n ;; !TARGET_CONST16 && !TARGET_AUTO_LITPOOLS .literal_position .literal .LC0, 65536 test: entry sp, 32 # .LC0 retw.n Indeed, both of the above results satisfy the constraint, but the latter is not an "any" constant as stated in the manual, and is therefore incon- sistent with the former. This is because the behavior of the 'g'-constraint on constants depends on the general_operand() predicate, and essentially on TARGET_LEGITIMATE_CONSTANT_P(). This patch resolves that inconsistency by adding an 'n'-constraint imme- diately before every occurrence of 'g' in each constraint string during the RTL generation pass, to prioritize being an integer constant for the alternative to which 'g' belongs. gcc/ChangeLog: * config/xtensa/xtensa.cc (TARGET_MD_ASM_ADJUST): New macro definition. (xtensa_md_asm_adjust): New function prototype and definition, that prepends all 'g'-constraints in the "constraints" vector with 'n', if neither TARGET_CONST16 nor TARGET_AUTO_LITPOOLS is enabled. --- gcc/config/xtensa/xtensa.cc | 66 +++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/gcc/config/xtensa/xtensa.cc b/gcc/config/xtensa/xtensa.cc index bcb26df2e22b..00c36915795a 100644 --- a/gcc/config/xtensa/xtensa.cc +++ b/gcc/config/xtensa/xtensa.cc @@ -204,6 +204,10 @@ static rtx xtensa_delegitimize_address (rtx); static reg_class_t xtensa_ira_change_pseudo_allocno_class (int, reg_class_t, reg_class_t); static HARD_REG_SET xtensa_zero_call_used_regs (HARD_REG_SET); +static rtx_insn *xtensa_md_asm_adjust (vec &, vec &, + vec &, vec &, + vec &, vec &, HARD_REG_SET &, + location_t); @@ -377,6 +381,9 @@ static HARD_REG_SET xtensa_zero_call_used_regs (HARD_REG_SET); #undef TARGET_ZERO_CALL_USED_REGS #define TARGET_ZERO_CALL_USED_REGS xtensa_zero_call_used_regs +#undef TARGET_MD_ASM_ADJUST +#define TARGET_MD_ASM_ADJUST xtensa_md_asm_adjust + struct gcc_target targetm = TARGET_INITIALIZER; @@ -5648,4 +5655,63 @@ xtensa_zero_call_used_regs (HARD_REG_SET selected_regs) return selected_regs; } +/* Implement TARGET_MD_ASM_ADJUST. + + If either TARGET_CONST16 or TARGET_AUTO_LITPOOLS is enabled, the 'g'- + constraint (based on general_operand()) accepts any integer constant, + but if neither it limits within signed 12 bit by + TARGET_LEGITIMATE_CONSTANT_P(). + This behavior is not reasonable and can be addressed by prepending an + 'n'-constraint to the 'g' during the RTL generation, if necessary. */ + +static rtx_insn * +xtensa_md_asm_adjust (vec &outputs ATTRIBUTE_UNUSED, + vec &inputs ATTRIBUTE_UNUSED, + vec &input_modes ATTRIBUTE_UNUSED, + vec &constraints, + vec &uses ATTRIBUTE_UNUSED, + vec &clobbers ATTRIBUTE_UNUSED, + HARD_REG_SET &clobbered_regs ATTRIBUTE_UNUSED, + location_t loc ATTRIBUTE_UNUSED) +{ + size_t n, l; + const char *p; + int c; + char *modified, *q; + + if (!TARGET_CONST16 && !TARGET_AUTO_LITPOOLS) + for (auto &constraint : constraints) + { + /* Count the number of 'g'-constraints in each constraint string. */ + for (n = 0, p = constraint; (c = *p); p += CONSTRAINT_LEN (c, p)) + if (c == 'g') + ++n; + if (n == 0) + continue; + + /* If the constraint string contains 'g'-constraints, then each + 'g' is prefixed with an 'n'-constraint to form a new constraint + string. */ + n += strlen (constraint); + modified = (char *)ggc_alloc_atomic (n + 1); + for (p = constraint, q = modified; (c = *p); ) + if (c == 'g') + q[0] = 'n', q[1] = 'g', ++p, q += 2; + else + if ((l = CONSTRAINT_LEN (c, p)) > 1) + memcpy (q, p, l), p += l, q += l; + else + *q++ = *p++; + *q = '\0'; + if (dump_file) + fprintf (dump_file, + "xtensa_md_asm_adjust: " + "The constraint \"%s\" contains 'g's, so modify it to " + "\"%s\".\n", constraint, modified); + constraint = modified; + } + + return NULL; +} + #include "gt-xtensa.h" From 1eefa6e0c84e3008ed7ac44d08a8e5206038fb33 Mon Sep 17 00:00:00 2001 From: Takayuki 'January June' Suwa Date: Fri, 19 Sep 2025 21:24:27 +0900 Subject: [PATCH 178/216] xtensa: Make large CONST_INT legitimate until the postreload pass Generally, RISC machines only have a limited bit width for integer constant immediate values, and it is common to implement TARGET_LEGITIMATE_CONSTANT_P() for their representation. However, by making bare CONST_INTs less visible in RTL, some optimizers may miss out on opportunities. - Operands with the nonmemory/immediate_operand() predicates never accept constants that TARGET_LEGITIMATE_CONSTANT_P() rejects, so templates containing their predicates may unintentionally not be used for insns containing such constants during the RTL generation or instruction combination passes - Some optimizers only accept bare CONST_INTs and may not consider their equivalents (such as literal pool entry references) at all (Unrelated to this patch, but perhaps even worse, some optimizers such as RTL ifcvt, assume that not only the constant format but also the insn format is CISC-like) As a clear example, the effect of constant-anchored optimization during the postreload pass can be seen by compiling the following with and without -mconst16 or -mauto-litpools: /* example */ void test(int a[4]) { a[0] = 0xDEADFACE; a[1] = 0xDEADFACE - 1; a[2] = 0xDEADFACE - 2; a[3] = 0xDEADFACE + 254; } ;; without -mauto-litpools .literal_position .literal .LC0, -559023410 .literal .LC1, -559023411 .literal .LC2, -559023412 .literal .LC3, -559023156 test: entry sp, 32 l32r a8, .LC0 s32i.n a8, a2, 0 l32r a8, .LC1 s32i.n a8, a2, 4 l32r a8, .LC2 s32i.n a8, a2, 8 l32r a8, .LC3 s32i.n a8, a2, 12 retw.n ;; with -mauto-litpools test: entry sp, 32 movi a8, -559023410 s32i.n a8, a2, 0 addi.n a8, a8, -1 ;; const-anchored s32i.n a8, a2, 4 addi.n a8, a8, -1 ;; const-anchored s32i.n a8, a2, 8 addmi a8, a8, 0x100 :: const-anchored s32i.n a8, a2, 12 retw.n Therefore, we aim to overcome the above obstacles by introducing a tweak that legitimates a full-bitwidth CONST_INT regardless of other conditions until a specific RTL path is reached. Then, the most appropriate point to switch the behavior of TARGET_LEGITIMATE_CONSTANT_P() would probably be just before reload/LRA, but as mentioned earlier, there is an optimizer that should be utilized in postreload, so the switchover point will be just after that. This patch introduces a new target-specific pass called "xt_largeconst" to implement all of the above, which will also serves as a host for other future optimizers related to large constants, such as "constantsynth". As a result, this patch also resolves some of the issues mentioned in the previous patch notes: - B[GE/LT]U branch instructions with immediate values of 32768 or 65536 cannot be emitted - Insn combination templates matching the CLAMPS instruction cannot be matched against large upper and lower bounds gcc/ChangeLog: * config/xtensa/constraints.md (Y): Change to reference xtensa_postreload_completed_p() instead of xtensa_split1_finished_p(). * config/xtensa/predicates.md (move_operand): Ditto. * config/xtensa/t-xtensa (PASSES_EXTRA): Add xtensa-passes.def as target-specific pass description. * config/xtensa/xtensa-passes.def: New definition file that inserts pass_xtensa_largeconst after pass_postreload_cse. * config/xtensa/xtensa-protos.h (xtensa_split1_finished_p): Remove. (xtensa_postreload_completed_p, make_pass_xtensa_largeconst): New function prototypes. * config/xtensa/xtensa.cc (machine_function): Add a new member "postreload_completed". (xtensa_emit_move_sequence): Change to reference xtensa_postreload_completed_p() instead of can_create_pseudo_p(). (xtensa_split1_finished_p): Remove. (xtensa_postreload_completed_p): New function. (xtensa_legitimate_constant_p): Change to also consider xtensa_postreload_completed_p(). (litpool_set_src_1, litpool_set_src, do_largeconst, rest_of_handle_largeconst): New sub-functions for pass_xtensa_largeconst. (pass_data_xtensa_largeconst, pass_xtensa_largeconst): New target-specific pass definition. (make_pass_xtensa_largeconst): New function called by the pass manager. * config/xtensa/xtensa.md (The auxiliary define_split for movdi_internal): Change to reference xtensa_postreload_completed_p() instead of xtensa_split1_finished_p(). (The first of three auxiliary define_splits for mov[sh]i_internal): Remove. gcc/testsuite/ChangeLog: * gcc.target/xtensa/BGEUI-BLTUI-32k-64k.c: Disable optimizations and modify to also verify RTL dump in the "expand" pass. --- gcc/config/xtensa/constraints.md | 3 +- gcc/config/xtensa/predicates.md | 2 +- gcc/config/xtensa/t-xtensa | 2 + gcc/config/xtensa/xtensa-passes.def | 20 ++ gcc/config/xtensa/xtensa-protos.h | 3 +- gcc/config/xtensa/xtensa.cc | 189 +++++++++++++++++- gcc/config/xtensa/xtensa.md | 14 +- .../gcc.target/xtensa/BGEUI-BLTUI-32k-64k.c | 3 +- 8 files changed, 212 insertions(+), 24 deletions(-) create mode 100644 gcc/config/xtensa/xtensa-passes.def diff --git a/gcc/config/xtensa/constraints.md b/gcc/config/xtensa/constraints.md index 727ec1e2c202..08fdab1c2e7f 100644 --- a/gcc/config/xtensa/constraints.md +++ b/gcc/config/xtensa/constraints.md @@ -121,7 +121,8 @@ (ior (and (match_code "const_int,const_double,const,symbol_ref,label_ref") (match_test "TARGET_AUTO_LITPOOLS")) (and (match_code "const_int") - (match_test "! xtensa_split1_finished_p ()")))) + (match_test "!TARGET_CONST16 + && ! xtensa_postreload_completed_p ()")))) ;; Memory constraints. diff --git a/gcc/config/xtensa/predicates.md b/gcc/config/xtensa/predicates.md index 20160a4c4e5f..62c0f8aca208 100644 --- a/gcc/config/xtensa/predicates.md +++ b/gcc/config/xtensa/predicates.md @@ -147,7 +147,7 @@ (ior (and (match_code "const_int") (match_test "(GET_MODE_CLASS (mode) == MODE_INT && xtensa_simm12b (INTVAL (op))) - || ! xtensa_split1_finished_p ()")) + || ! xtensa_postreload_completed_p ()")) (and (match_code "const_int,const_double,const,symbol_ref,label_ref") (match_test "(TARGET_CONST16 || TARGET_AUTO_LITPOOLS) && CONSTANT_P (op)"))))) diff --git a/gcc/config/xtensa/t-xtensa b/gcc/config/xtensa/t-xtensa index 98f98e0d7361..d09d41ab37d4 100644 --- a/gcc/config/xtensa/t-xtensa +++ b/gcc/config/xtensa/t-xtensa @@ -23,3 +23,5 @@ $(out_object_file): gt-xtensa.h xtensa-dynconfig.o: $(srcdir)/config/xtensa/xtensa-dynconfig.cc $(COMPILE) $< $(POSTCOMPILE) + +PASSES_EXTRA += $(srcdir)/config/xtensa/xtensa-passes.def diff --git a/gcc/config/xtensa/xtensa-passes.def b/gcc/config/xtensa/xtensa-passes.def new file mode 100644 index 000000000000..3958957ff7fa --- /dev/null +++ b/gcc/config/xtensa/xtensa-passes.def @@ -0,0 +1,20 @@ +/* Description of target passes for Tensilica's Xtensa architecture. + Copyright (C) 2025 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +INSERT_PASS_AFTER (pass_postreload_cse, 1, pass_xtensa_largeconst); diff --git a/gcc/config/xtensa/xtensa-protos.h b/gcc/config/xtensa/xtensa-protos.h index 98e75c6a5356..c538e483cfc6 100644 --- a/gcc/config/xtensa/xtensa-protos.h +++ b/gcc/config/xtensa/xtensa-protos.h @@ -58,7 +58,7 @@ extern char *xtensa_emit_call (int, rtx *); extern char *xtensa_emit_sibcall (int, rtx *); extern bool xtensa_tls_referenced_p (rtx); extern enum rtx_code xtensa_shlrd_which_direction (rtx, rtx); -extern bool xtensa_split1_finished_p (void); +extern bool xtensa_postreload_completed_p (void); extern void xtensa_split_DI_reg_imm (rtx *); extern char *xtensa_bswapsi2_output (rtx_insn *, const char *); @@ -82,5 +82,6 @@ extern void xtensa_adjust_reg_alloc_order (void); extern enum reg_class xtensa_regno_to_class (int regno); extern HOST_WIDE_INT xtensa_initial_elimination_offset (int from, int to); extern const char **xtensa_get_config_strings (void); +extern rtl_opt_pass *make_pass_xtensa_largeconst (gcc::context *); #endif /* !__XTENSA_PROTOS_H__ */ diff --git a/gcc/config/xtensa/xtensa.cc b/gcc/config/xtensa/xtensa.cc index 00c36915795a..4b44d35054b7 100644 --- a/gcc/config/xtensa/xtensa.cc +++ b/gcc/config/xtensa/xtensa.cc @@ -111,6 +111,7 @@ struct GTY(()) machine_function rtx last_logues_a9_content; HARD_REG_SET eliminated_callee_saved; hash_map *litpool_usage; + bool postreload_completed; }; static void xtensa_option_override (void); @@ -1342,7 +1343,7 @@ xtensa_emit_move_sequence (rtx *operands, machine_mode mode) rtx src = operands[1]; if (CONSTANT_P (src) - && (! CONST_INT_P (src) || ! xtensa_simm12b (INTVAL (src)))) + && ! (CONST_INT_P (src) && xtensa_simm12b (INTVAL (src)))) { rtx dst = operands[0]; @@ -1366,8 +1367,8 @@ xtensa_emit_move_sequence (rtx *operands, machine_mode mode) return 1; } - if (! TARGET_AUTO_LITPOOLS && ! TARGET_CONST16 - && ! (CONST_INT_P (src) && can_create_pseudo_p ())) + if (!TARGET_CONST16 && !TARGET_AUTO_LITPOOLS + && (! CONST_INT_P (src) || xtensa_postreload_completed_p ())) { src = force_const_mem (SImode, src); operands[1] = src; @@ -2623,12 +2624,12 @@ xtensa_shlrd_which_direction (rtx op0, rtx op1) } -/* Return true after "split1" pass has been finished. */ +/* Return true after "postreload" pass has been completed. */ bool -xtensa_split1_finished_p (void) +xtensa_postreload_completed_p (void) { - return cfun && (cfun->curr_properties & PROP_rtl_split_insns); + return cfun && cfun->machine->postreload_completed; } @@ -5143,7 +5144,8 @@ static bool xtensa_legitimate_constant_p (machine_mode mode ATTRIBUTE_UNUSED, rtx x) { if (CONST_INT_P (x)) - return TARGET_AUTO_LITPOOLS || TARGET_CONST16 + return TARGET_CONST16 || TARGET_AUTO_LITPOOLS + || ! xtensa_postreload_completed_p () || xtensa_simm12b (INTVAL (x)); return !xtensa_tls_referenced_p (x); @@ -5714,4 +5716,177 @@ xtensa_md_asm_adjust (vec &outputs ATTRIBUTE_UNUSED, return NULL; } +/* Machine-specific pass in order to replace all assignments of large + integer constants (i.e., that do not fit into the immediate field which + can hold signed 12 bits) with other legitimate forms, specifically, + references to literal pool entries, when neither TARGET_CONST16 nor + TARGET_AUTO_LITPOOLS is enabled. + + This pass also serves as a place to provide other optimizations, for + example, converting constants that are too large to fit into their + immediate fields into other representations that are more efficient + from a particular point of view. */ + +namespace +{ + +/* Replace the source of [SH]Imode allocation whose value does not fit + into signed 12 bits with a reference to litpool entry. */ + +static bool +litpool_set_src_1 (rtx_insn *insn, rtx set, bool in_group) +{ + rtx dest, src; + enum machine_mode mode; + + if (REG_P (dest = SET_DEST (set)) + && ((mode = GET_MODE (dest)) == SImode || mode == HImode) + && CONST_INT_P (src = SET_SRC (set)) + && ! xtensa_simm12b (INTVAL (src))) + { + remove_reg_equal_equiv_notes (insn); + validate_change (insn, &SET_SRC (set), + force_const_mem (mode, src), in_group); + add_reg_note (insn, REG_EQUIV, copy_rtx (src)); + return true; + } + + return false; +} + +static bool +litpool_set_src (rtx_insn *insn) +{ + rtx pat = PATTERN (insn); + int i; + bool changed; + + switch (GET_CODE (pat)) + { + case SET: + return litpool_set_src_1 (insn, pat, 0); + + /* There should be no assignments within PARALLEL in this target, + but just to be sure. */ + case PARALLEL: + changed = false; + for (i = 0; i < XVECLEN (pat, 0); ++i) + if (GET_CODE (XVECEXP (pat, 0, i)) == SET + && litpool_set_src_1 (insn, XVECEXP (pat, 0, i), 1)) + changed = true; + if (changed) + apply_change_group (); + return changed; + + default: + return false; + } +} + +/* Replace all occurrences of large immediate values in assignment sources + that were permitted for convenience with their legitimate forms, or + more efficient representations if possible. */ + +static void +do_largeconst (void) +{ + bool replacing_required = !TARGET_CONST16 && !TARGET_AUTO_LITPOOLS; + rtx_insn *insn; + + for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) + if (NONJUMP_INSN_P (insn)) + { + /* Replace the source of [SH]Imode allocation whose value does not + fit into signed 12 bits with a reference to litpool entry. */ + if (replacing_required) + litpool_set_src (insn); + } +} + +/* Convert assignments for large constants. */ + +static unsigned int +rest_of_handle_largeconst (void) +{ + /* Until this flag becomes true, all RTL expressions that assign integer + (not symbol nor floating-point) constants to [SH]Imode registers are + allowed regardless of the values' bit width or configurations of + TARGET_CONST16 and TARGET_AUTO_LITPOOLS. This trick avoids some of + the problems that can arise from blindly following the result of + TARGET_LEGITIMATE_CONSTANT_P() either directly or via general/ + immediate_operands(). + + For example, the "cbranchsi4" MD expansion pattern in this target has + "nonmemory_operand" predicate specified for operand 2, which is + reasonable for most RISC machines where only registers or small set of + constants can be compared. Incidentally, the Xtensa ISA has branch + instructions that perform GEU/LTU comparisons with 32768 or 65536, but + such constants are previously not accepted by "nonmemory_operand" + because the predicate is internally constrained to "immediate_operand" + which is essentially TARGET_LEGITIMATE_CONSTANT_P(). It would not be + impossible to describe a peculiar predicate or condition in the pattern + to get around this, but it would be "elephant" (inelegant). + Fortunately, this issue will be salvaged at higher optimization levels + in subsequent RTL instruction combination pass, but these instructions + are suppose to be emitted properly without any optimization. + + Also, there are not a few cases where optimizers only accept bare + CONST_INTs and do not consider that references to pooled constants + are semantically equivalent to bare ones. A good example of this is + a certain constant anchoring optimization performed in the postreload + pass, which requires anchoring constants to be bare, not pooled. + + In any case, once postreload is complete, the trick described above + is no longer needed, so such assignments must now be all converted + back to references to literal pool entries (the original legitimate + form) if neither TARGET_CONST16 nor TARGET_AUTO_LITPOOLS is enabled. + See the function do_largeconst() called below. */ + cfun->machine->postreload_completed = true; + + df_set_flags (DF_DEFER_INSN_RESCAN); + df_note_add_problem (); + df_analyze (); + + /* Do the process. */ + do_largeconst (); + + return 0; +} + +const pass_data pass_data_xtensa_largeconst = +{ + RTL_PASS, /* type */ + "xt_largeconst", /* name */ + OPTGROUP_NONE, /* optinfo_flags */ + TV_MACH_DEP, /* tv_id */ + 0, /* properties_required */ + 0, /* properties_provided */ + 0, /* properties_destroyed */ + 0, /* todo_flags_start */ + TODO_df_finish, /* todo_flags_finish */ +}; + +class pass_xtensa_largeconst : public rtl_opt_pass +{ +public: + pass_xtensa_largeconst (gcc::context *ctxt) + : rtl_opt_pass (pass_data_xtensa_largeconst, ctxt) + {} + + /* opt_pass methods: */ + unsigned int execute (function *) final override + { + return rest_of_handle_largeconst (); + } + +}; // class pass_xtensa_largeconst + +} // anon namespace + +rtl_opt_pass * +make_pass_xtensa_largeconst (gcc::context *ctxt) +{ + return new pass_xtensa_largeconst (ctxt); +} + #include "gt-xtensa.h" diff --git a/gcc/config/xtensa/xtensa.md b/gcc/config/xtensa/xtensa.md index 52ffb161c0f5..9a0c631dc3f4 100644 --- a/gcc/config/xtensa/xtensa.md +++ b/gcc/config/xtensa/xtensa.md @@ -1268,7 +1268,7 @@ [(set (match_operand:DI 0 "register_operand") (match_operand:DI 1 "const_int_operand"))] "!TARGET_CONST16 - && ! xtensa_split1_finished_p ()" + && ! xtensa_postreload_completed_p ()" [(set (match_dup 0) (match_dup 1)) (set (match_dup 2) @@ -1312,18 +1312,6 @@ } [(set_attr "mode" "SI")]) -(define_split - [(set (match_operand:SHI 0 "register_operand") - (match_operand:SHI 1 "const_int_operand"))] - "!TARGET_CONST16 && !TARGET_AUTO_LITPOOLS - && ! xtensa_split1_finished_p () - && ! xtensa_simm12b (INTVAL (operands[1]))" - [(set (match_dup 0) - (match_dup 1))] -{ - operands[1] = force_const_mem (mode, operands[1]); -}) - (define_split [(set (match_operand:SHI 0 "register_operand") (match_operand:SHI 1 "constantpool_operand"))] diff --git a/gcc/testsuite/gcc.target/xtensa/BGEUI-BLTUI-32k-64k.c b/gcc/testsuite/gcc.target/xtensa/BGEUI-BLTUI-32k-64k.c index 05873b896896..bd6bf5f2111c 100644 --- a/gcc/testsuite/gcc.target/xtensa/BGEUI-BLTUI-32k-64k.c +++ b/gcc/testsuite/gcc.target/xtensa/BGEUI-BLTUI-32k-64k.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2" } */ +/* { dg-options "-O0 -fdump-rtl-expand" } */ extern void foo(void); @@ -15,5 +15,6 @@ void BLTUI_test(unsigned int a) foo(); } +/* { dg-final { scan-rtl-dump-times "ubtrue" 2 "expand" } } */ /* { dg-final { scan-assembler-times "bgeui" 1 } } */ /* { dg-final { scan-assembler-times "bltui" 1 } } */ From 4864f24c86e1bfd8c34c74aed5ec73dcd98151b1 Mon Sep 17 00:00:00 2001 From: Takayuki 'January June' Suwa Date: Fri, 19 Sep 2025 21:25:10 +0900 Subject: [PATCH 179/216] xtensa: Optimize assignment of certain constants to hardware FP registers This patch introduces an optimization that replaces assignments of signed 12-bit integer values divided by 0th through 15th power of two to hardware FP registers with assignments of that integer values to address (GP) registers followed by negatively-scaled floating-point conversion instructions. For example, 0.12005615234375f is exactly equal to (1967.f / (1 << 14)), so we can emit such as: movi a9, 1967 float.s f0, a9, 14 if such conversion reduces costs. gcc/ChangeLog: * config/xtensa/xtensa.cc (xt_full_rtx_costs): New struct, derived from full_rtx_costs. (FPreg_neg_scaled_simm12b_1, FPreg_neg_scaled_simm12b): New worker functions. (do_largeconst): Add a call to FPreg_neg_scaled_simm12b() to the insn enumeration loop. --- gcc/config/xtensa/xtensa.cc | 170 ++++++++++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) diff --git a/gcc/config/xtensa/xtensa.cc b/gcc/config/xtensa/xtensa.cc index 4b44d35054b7..c878f1183c6b 100644 --- a/gcc/config/xtensa/xtensa.cc +++ b/gcc/config/xtensa/xtensa.cc @@ -5730,6 +5730,168 @@ xtensa_md_asm_adjust (vec &outputs ATTRIBUTE_UNUSED, namespace { +/* Cheap full_rtx_costs derivative for concise handling of insn sequence + costs. */ + +struct xt_full_rtx_costs : public full_rtx_costs +{ + inline xt_full_rtx_costs () + { + init_costs_to_zero (this); + } + + /* "Less-than" cost comparison. */ + inline bool operator< (xt_full_rtx_costs &rhs) + { + return costs_lt_p (this, &rhs, !optimize_size); + } + + /* Accumulate the costs of a specified insn. */ + xt_full_rtx_costs &operator+= (rtx_insn *insn) + { + speed += xtensa_insn_cost (insn, true); + size += xtensa_insn_cost (insn, false); + return *this; + } + + /* Create a new instance from the specified insn sequence. */ + explicit xt_full_rtx_costs (rtx_insn *seq) + : xt_full_rtx_costs () + { + for (; seq; seq = NEXT_INSN (seq)) + *this += seq; + } + + /* superior/inferior parts of the costs. */ + inline int major () + { + return optimize_size ? size : speed; + } + inline int minor () + { + return optimize_size ? speed : size; + } +}; + +/* Optimize assignment of negatively-scaled (up to the minus 15th power + of two) signed 12-bit integer immediate values to hardware floating- + point registers. For example, 0.12005615234375f is exactly equal to + (1967.f / (1 << 14)), so we can emit such as: + movi a9, 1967 + float.s f0, a9, 14 + if such conversion reduces costs. */ + +static bool +FPreg_neg_scaled_simm12b_1 (const REAL_VALUE_TYPE *rval, + HOST_WIDE_INT &v, int &scale) +{ + REAL_VALUE_TYPE r; + int shift; + + /* Non-zero finite values can only be accepted. */ + if (! real_isfinite (rval) || rval->cl == rvc_zero) + return false; + + /* Check whether the value multiplied by 32768 is an exact integer and + the result after truncating the trailing '0' bits fits into a signed + 12-bit. */ + real_ldexp (&r, rval, 15); + if (! real_isinteger (&r, &v) + || ! xtensa_simm12b (v >>= (shift = MIN (ctz_hwi (v), 15)))) + return false; + + scale = shift - 15; + return true; +} + +static bool +FPreg_neg_scaled_simm12b (rtx_insn *insn) +{ + rtx pat, dest, src, pat_1, dest_1, note, dest_2, pat_2; + HOST_WIDE_INT v; + int scale; + rtx_insn *next, *last, *seq; + REAL_VALUE_TYPE r; + + /* It matches RTL expressions of the following format: + (set (reg:SF gpr) (const_double:SF cst)) + (set (reg:SF fpr) (reg:SF gpr)) + REG_DEAD (reg:SF gpr) + where cst is a negatively-scaled signed 12-bit integer immediate + value. */ + if (TARGET_HARD_FLOAT && !TARGET_CONST16 + && GET_CODE (pat = PATTERN (insn)) == SET + && REG_P (dest = SET_DEST (pat)) && GP_REG_P (REGNO (dest)) + && GET_MODE (dest) == SFmode + && CONST_DOUBLE_P (src = avoid_constant_pool_reference (SET_SRC (pat))) + && GET_MODE (src) == SFmode + && FPreg_neg_scaled_simm12b_1 (CONST_DOUBLE_REAL_VALUE (src), + v, scale) + && (next = next_nonnote_nondebug_insn (insn)) + && NONJUMP_INSN_P (next) + && GET_CODE (pat_1 = PATTERN (next)) == SET + && REG_P (dest_1 = SET_DEST (pat_1)) && FP_REG_P (REGNO (dest_1)) + && GET_MODE (dest_1) == SFmode + && rtx_equal_p (SET_SRC (pat_1), dest) + && (note = find_reg_note (next, REG_DEAD, dest))) + { + /* Estimate the costs of two matching insns. */ + xt_full_rtx_costs costs; + costs += insn, costs += next; + + /* Prepare alternative insns and estimate their costs. */ + start_sequence (); + emit_insn (gen_rtx_SET (dest_2 = gen_rtx_REG (SImode, REGNO (dest)), + GEN_INT (v))); + pat_2 = gen_rtx_FLOAT (SFmode, dest_2); + if (scale < 0) + { + real_ldexp (&r, &dconst1, scale); + pat_2 = gen_rtx_MULT (SFmode, pat_2, + const_double_from_real_value (r, SFmode)); + } + last = emit_insn (gen_rtx_SET (dest_1, pat_2)); + xt_full_rtx_costs costs_1 (seq = end_sequence ()); + + /* If the alternative is more cost effective, it replaces the original + insns. */ + if (costs_1 < costs) + { + if (dump_file) + { + fputs ("FPreg_neg_scaled_simm12b: ", dump_file); + dump_value_slim (dump_file, src, 0); + fprintf (dump_file, + "f = (" HOST_WIDE_INT_PRINT_DEC ".f/(1<<%d))\n", + v, -scale); + dump_insn_slim (dump_file, insn); + dump_insn_slim (dump_file, next); + } + remove_reg_equal_equiv_notes (insn); + validate_change (insn, &PATTERN (insn), + PATTERN (seq), 0); + remove_reg_equal_equiv_notes (next); + remove_note (next, note); + validate_change (next, &PATTERN (next), + PATTERN (last), 0); + add_reg_note (next, REG_EQUIV, src); + add_reg_note (next, REG_DEAD, dest_2); + if (dump_file) + { + fprintf (dump_file, + "FPreg_neg_scaled_simm12b: costs (%d,%d) -> (%d,%d)\n", + costs.major (), costs.minor (), + costs_1.major (), costs_1.minor ()); + dump_insn_slim (dump_file, insn); + dump_insn_slim (dump_file, next); + } + return true; + } + } + + return false; +} + /* Replace the source of [SH]Imode allocation whose value does not fit into signed 12 bits with a reference to litpool entry. */ @@ -5791,11 +5953,19 @@ static void do_largeconst (void) { bool replacing_required = !TARGET_CONST16 && !TARGET_AUTO_LITPOOLS; + bool optimize_enabled = optimize && !optimize_debug; rtx_insn *insn; for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) if (NONJUMP_INSN_P (insn)) { + /* Optimize assignment of negatively scaled (up to the minus + 15th power of two) signed 12-bit immediate values to hardware + floating-point registers. */ + if (optimize_enabled + && FPreg_neg_scaled_simm12b (insn)) + continue; + /* Replace the source of [SH]Imode allocation whose value does not fit into signed 12 bits with a reference to litpool entry. */ if (replacing_required) From b6af5f46e35d0201dd43d0d7fd5c1fbcbf2177eb Mon Sep 17 00:00:00 2001 From: Takayuki 'January June' Suwa Date: Wed, 8 Oct 2025 10:27:48 +0900 Subject: [PATCH 180/216] xtensa: Change the splitting of D[IF]mode constant assignments to be implemented in xt_largeconst instead of define_split This patch moves the process of splitting D[IF]mode constant assignments into SImode ones from the define_split implementation after reloading to processing within the "xt_largeconst" target-specific pass. It also converts SFmode constant assignments into bit-equivalent SImode ones. This allows these assignments to be processed by the "constantsynth" optimization, which will be reimplemented later. gcc/ChangeLog: * config/xtensa/xtensa-protos.h (xtensa_split_DI_reg_imm): Remove. * config/xtensa/xtensa.cc (xtensa_split_DI_reg_imm): Remove. (split_DI_SF_DF_const): New worker function. (do_largeconst): Add a call to split_DI_SF_DF_const() to the insn enumeration loop. * config/xtensa/xtensa.md (movdi): Remove split code when the source is constant. (movdi_internal): Add a new constraint pair (a, Y) to the second of the existing constraint alternatives. (The auxiliary define_split for movdi_internal): Remove. --- gcc/config/xtensa/xtensa-protos.h | 1 - gcc/config/xtensa/xtensa.cc | 128 +++++++++++++++++++++++++----- gcc/config/xtensa/xtensa.md | 39 ++------- 3 files changed, 113 insertions(+), 55 deletions(-) diff --git a/gcc/config/xtensa/xtensa-protos.h b/gcc/config/xtensa/xtensa-protos.h index c538e483cfc6..562e4b9283b3 100644 --- a/gcc/config/xtensa/xtensa-protos.h +++ b/gcc/config/xtensa/xtensa-protos.h @@ -59,7 +59,6 @@ extern char *xtensa_emit_sibcall (int, rtx *); extern bool xtensa_tls_referenced_p (rtx); extern enum rtx_code xtensa_shlrd_which_direction (rtx, rtx); extern bool xtensa_postreload_completed_p (void); -extern void xtensa_split_DI_reg_imm (rtx *); extern char *xtensa_bswapsi2_output (rtx_insn *, const char *); #ifdef TREE_CODE diff --git a/gcc/config/xtensa/xtensa.cc b/gcc/config/xtensa/xtensa.cc index c878f1183c6b..110639f2218a 100644 --- a/gcc/config/xtensa/xtensa.cc +++ b/gcc/config/xtensa/xtensa.cc @@ -2633,27 +2633,6 @@ xtensa_postreload_completed_p (void) } -/* Split a DImode pair of reg (operand[0]) and const_int (operand[1]) into - two SImode pairs, the low-part (operands[0] and [1]) and the high-part - (operands[2] and [3]). */ - -void -xtensa_split_DI_reg_imm (rtx *operands) -{ - rtx lowpart, highpart; - - if (WORDS_BIG_ENDIAN) - split_double (operands[1], &highpart, &lowpart); - else - split_double (operands[1], &lowpart, &highpart); - - operands[3] = highpart; - operands[2] = gen_highpart (SImode, operands[0]); - operands[1] = lowpart; - operands[0] = gen_lowpart (SImode, operands[0]); -} - - /* Return the asm output string of bswapsi2_internal insn pattern. It does this by scanning backwards for the BB from the specified insn, and if an another bswapsi2_internal is found, it omits the instruction @@ -5892,6 +5871,102 @@ FPreg_neg_scaled_simm12b (rtx_insn *insn) return false; } +/* Split DI/SF/DFmode constant assignments into pairs of SImode ones. This + is also the pre-processing for constantsynth optimization that follows + immediately after. + + Note that all constant values and assignments are treated as SImode + because: + + - Synthesis methods rely on SImode operations + - SImode assignments may be shorter + - More opportunity for sharing literal pool entries + + This behavior would be acceptable if TARGET_CAN_CHANGE_MODE_CLASS always + returned true (the current and default configuration). */ + +static bool +split_DI_SF_DF_const (rtx_insn *insn) +{ + rtx pat, dest, src, dest0, dest1, src0, src1, src0c, src1c; + int regno; + + if (GET_CODE (pat = PATTERN (insn)) != SET + || ! REG_P (dest = SET_DEST (pat)) || ! GP_REG_P (regno = REGNO (dest))) + return false; + + /* It is more efficient to assign SFmode literal constants using their + bit-equivalent SImode ones, thus we convert them so. */ + src = avoid_constant_pool_reference (SET_SRC (pat)); + if (GET_MODE (dest) == SFmode + && CONST_DOUBLE_P (src) && GET_MODE (src) == SFmode) + { + long l; + REAL_VALUE_TO_TARGET_SINGLE (*CONST_DOUBLE_REAL_VALUE (src), l); + src0 = GEN_INT ((int32_t)l), dest0 = gen_rtx_REG (SImode, regno); + if (dump_file) + { + fputs ("split_DI_SF_DF_const: ", dump_file); + dump_value_slim (dump_file, src, 0); + fprintf (dump_file, + "f -> " HOST_WIDE_INT_PRINT_DEC " (" + HOST_WIDE_INT_PRINT_HEX ")\n", + INTVAL (src0), INTVAL (src0)); + } + src0c = NULL_RTX; + if (!TARGET_CONST16 && !TARGET_AUTO_LITPOOLS + && ! xtensa_simm12b (INTVAL (src0))) + src0c = src0, src0 = force_const_mem (SImode, src0); + remove_reg_equal_equiv_notes (insn); + validate_change (insn, &PATTERN (insn), gen_rtx_SET (dest0, src0), 0); + if (src0c) + add_reg_note (insn, REG_EQUIV, copy_rtx (src0c)); + return true; + } + + /* Splitting a D[IF]mode literal constant into two with split_double() + results in a pair of CONST_INTs, so they are assigned in SImode + regardless of the original source mode. */ + if ((GET_MODE (dest) == DImode && CONST_INT_P (src)) + || (GET_MODE (dest) == DFmode + && CONST_DOUBLE_P (src) && GET_MODE (src) == DFmode)) + { + dest0 = gen_rtx_REG (SImode, regno); + dest1 = gen_rtx_REG (SImode, regno + 1); + split_double (src, &src0, &src1); + if (dump_file) + { + fputs ("split_DI_SF_DF_const: ", dump_file); + dump_value_slim (dump_file, src, 0); + fprintf (dump_file, + " -> " HOST_WIDE_INT_PRINT_DEC " (" + HOST_WIDE_INT_PRINT_HEX "), " + HOST_WIDE_INT_PRINT_DEC " (" + HOST_WIDE_INT_PRINT_HEX ")\n", + INTVAL (src0), INTVAL (src0), + INTVAL (src1), INTVAL (src1)); + } + src1c = src0c = NULL_RTX; + if (!TARGET_CONST16 && !TARGET_AUTO_LITPOOLS) + { + if (! xtensa_simm12b (INTVAL (src0))) + src0c = src0, src0 = force_const_mem (SImode, src0); + if (! xtensa_simm12b (INTVAL (src1))) + src1c = src1, src1 = force_const_mem (SImode, src1); + } + remove_reg_equal_equiv_notes (insn); + validate_change (insn, &PATTERN (insn), gen_rtx_SET (dest0, src0), 0); + if (src0c) + add_reg_note (insn, REG_EQUIV, copy_rtx (src0c)); + insn = emit_insn_after (gen_rtx_SET (dest1, src1), insn); + if (src1c) + add_reg_note (insn, REG_EQUIV, copy_rtx (src1c)); + return true; + } + + return false; +} + /* Replace the source of [SH]Imode allocation whose value does not fit into signed 12 bits with a reference to litpool entry. */ @@ -5956,6 +6031,11 @@ do_largeconst (void) bool optimize_enabled = optimize && !optimize_debug; rtx_insn *insn; + /* Verify the legitimacy of replacing constant assignments in + DI/SF/DFmode with those in SImode. */ + gcc_assert (targetm.can_change_mode_class + == hook_bool_mode_mode_reg_class_t_true); + for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) if (NONJUMP_INSN_P (insn)) { @@ -5970,6 +6050,12 @@ do_largeconst (void) fit into signed 12 bits with a reference to litpool entry. */ if (replacing_required) litpool_set_src (insn); + + /* Split DI/SF/DFmode constant assignments into pairs of SImode + ones. This is also the pre-processing for constantsynth opti- + mization that follows immediately after. */ + if (replacing_required) + split_DI_SF_DF_const (insn); } } diff --git a/gcc/config/xtensa/xtensa.md b/gcc/config/xtensa/xtensa.md index 9a0c631dc3f4..a5c8a66aafb2 100644 --- a/gcc/config/xtensa/xtensa.md +++ b/gcc/config/xtensa/xtensa.md @@ -1219,22 +1219,8 @@ (match_operand:DI 1 "general_operand" ""))] "" { - if (CONSTANT_P (operands[1])) - { - /* Split in halves if 64-bit Const-to-Reg moves - because of offering further optimization opportunities. */ - if (register_operand (operands[0], DImode)) - { - rtx ops[4] = { operands[0], operands[1] }; - xtensa_split_DI_reg_imm (ops); - emit_move_insn (ops[0], ops[1]); - emit_move_insn (ops[2], ops[3]); - DONE; - } - - if (!TARGET_CONST16) - operands[1] = force_const_mem (DImode, operands[1]); - } + if (!TARGET_CONST16 && CONSTANT_P (operands[1])) + operands[1] = force_const_mem (DImode, operands[1]); if (!register_operand (operands[0], DImode) && !register_operand (operands[1], DImode)) @@ -1244,8 +1230,8 @@ }) (define_insn_and_split "movdi_internal" - [(set (match_operand:DI 0 "nonimmed_operand" "=a,W,a,a,U") - (match_operand:DI 1 "move_operand" "r,i,T,U,r"))] + [(set (match_operand:DI 0 "nonimmed_operand" "=a,a,W,a,a,U") + (match_operand:DI 1 "move_operand" "r,Y,i,T,U,r"))] "register_operand (operands[0], DImode) || register_operand (operands[1], DImode)" "#" @@ -1260,22 +1246,9 @@ std::swap (operands[2], operands[3]); } } - [(set_attr "type" "move,move,load,load,store") + [(set_attr "type" "move,load,move,load,load,store") (set_attr "mode" "DI") - (set_attr "length" "6,12,6,6,6")]) - -(define_split - [(set (match_operand:DI 0 "register_operand") - (match_operand:DI 1 "const_int_operand"))] - "!TARGET_CONST16 - && ! xtensa_postreload_completed_p ()" - [(set (match_dup 0) - (match_dup 1)) - (set (match_dup 2) - (match_dup 3))] -{ - xtensa_split_DI_reg_imm (operands); -}) + (set_attr "length" "6,6,12,6,6,6")]) ;; 32-bit Integer moves From 5ff9cd5f7fc0a8796bd3bd7d97ffd3acf3ecc063 Mon Sep 17 00:00:00 2001 From: Takayuki 'January June' Suwa Date: Wed, 8 Oct 2025 10:31:37 +0900 Subject: [PATCH 181/216] xtensa: constantsynth: Update to version 2 This patch completely replaces the existing "constantsynth" with a new implementation, which has become unsightly due to the extension. This new version offers the following benefits: - Independence from the insn splitting mechanism. No define_split descriptions are required - Resource saving as internally required information storage no longer persists across passes - The replacement of insns is based on the actual costs (for both size and speed) of the insns before and after the conversion, rather than on some arbitrary pre-determined ones - The replacing insn sequence is verified by formally evaluating the RTL expressions to see if it correctly computes the original constant value - Easy-to-understand/-add interface for constant synthesis methods The built-in synthesis methods are (supposedly) very effective, with 2 instructions for certain values and up to 5 instructions to cover all 32-bit values. /* example */ _Complex double test(int a[], float b[]) { a[0] = 2045 * 2045; a[1] = 0xDEADBEEF; a[2] = 0xDEADBEEF - 15; a[3] = 4182000; a[4] = 131071; a[5] = 293805; a[6] = 700972933; a[7] = -372738139; b[0] = 3.14159265359f; b[1] *= 0.12005615234375f; return 1-1i; } ;; result (-O2 -mextra-l32r-costs=5) test: entry sp, 32 movi a8, 0x7af float.s f1, a8, 14 movi a8, 0x7fd mull a8, a8, a8 lsi f0, a3, 4 s32i.n a8, a2, 0 movi.n a8, 0x57 addmi a8, a8, -0x1100 slli a8, a8, 17 addmi a8, a8, -0x4100 addi a8, a8, -17 s32i.n a8, a2, 4 addi a8, a8, -15 s32i.n a8, a2, 8 movi a8, 0x3fd slli a8, a8, 12 addi a8, a8, -16 s32i.n a8, a2, 12 movi.n a8, -1 srli a8, a8, 15 s32i.n a8, a2, 16 movi a8, 0x85 addmi a8, a8, 0x7f00 addx8 a8, a8, a8 s32i.n a8, a2, 20 movi a8, 0x539 slli a8, a8, 19 addi a8, a8, -123 s32i.n a8, a2, 24 movi a8, -0x2c7 slli a8, a8, 19 addmi a8, a8, 0x7800 addi a8, a8, -91 s32i.n a8, a2, 28 movi.n a8, 0x49 mul.s f0, f0, f1 addmi a8, a8, 0x4000 slli a8, a8, 16 addmi a8, a8, 0x1000 addi a8, a8, -37 s32i.n a8, a3, 0 ssi f0, a3, 4 movi a5, -0x401 movi a3, 0x3ff movi.n a2, 0 slli a3, a3, 20 movi.n a4, 0 slli a5, a5, 20 retw.n gcc/ChangeLog: * config/xtensa/xtensa-protos.h (xtensa_constantsynth): Remove. * config/xtensa/xtensa.cc (#include): Remove "context.h" and "pass_manager.h". (machine_function): Remove "litpool_usage" member. (xtensa_constantsynth_2insn, xtensa_constantsynth_rtx_SLLI, xtensa_constantsynth_rtx_ADDSUBX, xtensa_constantsynth): Remove. (constantsynth_method_lshr_m1, split_hwi_to_MOVI_ADDMI, constantsynth_method_16bits, constantsynth_method_32bits, constantsynth_method_square): New worker function related to constant synthesis methods. (constantsynth_method_info, constantsynth_methods): New structure representing the list of all constant synthesis methods. (constantsynth_info): New structure that stores internal information for "constantsynth". (constantsynth_pass1, verify_synth_seq, constantsynth_pass2): New functions that are the core of "constantsynth". (do_largeconst): Add a call to constantsynth_pass1() to the insn enumeration loop, and add a call to constantsynth_pass2() to the end of this function. * config/xtensa/xtensa.md (SHI): Remove. (The two auxiliary define_splits for mov[sh]i_internal): Remove. (The two auxiliary define_splits for movsf_internal): Remove. gcc/testsuite/ChangeLog: * gcc.target/xtensa/constsynth_2insns.c, gcc.target/xtensa/constsynth_3insns.c, gcc.target/xtensa/constsynth_double.c: Remove due to outdated. * gcc.target/xtensa/constsynthV2_O2_costs0.c, gcc.target/xtensa/constsynthV2_O2_costs5.c, gcc.target/xtensa/constsynthV2_Os.c: New. --- gcc/config/xtensa/xtensa-protos.h | 1 - gcc/config/xtensa/xtensa.cc | 655 ++++++++++++------ gcc/config/xtensa/xtensa.md | 51 -- .../xtensa/constsynthV2_O2_costs0.c | 19 + .../xtensa/constsynthV2_O2_costs5.c | 19 + .../gcc.target/xtensa/constsynthV2_Os.c | 23 + .../gcc.target/xtensa/constsynth_2insns.c | 44 -- .../gcc.target/xtensa/constsynth_3insns.c | 35 - .../gcc.target/xtensa/constsynth_double.c | 11 - 9 files changed, 500 insertions(+), 358 deletions(-) create mode 100644 gcc/testsuite/gcc.target/xtensa/constsynthV2_O2_costs0.c create mode 100644 gcc/testsuite/gcc.target/xtensa/constsynthV2_O2_costs5.c create mode 100644 gcc/testsuite/gcc.target/xtensa/constsynthV2_Os.c delete mode 100644 gcc/testsuite/gcc.target/xtensa/constsynth_2insns.c delete mode 100644 gcc/testsuite/gcc.target/xtensa/constsynth_3insns.c delete mode 100644 gcc/testsuite/gcc.target/xtensa/constsynth_double.c diff --git a/gcc/config/xtensa/xtensa-protos.h b/gcc/config/xtensa/xtensa-protos.h index 562e4b9283b3..404180723e4d 100644 --- a/gcc/config/xtensa/xtensa-protos.h +++ b/gcc/config/xtensa/xtensa-protos.h @@ -44,7 +44,6 @@ extern int xtensa_expand_scc (rtx *, machine_mode); extern int xtensa_expand_block_move (rtx *); extern int xtensa_expand_block_set (rtx *); extern void xtensa_split_operand_pair (rtx *, machine_mode); -extern int xtensa_constantsynth (rtx, rtx); extern int xtensa_emit_move_sequence (rtx *, machine_mode); extern rtx xtensa_copy_incoming_a7 (rtx); extern void xtensa_expand_nonlocal_goto (rtx *); diff --git a/gcc/config/xtensa/xtensa.cc b/gcc/config/xtensa/xtensa.cc index 110639f2218a..33e52a285b1e 100644 --- a/gcc/config/xtensa/xtensa.cc +++ b/gcc/config/xtensa/xtensa.cc @@ -58,8 +58,6 @@ along with GCC; see the file COPYING3. If not see #include "insn-attr.h" #include "tree-pass.h" #include "print-rtl.h" -#include "context.h" -#include "pass_manager.h" #include #include "opts.h" @@ -110,7 +108,6 @@ struct GTY(()) machine_function bool inhibit_logues_a1_adjusts; rtx last_logues_a9_content; HARD_REG_SET eliminated_callee_saved; - hash_map *litpool_usage; bool postreload_completed; }; @@ -1119,219 +1116,6 @@ xtensa_split_operand_pair (rtx operands[4], machine_mode mode) } -/* Try to emit insns to load src (either naked or pooled SI/SF constant) - into dst with synthesizing a such constant value from a sequence of - load-immediate / arithmetic ones, instead of a L32R instruction - (plus a constant in litpool). */ - -static int -xtensa_constantsynth_2insn (rtx dst, HOST_WIDE_INT srcval, - rtx (*gen_op)(rtx, HOST_WIDE_INT), - HOST_WIDE_INT op_imm) -{ - HOST_WIDE_INT imm = INT_MAX; - rtx x = NULL_RTX; - int shift, sqr; - - gcc_assert (REG_P (dst)); - - shift = exact_log2 (srcval + 1); - if (IN_RANGE (shift, 1, 31)) - { - imm = -1; - x = gen_lshrsi3 (dst, dst, GEN_INT (32 - shift)); - } - - shift = ctz_hwi (srcval); - if ((!x || (TARGET_DENSITY && ! IN_RANGE (imm, -32, 95))) - && xtensa_simm12b (srcval >> shift)) - { - imm = srcval >> shift; - x = gen_ashlsi3 (dst, dst, GEN_INT (shift)); - } - - if ((!x || (TARGET_DENSITY && ! IN_RANGE (imm, -32, 95))) - && IN_RANGE (srcval, (-2048 - 32768), (2047 + 32512))) - { - HOST_WIDE_INT imm0, imm1; - - if (srcval < -32768) - imm1 = -32768; - else if (srcval > 32512) - imm1 = 32512; - else - imm1 = srcval & ~255; - imm0 = srcval - imm1; - if (TARGET_DENSITY && imm1 < 32512 && IN_RANGE (imm0, 224, 255)) - imm0 -= 256, imm1 += 256; - imm = imm0; - x = gen_addsi3 (dst, dst, GEN_INT (imm1)); - } - - sqr = (int) floorf (sqrtf (srcval)); - if (TARGET_MUL32 && optimize_size - && !x && IN_RANGE (srcval, 0, (2047 * 2047)) && sqr * sqr == srcval) - { - imm = sqr; - x = gen_mulsi3 (dst, dst, dst); - } - - if (!x) - return 0; - - emit_move_insn (dst, GEN_INT (imm)); - emit_insn (x); - if (gen_op) - emit_move_insn (dst, gen_op (dst, op_imm)); - - return 1; -} - -static rtx -xtensa_constantsynth_rtx_SLLI (rtx reg, HOST_WIDE_INT imm) -{ - return gen_rtx_ASHIFT (SImode, reg, GEN_INT (imm)); -} - -static rtx -xtensa_constantsynth_rtx_ADDSUBX (rtx reg, HOST_WIDE_INT imm) -{ - return imm == 7 - ? gen_rtx_MINUS (SImode, gen_rtx_ASHIFT (SImode, reg, GEN_INT (3)), - reg) - : gen_rtx_PLUS (SImode, gen_rtx_ASHIFT (SImode, reg, - GEN_INT (floor_log2 (imm - 1))), - reg); -} - -int -xtensa_constantsynth (rtx dst, rtx src) -{ - HOST_WIDE_INT srcval; - static opt_pass *pass_rtl_split2; - int *pv; - - /* Derefer if src is litpool entry, and get integer constant value. */ - src = avoid_constant_pool_reference (src); - if (CONST_INT_P (src)) - srcval = INTVAL (src); - else if (CONST_DOUBLE_P (src) && GET_MODE (src) == SFmode) - { - long l; - - REAL_VALUE_TO_TARGET_SINGLE (*CONST_DOUBLE_REAL_VALUE (src), l); - srcval = (int32_t)l, src = GEN_INT (srcval); - } - else - return 0; - - /* Force dst as SImode. */ - gcc_assert (REG_P (dst)); - if (GET_MODE (dst) != SImode) - dst = gen_rtx_REG (SImode, REGNO (dst)); - - if (optimize_size) - { - /* During the first split pass after register allocation (rtl-split2), - record the occurrence of integer src value and do nothing. */ - if (!pass_rtl_split2) - pass_rtl_split2 = g->get_passes ()->get_pass_by_name ("rtl-split2"); - if (current_pass == pass_rtl_split2) - { - if (!cfun->machine->litpool_usage) - cfun->machine->litpool_usage = hash_map::create_ggc (); - if ((pv = cfun->machine->litpool_usage->get (src))) - ++*pv; - else - cfun->machine->litpool_usage->put (src, 1); - return 0; - } - - /* If two or more identical integer constants appear in the function, - the code size can be reduced by re-emitting a "move" (load from an - either litpool entry or relaxed immediate) instruction in SImode - to increase the chances that the litpool entry will be shared. */ - if (cfun->machine->litpool_usage - && (pv = cfun->machine->litpool_usage->get (src)) - && *pv > 1) - { - emit_move_insn (dst, src); - return 1; - } - } - - /* No need for synthesizing for what fits into MOVI instruction. */ - if (xtensa_simm12b (srcval)) - { - emit_move_insn (dst, src); - return 1; - } - - /* 2-insns substitution. */ - if ((optimize_size || (optimize && xtensa_extra_l32r_costs >= 1)) - && xtensa_constantsynth_2insn (dst, srcval, NULL, 0)) - return 1; - - /* 3-insns substitution. */ - if (optimize > 1 && !optimize_size && xtensa_extra_l32r_costs >= 2) - { - int shift, divisor; - - /* 2-insns substitution followed by SLLI. */ - shift = ctz_hwi (srcval); - if (IN_RANGE (shift, 1, 31) && - xtensa_constantsynth_2insn (dst, srcval >> shift, - xtensa_constantsynth_rtx_SLLI, - shift)) - return 1; - - /* 2-insns substitution followed by ADDX[248] or SUBX8. */ - if (TARGET_ADDX) - for (divisor = 3; divisor <= 9; divisor += 2) - if (srcval % divisor == 0 && - xtensa_constantsynth_2insn (dst, srcval / divisor, - xtensa_constantsynth_rtx_ADDSUBX, - divisor)) - return 1; - - /* loading simm12 followed by left/right bitwise rotation: - MOVI + SSAI + SRC. */ - if ((srcval & 0x001FF800) == 0 - || (srcval & 0x001FF800) == 0x001FF800) - { - int32_t v; - - for (shift = 1; shift < 12; ++shift) - { - v = (int32_t)(((uint32_t)srcval >> shift) - | ((uint32_t)srcval << (32 - shift))); - if (xtensa_simm12b(v)) - { - emit_move_insn (dst, GEN_INT (v)); - emit_insn (gen_rotlsi3 (dst, dst, GEN_INT (shift))); - return 1; - } - v = (int32_t)(((uint32_t)srcval << shift) - | ((uint32_t)srcval >> (32 - shift))); - if (xtensa_simm12b(v)) - { - emit_move_insn (dst, GEN_INT (v)); - emit_insn (gen_rotrsi3 (dst, dst, GEN_INT (shift))); - return 1; - } - } - } - } - - /* If cannot synthesize the value and also cannot fit into MOVI instruc- - tion, re-emit a "move" (load from an either litpool entry or relaxed - immediate) instruction in SImode in order to increase the chances that - the litpool entry will be shared. */ - emit_move_insn (dst, src); - return 1; -} - - /* Emit insns to move operands[1] into operands[0]. Return 1 if we have written out everything that needs to be done to do the move. Otherwise, return 0 and the caller will emit the move @@ -5967,6 +5751,432 @@ split_DI_SF_DF_const (rtx_insn *insn) return false; } +/* The constant-synthesis optimization (constantsynth for short). + + This is an optimization that attempts to replace the assignment of a + large integer (and some single-precision floating-point) constant value + that won't fit in the immediate field of a single machine instruction + with a smaller integer value that does fit, and a group of subsequent + instructions that derive the equivalent value through some arithmetic/ + bitwise operations. + + In Xtensa ISA, when TARGET_CONST16 is not enabled, such large immediate + assignments are typically treated as references to literal pool entries + using the L32R machine instruction, which has a one-clock delay to load + from memory, plus possible further implementation-dependent exclusive + clock penalties (aka. pipeline stall). + + To mitigate this, when optimization is enabled, we use several synthesis + methods to find alternative instruction sequences that do not exceed + the expected insn cost of single L32R instruction, based on either + clock cycle or # of bytes depending on whether optimizing for speed or + size. + + However, using L32R instructions has the advantage of sharing literal + pool entries when two or more identical immediate values are needed + within a function, this also needs to be considered especially when + optimizing for size. + + Below these are the definitions of each synthesis method. Each method + takes a destination register ('dest', which can be assumed to be SImode + address register) and an integer value, and returns an insn sequence + that sets the register to that value, if applicable. The framework + takes care of the rest of the heavy lifting, making it easy to test + and add new methods. + + The insn sequence returned by the methods must follow all of the rules + below: + + - The first insn assigns a signed 12-bit integer constant to 'dest' + - Each subsequent insn assigns to 'dest' the result of a unary or + binary operation between 'dest' and an integer constant or 'dest' + itself + - After the last insn is finished, the value of 'dest' will be equal + to the specified integer + + The sequence is verified to conform to the above rules by formally + evaluating its RTL expressions before substituting constant assignments. */ + +/* A method that generates two machine instructions to logically right- + shift minus one by a certain number of bits to synthesize a power of + two minus one (eg., 65535). */ + +static rtx_insn * +constantsynth_method_lshr_m1 (rtx dest, HOST_WIDE_INT v) +{ + int i; + + if (! IN_RANGE (i = exact_log2 (v + 1), 1, 31)) + return NULL; + + start_sequence (); + emit_insn (gen_rtx_SET (dest, constm1_rtx)); + emit_insn (gen_lshrsi3 (dest, dest, GEN_INT (32 - i))); + return end_sequence (); +} + +/* Split the specified value between -34816 and 34559 into the two + immediates for the MOVI and ADDMI instruction. */ + +static bool +split_hwi_to_MOVI_ADDMI (HOST_WIDE_INT v, + HOST_WIDE_INT &v_movi, HOST_WIDE_INT &v_addmi) +{ + HOST_WIDE_INT v0, v1; + + if (xtensa_simm12b (v)) + { + v_movi = v, v_addmi = 0; + return true; + } + + if (v < -32768) + v1 = -32768; + else if (v > 32512) + v1 = 32512; + else + v1 = v & ~255; + if (! xtensa_simm12b (v0 = v - v1)) + return false; + if (TARGET_DENSITY && v0 >= 224 && v1 < 32512) + v0 -= 256, v1 += 256; + + v_movi = v0, v_addmi = v1; + return true; +} + +/* A method that generates two machine instructions to add a signed 12-bit + value to 256 times a signed 8-bit value to synthesize values between + -34816 and 34559. Also, if the result of dividing the specified value + by a power of 2, or 9, 7, 5 or 3 with a remainder of 0 is within the + above range, the same processing is performed to append one instruction. */ + +static rtx_insn * +constantsynth_method_16bits (rtx dest, HOST_WIDE_INT v) +{ + HOST_WIDE_INT v_movi, v_addmi; + rtx postfix; + int i; + + if (split_hwi_to_MOVI_ADDMI (v, v_movi, v_addmi)) + postfix = NULL_RTX; + else if (i = ctz_hwi (v), + split_hwi_to_MOVI_ADDMI (v >> i, v_movi, v_addmi)) + postfix = gen_ashlsi3 (dest, dest, GEN_INT (i)); + else if (!TARGET_ADDX) + return NULL; + else for (i = 9; ; i -= 2) + if (i < 3) + return NULL; + else if (v % i == 0 + && split_hwi_to_MOVI_ADDMI (v / i, v_movi, v_addmi)) + { + postfix = (i == 7) + ? gen_subsi3 (dest, + gen_rtx_ASHIFT (SImode, dest, GEN_INT (3)), + dest) + : gen_addsi3 (dest, + gen_rtx_ASHIFT (SImode, dest, + GEN_INT (floor_log2 (i))), + dest); + break; + } + + start_sequence (); + emit_insn (gen_rtx_SET (dest, GEN_INT (v_movi))); + if (v_addmi) + emit_insn (gen_addsi3 (dest, dest, GEN_INT (v_addmi))); + emit_insn (postfix); + return end_sequence (); +} + +/* A method of generating up to five machine instructions; a signed 12-bit + immediate assignment, a signed 8-bit immediate addition multiplied by + 256, a logical left bit shift, a signed 8-bit immediate addition multi- + plied by 256, and a signed 8-bit immediate addition to synthesize a value + that can effectively be specified as 32 bits (adding zero is of course + omitted in the process). */ + +static rtx_insn * +constantsynth_method_32bits (rtx dest, HOST_WIDE_INT v) +{ + HOST_WIDE_INT v0, v1, v_movi, v_addmi; + int i; + + v1 = 0; + v0 = ((v += 128) & 255) - 128, v >>= 8; + if (v == 0) + i = 0, v_movi = 0, v_addmi = 0; + else if (i = ctz_hwi (v), + split_hwi_to_MOVI_ADDMI (v >> i, v_movi, v_addmi)) + i += 8; + else + { + v1 = ((v += 128) & 255) - 128, v >>= 8; + if (v == 0) + i = 0, v_movi = 0, v_addmi = 0; + else if (i = ctz_hwi (v), + split_hwi_to_MOVI_ADDMI (v >> i, v_movi, v_addmi)) + i += 16; + else + return NULL; + } + + start_sequence (); + emit_insn (gen_rtx_SET (dest, GEN_INT (v_movi))); + if (v_addmi) + emit_insn (gen_addsi3 (dest, dest, GEN_INT (v_addmi))); + if (i) + emit_insn (gen_ashlsi3 (dest, dest, GEN_INT (i))); + if (v1) + emit_insn (gen_addsi3 (dest, dest, GEN_INT (v1 * 256))); + if (v0) + emit_insn (gen_addsi3 (dest, dest, GEN_INT (v0))); + return end_sequence (); +} + +/* A method that generates two machine instructions to synthesize a + positive square number (up to 2047*2047) by assigning its square root + and multiplying it by itself. This method only works when TARGET_MUL32 + is enabled. */ + +static rtx_insn * +constantsynth_method_square (rtx dest, HOST_WIDE_INT v) +{ + int v0; + + if (!TARGET_MUL32 || ! IN_RANGE (v, 0, 2047 * 2047) + || (v0 = (int)sqrtf (v), v0 * v0 != v)) + return NULL; + + start_sequence (); + emit_insn (gen_rtx_SET (dest, GEN_INT (v0))); + emit_insn (gen_mulsi3 (dest, dest, dest)); + return end_sequence (); +} + +/* List of all available synthesis methods. */ + +struct constantsynth_method_info +{ + rtx_insn *(* const func) (rtx, HOST_WIDE_INT); + const char *name; +}; + +static const struct constantsynth_method_info constantsynth_methods[] = +{ + { constantsynth_method_lshr_m1, "lshr_m1" }, + { constantsynth_method_16bits, "16bits" }, + { constantsynth_method_32bits, "32bits" }, + { constantsynth_method_square, "square" }, +}; + +/* Information that mediates between synthesis pass 1 and 2. */ + +struct constantsynth_info +{ + xt_full_rtx_costs costs; + hash_map insns; + hash_map usage; + constantsynth_info () + { + /* To avoid wasting literal pool entries, we use fake references to + estimate the costs of an L32R instruction. */ + rtx x = gen_rtx_SYMBOL_REF (Pmode, "*.LC-1"); + SYMBOL_REF_FLAGS (x) |= SYMBOL_FLAG_LOCAL; + CONSTANT_POOL_ADDRESS_P (x) = 1; + x = gen_const_mem (SImode, x); + gcc_assert (constantpool_mem_p (x)); + costs += make_insn_raw (gen_rtx_SET (gen_rtx_REG (SImode, A9_REG), + x)); + } +}; + +/* constantsynth pass 1. + Detect and record large constant assignments within the function. */ + +static bool +constantsynth_pass1 (rtx_insn *insn, constantsynth_info &info) +{ + rtx pat, dest, src; + int *pcount; + + /* Check whether the insn is an assignment to a constant that is eligible + for constantsynth. If a large constant, record the insn and also the + number of occurrences of the constant if optimizing for size. If the + constant fits in the immediate field, update the insn to re-assign the + constant. */ + if (TARGET_CONST16 + || GET_CODE (pat = PATTERN (insn)) != SET + || ! REG_P (dest = SET_DEST (pat)) || ! GP_REG_P (REGNO (dest)) + || GET_MODE (dest) != SImode + || ! CONST_INT_P (src = avoid_constant_pool_reference (SET_SRC (pat)))) + return false; + + if (xtensa_simm12b (INTVAL (src))) + { + if (src != SET_SRC (pat)) + { + remove_reg_equal_equiv_notes (insn); + validate_change (insn, &PATTERN (insn), + gen_rtx_SET (dest, src), 0); + } + if (dump_file) + fprintf (dump_file, + "constantsynth_pass1: immediate, " HOST_WIDE_INT_PRINT_DEC + " (" HOST_WIDE_INT_PRINT_HEX ")\n", + INTVAL (src), INTVAL (src)); + } + else + { + info.insns.put (insn, src); + if (optimize_size) + { + if ((pcount = info.usage.get (src))) + ++*pcount; + else + info.usage.put (src, 1); + } + } + + return true; +} + +/* If an insn sequence returned by one of the constantsynth methods conforms + to the rules and formal evaluation of the sequence from beginning to end + reduces to a single CONST_INT, return it. */ + +static rtx +verify_synth_seq (rtx_insn *seq, const_rtx dest) +{ + rtx pat, cst; + + if (! NONJUMP_INSN_P (seq) + || GET_CODE (pat = PATTERN (seq)) != SET + || ! rtx_equal_p (SET_DEST (pat), dest) + || ! CONST_INT_P (cst = SET_SRC (pat)) + || ! xtensa_simm12b (INTVAL (cst))) + return NULL_RTX; + + for (seq = NEXT_INSN (seq); seq; seq = NEXT_INSN (seq)) + if (! NONJUMP_INSN_P (seq) + || GET_CODE (pat = PATTERN (seq)) != SET + || ! rtx_equal_p (SET_DEST (pat), dest) + || ! CONST_INT_P (cst = simplify_replace_rtx (SET_SRC (pat), + dest, cst))) + return NULL_RTX; + + return cst; +} + +/* constantsynth pass 2. + For each large constant value assignment collected in pass 1, try to + find a more efficient way to derive the value than referencing a literal + pool entry, and if found, replace the assignment with it. */ + +static void +constantsynth_pass2 (constantsynth_info &info) +{ + rtx_insn *insn, *min_seq, *seq, *last; + rtx pat, dest, src, cst; + enum machine_mode mode; + int *pcount, processed = 0; + HOST_WIDE_INT v; + const char *name; + + /* For each insn recorded in pass 1... */ + for (const auto &iter : info.insns) + { + dest = SET_DEST (pat = PATTERN (insn = iter.first)); + if ((mode = GET_MODE (dest)) != SImode) + dest = gen_rtx_REG (SImode, REGNO (dest)); + v = INTVAL (src = iter.second); + + /* Only attempt to synthesize large constants if they occur at most + once in a function, since it is more space-efficient to reference + a shared literal pool entry multiple times. */ + if (! (pcount = info.usage.get (src)) + || *pcount == 1) + { + /* Try multiple synthesis methods and choose the least expensive + one. */ + xt_full_rtx_costs min_costs = info.costs; + + v = INTVAL (src), min_seq = NULL, name = NULL; + for (const auto &method : constantsynth_methods) + if ((seq = method.func (dest, v))) + { + xt_full_rtx_costs costs (seq); + + if (costs < min_costs) + min_costs = costs, min_seq = seq, name = method.name; + } + + /* If there is a most efficient synthesis method, replace the + insn with the result. */ + if (min_seq) + { + if (flag_checking) + { + if (! (cst = verify_synth_seq (min_seq, dest))) + internal_error ("constantsynth: method %qs " + "invalid insn sequence, " + "expected %wd (%wx)", name, + v, v); + if (INTVAL (cst) != v) + internal_error ("constantsynth: method %qs " + "value mismatch, " + "expected %wd (%wx) " + "synthesized %wd (%wx)", name, + v, v,INTVAL (cst), INTVAL (cst)); + } + + for (last = min_seq; NEXT_INSN (last); + last = NEXT_INSN (last)) + ; + add_reg_note (last, REG_EQUIV, copy_rtx (src)); + if (dump_file) + { + fprintf (dump_file, + "constantsynth_pass2: method \"%s\", " + HOST_WIDE_INT_PRINT_DEC " (", + name, v); + dump_value_slim (dump_file, src, 0); + fprintf (dump_file, ")\n"); + dump_insn_slim (dump_file, insn); + fprintf (dump_file, + "constantsynth_pass2: costs (%d,%d) -> (%d,%d)\n", + info.costs.major (), info.costs.minor (), + min_costs.major (), min_costs.minor ()); + dump_rtl_slim (dump_file, min_seq, NULL, -1, 0); + } + emit_insn_before (min_seq, insn); + set_insn_deleted (insn); + ++processed; + continue; + } + } + + /* Large constants that are not subject to synthesize are left in + the literal pool. */ + if (dump_file) + fprintf (dump_file, + "constantsynth_pass2: litpool, " HOST_WIDE_INT_PRINT_DEC + " (" HOST_WIDE_INT_PRINT_HEX ")\n", + v, v); + } + + if (dump_file) + { + fprintf (dump_file, "constantsynth_pass2: %u insns", + (unsigned)info.insns.elements ()); + if (optimize_size) + fprintf (dump_file, ", %u large CONST_INTs", + (unsigned int)info.usage.elements ()); + fprintf (dump_file, ", %d processed\n", processed); + } +} + /* Replace the source of [SH]Imode allocation whose value does not fit into signed 12 bits with a reference to litpool entry. */ @@ -6030,6 +6240,7 @@ do_largeconst (void) bool replacing_required = !TARGET_CONST16 && !TARGET_AUTO_LITPOOLS; bool optimize_enabled = optimize && !optimize_debug; rtx_insn *insn; + constantsynth_info cs_info; /* Verify the legitimacy of replacing constant assignments in DI/SF/DFmode with those in SImode. */ @@ -6056,7 +6267,19 @@ do_largeconst (void) mization that follows immediately after. */ if (replacing_required) split_DI_SF_DF_const (insn); + + /* constantsynth pass 1. + Detect and record large constant assignments within a function. */ + if (optimize_enabled) + constantsynth_pass1 (insn, cs_info); } + + /* constantsynth pass 2. + For each large constant value assignment collected in pass 1, try to + find a more efficient way to derive the value than referencing a literal + pool entry, and if found, replace the assignment with it. */ + if (optimize_enabled) + constantsynth_pass2 (cs_info); } /* Convert assignments for large constants. */ diff --git a/gcc/config/xtensa/xtensa.md b/gcc/config/xtensa/xtensa.md index a5c8a66aafb2..cb047b0f6557 100644 --- a/gcc/config/xtensa/xtensa.md +++ b/gcc/config/xtensa/xtensa.md @@ -90,10 +90,6 @@ (define_mode_iterator HQI [HI QI]) (define_mode_attr mode_bits [(HI "16") (QI "8")]) -;; This mode iterator allows the SI and HI patterns to be defined from -;; the same template. -(define_mode_iterator SHI [SI HI]) - ;; This iterator and attribute allow signed/unsigned FP truncations to be ;; generated from one template. (define_code_iterator any_fix [fix unsigned_fix]) @@ -1285,30 +1281,6 @@ } [(set_attr "mode" "SI")]) -(define_split - [(set (match_operand:SHI 0 "register_operand") - (match_operand:SHI 1 "constantpool_operand"))] - "!optimize_debug && reload_completed" - [(const_int 0)] -{ - if (xtensa_constantsynth (operands[0], operands[1])) - DONE; - FAIL; -}) - -(define_split - [(set (match_operand:SHI 0 "register_operand") - (match_operand:SHI 1 "const_int_operand"))] - "!optimize_debug && reload_completed - && !TARGET_CONST16 && TARGET_AUTO_LITPOOLS - && ! xtensa_simm12b (INTVAL (operands[1]))" - [(const_int 0)] -{ - if (xtensa_constantsynth (operands[0], operands[1])) - DONE; - FAIL; -}) - ;; 16-bit Integer moves (define_expand "movhi" @@ -1509,29 +1481,6 @@ (set_attr "mode" "SF") (set_attr "length" "3")]) -(define_split - [(set (match_operand:SF 0 "register_operand") - (match_operand 1 "constantpool_operand"))] - "!optimize_debug && reload_completed" - [(const_int 0)] -{ - if (xtensa_constantsynth (operands[0], operands[1])) - DONE; - FAIL; -}) - -(define_split - [(set (match_operand:SF 0 "register_operand") - (match_operand 1 "const_double_operand"))] - "!optimize_debug && reload_completed - && !TARGET_CONST16 && TARGET_AUTO_LITPOOLS" - [(const_int 0)] -{ - if (xtensa_constantsynth (operands[0], operands[1])) - DONE; - FAIL; -}) - ;; 64-bit floating point moves (define_expand "movdf" diff --git a/gcc/testsuite/gcc.target/xtensa/constsynthV2_O2_costs0.c b/gcc/testsuite/gcc.target/xtensa/constsynthV2_O2_costs0.c new file mode 100644 index 000000000000..a32d75c360ab --- /dev/null +++ b/gcc/testsuite/gcc.target/xtensa/constsynthV2_O2_costs0.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mextra-l32r-costs=0" } */ + +_Complex double test(int a[], float b[]) +{ + a[0] = 2045 * 2045; + a[1] = 4182000; /* postreload const-anchored */ + a[2] = 0xDEADBEEF; + a[3] = 0xDEADBEEF - 15; /* postreload const-anchored */ + a[4] = 131071; + a[5] = 293805; + a[6] = 700972933; + a[7] = -372738139; + b[0] = 3.14159265359f; + b[1] = 0.12005615234375f; + return 1-1i; +} + +/* { dg-final { scan-assembler-times "l32r" 10 } } */ diff --git a/gcc/testsuite/gcc.target/xtensa/constsynthV2_O2_costs5.c b/gcc/testsuite/gcc.target/xtensa/constsynthV2_O2_costs5.c new file mode 100644 index 000000000000..5d29ddb8dae1 --- /dev/null +++ b/gcc/testsuite/gcc.target/xtensa/constsynthV2_O2_costs5.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mextra-l32r-costs=5" } */ + +_Complex double test(int a[], float b[]) +{ + a[0] = 2045 * 2045; /* method "square" */ + a[1] = 4182000; /* postreload const-anchored */ + a[2] = 0xDEADBEEF; /* method "32bits" */ + a[3] = 0xDEADBEEF - 15; /* postreload const-anchored */ + a[4] = 131071; /* method "lshr_m1" */ + a[5] = 293805; /* method "16bits" */ + a[6] = 700972933; /* method "32bits" */ + a[7] = -372738139; /* method "32bits" */ + b[0] = 3.14159265359f; /* method "32bits" */ + b[1] = 0.12005615234375f; /* method "32bits" */ + return 1-1i; /* method "16bits", method "16bits" */ +} + +/* { dg-final { scan-assembler-not "l32r" } } */ diff --git a/gcc/testsuite/gcc.target/xtensa/constsynthV2_Os.c b/gcc/testsuite/gcc.target/xtensa/constsynthV2_Os.c new file mode 100644 index 000000000000..f56c68837b9c --- /dev/null +++ b/gcc/testsuite/gcc.target/xtensa/constsynthV2_Os.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-Os -mabi=windowed" } */ + +_Complex double test(int a[], float b[]) +{ + a[0] = 2045 * 2045; /* method "square", but not unique */ + a[1] = 4182000; /* postreload const-anchored */ + a[2] = 0xDEADBEEF; + a[3] = 0xDEADBEEF - 15; /* postreload const-anchored */ + a[4] = 131071; /* method "lshr_m1", but not unique */ + a[5] = 293805; + a[6] = 700972933; + a[7] = -372738139; + asm volatile ("# clobbers":::"a2","a3","a4","a5","a6","a7","a8","a9","a10","a11","a12","a13","a14","a15"); + a[8] = 2045 * 2045; /* method "square", but not unique */ + a[9] = 131071; /* method "lshr_m1", but not unique */ + b[0] = 3.14159265359f; + b[1] = 0.12005615234375f; + return 1-1i; /* method "16bits", method "16bits" */ +} + +/* { dg-final { scan-assembler-times "l32r" 10 } } */ +/* { dg-final { scan-assembler-times ".literal " 8 } } */ diff --git a/gcc/testsuite/gcc.target/xtensa/constsynth_2insns.c b/gcc/testsuite/gcc.target/xtensa/constsynth_2insns.c deleted file mode 100644 index 43c85a25086a..000000000000 --- a/gcc/testsuite/gcc.target/xtensa/constsynth_2insns.c +++ /dev/null @@ -1,44 +0,0 @@ -/* { dg-do compile } */ -/* { dg-options "-Os" } */ - -int test_0(void) -{ - return 4095; -} - -int test_1(void) -{ - return 2147483647; -} - -int test_2(void) -{ - return -34816; -} - -int test_3(void) -{ - return -2049; -} - -int test_4(void) -{ - return 2048; -} - -int test_5(void) -{ - return 34559; -} - -int test_6(void) -{ - return 43680; -} - -void test_7(int *p) -{ - *p = -1432354816; -} - -/* { dg-final { scan-assembler-not "l32r" } } */ diff --git a/gcc/testsuite/gcc.target/xtensa/constsynth_3insns.c b/gcc/testsuite/gcc.target/xtensa/constsynth_3insns.c deleted file mode 100644 index 831288c7ddd5..000000000000 --- a/gcc/testsuite/gcc.target/xtensa/constsynth_3insns.c +++ /dev/null @@ -1,35 +0,0 @@ -/* { dg-do compile } */ -/* { dg-options "-O2 -mextra-l32r-costs=3" } */ - -int test_0(void) -{ - return 134217216; -} - -int test_1(void) -{ - return -27604992; -} - -int test_2(void) -{ - return -162279; -} - -void test_3(int *p) -{ - *p = 192437; -} - -struct foo -{ - unsigned int b : 10; - unsigned int g : 11; - unsigned int r : 11; -}; -void test_4(struct foo *p, unsigned int v) -{ - p->g = v; -} - -/* { dg-final { scan-assembler-not "l32r" } } */ diff --git a/gcc/testsuite/gcc.target/xtensa/constsynth_double.c b/gcc/testsuite/gcc.target/xtensa/constsynth_double.c deleted file mode 100644 index 5fba6a986506..000000000000 --- a/gcc/testsuite/gcc.target/xtensa/constsynth_double.c +++ /dev/null @@ -1,11 +0,0 @@ -/* { dg-do compile } */ -/* { dg-options "-Os" } */ - -void test(unsigned int count, double array[]) -{ - unsigned int i; - for (i = 0; i < count; ++i) - array[i] = 8.988474246316506e+307; -} - -/* { dg-final { scan-assembler-not "l32r" } } */ From f37936763537e0366110412c00ff55c096b3b7c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Kami=C5=84ski?= Date: Thu, 9 Oct 2025 11:12:15 +0200 Subject: [PATCH 182/216] libstdc++: Formatting tests for std::chrono date types. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This covers year_month_day_last, year_month_weekday, year_month_weekday_last. libstdc++-v3/ChangeLog: * testsuite/std/time/year_month_day_last/io.cc: New formatting tests. * testsuite/std/time/year_month_weekday/io.cc: Likewise. * testsuite/std/time/year_month_weekday_last/io.cc: Likewise. Reviewed-by: Jonathan Wakely Signed-off-by: Tomasz Kamiński --- .../std/time/year_month_day_last/io.cc | 81 +++++++++- .../std/time/year_month_weekday/io.cc | 148 +++++++++++++++++- .../std/time/year_month_weekday_last/io.cc | 97 +++++++++++- 3 files changed, 323 insertions(+), 3 deletions(-) diff --git a/libstdc++-v3/testsuite/std/time/year_month_day_last/io.cc b/libstdc++-v3/testsuite/std/time/year_month_day_last/io.cc index 3241536a2e64..de4f24795572 100644 --- a/libstdc++-v3/testsuite/std/time/year_month_day_last/io.cc +++ b/libstdc++-v3/testsuite/std/time/year_month_day_last/io.cc @@ -22,9 +22,88 @@ test_ostream() VERIFY( ss.str() == "2023/juil./last" ); } +void +test_format() +{ + using namespace std::chrono; + + std::string s = std::format("{:%Y%t%C%%%y%n%j %b %a}", 2024y/January/last); + VERIFY( s == "2024\t20%24\n031 Jan Wed" ); + std::wstring ws = std::format(L"{:%Y%t%C%%%y%n%j %b %a}", 2024y/December/last); + VERIFY( ws == L"2024\t20%24\n366 Dec Tue" ); + + s = std::format("{0:%Y-%m-%d} {0}", 2023y/May/last); + VERIFY( s == "2023-05-31 2023/May/last" ); + s = std::format("{0:%Y-%m-%d} {0}", 2023y/month(13)/last); + VERIFY( s == "2023-13-30 2023/13 is not a valid month/last" ); + + s = std::format("{:%Y-%m-%d %j}", 2024y/February/last); + VERIFY( s == "2024-02-29 060" ); + s = std::format("{:%Y-%m-%d %j}", 2023y/February/last); + VERIFY( s == "2023-02-28 059" ); + s = std::format("{:%Y-%m-%d %j}", 2024y/September/last); + VERIFY( s == "2024-09-30 274" ); + + // %U: Week number for weeks starting on Sunday + s = std::format("{:%Y-U%U}", 2023y/January/last); + VERIFY( s == "2023-U05" ); + s = std::format("{:%Y-U%U}", 2023y/December/last); + VERIFY( s == "2023-U53" ); + // %W: Week number for weeks starting on Monday + s = std::format("{:%Y-W%W}", 2023y/January/last); + VERIFY( s == "2023-W05" ); + s = std::format("{:%Y-W%W}", 2023y/December/last); + VERIFY( s == "2023-W52" ); + + // %G: ISO week-calendar year (ISO 8601) + // %V: ISO week number (ISO 8601). + s = std::format("{:%G-V%V}", 2019y/December/last); + VERIFY( s == "2020-V01" ); + s = std::format("{:%G-V%V}", 2023y/January/last); + VERIFY( s == "2023-V05" ); + s = std::format("{:%G-V%V}", 2023y/December/last); + VERIFY( s == "2023-V52" ); + + s = std::format("{:%F}", 2023y/July/last); + VERIFY( s == "2023-07-31" ); + s = std::format("{:%x}", 2023y/July/last); + VERIFY( s == "07/31/23" ); + s = std::format("{:L%x}", 2023y/July/last); + VERIFY( s == "07/31/23" ); + std::locale loc_fr(ISO_8859(15,fr_FR)); + s = std::format(loc_fr, "{:%x}", 2023y/July/last); + VERIFY( s == "07/31/23" ); + s = std::format(loc_fr, "{:L%x}", 2023y/July/last); + VERIFY( s == "31/07/2023" || s == "31.07.2023" ); // depends on locale defs + s = std::format(loc_fr, "{:L}", 2023y/July/last); + VERIFY( s == "2023/juil./last" ); + + std::string_view specs = "aAbBcCdDeFgGhHIjmMpqQrRSTuUVwWxXyYzZ"; + std::string_view my_specs = "aAbBCdDeFgGhjmuUVwWxyY"; + for (char c : specs) + { + char fmt[] = { '{', ':', '%', c, '}' }; + try + { + year_month_weekday ymw = 2023y/July/Thursday[2]; + (void) std::vformat(std::string_view(fmt, 5), std::make_format_args(ymw)); + // The call above should throw for any conversion-spec not in my_specs: + VERIFY(my_specs.find(c) != my_specs.npos); + } + catch (const std::format_error& e) + { + VERIFY(my_specs.find(c) == my_specs.npos); + std::string_view s = e.what(); + // Libstdc++-specific message: + VERIFY(s.find("format argument does not contain the information " + "required by the chrono-specs") != s.npos); + } + } +} + int main() { test_ostream(); - // TODO: test_format(); + test_format(); // TODO: test_parse(); } diff --git a/libstdc++-v3/testsuite/std/time/year_month_weekday/io.cc b/libstdc++-v3/testsuite/std/time/year_month_weekday/io.cc index 65baf1d37ae3..92fd67022a24 100644 --- a/libstdc++-v3/testsuite/std/time/year_month_weekday/io.cc +++ b/libstdc++-v3/testsuite/std/time/year_month_weekday/io.cc @@ -34,9 +34,155 @@ test_ostream() VERIFY( ss.str() == "2023/juil./jeu.[2]" ); } +void +test_format() +{ + using namespace std::chrono; + + std::string s = std::format("{:%Y%t%C%%%y%n%j %b %a}", 2024y/January/Friday[2]); + VERIFY( s == "2024\t20%24\n012 Jan Fri" ); + std::wstring ws = std::format(L"{:%Y%t%C%%%y%n%j %b %a}", 2024y/December/Monday[1]); + VERIFY( ws == L"2024\t20%24\n337 Dec Mon" ); + + s = std::format("{0:%Y-%m-%d} {0}", 2023y/May/Monday[1]); + VERIFY( s == "2023-05-01 2023/May/Mon[1]" ); + s = std::format("{0:%Y-%m-%d} {0}", 2023y/month(13)/Monday[1]); + VERIFY( s == "2023-13-01 2023/13 is not a valid month/Mon[1]" ); + + s = std::format("{:%u %w}", Monday[1]); + VERIFY( s == "1 1" ); + s = std::format("{:%u %w}", Sunday[2]); + VERIFY( s == "7 0" ); + // 0 and 7 are both Sundays + s = std::format("{:%u %w}", weekday(0)[1]); + VERIFY( s == "7 0" ); + s = std::format("{:%u %w}", weekday(7)[1]); + VERIFY( s == "7 0" ); + s = std::format("{:%u %w}", weekday(9)[1]); + VERIFY( s == "9 9" ); + + s = std::format("{:%Y-%m-%d %j}", 2024y/February/Thursday[5]); + VERIFY( s == "2024-02-29 060" ); + s = std::format("{:%Y-%m-%d %j}", 2023y/February/Tuesday[4]); + VERIFY( s == "2023-02-28 059" ); + s = std::format("{:%Y-%m-%d %j}", 2024y/September/Sunday[1]); + VERIFY( s == "2024-09-01 245" ); + s = std::format("{:%Y-%m-%d %j}", 2024y/September/Sunday[5]); + VERIFY( s == "2024-09-29 273" ); + // see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121929 + // first weeks of next month + s = std::format("{:%Y-%m-%d %j}", 2024y/September/Sunday[6]); + VERIFY( s == "2024-09-06 280" ); + s = std::format("{:%Y-%m-%d %j}", 2024y/September/Sunday[7]); + VERIFY( s == "2024-09-13 287" ); + // last week on previous month + s = std::format("{:%Y-%m-%d %j}", 2024y/September/Saturday[0]); + VERIFY( s == "2024-09-31 244" ); + s = std::format("{:%Y-%m-%d %j}", 2024y/September/Sunday[0]); + VERIFY( s == "2024-09-25 238" ); + + // %U: Week number for weeks starting on Sunday + s = std::format("{:%Y-U%U}", 2023y/January/Sunday[0]); + VERIFY( s == "2023-U00" ); + s = std::format("{:%Y-U%U}", 2023y/January/Sunday[1]); + VERIFY( s == "2023-U01" ); + s = std::format("{:%Y-U%U}", 2023y/January/Sunday[4]); + VERIFY( s == "2023-U04" ); + s = std::format("{:%Y-U%U}", 2023y/January/Sunday[7]); + VERIFY( s == "2023-U07" ); + s = std::format("{:%Y-U%U}", 2023y/December/Sunday[0]); + VERIFY( s == "2023-U48" ); + s = std::format("{:%Y-U%U}", 2023y/December/Sunday[1]); + VERIFY( s == "2023-U49" ); + s = std::format("{:%Y-U%U}", 2023y/December/Sunday[4]); + VERIFY( s == "2023-U52" ); + s = std::format("{:%Y-U%U}", 2023y/December/Sunday[7]); + VERIFY( s == "2023-U55" ); + // %W: Week number for weeks starting on Monday + s = std::format("{:%Y-W%W}", 2023y/January/Monday[0]); + VERIFY( s == "2023-W00" ); + s = std::format("{:%Y-W%W}", 2023y/January/Monday[1]); + VERIFY( s == "2023-W01" ); + s = std::format("{:%Y-W%W}", 2023y/January/Monday[4]); + VERIFY( s == "2023-W04" ); + s = std::format("{:%Y-W%W}", 2023y/January/Monday[7]); + VERIFY( s == "2023-W07" ); + s = std::format("{:%Y-W%W}", 2023y/December/Monday[0]); + VERIFY( s == "2023-W48" ); + s = std::format("{:%Y-W%W}", 2023y/December/Monday[1]); + VERIFY( s == "2023-W49" ); + s = std::format("{:%Y-W%W}", 2023y/December/Monday[4]); + VERIFY( s == "2023-W52" ); + s = std::format("{:%Y-W%W}", 2023y/December/Monday[7]); + VERIFY( s == "2023-W55" ); + // First Sunday precedes first Monday, so happens on + // last week of previous month and thus year + s = std::format("{:%Y-W%W}", 2023y/January/Sunday[1]); + VERIFY( s == "2023-W00" ); + // Last Sunday of pevious year happens on second to + // last week on previous year + s = std::format("{:%Y-W%W}", 2023y/January/Sunday[0]); + VERIFY( s == "2023-W99" ); + + // %G: ISO week-calendar year (ISO 8601) + // %V: ISO week number (ISO 8601). + s = std::format("{:%G-V%V}", 2023y/January/Monday[0]); + VERIFY( s == "2022-V52" ); + s = std::format("{:%G-V%V}", 2023y/January/Monday[1]); + VERIFY( s == "2023-V01" ); + s = std::format("{:%G-V%V}", 2023y/January/Monday[4]); + VERIFY( s == "2023-V04" ); + s = std::format("{:%G-V%V}", 2023y/January/Monday[7]); + VERIFY( s == "2023-V07" ); + s = std::format("{:%G-V%V}", 2023y/December/Friday[0]); + VERIFY( s == "2023-V47" ); + s = std::format("{:%G-V%V}", 2023y/December/Friday[1]); + VERIFY( s == "2023-V48" ); + s = std::format("{:%G-V%V}", 2023y/December/Friday[5]); + VERIFY( s == "2023-V52" ); + s = std::format("{:%G-V%V}", 2023y/December/Friday[6]); + VERIFY( s == "2024-V01" ); + + s = std::format("{:%F}", 2023y/July/Thursday[2]); + VERIFY( s == "2023-07-13" ); + s = std::format("{:%x}", 2023y/July/Thursday[2]); + VERIFY( s == "07/13/23" ); + s = std::format("{:L%x}", 2023y/July/Thursday[2]); + VERIFY( s == "07/13/23" ); + std::locale loc_fr(ISO_8859(15,fr_FR)); + s = std::format(loc_fr, "{:%x}", 2023y/July/Thursday[2]); + VERIFY( s == "07/13/23" ); + s = std::format(loc_fr, "{:L%x}", 2023y/July/Thursday[2]); + VERIFY( s == "13/07/2023" || s == "13.07.2023" ); // depends on locale defs + s = std::format(loc_fr, "{:L}", 2023y/July/Thursday[2]); + VERIFY( s == "2023/juil./jeu.[2]" ); + + std::string_view specs = "aAbBcCdDeFgGhHIjmMpqQrRSTuUVwWxXyYzZ"; + std::string_view my_specs = "aAbBCdDeFgGhjmuUVwWxyY"; + for (char c : specs) + { + char fmt[] = { '{', ':', '%', c, '}' }; + try + { + year_month_weekday ymw = 2023y/July/Thursday[2]; + (void) std::vformat(std::string_view(fmt, 5), std::make_format_args(ymw)); + // The call above should throw for any conversion-spec not in my_specs: + VERIFY(my_specs.find(c) != my_specs.npos); + } + catch (const std::format_error& e) + { + VERIFY(my_specs.find(c) == my_specs.npos); + std::string_view s = e.what(); + // Libstdc++-specific message: + VERIFY(s.find("format argument does not contain the information " + "required by the chrono-specs") != s.npos); + } + } +} + int main() { test_ostream(); - // TODO: test_format(); + test_format(); // TODO: test_parse(); } diff --git a/libstdc++-v3/testsuite/std/time/year_month_weekday_last/io.cc b/libstdc++-v3/testsuite/std/time/year_month_weekday_last/io.cc index 17f2244420d7..983589720b5e 100644 --- a/libstdc++-v3/testsuite/std/time/year_month_weekday_last/io.cc +++ b/libstdc++-v3/testsuite/std/time/year_month_weekday_last/io.cc @@ -30,9 +30,104 @@ test_ostream() VERIFY( ss.str() == "2023/juil./jeu.[last]" ); } +void +test_format() +{ + using namespace std::chrono; + + std::string s = std::format("{:%Y%t%C%%%y%n%j %b %a}", 2024y/January/Friday[last]); + VERIFY( s == "2024\t20%24\n026 Jan Fri" ); + std::wstring ws = std::format(L"{:%Y%t%C%%%y%n%j %b %a}", 2024y/December/Monday[last]); + VERIFY( ws == L"2024\t20%24\n365 Dec Mon" ); + + s = std::format("{0:%Y-%m-%d} {0}", 2023y/May/Monday[last]); + VERIFY( s == "2023-05-29 2023/May/Mon[last]" ); + s = std::format("{0:%Y-%m-%d} {0}", 2023y/month(13)/Monday[last]); + VERIFY( s == "2023-13-29 2023/13 is not a valid month/Mon[last]" ); + + s = std::format("{:%u %w}", Monday[last]); + VERIFY( s == "1 1" ); + s = std::format("{:%u %w}", Sunday[2]); + VERIFY( s == "7 0" ); + // 0 and 7 are both Sundays + s = std::format("{:%u %w}", weekday(0)[last]); + VERIFY( s == "7 0" ); + s = std::format("{:%u %w}", weekday(7)[last]); + VERIFY( s == "7 0" ); + s = std::format("{:%u %w}", weekday(9)[last]); + VERIFY( s == "9 9" ); + + s = std::format("{:%Y-%m-%d %j}", 2024y/February/Thursday[last]); + VERIFY( s == "2024-02-29 060" ); + s = std::format("{:%Y-%m-%d %j}", 2023y/February/Tuesday[last]); + VERIFY( s == "2023-02-28 059" ); + s = std::format("{:%Y-%m-%d %j}", 2024y/September/Sunday[last]); + VERIFY( s == "2024-09-29 273" ); + + // %U: Week number for weeks starting on Sunday + s = std::format("{:%Y-U%U}", 2023y/January/Sunday[last]); + VERIFY( s == "2023-U05" ); + s = std::format("{:%Y-U%U}", 2023y/December/Sunday[last]); + VERIFY( s == "2023-U53" ); + // %W: Week number for weeks starting on Monday + s = std::format("{:%Y-W%W}", 2023y/January/Monday[last]); + VERIFY( s == "2023-W05" ); + s = std::format("{:%Y-W%W}", 2023y/December/Monday[last]); + VERIFY( s == "2023-W52" ); + s = std::format("{:%Y-W%W}", 2023y/January/Sunday[last]); + VERIFY( s == "2023-W04" ); + s = std::format("{:%Y-W%W}", 2023y/December/Sunday[last]); + VERIFY( s == "2023-W52" ); + + // %G: ISO week-calendar year (ISO 8601) + // %V: ISO week number (ISO 8601). + s = std::format("{:%G-V%V}", 2019y/December/Tuesday[last]); + VERIFY( s == "2020-V01" ); + s = std::format("{:%G-V%V}", 2023y/January/Monday[last]); + VERIFY( s == "2023-V05" ); + s = std::format("{:%G-V%V}", 2023y/December/Friday[last]); + VERIFY( s == "2023-V52" ); + + s = std::format("{:%F}", 2023y/July/Thursday[last]); + VERIFY( s == "2023-07-27" ); + s = std::format("{:%x}", 2023y/July/Thursday[last]); + VERIFY( s == "07/27/23" ); + s = std::format("{:L%x}", 2023y/July/Thursday[last]); + VERIFY( s == "07/27/23" ); + std::locale loc_fr(ISO_8859(15,fr_FR)); + s = std::format(loc_fr, "{:%x}", 2023y/July/Thursday[last]); + VERIFY( s == "07/27/23" ); + s = std::format(loc_fr, "{:L%x}", 2023y/July/Thursday[last]); + VERIFY( s == "27/07/2023" || s == "27.07.2023" ); // depends on locale defs + s = std::format(loc_fr, "{:L}", 2023y/July/Thursday[last]); + VERIFY( s == "2023/juil./jeu.[last]" ); + + std::string_view specs = "aAbBcCdDeFgGhHIjmMpqQrRSTuUVwWxXyYzZ"; + std::string_view my_specs = "aAbBCdDeFgGhjmuUVwWxyY"; + for (char c : specs) + { + char fmt[] = { '{', ':', '%', c, '}' }; + try + { + year_month_weekday ymw = 2023y/July/Thursday[2]; + (void) std::vformat(std::string_view(fmt, 5), std::make_format_args(ymw)); + // The call above should throw for any conversion-spec not in my_specs: + VERIFY(my_specs.find(c) != my_specs.npos); + } + catch (const std::format_error& e) + { + VERIFY(my_specs.find(c) == my_specs.npos); + std::string_view s = e.what(); + // Libstdc++-specific message: + VERIFY(s.find("format argument does not contain the information " + "required by the chrono-specs") != s.npos); + } + } +} + int main() { test_ostream(); - // TODO: test_format(); + test_format(); // TODO: test_parse(); } From 8581d66ec64d5c66ea9083fe91721b69041a1a90 Mon Sep 17 00:00:00 2001 From: Filip Kastl Date: Thu, 9 Oct 2025 13:42:52 +0200 Subject: [PATCH 183/216] tree-ssa-structalias: Put constraint building into separate functions Preparation for splitting out constraint building into a separate source file. This patch splits out constraint building from compute_points_to_sets and ipa_pta_execute into separate functions. It also moves initializing and cleaning up constraint building stuff into separate functions. gcc/ChangeLog: * tree-ssa-structalias.cc (init_constraint_builder): New function. (delete_constraint_builder): New function. (compute_points_to_sets): Put constraint building into intra_build_constraints and call it. (intra_build_constraints): New function. (delete_points_to_sets): Put cleanup of constraint builder global vars into delete_constraint_builder and call it. (ipa_pta_execute): Put constraint building into ipa_build_constraints and call it. (ipa_create_function_infos): New function. (ipa_create_global_variable_infos): New function. (ipa_build_constraints): New function. Signed-off-by: Filip Kastl --- gcc/tree-ssa-structalias.cc | 161 ++++++++++++++++++++++++------------ 1 file changed, 109 insertions(+), 52 deletions(-) diff --git a/gcc/tree-ssa-structalias.cc b/gcc/tree-ssa-structalias.cc index 0035e50c62c7..558a0900f995 100644 --- a/gcc/tree-ssa-structalias.cc +++ b/gcc/tree-ssa-structalias.cc @@ -5105,6 +5105,29 @@ init_base_vars (void) process_constraint (new_constraint (lhs, rhs)); } +/* Initialize constraint builder. */ + +static void +init_constraint_builder (void) +{ + vi_for_tree = new hash_map; + call_stmt_vars = new hash_map; + gcc_obstack_init (&fake_var_decl_obstack); + + init_base_vars (); +} + +/* Deallocate constraint builder globals. */ + +static void +delete_constraint_builder (void) +{ + delete vi_for_tree; + delete call_stmt_vars; + constraint_pool.release (); + obstack_free (&fake_var_decl_obstack, NULL); +} + /* Initialize things necessary to perform PTA. */ static void @@ -5117,31 +5140,22 @@ init_alias_vars (void) constraints.create (8); varmap.create (8); - vi_for_tree = new hash_map; - call_stmt_vars = new hash_map; memset (&stats, 0, sizeof (stats)); shared_bitmap_table = new hash_table (511); - init_base_vars (); - - gcc_obstack_init (&fake_var_decl_obstack); final_solutions = new hash_map; gcc_obstack_init (&final_solutions_obstack); + + init_constraint_builder (); } -/* Create points-to sets for the current function. See the comments - at the start of the file for an algorithmic overview. */ +/* Build constraints for intraprocedural mode. */ static void -compute_points_to_sets (void) +intra_build_constraints (void) { basic_block bb; - varinfo_t vi; - - timevar_push (TV_TREE_PTA); - - init_alias_vars (); intra_create_variable_infos (cfun); @@ -5171,6 +5185,22 @@ compute_points_to_sets (void) fprintf (dump_file, "Points-to analysis\n\nConstraints:\n\n"); dump_constraints (dump_file, 0); } +} + +/* Create points-to sets for the current function. See the comments + at the start of the file for an algorithmic overview. */ + +static void +compute_points_to_sets (void) +{ + basic_block bb; + varinfo_t vi; + + timevar_push (TV_TREE_PTA); + + init_alias_vars (); + + intra_build_constraints (); /* From the constraints compute the points-to sets. */ solve_constraints (); @@ -5306,8 +5336,6 @@ delete_points_to_sets (void) fprintf (dump_file, "Points to sets created:%d\n", stats.points_to_sets_created); - delete vi_for_tree; - delete call_stmt_vars; bitmap_obstack_release (&pta_obstack); constraints.release (); @@ -5315,12 +5343,11 @@ delete_points_to_sets (void) varmap.release (); variable_info_pool.release (); - constraint_pool.release (); - - obstack_free (&fake_var_decl_obstack, NULL); delete final_solutions; obstack_free (&final_solutions_obstack, NULL); + + delete_constraint_builder (); } struct vls_data @@ -5745,33 +5772,14 @@ refered_from_nonlocal_var (struct varpool_node *node, void *data) return false; } -/* Execute the driver for IPA PTA. */ -static unsigned int -ipa_pta_execute (void) +/* Create function infos. */ + +static void +ipa_create_function_infos (void) { struct cgraph_node *node; - varpool_node *var; - unsigned int from = 0; - - in_ipa_mode = 1; - - init_alias_vars (); + unsigned int constr_count = constraints.length (); - if (dump_file && (dump_flags & TDF_DETAILS)) - { - symtab->dump (dump_file); - fprintf (dump_file, "\n"); - } - - if (dump_file && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, "Generating generic constraints\n\n"); - dump_constraints (dump_file, from); - fprintf (dump_file, "\n"); - from = constraints.length (); - } - - /* Build the constraints. */ FOR_EACH_DEFINED_FUNCTION (node) { varinfo_t vi; @@ -5803,7 +5811,7 @@ ipa_pta_execute (void) alias_get_name (node->decl), false, nonlocal_p); if (dump_file && (dump_flags & TDF_DETAILS) - && from != constraints.length ()) + && constr_count != constraints.length ()) { fprintf (dump_file, "Generating initial constraints for %s", @@ -5813,17 +5821,25 @@ ipa_pta_execute (void) IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (node->decl))); fprintf (dump_file, "\n\n"); - dump_constraints (dump_file, from); + dump_constraints (dump_file, constr_count); fprintf (dump_file, "\n"); - from = constraints.length (); + constr_count = constraints.length (); } node->call_for_symbol_thunks_and_aliases (associate_varinfo_to_alias, vi, true); } +} + +/* Create constraints for global variables and their initializers. */ + +static void +ipa_create_global_variable_infos (void) +{ + varpool_node *var; + unsigned int constr_count = constraints.length (); - /* Create constraints for global variables and their initializers. */ FOR_EACH_VARIABLE (var) { if (var->alias && var->analyzed) @@ -5844,14 +5860,27 @@ ipa_pta_execute (void) } if (dump_file && (dump_flags & TDF_DETAILS) - && from != constraints.length ()) + && constr_count != constraints.length ()) { fprintf (dump_file, "Generating constraints for global initializers\n\n"); - dump_constraints (dump_file, from); + dump_constraints (dump_file, constr_count); fprintf (dump_file, "\n"); - from = constraints.length (); + constr_count = constraints.length (); } +} + +/* Build constraints for ipa mode. */ + +static void +ipa_build_constraints (void) +{ + struct cgraph_node *node; + + ipa_create_function_infos (); + ipa_create_global_variable_infos (); + + unsigned int constr_count = constraints.length (); FOR_EACH_DEFINED_FUNCTION (node) { @@ -5878,7 +5907,7 @@ ipa_pta_execute (void) func = DECL_STRUCT_FUNCTION (node->decl); gcc_assert (cfun == NULL); - /* Build constriants for the function body. */ + /* Build constraints for the function body. */ FOR_EACH_BB_FN (bb, func) { for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi); @@ -5903,12 +5932,40 @@ ipa_pta_execute (void) if (dump_file && (dump_flags & TDF_DETAILS)) { fprintf (dump_file, "\n"); - dump_constraints (dump_file, from); + dump_constraints (dump_file, constr_count); fprintf (dump_file, "\n"); - from = constraints.length (); + constr_count = constraints.length (); } } +} + + +/* Execute the driver for IPA PTA. */ +static unsigned int +ipa_pta_execute (void) +{ + struct cgraph_node *node; + + in_ipa_mode = 1; + + init_alias_vars (); + + if (dump_file && (dump_flags & TDF_DETAILS)) + { + symtab->dump (dump_file); + fprintf (dump_file, "\n"); + } + + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "Generating generic constraints\n\n"); + dump_constraints (dump_file, 0); + fprintf (dump_file, "\n"); + } + + ipa_build_constraints (); + /* From the constraints compute the points-to sets. */ solve_constraints (); From 0738f0ae350d61e7d9462d4ba60364ae00bfdbdc Mon Sep 17 00:00:00 2001 From: Filip Kastl Date: Thu, 9 Oct 2025 13:45:17 +0200 Subject: [PATCH 184/216] tree-ssa-structalias: Put constraint building into its own file This patch cuts out points-to constraint building from tree-ssa-structalias.cc and places it into a new file gimple-ssa-pta-constraints.cc. The diff of tree-ssa-structalias.cc ended up being messy, so here is a summary of changes I made that may not be apparent at first glance. I didn't do any functional changes. Everything is just shifting functions and declarations around and giving external linkage to some things. - These functions now have external linkage and got shifted to the beginning of the file: determine_global_memory_access fndecl_maybe_in_other_partition new_var_info - The using namespace pointer_analysis directive got shifted to the beginning of the file - Declarations of these global variables got shifted to the beginning of the file: variable_info_pool final_solutions final_solutions_obstack - These global variables got external linkage: use_field_sensitive in_ipa_mode gcc/ChangeLog: * Makefile.in: Add gimple-ssa-pta-constraints.cc. * tree-ssa-structalias.cc (determine_global_memory_access): External linkage, move to namespace pointer_analysis. (fndecl_maybe_in_other_partition): External linkage, move to namespace pointer_analysis. (new_var_info): External linkage, move to namespace pointer_analysis. (create_variable_info_for): Move to gimple-ssa-pta-constraints.cc. (lookup_vi_for_tree): External linkage, move to namespace pointer_analysis, move to gimple-ssa-pta-constraints.cc. (type_can_have_subvars): Move to gimple-ssa-pta-constraints.cc. (make_param_constraints): Move to gimple-ssa-pta-constraints.cc. (get_call_vi): Move to gimple-ssa-pta-constraints.cc. (lookup_call_use_vi): External linkage, move to namespace pointer_analysis, move to gimple-ssa-pta-constraints.cc. (lookup_call_clobber_vi): External linkage, move to namespace pointer_analysis, move to gimple-ssa-pta-constraints.cc. (get_call_use_vi): Move to gimple-ssa-pta-constraints.cc. (get_call_clobber_vi): Move to gimple-ssa-pta-constraints.cc. (get_constraint_for_1): Move to gimple-ssa-pta-constraints.cc. (get_constraint_for): Move to gimple-ssa-pta-constraints.cc. (get_constraint_for_rhs): Move to gimple-ssa-pta-constraints.cc. (do_deref): Move to gimple-ssa-pta-constraints.cc. (constraint_pool): Move to gimple-ssa-pta-constraints.cc. (new_constraint): Move to gimple-ssa-pta-constraints.cc. (insert_vi_for_tree): Move to gimple-ssa-pta-constraints.cc. (alias_get_name): Move to gimple-ssa-pta-constraints.cc. (get_vi_for_tree): Move to gimple-ssa-pta-constraints.cc. (new_scalar_tmp_constraint_exp): Move to gimple-ssa-pta-constraints.cc. (get_constraint_for_ssa_var): Move to gimple-ssa-pta-constraints.cc. (process_constraint): Move to gimple-ssa-pta-constraints.cc. (bitpos_of_field): Move to gimple-ssa-pta-constraints.cc. (get_constraint_for_ptr_offset): Move to gimple-ssa-pta-constraints.cc. (get_constraint_for_component_ref): Move to gimple-ssa-pta-constraints.cc. (get_constraint_for_address_of): Move to gimple-ssa-pta-constraints.cc. (process_all_all_constraints): Move to gimple-ssa-pta-constraints.cc. (do_structure_copy): Move to gimple-ssa-pta-constraints.cc. (make_constraints_to): Move to gimple-ssa-pta-constraints.cc. (make_constraint_to): Move to gimple-ssa-pta-constraints.cc. (make_constraint_from): Move to gimple-ssa-pta-constraints.cc. (make_copy_constraint): Move to gimple-ssa-pta-constraints.cc. (make_escape_constraint): Move to gimple-ssa-pta-constraints.cc. (make_indirect_escape_constraint): Move to gimple-ssa-pta-constraints.cc. (make_transitive_closure_constraints): Move to gimple-ssa-pta-constraints.cc. (make_any_offset_constraints): Move to gimple-ssa-pta-constraints.cc. (struct obstack fake_var_decl_obstack): Move to gimple-ssa-pta-constraints.cc. (build_fake_var_decl): Move to gimple-ssa-pta-constraints.cc. (make_heapvar): Move to gimple-ssa-pta-constraints.cc. (make_constraint_from_restrict): Move to gimple-ssa-pta-constraints.cc. (make_constraint_from_global_restrict): Move to gimple-ssa-pta-constraints.cc. (get_function_part_constraint): Move to gimple-ssa-pta-constraints.cc. (handle_call_arg): Move to gimple-ssa-pta-constraints.cc. (handle_rhs_call): Move to gimple-ssa-pta-constraints.cc. (handle_lhs_call): Move to gimple-ssa-pta-constraints.cc. (get_fi_for_callee): Move to gimple-ssa-pta-constraints.cc. (find_func_aliases_for_call_arg): Move to gimple-ssa-pta-constraints.cc. (find_func_aliases_for_builtin_call): Move to gimple-ssa-pta-constraints.cc. (find_func_aliases_for_call): Move to gimple-ssa-pta-constraints.cc. (find_func_aliases): Move to gimple-ssa-pta-constraints.cc. (process_ipa_clobber): Move to gimple-ssa-pta-constraints.cc. (find_func_clobbers): Move to gimple-ssa-pta-constraints.cc. (struct fieldoff): Move to gimple-ssa-pta-constraints.cc. (fieldoff_compare): Move to gimple-ssa-pta-constraints.cc. (sort_fieldstack): Move to gimple-ssa-pta-constraints.cc. (var_can_have_subvars): Move to gimple-ssa-pta-constraints.cc. (type_must_have_pointers): Move to gimple-ssa-pta-constraints.cc. (field_must_have_pointers): Move to gimple-ssa-pta-constraints.cc. (push_fields_onto_fieldstack): Move to gimple-ssa-pta-constraints.cc. (count_num_arguments): Move to gimple-ssa-pta-constraints.cc. (create_function_info_for): Move to gimple-ssa-pta-constraints.cc. (check_for_overlaps): Move to gimple-ssa-pta-constraints.cc. (create_variable_info_for_1): Move to gimple-ssa-pta-constraints.cc. (intra_create_variable_infos): Move to gimple-ssa-pta-constraints.cc. (init_base_vars): Move to gimple-ssa-pta-constraints.cc. (init_constraint_builder): Move to gimple-ssa-pta-constraints.cc. (delete_constraint_builder): Move to gimple-ssa-pta-constraints.cc. (intra_build_constraints): Move to gimple-ssa-pta-constraints.cc. (delete_points_to_sets): Move to gimple-ssa-pta-constraints.cc. (associate_varinfo_to_alias): Move to gimple-ssa-pta-constraints.cc (refered_from_nonlocal_fn): Move to gimple-ssa-pta-constraints.cc (refered_from_nonlocal_var): Move to gimple-ssa-pta-constraints.cc (ipa_create_function_infos): Move to gimple-ssa-pta-constraints.cc (ipa_create_global_variable_infos): Move to gimple-ssa-pta-constraints.cc (ipa_build_constraints): Move to gimple-ssa-pta-constraints.cc * tree-ssa-structalias.h (struct constraint_stats): (determine_global_memory_access): External linkage, move to namespace pointer_analysis. (fndecl_maybe_in_other_partition): External linkage, move to namespace pointer_analysis. (new_var_info): External linkage, move to namespace pointer_analysis. * gimple-ssa-pta-constraints.cc: New file. * gimple-ssa-pta-constraints.h: New file. Signed-off-by: Filip Kastl --- gcc/Makefile.in | 1 + gcc/gimple-ssa-pta-constraints.cc | 4184 ++++++++++++++++++++++++++ gcc/gimple-ssa-pta-constraints.h | 38 + gcc/tree-ssa-structalias.cc | 4605 ++--------------------------- gcc/tree-ssa-structalias.h | 15 + 5 files changed, 4473 insertions(+), 4370 deletions(-) create mode 100644 gcc/gimple-ssa-pta-constraints.cc create mode 100644 gcc/gimple-ssa-pta-constraints.h diff --git a/gcc/Makefile.in b/gcc/Makefile.in index e36e04a62eab..cf1408d56e29 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1804,6 +1804,7 @@ OBJS = \ tree-ssa-strlen.o \ tree-ssa-structalias.o \ pta-andersen.o \ + gimple-ssa-pta-constraints.o \ tree-ssa-tail-merge.o \ tree-ssa-ter.o \ tree-ssa-threadbackward.o \ diff --git a/gcc/gimple-ssa-pta-constraints.cc b/gcc/gimple-ssa-pta-constraints.cc new file mode 100644 index 000000000000..7212707858e5 --- /dev/null +++ b/gcc/gimple-ssa-pta-constraints.cc @@ -0,0 +1,4184 @@ +/* Constraint builder for tree based points-to analysis + Copyright (C) 2005-2025 Free Software Foundation, Inc. + Contributed by Daniel Berlin + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + GCC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING3. If not see + . */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "backend.h" +#include "rtl.h" +#include "tree.h" +#include "gimple.h" +#include "alloc-pool.h" +#include "tree-pass.h" +#include "ssa.h" +#include "cgraph.h" +#include "tree-pretty-print.h" +#include "diagnostic-core.h" +#include "fold-const.h" +#include "stor-layout.h" +#include "stmt.h" +#include "gimple-iterator.h" +#include "tree-into-ssa.h" +#include "tree-dfa.h" +#include "gimple-walk.h" +#include "varasm.h" +#include "stringpool.h" +#include "attribs.h" +#include "tree-ssa.h" +#include "tree-cfg.h" +#include "gimple-range.h" +#include "ipa-modref-tree.h" +#include "ipa-modref.h" +#include "attr-fnspec.h" + +#include "tree-ssa-structalias.h" +#include "gimple-ssa-pta-constraints.h" + +using namespace pointer_analysis; + +/* Map from trees to variable infos. */ +static hash_map *vi_for_tree; + +/* A map mapping call statements to per-stmt variables for uses + and clobbers specific to the call. */ +static hash_map *call_stmt_vars; + +static unsigned int create_variable_info_for (tree, const char *, bool); +static inline bool type_can_have_subvars (const_tree); +static void make_param_constraints (varinfo_t); + +/* Lookup or create the variable for the call statement CALL. */ + +static varinfo_t +get_call_vi (gcall *call) +{ + varinfo_t vi, vi2; + + bool existed; + varinfo_t *slot_p = &call_stmt_vars->get_or_insert (call, &existed); + if (existed) + return *slot_p; + + vi = new_var_info (NULL_TREE, "CALLUSED", true); + vi->offset = 0; + vi->size = 1; + vi->fullsize = 2; + vi->is_full_var = true; + vi->is_reg_var = true; + + vi2 = new_var_info (NULL_TREE, "CALLCLOBBERED", true); + vi2->offset = 1; + vi2->size = 1; + vi2->fullsize = 2; + vi2->is_full_var = true; + vi2->is_reg_var = true; + + vi->next = vi2->id; + + *slot_p = vi; + return vi; +} + +/* Lookup or create the variable for the call statement CALL representing + the uses. */ + +static varinfo_t +get_call_use_vi (gcall *call) +{ + return get_call_vi (call); +} + +/* Lookup or create the variable for the call statement CALL representing + the clobbers. */ + +static varinfo_t ATTRIBUTE_UNUSED +get_call_clobber_vi (gcall *call) +{ + return vi_next (get_call_vi (call)); +} + + +static void get_constraint_for_1 (tree, vec *, bool, bool); +static void get_constraint_for (tree, vec *); +static void get_constraint_for_rhs (tree, vec *); +static void do_deref (vec *); + +/* Allocator for 'constraints' vector. */ + +static object_allocator constraint_pool ("Constraint pool"); + +/* Create a new constraint consisting of LHS and RHS expressions. */ + +static constraint_t +new_constraint (const struct constraint_expr lhs, + const struct constraint_expr rhs) +{ + constraint_t ret = constraint_pool.allocate (); + ret->lhs = lhs; + ret->rhs = rhs; + return ret; +} + +/* Insert ID as the variable id for tree T in the vi_for_tree map. */ + +static void +insert_vi_for_tree (tree t, varinfo_t vi) +{ + gcc_assert (vi); + bool existed = vi_for_tree->put (t, vi); + gcc_assert (!existed); +} + +/* Return a printable name for DECL. */ + +static const char * +alias_get_name (tree decl) +{ + const char *res = "NULL"; + if (dump_file) + { + char *temp = NULL; + if (TREE_CODE (decl) == SSA_NAME) + { + res = get_name (decl); + temp = xasprintf ("%s_%u", res ? res : "", SSA_NAME_VERSION (decl)); + } + else if (HAS_DECL_ASSEMBLER_NAME_P (decl) + && DECL_ASSEMBLER_NAME_SET_P (decl)) + res = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME_RAW (decl)); + else if (DECL_P (decl)) + { + res = get_name (decl); + if (!res) + temp = xasprintf ("D.%u", DECL_UID (decl)); + } + + if (temp) + { + res = ggc_strdup (temp); + free (temp); + } + } + + return res; +} + +/* Find the variable id for tree T in the map. + If T doesn't exist in the map, create an entry for it and return it. */ + +static varinfo_t +get_vi_for_tree (tree t) +{ + varinfo_t *slot = vi_for_tree->get (t); + if (slot == NULL) + { + unsigned int id = create_variable_info_for (t, alias_get_name (t), false); + return get_varinfo (id); + } + + return *slot; +} + +/* Get a scalar constraint expression for a new temporary variable. */ + +static struct constraint_expr +new_scalar_tmp_constraint_exp (const char *name, bool add_id) +{ + struct constraint_expr tmp; + varinfo_t vi; + + vi = new_var_info (NULL_TREE, name, add_id); + vi->offset = 0; + vi->size = -1; + vi->fullsize = -1; + vi->is_full_var = 1; + vi->is_reg_var = 1; + + tmp.var = vi->id; + tmp.type = SCALAR; + tmp.offset = 0; + + return tmp; +} + +/* Get a constraint expression vector from an SSA_VAR_P node. + If address_p is true, the result will be taken its address of. */ + +static void +get_constraint_for_ssa_var (tree t, vec *results, bool address_p) +{ + struct constraint_expr cexpr; + varinfo_t vi; + + /* We allow FUNCTION_DECLs here even though it doesn't make much sense. */ + gcc_assert (TREE_CODE (t) == SSA_NAME || DECL_P (t)); + + if (TREE_CODE (t) == SSA_NAME + && SSA_NAME_IS_DEFAULT_DEF (t)) + { + /* For parameters, get at the points-to set for the actual parm + decl. */ + if (TREE_CODE (SSA_NAME_VAR (t)) == PARM_DECL + || TREE_CODE (SSA_NAME_VAR (t)) == RESULT_DECL) + { + get_constraint_for_ssa_var (SSA_NAME_VAR (t), results, address_p); + return; + } + /* For undefined SSA names return nothing. */ + else if (!ssa_defined_default_def_p (t)) + { + cexpr.var = nothing_id; + cexpr.type = SCALAR; + cexpr.offset = 0; + results->safe_push (cexpr); + return; + } + } + + /* For global variables resort to the alias target. */ + if (VAR_P (t) && (TREE_STATIC (t) || DECL_EXTERNAL (t))) + { + varpool_node *node = varpool_node::get (t); + if (node && node->alias && node->analyzed) + { + node = node->ultimate_alias_target (); + /* Canonicalize the PT uid of all aliases to the ultimate target. + ??? Hopefully the set of aliases can't change in a way that + changes the ultimate alias target. */ + gcc_assert ((! DECL_PT_UID_SET_P (node->decl) + || DECL_PT_UID (node->decl) == DECL_UID (node->decl)) + && (! DECL_PT_UID_SET_P (t) + || DECL_PT_UID (t) == DECL_UID (node->decl))); + DECL_PT_UID (t) = DECL_UID (node->decl); + t = node->decl; + } + + /* If this is decl may bind to NULL note that. */ + if (address_p + && (! node || ! node->nonzero_address ())) + { + cexpr.var = nothing_id; + cexpr.type = SCALAR; + cexpr.offset = 0; + results->safe_push (cexpr); + } + } + + vi = get_vi_for_tree (t); + cexpr.var = vi->id; + cexpr.type = SCALAR; + cexpr.offset = 0; + + /* If we are not taking the address of the constraint expr, add all + sub-fiels of the variable as well. */ + if (!address_p + && !vi->is_full_var) + { + for (; vi; vi = vi_next (vi)) + { + cexpr.var = vi->id; + results->safe_push (cexpr); + } + return; + } + + results->safe_push (cexpr); +} + +/* Process constraint T, performing various simplifications and then + adding it to our list of overall constraints. */ + +static void +process_constraint (constraint_t t) +{ + struct constraint_expr rhs = t->rhs; + struct constraint_expr lhs = t->lhs; + + gcc_assert (rhs.var < varmap.length ()); + gcc_assert (lhs.var < varmap.length ()); + + /* If we didn't get any useful constraint from the lhs we get + &ANYTHING as fallback from get_constraint_for. Deal with + it here by turning it into *ANYTHING. */ + if (lhs.type == ADDRESSOF + && lhs.var == anything_id) + t->lhs.type = lhs.type = DEREF; + + /* ADDRESSOF on the lhs is invalid. */ + gcc_assert (lhs.type != ADDRESSOF); + + /* We shouldn't add constraints from things that cannot have pointers. + It's not completely trivial to avoid in the callers, so do it here. */ + if (rhs.type != ADDRESSOF + && !get_varinfo (rhs.var)->may_have_pointers) + return; + + /* Likewise adding to the solution of a non-pointer var isn't useful. */ + if (!get_varinfo (lhs.var)->may_have_pointers) + return; + + /* This can happen in our IR with things like n->a = *p. */ + if (rhs.type == DEREF && lhs.type == DEREF && rhs.var != anything_id) + { + /* Split into tmp = *rhs, *lhs = tmp. */ + struct constraint_expr tmplhs; + tmplhs = new_scalar_tmp_constraint_exp ("doubledereftmp", true); + process_constraint (new_constraint (tmplhs, rhs)); + process_constraint (new_constraint (lhs, tmplhs)); + } + else if ((rhs.type != SCALAR || rhs.offset != 0) && lhs.type == DEREF) + { + /* Split into tmp = &rhs, *lhs = tmp. */ + struct constraint_expr tmplhs; + tmplhs = new_scalar_tmp_constraint_exp ("derefaddrtmp", true); + process_constraint (new_constraint (tmplhs, rhs)); + process_constraint (new_constraint (lhs, tmplhs)); + } + else + { + gcc_assert (rhs.type != ADDRESSOF || rhs.offset == 0); + if (rhs.type == ADDRESSOF) + get_varinfo (get_varinfo (rhs.var)->head)->address_taken = true; + constraints.safe_push (t); + } +} + + +/* Return the position, in bits, of FIELD_DECL from the beginning of its + structure. */ + +static unsigned HOST_WIDE_INT +bitpos_of_field (const tree fdecl) +{ + if (!tree_fits_uhwi_p (DECL_FIELD_OFFSET (fdecl)) + || !tree_fits_uhwi_p (DECL_FIELD_BIT_OFFSET (fdecl))) + return -1; + + return (tree_to_uhwi (DECL_FIELD_OFFSET (fdecl)) * BITS_PER_UNIT + + tree_to_uhwi (DECL_FIELD_BIT_OFFSET (fdecl))); +} + + +/* Get constraint expressions for offsetting PTR by OFFSET. Stores the + resulting constraint expressions in *RESULTS. */ + +static void +get_constraint_for_ptr_offset (tree ptr, tree offset, + vec *results) +{ + struct constraint_expr c; + unsigned int j, n; + HOST_WIDE_INT rhsoffset; + + /* If we do not do field-sensitive PTA adding offsets to pointers + does not change the points-to solution. */ + if (!use_field_sensitive) + { + get_constraint_for_rhs (ptr, results); + return; + } + + /* If the offset is not a non-negative integer constant that fits + in a HOST_WIDE_INT, we have to fall back to a conservative + solution which includes all sub-fields of all pointed-to + variables of ptr. */ + if (offset == NULL_TREE + || TREE_CODE (offset) != INTEGER_CST) + rhsoffset = UNKNOWN_OFFSET; + else + { + /* Sign-extend the offset. */ + offset_int soffset = offset_int::from (wi::to_wide (offset), SIGNED); + if (!wi::fits_shwi_p (soffset)) + rhsoffset = UNKNOWN_OFFSET; + else + { + /* Make sure the bit-offset also fits. */ + HOST_WIDE_INT rhsunitoffset = soffset.to_shwi (); + rhsoffset = rhsunitoffset * (unsigned HOST_WIDE_INT) BITS_PER_UNIT; + if (rhsunitoffset != rhsoffset / BITS_PER_UNIT) + rhsoffset = UNKNOWN_OFFSET; + } + } + + get_constraint_for_rhs (ptr, results); + if (rhsoffset == 0) + return; + + /* As we are eventually appending to the solution do not use + vec::iterate here. */ + n = results->length (); + for (j = 0; j < n; j++) + { + varinfo_t curr; + c = (*results)[j]; + curr = get_varinfo (c.var); + + if (c.type == ADDRESSOF + /* If this varinfo represents a full variable just use it. */ + && curr->is_full_var) + ; + else if (c.type == ADDRESSOF + /* If we do not know the offset add all subfields. */ + && rhsoffset == UNKNOWN_OFFSET) + { + varinfo_t temp = get_varinfo (curr->head); + do + { + struct constraint_expr c2; + c2.var = temp->id; + c2.type = ADDRESSOF; + c2.offset = 0; + if (c2.var != c.var) + results->safe_push (c2); + temp = vi_next (temp); + } + while (temp); + } + else if (c.type == ADDRESSOF) + { + varinfo_t temp; + unsigned HOST_WIDE_INT offset = curr->offset + rhsoffset; + + /* If curr->offset + rhsoffset is less than zero adjust it. */ + if (rhsoffset < 0 + && curr->offset < offset) + offset = 0; + + /* We have to include all fields that overlap the current + field shifted by rhsoffset. And we include at least + the last or the first field of the variable to represent + reachability of off-bound addresses, in particular &object + 1, + conservatively correct. */ + temp = first_or_preceding_vi_for_offset (curr, offset); + c.var = temp->id; + c.offset = 0; + temp = vi_next (temp); + while (temp + && temp->offset < offset + curr->size) + { + struct constraint_expr c2; + c2.var = temp->id; + c2.type = ADDRESSOF; + c2.offset = 0; + results->safe_push (c2); + temp = vi_next (temp); + } + } + else if (c.type == SCALAR) + { + gcc_assert (c.offset == 0); + c.offset = rhsoffset; + } + else + /* We shouldn't get any DEREFs here. */ + gcc_unreachable (); + + (*results)[j] = c; + } +} + + +/* Given a COMPONENT_REF T, return the constraint_expr vector for it. + If address_p is true the result will be taken its address of. + If lhs_p is true then the constraint expression is assumed to be used + as the lhs. */ + +static void +get_constraint_for_component_ref (tree t, vec *results, + bool address_p, bool lhs_p) +{ + tree orig_t = t; + poly_int64 bitsize = -1; + poly_int64 bitmaxsize = -1; + poly_int64 bitpos; + bool reverse; + tree forzero; + + /* Some people like to do cute things like take the address of + &0->a.b. */ + forzero = t; + while (handled_component_p (forzero) + || INDIRECT_REF_P (forzero) + || TREE_CODE (forzero) == MEM_REF) + forzero = TREE_OPERAND (forzero, 0); + + if (CONSTANT_CLASS_P (forzero) && integer_zerop (forzero)) + { + struct constraint_expr temp; + + temp.offset = 0; + temp.var = integer_id; + temp.type = SCALAR; + results->safe_push (temp); + return; + } + + t = get_ref_base_and_extent (t, &bitpos, &bitsize, &bitmaxsize, &reverse); + + /* We can end up here for component references on a + VIEW_CONVERT_EXPR <>(&foobar) or things like a + BIT_FIELD_REF <&MEM[(void *)&b + 4B], ...>. So for + symbolic constants simply give up. */ + if (TREE_CODE (t) == ADDR_EXPR) + { + constraint_expr result; + result.type = SCALAR; + result.var = anything_id; + result.offset = 0; + results->safe_push (result); + return; + } + + /* Avoid creating pointer-offset constraints, so handle MEM_REF + offsets directly. Pretend to take the address of the base, + we'll take care of adding the required subset of sub-fields below. */ + if (TREE_CODE (t) == MEM_REF + && !integer_zerop (TREE_OPERAND (t, 0))) + { + poly_offset_int off = mem_ref_offset (t); + off <<= LOG2_BITS_PER_UNIT; + off += bitpos; + poly_int64 off_hwi; + if (off.to_shwi (&off_hwi)) + bitpos = off_hwi; + else + { + bitpos = 0; + bitmaxsize = -1; + } + get_constraint_for_1 (TREE_OPERAND (t, 0), results, false, lhs_p); + do_deref (results); + } + else + get_constraint_for_1 (t, results, true, lhs_p); + + /* Strip off nothing_id. */ + if (results->length () == 2) + { + gcc_assert ((*results)[0].var == nothing_id); + results->unordered_remove (0); + } + gcc_assert (results->length () == 1); + struct constraint_expr &result = results->last (); + + if (result.type == SCALAR + && get_varinfo (result.var)->is_full_var) + /* For single-field vars do not bother about the offset. */ + result.offset = 0; + else if (result.type == SCALAR) + { + /* In languages like C, you can access one past the end of an + array. You aren't allowed to dereference it, so we can + ignore this constraint. When we handle pointer subtraction, + we may have to do something cute here. */ + + if (maybe_lt (poly_uint64 (bitpos), get_varinfo (result.var)->fullsize) + && maybe_ne (bitmaxsize, 0)) + { + /* It's also not true that the constraint will actually start at the + right offset, it may start in some padding. We only care about + setting the constraint to the first actual field it touches, so + walk to find it. */ + struct constraint_expr cexpr = result; + varinfo_t curr; + results->pop (); + cexpr.offset = 0; + for (curr = get_varinfo (cexpr.var); curr; curr = vi_next (curr)) + { + if (ranges_maybe_overlap_p (poly_int64 (curr->offset), + curr->size, bitpos, bitmaxsize)) + { + cexpr.var = curr->id; + results->safe_push (cexpr); + if (address_p) + break; + } + } + /* If we are going to take the address of this field then + to be able to compute reachability correctly add at least + the last field of the variable. */ + if (address_p && results->length () == 0) + { + curr = get_varinfo (cexpr.var); + while (curr->next != 0) + curr = vi_next (curr); + cexpr.var = curr->id; + results->safe_push (cexpr); + } + else if (results->length () == 0) + /* Assert that we found *some* field there. The user couldn't be + accessing *only* padding. */ + /* Still the user could access one past the end of an array + embedded in a struct resulting in accessing *only* padding. */ + /* Or accessing only padding via type-punning to a type + that has a filed just in padding space. */ + { + cexpr.type = SCALAR; + cexpr.var = anything_id; + cexpr.offset = 0; + results->safe_push (cexpr); + } + } + else if (known_eq (bitmaxsize, 0)) + { + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf (dump_file, "Access to zero-sized part of variable, " + "ignoring\n"); + } + else + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf (dump_file, "Access to past the end of variable, ignoring\n"); + } + else if (result.type == DEREF) + { + /* If we do not know exactly where the access goes say so. Note + that only for non-structure accesses we know that we access + at most one subfiled of any variable. */ + HOST_WIDE_INT const_bitpos; + if (!bitpos.is_constant (&const_bitpos) + || const_bitpos == -1 + || maybe_ne (bitsize, bitmaxsize) + || AGGREGATE_TYPE_P (TREE_TYPE (orig_t)) + || result.offset == UNKNOWN_OFFSET) + result.offset = UNKNOWN_OFFSET; + else + result.offset += const_bitpos; + } + else if (result.type == ADDRESSOF) + { + /* We can end up here for component references on constants like + VIEW_CONVERT_EXPR <>({ 0, 1, 2, 3 })[i]. */ + result.type = SCALAR; + result.var = anything_id; + result.offset = 0; + } + else + gcc_unreachable (); +} + + +/* Dereference the constraint expression CONS, and return the result. + DEREF (ADDRESSOF) = SCALAR + DEREF (SCALAR) = DEREF + DEREF (DEREF) = (temp = DEREF1; result = DEREF (temp)) + This is needed so that we can handle dereferencing DEREF constraints. */ + +static void +do_deref (vec *constraints) +{ + struct constraint_expr *c; + unsigned int i = 0; + + FOR_EACH_VEC_ELT (*constraints, i, c) + { + if (c->type == SCALAR) + c->type = DEREF; + else if (c->type == ADDRESSOF) + c->type = SCALAR; + else if (c->type == DEREF) + { + struct constraint_expr tmplhs; + tmplhs = new_scalar_tmp_constraint_exp ("dereftmp", true); + process_constraint (new_constraint (tmplhs, *c)); + c->var = tmplhs.var; + } + else + gcc_unreachable (); + } +} + +/* Given a tree T, return the constraint expression for taking the + address of it. */ + +static void +get_constraint_for_address_of (tree t, vec *results) +{ + struct constraint_expr *c; + unsigned int i; + + get_constraint_for_1 (t, results, true, true); + + FOR_EACH_VEC_ELT (*results, i, c) + { + if (c->type == DEREF) + c->type = SCALAR; + else + c->type = ADDRESSOF; + } +} + +/* Given a tree T, return the constraint expression for it. */ + +static void +get_constraint_for_1 (tree t, vec *results, bool address_p, + bool lhs_p) +{ + struct constraint_expr temp; + + /* x = integer is all glommed to a single variable, which doesn't + point to anything by itself. That is, of course, unless it is an + integer constant being treated as a pointer, in which case, we + will return that this is really the addressof anything. This + happens below, since it will fall into the default case. The only + case we know something about an integer treated like a pointer is + when it is the NULL pointer, and then we just say it points to + NULL. + + Do not do that if -fno-delete-null-pointer-checks though, because + in that case *NULL does not fail, so it _should_ alias *anything. + It is not worth adding a new option or renaming the existing one, + since this case is relatively obscure. */ + if ((TREE_CODE (t) == INTEGER_CST + && integer_zerop (t)) + /* The only valid CONSTRUCTORs in gimple with pointer typed + elements are zero-initializer. But in IPA mode we also + process global initializers, so verify at least. */ + || (TREE_CODE (t) == CONSTRUCTOR + && CONSTRUCTOR_NELTS (t) == 0)) + { + if (flag_delete_null_pointer_checks) + temp.var = nothing_id; + else + temp.var = nonlocal_id; + temp.type = ADDRESSOF; + temp.offset = 0; + results->safe_push (temp); + return; + } + + /* String constants are read-only, ideally we'd have a CONST_DECL + for those. */ + if (TREE_CODE (t) == STRING_CST) + { + temp.var = string_id; + temp.type = SCALAR; + temp.offset = 0; + results->safe_push (temp); + return; + } + + switch (TREE_CODE_CLASS (TREE_CODE (t))) + { + case tcc_expression: + { + switch (TREE_CODE (t)) + { + case ADDR_EXPR: + get_constraint_for_address_of (TREE_OPERAND (t, 0), results); + return; + default:; + } + break; + } + case tcc_reference: + { + if (!lhs_p && TREE_THIS_VOLATILE (t)) + /* Fall back to anything. */ + break; + + switch (TREE_CODE (t)) + { + case MEM_REF: + { + struct constraint_expr cs; + varinfo_t vi, curr; + get_constraint_for_ptr_offset (TREE_OPERAND (t, 0), + TREE_OPERAND (t, 1), results); + do_deref (results); + + /* If we are not taking the address then make sure to process + all subvariables we might access. */ + if (address_p) + return; + + cs = results->last (); + if (cs.type == DEREF + && type_can_have_subvars (TREE_TYPE (t))) + { + /* For dereferences this means we have to defer it + to solving time. */ + results->last ().offset = UNKNOWN_OFFSET; + return; + } + if (cs.type != SCALAR) + return; + + vi = get_varinfo (cs.var); + curr = vi_next (vi); + if (!vi->is_full_var + && curr) + { + unsigned HOST_WIDE_INT size; + if (tree_fits_uhwi_p (TYPE_SIZE (TREE_TYPE (t)))) + size = tree_to_uhwi (TYPE_SIZE (TREE_TYPE (t))); + else + size = -1; + for (; curr; curr = vi_next (curr)) + { + /* The start of the access might happen anywhere + within vi, so conservatively assume it was + at its end. */ + if (curr->offset - (vi->offset + vi->size - 1) < size) + { + cs.var = curr->id; + results->safe_push (cs); + } + else + break; + } + } + return; + } + case ARRAY_REF: + case ARRAY_RANGE_REF: + case COMPONENT_REF: + case IMAGPART_EXPR: + case REALPART_EXPR: + case BIT_FIELD_REF: + get_constraint_for_component_ref (t, results, address_p, lhs_p); + return; + case VIEW_CONVERT_EXPR: + get_constraint_for_1 (TREE_OPERAND (t, 0), results, address_p, + lhs_p); + return; + /* We are missing handling for TARGET_MEM_REF here. */ + default:; + } + break; + } + case tcc_exceptional: + { + switch (TREE_CODE (t)) + { + case SSA_NAME: + { + get_constraint_for_ssa_var (t, results, address_p); + return; + } + case CONSTRUCTOR: + { + unsigned int i; + tree val; + auto_vec tmp; + FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (t), i, val) + { + struct constraint_expr *rhsp; + unsigned j; + get_constraint_for_1 (val, &tmp, address_p, lhs_p); + FOR_EACH_VEC_ELT (tmp, j, rhsp) + results->safe_push (*rhsp); + tmp.truncate (0); + } + /* We do not know whether the constructor was complete, + so technically we have to add &NOTHING or &ANYTHING + like we do for an empty constructor as well. */ + return; + } + default:; + } + break; + } + case tcc_declaration: + { + if (!lhs_p && VAR_P (t) && TREE_THIS_VOLATILE (t)) + /* Fall back to anything. */ + break; + get_constraint_for_ssa_var (t, results, address_p); + return; + } + case tcc_constant: + { + /* We cannot refer to automatic variables through constants. */ + temp.type = ADDRESSOF; + temp.var = nonlocal_id; + temp.offset = 0; + results->safe_push (temp); + return; + } + default:; + } + + /* The default fallback is a constraint from anything. */ + temp.type = ADDRESSOF; + temp.var = anything_id; + temp.offset = 0; + results->safe_push (temp); +} + +/* Given a gimple tree T, return the constraint expression vector for it. */ + +static void +get_constraint_for (tree t, vec *results) +{ + gcc_assert (results->length () == 0); + + get_constraint_for_1 (t, results, false, true); +} + +/* Given a gimple tree T, return the constraint expression vector for it + to be used as the rhs of a constraint. */ + +static void +get_constraint_for_rhs (tree t, vec *results) +{ + gcc_assert (results->length () == 0); + + get_constraint_for_1 (t, results, false, false); +} + + +/* Efficiently generates constraints from all entries in *RHSC to all + entries in *LHSC. */ + +static void +process_all_all_constraints (const vec &lhsc, + const vec &rhsc) +{ + struct constraint_expr *lhsp, *rhsp; + unsigned i, j; + + if (lhsc.length () <= 1 || rhsc.length () <= 1) + { + FOR_EACH_VEC_ELT (lhsc, i, lhsp) + FOR_EACH_VEC_ELT (rhsc, j, rhsp) + process_constraint (new_constraint (*lhsp, *rhsp)); + } + else + { + struct constraint_expr tmp; + tmp = new_scalar_tmp_constraint_exp ("allalltmp", true); + FOR_EACH_VEC_ELT (rhsc, i, rhsp) + process_constraint (new_constraint (tmp, *rhsp)); + FOR_EACH_VEC_ELT (lhsc, i, lhsp) + process_constraint (new_constraint (*lhsp, tmp)); + } +} + +/* Handle aggregate copies by expanding into copies of the respective + fields of the structures. */ + +static void +do_structure_copy (tree lhsop, tree rhsop) +{ + struct constraint_expr *lhsp, *rhsp; + auto_vec lhsc; + auto_vec rhsc; + unsigned j; + + get_constraint_for (lhsop, &lhsc); + get_constraint_for_rhs (rhsop, &rhsc); + lhsp = &lhsc[0]; + rhsp = &rhsc[0]; + if (lhsp->type == DEREF + || (lhsp->type == ADDRESSOF && lhsp->var == anything_id) + || rhsp->type == DEREF) + { + if (lhsp->type == DEREF) + { + gcc_assert (lhsc.length () == 1); + lhsp->offset = UNKNOWN_OFFSET; + } + if (rhsp->type == DEREF) + { + gcc_assert (rhsc.length () == 1); + rhsp->offset = UNKNOWN_OFFSET; + } + process_all_all_constraints (lhsc, rhsc); + } + else if (lhsp->type == SCALAR + && (rhsp->type == SCALAR + || rhsp->type == ADDRESSOF)) + { + HOST_WIDE_INT lhssize, lhsoffset; + HOST_WIDE_INT rhssize, rhsoffset; + bool reverse; + unsigned k = 0; + if (!get_ref_base_and_extent_hwi (lhsop, &lhsoffset, &lhssize, &reverse) + || !get_ref_base_and_extent_hwi (rhsop, &rhsoffset, &rhssize, + &reverse)) + { + process_all_all_constraints (lhsc, rhsc); + return; + } + for (j = 0; lhsc.iterate (j, &lhsp);) + { + varinfo_t lhsv, rhsv; + rhsp = &rhsc[k]; + lhsv = get_varinfo (lhsp->var); + rhsv = get_varinfo (rhsp->var); + if (lhsv->may_have_pointers + && (lhsv->is_full_var + || rhsv->is_full_var + || ranges_overlap_p (lhsv->offset + rhsoffset, lhsv->size, + rhsv->offset + lhsoffset, rhsv->size))) + process_constraint (new_constraint (*lhsp, *rhsp)); + if (!rhsv->is_full_var + && (lhsv->is_full_var + || (lhsv->offset + rhsoffset + lhsv->size + > rhsv->offset + lhsoffset + rhsv->size))) + { + ++k; + if (k >= rhsc.length ()) + break; + } + else + ++j; + } + } + else + gcc_unreachable (); +} + +/* Create constraints ID = { rhsc }. */ + +static void +make_constraints_to (unsigned id, const vec &rhsc) +{ + struct constraint_expr *c; + struct constraint_expr includes; + unsigned int j; + + includes.var = id; + includes.offset = 0; + includes.type = SCALAR; + + FOR_EACH_VEC_ELT (rhsc, j, c) + process_constraint (new_constraint (includes, *c)); +} + +/* Create a constraint ID = OP. */ + +static void +make_constraint_to (unsigned id, tree op) +{ + auto_vec rhsc; + get_constraint_for_rhs (op, &rhsc); + make_constraints_to (id, rhsc); +} + +/* Create a constraint ID = &FROM. */ + +static void +make_constraint_from (varinfo_t vi, int from) +{ + struct constraint_expr lhs, rhs; + + lhs.var = vi->id; + lhs.offset = 0; + lhs.type = SCALAR; + + rhs.var = from; + rhs.offset = 0; + rhs.type = ADDRESSOF; + process_constraint (new_constraint (lhs, rhs)); +} + +/* Create a constraint ID = FROM. */ + +static void +make_copy_constraint (varinfo_t vi, int from) +{ + struct constraint_expr lhs, rhs; + + lhs.var = vi->id; + lhs.offset = 0; + lhs.type = SCALAR; + + rhs.var = from; + rhs.offset = 0; + rhs.type = SCALAR; + process_constraint (new_constraint (lhs, rhs)); +} + +/* Make constraints necessary to make OP escape. */ + +static void +make_escape_constraint (tree op) +{ + make_constraint_to (escaped_id, op); +} + +/* Make constraint necessary to make all indirect references + from VI escape. */ + +static void +make_indirect_escape_constraint (varinfo_t vi) +{ + struct constraint_expr lhs, rhs; + /* escaped = *(VAR + UNKNOWN); */ + lhs.type = SCALAR; + lhs.var = escaped_id; + lhs.offset = 0; + rhs.type = DEREF; + rhs.var = vi->id; + rhs.offset = UNKNOWN_OFFSET; + process_constraint (new_constraint (lhs, rhs)); +} + +/* Add constraints to that the solution of VI is transitively closed. */ + +static void +make_transitive_closure_constraints (varinfo_t vi) +{ + struct constraint_expr lhs, rhs; + + /* VAR = *(VAR + UNKNOWN); */ + lhs.type = SCALAR; + lhs.var = vi->id; + lhs.offset = 0; + rhs.type = DEREF; + rhs.var = vi->id; + rhs.offset = UNKNOWN_OFFSET; + process_constraint (new_constraint (lhs, rhs)); +} + +/* Add constraints to that the solution of VI has all subvariables added. */ + +static void +make_any_offset_constraints (varinfo_t vi) +{ + struct constraint_expr lhs, rhs; + + /* VAR = VAR + UNKNOWN; */ + lhs.type = SCALAR; + lhs.var = vi->id; + lhs.offset = 0; + rhs.type = SCALAR; + rhs.var = vi->id; + rhs.offset = UNKNOWN_OFFSET; + process_constraint (new_constraint (lhs, rhs)); +} + +/* Temporary storage for fake var decls. */ +struct obstack fake_var_decl_obstack; + +/* Build a fake VAR_DECL acting as referrer to a DECL_UID. */ + +static tree +build_fake_var_decl (tree type) +{ + tree decl = (tree) XOBNEW (&fake_var_decl_obstack, struct tree_var_decl); + memset (decl, 0, sizeof (struct tree_var_decl)); + TREE_SET_CODE (decl, VAR_DECL); + TREE_TYPE (decl) = type; + DECL_UID (decl) = allocate_decl_uid (); + SET_DECL_PT_UID (decl, -1); + layout_decl (decl, 0); + return decl; +} + +/* Create a new artificial heap variable with NAME. + Return the created variable. */ + +static varinfo_t +make_heapvar (const char *name, bool add_id) +{ + varinfo_t vi; + tree heapvar; + + heapvar = build_fake_var_decl (ptr_type_node); + DECL_EXTERNAL (heapvar) = 1; + + vi = new_var_info (heapvar, name, add_id); + vi->is_heap_var = true; + vi->is_unknown_size_var = true; + vi->offset = 0; + vi->fullsize = ~0; + vi->size = ~0; + vi->is_full_var = true; + insert_vi_for_tree (heapvar, vi); + + return vi; +} + +/* Create a new artificial heap variable with NAME and make a + constraint from it to LHS. Set flags according to a tag used + for tracking restrict pointers. */ + +static varinfo_t +make_constraint_from_restrict (varinfo_t lhs, const char *name, bool add_id) +{ + varinfo_t vi = make_heapvar (name, add_id); + vi->is_restrict_var = 1; + vi->is_global_var = 1; + vi->may_have_pointers = 1; + make_constraint_from (lhs, vi->id); + return vi; +} + +/* Create a new artificial heap variable with NAME and make a + constraint from it to LHS. Set flags according to a tag used + for tracking restrict pointers and make the artificial heap + point to global memory. */ + +static varinfo_t +make_constraint_from_global_restrict (varinfo_t lhs, const char *name, + bool add_id) +{ + varinfo_t vi = make_constraint_from_restrict (lhs, name, add_id); + make_copy_constraint (vi, nonlocal_id); + return vi; +} + +/* Get a constraint for the requested part of a function designator FI + when operating in IPA mode. */ + +static struct constraint_expr +get_function_part_constraint (varinfo_t fi, unsigned part) +{ + struct constraint_expr c; + + gcc_assert (in_ipa_mode); + + if (fi->id == anything_id) + { + /* ??? We probably should have a ANYFN special variable. */ + c.var = anything_id; + c.offset = 0; + c.type = SCALAR; + } + else if (fi->decl && TREE_CODE (fi->decl) == FUNCTION_DECL) + { + varinfo_t ai = first_vi_for_offset (fi, part); + if (ai) + c.var = ai->id; + else + c.var = anything_id; + c.offset = 0; + c.type = SCALAR; + } + else + { + c.var = fi->id; + c.offset = part; + c.type = DEREF; + } + + return c; +} + +/* Produce constraints for argument ARG of call STMT with eaf flags + FLAGS. RESULTS is array holding constraints for return value. + CALLESCAPE_ID is variable where call loocal escapes are added. + WRITES_GLOVEL_MEMORY is true if callee may write global memory. */ + +static void +handle_call_arg (gcall *stmt, tree arg, vec *results, int flags, + int callescape_id, bool writes_global_memory) +{ + int relevant_indirect_flags = EAF_NO_INDIRECT_CLOBBER | EAF_NO_INDIRECT_READ + | EAF_NO_INDIRECT_ESCAPE; + int relevant_flags = relevant_indirect_flags + | EAF_NO_DIRECT_CLOBBER + | EAF_NO_DIRECT_READ + | EAF_NO_DIRECT_ESCAPE; + if (gimple_call_lhs (stmt)) + { + relevant_flags |= EAF_NOT_RETURNED_DIRECTLY | EAF_NOT_RETURNED_INDIRECTLY; + relevant_indirect_flags |= EAF_NOT_RETURNED_INDIRECTLY; + + /* If value is never read from it can not be returned indirectly + (except through the escape solution). + For all flags we get these implications right except for + not_returned because we miss return functions in ipa-prop. */ + + if (flags & EAF_NO_DIRECT_READ) + flags |= EAF_NOT_RETURNED_INDIRECTLY; + } + + /* If the argument is not used we can ignore it. + Similarly argument is invisile for us if it not clobbered, does not + escape, is not read and can not be returned. */ + if ((flags & EAF_UNUSED) || ((flags & relevant_flags) == relevant_flags)) + return; + + /* Produce varinfo for direct accesses to ARG. */ + varinfo_t tem = new_var_info (NULL_TREE, "callarg", true); + tem->is_reg_var = true; + make_constraint_to (tem->id, arg); + make_any_offset_constraints (tem); + + bool callarg_transitive = false; + + /* As an compile time optimization if we make no difference between + direct and indirect accesses make arg transitively closed. + This avoids the need to build indir arg and do everything twice. */ + if (((flags & EAF_NO_INDIRECT_CLOBBER) != 0) + == ((flags & EAF_NO_DIRECT_CLOBBER) != 0) + && (((flags & EAF_NO_INDIRECT_READ) != 0) + == ((flags & EAF_NO_DIRECT_READ) != 0)) + && (((flags & EAF_NO_INDIRECT_ESCAPE) != 0) + == ((flags & EAF_NO_DIRECT_ESCAPE) != 0)) + && (((flags & EAF_NOT_RETURNED_INDIRECTLY) != 0) + == ((flags & EAF_NOT_RETURNED_DIRECTLY) != 0))) + { + make_transitive_closure_constraints (tem); + callarg_transitive = true; + } + + /* If necessary, produce varinfo for indirect accesses to ARG. */ + varinfo_t indir_tem = NULL; + if (!callarg_transitive + && (flags & relevant_indirect_flags) != relevant_indirect_flags) + { + struct constraint_expr lhs, rhs; + indir_tem = new_var_info (NULL_TREE, "indircallarg", true); + indir_tem->is_reg_var = true; + + /* indir_term = *tem. */ + lhs.type = SCALAR; + lhs.var = indir_tem->id; + lhs.offset = 0; + + rhs.type = DEREF; + rhs.var = tem->id; + rhs.offset = UNKNOWN_OFFSET; + process_constraint (new_constraint (lhs, rhs)); + + make_any_offset_constraints (indir_tem); + + /* If we do not read indirectly there is no need for transitive closure. + We know there is only one level of indirection. */ + if (!(flags & EAF_NO_INDIRECT_READ)) + make_transitive_closure_constraints (indir_tem); + gcc_checking_assert (!(flags & EAF_NO_DIRECT_READ)); + } + + if (gimple_call_lhs (stmt)) + { + if (!(flags & EAF_NOT_RETURNED_DIRECTLY)) + { + struct constraint_expr cexpr; + cexpr.var = tem->id; + cexpr.type = SCALAR; + cexpr.offset = 0; + results->safe_push (cexpr); + } + if (!callarg_transitive & !(flags & EAF_NOT_RETURNED_INDIRECTLY)) + { + struct constraint_expr cexpr; + cexpr.var = indir_tem->id; + cexpr.type = SCALAR; + cexpr.offset = 0; + results->safe_push (cexpr); + } + } + + if (!(flags & EAF_NO_DIRECT_READ)) + { + varinfo_t uses = get_call_use_vi (stmt); + make_copy_constraint (uses, tem->id); + if (!callarg_transitive & !(flags & EAF_NO_INDIRECT_READ)) + make_copy_constraint (uses, indir_tem->id); + } + else + /* To read indirectly we need to read directly. */ + gcc_checking_assert (flags & EAF_NO_INDIRECT_READ); + + if (!(flags & EAF_NO_DIRECT_CLOBBER)) + { + struct constraint_expr lhs, rhs; + + /* *arg = callescape. */ + lhs.type = DEREF; + lhs.var = tem->id; + lhs.offset = 0; + + rhs.type = SCALAR; + rhs.var = callescape_id; + rhs.offset = 0; + process_constraint (new_constraint (lhs, rhs)); + + /* callclobbered = arg. */ + make_copy_constraint (get_call_clobber_vi (stmt), tem->id); + } + if (!callarg_transitive & !(flags & EAF_NO_INDIRECT_CLOBBER)) + { + struct constraint_expr lhs, rhs; + + /* *indir_arg = callescape. */ + lhs.type = DEREF; + lhs.var = indir_tem->id; + lhs.offset = 0; + + rhs.type = SCALAR; + rhs.var = callescape_id; + rhs.offset = 0; + process_constraint (new_constraint (lhs, rhs)); + + /* callclobbered = indir_arg. */ + make_copy_constraint (get_call_clobber_vi (stmt), indir_tem->id); + } + + if (!(flags & (EAF_NO_DIRECT_ESCAPE | EAF_NO_INDIRECT_ESCAPE))) + { + struct constraint_expr lhs, rhs; + + /* callescape = arg; */ + lhs.var = callescape_id; + lhs.offset = 0; + lhs.type = SCALAR; + + rhs.var = tem->id; + rhs.offset = 0; + rhs.type = SCALAR; + process_constraint (new_constraint (lhs, rhs)); + + if (writes_global_memory) + make_escape_constraint (arg); + } + else if (!callarg_transitive & !(flags & EAF_NO_INDIRECT_ESCAPE)) + { + struct constraint_expr lhs, rhs; + + /* callescape = *(indir_arg + UNKNOWN); */ + lhs.var = callescape_id; + lhs.offset = 0; + lhs.type = SCALAR; + + rhs.var = indir_tem->id; + rhs.offset = 0; + rhs.type = SCALAR; + process_constraint (new_constraint (lhs, rhs)); + + if (writes_global_memory) + make_indirect_escape_constraint (tem); + } +} + +/* For non-IPA mode, generate constraints necessary for a call on the + RHS and collect return value constraint to RESULTS to be used later in + handle_lhs_call. + + IMPLICIT_EAF_FLAGS are added to each function argument. If + WRITES_GLOBAL_MEMORY is true function is assumed to possibly write to global + memory. Similar for READS_GLOBAL_MEMORY. */ + +static void +handle_rhs_call (gcall *stmt, vec *results, + int implicit_eaf_flags, + bool writes_global_memory, + bool reads_global_memory) +{ + determine_global_memory_access (stmt, &writes_global_memory, + &reads_global_memory, + NULL); + + varinfo_t callescape = new_var_info (NULL_TREE, "callescape", true); + + /* If function can use global memory, add it to callescape + and to possible return values. If not we can still use/return addresses + of global symbols. */ + struct constraint_expr lhs, rhs; + + lhs.type = SCALAR; + lhs.var = callescape->id; + lhs.offset = 0; + + rhs.type = reads_global_memory ? SCALAR : ADDRESSOF; + rhs.var = nonlocal_id; + rhs.offset = 0; + + process_constraint (new_constraint (lhs, rhs)); + results->safe_push (rhs); + + varinfo_t uses = get_call_use_vi (stmt); + make_copy_constraint (uses, callescape->id); + + for (unsigned i = 0; i < gimple_call_num_args (stmt); ++i) + { + tree arg = gimple_call_arg (stmt, i); + int flags = gimple_call_arg_flags (stmt, i); + handle_call_arg (stmt, arg, results, + flags | implicit_eaf_flags, + callescape->id, writes_global_memory); + } + + /* The static chain escapes as well. */ + if (gimple_call_chain (stmt)) + handle_call_arg (stmt, gimple_call_chain (stmt), results, + implicit_eaf_flags + | gimple_call_static_chain_flags (stmt), + callescape->id, writes_global_memory); + + /* And if we applied NRV the address of the return slot escapes as well. */ + if (gimple_call_return_slot_opt_p (stmt) + && gimple_call_lhs (stmt) != NULL_TREE + && TREE_ADDRESSABLE (TREE_TYPE (gimple_call_lhs (stmt)))) + { + int flags = gimple_call_retslot_flags (stmt); + const int relevant_flags = EAF_NO_DIRECT_ESCAPE + | EAF_NOT_RETURNED_DIRECTLY; + + if (!(flags & EAF_UNUSED) && (flags & relevant_flags) != relevant_flags) + { + auto_vec tmpc; + + get_constraint_for_address_of (gimple_call_lhs (stmt), &tmpc); + + if (!(flags & EAF_NO_DIRECT_ESCAPE)) + { + make_constraints_to (callescape->id, tmpc); + if (writes_global_memory) + make_constraints_to (escaped_id, tmpc); + } + if (!(flags & EAF_NOT_RETURNED_DIRECTLY)) + { + struct constraint_expr *c; + unsigned i; + FOR_EACH_VEC_ELT (tmpc, i, c) + results->safe_push (*c); + } + } + } +} + +/* For non-IPA mode, generate constraints necessary for a call + that returns a pointer and assigns it to LHS. This simply makes + the LHS point to global and escaped variables. */ + +static void +handle_lhs_call (gcall *stmt, tree lhs, int flags, vec &rhsc, + tree fndecl) +{ + auto_vec lhsc; + + get_constraint_for (lhs, &lhsc); + /* If the store is to a global decl make sure to + add proper escape constraints. */ + lhs = get_base_address (lhs); + if (lhs + && DECL_P (lhs) + && is_global_var (lhs)) + { + struct constraint_expr tmpc; + tmpc.var = escaped_id; + tmpc.offset = 0; + tmpc.type = SCALAR; + lhsc.safe_push (tmpc); + } + + /* If the call returns an argument unmodified override the rhs + constraints. */ + if (flags & ERF_RETURNS_ARG + && (flags & ERF_RETURN_ARG_MASK) < gimple_call_num_args (stmt)) + { + tree arg; + rhsc.truncate (0); + arg = gimple_call_arg (stmt, flags & ERF_RETURN_ARG_MASK); + get_constraint_for (arg, &rhsc); + process_all_all_constraints (lhsc, rhsc); + rhsc.truncate (0); + } + else if (flags & ERF_NOALIAS) + { + varinfo_t vi; + struct constraint_expr tmpc; + rhsc.truncate (0); + vi = make_heapvar ("HEAP", true); + /* We are marking allocated storage local, we deal with it becoming + global by escaping and setting of vars_contains_escaped_heap. */ + DECL_EXTERNAL (vi->decl) = 0; + vi->is_global_var = 0; + /* If this is not a real malloc call assume the memory was + initialized and thus may point to global memory. All + builtin functions with the malloc attribute behave in a sane way. */ + if (!fndecl + || !fndecl_built_in_p (fndecl, BUILT_IN_NORMAL)) + make_constraint_from (vi, nonlocal_id); + tmpc.var = vi->id; + tmpc.offset = 0; + tmpc.type = ADDRESSOF; + rhsc.safe_push (tmpc); + process_all_all_constraints (lhsc, rhsc); + rhsc.truncate (0); + } + else + process_all_all_constraints (lhsc, rhsc); +} + + +/* Create constraints for assigning call argument ARG to the incoming parameter + INDEX of function FI. */ + +static void +find_func_aliases_for_call_arg (varinfo_t fi, unsigned index, tree arg) +{ + struct constraint_expr lhs; + lhs = get_function_part_constraint (fi, fi_parm_base + index); + + auto_vec rhsc; + get_constraint_for_rhs (arg, &rhsc); + + unsigned j; + struct constraint_expr *rhsp; + FOR_EACH_VEC_ELT (rhsc, j, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); +} + +/* Create constraints for the builtin call T. Return true if the call + was handled, otherwise false. */ + +static bool +find_func_aliases_for_builtin_call (struct function *fn, gcall *t) +{ + tree fndecl = gimple_call_fndecl (t); + auto_vec lhsc; + auto_vec rhsc; + varinfo_t fi; + + if (gimple_call_builtin_p (t, BUILT_IN_NORMAL)) + /* ??? All builtins that are handled here need to be handled + in the alias-oracle query functions explicitly! */ + switch (DECL_FUNCTION_CODE (fndecl)) + { + /* All the following functions return a pointer to the same object + as their first argument points to. The functions do not add + to the ESCAPED solution. The functions make the first argument + pointed to memory point to what the second argument pointed to + memory points to. */ + case BUILT_IN_STRCPY: + case BUILT_IN_STRNCPY: + case BUILT_IN_BCOPY: + case BUILT_IN_MEMCPY: + case BUILT_IN_MEMMOVE: + case BUILT_IN_MEMPCPY: + case BUILT_IN_STPCPY: + case BUILT_IN_STPNCPY: + case BUILT_IN_STRCAT: + case BUILT_IN_STRNCAT: + case BUILT_IN_STRCPY_CHK: + case BUILT_IN_STRNCPY_CHK: + case BUILT_IN_MEMCPY_CHK: + case BUILT_IN_MEMMOVE_CHK: + case BUILT_IN_MEMPCPY_CHK: + case BUILT_IN_STPCPY_CHK: + case BUILT_IN_STPNCPY_CHK: + case BUILT_IN_STRCAT_CHK: + case BUILT_IN_STRNCAT_CHK: + case BUILT_IN_TM_MEMCPY: + case BUILT_IN_TM_MEMMOVE: + { + tree res = gimple_call_lhs (t); + tree dest = gimple_call_arg (t, (DECL_FUNCTION_CODE (fndecl) + == BUILT_IN_BCOPY ? 1 : 0)); + tree src = gimple_call_arg (t, (DECL_FUNCTION_CODE (fndecl) + == BUILT_IN_BCOPY ? 0 : 1)); + if (res != NULL_TREE) + { + get_constraint_for (res, &lhsc); + if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_MEMPCPY + || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_STPCPY + || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_STPNCPY + || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_MEMPCPY_CHK + || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_STPCPY_CHK + || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_STPNCPY_CHK) + get_constraint_for_ptr_offset (dest, NULL_TREE, &rhsc); + else + get_constraint_for (dest, &rhsc); + process_all_all_constraints (lhsc, rhsc); + lhsc.truncate (0); + rhsc.truncate (0); + } + get_constraint_for_ptr_offset (dest, NULL_TREE, &lhsc); + get_constraint_for_ptr_offset (src, NULL_TREE, &rhsc); + do_deref (&lhsc); + do_deref (&rhsc); + process_all_all_constraints (lhsc, rhsc); + return true; + } + case BUILT_IN_MEMSET: + case BUILT_IN_MEMSET_CHK: + case BUILT_IN_TM_MEMSET: + { + tree res = gimple_call_lhs (t); + tree dest = gimple_call_arg (t, 0); + unsigned i; + ce_s *lhsp; + struct constraint_expr ac; + if (res != NULL_TREE) + { + get_constraint_for (res, &lhsc); + get_constraint_for (dest, &rhsc); + process_all_all_constraints (lhsc, rhsc); + lhsc.truncate (0); + } + get_constraint_for_ptr_offset (dest, NULL_TREE, &lhsc); + do_deref (&lhsc); + if (flag_delete_null_pointer_checks + && integer_zerop (gimple_call_arg (t, 1))) + { + ac.type = ADDRESSOF; + ac.var = nothing_id; + } + else + { + ac.type = SCALAR; + ac.var = integer_id; + } + ac.offset = 0; + FOR_EACH_VEC_ELT (lhsc, i, lhsp) + process_constraint (new_constraint (*lhsp, ac)); + return true; + } + case BUILT_IN_STACK_SAVE: + case BUILT_IN_STACK_RESTORE: + /* Nothing interesting happens. */ + return true; + case BUILT_IN_ALLOCA: + case BUILT_IN_ALLOCA_WITH_ALIGN: + case BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX: + { + tree ptr = gimple_call_lhs (t); + if (ptr == NULL_TREE) + return true; + get_constraint_for (ptr, &lhsc); + varinfo_t vi = make_heapvar ("HEAP", true); + /* Alloca storage is never global. To exempt it from escaped + handling make it a non-heap var. */ + DECL_EXTERNAL (vi->decl) = 0; + vi->is_global_var = 0; + vi->is_heap_var = 0; + struct constraint_expr tmpc; + tmpc.var = vi->id; + tmpc.offset = 0; + tmpc.type = ADDRESSOF; + rhsc.safe_push (tmpc); + process_all_all_constraints (lhsc, rhsc); + return true; + } + case BUILT_IN_POSIX_MEMALIGN: + { + tree ptrptr = gimple_call_arg (t, 0); + get_constraint_for (ptrptr, &lhsc); + do_deref (&lhsc); + varinfo_t vi = make_heapvar ("HEAP", true); + /* We are marking allocated storage local, we deal with it becoming + global by escaping and setting of vars_contains_escaped_heap. */ + DECL_EXTERNAL (vi->decl) = 0; + vi->is_global_var = 0; + struct constraint_expr tmpc; + tmpc.var = vi->id; + tmpc.offset = 0; + tmpc.type = ADDRESSOF; + rhsc.safe_push (tmpc); + process_all_all_constraints (lhsc, rhsc); + return true; + } + case BUILT_IN_ASSUME_ALIGNED: + { + tree res = gimple_call_lhs (t); + tree dest = gimple_call_arg (t, 0); + if (res != NULL_TREE) + { + get_constraint_for (res, &lhsc); + get_constraint_for (dest, &rhsc); + process_all_all_constraints (lhsc, rhsc); + } + return true; + } + /* All the following functions do not return pointers, do not + modify the points-to sets of memory reachable from their + arguments and do not add to the ESCAPED solution. */ + case BUILT_IN_SINCOS: + case BUILT_IN_SINCOSF: + case BUILT_IN_SINCOSL: + case BUILT_IN_FREXP: + case BUILT_IN_FREXPF: + case BUILT_IN_FREXPL: + case BUILT_IN_GAMMA_R: + case BUILT_IN_GAMMAF_R: + case BUILT_IN_GAMMAL_R: + case BUILT_IN_LGAMMA_R: + case BUILT_IN_LGAMMAF_R: + case BUILT_IN_LGAMMAL_R: + case BUILT_IN_MODF: + case BUILT_IN_MODFF: + case BUILT_IN_MODFL: + case BUILT_IN_REMQUO: + case BUILT_IN_REMQUOF: + case BUILT_IN_REMQUOL: + case BUILT_IN_FREE: + return true; + case BUILT_IN_STRDUP: + case BUILT_IN_STRNDUP: + case BUILT_IN_REALLOC: + if (gimple_call_lhs (t)) + { + auto_vec rhsc; + handle_lhs_call (t, gimple_call_lhs (t), + gimple_call_return_flags (t) | ERF_NOALIAS, + rhsc, fndecl); + get_constraint_for_ptr_offset (gimple_call_lhs (t), + NULL_TREE, &lhsc); + get_constraint_for_ptr_offset (gimple_call_arg (t, 0), + NULL_TREE, &rhsc); + do_deref (&lhsc); + do_deref (&rhsc); + process_all_all_constraints (lhsc, rhsc); + lhsc.truncate (0); + rhsc.truncate (0); + /* For realloc the resulting pointer can be equal to the + argument as well. But only doing this wouldn't be + correct because with ptr == 0 realloc behaves like malloc. */ + if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_REALLOC) + { + get_constraint_for (gimple_call_lhs (t), &lhsc); + get_constraint_for (gimple_call_arg (t, 0), &rhsc); + process_all_all_constraints (lhsc, rhsc); + } + return true; + } + break; + /* String / character search functions return a pointer into the + source string or NULL. */ + case BUILT_IN_INDEX: + case BUILT_IN_STRCHR: + case BUILT_IN_STRRCHR: + case BUILT_IN_MEMCHR: + case BUILT_IN_STRSTR: + case BUILT_IN_STRPBRK: + if (gimple_call_lhs (t)) + { + tree src = gimple_call_arg (t, 0); + get_constraint_for_ptr_offset (src, NULL_TREE, &rhsc); + constraint_expr nul; + nul.var = nothing_id; + nul.offset = 0; + nul.type = ADDRESSOF; + rhsc.safe_push (nul); + get_constraint_for (gimple_call_lhs (t), &lhsc); + process_all_all_constraints (lhsc, rhsc); + } + return true; + /* Pure functions that return something not based on any object and + that use the memory pointed to by their arguments (but not + transitively). */ + case BUILT_IN_STRCMP: + case BUILT_IN_STRCMP_EQ: + case BUILT_IN_STRNCMP: + case BUILT_IN_STRNCMP_EQ: + case BUILT_IN_STRCASECMP: + case BUILT_IN_STRNCASECMP: + case BUILT_IN_MEMCMP: + case BUILT_IN_BCMP: + case BUILT_IN_STRSPN: + case BUILT_IN_STRCSPN: + { + varinfo_t uses = get_call_use_vi (t); + make_any_offset_constraints (uses); + make_constraint_to (uses->id, gimple_call_arg (t, 0)); + make_constraint_to (uses->id, gimple_call_arg (t, 1)); + /* No constraints are necessary for the return value. */ + return true; + } + case BUILT_IN_STRLEN: + { + varinfo_t uses = get_call_use_vi (t); + make_any_offset_constraints (uses); + make_constraint_to (uses->id, gimple_call_arg (t, 0)); + /* No constraints are necessary for the return value. */ + return true; + } + case BUILT_IN_OBJECT_SIZE: + case BUILT_IN_CONSTANT_P: + { + /* No constraints are necessary for the return value or the + arguments. */ + return true; + } + /* Trampolines are special - they set up passing the static + frame. */ + case BUILT_IN_INIT_TRAMPOLINE: + { + tree tramp = gimple_call_arg (t, 0); + tree nfunc = gimple_call_arg (t, 1); + tree frame = gimple_call_arg (t, 2); + unsigned i; + struct constraint_expr lhs, *rhsp; + if (in_ipa_mode) + { + varinfo_t nfi = NULL; + gcc_assert (TREE_CODE (nfunc) == ADDR_EXPR); + nfi = lookup_vi_for_tree (TREE_OPERAND (nfunc, 0)); + if (nfi) + { + lhs = get_function_part_constraint (nfi, fi_static_chain); + get_constraint_for (frame, &rhsc); + FOR_EACH_VEC_ELT (rhsc, i, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + rhsc.truncate (0); + + /* Make the frame point to the function for + the trampoline adjustment call. */ + get_constraint_for (tramp, &lhsc); + do_deref (&lhsc); + get_constraint_for (nfunc, &rhsc); + process_all_all_constraints (lhsc, rhsc); + + return true; + } + } + /* Else fallthru to generic handling which will let + the frame escape. */ + break; + } + case BUILT_IN_ADJUST_TRAMPOLINE: + { + tree tramp = gimple_call_arg (t, 0); + tree res = gimple_call_lhs (t); + if (in_ipa_mode && res) + { + get_constraint_for (res, &lhsc); + get_constraint_for (tramp, &rhsc); + do_deref (&rhsc); + process_all_all_constraints (lhsc, rhsc); + } + return true; + } + CASE_BUILT_IN_TM_STORE (1): + CASE_BUILT_IN_TM_STORE (2): + CASE_BUILT_IN_TM_STORE (4): + CASE_BUILT_IN_TM_STORE (8): + CASE_BUILT_IN_TM_STORE (FLOAT): + CASE_BUILT_IN_TM_STORE (DOUBLE): + CASE_BUILT_IN_TM_STORE (LDOUBLE): + CASE_BUILT_IN_TM_STORE (M64): + CASE_BUILT_IN_TM_STORE (M128): + CASE_BUILT_IN_TM_STORE (M256): + { + tree addr = gimple_call_arg (t, 0); + tree src = gimple_call_arg (t, 1); + + get_constraint_for (addr, &lhsc); + do_deref (&lhsc); + get_constraint_for (src, &rhsc); + process_all_all_constraints (lhsc, rhsc); + return true; + } + CASE_BUILT_IN_TM_LOAD (1): + CASE_BUILT_IN_TM_LOAD (2): + CASE_BUILT_IN_TM_LOAD (4): + CASE_BUILT_IN_TM_LOAD (8): + CASE_BUILT_IN_TM_LOAD (FLOAT): + CASE_BUILT_IN_TM_LOAD (DOUBLE): + CASE_BUILT_IN_TM_LOAD (LDOUBLE): + CASE_BUILT_IN_TM_LOAD (M64): + CASE_BUILT_IN_TM_LOAD (M128): + CASE_BUILT_IN_TM_LOAD (M256): + { + tree dest = gimple_call_lhs (t); + tree addr = gimple_call_arg (t, 0); + + get_constraint_for (dest, &lhsc); + get_constraint_for (addr, &rhsc); + do_deref (&rhsc); + process_all_all_constraints (lhsc, rhsc); + return true; + } + /* Variadic argument handling needs to be handled in IPA + mode as well. */ + case BUILT_IN_VA_START: + { + tree valist = gimple_call_arg (t, 0); + struct constraint_expr rhs, *lhsp; + unsigned i; + get_constraint_for_ptr_offset (valist, NULL_TREE, &lhsc); + do_deref (&lhsc); + /* The va_list gets access to pointers in variadic + arguments. Which we know in the case of IPA analysis + and otherwise are just all nonlocal variables. */ + if (in_ipa_mode) + { + fi = lookup_vi_for_tree (fn->decl); + rhs = get_function_part_constraint (fi, ~0); + rhs.type = ADDRESSOF; + } + else + { + rhs.var = nonlocal_id; + rhs.type = ADDRESSOF; + rhs.offset = 0; + } + FOR_EACH_VEC_ELT (lhsc, i, lhsp) + process_constraint (new_constraint (*lhsp, rhs)); + /* va_list is clobbered. */ + make_constraint_to (get_call_clobber_vi (t)->id, valist); + return true; + } + /* va_end doesn't have any effect that matters. */ + case BUILT_IN_VA_END: + return true; + /* Alternate return. Simply give up for now. */ + case BUILT_IN_RETURN: + { + fi = NULL; + if (!in_ipa_mode + || !(fi = get_vi_for_tree (fn->decl))) + make_constraint_from (get_varinfo (escaped_id), anything_id); + else if (in_ipa_mode + && fi != NULL) + { + struct constraint_expr lhs, rhs; + lhs = get_function_part_constraint (fi, fi_result); + rhs.var = anything_id; + rhs.offset = 0; + rhs.type = SCALAR; + process_constraint (new_constraint (lhs, rhs)); + } + return true; + } + case BUILT_IN_GOMP_PARALLEL: + case BUILT_IN_GOACC_PARALLEL: + { + if (in_ipa_mode) + { + unsigned int fnpos, argpos; + switch (DECL_FUNCTION_CODE (fndecl)) + { + case BUILT_IN_GOMP_PARALLEL: + /* __builtin_GOMP_parallel (fn, data, num_threads, flags). */ + fnpos = 0; + argpos = 1; + break; + case BUILT_IN_GOACC_PARALLEL: + /* __builtin_GOACC_parallel (flags_m, fn, mapnum, hostaddrs, + sizes, kinds, ...). */ + fnpos = 1; + argpos = 3; + break; + default: + gcc_unreachable (); + } + + tree fnarg = gimple_call_arg (t, fnpos); + gcc_assert (TREE_CODE (fnarg) == ADDR_EXPR); + tree fndecl = TREE_OPERAND (fnarg, 0); + if (fndecl_maybe_in_other_partition (fndecl)) + /* Fallthru to general call handling. */ + break; + + tree arg = gimple_call_arg (t, argpos); + + varinfo_t fi = get_vi_for_tree (fndecl); + find_func_aliases_for_call_arg (fi, 0, arg); + return true; + } + /* Else fallthru to generic call handling. */ + break; + } + /* printf-style functions may have hooks to set pointers to + point to somewhere into the generated string. Leave them + for a later exercise... */ + default: + /* Fallthru to general call handling. */; + } + + return false; +} + +/* Create constraints for the call T. */ + +static void +find_func_aliases_for_call (struct function *fn, gcall *t) +{ + tree fndecl = gimple_call_fndecl (t); + varinfo_t fi; + + if (fndecl != NULL_TREE + && fndecl_built_in_p (fndecl) + && find_func_aliases_for_builtin_call (fn, t)) + return; + + if (gimple_call_internal_p (t, IFN_DEFERRED_INIT)) + return; + + fi = get_fi_for_callee (t); + if (!in_ipa_mode + || (fi->decl && fndecl && !fi->is_fn_info)) + { + auto_vec rhsc; + int flags = gimple_call_flags (t); + + /* Const functions can return their arguments and addresses + of global memory but not of escaped memory. */ + if (flags & (ECF_CONST|ECF_NOVOPS)) + { + if (gimple_call_lhs (t)) + handle_rhs_call (t, &rhsc, implicit_const_eaf_flags, false, false); + } + /* Pure functions can return addresses in and of memory + reachable from their arguments, but they are not an escape + point for reachable memory of their arguments. */ + else if (flags & (ECF_PURE|ECF_LOOPING_CONST_OR_PURE)) + handle_rhs_call (t, &rhsc, implicit_pure_eaf_flags, false, true); + /* If the call is to a replaceable operator delete and results + from a delete expression as opposed to a direct call to + such operator, then the effects for PTA (in particular + the escaping of the pointer) can be ignored. */ + else if (fndecl + && DECL_IS_OPERATOR_DELETE_P (fndecl) + && gimple_call_from_new_or_delete (t)) + ; + else + handle_rhs_call (t, &rhsc, 0, true, true); + if (gimple_call_lhs (t)) + handle_lhs_call (t, gimple_call_lhs (t), + gimple_call_return_flags (t), rhsc, fndecl); + } + else + { + auto_vec rhsc; + tree lhsop; + unsigned j; + + /* Assign all the passed arguments to the appropriate incoming + parameters of the function. */ + for (j = 0; j < gimple_call_num_args (t); j++) + { + tree arg = gimple_call_arg (t, j); + find_func_aliases_for_call_arg (fi, j, arg); + } + + /* If we are returning a value, assign it to the result. */ + lhsop = gimple_call_lhs (t); + if (lhsop) + { + auto_vec lhsc; + struct constraint_expr rhs; + struct constraint_expr *lhsp; + bool aggr_p = aggregate_value_p (lhsop, gimple_call_fntype (t)); + + get_constraint_for (lhsop, &lhsc); + rhs = get_function_part_constraint (fi, fi_result); + if (aggr_p) + { + auto_vec tem; + tem.quick_push (rhs); + do_deref (&tem); + gcc_checking_assert (tem.length () == 1); + rhs = tem[0]; + } + FOR_EACH_VEC_ELT (lhsc, j, lhsp) + process_constraint (new_constraint (*lhsp, rhs)); + + /* If we pass the result decl by reference, honor that. */ + if (aggr_p) + { + struct constraint_expr lhs; + struct constraint_expr *rhsp; + + get_constraint_for_address_of (lhsop, &rhsc); + lhs = get_function_part_constraint (fi, fi_result); + FOR_EACH_VEC_ELT (rhsc, j, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + rhsc.truncate (0); + } + } + + /* If we use a static chain, pass it along. */ + if (gimple_call_chain (t)) + { + struct constraint_expr lhs; + struct constraint_expr *rhsp; + + get_constraint_for (gimple_call_chain (t), &rhsc); + lhs = get_function_part_constraint (fi, fi_static_chain); + FOR_EACH_VEC_ELT (rhsc, j, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + } + } +} + +/* Walk statement T setting up aliasing constraints according to the + references found in T. This function is the main part of the + constraint builder. AI points to auxiliary alias information used + when building alias sets and computing alias grouping heuristics. */ + +static void +find_func_aliases (struct function *fn, gimple *origt) +{ + gimple *t = origt; + auto_vec lhsc; + auto_vec rhsc; + varinfo_t fi; + + /* Now build constraints expressions. */ + if (gimple_code (t) == GIMPLE_PHI) + { + /* For a phi node, assign all the arguments to + the result. */ + get_constraint_for (gimple_phi_result (t), &lhsc); + for (unsigned i = 0; i < gimple_phi_num_args (t); i++) + { + get_constraint_for_rhs (gimple_phi_arg_def (t, i), &rhsc); + process_all_all_constraints (lhsc, rhsc); + rhsc.truncate (0); + } + } + /* In IPA mode, we need to generate constraints to pass call + arguments through their calls. There are two cases, + either a GIMPLE_CALL returning a value, or just a plain + GIMPLE_CALL when we are not. + + In non-ipa mode, we need to generate constraints for each + pointer passed by address. */ + else if (is_gimple_call (t)) + find_func_aliases_for_call (fn, as_a (t)); + + /* Otherwise, just a regular assignment statement. Only care about + operations with pointer result, others are dealt with as escape + points if they have pointer operands. */ + else if (is_gimple_assign (t)) + { + /* Otherwise, just a regular assignment statement. */ + tree lhsop = gimple_assign_lhs (t); + tree rhsop = (gimple_num_ops (t) == 2) ? gimple_assign_rhs1 (t) : NULL; + + if (rhsop && TREE_CLOBBER_P (rhsop)) + /* Ignore clobbers, they don't actually store anything into + the LHS. */ + ; + else if (rhsop && AGGREGATE_TYPE_P (TREE_TYPE (lhsop))) + do_structure_copy (lhsop, rhsop); + else + { + enum tree_code code = gimple_assign_rhs_code (t); + + get_constraint_for (lhsop, &lhsc); + + if (code == POINTER_PLUS_EXPR) + get_constraint_for_ptr_offset (gimple_assign_rhs1 (t), + gimple_assign_rhs2 (t), &rhsc); + else if (code == POINTER_DIFF_EXPR) + /* The result is not a pointer (part). */ + ; + else if (code == BIT_AND_EXPR + && TREE_CODE (gimple_assign_rhs2 (t)) == INTEGER_CST) + { + /* Aligning a pointer via a BIT_AND_EXPR is offsetting + the pointer. Handle it by offsetting it by UNKNOWN. */ + get_constraint_for_ptr_offset (gimple_assign_rhs1 (t), + NULL_TREE, &rhsc); + } + else if (code == TRUNC_DIV_EXPR + || code == CEIL_DIV_EXPR + || code == FLOOR_DIV_EXPR + || code == ROUND_DIV_EXPR + || code == EXACT_DIV_EXPR + || code == TRUNC_MOD_EXPR + || code == CEIL_MOD_EXPR + || code == FLOOR_MOD_EXPR + || code == ROUND_MOD_EXPR) + /* Division and modulo transfer the pointer from the LHS. */ + get_constraint_for_ptr_offset (gimple_assign_rhs1 (t), + NULL_TREE, &rhsc); + else if (CONVERT_EXPR_CODE_P (code) + || gimple_assign_single_p (t)) + /* See through conversions, single RHS are handled by + get_constraint_for_rhs. */ + get_constraint_for_rhs (rhsop, &rhsc); + else if (code == COND_EXPR) + { + /* The result is a merge of both COND_EXPR arms. */ + auto_vec tmp; + struct constraint_expr *rhsp; + unsigned i; + get_constraint_for_rhs (gimple_assign_rhs2 (t), &rhsc); + get_constraint_for_rhs (gimple_assign_rhs3 (t), &tmp); + FOR_EACH_VEC_ELT (tmp, i, rhsp) + rhsc.safe_push (*rhsp); + } + else if (truth_value_p (code)) + /* Truth value results are not pointer (parts). Or at least + very unreasonable obfuscation of a part. */ + ; + else + { + /* All other operations are possibly offsetting merges. */ + auto_vec tmp; + struct constraint_expr *rhsp; + unsigned i, j; + get_constraint_for_ptr_offset (gimple_assign_rhs1 (t), + NULL_TREE, &rhsc); + for (i = 2; i < gimple_num_ops (t); ++i) + { + get_constraint_for_ptr_offset (gimple_op (t, i), + NULL_TREE, &tmp); + FOR_EACH_VEC_ELT (tmp, j, rhsp) + rhsc.safe_push (*rhsp); + tmp.truncate (0); + } + } + process_all_all_constraints (lhsc, rhsc); + } + /* If there is a store to a global variable the rhs escapes. */ + if ((lhsop = get_base_address (lhsop)) != NULL_TREE + && DECL_P (lhsop)) + { + varinfo_t vi = get_vi_for_tree (lhsop); + if ((! in_ipa_mode && vi->is_global_var) + || vi->is_ipa_escape_point) + make_escape_constraint (rhsop); + } + } + /* Handle escapes through return. */ + else if (gimple_code (t) == GIMPLE_RETURN + && gimple_return_retval (as_a (t)) != NULL_TREE) + { + greturn *return_stmt = as_a (t); + tree retval = gimple_return_retval (return_stmt); + if (!in_ipa_mode) + make_constraint_to (escaped_return_id, retval); + else + { + struct constraint_expr lhs ; + struct constraint_expr *rhsp; + unsigned i; + + fi = lookup_vi_for_tree (fn->decl); + lhs = get_function_part_constraint (fi, fi_result); + get_constraint_for_rhs (retval, &rhsc); + FOR_EACH_VEC_ELT (rhsc, i, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + } + } + /* Handle asms conservatively by adding escape constraints to everything. */ + else if (gasm *asm_stmt = dyn_cast (t)) + { + unsigned i, noutputs; + const char **oconstraints; + const char *constraint; + bool allows_mem, allows_reg, is_inout; + + noutputs = gimple_asm_noutputs (asm_stmt); + oconstraints = XALLOCAVEC (const char *, noutputs); + + for (i = 0; i < noutputs; ++i) + { + tree link = gimple_asm_output_op (asm_stmt, i); + tree op = TREE_VALUE (link); + + constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (link))); + oconstraints[i] = constraint; + parse_output_constraint (&constraint, i, 0, 0, &allows_mem, + &allows_reg, &is_inout, nullptr); + + /* A memory constraint makes the address of the operand escape. */ + if (!allows_reg && allows_mem) + { + auto_vec tmpc; + get_constraint_for_address_of (op, &tmpc); + make_constraints_to (escaped_id, tmpc); + } + + /* The asm may read global memory, so outputs may point to + any global memory. */ + if (op) + { + auto_vec lhsc; + struct constraint_expr rhsc, *lhsp; + unsigned j; + get_constraint_for (op, &lhsc); + rhsc.var = nonlocal_id; + rhsc.offset = 0; + rhsc.type = SCALAR; + FOR_EACH_VEC_ELT (lhsc, j, lhsp) + process_constraint (new_constraint (*lhsp, rhsc)); + } + } + for (i = 0; i < gimple_asm_ninputs (asm_stmt); ++i) + { + tree link = gimple_asm_input_op (asm_stmt, i); + tree op = TREE_VALUE (link); + + constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (link))); + + parse_input_constraint (&constraint, 0, 0, noutputs, 0, oconstraints, + &allows_mem, &allows_reg, nullptr); + + /* A memory constraint makes the address of the operand escape. */ + if (!allows_reg && allows_mem) + { + auto_vec tmpc; + get_constraint_for_address_of (op, &tmpc); + make_constraints_to (escaped_id, tmpc); + } + /* Strictly we'd only need the constraint to ESCAPED if + the asm clobbers memory, otherwise using something + along the lines of per-call clobbers/uses would be enough. */ + else if (op) + make_escape_constraint (op); + } + } +} + + +/* Create a constraint adding to the clobber set of FI the memory + pointed to by PTR. */ + +static void +process_ipa_clobber (varinfo_t fi, tree ptr) +{ + vec ptrc = vNULL; + struct constraint_expr *c, lhs; + unsigned i; + get_constraint_for_rhs (ptr, &ptrc); + lhs = get_function_part_constraint (fi, fi_clobbers); + FOR_EACH_VEC_ELT (ptrc, i, c) + process_constraint (new_constraint (lhs, *c)); + ptrc.release (); +} + +/* Walk statement T setting up clobber and use constraints according to the + references found in T. This function is a main part of the + IPA constraint builder. */ + +static void +find_func_clobbers (struct function *fn, gimple *origt) +{ + gimple *t = origt; + auto_vec lhsc; + auto_vec rhsc; + varinfo_t fi; + + /* Add constraints for clobbered/used in IPA mode. + We are not interested in what automatic variables are clobbered + or used as we only use the information in the caller to which + they do not escape. */ + gcc_assert (in_ipa_mode); + + /* If the stmt refers to memory in any way it better had a VUSE. */ + if (gimple_vuse (t) == NULL_TREE) + return; + + /* We'd better have function information for the current function. */ + fi = lookup_vi_for_tree (fn->decl); + gcc_assert (fi != NULL); + + /* Account for stores in assignments and calls. */ + if (gimple_vdef (t) != NULL_TREE + && gimple_has_lhs (t)) + { + tree lhs = gimple_get_lhs (t); + tree tem = lhs; + while (handled_component_p (tem)) + tem = TREE_OPERAND (tem, 0); + if ((DECL_P (tem) + && !auto_var_in_fn_p (tem, fn->decl)) + || INDIRECT_REF_P (tem) + || (TREE_CODE (tem) == MEM_REF + && !(TREE_CODE (TREE_OPERAND (tem, 0)) == ADDR_EXPR + && auto_var_in_fn_p + (TREE_OPERAND (TREE_OPERAND (tem, 0), 0), fn->decl)))) + { + struct constraint_expr lhsc, *rhsp; + unsigned i; + lhsc = get_function_part_constraint (fi, fi_clobbers); + get_constraint_for_address_of (lhs, &rhsc); + FOR_EACH_VEC_ELT (rhsc, i, rhsp) + process_constraint (new_constraint (lhsc, *rhsp)); + rhsc.truncate (0); + } + } + + /* Account for uses in assigments and returns. */ + if (gimple_assign_single_p (t) + || (gimple_code (t) == GIMPLE_RETURN + && gimple_return_retval (as_a (t)) != NULL_TREE)) + { + tree rhs = (gimple_assign_single_p (t) + ? gimple_assign_rhs1 (t) + : gimple_return_retval (as_a (t))); + tree tem = rhs; + while (handled_component_p (tem)) + tem = TREE_OPERAND (tem, 0); + if ((DECL_P (tem) + && !auto_var_in_fn_p (tem, fn->decl)) + || INDIRECT_REF_P (tem) + || (TREE_CODE (tem) == MEM_REF + && !(TREE_CODE (TREE_OPERAND (tem, 0)) == ADDR_EXPR + && auto_var_in_fn_p + (TREE_OPERAND (TREE_OPERAND (tem, 0), 0), fn->decl)))) + { + struct constraint_expr lhs, *rhsp; + unsigned i; + lhs = get_function_part_constraint (fi, fi_uses); + get_constraint_for_address_of (rhs, &rhsc); + FOR_EACH_VEC_ELT (rhsc, i, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + rhsc.truncate (0); + } + } + + if (gcall *call_stmt = dyn_cast (t)) + { + varinfo_t cfi = NULL; + tree decl = gimple_call_fndecl (t); + struct constraint_expr lhs, rhs; + unsigned i, j; + + /* For builtins we do not have separate function info. For those + we do not generate escapes for we have to generate clobbers/uses. */ + if (gimple_call_builtin_p (t, BUILT_IN_NORMAL)) + switch (DECL_FUNCTION_CODE (decl)) + { + /* The following functions use and clobber memory pointed to + by their arguments. */ + case BUILT_IN_STRCPY: + case BUILT_IN_STRNCPY: + case BUILT_IN_BCOPY: + case BUILT_IN_MEMCPY: + case BUILT_IN_MEMMOVE: + case BUILT_IN_MEMPCPY: + case BUILT_IN_STPCPY: + case BUILT_IN_STPNCPY: + case BUILT_IN_STRCAT: + case BUILT_IN_STRNCAT: + case BUILT_IN_STRCPY_CHK: + case BUILT_IN_STRNCPY_CHK: + case BUILT_IN_MEMCPY_CHK: + case BUILT_IN_MEMMOVE_CHK: + case BUILT_IN_MEMPCPY_CHK: + case BUILT_IN_STPCPY_CHK: + case BUILT_IN_STPNCPY_CHK: + case BUILT_IN_STRCAT_CHK: + case BUILT_IN_STRNCAT_CHK: + { + tree dest = gimple_call_arg (t, (DECL_FUNCTION_CODE (decl) + == BUILT_IN_BCOPY ? 1 : 0)); + tree src = gimple_call_arg (t, (DECL_FUNCTION_CODE (decl) + == BUILT_IN_BCOPY ? 0 : 1)); + unsigned i; + struct constraint_expr *rhsp, *lhsp; + get_constraint_for_ptr_offset (dest, NULL_TREE, &lhsc); + lhs = get_function_part_constraint (fi, fi_clobbers); + FOR_EACH_VEC_ELT (lhsc, i, lhsp) + process_constraint (new_constraint (lhs, *lhsp)); + get_constraint_for_ptr_offset (src, NULL_TREE, &rhsc); + lhs = get_function_part_constraint (fi, fi_uses); + FOR_EACH_VEC_ELT (rhsc, i, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + return; + } + /* The following function clobbers memory pointed to by + its argument. */ + case BUILT_IN_MEMSET: + case BUILT_IN_MEMSET_CHK: + case BUILT_IN_POSIX_MEMALIGN: + { + tree dest = gimple_call_arg (t, 0); + unsigned i; + ce_s *lhsp; + get_constraint_for_ptr_offset (dest, NULL_TREE, &lhsc); + lhs = get_function_part_constraint (fi, fi_clobbers); + FOR_EACH_VEC_ELT (lhsc, i, lhsp) + process_constraint (new_constraint (lhs, *lhsp)); + return; + } + /* The following functions clobber their second and third + arguments. */ + case BUILT_IN_SINCOS: + case BUILT_IN_SINCOSF: + case BUILT_IN_SINCOSL: + { + process_ipa_clobber (fi, gimple_call_arg (t, 1)); + process_ipa_clobber (fi, gimple_call_arg (t, 2)); + return; + } + /* The following functions clobber their second argument. */ + case BUILT_IN_FREXP: + case BUILT_IN_FREXPF: + case BUILT_IN_FREXPL: + case BUILT_IN_LGAMMA_R: + case BUILT_IN_LGAMMAF_R: + case BUILT_IN_LGAMMAL_R: + case BUILT_IN_GAMMA_R: + case BUILT_IN_GAMMAF_R: + case BUILT_IN_GAMMAL_R: + case BUILT_IN_MODF: + case BUILT_IN_MODFF: + case BUILT_IN_MODFL: + { + process_ipa_clobber (fi, gimple_call_arg (t, 1)); + return; + } + /* The following functions clobber their third argument. */ + case BUILT_IN_REMQUO: + case BUILT_IN_REMQUOF: + case BUILT_IN_REMQUOL: + { + process_ipa_clobber (fi, gimple_call_arg (t, 2)); + return; + } + /* The following functions use what their first argument + points to. */ + case BUILT_IN_STRDUP: + case BUILT_IN_STRNDUP: + case BUILT_IN_REALLOC: + case BUILT_IN_INDEX: + case BUILT_IN_STRCHR: + case BUILT_IN_STRRCHR: + case BUILT_IN_MEMCHR: + { + tree src = gimple_call_arg (t, 0); + get_constraint_for_ptr_offset (src, NULL_TREE, &rhsc); + lhs = get_function_part_constraint (fi, fi_uses); + struct constraint_expr *rhsp; + FOR_EACH_VEC_ELT (rhsc, i, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + return; + } + /* The following functions use what their first and second argument + point to. */ + case BUILT_IN_STRSTR: + case BUILT_IN_STRPBRK: + { + tree src = gimple_call_arg (t, 0); + get_constraint_for_ptr_offset (src, NULL_TREE, &rhsc); + lhs = get_function_part_constraint (fi, fi_uses); + struct constraint_expr *rhsp; + FOR_EACH_VEC_ELT (rhsc, i, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + rhsc.truncate (0); + src = gimple_call_arg (t, 1); + get_constraint_for_ptr_offset (src, NULL_TREE, &rhsc); + FOR_EACH_VEC_ELT (rhsc, i, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + return; + } + /* The following functions neither read nor clobber memory. */ + case BUILT_IN_ASSUME_ALIGNED: + case BUILT_IN_FREE: + return; + /* Trampolines are of no interest to us. */ + case BUILT_IN_INIT_TRAMPOLINE: + case BUILT_IN_ADJUST_TRAMPOLINE: + return; + case BUILT_IN_VA_START: + case BUILT_IN_VA_END: + return; + case BUILT_IN_GOMP_PARALLEL: + case BUILT_IN_GOACC_PARALLEL: + { + unsigned int fnpos, argpos; + unsigned int implicit_use_args[2]; + unsigned int num_implicit_use_args = 0; + switch (DECL_FUNCTION_CODE (decl)) + { + case BUILT_IN_GOMP_PARALLEL: + /* __builtin_GOMP_parallel (fn, data, num_threads, flags). */ + fnpos = 0; + argpos = 1; + break; + case BUILT_IN_GOACC_PARALLEL: + /* __builtin_GOACC_parallel (flags_m, fn, mapnum, hostaddrs, + sizes, kinds, ...). */ + fnpos = 1; + argpos = 3; + implicit_use_args[num_implicit_use_args++] = 4; + implicit_use_args[num_implicit_use_args++] = 5; + break; + default: + gcc_unreachable (); + } + + tree fnarg = gimple_call_arg (t, fnpos); + gcc_assert (TREE_CODE (fnarg) == ADDR_EXPR); + tree fndecl = TREE_OPERAND (fnarg, 0); + if (fndecl_maybe_in_other_partition (fndecl)) + /* Fallthru to general call handling. */ + break; + + varinfo_t cfi = get_vi_for_tree (fndecl); + + tree arg = gimple_call_arg (t, argpos); + + /* Parameter passed by value is used. */ + lhs = get_function_part_constraint (fi, fi_uses); + struct constraint_expr *rhsp; + get_constraint_for (arg, &rhsc); + FOR_EACH_VEC_ELT (rhsc, j, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + rhsc.truncate (0); + + /* Handle parameters used by the call, but not used in cfi, as + implicitly used by cfi. */ + lhs = get_function_part_constraint (cfi, fi_uses); + for (unsigned i = 0; i < num_implicit_use_args; ++i) + { + tree arg = gimple_call_arg (t, implicit_use_args[i]); + get_constraint_for (arg, &rhsc); + FOR_EACH_VEC_ELT (rhsc, j, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + rhsc.truncate (0); + } + + /* The caller clobbers what the callee does. */ + lhs = get_function_part_constraint (fi, fi_clobbers); + rhs = get_function_part_constraint (cfi, fi_clobbers); + process_constraint (new_constraint (lhs, rhs)); + + /* The caller uses what the callee does. */ + lhs = get_function_part_constraint (fi, fi_uses); + rhs = get_function_part_constraint (cfi, fi_uses); + process_constraint (new_constraint (lhs, rhs)); + + return; + } + /* printf-style functions may have hooks to set pointers to + point to somewhere into the generated string. Leave them + for a later exercise... */ + default: + /* Fallthru to general call handling. */; + } + + /* Parameters passed by value are used. */ + lhs = get_function_part_constraint (fi, fi_uses); + for (i = 0; i < gimple_call_num_args (t); i++) + { + struct constraint_expr *rhsp; + tree arg = gimple_call_arg (t, i); + + if (TREE_CODE (arg) == SSA_NAME + || is_gimple_min_invariant (arg)) + continue; + + get_constraint_for_address_of (arg, &rhsc); + FOR_EACH_VEC_ELT (rhsc, j, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + rhsc.truncate (0); + } + + /* Build constraints for propagating clobbers/uses along the + callgraph edges. */ + cfi = get_fi_for_callee (call_stmt); + if (cfi->id == anything_id) + { + if (gimple_vdef (t)) + make_constraint_from (first_vi_for_offset (fi, fi_clobbers), + anything_id); + make_constraint_from (first_vi_for_offset (fi, fi_uses), + anything_id); + return; + } + + /* For callees without function info (that's external functions), + ESCAPED is clobbered and used. */ + if (cfi->decl + && TREE_CODE (cfi->decl) == FUNCTION_DECL + && !cfi->is_fn_info) + { + varinfo_t vi; + + if (gimple_vdef (t)) + make_copy_constraint (first_vi_for_offset (fi, fi_clobbers), + escaped_id); + make_copy_constraint (first_vi_for_offset (fi, fi_uses), escaped_id); + + /* Also honor the call statement use/clobber info. */ + if ((vi = lookup_call_clobber_vi (call_stmt)) != NULL) + make_copy_constraint (first_vi_for_offset (fi, fi_clobbers), + vi->id); + if ((vi = lookup_call_use_vi (call_stmt)) != NULL) + make_copy_constraint (first_vi_for_offset (fi, fi_uses), + vi->id); + return; + } + + /* Otherwise the caller clobbers and uses what the callee does. + ??? This should use a new complex constraint that filters + local variables of the callee. */ + if (gimple_vdef (t)) + { + lhs = get_function_part_constraint (fi, fi_clobbers); + rhs = get_function_part_constraint (cfi, fi_clobbers); + process_constraint (new_constraint (lhs, rhs)); + } + lhs = get_function_part_constraint (fi, fi_uses); + rhs = get_function_part_constraint (cfi, fi_uses); + process_constraint (new_constraint (lhs, rhs)); + } + else if (gimple_code (t) == GIMPLE_ASM) + { + /* ??? Ick. We can do better. */ + if (gimple_vdef (t)) + make_constraint_from (first_vi_for_offset (fi, fi_clobbers), + anything_id); + make_constraint_from (first_vi_for_offset (fi, fi_uses), + anything_id); + } +} + + +/* This structure is used during pushing fields onto the fieldstack + to track the offset of the field, since bitpos_of_field gives it + relative to its immediate containing type, and we want it relative + to the ultimate containing object. */ + +struct fieldoff +{ + /* Offset from the base of the base containing object to this field. */ + HOST_WIDE_INT offset; + + /* Size, in bits, of the field. */ + unsigned HOST_WIDE_INT size; + + unsigned has_unknown_size : 1; + + unsigned must_have_pointers : 1; + + unsigned may_have_pointers : 1; + + unsigned only_restrict_pointers : 1; + + tree restrict_pointed_type; +}; +typedef struct fieldoff fieldoff_s; + + +/* qsort comparison function for two fieldoff's PA and PB. */ + +static int +fieldoff_compare (const void *pa, const void *pb) +{ + const fieldoff_s *foa = (const fieldoff_s *)pa; + const fieldoff_s *fob = (const fieldoff_s *)pb; + unsigned HOST_WIDE_INT foasize, fobsize; + + if (foa->offset < fob->offset) + return -1; + else if (foa->offset > fob->offset) + return 1; + + foasize = foa->size; + fobsize = fob->size; + if (foasize < fobsize) + return -1; + else if (foasize > fobsize) + return 1; + return 0; +} + +/* Sort a fieldstack according to the field offset and sizes. */ +static void +sort_fieldstack (vec &fieldstack) +{ + fieldstack.qsort (fieldoff_compare); +} + +/* Return true if T is a type that can have subvars. */ + +static inline bool +type_can_have_subvars (const_tree t) +{ + /* Aggregates without overlapping fields can have subvars. */ + return TREE_CODE (t) == RECORD_TYPE; +} + +/* Return true if V is a tree that we can have subvars for. + Normally, this is any aggregate type. Also complex + types which are not gimple registers can have subvars. */ + +static inline bool +var_can_have_subvars (const_tree v) +{ + /* Volatile variables should never have subvars. */ + if (TREE_THIS_VOLATILE (v)) + return false; + + /* Non decls or memory tags can never have subvars. */ + if (!DECL_P (v)) + return false; + + return type_can_have_subvars (TREE_TYPE (v)); +} + +/* Return true if T is a type that does contain pointers. */ + +static bool +type_must_have_pointers (tree type) +{ + if (POINTER_TYPE_P (type)) + return true; + + if (TREE_CODE (type) == ARRAY_TYPE) + return type_must_have_pointers (TREE_TYPE (type)); + + /* A function or method can have pointers as arguments, so track + those separately. */ + if (FUNC_OR_METHOD_TYPE_P (type)) + return true; + + return false; +} + +static bool +field_must_have_pointers (tree t) +{ + return type_must_have_pointers (TREE_TYPE (t)); +} + +/* Given a TYPE, and a vector of field offsets FIELDSTACK, push all + the fields of TYPE onto fieldstack, recording their offsets along + the way. + + OFFSET is used to keep track of the offset in this entire + structure, rather than just the immediately containing structure. + Returns false if the caller is supposed to handle the field we + recursed for. */ + +static bool +push_fields_onto_fieldstack (tree type, vec *fieldstack, + unsigned HOST_WIDE_INT offset) +{ + tree field; + bool empty_p = true; + + if (TREE_CODE (type) != RECORD_TYPE) + return false; + + /* If the vector of fields is growing too big, bail out early. + Callers check for vec::length <= param_max_fields_for_field_sensitive, make + sure this fails. */ + if (fieldstack->length () > (unsigned)param_max_fields_for_field_sensitive) + return false; + + for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field)) + if (TREE_CODE (field) == FIELD_DECL) + { + bool push = false; + unsigned HOST_WIDE_INT foff = bitpos_of_field (field); + tree field_type = TREE_TYPE (field); + + if (!var_can_have_subvars (field) + || TREE_CODE (field_type) == QUAL_UNION_TYPE + || TREE_CODE (field_type) == UNION_TYPE) + push = true; + else if (!push_fields_onto_fieldstack + (field_type, fieldstack, offset + foff) + && (DECL_SIZE (field) + && !integer_zerop (DECL_SIZE (field)))) + /* Empty structures may have actual size, like in C++. So + see if we didn't push any subfields and the size is + nonzero, push the field onto the stack. */ + push = true; + + if (push) + { + fieldoff_s *pair = NULL; + bool has_unknown_size = false; + bool must_have_pointers_p; + + if (!fieldstack->is_empty ()) + pair = &fieldstack->last (); + + /* If there isn't anything at offset zero, create sth. */ + if (!pair + && offset + foff != 0) + { + fieldoff_s e + = {0, offset + foff, false, false, true, false, NULL_TREE}; + pair = fieldstack->safe_push (e); + } + + if (!DECL_SIZE (field) + || !tree_fits_uhwi_p (DECL_SIZE (field))) + has_unknown_size = true; + + /* If adjacent fields do not contain pointers merge them. */ + must_have_pointers_p = field_must_have_pointers (field); + if (pair + && !has_unknown_size + && !must_have_pointers_p + && !pair->must_have_pointers + && !pair->has_unknown_size + && pair->offset + pair->size == offset + foff) + { + pair->size += tree_to_uhwi (DECL_SIZE (field)); + } + else + { + fieldoff_s e; + e.offset = offset + foff; + e.has_unknown_size = has_unknown_size; + if (!has_unknown_size) + e.size = tree_to_uhwi (DECL_SIZE (field)); + else + e.size = -1; + e.must_have_pointers = must_have_pointers_p; + e.may_have_pointers = true; + e.only_restrict_pointers + = (!has_unknown_size + && POINTER_TYPE_P (field_type) + && TYPE_RESTRICT (field_type)); + if (e.only_restrict_pointers) + e.restrict_pointed_type = TREE_TYPE (field_type); + fieldstack->safe_push (e); + } + } + + empty_p = false; + } + + return !empty_p; +} + +/* Count the number of arguments DECL has, and set IS_VARARGS to true + if it is a varargs function. */ + +static unsigned int +count_num_arguments (tree decl, bool *is_varargs) +{ + unsigned int num = 0; + tree t; + + /* Capture named arguments for K&R functions. They do not + have a prototype and thus no TYPE_ARG_TYPES. */ + for (t = DECL_ARGUMENTS (decl); t; t = DECL_CHAIN (t)) + ++num; + + /* Check if the function has variadic arguments. */ + for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t)) + if (TREE_VALUE (t) == void_type_node) + break; + if (!t) + *is_varargs = true; + + return num; +} + +/* Creation function node for DECL, using NAME, and return the index + of the variable we've created for the function. If NONLOCAL_p, create + initial constraints. */ + +static varinfo_t +create_function_info_for (tree decl, const char *name, bool add_id, + bool nonlocal_p) +{ + struct function *fn = DECL_STRUCT_FUNCTION (decl); + varinfo_t vi, prev_vi; + tree arg; + unsigned int i; + bool is_varargs = false; + unsigned int num_args = count_num_arguments (decl, &is_varargs); + + /* Create the variable info. */ + + vi = new_var_info (decl, name, add_id); + vi->offset = 0; + vi->size = 1; + vi->fullsize = fi_parm_base + num_args; + vi->is_fn_info = 1; + vi->may_have_pointers = false; + if (is_varargs) + vi->fullsize = ~0; + insert_vi_for_tree (vi->decl, vi); + + prev_vi = vi; + + /* Create a variable for things the function clobbers and one for + things the function uses. */ + { + varinfo_t clobbervi, usevi; + const char *newname; + char *tempname; + + tempname = xasprintf ("%s.clobber", name); + newname = ggc_strdup (tempname); + free (tempname); + + clobbervi = new_var_info (NULL, newname, false); + clobbervi->offset = fi_clobbers; + clobbervi->size = 1; + clobbervi->fullsize = vi->fullsize; + clobbervi->is_full_var = true; + clobbervi->is_global_var = false; + clobbervi->is_reg_var = true; + + gcc_assert (prev_vi->offset < clobbervi->offset); + prev_vi->next = clobbervi->id; + prev_vi = clobbervi; + + tempname = xasprintf ("%s.use", name); + newname = ggc_strdup (tempname); + free (tempname); + + usevi = new_var_info (NULL, newname, false); + usevi->offset = fi_uses; + usevi->size = 1; + usevi->fullsize = vi->fullsize; + usevi->is_full_var = true; + usevi->is_global_var = false; + usevi->is_reg_var = true; + + gcc_assert (prev_vi->offset < usevi->offset); + prev_vi->next = usevi->id; + prev_vi = usevi; + } + + /* And one for the static chain. */ + if (fn->static_chain_decl != NULL_TREE) + { + varinfo_t chainvi; + const char *newname; + char *tempname; + + tempname = xasprintf ("%s.chain", name); + newname = ggc_strdup (tempname); + free (tempname); + + chainvi = new_var_info (fn->static_chain_decl, newname, false); + chainvi->offset = fi_static_chain; + chainvi->size = 1; + chainvi->fullsize = vi->fullsize; + chainvi->is_full_var = true; + chainvi->is_global_var = false; + + insert_vi_for_tree (fn->static_chain_decl, chainvi); + + if (nonlocal_p + && chainvi->may_have_pointers) + make_constraint_from (chainvi, nonlocal_id); + + gcc_assert (prev_vi->offset < chainvi->offset); + prev_vi->next = chainvi->id; + prev_vi = chainvi; + } + + /* Create a variable for the return var. */ + if (DECL_RESULT (decl) != NULL + || !VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl)))) + { + varinfo_t resultvi; + const char *newname; + char *tempname; + tree resultdecl = decl; + + if (DECL_RESULT (decl)) + resultdecl = DECL_RESULT (decl); + + tempname = xasprintf ("%s.result", name); + newname = ggc_strdup (tempname); + free (tempname); + + resultvi = new_var_info (resultdecl, newname, false); + resultvi->offset = fi_result; + resultvi->size = 1; + resultvi->fullsize = vi->fullsize; + resultvi->is_full_var = true; + if (DECL_RESULT (decl)) + resultvi->may_have_pointers = true; + + if (DECL_RESULT (decl)) + insert_vi_for_tree (DECL_RESULT (decl), resultvi); + + if (nonlocal_p + && DECL_RESULT (decl) + && DECL_BY_REFERENCE (DECL_RESULT (decl))) + make_constraint_from (resultvi, nonlocal_id); + + gcc_assert (prev_vi->offset < resultvi->offset); + prev_vi->next = resultvi->id; + prev_vi = resultvi; + } + + /* We also need to make function return values escape. Nothing + escapes by returning from main though. */ + if (nonlocal_p + && !MAIN_NAME_P (DECL_NAME (decl))) + { + varinfo_t fi, rvi; + fi = lookup_vi_for_tree (decl); + rvi = first_vi_for_offset (fi, fi_result); + if (rvi && rvi->offset == fi_result) + make_copy_constraint (get_varinfo (escaped_id), rvi->id); + } + + /* Set up variables for each argument. */ + arg = DECL_ARGUMENTS (decl); + for (i = 0; i < num_args; i++) + { + varinfo_t argvi; + const char *newname; + char *tempname; + tree argdecl = decl; + + if (arg) + argdecl = arg; + + tempname = xasprintf ("%s.arg%d", name, i); + newname = ggc_strdup (tempname); + free (tempname); + + argvi = new_var_info (argdecl, newname, false); + argvi->offset = fi_parm_base + i; + argvi->size = 1; + argvi->is_full_var = true; + argvi->fullsize = vi->fullsize; + if (arg) + argvi->may_have_pointers = true; + + if (arg) + insert_vi_for_tree (arg, argvi); + + if (nonlocal_p + && argvi->may_have_pointers) + make_constraint_from (argvi, nonlocal_id); + + gcc_assert (prev_vi->offset < argvi->offset); + prev_vi->next = argvi->id; + prev_vi = argvi; + if (arg) + arg = DECL_CHAIN (arg); + } + + /* Add one representative for all further args. */ + if (is_varargs) + { + varinfo_t argvi; + const char *newname; + char *tempname; + tree decl; + + tempname = xasprintf ("%s.varargs", name); + newname = ggc_strdup (tempname); + free (tempname); + + /* We need sth that can be pointed to for va_start. */ + decl = build_fake_var_decl (ptr_type_node); + + argvi = new_var_info (decl, newname, false); + argvi->offset = fi_parm_base + num_args; + argvi->size = ~0; + argvi->is_full_var = true; + argvi->is_heap_var = true; + argvi->fullsize = vi->fullsize; + + if (nonlocal_p + && argvi->may_have_pointers) + make_constraint_from (argvi, nonlocal_id); + + gcc_assert (prev_vi->offset < argvi->offset); + prev_vi->next = argvi->id; + } + + return vi; +} + + +/* Return true if FIELDSTACK contains fields that overlap. + FIELDSTACK is assumed to be sorted by offset. */ + +static bool +check_for_overlaps (const vec &fieldstack) +{ + fieldoff_s *fo = NULL; + unsigned int i; + HOST_WIDE_INT lastoffset = -1; + + FOR_EACH_VEC_ELT (fieldstack, i, fo) + { + if (fo->offset == lastoffset) + return true; + lastoffset = fo->offset; + } + return false; +} + +/* Create a varinfo structure for NAME and DECL, and add it to VARMAP. + This will also create any varinfo structures necessary for fields + of DECL. DECL is a function parameter if HANDLE_PARAM is set. + HANDLED_STRUCT_TYPE is used to register struct types reached by following + restrict pointers. This is needed to prevent infinite recursion. + If ADD_RESTRICT, pretend that the pointer NAME is restrict even if DECL + does not advertise it. */ + +static varinfo_t +create_variable_info_for_1 (tree decl, const char *name, bool add_id, + bool handle_param, bitmap handled_struct_type, + bool add_restrict = false) +{ + varinfo_t vi, newvi; + tree decl_type = TREE_TYPE (decl); + tree declsize = DECL_P (decl) ? DECL_SIZE (decl) : TYPE_SIZE (decl_type); + auto_vec fieldstack; + fieldoff_s *fo; + unsigned int i; + + if (!declsize + || !tree_fits_uhwi_p (declsize)) + { + vi = new_var_info (decl, name, add_id); + vi->offset = 0; + vi->size = ~0; + vi->fullsize = ~0; + vi->is_unknown_size_var = true; + vi->is_full_var = true; + vi->may_have_pointers = true; + return vi; + } + + /* Collect field information. */ + if (use_field_sensitive + && var_can_have_subvars (decl) + /* ??? Force us to not use subfields for globals in IPA mode. + Else we'd have to parse arbitrary initializers. */ + && !(in_ipa_mode + && is_global_var (decl))) + { + fieldoff_s *fo = NULL; + bool notokay = false; + unsigned int i; + + push_fields_onto_fieldstack (decl_type, &fieldstack, 0); + + for (i = 0; !notokay && fieldstack.iterate (i, &fo); i++) + if (fo->has_unknown_size + || fo->offset < 0) + { + notokay = true; + break; + } + + /* We can't sort them if we have a field with a variable sized type, + which will make notokay = true. In that case, we are going to return + without creating varinfos for the fields anyway, so sorting them is a + waste to boot. */ + if (!notokay) + { + sort_fieldstack (fieldstack); + /* Due to some C++ FE issues, like PR 22488, we might end up + what appear to be overlapping fields even though they, + in reality, do not overlap. Until the C++ FE is fixed, + we will simply disable field-sensitivity for these cases. */ + notokay = check_for_overlaps (fieldstack); + } + + if (notokay) + fieldstack.release (); + } + + /* If we didn't end up collecting sub-variables create a full + variable for the decl. */ + if (fieldstack.length () == 0 + || fieldstack.length () > (unsigned)param_max_fields_for_field_sensitive) + { + vi = new_var_info (decl, name, add_id); + vi->offset = 0; + vi->may_have_pointers = true; + vi->fullsize = tree_to_uhwi (declsize); + vi->size = vi->fullsize; + vi->is_full_var = true; + if (POINTER_TYPE_P (decl_type) + && (TYPE_RESTRICT (decl_type) || add_restrict)) + vi->only_restrict_pointers = 1; + if (vi->only_restrict_pointers + && !type_contains_placeholder_p (TREE_TYPE (decl_type)) + && handle_param + && !bitmap_bit_p (handled_struct_type, + TYPE_UID (TREE_TYPE (decl_type)))) + { + varinfo_t rvi; + tree heapvar = build_fake_var_decl (TREE_TYPE (decl_type)); + DECL_EXTERNAL (heapvar) = 1; + if (var_can_have_subvars (heapvar)) + bitmap_set_bit (handled_struct_type, + TYPE_UID (TREE_TYPE (decl_type))); + rvi = create_variable_info_for_1 (heapvar, "PARM_NOALIAS", true, + true, handled_struct_type); + if (var_can_have_subvars (heapvar)) + bitmap_clear_bit (handled_struct_type, + TYPE_UID (TREE_TYPE (decl_type))); + rvi->is_restrict_var = 1; + insert_vi_for_tree (heapvar, rvi); + make_constraint_from (vi, rvi->id); + make_param_constraints (rvi); + } + fieldstack.release (); + return vi; + } + + vi = new_var_info (decl, name, add_id); + vi->fullsize = tree_to_uhwi (declsize); + if (fieldstack.length () == 1) + vi->is_full_var = true; + for (i = 0, newvi = vi; + fieldstack.iterate (i, &fo); + ++i, newvi = vi_next (newvi)) + { + const char *newname = NULL; + char *tempname; + + if (dump_file) + { + if (fieldstack.length () != 1) + { + tempname + = xasprintf ("%s." HOST_WIDE_INT_PRINT_DEC + "+" HOST_WIDE_INT_PRINT_DEC, name, + fo->offset, fo->size); + newname = ggc_strdup (tempname); + free (tempname); + } + } + else + newname = "NULL"; + + if (newname) + newvi->name = newname; + newvi->offset = fo->offset; + newvi->size = fo->size; + newvi->fullsize = vi->fullsize; + newvi->may_have_pointers = fo->may_have_pointers; + newvi->only_restrict_pointers = fo->only_restrict_pointers; + if (handle_param + && newvi->only_restrict_pointers + && !type_contains_placeholder_p (fo->restrict_pointed_type) + && !bitmap_bit_p (handled_struct_type, + TYPE_UID (fo->restrict_pointed_type))) + { + varinfo_t rvi; + tree heapvar = build_fake_var_decl (fo->restrict_pointed_type); + DECL_EXTERNAL (heapvar) = 1; + if (var_can_have_subvars (heapvar)) + bitmap_set_bit (handled_struct_type, + TYPE_UID (fo->restrict_pointed_type)); + rvi = create_variable_info_for_1 (heapvar, "PARM_NOALIAS", true, + true, handled_struct_type); + if (var_can_have_subvars (heapvar)) + bitmap_clear_bit (handled_struct_type, + TYPE_UID (fo->restrict_pointed_type)); + rvi->is_restrict_var = 1; + insert_vi_for_tree (heapvar, rvi); + make_constraint_from (newvi, rvi->id); + make_param_constraints (rvi); + } + if (i + 1 < fieldstack.length ()) + { + varinfo_t tem = new_var_info (decl, name, false); + newvi->next = tem->id; + tem->head = vi->id; + } + } + + return vi; +} + +static unsigned int +create_variable_info_for (tree decl, const char *name, bool add_id) +{ + /* First see if we are dealing with an ifunc resolver call and + assiociate that with a call to the resolver function result. */ + cgraph_node *node; + if (in_ipa_mode + && TREE_CODE (decl) == FUNCTION_DECL + && (node = cgraph_node::get (decl)) + && node->ifunc_resolver) + { + varinfo_t fi = get_vi_for_tree (node->get_alias_target ()->decl); + constraint_expr rhs + = get_function_part_constraint (fi, fi_result); + fi = new_var_info (NULL_TREE, "ifuncres", true); + fi->is_reg_var = true; + constraint_expr lhs; + lhs.type = SCALAR; + lhs.var = fi->id; + lhs.offset = 0; + process_constraint (new_constraint (lhs, rhs)); + insert_vi_for_tree (decl, fi); + return fi->id; + } + + varinfo_t vi = create_variable_info_for_1 (decl, name, add_id, false, NULL); + unsigned int id = vi->id; + + insert_vi_for_tree (decl, vi); + + if (!VAR_P (decl)) + return id; + + /* Create initial constraints for globals. */ + for (; vi; vi = vi_next (vi)) + { + if (!vi->may_have_pointers + || !vi->is_global_var) + continue; + + /* Mark global restrict qualified pointers. */ + if ((POINTER_TYPE_P (TREE_TYPE (decl)) + && TYPE_RESTRICT (TREE_TYPE (decl))) + || vi->only_restrict_pointers) + { + varinfo_t rvi + = make_constraint_from_global_restrict (vi, "GLOBAL_RESTRICT", + true); + /* ??? For now exclude reads from globals as restrict sources + if those are not (indirectly) from incoming parameters. */ + rvi->is_restrict_var = false; + continue; + } + + /* In non-IPA mode the initializer from nonlocal is all we need. */ + if (!in_ipa_mode + || DECL_HARD_REGISTER (decl)) + make_copy_constraint (vi, nonlocal_id); + + /* In IPA mode parse the initializer and generate proper constraints + for it. */ + else + { + varpool_node *vnode = varpool_node::get (decl); + + /* For escaped variables initialize them from nonlocal. */ + if (!vnode || !vnode->all_refs_explicit_p ()) + make_copy_constraint (vi, nonlocal_id); + + /* While we can in theory walk references for the varpool + node that does not cover zero-initialization or references + to the constant pool. */ + if (DECL_INITIAL (decl)) + { + auto_vec rhsc; + struct constraint_expr lhs, *rhsp; + unsigned i; + lhs.var = vi->id; + lhs.offset = 0; + lhs.type = SCALAR; + get_constraint_for (DECL_INITIAL (decl), &rhsc); + FOR_EACH_VEC_ELT (rhsc, i, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + /* If this is a variable that escapes from the unit + the initializer escapes as well. */ + if (!vnode || !vnode->all_refs_explicit_p ()) + { + lhs.var = escaped_id; + lhs.offset = 0; + lhs.type = SCALAR; + FOR_EACH_VEC_ELT (rhsc, i, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + } + } + } + } + + return id; +} + +/* Register the constraints for function parameter related VI. */ + +static void +make_param_constraints (varinfo_t vi) +{ + for (; vi; vi = vi_next (vi)) + { + if (vi->only_restrict_pointers) + ; + else if (vi->may_have_pointers) + make_constraint_from (vi, nonlocal_id); + + if (vi->is_full_var) + break; + } +} + +/* Create varinfo structures for all of the variables in the + function for intraprocedural mode. */ + +static void +intra_create_variable_infos (struct function *fn) +{ + tree t; + bitmap handled_struct_type = NULL; + bool this_parm_in_ctor = DECL_CXX_CONSTRUCTOR_P (fn->decl); + + /* For each incoming pointer argument arg, create the constraint ARG + = NONLOCAL or a dummy variable if it is a restrict qualified + passed-by-reference argument. */ + for (t = DECL_ARGUMENTS (fn->decl); t; t = DECL_CHAIN (t)) + { + if (handled_struct_type == NULL) + handled_struct_type = BITMAP_ALLOC (NULL); + + varinfo_t p + = create_variable_info_for_1 (t, alias_get_name (t), false, true, + handled_struct_type, this_parm_in_ctor); + insert_vi_for_tree (t, p); + + make_param_constraints (p); + + this_parm_in_ctor = false; + } + + if (handled_struct_type != NULL) + BITMAP_FREE (handled_struct_type); + + /* Add a constraint for a result decl that is passed by reference. */ + if (DECL_RESULT (fn->decl) + && DECL_BY_REFERENCE (DECL_RESULT (fn->decl))) + { + varinfo_t p, result_vi = get_vi_for_tree (DECL_RESULT (fn->decl)); + + for (p = result_vi; p; p = vi_next (p)) + make_constraint_from (p, nonlocal_id); + } + + /* Add a constraint for the incoming static chain parameter. */ + if (fn->static_chain_decl != NULL_TREE) + { + varinfo_t p, chain_vi = get_vi_for_tree (fn->static_chain_decl); + + for (p = chain_vi; p; p = vi_next (p)) + make_constraint_from (p, nonlocal_id); + } +} + +/* Initialize the always-existing constraint variables for NULL + ANYTHING, READONLY, and INTEGER. */ + +static void +init_base_vars (void) +{ + struct constraint_expr lhs, rhs; + varinfo_t var_anything; + varinfo_t var_nothing; + varinfo_t var_string; + varinfo_t var_escaped; + varinfo_t var_nonlocal; + varinfo_t var_escaped_return; + varinfo_t var_storedanything; + varinfo_t var_integer; + + /* Variable ID zero is reserved and should be NULL. */ + varmap.safe_push (NULL); + + /* Create the NULL variable, used to represent that a variable points + to NULL. */ + var_nothing = new_var_info (NULL_TREE, "NULL", false); + gcc_assert (var_nothing->id == nothing_id); + var_nothing->is_artificial_var = 1; + var_nothing->offset = 0; + var_nothing->size = ~0; + var_nothing->fullsize = ~0; + var_nothing->is_special_var = 1; + var_nothing->may_have_pointers = 0; + var_nothing->is_global_var = 0; + + /* Create the ANYTHING variable, used to represent that a variable + points to some unknown piece of memory. */ + var_anything = new_var_info (NULL_TREE, "ANYTHING", false); + gcc_assert (var_anything->id == anything_id); + var_anything->is_artificial_var = 1; + var_anything->size = ~0; + var_anything->offset = 0; + var_anything->fullsize = ~0; + var_anything->is_special_var = 1; + + /* Anything points to anything. This makes deref constraints just + work in the presence of linked list and other p = *p type loops, + by saying that *ANYTHING = ANYTHING. */ + lhs.type = SCALAR; + lhs.var = anything_id; + lhs.offset = 0; + rhs.type = ADDRESSOF; + rhs.var = anything_id; + rhs.offset = 0; + + /* This specifically does not use process_constraint because + process_constraint ignores all anything = anything constraints, since all + but this one are redundant. */ + constraints.safe_push (new_constraint (lhs, rhs)); + + /* Create the STRING variable, used to represent that a variable + points to a string literal. String literals don't contain + pointers so STRING doesn't point to anything. */ + var_string = new_var_info (NULL_TREE, "STRING", false); + gcc_assert (var_string->id == string_id); + var_string->is_artificial_var = 1; + var_string->offset = 0; + var_string->size = ~0; + var_string->fullsize = ~0; + var_string->is_special_var = 1; + var_string->may_have_pointers = 0; + + /* Create the ESCAPED variable, used to represent the set of escaped + memory. */ + var_escaped = new_var_info (NULL_TREE, "ESCAPED", false); + gcc_assert (var_escaped->id == escaped_id); + var_escaped->is_artificial_var = 1; + var_escaped->offset = 0; + var_escaped->size = ~0; + var_escaped->fullsize = ~0; + var_escaped->is_special_var = 0; + + /* Create the NONLOCAL variable, used to represent the set of nonlocal + memory. */ + var_nonlocal = new_var_info (NULL_TREE, "NONLOCAL", false); + gcc_assert (var_nonlocal->id == nonlocal_id); + var_nonlocal->is_artificial_var = 1; + var_nonlocal->offset = 0; + var_nonlocal->size = ~0; + var_nonlocal->fullsize = ~0; + var_nonlocal->is_special_var = 1; + + /* Create the ESCAPED_RETURN variable, used to represent the set of escaped + memory via a regular return stmt. */ + var_escaped_return = new_var_info (NULL_TREE, "ESCAPED_RETURN", false); + gcc_assert (var_escaped_return->id == escaped_return_id); + var_escaped_return->is_artificial_var = 1; + var_escaped_return->offset = 0; + var_escaped_return->size = ~0; + var_escaped_return->fullsize = ~0; + var_escaped_return->is_special_var = 0; + + /* ESCAPED = *ESCAPED, because escaped is may-deref'd at calls, etc. */ + lhs.type = SCALAR; + lhs.var = escaped_id; + lhs.offset = 0; + rhs.type = DEREF; + rhs.var = escaped_id; + rhs.offset = 0; + process_constraint (new_constraint (lhs, rhs)); + + /* ESCAPED = ESCAPED + UNKNOWN_OFFSET, because if a sub-field escapes the + whole variable escapes. */ + lhs.type = SCALAR; + lhs.var = escaped_id; + lhs.offset = 0; + rhs.type = SCALAR; + rhs.var = escaped_id; + rhs.offset = UNKNOWN_OFFSET; + process_constraint (new_constraint (lhs, rhs)); + + /* *ESCAPED = NONLOCAL. This is true because we have to assume + everything pointed to by escaped points to what global memory can + point to. */ + lhs.type = DEREF; + lhs.var = escaped_id; + lhs.offset = 0; + rhs.type = SCALAR; + rhs.var = nonlocal_id; + rhs.offset = 0; + process_constraint (new_constraint (lhs, rhs)); + + /* NONLOCAL = &NONLOCAL, NONLOCAL = &ESCAPED. This is true because + global memory may point to global memory and escaped memory. */ + lhs.type = SCALAR; + lhs.var = nonlocal_id; + lhs.offset = 0; + rhs.type = ADDRESSOF; + rhs.var = nonlocal_id; + rhs.offset = 0; + process_constraint (new_constraint (lhs, rhs)); + rhs.type = ADDRESSOF; + rhs.var = escaped_id; + rhs.offset = 0; + process_constraint (new_constraint (lhs, rhs)); + + /* Transitively close ESCAPED_RETURN. + ESCAPED_RETURN = ESCAPED_RETURN + UNKNOWN_OFFSET + ESCAPED_RETURN = *ESCAPED_RETURN. */ + lhs.type = SCALAR; + lhs.var = escaped_return_id; + lhs.offset = 0; + rhs.type = SCALAR; + rhs.var = escaped_return_id; + rhs.offset = UNKNOWN_OFFSET; + process_constraint (new_constraint (lhs, rhs)); + lhs.type = SCALAR; + lhs.var = escaped_return_id; + lhs.offset = 0; + rhs.type = DEREF; + rhs.var = escaped_return_id; + rhs.offset = 0; + process_constraint (new_constraint (lhs, rhs)); + + /* Create the STOREDANYTHING variable, used to represent the set of + variables stored to *ANYTHING. */ + var_storedanything = new_var_info (NULL_TREE, "STOREDANYTHING", false); + gcc_assert (var_storedanything->id == storedanything_id); + var_storedanything->is_artificial_var = 1; + var_storedanything->offset = 0; + var_storedanything->size = ~0; + var_storedanything->fullsize = ~0; + var_storedanything->is_special_var = 0; + + /* Create the INTEGER variable, used to represent that a variable points + to what an INTEGER "points to". */ + var_integer = new_var_info (NULL_TREE, "INTEGER", false); + gcc_assert (var_integer->id == integer_id); + var_integer->is_artificial_var = 1; + var_integer->size = ~0; + var_integer->fullsize = ~0; + var_integer->offset = 0; + var_integer->is_special_var = 1; + + /* INTEGER = ANYTHING, because we don't know where a dereference of + a random integer will point to. */ + lhs.type = SCALAR; + lhs.var = integer_id; + lhs.offset = 0; + rhs.type = ADDRESSOF; + rhs.var = anything_id; + rhs.offset = 0; + process_constraint (new_constraint (lhs, rhs)); +} + +/* Associate node with varinfo DATA. Worker for + cgraph_for_symbol_thunks_and_aliases. */ +static bool +associate_varinfo_to_alias (struct cgraph_node *node, void *data) +{ + if ((node->alias + || (node->thunk + && ! node->inlined_to)) + && node->analyzed + && !node->ifunc_resolver) + insert_vi_for_tree (node->decl, (varinfo_t)data); + return false; +} + +/* Compute whether node is refered to non-locally. Worker for + cgraph_for_symbol_thunks_and_aliases. */ +static bool +refered_from_nonlocal_fn (struct cgraph_node *node, void *data) +{ + bool *nonlocal_p = (bool *)data; + *nonlocal_p |= (node->used_from_other_partition + || DECL_EXTERNAL (node->decl) + || TREE_PUBLIC (node->decl) + || node->force_output + || lookup_attribute ("noipa", DECL_ATTRIBUTES (node->decl))); + return false; +} + +/* Same for varpool nodes. */ +static bool +refered_from_nonlocal_var (struct varpool_node *node, void *data) +{ + bool *nonlocal_p = (bool *)data; + *nonlocal_p |= (node->used_from_other_partition + || DECL_EXTERNAL (node->decl) + || TREE_PUBLIC (node->decl) + || node->force_output); + return false; +} + +/* Create function infos. */ + +static void +ipa_create_function_infos (void) +{ + struct cgraph_node *node; + unsigned int constr_count = constraints.length (); + + FOR_EACH_DEFINED_FUNCTION (node) + { + varinfo_t vi; + /* Nodes without a body in this partition are not interesting. + Especially do not visit clones at this point for now - we + get duplicate decls there for inline clones at least. */ + if (!node->has_gimple_body_p () + || node->in_other_partition + || node->inlined_to) + continue; + node->get_body (); + + gcc_assert (!node->clone_of); + + /* For externally visible or attribute used annotated functions use + local constraints for their arguments. + For local functions we see all callers and thus do not need initial + constraints for parameters. */ + bool nonlocal_p = (node->used_from_other_partition + || DECL_EXTERNAL (node->decl) + || TREE_PUBLIC (node->decl) + || node->force_output + || lookup_attribute ("noipa", + DECL_ATTRIBUTES (node->decl))); + node->call_for_symbol_thunks_and_aliases (refered_from_nonlocal_fn, + &nonlocal_p, true); + + vi = create_function_info_for (node->decl, + alias_get_name (node->decl), false, + nonlocal_p); + if (dump_file && (dump_flags & TDF_DETAILS) + && constr_count != constraints.length ()) + { + fprintf (dump_file, + "Generating initial constraints for %s", + node->dump_name ()); + if (DECL_ASSEMBLER_NAME_SET_P (node->decl)) + fprintf (dump_file, " (%s)", + IDENTIFIER_POINTER + (DECL_ASSEMBLER_NAME (node->decl))); + fprintf (dump_file, "\n\n"); + dump_constraints (dump_file, constr_count); + fprintf (dump_file, "\n"); + + constr_count = constraints.length (); + } + + node->call_for_symbol_thunks_and_aliases + (associate_varinfo_to_alias, vi, true); + } +} + +/* Create constraints for global variables and their initializers. */ + +static void +ipa_create_global_variable_infos (void) +{ + varpool_node *var; + unsigned int constr_count = constraints.length (); + + FOR_EACH_VARIABLE (var) + { + if (var->alias && var->analyzed) + continue; + + varinfo_t vi = get_vi_for_tree (var->decl); + + /* For the purpose of IPA PTA unit-local globals are not + escape points. */ + bool nonlocal_p = (DECL_EXTERNAL (var->decl) + || TREE_PUBLIC (var->decl) + || var->used_from_other_partition + || var->force_output); + var->call_for_symbol_and_aliases (refered_from_nonlocal_var, + &nonlocal_p, true); + if (nonlocal_p) + vi->is_ipa_escape_point = true; + } + + if (dump_file && (dump_flags & TDF_DETAILS) + && constr_count != constraints.length ()) + { + fprintf (dump_file, + "Generating constraints for global initializers\n\n"); + dump_constraints (dump_file, constr_count); + fprintf (dump_file, "\n"); + constr_count = constraints.length (); + } +} + + +namespace pointer_analysis { + +/* Find the variable info for tree T in VI_FOR_TREE. If T does not + exist in the map, return NULL, otherwise, return the varinfo we found. */ + +varinfo_t +lookup_vi_for_tree (tree t) +{ + varinfo_t *slot = vi_for_tree->get (t); + if (slot == NULL) + return NULL; + + return *slot; +} + +/* Lookup the variable for the call statement CALL representing + the uses. Returns NULL if there is nothing special about this call. */ + +varinfo_t +lookup_call_use_vi (gcall *call) +{ + varinfo_t *slot_p = call_stmt_vars->get (call); + if (slot_p) + return *slot_p; + + return NULL; +} + +/* Lookup the variable for the call statement CALL representing + the clobbers. Returns NULL if there is nothing special about this call. */ + +varinfo_t +lookup_call_clobber_vi (gcall *call) +{ + varinfo_t uses = lookup_call_use_vi (call); + if (!uses) + return NULL; + + return vi_next (uses); +} + +/* Return the varinfo for the callee of CALL. */ + +varinfo_t +get_fi_for_callee (gcall *call) +{ + tree decl, fn = gimple_call_fn (call); + + if (fn && TREE_CODE (fn) == OBJ_TYPE_REF) + fn = OBJ_TYPE_REF_EXPR (fn); + + /* If we can directly resolve the function being called, do so. + Otherwise, it must be some sort of indirect expression that + we should still be able to handle. */ + decl = gimple_call_addr_fndecl (fn); + if (decl) + return get_vi_for_tree (decl); + + /* If the function is anything other than a SSA name pointer we have no + clue and should be getting ANYFN (well, ANYTHING for now). */ + if (!fn || TREE_CODE (fn) != SSA_NAME) + return get_varinfo (anything_id); + + if (SSA_NAME_IS_DEFAULT_DEF (fn) + && (TREE_CODE (SSA_NAME_VAR (fn)) == PARM_DECL + || TREE_CODE (SSA_NAME_VAR (fn)) == RESULT_DECL)) + fn = SSA_NAME_VAR (fn); + + return get_vi_for_tree (fn); +} + +/* Initialize constraint builder. */ + +void +init_constraint_builder (void) +{ + vi_for_tree = new hash_map; + call_stmt_vars = new hash_map; + gcc_obstack_init (&fake_var_decl_obstack); + + init_base_vars (); +} + +/* Deallocate constraint builder globals. */ + +void +delete_constraint_builder (void) +{ + delete vi_for_tree; + delete call_stmt_vars; + constraint_pool.release (); + obstack_free (&fake_var_decl_obstack, NULL); +} + +/* Build constraints for intraprocedural mode. */ + +void +intra_build_constraints (void) +{ + basic_block bb; + + intra_create_variable_infos (cfun); + + /* Now walk all statements and build the constraint set. */ + FOR_EACH_BB_FN (bb, cfun) + { + for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi); + gsi_next (&gsi)) + { + gphi *phi = gsi.phi (); + + if (! virtual_operand_p (gimple_phi_result (phi))) + find_func_aliases (cfun, phi); + } + + for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi); + gsi_next (&gsi)) + { + gimple *stmt = gsi_stmt (gsi); + + find_func_aliases (cfun, stmt); + } + } + + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "Points-to analysis\n\nConstraints:\n\n"); + dump_constraints (dump_file, 0); + } +} + +/* Build constraints for ipa mode. */ + +void +ipa_build_constraints (void) +{ + struct cgraph_node *node; + + ipa_create_function_infos (); + ipa_create_global_variable_infos (); + + unsigned int constr_count = constraints.length (); + + FOR_EACH_DEFINED_FUNCTION (node) + { + struct function *func; + basic_block bb; + + /* Nodes without a body in this partition are not interesting. */ + if (!node->has_gimple_body_p () + || node->in_other_partition + || node->clone_of) + continue; + + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, + "Generating constraints for %s", node->dump_name ()); + if (DECL_ASSEMBLER_NAME_SET_P (node->decl)) + fprintf (dump_file, " (%s)", + IDENTIFIER_POINTER + (DECL_ASSEMBLER_NAME (node->decl))); + fprintf (dump_file, "\n"); + } + + func = DECL_STRUCT_FUNCTION (node->decl); + gcc_assert (cfun == NULL); + + /* Build constraints for the function body. */ + FOR_EACH_BB_FN (bb, func) + { + for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi); + gsi_next (&gsi)) + { + gphi *phi = gsi.phi (); + + if (! virtual_operand_p (gimple_phi_result (phi))) + find_func_aliases (func, phi); + } + + for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi); + gsi_next (&gsi)) + { + gimple *stmt = gsi_stmt (gsi); + + find_func_aliases (func, stmt); + find_func_clobbers (func, stmt); + } + } + + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "\n"); + dump_constraints (dump_file, constr_count); + fprintf (dump_file, "\n"); + constr_count = constraints.length (); + } + } +} + +} // namespace pointer_analysis diff --git a/gcc/gimple-ssa-pta-constraints.h b/gcc/gimple-ssa-pta-constraints.h new file mode 100644 index 000000000000..3b469f7f7162 --- /dev/null +++ b/gcc/gimple-ssa-pta-constraints.h @@ -0,0 +1,38 @@ +/* Constraint builder for tree based points-to analysis + Copyright (C) 2005-2025 Free Software Foundation, Inc. + Contributed by Daniel Berlin + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + GCC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING3. If not see + . */ + +#ifndef GIMPLE_SSA_PTA_CONSTRAINTS_H +#define GIMPLE_SSA_PTA_CONSTRAINTS_H + +namespace pointer_analysis { + +varinfo_t lookup_vi_for_tree (tree); +varinfo_t lookup_call_use_vi (gcall *); +varinfo_t lookup_call_clobber_vi (gcall *); +varinfo_t get_fi_for_callee (gcall *); + +void init_constraint_builder (void); +void delete_constraint_builder (void); +void intra_build_constraints (void); +void ipa_build_constraints (void); + +} // namespace pointer_analysis + +#endif /* GIMPLE_SSA_PTA_CONSTRAINTS_H */ diff --git a/gcc/tree-ssa-structalias.cc b/gcc/tree-ssa-structalias.cc index 558a0900f995..bb19123a6a11 100644 --- a/gcc/tree-ssa-structalias.cc +++ b/gcc/tree-ssa-structalias.cc @@ -50,6 +50,7 @@ #include "tree-ssa-structalias.h" #include "pta-andersen.h" +#include "gimple-ssa-pta-constraints.h" /* The idea behind this analyzer is to generate set constraints from the program, then solve the resulting constraints in order to generate the @@ -204,8 +205,22 @@ And probably more. */ +using namespace pointer_analysis; + +/* Pool of variable info structures. */ +static object_allocator variable_info_pool + ("Variable info pool"); + +/* Map varinfo to final pt_solution. */ +static hash_map *final_solutions; +static struct obstack final_solutions_obstack; + + namespace pointer_analysis { +bool use_field_sensitive = true; +int in_ipa_mode = 0; + /* Used for points-to sets. */ bitmap_obstack pta_obstack; @@ -219,9 +234,6 @@ vec varmap; /* List of constraints that we use to build the constraint graph from. */ vec constraints; -/* Map from trees to variable infos. */ -static hash_map *vi_for_tree; - /* The representative variable for a variable. The points-to solution for a var can be found in its rep. Trivially, a var can be its own rep. @@ -288,6 +300,120 @@ first_or_preceding_vi_for_offset (varinfo_t start, return start; } +/* Determine global memory access of call STMT and update + WRITES_GLOBAL_MEMORY, READS_GLOBAL_MEMORY and USES_GLOBAL_MEMORY. */ + +void +determine_global_memory_access (gcall *stmt, + bool *writes_global_memory, + bool *reads_global_memory, + bool *uses_global_memory) +{ + tree callee; + cgraph_node *node; + modref_summary *summary; + + /* We need to detrmine reads to set uses. */ + gcc_assert (!uses_global_memory || reads_global_memory); + + if ((callee = gimple_call_fndecl (stmt)) != NULL_TREE + && (node = cgraph_node::get (callee)) != NULL + && (summary = get_modref_function_summary (node))) + { + if (writes_global_memory && *writes_global_memory) + *writes_global_memory = summary->global_memory_written; + if (reads_global_memory && *reads_global_memory) + *reads_global_memory = summary->global_memory_read; + if (reads_global_memory && uses_global_memory + && !summary->calls_interposable + && !*reads_global_memory && node->binds_to_current_def_p ()) + *uses_global_memory = false; + } + if ((writes_global_memory && *writes_global_memory) + || (uses_global_memory && *uses_global_memory) + || (reads_global_memory && *reads_global_memory)) + { + attr_fnspec fnspec = gimple_call_fnspec (stmt); + if (fnspec.known_p ()) + { + if (writes_global_memory + && !fnspec.global_memory_written_p ()) + *writes_global_memory = false; + if (reads_global_memory && !fnspec.global_memory_read_p ()) + { + *reads_global_memory = false; + if (uses_global_memory) + *uses_global_memory = false; + } + } + } +} + +/* Return true if FNDECL may be part of another lto partition. */ + +bool +fndecl_maybe_in_other_partition (tree fndecl) +{ + cgraph_node *fn_node = cgraph_node::get (fndecl); + if (fn_node == NULL) + return true; + + return fn_node->in_other_partition; +} + +/* Return a new variable info structure consisting for a variable + named NAME, and using constraint graph node NODE. Append it + to the vector of variable info structures. */ + +varinfo_t +new_var_info (tree t, const char *name, bool add_id) +{ + unsigned index = varmap.length (); + varinfo_t ret = variable_info_pool.allocate (); + + if (dump_file && add_id) + { + char *tempname = xasprintf ("%s(%d)", name, index); + name = ggc_strdup (tempname); + free (tempname); + } + + ret->id = index; + ret->name = name; + ret->decl = t; + /* Vars without decl are artificial and do not have sub-variables. */ + ret->is_artificial_var = (t == NULL_TREE); + ret->is_special_var = false; + ret->is_unknown_size_var = false; + ret->is_full_var = (t == NULL_TREE); + ret->is_heap_var = false; + ret->may_have_pointers = true; + ret->only_restrict_pointers = false; + ret->is_restrict_var = false; + ret->ruid = 0; + ret->is_global_var = (t == NULL_TREE); + ret->is_ipa_escape_point = false; + ret->is_fn_info = false; + ret->address_taken = false; + if (t && DECL_P (t)) + ret->is_global_var = (is_global_var (t) + /* We have to treat even local register variables + as escape points. */ + || (VAR_P (t) && DECL_HARD_REGISTER (t))); + ret->is_reg_var = (t && TREE_CODE (t) == SSA_NAME); + ret->solution = BITMAP_ALLOC (&pta_obstack); + ret->oldsolution = NULL; + ret->next = 0; + ret->shadow_var_uid = 0; + ret->head = ret->id; + + stats.total_vars++; + + varmap.safe_push (ret); + + return ret; +} + /* Print out constraint C to FILE. */ void @@ -402,3942 +528,141 @@ dump_sa_stats (FILE *outfile) fprintf (outfile, "Number of implicit edges: %d\n", stats.num_implicit_edges); fprintf (outfile, "Number of avoided edges: %d\n", - stats.num_avoided_edges); -} - -/* Dump points-to information to OUTFILE. */ - -void -dump_sa_points_to_info (FILE *outfile) -{ - fprintf (outfile, "\nPoints-to sets\n\n"); - - for (unsigned i = 1; i < varmap.length (); i++) - { - varinfo_t vi = get_varinfo (i); - if (!vi->may_have_pointers) - continue; - dump_solution_for_var (outfile, i); - } -} - - -/* Debug points-to information to stderr. */ - -DEBUG_FUNCTION void -debug_sa_points_to_info (void) -{ - dump_sa_points_to_info (stderr); -} - -/* Dump varinfo VI to FILE. */ - -void -dump_varinfo (FILE *file, varinfo_t vi) -{ - if (vi == NULL) - return; - - fprintf (file, "%u: %s\n", vi->id, vi->name); - - const char *sep = " "; - if (vi->is_artificial_var) - fprintf (file, "%sartificial", sep); - if (vi->is_special_var) - fprintf (file, "%sspecial", sep); - if (vi->is_unknown_size_var) - fprintf (file, "%sunknown-size", sep); - if (vi->is_full_var) - fprintf (file, "%sfull", sep); - if (vi->is_heap_var) - fprintf (file, "%sheap", sep); - if (vi->may_have_pointers) - fprintf (file, "%smay-have-pointers", sep); - if (vi->only_restrict_pointers) - fprintf (file, "%sonly-restrict-pointers", sep); - if (vi->is_restrict_var) - fprintf (file, "%sis-restrict-var", sep); - if (vi->is_global_var) - fprintf (file, "%sglobal", sep); - if (vi->is_ipa_escape_point) - fprintf (file, "%sipa-escape-point", sep); - if (vi->is_fn_info) - fprintf (file, "%sfn-info", sep); - if (vi->ruid) - fprintf (file, "%srestrict-uid:%u", sep, vi->ruid); - if (vi->next) - fprintf (file, "%snext:%u", sep, vi->next); - if (vi->head != vi->id) - fprintf (file, "%shead:%u", sep, vi->head); - if (vi->offset) - fprintf (file, "%soffset:" HOST_WIDE_INT_PRINT_DEC, sep, vi->offset); - if (vi->size != ~HOST_WIDE_INT_0U) - fprintf (file, "%ssize:" HOST_WIDE_INT_PRINT_DEC, sep, vi->size); - if (vi->fullsize != ~HOST_WIDE_INT_0U && vi->fullsize != vi->size) - fprintf (file, "%sfullsize:" HOST_WIDE_INT_PRINT_DEC, sep, - vi->fullsize); - fprintf (file, "\n"); - - if (vi->solution && !bitmap_empty_p (vi->solution)) - { - bitmap_iterator bi; - unsigned i; - fprintf (file, " solution: {"); - EXECUTE_IF_SET_IN_BITMAP (vi->solution, 0, i, bi) - fprintf (file, " %u", i); - fprintf (file, " }\n"); - } - - if (vi->oldsolution && !bitmap_empty_p (vi->oldsolution) - && !bitmap_equal_p (vi->solution, vi->oldsolution)) - { - bitmap_iterator bi; - unsigned i; - fprintf (file, " oldsolution: {"); - EXECUTE_IF_SET_IN_BITMAP (vi->oldsolution, 0, i, bi) - fprintf (file, " %u", i); - fprintf (file, " }\n"); - } -} - -/* Dump varinfo VI to stderr. */ - -DEBUG_FUNCTION void -debug_varinfo (varinfo_t vi) -{ - dump_varinfo (stderr, vi); -} - -/* Dump varmap to FILE. */ - -void -dump_varmap (FILE *file) -{ - if (varmap.length () == 0) - return; - - fprintf (file, "variables:\n"); - - for (unsigned int i = 0; i < varmap.length (); ++i) - { - varinfo_t vi = get_varinfo (i); - dump_varinfo (file, vi); - } - - fprintf (file, "\n"); -} - -/* Dump varmap to stderr. */ - -DEBUG_FUNCTION void -debug_varmap (void) -{ - dump_varmap (stderr); -} - -} // namespace pointer_analysis - - -using namespace pointer_analysis; - -static bool use_field_sensitive = true; -static int in_ipa_mode = 0; - -static unsigned int create_variable_info_for (tree, const char *, bool); -static varinfo_t lookup_vi_for_tree (tree); -static inline bool type_can_have_subvars (const_tree); -static void make_param_constraints (varinfo_t); - -/* Pool of variable info structures. */ -static object_allocator variable_info_pool - ("Variable info pool"); - -/* Map varinfo to final pt_solution. */ -static hash_map *final_solutions; -static struct obstack final_solutions_obstack; - -/* Return a new variable info structure consisting for a variable - named NAME, and using constraint graph node NODE. Append it - to the vector of variable info structures. */ - -static varinfo_t -new_var_info (tree t, const char *name, bool add_id) -{ - unsigned index = varmap.length (); - varinfo_t ret = variable_info_pool.allocate (); - - if (dump_file && add_id) - { - char *tempname = xasprintf ("%s(%d)", name, index); - name = ggc_strdup (tempname); - free (tempname); - } - - ret->id = index; - ret->name = name; - ret->decl = t; - /* Vars without decl are artificial and do not have sub-variables. */ - ret->is_artificial_var = (t == NULL_TREE); - ret->is_special_var = false; - ret->is_unknown_size_var = false; - ret->is_full_var = (t == NULL_TREE); - ret->is_heap_var = false; - ret->may_have_pointers = true; - ret->only_restrict_pointers = false; - ret->is_restrict_var = false; - ret->ruid = 0; - ret->is_global_var = (t == NULL_TREE); - ret->is_ipa_escape_point = false; - ret->is_fn_info = false; - ret->address_taken = false; - if (t && DECL_P (t)) - ret->is_global_var = (is_global_var (t) - /* We have to treat even local register variables - as escape points. */ - || (VAR_P (t) && DECL_HARD_REGISTER (t))); - ret->is_reg_var = (t && TREE_CODE (t) == SSA_NAME); - ret->solution = BITMAP_ALLOC (&pta_obstack); - ret->oldsolution = NULL; - ret->next = 0; - ret->shadow_var_uid = 0; - ret->head = ret->id; - - stats.total_vars++; - - varmap.safe_push (ret); - - return ret; -} - -/* A map mapping call statements to per-stmt variables for uses - and clobbers specific to the call. */ -static hash_map *call_stmt_vars; - -/* Lookup or create the variable for the call statement CALL. */ - -static varinfo_t -get_call_vi (gcall *call) -{ - varinfo_t vi, vi2; - - bool existed; - varinfo_t *slot_p = &call_stmt_vars->get_or_insert (call, &existed); - if (existed) - return *slot_p; - - vi = new_var_info (NULL_TREE, "CALLUSED", true); - vi->offset = 0; - vi->size = 1; - vi->fullsize = 2; - vi->is_full_var = true; - vi->is_reg_var = true; - - vi2 = new_var_info (NULL_TREE, "CALLCLOBBERED", true); - vi2->offset = 1; - vi2->size = 1; - vi2->fullsize = 2; - vi2->is_full_var = true; - vi2->is_reg_var = true; - - vi->next = vi2->id; - - *slot_p = vi; - return vi; -} - -/* Lookup the variable for the call statement CALL representing - the uses. Returns NULL if there is nothing special about this call. */ - -static varinfo_t -lookup_call_use_vi (gcall *call) -{ - varinfo_t *slot_p = call_stmt_vars->get (call); - if (slot_p) - return *slot_p; - - return NULL; -} - -/* Lookup the variable for the call statement CALL representing - the clobbers. Returns NULL if there is nothing special about this call. */ - -static varinfo_t -lookup_call_clobber_vi (gcall *call) -{ - varinfo_t uses = lookup_call_use_vi (call); - if (!uses) - return NULL; - - return vi_next (uses); -} - -/* Lookup or create the variable for the call statement CALL representing - the uses. */ - -static varinfo_t -get_call_use_vi (gcall *call) -{ - return get_call_vi (call); -} - -/* Lookup or create the variable for the call statement CALL representing - the clobbers. */ - -static varinfo_t ATTRIBUTE_UNUSED -get_call_clobber_vi (gcall *call) -{ - return vi_next (get_call_vi (call)); -} - - -static void get_constraint_for_1 (tree, vec *, bool, bool); -static void get_constraint_for (tree, vec *); -static void get_constraint_for_rhs (tree, vec *); -static void do_deref (vec *); - -/* Allocator for 'constraints' vector. */ - -static object_allocator constraint_pool ("Constraint pool"); - -/* Create a new constraint consisting of LHS and RHS expressions. */ - -static constraint_t -new_constraint (const struct constraint_expr lhs, - const struct constraint_expr rhs) -{ - constraint_t ret = constraint_pool.allocate (); - ret->lhs = lhs; - ret->rhs = rhs; - return ret; -} - -/* Insert ID as the variable id for tree T in the vi_for_tree map. */ - -static void -insert_vi_for_tree (tree t, varinfo_t vi) -{ - gcc_assert (vi); - bool existed = vi_for_tree->put (t, vi); - gcc_assert (!existed); -} - -/* Find the variable info for tree T in VI_FOR_TREE. If T does not - exist in the map, return NULL, otherwise, return the varinfo we found. */ - -static varinfo_t -lookup_vi_for_tree (tree t) -{ - varinfo_t *slot = vi_for_tree->get (t); - if (slot == NULL) - return NULL; - - return *slot; -} - -/* Return a printable name for DECL. */ - -static const char * -alias_get_name (tree decl) -{ - const char *res = "NULL"; - if (dump_file) - { - char *temp = NULL; - if (TREE_CODE (decl) == SSA_NAME) - { - res = get_name (decl); - temp = xasprintf ("%s_%u", res ? res : "", SSA_NAME_VERSION (decl)); - } - else if (HAS_DECL_ASSEMBLER_NAME_P (decl) - && DECL_ASSEMBLER_NAME_SET_P (decl)) - res = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME_RAW (decl)); - else if (DECL_P (decl)) - { - res = get_name (decl); - if (!res) - temp = xasprintf ("D.%u", DECL_UID (decl)); - } - - if (temp) - { - res = ggc_strdup (temp); - free (temp); - } - } - - return res; -} - -/* Find the variable id for tree T in the map. - If T doesn't exist in the map, create an entry for it and return it. */ - -static varinfo_t -get_vi_for_tree (tree t) -{ - varinfo_t *slot = vi_for_tree->get (t); - if (slot == NULL) - { - unsigned int id = create_variable_info_for (t, alias_get_name (t), false); - return get_varinfo (id); - } - - return *slot; -} - -/* Get a scalar constraint expression for a new temporary variable. */ - -static struct constraint_expr -new_scalar_tmp_constraint_exp (const char *name, bool add_id) -{ - struct constraint_expr tmp; - varinfo_t vi; - - vi = new_var_info (NULL_TREE, name, add_id); - vi->offset = 0; - vi->size = -1; - vi->fullsize = -1; - vi->is_full_var = 1; - vi->is_reg_var = 1; - - tmp.var = vi->id; - tmp.type = SCALAR; - tmp.offset = 0; - - return tmp; -} - -/* Get a constraint expression vector from an SSA_VAR_P node. - If address_p is true, the result will be taken its address of. */ - -static void -get_constraint_for_ssa_var (tree t, vec *results, bool address_p) -{ - struct constraint_expr cexpr; - varinfo_t vi; - - /* We allow FUNCTION_DECLs here even though it doesn't make much sense. */ - gcc_assert (TREE_CODE (t) == SSA_NAME || DECL_P (t)); - - if (TREE_CODE (t) == SSA_NAME - && SSA_NAME_IS_DEFAULT_DEF (t)) - { - /* For parameters, get at the points-to set for the actual parm - decl. */ - if (TREE_CODE (SSA_NAME_VAR (t)) == PARM_DECL - || TREE_CODE (SSA_NAME_VAR (t)) == RESULT_DECL) - { - get_constraint_for_ssa_var (SSA_NAME_VAR (t), results, address_p); - return; - } - /* For undefined SSA names return nothing. */ - else if (!ssa_defined_default_def_p (t)) - { - cexpr.var = nothing_id; - cexpr.type = SCALAR; - cexpr.offset = 0; - results->safe_push (cexpr); - return; - } - } - - /* For global variables resort to the alias target. */ - if (VAR_P (t) && (TREE_STATIC (t) || DECL_EXTERNAL (t))) - { - varpool_node *node = varpool_node::get (t); - if (node && node->alias && node->analyzed) - { - node = node->ultimate_alias_target (); - /* Canonicalize the PT uid of all aliases to the ultimate target. - ??? Hopefully the set of aliases can't change in a way that - changes the ultimate alias target. */ - gcc_assert ((! DECL_PT_UID_SET_P (node->decl) - || DECL_PT_UID (node->decl) == DECL_UID (node->decl)) - && (! DECL_PT_UID_SET_P (t) - || DECL_PT_UID (t) == DECL_UID (node->decl))); - DECL_PT_UID (t) = DECL_UID (node->decl); - t = node->decl; - } - - /* If this is decl may bind to NULL note that. */ - if (address_p - && (! node || ! node->nonzero_address ())) - { - cexpr.var = nothing_id; - cexpr.type = SCALAR; - cexpr.offset = 0; - results->safe_push (cexpr); - } - } - - vi = get_vi_for_tree (t); - cexpr.var = vi->id; - cexpr.type = SCALAR; - cexpr.offset = 0; - - /* If we are not taking the address of the constraint expr, add all - sub-fiels of the variable as well. */ - if (!address_p - && !vi->is_full_var) - { - for (; vi; vi = vi_next (vi)) - { - cexpr.var = vi->id; - results->safe_push (cexpr); - } - return; - } - - results->safe_push (cexpr); -} - -/* Process constraint T, performing various simplifications and then - adding it to our list of overall constraints. */ - -static void -process_constraint (constraint_t t) -{ - struct constraint_expr rhs = t->rhs; - struct constraint_expr lhs = t->lhs; - - gcc_assert (rhs.var < varmap.length ()); - gcc_assert (lhs.var < varmap.length ()); - - /* If we didn't get any useful constraint from the lhs we get - &ANYTHING as fallback from get_constraint_for. Deal with - it here by turning it into *ANYTHING. */ - if (lhs.type == ADDRESSOF - && lhs.var == anything_id) - t->lhs.type = lhs.type = DEREF; - - /* ADDRESSOF on the lhs is invalid. */ - gcc_assert (lhs.type != ADDRESSOF); - - /* We shouldn't add constraints from things that cannot have pointers. - It's not completely trivial to avoid in the callers, so do it here. */ - if (rhs.type != ADDRESSOF - && !get_varinfo (rhs.var)->may_have_pointers) - return; - - /* Likewise adding to the solution of a non-pointer var isn't useful. */ - if (!get_varinfo (lhs.var)->may_have_pointers) - return; - - /* This can happen in our IR with things like n->a = *p. */ - if (rhs.type == DEREF && lhs.type == DEREF && rhs.var != anything_id) - { - /* Split into tmp = *rhs, *lhs = tmp. */ - struct constraint_expr tmplhs; - tmplhs = new_scalar_tmp_constraint_exp ("doubledereftmp", true); - process_constraint (new_constraint (tmplhs, rhs)); - process_constraint (new_constraint (lhs, tmplhs)); - } - else if ((rhs.type != SCALAR || rhs.offset != 0) && lhs.type == DEREF) - { - /* Split into tmp = &rhs, *lhs = tmp. */ - struct constraint_expr tmplhs; - tmplhs = new_scalar_tmp_constraint_exp ("derefaddrtmp", true); - process_constraint (new_constraint (tmplhs, rhs)); - process_constraint (new_constraint (lhs, tmplhs)); - } - else - { - gcc_assert (rhs.type != ADDRESSOF || rhs.offset == 0); - if (rhs.type == ADDRESSOF) - get_varinfo (get_varinfo (rhs.var)->head)->address_taken = true; - constraints.safe_push (t); - } -} - - -/* Return the position, in bits, of FIELD_DECL from the beginning of its - structure. */ - -static unsigned HOST_WIDE_INT -bitpos_of_field (const tree fdecl) -{ - if (!tree_fits_uhwi_p (DECL_FIELD_OFFSET (fdecl)) - || !tree_fits_uhwi_p (DECL_FIELD_BIT_OFFSET (fdecl))) - return -1; - - return (tree_to_uhwi (DECL_FIELD_OFFSET (fdecl)) * BITS_PER_UNIT - + tree_to_uhwi (DECL_FIELD_BIT_OFFSET (fdecl))); -} - - -/* Get constraint expressions for offsetting PTR by OFFSET. Stores the - resulting constraint expressions in *RESULTS. */ - -static void -get_constraint_for_ptr_offset (tree ptr, tree offset, - vec *results) -{ - struct constraint_expr c; - unsigned int j, n; - HOST_WIDE_INT rhsoffset; - - /* If we do not do field-sensitive PTA adding offsets to pointers - does not change the points-to solution. */ - if (!use_field_sensitive) - { - get_constraint_for_rhs (ptr, results); - return; - } - - /* If the offset is not a non-negative integer constant that fits - in a HOST_WIDE_INT, we have to fall back to a conservative - solution which includes all sub-fields of all pointed-to - variables of ptr. */ - if (offset == NULL_TREE - || TREE_CODE (offset) != INTEGER_CST) - rhsoffset = UNKNOWN_OFFSET; - else - { - /* Sign-extend the offset. */ - offset_int soffset = offset_int::from (wi::to_wide (offset), SIGNED); - if (!wi::fits_shwi_p (soffset)) - rhsoffset = UNKNOWN_OFFSET; - else - { - /* Make sure the bit-offset also fits. */ - HOST_WIDE_INT rhsunitoffset = soffset.to_shwi (); - rhsoffset = rhsunitoffset * (unsigned HOST_WIDE_INT) BITS_PER_UNIT; - if (rhsunitoffset != rhsoffset / BITS_PER_UNIT) - rhsoffset = UNKNOWN_OFFSET; - } - } - - get_constraint_for_rhs (ptr, results); - if (rhsoffset == 0) - return; - - /* As we are eventually appending to the solution do not use - vec::iterate here. */ - n = results->length (); - for (j = 0; j < n; j++) - { - varinfo_t curr; - c = (*results)[j]; - curr = get_varinfo (c.var); - - if (c.type == ADDRESSOF - /* If this varinfo represents a full variable just use it. */ - && curr->is_full_var) - ; - else if (c.type == ADDRESSOF - /* If we do not know the offset add all subfields. */ - && rhsoffset == UNKNOWN_OFFSET) - { - varinfo_t temp = get_varinfo (curr->head); - do - { - struct constraint_expr c2; - c2.var = temp->id; - c2.type = ADDRESSOF; - c2.offset = 0; - if (c2.var != c.var) - results->safe_push (c2); - temp = vi_next (temp); - } - while (temp); - } - else if (c.type == ADDRESSOF) - { - varinfo_t temp; - unsigned HOST_WIDE_INT offset = curr->offset + rhsoffset; - - /* If curr->offset + rhsoffset is less than zero adjust it. */ - if (rhsoffset < 0 - && curr->offset < offset) - offset = 0; - - /* We have to include all fields that overlap the current - field shifted by rhsoffset. And we include at least - the last or the first field of the variable to represent - reachability of off-bound addresses, in particular &object + 1, - conservatively correct. */ - temp = first_or_preceding_vi_for_offset (curr, offset); - c.var = temp->id; - c.offset = 0; - temp = vi_next (temp); - while (temp - && temp->offset < offset + curr->size) - { - struct constraint_expr c2; - c2.var = temp->id; - c2.type = ADDRESSOF; - c2.offset = 0; - results->safe_push (c2); - temp = vi_next (temp); - } - } - else if (c.type == SCALAR) - { - gcc_assert (c.offset == 0); - c.offset = rhsoffset; - } - else - /* We shouldn't get any DEREFs here. */ - gcc_unreachable (); - - (*results)[j] = c; - } -} - - -/* Given a COMPONENT_REF T, return the constraint_expr vector for it. - If address_p is true the result will be taken its address of. - If lhs_p is true then the constraint expression is assumed to be used - as the lhs. */ - -static void -get_constraint_for_component_ref (tree t, vec *results, - bool address_p, bool lhs_p) -{ - tree orig_t = t; - poly_int64 bitsize = -1; - poly_int64 bitmaxsize = -1; - poly_int64 bitpos; - bool reverse; - tree forzero; - - /* Some people like to do cute things like take the address of - &0->a.b. */ - forzero = t; - while (handled_component_p (forzero) - || INDIRECT_REF_P (forzero) - || TREE_CODE (forzero) == MEM_REF) - forzero = TREE_OPERAND (forzero, 0); - - if (CONSTANT_CLASS_P (forzero) && integer_zerop (forzero)) - { - struct constraint_expr temp; - - temp.offset = 0; - temp.var = integer_id; - temp.type = SCALAR; - results->safe_push (temp); - return; - } - - t = get_ref_base_and_extent (t, &bitpos, &bitsize, &bitmaxsize, &reverse); - - /* We can end up here for component references on a - VIEW_CONVERT_EXPR <>(&foobar) or things like a - BIT_FIELD_REF <&MEM[(void *)&b + 4B], ...>. So for - symbolic constants simply give up. */ - if (TREE_CODE (t) == ADDR_EXPR) - { - constraint_expr result; - result.type = SCALAR; - result.var = anything_id; - result.offset = 0; - results->safe_push (result); - return; - } - - /* Avoid creating pointer-offset constraints, so handle MEM_REF - offsets directly. Pretend to take the address of the base, - we'll take care of adding the required subset of sub-fields below. */ - if (TREE_CODE (t) == MEM_REF - && !integer_zerop (TREE_OPERAND (t, 0))) - { - poly_offset_int off = mem_ref_offset (t); - off <<= LOG2_BITS_PER_UNIT; - off += bitpos; - poly_int64 off_hwi; - if (off.to_shwi (&off_hwi)) - bitpos = off_hwi; - else - { - bitpos = 0; - bitmaxsize = -1; - } - get_constraint_for_1 (TREE_OPERAND (t, 0), results, false, lhs_p); - do_deref (results); - } - else - get_constraint_for_1 (t, results, true, lhs_p); - - /* Strip off nothing_id. */ - if (results->length () == 2) - { - gcc_assert ((*results)[0].var == nothing_id); - results->unordered_remove (0); - } - gcc_assert (results->length () == 1); - struct constraint_expr &result = results->last (); - - if (result.type == SCALAR - && get_varinfo (result.var)->is_full_var) - /* For single-field vars do not bother about the offset. */ - result.offset = 0; - else if (result.type == SCALAR) - { - /* In languages like C, you can access one past the end of an - array. You aren't allowed to dereference it, so we can - ignore this constraint. When we handle pointer subtraction, - we may have to do something cute here. */ - - if (maybe_lt (poly_uint64 (bitpos), get_varinfo (result.var)->fullsize) - && maybe_ne (bitmaxsize, 0)) - { - /* It's also not true that the constraint will actually start at the - right offset, it may start in some padding. We only care about - setting the constraint to the first actual field it touches, so - walk to find it. */ - struct constraint_expr cexpr = result; - varinfo_t curr; - results->pop (); - cexpr.offset = 0; - for (curr = get_varinfo (cexpr.var); curr; curr = vi_next (curr)) - { - if (ranges_maybe_overlap_p (poly_int64 (curr->offset), - curr->size, bitpos, bitmaxsize)) - { - cexpr.var = curr->id; - results->safe_push (cexpr); - if (address_p) - break; - } - } - /* If we are going to take the address of this field then - to be able to compute reachability correctly add at least - the last field of the variable. */ - if (address_p && results->length () == 0) - { - curr = get_varinfo (cexpr.var); - while (curr->next != 0) - curr = vi_next (curr); - cexpr.var = curr->id; - results->safe_push (cexpr); - } - else if (results->length () == 0) - /* Assert that we found *some* field there. The user couldn't be - accessing *only* padding. */ - /* Still the user could access one past the end of an array - embedded in a struct resulting in accessing *only* padding. */ - /* Or accessing only padding via type-punning to a type - that has a filed just in padding space. */ - { - cexpr.type = SCALAR; - cexpr.var = anything_id; - cexpr.offset = 0; - results->safe_push (cexpr); - } - } - else if (known_eq (bitmaxsize, 0)) - { - if (dump_file && (dump_flags & TDF_DETAILS)) - fprintf (dump_file, "Access to zero-sized part of variable, " - "ignoring\n"); - } - else - if (dump_file && (dump_flags & TDF_DETAILS)) - fprintf (dump_file, "Access to past the end of variable, ignoring\n"); - } - else if (result.type == DEREF) - { - /* If we do not know exactly where the access goes say so. Note - that only for non-structure accesses we know that we access - at most one subfiled of any variable. */ - HOST_WIDE_INT const_bitpos; - if (!bitpos.is_constant (&const_bitpos) - || const_bitpos == -1 - || maybe_ne (bitsize, bitmaxsize) - || AGGREGATE_TYPE_P (TREE_TYPE (orig_t)) - || result.offset == UNKNOWN_OFFSET) - result.offset = UNKNOWN_OFFSET; - else - result.offset += const_bitpos; - } - else if (result.type == ADDRESSOF) - { - /* We can end up here for component references on constants like - VIEW_CONVERT_EXPR <>({ 0, 1, 2, 3 })[i]. */ - result.type = SCALAR; - result.var = anything_id; - result.offset = 0; - } - else - gcc_unreachable (); -} - - -/* Dereference the constraint expression CONS, and return the result. - DEREF (ADDRESSOF) = SCALAR - DEREF (SCALAR) = DEREF - DEREF (DEREF) = (temp = DEREF1; result = DEREF (temp)) - This is needed so that we can handle dereferencing DEREF constraints. */ - -static void -do_deref (vec *constraints) -{ - struct constraint_expr *c; - unsigned int i = 0; - - FOR_EACH_VEC_ELT (*constraints, i, c) - { - if (c->type == SCALAR) - c->type = DEREF; - else if (c->type == ADDRESSOF) - c->type = SCALAR; - else if (c->type == DEREF) - { - struct constraint_expr tmplhs; - tmplhs = new_scalar_tmp_constraint_exp ("dereftmp", true); - process_constraint (new_constraint (tmplhs, *c)); - c->var = tmplhs.var; - } - else - gcc_unreachable (); - } -} - -/* Given a tree T, return the constraint expression for taking the - address of it. */ - -static void -get_constraint_for_address_of (tree t, vec *results) -{ - struct constraint_expr *c; - unsigned int i; - - get_constraint_for_1 (t, results, true, true); - - FOR_EACH_VEC_ELT (*results, i, c) - { - if (c->type == DEREF) - c->type = SCALAR; - else - c->type = ADDRESSOF; - } -} - -/* Given a tree T, return the constraint expression for it. */ - -static void -get_constraint_for_1 (tree t, vec *results, bool address_p, - bool lhs_p) -{ - struct constraint_expr temp; - - /* x = integer is all glommed to a single variable, which doesn't - point to anything by itself. That is, of course, unless it is an - integer constant being treated as a pointer, in which case, we - will return that this is really the addressof anything. This - happens below, since it will fall into the default case. The only - case we know something about an integer treated like a pointer is - when it is the NULL pointer, and then we just say it points to - NULL. - - Do not do that if -fno-delete-null-pointer-checks though, because - in that case *NULL does not fail, so it _should_ alias *anything. - It is not worth adding a new option or renaming the existing one, - since this case is relatively obscure. */ - if ((TREE_CODE (t) == INTEGER_CST - && integer_zerop (t)) - /* The only valid CONSTRUCTORs in gimple with pointer typed - elements are zero-initializer. But in IPA mode we also - process global initializers, so verify at least. */ - || (TREE_CODE (t) == CONSTRUCTOR - && CONSTRUCTOR_NELTS (t) == 0)) - { - if (flag_delete_null_pointer_checks) - temp.var = nothing_id; - else - temp.var = nonlocal_id; - temp.type = ADDRESSOF; - temp.offset = 0; - results->safe_push (temp); - return; - } - - /* String constants are read-only, ideally we'd have a CONST_DECL - for those. */ - if (TREE_CODE (t) == STRING_CST) - { - temp.var = string_id; - temp.type = SCALAR; - temp.offset = 0; - results->safe_push (temp); - return; - } - - switch (TREE_CODE_CLASS (TREE_CODE (t))) - { - case tcc_expression: - { - switch (TREE_CODE (t)) - { - case ADDR_EXPR: - get_constraint_for_address_of (TREE_OPERAND (t, 0), results); - return; - default:; - } - break; - } - case tcc_reference: - { - if (!lhs_p && TREE_THIS_VOLATILE (t)) - /* Fall back to anything. */ - break; - - switch (TREE_CODE (t)) - { - case MEM_REF: - { - struct constraint_expr cs; - varinfo_t vi, curr; - get_constraint_for_ptr_offset (TREE_OPERAND (t, 0), - TREE_OPERAND (t, 1), results); - do_deref (results); - - /* If we are not taking the address then make sure to process - all subvariables we might access. */ - if (address_p) - return; - - cs = results->last (); - if (cs.type == DEREF - && type_can_have_subvars (TREE_TYPE (t))) - { - /* For dereferences this means we have to defer it - to solving time. */ - results->last ().offset = UNKNOWN_OFFSET; - return; - } - if (cs.type != SCALAR) - return; - - vi = get_varinfo (cs.var); - curr = vi_next (vi); - if (!vi->is_full_var - && curr) - { - unsigned HOST_WIDE_INT size; - if (tree_fits_uhwi_p (TYPE_SIZE (TREE_TYPE (t)))) - size = tree_to_uhwi (TYPE_SIZE (TREE_TYPE (t))); - else - size = -1; - for (; curr; curr = vi_next (curr)) - { - /* The start of the access might happen anywhere - within vi, so conservatively assume it was - at its end. */ - if (curr->offset - (vi->offset + vi->size - 1) < size) - { - cs.var = curr->id; - results->safe_push (cs); - } - else - break; - } - } - return; - } - case ARRAY_REF: - case ARRAY_RANGE_REF: - case COMPONENT_REF: - case IMAGPART_EXPR: - case REALPART_EXPR: - case BIT_FIELD_REF: - get_constraint_for_component_ref (t, results, address_p, lhs_p); - return; - case VIEW_CONVERT_EXPR: - get_constraint_for_1 (TREE_OPERAND (t, 0), results, address_p, - lhs_p); - return; - /* We are missing handling for TARGET_MEM_REF here. */ - default:; - } - break; - } - case tcc_exceptional: - { - switch (TREE_CODE (t)) - { - case SSA_NAME: - { - get_constraint_for_ssa_var (t, results, address_p); - return; - } - case CONSTRUCTOR: - { - unsigned int i; - tree val; - auto_vec tmp; - FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (t), i, val) - { - struct constraint_expr *rhsp; - unsigned j; - get_constraint_for_1 (val, &tmp, address_p, lhs_p); - FOR_EACH_VEC_ELT (tmp, j, rhsp) - results->safe_push (*rhsp); - tmp.truncate (0); - } - /* We do not know whether the constructor was complete, - so technically we have to add &NOTHING or &ANYTHING - like we do for an empty constructor as well. */ - return; - } - default:; - } - break; - } - case tcc_declaration: - { - if (!lhs_p && VAR_P (t) && TREE_THIS_VOLATILE (t)) - /* Fall back to anything. */ - break; - get_constraint_for_ssa_var (t, results, address_p); - return; - } - case tcc_constant: - { - /* We cannot refer to automatic variables through constants. */ - temp.type = ADDRESSOF; - temp.var = nonlocal_id; - temp.offset = 0; - results->safe_push (temp); - return; - } - default:; - } - - /* The default fallback is a constraint from anything. */ - temp.type = ADDRESSOF; - temp.var = anything_id; - temp.offset = 0; - results->safe_push (temp); -} - -/* Given a gimple tree T, return the constraint expression vector for it. */ - -static void -get_constraint_for (tree t, vec *results) -{ - gcc_assert (results->length () == 0); - - get_constraint_for_1 (t, results, false, true); -} - -/* Given a gimple tree T, return the constraint expression vector for it - to be used as the rhs of a constraint. */ - -static void -get_constraint_for_rhs (tree t, vec *results) -{ - gcc_assert (results->length () == 0); - - get_constraint_for_1 (t, results, false, false); -} - - -/* Efficiently generates constraints from all entries in *RHSC to all - entries in *LHSC. */ - -static void -process_all_all_constraints (const vec &lhsc, - const vec &rhsc) -{ - struct constraint_expr *lhsp, *rhsp; - unsigned i, j; - - if (lhsc.length () <= 1 || rhsc.length () <= 1) - { - FOR_EACH_VEC_ELT (lhsc, i, lhsp) - FOR_EACH_VEC_ELT (rhsc, j, rhsp) - process_constraint (new_constraint (*lhsp, *rhsp)); - } - else - { - struct constraint_expr tmp; - tmp = new_scalar_tmp_constraint_exp ("allalltmp", true); - FOR_EACH_VEC_ELT (rhsc, i, rhsp) - process_constraint (new_constraint (tmp, *rhsp)); - FOR_EACH_VEC_ELT (lhsc, i, lhsp) - process_constraint (new_constraint (*lhsp, tmp)); - } -} - -/* Handle aggregate copies by expanding into copies of the respective - fields of the structures. */ - -static void -do_structure_copy (tree lhsop, tree rhsop) -{ - struct constraint_expr *lhsp, *rhsp; - auto_vec lhsc; - auto_vec rhsc; - unsigned j; - - get_constraint_for (lhsop, &lhsc); - get_constraint_for_rhs (rhsop, &rhsc); - lhsp = &lhsc[0]; - rhsp = &rhsc[0]; - if (lhsp->type == DEREF - || (lhsp->type == ADDRESSOF && lhsp->var == anything_id) - || rhsp->type == DEREF) - { - if (lhsp->type == DEREF) - { - gcc_assert (lhsc.length () == 1); - lhsp->offset = UNKNOWN_OFFSET; - } - if (rhsp->type == DEREF) - { - gcc_assert (rhsc.length () == 1); - rhsp->offset = UNKNOWN_OFFSET; - } - process_all_all_constraints (lhsc, rhsc); - } - else if (lhsp->type == SCALAR - && (rhsp->type == SCALAR - || rhsp->type == ADDRESSOF)) - { - HOST_WIDE_INT lhssize, lhsoffset; - HOST_WIDE_INT rhssize, rhsoffset; - bool reverse; - unsigned k = 0; - if (!get_ref_base_and_extent_hwi (lhsop, &lhsoffset, &lhssize, &reverse) - || !get_ref_base_and_extent_hwi (rhsop, &rhsoffset, &rhssize, - &reverse)) - { - process_all_all_constraints (lhsc, rhsc); - return; - } - for (j = 0; lhsc.iterate (j, &lhsp);) - { - varinfo_t lhsv, rhsv; - rhsp = &rhsc[k]; - lhsv = get_varinfo (lhsp->var); - rhsv = get_varinfo (rhsp->var); - if (lhsv->may_have_pointers - && (lhsv->is_full_var - || rhsv->is_full_var - || ranges_overlap_p (lhsv->offset + rhsoffset, lhsv->size, - rhsv->offset + lhsoffset, rhsv->size))) - process_constraint (new_constraint (*lhsp, *rhsp)); - if (!rhsv->is_full_var - && (lhsv->is_full_var - || (lhsv->offset + rhsoffset + lhsv->size - > rhsv->offset + lhsoffset + rhsv->size))) - { - ++k; - if (k >= rhsc.length ()) - break; - } - else - ++j; - } - } - else - gcc_unreachable (); -} - -/* Create constraints ID = { rhsc }. */ - -static void -make_constraints_to (unsigned id, const vec &rhsc) -{ - struct constraint_expr *c; - struct constraint_expr includes; - unsigned int j; - - includes.var = id; - includes.offset = 0; - includes.type = SCALAR; - - FOR_EACH_VEC_ELT (rhsc, j, c) - process_constraint (new_constraint (includes, *c)); -} - -/* Create a constraint ID = OP. */ - -static void -make_constraint_to (unsigned id, tree op) -{ - auto_vec rhsc; - get_constraint_for_rhs (op, &rhsc); - make_constraints_to (id, rhsc); -} - -/* Create a constraint ID = &FROM. */ - -static void -make_constraint_from (varinfo_t vi, int from) -{ - struct constraint_expr lhs, rhs; - - lhs.var = vi->id; - lhs.offset = 0; - lhs.type = SCALAR; - - rhs.var = from; - rhs.offset = 0; - rhs.type = ADDRESSOF; - process_constraint (new_constraint (lhs, rhs)); -} - -/* Create a constraint ID = FROM. */ - -static void -make_copy_constraint (varinfo_t vi, int from) -{ - struct constraint_expr lhs, rhs; - - lhs.var = vi->id; - lhs.offset = 0; - lhs.type = SCALAR; - - rhs.var = from; - rhs.offset = 0; - rhs.type = SCALAR; - process_constraint (new_constraint (lhs, rhs)); -} - -/* Make constraints necessary to make OP escape. */ - -static void -make_escape_constraint (tree op) -{ - make_constraint_to (escaped_id, op); -} - -/* Make constraint necessary to make all indirect references - from VI escape. */ - -static void -make_indirect_escape_constraint (varinfo_t vi) -{ - struct constraint_expr lhs, rhs; - /* escaped = *(VAR + UNKNOWN); */ - lhs.type = SCALAR; - lhs.var = escaped_id; - lhs.offset = 0; - rhs.type = DEREF; - rhs.var = vi->id; - rhs.offset = UNKNOWN_OFFSET; - process_constraint (new_constraint (lhs, rhs)); -} - -/* Add constraints to that the solution of VI is transitively closed. */ - -static void -make_transitive_closure_constraints (varinfo_t vi) -{ - struct constraint_expr lhs, rhs; - - /* VAR = *(VAR + UNKNOWN); */ - lhs.type = SCALAR; - lhs.var = vi->id; - lhs.offset = 0; - rhs.type = DEREF; - rhs.var = vi->id; - rhs.offset = UNKNOWN_OFFSET; - process_constraint (new_constraint (lhs, rhs)); -} - -/* Add constraints to that the solution of VI has all subvariables added. */ - -static void -make_any_offset_constraints (varinfo_t vi) -{ - struct constraint_expr lhs, rhs; - - /* VAR = VAR + UNKNOWN; */ - lhs.type = SCALAR; - lhs.var = vi->id; - lhs.offset = 0; - rhs.type = SCALAR; - rhs.var = vi->id; - rhs.offset = UNKNOWN_OFFSET; - process_constraint (new_constraint (lhs, rhs)); -} - -/* Temporary storage for fake var decls. */ -struct obstack fake_var_decl_obstack; - -/* Build a fake VAR_DECL acting as referrer to a DECL_UID. */ - -static tree -build_fake_var_decl (tree type) -{ - tree decl = (tree) XOBNEW (&fake_var_decl_obstack, struct tree_var_decl); - memset (decl, 0, sizeof (struct tree_var_decl)); - TREE_SET_CODE (decl, VAR_DECL); - TREE_TYPE (decl) = type; - DECL_UID (decl) = allocate_decl_uid (); - SET_DECL_PT_UID (decl, -1); - layout_decl (decl, 0); - return decl; -} - -/* Create a new artificial heap variable with NAME. - Return the created variable. */ - -static varinfo_t -make_heapvar (const char *name, bool add_id) -{ - varinfo_t vi; - tree heapvar; - - heapvar = build_fake_var_decl (ptr_type_node); - DECL_EXTERNAL (heapvar) = 1; - - vi = new_var_info (heapvar, name, add_id); - vi->is_heap_var = true; - vi->is_unknown_size_var = true; - vi->offset = 0; - vi->fullsize = ~0; - vi->size = ~0; - vi->is_full_var = true; - insert_vi_for_tree (heapvar, vi); - - return vi; -} - -/* Create a new artificial heap variable with NAME and make a - constraint from it to LHS. Set flags according to a tag used - for tracking restrict pointers. */ - -static varinfo_t -make_constraint_from_restrict (varinfo_t lhs, const char *name, bool add_id) -{ - varinfo_t vi = make_heapvar (name, add_id); - vi->is_restrict_var = 1; - vi->is_global_var = 1; - vi->may_have_pointers = 1; - make_constraint_from (lhs, vi->id); - return vi; -} - -/* Create a new artificial heap variable with NAME and make a - constraint from it to LHS. Set flags according to a tag used - for tracking restrict pointers and make the artificial heap - point to global memory. */ - -static varinfo_t -make_constraint_from_global_restrict (varinfo_t lhs, const char *name, - bool add_id) -{ - varinfo_t vi = make_constraint_from_restrict (lhs, name, add_id); - make_copy_constraint (vi, nonlocal_id); - return vi; -} - -/* In IPA mode there are varinfos for different aspects of reach - function designator. One for the points-to set of the return - value, one for the variables that are clobbered by the function, - one for its uses and one for each parameter (including a single - glob for remaining variadic arguments). */ - -enum { fi_clobbers = 1, fi_uses = 2, - fi_static_chain = 3, fi_result = 4, fi_parm_base = 5 }; - -/* Get a constraint for the requested part of a function designator FI - when operating in IPA mode. */ - -static struct constraint_expr -get_function_part_constraint (varinfo_t fi, unsigned part) -{ - struct constraint_expr c; - - gcc_assert (in_ipa_mode); - - if (fi->id == anything_id) - { - /* ??? We probably should have a ANYFN special variable. */ - c.var = anything_id; - c.offset = 0; - c.type = SCALAR; - } - else if (fi->decl && TREE_CODE (fi->decl) == FUNCTION_DECL) - { - varinfo_t ai = first_vi_for_offset (fi, part); - if (ai) - c.var = ai->id; - else - c.var = anything_id; - c.offset = 0; - c.type = SCALAR; - } - else - { - c.var = fi->id; - c.offset = part; - c.type = DEREF; - } - - return c; -} - -/* Produce constraints for argument ARG of call STMT with eaf flags - FLAGS. RESULTS is array holding constraints for return value. - CALLESCAPE_ID is variable where call loocal escapes are added. - WRITES_GLOVEL_MEMORY is true if callee may write global memory. */ - -static void -handle_call_arg (gcall *stmt, tree arg, vec *results, int flags, - int callescape_id, bool writes_global_memory) -{ - int relevant_indirect_flags = EAF_NO_INDIRECT_CLOBBER | EAF_NO_INDIRECT_READ - | EAF_NO_INDIRECT_ESCAPE; - int relevant_flags = relevant_indirect_flags - | EAF_NO_DIRECT_CLOBBER - | EAF_NO_DIRECT_READ - | EAF_NO_DIRECT_ESCAPE; - if (gimple_call_lhs (stmt)) - { - relevant_flags |= EAF_NOT_RETURNED_DIRECTLY | EAF_NOT_RETURNED_INDIRECTLY; - relevant_indirect_flags |= EAF_NOT_RETURNED_INDIRECTLY; - - /* If value is never read from it can not be returned indirectly - (except through the escape solution). - For all flags we get these implications right except for - not_returned because we miss return functions in ipa-prop. */ - - if (flags & EAF_NO_DIRECT_READ) - flags |= EAF_NOT_RETURNED_INDIRECTLY; - } - - /* If the argument is not used we can ignore it. - Similarly argument is invisile for us if it not clobbered, does not - escape, is not read and can not be returned. */ - if ((flags & EAF_UNUSED) || ((flags & relevant_flags) == relevant_flags)) - return; - - /* Produce varinfo for direct accesses to ARG. */ - varinfo_t tem = new_var_info (NULL_TREE, "callarg", true); - tem->is_reg_var = true; - make_constraint_to (tem->id, arg); - make_any_offset_constraints (tem); - - bool callarg_transitive = false; - - /* As an compile time optimization if we make no difference between - direct and indirect accesses make arg transitively closed. - This avoids the need to build indir arg and do everything twice. */ - if (((flags & EAF_NO_INDIRECT_CLOBBER) != 0) - == ((flags & EAF_NO_DIRECT_CLOBBER) != 0) - && (((flags & EAF_NO_INDIRECT_READ) != 0) - == ((flags & EAF_NO_DIRECT_READ) != 0)) - && (((flags & EAF_NO_INDIRECT_ESCAPE) != 0) - == ((flags & EAF_NO_DIRECT_ESCAPE) != 0)) - && (((flags & EAF_NOT_RETURNED_INDIRECTLY) != 0) - == ((flags & EAF_NOT_RETURNED_DIRECTLY) != 0))) - { - make_transitive_closure_constraints (tem); - callarg_transitive = true; - } - - /* If necessary, produce varinfo for indirect accesses to ARG. */ - varinfo_t indir_tem = NULL; - if (!callarg_transitive - && (flags & relevant_indirect_flags) != relevant_indirect_flags) - { - struct constraint_expr lhs, rhs; - indir_tem = new_var_info (NULL_TREE, "indircallarg", true); - indir_tem->is_reg_var = true; - - /* indir_term = *tem. */ - lhs.type = SCALAR; - lhs.var = indir_tem->id; - lhs.offset = 0; - - rhs.type = DEREF; - rhs.var = tem->id; - rhs.offset = UNKNOWN_OFFSET; - process_constraint (new_constraint (lhs, rhs)); - - make_any_offset_constraints (indir_tem); - - /* If we do not read indirectly there is no need for transitive closure. - We know there is only one level of indirection. */ - if (!(flags & EAF_NO_INDIRECT_READ)) - make_transitive_closure_constraints (indir_tem); - gcc_checking_assert (!(flags & EAF_NO_DIRECT_READ)); - } - - if (gimple_call_lhs (stmt)) - { - if (!(flags & EAF_NOT_RETURNED_DIRECTLY)) - { - struct constraint_expr cexpr; - cexpr.var = tem->id; - cexpr.type = SCALAR; - cexpr.offset = 0; - results->safe_push (cexpr); - } - if (!callarg_transitive & !(flags & EAF_NOT_RETURNED_INDIRECTLY)) - { - struct constraint_expr cexpr; - cexpr.var = indir_tem->id; - cexpr.type = SCALAR; - cexpr.offset = 0; - results->safe_push (cexpr); - } - } - - if (!(flags & EAF_NO_DIRECT_READ)) - { - varinfo_t uses = get_call_use_vi (stmt); - make_copy_constraint (uses, tem->id); - if (!callarg_transitive & !(flags & EAF_NO_INDIRECT_READ)) - make_copy_constraint (uses, indir_tem->id); - } - else - /* To read indirectly we need to read directly. */ - gcc_checking_assert (flags & EAF_NO_INDIRECT_READ); - - if (!(flags & EAF_NO_DIRECT_CLOBBER)) - { - struct constraint_expr lhs, rhs; - - /* *arg = callescape. */ - lhs.type = DEREF; - lhs.var = tem->id; - lhs.offset = 0; - - rhs.type = SCALAR; - rhs.var = callescape_id; - rhs.offset = 0; - process_constraint (new_constraint (lhs, rhs)); - - /* callclobbered = arg. */ - make_copy_constraint (get_call_clobber_vi (stmt), tem->id); - } - if (!callarg_transitive & !(flags & EAF_NO_INDIRECT_CLOBBER)) - { - struct constraint_expr lhs, rhs; - - /* *indir_arg = callescape. */ - lhs.type = DEREF; - lhs.var = indir_tem->id; - lhs.offset = 0; - - rhs.type = SCALAR; - rhs.var = callescape_id; - rhs.offset = 0; - process_constraint (new_constraint (lhs, rhs)); - - /* callclobbered = indir_arg. */ - make_copy_constraint (get_call_clobber_vi (stmt), indir_tem->id); - } - - if (!(flags & (EAF_NO_DIRECT_ESCAPE | EAF_NO_INDIRECT_ESCAPE))) - { - struct constraint_expr lhs, rhs; - - /* callescape = arg; */ - lhs.var = callescape_id; - lhs.offset = 0; - lhs.type = SCALAR; - - rhs.var = tem->id; - rhs.offset = 0; - rhs.type = SCALAR; - process_constraint (new_constraint (lhs, rhs)); - - if (writes_global_memory) - make_escape_constraint (arg); - } - else if (!callarg_transitive & !(flags & EAF_NO_INDIRECT_ESCAPE)) - { - struct constraint_expr lhs, rhs; - - /* callescape = *(indir_arg + UNKNOWN); */ - lhs.var = callescape_id; - lhs.offset = 0; - lhs.type = SCALAR; - - rhs.var = indir_tem->id; - rhs.offset = 0; - rhs.type = SCALAR; - process_constraint (new_constraint (lhs, rhs)); - - if (writes_global_memory) - make_indirect_escape_constraint (tem); - } -} - -/* Determine global memory access of call STMT and update - WRITES_GLOBAL_MEMORY, READS_GLOBAL_MEMORY and USES_GLOBAL_MEMORY. */ - -static void -determine_global_memory_access (gcall *stmt, - bool *writes_global_memory, - bool *reads_global_memory, - bool *uses_global_memory) -{ - tree callee; - cgraph_node *node; - modref_summary *summary; - - /* We need to detrmine reads to set uses. */ - gcc_assert (!uses_global_memory || reads_global_memory); - - if ((callee = gimple_call_fndecl (stmt)) != NULL_TREE - && (node = cgraph_node::get (callee)) != NULL - && (summary = get_modref_function_summary (node))) - { - if (writes_global_memory && *writes_global_memory) - *writes_global_memory = summary->global_memory_written; - if (reads_global_memory && *reads_global_memory) - *reads_global_memory = summary->global_memory_read; - if (reads_global_memory && uses_global_memory - && !summary->calls_interposable - && !*reads_global_memory && node->binds_to_current_def_p ()) - *uses_global_memory = false; - } - if ((writes_global_memory && *writes_global_memory) - || (uses_global_memory && *uses_global_memory) - || (reads_global_memory && *reads_global_memory)) - { - attr_fnspec fnspec = gimple_call_fnspec (stmt); - if (fnspec.known_p ()) - { - if (writes_global_memory - && !fnspec.global_memory_written_p ()) - *writes_global_memory = false; - if (reads_global_memory && !fnspec.global_memory_read_p ()) - { - *reads_global_memory = false; - if (uses_global_memory) - *uses_global_memory = false; - } - } - } -} - -/* For non-IPA mode, generate constraints necessary for a call on the - RHS and collect return value constraint to RESULTS to be used later in - handle_lhs_call. - - IMPLICIT_EAF_FLAGS are added to each function argument. If - WRITES_GLOBAL_MEMORY is true function is assumed to possibly write to global - memory. Similar for READS_GLOBAL_MEMORY. */ - -static void -handle_rhs_call (gcall *stmt, vec *results, - int implicit_eaf_flags, - bool writes_global_memory, - bool reads_global_memory) -{ - determine_global_memory_access (stmt, &writes_global_memory, - &reads_global_memory, - NULL); - - varinfo_t callescape = new_var_info (NULL_TREE, "callescape", true); - - /* If function can use global memory, add it to callescape - and to possible return values. If not we can still use/return addresses - of global symbols. */ - struct constraint_expr lhs, rhs; - - lhs.type = SCALAR; - lhs.var = callescape->id; - lhs.offset = 0; - - rhs.type = reads_global_memory ? SCALAR : ADDRESSOF; - rhs.var = nonlocal_id; - rhs.offset = 0; - - process_constraint (new_constraint (lhs, rhs)); - results->safe_push (rhs); - - varinfo_t uses = get_call_use_vi (stmt); - make_copy_constraint (uses, callescape->id); - - for (unsigned i = 0; i < gimple_call_num_args (stmt); ++i) - { - tree arg = gimple_call_arg (stmt, i); - int flags = gimple_call_arg_flags (stmt, i); - handle_call_arg (stmt, arg, results, - flags | implicit_eaf_flags, - callescape->id, writes_global_memory); - } - - /* The static chain escapes as well. */ - if (gimple_call_chain (stmt)) - handle_call_arg (stmt, gimple_call_chain (stmt), results, - implicit_eaf_flags - | gimple_call_static_chain_flags (stmt), - callescape->id, writes_global_memory); - - /* And if we applied NRV the address of the return slot escapes as well. */ - if (gimple_call_return_slot_opt_p (stmt) - && gimple_call_lhs (stmt) != NULL_TREE - && TREE_ADDRESSABLE (TREE_TYPE (gimple_call_lhs (stmt)))) - { - int flags = gimple_call_retslot_flags (stmt); - const int relevant_flags = EAF_NO_DIRECT_ESCAPE - | EAF_NOT_RETURNED_DIRECTLY; - - if (!(flags & EAF_UNUSED) && (flags & relevant_flags) != relevant_flags) - { - auto_vec tmpc; - - get_constraint_for_address_of (gimple_call_lhs (stmt), &tmpc); - - if (!(flags & EAF_NO_DIRECT_ESCAPE)) - { - make_constraints_to (callescape->id, tmpc); - if (writes_global_memory) - make_constraints_to (escaped_id, tmpc); - } - if (!(flags & EAF_NOT_RETURNED_DIRECTLY)) - { - struct constraint_expr *c; - unsigned i; - FOR_EACH_VEC_ELT (tmpc, i, c) - results->safe_push (*c); - } - } - } -} - -/* For non-IPA mode, generate constraints necessary for a call - that returns a pointer and assigns it to LHS. This simply makes - the LHS point to global and escaped variables. */ - -static void -handle_lhs_call (gcall *stmt, tree lhs, int flags, vec &rhsc, - tree fndecl) -{ - auto_vec lhsc; - - get_constraint_for (lhs, &lhsc); - /* If the store is to a global decl make sure to - add proper escape constraints. */ - lhs = get_base_address (lhs); - if (lhs - && DECL_P (lhs) - && is_global_var (lhs)) - { - struct constraint_expr tmpc; - tmpc.var = escaped_id; - tmpc.offset = 0; - tmpc.type = SCALAR; - lhsc.safe_push (tmpc); - } - - /* If the call returns an argument unmodified override the rhs - constraints. */ - if (flags & ERF_RETURNS_ARG - && (flags & ERF_RETURN_ARG_MASK) < gimple_call_num_args (stmt)) - { - tree arg; - rhsc.truncate (0); - arg = gimple_call_arg (stmt, flags & ERF_RETURN_ARG_MASK); - get_constraint_for (arg, &rhsc); - process_all_all_constraints (lhsc, rhsc); - rhsc.truncate (0); - } - else if (flags & ERF_NOALIAS) - { - varinfo_t vi; - struct constraint_expr tmpc; - rhsc.truncate (0); - vi = make_heapvar ("HEAP", true); - /* We are marking allocated storage local, we deal with it becoming - global by escaping and setting of vars_contains_escaped_heap. */ - DECL_EXTERNAL (vi->decl) = 0; - vi->is_global_var = 0; - /* If this is not a real malloc call assume the memory was - initialized and thus may point to global memory. All - builtin functions with the malloc attribute behave in a sane way. */ - if (!fndecl - || !fndecl_built_in_p (fndecl, BUILT_IN_NORMAL)) - make_constraint_from (vi, nonlocal_id); - tmpc.var = vi->id; - tmpc.offset = 0; - tmpc.type = ADDRESSOF; - rhsc.safe_push (tmpc); - process_all_all_constraints (lhsc, rhsc); - rhsc.truncate (0); - } - else - process_all_all_constraints (lhsc, rhsc); -} - - -/* Return the varinfo for the callee of CALL. */ - -static varinfo_t -get_fi_for_callee (gcall *call) -{ - tree decl, fn = gimple_call_fn (call); - - if (fn && TREE_CODE (fn) == OBJ_TYPE_REF) - fn = OBJ_TYPE_REF_EXPR (fn); - - /* If we can directly resolve the function being called, do so. - Otherwise, it must be some sort of indirect expression that - we should still be able to handle. */ - decl = gimple_call_addr_fndecl (fn); - if (decl) - return get_vi_for_tree (decl); - - /* If the function is anything other than a SSA name pointer we have no - clue and should be getting ANYFN (well, ANYTHING for now). */ - if (!fn || TREE_CODE (fn) != SSA_NAME) - return get_varinfo (anything_id); - - if (SSA_NAME_IS_DEFAULT_DEF (fn) - && (TREE_CODE (SSA_NAME_VAR (fn)) == PARM_DECL - || TREE_CODE (SSA_NAME_VAR (fn)) == RESULT_DECL)) - fn = SSA_NAME_VAR (fn); - - return get_vi_for_tree (fn); -} - -/* Create constraints for assigning call argument ARG to the incoming parameter - INDEX of function FI. */ - -static void -find_func_aliases_for_call_arg (varinfo_t fi, unsigned index, tree arg) -{ - struct constraint_expr lhs; - lhs = get_function_part_constraint (fi, fi_parm_base + index); - - auto_vec rhsc; - get_constraint_for_rhs (arg, &rhsc); - - unsigned j; - struct constraint_expr *rhsp; - FOR_EACH_VEC_ELT (rhsc, j, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); -} - -/* Return true if FNDECL may be part of another lto partition. */ - -static bool -fndecl_maybe_in_other_partition (tree fndecl) -{ - cgraph_node *fn_node = cgraph_node::get (fndecl); - if (fn_node == NULL) - return true; - - return fn_node->in_other_partition; -} - -/* Create constraints for the builtin call T. Return true if the call - was handled, otherwise false. */ - -static bool -find_func_aliases_for_builtin_call (struct function *fn, gcall *t) -{ - tree fndecl = gimple_call_fndecl (t); - auto_vec lhsc; - auto_vec rhsc; - varinfo_t fi; - - if (gimple_call_builtin_p (t, BUILT_IN_NORMAL)) - /* ??? All builtins that are handled here need to be handled - in the alias-oracle query functions explicitly! */ - switch (DECL_FUNCTION_CODE (fndecl)) - { - /* All the following functions return a pointer to the same object - as their first argument points to. The functions do not add - to the ESCAPED solution. The functions make the first argument - pointed to memory point to what the second argument pointed to - memory points to. */ - case BUILT_IN_STRCPY: - case BUILT_IN_STRNCPY: - case BUILT_IN_BCOPY: - case BUILT_IN_MEMCPY: - case BUILT_IN_MEMMOVE: - case BUILT_IN_MEMPCPY: - case BUILT_IN_STPCPY: - case BUILT_IN_STPNCPY: - case BUILT_IN_STRCAT: - case BUILT_IN_STRNCAT: - case BUILT_IN_STRCPY_CHK: - case BUILT_IN_STRNCPY_CHK: - case BUILT_IN_MEMCPY_CHK: - case BUILT_IN_MEMMOVE_CHK: - case BUILT_IN_MEMPCPY_CHK: - case BUILT_IN_STPCPY_CHK: - case BUILT_IN_STPNCPY_CHK: - case BUILT_IN_STRCAT_CHK: - case BUILT_IN_STRNCAT_CHK: - case BUILT_IN_TM_MEMCPY: - case BUILT_IN_TM_MEMMOVE: - { - tree res = gimple_call_lhs (t); - tree dest = gimple_call_arg (t, (DECL_FUNCTION_CODE (fndecl) - == BUILT_IN_BCOPY ? 1 : 0)); - tree src = gimple_call_arg (t, (DECL_FUNCTION_CODE (fndecl) - == BUILT_IN_BCOPY ? 0 : 1)); - if (res != NULL_TREE) - { - get_constraint_for (res, &lhsc); - if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_MEMPCPY - || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_STPCPY - || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_STPNCPY - || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_MEMPCPY_CHK - || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_STPCPY_CHK - || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_STPNCPY_CHK) - get_constraint_for_ptr_offset (dest, NULL_TREE, &rhsc); - else - get_constraint_for (dest, &rhsc); - process_all_all_constraints (lhsc, rhsc); - lhsc.truncate (0); - rhsc.truncate (0); - } - get_constraint_for_ptr_offset (dest, NULL_TREE, &lhsc); - get_constraint_for_ptr_offset (src, NULL_TREE, &rhsc); - do_deref (&lhsc); - do_deref (&rhsc); - process_all_all_constraints (lhsc, rhsc); - return true; - } - case BUILT_IN_MEMSET: - case BUILT_IN_MEMSET_CHK: - case BUILT_IN_TM_MEMSET: - { - tree res = gimple_call_lhs (t); - tree dest = gimple_call_arg (t, 0); - unsigned i; - ce_s *lhsp; - struct constraint_expr ac; - if (res != NULL_TREE) - { - get_constraint_for (res, &lhsc); - get_constraint_for (dest, &rhsc); - process_all_all_constraints (lhsc, rhsc); - lhsc.truncate (0); - } - get_constraint_for_ptr_offset (dest, NULL_TREE, &lhsc); - do_deref (&lhsc); - if (flag_delete_null_pointer_checks - && integer_zerop (gimple_call_arg (t, 1))) - { - ac.type = ADDRESSOF; - ac.var = nothing_id; - } - else - { - ac.type = SCALAR; - ac.var = integer_id; - } - ac.offset = 0; - FOR_EACH_VEC_ELT (lhsc, i, lhsp) - process_constraint (new_constraint (*lhsp, ac)); - return true; - } - case BUILT_IN_STACK_SAVE: - case BUILT_IN_STACK_RESTORE: - /* Nothing interesting happens. */ - return true; - case BUILT_IN_ALLOCA: - case BUILT_IN_ALLOCA_WITH_ALIGN: - case BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX: - { - tree ptr = gimple_call_lhs (t); - if (ptr == NULL_TREE) - return true; - get_constraint_for (ptr, &lhsc); - varinfo_t vi = make_heapvar ("HEAP", true); - /* Alloca storage is never global. To exempt it from escaped - handling make it a non-heap var. */ - DECL_EXTERNAL (vi->decl) = 0; - vi->is_global_var = 0; - vi->is_heap_var = 0; - struct constraint_expr tmpc; - tmpc.var = vi->id; - tmpc.offset = 0; - tmpc.type = ADDRESSOF; - rhsc.safe_push (tmpc); - process_all_all_constraints (lhsc, rhsc); - return true; - } - case BUILT_IN_POSIX_MEMALIGN: - { - tree ptrptr = gimple_call_arg (t, 0); - get_constraint_for (ptrptr, &lhsc); - do_deref (&lhsc); - varinfo_t vi = make_heapvar ("HEAP", true); - /* We are marking allocated storage local, we deal with it becoming - global by escaping and setting of vars_contains_escaped_heap. */ - DECL_EXTERNAL (vi->decl) = 0; - vi->is_global_var = 0; - struct constraint_expr tmpc; - tmpc.var = vi->id; - tmpc.offset = 0; - tmpc.type = ADDRESSOF; - rhsc.safe_push (tmpc); - process_all_all_constraints (lhsc, rhsc); - return true; - } - case BUILT_IN_ASSUME_ALIGNED: - { - tree res = gimple_call_lhs (t); - tree dest = gimple_call_arg (t, 0); - if (res != NULL_TREE) - { - get_constraint_for (res, &lhsc); - get_constraint_for (dest, &rhsc); - process_all_all_constraints (lhsc, rhsc); - } - return true; - } - /* All the following functions do not return pointers, do not - modify the points-to sets of memory reachable from their - arguments and do not add to the ESCAPED solution. */ - case BUILT_IN_SINCOS: - case BUILT_IN_SINCOSF: - case BUILT_IN_SINCOSL: - case BUILT_IN_FREXP: - case BUILT_IN_FREXPF: - case BUILT_IN_FREXPL: - case BUILT_IN_GAMMA_R: - case BUILT_IN_GAMMAF_R: - case BUILT_IN_GAMMAL_R: - case BUILT_IN_LGAMMA_R: - case BUILT_IN_LGAMMAF_R: - case BUILT_IN_LGAMMAL_R: - case BUILT_IN_MODF: - case BUILT_IN_MODFF: - case BUILT_IN_MODFL: - case BUILT_IN_REMQUO: - case BUILT_IN_REMQUOF: - case BUILT_IN_REMQUOL: - case BUILT_IN_FREE: - return true; - case BUILT_IN_STRDUP: - case BUILT_IN_STRNDUP: - case BUILT_IN_REALLOC: - if (gimple_call_lhs (t)) - { - auto_vec rhsc; - handle_lhs_call (t, gimple_call_lhs (t), - gimple_call_return_flags (t) | ERF_NOALIAS, - rhsc, fndecl); - get_constraint_for_ptr_offset (gimple_call_lhs (t), - NULL_TREE, &lhsc); - get_constraint_for_ptr_offset (gimple_call_arg (t, 0), - NULL_TREE, &rhsc); - do_deref (&lhsc); - do_deref (&rhsc); - process_all_all_constraints (lhsc, rhsc); - lhsc.truncate (0); - rhsc.truncate (0); - /* For realloc the resulting pointer can be equal to the - argument as well. But only doing this wouldn't be - correct because with ptr == 0 realloc behaves like malloc. */ - if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_REALLOC) - { - get_constraint_for (gimple_call_lhs (t), &lhsc); - get_constraint_for (gimple_call_arg (t, 0), &rhsc); - process_all_all_constraints (lhsc, rhsc); - } - return true; - } - break; - /* String / character search functions return a pointer into the - source string or NULL. */ - case BUILT_IN_INDEX: - case BUILT_IN_STRCHR: - case BUILT_IN_STRRCHR: - case BUILT_IN_MEMCHR: - case BUILT_IN_STRSTR: - case BUILT_IN_STRPBRK: - if (gimple_call_lhs (t)) - { - tree src = gimple_call_arg (t, 0); - get_constraint_for_ptr_offset (src, NULL_TREE, &rhsc); - constraint_expr nul; - nul.var = nothing_id; - nul.offset = 0; - nul.type = ADDRESSOF; - rhsc.safe_push (nul); - get_constraint_for (gimple_call_lhs (t), &lhsc); - process_all_all_constraints (lhsc, rhsc); - } - return true; - /* Pure functions that return something not based on any object and - that use the memory pointed to by their arguments (but not - transitively). */ - case BUILT_IN_STRCMP: - case BUILT_IN_STRCMP_EQ: - case BUILT_IN_STRNCMP: - case BUILT_IN_STRNCMP_EQ: - case BUILT_IN_STRCASECMP: - case BUILT_IN_STRNCASECMP: - case BUILT_IN_MEMCMP: - case BUILT_IN_BCMP: - case BUILT_IN_STRSPN: - case BUILT_IN_STRCSPN: - { - varinfo_t uses = get_call_use_vi (t); - make_any_offset_constraints (uses); - make_constraint_to (uses->id, gimple_call_arg (t, 0)); - make_constraint_to (uses->id, gimple_call_arg (t, 1)); - /* No constraints are necessary for the return value. */ - return true; - } - case BUILT_IN_STRLEN: - { - varinfo_t uses = get_call_use_vi (t); - make_any_offset_constraints (uses); - make_constraint_to (uses->id, gimple_call_arg (t, 0)); - /* No constraints are necessary for the return value. */ - return true; - } - case BUILT_IN_OBJECT_SIZE: - case BUILT_IN_CONSTANT_P: - { - /* No constraints are necessary for the return value or the - arguments. */ - return true; - } - /* Trampolines are special - they set up passing the static - frame. */ - case BUILT_IN_INIT_TRAMPOLINE: - { - tree tramp = gimple_call_arg (t, 0); - tree nfunc = gimple_call_arg (t, 1); - tree frame = gimple_call_arg (t, 2); - unsigned i; - struct constraint_expr lhs, *rhsp; - if (in_ipa_mode) - { - varinfo_t nfi = NULL; - gcc_assert (TREE_CODE (nfunc) == ADDR_EXPR); - nfi = lookup_vi_for_tree (TREE_OPERAND (nfunc, 0)); - if (nfi) - { - lhs = get_function_part_constraint (nfi, fi_static_chain); - get_constraint_for (frame, &rhsc); - FOR_EACH_VEC_ELT (rhsc, i, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - rhsc.truncate (0); - - /* Make the frame point to the function for - the trampoline adjustment call. */ - get_constraint_for (tramp, &lhsc); - do_deref (&lhsc); - get_constraint_for (nfunc, &rhsc); - process_all_all_constraints (lhsc, rhsc); - - return true; - } - } - /* Else fallthru to generic handling which will let - the frame escape. */ - break; - } - case BUILT_IN_ADJUST_TRAMPOLINE: - { - tree tramp = gimple_call_arg (t, 0); - tree res = gimple_call_lhs (t); - if (in_ipa_mode && res) - { - get_constraint_for (res, &lhsc); - get_constraint_for (tramp, &rhsc); - do_deref (&rhsc); - process_all_all_constraints (lhsc, rhsc); - } - return true; - } - CASE_BUILT_IN_TM_STORE (1): - CASE_BUILT_IN_TM_STORE (2): - CASE_BUILT_IN_TM_STORE (4): - CASE_BUILT_IN_TM_STORE (8): - CASE_BUILT_IN_TM_STORE (FLOAT): - CASE_BUILT_IN_TM_STORE (DOUBLE): - CASE_BUILT_IN_TM_STORE (LDOUBLE): - CASE_BUILT_IN_TM_STORE (M64): - CASE_BUILT_IN_TM_STORE (M128): - CASE_BUILT_IN_TM_STORE (M256): - { - tree addr = gimple_call_arg (t, 0); - tree src = gimple_call_arg (t, 1); - - get_constraint_for (addr, &lhsc); - do_deref (&lhsc); - get_constraint_for (src, &rhsc); - process_all_all_constraints (lhsc, rhsc); - return true; - } - CASE_BUILT_IN_TM_LOAD (1): - CASE_BUILT_IN_TM_LOAD (2): - CASE_BUILT_IN_TM_LOAD (4): - CASE_BUILT_IN_TM_LOAD (8): - CASE_BUILT_IN_TM_LOAD (FLOAT): - CASE_BUILT_IN_TM_LOAD (DOUBLE): - CASE_BUILT_IN_TM_LOAD (LDOUBLE): - CASE_BUILT_IN_TM_LOAD (M64): - CASE_BUILT_IN_TM_LOAD (M128): - CASE_BUILT_IN_TM_LOAD (M256): - { - tree dest = gimple_call_lhs (t); - tree addr = gimple_call_arg (t, 0); - - get_constraint_for (dest, &lhsc); - get_constraint_for (addr, &rhsc); - do_deref (&rhsc); - process_all_all_constraints (lhsc, rhsc); - return true; - } - /* Variadic argument handling needs to be handled in IPA - mode as well. */ - case BUILT_IN_VA_START: - { - tree valist = gimple_call_arg (t, 0); - struct constraint_expr rhs, *lhsp; - unsigned i; - get_constraint_for_ptr_offset (valist, NULL_TREE, &lhsc); - do_deref (&lhsc); - /* The va_list gets access to pointers in variadic - arguments. Which we know in the case of IPA analysis - and otherwise are just all nonlocal variables. */ - if (in_ipa_mode) - { - fi = lookup_vi_for_tree (fn->decl); - rhs = get_function_part_constraint (fi, ~0); - rhs.type = ADDRESSOF; - } - else - { - rhs.var = nonlocal_id; - rhs.type = ADDRESSOF; - rhs.offset = 0; - } - FOR_EACH_VEC_ELT (lhsc, i, lhsp) - process_constraint (new_constraint (*lhsp, rhs)); - /* va_list is clobbered. */ - make_constraint_to (get_call_clobber_vi (t)->id, valist); - return true; - } - /* va_end doesn't have any effect that matters. */ - case BUILT_IN_VA_END: - return true; - /* Alternate return. Simply give up for now. */ - case BUILT_IN_RETURN: - { - fi = NULL; - if (!in_ipa_mode - || !(fi = get_vi_for_tree (fn->decl))) - make_constraint_from (get_varinfo (escaped_id), anything_id); - else if (in_ipa_mode - && fi != NULL) - { - struct constraint_expr lhs, rhs; - lhs = get_function_part_constraint (fi, fi_result); - rhs.var = anything_id; - rhs.offset = 0; - rhs.type = SCALAR; - process_constraint (new_constraint (lhs, rhs)); - } - return true; - } - case BUILT_IN_GOMP_PARALLEL: - case BUILT_IN_GOACC_PARALLEL: - { - if (in_ipa_mode) - { - unsigned int fnpos, argpos; - switch (DECL_FUNCTION_CODE (fndecl)) - { - case BUILT_IN_GOMP_PARALLEL: - /* __builtin_GOMP_parallel (fn, data, num_threads, flags). */ - fnpos = 0; - argpos = 1; - break; - case BUILT_IN_GOACC_PARALLEL: - /* __builtin_GOACC_parallel (flags_m, fn, mapnum, hostaddrs, - sizes, kinds, ...). */ - fnpos = 1; - argpos = 3; - break; - default: - gcc_unreachable (); - } - - tree fnarg = gimple_call_arg (t, fnpos); - gcc_assert (TREE_CODE (fnarg) == ADDR_EXPR); - tree fndecl = TREE_OPERAND (fnarg, 0); - if (fndecl_maybe_in_other_partition (fndecl)) - /* Fallthru to general call handling. */ - break; - - tree arg = gimple_call_arg (t, argpos); - - varinfo_t fi = get_vi_for_tree (fndecl); - find_func_aliases_for_call_arg (fi, 0, arg); - return true; - } - /* Else fallthru to generic call handling. */ - break; - } - /* printf-style functions may have hooks to set pointers to - point to somewhere into the generated string. Leave them - for a later exercise... */ - default: - /* Fallthru to general call handling. */; - } - - return false; -} - -/* Create constraints for the call T. */ - -static void -find_func_aliases_for_call (struct function *fn, gcall *t) -{ - tree fndecl = gimple_call_fndecl (t); - varinfo_t fi; - - if (fndecl != NULL_TREE - && fndecl_built_in_p (fndecl) - && find_func_aliases_for_builtin_call (fn, t)) - return; - - if (gimple_call_internal_p (t, IFN_DEFERRED_INIT)) - return; - - fi = get_fi_for_callee (t); - if (!in_ipa_mode - || (fi->decl && fndecl && !fi->is_fn_info)) - { - auto_vec rhsc; - int flags = gimple_call_flags (t); - - /* Const functions can return their arguments and addresses - of global memory but not of escaped memory. */ - if (flags & (ECF_CONST|ECF_NOVOPS)) - { - if (gimple_call_lhs (t)) - handle_rhs_call (t, &rhsc, implicit_const_eaf_flags, false, false); - } - /* Pure functions can return addresses in and of memory - reachable from their arguments, but they are not an escape - point for reachable memory of their arguments. */ - else if (flags & (ECF_PURE|ECF_LOOPING_CONST_OR_PURE)) - handle_rhs_call (t, &rhsc, implicit_pure_eaf_flags, false, true); - /* If the call is to a replaceable operator delete and results - from a delete expression as opposed to a direct call to - such operator, then the effects for PTA (in particular - the escaping of the pointer) can be ignored. */ - else if (fndecl - && DECL_IS_OPERATOR_DELETE_P (fndecl) - && gimple_call_from_new_or_delete (t)) - ; - else - handle_rhs_call (t, &rhsc, 0, true, true); - if (gimple_call_lhs (t)) - handle_lhs_call (t, gimple_call_lhs (t), - gimple_call_return_flags (t), rhsc, fndecl); - } - else - { - auto_vec rhsc; - tree lhsop; - unsigned j; - - /* Assign all the passed arguments to the appropriate incoming - parameters of the function. */ - for (j = 0; j < gimple_call_num_args (t); j++) - { - tree arg = gimple_call_arg (t, j); - find_func_aliases_for_call_arg (fi, j, arg); - } - - /* If we are returning a value, assign it to the result. */ - lhsop = gimple_call_lhs (t); - if (lhsop) - { - auto_vec lhsc; - struct constraint_expr rhs; - struct constraint_expr *lhsp; - bool aggr_p = aggregate_value_p (lhsop, gimple_call_fntype (t)); - - get_constraint_for (lhsop, &lhsc); - rhs = get_function_part_constraint (fi, fi_result); - if (aggr_p) - { - auto_vec tem; - tem.quick_push (rhs); - do_deref (&tem); - gcc_checking_assert (tem.length () == 1); - rhs = tem[0]; - } - FOR_EACH_VEC_ELT (lhsc, j, lhsp) - process_constraint (new_constraint (*lhsp, rhs)); - - /* If we pass the result decl by reference, honor that. */ - if (aggr_p) - { - struct constraint_expr lhs; - struct constraint_expr *rhsp; - - get_constraint_for_address_of (lhsop, &rhsc); - lhs = get_function_part_constraint (fi, fi_result); - FOR_EACH_VEC_ELT (rhsc, j, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - rhsc.truncate (0); - } - } - - /* If we use a static chain, pass it along. */ - if (gimple_call_chain (t)) - { - struct constraint_expr lhs; - struct constraint_expr *rhsp; - - get_constraint_for (gimple_call_chain (t), &rhsc); - lhs = get_function_part_constraint (fi, fi_static_chain); - FOR_EACH_VEC_ELT (rhsc, j, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - } - } -} - -/* Walk statement T setting up aliasing constraints according to the - references found in T. This function is the main part of the - constraint builder. AI points to auxiliary alias information used - when building alias sets and computing alias grouping heuristics. */ - -static void -find_func_aliases (struct function *fn, gimple *origt) -{ - gimple *t = origt; - auto_vec lhsc; - auto_vec rhsc; - varinfo_t fi; - - /* Now build constraints expressions. */ - if (gimple_code (t) == GIMPLE_PHI) - { - /* For a phi node, assign all the arguments to - the result. */ - get_constraint_for (gimple_phi_result (t), &lhsc); - for (unsigned i = 0; i < gimple_phi_num_args (t); i++) - { - get_constraint_for_rhs (gimple_phi_arg_def (t, i), &rhsc); - process_all_all_constraints (lhsc, rhsc); - rhsc.truncate (0); - } - } - /* In IPA mode, we need to generate constraints to pass call - arguments through their calls. There are two cases, - either a GIMPLE_CALL returning a value, or just a plain - GIMPLE_CALL when we are not. - - In non-ipa mode, we need to generate constraints for each - pointer passed by address. */ - else if (is_gimple_call (t)) - find_func_aliases_for_call (fn, as_a (t)); - - /* Otherwise, just a regular assignment statement. Only care about - operations with pointer result, others are dealt with as escape - points if they have pointer operands. */ - else if (is_gimple_assign (t)) - { - /* Otherwise, just a regular assignment statement. */ - tree lhsop = gimple_assign_lhs (t); - tree rhsop = (gimple_num_ops (t) == 2) ? gimple_assign_rhs1 (t) : NULL; - - if (rhsop && TREE_CLOBBER_P (rhsop)) - /* Ignore clobbers, they don't actually store anything into - the LHS. */ - ; - else if (rhsop && AGGREGATE_TYPE_P (TREE_TYPE (lhsop))) - do_structure_copy (lhsop, rhsop); - else - { - enum tree_code code = gimple_assign_rhs_code (t); - - get_constraint_for (lhsop, &lhsc); - - if (code == POINTER_PLUS_EXPR) - get_constraint_for_ptr_offset (gimple_assign_rhs1 (t), - gimple_assign_rhs2 (t), &rhsc); - else if (code == POINTER_DIFF_EXPR) - /* The result is not a pointer (part). */ - ; - else if (code == BIT_AND_EXPR - && TREE_CODE (gimple_assign_rhs2 (t)) == INTEGER_CST) - { - /* Aligning a pointer via a BIT_AND_EXPR is offsetting - the pointer. Handle it by offsetting it by UNKNOWN. */ - get_constraint_for_ptr_offset (gimple_assign_rhs1 (t), - NULL_TREE, &rhsc); - } - else if (code == TRUNC_DIV_EXPR - || code == CEIL_DIV_EXPR - || code == FLOOR_DIV_EXPR - || code == ROUND_DIV_EXPR - || code == EXACT_DIV_EXPR - || code == TRUNC_MOD_EXPR - || code == CEIL_MOD_EXPR - || code == FLOOR_MOD_EXPR - || code == ROUND_MOD_EXPR) - /* Division and modulo transfer the pointer from the LHS. */ - get_constraint_for_ptr_offset (gimple_assign_rhs1 (t), - NULL_TREE, &rhsc); - else if (CONVERT_EXPR_CODE_P (code) - || gimple_assign_single_p (t)) - /* See through conversions, single RHS are handled by - get_constraint_for_rhs. */ - get_constraint_for_rhs (rhsop, &rhsc); - else if (code == COND_EXPR) - { - /* The result is a merge of both COND_EXPR arms. */ - auto_vec tmp; - struct constraint_expr *rhsp; - unsigned i; - get_constraint_for_rhs (gimple_assign_rhs2 (t), &rhsc); - get_constraint_for_rhs (gimple_assign_rhs3 (t), &tmp); - FOR_EACH_VEC_ELT (tmp, i, rhsp) - rhsc.safe_push (*rhsp); - } - else if (truth_value_p (code)) - /* Truth value results are not pointer (parts). Or at least - very unreasonable obfuscation of a part. */ - ; - else - { - /* All other operations are possibly offsetting merges. */ - auto_vec tmp; - struct constraint_expr *rhsp; - unsigned i, j; - get_constraint_for_ptr_offset (gimple_assign_rhs1 (t), - NULL_TREE, &rhsc); - for (i = 2; i < gimple_num_ops (t); ++i) - { - get_constraint_for_ptr_offset (gimple_op (t, i), - NULL_TREE, &tmp); - FOR_EACH_VEC_ELT (tmp, j, rhsp) - rhsc.safe_push (*rhsp); - tmp.truncate (0); - } - } - process_all_all_constraints (lhsc, rhsc); - } - /* If there is a store to a global variable the rhs escapes. */ - if ((lhsop = get_base_address (lhsop)) != NULL_TREE - && DECL_P (lhsop)) - { - varinfo_t vi = get_vi_for_tree (lhsop); - if ((! in_ipa_mode && vi->is_global_var) - || vi->is_ipa_escape_point) - make_escape_constraint (rhsop); - } - } - /* Handle escapes through return. */ - else if (gimple_code (t) == GIMPLE_RETURN - && gimple_return_retval (as_a (t)) != NULL_TREE) - { - greturn *return_stmt = as_a (t); - tree retval = gimple_return_retval (return_stmt); - if (!in_ipa_mode) - make_constraint_to (escaped_return_id, retval); - else - { - struct constraint_expr lhs ; - struct constraint_expr *rhsp; - unsigned i; - - fi = lookup_vi_for_tree (fn->decl); - lhs = get_function_part_constraint (fi, fi_result); - get_constraint_for_rhs (retval, &rhsc); - FOR_EACH_VEC_ELT (rhsc, i, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - } - } - /* Handle asms conservatively by adding escape constraints to everything. */ - else if (gasm *asm_stmt = dyn_cast (t)) - { - unsigned i, noutputs; - const char **oconstraints; - const char *constraint; - bool allows_mem, allows_reg, is_inout; - - noutputs = gimple_asm_noutputs (asm_stmt); - oconstraints = XALLOCAVEC (const char *, noutputs); - - for (i = 0; i < noutputs; ++i) - { - tree link = gimple_asm_output_op (asm_stmt, i); - tree op = TREE_VALUE (link); - - constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (link))); - oconstraints[i] = constraint; - parse_output_constraint (&constraint, i, 0, 0, &allows_mem, - &allows_reg, &is_inout, nullptr); - - /* A memory constraint makes the address of the operand escape. */ - if (!allows_reg && allows_mem) - { - auto_vec tmpc; - get_constraint_for_address_of (op, &tmpc); - make_constraints_to (escaped_id, tmpc); - } - - /* The asm may read global memory, so outputs may point to - any global memory. */ - if (op) - { - auto_vec lhsc; - struct constraint_expr rhsc, *lhsp; - unsigned j; - get_constraint_for (op, &lhsc); - rhsc.var = nonlocal_id; - rhsc.offset = 0; - rhsc.type = SCALAR; - FOR_EACH_VEC_ELT (lhsc, j, lhsp) - process_constraint (new_constraint (*lhsp, rhsc)); - } - } - for (i = 0; i < gimple_asm_ninputs (asm_stmt); ++i) - { - tree link = gimple_asm_input_op (asm_stmt, i); - tree op = TREE_VALUE (link); - - constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (link))); - - parse_input_constraint (&constraint, 0, 0, noutputs, 0, oconstraints, - &allows_mem, &allows_reg, nullptr); - - /* A memory constraint makes the address of the operand escape. */ - if (!allows_reg && allows_mem) - { - auto_vec tmpc; - get_constraint_for_address_of (op, &tmpc); - make_constraints_to (escaped_id, tmpc); - } - /* Strictly we'd only need the constraint to ESCAPED if - the asm clobbers memory, otherwise using something - along the lines of per-call clobbers/uses would be enough. */ - else if (op) - make_escape_constraint (op); - } - } -} - - -/* Create a constraint adding to the clobber set of FI the memory - pointed to by PTR. */ - -static void -process_ipa_clobber (varinfo_t fi, tree ptr) -{ - vec ptrc = vNULL; - struct constraint_expr *c, lhs; - unsigned i; - get_constraint_for_rhs (ptr, &ptrc); - lhs = get_function_part_constraint (fi, fi_clobbers); - FOR_EACH_VEC_ELT (ptrc, i, c) - process_constraint (new_constraint (lhs, *c)); - ptrc.release (); -} - -/* Walk statement T setting up clobber and use constraints according to the - references found in T. This function is a main part of the - IPA constraint builder. */ - -static void -find_func_clobbers (struct function *fn, gimple *origt) -{ - gimple *t = origt; - auto_vec lhsc; - auto_vec rhsc; - varinfo_t fi; - - /* Add constraints for clobbered/used in IPA mode. - We are not interested in what automatic variables are clobbered - or used as we only use the information in the caller to which - they do not escape. */ - gcc_assert (in_ipa_mode); - - /* If the stmt refers to memory in any way it better had a VUSE. */ - if (gimple_vuse (t) == NULL_TREE) - return; - - /* We'd better have function information for the current function. */ - fi = lookup_vi_for_tree (fn->decl); - gcc_assert (fi != NULL); - - /* Account for stores in assignments and calls. */ - if (gimple_vdef (t) != NULL_TREE - && gimple_has_lhs (t)) - { - tree lhs = gimple_get_lhs (t); - tree tem = lhs; - while (handled_component_p (tem)) - tem = TREE_OPERAND (tem, 0); - if ((DECL_P (tem) - && !auto_var_in_fn_p (tem, fn->decl)) - || INDIRECT_REF_P (tem) - || (TREE_CODE (tem) == MEM_REF - && !(TREE_CODE (TREE_OPERAND (tem, 0)) == ADDR_EXPR - && auto_var_in_fn_p - (TREE_OPERAND (TREE_OPERAND (tem, 0), 0), fn->decl)))) - { - struct constraint_expr lhsc, *rhsp; - unsigned i; - lhsc = get_function_part_constraint (fi, fi_clobbers); - get_constraint_for_address_of (lhs, &rhsc); - FOR_EACH_VEC_ELT (rhsc, i, rhsp) - process_constraint (new_constraint (lhsc, *rhsp)); - rhsc.truncate (0); - } - } - - /* Account for uses in assigments and returns. */ - if (gimple_assign_single_p (t) - || (gimple_code (t) == GIMPLE_RETURN - && gimple_return_retval (as_a (t)) != NULL_TREE)) - { - tree rhs = (gimple_assign_single_p (t) - ? gimple_assign_rhs1 (t) - : gimple_return_retval (as_a (t))); - tree tem = rhs; - while (handled_component_p (tem)) - tem = TREE_OPERAND (tem, 0); - if ((DECL_P (tem) - && !auto_var_in_fn_p (tem, fn->decl)) - || INDIRECT_REF_P (tem) - || (TREE_CODE (tem) == MEM_REF - && !(TREE_CODE (TREE_OPERAND (tem, 0)) == ADDR_EXPR - && auto_var_in_fn_p - (TREE_OPERAND (TREE_OPERAND (tem, 0), 0), fn->decl)))) - { - struct constraint_expr lhs, *rhsp; - unsigned i; - lhs = get_function_part_constraint (fi, fi_uses); - get_constraint_for_address_of (rhs, &rhsc); - FOR_EACH_VEC_ELT (rhsc, i, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - rhsc.truncate (0); - } - } - - if (gcall *call_stmt = dyn_cast (t)) - { - varinfo_t cfi = NULL; - tree decl = gimple_call_fndecl (t); - struct constraint_expr lhs, rhs; - unsigned i, j; - - /* For builtins we do not have separate function info. For those - we do not generate escapes for we have to generate clobbers/uses. */ - if (gimple_call_builtin_p (t, BUILT_IN_NORMAL)) - switch (DECL_FUNCTION_CODE (decl)) - { - /* The following functions use and clobber memory pointed to - by their arguments. */ - case BUILT_IN_STRCPY: - case BUILT_IN_STRNCPY: - case BUILT_IN_BCOPY: - case BUILT_IN_MEMCPY: - case BUILT_IN_MEMMOVE: - case BUILT_IN_MEMPCPY: - case BUILT_IN_STPCPY: - case BUILT_IN_STPNCPY: - case BUILT_IN_STRCAT: - case BUILT_IN_STRNCAT: - case BUILT_IN_STRCPY_CHK: - case BUILT_IN_STRNCPY_CHK: - case BUILT_IN_MEMCPY_CHK: - case BUILT_IN_MEMMOVE_CHK: - case BUILT_IN_MEMPCPY_CHK: - case BUILT_IN_STPCPY_CHK: - case BUILT_IN_STPNCPY_CHK: - case BUILT_IN_STRCAT_CHK: - case BUILT_IN_STRNCAT_CHK: - { - tree dest = gimple_call_arg (t, (DECL_FUNCTION_CODE (decl) - == BUILT_IN_BCOPY ? 1 : 0)); - tree src = gimple_call_arg (t, (DECL_FUNCTION_CODE (decl) - == BUILT_IN_BCOPY ? 0 : 1)); - unsigned i; - struct constraint_expr *rhsp, *lhsp; - get_constraint_for_ptr_offset (dest, NULL_TREE, &lhsc); - lhs = get_function_part_constraint (fi, fi_clobbers); - FOR_EACH_VEC_ELT (lhsc, i, lhsp) - process_constraint (new_constraint (lhs, *lhsp)); - get_constraint_for_ptr_offset (src, NULL_TREE, &rhsc); - lhs = get_function_part_constraint (fi, fi_uses); - FOR_EACH_VEC_ELT (rhsc, i, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - return; - } - /* The following function clobbers memory pointed to by - its argument. */ - case BUILT_IN_MEMSET: - case BUILT_IN_MEMSET_CHK: - case BUILT_IN_POSIX_MEMALIGN: - { - tree dest = gimple_call_arg (t, 0); - unsigned i; - ce_s *lhsp; - get_constraint_for_ptr_offset (dest, NULL_TREE, &lhsc); - lhs = get_function_part_constraint (fi, fi_clobbers); - FOR_EACH_VEC_ELT (lhsc, i, lhsp) - process_constraint (new_constraint (lhs, *lhsp)); - return; - } - /* The following functions clobber their second and third - arguments. */ - case BUILT_IN_SINCOS: - case BUILT_IN_SINCOSF: - case BUILT_IN_SINCOSL: - { - process_ipa_clobber (fi, gimple_call_arg (t, 1)); - process_ipa_clobber (fi, gimple_call_arg (t, 2)); - return; - } - /* The following functions clobber their second argument. */ - case BUILT_IN_FREXP: - case BUILT_IN_FREXPF: - case BUILT_IN_FREXPL: - case BUILT_IN_LGAMMA_R: - case BUILT_IN_LGAMMAF_R: - case BUILT_IN_LGAMMAL_R: - case BUILT_IN_GAMMA_R: - case BUILT_IN_GAMMAF_R: - case BUILT_IN_GAMMAL_R: - case BUILT_IN_MODF: - case BUILT_IN_MODFF: - case BUILT_IN_MODFL: - { - process_ipa_clobber (fi, gimple_call_arg (t, 1)); - return; - } - /* The following functions clobber their third argument. */ - case BUILT_IN_REMQUO: - case BUILT_IN_REMQUOF: - case BUILT_IN_REMQUOL: - { - process_ipa_clobber (fi, gimple_call_arg (t, 2)); - return; - } - /* The following functions use what their first argument - points to. */ - case BUILT_IN_STRDUP: - case BUILT_IN_STRNDUP: - case BUILT_IN_REALLOC: - case BUILT_IN_INDEX: - case BUILT_IN_STRCHR: - case BUILT_IN_STRRCHR: - case BUILT_IN_MEMCHR: - { - tree src = gimple_call_arg (t, 0); - get_constraint_for_ptr_offset (src, NULL_TREE, &rhsc); - lhs = get_function_part_constraint (fi, fi_uses); - struct constraint_expr *rhsp; - FOR_EACH_VEC_ELT (rhsc, i, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - return; - } - /* The following functions use what their first and second argument - point to. */ - case BUILT_IN_STRSTR: - case BUILT_IN_STRPBRK: - { - tree src = gimple_call_arg (t, 0); - get_constraint_for_ptr_offset (src, NULL_TREE, &rhsc); - lhs = get_function_part_constraint (fi, fi_uses); - struct constraint_expr *rhsp; - FOR_EACH_VEC_ELT (rhsc, i, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - rhsc.truncate (0); - src = gimple_call_arg (t, 1); - get_constraint_for_ptr_offset (src, NULL_TREE, &rhsc); - FOR_EACH_VEC_ELT (rhsc, i, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - return; - } - /* The following functions neither read nor clobber memory. */ - case BUILT_IN_ASSUME_ALIGNED: - case BUILT_IN_FREE: - return; - /* Trampolines are of no interest to us. */ - case BUILT_IN_INIT_TRAMPOLINE: - case BUILT_IN_ADJUST_TRAMPOLINE: - return; - case BUILT_IN_VA_START: - case BUILT_IN_VA_END: - return; - case BUILT_IN_GOMP_PARALLEL: - case BUILT_IN_GOACC_PARALLEL: - { - unsigned int fnpos, argpos; - unsigned int implicit_use_args[2]; - unsigned int num_implicit_use_args = 0; - switch (DECL_FUNCTION_CODE (decl)) - { - case BUILT_IN_GOMP_PARALLEL: - /* __builtin_GOMP_parallel (fn, data, num_threads, flags). */ - fnpos = 0; - argpos = 1; - break; - case BUILT_IN_GOACC_PARALLEL: - /* __builtin_GOACC_parallel (flags_m, fn, mapnum, hostaddrs, - sizes, kinds, ...). */ - fnpos = 1; - argpos = 3; - implicit_use_args[num_implicit_use_args++] = 4; - implicit_use_args[num_implicit_use_args++] = 5; - break; - default: - gcc_unreachable (); - } - - tree fnarg = gimple_call_arg (t, fnpos); - gcc_assert (TREE_CODE (fnarg) == ADDR_EXPR); - tree fndecl = TREE_OPERAND (fnarg, 0); - if (fndecl_maybe_in_other_partition (fndecl)) - /* Fallthru to general call handling. */ - break; - - varinfo_t cfi = get_vi_for_tree (fndecl); - - tree arg = gimple_call_arg (t, argpos); - - /* Parameter passed by value is used. */ - lhs = get_function_part_constraint (fi, fi_uses); - struct constraint_expr *rhsp; - get_constraint_for (arg, &rhsc); - FOR_EACH_VEC_ELT (rhsc, j, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - rhsc.truncate (0); - - /* Handle parameters used by the call, but not used in cfi, as - implicitly used by cfi. */ - lhs = get_function_part_constraint (cfi, fi_uses); - for (unsigned i = 0; i < num_implicit_use_args; ++i) - { - tree arg = gimple_call_arg (t, implicit_use_args[i]); - get_constraint_for (arg, &rhsc); - FOR_EACH_VEC_ELT (rhsc, j, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - rhsc.truncate (0); - } - - /* The caller clobbers what the callee does. */ - lhs = get_function_part_constraint (fi, fi_clobbers); - rhs = get_function_part_constraint (cfi, fi_clobbers); - process_constraint (new_constraint (lhs, rhs)); - - /* The caller uses what the callee does. */ - lhs = get_function_part_constraint (fi, fi_uses); - rhs = get_function_part_constraint (cfi, fi_uses); - process_constraint (new_constraint (lhs, rhs)); - - return; - } - /* printf-style functions may have hooks to set pointers to - point to somewhere into the generated string. Leave them - for a later exercise... */ - default: - /* Fallthru to general call handling. */; - } - - /* Parameters passed by value are used. */ - lhs = get_function_part_constraint (fi, fi_uses); - for (i = 0; i < gimple_call_num_args (t); i++) - { - struct constraint_expr *rhsp; - tree arg = gimple_call_arg (t, i); - - if (TREE_CODE (arg) == SSA_NAME - || is_gimple_min_invariant (arg)) - continue; - - get_constraint_for_address_of (arg, &rhsc); - FOR_EACH_VEC_ELT (rhsc, j, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - rhsc.truncate (0); - } - - /* Build constraints for propagating clobbers/uses along the - callgraph edges. */ - cfi = get_fi_for_callee (call_stmt); - if (cfi->id == anything_id) - { - if (gimple_vdef (t)) - make_constraint_from (first_vi_for_offset (fi, fi_clobbers), - anything_id); - make_constraint_from (first_vi_for_offset (fi, fi_uses), - anything_id); - return; - } - - /* For callees without function info (that's external functions), - ESCAPED is clobbered and used. */ - if (cfi->decl - && TREE_CODE (cfi->decl) == FUNCTION_DECL - && !cfi->is_fn_info) - { - varinfo_t vi; - - if (gimple_vdef (t)) - make_copy_constraint (first_vi_for_offset (fi, fi_clobbers), - escaped_id); - make_copy_constraint (first_vi_for_offset (fi, fi_uses), escaped_id); - - /* Also honor the call statement use/clobber info. */ - if ((vi = lookup_call_clobber_vi (call_stmt)) != NULL) - make_copy_constraint (first_vi_for_offset (fi, fi_clobbers), - vi->id); - if ((vi = lookup_call_use_vi (call_stmt)) != NULL) - make_copy_constraint (first_vi_for_offset (fi, fi_uses), - vi->id); - return; - } - - /* Otherwise the caller clobbers and uses what the callee does. - ??? This should use a new complex constraint that filters - local variables of the callee. */ - if (gimple_vdef (t)) - { - lhs = get_function_part_constraint (fi, fi_clobbers); - rhs = get_function_part_constraint (cfi, fi_clobbers); - process_constraint (new_constraint (lhs, rhs)); - } - lhs = get_function_part_constraint (fi, fi_uses); - rhs = get_function_part_constraint (cfi, fi_uses); - process_constraint (new_constraint (lhs, rhs)); - } - else if (gimple_code (t) == GIMPLE_ASM) - { - /* ??? Ick. We can do better. */ - if (gimple_vdef (t)) - make_constraint_from (first_vi_for_offset (fi, fi_clobbers), - anything_id); - make_constraint_from (first_vi_for_offset (fi, fi_uses), - anything_id); - } -} - - -/* This structure is used during pushing fields onto the fieldstack - to track the offset of the field, since bitpos_of_field gives it - relative to its immediate containing type, and we want it relative - to the ultimate containing object. */ - -struct fieldoff -{ - /* Offset from the base of the base containing object to this field. */ - HOST_WIDE_INT offset; - - /* Size, in bits, of the field. */ - unsigned HOST_WIDE_INT size; - - unsigned has_unknown_size : 1; - - unsigned must_have_pointers : 1; - - unsigned may_have_pointers : 1; - - unsigned only_restrict_pointers : 1; - - tree restrict_pointed_type; -}; -typedef struct fieldoff fieldoff_s; - - -/* qsort comparison function for two fieldoff's PA and PB. */ - -static int -fieldoff_compare (const void *pa, const void *pb) -{ - const fieldoff_s *foa = (const fieldoff_s *)pa; - const fieldoff_s *fob = (const fieldoff_s *)pb; - unsigned HOST_WIDE_INT foasize, fobsize; - - if (foa->offset < fob->offset) - return -1; - else if (foa->offset > fob->offset) - return 1; - - foasize = foa->size; - fobsize = fob->size; - if (foasize < fobsize) - return -1; - else if (foasize > fobsize) - return 1; - return 0; -} - -/* Sort a fieldstack according to the field offset and sizes. */ -static void -sort_fieldstack (vec &fieldstack) -{ - fieldstack.qsort (fieldoff_compare); -} - -/* Return true if T is a type that can have subvars. */ - -static inline bool -type_can_have_subvars (const_tree t) -{ - /* Aggregates without overlapping fields can have subvars. */ - return TREE_CODE (t) == RECORD_TYPE; -} - -/* Return true if V is a tree that we can have subvars for. - Normally, this is any aggregate type. Also complex - types which are not gimple registers can have subvars. */ - -static inline bool -var_can_have_subvars (const_tree v) -{ - /* Volatile variables should never have subvars. */ - if (TREE_THIS_VOLATILE (v)) - return false; - - /* Non decls or memory tags can never have subvars. */ - if (!DECL_P (v)) - return false; - - return type_can_have_subvars (TREE_TYPE (v)); -} - -/* Return true if T is a type that does contain pointers. */ - -static bool -type_must_have_pointers (tree type) -{ - if (POINTER_TYPE_P (type)) - return true; - - if (TREE_CODE (type) == ARRAY_TYPE) - return type_must_have_pointers (TREE_TYPE (type)); - - /* A function or method can have pointers as arguments, so track - those separately. */ - if (FUNC_OR_METHOD_TYPE_P (type)) - return true; - - return false; -} - -static bool -field_must_have_pointers (tree t) -{ - return type_must_have_pointers (TREE_TYPE (t)); -} - -/* Given a TYPE, and a vector of field offsets FIELDSTACK, push all - the fields of TYPE onto fieldstack, recording their offsets along - the way. - - OFFSET is used to keep track of the offset in this entire - structure, rather than just the immediately containing structure. - Returns false if the caller is supposed to handle the field we - recursed for. */ - -static bool -push_fields_onto_fieldstack (tree type, vec *fieldstack, - unsigned HOST_WIDE_INT offset) -{ - tree field; - bool empty_p = true; - - if (TREE_CODE (type) != RECORD_TYPE) - return false; - - /* If the vector of fields is growing too big, bail out early. - Callers check for vec::length <= param_max_fields_for_field_sensitive, make - sure this fails. */ - if (fieldstack->length () > (unsigned)param_max_fields_for_field_sensitive) - return false; - - for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field)) - if (TREE_CODE (field) == FIELD_DECL) - { - bool push = false; - unsigned HOST_WIDE_INT foff = bitpos_of_field (field); - tree field_type = TREE_TYPE (field); - - if (!var_can_have_subvars (field) - || TREE_CODE (field_type) == QUAL_UNION_TYPE - || TREE_CODE (field_type) == UNION_TYPE) - push = true; - else if (!push_fields_onto_fieldstack - (field_type, fieldstack, offset + foff) - && (DECL_SIZE (field) - && !integer_zerop (DECL_SIZE (field)))) - /* Empty structures may have actual size, like in C++. So - see if we didn't push any subfields and the size is - nonzero, push the field onto the stack. */ - push = true; - - if (push) - { - fieldoff_s *pair = NULL; - bool has_unknown_size = false; - bool must_have_pointers_p; - - if (!fieldstack->is_empty ()) - pair = &fieldstack->last (); - - /* If there isn't anything at offset zero, create sth. */ - if (!pair - && offset + foff != 0) - { - fieldoff_s e - = {0, offset + foff, false, false, true, false, NULL_TREE}; - pair = fieldstack->safe_push (e); - } - - if (!DECL_SIZE (field) - || !tree_fits_uhwi_p (DECL_SIZE (field))) - has_unknown_size = true; - - /* If adjacent fields do not contain pointers merge them. */ - must_have_pointers_p = field_must_have_pointers (field); - if (pair - && !has_unknown_size - && !must_have_pointers_p - && !pair->must_have_pointers - && !pair->has_unknown_size - && pair->offset + pair->size == offset + foff) - { - pair->size += tree_to_uhwi (DECL_SIZE (field)); - } - else - { - fieldoff_s e; - e.offset = offset + foff; - e.has_unknown_size = has_unknown_size; - if (!has_unknown_size) - e.size = tree_to_uhwi (DECL_SIZE (field)); - else - e.size = -1; - e.must_have_pointers = must_have_pointers_p; - e.may_have_pointers = true; - e.only_restrict_pointers - = (!has_unknown_size - && POINTER_TYPE_P (field_type) - && TYPE_RESTRICT (field_type)); - if (e.only_restrict_pointers) - e.restrict_pointed_type = TREE_TYPE (field_type); - fieldstack->safe_push (e); - } - } - - empty_p = false; - } - - return !empty_p; -} - -/* Count the number of arguments DECL has, and set IS_VARARGS to true - if it is a varargs function. */ - -static unsigned int -count_num_arguments (tree decl, bool *is_varargs) -{ - unsigned int num = 0; - tree t; - - /* Capture named arguments for K&R functions. They do not - have a prototype and thus no TYPE_ARG_TYPES. */ - for (t = DECL_ARGUMENTS (decl); t; t = DECL_CHAIN (t)) - ++num; - - /* Check if the function has variadic arguments. */ - for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t)) - if (TREE_VALUE (t) == void_type_node) - break; - if (!t) - *is_varargs = true; - - return num; -} - -/* Creation function node for DECL, using NAME, and return the index - of the variable we've created for the function. If NONLOCAL_p, create - initial constraints. */ - -static varinfo_t -create_function_info_for (tree decl, const char *name, bool add_id, - bool nonlocal_p) -{ - struct function *fn = DECL_STRUCT_FUNCTION (decl); - varinfo_t vi, prev_vi; - tree arg; - unsigned int i; - bool is_varargs = false; - unsigned int num_args = count_num_arguments (decl, &is_varargs); - - /* Create the variable info. */ - - vi = new_var_info (decl, name, add_id); - vi->offset = 0; - vi->size = 1; - vi->fullsize = fi_parm_base + num_args; - vi->is_fn_info = 1; - vi->may_have_pointers = false; - if (is_varargs) - vi->fullsize = ~0; - insert_vi_for_tree (vi->decl, vi); - - prev_vi = vi; - - /* Create a variable for things the function clobbers and one for - things the function uses. */ - { - varinfo_t clobbervi, usevi; - const char *newname; - char *tempname; - - tempname = xasprintf ("%s.clobber", name); - newname = ggc_strdup (tempname); - free (tempname); - - clobbervi = new_var_info (NULL, newname, false); - clobbervi->offset = fi_clobbers; - clobbervi->size = 1; - clobbervi->fullsize = vi->fullsize; - clobbervi->is_full_var = true; - clobbervi->is_global_var = false; - clobbervi->is_reg_var = true; - - gcc_assert (prev_vi->offset < clobbervi->offset); - prev_vi->next = clobbervi->id; - prev_vi = clobbervi; - - tempname = xasprintf ("%s.use", name); - newname = ggc_strdup (tempname); - free (tempname); - - usevi = new_var_info (NULL, newname, false); - usevi->offset = fi_uses; - usevi->size = 1; - usevi->fullsize = vi->fullsize; - usevi->is_full_var = true; - usevi->is_global_var = false; - usevi->is_reg_var = true; - - gcc_assert (prev_vi->offset < usevi->offset); - prev_vi->next = usevi->id; - prev_vi = usevi; - } - - /* And one for the static chain. */ - if (fn->static_chain_decl != NULL_TREE) - { - varinfo_t chainvi; - const char *newname; - char *tempname; - - tempname = xasprintf ("%s.chain", name); - newname = ggc_strdup (tempname); - free (tempname); - - chainvi = new_var_info (fn->static_chain_decl, newname, false); - chainvi->offset = fi_static_chain; - chainvi->size = 1; - chainvi->fullsize = vi->fullsize; - chainvi->is_full_var = true; - chainvi->is_global_var = false; - - insert_vi_for_tree (fn->static_chain_decl, chainvi); - - if (nonlocal_p - && chainvi->may_have_pointers) - make_constraint_from (chainvi, nonlocal_id); - - gcc_assert (prev_vi->offset < chainvi->offset); - prev_vi->next = chainvi->id; - prev_vi = chainvi; - } - - /* Create a variable for the return var. */ - if (DECL_RESULT (decl) != NULL - || !VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl)))) - { - varinfo_t resultvi; - const char *newname; - char *tempname; - tree resultdecl = decl; - - if (DECL_RESULT (decl)) - resultdecl = DECL_RESULT (decl); - - tempname = xasprintf ("%s.result", name); - newname = ggc_strdup (tempname); - free (tempname); - - resultvi = new_var_info (resultdecl, newname, false); - resultvi->offset = fi_result; - resultvi->size = 1; - resultvi->fullsize = vi->fullsize; - resultvi->is_full_var = true; - if (DECL_RESULT (decl)) - resultvi->may_have_pointers = true; - - if (DECL_RESULT (decl)) - insert_vi_for_tree (DECL_RESULT (decl), resultvi); - - if (nonlocal_p - && DECL_RESULT (decl) - && DECL_BY_REFERENCE (DECL_RESULT (decl))) - make_constraint_from (resultvi, nonlocal_id); - - gcc_assert (prev_vi->offset < resultvi->offset); - prev_vi->next = resultvi->id; - prev_vi = resultvi; - } - - /* We also need to make function return values escape. Nothing - escapes by returning from main though. */ - if (nonlocal_p - && !MAIN_NAME_P (DECL_NAME (decl))) - { - varinfo_t fi, rvi; - fi = lookup_vi_for_tree (decl); - rvi = first_vi_for_offset (fi, fi_result); - if (rvi && rvi->offset == fi_result) - make_copy_constraint (get_varinfo (escaped_id), rvi->id); - } - - /* Set up variables for each argument. */ - arg = DECL_ARGUMENTS (decl); - for (i = 0; i < num_args; i++) - { - varinfo_t argvi; - const char *newname; - char *tempname; - tree argdecl = decl; - - if (arg) - argdecl = arg; - - tempname = xasprintf ("%s.arg%d", name, i); - newname = ggc_strdup (tempname); - free (tempname); - - argvi = new_var_info (argdecl, newname, false); - argvi->offset = fi_parm_base + i; - argvi->size = 1; - argvi->is_full_var = true; - argvi->fullsize = vi->fullsize; - if (arg) - argvi->may_have_pointers = true; - - if (arg) - insert_vi_for_tree (arg, argvi); - - if (nonlocal_p - && argvi->may_have_pointers) - make_constraint_from (argvi, nonlocal_id); - - gcc_assert (prev_vi->offset < argvi->offset); - prev_vi->next = argvi->id; - prev_vi = argvi; - if (arg) - arg = DECL_CHAIN (arg); - } - - /* Add one representative for all further args. */ - if (is_varargs) - { - varinfo_t argvi; - const char *newname; - char *tempname; - tree decl; - - tempname = xasprintf ("%s.varargs", name); - newname = ggc_strdup (tempname); - free (tempname); - - /* We need sth that can be pointed to for va_start. */ - decl = build_fake_var_decl (ptr_type_node); - - argvi = new_var_info (decl, newname, false); - argvi->offset = fi_parm_base + num_args; - argvi->size = ~0; - argvi->is_full_var = true; - argvi->is_heap_var = true; - argvi->fullsize = vi->fullsize; - - if (nonlocal_p - && argvi->may_have_pointers) - make_constraint_from (argvi, nonlocal_id); - - gcc_assert (prev_vi->offset < argvi->offset); - prev_vi->next = argvi->id; - } - - return vi; -} - - -/* Return true if FIELDSTACK contains fields that overlap. - FIELDSTACK is assumed to be sorted by offset. */ - -static bool -check_for_overlaps (const vec &fieldstack) -{ - fieldoff_s *fo = NULL; - unsigned int i; - HOST_WIDE_INT lastoffset = -1; - - FOR_EACH_VEC_ELT (fieldstack, i, fo) - { - if (fo->offset == lastoffset) - return true; - lastoffset = fo->offset; - } - return false; -} - -/* Create a varinfo structure for NAME and DECL, and add it to VARMAP. - This will also create any varinfo structures necessary for fields - of DECL. DECL is a function parameter if HANDLE_PARAM is set. - HANDLED_STRUCT_TYPE is used to register struct types reached by following - restrict pointers. This is needed to prevent infinite recursion. - If ADD_RESTRICT, pretend that the pointer NAME is restrict even if DECL - does not advertise it. */ - -static varinfo_t -create_variable_info_for_1 (tree decl, const char *name, bool add_id, - bool handle_param, bitmap handled_struct_type, - bool add_restrict = false) -{ - varinfo_t vi, newvi; - tree decl_type = TREE_TYPE (decl); - tree declsize = DECL_P (decl) ? DECL_SIZE (decl) : TYPE_SIZE (decl_type); - auto_vec fieldstack; - fieldoff_s *fo; - unsigned int i; - - if (!declsize - || !tree_fits_uhwi_p (declsize)) - { - vi = new_var_info (decl, name, add_id); - vi->offset = 0; - vi->size = ~0; - vi->fullsize = ~0; - vi->is_unknown_size_var = true; - vi->is_full_var = true; - vi->may_have_pointers = true; - return vi; - } - - /* Collect field information. */ - if (use_field_sensitive - && var_can_have_subvars (decl) - /* ??? Force us to not use subfields for globals in IPA mode. - Else we'd have to parse arbitrary initializers. */ - && !(in_ipa_mode - && is_global_var (decl))) - { - fieldoff_s *fo = NULL; - bool notokay = false; - unsigned int i; - - push_fields_onto_fieldstack (decl_type, &fieldstack, 0); - - for (i = 0; !notokay && fieldstack.iterate (i, &fo); i++) - if (fo->has_unknown_size - || fo->offset < 0) - { - notokay = true; - break; - } - - /* We can't sort them if we have a field with a variable sized type, - which will make notokay = true. In that case, we are going to return - without creating varinfos for the fields anyway, so sorting them is a - waste to boot. */ - if (!notokay) - { - sort_fieldstack (fieldstack); - /* Due to some C++ FE issues, like PR 22488, we might end up - what appear to be overlapping fields even though they, - in reality, do not overlap. Until the C++ FE is fixed, - we will simply disable field-sensitivity for these cases. */ - notokay = check_for_overlaps (fieldstack); - } - - if (notokay) - fieldstack.release (); - } - - /* If we didn't end up collecting sub-variables create a full - variable for the decl. */ - if (fieldstack.length () == 0 - || fieldstack.length () > (unsigned)param_max_fields_for_field_sensitive) - { - vi = new_var_info (decl, name, add_id); - vi->offset = 0; - vi->may_have_pointers = true; - vi->fullsize = tree_to_uhwi (declsize); - vi->size = vi->fullsize; - vi->is_full_var = true; - if (POINTER_TYPE_P (decl_type) - && (TYPE_RESTRICT (decl_type) || add_restrict)) - vi->only_restrict_pointers = 1; - if (vi->only_restrict_pointers - && !type_contains_placeholder_p (TREE_TYPE (decl_type)) - && handle_param - && !bitmap_bit_p (handled_struct_type, - TYPE_UID (TREE_TYPE (decl_type)))) - { - varinfo_t rvi; - tree heapvar = build_fake_var_decl (TREE_TYPE (decl_type)); - DECL_EXTERNAL (heapvar) = 1; - if (var_can_have_subvars (heapvar)) - bitmap_set_bit (handled_struct_type, - TYPE_UID (TREE_TYPE (decl_type))); - rvi = create_variable_info_for_1 (heapvar, "PARM_NOALIAS", true, - true, handled_struct_type); - if (var_can_have_subvars (heapvar)) - bitmap_clear_bit (handled_struct_type, - TYPE_UID (TREE_TYPE (decl_type))); - rvi->is_restrict_var = 1; - insert_vi_for_tree (heapvar, rvi); - make_constraint_from (vi, rvi->id); - make_param_constraints (rvi); - } - fieldstack.release (); - return vi; - } - - vi = new_var_info (decl, name, add_id); - vi->fullsize = tree_to_uhwi (declsize); - if (fieldstack.length () == 1) - vi->is_full_var = true; - for (i = 0, newvi = vi; - fieldstack.iterate (i, &fo); - ++i, newvi = vi_next (newvi)) - { - const char *newname = NULL; - char *tempname; - - if (dump_file) - { - if (fieldstack.length () != 1) - { - tempname - = xasprintf ("%s." HOST_WIDE_INT_PRINT_DEC - "+" HOST_WIDE_INT_PRINT_DEC, name, - fo->offset, fo->size); - newname = ggc_strdup (tempname); - free (tempname); - } - } - else - newname = "NULL"; - - if (newname) - newvi->name = newname; - newvi->offset = fo->offset; - newvi->size = fo->size; - newvi->fullsize = vi->fullsize; - newvi->may_have_pointers = fo->may_have_pointers; - newvi->only_restrict_pointers = fo->only_restrict_pointers; - if (handle_param - && newvi->only_restrict_pointers - && !type_contains_placeholder_p (fo->restrict_pointed_type) - && !bitmap_bit_p (handled_struct_type, - TYPE_UID (fo->restrict_pointed_type))) - { - varinfo_t rvi; - tree heapvar = build_fake_var_decl (fo->restrict_pointed_type); - DECL_EXTERNAL (heapvar) = 1; - if (var_can_have_subvars (heapvar)) - bitmap_set_bit (handled_struct_type, - TYPE_UID (fo->restrict_pointed_type)); - rvi = create_variable_info_for_1 (heapvar, "PARM_NOALIAS", true, - true, handled_struct_type); - if (var_can_have_subvars (heapvar)) - bitmap_clear_bit (handled_struct_type, - TYPE_UID (fo->restrict_pointed_type)); - rvi->is_restrict_var = 1; - insert_vi_for_tree (heapvar, rvi); - make_constraint_from (newvi, rvi->id); - make_param_constraints (rvi); - } - if (i + 1 < fieldstack.length ()) - { - varinfo_t tem = new_var_info (decl, name, false); - newvi->next = tem->id; - tem->head = vi->id; - } - } - - return vi; + stats.num_avoided_edges); } -static unsigned int -create_variable_info_for (tree decl, const char *name, bool add_id) +/* Dump points-to information to OUTFILE. */ + +void +dump_sa_points_to_info (FILE *outfile) { - /* First see if we are dealing with an ifunc resolver call and - assiociate that with a call to the resolver function result. */ - cgraph_node *node; - if (in_ipa_mode - && TREE_CODE (decl) == FUNCTION_DECL - && (node = cgraph_node::get (decl)) - && node->ifunc_resolver) + fprintf (outfile, "\nPoints-to sets\n\n"); + + for (unsigned i = 1; i < varmap.length (); i++) { - varinfo_t fi = get_vi_for_tree (node->get_alias_target ()->decl); - constraint_expr rhs - = get_function_part_constraint (fi, fi_result); - fi = new_var_info (NULL_TREE, "ifuncres", true); - fi->is_reg_var = true; - constraint_expr lhs; - lhs.type = SCALAR; - lhs.var = fi->id; - lhs.offset = 0; - process_constraint (new_constraint (lhs, rhs)); - insert_vi_for_tree (decl, fi); - return fi->id; + varinfo_t vi = get_varinfo (i); + if (!vi->may_have_pointers) + continue; + dump_solution_for_var (outfile, i); } +} - varinfo_t vi = create_variable_info_for_1 (decl, name, add_id, false, NULL); - unsigned int id = vi->id; - - insert_vi_for_tree (decl, vi); - if (!VAR_P (decl)) - return id; +/* Debug points-to information to stderr. */ - /* Create initial constraints for globals. */ - for (; vi; vi = vi_next (vi)) - { - if (!vi->may_have_pointers - || !vi->is_global_var) - continue; +DEBUG_FUNCTION void +debug_sa_points_to_info (void) +{ + dump_sa_points_to_info (stderr); +} - /* Mark global restrict qualified pointers. */ - if ((POINTER_TYPE_P (TREE_TYPE (decl)) - && TYPE_RESTRICT (TREE_TYPE (decl))) - || vi->only_restrict_pointers) - { - varinfo_t rvi - = make_constraint_from_global_restrict (vi, "GLOBAL_RESTRICT", - true); - /* ??? For now exclude reads from globals as restrict sources - if those are not (indirectly) from incoming parameters. */ - rvi->is_restrict_var = false; - continue; - } +/* Dump varinfo VI to FILE. */ - /* In non-IPA mode the initializer from nonlocal is all we need. */ - if (!in_ipa_mode - || DECL_HARD_REGISTER (decl)) - make_copy_constraint (vi, nonlocal_id); +void +dump_varinfo (FILE *file, varinfo_t vi) +{ + if (vi == NULL) + return; - /* In IPA mode parse the initializer and generate proper constraints - for it. */ - else - { - varpool_node *vnode = varpool_node::get (decl); + fprintf (file, "%u: %s\n", vi->id, vi->name); - /* For escaped variables initialize them from nonlocal. */ - if (!vnode || !vnode->all_refs_explicit_p ()) - make_copy_constraint (vi, nonlocal_id); + const char *sep = " "; + if (vi->is_artificial_var) + fprintf (file, "%sartificial", sep); + if (vi->is_special_var) + fprintf (file, "%sspecial", sep); + if (vi->is_unknown_size_var) + fprintf (file, "%sunknown-size", sep); + if (vi->is_full_var) + fprintf (file, "%sfull", sep); + if (vi->is_heap_var) + fprintf (file, "%sheap", sep); + if (vi->may_have_pointers) + fprintf (file, "%smay-have-pointers", sep); + if (vi->only_restrict_pointers) + fprintf (file, "%sonly-restrict-pointers", sep); + if (vi->is_restrict_var) + fprintf (file, "%sis-restrict-var", sep); + if (vi->is_global_var) + fprintf (file, "%sglobal", sep); + if (vi->is_ipa_escape_point) + fprintf (file, "%sipa-escape-point", sep); + if (vi->is_fn_info) + fprintf (file, "%sfn-info", sep); + if (vi->ruid) + fprintf (file, "%srestrict-uid:%u", sep, vi->ruid); + if (vi->next) + fprintf (file, "%snext:%u", sep, vi->next); + if (vi->head != vi->id) + fprintf (file, "%shead:%u", sep, vi->head); + if (vi->offset) + fprintf (file, "%soffset:" HOST_WIDE_INT_PRINT_DEC, sep, vi->offset); + if (vi->size != ~HOST_WIDE_INT_0U) + fprintf (file, "%ssize:" HOST_WIDE_INT_PRINT_DEC, sep, vi->size); + if (vi->fullsize != ~HOST_WIDE_INT_0U && vi->fullsize != vi->size) + fprintf (file, "%sfullsize:" HOST_WIDE_INT_PRINT_DEC, sep, + vi->fullsize); + fprintf (file, "\n"); - /* While we can in theory walk references for the varpool - node that does not cover zero-initialization or references - to the constant pool. */ - if (DECL_INITIAL (decl)) - { - auto_vec rhsc; - struct constraint_expr lhs, *rhsp; - unsigned i; - lhs.var = vi->id; - lhs.offset = 0; - lhs.type = SCALAR; - get_constraint_for (DECL_INITIAL (decl), &rhsc); - FOR_EACH_VEC_ELT (rhsc, i, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - /* If this is a variable that escapes from the unit - the initializer escapes as well. */ - if (!vnode || !vnode->all_refs_explicit_p ()) - { - lhs.var = escaped_id; - lhs.offset = 0; - lhs.type = SCALAR; - FOR_EACH_VEC_ELT (rhsc, i, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - } - } - } + if (vi->solution && !bitmap_empty_p (vi->solution)) + { + bitmap_iterator bi; + unsigned i; + fprintf (file, " solution: {"); + EXECUTE_IF_SET_IN_BITMAP (vi->solution, 0, i, bi) + fprintf (file, " %u", i); + fprintf (file, " }\n"); } - return id; + if (vi->oldsolution && !bitmap_empty_p (vi->oldsolution) + && !bitmap_equal_p (vi->solution, vi->oldsolution)) + { + bitmap_iterator bi; + unsigned i; + fprintf (file, " oldsolution: {"); + EXECUTE_IF_SET_IN_BITMAP (vi->oldsolution, 0, i, bi) + fprintf (file, " %u", i); + fprintf (file, " }\n"); + } } -/* Register the constraints for function parameter related VI. */ +/* Dump varinfo VI to stderr. */ -static void -make_param_constraints (varinfo_t vi) +DEBUG_FUNCTION void +debug_varinfo (varinfo_t vi) { - for (; vi; vi = vi_next (vi)) - { - if (vi->only_restrict_pointers) - ; - else if (vi->may_have_pointers) - make_constraint_from (vi, nonlocal_id); - - if (vi->is_full_var) - break; - } + dump_varinfo (stderr, vi); } -/* Create varinfo structures for all of the variables in the - function for intraprocedural mode. */ +/* Dump varmap to FILE. */ -static void -intra_create_variable_infos (struct function *fn) +void +dump_varmap (FILE *file) { - tree t; - bitmap handled_struct_type = NULL; - bool this_parm_in_ctor = DECL_CXX_CONSTRUCTOR_P (fn->decl); - - /* For each incoming pointer argument arg, create the constraint ARG - = NONLOCAL or a dummy variable if it is a restrict qualified - passed-by-reference argument. */ - for (t = DECL_ARGUMENTS (fn->decl); t; t = DECL_CHAIN (t)) - { - if (handled_struct_type == NULL) - handled_struct_type = BITMAP_ALLOC (NULL); - - varinfo_t p - = create_variable_info_for_1 (t, alias_get_name (t), false, true, - handled_struct_type, this_parm_in_ctor); - insert_vi_for_tree (t, p); + if (varmap.length () == 0) + return; - make_param_constraints (p); + fprintf (file, "variables:\n"); - this_parm_in_ctor = false; + for (unsigned int i = 0; i < varmap.length (); ++i) + { + varinfo_t vi = get_varinfo (i); + dump_varinfo (file, vi); } - if (handled_struct_type != NULL) - BITMAP_FREE (handled_struct_type); + fprintf (file, "\n"); +} - /* Add a constraint for a result decl that is passed by reference. */ - if (DECL_RESULT (fn->decl) - && DECL_BY_REFERENCE (DECL_RESULT (fn->decl))) - { - varinfo_t p, result_vi = get_vi_for_tree (DECL_RESULT (fn->decl)); +/* Dump varmap to stderr. */ - for (p = result_vi; p; p = vi_next (p)) - make_constraint_from (p, nonlocal_id); - } +DEBUG_FUNCTION void +debug_varmap (void) +{ + dump_varmap (stderr); +} - /* Add a constraint for the incoming static chain parameter. */ - if (fn->static_chain_decl != NULL_TREE) - { - varinfo_t p, chain_vi = get_vi_for_tree (fn->static_chain_decl); +} // namespace pointer_analysis - for (p = chain_vi; p; p = vi_next (p)) - make_constraint_from (p, nonlocal_id); - } -} /* Structure used to put solution bitmaps in a hashtable so they can be shared among variables with the same points-to set. */ @@ -4398,7 +723,6 @@ shared_bitmap_lookup (bitmap pt_vars) return (*slot)->pt_vars; } - /* Add a bitmap to the shared bitmap hashtable. */ static void @@ -4415,7 +739,6 @@ shared_bitmap_add (bitmap pt_vars) *slot = sbi; } - /* Set bits in INTO corresponding to the variable uids in solution set FROM. */ static void @@ -4914,220 +1237,6 @@ pt_solutions_intersect (struct pt_solution *pt1, struct pt_solution *pt2) } -/* Initialize the always-existing constraint variables for NULL - ANYTHING, READONLY, and INTEGER */ - -static void -init_base_vars (void) -{ - struct constraint_expr lhs, rhs; - varinfo_t var_anything; - varinfo_t var_nothing; - varinfo_t var_string; - varinfo_t var_escaped; - varinfo_t var_nonlocal; - varinfo_t var_escaped_return; - varinfo_t var_storedanything; - varinfo_t var_integer; - - /* Variable ID zero is reserved and should be NULL. */ - varmap.safe_push (NULL); - - /* Create the NULL variable, used to represent that a variable points - to NULL. */ - var_nothing = new_var_info (NULL_TREE, "NULL", false); - gcc_assert (var_nothing->id == nothing_id); - var_nothing->is_artificial_var = 1; - var_nothing->offset = 0; - var_nothing->size = ~0; - var_nothing->fullsize = ~0; - var_nothing->is_special_var = 1; - var_nothing->may_have_pointers = 0; - var_nothing->is_global_var = 0; - - /* Create the ANYTHING variable, used to represent that a variable - points to some unknown piece of memory. */ - var_anything = new_var_info (NULL_TREE, "ANYTHING", false); - gcc_assert (var_anything->id == anything_id); - var_anything->is_artificial_var = 1; - var_anything->size = ~0; - var_anything->offset = 0; - var_anything->fullsize = ~0; - var_anything->is_special_var = 1; - - /* Anything points to anything. This makes deref constraints just - work in the presence of linked list and other p = *p type loops, - by saying that *ANYTHING = ANYTHING. */ - lhs.type = SCALAR; - lhs.var = anything_id; - lhs.offset = 0; - rhs.type = ADDRESSOF; - rhs.var = anything_id; - rhs.offset = 0; - - /* This specifically does not use process_constraint because - process_constraint ignores all anything = anything constraints, since all - but this one are redundant. */ - constraints.safe_push (new_constraint (lhs, rhs)); - - /* Create the STRING variable, used to represent that a variable - points to a string literal. String literals don't contain - pointers so STRING doesn't point to anything. */ - var_string = new_var_info (NULL_TREE, "STRING", false); - gcc_assert (var_string->id == string_id); - var_string->is_artificial_var = 1; - var_string->offset = 0; - var_string->size = ~0; - var_string->fullsize = ~0; - var_string->is_special_var = 1; - var_string->may_have_pointers = 0; - - /* Create the ESCAPED variable, used to represent the set of escaped - memory. */ - var_escaped = new_var_info (NULL_TREE, "ESCAPED", false); - gcc_assert (var_escaped->id == escaped_id); - var_escaped->is_artificial_var = 1; - var_escaped->offset = 0; - var_escaped->size = ~0; - var_escaped->fullsize = ~0; - var_escaped->is_special_var = 0; - - /* Create the NONLOCAL variable, used to represent the set of nonlocal - memory. */ - var_nonlocal = new_var_info (NULL_TREE, "NONLOCAL", false); - gcc_assert (var_nonlocal->id == nonlocal_id); - var_nonlocal->is_artificial_var = 1; - var_nonlocal->offset = 0; - var_nonlocal->size = ~0; - var_nonlocal->fullsize = ~0; - var_nonlocal->is_special_var = 1; - - /* Create the ESCAPED_RETURN variable, used to represent the set of escaped - memory via a regular return stmt. */ - var_escaped_return = new_var_info (NULL_TREE, "ESCAPED_RETURN", false); - gcc_assert (var_escaped_return->id == escaped_return_id); - var_escaped_return->is_artificial_var = 1; - var_escaped_return->offset = 0; - var_escaped_return->size = ~0; - var_escaped_return->fullsize = ~0; - var_escaped_return->is_special_var = 0; - - /* ESCAPED = *ESCAPED, because escaped is may-deref'd at calls, etc. */ - lhs.type = SCALAR; - lhs.var = escaped_id; - lhs.offset = 0; - rhs.type = DEREF; - rhs.var = escaped_id; - rhs.offset = 0; - process_constraint (new_constraint (lhs, rhs)); - - /* ESCAPED = ESCAPED + UNKNOWN_OFFSET, because if a sub-field escapes the - whole variable escapes. */ - lhs.type = SCALAR; - lhs.var = escaped_id; - lhs.offset = 0; - rhs.type = SCALAR; - rhs.var = escaped_id; - rhs.offset = UNKNOWN_OFFSET; - process_constraint (new_constraint (lhs, rhs)); - - /* *ESCAPED = NONLOCAL. This is true because we have to assume - everything pointed to by escaped points to what global memory can - point to. */ - lhs.type = DEREF; - lhs.var = escaped_id; - lhs.offset = 0; - rhs.type = SCALAR; - rhs.var = nonlocal_id; - rhs.offset = 0; - process_constraint (new_constraint (lhs, rhs)); - - /* NONLOCAL = &NONLOCAL, NONLOCAL = &ESCAPED. This is true because - global memory may point to global memory and escaped memory. */ - lhs.type = SCALAR; - lhs.var = nonlocal_id; - lhs.offset = 0; - rhs.type = ADDRESSOF; - rhs.var = nonlocal_id; - rhs.offset = 0; - process_constraint (new_constraint (lhs, rhs)); - rhs.type = ADDRESSOF; - rhs.var = escaped_id; - rhs.offset = 0; - process_constraint (new_constraint (lhs, rhs)); - - /* Transitively close ESCAPED_RETURN. - ESCAPED_RETURN = ESCAPED_RETURN + UNKNOWN_OFFSET - ESCAPED_RETURN = *ESCAPED_RETURN. */ - lhs.type = SCALAR; - lhs.var = escaped_return_id; - lhs.offset = 0; - rhs.type = SCALAR; - rhs.var = escaped_return_id; - rhs.offset = UNKNOWN_OFFSET; - process_constraint (new_constraint (lhs, rhs)); - lhs.type = SCALAR; - lhs.var = escaped_return_id; - lhs.offset = 0; - rhs.type = DEREF; - rhs.var = escaped_return_id; - rhs.offset = 0; - process_constraint (new_constraint (lhs, rhs)); - - /* Create the STOREDANYTHING variable, used to represent the set of - variables stored to *ANYTHING. */ - var_storedanything = new_var_info (NULL_TREE, "STOREDANYTHING", false); - gcc_assert (var_storedanything->id == storedanything_id); - var_storedanything->is_artificial_var = 1; - var_storedanything->offset = 0; - var_storedanything->size = ~0; - var_storedanything->fullsize = ~0; - var_storedanything->is_special_var = 0; - - /* Create the INTEGER variable, used to represent that a variable points - to what an INTEGER "points to". */ - var_integer = new_var_info (NULL_TREE, "INTEGER", false); - gcc_assert (var_integer->id == integer_id); - var_integer->is_artificial_var = 1; - var_integer->size = ~0; - var_integer->fullsize = ~0; - var_integer->offset = 0; - var_integer->is_special_var = 1; - - /* INTEGER = ANYTHING, because we don't know where a dereference of - a random integer will point to. */ - lhs.type = SCALAR; - lhs.var = integer_id; - lhs.offset = 0; - rhs.type = ADDRESSOF; - rhs.var = anything_id; - rhs.offset = 0; - process_constraint (new_constraint (lhs, rhs)); -} - -/* Initialize constraint builder. */ - -static void -init_constraint_builder (void) -{ - vi_for_tree = new hash_map; - call_stmt_vars = new hash_map; - gcc_obstack_init (&fake_var_decl_obstack); - - init_base_vars (); -} - -/* Deallocate constraint builder globals. */ - -static void -delete_constraint_builder (void) -{ - delete vi_for_tree; - delete call_stmt_vars; - constraint_pool.release (); - obstack_free (&fake_var_decl_obstack, NULL); -} - /* Initialize things necessary to perform PTA. */ static void @@ -5150,43 +1259,6 @@ init_alias_vars (void) init_constraint_builder (); } -/* Build constraints for intraprocedural mode. */ - -static void -intra_build_constraints (void) -{ - basic_block bb; - - intra_create_variable_infos (cfun); - - /* Now walk all statements and build the constraint set. */ - FOR_EACH_BB_FN (bb, cfun) - { - for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi); - gsi_next (&gsi)) - { - gphi *phi = gsi.phi (); - - if (! virtual_operand_p (gimple_phi_result (phi))) - find_func_aliases (cfun, phi); - } - - for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi); - gsi_next (&gsi)) - { - gimple *stmt = gsi_stmt (gsi); - - find_func_aliases (cfun, stmt); - } - } - - if (dump_file && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, "Points-to analysis\n\nConstraints:\n\n"); - dump_constraints (dump_file, 0); - } -} - /* Create points-to sets for the current function. See the comments at the start of the file for an algorithmic overview. */ @@ -5324,7 +1396,6 @@ compute_points_to_sets (void) timevar_pop (TV_TREE_PTA); } - /* Delete created points-to sets. */ static void @@ -5350,6 +1421,7 @@ delete_points_to_sets (void) delete_constraint_builder (); } + struct vls_data { unsigned short clique; @@ -5607,6 +1679,7 @@ compute_dependence_clique (void) BITMAP_FREE (rvars); } + /* Compute points-to information for every SSA_NAME pointer in the current function and compute the transitive closure of escaped variables to re-initialize the call-clobber states of local variables. */ @@ -5732,214 +1805,6 @@ struct pt_solution ipa_escaped_pt = { true, false, false, false, false, false, false, false, false, false, false, NULL }; -/* Associate node with varinfo DATA. Worker for - cgraph_for_symbol_thunks_and_aliases. */ -static bool -associate_varinfo_to_alias (struct cgraph_node *node, void *data) -{ - if ((node->alias - || (node->thunk - && ! node->inlined_to)) - && node->analyzed - && !node->ifunc_resolver) - insert_vi_for_tree (node->decl, (varinfo_t)data); - return false; -} - -/* Compute whether node is refered to non-locally. Worker for - cgraph_for_symbol_thunks_and_aliases. */ -static bool -refered_from_nonlocal_fn (struct cgraph_node *node, void *data) -{ - bool *nonlocal_p = (bool *)data; - *nonlocal_p |= (node->used_from_other_partition - || DECL_EXTERNAL (node->decl) - || TREE_PUBLIC (node->decl) - || node->force_output - || lookup_attribute ("noipa", DECL_ATTRIBUTES (node->decl))); - return false; -} - -/* Same for varpool nodes. */ -static bool -refered_from_nonlocal_var (struct varpool_node *node, void *data) -{ - bool *nonlocal_p = (bool *)data; - *nonlocal_p |= (node->used_from_other_partition - || DECL_EXTERNAL (node->decl) - || TREE_PUBLIC (node->decl) - || node->force_output); - return false; -} - -/* Create function infos. */ - -static void -ipa_create_function_infos (void) -{ - struct cgraph_node *node; - unsigned int constr_count = constraints.length (); - - FOR_EACH_DEFINED_FUNCTION (node) - { - varinfo_t vi; - /* Nodes without a body in this partition are not interesting. - Especially do not visit clones at this point for now - we - get duplicate decls there for inline clones at least. */ - if (!node->has_gimple_body_p () - || node->in_other_partition - || node->inlined_to) - continue; - node->get_body (); - - gcc_assert (!node->clone_of); - - /* For externally visible or attribute used annotated functions use - local constraints for their arguments. - For local functions we see all callers and thus do not need initial - constraints for parameters. */ - bool nonlocal_p = (node->used_from_other_partition - || DECL_EXTERNAL (node->decl) - || TREE_PUBLIC (node->decl) - || node->force_output - || lookup_attribute ("noipa", - DECL_ATTRIBUTES (node->decl))); - node->call_for_symbol_thunks_and_aliases (refered_from_nonlocal_fn, - &nonlocal_p, true); - - vi = create_function_info_for (node->decl, - alias_get_name (node->decl), false, - nonlocal_p); - if (dump_file && (dump_flags & TDF_DETAILS) - && constr_count != constraints.length ()) - { - fprintf (dump_file, - "Generating initial constraints for %s", - node->dump_name ()); - if (DECL_ASSEMBLER_NAME_SET_P (node->decl)) - fprintf (dump_file, " (%s)", - IDENTIFIER_POINTER - (DECL_ASSEMBLER_NAME (node->decl))); - fprintf (dump_file, "\n\n"); - dump_constraints (dump_file, constr_count); - fprintf (dump_file, "\n"); - - constr_count = constraints.length (); - } - - node->call_for_symbol_thunks_and_aliases - (associate_varinfo_to_alias, vi, true); - } -} - -/* Create constraints for global variables and their initializers. */ - -static void -ipa_create_global_variable_infos (void) -{ - varpool_node *var; - unsigned int constr_count = constraints.length (); - - FOR_EACH_VARIABLE (var) - { - if (var->alias && var->analyzed) - continue; - - varinfo_t vi = get_vi_for_tree (var->decl); - - /* For the purpose of IPA PTA unit-local globals are not - escape points. */ - bool nonlocal_p = (DECL_EXTERNAL (var->decl) - || TREE_PUBLIC (var->decl) - || var->used_from_other_partition - || var->force_output); - var->call_for_symbol_and_aliases (refered_from_nonlocal_var, - &nonlocal_p, true); - if (nonlocal_p) - vi->is_ipa_escape_point = true; - } - - if (dump_file && (dump_flags & TDF_DETAILS) - && constr_count != constraints.length ()) - { - fprintf (dump_file, - "Generating constraints for global initializers\n\n"); - dump_constraints (dump_file, constr_count); - fprintf (dump_file, "\n"); - constr_count = constraints.length (); - } -} - -/* Build constraints for ipa mode. */ - -static void -ipa_build_constraints (void) -{ - struct cgraph_node *node; - - ipa_create_function_infos (); - ipa_create_global_variable_infos (); - - unsigned int constr_count = constraints.length (); - - FOR_EACH_DEFINED_FUNCTION (node) - { - struct function *func; - basic_block bb; - - /* Nodes without a body in this partition are not interesting. */ - if (!node->has_gimple_body_p () - || node->in_other_partition - || node->clone_of) - continue; - - if (dump_file && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, - "Generating constraints for %s", node->dump_name ()); - if (DECL_ASSEMBLER_NAME_SET_P (node->decl)) - fprintf (dump_file, " (%s)", - IDENTIFIER_POINTER - (DECL_ASSEMBLER_NAME (node->decl))); - fprintf (dump_file, "\n"); - } - - func = DECL_STRUCT_FUNCTION (node->decl); - gcc_assert (cfun == NULL); - - /* Build constraints for the function body. */ - FOR_EACH_BB_FN (bb, func) - { - for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi); - gsi_next (&gsi)) - { - gphi *phi = gsi.phi (); - - if (! virtual_operand_p (gimple_phi_result (phi))) - find_func_aliases (func, phi); - } - - for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi); - gsi_next (&gsi)) - { - gimple *stmt = gsi_stmt (gsi); - - find_func_aliases (func, stmt); - find_func_clobbers (func, stmt); - } - } - - if (dump_file && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, "\n"); - dump_constraints (dump_file, constr_count); - fprintf (dump_file, "\n"); - constr_count = constraints.length (); - } - } - -} - /* Execute the driver for IPA PTA. */ static unsigned int diff --git a/gcc/tree-ssa-structalias.h b/gcc/tree-ssa-structalias.h index 4104bad3499f..1f5b28048b46 100644 --- a/gcc/tree-ssa-structalias.h +++ b/gcc/tree-ssa-structalias.h @@ -34,6 +34,15 @@ enum { nothing_id = 1, anything_id = 2, string_id = 3, escaped_id = 4, nonlocal_id = 5, escaped_return_id = 6, storedanything_id = 7, integer_id = 8 }; +/* In IPA mode there are varinfos for different aspects of reach + function designator. One for the points-to set of the return + value, one for the variables that are clobbered by the function, + one for its uses and one for each parameter (including a single + glob for remaining variadic arguments). */ + +enum { fi_clobbers = 1, fi_uses = 2, + fi_static_chain = 3, fi_result = 4, fi_parm_base = 5 }; + /* Use 0x8000... as special unknown offset. */ #define UNKNOWN_OFFSET HOST_WIDE_INT_MIN @@ -167,6 +176,9 @@ struct constraint_stats unsigned int points_to_sets_created; }; +extern bool use_field_sensitive; +extern int in_ipa_mode; + extern struct constraint_stats stats; extern bitmap_obstack pta_obstack; @@ -198,6 +210,9 @@ varinfo_t first_vi_for_offset (varinfo_t start, unsigned HOST_WIDE_INT offset); varinfo_t first_or_preceding_vi_for_offset (varinfo_t start, unsigned HOST_WIDE_INT offset); +void determine_global_memory_access (gcall *, bool *, bool *, bool *); +bool fndecl_maybe_in_other_partition (tree); +varinfo_t new_var_info (tree t, const char *name, bool add_id); void dump_constraint (FILE *file, constraint_t c); void dump_constraints (FILE *file, int from); void dump_solution_for_var (FILE *file, unsigned int var); From 71e95e871d62e446fe4391f4fd08be7609e311cf Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 8 Oct 2025 12:42:41 +0100 Subject: [PATCH 185/216] libstdc++: Tweak comment on generated #endif lines in bits/version.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make the #endif comment match the #if condition in the generated code. Also adjust a comment in the Scheme code which describes the logic. The __glibcxx_NAME macro is not defined _unconditionally_, as it still depends on the conditions in cxxmin, extra_cond etca,. and the __cpp_lib_NAME macro now depends on no_stdname too. libstdc++-v3/ChangeLog: * include/bits/version.tpl: Fix comment on #endif. Tweak description of when macros are defined. * include/bits/version.h: Regenerate. Reviewed-by: Arsen Arsenović Reviewed-by: Tomasz Kamiński --- libstdc++-v3/include/bits/version.h | 448 +++++++++++++------------- libstdc++-v3/include/bits/version.tpl | 9 +- 2 files changed, 229 insertions(+), 228 deletions(-) diff --git a/libstdc++-v3/include/bits/version.h b/libstdc++-v3/include/bits/version.h index 044d756de196..7ba78774041a 100644 --- a/libstdc++-v3/include/bits/version.h +++ b/libstdc++-v3/include/bits/version.h @@ -57,7 +57,7 @@ # define __cpp_lib_incomplete_container_elements 201505L # endif # endif -#endif /* !defined(__cpp_lib_incomplete_container_elements) && defined(__glibcxx_want_incomplete_container_elements) */ +#endif /* !defined(__cpp_lib_incomplete_container_elements) */ #undef __glibcxx_want_incomplete_container_elements #if !defined(__cpp_lib_uncaught_exceptions) @@ -67,7 +67,7 @@ # define __cpp_lib_uncaught_exceptions 201411L # endif # endif -#endif /* !defined(__cpp_lib_uncaught_exceptions) && defined(__glibcxx_want_uncaught_exceptions) */ +#endif /* !defined(__cpp_lib_uncaught_exceptions) */ #undef __glibcxx_want_uncaught_exceptions #if !defined(__cpp_lib_allocator_traits_is_always_equal) @@ -77,7 +77,7 @@ # define __cpp_lib_allocator_traits_is_always_equal 201411L # endif # endif -#endif /* !defined(__cpp_lib_allocator_traits_is_always_equal) && defined(__glibcxx_want_allocator_traits_is_always_equal) */ +#endif /* !defined(__cpp_lib_allocator_traits_is_always_equal) */ #undef __glibcxx_want_allocator_traits_is_always_equal #if !defined(__cpp_lib_is_null_pointer) @@ -87,7 +87,7 @@ # define __cpp_lib_is_null_pointer 201309L # endif # endif -#endif /* !defined(__cpp_lib_is_null_pointer) && defined(__glibcxx_want_is_null_pointer) */ +#endif /* !defined(__cpp_lib_is_null_pointer) */ #undef __glibcxx_want_is_null_pointer #if !defined(__cpp_lib_result_of_sfinae) @@ -97,7 +97,7 @@ # define __cpp_lib_result_of_sfinae 201210L # endif # endif -#endif /* !defined(__cpp_lib_result_of_sfinae) && defined(__glibcxx_want_result_of_sfinae) */ +#endif /* !defined(__cpp_lib_result_of_sfinae) */ #undef __glibcxx_want_result_of_sfinae #if !defined(__cpp_lib_shared_ptr_arrays) @@ -112,7 +112,7 @@ # define __cpp_lib_shared_ptr_arrays 201611L # endif # endif -#endif /* !defined(__cpp_lib_shared_ptr_arrays) && defined(__glibcxx_want_shared_ptr_arrays) */ +#endif /* !defined(__cpp_lib_shared_ptr_arrays) */ #undef __glibcxx_want_shared_ptr_arrays #if !defined(__cpp_lib_is_swappable) @@ -122,7 +122,7 @@ # define __cpp_lib_is_swappable 201603L # endif # endif -#endif /* !defined(__cpp_lib_is_swappable) && defined(__glibcxx_want_is_swappable) */ +#endif /* !defined(__cpp_lib_is_swappable) */ #undef __glibcxx_want_is_swappable #if !defined(__cpp_lib_void_t) @@ -132,7 +132,7 @@ # define __cpp_lib_void_t 201411L # endif # endif -#endif /* !defined(__cpp_lib_void_t) && defined(__glibcxx_want_void_t) */ +#endif /* !defined(__cpp_lib_void_t) */ #undef __glibcxx_want_void_t #if !defined(__cpp_lib_enable_shared_from_this) @@ -142,7 +142,7 @@ # define __cpp_lib_enable_shared_from_this 201603L # endif # endif -#endif /* !defined(__cpp_lib_enable_shared_from_this) && defined(__glibcxx_want_enable_shared_from_this) */ +#endif /* !defined(__cpp_lib_enable_shared_from_this) */ #undef __glibcxx_want_enable_shared_from_this #if !defined(__cpp_lib_math_spec_funcs) @@ -152,7 +152,7 @@ # define __STDCPP_MATH_SPEC_FUNCS__ 201003L # endif # endif -#endif /* !defined(__cpp_lib_math_spec_funcs) && defined(__glibcxx_want_math_spec_funcs) */ +#endif /* !defined(__cpp_lib_math_spec_funcs) */ #undef __glibcxx_want_math_spec_funcs #if !defined(__cpp_lib_coroutine) @@ -162,7 +162,7 @@ # define __cpp_lib_coroutine 201902L # endif # endif -#endif /* !defined(__cpp_lib_coroutine) && defined(__glibcxx_want_coroutine) */ +#endif /* !defined(__cpp_lib_coroutine) */ #undef __glibcxx_want_coroutine #if !defined(__cpp_lib_exchange_function) @@ -172,7 +172,7 @@ # define __cpp_lib_exchange_function 201304L # endif # endif -#endif /* !defined(__cpp_lib_exchange_function) && defined(__glibcxx_want_exchange_function) */ +#endif /* !defined(__cpp_lib_exchange_function) */ #undef __glibcxx_want_exchange_function #if !defined(__cpp_lib_integer_sequence) @@ -182,7 +182,7 @@ # define __cpp_lib_integer_sequence 201304L # endif # endif -#endif /* !defined(__cpp_lib_integer_sequence) && defined(__glibcxx_want_integer_sequence) */ +#endif /* !defined(__cpp_lib_integer_sequence) */ #undef __glibcxx_want_integer_sequence #if !defined(__cpp_lib_integral_constant_callable) @@ -192,7 +192,7 @@ # define __cpp_lib_integral_constant_callable 201304L # endif # endif -#endif /* !defined(__cpp_lib_integral_constant_callable) && defined(__glibcxx_want_integral_constant_callable) */ +#endif /* !defined(__cpp_lib_integral_constant_callable) */ #undef __glibcxx_want_integral_constant_callable #if !defined(__cpp_lib_is_final) @@ -202,7 +202,7 @@ # define __cpp_lib_is_final 201402L # endif # endif -#endif /* !defined(__cpp_lib_is_final) && defined(__glibcxx_want_is_final) */ +#endif /* !defined(__cpp_lib_is_final) */ #undef __glibcxx_want_is_final #if !defined(__cpp_lib_make_reverse_iterator) @@ -212,7 +212,7 @@ # define __cpp_lib_make_reverse_iterator 201402L # endif # endif -#endif /* !defined(__cpp_lib_make_reverse_iterator) && defined(__glibcxx_want_make_reverse_iterator) */ +#endif /* !defined(__cpp_lib_make_reverse_iterator) */ #undef __glibcxx_want_make_reverse_iterator #if !defined(__cpp_lib_null_iterators) @@ -222,7 +222,7 @@ # define __cpp_lib_null_iterators 201304L # endif # endif -#endif /* !defined(__cpp_lib_null_iterators) && defined(__glibcxx_want_null_iterators) */ +#endif /* !defined(__cpp_lib_null_iterators) */ #undef __glibcxx_want_null_iterators #if !defined(__cpp_lib_transformation_trait_aliases) @@ -232,7 +232,7 @@ # define __cpp_lib_transformation_trait_aliases 201304L # endif # endif -#endif /* !defined(__cpp_lib_transformation_trait_aliases) && defined(__glibcxx_want_transformation_trait_aliases) */ +#endif /* !defined(__cpp_lib_transformation_trait_aliases) */ #undef __glibcxx_want_transformation_trait_aliases #if !defined(__cpp_lib_transparent_operators) @@ -242,7 +242,7 @@ # define __cpp_lib_transparent_operators 201510L # endif # endif -#endif /* !defined(__cpp_lib_transparent_operators) && defined(__glibcxx_want_transparent_operators) */ +#endif /* !defined(__cpp_lib_transparent_operators) */ #undef __glibcxx_want_transparent_operators #if !defined(__cpp_lib_tuple_element_t) @@ -252,7 +252,7 @@ # define __cpp_lib_tuple_element_t 201402L # endif # endif -#endif /* !defined(__cpp_lib_tuple_element_t) && defined(__glibcxx_want_tuple_element_t) */ +#endif /* !defined(__cpp_lib_tuple_element_t) */ #undef __glibcxx_want_tuple_element_t #if !defined(__cpp_lib_tuples_by_type) @@ -262,7 +262,7 @@ # define __cpp_lib_tuples_by_type 201304L # endif # endif -#endif /* !defined(__cpp_lib_tuples_by_type) && defined(__glibcxx_want_tuples_by_type) */ +#endif /* !defined(__cpp_lib_tuples_by_type) */ #undef __glibcxx_want_tuples_by_type #if !defined(__cpp_lib_robust_nonmodifying_seq_ops) @@ -272,7 +272,7 @@ # define __cpp_lib_robust_nonmodifying_seq_ops 201304L # endif # endif -#endif /* !defined(__cpp_lib_robust_nonmodifying_seq_ops) && defined(__glibcxx_want_robust_nonmodifying_seq_ops) */ +#endif /* !defined(__cpp_lib_robust_nonmodifying_seq_ops) */ #undef __glibcxx_want_robust_nonmodifying_seq_ops #if !defined(__cpp_lib_to_chars) @@ -287,7 +287,7 @@ # define __cpp_lib_to_chars 201611L # endif # endif -#endif /* !defined(__cpp_lib_to_chars) && defined(__glibcxx_want_to_chars) */ +#endif /* !defined(__cpp_lib_to_chars) */ #undef __glibcxx_want_to_chars #if !defined(__cpp_lib_chrono_udls) @@ -297,7 +297,7 @@ # define __cpp_lib_chrono_udls 201304L # endif # endif -#endif /* !defined(__cpp_lib_chrono_udls) && defined(__glibcxx_want_chrono_udls) */ +#endif /* !defined(__cpp_lib_chrono_udls) */ #undef __glibcxx_want_chrono_udls #if !defined(__cpp_lib_complex_udls) @@ -307,7 +307,7 @@ # define __cpp_lib_complex_udls 201309L # endif # endif -#endif /* !defined(__cpp_lib_complex_udls) && defined(__glibcxx_want_complex_udls) */ +#endif /* !defined(__cpp_lib_complex_udls) */ #undef __glibcxx_want_complex_udls #if !defined(__cpp_lib_generic_associative_lookup) @@ -317,7 +317,7 @@ # define __cpp_lib_generic_associative_lookup 201304L # endif # endif -#endif /* !defined(__cpp_lib_generic_associative_lookup) && defined(__glibcxx_want_generic_associative_lookup) */ +#endif /* !defined(__cpp_lib_generic_associative_lookup) */ #undef __glibcxx_want_generic_associative_lookup #if !defined(__cpp_lib_make_unique) @@ -327,7 +327,7 @@ # define __cpp_lib_make_unique 201304L # endif # endif -#endif /* !defined(__cpp_lib_make_unique) && defined(__glibcxx_want_make_unique) */ +#endif /* !defined(__cpp_lib_make_unique) */ #undef __glibcxx_want_make_unique #if !defined(__cpp_lib_quoted_string_io) @@ -337,7 +337,7 @@ # define __cpp_lib_quoted_string_io 201304L # endif # endif -#endif /* !defined(__cpp_lib_quoted_string_io) && defined(__glibcxx_want_quoted_string_io) */ +#endif /* !defined(__cpp_lib_quoted_string_io) */ #undef __glibcxx_want_quoted_string_io #if !defined(__cpp_lib_shared_timed_mutex) @@ -347,7 +347,7 @@ # define __cpp_lib_shared_timed_mutex 201402L # endif # endif -#endif /* !defined(__cpp_lib_shared_timed_mutex) && defined(__glibcxx_want_shared_timed_mutex) */ +#endif /* !defined(__cpp_lib_shared_timed_mutex) */ #undef __glibcxx_want_shared_timed_mutex #if !defined(__cpp_lib_string_udls) @@ -357,7 +357,7 @@ # define __cpp_lib_string_udls 201304L # endif # endif -#endif /* !defined(__cpp_lib_string_udls) && defined(__glibcxx_want_string_udls) */ +#endif /* !defined(__cpp_lib_string_udls) */ #undef __glibcxx_want_string_udls #if !defined(__cpp_lib_addressof_constexpr) @@ -367,7 +367,7 @@ # define __cpp_lib_addressof_constexpr 201603L # endif # endif -#endif /* !defined(__cpp_lib_addressof_constexpr) && defined(__glibcxx_want_addressof_constexpr) */ +#endif /* !defined(__cpp_lib_addressof_constexpr) */ #undef __glibcxx_want_addressof_constexpr #if !defined(__cpp_lib_any) @@ -377,7 +377,7 @@ # define __cpp_lib_any 201606L # endif # endif -#endif /* !defined(__cpp_lib_any) && defined(__glibcxx_want_any) */ +#endif /* !defined(__cpp_lib_any) */ #undef __glibcxx_want_any #if !defined(__cpp_lib_apply) @@ -387,7 +387,7 @@ # define __cpp_lib_apply 201603L # endif # endif -#endif /* !defined(__cpp_lib_apply) && defined(__glibcxx_want_apply) */ +#endif /* !defined(__cpp_lib_apply) */ #undef __glibcxx_want_apply #if !defined(__cpp_lib_as_const) @@ -397,7 +397,7 @@ # define __cpp_lib_as_const 201510L # endif # endif -#endif /* !defined(__cpp_lib_as_const) && defined(__glibcxx_want_as_const) */ +#endif /* !defined(__cpp_lib_as_const) */ #undef __glibcxx_want_as_const #if !defined(__cpp_lib_atomic_is_always_lock_free) @@ -407,7 +407,7 @@ # define __cpp_lib_atomic_is_always_lock_free 201603L # endif # endif -#endif /* !defined(__cpp_lib_atomic_is_always_lock_free) && defined(__glibcxx_want_atomic_is_always_lock_free) */ +#endif /* !defined(__cpp_lib_atomic_is_always_lock_free) */ #undef __glibcxx_want_atomic_is_always_lock_free #if !defined(__cpp_lib_bool_constant) @@ -417,7 +417,7 @@ # define __cpp_lib_bool_constant 201505L # endif # endif -#endif /* !defined(__cpp_lib_bool_constant) && defined(__glibcxx_want_bool_constant) */ +#endif /* !defined(__cpp_lib_bool_constant) */ #undef __glibcxx_want_bool_constant #if !defined(__cpp_lib_byte) @@ -427,7 +427,7 @@ # define __cpp_lib_byte 201603L # endif # endif -#endif /* !defined(__cpp_lib_byte) && defined(__glibcxx_want_byte) */ +#endif /* !defined(__cpp_lib_byte) */ #undef __glibcxx_want_byte #if !defined(__cpp_lib_constant_wrapper) @@ -437,7 +437,7 @@ # define __cpp_lib_constant_wrapper 202506L # endif # endif -#endif /* !defined(__cpp_lib_constant_wrapper) && defined(__glibcxx_want_constant_wrapper) */ +#endif /* !defined(__cpp_lib_constant_wrapper) */ #undef __glibcxx_want_constant_wrapper #if !defined(__cpp_lib_has_unique_object_representations) @@ -447,7 +447,7 @@ # define __cpp_lib_has_unique_object_representations 201606L # endif # endif -#endif /* !defined(__cpp_lib_has_unique_object_representations) && defined(__glibcxx_want_has_unique_object_representations) */ +#endif /* !defined(__cpp_lib_has_unique_object_representations) */ #undef __glibcxx_want_has_unique_object_representations #if !defined(__cpp_lib_hardware_interference_size) @@ -457,7 +457,7 @@ # define __cpp_lib_hardware_interference_size 201703L # endif # endif -#endif /* !defined(__cpp_lib_hardware_interference_size) && defined(__glibcxx_want_hardware_interference_size) */ +#endif /* !defined(__cpp_lib_hardware_interference_size) */ #undef __glibcxx_want_hardware_interference_size #if !defined(__cpp_lib_invoke) @@ -467,7 +467,7 @@ # define __cpp_lib_invoke 201411L # endif # endif -#endif /* !defined(__cpp_lib_invoke) && defined(__glibcxx_want_invoke) */ +#endif /* !defined(__cpp_lib_invoke) */ #undef __glibcxx_want_invoke #if !defined(__cpp_lib_is_aggregate) @@ -477,7 +477,7 @@ # define __cpp_lib_is_aggregate 201703L # endif # endif -#endif /* !defined(__cpp_lib_is_aggregate) && defined(__glibcxx_want_is_aggregate) */ +#endif /* !defined(__cpp_lib_is_aggregate) */ #undef __glibcxx_want_is_aggregate #if !defined(__cpp_lib_is_invocable) @@ -487,7 +487,7 @@ # define __cpp_lib_is_invocable 201703L # endif # endif -#endif /* !defined(__cpp_lib_is_invocable) && defined(__glibcxx_want_is_invocable) */ +#endif /* !defined(__cpp_lib_is_invocable) */ #undef __glibcxx_want_is_invocable #if !defined(__cpp_lib_launder) @@ -497,7 +497,7 @@ # define __cpp_lib_launder 201606L # endif # endif -#endif /* !defined(__cpp_lib_launder) && defined(__glibcxx_want_launder) */ +#endif /* !defined(__cpp_lib_launder) */ #undef __glibcxx_want_launder #if !defined(__cpp_lib_logical_traits) @@ -507,7 +507,7 @@ # define __cpp_lib_logical_traits 201510L # endif # endif -#endif /* !defined(__cpp_lib_logical_traits) && defined(__glibcxx_want_logical_traits) */ +#endif /* !defined(__cpp_lib_logical_traits) */ #undef __glibcxx_want_logical_traits #if !defined(__cpp_lib_make_from_tuple) @@ -517,7 +517,7 @@ # define __cpp_lib_make_from_tuple 201606L # endif # endif -#endif /* !defined(__cpp_lib_make_from_tuple) && defined(__glibcxx_want_make_from_tuple) */ +#endif /* !defined(__cpp_lib_make_from_tuple) */ #undef __glibcxx_want_make_from_tuple #if !defined(__cpp_lib_not_fn) @@ -532,7 +532,7 @@ # define __cpp_lib_not_fn 201603L # endif # endif -#endif /* !defined(__cpp_lib_not_fn) && defined(__glibcxx_want_not_fn) */ +#endif /* !defined(__cpp_lib_not_fn) */ #undef __glibcxx_want_not_fn #if !defined(__cpp_lib_type_trait_variable_templates) @@ -542,7 +542,7 @@ # define __cpp_lib_type_trait_variable_templates 201510L # endif # endif -#endif /* !defined(__cpp_lib_type_trait_variable_templates) && defined(__glibcxx_want_type_trait_variable_templates) */ +#endif /* !defined(__cpp_lib_type_trait_variable_templates) */ #undef __glibcxx_want_type_trait_variable_templates #if !defined(__cpp_lib_variant) @@ -562,7 +562,7 @@ # define __cpp_lib_variant 202102L # endif # endif -#endif /* !defined(__cpp_lib_variant) && defined(__glibcxx_want_variant) */ +#endif /* !defined(__cpp_lib_variant) */ #undef __glibcxx_want_variant #if !defined(__cpp_lib_lcm) @@ -572,7 +572,7 @@ # define __cpp_lib_lcm 201606L # endif # endif -#endif /* !defined(__cpp_lib_lcm) && defined(__glibcxx_want_lcm) */ +#endif /* !defined(__cpp_lib_lcm) */ #undef __glibcxx_want_lcm #if !defined(__cpp_lib_gcd) @@ -582,7 +582,7 @@ # define __cpp_lib_gcd 201606L # endif # endif -#endif /* !defined(__cpp_lib_gcd) && defined(__glibcxx_want_gcd) */ +#endif /* !defined(__cpp_lib_gcd) */ #undef __glibcxx_want_gcd #if !defined(__cpp_lib_gcd_lcm) @@ -592,7 +592,7 @@ # define __cpp_lib_gcd_lcm 201606L # endif # endif -#endif /* !defined(__cpp_lib_gcd_lcm) && defined(__glibcxx_want_gcd_lcm) */ +#endif /* !defined(__cpp_lib_gcd_lcm) */ #undef __glibcxx_want_gcd_lcm #if !defined(__cpp_lib_raw_memory_algorithms) @@ -607,7 +607,7 @@ # define __cpp_lib_raw_memory_algorithms 201606L # endif # endif -#endif /* !defined(__cpp_lib_raw_memory_algorithms) && defined(__glibcxx_want_raw_memory_algorithms) */ +#endif /* !defined(__cpp_lib_raw_memory_algorithms) */ #undef __glibcxx_want_raw_memory_algorithms #if !defined(__cpp_lib_array_constexpr) @@ -622,7 +622,7 @@ # define __cpp_lib_array_constexpr 201803L # endif # endif -#endif /* !defined(__cpp_lib_array_constexpr) && defined(__glibcxx_want_array_constexpr) */ +#endif /* !defined(__cpp_lib_array_constexpr) */ #undef __glibcxx_want_array_constexpr #if !defined(__cpp_lib_nonmember_container_access) @@ -632,7 +632,7 @@ # define __cpp_lib_nonmember_container_access 201411L # endif # endif -#endif /* !defined(__cpp_lib_nonmember_container_access) && defined(__glibcxx_want_nonmember_container_access) */ +#endif /* !defined(__cpp_lib_nonmember_container_access) */ #undef __glibcxx_want_nonmember_container_access #if !defined(__cpp_lib_clamp) @@ -642,7 +642,7 @@ # define __cpp_lib_clamp 201603L # endif # endif -#endif /* !defined(__cpp_lib_clamp) && defined(__glibcxx_want_clamp) */ +#endif /* !defined(__cpp_lib_clamp) */ #undef __glibcxx_want_clamp #if !defined(__cpp_lib_sample) @@ -652,7 +652,7 @@ # define __cpp_lib_sample 201603L # endif # endif -#endif /* !defined(__cpp_lib_sample) && defined(__glibcxx_want_sample) */ +#endif /* !defined(__cpp_lib_sample) */ #undef __glibcxx_want_sample #if !defined(__cpp_lib_boyer_moore_searcher) @@ -662,7 +662,7 @@ # define __cpp_lib_boyer_moore_searcher 201603L # endif # endif -#endif /* !defined(__cpp_lib_boyer_moore_searcher) && defined(__glibcxx_want_boyer_moore_searcher) */ +#endif /* !defined(__cpp_lib_boyer_moore_searcher) */ #undef __glibcxx_want_boyer_moore_searcher #if !defined(__cpp_lib_chrono) @@ -677,7 +677,7 @@ # define __cpp_lib_chrono 201611L # endif # endif -#endif /* !defined(__cpp_lib_chrono) && defined(__glibcxx_want_chrono) */ +#endif /* !defined(__cpp_lib_chrono) */ #undef __glibcxx_want_chrono #if !defined(__cpp_lib_chrono_cxx20) @@ -686,7 +686,7 @@ # if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono_cxx20) # endif # endif -#endif /* !defined(__cpp_lib_chrono_cxx20) && defined(__glibcxx_want_chrono_cxx20) */ +#endif /* !defined(__cpp_lib_chrono_cxx20) */ #undef __glibcxx_want_chrono_cxx20 #if !defined(__cpp_lib_execution) @@ -696,7 +696,7 @@ # define __cpp_lib_execution 201902L # endif # endif -#endif /* !defined(__cpp_lib_execution) && defined(__glibcxx_want_execution) */ +#endif /* !defined(__cpp_lib_execution) */ #undef __glibcxx_want_execution #if !defined(__cpp_lib_filesystem) @@ -706,7 +706,7 @@ # define __cpp_lib_filesystem 201703L # endif # endif -#endif /* !defined(__cpp_lib_filesystem) && defined(__glibcxx_want_filesystem) */ +#endif /* !defined(__cpp_lib_filesystem) */ #undef __glibcxx_want_filesystem #if !defined(__cpp_lib_hypot) @@ -716,7 +716,7 @@ # define __cpp_lib_hypot 201603L # endif # endif -#endif /* !defined(__cpp_lib_hypot) && defined(__glibcxx_want_hypot) */ +#endif /* !defined(__cpp_lib_hypot) */ #undef __glibcxx_want_hypot #if !defined(__cpp_lib_map_try_emplace) @@ -726,7 +726,7 @@ # define __cpp_lib_map_try_emplace 201411L # endif # endif -#endif /* !defined(__cpp_lib_map_try_emplace) && defined(__glibcxx_want_map_try_emplace) */ +#endif /* !defined(__cpp_lib_map_try_emplace) */ #undef __glibcxx_want_map_try_emplace #if !defined(__cpp_lib_math_special_functions) @@ -736,7 +736,7 @@ # define __cpp_lib_math_special_functions 201603L # endif # endif -#endif /* !defined(__cpp_lib_math_special_functions) && defined(__glibcxx_want_math_special_functions) */ +#endif /* !defined(__cpp_lib_math_special_functions) */ #undef __glibcxx_want_math_special_functions #if !defined(__cpp_lib_memory_resource) @@ -751,7 +751,7 @@ # define __cpp_lib_memory_resource 1L # endif # endif -#endif /* !defined(__cpp_lib_memory_resource) && defined(__glibcxx_want_memory_resource) */ +#endif /* !defined(__cpp_lib_memory_resource) */ #undef __glibcxx_want_memory_resource #if !defined(__cpp_lib_node_extract) @@ -761,7 +761,7 @@ # define __cpp_lib_node_extract 201606L # endif # endif -#endif /* !defined(__cpp_lib_node_extract) && defined(__glibcxx_want_node_extract) */ +#endif /* !defined(__cpp_lib_node_extract) */ #undef __glibcxx_want_node_extract #if !defined(__cpp_lib_parallel_algorithm) @@ -771,7 +771,7 @@ # define __cpp_lib_parallel_algorithm 201603L # endif # endif -#endif /* !defined(__cpp_lib_parallel_algorithm) && defined(__glibcxx_want_parallel_algorithm) */ +#endif /* !defined(__cpp_lib_parallel_algorithm) */ #undef __glibcxx_want_parallel_algorithm #if !defined(__cpp_lib_scoped_lock) @@ -781,7 +781,7 @@ # define __cpp_lib_scoped_lock 201703L # endif # endif -#endif /* !defined(__cpp_lib_scoped_lock) && defined(__glibcxx_want_scoped_lock) */ +#endif /* !defined(__cpp_lib_scoped_lock) */ #undef __glibcxx_want_scoped_lock #if !defined(__cpp_lib_shared_mutex) @@ -791,7 +791,7 @@ # define __cpp_lib_shared_mutex 201505L # endif # endif -#endif /* !defined(__cpp_lib_shared_mutex) && defined(__glibcxx_want_shared_mutex) */ +#endif /* !defined(__cpp_lib_shared_mutex) */ #undef __glibcxx_want_shared_mutex #if !defined(__cpp_lib_shared_ptr_weak_type) @@ -801,7 +801,7 @@ # define __cpp_lib_shared_ptr_weak_type 201606L # endif # endif -#endif /* !defined(__cpp_lib_shared_ptr_weak_type) && defined(__glibcxx_want_shared_ptr_weak_type) */ +#endif /* !defined(__cpp_lib_shared_ptr_weak_type) */ #undef __glibcxx_want_shared_ptr_weak_type #if !defined(__cpp_lib_string_view) @@ -816,7 +816,7 @@ # define __cpp_lib_string_view 201803L # endif # endif -#endif /* !defined(__cpp_lib_string_view) && defined(__glibcxx_want_string_view) */ +#endif /* !defined(__cpp_lib_string_view) */ #undef __glibcxx_want_string_view #if !defined(__cpp_lib_unordered_map_try_emplace) @@ -826,7 +826,7 @@ # define __cpp_lib_unordered_map_try_emplace 201411L # endif # endif -#endif /* !defined(__cpp_lib_unordered_map_try_emplace) && defined(__glibcxx_want_unordered_map_try_emplace) */ +#endif /* !defined(__cpp_lib_unordered_map_try_emplace) */ #undef __glibcxx_want_unordered_map_try_emplace #if !defined(__cpp_lib_assume_aligned) @@ -836,7 +836,7 @@ # define __cpp_lib_assume_aligned 201811L # endif # endif -#endif /* !defined(__cpp_lib_assume_aligned) && defined(__glibcxx_want_assume_aligned) */ +#endif /* !defined(__cpp_lib_assume_aligned) */ #undef __glibcxx_want_assume_aligned #if !defined(__cpp_lib_is_sufficiently_aligned) @@ -846,7 +846,7 @@ # define __cpp_lib_is_sufficiently_aligned 202411L # endif # endif -#endif /* !defined(__cpp_lib_is_sufficiently_aligned) && defined(__glibcxx_want_is_sufficiently_aligned) */ +#endif /* !defined(__cpp_lib_is_sufficiently_aligned) */ #undef __glibcxx_want_is_sufficiently_aligned #if !defined(__cpp_lib_atomic_flag_test) @@ -856,7 +856,7 @@ # define __cpp_lib_atomic_flag_test 201907L # endif # endif -#endif /* !defined(__cpp_lib_atomic_flag_test) && defined(__glibcxx_want_atomic_flag_test) */ +#endif /* !defined(__cpp_lib_atomic_flag_test) */ #undef __glibcxx_want_atomic_flag_test #if !defined(__cpp_lib_atomic_float) @@ -866,7 +866,7 @@ # define __cpp_lib_atomic_float 201711L # endif # endif -#endif /* !defined(__cpp_lib_atomic_float) && defined(__glibcxx_want_atomic_float) */ +#endif /* !defined(__cpp_lib_atomic_float) */ #undef __glibcxx_want_atomic_float #if !defined(__cpp_lib_atomic_lock_free_type_aliases) @@ -876,7 +876,7 @@ # define __cpp_lib_atomic_lock_free_type_aliases 201907L # endif # endif -#endif /* !defined(__cpp_lib_atomic_lock_free_type_aliases) && defined(__glibcxx_want_atomic_lock_free_type_aliases) */ +#endif /* !defined(__cpp_lib_atomic_lock_free_type_aliases) */ #undef __glibcxx_want_atomic_lock_free_type_aliases #if !defined(__cpp_lib_atomic_ref) @@ -886,7 +886,7 @@ # define __cpp_lib_atomic_ref 201806L # endif # endif -#endif /* !defined(__cpp_lib_atomic_ref) && defined(__glibcxx_want_atomic_ref) */ +#endif /* !defined(__cpp_lib_atomic_ref) */ #undef __glibcxx_want_atomic_ref #if !defined(__cpp_lib_atomic_value_initialization) @@ -896,7 +896,7 @@ # define __cpp_lib_atomic_value_initialization 201911L # endif # endif -#endif /* !defined(__cpp_lib_atomic_value_initialization) && defined(__glibcxx_want_atomic_value_initialization) */ +#endif /* !defined(__cpp_lib_atomic_value_initialization) */ #undef __glibcxx_want_atomic_value_initialization #if !defined(__cpp_lib_bind_front) @@ -911,7 +911,7 @@ # define __cpp_lib_bind_front 201907L # endif # endif -#endif /* !defined(__cpp_lib_bind_front) && defined(__glibcxx_want_bind_front) */ +#endif /* !defined(__cpp_lib_bind_front) */ #undef __glibcxx_want_bind_front #if !defined(__cpp_lib_bind_back) @@ -926,7 +926,7 @@ # define __cpp_lib_bind_back 202202L # endif # endif -#endif /* !defined(__cpp_lib_bind_back) && defined(__glibcxx_want_bind_back) */ +#endif /* !defined(__cpp_lib_bind_back) */ #undef __glibcxx_want_bind_back #if !defined(__cpp_lib_starts_ends_with) @@ -936,7 +936,7 @@ # define __cpp_lib_starts_ends_with 201711L # endif # endif -#endif /* !defined(__cpp_lib_starts_ends_with) && defined(__glibcxx_want_starts_ends_with) */ +#endif /* !defined(__cpp_lib_starts_ends_with) */ #undef __glibcxx_want_starts_ends_with #if !defined(__cpp_lib_bit_cast) @@ -946,7 +946,7 @@ # define __cpp_lib_bit_cast 201806L # endif # endif -#endif /* !defined(__cpp_lib_bit_cast) && defined(__glibcxx_want_bit_cast) */ +#endif /* !defined(__cpp_lib_bit_cast) */ #undef __glibcxx_want_bit_cast #if !defined(__cpp_lib_bitops) @@ -956,7 +956,7 @@ # define __cpp_lib_bitops 201907L # endif # endif -#endif /* !defined(__cpp_lib_bitops) && defined(__glibcxx_want_bitops) */ +#endif /* !defined(__cpp_lib_bitops) */ #undef __glibcxx_want_bitops #if !defined(__cpp_lib_bounded_array_traits) @@ -966,7 +966,7 @@ # define __cpp_lib_bounded_array_traits 201902L # endif # endif -#endif /* !defined(__cpp_lib_bounded_array_traits) && defined(__glibcxx_want_bounded_array_traits) */ +#endif /* !defined(__cpp_lib_bounded_array_traits) */ #undef __glibcxx_want_bounded_array_traits #if !defined(__cpp_lib_concepts) @@ -976,7 +976,7 @@ # define __cpp_lib_concepts 202002L # endif # endif -#endif /* !defined(__cpp_lib_concepts) && defined(__glibcxx_want_concepts) */ +#endif /* !defined(__cpp_lib_concepts) */ #undef __glibcxx_want_concepts #if !defined(__cpp_lib_optional) @@ -996,7 +996,7 @@ # define __cpp_lib_optional 201606L # endif # endif -#endif /* !defined(__cpp_lib_optional) && defined(__glibcxx_want_optional) */ +#endif /* !defined(__cpp_lib_optional) */ #undef __glibcxx_want_optional #if !defined(__cpp_lib_optional_range_support) @@ -1006,7 +1006,7 @@ # define __cpp_lib_optional_range_support 202406L # endif # endif -#endif /* !defined(__cpp_lib_optional_range_support) && defined(__glibcxx_want_optional_range_support) */ +#endif /* !defined(__cpp_lib_optional_range_support) */ #undef __glibcxx_want_optional_range_support #if !defined(__cpp_lib_destroying_delete) @@ -1016,7 +1016,7 @@ # define __cpp_lib_destroying_delete 201806L # endif # endif -#endif /* !defined(__cpp_lib_destroying_delete) && defined(__glibcxx_want_destroying_delete) */ +#endif /* !defined(__cpp_lib_destroying_delete) */ #undef __glibcxx_want_destroying_delete #if !defined(__cpp_lib_constexpr_string_view) @@ -1026,7 +1026,7 @@ # define __cpp_lib_constexpr_string_view 201811L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_string_view) && defined(__glibcxx_want_constexpr_string_view) */ +#endif /* !defined(__cpp_lib_constexpr_string_view) */ #undef __glibcxx_want_constexpr_string_view #if !defined(__cpp_lib_endian) @@ -1036,7 +1036,7 @@ # define __cpp_lib_endian 201907L # endif # endif -#endif /* !defined(__cpp_lib_endian) && defined(__glibcxx_want_endian) */ +#endif /* !defined(__cpp_lib_endian) */ #undef __glibcxx_want_endian #if !defined(__cpp_lib_int_pow2) @@ -1046,7 +1046,7 @@ # define __cpp_lib_int_pow2 202002L # endif # endif -#endif /* !defined(__cpp_lib_int_pow2) && defined(__glibcxx_want_int_pow2) */ +#endif /* !defined(__cpp_lib_int_pow2) */ #undef __glibcxx_want_int_pow2 #if !defined(__cpp_lib_integer_comparison_functions) @@ -1056,7 +1056,7 @@ # define __cpp_lib_integer_comparison_functions 202002L # endif # endif -#endif /* !defined(__cpp_lib_integer_comparison_functions) && defined(__glibcxx_want_integer_comparison_functions) */ +#endif /* !defined(__cpp_lib_integer_comparison_functions) */ #undef __glibcxx_want_integer_comparison_functions #if !defined(__cpp_lib_is_constant_evaluated) @@ -1066,7 +1066,7 @@ # define __cpp_lib_is_constant_evaluated 201811L # endif # endif -#endif /* !defined(__cpp_lib_is_constant_evaluated) && defined(__glibcxx_want_is_constant_evaluated) */ +#endif /* !defined(__cpp_lib_is_constant_evaluated) */ #undef __glibcxx_want_is_constant_evaluated #if !defined(__cpp_lib_constexpr_char_traits) @@ -1081,7 +1081,7 @@ # define __cpp_lib_constexpr_char_traits 201611L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_char_traits) && defined(__glibcxx_want_constexpr_char_traits) */ +#endif /* !defined(__cpp_lib_constexpr_char_traits) */ #undef __glibcxx_want_constexpr_char_traits #if !defined(__cpp_lib_is_layout_compatible) @@ -1091,7 +1091,7 @@ # define __cpp_lib_is_layout_compatible 201907L # endif # endif -#endif /* !defined(__cpp_lib_is_layout_compatible) && defined(__glibcxx_want_is_layout_compatible) */ +#endif /* !defined(__cpp_lib_is_layout_compatible) */ #undef __glibcxx_want_is_layout_compatible #if !defined(__cpp_lib_is_nothrow_convertible) @@ -1101,7 +1101,7 @@ # define __cpp_lib_is_nothrow_convertible 201806L # endif # endif -#endif /* !defined(__cpp_lib_is_nothrow_convertible) && defined(__glibcxx_want_is_nothrow_convertible) */ +#endif /* !defined(__cpp_lib_is_nothrow_convertible) */ #undef __glibcxx_want_is_nothrow_convertible #if !defined(__cpp_lib_is_pointer_interconvertible) @@ -1111,7 +1111,7 @@ # define __cpp_lib_is_pointer_interconvertible 201907L # endif # endif -#endif /* !defined(__cpp_lib_is_pointer_interconvertible) && defined(__glibcxx_want_is_pointer_interconvertible) */ +#endif /* !defined(__cpp_lib_is_pointer_interconvertible) */ #undef __glibcxx_want_is_pointer_interconvertible #if !defined(__cpp_lib_math_constants) @@ -1121,7 +1121,7 @@ # define __cpp_lib_math_constants 201907L # endif # endif -#endif /* !defined(__cpp_lib_math_constants) && defined(__glibcxx_want_math_constants) */ +#endif /* !defined(__cpp_lib_math_constants) */ #undef __glibcxx_want_math_constants #if !defined(__cpp_lib_make_obj_using_allocator) @@ -1130,7 +1130,7 @@ # if defined(__glibcxx_want_all) || defined(__glibcxx_want_make_obj_using_allocator) # endif # endif -#endif /* !defined(__cpp_lib_make_obj_using_allocator) && defined(__glibcxx_want_make_obj_using_allocator) */ +#endif /* !defined(__cpp_lib_make_obj_using_allocator) */ #undef __glibcxx_want_make_obj_using_allocator #if !defined(__cpp_lib_remove_cvref) @@ -1140,7 +1140,7 @@ # define __cpp_lib_remove_cvref 201711L # endif # endif -#endif /* !defined(__cpp_lib_remove_cvref) && defined(__glibcxx_want_remove_cvref) */ +#endif /* !defined(__cpp_lib_remove_cvref) */ #undef __glibcxx_want_remove_cvref #if !defined(__cpp_lib_source_location) @@ -1150,7 +1150,7 @@ # define __cpp_lib_source_location 201907L # endif # endif -#endif /* !defined(__cpp_lib_source_location) && defined(__glibcxx_want_source_location) */ +#endif /* !defined(__cpp_lib_source_location) */ #undef __glibcxx_want_source_location #if !defined(__cpp_lib_span) @@ -1165,7 +1165,7 @@ # define __cpp_lib_span 202002L # endif # endif -#endif /* !defined(__cpp_lib_span) && defined(__glibcxx_want_span) */ +#endif /* !defined(__cpp_lib_span) */ #undef __glibcxx_want_span #if !defined(__cpp_lib_mdspan) @@ -1180,7 +1180,7 @@ # define __cpp_lib_mdspan 202207L # endif # endif -#endif /* !defined(__cpp_lib_mdspan) && defined(__glibcxx_want_mdspan) */ +#endif /* !defined(__cpp_lib_mdspan) */ #undef __glibcxx_want_mdspan #if !defined(__cpp_lib_aligned_accessor) @@ -1190,7 +1190,7 @@ # define __cpp_lib_aligned_accessor 202411L # endif # endif -#endif /* !defined(__cpp_lib_aligned_accessor) && defined(__glibcxx_want_aligned_accessor) */ +#endif /* !defined(__cpp_lib_aligned_accessor) */ #undef __glibcxx_want_aligned_accessor #if !defined(__cpp_lib_padded_layouts) @@ -1199,7 +1199,7 @@ # if defined(__glibcxx_want_all) || defined(__glibcxx_want_padded_layouts) # endif # endif -#endif /* !defined(__cpp_lib_padded_layouts) && defined(__glibcxx_want_padded_layouts) */ +#endif /* !defined(__cpp_lib_padded_layouts) */ #undef __glibcxx_want_padded_layouts #if !defined(__cpp_lib_submdspan) @@ -1208,7 +1208,7 @@ # if defined(__glibcxx_want_all) || defined(__glibcxx_want_submdspan) # endif # endif -#endif /* !defined(__cpp_lib_submdspan) && defined(__glibcxx_want_submdspan) */ +#endif /* !defined(__cpp_lib_submdspan) */ #undef __glibcxx_want_submdspan #if !defined(__cpp_lib_ssize) @@ -1218,7 +1218,7 @@ # define __cpp_lib_ssize 201902L # endif # endif -#endif /* !defined(__cpp_lib_ssize) && defined(__glibcxx_want_ssize) */ +#endif /* !defined(__cpp_lib_ssize) */ #undef __glibcxx_want_ssize #if !defined(__cpp_lib_three_way_comparison) @@ -1228,7 +1228,7 @@ # define __cpp_lib_three_way_comparison 201907L # endif # endif -#endif /* !defined(__cpp_lib_three_way_comparison) && defined(__glibcxx_want_three_way_comparison) */ +#endif /* !defined(__cpp_lib_three_way_comparison) */ #undef __glibcxx_want_three_way_comparison #if !defined(__cpp_lib_to_address) @@ -1238,7 +1238,7 @@ # define __cpp_lib_to_address 201711L # endif # endif -#endif /* !defined(__cpp_lib_to_address) && defined(__glibcxx_want_to_address) */ +#endif /* !defined(__cpp_lib_to_address) */ #undef __glibcxx_want_to_address #if !defined(__cpp_lib_to_array) @@ -1248,7 +1248,7 @@ # define __cpp_lib_to_array 201907L # endif # endif -#endif /* !defined(__cpp_lib_to_array) && defined(__glibcxx_want_to_array) */ +#endif /* !defined(__cpp_lib_to_array) */ #undef __glibcxx_want_to_array #if !defined(__cpp_lib_type_identity) @@ -1258,7 +1258,7 @@ # define __cpp_lib_type_identity 201806L # endif # endif -#endif /* !defined(__cpp_lib_type_identity) && defined(__glibcxx_want_type_identity) */ +#endif /* !defined(__cpp_lib_type_identity) */ #undef __glibcxx_want_type_identity #if !defined(__cpp_lib_unwrap_ref) @@ -1268,7 +1268,7 @@ # define __cpp_lib_unwrap_ref 201811L # endif # endif -#endif /* !defined(__cpp_lib_unwrap_ref) && defined(__glibcxx_want_unwrap_ref) */ +#endif /* !defined(__cpp_lib_unwrap_ref) */ #undef __glibcxx_want_unwrap_ref #if !defined(__cpp_lib_constexpr_iterator) @@ -1278,7 +1278,7 @@ # define __cpp_lib_constexpr_iterator 201811L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_iterator) && defined(__glibcxx_want_constexpr_iterator) */ +#endif /* !defined(__cpp_lib_constexpr_iterator) */ #undef __glibcxx_want_constexpr_iterator #if !defined(__cpp_lib_interpolate) @@ -1288,7 +1288,7 @@ # define __cpp_lib_interpolate 201902L # endif # endif -#endif /* !defined(__cpp_lib_interpolate) && defined(__glibcxx_want_interpolate) */ +#endif /* !defined(__cpp_lib_interpolate) */ #undef __glibcxx_want_interpolate #if !defined(__cpp_lib_constexpr_utility) @@ -1298,7 +1298,7 @@ # define __cpp_lib_constexpr_utility 201811L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_utility) && defined(__glibcxx_want_constexpr_utility) */ +#endif /* !defined(__cpp_lib_constexpr_utility) */ #undef __glibcxx_want_constexpr_utility #if !defined(__cpp_lib_shift) @@ -1313,7 +1313,7 @@ # define __cpp_lib_shift 201806L # endif # endif -#endif /* !defined(__cpp_lib_shift) && defined(__glibcxx_want_shift) */ +#endif /* !defined(__cpp_lib_shift) */ #undef __glibcxx_want_shift #if !defined(__cpp_lib_ranges) @@ -1333,7 +1333,7 @@ # define __cpp_lib_ranges 202110L # endif # endif -#endif /* !defined(__cpp_lib_ranges) && defined(__glibcxx_want_ranges) */ +#endif /* !defined(__cpp_lib_ranges) */ #undef __glibcxx_want_ranges #if !defined(__cpp_lib_constexpr_numeric) @@ -1343,7 +1343,7 @@ # define __cpp_lib_constexpr_numeric 201911L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_numeric) && defined(__glibcxx_want_constexpr_numeric) */ +#endif /* !defined(__cpp_lib_constexpr_numeric) */ #undef __glibcxx_want_constexpr_numeric #if !defined(__cpp_lib_constexpr_functional) @@ -1353,7 +1353,7 @@ # define __cpp_lib_constexpr_functional 201907L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_functional) && defined(__glibcxx_want_constexpr_functional) */ +#endif /* !defined(__cpp_lib_constexpr_functional) */ #undef __glibcxx_want_constexpr_functional #if !defined(__cpp_lib_constexpr_algorithms) @@ -1368,7 +1368,7 @@ # define __cpp_lib_constexpr_algorithms 201806L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_algorithms) && defined(__glibcxx_want_constexpr_algorithms) */ +#endif /* !defined(__cpp_lib_constexpr_algorithms) */ #undef __glibcxx_want_constexpr_algorithms #if !defined(__cpp_lib_constexpr_tuple) @@ -1378,7 +1378,7 @@ # define __cpp_lib_constexpr_tuple 201811L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_tuple) && defined(__glibcxx_want_constexpr_tuple) */ +#endif /* !defined(__cpp_lib_constexpr_tuple) */ #undef __glibcxx_want_constexpr_tuple #if !defined(__cpp_lib_constexpr_memory) @@ -1393,7 +1393,7 @@ # define __cpp_lib_constexpr_memory 201811L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_memory) && defined(__glibcxx_want_constexpr_memory) */ +#endif /* !defined(__cpp_lib_constexpr_memory) */ #undef __glibcxx_want_constexpr_memory #if !defined(__cpp_lib_atomic_shared_ptr) @@ -1403,7 +1403,7 @@ # define __cpp_lib_atomic_shared_ptr 201711L # endif # endif -#endif /* !defined(__cpp_lib_atomic_shared_ptr) && defined(__glibcxx_want_atomic_shared_ptr) */ +#endif /* !defined(__cpp_lib_atomic_shared_ptr) */ #undef __glibcxx_want_atomic_shared_ptr #if !defined(__cpp_lib_atomic_wait) @@ -1418,7 +1418,7 @@ # define __cpp_lib_atomic_wait 201907L # endif # endif -#endif /* !defined(__cpp_lib_atomic_wait) && defined(__glibcxx_want_atomic_wait) */ +#endif /* !defined(__cpp_lib_atomic_wait) */ #undef __glibcxx_want_atomic_wait #if !defined(__cpp_lib_barrier) @@ -1428,7 +1428,7 @@ # define __cpp_lib_barrier 201907L # endif # endif -#endif /* !defined(__cpp_lib_barrier) && defined(__glibcxx_want_barrier) */ +#endif /* !defined(__cpp_lib_barrier) */ #undef __glibcxx_want_barrier #if !defined(__cpp_lib_format) @@ -1443,7 +1443,7 @@ # define __cpp_lib_format 202304L # endif # endif -#endif /* !defined(__cpp_lib_format) && defined(__glibcxx_want_format) */ +#endif /* !defined(__cpp_lib_format) */ #undef __glibcxx_want_format #if !defined(__cpp_lib_format_uchar) @@ -1453,7 +1453,7 @@ # define __cpp_lib_format_uchar 202311L # endif # endif -#endif /* !defined(__cpp_lib_format_uchar) && defined(__glibcxx_want_format_uchar) */ +#endif /* !defined(__cpp_lib_format_uchar) */ #undef __glibcxx_want_format_uchar #if !defined(__cpp_lib_constexpr_complex) @@ -1463,7 +1463,7 @@ # define __cpp_lib_constexpr_complex 201711L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_complex) && defined(__glibcxx_want_constexpr_complex) */ +#endif /* !defined(__cpp_lib_constexpr_complex) */ #undef __glibcxx_want_constexpr_complex #if !defined(__cpp_lib_constexpr_dynamic_alloc) @@ -1473,7 +1473,7 @@ # define __cpp_lib_constexpr_dynamic_alloc 201907L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_dynamic_alloc) && defined(__glibcxx_want_constexpr_dynamic_alloc) */ +#endif /* !defined(__cpp_lib_constexpr_dynamic_alloc) */ #undef __glibcxx_want_constexpr_dynamic_alloc #if !defined(__cpp_lib_constexpr_string) @@ -1493,7 +1493,7 @@ # define __cpp_lib_constexpr_string 201611L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_string) && defined(__glibcxx_want_constexpr_string) */ +#endif /* !defined(__cpp_lib_constexpr_string) */ #undef __glibcxx_want_constexpr_string #if !defined(__cpp_lib_constexpr_vector) @@ -1503,7 +1503,7 @@ # define __cpp_lib_constexpr_vector 201907L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_vector) && defined(__glibcxx_want_constexpr_vector) */ +#endif /* !defined(__cpp_lib_constexpr_vector) */ #undef __glibcxx_want_constexpr_vector #if !defined(__cpp_lib_constrained_equality) @@ -1518,7 +1518,7 @@ # define __cpp_lib_constrained_equality 202403L # endif # endif -#endif /* !defined(__cpp_lib_constrained_equality) && defined(__glibcxx_want_constrained_equality) */ +#endif /* !defined(__cpp_lib_constrained_equality) */ #undef __glibcxx_want_constrained_equality #if !defined(__cpp_lib_erase_if) @@ -1528,7 +1528,7 @@ # define __cpp_lib_erase_if 202002L # endif # endif -#endif /* !defined(__cpp_lib_erase_if) && defined(__glibcxx_want_erase_if) */ +#endif /* !defined(__cpp_lib_erase_if) */ #undef __glibcxx_want_erase_if #if !defined(__cpp_lib_generic_unordered_lookup) @@ -1538,7 +1538,7 @@ # define __cpp_lib_generic_unordered_lookup 201811L # endif # endif -#endif /* !defined(__cpp_lib_generic_unordered_lookup) && defined(__glibcxx_want_generic_unordered_lookup) */ +#endif /* !defined(__cpp_lib_generic_unordered_lookup) */ #undef __glibcxx_want_generic_unordered_lookup #if !defined(__cpp_lib_jthread) @@ -1548,7 +1548,7 @@ # define __cpp_lib_jthread 201911L # endif # endif -#endif /* !defined(__cpp_lib_jthread) && defined(__glibcxx_want_jthread) */ +#endif /* !defined(__cpp_lib_jthread) */ #undef __glibcxx_want_jthread #if !defined(__cpp_lib_latch) @@ -1558,7 +1558,7 @@ # define __cpp_lib_latch 201907L # endif # endif -#endif /* !defined(__cpp_lib_latch) && defined(__glibcxx_want_latch) */ +#endif /* !defined(__cpp_lib_latch) */ #undef __glibcxx_want_latch #if !defined(__cpp_lib_list_remove_return_type) @@ -1568,7 +1568,7 @@ # define __cpp_lib_list_remove_return_type 201806L # endif # endif -#endif /* !defined(__cpp_lib_list_remove_return_type) && defined(__glibcxx_want_list_remove_return_type) */ +#endif /* !defined(__cpp_lib_list_remove_return_type) */ #undef __glibcxx_want_list_remove_return_type #if !defined(__cpp_lib_polymorphic_allocator) @@ -1578,7 +1578,7 @@ # define __cpp_lib_polymorphic_allocator 201902L # endif # endif -#endif /* !defined(__cpp_lib_polymorphic_allocator) && defined(__glibcxx_want_polymorphic_allocator) */ +#endif /* !defined(__cpp_lib_polymorphic_allocator) */ #undef __glibcxx_want_polymorphic_allocator #if !defined(__cpp_lib_move_iterator_concept) @@ -1588,7 +1588,7 @@ # define __cpp_lib_move_iterator_concept 202207L # endif # endif -#endif /* !defined(__cpp_lib_move_iterator_concept) && defined(__glibcxx_want_move_iterator_concept) */ +#endif /* !defined(__cpp_lib_move_iterator_concept) */ #undef __glibcxx_want_move_iterator_concept #if !defined(__cpp_lib_semaphore) @@ -1598,7 +1598,7 @@ # define __cpp_lib_semaphore 201907L # endif # endif -#endif /* !defined(__cpp_lib_semaphore) && defined(__glibcxx_want_semaphore) */ +#endif /* !defined(__cpp_lib_semaphore) */ #undef __glibcxx_want_semaphore #if !defined(__cpp_lib_smart_ptr_for_overwrite) @@ -1608,7 +1608,7 @@ # define __cpp_lib_smart_ptr_for_overwrite 202002L # endif # endif -#endif /* !defined(__cpp_lib_smart_ptr_for_overwrite) && defined(__glibcxx_want_smart_ptr_for_overwrite) */ +#endif /* !defined(__cpp_lib_smart_ptr_for_overwrite) */ #undef __glibcxx_want_smart_ptr_for_overwrite #if !defined(__cpp_lib_syncbuf) @@ -1618,7 +1618,7 @@ # define __cpp_lib_syncbuf 201803L # endif # endif -#endif /* !defined(__cpp_lib_syncbuf) && defined(__glibcxx_want_syncbuf) */ +#endif /* !defined(__cpp_lib_syncbuf) */ #undef __glibcxx_want_syncbuf #if !defined(__cpp_lib_byteswap) @@ -1628,7 +1628,7 @@ # define __cpp_lib_byteswap 202110L # endif # endif -#endif /* !defined(__cpp_lib_byteswap) && defined(__glibcxx_want_byteswap) */ +#endif /* !defined(__cpp_lib_byteswap) */ #undef __glibcxx_want_byteswap #if !defined(__cpp_lib_constexpr_charconv) @@ -1638,7 +1638,7 @@ # define __cpp_lib_constexpr_charconv 202207L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_charconv) && defined(__glibcxx_want_constexpr_charconv) */ +#endif /* !defined(__cpp_lib_constexpr_charconv) */ #undef __glibcxx_want_constexpr_charconv #if !defined(__cpp_lib_constexpr_typeinfo) @@ -1648,7 +1648,7 @@ # define __cpp_lib_constexpr_typeinfo 202106L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_typeinfo) && defined(__glibcxx_want_constexpr_typeinfo) */ +#endif /* !defined(__cpp_lib_constexpr_typeinfo) */ #undef __glibcxx_want_constexpr_typeinfo #if !defined(__cpp_lib_expected) @@ -1658,7 +1658,7 @@ # define __cpp_lib_expected 202211L # endif # endif -#endif /* !defined(__cpp_lib_expected) && defined(__glibcxx_want_expected) */ +#endif /* !defined(__cpp_lib_expected) */ #undef __glibcxx_want_expected #if !defined(__cpp_lib_format_ranges) @@ -1668,7 +1668,7 @@ # define __cpp_lib_format_ranges 202207L # endif # endif -#endif /* !defined(__cpp_lib_format_ranges) && defined(__glibcxx_want_format_ranges) */ +#endif /* !defined(__cpp_lib_format_ranges) */ #undef __glibcxx_want_format_ranges #if !defined(__cpp_lib_freestanding_algorithm) @@ -1678,7 +1678,7 @@ # define __cpp_lib_freestanding_algorithm 202311L # endif # endif -#endif /* !defined(__cpp_lib_freestanding_algorithm) && defined(__glibcxx_want_freestanding_algorithm) */ +#endif /* !defined(__cpp_lib_freestanding_algorithm) */ #undef __glibcxx_want_freestanding_algorithm #if !defined(__cpp_lib_freestanding_array) @@ -1688,7 +1688,7 @@ # define __cpp_lib_freestanding_array 202311L # endif # endif -#endif /* !defined(__cpp_lib_freestanding_array) && defined(__glibcxx_want_freestanding_array) */ +#endif /* !defined(__cpp_lib_freestanding_array) */ #undef __glibcxx_want_freestanding_array #if !defined(__cpp_lib_freestanding_cstring) @@ -1698,7 +1698,7 @@ # define __cpp_lib_freestanding_cstring 202311L # endif # endif -#endif /* !defined(__cpp_lib_freestanding_cstring) && defined(__glibcxx_want_freestanding_cstring) */ +#endif /* !defined(__cpp_lib_freestanding_cstring) */ #undef __glibcxx_want_freestanding_cstring #if !defined(__cpp_lib_freestanding_expected) @@ -1708,7 +1708,7 @@ # define __cpp_lib_freestanding_expected 202311L # endif # endif -#endif /* !defined(__cpp_lib_freestanding_expected) && defined(__glibcxx_want_freestanding_expected) */ +#endif /* !defined(__cpp_lib_freestanding_expected) */ #undef __glibcxx_want_freestanding_expected #if !defined(__cpp_lib_freestanding_optional) @@ -1718,7 +1718,7 @@ # define __cpp_lib_freestanding_optional 202311L # endif # endif -#endif /* !defined(__cpp_lib_freestanding_optional) && defined(__glibcxx_want_freestanding_optional) */ +#endif /* !defined(__cpp_lib_freestanding_optional) */ #undef __glibcxx_want_freestanding_optional #if !defined(__cpp_lib_freestanding_string_view) @@ -1728,7 +1728,7 @@ # define __cpp_lib_freestanding_string_view 202311L # endif # endif -#endif /* !defined(__cpp_lib_freestanding_string_view) && defined(__glibcxx_want_freestanding_string_view) */ +#endif /* !defined(__cpp_lib_freestanding_string_view) */ #undef __glibcxx_want_freestanding_string_view #if !defined(__cpp_lib_freestanding_variant) @@ -1738,7 +1738,7 @@ # define __cpp_lib_freestanding_variant 202311L # endif # endif -#endif /* !defined(__cpp_lib_freestanding_variant) && defined(__glibcxx_want_freestanding_variant) */ +#endif /* !defined(__cpp_lib_freestanding_variant) */ #undef __glibcxx_want_freestanding_variant #if !defined(__cpp_lib_invoke_r) @@ -1748,7 +1748,7 @@ # define __cpp_lib_invoke_r 202106L # endif # endif -#endif /* !defined(__cpp_lib_invoke_r) && defined(__glibcxx_want_invoke_r) */ +#endif /* !defined(__cpp_lib_invoke_r) */ #undef __glibcxx_want_invoke_r #if !defined(__cpp_lib_is_scoped_enum) @@ -1758,7 +1758,7 @@ # define __cpp_lib_is_scoped_enum 202011L # endif # endif -#endif /* !defined(__cpp_lib_is_scoped_enum) && defined(__glibcxx_want_is_scoped_enum) */ +#endif /* !defined(__cpp_lib_is_scoped_enum) */ #undef __glibcxx_want_is_scoped_enum #if !defined(__cpp_lib_reference_from_temporary) @@ -1768,7 +1768,7 @@ # define __cpp_lib_reference_from_temporary 202202L # endif # endif -#endif /* !defined(__cpp_lib_reference_from_temporary) && defined(__glibcxx_want_reference_from_temporary) */ +#endif /* !defined(__cpp_lib_reference_from_temporary) */ #undef __glibcxx_want_reference_from_temporary #if !defined(__cpp_lib_containers_ranges) @@ -1778,7 +1778,7 @@ # define __cpp_lib_containers_ranges 202202L # endif # endif -#endif /* !defined(__cpp_lib_containers_ranges) && defined(__glibcxx_want_containers_ranges) */ +#endif /* !defined(__cpp_lib_containers_ranges) */ #undef __glibcxx_want_containers_ranges #if !defined(__cpp_lib_ranges_to_container) @@ -1788,7 +1788,7 @@ # define __cpp_lib_ranges_to_container 202202L # endif # endif -#endif /* !defined(__cpp_lib_ranges_to_container) && defined(__glibcxx_want_ranges_to_container) */ +#endif /* !defined(__cpp_lib_ranges_to_container) */ #undef __glibcxx_want_ranges_to_container #if !defined(__cpp_lib_ranges_zip) @@ -1798,7 +1798,7 @@ # define __cpp_lib_ranges_zip 202110L # endif # endif -#endif /* !defined(__cpp_lib_ranges_zip) && defined(__glibcxx_want_ranges_zip) */ +#endif /* !defined(__cpp_lib_ranges_zip) */ #undef __glibcxx_want_ranges_zip #if !defined(__cpp_lib_ranges_chunk) @@ -1808,7 +1808,7 @@ # define __cpp_lib_ranges_chunk 202202L # endif # endif -#endif /* !defined(__cpp_lib_ranges_chunk) && defined(__glibcxx_want_ranges_chunk) */ +#endif /* !defined(__cpp_lib_ranges_chunk) */ #undef __glibcxx_want_ranges_chunk #if !defined(__cpp_lib_ranges_slide) @@ -1818,7 +1818,7 @@ # define __cpp_lib_ranges_slide 202202L # endif # endif -#endif /* !defined(__cpp_lib_ranges_slide) && defined(__glibcxx_want_ranges_slide) */ +#endif /* !defined(__cpp_lib_ranges_slide) */ #undef __glibcxx_want_ranges_slide #if !defined(__cpp_lib_ranges_chunk_by) @@ -1828,7 +1828,7 @@ # define __cpp_lib_ranges_chunk_by 202202L # endif # endif -#endif /* !defined(__cpp_lib_ranges_chunk_by) && defined(__glibcxx_want_ranges_chunk_by) */ +#endif /* !defined(__cpp_lib_ranges_chunk_by) */ #undef __glibcxx_want_ranges_chunk_by #if !defined(__cpp_lib_ranges_join_with) @@ -1838,7 +1838,7 @@ # define __cpp_lib_ranges_join_with 202202L # endif # endif -#endif /* !defined(__cpp_lib_ranges_join_with) && defined(__glibcxx_want_ranges_join_with) */ +#endif /* !defined(__cpp_lib_ranges_join_with) */ #undef __glibcxx_want_ranges_join_with #if !defined(__cpp_lib_ranges_repeat) @@ -1848,7 +1848,7 @@ # define __cpp_lib_ranges_repeat 202207L # endif # endif -#endif /* !defined(__cpp_lib_ranges_repeat) && defined(__glibcxx_want_ranges_repeat) */ +#endif /* !defined(__cpp_lib_ranges_repeat) */ #undef __glibcxx_want_ranges_repeat #if !defined(__cpp_lib_ranges_stride) @@ -1858,7 +1858,7 @@ # define __cpp_lib_ranges_stride 202207L # endif # endif -#endif /* !defined(__cpp_lib_ranges_stride) && defined(__glibcxx_want_ranges_stride) */ +#endif /* !defined(__cpp_lib_ranges_stride) */ #undef __glibcxx_want_ranges_stride #if !defined(__cpp_lib_ranges_cartesian_product) @@ -1868,7 +1868,7 @@ # define __cpp_lib_ranges_cartesian_product 202207L # endif # endif -#endif /* !defined(__cpp_lib_ranges_cartesian_product) && defined(__glibcxx_want_ranges_cartesian_product) */ +#endif /* !defined(__cpp_lib_ranges_cartesian_product) */ #undef __glibcxx_want_ranges_cartesian_product #if !defined(__cpp_lib_ranges_as_rvalue) @@ -1878,7 +1878,7 @@ # define __cpp_lib_ranges_as_rvalue 202207L # endif # endif -#endif /* !defined(__cpp_lib_ranges_as_rvalue) && defined(__glibcxx_want_ranges_as_rvalue) */ +#endif /* !defined(__cpp_lib_ranges_as_rvalue) */ #undef __glibcxx_want_ranges_as_rvalue #if !defined(__cpp_lib_ranges_as_const) @@ -1888,7 +1888,7 @@ # define __cpp_lib_ranges_as_const 202311L # endif # endif -#endif /* !defined(__cpp_lib_ranges_as_const) && defined(__glibcxx_want_ranges_as_const) */ +#endif /* !defined(__cpp_lib_ranges_as_const) */ #undef __glibcxx_want_ranges_as_const #if !defined(__cpp_lib_ranges_enumerate) @@ -1898,7 +1898,7 @@ # define __cpp_lib_ranges_enumerate 202302L # endif # endif -#endif /* !defined(__cpp_lib_ranges_enumerate) && defined(__glibcxx_want_ranges_enumerate) */ +#endif /* !defined(__cpp_lib_ranges_enumerate) */ #undef __glibcxx_want_ranges_enumerate #if !defined(__cpp_lib_ranges_fold) @@ -1908,7 +1908,7 @@ # define __cpp_lib_ranges_fold 202207L # endif # endif -#endif /* !defined(__cpp_lib_ranges_fold) && defined(__glibcxx_want_ranges_fold) */ +#endif /* !defined(__cpp_lib_ranges_fold) */ #undef __glibcxx_want_ranges_fold #if !defined(__cpp_lib_ranges_contains) @@ -1918,7 +1918,7 @@ # define __cpp_lib_ranges_contains 202207L # endif # endif -#endif /* !defined(__cpp_lib_ranges_contains) && defined(__glibcxx_want_ranges_contains) */ +#endif /* !defined(__cpp_lib_ranges_contains) */ #undef __glibcxx_want_ranges_contains #if !defined(__cpp_lib_ranges_iota) @@ -1928,7 +1928,7 @@ # define __cpp_lib_ranges_iota 202202L # endif # endif -#endif /* !defined(__cpp_lib_ranges_iota) && defined(__glibcxx_want_ranges_iota) */ +#endif /* !defined(__cpp_lib_ranges_iota) */ #undef __glibcxx_want_ranges_iota #if !defined(__cpp_lib_ranges_find_last) @@ -1938,7 +1938,7 @@ # define __cpp_lib_ranges_find_last 202207L # endif # endif -#endif /* !defined(__cpp_lib_ranges_find_last) && defined(__glibcxx_want_ranges_find_last) */ +#endif /* !defined(__cpp_lib_ranges_find_last) */ #undef __glibcxx_want_ranges_find_last #if !defined(__cpp_lib_ranges_starts_ends_with) @@ -1948,7 +1948,7 @@ # define __cpp_lib_ranges_starts_ends_with 202106L # endif # endif -#endif /* !defined(__cpp_lib_ranges_starts_ends_with) && defined(__glibcxx_want_ranges_starts_ends_with) */ +#endif /* !defined(__cpp_lib_ranges_starts_ends_with) */ #undef __glibcxx_want_ranges_starts_ends_with #if !defined(__cpp_lib_constexpr_bitset) @@ -1958,7 +1958,7 @@ # define __cpp_lib_constexpr_bitset 202202L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_bitset) && defined(__glibcxx_want_constexpr_bitset) */ +#endif /* !defined(__cpp_lib_constexpr_bitset) */ #undef __glibcxx_want_constexpr_bitset #if !defined(__cpp_lib_stdatomic_h) @@ -1968,7 +1968,7 @@ # define __cpp_lib_stdatomic_h 202011L # endif # endif -#endif /* !defined(__cpp_lib_stdatomic_h) && defined(__glibcxx_want_stdatomic_h) */ +#endif /* !defined(__cpp_lib_stdatomic_h) */ #undef __glibcxx_want_stdatomic_h #if !defined(__cpp_lib_adaptor_iterator_pair_constructor) @@ -1978,7 +1978,7 @@ # define __cpp_lib_adaptor_iterator_pair_constructor 202106L # endif # endif -#endif /* !defined(__cpp_lib_adaptor_iterator_pair_constructor) && defined(__glibcxx_want_adaptor_iterator_pair_constructor) */ +#endif /* !defined(__cpp_lib_adaptor_iterator_pair_constructor) */ #undef __glibcxx_want_adaptor_iterator_pair_constructor #if !defined(__cpp_lib_flat_map) @@ -1988,7 +1988,7 @@ # define __cpp_lib_flat_map 202207L # endif # endif -#endif /* !defined(__cpp_lib_flat_map) && defined(__glibcxx_want_flat_map) */ +#endif /* !defined(__cpp_lib_flat_map) */ #undef __glibcxx_want_flat_map #if !defined(__cpp_lib_flat_set) @@ -1998,7 +1998,7 @@ # define __cpp_lib_flat_set 202207L # endif # endif -#endif /* !defined(__cpp_lib_flat_set) && defined(__glibcxx_want_flat_set) */ +#endif /* !defined(__cpp_lib_flat_set) */ #undef __glibcxx_want_flat_set #if !defined(__cpp_lib_formatters) @@ -2008,7 +2008,7 @@ # define __cpp_lib_formatters 202302L # endif # endif -#endif /* !defined(__cpp_lib_formatters) && defined(__glibcxx_want_formatters) */ +#endif /* !defined(__cpp_lib_formatters) */ #undef __glibcxx_want_formatters #if !defined(__cpp_lib_forward_like) @@ -2018,7 +2018,7 @@ # define __cpp_lib_forward_like 202207L # endif # endif -#endif /* !defined(__cpp_lib_forward_like) && defined(__glibcxx_want_forward_like) */ +#endif /* !defined(__cpp_lib_forward_like) */ #undef __glibcxx_want_forward_like #if !defined(__cpp_lib_generator) @@ -2028,7 +2028,7 @@ # define __cpp_lib_generator 202207L # endif # endif -#endif /* !defined(__cpp_lib_generator) && defined(__glibcxx_want_generator) */ +#endif /* !defined(__cpp_lib_generator) */ #undef __glibcxx_want_generator #if !defined(__cpp_lib_ios_noreplace) @@ -2038,7 +2038,7 @@ # define __cpp_lib_ios_noreplace 202207L # endif # endif -#endif /* !defined(__cpp_lib_ios_noreplace) && defined(__glibcxx_want_ios_noreplace) */ +#endif /* !defined(__cpp_lib_ios_noreplace) */ #undef __glibcxx_want_ios_noreplace #if !defined(__cpp_lib_move_only_function) @@ -2048,7 +2048,7 @@ # define __cpp_lib_move_only_function 202110L # endif # endif -#endif /* !defined(__cpp_lib_move_only_function) && defined(__glibcxx_want_move_only_function) */ +#endif /* !defined(__cpp_lib_move_only_function) */ #undef __glibcxx_want_move_only_function #if !defined(__cpp_lib_copyable_function) @@ -2058,7 +2058,7 @@ # define __cpp_lib_copyable_function 202306L # endif # endif -#endif /* !defined(__cpp_lib_copyable_function) && defined(__glibcxx_want_copyable_function) */ +#endif /* !defined(__cpp_lib_copyable_function) */ #undef __glibcxx_want_copyable_function #if !defined(__cpp_lib_function_ref) @@ -2068,7 +2068,7 @@ # define __cpp_lib_function_ref 202306L # endif # endif -#endif /* !defined(__cpp_lib_function_ref) && defined(__glibcxx_want_function_ref) */ +#endif /* !defined(__cpp_lib_function_ref) */ #undef __glibcxx_want_function_ref #if !defined(__cpp_lib_out_ptr) @@ -2078,7 +2078,7 @@ # define __cpp_lib_out_ptr 202311L # endif # endif -#endif /* !defined(__cpp_lib_out_ptr) && defined(__glibcxx_want_out_ptr) */ +#endif /* !defined(__cpp_lib_out_ptr) */ #undef __glibcxx_want_out_ptr #if !defined(__cpp_lib_print) @@ -2088,7 +2088,7 @@ # define __cpp_lib_print 202211L # endif # endif -#endif /* !defined(__cpp_lib_print) && defined(__glibcxx_want_print) */ +#endif /* !defined(__cpp_lib_print) */ #undef __glibcxx_want_print #if !defined(__cpp_lib_spanstream) @@ -2098,7 +2098,7 @@ # define __cpp_lib_spanstream 202106L # endif # endif -#endif /* !defined(__cpp_lib_spanstream) && defined(__glibcxx_want_spanstream) */ +#endif /* !defined(__cpp_lib_spanstream) */ #undef __glibcxx_want_spanstream #if !defined(__cpp_lib_stacktrace) @@ -2108,7 +2108,7 @@ # define __cpp_lib_stacktrace 202011L # endif # endif -#endif /* !defined(__cpp_lib_stacktrace) && defined(__glibcxx_want_stacktrace) */ +#endif /* !defined(__cpp_lib_stacktrace) */ #undef __glibcxx_want_stacktrace #if !defined(__cpp_lib_start_lifetime_as) @@ -2118,7 +2118,7 @@ # define __cpp_lib_start_lifetime_as 202207L # endif # endif -#endif /* !defined(__cpp_lib_start_lifetime_as) && defined(__glibcxx_want_start_lifetime_as) */ +#endif /* !defined(__cpp_lib_start_lifetime_as) */ #undef __glibcxx_want_start_lifetime_as #if !defined(__cpp_lib_string_contains) @@ -2128,7 +2128,7 @@ # define __cpp_lib_string_contains 202011L # endif # endif -#endif /* !defined(__cpp_lib_string_contains) && defined(__glibcxx_want_string_contains) */ +#endif /* !defined(__cpp_lib_string_contains) */ #undef __glibcxx_want_string_contains #if !defined(__cpp_lib_string_resize_and_overwrite) @@ -2138,7 +2138,7 @@ # define __cpp_lib_string_resize_and_overwrite 202110L # endif # endif -#endif /* !defined(__cpp_lib_string_resize_and_overwrite) && defined(__glibcxx_want_string_resize_and_overwrite) */ +#endif /* !defined(__cpp_lib_string_resize_and_overwrite) */ #undef __glibcxx_want_string_resize_and_overwrite #if !defined(__cpp_lib_to_underlying) @@ -2148,7 +2148,7 @@ # define __cpp_lib_to_underlying 202102L # endif # endif -#endif /* !defined(__cpp_lib_to_underlying) && defined(__glibcxx_want_to_underlying) */ +#endif /* !defined(__cpp_lib_to_underlying) */ #undef __glibcxx_want_to_underlying #if !defined(__cpp_lib_tuple_like) @@ -2163,7 +2163,7 @@ # define __cpp_lib_tuple_like 202207L # endif # endif -#endif /* !defined(__cpp_lib_tuple_like) && defined(__glibcxx_want_tuple_like) */ +#endif /* !defined(__cpp_lib_tuple_like) */ #undef __glibcxx_want_tuple_like #if !defined(__cpp_lib_unreachable) @@ -2173,7 +2173,7 @@ # define __cpp_lib_unreachable 202202L # endif # endif -#endif /* !defined(__cpp_lib_unreachable) && defined(__glibcxx_want_unreachable) */ +#endif /* !defined(__cpp_lib_unreachable) */ #undef __glibcxx_want_unreachable #if !defined(__cpp_lib_algorithm_default_value_type) @@ -2183,7 +2183,7 @@ # define __cpp_lib_algorithm_default_value_type 202403L # endif # endif -#endif /* !defined(__cpp_lib_algorithm_default_value_type) && defined(__glibcxx_want_algorithm_default_value_type) */ +#endif /* !defined(__cpp_lib_algorithm_default_value_type) */ #undef __glibcxx_want_algorithm_default_value_type #if !defined(__cpp_lib_constexpr_new) @@ -2193,7 +2193,7 @@ # define __cpp_lib_constexpr_new 202406L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_new) && defined(__glibcxx_want_constexpr_new) */ +#endif /* !defined(__cpp_lib_constexpr_new) */ #undef __glibcxx_want_constexpr_new #if !defined(__cpp_lib_debugging) @@ -2203,7 +2203,7 @@ # define __cpp_lib_debugging 202403L # endif # endif -#endif /* !defined(__cpp_lib_debugging) && defined(__glibcxx_want_debugging) */ +#endif /* !defined(__cpp_lib_debugging) */ #undef __glibcxx_want_debugging #if !defined(__cpp_lib_fstream_native_handle) @@ -2213,7 +2213,7 @@ # define __cpp_lib_fstream_native_handle 202306L # endif # endif -#endif /* !defined(__cpp_lib_fstream_native_handle) && defined(__glibcxx_want_fstream_native_handle) */ +#endif /* !defined(__cpp_lib_fstream_native_handle) */ #undef __glibcxx_want_fstream_native_handle #if !defined(__cpp_lib_is_virtual_base_of) @@ -2223,7 +2223,7 @@ # define __cpp_lib_is_virtual_base_of 202406L # endif # endif -#endif /* !defined(__cpp_lib_is_virtual_base_of) && defined(__glibcxx_want_is_virtual_base_of) */ +#endif /* !defined(__cpp_lib_is_virtual_base_of) */ #undef __glibcxx_want_is_virtual_base_of #if !defined(__cpp_lib_ranges_cache_latest) @@ -2233,7 +2233,7 @@ # define __cpp_lib_ranges_cache_latest 202411L # endif # endif -#endif /* !defined(__cpp_lib_ranges_cache_latest) && defined(__glibcxx_want_ranges_cache_latest) */ +#endif /* !defined(__cpp_lib_ranges_cache_latest) */ #undef __glibcxx_want_ranges_cache_latest #if !defined(__cpp_lib_ranges_concat) @@ -2243,7 +2243,7 @@ # define __cpp_lib_ranges_concat 202403L # endif # endif -#endif /* !defined(__cpp_lib_ranges_concat) && defined(__glibcxx_want_ranges_concat) */ +#endif /* !defined(__cpp_lib_ranges_concat) */ #undef __glibcxx_want_ranges_concat #if !defined(__cpp_lib_ratio) @@ -2253,7 +2253,7 @@ # define __cpp_lib_ratio 202306L # endif # endif -#endif /* !defined(__cpp_lib_ratio) && defined(__glibcxx_want_ratio) */ +#endif /* !defined(__cpp_lib_ratio) */ #undef __glibcxx_want_ratio #if !defined(__cpp_lib_reference_wrapper) @@ -2263,7 +2263,7 @@ # define __cpp_lib_reference_wrapper 202403L # endif # endif -#endif /* !defined(__cpp_lib_reference_wrapper) && defined(__glibcxx_want_reference_wrapper) */ +#endif /* !defined(__cpp_lib_reference_wrapper) */ #undef __glibcxx_want_reference_wrapper #if !defined(__cpp_lib_saturation_arithmetic) @@ -2273,7 +2273,7 @@ # define __cpp_lib_saturation_arithmetic 202311L # endif # endif -#endif /* !defined(__cpp_lib_saturation_arithmetic) && defined(__glibcxx_want_saturation_arithmetic) */ +#endif /* !defined(__cpp_lib_saturation_arithmetic) */ #undef __glibcxx_want_saturation_arithmetic #if !defined(__cpp_lib_span_initializer_list) @@ -2283,7 +2283,7 @@ # define __cpp_lib_span_initializer_list 202311L # endif # endif -#endif /* !defined(__cpp_lib_span_initializer_list) && defined(__glibcxx_want_span_initializer_list) */ +#endif /* !defined(__cpp_lib_span_initializer_list) */ #undef __glibcxx_want_span_initializer_list #if !defined(__cpp_lib_text_encoding) @@ -2293,7 +2293,7 @@ # define __cpp_lib_text_encoding 202306L # endif # endif -#endif /* !defined(__cpp_lib_text_encoding) && defined(__glibcxx_want_text_encoding) */ +#endif /* !defined(__cpp_lib_text_encoding) */ #undef __glibcxx_want_text_encoding #if !defined(__cpp_lib_ranges_to_input) @@ -2303,7 +2303,7 @@ # define __cpp_lib_ranges_to_input 202502L # endif # endif -#endif /* !defined(__cpp_lib_ranges_to_input) && defined(__glibcxx_want_ranges_to_input) */ +#endif /* !defined(__cpp_lib_ranges_to_input) */ #undef __glibcxx_want_ranges_to_input #if !defined(__cpp_lib_to_string) @@ -2313,7 +2313,7 @@ # define __cpp_lib_to_string 202306L # endif # endif -#endif /* !defined(__cpp_lib_to_string) && defined(__glibcxx_want_to_string) */ +#endif /* !defined(__cpp_lib_to_string) */ #undef __glibcxx_want_to_string #if !defined(__cpp_lib_modules) @@ -2323,7 +2323,7 @@ # define __cpp_lib_modules 202207L # endif # endif -#endif /* !defined(__cpp_lib_modules) && defined(__glibcxx_want_modules) */ +#endif /* !defined(__cpp_lib_modules) */ #undef __glibcxx_want_modules #if !defined(__cpp_lib_inplace_vector) @@ -2333,7 +2333,7 @@ # define __cpp_lib_inplace_vector 202406L # endif # endif -#endif /* !defined(__cpp_lib_inplace_vector) && defined(__glibcxx_want_inplace_vector) */ +#endif /* !defined(__cpp_lib_inplace_vector) */ #undef __glibcxx_want_inplace_vector #if !defined(__cpp_lib_indirect) @@ -2343,7 +2343,7 @@ # define __cpp_lib_indirect 202502L # endif # endif -#endif /* !defined(__cpp_lib_indirect) && defined(__glibcxx_want_indirect) */ +#endif /* !defined(__cpp_lib_indirect) */ #undef __glibcxx_want_indirect #if !defined(__cpp_lib_polymorphic) @@ -2353,7 +2353,7 @@ # define __cpp_lib_polymorphic 202502L # endif # endif -#endif /* !defined(__cpp_lib_polymorphic) && defined(__glibcxx_want_polymorphic) */ +#endif /* !defined(__cpp_lib_polymorphic) */ #undef __glibcxx_want_polymorphic #if !defined(__cpp_lib_smart_ptr_owner_equality) @@ -2363,7 +2363,7 @@ # define __cpp_lib_smart_ptr_owner_equality 202306L # endif # endif -#endif /* !defined(__cpp_lib_smart_ptr_owner_equality) && defined(__glibcxx_want_smart_ptr_owner_equality) */ +#endif /* !defined(__cpp_lib_smart_ptr_owner_equality) */ #undef __glibcxx_want_smart_ptr_owner_equality #if !defined(__cpp_lib_sstream_from_string_view) @@ -2373,7 +2373,7 @@ # define __cpp_lib_sstream_from_string_view 202306L # endif # endif -#endif /* !defined(__cpp_lib_sstream_from_string_view) && defined(__glibcxx_want_sstream_from_string_view) */ +#endif /* !defined(__cpp_lib_sstream_from_string_view) */ #undef __glibcxx_want_sstream_from_string_view #if !defined(__cpp_lib_type_order) @@ -2383,7 +2383,7 @@ # define __cpp_lib_type_order 202506L # endif # endif -#endif /* !defined(__cpp_lib_type_order) && defined(__glibcxx_want_type_order) */ +#endif /* !defined(__cpp_lib_type_order) */ #undef __glibcxx_want_type_order #if !defined(__cpp_lib_exception_ptr_cast) @@ -2393,7 +2393,7 @@ # define __cpp_lib_exception_ptr_cast 202506L # endif # endif -#endif /* !defined(__cpp_lib_exception_ptr_cast) && defined(__glibcxx_want_exception_ptr_cast) */ +#endif /* !defined(__cpp_lib_exception_ptr_cast) */ #undef __glibcxx_want_exception_ptr_cast #if !defined(__cpp_lib_bitset) @@ -2403,7 +2403,7 @@ # define __cpp_lib_bitset 202306L # endif # endif -#endif /* !defined(__cpp_lib_bitset) && defined(__glibcxx_want_bitset) */ +#endif /* !defined(__cpp_lib_bitset) */ #undef __glibcxx_want_bitset #if !defined(__cpp_lib_constexpr_exceptions) @@ -2412,7 +2412,7 @@ # if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_exceptions) # endif # endif -#endif /* !defined(__cpp_lib_constexpr_exceptions) && defined(__glibcxx_want_constexpr_exceptions) */ +#endif /* !defined(__cpp_lib_constexpr_exceptions) */ #undef __glibcxx_want_constexpr_exceptions #if !defined(__cpp_lib_philox_engine) @@ -2422,7 +2422,7 @@ # define __cpp_lib_philox_engine 202406L # endif # endif -#endif /* !defined(__cpp_lib_philox_engine) && defined(__glibcxx_want_philox_engine) */ +#endif /* !defined(__cpp_lib_philox_engine) */ #undef __glibcxx_want_philox_engine #undef __glibcxx_want_all diff --git a/libstdc++-v3/include/bits/version.tpl b/libstdc++-v3/include/bits/version.tpl index ccda71d6bcfe..5d62b2a17f55 100644 --- a/libstdc++-v3/include/bits/version.tpl +++ b/libstdc++-v3/include/bits/version.tpl @@ -132,10 +132,11 @@ h This macro block defines two versions of each FTM: - 1. __glibcxx_NAME, which is defined unconditionally, and - 2. __cpp_lib_NAME, which is defined only if marked as wanted. + 1. __glibcxx_NAME, which is defined as long its conditions are met, and + 2. __cpp_lib_NAME, which is defined only if __glibcxx_want_NAME is defined + and no_stdname is not set. - This allows FTMs to depend on eachother in their definitions without messing + This allows FTMs to depend on each other in their definitions without messing with the exported values. This can also be used by bits that do not want to expose FTMs that they can't @@ -155,7 +156,7 @@ h # endif /*{ ENDFOR values }*/# endif -#endif /* !defined(__cpp_lib_/*{name}*/) && defined(__glibcxx_want_/*{name}*/) */ +#endif /* !defined(__cpp_lib_/*{name}*/) */ #undef __glibcxx_want_/*{name }*//*{ (unless (last-for?) "\n\n" "\n")}*/ /*{ ENDFOR ftms }*//*{ From ea05497d4a329f183ffb5428befc957c5522ef86 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 8 Oct 2025 15:26:54 +0100 Subject: [PATCH 186/216] libstdc++: Extend constexpr if to C++14 in _Hashtable::_S_nothrow_move() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We can use diagnostic pragmas to allow the constexpr if version of this function to be used for C++14 as well. We still need the __and_ version for C++11 because we can't use 'if' in constexpr functions at all before C++14. Also use the integral_constant::value static data member instead of invoking integral_constant::operator(), as it's a tiny bit cheaper to compiler. libstdc++-v3/ChangeLog: * include/bits/hashtable.h (_Hashtable::_S_nothrow_move): Use diagnostic pragmas to allow constexpr if in C++14. Use value member instead of operator(). Reviewed-by: Tomasz Kamiński --- libstdc++-v3/include/bits/hashtable.h | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/libstdc++-v3/include/bits/hashtable.h b/libstdc++-v3/include/bits/hashtable.h index 20f9bd98d5b7..b5a71f516f88 100644 --- a/libstdc++-v3/include/bits/hashtable.h +++ b/libstdc++-v3/include/bits/hashtable.h @@ -477,15 +477,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static constexpr bool _S_nothrow_move() { -#if __cplusplus <= 201402L +#if __cpp_constexpr >= 201304 // >= C++14 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr + if constexpr (_No_realloc) + if constexpr (is_nothrow_copy_constructible<_Hash>::value) + return is_nothrow_copy_constructible<_Equal>::value; + return false; +# pragma GCC diagnostic pop +#else // In C++11 a constexpr function must be a single statement. return __and_<__bool_constant<_No_realloc>, is_nothrow_copy_constructible<_Hash>, is_nothrow_copy_constructible<_Equal>>::value; -#else - if constexpr (_No_realloc) - if constexpr (is_nothrow_copy_constructible<_Hash>()) - return is_nothrow_copy_constructible<_Equal>(); - return false; #endif } From 0558c6028e47eb623365c3865577f40f9d1fa27c Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Thu, 9 Oct 2025 11:38:50 -0400 Subject: [PATCH 187/216] diagnostics: add class sink::extension This patch provides a way for plugins to add extra information to a diagnostic sink, potentially capturing more information via a "finalizer" hook. gcc/c-family/ChangeLog: * c-opts.cc: Define INCLUDE_VECTOR. gcc/cp/ChangeLog: * error.cc: Define INCLUDE_VECTOR. gcc/ChangeLog: * diagnostic-global-context.cc: Define INCLUDE_VECTOR. * diagnostics/buffering.cc: Likewise. * diagnostics/context.cc (context::finish): Call finalize_extensions on each sink. (sink::dump): Dump any extensions. (sink::finalize_extensions): New. * diagnostics/macro-unwinding.cc: Define INCLUDE_VECTOR. * diagnostics/selftest-context.cc: Likewise. * diagnostics/sink.h (class sink::extension): New. (sink::add_extension): New. (sink::finalize_extensions): New decl. (sink::m_extensions): New member. * gcc.cc: Define INCLUDE_VECTOR. * langhooks.cc: Likewise. * opts.cc: Likewise. * tree-diagnostic-client-data-hooks.cc: Likewise. * tree-diagnostic.cc: Likewise. gcc/fortran/ChangeLog: * error.cc: Define INCLUDE_VECTOR. gcc/testsuite/ChangeLog: * gcc.dg/plugin/diagnostic_group_plugin.cc: Define INCLUDE_VECTOR. * gcc.dg/plugin/diagnostic_plugin_test_show_locus.cc: Likewise. * gcc.dg/plugin/location_overflow_plugin.cc: Likewise. libcc1/ChangeLog: * context.cc: Define INCLUDE_VECTOR. Signed-off-by: David Malcolm --- gcc/c-family/c-opts.cc | 1 + gcc/cp/error.cc | 1 + gcc/diagnostic-global-context.cc | 1 + gcc/diagnostics/buffering.cc | 1 + gcc/diagnostics/context.cc | 17 ++++++++++ gcc/diagnostics/macro-unwinding.cc | 1 + gcc/diagnostics/selftest-context.cc | 1 + gcc/diagnostics/sink.h | 33 +++++++++++++++++++ gcc/fortran/error.cc | 1 + gcc/gcc.cc | 1 + gcc/langhooks.cc | 1 + gcc/opts.cc | 1 + .../gcc.dg/plugin/diagnostic_group_plugin.cc | 1 + .../diagnostic_plugin_test_show_locus.cc | 1 + .../gcc.dg/plugin/location_overflow_plugin.cc | 1 + gcc/tree-diagnostic-client-data-hooks.cc | 1 + gcc/tree-diagnostic.cc | 1 + libcc1/context.cc | 1 + 18 files changed, 66 insertions(+) diff --git a/gcc/c-family/c-opts.cc b/gcc/c-family/c-opts.cc index 54e397cda9a4..7bec3f105997 100644 --- a/gcc/c-family/c-opts.cc +++ b/gcc/c-family/c-opts.cc @@ -18,6 +18,7 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ +#define INCLUDE_VECTOR #include "config.h" #include "system.h" #include "coretypes.h" diff --git a/gcc/cp/error.cc b/gcc/cp/error.cc index 16dfeafc07a0..ae899ec9f770 100644 --- a/gcc/cp/error.cc +++ b/gcc/cp/error.cc @@ -17,6 +17,7 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ +#define INCLUDE_VECTOR #include "config.h" /* For use with name_hint. */ #include "system.h" diff --git a/gcc/diagnostic-global-context.cc b/gcc/diagnostic-global-context.cc index 30fc1906790c..94be0fed81e3 100644 --- a/gcc/diagnostic-global-context.cc +++ b/gcc/diagnostic-global-context.cc @@ -22,6 +22,7 @@ along with GCC; see the file COPYING3. If not see /* This file implements the parts of the language independent aspect of diagnostic messages that implicitly use global_dc. */ +#define INCLUDE_VECTOR #include "config.h" #include "system.h" #include "coretypes.h" diff --git a/gcc/diagnostics/buffering.cc b/gcc/diagnostics/buffering.cc index 019c9927c6d2..420a9cfbeea3 100644 --- a/gcc/diagnostics/buffering.cc +++ b/gcc/diagnostics/buffering.cc @@ -18,6 +18,7 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ +#define INCLUDE_VECTOR #include "config.h" #include "system.h" #include "coretypes.h" diff --git a/gcc/diagnostics/context.cc b/gcc/diagnostics/context.cc index cd14977d5425..dd6bbdb29cd7 100644 --- a/gcc/diagnostics/context.cc +++ b/gcc/diagnostics/context.cc @@ -361,6 +361,9 @@ context::finish () dump (m_logger->get_stream (), m_logger->get_indent ()); } + for (auto iter : m_sinks) + iter->finalize_extensions (); + /* We might be handling a fatal error. Close any active diagnostic groups, which may trigger flushing sinks. */ @@ -1860,6 +1863,20 @@ sink::dump (FILE *out, int indent) const { dumping::emit_heading (out, indent, "printer"); m_printer->dump (out, indent + 2); + + dumping::emit_heading (out, indent, "extensions"); + if (m_extensions.empty ()) + dumping::emit_none (out, indent + 2); + else + for (auto &ext : m_extensions) + ext->dump (out, indent + 2); +} + +void +sink::finalize_extensions () +{ + for (auto &ext : m_extensions) + ext->finalize (); } void diff --git a/gcc/diagnostics/macro-unwinding.cc b/gcc/diagnostics/macro-unwinding.cc index fb4ee65f4244..4d7133963ad9 100644 --- a/gcc/diagnostics/macro-unwinding.cc +++ b/gcc/diagnostics/macro-unwinding.cc @@ -17,6 +17,7 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ +#define INCLUDE_VECTOR #include "config.h" #include "system.h" #include "coretypes.h" diff --git a/gcc/diagnostics/selftest-context.cc b/gcc/diagnostics/selftest-context.cc index 2eced4d3cd85..aafa90ac457d 100644 --- a/gcc/diagnostics/selftest-context.cc +++ b/gcc/diagnostics/selftest-context.cc @@ -17,6 +17,7 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ +#define INCLUDE_VECTOR #include "config.h" #include "system.h" #include "coretypes.h" diff --git a/gcc/diagnostics/sink.h b/gcc/diagnostics/sink.h index aaa6c50ab214..a2094e9f5a56 100644 --- a/gcc/diagnostics/sink.h +++ b/gcc/diagnostics/sink.h @@ -34,6 +34,27 @@ class per_sink_buffer; class sink { public: + /* Abstract base class for adding additional functionality to a sink + (e.g. via a plugin). */ + class extension + { + public: + virtual ~extension () {} + virtual void dump (FILE *out, int indent) const = 0; + virtual void finalize () {} + + sink &get_sink () const { return m_sink; } + + protected: + extension (sink &sink_) + : m_sink (sink_) + { + } + + private: + sink &m_sink; + }; + virtual ~sink () {} virtual text_sink *dyn_cast_text_sink () { return nullptr; } @@ -92,6 +113,15 @@ class sink logging::logger *get_logger () { return m_context.get_logger (); } + void + add_extension (std::unique_ptr sink_ext) + { + m_extensions.push_back (std::move (sink_ext)); + } + + void + finalize_extensions (); + protected: sink (context &dc) : m_context (dc), @@ -101,6 +131,9 @@ class sink protected: context &m_context; std::unique_ptr m_printer; + +private: + std::vector> m_extensions; }; extern void diff --git a/gcc/fortran/error.cc b/gcc/fortran/error.cc index ebf9e6197d22..8fde46ed6afc 100644 --- a/gcc/fortran/error.cc +++ b/gcc/fortran/error.cc @@ -24,6 +24,7 @@ along with GCC; see the file COPYING3. If not see for possible use later. If a line does not match a legal construction, then the saved error message is reported. */ +#define INCLUDE_VECTOR #include "config.h" #include "system.h" #include "coretypes.h" diff --git a/gcc/gcc.cc b/gcc/gcc.cc index 5dd33c2dfcbd..eae7f07d9626 100644 --- a/gcc/gcc.cc +++ b/gcc/gcc.cc @@ -28,6 +28,7 @@ Once it knows which kind of compilation to perform, the procedure for compilation is specified by a string called a "spec". */ #define INCLUDE_STRING +#define INCLUDE_VECTOR #include "config.h" #include "system.h" #ifdef HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE diff --git a/gcc/langhooks.cc b/gcc/langhooks.cc index 20d27a6d7fd0..6431d40af048 100644 --- a/gcc/langhooks.cc +++ b/gcc/langhooks.cc @@ -18,6 +18,7 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ +#define INCLUDE_VECTOR #include "config.h" #include "system.h" #include "coretypes.h" diff --git a/gcc/opts.cc b/gcc/opts.cc index 10ce2c3de336..21ac6b566e0b 100644 --- a/gcc/opts.cc +++ b/gcc/opts.cc @@ -18,6 +18,7 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ +#define INCLUDE_VECTOR #include "config.h" #include "system.h" #include "intl.h" diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.cc b/gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.cc index 48f832579add..2bead63eede8 100644 --- a/gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.cc +++ b/gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.cc @@ -1,5 +1,6 @@ /* { dg-options "-O" } */ +#define INCLUDE_VECTOR #include "gcc-plugin.h" #include "config.h" #include "system.h" diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.cc b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.cc index 92839cd35b7f..9ee3219370cb 100644 --- a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.cc +++ b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.cc @@ -32,6 +32,7 @@ to ensure that further very long lines don't start a new linemap. This also means that we can't use macros in the test files. */ +#define INCLUDE_VECTOR #include "gcc-plugin.h" #include "config.h" #include "system.h" diff --git a/gcc/testsuite/gcc.dg/plugin/location_overflow_plugin.cc b/gcc/testsuite/gcc.dg/plugin/location_overflow_plugin.cc index 00ad8704477a..2c40b311165e 100644 --- a/gcc/testsuite/gcc.dg/plugin/location_overflow_plugin.cc +++ b/gcc/testsuite/gcc.dg/plugin/location_overflow_plugin.cc @@ -1,6 +1,7 @@ /* Plugin for testing how gracefully we degrade in the face of very large source files. */ +#define INCLUDE_VECTOR #include "config.h" #include "gcc-plugin.h" #include "system.h" diff --git a/gcc/tree-diagnostic-client-data-hooks.cc b/gcc/tree-diagnostic-client-data-hooks.cc index 77eb292f787d..9ad608d17e09 100644 --- a/gcc/tree-diagnostic-client-data-hooks.cc +++ b/gcc/tree-diagnostic-client-data-hooks.cc @@ -19,6 +19,7 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ +#define INCLUDE_VECTOR #include "config.h" #include "system.h" #include "coretypes.h" diff --git a/gcc/tree-diagnostic.cc b/gcc/tree-diagnostic.cc index 20183c8bceda..4cf742d047d9 100644 --- a/gcc/tree-diagnostic.cc +++ b/gcc/tree-diagnostic.cc @@ -19,6 +19,7 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ +#define INCLUDE_VECTOR #include "config.h" #include "system.h" #include "coretypes.h" diff --git a/libcc1/context.cc b/libcc1/context.cc index 38343a7c29eb..b392f774c723 100644 --- a/libcc1/context.cc +++ b/libcc1/context.cc @@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see #undef PACKAGE_TARNAME #undef PACKAGE_VERSION +#define INCLUDE_VECTOR #include "gcc-plugin.h" #include "system.h" #include "coretypes.h" From 579de8f5295b05573d05f6e4102f1428f35c9f17 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Thu, 9 Oct 2025 18:06:39 +0200 Subject: [PATCH 188/216] gimplify: Fix up side-effect handling in 2nd __builtin_c[lt]zg argument [PR122188] The patch from yesterday made me think about side-effects in the second argument of __builtin_c[lt]zg. When we change __builtin_c[lt]zg (x, y) when y is not INTEGER_CST into x ? __builtin_c[lt]zg (x) : y with evaluating x only once, we omit the side-effects in y unless x is not 0. That looks undesirable, we should evaluate side-effects in y unconditionally. 2025-10-09 Jakub Jelinek PR c/122188 * c-gimplify.cc (c_gimplify_expr): Also gimplify the second operand before the COND_EXPR and use in COND_EXPR result of gimplification. * gcc.dg/torture/pr122188.c: New test. --- gcc/c-family/c-gimplify.cc | 6 ++++- gcc/testsuite/gcc.dg/torture/pr122188.c | 33 +++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr122188.c diff --git a/gcc/c-family/c-gimplify.cc b/gcc/c-family/c-gimplify.cc index 6fcd45830562..2249c101cf56 100644 --- a/gcc/c-family/c-gimplify.cc +++ b/gcc/c-family/c-gimplify.cc @@ -1040,6 +1040,10 @@ c_gimplify_expr (tree *expr_p, gimple_seq *pre_p ATTRIBUTE_UNUSED, if (gimplify_expr (&a, pre_p, post_p, is_gimple_val, fb_rvalue) == GS_ERROR) return GS_ERROR; + tree b = CALL_EXPR_ARG (*expr_p, 1); + if (gimplify_expr (&b, pre_p, post_p, is_gimple_val, fb_rvalue) + == GS_ERROR) + return GS_ERROR; tree c = build_call_expr_loc (EXPR_LOCATION (*expr_p), fndecl, 1, a); *expr_p = build3_loc (EXPR_LOCATION (*expr_p), COND_EXPR, @@ -1047,7 +1051,7 @@ c_gimplify_expr (tree *expr_p, gimple_seq *pre_p ATTRIBUTE_UNUSED, build2_loc (EXPR_LOCATION (*expr_p), NE_EXPR, boolean_type_node, a, build_zero_cst (TREE_TYPE (a))), - c, CALL_EXPR_ARG (*expr_p, 1)); + c, b); return GS_OK; } break; diff --git a/gcc/testsuite/gcc.dg/torture/pr122188.c b/gcc/testsuite/gcc.dg/torture/pr122188.c new file mode 100644 index 000000000000..2c549630f9de --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr122188.c @@ -0,0 +1,33 @@ +/* PR c/122188 */ +/* { dg-do run } */ + +int +foo (unsigned x, int y) +{ + unsigned a = x; + int b = y; + int ret = __builtin_ctzg (x++, y++); + if (x != a + 1 || y != b + 1) + __builtin_abort (); + return ret; +} + +int +bar (unsigned x, int y) +{ + unsigned a = x; + int b = y; + int ret = __builtin_clzg (x++, y++); + if (x != a + 1 || y != b + 1) + __builtin_abort (); + return ret; +} + +int +main () +{ + if (foo (0, 42) != 42 || foo (1, 5) != 0 || foo (4, 17) != 2) + __builtin_abort (); + if (bar (0, 42) != 42 || bar (~0U, 5) != 0 || bar (~0U >> 4, 17) != 4) + __builtin_abort (); +} From c474a50b42ac3f7561f628916cf58810044986b3 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Thu, 9 Oct 2025 18:43:22 +0200 Subject: [PATCH 189/216] Fortran: fix "unstable" interfaces of external procedures [PR122206] In the testcase repeated invocations of a function showed an apparently unstable interface. This was caused by trying to guess an (inappropriate) interface of the external procedure after processing of the procedure arguments in gfc_conv_procedure_call. The mis-guessed interface showed up in subsequent uses of the procedure symbol in gfc_conv_procedure_call. The solution is to check for an existing interface of an external procedure before trying to wildly guess based on just the actual arguments. PR fortran/122206 gcc/fortran/ChangeLog: * trans-types.cc (gfc_get_function_type): Do not clobber an existing procedure interface. gcc/testsuite/ChangeLog: * gfortran.dg/interface_abstract_6.f90: New test. --- gcc/fortran/trans-types.cc | 1 + .../gfortran.dg/interface_abstract_6.f90 | 53 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/interface_abstract_6.f90 diff --git a/gcc/fortran/trans-types.cc b/gcc/fortran/trans-types.cc index 26645b0f7f67..dfdac600c24d 100644 --- a/gcc/fortran/trans-types.cc +++ b/gcc/fortran/trans-types.cc @@ -3441,6 +3441,7 @@ gfc_get_function_type (gfc_symbol * sym, gfc_actual_arglist *actual_args, } } if (sym->backend_decl == error_mark_node && actual_args != NULL + && sym->ts.interface == NULL && sym->formal == NULL && (sym->attr.proc == PROC_EXTERNAL || sym->attr.proc == PROC_UNKNOWN)) gfc_get_formal_from_actual_arglist (sym, actual_args); diff --git a/gcc/testsuite/gfortran.dg/interface_abstract_6.f90 b/gcc/testsuite/gfortran.dg/interface_abstract_6.f90 new file mode 100644 index 000000000000..05b9a4e805f2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/interface_abstract_6.f90 @@ -0,0 +1,53 @@ +! { dg-do compile } +! { dg-options "-fdump-tree-original" } +! +! PR fortran/122206 +! +! Verify that procedure interfaces are "stable" + +module test_example + use, intrinsic :: iso_c_binding, only: c_double, c_int + implicit none + + abstract interface + function simple_interface(iarg1, arg2) bind(c) result(res) + import c_double, c_int + integer(c_int), value, intent(in) :: iarg1 + real(c_double), value, intent(in) :: arg2 + real(c_double) :: res + end function simple_interface + end interface + + procedure(simple_interface), bind(c,name="simple_function") :: simple_function + + interface + function other_interface(iarg1, arg2) result(res) + import c_double, c_int + integer(c_int), value, intent(in) :: iarg1 + real(c_double), value, intent(in) :: arg2 + real(c_double) :: res + end function other_interface + end interface + + procedure(other_interface) :: other_function + +contains + subroutine test_example_interface + implicit none + integer(c_int) :: iarg1 = 2 + real(c_double) :: arg2 = 10. + real(c_double) :: val1, val2 + + val1 = simple_function(iarg1, arg2) + val2 = simple_function(iarg1, arg2) + if (val1 /= val2) stop 1 + + val1 = other_function(iarg1, arg2) + val2 = other_function(iarg1, arg2) + if (val1 /= val2) stop 2 + + end subroutine test_example_interface +end module test_example + +! { dg-final { scan-tree-dump-times "simple_function \\(iarg1, arg2\\);" 2 "original"} } +! { dg-final { scan-tree-dump-times "other_function \\(iarg1, arg2\\);" 2 "original"} } From ccb2a10820c14be7a25a7694df91c7d748d10c9d Mon Sep 17 00:00:00 2001 From: Dimitar Dimitrov Date: Wed, 8 Oct 2025 21:45:09 +0300 Subject: [PATCH 190/216] testsuite: Explicitly enable cselim pass for cselim-2.c The cselim pass is enabled only for targets that have conditional move instructions. Since pru-unknown-elf doesn't have such instructions, the pass is not executed, and the test fails with: gcc.dg/tree-ssa/cselim-2.c: dump file does not exist UNRESOLVED: gcc.dg/tree-ssa/cselim-2.c scan-tree-dump cselim "if-then-else store replacement: 3" Fix by explicitly enabling the cselim pass for this test. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/cselim-2.c: Pass -ftree-cselim option. Signed-off-by: Dimitar Dimitrov --- gcc/testsuite/gcc.dg/tree-ssa/cselim-2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/testsuite/gcc.dg/tree-ssa/cselim-2.c b/gcc/testsuite/gcc.dg/tree-ssa/cselim-2.c index 2964fcfe1ff2..db58dd22e8a8 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/cselim-2.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/cselim-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-cselim-stats -fno-ssa-phiopt" } */ +/* { dg-options "-O2 -ftree-cselim -fdump-tree-cselim-stats -fno-ssa-phiopt" } */ struct Loc { int x[3]; From 310a70ef6db45d2fd574daa77b5128cd1f4edbce Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Thu, 9 Oct 2025 14:41:28 -0400 Subject: [PATCH 191/216] analyzer: reimplement binding_map using a "spatial" representation Previously, ana::binding_map was a hash_map combining both concrete and symbolic keys into the same map, with no meaningful ordering. This patch reimplements it as: concrete_bindings_t m_concrete; symbolic_bindings_t m_symbolic; where concrete_bindings_t is: std::map thus organizing them into order, and symbolic_bindings_t is: std::vector where a symbolic_binding is a (region, svalue pair) and the vector for now has at most one symbolic binding. In particular, this means that iterating over the bindings in a map or cluster yields them in ascending memory order of concrete bindings, followed by the symbolic binding (if present). This should allow various optimizations, make it easier to detect overlapping bindings, and to eventually better support analyzing code that builds up a string via concatenations (perhaps with multiple symbolic bindings "hanging off the end"). gcc/analyzer/ChangeLog: * access-diagram.cc: Update for renaming of fields of binding_key. * ana-state-to-diagnostic-state.cc: Likewise. * bounds-checking.cc: Likewise. Add store_manager param. * call-summary.cc: Likewise. * diagnostic-manager.cc: Drop includes of "basic-block.h" and "gimple.h". * engine.cc: Likewise. * infinite-recursion.cc: Update for renaming of fields of binding_key. * kf.cc: Pass store_manager to mark_as_escaped. * program-state.cc: Update for renaming of fields of binding_key. * region-model-asm.cc: Pass store manager to get_or_create_cluster. * region-model-reachability.cc: Likewise. Update for renaming of fields of binding_key. * region-model.cc: Likewise. (struct bad_pointer_finder): Drop. (region_model::poison_any_pointers_to_descendents): Implement iteration directly, rather than using store::for_each_binding. Drop return value. (selftest::test_struct): Set field in order y then x. Verify that iteration yields bindings in order x then y. * region-model.h (region_model::poison_any_pointers_to_descendents): Drop return value. * region.cc: Pass store manager to get_or_create_cluster. * store.cc (binding_map::const_iterator::operator==): New. (binding_map::const_iterator::operator++): New. (binding_map::const_iterator::operator*): New. (binding_map::iterator::operator==): New. (binding_map::iterator::operator++): New. (binding_map::iterator::operator*): New. (binding_map::binding_map): Reimplement. (binding_map::operator=): Reimplement. (binding_map::operator==): Reimplement. (binding_map::hash): Reimplement. (binding_map::get): Reimplement. (binding_map::put): Reimplement. (binding_map::overwrite): New. (binding_map::remove): New. (binding_map::begin): New. (binding_map::end): New. (binding_map::elements): New. (binding_map::dump_to_pp): Reimplement. (binding_map::to_json): Iterate over *this directly; drop sort. (binding_map::add_to_tree_widget): Likewise. (binding_map::cmp): Reimplement. (binding_map::get_overlapping_bindings): Update for field renamings. (binding_cluster::binding_cluster): Add store_mgr param. (binding_cluster::validate): Update for field renamings. (binding_cluster::bind_compound_sval): Likewise. (binding_cluster::purge_state_involving): Likewise. (binding_cluster::maybe_get_compound_binding): Likewise. Add store_mgr param. (binding_cluster::can_merge_p): Likewise. Update for new implementation. (binding_cluster::make_unknown_relative_to): Likewise. (binding_cluster::on_unknown_fncall): Likewise. (binding_cluster::on_asm): Likewise. (binding_cluster::get_representative_path_vars): Likewise. (store::set_value): Likewise. (store::on_maybe_live_values): Pass around store_manager. (store::fill_region): Likewise. (store::mark_region_as_unknown): Likewise. (store::get_or_create_cluster): Likewise. (store::can_merge_p): Likewise. (store::mark_as_escaped): Likewise. (store::canonicalize): Update for field renamings. (store::loop_replay_fixup): Likewise. Pass around store_manager. (store::replay_call_summary_cluster): Likewise. (selftest::test_binding_map_ops): New. (selftest::analyzer_store_cc_tests): Call it. * store.h (class binding_map): Reimplement. (binding_map::map_t): Drop. (struct binding_map::symbolic_binding): New. (binding_map::concrete_bindings_t): New. (binding_map::symbolic_bindings_t): New. (struct binding_map::bindings_pair): New. (class binding_map::const_iterator): New. (class binding_map::iterator): New. (binding_map::get): Reimplement. (binding_map::overwrite): New decl. (binding_map::remove): Reimplement. (binding_map::clear): Reimplement. (binding_map::put): Reimplement. (binding_map::empty_p): Reimplement. (binding_map::begin): Reimplement. (binding_map::end): Reimplement. (binding_map::elements): Reimplement. (binding_map::m_map): Drop field. (binding_map::m_store_mgr): New field. (binding_map::m_concrete): New field. (binding_map::m_symbolic): New field. (BindingVisitor): Drop. (binding_cluster::map_t): Drop. (binding_cluster::iterator_t): Reimplement. (binding_cluster::const_iterator_t): New. (binding_cluster::binding_cluster): Add store_mgr param. (binding_cluster::for_each_value): Reimplement. (binding_cluster::empty_p): Reimplement. (binding_cluster::for_each_binding): Drop. (binding_cluster::begin): Split into const/non-const overloads. (binding_cluster::get_map): Add non-const overload. (store::get_or_create_cluster): Add store_mgr param. (store::mark_as_escaped): Likewise. (store::for_each_binding): Drop. (store::on_maybe_live_values): Add store_mgr param. * svalue.cc (compound_svalue::compound_svalue): Reimplement. (compound_svalue::accept): Likewise. (compound_svalue::calc_complexity): Likewise. (compound_svalue::maybe_fold_bits_within): Likewise. * svalue.h (compound_svalue::const_iterator_t): New. (compound_svalue::begin): Split into const/non-const overloads. (compound_svalue::end): Likewise. gcc/testsuite/ChangeLog: * gcc.dg/plugin/analyzer_cpython_plugin.cc: Replace INCLUDE_ defines with include of include "analyzer/common.h". Update for changes to binding_pair. * gcc.dg/plugin/analyzer_kernel_plugin.cc: Likewise. * gcc.dg/plugin/analyzer_known_fns_plugin.cc: Likewise. Signed-off-by: David Malcolm --- gcc/analyzer/access-diagram.cc | 4 +- gcc/analyzer/ana-state-to-diagnostic-state.cc | 6 +- gcc/analyzer/bounds-checking.cc | 6 +- gcc/analyzer/call-summary.cc | 8 +- gcc/analyzer/diagnostic-manager.cc | 2 - gcc/analyzer/engine.cc | 2 - gcc/analyzer/infinite-recursion.cc | 2 +- gcc/analyzer/kf.cc | 3 +- gcc/analyzer/program-state.cc | 4 +- gcc/analyzer/region-model-asm.cc | 4 +- gcc/analyzer/region-model-reachability.cc | 11 +- gcc/analyzer/region-model.cc | 117 ++--- gcc/analyzer/region-model.h | 4 +- gcc/analyzer/region.cc | 6 +- gcc/analyzer/store.cc | 448 +++++++++++++----- gcc/analyzer/store.h | 181 ++++--- gcc/analyzer/svalue.cc | 24 +- gcc/analyzer/svalue.h | 7 +- .../gcc.dg/plugin/analyzer_cpython_plugin.cc | 11 +- .../gcc.dg/plugin/analyzer_kernel_plugin.cc | 7 +- .../plugin/analyzer_known_fns_plugin.cc | 7 +- 21 files changed, 560 insertions(+), 304 deletions(-) diff --git a/gcc/analyzer/access-diagram.cc b/gcc/analyzer/access-diagram.cc index 166be08f1c28..6e301b9132b8 100644 --- a/gcc/analyzer/access-diagram.cc +++ b/gcc/analyzer/access-diagram.cc @@ -1216,8 +1216,8 @@ class compound_svalue_spatial_item : public svalue_spatial_item auto_vec binding_keys; for (auto iter : map) { - const binding_key *key = iter.first; - const svalue *bound_sval = iter.second; + const binding_key *key = iter.m_key; + const svalue *bound_sval = iter.m_sval; if (const concrete_binding *concrete_key = key->dyn_cast_concrete_binding ()) { diff --git a/gcc/analyzer/ana-state-to-diagnostic-state.cc b/gcc/analyzer/ana-state-to-diagnostic-state.cc index 996538c37852..25e66a0e5410 100644 --- a/gcc/analyzer/ana-state-to-diagnostic-state.cc +++ b/gcc/analyzer/ana-state-to-diagnostic-state.cc @@ -86,7 +86,7 @@ analyzer_state_graph::analyzer_state_graph (const program_state &state, for (auto cluster_iter : *state.m_region_model->get_store ()) for (auto binding_iter : *cluster_iter.second) { - const svalue *svalue = binding_iter.second; + const svalue *svalue = binding_iter.m_sval; if (const region *reg = svalue->maybe_get_region ()) if (svalue->get_type () && !reg->get_type ()) { @@ -417,8 +417,8 @@ create_state_nodes_for_binding_cluster (const binding_cluster &cluster, concrete_bindings_t conc_bindings; for (auto iter : cluster) { - const binding_key *key = iter.first; - const svalue *svalue = iter.second; + const binding_key *key = iter.m_key; + const svalue *svalue = iter.m_sval; if (auto conc_key = key->dyn_cast_concrete_binding ()) conc_bindings[conc_key->get_bit_range ()] = svalue; if (const region *reg = svalue->maybe_get_region ()) diff --git a/gcc/analyzer/bounds-checking.cc b/gcc/analyzer/bounds-checking.cc index 921ad16307e9..7c51ca27bc5b 100644 --- a/gcc/analyzer/bounds-checking.cc +++ b/gcc/analyzer/bounds-checking.cc @@ -1334,11 +1334,11 @@ strip_types (const svalue *sval, case SK_COMPOUND: { const compound_svalue *compound_sval = (const compound_svalue *)sval; - binding_map typeless_map; + binding_map typeless_map (*mgr.get_store_manager ()); for (auto iter : compound_sval->get_map ()) { - const binding_key *key = iter.first; - const svalue *bound_sval = iter.second; + const binding_key *key = iter.m_key; + const svalue *bound_sval = iter.m_sval; typeless_map.put (key, strip_types (bound_sval, mgr)); } return mgr.get_or_create_compound_svalue (NULL_TREE, typeless_map); diff --git a/gcc/analyzer/call-summary.cc b/gcc/analyzer/call-summary.cc index a094cbab87f0..14ff560b23a1 100644 --- a/gcc/analyzer/call-summary.cc +++ b/gcc/analyzer/call-summary.cc @@ -422,10 +422,10 @@ call_summary_replay::convert_svalue_from_summary_1 (const svalue *summary_sval) = as_a (summary_sval); region_model_manager *mgr = get_manager (); store_manager *store_mgr = mgr->get_store_manager (); - binding_map caller_map; + binding_map caller_map (*store_mgr); auto_vec summary_keys; for (auto kv : *compound_summary_sval) - summary_keys.safe_push (kv.first); + summary_keys.safe_push (kv.m_key); summary_keys.qsort (binding_key::cmp_ptrs); for (auto key : summary_keys) { @@ -447,8 +447,8 @@ call_summary_replay::convert_svalue_from_summary_1 (const svalue *summary_sval) for (auto inner_kv : *inner_compound_sval) { // These should already be mapped to the caller. - const binding_key *inner_key = inner_kv.first; - const svalue *inner_sval = inner_kv.second; + const binding_key *inner_key = inner_kv.m_key; + const svalue *inner_sval = inner_kv.m_sval; gcc_assert (inner_key->concrete_p ()); const concrete_binding *concrete_key = as_a (inner_key); diff --git a/gcc/analyzer/diagnostic-manager.cc b/gcc/analyzer/diagnostic-manager.cc index 88f72d17b03b..d3ed085b7129 100644 --- a/gcc/analyzer/diagnostic-manager.cc +++ b/gcc/analyzer/diagnostic-manager.cc @@ -21,8 +21,6 @@ along with GCC; see the file COPYING3. If not see #include "analyzer/common.h" #include "cfg.h" -#include "basic-block.h" -#include "gimple.h" #include "gimple-pretty-print.h" #include "gimple-iterator.h" #include "inlining-iterator.h" diff --git a/gcc/analyzer/engine.cc b/gcc/analyzer/engine.cc index 745ef7e52c83..9d22950d79b1 100644 --- a/gcc/analyzer/engine.cc +++ b/gcc/analyzer/engine.cc @@ -23,9 +23,7 @@ along with GCC; see the file COPYING3. If not see #include #include "cfg.h" -#include "basic-block.h" #include "gcc-rich-location.h" -#include "gimple.h" #include "gimple-iterator.h" #include "gimple-pretty-print.h" #include "cgraph.h" diff --git a/gcc/analyzer/infinite-recursion.cc b/gcc/analyzer/infinite-recursion.cc index 960b4872ee60..cde3016b4449 100644 --- a/gcc/analyzer/infinite-recursion.cc +++ b/gcc/analyzer/infinite-recursion.cc @@ -401,7 +401,7 @@ contains_unknown_p (const svalue *sval) if (const compound_svalue *compound_sval = sval->dyn_cast_compound_svalue ()) for (auto iter : *compound_sval) - if (iter.second->get_kind () == SK_UNKNOWN) + if (iter.m_sval->get_kind () == SK_UNKNOWN) return true; return false; } diff --git a/gcc/analyzer/kf.cc b/gcc/analyzer/kf.cc index 5c54b5564486..b3c02e843090 100644 --- a/gcc/analyzer/kf.cc +++ b/gcc/analyzer/kf.cc @@ -857,7 +857,8 @@ class kf_putenv : public known_function const svalue *ptr_sval = cd.get_arg_svalue (0); const region *reg = model->deref_rvalue (ptr_sval, cd.get_arg_tree (0), ctxt); - model->get_store ()->mark_as_escaped (reg); + store_manager *store_mgr = model->get_manager ()->get_store_manager (); + model->get_store ()->mark_as_escaped (*store_mgr, reg); enum memory_space mem_space = reg->get_memory_space (); switch (mem_space) { diff --git a/gcc/analyzer/program-state.cc b/gcc/analyzer/program-state.cc index e16a50f78c78..ac91ea4e194d 100644 --- a/gcc/analyzer/program-state.cc +++ b/gcc/analyzer/program-state.cc @@ -564,7 +564,7 @@ sm_state_map::impl_set_state (const svalue *sval, = sval->dyn_cast_compound_svalue ()) for (auto iter : *compound_sval) { - const svalue *inner_sval = iter.second; + const svalue *inner_sval = iter.m_sval; if (inner_sval->can_have_associated_state_p ()) impl_set_state (inner_sval, state, origin, ext_state); } @@ -1531,7 +1531,7 @@ program_state::can_purge_base_region_p (const extrinsic_state &ext_state, for (auto iter : *cluster) { - const svalue *sval = iter.second; + const svalue *sval = iter.m_sval; if (!can_purge_p (ext_state, sval)) return false; } diff --git a/gcc/analyzer/region-model-asm.cc b/gcc/analyzer/region-model-asm.cc index fe704901a978..347a938445ff 100644 --- a/gcc/analyzer/region-model-asm.cc +++ b/gcc/analyzer/region-model-asm.cc @@ -260,7 +260,9 @@ region_model::on_asm_stmt (const gasm *stmt, region_model_context *ctxt) || !base_reg->tracked_p ()) continue; - binding_cluster *cluster = m_store.get_or_create_cluster (base_reg); + binding_cluster *cluster + = m_store.get_or_create_cluster (*m_mgr->get_store_manager (), + base_reg); cluster->on_asm (stmt, m_mgr->get_store_manager (), conjured_purge (this, ctxt)); } diff --git a/gcc/analyzer/region-model-reachability.cc b/gcc/analyzer/region-model-reachability.cc index 0fe324d001fb..ea3f967ed4f8 100644 --- a/gcc/analyzer/region-model-reachability.cc +++ b/gcc/analyzer/region-model-reachability.cc @@ -169,10 +169,10 @@ reachable_regions::handle_sval (const svalue *sval) if (const compound_svalue *compound_sval = sval->dyn_cast_compound_svalue ()) { - for (compound_svalue::iterator_t iter = compound_sval->begin (); + for (auto iter = compound_sval->begin (); iter != compound_sval->end (); ++iter) { - const svalue *iter_sval = (*iter).second; + const svalue *iter_sval = (*iter).m_sval; handle_sval (iter_sval); } } @@ -235,10 +235,10 @@ reachable_regions::handle_parm (const svalue *sval, tree param_type) if (const compound_svalue *compound_sval = sval->dyn_cast_compound_svalue ()) { - for (compound_svalue::iterator_t iter = compound_sval->begin (); + for (auto iter = compound_sval->begin (); iter != compound_sval->end (); ++iter) { - const svalue *iter_sval = (*iter).second; + const svalue *iter_sval = (*iter).m_sval; handle_sval (iter_sval); } } @@ -259,7 +259,8 @@ reachable_regions::mark_escaped_clusters (region_model_context *ctxt) iter != m_mutable_base_regs.end (); ++iter) { const region *base_reg = *iter; - m_store->mark_as_escaped (base_reg); + store_manager *store_mgr = m_model->get_manager ()->get_store_manager (); + m_store->mark_as_escaped (*store_mgr, base_reg); /* If we have a function that's escaped, potentially add it to the worklist. */ diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc index 618d96b6b7c1..ceb5064007cb 100644 --- a/gcc/analyzer/region-model.cc +++ b/gcc/analyzer/region-model.cc @@ -4495,8 +4495,8 @@ class iterable_cluster return; for (auto iter : *cluster) { - const binding_key *key = iter.first; - const svalue *sval = iter.second; + const binding_key *key = iter.m_key; + const svalue *sval = iter.m_sval; if (const concrete_binding *concrete_key = key->dyn_cast_concrete_binding ()) @@ -4696,7 +4696,7 @@ region_model::scan_for_null_terminator_1 (const region *reg, logger->end_log_line (); } - binding_map result; + binding_map result (*store_mgr); while (1) { @@ -5118,7 +5118,8 @@ region_model::mark_region_as_unknown (const region *reg, svalue_set maybe_live_values; m_store.mark_region_as_unknown (m_mgr->get_store_manager(), reg, uncertainty, &maybe_live_values); - m_store.on_maybe_live_values (maybe_live_values); + m_store.on_maybe_live_values (*m_mgr->get_store_manager (), + maybe_live_values); } /* Determine what is known about the condition "LHS_SVAL OP RHS_SVAL" within @@ -6733,7 +6734,8 @@ region_model::on_top_level_param (tree param, const svalue *init_ptr_sval = m_mgr->get_or_create_initial_value (param_reg); const region *pointee_reg = m_mgr->get_symbolic_region (init_ptr_sval); - m_store.mark_as_escaped (pointee_reg); + store_manager *store_mgr = m_mgr->get_store_manager (); + m_store.mark_as_escaped (*store_mgr, pointee_reg); if (nonnull) { const svalue *null_ptr_sval @@ -7085,52 +7087,39 @@ region_model::unbind_region_and_descendents (const region *reg, } } -/* Implementation of BindingVisitor. - Update the bound svalues for regions below REG to use poisoned - values instead. */ - -struct bad_pointer_finder -{ - bad_pointer_finder (const region *reg, enum poison_kind pkind, - region_model_manager *mgr) - : m_reg (reg), m_pkind (pkind), m_mgr (mgr), m_count (0) - {} - - void on_binding (const binding_key *, const svalue *&sval) - { - if (const region_svalue *ptr_sval = sval->dyn_cast_region_svalue ()) - { - const region *ptr_dst = ptr_sval->get_pointee (); - /* Poison ptrs to descendents of REG, but not to REG itself, - otherwise double-free detection doesn't work (since sm-state - for "free" is stored on the original ptr svalue). */ - if (ptr_dst->descendent_of_p (m_reg) - && ptr_dst != m_reg) - { - sval = m_mgr->get_or_create_poisoned_svalue (m_pkind, - sval->get_type ()); - ++m_count; - } - } - } - - const region *m_reg; - enum poison_kind m_pkind; - region_model_manager *const m_mgr; - int m_count; -}; - /* Find any pointers to REG or its descendents; convert them to - poisoned values of kind PKIND. - Return the number of pointers that were poisoned. */ + poisoned values of kind PKIND. */ -int +void region_model::poison_any_pointers_to_descendents (const region *reg, - enum poison_kind pkind) + enum poison_kind pkind) { - bad_pointer_finder bv (reg, pkind, m_mgr); - m_store.for_each_binding (bv); - return bv.m_count; + for (const auto &cluster_iter : m_store) + { + binding_cluster *cluster = cluster_iter.second; + for (auto iter = cluster->begin (); + iter != cluster->end (); + ++iter) + { + auto bp = *iter; + const svalue *sval = bp.m_sval; + if (const region_svalue *ptr_sval = sval->dyn_cast_region_svalue ()) + { + const region *ptr_dst = ptr_sval->get_pointee (); + /* Poison ptrs to descendents of REG, but not to REG itself, + otherwise double-free detection doesn't work (since sm-state + for "free" is stored on the original ptr svalue). */ + if (ptr_dst->descendent_of_p (reg) + && ptr_dst != reg) + { + const svalue *new_sval + = m_mgr->get_or_create_poisoned_svalue (pkind, + sval->get_type ()); + cluster->get_map ().overwrite (iter, new_sval); + } + } + } + } } /* Attempt to merge THIS with OTHER_MODEL, writing the result @@ -7647,12 +7636,12 @@ class exposure_through_uninit_copy /* Find keys for uninit svals. */ for (auto iter : *compound_sval) { - const svalue *sval = iter.second; + const svalue *sval = iter.m_sval; if (const poisoned_svalue *psval = sval->dyn_cast_poisoned_svalue ()) if (psval->get_poison_kind () == poison_kind::uninit) { - const binding_key *key = iter.first; + const binding_key *key = iter.m_key; const concrete_binding *ckey = key->dyn_cast_concrete_binding (); gcc_assert (ckey); @@ -7699,12 +7688,12 @@ class exposure_through_uninit_copy auto_vec uninit_keys; for (auto iter : *compound_sval) { - const svalue *sval = iter.second; + const svalue *sval = iter.m_sval; if (const poisoned_svalue *psval = sval->dyn_cast_poisoned_svalue ()) if (psval->get_poison_kind () == poison_kind::uninit) { - const binding_key *key = iter.first; + const binding_key *key = iter.m_key; const concrete_binding *ckey = key->dyn_cast_concrete_binding (); gcc_assert (ckey); @@ -7914,7 +7903,7 @@ contains_uninit_p (const svalue *sval) for (auto iter : *compound_sval) { - const svalue *sval = iter.second; + const svalue *sval = iter.m_sval; if (const poisoned_svalue *psval = sval->dyn_cast_poisoned_svalue ()) if (psval->get_poison_kind () == poison_kind::uninit) @@ -8352,8 +8341,9 @@ test_struct () region_model_manager mgr; region_model model (&mgr); - model.set_value (c_x, int_17, nullptr); + /* Set fields in order y, then x. */ model.set_value (c_y, int_m3, nullptr); + model.set_value (c_x, int_17, nullptr); /* Verify get_offset for "c.x". */ { @@ -8370,6 +8360,27 @@ test_struct () ASSERT_EQ (offset.get_base_region (), model.get_lvalue (c, nullptr)); ASSERT_EQ (offset.get_bit_offset (), INT_TYPE_SIZE); } + + /* Check iteration order of binding_cluster (and thus of binding_map). */ + { + std::vector vec; + auto cluster + = model.get_store ()->get_cluster (model.get_lvalue (c, nullptr)); + for (auto iter : *cluster) + vec.push_back (iter); + ASSERT_EQ (vec.size (), 2); + /* we should get them back in ascending order in memory (x then y). */ + /* x */ + ASSERT_EQ (vec[0].m_key->dyn_cast_concrete_binding ()->get_bit_range (), + bit_range (0, INT_TYPE_SIZE)); + ASSERT_TRUE (tree_int_cst_equal(vec[0].m_sval->maybe_get_constant (), + int_17)); + /* y */ + ASSERT_EQ (vec[1].m_key->dyn_cast_concrete_binding ()->get_bit_range (), + bit_range (INT_TYPE_SIZE, INT_TYPE_SIZE)); + ASSERT_TRUE (tree_int_cst_equal(vec[1].m_sval->maybe_get_constant (), + int_m3)); + } } /* Verify usage of an array element. */ diff --git a/gcc/analyzer/region-model.h b/gcc/analyzer/region-model.h index 6271ea27cd8f..7f33a4572e72 100644 --- a/gcc/analyzer/region-model.h +++ b/gcc/analyzer/region-model.h @@ -715,8 +715,8 @@ class region_model region_model_context *ctxt, std::unique_ptr *out); - int poison_any_pointers_to_descendents (const region *reg, - enum poison_kind pkind); + void poison_any_pointers_to_descendents (const region *reg, + enum poison_kind pkind); void on_top_level_param (tree param, bool nonnull, diff --git a/gcc/analyzer/region.cc b/gcc/analyzer/region.cc index e27fc6e720b0..8f294b533983 100644 --- a/gcc/analyzer/region.cc +++ b/gcc/analyzer/region.cc @@ -591,7 +591,7 @@ region::calc_initial_value_at_main (region_model_manager *mgr) const else { /* Get the value for REG within base_reg_init. */ - binding_cluster c (base_reg); + binding_cluster c (*mgr->get_store_manager (), base_reg); c.bind (mgr->get_store_manager (), base_reg, base_reg_init); const svalue *sval = c.get_any_binding (mgr->get_store_manager (), this); @@ -1713,7 +1713,7 @@ decl_region::calc_svalue_for_constructor (tree ctor, /* Create a binding map, applying ctor to it, using this decl_region as the base region when building child regions for offset calculations. */ - binding_map map; + binding_map map (*mgr->get_store_manager ()); if (!map.apply_ctor_to_region (this, ctor, mgr)) return mgr->get_or_create_unknown_svalue (get_type ()); @@ -1772,7 +1772,7 @@ decl_region::get_svalue_for_initializer (region_model_manager *mgr) const if (!tracked_p ()) return nullptr; - binding_cluster c (this); + binding_cluster c (*mgr->get_store_manager (), this); c.zero_fill_region (mgr->get_store_manager (), this); return mgr->get_or_create_compound_svalue (TREE_TYPE (m_decl), c.get_map ()); diff --git a/gcc/analyzer/store.cc b/gcc/analyzer/store.cc index 942c9455e588..b354f9b6387b 100644 --- a/gcc/analyzer/store.cc +++ b/gcc/analyzer/store.cc @@ -618,29 +618,120 @@ simplify_for_binding (const svalue *sval) return sval; } +/* class binding_map::const_iterator. */ + +bool +binding_map::const_iterator::operator== (const binding_map::const_iterator &other) const +{ + if (m_concrete != other.m_concrete) + return false; + if (m_symbolic != other.m_symbolic) + return false; + return true; +} + +binding_map::const_iterator & +binding_map::const_iterator::operator++ () +{ + if (m_concrete != m_map.m_concrete.end ()) + ++m_concrete; + else + ++m_symbolic; + return *this; +} + +binding_map::binding_pair +binding_map::const_iterator::operator* () +{ + if (m_concrete != m_map.m_concrete.end ()) + { + const bit_range &bits = m_concrete->first; + const svalue *sval = m_concrete->second; + return binding_pair (m_map.m_store_mgr.get_concrete_binding (bits), sval); + } + else + { + gcc_assert (m_symbolic != m_map.m_symbolic.end ()); + const region *reg = m_symbolic->m_region; + const svalue *sval = m_symbolic->m_sval; + return binding_pair (m_map.m_store_mgr.get_symbolic_binding (reg), sval); + } +} + +/* class binding_map::iterator. */ + +bool +binding_map::iterator::operator== (const binding_map::iterator &other) const +{ + if (m_concrete != other.m_concrete) + return false; + if (m_symbolic != other.m_symbolic) + return false; + return true; +} + +binding_map::iterator & +binding_map::iterator::operator++ () +{ + if (m_concrete != m_map.m_concrete.end ()) + ++m_concrete; + else + ++m_symbolic; + return *this; +} + +binding_map::binding_pair +binding_map::iterator::operator* () +{ + if (m_concrete != m_map.m_concrete.end ()) + { + const bit_range &bits = m_concrete->first; + const svalue *&sval = m_concrete->second; + return binding_pair (m_map.m_store_mgr.get_concrete_binding (bits), sval); + } + else + { + gcc_assert (m_symbolic != m_map.m_symbolic.end ()); + const region *reg = m_symbolic->m_region; + const svalue *&sval = m_symbolic->m_sval; + return binding_pair (m_map.m_store_mgr.get_symbolic_binding (reg), sval); + } +} + /* class binding_map. */ +// Construct an empty binding_map. + +binding_map::binding_map (store_manager &store_mgr) +: m_store_mgr (store_mgr), + m_concrete (), + m_symbolic () +{ +} + /* binding_map's copy ctor. */ binding_map::binding_map (const binding_map &other) -: m_map (other.m_map) +: m_store_mgr (other.m_store_mgr), + m_concrete (other.m_concrete), + m_symbolic (other.m_symbolic) { } /* binding_map's assignment operator. */ binding_map& -binding_map::operator=(const binding_map &other) +binding_map::operator= (const binding_map &other) { + gcc_assert (&m_store_mgr == &other.m_store_mgr); + /* For now, assume we only ever copy to an empty cluster. */ - gcc_assert (m_map.elements () == 0); - for (map_t::iterator iter = other.m_map.begin (); iter != other.m_map.end (); - ++iter) - { - const binding_key *key = (*iter).first; - const svalue *sval = (*iter).second; - m_map.put (key, sval); - } + gcc_assert (m_concrete.size () == 0); + gcc_assert (m_symbolic.size () == 0); + + m_concrete = other.m_concrete; + m_symbolic = other.m_symbolic; + return *this; } @@ -649,21 +740,11 @@ binding_map::operator=(const binding_map &other) bool binding_map::operator== (const binding_map &other) const { - if (m_map.elements () != other.m_map.elements ()) + if (m_concrete != other.m_concrete) + return false; + if (m_symbolic != other.m_symbolic) return false; - for (map_t::iterator iter = m_map.begin (); iter != m_map.end (); ++iter) - { - const binding_key *key = (*iter).first; - const svalue *sval = (*iter).second; - const svalue **other_slot - = const_cast (other.m_map).get (key); - if (other_slot == nullptr) - return false; - if (sval != *other_slot) - return false; - } - gcc_checking_assert (hash () == other.hash ()); return true; } @@ -673,18 +754,140 @@ hashval_t binding_map::hash () const { hashval_t result = 0; - for (map_t::iterator iter = m_map.begin (); iter != m_map.end (); ++iter) + for (auto iter : *this) { /* Use a new hasher for each key to avoid depending on the ordering of keys when accumulating the result. */ inchash::hash hstate; - hstate.add_ptr ((*iter).first); - hstate.add_ptr ((*iter).second); + hstate.add_ptr (iter.m_key); + hstate.add_ptr (iter.m_sval); result ^= hstate.end (); } return result; } +const svalue * +binding_map::get (const binding_key *key) const +{ + if (key->symbolic_p ()) + { + const ana::symbolic_binding &sym_key + = *static_cast (key); + const region *reg = sym_key.get_region (); + + for (auto iter : m_symbolic) + { + if (iter.m_region == reg) + return iter.m_sval; + } + return nullptr; + } + else + { + const concrete_binding &conc_key + = *static_cast (key); + const bit_range &bits = conc_key.get_bit_range (); + + concrete_bindings_t::const_iterator iter (m_concrete.find (bits)); + if (iter != m_concrete.end ()) + return iter->second; + else + return nullptr; + } +} + +void +binding_map::put (const binding_key *key, const svalue *sval) +{ + if (key->symbolic_p ()) + { + const ana::symbolic_binding &sym_key + = *static_cast (key); + const region *reg = sym_key.get_region (); + + m_symbolic.clear (); + + m_symbolic.push_back ({reg, sval}); + } + else + { + const concrete_binding &conc_key + = *static_cast (key); + const bit_range &bits = conc_key.get_bit_range (); + + concrete_bindings_t::iterator iter (m_concrete.find (bits)); + if (iter != m_concrete.end ()) + (*iter).second = sval; + else + m_concrete.insert ({bits, sval}); + } +} + +void +binding_map::overwrite (iterator_t &pos, const svalue *v) +{ + gcc_assert (&pos.m_map == this); + if (pos.m_symbolic != m_symbolic.end ()) + (*(pos.m_symbolic)).m_sval = v; + else + { + gcc_assert (pos.m_concrete != m_concrete.end ()); + (*(pos.m_concrete)).second = v; + } +} + +void +binding_map::remove (const binding_key *key) +{ + if (key->symbolic_p ()) + m_symbolic.clear (); + else + { + const concrete_binding &conc_key + = *static_cast (key); + const bit_range &bits = conc_key.get_bit_range (); + m_concrete.erase (bits); + } +} + +binding_map::const_iterator_t +binding_map::begin () const +{ + return binding_map::const_iterator_t (*this, + m_concrete.begin (), + m_symbolic.begin ()); +} + +binding_map::const_iterator_t +binding_map::end () const +{ + return binding_map::const_iterator_t (*this, + m_concrete.end (), + m_symbolic.end ()); +} + +binding_map::iterator_t +binding_map::begin () +{ + return binding_map::iterator_t (*this, + m_concrete.begin (), + m_symbolic.begin ()); +} + +binding_map::iterator_t +binding_map::end () +{ + return binding_map::iterator_t (*this, + m_concrete.end (), + m_symbolic.end ()); +} + +size_t +binding_map::elements () const +{ + return m_concrete.size () + m_symbolic.size (); +} + /* Dump a representation of this binding_map to PP. SIMPLE controls how values and regions are to be printed. If MULTILINE, then split the dump over multiple lines and @@ -694,20 +897,11 @@ void binding_map::dump_to_pp (pretty_printer *pp, bool simple, bool multiline) const { - auto_vec binding_keys; - for (map_t::iterator iter = m_map.begin (); - iter != m_map.end (); ++iter) - { - const binding_key *key = (*iter).first; - binding_keys.safe_push (key); - } - binding_keys.qsort (binding_key::cmp_ptrs); - - const binding_key *key; - unsigned i; - FOR_EACH_VEC_ELT (binding_keys, i, key) + bool first = true; + for (auto iter : *this) { - const svalue *value = *const_cast (m_map).get (key); + const binding_key *key = iter.m_key; + const svalue *value = iter.m_sval; if (multiline) { pp_string (pp, " key: {"); @@ -724,7 +918,9 @@ binding_map::dump_to_pp (pretty_printer *pp, bool simple, } else { - if (i > 0) + if (first) + first = false; + else pp_string (pp, ", "); pp_string (pp, "binding key: {"); key->dump_to_pp (pp, simple); @@ -754,21 +950,10 @@ binding_map::to_json () const { auto map_obj = std::make_unique (); - auto_vec binding_keys; - for (map_t::iterator iter = m_map.begin (); - iter != m_map.end (); ++iter) - { - const binding_key *key = (*iter).first; - binding_keys.safe_push (key); - } - binding_keys.qsort (binding_key::cmp_ptrs); - - const binding_key *key; - unsigned i; - FOR_EACH_VEC_ELT (binding_keys, i, key) + for (auto iter : *this) { - const svalue *value = *const_cast (m_map).get (key); - label_text key_desc = key->get_desc (); + const svalue *value = iter.m_sval; + label_text key_desc = iter.m_key->get_desc (); map_obj->set (key_desc.get (), value->to_json ()); } @@ -805,20 +990,10 @@ void binding_map::add_to_tree_widget (text_art::tree_widget &parent_widget, const text_art::dump_widget_info &dwi) const { - auto_vec binding_keys; - for (map_t::iterator iter = m_map.begin (); - iter != m_map.end (); ++iter) - { - const binding_key *key = (*iter).first; - binding_keys.safe_push (key); - } - binding_keys.qsort (binding_key::cmp_ptrs); - - const binding_key *key; - unsigned i; - FOR_EACH_VEC_ELT (binding_keys, i, key) + for (auto iter : *this) { - const svalue *sval = *const_cast (m_map).get (key); + const binding_key *key = iter.m_key; + const svalue *sval = iter.m_sval; add_binding_to_tree_widget (parent_widget, dwi, key, sval); } @@ -834,15 +1009,13 @@ binding_map::cmp (const binding_map &map1, const binding_map &map2) return count_cmp; auto_vec keys1 (map1.elements ()); - for (map_t::iterator iter = map1.begin (); - iter != map1.end (); ++iter) - keys1.quick_push ((*iter).first); + for (auto iter : map1) + keys1.quick_push (iter.m_key); keys1.qsort (binding_key::cmp_ptrs); auto_vec keys2 (map2.elements ()); - for (map_t::iterator iter = map2.begin (); - iter != map2.end (); ++iter) - keys2.quick_push ((*iter).first); + for (auto iter : map2) + keys2.quick_push (iter.m_key); keys2.qsort (binding_key::cmp_ptrs); for (size_t i = 0; i < keys1.length (); i++) @@ -1096,7 +1269,7 @@ binding_map::get_overlapping_bindings (const binding_key *key, { for (auto iter : *this) { - const binding_key *iter_key = iter.first; + const binding_key *iter_key = iter.m_key; if (const concrete_binding *ckey = key->dyn_cast_concrete_binding ()) { @@ -1200,7 +1373,7 @@ binding_map::remove_overlapping_bindings (store_manager *mgr, auto_vec bindings; if (always_overlap) for (auto iter : *this) - bindings.safe_push (iter.first); /* Add all bindings. */ + bindings.safe_push (iter.m_key); /* Add all bindings. */ else /* Just add overlapping bindings. */ get_overlapping_bindings (drop_key, &bindings); @@ -1234,7 +1407,7 @@ binding_map::remove_overlapping_bindings (store_manager *mgr, maybe_live_values->add (old_sval); /* Begin by removing the old binding. */ - m_map.remove (iter_binding); + remove (iter_binding); /* Don't attempt to handle prefixes/suffixes for the "always_overlap" case; everything's being removed. */ @@ -1266,7 +1439,7 @@ binding_map::remove_overlapping_bindings (store_manager *mgr, = old_sval->extract_bit_range (NULL_TREE, rel_prefix, mgr->get_svalue_manager ()); - m_map.put (prefix_key, prefix_sval); + put (prefix_key, prefix_sval); } if (iter_bits.get_next_bit_offset () @@ -1285,7 +1458,7 @@ binding_map::remove_overlapping_bindings (store_manager *mgr, = old_sval->extract_bit_range (NULL_TREE, rel_suffix, mgr->get_svalue_manager ()); - m_map.put (suffix_key, suffix_sval); + put (suffix_key, suffix_sval); } } } @@ -1293,8 +1466,9 @@ binding_map::remove_overlapping_bindings (store_manager *mgr, /* class binding_cluster. */ -binding_cluster::binding_cluster (const region *base_region) -: m_base_region (base_region), m_map (), +binding_cluster::binding_cluster (store_manager &store_mgr, + const region *base_region) +: m_base_region (base_region), m_map (store_mgr), m_escaped (false), m_touched (false) { } @@ -1414,7 +1588,7 @@ binding_cluster::validate () const int num_concrete = 0; for (auto iter : m_map) { - if (iter.first->symbolic_p ()) + if (iter.m_key->symbolic_p ()) num_symbolic++; else num_concrete++; @@ -1537,11 +1711,10 @@ binding_cluster::bind_compound_sval (store_manager *mgr, return; } - for (map_t::iterator iter = compound_sval->begin (); - iter != compound_sval->end (); ++iter) + for (auto iter : *compound_sval) { - const binding_key *iter_key = (*iter).first; - const svalue *iter_sval = (*iter).second; + const binding_key *iter_key = iter.m_key; + const svalue *iter_sval = iter.m_sval; if (const concrete_binding *concrete_key = iter_key->dyn_cast_concrete_binding ()) @@ -1650,7 +1823,7 @@ binding_cluster::purge_state_involving (const svalue *sval, auto_vec > to_make_unknown; for (auto iter : m_map) { - const binding_key *iter_key = iter.first; + const binding_key *iter_key = iter.m_key; if (const symbolic_binding *symbolic_key = iter_key->dyn_cast_symbolic_binding ()) { @@ -1658,7 +1831,7 @@ binding_cluster::purge_state_involving (const svalue *sval, if (reg->involves_p (sval)) to_remove.safe_push (iter_key); } - const svalue *iter_sval = iter.second; + const svalue *iter_sval = iter.m_sval; if (iter_sval->involves_p (sval)) to_make_unknown.safe_push (std::make_pair(iter_key, iter_sval->get_type ())); @@ -1847,8 +2020,8 @@ binding_cluster::maybe_get_compound_binding (store_manager *mgr, perhaps we should have a spatial-organized data structure for concrete keys, though. */ - binding_map result_map; - binding_map default_map; + binding_map result_map (*mgr); + binding_map default_map (*mgr); /* Set up default values in default_map. */ const svalue *default_sval; @@ -1866,12 +2039,13 @@ binding_cluster::maybe_get_compound_binding (store_manager *mgr, return nullptr; const concrete_binding *default_key_relative_to_reg = mgr->get_concrete_binding (0, concrete_default_key->get_size_in_bits ()); + default_map.put (default_key_relative_to_reg, default_sval); - for (map_t::iterator iter = m_map.begin (); iter != m_map.end (); ++iter) + for (auto iter : m_map) { - const binding_key *key = (*iter).first; - const svalue *sval = (*iter).second; + const binding_key *key = iter.m_key; + const svalue *sval = iter.m_sval; if (const concrete_binding *concrete_key = key->dyn_cast_concrete_binding ()) @@ -1957,8 +2131,8 @@ binding_cluster::maybe_get_compound_binding (store_manager *mgr, /* Merge any bindings from default_map into result_map. */ for (auto iter : default_map) { - const binding_key *key = iter.first; - const svalue *sval = iter.second; + const binding_key *key = iter.m_key; + const svalue *sval = iter.m_sval; result_map.put (key, sval); } @@ -2051,16 +2225,14 @@ binding_cluster::can_merge_p (const binding_cluster *cluster_a, gcc_assert (cluster_b->m_base_region == out_cluster->m_base_region); hash_set keys; - for (map_t::iterator iter_a = cluster_a->m_map.begin (); - iter_a != cluster_a->m_map.end (); ++iter_a) + for (auto iter_a : cluster_a->m_map) { - const binding_key *key_a = (*iter_a).first; + const binding_key *key_a = iter_a.m_key; keys.add (key_a); } - for (map_t::iterator iter_b = cluster_b->m_map.begin (); - iter_b != cluster_b->m_map.end (); ++iter_b) + for (auto iter_b : cluster_b->m_map) { - const binding_key *key_b = (*iter_b).first; + const binding_key *key_b = iter_b.m_key; keys.add (key_b); } int num_symbolic_keys = 0; @@ -2122,7 +2294,7 @@ binding_cluster::can_merge_p (const binding_cluster *cluster_a, || (num_concrete_keys > 0 && num_symbolic_keys > 0)) { out_cluster->m_touched = true; - out_cluster->m_map.empty (); + out_cluster->m_map.clear (); } /* We don't handle other kinds of overlaps yet. */ @@ -2141,11 +2313,10 @@ binding_cluster::make_unknown_relative_to (const binding_cluster *other, store *out_store, store_manager *mgr) { - for (map_t::iterator iter = other->m_map.begin (); - iter != other->m_map.end (); ++iter) + for (auto iter : *other) { - const binding_key *iter_key = (*iter).first; - const svalue *iter_sval = (*iter).second; + const binding_key *iter_key = iter.m_key; + const svalue *iter_sval = iter.m_sval; const svalue *unknown_sval = mgr->get_svalue_manager ()->get_or_create_unknown_svalue (iter_sval->get_type ()); @@ -2165,7 +2336,8 @@ binding_cluster::make_unknown_relative_to (const binding_cluster *other, if (base_reg->tracked_p () && !base_reg->symbolic_for_unknown_ptr_p ()) { - binding_cluster *c = out_store->get_or_create_cluster (base_reg); + binding_cluster *c + = out_store->get_or_create_cluster (*mgr, base_reg); c->mark_as_escaped (); } } @@ -2193,7 +2365,7 @@ binding_cluster::on_unknown_fncall (const gcall &call, { if (m_escaped) { - m_map.empty (); + m_map.clear (); if (!m_base_region->empty_p ()) { @@ -2216,7 +2388,7 @@ binding_cluster::on_asm (const gasm *stmt, store_manager *mgr, const conjured_purge &p) { - m_map.empty (); + m_map.clear (); /* Bind it to a new "conjured" value using CALL. */ const svalue *sval @@ -2279,10 +2451,10 @@ binding_cluster::get_representative_path_vars (const region_model *model, { sval = simplify_for_binding (sval); - for (map_t::iterator iter = m_map.begin (); iter != m_map.end (); ++iter) + for (auto iter : m_map) { - const binding_key *key = (*iter).first; - const svalue *bound_sval = (*iter).second; + const binding_key *key = iter.m_key; + const svalue *bound_sval = iter.m_sval; if (bound_sval == sval) { if (const concrete_binding *ckey @@ -2804,14 +2976,14 @@ store::set_value (store_manager *mgr, const region *lhs_reg, { const region *ptr_dst = ptr_sval->get_pointee (); const region *ptr_base_reg = ptr_dst->get_base_region (); - mark_as_escaped (ptr_base_reg); + mark_as_escaped (*mgr, ptr_base_reg); } if (uncertainty) uncertainty->on_maybe_bound_sval (rhs_sval); } else if (lhs_base_reg->tracked_p ()) { - lhs_cluster = get_or_create_cluster (lhs_base_reg); + lhs_cluster = get_or_create_cluster (*mgr, lhs_base_reg); lhs_cluster->bind (mgr, lhs_reg, rhs_sval); } else @@ -2887,7 +3059,7 @@ store::set_value (store_manager *mgr, const region *lhs_reg, (e.g. marking regions as escaped). We do this after the iteration to avoid potentially changing m_cluster_map whilst iterating over it. */ - on_maybe_live_values (maybe_live_values); + on_maybe_live_values (*mgr, maybe_live_values); } /* Determine if BASE_REG_A could be an alias of BASE_REG_B. */ @@ -2983,14 +3155,15 @@ store::eval_alias_1 (const region *base_reg_a, /* Record all of the values in MAYBE_LIVE_VALUES as being possibly live. */ void -store::on_maybe_live_values (const svalue_set &maybe_live_values) +store::on_maybe_live_values (store_manager &mgr, + const svalue_set &maybe_live_values) { for (auto sval : maybe_live_values) { if (const region_svalue *ptr_sval = sval->dyn_cast_region_svalue ()) { const region *base_reg = ptr_sval->get_pointee ()->get_base_region (); - mark_as_escaped (base_reg); + mark_as_escaped (mgr, base_reg); } } } @@ -3044,7 +3217,7 @@ store::fill_region (store_manager *mgr, const region *reg, const svalue *sval) if (base_reg->symbolic_for_unknown_ptr_p () || !base_reg->tracked_p ()) return; - binding_cluster *cluster = get_or_create_cluster (base_reg); + binding_cluster *cluster = get_or_create_cluster (*mgr, base_reg); cluster->fill_region (mgr, reg, sval); } @@ -3069,7 +3242,7 @@ store::mark_region_as_unknown (store_manager *mgr, const region *reg, if (base_reg->symbolic_for_unknown_ptr_p () || !base_reg->tracked_p ()) return; - binding_cluster *cluster = get_or_create_cluster (base_reg); + binding_cluster *cluster = get_or_create_cluster (*mgr, base_reg); cluster->mark_region_as_unknown (mgr, reg, reg, uncertainty, maybe_live_values); } @@ -3127,7 +3300,8 @@ store::get_cluster (const region *base_reg) /* Get the cluster for BASE_REG, creating it if doesn't already exist. */ binding_cluster * -store::get_or_create_cluster (const region *base_reg) +store::get_or_create_cluster (store_manager &store_mgr, + const region *base_reg) { gcc_assert (base_reg); gcc_assert (base_reg->get_base_region () == base_reg); @@ -3141,7 +3315,7 @@ store::get_or_create_cluster (const region *base_reg) if (binding_cluster **slot = m_cluster_map.get (base_reg)) return *slot; - binding_cluster *cluster = new binding_cluster (base_reg); + binding_cluster *cluster = new binding_cluster (store_mgr, base_reg); m_cluster_map.put (base_reg, cluster); return cluster; @@ -3206,7 +3380,7 @@ store::can_merge_p (const store *store_a, const store *store_b, const binding_cluster *cluster_b = store_b->get_cluster (base_reg); /* At least one of cluster_a and cluster_b must be non-NULL. */ binding_cluster *out_cluster - = out_store->get_or_create_cluster (base_reg); + = out_store->get_or_create_cluster (*mgr, base_reg); if (!binding_cluster::can_merge_p (cluster_a, cluster_b, out_cluster, out_store, mgr, merger)) return false; @@ -3221,7 +3395,7 @@ store::can_merge_p (const store *store_a, const store *store_b, isn't reachable from args of those calls. */ void -store::mark_as_escaped (const region *base_reg) +store::mark_as_escaped (store_manager &mgr, const region *base_reg) { gcc_assert (base_reg); gcc_assert (base_reg->get_base_region () == base_reg); @@ -3230,7 +3404,7 @@ store::mark_as_escaped (const region *base_reg) || !base_reg->tracked_p ()) return; - binding_cluster *cluster = get_or_create_cluster (base_reg); + binding_cluster *cluster = get_or_create_cluster (mgr, base_reg); cluster->mark_as_escaped (); } @@ -3361,7 +3535,7 @@ store::canonicalize (store_manager *mgr) binding_cluster *cluster = (*iter).second; for (binding_cluster::iterator_t bind_iter = cluster->m_map.begin (); bind_iter != cluster->m_map.end (); ++bind_iter) - (*bind_iter).second->accept (&s); + (*bind_iter).m_sval->accept (&s); } /* Locate heap-allocated regions that have empty bindings that weren't @@ -3442,12 +3616,13 @@ store::loop_replay_fixup (const store *other_store, for (binding_cluster::iterator_t bind_iter = cluster->m_map.begin (); bind_iter != cluster->m_map.end (); ++bind_iter) { - const binding_key *key = (*bind_iter).first; - const svalue *sval = (*bind_iter).second; + const binding_key *key = (*bind_iter).m_key; + const svalue *sval = (*bind_iter).m_sval; if (sval->get_kind () == SK_WIDENING) { binding_cluster *this_cluster - = get_or_create_cluster (base_reg); + = get_or_create_cluster (*mgr->get_store_manager (), + base_reg); const svalue *unknown = mgr->get_or_create_unknown_svalue (sval->get_type ()); this_cluster->bind_key (key, unknown); @@ -3505,7 +3680,7 @@ store::replay_call_summary_cluster (call_summary_replay &r, && !caller_base_reg->symbolic_for_unknown_ptr_p ()) { binding_cluster *caller_cluster - = get_or_create_cluster (caller_base_reg); + = get_or_create_cluster (*mgr, caller_base_reg); if (summary_cluster->escaped_p ()) caller_cluster->mark_as_escaped (); if (summary_cluster->touched_p ()) @@ -3830,6 +4005,22 @@ test_binding_key_overlap () ASSERT_DISJOINT (cb_8_23, cb_24_31); } +static void +test_binding_map_ops () +{ + region_model_manager region_mgr; + store_manager store_mgr (®ion_mgr); + + /* Assignment of empty. */ + { + binding_map src (store_mgr); + binding_map dst (store_mgr); + dst = src; + + ASSERT_EQ (src, dst); + } +} + /* Run all of the selftests within this file. */ void @@ -3838,6 +4029,7 @@ analyzer_store_cc_tests () test_bit_range_intersects_p (); test_bit_range_from_mask (); test_binding_key_overlap (); + test_binding_map_ops (); } } // namespace selftest diff --git a/gcc/analyzer/store.h b/gcc/analyzer/store.h index 95d38e30924f..33a973151b7d 100644 --- a/gcc/analyzer/store.h +++ b/gcc/analyzer/store.h @@ -512,15 +512,99 @@ template <> struct default_hash_traits namespace ana { /* A mapping from binding_keys to svalues, for use by binding_cluster - and compound_svalue. */ + and compound_svalue. + We store a map from concrete keys to svalues, which is ordered by + the start offset. + We also store a vector of (symbolic key, svalue) pairs, but for now + this has maximum length of 1. */ class binding_map { public: - typedef hash_map map_t; - typedef map_t::iterator iterator_t; - - binding_map () : m_map () {} + struct symbolic_binding + { + bool operator== (const symbolic_binding &other) const + { + return (m_region == other.m_region + && m_sval == other.m_sval); + } + + const region *m_region; + const svalue *m_sval; + }; + using concrete_bindings_t = std::map; + using symbolic_bindings_t = std::vector; + + struct binding_pair + { + binding_pair (const binding_key *key, + const svalue *sval) + : m_key (key), + m_sval (sval) + { + } + + const binding_key *m_key; + const svalue *m_sval; + }; + + typedef class const_iterator + { + public: + const_iterator (const binding_map &map, + concrete_bindings_t::const_iterator concrete_iter, + symbolic_bindings_t::const_iterator symbolic_iter) + : m_map (map), + m_concrete (concrete_iter), + m_symbolic (symbolic_iter) + { + } + bool operator== (const const_iterator &other) const; + bool operator!= (const const_iterator &other) const + { + return !(*this == other); + } + const_iterator &operator++ (); + + binding_pair operator* (); + + private: + const binding_map &m_map; + concrete_bindings_t::const_iterator m_concrete; + symbolic_bindings_t::const_iterator m_symbolic; + } const_iterator_t; + + typedef class iterator + { + public: + friend class binding_map; + + iterator (const binding_map &map, + concrete_bindings_t::iterator concrete_iter, + symbolic_bindings_t::iterator symbolic_iter) + : m_map (map), + m_concrete (concrete_iter), + m_symbolic (symbolic_iter) + { + } + bool operator== (const iterator &other) const; + bool operator!= (const iterator &other) const + { + return !(*this == other); + } + iterator &operator++ (); + + binding_pair operator* (); + + const binding_key *get_key () const; + + private: + const binding_map &m_map; + concrete_bindings_t::iterator m_concrete; + symbolic_bindings_t::iterator m_symbolic; + } iterator_t; + + binding_map (store_manager &store_mgr); binding_map (const binding_map &other); binding_map& operator=(const binding_map &other); @@ -532,26 +616,27 @@ class binding_map hashval_t hash () const; - const svalue *get (const binding_key *key) const + const svalue *get (const binding_key *key) const; + void put (const binding_key *k, const svalue *v); + void overwrite (iterator_t &pos, const svalue *v); + + void remove (const binding_key *k); + void clear () { - const svalue **slot = const_cast (m_map).get (key); - if (slot) - return *slot; - else - return nullptr; + m_concrete.clear (); + m_symbolic.clear (); } - bool put (const binding_key *k, const svalue *v) + + bool empty_p () const { - gcc_assert (v); - return m_map.put (k, v); + return m_concrete.empty () && m_symbolic.empty (); } - void remove (const binding_key *k) { m_map.remove (k); } - void empty () { m_map.empty (); } - - iterator_t begin () const { return m_map.begin (); } - iterator_t end () const { return m_map.end (); } - size_t elements () const { return m_map.elements (); } + const_iterator_t begin () const; + const_iterator_t end () const; + iterator_t begin (); + iterator_t end (); + size_t elements () const; void dump_to_pp (pretty_printer *pp, bool simple, bool multiline) const; void dump (bool simple) const; @@ -583,16 +668,11 @@ class binding_map region_model_manager *mgr, tree index, tree val); - map_t m_map; + store_manager &m_store_mgr; + concrete_bindings_t m_concrete; + symbolic_bindings_t m_symbolic; }; -/* Concept: BindingVisitor, for use by binding_cluster::for_each_binding - and store::for_each_binding. - - Should implement: - void on_binding (const binding_key *key, const svalue *&sval); -*/ - /* All of the bindings within a store for regions that share the same base region. */ @@ -601,10 +681,10 @@ class binding_cluster public: friend class store; - typedef hash_map map_t; - typedef map_t::iterator iterator_t; + typedef binding_map::const_iterator const_iterator_t; + typedef binding_map::iterator iterator_t; - binding_cluster (const region *base_region); + binding_cluster (store_manager &store_mgr, const region *base_region); binding_cluster (const binding_cluster &other); binding_cluster& operator=(const binding_cluster &other); @@ -661,8 +741,8 @@ class binding_cluster void for_each_value (void (*cb) (const svalue *sval, T user_data), T user_data) const { - for (map_t::iterator iter = m_map.begin (); iter != m_map.end (); ++iter) - cb ((*iter).second, user_data); + for (auto iter : m_map) + cb (iter.m_sval, user_data); } static bool can_merge_p (const binding_cluster *cluster_a, @@ -685,7 +765,7 @@ class binding_cluster bool touched_p () const { return m_touched; } bool redundant_p () const; - bool empty_p () const { return m_map.elements () == 0; } + bool empty_p () const { return m_map.empty_p (); } void get_representative_path_vars (const region_model *model, svalue_set *visited, @@ -696,21 +776,14 @@ class binding_cluster const svalue *maybe_get_simple_value (store_manager *mgr) const; - template - void for_each_binding (BindingVisitor &v) const - { - for (map_t::iterator iter = m_map.begin (); iter != m_map.end (); ++iter) - { - const binding_key *key = (*iter).first; - const svalue *&sval = (*iter).second; - v.on_binding (key, sval); - } - } + const_iterator_t begin () const { return m_map.begin (); } + const_iterator_t end () const { return m_map.end (); } - iterator_t begin () const { return m_map.begin (); } - iterator_t end () const { return m_map.end (); } + iterator_t begin () { return m_map.begin (); } + iterator_t end () { return m_map.end (); } const binding_map &get_map () const { return m_map; } + binding_map &get_map () { return m_map; } private: const svalue *get_any_value (const binding_key *key) const; @@ -793,7 +866,8 @@ class store const binding_cluster *get_cluster (const region *base_reg) const; binding_cluster *get_cluster (const region *base_reg); - binding_cluster *get_or_create_cluster (const region *base_reg); + binding_cluster *get_or_create_cluster (store_manager &store_mgr, + const region *base_reg); void purge_cluster (const region *base_reg); template @@ -809,7 +883,7 @@ class store store *out_store, store_manager *mgr, model_merger *merger); - void mark_as_escaped (const region *base_reg); + void mark_as_escaped (store_manager &mgr, const region *base_reg); void on_unknown_fncall (const gcall &call, store_manager *mgr, const conjured_purge &p); bool escaped_p (const region *reg) const; @@ -826,14 +900,6 @@ class store tristate eval_alias (const region *base_reg_a, const region *base_reg_b) const; - template - void for_each_binding (BindingVisitor &v) - { - for (cluster_map_t::iterator iter = m_cluster_map.begin (); - iter != m_cluster_map.end (); ++iter) - (*iter).second->for_each_binding (v); - } - void canonicalize (store_manager *mgr); void loop_replay_fixup (const store *other_store, region_model_manager *mgr); @@ -843,7 +909,8 @@ class store void replay_call_summary_cluster (call_summary_replay &r, const store &summary, const region *base_reg); - void on_maybe_live_values (const svalue_set &maybe_live_values); + void on_maybe_live_values (store_manager &mgr, + const svalue_set &maybe_live_values); private: void remove_overlapping_bindings (store_manager *mgr, const region *reg, diff --git a/gcc/analyzer/svalue.cc b/gcc/analyzer/svalue.cc index fbbd1d2c1768..44482bfefbe2 100644 --- a/gcc/analyzer/svalue.cc +++ b/gcc/analyzer/svalue.cc @@ -2232,15 +2232,15 @@ compound_svalue::compound_svalue (symbol::id_t id, : svalue (calc_complexity (map), id, type), m_map (map) { #if CHECKING_P - for (iterator_t iter = begin (); iter != end (); ++iter) + for (auto iter : *this) { /* All keys within the underlying binding_map are required to be concrete, not symbolic. */ - const binding_key *key = (*iter).first; + const binding_key *key = iter.m_key; gcc_assert (key->concrete_p ()); /* We don't nest compound svalues. */ - const svalue *sval = (*iter).second; + const svalue *sval = iter.m_sval; gcc_assert (sval->get_kind () != SK_COMPOUND); } #endif @@ -2302,11 +2302,10 @@ add_dump_widget_children (text_art::tree_widget &w, void compound_svalue::accept (visitor *v) const { - for (binding_map::iterator_t iter = m_map.begin (); - iter != m_map.end (); ++iter) + for (auto iter : m_map) { - //(*iter).first.accept (v); - (*iter).second->accept (v); + //iter.first.accept (v); + iter.m_sval->accept (v); } v->visit_compound_svalue (this); } @@ -2319,10 +2318,9 @@ compound_svalue::calc_complexity (const binding_map &map) { unsigned num_child_nodes = 0; unsigned max_child_depth = 0; - for (binding_map::iterator_t iter = map.begin (); - iter != map.end (); ++iter) + for (auto iter : map) { - const complexity &sval_c = (*iter).second->get_complexity (); + const complexity &sval_c = iter.m_sval->get_complexity (); num_child_nodes += sval_c.m_num_nodes; max_child_depth = MAX (max_child_depth, sval_c.m_max_depth); } @@ -2337,10 +2335,10 @@ compound_svalue::maybe_fold_bits_within (tree type, const bit_range &bits, region_model_manager *mgr) const { - binding_map result_map; + binding_map result_map (*mgr->get_store_manager ()); for (auto iter : m_map) { - const binding_key *key = iter.first; + const binding_key *key = iter.m_key; if (const concrete_binding *conc_key = key->dyn_cast_concrete_binding ()) { @@ -2348,7 +2346,7 @@ compound_svalue::maybe_fold_bits_within (tree type, if (!conc_key->get_bit_range ().intersects_p (bits)) continue; - const svalue *sval = iter.second; + const svalue *sval = iter.m_sval; /* Get the position of conc_key relative to BITS. */ bit_range result_location (conc_key->get_start_bit_offset () - bits.get_start_bit_offset (), diff --git a/gcc/analyzer/svalue.h b/gcc/analyzer/svalue.h index 0ccb5ce4bd6a..df236d736064 100644 --- a/gcc/analyzer/svalue.h +++ b/gcc/analyzer/svalue.h @@ -1391,6 +1391,7 @@ namespace ana { class compound_svalue : public svalue { public: + typedef binding_map::const_iterator_t const_iterator_t; typedef binding_map::iterator_t iterator_t; /* A support class for uniquifying instances of compound_svalue. @@ -1445,8 +1446,10 @@ class compound_svalue : public svalue const binding_map &get_map () const { return m_map; } - iterator_t begin () const { return m_map.begin (); } - iterator_t end () const { return m_map.end (); } + const_iterator_t begin () const { return m_map.begin (); } + const_iterator_t end () const { return m_map.end (); } + iterator_t begin () { return m_map.begin (); } + iterator_t end () { return m_map.end (); } struct key_t make_key () const { diff --git a/gcc/testsuite/gcc.dg/plugin/analyzer_cpython_plugin.cc b/gcc/testsuite/gcc.dg/plugin/analyzer_cpython_plugin.cc index 01ab76683d3a..c80b2dae66ba 100644 --- a/gcc/testsuite/gcc.dg/plugin/analyzer_cpython_plugin.cc +++ b/gcc/testsuite/gcc.dg/plugin/analyzer_cpython_plugin.cc @@ -1,13 +1,8 @@ /* -fanalyzer plugin for CPython extension modules */ /* { dg-options "-g" } */ -#define INCLUDE_MEMORY -#define INCLUDE_STRING -#define INCLUDE_VECTOR +#include "analyzer/common.h" #include "gcc-plugin.h" -#include "config.h" -#include "system.h" -#include "coretypes.h" #include "tree.h" #include "function.h" #include "basic-block.h" @@ -416,7 +411,7 @@ count_pyobj_references (const region_model *model, for (const auto &binding : retval_binding_map) { - const svalue *binding_sval = binding.second; + const svalue *binding_sval = binding.m_sval; const svalue *unwrapped_sval = binding_sval->unwrap_any_unmergeable (); const region *pointee = unwrapped_sval->maybe_get_region (); @@ -506,7 +501,7 @@ count_all_references (const region_model *model, auto binding_cluster = cluster.second; for (const auto &binding : binding_cluster->get_map ()) { - const svalue *binding_sval = binding.second; + const svalue *binding_sval = binding.m_sval; const svalue *unwrapped_sval = binding_sval->unwrap_any_unmergeable (); diff --git a/gcc/testsuite/gcc.dg/plugin/analyzer_kernel_plugin.cc b/gcc/testsuite/gcc.dg/plugin/analyzer_kernel_plugin.cc index fc282a7c1618..5918bd159f86 100644 --- a/gcc/testsuite/gcc.dg/plugin/analyzer_kernel_plugin.cc +++ b/gcc/testsuite/gcc.dg/plugin/analyzer_kernel_plugin.cc @@ -1,13 +1,8 @@ /* Proof-of-concept of a -fanalyzer plugin for the Linux kernel. */ /* { dg-options "-g" } */ -#define INCLUDE_MEMORY -#define INCLUDE_STRING -#define INCLUDE_VECTOR +#include "analyzer/common.h" #include "gcc-plugin.h" -#include "config.h" -#include "system.h" -#include "coretypes.h" #include "tree.h" #include "function.h" #include "basic-block.h" diff --git a/gcc/testsuite/gcc.dg/plugin/analyzer_known_fns_plugin.cc b/gcc/testsuite/gcc.dg/plugin/analyzer_known_fns_plugin.cc index 44fcf37c7029..d61b69942cdb 100644 --- a/gcc/testsuite/gcc.dg/plugin/analyzer_known_fns_plugin.cc +++ b/gcc/testsuite/gcc.dg/plugin/analyzer_known_fns_plugin.cc @@ -1,13 +1,8 @@ /* Proof-of-concept of a -fanalyzer plugin to handle known functions. */ /* { dg-options "-g" } */ -#define INCLUDE_MEMORY -#define INCLUDE_STRING -#define INCLUDE_VECTOR +#include "analyzer/common.h" #include "gcc-plugin.h" -#include "config.h" -#include "system.h" -#include "coretypes.h" #include "tree.h" #include "function.h" #include "basic-block.h" From 3ea09e4d43278aa8d7b088a5f5438d921c48c411 Mon Sep 17 00:00:00 2001 From: Georg-Johann Lay Date: Thu, 9 Oct 2025 15:27:16 +0200 Subject: [PATCH 192/216] AVR: target/122220 - Let (int32_t) -0x1p31L return INT32_MIN. PR target/122220 libgcc/config/avr/libf7/ * libf7-asm.sx (to_integer): Return 0x80... on negative overflow. gcc/testsuite/ * gcc.target/avr/pr122220.c: New test. --- gcc/testsuite/gcc.target/avr/pr122220.c | 23 +++++++++++++++++++++++ libgcc/config/avr/libf7/libf7-asm.sx | 18 ++---------------- 2 files changed, 25 insertions(+), 16 deletions(-) create mode 100644 gcc/testsuite/gcc.target/avr/pr122220.c diff --git a/gcc/testsuite/gcc.target/avr/pr122220.c b/gcc/testsuite/gcc.target/avr/pr122220.c new file mode 100644 index 000000000000..2a8b83932a84 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/pr122220.c @@ -0,0 +1,23 @@ +/* { dg-do run { target { ! avr_tiny } } } */ +/* { dg-additional-options { -std=gnu99 -Os -mcall-prologues } } */ + +#if __SIZEOF_LONG_DOUBLE__ == 8 + +typedef long double D; +typedef __INT32_TYPE__ int32_t; + +D dd = -0x1p31L; + +int main (void) +{ + if ((int32_t) dd != -0x7fffffff - 1) + __builtin_abort(); + + return 0; +} +#else +int main (void) +{ + return 0; +} +#endif diff --git a/libgcc/config/avr/libf7/libf7-asm.sx b/libgcc/config/avr/libf7/libf7-asm.sx index 4b42947e2ed6..a0f9bacf5fe1 100644 --- a/libgcc/config/avr/libf7/libf7-asm.sx +++ b/libgcc/config/avr/libf7/libf7-asm.sx @@ -618,21 +618,7 @@ DEFUN to_integer .Lsaturate.T: #if F7_HAVE_Inf - brtc .Lset_0x7fff - ;; -Inf => return 1 + INTxx_MIN - mov ZL, Flags - .global __clr_8 - XCALL __clr_8 - ldi C6, 0x80 - - ldi CA+0, 0x01 - - sbrs Mask, 5 - ldi CA+4, 0x01 - - sbrs Mask, 4 - ldi CA+6, 0x01 - ret + brts .Lset_0x8000 .Lset_0x7fff: ;; +Inf => return INTxx_MAX @@ -644,7 +630,7 @@ DEFUN to_integer #endif /* F7_HAVE_Inf */ .Lset_0x8000: - ;; NaN => return INTxx_MIN + ;; NaN or -Inf => return INTxx_MIN .global __clr_8 XCALL __clr_8 ldi C6, 0x80 From 078208cf15bb373dc7931d6b373689cdff70cdc5 Mon Sep 17 00:00:00 2001 From: Georg-Johann Lay Date: Thu, 9 Oct 2025 18:35:34 +0200 Subject: [PATCH 193/216] AVR: target/122222 - Add modules for __floatsidf, __floatunsidf. PR target/122222 libgcc/config/avr/libf7/ * libf7-asm.sx (D_floatsidf, D_floatunsidf): New modules. * libf7-common.mk (F7_ASM_PARTS): Add D_floatsidf, D_floatunsidf. (F7F, g_dx): Remove floatunsidf, floatsidf. * libf7.c (f7_set_s32): Don't alias to f7_floatsidf. (f7_set_u32): Don't alias to f7_floatunsidf. * f7-renames.h: Rebuild * f7-wraps.h: Rebuild. gcc/testsuite/ * gcc.target/avr/pr122222-sitod.c: New test. --- gcc/testsuite/gcc.target/avr/pr122222-sitod.c | 60 +++++++++++++ libgcc/config/avr/libf7/f7-renames.h | 2 - libgcc/config/avr/libf7/f7-wraps.h | 22 +---- libgcc/config/avr/libf7/libf7-asm.sx | 84 ++++++++++++++++++- libgcc/config/avr/libf7/libf7-common.mk | 7 +- libgcc/config/avr/libf7/libf7.c | 2 - 6 files changed, 148 insertions(+), 29 deletions(-) create mode 100644 gcc/testsuite/gcc.target/avr/pr122222-sitod.c diff --git a/gcc/testsuite/gcc.target/avr/pr122222-sitod.c b/gcc/testsuite/gcc.target/avr/pr122222-sitod.c new file mode 100644 index 000000000000..d8f172005e3e --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/pr122222-sitod.c @@ -0,0 +1,60 @@ +/* { dg-do run { target { ! avr_tiny } } } */ +/* { dg-additional-options { -std=gnu99 -Os -mcall-prologues } } */ + +#if __SIZEOF_LONG_DOUBLE__ == 8 + +typedef long double D; +typedef __INT32_TYPE__ int32_t; +typedef __UINT32_TYPE__ uint32_t; +typedef __UINT8_TYPE__ uint8_t; + +#define ARRAY_SIZE(X) (sizeof(X) / sizeof(*X)) + +void testu (void) +{ + static const volatile __flash uint32_t vals[] = + { + 0, 1ul, -1ul, (-1ul) << 1, + 1ul << 31, 1ul << 30, 1ul << 29, 1ul << 28, 1ul << 27, 1ul << 26, + 1ul << 25, 1ul << 24, 0xff, 123456789 + }; + + for (uint8_t i = 0; i < ARRAY_SIZE (vals); ++i) + { + D x = (D) vals[i]; + __asm ("" : "+r" (x)); + if ((uint32_t) x != vals[i]) + __builtin_exit (__LINE__); + } +} + +void tests (void) +{ + static const volatile __flash int32_t vals[] = + { + 0, 1L, -1L, 0x7fffffff, -0x7fffffff, -0x7fffffff - 1, + -123456789 + }; + + for (uint8_t i = 0; i < ARRAY_SIZE (vals); ++i) + { + D x = (D) vals[i]; + __asm ("" : "+r" (x)); + if ((int32_t) x != vals[i]) + __builtin_exit (__LINE__); + } +} + +int main (void) +{ + testu (); + tests (); + + return 0; +} +#else +int main (void) +{ + return 0; +} +#endif diff --git a/libgcc/config/avr/libf7/f7-renames.h b/libgcc/config/avr/libf7/f7-renames.h index bce2dd33e8a2..dc098517ada4 100644 --- a/libgcc/config/avr/libf7/f7-renames.h +++ b/libgcc/config/avr/libf7/f7-renames.h @@ -159,8 +159,6 @@ #define f7_min __f7_min #define f7_max __f7_max #define f7_exp10 __f7_exp10 -#define f7_floatunsidf __f7_floatunsidf -#define f7_floatsidf __f7_floatsidf #define f7_extendsfdf2 __f7_extendsfdf2 #define f7_fixdfsi __f7_fixdfsi #define f7_fixdfdi __f7_fixdfdi diff --git a/libgcc/config/avr/libf7/f7-wraps.h b/libgcc/config/avr/libf7/f7-wraps.h index 9033e962ad27..169957f50e02 100644 --- a/libgcc/config/avr/libf7/f7-wraps.h +++ b/libgcc/config/avr/libf7/f7-wraps.h @@ -135,27 +135,7 @@ _ENDF __truncdfsf2 #endif /* F7MOD_D_truncdfsf2_ */ ;; Functions that usually live in libgcc: __ for in: -;; floatunsidf floatsidf extendsfdf2 - -;; double __floatunsidf (type_t) ; floatunsidf -#ifdef F7MOD_D_floatunsidf_ -_DEFUN __floatunsidf - .global F7_NAME(floatunsidf) - ldi ZH, hi8(gs(F7_NAME(floatunsidf))) - ldi ZL, lo8(gs(F7_NAME(floatunsidf))) - F7jmp call_dx -_ENDF __floatunsidf -#endif /* F7MOD_D_floatunsidf_ */ - -;; double __floatsidf (type_t) ; floatsidf -#ifdef F7MOD_D_floatsidf_ -_DEFUN __floatsidf - .global F7_NAME(floatsidf) - ldi ZH, hi8(gs(F7_NAME(floatsidf))) - ldi ZL, lo8(gs(F7_NAME(floatsidf))) - F7jmp call_dx -_ENDF __floatsidf -#endif /* F7MOD_D_floatsidf_ */ +;; extendsfdf2 ;; double __extendsfdf2 (type_t) ; extendsfdf2 #ifdef F7MOD_D_extendsfdf2_ diff --git a/libgcc/config/avr/libf7/libf7-asm.sx b/libgcc/config/avr/libf7/libf7-asm.sx index a0f9bacf5fe1..f390eda73855 100644 --- a/libgcc/config/avr/libf7/libf7-asm.sx +++ b/libgcc/config/avr/libf7/libf7-asm.sx @@ -2201,8 +2201,9 @@ _ENDF __powidf2 ;;; The double exponent starts at bit 52 since the encoded mantissa has 52 bits. ;;; Note that when X is a multiple of 16, then dex_lo(x) evaluates to 0. -#define dex_lo(x) hlo8((x) << (52 - 32)) -#define dex_hi(x) hhi8((x) << (52 - 32)) +#define DEX16(x) (x) << (52 - 48) +#define dex_lo(x) lo8 (DEX16 (x)) +#define dex_hi(x) hi8 (DEX16 (x)) #ifdef F7MOD_usa2D_ _DEFUN __fractusadf @@ -2388,4 +2389,83 @@ _ENDF __fractdfusa #endif /* F7MOD_D2usa_ */ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; [u]int32_t -> double conversions. + +;; double __floatsidf (int32_t); +#ifdef F7MOD_D_floatsidf_ +_DEFUN __floatsidf + bst r25, 7 + brtc 0f + XCALL __negsi2 +0: XJMP __floatunsidf.ge0 +_ENDF __floatsidf +#endif /* F7MOD_D_floatsidf_ */ + +;; double __floatunsidf (uint32_t); +#ifdef F7MOD_D_floatunsidf_ +_DEFUN __floatunsidf + clt +_LABEL __floatunsidf.ge0 + ;; Zero-extend SI at the low end. + clr r18 + clr r19 + wmov r20, r18 + ;; Input is zero? + sbiw r24, 0 + sbci r23, 0 + sbci r22, 0 + breq 9f + ;; No: The double exponent of 0x80000000 is 31 plus a bias of 1023. + ;; Align the SI value such that the MSBit is as R25.4. + ;; For each << we have to subtract 1 from the exponent, and for + ;; each >> we have to add 1. Since we want the MSB in R25.4 and + ;; not in R25.7, the initial exponent must be reduced by 3. + ldi Xl, dex_lo (31 + 1023 - 3) + ldi Xh, dex_hi (31 + 1023 - 3) + ;; Move the MSByte to R25. +1: tst r25 + brne 2f + subi Xl, dex_lo (8) + sbci Xh, dex_hi (8) + mov r25, r24 + mov r24, r23 + mov r23, r22 + clr r22 + rjmp 1b +2: ;; Now we have R25 != 0. + cpi r25, 0x20 + brlo 3f + adiw Xl, DEX16 (1) + lsr r25 + ror r24 + ror r23 + ror r22 + ror r21 + rjmp 2b +3: cpi r25, 0x10 + brsh 4f + sbiw Xl, DEX16 (1) + lsl r22 + rol r23 + rol r24 + rol r25 + rjmp 3b +4: ;; Move the mantissa into place and clear the redundant leading 1. + cbr r25, 0x10 + mov r20, r21 + mov r21, r22 + mov r22, r23 + mov r23, r24 + mov r24, r25 + ;; Insert the biased exponent. + or r24, Xl + mov r25, Xh + ;; Insert the sign. + bld r25, 7 +9: ret +_ENDF __floatunsidf +#endif /* F7MOD_D_floatunsidf_ */ + + #endif /* !AVR_TINY */ diff --git a/libgcc/config/avr/libf7/libf7-common.mk b/libgcc/config/avr/libf7/libf7-common.mk index 6d35454ee044..e2b47409ba80 100644 --- a/libgcc/config/avr/libf7/libf7-common.mk +++ b/libgcc/config/avr/libf7/libf7-common.mk @@ -36,11 +36,14 @@ F7_ASM_PARTS += ha2D uha2D sa2D usa2D F7_ASM_PARTS += D2qq D2uqq D2hq D2uhq F7_ASM_PARTS += D2ha D2uha D2sa D2usa +# Integer -> double conversions +F7_ASM_PARTS += D_floatsidf D_floatunsidf + # Stuff that will be wrapped in f7-wraps.h (included by libf7-asm.sx) # and give f7_asm_D_*.o modules. g_ddd += add sub mul div g_xdd_cmp += -g_dx += floatunsidf floatsidf extendsfdf2 +g_dx += extendsfdf2 g_xd += fixdfsi fixdfdi fixunsdfdi fixunsdfsi truncdfsf2 m_ddd += pow fmod hypot atan2 fdim @@ -91,7 +94,7 @@ F7F += set_eps set_1pow2 # Renames for ALIASes without own module. F7F += min max exp10 -F7F += floatunsidf floatsidf extendsfdf2 +F7F += extendsfdf2 F7F += fixdfsi fixdfdi fixunsdfdi fixunsdfsi truncdfsf2 # Renames for f7-const.def. diff --git a/libgcc/config/avr/libf7/libf7.c b/libgcc/config/avr/libf7/libf7.c index 78c218a421bb..df738b0d5d0e 100644 --- a/libgcc/config/avr/libf7/libf7.c +++ b/libgcc/config/avr/libf7/libf7.c @@ -207,7 +207,6 @@ f7_t* f7_set_s32 (f7_t *cc, int32_t i32) cc->flags = flags; return cc; } -ALIAS (f7_set_s32, f7_floatsidf) #endif // F7MOD_set_s32_ @@ -219,7 +218,6 @@ f7_t* f7_set_u32 (f7_t *cc, uint32_t u32) cc->expo = 31; return f7_normalize_asm (cc); } -ALIAS (f7_set_u32, f7_floatunsidf) #endif // F7MOD_set_u32_ From 4ee06690a47cd39b6003fc6589d4f292aeb67033 Mon Sep 17 00:00:00 2001 From: Egas Ribeiro Date: Tue, 7 Oct 2025 22:48:56 +0100 Subject: [PATCH 194/216] c++: Fix ICE with concept used as function [PR116477] As suggested by Patrick Palka in the bug report, the diagnostic check for concept_check_p(fn) was being done too late in finish_call_expr(), which led to an early return inside if (processing_template_decl), which meant that the error wouldn't be triggered when we are in a type dependence early exit. This fix makes sure that this error is handled in the semantic analysis phase, and avoids the failed assertion later in tsubst_expr(). PR c++/116477 gcc/cp/ChangeLog: * semantics.cc (finish_call_expr): Move concept_check_p diagnostic before processing_template_decl check to catch errors earlier. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/concepts-pr116477.C: New test. Signed-off-by: Egas Ribeiro --- gcc/cp/semantics.cc | 13 +++++++------ gcc/testsuite/g++.dg/cpp2a/concepts-pr116477.C | 9 +++++++++ 2 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp2a/concepts-pr116477.C diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc index 8d0210ef3b63..c818b7395392 100644 --- a/gcc/cp/semantics.cc +++ b/gcc/cp/semantics.cc @@ -3327,6 +3327,13 @@ finish_call_expr (tree fn, vec **args, bool disallow_virtual, orig_fn = fn; + if (concept_check_p (fn)) + { + error_at (EXPR_LOC_OR_LOC (fn, input_location), + "cannot call a concept as a function"); + return error_mark_node; + } + if (processing_template_decl) { /* If FN is a local extern declaration (or set thereof) in a template, @@ -3456,12 +3463,6 @@ finish_call_expr (tree fn, vec **args, bool disallow_virtual, /*fn_p=*/NULL, complain); } - else if (concept_check_p (fn)) - { - error_at (EXPR_LOC_OR_LOC (fn, input_location), - "cannot call a concept as a function"); - return error_mark_node; - } else if (is_overloaded_fn (fn)) { /* If the function is an overloaded builtin, resolve it. */ diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-pr116477.C b/gcc/testsuite/g++.dg/cpp2a/concepts-pr116477.C new file mode 100644 index 000000000000..aca864ca8ae8 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/concepts-pr116477.C @@ -0,0 +1,9 @@ +// { dg-do compile { target c++20 } } + +template +concept my_concept = true; + +template +void run () { + my_concept (G{}); // { dg-error "cannot call a concept as a function" } +} From 4e44fe4280bf2d9ddc135dec18ec109805c539b9 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Thu, 9 Oct 2025 22:41:30 +0200 Subject: [PATCH 195/216] c++: C++26 va_start - part of P3348R4 - C++26 should refer to C23 not C17 The C++26 https://wg21.link/P3348R4 C++26 should refer to C23 not C17 paper among other things changes va_start macro in the similar way how C23 has changed it. Now, unlike C17 and older, C++ has since forever allowed int (...) but just one wasn't able to use va_start/va_arg/va_end in such functions. With the current C++26 draft wording, we'd have to #define va_start(V, ...) __builtin_va_start (V, 0) like we've used for C23 before the PR107980 change. But Jonathan has kindly filed https://cplusplus.github.io/LWG/issue4388 which similarly to C23 will if accepted allow to define it as #define va_start(...) __builtin_c23_va_start(__VA_ARGS__) and let the compiler diagnose undesirable cases (see stdarg6.C testcase in the patch for what it can diagnose, basically anything that isn't either va_start (ap) or va_start (ap, i) where i is the last argument's identifier). This patch implements what assumes LWG4388 will pass. It also defines #define __STDC_VERSION_STDARG_H__ 202311L also for C++26. The hardest part is actually something different. C23 had to differentiate between C99 void foo (); i.e. unspecified arguments (but not stdarg) and the new C23 void bar (...); which is stdarg, but in both cases TYPE_ARG_TYPES (fntype) is NULL. This has been implemented through the new TYPE_NO_NAMED_ARGS_STDARG_P flag, fntypes with that flag set are considered stdarg_p and allow va_start in those, while fntypes with NULL TYPE_ARG_TYPES but the flag cleared are not stdarg_p, can accept any number of arguments but can't use va_start. So, I had to change various places in the C++ FE to pass true as the third argument to build_function_type for calls which are meant to be (...) so that one can actually use va_start in those. Done only for C++26 in order not to disturb older versions too much. And there is a problem with some of the builtins and #pragma weak which are using (...) declarations more in the sense of C17 unspecified arguments rather than this call has variable arguments. So, structural_comptypes now considers the non-C++26 (...) used for selected builtins and #pragma weak incompatible with C++26 (...) to avoid ICEs. 2025-10-09 Jakub Jelinek gcc/ * ginclude/stdarg.h (va_start): Use __builtin_c23_va_start also for C++26. (__STDC_VERSION_STDARG_H__): Also define for C++26. gcc/c-family/ * c-common.h (D_CXX26): Define. * c-common.cc (c_common_resword): Add D_CXX26 to __builtin_c23_va_start flags, mention D_CXX26 in comment. gcc/cp/ * cp-tree.h (cp_build_function_type): Declare. * lex.cc: Implement va_start changes from P3348R4 - C++26 should refer to C23 not C17 paper. (init_reswords): Set D_CXX26 in mask for C++23 and older. * parser.cc (cp_parser_primary_expression): Handle RID_C23_VA_START. (cp_parser_builtin_c23_va_start): New function. * cp-objcp-common.cc (names_builtin_p): Likewise. * decl.cc (grokfndecl, check_function_type): Pass TYPE_NO_NAMED_ARGS_STDARG_P as last arg to build_function_type. (grokdeclarator, static_fn_type): Use cp_build_function_type instead of build_function_type. * typeck.cc (merge_types): Likewise. (structural_comptypes): Return false for TYPE_NO_NAMED_ARGS_STDARG_P differences. * lambda.cc (maybe_add_lambda_conv_op): Use cp_build_function_type instead of build_function_type. * tree.cc (cp_build_function_type): New function. (strip_typedefs): Pass TYPE_NO_NAMED_ARGS_STDARG_P as last arg to build_function_type. * name-lookup.cc (push_local_extern_decl_alias): Likewise. * module.cc (trees_in::tree_node): Use cp_build_function_type instead of build_function_type. * pt.cc (copy_default_args_to_explicit_spec, rebuild_function_or_method_type, build_deduction_guide): Likewise. (alias_ctad_tweaks): Pass TYPE_NO_NAMED_ARGS_STDARG_P as last arg to build_function_type. * decl2.cc (change_return_type, cp_reconstruct_complex_type): Likewise. gcc/testsuite/ * c-c++-common/cpp/has-builtin-4.c: Expect __has_builtin (__builtin_c23_va_start) == 1 also for C++26. * c-c++-common/Wvarargs.c (foo3): Don't expect undefined behavior warning for C++26. * g++.dg/cpp26/stdarg1.C: New test. * g++.dg/cpp26/stdarg2.C: New test. * g++.dg/cpp26/stdarg3.C: New test. * g++.dg/cpp26/stdarg4.C: New test. * g++.dg/cpp26/stdarg5.C: New test. * g++.dg/cpp26/stdarg6.C: New test. * g++.dg/cpp26/stdarg7.C: New test. * g++.dg/cpp26/stdarg8.C: New test. * g++.dg/cpp26/stdarg9.C: New test. * g++.dg/opt/pr60849.C (foo): Add explicit cast. --- gcc/c-family/c-common.cc | 9 +- gcc/c-family/c-common.h | 1 + gcc/cp/cp-objcp-common.cc | 1 + gcc/cp/cp-tree.h | 1 + gcc/cp/decl.cc | 13 +- gcc/cp/decl2.cc | 6 +- gcc/cp/lambda.cc | 7 +- gcc/cp/lex.cc | 2 + gcc/cp/module.cc | 2 +- gcc/cp/name-lookup.cc | 6 +- gcc/cp/parser.cc | 131 +++++++++++ gcc/cp/pt.cc | 10 +- gcc/cp/tree.cc | 16 +- gcc/cp/typeck.cc | 15 +- gcc/ginclude/stdarg.h | 6 +- gcc/testsuite/c-c++-common/Wvarargs.c | 2 +- .../c-c++-common/cpp/has-builtin-4.c | 2 +- gcc/testsuite/g++.dg/cpp26/stdarg1.C | 158 +++++++++++++ gcc/testsuite/g++.dg/cpp26/stdarg2.C | 212 ++++++++++++++++++ gcc/testsuite/g++.dg/cpp26/stdarg3.C | 7 + gcc/testsuite/g++.dg/cpp26/stdarg4.C | 7 + gcc/testsuite/g++.dg/cpp26/stdarg5.C | 5 + gcc/testsuite/g++.dg/cpp26/stdarg6.C | 112 +++++++++ gcc/testsuite/g++.dg/cpp26/stdarg7.C | 11 + gcc/testsuite/g++.dg/cpp26/stdarg8.C | 26 +++ gcc/testsuite/g++.dg/cpp26/stdarg9.C | 16 ++ gcc/testsuite/g++.dg/opt/pr60849.C | 2 +- 27 files changed, 753 insertions(+), 33 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp26/stdarg1.C create mode 100644 gcc/testsuite/g++.dg/cpp26/stdarg2.C create mode 100644 gcc/testsuite/g++.dg/cpp26/stdarg3.C create mode 100644 gcc/testsuite/g++.dg/cpp26/stdarg4.C create mode 100644 gcc/testsuite/g++.dg/cpp26/stdarg5.C create mode 100644 gcc/testsuite/g++.dg/cpp26/stdarg6.C create mode 100644 gcc/testsuite/g++.dg/cpp26/stdarg7.C create mode 100644 gcc/testsuite/g++.dg/cpp26/stdarg8.C create mode 100644 gcc/testsuite/g++.dg/cpp26/stdarg9.C diff --git a/gcc/c-family/c-common.cc b/gcc/c-family/c-common.cc index e7dd4602ac11..54e16f708134 100644 --- a/gcc/c-family/c-common.cc +++ b/gcc/c-family/c-common.cc @@ -376,9 +376,10 @@ static bool nonnull_check_p (tree, unsigned HOST_WIDE_INT); C --std=c17: D_C23 | D_CXXONLY | D_OBJC C --std=c23: D_CXXONLY | D_OBJC ObjC is like C except that D_OBJC and D_CXX_OBJC are not set - C++ --std=c++98: D_CONLY | D_CXX11 | D_CXX20 | D_OBJC - C++ --std=c++11: D_CONLY | D_CXX20 | D_OBJC - C++ --std=c++20: D_CONLY | D_OBJC + C++ --std=c++98: D_CONLY | D_CXX11 | D_CXX20 | D_CXX26 | D_OBJC + C++ --std=c++11: D_CONLY | D_CXX20 | D_CXX26 | D_OBJC + C++ --std=c++20: D_CONLY | D_CXX26 | D_OBJC + C++ --std=c++26: D_CONLY | D_OBJC ObjC++ is like C++ except that D_OBJC is not set If -fno-asm is used, D_ASM is added to the mask. If @@ -462,7 +463,7 @@ const struct c_common_resword c_common_reswords[] = { "__builtin_tgmath", RID_BUILTIN_TGMATH, D_CONLY }, { "__builtin_offsetof", RID_OFFSETOF, 0 }, { "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, D_CONLY }, - { "__builtin_c23_va_start", RID_C23_VA_START, D_C23 }, + { "__builtin_c23_va_start", RID_C23_VA_START, D_C23 | D_CXX26 }, { "__builtin_va_arg", RID_VA_ARG, 0 }, { "__complex", RID_COMPLEX, 0 }, { "__complex__", RID_COMPLEX, 0 }, diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h index b6021d241731..bedbd4a94b0e 100644 --- a/gcc/c-family/c-common.h +++ b/gcc/c-family/c-common.h @@ -448,6 +448,7 @@ extern machine_mode c_default_pointer_mode; #define D_CXX20 0x8000 /* In C++, C++20 only. */ #define D_CXX_COROUTINES 0x10000 /* In C++, only with coroutines. */ #define D_CXX_MODULES 0x20000 /* In C++, only with modules. */ +#define D_CXX26 0x40000 /* In C++, C++26 only. */ #define D_CXX_CONCEPTS_FLAGS D_CXXONLY | D_CXX_CONCEPTS #define D_CXX_CHAR8_T_FLAGS D_CXXONLY | D_CXX_CHAR8_T diff --git a/gcc/cp/cp-objcp-common.cc b/gcc/cp/cp-objcp-common.cc index ee1c0ba3de3e..c7e88cb7bfea 100644 --- a/gcc/cp/cp-objcp-common.cc +++ b/gcc/cp/cp-objcp-common.cc @@ -588,6 +588,7 @@ names_builtin_p (const char *name) case RID_BUILTIN_BIT_CAST: case RID_OFFSETOF: case RID_VA_ARG: + case RID_C23_VA_START: return 1; case RID_BUILTIN_OPERATOR_NEW: case RID_BUILTIN_OPERATOR_DELETE: diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 7298d3b81bd7..fcba9f5c0b02 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -8491,6 +8491,7 @@ extern tree cp_build_reference_type (tree, bool); extern tree move (tree); extern tree cp_build_qualified_type (tree, int, tsubst_flags_t = tf_warning_or_error); +extern tree cp_build_function_type (tree, tree); extern bool cv_qualified_p (const_tree); extern tree cv_unqualified (tree); extern special_function_kind special_function_p (const_tree); diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc index 885be3b2cecf..31f3c4b77928 100644 --- a/gcc/cp/decl.cc +++ b/gcc/cp/decl.cc @@ -12413,11 +12413,13 @@ grokfndecl (tree ctype, if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)), integer_type_node)) { - tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl)); + tree dtype = TREE_TYPE (decl); + tree oldtypeargs = TYPE_ARG_TYPES (dtype); tree newtype; error_at (declspecs->locations[ds_type_spec], "%<::main%> must return %"); - newtype = build_function_type (integer_type_node, oldtypeargs); + newtype = build_function_type (integer_type_node, oldtypeargs, + TYPE_NO_NAMED_ARGS_STDARG_P (dtype)); TREE_TYPE (decl) = newtype; } if (warn_main) @@ -15324,7 +15326,7 @@ grokdeclarator (const cp_declarator *declarator, is_xobj_member_function = false; } - type = build_function_type (type, arg_types); + type = cp_build_function_type (type, arg_types); tree attrs = declarator->std_attributes; if (tx_qual) @@ -19312,7 +19314,8 @@ check_function_type (tree decl, tree current_function_parms) void_type_node, TREE_CHAIN (args)); else - fntype = build_function_type (void_type_node, args); + fntype = build_function_type (void_type_node, args, + TYPE_NO_NAMED_ARGS_STDARG_P (fntype)); fntype = (cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl)))); fntype = cxx_copy_lang_qualifiers (fntype, TREE_TYPE (decl)); @@ -20809,7 +20812,7 @@ static_fn_type (tree memfntype) return memfntype; gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE); args = TYPE_ARG_TYPES (memfntype); - fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args)); + fntype = cp_build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args)); fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype)); fntype = (cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (memfntype))); diff --git a/gcc/cp/decl2.cc b/gcc/cp/decl2.cc index dfaef30dbfc0..0073f83a10ca 100644 --- a/gcc/cp/decl2.cc +++ b/gcc/cp/decl2.cc @@ -233,7 +233,8 @@ change_return_type (tree new_ret, tree fntype) if (TREE_CODE (fntype) == FUNCTION_TYPE) { - newtype = build_function_type (new_ret, args); + newtype = build_function_type (new_ret, args, + TYPE_NO_NAMED_ARGS_STDARG_P (fntype)); newtype = apply_memfn_quals (newtype, type_memfn_quals (fntype)); } @@ -1698,7 +1699,8 @@ cp_reconstruct_complex_type (tree type, tree bottom) else if (TREE_CODE (type) == FUNCTION_TYPE) { inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom); - outer = build_function_type (inner, TYPE_ARG_TYPES (type)); + outer = build_function_type (inner, TYPE_ARG_TYPES (type), + TYPE_NO_NAMED_ARGS_STDARG_P (type)); outer = apply_memfn_quals (outer, type_memfn_quals (type)); } else if (TREE_CODE (type) == METHOD_TYPE) diff --git a/gcc/cp/lambda.cc b/gcc/cp/lambda.cc index 575daaa9d711..c2655a9949a7 100644 --- a/gcc/cp/lambda.cc +++ b/gcc/cp/lambda.cc @@ -1329,9 +1329,10 @@ maybe_add_lambda_conv_op (tree type) } tree stattype - = build_function_type (fn_result, FUNCTION_FIRST_USER_PARMTYPE (callop)); - stattype = (cp_build_type_attribute_variant - (stattype, TYPE_ATTRIBUTES (optype))); + = cp_build_function_type (fn_result, + FUNCTION_FIRST_USER_PARMTYPE (callop)); + stattype = cp_build_type_attribute_variant (stattype, + TYPE_ATTRIBUTES (optype)); if (flag_noexcept_type && TYPE_NOTHROW_P (TREE_TYPE (callop))) stattype = build_exception_variant (stattype, noexcept_true_spec); diff --git a/gcc/cp/lex.cc b/gcc/cp/lex.cc index da86989a41d2..3bc48659a8c7 100644 --- a/gcc/cp/lex.cc +++ b/gcc/cp/lex.cc @@ -243,6 +243,8 @@ init_reswords (void) mask |= D_CXX11; if (cxx_dialect < cxx20) mask |= D_CXX20; + if (cxx_dialect < cxx26) + mask |= D_CXX26; if (!flag_concepts) mask |= D_CXX_CONCEPTS; if (!flag_coroutines) diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc index 103d7506da2d..bdc7e6af8748 100644 --- a/gcc/cp/module.cc +++ b/gcc/cp/module.cc @@ -10414,7 +10414,7 @@ trees_in::tree_node (bool is_use) if (klass) res = build_method_type_directly (klass, res, args); else - res = build_function_type (res, args); + res = cp_build_function_type (res, args); } } break; diff --git a/gcc/cp/name-lookup.cc b/gcc/cp/name-lookup.cc index 09d16db2ead8..b7530616ef06 100644 --- a/gcc/cp/name-lookup.cc +++ b/gcc/cp/name-lookup.cc @@ -3726,7 +3726,11 @@ push_local_extern_decl_alias (tree decl) chain = &TREE_CHAIN (*chain); } - tree fn_type = build_function_type (TREE_TYPE (type), nargs); + bool no_named_args_stdarg + = TYPE_NO_NAMED_ARGS_STDARG_P (type); + tree fn_type + = build_function_type (TREE_TYPE (type), nargs, + no_named_args_stdarg); fn_type = apply_memfn_quals (fn_type, type_memfn_quals (type)); diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index 362cddbaf692..b4000527bf30 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -2575,6 +2575,7 @@ static cp_expr cp_parser_expression (cp_parser *, cp_id_kind * = NULL, bool = false, bool = false, bool = false); static cp_expr cp_parser_constant_expression (cp_parser *, int = 0, bool * = NULL, bool = false); +static cp_expr cp_parser_builtin_c23_va_start (cp_parser *); static cp_expr cp_parser_builtin_offsetof (cp_parser *); static cp_expr cp_parser_lambda_expression @@ -6407,6 +6408,9 @@ cp_parser_primary_expression (cp_parser *parser, return build_x_va_arg (combined_loc, expression, type); } + case RID_C23_VA_START: + return cp_parser_builtin_c23_va_start (parser); + case RID_OFFSETOF: return cp_parser_builtin_offsetof (parser); @@ -11497,6 +11501,133 @@ cp_parser_constant_expression (cp_parser* parser, return expression; } +/* Parse __builtin_c23_va_start. + + c23-va-start-expression: + __builtin_c23_va_start ( assignment-expression ) + __builtin_c23_va_start ( assignment-expression , identifier ) + __builtin_c23_va_start ( assignment-expression , tokens[opt] ) + + The first form is the expected new C++26 form, the second if + identifier is the name of the last parameter before ... is meant + for backwards compatibility with C++23 and older. + The third form where LWG4388 requires all the preprocessing tokens + to be convertible to tokens and it can't contain unbalanced + parentheses is parsed with a warning and the tokens are just skipped. + This is because C++26 like C23 defines va_start macro as + va_start (ap, ...) and says second and later arguments to the macro + are discarded, yet we want to diagnose when people use something + which wasn't valid before C++26 and is not the single argument + va_start either. */ + +static cp_expr +cp_parser_builtin_c23_va_start (cp_parser *parser) +{ + location_t start_loc = cp_lexer_peek_token (parser->lexer)->location; + cp_lexer_consume_token (parser->lexer); + /* Look for the opening `('. */ + matching_parens parens; + parens.require_open (parser); + location_t arg_loc = cp_lexer_peek_token (parser->lexer)->location; + /* Now, parse the assignment-expression. */ + tree expression = cp_parser_assignment_expression (parser); + if (!cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)) + { + location_t cloc = cp_lexer_peek_token (parser->lexer)->location; + if (!cp_parser_require (parser, CPP_COMMA, RT_COMMA)) + { + cp_parser_skip_to_closing_parenthesis (parser, false, false, + /*consume_paren=*/ true); + return error_mark_node; + } + if (cp_lexer_next_token_is (parser->lexer, CPP_NAME) + && cp_lexer_nth_token_is (parser->lexer, 2, CPP_CLOSE_PAREN)) + { + tree name = cp_lexer_peek_token (parser->lexer)->u.value; + location_t nloc = cp_lexer_peek_token (parser->lexer)->location; + tree decl = lookup_name (name); + tree last_parm = tree_last (DECL_ARGUMENTS (current_function_decl)); + if (!last_parm || decl != last_parm) + warning_at (nloc, OPT_Wvarargs, "optional second parameter of " + "% not last named argument"); + else + { + /* __builtin_va_start parsing does mark the argument as used and + read, for -Wunused* purposes mark it the same. */ + TREE_USED (last_parm) = 1; + mark_exp_read (last_parm); + } + cp_lexer_consume_token (parser->lexer); + } + else + { + unsigned nesting_depth = 0; + location_t sloc = cp_lexer_peek_token (parser->lexer)->location; + location_t eloc = sloc; + + /* For va_start (ap,) the ) comes from stdarg.h. + Use location of , in that case, otherwise without -Wsystem-headers + nothing is reported. After all, the problematic token is the + comma in that case. */ + if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)) + sloc = eloc = cloc; + /* Not using cp_parser_skip_to_closing_parenthesis here, because + the tokens in second and further arguments don't have to be + fully balanced, only can't contain unbalanced parentheses. + So, va_start (ap, [[[[[[[[[{{{{{{{{{}]); + is valid C++ for which we want to warn, + #define X id); something ( + va_start (ap, X); + is IFNDR (not detectable unless the preprocessor special cases + va_start macro). */ + while (true) + { + cp_token *token = cp_lexer_peek_token (parser->lexer); + if (token->type == CPP_CLOSE_PAREN && !nesting_depth) + break; + + if (token->type == CPP_EOF) + break; + if (token->type == CPP_OPEN_PAREN) + ++nesting_depth; + else if (token->type == CPP_CLOSE_PAREN) + --nesting_depth; + else if (token->type == CPP_PRAGMA) + { + cp_parser_skip_to_pragma_eol (parser, token); + continue; + } + eloc = token->location; + cp_lexer_consume_token (parser->lexer); + } + if (sloc != eloc) + sloc = make_location (sloc, sloc, eloc); + warning_at (sloc, OPT_Wvarargs, + "% macro used with additional " + "arguments other than identifier of the " + "last named argument"); + } + } + /* Look for the closing `)'. */ + location_t finish_loc = cp_lexer_peek_token (parser->lexer)->location; + /* Construct a location of the form: + __builtin_c23_va_start (ap, arg) + ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~ + with the caret at the first argument, ranging from the start + of the "__builtin_c23_va_start" token to the close paren. */ + location_t combined_loc = make_location (arg_loc, start_loc, finish_loc); + parens.require_close (parser); + tree fndecl = builtin_decl_explicit (BUILT_IN_VA_START); + releasing_vec args; + vec_safe_push (args, expression); + vec_safe_push (args, integer_zero_node); + tree ret = finish_call_expr (fndecl, &args, false, true, + tf_warning_or_error); + if (TREE_CODE (ret) == CALL_EXPR) + SET_EXPR_LOCATION (ret, combined_loc); + return cp_expr (ret, combined_loc); +} + /* Parse __builtin_offsetof. offsetof-expression: diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index 9b32049e71be..f61223f0baba 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -2654,8 +2654,7 @@ copy_default_args_to_explicit_spec (tree decl) new_spec_types); } else - new_type = build_function_type (TREE_TYPE (old_type), - new_spec_types); + new_type = cp_build_function_type (TREE_TYPE (old_type), new_spec_types); new_type = cp_build_type_attribute_variant (new_type, TYPE_ATTRIBUTES (old_type)); new_type = cxx_copy_lang_qualifiers (new_type, old_type); @@ -14779,7 +14778,7 @@ rebuild_function_or_method_type (tree t, tree args, tree return_type, tree new_type; if (TREE_CODE (t) == FUNCTION_TYPE) { - new_type = build_function_type (return_type, arg_types); + new_type = cp_build_function_type (return_type, arg_types); new_type = apply_memfn_quals (new_type, type_memfn_quals (t)); } else @@ -31100,7 +31099,7 @@ build_deduction_guide (tree type, tree ctor, tree outer_args, tsubst_flags_t com = copy_node (INNERMOST_TEMPLATE_PARMS (tparms)); } - tree fntype = build_function_type (type, fparms); + tree fntype = cp_build_function_type (type, fparms); tree ded_fn = build_lang_decl_loc (loc, FUNCTION_DECL, dguide_name (type), fntype); @@ -31532,7 +31531,8 @@ alias_ctad_tweaks (tree tmpl, tree uguides) tree fntype = TREE_TYPE (fprime); ret = lookup_template_class (TPARMS_PRIMARY_TEMPLATE (atparms), targs, in_decl, NULL_TREE, complain); - fntype = build_function_type (ret, TYPE_ARG_TYPES (fntype)); + fntype = build_function_type (ret, TYPE_ARG_TYPES (fntype), + TYPE_NO_NAMED_ARGS_STDARG_P (fntype)); TREE_TYPE (fprime) = fntype; if (TREE_CODE (fprime) == TEMPLATE_DECL) TREE_TYPE (DECL_TEMPLATE_RESULT (fprime)) = fntype; diff --git a/gcc/cp/tree.cc b/gcc/cp/tree.cc index c6ce7e988cee..814465c65292 100644 --- a/gcc/cp/tree.cc +++ b/gcc/cp/tree.cc @@ -1537,6 +1537,19 @@ cp_build_qualified_type (tree type, int type_quals, return result; } +/* Return a FUNCTION_TYPE for a function returning VALUE_TYPE + with ARG_TYPES arguments. Wrapper around build_function_type + which ensures TYPE_NO_NAMED_ARGS_STDARG_P is set if ARG_TYPES + is NULL for C++26. */ + +tree +cp_build_function_type (tree value_type, tree arg_types) +{ + return build_function_type (value_type, arg_types, + cxx_dialect >= cxx26 + && arg_types == NULL_TREE); +} + /* Return TYPE with const and volatile removed. */ tree @@ -1782,7 +1795,8 @@ strip_typedefs (tree t, bool *remove_attributes /* = NULL */, } else { - result = build_function_type (type, arg_types); + result = build_function_type (type, arg_types, + TYPE_NO_NAMED_ARGS_STDARG_P (t)); result = apply_memfn_quals (result, type_memfn_quals (t)); } diff --git a/gcc/cp/typeck.cc b/gcc/cp/typeck.cc index b876409d8474..dbadeb770858 100644 --- a/gcc/cp/typeck.cc +++ b/gcc/cp/typeck.cc @@ -1035,7 +1035,7 @@ merge_types (tree t1, tree t2) gcc_assert (quals == type_memfn_quals (t2)); gcc_assert (rqual == type_memfn_rqual (t2)); - tree rval = build_function_type (valtype, parms); + tree rval = cp_build_function_type (valtype, parms); rval = apply_memfn_quals (rval, quals); tree raises = merge_exception_specifiers (TYPE_RAISES_EXCEPTIONS (t1), TYPE_RAISES_EXCEPTIONS (t2)); @@ -1058,10 +1058,10 @@ merge_types (tree t1, tree t2) /* If this was a member function type, get back to the original type of type member function (i.e., without the class instance variable up front. */ - t1 = build_function_type (TREE_TYPE (t1), - TREE_CHAIN (TYPE_ARG_TYPES (t1))); - t2 = build_function_type (TREE_TYPE (t2), - TREE_CHAIN (TYPE_ARG_TYPES (t2))); + t1 = cp_build_function_type (TREE_TYPE (t1), + TREE_CHAIN (TYPE_ARG_TYPES (t1))); + t2 = cp_build_function_type (TREE_TYPE (t2), + TREE_CHAIN (TYPE_ARG_TYPES (t2))); t3 = merge_types (t1, t2); t3 = build_method_type_directly (basetype, TREE_TYPE (t3), TYPE_ARG_TYPES (t3)); @@ -1550,8 +1550,11 @@ structural_comptypes (tree t1, tree t2, int strict) return false; break; - case METHOD_TYPE: case FUNCTION_TYPE: + if (TYPE_NO_NAMED_ARGS_STDARG_P (t1) != TYPE_NO_NAMED_ARGS_STDARG_P (t2)) + return false; + /* FALLTHRU */ + case METHOD_TYPE: /* Exception specs and memfn_rquals were checked above. */ if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))) return false; diff --git a/gcc/ginclude/stdarg.h b/gcc/ginclude/stdarg.h index 3a1939716668..648428863f54 100644 --- a/gcc/ginclude/stdarg.h +++ b/gcc/ginclude/stdarg.h @@ -44,7 +44,8 @@ typedef __builtin_va_list __gnuc_va_list; if this invocation was from the user program. */ #ifdef _STDARG_H -#if defined __STDC_VERSION__ && __STDC_VERSION__ > 201710L +#if (defined __STDC_VERSION__ && __STDC_VERSION__ > 201710L) \ + || __cplusplus >= 202400L #define va_start(...) __builtin_c23_va_start(__VA_ARGS__) #else #define va_start(v,l) __builtin_va_start(v,l) @@ -125,7 +126,8 @@ typedef __gnuc_va_list va_list; #endif /* not __svr4__ */ -#if defined __STDC_VERSION__ && __STDC_VERSION__ > 201710L +#if (defined __STDC_VERSION__ && __STDC_VERSION__ > 201710L) \ + || __cplusplus >= 202400L #define __STDC_VERSION_STDARG_H__ 202311L #endif diff --git a/gcc/testsuite/c-c++-common/Wvarargs.c b/gcc/testsuite/c-c++-common/Wvarargs.c index ea86ba30dcd7..71f24f861b7f 100644 --- a/gcc/testsuite/c-c++-common/Wvarargs.c +++ b/gcc/testsuite/c-c++-common/Wvarargs.c @@ -50,6 +50,6 @@ foo3 (int a, register int b, ...) // { dg-warning "ISO C\\+\\+17 does not allow { va_list vp; /* 'b' is declared with register storage, so warn. */ - va_start (vp, b); /* { dg-warning "undefined behavior" } */ + va_start (vp, b); /* { dg-warning "undefined behavior" "" { target { c || c++23_down } } } */ va_end (vp); } diff --git a/gcc/testsuite/c-c++-common/cpp/has-builtin-4.c b/gcc/testsuite/c-c++-common/cpp/has-builtin-4.c index 65d2b188d9aa..186e2f1bbfb5 100644 --- a/gcc/testsuite/c-c++-common/cpp/has-builtin-4.c +++ b/gcc/testsuite/c-c++-common/cpp/has-builtin-4.c @@ -9,7 +9,7 @@ #if __has_builtin (__builtin_va_arg) != 1 #error "no __builtin_va_arg" #endif -#if __STDC_VERSION__ >= 202311L +#if (__STDC_VERSION__ >= 202311L || __cplusplus >= 202400L) #if __has_builtin (__builtin_c23_va_start) != 1 #error "no __builtin_c23_va_start" #endif diff --git a/gcc/testsuite/g++.dg/cpp26/stdarg1.C b/gcc/testsuite/g++.dg/cpp26/stdarg1.C new file mode 100644 index 000000000000..4ce288b7a1f7 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/stdarg1.C @@ -0,0 +1,158 @@ +// P3348R4 - C++26 should refer to C23 not C17 +// { dg-do run { target c++26 } } + +#include + +double +f (...) +{ + va_list ap; + va_start (ap); + double ret = va_arg (ap, int); + ret += va_arg (ap, double); + ret += va_arg (ap, int); + ret += va_arg (ap, double); + va_end (ap); + return ret; +} + +void +g (...) +{ + va_list ap; + va_start (ap, random ! ignored, ignored ** text); // { dg-warning "'va_start' macro used with additional arguments other than identifier of the last named argument" } + for (int i = 0; i < 10; i++) + if (va_arg (ap, double) != i) + __builtin_abort (); + va_end (ap); +} + +void +h1 (int x, ...) +{ + va_list ap; + va_start (ap); + for (int i = 0; i < 10; i++) + { + if (va_arg (ap, double) != i) + __builtin_abort (); + i++; + if (va_arg (ap, int) != i) + __builtin_abort (); + } + va_end (ap); +} + +void +h2 (int x(), ...) +{ + va_list ap; + va_start (ap); + for (int i = 0; i < 10; i++) + { + if (va_arg (ap, double) != i) + __builtin_abort (); + i++; + if (va_arg (ap, int) != i) + __builtin_abort (); + } + va_end (ap); +} + +void +h3 (int x[10], ...) +{ + va_list ap; + va_start (ap); + for (int i = 0; i < 10; i++) + { + if (va_arg (ap, double) != i) + __builtin_abort (); + i++; + if (va_arg (ap, int) != i) + __builtin_abort (); + } + va_end (ap); +} + +void +h4 (char x, ...) +{ + va_list ap; + va_start (ap); + for (int i = 0; i < 10; i++) + { + if (va_arg (ap, double) != i) + __builtin_abort (); + i++; + if (va_arg (ap, int) != i) + __builtin_abort (); + } + va_end (ap); +} + +void +h5 (float x, ...) +{ + va_list ap; + va_start (ap); + for (int i = 0; i < 10; i++) + { + if (va_arg (ap, double) != i) + __builtin_abort (); + i++; + if (va_arg (ap, int) != i) + __builtin_abort (); + } + va_end (ap); +} + +void +h6 (long x, ...) +{ + va_list ap; + va_start (ap); + for (int i = 0; i < 10; i++) + { + if (va_arg (ap, double) != i) + __builtin_abort (); + i++; + if (va_arg (ap, int) != i) + __builtin_abort (); + } + va_end (ap); +} + +struct s { char c[1000]; }; + +void +h7 (struct s x, ...) +{ + va_list ap; + va_start (ap); + for (int i = 0; i < 10; i++) + { + if (va_arg (ap, double) != i) + __builtin_abort (); + i++; + if (va_arg (ap, int) != i) + __builtin_abort (); + } + va_end (ap); +} + +int +main () +{ + if (f (1, 2.0, 3, 4.0) != 10.0) + __builtin_abort (); + g (0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); + g (0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f); + h1 (0, 0.0, 1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, 9); + h2 (0, 0.0, 1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, 9); + h3 (0, 0.0, 1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, 9); + h4 (0, 0.0, 1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, 9); + h5 (0, 0.0, 1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, 9); + h6 (0, 0.0, 1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, 9); + h7 (s {}, 0.0, 1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, 9); +} diff --git a/gcc/testsuite/g++.dg/cpp26/stdarg2.C b/gcc/testsuite/g++.dg/cpp26/stdarg2.C new file mode 100644 index 000000000000..218bcd6cf18c --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/stdarg2.C @@ -0,0 +1,212 @@ +// P3348R4 - C++26 should refer to C23 not C17 +// { dg-do run { target c++26 } } + +#include + +struct s { char c[1000]; }; + +struct s +f (...) +{ + va_list ap; + va_start (ap); + double r = va_arg (ap, int); + r += va_arg (ap, double); + r += va_arg (ap, int); + r += va_arg (ap, double); + va_end (ap); + struct s ret = {}; + ret.c[0] = r; + ret.c[999] = 42; + return ret; +} + +struct s +g (...) +{ + va_list ap; + va_start (ap, random ! ignored, ignored ** text); // { dg-warning "'va_start' macro used with additional arguments other than identifier of the last named argument" } + for (int i = 0; i < 10; i++) + if (va_arg (ap, double) != i) + __builtin_abort (); + va_end (ap); + struct s ret = {}; + ret.c[0] = 17; + ret.c[999] = 58; + return ret; +} + +struct s +h1 (int x, ...) +{ + va_list ap; + va_start (ap); + for (int i = 0; i < 10; i++) + { + if (va_arg (ap, double) != i) + __builtin_abort (); + i++; + if (va_arg (ap, int) != i) + __builtin_abort (); + } + va_end (ap); + struct s ret = {}; + ret.c[0] = 32; + ret.c[999] = 95; + return ret; +} + +struct s +h2 (int x(), ...) +{ + va_list ap; + va_start (ap); + for (int i = 0; i < 10; i++) + { + if (va_arg (ap, double) != i) + __builtin_abort (); + i++; + if (va_arg (ap, int) != i) + __builtin_abort (); + } + va_end (ap); + struct s ret = {}; + ret.c[0] = 5; + ret.c[999] = 125; + return ret; +} + +struct s +h3 (int x[10], ...) +{ + va_list ap; + va_start (ap); + for (int i = 0; i < 10; i++) + { + if (va_arg (ap, double) != i) + __builtin_abort (); + i++; + if (va_arg (ap, int) != i) + __builtin_abort (); + } + va_end (ap); + struct s ret = {}; + ret.c[0] = 8; + ret.c[999] = 12; + return ret; +} + +struct s +h4 (char x, ...) +{ + va_list ap; + va_start (ap); + for (int i = 0; i < 10; i++) + { + if (va_arg (ap, double) != i) + __builtin_abort (); + i++; + if (va_arg (ap, int) != i) + __builtin_abort (); + } + va_end (ap); + struct s ret = {}; + ret.c[0] = 18; + ret.c[999] = 28; + return ret; +} + +struct s +h5 (float x, ...) +{ + va_list ap; + va_start (ap); + for (int i = 0; i < 10; i++) + { + if (va_arg (ap, double) != i) + __builtin_abort (); + i++; + if (va_arg (ap, int) != i) + __builtin_abort (); + } + va_end (ap); + struct s ret = {}; + ret.c[0] = 38; + ret.c[999] = 48; + return ret; +} + +struct s +h6 (long x, ...) +{ + va_list ap; + va_start (ap); + for (int i = 0; i < 10; i++) + { + if (va_arg (ap, double) != i) + __builtin_abort (); + i++; + if (va_arg (ap, int) != i) + __builtin_abort (); + } + va_end (ap); + struct s ret = {}; + ret.c[0] = 58; + ret.c[999] = 68; + return ret; +} + +struct s +h7 (struct s x, ...) +{ + va_list ap; + va_start (ap); + for (int i = 0; i < 10; i++) + { + if (va_arg (ap, double) != i) + __builtin_abort (); + i++; + if (va_arg (ap, int) != i) + __builtin_abort (); + } + va_end (ap); + struct s ret = {}; + ret.c[0] = 78; + ret.c[999] = 88; + return ret; +} + +int +main () +{ + struct s x = f (1, 2.0, 3, 4.0); + if (x.c[0] != 10 || x.c[999] != 42) + __builtin_abort (); + x = g (0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); + if (x.c[0] != 17 || x.c[999] != 58) + __builtin_abort (); + x = g (0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f); + if (x.c[0] != 17 || x.c[999] != 58) + __builtin_abort (); + x = h1 (0, 0.0, 1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, 9); + if (x.c[0] != 32 || x.c[999] != 95) + __builtin_abort (); + x = h2 (0, 0.0, 1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, 9); + if (x.c[0] != 5 || x.c[999] != 125) + __builtin_abort (); + x = h3 (0, 0.0, 1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, 9); + if (x.c[0] != 8 || x.c[999] != 12) + __builtin_abort (); + x = h4 (0, 0.0, 1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, 9); + if (x.c[0] != 18 || x.c[999] != 28) + __builtin_abort (); + x = h5 (0, 0.0, 1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, 9); + if (x.c[0] != 38 || x.c[999] != 48) + __builtin_abort (); + x = h6 (0, 0.0, 1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, 9); + if (x.c[0] != 58 || x.c[999] != 68) + __builtin_abort (); + x = h7 (s {}, 0.0, 1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, 9); + if (x.c[0] != 78 || x.c[999] != 88) + __builtin_abort (); +} diff --git a/gcc/testsuite/g++.dg/cpp26/stdarg3.C b/gcc/testsuite/g++.dg/cpp26/stdarg3.C new file mode 100644 index 000000000000..7ed3d67343ab --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/stdarg3.C @@ -0,0 +1,7 @@ +// P3348R4 - C++26 should refer to C23 not C17 +// { dg-do run { target c++26 } } +// { dg-additional-options "-O2" } + +#include "stdarg1.C" + +// { dg-warning "'va_start' macro used with additional arguments other than identifier of the last named argument" "" { target *-*-* } 0 } diff --git a/gcc/testsuite/g++.dg/cpp26/stdarg4.C b/gcc/testsuite/g++.dg/cpp26/stdarg4.C new file mode 100644 index 000000000000..d1a3350e0aa6 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/stdarg4.C @@ -0,0 +1,7 @@ +// P3348R4 - C++26 should refer to C23 not C17 +// { dg-do run { target c++26 } } +// { dg-additional-options "-O2" } + +#include "stdarg2.C" + +// { dg-warning "'va_start' macro used with additional arguments other than identifier of the last named argument" "" { target *-*-* } 0 } diff --git a/gcc/testsuite/g++.dg/cpp26/stdarg5.C b/gcc/testsuite/g++.dg/cpp26/stdarg5.C new file mode 100644 index 000000000000..8c01089a49f4 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/stdarg5.C @@ -0,0 +1,5 @@ +// P3348R4 - C++26 should refer to C23 not C17 +// { dg-do run { target c++26 } } +// { dg-additional-options "-O2" } + +#include "../../gcc.dg/c23-stdarg-9.c" diff --git a/gcc/testsuite/g++.dg/cpp26/stdarg6.C b/gcc/testsuite/g++.dg/cpp26/stdarg6.C new file mode 100644 index 000000000000..b3d1a85ef17a --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/stdarg6.C @@ -0,0 +1,112 @@ +// P3348R4 - C++26 should refer to C23 not C17 +// { dg-do compile { target c++26 } } +// { dg-additional-options "-O2" } + +#include + +int i; + +void +f0 (...) +{ + va_list ap; + va_start (ap); + va_end (ap); +} + +void +f1 (...) +{ + va_list ap; + va_start (ap, i); // { dg-warning "optional second parameter of 'va_start' not last named argument" } + va_end (ap); +} + +void +f2 (...) +{ + int j = 0; + va_list ap; + va_start (ap, j); // { dg-warning "optional second parameter of 'va_start' not last named argument" } + va_end (ap); +} + +void +f3 (int k, int l, ...) +{ + va_list ap; + va_start (ap, k); // { dg-warning "optional second parameter of 'va_start' not last named argument" } + va_end (ap); +} + +void +f4 (int k, int l, ...) +{ + va_list ap; + va_start (ap, l); + va_end (ap); +} + +void +f5 (int k, int l, ...) +{ + va_list ap; + va_start (ap, (int) l); // { dg-warning "'va_start' macro used with additional arguments other than identifier of the last named argument" } + va_end (ap); +} + +void +f6 (int k, int l, ...) +{ + va_list ap; + va_start (ap, l + 0); // { dg-warning "'va_start' macro used with additional arguments other than identifier of the last named argument" } + va_end (ap); +} + +void +f7 (int k, int l, ...) +{ + va_list ap; + va_start (ap, ()()(), [][][], {}{}{}, *+-/1({[_*_]})%&&!?!?); // { dg-warning "'va_start' macro used with additional arguments other than identifier of the last named argument" } + va_end (ap); +} + +void +f8 (...) +{ + va_list ap; + va_start (ap,); // { dg-warning "'va_start' macro used with additional arguments other than identifier of the last named argument" } + va_end (ap); +} + +void +f9 (int k, int l, ...) +{ + va_list ap; + va_start (ap, k+l+****2); // { dg-warning "'va_start' macro used with additional arguments other than identifier of the last named argument" } + va_end (ap); +} + +void +f10 (int m, ...) +{ + va_list ap; + va_start (ap, m); + va_end (ap); +} + +void +f11 (int k, int l, ...) +{ + va_list ap; + va_start (ap, ()()()[[[}}}); // { dg-warning "'va_start' macro used with additional arguments other than identifier of the last named argument" } + va_end (ap); +} + +void +f12 (int k, int l, ...) +{ + va_list ap; + va_start (ap, ]]]]]]{{{{{{); // { dg-warning "'va_start' macro used with additional arguments other than identifier of the last named argument" } + va_end (ap); +} diff --git a/gcc/testsuite/g++.dg/cpp26/stdarg7.C b/gcc/testsuite/g++.dg/cpp26/stdarg7.C new file mode 100644 index 000000000000..e60e3cba9b94 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/stdarg7.C @@ -0,0 +1,11 @@ +// P3348R4 - C++26 should refer to C23 not C17 +// { dg-do compile { target c++26 } } +// { dg-additional-options "-O2" } + +#include + +void +f (...) +{ + va_start (); // { dg-error "expected primary-expression before '\\\)' token" } +} diff --git a/gcc/testsuite/g++.dg/cpp26/stdarg8.C b/gcc/testsuite/g++.dg/cpp26/stdarg8.C new file mode 100644 index 000000000000..71006041abac --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/stdarg8.C @@ -0,0 +1,26 @@ +// P3348R4 - C++26 should refer to C23 not C17 +// { dg-do run { target c++26 } } + +#include + +int +main () +{ + int v = 0; + auto a = [&] (...) { + va_list ap; + va_start (ap); + int b = 42; + if (v) + b = va_arg (ap, int); + va_end (ap); + return b; + }; + if (a () != 42) + __builtin_abort (); + v = 1; + if (a (1, 2) != 1) + __builtin_abort (); + if (a (13, 2.0f, 2ULL) != 13) + __builtin_abort (); +} diff --git a/gcc/testsuite/g++.dg/cpp26/stdarg9.C b/gcc/testsuite/g++.dg/cpp26/stdarg9.C new file mode 100644 index 000000000000..0f0d7541dc7a --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/stdarg9.C @@ -0,0 +1,16 @@ +// P3348R4 - C++26 should refer to C23 not C17 +// { dg-do compile } + +#include + +#if __cplusplus >= 202400L +#ifndef __STDC_VERSION_STDARG_H__ +#error __STDC_VERSION_STDARG_H__ not defined for C++26 +#elif __STDC_VERSION_STDARG_H__ != 202311L +#error Unexpected __STDC_VERSION_STDARG_H__ value +#endif +#else +#ifdef __STDC_VERSION_STDARG_H__ +#error __STDC_VERSION_STDARG_H__ defined for C++ < 26 +#endif +#endif diff --git a/gcc/testsuite/g++.dg/opt/pr60849.C b/gcc/testsuite/g++.dg/opt/pr60849.C index 52d8826b0c88..efce543511ff 100644 --- a/gcc/testsuite/g++.dg/opt/pr60849.C +++ b/gcc/testsuite/g++.dg/opt/pr60849.C @@ -7,7 +7,7 @@ extern "C" int isnan (); void foo(float a) { int (*xx)(...); - xx = isnan; + xx = (int (*)(...)) isnan; if (xx(a)) g++; } From 7e80927e9b1d208ddfe922cdd450b79a4d4aef78 Mon Sep 17 00:00:00 2001 From: David Faust Date: Wed, 5 Feb 2025 10:35:13 -0800 Subject: [PATCH 196/216] c-family: add btf_type_tag and btf_decl_tag attributes Add two new c-family attributes, "btf_type_tag" and "btf_decl_tag" along with attribute handlers for them. These attributes may be used to annotate types or declarations respectively with arbitrary strings, which will be recorded in DWARF and/or BTF information. Both attributes accept exactly one string argument. Wide strings are not supported. gcc/c-family/ * c-attribs.cc (c_common_attribute_table): Add btf_decl_tag and btf_type_tag attributes. (handle_btf_decl_tag_attribute): New handler for btf_decl_tag. (hanlde_btf_type_tag_attribute): New handler for btf_type_tag. (btf_tag_args_ok): Helper for new attribute handlers. gcc/testsuite/ * gcc.dg/attr-btf-decl-tag-1.c: New test. * gcc.dg/attr-btf-decl-tag-2.c: New test. * gcc.dg/attr-btf-type-tag-1.c: New test. * gcc.dg/attr-btf-type-tag-2.c: New test. * gcc.dg/attr-btf-type-tag-3.c: New test. --- gcc/c-family/c-attribs.cc | 110 ++++++++++++++++++++- gcc/testsuite/gcc.dg/attr-btf-decl-tag-1.c | 14 +++ gcc/testsuite/gcc.dg/attr-btf-decl-tag-2.c | 15 +++ gcc/testsuite/gcc.dg/attr-btf-type-tag-1.c | 12 +++ gcc/testsuite/gcc.dg/attr-btf-type-tag-2.c | 9 ++ gcc/testsuite/gcc.dg/attr-btf-type-tag-3.c | 8 ++ 6 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/attr-btf-decl-tag-1.c create mode 100644 gcc/testsuite/gcc.dg/attr-btf-decl-tag-2.c create mode 100644 gcc/testsuite/gcc.dg/attr-btf-type-tag-1.c create mode 100644 gcc/testsuite/gcc.dg/attr-btf-type-tag-2.c create mode 100644 gcc/testsuite/gcc.dg/attr-btf-type-tag-3.c diff --git a/gcc/c-family/c-attribs.cc b/gcc/c-family/c-attribs.cc index 5bc5183f421d..cf82cdf22316 100644 --- a/gcc/c-family/c-attribs.cc +++ b/gcc/c-family/c-attribs.cc @@ -189,6 +189,9 @@ static tree handle_fd_arg_attribute (tree *, tree, tree, int, bool *); static tree handle_flag_enum_attribute (tree *, tree, tree, int, bool *); static tree handle_null_terminated_string_arg_attribute (tree *, tree, tree, int, bool *); +static tree handle_btf_decl_tag_attribute (tree *, tree, tree, int, bool *); +static tree handle_btf_type_tag_attribute (tree *, tree, tree, int, bool *); + /* Helper to define attribute exclusions. */ #define ATTR_EXCL(name, function, type, variable) \ { name, function, type, variable } @@ -657,7 +660,11 @@ const struct attribute_spec c_common_gnu_attributes[] = { "flag_enum", 0, 0, false, true, false, false, handle_flag_enum_attribute, NULL }, { "null_terminated_string_arg", 1, 1, false, true, true, false, - handle_null_terminated_string_arg_attribute, NULL} + handle_null_terminated_string_arg_attribute, NULL}, + { "btf_type_tag", 1, 1, false, true, false, false, + handle_btf_type_tag_attribute, NULL}, + { "btf_decl_tag", 1, 1, true, false, false, false, + handle_btf_decl_tag_attribute, NULL} }; const struct scoped_attribute_specs c_common_gnu_attribute_table = @@ -5172,6 +5179,107 @@ handle_null_terminated_string_arg_attribute (tree *node, tree name, tree args, return NULL_TREE; } +/* Common argument checking for btf_type_tag and btf_decl_tag. + Return true if the ARGS are valid, otherwise emit an error and + return false. */ + +static bool +btf_tag_args_ok (tree name, tree args) +{ + if (!args) /* Correct number of args (1) is checked for us. */ + return false; + else if (TREE_CODE (TREE_VALUE (args)) != STRING_CST) + { + error ("%qE attribute requires a string argument", name); + return false; + } + + /* Only narrow character strings are accepted. */ + tree argtype = TREE_TYPE (TREE_TYPE (TREE_VALUE (args))); + if (!(argtype == char_type_node + || argtype == char8_type_node + || argtype == signed_char_type_node + || argtype == unsigned_char_type_node)) + { + error ("unsupported wide string type argument in %qE attribute", name); + return false; + } + + return true; +} + +/* Handle the "btf_decl_tag" attribute. */ + +static tree +handle_btf_decl_tag_attribute (tree * ARG_UNUSED (node), tree name, tree args, + int ARG_UNUSED (flags), bool *no_add_attrs) +{ + if (!btf_tag_args_ok (name, args)) + *no_add_attrs = true; + + return NULL_TREE; +} + +/* Handle the "btf_type_tag" attribute. */ + +static tree +handle_btf_type_tag_attribute (tree *node, tree name, tree args, + int flags, bool *no_add_attrs) +{ + if (!btf_tag_args_ok (name, args)) + { + *no_add_attrs = true; + return NULL_TREE; + } + + if (TREE_CODE (*node) == FUNCTION_TYPE || TREE_CODE (*node) == METHOD_TYPE) + { + warning (OPT_Wattributes, + "%qE attribute does not apply to functions", name); + *no_add_attrs = true; + return NULL_TREE; + } + + /* Ensure a variant type is always created to hold the type_tag, + unless ATTR_FLAG_IN_PLACE is set. Same logic as in + common_handle_aligned_attribute. */ + tree decl = NULL_TREE; + tree *type = NULL; + bool is_type = false; + + if (DECL_P (*node)) + { + decl = *node; + type = &TREE_TYPE (decl); + is_type = TREE_CODE (*node) == TYPE_DECL; + } + else if (TYPE_P (*node)) + type = node, is_type = true; + + if (is_type) + { + if ((flags & (int) ATTR_FLAG_TYPE_IN_PLACE)) + /* OK, modify the type in place. */; + + /* If we have a TYPE_DECL, then copy the type, so that we + don't accidentally modify a builtin type. See pushdecl. */ + else if (decl && TREE_TYPE (decl) != error_mark_node + && DECL_ORIGINAL_TYPE (decl) == NULL_TREE) + { + tree tt = TREE_TYPE (decl); + *type = build_variant_type_copy (*type); + DECL_ORIGINAL_TYPE (decl) = tt; + TYPE_NAME (*type) = decl; + TREE_USED (*type) = TREE_USED (decl); + TREE_TYPE (decl) = *type; + } + else + *type = build_variant_type_copy (*type); + } + + return NULL_TREE; +} + /* Handle the "nonstring" variable attribute. */ static tree diff --git a/gcc/testsuite/gcc.dg/attr-btf-decl-tag-1.c b/gcc/testsuite/gcc.dg/attr-btf-decl-tag-1.c new file mode 100644 index 000000000000..d26d992c44d3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/attr-btf-decl-tag-1.c @@ -0,0 +1,14 @@ +/* Test btf_decl_tag attribute argument checking. */ +/* { dg-do compile } */ + +void *vptr __attribute__((btf_decl_tag("vptr"), btf_decl_tag ("perthread"))); + +struct Foo +{ + int x __attribute__((btf_decl_tag (0x55))); /* { dg-error "requires a string" } */ + char *c __attribute__((btf_decl_tag (L"Lstr"))); /* { dg-error "unsupported wide string" } */ +}; + +extern int foo (int x, int y __attribute__((btf_decl_tag))); /* { dg-error "wrong number of arguments" } */ + +char *str __attribute__((btf_decl_tag("A", "B"))); /* { dg-error "wrong number of arguments" } */ diff --git a/gcc/testsuite/gcc.dg/attr-btf-decl-tag-2.c b/gcc/testsuite/gcc.dg/attr-btf-decl-tag-2.c new file mode 100644 index 000000000000..956e20eb2ef9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/attr-btf-decl-tag-2.c @@ -0,0 +1,15 @@ +/* Test btf_decl_tag attribute argument checking for wide string types. */ +/* { dg-do compile } */ +/* { dg-options "--std=c11" } */ + +int **my_ptr __attribute__((btf_decl_tag("my_ptr"))); + +void *x __attribute__((btf_decl_tag (U"Ustr"))); /* { dg-error "unsupported wide string" } */ + +const int y __attribute__((btf_decl_tag (u"ustr"))); /* { dg-error "unsupported wide string" } */ + +union U +{ + int x; + char c __attribute__((btf_decl_tag (u8"u8str"))); /* OK. */ +}; diff --git a/gcc/testsuite/gcc.dg/attr-btf-type-tag-1.c b/gcc/testsuite/gcc.dg/attr-btf-type-tag-1.c new file mode 100644 index 000000000000..2ed54ae5be38 --- /dev/null +++ b/gcc/testsuite/gcc.dg/attr-btf-type-tag-1.c @@ -0,0 +1,12 @@ +/* Test btf_type_tag attribute argument checking. */ +/* { dg-do compile } */ + +void * __attribute__((btf_type_tag ("A"), btf_type_tag ("vptr"))) a; + +int __attribute__((btf_type_tag (5))) b; /* { dg-error "requires a string" } */ + +char * __attribute__((btf_type_tag (L"Lstr"))) c; /* { dg-error "unsupported wide string" } */ + +int * __attribute__((btf_type_tag)) d; /* { dg-error "wrong number of arguments" } */ + +char * __attribute__((btf_type_tag ("A", "B"))) e; /* { dg-error "wrong number of arguments" } */ diff --git a/gcc/testsuite/gcc.dg/attr-btf-type-tag-2.c b/gcc/testsuite/gcc.dg/attr-btf-type-tag-2.c new file mode 100644 index 000000000000..edc22b11ef86 --- /dev/null +++ b/gcc/testsuite/gcc.dg/attr-btf-type-tag-2.c @@ -0,0 +1,9 @@ +/* Test btf_type_tag attribute argument checking for wide string types. */ +/* { dg-do compile } */ +/* { dg-options "--std=c11" } */ + +int __attribute__((btf_type_tag (U"Ustr"))) x; /* { dg-error "unsupported wide string" } */ + +int __attribute__((btf_type_tag (u"ustr"))) y; /* { dg-error "unsupported wide string" } */ + +int __attribute__((btf_type_tag (u8"u8str"))) z; /* OK. */ diff --git a/gcc/testsuite/gcc.dg/attr-btf-type-tag-3.c b/gcc/testsuite/gcc.dg/attr-btf-type-tag-3.c new file mode 100644 index 000000000000..afb14b12a22f --- /dev/null +++ b/gcc/testsuite/gcc.dg/attr-btf-type-tag-3.c @@ -0,0 +1,8 @@ +/* Test btf_type_tag attribute warnings. */ +/* { dg-do compile } */ + +int __attribute__((btf_type_tag ("A"))) a (int x); /* { dg-warning "does not apply to functions" } */ + +__attribute__((btf_type_tag ("B"))) int *b (int y); /* { dg-warning "does not apply to functions" } */ + +int *c (int z) __attribute__((btf_type_tag ("C"))); /* { dg-warning "does not apply to functions" } */ From ac7027f180b8ca4ebf29dfe4906daba4320f4edc Mon Sep 17 00:00:00 2001 From: David Faust Date: Wed, 5 Feb 2025 10:37:47 -0800 Subject: [PATCH 197/216] dwarf: create annotation DIEs for btf tags The btf_decl_tag and btf_type_tag attributes provide a means to annotate declarations and types respectively with arbitrary user provided strings. These strings are recorded in debug information for post-compilation uses, and despite the name they are meant to be recorded in DWARF as well as BTF. New DWARF extensions DW_TAG_GNU_annotation and DW_AT_GNU_annotation are used to represent these user annotations in DWARF. This patch introduces the new DWARF extension DIE and attribute, and generates them as necessary to represent user annotations from btf_decl_tag and btf_type_tag. The format of the new DIE is as follows: DW_TAG_GNU_annotation DW_AT_name: "btf_decl_tag" or "btf_type_tag" DW_AT_const_value: DW_AT_GNU_annotation: DW_AT_GNU_annotation is a new attribute extension used to refer to these new annotation DIEs. If non-null in any given declaration or type DIE, it is a reference to a DW_TAG_GNU_annotation DIE holding an annotation for that declaration or type. In addition, the DW_TAG_GNU_annotation DIEs may also have a non-null DW_AT_GNU_annotation, referring to another annotation DIE. This allows chains of annotation DIEs to be formed, such as in the case where a single declaration has multiple instances of btf_decl_tag with different string annotations. gcc/ * dwarf2out.cc (struct annotation_node, struct annotation_node_hasher) (btf_tag_htab): New ancillary structures and hash table. (annotation_node_hasher::hash, annotation_node_hasher::equal): New. (hash_btf_tag, gen_btf_tag_dies, maybe_gen_btf_type_tag_dies) (maybe_gen_btf_decl_tag_dies): New functions. (modified_type_die): Add new argument to pass type attributes. Handle btf_type_tag, and update recursive calls. (base_type_for_mode): Add new arg for modified_type_die call. (add_type_attribute): Likewise. (gen_array_type_die): Call maybe_gen_btf_type_tag_dies for the type. (gen_formal_parameter_die): Call maybe_gen_btf_decl_tag_dies for the parameter. (override_type_for_decl_p): Add new arg for modified_type_die call. (force_type_die): Likewise. (gen_tagged_type_die): Call maybe_gen_btf_type_tag_dies for the type. (gen_decl_die): Call maybe_gen_btf_decl_tag_dies for the decl. (dwarf2out_finish): Empty btf_tag_htab. (dwarf2out_cc_finalize): Delete btf_tag_htab hash table. include/ * dwarf2.def (DW_TAG_GNU_annotation): New DWARF extension. (DW_AT_GNU_annotation): Likewise. gcc/testsuite/ * gcc.dg/debug/dwarf2/dwarf-btf-decl-tag-1.c: New test. * gcc.dg/debug/dwarf2/dwarf-btf-decl-tag-2.c: New test. * gcc.dg/debug/dwarf2/dwarf-btf-decl-tag-3.c: New test. * gcc.dg/debug/dwarf2/dwarf-btf-type-tag-1.c: New test. * gcc.dg/debug/dwarf2/dwarf-btf-type-tag-2.c: New test. * gcc.dg/debug/dwarf2/dwarf-btf-type-tag-3.c: New test. * gcc.dg/debug/dwarf2/dwarf-btf-type-tag-4.c: New test. * gcc.dg/debug/dwarf2/dwarf-btf-type-tag-5.c: New test. * gcc.dg/debug/dwarf2/dwarf-btf-type-tag-6.c: New test. * gcc.dg/debug/dwarf2/dwarf-btf-type-tag-7.c: New test. * gcc.dg/debug/dwarf2/dwarf-btf-type-tag-8.c: New test. * gcc.dg/debug/dwarf2/dwarf-btf-type-tag-9.c: New test. * gcc.dg/debug/dwarf2/dwarf-btf-type-tag-10.c: New test. --- gcc/dwarf2out.cc | 328 ++++++++++++++++-- .../debug/dwarf2/dwarf-btf-decl-tag-1.c | 11 + .../debug/dwarf2/dwarf-btf-decl-tag-2.c | 25 ++ .../debug/dwarf2/dwarf-btf-decl-tag-3.c | 21 ++ .../debug/dwarf2/dwarf-btf-type-tag-1.c | 10 + .../debug/dwarf2/dwarf-btf-type-tag-10.c | 20 ++ .../debug/dwarf2/dwarf-btf-type-tag-2.c | 31 ++ .../debug/dwarf2/dwarf-btf-type-tag-3.c | 15 + .../debug/dwarf2/dwarf-btf-type-tag-4.c | 34 ++ .../debug/dwarf2/dwarf-btf-type-tag-5.c | 10 + .../debug/dwarf2/dwarf-btf-type-tag-6.c | 27 ++ .../debug/dwarf2/dwarf-btf-type-tag-7.c | 25 ++ .../debug/dwarf2/dwarf-btf-type-tag-8.c | 23 ++ .../debug/dwarf2/dwarf-btf-type-tag-9.c | 41 +++ include/dwarf2.def | 4 + 15 files changed, 598 insertions(+), 27 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-decl-tag-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-decl-tag-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-decl-tag-3.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-10.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-3.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-4.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-5.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-6.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-7.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-8.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-9.c diff --git a/gcc/dwarf2out.cc b/gcc/dwarf2out.cc index 0bd8474bc370..a817c69c95af 100644 --- a/gcc/dwarf2out.cc +++ b/gcc/dwarf2out.cc @@ -3696,6 +3696,33 @@ static bool frame_pointer_fb_offset_valid; static vec base_types; +/* A cached btf_type_tag or btf_decl_tag user annotation. */ +struct GTY ((for_user)) annotation_node +{ + const char *name; + const char *value; + hashval_t hash; + dw_die_ref die; + struct annotation_node *next; +}; + +/* Hasher for btf_type_tag and btf_decl_tag annotation nodes. */ +struct annotation_node_hasher : ggc_ptr_hash +{ + typedef const struct annotation_node *compare_type; + + static hashval_t hash (struct annotation_node *); + static bool equal (const struct annotation_node *, + const struct annotation_node *); +}; + +/* A hash table of tag annotation nodes for btf_type_tag and btf_decl_tag C + attributes. DIEs for these user annotations may be reused if they are + structurally equivalent; this hash table is used to ensure the DIEs are + reused wherever possible. */ +static GTY (()) hash_table *btf_tag_htab; + + /* Flags to represent a set of attribute classes for attributes that represent a scalar value (bounds, pointers, ...). */ enum dw_scalar_form @@ -3840,7 +3867,7 @@ static void output_file_names (void); static bool is_base_type (tree); static dw_die_ref subrange_type_die (tree, tree, tree, tree, dw_die_ref); static int decl_quals (const_tree); -static dw_die_ref modified_type_die (tree, int, bool, dw_die_ref); +static dw_die_ref modified_type_die (tree, int, tree, bool, dw_die_ref); static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref); static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref); static unsigned int debugger_reg_number (const_rtx); @@ -13675,13 +13702,199 @@ long_double_as_float128 (tree type) return NULL_TREE; } +/* Hash function for struct annotation_node. The hash value is computed when + the annotation node is created based on the name, value and chain of any + further annotations on the same entity. */ + +hashval_t +annotation_node_hasher::hash (struct annotation_node *node) +{ + return node->hash; +} + +/* Return whether two annotation nodes represent the same annotation and + can therefore share a DIE. Beware of hash value collisions. */ + +bool +annotation_node_hasher::equal (const struct annotation_node *node1, + const struct annotation_node *node2) +{ + return (node1->hash == node2->hash + && (node1->name == node2->name + || !strcmp (node1->name, node2->name)) + && (node1->value == node2->value + || !strcmp (node1->value, node2->value)) + && node1->next == node2->next); +} + +/* Return an appropriate entry in the btf tag hash table for a given btf tag. + If a structurally equivalent tag (one with the same name, value, and + subsequent chain of further tags) has already been processed, then the + existing entry for that tag is returned and should be reused. + Otherwise, a new entry is added to the hash table and returned. */ + +static struct annotation_node * +hash_btf_tag (tree attr) +{ + if (attr == NULL_TREE || TREE_CODE (attr) != TREE_LIST) + return NULL; + + if (!btf_tag_htab) + btf_tag_htab = hash_table::create_ggc (10); + + const char * name = IDENTIFIER_POINTER (get_attribute_name (attr)); + const char * value = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr))); + tree chain = lookup_attribute (name, TREE_CHAIN (attr)); + + /* Hash for one tag depends on hash of next tag in the chain, because + the chain is part of structural equivalence. */ + struct annotation_node *chain_node = hash_btf_tag (chain); + gcc_checking_assert (chain == NULL_TREE || chain_node != NULL); + + /* Skip any non-btf-tag attributes that might be in the chain. */ + if (strcmp (name, "btf_type_tag") != 0 && strcmp (name, "btf_decl_tag") != 0) + return chain_node; + + /* Hash for a given tag is determined by the name, value, and chain of + further tags. */ + inchash::hash h; + h.merge_hash (htab_hash_string (name)); + h.merge_hash (htab_hash_string (value)); + h.merge_hash (chain_node ? chain_node->hash : 0); + + struct annotation_node node; + node.name = name; + node.value = value; + node.hash = h.end (); + node.next = chain_node; + + struct annotation_node **slot = btf_tag_htab->find_slot (&node, INSERT); + if (*slot == NULL) + { + /* Create new htab entry for this annotation. */ + struct annotation_node *new_slot + = ggc_cleared_alloc (); + new_slot->name = name; + new_slot->value = value; + new_slot->hash = node.hash; + new_slot->next = chain_node; + + *slot = new_slot; + return new_slot; + } + else + { + /* This node is already in the hash table. */ + return *slot; + } +} + +/* Generate (or reuse) DW_TAG_GNU_annotation DIEs representing the btf_type_tag + or btf_decl_tag user annotations in ATTR, and update DIE to refer to them + via DW_AT_GNU_annotation. If there are multiple type_tag or decl_tag + annotations in ATTR, they are all processed recursively by this function to + build a chain of annotation DIEs. + A single chain of annotation DIEs can be shared among all occurrences of + equivalent sets of attributes appearing on different types or declarations. + Return the first annotation DIE in the created (or reused) chain. */ + +static dw_die_ref +gen_btf_tag_dies (tree attr, dw_die_ref die) +{ + if (attr == NULL_TREE) + return die; + + const char * name = IDENTIFIER_POINTER (get_attribute_name (attr)); + const char * value = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr))); + + dw_die_ref tag_die, prev = NULL; + + /* Multiple annotations on the same item form a singly-linked list of + annotation DIEs; generate recursively backward from the end so we can + chain each created DIE to the next, which has already been created. */ + tree rest = lookup_attribute (name, TREE_CHAIN (attr)); + if (rest) + prev = gen_btf_tag_dies (rest, NULL); + + /* Calculate a hash value for the tag based on its structure, find the + existing entry for it (if any) in the hash table, or create a new entry + which can be reused by structurally-equivalent tags. */ + struct annotation_node *entry = hash_btf_tag (attr); + if (!entry) + return die; + + /* If the node already has an associated DIE, reuse it. + Otherwise, create the new annotation DIE, and associate it with + the hash table entry for future reuse. Any structurally-equivalent + tag we process later will find and share the same DIE. */ + if (entry->die) + tag_die = entry->die; + else + { + tag_die = new_die (DW_TAG_GNU_annotation, comp_unit_die (), NULL); + add_name_attribute (tag_die, name); + add_AT_string (tag_die, DW_AT_const_value, value); + if (prev) + add_AT_die_ref (tag_die, DW_AT_GNU_annotation, prev); + + entry->die = tag_die; + } + + if (die) + { + /* Add AT_GNU_annotation referring to the annotation DIE. + It may have already been added, some global declarations are processed + twice, but if so it must be the same or we have a bug. */ + dw_die_ref existing = get_AT_ref (die, DW_AT_GNU_annotation); + if (existing) + gcc_checking_assert (existing == tag_die); + else + add_AT_die_ref (die, DW_AT_GNU_annotation, tag_die); + } + + return tag_die; +} + +/* Generate (or reuse) annotation DIEs representing the type_tags on T, if + any, and update DIE to refer to them as appropriate. */ + +static void +maybe_gen_btf_type_tag_dies (tree t, dw_die_ref target) +{ + if (t == NULL_TREE || !TYPE_P (t) || !target) + return; + + tree attr = lookup_attribute ("btf_type_tag", TYPE_ATTRIBUTES (t)); + if (attr == NULL_TREE) + return; + + gen_btf_tag_dies (attr, target); +} + +/* Generate (or reuse) annotation DIEs representing any decl_tags in ATTR that + apply to TARGET. */ + +static void +maybe_gen_btf_decl_tag_dies (tree t, dw_die_ref target) +{ + if (t == NULL_TREE || !DECL_P (t) || !target) + return; + + tree attr = lookup_attribute ("btf_decl_tag", DECL_ATTRIBUTES (t)); + if (attr == NULL_TREE) + return; + + gen_btf_tag_dies (attr, target); +} + /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging entry that chains the modifiers specified by CV_QUALS in front of the - given type. REVERSE is true if the type is to be interpreted in the - reverse storage order wrt the target order. */ + given type. Also handle any type attributes in TYPE_ATTRS which have + a representation in DWARF. REVERSE is true if the type is to be interpreted + in the reverse storage order wrt the target order. */ static dw_die_ref -modified_type_die (tree type, int cv_quals, bool reverse, +modified_type_die (tree type, int cv_quals, tree type_attrs, bool reverse, dw_die_ref context_die) { enum tree_code code = TREE_CODE (type); @@ -13690,6 +13903,7 @@ modified_type_die (tree type, int cv_quals, bool reverse, tree item_type = NULL; tree qualified_type; tree name, low, high; + tree btf_tags; dw_die_ref mod_scope; struct array_descr_info info; /* Only these cv-qualifiers are currently handled. */ @@ -13709,7 +13923,8 @@ modified_type_die (tree type, int cv_quals, bool reverse, tree debug_type = lang_hooks.types.get_debug_type (type); if (debug_type != NULL_TREE && debug_type != type) - return modified_type_die (debug_type, cv_quals, reverse, context_die); + return modified_type_die (debug_type, cv_quals, type_attrs, reverse, + context_die); } cv_quals &= cv_qual_mask; @@ -13786,8 +14001,8 @@ modified_type_die (tree type, int cv_quals, bool reverse, type DIE (see gen_typedef_die), so fall back on the ultimate abstract origin instead. */ if (origin != NULL && origin != name) - return modified_type_die (TREE_TYPE (origin), cv_quals, reverse, - context_die); + return modified_type_die (TREE_TYPE (origin), cv_quals, type_attrs, + reverse, context_die); /* For a named type, use the typedef. */ gen_type_die (qualified_type, context_die); @@ -13799,10 +14014,36 @@ modified_type_die (tree type, int cv_quals, bool reverse, dquals &= cv_qual_mask; if ((dquals & ~cv_quals) != TYPE_UNQUALIFIED || (cv_quals == dquals && DECL_ORIGINAL_TYPE (name) != type)) - /* cv-unqualified version of named type. Just use - the unnamed type to which it refers. */ - return modified_type_die (DECL_ORIGINAL_TYPE (name), cv_quals, - reverse, context_die); + { + tree tags = lookup_attribute ("btf_type_tag", type_attrs); + tree dtags = lookup_attribute ("btf_type_tag", + TYPE_ATTRIBUTES (dtype)); + if (tags && !attribute_list_equal (tags, dtags)) + { + /* Use of a typedef with additional btf_type_tags. + Create a new typedef DIE to which we can attach the + additional type_tag DIEs without disturbing other users of + the underlying typedef. */ + dw_die_ref mod_die + = modified_type_die (dtype, cv_quals, NULL_TREE, reverse, + context_die); + + mod_die = clone_die (mod_die); + add_child_die (comp_unit_die (), mod_die); + if (!lookup_type_die (type)) + equate_type_number_to_die (type, mod_die); + + /* Now generate the type_tag DIEs only for the new + type_tags appearing in the use of the typedef, and + attach them to the cloned typedef DIE. */ + gen_btf_tag_dies (tags, mod_die); + return mod_die; + } + /* cv-unqualified version of named type. Just use + the unnamed type to which it refers. */ + return modified_type_die (DECL_ORIGINAL_TYPE (name), cv_quals, + type_attrs, reverse, context_die); + } /* Else cv-qualified version of named type; fall through. */ } } @@ -13836,7 +14077,8 @@ modified_type_die (tree type, int cv_quals, bool reverse, break; } } - mod_type_die = modified_type_die (type, sub_quals, reverse, context_die); + mod_type_die = modified_type_die (type, sub_quals, type_attrs, + reverse, context_die); if (mod_scope && mod_type_die && mod_type_die->die_parent == mod_scope) { /* As not all intermediate qualified DIEs have corresponding @@ -13903,6 +14145,16 @@ modified_type_die (tree type, int cv_quals, bool reverse, first_quals |= dwarf_qual_info[i].q; } } + else if (type_attrs + && (btf_tags = lookup_attribute ("btf_type_tag", type_attrs))) + { + /* First create a DIE for the type without any type_tag attribute. + Then generate TAG_GNU_annotation DIEs for the type_tags. */ + dw_die_ref mod_die = modified_type_die (type, cv_quals, NULL_TREE, + reverse, context_die); + gen_btf_tag_dies (btf_tags, mod_die); + return mod_die; + } else if (code == POINTER_TYPE || code == REFERENCE_TYPE) { dwarf_tag tag = DW_TAG_pointer_type; @@ -13967,9 +14219,12 @@ modified_type_die (tree type, int cv_quals, bool reverse, { dw_die_ref other_die; if (TYPE_NAME (other_type)) - other_die - = modified_type_die (other_type, TYPE_UNQUALIFIED, reverse, - context_die); + { + other_die + = modified_type_die (other_type, TYPE_UNQUALIFIED, + TYPE_ATTRIBUTES (other_type), + reverse, context_die); + } else { other_die = base_type_die (type, reverse); @@ -13987,8 +14242,8 @@ modified_type_die (tree type, int cv_quals, bool reverse, /* The DIE with DW_AT_endianity is placed right after the naked DIE. */ if (reverse_type) { - dw_die_ref after_die - = modified_type_die (type, cv_quals, false, context_die); + dw_die_ref after_die = modified_type_die (type, cv_quals, type_attrs, + false, context_die); add_child_die_after (mod_scope, mod_type_die, after_die); } else @@ -14001,8 +14256,8 @@ modified_type_die (tree type, int cv_quals, bool reverse, /* The DIE with DW_AT_endianity is placed right after the naked DIE. */ if (reverse_type) { - dw_die_ref after_die - = modified_type_die (type, cv_quals, false, context_die); + dw_die_ref after_die = modified_type_die (type, cv_quals, type_attrs, + false, context_die); gen_type_die (type, context_die, true); gcc_assert (after_die->die_sib && get_AT_unsigned (after_die->die_sib, DW_AT_endianity)); @@ -14092,8 +14347,8 @@ modified_type_die (tree type, int cv_quals, bool reverse, types are possible in Ada. */ sub_die = modified_type_die (item_type, TYPE_QUALS_NO_ADDR_SPACE (item_type), - reverse, - context_die); + TYPE_ATTRIBUTES (item_type), + reverse, context_die); if (sub_die != NULL) add_AT_die_ref (mod_type_die, DW_AT_type, sub_die); @@ -15237,8 +15492,8 @@ base_type_for_mode (machine_mode mode, bool unsignedp) } type_die = lookup_type_die (type); if (!type_die) - type_die = modified_type_die (type, TYPE_UNQUALIFIED, false, - comp_unit_die ()); + type_die = modified_type_die (type, TYPE_UNQUALIFIED, NULL_TREE, + false, comp_unit_die ()); if (type_die == NULL || type_die->die_tag != DW_TAG_base_type) return NULL; return type_die; @@ -22508,6 +22763,7 @@ add_type_attribute (dw_die_ref object_die, tree type, int cv_quals, type_die = modified_type_die (type, cv_quals | TYPE_QUALS (type), + TYPE_ATTRIBUTES (type), reverse, context_die); @@ -22786,6 +23042,7 @@ gen_array_type_die (tree type, dw_die_ref context_die) add_pubtype (type, array_die); add_alignment_attribute (array_die, type); + maybe_gen_btf_type_tag_dies (type, array_die); } /* This routine generates DIE for array with hidden descriptor, details @@ -23156,6 +23413,7 @@ gen_formal_parameter_die (tree node, tree origin, bool emit_name_p, else { add_child_die (context_die, parm_die); + maybe_gen_btf_decl_tag_dies (node_or_origin, parm_die); return parm_die; } } @@ -23224,6 +23482,8 @@ gen_formal_parameter_die (tree node, tree origin, bool emit_name_p, gcc_unreachable (); } + maybe_gen_btf_decl_tag_dies (node_or_origin, parm_die); + return parm_die; } @@ -24577,10 +24837,12 @@ override_type_for_decl_p (tree decl, dw_die_ref old_die, else cv_quals = decl_quals (decl); - dw_die_ref type_die = modified_type_die (type, - cv_quals | TYPE_QUALS (type), - false, - context_die); + dw_die_ref type_die + = modified_type_die (type, + cv_quals | TYPE_QUALS (type), + TYPE_ATTRIBUTES (type), + false, + context_die); dw_die_ref old_type_die = get_AT_ref (old_die, DW_AT_type); @@ -26448,6 +26710,10 @@ gen_tagged_type_die (tree type, else gen_struct_or_union_type_die (type, context_die, usage); + dw_die_ref die = lookup_type_die (type); + if (die) + maybe_gen_btf_type_tag_dies (type, die); + /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix it up if it is ever completed. gen_*_type_die will set it for us when appropriate. */ @@ -27081,6 +27347,7 @@ force_type_die (tree type) dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type)); type_die = modified_type_die (type, TYPE_QUALS_NO_ADDR_SPACE (type), + TYPE_ATTRIBUTES (type), false, context_die); gcc_assert (type_die); } @@ -27458,6 +27725,9 @@ gen_decl_die (tree decl, tree origin, struct vlr_context *ctx, break; } + maybe_gen_btf_decl_tag_dies (decl_or_origin, + lookup_decl_die (decl_or_origin)); + return NULL; } @@ -32504,6 +32774,9 @@ dwarf2out_finish (const char *filename) /* Flush out any latecomers to the limbo party. */ flush_limbo_die_list (); + if (btf_tag_htab) + btf_tag_htab->empty (); + if (inline_entry_data_table) gcc_assert (inline_entry_data_table->is_empty ()); @@ -33574,6 +33847,7 @@ dwarf2out_cc_finalize (void) switch_text_ranges = NULL; switch_cold_ranges = NULL; current_unit_personality = NULL; + btf_tag_htab = NULL; early_dwarf = false; early_dwarf_finished = false; diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-decl-tag-1.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-decl-tag-1.c new file mode 100644 index 000000000000..a1c1676a7ba3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-decl-tag-1.c @@ -0,0 +1,11 @@ +/* Test simple generation of DW_TAG_GNU_annotation DIE for + btf_decl_tag attribute. */ +/* { dg-do compile } */ +/* { dg-options "-gdwarf -dA" } */ + +int *foo __attribute__((btf_decl_tag ("my_foo"))); + +/* { dg-final { scan-assembler-times "DIE \\(\[^\n\]*\\) DW_TAG_GNU_annotation" 1 } } */ +/* { dg-final { scan-assembler-times " DW_AT_name: \"btf_decl_tag\"" 1 } } */ +/* { dg-final { scan-assembler-times " DW_AT_const_value: \"my_foo\"" 1 } } */ +/* { dg-final { scan-assembler-times " DW_AT_GNU_annotation" 1 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-decl-tag-2.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-decl-tag-2.c new file mode 100644 index 000000000000..00485c000b5e --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-decl-tag-2.c @@ -0,0 +1,25 @@ +/* Test dwarf generation for btf_decl_tag on struct and union members. */ +/* { dg-do compile } */ +/* { dg-options "-gdwarf -dA" } */ + +#define __tag1 __attribute__((btf_decl_tag ("decl1"))) +#define __tag2 __attribute__((btf_decl_tag ("decl2"))) + +union U { + int i __tag1; + unsigned char ub[4]; +}; + +struct S { + union U u; + int b __tag2; + char *z __tag1; +}; + +struct S my_s __tag1 __tag2; + +/* We must have two occurrences of one of the two annotation DIEs due to + the different attribute sets between declarations above. */ +/* { dg-final { scan-assembler-times "DIE \\(\[^\n\]*\\) DW_TAG_GNU_annotation" 3 } } */ +/* { dg-final { scan-assembler-times " DW_AT_name: \"btf_decl_tag\"" 3 } } */ +/* { dg-final { scan-assembler-times " DW_AT_GNU_annotation" 5 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-decl-tag-3.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-decl-tag-3.c new file mode 100644 index 000000000000..f3fad8fe3d28 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-decl-tag-3.c @@ -0,0 +1,21 @@ +/* Test dwarf generation for btf_decl_tag on functions and function args. */ +/* { dg-do compile } */ +/* { dg-options "-gdwarf -dA" } */ + +#define __tag1 __attribute__((btf_decl_tag ("decl1"))) +#define __tag2 __attribute__((btf_decl_tag ("decl2"))) + +int __tag1 __tag2 func (int arg_a __tag1, int arg_b __tag2) +{ + return arg_a * arg_b; +} + +int foo (int x) { + return func (x, x + 1); +} + +/* In this case one of the decl tag DIEs must be duplicated due to differing + DW_AT_GNU_annotation chain between the three uses. */ +/* { dg-final { scan-assembler-times "DIE \\(\[^\n\]*\\) DW_TAG_GNU_annotation" 3 } } */ +/* { dg-final { scan-assembler-times " DW_AT_name: \"btf_decl_tag\"" 3 } } */ +/* { dg-final { scan-assembler-times " DW_AT_GNU_annotation" 4 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-1.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-1.c new file mode 100644 index 000000000000..772aab09cfb7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-1.c @@ -0,0 +1,10 @@ +/* Test simple generation for btf_type_tag attribute. */ +/* { dg-do compile } */ +/* { dg-options "-gdwarf -dA" } */ + +int * __attribute__((btf_type_tag("__user"))) ptr; + +/* { dg-final { scan-assembler-times "DIE \\(\[^\n\]*\\) DW_TAG_GNU_annotation" 1 } } */ +/* { dg-final { scan-assembler-times " DW_AT_name: \"btf_type_tag\"" 1 } } */ +/* { dg-final { scan-assembler-times " DW_AT_const_value: \"__user\"" 1 } } */ +/* { dg-final { scan-assembler-times " DW_AT_GNU_annotation" 1 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-10.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-10.c new file mode 100644 index 000000000000..3ecd79f092fc --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-10.c @@ -0,0 +1,20 @@ +/* Test btf_type_tag and btf_decl_tag on a function. + Here the decl_tag applies to the function, and the type_tag applies + to the return type. */ +/* { dg-do compile } */ +/* { dg-options "-gdwarf -dA" } */ + +int * __attribute__((btf_type_tag ("A"))) +__attribute__((btf_decl_tag ("decl"))) +foo (int *x, int *y) +{ + if (x && y && *x > *y) + return x; + return y; +} + +/* Ideally, verify that AT_GNU_annotation in the subprogram DIE refers to + the decl_tag annotation DIE, and the AT_GNU_annotation in the return + type refers to the type_tag... */ +/* { dg-final { scan-assembler-times " DW_AT_name: \"btf_type_tag\"" 1 } } */ +/* { dg-final { scan-assembler-times " DW_AT_name: \"btf_decl_tag\"" 1 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-2.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-2.c new file mode 100644 index 000000000000..9c44e0ee0b99 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-2.c @@ -0,0 +1,31 @@ +/* Test that DW_TAG_GNU_annotation DIEs for attribute btf_type_tag are shared + where possible. */ +/* { dg-do compile } */ +/* { dg-options "-gdwarf -dA" } */ + +#define __tag1 __attribute__((btf_type_tag("tag1"))) +#define __tag2 __attribute__((btf_type_tag("tag2"))) + +int __tag1 foo; +char * __tag1 __tag2 bar; + +struct S +{ + unsigned char bytes[8]; + unsigned long __tag1 t; + void *ptr; +}; + +struct S * __tag1 __tag2 my_S; + +/* Only 2 DW_TAG_GNU_annotation DIEs should be generated, one each for "tag1" + and "tag2", and they should be reused. */ +/* { dg-final { scan-assembler-times "DIE \\(\[^\n\]*\\) DW_TAG_GNU_annotation" 2 } } */ +/* { dg-final { scan-assembler-times " DW_AT_name: \"btf_type_tag\"" 2 } } */ +/* { dg-final { scan-assembler-times " DW_AT_const_value: \"tag1\"" 1 } } */ +/* { dg-final { scan-assembler-times " DW_AT_const_value: \"tag2\"" 1 } } */ + +/* Each attribute-ed type shall refer via DW_AT_GNU_annotation to the + appropriate annotation DIE, including the annotation DIE for "tag2" which + is always chained to the DIE for "tag1" in this construction. */ +/* { dg-final { scan-assembler-times " DW_AT_GNU_annotation" 5 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-3.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-3.c new file mode 100644 index 000000000000..d02144c8004e --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-3.c @@ -0,0 +1,15 @@ +/* Test dwarf generation for btf_type_tag with cv-quals and typedefs. */ +/* { dg-do compile } */ +/* { dg-options "-gdwarf -dA" } */ + +#define __tag1 __attribute__((btf_type_tag ("tag1"))) +#define __tag2 __attribute__((btf_type_tag ("tag2"))) + +typedef const int foo; +typedef int __tag1 bar; + +foo __tag2 x; +const bar y; + +/* { dg-final { scan-assembler-times "DIE \\(\[^\n\]*\\) DW_TAG_GNU_annotation" 2 } } */ +/* { dg-final { scan-assembler-times " DW_AT_name: \"btf_type_tag\"" 2 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-4.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-4.c new file mode 100644 index 000000000000..7205ef2c9a34 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-4.c @@ -0,0 +1,34 @@ +/* Test generating annotation DIEs for struct/union/enum types. */ +/* { dg-do compile } */ +/* { dg-options "-gdwarf -dA" } */ + +enum E +{ + ONE, + TWO +} __attribute__((btf_type_tag("foo"))); + +enum E some_e; + +struct S +{ + int i; + char c; +} __attribute__((btf_type_tag("foo"))); + +typedef struct S S1; +S1 plain_s1; +const S1 const_s1; + +union U +{ + int x; + char y; +} __attribute__((btf_type_tag("foo"))); + +volatile union U volatile_u; + +/* One annotation DIE may be shared by all three annotated types. */ +/* { dg-final { scan-assembler-times "DIE \\(\[^\n\]*\\) DW_TAG_GNU_annotation" 1 } } */ +/* { dg-final { scan-assembler-times " DW_AT_name: \"btf_type_tag\"" 1 } } */ +/* { dg-final { scan-assembler-times " DW_AT_GNU_annotation" 3 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-5.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-5.c new file mode 100644 index 000000000000..1a6b29f99a1a --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-5.c @@ -0,0 +1,10 @@ +/* Test generation for btf_type_tag attribute on array type. */ +/* { dg-do compile } */ +/* { dg-options "-gdwarf -dA" } */ + +int arr[8] __attribute__((btf_type_tag("tagged_arr"))); + +/* { dg-final { scan-assembler-times "DIE \\(\[^\n\]*\\) DW_TAG_GNU_annotation" 1 } } */ +/* { dg-final { scan-assembler-times " DW_AT_name: \"btf_type_tag\"" 1 } } */ +/* { dg-final { scan-assembler-times " DW_AT_const_value: \"tagged_arr\"" 1 } } */ +/* { dg-final { scan-assembler-times " DW_AT_GNU_annotation" 1 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-6.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-6.c new file mode 100644 index 000000000000..11fc9036b8a2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-6.c @@ -0,0 +1,27 @@ +/* Test generation for btf_type_tag attribute when applied to struct/union + types after definition. Attributes applied after definition will be + ignored, so DW_TAG_GNU_annotations shall be generated. */ +/* { dg-do compile } */ +/* { dg-options "-gdwarf -dA" } */ + +struct foo +{ + int a; + char c; +}; + +struct foo __attribute__((btf_type_tag ("tag1"))) x; /* { dg-warning "ignoring attribute" } */ +typedef const struct foo c_foo; +c_foo __attribute__((btf_type_tag ("tag2"))) y; /* { dg-warning "ignoring attribute" } */ + +union bar +{ + int s; + unsigned int u; +}; + +typedef union bar __attribute__((btf_type_tag("tag3"))) tag_bar; /* { dg-warning "ignoring attribute" } */ +const tag_bar z; + +/* { dg-final { scan-assembler-not "DIE \\(\[^\n\]*\\) DW_TAG_GNU_annotation" } } */ +/* { dg-final { scan-assembler-not " DW_AT_GNU_annotation" } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-7.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-7.c new file mode 100644 index 000000000000..5b3d45d5e7a9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-7.c @@ -0,0 +1,25 @@ +/* Test generation for btf_type_tag attribute for pointer typedef with + tags appearing on both the typedef and the usage of the tyepdef. */ +/* { dg-do compile } */ +/* { dg-options "-gdwarf -dA" } */ + +#define __tag1 __attribute__((btf_type_tag ("tag1"))) +#define __tag2 __attribute__((btf_type_tag ("tag2"))) + +typedef int __tag1 foo; + +foo a; +foo __tag2 b; + +/* { dg-final { scan-assembler-times "DIE \\(\[^\n\]*\\) DW_TAG_GNU_annotation" 2 } } */ +/* { dg-final { scan-assembler-times " DW_AT_name: \"btf_type_tag\"" 2 } } */ + +/* Due to an ambiguity in the tree attribute list, it is not currently possible + to distinguish with certaianty whether "tag1" appears to the left or right + of "foo" in the declaration of "b" above. This means that the DIE for + "tag1" is also referred in the AT_GNU_annotation chain of the duplicate + typedef DIE annotated wtih "tag2", for a total of 3 AT_GNU_annotations. */ +/* { dg-final { scan-assembler-times " DW_AT_GNU_annotation" 3 } } */ + +/* A duplicate typedef die must be created for the tagged use in 'b'. */ +/* { dg-final { scan-assembler-times "DIE \\(\[^\n\]*\\) DW_TAG_typedef" 2 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-8.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-8.c new file mode 100644 index 000000000000..607956adbf62 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-8.c @@ -0,0 +1,23 @@ +/* Test that annotation DIEs are copied as needed to the + debug_types section (DW_UT_type for dwarf 5). */ +/* { dg-do compile } */ +/* { dg-options "-gdwarf-5 -dA -fdebug-types-section" } */ + +int __attribute__((btf_type_tag ("A"))) foo; + +struct S +{ + int x; + char * __attribute__((btf_type_tag ("B"))) c; +} __attribute__((btf_type_tag ("A"))) some_struct; + +/* The struct type is placed in DW_UT_type, and the types of both members and + both tags are copied there too. Since the tags and base types also exist in + the main compile unit, we have 4 annotation DIEs total. But since they + are only referenced by 'foo' and by the struct members, there are only + 3 AT_GNU_annotation. The DIE for tag "B" in the main compile unit is not + referred to by anything. */ + +/* { dg-final { scan-assembler-times " DW_UT_type" 1 } } */ +/* { dg-final { scan-assembler-times "DIE \\(\[^\n\]*\\) DW_TAG_GNU_annotation" 4 } } */ +/* { dg-final { scan-assembler-times " DW_AT_GNU_annotation" 3 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-9.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-9.c new file mode 100644 index 000000000000..e5db652fd40d --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-btf-type-tag-9.c @@ -0,0 +1,41 @@ +/* Stress test for several btf_type_tag on the same type and specified + in various ways. */ +/* { dg-do compile } */ +/* { dg-options "-std=c23 -gdwarf -dA" } */ + +typedef int __attribute__((btf_type_tag ("A"), btf_type_tag ("B"))) myint; + +myint x; + +struct S +{ + myint * __attribute__((btf_type_tag ("A"))) p; + unsigned long __attribute__((btf_type_tag ("A"))) + __attribute__((btf_type_tag ("B"))) + __attribute__((btf_type_tag ("C"))) l; +}; + +char * [[gnu::btf_type_tag ("B"), gnu::btf_type_tag ("C")]] str; + +unsigned long [[gnu::btf_type_tag ("B")]] +do_thing (struct S * __attribute__((btf_type_tag ("C"), + btf_type_tag ("B"), + btf_type_tag ("A"))) arg) +{ + return arg->l * 2; +} + +/* Expect the following chains of annotations off of the types: + 1. int |-> b -> a -> * + 2. myint* |-> a -> * + 3. unsigned long |-> c -> b -> a -> * + 4. char* |-> c -> b -> * + 4. unsigned long |-> b -> * + 5. struct S* |-> a -> b -> c -> * + + a and b are reused in 1-3 + new c,b created in 4, reused in 5 + new a,b,c created in 5 (not yet deduplicated). */ + +/* { dg-final { scan-assembler-times "DIE \\(\[^\n\]*\\) DW_TAG_GNU_annotation" 8 } } */ +/* { dg-final { scan-assembler-times " DW_AT_GNU_annotation" 11 } } */ diff --git a/include/dwarf2.def b/include/dwarf2.def index 989f078041d4..37b8d6b99d02 100644 --- a/include/dwarf2.def +++ b/include/dwarf2.def @@ -174,6 +174,9 @@ DW_TAG (DW_TAG_GNU_formal_parameter_pack, 0x4108) are properly part of DWARF 5. */ DW_TAG (DW_TAG_GNU_call_site, 0x4109) DW_TAG (DW_TAG_GNU_call_site_parameter, 0x410a) + +DW_TAG (DW_TAG_GNU_annotation, 0x6001) + /* Extensions for UPC. See: http://dwarfstd.org/doc/DWARF4.pdf. */ DW_TAG (DW_TAG_upc_shared_type, 0x8765) DW_TAG (DW_TAG_upc_strict_type, 0x8766) @@ -456,6 +459,7 @@ DW_AT (DW_AT_GNU_pubtypes, 0x2135) DW_AT (DW_AT_GNU_discriminator, 0x2136) DW_AT (DW_AT_GNU_locviews, 0x2137) DW_AT (DW_AT_GNU_entry_view, 0x2138) +DW_AT (DW_AT_GNU_annotation, 0x2139) /* VMS extensions. */ DW_AT (DW_AT_VMS_rtnbeg_pd_address, 0x2201) /* GNAT extensions. */ From 9c862a593bcaa21bfca32c25bc01081bc33227a2 Mon Sep 17 00:00:00 2001 From: David Faust Date: Wed, 5 Feb 2025 10:40:12 -0800 Subject: [PATCH 198/216] ctf: translate annotation DIEs to internal ctf Translate DW_TAG_GNU_annotation DIEs created for C attributes btf_decl_tag and btf_type_tag into an in-memory representation in the CTF/BTF container. They will be output in BTF as BTF_KIND_DECL_TAG and BTF_KIND_TYPE_TAG records. The new CTF kinds used to represent these annotations, CTF_K_DECL_TAG and CTF_K_TYPE_TAG, are expected to be formalized in the next version of the CTF specification. For now they only exist in memory as a translation step to BTF, and are not emitted when generating CTF information. gcc/ * ctfc.cc (ctf_dtu_d_union_selector): Handle CTF_K_DECL_TAG and CTF_K_TYPE_TAG. (ctf_add_type_tag, ctf_add_decl_tag): New. (ctf_add_variable): Return the new ctf_dvdef_ref rather than zero. (new_ctf_container): Initialize new members. (ctfc_delete_container): Deallocate new members. * ctfc.h (ctf_dvdef, ctf_dvdef_t, ctf_dvdef_ref): Move forward declarations earlier in file. (ctf_decl_tag_t): New typedef. (ctf_dtdef): Add ctf_decl_tag_t member to dtd_u union. (ctf_dtu_d_union_enum): Add new CTF_DTU_D_TAG enumerator. (ctf_container): Add ctfc_tags vector and ctfc_type_tags_map hash_map members. (ctf_add_type_tag, ctf_add_decl_tag): New function protos. (ctf_add_variable): Change prototype return type to ctf_dvdef_ref. * dwarf2ctf.cc (gen_ctf_type_tags, gen_ctf_decl_tags) (gen_ctf_decl_tags_for_var): New static functions. (gen_ctf_pointer_type): Handle type tags. (gen_ctf_sou_type): Handle decl tags. (gen_ctf_function_type): Likewise. (gen_ctf_variable): Likewise. (gen_ctf_function): Likewise. (gen_ctf_type): Handle TAG_GNU_annotation DIEs. gcc/testsuite/ * gcc.dg/debug/ctf/ctf-decl-tag-1.c: New test. * gcc.dg/debug/ctf/ctf-type-tag-1.c: New test. include/ * ctf.h (CTF_K_DECL_TAG, CTF_K_TYPE_TAG): New defines. --- gcc/ctfc.cc | 80 ++++++++++- gcc/ctfc.h | 43 +++++- gcc/dwarf2ctf.cc | 135 +++++++++++++++++- .../gcc.dg/debug/ctf/ctf-decl-tag-1.c | 31 ++++ .../gcc.dg/debug/ctf/ctf-type-tag-1.c | 19 +++ include/ctf.h | 4 + 6 files changed, 299 insertions(+), 13 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-decl-tag-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-type-tag-1.c diff --git a/gcc/ctfc.cc b/gcc/ctfc.cc index 221e62e8f45d..3fae414bf53e 100644 --- a/gcc/ctfc.cc +++ b/gcc/ctfc.cc @@ -107,6 +107,9 @@ ctf_dtu_d_union_selector (ctf_dtdef_ref ctftype) return CTF_DTU_D_ARGUMENTS; case CTF_K_SLICE: return CTF_DTU_D_SLICE; + case CTF_K_DECL_TAG: + case CTF_K_TYPE_TAG: + return CTF_DTU_D_TAG; default: /* The largest member as default. */ return CTF_DTU_D_ARRAY; @@ -445,6 +448,68 @@ ctf_add_reftype (ctf_container_ref ctfc, uint32_t flag, ctf_dtdef_ref ref, return dtd; } +ctf_dtdef_ref +ctf_add_type_tag (ctf_container_ref ctfc, uint32_t flag, const char *value, + ctf_dtdef_ref ref_dtd) +{ + ctf_dtdef_ref dtd; + /* Create a DTD for the tag, but do not place it in the regular types list; + CTF format does not (yet) encode tags. */ + dtd = ggc_cleared_alloc (); + + dtd->dtd_name = ctf_add_string (ctfc, value, &(dtd->dtd_data.ctti_name), + CTF_AUX_STRTAB); + /* A single DW_TAG_GNU_annotation DIE may be referenced by multiple DIEs, + e.g. when multiple distinct types specify the same type tag. We will + synthesize multiple CTF DTD records in that case, so we cannot tie them + all to the same key (the DW_TAG_GNU_annotation DIE) in ctfc_types. */ + dtd->dtd_key = NULL; + dtd->ref_type = ref_dtd; + dtd->dtd_data.ctti_info = CTF_TYPE_INFO (CTF_K_TYPE_TAG, flag, 0); + dtd->dtd_u.dtu_tag.ref_var = NULL; /* Not used for type tags. */ + dtd->dtd_u.dtu_tag.component_idx = 0; /* Not used for type tags. */ + + /* Insert tag directly into the tag list. Type ID will be assigned later. */ + vec_safe_push (ctfc->ctfc_tags, dtd); + + /* Keep ctfc_aux_strlen updated. */ + if ((value != NULL) && strcmp (value, "")) + ctfc->ctfc_aux_strlen += strlen (value) + 1; + + return dtd; +} + +ctf_dtdef_ref +ctf_add_decl_tag (ctf_container_ref ctfc, uint32_t flag, const char *value, + ctf_dtdef_ref ref_dtd, uint32_t comp_idx) +{ + ctf_dtdef_ref dtd; + /* Create a DTD for the tag, but do not place it in the regular types list; + ctf format does not (yet) encode tags. */ + dtd = ggc_cleared_alloc (); + + dtd->dtd_name = ctf_add_string (ctfc, value, &(dtd->dtd_data.ctti_name), + CTF_AUX_STRTAB); + /* A single DW_TAG_GNU_annotation DIE may be referenced by multiple DIEs, + e.g. when multiple distinct declarations specify the same decl tag. + We will synthesize multiple CTF DTD records in that case, so we cannot tie + them all to the same key (the DW_TAG_GNU_annotation DIE) in ctfc_types. */ + dtd->dtd_key = NULL; + dtd->ref_type = ref_dtd; + dtd->dtd_data.ctti_info = CTF_TYPE_INFO (CTF_K_DECL_TAG, flag, 0); + dtd->dtd_u.dtu_tag.ref_var = NULL; + dtd->dtd_u.dtu_tag.component_idx = comp_idx; + + /* Insert tag directly into the tag list. Type ID will be assigned later. */ + vec_safe_push (ctfc->ctfc_tags, dtd); + + /* Keep ctfc_aux_strlen updated. */ + if ((value != NULL) && strcmp (value, "")) + ctfc->ctfc_aux_strlen += strlen (value) + 1; + + return dtd; +} + ctf_dtdef_ref ctf_add_forward (ctf_container_ref ctfc, uint32_t flag, const char * name, uint32_t kind, dw_die_ref die) @@ -691,12 +756,12 @@ ctf_add_member_offset (ctf_container_ref ctfc, dw_die_ref sou, return 0; } -int +ctf_dvdef_ref ctf_add_variable (ctf_container_ref ctfc, const char * name, ctf_dtdef_ref ref, dw_die_ref die, unsigned int external_vis, dw_die_ref die_var_decl) { - ctf_dvdef_ref dvd, dvd_ignore; + ctf_dvdef_ref dvd = NULL, dvd_ignore; gcc_assert (name); @@ -732,7 +797,7 @@ ctf_add_variable (ctf_container_ref ctfc, const char * name, ctf_dtdef_ref ref, ctfc->ctfc_strlen += strlen (name) + 1; } - return 0; + return dvd; } int @@ -949,6 +1014,10 @@ new_ctf_container (void) tu_ctfc->ctfc_ignore_vars = hash_table::create_ggc (10); + vec_alloc (tu_ctfc->ctfc_tags, 100); + tu_ctfc->ctfc_type_tags_map + = hash_map::create_ggc (100); + return tu_ctfc; } @@ -1003,6 +1072,11 @@ ctfc_delete_container (ctf_container_ref ctfc) ctfc->ctfc_ignore_vars->empty (); ctfc->ctfc_ignore_vars = NULL; + ctfc->ctfc_tags = NULL; + + ctfc->ctfc_type_tags_map->empty (); + ctfc->ctfc_type_tags_map = NULL; + ctfc_delete_strtab (&ctfc->ctfc_strtable); ctfc_delete_strtab (&ctfc->ctfc_aux_strtable); if (ctfc->ctfc_vars_list) diff --git a/gcc/ctfc.h b/gcc/ctfc.h index 26f35f0ac6f9..a195804daa50 100644 --- a/gcc/ctfc.h +++ b/gcc/ctfc.h @@ -52,6 +52,10 @@ struct ctf_dtdef; typedef struct ctf_dtdef ctf_dtdef_t; typedef ctf_dtdef_t * ctf_dtdef_ref; +struct ctf_dvdef; +typedef struct ctf_dvdef ctf_dvdef_t; +typedef ctf_dvdef_t * ctf_dvdef_ref; + /* CTF string table element (list node). */ typedef struct GTY ((chain_next ("%h.cts_next"))) ctf_string @@ -155,6 +159,16 @@ typedef struct GTY (()) ctf_func_arg #define ctf_farg_list_next(elem) ((ctf_func_arg_t *)((elem)->farg_next)) +/* Declaration Tag. + May be used to annotate struct/union members, variable declarations, + function declarations, and function arguments. */ + +typedef struct GTY (()) ctf_decl_tag +{ + uint32_t component_idx; /* Index of component to which tag applies. */ + ctf_dvdef_ref ref_var; /* Non-null iff this tag applies to a variable. */ +} ctf_decl_tag_t; + /* Type definition for CTF generation. */ struct GTY ((for_user)) ctf_dtdef @@ -184,6 +198,8 @@ struct GTY ((for_user)) ctf_dtdef ctf_func_arg_t * GTY ((tag ("CTF_DTU_D_ARGUMENTS"))) dtu_argv; /* slice. */ ctf_sliceinfo_t GTY ((tag ("CTF_DTU_D_SLICE"))) dtu_slice; + /* decl tag. */ + ctf_decl_tag_t GTY ((tag ("CTF_DTU_D_TAG"))) dtu_tag; } dtd_u; }; @@ -201,9 +217,6 @@ struct GTY ((for_user)) ctf_dvdef ctf_id_t dvd_id; /* ID of this variable. Only used for BTF. */ }; -typedef struct ctf_dvdef ctf_dvdef_t; -typedef ctf_dvdef_t * ctf_dvdef_ref; - /* Location information for CTF Types and CTF Variables. */ typedef struct GTY (()) ctf_srcloc @@ -222,7 +235,8 @@ enum ctf_dtu_d_union_enum { CTF_DTU_D_ARRAY, CTF_DTU_D_ENCODING, CTF_DTU_D_ARGUMENTS, - CTF_DTU_D_SLICE + CTF_DTU_D_SLICE, + CTF_DTU_D_TAG, }; enum ctf_dtu_d_union_enum @@ -287,6 +301,17 @@ typedef struct GTY (()) ctf_container /* CTF variables to be ignored. */ hash_table * GTY (()) ctfc_ignore_vars; + /* BTF type and decl tags. Not yet represented in CTF. These tags also + uniquely have a one-to-many relation with DIEs, meaning a single DIE + may translate to multiple CTF/BTF records. For both of these reasons, + they cannot be stored in the regular types table. */ + vec * GTY (()) ctfc_tags; + /* Type tags logically form part of the type chain similar to cv-quals. + Therefore references to types need to know if the referred-to type has + any type tags, and if so to refer to the outermost type tag. This map + maps a type to the outermost type tag created for it, if any. */ + hash_map * GTY (()) ctfc_type_tags_map; + /* CTF string table. */ ctf_strtable_t ctfc_strtable; /* Auxilliary string table. At this time, used for keeping func arg names @@ -440,15 +465,19 @@ extern ctf_dtdef_ref ctf_add_function (ctf_container_ref, uint32_t, dw_die_ref, bool, int); extern ctf_dtdef_ref ctf_add_sou (ctf_container_ref, uint32_t, const char *, uint32_t, unsigned HOST_WIDE_INT, dw_die_ref); - +extern ctf_dtdef_ref ctf_add_type_tag (ctf_container_ref, uint32_t, + const char *, ctf_dtdef_ref); +extern ctf_dtdef_ref ctf_add_decl_tag (ctf_container_ref, uint32_t, + const char *, ctf_dtdef_ref, uint32_t); extern int ctf_add_enumerator (ctf_container_ref, ctf_dtdef_ref, const char *, HOST_WIDE_INT, dw_die_ref); extern int ctf_add_member_offset (ctf_container_ref, dw_die_ref, const char *, ctf_dtdef_ref, uint64_t); extern int ctf_add_function_arg (ctf_container_ref, dw_die_ref, const char *, ctf_dtdef_ref); -extern int ctf_add_variable (ctf_container_ref, const char *, ctf_dtdef_ref, - dw_die_ref, unsigned int, dw_die_ref); +extern ctf_dvdef_ref ctf_add_variable (ctf_container_ref, const char *, + ctf_dtdef_ref, dw_die_ref, unsigned int, + dw_die_ref); extern ctf_dtdef_ref ctf_lookup_tree_type (ctf_container_ref, const tree); diff --git a/gcc/dwarf2ctf.cc b/gcc/dwarf2ctf.cc index 4b49b23f0780..2ebcf2af40df 100644 --- a/gcc/dwarf2ctf.cc +++ b/gcc/dwarf2ctf.cc @@ -32,6 +32,17 @@ along with GCC; see the file COPYING3. If not see static ctf_dtdef_ref gen_ctf_type (ctf_container_ref, dw_die_ref); +static void +gen_ctf_decl_tags (ctf_container_ref, dw_die_ref, ctf_dtdef_ref, uint32_t); + +static void +gen_ctf_decl_tags_for_var (ctf_container_ref, dw_die_ref, ctf_dvdef_ref); + +static ctf_dtdef_ref +handle_ctf_type_tags (ctf_container_ref ctc, dw_die_ref annot_die, + ctf_dtdef_ref ref_dtd); + + /* All the DIE structures we handle come from the DWARF information generated by GCC. However, there are three situations where we need to create our own created DIE structures because GCC doesn't @@ -335,6 +346,17 @@ gen_ctf_pointer_type (ctf_container_ref ctfc, dw_die_ref ptr_type) pointed_dtd = gen_ctf_type (ctfc, pointed_type_die); + /* Handle BTF type tags. */ + if (btf_debuginfo_p ()) + { + dw_die_ref annot_die = get_AT_ref (ptr_type, DW_AT_GNU_annotation); + ctf_dtdef_ref tag_dtd + = handle_ctf_type_tags (ctfc, annot_die, pointed_dtd); + + if (tag_dtd) + pointed_dtd = tag_dtd; + } + /* Type de-duplication. Consult the ctfc_types hash again before adding the CTF pointer type because there can be cases where a pointer type may have been added by @@ -536,6 +558,7 @@ gen_ctf_sou_type (ctf_container_ref ctfc, dw_die_ref sou, uint32_t kind) /* Now process the struct members. */ { dw_die_ref c; + uint32_t idx = 0; c = dw_get_die_child (sou); if (c) @@ -620,6 +643,9 @@ gen_ctf_sou_type (ctf_container_ref ctfc, dw_die_ref sou, uint32_t kind) field_name, field_dtd, field_location); + + gen_ctf_decl_tags (ctfc, c, sou_dtd, idx); + idx++; } while (c != dw_get_die_child (sou)); } @@ -703,14 +729,18 @@ gen_ctf_function_type (ctf_container_ref ctfc, dw_die_ref function, gcc_assert (i == num_args - 1); /* Add an argument with type 0 and no name. */ ctf_add_function_arg (ctfc, function, "", NULL); + /* Handle any declaration tags on the argument. */ + gen_ctf_decl_tags (ctfc, c, function_dtd, i); } else if (dw_get_die_tag (c) == DW_TAG_formal_parameter) { - i++; arg_name = get_AT_string (c, DW_AT_name); arg_type = gen_ctf_type (ctfc, ctf_get_AT_type (c)); /* Add the argument to the existing CTF function type. */ ctf_add_function_arg (ctfc, function, arg_name, arg_type); + /* Handle any declaration tags on the argument. */ + gen_ctf_decl_tags (ctfc, c, function_dtd, i); + i++; } else /* This is a local variable. Ignore. */ @@ -801,6 +831,7 @@ gen_ctf_variable (ctf_container_ref ctfc, dw_die_ref die) dw_die_ref var_type = ctf_get_AT_type (die); unsigned int external_vis = get_AT_flag (die, DW_AT_external); ctf_dtdef_ref var_dtd; + ctf_dvdef_ref dvd; /* Avoid duplicates. */ if (ctf_dvd_lookup (ctfc, die)) @@ -821,10 +852,13 @@ gen_ctf_variable (ctf_container_ref ctfc, dw_die_ref die) var_dtd = gen_ctf_type (ctfc, var_type); /* Generate the new CTF variable and update global counter. */ - (void) ctf_add_variable (ctfc, var_name, var_dtd, die, external_vis, decl); + dvd = ctf_add_variable (ctfc, var_name, var_dtd, die, external_vis, decl); /* Skip updating the number of global objects at this time. This is updated later after pre-processing as some CTF variable records although generated now, will not be emitted later. [PR105089]. */ + + /* Handle declaration tags on the variable. */ + gen_ctf_decl_tags_for_var (ctfc, die, dvd); } /* Add a CTF function record for the given input DWARF DIE. */ @@ -842,8 +876,97 @@ gen_ctf_function (ctf_container_ref ctfc, dw_die_ref die) counter. Note that DWARF encodes function types in both DW_TAG_subroutine_type and DW_TAG_subprogram in exactly the same way. */ - (void) gen_ctf_function_type (ctfc, die, true /* from_global_func */); + function_dtd = gen_ctf_function_type (ctfc, die, true /* from_global_func */); ctfc->ctfc_num_global_funcs += 1; + + /* Handle declaration tags on the function. */ + gen_ctf_decl_tags (ctfc, die, function_dtd, -1U); +} + +static ctf_dtdef_ref +handle_ctf_type_tags (ctf_container_ref ctfc, dw_die_ref annot_die, + ctf_dtdef_ref ref_dtd) +{ + if (!annot_die || !ref_dtd) + return NULL; + + /* Recurse first. */ + dw_die_ref next_annot; + if ((next_annot = get_AT_ref (annot_die, DW_AT_GNU_annotation))) + ref_dtd = handle_ctf_type_tags (ctfc, next_annot, ref_dtd); + + ctf_dtdef_ref tag_dtd = NULL; + const char *name = get_AT_string (annot_die, DW_AT_name); + const char *value = get_AT_string (annot_die, DW_AT_const_value); + + if (strcmp (name, "btf_type_tag") == 0) + tag_dtd = ctf_add_type_tag (ctfc, CTF_ADD_ROOT, value, ref_dtd); + + return tag_dtd; +} + +/* Handle any DW_AT_GNU_annotation on decl DIE by constructing a CTF_K_DECL_TAG + type for the DW_TAG_GNU_annotation DIE to which it points, if this has not + been previously constructed. There may be multiple annotations chained + together by further occurances of DW_AT_GNU_annotation in the annoation DIEs + themselves, in which case a corresponding CTF_K_DECL_TAG type is created for + each. Unlike TYPE_TAGs, which form a chain, each DECL_TAG individually + refers directly to the annotated decl, which should be supplied in REF_DTD. + IDX is the zero-based component index indicating to which function parameter + or struct or union member the DECL_TAG refers, or (uint32_t) -1 if it refers + to a function decl or sou itself. + Note that because individual DECL_TAGs refer direcly to the annotated decl, + they cannot be deduplicated across usages. */ + +static void +gen_ctf_decl_tags (ctf_container_ref ctfc, dw_die_ref die, + ctf_dtdef_ref ref_dtd, uint32_t idx) +{ + if (!btf_debuginfo_p () || !die || !ref_dtd) + return; + + dw_die_ref annot_die = get_AT_ref (die, DW_AT_GNU_annotation); + while (annot_die) + { + const char *name = get_AT_string (annot_die, DW_AT_name); + const char *value = get_AT_string (annot_die, DW_AT_const_value); + + if (strcmp (name, "btf_decl_tag") == 0) + (void) ctf_add_decl_tag (ctfc, CTF_ADD_ROOT, value, ref_dtd, idx); + + annot_die = get_AT_ref (annot_die, DW_AT_GNU_annotation); + } +} + +/* Like gen_ctf_decl_tags above, but specifically for variables. Declaration + tags may appear on variables or other declarations like functions, but due + to the distinction in CTF between variables and types the processing in + each case is slightly different. REF_DVD is the CTF record for the variable + which is annotated. */ + +static void +gen_ctf_decl_tags_for_var (ctf_container_ref ctfc, dw_die_ref die, + ctf_dvdef_ref ref_dvd) +{ + if (!btf_debuginfo_p () || !die || !ref_dvd) + return; + + ctf_dtdef_ref tag_dtd = NULL; + + dw_die_ref annot_die = get_AT_ref (die, DW_AT_GNU_annotation); + while (annot_die) + { + const char *name = get_AT_string (annot_die, DW_AT_name); + const char *value = get_AT_string (annot_die, DW_AT_const_value); + + if (strcmp (name, "btf_decl_tag") == 0) + { + tag_dtd = ctf_add_decl_tag (ctfc, CTF_ADD_ROOT, value, NULL, -1U); + tag_dtd->dtd_u.dtu_tag.ref_var = ref_dvd; + } + + annot_die = get_AT_ref (annot_die, DW_AT_GNU_annotation); + } } /* Add CTF type record(s) for the given input DWARF DIE and return its type id. @@ -910,6 +1033,12 @@ gen_ctf_type (ctf_container_ref ctfc, dw_die_ref die) break; } + case DW_TAG_GNU_annotation: + /* These DIEs are traversed by gen_ctf_type_tags by following + any DW_AT_GNU_annotation present in other types. */ + dtd = NULL; + unrecog_die = true; + break; case DW_TAG_reference_type: dtd = NULL; break; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-decl-tag-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-decl-tag-1.c new file mode 100644 index 000000000000..564bbc764681 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-decl-tag-1.c @@ -0,0 +1,31 @@ +/* CTF generation for btf_decl_tag attribute. + + CTF does not encode these attributes and no CTF_K_DECL_TAG record should be + emitted; these records only exist internally to facilitate translation + to BTF. */ + +/* { dg-do compile } */ +/* { dg-options "-O0 -gctf -dA" } */ + +int x __attribute__((btf_decl_tag ("some_tag"))); + +struct S { + int a; + int b __attribute__((btf_decl_tag ("_b"))); + int c; +}; + +struct S some_S; + +void +__attribute__((btf_decl_tag ("__func"))) +foo (int *ptr __attribute__((btf_decl_tag ("w"))), int val) +{ + *ptr = val; +} + +/* Expect 5 CTF types: int, struct, void, int*, void (int*, int). */ +/* { dg-final { scan-assembler-times "ctt_info" 5 } } */ +/* Ensure no CTF_K_DECL_TAG record is emitted. */ +/* { dg-final { scan-assembler-not "\[\t \]0x3c*\[\t \]+\[^\n\]*ctt_info" } } */ +/* { dg-final { scan-assembler-not "\[\t \]0x3e*\[\t \]+\[^\n\]*ctt_info" } } */ diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-type-tag-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-type-tag-1.c new file mode 100644 index 000000000000..ca37ef44fe28 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-type-tag-1.c @@ -0,0 +1,19 @@ +/* CTF generation for btf_type_tag attribute. + + CTF does not encode these attributes and no CTF_K_TYPE_TAG record should be + emitted; these records only exist internally to facilitate translation + to BTF. */ + +/* { dg-do compile } */ +/* { dg-options "-O0 -gctf -dA" } */ + +int * __attribute__((btf_type_tag ("some_tag"))) x; + +typedef unsigned int __attribute__((btf_type_tag ("other_tag"))) uint; +const uint u; + +/* Expect 5 CTF types: int, int*, unsigned int, typedef, const. */ +/* { dg-final { scan-assembler-times "ctt_info" 5 } } */ +/* Ensure no CTF_K_TYPE_TAG record is emitted. */ +/* { dg-final { scan-assembler-not "\[\t \]0x40*\[\t \]+\[^\n\]*ctt_info" } } */ +/* { dg-final { scan-assembler-not "\[\t \]0x42*\[\t \]+\[^\n\]*ctt_info" } } */ diff --git a/include/ctf.h b/include/ctf.h index 72a639ac9b43..f75e337ba0f2 100644 --- a/include/ctf.h +++ b/include/ctf.h @@ -423,6 +423,10 @@ union #define CTF_K_CONST 12 /* ctt_type is base type. */ #define CTF_K_RESTRICT 13 /* ctt_type is base type. */ #define CTF_K_SLICE 14 /* Variant data is a ctf_slice_t. */ +#define CTF_K_DECL_TAG 15 /* Declaration tag. Internal use only. + Not valid externally until CTF V4. */ +#define CTF_K_TYPE_TAG 16 /* Type tag. Internal use only. + Not valid externally until CTF V4. */ #define CTF_K_MAX 63 /* Maximum possible (V2) CTF_K_* value. */ From 43dcea48b8c701138335518b6f2853ab9af0eda2 Mon Sep 17 00:00:00 2001 From: David Faust Date: Wed, 5 Feb 2025 10:41:23 -0800 Subject: [PATCH 199/216] btf: generate and output DECL_TAG and TYPE_TAG records Support the btf_decl_tag and btf_type_tag attributes in BTF by creating and emitting BTF_KIND_DECL_TAG and BTF_KIND_TYPE_TAG records, respectively, for them. Some care is required when -gprune-btf is in effect to avoid emitting decl or type tags for declarations or types which have been pruned and will not be emitted in BTF. gcc/ * btfout.cc (get_btf_kind): Handle DECL_TAG and TYPE_TAG kinds. (btf_calc_num_vbytes): Likewise. (btf_asm_type): Likewise. (output_asm_btf_vlen_bytes): Likewise. (output_btf_tags): New. (btf_output): Call it here. (btf_add_used_type): Replace with simple wrapper around... (btf_add_used_type_1): ...the implementation. Handle BTF_KIND_DECL_TAG and BTF_KIND_TYPE_TAG. (btf_add_vars): Update btf_add_used_type call. (btf_assign_tag_ids): New. (btf_mark_type_used): Update btf_add_used_type call. (btf_collect_pruned_types): Likewise. Handle type and decl tags. (btf_finish): Call btf_assign_tag_ids. gcc/testsuite/ * gcc.dg/debug/btf/btf-decl-tag-1.c: New test. * gcc.dg/debug/btf/btf-decl-tag-2.c: New test. * gcc.dg/debug/btf/btf-decl-tag-3.c: New test. * gcc.dg/debug/btf/btf-decl-tag-4.c: New test. * gcc.dg/debug/btf/btf-type-tag-1.c: New test. * gcc.dg/debug/btf/btf-type-tag-2.c: New test. * gcc.dg/debug/btf/btf-type-tag-3.c: New test. * gcc.dg/debug/btf/btf-type-tag-4.c: New test. * gcc.dg/debug/btf/btf-type-tag-c2x-1.c: New test. include/ * btf.h (BTF_KIND_DECL_TAG, BTF_KIND_TYPE_TAG) New defines. (struct btf_decl_tag): New. --- gcc/btfout.cc | 171 +++++++++++++++--- .../gcc.dg/debug/btf/btf-decl-tag-1.c | 14 ++ .../gcc.dg/debug/btf/btf-decl-tag-2.c | 22 +++ .../gcc.dg/debug/btf/btf-decl-tag-3.c | 22 +++ .../gcc.dg/debug/btf/btf-decl-tag-4.c | 34 ++++ .../gcc.dg/debug/btf/btf-type-tag-1.c | 26 +++ .../gcc.dg/debug/btf/btf-type-tag-2.c | 13 ++ .../gcc.dg/debug/btf/btf-type-tag-3.c | 28 +++ .../gcc.dg/debug/btf/btf-type-tag-4.c | 24 +++ .../gcc.dg/debug/btf/btf-type-tag-c2x-1.c | 22 +++ include/btf.h | 14 ++ 11 files changed, 366 insertions(+), 24 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-decl-tag-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-decl-tag-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-decl-tag-3.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-decl-tag-4.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-type-tag-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-type-tag-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-type-tag-3.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-type-tag-4.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-type-tag-c2x-1.c diff --git a/gcc/btfout.cc b/gcc/btfout.cc index ff7ea42a9614..5a210cd51e6c 100644 --- a/gcc/btfout.cc +++ b/gcc/btfout.cc @@ -141,6 +141,8 @@ get_btf_kind (uint32_t ctf_kind) case CTF_K_VOLATILE: return BTF_KIND_VOLATILE; case CTF_K_CONST: return BTF_KIND_CONST; case CTF_K_RESTRICT: return BTF_KIND_RESTRICT; + case CTF_K_DECL_TAG: return BTF_KIND_DECL_TAG; + case CTF_K_TYPE_TAG: return BTF_KIND_TYPE_TAG; default:; } return BTF_KIND_UNKN; @@ -217,6 +219,7 @@ btf_calc_num_vbytes (ctf_dtdef_ref dtd) case BTF_KIND_CONST: case BTF_KIND_RESTRICT: case BTF_KIND_FUNC: + case BTF_KIND_TYPE_TAG: /* These kinds have no vlen data. */ break; @@ -256,6 +259,10 @@ btf_calc_num_vbytes (ctf_dtdef_ref dtd) vlen_bytes += vlen * sizeof (struct btf_var_secinfo); break; + case BTF_KIND_DECL_TAG: + vlen_bytes += sizeof (struct btf_decl_tag); + break; + default: break; } @@ -452,6 +459,20 @@ btf_asm_type (ctf_dtdef_ref dtd) and should write 0. */ dw2_asm_output_data (4, 0, "(unused)"); return; + case BTF_KIND_DECL_TAG: + { + if (dtd->ref_type) + break; + else if (dtd->dtd_u.dtu_tag.ref_var) + { + /* ref_type is NULL for decl tag attached to a variable. */ + ctf_dvdef_ref dvd = dtd->dtd_u.dtu_tag.ref_var; + dw2_asm_output_data (4, dvd->dvd_id, + "btt_type: (BTF_KIND_VAR '%s')", + dvd->dvd_name); + return; + } + } default: break; } @@ -801,6 +822,12 @@ output_asm_btf_vlen_bytes (ctf_container_ref ctfc, ctf_dtdef_ref dtd) at this point. */ gcc_unreachable (); + case BTF_KIND_DECL_TAG: + dw2_asm_output_data (4, dtd->dtd_u.dtu_tag.component_idx, + "component_idx=%d", + dtd->dtd_u.dtu_tag.component_idx); + break; + default: /* All other BTF type kinds have no variable length data. */ break; @@ -851,6 +878,20 @@ output_btf_func_types (void) btf_asm_func_type (ref); } +static void +output_btf_tags (ctf_container_ref ctfc) +{ + /* If pruning, tags which are not pruned have already been added to + the used list and output by output_btf_types. */ + if (debug_prune_btf) + return; + + ctf_dtdef_ref dtd; + unsigned i; + FOR_EACH_VEC_ELT (*ctfc->ctfc_tags, i, dtd) + output_asm_btf_type (ctfc, dtd); +} + /* Output all BTF_KIND_DATASEC records. */ static void @@ -869,6 +910,7 @@ btf_output (ctf_container_ref ctfc) output_btf_types (ctfc); output_btf_vars (ctfc); output_btf_func_types (); + output_btf_tags (ctfc); output_btf_datasec_types (); output_btf_strs (ctfc); } @@ -985,7 +1027,8 @@ static vec fixups; is created and emitted. This vector stores them. */ static GTY (()) vec *forwards; -/* Recursively add type DTD and any types it references to the used set. +/* Implementation of btf_add_used_type. + Recursively add type DTD and any types it references to the used set. Return a type that should be used for references to DTD - usually DTD itself, but may be NULL if DTD corresponds to a type which will not be emitted. CHECK_PTR is true if one of the predecessors in recursive calls is a struct @@ -996,8 +1039,8 @@ static GTY (()) vec *forwards; CREATE_FIXUPS is false. */ static ctf_dtdef_ref -btf_add_used_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd, - bool check_ptr, bool seen_ptr, bool create_fixups) +btf_add_used_type_1 (ctf_container_ref ctfc, ctf_dtdef_ref dtd, + bool check_ptr, bool seen_ptr, bool create_fixups) { if (dtd == NULL) return NULL; @@ -1029,8 +1072,9 @@ btf_add_used_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd, fixups.unordered_remove (i); /* Add the concrete base type. */ - dtd->ref_type = btf_add_used_type (ctfc, dtd->ref_type, check_ptr, - seen_ptr, create_fixups); + dtd->ref_type = btf_add_used_type_1 (ctfc, dtd->ref_type, + check_ptr, seen_ptr, + create_fixups); return dtd; } default: @@ -1044,8 +1088,8 @@ btf_add_used_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd, the reference to the bitfield. The slice type won't be emitted, but we need the information in it when writing out the bitfield encoding. */ - btf_add_used_type (ctfc, dtd->dtd_u.dtu_slice.cts_type, - check_ptr, seen_ptr, create_fixups); + btf_add_used_type_1 (ctfc, dtd->dtd_u.dtu_slice.cts_type, + check_ptr, seen_ptr, create_fixups); return dtd; } @@ -1069,7 +1113,11 @@ btf_add_used_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd, case BTF_KIND_INT: case BTF_KIND_FLOAT: case BTF_KIND_FWD: - /* Leaf kinds which do not refer to any other types. */ + case BTF_KIND_DECL_TAG: + /* Leaf kinds which do not refer to any other types. + BTF_KIND_DECL_TAG is a special case: we treat it as though it does not + refer to any other types, since we only want the DECL_TAG to be added + if the type to which it refers has already been added. */ break; case BTF_KIND_FUNC: @@ -1082,6 +1130,7 @@ btf_add_used_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd, case BTF_KIND_CONST: case BTF_KIND_VOLATILE: case BTF_KIND_RESTRICT: + case BTF_KIND_TYPE_TAG: { /* These type kinds refer to exactly one other type. */ if (check_ptr && !seen_ptr) @@ -1106,18 +1155,18 @@ btf_add_used_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd, } /* Add the type to which this type refers. */ - dtd->ref_type = btf_add_used_type (ctfc, dtd->ref_type, check_ptr, - seen_ptr, create_fixups); + dtd->ref_type = btf_add_used_type_1 (ctfc, dtd->ref_type, check_ptr, + seen_ptr, create_fixups); break; } case BTF_KIND_ARRAY: { /* Add element and index types. */ ctf_arinfo_t *arr = &(dtd->dtd_u.dtu_arr); - arr->ctr_contents = btf_add_used_type (ctfc, arr->ctr_contents, false, - false, create_fixups); - arr->ctr_index = btf_add_used_type (ctfc, arr->ctr_index, false, false, - create_fixups); + arr->ctr_contents = btf_add_used_type_1 (ctfc, arr->ctr_contents, + false, false, create_fixups); + arr->ctr_index = btf_add_used_type_1 (ctfc, arr->ctr_index, false, + false, create_fixups); break; } case BTF_KIND_STRUCT: @@ -1133,8 +1182,8 @@ btf_add_used_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd, /* Add member type for struct/union members. For enums, only the enumerator names are needed. */ if (kind == BTF_KIND_STRUCT || kind == BTF_KIND_UNION) - dmd->dmd_type = btf_add_used_type (ctfc, dmd->dmd_type, true, - false, create_fixups); + dmd->dmd_type = btf_add_used_type_1 (ctfc, dmd->dmd_type, true, + false, create_fixups); ctf_add_string (ctfc, dmd->dmd_name, &(dmd->dmd_name_offset), CTF_STRTAB); } @@ -1143,16 +1192,17 @@ btf_add_used_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd, case BTF_KIND_FUNC_PROTO: { /* Add return type. */ - dtd->ref_type = btf_add_used_type (ctfc, dtd->ref_type, false, false, - create_fixups); + dtd->ref_type = btf_add_used_type_1 (ctfc, dtd->ref_type, false, false, + create_fixups); /* Add arg types. */ ctf_func_arg_t * farg; for (farg = dtd->dtd_u.dtu_argv; farg != NULL; farg = (ctf_func_arg_t *) ctf_farg_list_next (farg)) { - farg->farg_type = btf_add_used_type (ctfc, farg->farg_type, false, - false, create_fixups); + farg->farg_type = btf_add_used_type_1 (ctfc, farg->farg_type, + false, false, + create_fixups); /* Note: argument names are stored in the auxilliary string table, since CTF does not include arg names. That table has not been cleared, so no need to re-add argument names here. */ @@ -1166,6 +1216,16 @@ btf_add_used_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd, return dtd; } +/* Recursively add type DTD and any types it references to the used set. + Return a type that should be used for references to DTD - usually DTD itself, + but may be NULL if DTD corresponds to a type which will not be emitted. */ + +static ctf_dtdef_ref +btf_add_used_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd) +{ + return btf_add_used_type_1 (ctfc, dtd, false, false, true); +} + /* Initial entry point of BTF generation, called at early_finish () after CTF information has possibly been output. Translate all CTF information to BTF, and do any processing that must be done early, such as creating @@ -1402,7 +1462,7 @@ btf_add_vars (ctf_container_ref ctfc) ctf_dmdef_t *dmd; for (dmd = dtd->dtd_u.dtu_members; dmd != NULL; dmd = (ctf_dmdef_t *) ctf_dmd_list_next (dmd)) - btf_add_used_type (ctfc, dmd->dmd_type, false, false, true); + btf_add_used_type (ctfc, dmd->dmd_type); } } } @@ -1488,6 +1548,39 @@ btf_assign_var_ids (ctf_container_ref ctfc) } } +/* Assign BTF IDs for type and decl tags and account for their size. */ + +static void +btf_assign_tag_ids (ctf_container_ref ctfc) +{ + size_t num_tags = vec_safe_length (ctfc->ctfc_tags); + if (num_tags == 0) + return; + + unsigned int i; + ctf_dtdef_ref dtd; + FOR_EACH_VEC_ELT (*ctfc->ctfc_tags, i, dtd) + { + /* Assign BTF id. */ + ctf_id_t id = ctfc->ctfc_nextid++; + gcc_assert (id <= BTF_MAX_TYPE); + dtd->dtd_type = id; + + /* Tags on functions will have a ref_type pointing to the + FUNC_PROTO, we want them to point the FUNC record instead. */ + ctf_dtdef_ref *pdtd = NULL; + if (dtd->ref_type && (pdtd = func_map->get (dtd->ref_type)) != NULL) + dtd->ref_type = *pdtd; + + /* Strings for tags are stored in the auxiliary strtab, which is + concatenated after the regular strtab. ctti_name only accounts + for offset in the auxiliary strtab until this point. */ + dtd->dtd_data.ctti_name += ctfc_get_strtab_len (ctfc, CTF_STRTAB); + ctfc->ctfc_num_types++; + ctfc->ctfc_num_vlen_bytes += btf_calc_num_vbytes (dtd); + } +} + /* Assign BTF IDs for datasec records and account for their size. */ static void @@ -1522,7 +1615,7 @@ btf_mark_type_used (tree t) if (!dtd) return; - btf_add_used_type (ctfc, dtd, false, false, true); + btf_add_used_type (ctfc, dtd); } /* Callback used for assembling the only-used-types list. Note that this is @@ -1549,7 +1642,7 @@ btf_collect_pruned_types (ctf_container_ref ctfc) size_t i; FOR_EACH_VEC_ELT (*funcs, i, dtd) { - btf_add_used_type (ctfc, dtd->ref_type, false, false, true); + btf_add_used_type (ctfc, dtd->ref_type); ctf_add_string (ctfc, dtd->dtd_name, &(dtd->dtd_data.ctti_name), CTF_STRTAB); } @@ -1558,10 +1651,33 @@ btf_collect_pruned_types (ctf_container_ref ctfc) for (i = 0; i < ctfc->ctfc_vars_list_count; i++) { ctf_dvdef_ref dvd = ctfc->ctfc_vars_list[i]; - btf_add_used_type (ctfc, dvd->dvd_type, false, false, true); + btf_add_used_type (ctfc, dvd->dvd_type); ctf_add_string (ctfc, dvd->dvd_name, &(dvd->dvd_name_offset), CTF_STRTAB); } + /* Used type tags will be added by recursive btf_add_used_type calls above. + For decl tags, scan the list and only add those decl tags whose referent + types are marked as used. We may have pruned a struct type with members + annotated by a decl tag. */ + FOR_EACH_VEC_ELT (*ctfc->ctfc_tags, i, dtd) + { + /* Only add decl tags whose referent types have not been pruned. + Variables are never pruned, so decl tags on variables are always + used. */ + if (btf_dtd_kind (dtd) == BTF_KIND_DECL_TAG + && ((dtd->ref_type && btf_used_types->contains (dtd->ref_type)) + || (dtd->dtd_u.dtu_tag.ref_var))) + btf_add_used_type (ctfc, dtd); + + /* Tags on functions or function args will have a ref_type pointing to the + FUNC_PROTO, we want them to point the FUNC record instead. */ + ctf_dtdef_ref *pdtd = NULL; + if (dtd->ref_type + && btf_used_types->contains (dtd->ref_type) + && (pdtd = func_map->get (dtd->ref_type)) != NULL) + dtd->ref_type = *pdtd; + } + /* Process fixups. If the base type was never added, create a forward for it and adjust the reference to point to that. If it was added, then nothing needs to change. */ @@ -1634,6 +1750,13 @@ btf_finish (void) btf_assign_var_ids (tu_ctfc); btf_assign_func_ids (tu_ctfc); + + /* Both decl and type tags may be pruned if the types/decls to which they + refer are pruned. This is handled in btf_collect_pruned_types, and + through that process they have also been assigned ids already. */ + if (!debug_prune_btf) + btf_assign_tag_ids (tu_ctfc); + btf_assign_datasec_ids (tu_ctfc); /* Finally, write out the complete .BTF section. */ diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-decl-tag-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-decl-tag-1.c new file mode 100644 index 000000000000..c933d84b4979 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-decl-tag-1.c @@ -0,0 +1,14 @@ +/* Test simple BTF decl tag generation for variables. */ +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +#define __tag1 __attribute__((btf_decl_tag ("decl1"))) +#define __tag2 __attribute__((btf_decl_tag ("decl2"))) +#define __tag3 __attribute__((btf_decl_tag ("decl3"))) + +int x __tag1 __tag2; +int y __tag1; + +/* { dg-final { scan-assembler-times " BTF_KIND_DECL_TAG 'decl1'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_VAR 'x'\\)\[\\r\\n\]+\[^\\r\\n\]*component_idx=-1" 1} } */ +/* { dg-final { scan-assembler-times " BTF_KIND_DECL_TAG 'decl2'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_VAR 'x'\\)\[\\r\\n\]+\[^\\r\\n\]*component_idx=-1" 1} } */ +/* { dg-final { scan-assembler-times " BTF_KIND_DECL_TAG 'decl1'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_VAR 'y'\\)\[\\r\\n\]+\[^\\r\\n\]*component_idx=-1" 1} } */ diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-decl-tag-2.c b/gcc/testsuite/gcc.dg/debug/btf/btf-decl-tag-2.c new file mode 100644 index 000000000000..c4f09ca839c5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-decl-tag-2.c @@ -0,0 +1,22 @@ +/* Test BTF decl tag generation for structs. */ +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +#define __tag1 __attribute__((btf_decl_tag ("decl1"))) +#define __tag2 __attribute__((btf_decl_tag ("decl2"))) +#define __tag3 __attribute__((btf_decl_tag ("decl3"))) + +struct Foo { + int a; + int b __tag3 __tag2; + char *z __tag1; +}; + +struct Foo f __tag1 __tag2; + +/* { dg-final { scan-assembler-times " BTF_KIND_DECL_TAG 'decl2'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_STRUCT 'Foo'\\)\[\\r\\n\]+\[^\\r\\n\]*component_idx=1" 1} } */ +/* { dg-final { scan-assembler-times " BTF_KIND_DECL_TAG 'decl3'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_STRUCT 'Foo'\\)\[\\r\\n\]+\[^\\r\\n\]*component_idx=1" 1} } */ +/* { dg-final { scan-assembler-times " BTF_KIND_DECL_TAG 'decl1'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_STRUCT 'Foo'\\)\[\\r\\n\]+\[^\\r\\n\]*component_idx=2" 1} } */ + +/* { dg-final { scan-assembler-times " BTF_KIND_DECL_TAG 'decl1'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_VAR 'f'\\)\[\\r\\n\]+\[^\\r\\n\]*component_idx=-1" 1} } */ +/* { dg-final { scan-assembler-times " BTF_KIND_DECL_TAG 'decl2'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_VAR 'f'\\)\[\\r\\n\]+\[^\\r\\n\]*component_idx=-1" 1} } */ diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-decl-tag-3.c b/gcc/testsuite/gcc.dg/debug/btf/btf-decl-tag-3.c new file mode 100644 index 000000000000..7eb8a93ec128 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-decl-tag-3.c @@ -0,0 +1,22 @@ +/* Test BTF decl tag generation for functions and function args. */ +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +#define __tag1 __attribute__((btf_decl_tag ("decl1"))) +#define __tag2 __attribute__((btf_decl_tag ("decl2"))) +#define __tag3 __attribute__((btf_decl_tag ("decl3"))) + +int __tag1 __tag2 func (int arg_a __tag3 __tag1, int arg_b __tag2) +{ + return arg_a * arg_b; +} + +int foo (int x) { + return func (x, x + 1); +} + +/* { dg-final { scan-assembler-times " BTF_KIND_DECL_TAG 'decl1'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_FUNC 'func'\\)\[\\r\\n\]+\[^\\r\\n\]*component_idx=-1" 1} } */ +/* { dg-final { scan-assembler-times " BTF_KIND_DECL_TAG 'decl2'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_FUNC 'func'\\)\[\\r\\n\]+\[^\\r\\n\]*component_idx=-1" 1} } */ +/* { dg-final { scan-assembler-times " BTF_KIND_DECL_TAG 'decl1'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_FUNC 'func'\\)\[\\r\\n\]+\[^\\r\\n\]*component_idx=0" 1} } */ +/* { dg-final { scan-assembler-times " BTF_KIND_DECL_TAG 'decl3'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_FUNC 'func'\\)\[\\r\\n\]+\[^\\r\\n\]*component_idx=0" 1} } */ +/* { dg-final { scan-assembler-times " BTF_KIND_DECL_TAG 'decl2'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_FUNC 'func'\\)\[\\r\\n\]+\[^\\r\\n\]*component_idx=1" 1} } */ diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-decl-tag-4.c b/gcc/testsuite/gcc.dg/debug/btf/btf-decl-tag-4.c new file mode 100644 index 000000000000..a90223755291 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-decl-tag-4.c @@ -0,0 +1,34 @@ +/* Test BTF decl tag generation with BTF pruning. */ +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -gprune-btf -dA" } */ + +#define __decl1 __attribute__((btf_decl_tag ("decl1"))) +#define __decl2 __attribute__((btf_decl_tag ("decl2"))) +#define __decl3 __attribute__((btf_decl_tag ("decl3"))) + +struct S { + /* This tag on S.v shall not be emitted, because struct S is pruned and + replaced with a FWD, which does not hold any member info. */ + int v __decl3; + int w; +}; + +struct T { + int a; + struct S *s __decl1; + int c __decl2; +}; + +struct T t __decl1; + +int __decl1 func (struct T *t __decl2) +{ + return t->a + t->c; +} + +/* { dg-final { scan-assembler-not " BTF_KIND_DECL_TAG 'decl3'" } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_DECL_TAG 'decl1'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_STRUCT 'T'\\)\[\\r\\n\]+\[^\\r\\n\]*component_idx=1" 1} } */ +/* { dg-final { scan-assembler-times " BTF_KIND_DECL_TAG 'decl2'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_STRUCT 'T'\\)\[\\r\\n\]+\[^\\r\\n\]*component_idx=2" 1} } */ +/* { dg-final { scan-assembler-times " BTF_KIND_DECL_TAG 'decl1'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_VAR 't'\\)\[\\r\\n\]+\[^\\r\\n\]*component_idx=-1" 1} } */ +/* { dg-final { scan-assembler-times " BTF_KIND_DECL_TAG 'decl1'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_FUNC 'func'\\)\[\\r\\n\]+\[^\\r\\n\]*component_idx=-1" 1} } */ +/* { dg-final { scan-assembler-times " BTF_KIND_DECL_TAG 'decl2'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_FUNC 'func'\\)\[\\r\\n\]+\[^\\r\\n\]*component_idx=0" 1} } */ diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-type-tag-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-type-tag-1.c new file mode 100644 index 000000000000..63a6f324ab1c --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-type-tag-1.c @@ -0,0 +1,26 @@ +/* Test simple generation of BTF type tags. */ +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +#define __tag1 __attribute__((btf_type_tag("1"))) +#define __tag2 __attribute__((btf_type_tag("2"))) + +/* var("kp") -> ptr -> type_tag("1") -> int */ +int * __tag1 kp; + +struct Foo { + char a; + int b; +}; + +/* var("f") -> ptr -> type_tag("2") -> type_tag("1") -> struct("Foo") */ +struct Foo * __tag1 __tag2 f; + +/* { dg-final { scan-assembler-times " BTF_KIND_VAR 'kp'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_PTR" 1 } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_TYPE_TAG '1'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_INT" 1 } } */ + +/* { dg-final { scan-assembler-times " BTF_KIND_VAR 'f'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_PTR" 1 } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_TYPE_TAG '2'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_TYPE_TAG '1'\\)" 1 } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_TYPE_TAG '1'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_STRUCT" 1 } } */ + +/* { dg-final { scan-assembler-times " BTF_KIND_PTR ''(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_TYPE_TAG" 2 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-type-tag-2.c b/gcc/testsuite/gcc.dg/debug/btf/btf-type-tag-2.c new file mode 100644 index 000000000000..5adf3d041c79 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-type-tag-2.c @@ -0,0 +1,13 @@ +/* Test generation of BTF type tags with cv-quals. */ +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +#define __tag __attribute__((btf_type_tag("1"))) + +/* var("pci") -> const -> ptr -> type_tag("1") -> int */ +int __tag *const pci; + +/* { dg-final { scan-assembler-times " BTF_KIND_VAR 'pci'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_CONST" 1 } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_CONST ''(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_PTR" 1 } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_PTR ''(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_TYPE_TAG" 1 } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_TYPE_TAG '1'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_INT" 1 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-type-tag-3.c b/gcc/testsuite/gcc.dg/debug/btf/btf-type-tag-3.c new file mode 100644 index 000000000000..0bf385324562 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-type-tag-3.c @@ -0,0 +1,28 @@ +/* Test generation of BTF type tags with typedefs. */ +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +#define __tag1 __attribute__((btf_type_tag("1"))) +#define __tag2 __attribute__((btf_type_tag("2"))) + +typedef int *const cp; +typedef int __tag1 *tp; + +/* var("x") -> ptr -> type_tag("2") -> typedef("cp") -> const -> ptr -> int */ +cp __tag2 * x; + +/* var("y") -> const -> typedef("tp") -> ptr -> type_tag("1") -> int */ +const tp y; + +/* { dg-final { scan-assembler-times " BTF_KIND_VAR 'x'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_PTR" 1 } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_PTR ''(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_TYPE_TAG '2'\\)" 1 } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_TYPE_TAG '2'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_TYPEDEF 'cp'\\)" 1 } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_TYPEDEF 'cp'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_CONST" 1 } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_CONST ''(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_PTR" 1 } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_PTR ''(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_INT" 1 } } */ + +/* { dg-final { scan-assembler-times " BTF_KIND_VAR 'y'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_CONST" 1 } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_CONST ''(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_TYPEDEF 'tp'\\)" 1 } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_TYPEDEF 'tp'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_PTR" 1 } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_PTR ''(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_TYPE_TAG '1'\\)" 1 } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_TYPE_TAG '1'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_INT" 1 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-type-tag-4.c b/gcc/testsuite/gcc.dg/debug/btf/btf-type-tag-4.c new file mode 100644 index 000000000000..0ec7e571db2c --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-type-tag-4.c @@ -0,0 +1,24 @@ +/* Test generation of BTF type tag when applied to function prototypes. */ +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +#define __tag1 __attribute__((btf_type_tag("1"))) +#define __tag2 __attribute__((btf_type_tag("2"))) + +int * __tag1 +dothing (void __tag2 *ptr, int __tag2 __tag1 *xi) +{ + if (xi) + { + int *tmp = (int *) ptr; + return tmp + (*xi); + } + + return (int *) ptr; +} + +/* { dg-final { scan-assembler-times " BTF_KIND_TYPE_TAG '2'(\[\\r\\n\]+\[^\\r\\n\]*){2} btt_type: void" 1 } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_TYPE_TAG '2'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_INT" 1 } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_TYPE_TAG '1'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_TYPE_TAG '2'" 1 } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_PTR ''(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_TYPE_TAG '1'" 2 } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_PTR ''(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_TYPE_TAG '2'" 1 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-type-tag-c2x-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-type-tag-c2x-1.c new file mode 100644 index 000000000000..30aff57618eb --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-type-tag-c2x-1.c @@ -0,0 +1,22 @@ +/* Test BTF type tag generation using C2x standard attribute syntax. + C2x attribute syntax does not allow attributes to "slide around". */ +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA -std=c23" } */ + +#define __tag1 [[gnu::btf_type_tag ("1")]] +#define __tag2 [[gnu::btf_type_tag ("2")]] +#define __tag3 [[gnu::btf_type_tag ("3")]] + +/* Note that the BTF format still only allows to represent type tags on + pointer types, so we do not get any type_tag("1") from the below, as + it applies to the 'volatile int' type and cannot be represented. */ + +/* var(z) -> const -> ptr -> type_tag(2) -> type_tag(3) -> ptr -> type_tag(2) -> volatile -> int */ +volatile int __tag1 * __tag2 * __tag3 __tag2 const z; + +/* { dg-final { scan-assembler-times " BTF_KIND_VAR 'z'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_CONST" 1 } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_CONST ''(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_PTR" 1 } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_PTR ''(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_TYPE_TAG '2'\\)" 2 } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_TYPE_TAG '2'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_TYPE_TAG '3'\\)" 1 } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_TYPE_TAG '3'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_PTR" 1 } } */ +/* { dg-final { scan-assembler-times " BTF_KIND_TYPE_TAG '2'(\[\\r\\n\]+\[^\\r\\n\]*){2}\\(BTF_KIND_VOLATILE" 1 } } */ diff --git a/include/btf.h b/include/btf.h index 994d02dcfb39..d20ede23fb38 100644 --- a/include/btf.h +++ b/include/btf.h @@ -114,6 +114,8 @@ struct btf_type #define BTF_KIND_VAR 14 /* Variable. */ #define BTF_KIND_DATASEC 15 /* Section such as .bss or .data. */ #define BTF_KIND_FLOAT 16 /* Floating point. */ +#define BTF_KIND_DECL_TAG 17 /* Declaration tag. */ +#define BTF_KIND_TYPE_TAG 18 /* Type tag. */ #define BTF_KIND_ENUM64 19 /* Enumeration up to 64 bits. */ #define BTF_KIND_MAX BTF_KIND_ENUM64 #define NR_BTF_KINDS (BTF_KIND_MAX + 1) @@ -227,6 +229,18 @@ struct btf_enum64 uint32_t val_hi32; /* high 32-bit value for a 64-bit value Enumerator */ }; +/* BTF_KIND_DECL_TAG is followed by a single struct btf_decl_tag, which + describes the item to which the tag applies: + - If component_idx == (uint32_t) -1, then the tag applies to item referred + to by the type_id. + - Otherwise, the tag applies to the struct or union member, or function + argument of the type referred to by type_id with the 0-based index + given by component_idx. */ +struct btf_decl_tag +{ + uint32_t component_idx; +}; + #ifdef __cplusplus } #endif From 8b5d75121dcb5b5d435c03d4d8af5d1ffc719e50 Mon Sep 17 00:00:00 2001 From: David Faust Date: Wed, 5 Feb 2025 10:42:25 -0800 Subject: [PATCH 200/216] doc: document btf_type_tag and btf_decl_tag attributes gcc/ * doc/extend.texi (Common Function Attributes) (Common Variable Attributes): Document btf_decl_tag attribute. (Common Type Attributes): Document btf_type_tag attribute. --- gcc/doc/extend.texi | 79 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 384211f8b6dc..a12855de6a6e 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -1976,6 +1976,13 @@ declares that @code{my_alloc1} returns 16-byte aligned pointers and that @code{my_alloc2} returns a pointer whose value modulo 32 is equal to 8. +@cindex @code{btf_decl_tag} function attribute +@item btf_decl_tag +The @code{btf_decl_tag} attribute may be used to associate function +declarations with arbitrary strings by recording those strings in DWARF +and/or BTF information in the same way that it is used for variables. +See @ref{Common Variable Attributes}. + @cindex @code{cold} function attribute @item cold The @code{cold} attribute on functions is used to inform the compiler that @@ -7172,6 +7179,41 @@ is given by the product of arguments 1 and 2, and similarly, that @code{malloc_ptr}, like the standard C function @code{malloc}, returns an object whose size is given by argument 1 to the function. +@cindex @code{btf_decl_tag} variable attribute +@item btf_decl_tag (@var{argument}) +The @code{btf_decl_tag} attribute may be used to associate variable +declarations, struct or union member declarations, function +declarations, and function parameter declarations with arbitrary strings. +These strings are not interpreted by the compiler in any way, and have +no effect on code generation. Instead, these user-provided strings +are recorded in DWARF (via @code{DW_AT_GNU_annotation} and +@code{DW_TAG_GNU_annotation} extensions) and BTF information (via +@code{BTF_KIND_DECL_TAG} records), and associated to the attributed +declaration. If neither DWARF nor BTF information is generated, the +attribute has no effect. + +The argument is treated as a null-terminated sequence of zero or more +non-null bytes. Wide character strings are not supported. + +The attribute may be supplied multiple times for a single declaration, +in which case each distinct argument string will be recorded in a +separate DIE or BTF record, each associated to the declaration. For +a single declaration with multiple @code{btf_decl_tag} attributes, +the order of the @code{DW_TAG_GNU_annotation} DIEs produced is not +guaranteed to maintain the order of attributes in the source code. + +For example: + +@smallexample +int *foo __attribute__ ((btf_decl_tag ("__percpu"))); +@end smallexample + +@noindent +when compiled with @option{-gbtf} results in an additional +@code{BTF_KIND_DECL_TAG} BTF record to be emitted in the BTF info, +associating the string @samp{__percpu} with the @code{BTF_KIND_VAR} +record for the variable @code{foo}. + @cindex @code{cleanup} variable attribute @item cleanup (@var{cleanup_function}) The @code{cleanup} attribute runs a function when the variable goes @@ -8361,6 +8403,43 @@ is given by the product of arguments 1 and 2, and that @code{malloc_type}, like the standard C function @code{malloc}, returns an object whose size is given by argument 1 to the function. +@cindex @code{btf_type_tag} type attribute +@item btf_type_tag (@var{argument}) +The @code{btf_type_tag} attribute may be used to associate (to ``tag'') +particular types with arbitrary string annotations. These annotations +are recorded in debugging info by supported debug formats, currently +DWARF (via @code{DW_AT_GNU_annotation} and @code{DW_TAG_GNU_annotation} +extensions) and BTF (via @code{BTF_KIND_TYPE_TAG} records). These +annotation strings are not interpreted by the compiler in any way, and +have no effect on code generation. If neither DWARF nor BTF +information is generated, the attribute has no effect. + +The argument is treated as a null-terminated sequence of zero or more +non-null bytes. Wide character strings are not supported. + +The attribute may be supplied multiple times for a single type, in +which case each distinct argument string will be recorded in a +separate DIE or BTF record, each associated to the type. For a single +type with multiple @code{btf_type_tag} attributes, the order of the +@code{DW_TAG_GNU_annotation} DIEs produced is not guaranteed to +maintain the order of attributes in the source code. + +For example the following code: + +@smallexample +int * __attribute__ ((btf_type_tag ("__user"))) foo; +@end smallexample + +@noindent +when compiled with @option{-gbtf} results in an additional +@code{BTF_KIND_TYPE_TAG} BTF record to be emitted in the BTF info, +associating the string @samp{__user} with the normal @code{BTF_KIND_PTR} +record for the pointer-to-integer type used in the declaration. + +Note that the BTF format currently only has a representation for type +tags associated with pointer types. Type tags on non-pointer types +may be silently skipped when generating BTF. + @cindex @code{copy} type attribute @item copy @itemx copy (@var{expression}) From 4e1f9a0fbe52212663a6de7416d00bbe04d7d7cd Mon Sep 17 00:00:00 2001 From: David Faust Date: Mon, 28 Apr 2025 12:17:24 -0700 Subject: [PATCH 201/216] bpf: add tests for CO-RE and BTF tag interaction Add a couple of tests to ensure that BTF type/decl tags do not interfere with generation of BPF CO-RE relocations. gcc/testsuite/ * gcc.target/bpf/core-btf-tag-1.c: New test. * gcc.target/bpf/core-btf-tag-2.c: New test. --- gcc/testsuite/gcc.target/bpf/core-btf-tag-1.c | 23 +++++++++++++++++++ gcc/testsuite/gcc.target/bpf/core-btf-tag-2.c | 23 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 gcc/testsuite/gcc.target/bpf/core-btf-tag-1.c create mode 100644 gcc/testsuite/gcc.target/bpf/core-btf-tag-2.c diff --git a/gcc/testsuite/gcc.target/bpf/core-btf-tag-1.c b/gcc/testsuite/gcc.target/bpf/core-btf-tag-1.c new file mode 100644 index 000000000000..bd0fb3e40be4 --- /dev/null +++ b/gcc/testsuite/gcc.target/bpf/core-btf-tag-1.c @@ -0,0 +1,23 @@ +/* Test that BTF type tags do not interfere with CO-RE relocations. */ + +/* { dg-do compile } */ +/* { dg-options "-gbtf -dA -mco-re" } */ + +struct bpf_cpumask { + int i; + char c; +} __attribute__((preserve_access_index)); + +struct kptr_nested { + struct bpf_cpumask * __attribute__((btf_type_tag("kptr"))) mask; +} __attribute__((preserve_access_index)); + +void foo (struct kptr_nested *nested) +{ + if (nested && nested->mask) + nested->mask->i = 5; +} + +/* { dg-final { scan-assembler-times "bpfcr_insn" 3 } } */ +/* { dg-final { scan-assembler-times "bpfcr_type \\(struct" 3 } } */ +/* { dg-final { scan-assembler-times "bpfcr_astr_off \\(\"0:0\"\\)" 3 } } */ diff --git a/gcc/testsuite/gcc.target/bpf/core-btf-tag-2.c b/gcc/testsuite/gcc.target/bpf/core-btf-tag-2.c new file mode 100644 index 000000000000..6654ffe3ae05 --- /dev/null +++ b/gcc/testsuite/gcc.target/bpf/core-btf-tag-2.c @@ -0,0 +1,23 @@ +/* Test that BTF decl tags do not interfere with CO-RE relocations. */ + +/* { dg-do compile } */ +/* { dg-options "-gbtf -dA -mco-re" } */ + +struct bpf_cpumask { + int i; + char c; +} __attribute__((preserve_access_index)); + +struct kptr_nested { + struct bpf_cpumask * mask __attribute__((btf_decl_tag ("decltag"))); +} __attribute__((preserve_access_index)); + +void foo (struct kptr_nested *nested __attribute__((btf_decl_tag ("foo")))) +{ + if (nested && nested->mask) + nested->mask->i = 5; +} + +/* { dg-final { scan-assembler-times "bpfcr_insn" 3 } } */ +/* { dg-final { scan-assembler-times "bpfcr_type \\(struct" 3 } } */ +/* { dg-final { scan-assembler-times "bpfcr_astr_off \\(\"0:0\"\\)" 3 } } */ From 5a4a4197c3e5bdce1f5f82d77c06b299d6ed6087 Mon Sep 17 00:00:00 2001 From: YunQiang Su Date: Fri, 10 Oct 2025 08:16:32 +0800 Subject: [PATCH 202/216] Revert "MIPS/testsuite: Use isa_rev=2 instead of >=2" This reverts commit 10bb371eee6357cd32ffc8cfddcd62bd8b182c4b. --- gcc/testsuite/gcc.target/mips/mips16e2-cache.c | 2 +- gcc/testsuite/gcc.target/mips/mips16e2-cmov.c | 2 +- gcc/testsuite/gcc.target/mips/mips16e2-gp.c | 2 +- gcc/testsuite/gcc.target/mips/mips16e2.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/gcc/testsuite/gcc.target/mips/mips16e2-cache.c b/gcc/testsuite/gcc.target/mips/mips16e2-cache.c index c79157589992..8caacb17d7a9 100644 --- a/gcc/testsuite/gcc.target/mips/mips16e2-cache.c +++ b/gcc/testsuite/gcc.target/mips/mips16e2-cache.c @@ -1,4 +1,4 @@ -/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 isa_rev=2 -mmips16e2" } */ +/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 isa_rev>=2 -mmips16e2" } */ /* { dg-skip-if "naming registers makes this a code quality test" { *-*-* } { "-O0" } { "" } } */ /* Test cache. */ diff --git a/gcc/testsuite/gcc.target/mips/mips16e2-cmov.c b/gcc/testsuite/gcc.target/mips/mips16e2-cmov.c index 8d71e88596cc..a8a28a4d8600 100644 --- a/gcc/testsuite/gcc.target/mips/mips16e2-cmov.c +++ b/gcc/testsuite/gcc.target/mips/mips16e2-cmov.c @@ -1,4 +1,4 @@ -/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 isa_rev=2 -mmips16e2 -mbranch-cost=2" } */ +/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 isa_rev>=2 -mmips16e2 -mbranch-cost=2" } */ /* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */ /* Test MOVN. */ diff --git a/gcc/testsuite/gcc.target/mips/mips16e2-gp.c b/gcc/testsuite/gcc.target/mips/mips16e2-gp.c index 5fab454d5e06..70d6230f017f 100644 --- a/gcc/testsuite/gcc.target/mips/mips16e2-gp.c +++ b/gcc/testsuite/gcc.target/mips/mips16e2-gp.c @@ -1,4 +1,4 @@ -/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 isa_rev=2 -mmips16e2" } */ +/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 isa_rev>=2 -mmips16e2" } */ /* { dg-skip-if "per-function expected output" { *-*-* } { "-flto" } { "" } } */ /* Generate GP-relative ADDIU. */ diff --git a/gcc/testsuite/gcc.target/mips/mips16e2.c b/gcc/testsuite/gcc.target/mips/mips16e2.c index 33c4bb52ccca..1b4b840bb404 100644 --- a/gcc/testsuite/gcc.target/mips/mips16e2.c +++ b/gcc/testsuite/gcc.target/mips/mips16e2.c @@ -1,4 +1,4 @@ -/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 isa_rev=2 -mmips16e2" } */ +/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 isa_rev>=2 -mmips16e2" } */ /* { dg-skip-if "per-function expected output" { *-*-* } { "-flto" } { "" } } */ /* ANDI is a two operand instruction. Hence, it won't be generated if src and From 4da48d69440b09eae481b8cef6037128889ae6c4 Mon Sep 17 00:00:00 2001 From: YunQiang Su Date: Fri, 10 Oct 2025 08:16:38 +0800 Subject: [PATCH 203/216] Revert "MIPS: Add conditions for use of the -mmips16e2 and -mips16 option." This reverts commit f731fa580156d07f6347cb87931ce7b9cf2acbb4. --- gcc/config/mips/mips.cc | 19 ------------------- .../gcc.target/mips/mips16e2-cache.c | 2 +- gcc/testsuite/gcc.target/mips/mips16e2-cmov.c | 2 +- gcc/testsuite/gcc.target/mips/mips16e2-gp.c | 2 +- gcc/testsuite/gcc.target/mips/mips16e2.c | 2 +- 5 files changed, 4 insertions(+), 23 deletions(-) diff --git a/gcc/config/mips/mips.cc b/gcc/config/mips/mips.cc index 1fa7ba8451c5..42dfc3b35119 100644 --- a/gcc/config/mips/mips.cc +++ b/gcc/config/mips/mips.cc @@ -20433,16 +20433,6 @@ mips_option_override (void) if (TARGET_MICROMIPS && TARGET_MIPS16) error ("unsupported combination: %s", "-mips16 -mmicromips"); - /* Make -mmips16e2 imply -mips16 and forbid its coexistence with - -mmicromips as the ASE requires. */ - if (TARGET_MIPS16E2) - { - if (TARGET_MICROMIPS) - error ("unsupported combination: %s", "-mmips16e2 -mmicromips"); - - target_flags |= MASK_MIPS16; - } - /* Prohibit Paired-Single and MSA combination. This is software restriction rather than architectural. */ if (ISA_HAS_MSA && TARGET_PAIRED_SINGLE_FLOAT) @@ -20695,15 +20685,6 @@ mips_option_override (void) "-mcompact-branches=never"); } - /* MIPS16* ASE is forbidden in Release 6, so -mips16 is not available - for MIPS R6 onwards. */ - if ((mips_base_compression_flags & MASK_MIPS16) && mips_isa_rev >= 6) - error ("MIPS16* ASE is forbidden in Release 6"); - - /* Make sure that the user use Release[2,5] when using -mmips16e2. */ - if (TARGET_MIPS16E2 && mips_isa_rev < 2) - error ("%<-mmips16e2%> requires Release[2,5]"); - /* Require explicit relocs for MIPS R6 onwards. This enables simplification of the compact branch and jump support through the backend. */ if (!TARGET_EXPLICIT_RELOCS && mips_isa_rev >= 6) diff --git a/gcc/testsuite/gcc.target/mips/mips16e2-cache.c b/gcc/testsuite/gcc.target/mips/mips16e2-cache.c index 8caacb17d7a9..dcc39b580f52 100644 --- a/gcc/testsuite/gcc.target/mips/mips16e2-cache.c +++ b/gcc/testsuite/gcc.target/mips/mips16e2-cache.c @@ -1,4 +1,4 @@ -/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 isa_rev>=2 -mmips16e2" } */ +/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 -mips32r2 -mips16 -mmips16e2" } */ /* { dg-skip-if "naming registers makes this a code quality test" { *-*-* } { "-O0" } { "" } } */ /* Test cache. */ diff --git a/gcc/testsuite/gcc.target/mips/mips16e2-cmov.c b/gcc/testsuite/gcc.target/mips/mips16e2-cmov.c index a8a28a4d8600..129ea23b65b1 100644 --- a/gcc/testsuite/gcc.target/mips/mips16e2-cmov.c +++ b/gcc/testsuite/gcc.target/mips/mips16e2-cmov.c @@ -1,4 +1,4 @@ -/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 isa_rev>=2 -mmips16e2 -mbranch-cost=2" } */ +/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 -mips16 -mmips16e2 -mbranch-cost=2" } */ /* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */ /* Test MOVN. */ diff --git a/gcc/testsuite/gcc.target/mips/mips16e2-gp.c b/gcc/testsuite/gcc.target/mips/mips16e2-gp.c index 70d6230f017f..7955472bde30 100644 --- a/gcc/testsuite/gcc.target/mips/mips16e2-gp.c +++ b/gcc/testsuite/gcc.target/mips/mips16e2-gp.c @@ -1,4 +1,4 @@ -/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 isa_rev>=2 -mmips16e2" } */ +/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 -mips16 -mmips16e2" } */ /* { dg-skip-if "per-function expected output" { *-*-* } { "-flto" } { "" } } */ /* Generate GP-relative ADDIU. */ diff --git a/gcc/testsuite/gcc.target/mips/mips16e2.c b/gcc/testsuite/gcc.target/mips/mips16e2.c index 1b4b840bb404..166aa7422687 100644 --- a/gcc/testsuite/gcc.target/mips/mips16e2.c +++ b/gcc/testsuite/gcc.target/mips/mips16e2.c @@ -1,4 +1,4 @@ -/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 isa_rev>=2 -mmips16e2" } */ +/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 -mips16 -mmips16e2" } */ /* { dg-skip-if "per-function expected output" { *-*-* } { "-flto" } { "" } } */ /* ANDI is a two operand instruction. Hence, it won't be generated if src and From ea7fa6bf4876ad0b66a7cb92324f6f8f9b646038 Mon Sep 17 00:00:00 2001 From: GCC Administrator Date: Fri, 10 Oct 2025 00:21:51 +0000 Subject: [PATCH 204/216] Daily bump. --- ChangeLog | 12 + gcc/ChangeLog | 423 ++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/analyzer/ChangeLog | 118 +++++++++ gcc/c-family/ChangeLog | 24 ++ gcc/cp/ChangeLog | 41 +++ gcc/fortran/ChangeLog | 10 + gcc/testsuite/ChangeLog | 164 ++++++++++++ include/ChangeLog | 14 + libatomic/ChangeLog | 11 + libcc1/ChangeLog | 4 + libgcc/config/avr/libf7/ChangeLog | 28 ++ libstdc++-v3/ChangeLog | 18 ++ 13 files changed, 868 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 53ae63bc9d9f..805299d1e39f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2025-10-09 Prathamesh Kulkarni + Matthew Malcolmson + + PR driver/81358 + * Makefile.def: Add no_atomic=true for libraries that don't depend on + libatomic. + * Makefile.tpl: Export TARGET_CONFIGDIRS and create rule to + add dependencies for libatomic. + * configure.ac: Add libatomic to bootstrap_target_libs. + * Makefile.in: Regenerate. + * configure: Regenerate. + 2025-10-02 H.J. Lu * Makefile.in: Regenerated. diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 19a17a393597..96e5a1fbc01b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,426 @@ +2025-10-10 YunQiang Su + + Revert: + 2025-09-27 Jie Mei + + * config/mips/mips.cc(mips_option_override):Add conditions + for use of the -mmips16e2 and -mips16 option. + +2025-10-09 David Faust + + * doc/extend.texi (Common Function Attributes) + (Common Variable Attributes): Document btf_decl_tag attribute. + (Common Type Attributes): Document btf_type_tag attribute. + +2025-10-09 David Faust + + * btfout.cc (get_btf_kind): Handle DECL_TAG and TYPE_TAG kinds. + (btf_calc_num_vbytes): Likewise. + (btf_asm_type): Likewise. + (output_asm_btf_vlen_bytes): Likewise. + (output_btf_tags): New. + (btf_output): Call it here. + (btf_add_used_type): Replace with simple wrapper around... + (btf_add_used_type_1): ...the implementation. Handle + BTF_KIND_DECL_TAG and BTF_KIND_TYPE_TAG. + (btf_add_vars): Update btf_add_used_type call. + (btf_assign_tag_ids): New. + (btf_mark_type_used): Update btf_add_used_type call. + (btf_collect_pruned_types): Likewise. Handle type and decl tags. + (btf_finish): Call btf_assign_tag_ids. + +2025-10-09 David Faust + + * ctfc.cc (ctf_dtu_d_union_selector): Handle CTF_K_DECL_TAG and + CTF_K_TYPE_TAG. + (ctf_add_type_tag, ctf_add_decl_tag): New. + (ctf_add_variable): Return the new ctf_dvdef_ref rather than zero. + (new_ctf_container): Initialize new members. + (ctfc_delete_container): Deallocate new members. + * ctfc.h (ctf_dvdef, ctf_dvdef_t, ctf_dvdef_ref): Move forward + declarations earlier in file. + (ctf_decl_tag_t): New typedef. + (ctf_dtdef): Add ctf_decl_tag_t member to dtd_u union. + (ctf_dtu_d_union_enum): Add new CTF_DTU_D_TAG enumerator. + (ctf_container): Add ctfc_tags vector and ctfc_type_tags_map hash_map + members. + (ctf_add_type_tag, ctf_add_decl_tag): New function protos. + (ctf_add_variable): Change prototype return type to ctf_dvdef_ref. + * dwarf2ctf.cc (gen_ctf_type_tags, gen_ctf_decl_tags) + (gen_ctf_decl_tags_for_var): New static functions. + (gen_ctf_pointer_type): Handle type tags. + (gen_ctf_sou_type): Handle decl tags. + (gen_ctf_function_type): Likewise. + (gen_ctf_variable): Likewise. + (gen_ctf_function): Likewise. + (gen_ctf_type): Handle TAG_GNU_annotation DIEs. + +2025-10-09 David Faust + + * dwarf2out.cc (struct annotation_node, struct annotation_node_hasher) + (btf_tag_htab): New ancillary structures and hash table. + (annotation_node_hasher::hash, annotation_node_hasher::equal): New. + (hash_btf_tag, gen_btf_tag_dies, maybe_gen_btf_type_tag_dies) + (maybe_gen_btf_decl_tag_dies): New functions. + (modified_type_die): Add new argument to pass type attributes. + Handle btf_type_tag, and update recursive calls. + (base_type_for_mode): Add new arg for modified_type_die call. + (add_type_attribute): Likewise. + (gen_array_type_die): Call maybe_gen_btf_type_tag_dies for the type. + (gen_formal_parameter_die): Call maybe_gen_btf_decl_tag_dies for the + parameter. + (override_type_for_decl_p): Add new arg for modified_type_die call. + (force_type_die): Likewise. + (gen_tagged_type_die): Call maybe_gen_btf_type_tag_dies for the type. + (gen_decl_die): Call maybe_gen_btf_decl_tag_dies for the decl. + (dwarf2out_finish): Empty btf_tag_htab. + (dwarf2out_cc_finalize): Delete btf_tag_htab hash table. + +2025-10-09 Jakub Jelinek + + * ginclude/stdarg.h (va_start): Use __builtin_c23_va_start + also for C++26. + (__STDC_VERSION_STDARG_H__): Also define for C++26. + +2025-10-09 David Malcolm + + * diagnostic-global-context.cc: Define INCLUDE_VECTOR. + * diagnostics/buffering.cc: Likewise. + * diagnostics/context.cc (context::finish): Call + finalize_extensions on each sink. + (sink::dump): Dump any extensions. + (sink::finalize_extensions): New. + * diagnostics/macro-unwinding.cc: Define INCLUDE_VECTOR. + * diagnostics/selftest-context.cc: Likewise. + * diagnostics/sink.h (class sink::extension): New. + (sink::add_extension): New. + (sink::finalize_extensions): New decl. + (sink::m_extensions): New member. + * gcc.cc: Define INCLUDE_VECTOR. + * langhooks.cc: Likewise. + * opts.cc: Likewise. + * tree-diagnostic-client-data-hooks.cc: Likewise. + * tree-diagnostic.cc: Likewise. + +2025-10-09 Filip Kastl + + * Makefile.in: Add gimple-ssa-pta-constraints.cc. + * tree-ssa-structalias.cc (determine_global_memory_access): + External linkage, move to namespace pointer_analysis. + (fndecl_maybe_in_other_partition): External linkage, move to + namespace pointer_analysis. + (new_var_info): External linkage, move to namespace + pointer_analysis. + (create_variable_info_for): Move to + gimple-ssa-pta-constraints.cc. + (lookup_vi_for_tree): External linkage, move to namespace + pointer_analysis, move to gimple-ssa-pta-constraints.cc. + (type_can_have_subvars): Move to gimple-ssa-pta-constraints.cc. + (make_param_constraints): Move to gimple-ssa-pta-constraints.cc. + (get_call_vi): Move to gimple-ssa-pta-constraints.cc. + (lookup_call_use_vi): External linkage, move to namespace + pointer_analysis, move to gimple-ssa-pta-constraints.cc. + (lookup_call_clobber_vi): External linkage, move to namespace + pointer_analysis, move to gimple-ssa-pta-constraints.cc. + (get_call_use_vi): Move to gimple-ssa-pta-constraints.cc. + (get_call_clobber_vi): Move to gimple-ssa-pta-constraints.cc. + (get_constraint_for_1): Move to gimple-ssa-pta-constraints.cc. + (get_constraint_for): Move to gimple-ssa-pta-constraints.cc. + (get_constraint_for_rhs): Move to gimple-ssa-pta-constraints.cc. + (do_deref): Move to gimple-ssa-pta-constraints.cc. + (constraint_pool): Move to gimple-ssa-pta-constraints.cc. + (new_constraint): Move to gimple-ssa-pta-constraints.cc. + (insert_vi_for_tree): Move to gimple-ssa-pta-constraints.cc. + (alias_get_name): Move to gimple-ssa-pta-constraints.cc. + (get_vi_for_tree): Move to gimple-ssa-pta-constraints.cc. + (new_scalar_tmp_constraint_exp): Move to + gimple-ssa-pta-constraints.cc. + (get_constraint_for_ssa_var): Move to + gimple-ssa-pta-constraints.cc. + (process_constraint): Move to gimple-ssa-pta-constraints.cc. + (bitpos_of_field): Move to gimple-ssa-pta-constraints.cc. + (get_constraint_for_ptr_offset): Move to + gimple-ssa-pta-constraints.cc. + (get_constraint_for_component_ref): Move to + gimple-ssa-pta-constraints.cc. + (get_constraint_for_address_of): Move to + gimple-ssa-pta-constraints.cc. + (process_all_all_constraints): Move to + gimple-ssa-pta-constraints.cc. + (do_structure_copy): Move to gimple-ssa-pta-constraints.cc. + (make_constraints_to): Move to gimple-ssa-pta-constraints.cc. + (make_constraint_to): Move to gimple-ssa-pta-constraints.cc. + (make_constraint_from): Move to gimple-ssa-pta-constraints.cc. + (make_copy_constraint): Move to gimple-ssa-pta-constraints.cc. + (make_escape_constraint): Move to gimple-ssa-pta-constraints.cc. + (make_indirect_escape_constraint): Move to + gimple-ssa-pta-constraints.cc. + (make_transitive_closure_constraints): Move to + gimple-ssa-pta-constraints.cc. + (make_any_offset_constraints): Move to + gimple-ssa-pta-constraints.cc. + (struct obstack fake_var_decl_obstack): Move to + gimple-ssa-pta-constraints.cc. + (build_fake_var_decl): Move to gimple-ssa-pta-constraints.cc. + (make_heapvar): Move to gimple-ssa-pta-constraints.cc. + (make_constraint_from_restrict): Move to + gimple-ssa-pta-constraints.cc. + (make_constraint_from_global_restrict): Move to + gimple-ssa-pta-constraints.cc. + (get_function_part_constraint): Move to + gimple-ssa-pta-constraints.cc. + (handle_call_arg): Move to gimple-ssa-pta-constraints.cc. + (handle_rhs_call): Move to gimple-ssa-pta-constraints.cc. + (handle_lhs_call): Move to gimple-ssa-pta-constraints.cc. + (get_fi_for_callee): Move to gimple-ssa-pta-constraints.cc. + (find_func_aliases_for_call_arg): Move to + gimple-ssa-pta-constraints.cc. + (find_func_aliases_for_builtin_call): Move to + gimple-ssa-pta-constraints.cc. + (find_func_aliases_for_call): Move to + gimple-ssa-pta-constraints.cc. + (find_func_aliases): Move to gimple-ssa-pta-constraints.cc. + (process_ipa_clobber): Move to gimple-ssa-pta-constraints.cc. + (find_func_clobbers): Move to gimple-ssa-pta-constraints.cc. + (struct fieldoff): Move to gimple-ssa-pta-constraints.cc. + (fieldoff_compare): Move to gimple-ssa-pta-constraints.cc. + (sort_fieldstack): Move to gimple-ssa-pta-constraints.cc. + (var_can_have_subvars): Move to gimple-ssa-pta-constraints.cc. + (type_must_have_pointers): Move to + gimple-ssa-pta-constraints.cc. + (field_must_have_pointers): Move to + gimple-ssa-pta-constraints.cc. + (push_fields_onto_fieldstack): Move to + gimple-ssa-pta-constraints.cc. + (count_num_arguments): Move to gimple-ssa-pta-constraints.cc. + (create_function_info_for): Move to + gimple-ssa-pta-constraints.cc. + (check_for_overlaps): Move to gimple-ssa-pta-constraints.cc. + (create_variable_info_for_1): Move to + gimple-ssa-pta-constraints.cc. + (intra_create_variable_infos): Move to + gimple-ssa-pta-constraints.cc. + (init_base_vars): Move to gimple-ssa-pta-constraints.cc. + (init_constraint_builder): Move to + gimple-ssa-pta-constraints.cc. + (delete_constraint_builder): Move to + gimple-ssa-pta-constraints.cc. + (intra_build_constraints): Move to + gimple-ssa-pta-constraints.cc. + (delete_points_to_sets): Move to gimple-ssa-pta-constraints.cc. + (associate_varinfo_to_alias): Move to + gimple-ssa-pta-constraints.cc + (refered_from_nonlocal_fn): Move to + gimple-ssa-pta-constraints.cc + (refered_from_nonlocal_var): Move to + gimple-ssa-pta-constraints.cc + (ipa_create_function_infos): Move to + gimple-ssa-pta-constraints.cc + (ipa_create_global_variable_infos): Move to + gimple-ssa-pta-constraints.cc + (ipa_build_constraints): Move to gimple-ssa-pta-constraints.cc + * tree-ssa-structalias.h (struct constraint_stats): + (determine_global_memory_access): External linkage, move to + namespace pointer_analysis. + (fndecl_maybe_in_other_partition): External linkage, move to + namespace pointer_analysis. + (new_var_info): External linkage, move to namespace + pointer_analysis. + * gimple-ssa-pta-constraints.cc: New file. + * gimple-ssa-pta-constraints.h: New file. + +2025-10-09 Filip Kastl + + * tree-ssa-structalias.cc (init_constraint_builder): New + function. + (delete_constraint_builder): New function. + (compute_points_to_sets): Put constraint building into + intra_build_constraints and call it. + (intra_build_constraints): New function. + (delete_points_to_sets): Put cleanup of constraint builder + global vars into delete_constraint_builder and call it. + (ipa_pta_execute): Put constraint building into + ipa_build_constraints and call it. + (ipa_create_function_infos): New function. + (ipa_create_global_variable_infos): New function. + (ipa_build_constraints): New function. + +2025-10-09 Takayuki 'January June' Suwa + + * config/xtensa/xtensa-protos.h (xtensa_constantsynth): Remove. + * config/xtensa/xtensa.cc + (#include): Remove "context.h" and "pass_manager.h". + (machine_function): Remove "litpool_usage" member. + (xtensa_constantsynth_2insn, xtensa_constantsynth_rtx_SLLI, + xtensa_constantsynth_rtx_ADDSUBX, xtensa_constantsynth): Remove. + (constantsynth_method_lshr_m1, split_hwi_to_MOVI_ADDMI, + constantsynth_method_16bits, constantsynth_method_32bits, + constantsynth_method_square): New worker function related to + constant synthesis methods. + (constantsynth_method_info, constantsynth_methods): + New structure representing the list of all constant synthesis + methods. + (constantsynth_info): New structure that stores internal + information for "constantsynth". + (constantsynth_pass1, verify_synth_seq, constantsynth_pass2): + New functions that are the core of "constantsynth". + (do_largeconst): Add a call to constantsynth_pass1() to the insn + enumeration loop, and add a call to constantsynth_pass2() to the + end of this function. + * config/xtensa/xtensa.md (SHI): Remove. + (The two auxiliary define_splits for mov[sh]i_internal): Remove. + (The two auxiliary define_splits for movsf_internal): Remove. + +2025-10-09 Takayuki 'January June' Suwa + + * config/xtensa/xtensa-protos.h + (xtensa_split_DI_reg_imm): Remove. + * config/xtensa/xtensa.cc (xtensa_split_DI_reg_imm): Remove. + (split_DI_SF_DF_const): New worker function. + (do_largeconst): Add a call to split_DI_SF_DF_const() to the insn + enumeration loop. + * config/xtensa/xtensa.md (movdi): Remove split code when the + source is constant. + (movdi_internal): Add a new constraint pair (a, Y) to the second + of the existing constraint alternatives. + (The auxiliary define_split for movdi_internal): Remove. + +2025-10-09 Takayuki 'January June' Suwa + + * config/xtensa/xtensa.cc (xt_full_rtx_costs): + New struct, derived from full_rtx_costs. + (FPreg_neg_scaled_simm12b_1, FPreg_neg_scaled_simm12b): + New worker functions. + (do_largeconst): Add a call to FPreg_neg_scaled_simm12b() to the + insn enumeration loop. + +2025-10-09 Takayuki 'January June' Suwa + + * config/xtensa/constraints.md (Y): + Change to reference xtensa_postreload_completed_p() instead of + xtensa_split1_finished_p(). + * config/xtensa/predicates.md (move_operand): Ditto. + * config/xtensa/t-xtensa (PASSES_EXTRA): + Add xtensa-passes.def as target-specific pass description. + * config/xtensa/xtensa-passes.def: + New definition file that inserts pass_xtensa_largeconst after + pass_postreload_cse. + * config/xtensa/xtensa-protos.h (xtensa_split1_finished_p): Remove. + (xtensa_postreload_completed_p, make_pass_xtensa_largeconst): + New function prototypes. + * config/xtensa/xtensa.cc (machine_function): + Add a new member "postreload_completed". + (xtensa_emit_move_sequence): + Change to reference xtensa_postreload_completed_p() instead of + can_create_pseudo_p(). + (xtensa_split1_finished_p): Remove. + (xtensa_postreload_completed_p): New function. + (xtensa_legitimate_constant_p): Change to also consider + xtensa_postreload_completed_p(). + (litpool_set_src_1, litpool_set_src, do_largeconst, + rest_of_handle_largeconst): + New sub-functions for pass_xtensa_largeconst. + (pass_data_xtensa_largeconst, pass_xtensa_largeconst): + New target-specific pass definition. + (make_pass_xtensa_largeconst): + New function called by the pass manager. + * config/xtensa/xtensa.md + (The auxiliary define_split for movdi_internal): + Change to reference xtensa_postreload_completed_p() instead of + xtensa_split1_finished_p(). + (The first of three auxiliary define_splits for mov[sh]i_internal): + Remove. + +2025-10-09 Takayuki 'January June' Suwa + + * config/xtensa/xtensa.cc + (TARGET_MD_ASM_ADJUST): New macro definition. + (xtensa_md_asm_adjust): New function prototype and definition, that + prepends all 'g'-constraints in the "constraints" vector with 'n', + if neither TARGET_CONST16 nor TARGET_AUTO_LITPOOLS is enabled. + +2025-10-09 Richard Biener + + PR tree-optimization/122212 + * tree-ssa-forwprop.cc (simplify_count_zeroes): Apply + bias for CLZ after dealing with the zero special value. + +2025-10-09 Kito Cheng + + * config/riscv/riscv-protos.h (vls_mode_valid_p): New argument + allow_up_to_lmul_8. + * config/riscv/riscv-v.cc (autovectorize_vector_modes): Set + allow_up_to_lmul_8 to false. + (vls_mode_valid_p): Add new argument allow_up_to_lmul_8, and use + it to determine whether to allow LMUL 8. + +2025-10-09 Prathamesh Kulkarni + Matthew Malcolmson + + PR driver/81358 + * common.opt: New option -flink-libatomic. + * gcc.cc (LINK_LIBATOMIC_SPEC): New macro. + * config/alpha/linux.h (LINK_GCC_C_SEQUENCE_SPEC): Use LINK_LIBATOMIC_SPEC. + * config/arm/uclinux-elf.h: Likewise. + * config/arm/unknown-elf.h: Likewise. + * config/avr/avrlibc.h: Likewise. + * config/bfin/linux.h: Likewise. + * config/darwin.h: Likewise. + * config/gnu-user.h: Likewise. + * config/lm32/uclinux-elf.h: Likewise. + * config/rs6000/linux64.h: Likewise. + * config/rs6000/rtems.h: Likewise. + * config/sparc/sparc.h: Likewise. + * doc/invoke.texi: Document -flink-libatomic. + * configure.ac: Define TARGET_PROVIDES_LIBATOMIC. + * configure: Regenerate. + * config.in: Regenerate. + * common.opt.urls: Regenerate. + +2025-10-09 Robin Dapp + + * config/aarch64/aarch64.cc (aarch64_builtin_support_vector_misalignment): + Remove type. + * config/arm/arm.cc (arm_builtin_support_vector_misalignment): + Ditto. + * config/epiphany/epiphany.cc (epiphany_support_vector_misalignment): + Ditto. + * config/gcn/gcn.cc (gcn_vectorize_support_vector_misalignment): + Ditto. + * config/loongarch/loongarch.cc (loongarch_builtin_support_vector_misalignment): + Ditto. + * config/riscv/riscv.cc (riscv_support_vector_misalignment): + Ditto. + * config/rs6000/rs6000.cc (rs6000_builtin_support_vector_misalignment): + Ditto. + * config/s390/s390.cc (s390_support_vector_misalignment): + Ditto. + * doc/tm.texi: Adjust vector misalignment docs. + * target.def: Ditto. + * targhooks.cc (default_builtin_support_vector_misalignment): + Remove type. + * targhooks.h (default_builtin_support_vector_misalignment): + Ditto. + * tree-vect-data-refs.cc (vect_can_force_dr_alignment_p): + Set misalignment for gather/scatter and remove type. + (vect_supportable_dr_alignment): Ditto. + +2025-10-09 Sam James + + PR c++/117219 + * doc/invoke.texi (-fstrict-aliasing): Explain that type-punning + through a union in C++ is supported as a GNU extension. + +2025-10-09 Sam James + + * doc/invoke.texi: Add missing full stop. + +2025-10-09 Sam James + + PR tree-optimization/18501 + * doc/invoke.texi (-Wmaybe-uninitialized): Mention interaction with + CCP. + 2025-10-08 Antoni Boucher * configure: Regenerate. diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 80c58c12bccf..4f7062df3d1c 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20251009 +20251010 diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog index d435387a4ded..a613dc563a31 100644 --- a/gcc/analyzer/ChangeLog +++ b/gcc/analyzer/ChangeLog @@ -1,3 +1,121 @@ +2025-10-09 David Malcolm + + * access-diagram.cc: Update for renaming of fields of binding_key. + * ana-state-to-diagnostic-state.cc: Likewise. + * bounds-checking.cc: Likewise. Add store_manager param. + * call-summary.cc: Likewise. + * diagnostic-manager.cc: Drop includes of "basic-block.h" and + "gimple.h". + * engine.cc: Likewise. + * infinite-recursion.cc: Update for renaming of fields of + binding_key. + * kf.cc: Pass store_manager to mark_as_escaped. + * program-state.cc: Update for renaming of fields of binding_key. + * region-model-asm.cc: Pass store manager to + get_or_create_cluster. + * region-model-reachability.cc: Likewise. Update for renaming of + fields of binding_key. + * region-model.cc: Likewise. + (struct bad_pointer_finder): Drop. + (region_model::poison_any_pointers_to_descendents): Implement + iteration directly, rather than using store::for_each_binding. + Drop return value. + (selftest::test_struct): Set field in order y then x. Verify + that iteration yields bindings in order x then y. + * region-model.h + (region_model::poison_any_pointers_to_descendents): Drop return + value. + * region.cc: Pass store manager to get_or_create_cluster. + * store.cc (binding_map::const_iterator::operator==): New. + (binding_map::const_iterator::operator++): New. + (binding_map::const_iterator::operator*): New. + (binding_map::iterator::operator==): New. + (binding_map::iterator::operator++): New. + (binding_map::iterator::operator*): New. + (binding_map::binding_map): Reimplement. + (binding_map::operator=): Reimplement. + (binding_map::operator==): Reimplement. + (binding_map::hash): Reimplement. + (binding_map::get): Reimplement. + (binding_map::put): Reimplement. + (binding_map::overwrite): New. + (binding_map::remove): New. + (binding_map::begin): New. + (binding_map::end): New. + (binding_map::elements): New. + (binding_map::dump_to_pp): Reimplement. + (binding_map::to_json): Iterate over *this directly; drop sort. + (binding_map::add_to_tree_widget): Likewise. + (binding_map::cmp): Reimplement. + (binding_map::get_overlapping_bindings): Update for field + renamings. + (binding_cluster::binding_cluster): Add store_mgr param. + (binding_cluster::validate): Update for field renamings. + (binding_cluster::bind_compound_sval): Likewise. + (binding_cluster::purge_state_involving): Likewise. + (binding_cluster::maybe_get_compound_binding): Likewise. Add + store_mgr param. + (binding_cluster::can_merge_p): Likewise. Update for new + implementation. + (binding_cluster::make_unknown_relative_to): Likewise. + (binding_cluster::on_unknown_fncall): Likewise. + (binding_cluster::on_asm): Likewise. + (binding_cluster::get_representative_path_vars): Likewise. + (store::set_value): Likewise. + (store::on_maybe_live_values): Pass around store_manager. + (store::fill_region): Likewise. + (store::mark_region_as_unknown): Likewise. + (store::get_or_create_cluster): Likewise. + (store::can_merge_p): Likewise. + (store::mark_as_escaped): Likewise. + (store::canonicalize): Update for field renamings. + (store::loop_replay_fixup): Likewise. Pass around store_manager. + (store::replay_call_summary_cluster): Likewise. + (selftest::test_binding_map_ops): New. + (selftest::analyzer_store_cc_tests): Call it. + * store.h (class binding_map): Reimplement. + (binding_map::map_t): Drop. + (struct binding_map::symbolic_binding): New. + (binding_map::concrete_bindings_t): New. + (binding_map::symbolic_bindings_t): New. + (struct binding_map::bindings_pair): New. + (class binding_map::const_iterator): New. + (class binding_map::iterator): New. + (binding_map::get): Reimplement. + (binding_map::overwrite): New decl. + (binding_map::remove): Reimplement. + (binding_map::clear): Reimplement. + (binding_map::put): Reimplement. + (binding_map::empty_p): Reimplement. + (binding_map::begin): Reimplement. + (binding_map::end): Reimplement. + (binding_map::elements): Reimplement. + (binding_map::m_map): Drop field. + (binding_map::m_store_mgr): New field. + (binding_map::m_concrete): New field. + (binding_map::m_symbolic): New field. + (BindingVisitor): Drop. + (binding_cluster::map_t): Drop. + (binding_cluster::iterator_t): Reimplement. + (binding_cluster::const_iterator_t): New. + (binding_cluster::binding_cluster): Add store_mgr param. + (binding_cluster::for_each_value): Reimplement. + (binding_cluster::empty_p): Reimplement. + (binding_cluster::for_each_binding): Drop. + (binding_cluster::begin): Split into const/non-const overloads. + (binding_cluster::get_map): Add non-const overload. + (store::get_or_create_cluster): Add store_mgr param. + (store::mark_as_escaped): Likewise. + (store::for_each_binding): Drop. + (store::on_maybe_live_values): Add store_mgr param. + * svalue.cc (compound_svalue::compound_svalue): Reimplement. + (compound_svalue::accept): Likewise. + (compound_svalue::calc_complexity): Likewise. + (compound_svalue::maybe_fold_bits_within): Likewise. + * svalue.h (compound_svalue::const_iterator_t): New. + (compound_svalue::begin): Split into const/non-const overloads. + (compound_svalue::end): Likewise. + 2025-10-03 David Malcolm Revert: diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 1142d0640640..feffdf143949 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,27 @@ +2025-10-09 David Faust + + * c-attribs.cc (c_common_attribute_table): Add btf_decl_tag and + btf_type_tag attributes. + (handle_btf_decl_tag_attribute): New handler for btf_decl_tag. + (hanlde_btf_type_tag_attribute): New handler for btf_type_tag. + (btf_tag_args_ok): Helper for new attribute handlers. + +2025-10-09 Jakub Jelinek + + * c-common.h (D_CXX26): Define. + * c-common.cc (c_common_resword): Add D_CXX26 to + __builtin_c23_va_start flags, mention D_CXX26 in comment. + +2025-10-09 Jakub Jelinek + + PR c/122188 + * c-gimplify.cc (c_gimplify_expr): Also gimplify the second operand + before the COND_EXPR and use in COND_EXPR result of gimplification. + +2025-10-09 David Malcolm + + * c-opts.cc: Define INCLUDE_VECTOR. + 2025-10-08 Jakub Jelinek PR c/122188 diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 5099caab06d1..d23e8656f0fe 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,44 @@ +2025-10-09 Jakub Jelinek + + * cp-tree.h (cp_build_function_type): Declare. + * lex.cc: Implement va_start changes from P3348R4 - C++26 should + refer to C23 not C17 paper. + (init_reswords): Set D_CXX26 in mask for C++23 and older. + * parser.cc (cp_parser_primary_expression): Handle RID_C23_VA_START. + (cp_parser_builtin_c23_va_start): New function. + * cp-objcp-common.cc (names_builtin_p): Likewise. + * decl.cc (grokfndecl, check_function_type): Pass + TYPE_NO_NAMED_ARGS_STDARG_P as last arg to build_function_type. + (grokdeclarator, static_fn_type): Use cp_build_function_type instead + of build_function_type. + * typeck.cc (merge_types): Likewise. + (structural_comptypes): Return false for TYPE_NO_NAMED_ARGS_STDARG_P + differences. + * lambda.cc (maybe_add_lambda_conv_op): Use cp_build_function_type + instead of build_function_type. + * tree.cc (cp_build_function_type): New function. + (strip_typedefs): Pass TYPE_NO_NAMED_ARGS_STDARG_P as last arg to + build_function_type. + * name-lookup.cc (push_local_extern_decl_alias): Likewise. + * module.cc (trees_in::tree_node): Use cp_build_function_type instead + of build_function_type. + * pt.cc (copy_default_args_to_explicit_spec, + rebuild_function_or_method_type, build_deduction_guide): Likewise. + (alias_ctad_tweaks): Pass TYPE_NO_NAMED_ARGS_STDARG_P as last arg to + build_function_type. + * decl2.cc (change_return_type, cp_reconstruct_complex_type): + Likewise. + +2025-10-09 Egas Ribeiro + + PR c++/116477 + * semantics.cc (finish_call_expr): Move concept_check_p diagnostic + before processing_template_decl check to catch errors earlier. + +2025-10-09 David Malcolm + + * error.cc: Define INCLUDE_VECTOR. + 2025-10-08 Jason Merrill * init.cc (build_new_1): Also clobber for non-placement new. diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 08bc1b3d8bf0..de3aef8846f1 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,13 @@ +2025-10-09 Harald Anlauf + + PR fortran/122206 + * trans-types.cc (gfc_get_function_type): Do not clobber an + existing procedure interface. + +2025-10-09 David Malcolm + + * error.cc: Define INCLUDE_VECTOR. + 2025-10-08 Harald Anlauf PR fortran/49111 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3b6a2744e0b4..22bdae369425 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,167 @@ +2025-10-10 YunQiang Su + + Revert: + 2025-10-10 Jie Mei + + * gcc.target/mips/mips16e2-cache.c: Use isa_rev>=2 instead of + -mips32r2 and remove -mips16 option. + * gcc.target/mips/mips16e2-cmov.c: Add isa_rev>=2 and remove + -mips16 option. + * gcc.target/mips/mips16e2-gp.c: Same as above. + * gcc.target/mips/mips16e2.c: Same as above. + +2025-10-10 YunQiang Su + + Revert: + 2025-09-27 YunQiang Su + + * gcc.target/mips/mips16e2.c: Use isa_rev=2 instead of >=2. + * gcc.target/mips/mips16e2-cache.c: Ditto. + * gcc.target/mips/mips16e2-cmov.c: Ditto. + * gcc.target/mips/mips16e2-gp.c: Ditto. + +2025-10-09 David Faust + + * gcc.target/bpf/core-btf-tag-1.c: New test. + * gcc.target/bpf/core-btf-tag-2.c: New test. + +2025-10-09 David Faust + + * gcc.dg/debug/btf/btf-decl-tag-1.c: New test. + * gcc.dg/debug/btf/btf-decl-tag-2.c: New test. + * gcc.dg/debug/btf/btf-decl-tag-3.c: New test. + * gcc.dg/debug/btf/btf-decl-tag-4.c: New test. + * gcc.dg/debug/btf/btf-type-tag-1.c: New test. + * gcc.dg/debug/btf/btf-type-tag-2.c: New test. + * gcc.dg/debug/btf/btf-type-tag-3.c: New test. + * gcc.dg/debug/btf/btf-type-tag-4.c: New test. + * gcc.dg/debug/btf/btf-type-tag-c2x-1.c: New test. + +2025-10-09 David Faust + + * gcc.dg/debug/ctf/ctf-decl-tag-1.c: New test. + * gcc.dg/debug/ctf/ctf-type-tag-1.c: New test. + +2025-10-09 David Faust + + * gcc.dg/debug/dwarf2/dwarf-btf-decl-tag-1.c: New test. + * gcc.dg/debug/dwarf2/dwarf-btf-decl-tag-2.c: New test. + * gcc.dg/debug/dwarf2/dwarf-btf-decl-tag-3.c: New test. + * gcc.dg/debug/dwarf2/dwarf-btf-type-tag-1.c: New test. + * gcc.dg/debug/dwarf2/dwarf-btf-type-tag-2.c: New test. + * gcc.dg/debug/dwarf2/dwarf-btf-type-tag-3.c: New test. + * gcc.dg/debug/dwarf2/dwarf-btf-type-tag-4.c: New test. + * gcc.dg/debug/dwarf2/dwarf-btf-type-tag-5.c: New test. + * gcc.dg/debug/dwarf2/dwarf-btf-type-tag-6.c: New test. + * gcc.dg/debug/dwarf2/dwarf-btf-type-tag-7.c: New test. + * gcc.dg/debug/dwarf2/dwarf-btf-type-tag-8.c: New test. + * gcc.dg/debug/dwarf2/dwarf-btf-type-tag-9.c: New test. + * gcc.dg/debug/dwarf2/dwarf-btf-type-tag-10.c: New test. + +2025-10-09 David Faust + + * gcc.dg/attr-btf-decl-tag-1.c: New test. + * gcc.dg/attr-btf-decl-tag-2.c: New test. + * gcc.dg/attr-btf-type-tag-1.c: New test. + * gcc.dg/attr-btf-type-tag-2.c: New test. + * gcc.dg/attr-btf-type-tag-3.c: New test. + +2025-10-09 Jakub Jelinek + + * c-c++-common/cpp/has-builtin-4.c: Expect + __has_builtin (__builtin_c23_va_start) == 1 also for C++26. + * c-c++-common/Wvarargs.c (foo3): Don't expect undefined behavior + warning for C++26. + * g++.dg/cpp26/stdarg1.C: New test. + * g++.dg/cpp26/stdarg2.C: New test. + * g++.dg/cpp26/stdarg3.C: New test. + * g++.dg/cpp26/stdarg4.C: New test. + * g++.dg/cpp26/stdarg5.C: New test. + * g++.dg/cpp26/stdarg6.C: New test. + * g++.dg/cpp26/stdarg7.C: New test. + * g++.dg/cpp26/stdarg8.C: New test. + * g++.dg/cpp26/stdarg9.C: New test. + * g++.dg/opt/pr60849.C (foo): Add explicit cast. + +2025-10-09 Egas Ribeiro + + PR c++/116477 + * g++.dg/cpp2a/concepts-pr116477.C: New test. + +2025-10-09 Georg-Johann Lay + + PR target/122222 + * gcc.target/avr/pr122222-sitod.c: New test. + +2025-10-09 Georg-Johann Lay + + PR target/122220 + * gcc.target/avr/pr122220.c: New test. + +2025-10-09 David Malcolm + + * gcc.dg/plugin/analyzer_cpython_plugin.cc: Replace INCLUDE_ + defines with include of include "analyzer/common.h". Update + for changes to binding_pair. + * gcc.dg/plugin/analyzer_kernel_plugin.cc: Likewise. + * gcc.dg/plugin/analyzer_known_fns_plugin.cc: Likewise. + +2025-10-09 Dimitar Dimitrov + + * gcc.dg/tree-ssa/cselim-2.c: Pass -ftree-cselim option. + +2025-10-09 Harald Anlauf + + PR fortran/122206 + * gfortran.dg/interface_abstract_6.f90: New test. + +2025-10-09 Jakub Jelinek + + PR c/122188 + * gcc.dg/torture/pr122188.c: New test. + +2025-10-09 David Malcolm + + * gcc.dg/plugin/diagnostic_group_plugin.cc: Define INCLUDE_VECTOR. + * gcc.dg/plugin/diagnostic_plugin_test_show_locus.cc: Likewise. + * gcc.dg/plugin/location_overflow_plugin.cc: Likewise. + +2025-10-09 Takayuki 'January June' Suwa + + * gcc.target/xtensa/constsynth_2insns.c, + gcc.target/xtensa/constsynth_3insns.c, + gcc.target/xtensa/constsynth_double.c: Remove due to outdated. + * gcc.target/xtensa/constsynthV2_O2_costs0.c, + gcc.target/xtensa/constsynthV2_O2_costs5.c, + gcc.target/xtensa/constsynthV2_Os.c: New. + +2025-10-09 Takayuki 'January June' Suwa + + * gcc.target/xtensa/BGEUI-BLTUI-32k-64k.c: + Disable optimizations and modify to also verify RTL dump in the + "expand" pass. + +2025-10-09 Richard Biener + + PR tree-optimization/122212 + * gcc.dg/torture/pr122212.c: New testcase. + +2025-10-09 Georg-Johann Lay + + PR target/122210 + * gcc.target/avr/dtofx.c: New test. + +2025-10-09 Georg-Johann Lay + + PR target/122210 + * gcc.target/avr/fxtod.c: New test. + +2025-10-09 Kito Cheng + + * gcc.target/riscv/rvv/vls-type-rvv-max-lmul.c: New test. + * gcc.target/riscv/rvv/vls-type-rvv-max-lmul-autovec.c: New + test. + 2025-10-08 Joseph Myers * gcc.dg/c11-generic-4.c, gcc.dg/c23-generic-5.c, diff --git a/include/ChangeLog b/include/ChangeLog index 113bd11725ab..4a60236a756e 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,17 @@ +2025-10-09 David Faust + + * btf.h (BTF_KIND_DECL_TAG, BTF_KIND_TYPE_TAG) New defines. + (struct btf_decl_tag): New. + +2025-10-09 David Faust + + * ctf.h (CTF_K_DECL_TAG, CTF_K_TYPE_TAG): New defines. + +2025-10-09 David Faust + + * dwarf2.def (DW_TAG_GNU_annotation): New DWARF extension. + (DW_AT_GNU_annotation): Likewise. + 2025-08-17 Nathaniel Shead PR c++/120503 diff --git a/libatomic/ChangeLog b/libatomic/ChangeLog index 1cc0e86c0452..d15479525c06 100644 --- a/libatomic/ChangeLog +++ b/libatomic/ChangeLog @@ -1,3 +1,14 @@ +2025-10-09 Prathamesh Kulkarni + Matthew Malcolmson + + PR driver/81358 + * Makefile.am: Pass -fno-link-libatomic. + New rule all-local. + * configure.ac: Assert that CFLAGS is set and pass -fno-link-libatomic. + Use __libatomic_save_CFLAGS__ instead of save_CFLAGS. + * Makefile.in: Regenerate. + * configure: Regenerate. + 2025-10-05 Sam James * Makefile.in: Regenerate. diff --git a/libcc1/ChangeLog b/libcc1/ChangeLog index b82fc530cacb..dff34a459f68 100644 --- a/libcc1/ChangeLog +++ b/libcc1/ChangeLog @@ -1,3 +1,7 @@ +2025-10-09 David Malcolm + + * context.cc: Define INCLUDE_VECTOR. + 2025-10-05 Sam James * Makefile.in: Regenerate. diff --git a/libgcc/config/avr/libf7/ChangeLog b/libgcc/config/avr/libf7/ChangeLog index 561a7536957b..c6e9cc647c88 100644 --- a/libgcc/config/avr/libf7/ChangeLog +++ b/libgcc/config/avr/libf7/ChangeLog @@ -1,3 +1,31 @@ +2025-10-09 Georg-Johann Lay + + PR target/122222 + * libf7-asm.sx (D_floatsidf, D_floatunsidf): New modules. + * libf7-common.mk (F7_ASM_PARTS): Add D_floatsidf, D_floatunsidf. + (F7F, g_dx): Remove floatunsidf, floatsidf. + * libf7.c (f7_set_s32): Don't alias to f7_floatsidf. + (f7_set_u32): Don't alias to f7_floatunsidf. + * f7-renames.h: Rebuild + * f7-wraps.h: Rebuild. + +2025-10-09 Georg-Johann Lay + + PR target/122220 + * libf7-asm.sx (to_integer): Return 0x80... on negative overflow. + +2025-10-09 Georg-Johann Lay + + PR target/122210 + * libf7-common.mk (F7_ASM_PARTS): Add D2 modules. + * libf7-asm.sx: Implement the D2 modules. + +2025-10-09 Georg-Johann Lay + + PR target/122210 + * libf7-common.mk (F7_ASM_PARTS): Add 2D modules. + * libf7-asm.sx: Implement the 2D modules. + 2025-10-06 Georg-Johann Lay * libf7-common.mk (F7_ASM_PARTS): Add D_sincos. diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 5eeb4cffdc22..456006aac3fc 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,21 @@ +2025-10-09 Jonathan Wakely + + * include/bits/hashtable.h (_Hashtable::_S_nothrow_move): Use + diagnostic pragmas to allow constexpr if in C++14. Use value + member instead of operator(). + +2025-10-09 Jonathan Wakely + + * include/bits/version.tpl: Fix comment on #endif. Tweak + description of when macros are defined. + * include/bits/version.h: Regenerate. + +2025-10-09 Tomasz Kamiński + + * testsuite/std/time/year_month_day_last/io.cc: New formatting tests. + * testsuite/std/time/year_month_weekday/io.cc: Likewise. + * testsuite/std/time/year_month_weekday_last/io.cc: Likewise. + 2025-10-08 Jonathan Wakely * doc/xml/manual/status_cxx2017.xml: Replace broken link to PSTL From b9a2dfbd3914d23c2e2284ce03decb0be19fa2cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Kami=C5=84ski?= Date: Thu, 9 Oct 2025 14:38:54 +0200 Subject: [PATCH 205/216] libstdc++: Improve handling of !ok() weekday index in formatting [PR121929] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, formatting a year_month_weekday with the weekday index equal to 0, 6, or 7 (which are !ok() values in the supported range) produced a seemingly correct day output. For example %Y-%m-%d produced: * 2024-09-06 for 2024y/September/Sunday[6] (2024-10-06) * 2024-09-25 for 2024y/September/Sunday[0] (2023-08-25) This patch changes how the internal _M_day value is computed for year_month_weekday. Instead of converting to local_days then to year_month_day, _M_day is now set as the number of days since ymd.year()/ymd.month()/0. If this difference is negative (which occurs when index() is 0), _M_day is set to 0 to avoid handling negative days of the month. This change yields identical results for all ok() values. However, for !ok() dates, it now consistently produces invalid dates, ensuring the formatted output clearly reflects the !ok input state: * 2024-09-36 for 2024y/September/Sunday[6] * 2024-09-00 for 2024y/September/Sunday[0] For consistency, _M_day is computed in the same manner for year_month_weekday_last. Finally, for year_month_day_last, we fill _M_day directly with ymd.day(). This provides a more efficient implementation and avoids the need to compute local_days for %Y-%m-%d, %F and similar specifiers. PR libstdc++/121929 libstdc++-v3/ChangeLog: * include/bits/chrono_io.h (_ChronoData::_M_fill_aux) (_ChronoData::_M_fill_aux): Add comment documenting precondition. (formatter::format): Compute local_days inline. (formatter::format) (formatter::format) (formatter::format): Change how the _M_day field is computed. * testsuite/std/time/year_month_weekday/io.cc: Adjust tests. Reviewed-by: Jonathan Wakely Signed-off-by: Tomasz Kamiński --- libstdc++-v3/include/bits/chrono_io.h | 29 ++++++++++--------- .../std/time/year_month_weekday/io.cc | 9 +++--- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/libstdc++-v3/include/bits/chrono_io.h b/libstdc++-v3/include/bits/chrono_io.h index 690c10d79ce5..1e2f45b0bf81 100644 --- a/libstdc++-v3/include/bits/chrono_io.h +++ b/libstdc++-v3/include/bits/chrono_io.h @@ -479,6 +479,7 @@ namespace __format return __parts; } + // pre: _M_year is set [[__gnu__::__always_inline__]] _ChronoParts _M_fill_aux(chrono::local_days __ld, _ChronoParts __parts) @@ -495,6 +496,7 @@ namespace __format return __parts; } + // pre: _M_year is set [[__gnu__::__always_inline__]] _ChronoParts _M_fill_ldays(chrono::local_days __ld, _ChronoParts __parts) @@ -2671,8 +2673,7 @@ namespace __format if (__parts == 0) return _M_f._M_format(__cd, __fc); - chrono::local_days __ld(__t); - __cd._M_fill_ldays(__ld, __parts); + __cd._M_fill_ldays(chrono::local_days(__t), __parts); return _M_f._M_format(__cd, __fc); } @@ -2707,19 +2708,17 @@ namespace __format format(const chrono::year_month_day_last& __t, basic_format_context<_Out, _CharT>& __fc) const { + using enum __format::_ChronoParts; + __format::_ChronoData<_CharT> __cd{}; auto __parts = _M_f._M_spec._M_needed; __parts = __cd._M_fill_year_month(__t, __parts); + if (_M_f._M_spec._M_needs(_Day|_WeekdayIndex)) + __parts = __cd._M_fill_day(__t.day(), __parts); if (__parts == 0) return _M_f._M_format(__cd, __fc); - chrono::local_days __ld(__t); - __parts = __cd._M_fill_ldays(__ld, __parts); - if (__parts == 0) - return _M_f._M_format(__cd, __fc); - - chrono::year_month_day __ymd(__ld); - __cd._M_fill_day(__ymd.day(), __parts); + __cd._M_fill_ldays(chrono::local_days(__t), __parts); return _M_f._M_format(__cd, __fc); } @@ -2760,6 +2759,10 @@ namespace __format auto __parts = _M_f._M_spec._M_needed; __parts = __cd._M_fill_year_month(__t, __parts); __parts = __cd._M_fill_weekday(__t.weekday_indexed(), __parts); + if (__t.index() == 0) [[unlikely]] + // n.b. day cannot be negative, so any 0th weekday uses + // value-initialized (0) day of month + __parts -= __format::_ChronoParts::_Day; if (__parts == 0) return _M_f._M_format(__cd, __fc); @@ -2768,9 +2771,9 @@ namespace __format if (__parts == 0) return _M_f._M_format(__cd, __fc); - chrono::year_month_day __ymd(__ld); + auto __dom = __ld - chrono::local_days(__t.year()/__t.month()/0); // n.b. weekday index is supplied by input, do not override it - __cd._M_day = __ymd.day(); + __cd._M_day = chrono::day(__dom.count()); return _M_f._M_format(__cd, __fc); } @@ -2820,8 +2823,8 @@ namespace __format if (__parts == 0) return _M_f._M_format(__cd, __fc); - chrono::year_month_day __ymd(__ld); - __cd._M_fill_day(__ymd.day(), __parts); + auto __dom = __ld - chrono::local_days(__t.year()/__t.month()/0); + __cd._M_fill_day(chrono::day(__dom.count()), __parts); return _M_f._M_format(__cd, __fc); } diff --git a/libstdc++-v3/testsuite/std/time/year_month_weekday/io.cc b/libstdc++-v3/testsuite/std/time/year_month_weekday/io.cc index 92fd67022a24..253d4f6a552e 100644 --- a/libstdc++-v3/testsuite/std/time/year_month_weekday/io.cc +++ b/libstdc++-v3/testsuite/std/time/year_month_weekday/io.cc @@ -69,17 +69,16 @@ test_format() VERIFY( s == "2024-09-01 245" ); s = std::format("{:%Y-%m-%d %j}", 2024y/September/Sunday[5]); VERIFY( s == "2024-09-29 273" ); - // see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121929 // first weeks of next month s = std::format("{:%Y-%m-%d %j}", 2024y/September/Sunday[6]); - VERIFY( s == "2024-09-06 280" ); + VERIFY( s == "2024-09-36 280" ); s = std::format("{:%Y-%m-%d %j}", 2024y/September/Sunday[7]); - VERIFY( s == "2024-09-13 287" ); + VERIFY( s == "2024-09-43 287" ); // last week on previous month s = std::format("{:%Y-%m-%d %j}", 2024y/September/Saturday[0]); - VERIFY( s == "2024-09-31 244" ); + VERIFY( s == "2024-09-00 244" ); s = std::format("{:%Y-%m-%d %j}", 2024y/September/Sunday[0]); - VERIFY( s == "2024-09-25 238" ); + VERIFY( s == "2024-09-00 238" ); // day is de-facto -6 // %U: Week number for weeks starting on Sunday s = std::format("{:%Y-U%U}", 2023y/January/Sunday[0]); From 90dde804626f1344f0d63827709406b135433272 Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Mon, 9 Dec 2024 01:32:27 +0100 Subject: [PATCH 206/216] libstdc++: Handle cv-qualified types in atomic and atomic_ref [PR115402] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implements P3233R1 (DR for C++20/C++11, fixes LWG 4069 and 3508). This commit implements std::atomic_ref support (LWG3508) as DR for C++20, by extractingparts of the __atomic_ref class (that atomic_ref inherits from) into a further base class (__atomic_ref_base): * __atomic_ref_base implements non-mutating (const) atomic API. Single base class is used, and the difference in is_always_lock_free and required_aligment values between types are handled by _S_is_always_lock_free, _S_required_aligment helper functions. * __atomic_ref_base implements the common atomic APIs. The non-mutating operations are handled by inherting from __atomic_ref_base partial partial specialization. Tu support that __atomic_ref_base stores mutable pointer to T, and performs const_cast in constructor. * __atomic_ref inherits from __atomic_ref_base, and implement type-specific mutable APIs (fetch_add, -=, ...) and difference_type member type. * __atomic_ref inherits from __atomic_ref_base and adds different_type member, whose presence and denoted type depends on T. The __atomic_ref specialization selection is adjusted to handle cv-qualified bool (add remove_cv_t) and pointer types. To handle the later, additional constant template parameter is introduced. The atomic wait and notify operations are currently not supported for volatile types, to signal that static assert is added to corresponding methods of atomic_ref. At the same time, disable support for cv-qualified types in std::atomic (for instance, std::atomic isn't meaningful; one should use volatile std::atomic), again as per the paper, resolving LWG4069 as DR for C++11. This only affects atomic, as specialization atomic with const-qualifed types was already producing an compile-time error. PR libstdc++/115402 libstdc++-v3/ChangeLog: * include/bits/atomic_base.h (__atomic_ref_base) (__atomic_ref_base<_Tp>): Define by extracting common methods from atomic_ref specializations. (__atomic_ref<_Tp, In, Fp, Pt>): Inherit from __atomic_ref_base and remove extracted method. (__atomic_ref): Define. * include/std/atomic (std::atomic): Added an * testsuite/29_atomics/atomic/requirements/types_neg.cc: Add test for volatile qualified types. * testsuite/29_atomics/atomic_ref/bool.cc: Move the content to op_support.cc, add test for bool. * testsuite/29_atomics/atomic_ref/op_support.cc: New test expanded from atomic_ref/bool.cc. * testsuite/29_atomics/atomic_ref/cv_qual.cc: New test. * testsuite/29_atomics/atomic_ref/requirements_neg.cc: New test. * testsuite/29_atomics/atomic_ref/deduction.cc: Add tests for cv-qualified types. * testsuite/29_atomics/atomic_ref/float.cc: Likewise. * testsuite/29_atomics/atomic_ref/generic.cc: Likewise. * testsuite/29_atomics/atomic_ref/integral.cc: Likewise. * testsuite/29_atomics/atomic_ref/pointer.cc: Likewise. * testsuite/29_atomics/atomic_ref/requirements.cc: Likewise. * testsuite/29_atomics/atomic_ref/wait_notify.cc: Add tests for const qualified types. Reviewed-by: Jonathan Wakely Co-authored-by: Tomasz Kamiński Signed-off-by: Giuseppe D'Angelo Signed-off-by: Tomasz Kamiński --- libstdc++-v3/include/bits/atomic_base.h | 566 ++++++------------ libstdc++-v3/include/std/atomic | 5 + .../atomic/requirements/types_neg.cc | 4 +- .../testsuite/29_atomics/atomic_ref/bool.cc | 94 ++- .../29_atomics/atomic_ref/cv_qual.cc | 94 +++ .../29_atomics/atomic_ref/deduction.cc | 33 +- .../testsuite/29_atomics/atomic_ref/float.cc | 21 +- .../29_atomics/atomic_ref/generic.cc | 6 + .../29_atomics/atomic_ref/integral.cc | 6 + .../29_atomics/atomic_ref/op_support.cc | 113 ++++ .../29_atomics/atomic_ref/pointer.cc | 6 + .../29_atomics/atomic_ref/requirements.cc | 68 ++- .../29_atomics/atomic_ref/requirements_neg.cc | 34 ++ .../29_atomics/atomic_ref/wait_notify.cc | 10 + 14 files changed, 621 insertions(+), 439 deletions(-) create mode 100644 libstdc++-v3/testsuite/29_atomics/atomic_ref/cv_qual.cc create mode 100644 libstdc++-v3/testsuite/29_atomics/atomic_ref/op_support.cc create mode 100644 libstdc++-v3/testsuite/29_atomics/atomic_ref/requirements_neg.cc diff --git a/libstdc++-v3/include/bits/atomic_base.h b/libstdc++-v3/include/bits/atomic_base.h index 92d1269493f7..84661d449e25 100644 --- a/libstdc++-v3/include/bits/atomic_base.h +++ b/libstdc++-v3/include/bits/atomic_base.h @@ -1508,211 +1508,146 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION }; #undef _GLIBCXX20_INIT - template && !is_same_v<_Tp, bool>, - bool = is_floating_point_v<_Tp>> - struct __atomic_ref; + // __atomic_ref_base provides the common APIs for const and + // non-const types, + // __atomic_ref_base<_Tp> inherits from __atomic_ref_base, + // and provides the common APIs implementing constraints in [atomic.ref]. + // __atomic_ref<_Tp> inherits from __atomic_ref_base<_Tp> (const or non-const) + // adds type-specific mutating APIs. + // atomic_ref inherits from __atomic_ref; + + template + struct __atomic_ref_base; - // base class for non-integral, non-floating-point, non-pointer types template - struct __atomic_ref<_Tp, false, false> + struct __atomic_ref_base { - static_assert(is_trivially_copyable_v<_Tp>); + private: + using _Vt = remove_cv_t<_Tp>; + + static consteval bool + _S_is_always_lock_free() + { + if constexpr (is_pointer_v<_Vt>) + return ATOMIC_POINTER_LOCK_FREE == 2; + else + return __atomic_always_lock_free(sizeof(_Vt), 0); + } - // 1/2/4/8/16-byte types must be aligned to at least their size. - static constexpr int _S_min_alignment - = (sizeof(_Tp) & (sizeof(_Tp) - 1)) || sizeof(_Tp) > 16 - ? 0 : sizeof(_Tp); + static consteval int + _S_required_aligment() + { + if constexpr (is_floating_point_v<_Vt> || is_pointer_v<_Vt>) + return alignof(_Vt); + else if constexpr ((sizeof(_Vt) & (sizeof(_Vt) - 1)) || sizeof(_Vt) > 16) + return alignof(_Vt); + else + // 1/2/4/8/16-byte types, including integral types, + // must be aligned to at least their size. + return (sizeof(_Vt) > alignof(_Vt)) ? sizeof(_Vt) : alignof(_Vt); + } public: - using value_type = _Tp; + using value_type = _Vt; + static_assert(is_trivially_copyable_v); - static constexpr bool is_always_lock_free - = __atomic_always_lock_free(sizeof(_Tp), 0); + static constexpr bool is_always_lock_free = _S_is_always_lock_free(); + static_assert(is_always_lock_free || !is_volatile_v<_Tp>, + "atomic operations on volatile T must be lock-free"); - static constexpr size_t required_alignment - = _S_min_alignment > alignof(_Tp) ? _S_min_alignment : alignof(_Tp); + static constexpr size_t required_alignment = _S_required_aligment(); - __atomic_ref& operator=(const __atomic_ref&) = delete; + __atomic_ref_base() = delete; + __atomic_ref_base& operator=(const __atomic_ref_base&) = delete; explicit - __atomic_ref(_Tp& __t) : _M_ptr(std::__addressof(__t)) + __atomic_ref_base(const _Tp& __t) + : _M_ptr(const_cast<_Tp*>(std::addressof(__t))) { __glibcxx_assert(((__UINTPTR_TYPE__)_M_ptr % required_alignment) == 0); } - __atomic_ref(const __atomic_ref&) noexcept = default; - - _Tp - operator=(_Tp __t) const noexcept - { - this->store(__t); - return __t; - } + __atomic_ref_base(const __atomic_ref_base&) noexcept = default; - operator _Tp() const noexcept { return this->load(); } + operator value_type() const noexcept { return this->load(); } bool is_lock_free() const noexcept { return __atomic_impl::is_lock_free(); } - void - store(_Tp __t, memory_order __m = memory_order_seq_cst) const noexcept - { __atomic_impl::store(_M_ptr, __t, __m); } - - _Tp + value_type load(memory_order __m = memory_order_seq_cst) const noexcept { return __atomic_impl::load(_M_ptr, __m); } - _Tp - exchange(_Tp __desired, memory_order __m = memory_order_seq_cst) - const noexcept - { return __atomic_impl::exchange(_M_ptr, __desired, __m); } - - bool - compare_exchange_weak(_Tp& __expected, _Tp __desired, - memory_order __success, - memory_order __failure) const noexcept - { - return __atomic_impl::compare_exchange_weak( - _M_ptr, __expected, __desired, __success, __failure); - } - - bool - compare_exchange_strong(_Tp& __expected, _Tp __desired, - memory_order __success, - memory_order __failure) const noexcept - { - return __atomic_impl::compare_exchange_strong( - _M_ptr, __expected, __desired, __success, __failure); - } - - bool - compare_exchange_weak(_Tp& __expected, _Tp __desired, - memory_order __order = memory_order_seq_cst) - const noexcept - { - return compare_exchange_weak(__expected, __desired, __order, - __cmpexch_failure_order(__order)); - } - - bool - compare_exchange_strong(_Tp& __expected, _Tp __desired, - memory_order __order = memory_order_seq_cst) - const noexcept - { - return compare_exchange_strong(__expected, __desired, __order, - __cmpexch_failure_order(__order)); - } - #if __glibcxx_atomic_wait _GLIBCXX_ALWAYS_INLINE void - wait(_Tp __old, memory_order __m = memory_order_seq_cst) const noexcept - { __atomic_impl::wait(_M_ptr, __old, __m); } - - // TODO add const volatile overload - - _GLIBCXX_ALWAYS_INLINE void - notify_one() const noexcept - { __atomic_impl::notify_one(_M_ptr); } - - // TODO add const volatile overload - - _GLIBCXX_ALWAYS_INLINE void - notify_all() const noexcept - { __atomic_impl::notify_all(_M_ptr); } - - // TODO add const volatile overload + wait(value_type __old, memory_order __m = memory_order_seq_cst) const noexcept + { + // TODO remove when volatile is supported + static_assert(!is_volatile_v<_Tp>, "atomics waits on volatile are not supported"); + __atomic_impl::wait(_M_ptr, __old, __m); + } #endif // __glibcxx_atomic_wait - private: + protected: _Tp* _M_ptr; }; - // base class for atomic_ref template - struct __atomic_ref<_Tp, true, false> + struct __atomic_ref_base + : __atomic_ref_base { - static_assert(is_integral_v<_Tp>); - - public: - using value_type = _Tp; - using difference_type = value_type; - - static constexpr bool is_always_lock_free - = __atomic_always_lock_free(sizeof(_Tp), 0); - - static constexpr size_t required_alignment - = sizeof(_Tp) > alignof(_Tp) ? sizeof(_Tp) : alignof(_Tp); - - __atomic_ref() = delete; - __atomic_ref& operator=(const __atomic_ref&) = delete; + using value_type = typename __atomic_ref_base::value_type; explicit - __atomic_ref(_Tp& __t) : _M_ptr(&__t) - { - __glibcxx_assert(((__UINTPTR_TYPE__)_M_ptr % required_alignment) == 0); - } + __atomic_ref_base(_Tp& __t) : __atomic_ref_base(__t) + { } - __atomic_ref(const __atomic_ref&) noexcept = default; - - _Tp - operator=(_Tp __t) const noexcept + value_type + operator=(value_type __t) const noexcept { this->store(__t); return __t; } - operator _Tp() const noexcept { return this->load(); } - - bool - is_lock_free() const noexcept - { - return __atomic_impl::is_lock_free(); - } - void - store(_Tp __t, memory_order __m = memory_order_seq_cst) const noexcept - { __atomic_impl::store(_M_ptr, __t, __m); } - - _Tp - load(memory_order __m = memory_order_seq_cst) const noexcept - { return __atomic_impl::load(_M_ptr, __m); } + store(value_type __t, memory_order __m = memory_order_seq_cst) const noexcept + { __atomic_impl::store(this->_M_ptr, __t, __m); } - _Tp - exchange(_Tp __desired, - memory_order __m = memory_order_seq_cst) const noexcept - { return __atomic_impl::exchange(_M_ptr, __desired, __m); } + value_type + exchange(value_type __desired, memory_order __m = memory_order_seq_cst) + const noexcept + { return __atomic_impl::exchange(this->_M_ptr, __desired, __m); } bool - compare_exchange_weak(_Tp& __expected, _Tp __desired, + compare_exchange_weak(value_type& __expected, value_type __desired, memory_order __success, memory_order __failure) const noexcept { return __atomic_impl::compare_exchange_weak( - _M_ptr, __expected, __desired, __success, __failure); + this->_M_ptr, __expected, __desired, __success, __failure); } bool - compare_exchange_strong(_Tp& __expected, _Tp __desired, - memory_order __success, - memory_order __failure) const noexcept + compare_exchange_strong(value_type& __expected, value_type __desired, + memory_order __success, + memory_order __failure) const noexcept { return __atomic_impl::compare_exchange_strong( - _M_ptr, __expected, __desired, __success, __failure); + this->_M_ptr, __expected, __desired, __success, __failure); } bool - compare_exchange_weak(_Tp& __expected, _Tp __desired, + compare_exchange_weak(value_type& __expected, value_type __desired, memory_order __order = memory_order_seq_cst) const noexcept { return compare_exchange_weak(__expected, __desired, __order, - __cmpexch_failure_order(__order)); + __cmpexch_failure_order(__order)); } bool - compare_exchange_strong(_Tp& __expected, _Tp __desired, + compare_exchange_strong(value_type& __expected, value_type __desired, memory_order __order = memory_order_seq_cst) const noexcept { @@ -1721,49 +1656,81 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } #if __glibcxx_atomic_wait - _GLIBCXX_ALWAYS_INLINE void - wait(_Tp __old, memory_order __m = memory_order_seq_cst) const noexcept - { __atomic_impl::wait(_M_ptr, __old, __m); } - - // TODO add const volatile overload - _GLIBCXX_ALWAYS_INLINE void notify_one() const noexcept - { __atomic_impl::notify_one(_M_ptr); } - - // TODO add const volatile overload + { + // TODO remove when volatile is supported + static_assert(!is_volatile_v<_Tp>, "atomics waits on volatile are not supported"); + __atomic_impl::notify_one(this->_M_ptr); + } _GLIBCXX_ALWAYS_INLINE void notify_all() const noexcept - { __atomic_impl::notify_all(_M_ptr); } - - // TODO add const volatile overload + { + // TODO remove when volatile is supported + static_assert(!is_volatile_v<_Tp>, "atomics waits on volatile are not supported"); + __atomic_impl::notify_all(this->_M_ptr); + } #endif // __glibcxx_atomic_wait + }; + + template && !is_same_v, bool>, + bool = is_floating_point_v<_Tp>, + bool = is_pointer_v<_Tp>> + struct __atomic_ref; + + // base class for non-integral, non-floating-point, non-pointer types + template + struct __atomic_ref<_Tp, false, false, false> + : __atomic_ref_base<_Tp> + { + using __atomic_ref_base<_Tp>::__atomic_ref_base; + using __atomic_ref_base<_Tp>::operator=; + }; + + template + struct __atomic_ref + : __atomic_ref_base + { + using __atomic_ref_base::__atomic_ref_base; + }; + + // base class for atomic_ref + template + struct __atomic_ref<_Tp, true, false, false> + : __atomic_ref_base<_Tp> + { + using value_type = typename __atomic_ref_base<_Tp>::value_type; + using difference_type = value_type; + + using __atomic_ref_base<_Tp>::__atomic_ref_base; + using __atomic_ref_base<_Tp>::operator=; value_type fetch_add(value_type __i, memory_order __m = memory_order_seq_cst) const noexcept - { return __atomic_impl::fetch_add(_M_ptr, __i, __m); } + { return __atomic_impl::fetch_add(this->_M_ptr, __i, __m); } value_type fetch_sub(value_type __i, memory_order __m = memory_order_seq_cst) const noexcept - { return __atomic_impl::fetch_sub(_M_ptr, __i, __m); } + { return __atomic_impl::fetch_sub(this->_M_ptr, __i, __m); } value_type fetch_and(value_type __i, memory_order __m = memory_order_seq_cst) const noexcept - { return __atomic_impl::fetch_and(_M_ptr, __i, __m); } + { return __atomic_impl::fetch_and(this->_M_ptr, __i, __m); } value_type fetch_or(value_type __i, memory_order __m = memory_order_seq_cst) const noexcept - { return __atomic_impl::fetch_or(_M_ptr, __i, __m); } + { return __atomic_impl::fetch_or(this->_M_ptr, __i, __m); } value_type fetch_xor(value_type __i, memory_order __m = memory_order_seq_cst) const noexcept - { return __atomic_impl::fetch_xor(_M_ptr, __i, __m); } + { return __atomic_impl::fetch_xor(this->_M_ptr, __i, __m); } _GLIBCXX_ALWAYS_INLINE value_type operator++(int) const noexcept @@ -1775,284 +1742,98 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION value_type operator++() const noexcept - { return __atomic_impl::__add_fetch(_M_ptr, value_type(1)); } + { return __atomic_impl::__add_fetch(this->_M_ptr, value_type(1)); } value_type operator--() const noexcept - { return __atomic_impl::__sub_fetch(_M_ptr, value_type(1)); } + { return __atomic_impl::__sub_fetch(this->_M_ptr, value_type(1)); } value_type operator+=(value_type __i) const noexcept - { return __atomic_impl::__add_fetch(_M_ptr, __i); } + { return __atomic_impl::__add_fetch(this->_M_ptr, __i); } value_type operator-=(value_type __i) const noexcept - { return __atomic_impl::__sub_fetch(_M_ptr, __i); } + { return __atomic_impl::__sub_fetch(this->_M_ptr, __i); } value_type operator&=(value_type __i) const noexcept - { return __atomic_impl::__and_fetch(_M_ptr, __i); } + { return __atomic_impl::__and_fetch(this->_M_ptr, __i); } value_type operator|=(value_type __i) const noexcept - { return __atomic_impl::__or_fetch(_M_ptr, __i); } + { return __atomic_impl::__or_fetch(this->_M_ptr, __i); } value_type operator^=(value_type __i) const noexcept - { return __atomic_impl::__xor_fetch(_M_ptr, __i); } + { return __atomic_impl::__xor_fetch(this->_M_ptr, __i); } + }; - private: - _Tp* _M_ptr; + template + struct __atomic_ref + : __atomic_ref_base + { + using difference_type = typename __atomic_ref_base::value_type; + using __atomic_ref_base::__atomic_ref_base; }; // base class for atomic_ref template - struct __atomic_ref<_Fp, false, true> + struct __atomic_ref<_Fp, false, true, false> + : __atomic_ref_base<_Fp> { - static_assert(is_floating_point_v<_Fp>); - - public: - using value_type = _Fp; + using value_type = typename __atomic_ref_base<_Fp>::value_type; using difference_type = value_type; - static constexpr bool is_always_lock_free - = __atomic_always_lock_free(sizeof(_Fp), 0); - - static constexpr size_t required_alignment = __alignof__(_Fp); - - __atomic_ref() = delete; - __atomic_ref& operator=(const __atomic_ref&) = delete; - - explicit - __atomic_ref(_Fp& __t) : _M_ptr(&__t) - { - __glibcxx_assert(((__UINTPTR_TYPE__)_M_ptr % required_alignment) == 0); - } - - __atomic_ref(const __atomic_ref&) noexcept = default; - - _Fp - operator=(_Fp __t) const noexcept - { - this->store(__t); - return __t; - } - - operator _Fp() const noexcept { return this->load(); } - - bool - is_lock_free() const noexcept - { - return __atomic_impl::is_lock_free(); - } - - void - store(_Fp __t, memory_order __m = memory_order_seq_cst) const noexcept - { __atomic_impl::store(_M_ptr, __t, __m); } - - _Fp - load(memory_order __m = memory_order_seq_cst) const noexcept - { return __atomic_impl::load(_M_ptr, __m); } - - _Fp - exchange(_Fp __desired, - memory_order __m = memory_order_seq_cst) const noexcept - { return __atomic_impl::exchange(_M_ptr, __desired, __m); } - - bool - compare_exchange_weak(_Fp& __expected, _Fp __desired, - memory_order __success, - memory_order __failure) const noexcept - { - return __atomic_impl::compare_exchange_weak( - _M_ptr, __expected, __desired, __success, __failure); - } - - bool - compare_exchange_strong(_Fp& __expected, _Fp __desired, - memory_order __success, - memory_order __failure) const noexcept - { - return __atomic_impl::compare_exchange_strong( - _M_ptr, __expected, __desired, __success, __failure); - } - - bool - compare_exchange_weak(_Fp& __expected, _Fp __desired, - memory_order __order = memory_order_seq_cst) - const noexcept - { - return compare_exchange_weak(__expected, __desired, __order, - __cmpexch_failure_order(__order)); - } - - bool - compare_exchange_strong(_Fp& __expected, _Fp __desired, - memory_order __order = memory_order_seq_cst) - const noexcept - { - return compare_exchange_strong(__expected, __desired, __order, - __cmpexch_failure_order(__order)); - } - -#if __glibcxx_atomic_wait - _GLIBCXX_ALWAYS_INLINE void - wait(_Fp __old, memory_order __m = memory_order_seq_cst) const noexcept - { __atomic_impl::wait(_M_ptr, __old, __m); } - - // TODO add const volatile overload - - _GLIBCXX_ALWAYS_INLINE void - notify_one() const noexcept - { __atomic_impl::notify_one(_M_ptr); } - - // TODO add const volatile overload - - _GLIBCXX_ALWAYS_INLINE void - notify_all() const noexcept - { __atomic_impl::notify_all(_M_ptr); } - - // TODO add const volatile overload -#endif // __glibcxx_atomic_wait + using __atomic_ref_base<_Fp>::__atomic_ref_base; + using __atomic_ref_base<_Fp>::operator=; value_type fetch_add(value_type __i, memory_order __m = memory_order_seq_cst) const noexcept - { return __atomic_impl::__fetch_add_flt(_M_ptr, __i, __m); } + { return __atomic_impl::__fetch_add_flt(this->_M_ptr, __i, __m); } value_type fetch_sub(value_type __i, memory_order __m = memory_order_seq_cst) const noexcept - { return __atomic_impl::__fetch_sub_flt(_M_ptr, __i, __m); } + { return __atomic_impl::__fetch_sub_flt(this->_M_ptr, __i, __m); } value_type operator+=(value_type __i) const noexcept - { return __atomic_impl::__add_fetch_flt(_M_ptr, __i); } + { return __atomic_impl::__add_fetch_flt(this->_M_ptr, __i); } value_type operator-=(value_type __i) const noexcept - { return __atomic_impl::__sub_fetch_flt(_M_ptr, __i); } + { return __atomic_impl::__sub_fetch_flt(this->_M_ptr, __i); } + }; - private: - _Fp* _M_ptr; + template + struct __atomic_ref + : __atomic_ref_base + { + using difference_type = typename __atomic_ref_base::value_type; + using __atomic_ref_base::__atomic_ref_base; }; // base class for atomic_ref - template - struct __atomic_ref<_Tp*, false, false> + template + struct __atomic_ref<_Pt, false, false, true> + : __atomic_ref_base<_Pt> { - public: - using value_type = _Tp*; + using value_type = typename __atomic_ref_base<_Pt>::value_type; using difference_type = ptrdiff_t; - static constexpr bool is_always_lock_free = ATOMIC_POINTER_LOCK_FREE == 2; - - static constexpr size_t required_alignment = __alignof__(_Tp*); - - __atomic_ref() = delete; - __atomic_ref& operator=(const __atomic_ref&) = delete; - - explicit - __atomic_ref(_Tp*& __t) : _M_ptr(std::__addressof(__t)) - { - __glibcxx_assert(((__UINTPTR_TYPE__)_M_ptr % required_alignment) == 0); - } - - __atomic_ref(const __atomic_ref&) noexcept = default; - - _Tp* - operator=(_Tp* __t) const noexcept - { - this->store(__t); - return __t; - } - - operator _Tp*() const noexcept { return this->load(); } - - bool - is_lock_free() const noexcept - { - return __atomic_impl::is_lock_free(); - } - - void - store(_Tp* __t, memory_order __m = memory_order_seq_cst) const noexcept - { __atomic_impl::store(_M_ptr, __t, __m); } - - _Tp* - load(memory_order __m = memory_order_seq_cst) const noexcept - { return __atomic_impl::load(_M_ptr, __m); } - - _Tp* - exchange(_Tp* __desired, - memory_order __m = memory_order_seq_cst) const noexcept - { return __atomic_impl::exchange(_M_ptr, __desired, __m); } - - bool - compare_exchange_weak(_Tp*& __expected, _Tp* __desired, - memory_order __success, - memory_order __failure) const noexcept - { - return __atomic_impl::compare_exchange_weak( - _M_ptr, __expected, __desired, __success, __failure); - } - - bool - compare_exchange_strong(_Tp*& __expected, _Tp* __desired, - memory_order __success, - memory_order __failure) const noexcept - { - return __atomic_impl::compare_exchange_strong( - _M_ptr, __expected, __desired, __success, __failure); - } - - bool - compare_exchange_weak(_Tp*& __expected, _Tp* __desired, - memory_order __order = memory_order_seq_cst) - const noexcept - { - return compare_exchange_weak(__expected, __desired, __order, - __cmpexch_failure_order(__order)); - } - - bool - compare_exchange_strong(_Tp*& __expected, _Tp* __desired, - memory_order __order = memory_order_seq_cst) - const noexcept - { - return compare_exchange_strong(__expected, __desired, __order, - __cmpexch_failure_order(__order)); - } - -#if __glibcxx_atomic_wait - _GLIBCXX_ALWAYS_INLINE void - wait(_Tp* __old, memory_order __m = memory_order_seq_cst) const noexcept - { __atomic_impl::wait(_M_ptr, __old, __m); } - - // TODO add const volatile overload - - _GLIBCXX_ALWAYS_INLINE void - notify_one() const noexcept - { __atomic_impl::notify_one(_M_ptr); } - - // TODO add const volatile overload - - _GLIBCXX_ALWAYS_INLINE void - notify_all() const noexcept - { __atomic_impl::notify_all(_M_ptr); } - - // TODO add const volatile overload -#endif // __glibcxx_atomic_wait - + using __atomic_ref_base<_Pt>::__atomic_ref_base; + using __atomic_ref_base<_Pt>::operator=; _GLIBCXX_ALWAYS_INLINE value_type fetch_add(difference_type __d, memory_order __m = memory_order_seq_cst) const noexcept - { return __atomic_impl::fetch_add(_M_ptr, _S_type_size(__d), __m); } + { return __atomic_impl::fetch_add(this->_M_ptr, _S_type_size(__d), __m); } _GLIBCXX_ALWAYS_INLINE value_type fetch_sub(difference_type __d, memory_order __m = memory_order_seq_cst) const noexcept - { return __atomic_impl::fetch_sub(_M_ptr, _S_type_size(__d), __m); } + { return __atomic_impl::fetch_sub(this->_M_ptr, _S_type_size(__d), __m); } value_type operator++(int) const noexcept @@ -2065,36 +1846,43 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION value_type operator++() const noexcept { - return __atomic_impl::__add_fetch(_M_ptr, _S_type_size(1)); + return __atomic_impl::__add_fetch(this->_M_ptr, _S_type_size(1)); } value_type operator--() const noexcept { - return __atomic_impl::__sub_fetch(_M_ptr, _S_type_size(1)); + return __atomic_impl::__sub_fetch(this->_M_ptr, _S_type_size(1)); } value_type operator+=(difference_type __d) const noexcept { - return __atomic_impl::__add_fetch(_M_ptr, _S_type_size(__d)); + return __atomic_impl::__add_fetch(this->_M_ptr, _S_type_size(__d)); } value_type operator-=(difference_type __d) const noexcept { - return __atomic_impl::__sub_fetch(_M_ptr, _S_type_size(__d)); + return __atomic_impl::__sub_fetch(this->_M_ptr, _S_type_size(__d)); } private: static constexpr ptrdiff_t _S_type_size(ptrdiff_t __d) noexcept { - static_assert(is_object_v<_Tp>); - return __d * sizeof(_Tp); + using _Et = remove_pointer_t; + static_assert(is_object_v<_Et>); + return __d * sizeof(_Et); } + }; - _Tp** _M_ptr; + template + struct __atomic_ref + : __atomic_ref_base + { + using difference_type = ptrdiff_t; + using __atomic_ref_base::__atomic_ref_base; }; #endif // C++2a diff --git a/libstdc++-v3/include/std/atomic b/libstdc++-v3/include/std/atomic index 9b1aca0fc09a..ccb77fa6327d 100644 --- a/libstdc++-v3/include/std/atomic +++ b/libstdc++-v3/include/std/atomic @@ -217,6 +217,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static_assert(sizeof(_Tp) > 0, "Incomplete or zero-sized types are not supported"); + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4069. std::atomic should be ill-formed + static_assert(is_same<_Tp, typename remove_cv<_Tp>::type>::value, + "template argument for std::atomic must not be const or volatile"); + #if __cplusplus > 201703L static_assert(is_copy_constructible_v<_Tp>); static_assert(is_move_constructible_v<_Tp>); diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/requirements/types_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic/requirements/types_neg.cc index cfe44d255ca2..b9105481006f 100644 --- a/libstdc++-v3/testsuite/29_atomics/atomic/requirements/types_neg.cc +++ b/libstdc++-v3/testsuite/29_atomics/atomic/requirements/types_neg.cc @@ -19,7 +19,9 @@ #include -std::atomic a; // { dg-error "here" } +std::atomic ca; // { dg-error "here" } +std::atomic va; // { dg-error "here" } +std::atomic cva; // { dg-error "here" } // { dg-error "assignment to read-only type" "" { target *-*-* } 0 } struct MoveOnly diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_ref/bool.cc b/libstdc++-v3/testsuite/29_atomics/atomic_ref/bool.cc index 4702932627e8..c73319010ee8 100644 --- a/libstdc++-v3/testsuite/29_atomics/atomic_ref/bool.cc +++ b/libstdc++-v3/testsuite/29_atomics/atomic_ref/bool.cc @@ -1,15 +1,85 @@ -// { dg-do compile { target c++20 } } +// Copyright (C) 2019-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do run { target c++20 } } +// { dg-require-atomic-cmpxchg-word "" } +// { dg-add-options libatomic } #include +#include + +void +test01() +{ + bool value; + + { + const auto mo = std::memory_order_relaxed; + std::atomic_ref a(value); + bool ok = a.is_lock_free(); + if constexpr (std::atomic_ref::is_always_lock_free) + VERIFY( ok ); + a = false; + VERIFY( !a.load() ); + VERIFY( !a.load(mo) ); + a.store(true); + VERIFY( a.load() ); + auto v = a.exchange(false); + VERIFY( !a.load() ); + VERIFY( v ); + v = a.exchange(true, mo); + VERIFY( a.load() ); + VERIFY( !v ); + + auto expected = a.load(); + while (!a.compare_exchange_weak(expected, false, mo, mo)) + { /* weak form can fail spuriously */ } + VERIFY( !a.load() ); + VERIFY( expected ); + + ok = a.compare_exchange_strong(expected, true); + VERIFY( !ok && !a.load() && !expected ); + + ok = a.compare_exchange_strong(expected, true); + VERIFY( ok && a.load() && !expected ); + } +} + +void +test02() +{ + bool b = false; + std::atomic_ref a0(b); + std::atomic_ref a1(b); + std::atomic_ref a1c(b); + std::atomic_ref a1v(b); + std::atomic_ref a1cv(b); + std::atomic_ref a2(a0); + b = true; + VERIFY( a1.load() ); + VERIFY( a1c.load() ); + VERIFY( a1v.load() ); + VERIFY( a1cv.load() ); + VERIFY( a2.load() ); +} -template concept has_and = requires (T& a) { a &= false; }; -template concept has_or = requires (T& a) { a |= false; }; -template concept has_xor = requires (T& a) { a ^= false; }; -template concept has_fetch_add = requires (T& a) { a.fetch_add(true); }; -template concept has_fetch_sub = requires (T& a) { a.fetch_sub(true); }; - -static_assert( not has_and> ); -static_assert( not has_or> ); -static_assert( not has_xor> ); -static_assert( not has_fetch_add> ); -static_assert( not has_fetch_sub> ); +int +main() +{ + test01(); + test02(); +} diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_ref/cv_qual.cc b/libstdc++-v3/testsuite/29_atomics/atomic_ref/cv_qual.cc new file mode 100644 index 000000000000..dfc6a5599451 --- /dev/null +++ b/libstdc++-v3/testsuite/29_atomics/atomic_ref/cv_qual.cc @@ -0,0 +1,94 @@ +// Copyright (C) 2019-2025 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do run { target c++20 } } +// { dg-require-atomic-cmpxchg-word "" } +// { dg-add-options libatomic } + +#include +#include + +struct X +{ + X() = default; + X(int i) : i(i) { } + int i; + + friend bool + operator==(X, X) = default; +}; + +template +void +test01(V v0, V v1) +{ + V value; + + if constexpr (std::atomic_ref::is_always_lock_free) + { + std::atomic_ref a(value); + VERIFY( a.is_lock_free() ); + + a = v0; + VERIFY( V(a) == v0 ); + VERIFY( a.load() == v0 ); + + a.store(v1); + VERIFY( a.load() == v1 ); + + V last = a.exchange(v0); + VERIFY( a.load() == v0 ); + VERIFY( last == v1 ); + + V expected = a.load(); + while (!a.compare_exchange_weak(expected, v1)) + { /* weak form can fail spuriously */ } + VERIFY( a.load() == v1 ); + VERIFY( expected == v0 ); + + bool ok; + ok = a.compare_exchange_strong(expected, v0); + VERIFY( !ok && a.load() == v1 && expected == v1 ); + + ok = a.compare_exchange_strong(expected, v0); + VERIFY( ok && a.load() == v0 && expected == v1 ); + + std::atomic_ref cva(value); + VERIFY( cva.is_lock_free() ); + VERIFY( V(cva) == v0 ); + VERIFY( cva.load() == v0 ); + } + + value = v0; + std::atomic_ref ca(value); + bool lf = ca.is_lock_free(); + if constexpr (std::atomic_ref::is_always_lock_free) + VERIFY( lf ); + VERIFY( V(ca) == v0 ); + VERIFY( ca.load() == v0 ); +} + +int +main() +{ + int x; + test01(false, true); + test01(1, 2); + test01(1.2, 3.4); + test01(&x, &x+1); + test01(12, 13); +} diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_ref/deduction.cc b/libstdc++-v3/testsuite/29_atomics/atomic_ref/deduction.cc index f67190e97a3a..01dbfce23751 100644 --- a/libstdc++-v3/testsuite/29_atomics/atomic_ref/deduction.cc +++ b/libstdc++-v3/testsuite/29_atomics/atomic_ref/deduction.cc @@ -19,22 +19,29 @@ #include +template void -test01() +test_impl(T v) { - int i = 0; - std::atomic_ref a0(i); - static_assert(std::is_same_v>); - - float f = 1.0f; - std::atomic_ref a1(f); - static_assert(std::is_same_v>); + std::atomic_ref a(v); + static_assert(std::is_same_v>); +} - int* p = &i; - std::atomic_ref a2(p); - static_assert(std::is_same_v>); +template +void +test(T v) +{ + test_impl(v); + test_impl(v); + test_impl(v); + test_impl(v); +} +int main() +{ + test(0); + test(1.0f); + test(nullptr); struct X { } x; - std::atomic_ref a3(x); - static_assert(std::is_same_v>); + test(x); } diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_ref/float.cc b/libstdc++-v3/testsuite/29_atomics/atomic_ref/float.cc index 5773d144c36a..c69f3a711d34 100644 --- a/libstdc++-v3/testsuite/29_atomics/atomic_ref/float.cc +++ b/libstdc++-v3/testsuite/29_atomics/atomic_ref/float.cc @@ -299,14 +299,19 @@ test04() { if constexpr (std::atomic_ref::is_always_lock_free) { - float i = 0; - float* ptr = 0; - std::atomic_ref a0(ptr); - std::atomic_ref a1(ptr); - std::atomic_ref a2(a0); - a0 = &i; - VERIFY( a1 == &i ); - VERIFY( a2 == &i ); + float i = 0.0f; + std::atomic_ref a0(i); + std::atomic_ref a1(i); + std::atomic_ref a1c(i); + std::atomic_ref a1v(i); + std::atomic_ref a1cv(i); + std::atomic_ref a2(a0); + a0 = 1.0f; + VERIFY( a1 == 1.0f ); + VERIFY( a1c == 1.0f ); + VERIFY( a1v == 1.0f ); + VERIFY( a1cv == 1.0f ); + VERIFY( a2 == 1.0f ); } } diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_ref/generic.cc b/libstdc++-v3/testsuite/29_atomics/atomic_ref/generic.cc index 2e6fa0f90e2d..079ec1b1a785 100644 --- a/libstdc++-v3/testsuite/29_atomics/atomic_ref/generic.cc +++ b/libstdc++-v3/testsuite/29_atomics/atomic_ref/generic.cc @@ -108,9 +108,15 @@ test02() X i; std::atomic_ref a0(i); std::atomic_ref a1(i); + std::atomic_ref a1c(i); + std::atomic_ref a1v(i); + std::atomic_ref a1cv(i); std::atomic_ref a2(a0); a0 = 42; VERIFY( a1.load() == 42 ); + VERIFY( a1c.load() == 42 ); + VERIFY( a1v.load() == 42 ); + VERIFY( a1cv.load() == 42 ); VERIFY( a2.load() == 42 ); } diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_ref/integral.cc b/libstdc++-v3/testsuite/29_atomics/atomic_ref/integral.cc index f6b68ebc5989..310434cefb54 100644 --- a/libstdc++-v3/testsuite/29_atomics/atomic_ref/integral.cc +++ b/libstdc++-v3/testsuite/29_atomics/atomic_ref/integral.cc @@ -302,9 +302,15 @@ test03() int i = 0; std::atomic_ref a0(i); std::atomic_ref a1(i); + std::atomic_ref a1c(i); + std::atomic_ref a1v(i); + std::atomic_ref a1cv(i); std::atomic_ref a2(a0); a0 = 42; VERIFY( a1 == 42 ); + VERIFY( a1c == 42 ); + VERIFY( a1v == 42 ); + VERIFY( a1cv == 42 ); VERIFY( a2 == 42 ); } diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_ref/op_support.cc b/libstdc++-v3/testsuite/29_atomics/atomic_ref/op_support.cc new file mode 100644 index 000000000000..93c65dce2636 --- /dev/null +++ b/libstdc++-v3/testsuite/29_atomics/atomic_ref/op_support.cc @@ -0,0 +1,113 @@ +// { dg-do compile { target c++20 } } + +#include + +template concept has_and = requires (T& a) { a &= false; }; +template concept has_or = requires (T& a) { a |= false; }; +template concept has_xor = requires (T& a) { a ^= false; }; +template concept has_fetch_add = requires (T& a) { a.fetch_add(true); }; +template concept has_fetch_sub = requires (T& a) { a.fetch_sub(true); }; + +static constexpr std::memory_order mo = std::memory_order_seq_cst; + +#define HAS(op) (requires (std::atomic_ref a, T t) { op; }) + +template +void +no_stores() +{ + static_assert( !HAS(a = t) ); + static_assert( !HAS(a.store(t)) ); + static_assert( !HAS(a.store(t, mo)) ); + static_assert( !HAS(a.exchange(t)) ); + static_assert( !HAS(a.exchange(t, mo)) ); + + static_assert( !HAS(a.compare_exchange_weak(t, t)) ); + static_assert( !HAS(a.compare_exchange_weak(t, t, mo)) ); + static_assert( !HAS(a.compare_exchange_weak(t, t, mo, mo)) ); + + static_assert( !HAS(a.compare_exchange_strong(t, t)) ); + static_assert( !HAS(a.compare_exchange_strong(t, t, mo)) ); + static_assert( !HAS(a.compare_exchange_strong(t, t, mo, mo)) ); +} + +template +void +no_additions() +{ + static_assert( !HAS(a++) ); + static_assert( !HAS(++a) ); + static_assert( !HAS(a += t) ); + static_assert( !HAS(a.fetch_add(t)) ); + static_assert( !HAS(a.fetch_add(t, mo)) ); + + static_assert( !HAS(a--) ); + static_assert( !HAS(--a) ); + static_assert( !HAS(a -= t) ); + static_assert( !HAS(a.fetch_sub(t)) ); + static_assert( !HAS(a.fetch_sub(t, mo)) ); +} + +template +void +no_bitops() +{ + static_assert( !HAS(a &= t) ); + static_assert( !HAS(a.fetch_and(t)) ); + static_assert( !HAS(a.fetch_and(t, mo)) ); + + static_assert( !HAS(a |= t) ); + static_assert( !HAS(a.fetch_or(t)) ); + static_assert( !HAS(a.fetch_or(t, mo)) ); + + static_assert( !HAS(a ^= t) ); + static_assert( !HAS(a.fetch_xor(t)) ); + static_assert( !HAS(a.fetch_xor(t, mo)) ); +} + +template +void +no_math() +{ + no_additions(); + no_bitops(); +} + +template +void +no_mutations() +{ + no_stores(); + no_math(); +} + +struct S +{ + int x; + int y; +}; + +int main() +{ + no_mutations(); + no_mutations(); + + no_bitops(); + no_bitops(); + no_mutations(); + + no_bitops(); + no_bitops(); + no_mutations(); + no_mutations(); + + no_math(); + no_math(); + no_mutations(); + no_mutations(); + + no_math(); + no_math(); + no_mutations(); + no_mutations(); +} diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_ref/pointer.cc b/libstdc++-v3/testsuite/29_atomics/atomic_ref/pointer.cc index d1789af890eb..8db45c797c8d 100644 --- a/libstdc++-v3/testsuite/29_atomics/atomic_ref/pointer.cc +++ b/libstdc++-v3/testsuite/29_atomics/atomic_ref/pointer.cc @@ -210,9 +210,15 @@ test03() int* ptr = 0; std::atomic_ref a0(ptr); std::atomic_ref a1(ptr); + std::atomic_ref a1c(ptr); + std::atomic_ref a1v(ptr); + std::atomic_ref a1cv(ptr); std::atomic_ref a2(a0); a0 = &i; VERIFY( a1 == &i ); + VERIFY( a1c == &i ); + VERIFY( a1v == &i ); + VERIFY( a1cv == &i ); VERIFY( a2 == &i ); } diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_ref/requirements.cc b/libstdc++-v3/testsuite/29_atomics/atomic_ref/requirements.cc index 3b929563a1e7..8617661f8e13 100644 --- a/libstdc++-v3/testsuite/29_atomics/atomic_ref/requirements.cc +++ b/libstdc++-v3/testsuite/29_atomics/atomic_ref/requirements.cc @@ -18,56 +18,92 @@ // { dg-do compile { target c++20 } } #include +#include +template void -test01() +test_generic() { - struct X { int c; }; - using A = std::atomic_ref; + using A = std::atomic_ref; static_assert( std::is_standard_layout_v ); static_assert( std::is_nothrow_copy_constructible_v ); static_assert( std::is_trivially_destructible_v ); - static_assert( std::is_same_v ); + static_assert( std::is_same_v> ); + static_assert( !requires { typename A::difference_type; } ); static_assert( !std::is_copy_assignable_v ); static_assert( !std::is_move_assignable_v ); } +template void -test02() +test_integral() { - using A = std::atomic_ref; + using A = std::atomic_ref; static_assert( std::is_standard_layout_v ); static_assert( std::is_nothrow_copy_constructible_v ); static_assert( std::is_trivially_destructible_v ); - static_assert( std::is_same_v ); - static_assert( std::is_same_v ); + static_assert( std::is_same_v> ); + static_assert( std::is_same_v ); static_assert( !std::is_copy_assignable_v ); static_assert( !std::is_move_assignable_v ); } +template void -test03() +test_floating_point() { - using A = std::atomic_ref; + using A = std::atomic_ref; static_assert( std::is_standard_layout_v ); static_assert( std::is_nothrow_copy_constructible_v ); static_assert( std::is_trivially_destructible_v ); - static_assert( std::is_same_v ); - static_assert( std::is_same_v ); + static_assert( std::is_same_v> ); + static_assert( std::is_same_v ); static_assert( !std::is_copy_assignable_v ); static_assert( !std::is_move_assignable_v ); } +template void -test04() +test_pointer() { - using A = std::atomic_ref; + using A = std::atomic_ref; static_assert( std::is_standard_layout_v ); static_assert( std::is_nothrow_copy_constructible_v ); static_assert( std::is_trivially_destructible_v ); - static_assert( std::is_same_v ); - static_assert( std::is_same_v ); + static_assert( std::is_same_v> ); + static_assert( std::is_same_v ); static_assert( std::is_nothrow_copy_constructible_v ); static_assert( !std::is_copy_assignable_v ); static_assert( !std::is_move_assignable_v ); } + +int +main() +{ + struct X { int c; }; + test_generic(); + test_generic(); + test_generic(); + test_generic(); + + // atomic_ref excludes (cv) `bool` from the set of integral types + test_generic(); + test_generic(); + test_generic(); + test_generic(); + + test_integral(); + test_integral(); + test_integral(); + test_integral(); + + test_floating_point(); + test_floating_point(); + test_floating_point(); + test_floating_point(); + + test_pointer(); + test_pointer(); + test_pointer(); + test_pointer(); +} diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_ref/requirements_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_ref/requirements_neg.cc new file mode 100644 index 000000000000..8b0abbde023f --- /dev/null +++ b/libstdc++-v3/testsuite/29_atomics/atomic_ref/requirements_neg.cc @@ -0,0 +1,34 @@ +// { dg-do compile { target c++20 } } + +#include + +template +struct NonTrivial +{ + NonTrivial() = default; + NonTrivial(NonTrivial const&) { }; +}; + +template +NonTrivial ntv; + +std::atomic_ref> nt(ntv<0>); // { dg-error "here" } +std::atomic_ref> cnt(ntv<1>); // { dg-error "here" } +std::atomic_ref> vnt(ntv<2>); // { dg-error "here" } +std::atomic_ref> cvnt(ntv<3>); // { dg-error "here" } + +template +struct NonLockFree +{ + char c[1024 + N]; +}; + +template +NonLockFree nlfv; + +std::atomic_ref> nlf(nlfv<0>); +std::atomic_ref> cnlf(nlfv<1>); +std::atomic_ref> vnlf(nlfv<2>); // { dg-error "here" } +std::atomic_ref> cvnlf(nlfv<3>); // { dg-error "here" } + +// { dg-error "static assertion failed" "" { target *-*-* } 0 } diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_ref/wait_notify.cc b/libstdc++-v3/testsuite/29_atomics/atomic_ref/wait_notify.cc index ecabeecd5bb3..db20a197ed06 100644 --- a/libstdc++-v3/testsuite/29_atomics/atomic_ref/wait_notify.cc +++ b/libstdc++-v3/testsuite/29_atomics/atomic_ref/wait_notify.cc @@ -41,6 +41,16 @@ template }); a.wait(va); t.join(); + + std::atomic_ref b{ aa }; + b.wait(va); + std::thread t2([&] + { + a.store(va); + a.notify_one(); + }); + b.wait(vb); + t2.join(); } } From 8bd872f1ea74143aed0bd5148804a25dc6a9caf0 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 21 Feb 2024 16:11:53 +0000 Subject: [PATCH 207/216] libstdc++: Implement P3107R5 optimizations for std::print [PR121790] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The names of the vprint functions follow the convention from P3235R3. This takes advantage of the additional permission proposed by P3107R5 so that std::print can write directly to a FILE stream, rather than formatting to an intermediate std::string temporary and then writing that to the stream. The change is to write to a new _File_sink type instead of a _Str_sink that populates a std::string. There are three implementations of _File_sink. For non-Glibc targets that support POSIX flockfile and putc_unlocked, the stream will be locked and then formatted characters will be buffered on the stack (instead of allocating a std::string) and copied to the stream when the buffer fills up. For Glibc, _File_sink will lock the stream but then if the file is line-buffered or fully buffered, characters will be written directly into the file's output buffer. This avoids two levels of buffering and copying the characters from one to the other. For an unbuffered stream (like stderr) the _File_sink buffer will still be used, to avoid the overhead of lots of small writes to the stream. Because this version of _File_sink accesses the stream's buffer directly it relies on glibc-specific implementation details that are exposed in public headers. A fallback definition of _File_sink just wraps a _Str_sink so is equivalent to the original code, and is used when flockfile isn't available. Both forms of std::println (taking a FILE* and a std::ostream) can be implemented more efficiently by appending a newline to the format string, to avoid formatting twice. PR libstdc++/121790 libstdc++-v3/ChangeLog: * acinclude.m4 (GLIBCXX_CHECK_STDIO_LOCKING): New macro to check for std::print dependencies. * config.h.in: Regenerate. * configure: Regenerate. * configure.ac: Use GLIBCXX_CHECK_STDIO_LOCKING. * include/bits/formatfwd.h (enable_nonlocking_formatter_optimization): Define new variable template. * include/bits/version.def (print): Bump value. * include/bits/version.h: Regenerate. * include/std/format (enable_nonlocking_formatter_optimization): Define specializations for variable template. * include/std/ostream (print) [!_WIN32]: Do not use vprint_unicode at all. (println): Append newline to format string instead of formatting twice. * include/std/print (_File_sink): New class. (vprint_nonunicode_locking): New function. (vprint_unicode_locking): New function reusing previous code from vprint_unicode. (vprintf_unicode): Defer to vprint_nonunicode for Windows or to vprint_unicode_locking otherwise. (print): [!_WIN32]: Do no use vprint_unicode at all. Check enable_nonlocking_formatter_optimization and defer to either vprint_nonunicode_locking or vprint_nonunicode. (println): Use vprint_unicode or format directly to a _File_sink instead of formatting twice. * testsuite/27_io/print/1.cc: Updated and added new tests. * testsuite/std/format/formatter/nonlocking.cc: New tests. Reviewed-by: Jonathan Wakely Reviewed-by: Tomasz Kamiński Co-authored-by: Tomasz Kamiński --- libstdc++-v3/acinclude.m4 | 83 +++++ libstdc++-v3/config.h.in | 9 + libstdc++-v3/configure | 148 +++++++++ libstdc++-v3/configure.ac | 3 + libstdc++-v3/include/bits/formatfwd.h | 5 + libstdc++-v3/include/bits/version.def | 2 +- libstdc++-v3/include/bits/version.h | 4 +- libstdc++-v3/include/std/format | 86 +++++- libstdc++-v3/include/std/ostream | 17 +- libstdc++-v3/include/std/print | 284 +++++++++++++++++- libstdc++-v3/testsuite/27_io/print/1.cc | 56 +++- .../std/format/formatter/nonlocking.cc | 59 ++++ 12 files changed, 733 insertions(+), 23 deletions(-) create mode 100644 libstdc++-v3/testsuite/std/format/formatter/nonlocking.cc diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 index eb2d26286561..d040e8d30bee 100644 --- a/libstdc++-v3/acinclude.m4 +++ b/libstdc++-v3/acinclude.m4 @@ -5804,6 +5804,89 @@ AC_DEFUN([GLIBCXX_CHECK_DEBUGGING], [ AC_LANG_RESTORE ]) +dnl +dnl Check whether the dependencies for optimized std::print are available. +dnl +dnl Defines: +dnl _GLIBCXX_USE_STDIO_LOCKING if flockfile, putc_unlocked etc. are present. +dnl _GLIBCXX_USE_GLIBC_STDIO_EXT if FILE::_IO_write_ptr etc. are also present. +dnl +AC_DEFUN([GLIBCXX_CHECK_STDIO_LOCKING], [ +AC_LANG_SAVE + AC_LANG_CPLUSPLUS + + AC_MSG_CHECKING([whether flockfile and putc_unlocked are defined in ]) + AC_TRY_COMPILE([ + #include + ],[ + FILE* f = ::fopen("", ""); + ::flockfile(f); + ::putc_unlocked(' ', f); + ::funlockfile(f); + ::fclose(f); + ], [ac_stdio_locking=yes], [ac_stdio_locking=no]) + AC_MSG_RESULT($ac_stdio_locking) + + if test "$ac_stdio_locking" = yes; then + AC_DEFINE_UNQUOTED(_GLIBCXX_USE_STDIO_LOCKING, 1, + [Define if flockfile and putc_unlocked should be used for std::print.]) + + # This is not defined in POSIX, but is present in glibc, musl, and Solaris. + AC_MSG_CHECKING([whether fwrite_unlocked is defined in ]) + AC_TRY_COMPILE([ + #include + ],[ + FILE* f = ::fopen("", ""); + ::flockfile(f); + ::fwrite_unlocked("", 1, 1, f); + ::funlockfile(f); + ::fclose(f); + ], [ac_fwrite_unlocked=yes], [ac_fwrite_unlocked=no]) + AC_MSG_RESULT($ac_fwrite_unlocked) + if test "$ac_fwrite_unlocked" = yes; then + AC_DEFINE(HAVE_FWRITE_UNLOCKED, 1, + [Define if fwrite_unlocked can be used for std::print.]) + + # Check for Glibc-specific FILE members and extensions. + case "${target_os}" in + gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu) + AC_MSG_CHECKING([for FILE::_IO_write_ptr and ]) + AC_TRY_COMPILE([ + #include + #include + extern "C" { + using f1_type = int (*)(FILE*) noexcept; + using f2_type = size_t (*)(FILE*) noexcept; + } + ],[ + f1_type twritable = &::__fwritable; + f1_type tblk = &::__flbf; + f2_type pbufsize = &::__fbufsize; + FILE* f = ::fopen("", ""); + int i = ::__overflow(f, EOF); + bool writeable = ::__fwritable(f); + bool line_buffered = ::__flbf(f); + size_t bufsz = ::__fbufsize(f); + char*& pptr = f->_IO_write_ptr; + char*& epptr = f->_IO_buf_end; + ::fflush_unlocked(f); + ::fclose(f); + ], [ac_glibc_stdio=yes], [ac_glibc_stdio=no]) + AC_MSG_RESULT($ac_glibc_stdio) + if test "$ac_glibc_stdio" = yes; then + AC_DEFINE_UNQUOTED(_GLIBCXX_USE_GLIBC_STDIO_EXT, 1, + [Define if Glibc FILE internals should be used for std::print.]) + fi + ;; + *) + ;; + esac + fi + fi + + AC_LANG_RESTORE +]) + # Macros from the top-level gcc directory. m4_include([../config/gc++filt.m4]) diff --git a/libstdc++-v3/config.h.in b/libstdc++-v3/config.h.in index 818117aa6cce..4cfb9ba26be4 100644 --- a/libstdc++-v3/config.h.in +++ b/libstdc++-v3/config.h.in @@ -152,6 +152,9 @@ /* Define to 1 if you have the `frexpl' function. */ #undef HAVE_FREXPL +/* Define if fwrite_unlocked can be used for std::print. */ +#undef HAVE_FWRITE_UNLOCKED + /* Define if getentropy is available in . */ #undef HAVE_GETENTROPY @@ -828,6 +831,9 @@ /* Define if get_nprocs is available in . */ #undef _GLIBCXX_USE_GET_NPROCS +/* Define if Glibc FILE internals should be used for std::print. */ +#undef _GLIBCXX_USE_GLIBC_STDIO_EXT + /* Define if init_priority should be used for iostream initialization. */ #undef _GLIBCXX_USE_INIT_PRIORITY_ATTRIBUTE @@ -893,6 +899,9 @@ /* Define if sendfile is available in . */ #undef _GLIBCXX_USE_SENDFILE +/* Define if flockfile and putc_unlocked should be used for std::print. */ +#undef _GLIBCXX_USE_STDIO_LOCKING + /* Define to restrict std::__basic_file<> to stdio APIs. */ #undef _GLIBCXX_USE_STDIO_PURE diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index 713038b390bf..86ec969aaf15 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -54949,6 +54949,154 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu +# For std::print + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether flockfile and putc_unlocked are defined in " >&5 +$as_echo_n "checking whether flockfile and putc_unlocked are defined in ... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + +int +main () +{ + + FILE* f = ::fopen("", ""); + ::flockfile(f); + ::putc_unlocked(' ', f); + ::funlockfile(f); + ::fclose(f); + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_stdio_locking=yes +else + ac_stdio_locking=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_stdio_locking" >&5 +$as_echo "$ac_stdio_locking" >&6; } + + if test "$ac_stdio_locking" = yes; then + +cat >>confdefs.h <<_ACEOF +#define _GLIBCXX_USE_STDIO_LOCKING 1 +_ACEOF + + + # This is not defined in POSIX, but is present in glibc, musl, and Solaris. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fwrite_unlocked is defined in " >&5 +$as_echo_n "checking whether fwrite_unlocked is defined in ... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + +int +main () +{ + + FILE* f = ::fopen("", ""); + ::flockfile(f); + ::fwrite_unlocked("", 1, 1, f); + ::funlockfile(f); + ::fclose(f); + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_fwrite_unlocked=yes +else + ac_fwrite_unlocked=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_fwrite_unlocked" >&5 +$as_echo "$ac_fwrite_unlocked" >&6; } + if test "$ac_fwrite_unlocked" = yes; then + +$as_echo "#define HAVE_FWRITE_UNLOCKED 1" >>confdefs.h + + + # Check for Glibc-specific FILE members and extensions. + case "${target_os}" in + gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FILE::_IO_write_ptr and " >&5 +$as_echo_n "checking for FILE::_IO_write_ptr and ... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + #include + extern "C" { + using f1_type = int (*)(FILE*) noexcept; + using f2_type = size_t (*)(FILE*) noexcept; + } + +int +main () +{ + + f1_type twritable = &::__fwritable; + f1_type tblk = &::__flbf; + f2_type pbufsize = &::__fbufsize; + FILE* f = ::fopen("", ""); + int i = ::__overflow(f, EOF); + bool writeable = ::__fwritable(f); + bool line_buffered = ::__flbf(f); + size_t bufsz = ::__fbufsize(f); + char*& pptr = f->_IO_write_ptr; + char*& epptr = f->_IO_buf_end; + ::fflush_unlocked(f); + ::fclose(f); + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_glibc_stdio=yes +else + ac_glibc_stdio=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_glibc_stdio" >&5 +$as_echo "$ac_glibc_stdio" >&6; } + if test "$ac_glibc_stdio" = yes; then + +cat >>confdefs.h <<_ACEOF +#define _GLIBCXX_USE_GLIBC_STDIO_EXT 1 +_ACEOF + + fi + ;; + *) + ;; + esac + fi + fi + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + # Define documentation rules conditionally. # See if makeinfo has been installed and is modern enough diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac index 0bf219174fe7..47813eb95ca6 100644 --- a/libstdc++-v3/configure.ac +++ b/libstdc++-v3/configure.ac @@ -590,6 +590,9 @@ GLIBCXX_CHECK_TEXT_ENCODING # For std::is_debugger_present GLIBCXX_CHECK_DEBUGGING +# For std::print +GLIBCXX_CHECK_STDIO_LOCKING + # Define documentation rules conditionally. # See if makeinfo has been installed and is modern enough diff --git a/libstdc++-v3/include/bits/formatfwd.h b/libstdc++-v3/include/bits/formatfwd.h index 314b55d50bcd..883b772752a7 100644 --- a/libstdc++-v3/include/bits/formatfwd.h +++ b/libstdc++-v3/include/bits/formatfwd.h @@ -190,6 +190,11 @@ namespace __format }(); #endif // format_ranges +#if __glibcxx_print >= 202403L + template + constexpr bool enable_nonlocking_formatter_optimization = false; +#endif + _GLIBCXX_END_NAMESPACE_VERSION } // namespace std #endif // __glibcxx_format diff --git a/libstdc++-v3/include/bits/version.def b/libstdc++-v3/include/bits/version.def index 7c91a18c6861..1c0f43e465b5 100644 --- a/libstdc++-v3/include/bits/version.def +++ b/libstdc++-v3/include/bits/version.def @@ -1865,7 +1865,7 @@ ftms = { ftms = { name = print; values = { - v = 202211; + v = 202403; cxxmin = 23; hosted = yes; }; diff --git a/libstdc++-v3/include/bits/version.h b/libstdc++-v3/include/bits/version.h index 7ba78774041a..7b97accc47e1 100644 --- a/libstdc++-v3/include/bits/version.h +++ b/libstdc++-v3/include/bits/version.h @@ -2083,9 +2083,9 @@ #if !defined(__cpp_lib_print) # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED -# define __glibcxx_print 202211L +# define __glibcxx_print 202403L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_print) -# define __cpp_lib_print 202211L +# define __cpp_lib_print 202403L # endif # endif #endif /* !defined(__cpp_lib_print) */ diff --git a/libstdc++-v3/include/std/format b/libstdc++-v3/include/std/format index 842972eed4ca..1d01bc39e9c3 100644 --- a/libstdc++-v3/include/std/format +++ b/libstdc++-v3/include/std/format @@ -2599,6 +2599,11 @@ namespace __format __format::__formatter_int<_CharT> _M_f; }; +#if __glibcxx_print >= 202403L + template<__format::__char _CharT> + constexpr bool enable_nonlocking_formatter_optimization<_CharT> = true; +#endif + #ifdef _GLIBCXX_USE_WCHAR_T /// Format a char value for wide character output. template<> @@ -2660,6 +2665,11 @@ namespace __format __format::__formatter_str<_CharT> _M_f; }; +#if __glibcxx_print >= 202403L + template<__format::__char _CharT> + constexpr bool enable_nonlocking_formatter_optimization<_CharT*> = true; +#endif + template<__format::__char _CharT> struct formatter { @@ -2685,6 +2695,12 @@ namespace __format __format::__formatter_str<_CharT> _M_f; }; +#if __glibcxx_print >= 202403L + template<__format::__char _CharT> + constexpr bool + enable_nonlocking_formatter_optimization = true; +#endif + template<__format::__char _CharT, size_t _Nm> struct formatter<_CharT[_Nm], _CharT> { @@ -2709,6 +2725,11 @@ namespace __format __format::__formatter_str<_CharT> _M_f; }; +#if __glibcxx_print >= 202403L + template<__format::__char _CharT, size_t _Nm> + constexpr bool enable_nonlocking_formatter_optimization<_CharT[_Nm]> = true; +#endif + template struct formatter, char> { @@ -2733,6 +2754,13 @@ namespace __format __format::__formatter_str _M_f; }; +#if __glibcxx_print >= 202403L + template + constexpr bool + enable_nonlocking_formatter_optimization> + = true; +#endif + #ifdef _GLIBCXX_USE_WCHAR_T template struct formatter, wchar_t> @@ -2757,6 +2785,14 @@ namespace __format private: __format::__formatter_str _M_f; }; + +#if __glibcxx_print >= 202403L + template + constexpr bool + enable_nonlocking_formatter_optimization> + = true; +#endif + #endif // USE_WCHAR_T template @@ -2783,6 +2819,13 @@ namespace __format __format::__formatter_str _M_f; }; +#if __glibcxx_print >= 202403L + template + constexpr bool + enable_nonlocking_formatter_optimization> + = true; +#endif + #ifdef _GLIBCXX_USE_WCHAR_T template struct formatter, wchar_t> @@ -2807,6 +2850,13 @@ namespace __format private: __format::__formatter_str _M_f; }; + +#if __glibcxx_print >= 202403L + template + constexpr bool + enable_nonlocking_formatter_optimization> + = true; +#endif #endif // USE_WCHAR_T /// @} @@ -2831,12 +2881,14 @@ namespace __format #endif template<> inline constexpr bool __is_formattable_integer = false; template<> inline constexpr bool __is_formattable_integer = false; + + template + concept __formattable_integer = __is_formattable_integer<_Tp>; } /// @endcond /// Format an integer. - template - requires __format::__is_formattable_integer<_Tp> + template<__format::__formattable_integer _Tp, __format::__char _CharT> struct formatter<_Tp, _CharT> { formatter() = default; @@ -2857,6 +2909,12 @@ namespace __format __format::__formatter_int<_CharT> _M_f; }; +#if __glibcxx_print >= 202403L + template<__format::__formattable_integer _Tp> + constexpr bool + enable_nonlocking_formatter_optimization<_Tp> = true; +#endif + #if defined __glibcxx_to_chars /// Format a floating-point value. template<__format::__formattable_float _Tp, __format::__char _CharT> @@ -2878,6 +2936,12 @@ namespace __format __format::__formatter_fp<_CharT> _M_f; }; +#if __glibcxx_print >= 202403L + template<__format::__formattable_float _Tp> + constexpr bool + enable_nonlocking_formatter_optimization<_Tp> = true; +#endif + #if __LDBL_MANT_DIG__ == __DBL_MANT_DIG__ // Reuse __formatter_fp::format for long double. template<__format::__char _CharT> @@ -3056,6 +3120,12 @@ namespace __format __format::__formatter_ptr<_CharT> _M_f; }; +#if __glibcxx_print >= 202403L + template<> + inline constexpr bool + enable_nonlocking_formatter_optimization = true; +#endif + template<__format::__char _CharT> struct formatter { @@ -3075,6 +3145,12 @@ namespace __format __format::__formatter_ptr<_CharT> _M_f; }; +#if __glibcxx_print >= 202403l + template<> + inline constexpr bool + enable_nonlocking_formatter_optimization = true; +#endif + template<__format::__char _CharT> struct formatter { @@ -3095,6 +3171,12 @@ namespace __format }; /// @} +#if __glibcxx_print >= 202403L + template<> + inline constexpr bool + enable_nonlocking_formatter_optimization = true; +#endif + #if defined _GLIBCXX_USE_WCHAR_T && __glibcxx_format_ranges // _GLIBCXX_RESOLVE_LIB_DEFECTS // 3944. Formatters converting sequences of char to sequences of wchar_t diff --git a/libstdc++-v3/include/std/ostream b/libstdc++-v3/include/std/ostream index 3a0a0d35df1d..33872969fe06 100644 --- a/libstdc++-v3/include/std/ostream +++ b/libstdc++-v3/include/std/ostream @@ -259,9 +259,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION print(ostream& __os, format_string<_Args...> __fmt, _Args&&... __args) { auto __fmtargs = std::make_format_args(__args...); +#if defined(_WIN32) && !defined(__CYGWIN__) if constexpr (__unicode::__literal_encoding_is_utf8()) std::vprint_unicode(__os, __fmt.get(), __fmtargs); else +#endif std::vprint_nonunicode(__os, __fmt.get(), __fmtargs); } @@ -269,10 +271,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION inline void println(ostream& __os, format_string<_Args...> __fmt, _Args&&... __args) { - // _GLIBCXX_RESOLVE_LIB_DEFECTS - // 4088. println ignores the locale imbued in std::ostream - std::print(__os, "{}\n", std::format(__os.getloc(), __fmt, - std::forward<_Args>(__args)...)); + auto __fmtargs = std::make_format_args(__args...); + std::string __fmtn; + __fmtn.reserve(__fmt.get().size() + 1); + __fmtn = __fmt.get(); + __fmtn += '\n'; +#if defined(_WIN32) && !defined(__CYGWIN__) + if constexpr (__unicode::__literal_encoding_is_utf8()) + std::vprint_unicode(__os, __fmtn, __fmtargs); + else +#endif + std::vprint_nonunicode(__os, __fmtn, __fmtargs); } // Defined for C++26, supported as an extension to C++23. diff --git a/libstdc++-v3/include/std/print b/libstdc++-v3/include/std/print index 92dbe118fc31..6ffd9a4b1b3f 100644 --- a/libstdc++-v3/include/std/print +++ b/libstdc++-v3/include/std/print @@ -53,8 +53,213 @@ namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION +namespace __format +{ +#if _GLIBCXX_USE_STDIO_LOCKING && _GLIBCXX_USE_GLIBC_STDIO_EXT + // These are defined in but we don't want to include that. + extern "C" int __fwritable(FILE*) noexcept; + extern "C" int __flbf(FILE*) noexcept; + extern "C" size_t __fbufsize(FILE*) noexcept; + + // A format sink that writes directly to a Glibc FILE. + // The file is locked on construction and its buffer is accessed directly. + class _File_sink final : _Buf_sink + { + struct _File + { + explicit + _File(FILE* __f) : _M_file(__f) + { + ::flockfile(__f); + // Ensure stream is in write mode + if (!__fwritable(__f)) + { + ::funlockfile(__f); + __throw_system_error(EACCES); + } + // Allocate buffer if needed: + if (_M_write_buf().empty()) + if (::__overflow(__f, EOF) == EOF) + { + const int __err = errno; + ::funlockfile(__f); + __throw_system_error(__err); + } + } + + ~_File() { ::funlockfile(_M_file); } + + _File(_File&&) = delete; + + // A span viewing the unused portion of the stream's output buffer. + std::span + _M_write_buf() noexcept + { + return {_M_file->_IO_write_ptr, + size_t(_M_file->_IO_buf_end - _M_file->_IO_write_ptr)}; + } + + // Flush the output buffer to the file so we can write to it again. + void + _M_flush() + { + if (::fflush_unlocked(_M_file)) + __throw_system_error(errno); + } + + // Update the current position in the output buffer. + void + _M_bump(size_t __n) noexcept + { _M_file->_IO_write_ptr += __n; } + + bool + _M_line_buffered() const noexcept + { return __flbf(_M_file); } // Or: _M_file->_flags & 0x200 + + bool + _M_unbuffered() const noexcept + { return __fbufsize(_M_file) == 1; } // Or: _M_file->_flags & 0x2 + + FILE* _M_file; + } _M_file; + + bool _M_add_newline; // True for std::println, false for std::print. + + // Flush the stream's put area so it can be refilled. + void + _M_overflow() override + { + auto __s = this->_M_used(); + if (__s.data() == this->_M_buf) + { + // Characters in internal buffer need to be transferred to the FILE. + auto __n = ::fwrite_unlocked(__s.data(), 1, __s.size(), + _M_file._M_file); + if (__n != __s.size()) + __throw_system_error(errno); + this->_M_reset(this->_M_buf); + } + else + { + // Characters were written directly to the FILE's output buffer. + _M_file._M_bump(__s.size()); + _M_file._M_flush(); + this->_M_reset(_M_file._M_write_buf()); + } + } + + public: + _File_sink(FILE* __f, bool __add_newline) + : _M_file(__f), _M_add_newline(__add_newline) + { + if (!_M_file._M_unbuffered()) + // Write directly to the FILE's output buffer. + this->_M_reset(_M_file._M_write_buf()); + } + + ~_File_sink() noexcept(false) + { + auto __s = this->_M_used(); + if (__s.data() == this->_M_buf) // Unbuffered stream + { + _File_sink::_M_overflow(); + if (_M_add_newline) + ::putc_unlocked('\n', _M_file._M_file); + } + else + { + _M_file._M_bump(__s.size()); + if (_M_add_newline) + ::putc_unlocked('\n', _M_file._M_file); + else if (_M_file._M_line_buffered() && __s.size() + && (__s.back() == '\n' + || __builtin_memchr(__s.data(), '\n', __s.size()))) + _M_file._M_flush(); + } + } + + using _Sink::out; + }; +#elif _GLIBCXX_USE_STDIO_LOCKING + // A format sink that buffers output and then copies it to a stdio FILE. + // The file is locked on construction and written to using fwrite_unlocked. + class _File_sink final : _Buf_sink + { + FILE* _M_file; + bool _M_add_newline; + + // Transfer buffer contents to the FILE, so buffer can be refilled. + void + _M_overflow() override + { + auto __s = this->_M_used(); +#if _GLIBCXX_HAVE_FWRITE_UNLOCKED + auto __n = ::fwrite_unlocked(__s.data(), 1, __s.size(), _M_file); + if (__n != __s.size()) + __throw_system_error(errno); +#else + for (char __c : __s) + ::putc_unlocked(__c, _M_file); + if (::ferror(_M_file)) + __throw_system_error(errno); +#endif + this->_M_reset(this->_M_buf); + } + + public: + _File_sink(FILE* __f, bool __add_newline) noexcept + : _Buf_sink(), _M_file(__f), _M_add_newline(__add_newline) + { ::flockfile(__f); } + + ~_File_sink() noexcept(false) + { + _File_sink::_M_overflow(); + if (_M_add_newline) + ::putc_unlocked('\n', _M_file); + ::funlockfile(_M_file); + } + + using _Sink::out; + }; +#else + // A wrapper around a format sink that copies the output to a stdio FILE. + // This is not actually a _Sink itself, but it creates one to hold the + // formatted characters and then copies them to the file when finished. + class _File_sink final + { + FILE* _M_file; + _Str_sink _M_sink; + bool _M_add_newline; + + public: + _File_sink(FILE* __f, bool __add_newline) noexcept + : _M_file(__f), _M_add_newline(__add_newline) + { } + + ~_File_sink() noexcept(false) + { + string __s = std::move(_M_sink).get(); + if (_M_add_newline) + __s += '\n'; + auto __n = std::fwrite(__s.data(), 1, __s.size(), _M_file); + if (__n < __s.size()) + __throw_system_error(EIO); + } + + auto out() { return _M_sink.out(); } + }; +#endif +} // namespace __format + inline void vprint_nonunicode(FILE* __stream, string_view __fmt, format_args __args) + { + std::vformat_to(__format::_File_sink(__stream, false).out(), __fmt, __args); + } + + inline void + vprint_nonunicode_buffered(FILE* __stream, string_view __fmt, + format_args __args) { __format::_Str_sink __buf; std::vformat_to(__buf.out(), __fmt, __args); @@ -80,7 +285,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // If stream refers to a terminal, write a native Unicode string to it. if (auto __term = __open_terminal(__stream)) { - string __out = std::vformat(__fmt, __args); error_code __e; if (!std::fflush(__stream)) { @@ -95,21 +299,44 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _GLIBCXX_THROW_OR_ABORT(system_error(__e, "std::vprint_unicode")); } - // Otherwise just write the string to the file as vprint_nonunicode does. + // Otherwise just write the string to the file. if (std::fwrite(__out.data(), 1, __out.size(), __stream) != __out.size()) __throw_system_error(EIO); #endif } + inline void + vprint_unicode_buffered(FILE* __stream, string_view __fmt, format_args __args) + { +#if !defined(_WIN32) || defined(__CYGWIN__) + // For most targets we don't need to do anything special to write + // Unicode to a terminal. Just use the nonunicode function. + std::vprint_nonunicode_buffered(__stream, __fmt, __args); +#else + // For Windows the locking function formats everything first anyway, + // so no formatting happens while a lock is taken. Just use that. + std::vprint_unicode(__stream, __fmt, __args); +#endif + } + template inline void print(FILE* __stream, format_string<_Args...> __fmt, _Args&&... __args) { + constexpr bool __locksafe = + (enable_nonlocking_formatter_optimization> && ...); + auto __fmtargs = std::make_format_args(__args...); +#if defined(_WIN32) && !defined(__CYGWIN__) if constexpr (__unicode::__literal_encoding_is_utf8()) - std::vprint_unicode(__stream, __fmt.get(), __fmtargs); + std::vprint_unicode_buffered(__stream, __fmt.get(), __fmtargs); else +#endif + + if constexpr (__locksafe) std::vprint_nonunicode(__stream, __fmt.get(), __fmtargs); + else + std::vprint_nonunicode_buffered(__stream, __fmt.get(), __fmtargs); } template @@ -121,8 +348,45 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION inline void println(FILE* __stream, format_string<_Args...> __fmt, _Args&&... __args) { - std::print(__stream, "{}\n", - std::format(__fmt, std::forward<_Args>(__args)...)); + constexpr bool __locksafe = + (enable_nonlocking_formatter_optimization> && ...); + + // The standard wants us to call + // print(stream, runtime_format(string(fmt.get()) + '\n'), args...) + // here, but we can avoid that string concatenation in most cases, + // and we know what that would call, so we can call that directly. + + auto __fmtargs = std::make_format_args(__args...); +#if defined(_WIN32) && !defined(__CYGWIN__) + if constexpr (__unicode::__literal_encoding_is_utf8()) + { + // We can't avoid the string concatenation here, but we can call + // vprint_unicode_buffered directly, since that's what print would do. + string __fmtn; + __fmtn.reserve(__fmt.get().size() + 1); + __fmtn = __fmt.get(); + __fmtn += '\n'; + std::vprint_unicode_buffered(__stream, __fmtn, __fmtargs); + } + else +#endif + + // For non-Windows and for non-Unicode on Windows, we know that print + // would call vprint_nonunicode or vprint_nonunicode_buffered with a + // newline appended to the format-string. Use a _File_sink that adds + // the newline automatically and write to it directly. + if constexpr (__locksafe) + std::vformat_to(__format::_File_sink(__stream, true).out(), + __fmt.get(), __fmtargs); + else + { + // Format to a string buffer first, then write the result to a + // _File_sink that adds a newline. + __format::_Str_sink __buf; + std::vformat_to(__buf.out(), __fmt.get(), __fmtargs); + string_view __s(__buf.view()); + __format::_File_sink(__stream, true).out() = __s; + } } template @@ -131,19 +395,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { std::println(stdout, __fmt, std::forward<_Args>(__args)...); } inline void - vprint_unicode(string_view __fmt, format_args __args) - { std::vprint_unicode(stdout, __fmt, __args); } + vprint_unicode_buffered(string_view __fmt, format_args __args) + { std::vprint_unicode_buffered(stdout, __fmt, __args); } inline void - vprint_nonunicode(string_view __fmt, format_args __args) - { std::vprint_nonunicode(stdout, __fmt, __args); } + vprint_nonunicode_buffered(string_view __fmt, format_args __args) + { std::vprint_nonunicode_buffered(stdout, __fmt, __args); } // Defined for C++26, supported as an extension to C++23. inline void println(FILE* __stream) { #if defined(_WIN32) && !defined(__CYGWIN__) if constexpr (__unicode::__literal_encoding_is_utf8()) - std::vprint_unicode(__stream, "\n", std::make_format_args()); + std::vprint_unicode_buffered(__stream, "\n", std::make_format_args()); else #endif if (std::putc('\n', __stream) == EOF) diff --git a/libstdc++-v3/testsuite/27_io/print/1.cc b/libstdc++-v3/testsuite/27_io/print/1.cc index 2a74e5002f44..58f1eb163dfa 100644 --- a/libstdc++-v3/testsuite/27_io/print/1.cc +++ b/libstdc++-v3/testsuite/27_io/print/1.cc @@ -68,15 +68,22 @@ test_print_raw() void test_vprint_nonunicode() { - std::vprint_nonunicode("{0} in \xc0 {0} out\n", + std::vprint_nonunicode_buffered("{0} in \xc0 {0} out\n", std::make_format_args("garbage")); - // { dg-output "garbage in . garbage out" } + // { dg-output "garbage in . garbage out\r?\n" } + std::vprint_nonunicode_buffered(stdout, "{0} in \xc3 {0} out\n", + std::make_format_args("junk")); + // { dg-output "junk in . junk out\r?\n" } + std::vprint_nonunicode(stdout, "{0} in \xc2 {0} out\n", + std::make_format_args("trash")); + // { dg-output "trash in . trash out\r?\n" } + } +#ifdef __cpp_exceptions void test_errors() { -#ifdef __cpp_exceptions try { std::print(stdin, "{}", "nope"); @@ -85,9 +92,47 @@ test_errors() catch (const std::system_error&) { } -#endif } +struct ThrowOnFormat +{}; + +template +struct std::formatter +{ + constexpr typename std::basic_format_parse_context::iterator + parse(const std::basic_format_parse_context& pc) const + { return pc.begin(); } + + template + typename std::basic_format_context::iterator + format(ThrowOnFormat, const std::basic_format_context&) const + { throw ThrowOnFormat{}; } +}; + +void +test_buffered() +{ + __gnu_test::scoped_file f; + FILE* strm = std::fopen(f.path.string().c_str(), "w"); + VERIFY( strm ); + try + { + std::string s = "Test"; + ThrowOnFormat tf; + std::vprint_unicode_buffered(strm, "{} {} {} {}", std::make_format_args(s, s, s, tf)); + VERIFY(false); + } + catch (ThrowOnFormat) + { } + std::fclose(strm); + + std::ifstream in(f.path); + std::string txt(std::istreambuf_iterator(in), {}); + VERIFY( txt.empty() ); +} +#endif + int main() { test_print_default(); @@ -96,5 +141,8 @@ int main() test_println_file(); test_print_raw(); test_vprint_nonunicode(); +#ifdef __cpp_exceptions test_errors(); + test_buffered(); +#endif } diff --git a/libstdc++-v3/testsuite/std/format/formatter/nonlocking.cc b/libstdc++-v3/testsuite/std/format/formatter/nonlocking.cc new file mode 100644 index 000000000000..a726e9d74cee --- /dev/null +++ b/libstdc++-v3/testsuite/std/format/formatter/nonlocking.cc @@ -0,0 +1,59 @@ +// { dg-do compile { target c++23 } } + +#include +#include + +template +struct MyTraits : std::char_traits +{}; + +template +struct MyAlloc : std::allocator +{ + using std::allocator::allocator; +}; + +template +void testCharacters() +{ + static_assert(std::enable_nonlocking_formatter_optimization< + CharT>); + static_assert(std::enable_nonlocking_formatter_optimization< + CharT*>); + static_assert(std::enable_nonlocking_formatter_optimization< + const CharT*>); + static_assert(std::enable_nonlocking_formatter_optimization< + CharT[5]>); + + static_assert(std::enable_nonlocking_formatter_optimization< + std::basic_string>); + static_assert(std::enable_nonlocking_formatter_optimization< + std::basic_string>>); + static_assert(std::enable_nonlocking_formatter_optimization< + std::basic_string, MyAlloc>>); + + static_assert(std::enable_nonlocking_formatter_optimization< + std::basic_string_view>); + static_assert(std::enable_nonlocking_formatter_optimization< + std::basic_string_view>>); +} + +void testAll() +{ + static_assert(std::enable_nonlocking_formatter_optimization< + int>); + static_assert(std::enable_nonlocking_formatter_optimization< + float>); + static_assert(std::enable_nonlocking_formatter_optimization< + void*>); + static_assert(std::enable_nonlocking_formatter_optimization< + const void*>); + static_assert(std::enable_nonlocking_formatter_optimization< + std::nullptr_t>); + + testCharacters(); +#ifdef _GLIBCXX_USE_WCHAR_T + testCharacters(); +#endif // USE_WCHAR_T +} + From c8b388a94890b06d58a290dd39b9023cc4383c80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Kami=C5=84ski?= Date: Thu, 2 Oct 2025 16:17:05 +0200 Subject: [PATCH 208/216] libstdc++: Implement P3235R3 optimizations for std::print [PR121790] This patch implements additional enable_nonlocking_formatter_optimization specializations listed in P3235R3. PR libstdc++/121790 libstdc++-v3/ChangeLog: * include/bits/chrono_io.h (enable_nonlocking_formatter_optimization): Define specializations for chrono types. * include/bits/version.def (print): Bump. * include/bits/version.h: Regenerate. * include/std/format (enable_nonlocking_formatter_optimization): Define specializations for pair, tuple and ranges. * include/std/queue (enable_nonlocking_formatter_optimization): Define specializations for queue and priority_queue. * include/std/stack (enable_nonlocking_formatter_optimization): Define specialization for stack. * include/std/stacktrace (enable_nonlocking_formatter_optimization): Define specialization for basic_stacktrace and stacktrace_entry. * include/std/thread (enable_nonlocking_formatter_optimization): Define specialization for thread::id. * include/std/vector (enable_nonlocking_formatter_optimization): Define specialization for vector::reference. * testsuite/23_containers/vector/bool/format.cc: Test value of enable_nonlocking_formatter_optimization. * testsuite/30_threads/thread/id/output.cc: Likewise. * testsuite/std/format/ranges/adaptors.cc: Likewise. * testsuite/std/format/ranges/formatter.cc: Likewise. * testsuite/std/format/tuple.cc: Likewise. * testsuite/std/time/format/empty_spec.cc: Extract Rep class to custom_rep.h. * testsuite/std/time/format/custom_rep.h: Extracted from empty_spec.cc. * testsuite/std/time/format/nonlocking.cc: New test. Reviewed-by: Jonathan Wakely --- libstdc++-v3/include/bits/chrono_io.h | 172 ++++++++++++++++++ libstdc++-v3/include/bits/version.def | 2 +- libstdc++-v3/include/bits/version.h | 4 +- libstdc++-v3/include/std/format | 22 +++ libstdc++-v3/include/std/queue | 15 ++ libstdc++-v3/include/std/stack | 7 + libstdc++-v3/include/std/stacktrace | 12 ++ libstdc++-v3/include/std/thread | 7 + libstdc++-v3/include/std/vector | 7 + .../23_containers/vector/bool/format.cc | 1 + .../testsuite/30_threads/thread/id/output.cc | 5 +- .../testsuite/std/format/ranges/adaptors.cc | 10 + .../testsuite/std/format/ranges/formatter.cc | 14 +- libstdc++-v3/testsuite/std/format/tuple.cc | 37 ++++ .../testsuite/std/time/format/custom_rep.h | 92 ++++++++++ .../testsuite/std/time/format/empty_spec.cc | 89 +-------- .../testsuite/std/time/format/nonlocking.cc | 164 +++++++++++++++++ 17 files changed, 567 insertions(+), 93 deletions(-) create mode 100644 libstdc++-v3/testsuite/std/time/format/custom_rep.h create mode 100644 libstdc++-v3/testsuite/std/time/format/nonlocking.cc diff --git a/libstdc++-v3/include/bits/chrono_io.h b/libstdc++-v3/include/bits/chrono_io.h index 1e2f45b0bf81..df047f1103bd 100644 --- a/libstdc++-v3/include/bits/chrono_io.h +++ b/libstdc++-v3/include/bits/chrono_io.h @@ -2234,6 +2234,13 @@ namespace __format __format::__formatter_duration<_CharT> _M_f{__defSpec}; }; +#if __glibcxx_print >= 202406L + template + constexpr bool + enable_nonlocking_formatter_optimization> + = enable_nonlocking_formatter_optimization<_Rep>; +#endif + template<__format::__char _CharT> struct formatter { @@ -2270,6 +2277,12 @@ namespace __format __format::__formatter_chrono<_CharT> _M_f{__defSpec}; }; +#if __glibcxx_print >= 202406L + template<> + inline constexpr bool + enable_nonlocking_formatter_optimization = true; +#endif + template<__format::__char _CharT> struct formatter { @@ -2308,6 +2321,12 @@ namespace __format __format::__formatter_chrono<_CharT> _M_f{__defSpec}; }; +#if __glibcxx_print >= 202406L + template<> + inline constexpr bool + enable_nonlocking_formatter_optimization = true; +#endif + template<__format::__char _CharT> struct formatter { @@ -2344,6 +2363,12 @@ namespace __format __format::__formatter_chrono<_CharT> _M_f{__defSpec}; }; +#if __glibcxx_print >= 202406L + template<> + inline constexpr bool + enable_nonlocking_formatter_optimization = true; +#endif + template<__format::__char _CharT> struct formatter { @@ -2382,6 +2407,12 @@ namespace __format __format::__formatter_chrono<_CharT> _M_f{__defSpec}; }; +#if __glibcxx_print >= 202406L + template<> + inline constexpr bool + enable_nonlocking_formatter_optimization = true; +#endif + template<__format::__char _CharT> struct formatter { @@ -2420,6 +2451,12 @@ namespace __format __format::__formatter_chrono<_CharT> _M_f{__defSpec}; }; +#if __glibcxx_print >= 202406L + template<> + inline constexpr bool + enable_nonlocking_formatter_optimization = true; +#endif + template<__format::__char _CharT> struct formatter { @@ -2458,6 +2495,12 @@ namespace __format __format::__formatter_chrono<_CharT> _M_f{__defSpec}; }; +#if __glibcxx_print >= 202406L + template<> + inline constexpr bool + enable_nonlocking_formatter_optimization = true; +#endif + template<__format::__char _CharT> struct formatter { @@ -2497,6 +2540,12 @@ namespace __format __format::__formatter_chrono<_CharT> _M_f{__defSpec}; }; +#if __glibcxx_print >= 202406L + template<> + inline constexpr bool + enable_nonlocking_formatter_optimization = true; +#endif + template<__format::__char _CharT> struct formatter { @@ -2535,6 +2584,12 @@ namespace __format __format::__formatter_chrono<_CharT> _M_f{__defSpec}; }; +#if __glibcxx_print >= 202406L + template<> + inline constexpr bool + enable_nonlocking_formatter_optimization = true; +#endif + template<__format::__char _CharT> struct formatter { @@ -2574,6 +2629,12 @@ namespace __format __format::__formatter_chrono<_CharT> _M_f{__defSpec}; }; +#if __glibcxx_print >= 202406L + template<> + inline constexpr bool + enable_nonlocking_formatter_optimization = true; +#endif + template<__format::__char _CharT> struct formatter { @@ -2613,6 +2674,12 @@ namespace __format __format::__formatter_chrono<_CharT> _M_f{__defSpec}; }; +#if __glibcxx_print >= 202406L + template<> + inline constexpr bool + enable_nonlocking_formatter_optimization = true; +#endif + template<__format::__char _CharT> struct formatter { @@ -2651,6 +2718,12 @@ namespace __format __format::__formatter_chrono<_CharT> _M_f{__defSpec}; }; +#if __glibcxx_print >= 202406L + template<> + inline constexpr bool + enable_nonlocking_formatter_optimization = true; +#endif + template<__format::__char _CharT> struct formatter { @@ -2693,6 +2766,12 @@ namespace __format __format::__formatter_chrono<_CharT> _M_f{__defSpec}; }; +#if __glibcxx_print >= 202406L + template<> + inline constexpr bool + enable_nonlocking_formatter_optimization = true; +#endif + template<__format::__char _CharT> struct formatter { @@ -2740,6 +2819,12 @@ namespace __format __format::__formatter_chrono<_CharT> _M_f{__defSpec}; }; +#if __glibcxx_print >= 202406L + template<> + inline constexpr bool + enable_nonlocking_formatter_optimization = true; +#endif + template<__format::__char _CharT> struct formatter { @@ -2795,6 +2880,12 @@ namespace __format __format::__formatter_chrono<_CharT> _M_f{__defSpec}; }; +#if __glibcxx_print >= 202406L + template<> + inline constexpr bool + enable_nonlocking_formatter_optimization = true; +#endif + template<__format::__char _CharT> struct formatter { @@ -2846,6 +2937,12 @@ namespace __format __format::__formatter_chrono<_CharT> _M_f{__defSpec}; }; +#if __glibcxx_print >= 202406L + template<> + inline constexpr bool + enable_nonlocking_formatter_optimization = true; +#endif + template struct formatter>, _CharT> { @@ -2890,6 +2987,13 @@ namespace __format __format::__formatter_duration<_CharT> _M_f{__defSpec}; }; +#if __glibcxx_print >= 202406L + template + constexpr bool + enable_nonlocking_formatter_optimization> + = true; +#endif + #if _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI template<__format::__char _CharT> struct formatter @@ -2908,6 +3012,12 @@ namespace __format __format::__formatter_chrono_info<_CharT> _M_f; }; +#if __glibcxx_print >= 202406L + template<> + inline constexpr bool + enable_nonlocking_formatter_optimization = true; +#endif + template<__format::__char _CharT> struct formatter { @@ -2924,6 +3034,12 @@ namespace __format private: __format::__formatter_chrono_info<_CharT> _M_f; }; + +#if __glibcxx_print >= 202406L + template<> + inline constexpr bool + enable_nonlocking_formatter_optimization = true; +#endif #endif template @@ -2962,6 +3078,13 @@ namespace __format __format::__formatter_duration<_CharT> _M_f{__defSpec}; }; +#if __glibcxx_print >= 202406L + template + constexpr bool + enable_nonlocking_formatter_optimization> + = true; +#endif + template struct formatter, _CharT> { @@ -3006,6 +3129,13 @@ namespace __format __format::__formatter_duration<_CharT> _M_f{__defSpec}; }; +#if __glibcxx_print >= 202406L + template + constexpr bool + enable_nonlocking_formatter_optimization> + = true; +#endif + template struct formatter, _CharT> { @@ -3041,6 +3171,13 @@ namespace __format __format::__formatter_duration<_CharT> _M_f{__defSpec}; }; +#if __glibcxx_print >= 202406L + template + constexpr bool + enable_nonlocking_formatter_optimization> + = true; +#endif + template struct formatter, _CharT> { @@ -3076,6 +3213,13 @@ namespace __format __format::__formatter_duration<_CharT> _M_f{__defSpec}; }; +#if __glibcxx_print >= 202406L + template + constexpr bool + enable_nonlocking_formatter_optimization> + = true; +#endif + template struct formatter, _CharT> { @@ -3111,6 +3255,13 @@ namespace __format __format::__formatter_duration<_CharT> _M_f{__defSpec}; }; +#if __glibcxx_print >= 202406L + template + constexpr bool + enable_nonlocking_formatter_optimization> + = true; +#endif + template struct formatter, _CharT> { @@ -3145,6 +3296,13 @@ namespace __format __format::__formatter_duration<_CharT> _M_f{__defSpec}; }; +#if __glibcxx_print >= 202406L + template + constexpr bool + enable_nonlocking_formatter_optimization> + = true; +#endif + template struct formatter, _CharT> { @@ -3205,6 +3363,13 @@ namespace __format __format::__formatter_duration<_CharT> _M_f{__defSpec}; }; +#if __glibcxx_print >= 202406L + template + constexpr bool + enable_nonlocking_formatter_optimization< + chrono::__detail::__local_time_fmt<_Duration>> = true; +#endif + #if _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI template struct formatter, _CharT> @@ -3224,6 +3389,13 @@ namespace __format return _Base::format(__lf, __fc); } }; + +#if __glibcxx_print >= 202406L + template + constexpr bool + enable_nonlocking_formatter_optimization< + chrono::zoned_time<_Duration, const chrono::time_zone*>> = true; +#endif #endif namespace chrono diff --git a/libstdc++-v3/include/bits/version.def b/libstdc++-v3/include/bits/version.def index 1c0f43e465b5..83f1817bf8e4 100644 --- a/libstdc++-v3/include/bits/version.def +++ b/libstdc++-v3/include/bits/version.def @@ -1865,7 +1865,7 @@ ftms = { ftms = { name = print; values = { - v = 202403; + v = 202406; cxxmin = 23; hosted = yes; }; diff --git a/libstdc++-v3/include/bits/version.h b/libstdc++-v3/include/bits/version.h index 7b97accc47e1..0d6692d244a6 100644 --- a/libstdc++-v3/include/bits/version.h +++ b/libstdc++-v3/include/bits/version.h @@ -2083,9 +2083,9 @@ #if !defined(__cpp_lib_print) # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED -# define __glibcxx_print 202403L +# define __glibcxx_print 202406L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_print) -# define __cpp_lib_print 202403L +# define __cpp_lib_print 202406L # endif # endif #endif /* !defined(__cpp_lib_print) */ diff --git a/libstdc++-v3/include/std/format b/libstdc++-v3/include/std/format index 1d01bc39e9c3..ad29f9336e8f 100644 --- a/libstdc++-v3/include/std/format +++ b/libstdc++-v3/include/std/format @@ -5872,6 +5872,14 @@ namespace __format { return this->_M_format_elems(__p.first, __p.second, __fc); } }; +#if __glibcxx_print >= 202406L + template + constexpr bool enable_nonlocking_formatter_optimization> + // TODO this should have remove_cvref_t. + = enable_nonlocking_formatter_optimization<_Fp> + && enable_nonlocking_formatter_optimization<_Sp>; +#endif + template<__format::__char _CharT, formattable<_CharT>... _Tps> struct formatter, _CharT> : __format::__tuple_formatter<_CharT, remove_cvref_t<_Tps>...> @@ -5890,6 +5898,13 @@ namespace __format { return this->_M_format(__t, index_sequence_for<_Tps...>(), __fc); } }; +#if __glibcxx_print >= 202406L + template + // TODO this should have remove_cvref_t. + constexpr bool enable_nonlocking_formatter_optimization> + = (enable_nonlocking_formatter_optimization<_Tps> && ...); +#endif + // [format.range.formatter], class template range_formatter template requires same_as, _Tp> && formattable<_Tp, _CharT> @@ -6184,6 +6199,13 @@ namespace __format range_formatter<_Vt, _CharT>>; _Formatter_under _M_under; }; + +#if __glibcxx_print >= 202406L + template + requires (format_kind<_Rg> != range_format::disabled) + constexpr bool enable_nonlocking_formatter_optimization<_Rg> = false; +#endif + #endif // C++23 formatting ranges #undef _GLIBCXX_WIDEN diff --git a/libstdc++-v3/include/std/queue b/libstdc++-v3/include/std/queue index 1b76088b31b3..ade09f42ea8a 100644 --- a/libstdc++-v3/include/std/queue +++ b/libstdc++-v3/include/std/queue @@ -112,6 +112,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION range_formatter<_Tp, _CharT> _M_f; }; +#if __glibcxx_print >= 202406L + template + constexpr bool + // TODO should be false + enable_nonlocking_formatter_optimization> = true; +#endif + template<__format::__char _CharT, typename _Tp, formattable<_CharT> _Container, typename _Compare> struct formatter, _CharT> @@ -146,6 +153,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION range_formatter<_Tp, _CharT> _M_f; }; +#if __glibcxx_print >= 202406L + template + constexpr bool + // TODO should be false + enable_nonlocking_formatter_optimization< + priority_queue<_Tp, _Container, _Comparator>> = true; +#endif + _GLIBCXX_END_NAMESPACE_VERSION } // namespace std #endif // __glibcxx_format_ranges diff --git a/libstdc++-v3/include/std/stack b/libstdc++-v3/include/std/stack index a57a5a08bc3c..88bc0d2cb6bf 100644 --- a/libstdc++-v3/include/std/stack +++ b/libstdc++-v3/include/std/stack @@ -105,6 +105,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // Standard uses formatter, _CharT>. range_formatter<_Tp, _CharT> _M_f; }; + +#if __glibcxx_print >= 202406L + template + constexpr bool + // TODO should be false + enable_nonlocking_formatter_optimization> = true; +#endif _GLIBCXX_END_NAMESPACE_VERSION } // namespace std #endif // __glibcxx_format_ranges diff --git a/libstdc++-v3/include/std/stacktrace b/libstdc++-v3/include/std/stacktrace index 491122293c5f..01e18ba171c0 100644 --- a/libstdc++-v3/include/std/stacktrace +++ b/libstdc++-v3/include/std/stacktrace @@ -765,6 +765,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __format::_Spec _M_spec; }; +#if __glibcxx_print >= 202406L + template<> + inline constexpr bool + enable_nonlocking_formatter_optimization = true; +#endif + template class formatter> { @@ -790,6 +796,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } }; +#if __glibcxx_print >= 202406L + template + constexpr bool + enable_nonlocking_formatter_optimization> = true; +#endif + namespace pmr { using stacktrace diff --git a/libstdc++-v3/include/std/thread b/libstdc++-v3/include/std/thread index 94ded714e9e0..ccab1e44fbc4 100644 --- a/libstdc++-v3/include/std/thread +++ b/libstdc++-v3/include/std/thread @@ -384,6 +384,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION private: __format::_Spec<_CharT> _M_spec; }; + +#if __glibcxx_print >= 202406L + template<> + inline constexpr bool + enable_nonlocking_formatter_optimization = true; +#endif + #endif // __cpp_lib_formatters /// @} group threads diff --git a/libstdc++-v3/include/std/vector b/libstdc++-v3/include/std/vector index 3146f283944a..920f852f7944 100644 --- a/libstdc++-v3/include/std/vector +++ b/libstdc++-v3/include/std/vector @@ -169,6 +169,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION private: __format::__formatter_int<_CharT> _M_f; }; + +#if __glibcxx_print >= 202406L + template<> + inline constexpr bool + enable_nonlocking_formatter_optimization<_GLIBCXX_STD_C::_Bit_reference> = true; +#endif + _GLIBCXX_END_NAMESPACE_VERSION } // namespace std #endif // __glibcxx_format_ranges diff --git a/libstdc++-v3/testsuite/23_containers/vector/bool/format.cc b/libstdc++-v3/testsuite/23_containers/vector/bool/format.cc index cecc535f15f1..833727f4b418 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/bool/format.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/bool/format.cc @@ -7,6 +7,7 @@ static_assert(!std::formattable::reference, int>); static_assert(!std::formattable::reference, char32_t>); +static_assert(std::enable_nonlocking_formatter_optimization::reference>); template bool diff --git a/libstdc++-v3/testsuite/30_threads/thread/id/output.cc b/libstdc++-v3/testsuite/30_threads/thread/id/output.cc index 3d1dd38d998f..c3e0d421d19f 100644 --- a/libstdc++-v3/testsuite/30_threads/thread/id/output.cc +++ b/libstdc++-v3/testsuite/30_threads/thread/id/output.cc @@ -81,7 +81,6 @@ void test02() { #if __cpp_lib_formatters >= 202302 - static_assert( std::is_default_constructible_v> ); std::thread t1([]{}); @@ -155,6 +154,10 @@ test02() #endif } +#if __cplusplus >= 202302L +static_assert(std::enable_nonlocking_formatter_optimization); +#endif + int main() { test01(); diff --git a/libstdc++-v3/testsuite/std/format/ranges/adaptors.cc b/libstdc++-v3/testsuite/std/format/ranges/adaptors.cc index a4e2dfb3321e..d9fc01ab8930 100644 --- a/libstdc++-v3/testsuite/std/format/ranges/adaptors.cc +++ b/libstdc++-v3/testsuite/std/format/ranges/adaptors.cc @@ -121,6 +121,16 @@ test_output() // Formatter check if container is formattable, not container elements. static_assert(!std::formattable>, CharT>); + + // TODO should be false + static_assert(std::enable_nonlocking_formatter_optimization< + Adaptor>); + static_assert(std::enable_nonlocking_formatter_optimization< + Adaptor>); + static_assert(std::enable_nonlocking_formatter_optimization< + Adaptor>>); + static_assert(std::enable_nonlocking_formatter_optimization< + Adaptor>>); } template> class Adaptor> diff --git a/libstdc++-v3/testsuite/std/format/ranges/formatter.cc b/libstdc++-v3/testsuite/std/format/ranges/formatter.cc index d3e089767bfe..a50c5b1033fb 100644 --- a/libstdc++-v3/testsuite/std/format/ranges/formatter.cc +++ b/libstdc++-v3/testsuite/std/format/ranges/formatter.cc @@ -4,6 +4,7 @@ #include #include #include +#include #define WIDEN_(C, S) ::std::__format::_Widen(S, L##S) #define WIDEN(S) WIDEN_(CharT, S) @@ -145,7 +146,7 @@ struct MyFlatMap : std::flat_map template struct std::formatter - // This cannot apply format BitVector const&, because formatted type would + // We cannot format MyFlatMap const&, because formatted type would // be std::pair, and formatter for // pair cannot format it. : std::range_formatter @@ -161,10 +162,21 @@ void test_const_ref_type_mismatch() template using VectorFormatter = std::formatter, CharT>; +template typename Range> +void test_nonblocking() +{ + static_assert(!std::enable_nonlocking_formatter_optimization< + Range>); +} + int main() { test_outputs(); test_outputs(); test_nested(); test_const_ref_type_mismatch(); + + test_nonblocking(); + test_nonblocking(); + test_nonblocking(); } diff --git a/libstdc++-v3/testsuite/std/format/tuple.cc b/libstdc++-v3/testsuite/std/format/tuple.cc index ba6dae8935b6..001235ba6430 100644 --- a/libstdc++-v3/testsuite/std/format/tuple.cc +++ b/libstdc++-v3/testsuite/std/format/tuple.cc @@ -341,6 +341,40 @@ void test_padding() VERIFY( check_elems(resv) ); } +struct Custom {}; + +template +struct std::formatter +{ + constexpr std::basic_format_parse_context::iterator + parse(const std::basic_format_parse_context& pc) + { return pc.begin(); } + + template + typename std::basic_format_context::iterator + format(Custom, const std::basic_format_context& fc) const + { return fc.out(); } +}; + +template typename Tuple> +void test_nonblocking() +{ + static_assert(std::enable_nonlocking_formatter_optimization< + Tuple>); + // TODO missing remove_cv_ref + static_assert(!std::enable_nonlocking_formatter_optimization< + Tuple>); + static_assert(!std::enable_nonlocking_formatter_optimization< + Tuple>); + + static_assert(!std::enable_nonlocking_formatter_optimization< + Tuple>); + static_assert(!std::enable_nonlocking_formatter_optimization< + Tuple>); + static_assert(!std::enable_nonlocking_formatter_optimization< + Tuple>); +} + int main() { test_format_string(); @@ -348,4 +382,7 @@ int main() test_outputs(); test_nested(); test_padding(); + + test_nonblocking(); + test_nonblocking(); } diff --git a/libstdc++-v3/testsuite/std/time/format/custom_rep.h b/libstdc++-v3/testsuite/std/time/format/custom_rep.h new file mode 100644 index 000000000000..8363eaafebcc --- /dev/null +++ b/libstdc++-v3/testsuite/std/time/format/custom_rep.h @@ -0,0 +1,92 @@ +#include +#include + +#define WIDEN_(C, S) ::std::__format::_Widen(S, L##S) +#define WIDEN(S) WIDEN_(CharT, S) + +template +struct Rep +{ + using Return + = std::conditional_t, Rep, Ret>; + + Rep(Under v = 0) : val(v) {} + + template + Rep(Rep o) : val(o.val) {} + + operator Under() const + { return val; } + + Return + operator+() const + { return val; } + + Rep + operator-() const + { return -val; } + + friend Rep + operator+(Rep lhs, Rep rhs) + { return lhs.val + rhs.val; } + + friend Rep + operator-(Rep lhs, Rep rhs) + { return lhs.val - rhs.val; } + + friend Rep + operator*(Rep lhs, Rep rhs) + { return lhs.val * rhs.val; } + + friend Rep + operator/(Rep lhs, Rep rhs) + { return lhs.val / rhs.val; } + + friend auto operator<=>(Rep, Rep) = default; + + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const Rep& t) + { return os << t.val << WIDEN("[via <<]"); } + + Under val; +}; + +template +struct std::common_type, Rep> +{ + using type = Rep>; +}; + +template + requires std::is_integral_v +struct std::common_type, Other> +{ + using type = Rep>; +}; + +template + requires std::is_integral_v +struct std::common_type> + : std::common_type, Other> +{ }; + +template +struct std::numeric_limits> + : std::numeric_limits +{ }; + +template +struct std::formatter, CharT> + : std::formatter +{ + template + typename std::basic_format_context::iterator + format(const Rep& t, std::basic_format_context& ctx) const + { + constexpr std::basic_string_view suffix = WIDEN("[via format]"); + auto out = std::formatter::format(t.val, ctx); + return std::ranges::copy(suffix, out).out; + } +}; + diff --git a/libstdc++-v3/testsuite/std/time/format/empty_spec.cc b/libstdc++-v3/testsuite/std/time/format/empty_spec.cc index a20c074018e8..b84f84a3069f 100644 --- a/libstdc++-v3/testsuite/std/time/format/empty_spec.cc +++ b/libstdc++-v3/testsuite/std/time/format/empty_spec.cc @@ -6,11 +6,10 @@ #include #include #include +#include "custom_rep.h" using namespace std::chrono; -#define WIDEN_(C, S) ::std::__format::_Widen(S, L##S) -#define WIDEN(S) WIDEN_(CharT, S) template void @@ -77,92 +76,6 @@ test_padding() VERIFY( res == WIDEN("==16 is not a valid month==") ); } -template -struct Rep -{ - using Return - = std::conditional_t, Rep, Ret>; - - Rep(Under v = 0) : val(v) {} - - template - Rep(Rep o) : val(o.val) {} - - operator Under() const - { return val; } - - Return - operator+() const - { return val; } - - Rep - operator-() const - { return -val; } - - friend Rep - operator+(Rep lhs, Rep rhs) - { return lhs.val + rhs.val; } - - friend Rep - operator-(Rep lhs, Rep rhs) - { return lhs.val - rhs.val; } - - friend Rep - operator*(Rep lhs, Rep rhs) - { return lhs.val * rhs.val; } - - friend Rep - operator/(Rep lhs, Rep rhs) - { return lhs.val / rhs.val; } - - friend auto operator<=>(Rep, Rep) = default; - - template - friend std::basic_ostream& - operator<<(std::basic_ostream& os, const Rep& t) - { return os << t.val << WIDEN("[via <<]"); } - - Under val; -}; - -template -struct std::common_type, Rep> -{ - using type = Rep>; -}; - -template - requires std::is_integral_v -struct std::common_type, Other> -{ - using type = Rep>; -}; - -template - requires std::is_integral_v -struct std::common_type> - : std::common_type, Other> -{ }; - -template -struct std::numeric_limits> - : std::numeric_limits -{ }; - -template -struct std::formatter, CharT> - : std::formatter -{ - template - typename std::basic_format_context::iterator - format(const Rep& t, std::basic_format_context& ctx) const - { - constexpr std::basic_string_view suffix = WIDEN("[via format]"); - auto out = std::formatter::format(t.val, ctx); - return std::ranges::copy(suffix, out).out; - } -}; - using deciseconds = duration; template diff --git a/libstdc++-v3/testsuite/std/time/format/nonlocking.cc b/libstdc++-v3/testsuite/std/time/format/nonlocking.cc new file mode 100644 index 000000000000..c7aac75cb83e --- /dev/null +++ b/libstdc++-v3/testsuite/std/time/format/nonlocking.cc @@ -0,0 +1,164 @@ +// { dg-do compile { target c++23 } } + +#include +#include +#include "custom_rep.h" + +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::day>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::month>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::year>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::weekday>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::weekday_indexed>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::weekday_last>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::month_day>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::month_day_last>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::month_weekday>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::month_weekday_last>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::year_month>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::year_month_day>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::year_month_day_last>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::year_month_weekday>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::year_month_weekday_last>); + +#if _GLIBCXX_USE_CXX11_ABI || !_GLIBCXX_USE_DUAL_ABI +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::local_info>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::sys_info>); +#endif + +template +using local_time_fmt + = decltype(std::chrono::local_time_format(std::chrono::local_time{})); + +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::seconds>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::duration>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::duration>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::local_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::sys_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::utc_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::gps_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::tai_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::file_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + local_time_fmt>); + +using BufferedDuration = std::chrono::duration>; + +static_assert(!std::enable_nonlocking_formatter_optimization< + BufferedDuration>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::local_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::sys_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::utc_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::gps_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::tai_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::file_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + local_time_fmt>); + +template<> +inline constexpr bool + std::enable_nonlocking_formatter_optimization> = true; + +using NonBufferedRep = std::chrono::duration>; + +static_assert(std::enable_nonlocking_formatter_optimization< + NonBufferedRep>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::local_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::sys_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::utc_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::gps_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::tai_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::file_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + local_time_fmt>); + +using NonBufferedDuration = std::chrono::duration>; + +template<> +inline constexpr bool + std::enable_nonlocking_formatter_optimization = true; + +static_assert(std::enable_nonlocking_formatter_optimization< + NonBufferedDuration>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::local_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::sys_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::utc_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::gps_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::tai_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::file_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + local_time_fmt>); + +#if _GLIBCXX_USE_CXX11_ABI || !_GLIBCXX_USE_DUAL_ABI +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::zoned_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::zoned_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::zoned_time>); +static_assert(std::enable_nonlocking_formatter_optimization< + std::chrono::zoned_time>); + +struct MyTimeZone : std::chrono::time_zone +{}; + +template<> +struct std::chrono::zoned_traits +{ + static const MyTimeZone* default_zone(); + static const MyTimeZone* locate_zone(std::string_view name); +}; + +static_assert(!std::enable_nonlocking_formatter_optimization< + std::chrono::zoned_time>); +static_assert(!std::enable_nonlocking_formatter_optimization< + std::chrono::zoned_time>); +static_assert(!std::enable_nonlocking_formatter_optimization< + std::chrono::zoned_time>); +static_assert(!std::enable_nonlocking_formatter_optimization< + std::chrono::zoned_time>); +#endif + From ef29eabf5512c0149bfb8261a9a1bafae5547e00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Kami=C5=84ski?= Date: Fri, 3 Oct 2025 09:01:21 +0200 Subject: [PATCH 209/216] libstdc++: Adjust enable_nonlocking_formatter_optimization specializations [PR121790] This patch addresses several issues related to the additional specializations for enable_nonlocking_formatter_optimization fomr P3235R3 proposal: * LWG4399 [1]: Apply remove_cvref_t to tuple and pair elements when checking if the direct printing optimization is enabled. * LWG4398 [2]: Disable the direct printing optimization for the standard library container adaptors: queue, priority_queue, and stack. * LWG4400 [3]: Enable the direct printing optimization only for durations that use standard arithmetic types. Conditionally enable it for hh_mm_ss and time_points based on their underlying Duration template argument. [1] https://cplusplus.github.io/LWG/issue4399 [2] https://cplusplus.github.io/LWG/issue4398 [3] https://cplusplus.github.io/LWG/issue4400 PR libstdc++/121790 libstdc++-v3/ChangeLog: * include/bits/chrono_io.h (enable_nonlocking_formatter_optimization): Adjust specializations for duration, hh_mm_ss and time_points. * include/std/format (enable_nonlocking_formatter_optimization): Apply remove_cvref_t on pair and tuple elements. * include/std/queue (enable_nonlocking_formatter_optimization): Change specialization value to false. * include/std/stack (enable_nonlocking_formatter_optimization): Change specialization value to false. * testsuite/std/format/ranges/adaptors.cc: Adjusted tests. * testsuite/std/format/tuple.cc: Adjusted tests. * testsuite/std/time/format/nonlocking.cc: Adjusted tests. Reviewed-by: Jonathan Wakely --- libstdc++-v3/include/bits/chrono_io.h | 98 ++++++++++++------- libstdc++-v3/include/std/format | 12 ++- libstdc++-v3/include/std/queue | 10 +- libstdc++-v3/include/std/stack | 5 +- .../testsuite/std/format/ranges/adaptors.cc | 9 +- libstdc++-v3/testsuite/std/format/tuple.cc | 5 +- .../testsuite/std/time/format/nonlocking.cc | 40 ++++---- 7 files changed, 102 insertions(+), 77 deletions(-) diff --git a/libstdc++-v3/include/bits/chrono_io.h b/libstdc++-v3/include/bits/chrono_io.h index df047f1103bd..3b1f5862cba6 100644 --- a/libstdc++-v3/include/bits/chrono_io.h +++ b/libstdc++-v3/include/bits/chrono_io.h @@ -561,7 +561,7 @@ namespace __format __formatter_chrono(_ChronoSpec<_CharT> __spec) noexcept : _M_spec(__spec) { } - + constexpr typename basic_format_parse_context<_CharT>::iterator _M_parse(basic_format_parse_context<_CharT>& __pc, _ChronoParts __parts, const _ChronoSpec<_CharT>& __def) @@ -2235,10 +2235,12 @@ namespace __format }; #if __glibcxx_print >= 202406L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4400. enable_nonlocking_formatter_optimization for durations with custom rep template constexpr bool enable_nonlocking_formatter_optimization> - = enable_nonlocking_formatter_optimization<_Rep>; + = is_arithmetic_v<_Rep>; #endif template<__format::__char _CharT> @@ -2988,10 +2990,12 @@ namespace __format }; #if __glibcxx_print >= 202406L - template - constexpr bool - enable_nonlocking_formatter_optimization> - = true; + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4400. enable_nonlocking_formatter_optimization for durations with custom rep + template + constexpr bool + enable_nonlocking_formatter_optimization> + = enable_nonlocking_formatter_optimization<_Duration>; #endif #if _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI @@ -3079,10 +3083,12 @@ namespace __format }; #if __glibcxx_print >= 202406L - template - constexpr bool - enable_nonlocking_formatter_optimization> - = true; + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4400. enable_nonlocking_formatter_optimization for durations with custom rep + template + constexpr bool + enable_nonlocking_formatter_optimization> + = enable_nonlocking_formatter_optimization<_Duration>; #endif template @@ -3130,10 +3136,12 @@ namespace __format }; #if __glibcxx_print >= 202406L - template - constexpr bool - enable_nonlocking_formatter_optimization> - = true; + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4400. enable_nonlocking_formatter_optimization for durations with custom rep + template + constexpr bool + enable_nonlocking_formatter_optimization> + = enable_nonlocking_formatter_optimization<_Duration>; #endif template @@ -3172,10 +3180,12 @@ namespace __format }; #if __glibcxx_print >= 202406L - template - constexpr bool - enable_nonlocking_formatter_optimization> - = true; + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4400. enable_nonlocking_formatter_optimization for durations with custom rep + template + constexpr bool + enable_nonlocking_formatter_optimization> + = enable_nonlocking_formatter_optimization<_Duration>; #endif template @@ -3214,10 +3224,12 @@ namespace __format }; #if __glibcxx_print >= 202406L - template - constexpr bool - enable_nonlocking_formatter_optimization> - = true; + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4400. enable_nonlocking_formatter_optimization for durations with custom rep + template + constexpr bool + enable_nonlocking_formatter_optimization> + = enable_nonlocking_formatter_optimization<_Duration>; #endif template @@ -3256,10 +3268,12 @@ namespace __format }; #if __glibcxx_print >= 202406L - template - constexpr bool - enable_nonlocking_formatter_optimization> - = true; + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4400. enable_nonlocking_formatter_optimization for durations with custom rep + template + constexpr bool + enable_nonlocking_formatter_optimization> + = enable_nonlocking_formatter_optimization<_Duration>; #endif template @@ -3297,10 +3311,12 @@ namespace __format }; #if __glibcxx_print >= 202406L - template - constexpr bool - enable_nonlocking_formatter_optimization> - = true; + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4400. enable_nonlocking_formatter_optimization for durations with custom rep + template + constexpr bool + enable_nonlocking_formatter_optimization> + = enable_nonlocking_formatter_optimization<_Duration>; #endif template @@ -3364,10 +3380,13 @@ namespace __format }; #if __glibcxx_print >= 202406L - template - constexpr bool - enable_nonlocking_formatter_optimization< - chrono::__detail::__local_time_fmt<_Duration>> = true; + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4400. enable_nonlocking_formatter_optimization for durations with custom rep + template + constexpr bool + enable_nonlocking_formatter_optimization< + chrono::__detail::__local_time_fmt<_Duration>> + = enable_nonlocking_formatter_optimization<_Duration>; #endif #if _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI @@ -3391,10 +3410,13 @@ namespace __format }; #if __glibcxx_print >= 202406L - template - constexpr bool - enable_nonlocking_formatter_optimization< - chrono::zoned_time<_Duration, const chrono::time_zone*>> = true; + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4400. enable_nonlocking_formatter_optimization for durations with custom rep + template + constexpr bool + enable_nonlocking_formatter_optimization< + chrono::zoned_time<_Duration, const chrono::time_zone*>> + = enable_nonlocking_formatter_optimization<_Duration>; #endif #endif diff --git a/libstdc++-v3/include/std/format b/libstdc++-v3/include/std/format index ad29f9336e8f..281c038559e4 100644 --- a/libstdc++-v3/include/std/format +++ b/libstdc++-v3/include/std/format @@ -5873,11 +5873,12 @@ namespace __format }; #if __glibcxx_print >= 202406L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4399. enable_nonlocking_formatter_optimization for pair and tuple needs remove_cvref_t template constexpr bool enable_nonlocking_formatter_optimization> - // TODO this should have remove_cvref_t. - = enable_nonlocking_formatter_optimization<_Fp> - && enable_nonlocking_formatter_optimization<_Sp>; + = enable_nonlocking_formatter_optimization> + && enable_nonlocking_formatter_optimization>; #endif template<__format::__char _CharT, formattable<_CharT>... _Tps> @@ -5899,10 +5900,11 @@ namespace __format }; #if __glibcxx_print >= 202406L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4399. enable_nonlocking_formatter_optimization for pair and tuple needs remove_cvref_t template - // TODO this should have remove_cvref_t. constexpr bool enable_nonlocking_formatter_optimization> - = (enable_nonlocking_formatter_optimization<_Tps> && ...); + = (enable_nonlocking_formatter_optimization> && ...); #endif // [format.range.formatter], class template range_formatter diff --git a/libstdc++-v3/include/std/queue b/libstdc++-v3/include/std/queue index ade09f42ea8a..bf2b344c81cc 100644 --- a/libstdc++-v3/include/std/queue +++ b/libstdc++-v3/include/std/queue @@ -113,10 +113,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION }; #if __glibcxx_print >= 202406L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4398. enable_nonlocking_formatter_optimization should be disabled for container adaptors template constexpr bool - // TODO should be false - enable_nonlocking_formatter_optimization> = true; + enable_nonlocking_formatter_optimization> = false; #endif template<__format::__char _CharT, typename _Tp, @@ -154,11 +155,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION }; #if __glibcxx_print >= 202406L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4398. enable_nonlocking_formatter_optimization should be disabled for container adaptors template constexpr bool - // TODO should be false enable_nonlocking_formatter_optimization< - priority_queue<_Tp, _Container, _Comparator>> = true; + priority_queue<_Tp, _Container, _Comparator>> = false; #endif _GLIBCXX_END_NAMESPACE_VERSION diff --git a/libstdc++-v3/include/std/stack b/libstdc++-v3/include/std/stack index 88bc0d2cb6bf..507b9746c8a9 100644 --- a/libstdc++-v3/include/std/stack +++ b/libstdc++-v3/include/std/stack @@ -107,10 +107,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION }; #if __glibcxx_print >= 202406L + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4398. enable_nonlocking_formatter_optimization should be disabled for container adaptors template constexpr bool - // TODO should be false - enable_nonlocking_formatter_optimization> = true; + enable_nonlocking_formatter_optimization> = false; #endif _GLIBCXX_END_NAMESPACE_VERSION } // namespace std diff --git a/libstdc++-v3/testsuite/std/format/ranges/adaptors.cc b/libstdc++-v3/testsuite/std/format/ranges/adaptors.cc index d9fc01ab8930..649eea47f168 100644 --- a/libstdc++-v3/testsuite/std/format/ranges/adaptors.cc +++ b/libstdc++-v3/testsuite/std/format/ranges/adaptors.cc @@ -122,14 +122,13 @@ test_output() // Formatter check if container is formattable, not container elements. static_assert(!std::formattable>, CharT>); - // TODO should be false - static_assert(std::enable_nonlocking_formatter_optimization< + static_assert(!std::enable_nonlocking_formatter_optimization< Adaptor>); - static_assert(std::enable_nonlocking_formatter_optimization< + static_assert(!std::enable_nonlocking_formatter_optimization< Adaptor>); - static_assert(std::enable_nonlocking_formatter_optimization< + static_assert(!std::enable_nonlocking_formatter_optimization< Adaptor>>); - static_assert(std::enable_nonlocking_formatter_optimization< + static_assert(!std::enable_nonlocking_formatter_optimization< Adaptor>>); } diff --git a/libstdc++-v3/testsuite/std/format/tuple.cc b/libstdc++-v3/testsuite/std/format/tuple.cc index 001235ba6430..eace82730f0a 100644 --- a/libstdc++-v3/testsuite/std/format/tuple.cc +++ b/libstdc++-v3/testsuite/std/format/tuple.cc @@ -361,10 +361,9 @@ void test_nonblocking() { static_assert(std::enable_nonlocking_formatter_optimization< Tuple>); - // TODO missing remove_cv_ref - static_assert(!std::enable_nonlocking_formatter_optimization< + static_assert(std::enable_nonlocking_formatter_optimization< Tuple>); - static_assert(!std::enable_nonlocking_formatter_optimization< + static_assert(std::enable_nonlocking_formatter_optimization< Tuple>); static_assert(!std::enable_nonlocking_formatter_optimization< diff --git a/libstdc++-v3/testsuite/std/time/format/nonlocking.cc b/libstdc++-v3/testsuite/std/time/format/nonlocking.cc index c7aac75cb83e..f1b57b5a3485 100644 --- a/libstdc++-v3/testsuite/std/time/format/nonlocking.cc +++ b/libstdc++-v3/testsuite/std/time/format/nonlocking.cc @@ -43,9 +43,9 @@ static_assert(std::enable_nonlocking_formatter_optimization< #endif template -using local_time_fmt +using local_time_fmt = decltype(std::chrono::local_time_format(std::chrono::local_time{})); - + static_assert(std::enable_nonlocking_formatter_optimization< std::chrono::seconds>); static_assert(std::enable_nonlocking_formatter_optimization< @@ -71,19 +71,19 @@ using BufferedDuration = std::chrono::duration>; static_assert(!std::enable_nonlocking_formatter_optimization< BufferedDuration>); -static_assert(std::enable_nonlocking_formatter_optimization< +static_assert(!std::enable_nonlocking_formatter_optimization< std::chrono::local_time>); -static_assert(std::enable_nonlocking_formatter_optimization< +static_assert(!std::enable_nonlocking_formatter_optimization< std::chrono::sys_time>); -static_assert(std::enable_nonlocking_formatter_optimization< +static_assert(!std::enable_nonlocking_formatter_optimization< std::chrono::utc_time>); -static_assert(std::enable_nonlocking_formatter_optimization< +static_assert(!std::enable_nonlocking_formatter_optimization< std::chrono::gps_time>); -static_assert(std::enable_nonlocking_formatter_optimization< +static_assert(!std::enable_nonlocking_formatter_optimization< std::chrono::tai_time>); -static_assert(std::enable_nonlocking_formatter_optimization< +static_assert(!std::enable_nonlocking_formatter_optimization< std::chrono::file_time>); -static_assert(std::enable_nonlocking_formatter_optimization< +static_assert(!std::enable_nonlocking_formatter_optimization< local_time_fmt>); template<> @@ -92,21 +92,21 @@ inline constexpr bool using NonBufferedRep = std::chrono::duration>; -static_assert(std::enable_nonlocking_formatter_optimization< +static_assert(!std::enable_nonlocking_formatter_optimization< NonBufferedRep>); -static_assert(std::enable_nonlocking_formatter_optimization< +static_assert(!std::enable_nonlocking_formatter_optimization< std::chrono::local_time>); -static_assert(std::enable_nonlocking_formatter_optimization< +static_assert(!std::enable_nonlocking_formatter_optimization< std::chrono::sys_time>); -static_assert(std::enable_nonlocking_formatter_optimization< +static_assert(!std::enable_nonlocking_formatter_optimization< std::chrono::utc_time>); -static_assert(std::enable_nonlocking_formatter_optimization< +static_assert(!std::enable_nonlocking_formatter_optimization< std::chrono::gps_time>); -static_assert(std::enable_nonlocking_formatter_optimization< +static_assert(!std::enable_nonlocking_formatter_optimization< std::chrono::tai_time>); -static_assert(std::enable_nonlocking_formatter_optimization< +static_assert(!std::enable_nonlocking_formatter_optimization< std::chrono::file_time>); -static_assert(std::enable_nonlocking_formatter_optimization< +static_assert(!std::enable_nonlocking_formatter_optimization< local_time_fmt>); using NonBufferedDuration = std::chrono::duration>; @@ -135,9 +135,9 @@ static_assert(std::enable_nonlocking_formatter_optimization< #if _GLIBCXX_USE_CXX11_ABI || !_GLIBCXX_USE_DUAL_ABI static_assert(std::enable_nonlocking_formatter_optimization< std::chrono::zoned_time>); -static_assert(std::enable_nonlocking_formatter_optimization< +static_assert(!std::enable_nonlocking_formatter_optimization< std::chrono::zoned_time>); -static_assert(std::enable_nonlocking_formatter_optimization< +static_assert(!std::enable_nonlocking_formatter_optimization< std::chrono::zoned_time>); static_assert(std::enable_nonlocking_formatter_optimization< std::chrono::zoned_time>); @@ -150,7 +150,7 @@ struct std::chrono::zoned_traits { static const MyTimeZone* default_zone(); static const MyTimeZone* locate_zone(std::string_view name); -}; +}; static_assert(!std::enable_nonlocking_formatter_optimization< std::chrono::zoned_time>); From aaa7ac48bd888ee7bbe95006b29bb2f7eaefd0b4 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Fri, 10 Oct 2025 08:20:22 +0200 Subject: [PATCH 210/216] tree-optimization/122225 - fix return stmt verification The following fixes return stmt type verification by properly looking at DECL_RESULT to decide whether that's by reference, not trying to figure that from the actual argument. PR tree-optimization/122225 * tree-cfg.cc (verify_gimple_return): Look at DECL_RESULT for DECL_BY_REFERENCE. --- gcc/tree-cfg.cc | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/gcc/tree-cfg.cc b/gcc/tree-cfg.cc index 39aeb16f74e0..62513045c6f0 100644 --- a/gcc/tree-cfg.cc +++ b/gcc/tree-cfg.cc @@ -4786,6 +4786,7 @@ verify_gimple_return (greturn *stmt) { tree op = gimple_return_retval (stmt); tree restype = TREE_TYPE (TREE_TYPE (cfun->decl)); + tree resdecl = DECL_RESULT (cfun->decl); /* We cannot test for present return values as we do not fix up missing return values from the original source. */ @@ -4800,12 +4801,7 @@ verify_gimple_return (greturn *stmt) return true; } - if ((TREE_CODE (op) == RESULT_DECL - && DECL_BY_REFERENCE (op)) - || (TREE_CODE (op) == SSA_NAME - && SSA_NAME_VAR (op) - && TREE_CODE (SSA_NAME_VAR (op)) == RESULT_DECL - && DECL_BY_REFERENCE (SSA_NAME_VAR (op)))) + if (resdecl && DECL_BY_REFERENCE (resdecl)) op = TREE_TYPE (op); if (!useless_type_conversion_p (restype, TREE_TYPE (op))) From d2ad7e90834d9c18e0c7104796f3131594e7bbfb Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Fri, 10 Oct 2025 09:48:37 +0200 Subject: [PATCH 211/216] libgomp: Add is_integrated_apu function to plugin/plugin-{gcn,nvptx}.c The added function is currently '#if 0' but is planned to be used to enable self mapping automatically. Prerequisite for auto self maps is still mapping 'declare target' variables (if any, in libgomp) or converting all 'declare target' variables to 'declare target link' in the compiler (as required for 'omp requires self_maps'). include/ChangeLog: * hsa_ext_amd.h (enum hsa_amd_agent_info_s): Add HSA_AMD_AGENT_INFO_MEMORY_PROPERTIES. (enum): Add HSA_AMD_MEMORY_PROPERTY_AGENT_IS_APU. libgomp/ChangeLog: * plugin/plugin-gcn.c (is_integrated_apu): New; currently '#if 0'. * plugin/plugin-nvptx.c (is_integrated_apu): Likewise. --- include/hsa_ext_amd.h | 10 ++++++- libgomp/plugin/plugin-gcn.c | 55 +++++++++++++++++++++++++++++++++++ libgomp/plugin/plugin-nvptx.c | 18 ++++++++++++ 3 files changed, 82 insertions(+), 1 deletion(-) diff --git a/include/hsa_ext_amd.h b/include/hsa_ext_amd.h index c1c16536621a..e29e88090eb0 100644 --- a/include/hsa_ext_amd.h +++ b/include/hsa_ext_amd.h @@ -168,9 +168,17 @@ typedef enum hsa_amd_agent_info_s { * selective workarounds for hardware errata. * The type of this attribute is uint32_t. */ - HSA_AMD_AGENT_INFO_ASIC_REVISION = 0xA012 + HSA_AMD_AGENT_INFO_ASIC_REVISION = 0xA012, + + /* Bitmask with memory properties of the agent. */ + HSA_AMD_AGENT_INFO_MEMORY_PROPERTIES = 0xA114 } hsa_amd_agent_info_t; + +enum { + HSA_AMD_MEMORY_PROPERTY_AGENT_IS_APU = (1 << 0) +}; + typedef struct hsa_amd_hdp_flush_s { uint32_t* HDP_MEM_FLUSH_CNTL; uint32_t* HDP_REG_FLUSH_CNTL; diff --git a/libgomp/plugin/plugin-gcn.c b/libgomp/plugin/plugin-gcn.c index 18f01e090023..cd5a19b03551 100644 --- a/libgomp/plugin/plugin-gcn.c +++ b/libgomp/plugin/plugin-gcn.c @@ -3331,6 +3331,61 @@ gcn_exec (struct kernel_info *kernel, /* }}} */ /* {{{ Generic Plugin API */ +#if 0 /* TODO: Use to enable self-mapping/USM automatically. */ +/* FIXME: The auto-self-map feature depends on still mapping 'declare target' + variables, even if ignoring all other mappings. Cf. PR 115279. */ + +/* Return TRUE if the GPU is an APU, i.e. the GPU is integrated with the CPU + such that both use the same memory controller such that mapping or memory + migration is pointless. If CHECK_XNACK is TRUE, it additionally requires + that the GPU has *no* XNACK support otherwise FALSE is returned. + + In theory, enabling unified-shared memory for APUs should always work, + however, with AMD GPUs some APUs (e.g. MI300A) still require XNACK to be + enabled as it is required to handle page faults. + + Thus, for unified-shared memory access, either of the following must hold: + * HSA_AMD_SYSTEM_INFO_SVM_ACCESSIBLE_BY_DEFAULT is TRUE + This implies that all GPUs support USM access, either directly (as APU) + or via page migration. For MI300A, this is only the case if + HSA_AMD_SYSTEM_INFO_XNACK_ENABLED is TRUE. + * If the GPU an APU *and* it does not support XNACK. */ + +static bool +is_integrated_apu (struct agent_info *agent, bool check_xnack) +{ + enum { + HSACO_ATTR_UNSUPPORTED, + HSACO_ATTR_OFF, + HSACO_ATTR_ON, + HSACO_ATTR_ANY, + HSACO_ATTR_DEFAULT + }; + + bool is_apu; + uint8_t mem_prop[8]; + hsa_status_t status; + + status = hsa_fns.hsa_agent_get_info_fn ( + agent->id, (hsa_agent_info_t) HSA_AMD_AGENT_INFO_MEMORY_PROPERTIES, + mem_prop); + _Static_assert (HSA_AMD_MEMORY_PROPERTY_AGENT_IS_APU < 8, + "HSA_AMD_MEMORY_PROPERTY_AGENT_IS_APU < 8"); + is_apu = (status == HSA_STATUS_SUCCESS + && (mem_prop[0] & (1 << HSA_AMD_MEMORY_PROPERTY_AGENT_IS_APU))); + + if (check_xnack) + switch(agent->device_isa) + { +#define GCN_DEVICE(name, NAME, ELF, ISA, XNACK, ...) \ + case ELF: return is_apu && (XNACK == HSACO_ATTR_UNSUPPORTED); +#include "../../gcc/config/gcn/gcn-devices.def" + default: return false; /* Just to be save. */ + } + return is_apu; +} +#endif + /* Return the name of the accelerator, which is "gcn". */ const char * diff --git a/libgomp/plugin/plugin-nvptx.c b/libgomp/plugin/plugin-nvptx.c index eb7b5e59d8f7..92c62ee5b868 100644 --- a/libgomp/plugin/plugin-nvptx.c +++ b/libgomp/plugin/plugin-nvptx.c @@ -1246,6 +1246,24 @@ nvptx_get_current_cuda_context (void) return nvthd->ptx_dev->ctx; } +#if 0 /* TODO: Use to enable self-mapping/USM automatically. */ +/* FIXME: The auto-self-map feature depends on still mapping 'declare target' + variables, even if ignoring all other mappings. Cf. PR 115279. */ + +/* Return TRUE if the GPU is integrated with host memory, i.e. GPU and + host share the same memory controller. As of Oct 2025, no such + Nvidia GPU seems to exist. */ +static bool +is_integrated_apu (struct ptx_device *ptx_dev) +{ + int pi; + CUresult r; + r = CUDA_CALL_NOCHECK (cuDeviceGetAttribute, &pi, + CU_DEVICE_ATTRIBUTE_INTEGRATED, ptx_dev->dev); + return (r == CUDA_SUCCESS && pi == 1); +} +#endif + /* Plugin entry points. */ const char * From 53085a46e7f16245abbe23b8c36d641cc04947ca Mon Sep 17 00:00:00 2001 From: Robin Dapp Date: Thu, 9 Oct 2025 22:47:26 +0200 Subject: [PATCH 212/216] arm: Fix support_vector_misalignment. In gcc-16-4314-g5e9eecc6686 I meant to remove all uses of TYPE in support_vector_misalignment but apparently forgot this one. Fixing by using the inner mode's size. gcc/ChangeLog: * config/arm/arm.cc (arm_builtin_support_vector_misalignment): Remove use of type. --- gcc/config/arm/arm.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/config/arm/arm.cc b/gcc/config/arm/arm.cc index f074a429200b..da28d96298a4 100644 --- a/gcc/config/arm/arm.cc +++ b/gcc/config/arm/arm.cc @@ -30667,7 +30667,7 @@ arm_builtin_support_vector_misalignment (machine_mode mode, { if (TARGET_NEON && !BYTES_BIG_ENDIAN && unaligned_access) { - HOST_WIDE_INT align = TYPE_ALIGN_UNIT (type); + HOST_WIDE_INT align = GET_MODE_UNIT_SIZE (mode); if (is_gather_scatter) return true; From e520fe08031a4f16e5a7933b4a5fada00413fc6c Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Fri, 10 Oct 2025 10:05:46 +0200 Subject: [PATCH 213/216] Use gimple_build to perform conversion simplification The following uses gimple_build to do the conversion simplification in build_and_insert_cast instead of duplicating it there. Conveniently when building directly into the IL all stmts are taken into account for the simplification. PR tree-optimization/122111 * tree-ssa-math-opts.cc (build_and_insert_cast): Remove conversion simplification, instead use gimple_convert. * gcc.target/arm/pr122111.c: New test. --- gcc/testsuite/gcc.target/arm/pr122111.c | 14 +++++++++ gcc/tree-ssa-math-opts.cc | 38 +------------------------ 2 files changed, 15 insertions(+), 37 deletions(-) create mode 100644 gcc/testsuite/gcc.target/arm/pr122111.c diff --git a/gcc/testsuite/gcc.target/arm/pr122111.c b/gcc/testsuite/gcc.target/arm/pr122111.c new file mode 100644 index 000000000000..82d15e9a43bf --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr122111.c @@ -0,0 +1,14 @@ +/* Test that we do not have ice when compile */ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ + +typedef long long wide; + +void g(void); +wide f(int *a, unsigned t) +{ + wide i = t; + i *= 4; + unsigned long ai = (__SIZE_TYPE__)a; + return i + ai; +} diff --git a/gcc/tree-ssa-math-opts.cc b/gcc/tree-ssa-math-opts.cc index 0db39f330ead..04c9f2c07e92 100644 --- a/gcc/tree-ssa-math-opts.cc +++ b/gcc/tree-ssa-math-opts.cc @@ -1631,43 +1631,7 @@ static tree build_and_insert_cast (gimple_stmt_iterator *gsi, location_t loc, tree type, tree val) { - tree result = make_ssa_name (type); - tree rhs = val; - - if (TREE_CODE (val) == SSA_NAME) - { - gimple *def = SSA_NAME_DEF_STMT (val); - - if (is_gimple_assign (def) - && CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (def))) - { - tree cast_rhs = gimple_assign_rhs1 (def); - tree cast_rhs_type = TREE_TYPE (cast_rhs); - tree val_type = TREE_TYPE (val); - - bool unsigned_p = TYPE_UNSIGNED (type); - bool unsigned_rhs_p = TYPE_UNSIGNED (cast_rhs_type); - bool unsigned_val_p = TYPE_UNSIGNED (val_type); - - unsigned rhs_prec = TYPE_PRECISION (cast_rhs_type); - unsigned type_prec = TYPE_PRECISION (type); - unsigned val_prec = TYPE_PRECISION (val_type); - - if (type_prec >= rhs_prec && val_prec >= rhs_prec) - { - /* Aka any sign extend from small to big size */ - if (!((val_prec > rhs_prec && !unsigned_val_p && !unsigned_rhs_p) - || (type_prec > val_prec && !unsigned_p && !unsigned_val_p))) - rhs = cast_rhs; - } - } - } - - gassign *stmt = gimple_build_assign (result, NOP_EXPR, rhs); - - gimple_set_location (stmt, loc); - gsi_insert_before (gsi, stmt, GSI_SAME_STMT); - return result; + return gimple_convert (gsi, true, GSI_SAME_STMT, loc, type, val); } struct pow_synth_sqrt_info From a164e36cb8f2ffeb1c0837f92ea07ed7f32fec9e Mon Sep 17 00:00:00 2001 From: Artemiy Volkov Date: Tue, 9 Jul 2024 08:10:29 +0200 Subject: [PATCH 214/216] arcv: add scheduling information for the Synopsys RMX-100 CPU This commit introduces a new -mtune=rmx100 tuning option together with relevant scheduler definitions. Instruction latencies and costs are based on the "RMX-100 Technical Reference Manual" document (revision 0.4, 13 September 2023) and are subject to change. The changes have been verified by running the Dhrystone and Coremark benchmarks and observing expected (small) improvements compared to the -mtune=generic results. Signed-off-by: Artemiy Volkov --- gcc/config/riscv/arcv-rmx100.md | 110 +++++++++++++++++++++++++++++++ gcc/config/riscv/riscv-cores.def | 1 + gcc/config/riscv/riscv-opts.h | 1 + gcc/config/riscv/riscv.cc | 24 +++++++ gcc/config/riscv/riscv.md | 3 +- gcc/doc/riscv-mtune.texi | 2 + 6 files changed, 140 insertions(+), 1 deletion(-) create mode 100644 gcc/config/riscv/arcv-rmx100.md diff --git a/gcc/config/riscv/arcv-rmx100.md b/gcc/config/riscv/arcv-rmx100.md new file mode 100644 index 000000000000..9194f510f9f8 --- /dev/null +++ b/gcc/config/riscv/arcv-rmx100.md @@ -0,0 +1,110 @@ +;; DFA scheduling description of the Synopsys RMX-100 cpu +;; for GNU C compiler +;; Copyright (C) 2023 Free Software Foundation, Inc. + +;; This file is part of GCC. + +;; GCC is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3, or (at your option) +;; any later version. + +;; GCC is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GCC; see the file COPYING3. If not see +;; . + +(define_automaton "arcv_rmx100") + +(define_cpu_unit "arcv_rmx100_ALU" "arcv_rmx100") +;(define_cpu_unit "arcv_rmx100_CSR" "arcv_rmx100") +(define_cpu_unit "arcv_rmx100_FPU" "arcv_rmx100") +(define_cpu_unit "arcv_rmx100_MPY" "arcv_rmx100") +(define_cpu_unit "arcv_rmx100_DIV" "arcv_rmx100") +(define_cpu_unit "arcv_rmx100_DMP" "arcv_rmx100") + +;; Instruction reservation for arithmetic instructions. +(define_insn_reservation "arcv_rmx100_alu_arith" 1 + (and (eq_attr "tune" "arcv_rmx100") + (eq_attr "type" "unknown, const, arith, shift, slt, multi, auipc, nop, + logical, move, atomic, mvpair, bitmanip, clz, ctz, cpop, + zicond, condmove, clmul, min, max, minu, maxu, rotate")) + "arcv_rmx100_ALU") + +(define_insn_reservation "arcv_rmx100_jmp_insn" 1 + (and (eq_attr "tune" "arcv_rmx100") + (eq_attr "type" "branch, jump, call, jalr, ret, trap")) + "arcv_rmx100_ALU") + +; DIV insn: latency may be overridden by a define_bypass +(define_insn_reservation "arcv_rmx100_div_insn" 35 + (and (eq_attr "tune" "arcv_rmx100") + (eq_attr "type" "idiv")) + "arcv_rmx100_DIV*35") + +; MPY insn: latency may be overridden by a define_bypass +(define_insn_reservation "arcv_rmx100_mpy32_insn" 9 + (and (eq_attr "tune" "arcv_rmx100") + (eq_attr "type" "imul")) + "arcv_rmx100_MPY") + +(define_insn_reservation "arcv_rmx100_load_insn" 3 + (and (eq_attr "tune" "arcv_rmx100") + (eq_attr "type" "load,fpload")) + "arcv_rmx100_DMP,nothing*2") + +(define_insn_reservation "arcv_rmx100_store_insn" 1 + (and (eq_attr "tune" "arcv_rmx100") + (eq_attr "type" "store,fpstore")) + "arcv_rmx100_DMP") + +(define_insn_reservation "arcv_rmx100_farith_insn" 2 + (and (eq_attr "tune" "arcv_rmx100") + (eq_attr "type" "fadd,fmul,fmadd,fcmp")) + "arcv_rmx100_FPU*2") + +(define_insn_reservation "arcv_rmx100_fdiv_insn" 17 + (and (eq_attr "tune" "arcv_rmx100") + (eq_attr "type" "fdiv,fsqrt")) + "arcv_rmx100_FPU*17") + +(define_insn_reservation "arcv_rmx100_xfer" 2 + (and (eq_attr "tune" "arcv_rmx100") + (eq_attr "type" "fmove,mtc,mfc,fcvt,fcvt_f2i,fcvt_i2f")) + "arcv_rmx100_FPU*2") + +;;(define_insn_reservation "core" 1 +;; (eq_attr "type" "block, brk, dmb, flag, lr, sr, sync") +;; "arcv_rmx100_ALU0 + arcv_rmx100_ALU1 + arcv_rmx100_DMP + arcv_rmx100_MPY + arcv_rmx100_MPY64 + arcv_rmx100_DIV") + +(define_insn_reservation "arcv_rmx100_fmul_half" 5 + (and (eq_attr "tune" "arcv_rmx100") + (and (eq_attr "type" "fadd,fmul,fmadd") + (eq_attr "mode" "HF"))) + "arcv_rmx100_FPU") + +(define_insn_reservation "arcv_rmx100_fmul_single" 5 + (and (eq_attr "tune" "arcv_rmx100") + (and (eq_attr "type" "fadd,fmul,fmadd") + (eq_attr "mode" "SF"))) + "arcv_rmx100_FPU") + +(define_insn_reservation "arcv_rmx100_fmul_double" 7 + (and (eq_attr "tune" "arcv_rmx100") + (and (eq_attr "type" "fadd,fmul,fmadd") + (eq_attr "mode" "DF"))) + "arcv_rmx100_FPU") + +(define_insn_reservation "arcv_rmx100_fdiv" 20 + (and (eq_attr "tune" "arcv_rmx100") + (eq_attr "type" "fdiv")) + "arcv_rmx100_FPU*20") + +(define_insn_reservation "arcv_rmx100_fsqrt" 25 + (and (eq_attr "tune" "arcv_rmx100") + (eq_attr "type" "fsqrt")) + "arcv_rmx100_FPU*25") diff --git a/gcc/config/riscv/riscv-cores.def b/gcc/config/riscv/riscv-cores.def index cc9d5c03cb8c..d1708f3785b6 100644 --- a/gcc/config/riscv/riscv-cores.def +++ b/gcc/config/riscv/riscv-cores.def @@ -50,6 +50,7 @@ RISCV_TUNE("xt-c920", generic, generic_ooo_tune_info) RISCV_TUNE("xt-c920v2", generic, generic_ooo_tune_info) RISCV_TUNE("xiangshan-nanhu", xiangshan, xiangshan_nanhu_tune_info) RISCV_TUNE("xiangshan-kunminghu", xiangshan, generic_ooo_tune_info) +RISCV_TUNE("arc-v-rmx-100-series", arcv_rmx100, arcv_rmx100_tune_info) RISCV_TUNE("generic-ooo", generic_ooo, generic_ooo_tune_info) RISCV_TUNE("size", generic, optimize_size_tune_info) RISCV_TUNE("mips-p8700", mips_p8700, mips_p8700_tune_info) diff --git a/gcc/config/riscv/riscv-opts.h b/gcc/config/riscv/riscv-opts.h index 4e4e9d8930e2..3feb211767cb 100644 --- a/gcc/config/riscv/riscv-opts.h +++ b/gcc/config/riscv/riscv-opts.h @@ -61,6 +61,7 @@ enum riscv_microarchitecture_type { generic_ooo, mips_p8700, tt_ascalon_d8, + arcv_rmx100, }; extern enum riscv_microarchitecture_type riscv_microarchitecture; diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index a30c9f1dd146..4e59533e5278 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -685,6 +685,30 @@ static const struct riscv_tune_param tt_ascalon_d8_tune_info = { true, /* prefer-agnostic. */ }; +/* Costs to use when optimizing for Synopsys RMX-100. */ +static const struct riscv_tune_param arcv_rmx100_tune_info = { + {COSTS_N_INSNS (2), COSTS_N_INSNS (2)}, /* fp_add */ + {COSTS_N_INSNS (2), COSTS_N_INSNS (2)}, /* fp_mul */ + {COSTS_N_INSNS (17), COSTS_N_INSNS (17)}, /* fp_div */ + {COSTS_N_INSNS (2), COSTS_N_INSNS (2)}, /* int_mul */ + {COSTS_N_INSNS (17), COSTS_N_INSNS (17)}, /* int_div */ + 1, /* issue_rate */ + 4, /* branch_cost */ + 2, /* memory_cost */ + 4, /* fmv_cost */ + false, /* slow_unaligned_access */ + false, /* vector_unaligned_access */ + false, /* use_divmod_expansion */ + false, /* overlap_op_by_pieces */ + true, /* use_zero_stride_load */ + false, /* speculative_sched_vsetvl */ + RISCV_FUSE_NOTHING, /* fusible_ops */ + NULL, /* vector cost */ + NULL, /* function_align */ + NULL, /* jump_align */ + NULL, /* loop_align */ +}; + /* Costs to use when optimizing for size. */ static const struct riscv_tune_param optimize_size_tune_info = { {COSTS_N_INSNS (1), COSTS_N_INSNS (1)}, /* fp_add */ diff --git a/gcc/config/riscv/riscv.md b/gcc/config/riscv/riscv.md index 78a01ef30c75..70183045b556 100644 --- a/gcc/config/riscv/riscv.md +++ b/gcc/config/riscv/riscv.md @@ -672,7 +672,7 @@ ;; Microarchitectures we know how to tune for. ;; Keep this in sync with enum riscv_microarchitecture. (define_attr "tune" - "generic,sifive_7,sifive_p400,sifive_p600,xiangshan,generic_ooo,mips_p8700,tt_ascalon_d8" + "generic,sifive_7,sifive_p400,sifive_p600,xiangshan,generic_ooo,mips_p8700,tt_ascalon_d8,arcv_rmx100" (const (symbol_ref "((enum attr_tune) riscv_microarchitecture)"))) ;; Describe a user's asm statement. @@ -4990,3 +4990,4 @@ (include "generic-vector-ooo.md") (include "generic-ooo.md") (include "tt-ascalon-d8.md") +(include "arcv-rmx100.md") diff --git a/gcc/doc/riscv-mtune.texi b/gcc/doc/riscv-mtune.texi index a2a4d3e77dbb..63a01db67726 100644 --- a/gcc/doc/riscv-mtune.texi +++ b/gcc/doc/riscv-mtune.texi @@ -50,6 +50,8 @@ particular CPU name. Permissible values for this option are: @samp{xiangshan-kunminghu}, +@samp{arc-v-rmx-100-series}, + @samp{generic-ooo}, @samp{size}, From 3dea93335a985c0fb2ca293c5736cd05c81c51a3 Mon Sep 17 00:00:00 2001 From: Artemiy Volkov Date: Fri, 5 Jul 2024 06:46:11 -0700 Subject: [PATCH 215/216] arcv: introduce and incorporate the --param=arcv-mpy-option flag This commit adds the new arcv-mpy-option compilation parameter with the valid (string) values of 1c, 2c, and 10c. This corresponds to different versions of the MPY/DIV unit of the RMX100 core, each of which has different latencies for imul/idiv instructions. Internally, this option is propagated to the pipeline description information in rmx100.md with the use of new helper functions defined in riscv.cc. Signed-off-by: Artemiy Volkov --- gcc/config/riscv/arcv-rmx100.md | 11 ++++++----- gcc/config/riscv/riscv-opts.h | 7 +++++++ gcc/config/riscv/riscv-protos.h | 3 +++ gcc/config/riscv/riscv.cc | 24 ++++++++++++++++++++++++ gcc/config/riscv/riscv.opt | 17 +++++++++++++++++ 5 files changed, 57 insertions(+), 5 deletions(-) diff --git a/gcc/config/riscv/arcv-rmx100.md b/gcc/config/riscv/arcv-rmx100.md index 9194f510f9f8..003bf9ff268e 100644 --- a/gcc/config/riscv/arcv-rmx100.md +++ b/gcc/config/riscv/arcv-rmx100.md @@ -67,11 +67,6 @@ (eq_attr "type" "fadd,fmul,fmadd,fcmp")) "arcv_rmx100_FPU*2") -(define_insn_reservation "arcv_rmx100_fdiv_insn" 17 - (and (eq_attr "tune" "arcv_rmx100") - (eq_attr "type" "fdiv,fsqrt")) - "arcv_rmx100_FPU*17") - (define_insn_reservation "arcv_rmx100_xfer" 2 (and (eq_attr "tune" "arcv_rmx100") (eq_attr "type" "fmove,mtc,mfc,fcvt,fcvt_f2i,fcvt_i2f")) @@ -108,3 +103,9 @@ (and (eq_attr "tune" "arcv_rmx100") (eq_attr "type" "fsqrt")) "arcv_rmx100_FPU*25") + +(define_bypass 1 "arcv_rmx100_mpy32_insn" "arcv_rmx100_*" "arcv_mpy_1c_bypass_p") +(define_bypass 2 "arcv_rmx100_mpy32_insn" "arcv_rmx100_*" "arcv_mpy_2c_bypass_p") + +(define_bypass 9 "arcv_rmx100_div_insn" "arcv_rmx100_*" "arcv_mpy_1c_bypass_p") +(define_bypass 9 "arcv_rmx100_div_insn" "arcv_rmx100_*" "arcv_mpy_2c_bypass_p") diff --git a/gcc/config/riscv/riscv-opts.h b/gcc/config/riscv/riscv-opts.h index 3feb211767cb..7be10413b4d9 100644 --- a/gcc/config/riscv/riscv-opts.h +++ b/gcc/config/riscv/riscv-opts.h @@ -86,6 +86,13 @@ enum rvv_max_lmul_enum { RVV_DYNAMIC = 9 }; +/* ARC-V multiply option. */ +enum arcv_mpy_option_enum { + ARCV_MPY_OPTION_1C = 1, + ARCV_MPY_OPTION_2C = 2, + ARCV_MPY_OPTION_10C = 8, +}; + enum riscv_multilib_select_kind { /* Select multilib by builtin way. */ select_by_builtin, diff --git a/gcc/config/riscv/riscv-protos.h b/gcc/config/riscv/riscv-protos.h index 013b1ddff691..c321a08c8d81 100644 --- a/gcc/config/riscv/riscv-protos.h +++ b/gcc/config/riscv/riscv-protos.h @@ -165,6 +165,9 @@ extern bool riscv_epilogue_uses (unsigned int); extern bool riscv_can_use_return_insn (void); extern rtx riscv_function_value (const_tree, const_tree, enum machine_mode); extern bool riscv_store_data_bypass_p (rtx_insn *, rtx_insn *); +extern bool arcv_mpy_1c_bypass_p (rtx_insn *, rtx_insn *); +extern bool arcv_mpy_2c_bypass_p (rtx_insn *, rtx_insn *); +extern bool arcv_mpy_10c_bypass_p (rtx_insn *, rtx_insn *); extern rtx riscv_gen_gpr_save_insn (struct riscv_frame_info *); extern bool riscv_gpr_save_operation_p (rtx); extern void riscv_reinit (void); diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index 4e59533e5278..9361403acef9 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -10007,6 +10007,30 @@ riscv_store_data_bypass_p (rtx_insn *out_insn, rtx_insn *in_insn) return store_data_bypass_p (out_insn, in_insn); } +/* Implement one boolean function for each of the values of the + arcv_mpy_option enum, for the needs of rhx100.md. */ + +bool +arcv_mpy_1c_bypass_p (rtx_insn *out_insn ATTRIBUTE_UNUSED, + rtx_insn *in_insn ATTRIBUTE_UNUSED) +{ + return arcv_mpy_option == ARCV_MPY_OPTION_1C; +} + +bool +arcv_mpy_2c_bypass_p (rtx_insn *out_insn ATTRIBUTE_UNUSED, + rtx_insn *in_insn ATTRIBUTE_UNUSED) +{ + return arcv_mpy_option == ARCV_MPY_OPTION_2C; +} + +bool +arcv_mpy_10c_bypass_p (rtx_insn *out_insn ATTRIBUTE_UNUSED, + rtx_insn *in_insn ATTRIBUTE_UNUSED) +{ + return arcv_mpy_option == ARCV_MPY_OPTION_10C; +} + /* Implement TARGET_SECONDARY_MEMORY_NEEDED. When floating-point registers are wider than integer ones, moves between diff --git a/gcc/config/riscv/riscv.opt b/gcc/config/riscv/riscv.opt index 6543fd1c4a72..663acf62dac4 100644 --- a/gcc/config/riscv/riscv.opt +++ b/gcc/config/riscv/riscv.opt @@ -396,3 +396,20 @@ Specifies whether the fence.tso instruction should be used. mautovec-segment Target Integer Var(riscv_mautovec_segment) Init(1) Enable (default) or disable generation of vector segment load/store instructions. + +Enum +Name(arcv_mpy_option) Type(enum arcv_mpy_option_enum) +Valid arguments to -param=arcv_mpy_option=: + +EnumValue +Enum(arcv_mpy_option) String(1c) Value(ARCV_MPY_OPTION_1C) + +EnumValue +Enum(arcv_mpy_option) String(2c) Value(ARCV_MPY_OPTION_2C) + +EnumValue +Enum(arcv_mpy_option) String(10c) Value(ARCV_MPY_OPTION_10C) + +-param=arcv-mpy-option= +Target RejectNegative Joined Enum(arcv_mpy_option) Var(arcv_mpy_option) Init(ARCV_MPY_OPTION_2C) +The type of MPY unit used by the RMX-100 core (to be used in combination with -mtune=rmx100) (default: 2c). From 8b7268c58594a329db3f6ab0feff7bf3480ed1f1 Mon Sep 17 00:00:00 2001 From: Artemiy Volkov Date: Thu, 8 May 2025 01:36:17 -0700 Subject: [PATCH 216/216] arcv: add FPU insn latencies to the RMX-100 scheduling model This patch adds latencies related to FPU instructions to arcv-rmx100.md. The specific values used correspond to the 'fast' config, except fdiv where the latency was reduced to 10 cycles. In the future, FP latencies for RMX-100 should be made dependent on an external (-mfpu-like) option. Signed-off-by: Artemiy Volkov --- gcc/config/riscv/arcv-rmx100.md | 50 ++++++++++++++------------------- 1 file changed, 21 insertions(+), 29 deletions(-) diff --git a/gcc/config/riscv/arcv-rmx100.md b/gcc/config/riscv/arcv-rmx100.md index 003bf9ff268e..5a25dfb67cfc 100644 --- a/gcc/config/riscv/arcv-rmx100.md +++ b/gcc/config/riscv/arcv-rmx100.md @@ -54,7 +54,7 @@ (define_insn_reservation "arcv_rmx100_load_insn" 3 (and (eq_attr "tune" "arcv_rmx100") - (eq_attr "type" "load,fpload")) + (eq_attr "type" "load")) "arcv_rmx100_DMP,nothing*2") (define_insn_reservation "arcv_rmx100_store_insn" 1 @@ -62,47 +62,39 @@ (eq_attr "type" "store,fpstore")) "arcv_rmx100_DMP") +;; FPU scheduling. FIXME: This is based on the "fast" unit for now, the "slow" +;; option remains to be implemented later (together with the -mfpu flag). + +(define_insn_reservation "arcv_rmx100_fpload_insn" 3 + (and (eq_attr "tune" "arcv_rmx100") + (eq_attr "type" "fpload")) + "arcv_rmx100_DMP,nothing*2") + (define_insn_reservation "arcv_rmx100_farith_insn" 2 (and (eq_attr "tune" "arcv_rmx100") - (eq_attr "type" "fadd,fmul,fmadd,fcmp")) - "arcv_rmx100_FPU*2") + (eq_attr "type" "fadd,fcmp")) + "arcv_rmx100_FPU,nothing") -(define_insn_reservation "arcv_rmx100_xfer" 2 +(define_insn_reservation "arcv_rmx100_xfer" 1 (and (eq_attr "tune" "arcv_rmx100") (eq_attr "type" "fmove,mtc,mfc,fcvt,fcvt_f2i,fcvt_i2f")) - "arcv_rmx100_FPU*2") - -;;(define_insn_reservation "core" 1 -;; (eq_attr "type" "block, brk, dmb, flag, lr, sr, sync") -;; "arcv_rmx100_ALU0 + arcv_rmx100_ALU1 + arcv_rmx100_DMP + arcv_rmx100_MPY + arcv_rmx100_MPY64 + arcv_rmx100_DIV") + "arcv_rmx100_FPU") -(define_insn_reservation "arcv_rmx100_fmul_half" 5 +(define_insn_reservation "arcv_rmx100_fmul_insn" 2 (and (eq_attr "tune" "arcv_rmx100") - (and (eq_attr "type" "fadd,fmul,fmadd") - (eq_attr "mode" "HF"))) - "arcv_rmx100_FPU") + (eq_attr "type" "fmul")) + "arcv_rmx100_FPU,nothing") -(define_insn_reservation "arcv_rmx100_fmul_single" 5 +(define_insn_reservation "arcv_rmx100_fmac_insn" 2 (and (eq_attr "tune" "arcv_rmx100") - (and (eq_attr "type" "fadd,fmul,fmadd") - (eq_attr "mode" "SF"))) - "arcv_rmx100_FPU") + (eq_attr "type" "fmadd")) + "arcv_rmx100_FPU,nothing") -(define_insn_reservation "arcv_rmx100_fmul_double" 7 +(define_insn_reservation "arcv_rmx100_fdiv_insn" 10 (and (eq_attr "tune" "arcv_rmx100") - (and (eq_attr "type" "fadd,fmul,fmadd") - (eq_attr "mode" "DF"))) + (eq_attr "type" "fdiv,fsqrt")) "arcv_rmx100_FPU") -(define_insn_reservation "arcv_rmx100_fdiv" 20 - (and (eq_attr "tune" "arcv_rmx100") - (eq_attr "type" "fdiv")) - "arcv_rmx100_FPU*20") - -(define_insn_reservation "arcv_rmx100_fsqrt" 25 - (and (eq_attr "tune" "arcv_rmx100") - (eq_attr "type" "fsqrt")) - "arcv_rmx100_FPU*25") (define_bypass 1 "arcv_rmx100_mpy32_insn" "arcv_rmx100_*" "arcv_mpy_1c_bypass_p") (define_bypass 2 "arcv_rmx100_mpy32_insn" "arcv_rmx100_*" "arcv_mpy_2c_bypass_p")