Caution
Following implementation of Raccoon post-quantum digital signature scheme is designed from scratch, having zero third-party dependencies. Expect breaking API changes and more importantly you must not use it in production, for now.
Raccoon: A Side-Channel Secure Lattice -based Post-Quantum Digital Signature Scheme
Raccoon is a side-channel secure lattice -based post-quantum digital signature scheme based on the Fiat-Shamir with aborts paradigm, which is competing in the round 1 of additional digital signature scheme standardization process, initiated by NIST. More about it @ https://csrc.nist.gov/Projects/pqc-dig-sig/round-1-additional-signatures.
Though we already have two lattice -based post-quantum digital signature schemes i.e. Dilithium (already standardized in FIPS-204) and Falcon, selected for standardization by NIST, Raccoon is an attempt to improve the state of the art in side-channel attack resistance of post-quantum digital signature schemes using a masking friendly design, supporting very high order ( such as d = 32 i.e. 32 -shares for a polynomial coefficient ) masking, with negligible latency cost, supporting real-world usecases.
Here I'm developing and maintaining a header-only C++20 library implementation of Raccoon post-quantum digital signature scheme, offering key generation, arbitrary length message signing and verification of (message, signature) pair, for all three (i.e. category 1, 3 and 5) NIST security levels, along with full masking support for masking order t
s.t. 0 <= t < 32
.
This implementation follows Raccoon specification @ https://raccoonfamily.org/wp-content/uploads/2023/07/raccoon.pdf.
- A C++ compiler with C++20 standard library.
$ c++ -v
Ubuntu clang version 18.1.3 (1)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/13
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/14
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/14
Candidate multilib: .;@m64
Selected multilib: .;@m64
- System development utility programs such as
make
andcmake
. - For testing functional correctness of this Raccoon digital signature scheme implementation, you need to globally install
google-test
library and its headers. Follow guide @ https://github.com/google/googletest/tree/main/googletest#standalone-cmake-project, if you don't have it installed. - For benchmarking Raccoon digital signature scheme, you must have
google-benchmark
header and library globally installed. I found guide @ https://github.com/google/benchmark#installation helpful.
Note
If you are on a machine running GNU/Linux kernel and you want to obtain CPU cycle count for digital signature scheme routines, you should consider building google-benchmark
library with libPFM
support, following https://gist.github.com/itzmeanjan/05dc3e946f635d00c5e0b21aae6203a7, a step-by-step guide. Find more about libPFM
@ https://perfmon2.sourceforge.net.
Tip
Git submodule based dependencies will generally be imported automatically, but in case that doesn't work, you can manually initialize and update them by issuing $ git submodule update --init
from inside the root of this repository.
For ensuring functional correctness of this Raccoon post-quantum digital signature scheme's library implemenation, issue
# - You can switch to non-default compiler, by setting variable `CXX` i.e. invoke like `$ CXX=clang++ make -j`.
# - Passing `CXX_DEFS=-DPREFER_INT128_COMPILER_EXTENSION_TYPE`, attempts to use `__int128` compiler extension, when
# available. If `CXX_DEFS` variable is not set while invoking `make`, it'll emulate two 64 -bit words, to emulate
# 128 -bit arithmetic.
make -j # Run tests without any sort of sanitizers
make debug_asan_test -j # Run tests with AddressSanitizer enabled, with `-O1`
make release_asan_test -j # Run tests with AddressSanitizer enabled, with `-O3 -march=native`
make debug_ubsan_test -j # Run tests with UndefinedBehaviourSanitizer enabled, with `-O1`
make release_ubsan_test -j # Run tests with UndefinedBehaviourSanitizer enabled, with `-O3 -march=native`
# Run tests without any sort of sanitizers, attempting to use __int128 compiler extension type, while compiling with default CXX compiler.
CXX_DEFS=-DPREFER_INT128_COMPILER_EXTENSION_TYPE make -j
# Run tests without any sort of sanitizers, using __int128 compiler extension type, while compiling with clang++ compiler.
CXX=clang++ CXX_DEFS=-DPREFER_INT128_COMPILER_EXTENSION_TYPE make -j
PASSED TESTS (9/9):
3 ms: build/test/test.out RaccoonSign.EncodeDecodePublicKey
3 ms: build/test/test.out RaccoonSign.UnmaskedSecretKeyVectorCompressionAndDecompression
3 ms: build/test/test.out RaccoonSign.ZeroPolynomialSecretKeyEncodingAndDecoding
39 ms: build/test/test.out RaccoonSign.RefreshAndDecodingGadgets
734 ms: build/test/test.out RaccoonSign.ArithmeticOverU128
3446 ms: build/test/test.out RaccoonSign.ArithmeticOverZq
7571 ms: build/test/test.out RaccoonSign.Raccoon128Signing
10039 ms: build/test/test.out RaccoonSign.Raccoon192Signing
14021 ms: build/test/test.out RaccoonSign.Raccoon256Signing
Warning
Running tests on a machine with small stack size might result in failure. I've observed RaccoonSign.Raccoon256Signing
test ( when running the d=32
instantiation ) failing on a x86_64
machine running Ubuntu 24.04 LTS
(powered by kernel Linux 6.8.0-31-generic
), with stack size 8192 kB
. Bumping the stack size to 16384 kB
, gives it enough memory that all tests pass. Stack size can be changed by issuing $ ulimit -s 16384
, while current stack size can be queried using $ ulimit -s
.
Benchmarking key generation, signing and verification algorithms for various instantiations of Raccoon digital signature scheme can be done, by issuing
make benchmark -j # If you haven't built google-benchmark library with libPFM support.
make perf -j # If you have built google-benchmark library with libPFM support.
# For benchmarking implementation, which is using __int128 compiler extension type.
CXX_DEFS=-DPREFER_INT128_COMPILER_EXTENSION_TYPE make perf -j # `benchmark` instead of `perf`
Caution
You must put all the CPU cores on performance mode before running benchmark program, follow guide @ https://github.com/google/benchmark/blob/main/docs/reducing_variance.md.
Warning
Relying only on average timing measurement for understanding performance characteristics of Raccoon signing algorithm may not be a good idea, given that it's a post-quantum digital signature scheme of "Fiat-Shamir with Aborts" paradigm - in simple words, during signing procedure it may need to abort and restart again, multiple times, based on what message is being signed or what sort of randomness is being used for signing. So it's a better idea to also compute other statistics such as minimum, maximum and median ( pretty useful ) when timing execution of signing procedure. In collected benchmark results, you'll see such statistics, demonstrating broader performance characteristics of Raccoon signing procedure, for various parameter sets.
I've collected a few benchmark run results, in JSON format, for sake of future benchmark comparison. For benchmark comparison, I use a tool, that comes with google-benchmark
, see https://github.com/google/benchmark/blob/main/docs/tools.md.
- On 12th Gen Intel(R) Core(TM) i7-1260P
- (a) Benchmark result on Linux_6.8.0-41-generic_x86_64 with g++-14
- (b) Benchmark result on Linux_6.8.0-41-generic_x86_64 with clang++-17.0.6
- On Cortex-A72 i.e. Raspberry Pi 4B
- (a) Benchmark result on 6.6.33-2-MANJARO-RPI4_aarch64 with g++-12.1.0
- (b) Benchmark result on 6.6.33-2-MANJARO-RPI4_aarch64 with clang++-16.0.6
Benchmark comparison of 1(a)
vs. 1(b)
.
Note
From following, it's very much evident that Clang-17 is producing much better code than GCC-14, for majority of the cases.
Comparing /home/anjan/Documents/my_work/raccoon/bench_result_on_Linux_6.8.0-41-generic_x86_64_with_g++_14.json to /home/anjan/Documents/my_work/raccoon/bench_result_on_Linux_6.8.0-41-generic_x86_64_with_clang++_17.0.6.json
Benchmark Time CPU Time Old Time New CPU Old CPU New
--------------------------------------------------------------------------------------------------------------------------
raccoon128/keygen/1_mean -0.4989 -0.4989 1 0 1 0
raccoon128/keygen/1_median -0.5163 -0.5163 1 0 1 0
raccoon128/keygen/1_stddev -0.8097 -0.8095 0 0 0 0
raccoon128/keygen/1_cv -0.6202 -0.6198 0 0 0 0
raccoon128/keygen/1_min -0.4737 -0.4737 1 0 1 0
raccoon128/keygen/1_max -0.5064 -0.5063 1 0 1 0
raccoon128/keygen/2_mean -0.2885 -0.2885 1 1 1 1
raccoon128/keygen/2_median -0.2921 -0.2922 1 1 1 1
raccoon128/keygen/2_stddev -0.4186 -0.4192 0 0 0 0
raccoon128/keygen/2_cv -0.1829 -0.1838 0 0 0 0
raccoon128/keygen/2_min -0.2712 -0.2712 1 1 1 1
raccoon128/keygen/2_max -0.2827 -0.2828 1 1 1 1
raccoon128/keygen/4_mean -0.2034 -0.2030 2 2 2 2
raccoon128/keygen/4_median -0.2171 -0.2172 2 2 2 2
raccoon128/keygen/4_stddev -0.5524 -0.5533 0 0 0 0
raccoon128/keygen/4_cv -0.4382 -0.4395 0 0 0 0
raccoon128/keygen/4_min -0.1858 -0.1858 2 2 2 2
raccoon128/keygen/4_max -0.1895 -0.1896 2 2 2 2
raccoon128/keygen/8_mean -0.0975 -0.0975 8 8 8 8
raccoon128/keygen/8_median -0.0975 -0.0975 8 8 8 8
raccoon128/keygen/8_stddev -0.3769 -0.3770 0 0 0 0
raccoon128/keygen/8_cv -0.3095 -0.3097 0 0 0 0
raccoon128/keygen/8_min -0.0744 -0.0744 8 7 8 7
raccoon128/keygen/8_max -0.1061 -0.1061 9 8 9 8
raccoon128/keygen/16_mean -0.0927 -0.0927 12 11 12 11
raccoon128/keygen/16_median -0.0973 -0.0972 12 11 12 11
raccoon128/keygen/16_stddev -0.4866 -0.4892 0 0 0 0
raccoon128/keygen/16_cv -0.4342 -0.4370 0 0 0 0
raccoon128/keygen/16_min -0.0664 -0.0664 12 11 12 11
raccoon128/keygen/16_max -0.0915 -0.0915 12 11 12 11
raccoon128/keygen/32_mean -0.0172 -0.0173 48 47 48 47
raccoon128/keygen/32_median -0.0158 -0.0159 48 47 48 47
raccoon128/keygen/32_stddev -0.0970 -0.1000 0 0 0 0
raccoon128/keygen/32_cv -0.0811 -0.0842 0 0 0 0
raccoon128/keygen/32_min -0.0137 -0.0137 47 46 47 46
raccoon128/keygen/32_max -0.0223 -0.0223 49 48 49 48
raccoon128/sign/1_mean -0.4795 -0.4795 2 1 2 1
raccoon128/sign/1_median -0.4777 -0.4777 2 1 2 1
raccoon128/sign/1_stddev -0.5093 -0.5096 0 0 0 0
raccoon128/sign/1_cv -0.0572 -0.0578 0 0 0 0
raccoon128/sign/1_min -0.4666 -0.4666 2 1 2 1
raccoon128/sign/1_max -0.4769 -0.4771 2 1 2 1
raccoon128/sign/2_mean -0.3100 -0.3100 2 2 2 2
raccoon128/sign/2_median -0.3231 -0.3231 2 2 2 2
raccoon128/sign/2_stddev -0.8553 -0.8551 0 0 0 0
raccoon128/sign/2_cv -0.7903 -0.7900 0 0 0 0
raccoon128/sign/2_min -0.2566 -0.2566 2 2 2 2
raccoon128/sign/2_max -0.3234 -0.3233 2 2 2 2
raccoon128/sign/4_mean -0.2500 -0.2499 4 3 4 3
raccoon128/sign/4_median -0.2483 -0.2483 4 3 4 3
raccoon128/sign/4_stddev +1.9784 +1.9872 0 0 0 0
raccoon128/sign/4_cv +2.9709 +2.9825 0 0 0 0
raccoon128/sign/4_min -0.2731 -0.2731 4 3 4 3
raccoon128/sign/4_max -0.2056 -0.2054 4 3 4 3
raccoon128/sign/8_mean -0.1600 -0.1600 13 11 13 11
raccoon128/sign/8_median -0.1648 -0.1648 13 11 13 11
raccoon128/sign/8_stddev -0.6211 -0.6213 0 0 0 0
raccoon128/sign/8_cv -0.5489 -0.5492 0 0 0 0
raccoon128/sign/8_min -0.1368 -0.1368 12 10 12 10
raccoon128/sign/8_max -0.1732 -0.1732 13 11 13 11
raccoon128/sign/16_mean -0.1117 -0.1117 19 17 19 17
raccoon128/sign/16_median -0.1137 -0.1137 19 17 19 17
raccoon128/sign/16_stddev -0.4714 -0.4745 0 0 0 0
raccoon128/sign/16_cv -0.4049 -0.4085 0 0 0 0
raccoon128/sign/16_min -0.1169 -0.1169 18 16 18 16
raccoon128/sign/16_max -0.1178 -0.1183 19 17 19 17
raccoon128/sign/32_mean -0.0860 -0.0859 69 63 69 63
raccoon128/sign/32_median -0.0894 -0.0892 69 63 69 63
raccoon128/sign/32_stddev -0.4095 -0.4101 1 1 1 1
raccoon128/sign/32_cv -0.3540 -0.3546 0 0 0 0
raccoon128/sign/32_min -0.0742 -0.0741 67 62 67 62
raccoon128/sign/32_max -0.0857 -0.0857 70 64 70 64
raccoon128/verify_mean -0.4184 -0.4184 1 0 1 0
raccoon128/verify_median -0.4201 -0.4201 1 0 1 0
raccoon128/verify_stddev -0.0858 -0.0850 0 0 0 0
raccoon128/verify_cv +0.5718 +0.5733 0 0 0 0
raccoon128/verify_min -0.4314 -0.4315 0 0 0 0
raccoon128/verify_max -0.4111 -0.4111 1 0 1 0
raccoon192/keygen/1_mean -0.5221 -0.5220 1 1 1 1
raccoon192/keygen/1_median -0.5253 -0.5252 1 1 1 1
raccoon192/keygen/1_stddev -0.5957 -0.5951 0 0 0 0
raccoon192/keygen/1_cv -0.1541 -0.1529 0 0 0 0
raccoon192/keygen/1_min -0.4969 -0.4969 1 1 1 1
raccoon192/keygen/1_max -0.5126 -0.5125 1 1 1 1
raccoon192/keygen/2_mean -0.2803 -0.2802 2 1 2 1
raccoon192/keygen/2_median -0.3007 -0.3006 2 1 2 1
raccoon192/keygen/2_stddev -0.7879 -0.7879 0 0 0 0
raccoon192/keygen/2_cv -0.7052 -0.7053 0 0 0 0
raccoon192/keygen/2_min -0.2455 -0.2455 2 1 2 1
raccoon192/keygen/2_max -0.3036 -0.3036 2 1 2 1
raccoon192/keygen/4_mean -0.2331 -0.2330 3 2 3 2
raccoon192/keygen/4_median -0.2356 -0.2356 3 2 3 2
raccoon192/keygen/4_stddev -0.5302 -0.5295 0 0 0 0
raccoon192/keygen/4_cv -0.3874 -0.3866 0 0 0 0
raccoon192/keygen/4_min -0.2175 -0.2173 3 2 3 2
raccoon192/keygen/4_max -0.2377 -0.2377 3 3 3 3
raccoon192/keygen/8_mean -0.1080 -0.1081 11 10 11 10
raccoon192/keygen/8_median -0.1053 -0.1054 11 10 11 10
raccoon192/keygen/8_stddev -0.4535 -0.4559 0 0 0 0
raccoon192/keygen/8_cv -0.3873 -0.3900 0 0 0 0
raccoon192/keygen/8_min -0.0783 -0.0783 11 10 11 10
raccoon192/keygen/8_max -0.1463 -0.1464 12 10 12 10
raccoon192/keygen/16_mean -0.0868 -0.0868 16 15 16 15
raccoon192/keygen/16_median -0.0943 -0.0942 16 15 16 15
raccoon192/keygen/16_stddev -0.6109 -0.6107 0 0 0 0
raccoon192/keygen/16_cv -0.5739 -0.5737 0 0 0 0
raccoon192/keygen/16_min -0.0755 -0.0755 16 14 16 14
raccoon192/keygen/16_max -0.0967 -0.0967 17 15 17 15
raccoon192/keygen/32_mean -0.0110 -0.0109 64 63 64 63
raccoon192/keygen/32_median -0.0045 -0.0042 63 63 63 63
raccoon192/keygen/32_stddev -0.4710 -0.4665 1 1 1 1
raccoon192/keygen/32_cv -0.4651 -0.4606 0 0 0 0
raccoon192/keygen/32_min -0.0094 -0.0093 62 62 62 62
raccoon192/keygen/32_max -0.0381 -0.0374 67 65 67 65
raccoon192/sign/1_mean -0.4979 -0.4979 2 1 2 1
raccoon192/sign/1_median -0.5054 -0.5054 2 1 2 1
raccoon192/sign/1_stddev -0.6728 -0.6727 0 0 0 0
raccoon192/sign/1_cv -0.3484 -0.3482 0 0 0 0
raccoon192/sign/1_min -0.4776 -0.4776 2 1 2 1
raccoon192/sign/1_max -0.5049 -0.5049 3 1 3 1
raccoon192/sign/2_mean -0.3276 -0.3276 3 2 3 2
raccoon192/sign/2_median -0.3414 -0.3413 3 2 3 2
raccoon192/sign/2_stddev -0.8156 -0.8165 0 0 0 0
raccoon192/sign/2_cv -0.7258 -0.7271 0 0 0 0
raccoon192/sign/2_min -0.2780 -0.2779 3 2 3 2
raccoon192/sign/2_max -0.3338 -0.3340 3 2 3 2
raccoon192/sign/4_mean -0.2622 -0.2623 5 4 5 4
raccoon192/sign/4_median -0.2643 -0.2643 5 4 5 4
raccoon192/sign/4_stddev -0.4681 -0.4686 0 0 0 0
raccoon192/sign/4_cv -0.2791 -0.2797 0 0 0 0
raccoon192/sign/4_min -0.2642 -0.2642 5 4 5 4
raccoon192/sign/4_max -0.2786 -0.2788 5 4 5 4
raccoon192/sign/8_mean -0.1465 -0.1465 16 14 16 14
raccoon192/sign/8_median -0.1478 -0.1477 16 14 16 14
raccoon192/sign/8_stddev -0.4157 -0.4155 0 0 0 0
raccoon192/sign/8_cv -0.3154 -0.3152 0 0 0 0
raccoon192/sign/8_min -0.1189 -0.1189 15 13 15 13
raccoon192/sign/8_max -0.1503 -0.1504 17 14 17 14
raccoon192/sign/16_mean -0.1035 -0.1035 25 22 25 22
raccoon192/sign/16_median -0.1179 -0.1178 25 22 25 22
raccoon192/sign/16_stddev +2.1527 +2.1516 0 1 0 1
raccoon192/sign/16_cv +2.5168 +2.5155 0 0 0 0
raccoon192/sign/16_min -0.0870 -0.0869 24 22 24 22
raccoon192/sign/16_max +0.0198 +0.0198 25 26 25 26
raccoon192/sign/32_mean -0.0479 -0.0480 87 83 87 83
raccoon192/sign/32_median -0.0488 -0.0490 88 83 88 83
raccoon192/sign/32_stddev -0.4419 -0.4429 2 1 2 1
raccoon192/sign/32_cv -0.4138 -0.4148 0 0 0 0
raccoon192/sign/32_min -0.0323 -0.0323 84 81 84 81
raccoon192/sign/32_max -0.0634 -0.0634 89 84 89 84
raccoon192/verify_mean -0.4143 -0.4144 1 0 1 0
raccoon192/verify_median -0.4188 -0.4190 1 0 1 0
raccoon192/verify_stddev -0.3686 -0.3678 0 0 0 0
raccoon192/verify_cv +0.0781 +0.0794 0 0 0 0
raccoon192/verify_min -0.4191 -0.4191 1 0 1 0
raccoon192/verify_max -0.4104 -0.4104 1 0 1 0
raccoon256/keygen/1_mean -0.5133 -0.5133 2 1 2 1
raccoon256/keygen/1_median -0.5282 -0.5282 2 1 2 1
raccoon256/keygen/1_stddev -0.7892 -0.7894 0 0 0 0
raccoon256/keygen/1_cv -0.5668 -0.5673 0 0 0 0
raccoon256/keygen/1_min -0.4714 -0.4714 2 1 2 1
raccoon256/keygen/1_max -0.5139 -0.5140 2 1 2 1
raccoon256/keygen/2_mean -0.3339 -0.3341 3 2 3 2
raccoon256/keygen/2_median -0.3368 -0.3367 3 2 3 2
raccoon256/keygen/2_stddev -0.4519 -0.4443 0 0 0 0
raccoon256/keygen/2_cv -0.1771 -0.1654 0 0 0 0
raccoon256/keygen/2_min -0.3124 -0.3122 3 2 3 2
raccoon256/keygen/2_max -0.3228 -0.3226 3 2 3 2
raccoon256/keygen/4_mean -0.2552 -0.2552 5 4 5 4
raccoon256/keygen/4_median -0.2556 -0.2556 5 4 5 4
raccoon256/keygen/4_stddev -0.5220 -0.5215 0 0 0 0
raccoon256/keygen/4_cv -0.3581 -0.3575 0 0 0 0
raccoon256/keygen/4_min -0.2347 -0.2346 4 3 4 3
raccoon256/keygen/4_max -0.2657 -0.2656 5 4 5 4
raccoon256/keygen/8_mean -0.1073 -0.1074 15 14 15 14
raccoon256/keygen/8_median -0.1079 -0.1079 16 14 16 14
raccoon256/keygen/8_stddev -0.3868 -0.3879 0 0 0 0
raccoon256/keygen/8_cv -0.3131 -0.3143 0 0 0 0
raccoon256/keygen/8_min -0.0886 -0.0887 15 13 15 13
raccoon256/keygen/8_max -0.1140 -0.1140 16 14 16 14
raccoon256/keygen/16_mean -0.0912 -0.0912 22 20 22 20
raccoon256/keygen/16_median -0.1088 -0.1087 23 20 23 20
raccoon256/keygen/16_stddev -0.6022 -0.6031 1 0 1 0
raccoon256/keygen/16_cv -0.5622 -0.5633 0 0 0 0
raccoon256/keygen/16_min -0.0845 -0.0845 22 20 21 20
raccoon256/keygen/16_max -0.0929 -0.0932 23 21 23 21
raccoon256/keygen/32_mean -0.0237 -0.0237 87 85 87 85
raccoon256/keygen/32_median -0.0268 -0.0268 87 85 87 85
raccoon256/keygen/32_stddev -0.6462 -0.6449 2 1 2 1
raccoon256/keygen/32_cv -0.6376 -0.6362 0 0 0 0
raccoon256/keygen/32_min -0.0073 -0.0072 84 84 84 84
raccoon256/keygen/32_max -0.0426 -0.0425 90 86 90 86
raccoon256/sign/1_mean -0.5070 -0.5070 4 2 4 2
raccoon256/sign/1_median -0.5114 -0.5114 4 2 4 2
raccoon256/sign/1_stddev -0.5828 -0.5825 0 0 0 0
raccoon256/sign/1_cv -0.1537 -0.1532 0 0 0 0
raccoon256/sign/1_min -0.4985 -0.4986 3 2 3 2
raccoon256/sign/1_max -0.5022 -0.5022 4 2 4 2
raccoon256/sign/2_mean -0.3501 -0.3501 5 3 5 3
raccoon256/sign/2_median -0.3589 -0.3588 5 3 5 3
raccoon256/sign/2_stddev -0.7767 -0.7764 0 0 0 0
raccoon256/sign/2_cv -0.6563 -0.6560 0 0 0 0
raccoon256/sign/2_min -0.3213 -0.3213 4 3 4 3
raccoon256/sign/2_max -0.3855 -0.3855 5 3 5 3
raccoon256/sign/4_mean -0.2222 -0.2221 7 6 7 6
raccoon256/sign/4_median -0.2274 -0.2274 7 6 7 6
raccoon256/sign/4_stddev -0.6164 -0.6162 0 0 0 0
raccoon256/sign/4_cv -0.5069 -0.5066 0 0 0 0
raccoon256/sign/4_min -0.1994 -0.1993 7 5 7 5
raccoon256/sign/4_max -0.2274 -0.2272 8 6 8 6
raccoon256/sign/8_mean -0.1385 -0.1384 23 20 23 20
raccoon256/sign/8_median -0.1526 -0.1524 23 19 23 19
raccoon256/sign/8_stddev -0.1801 -0.1799 1 1 1 1
raccoon256/sign/8_cv -0.0484 -0.0482 0 0 0 0
raccoon256/sign/8_min -0.1150 -0.1149 21 19 21 19
raccoon256/sign/8_max -0.1563 -0.1562 26 22 26 22
raccoon256/sign/16_mean -0.0907 -0.0908 34 31 34 31
raccoon256/sign/16_median -0.0964 -0.0965 34 31 34 31
raccoon256/sign/16_stddev -0.3540 -0.3536 1 1 1 1
raccoon256/sign/16_cv -0.2896 -0.2891 0 0 0 0
raccoon256/sign/16_min -0.0688 -0.0688 32 30 32 30
raccoon256/sign/16_max -0.0692 -0.0692 35 32 35 32
raccoon256/sign/32_mean -0.0464 -0.0463 120 114 120 114
raccoon256/sign/32_median -0.0500 -0.0497 120 114 120 114
raccoon256/sign/32_stddev -0.8570 -0.8557 3 0 3 0
raccoon256/sign/32_cv -0.8500 -0.8487 0 0 0 0
raccoon256/sign/32_min -0.0116 -0.0118 115 114 115 114
raccoon256/sign/32_max -0.0973 -0.0974 128 115 128 115
raccoon256/verify_mean -0.4407 -0.4407 1 1 1 1
raccoon256/verify_median -0.4478 -0.4477 1 1 1 1
raccoon256/verify_stddev -0.4696 -0.4701 0 0 0 0
raccoon256/verify_cv -0.0516 -0.0527 0 0 0 0
raccoon256/verify_min -0.4329 -0.4329 1 1 1 1
raccoon256/verify_max -0.4310 -0.4310 1 1 1 1
Raccoon is a header-only C++20 library which is fairly easy to use. Raccoon signing scheme related header files live under ./include
directory, while additional dependencies (as git submodules) such as ascon
, sha3
and subtle
live under ascon/include
, sha3/include
and subtle/include
directories, respectively.
- Let's begin by cloning the repository.
# Just clones Raccoon source tree, but not its submodule -based dependencies.
git clone https://github.com/itzmeanjan/raccoon.git
# Clones Raccoon source tree and also imports submodule -based dependencies.
git clone https://github.com/itzmeanjan/raccoon.git --recurse-submodules
- Move inside the directory holding the cloned repository and import all git submodule -based dependencies.
pushd raccoon
make -j # Also runs tests
popd
- Now that we've all the dependencies to use Raccoon header-only library, let's create a
main.cpp
file and fill it with following C++ code snippet.
touch main.cpp
// main.cpp
#include "raccoon/raccoon128.hpp"
#include <cassert>
int
main()
{
std::array<uint8_t, 16> seed{};
std::array<uint8_t, 32> msg{};
std::array<uint8_t, raccoon128::SIG_BYTE_LEN> sig{};
// Pseudo random number generator
// Note, before you start using it in *serious* places, better give a read to `include/raccoon/internals/prng.hpp`.
prng::prng_t prng;
prng.read(seed); // Get a random seed to generate a random keypair
prng.read(msg); // Get a random message, to be signed using the private key.
constexpr size_t num_of_shares = 32; // d = 32 s.t. 0 < d <= 32
// Generate a random Raccoon-128 keypair, given a 128 -bit seed
auto skey = raccoon128::raccoon128_skey_t<num_of_shares>::generate(seed);
auto pkey = skey.get_pkey();
// Before signing the message, refresh the shares of the masked secret key
skey.refresh();
// Sign a random message and produce fixed length signature bytes
skey.sign(msg, sig);
// Verify signature given the corresponding message and the public key
const bool is_verified = pkey.verify(msg, sig);
assert(is_verified);
return 0;
}
- Finally, let's compile and run the program.
RACCOON_HEADERS=raccoon/include
ASCON_HEADERS=raccoon/ascon/include
SHA3_HEADERS=raccoon/sha3/include
SUBTLE_HEADERS=raccoon/subtle/include
g++ -std=c++20 -Wall -Wextra -pedantic -O3 -march=native -I $RACCOON_HEADERS -I $ASCON_HEADERS -I $SHA3_HEADERS -I $SUBTLE_HEADERS main.cpp
./a.out && echo $? # = 0 means success!
I maintain an example program demonstrating usage of Raccoon-256 public API @ raccoon256.cpp.
$ c++ -std=c++20 -Wall -Wextra -pedantic -O3 -march=native -I include -I ascon/include -I sha3/include -I subtle/include examples/raccoon256.cpp && ./a.out
Raccoon-256 with d = 32
Seed : 0ca8eea480166af15cbecc82048655cfadcdd63a41134a649f0dcaa3209e5a93
Secret Key : 0ca8eea480166af15cbecc82048655cfadcdd63a41134a649f0dcaa3209e5a937761bbe6334982130d4d48b2165efc8081454b4a212a6c39c053f722691c0429b88667fc23d8dd198081e2268350b284053a2f38b972e443c90e9914de05dbcffbdc7c05ee58e733a34678ebc213ef695a184bbcd40ef64a0ddd370ff7c1beb07e9878c3412b60cb046c41e30e522e882ac65904897307cbf1e89e1061ecbb6edb78b737d34e982804ff72ada131e8031517981a853b05301dbf8063609ff9b881d3323920b65b368f8082a779885a86cb817c7600a314e3b23e95658e86810ca2798ceef4955b8f1b0e7e4a2e157abb93e82968e1fd3be02c9ed9447e4102a2fadcb8c87ee5285d2bc012239334f03d209f744c0e981c92a03e61541a40a55216dd01530c88540e62b29fc99acbaf945b5d9e847c9a2a2d334bce1db70c8b8564566f19be56063422f0a04509b5b63e55be8db124fda0969dd8b1b43196d436fbac1b47d7a27f895e9fa16b51ca317311efc0ead14534910d047bf671c3a94e209aa7b1dcc8f9e807b74d7e2f09aaf6f21a6c127b0d5724b12f954589e55dc06a2ac87900259d03c6c546f7395e719be35efb7430917570faaca24bf7df6b705dec8af694d5dd515c14856b76c9d34ef34773210c5c636163674f5da5f3bc7f94b7601c603b8ccfceee64f350c06636a7949f84f9afa7e155c3be2e32f44b62e194cfbb6bbb5acedb7d812953af9b00a0c0b326840eafab51080c4888e8185e8312c7769b92b25605110b4f8bb6fa530b2bd7b64d5fb6a679de2e746f7131dac8920fac2d32be5f8f2ce2b3e016beb85bd53b384d273138e76ecfc8ae96b1e6cc2947989e2c202c0a02dc2ff85635924622da8248356d58997cb586929cd0342d5e5b595a5192151f37b3139bfd2ca2a4399f34639cc348538473e839ef9a4c2fb25e1785b1ba0b28d9b0ed676f3d2d2c8cc570538fc175ebf6cf17cbad5c26e3f26543628203941ace41ed029d23e66d84460e2add6a2d6239178dca904c5d4e8abeb06365bcfe4a1f138af24d3a0ddf69de70cc2091899a92e818604891bdac970bbc3c740513a6070580ab21abec68262be867df19bf1c8d187c83b64627252c64f89e54cb9ce0e589d6d0c2e59997d30474cc508190e7bc21a97490d61a89638e6607210916e79c3d3ec1704026cef5d66b842ffe84a819946679fb31b8ea5505635e8b5b27143a2714fb997602934d2b5173bb853cf59e43854d87a7cc81e598858955c2b991e7a94dc00c8d1c520f980f3f7d35e5b7fced73df9237d4a1168196e0ae8bb21538814f4bbc613239c376a18850de3150f5655e2ac943901728f9aa0097375b238a6be6902cc14b899236beb050754eb500d4d4cb89c62879ed84c852e4f7a659b9382c7426440e88348d04f2b9746951af80207c5caf15a60b0147f0f9a96c2fdf0c4a68b27fb8535639aa4563c5e3b885efc8360f3aae4ddbf0deccdbec341591582e21ac0214fdb42ae802f0ad7f7917ec5e043d7148bc09f8a2814ec982e804507352620c29e81054ccf7980f65fb949c6357c39419232c222a9799cc1664455c2df29b0c40f644f112c90149548fea5a793c1b9bd177d0939bfe063b8a5c21c91b0af1d010202dd795dad3287a2cad0c665b6065162226e81646059fa37eb0944c18fc5b4e506a25430420304570046927d972299903da985c23ea9ebb4a309c72bb0652c8e1d194a0596ee3132df285ed8e3b59e6cb6b47f9371fd9724b65ab1c7b0bef7e0aacdbbc8a2abd343386f9e67a61581313ddd8f3d5a40c4b696519033d6307fe9310b42a5da4360d3848a1949cacd3572ec5372b41710f62f48c4afbf450e670e793929d625db6fdf193f79428f55a7e5cb018003619d9a419e7edfa6bee45407c7f6041576e7c31300345215da48aa1ab7645595d2eb857425334ccd18d13e904d09c6bd322bdd94ee766d928346c9df14dbf7760ca6346145073c3ae0741bf44a6464730b6969a28b2b9578219d40bc622acafc70379031a57180b284d8c19934f87e0a36d75bdb0ee9e5e5444a70c449fedf81023555d6bb813ea3d259a922279b845aa3530ce7c583424b72007f3b9acc0b0163dd915e85d3a37d464749ae3b3a8a1a0174413f74e9d2f33254b1b609203ed7ad243651c53b8092d34921fd9db3d5ec0324a0c43cd6003404ab7c34bb7d2d11e689362835072f3fd3ad8d31b8b658000ee2952ed7a27f2be2ee41f7645f6bd38354b1408fc300d1eb43c54e2b0be8f204508cb45a5b3c3b466a25e19ed4bbb5e13ffacf40297c7e65cc36157c0978ea17d612a39b7a642763a58f554793670c5b9643e2cf7f1e0119d8e50ef614362f95f5e9628324088dd1a1d2dc3703449dcae2c91965f6463f305a535b4a2daa26630c0c171117e0cd321775ec3a6845b8702c92180c67f0a60d2ac5e42ebd508dbfc792fd4f2c7b94bdc0e80e46b77506e3582f5778f10a49cb6288563aa709592ecfbc902da30462d280f2e39ee9c2f45bcd00cb3411673e864475410951503cafc1c96a36bc90456b467dc9110a3dde56cc6e1b85406721c6d7c96088ce70316c21ff9b451b72b7bcdc910134b87abdb1287ee75cb4331fdb15de9cbad6c89503ad2b2d09622893f6b252f0350d849b020305e020a908235fcc5950e2233d2cd8fb1a1a91b8ce16629dce544c940c6b1db78c6b52cb9d7fc9dcf80ebf7db87269c90e00a139d94a3e4dc2d9d8cc46d1b32a289b527976bcf8449574f2ccfd856638d0359d52df2fdf04b0639d3f5ca2ec5ba7cd00f44ff5d8a754f2c2cc560b18c3fad2742f33d8a1cbaa8a8d585ea8ee18b4bd63be4e993a7dc5ed8f28437b02c7153dee7c383ac014c0becaf6284d9eb93580533c547399dd4a9d4b618b7f87bc6272e970e116bee51b5598237776b3ca62b17ba03e0af574568f79308b024b4770caba345d0c25c93070564da9a8ba683a03e8bbf29c6c0a4e1ee5ec9456a1abe218ff19bdc349ea1cbb64584f1a65d0a62f9d1c94d523722bd4e30b70d99ce8b90fda0341abd9d774cc25639dd5ce9748466c9a52a36ca83bfde6f26f5c3a89450e754d126d50c45d959bb012591ade4a2a5bd0e6103356da14291e66803a5a6042aecbbd4a1a081c88a38f672606e44c31c352e93cae93113582953fb5ec2004294ef729a1f2b4f02280b8d9406a60aa1cd18e7a46cc30623e0ed5c6e53460b7e80fd068963e8bd7883db77936ef8c7ab3e12cbeae0338209ce49d9f3aa085a76a9760d87be14b35a349c99f93ecc6c52a9a58da8781a08db71a4d77944f3880f3ed0b013e91c4a0613acf9de98300d4b25df782ddb021af2c5b60fb7c6d85b131eba56ab2d0dfc259a8d2307c8271e63f8bd903f00c1c7e7e0a844f34e27aa023ce62bcfae2be6958eb4ac0104e26f3edba3f30d99f212fc027797c495de02bc822bc647cb4b2fb4ea2967f4a03db96606afae4fa4716126c29f3b238216e421136384b7a19015b4ca25e3ed2af1b86076ada0f084dee134ffea4a06c56dfb7d6f244edce9df0311e3e858f3546ab5616e5750fad7be04eaf32306a156bcc5b49e664b874f8ba4c40a3a1514e5f46c76a557c49e7d94e16b1c100b8e0566fafe36d963089594f5f5debec48cd42219b3ef42fc628c0e912eed45f17a4ee57b26dc1bc6184b37814f0a8eed8d479c7cf9d8f5b486788347470ae17f48b9055fcf084f54fd8ef484b7e3bd030bbc0749513e7ece691468ef0a83bbca847f071f0f09e59b91a49e9d763ad40b5dcec3d7d13a9cf7aad498699848dd0e1c68e8fc2049670508bcd6b21b4cd532f01e5077dabc6f62d4c69bb964240785ae48305f1a9dbfea047791d740cf858ce3f455bf90452ca0c828171b6581e89a33edb3a4023384b0620edabdee14887cbf08d8330be5fe33f436fa0b26dd4196d32cc3251ec740373332a1941311e4a09dc677293224aaf916f0e1dff4eb7c528bb0b84cafb7208413729b17aac441df021ddeaa9a1d05bc28be8d457ca21a9dea12a4daf5c9314b5c07dcb9924e6024eeac2a0863c911e5d982a2f6a5f36107461c52ba59486201d6b74b03794bb75694e6e566f63a43d5205d51433c1a190d1f76785a75f5c8d3ef5de58ad514db2125ec2034d475dbb5ea9a71a0e0760920716cab67688539b13fd3a3fea216fb943b997df120a59c2e99a40803ef9b02448e35bd2a3bb3c25e8de3e8777c597026ad10ceb97dfeceb9cebdb2770e52b9f060a38ba8104da3a194e7411044db4ddf33c759b95dc8f807907ad3377f09026a0e91a2c49a15c03111eb9911f59176c819acae2a4a5318b321e8c665a90a87e238ec983d1993f24ea2936a891e8e242e93545b63a248e43c382fab6317ba42a0d3352af0518fa4685d714ceff411d06cb4f7d9e1535fa39061c6c0d99cbd464c63409d2f49f51b3419ce33c014b475bb2a83ece86f8188f4a00c768a48ddfae36e99877328b95e7f0c975952636be038eb4d8fd4647d8a2d810475c5d799438b1c93859e0c0926ac4a3ca59d87db5ab4365a3ee2209e0bf4aaa73b636e187bc79b2c83d10036ff7241b800e7210a825b91026f29a93fc768296bd9b50192b3d47c7e0e5acc38b067afe50369f98d7eec78a2284e6c0e4a5fb6c6a6160453e47db5fd422768d522b9339847d01b804f00e419de970394baebd988a219284c4641fb783ab643d844f222dd9fcbf13c7706d6e4739cdb45628986af35e7bbbc8eeb5de39633b53a3adb405930c58d830f5d0f0f6ae043ef364241c7afe5dd6a32b4c8a8f4d90b71e05999a7884867224e989f89cf87ba8869cc803af2db3354b310d2a7e335198152289e01a1504830ae4c416270a71cc1665f8076c21bfa35bba16ffc4e4eca9873bf0e1165a93450a105f9c02419605e296bb7cd263fdd796277ff1357debd0d9e190d73682b7736dcdb2b4b3e00b425453a669cc2455042f964f1c3b8e2d97fc09264c299d6ea8a59deb0e06372252b56f5f26b579b9b6f62a10e605a041d32dd42c5ec6abd42f0cbeb27703e0fd0d9fa34167073720cd65074492f5d6aba70b0e7fc5815737c131d9a1da9a6b29689b4b969179f5366ba74d8ccb29bd12fce73c44730cf26018534ed4ecb987dc0b15caf3822dffa7e16340d504ec28f565d497b438c91e2b0a814863331330cf0a1698def3c125e2cabaea9b8d1f93a7c1eff46bebbb2f0bb9782788db326f13e70ad0aeb12fd0a2e342b4d2c5d6fa861ad906d3f057287124fe99a59d5fc2b96527593c0bb600a06bda3b13ec7556dff204fb258ab99c5b5da5309899df792576186c005066fb25f7523502aa23fb21e3ecd4d4e98d2dc5782560e8b7409089977466eb8a977c8aa051291760e82fa8255a201ac4d455e16f8a0ea0046000c97202a9620a5ee121a40e404e14372f6320fd179e215d27cbeb0044de5405b12c863f50e1e6f6825ec57b3bba73cf976ae71b3b6dbdee35f22053f7cad811954c895e95e541c7178776415300ef2e617c2105746a3760c60972de3e9a2042526b082936240ab91be9a8ad5d7383309cf270fe28915fb0e0154fa56f056d8c3818780f0cc6600b64de32412d09ea28b118e3549b1776e2a03fa908703a4e7da001161495bb1924e28e123f0f0a27b001671ec037b6c558967779e722c05cb2b678f7daf220246dcf59db8a01e57fc19131f2f8d0f166da514d25d20c8cef275edbc5892dc1a3a7482c92462ce64577a85a71f25ea4e9a062108ee19cfc5d7a5870828bd75e7ff41cf2fbbfff4b484b0e6ffe52b3360d6738415cad9e0c5eb91284f4a0252982e4863c1240395af098cf9b2500f3effbc17537df2076a18a9ab46cbc30849b53750955305f05977d239472dd060bd4d33c9f4d452760d6368b32ff117a7c194d902876a5fb4a7d6d9144daba6fc1080e010fe7e5faf0d563ead336242d5ec5aca60e1d6f2689e80923ee12e50e2bbb9d0fc8f287acb4e996567c952a2ecbdb3245adbfc9d50218971121a13bf725657b9d77e11ce2ee9165e1fcfe44f8ed2997b5ae1cf464b2643e406d283d6c0ad56a6f49fc741b7bdad55f7f29cdf7a4d7505459f2d90f3a804f498d9232ac5d3ed0b375c8ee2c21ed64bd78f7b0ddf7733dd77ace516d77b9fa08ab0bee234ea9af4e36891e7833a919edfb67f4fe9e0ab5634de8ad4d119dc94ec7863fbe9239322c775c2e6b69eb2b0b3e0c17aee15039be91435d82602f1d78da5d8c139146a442417490c8599c172f9170dcbbcbfffe80edc5be657bc5ff645aa915dd03dff514504228867a0ff83a54d824097f5768f7394aaf368bc8a48f60aa75975fc8ad4898855018ac0328abd26b0ae7d4ff7d518d3415f27c5207f031de3bb7b5ebde26a743b62f87cd23ff2bcda9ead91aa0218f34bf673903fad56c61329c82158809cd206a5a7dba89d0252d911de9983751d9558caff23afa38dad397e593b5cb1fa2a8fa95348a85c5de336a7212ab59667423428ebddf9c0787a9655cad394a17147a3e07ef5dbb6926489f302e0afd1ef6d50f6b87f2d862e5bf4a51df4f34917da68b947022cf76a1298945580de178d0fb5427746e659e79a7c58023b58da4ba67e5e147823956a0c29d38195c5f776ccdec828bb748ae5b2830802b0e2711fa7dd94275556bb02963ba76ed6361d26288feb6607d7a41f781070a06853fb5d88b46d76dd8505fde864e1566c492befcf6cb504722b4387309a0ec2fdf85dd14c0c56f0769c0fd5b83c73f8c0fbec57fc13fd0f192af85ea787fc55e2b4e0a5ab0ab6db165ed93b7378d17e3c827611171401f4343593da8035ae51aa59489aac6d680f70954637b8986f1bc78be540dd973ace018a8a3327faf77e40e809ed31503f0e23713e9e1f890b612aec297534d4b5ff32e1460aeaa5ee1ae1f0270823f4ed52ba504053da14c6d8ee859037bf26693c54b9bedc800370b14d8d02d879dacdb524a7d6ee11806f29d51383dfff639d75d6f8d3a9827e814c3b3f0125a67fc69e6db1579b750c80ffc5561d46ccb18ec134e33f960d3698822544a00a0d460f3076f4bc36226b78977765f0fbaf6acdc1a53fd105da6ac73e82e899a89d789987dcf3d7b9e3343dcb4e5a90770678ec4b80620b5975758fd7a8bed3db7bdec9461914169f5411cc1de7778071814ed1a61cbf10f90365b0e16a96e04022e7c6183190da2e2f46a3d6b9c253b6f90c44cefb09fc01d10af2dba9c9cdf3db0a1c0999e02b4216d6a95ecfae4d5acbec715f95224d509a5e8db514ae4f551c4c5013a92dffab3b89b66e666a0576b4dce27554bc2eda20fc300dd56534712cc1a8dff2ce196309349ea45ea709f1aa34bfe726ae450f508e0551bd0629acacd1118487c6033fba8fbb9898536ec8d0e5635eb57a0e82649c7078bb248a6bec060cd06c08ae4401a1a4fae969257e852612852f231cee73f9e30f23a5584a6a3adf805678e2b88ebc5fd8b37c1b2dc121b2a836aae3f6fddc7fa6b6ff095dbe92bf779cb91e424e7904f97c62d1c14fad9fd454a8d537b31c0136ec472089edc133c1da99658bb61aff3dabc0b85bbb158084e1242909cfad95fff08ad06bae399d00ec6a2a7f3cb71a135cbae91cf14506057e14d44b18e6a2b45039ee1bbfa691c03279572b150017906afa1245daa55d17c280de5b77f638f0ed40e3fbad012137178ec26f27db96b5ddcbdf8c460eadac49c7ef3006d74faa168d3c60de358ed259e0a707db768bc0ef13ad2ea732a36822ecc29f641eab4ba20e814039721d0069a63cbef93f2c60786670e5fadb40d004841ca6c24bccae3e91557e63ca314453ab132f33acafa564c8a02d38b7f1016b4be89cde48141933623dad15c8a6b9189b8d4f52c6a0c039067704e9400b85595feb7a86fd8caaed4921d6732071530b6b4dec4ccab6948dadd9ef97cb730ec12a3f81fc9eb6c6c270db02453eee68cdb3a59da5eb2f15e659c92ef2c36a78e9a8af596f4643c0cb31df5e47face5507ee67cead6bd2e58281eb30e77499c7236f40d148a6c696f3199f920281821bc916fb231206fb83f65764782ad0c04313dd979614887c448a786af86340d3046e1af7764ffc0e327235e7813a4b37f6a9eac8b6fda366275804fccf1193f9386efa789ebfb67259e6c084487c8ba89b8603a39f7fa16e2dc1fdd57b59d5276347e9cc9793e4087974ae9ab216ab6864df4c8dace97fe4e0c98f65157ffe1ec98e4a506dba1ece701e2a1a2860397da9dcedad5031a01f10c34a795756729f84041051ee4dcaf6a3cc69493d8088afc8d955dbf42e5a0a9f011181821a20f8eb0c104ac240bdedc52777acb672d6301ebd216e8e2ff22034e034295a9c6597056be78c7f0583d5d033c30b9977f656275c0514f4d91af20310733047c72eaa13e11bec4af601c337417e20fcca217748d963a1f99f22c59d4d70a115c1485026a08f4ef020c868708f66e02bc2e9240c06a1725f8ac58a2bcdf60f04723efbad3ec4f9bc03eb785e1b42b7eeb27c8accb58d07dfdd231a17c852b607b1bc21197b0f356309421dbc1765ea14645a8005872ba11818605f79f7d9577402461254777e8dc6e39835100bda49091bf17f23f4f1be9c7dbe05ed652573f1432b846b41d5c394705c901ad4bc7b874cdea3f9398698b76deb426af362ff5f05c39be9f593a9e8570e7b972bf181256c03de691d7940f4f0bb83732d97fd881a83dc6444dc0be9806da4c9c31e09339f8deaf64f9ef0f3717b5496d475d5b1bb0bdf3c4e4c40a905631d4abe28341ac0eb01432256131734d42347b8158ab5cb324ba12d52e7ee1cd9308204de89d6251e417c1c504d3552b77bb7e1d3e667f498944ea998f48b38ea5fa53d441cdda8fb55f45aa46cb359fc945a25fdb3b1ac7a1b5f94645219fe6d914b4626d7fca172a2ac7cf6b1dc18ca9b9bf44b66d074de45704650153f0a19923d6dededca4b57b778335ec6bfd8256b7177dc433228ab10868e48c0c32f3cc995e3f5dbd80bf2ed3356e3192a803c25022f90264d07259e0a4994882de515896ae053e9123d8c86bf086f2fd892d8f87c964f7d05f400e262820f43234d2d4703f6d9aee7869f87ce44ca96b5d52c6df4f8aa6d2ec8972001fa6f927ee9ab52d2fed7b0f6c81056e5b30ca5ae11ab45479d330050fca69b116091af070e273b320f0057b1dc24c80f3e61686ea3a3814d4c2bdf487668b50696899968941e6430b2ed67844b6c7c3221e4a5826632299f5961b6582dc7692a02bd0c8ad52594769fecaa41a13eda993d02cccc467090a3eabf25d9dda6b36b1b1b1a4862e18d8abd3e3527274b4ebad95fc41702e9a3491561f57c4af3cd4c6eb224e0b5ba5815cfb7fa544bc002d4eebfd4a62536856ae0b34ce05265d5b9fef3b5eb70fcc2b71b747c09d0caa46cefc14151ba7b71b325352ecf9c438dcd6bbcf943ff4266e4f1970075cff5b0741ad1a999951ba7db5e39ce81138d1826be736fbb033304c129624aa9af80fddfd1d85859bbe7c8c3058caef2b66f3830936ff6d853003e5d0340a5da75c7e8ecfdccce082c8ba8a11e2343e8537747cfd46e6475cc3ee686919b4cfd5adaff28e9efa84fce39812e3ede59fcdba768bed645ec2c8622994c195407189b84105a11648fb6c6f95498f3a153bb3ec5d6badebd023c67986af1c1a7f6003a034d13c25342b87c07da2c4e15d6c38968a42ed367e5d19a168114698a00cf3918621b899257ae24c640981d30814aef11a94ab1ca974a3f635921b0f68bb0cac2ede3230b8902ce67ffbc334e2aff98dbf1b8fc54db95679ff1ecc6fd65cbecea10e3ce76317ddd2990cdc6d653164e3502cad3b275db714c66332d83faa2bb24c1f7cb800386df642551a4a3d9c2b6c49102b4dfe7e0731ba36284a2006f8e86bdd5a893f82f92bb167eeae09d658662aadd286458f41979bfdb0c4ae250f30c82c79b50db4cde9c078dd8ba1c94555d66c917bb7498d3ffe45e9d87bdf82b8d37110b641d780a76dc1e5083359d435afe93abb91189f75d00bc86741ce8cd4d88438b71f85ee6a7992be10102948f343253412dcfa1e4b6c5700fde51c75c59568bf226d3fb12a040a57b19be40dd742736ff9d6a1758896176368736a45a4d0e907bf77136b3b5c688d76aa9accc2a629fb0aa313f52bc24408d87374f6552a688d58b96228cc71824bcd541267729c6df103dc45e3e70e5ba32e5cbecfa9824076c894fb27e2801dd11055f8706180868b8398e713ada34bad424cd4072bd48542776364a892696edccb3f76404c77b566ca27380a314958de2151f35eebe14a9963879bf637fc88e79eb1d6d56356915d4ff1a45cd142047cb0f104295ec39cf57e901a08a10881b83c563922ffb4cb8d44edb8538d57566bf82195bad31cd76348ca209ca77d21a7f4a7b803e3204bbb74bbc4aaba061b60ea7f981acbbfd0f15d301ca901acac7080c797202f1649ab23c17d7b05f494dfdca7be8565959cdcd65a65e0086a7b2fe12d7d6fb70052f17be3146a6e9adabfcba38eaa9cc558aab2ce7fac61bd47410bc748fafcfb16c514222da06db8039b9b87fc38093e41d5f7cf41642797fee3cf44801bfbd8f20794b03830c3bb7a54a1f8c7b2649a5b50d0b78291e18e940eac909ec470d64054f912add5b66f8f2ae0c5050f10cb6c6d2b079d84a3102bf8cbef6616b043e9b5411e13e35c87085119591efedf1e6bdfc028eda3d061b2cf068c684d7ceb3f79b922fa82e21ae8738f7fa445a1bf3c6fd87358c293a1d1949ed627f40853271dba7d7268726adf42ec3ce7dae3b2df7e9c630ea14fabe80fedfc5386aca08f09ef8ec41ed22cbb94fe83da0bebb7d7eb21cc345805004bf1fb5964590ada8ba49cb0c3ed51692458164bd6c5f6e7f80de091e86451b1d68c23ea55a2f3bb1e55a16c30eb594b001edde89f9701575940cc9594ddd5abf0c272f1a9c035cae9efa4333af49386258cd26025fe8cd230a0206f20a3b54336b2ada50575e1ba14e31b7258694ad8ed29b937c0cb0980581959245347ccae7c59732fda5d485192c1106f700572714b1e652bb61dbd94e8186bba2b6c1f4ac83d7a504bb02088588dfb6c924876a336ae2f4fa64b90d8e8945f4490205dd64d126887cb33d256bfc5d2f2e5728df552cbdc463e0a823e270e176c8fcfbf88c1f13cde37be964ea9e51719d0bdb16244b7a45bc704de23ce5f88b7f60e5a2e2eaea5da35e922741c1dd394700c332eaab1a3cefc501bb17a75d8302655512d17e21dcb5c5eb03e217ae9917b0ef1921d70ab6dc93a9031eef7b58cd4da030fe426068c3d498b1e69b271aff2d990d15c74900401bcde6606059a795ca95dad70561938fa7ccf3e99cd212619f25886803755316a8fc45e952137017974fa5ff684c5dbc449d36cbbc2a5facc60a621525672d221174e2b444290baf0550cfb7163ec648424d26dcea6b970934b6d6d0b0b9f5c0659525db68b3a1c2f81d0b361550a84b8a73396b1cf56e3ab39b96c373f4561e0898d0b346ff0d2fd444aa59cf3adba3cf111f4bbcfa5ab5d723113039e7b6f86e3453ba127821660642d4c1293479fb084b9f97359cce4c62c4d21369282401fcd8b36314cee3fd0282308e854c4cbd8e0a5907e71316a275e7829a729d6ccf0196f8d6c800c043ca0b7bd00826269b504342a33a4e012a37177302f5763101400260f5af6139c24231f7aee28fe07c3a5cda93acbc2217a94fbe48efe3516fdb471323e5e27c4c017e92eb5385ec71d40592d72ef63614b104b6002da8ed54cc9fce52b2d632343725c919ed9925093a805c72a1d9df8a038fcfbad6564fa587dbc221ba55d8752b792e94b74b30454ac237727c6724b75f540dfffb5aa2ddcdfa678a740113f071d4d48729e3e6e4dc7e0248f6706f80d53358295f38a678bc7f7e533a597b130f6ef471be0407cf281d8bcb0c132f16bbe68cf78aeda0122067ea102e0b587dbb82a5e822a27208aad14fb8a7e060f38851b4c623eeacb17cdc02d7444a7478e12519ff76d85509c3807f713a5f5eea6665ed9049a0e6909a04eefb596c51dd7b4253e5990587ca44dfdda30ee027905841839cf312ab0942bc8fb8e9ab36d5d9ce66bf13a7fa779da8e5002f980fc4c91d1e2b955ee03bb09b3e03787ccf4ecad7e946bcc3203d443374092f95d18a8688d9d02817af288f1a971c70ce9d773d6740a4a7410d0e7e24f324574cf34b16123f94fcf02c6304009fbaeeed20d1dd4658a374f4dc872260e51c67891fb9238353b80af3b568544562f1addcf0ede9a3113364abf2f8114dec79c2ffe11a506ae2ac4aa8e71eec9a74a032cffbc11bcd4f4805f9cd2c4451d331933ddfb487dfdb833fd15670e938adb363e17a8bf247bfb795daca662e81f825df2cc06d4908e16b15e0f477b93d04bde80919382e909277c0a8155b8aa5fc934e3c6fc4d6b375680ff21a5a04ac937aad0cdd497e5c65caa3be9729daa668b9200ba1356b57f09a4e80c0a4da8b8671ba709ab38764fd0b2fb24dc21246bf560093c24455f0cae9d5d235951af0ad9035e2d2ba5298a7aba67549dd3e1c3cdcdad90d31f7967171f59bf97fa4a67876870375a2dedbd519506beb7a8625618b37b309af2d071c44221902f455c16c556808ab37fa6eb207c10c669fa3f530a659a5dfb354c8f1dd0977ab8ab02b3dd4bf0095887ec6c75cc20672fb5b27678c612a84e893c82e1360040b55062c04059a3d7a6c97b868d42919964bc4d40076294eb6eeb00f7d40d6adf61a080fccea8e8cb08bcdc2ae5f83f6c7b594f7714460c2e691cc37b1ef71d86ec15bf88dcee6bee681742327d882877e4b267ccd4546715a8c0e27214bea215a73cba5b9621575176c290fc3920a80f135d7b369d781e9c52e596ff2db12950ae2da8cebac62c6bf77235cc347ff9071138b96e11bbe609bf2ff442775c71e464436db8e0f8b55144622ca2f7d22e73df2f0cb0962731a2f86acba73effde1e4115329f489888248198ab580da331d3af90e73f65df9fae179685782eff221256a17867f6ba19f12447153a87f546d39cd4b7e54c61e0b415c202c4c9e4eb34f6de1d3dea5ed53f520d033df6adb3bdde3a30f21f731995276724749fbae2672035dcc0bd0f816b015ae8b0d0707c78a9a49ead2417345000b9ce4c1f265000e52cc5a591b838b144d0f878970ac7ca1f22dae24788ccd3322ea2e5592f895f5f7c6a8cdcb81dfd8dd310048b7707165aaa97e2bc9b2641f4ae92807be13c5294aa7b543fc321518662d4b08eb7258a3e09466d0070d7e70b25aa29b693f98f9c6c3c27a1f81da942dfaae767bc6243bedc729cd6245160041fd34e6c7240d0f300257babef742994e922654184ac02ae0dacbd7833d38cc6fc2648cd8825a1b183aa070ddf5019eb32f1813e532689249bdfff24ec598b0e4d4050f47ff5bc82f343396a9909aae860e8204bc08b59f28b5437671a6ad79683c4c113d7414b88cc381b88b5a0762f8a648dd99e8f86ffb6fe9ddf5c706f2a5281a2d84d15319d3068511ecf7fdb09e08a072d232b4e21bf224cb237fdda056fca831f5cf6acee0209a3f9e23b64afc6b6fd7e3fddab36afb45bf485e2094d476f9b449c3ae1b8af9a55e6791ecff0b32da8954886dc2d0ddf685b5ae56d43901fd2ca80eea26bd2c509ddcbbe2afe26eba34b9eb4ab322897c4f30a04758a059356ea596b79d9588045c0c5cd7ee1b0bf7e1dc48c59d07aef2198c844659805d17a91268da5498e126670989a0fb9dcbe3f971e9d770603acc21a88b5296c7b6d1510e079d67f3cdd7a3b3713cb216afde39cba7b83f3c3bb7ca4a9ec05c658bda5b6d2bba84d8955d5266414a33b498f3713bfbbee2dc8ae328520e0b2c0fa52d032dfd6c3acf94181d1f06e54f1545e1b6252876dcf196465c1fe08892b8d1b72f16c7d5f96980ddb5061c30ce5438d9b8aba42c5045b3168229c608e24845740d2ec87f6dfbaf86dd4cefdb44eaa2c21b1d426d7b370edbf7f1efd02d40b3a129eade52d257aca13eeb8b98dc86596ecd9be1bd7a20041a233c21491af62309d93f96b858c28e8d91715aa44d5fbe5f4d9c2741e6e2145c6330cfc096cd661485b551fd9c79f280505289e5c6c5f21cdcc125af50a30ef80d34cc24549870d709cc8faf0003708a5d80c7f81bad136edffad01f45da05cb4bceaf7b1ac0757eda03be0e89fa574fb97b2adaf1d464b8e15341dae4628d6040ae1fa2be7c28a738b2a55b419d1fdaffd0edcfa91f5a54e09cbb02d4b9e42b2fae0fbb3946780fc9d812e4dbe0951cf312506bb5bc01a60c65557b11b6e2acd8cb6126509531de0fe42860a29659f2546306bddb9f2f9c46e2a67a445d9506b087d0bcd3b5dfad743790a5ef5191b6c9d3a0fd06246a0ae930990f51779c3a86db373405d09eb073b3abe71959855c85831518c718bb36f5edcb3bbade5cd8f4c3a2edeefc07bae2f52e60d729aa8ac29795cbe37aece331b623275beac7dccbe494e1cf074823ab893bc70a0244a27c65a468b2a52a9351b4e3792f5745c60385c5c8a70ee72414e6ff5dc42f8dc30cd325929c416542c3d7a7659d86c3551a4d3ad64e9125cc160d6b9e496b10e30289808f0b9d78ea0c326b781467d2a1e75bc275504ccc19768106f5f78df2e77079b7b455dd56baeda08f9a73c6d6e028ddb1863e75a4b43d9abe41320edd9d395eafe35131b22f018247b4d5698aeefd4cac75067a4ecfe4ffe490feba67765b4fec76cbaf17aa12d228e72f9627b88236a6245edf54ef89df111104d5a8b119d1a7377d66ec3fba29845d76d91d8bc8ed60a3dcd9389a0b47c5e7b014a13ce734913e8fe92ed4d70d7966465dcf15a0acb84219715f3fdc7734882781503106c9cf51f6c41eb89e396704c8eab2d248bd560ab35797535c97fa5a084a634f98b1504dfa0fc90dee483371b17ab05125df3d97f20d99ee9cd92d7b855594f2f0cd21e4868d012f4d488bed196193cbb8de371b91550f73104ebc0c4467c4de560830de1208912607dd50673635d222953e322954a6b439c335bfa7bb8c757dcdeb60ef3c35983a9895dcbb5ac784f8a4cc0b68bd55c98c4edc10b327aabc3bd36c8133fbd10f80dfde905293e49ec9dcf180569f2821ec819db903f760075905b5e9494ddb017fab70c693257a49c5b61467f2eacea2738ae9bbdb830f1c25df896f8be484c3b888a5aedf8a36ce68aed712c76c209405eb3bf46b1d7f352d7a80ced30d4fc4d9a95ef3ecadf082074e09345202a4ba37165b2f6b0290ea07c7480c267c8212e177c6f1666025fad8d078df6557d8bc11b70820f528646b71dac6bb284a8a351d861a05fceae76d691dff075e17f9fdaf35833394f619f6957db12475a345c5cd48b8e915806ec7e4007d1b395cf809105fc3a2f1ba596b8db33e251c19d132afa0e892d7ee6d9f582064cc535f91cde80d8988b62908c76f011b5c43c02d19439e74e922ba529e7955d7a724fc6e36abd83e35a118d4dabeaa99290b74696245d3cf73c3b7484f5f01dd19fff61e64a81783cf3f129b1fb75db242f7c327adcecc7e451d4c255acf823af9933471ca859894dc6e0b0dea2a231338d007adc5e00229ca2a55b27a9224bc768a6d3944a52e92d1ae8dde55b4988313d8996d5b94cc21f20dfba4f13e50434b39abedaa2215992a1f4b57fe30780c0677d264f9fcace6183d9ff99cb209e00b3119932ad03d6e2c2badf3863bb6d5aa2a8725d25d352eb58279d227b1015559fc14e05acaf53d3a4cd969f3d451db5fb2db86382369f2cc89ab68b98983c4e73b9ee5b4c000f2a9f2ab74dbe0c3742ede00d4ef0d7ccab3d23dc9f910ae8fbbc13a16b102f34ea01720e4869c0f38a81267e89b201d6e6230a00a2e459d6804d6c2b7324434f3cd92d96e4a6e310600ef4638a13f723b2d29c9ef4f83d1ed2a6ee950aa37ce3ffdcdc9b572ed604731084c0a4a606f94b03cbc0b20aa7c3d996f7c14e89c69c7c22ae00d4361849cc956c11aa1c6fbf90b7a66259532d6da36934b22f89e1995566846db84b5f84184a28fbd76e8701ff0d0bf06d57bbfe0fb51adfea4b85d551b3e634bd6baf8d9225d235947c3c2bc852d96c7a4ab5cd3b018ca470ced61582c0719995da39f417a9a6ba581805ba6b4cef89b859917978004732c4b1ae96c53c3bdfefec437889a31892c9fba879855c80d582130ddf73d3ed8538221da3576b4a14e3fc8ad25a0566d02e4cb9ec61fed461288c6f39c47ce49f60909fb06741fdcfa47a30d8a9364e253334364d61abe6663df76c9aaf7f6a67fd6db0cab20f2899eb6241ef4a1a29935c51a5b7dca16cafb66f9bed384e6a6c8bc10c4f6251be20b736c304919b40c5d8a54d0c7dac82e38c59854ce81b8c44a7a0deeb1494cb75b1a88828f1786d751b683d2b1de4ab9ab74a7dbf9f02b967cd77f799e4174802c62e90a1ddd3412cdd8c17b027837585115d04c3a653ab0f920212fd38851fd5285701102bfbeec81785368e09a0fb32c6964166e7a61df1ac45fe76f539236e9969343b669ddeb05897dba6b0596eafcc8009ad9d23b447c3ac1fb35f5b0203b9990cc6bbc9e4aa610f0e98973779dc6b33c871a0fe232374fb09203f46baa782311c8229fbf7072454308774a3d6801455f5fa7ac9a3ae073e5fd296a16db76f2ae67e6d5fd97408465dfbd0ca1ca2e4488d3c282b3ed8711f50af3be9e07b8aad946ab1639078b70bdf8483b330827b383ad764905489c284ca79c8893fb77188040331ceba8fed723b3e8979b678b7333d62e2c65768d42fb85a6595281dd3600c240f8f091c5ec2e73be25179c1474f0b3edb52ca42e5006afbd7357ea91492b4a02537122c966bd44c6f298451d2d7be68b46e5da849019b614b260bb26850b550a2c9f7ac7d9790974a6ff90e043b02990e99e7c250376efc69ba384dab838ca3e7076c2eed48c4470a696b6bae104270d3b36720ae1deaf1fbe3525dae376640b658bbb3ab186cf6cab4bfdce69777f2057fecc8391d6ba83a523c9e6b1b578f484a35fe2db92ed7039d61539b2b6af8798a5aed517c1b1f3bc3ed0ce7d35a52af7be1f2f50081f644ab9c3301e7333da2a76529a994ac6b446fb883e87a2824dd14eadeaea37570be92d71bbdad8c918f43ac7a23f6c2b1c7678bcfd8ebbc117e978f14eb9056a07eafdb64be615577704faa5cb86b07b2953e6e6713038847c6a3a1edd0b96dba67ecc604b0a251cf739fa1145546b6aad030b3f9a0f2a8ab038308ab160a148f881ec31fa8dbee6a453aeee43ff1b999764aae2450d00f6718e6caa93c1d51f1206b9bfcb1edd871410d655e23bc4df73b69e33ce57f4ed71d19185861d0e0d8040181d4ab4efb6a51981fadcd81346a76211b2dea2a8d4ecef2fa2fe5903149cb8a92d6a7cce7dc9826e2cde8c48646da0da41d28c51a669330e327f02c41938ee4f2ca9797554be3e2fe465e7c1f98d9181b8d4536c397a1984e9ea2a4b27e6e3453fe57f23701418e95c9eba3476db90766d56c08184ce33e8017ca52f57b470a2173932ed8b103f2dafd18812e3a510ff599e8daaf6a7988eca68c27d0883fa452d69589be78b1879334d92d4bdb91c1f12e58b7ab39fb12ed05cdb50c0cb84bbdc1ca06f4fb9e543454ab5fdb94c5133060a28a05b2b32cf93388c1bde092e774f1f6a28f468d66acc57a68bf8eb217c2ccd4171ea8049da92cbf3bf00bab7077d3d8c123fe95d217148fef0ce3a51b3a798afec39cf5f2b7c62b90c2435e8ef1077ff729ff7a97d323a16a1b96d02b79618711bc93666db80786c671bd2e3702c262f6cf1a090e2b6eceb133ad34fae8beeca643822ca69295575df4145c97c1b3554757f5bd85a94aa10d042a0bac262018ec40c47cb27a172fa8c166b816d20e344f308104f4e74d4ee8924436fe40d9407f65c603928c4be9706f28f72fa877a9ed2a88000845d81b0c728cdd0e133bbe69c394584611eea18b82c8dd9bec821d72c2c88bb5ecfc41ab1d5a9cde31d640f55179ee04744791cb092379319263d316e0494f085ce164c1840e2db82c4807763df6f4558aae9f9c5ef03ed31e0826309148c05482174bd9239f5037db7aa9c217141b2dc3765561d703de5d834f6eab5bb7b1b1befe1d25f1d41026ca45742e84f8d6f892de6c194ff0c1edbfd6513a2d947b83c2c368bb358d6b4b6872a2b3f5db889a824636ceefed4ab2d8b794e4c23eeea96f01c2a302880abbf66e58d2e1ad39c9a703a3d2a63f35c7b80f84e46f3e0d6ed976206ab6bc1287c88566588ccb0adc6fffb1d55ac5b1dda551b8bffbd10848a97f57a8e1596d9a111d09233567171e8dc9958220e3e80c148bc868278e6eb77dbeb8b908fd0b7f195c973f03c2ea31270e554186e5c22a1963400964505651856b71fc32e34304a019c7bcfd27e3c53f253abca425f6b3443c55e51a5ef06a465cacb634deabba0c5ad5ecd5d36926a794244daa05de57c0b1eea041e1d2d79c61067e6e678050012f7c4c64e4f56e0f01bb82506632cc1a86d0f74ce473b0f59861abd2d54082ec8ebcf0af3d1b92fd283c54d537b833b74a3edba386d20d6d650f44ba5360b1775813d9066e29845b4a9f411a8e0ddbce30272e0447920b4e521ebffdbde5dd37e5b071cdf9501b9234a53219aa840f7b81bb644c9b2c4b0c8bde098e8840c93e733a9e6b404d007938befa796f3af1aebf01a7a8e9494f5a52129811d326c4e4c90735d47be833b6dfa59e38b1126feac3ca79c6910e7a78354a88ad54d2f060fb1d9765f20e2b6ec51e87e1815c954ad956ab32a93c7fb64b72448dea6cae7029081decef9bfcc8bbf461a967caa0698a02d9200cfb8a65b37dd7a9cb8b775b0bc21d3a0f9c9b405c40d712a8e4abe10e3e512e7be1ed0a476036d60b52b66bf44f86cef849a2006a9b85cb14b1387161fa09658fdbe7f1ffe5b5aa0253e79de3aebc92ca2d5114808d8412cf63506d5554257df4c8cf118bac0fee5504144a6e0e48cc7696ea66ea749f15813e37658a8deaf28227cbf1d33cf1a5a3759f91b74dd5f2ad9fc048a319424a38bb3b9012018eb878112e20083d9ce75b449cbb96e14e098fae1b52ab89cdba83d4c21376e3956966b70592ec70eb2596976bd2908cc1d120f84185b46c45d60a5fe6b3a27fb22a8ab8da0a829beaa974d90c764ba7c512d8f0e352a4b696d7c73771d04afdbc7e2f6157f67a3c12766ff52cca9f40bd4dde5329509e8f3b84eeb4897af2e61c99e14f8488faff3fe145a7244fe0d9f82529e1d7234e698c55df89d36b073188a54e5942404e1bc67d18609b70fdc385d8bfe9b431dc8fcff67c1a9e119fa42c1200f9135e29d29bcb0c09adc4a23d0391f1dc7e02411421f939a521e5aa0413685806841900ee1e5d93ee11e27088ce314a8ccb0c41470efb2e8724ee601e3540ce28a78fe9140c6308c838a8dd7109e555adab19c261e0eb1ef14dca3e5bbc9bd697f31886fb0bb888d5e36f93a0b9ba2651863e90624845a834d5c05fde493cf060aaac974c5decb05b481afe4d34f9536c716422b777ee57182c92389e9780227f10bc51ad3978942593fea38180120f8802834507edadbe69e34039820bce08907ee4a11b934d0e021e38d3786025a4ab13ca5726de7abd3bab71ac2bf6b7e0f4584304b6518662d3b4891dd6731806f593d623206cdcd67f57c3827745facabd2c8e31853525ece9c50607e74fd21b011ad0765833a5cfccb6f4c7f112e46e5f0c2a77fff707b09795963d133927b5cd14764a6448019cccafc9945573284916a8c83ed701a05d73675040649b7bab258264698c32a034959546d5550c68ab583a0b33aeeac3dfca37d2e1a34e29f3603b71d8dc4455684235e754e6e4c7e91ea24e1973b16149628630ff2d679dff1731d88e4a2a7cd4afd82b4f5c29a292ecbbbd5320ec9004cf8d7d48300210821601822a680bfda14bdea52fdfa47dbffe0ac273cfa7a0eeed38342943fdb178386e640de047eebc447c661894c072b0ac19e6e1388e60d900899e600e7cc20a81524def07b0ce960d63bdb774b55ba744e07dda0a73577be0d2896d39df9a941be1ecb64098b6a6f05e702991a3bc6c7d6a953d818e40c110075d0c81b2cd8d8a03da1198261eae2d3610a5af83679a06fabad1b8ab47257588080d3281222b2118c925cc8771a2dd2a98f532e52ed2d464ffe06a868c3ad6277fef8b86c73517595420327df8d176b3b20b55e1cea059aa48d347cd7ede76f5f9e6694fc8a8834d3262410b522c2bbda39eb454ba14a49fd16585145442bab2c86df925b2b20f1c4d6315b2639a2a7dd267aa14b52df494d952f8382b8794067c768a5474dc4cf7ace77dd959388b7e1c4730d0129c8a54a9cbb816614639154c1c3aa38cffd1146e6de708f8d7cee2a25276b977d86233f82adb68ca9302d398a575062dd282446a09f393d7aecd29dcdee1f25ad65da116a8e658081d6de68f9032c7d78a11cf70026485ce4c04545c9ab17d5dd00b5cf2d2875cb3833086c0e50e583c230768ff70121924c090b4236a80a4e1c566fa120231fa5c359027f8e7a9302316dd091b7561a7d73c98bb0be65fb7a4cefc69293c304cc11cf6160a8229987439aacbdd151c68736926ec5a742f64670415c8cbb91d8f7aef8536edc2954f25f50f1bca53ca4a4ca46a6e5f98978a1ccbc9a85c7f46c4ef507c313196bb96c402bccadd1b5101108bf1adaaaff9f1161fba1d119a985efeb51633810bccf9e4db10866fe4912935d615972f04151dc36f6c82d967d847714a722148fcfda72cf96a79e8457749c0ede74ba5ec701cf3a47182ba2eb85fee6776f8a7e7db36aded15eea435854de4d621f065a5ef05e28e052767dcc6d5cef1e5bde9842565c06694eefdcbded4586661a6d29281faebbfbaccf6377cf6e6b2aebbba33ef69651d1fbfe7b0fb74208901bb7c85b360946ead89cf6d859f6db1f108585671372db6715e1cd40c9456a766638b4d41f86116b649c0e433188c062b6fdbc8ed4bafac0d47c8a51b7affe39efae31fe6f208e66f6d5a22abb06a8c4ff22cff1002287bc485c071820c80348765006273c53bc3241555d61e25526168000915acc63a95203c0ef9359c9211c1a39d3a712bde61a761359d11b3e0a3114e8f913f1ff0764cd7747c2db31e032c8d0047e8cf9eafb683296e23e23d20949db77597bc2a468cdde42b1eab3a76d455793f01dfaf229b5a26fdd6f0a9ca5308e63fb3b4ad59807f31338ef0d3751492ea63b1f99ed04cb0102623dc82becb0ef62165cd63dfe25d0d0e45d37896a7928d0febe8a2985f667e9d869a91f93a086a8fe59f7ab029ef38ea275cc000332ed1195b49ab07ca25415ba7d62d91f50004bfe224579e76887d94b2983712a10f5a6d84a3f82f0b8600194faf4f5053433bd1d977a1c414cccc046faf3af5680bd7a257c6990c8b3514511bdd8a4bafc2ee840848de6eb5c89caa49710cef3e78bf9636283e295ca404f88e9a94f015fd7d75a67dfd2442579c92deb0cac4df5d3238a7952f0b0c34db7fbe153cd474f841fd3b9c0e7edc86f85b09a7bb00eea1a82ee921507c2434226142eb54993f40298be1657995bcd7b753a9db517eb6ea7c268184a212aaf085fb4ea91dfd76fb3d59de834db173f8bd9d1e1cdee4da6643f592eed1469e5031971ddce403d107988a913816cffa9ef1be44ddd6f1567cb6d5453f9176e684faab022e4c72655912882192d2cd59fdfd1c1d3452137656e3226d19d196c1173af27cb73469346715881af47591fdb44882fb3b45f0a3623f0f0e56edc802b22a030c4af64ab3ec12dc715682ae4833ec954979bc67fd42a4b6a1132caa18fa70254c2e5e79ea6ac118a61b753e82d99f9a55ce5a1ba16b3e766f5e4b7ba93006c12c0d2eaf1e81700e7c9ea8bf15be34af418d34a2916a7b2d2e3f2b75e40952f9ff82fd3c9fd2a26df56fb8701ea593421b07b556e782efd80e580d7839bc588647179174b04a6aaa9246f554c170cd792723491a8db435bbdb0fddb498ce761c9eb912adef79ffdf4896108f0de1587664c0ca3c1498a7353da4e78ee641c6665745ad8fce2c99c68122ee3ab0717472d96c5a59537308a63561afca07db1db06e6359118fc78a285d82b24ee0e49649ad686f166c38553acccdf62cf82d77735265b00594f2a07255d79ca8208ed7ae3c8b3b7cc1dbf8d7d8a1ac8180b1ed6c305704b67fd6be68ad52175ca6bec9b0a2cb1de85cb620856fafd1db557fadab59c47acca22836fabc2fdb0d70d540d0260b74cf39ac9a7ce786a29814b406ec247c141b177087878a5fb5db83c08e0d1205918cf55c9112a888b8098d2555b2a4fbf16abd6fab5271fcfc3431b58446010638b2fd9c329f643f2680f8c8439cf7f72598901a564eb43332b4e7e3176b1157fe21b86b911460bfdb9a0c14be095332fad830c6b2a20eea5c3d2f6501af8f5871bde68d0179e615660f8110ef67ac24bf855f71a859597b4a2d021e166c1e744e20977cf2e6daa8b0925a4fd35f0b469d0fbcf8a0b81f0e664464f1ad989f4b72f7f5ee0105c6e9c787f0ab7a5734f3c2719c4318fa2ff26b4c5132c9d957cdf914fcfdc2764f593abb34306d7ca6e054d5cc5e4397a56543bcfc22549cddce5324375d5b0a50c872ba57bf1313394a5d81facd05ace5bf5e7451e7441e9f12935245f07d9256d5e0141502db0ee63d5cfbb7930b21c4236bddd9ad1354dceebb8be1bf4fe58e86c2d7d4b01b4f34e0167f7717994f777c5337ed9d9a4eb5acb35261b3144d1273e93faeefda1554be689738460617f8f5b816ba10a8de2eb06268ac3ecc9044e15238646fb59693ef276c7beea8574ca7a35178667d9937aa327413429fa69fd92d1617e4522de52569d287466eaa43909a5983f8655c17a9ccc8b3c25ceffe89c2c4edad3ff7c1c7e8ec7a82ed92d8a048ca2153e3dfe10caa1045f72af14fb038d173aa0cb42456fb4e64ec0eead025fbbff695af450784cc6336c37830b77d2232a40a0bd9e305b50127d6ce8212852a0237ee189e6183142e8f66a1314ee058a395af54c1eec001c4f9a861b7967791b3f9ef5575a910e4792f4f49d2eb25dc901f26683e0d0f8b7a5a0ce86997090ef7cecf6ceed4bd07e909f038a17f2728a13f45460b777a3d36f76bba2f2042e93694442f3e284fa5b491017c01f1502901d18eb0e0f6ec831a435df4cc07b823bec9aaae94f2f870746f7bf488806ba28924f06a85648597793830f0b61abbdbc7bdc67022ce307d5e207b2426ecbc8ec61aa7188808c2adf4dd7c67d48049311085037b3110dce44adafedc098289ca65b9f8f8262f02a0fef2256c9c113563207e3cdf5a1727922797d0c97814e6afa1560d9fa36d3e2e8e982aaa937f4a7f892806c8e03e4acb8802ea374920ef74ae1691b9da31b282196489a98674cb1206c64d410f36b0f62f90a76885f5aaa34bb58971cc1b9e78adf67fdf272b247b07004e320119cc42ea83d6b382da535039c888b98e2d1e9189159ef149cd4bf6f2d356f1c4c9dd9bc50447a14e11ae48d4b638ade1997624e88ab9252cc398454c37cb00c1c405a0ab858a43a79ecfd155145771a1017f0212e32aa550163a8040eff109420af03595bf55bad67152286bbdeadf129d36c55e8e5f51516dd1936b84659479c06b8288929eecfba2e5a70c2e62d4facb0ce235ae0b97ac78b38c2d76d9be8a0842cda0e77f798bbefd94eef39e7de2ca1efed93d0f1d8160e234be0eca03c46d4332c3034a905142b04e74d566a522292579782452fe02066b5cc855da3152b4f6a4cc245377d19329b5a8a2c1e9260b49f170704421e1081f27b3e28dc2877fa8946834f73056f5d99097bd38da0923da2ca8632725f4cb910b940d6f7a9ff57453533f75f400533ca93fdf42a3fa1967710ebd32155d25d37410ebd65ab27d37bb1cdb48278228e54207d45e8ba280d40eb01518b99e210d9a56c3b8bcae8b66fc5ae6181abc8a96bec40a21bbcd8bf9e3740a939a7ba6ae269eac3a19d757672078858a0d2e64d5f5a4bf991a2bfefe1a9701c9bcee29630f5c778de01ae00bf26e8c26a138b5bc5e2c05be25b6fc096fae2d1cc9561f0f36af4bb56980a6f7463200aacd05697f1445f4c419bfc2e5c12bc35ded3c6eddeee879c231492efa453fef28a3466d245ca70fd2225b6e46d1b7d96c01bac439bccbffadd14aee7d73753d7e5a215b513f2373dca7a780a48f2687644734deb3c9e9433abeb8cc63b4c9c3d5948264ff52bad0e81c9fcb6c4f2f2b58de6014134433e2ebfc70783b703272345c6da0a2cd637027bd0531515250df39e66425eaa2470c57ad0b5791934f0c379cb1cf8e508265e80c01d4476a972a96a3efe834850fd96a9b02050ba81d45ce327f395fd00dde33c2d91fb7c81769c8cee58cb0f50fec11b142e717bd70a10d996f06138a76cc70a68a969a7d1d4a523dc995b415a722f1e45ba6ea5f495901664fd9b6dbdb539c56de7b753f510438f44cba8bf5057276a43e844db8f19d69429c654983bef2d16926bb7215970987f74532360aefe20407b9ea6b269715bcfea92a91dde30da486ed34a9ae559285d31ca609b03a0056dcb8e60eb46b999799c3dd02317aa5e4e721b72bf231368bdc4229025fc8bfbd36e8fbe82e837ab6efae80b6934743ff58089b922d37229f9bf1c10f3e9e39b93b8e61794a8e870f0d4de4b86712f155035dc92c4bfa283c6a28fa2a44399f30b34c8e54afb7739f584086d35568b3c183ae406dde636c844d74f715a595a223233cb3342c93c4d4e56e0a52850cf394bf3f4a77363aca96e9cc7a7c207fa1d58412662afb40919d17d0378c8a6207f8d147b895134549eb5d74e718e25a30473e6b4656e24f84a7d5a3528978fd5746ded49981552984fad87b71e00cf32218a1f339a115a7faaa0de03c9c2f150c476eacb97941601d509e0696161cc2f8496123ec3c7107649d04e6b689950f7395d00fabefb159decac290b4df338e24dbaac05a9bfc7debf06e7cf756f0dacab75e7c21318b856fffe4bee307420a42fa0c90a5bd665d573515ca7f64fcef3d5627241e809bc9f9e1d9e8693d18507a159c38fa68c87fb8329ab98871c32b6a7402753ffb0a56dc5570ea29c04c313181778622766e3db8220b0d8507945062a2b98943718da118084743dd69ae9362ab919e00de71092235a05c386d4b2876998d7e589075ec6fa34371584bca99bb33afaecff4f578935099b09c8c5ee1839dfc54b271ee310ae768cfd4a287141488fb56181e4e46f2f7d904570df8142d65a0cdbdbf463000242c7578567bf9b6c69e3a5d5eb8882e3e413e415bf8e9245e60ad3ba0085be66dcf8a98ebe92a59a2b2536ce657b6e3bd6123ed7d15b49879293bea37213d394884bfcbb465da5adf2baad93d836654c45113c1dc3f9ebd2dd7c6e0321f106ae253e93e4f3d53f2bfb9eec5f5ad08c7ea8f802bbca823061287ab3b753ef4ab53fabbbb78b7fb70e3acbd55cc5fc7db74b712921873ace3f2c389e85f43f0eaea156f73d07d4c29e5c8fc1db926ba020200a34303642c97cbf06e0fe252519b7d8149493978e299465ca993aed99f0a627405ea97fef5da03769b7c082b6a408689e0906055072307e4b3dce4276936ae773f40b0d9a938a9c8589a5ddcecf02ec2154b037f64adc3c06dea58ec56a98e9a7a2e453568f1ac5b1b27f3b2e770e7a0c9c7e9cbbc84312e8a68570d4b3fbeb1c51bde4719dfa97f4ed7009d8dbb5a2815291af0e88eca589dd7d5a6473c82b4b56742e3b031683f5da3c4d1b8e7878974506ed64d93d886b30052bf53d314a226d5eeee5e7d57eaab294f354bc3fbbd5ba408d558f20810fd1f8be542686bfb0063c14d812f6c5c516f13f2c7822858d2d72355d314cce41cdce9aa0876e077bf50e030092425e78888dac9ca4d70688b1c92e9153aae2074de3bd4f07e2c607f2e178cc094090c036f2f413e98560bfec128641c511205a552e7f0bd6d4a7384600af9bae05c093cdf1a9faf1112d6738586298a58bf6c5e31ab989889d18bfe191a7ce4deb8f5d069b49fe30777a52fe9046726d7dd564b167334ecc6a54128f5046eb6faccb75679467de6e5ab2069d6d22f2339639a46638e5418a45e096452479835bf7659e25a6dabfb6897824f8dca6bbba083f5fb75e85b2e2e2079ac816c8e9517b9e1935f6f464c282261e105ae1685d8e96e12d4e81f8a1ed7506d37fd7d35a196595ebb370cc0df18536535630251617e5465286db784df268f2f3424af232b277a88592ed660aa7def8e7e0b19e9bf82d162d2c14f86ca6205071aba5009fad74a84edef95c821036b705c74d878078ba02ced7ca99465e244275945c75b149b15d98d3d9390199c0bdb097d907b1fb3e71f33daab33d0c7f057703993de2d98126d32a1284561851f35f99d65d5a963e5ac714900620e8e640095f05e17320481b1542eb06e31b283b7e7c01420828c390ce8f4e418721ecf5a358b0361d6cd0c349320da7f247f0ddc40f190ea04d184886b3b435c90103bb0108c145f5837294c989e3b7712279f34a21b3a69f85e9c314a961106610f5f21b6e935fcfa9457d0439ce54cf92633195e8f1894228e3ad794c8a7daf9f30d14860ab16829d5af3449fd63a94a051e90f4cd28a6b2f7e839ef4f05800009619df777035400e586d4a1b224ba28907e3698fbbbab871ae0d57263384fa49f23c0d28558ff52fe21e713dd70fc3ab3af5723b2e2e76cb54e1fac899c5687568740c71d67ac1217ed4700ee833c44fc7afbf0220feb9b214eed25ea5c20fa7e9d592c7717e3a7a75ec0687bba70ceaa76c4f444ae2ecad0726259689c3cbb1e46553c54579d07c3bf472b8ef27c1b2f9898b417df31e5d97c286122e60f0358d85041219d50539134ccd6d93278d25b5a4fd0d8d0df8427d630346c2f91ce66dd3e7f880ac8622e672c4a68645882ec6f5fd9a2e1d81948da3861069bee1a5c41e153b6c21960969ef18708e6049387601700273db73d603309d78498550f932cd83f6a28274f4bb3efb4b3c6d74fd3a5185f0f2c4d77ee02ad7761a8e0707b91cf0878d7101ee7795bd9a7c9fe66e6f6cbcdcaeb91eaf621bfa59fdc7ccd5a2aff3eca863b43c25f3c00c7633e13408fc961f9d6bbce6b6734a306edb537c81155f4af664d41f39553b0762c25b3ede5a3c8716d4b03614aa21b865f2430ba828e76655395eab3ead927a0901b67b7989735e14f39a12b9004efa6a6a8590372da9da9f765422e931633d92ec51f4ba6b28298d556ab616434047c8cd955fff8cf00888549287e3cc8cb3bfb8366d8fe54c7bf908673d535b51ce3755a33eb29f8b783c54256713c36625adc7b752ae84b74f8b9f0fe02b065a4235c85fdb50151ff3adb4a4329a8fd9f5a0f4d56ad87eaa2f455e7b2029c03f6f6184338b9b8f4e7b78081f6217df6b3cdb20a31daf117b7cdd7a6335271d797b7b6417285fa6305662455569d15b7848f12bfa02039b0ba2d299f6d5a9a85111b7e96ca9daadff3d0ef627161ec3360fa1006c66aad79d8c2e55db7c1ff9ae5518e39cc80edf49f423daa194077e453d3716010bef26aafc515ff3b795b793d6b83f7077da07e4fdc2e4e752ac3facd89fd163aad69ca74252ee1a210f6eb7e04f8eae66b128dc41fd26a49d922723ed76799c6a9775dc0dd78e0229bd6d59e5f0b7083c646a17b93c1c2c4d8298eb17c8a50ffd26554966094b192df37ebf182336b480821f136cf8570a9834de657e0efccfcd2130b797d90c70834c43aa46234b16690ddc746c47e844aa52376b954b76b57a22e5158c6253545629bcdf00629fc7aa5153bf25c8289fd5be65f475da44572b6053da2142741804a7791cafc70d5e111eeca8472094ccb1b856f8908713b6b6581b7d85a0f6a0ec5d7d85437e8f17a6d85437ce63efd9e541e010adfcc04e5515119dcc9317c87d87524f8a45a867982fdf3546ffdd89157c7195541e8f07c314f75ba0fcfab9ec944887a165169f55872a2f58d90d802308cbbcd6a4e15982d36bdf711c99e139eeab12e76e770e0480e2ff435445eb82af971aa24885fb8b25d3ad260573e6abcf1ae668acc4e5faca61f2a56bec702804b2672ad5301a89030934ad313738da8b042e2f39c427fdacb0e5a960ab945cd9443aa8ee5bcd63a1173f4fc07d12f7f6a18b4d56b773cf11906e48924fd78d464054c99f20f594e24ab3921f2ee1af0aaafb41fd1d4a3fdb7fa9e2096aa951aaa87d34b2a74c87ddea70f2c5d93e9bdeba06199ea3a8b67f08fc865c6e6b3c6023e675620eb98442457aaa82582a1a58efacb9b87568b5d7a1237aaf894264395a5ea484f769d594a4e1f938753d4f9dab38f7184550dd68c3a8b6f88fda4f65d475359fa4910e311b7a3cb8318d255c221260111204583c39375bdbe9eff641e9b2020907c0bb4e1672de8471b60072ea2e65dc6b8664889cd9ac2ac07c792aef9fafa69ee93788fc5b20f14f683e7bc3daf96203c86667a39b0af65ae78d0ab35217037d11fbc98ad014e29bba592bdcf834d52b98f178b9e4347c34b1c29377c4a4a27e1732e39a3ebd2260750961237703d51db4973abad60772c36980bf6c759a1111448ce62cda8e714785311ca8eda4fa7062c1848514871cf3de73cb87354ef637dd375e6a27b52c59d5825f96c611a0c4eb6549b1ddddcc872df32ab6d56a85bd23ac37a22af8a48c75d030b5ab64058004483ac19fbb3efa1c0b501d8212e9e9606477addbc4c712641756789001f7fe62de5916f1f422ddbad0a6e912114913eb3f8b2ecbdf7b2bd344d97de02371c565d7cf595526c0ccb50043b29c359c1db4a8a7dcf6eae2383a40bea0e6ac221aab96248d4a4ca976d40209e836bf376ebec0d0b95a8243eee18ac7788bff45cf5ff2ff3bb46a5943b60de708734909b3b0c426f95bfeba4dc5d032756c0f1d0a3171a614afa578dabe3b47a9ab8947440b55f785a0705326ac68589b19f3d6aba00321eb169d3f23a8faa9e9bde0e37bdff87bbf75c317e68b4759a78a6b0c851a331fa20b5f692fae0204fdb5f1d1cc293120854edf2905f99a67015c906350d09e36e4587b010200037f709748b268cc081393f8d341b730a61ed7719c58c33e2184b986854074def6c13f3c5568a6dc640df0bbb8a22ccc473a261e31f66e58cbc7276a1681bf2d69526e4657db731edb4c534647e4a6119e5ea7ee902b3e671b73d677e7b8a950f68bdfb98bf6e5901bbdc45dc3c64c2a22bc96a7a877880483d407b76cf71df1cd1089c2b1bf084db1ce94e3aecd22424d41f6037d5dfadaf618eeedb4943018efc05f46db8c398b263a7a4178625accf2be690a2d343ee6f4da9052ef9d02cad201c9ff337d2f08a7cb7ab4cda9a4ddbe50dd853765389623bcdd8957fe88eb9cfb9fd3ce909b40029a39ad700a45d015326172329612b42b13d7fc5d8808c9c1ff79db41e87ad84c7f442f0b55bf2e184887a44f94632eecb7642a33cee54aba0473e5c4932c977ec17fa91c68cace9b10042b07a6abf26c71b6d24c64b6c35cf730216eff80e6668684f198369b75cdf700e7f4b92346508a61f754f8db1b7c07172d7467f94a10ec2929d04555fef7a9f65641b5d54a8208c43b4dcca77a3317105d24cb8dcb37e70861b0bacdbfe43d7a1588260e5643674705a30125ada933fb4fdf40f53daac17101a210685f8e41fd84c5733c203be64387cc44eabde45a6f7c4dd938afd3037659679ad118ec0b7d3f39e2b9015e44ed0c925782080bc3ee77395480fa513c2533c9fb5f7a7d07d68ed9e1ed21e43580eababfb08c432babfa3370606b95ee9c4e2e8e7b4fe62fecc0130dee19c692f229066ca4b5b8b5976ae8a3eebf4740ad249b32c0bf93b4c68d8c772ddbd13b1429108b12a51fbe60cd7ccd16a13f3a9394f26127d0598aa8d368ccf46eac95768924ba09ec0ce2d5031ea64d7c441289653564ce52eaa96e1d992a1fa52787da51b950dc9ee5aa30130501193e59349bc448402831c6ded0d02aa11f93cf9fb2e56201eb8aaa83033ef2977ea29841ba9e0aeef8e3a1a9be7033327152706e72b52a24d611382985c22f1c4f3e5cf3dc108173e9c2bb804e2817be590ebc5ccf66b0acdd794907f6a3690a9405e10be68bdabc450016ee93d1d08ab37a6e0d7ec2b27d8b4315777ce730a287805482ec386f0133ec2eb99eb34be8afe0253b83b7f6074602c5a49d3814740483c15a3e309cec1a13033bdff0304be86c3391a640aaacc2530f7d696233a7dc19da7ce1b5a9ee6c30ce7553f85a5610e38d08f8ac99d4f4670f1192803f44e79cb8303ce78ae97fc1f212e0ef1797286c834d0729fedf68d0e50d50d453265396552d58682d667d0d39c1a7ad6f493b5c8df35c6e5c3a489856900b738be2a8446395108d910a65177177597bcd2aa403428e55bfaa9c1afe153e0b9b731384b681bf87461b14f5a0cbd0a20565d3e4d46390bd511f1cd1b356df6794d9fbacbfa5b78ecd52b8d4e7e8bcbdfe08d5f2ce80eb2c53eabaa52032e2aed27f0dfad85cc5762c8075f3943ca4b67ae3a359ca63c47cfd4bfd5b80e38f84f742bdece875a90fc70cb199f0366544d3f626b06bfef45446c0f74294a59442684f6a90fb9ff7d93cab92e935234882f2b9c5687089265f894f0ba4e13adca15f0ef095c344d878fc59a80702dc72ec72a82f7c224f5031954d969d160a2b863dd2438bdf8f34247c2b9510ae0fd6b9d659687aa6b3316418fcdc4d2586904634300b8d1e146ab2e8123ef58d4086d5f3cde957b51e616f11e1dcb2b9c63ddc0fd3d31d364c835d9eacbe205b00c4b3a0612107410ec06db8ef06032b338b6a4a4a970243a5246fe5781aacec11281c4159c13218280c1334a96d566a5587ba1feecf13615ce4d3cf48409746f9f655844e179f0b1894428a24af9138446f2dd2acb207cfc2fbfb3208f0fa1bc5f5af49857ec781b338906a7896a6c84e1f34e7e4335f24ab85a33a5db24ae5173634c294c852806c0deef0cd4d15a5a6acbd67e3bf3d20a8b8bb6730b369d29f4e4190db865b7ef2d2dbf1a4e7de880506adbb034d86840591a8b5f933a652637595e358fbd6a03b50daeff766178150922036c708ad630534a51abca25019d1087c709efb736dc9014651b1618474fd5ad7f2ecdc608c32e87686080e56d276ad351b7c14ab24f427e1431c2f9b1e9dc5c281c239c6f3be6481407cf428a4939f2e569baf497b7c060af0dc330064273705198a061fab3ce0786c93fc1fb031574c39e97d65f1f4aa3a936741922806e3e67d69d3f2bb15e94e635265916c44fe5b04fa8ba3247a546dd0789d832b59e7c69cecac101e1a6768cbb18e70272940000fe52bee351074a7a4e1d2f0ddcdc9935aa5f025b725e24cddad4167d40506bfc450929dec7b34ab3dcaada0b29f31e16c9e4d723a63f0abfa84fd019ac2b8b30e361b38be99ecf5784db45994851d128f7fa910dd3cc9c01e612cb4932a8cdddcf10ae6998ad4490fe87d541add9ea27513d92c6b723827a54407bc3d9e74497616247ea8eae11c8d091dc52b733c378f18013d1fab71589c5cc5ad7a8cba156af1c1a9ea6fdb2b2f80ba3ed663da664e91def6d94e5f2006a4c490065ab9d0249f1e2e6bec96172e67f1e6e243a5b66e6742da65b3a0537848c1163b54b434ce8c5dd8ce6e94eadaeb8b1064f8ae4644a9f8d95a6fccb1f90b27c3b50efff52d5f13e8e94a92c7f38623ae5f50076634b27306c01bf9003db85e18875d00a2021e08e66348109ba3dedfe39dec21e9446afa9a514e83053b815781e5dc9b86108077aaaf6d09d4c667c4ee06acbe40bd0f7bbd41611ea8a805076fe3fb2c7bb02386008d77b997b26f6514ce78888ae0e70e15866ffceb2e77648080a3c815d6ecfdba63aca91b7b4e1f36d6d118d2122cfc9691cf01e434a8dcc6c3015cf6f975d7831d2df867c4c0888872a44b242bda82aa6490b12add36d6808ff08676b94e04870314e28b86ebe9b69c6776d8b3689e5ab1aa9f56839ccd18b20e7e2d0cf90d70a7c5a0114d91d0c3dd255be81ee07f608b8d1b330f69edc899b085a3d14305e5570e87674809bf2b94a38eef1258f36e68ad929ae749d06e91b1eb11a45e8c641ae38cf7729256ffaa79d72ce95b81ace3f759820f7fbc7c4f8a8f9760746b780f29bec9251d89439f74016412ba32ef988c7bf6f42392d494bc23a2d9f121155fc4981333dccc52bf7e058b720f44d73d7e0f8e65fe09b626a44921e9d32f27b4be0fbd3f8d44a152a776efc3125f950d53af3310251f1001537d277c1b0fd0c498a7d8e4bbef8e13c26a95fc360594d50048587bac62152e027935f53e95f0d85817d50ad032e1a508fae7c37f871cd5183c37f4eac26ebbe60849687e14d4ec644f7c94b78c60f5976ba7c3ace73b5c2c05c1a17d54295a0ec20fc79ad5b780df0a43e858e822ef2d810304b94d58e3cd76188059bbd4c380f44e5a91f1fac8b19dd40ce0111d10f95075389f103ae8996d56e08f4d618b2943d4b68ac32e6a81b8ffdb5808aebb7de07e0c5cda58d78e9a6caae55358ff6c575bb238c24ae024de6113bcf759f28e267ba9191004adc4b54816f93bab728deccfdafc9b47e01ca41af0d5b2382ef2bfa85cd141a15cb1a6432bc078eca292b66157f82d716945808d7d94d4568eda1965029400a8b6bf0e3ecde68af50d31533c5e3e22d6b9589054397ad35319d5d8436cd9caf8708cf6a669cc352d44bb4b5bd29f142d02e90366b368d482d1a81ed9b2b1d4719ce3a07cd571d000a7d22cbdf4a6d8fbecfc8b1765a86192975c381a21bfcaabb7a6cc624a853bb54e4c60c22ec596de51eb82dd3d51ac11c6974e8a4464bc3f5f18b8e971460a356b1622167eae42a888af12169c58b70e79d58a8526d6167df82c00613d0f573b5effa4afbd803de0ca55334427cb2ec0c89f80ca9bc86c3c5933b58406d3efd31aa1803e2675454761dc778d1bb8cc83f95900f5d1559b8170238105f4357e05ebb982d80be9cb4fbea5f9ba6ace6370141a8b8f0a1e9d6d015a178ec4c88026526126980bbbaad8734230486c3cef9d981bcc1dd174616f5a0fb547c420dc9f796250cbdd251bb059f268b655a236f6c1cf27e5d462406a9f60532dfbbf343cd7f470fb12741cbe5b6c7a404e2d0923db449b559787298a545bca7f4822ad8bc023c5cde8854979400dd1cc66bd2546046cac2baa284d6909f21e922c16577a1d26176779afcc1a7014f5c7cba812d3cb9bb5ee2ba8cacfd2d3a1bc1cd3a7ad3ad18ec23df68314998b333f14c7cd735554a6622f305a087889ac1cb5841a7f071403160eb663732f1f63f72927df9d510c7598fcd8955a54342201e1417ffee3b3d4d52f6c9728c3d008e99d4a3d7ba1448d0d14373ea4e60ead5e0d0cd0b9e2fbb581f60918f66b9a558c54fe10d8dae05b478a4f1809b9a94950efc69f42c453c6fbcd3592d84edf2a3813601965974fc1a1816918fe451e9876f2060c26e050ddde34ebecf321b94bf9b4f4b22a3297e43bf68f1618f2604ba6ba4511e4c57be1d5c319085c2b45c7511758854bacec2ae5f448d8eebd95d8ff0e74befef9b8f10fc7b6e55dc9242f4f2e8f82771e30104d9b3a985bfd2dfc4370d60181e9a26ee3c9b56ff920ba6c2d3b803e2bd946fb7caa53b4a101145e4757e475f7ad71570441cd3fed4aafb84f576d78ca35b3a2be81799c1e8251b620f3630c61b6470d354db409ab92ef75cf196f2460538fbc532c145dd5963f8a5c070f9da28b2efd4361b4c82e678eed188ee3d7e99e170de05fe2fb64305c2cbbf1cd9a7d41f11c35e57d4243d2350f3842c3136e517a5df33a8bf7a12f5f0b2f4711ea07513abb21624f1d55e17cb51c50ab770c4edcbd2e843790db38bc34d87dad5f3a10943bf085a3d7bf40058b0c94e04b623f2608501b38baaa03855fe84164562a6761f13fddac5805cd06e84f727e994fd769c14b115d125cd59c2eda63670e3ff2f6e605dfe0ce05f535baced1d2fdd09ed7b663743432d03277e3bf8d6ddf55a2154e83cda4446147c7b59a3633d631ccc169139847d5cd7b0408812033ff78b8ab3f2dae9551536dc9d5413bf681e2fa90521fa05b623b9544184ffc6714ae5330070855b4fd1994bd834e53b900d3531bfb0f8d7d91e3468a7a8fe87ddb3a223e68576ddbffab8b72d23500dd7fb9c62178c97627478be3c0dfb6718cbe54a0ab6e064ac62b08e76f01de19c40484bf3bb88b0f37056df13e2e0b5be9bc0c93a8ddf608ff4cdf8432afb50545b2f2b477081cef9a5c7eaa41ba4cd5f81f89fa02db079574022861f97057298b8211d68604d643159dd2735b81af97a3b9d1013727b336b82602d8a827d9288827fbf211fb977b122d72492b127b1aaf8f2a13260d6f926d19e81b96e729275eb203e67bba3e00dc8c4b646e32610424df387e7987e1b4ee6a9f1ebf2ef17111d81c69474e5d1c51216ba4510c0092b974ff127e123d306f23effd8eb48929f609983626bb4eb730e0851120f0c58d225a3e49806c2c7e7f5efb70748fe9aa978f070060b7ae98bf84715cf36443742b054cb9fb3b831cf5a0b711231d7a8fbf56df5557e7debecdc0038fb0c9ce6bbe4e3d51acc999987cba86dd70ea86b0dbe8209d09893b091411b5d0bfc4093c9ad9ee90074915232f3726092af94bbbe5fe75d450a5a1122d043803799c90a60eb43ffd21943e3a36dff79c1b13c417cef0816df163e6664fe00e6aaacf123705ff0d53f16ac733e219839d9593bfa32084b84579ecc8ec1c8b9fd24af8bc12667041aa9d3717155ebb728f907040fe1fa2ced342aacf720ae962c3befe764434c85087d3f448fb7197af6cbb2f8930e1d91d4819a7a68092b8232a852359e6c1118344e27b99563601f6991650bbaaced6d4849cb50fba5dbda3501d342961c3360ca9af835372d1e9974cf6eb4459b559b7c85328cb3a290504527d8d90f0f586eef7d33150edf6f5594b7c6d1b978794b1bb8183ce8da15982f26b79c0a8feb4012c19259fef0198766d45fa4ccd45b5b780878f0a3facc5fd3f1efc07399934ffd0ccae37274d2b3ee1ff07f768367076141ad044bdb3ffa6a906c7a328307109cb121d7ba29432b47ec93c1ba22151e5070c5472e7ad7e6cba1e7779fc2f5275c19c734182d6a9b2b764219b8a45828f23510fa1fa2a598f7e3abde1fddf5adfb7cf84d878467309f12029ed8326c59b31f1b13556f0528c50bdc36a39b35d2e3cd2d8509589520e16a6b96c4ed40e4aa92d1ea717809e1a36c1914a0727a2485f450b767ecbb088609cb10c6765757dd46e3466900dba262d8a5c854ef5dff1e3220063502a70fc6aee86c628c8a71a0adb80ed592f114a75eb6390a0e28d877b00e47c60ae6ec372e2adcca0cded039f2480f4e0a816fe397da5ed1f2de0b222ce9edd7c96792c4c2131bf7a12489a4dc74c7005dcac34c468cb8705cf2524d8571f6ea5a7f7d272faad7999a38a6ed997f5ec0c5d13b9a09554aeead67e5faf3ee5044396e080b65975564d135a869376f7230231100b6bf2e3019f1836a4b709674a7644cf1785169cccf9b95d537dd1b8a6c03bf9451d1c4adc80a1b22479de833c6dccb05fcabe8ce1a17b2e2831d83597585f6e4dd9ba5111642cb11ed3d9358955698f94a1fbc6e854797d9685f885d7879e078eb9375218c479c5ce8f0830c2a7e20e1ebaae6d77c3f1a9791e323e950393b3f5f6fe4bda04e7e3a7bbd1b40a46532641b8102450b069ea9a311529ba9dd47acd180ee9db187b6a770a7a83135fdb39070baad2cbdcb5840ad3dedb66bbc8cd6529b98c303934d961bb971d25bf70cd4756e41e17399fb730b861109602928bdd85316ca0a7b4cd7399e2541eafc288237d2a5e098e4aa7a2fc147bab62b8232a71bae7766ca9b19fe2b71ebc9265809effb55ef46d1fe974f81893197b0bbf12e88c6954061a9315551bc4eba70a65d1a1ae7881f40d2302c84b7dff92be0c3e5e863a88ce96d0c447bf945e74ed3fa94373723d2f722b6cba5fd02d15c74d0a2a5a2e63d094fc6a7c9d0ddb769c43ad4b8c0db358c51881327d432c97deabbfaa139dfed0f7c0819cf07f31b99cef5c12782d9403f18b67fb867d03eb8eda87f96573f1fd361275366c0736e2098b4c6b9a060cb2f2ecba99d8a5ae04fafd544021dd1829dfae72a0751e7d6626162d55e889361d1787e2fc29e096d307105f810ce6c716c3b2b4f38eef42f533d5ec3d37a3630efb1be74c149f9ccd65fedeb54852c423a72c08790e9adc9260005272ab47630499def8f8889f90541c598de366cd3ea79360e77ce49bc31f6ab1047c396cfa592cee632340efb3fee359c80e20c0e0a6b31730fbbfd19b134b6eaeee48c91e03b56c51a2f98469cd627c8efb5c5be6f03c0d4acb1728ac25268346621873aff31a619b00d82755d0631ec58d353cd4584da1950113cc66380bfef66d5b085adc862163f4771ee43a77dec964cbcef046ad68e65d34d306c0560b265276d144b3fb767086983a21e0af0528797a60d94e6d80c3d6b371156e85565925668eb8534b518fbf94b5462eb4b8e2cfc446b223bc5bb1da7a5ad9c58b6b15e36123490d7c7c58e10aee92812062881bcd38dacaadf6cb2ec0b5ce0eba5673c990aaa4e7350e4b20311042de04c164db345bd2ed410f9224a214e159377355b75fe1d2f9407d7ec882ff1654068e16bf597f96295801da066206036f887b6af8915f98ecd80bbc7acecbdd294065a555c9ca5b7f9af7d656fe89ea4da6b9d3d9d6717477ffea5d06f1ef92359351ec76e41f3c618051fee74454b3edcd4a6b91d2166cbfb8af98b56195b3ac8bc430ad91d7e7b990218b9b73b85d71f23c7388e181cb9754740e13a195d2b6fbc66c70cc0d2f4567c9af2246df225b1263aaba344a381dd0a0ab821ac33f4b2b10b8d2135890ac3eb0d722a3c69b739c23f25ccc046a8373ef09558d90d35d834758f863087255af8dd9aa58c1b5399dcc9a9bc7964411eed61029444226cbc27c25bb389a2feb274e0c343d6375e3c3e744c2a98036cb12c9518a97a7835db325106f26a692e2aed8b9eed8d489516db8f26668eeb70be89023cd4284d3d370d4771bafed6855907ddeb542eecb01aa612af3da173bb1dc4273e2d5a922d84f4ef7f0f66b2e4e1fbf034a8a37e7d51c8301476a79792df9108f061317c5453d9845940d46c6a024daaa8037b5919eaa4954d53af749dc455d25e2a8786033e51aa23d6e8615d2d47adb5876d88162db9ed87bf3e6e55b7f7020401b954eb7e169c39c569e94016b3954cf2d59f3f94a81c8b09af6fbb81a2fe27ffa5b85bd4a4718b684585b92ac3c5e9669e418974efff0dd94254ba8258f5ad5362d493694e536a5af6410be4c7adb0f4206be70348ad6ab79f7d3cf75febb5e800c45c457b72908d24326c6788d465848800be5bd7dd1bebd221fdeb9cca529bcc1992faa45d61a3a008b803243ebf357e154bcd5a4a66fdbebd5aa09e51d3b7681ce0b818be2063c54c85f055345b10903ec69cb376f79ffcd9a56904de6e5bd910753cb7973fb0b9b13050a25cc9cbd1e384f4e427ab56bcfa8cf6150151313068d06afd3303a91834b6e5ecbc3bc329caa0eaab615bb7ba93ae2d3380c1846f735c5c9579ed86891c4c31b8031379ab1f4fb086cf96f3d3451945ab9245d55952bd056745211db0f5c68f6bb15e5694d96fcf4130cdf61088b13e36d74c98c8e4d03cb5f18ca496b253910da854bfe0613f0ef45e836f11eb45c3df9629240bbe449294f6b29ae5d623274e409f575198e6f039a0365eeec740b79da0c
Public Key : 0ca8eea480166af15cbecc82048655cfadcdd63a41134a649f0dcaa3209e5a937761bbe6334982130d4d48b2165efc8081454b4a212a6c39c053f722691c0429b88667fc23d8dd198081e2268350b284053a2f38b972e443c90e9914de05dbcffbdc7c05ee58e733a34678ebc213ef695a184bbcd40ef64a0ddd370ff7c1beb07e9878c3412b60cb046c41e30e522e882ac65904897307cbf1e89e1061ecbb6edb78b737d34e982804ff72ada131e8031517981a853b05301dbf8063609ff9b881d3323920b65b368f8082a779885a86cb817c7600a314e3b23e95658e86810ca2798ceef4955b8f1b0e7e4a2e157abb93e82968e1fd3be02c9ed9447e4102a2fadcb8c87ee5285d2bc012239334f03d209f744c0e981c92a03e61541a40a55216dd01530c88540e62b29fc99acbaf945b5d9e847c9a2a2d334bce1db70c8b8564566f19be56063422f0a04509b5b63e55be8db124fda0969dd8b1b43196d436fbac1b47d7a27f895e9fa16b51ca317311efc0ead14534910d047bf671c3a94e209aa7b1dcc8f9e807b74d7e2f09aaf6f21a6c127b0d5724b12f954589e55dc06a2ac87900259d03c6c546f7395e719be35efb7430917570faaca24bf7df6b705dec8af694d5dd515c14856b76c9d34ef34773210c5c636163674f5da5f3bc7f94b7601c603b8ccfceee64f350c06636a7949f84f9afa7e155c3be2e32f44b62e194cfbb6bbb5acedb7d812953af9b00a0c0b326840eafab51080c4888e8185e8312c7769b92b25605110b4f8bb6fa530b2bd7b64d5fb6a679de2e746f7131dac8920fac2d32be5f8f2ce2b3e016beb85bd53b384d273138e76ecfc8ae96b1e6cc2947989e2c202c0a02dc2ff85635924622da8248356d58997cb586929cd0342d5e5b595a5192151f37b3139bfd2ca2a4399f34639cc348538473e839ef9a4c2fb25e1785b1ba0b28d9b0ed676f3d2d2c8cc570538fc175ebf6cf17cbad5c26e3f26543628203941ace41ed029d23e66d84460e2add6a2d6239178dca904c5d4e8abeb06365bcfe4a1f138af24d3a0ddf69de70cc2091899a92e818604891bdac970bbc3c740513a6070580ab21abec68262be867df19bf1c8d187c83b64627252c64f89e54cb9ce0e589d6d0c2e59997d30474cc508190e7bc21a97490d61a89638e6607210916e79c3d3ec1704026cef5d66b842ffe84a819946679fb31b8ea5505635e8b5b27143a2714fb997602934d2b5173bb853cf59e43854d87a7cc81e598858955c2b991e7a94dc00c8d1c520f980f3f7d35e5b7fced73df9237d4a1168196e0ae8bb21538814f4bbc613239c376a18850de3150f5655e2ac943901728f9aa0097375b238a6be6902cc14b899236beb050754eb500d4d4cb89c62879ed84c852e4f7a659b9382c7426440e88348d04f2b9746951af80207c5caf15a60b0147f0f9a96c2fdf0c4a68b27fb8535639aa4563c5e3b885efc8360f3aae4ddbf0deccdbec341591582e21ac0214fdb42ae802f0ad7f7917ec5e043d7148bc09f8a2814ec982e804507352620c29e81054ccf7980f65fb949c6357c39419232c222a9799cc1664455c2df29b0c40f644f112c90149548fea5a793c1b9bd177d0939bfe063b8a5c21c91b0af1d010202dd795dad3287a2cad0c665b6065162226e81646059fa37eb0944c18fc5b4e506a25430420304570046927d972299903da985c23ea9ebb4a309c72bb0652c8e1d194a0596ee3132df285ed8e3b59e6cb6b47f9371fd9724b65ab1c7b0bef7e0aacdbbc8a2abd343386f9e67a61581313ddd8f3d5a40c4b696519033d6307fe9310b42a5da4360d3848a1949cacd3572ec5372b41710f62f48c4afbf450e670e793929d625db6fdf193f79428f55a7e5cb018003619d9a419e7edfa6bee45407c7f6041576e7c31300345215da48aa1ab7645595d2eb857425334ccd18d13e904d09c6bd322bdd94ee766d928346c9df14dbf7760ca6346145073c3ae0741bf44a6464730b6969a28b2b9578219d40bc622acafc70379031a57180b284d8c19934f87e0a36d75bdb0ee9e5e5444a70c449fedf81023555d6bb813ea3d259a922279b845aa3530ce7c583424b72007f3b9acc0b0163dd915e85d3a37d464749ae3b3a8a1a0174413f74e9d2f33254b1b609203ed7ad243651c53b8092d34921fd9db3d5ec0324a0c43cd6003404ab7c34bb7d2d11e689362835072f3fd3ad8d31b8b658000ee2952ed7a27f2be2ee41f7645f6bd38354b1408fc300d1eb43c54e2b0be8f204508cb45a5b3c3b466a25e19ed4bbb5e13ffacf40297c7e65cc36157c0978ea17d612a39b7a642763a58f554793670c5b9643e2cf7f1e0119d8e50ef614362f95f5e9628324088dd1a1d2dc3703449dcae2c91965f6463f305a535b4a2daa26630c0c171117e0cd321775ec3a6845b8702c92180c67f0a60d2ac5e42ebd508dbfc792fd4f2c7b94bdc0e80e46b77506e3582f5778f10a49cb6288563aa709592ecfbc902da30462d280f2e39ee9c2f45bcd00cb3411673e864475410951503cafc1c96a36bc90456b467dc9110a3dde56cc6e1b85406721c6d7c96088ce70316c21ff9b451b72b7bcdc910134b87abdb1287ee75cb4331fdb15de9cbad6c89503ad2b2d09622893f6b252f0350d849b020305e020a908235fcc5950e2233d2cd8fb1a1a91b8ce16629dce544c940c6b1db78c6b52cb9d7fc9dcf80ebf7db87269c90e00a139d94a3e4dc2d9d8cc46d1b32a289b527976bcf8449574f2ccfd856638d0359d52df2fdf04b0639d3f5ca2ec5ba7cd00f44ff5d8a754f2c2cc560b18c3fad2742f33d8a1cbaa8a8d585ea8ee18b4bd63be4e993a7dc5ed8f28437b02c7153dee7c383ac014c0becaf6284d9eb93580533c547399dd4a9d4b618b7f87bc6272e970e116bee51b5598237776b3ca62b17ba03e0af574568f79308b024b4770caba345d0c25c93070564da9a8ba683a03e8bbf29c6c0a4e1ee5ec9456a1abe218ff19bdc349ea1cbb64584f1a65d0a62f9d1c94d523722bd4e30b70d99ce8b90fda0341abd9d774cc25639dd5ce9748466c9a52a36ca83bfde6f26f5c3a89450e754d126d50c45d959bb012591ade4a2a5bd0e6103356da14291e66803a5a6042aecbbd4a1a081c88a38f672606e44c31c352e93cae93113582953fb5ec2004294ef729a1f2b4f02280b8d9406a60aa1cd18e7a46cc30623e0ed5c6e53460b7e80fd068963e8bd7883db77936ef8c7ab3e12cbeae0338209ce49d9f3aa085a76a9760d87be14b35a349c99f93ecc6c52a9a58da8781a08db71a4d77944f3880f3ed0b013e91c4a0613acf9de98300d4b25df782ddb021af2c5b60fb7c6d85b131eba56ab2d0dfc259a8d2307c8271e63f8bd903f00c1c7e7e0a844f34e27aa023ce62bcfae2be6958eb4ac0104e26f3edba3f30d99f212fc027797c495de02bc822bc647cb4b2fb4ea2967f4a03db96606afae4fa4716126c29f3b238216e421136384b7a19015b4ca25e3ed2af1b86076ada0f084dee134ffea4a06c56dfb7d6f244edce9df0311e3e858f3546ab5616e5750fad7be04eaf32306a156bcc5b49e664b874f8ba4c40a3a1514e5f46c76a557c49e7d94e16b1c100b8e0566fafe36d963089594f5f5debec48cd42219b3ef42fc628c0e912eed45f17a4ee57b26dc1bc6184b37814f0a8eed8d479c7cf9d8f5b486788347470ae17f48b9055fcf084f54fd8ef484b7e3bd030bbc0749513e7ece691468ef0a83bbca847f071f0f09e59b91a49e9d763ad40b5dcec3d7d13a9cf7aad498699848dd0e1c68e8fc2049670508bcd6b21b4cd532f01e5077dabc6f62d4c69bb964240785ae48305f1a9dbfea047791d740cf858ce3f455bf90452ca0c828171b6581e89a33edb3a4023384b0620edabdee14887cbf08d8330be5fe33f436fa0b26dd4196d32cc3251ec740373332a1941311e4a09dc677293224aaf916f0e1dff4eb7c528bb0b84cafb7208413729b17aac441df021ddeaa9a1d05bc28be8d457ca21a9dea12a4daf5c9314b5c07dcb9924e6024eeac2a0863c911e5d982a2f6a5f36107461c52ba59486201d6b74b03794bb75694e6e566f63a43d5205d51433c1a190d1f76785a75f5c8d3ef5de58ad514db2125ec2034d475dbb5ea9a71a0e0760920716cab67688539b13fd3a3fea216fb943b997df120a59c2e99a40803ef9b02448e35bd2a3bb3c25e8de3e8777c597026ad10ceb97dfeceb9cebdb2770e52b9f060a38ba8104da3a194e7411044db4ddf33c759b95dc8f807907ad3377f09026a0e91a2c49a15c03111eb9911f59176c819acae2a4a5318b321e8c665a90a87e238ec983d1993f24ea2936a891e8e242e93545b63a248e43c382fab6317ba42a0d3352af0518fa4685d714ceff411d06cb4f7d9e1535fa39061c6c0d99cbd464c63409d2f49f51b3419ce33c014b475bb2a83ece86f8188f4a00c768a48ddfae36e99877328b95e7f0c975952636be038eb4d8fd4647d8a2d810475c5d799438b1c93859e0c0926ac4a3ca59d87db5ab4365a3ee2209e0bf4aaa73b636e187bc79b2c83d10036ff7241b800e7210a825b91026f29a93fc768296bd9b50192b3d47c7e0e5acc38b067afe50369f98d7eec78a2284e6c0e4a5fb6c6a6160453e47db5fd422768d522b9339847d01b804f00e419de970394baebd988a219284c4641fb783ab643d844f222dd9fcbf13c7706d6e4739cdb45628986af35e7bbbc8eeb5de39633b53a3adb405930c58d830f5d0f0f6ae043ef364241c7afe5dd6a32b4c8a8f4d90b71e05999a7884867224e989f89cf87ba8869cc803af2db3354b310d2a7e335198152289e01a1504830ae4c416270a71cc1665f8076c21bfa35bba16ffc4e4eca9873bf0e1165a93450a105f9c02419605e296bb7cd263fdd796277ff1357debd0d9e190d73682b7736dcdb2b4b3e00b425453a669cc2455042f964f1c3b8e2d97fc09264c299d6ea8a59deb0e06372252b56f5f26b579b9b6f62a10e605a041d32dd42c5ec6abd42f0cbeb27703e0fd0d9fa34167073720cd65074492f5d6aba70b0e7fc5815737c131d9a1da9a6b29689b4b969179f5366ba74d8ccb29bd12fce73c44730cf26018534ed4ecb987dc0b15caf3822dffa7e16340d504ec28f565d497b438c91e2b0a814863331330cf0a1698def3c125e2cabaea9b8d1f93a7c1eff46bebbb2f0bb9782788db326f13e70ad0aeb12fd0a2e342b4d2c5d6fa861ad906d3f057287124fe99a59d5fc2b96527593c0bb600a06bda3b13ec7556dff204fb258ab99c5b5da5309899df792576186c005066fb25f7523502aa23fb21e3ecd4d4e98d2dc5782560e8b7409089977466eb8a977c8aa051291760e82fa8255a201ac4d455e16f8a0ea0046000c97202a9620a5ee121a40e404e14372f6320fd179e215d27cbeb0044de5405b12c863f50e1e6f6825ec57b3bba73cf976ae71b3b6dbdee35f22053f7cad811954c895e95e541c7178776415300ef2e617c2105746a3760c60972de3e9a2042526b082936240ab91be9a8ad5d7383309cf270fe28915fb0e0154fa56f056d8c3818780f0cc6600b64de32412d09ea28b118e3549b1776e2a03fa908703a4e7da001161495bb1924e28e123f0f0a27b001671ec037b6c558967779e722c05cb2b678f7daf220246dcf59db8a01e57fc19131f2f8d0f166da514d2
Message : eeada9e0640e6074b52d6dcf1d1508b96a8617d154531f46906bbac508f6ac93
Signature : 6f69933c369d66ead6006d4420f8a27e533df396ec86ce65610161b2ea80aa39126d9113347bdae0c843d93d6b4174c05f68ed549e0a2e9cbe8037edd628ac8a2244005a1a54a3215111415aa5a5822a41155184c6482928d53602121a0d1045958410a88090d054a002955025a409024015124214051a8a48db42b40950da44081b00016994a0a45215408b145288a4ad9048a58a220144091a444b03a429a0908000a515885688a624524654092002a56da525441b82b0a0104500aad52642d38626246935492851008ab63428810a40a78402914212058884a0da08d10050115242141150a96a2900415b0dd20200155a54db424b028da8124214514da1a121142111d14a5195da8002d504a420221412342244120d5208490048121254018004121aa03411d106da966a14081a5a842229288d202d210949084934dab60844a384a4292d2a10124481d29256a916d04283b44120452341aa68ab1201529a140a4825030d42aa2450a148a54217244012a0025509411bd002115a122a90a2505592b4d1268952488a44a240b4dd5491824083568306100a156810084d2985aa08420292502d091480a20a201a446821a9904a05640b8a529a0212052028d00a0d8808d1488226a5422008282844244a9a56159a568b20202110550d4055d0d22242218a44282da0a4144d45a92441d020640a6d5009806a10d04612a245d19690066da644a084d2aaa09440841469401a019a40a8165a49124a4085a28d34120022d096a6d0a06d44008d44a4d12aaa34b4882409aa682a41004584244a04490a4529aa4d35904555025a25a4a02004104102d542d0684a001a20421112da0a5a888084b45569841241129a22455456239208b4221545d2a48908aab4220984040428a53444db08db50c4a41aa53484860845081a84a2882005ad80120ab41a680145885a0169b50a44a21081b6c414aa5a552889a65115a0a9042aa2822241918a2089a0485394c6065025045d8540908204241292509ac80622454029291a6d4110284d09419b268424aa09086832545b592a4821224101a59402012dd12001a2002d6da00802494351a00d40db208568804ad042aa2d5044a8a692040a2245145568202882d2342441d086761550a009222410d2a82411a02d01092069d0165244696949940281249428041aa2488a48419444a4292801024565d0440a14a40d8a122a680622548104685ab48d4021d55451041a3411a4955415b481a4421168430220d046d08a10022534254a4b052d8a848a4208d04adb1401ac845020110401a5a0112d44848a3612140551a550898a405584420aa12d12aaa445088040db0a8136a2b480040da2441a11b402104d05a049833684046d298014a8aa22a9a01a4128aa0a8912242822548452145ad5563489141d342d4d51aa8256254001488082569b6a4000246d14aab420a0144d812805140822948240a31aa4080541280a950650049180343420141550a5a11111820921d534d22c481a1189521ed5b985ac321adfbf8b670026c9d88bca67c9f4d7ef5aa3d7009e5365fac84f8fef07ed2f9988eb5bbf9eb038eaa304e2a0d12feb0240371f059749d4441aca31ae40e99c09ce765f547c61c9990e4b92ddd9d4ae3945f2e6160a19f8cf978189afe3ee834383909b919a3348b6b815c7d6cf1a0aad9ea19e0f845767105ffbdf66dd85aec32e39ae5b4f724cca7ce40220eba5a97c69619dd6dfdaa004f822bcaeed79ad65c104859b71f767f049b398b36ddae43e35acb46849d3ee7d14ed0dec96726a749380567bb41a3adce29e56f24790bcb91d18aace4fb54a5394902c095bb15346cd2b9f8301e983871a9bd612c7f00dbbb6776efa39abd8071129e68c7e8a7be01223d2a6d72e9fedf12e12994f5706787bdda68ff31773495a11e573584eb741d8b4dbcc711e838294470253c6052f5cd5bd2d3b0b399fecc7d9d4ca944070f56e59bc5c8b537b3eef6d087a1997b09f1b9fbc230a1366124b3598d1eba60be60a0fd18784479914b1f22e86ad31fff404d534c9b6cba427f63f4f4442d0eaca24fe75141c16061adb7f2303124ef43db0c7c9d06cdb733b0541438f748be7e8577f3aa998c921d8342459c800de24669478a62133c143519749a7ecaa29469772b69176dd02021bd16d9c583c4f244a9e75ad7715829db91eb0830a1a57d6b860e4212e6228dfbd7f99b5d8583d19bbfa6fa29b7fbdc6889f081bd73b2246d9b70ac9db27a99a9b86b92514825afb863486e8a9147a350be392454d8b88fac0039bcd52430fc5c1e51ad162f1c1df296e5bdd913a101d1a378286abec087bd205e220605c09be5577b2853ba627cd5c58978f81941debb2adfa422f6c38bb0369af4c0ab33348e03bccd06b1718a0e4ed7e5429984fee1069f48a2df19ecf05b44f69e00b5845b8bdb92867f326be294d2e1fbd71dc58906ae9ca8cbac1e7f0a9694b633023c037501e13285223ad75c69c3d7a40aecab08fd5c124bf48b5d8969c158f92013999048c9dfb493320bceaea470565a882a983855889c7ee3bef91826196c91aa08fb022cf7ccb760eac381c19108690f0f09e4d39abeb37ffe18c4509513f9fc68f2b9927cb1771adb154b9a85a71a95abc1b16d66b3a2976bf2c39e287845ba8fba22a7e4264210bdb6fb75337d60b5acd8f2dcc10e4e237506a3f5516506a00734de701f512822a95069c431098fbec26ae88a140a77838cb7f24298b7aa1b2d8621ddaafe696e9618790ed7cba10f9da09fd1c8a16107be8acee44872d391568e4a2b6dcfad6608240ede17dc0bbd94f81f55554511018d4cc4ae79084d4f5b527d880726926dbfb4aeb6c36cc09d14e479a4e749f0c90d05075ef7be0787cd2fab649051dbe9f38a88859c263c6db546b456cee1f225b1edadb06d5b50ce3e8b0095c1c19844825fcfa690c4a007bfef739967c97f90c43b38cad4c51906a37b8248781a734425db682a39b71304e97067b26c1a1015b0f82309c9cacdb91e0053562cac79bad8cf39fb3132674a4e20fdd8ebfd48a2889c843af26a4c6245414677bd556bb35cc023c80e6e5940ca6d7e2a14fb968299bd805e196b1185158499c27053b5eb768332a74fab14b73d8fd52ea6e1ee56e59bda37ece1a0643d3334690cc0ff7a94d0f3bc9de4225074ac08c1930f144dbe063a4c6c7d63cbb065db7909bc12e74b6670bbc8384a1b83711ea6197ffd0b40a7ede109a14c1da3bfce7fc619f1afef521ae6a87b374a271eb9f1ee47b257877be093844ab3290565514391d541de4113ec226abd551c8ab44e56090a588b2e72cea7ac063216118584479a9f1f74fe67242278a30b2f0f4fff767e9d39e029ab9943fc8e1a063d9af867d427594604a6a79646ab6aa6d6076d313dfa24d9ffedc505f017249776d4c3262872d955b633fd53fb30e55335d332aeeb4e4574c8537f344e2668e70d526085eb094a1ae8b6a181ec8c9c211f40a8a0a5b5718a05e35b69a4da6318c958c38b7f2abe1d62f9d0c002b3a55bf73ebf232bc97685e186a8d0ae9941228669cfa1129debba4bc45c847f0403ab0f9248a7c0cd740d82eee63909ce0f8f4dbc223a177f7177aaac83ab4ae894202aa8a6b6e4eea1c4e7fb442ea518e1baa7748653b8f2339260e0ec9a87c430d85d4ef7890a712d5317b8efefc07f28d18b9a13994329d4839c73ad672dca427e0baa3986249ef2f94e0233a002a346791422b39dd8f7e1171281e85f967157be8c01050286b9b47b88eed3d02b5d88c79f0812386a2d10c255542d0da8c9288080794a131938472a47f0572de28767c2e0936664c082f3e0d5ac4c0ef79c990aaeceb5f79b3ba2674f46c04945bacc0138bed6c3d7517966df60cc9fd8681b4c3d97807a6fed49b71d9187baa3e20e9175608b941f89757caa40fcd713e1bce150819b11f749eb1272dc501ea9c300bfeef99b1ccd0a99ab60e69c472ab092c9b2558e04770f07ba737463cd0583c2b97622375cf1511db62c26bc6623c7644d86453c90d35b6079ec90ee9ce0cdbfe7edb5f5dca599e2b5b387b9fcddccb06683160541146176ac0235a363580b3ed4d9b384ff4fe87d46b96f374ba70a17634101fb2ea7c0585521b2f337353818aff60ad1576ad33e87ec5448fda87ea956b41d6d37950eef60c3864364b67b91b718b032da31ef57fc6fee85c716635607e0d9a76798e622fd79a0018853cce59d0ccf2d24756be3924ddd8f15b25726e5648b85389b30c30c58406669e505676d15f350d0949cb834cbeee7769932ba64952851e34ae7928ca56cbc9a17b12501937c63e98a3d91777fcc1c4c3932cd4ee2e0b7805403a1062e171b26bbbefdbf65c284d5882c267e3e7052b6da0fe988db25cdaad10253130faa3aec572767c64acfb38c2c16ed6ccff18fde9d70d8ca14891660f9332a06f5423dc29a7dba8f5e24aebe56dc83a3bdb73e0e9284fd028fd2446d7c0e83ced533fe1ed8e5c6298c7de8a1aab90f42226a46e698c895ea39e180202b9456b1a37bbebf5605d31ec863d9ea337ac2fe1c032f3441aa7c64a8f82f130eb89144845d720d6e30abf16aa9661c5ecc1744634d72e1c27edb96dcbe2f6e124d58959ac233d0a23508aaf6ef0c3d9bf93b480fac291f98eb3ea64498f5b37534c8529e806fe13068d87cc41658d44af32d54d5ead6f43d7f378ec10690d6a4168787f02537c9dd4901463fee6c45802fb1e26ae535cc8023f4b2d484e7f3d32b4cb7d27598f28597b72bbc6a50b9306e942b3aa7a3f27946d45c391c946b75f4bfd2a436b4433d03756f78c01f7157b600d3f6ff7c90fbe4119a8c509c0e892de5bfb0313214de78ce21bb4af16e476c50330f1c89d2a4c36cdba08bb579531b84fcd0c616d6ebaabbc8de18455b7140ff5dd88a64af6bce71a583ce2982cbcca3251c962edd6e3226734e223114e2a51c305b784b548df30b5d0b86250b9aac8a69deab399e04d01fae534225c7f66b6b9ba1f6d64a39bf5a29dcb7495b204ed3569cb1fee75cdff6f61d527b87cfc0b78da66a5b6193de3846b0913c3ba5bdfc951c23e89956725a1ce2bd5c8df9a9c99d9594aaea2cd5cf650723c74a63e2132ff6b1f339c4bfa18ed071a639141a2125e8dbbbc04840796036adc98485aa4a7027fdea3e62a5dba1bca69330ad30aaec1887da3c852eac0215b43d32952095817e02f2294b0ff50c9e14b363af1a5b5c97aa5e0c6bcfa728076173790276c6e62a8075bc4c4d7a57be458f70b9d92a0231bdc8880ed182ef8c049ec99243c1b26836cc8913bb49b54c23f04581895f74b21bdada472eb6da128affd7124a3ad00296c72700ec69abc2da77505faf3a557c7306fc6cdac6231d395e9a9a09b0014564a1c59720b69a30f44e0e16a7cae9ad485cd9530612f0452ddeb8650f146bb12c18e6e417d6a8cf3af9c7587d2874a82ec7877a15c7253d32ef35b821fffa01d28c6f21afeb76b16e646f11a8151a9ce3bc2942ec37dab57c31c0bdbcbfd8cf7bbbe45693c3c3ae248cede071222d9402d04d28ead7b81da100e940c7aed3847deef29e4a42ab6cdaefa4dda8c0e130b06eec06a63c5192409435046ccdd6a8605cabb69b4f2d855d4aee7eab41c257063ad4186828010d10bdba1e2c76dc8904acbe54f8e4ed311721a5402bc570c2b4a914a3f60225d5d41f428831638c3312c404e2458f9bc069caa269e9c215d78ebb9fd088b44b663a121e00532846b5629336922f0a0ce1c7631eda34680d1daca6a32123499471d85f59925a10745520dd050274806a41d893dcc535505b570f58d41fc2cf77824607d491785c6aa259bb706356838910bcd1bca1ba4f91aea24de7dbe84f212e918e635a0bf202ffac9516cb36119cb8a703a487ec5f0369f47f6fdf688e82543bc49f48b72f000ce82350f7959377a5c8ffea38250415a73193a44837d1507abc9bf1bd08f078f27b58667b30a81a636f0fb0283b729902ccb89ba411d19f50c0ac9b2d8d209fabe95647828e80211d7614c3b915781bacf73f02185d89181c4f2a330a7018f1f5957aae2f9c6278f875a29ebca046d69dece79c12c0e00ac33b35093d676077167a83dfe90ad117197f72f6ce4bfcc8b4a4e8f50f9b4d7633e2061dfd512f9e072b29e6ccedb18e80ec84f6610c0e9d0409eaabdb0b5f84dcc9f3db2c724cb964b9f5a28af55ad8298ad602d55debd67e0d4bd50a5d94be917e8bf4798cebaaa4c5b383dc905652c60ca0d186674416f1657b3d33ec5a02ea4154fd64555d1ea608e86292e856b1c45399a9e7617b6d54bb898231e33dc7699eca63fe77c5f4154d9520850c95819dff5a4476bb7adf2f7e9aaa0f9275b859a7eec75841211578b529438aedeb41c86347fe932fe9b2a4c31288112d976cfee9b054b5e36c5a9013ed6b5b2f0986f8992079a0adb058474d024afbb9b74d2056e9fd98e72ff5a128e4e2c5d6c070acaaa714fedb81cc68990145d789982364131247ab399c6ff88e759b8f7f5f037d5b72ab65c5e6b21b2321e4cbb75714a8c9bc6af1ce9cfcb60173b7e96a0537c7b56b5c42a5143dfe32fb895db1846207e7e5c468602d1bf0db95c93aaff110c6b480f9e4fb9e1f8329fbf812e0379d94edf09fe72812a884db0737043e12d92096483663f587f5635b23c1e40ff85a50902f1c33d0c9a2e5e97e6979f8a238e2a00efd04016c255caa98986fcd89d8cb6197ac8c4e0567b641937844937cf966943bae56db79241ab62d975a47360fb67a02ec49abed04ba3884009a4bf1657fa888f69f417ccc73f16d09c25b47b41b45e6432cb523970d99553988b6ef1a909a824e638ad0c6728b28d95699631a1b3978953b11f9931dd59c74ea35081c94a7aa3b27bcff20ea0311630ce38f5287f01f0440f9a89211274914be2398b87654a9a0649d7b5f7dcb7e836bcae46897f671e550240412eaa98188921f5037b921ee8f91e502443974a830fa429cee9bbe9c14b79083cb30f2a7ca509078d92238163950c113992e0f411327efc285b0419bb48cf7dec5ecc4e091c8fc0983c843400031a53935d9e0f4b32f580bc756090d02af9b9957531ab4303d3e63420a7ba181a0ad20359d575bd538e78315a44da13addcaa34893a26f84e215441dbd41e465dfbf30a0841a7c23bcf9b7d000ea525169d9309ad945f04c572b945dced69bad01ed26eca709e31c23e27459914561d0ea0688a93a33c3e968844348c99043aaa29efc18de339132338e6132da560bb546a443b517f06867613e26e172b8e4d297abb849f390fab7809ab87fabdbac2b103bc043202a26f2027b9c650633b9e6f4746226d1887a24998a8ed27f47640e556a5856265804d27e8f629f37d6fba7258157a3c4349d524a0718521cc8cf5cb6840e42b81ccb3f4b461b186e5216aa87840e516755cf6ad5e5cc9224c278b6304468df692b264822c7878d6ecf67256dcfcb5e6b0b8078b5f8847a55a26573ef00f32c9ac2b5ef93ab6a905bd5d556f2fcdf994979e92e0446174a65191a2d94520a7e09206a986a8cd96feb7ad4a575f140a9b4bf7e32602cc8cdab3de71df19bceb2e78686e0ed2c5c449450f8e5b608a2dc4664c6a065d316adbefd1c3da4e22815cf2e836d9239878b4af4f0f5d94a546be0a121d97f0997443f32a6c13122a61f44182d3d2ebb9777c622a558bf4fd37f0d2c3e1557d356ff5039db72e32adcb682fe53650b35e732cceb56f3e9f2fb37c092c93590fd6046f8ec4699efdfa7ac7ab68e13fdbd502fb844d3aaf71abd6b3c3a5f3a3026b3682d0a15c1471a208e94027ab89db9d754b9737ee8382c3eb75b5a5e20292d488f3c621f2345ec27cb1cea11713f29785a6783a4e5792cec83c2c2276c1bced5822f4fd2ea62fb5ee6a458a40b5fbb55d2acf545b891cfa1fd07c707c2a07f80e04dd473faf2ffb502b0add31c5c247672928ed1d6c0d731c4367a738f766db53cdedefa35ed38a046f9bd2a8a65b7ca7a7ef466cb66f48e04e912b31715e2c24292c72e2ee886afa215c145e480615f1acd491e9e81fffd182ccd6f4fb6d4fb5df2ceb50f1aef16c7ef81c4189dd5d580f8107068edeaede1fc2bf24ef7dabe3a81085d185614ddea460f7a4d14c759d73bdefdba8c2d61192aeb5de99da849dd9d1ec5ea20188203dfb377fedabd20cd4a89b8a69d08d969acf0bc82c79225b15ac19762e57a2cf9010e6bf53d5cd441dd38b190db6a659acddec3012b83930db2b3f39383d8f5140c08252605af02e13e78cb6c87736cc0314097b59f5d3756f3c0ab29a13b28c83907b35075e5a3687a481494936d733cd0d732e6a8df06cbec5ba45bc948628e7667694d735ff2709bfc9ff7b09b536712d69a059c20ce0ffd124c3488d9a1b9da12f78cdc77d8c5750e2141dee816991d888ba619b8eee913ebc6625a7701ad843dda4919227695817397bea6d0d4b4ae67b89924f143df5078769ef04bac49668f11d9b19f316301295c81084f15e533299060082b4f3bb0813ba21dbe764c368884577b4f8d72d16392f17b185b12bca52b176b07d874db87894472845ea5b9569e28697cfea1e6c4914a6e414e8ce52534c3799bd7f87f802fbaff15606a3504b57c03b768db1ef8e19eea81ec03be6484749005523a451481fc03fe5c24bc78bd2a9e50bbcf54cdd00dc0f168da4f9936577ee4f0c5263cd948af46581404f0bd344fe5b7def9c718692c0344a54cb7087487f7ed9d17c9e84f99f177e44e028211b814b3fc994e39a80f910423fbcc340dcd4d0b1a161eb98d770cba3409add5344375b19afdc24c7400e0df0d06d5cd8634653667da672a98e781571b97f2af54708a020cc7b5cb3e96c80a6a5cf0abf94ef9e05333591e9f7de85abe418a4ade7f727aa6d2de74535f3998f71f8a728945b1e807bb600ba12df2e689d5758562562fb4d886a8dc8db0872bee038e6006b57add9d9d1fe0da2190ef92f6136e4d6ad0b8cd1ea1ea3f3c87b5d0d6689ef909cecf85660038572a2745f800a2d6fe7ade7a25c7cc8a53186ed5ea6836eca12fb9a40a85eac99a146634c5faf9fd0c312d5c073e7e5ff6d45ea8d59b1a770f7c3f3c46312fd17aa6293ca6eb6446bcddfd0249c594c2628a779703b6fcee497151e9875ee4dbdb62651be16bad48e65d286b069da65a095e6882082a464744dd3464184dd8cdfb34803ae1ad68103d9119397f3579966cb9eff4ece758f95e9d50f3decd0dca2d91b4f368e253309fcf6f830d97001588007e8c1fb666e9bd7ad1549551d4b415821c3269549d6c0c58778c688890984825e8900bdd411929e2b6b2a556b9e72ef136ec9d96160806f4a258ee86022d6f3b792be62b25f564c9198f44269cf4b5fe4cc9e2b40d1565b29f6bfccdf33788787fca7c13ac938d585d0bf31ac569aa0315c21ca1e374f6ea691510c14c410ff792d4801654a762427f210322901a42809a23839001029a32da1057a8df213457682149b1b140df8ee0d08146d5f96191923d37b2e1170df4ac33abd8d7eabe0efe850143a248760cab3fa79fc4ae555d1e2c93be9650cc6401748f5bd26d2da663163b5d198e0cee07f0f2340d3fc01c4134ab5a70a65c96843cb489656067785fd0e27bccaa64631eec1a6633edd5488fa8d7efa02a841637bcf6798970c8929d7f6dd34eea65d7c67554109b8b7e0523fae52399ad32945cb8bd2623d8496b71da8b1605a899f3fd744b892d9741b76e10265d73576eb9d897cbed3c4aa81a274238df430f6297d351c6faa1b45bc309b1fb9a08624f1bb42ede596da10e012884ecbd61a52b765b42dc985e398ccc491fdaa05933a41ca4fdc1f57560164cff6b35dcb72b9e3ee87cb2296654669d4bb340dc66ed133de706637bec1ea25f9a170ec2a35aabbeef0457ae63deaba419688340fd1026a962529a596bc3bd04ae52e649b861534666246d31f5151d2644664c3339d5b72960612e09467c9b2798dfa5d4d60a83ed31f96ae84ab424dae90ff777702ae8f89df1221d9388af27250e408d3a07d6e4c412247fcb08626edb97c16be34dabf5593b7bed317a9dee861a2991fcb7f65e537ad1e6d37193866fde52947b21ec525fd8df079822349558de0367374e9e5324cdf43ef571b9b28db02a9d9c98b5cdb563b4446c7e6698c38c9c42ab232e124ce53e3409a7c9bac480d8c42ac75aa5e2ac3039da7c1669e09bd11cccbcb02b9fa231d9ba6f4f7b3fa4a903f1ed4b44ce2dd5ccd1a0a71d41c1d0da9e70fc2998824d540b6a9f27b61c798f9e1619eb28e25855044f8de7b2964483fe8cd7bd0ce82e909f56fddd8073ffb2cbae2d484d797cf29fbc797793442cff8edac70b81d353eeac418b87143fed2728f975edb96014fac579d2c83a11cb466dfba7e0a2abfe786c39bc6ab2414bfb4ff4cdd29d066ce3bdec9aebc916d510902be80eeba1b531c2f1be48f47f4638080b8fd2ca2b389c3aa2520e2b79324c52fbee46f04a43ad6c8556af3cd547ee03fe13f6884077a1526babe48cc3487a377884a2db93669a52b72562d27f3d203161236b5a04b16e9bb3eab7cd8414e474704d75517eabc03fd9e8caf686d3870204254a92018e3ecbc54285d6d303ea04514379e74f7f6dd0d10a92440e514383061298fe067ea86e10ede8bf047dd25f9dbd446e461930b803242825157240a651493acd8ab57e84c0c8d9645374882a29f6b241ee9709b7e20052c7b3c1e1427e58ca6463e1eb1a8b93b6c896354c8f3a2780a4dbc07e6a414fa161bce1e552bb5b588288ff6a4707af1f2c888c52cee3d89a6290710eea0498d2b5f026bf5bec33761cd6ca6964640c644f38cc63562ad5faa90ff3e632d3da51087a40995f85b94724c8686fe2e55669fe5d207630a182b6942fce16ab9ac5bafe12d25fbdd38ea93932af1b04ea03ea86df4f322976424318b005c161b7973c21deccee7df9f3da37bd72708df14747c20179e0cb0892ebe5cfc293c65d283230c96d1c17ca80a96bb4fe38b77c385d7e37cd73fef38eb8a0195328a8c5574f9713cf52ac8e63254ba6788703676add7ad711eb88a38a10cfc5dab0e4f01eb37fae68566099e6c8a58feb4d632639708145f307f95485c3cec8cafbf60a754134241e8c827c69ed6c3746ba0f3be8b6b14be4ba1761ad9dd68365a0fec691ccd8254c0db5d525324a2e4cde40a04436016e597cbac52e4366d71c63c12035575f50e0839dc889070d78abee4fafd284c18398ed8be4e21cd9c41546bf7633028eb76b76f89062f4ccf629f528d7f7465e6df9b088a72189f4d20110b9f7aca85673c3a7fa873fc59d74ca109b7522bae1da30a2fc80809242331dbde254fb0072a6ee8e8262ff8dac2f97ea1c5d85e909d2d4a31df370bcc5bf63d6153865526b2c604d9d19bf8a565568df5641095d058f36488436694fa1bae4948f036de178749fdf74feb9ef0d579166ce9a555bcdd5fd3a6a1d1fe0f5562fab5071f587d529c7a19c3d64ac8be914b17169ac1c36f132fe1b84d15baf47583f325e47d80d5bb6a500335ecce09341c3733208358c4a4b675b2414f13d6c055f02753e6af357f138a66c29ce193cf719a0bead5682ce2d01a470ad0a57f07eef296fa0eb718e003a2a3bc95cae1692c284254e5f7e8d4da3e25e768d585100cb3abba5613688debdbf18474b7cd666c8abf4e87898b235e49ad410404724acad5cf4da0609f2e1f172ad338aa6904f2821b25c97dc640d8e5b05a210761889caa18f791686029dca31f50229f6050e68e6e550b857363e97aa117b19308f94642b49326eda0d3dcb6ff49151c41c8f5415a5e9ab73772393ce4a0e05070bd56397ccb84a6e97058a795aab80f127e2e0952f817b55e29ff29bea08469e8e817149b46d8099af4111a3e974dc1d1b58854a640c3f16adabd01c76a39777baed12bb5e3ed30f0ce28d6705352035bb98e3f0f93b6dec7013efcea01a854258a7ed3957e893230ac64db15f5c30d83ce17d9f8c2ce095803cc8db99c062104d746490dad10533bd383c863a2aeafca56ab783eb1b24b4679387e35c4cabb9bf19d4dc826517a99af15350dec1807ad50699083e1135ca6d28d75de222c1a028c764799aacc5deb20c9e5cb1be9263eb2153b530a00331a449cfc048df5196fc8f7474e72f361f8bad95ca740b613848383c1ad4775203f05aba62d203be520b4c21b85d17e649f20e27bd45754ad95d463604513f58a449d007db89bd20f9eb986112665ca87ded322a366a4d49387a5c9c19f9f6297bc31e8849b8eadeb9bb53554254f6365ba2342bed2f6ec1ad7599e68319e5fe6f87c784a9427e68f103b7b7c29328c9bc244c4cc5a982d93f4f0278c4ffb81aebb11eafe1ffcd25cc6832fccd7c2759db773cb161ee16fcb5a180fa6219c550f9db67df0ef7bcd69ecfa951eab0054c0fa0c52a604f91362efa6fbb272fd5bebe350cb8cee667c07609124837785901afbefabd603a60d75523db75d1836dc150c4c3b93a0c04429399b8451b326b594da303cdfb4f09c32c36ca2f5816760143ae4e139a7f257f5390fcf319e65bbb4072e175ac41bef186e4c4c8d9c5f99f8d972b02b3647f321f59c7258f087067f5068885483572e5b91dd9050e477f1bbca85441368f7232363c32b44bcc3ef1ab6cd511ca00fa7729fa81a10620ef29a8986af11f13b758e05f036ad465de68280e6c58db04363d643b665d9d355f8e4fe76a65001855f15527c819186871d08107d9b8d7f0d70d702cbb20a02cf95505dd3b58fa6b4d6ca3c8376d0083faae8d50149ec6b5dcde4fe24f130300c87e26f4958d252a2d3254625ec77bad9041d71a17798c03e554173808635bdc9f1363d1196618de91a71c9728b493ed65b0fcb2bffe6ff6ca984b5800b0be279fb42844de606a90caaf3a0397b7dc2efd48c432715b563cb69a2312901feb81777e2f50fd38a6e7ba09fb27ac13e79d5e7fd635bdbdd83b13956f82a7cb4a249476bae08e7aba38fee05e64371bb9ba607a862430ea63d23d92c2225e6c4cf9962dffb5805f066a12ef09d840d5ddf34334e6d4b466744638e69c53a2af8976460cacbfc2b0c70b434375841f82926a9ed7579fc855a228cebe3df41cf20ced6a62df31f5a93c577a4e1cfee0afcbd8152f9df51017b22e63ab5c991334ba650a8fd76e8189e9b2866c9a8a3af057d01744b084da1ee0dc258ec769080be1d9d36ad34d871d996df3a0c9d308fba0e64d21befc8ab541de14d9d2465c010e8c5eb34fdb811c3125a317a627656d3ba5d1635ef957f48c0296492a4e16260d335c8159b7b39e48c3f26c6bd688f970a948b9d957b82391065b06449fce9d6a105acf445efe65784a737acbb3a250d5b3c4fbbf128de4c6f591f0229aa287415feaa23a7949d9eb0d1942228889becb92c64be93952383392480673790e4d96c13ec2e4c3beea8af0787c5bb772c1b98227de917791168abae5b375f86451414295264d9c1d3615023087f0005f3ce53a5974d7b5cd52306a8b44ed7fc99f61aec256f87eaa8b1fcf0ea3c6e64b347483c2d6b9cad8675252f6d809a10a91fedbcd9664db3f8af6c1c3a8f6ef2848897733164301e1b1b7e0318ce4d5233422b6ca6ee7cd390a84b81b6ef934d68f715a7cc5078814a0fd09abb6f651545a52081f46c8670d5a0613fa52e9183f5015f291a77b2fa631402d4e6142013f1ea4a355326c6e10d543f14461bfd516393e4c027ae2135ad614e80240245f8cb21e61b857e14df53db059bbb1c59785a49389de722864e7ec5bb8c83feb8e6ac8e602bfa0cc160278649bc060d65ff022457880c66acb6a1ad0def411d0fa6a86ff9b4d2c3c0d6389411c485af2cdab53cfd4b4bc6df2ab2c4917cfee113a6eabbcf97ed61a9f2a5ecc5f8eb380b415d8e5d2341b2a7298f246bc4021fe99114ec9601a4948d73372a76e8058b7f2ad03425972933af54a84f1f211e914ba96411a9f0eddd8c3d240804f636ce76bd7b8a5836b9d5e28f4a97f976a63e06c1e59e59cf720922b24c085b73402135cc34a9a3c439a317f6ae620c3fc5bdc3fdf96069f3c3be3e72728038f765b18c44f5cb8d0f1b4f322cea47bb54a74113747472f4bef6cafb73a0947b4de2540e49f144a554c858175be510d3f91e7db99f01fc383de0e66513702dff26517b628baddc588a95d28f2189874ee82ac3eb627af578d23dd71be76a8824616b7f288b3a07cff6155134d14f9d164e55528511b83b07f69974a9a8045ace6417e6e7aae5db7e56d0822e9afa8a85897838194f52f56736aa86966b3e6feb83547f0817e47b3d30273c139143d9d98a754e924fd2298d704d227523bbaf290b0e21ec6b101e57866efd34cae459c2431e8044d7af30cc8136f14ac37d0ab76a628d77469173f82ebcd870da58fe8210c28e348254f16cbfb995026f426ce9068d5cb0f27a0f55d2bdc53562cda5d3189adb84a5657f720b41d7a86dc886faf6425332cc2779ef779b41d989bac841d4415823f30c71f05a31354eb2974b5598c38ca941b33e38f213bd54c77b6f7c6a69936f958604e8f524d6b9d41ab2d7172ebb8866128ef2c780e660edfa9f48a3fb5771a29dcdb7977accec257e1a12aeb59919e380ab7b3d379ff94e60a99e942b35ccab4efc6ac71a87043726f01d9abbfafbd9aeb626842be26617665f2f211e3dc1a35aa7d7c878d63640199a96b50f0f27510e5ec7fa03c2ce37fe140c406d785f66fb7e2768d6cb210f2a802bcb890842c4d4cb09decacce3c478572e7293f4e26066204e6f591220ff0a11db94fa22ee4876455a43ca0882fea5276efbe084454daa5925a5d57a9082fd4a95da404cd7b33c0c54b2a62862dd871addc624caede7e54068408e5681b76ffa8ec2b40d9df6a6bf1c383702e65f5f0312dcb7d13f4761e2e25c75fb67069768b2ac3e4f756aa8efddd5c75c4fcb68cf07c2a0074050470b8ee60c9e44385fab5408911f133126cce7438c199f444bd1547754b90c6eb1098d033a8336dc30a26af1ff2c235693bced633ccdd46f6a092103c26fef4a6455ffc63c5204f52baf10fb38b3401ae2e518f73942d98a68f0aff0ea2a8aed96ed254682e2ce7dc10ca20bb7c59e0164613dfbc7fd462f034108d3ff55815d50a57731a8a692a4b6c83b9919974ddb4a16d4eb0e23c3a718e466910eef46e36cddc92dd8e41b4774026e939d33cdcac1844d44a4238416149b0dad5ed6c4165c237c14ae0d72c2d5f5393c8b4fa96fb011ddc144d9cc1a6ee9b72677bf9646cb249c82e95cd2bda81920f5a145bedad0e3340b496df66607705ae6cf70af9642792766088a011652674b334355374c199e5a2182107eb15cb1da243b7a856c479f129a5b4b7d3d64ffe2fdd906c7c4bac5b3e0be9a06f1f1fe702c4f23220d56a607d7b967c91b8ddef5e411b5433339005db3f622636c1eab899df8876598d70a4b26f6d7e8daf6823f511728a6a8c8f2176c5d824558d8fb1ca1690e4b5e8060a0da8b7afad6cd13ae2b417174fe88ae472c8e9af4fa288fe131c967469ec3d5f809aed1ddbbb458a9da16edebca6d5024c01ca9fbc57013d55a7de474fb7d490cb312a7f2e56c61d6bdbb00685dbd651ffb15b48885beeb92ef3652153c28067c15382f548bbeffe2c4699a6987d30719c20aa0bd6eb340fa35d563922c9d7c95e2d20101abcccf41d3a62531d684f004dfd1c1c0eb8b1a75cb0ebb65b2db9e17ea9211e4b03896dc710df7295bce1ed358f2a38a768d4a2267a95f5596d99bf283b6c41a2df94f5708333995de7574001c4373e5297ba3ddfbea6a67f5a15a85166feeadd95befbf64a033f59c469bbefd92f1a23299effd149168f42530070708079d52b8219d521651daf5e670efbe3d0c30da34d27ba4592ce6f85f0dd6e8fbd9e77f6b28e132793a8cffef2bbecab4b1daf7dd336fdcedb24d9252ff4897f0b3eb468a1ab7f6436081220796cf721fdc23c2ea135101fac0c9a923b0328ec242e5b0720ef059754f79abc5c234a93bc243d8945c0b0cb8978fa3f9a087e56c39655a4eb198896c8caecc9f19aa2b46c7f96aa6855721c895bd03461bd48295af83f832392bb4a0ffd70d96c55b30330fbfa7f3bae91efdb46f3c21d0a169b55438e2eb1ace7ff88bbc692f7f5e76b7d6abb9a96a61ee0c0d37261aa71360b3fb51d6e0c2caaa482d4fd40df71fc1113cf945ddbb3d12f49f340182a8fee7a78781a11a01cb7c63d58a4c9e6850a999e1ef5f23bd61f6f94c6ca271f222808c60ef16e97cf3f66a084eaefda4de2708270c2c8a78decf485233b4ede6d04665cf9af60d961c2f98a547b8e6e26c1eb29e935dc556ac4780d02c0aef512c477cf134f1ef183659fccfd730b31aed2b339b9d10ad229271ab69a40d7cf2f9849a6b74f0be7f8de23f6393ecfeadf7ef6de6bbe051613d5a99c9c772c383b8ef09ab1f140679195ac7a1a05f40fb5a0f640da3b2f111a6d7351d0260b11cd2b7184e4440b2fd6b55ef1ee3418fc4572a76cf7e85516cd60e6e539abcd7161cc99baaa62dcfda66bebe1d5ef44231eb7fab60cbc3bff7a25d9b8db7befc189a88a8fb34315c0be965cb89f06ac08a50052c5da0eeaa6566c3be401d17bd9e917b6ec114ada0c06b90167562a06bf0967ef190236dfeb566dc4c3a0c6f58a1a2d470f03707ef198c56e21248cd6787db97d70c746d8574c6af62813b0e1507c0ca155a0239954de7967bd5326bb8101b6d9d1eddca52f860488e0392abc82775add738f7acde2bd2bb0aa2d0ce668b371d5a3e9e1288365536ada3e5b55f79de14dc13b63d80c25f4c905b0783f98963930b62151398c6336604fe5c1dc3ad991209518a6c1113bca7cf705369767a5f9192bbffc4662da811b8145c7a39ac495d53fe21dad711cd1a808f0bb7c97832a742c1366816de89ed4ea282f502ea70735cad77eb827484d77513c3e4b7b96a4f683be836496da98319c7c016acf77087b57269be3812911d272d9cc28916c1a7ae6a46703e68b95c111c8def8babddc58f6f11c68bf461e319748f82f3a07a228ae093930794acd17b3c82f3763dbc6cd04466195909a5ee7a50a5a2052ffb6854147e27c9442eaa1c3425cf47f2deeb59f3a47459698c96e7e33098c5af200103f13fd3f905587d738e194d5135fc084f11f39242e2aa4be718155761fdf462deba83f4e3364db0b4173e5ddb06384d90011378cbb76f08b75e7ea03aaf82751371bad3e40d92916bd7a665b5511dd220ec748c346eb6af4d3c39143dcc457f7eca9164536649a2c9899eac5682934d5f6691bf0037c7ab410cacd93d9bbc4ab8311c9cf7b26248d8c0fd2d713d78f256ec78e9a96320cf92918f266af62235c7d3f1822557d5d04844ccc2da0e969032a68edf71d0769f28df729f767f092f970afda3cf6992c477d493c4457002b2619b6513be0917f282ee14f2dc5c8c291df27ee1fd42b40b96b79a2fbcfe455d9f35fc35c2e282987ed32e1c14389431668712150ffd0efff5943136b21cabf90a9da35010d21171cfa88cb0784a159deecf1aebcf3c5f5651208656b46703e56ab34643117d22f2b54509c84a3f9e800367625367f5a3872b67275a76f7ef9f6001c0aa944f3da6a951e2bbbb42d70c03c83a95c3bd856bdac811cd742218c3512e66854e4f624f11473aca7c4180b4339befd69cecb051d401a7b1c41690c6ce9ef82effa5cf8a9efce16da8b138ba87da9d7a98ea9d5de16aa457da3d6e2c2e92dcf1dd87f73192fdfd31d28b93192e3172da5b503ca5f9571f61e402cea6a85832331ff7d2e9732f00c70d9fca08ba516b4bcb146d2f066ede5eb311019070e9b41f64bd51e9e17a30a62f454af9b58df92cb0f85b97a1bed92b73861874bed3375563e344afe9f09aec6d041db4c2f0ac62b9f645c70dbd691eca0a65ddd286746bed8937b11cf135fcb44d51256a227fdbb428556716bb84fbb1a5ccb8ef897dadde9a37d91bee8591cd3d849f8a568030d46cf87f0691e15344fe2aa58db5f2ada25f1d64ccf0380d25e6e00fbe3a48b398fb05dd770da957b15f99e047a4449990f77bd87fe818cb547b56988bfe702c0aaefdfda647b8953a3e936c7bdc2e215709662f0b0e154222f24274185965443dae9f1233ba72e8e65416bc6d37c4e5cf830cb3663e6b0410bbc25979a2bf78d32d19735f0bf1f370ec38f2c9baa25dc7fa0dda7c9a9e8e63242244fb9a23f5f218bfd02f84e8404037933d3edea4473cbf10e64f0f3039ab75a8048695adf25df6782a45debd7f01f0a64518add0d0e29e23c6cf1f9d71ba7d2d3a347368554bfa5e26b61ce087ee514181dd96ed708712f767b9a69707eec9e501c1b4c1df57088e2c0411fa92f36a576549f3cec5da7d6b33d1e711d0879d8f175545ba50725e5cbeb98c203a7c913ecccd151687e9d85fb8a4f097a2eb74a4075f62a30f7b937c6cb9d1cee4896a180b68e828470ebe563f5c79066d05f9915ca057d9b9f9d8cdce448debeffb9f39e567bcc1d0f5b11c6d53b2ca31dffa0d7fc6ad11309002c96013337906d75ec77d873ee204d5d4ea826bcec42608bf23684221aea876ed990bb45eb8a4a102317788dd60ed48ec29c8b08693398eace64f32faa043c87084ae2daf96a3f4972a1cba4ffefd928da30313d55c769c4fee2b1ca5bf980fba3ad331e3f868a1ceb3cbbc8a0eeb5c957a77c7032e2fe4cc8e2a864f358120b6d5ee4c384319814af8ff1d7a9c303a63a712bb0d14a946aa2d8f6812372e268ca612c19cd0aba60204b0aeea9bd809fb8bcca28d76e001778a824815f31d9c1612c06bd56c584860e43368f3f3ad4458ab2b509f7760a6e13df68c386ec206be698b948046bc8a51194542950565ef2fcdc75146ce3ce9dc1eaa2fa5a3c35f23c82c1c24c223ecce0075f19ab522505a95e6b0a915da213d302e742808a27293a88814975551349b5615309d7818154c51285bd52f3d798131a6be55bbf4401a838f09d91431825e5cd9cfb49b96c5f3a4414a23afe3a82d6a78e0cdbb9c2dd3d3b8edc09a1eb1fad155b972445677da82b8deb34a9533f1ca55ec8ade3d9748b0eca190a0cf5a07c7a3fa2ecd6de721ea48640a7bdea1a1436e2495213375898f489eceb2e64da4ed1902574edf0b3459872b9827c9e73a6bfb9afed66f97f1637a11c3d6f1a0cbb2639aeb6ad67e90a778cf2080b0efb5a795b0d0317ccdfac6cf761ca84299f8d4c2c3bb84e55f0a5f966fe6c9aec359a4546e44398275565f2edb34e4fc13eb9bd7dc6489f0389ffe5e1c902719a8b4b92173bda77ff3df963bd55780690efada132cdf451d44d8b29cd1444d860986e04f2dd63218c9067ddaee66d544506a1c44ed387ff90ef4af4045d42063f45a136b66b60fef971dd43bee923f180ce590b6b6eed364888433ef22cb8538d8b22ea2f16dc7c67b1bcbf4bab77c54ea7a4093bf4ab61add94414b14bb737a14561cec796dc27eaf96dee5797ac72a719648a018d043e27745673677eb42137de88a687df2aba3e0de25d2500782b70c029f4f7525a8014967d2257f3c12c1c5b9bae357c3794cb17c0b20014f628a77bd1c4dc6d21fafa85a9c31cc8fdd0294041d2b0ad9018f7cfc84215c67982a3ee37d77a1aed99a79805a59cdd42c73c80d92606d419e5c8dce77d7ac6584265fdc9a73e9e189b0a3548ddd90132650ff54bc3464f2b8e4873f54ac2dd7b127a72f939690032e6e980185f6b615aff7e536d4c51beed18a5e8c463801d4f36e91273ea3f5292e6f6cea290379f04210c580ea2898a2ef744157d3946ff9e20325b4daab4ab82891adf353fb34b2df3a7eb9355218e5d01fb5f1000aa7a7b95bcbbabef18af6d102698d38ad6a8061b3da2bcdec561300c2583e4b317ce05040f047305c0851d5eaa7f506f906f456881db571eaef0dba1c61cf07ddb484d921e82c41e5ee8998d76f3a00cc55df9844a696ded39b2105fce7dbdbbd2feef93a2f897501ee9c7158ce5f3e6057a7b28e29c4fb069b7035c832ce974716ad5aad12e60e0d4a08aa50bb88a4b720f8a7fe05c4df81dbe06b9a7a975498244709872aecc8a12347c64d89062ca1844d7aede5f10aed58e9a877c030006257a2569e10eb96b7680f17628243dc69b2c56cd64c52d0b4c1fc429a2741453865dda2a65121a9f536af360d1c180f632b6b088ce495bd1d772fa5dd17a577aebfeb3f9896419aa3517b984bfccc6c1a2f7637909add72f5981cebeffeeeaac1e6001c08d37657f3bf4dcfa3ceaa923534b044668d1cb0f8f390e16ac8bcb66425b2d2664c943f85aa6c62c1e53500d30cefbae95a8128df1d1488b1106ccdf3d0a5b542473416eea15f22e84d1e4a25af61feb82886557a414aaa371697e6572cdd63688177d3c3535194201f8933ece0866ad98c2fc0dd23b1832b375c919116a9a4ca190df7b4f9a2e197626dcc3afb316dcf8b10375e5314208fc2efaf7017ac55850870e4b44add743f67229a4e66faab6f92a9925ed61972248c6f4117aea0149ed06bd00356049a42bbd0a800044ed0b8b76baee9e5eb48880a62db2ed753a47570917e081d25143d296152d8675ab75e161f6ec9bac37aae78fee01f56ed78e36f8c37aee4238d18a980caa7edea61f565dfc2d34e5a2aa73bdddec2ac6c7e728a0a0e5d949e91e6ca763d24ec997a188346aa03f8c29253b4844f42b7151a0298b6f30f090957f7263c8e236acc8ee231d1f51a3948bdca250748acaae68087279370decf95e12ad6d98b87975447d3331a752f7375b98ca89ded240b3d96f9d39921add3fe3759a2cfedc093ebf2d1b2c9dff69a462113c2f873a7dcd638c4ceb0c86a040950d70c18e81678de090684c9405317f42a28697eb93dbcde56a3126375b9f562529bf30e55d4993f888affd2858967e689e0362ff68a905f9e1a00b15923d187e41603540c138a71434434d6b8a50c82daeaf45e694e0cce25ad438cea84fbf2cbc73fca049a1ea1b3b7d1011a01de8f86656f560c354e0beb9aa820dfa85882ed297d2b9ec209e24b168b02f59e93460e54fb43d808efefe56cff03604618b04946d620f84f9a52cbef1f84c8dc0fa7420a6f2db3a64fabda2a978e72d5050e9679109264d856444576733c7f08302ee66e937d62a28a9233acdcacc2002251ecc61955ed129b5a0d5783422783d44dee29d807ad60e911ceb61c5178290244c28a2fc87e33867b589d6cdfe8e9d7e0789b365a1afb78aa82e77aa7be9f55bea0639f074da5fb9484fd48a4d68449ebb709dff9d463ee86321da1686c03d5cad4344395e90847c8fda12efd120133a98ebdbefa0fdf152465bd922d7c1f610704ebf9625a099c02577a8b0d626a09815889efdae39e454048662f9eb1cb45e6c6e534021bc175a80e277204acac26ca6d68f750fe34b7e2048ad396b29acf5dda7e9bc394e3053e3c1a9b56e1cce2354a02ba91c416ebb8534586b70672f5842fa14656df9a5eaf420a70bd882db855a90c2953b0dd64f550e3af02b02f16f566eedf7e166a869cb5c10d9ab50311b3c280a583504e7aafa051a05ca5710c520a0eeaaaa4ce2cf9eaac1099f568786824cea2412e05b9a52df54364bc10d1c5cfc40cab4aa63e05e09b4beccd3bdd6283af48a9b2c3aed1497d33c2bdec1f956ef28f6d8d911282eea40579d29672835019d6308b42c8f84c8035673172ff71972c7c15e0c619a26169dea9f4a78ada9cd51c70898fde3dbba724a410b820f692741818bb3208eb0c1e3e88dee6435f5bb6cc7ac6a52cd25b50354ef137358b23571046acd97f89973babf605dd116fb50bfcaaa4968bdd2dea453713c7f3fd5265f32ed4a6fc9e359b220bce9f604fc482f0010c535f0901d8d4ad7d9675e0dd9593053c6a0f3860f0e81a28d86d5f7ffe45906c82e3ce3356360e9be925280b818cd87e82680353566f8413d9a8cd830d5c1d490bff91627578c95a43cd77ab0396c0172163e9c9124441d0606afe4953521fa4cf58d93ad2f1baf2d14fbe3389cb76744a2f9ea46570465827d598957c097f865d61ae0b5dd9b6954ae625a3386240c560bfe9ca78f7f43b010f927a2b21b05b78df1553df49539b403ae79aaf438419f02f9f2432361c734727302b8411ee0024c05f378ad6739a7ed1f4014d7f9e0624ab5db83c3ae31165b787643a9983e1f606c2b245c592aa0ebafa88d07b0fa1a1eb2da2bea2d193011c5dbb00472b4614d9237d50456c5d1165cd1dda881ee2e6fa668e53c0a4e8362beb633a130836a6270c6f45d159bec2ea2859903788f356466c32f1fa145cf708b69836cf315b02288401ee65072f9e1c43d40ca75a59c89ed52f4c731c71929297f94070f5be648679c16b9d07674324a8794d0fcbcfd428db2e94fb94efa8bfd121dfb4b5290672d1cc0e216a51034c61d745cd24b6da73046c75af10cd370796d1503a204fa513043a4f6d5e79d7d8cd649406698d7b033176e13dec02b2ff39955e0b3089d304132a2e4a086249dccaf2ab382cfd0cdce110c62e4227f243c1d6708ee7c58f8137f6cf926f32dfb6e352c7013859807dff052b4e530402ba422ba34afcbacae79a78ddcdd59a7deb414b099875795508d752d0567846c4705060055eee3472e306d5860a7f88e23c3dbda64e8e518015db14cb8d40c03a13e966d507eca930bc8320537163965f247f6c925fa536d55305ec02091f2068124f4fac50fe53021e6816bf16cd009a333e20e946649dd01c66e14d9f0cd83c14b742dc2bddb1b412fd3cef5f3b5f857c501f9f24abfc0c60bc4653dd6ebeb0f11646de9b5d6c0dd3ccf8236e84dd67d4cfb5a39a7d1c0d577789698f11f8563006fdce953c0dca1795eec567fd194448b4aaa8f095d87d3b8f6af2d1caf9f56261ad5072d9f118341b474aba7bb58080430888d8292c86e94a88ad18cb12837bb41fd6ba2ab20b1531457bfd429c2f7619aed5aa989d6ffec11643f61916ba6edceb3cc5dc00f2d163168278ec8b0f43b341b3f9f04b1b66e839b49478f93694a4d729b891ef4e691cf31f6cf4592d18fb9091ce38012e89b64e665eb285a912479b3787ac40fc69418af1a3c47a5377209ba2d6af0a3b10cef45cb22b81a615dd9083aca59b8146ae3d5d3879f09969801cd2838ea10481f1d37d418b7f54ed53cf8c4945d8628d6ff9d8ca739f72a73e905c71bf22dce3e231d009adf949f93993ba9a66274cc68cbcf98eced5e6838993a13c9fbf21f2ddb8332654687f6c488e53da8c7e53cbfdda88e3cecbf4bea369417c11b93da42bcc38bdc42a97244a59ccbeab77a14fcd9881777db88593635dbfb6bd5dfd6bf40eec64d9800a4e40860306b4cd2ce2916c126c2ca965a446ae8e324f53931c109d57ed9d59b996639e791f04d67cf930103c5b7c68a167f2661ed3f1cfe7b79ccf6ab3e4b148287a59166c423284ffd39e2aeb7fa1ef03f165c2bdd351d3e0450c089dfda9e6d97667c4d8227c272534ea22e49f1ceef5c6d0d5853c427c1f275ed23c3d08f1f577f29681c0b4c9c9a5308d6dca7118fdad3ad51c028672d830314a1f10a36013d813efaab3f661674e3dd1db7ed676700c8c9ccc0bd519c1288936982b2eb9f6c0d4e6086f36b045b225ee50ed41911d615494762474abcb78498e9e8d296af2ac5334d7acc15b9fe74248a9df74a779f2a760f7be68b577040d67e5890aae70a3f07486b95fa3bc29f35f19c4336d18c18887de384677f4c93a373a7dc7e9acb33e0b85a7d000e6138666e97cf8b77655f89742348e58857b4a776b6d633e2b91845a8aa54bfea77193bcbe28c923547317de3f425e1f7e9b0f656ec8457d7504e78b0ca1a329ef3da3d692e74153ad8e765cc0222c1034d20d15bb6333d43401fa6e48c0f70ff75f3103884cbfaa9e2b1818515cbd444cc66f22fa5d8075e5cee5af0cf78b0b4e4ec0fffdea91e149271e7a2f339ba4cf915efab97c046f92d0e78b33192340d8bc8ead8fe0bf926db411b0cb73d2fc3486c082aedfed7856cf56976af15a86539f5eb90a4f9770ef5de6d97838c6f148c97531db4e63a7f8ae8fdb5cb3717fbd36325344f51c299d232b8a0d83f72081772a74b75c74a74d23898597e03843770f860659a0b23afbb1c155921aa209882320798c5ef160030b6fe0215559a787c69981fc28dc8f2dde85428e7ec6c998bc0486ce11396996ca6386f8bfa9b16d200e910827ebc954a43cd255fcb99a01b5e199b566d8324e1d95a81b72561e3a6ab3ba6bfe24860081ed861e1c18bae959f72058ff6c526c75350cf224ecd12b448adf4553aaf3850dc7fe4c39974f6d9c69676f153b9361ff2d680d011cd9ca63104f236c79fee91ba320bd2e2e3cb45c8f412f75540701995a5e88e58de60c0aade9b745e5d74e4f64a0cf6195493507282103788624bee48ced630ac21eec31521d535252c1ffebddfb5701690f3de3416e07d85bfc025d2114caed91e70a1b1d0129d2d747a86b425b607a0462b3608a299e7d6e6f948c30db4a48b15dca76455a598886265867388573db7cc61add14ee42856e7a066e2b2a1093a116918d0243d4a017d153b535474d7a2b1cf61f4c6af6555b95c9bf8705e30defeabcdeffadabebdff45044c6d3cfc2b68847c5d384aafe7c90fcb5c21330aa1e4fe07d06f1ea38ef85ab464887307b15552ab12a1ce05b1cd8db46f017ccfa97dbc7529331b912ac1a509e921cf298ae9872f5c00ce0eac1b0b2523526cd41678da8b4dced1d069b03f72cf6527289a51165246978eff7ee14128aa3a8253006dd15cb955452359975836fded42d7b65e603b8d925c8ac290c70ef8475116be71e2ad92a00d2627fe2da067faa7c6a9384d45f7e6814a7d92a95cd536009678da4576cbcc825971810392fddaafe308114c4c5b0de5aee4ad5d9165b2cd055ec67c28480f3d838cf080ddb1daa22ca428589acd27819b9d184180d8e64bc1407ab728861839fe87ee69d6486bdb1f23adc6bc7a033a02fb074431fd2c8c681255f985f362fc714c2b62b8e05a6e60050702d37627e5630e1c92d8324db0137847e1c04b3450b10d686dc066a5f4ebd2b4fb6f403fa5db39c3b55d47c49f5e57dead770ce883142c99e8fd9bbb89271256ecab1cf423a00700b44e269d6d44c266d20523b6318a9d899bf6278e6827e775667778630b1520062ee0beea469df0d767fddaaae6a8929d3aa47b96f79cb26384652a32b880ac9638ccacc5b5dd50ef4b9fbc663d94b2b17e125c9acb1c5e3a1267e2cd6f12cec49d04a0b581930560e8dace5334a033a3b0983408ef9b8374ce813c6a7a29d960e7e639fdcd12494384e9dd994b576b8a53a1a366d4809a9bb337a6ee9dbbf9158963dbed6d28d87a31fd7f49bc92db2273c101c98195483994bae98deb866d87a93e525286f20dd80df741fb1757e78159642abbcbf4c2793fcbe2ef1d94b6c1afc4e2f19abb32998b5c5d52a7a7046b0c7d68c441a586e39cfcebc2927f0ebf6b65383718a4cd151e91838d55b8d0132b96b57a2412c8d816a435b96f7ae4ff0e5bd0513e4ce608efbd1f4ebc7b27ee04b1f07262f5587e305331e4ce3099701d8026cbceefc9dc8880ace10c427cb47c5819567e10f3ded6c406556bb0302214ce7e5d0953ae44a4f4e3961bfe03a8824e473fddaf776730656ace1225a372fddf97a7282ea9e4c68ce3c9ad6a2897f81412b1c173dbab330ddb2ca9fc56f7332556d3d5ac37be7115200b3eaa96e9921ecd734f611fdecacf5e2bf9cd0e501fe60666ab88c65e41b6ca9219966e7f301e35d59944d01e1c31161dcb008b8ef461210df8c73ec1728581ea5354670a8a430090ed5254b487ab811f36bbd735d04c189cbaaa8e5701360952f9a09b376c2efb208373c55c27096686cc75113b59c11ad4e4c017523641cf1e0a73a61707843adcda9fd9f2401bbe0828204d5d5d0bad218e93d3c1cbc75d15fd04a8f0ca1997ea4048e98a45f3dd7aae194f8893cead9fae7a087f1f73ffc34a9e64b53f056e6adf6669d41818cf488e610f41cfaa9b10d7e89259d2141e77bd9a7b974cdbbfb4ac11ae4c8ac2528920fedda215167224ed9d6de33d1083829d0169dd899e0d2909ba41a29fb692f9988c59b811d35f67403b154d2fc6fcdcfe6b551acb45bf17942a4113817106c3c66e0c67faaa7e3e54f6e00d3d49e0be2598d6f58818db74836effb4fa7559d08dc3ac1a241f32b7c6f65106ea2ef1b398fc202deedc7b7576a4090c64db00e8f8c3dae2e1e20ecf4919b0040aa4439d02ed4f126dbba8ba54c313fe76406361bbbb62f4f05483a0394b45c7df7db5a1819dd77fc1206b8bb450a0183cc1af792dd339d7958ba41de569939642f9c61111c3f9231044953772141c055851408f76de2687effb4b3f86a689812cb44a0be399f38a8024927986471ab71be43f25b871741a3459b27ee9d817d8e57c40eab7098b6edde29c4c2060dae30f8e857a6e44b5e3b97106efc67205fa6bac89b0ba18c3d4f146e5c8814b6d134271a3cf3007397d6cfa89165bb094896c8ec665c4d1787a1ac78f87fc7b976a0c3818ad5662f5540d2eb80524203d0ef40b318266376ded8621fd7dc1d52237ec57bb5549f9da4a4f512ab635d00f28f576311389a2109d01344e19369b616ff2a3eab6413cb7b0b696370f79b208871ba1b2416b43cc43915889e16495df968dfd0409ae83782573204b351fb70d3e797912243907ee25fb770dbfafa3fd0bc66594582cfc96cd62b38ff30b34ef6dc785c83c4793fff3de321ee12e96f9bbf8ab64d6d96550af7f5cf65103759e5ea99a7ecfac6126b224d2abb43f0eaca6e26b8ef92cf4083e5aa09e84df2ae0b59334f5facecacc3438b4026eea1de1eded8890307ef6fa0ebe6918e7be02881f592e8986c17b6bbc7ef8efff310345e24109fdb3e7aeb4878042469df7a75c8f48b971d9e0888ae559c3983a8f57c83314a0ef3342ff1f0e50e4d91d351174bffadf8e0f6361c62ae31b5cd6732540283f26cbd9fd9b4258d6b26de75fa59463b2511140d8e8bb7025dc6c179e5820fe39190427d5c0dfb8099f1c1f7263bf289f6c6e746fb21d75d9fb68f3f638fd2292b5cc794e1d13f9cd916cbdac1e045cfc0ccd342d3f01f9583d19cdb70da342aed2050d25a8accccbf40672c44101bbe1a0cfd5be5a7ddaf9f769780d48a37968f58517b8e219c56144ac2f65db0b56b5b477ea4d10f30f27bdda05565edac04b890409eaf339c08d23128a962b6dd000dc54ac2d2c16958e256c70c4c159aba0216dcdc993bd1e5ef2d1c11309f5a89872927e3bba001a80dd6cb8709928f0235c0d34f04d962290c0274f8469332fcb3b88bd057e76aaf8365a819fac225be523e9db2af9a7c4bd4b76009e2092013a18f748586f2cbfdb2ae55c044ff98d248f50137a6266f58933397e69d6186813b17727c8bb4a836ba5ff532916984203cb2c44a57d1dfea1b2fd300389c1863b3d3f64e77dea395e7cb4b1213429cfe96829d54c6167a53e1538accea692d7a0dd0d673fe6dd50712c9fc98ff6a1e9d6354bceea6ca93eee8f79800ce4d2d3d9473b3494b13a38b1a89e7b47d00540b40c3d84731eacda6d0db4190b1e7d6a99b877aff1acd720de9ecc4065d8392f2e90f58c217539f938934d1271f81fc96693b9f08fda572b7941eedb426d6bddf67de7e9e12f3a292926fcf95ee0e7cb23760ddbf685e2340c1d900ce7586081c7c89778b7af3640f02ab3d18f032838ce2dc35a3ad0b6c11f4d74c9ffbfb7ef63c5161788f1dd1dad0b708cafa1ff91ccb713c573bea20c4873fda6d776deb8cce4078f2e38c8d353556ffb45ad712a45d53cab08bce503ccc5d30b18dec3f32a25da0885dfcb73eee14e90f98466e92761ee662da6a366170b1e779d8162b101fce022c0ed0b52b1c85aae99a8d8f5784791bcb6bba74b05c5aeb884fa62f062596b2aa49f174a820f384c4ed64ac6a0836a40644894d3a3c31029d655bbc5b4712ab08fcfa45646c829b2691613e55363e21bcf10e9f2b9be464db545ea0ed86c995d8e39eadbd4302b7fa9f3174fbf2f042fbdc80c1127e4fec30f59ccb9b54ead8fb1eae121b89130b169461c26c35a00f7a30e67f1e81cd1437038ea92a5ffd60d97ebef9ec44fcee9abfdc0f574f6b689ac6ccc176261f9784dd6be4c1767ce7df9cf0d3a54af1b578f7d57d5ebf602f089a8c7415bfbb24a54275c7b940a1046137ac84360b0ebe8b114307835127994a44dc49b50ad21bcaa20bf40ba0ad0331eeb83822207f56d1a2af12640395a8dda168dab2211c4f651427f89cfb28c64fb968245b139043c9fb9b30da09f44488042a3ade06329b198969b790264460279a007ecb6ce29a813be21c5cc51f9b8919d327c567736b350eb6850459cc9d300cad69cc98db755e8e018787ad7bca334664a141d0e7a37ab16074b4d631dd33b4f1b30100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Verified ? : true