From a9e53e31c250b3cfd31b9fea0b60c990b60a730f Mon Sep 17 00:00:00 2001 From: Ferran Borreguero Date: Mon, 15 Jul 2024 19:09:08 +0100 Subject: [PATCH] feat: Use alloy types for mevboost client (#15) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 📝 Summary This PR replaces the custom types in the MevBoost client with the counterparts in the alloy library. --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) --- Cargo.lock | 312 +++++++++---- Cargo.toml | 10 + crates/rbuilder/Cargo.toml | 6 + .../rbuilder/benches/benchmarks/mev_boost.rs | 85 +++- crates/rbuilder/benches/blob_data/blob1.txt | 1 + crates/rbuilder/src/backtest/store.rs | 1 + crates/rbuilder/src/bin/relay-sender.rs | 3 +- crates/rbuilder/src/mev_boost/mod.rs | 134 ++---- crates/rbuilder/src/mev_boost/rpc.rs | 419 +++--------------- crates/rbuilder/src/mev_boost/sign_payload.rs | 189 ++++++-- 10 files changed, 573 insertions(+), 587 deletions(-) create mode 100644 crates/rbuilder/benches/blob_data/blob1.txt diff --git a/Cargo.lock b/Cargo.lock index b530b954..ddde0740 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -146,7 +146,7 @@ version = "0.1.0" source = "git+https://github.com/alloy-rs/alloy?rev=39b8695#39b869585955d95e9c64c3e1b66f16432ae4f132" dependencies = [ "alloy-eips 0.1.0", - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "alloy-rlp", "alloy-serde 0.1.0", "c-kzg", @@ -156,13 +156,13 @@ dependencies = [ [[package]] name = "alloy-consensus" -version = "0.1.2" -source = "git+https://github.com/alloy-rs/alloy#6ac263579752188c0e2cbf5fecc6690c486cad34" +version = "0.1.4" +source = "git+https://github.com/alloy-rs/alloy#008b99d51ed43437fd6cfae261e9d7b16134b94d" dependencies = [ - "alloy-eips 0.1.2", - "alloy-primitives 0.7.6", + "alloy-eips 0.1.4", + "alloy-primitives 0.7.7", "alloy-rlp", - "alloy-serde 0.1.2", + "alloy-serde 0.1.4", "c-kzg", "serde", ] @@ -174,7 +174,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "872f239c15befa27cc4f0d3d82a70b3365c2d0202562bf906eb93b299fa31882" dependencies = [ "alloy-json-abi", - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "alloy-sol-type-parser", "alloy-sol-types", "const-hex", @@ -190,7 +190,7 @@ name = "alloy-eips" version = "0.1.0" source = "git+https://github.com/alloy-rs/alloy?rev=39b8695#39b869585955d95e9c64c3e1b66f16432ae4f132" dependencies = [ - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "alloy-rlp", "alloy-serde 0.1.0", "arbitrary", @@ -203,14 +203,16 @@ dependencies = [ [[package]] name = "alloy-eips" -version = "0.1.2" -source = "git+https://github.com/alloy-rs/alloy#6ac263579752188c0e2cbf5fecc6690c486cad34" +version = "0.1.4" +source = "git+https://github.com/alloy-rs/alloy#008b99d51ed43437fd6cfae261e9d7b16134b94d" dependencies = [ - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "alloy-rlp", - "alloy-serde 0.1.2", + "alloy-serde 0.1.4", "c-kzg", "derive_more", + "ethereum_ssz", + "ethereum_ssz_derive", "once_cell", "serde", "sha2 0.10.8", @@ -221,18 +223,18 @@ name = "alloy-genesis" version = "0.1.0" source = "git+https://github.com/alloy-rs/alloy?rev=39b8695#39b869585955d95e9c64c3e1b66f16432ae4f132" dependencies = [ - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "alloy-serde 0.1.0", "serde", ] [[package]] name = "alloy-genesis" -version = "0.1.2" -source = "git+https://github.com/alloy-rs/alloy#6ac263579752188c0e2cbf5fecc6690c486cad34" +version = "0.1.4" +source = "git+https://github.com/alloy-rs/alloy#008b99d51ed43437fd6cfae261e9d7b16134b94d" dependencies = [ - "alloy-primitives 0.7.6", - "alloy-serde 0.1.2", + "alloy-primitives 0.7.7", + "alloy-serde 0.1.4", "serde", ] @@ -242,7 +244,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83a35ddfd27576474322a5869e4c123e5f3e7b2177297c18e4e82ea501cb125b" dependencies = [ - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "alloy-sol-type-parser", "serde", "serde_json", @@ -250,10 +252,10 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "0.1.2" -source = "git+https://github.com/alloy-rs/alloy#6ac263579752188c0e2cbf5fecc6690c486cad34" +version = "0.1.4" +source = "git+https://github.com/alloy-rs/alloy#008b99d51ed43437fd6cfae261e9d7b16134b94d" dependencies = [ - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "serde", "serde_json", "thiserror", @@ -262,15 +264,15 @@ dependencies = [ [[package]] name = "alloy-network" -version = "0.1.2" -source = "git+https://github.com/alloy-rs/alloy#6ac263579752188c0e2cbf5fecc6690c486cad34" +version = "0.1.4" +source = "git+https://github.com/alloy-rs/alloy#008b99d51ed43437fd6cfae261e9d7b16134b94d" dependencies = [ - "alloy-consensus 0.1.2", - "alloy-eips 0.1.2", + "alloy-consensus 0.1.4", + "alloy-eips 0.1.4", "alloy-json-rpc", - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "alloy-rpc-types-eth", - "alloy-serde 0.1.2", + "alloy-serde 0.1.4", "alloy-signer", "alloy-sol-types", "async-trait", @@ -281,11 +283,11 @@ dependencies = [ [[package]] name = "alloy-node-bindings" -version = "0.1.2" -source = "git+https://github.com/alloy-rs/alloy#6ac263579752188c0e2cbf5fecc6690c486cad34" +version = "0.1.4" +source = "git+https://github.com/alloy-rs/alloy#008b99d51ed43437fd6cfae261e9d7b16134b94d" dependencies = [ - "alloy-genesis 0.1.2", - "alloy-primitives 0.7.6", + "alloy-genesis 0.1.4", + "alloy-primitives 0.7.7", "k256 0.13.3", "serde_json", "tempfile", @@ -317,9 +319,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f783611babedbbe90db3478c120fb5f5daacceffc210b39adc0af4fe0da70bad" +checksum = "ccb3ead547f4532bc8af961649942f0b9c16ee9226e26caa3f38420651cc0bf4" dependencies = [ "alloy-rlp", "arbitrary", @@ -344,15 +346,15 @@ dependencies = [ [[package]] name = "alloy-provider" -version = "0.1.2" -source = "git+https://github.com/alloy-rs/alloy#6ac263579752188c0e2cbf5fecc6690c486cad34" +version = "0.1.4" +source = "git+https://github.com/alloy-rs/alloy#008b99d51ed43437fd6cfae261e9d7b16134b94d" dependencies = [ "alloy-chains", - "alloy-consensus 0.1.2", - "alloy-eips 0.1.2", + "alloy-consensus 0.1.4", + "alloy-eips 0.1.4", "alloy-json-rpc", "alloy-network", - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "alloy-rpc-client", "alloy-rpc-types-eth", "alloy-transport", @@ -397,8 +399,8 @@ dependencies = [ [[package]] name = "alloy-rpc-client" -version = "0.1.2" -source = "git+https://github.com/alloy-rs/alloy#6ac263579752188c0e2cbf5fecc6690c486cad34" +version = "0.1.4" +source = "git+https://github.com/alloy-rs/alloy#008b99d51ed43437fd6cfae261e9d7b16134b94d" dependencies = [ "alloy-json-rpc", "alloy-transport", @@ -423,7 +425,7 @@ dependencies = [ "alloy-consensus 0.1.0", "alloy-eips 0.1.0", "alloy-genesis 0.1.0", - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "alloy-rlp", "alloy-serde 0.1.0", "alloy-sol-types", @@ -439,11 +441,12 @@ dependencies = [ [[package]] name = "alloy-rpc-types" -version = "0.1.2" -source = "git+https://github.com/alloy-rs/alloy#6ac263579752188c0e2cbf5fecc6690c486cad34" +version = "0.1.4" +source = "git+https://github.com/alloy-rs/alloy#008b99d51ed43437fd6cfae261e9d7b16134b94d" dependencies = [ "alloy-rpc-types-eth", - "alloy-serde 0.1.2", + "alloy-serde 0.1.4", + "serde", ] [[package]] @@ -451,11 +454,26 @@ name = "alloy-rpc-types-anvil" version = "0.1.0" source = "git+https://github.com/alloy-rs/alloy?rev=39b8695#39b869585955d95e9c64c3e1b66f16432ae4f132" dependencies = [ - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "alloy-serde 0.1.0", "serde", ] +[[package]] +name = "alloy-rpc-types-beacon" +version = "0.1.4" +source = "git+https://github.com/alloy-rs/alloy#008b99d51ed43437fd6cfae261e9d7b16134b94d" +dependencies = [ + "alloy-eips 0.1.4", + "alloy-primitives 0.7.7", + "alloy-rpc-types-engine 0.1.4", + "ethereum_ssz", + "ethereum_ssz_derive", + "serde", + "serde_with", + "thiserror", +] + [[package]] name = "alloy-rpc-types-engine" version = "0.1.0" @@ -463,7 +481,7 @@ source = "git+https://github.com/alloy-rs/alloy?rev=39b8695#39b869585955d95e9c64 dependencies = [ "alloy-consensus 0.1.0", "alloy-eips 0.1.0", - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "alloy-rlp", "alloy-rpc-types 0.1.0", "alloy-serde 0.1.0", @@ -472,16 +490,35 @@ dependencies = [ "thiserror", ] +[[package]] +name = "alloy-rpc-types-engine" +version = "0.1.4" +source = "git+https://github.com/alloy-rs/alloy#008b99d51ed43437fd6cfae261e9d7b16134b94d" +dependencies = [ + "alloy-consensus 0.1.4", + "alloy-eips 0.1.4", + "alloy-primitives 0.7.7", + "alloy-rlp", + "alloy-rpc-types-eth", + "alloy-serde 0.1.4", + "ethereum_ssz", + "ethereum_ssz_derive", + "jsonwebtoken 9.3.0", + "rand 0.8.5", + "serde", + "thiserror", +] + [[package]] name = "alloy-rpc-types-eth" -version = "0.1.2" -source = "git+https://github.com/alloy-rs/alloy#6ac263579752188c0e2cbf5fecc6690c486cad34" +version = "0.1.4" +source = "git+https://github.com/alloy-rs/alloy#008b99d51ed43437fd6cfae261e9d7b16134b94d" dependencies = [ - "alloy-consensus 0.1.2", - "alloy-eips 0.1.2", - "alloy-primitives 0.7.6", + "alloy-consensus 0.1.4", + "alloy-eips 0.1.4", + "alloy-primitives 0.7.7", "alloy-rlp", - "alloy-serde 0.1.2", + "alloy-serde 0.1.4", "alloy-sol-types", "itertools 0.13.0", "serde", @@ -494,7 +531,7 @@ name = "alloy-rpc-types-trace" version = "0.1.0" source = "git+https://github.com/alloy-rs/alloy?rev=39b8695#39b869585955d95e9c64c3e1b66f16432ae4f132" dependencies = [ - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "alloy-rpc-types 0.1.0", "alloy-serde 0.1.0", "serde", @@ -506,27 +543,27 @@ name = "alloy-serde" version = "0.1.0" source = "git+https://github.com/alloy-rs/alloy?rev=39b8695#39b869585955d95e9c64c3e1b66f16432ae4f132" dependencies = [ - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "serde", "serde_json", ] [[package]] name = "alloy-serde" -version = "0.1.2" -source = "git+https://github.com/alloy-rs/alloy#6ac263579752188c0e2cbf5fecc6690c486cad34" +version = "0.1.4" +source = "git+https://github.com/alloy-rs/alloy#008b99d51ed43437fd6cfae261e9d7b16134b94d" dependencies = [ - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "serde", "serde_json", ] [[package]] name = "alloy-signer" -version = "0.1.2" -source = "git+https://github.com/alloy-rs/alloy#6ac263579752188c0e2cbf5fecc6690c486cad34" +version = "0.1.4" +source = "git+https://github.com/alloy-rs/alloy#008b99d51ed43437fd6cfae261e9d7b16134b94d" dependencies = [ - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "async-trait", "auto_impl", "elliptic-curve 0.13.8", @@ -536,12 +573,12 @@ dependencies = [ [[package]] name = "alloy-signer-local" -version = "0.1.2" -source = "git+https://github.com/alloy-rs/alloy#6ac263579752188c0e2cbf5fecc6690c486cad34" +version = "0.1.4" +source = "git+https://github.com/alloy-rs/alloy#008b99d51ed43437fd6cfae261e9d7b16134b94d" dependencies = [ - "alloy-consensus 0.1.2", + "alloy-consensus 0.1.4", "alloy-network", - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "alloy-signer", "async-trait", "k256 0.13.3", @@ -551,9 +588,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bad41a7c19498e3f6079f7744656328699f8ea3e783bdd10d85788cd439f572" +checksum = "2b40397ddcdcc266f59f959770f601ce1280e699a91fc1862f29cef91707cd09" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", @@ -565,9 +602,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-expander" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd9899da7d011b4fe4c406a524ed3e3f963797dbc93b45479d60341d3a27b252" +checksum = "867a5469d61480fea08c7333ffeca52d5b621f5ca2e44f271b117ec1fc9a0525" dependencies = [ "alloy-sol-macro-input", "const-hex", @@ -583,9 +620,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-input" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32d595768fdc61331a132b6f65db41afae41b9b97d36c21eb1b955c422a7e60" +checksum = "2e482dc33a32b6fadbc0f599adea520bd3aaa585c141a80b404d0a3e3fa72528" dependencies = [ "const-hex", "dunce", @@ -607,11 +644,11 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a49042c6d3b66a9fe6b2b5a8bf0d39fc2ae1ee0310a2a26ffedd79fb097878dd" +checksum = "a91ca40fa20793ae9c3841b83e74569d1cc9af29a2f5237314fd3452d51e38c7" dependencies = [ - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "alloy-sol-macro", "const-hex", "serde", @@ -619,8 +656,8 @@ dependencies = [ [[package]] name = "alloy-transport" -version = "0.1.2" -source = "git+https://github.com/alloy-rs/alloy#6ac263579752188c0e2cbf5fecc6690c486cad34" +version = "0.1.4" +source = "git+https://github.com/alloy-rs/alloy#008b99d51ed43437fd6cfae261e9d7b16134b94d" dependencies = [ "alloy-json-rpc", "base64 0.22.0", @@ -631,13 +668,14 @@ dependencies = [ "thiserror", "tokio", "tower", + "tracing", "url", ] [[package]] name = "alloy-transport-http" -version = "0.1.2" -source = "git+https://github.com/alloy-rs/alloy#6ac263579752188c0e2cbf5fecc6690c486cad34" +version = "0.1.4" +source = "git+https://github.com/alloy-rs/alloy#008b99d51ed43437fd6cfae261e9d7b16134b94d" dependencies = [ "alloy-json-rpc", "alloy-transport", @@ -654,7 +692,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "beb28aa4ecd32fdfa1b1bdd111ff7357dd562c6b2372694cf9e613434fcba659" dependencies = [ - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "alloy-rlp", "arbitrary", "derive_arbitrary", @@ -1049,9 +1087,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.80" +version = "0.1.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" dependencies = [ "proc-macro2", "quote", @@ -2328,6 +2366,16 @@ dependencies = [ "darling_macro 0.10.2", ] +[[package]] +name = "darling" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +dependencies = [ + "darling_core 0.13.4", + "darling_macro 0.13.4", +] + [[package]] name = "darling" version = "0.20.8" @@ -2352,6 +2400,20 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "darling_core" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 1.0.109", +] + [[package]] name = "darling_core" version = "0.20.8" @@ -2377,6 +2439,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "darling_macro" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +dependencies = [ + "darling_core 0.13.4", + "quote", + "syn 1.0.109", +] + [[package]] name = "darling_macro" version = "0.20.8" @@ -3083,6 +3156,18 @@ dependencies = [ "smallvec", ] +[[package]] +name = "ethereum_ssz_derive" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eccd5378ec34a07edd3d9b48088cbc63309d0367d14ba10b0cdb1d1791080ea" +dependencies = [ + "darling 0.13.4", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "ethers" version = "2.0.14" @@ -3263,7 +3348,7 @@ dependencies = [ "hashers", "http 0.2.12", "instant", - "jsonwebtoken", + "jsonwebtoken 8.3.0", "once_cell", "pin-project", "reqwest 0.11.26", @@ -4284,7 +4369,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.10", + "socket2 0.5.6", "tokio", "tower-service", "tracing", @@ -5170,13 +5255,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" dependencies = [ "base64 0.21.7", - "pem", + "pem 1.1.1", "ring 0.16.20", "serde", "serde_json", "simple_asn1", ] +[[package]] +name = "jsonwebtoken" +version = "9.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ae10193d25051e74945f1ea2d0b42e03cc3b890f7e4cc5faa44997d808193f" +dependencies = [ + "base64 0.21.7", + "js-sys", + "pem 3.0.4", + "ring 0.17.8", + "serde", + "serde_json", + "simple_asn1", +] + [[package]] name = "k256" version = "0.11.6" @@ -6682,6 +6782,16 @@ dependencies = [ "base64 0.13.1", ] +[[package]] +name = "pem" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" +dependencies = [ + "base64 0.22.0", + "serde", +] + [[package]] name = "pem-rfc7468" version = "0.7.0" @@ -7669,15 +7779,18 @@ version = "0.1.0" dependencies = [ "ahash", "alloy-chains", - "alloy-consensus 0.1.2", + "alloy-consensus 0.1.4", "alloy-json-rpc", "alloy-network", "alloy-node-bindings", - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "alloy-provider", "alloy-rlp", - "alloy-rpc-types 0.1.2", - "alloy-serde 0.1.2", + "alloy-rpc-types 0.1.4", + "alloy-rpc-types-beacon", + "alloy-rpc-types-engine 0.1.4", + "alloy-rpc-types-eth", + "alloy-serde 0.1.4", "alloy-signer-local", "alloy-transport", "alloy-transport-http", @@ -7692,6 +7805,8 @@ dependencies = [ "csv", "derivative", "ethereum-consensus", + "ethereum_ssz", + "ethereum_ssz_derive", "ethers", "exponential-backoff", "eyre", @@ -8146,7 +8261,7 @@ version = "0.2.0-beta.6" source = "git+https://github.com/paradigmxyz/reth?tag=v0.2.0-beta.6#ac29b4b73be382caf2a2462d426e6bad75e18af9" dependencies = [ "alloy-eips 0.1.0", - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "bytes", "reth-codecs-derive", ] @@ -8415,7 +8530,7 @@ version = "0.2.0-beta.6" source = "git+https://github.com/paradigmxyz/reth?tag=v0.2.0-beta.6#ac29b4b73be382caf2a2462d426e6bad75e18af9" dependencies = [ "alloy-chains", - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "alloy-rlp", "arbitrary", "crc", @@ -8877,7 +8992,7 @@ dependencies = [ "alloy-chains", "alloy-eips 0.1.0", "alloy-genesis 0.1.0", - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "alloy-rlp", "alloy-trie", "arbitrary", @@ -8982,7 +9097,7 @@ version = "0.2.0-beta.6" source = "git+https://github.com/paradigmxyz/reth?tag=v0.2.0-beta.6#ac29b4b73be382caf2a2462d426e6bad75e18af9" dependencies = [ "alloy-dyn-abi", - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "alloy-rlp", "alloy-sol-types", "async-trait", @@ -8993,7 +9108,7 @@ dependencies = [ "http-body 0.4.6", "hyper 0.14.28", "jsonrpsee 0.22.4", - "jsonwebtoken", + "jsonwebtoken 8.3.0", "metrics", "parking_lot 0.12.1", "pin-project", @@ -9099,11 +9214,11 @@ version = "0.2.0-beta.6" source = "git+https://github.com/paradigmxyz/reth?tag=v0.2.0-beta.6#ac29b4b73be382caf2a2462d426e6bad75e18af9" dependencies = [ "alloy-genesis 0.1.0", - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "alloy-rlp", "alloy-rpc-types 0.1.0", "alloy-rpc-types-anvil", - "alloy-rpc-types-engine", + "alloy-rpc-types-engine 0.1.0", "alloy-rpc-types-trace", "arbitrary", "enr 0.10.0", @@ -9325,7 +9440,7 @@ name = "revm-inspectors" version = "0.1.0" source = "git+https://github.com/paradigmxyz/evm-inspectors?rev=dc614ee#dc614eec85ee4d4af938865b121fad58ec7dad5f" dependencies = [ - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "alloy-rpc-types 0.1.0", "alloy-rpc-types-trace", "alloy-sol-types", @@ -9371,7 +9486,7 @@ version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cbbc9640790cebcb731289afb7a7d96d16ad94afeb64b5d0b66443bd151e79d6" dependencies = [ - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "auto_impl", "bitflags 2.5.0", "bitvec", @@ -9533,6 +9648,7 @@ dependencies = [ "ark-ff 0.3.0", "ark-ff 0.4.2", "bytes", + "ethereum_ssz", "fastrlp", "num-bigint", "num-traits", @@ -10957,9 +11073,9 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d71e19bca02c807c9faa67b5a47673ff231b6e7449b251695188522f1dc44b2" +checksum = "c837dc8852cb7074e46b444afb81783140dab12c58867b49fb3898fbafedf7ea" dependencies = [ "paste", "proc-macro2", diff --git a/Cargo.toml b/Cargo.toml index 597e1e89..92bcb4d1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -45,6 +45,9 @@ revm-primitives = { version = "3.1.0", features = [ ], default-features = false } revm-inspectors = { git = "https://github.com/paradigmxyz/evm-inspectors", rev = "dc614ee" } +ethereum_ssz_derive = "0.5" +ethereum_ssz = "0.5" + alloy-primitives = "0.7.2" alloy-rlp = "0.3.4" alloy-chains = { version = "0.1.15", feature = ["serde", "rlp", "arbitrary"] } @@ -57,4 +60,11 @@ alloy-transport = { git = "https://github.com/alloy-rs/alloy", version = "0.1" } alloy-node-bindings = { git = "https://github.com/alloy-rs/alloy", version = "0.1" } alloy-consensus = { git = "https://github.com/alloy-rs/alloy", version = "0.1", features = ["kzg"] } alloy-serde = { git = "https://github.com/alloy-rs/alloy", version = "0.1" } +alloy-rpc-types-beacon = { git = "https://github.com/alloy-rs/alloy", version = "0.1", features = [ + "ssz", +] } +alloy-rpc-types-engine = { git = "https://github.com/alloy-rs/alloy", version = "0.1", features = [ + "ssz", +] } +alloy-rpc-types-eth = { git = "https://github.com/alloy-rs/alloy", version = "0.1" } alloy-signer-local = { git = "https://github.com/alloy-rs/alloy", version = "0.1" } diff --git a/crates/rbuilder/Cargo.toml b/crates/rbuilder/Cargo.toml index 896bd1f5..2d66dc3e 100644 --- a/crates/rbuilder/Cargo.toml +++ b/crates/rbuilder/Cargo.toml @@ -36,11 +36,17 @@ alloy-json-rpc.workspace = true alloy-transport-http.workspace = true alloy-network.workspace = true alloy-transport.workspace = true +alloy-rpc-types-beacon.workspace = true +alloy-rpc-types-engine.workspace = true +alloy-rpc-types-eth.workspace = true alloy-node-bindings.workspace = true alloy-consensus.workspace = true alloy-serde.workspace = true alloy-signer-local.workspace = true +ethereum_ssz_derive.workspace = true +ethereum_ssz.workspace = true + test_utils = { path = "src/test_utils" } reqwest = { version = "0.11.20", features = ["blocking"] } diff --git a/crates/rbuilder/benches/benchmarks/mev_boost.rs b/crates/rbuilder/benches/benchmarks/mev_boost.rs index 8fe81a73..a10b6ecb 100644 --- a/crates/rbuilder/benches/benchmarks/mev_boost.rs +++ b/crates/rbuilder/benches/benchmarks/mev_boost.rs @@ -1,13 +1,16 @@ +use alloy_primitives::{hex, BlockHash, U256}; +use alloy_rlp::Decodable; use criterion::{criterion_group, Criterion}; - -use ethereum_consensus::ssz::prelude::serialize; +use primitive_types::H384; use rbuilder::mev_boost::{ - marshal_deneb_submit_block_request, DenebSubmitBlockRequest, TestDataGenerator, + rpc::TestDataGenerator, sign_block_for_relay, BLSBlockSigner, DenebSubmitBlockRequest, }; +use reth::primitives::{BlobTransactionSidecar, SealedBlock, SEPOLIA}; +use reth_primitives::SealedHeader; +use std::{fs, path::PathBuf, sync::Arc}; fn mev_boost_serialize_submit_block(data: DenebSubmitBlockRequest) { - let marshalled_data = marshal_deneb_submit_block_request(&data).unwrap(); - serialize(&marshalled_data).unwrap(); + data.as_ssz_bytes(); } fn bench_mevboost_serialization(c: &mut Criterion) { @@ -37,4 +40,74 @@ fn bench_mevboost_serialization(c: &mut Criterion) { group.finish(); } -criterion_group!(serialization, bench_mevboost_serialization); +fn bench_mevboost_sign(c: &mut Criterion) { + let mut generator = TestDataGenerator::default(); + + let blob_rlp = fs::read_to_string( + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("benches/blob_data/blob1.txt"), + ) + .unwrap(); + + let blob_rlp = hex::decode(blob_rlp).unwrap(); + let blob = BlobTransactionSidecar::decode(&mut blob_rlp.as_slice()).unwrap(); + + let sealed_block = SealedBlock::default(); + let signer = BLSBlockSigner::test_signer(); + let mut blobs = vec![]; + for _ in 0..3 { + blobs.push(Arc::new(blob.clone())); + } + + let chain_spec = SEPOLIA.clone(); + let payload = generator.create_payload_attribute_data(); + + let mut group = c.benchmark_group("MEV-Boost Sign block for relay"); + + // This benchmark is here to have a baseline for Deneb (with blobs) + group.bench_function("Capella", |b| { + b.iter(|| { + let _ = sign_block_for_relay( + &signer, + &sealed_block, + &blobs, + &chain_spec, + &payload, + H384::default(), + U256::default(), + ) + .unwrap(); + }) + }); + + // Create a sealed block that is after the Cancun hard fork in Sepolia + // this is, a timestamp higher than 1706655072 + let mut sealed_block_deneb = SealedBlock::default(); + let mut header = sealed_block_deneb.header().clone(); + header.timestamp = 2706655072; + header.blob_gas_used = Some(64); + header.excess_blob_gas = Some(64); + sealed_block_deneb.header = SealedHeader::new(header.clone(), BlockHash::default()); + + group.bench_function("Deneb", |b| { + b.iter(|| { + let _ = sign_block_for_relay( + &signer, + &sealed_block_deneb, + &blobs, + &chain_spec, + &payload, + H384::default(), + U256::default(), + ) + .unwrap(); + }) + }); + + group.finish(); +} + +criterion_group!( + serialization, + bench_mevboost_serialization, + bench_mevboost_sign +); diff --git a/crates/rbuilder/benches/blob_data/blob1.txt b/crates/rbuilder/benches/blob_data/blob1.txt new file mode 100644 index 00000000..98b8e211 --- /dev/null +++ b/crates/rbuilder/benches/blob_data/blob1.txt @@ -0,0 +1 @@ +fa020004ba020000001611aa000000034277ff00ff0001feed56d1420ee27fe2a5e11539680a339a004bb25733b142e13399f2561ee370566c9a7b1533fbb1fd7bf9c45bde68111d004af20972a34d3988eed31121ad9020360a3a5734e146fae3a729592b0badad0051d44b83a40120dd47368416383c686d86796abcb6b031d4f8871ba79164a100c3824e1dce8ba21fe35754a7d0d2c6d8c4c37d526b67ba3057d91a88a7f46f00b27bb885c310ac601f5634f6e9d6f7c5730efbfb2284ad319997e2eb68d65900053e85b0c6ec5c683da7e728615e42578ba96e21f855c1a337537001fd5bc40063bf707e416db4ebdb38c8a48ef86bc47126524c4c1563e03b411a66daeae2003a41cc79ed8e94029745ef64667b2568cddc250aa5105558b276aa3a245a3300dbc71649b84cab6ee79ac1ffae3a4bb0d81a269894310fe1d1e071bdfb89ba00ce1c2821ef0e30551ecd4ab51cf09abeeea314b761f01f891bdf5e3855779e00815e4b708291a6e1d9cc35dc1ef4629a206adec20e717a4a42f5a2354ca4e3008de7ef2ab714c988f8362d082b9bb555c74b30ab8d9cdd3ad89921ca3d3d6c002729f7108589d22820f3a04f0ae347338cc94bf17a0d838fd44eb3c36661d5008a0b5603b5253c210e6fa3c614047e119368c08e405a4343cad97d6b30ecce000a22a3019046205c6aadfeb6459fd091eaee31af225ff8fee6f5543eb37315003b7cab9472a501121a62ca3e870e231649e6e833b58e76f3b5a61f33b367b700dacf4d1d05d68191dff0c47edf65198c20b04834e0b854302b280d0ecce19c00b253300b966636b121034474f4344834723d2b901dff586e74e73fccc5b08300968dbd39417caec3ec90243aa7cd7ef54e00a4cc6362ae7309c8fd19be1fd7009b12420b6a7d2047bd9f7c0e6fe7c29d898d2187d0c0afa970e9506e40d3cb00427f470c7367c4fe07f2dc0afdd7f0646f7968c462417bf8e39be303f235b8004d5f1f1e51c2b027b2f0910a91fb5b50131c423659fec5e833b29a440996bf009c7c8dfeba6eab6132b8b7bcc55f29ef71385d646d5f7a9b058808c1347b63009e8b03adc33e553d98de1e1e9017c3976ac910a662f277e908084c9be6f737007846e4e4067098bec934c724e060c853b36ee1ff2dafb1156a0ccec963895e00188ffee8def41363e0cb485934df99abbc4bcab9800c0a922f4a9f74048aaa00b2a2b5eb5361f4ef50a13f084f336375ee192632e04a7f1781880f71f8865b00db7dfd640158126e7ef64cd14f1bfd12a86eff35ddad3ee6333bd63d9b8e1400065e6d2e82e6b9e9ac59a118c02aa6d67670c0f7e81228300008cf011df911006a0a6e5b4156ba479edd7f4b1c84c734dba7e157ad2162003ae3900913c14d0067db3dbdffa02113812eb1a335c7b6c2eed10c0b5f5799ee6a83fd0b9ee38b0057cbc9951de3f173841428e42e5a45bdd9caac835e32562c844c0198b1370800da9286a62bc6d4fdc3770c33fec9bd93417e8749ce365c93c0a0492de46f12001d14724b9b599a3cc379522667cb7167a9bf597f5822cc48a4819b126d2af2001d60ee6bfa37daa3e7d44c6cd19d423f8f3d7736894fd0e7e5f43386bcfc3d00fc465e9494d92c70a5f84132dc2677303794e32964aa816282c01b896c509000e7d4f24ae15ff8cbabb34e2b2c2e728f904ab2f65ccba24abdd466962b4ce700b9b71fec11ef172ef874bcb13a342141ffa3a6ef8fa85eb621e84f9bfa60680024b1d0d4dcb9ff2164456c91dbfe309d49405dac779ed817c6ed3fec1f6b250081caf3c47793d742560e99cd8fc7ded219f13b150b052d575b86015621a1fd00d128654c6f496dd0d845e85129d1e628703eb688fc701f2edbe890e6cf8f5f00729968509f66b656abfa3edbe0610dbd700fe90e8a2bdf1aab61c5f94f3b6800bc898d258be0ce512c97ccd819f834bc74ee94f09d7f0287515c24fe2d0631001205ab32ec99f3eb997af0f33de1a150d4ea23a12c00f73c8f8b9844e9005d007cc3a76310eec403fb4d078d03e8f299ede73538e7c4f28a6390daef7009c80036e51be5dd4894a96c4c54029c64b4ee0a71b3e26bf2a309b1a4a2e0b259d000b1d8f11a3261287d2784527867e47fe54cc4a1864110b42d2848c859068d870008d721726aae0b412ec7a93580a262de23c17a00dd23f892adf4b886671ed400c268328407a5ce9b6922ec840e6356827781b80b2eb07da3115f72187f0b90004ee876c6daf22b1d9b05b3b0379caf04616a05b5c33ce6143d60741214f837002227369f6842e45357580171b5233f55f5192acc1ed613ab9353579576ba12004ea22883f84a4d9096878942cd429061b465384b3db6b5a8d2a389a2ec956c0078ac6f47c24a06028cb1e3a6fca3582319b39852551627ab05beef36fa408700aa459f8f764c7b4c4a8e95784441b0a5ec12ec71be9e09cbd207bfe4191694005062474217acf247bc3a7b5668f7cd28ed2955a648b4c48672cf91e2c719e3006d35d7226f9773f80598414eb5447ef59c2c7a282af1a9410e6cd023dfedee00422cfb6dd05e38538766a084103f228b9ed6c685fdb983a7ed040dccb02208005816e95e3e90c627c72df1724d603df80a090dd856f7efcb188e931d0e40af00e7376b6bc7eae7c5118662abad7a45e1094566b404551511e2d27da77d6e0b006f1b6a64f2c7d2b24822c5def2d1857ec7bb8832c04e3e6c4bfd071edf38f400e209abfab858d9894f84cd2810d44e537a0a266f1c155e322f997c6dd41f8e000d4e7f79cac70e4eb1e2f86ddd5245f80b797a557e8f4ceea9c5fab7b96891004e42762fb70f8993aa543bdf5c484d5efeb714d0c8cae05fa7b6f13785343f00165e6e023f81e829a8e11ac34cbe4f110c0805e053dfc23afb9bfc7d55b8dc003b61641a11e494ad1f5200ca65bea50ced23682ad6cd7de71be4edc6161d6f00a07d9820d765e8db86a44a861243f03e9c9f6ae651d8e96b06c0073fc6a08d008fb35490de6f5cd2112fbb091ab8299c8e273e69af218af257a70ac4235fc800a9895dc058f34caf30e3db8d7db76486c54187732ba384197c5ba292c8e40d00ee2d0cadec12e228f732aa55bce56917fe5e681fd703733a6acdfc252383bd00df484d1c9c57701588be949013357587b976b0fcc1bd0c195fb50e6fb0661200a9a5f6f57f89775f314cfd41a953577b164689117a0e37c1274ac6c90a080f00758527bdf8c4414530c56116a4364c3bd212485132ad8ba49b104ce9ad45eb008dadf9bdff3367ba111b62af7968a2adb1bcf410f1d2ced305206b3d6fb02e00d137b2457d858f67454c68502903666a2e295a1dc901b77d7c67a4ea525963008d5d377c85f321224c13b8c9e7dbebb4f7bb0a5a54a49eec1c7c42106c034400ff03f702b37e5b5c8a8e8ff27c9ec3765ef48054e33ddfdf35a78d3568ab9b00a8fde32007eff93bcf3c8d0ab8c748d4ee8105c2d5dd396ea8d80cc78fb795002a4939ee2e8f957be8ee06fb0a741b01605483b142c2d1dfe770c2d84a7d9000935c2eb1f4ada8c9f7e95daca0147b4bd896ceaec0005c41c7cc1c82201655009ed0c70c957b359f41c1ec026cc4ec0f3471fbe8f8e969f232fd42e8637ddf0060db89d4cb0546c764cc01f72b30f3b18e13808fae67ab0e888f399c3faebb000817c11e77db5fa3c2e250723752f72614513fceb599bf04496a87b995209d00a0c8d6df62b44d025bb8d9ec848ceced74768d7cb4750299d9a53076e8833200c29f41aad9eb41dbcf7b560810e63d67d9566e161eb30beabd1ea08ad54df900aea612999cee8f3b0b44c930dc75f4f7bfd7e806abe033342434e672682fdd0022075f81636e85adf8bd89708e56db71ea1d8c400260d11f21e9dc3eab376600ca47660f07a25f86d357fe1297aba050f327087d4430bd56bf5152155efa1800ea3bab34998bd5e9805e6c32ad685a9d7363f734fdb9c995577104153b221700211a25bc376ccc14b67ab369b34d19008e7b1d6e85a76b6a1669572273202d00e359dcedd00be5908ae9cc323b504480ec67c6b28d9d4a13a41327a9050eb700293a0e5b5ae26d993b65405970b2aede2d57cc7545687e951e89a1c8372a7f000f2639dc196095c8d5a8793444e201787f8253c00044e324347e2351fb55c200d48d09d41572c319e8eff5ec7708e8073d742897443b37a8bdcc45a721050a00f290c50e6c44cc5be89eee2ba43dd458d5923b132d42149a14fe42fbfc5775005259df4a551fa5eb1893f869203caf11917e2c4c71e7c7bde475f13e99a7450002622eda5c8463d7329fba14036750fbad21241fb9d96878ea1f2412bb2bc500d5266dd616edb4af5e22705381f69c40a380402c16c123979dfd703d8fb88800c2b6e1e193dfc5832c2efd27a13df0eb984139c3488c1fa589e43283999dd300c1248ea7980ea9e1b6e8a325a8bc7f024dd9e406622527606bbeecb58dffa10079e2f26090e63158bd320d87e523fe61e7f3ab7f2e87ee1cf9adb70b8a65c9007eed85a0f9daf95e74c4de92f24d524decdbeab514cf1401593b15af9b7cb600edebfff0a858d2dbe871a4e66991e9a02dc9c9704e5c9a22528cb6c0e60e34008b9ca9dd8e96895edade244620ef5c1009929417f608c3188c506c06c3fa6500d86068ec1d9c56ad673a4a1b19d236e9e11b0a0d62adc205780ea5cfb8213f009f0aebaf5de6d2ff54600cd80ff205cc333ca6e82dd3792d36f637b0dbcb2100bf031f917db10cab423e8b2a6552740d047c3cc3fe5aac8560703fc1abeead000557d9e3820adb1321f3816b76608316c19ccca9a8224b263a06c886b83571000884144990089aadd60b00a9ee3b521b9e101b05c13db13bf9c28c9806d544000982ceff321c0a6bc7a63414faaeb9c59d7cce9cfee7e27ed8e3123d74037d00c01900145d9fa3152480d538a008f270034ea2df2852f3c0b0f2286f665fc400b3b44709034bb1f92dcbd1fe5dd95cbcad937d7fb81673df416fe085b6ed2d00fd05bf10c801a7f7d51a05bd3b6cd8e5f7d06b3105c7a1a366aa18dd9769fe009e1cf63139685338b654cbeecb0e0c4c8eaebe67f65fce257f6e1ea424848f00ff6ea04bae307d83c74ba29df3474b5926535eed2bc1d273227d04fda5365c00d4ad9a5d28342d4560fb813d0c0f11762ae6624470acf2dffdece5bafe19ee006b0f8fe93e87908911106f1f4245c4280bb0a62f3e6864a50e439f717f0d30001702bfb62449ef8bcff3cb60af28255c9e794321114a28c8baf820da78c5fe00c03fc8a86e21924e74af5c52aaed86684c73694b101806cbc5b14accbfe4bf00d2e127745263843ff589b29706bf13638704d7313356e7348c9851d4fe4f1e0011d8db30c9a1ed45651643d2eb7b564d427416d7bedc3023099b153d5d53d7001539a4956934dd315d8e816baa73536e5254ed82542c8071b87d97f5a902ca003a7e7ed0a82d6c4c3004fbcc58e5eb74c7786811b90cba2f9c2abf986aa0d200b047c3526bf6d1832739db5ec43a2299e1f4b6b8b7108e4ddf51002f76a64d00ff7d7fe5aa9d936489ccf307a8a26760afa9a3cec9a65479c492738f41013200fe07ebd67d5eff46c7cdbf24fa3a7d84dd767837ab99a9d0715d1a164a7b68007cf631f8d2517209e8d5dc8a3e131ca3c9e0a7c66dcab8434b3ec354e5ed21003ea1610a42dd223eefb52e88960896ca69180a25ce5167da059f61b3f0ec4100fab62eba9b566dbd7aac2910bccf0eec0b3bb3b5c04462065e3c14bfcadd760047023bc1f7dabd95fa6c6f60aa00cb1b21abf968adbc07767949411af6cf630064fba2f9a83319184062cbe5f07dea0620e0d42fa645157cdc1ef1cfc2ce380058329a59cd8d908acaf8284dd70e3b8ada39a0aa6db1fc9c20ee24b54609440033fcd8ed33a547db9d36f427ba731896d88a424840250f78ef9a074a416df7005cbbcbb15ad219adbde6c2fe5a3ff507936c3c4c95de36cda659afb576299300647beb4f8e59cfcc59be688151c02442f7c4ec5090c1d75b1b672ab07818d9000e8ca52ac9c04ccb96fc5c84ab54ff288a53c4a0c695abaffd0ee23ae8f1c000e64e0c26de76de4a31b0f18bb43b4647b92b934c12425930372cb9964acafe00f47abf61c99c324674446ce4005b575d5189ce85308614e15b245c144ef1b800a375065443600cb967d504ed25e11e3550962b5adf0c5031bfeaeb167f35270064d943ca4964a0f762c3fda16dccdbbf2c7081adacc73fff07a42e7961663100f504512e26b4207186a025fde4f42538976ecab20c46862ce394e72dc71abb0000990e23631d228a7b6b12c1c412ed62864daea2764575b065a069b0b9be0e00fb76f6b645bc1a77fbf8c3d8d3c80090cd5728067ff6d85701c170e118b10c009e6ffbe075e4e93406b3a4f9ded691eeccae9e7a4e737ca06116eee8f402af00299e12368e1ff422f8ee9f1d88fe06931e47a941eb3f2c2ad076d015485747009a3b29e80f14b128c877e8bc63ec0f920a047f670bda43cdb07c126055939d001aa78ae2cd0491578eb50bc138b4d0aa65d463ad755239c5cd7de898ab095200298d6408b05115a841f8b4bc12fe942427e1487e806a5e932768175dc94415002454a831b4dd45d30571f6f035bf292ac608dde8a6f3d4fad941172f5735e0007fd32b1beb7f3b338f107151c3d058440b70080d7006fe9eafa10bed7728bf0057e16c05273741f6531bb89d2229932b9effbad32bd83c858a207a49ee9d3d00b8575e1602c906c98bb113855421633b07424d83ac07f7507e7f802e1c90510079ecf32949b596eeb49900ab124a1d1a1acafa93af5169523c91f808f6a28e00596cfa20b59eeb0bbd464cf14d23eb4dba54a1eaa4fc56d7934178c5421f3d00e4c182996403a6df315cbbe7319975dda0869aec58f4fe7a6649fbc39b43ef003e09d5e3a5a2c6fab26353086161bd421aa2dc5cb2e43232c23a2aa479e3f4008c17e962ec32cbb84af97164591b08d87756e7a85b89f53dba86e73a6c1e40000bb00467bd9969904de85c46d9af14ad263205e384fa6c29161aaa869438b3002c9fb97df0779e3cc80fbd6ba621cf7f75dc52526af5d133cb73589db66923009b4c8907d66e1aac7836115b4ebfe99fed3877ff0db0484018ca739c24af64008556642515ec6f009ee2e6f1e5d7e42342b07391ecdb64e2baab59e1791d440062f6d44da595822dee1a1854b6b316557a215d2774145b31e92d6e771645ba00dc6fa0d39caecb6a906dafc25a697122d0c338e00f844b69da013b1824cac400789295736933ecf510444dacc5278e0b5db201081699e916fe5e61065c2a4e00e1f8769240973717fc7ca685cd820e43800710aef671e03d342069c7217af700d40d4ca1bddef8a55a780918f91af32445233af8c83f72c99dc25a18e2498d006e5d21871307070a54628327ba20e31e902fefcaef6000ce659df2b73141d10010b74584442a0b3c1bc69058ee45c1cad995158ca20a390e9e08fce141042f00bb7e5380359413760e8335a754e0443da3d399544f56629634ded890c1894700c725c7b4ccfce30e60df936e73b10d1b867640fda30254cac0bdbb3f672f4e003319d225ca3df26bc6245e0676ce4bee48961446fcbb93f9abc48f454b3e5a00e75c66b67c65bbd7631610f01c42c4aac72f6fe8de289a034f30265e56a65200db7923e7817f980f53eaa2a4b8187be8bdc65c6c79137561061809afd92fbe009caad0264cc70855f2c0bd66b8069a4e68193a3dc3dd9ea621b58b31afe31300797a3cab42041d51f428d9dedd6051fb0d726cce7faf754771ad9da6fc4e7700cfd17c2a87f1b1df071e87fb9e3f928eef4bbe9b5e37887e99bbe7144711dd002a34b970200325ee2afd15c16e1e2d361ebdf555a86ccba54eed8392e8aebc00d025baf457bf0c912a3c5d0117d7d5b06e64fc51ef3d95b5dfc42aa4e226a600ea2ea124b6150389d7e2b7ab4bea48090183f891bf048c384796eb067b675700f477cc00552ca9984626292865b4c7f21a5a194799285e5db6aa1108c430e600faaad6605339e19190903e48cb54ea44da85e307f2a4a6dc6d60dedde4a18400ac1fb329a9d4004d1e038bbefc656b767b6e7de5a61844ba4fa18bb9d1481600bd1bd68c05974808155cedb8154cafb635d5376108ddd3297aea4e77dce803003bac0814dcb25dbe17c6ba75e5f14549a08d49cd0a7358601e0b74cf188a06007187d687c18ba0d0fbba894edd4b1f72b57c3ad430a718429b39ec7f895492000000a3a7a863da78e83f72db643da3b42ac8838c9632ce2f95ed881446414a0063df23841c8579ddb8f2c0db6194d12b8cc76670a7919cdf8de2a00c48f0bc00fa5cd8d9fc5af1f526c83fd04636f3c42780f50ad0a1d7a84a71e8edee281200202ad0f6dddf699782763ec02bb90f62735127d810f0609f334a638018162500ecdf37abbfcb4610bdd40e323a3e99ad058bc1bdb4fa867f66293485d3618300a121152de9b05c48c90b8afd514f5568cacb5f6969e24b022eadb6b66e69e5003aef5e27601c00f8b0c88c2fcc4b81073eb3ad7d5fb9597596287e495bf4cf00baa738b3dae8de89e8893bcc730df9b498cf51bdf77ca4107952d8e83f0d4800859b35bff99d0b208307507396a7f28c3a879ccbe4fbfb368fa5ae5b98cd1d00efcdb209729238a6fcdec512433782f112a76c72f24d427d2bd78c14f6efa90052778d6b23fd0cd1fc1035ab564574d2ae0e9a51ad597449257c077d97119000b0a12a8d9099bbdf0fc8437095d39eff60e7cdc032d8825af63ebd21713be40009b779265e91b4afeb9ddd4c0b61484adb3c6c30b164028c6d1e2da63b9e5e00c54b6b3d2756f89cb4841a09e8476de0657e6cd2ae89bf28f2bdc9b0430e75007846c923d11526deb829cea5cf8743ce8989c28af37c91922d74c1a86c522c007a02e3108816e68c75085548e1c7bf61b820f92b215864fcefb65cf62123cc00b17220c27fcb512cc93243fd07399e98e5ba08219527de53bffe6640cd7cc600bdd12bdd4521515701f18fd9e28ff7510446f273cad86ae3a98f2e21a6711900959a27edeea98b38f1109792d23c88a37541016b20553e03646e183399e542006884c3023707b44849c49536ae9717cfe28f4f80ab951dbbfc9b1440fd9e0200483914367b47709f48a43bc5be69af95986d39c66955f9876c624284ccea4500c3bdaa9c750196a58556c16b831e3e1405970a1394bdfe6531705b6d2a13d70091624fc3821f138477dbb92008f34c58750d86e3671d9e1043f6c2cd585f06007c712f9a1da5d43e3681a7ece7e7195b4752eb8f26b946c59f8e6abd98b09100d82169c901fe66bbd7e4aff0d7a50d66f4a9c377a9390603deddafc75938da0038fa087f122e0e11598224bb86b1b752cfc20910736095c17cd3ab0e43c6800033c2ffbbcf8fa696a4b34098466a223b9b47c487fc4faf09138b4b2d4708cb0083c3549f3d5edd52f442cc209f609ef002cd6ee22661dbe4be317e5b500bf800cba68885de0a9599f12a470db197070b43d68fd9d0b01871b65523e175c8f00081954ce1145981988fe4a54ce8b8bff331b32480c7d549910fd05e7fd2fd3f00b0f6247b0eeac990b8b7366f36bf5c53bfbbfa84e55aee0fab9615a7dc72a000c8e5af68a6ae75c16aed8c54991914a2a58aff2bc011ca6add8b0000e351fa0091ca6a0026884a361d3b788a4275bb05bd3d2df031b1a25fca45baf8fe5f0e00db79809fa0b05d46e304b676238a0a688004eabb81ceb5d04d4806a654aa030070fd6bc24a7160d888f722e8b155e219f06d33507e8acc7aeaffa07a59e809001e8ad71168e9039a2d55223e2cbdf97500355ea1623fc44034d1bad29215440001f273ef3fefee536fe41a1cf784a8b6131963cb06cd2817c47233ad4cb71900c96b76f6ffd20f257f94dd31e659052ad1997164cd8e9648b05740ac4cb09f003b265915e20c0b09c482eb9642d39257b7ccb82df0e28c67268702dfde1f4200e9eabf3b1abec7b1d60e83c3799c8b605eb24b6a153cedf2db969aefb46a59007e6df7de6fe3168dff0ebcba754bcdd17997b90c36f78feb665cf404a064df00bfe3b561810138e7b2c169b0cb094d7710e6e47fc4ca6b4d4cd4ed41701bc9004593ca6b5564d236981547b43c695637d959bc32399531d57a258a0bcbecc1007137a1deb17f4c1fed10bd2cc8fa42e01c87496a9918cf6fae30f960fb4091005ec60a2d31e2ac2f05223ed10d91cf14b62e2ee7230cb315ca70bb0bcde3d10057f6371680289db1a69265597200e6239731874eb26b1338e14992cd01a4a000b640b2d4bf063d18727ad72bd9d68bd25a379a2ac9f5744f0798fc1787434a00893c98d635c7bfdf660c93b82224e24b9afe413846823f24a60d4ea4c77609009fbd3bfa4542f9fa20393c02b3d44666283d5ef17b5233fa5d117c21eb4e7000418de8359eb28aaf6829f1988001c5461ed9bdb7db2d8a03d8545b3adfa1d400071e1b6273991c4ad7936bba8d52658a8ffb93d469d38b552646ceb523c9b500f3c3a71537b47a7797751a4ae5d1707f4c27e5e93ff778a11e2aa7dd4ea250000882c9234e597710bcb71b741247f3fdb316bb08fa4c13d8aa9bd5af90876b0057056ab9a9d73d4e143bed5e7780c54032695bff78e3da7c66c9587b785f9c00541ff2ce7fb0e4b18b90582f0c2d20e94573a74c62ecd959cd061cd38330390055b64f95c6758f3c67503b099a7f565ff14a8c04546bd76934a40bcbae75b700b5aa2cbcc784a7c5e30972c1ec09ef0cb4007a7314befeb8d2c929fe79bd41002e870ce65370a29a3d01c7949b54adf31d576c58163bcd0f12a466de88e7c400b22356bd5732f25955b56764cf47ad955e496736012cf217632829278f3139004a647a898c0303ebdea80745a39a421fc23636de223135325fba66b9e22bb100bd2fda3778970f410405c6abd1299fdff9d55d8678097ac63f66cc2adfe09e000159415f0fd4bba82bf210d6e7b427e6fb64b8dc13f1754882a2dbb32f998b00e4ddb9929cfc6dbbb1f4a1281412701da452fc635ce8b031686da099e5d97000c68f6fae7d7f01fcd462765aa65875b7c5d425feca92e983550496c38dffe500bc4802f8b19050a72eff3dec640b72ac4005bcbd64023c1e62ccdfc22833e00041c23ea43c6e93ef9ead6fcd4ef746c989c43ebf1b5bb1193b57c9546c129f001509e3a8563f053fa57036bc9857e41ae1e7792fb43c29c9bbf6bd79fd66230013c3e208a07c2eac524def8656a1424caa88689fabaf2ec1f824a026143913005203fa0ab553a9ef3f9be49de6b9d0b3c7cde9f4d153e712a7a590d54454af00fce73f62dca5d4a79ccdf2b0083d87dbb7e0ee78506bf2165c2ede1996b3e5006f9fc915314955765ae4fdfb56f1a7b7a6c14f737bb556e66b31a2a2c390f000b9c93a34177b485cba0ca422136447754a7a58d499fb95df27963cd103183f00f12fca5e1dedee1d77e8aeea3b0c688e63446f6497ad1668f840d7e0ed07a800ef45d493d25992904634d9bc1aa63c237ff047260ae8303a88cb4c2b5208bf00b6413601b31172170032484e1d1fe5f0faebfe1e0b31bb5c803ce9869655ad0012faf96f782ab51ffec48cffba54ef4cb89fc7643dd4001d225169597bd7b2006b106ec951b8e43d38da0d7b34941a165e8ba311e96bd44a23feaebff6fb54006e38b8691872d6f3b159f1bc383cf6b996129995aa65b416d16dd8b3b462b900eace14991d2e58c9cc957e6e043a5cd6cbcd95c9aebf814ca761286e874fde0095465fd9a7951cd56dc6b22e9c403cb2d75c39cb030df1c6f4601fd4d284880060d4eeaec0784514147a0098d28ab9e48f96acdf8e0a8487596405708c05ec0024e4cd593e96fcf663a2e8e7c23f5f3dd054122cf8c3260b2fb58bf93a157e00e6e62c41666e5a5604df019dac6c49c6dd1bbec7e39095a878408069532ed800f1f81b342347e8ecb7cf6b5b31efa39f9c5d8ee38fc127b6adccdad77d0b9e004dbdbe06f5b9e8ec5d6b184a2d81ad5bfd1560a454aead87e20749acc5dd9000a66d992768898e992f99230eff7bd13e1c94a94a92f68795164ab93dcac8fb006480c9413244f089f35e8fb71712cbdb774f46730d4caf317cd7baaf97239100bbbf81c7efbefe5e059067712b065685aabd9f3ee59d76db97110f926e0e7e00c76668cfc7fbf61ce7f1830e28b88ab6b7cb332e3520495e3f2e022b4418f7004a428ecd8a69edc2363f4d7f3da4420f4ccfd00a7132b5d0514e20773a1fc200578a173eeb6d4260508454d53d16b15fa9285ab47a509baa9cf1a4d8e202ab00cd01e3dc22f9d40e0e321cdc3cfacc1178c68bf4baf4105b4f2f0e849f563100dd5c6e526f2788eafe9095fb23288e489f648cc8936182b15d46a69ac9b558009fea6b762ea77e0970f98d7b4db3ce032722a1e543c06d6a6bb8bf57b2f6ea00c34965efec7367bc26f8dc7b66fbe0d053fd87b60002d4554f4437bddd1c3f00d9846f0f11d41aa3581e78a3475380acd2287d68ddea2072950414cc2ad73a0037d45aea2eafd149493bdad64873049aeb5281dfb288d9b17c71c92e9394c7003a31ebab6fde279a59e0cb070782db87fc686e070e9d24bc3da179fba02c1700b8948150e3a74cf4187a1844c8c70dc6bff9a6e8d13916ef85bfea278d9a0600fab6f9946b6f1c40a8a7f270539a05217c205a126ac8624b00ee016bbee0ac00e54537983330f525f7585bbddcf5caac45380d0b10ed3aefb88dc86442d6d3001564fc928365209dc55f13f063c93f2b6ca4a2a9c12cf0753d646c8e10c6bf009f1a783032a447c943eb72cc659116631e9332153640df5ffbf7c6713484e500d66528a6b47d81da6248de0d9830d71143d29153aeabf99782810b7227f3d7003ca6556a08e2e4238c9e75c4f6ddea0e81facb516d62fb44d561983399410a00fe6eda2e5d5e156a628d43d9e65fe67f468517468f1966c5d3d52ef098c34e009e12c2d3ccc20903c41e49f4aa99eb3a9328d7ee6ee12939634447b6bdeb8f00a684e6b618988f36cf99c7166ee1f966c23b1b9a8f3d81e0abf6bdf2b7619500e9322c94c05240e4e04dfc799706f9375d8ccfacce356cb6c3274c09385a3b0054a6348b03dec7f81a756f2a52731bf24846ae0113ac41f17ce2d68f128605004bc73100cf3f62e8dfe51ab3cf93e58111f38f5fb7e324ac2f004f96f65b3b00335c5cfb4abf4c690c9a8babbab1428bd0a5cba47efcfaa882495d9144baa100ffe5a932a71f493a45f08fc9e57a6821a51452b8b03eb66cfe0f7bfb44bf0e00df801178257289abad6ae3b6869ce308cc2b0e39a444f8ced8c55714155d7d00bb62c281ab3ba2e9c228ce1bfb8f98cc0fa7b161f669bd642de113e55e354d00f051b5afac283c1c693f1f1f666fa473fa6ca32274425e8033978ac2c31a53002dc1f90ab914f5365247ffefec103a0082e8e27c2ca1fb7e89c476fe0b6d95005c24b8b25e0db2c87e2d428baab9a926089f372da9e2cb4384cb9bffe2172a006e8145841c788bcc3b24792c579456c619394fb7ad47a7f8dcddc58b01463e003627a67a691df0d0f483c94afb8b93e17cdbe2155ffbfe6bddcdeb6c3e6d9e009397c41cc5e1fce827dcc5a94cedc653c4566489fd094b4997314713bc9c01006666fcf32e0bdd8d6df32357eb102c158e84119483c3f53fd2b62e6c966b5d003a05e5872fce5de6524914c524025da20d45b5eb4dd23b51f176e9fd42b00b0037d72770fb1610166389890e113bc4d1e99901692da05f3161e7103d70e3b4003481c75bcccf5405fd82c145bb668fd060316d09305622d90ca2086941c8cf00ba68f74cf1b0a4f38e96d94ba07840f42b95cdd3da85cf395188a6e1a07dcd0042ae78f5e4923fb5473dabcaba44a4b580fbe77c0b9d012e36a298bd6a3a720062f76d0f6a6687eb985751e0337ffde33b84b06ec7d45027e3160f82690c7100b330b46ca95465f7e409e5a2108666c134737b3db1f0f1d952ed0b0fbef05e00f458525112f8a65321c5c015d5a7ed0e63fd51f8ecc6b14c6262af6043d55100bdd1cb8e142ef3379f3b7749effb8ef673fdf59d730eb062e12e96d65f6e1c004172ad92e5139cea96d9b453bcf38e0f0428b77017e88e88614f518e8c7ce500a827ad889bcc14912bd0c94e9f20dca92747d9347642ebdec2979be2946db200bf6170e7cb7c8d897bf5de8123f1abeee5569560649a5e2b04b0cb2f6a0f9000bfa5cac2a2d860e1b0ba4cfd427b17f7fceb8064cc5d673ab42ed1f46546af003739f258411d848cb8a5d194efe8aacdb5da5c99b6da8acb7f346affd490c3007a45d12083425e4151ad13060777d8eeec438407bfcd100c1f66d0dfbd938c00cc8c64e39ce272cb6ba651135fb54a1bd9d1093e585b83df030e545d29507f005a44e802b80d6f611d1b403c74f42bc299145dce61b056ea95dccfdb44bfe5002fdc0b97a9a9484af8cbab83d3d798d53dc556bbe2a3b187493e853a35245d00c42ff6e6fd5d72a86fe3ccc44d96fcff85eb6b73c65915ec58e9c577eb966f00e78330ddecfcf30d53249308619e22afba0ede2ddf6ed8083b32672d380221006dac89cdcebe31440b76f20ce6796bd5c6627dd35c41ed38a460d12806e5da00665ee6d812a88b77b0ef89f2960da7ef10bca0d045176d57ff819f254d9b4900ba4dd134e3dbfecf932d8b6ac35d9f5965ac6c283546de0ac7e26c44fcbdf800e071ab6e986048878b077d0789721448467a6866fb9bf24188a3b4f0bb4c42008edf4ab450d3ff76269e8f6090c0adf5f4971b6bf943f32608b1f25c027f250080ce78b5b3768c804798a8dcca9d0b7c423a1d29a9a135e07e455532c83168001c03c849d093bd3e140bea7c177e84f0515409494bcd920ae83862fee7dc9800cdfcc95b9c2ac92632eac6177be3aec9b591c09907271730940efd081b009100d2eaeda7c8b659d788fe32abc16f953cecf97b096eb16c5bf1dcbe6821b8a0005ea92edf539a60b97560f0d439533a8c4d6a7752dc155985448d02a54b2071007bc53bd8760f9cdc172d22053724498ec83e3de881e3a3cdca00841f90259b009a451e7734d00484babf4941c40a20b9e593a9c3213a83037853206bc4ebdc00f9a3a7ed6ca032783bc7ddf8ce638aea1cfe615f0a1aeb661271aacdd1c849006ada26b954b80d2860ac6c791b3e71379b5aad63d86bb456001dc704f1339c00bd3370be22c2ab31dd3d7664c88f479e4a5c5ca289450e8fa24aeb1cfcc5a000de743f76f6c5d1584cc00d9159857d047327701c2bc6bf44f52a36545b1a7500e4f282816622b93b548c55f88e67cae4f9c49d4450361b600030d99d2c957e00c066891b9a150087e1f4bdc5c9c3fecc2692f1b914f7c384fb76917e1f8155000f59292a3ebf1f23e5906881d6d07867e1a035e3b8f47772679752a1f17432002785bffb56db1fd912f560526a0fbed9f780c89280827137155f8726aeb38200dc8a14ffc9e3488afff7d7de0e84e228f2b7b2b44b1cf6e3f6d206537abf490081701f06ec57d2e3555640597c13657da2a7d8929697b872e006f9d1e039dc002f576aa23c1f127b51e423e198aadb3907c1e30a24f74fd150a7f33af28b1900b911ae08e08506e1eb59fd9e96d4d8cb1877035054ff26570e651c9978612300ffc1d2fc2c028f0185fba7b31541c93551a8afd6d5cddd9bb9554ebc9051a100384d7075fb8b3575969f382d63536648a9eac2d9f3dafe6c77f92e9f0b457d006ae1681ccb19a2b8b68b312c623ba68d2a5f1a6d0dad8fd0c77aa45dc1db8200feae0a72560811fb3a87edf21dca54cf617ea86c7933dafcecadb90c22b389001fb3c8dc67ad24663ab17fa655be3343126d745569e08ea420c8c877deef92006f3988de8f9d80d3c3972f69dd5212d5958f9ca043714b99b93dd64721e3c800e43e0f06f2a69a2dadc8f8f4995a76bd5ba5403f32f0d0f126b1976d9001ab00e04411d26bfebe83d80d18db055356a5beeec5a0e39aa88fd205dcab63c4ee00ff700224d2f0c39febccacfb2a916d8a7ce21d99413568820259edd2ab1d4200344730bdbccce14066b421f85f7704bfce5e49726f03b9f110a8566810ca88006703fac7e3a371a600bfa6a9500f02cd4df053d6b77a3628eadf8350d4d885003cb0b98c41837096753bedc3594ee21dc721e927717330fc861b3babf8efb3005d66b760840036765742a63d136c3a424651de3456bdda7c5b2e301d8ce957006706c704857df9ea628f702cc46fd5a2a64617b760bd36db8a3d3fec27affc0040e080b531633ecb0f4ef0154932cea9118b563006a7d78c236348e90574980025c1b6b8b15a1d66ac0c924d95b127ebaf2089e1a7253f44b29eb4e95d3c5e00949aa41e615a0e3010b719b3c335dc6202a752b9e2796d06aa6cfb882d7776009e8abb909012d91a69aadc20fe5cb3a304181b92c64c8cdd3d9639047dd26e00aa665a1ee003ca4849f2eccaf987fc95aca99d686c7bf12ebc67daad778c6f002e6797214607380826f6dfc2b51ea36f78ea23c7676ef3bb9bff7ac562f607004b1ef52886ee9bf1befaa5c6036cb4e47b1b22253f9d682a306c4859e5d1be006a1ed95748d23ead1d39612898e5965032b2bdc356e00bc7e87f442125812500a687e3c92c2976440e86f797e7c5ff3463ca832979b7a1d74516c55c2b0c6400666c78e5e939329f25ff6e7e3d90e4cd08edf251f3b6b1104ff9d3374c3a7e00d914424cdd9e428373568d6d176f99d5d8df6a7797aa29e8a1558599429b48006c325170e2100728cf33cd46c054b9fc599d0aae7314fadd8d12c141e1239f00c701b567bf1306571e0a92a99dadf80daa50a8498a7511a4d924bb7a83418600c08fc68699c4f3cc8d636da425cee18aa3814cea9790210389f17598d9d76100f2af949380745ae7265ad9d628526bcece007cff9aea2e40173ced6dc7f63e002384e67ab6ff454efc8ea55a829f024b32898bb8213a2ded2b5a58eb2ebedc002f1f5729b0b1ee3904eca8890b32bbfaa1fc36b4beb0472bc2b393c42b2c500014cc932acf9321682e92e8d334ecaba92cd2bdef4a07f5227a4879e34f2a2600c7c2c6f8c73f9f4dbb48ebaa0bef86396efce39aed077468990a9fed2fa12600c2ef2f076ee7dff0a054425ada0fcc36b6389a5ba07e8afbf62381c6023e18008de67f59e58306ab748a6ce181bf5f0aed4ea5a430139f8862a251151bf3210070a16b08cabf2d08f5866fb365079370bda646a83bb71688fb83bad6efa98000118423bc38c885593e915920c4f025cc2cca9f3faa90cadbc668c3d5d002a800b2acc187c86080d8990fc19f7161b23ce34cacb6117fad3dc65795df117b1600547bb7fa7229eb7e87da79a487be7fdf7648bff7e4765f9f720cf9309a9d2b00f57334068f71b507c99618900585f4f3d0ff57dc11d34b23514922c9292473009e4e6e9cacd6f630031a15a90c13612b9e6137fa270536939014c211da3e88001fb90d48b5b2ceeaa733e6d6b1b266e1b91b132e25341a0d020f8f138c7494000ce0f1893d6f5b8b031c1f2a6e1b7e0a7c2a735cbd881fbdfd0d3edad1b95200cd5dba5492413dcca832ff34311bf4ab9c126eecc75cae24496f03020c4dfb008f62ab55a9b20cfb8164ae3a8d57d511852c8b972d2459303c16f33c8e01cc00d1ae6d0c8bcbeb64372e6b620915ec5ac4c923efdd807cbd22726d522f3b7e003fc64738f31bdd28b29d0a4bfebe5f43ecf3c81a9bad3b79b39c90b9d6647e00c8c840b26c0b9dea2e2f2407489e51a820a0d5f3c0a73ed4ef0a70b24db53700652f208a2fe0f4597e0017fc9269d78e1e787976b17f1729c1788f5b75cb97002d29f2ea824220980a723d860fc2b4837fa47d2f4189f3d3201da9e8802ebc00c53ecfe0c69b59bfebaeea9154f935ce5fb4ee40d6420d45ddb755fab2074d00688308a48275e258af25821606ef2cc12f71ff4ef58d2e7aea7f8a689e928200f45e0266957fd33f0820b249c7cf14c908793bb2d7161fad30b71a3f34265b00e10e1d6cfcaba487459d6b371e911635b457e385638063cc09b3729c9b5d52009ca026fd5203dc83522ba3e99f56727735d677b209b15b631b1267ea315e1300377a63d7b414a5fc69b5dcf6a5d3ecc4fc412d43013bd2260e10eec47d7338009775b62db9be77d7b771b24cfa3236b5f15f86754842c0bed9a28d8d046f23006ef9809a794be2f81a56077bcd887ed1d2f9b59e0cafb3b69555d5619582a1000cacb7ce15be4cffbe4149f796d61bf913209664a0e0cc0dbedd46bceae865006c960728aa8bb7491ca30cbe97616aa3e6c9730a841694afbfd645199608d800dccb8c3abb3bd22806a7d8885c6a1d7c893c314a2687d83cc27de581e608a300ed9d013e7e138063e9630457786d087c15791b0ec7f0701443b66e86abf16100fcf295fbe92b053d811a6695c0757fa5aa1c8f33ef42630f1496ccc2dfc10600bed501e6ecc40f9918bba90d6fc60532019a435530be257a5f6b64fec744fd00d0aed0f91651d598e870d6bf46057bedd4c702d102adc422c761f34b42ff78002db982cf30904b855ed1645cfec919f85c638389a4f416b48af8a765b512f2008a15af1d72df122889fe622675ec5285996135c8ff80bdb78d60ebf3db0f350024ff07ae23285f1e98a16cb2af0da029d21fefde6f9335856d650fc8a8f3e8003b841e4eb64d5ffb30246cfb5972b549ee6f991ef63539df2f4d3c166b074d004a192b643541e55b97afa4a8b60b86df0327471295f7708527855a87552391004f99ceedd2997e4c53c4a01fb2513f9805eb5ffa1300bd01ab4ec270afaa2b00d9e5885b6c924b02e073f98d0715312d671a10379737a346873945a428488100b8eb896fb0feb2e7bec4432d352de170336146940858c5838b659249b493ed00d9a01d91698d4b7b0e2ea69a997daa87606430905eb8e415b209157b2e3fe0004e3d11a609fc79029a64d146fe4b83c1fb8f02c73d75e84047f799879482cd001df17f03b3a5c1beebc3fad7d1e6f24558895a8e9c1b41ca3fd82aa970fdbc00d856050fb77392fb62ab27a580cd1f1defcdfbb03f2c8be35454c915ce107200e0b0b499d040b2895ec524e8cd535cf577bddbe634b57b702ecf3b5ae4b9dc00ebba7c3fb95dca8fb351cf567cdfcb733399ba2d96fecfce0c62c55bad5c6b008eae672aa865a51eaf64f59f86acc50641b73714088f7a6894b57d6058f6a4000243ce2fea334664c71ed1b3d89321bcdfb0c178be16019f3677b3625beacd00363835afc64c388b9836699c92ec4591f2f2a701e70c2b85aeea902f2939a2007771835fc4d0dbe2b5a6cfd40d93d0e1ce3a0f7083dc35aef07a56d452c15600388f7ec91c27ede5d40173fff27aa332b47d6fbce5cdb9469a00beab78afc7005346a0ff7fb7d0ffab01f037ae21941cd1680d622b8c7cebef7764ec7d9e8d0006ef2b7f076ab8d74b76b0b63954738062578aa244e9a7ad5a7bc092a8a42d003cf680a26c16f3ca3bd91a1d3a643c9a0e2976490538f79f1652b492be62810055cccad62c95ca83d77873d825a93dee6a3251ef3c979fc055d044723b641800dbd855ff7ed6790bfa54dde7a07fdf037e64f72032a920d043684b5a335291005a160da2136a2508c3f5dc73d250afdb6c822b79bba4477fcd130863e6787100f87616417346101ddea1865c64f0ebc7c0221359d4d4a3cfe27280ebc873a0001117a6dd890db39e3bc49698b925f8569b314c64bf5abed7e9945e97ac0ca700eeb4435f2bfe268725c0883e1a12ceefe4eaa7129c06aa5ba052d6f055c0790099d0144c608f4f0fa1fd702745cc29790ff508e1e973aee5620676d20089170060f3bd6ca75cb47f9b1df2438ff4f0329cd86cf18cc7d6a4721dd26fbf2cf0000a9d597fd0e23e607eacde8cb42d8be83351573eb1b0e679318f1f674db16400527697ac7e7891e2e8404e8dced70761f0c0ebddc2755bd676ac14037d874a0066bf2726380622b874e8e2caee3b7ed8d6eba8543145531f4fd4c74056302000ffd4875976089d513f63581aeec39c88a30695376e903775df88094d0bf18a002eb7027749e4f615786e461a4400607d26fbeb7c1be48d7804ae5fd4f6127d0078eb8932d153696a8b4baa910fda207629c7f91ac5016547255315117ecedc00a538ff07c4f222122ac24c52fe85492cee229ca925e93caa677110bea948c700407ce0ba8041ba5a91f88057176f24f46b086fb8cdd8e01dfc207f9f0027fc0030c4c0a3e22b43dcd85551156c5adc7411709b23e6877f260610259897e0b300b6ee1cb8566cbdbb318d37a3f652de5583bd799bac974290a86469e6c4f47d0097af5654c1c2c665bba3f1aa05fb556a890de1585b12bdb7228c9ff6f8c4f9001f96ad12d520581cfefd919d719d88e4743d58d3a6611d5365e4bfccfa9f9800c92f961edc3208841ae971641f24a9740945c0e8a2ecace2c0d06c335ba998000f16c49a923abe10a0d7bd7f08e89503d5f15d46694e0cb56ad624f8e13ed900d4db0ecd7061cbe7a631ac4be746b3a4e5513db1d0e986a64829fd143d38ca003cdecbe25f6324cf37e54f6ed8a7c2552db8c1c34fa08d9fa79daafe27d7b100c4a69ecdbd5e8253d6598d85830e66f75b753f721da55310b68c3f8cfaed67003284f11ba4b773bc3f5844469158fdbdff3f1010aae9b4670cb3097c0ac3fe009f40ecb528658284ef2c0dc883c7c1c39d87e0d7c56b082e118dad65e0c4be00085f0aa88bbc383b8e596233d793456b573e8d96fc621db7e21f404e98e6ae006e9bcba14fe090f16020f22947e0e67272fc9ca5d6223b15772d824358ebba00d88502b150a508f992646963ae9e2584daa9ebb72f0db3a514c312649b7b230061965603845ed9daa1186cf51e39df1776b29590fb225049cade327e08f4c100cc11788b02aff016b5832eea302bb7a57696cb451d108e65dedc269f4b194b00ac33e38c9e1605dbb9407dedf0eff7fb4caeab692bdb3cc48a7aaa591737f1001a3b6b516b0a4d1d04cf7ed3ada4aa9482269528a4ca241f93f47566bb572700a04c32563e269cda186bb0723de91c3091a843c351abe3a54137f2b41df595001c881f8916c84b91611ed8158c0a7d03c6965208ce2d6a713fca980119be5b007c0c30f517dd54f463c444dcf2102ac5b7ad3a3beda2263eb9a3853818fafd00b1c6757510fc5bdc3ba535a725dfbe730ac40cf96a26691e0f2948fc6526940079a3e57c730e6c7d1e4f06ef7f6a170378f2ef98752e7603a9ed223dcde85d00725a17e05f5d3351dbe9c76c4fe02113705f91de2a80c000045333970492aa00ede8cba47918a8f1d861a4f334a8da674c27c36b9bd27ca6a0c907aaafffcb00720d93169adedf47bd91b194cc452ae90199bc355244f350a23537c6a6a95e00ea112af39cad964ed8a0bef079a3f40c6984540b8a191860bdeaa09989b8a700ac569acc3666424e3718ac12056f7f1c7ebe6d2727d2b0211098357f3a60bc0078455807848d29ed804032bb02ae926ac994ef9646e54673b5d2fb93ee5a8c00ffeacca73dcb82594f539cc52a1127e8de3a0f1fb7fb40f8cab1804c071ec800e7e11ab3a821bb5e93b7433a6338c4fba478f07da22112a2941e097161e8d000d6ca28caaaabb794960f7d3ec812166424a3c16a7754dcd9d58cafcf941b480086b536a4f0ab0806a2b38ae6f11a47c3016cb01e52910d935e02ea50270cba0054d4a597e6069906ec01b6b677b33cc40fbc8d3cff1401831dcd6c0ab75c2c0058aa6bcb484f3bceb7654941dab7af6be540f179c29e9212e5e6c25c961f37006e47339928f670d77e037a8743977a14ebf780695aa6788f4610805f4d709f00031f0e94d985b2c46b768b48ebb28e12ac9b11c77c4c25da2a78718ec7f1930043bfc0f59c086757a3b5898f06d72a6b7d7ffee224eb5ba3d47b93814509700060b1b7e8c653006ff8cf20320bae40ea9a89b21a6d31e372e9cecfbcc9e24200644cc3b0c214cd6a1c8b31c06e86e3528e47ee24594413723e3d0b018e7e7e001c43f93a7489f149128576256071f437b0a0c7a61e2620441b9b7264e1a8bb003ea4029375463a2ed9e4bd63dedf7d76f63dd229fae0708a218380fed9a2dd00e6454dadef5dffb898b253c0ad8d8db074022d1d77dbf929fbc74edabb6fc600896dda8adfce8292ccad3198deb2916a9c54f17e8a818c9525f56ccfd4e01b0003fb3ec34641fcf002ed52c66f62e5f8dd78b5326c96985bfcf7ff622bb66600d10295d093b9b33a11475fb7a4944bdc1adba6112d6853e24df7b0ebef915700d8bf292d13ad91c6dd83bb3e1dfc9039bb29e3930e60e1eb90c9eed4a2079f0024cd75009d4c25ce5256d79e90876e664384b368df0615e053cc8e5cc1d4200070714ca9a1361e6c37ed261906803a30710f99b7f3cc50e6699b2cef7167c700b85d2980f3d0fdd492ee0519cdddb273ad51b04d610d23626c17a78f3671fa009c26494d4e75bbe6abbb480011c627551efd7a0bb459ccdf685d23c46f74f800b00ef63cd7f4f7117fd1364979772e79737bc5e379561b6e5c7cc62f78d1dc001a0329e0a40b32d3dbd94be89ec42fa5d240aa262310e8dc8ecad98c1f247500c4b0c68abf88285d5b5f8e0b40ded4f21002cf64f4a819bd92b4e24e71ac3300421dbd9d4f5a88edd54799256d6bdd3785e309763706d6cb4563bb4e4a7a11006126efd5760a6be2d9807f5c4601f1bea55e45f8001303b344962d7942647700a70c0ffa5ce359b404ec247b43fc1aea72f08bef06e35c7d67b130c19635a100496bda9638e9f65b19b6547686b7aadc5838fda7040d0b625d4c15e343606200db405b8123a1b200058bc95c8fb0225cecfb57dd39adb8a898a80d121982ba009537687be64255406925140a6454d193bbf9c16167aea7a3396466a30c745b00a0e0f2b4bdea944e38c96f9dab929c0f7a813431cda37a0c0a67fafb02a33e00e55a1e79c4b1a7d38119d18634eb32a2bc4053c5730093b681e5d55404b054004458885b20e29f8c304e1493874f4be42b3a3ea017e8c1b3ff481c22118d18000721b6ee2ccb9f133a23c85735086a5b7b4dfbe9c169d84a833ff56875956300ee6a7928c029d54f9145b5823522fa5522225e25d8867b00ce5fed73c198e000fe7fc7c71d4fc5bbad7e88812c6033162cfd84698b56b08e85c43481c4b9ed0068b53f79ce55ced311aebd207f3eda698c2ba71f69999d9d0bc003cc03880000381f7d522c5e05f3feb7f188c74c5656be992ea1f2c98b023b6e4842e9024e00d194697f72aaf536cceb6d8c5cd55c1bb67a0daa9a561fee541e88943a626f006847c319987a23e425eae53c62f225faa802ffcd210ff5a3c3aa10a982626c007710e6f81158dedbd41dfc96e16682497382e5c497113f84073adfbd06f7200071a4110ec37eea2307915a00ffb56e0f7e9441ecbe830b4e77a19217d38b3400419d53740765fc195c7a0c801a69d9138dac4dcb0bbc585939d4c3c567f48000bf7c4ac768fbc26937a357a1af8470e302e38c1c5ff836dd2a84b7b4734b230030e7523499aa74c32697cfd61f45260749265647b191d529d4082ecaf3328300e3eb3e086751bd2ea260df1d32c3251a6c24829f70d943c812e9b9454c106000b41873db9332b413402a65b95e65d626fce389dfdbc10991d8bcb3f801104a004d30be04ece71d9503a64869e234d6daccc16d520ee70fa07677a6fe70005400c12e597a89ea00cf8bb98b466f1ef060bbe043449221475d76b653f1abe3c2005e0ee243a41a5622a366d979af4d75e29c577675516988329ed3dd11dbe2b3005e4a0cff60d0bb7b39cdb10be9c1438b8e176063eb6fe69e6081f5ecb8f25b004ef35b9fda56730fb0785c6707e902d8796e2997b7a1a542a50f7dd3f7359600becad70b94b020deb40e965ed19a8c74c14ac90eb84df480a2c15e6716a30a00d27537f31ad3a6f5a3138c0b21e65eb053457e1677ac37829b83040ef7512900eab0fb622ada45136ae5bc0e3856a288d1601353cfb8d923ee175741079d4d00baab8bb39f26a1ba9525e7f2a5e4860732c98fd20b0ac38a31de5bb3ce23fa009728e1c2ebe772612db21d1019ec1d72a880328d729a2b4a324cc0f98fc6b100db12debd3b4a573bc317d76d8895d4d9df463da8505d9414935a7b8d67fd4400951efdc332865dc69cfff5acfffd00e72e2e169c36e0f4400e2b877cfec71a00b7bd96426c70ae20d93facf2f63aa54d79cd8cb20f04f7f8ac863aaadae4e7002d274f269e3f117a28afa8743c8ae1f1a0b0c3da28717207be52b9d278b482001d1fa12b175c241c7a3183b31c52385a85934e01f75c97be46ae293047a8060021869dfae9cf9647cffe884e5b9345491d5f810e34e1ee484071b9049fad0300e50a6ba2302787c918e97339d5ba78b2937818bf155ebac6b2fb5d068dd0aa000a247eca84db300f62928bfdacc7963fd44766ccb202c22dcd89530aa09c63002036d49046ffd5c6e17a66ff22daa94df0b149bfc917d56ae8542caaef8c3d00ac19c211965d15eacae35e12f09b17570e480f2d97ccf3b50389bd472bc4cb00e766d27f583eb85ed93bf029632614e674ca7ef887898ceda7fd72af5488b40064f59790d5600f60efd30b0159c844a9693f203e315b44f9f1ae9a15477c1c003a23e7ba519ff17c49ae74cfe3cdd8746b1fa921df770959319bad20afe00f00d3ecce56071de2f504f739fcbd239b36f11f3d2a7b87e40dd4936653ffbd4d0065c5c605ff372624dfb8087d1190fd95df1a101728c2801af7298ebd2d09b9007c65bcbe2415c3ab2e4afc7f7472c6fe35ada45e5dd696e4de16cd350e7c3b005f8c6c64485f9684aaeb2d5ebeb5f15f1a3807957f322d4aaab9785389707900e709ee6e2e8fe77aa5f64894e6fdddbdd4827f2c179e2548fa8e93847c1693006fcf68b24a90386b352cbd82147783446e6d4f718a05bc3e090f1ed92de7ca00241202a758b6c8746804c58717f8badc459bd4bf107ab18580c5e2109b3b4f0018f2030beeb657272552587317901d03ee5e90de4fd5fa01e30270d6454602004804d0f3f2eaa5f24ed6b24bdcdfd0ca717ff4ed06c0d9156069a06d6223a000868240c55a43832ca437543ba5779ec070ccf19f5b117d2f5f78ea89a6f6f2004551e0fb4312d1595c4a362be17434fb23c2cf4e491bcbc666f30a0e67e53e007020dfe10c8a1faa0ea661deddab19344197c3210ec06a383776df43410b8800a2ab6f492096e9a55a6475fe005e7c2ed834f77b876246bf15e13112089b7700840af4469f88dcbd999f36c19f2e4c946d8522c68e3df531d18f1dfe1ef2cb00e1c3878986f2618ea36ee0b176a7da619a9b464f54be8cccf10465f810644900718396bcb6e3bc94c056449ce1238e35edff6c20b3118d6c76d342787bdbd700abbe926aff8b968d77a06e73b7962a55824c9a2e501bb8580e5b788030d97500199ed467bec0ff06fc0ae980875269a8e4189b24363eb650c56da5305cc661002ffda40ac75e6acfa375eea5e8566b656cf0a3e71e1bb602a72900f548bf4e00efc594698f0b7464397a08cc5e054db7256192e6a8d063ce6914d6d43f3e26003dac7c7cfb25d24aebd988a161c3a424969f6a175cd921cc62d25ab5b5dc0900443c71afc2ea27825611737403ea4589494221996f7a7def5e12ed0d26e9db00c5084bd4d09ae051dde2c8e7d81cd5ed36d000f724226cc1b72232bcf1fc1f00d4f29bb3be600708432ba63c84328a543e143c556a76d6e29ec83f6d3360bd000a603583c0856b370a9b5dd0bd6bed07c701db04812cd3413691aba1d0e80400df0dc981b937ef205d21932a4a52e2587278d447f6e1285ac21752fc82a204001d929bae77fb20a82dee53d2596dcc626948f3a7f1cbcceac47c1ca9dfa87c0049676a37122b81143520f2ff0334942470d5132dfcad11ae5c5a0de272ccc000b783cf69e2b00523f3565950e69a90ae8c6bab854be5edfe2e80c5a2a0712d002ca700f41c66cc152857186196f70195d71ee5c5acf55f8b2271cf348b4a8200c6adc11bd964e52d6226aff543c20d66e6adaa232ab80a116b99950cea610600fceab7252095d25209b606075417f5e4e09231d046da9bb738fbae5e7988d200c564ff594cb8e2ccd5655c2b1972c5b8ce79a23dde35a98ca38fdd37545227005c1dedef9814d88e3472cc72671dd6f0470e16438d95d5a32d2865a0f474a50092f11e9e06610874ac574e25743913c85ee3f49b9c447feee39fcebc1935b200774b22a2f6bbec6767ca9d5860428e278b8dfba8b1cae75a191459d8eac82c003364567878ec613e2a97f0ddddcc8c50346518a82a80d819aa0fca015e7b47003f76a2a6269e61461de82742d3edede771157ee9d064d52f7fbad8c5bf0c1b004a8a7dad5892db609b27958fc9bb72722334e684d931b7f2b5dc72e496cab300da33c812642ebaad3cc1ae6afc165ae50921162d4a3a10f1b9f19791e3b331003bc812cb27b3f7a3a6f661d18c3c70ab8d73a0a368ca0497574285e945e9f400babf130c3380aba6f022b8e452c01e5c1a2179336584a3fcaaeb6af4ace182006644c8ea595ba999392ea2dc346ec01e97034677ba8ce6509793d3c0f30daa003b5f49ba0d6448d17e056522e5c1b5a3772bab7915deb498d5dbddded5f86000c48e8725f5d6292261ec6e4ce6f592f00e1034a65ecc8dd16cd8f85bb462d0009012fde946a527b9f04863baad9fa5821168cb8f2ae3bcfbc619b2dbbac2ec00cc757fa9c1856600d19940ff9ffd3684d695419036324ca6492c202fdceefd00938e609408130b0b907ff29a920505fe4abb4d97a1988ec92ae15af976aca700e1df8aaaecd7e6a79f30e1e4027e0e9bb2d3d7f220bf1be466bddd4a5225c800f58511190340ddac2142dcf41d3243354310f05c0de0980444549721f22c700054fed6169ef68c22d07ccbbabe972f0d4c59545856ba4750b3ea4819b90ce4003c442e77d9395c0f1832be33a77ca42d82944195b3bf0174acd982750ac0da00ccb1805184d1636169ea698d36b7b72980a1a63e23092c5c324c93734efed100dcea76617d8c3f6a6d074f7b4681f4a10ef4948ff9cafa630c95f3077b2e0a00962502a16d3add80ae8157905ef4cbbe41359a29f043dd854d84914cf303e400a230343dc3f74c49b219b9d4ed085db62798fe3b9aa7d2a67ce0c06323687000042543a1326010f02ac8293eb803c5e256371caec319fedef126c8c21977ab00e94c7f11da52111082c1300ce85320d03678e6e98abdd0a7ab0821b73dd5970081bf297008440dedb9a9a0f898f589f3e2bb17848c575270ce85c75c731b2200b1a318e782c61fb08e4545f57fcb181836143640d70b567c62908d96c01ea900c1027bad2ef706a0fe60779f8ec597e52374fb53792eacc31f0da3334f069f00d0a5a86da35e6654d4842a4f01c8ec553b3d370ebd98db4364f6165a2f5b3d001229221b4ccde04208b73b818712b1ffd93c8445577fbd79514a123990ec3300ac56e75f3008b9dd71c3e69513ab1fcb3c01a14140c61fccb3d51ede0b46bc00241c9f0991d87db8764f9135dbb50e2742f3bd9eeeb16f4af4d6e30b99a14d00cdcc288bc9f8a8dd2bae2575954a2a2394a2480ced2144bbdf302daaebee05004aa9fb8fff82be4ff359b8a595cf0affc90300d979a1d96170a1ccd2f0cfb2000f3923bf688d6d2ddf6317d9b2f3e68ef35724252b7efbedfdd4586264ed91007b42d9f398471913f43408225f9b15a2512c49d4c8ef4bb50943dfc8726e0400b48a711d4d709ae91d951fff63c93dafa544d2bd1afb07a820e6ecb309572c00e229de36dec4c6e8bafc256f145757d0a4d915fc15e4ea8d19b46e069c05ab0036714073068a7f1138231e7d570bd1729eda9df6bec471785b9bea48ceacee008e0ff30dc7ed0505f45ced29bfce96637d641f6e25cb1abf2e2acfcc41cddf003ee8fe15d69d82de61c0b67328295d37a645037e1cdf4c6656f9278c1bdb4d00ea68aa1eb2c1013d068d641c4b310bfd4ead9dfb7c2cc37c7876631f4b2700008af65173c8e4d04ea7334580e45f4f7b107991965c37753a488881e6f8688f00ef2a8790e36f24ef7ba238cdb669cd3702235b2b33ceb9191b6170500700c6004697eeebd71294e45c855d842de3d3d19c47bf22920c8be7db66d19aa4b82e00902a829e015a384dfb903dcddce6150a5f406b4ba7d3583cf9dc57f32218b800714a83bb9260e976020ac6841aff9bb8f773a925095644347d370fee639dfd008341bd4d1ddb3dae003eb8f558deb5524767a51680431611056fe57ee2a9bd0037dfb476e929024e0a1213881bed894aa6a53a0fd2a08b372044fd89c439760089deb0261481e1b37b110c3033021d9b8e16cee9e8b79e48d714c5422240fe00a20e18ca8a4cd3dc9f04a74ad91256288cac485b3511db486a5a508e6ce04800b3eeae188a438b6f0397e4d1c2295a7e3cab3b5c0ec207c010e21ab43f89d8002ea20f81954f9e8b2e88f4db2a8826eb8bfb485ee72e37f5829a8a1d50563800fe541a5680a0fef03a79a6fba835dea98b166172848a2f4db933135374f61d001ca54f51d21ac6c6a4070a5ac9accacd2517d4decca895fc0f57a4228f4c9f009f368895f79734b9fadb679d4412f6399ce80e033e74f8d8f0355f229b67a500c5bc3a5add3a3b2d14cc0359472ac68181b8583ba91d575ab21010f79aa9420052035c27adbdbed75cf2575a50d83bc90d559d7f65e2edb23e8b4620dd00fd0074fb57328dbc16c70a39a905d1911ea3984652d0e84e7ad7f740a17d4154e700d1adea2c35570a7ca8e3824f3b0e05df637ca823a4daac7a1a55e1152975f5000618d20854b184cb6b1ad322b206f9d3b97f45031b1fcadcf0e381c026518900864e154eb70cf598fd9e643f5c2c04bc2a3254bf82fcb701eba4587744e81d005ee737fa6a615ec3ada5d76e05392b7b0d41ccaf1a100b65e6768f78520e21000668b387e90fd2844431249b9b228c0ac6f6947d253bd1cac2664d0022435800c6ab5acad7630126c59652bf2bce61fd278d8880dd6249c9d58d17615e5b72000182143231932069e805be87e144efeccea4f08180e870a46653c435396be100b3acf9fccec21f93aea9e76f47632a5572880877e9586f6c9c95dd1d786f0e00e878e2f399e7dcf9e04b2335e779974c69676c5d6ff64a0a1076a9c4d8b6570050962f88d389aea78b0893579b444216dbdf92bde40a6022838c707f3da5a7002d572af871d60755b76cdebb949a982b7ac115b5ded5d6866b2eb50485d8cc00c97edefac92c289fbe609b883665ef7c37cf14d31af49bbd99c9a3f868d1770053a1453fdc86e5a57cc59923606d6a9dbee8861673b7339cec5dbbb470fb41004a2e0350c5fc838b0d51745bdd861e9ea5bd694c48a820bfc9d523233bb1ed00c1d693590a350efe5d1e3e357347b1e23083fcf11e35eb502563cf4e1b8441004d4dc142ffcfa8bab708db63ea6ead859c646d736df85a85d459eaf9b2921a00711533712cb54f19603be6c01f209fd9a7186a7b823d9c1f568a5bfcdbfd9f00ae696fc4c185bdb1e66ba794ae9ec92f6e4535f3af0a7a22a49cca14aca7bc009a71546c796a33b1c47233f417f4984c42717007dcbad416f9e4f81f41fd30007d73a6df0347b73de656a537c604b6fa200fa99e6c5d4278e3ab843e9bf33100f659f97c3bfec3ba954779e77f9e1471c285a5af6825b1e880fa35a89a0872003eb7dff85d660b536f206ce8b6b80a0d6cadcfe782f2264112d51852665c4d00cbc2dc5b9c35a62c18264c6d2d135f987e5284aab291f824ba3d54526981660067fdef3ce8af52c43a699f3eed73883df25ddeb82257bf775f044deecb9f1f0059d11af8ba4a55403b50a78435ac70f0bcf691037b43af0bfacb2e8aad44df00e32d5ed979579393bfa45ea535dec1280ddca061e9f2430739c838290e65ed001747c6ba20f7eb820e533962f70cd9ce6e950c3cf7312fb573a1c0edecd9d4002bab4ce767a08745dd90595e99e33706a54fa7df57c2c78bf51edf7574c9b8003ab16ed1817a22d1cf69612dc9b36cc4c00647932e2f1d7a799458444cf52700b6fdcb679101f31bdf58dd2ff2c7bc3c99f0a667d1e0b5df8a489272a3bd0800c99493c2344ebae8a3d0a63d7e2bea1699073b8cb25cd842281d3aee819f7f00c9840dc90461b6c4392b6033c2efec44968c0c516707ed30df09c9acf619af000b52f427d1913ddf26f1032e92856f64a66cfb8406eaa87b6f427b8e7ee1e8006a74be167cc0b70140640a510deb3358f137d2f51058a0f74aff60fe908e990006beef434d88bb252c1e77f3adcf4e7da365be08248da3e03b55655b5580b40079a1ca5f88a277c1341d769e7ce0cb12b33693e23c8e6b19656c2971e337eb00eede0cb046e9c6f4204adefa25df793e964745ad8f19ae2a99e81404595de900baf3fc427ba83ba4b03b3018c892af9e25e1ceaf767bf655f0dc0484f82da10076ff8abbbcc78ee07a7eee0aa9f66955c4e360cf287abfc2233086468c82f4007f8b4554a6656a7640d89b4a2cd0bea32b76f32b17685dd56da76cef3f53d90051443354ac5465d8ff25cadf7c49ac8ffade622ace2566e7cc975a67d397a2008e10a04d5309863cda1bec4e8ccdf5acf4a2b506a10b852dbbd69df83ac75d00367a57bfcaf01cf9e087bbee19b1fe625343d42d6cf139bad834591e8ebf910005593693b30fbeb28f1e5ae099c5367d2fa07676821b0e98ffc207e8bc044100f98011a47b44e156ba0c5f510e08049d7c8b9dab0c00e85b06fb1005951aec00441e9460d62526a388933f0e3170c06dd8ceb296629748209b8a8f9c51edf100c88bfa9a97d27c48aa1a234904eacd51856ca4a39c3b8c3f6189ad40d9c49b00add8fa53ef0a98a62d736bb313f8e9c67f6567805f1648a1b919493011a2df00f53680eea026624b4ea9d252a3d6451894b8770e5786def8ae848249de2dfe009dfe707648b1b81638e9aae20bd55eebff5c55d27d6f9cb1fbec5667d8822e00c4cdf72e0a7af61ad10027474b92cd8f0a7b52889f7bc1c2ba2e38625a0494003825b186a59d0f0c4c6093fd4bc152d92841fbff45357e2bfaeee51712a3720053a2e7c34707d4e38850f664538b00097f35a2df23a483fd66863e0dffb2b500b2442564e2a2ebd966c46d3d44c1fa8bfb8b496344cc89c847cccda13d022b00297700e92c9f0ea0e3116b83f5f6aebc23228c729b72ce8ca282d5c3c7c35900e0eee9beb07b88fa67faddc9978674523817af1f9afbed5318192ec350c9d800f7f801672c34e193f76c086ae736137d8c81d63d1543101c94604d9f49a45c007ae3829720c2edb7a981e71642faaa4b037b2ff398318b1e85a636db55c27000fea67b17d13ca0f5d3e85bbf4a073fdd1f4e267a88dc3c6b7da97f968b3ac500a4e3fb02ca9ee48d94ed03f79df8aa76a4c2f5c95073b42c5319e006656a2a00b55127882886e8b0a87269d4fe70be00f41b63a546a7b8cf1bf224efe4df1500e2c4179298672f302ad79862bc902e80b31c983aa99c69b0eef18febdd9fcd00c42d3b0e1b43a0acf3a1c01bfc3c76df6b95d3e3b1ac8a08cda894fec0fad800fa2151578addfc2e6320f58dd177dfb5977beb20193359f5a6eb8a1be95462000544d9054f4ae2211191543a6aeade0c37457e7ae3ce5981b72041ceadd62d00e5e9235ba7b18abf8c195c764276ae94f56381ddaba5ad6e0efad4437c093400754596f19d50716aefc63cd8a64caa09606b61e361c9d4f390731be2a5a165004114f873b53fb3768a969eec229afc5b3b51ea56068b954a7c388ab32002c1002f1360246be48fc56fba988aa536e48aeed9b54c3445b029c1376de046f19b00664022e412a75c797ee5ba7102b3ff8b7fecabb5d56e339b51ea86e60bd19300820719154201f521b237f894637f8e9a48dca44e10716e906435130066ba82001f55046fbd17fa9ea49b09b63cc9ed23bd4c89f4616c5b27764b409dcb2a5500bd8734ba630c5f928c57934ca6e83334def7024f40bf6edbc25c757cd6adb20083e5f0c295ff9e19f58048b4179e6ecc9bbb12c589119e47016e52dee1a94700f94efc018797b4b708cf4093a343b380fd8b27760417ebe5cca2b062e2b8c9002d65abf0c5be8a86a8d7777a221910af1d93ddd7fc3156b677b7bc8e2531ad0080b456d4e65c1929bcd4ad597b0fda7e170c1481cf839dc17f463c3b0a8f7000212753deda27547dfba3e72b3c1dcee0a5d8e3d3940e10c2ebd91490da46d30049a2ce0f67cc230bd730aa553efc285362b68c995efa27db842de2c56814d200cd1362b3b2b35efc1fbee2a37e6db436f88e857189e0fc05f660266fd7e4a000b6ead8b2d878451d628804dd48f1701b48dee713d51618d8ad952355f61c15005b75e8f2425a6108116f0529eb612259db3b48d39c16f60c207af3b109f14f006a141b21b405cc32514716b700480c41f3a76902fd3b3e5e406d7991d660eb00f0850a47c39f30e781e742b8d20a37b345b6bfbbe2b8abeff8f4eabebd11d40079bcc2be9996e8985f86f9bf0108bea420cbaedc7ac9bd00946a1522510d7100508ce5c294b3462fce47e25d269896f115191ee133ec8a7a88f7e9100650c000a03f338d98d9cc166934bb14357c8d7519458cedbf012c125cf60123f1a09e00652ef87fd28d85191d6ddeb8261eda74a97f221a7692f3885d6972018a932300b891600dcbf3a18a7fee90f1d2a230bbb1a1388f436319f761ceff2cc5d5cc0031e3d4b1d044a348a81fa4c20bfa8cc4ba9c3d4c93db0eee61b3ef7bd71158000dc69d53a5796d18004c570d7aae6a195b11f452995676a2b27e764b1529c400d470ffc4b6f3bf3be07fe5a5bd0673e71166335c39028f594319e1831169f700d8ae9727e9f8954aba2f0ca678fd20ca5078755ff446b229a459e8f23c8b7e0032e49389ef7a18f994d3d4216bc28e1a35cda4297236378bafe7dbb871ad39007022711ba038a8f71367ece46d059bcffcb87f90addbce6e4fb2433816e30c0079bb297fd82a107233bd34222921ca0a466308b78c5560866d89bffc73cc4700e6e1280610cec7979cec678094110498425dd3da8b7c9b84f6bc9ae6bd096500af8248a9472c8571231aa1633070db1846dfd5bd773c86d2ee9631436028210023d6680796a4f440718ac113532391ab6abdfe686e2a7d75f7d9f6c7f147e900711e83bd9722d45d72858e0bbe8244cd5f293abb86165c260c470f1754170e009effaa15c758b34e7562289296094cb9ad33312122f245055555ac9334e7b200eb402f05a2418950291ea6cfb45c297dbbe818cad5478dbff731e4c70cdbb100551f51514e0c1c3093e2923e5313e43be536ddb386d3bc3a3744e39ead8cf400944e8753ca67d3dfb9ae9c23aa1f1004fb47f61efb0159cb6e76b19a8551ef005ba7beb7ac1399e721960c17119827bf63b340741512b76a742542ad675ff200a4047c777d03ef953483bf935b6d3ae17e5794901eb1207f46609ee8ec640a004da1b46d074a71ec5194c57dccb820d89b3727ac88ff7495fc1664509356c600636775d5b4f39b13fa98d84736a5ad5aeef3b62de08e83fe7f8085f3b5bb77009838db2acf9ff47bcbe63ae0a916564bee6beb51381c21bea4fb047944736e009b643d797bbdd562f1af4b85e9d6c13f37470ccfc355b5e36c8fee699e4f520034d140c934c8eca1528fd840bd8e16e1cb60d81e418a299e5de58d9e1494c300608a013b0562d41440475411e92c692c2b1b8caa0ab9632404f085254e712c00f688a23bb2290e5752325ad6d4ccd1ca23f384d28c493c304143d14464b49b0035c0e9d11defadd041b52c0aae0a60a0b81067a8dc1a032d39518f8bc4bffd001ddcca513539b615181bff8542e5c7f9ab47855065de88df9a9db4b136446500589b3ea1b89ad4c6dc21a6341ecfb5438ad060a88cb76dabb42e17f37b0e5900715395548654419df59f82004d68d42ed0b97e3838048f2caa0b674140c11d0052536c0a71cbe4dfb81156bd5ef2defa16c43fb425c22c563fe7a8003af24300402c67b67434c6c28b6d660e14e41ebcea10271cea5970263d3bd069a94a5100d28542b3dead8c66e007a4f2476aa66012f960a2c246516bed3989edd0b3aa0076ad27428fdd9d17ab49157c820c20f42c7ea74dd351cc35ca258d42ea6b3e00163292b6d60a9639e99053433b139aaba9196e2358378df96bf85a2e942c8500f10d102cc2e562794bab0308157c2fd66358b80dc096ab6b4111b030dc730100e07d96b0730e65e88afb4541a63787e602ea8af63803757c3fadd3fcf3008600f6a37221c222016ca4caea7fbdfa2f5ab844bf3e2a3a84d729bb851e4cbb8300ee8605edf018bb7842ba63514ab440f298da06bfb32447404602535322db6500b90fca233cbf2ed2665df9068d96d743d2894fb8cc73c4f76b0168a36da7b60009e485f34c725d5d143ca9a828f13bce7996273a6daa15d1439fdb9adacb18006f87e69e29d2dab17a4efd0321a7158b383f652f095d741f5abf98642174a200ac2b4d6bc14e3407ecb73d2639eca6a67bdfdec867b71b586aa7023f558dce0074dab43aa6cdc975506ec7b7f27b48e0050854b9bad280e8635caec1ad25a800978797d823c8cd591ed44579227b6c305e1cb8d28654b4bdac4c4284a5d04f0011c92ca873b8dbc1b3f5430ea953226f02404354e0d9f01bab291b2225ebcd007e1a0cb2b6d321cde3cbce3db1e732f7c12f819d8bab52ed921c68d71230e20092efc3b168db7fddb48794abe1b31c1da3e6f48b81d10e3544a57b94104083008602377989a11d56474a1173b859e536788b9897c23c18fd6b933c48597fa40076c26808df22f1702c6c36b715ed4cefac76dc0efaaef269215bd57eb9af8f00bb85731141107fae7fe7af3c6ed2fd256cd4bf52b145f69f8b618bfdeb87c1006316228dbb3a09a49fa83c8e0a3cc55422ca82cf440631f35aa83b983d25c6009f6360283fca1a0a2e488ce48ea16b44c7b40201fc5063c9359ba11c47537a0016eb61753fa6350d9f55afc1f58f0b246923a489300b20aa7a447101f8aae100b9942c7e8261c68c17a6c2a9541201796f31b0f3f863e6c02e1c69c0ad5b7700e5eb79da1bee81e08dee0cf603182c996867e97b1a205cd162f19c662ec405001969440093fd990d75ef7cfda3b632add6deaaad0d090efa8889d9ddec11ce00f46ef8394eef1d6450ec1b0fc0b258ee8f0e1a4fde27449fd55fa3db60a36c00d9055f4ffc8c423eadedc327d0edfbba0ea041f8d68d868d7a0b13be1905de00eb5e2ae3230e49ad5cd1caa33d1f771a583269a435ea45b6de9bf38309c06600c73fb3cf216bb7e3c5f8ff5f071de7f7ddfb395602a2c97b988d3d96d0b9d300bd22a90eb0bd788753153bc9ffe3a09f50500897d1aeb4319a1ecf86e5ff1e005f7057c2841ab2b1845317a7189e596a44538ffeeb37220819e937ede2815300513bb921ac9e982f084cffec4f45f7111ee40496bb72b67966dce7974a9509007a16c89f54b874c3e957e71d51947149456a867efd7df4f6fc468f86d4b5eb004e4a24e869d68097d8ca94b871c703b673d698e4445dc644dac7ce7ae887bb00a87c86fa1e0ef30855e6926ed0fc7f3c9d6d9e10b11aab2be731311c846c1800e2c537157ccc017cc714bc72286ee3e783e244a3f31044dbf2167c272f8d5c006b8173c3f528742155f684731babeda1c8662fbe99949272d2ecbc5df06416003421c9d5127854918f6780feab0b307b18271c355d5397110a83000a01facc001b30462052f6ffc0346acb8be1ec7bb8ecb6b451025d6d65d738d04b7aeda400419e2539581aaa283a6f2e7f86903b1ec802853849dbf56ebaedde38fd2cf200885e081405beaad9b1073d647de8c26bda05ead968dc20503442527a60735b006bf2f781e6caeb17ed7f5915ff8f1f6c58093096f74538b9de86bb43d8d69d002c9581906d44ad845efb610423c6bd654124e0766757367321d642d9aa807800dce8e7e77e46414ad3ad64cc5fbcb7319f2d8b770b306cb45eb2925586ec890031aeb01c51d01c20c81e0a10dba2ddc4b69e31299ac02c86e70f0027e40e6900c1701dcedb4706cb948c73a94623fb707d58053492712c1b5fa1b4fbc36500001793b2232cf3050eedeb43d977868bcf5933bd19de31fea79725ce22b323b600eb5768ed4c8c033b34c95105c2a51d03bc07824adb1d9c870b4a25db7b299d00ff2f59cdffddbcf15a2637f2c0bf959e1eecd8d9c9c1d985d4560e72c22b0600eed1ea8a81a6aa475a2e3b987769224a1214c750a580728044eab092c4ee6200ad4d8d68b9fd27bd8c7fcbdc3d8e9ee0ff7e89bceab1df75acffdf13a4d6080018422667e0e74355ef331f3a562851d12657283a919bae2e1845d49416df7a001dc8e1a9e530e4018333cf574df6215f00420429b4d09dbc9d4a2d341b78c700be920ef32374f9ef21cd0d997360fec277384c42814d8ea97fd8e8cb21b96600f0c5f510116c3364189c73ab7a95eea1621867908996ba0509d8b67381f6ce0078ff2802a39c787388e4a6f2a28fe51e7258557f8994ed9dfcb5d8148d5e2800a3c412db2d349681d5d13bbed1ca182d778cd0d707cb49f0659b6d9c9a2b9b00fd9cd12072f5be511ed5eb8fb983b73f0382d4c22cb199ae3871f76074422a006008a0259043631a62926adeaf2bf3b0c6de61717d263659e676cfcba60ca700f763e30b127291d62cad328b53d79e4cc136c79733d03fadf160e133b0316500b42ab275f73f43e0d561fc0095d39e8cb099ad5ba006e6d01a9fd21c1895a400ae544787768a5760e51805346cb0e93361ddd9d7e74e989ba64bb73039b33b00f9850c071662059f993a451e42ac4f9f49eefd5e903c85a0668a73b43bd5ab007bbfbb7a41a2db0e6c09b3513c462235b6b10236df67b2aef6d3b83d74aad400e66c0a457c24f7d0a7221ff681abcc1e3428d45babd3dbaefec99ee726491e0094cb30c62a392351fe1bcf41295f6ee65cef16105a1ac0e6f74e095a107c0100bb7ceaa6eae07251e13ac9f79bd2037b7b0545dfbfd34dfe2fc33a79642bab00bd6dbb2b0ed6963aada906b0c66af2aafedd93f1553cb4d297499c190b3e6800aaee8d5cffc54678054bd9e285f584cb136a5153bff69f246cba07ce34d5ab005a39bf059f378263825d2fa5ba5509217af96a6079140e82abbcc21f16b5bd00c095b5cb518aece91e68a5dd21db43fcde54f70f29ca15590cbf15b8b8828b00ca9fc27ea0988edeb82144eabce5f5301ac0056bf55d35aac7001e6d1df13e005d91e1b010dfa7cf024f8241eca41c1388f7bbacc585e0271479158e8029110036cca3adca3c9e5948f8914109ab1c499929cd2212f2437b8b7f6dbd789b3f00844b8039a5c95ab625cb35ccdaf3e656cc7c672343ae16c53cc8127833b76c0012dcc188644ce2c3c20b063d55a01e816a7b8c5694f49e44d4aeba3c7469e0009ee9e2078c5426e93d14cae9415ab23c431fe303f0d1831bb5ac0f60246802003d780fb066cb0f30e7e46e8f4722e1b6811df389d761674f2d657a56d6e16800f3b156505c0f38e72b52d8cfa078b95ef1ba71108a7a37f4cdc4d6974165820029b7edbbfc7695fc1b6e2ad1c616be239db331621496bd24cdee9c27c0fc9700d2ea349d6b134701cafefcaf1df80d1a30b7fb179a3aedb2957de67e603dec00237fd9c9194c808d58ac4f278f4c8d2722557a31b110138e61232bfcbfdc58001fc6137db54212aceb6805d549b6e4c03a859a9d9db41c24013b7b7160f142007ab2a656eb07c3f5e903ad0ad014e7c43227bad42ed93b96199c901157b2e400d32fa979d87202049d6d70c672e784ac0246872afda31a49304453b7bb526f005e8c2bb58d9bf9679e1ed1c81f352b4fab355b1b64975043b4f7d050bccd5f0053c52fbc431ee830afc8ee8fa2d2e11598b82cc507a24d34269ededc1c17af0022c9aa64fa6fa87a2da54c7b476e2e580678be6e31763a7a72433c82577fc700de095c9c002463e04c907f0e9032e7171bf8abe5b1ef4c230f49b013efcdf100b7d07e20b168fd39fe088902b2baf3925f618a17b15fbf6c76e1f02c26087700ccfe3a6a35209bffc04e50d163b65d62937c80e79ed36d045fdceb12514811005a37d836e4e1a307158c26951ea927acea05330174903e44b374e6a1990bf2005122df82c111cc62d4cb4723607678d78418fb84eb8acd4d389484fa6543ed0067c29ae6b2278c7e9b714b9a8c64d9545e99174612debf9fa7d00f2ccb7d5d00bb1c6c22b50c9631d8dbb0c480c17d13b81ec6e942fab4e9f3ccb6898ce32a00266473877c286053b13cb43c17d8728020843f02874b01dfcd6b7c1e55d78f00a8b3901cdb774e23ccc0e83f620b835c5bac98d38ebffc55584e5b593eade8005c42168f376f51e7836076d9c75a98f7ab533defbefba2754365423219e5aa00f762aa5b4fabc92b6caf0691255c0e8875b9c3b1489383382920eabb3a43ca00516c52524569a6b92eabc2f5f37d56389d7152092102f3285c612ddee3e65200f0ed2ee0ff84339f67a75f9f75597fe19aff0bab067db687295c24ab43b72e0062ddc0ed39a85285b8c5cbe154bc776164d6646c519c02194426cc40338a140087869a33f9cb4a5954dde732884cb79e6de0029f2f49cf4a2a19aa8df9b6d600c0a12119a387313eb71c735c13adac1aff0fcdb135c2d520b34f552a55ce7200665bd18a8bda23199a236e187727a9b8237982fe7561f12e2d4fa440dda66300bfb79b83d6e8542f3cf6856ab1dea8299855642ad4712239c2ca7faa87542e0046a3d2863f427e317fe9d17300c0c338a36ff4f85c401659c7cdc74ff4c20400256c1f6d751059d2212bb3e6b0fe1950a34263e1436934024d77f294feb88a00c5a394e8a2ec013cba82aa55725b21cc027bd84d6b38c29df32d8b6f03c932001dbfb5ed26a6874028a450cd2e16546ee0f35618078d31feaeebf0caf22a8e0025c98b00b89e18b70218e6b5b64db048364fb4e1232dedc17929e7655bdb96009882090b65dfff8f3186d13925faf1859de204c6d5534ce9439ec86bc5ccc100695b249ba165d36244f6c11ab2c2fd0012315f320c1a16651515655b4c78f80086fa51bc7833ebec492c3fe04bf6b32ab4c1aee16dd16a1b9f93db80a4120000c1ef998fe9a3fc69055f186e4b71d8c82d580a22841a2064e29a541491bbf500d111dd5ad4b890dc146c0dfa02ac038946ec852aa13f08a8485a5d7a69183a00583797fa3803ecb6b40fc521ace11b067913a2957f0b6ae8b5a8d419d94e1c00a8d90e419f17593c0ba83baaef28f95c6e381e1f6ea8f4b0631a5d171da53700e10d6f9e738e5769a9a010dd53dda18d7dd2b398bf79cb05ed584de58ce5ce00ad3f83a307b0863f001883277ea45fe5352ede4be383eeab7608f19da275bf0042279829e88f0cbafdfd26828779eefca50d418ef1891d88997af57bc5081100dbc3f465163c85923327ebf4af8aeba8b8b053858f18d14caa2640d8957230007db763ff866c15a0596fa608cb88c3f010a9f432dfb4854b7ca9d4dcbedc8d00ffc623eacd1112d01e7ae5dc3f9676e0e56d5cfbe297302631fdbbf499140000cb5fa52f5c817c765ff74dc4f38419a57630ddfb6aae4c8ae64dd4df950e12003c0ac4bac565d544501d725b3678e8e07d9c13864d8f942201e2aeea23184700d7518100a47edacbb3709347f66b40f4d11fa906b326dda4ebbbf3550d64d700e8f0ef5f8c610cfaccf28a7984dfaf6d55070d00f87df51bdf52363681073e009f4eaab09cc68cf3bac570e8903ccdb0bc669b2e7f58fabbec118ffa82057500b9af549671fed1504cf8717f28e789264cd1c05ec2b1fbe09ba235484883d8004e93217d18f085137b5f394893d95da9467a0c5130aaa9e71f20a40955679b0061f4419912e63a97331b2c7f9f815c796d504d0e8a51956cd882e4daa3ec9700e4d85f272bbfdae0c3ca1848cb737fc0e29a3310f08e683fc1fc060a61b2b500e4c29803b0b3e0101c6710227093f18ffccb6121616e0e8b99b93df9b3191c0070a1a273c32445c3c37933889e821250f3769da8085479f892e6b1b9af474100f48726e2d8afa43487c8603bff9c125e0ef293cc891072babf7c3e0603edf2004b0738af32bc1a300c2471b08e899959de70b7911c5743c08204545189ae7500139ad755bd940a0fc9fdcfd80ddc1d206da2ea78babf64ed1298dff68cea2c00fa0227ca5797f472967b7c446dc2b3ba0c0ee9b446ef2a93368d9b53fee68b00cbc6a81397071f0f4d9b4f88f85c28e091caca704ac0dc3e494b9743b3495000bebde3a8a374c1dc2e37e7acc9f10793539a31e805a47d87d5e55fb4edfce30025aa9c19d1c6f8f074e9007d39b110e301a2815486cf2ed472c54e1fed847300e049799b82f05574bc0691532774a98671fc5c64f9b0ba0b85450020594b3800ac13d8e66b4e9fdd3d56bdbb7b493a5513c5ab7517f7c6478b7969d3dc811f009053afeeb967618d5a8b357c15cb2e372955af220abbd5c848330224a5d5460040bebb840b2ed84b578c5665afe4e8e38bddece3c1c2ef293ab17feaf90cad00f0bef6c5013f0a87a0d5ff774a59b33d05d85667716050a7949bd7901716f800f7a45e1bdb22fa9d8816fa514f4bdaa51e48fba1fd3bfff6a6f0e92fe7291200c78807e5d3f73a102f43df1847bdb3f6200e7215305208c41684b438bae96900a2d6925c9c823e522f1d7e0030689e15558aaf1a11bf5e0371b9a3423c887f0049bbc6850236990453bfd4194d5eacedcaf77af6abd2b436f7ceffe42f72a500dd6cd23db29b47e92c961eb0b1958c1a4b7c2aeb1e53791ea9a8c7377edb9b002c146f9276ba2ce2d1cd5c84b332f5fa3c2c29c6b473464d913f6789904eb70000b32e0f82b75a2001bbf50eabdbad05dba46240e065c099dd686c97369fae00bb0b5caf35205057a1d14a9208b4f5aeb9b923463e5cbd307566a589f82c1300a574b1a6ec7465525b6bb4ef06592cf422557cdd25a120432043652f026c58004fff96269f3fe269c8c07d27e4a8b9abe38946c7449052bd8370422a2e99b600b68628bb5f9935e95e1f4ab88715215b30dbb96447fef74665097163cd4ac6003bc8617db9db513b1332fd7e73e76fa82c03c60f42b52521bf7d2192bbb794002657b9879fdba1cf631f671ad0a2947ef6bc43ce17bc0bd1b6702fc4bbd0eb003f9e03ad75ce93348719c602dcc128499555d3c2bc9daf52a321a88dca226e00bd3af63896b3c1a821a62d2b6b6a4858de0db7d98fa14eb3aab9f8655db1b300e0d7ffc9b73b40598e12d97ef5948fcf00d571324881cd4973e61579167754008ca14205e921846c238d226bd6b3fa71c88e2684849f9fd094d3f26960d1250041ebd0eddf720ab0bbd40285fbe0d3177c65eed3400afe1853d9d8c53d749b00426713abe51b40d1702514bdd48520a43a1ab7c2076279a8cfb9136c2133470059b0f473e5b61f76251005853cc88185c41f1f003c255ce83d82938b64edee001eb9abd77af3dcec6f026d120ea912219ccd086c9bbe7b1c107530e71009bc003559df71020989b0f335ecef26e9ffddff265d55bbd3185d281e1b74db041c007a9059e2ef05873cf2b2d13a1e288982e8b960b6dc3bfb1e30f0ef3fc848bb008893fed201ba592cd1b929f616e188ea4458d70ef521fbd95e6e8d8328db9a00b97c2b11e9b56ce13f598026e176d7b260f96246f2496469475b0472c33c9800a5cd9ad2a79fcfe85a2ecab6399cef714e5a07b2bd1b6d8423f169316f30b300e4ee605f7b550dc8a103edbcd21b563f67965a687f517914b12181920e4d0300667dede0a9284ab60b97fbd250f4d42dedd4f1aa633d33a00b30f0039039d900918048fd7943a48632f392d89987a928f9fae27270e669d4a6a3fba3b51e0100083e4dae65e60343730580d3aaf639aee68a9c0d6865e75303fdd903b820ee00aa82fbd8503022a50ab4e7adc5cadb72fa7fe336c09e27b80a1308f7f035cb00f081095bd53bf25bfe06a3547a408e7007e74b83fbd3638a340619abfe48a300cda808c8b5b60ccb3346b33114f375877b1127c782358126e03d460c6ec3f90037599f33497267b0390e78f7b70c1c4cbec04780adbed1577445f96ec2bbe50032539cfa2fd3edbcb92199ab4abb3fdb144bb75f4256248adc83f676cd81f6001979ad298c06c7ce2cbd466110c3bffed6122db7a7e0302762653f1425a1770008ea072fe3a92faf954ea2d46713d935528825473b09a2b7002117745815c1006f8fe7d446d8d20e194738fe7f815448fc65e806e9006436891980fbcb80a500f282f85b151d7d5e8a5b6bb27c79d3429e56919bdb7482cd4b87e0b5c396ff00d21a4bb60db0b2a7c80260bdf5a29960e0c214e9ca3174c1c3475aabbc835300e12cdb055e327e04b23d335a61cbe7901aa420f1bb1aaaa78ae49bae0496fe002ecfa52f42611a8b440f0e3fe92876e730fbf3e0bf2c33bc1b3eaac20a5b5d002319f0d7b94260eee66a148f5102e25c8037a4d28df4514a5330b6d916069f0026c98ceee20bb52214b7aeff0cc199be4129d22478b022fcf3c3378cb1e07a00a05bf2e0b14c9289a912d1d42d4c880c0ab45d587c59d185585d4d8fe7e1570034d7101b4321a5d680ad8014fb2762c202378835571424c2a85343398c70210039fd5805b8651a39fc8aeb993258cf940fc7936478ceca2ea8dbed628a922a006b91c2e220608e40579786461aece154447a219a0afc6a0f2fa3b5f74fd24a003875f13b8cffe8e4684323c86a4820e7c1b820fbcdfa1f5e4f5a50ab8ad4f30015091383364e379aaf3968fab60a85f80626b1954c872c34c87842a91da861003ed30245fa845880eb217016bace34660a977d11c124d0f6eee50350553a1c00d569d98c67dc2b4ec6afe577c2b970d1092c65c721b258622e69a623365582007ddafdd9a35280ef7ebf54aa3b138fd2cdd39d5be8d63547e52905ac98fdcc0040e4971a0511199a543e756d053dad063bf90054b28ce202930ef1db91095300f50da75cc46dceb7cf75a09bb4eab2632b5bca5a5302ffe22e6c33e168ccab000683d06a24b24e79d15164f2e18a40ff050947cce7abcd053e3e368be70fee004873befb8696df9403cc513402d28814da8b9095db2846c0e6b124814f392200bfa7479ae9788f0d49c8ff5134bbd1617c3eed295264337290fc9c750e610a0099adc60aa032d31ed7d6e2b0280f9603344635297e34629a8781e085072c3100e29ba18d53994b118d706473cdf522d27f574487df2075c750e1aca5c6efcb00541b94176ebd7f00ddf6d6f06d05c3d673c75514c5ed6c5851f5bd5c028db100234e77deaab208af207d5f734f556cf0a28ef24a7edef0a5df463fed36799e00879044771c3260601e56c4ef47989d55c9ceb5a207eab1b2922c6442b9be0600c11ce46db9ed52fff5f5d3fdd93aa1f6ecd6574ed91747f98fc4a0ba22f27d00949765af0b8bbf4665307c409f04744e05734c7f0766a17578f94b828109730020ccb4c147a737cf23408e598a2cfb44092a803aefebc4f9441e3260bfb25100aa3b8768d2e48d4042747b9454b35725645b78e48143c5d80a93f2815b20ee00c4eafa6b1ff7827a52c541ab5435daab763b0eb47eea2ca16caccd4198d0ab000057530cf078a3b6cf4b2f19ba82b25dfedcacb4d0dac685c73b42841f241a00758d97bcf8043ade451a394ccc89b491cfce4ebc4b5987ed7310395f798f9e001c23f15bf38898548ba2f5f9657e7e94b373f16cb3930ce8f137628bcaee9900d80bb48a9d1486f9a2b7f5a60ca89c55ca0727c22f9bf3e09a1cc1a7458f5300f2d5032bbf5f439ed30629c6acc8e3d19da8efd52599e37b2f8b776dd360b600633a3682573e90602a5af7ab124ef0d7d1b456865d4851fcab37234c7ac99e00a12819e40db233508a200efc47275225afca5ac53d683ebae0ad7da89bcee90062acbb45061247f83152ca0c291ee4989e3ab9d4a1369ec4a1c895f0d840b300d9ebb4546f63f76cb76a303c9e825d2d9262e1e76d62719978e8d0a538e92300dfb8ebdfc414f7f90d80ecb3c1c8f86ef77fc43fc4447a663a8898c0c994d300d74a55e62263aab6b910d2072d87eabd9a5f88e93dd6ed848310298594daf800a3901a9af7aa9ea3d74a4b6cf74c6ee2e3a613ef0c7fb2e110b18000ece18f00b035c49408f700d605f52d063d18269bd5278d2e6c378c184b3b2e1ad61538001a473751863be97f90ff9036565deeedaf88e93849908d22c8cc33408460120076bf48b06c1d56afe9fd4a8f01f6738d68c695b64727b64cf22cddea72f51c00c8e46e22b9f8d7a4bf1040cd93a528f80046df3dadb5a5742e13ec8fcb571200d3499d8a8bca921b8db7855edfa018bc1073ac0f9f7e54ad1c8e0ccea76b57006027a3106cf7a8317ed64b8b0551da9115189e4496201d01a95e32bd7ee2990056c9b2d8f06e730f4ed137cc476131eeec90b1e706d0c579f3c8f983b44d9100f48de35578a1a640e17d388bad434b6d4972eb3b466d722142ad27fa23086200035e11d1d6eba14d0f7f1a581b7f10a029e0308e4915938b39782de580492e00ba83321c60845cf486eb03c4d16b36f62c18144d4a036d1adbf6711e4a044500888070bf3a134eab6f4eed342563c8a6e4a5e399bd7f8e771998a6b8f6511800b66944a4983f06a2dfb6acab0325c6b8ce933d4300f6862f79ed48d44cc42d007bad7f53eb59d84326984ffd372d191ed24bb0e6fda43c1a409150478f4d7e0045a5a7574a0680fc12ebde2d6c18ea0f221e61469eeebb2d2bc8dc1ef4f44900d73f31bf085bbec952bbec8c4b5b48715452f866b9292a17e78086687b6dfe00aae829ccb5e98d946d90648c66c3101c38bb0f93f108c35321d9837fd7966200078f1fb575374d8bad24a753f9a8c7b40e11df8ee0edaf4765cec82121de9300026711fb74e7215e7a818ae9b956f17b43a3a7ab98a2124c8298571345801800ff3c604fa4070adfab11f22ff3d520096a87e67a59884243a4fafc2c48604d006452b3f997394e05c8d424ca431e8f92b298662b5b84fa36fb2e46d8557c0700476714a8839e89f254ce2b9581f120fe58db17700d8a9762eb5c491589d2e6002715c40f1850cd27de78063b163d7b1a5ea0f1576d1e6c7f26ed750c7c0a0900fe2d66cc59660ebdf6c9e1f0c93434952eb0d4aed7b6c1cd9f82490a269d3d0098d5608a5fb91f03e12fc15b9057d527ab56bc5ca32f66c75dcee1dd693d80002a0eae4e45d859f4a5d67a0afda88c656bfe4ab7c3bb22089d06d0b909e8250087f929ce52eef2bbe3e3f0fc24149c48367bf856b45a501d135965531bed7600ee6add214eb42a4cbdd72b0138fc213e48eaad5b470e4205f86a2e8ef0910600862983b50f32b2973ccbca22e0d253ca041e56a86afa07b3e62c173c4fb4e200ecad35f37b2b436197917a0108a8b76106ef4684ca5c6a3bb30e78b3695c2e007a28e5a6c2a64f7c9d0a99ea2c77008b867c45772b6e9d6f94010a8f898de9009c0f0f0b905d5ca5d39c69682e614ec2a633fad3695316acc50b1c949ab2e50028287b6067b85d2a146d1519f8b382f98141d021074aed353f2fa54f1e4eda002af33fb23d9554147431079be702b4bd04dcb7cd57dea68317b72de7dce55200919b5c998e86b5b20cae71ad1a8138d49972bdd4dc738a2aa8e9d06799a8fe005a3c32f0c9bcc078315dad2859ed7a6256ea98a596f3584a2da9f3e8f08d22008e44e248c65bc2e0a86e177e4d2bbe0d254c521c31c783fa8bf25a9075c98c002771b99b777d9079c0a4be4143d03afa3735b4ac32a04fe1a0b1d2cf6aaa540060f4425e3538f6f54918e2c4e9eb4bc2ffcb3ba60da395334df09c205d7c2a0084754690e40b93e4388cb4db710ec6a38e8e29ecb2d0b37db69779a2748a7b0080b3a85366128b91f9415fe169e6dc51ac924d60edec9705ffe4b41051ede900280007e139b4d216fb006a237201d60f71665f66dba2abedb2f908cc89eadc002d16aebac7cc45e8778a0fd85c6a07e3d8ff7104be6a730cb9c15b8c23b5a2003c8ad83c2a070053d5c4bdfaa649119d91fe97588e7c3310ba4bc7d4ba7a350043965ca7da30109eb325015a246df49ab1ad83446366388d3c3d44a1b27014002af51f67c372ae9798a3b02d76ee238a1dc9599e76cda44de1bcf4c8964c92006dd21ec66f875e56ceaf43b07b7cbe30d3b8779a7dd2af949d32dd9de63fb200227343ca76829fc73987a2a5a52496a781abea7c686f1a5280ce09d14d79f600e77bce4ed0d9b69483056a227527e2b5fa4f1450d15955b41498fe83acee6b00a3f09f52a8eb9868dd507eb4a65503d26f61b0c5b9f0552850acf69241f63e008c8d43e2604830d8066e6c25f68acc09e5437bec6a5d8b4976912271ab134200d2f7bbaa1b41c3454f2ae137caf6caf28a680f02a1fbd45f0ba1da7c480185000baa994a3240caf4b7fc3f5ca243373e32902140e8e0906b20c54481d7de3000bfc95bc0e72a29f4c9cef43acd7f4babd8cc5de8162621e172bd92aefdedf7004445683bfc5b9d847907b7442d77776b180e7fd90a984ea5f8d19a56d2d20d00eaf9aa43877c376554e22c202b5b13e5b01ff753475966e281da5deaa3144e00a4808c0c5c4e42c4907a7c631506a499ad94b9b0d10115cc1f54930085d6e700e56901e9916a9d7abed3a686c237b7520d512413e6ca4c173349b0770997670007969934760941cd30b87859300f84b5c08ea0bef49a1d7a98f7bfdaebd862001923cf7bdad045a9a1951117e91b8520f4e95935e21c10446bd42f19d1ab280082109118f0da06aa2919788e28b345837d9fab83f0ec229bdab7e3ef873ae200034151fe34a0f2181c7c4f3091680edc50962b4749e26c4a4c4fa1c448dfff00c7be0b3e77ef5b3420192f711224494cb2e2abefec2d282db38f1a5c46c8dd00ef972742e893cbcb8ddd0d489a1c40416c6e53e592073b9c0c98fa1a600d460053306924a2f2cf421822a46aaede8db116c4712633a6202b38b09d4222806800dcf43107e74c8becbf506093e56d3487eaaf16217fb0b3b16b67051cd44dd100c28dd3cc703e99cb016ccc7882efaca7f170e1a02f4f3c14012995fe8ccc7400e41f7a4b7e6089fa9ff219a33215609d668db202e69533b0e2ce9472bb650300987db09877abc5eea1d91f5f4def67137e3420f5f9f8d2ce37db80885e63ac005da4d98b2d58bed6ee1f6ec66585fe220ad5fc37e4fba7397e3c7149354bf600bf5c7220eede29e849f50c73a42fc4f43faf97cac1b0f93fc6e3109135e0dc0028f37a98b1871154d9a326428509ebcad4e28a6eb394b052862ed1dc265052009508de9dc5dc836cb6556bcc868d806a07c381cebf1f48932b70abffbb9db900544b5b5a5b7904fb6a40e798c7a4ebfcea20febe38f4fd3edcc8bca8ac45000028f83d43346b937072d5b15d6e24f506fb214d16ae8d5228aa20c99e7bc7fa008ff7912ad16dda451f91f55cdc781e8c314f3a947dc28fbc3a10d79110848400906b9aba142380817a639577561810832ccb4cf53936f7d3618df72e869235004a8e3122a95c311b8412395bf8c7f9beeb70a49f4a6226cf19ee4e31c8587400b9cd3f9f6551151d5e1bb8089e4e3bada8c92d9b8f109eb1be6f6e30cb237b00367a0e02b45db1580b250fd0cb3cc4c5bce7d8d5c9378b6bf8179dab9847610034793cc98f17cd7aa343052f297e6d1d902f45b1d8d0448cbac6360ded2c3600eb44f9bdccddf10cbc32aabb910baccc731677568d384172583cc7a41200dc00ea34dee172dbe767487f099691605390d99530ac8c5d295f2de9ace6c4f1ee00f95b8340b5e2c86930fb908eabe2676ad66c1b85420a13c93ca628e259eaef003931ff0c67a8351e1c7bdf49b80c7634e7106fd9e0e456fd4396fbff7dbc1300c902f3f65ccde219c5c962526fe0939fb01d0e2f96051a56852a11ad00c00c0028538ce109f8d254a9ebb8dc9247a062157dd20dfdbec6b63018afcb25837000be7f486c7b8c2be90c0ab297a30c4b9d1857ee28be1943641d0079c3226544000ea2381ce1b31bff0fdb348e9c133488918a1a8db5e23ff8264fb3677ec35d007ddcd36736b42c7e244fff9618bf8d0c6ab2cc04d08c198ae6632bd48d8bf10086f071ad705b5f02f0a1c40fbedd2d547046886ccd8b420601e3a8c592d40c0020eaa5c0f8d6ed05de99dba852deed9da4f195e1693acc0e6af2ddaaab2c64003bd3702907212640b2bbd332a04aa96ba5cd9bc08e9be0b44f290e0abccf60006f51dabfff5f2f0d495b353356fb8d360758f6d5fa4723282dea778dbcf8d800c2ce71cb22681e38fe00aceb938f0702f94ca3ad4d1ca0985b9cd534f59ed00029db68d3438a8f27cc3002cd386d803f078a9a530a97fbc3a9f16850264688003dea46b041bfb11149eb77ce6dcf0d51f38b25317e1bbfe3cb58fafcbf0fb100629f5adb4b7162cf17a59d848b17bf069e2573d2eb577a8ae93cf0617af64c00f6c5c1348105f828997e61de4cfdf5d854480762d7c4def811ff18cf0cc091009226ae4a0d34822f3ab1991b58c759f0e91c6ee4762401ee3f51a1bc9914d6002ad08057c361fb18c3196795d10e39e618eac769418541075caca92b396a72008d5b93ca58a690529f2bb2f93b9335a603b026a0d11be969b455f4f34204b700af1ea90837d36b37f167c9ac104e502b4af03fd6b4a74b23c4aa970c169c6b00266905fb3e3549e3c0efbc005317498c9a41269817fd4322178afd7282c1910035a6aeb04fb23df619e70df830e6a9924d8e9ddb2dc623b04826ee9b5094450068459e47e0d04b7b539a833220ad3f9c49997a33631bea98436fb9a12532a80078e788a59add53546c4e3a09eb8734c875e855611cf17f45db8aa5ce4f82ba00f308de1cf83d2d3b11a73b465ac7d0fa98c23827e9a9bf6f8dddc28df94b5b00792acb25d0f2dbf010f9496efa1e24bc260e14ca9ebe08a892d8215a9b401800b24372fb54330dd6c6725615f095eb879e65cf7c13821b63be27b0904eeb930097d29cbfee8943cf50450e0377ddffca71c01e06c77591128b90bf7ce0fcf00046b0434e30d84d4fc3a4d7e2724f63ff3aa4f3ff6c15ba9e526c4bebf1d87100434cd395fbdd34a5e7097475949168a96bc8d308f8203799fffcbbdf4b87860063f6c5900ed25594141dd0f5237c452b19eda62e63190bc71759fbff11200600cc868993a46ff56c8d180beb7ae3226ee5ae2593e06dce5795802661c5a15700615023a2d00aac7e18d9d89db5a7a7b1a9c12e1db770bf8063e569e0be7b3300b740991afaaec45680ff89844a8b91c98d6539b25b7c150ae773dede1e05b90031e9a9d1331cbcdd63d300aa59ac64e90199e74bcf81c9de2f00a76349e8ac00fecfd5b4be12d56307831685104ce448a8bf9ab75e1cdb3d7098d00a816932000b1eeb3329099f14aad4b766177e87ad47991880153706552d1c8b01cc4d9100e37e0c88bffb75dee15053f9f1b58c8329c61dea938a220db170059dfee778006c70495abeea038511756c3d3032edfc9da35892fadbafb857d549908298db00a733c16957711c2e01b3be280210ff2784cff59e20171347885ed0635dba230023f47651b1ffb4a3406376ef30514b0e4c603fb1388bee1d78870ea6e0e1840080a09899deb9a875cdd84c795a4667e15d4f8862c88f0b4e6788009d9b8f960000e5130758278f41ad68e32e17d6ce73938530d011850023dd82664f323c4400bb42ffb06e8791d0fc9975b154cf476621b327713c3605abf1f6de75c55e19006a32bc77ecf0a12a0daf843e5faa227b78887d46acf639866d8bbbfc409e5600ba8cce54e2a1cf510d53986d43d44091603d7c833337fafb2bed11f0beffa100368f527f1ab61825f69fe3d623c0043c1aea33eb8f3db5fcfa597eccd520af00a87a533cc4c3a2c2b28472a510e575a5521e13caee8ad05362f50aaefaee4a000d4e56d9b42d3f59834016f2b2aa312051f6d3be00f4dccd201776948a45510064948c19ff494fd4e1d34dd49c2a0550dbb194000bfa92c8666fd67c282814008deaba35807558c3d722e821cad8a1486739a1b78134dfaddcbcb29f0d005300ecd2683ba079586d698f24220285fa75b1d9c73413cc053493dd8a178a2ddb00eecfc96566332430b943ebc2f8a5ab388cc861f77d6ac2d5be46da6920d7d4008ce7275b4a6d53aef14c248b8487cf58916ad65d174533d7cdd2d1475c128a004e2e22e10d8976463c3628f0b5e4fcbab781135cf2a313d4a2b46b89d2dbb2004423deb3e1e852b8e58c1f58f3d4968cc886ea07d7f8953932d7e20c69215000f54e0dccd25e73d97fe5346f458da7b54fbe05fa3211b4f7cddf8b2564745d00e77f52e47c33d453ea7e69fadc56345d709b6c738a18798b9f38a95717372100126c74005153f8bc2d0f3fe3a2b7299d7319fb9023d409cb3a55714c1b7f4d00bcec5151cfe651649df78def9a98689ee746534f282ea7ec5426ddde3a520f00167cbb6bc5b18508a0c444a22d460ce681112d16e8dbcc52625a206feae39d002827a63b4b18bd6c7f493c612c025af36f7d87cfd83fa81e7e578fc238dbdc00cd216103e7b914b8516725c151435ccab6303a29007f05d32a1ca70d24f38f00eef6ccb1ad3bd85b24d427bc5c42f5bde22f4220669fc6f7ce8bd4f3fbb9dd0021814487ff9336aad90355bc56bd378054d4cb3c81b5c2577b512fea6bad2f002c71dee18aa0b4889bca97780aa52e6476e9f48f50e5993cf17f87d5e33ab500c99bfa563a2e777f8df399111cf1dbe36c53d1edbf8faa1346bae78858ea5f002e09426f7bb71f56c4876c9cab1f5bbea7d1ef4a633130efc98ce20763a46700bbc2aca4e87d5764bdb94e6deecd6b7d83310730b003758fe6a7465e2cd9d90018766ec1f7039f437d4c5b36fc8133f21147c2286c2b1ac9a9b8a5b62a4a7a00bc5c2f5e1231fa46775e0a6cdb779672cb37fdbfc791af0ec99a5ac9b1799800e8fdac8557f9e8741036fa2f81e3e538c4132135e51a67f8f3edce6c64de52006d61ba08ed8601159b9ee6020856b8c26a7d17fff55c4d4e22e5b21ae8a87e0045ece26099c8c0de44f9417f0b5d2ef7d5d685af957251d237263a4bd1e3fb001d29c455a2d4fcedb7378be68ef08b4609230361b402176f92689b4720892300dfc9d0f4205c0c4560aa031a4a59d7e7d13f76d199555dcee14af64efd8bd6006379fc5ccfeb0506ea687627c9a9e20577fd6836fb70014f1e165982823cd600f198df5cd9d52c21fa8a8f10b2a53f545d70afb1ae4c2de2baf9ea6b02443600b4f64da9e5343e8d53bf0a358d753159be02eb0579084f74d09c203868c297003a434c76394ea317ac8ab7427fb91aa41669b4dfcabac29cb988844bafbda400be8599ebd7346974ef85ec7b61b022e8e2fc7b5124cea5c978b8db48b840480054e90b85373d89106516dc4be5f9825bf641c6e5d020496312cb358d807bb90007115c806c34ec8abb4efdbcd2c42849642ff4ba695940ea12e4dac9bbca4300f40328b566dc819747763c21ca3802ed822a0bf4b165a7f0a5808367f0297600ef1776182034030f923b9a6e9b15f27ee2c568aa90f131745ec9bbbab09e9100dc36b3bf7f38a7626ff26548d1a7bc1d326c71d97182c31f600f729276f8b7004e2abcc4e4363a69d9ff8867a8d04a3c94efc7c40aa7dfac4188b866e57d1a005759697fcb6bb9a2c97a6a0965bd4122c4bc086a450dc137e42b5c40cbc6f40019b2e040db33380791f5036161c7a0d7676d7a123a4ec6bb840432d196fb8f00f1323bace723e19477d36162ca5acdea72d59fd573759019a3433ae03f650400cb6896e8630cb8c47bfb7eb59818c500d89ec0f3d2149cb20d7adbbc2391a800fd677a3fcfe40f2e664e49e34d2c978be318dc9c5f4cc52677591d612c8b63004eec83f68dfcd09dcedf2d3b5d55a5c472965ba801103a696c34a0039b7f620075f53a544f77e33cb5aee7b26a36a39a8bb340222729657e97fb1418019bf90071379fd946b79d90b5e79e96782fea582bbea1c8a49368de677769c1a01fe5009419f8a1a0c5e53d45d3c5338a5197d4ac731539e9dea6e4a5a5c6888be16600b6c864b77c871f5f36cf5a201ada815b4806ea706a7c7d2b8fac8b6eac4d5f00c08a7e49340b6e3d99800e4b9f96bdf4a11503ed868604172447ecbb01fc8300562b120cd21f029dde99fc0a4096e3d70018832d2ceb8536a531cda9c88b7d00033adb7cd0ec0e19b9d2904abbe042662e3281f24ec45971238d9771d0856200dd2cb96cbcc6d18eb777e5d9a999b35e540148ca22a150167941cb192e5e72002908137dff8bcdcf995980d6e3bab2f5e5560075d9d0881e733473372ff67b00559fd2f116362b4a33783fc536cbc202b0bef062e6e92672c6e568644f3ebb0060188ff4b83592d07761ef285f0ffe82d0c9f373d0e3cbac542dd7f81714050071646b71b35eb4f3d0b61fae30aa14c6cc4fddc85006e588d7d16333d3aa88001c8771f58b812141734e85ef22460d6433ef89a076bc113c00c8e1b286f714000dae6ca085407e6d1a9af3b8649840b862e2f81997f699c7f46d8eb2881a8300858830f16b02d2975210383c257678bd1cee234be1228ddafe96d9ddce1eb100e36d4494e1a2b8f7867164f46b2506e10ad912cd9c6f691bb6cc587b8eb6f7009321bba0e1b8369a2c69e962fe54481f29a8e5dc1976853f95aa408d3eda68004fe48de08fe003228fcc8b8584f507bb6e9cd8833c6af8cd2d909e4cb7af69008f1dc87b436266f8455462a06d211b6b6ab0d222369522254fcf3bef3adbe100a8d4ed31b956c15957b5cd3fd2fcba052eb616dba0e65b1d1752f8ec24f7a700d5991676c7849c1676f6d395833823258dc308291583025adf2c02d901ee820052069134d4dbc5cf279e2092c9680fa11317d8847df95cd9bbdc4e92684dcd0057886c8b838eaa8755200ccf618d7c162e3ba8ee85e571440455f655ac62060094153108b93c6de473cd4c32b44d06c7ab91b6cf03a0678356d0c9a718910f00431692e27d1acbf24fb31237a8e12dc800a415d50ff22013701911d912661b00dfacf122985ee39b1b780162d31d902e9ee29bf9adc994d114ebb83149a704000a6299018df64d8e37771dd7a0153a1d5a8b3b197f7fd28b5453f140c0d70a005ac216b4faebd3c0a77aed6a0743db02c642a7e8864c5736cbc727404bf51f004fbd734afd6b4e73040e7a55378a8081c9efb2383983a937228efceb149da9002ac48f444550c9b91f5960662df8849f0652626fee7388fa47e2cb72502c4a0030e37fbef5cf219e20f00caeba68de8f78e9395c1f2db0c650e1c3d971b13e0086c935c1a442ac4160dd3c39cd4020a79d2264834847bad3431dfb24ad0fbe00acce7e058d76bf1062bc7f5a2d968b46b5f2323a22dd07d4e061a95c8e1ac900f8d13480099f27daf38d50ebd294129ee49fdae8510eedcea80997f7677ae400cd2e7504a15a9a5c1689cf32c5637cb40eb1197c2333753e8347fd54c228830035a226a780cc119bacaa6f45b7866c4b2d14c438dd0eab13e59a5ffbf4284c00f656d1f6956968b084eacf0b2d79bb8cfd04739228b6828c5d686192d297310094ae52d805d69677e83206438c423006ec64e695834e69aeea0a60d3eaf3c20084c995514180157daf8ae5d45a6959d164fa2f8f8b53bdc1149068a3ce05dd0038a8066e7e923f35eea71d2b7b7d14c881db5598776873c29b2afa421aaeec0025278c1879e0b488b75abe36fb2e25dbe7cabaf1ac93d0e91eea9736baaf25004fb8158cbe5693ffe297877b9460ee618e2fd0a2535ce1558e4669860e7d55008ace9da1549e4f69dfb4dbe37a36f37f541906c911f145b524a883b25b408e002540ffe67f8bf77a5205f22330cde4308ace93a6778eb8d31a89e8d5b6d09300bb42cfbc828f89d951d25b21ef3aa0bb5c05ced89cc475e9c5478ba7dfb45d00a11d26b8349977d49727b92c25fe0fc1544069612bab63b38fb50c65ddd2c200f014e43fa1c39c9642cfc9183b758edbb49fce565a88c0400c2c78c804cfa4005dde47e34fd710414be60d392257f86c4b1fb5eea17a9027dc125a9dcfb14500e89f0de397a67253fcd50c2b6bdc90eff0ef9896221acf4f3a9d47906012df002783108be35105461d7f18e89c15a02e591ecd4a0ca8fc8d7622951f3584e5001bd9068889cbece5c404c503c80a0412efee1b777cee68f94bede96150e2c4008b1f9cc77c1b729972ea4c2be5498fa9fe981f76dfe584a4cce408817a8ea6004d1f851183d0ab82e3b6b26b53e7468741882881aa7b8100a26adc99c24ea100e0cdcadb45a97901333019195d0abe7b1a4a07bfbc4fddafe260e1391be46d0005e7b7e69cd52fcbd0a9ef04e324b0bdb7a71ba76bacb9ec84289dacb3e4fc00c90047b3f00ee2869e189c0232be855a09b924f9928ab4a095ec83a8828c2b00dcb26e115385f29e8e9554ee274ead4dbc29b903a39f64911c09cb2b2a4b1d006ac0df159d6735b5b63f7674b8f427d04657397dac6cd0c4dc80b3d879322400198a398204ce58a37c33aeff811f108031773426b23865e13a6e548eee5db300f6e9c8d6c8ace131fc043d3171c215bfc076b61f9ed9ecfa7df9057761575a006d6224cf457a424b10bff4d8933f9f836c8dca4f17224f7accfe17222737770056ee3564186d491decc10127780cb5d27c9b2a8bd7d1aec39754fe0a26d64600b399260de0a3de3342104e1fda6af33438d8580ed1a6c38c678aaa8aeac05900b63c3c5c5cf5a0426f52bbc33f62dd58bb678f68074f3f647e3cee83eb54e900891f86619786a11a54f8204d4011434334928a2535167f79ccc43c6a02dcba000026e3605a4d07ad751fcee3ab36977977997a9abf83af819b2574afab096500425d3fd806575e929a043b11c16f14db135b9f5f61ed117d91dcd47c08dbf3002845879117c020cca7c0837422c77c22357755f378e3a42fcfef494c90389600eeae1cb6278265bec8f04d1268d28ec539fea0b1efc841657023711fc1dc5c001d4f3e43705236dea41e91e5475977e7168faa185053ee7b1cdfba043e62c000e4c9de69b557c17a07edde6f0f085177b8c414bfe053d03d49194910159bc2008b2306cf202c50354440c1081aa63ed7ae73d55fca5b3a506a3e43bcba885f00e38e3d279ab4f1b8a9fc8276ddee435ba85e24f1f8298d8ef3e21e4b12851800ce3630a0ed27511881f5c900cdc97f10f510bc6ccba20832550db187724c170050c9e27bfdc5a4d43b9613b36d15fa8da98334541dbc7de09b90e484c291ad0095e3ed00d73961700897ea9cb5288f9d833172fcb067948535774f47e1798100d55bed9527725199f0eb9f4e8f7aec38093400df735a6e5d127e183c569ac900de74e10f3776540ab47cf3a587cc636c1c1d994763bc1f508e09c1ad60e7860018bbf2591a4db0e9894429168fe5c5ab182da58a18fb457cb842312b74a088003b475a492439900a9efe889119b98b776f29320ecff27351da27871f15d75d00074a965f5af1c1f20ee161a9b95c370d02c91811db3afe3e566f0dc9c7f15a009477f2357ae8c3d9de7bf323fde222a629c1e5e5e1b0a3805d699a7b99526d001ee46efa06bbf6ee741dae30691fb0690d62cc65b45cc657df7752a6c9b1170052e2830604a2a436a255585c345a1b8f69e58622b20f2114f09ea85b24f07900226ea1bab77737e2f579b8c173661ec7212c7534943741657342ef51107e4e000c35fa9582b4c083b8b0d3dd31f00272d3ee43cf87e70b949bac6ffc5eaa1200ce4584fbc779943018b7b21215f7f0e21f64a511aaca445dbe0dc9e00ffe87008da1a67447bfe3739575b2783990fb7fc876c45133dd3b87284a51a815f3de00549e49810f5a3cc089fecd0313fa50206be90d597dcf6a552c2e5ba21b0a0a00e031235af9edff292b68d15e2d03273f740a8ce91a0a81e5268a3a4bb7203900428fa136baa74e9dbf9d9d2b50c77594d257e075312c24b5c97e84671b5fd100e0f826a0dd3a4d8534f0e43db40914b9477574498979a7f6210e4f4cc3933700d3cd089fab37f1229321c0ccf25ff48194a631280377e7b22aefd973534c4100a282f533bf013fdacde51c89fd031a3a1fd18d6dd1dfafe76eafa68939ba5d00a884eaa02747fa434dfcfc8236c803aaf636bd0a67945e4166f8f30c771f8000ba287617c2c37429f3ab774bc15018a27b4a03c786dfffd1c496baf59fceec00553b20cb20d7cf79ad27fd7ac079e3089fc1810e150f89d5892ef1720ad96b0039e3f4df715344437ef68e67b3e3f5e48b41f2c6ed0c221da5b5d94224856400d7873c5213332339eb9a16f56cdca3e383865a6cbe3c23f8db7aa4c175993f00c0333ed6df3bd29b9f06acb99ed14d383c9fdec36f552de5569fd5a45b88da00312cac8bf7725372dff232e5e0bdde14c832c8635107010132074c8bdbfe9d009981aa13e9ec0c1fbfb305b59f7c7228e85889542276315771f983eaf19f12004d728e799efe8ce142288b107fabb8884e48730e589eeb554584ea4f5db9f100dc7663cbbaa1ffadccf3c8d61c152920a1bdb44983d445e0d8306a487162c1004f13a8cb689be4ad1dfa86291ec9fa2a79750a0d639793c70e5e3d92fc80b400814442a99265020059ccdcb0eedbfcff4564cf583cbe77f2b7a5f0296ca6700002252265b875591025b8168097147b503e6cf5e792f579ef5140e15c1acacd00d8e1550ed1c361f726e4f0b098fc98e88f6322f7e0f5d19c755d64847ca280005a18fb81ae368d65e59180c50c2720cad74b857370d9078663156daee8f69900901045a99c5c2ce016c29e64c3572bd00bd1501d55a85a0b6ec06401f5953d003ad6b28024103e3b0e60a95f1116b6890ab7548ab064fd682ee55aabcc460100ca8d2f2323937ea1563c0967b1d9a84489ae6cbf97c11e2e285d8b3549afaa0069b1af37d9af90554a650774fec84cc6adb178eb69b44a514e938b841b0d6300d3d9a75b6de4ccbccdb2735588edcf5fff03e187fd16cb30637f45ac38690400c06204a30bd5dd81ce1ba60e7cfe5d397b76e609ead0d3b08c2eba319ecccb000f77d690f7c1915308591bcc50102742e1380d6dee9dc4a137815b9ea89cf00071e07e58c8e5aa7d5a9386c717e902716a7790082e5bb2af315a0b2afbced5000121927156c85ee1411953fc70156c3941f121a4abb89c21294e7b19174dc3009659380336613766c130d118116616722c8a5734b3d9892f57cec576195d21005bb93aaf65ae7891f12a7ec0ddffda7f0d33c205c901b0dd2ead97cb5c080900e1485b29b4f7c77a3dd87da7f1d2bc218acc5a6991d746d92dba54d6a8802d00ea484d559adda56ce746b1ff7dad34816d3cdc80bb501f9ed3dc73eb7a896d001852840d7e0f9e367a03ed7df9961592ea86ad2ca1bfa93f38115121f61d090056c9727830d1f6fd3b67eed63b6d20435d17068df9b12817c914c922d4445e00a84e14fa07d2782593f5aa51ad3ca2ba2a321d2f2f242dc4bb73e905a3615100d949681fdc3891bafaca80b39f99592d7276bcdd84a613ad1dcb34a99482ab008543351780e4e1299b7bef6c211919223b49ded65f824b1efa6728870d358e008cb90a59031ebf107873e5d20c43259f66ad922c1cee2d05804d9134890b8c00bc0738260dcd15798b1d5f79f5164c785efff6debb0fc660130d10d381426200f6a6f1059c31519fdf27addd971c50478648e3e00fe6be7885c657ebb1cf57009fff6bc96ac9691e792602dc322b440bdf7e9fbb1b7b3a1ee2b1e3ae5b5f9b0004c6d21e6bbf4893f40f00cf6058291139dabf32fedbedfb36bc44abbfcbd70037946160b8eb62e53dce5d4beaa4745875731ff11ef9b725e59fe546b7a2b30057ee6ebc8ead7b87b217a673f128abb12f01a8ea9a05296c408eaa020004250075b8d4d6e69bbe211eefe570859a3015916a4c2520409a241705fa4b5651fe0055674142f41b79ec8eceb3b46e4833032c078f7621c03b46235920e27ade8400de64846d0548a9df5d998ca88ccaaf252e9e42a840798220cb814c0a0db56d0071a616d0fc2b01ede9b1f35dfe90863a2e92f13bbd534e19ba301b56c1256a005d8a6ff83e19cdb871b0f8ee93284892988b50eb0361a8038c39dbd43c347900f340a4fe5785a7bb473f2ef3a2372f0336abeca51a2b42b4fbe9e480a1fcd200c6c6152b203fd87700398ee5a370f3ec9b33a321d440be1c07facd921f24130096da2faedb232572b155c579ba00f8a4cb5e3eb468908ee50ea8c563e9436b003c1f8d0f8105032b9ee97c0249a7a6019831e3ec25e8bcbf8a66091f696c79008c07a797eff4c6f195ec9cfc35abf1fd83f1f3d21b84061f047e81c8b5614a002fe8c1fbe81164f316a5d1082cfe63abaca4c8312e2324df3dbc8a3075a82b0093ce75121ffb69ad3b2f2fe2f96b60ae34c5a8dca1679ae0a97ba71a5e875200b2cda21d36139c48a7545271d8e35e8383fb2044ffde4a31f9284ff05462d900ae1dde6268a2cdcb7392a69dd4f3f5bf54f596e6a416194365654e8952249c00fb059760095430e0f6947833a1c9a029e0fbb45b5a12aa6830beed67c59c120077eadaa87bcc2d48371e1debb84acb24ebaf60924672c06be19329523ad3dd001c5c1488df34576fd71a1ea14f523da591cce78bf99b68a3dc073153b51541005edce180d96c970f3fac19595525d8cb0e199eb7f18c3350a14646f65b2d6700126af603f20a52d09aaea26590313c1b198465fcdf1e35ac7a6d504223bb6500c3a2095a494f9b53ab9bb7049b70395f2cd55aa0c9d02002ccff7d2b962c0b00e7837ba0d504acf3d066404266d64dc25c0b74fc6c5cb1b1bb415cbf839eef00f447852f270d7ed38015bda97c4caa5af34f488a435caa450e69a4b51f68b200f0f3e4376f23414a4b3b204cdb4b10d9dfcc29a884c343bcffffa8949f885b0016250101395aa45fad155d51104e3a1a5b5d3d70665daff17729c7d62a4b790014e5130600c40e267643cfa6cd9bc800e245cb0a46210f70bedc20a6bf68fe00d9cc1ca76ab8f9bb79d1fcecc85480f28888548b84b5f86f0aed624b891edd005a35641a4b5c6a32d32f64cda3d0b58414e19ff3630f14f3b15d84d10feec8003fc8fd9c322b9837874c57c888487cebe1de3a28d1c84946c52efbf14c6c9b00348f4c4495c7ed45ee3b4a95eedda3b20acb9cd21b9bae700f4fc5ef00776800484a59493d5effc5c551beb0911df58e5ccfd269c7f7953c16606b9356897a00dc8083fd9a528d14c04bd70794d8f5c619705fe7891b06f61209451436a876001c2ece5be7dfe02fcab3988d5e444bac6d7c72a8bf00d68f9573fc381bf6a100e33cc3d7387be8b2f8387c2b3f6ac95e3d70d100f4e03247ad7e7b585262b0001e688e18e0bd51a7fe2f963298b9ee790481df2411d230dea6872dba152d0f000c0e7a095a887f6785da100b94ee5ef3cee3b7611c8f0845f314b33669edfa007d10a76a312a3919d3b56664c270c209f2483f7a060c5c33919a83658b72cc00df32d1d20d2d634eecb63c1c75959d41f015c118cb89f35d74f7a439986cd1007697b22233710d604434fbe305194d80c89692f85babd4456187501265baeb00f70e34f9ac7ed0960a0945743fa87d9f66648d8d4d58ba98f11325920286570003fc973ee5b15b62a3e4c3ad6790f93417fb909ccf836471c5ee37eae6524000080471db81bf76583f48e33c71908c34c72e38a102fa1894196224969c3ace00247968c0634f57eb8fb69ec5ac57d3dea2e969722894f42c51dea934f6c58300cfd2c8cb1ea706df0c2d2161d8344ca8d548a0332e6f16c3733c21c1a3f4a40009fc64992c94a91ecb75e4682cdef5dcee0192be45936375d6f3cf0f1c315100afddd8c17d26b31698bee1d143cd9f4435283881a8fa848f12c46f8c99adff0096aa8e080af42f98489318fe6e0d3c8cfd5157f087f1c4f8689a0543c3eefc008ccbad23c00f33a9d3fd42fd8ad3c0a4138cf98572b8d10c9922afbe74e5d000c4a845768bdf3f6479903f2c99e0b5a9cb253b1197969f7c9480ba3c3510f400452cee753f7c72571f0af35ea6d8f65bc3ab550ebf25b202b917c8226e7873003744e70783df66194b43a79dcc5b074030f555328bf14d739a553d6a8955100013e305be380c01ff7dcd890db38784700ce970f98b47bd45318676a50859240074cb6d97687cc7a35801bdc8ea9a274e67faf4026dc36efa1f43e87becff9e00a0f34d26de79ff550d5a0f3f043cb650bfcc3b859689433fd39e185ba526600049138bd3ac7461201f6d098a13716cfe7786e2343c9047ee16ef6287796c3f0021bcd0bfa4a513bf32cde7919cffc5a363983049fd55b0447cc533c1ba01ec00c7580256e97456a298207d4b85ae8c8a68c954a12514af215dc1bd066ac4ef0087fa79dbb00a1f5a9bbc3f4053bb29e068c80823c4ea6600ebe2a7767b8f1800084da308b3f724332c8db48b329d89c54503aafeffcfb02b8fea1c3760aa0a00a24e9b3cac2b6df80a0e30094d4512a3c9f106366a18270e0fa3c42c09867100edcd31df617c8aa9fe792d7ca283bd023a0a6d33cf1c71ec6133f2f2a1c12b00783626e95c05ca9777e58fa43404d0ce4a3290cff4fabc6c4bd3f1a22dae2e0038f4d067090ea12cf6c39cc0c3ba4940c4f3b87a7c45e703c86a0a70a35dc2006305bb25962ccebb12d363801fa15c640110aa5b0160a72e207ceacb591b2d00e62aad8ad4f50dbc4d071df32e80d94dd2b78f099934084480745474669f9b00f173d49d810a6f1927f57291127c0e9c456f97a0774477cf6312b07f46bd7900c9e967e40e1512ab0621eafc81a8629d038133107f4e756a697c80bfd37ef1007f2198f3bcbbdd4a2d22a1f07a9f6b9caac9c261b27f9d5629c91f8a3c89330093fcbefda743def10075640c8e866420f73f7b27bef7193c9eae047df5f120009098ad1e1bd4c9d43e1174ef0aa9cf91cdf95049e8851d0fe349b9f263694d0084f2bf35ffa68a1ebeec606e59c83811245893fdc4b0167a0663ae3bdb4bbc0047118e1e636eda3e9ca6e29459cef08ef9fa4030916275c0fedf1698c249b1005e4917eff2b8c17bad3750509b8fd96cbaf74784a29705458fc2e82b136a9e009ee45ca56cd455d7edccbb9dc0ca52ea991dce0e949fd0bde16ff6723ab5b400d681564c5176cbcf4cad338c25b22369ce3e5439d68746938c874d94429e8400335a5233be4cc58d698c0e1e31076890c41e9f9b7ac09a617b7f46851c92ab008f577c913cfc98ee68ce8505fcd523324fd79eff4ee46bc737c28b9b846ac3000110550e406d10f487f9755653494d3831c2f01e1857bf8f03b3b2ba6e3e1c00409f870c172e846b66488580436650b63793102f6035d6bd2d7871e3f48491000450ab1c16aed26e03188ffe7235e4feaa4e5893cb8aa53bf5af22c091290b00e97d49980857c8f8ecf3a85fb77ac201323a4ddbe7b781e0b8ef7cce31ce6a00bfce8e52b89aa43be77b2b5c5b1554fc037003cc2181bc69ec3cd677f8022300e77e7c6289e648120d36fa73c4c32643c2ce45e0f7f87d9ab941e31d9c09c300b2d9817adade793053bb5ef10a1c853550e240425d8156989fb6880ddafc240064456c12bfed37a73c7fd99f9d87d8769f258c5876ff4c6695329bd778a4020084132637a19ce95fe5615cade2efb70ff6d66bfa0ccc2a31f1c445dbbff97a007180b017ca41d6ba8c5e629dce33c40dab823884f6cb7b8d7d425a1882fed800ecbd29191619523ddcd98ac3810f2fbe921b11fde2d74f154884a5ba028dfe005a5bc815a121c80cb8404c6da0515e340e56d81ec282dbc847e3941ebf07db00315a7df680de0062a7d210acd5382d224fe02e63099859c32134cdbd89c4dc00252f0b769b27949bf436dff7d7ee8fcf848e2294dcd30d8b01acfffcd7d2e9004b6b8b18e49995173c7db827c67887d2630cbca42cfdfbb6234b14a0717e5200fab9ed1289af84bfbc49bd41e6019048b5598be42a68bafc6f50fbb0eccb2300516a0843a081fc1d053ecf08a2aba7090a447f62dbe4dc36372d550f6cf0390084d7f2ab7f53bd824ff1485cdfe4611f900473607067d1724de1cc2b2c990300c632d82ecf959192d86b3be3ad1efe84c52afb4806e20f0e96b8e6ee00666f0036335db00c5e9b252dc673b65c97d5a18c7221d39de87116a0b9977f8b154d00ba4228d2a8ec9e9250b3feb6b7dec0b8563727d74369bf71166e518bf0b44200f40189dd655456005f4f8fbdef7041dfb95f24e63a96d128702cf9d06c5de6009e875dc0e14c618776adf98e0b46914886d0e7d57a7cf1fc57f753b32390eb00dc67574fd0c76f8b6ab835a0d3220f3822887a2d75f894a447d6eda9dec333006de68695aea6efb6985b87defab7249708d28464ab3f256531477c5af2cb6900867b05a745e094e548fb11861e128126175033798ff97fcfd85ce549adf81a00c9798f1c0bb3de295effacb34188f740232794ef4e6683e443290b719bb91c004ee8f30205738087b26eeead05d41638bd06c8e32fe0a26f98da607a908cc6006a5fc120177017f78c6d3c1dcf8f15f18d541a7bddb5765240f811d3e8a2e0005ced16d216e06cfa470b22190ed33d427d5a111e9522476ca1e9bf1b8bd35900df4ccde56b233b792fc7d06c024e9dec3655324fd3340e4d614d01c14bed120001356b68790597d23ceb9b518806989655f6de3c56f402ddc1e6d2c7fc01bb00b54be7093d957be98a0a2e7a50ddbac80c90e3a4c59bd26b7912c4681e65fe00620ab37de60684799581b14e1b7c4b21d43282e0cafdf2ccab926204652faf008acbbb56e331e27656cf684f1b8bafb68d172ab5352fd74580cda3ff2b083e003a3c273a67376fae053cab14d4f0ee76e051f2e07c487d5aa2d2ed74650ce7006c6b65c1a49200eaadf2de191c69037b9fe039fac3f63b2874bb5cb95d1f9800970dcd7641361bc5020833349735daa22ffed70e711513811b56b451c05a5b00bc797499587a1919ea5da143531dd6da4085ef10849e672d93c6938ff155b800177c713b53b1f4cea11d743acdc4c4bb7fbf7305e14347f6a74194a61ab7c10071bda21958564f4915c9964aa5ed4dcb5fecbfeaf3f295388455de00a1cce0005b8fe6bb4a5c584a84ea95ee3bdbf919f3a42207e035ab8a361e6e53c1a4650040d16cbc60a87ff4b3011a229f068d7aab3624c8fa348dedca23be492eb88e0005d3ab34c3a32c4cef412877b5ab2d9d42477dc8ce95a11540e3cf8905d42a004226286fd9f79aa6eca3442ebc5e7db7c4e50fcb0866a0c2bbac90808a26d100e364da274b0a379f117f799dca4c98f5abb3c757799dfc4ebbecd31f8924860042fe7d4a1cc4e2d3af2a20ab75e327b9de6c7f874fb9c458e2abd16b353a3500a5fee8389c5cf652b35b7f893e188b908fd2001ffc273a3754955b76d6d17000d71c4b286eff31128bb14bb42d3e843dc484950d25924c2f7e02a9384df46600814f896636bb4e6a36cf8f89f4612e5532297a08edea11e7ec429ccb31f297009f1e4906567108f4d5b29f32d6adb00c93216e7dd15a5145590195e3825f01000b0d13cdb9b7e15434c3556e8f6b66d760cb922d98a6bb4b745529fd0923da008adcedabe4abd30ca40ca5799d5f1accb99932237b8dd726339a1ff9b67224004d5a060d9a984c0e38182ac66725bb4c032f62a4257da4c249f7b5a63c4cee007ff8b7078c27f9dbfdaf72a7e7303904cf918f1add80e44b0b3f3c6302b95a006bc793ee99516bec68816f6b8148a250bd91ba15ace66c1ae0b5f2a86aac9d003b6894d9a43f83141fad6a4455aa8240afa83d20a5cafa12db7a8adba40d5200910ed68aa87b6b525dab8a12e8544b0b79a92e1fa03da6c4401ee2835b531700967e59a694d62c6cf4d9639e3325cecb8a7c23127f5c9a9bfb9ec99806fa90005733a58604eec934d78ec4d5f5b3fa1c5243f55c4c5431cbf7c819c2c8158a00ab9242fc43d534cf42d22c5b8482edab942c16fbf0457becba15ec4c9ecd8b00f849ee5eed64f7d35ec13a6e203bd428f1985b326bf3558fc5cafd66c433b3007dfeab587d55b8523568105d368aa2c635c2dae8b45809ea7c06aaa6f953fd005c26fe8d928191dff28dad3d24f8c6a74178d94260e8b22c3f60ead7ce46740019f8edeccb584c3df2d1f24898fc2f50b45b830b4792a51f906723f024b2890002cdf0328766f63c0b475e3259b948f1e8d2146d71562a94e2bc310f115ad7009b4edf2c7bac8a201f17a57d035eb91c1ad35c1e71802c923594806824c63800e36bc59c18ceba90e8cfe10a5590d895c4d444a26a4aa8ef4042a2e99e4c7c0040e67efb6d0fe472a1758d9851df167b4f7251a4840fbaf9cac2f408ce9ce2005402748ed6ce6cf8dc4ccdca375bff62fd7a064a87768fc1ac8d401243a6fd00883cccc2c4680120904d0429313c33e957975902d722715da82b3946ef68a30035a1fde364e33bbfd3eae2196e49e1e1c526f8ccf4b69c82cea3c9fb4718cf0098aebc0943bcca10ca4d437087e0ee6397897244aaa0b8f65557ca0e3065f800a70f9c860664eb9b174022111e8f616f3878d12cbd33fc8a95bf32cba61adc0022534cbe79ee787e4222fd9ee88bf8773759f2790adb1aa329c8d40a86486c00370b6b7639f62e0fa2442a0789bd7ab68d0fb8a513f7610c9b1f86aec2c69400bb9b6385795cb5c5ef0b6d3bb380dde151f145ac2b48407428f8ae22c42b990038e19b39b5cfab5ba18c46e2b6649076d201241f84fde908632f51e06fbf91008ded2c33304772f02eb3a17d96ecd6bc65eb345c8556fd836324f6cba2274200efd29a3eb4dc62584eb22c0fcd844f4356c1aaa195337b43d66ad9cb63417300991cca5bbb49e8629127c65934eacbeebacdd6366bc961f756739e4f244d250068ba3b515df2c6cd8a4569e8b88274c13299eab0473d50fbcc9ff8448e02f900eb7ef67fc6052642000da288fa0c32b5aead0902694285d2c6e0bd1db7c0c400bcf42aab66667dc217ab2316fb548f76082647257e3e4bf2a7a5efd95334500044b8cf02067517c08d27b988a4868167a18f877528b8e47096284a22fe916b00f4a34eaff4c56c5defb489d2b98af68f4a70c6444d799be60af1a5732bd218006731dda9a58ea143fbcbe039f86365daf306370d5f0940de86acbe37f9919800933dbf8e0188d11fb5327d07608ccfa9496a660f832ec3a771dc5ee2b9375e00e49c3aaf628eecdd85bab14be0d6b6281c1dfb8d5e06344ad01a5477ea1b5600d480d196781b488dba46d84b17cab118aa0d84c67f6235457d288a9b514d3800343df2d9b743fd04185f069300efd6d8893eb6587aca4af08d952a29ebea840054f634b8e480295b06aee4b55dabaa08cc25de53e1420456360aeb2f59c993004460c784ef22a1b6d68d6aac13ff169e80b6f261000d059db9eac80a5793ff004edc7f964ebcc411e5a69345d1e5b2fc9603cdb61f5c1e54b311a5dbc97f480095f2b9db41422fa42ac5b34160ca35f61445ee1b7026dbb75e933937e670e8003e798e184df2164eddddbc1b96b810cfe58757ea0ac53c3c038275f52261960028add582f27fbae169c9e97c7ee454356aafe21670c79b47652c69adb374bd00b9f2709b6597e0e7b9ddb89f2582e6ed2104d5f644d8eff95934abe28e6b3500cf94076ba1d6d842df855e71c7e592935e8d98174e95a9b8b330f04cf1b38d00cb3c3f933a76901586b6be9d0da962e3a0e8ef1f63c2a4e32e87712e925c2400ecff096aa5ae2c7856e3a97b74c688bd24730c8cdf9a1dbb5d286b99d29bd8009a8a09313658cd965e823fb986766e2322a9cd5038d45c802cda07088757b800de4d2b58d2d4f666b67ce5264a65ee7de77a07ad9be2a866a46c0ac775f0be00d466887f1e98d6877104afb9ff1fdf517ba6b149753fa30ceaaf85f61f83a9004c254c1a7da0e2a82c2cdb90587e95cdc3f05c9d1f0810de2719ec0564955a00349dd4946d204c4aa1e8d89a4378ae3882817697edf3bffd0b256b5b3dbb53004708971d3f04fdc85f9c620e804bec09edea7ca3439ffb16a09948a420bd5800b0b8d5d3adb91edd308928794c8deccf27f738b5883dfeff0591f0984c9f1f008c8bd8a10ceb3420adcf89496e6fee83c78c98f13d7731f4e413d2b96e8a0c00a32330d871aa72bbf906259ce82af22342b6f0c1679d0b987fd3a7edbc3260001964acf839edd9b8f1c298dfc21515b7023f3c9a1503c9400123d974a95f9600946fb127386693f210b9fcd4825bb6d22e15f07b8d0ab36dcaf51aa66e163b006d2c33c77d2a262edf33819b7b67197f3d0b13446d217cb7934e649934052c00a12fe5940c924353050045bad52151ce4d977a4f5cd592987df4aa39e6bdb300ba479f2119817345da5aadfd7253e2d062e127bcf3427609662d90c4ebf40a003a7af9739d194a0c2cd3188c1074b0d912cef14d03be03f842c2dc9d9499bd00f47b5e9783356e0666698cbd2b6202f06ae1f491caf3e20f97de7e85dfa70d0016b97a28abc3c7d2f2edf0740e9d53aa65a6fe32defa37eb7179e82fef41300047af1e6d57c00a39ccbc0ce30ae133b94172461e7158091ad13261074e93c30057360db1401f82b3ba58438bc7b007662994ef119555a1c1a35253047e545d0044b2720614f9584a3b325b724070b5df31e3b4aa714b837597ac0f39344003000403d4048d40d109ac7c50eb880151747c6d72cc8edc7537530470adc6077100f68c260a1abd15de19c3bfd9b609fbbac368ce7e5560af54d4a189797a44f800c339a184669197de603079e37bf8f38bd1b58a0be6b30cc132dbf153368034007b2be55ad56d28beebb3673c62d5db2e5cbb344357a6089af26fc7408407830037232590580117da4634cadf60a270701142762195755285150c4078717ad2001a0cc237b108d65a77a9f46c45ed779920503ed674fdf3b4560af7ee324ff4005cb8643f4d540673e9b7084492fcf6129436655eb95a6c285145e7f8e761b1008f1ebe15c23b6dda8cc5901dc371a406a6b6fe3a380b118e7b49349e97ba47002f4e8468ece9b6f957bbfa8f766f4d6968a19029ccd90b41e85125bfbb188b00cfcb71e04bf637631e3652b789ecb0016f53bd28bace21f4b5f1af840a048d00234c40dccbfedb33ab1ff829e9e6baa27ec22766f7a413b4d43493e9ba121300a5a8a501059a1f758b347c24259a2a87dd6e5cda916d3cf73f56b2e37bf245009a1dee1f2b0c75d7d4be09a74d8321314092e7ac345114b65425a16d7a958600d73bb48a895422d2a46f7367be261e95aaef79fd93656dbdaad753853f77660099654effc9a8a2cd4c446c29a1cb8711521f9ed35b288017c137df41efad0700274b306b00240e7aa8325f8c4056669ded620617b4a0e8f43b0d9591d2ca8800fd4c275a5e33ba9d43b13be2a658d329de2ab0797bda6f30e02551e06a2b2a003e05ac1faf05999568e424cd96be3b04ba0cd1b6d7181e6fee0869be7fb50f0025e8f340cb8a348f87c57bdbc6bc4f16a40493b16eafe658fec83b19945d1500706c98ce3678502275eeb03f530f3045895350add869c8b6b55b4f2cb8c28100fbbc3a404ca5c092e87e7f4af1cf2bfe2605be56188bb5852f67c72002c3010068e439edcee9ebe3c44adb33abd8e22bee17fc3d92cc53f145f9530898cf1b00b5d0dccec1d190154038a79f85fc5d1f481390a0842a4202ec3334761b88e60009019b6438988ac49df604d7c3d4e348a4b909459224ab2e2d48f5c519128c0033d3ba8ab633655a2b831126b15a9211f9f31c11d9ccd677de5c170ed82b3000e927413b7e713a7b06e1828dc289fe94a92e7eed47505cf38eb4461dd5924800e21a467685f9416044b22ee3202edcd22cabaf004a5a6a130a5434189c0ea500ac098a5ef07e49db9c32881b42298c0e80717b7adfc4bcdfe053bb0c03d9ef00d7a2157736fe4d7d30ad8c90941c720434e5f07e071541bcba5cb0a3b2a15b00cd43103d83301d53bbfff78315b767c906ed75a7b2834378d90279cfee389f00a571e306881a9b2060b518beb387f2846c5489cfd433f65e703da370899770009fda450afa04e6b6f3cf2236d4f93ef09600b0f865eca085058d219813635f00b05d7f18796163d29ff29baaa851aae790e6003438913777a1cad238a6cacb00faba470e1b979b615ccec70e36f9baf1f862d8e63c19e008a6db383f0e191a0058d1b950e20b4278c4e0ef002d1c8ce47131cd1fd2f62fe5e0cc40d39ae9180010689e1c0f7be5da98ac958069ea964fcfe4618b276bf6680eb2d67238526700818273b0d7201010c3032b115811380f258306e8caff67bd077ba71884cc4c008e51d8b6a541389166bdae962acfff3c844d6101c5e19c5dff13817ebea04200dd1555bfaae3dca06904ba0976eb6f5a63f3457d16282ab5050285dc67d73f0083a399b353a2f68f066377d8a8caee8cd6e00e969bb0c78c3dd41b2c377b2900e65e8df8da625835ab5fef1a23a40dc6cdbaf70ff6ffe482d35d7c6d3037b300d25dbac602dab9b916be10ee993f1b05a70781a39023e9b91809602eefeec1004cca3978f35b9d10abe1597dbb390c4fbdd9a7c95620a331ee29bf78f2465e0048e0e605ff8017c11eed66ce97e30d5a2c8646a3edf2812c65e1f5419da340007e507f81d6361a6d9f0e69fb3b6af11337cf29b6a65075c650facca337413800cb306112b876a6f95c57a711f306a5cde8194f254d9eb2887bbe81a1bc0be70095ffc10c210d0143b2c6e93333e0dac005986de4246efc8cea6394a59ab96800775d4dc0f5bd9c45026250bd5179de9dc168008968983be12ce365b68c9d6300bf2c3c31eb73c1147f2c66e1a4f41880d070f716d1a3594d68d7a05612676c00dfd713b124c7ac6645a497348f380d684587ee9921340902f91fbaf17ce2b6001592d65b890f403b4f944af6fe926cd503d20698056108215fe53f4746b30800a2fd7d1a1ce807648933a17c73854b67849f28be3682cefcbc1e8579f809b0002810e6c11739f91899706788ebe4b3a75d940a39b83ae84d9e68141006ee110005620b9cb7ba87e24c761a6a06565fd4fdbdfaa514094c03a83cf51e85f8e5008ace483b2ed6f8a3c93782b60df7538b407a3400eee6dbb50224b7d60a16b6006d3c50de8eab5ced0af1b77e3b2837df5511acb195984f0a313d682ba69591001a8b8a82829ca348aa1875d7c6d69e6af1c9b6017c34490a6446cf2dd615d5007261686a4a6b413a573e9c58273447ffcf51cc51c9a742c9bfa1e2159a36bf00618a6522d65bcd5e6deced4ec84930d8c7b45b2ca53d8d359d55578de1486000ccf9caf061d045fffdb4360eee0ac680bf41472b452a68cfada08776929daf0085f1af3ef1a1b68e76c12b0f1bdbcacde63ae1350739c7476488ce1c6a4b60006e193b301c3ef41006aafc984b259ae2e5752781e6d938b36726e6a17fc7d30028e3654e3b03f4e40314aa8c620430cfc64ad304339d41b6532f1465f6016f00417a9b9afe79f2c5a0d43aa7ecf02c951f4f0d056ae884c1faa712aa1899500041ef996e98c445c372d9d011aee70ad9199bb7535b96a4ee98c90d7a9b652b005dcd356cc2507a1394f7bc63780f114c124128cd7ff8da4f38a130878844cb001cbc542c51725cf75b5a870ac356801543d12e062c2ad31e8cec0ce3b0c7460023141cb000b1ccaf37d8c3f3c5aa4e806b3d31be5fdede985f098753a03fd000836e0399e6df4726a241325e0a822f10e1e64b13d6f9800183e4c528f98ff600ae07ad9dc820337da10d75a95f99c833fecad0d50d0d65ba3ca06724f138df00902c48645fd26d6fa796f1bcee4eb96c9e50f1eac6016195980eeef05ba29300f6fe605ffdbe5e08468406c4cb54209548b05084dbdc0e31b8a0510ea0407d007bbd4fcbbdc65e605a068008678016da56dd85f721812c9111137a1dd5a4d2002fb29cee323b6d501da19265851a100cbf6071955b68fef650144ae5e6ee1500dfe9915f16cd90cb9b37ebc586494ad354061401b2420eef74a109acf96d3e00f8ee76d133840f9844b3aa0bfbef539d8d5f745f78400c6948f03fe7728c5b005a7ff27dd69508428d7e39cce9345264d38c9dd34296789d0271b62d8ffbc60047b8590102c8fcc34ab1e42a6c94725bb89fddc3589961c9dc90a0c383fe51002109927037c1be19ebc30f2f5b34676cf6413782f045b08ee8b58b53ff2229002165d12316c03024e8f8cdb7530d4ca6909d07bc86f44699fe7083c0c1b52100d8f844db2070d43261e8716234fb22ebbbea517549cc8fe6aed7978c35ba0200a9d54e9cd6adf57624306e8d2203e386cd75d5b06d18f7b1ae28586e5eec2200e4fdba7f7f98cc0a4def6604f8dfc88d36b6aeda49a79c3807994c91a85ee500e8cdf24d18aeed454cd877ec3924518982a915534af07d531bb94a74fd30350065561be52cef7555d5c3432eecb1ef3ee80a1ddba7a70fee7e200a6004951600fc697792a1400de4dcc2834c9bd86bf44f074733892f8c539ed2b53bff687e00a2796ae8fce84fe9651cd996c3c2a118b170a70aabf24befb5724b0dd432c700badb2dd77f8db2e5fbedc9299d1e144d95992615c27b1c7bd7b0a18df7731e00eca00e5d780fae7f886bc33544dc2e799f9cec10a2d787d15afaae756ff57e006cf7d0a1b5071418f4418575eb711cd088576a8c2975a43b223af0bb4c150a00dab1955c697d7afffa67b163c5f1e98d804de6cc875bb4a65fd444e66ec29e001097eb7b0a8c977f8ee4e0d25f94705217cc8032abe14eedee0ceaa670371b00b65d0a42a11502a7912dc0c2820639356cf7db1b9ae0d4d8b65d8dd738d53a00472179a59612fe2ca665ad6428245a9fc06d3de9a7d3f94a1269db73acb7400044d041720a3d10952a6d6bc5d0f9e5a2f9123eafe04c38ba4db24d90aadee100e55012aaf9c60b6e019da5cc6f69f3c2b2a5d8fd6c0903fcfa3b68073c410c009f1628efdad0382a211ceb301c17d5757e512e073fbd85e8538dda04a7962600944b72920cb9848b1784fc9e815c78f95f515daf9d6d906cd353aff2138924002eb4a038354040ec06059bee79abe4b056fcb9f7e5128fbd81e806088e19830099b250562478363d5b45bec5f648a52a33a518b35f8075bfeda18e0bfa207300d8eb4b5cc24fa59ba60aa33b1ac1a27e2bf34230361901f714a2f58ea475a200ad93422e02c1b881c6ae1e40db5fd1b3c9efc00ac0f156610967e83d5806590092b2e72072533fcc2307d988085ca6da654c04ffc67dfae21a984c0b5a9e3e00f2bdcd45050a9c0983a78e8ee94eb9625df93b12d8416460ac00c0c0c0a0110003ef9d5e316eda01d5b6d0b951d3124384a56e4056bf7ad24d45978bb86dc200745541bec163f5d3806bf7b758d45bb3846854367514f817b54796747f2b1b00a6907bb5250d3bc72ac51bb61bf6f6bcce9623a2487b229df393db4af9185700724835094b79cc15b40ca170cc0d1064317472b22ccc161ff9eb7793d45ee400ff3a057ede4fb86e53ad891bbb6dfe3c1598dad1cffef4843dac37402bf4ac00a02d1953077429b18f2a66482527f32f2e566217c08d991ae8624b9530967400e7d9350f3268221659b3f4fe4fbfdc8abaff20c3fcabfa9c8f5d9d004d55ed00dd68b9ad051aaf51322633df92610638c5de49b85cef9d2794d6545bc5ca5e000652a7e1caf518ae7988f0ea520364c2639857f91b92e4e3ba410935625ab200a260cfe2a8aab46b0c0a0a3d3ac232e4db625ebd51e375facbe7528a0222ef0052e9e94ca176d50b7b39d97624f86b93b1f551ddd4716e35033e7dddf33812009c097328e8da7794c4f98222bda0e3eb595d0f83ab97dc84eeba950f6c14ee00e6409e797c6f20880db8fce5f1c1840a318b537132831d185f7a706d799fcf0026266cf744990a3b831ffeba6ff6063a6442a7b7de104ebc43e4b4004c5fc700ac8b89401ded475a1b376df494b8e53171ae6e7c58df93e995ae608871b22000a1d74c12c417c08721cc65b2fda424b13faafdd5c482a6597b1fa5712ed9b80022e7a6a9bd291867bafa4353e737429620e38472c297ba791a079dddbd2d4b009eb6ae11203f2be8930abfa2af17f4c9bb1e330751f4db1a3cfe590e6c72d500e8b654a2ee865591c9684e298667606cf6b999958d291c166300c32900e4ce00d0459343d96bf44e9ecb5c2ff2fa6843f13d32d7a4189a36858e68a6f4741a0046272452124958d6cfae13248232faa3f96a9f1e56abfcc07b34a1d50300e600e985613fd7750ac33b3605a1bab4ef99f2943ad07b0bde7228b288b9d06b5400d5d1f53e19792271173fa173dc029f6ec998d0580903a97572ba35d43218d70095efe594184108088e32bf8e81caf5c6c9e4c5d8b9611ac6caaba135e202e8003b01fa8e433f598dfe432ea62f0d8d8c9e68fc0752ccd51f99b50b9869788000525b09dcc52b7c6c9e75dd73403fd9b59f61e04b0e2c4cb898070d035dc887002b96f5e49f1d27cbe43cec55b383af7a7eb2873d19b5da660a92ae4bf9752e00bd66d43d1cb49d3b89e9cc75eb960ff7da20f66cbec2be268fac1d5d1c17d100f52f6a1149c119377191ec72da12c59be8b92d847e78ffa43fb59a80793358000f0b3519cf5bbcdcca2cf4b63d6ae24f8773bc3b4f1d50bd93723a19e2281e0085517b86305232f41a72202cf48360659821b35c1f791b62e2d951ad0ea17900c09d6e4426cd6c9053a0e03c7c0207d82a1316d8559333caad0da02e72b5510090deeb9250d68681d34e533a35f8fc64f0364bcdfff6852483b762d4b4b114009ce276cb279cb8bc3bbb333e8b842fa2789cd3eb18a6f188d8bfbdb041cf50006b8fa3418440c70a5610dbe83c6e5bdca02baeec69af4653454e119bf3381b00b60fd32bd5289823d7f1b159898aa6b4bded3b4cbdc2ac768db042d52d0d960003e65188eed31bc4f958b1e8ce40fba5c3f67e4ede309f0f816ce016bf29df0071b6e2d2924507735b82c962f02ef716d08db15af8b6a8edadbdaae867024a0026274edd8ac3e9b12fe273201f4a1a93ab3fe056df6022d2af3563e3209f3400b26b41bb2fdb15d8f13193c042ac6cfc627695b0b5c1a681c23c79ff20936300e3b4be62e2bec0d3e4be865c0f24a3a1bb512f76020b3ab4cf638ac510781600bc3647ead08fc37523daa74a4ecc1e0a84e2f86868abd0c6bc4062fe99b4790030d5db5f96a57571fc0019126608b91a5992a51676d22f3b544921a5b0a56f00d39dd6049c39230d32c1d52db662733140cc54b3b0a198b47a787c4776545900061baadb65bcb4fb51e9352af4729bda4529136ddc4569486fa947b32a1db500961cf6c5c24d9cec72459a2e6a62cbb8027f0dfafb5c57820e144e47db9adb0089d800558406c230475e7523d0c1d965f3d6bf83360416d2c3e2f024bec5be00c0c9a753d6d8f7b8b085da3011ef5b893387b7cfaa9bc3819eeb6a5112158a0043d5334bbbd4a88a5b5d37d5e0466ec5469f58fa23ea9816bf8891f408469d00c136c72242c494faa3f509adb2c7e9718e4c0c0022f8e75afba24447f22a3500f8992efb5ae0b2e6beab663534ecb37b91d8190765aac1f8559e804995f4360012104b4cdb199b62d4fee078ac7f63eae8e0faa665e1a07ff9f3a338fde69900aa3efe100bc1a6dac3fa6c05878382a27383f126d32818d77bfcbf9e4b7448007a18da17f056e9f09f7b1acef1e78062cb6bc483ce53c7153ed9a99c137198007d406f4a20f6ae041a64ede5acd07c7845619a596aa62e61180a120c7fc4570000dab0bf5c9642b79d776ddca83e52f2ed436aaad4aaa9a90526e55e6b6147009b7b720184cc5635b7ecdb2a793aa37eb54c6e7b8d9f43a37e3796a07fcde10066c991394818aff9441b726601ce8b2d854402e0cee76f51edb03787a781e9007e10caa0d96aa414f1a70118980d8774631c10b77d208077d493a64ed71e020065ae1ea7ed0f6ee1ca2b5525e1a3af42a5bb5ad4eee659c61e7f0c24c8684100385692579385976213352189c57528ac6f068005ea7eff15c888a69e279df00069d860b6207d66d2a4608934bd9d99e9248736ec9c294ae29e95192c73a0be000d3794cf7a286001b3da2fb34775f2aa21f9a5abfacd5c4068086af8fb8a6d00ca7b234f6676eba22a90303a8dcfa84cd2b1c55844e3bf49a034b7ad228d0d00cc312907a868883e3cffa87ec278a75c3b89cd15924b5780560bf3b48af4cd005060bba413171bceaf6881333f2495023a000db49dbcb73177b4415bdd32da00c3a575ddd73745a8b873cc59cdf322284c85c7f82f5d5af86b13e9b85d519b00e9929db9322200dc8be76afef0a7136334dd67b838f782764b943d9407bd1b006fe8faddba8de94a050c1a48dd066a71d25c1375bb58c388ff6923a15fb5d300e64861f02aae64508958cc9618b90c4d20bbc63425dd3c5dde2ff4576a4f7500a60b3e81b4e5349a3ba6f6384efc6d050fb7949c33e0813d8723b4cd905376003ce43ed3684fff19d11e370ee015b63ebdf853aa63959cd3e4112282b0cba600c355207b05ad8b62c2bbd8ae7de654c8ded1f7c6793195b19bacadc75e919b009cdbae2271320726c51e26e7d8af27f9be590bdeb4ebc80bcd2f3ba114072c00ef01032ef34af40ad1dfb5ac819dcb8b3cede29040fd3327b20c4dd46be4c600413bc490e6febe3f90013409b239932c77011e7573bddbd98aeaee3f9f761b006f04e85c8ff5fd2c1dd54e9562d2866cf27cd96157a5df8ccd932e7a7be79f00576b52fcd5bc04dcc9e38a9fd319bcca8f9c32330e319e26dcdc14a970103f003c87c80544aa4e30f0f56f86920ab2c7c5ef25f2d86d81bd82e9f7c1f203340028e0c3dbdb0bd6a8d2efbb2f780dfdf7c8b0504aebaf76f1839d2ca29f8b8700f221213cf5762b77d9c3d339410769783d234f548f16fabb34f37872e043d1000a126cfe4819536e2dae816941a77efbb87f08f01b3e01420b7ef5e8382e6e0023a82853c4a667b128d275955a9a5233ebbaadd39bab742a293c079a16ac990043292e913e8c58e769b4c9824ded7d6906204ef01fe1485a40da55c79c428d002518d37dd877186e978c220a9e810a27e14142a6e8e446e0e9f8892e13442e003824824339771440df455bbff4836e8fccb30a45b7715d42d9e3e75b5bfbe300112aff1a72c6c7b3ff9e80df018dba9f745b249207c7e03b4541e56ac794db0088eb305da7958e93220d9f04004b851c2b509de9ff8ec52046a8642642b5b5007d50e5c16c23eb96356ee169ab28f1ac51289d9d8175610866a9a7873d245e00296d98dbc6117537b5657bb29241ef591c5d7c470c6a83328505355c7e9c50003a1190ea21956c3b99b1a1731d351dc0f15800d44eaeedef677294e6a0805c009d7e212a30bc3891beb15f6d33fedf34835c362a0d1f0d3d438d52f43a9197000d785726159ed32d2fbff40d0368252930d9b56ac2b6dcef333de39f890da4001a06b84c7fe6eadce9a3d6f61f5f0fc8231d313a0f0e64e833da3972f1e1b5002cf1819ea7a5e0f7fc486b529d89b9ad9e6fb80e1eb00a699995982962a22e001eb8bc24c86e3a5275a659ee5a7d4e0b3ae590a517e603fa89c18211a1d8da00f23b5290f0bf5b46047bba17f8a2ac2db1a31de1384dd91b009f0d8baa2d310036ba25e6ba04132ded5cf32a651e5945db0a6b34fe19c383a64ce78492baac00becf3118df309e0f99e4480443335d1c1ed5bef576fd1f16fb64b5c78e678000c4c4afa359f807acc34193e4cbd7777f0aacc0965aad67ab712a133e8e38e70025cf0753abc13094af017da915e27826d1c99a76c0858332810b6a01a4f93e0094ad4a7b15342c45d684b6bc1251c6ed6ce8e50bef3f57828d059f7637440c00fa1eee68a4b3453555954e6c96a9f6fc5bb1fa915e654dfdc9e120d8a960720071795eebc73ab34cddd3a3bc3064eabb4263e4529375fee62351466e6eac1e003e454273b22d827ff671f8f1ec21cfef3b0e11368bcf2250ccdaf80df9b26b00da4f9fe45f25e311ffeac5a05a04cbabb76cc0acd56d37aef95c426774c5bd00d0fc2a89f9bb099d6f3fbd8e2d0f6746044141ddac4cfce07853b1d0caf5e1000a24ccc9da47d5256ab4a69c364c0c62ca9914458df4a2f0fab2f150a95ce50008b0a7cc0d4182248caabeb554afcd9237ab065d0d10e92999aaec0277bb1200fb955624ff6c6c2097c7d40e5012b4b21520fbdbd833b4bd9e3e1023fa473500729e5b1f0820278d6da27e3bee52d7ec2bbcdc07e4400cfe8e13abfe4d164d005b40c49ae6b908550b485de397a01904413e8328fb7d54c1a69c1cafc73eb7001497ee9964546aca48b717a4e80a341679b9d63379c60302c4cecc10d3467100776a1f057fb6207f75f4e915183812529a23be8a871340fe1c204c2b2086ff002a1e1a739a0f392bfc2cc544966ef0223c68d120d6bda162bddb8e8dc5aa0f00ca33f242e47f51594d30f25d185cce3192813929ec3a9eda9842b1e488e35f00cfcf2030bf4817fed2d9dfa8e650b73f5ed46886175548496e3d21c43d266d00d8d5d02fa4d6289ddb1363df47d72e55c387869482794424ab718d335fd3d900ec9e3bb43e50f33014118f0ccd7ec246bf0ec27bef5eb9345cb50c92fb256b001d2b2530bcffb63a1294aafab05964ec6e065f961c486fff6b7d4d3e4f539c006e1f05f4e6713367d78c894a9c6cd767530d3800370aee989bab42fddb4f300099f8dbac41a05d1142d38dcb439be8a94cfd2f5a89c3fafe0e5da859d46f78005a59202c0e0d40fa15e1c36248f23b953e19ba53fdab5ca0c6a41161ed9cc6005023a9aba4c87b646541912fc7f1087fbaaecc2ea978bc2dd00ffa65a410c0006bd087495a8a8f70ba2d0e6a463f1ef0c372707e0702c29820157c66f1b401003e5b571e48714ad403be51aeef3c2a359e01ddebbc85960e8d037f7a133b84001abb970b9fc2f02e3f6c91a935afef22de2fe46c13d9702e263a63333b38e7008acd16e4e40e39ef98072d99600bfe9a86d80a738b8b7de1b6fb59691905490031f6960f05b859461d39e91d08854baaad0e5e78c2b27b8d520a61f4eaf5a0001cd4fb26cd93dfe0f73fdfda0a5f2542410ba40a7631b2ed624c8d73721aee00fb6fb41ec68deaa90a2a34610bc97cc46c0dd372e4491d42b1f634c15678460098a8c71e3b25bec493cbea5834489c9db4fce32d1c0c452bc042f7d56af95400c14b52070a09fd5bed5bc90595fab97531ada6ac9db6120d4c5d253db9e1a90061bddee82bc9a663a675043a72a03d569e08f83beec3c2c07929b6b4fc26f700513ebf1d67c85cf43a96e15dba2b742d3f70941659499e0fd18ad98f1f613c00aaa82b75d5b900c3f0c35e2263884c3f913ff21703446b589490ce68d810f500748d03655ec5a012fb27dd3fa743e4d5d3192ad6e774e83e6bfb072ce9cdd600d58b4f501c26738b4e4053efbe18466c960703fb7c247ada1dcc71e0dac1a300eb4b1359aab0e7fbac93ef7a9c82b3d35702900f7fdbebef662cc2901232a200c7c53171cdcf2f0ffd11362a4217b25dfcf6bd1339ad7e6e3481bf4ccbd24500bbb3f7ee513f6143323902ae9e7679098426f71c0d15def84904b836ca17e200b4e278088093ec12398fd8c6f002f3fd4aed201b2d4f7da845b654411c3c7d0079ab6fef4bfa73a9199ca5d1f30f746d667a01e35a034e2b10c40ba507ac1c009cd2bfd92839f12390dbf3abf7eef89a80f05644d2721f5020ab6573e2382e0070b1a51182163235c342711c76831c32253273d85fe1ca405dbeedb7bcc3510048f84552cccc0110956c6ac2b60a5eef2e51edc60c14abb2580846c5b1ff0200e38afd9040799773b7e1db9a5b97649a921ab33c5b7d56eb28147d9bbc7553007b31809febe932baea64af37672360ba7474e3c081136f0dcba219721a3fbe00b2df2d23d73badcdc3eb8b89c5620fd19da881ee1c57deecb2ea0779ff694d007d6c29990cda595db7d43f1dcd4f0475cb480a0ff0232c6917f83df4ea3d2000ae64efe69bd5d5b15a2eaf4add2dd12e03154ec664985069f62b0cc52f230000296dcaedc023e7a8ed63421dacebd54ffd1163a476e3182b3b5bf19eadcc9d00a04f57419c904f1f3abfd03e8ba517284ba46564227a073311f03a9e92bfb80084705cdbeed90a87ee4740b4115642a1f4b83ef5bbef7a14123045cc945be200f86943720c2bdaf238275bb3c1c38f50298af851bd2d39a3dcbbdb28d0b3f200de9d131eba236c4de857d16522b31ee9ecf10b5caa683cdfa34199f427334e0016a3e0781cf70768f94e96a55343e7deee49b5644f9b539a778e7dd4b25eaa00b6af33563e277ceedbef29391c213de78d8637a98a384463a095d14e7e2455001c9a0ccd1a46c635ef32fc88b7829b4245c024eecc3322cee717d34a31f6bd00e63cd5725e77811d664a0ccf98b04968778437a611f4816f1c0956ca18210a00dc5c9cf54cf53ae382eeb74dc207260f7748e109449c6df071b353fafccbcf0064369c358ad58532d57cc00acfb1aad1a03d4c6a418a0f0aeefc2d64b88c7200a7a53775c4a99dbbbc1016a605f596dcedd7a2defa01e132f6e279a20215e700a78def9cd7c282486df682a4c1a25d9e315d6286b40ec489a05e79ef4f0ac500757d34a97eb13c597352b5e5d73d821195d6f03d73f36072fc1b8a2aeb0d52005ed3e3ac6f515c531513f89b96c8aa2b409b6180a20c54a54fd45debc3d5ee007d87198ced65d6fd454d1c993c244e742f46e99ec1600d9ef8531d879d9d1300177b905543187667decb3c7977b40c2b367e8c66944eddcea941f771710c7f002ea99f98a18cb3b0d8c7fa95231b647fb46b439ac5e58d469606c9ef15726800a238f0ef8feb41befc844badfc13c8737a7e6fac8ce6f73005fc4afb11f29e00b6b3f4e14726e000d57c6f90e8397b1857a35d52f7f6882da9212adffba30400ab611f01e8a55d80f700b59fc518f02751673a270290cf4418770e1ebc0620003cffb14372ebbfddfe0efbf474a6313c624b02dbac81dc78ed8329f4184b44007a77b46c47dfbeeec62efe771cee510f4b4d643437c50d4f0df783a5bbb0910077cbefa9e01081a34c2236870903b0e51abcdc436e305053bd2fe9984d8e9600d3ab17af7c1208d4360f7555f2ee4c4104719095c0f0693585c6e2ea3215ca007260310fc5984da7c8f1222f19e9c5de6b69789de49c2bbe2fe665b58399d7006beb7654d2232bd2f0508ebeccf13fa68523428ae8ae96849b75c054b39b7400705989903b045bc8896eda0bfde0b030ca66c686cd585e8a529a3799f990a7004a9f801aa546f1ec14a9b2113353d758cbb4134c5d43470ca676716671655f001b658a4107673b2d1e0b5ad4fc56fbf8b7403574d05d9e275909473140ed9b00d03cd10ac5e3412443643ef9309471cd7f83f71235d0424799ff4235408ae800faf36bab64f36ff7305c54abe5e4a5d6c567d62e95572ecedcf36e30d481f500b9591c5042bc486659eed5f735b95910abe23844d07732dcd4de32b5d66c2200e4ee93d6b029c6602d4e0d8af0465061c21b720d92c8223061078d0c6181e3001dde01d11b1e92d1092c41085fbf4ff6e90e7539b1db1e06db5557fbfdff8d0051b10f4251e78eddb93dcab18dfd1a24e7716773c86f9deb2194bb5a636fa500844d6557443fe38940315ddc1ffa7dd04f3dc86c35ff9ee1e3f6e0b2dc04c7004446e5d1ce0a141886708a382904242486651f33f3cb3e62112120af77fe8e00a5eb4e5cafd61205afeb12a927e8bba447bfa5bb9f9436dbb6281c0a123b7700db913dfc5d633488019b8903f063401295038d54d54317b28d90fa0f943a5400ac0c571242832cec6d9f9a4015f8e79437d621132098b0da832a06026c54490065be568b132e195c9a59811ad2cb1a52b0af87c3b84787bad801957ff1937500bf8c55a62d74d81f1cf76af322fe0cd2f86f7e22d2923350e3bf7e7863d9ac0058fc791bd1bd7450161765b3c718e8beb80d38ad9805791e979e0b7f12619f006a97d70f9f54b09c8ad6fee827aa3287fd3a57d2eca0430366db497657beed00f4886436f3b9ca85ca59ba40d35d2ab775c6cd70523a75137c9901ca9df337007125b04ea8d624cbbadbf569521be8c0165cb0d0c26e25196a8c966e762ef8002555aa9011f230a2b475187a45477bfd7c8aaa0ac39cb79ce189425f2a2bd90070c579fe5a4f1c5cb8860b97259a780ed561e2c4226e09cc7a740121ddf18b006d7c5957e3126e551dde78535a271dd2d4a32c72ffe037b7217b816bbe030e00acc5a7fd5839dad78c1e5031bd1391187ca9aa020ec4fc42063e198202e62300afdd6a36e5fd60bf3da3a2e00ca5405a4e97871822602db2677cbb60cbc8ab009293a187fa86a48181352489d773a308cf3697354131d3b60ff318409bc3fe007bc3501a1890e87a110540528386f496a0d94ac728df74653c2c0b14ce05440058189c7bab604a620ef77c7abab742b869aefc0cc61f18e67ef7d2a8e98272008f500236736d54f988054d0a5bdacb5cec7f78601f783c151931d48eac5c2b00e0c54d903eaf3f5e70e538fbcd5f2639800fb6affb5f1807f4132a3cda10a100f9b9a0b74684a5883e0ddd303a6885a900ccc23b41d1e50672083147d4741e0032f87fc45d58ecb29a6c2133d80218d018d01a8b8c84591b4a187b8a41387200bb6abb5083feda70ccadbf18cd485a6af3cf0d751fadb426336ca2a2051bc700d13dee71ea8c7f852bfb5483585d9dd294ac4ab98329efe9e47e04e494564d006b36ca25dd087ccc522a76d9b777c03fb8d36b16843cb53d066db33287cbc9004ffa2d9534fc137ebaab5e119dec2a49faa3632ce6d3723e1e49b7f4f0d3860070d55556cd6132435253b827aef6d0e72fe50e9aaccdab1ae562bd11fd91a600f67346efd3262f6f3cbe925ea84a474affb4e38902c2ab1fd5fbfd1eba4e010082d6bb08c645a782e6b48a4344b820a45d81e526c2fdd78a6ee1900eb2014e00a9a45fa46495f4d1248b916df48f70bda92f5ddfd5ff3da89b81c7c8f07b6900db0dc6ee504d70b7de56a4350f997cae494afaf57511f3548d36752beab9890060fd9e2bbc012986d6aef749e242607dae4b94316525612a7ab9b599071915003ec4105e00dad91369fc2b3fa80c34346777664bcc59c6a4f2f97cb2dcb64b0091362116ea3b8b48c12b2ad268170a76e71842bb3458064bf6246438301f3f003b0ddce4d2c49fe90e0da03bd796a7d1d19b4531cc4f9db7601a2a95423677007fbc3aa964d4616f3142ce2e6e9374fbc58c3921ee07129addbf68bf1cf695000a6330e88148374df3b07e4702e829f7ab1d87d735b3cabb3750e692c0a0ca006080b13df801c286cf6f2a684d0b48b761d69d5e21a07e0831213d0800e61200f5fe8536cb6fd8303ff333ff4b5180ffb19f95b40f1dbbf6c31ef497877f0400a9cf2531127317047e6a9c952cb878dfa005871f224d2325f924b92ce1564600785957ee33662f6a3fc88c768838dc57d1678eb6dcb7aca021da280f680cf4003f4051bd9a60afdeadbcbb297c841a22ddca4c866054e90ee28caa0ae02711008c0a00a61d73f30a2168bca29764d4e8fe9e4fe5cd9a7d68012a793b064b01006a701714549c4a93c4e7d189ee739d80ad5594904f087a43762f0b066cc52c006c98e626158c52fe3723fe085b27e2416e41d831f01a74f37b6047c54a2cf500f2770017459d554cb836817d4ec1cbc022296256b0995ecf2a8d7bde5fa9120044c637565535d844bf051787973d08f7022384ecac55343bf246185f603afe00685fadc30639d7b182ddd8148c0736b490d0ec401f8ca8b0a312d64ae1c32000b3b60eb4ced4c431286a9c5b12399fab8377b776498bc9d868144359553d05007e1fd6817e2fe7ea0a3a74fb53144131ec3b222a4461801a17f1b3ce1687840026124adc8440e83883facdef6ad29e407c266602db36c54391c3e3cca1348500e514d2859d6aadd5a69a4f20f3b0139e20b78f3ec80b7e9a725cf952a8513f0099271aabdbdf7fce9a4a78460aee57e8fb88fd4d4ec6e3e24c899aa63d8fcd007003402c6a1dc66a134730335d2f873bd03dbb8448190dd2763c22b33544de00cd09e96b4783d37cfa15bbccaf4e60059f77424f5f414bcd78d2f88270f850003f38afccd74bb12f3b44c666755ee217c1391e17760a54bb461fded5fdb31500c6fd8df0b5c4e6b4230e006ebb6ffa9f4e539c610f2269ed93043014ce6c3a000f75b85504dfa711e2b9604b77e67e6180246ef848ba684194e88bf118e5e900d1ed3951beef7b8ba44339b43650a82543705c00c1274838ef1c5e2d57e9fb0009e9406f8161cf6cb5908815dd4044dad871dd16e74cc846cb46294d3a5d6a000aa0915a25554755a4496fc82bb7575551870c40bf791a3462f57ac00911fd00dc129b7202977ab2943d18b734819a4662e73a3e0553c4d6b0778c92c3d53700470f101981290cae511f9d5ac933e7332f77d863f1e8e71e816e77f13e139800a93f6f034cbf1561cb8407296ec18d08a990b5b417a8ce29c14382ff6a670700c1c19f3bd73fa4bb6ff7d59c33fd0d65f2a38c3387321f9722410869ebeb7500419b9600235aa3134b56b12b35465a8a06e7b3d65688245ae843511336a3c8006dd4129bf4cf7b9ba7db1c8db0f3e30c49caba2647b7a0bbde5d25341c7e24009598f7828ffea13bd61d9c70bda8326840f54f0a8af4a4324d645774899caa006b7f1deda86885860722067b3345422f19f5b14532f434d706b8206b14b59b008803b6bc75bc7535cc11ffa18d25302a4289b1ca6d2b8df2419d0eaca3854d0099cc0ee0b97eadfda733dac3f74b985de651e8d4a77de5a8fd40291d997ed300c45bb1678883083b841167054be6d7ab27287c09df428621529bb57a9999730023dc259df72e55b4ff39e54376c589f91666409ba215e894ae1d50e480c3810000261855153d1ac83f2c8e951bc7722e0173c18695daa2b7946559ff44f686001c57c6e2ba7f3e194898e98b370ab55b253a775037dcb746efd638480aafe700ecf6e06f24026719e77707f7e36ebe42ed17be0afff2766f7f95be79d6ed680029057048be0005a8e46baa95f61f59d29379d7f5966b3f897115ff21be651b0065750277430c0968d4ae1beb8ddcb6ad63474b03897aee08c41314ae3e9f7e006f8922959464fc83e239183f7231f975b77ff7be4afd0ba6ec6eb91e56976400154b6f97e95897c930a9ce2fddbaac77c12ef4f623239e8aac4cda8bf9378000eadc5ecd0b8cf193571ac0aa789cb7ab0eb59049e6771f5b8f9b87efa4eacc002f449a41fe94647333b30a02b5320a3b4fc3ba05be18e701caed485d202d3700158e6ed5dafad276b1219e3e712bfc7de2ab1b5c91443081cef2cceff6c5eb0057096dfbe5437bbdcaea05ab6f7018c2e1a88faf13ea4e723d9d753d328858003eef5755f7dfe409627c8067df30775ba26de2b53e0f984f4f0be482b2794e009dd1fdab4bc2d034eb81827ff1bbe7b00bfc642aed11c3177edba01f0bd3d900ff3ffae4b4987f376b080d4271d3b831f44745134ffa8092e716cc5ef6face00e49b5bd5736c1d5430b186f9a2fc04590f8183aaa15680254843ca63d91cee00edba40fff4c4f226f77726f95f4427a5b3b7dfd5d1b8db39bbd183484a0498003af91d6ef2ea6bf3e6e2d9a74789cdb70bb30de35265506d62329a82117f1400e7811236cc9a4d7edfc1b38583e39c67aa50a645711209b1fc81c40095d3ce00bf1d79c026934f37a0fe47189468a1ede96302353120c6eb267ada189f6e26003b93dd370a2628e9761c0b215ec90359bb3479f1194bd37cfbcd3a77ddfe9c00e2465c6185bb5a069846b6c8f384e1896cacae10fe94f471c8b5fb559320ee007cbc6121429ad452ba0072077d029bf9da0315083e012740ead460531398ac0082c418ef26fda21e34b53e774537c9f414925e0156026e2e6724de4078cb9e00c51958606f8da99a295f73552961042bc230729f04872726c9ece810b42836001433df125fee8aa5768417bd3551105e450aa579facf0f634ee3b0a5b17ec10053320f69785af588d2346bd549f2195d2a4e0c6475e8f68bd88c2ac10aec8a00130245a91dbeb879928b86e195b704f90987e329cb12f0f7a588d56e9c52fb00d5332a97b0ac1e75fe0ae7774a9ea785dec3f35ef96274d0c66a23773569330046dc571524b280f30d3d1296c3f0d90b80f4cea8f4e0df672d028026164d5b002035a91d6047d24b6be03fcf7fb130d9a722dd4f62479429e197a74d7bff54001f9671e044384bd444daf2775a08ce318b6eb99381f610632da2ae19aff5b3009edb41f2300441e5d1ae39992f2ba747d40668879314f8edc1332a876ead8400e0b98508355a4234987575507b272540139d54235c08d0d49e75be63611e3a004df272f960c37782230f9cfa89dcaa9d7016f545bb382f5135c80264c6cf5c00a1c64d56abb19306f33ef22a6d6ca55b919ed9084cd4cecb01c426061c11eb007282a3514f6c700da6c8e247610e1c95816b457de09fb102487f836d9e53d000455eeffdfacb10c0707896248d73f8332cc2a2cf1a2b4541eb9c474b8b03dc00855c074354349f7d027daf9d537cf3a9cf6c1fc9a7f69b7781d671f8ab3754004061d3e3adfb7660de7d18bfcf1f32b30b5b020c79545b4b57cfc92a3d0c3e003b3981470eade70bb2e97c961718917f7d8cd78c2c77ac42a42cf220738a7800c009da89d59218f467ba07eb9cf5e71c4b922a124cec14f4e38638c9168fde00127e221d8ca500cab7e4d9284e43632c95b6a204b12c7a8e1d62e2a2bcb3db00a23e4235e2d16b7489ee4b5c7c2fdb2a85d69796a911ed26cf1e0ae80c75be00261ef445d434367424aabf6e7dc8db3a8473ed4955023caba97b29c9c3a2f900a3214a6088632f746b653af37db96d9e1a966d4ffc9afac0a046293482f50b007998434cd0ac32858855366607677b1f3fae24ee595eb6f6064cd5946c66c400a4be54a2f24b837e75f72369f1f0fcc664f3f7421acec889a413e3a3170b1d00cf278b610bb70bc104aafac1f2959717a902ba02e92f4dea669b2db6aae7be008d088412f6b527b40754501bc8e49ed26de9da156899f5dbcbd5745867eb4a008d13faab90312791a4047480491e74230997e632ecde6f1db51b79b47ad31a00d054c90a03b226ab6c74d4d36fcd3a77e0e8244343ffab08a0a866d477355400895819d7279112feb132ae8e2f8f934d34d0d39fdfe908991604b08602de1100e7238eec3510db5f8e9e850c4cbb2ad61851c7ea675e6b4354ef3c4edd09b400200020bbacb4793421deac326aceb7b0c711dbb3a1e400b4eca15991bd9a34000c5600513a2c1bddb9ef73b6618397406ae93471b511d253477cf61058be0300a1e11b255f75e00da2b3999c1aa214d9b4cd91e5621c5157861e6d6725dfb1004affa647c9e61812501326f66c002907061521a67db1173eb6a2cf62381ecc00ce8b40afcf7b58e41734070c1f4c8b849b49577d52b857138f248af0db44c60078ebdd7544a8c230efab88b4632252667a31255c9e8e03d4fe36f669142685004d4c43a0565a6b699e1f7cf485337dd10cff6d230981bc759245f51b944875003dc5edd55d706e4ea7b956dc960cd78968bcb7cda8723513e5f037f0b6919b0011dd23ea57726b2018947c6ff0bca7300f29579d1bfee10b86dad740b634fd0047f7504f8ebef43085f5514c799f26e959f295f698c48766405fe4a993c1ed002d3fe0b4bdf2e4c89a034903ee7f390b89e0a045f9b6de33fdc4d4794989cd009d7a3e94d0efaceed9218f0eeef87b42d63da8db31f48e67b19cbe8452a3b7005eaac77f965167a3c445cedff0feba7b20a6b6cfc578fbb0d4667f08e7813e00d02d1155d862b4971a3dc7db6f0c5c877ad6699ecf2c7510fdf03e686e6cc00099ed537ac51704d4a7e150e764e259e2ef7ab8ea5d0018e86af5d2211bc491008af9a0103164c0869df157c9bdce67a364852352abd6cd64d5c886b0de14400007c746848225ae6232ca89b21ed41d850210802f398a0bdd32fdda4b3c2c5300d17c4026bb86b03b1e1835e4faf78d70e63c9d18027c1cc225ff837aae088100d6e6ea9b4e7a8fe1523c7fc4a9ce7105726a59a885c5fedb3ceb5692d065fa0015371ea441c01a5278739812359f22e4dbd1ccf5349a6758acb9552d8f2a3b007c3ecb2d615bbe75e5a3f9bffe60da133a6527cd5d04411c0206aef84f0ca80001ddf58d99ef75406767bba5a4542835e8039320d01928d8d21516b90715ae0075affe226bb59e2a6e7f780a0947b4807c76722e9cffde6e35b0c026c039550040c75302b9bf5030e29a91b4fdd84c454599e7bb9ff8555198d5bae507247a009a05a3c370e3217fa7126d073e8947601c83fc78768e98c1b8b02cea6ac61200e275730ac955b3e5f134f42404d30ead3cab69988ea942c1a99a85c47e21090013a9ce37a914ba23782d0853faef6f529e2a6148c5b8a8ea47713822a3bd1900345afa32a9f063c4ba996e96ab78ffb59f8ee2b9872cde16e5b54a3259cd4d005d2d4fe8c96cd4d7cdab299f8ed318b8a3c0adfea5351291295a48dcbd7816003e9d337e128bdb8848c265d4a24d2f2af8e5ebef58487bb2b48eec4dba32b700044157a43365e14415ec41e575091af9059d45b225f5f1e65cdd6c6bd95dfe00d8e87e8d09c41854029f7483b47d167bdf8a45e67243e43ae251a2377b6b86003f42943ba6e0a6c1053908c7ec8ee6d18448a1ff74b353aec8e5a2e1f0788200a4de52e4d14438a4b5676899d2f0b16a4829b85f95c503d522052b13d2529500739481bde9bb0f199e6634c7bd81dc8923039d7ae43233a857c888adf5084100d0ab29d1c26a20494bd835d9ea8580f3aea510a0865520cc03bc223ef46e5a00b84b94d75e2833aed977c5eb2469e3b8d00520f52ed339a5b32fb318de301c00f94ae7cbbbc4243770e3b0d8dba49602801a4b4fd681d78d49b77bfb987f9500f584df73f3d3c997b4c8c06cdb82e8837625bebf5b112ce2024426158c085500dd36a336fe79c10a83c90661068a0634ea55995eba249eb73554f768794dc7004a82e0e49ee72c8c42093b3cae8cecefeeeb4dadfb486d13720ba62b0e6a90009c6449b0f56bc54e690d49ec6ac59440819a08fc6f85caa0d41c1d50d5dbab000e16a07c1ee3dbec97116d3ea398e1719ba688be8e3f5f6160e1bb1c60a5cb00524c4fe4d7daeebdae17203b99c167551e720a77ddefb6a7c7d32df0c17f9d0030baad203d03de456540aa8cb59b0d2762ce92306e5a78178fca1d81892c240040c0250ffa4f22768dc17d34981373b677b4d0ec3a96afe54f82491885a6d1006afb14ab979210213205a17109321ce6ef98d63b03670ed4bf426e887e6c3400dbe2243666537aff8513ad7f6079567152e84473bb4c87dd4e860c1c1be38d00723ca4dc7ef1e12f95cf639c910ef6422fe70354809fee37db7210b0c972d9001fb73dcf7bb0b5fd231273fef6507627dfb50a0a983f626d03824add7bfdcd00d8915f1655dfa8c272b2234942fe83dee42218f6dc10d548125400445ff0b400d1e9c187ef7d956f4a58bb94589a8a49bb1b5d276ac34b8359bebe356f340c009db0e3352f7f9d1448b07013f5c251d3342aec064894d5ed3a9fdacef6edb4009fa3a188fa0aa359b006ccd29951ee240755a5f981e31db9d12f55c1ae1fe100ce7a113625424abf132983ee5dd36fe6ad074131c7cec5ea29e0cc1755eb00002b1e6d2bbc8a25cab19c85da20365ce74716f43865d3196fce911a49f1e25100028b7de13fc550a3cca9c095bece3d950145cc276ff93e45e1e18606f0a76100bc48f658578a2c11550a3e9c925774f3545a561c700cb17041cc6159f2b9f700f15d1a4ca0ef6efc9d9193228362aec46bd82bdb6388e9738fcdbbff67dd31004fbaf0869cb073eac20791de1d4218901892db3af73dcbe2bfcf4b50ad0f4000f282024d9ac89f88649ed6f6aa2d877091d3440490d789f9fe8c086aba65c0008a717433ef16166c6aa52c67e82bca52cee3472113d7e850fa70812112dc2800d9ece246ac1e68dbad058a838892f4558cd72076ba246975146792510eae1500f489b28c2e77fb80e06c7ec1a9ae740b6ee890b99f583f2a65b5cd9a5c168000f63aafac1f4967a0a26bee4642e8c8f60cead70ccf1e5af086783dc7b597a500adae47f5f7c22dd8e797bb5fedb418b0d35c6533f32edbd959f644c62801cb0074c85bb3da42389577c69ee0f0ad8ee8849cf76d8bfe3d7f7317b48e59eef3004eec2db00ba7073bc06bde933baac44aaeab8c00e148623b9c68154bcac6f000a5285dc99351557ed582ccf450ce456659d06f8602a0cf0da7cc3a8b5910a6005a388451792957da4cef3e486ebaf5dc63b43b15e65ef3607a2ef680e3dc2300b63bd2b0302608da835a696e013a4996bf4917d3749a6909252b0cdaca7596003bee7e5e5121395be7463706f51a45d57d7d579a423ceb1e28360d46b1bf310081aafde00f9823b2159fbf3870ff1c6fdbfec25e18e93dd5e51a15c12c862800ab2ecccd017d3fcbaf01c322ed6c83ec17a713528ada5d03065b8906be100500a69e23b55f70caf87c61d01a7443453c6c0f30378ffc907603a8eb608fd24400f5d305685a19da9a3980741dff89714407143cdc4bc25e1992e05ba80ccfc900fde77cacfcf882eef0eaeea51d0bcf27bbf28fc4bdbe42da0fcfec827a85f500a09a0c7072475aabb18a44d71c9de3084c1b05be878073854f2114f544e0d500f150b3a2c91a96bcc1c10593137869bfedf6643fcbf87e711d7871a392d189005a0e93590cd5fe7cb489f45a469fe9dc77d6a8a3973bf08b5d2a04d95649f9008cad0188b88288577443581bdb75e04a2ac6277e73b80fc1c12b335694803e00142aae70d1e09f78a68d5f47582e8753db30895992c2101332689fb8aacd4a0069b6607ada25a7edad09e69192857cde8d0af956a86afe04a673f305f81c6000c0164569b69f7086ce15ec66a2c96f7c0b09f15a3ac8eca1b725fae33a9bd600da1dea35c3ddf01c201e8d09e03b5d52ec5c95c02ed92c69c6a3019f5630c7004b9d68034cf0172fccb396a1c805bf280a4b3b7954d979ffc12e3cbebd846c009ca254566c5fede916f89cc334b0b62c1c2d927c6d9c6eb8d223fc911bad37004c88bd04e32f82b226e848998147cb3e508a0cc308b95ac2e957de164ecc4000e607fe3e0b97df98b12003e80ca374454aaf6d42d55ca8ddb423ff406d011e006cc9ff1686d97b38f24a9149b96d8336710f4dc050d88441351f4bc5857a7a0077d08b37e7bdf2eb8edc585cf285c3adce77286a916fa23a1cf05a14398ee4005639c49a2fbf40468962e2972948fc469911c66c173820a409ae8f937868900023b08d845fb3de8aa9705a2481ccec0850c4e5d1200f732f52844e600c955d00b983d6b93199f9ad78c0755f5ba2a58ad0955747f3efb2dea819503214ac1a00599f5b0bedc005a49f9822053c0cbeaa092f7a613fe977a38ae439bb15d73000b3a6aba0b53997688181683d3fe86f1d4f86c730370d029fc1ff3d3ab475b200e7c5daa6e4d042d93de0983e2d701c21f8ca4cc9890d05881b2553b4617aa80087472003bd5b253a8b106f8e2ac411d0e6c52009b101d5dc96f17e08e6569b00e5865af3cfc331eeec404a908647c6960cb55d91e9e5ad43b3cc6f0868ecd700e141c4a76969513af32db84e25510b0307d784217fd3d04e42d3fde4eb0beb0056c830a4671d5c6b383bd9033b3931fabea2969a7992ee54acecae72a5562f00f9f0bf51c61f60af6de51e47dc89e27b7d5f263f3580321c02bebdfcd7860900152a83b625119564602d20e5c7eacf04dd540b7c40139f7d286c28c7449e9c00765d4ac80a9a08380b9fc2d2b9880907a5c5e2a9896224957894726d35b904001e48aa68fdc32a2ec6a39148b979b256187a8657c8cefc13dca1b5240cf5c700eb57380645440709cd76a6272a9174d6fbef3581332a2d9a8398de1ef60eeb0028b716819fbf7b02072f27de27c43aea55f05b595a3b696af5edcca776049600e2af2874acb95052a5c24d76fac984991f7db98dc5abe2bc5885d3917b54a2002af75adc009c4bed7433fc460684f58871bb599acd8bde5d0ee0894df8249e00c7041c671a6b139521e944b6820211881f84e0516d5de7d79f8a61a3c480c70089eb0a810415c21d644866f4b330e1c4f94952fc263148fc5556cf46d9e1a20030b309d6799da58090740513f921976878a08b1502a994418f6ab075be974800c7477458812e994f9ca2316ca76f74a4b18a56e7b3df8c2872bc6a85b4cd4900647b87a325a94700807720531b5b8ea0f30c2b9b10048d08d21e8db5c837b00082848e8ebf8a364fb50c924717ecc5269777b53c4e0f4515d90f1d9538ad64009e189f07cab37c9c0ca9f9a44394a706f9fde09d24e392e3f0ec822383276800f58868116f0da8aa9891af141a9bc01f82b748401dd5f9e4965bcfe94424ad003a80bf5df46d3b7eb0cced1e11f881ac22956a4f24641b3343518904d50c8000a8df65b2459c986cebcf23587cf8b119ebf8d6e5d5de041c79e2bc01b4645800da25de1a999f5973eef0c35b19efc0d8d97eb990c14a2127b69305f5c0074300776b8a8a0c186de55c6c39040a482df4b9b8a961696544f283ce79215fd48600d374c91d18d90879603e9c5b1718a80c63046078009243ea2501921cc91209006d1f10416276efaa0bb6378a03ea0461f18f9e6dfcf13e1c948b200cd99c690088fbd6b678edf4b16f954b10bbdfdb1584d655e3409bf49bf02688b52d67390062459da5d49ba16ecfd1279cc2e62ac3e17b3c8ae6f9ea56748a1a98cdbf550036e54b909b22bd5379a5c535cf0d9d044b9eff794747ae911b964e4022421c0028d9212e0f20ba8b537db7c378307cca31403bbd8b5e6f9e7bf5019396fa2c001e13755a65ea73e809ab71976d1cd4a7f71f98f80738d545346d4e8392570b006deae09f2131cefa9f0266b8990eff47da8e0326714d69c6b3954a3f3d0a04007547c456aa1623ca2d41fe5bc34378c58fbdc69c6175cf3f7f9666369d9d47009bd6725904e019c4a6571cf5d80d139a0c2ad6a5bae60ddefb6e7dcf20259600ebd405332db962563b4b9a127385b0e6fdf0c242f881ad9ec64835843fa86d00d2b6ab2eb2aad753bbbe89bcff7a0f501b19daeb682531b05fd1c918bb26f100fe896b1eeff9330394380ca39e65f455c4f8a938432c7d93e3bab7420a7ea70072e72afecec23df17e0dd3cf67e49bd7d79ca23a20b5896dc70c47a18380c8002078e50bd6a35bfa34b51209d46c5a4d9e3de761350443cd41e952ab0e2181008d7bee3721e2db3311c6fa19ede89704d94acad2fc91bce498978f00fb894900b2b4a800f55b6a328ef0135c3c58d3df562f589a019fc6de2a538ec966e156003d527bd51a1802bdafbe538cbd6a80a5d30ba04f7298b64c618a777315e8c10072e59370ba60f5752061e2856a94ea921b06d9fea029c1636f9522f9362eb400cbf46dfdc0a125afee14f0adbc597ba0622d17e7dc2d6ae87eb3d4b2533aae0079473bb726818a56951dd34e6ec8c95a5592f5faa6fe3b6c26c8f0feb8b4d900e59bc85d2675e21af860b103f1619008eee8fe7491bce6157e7b50bfc33dec00e8d3f27e0595863569919669fb3722b5aaa9f0ecc9ec71796c2013c22e49f30089ec440282ea0568f5f3493280db2c30fced0c3c8556d07ee58dc7cf097a050098da822578940102114739e56fe4919d95a1c9cd11a43c2b08e1f457adf825001dc43b5d9132aad7677efb444a9343737eeb87fc24f0d9b5c9324d1d81ad2800a2847c3387eaef5c78800fa518dc743a80bace9b776b3559e8b53fd56fcef700ae3535dd172b10c47449f8b55c5c93a97595f464bf977f1fdf1b0a72404e0e00ed2a755dbc057d21bbe6ec60a363f753904094cdf55ab77c1a525bcae6fd8600e963a149ecd95bc8a9b4078b076c1e57532163ce970b3ae630ea3030facba200e2bd2918df31f932adc33d8e0870152d978be331d231276373cf281fb78026005f26d6f77c78954d70f6da1f7e3a4da81acde19038558c13b5ff48a85e2f0d00a467bf59c4140b6eaf1567ff474bb7414ff673a620addf056d60dd41b6c60300aafd3f9f541561534d3ee456276b692e1b73d70a8b2f7b8737ea3adf22747f0065b7d357b4ac1eddfb337916dc67a6343bc8034dcdc68bad68a6f1202b63380000156d8fb737dfd83829474e67b507f5698dbda2d1555847aa9201cc2478d0008a8560f2b9d9d2989f945b86230d68dac29c3eb1fb7563fb6bd0c07895a4ea00c9e0640552a53bcbd2e56ee692e92ae7dd5849509280836a050709ffd1a370001fcfa9efdadf8ee8f3604173145654b2d6f10d8c1a04c551bb971715d6f9d80099db01c9776a16f9457328828156b2370636da01ab23cad52626583d20388d00f90a213675169e97acfae8da714c1c5dc0bbf1ccd2743a30ccb0ef7864f4990058c252ab67156c28d56c9c6d6b9a4f8f9064f6c77a4467c93b72ed144711d0005125599fd0d1e68f5cbaa49fd11ee3b2aaa9fc55635dc64b1e7864d2d3acba00fa94148ae608dfc0d0d134c3a5acdbf2912a58b71bcf9c36024fbbf2b283fb0094a2e3c3766b9dea7ec27adcecf20722173afe33d2a9fa4769f79f34edc0fc0035e68bba6b2ad1218fd7b187ad509a10f2f6070497e5a1f59d7476772b2dd400528f7f4e8a02908fa02c287e41708bd04aa6c241685ec9b2595ea95f74abca0095b827a448d5f22ec33b0be796487b789fdd7a859a1dfc90142fa0b47435d5006a2d22d475983c43e10a3debdff46a545407969894fb19aa11500b8cf5f9d600f856c634f66b6ef79bb51bbfcae3705a622be8c4710295d792086bf2816cb200425ef640ccba8c78be018f3fec6694ca5a67a9949a63400a5ebb7712aa382100de027314a77bdbcd50009056e91736be2b511ab0cc170ab59d7e8c71fe8cd2007290023011fc15946daa1dc9a1a062f1be77bcaecb26643aeede5f296b5c9d0040bb8874bf6eb685ce21abf61c4e14b1ee8850b37b41c496d570184be4c462000eed13a3f9cc166a54d6855998329ca9f171655541a3735145f622cff6b57300f8e66bb72faf1b2235579f9583f209e0cc8e0b64bd70e0b64bd539dcacf3ae002a993613bec5044e9d7a2d364a8cec10f4914932c522b7255307e42c62aa6900312f1043549bb85d1747fbd11661378c9a831c0901948eb5a46669aea4500c00ba409b738714dd9db2663c63efa1ce73e4258c8822cd69f4b4d6b701123fdb00f12061b48574a69f3251ab864fc0dbb88a82de8c3f2a3581b8cda709d1e4af0064170d7fa30f43833db08500f713944d8dcd5f1962eb5f9f1a7168d397540c00397a68346377998952298792d4da3d0a2006f7d5520feb49ba43418c59cbb5008ecee5be27b70c531d36e78fedd7048f944b639efad67f8b0a70989450014d00140e1dbf6ff7e39786555c4f8dced432c0aed2f501f5095cd6e1b54daf1632008a08a64c5007c647ee6e15c5df58986cafdad3d4cf52a26e4510c40fd3dc3a00fb20882abc6f09bb164fdec30c1ad0381c3627da238a2190d2043f9eee328b00c2db084ba595aacc682290ea13d9f7670360ca1be3a132eafde92b1281489800310ba9979dab701ccf735353e3100b5779b6b512391bd9eee0ed49be60f12100fb2725a47852e47ed26485a733fffb9d03a0e740a23c36f22c57a687b8cc470067b4a80b1c9c44099863f7292ae4188f7f824bed026d51335254a1fd9b932c009fb3347c8d321e7b19de4a279430c43a1a50b15f2786139df6c8b8f31c42e5006a7e0e76abf75c2bf9dab0298f28d9f6a3824e3e115d56ed0b9d661870f55c00b74d287948c5c47fab01a87aeb684e267f273885af15043ac9c82ca69255b6008655d2f097252c96b83b8725874a1f8910fd411b368dfc5d2ab8f934cc542b0009aaee8691a7439a9758677eb9869fcb8678bc03a9610e3a761bba31e85d3200f56557c9fd94d32b64fa508271537500988922194e3632cf118b1e2b43c99b00674f4294299f526a1e9d1f410ccd0ef63616a886816a6e2cc02c6eb173050c00cd36d5d278b0e710c39183a22dfeed25ee3f2e742c68e610ef67fe4316496f00ae05bd8e559ae825105649580c0882582399a97305a88b60291d15d187e24400ea2b4539faa72e6a9670871115fa04aa704ddeebf7cdaddc445a5d8e9e172c00423088e6393c996553342b558b79b57e729341dcc306373806b700cfebac6c008d704977e4f436b7916eb8dcb04499b4af4f1b2febeb4af45c688454c0477f00b400479eb9e06f79140ff61da860f3d4a749831acb7ed751571fccae6e51990038621e6b2d94799b0508ac433ecd0ffac6d5166ac6348b87f97a2193dff9fe00f9208bb0e2cae15593e3670bd52b0d9f90ce8674516894f33045b9d06ca1a60030f4439399b0cb992303ed31afd90b882cb4638f6acf4baa7ec491406d0747009f3f7ba24bdd4948ab3e600e114451c4d5e370b3147811a58f34a74a4cc46700a5771f7c71848478f8e75ca34517268d2c229ef39263ced5001ef4f8ce455f00a5b9a9559667b0de52621b161aaac0135f6e8e2502fe9ca25c3336b04bdeb100427572de796edfbb183b0d0007134080644f5507ee56f6ea6adcfea753c08d0030f82b5ddaae6fee630bb652810fa3ab12dc5f4ba2176c44f69ff2abb65e5a006d7ed3a8d6a15c2077a811a1e0ef6f63e87d2b60eed58171c4bd89067a004f00b5848a1cfc07b79387082647f5101d11a4f20fbac814e4d0fc1a0f69649f6b008962a729e302d48a64f4c37dfa463d7724d82d13fd3638d2cf95c50b9fc87e0001877918c5e41be2a1b1628bf6929550d49bb62e079faf3a4a7243a5ae592400a1ff4bbdf130c5fa91d183d2f23106aab4ff5e2555caf755f99caf84fed70f006ab58db2be3f77ff5b71c5787ad0f0fc0eae1bc4a89f3ae62ccd6332b6ab0700b553e96d5a1b72d523d36636398b1ee87fa7919d3b0896db64614aebf195180004f9770b61a4faf2a86df8d8009b507b1b2ab9a6d8f8648d4b67073d1f065600b74e91513d61711df68d82ec4fb5b86ff25e31b77957b14139cb9eab31fd7d0098639941daab3a8e3809440849158e4e78b5a91c833bab0256f4426cb11a5500a266a17eacb0b7dc050dd06e45591ca8195e8bbd35a83e21b90c943bd0997b00fae84d6fb3df93c4043be7e7294c3fc6aa6975dc08ff9aa005f0cfb60b97a200d4887ab8079d3db4ff647d688f3930ae858e65b11e54eb0d8c5d0f4947122100c8efb22950fb671a8999ca4f1c53a8a7d5adb5b5bf961a0182cc871eeb7de200f72f773fd7f186f99055c18192a162c7749bb60aeae595147e0e562949e3b20046ac74aee4fdf0a3463e84c99aeabeb2ce4d8f3ba1ec1aa6f03c6d2242640100dbc73016695e980825ae1616f2f2de83a683f2d04d3a22ba14bb2fe0780683006ee4a6ea7c2f4b79a4b4434a0e9e8760ba75a5a02f2b36b67c57596a9abb190061b2bb4c440d049078c5fa28c182abee42b7d4ea04cf4fe50a4f4e7e6087d50067b0c08a4fb59618a95fae1ceb496db4edd651dba3b15dd2bc8c8ed962ab1500d5f721ca19010cdecf1ba0dc53ebd4ba2685494d0d6a1917031c8177591b6400ba7774bb465b133e7312e711e6b932650c3504d106896de1c64a2b59781f9d006d8115f0c96b7c8e68df053d620ad71bfc8cd7e6fddeae0250f6ced9c0294800a1a8ea55cf991cda5afdd4c109169c7b9d9d90397303b036c8538b86cf3f7900ba70f67c5fdfd5ac436a7c2dc14909c366f940c208652ff2c583b2b0ad79aa007195404f1e4f77213a96e5e46ea75541527233bc6f7fc998eeca5fe5d0b165006163eb776cb205635538cbc09593b921233e50cbc8bec81b117078540eca34004f3510df20536c19fb59d54f3970997fa7e303af0130234ce3604ac9e8fda5002e3dec038083731f3a88dbf8a146106719d166d6b836ae3a03050b1c6be6b500871d53e6560175c72c76018b31bdff1198539b3c79908a283a519298718f880042e0c04e2969704b33249d50f1d3c6f4fc26c93de32115847398b836d62e4f001f3ce620c1ed4c1ceb33c5a15818286b2ba73aa79841051e0bdd6b96bc0c550017bd20e36287209fed5516e4fba09cf65ea8c089184deb61ea4727304d8bba00c5e91839f84a526cd1775e1c266a5cb566a0c2b045b772f63c8a3e701870c0008558f92c0ea2c727845bebeaa3860d523f720f90faeaa7e38036e168c1186300e310eb5d2733e1119f8f6dfce9b3bde0e1b8df3c12547f1f91654eee3b858e003f537536d9f7d9f24f64f03bc9e540ca9f5cbb9baff75556ae92c59deaff9700c8dc91f0684301cf94f0f83c4b8295b37c13eb2cc64c16c0fcfd3b7c6cf8a10040744aa01e368053eb865b03ec44fc58b82bb87785223e12706ae991e9763600da1cc0e4fc72f3c6f5b0fdff49ab03dca042ac569624c204c0d9f413a0803e00c9a124cccf8a962fe32944c6cc20575179d5e6b831b2721d15bd4d2c1702d5001dd8e678c1f2ee237e21f3e865228def7b734ec4948ef3e64b8ba253b542ad0095a56af45da7a34664a80313ea23a00c41637fe13bdefdd5c585376088ab39003f063e3968ec031434600b5555f01485fa3f6cc19b5f941d3c636501b2cd3f0049ee9f81ebdd305cbdbd013046b20cf78e390a3a763fabaa2fd600a8316277005023a623b21a34c20c9f7f56ec750d081da000d84c1d3e34d4c328c460d1e7007ed619e12b273cc74399b42077572a24050fc709f26320c2a4c334ea12e13d00246a785419ba494d8673cee29c8555f1ddf9f3322317eecaab0f6a755c4a9900e24164eea6c4f04db10f10a1fa916ecb17adce028a9c53fdfe1ae6100b0b74008ca0f4dae75e0caf81c654340842087881f411848e0274be5c968e807a5b1d00684321360f513207e546afa6c715745a867271d9df8b2f373afeb6b4240227008bbdaec25f04a2c78b30a6ecfee82659a9b513d2b0feaa5cd08c02d30af7c300c08542500bda3f7e5dbc0455ed38f7c193fbc731457712e49457b7268ba7e30083f2a75eb17e98b2812b685f729729fa372b4b8dfbf368856d341863fb58c700c6238c75bfe0eba724197231056442d86aedfed57f21068d1ed09258441b5b009428005f75da8ebd26a507cd989970f4ec9ee674691f9113e089b875a0620e00c1d6b6af36e8765d577f749ed71528be2689f0d69c02f58dd2727c06da87550018ff799ae83f6037a15d81bf8131351c6fe2a041b1108e605a0db7bf1f1b1c007f086455d9f56e93c7fffbb2a46bc24eef8315755dea887a79172a702c6ba300cbcd72734f3ae18ca4257a4adf81d8ae95ebf707c415ffd75f76582af5f46400ff411d2091a64d4cf89a57f78ede1e4942abf27b65ccfcf59707aaf59f574d003ff205d324e75ac55a6d39ed1f6033eee04a745697532f0903759901619401005d7467d3a65c1d16eacf2701af324b2b9223befd73d6f8c259cf4e3fb75554000cb3a7a87d21349aa2793efeb18d717adee6c9f6c3910fce5b86ac932d3c1d00adf57e3c29204679d386045082e025b58585caf472105b3cafed3241abfab300614e5b7da77da0a40cbadd26f084ab3773b6eb383fdc05766f3606e4ed6f6a006be5b61e33c11be825eec691867df18f93de0e8eda937a930bd7b0c0d9bf18001ffbfdce490a59643b0c1c1e1592249242d22c285b524d1eed7c9fcff86610001fb35a149aac6945e9b7b1c43025b0e0591f27e0684f095b1644650a05b8490078c958b71a306ad3de9558de067cc939543be90546f80815accbf4da834074006c8a8a43769b0fe32b62a00273c65a43f7b5ee62f85e53526688dfcc20398c003beb7a601fe0f42d29a96f840186f8af0fae64948b45d793ee93c56366669d00059979eee01977be0fbc9f91b97df602d73d19be5fc2fdcc59febb5ecbcb150038245f850a4bef8d4b490abb6946ed7af15652b867ea531d905bb0a8952f8a0098fd71590e21c638b18cd09e0a9b232a037761cfd64c36db76f49ef6398e6f000fba00ecdea10007576645aa4fba87f3b77b09b5a4dbd4800c8f3fef5e90bd00f5e68489fead70fbae59a5a430cbd7c3b0abbdb86c77a9b4c494166d4932bc00a79aead746940dcf9f321821532c9233c1f169b9940980c6fc908aca306cc100a3c0549c1ed2f42b271f2fb894ea3fb57562a487b5413b8febe1efde4a775600b2186bbc3054786d58fb64696cfada9054d114bc94c1d0b439d262c4a5fc2f002b652a3310aca0d41062528687fe4c88c6e798a2e47a7be1d3d3738a31cce300d145f7042fab7b6673baf08f70fa22202d6cbcbe4607b7ce224442f6066a590048c8002e91896184c8054cd982178540c4a360c274a89392c5b7939d9933d600d0b03701a132c4424eb2227baf8d7ce0a0ca13cddbf9c27e4960a1f17babd700cc14280c9ebf8c4e649cb6e8f2b652942e8468ea25961f000044f7bf988cfd00b458eabdc8b6d15438647332d396de5c62ea8accaee1fca46e419a03f09f1c004f2be8b274f2a0be2a6467105d2a935498fdfd698becea63cc7b94fea42b8e00c852439f12e24fd9f0aa3168f04169e3a95d19ffc1904593eb59625ada68e800befe0fd28a753781afa6abaccc4ad36c13f05395acbcb6234e9ea4fec2bf7b00474b3b90de98926e42cb5de9e8e2d0ebfd4846625895cdc7dcd42cb3c85ffb00e00d834b018c0f8e67fd28f470584682df1b381e31e5ac4f146366905b8a9c00346064410e6cd3f9521763ab7f2710adb9caf53631225e6fc62a6b89a5684100e54d97db2cdf2182d5198d3dfa418d1f59ab5dbb35e531be8e1f8e42d3a13e00a155dbfc366d965e4be279246f3d5e10b3f8279b3e47ceb221a6d0d2957f5100e2561fe9f4fcb145e914271cb062c19021d07240b33d7865959460a1ab9aec009fb518e5069797a1b1a093fbfeea8aece20ccf7eb002c6fc597aba208f94f20058d782cc8b33d9ee5cb98f22c4fb30fad29277f7beec994941ced4c5f2db020073aba53046858f0d4859ca4830f8c7a0edf9518200ccf545e1ecd196352939007d47ddfa33002640435050c9138833b2d20907bd1fffc5884d25b33b0375b100922389b8ebdd8beae0bbb07312eac66d85f1685008ed63c2620da2e6dfe938002c66f06a29ad1abffef4669fbcfcbe32bd14849ee7145d4ddd053d36dc2fea0013427498e011d38f0e0a9667823933c2999eaffa3be71ff035da291da2e5170018f7865c462e2f8ff21a3352a54000c32dfbd234ce9218415c9543581fa1540038b04898fe3470f55d27df9bd83cf2d80868eb9935bc18b96f1215b46d7e3700146c771fead627598d2032be3ec98f34e3b4f5ef45305a041a6ef17afdadd3004d8988532fcfa228fcec966fe95b22ed948ec216b65160095e9808786a5fd6000e8ff349e1c42136d4506d9173d843258bdea44b577e1964510193203873710010adff53ac900d8c37a2828f9c3c6966e03ee16999f65ca7ee5c3d42871cf2005e3a1abfa315da5dc0e90773742daf41b5d5f217fd994d8545a6ab926554c50015e55e366b74c77cc0db7260def4b484ebc854841b65bfa4dc2e39e42988cf0080ee5d2aa21c6673ec03d97a61ccae49aea2c213bab7dcc6ad791e864901d600b676606c74a4b9db9a43e4d9e233b08134622459523ee1f1a3a535fa2db7a2008a356c77ff003bc60b9235341554d026936900e70a1f06c1bc16e578e6cd0d000114162f8b863a3c0a36af23f22d96bb58b494cc4d9f595a54f834d8984ff80036de40ad13e557b896e3ea4d4e00299fa09f8ffae365a51f08ac6ab7654474007f6400dc597c08e39e3a438e06ab4d3edf0ede4db79eb94187b2aa4b56f6840055332e860d32b488459757d4adcfb54325fbc77322b3bd78bd49ac5b2f07e300651a384266038f6619dc675720b089a7e850b67b7e6166e0740d47f98df32f00a3233a9eaf45f9a73557a61d98e70a6006bdfaa8de964a9d64d3aeb4e15872002f820b7068fc4322dab909a767932a037577da8bdbf399ebcfc14e947f3ad60062f47cabe9819f882ebd98f59a1d2a6ad588a77fe29b86627767f67fae1f2b00705949a833eb269d3749467ab16b62ca2d857b7b0df7037175a0c8914293da0056da8daabab34af43021f3a4f617522662192884d801657ce54c2ab4e7575c001d9d6479a5fb4f9c5eb5666b2ff4e70d8fe58a89c9b4dcb4643c0808c492b60010769209f61a4a485e7b578b29fdb00b2397c59ae66d2e785ade101d93843300af62d0dcf6b9e67eb82fee9422a801d74239a4a5a5f21a2c9faf17cf72d1fb00400df70c0e2c862fdc423b04a69067e29a37009ec435f54e98e57585d33b5800fe0dfad492bf320de3c04cb18393acc88246dd8020491b4d0803877ecfc6280075eb8902213c6a3134e49a795cd25ea2d2e347f1e85865aaffce2450eeb18e0078e850cd082f095354f3636a768b01a2bc0b3986a5da9b388db2d02fd90a5300838630f9d189e891e8b51f5586fb44ddfb2c5602d02461e784652e226f10e200b1c38f277cc62fa628e897b1480690a1f55fd88490adbec85e46e57b66977a0083093c0d22e611df004801ce59eb55fad8e3c3c9c44ea33a07346f77ca68cb009987e1fe9f6751dce2877cee17deea48a9109128996e4e2c51c015160bce5e009093ceee84772d60e1ef171a8e50d247f03c003140e267294d8a63f772219900a7bd565a8f1eab24a2145910c2e5836a7af7ac2728b14fa74f9f47dc7f2f60003a8e8b00d49990c92f60760c20ac3db98e424a2045474c2c623fbc7342b9a2009e33a662866411944e989d03f1046ead53ad4d2abcd51f6c2b9713ed9460b2004830dae5347f921a0c6cc44e5a0f575777fae66beeadb714582fad7b6e54600064536da4eee006100ff1a8172ae4ff9f4476159b29dc28e2986fe8c7596fd0003eb99ed678b4befdf1444385e855dd09ff436ac36e94b62f965df4537195a600d7402862e182c0d2c26663583c1a6789825a9e9114e7a4e63b1dd46a2f8db20092a472aae0793067ea3b94440d5a45b6b6270f50f41cfa5ed6e4487d13656000204410f477d8e48e229749c66969719b35adbfe2db2c93ef4d01eb22b113f300ec32b79b03c0870c6b13aaaefb825fb4d691b21e10ad013e3fedd31a9f37c500c3aa4c07e18d2b4a0b90a76b606197d5bca564965eb0afae24b0b363e9693f00f425e9011fae4b2f00f013f5866585062eebb29a0c6cb6d80bcbfcad840b250018c7936a2556c3192ee296e8beb4c665a835cb9faea8512e3edb4826ba6632005c6ca3f7d24fb576f80e75da7ae8f9ceacbdbe99c5fe1e2dc36379ee58bb8100d98147a1a3300cce0383a9231124fb117d7c8216e08938889b74acecce8ace0090ba9308264cabc8f6d3348258baa8e4186e3fd65fbf1657a8bf44b861ceb800416aa8c07150a8d8f735b5c8122bf6d27ccb3e8b96f33dd525f39b3254f2410099cc006fe3c51b2b85543789b73a8e806b544a58c25996708fce96c7526af800b4c257e8ce2f93967d10512b09e5e320056a8ab8a981dc1fde4685090a7312004dd30c94c20a46a7077ef4f148b4a103a09b9ddc17448cbe09d11eed175a11005d888533e6fef7f48b4a36de65a7cbc5f8f8de7f6a51d0830e46f02ac6d3910050055f29629a677b72516fe016b12a87f556cc35096e0aca9b42a1117d3384003edd08a0fa18e2aaf382d6204b86203060029ecef3806ab636fac718eb6b5800d8eef5dcec896d6fdba7ea8dc69ac2cbdddd35d957d3e57b1d560577bb0e9f00ca6851ff7a5f1a28b13e01e20f7d675370e73ddeb018d3da873d106c888d0800b661005f283223c9c4f5a0b57634294a1420852a64593531ca280988fb4c5a002820cf31b810c449d83e60aa0b090f14b143d63096aa28bae472c48ba3539b00b21a33385791127e22fcffe3af4ad7553ec0889b8cd3994087a7e07ff82e1b00778559b25bf37b762f0a3a8fa3f391b8303f18996d779d0c71a65105648ba200496e503a3f97f740b680dd4f1aedda721637e0c77a7c5ededb090ea57bb4c000d7c4c95a666f7e9958279c743c6613cc48ea887503807eebb5348ce34a81830030edf57c2de75cd6ba9f55911e8afbbaba0ba5dde979bcd37405b4cc23c3cb008dae233d0143d08515fe73b45d0eb9f73738041e02a9abcfd02e0750f988f800d3eeb93e6a55bd51a331a50fa383ae0c364fa5ea8edb1e3e9e5dbb1f688bfb00740345f892cde042645ce4f0b74ae0c758d21201a65bfc9b44ad69279e345f00cc5496876eb9a36298a7fa29ed013dbe2de6fd90721519b76d2cc026d5e9100092e05e4b3015b3afd43fd6fc6405971ceeb410e045e099dbd2e1125594b69d00e0b72f3c3cdaadf754a3629eb1688acbf75149bfb5f3a2c07c9b15ed4b00ac00a729e9926c32dbcc9d7a195b3b85ea29bcaaf5323a90c0ea079b9c75eac63b0088d2feefb799f6074cc1d94a44f19c9c6211c92a30861ffb585c2b424bb552009a9debe758430b03112c8a89a52b4beba7574907749d6438cc150cddf40819002acad4fc3897d2a741ab646a273b7fb20630f1880da73ee433206985c0529e00d95bfb98b0a962f8caa922a7bad9ff5eed55b772c4cc8b8bd4a5b02d37bd01002e4fb5ce82ef5f8814eacdaddd64cf93c3461dfd56ebb4cdb933b15697a3d800f0bb21471ab3fe94523e659a268f5ef3fdc514f75b44346471e1755f299b5a00d50efc74fa02e22b17ba23113dea1d216f30c3b435a7fe57de123966b538ac00fec268eb51fc540269a0c728da8498df8881837ed0388668cbdcf76464e4f400c78ab1e9afce2c73e4ade1f56b8aa4766f56cc06f969f77c74567382a6a60b00abd1f9c350bb9eec70c54a5c17e82ba74edbab7e69e45229d6781ddc5dcd080006a67ca403bbc4bd4af85f39e6566929f47448be9619c4f6c93d90d090a6b000af09053ad9fc613165df007a23d14e60fcbf1d49b3229c7b7aee5e19a9982d00830e10b7deb7a0ff1f6212379ecb64da916dcf8092afec4b1aa5489e5e0ed9005c3988e38b343a079688ade4f01a6e3709ebb5d54be35c77cb228361caadcc00f832239a11d6bd26c1f288c982607385d662680d3791a342a07bcbc79519b90010d76c450cbb8637a867e08616f3735941ea54db91fed2efc12ad2fef2eac200cef14ae515b273dc03cb54e946c6c0b4daebc1a7648f433bcafdaceaca674e0018dbbcf4eff8584976bd66d17095633a999c3227264a48f8311dd135b44125000b1766938e33090fdf74b6b7a2d1538ebba7b59c9a94d7600e94a81c3f0ade0003d7592d40459049a10bf3add523f497bbf45be4315ee6781f411addb7d7ce008dd327d75cb9c807b7cb2db5f65805211d6ae7cd6ce804d2e193f21b203fde005ff9b0c04d99331ad4011767dcb24d8fa4ccf5d6f9490a80eea960d304ce5b00b3ceeaa7e9e3dcb10f43b1466d5ba0d51497e58db80ce686440325e86aac78009dfa9439ff25a3b5db6df0a2512a1fb2361197047eac10ab109a7671deafa900b234a1a785ca6c594d9b4d72dba2ffa8209ac68cdfbfb817878a53353a84fd00023dd0f45dbcb1eeb00ed4b6d6d6b17dec6293a95b828dec7adc36bf2bc58f00531f5aa8637d4dd48891c26be6328564b168812c359e7e32d57f58cb1127670041002f83748e84d02f7e727db8d52e84e8169763df58ffd5cffab2b63ad32600d568c6e9a768576b11dc3c67b499d873c85eb3556d37672b71b4b73f644fe40093bd4c478fca662f8da97f24a665c61fe0a6df03d87f3112e5df41c92a12a70014bba62c7f149cf85a155d9d3622d9df6390955917f853e45587866550168a00c73c9a02c304ee202f43a9506b6022d962032da15d10c580422d90acee01c300014b01d2a9c1be000b514ec3714bfeb8538c780bae79078b492373a5a7df3a0069acde0902cb62d3df200124e02690005dc9a7c265131b745517885eae2bce00210d293a98d2ef78e28dae286de1c122bc5975b48f25121bfb2e4ddfe0af7500a23de22c8224fbfafd848c296b334d8ee1716aebfdf49010d26484ace0c8c300a98f398c52c5534e12fd848fd4766e092c05cd622f7e2c117a1d9a1dd26b23004505a74a9e10b4c5ed3ea446a72d38d0c056256a06c3b7b1bdaa6b6251114a00a522cb77223b1164248aa9aeb3025635110e235f295e6a07892a0670b0ac29005b3264b6b4b3c40134efc3029e0111ee5fd18bf57845a5fc56509fe1fc4af10091490bb411df0ac0a2a29f668837922186ae25333e19cd727f6e26ac2df55400fdb98c5c88ccb4087b80d5dcc549287a586c5377cdfbafb0af664704432ea300d547093a4ffd6734a975927ccc2112de10f726aac520648d329c518db962cc00e6c421aa98e9bda17426c3e0cf393e94453c24f116896e796ee12d1831e89e00afc13f389bbe973cd6afd89c0a273ce9cb1cd42451058238a0be901d8e5c6e00aa3078d2acd8f415805ec3e255f267b4497efa2c44666ce356c5ca92e0fd8b00a303d22695dfad4b317035e422ffc13417dadfaf705d223f6b5ab9db1e9a570012a33cd6034922919a610e74fe77987a54916b7636a88e9ae1c526fb311406007e39e8e80c4852d6ace887d8d50ab2c05294810099d9e226043b76a87d70030058eb5f0dc71cbe97a595cd421e8ab5b692d650cc326c3baffddae103cc079f004cd317b9f72194a32897e9432c9ec033bdc65941e80cc6e09e00a38385f98c003a7d50848123c3949ee2d5f40a46782e7ad7a75d13a1d4a5e27fe662a8d3ff0062e5081910a2d4cf072af0dfdf52fa0579a6bbc26fd28a0de8e47e1d9d4d2100331d863cf432ab4d6d36c0f600b3678da4e268b2de8fd1e32b3032fd6ad3ff007f67d3737aabca35cd7d2788875ef6629e93beb8a1b81c09cf9f577995bdc3002b87be403289547198ceb7fb8632333bc7fbb3d99b53ed12d60e61da0ace0d00b1e07baed8011647afcbe4e59dba43305f354c433f8532d23a9d09053a018700382a06949bf02c34cd8451b8e45d32cbd224f14247fc7c89f4478fe7ae9a17004dc04efb0240e59dbb2f0db7ec0d4f19b8007c0ca2b9bdb52a5eec80e6221900643c6d97fa1832517c010da8257ca8423edeb3ff5f56dd2106f0eff8abe889001911a726c036ca14ad16f100d0e72975fa90f9ac01aeb255da537d14fed9260007b7aaac1b198db09a6578fab814e4247f97b8cf7cb7421c8790de8f6a98df0086cb3f3e47892bfa67e5fb03b9f42ca0d211a264fb924a5ea7d88d5ac4da58006472661aefb1ba4b7ef6bb5e3924ae3463ce5aad4c16a7f9221ddf13ff476400cd3ff85f8c6cca0cc8ed415c38c6f439f59dc084bdb52eae8a6d32666e7c9700d9fd374d1e3fbf5e9648f92b4001bd8287e52c73e3d3d820a4e3838b33b6bb000263db7a24e69ddb215e658bd54f402c772764a5cf7215267a3074f5abc1ff0008aa8f87b5f70dd6744d8bbe62b9afb1aedd8251f5caba8e2b4e20bd1086c300c13c12c89e5ee6fc0e52dd54b7b91f87a57281804714259bdcecd1eb00d188006a252644618f851629c29a9d8fea99244bf45e0a8e39aebe0e39cd448e61e0000346e41f050d926e8391a13e5793b607ab9202945658c98592a2b34d3c85bb004c22df6c6d0c2aba08c92c402a60ee71188d9d0e15c7fccab97865c79da89b00299cab6c21a42cafa11132dd0dc1da658957d849282aa5535c829cc920ed0a001aa3b13de582fb7c0244c7b538a878b739929111ebfbfaec3ea6ffb8ab4d82003b5eb0f21f003b59fe87699e336ba3aa3a961156038e151c99633384ddc26d0070c11cebc7502ec6b5940ed18cf8114ae19f32b23baa953d6df7bc834ddab400a8620da25ff58afe72a5c2e4813bf157a6c468a474d82c3974b4a9d2791b9f006f5d670d9a92fcc8e9a6ac71abb5c317b8dd6ee976979fc8f81cb29bbcdc2d00bc17ee61c1ee7bec2ea44613c32d3f84beed43f0802f7315549024c1bef55b0003f504af94e78c9f6b77875c27882141077c29ad6664ef5fdaf38566687253005128c521961e3174c8c5c7769b4f3967e1c3001f90aba6f885ed7793c194bc00a948063262f89ad0f2661c84944319f975b22c90e0198dda4a5cd5c286cbe100dda59d1144a82f0aaaace6b95c41a99c5bafcb4bedf2b299b5dc65eaca422b008d348c9565a22ff02f407be70f633eed10817bfb7c9dd833ac8a13e7534f1600b01c42bd07a2e516107765e2b81492d0a624b5e878038fee611e0996a7f11b00bb13aac5741acbbf832c56c554a01a3abc91f1d0b026f8b7f083073625ee9d0026cec140c69ba9ba473ad8fa172c5961b4ade1ba1871533f66d1396d9e8f340011000b92417cf865e6d22b4668e2578572c02968cbac0364fcee4a9a8eb3e400ee813d2e165632a1883da00bb9d2846128555d9e80a3b15b92a58b26ab1d4900f51e8ce25e6e7e284fb184b2166d66c18242207bb7ec54dfeb383137b0ecb1006023bce024269e1663d78ad1f09c5bc2ab781392efff1b3f6cb8d9a114faf400734def1a7e33713864437274ff8de4e01b20f721d4adb9ef706c94d99ece7800a71b80ab0acc1e20928f88a267d17ee1a543ca6d231e430bec3d210d74a3f50075e26cc61ddff1ff5eeccd1f55c395ddd44e9a7b7f723f50a3fee307e0b2d80039c4cd1de61d3b0c389e84e6aa4aaa84df5893d2a8c3ef1588d348bc8e496f0090fbe415740dd433604fd1aa987b844f5aea42176e53fffe73550881515c0100211ae1a118bd36e23914649ed7fd328885f604f805dd40619d75c732a40adb00d21de700b461be7b39782dd191655036ac4689f4048a03a8720c4117c4abee00f54eef34f878ffe40ff2e6bb048a8b1346c927924e97f646ae171a37aa587e00b6020d1d885106608acfb58542a236027fc7f91a083492e4e5cb89c790a19800dd4a6d8ff1688ac8d902391ea2953adead661c992520bed5b183876733b48900aa2c6e0dbfb8584700336f3de683eab8c4640fa9d386bc89d96b001aad97c4003391190fe5e4439ffb67fd2a01e69c344921b39b9c0bb395a0d947773c3e240019e36bd7dfa94bcf0cca573e46a6c390ae0c8605254ce0cbdf1e166e4efcf00090f5fb154f4034e049ab6953f1193823b187325578176140ddff668b4c302a00e352e531bb312f5887b3b107c6f349da5257fb13e9756383eeae03c78521df00d29e098af9af5dc39712fae5083da74766c8a1c5033d6aac73c0a2b7c27d24005cb637e31db19061450f177c6be56cbff279d30922623f4ecbde7a4c5fbfc5004c90d0e404a11ca8d44b3dade714dc4b3403166f4edcb6f9ee62ffceca7365007e1651ab2a2d2e186226443c9356412c619a193c27f37ea15474631bc5682d00db049a18bbd520771ceb98198d042d9aa21e11ea40ffb20ad451f6b79a233f00bf3e3139e99d6904e140e4bb1ac2261941ec429708c19c74f0cd8f695b289e00b6f891d18863af842619386af8b4e7367789cbbfb2386a1a1b116edde009390042d1cba425925195f525f27521bebd33502629d6569e6ef25bbf600c5ca80800ed926e07ea38b328eb3bcad1a16bae7dca4e920278fe4a1d4c27acb95bdfd600d48aca6a325e9498f3961ab3cf153520af8df3d7125b384268cfc67ecc3d4100fdd3bd6bcae20af4e4b76bff0ee94a6bbdaaacea163422647e8424b0ac5ee9007b8138bc319b70dedb5c0109dd1eed5e0ebecacada38035adb835b5738981400816a75aafc26f8348a961df2a47e980de4319b6656032a54e05fedf4c873cb0025499383c1b301de62a7a2902c581423ee55d499021dfe0b0b6352746ba849004defe17f3d646d6820635f77a7412c6067a5d8f9dbe3b0c150abde19b8afe30019eb68b223f0c61a09b455a31340dcf8708e1ac252c60137e596e82a9faa1900225a1f1ebd777739bd1ff3012a2464ff0e0da53ac3713b7c856800380782a100c9f77e902b3fdfc77a157350b38170e61575b62eb932424fc709826b1fd0a000ea086e79a73e9c734e76ba10b171b26dc62e7fa814fa0223855ed520e155e50074fa1739c328d13be8e8f3c4c030b0d4b72aa014dcd9704c4ff1afd5b842fc00d750056e2ba757c2512c14a33a45ae7997c52fada88355ae4b67285e66205c0007d064764835cbffb5f13d2742bce3ee3cc4f22b9df759efec563c43de543600019e6365ae9e46a8860624831777fb8867eed94101a4296d90a30868fbb4cc00b1394c2a8a3fa84c32ac89013cbe13564f24923a2e4fde4fe26fa2366dcb9100e6cff03c26afd4351079e7e750a8fdc55dbd2b7fd286975db67232eaf8e4150025ea543796b92b7c4ec6f68ca34ca60d926eaaff51fed8e033d59e9adb703b000070ffffcc64b102e3e1f198be3be5070c246498aaa474908a8c013b55f830001064ab5aa865e899847c680bcc1096e06167430dda94e521909d80988b5ca300d331add584ca7f81b70ac555f9956bedec01508b36e04e5f59a27e8a74238b00be59e449dc455d881e26143a1368138d879be7bfcc90cadcadc85d4ec24c2e003ef7014202be335228673437df6bb6bb85fa4ebf7fd4a2f2f5e52ea3d509aa006a0117554316927c7901ac7258b42b947c2054d09dd05f21cf80d5e75036e100fc5a9293a2329b974aeed1765473cec80f7189b1d2b9ab0471e7f5bd0dc2f40086c7e8114946bfcd18c456a8e47ff510cdacc63c63f0267e4d6b7ce37122250046c7c27ebf051915f3f2e653b6b02fbd79abfed9d642dfb71c2e6c1dfe009700b37f9310eb605c7b6839dd1741d1fa09fd244e898a6305c5a77882924a35a700ab2319d811898e14daf6423c92614c79f6dc27a08ff4cae2f308d969a5b1260059dbf00987a2b60c802396ae4a7791c57d2f9e9b8c6431477a0bc8da56c6a0008ff292733f8b9cca01be08fd2a6bb8e144c9d60fa0a4464361570fd49a8b8200bbe7c3d5fbb3de66eff7508e0af2623809a7a06ff2aaec3ad6db2d97ed35d40027f262ebafdeed2dc82f896643fb31dfd60c4fcd093c4d9fe580d1af8fd8660082c089711d5b0e10e612f1ef841104fc450749d26f09a5658e02f64a6a137d00dcaa4305f3d5e953d39c32fda53061b49637d014c0e8dd86c280468660bca600a9c74bc3cd04fcc6222cfb878a5f6e4dc5b7c75d337a7612970d14ecc7fdb5005bcd317ef82bb1407c0f60a1a5151e40f239c9969453db3b5e9e30d884577a00ed49acda47d76759b849af2a2c6344177cc71614808ab38cadde35f8f803d30020688d421c04fdcd163e40161a3a41b76650e9360e297bb8460165feeb907f00ee44495621f118e5217c0125520f34e0cd20fa9355aca42a19860a974e741a009688eeb0e5ada477cc18ea883874c501cdf151b281bb8daf7f703d5246a20b00946e3b796f90782e66c72ab2b8eb2d093498a3817b1cba149a664ea28494db00bf13b41fe74cfa01850775300c749eff600311ad8f82be010ee560b388febc00879e381839eab6077bcec20c584accbfa8883f28de0af52f768d1d37f51fae00949865dbf2b636b60715081016afb410c5d4e981c542a79ae0e852877f2e63008062f5feb28d5bdeabe24f8839f57ef74ee91cea189e032727cd70beed81b100db3f6eb4d5eb2ac04be27b23a302cb9f4c1493cc43d5bac58a19dd5a45ab9d007ddbe10288c4a145c595c97334052614a99e71dfad113584e40e7ab4435a7a00838b341b4603541320a29452c877286cc06d1ffa73adc68064fe326dad0beb0051b8bde4253e19047a4187d34c8941420d4cd449fd599f7009a13cb4119f15004b4c2d1c3155438147a519241ab7d8ec089b13b8af95b94456667567a8626400cb135c271c79ecb6658945afa0e1bd9fee7feb0b02d7a95584304aa086add00098d72d480cd6e7476f394e083e0a4f05d865af66e27cefe56ad168f08fad2f007a05d1902cbf14a465e0c577f80995f4246dbf28acccd296b8ed7dd00a5f6700ce793d1f78e29bb9f2b990bf422cd48421f5185c5bb18f62a81621b0a17ebc006757a27cf4bc590dfd36b0c79a3b23b09570e2ea57162d01f5b7df9d2c34f300249b76b56d86e09b905329b90b53ff3a8dc2881e37b61782cf168498bf20f60044f2b716b36b1619100bc8c18bc272cce3408e7d4022f9b49ecf68086437ca00c4b2428d7936421cf3197f8a15ef0c746272c92b9ab6c5650a2e055ad557fa00f1952da86dfc4ed3f208f71ce85db777b4fcc8e6cc96f17c295d5903a7454700dbf3c7c22d19c079aa76aa5104e04c4f6e7dbd43b57f3f8cd96301179da27e0066fcdd610bab613b6eae1e2319f20f5202a100b3141d6f670faa423551b3d100866d5a621a3314e0fbeb91493606cf43d24b62e45ebc28b67d22c643c80c9a009ccc85f4c979c4bf210d9a66a6e6086155af3c0238ab37a1921a73a36c22540036b33bd636c26f05629c653a8a2359a785df6ee2b42ff996d778ccd5af344b00cd90c82f86a4330e8878628511f41d8619ba7dce82007ddd7987ff5b91354e00f1224424e2933310e12e558179c31e391741ebb55ed1c73ab859bd903d1ebe0032597c8d96e6c9367f1cdd023915cb55b369f0301c1b46d91f26945faba643003fdff742fc75d7409da27ebc1dd8b063ba6c319f5b5d247bd71f2432ca4a42005fa4ef89d9af93ab92748a96e64f739199cca7379f604ca2399728a7be6f8c00c0ec1cdd8483f5b0ef01d78b02927dd7c7132db0acb37775f217f2c5f3fb520001a6afd4e65d1e7ef93738a771cf1912d3c351d9c7ff4249ffef73ee5855ac009d523700586ce6f6f841fb1ce3abbcf9a3c8caac8f6a494c7a050f46c61ad7008ba5537623299fb3a5cc5c48e83fb725c377a282777a3801148559d6b3531a003ee7f0634ad2a91a9ac44d03198e98dbb77eb29277500d8f1fd1371dfaee5000ca8d9e971c6a98ccd88350962f698e8d5e5846515e334f332297768d17651900cd85c06b3bb32cb934f872cdf4c9e67f82d1f5814c8cde8c74169d9292e98300b0bef65683ae923eb29d390aa7369f257aca6e7bc41b430cb48f6a861e55580045350be6b422f148c3adf552c7cfad5216eb23497bbe75da9843d83abbd4b6004defd8845f1d42fda53e60734e4f8368bcc58a4e0b859ac0545b2754d14b6200b145181642ded950acb499d30314522a9dbe4e8f95795912397751c5bc138c000bc00569e5b3dcb27328f4eab4928c845e053d5bb7866c2bcbe7f38b7d3303004990c5a78215c5b20769d41890c14b04d8cf673fc19c620a675d16fc773b0e000a86b7083c893d7e9acac6ffca31884b633346dc9ae23c6d68d51de2c6f1b5000e38aaf622d1df8afa9f4a1f8f93461acf48ac0280ed8f761d09758e73d8ff007e07feceeb6fe0c0c25103f982166e531131ba640cb4d51c1a5442e0429731008a865abe4388f2082ae38a56cf23ffd00c7c6b7f8608d2e6e400ad7dff4edf0061038d5b67bfb04604e01e8fe7a4232cb19256d989edda1253cd7f2127a6350095b4562cbe5dc364dc51a4e8121f8ccb42821618cb9e94d777d71916412144007d9fedd6250a45cbc9d19e72e8124ad66375b4a17a3abab1ff67602910bfa0007c36e432657e7d1a6461fd2a0e319dd0f21f6704328e5ac846b278fc706083002d229f2292a74306e6ced3f7ecfef3bcdca97716a9535ff6aa5de10db8d79500482a1f76ff5f76ff464fc737e08822a102458ef55142b1381b4924c76f8f94002fdc9966cb657937bdf16fba840ac5d70121c98f17ac7d911627345ed8b0c9001cc9a5de77e4e37d1f616b628a480db7636d087dd3a91d84b03817aa75a8a400be52c62a1de3a67f1869697f83e1619c7870e3103edce06fcb5577eab88f3400e003821fe6c9870469b799b5fc3a7fb2770aae5bf801e64d4318982211393a00ccf09b476cb395a3e8b991c960c7720cf8fd8b25116672fcbacb75e30125d90038b022f552f917b632912451fa766c91e867c2e83e5232e050b645c99cee5600a07293ca4951929b643469f7611270a5ade8d39234491f3a73bb45f34dbaa900a294977c8f2fcb2ec6f5b8eb1c44d76291f8793180218730b665610f5d1165002b39675035faf7b05547109944390301b09f5e4852255ac1e4598141c583ef0083ffd343797fb86e475e77a579ce8aad835be5351e04d35746db572de3cbe8003bb7767e62815de4448c991a785c2ec3d0e6d50f33331f7722c004c903c0d700952f13bb777f1afb6ca12a0031d28989d27aa88adb36c5ce7f6c04227fec71001201d8ed370d1ec015a725be05747167b298528df46517ebbfa569acd43bd000c3b26f443c27043ae3bc4109fa22e1d4ff7fc205013f5938080e1dbc7bfa410041d92232174cc7327d3a48230d82df630420dec7a448ae8afcefa3f245bbf80077c488e4f094cdb0a18780c39fd431376d10efaec13e2cff0247a3b9c62a5a004130d945abddf3a00bf787e80c876f216c4f912ed12ee46e477a967e7212fa00dd3ab68a30983ebb066f777e9cf41510740841e88e7e3a5528a416bd18771700ce7e4891c0e63ad45582332d68fc67d675c8d5e3395e991cbd182b7758ffa80046a6fd0114879c281311d0d0e4847770e98b905ab5b1e1a69756d325ab137100bd807ed11bdd72af9fc4153d5b18dbdea8e4b8ed0f8b2a9bc3ade7512a364e00e2929595256e2ce1ea4f2e5bd871057a25902dbdebe5a73688bb8bd55cec9200f02be0af806d871f2259d71d5049a8f9368c491b3daebab92cd084c0d65bfc00ceed48fcb4a2e2593ca0cdcf3083b9a8ca40cbc6628aabd47149d37f2d919f0034162251d8b7420c3116fd85b5802550474fe57d027c3ce18224fd65c1ca670001b963aea16b644b963c56269a0879d7fbbfb399dc46c75adc12dedb2fa912007ae384916f5f3247489028897cd4f57138d6ed2c9944b036f7cc95d63fae7a00547ac84183127daf3b8d479bb3458077094558961707fcd381a2c7bbe54acc00228a7767e40acc0323f9ff3c534a562fdff89766795ec5fed3d8b0b6eacfc000d28cfaae8fa5066770e254e822e461846f04bd09e609dab927235cee4ab44d0022fcac99e53b8fc881c9e8ed7e41c377408d370fabb4c26f82de7c2608caf000fed4bca7e69fb404d2652c4b45329a7c7bab8da4c5e4c8028f04a53ce6775800cc084724c838311d2fa0972c57e0b419d44e4a3d1462dbbf369f4e1b5eaf95008404568ec258ae4d4886d39d55eecc3370944112a6e6fa7676d6d9b1040baa000085c62c829b191915b45c539d35249966e7c8b46538373e38ff7a860696d30025752b4559ce16604eaa2a95d5c33366c0b85abd294438f2c03f6bae2356be00a240ac325161381a218df25477918ff232514e5c057308f199792829de2398002fcc8e8122d3ebca2b64d9fb1e214f561bcd7e56f2fc16e91a8337dfc3360e00ab138c6a53bb30fa4a8e97c30f07a3b558a27a673a2b7741551d847b51c4030089d894cf1ea84b0a3948819578cbeae446cb93cab6e5b1ddf7a67d63dc5e9700bc618a510327af11d57a482fc69f526a3a4d1a47ddf21e2ce3b3c11225989d00164c9c4d2d59f52cfd5672f44ec77bb5d6a9f9b24018301cab853fc798e2a7004256f46df7524b4b67cf27dac450385d4e682e0ab3a80516c868cd94cf2d9f00a7bcf97df4c53b0e1edf9001173f37e6fb08b45d9104c8024b2d30b6cbdeda00673d7df6fb97b4bb02585eaab115f05756f6f0579a3144b9a398f1ac00613d0067d7fa1f53b87313949a5d435c25a39e88969eb84e8cbcfdfb88666d96657200faa30855951cb507cc513b4f67601f656ed579e18a95495b9d1afcb66ac412008fdc472724b09193499a8889bfb761b27c20097e1a0e1095028c3ea2c2151c0032d975a6056d16f702decd003152079a09696829583294aeaf02fa68d14de80007f4c0d590674d546c5f9bf7c66f25da1af0aea2b29477873eea66aecdaf0600c63b136a23ce939a37a269a4175c4e11f090b778c9b45e852e60a55b9e67df000e4aee7971a2b14d5955e923e4790f1cf8b28939a8426650e84e34484f1e07003bbebbbe6d4e6a1ab526cf5df16064571fd2b2129e8e81464fe488f1d2b468006ac5de9492b937d33bc92244b6564a07cfefd4d34342dc24af7e738f8d73f50068e9961a6b07c1272f8cfc398c8ad67825b74e2653feaf61c54f075a6b11ba006dad26c88fa1bfef1f81dd5d4c8484bd294617fdfc9e1ebd584be7b8ad15cd00e496a2f368ef848d5dddb6cf1441f143c253128ed713ff0cffd08afef83b36008cdaf76a46f05164a381a8c51bc6a7349418be07d15042d3158456f77fffe800c536fd1fdaf769a1de33e762a2b9255d1bb4f3a52398e700243dcb27dc5177002d5db19d398fcaf123930df11acf23e2b0061587e3924673b1b5d56b2097f10010bc3fcc2edc12637eafd6089cb7632d05bf6dc6f6a7e20fd58f191c1e57c10086612433efe376b5867c9fdfacd90c47cbadf94989594d8ed992d5f50b50880061bd0da51673efb49d3a2635ece624dd16004d094c1c547aeb3d3c6278dad9009649b184a9fa57498b7c79b8f9a55d58c3dc93084db28e678cb9a68e3d2ac80026b6a6db0669997d3684abe45cb48cdbd2c7e97bac2b87e9b37c65e171bac300179b7fbe103e1c3ed3cd1ded5e4418b206286362b3cfed8ea5201e1db9ab9400bb7ca397d08983024fccc1440a72dc1d5d09b0ac9607db42102826850ef61400bd38ec190bb3a9648c9ea72550f5db92892418b53783bff5bfd673243dc37000a7630d62fa02eca2c7e4309bc83738ed2db24e52d6846a0282902caa99a6fe00e1f0bb61e129a94af80e6b7528a4c6afe9940722a5523c510569a016f02a9b00b56112d15afd09cbac234ed66f7c9999b62906592f820cbd98265ee242729f00ea91a307e89d7580fd9f97ce6d8fa6243a029bc7da37e8cf95c4c8e373482300ae69a56a2aac9d80b0e4965f653d7749a2c61566e898b67058115c31990074005ead126e5b2ec730081d1c80f2a8b61bdeb8b24e8f49990d968313b9daed5c008c4dab36d75ea07c1907ff9feacdea64f98d6fb34d50f25b9adfebfb3d851a0006603d0476de1005e99922398206aeb32326b2b271ee679395fcf1d2144c0e00d4d87adfd918071cd75ef700993ec7b117a57345e664d943e1f1721ca26bff008b6580a163058248ba9b99c46ec319a13c3da3521f575707bb3b057b060c940044005de19a987e33dbed9830f57c12270125de4f3e3c4ad3b63313082d57a30073e51c5b966da26170ffea1188134f097e696be76c2dbbe0be47e77398ba1a00e083f98a1a49a7e3caf4b8a830e46ea674944756ced524b890530c1a45ec00006c640d3e8319d35c6a1cae555ff632c8115196455e086a92a6243c29af4f8200cdc40fcebcb28279eb5c32097de9f403ba30e081610af1283f2b3ed09b3c700000b5e3aeeb87989f9112d7718fb9bf854a2dd842b9225b7d77b368385b501900fa505de3df0e3258a3cc7aed957fedcdf279170c661f9c8d3f64738ee44d0200125a768750d75de216964205937ed4d02a053b1e8f7ee7d52425d6cc119de90030a3c181fcf8f89a668dc2ae3c54a018307aa1b9018df2127e1ef1c97a099100132b836df90988091b9ed111f30868ebdefe08485ab0eb6381ef0c6fef27f300b83cfb483a1f9be2cc04e334ad84a69b8c5acbb260e92ec4d06a9a81681dbf007fe075430e382cd1507e168ccf193c59732d96ea97cd0a5dec3f05e8fcf60e008a4272f7dcf5770a23be5e8b1b6e99a62781e3aa407ee1f938bbb84935d3cc0059e004144b6782df6033a7e7569d655e8b30190a8898406c05f50a3b08caac00f2689461e21eec7abd2b1d319fd2a56eda302002b100d829a61a32b18b916a0033b5738d7556d71523cc9063262dcc50fc82be43f4cf01f308f6c9dfdfc521002e08a9c12bd7d485956f55bc26e6fe30b0235fe94d5d0b981104dae168a976001ec3b9239d9f501f344365852544dd28972f7b513e818239eabe394e81374500e31868c7ffbc8b59c9be5514245bf16ae48d0b85c35661e4cdbad0652c6744002169480fb70a43f77d372d0f769fd13fbedaf1daf662d541bbfe1e2d340fa3007a6dbab35e2a97a33b006f0f854ad9ef46516ae492d2082bb7c46a055ab10b001f29293c9c84f059bb7120ca9a9f5a22cbe4771de3eb31f6ff778a18b62d9800118d8426954499a20aa16a15b370c22bf8f4b290aae2de5b0ce86881b8902100408f53cd4c17756162eda56836a147bd0078f5da4d9d765c94f7d4e6452d2b00bc011b8be1b9e813ef16676040383e30fa079909efb1af708189ca366fcf5c000a940f930e70a1d2c4cef4f2bdf37934393106dbcea5c3fc736b3cb035b2c400699ad40bbcb2d6a8cce103c7c2f404b4f2985ba966cf1a1b31f24e8d97132400fd9ec20165846c499cfd5c8ad947a190d2eb3ca1b589c3a307e588b2cfef4c00bceaa810ad87ba08a50d8218c3634243412de121c1e5a57ee59fd986e61a6900d5ff86604c342561f6585e9d1e3c3e621f02910c173e7d9008842d660c52d800f654c114ddad848af9a6195c1fe2726f33b9dedfd0b82564df48bca9a56cec008e214a76ec820db879727e61315af572253ae678e5ce8832e539050406461b00a2d2792d3afbf59eb82f8094066627694e787fc991013101f3d232f495e36a0035db05450bf368796838e58fcbbfb343244566f039e6ba294df632d2938f680011e660557f630f3be24ec794f81483110903787374d54393b6dc7a0d31214f00146bf53809f0459e4088f8b273dfba48dcd09b64241a38c321ef1f2106928a00fb2c08c42d00d942e22c465a237a41087774a090c2a792d48e907dc24263a400463f5c4c28b4e8d8c02f9a69c938679c6db8734123a1ed865760d8d0fadcbb001f44e2105a0eab08433ef6858ca78db94e938882efcebc6978fbb8c38cb1c200e953ce6b766608587b1e80c1f8bfa41c91cee9c4e0784c93c274cb1461223200f23ac04e9e16f07ce086e92fd1986532eb31957b9dfba0539b121a488506a7000ae0a8adba46e493289eb384dbd2a64cc6ef7348b649e292ac24c8094e572e009d485ac5bf2ef61f3fdab3a884d965930da48e96dfece4bdf658c6628db37300af31783637e938f172bea0ff32d75b22cedf35e15d56d44bf014a0995f5b1e0031b41b82e0874d9e75b7632ef9c9ceba1f2b2dcdc3640a6354402b4dd9cbdc007f47db89a9554d038c26bd8e1e840964d11b30f0d43d7b1ba0f5f16c5ed1f900fe2f0cd4006809115f1092eacd86afc6c8cdf5ddd8a5ff97d4d4f1b08b2481008804afbd5de6931604b0ed2ec2cf74360911d305220a40a843bfc925d3bd01000acec5cd78e8f1d78c08246e0ae12bf566eed2703fc878ebe2b7191a5336d3003dbdf829b036a309235f7a76ebe4ac9151350b2121352cc3a6e3ee26f2e34700c2d0facb9f88ca57e891d4de992026c0e77bc5596912f6779b4eb55b19969c006c4a033b9daf54e2dcfa0a3f36094bf1cbadc3d2e9967da0fcff3187875ae500cf9a548226072d5564c0b3694e7412b6cbd64ecff80b5c05763b022aac3999001041313fe36ac027f8f3256898f5cb82bc18cba9c4c2d778c5760d8bc6ca6000236edf970dd62ece5ae53afe53e9959089f8cdfd753047b2852475f6cd679100d95795c5915515a58631e6e280708c8f8084044da69d8518b45917a88f70bd0013ff042b4dab371760577427aa459fccf4fcfb96726765e9aa225bae50eacf00a327c08fc397030c602cbcaff600f8345398f6e874b1f3a00501817249ce28004e8273393247996c62d0999b598c63eee77e21977ae5e3f77cb501b2071b5100c721f16ef37b175100cd6f01526865d249549c950832c223550e67cd6a45e600b2bea195023b7b3cd2ba5fa8e47bae5365b2de11dd0a29f4ea0f572e73b2d7000c3ccb97ad0d59bbb4c5d3bb5797a23388b74673190b7362a2b1b921cb3dca00bf79af1ad2aab95b733ae9ab2907d8bb63c9c1a54b35fc69bc693bd96c949500e99adb3227b05db578210d31d0365db042305ed9aaab41cf5343eedeae358c0053d6d76723cd3312f5e9c9e4cdebc069b72817f3eb9412c3026d63d92cb8f800c26ee91baa31129cc6ac8d63e885f56b714ef0aeb125ae3a2a90b4f70d0398000241bb9e4e7235812d2f614ac9aed4851d28ab7177738708a7519e7fb6504000e8ad837402820afc8234c2d964e97439f8882e023a58e48dee937cc17befb3004850c093d00a090a5ff0873d964edcd2ebd2766c8457810e1807a21e77a56700a2412278d4b69a522d776c36cdef25634181e08610ce0369988f04dc56cbf100ab43d52852d3558ee0f803873321c60252ecf6ebf6b61d3330f37be36d7f980047a443a129e63bef534b332c54e02170718bcc167b379573095998878881a0005f1343b8605da832a66527ad6a404ee425fdcf9e9aab7af29b514a63d755ea009435b0a59469bae315e4c8dfcbca3bb9cd2f0b0cae53b4b157d3081f3e6d800065abf580233b1ca40d75ae87fc5885210cfbf4e7990a220ca973fa9e04b5950031762c237d22f6b3f4446b3e0c54c9e5d9803f418df15ebda7f467ad3abbed00a2e7886a989eea407dd14b2f175b3fc07536c982fa9234cac7efbace319d1d002d7329164fdb96de3aeb42aeacaa3b836ad7bcf4fb89b1a99ff62af74fe8af00363c802d056897f164fd7f07f304682b1feae32e8fa03624fa899c355b15e800bfde0d0f939c7ebbd58468e4bcc5284fb836c66e8c4eb9b963fc3fa6896d5900d30b14369b8f7bd80abb932770da892b2a6785039d78b092335fc786fdace700da5a5d40463b6100e75564aabf1739fbea735079790c16315094f1c66444a700cbdb50dd9dc0cca358055f0901b614c72d35630a5af82812487bf80d6ae0c40015199e93625c0a330501a6bae57250d0dbcb4959d111de34f006297bb05171002368e75bbb5170c148ae2b2a24a20922c494d93acf79cba3b9d55a6ef4abc700cb8e23721398c33124b0456f88f592c9c8860e3b30bcc608aa71f7ff25c91600d42dbb85d15966be9138178bce6990e28443bda2cc81226a167ecfe7095b3c009c765c11273d17ad473a32cd064f53fed1fef387f72efad3ea35241a28c88000007f5bdecc9db1fcddcd4fe40352ca9a73a520f6561442430f895f5c66cae90019e4eaac378a07dfa71326d740dad9b2ef0264cba9ad52592cdd5e8a1f2993005bf6c16d850f22b7b8409882bae38eb42d060045e70a78dcd3875b3f79184700cc2b82fe6f77a0f600dc63caddd1834792933799b744f73092af12f452da0f007378203ee21ae85e4929f0ba104d045652a6847f8e9d9e330389a5bdac432000976395e7a7bfaa5b37e926560f7c1917dfd4dc95ee92f0971595e6366c339000d63c415a4cce9413260a8bb9b9ec2d3d9b263d07fe2520977dfcc00c19897d0057cb6f9a70cce3378ffb3085de6baf7865c5a15fe1c58096a8ae6ebe3ff6620080f6752524b0e122c5898376ea9d35fe396f0c7514e90decff7c80cd6156d600d1bc0ff9f5b60ac6b4d1d9516de1fef899e76dd5dd04130b2b4f92b5ac84c4003afebc3023c34d3f83bbd28da873d8b917440d306b7ef70c3a3a3326347f660017bc3e2b54b000bf03a675e49038fa7c73df3418c05865bcf2712ff71c754600fa786c1027a896f34f52e684a580e84c32c4a7294616d0be82f02459bea9a500feac53f439c08ba70bd19a2036f8d30ce1b6c8539ed0a946ad4a7e00b2dee800ef1437d34ff9d6f673ac6547cdb0ff6868000c9db88d9cfadb9bf08a610fd200c3535753f4e386b08ca40c1ce45a267731398bfa3a45e82b3fc5af199d7af100a6ae53a5d5abd6ce544ceab8581a069760b75c078a17dbadd07751c7e52eba004b85bea2715a289372648aa18593ae981843b6808b5064acd280403a488baf00e17380bf5f84a31bcaccefc77c1bb582f4f2d84931ad90294595c9cdae294b007a3f79757fbb75ac0e906dab1b2969f7648f2699adf9593b1c93b28901b3c200348ab9a5dca5bf021c0b23246444f10ff429ef7eba21bea22f461e1e2ba43f009d158136a4c097910b92bddf0627b8264baf82b1bd60235299849384f7cff6009a0a60f4854c0d1a9b259ef0fbb04c49cd7fdf8f7adab7274c8c4549d76fe700c72edc26b9ea4a3aba10edf0ebeb20a3a89bde53d46852d5e579ab61ea519c009b12a4cf4edad45c6469bb4ce673b648835db25b6b41240e95f33b4fadcc6b0005e8899b5bd70239d70b196aa8e96339fc43cc2ae33855881a7a2ff71d0a13007a87d1f9dbc28e352267c11f715b5b587f336e74ce95e1cf1a5fb2e0177c7d00409039806811698a154be49a9b8e4bf50a40eba7f2cb52afaadd9e7aa2973200478b5a95efea4c7809835faf761485fbe002f6adaf1d8f5c9042cb133100ea0002582b231860a63e98699fc9230de20d681c3b749182a036f4be51eeb0a9f900b6bc7dbd86f41022b8673efed1b28a910535c163a3b1ac9db99d902813813000b45d6d98f53b921014118d9cd56f070c540a033d5a6eeb542893fa21aa6440009b2c36b89f6cd07f370dc5f86844866cebad695e2a8085302d95c52559aa2300dc438f8be1b171b8725534f4107b4aa35bd768820c77a8461c41ae2c070f6b007f181aef49d3cf843742cb8b4ac7a93247378a76175fc49685e6ae73f6216f004287c4f115409bfba6482de22b157e3353ae3df967afd9a00487fec758b2e600cae811a8348de5e03812d8ec26e1decf39be638e9ef139d87cc3fab388d0a900a8fbc23fc7d3568715acbf7e58a24c7843b9aa1994448226e2c49eece9a24f007846254953564af74ac314e791125e58d693fbb775051cc462d3645f8bb368004690d892fc2464e46a702bd01f2551ee01fdda5fb3609d8889fd897c0cee7c00337ab8a92fe1a4973854d64a02bc8809a3041291b6ccbd144a46b6a06bb36e00450fb8777b499ae7922d44c8aeda75ff1c51d0b644db6b84066fae38b579d5008122dd93dda2f15a1a9d9fe27fa0fd6548bea068096a7ff1b26f72af0dff1000da986e16737f589f7ffece4d192a7a547569c814340589111b0c8ada89e7ea00caa01a137b7db4f92a52738e2c2207f8d844dfb04d46e91d40b5a2cc6315f200c9c0ea7b591200f5cf127a521cb81c24f0b373a7ceb712c82a0c7ee3c440bf0052fd39dfcae8c6111127b7d12c0a0851f265d190bc972254611e59281a7df200f2d679f0cd2dcfd355aa10701f5122d837bacd4802673a3f886a842477d07a00701b5fc14eaebb0157ea68d8e4218a94afb6782a5871f914feaa0c76a8fce400dafe689e0585872c6ee46b077427cd41c455723ed097aee625a6ca6ef3d11200f5fc47a7f687583ebb082cc6e44f1d448cba58b945af35a895185e0f8c5547007be046ca9764658b48c60978ce136697d7ef85bce4596418f9bafa09488c62004a0779bd2d2ec596dd82fc98f016ff807e7da41124038bdeef1e28dfdfc68f003f0d766cda381c8f5bf8ca56f10a2c9e023d74c872ac5cc9a3891db660d23800d56d0f9d301f0f51fbd31d3e4e26bca9919abcb4b1b64d8bf57b1a38e744d200dab4d41aff80645e2711f3582808cda567486edc3967c85d405cc12c60b5fa0029223165825e34b6ccf16e6842c607baf25652215983a3480bb2d562b23f8d00b48b3bcffce03e83817f697f692a0c5aaf44a976b8513ed7583bd5fb17e92a00bab5d4fe6328fe69c087a6c885909c43d637e3a0888b86c40f380a84dfef5c005ab4d848239ea1a578d7c919929fb6a6808757889a1831f560448eaebc681100a0677fed523e0a8c468910fe5112bb0f50b46399484b72c0a2122859e240b300d1aebc17eebafac33ba1ab0d8825d17dd5b90ae948cf59184e60be45c43ea3002617bb2be66fd97a3b31a90b71ecde0ae40e4ceb6ca6c168c5190f5d70ae3e006efa93bce6d0de77b28df279a66d5fb4b5ff80550e26e73787f9e8776f7c4b0048828738053dfdfe9f199042a7d81e5e1508c9fb871cd3621b2f419d4cf2a50011ee01083a59232ae8be259f136d7dfcf3b24215f006e9f43aaf6e26b96cd80091d998e6a8498fdc23a7ba87850cc1cbab56a5380f080e88a825c25e459fdb004fcafae71c066a3aac7f43f8638911286a215f52c777b63c860cd7ae1f8e2400ee7070030461e8de409b94ae59345a22bd195089d0ce753b53bb14c5d5828900f4524706c4aa4e2f114eb730b3a3dfe8c800d316a234f95b21e09ff9849ad1008d2959fb7b3171c476c8e03c72addef4de636a8ee7f91e7f50e5a697e6cbe0005b343dc9885882a2e727516613547319742b76659032f78d99a171f02977ac000676fe8ba3def5e01209bd9fb6488eee3251f15865eb1ced75a34d2f00e8290097ad22a4eaadd1c0f612bed8b9662d1bf3dc0f512eff9e42f70b1a93cf3307002df57fa0448ec6427ff29a58f493fd9e8e3921af54de763de5c134ed97aa6500d6827f59829b6a47d2a4a297047ed3e3afeb17acdddcbc2b8a30f9cf8bfcb30049c083cc4d482c0c3aa6714bdcd9476d1466add59db149d393f44565fbd762000cfdf2c0275fc318e7cd727437cfd7778008ba86c996fdf872387568e6842d00f4dbca83701042902a696bec4ac99ce7f8b99c38b3df29f2e9e1f8a5003646001e75e79aaea8926c970b4c8dec0cdc19b7f34d23dc314bfbd7c0dcc4e88a2d005620b1e79caad9e08a5490abe6beb6ccc566be5fc5b8ca5bc32b88e10a8cac00ac880df8c4996cf3ee1cb82d3d035d4703a0ab6c83cf846eb8389d0a2465250017acf53cd70396e8ff17ce21fdc9f1f3987e4062e946b5fffa1cda30119cc7002a310b3edf6da39e0dd0d29ddc8aa841dbeb1cbaf7b7e6a00bb4bce0eda45500421b82db22d0e822ca5f80daf81d29c044a432756822ccc3b4153c46fe5b4b008b1404ac87edc6d77c328cc17bf11d67ee44c984b85359f5f79a218350a14500d7f901ac07e3fbd4db765e9b6beabe6f2ec9e0d3bfe619445b9f1d6d5bdb6300603cdf9e6266146f329a0459a1dab8663f6b2db76de66830e986948c21ed18003cee2b4b4061d116237fa30d9db1e19ada5facf8e147a2b6f95232bf3f3cf100b47c04b51ae962f53aec4d1ffa271ee70252fafe4ef6513838d17f508bffdd00cc0cf401fd5dd5c608fe873648c46ea5186a3baefe08cc4357e314888eecee00e9fb7f67c4b6ad39bbe03b6f409d53895adb0c9f0c016e3467ee2174e8a06f006e1aae5120400acdff78fdbe8d905064e6250d807a6e93bcf78d5fb07880dc0005d00a66be304c978ca1519807268ca71356512e2bb3a5103af31095afefa500459fbaaab4f1d05f813e1727c7adcb080273619a0cc114245f280476994dcc00f3bb541d6bcd8eae3de0598992143e698decc384d2883a8c23111bc4d5de32004d8800af45a4d28af6c0710b32b8600a095b3ac98c96d33ef5fd15ec730e9d00b474890f3f494be0244e42c0317d619fee8e98973f347cb584b19513cdf171001e001e9854cced02075a8967ac7250f0cb3fa30fb226595ffc36828cb67b340071d6580960fc12628e255d5625c0d118125d86a032c55551f8659a60afcaeb00654c3bf74c6896c6aad15535c0f5240274116575877461d7fbbc6438fcc64b000cd1a783e250f5ee420d396a5a8f3f3c3ad6a9bdaf5329b18aedc46c72ffa9005cd59f24f21484413302029248848bea32b600661e37e105ed74a7c949cce1007c775655aaf581ba63d2eb0ba82cf058c9fe990e215febe10f232c75d5dd5b000b869a4875d4671260163d920905164e35f3e942b4c2134b6a6e8accbe522500b5c33aa7a42e6317ae81a17422c11d957d6b439c7ca062070a4896df13aece005ed12eed30ec973cefa3f5eec35e25cb296cbc5bbdfde7671e2d586a80b78c00e3bf1ea8306a426015b1615f6e53fdcfac9feecf9b140af9e74c488d0c87f4003e08527d8329f7b6c09b276d1cf77e5eacc25484f0e2f80fb5c66429c427b9000e600cf984d593c77df2798b81cb89ea5a7a3f78dfb8f13e7257cf634bc96c003dd163f776f395e45cd7019b966a0cf56adaf16bf682360f616a16831c827c00009fe6ee49738a232fbdc2ef9235257b3d71894b36a152b738e3ba761647140097752ba9d597328dd3cf081d9f92cce63217647059a3c8feb179dd4a837d8f001a9d66fca8e9c8729a8b13ac77efae10a2d782ef5a9652fe5e8e5a1b99413000660cebe01cad6de785cc5aed0fbb1fe12763ef56842bb56d0ffb62c4a308c200ca64d1be2a7a8a4fbb5fe1bbbb42fa77e63894a49e9c91bb690670c75a2f0d0043f5dda246fb8c9793d79208a8f2c57e729c91b62b9ae17e59328e703a050d004924e0522d56590a3049c575dbfabb20ca97b9ec6c9fff4e7f7d8b837681fe001465023304656a177244a7a60ca754d2a783123d2d8661cb82301fad238bec00cbb90592f4606f9e55580be5d1ad6f6400647a921cee4c632bb483aef143fc00727cf1d6315cb105285071671307fb32d86268a0f9af94bb867566f26ec67d00d482ee79fe33616458fc76b4a964c30a02011034771ae075a1af2020fcbcbc007aeac179005749116dd23b487e048ce2d8f7bb2dda73b24a072b140635882200e98c8e9c9721a764cfecd862aee0ac1f01e06bde26b1bce13fbf35e523a52a000102f8d1a5779062bd630bd3e6334ad9ec1034b8b38bb7186a90ae45458e910051eac0123aaeadd54889a28a29bf8f277bce452237d33bc7b7c608804f022b00cbb4f803f5616efbab44963112a87bc81202515078278916b68b59ed54a72a00dc16cdd7c5d65282a90eede66e966a128276b4ec63299c640d7529f9ac554000900fb749a0595e01165713fe4345a79d250a204693e01d98a7f4b7fa0fcd0800dec6bd01940b7d084d8d42a9473b516cf1aa011c51ea694e54316db65b6f13003e5b8355ba62323708f04ca6793b954f29d686ec7163759ac6f0227ae2de8a00638cfe36f2c4c4b51bc87589e79fe80be5857ac54cb97aad492b960caa66e100ad1026eb68a5eca5b731b6c64cdf55a07608b6ca8ea1db9475f1c459cc317f0065f8179ee41263a3b721c4598c564df0320d2077810e74a21edb140c0b3cd400628b7fd2303ada23dde022c29b8c7b36223b6666490c563add93a95f26681d007f27e5d3b5e1e947dc54bc0762169a8c1ac9d5dec7b5bbd658d703618e97120018e9472a05a77542a5569fbbecceb4243cb81fba6c5fbb0d89339afb17d01f00067dbecbba96f1eb2354d5ecf4827ade14166f48b820fe0bf82a48d8d85b3f00c321cffe0241b779afba1cde935437beafd0978d80ffb4d91eec0b3c5511a900dedee4cb368a677855ab6e7bf9cb111eb4a78eeb69f26412ef2c594559985f00e7a7de4e8ff972f5240b2794c2c0b7f0b0817d91dd98f6a664bff2882ad53a000f3b53f41fb1e03185c1ee03e36aaffd4df26883fae1164c5d09768be704f000ddb606860d0aeeb3cd35a709ac4456f48f56e211e42b73bb970f4e80673bc10034c4600a33682ce2e9f420c686393dea87b0347763dc0fde3745059f87434100d1dc38799e1fd9d10343a06bf3cfc8f6b48c5c3377dae2fc404891d044825600ec447ed8ea5d00eb9594cc3157d56c5e7f2380146a952387d6ece86c72b674003eec400c4dced873820c9f73d419a3b279a6ae0a8b4e2474cca4541f059b4800e3495e90c8c87ef1568aeaae6a980e9b0143ea30fecd67d7691aa631e04479007c72b523dfdfa223b39293933ceeaa461d518a9c48d089897c52e01bbffcdf003d79f20b1d74789aaeac9deec2189f21b2417233b5bbfdb77513db1eb3d47200a5420effafdf2aa501f409da602186fa961d4c3d3c50070ebaa0110f212758009a5c1a563d7210dbd9fae9a9b736f9c9aeb402e310eb4e8bb3567eb75ed65b00deec4d6ddc9a99f1efbd75c3e8806b02a6d799c7dc1f5cbcc0661acd948e6400623ec8c5777cd0ad19de53c9ec83df9a8b3d6166cbc82221226c4bc72f5a720049d8de26f456805472b180b3a4baae70f566e29e245b3ba7ab471ee7e963e70023b2bdbc163237d3659a69f75d748f78a379cbfc7c76652ca1ad115eded2e100108de463768f1716367d7a7b57b6b48b632f85b1ace8751900e9107fc3432d00e4b5095f4216d19ac2ff3d17ed1e4a8ee18393110b322001c7229934c7f2fc00cbf0d89502707b33dd7a9367c440fa557b80abd711b449f556f03dc24727f900d116681ff3fb89902ee86cad7a180ed56857a52feeddb38617aa9f569d81880020837adcb1af02500cbd40824085a7ce423867eb1c71e9e74844a49be3d96c00d99d68aac9ca105d2ba67c035c72ae4aa2e38acf4e34224852834251bef04a0037ef4e785689ee6794a359e9330ae9e2936273af29ff1830031ddf7af31707001b8419fa85782bfcd069ec558678d63d2fdfc92322865230babda986bd0a34002e83657894488c28801ea6d6080b68b43a0f4b1924c65ba258e6653578eb53001796ecc71ec3319f05de1edc67ada4aac307735c61eb6a3cc9cedb17f16aa00043ebcf2b67c0cad58c483bca5deccef49cdac710eac958a53de5a6ab7deb5d00233532d6b8b0fd8432786f29ceddf44798a3a7cd309eed13ec0f114c4e475500b0aad69b3c2afebf31f59b873470c49570df21d84383ba797ee34f9f0d4e5c004790010fb7cf8cecaedb2c4d115e9aab4f243e835c6fd468b2a9da2f5fb8a2003d6d883edd349ff8077640c9aa92b4898c867fc462602f287e2e4f8e913d2f004bf4499ada2c4780c84095f4ea7fb7c83b58b547e7536ccfb5ff102ee212b1000ec756d330698865c67b64422be1ea054f3f1fb2993fb0c99acec6a460890000f278913519573ef1174d17c8553f5906ac254abf75ba28c9fa84f89e1c9f7b0083e5790ffaf35da604745e35886cb933f7863048b88809ace8430039877688006ca865105881d19ef60450add7d1f785896a5f113f9223f94bb3f2e9e910a200b43fe23609f6e7fcd00e9498c625a4358dc1335bb82c641e42e4c914f538cf009356d3940fb148cb6359945f544c3bc2f204ce969a81df7a26fa3b5b70b20f00f8b50f5bdac6ea4d6e71b0bf00fdb47770cde56dfdb8866daba0dc0a761156008ffbaa6457c000268fa0b1a259dd1ae85e3b3b9bc06570d31ca0ddd2c7a9540037fd0764be4f146b6f8e0ab8a003693c23c49313aa31155addb391cba7cdfa0094beb8127edafaa0b9e8e8f646e1b5334253d10c388b20415300f08bb775d200ee1743d6740f6a6e59b791420e0531d94f5580dc955df38afbe27e6a0952d9005233eef0bc51d61cf715a778adf00cfd425283708a73b9130245bb4579a5c3009c39c3d687930e33a751ff6bcdb6f9192f91b41239a8989117932abb5ed5d00071f183487302342a36620bce61740ba7e8e0cba0408c92b367e60adf611f95004e705266b39ecc58ce12ef8c6240120196ced08324340bdb1ea905d126a791006b149c07712821cbc92282d6778f5d122fef89e5dff1455ff4bb6f68c7b56400bea8b6bdf1f2cf4d2c67a7e3718d1900e5edaaec3bdb9c62afddfec6dde4e000ee3204f13bab6ed43536e411be997846a5a7aaece81d8392c0202e3faa0e8300c25732337ef1a4560c0b35f8da51c1cd7666b791f4796682b4224fd9525403007a665cad122f159f25f0c21c200120e11b070418dc7d5055a63dc32e3deb77002700c8f3e8fe258d137492dafe076184b71a9ea5932d3de28ae7b02e573ecf00b270e5641915bd7e9509012d25c650a17c8a26933a629342d9ad3b64ff13740050d5fe46890c8fddf9d2397a9eec63d409171d987cc3a3a4ef1399aa0be33c0038fc312dc921116d8a36ce12e42bd53cd57d3a98a9ae378aadfcd8dafe2b1800c12243faf2d7850cf7e61c305312530f49ed136e10c86387e895bee0a6b098006c3fda232cdeb710670ca07d6d1f2a55014dd2ed842159db488a7c8d883ec100838f1dddb72aa1f80aa50c2722201b1786ea457a5037c25f1ae1f9b8e59d9700faae579683523d0e769205bb2166f831eeaec68b70beaee32c4266a6dc2be7007bdb8bc0b5e66fd82234831e3f705e36ec32500d0c6931639240ef733b13120092dc08dff8b4cde50bcc7be95b15394896e9ef93a8b52553551871533c026600d65f948d2ee9ded659b732595b572c6d8c1c4879102b81e3ed31ac26019ffb001a97efe434549af355c7099c4442087d073c3ed0070fed03499f7814eadd1c00be3eb87e696296af6e146882434db758d6a90a9bac3d5b99506c5c4c017252001f99c7774d5bff058ebb267b950a4f740513bdbab398f0e5a08a416da28fc4004b4fa0cde1e86f3a9a28b53353f19c7ce99e9ae03b90b89b1f3caf09d3b6fb0016b3a31e89ba4d9af0117935b1d45b4d112fb0a6f672d65671b87a29520ab000a558727ace9880f4480593ec40d44838d45a42297ffc6e69095a2b9139faa400fc7e9acc68cf29638ea95e5c9352f4dca88fb303bc16da976df68258e86cb800bf5c2a59a0a6894c3a57c8c46ccb071dc9cbc4f0571fa48bbd342820b04e34004eb710f4991b7e2e08167e8a4160c9c169d8297fdd3dec10d65c94ffbbae10003dadc21f2750e7e26c4d2d7ae2c9693835581db9dbd4fce8aa5eb77e5ee56d006d8bb4db7e3534f8e1e39b285bc6af47f371877a59315870ffe5961b1e194c007c3b408563a595f3464cfa620bbe1eaa55a4046475ba16ef26ea3e4f3272a400a5ebb2cf75062e96d46c98f27a9bd8a55d00fd7abbeb79d0fe1b53b33709a700aa0781b018aeea7f7e0ae9bd814cfba0940be6b81d373c2e71816e733498c400e235d8c389708051a00a4ff7b8dfda7522bc29af58cda0b640d200f5724bbe0059194eaeee3be327c2993dfc25c74c4ebb14572129bde9607c8413ce61630100393f68a88fce375d6e5b69d8132f04f1a416ab7d00497ad9af35d43cd5073a00db4eda635cca9c84aa69ed4fbf742f73cc5d7a270eb09d712d8c5249bd615600ba55fc3bc1e522291ccd215cc079f862512e7cff84bdd2821552ac5f65c0f100f8752e41961e381c26194901eb5322c97767c19609bcbedf2c1970a8af8c1000973a4a928bcb3e9731b615136ee3d08b32b9e3d52477aab7e7cdd0b43ccd0a00a4aabf9d74ca29b7c20258e592fa977021f34d7a4c32c828851eb76b27b49c0009d9591e578af8fe4a6b86f943ebf6f0382a61cb158195497aaa731836f8420031c9b44a6ba7859a689791a24660ac5f99de573f24299596e6307326f2c9d100d8b5f6a0ee9f577ea2d72cfaae6f66996a31d3ee261d2c15a04bfc62d7a454002fcd52db50550655aaf0022bdbb031511c2b38a441dfb581d155ebfd720510006704aae3437518352be16e2f6a30c84cbc8f53320cd493553b52f341735e450037326bb2259265fd0dfbc01de422449c8588726e66b19604f39b463a87416b008e81c6e4321394f7f6c01b1a697af3c3f4ee499b945d8a10cf1fc476233f4900c86cadd0be72c16f9e5dac30ead1b00caf76ca585d4fdd754a6b3b1ba5405100b9e3c10edc825f309d4b414e6e590a5806be61afe3b58b492ffd0298ab9047006ffe07bbfacf98deb84720ab1cdfbba872802e8b6a03631849aa2675d452f600419a182b708199314bc5ef0475face5f3b6edf8f915a7052cad0adb77bf5ba00e8684ae7f1e75066403b08e5f81f64cdf293178fddbdba9f7f6419e8e351ca00b845f1e01e04bb1bbe7f7ca818a3df16704d375acb21b3900deafae0204231006fd08a6840350cfacdee2576fdcf31da35c9842f75c604e2f1a92ec4439db2001bf07d8f96675c274ad6a10bd4fd9a57a0b5251bbe3c981aef7ffd6e443cb9000165a441b713abe3416432fe03e17de1de8266966d2d361bfae1d2e91ee0ad00d421fbe3880d5accf182f8a9b45928c6d11bef74238ddac612bbe4c5d326680034912577d14bb0675e6ee024237ccf3cbe93cf18f1fee79592f1fedbce37ed00728d371f1ea4efd2d063d368d695e3b867dc0074bd638b2a14424b44acdb38003c2eb07bc9902f3e643ad76f7c374a757a92cadc5f094896aea3b4b65a979800ee09955b033774ec29dd9fd8fc0930d72011a39726c3a7efa33aa59b5fa531008252864c5709ccc7edabc2df37f1a5f7556a9a7405860fbc3c1c78045b879b002a6064d84eaf7ff88c9593a64d45999296e78003a784692777e5e8650c5fca00b7889d4ff4e38221a48bdc740d2f5728f5df53424577289db0b57860aa45bd00b6cb3c7c1087776b738a5dee1f9426bcff240b3131a6d5512ef09d8dc30031002558b4b2c62051dbf094703050947235d351a4cfe9838a914d0402033317dd00157b86bfbb220549db1597726257bbbe8a754be601d3ff2a1d48f1db516b4900c9e2196725dd53537f5abb98deba468c7c57ff79c27faff0101852f7c834b300440b7f42a083d7cf93d3ee3623b3df55a8f7bbeca1a434c39a331b93fac76b00c41dc2135d503999439c4aaf48700c1187378840c05ea339891903c0bdfa610021b1d1beaa3f7d3b73a2b75905c678635d53235d95e62185e58df657f28d54000a7da390d5994ce1496c4240d4dd5b0dfe517a631f24e4e45af0255021efbb009e13feaeb14a7f3ece4af9301df98ba7bf799b713fab0a3bea1e8caefadace004dae3f700eb57aa2df50b71637d27eec29e39d03814e00d5d8d3c0adf3d7640007850d66c2efd6e7e5eecd32277671909970561a81e1dd9d69ee983701d6ee006858782c61cebd145341bfb99abe6bc40c3b6f079c1c0991e98873887201960016d34531d265b0111e3c1afec802f16f7098b299d57e8339c283c8c1b09d3e0040fc51a616735f7c4367182695e23266ef509708f84fec6300e1adc796daa70019436e5bb64cf96f25814e7a742ab4690d01011a482d95f0d001ff3f8fb993003a29048363e93ca296c660e07c72a39bf4bf71775cb1197a774e76bca47d1500c07353afa52733d91fb86a6fddcd8cb9ed3d481a0bfa6d4172dba6b23b6d2900c11944379d728bef9d17bf1d16a622cdf0471e4ebfa273b0f7a10261066f0700f732e7d1b0a66b16ca449b6faba5f1d6729554a8035a6ee02f96ce2aa6183300c4b5758743a267b832aaec8752d67384354b42aff355b8908213879598bef40077c25c8a49eba5e19947df22cd307ffc151848d2e63638d84722b4c5628ffa00b2212f23a59dfd7d5c580a200168bc5618871c6705b3939226bbb8d01d96ff00a6f818928a16288b35315dbd9f8b615cb48a296294f5a3486e413b45f8c8810039f44c92f2e39fb1f309f87a065571db6082e5da132be45d7aa3ed739007de00f25fe72b8c5f5112625d54af111098110ca85a881e136742db614a069b2d5e003bb88e40d11593f28aade0108c61fccf18c85efa83caeaef6f2ded9e624e5300e3b704c6b6130fba83b1ee8c51154e196f0077c2f9f99c0a40204f36c1109f00ac64d4c1662394c9caa46d85626666f7873ef40f24567b849c49cc1e3385ce007fb9e31fc5a1d4bad03b7a5accb5ad73e1e877edb8c42cd159228512b3dad800771a3636c99d5fba13ce99d5408c37adbb77165d288628a16144a37c4d6e1f001cc277864b91384d43504c322bd9e286d21e4a808bacedc846c8d018344f38000a88db1e496e3b240c2af68945096fda7dfc3294d12c7a2954a92175227fe100ace6510974db1cb373b9dcab1bd63bf826e2c0ea6ba7c499fd6add6da6a9200000c206e8466c34a13851ce3fc8b3bc9bdfd58c574ab7e416b3b0731b2e4f640011f0d71070b8b495e8a54e32deefcb678fd190f34edd98109393e82017d4e400c5cde216015b032ed4cc6b6c1e748ddf89a0962f3ec8d6bfa312b9c2d62b46000206ba0624a363f07f1bbcd7d3b64508c930809c9de857e9f55fcc8d3d35de00ae61063472fb6aa0e2e52b97b932b2305d2608f90b07487aab53ec482cc1ab000aeb940dd6721200b7b528de60bf5539f4a8d59631a08e69f530b00f2656da006ac82322a1ed3f2d032219e61ebe949ae7e5a670de33d6b4dbb74e065fd8a800a36f5885d87840906947785494472812c52f4c7d788089b25395400948832100b85e94b971c4b207b7525746c3d649b8559584352ea3efbeb342d7af94a9b800c8350b768825d1d1933e491697a02a8fadba4043e124c0c26ed2b4c9f0d04700b0505dd6bc632f8de3cec161c111d4c78c89885f825f403f7c6e2d5afb36fb0072200dd5f4774d6aa66909958d76ad708c209c2e2501e522e0516616360f4100a9e719b7a8d6145259e6b8d181e177f17f1fd7c34759b1db760a924da6b20500a7d6ef5d49a13fb1444bcdb04107a9bc68194b8378a5d66ec8751c70d4f474009f745b5faffac80398990d10f03e62e90455c99161b23b82b88c98cf414d5e00d1759f1d3708ea02605e0902d416fe7c09de20a9d024a9f4c80149d670bf20000d219ce06ccf75ac3d88729c3354a8627dd720b1dea2fd6aeebda962c53abd0005cdd91a76f7cfbc53159d90326ff5933c9861ab82ea092f51823db7979f1300128b819eacf6d6de49de287ec64c50aa93f7b0509862cde5800f2349c0a37f00d772aec02d67141c9297d4d304e58524a5a5044067cb852a46377da655e0b80041e6a3ff83bf46c7cb95a22d6fbd303b63b8e5b2a23409d19bf86f3625209600e9195780568ac22dd7251ae6a974becb9cb60e80e70c947ba1f1b2c79c516000158955b0988baa45897b157f88d9caf8a3e931b90480a60a512ffb4a930a18003a323c600e0bab34677b628b669d371a1eda48366f6716f9e040852cb0dd5800443aa150bd8854b95366f9e472b94c079e3c2055f78f5580ba43b90f5c3e1c0048c9201bf077f268a30e6cdff7935ef5417ee72c92508431c72986ccc406a6005ce3981f44325841cc8835141d79cfc19efba7e27e9b43b0207a6b70bd15f7008601611badc5955085e940d3f67a5a5cc285b625bd68ff0866aacd277550be00bf297300c1f4cb2ed6ef49d51ce66403ae657c6cc15692242e8957fcc09c90006f479de53f3e810a10062452431060bea2f1d5bf304bbf59b3f0394a1f4a3400a28340d4c762b79feb79d0645a3882555e1caeb5642cdd71fc2e132e5f22240089fd62c6caedd0d43bcc819783ab4d8f5bddf6a482f03b82d01ed9e3db07cc0029d0669137ca70135ab5578d906a999c2a9ac38ad3e0ef9e424153c1fbb45f0026f89f029a3821ab799715bc34be33bdec47a8aed108a5f02a9ffdcfd8818600cf47b23ed3d067a2f8ab288b56f95965cef11c763d10e915341d194483f4380005b9c28cda31b85078c99e591d430da9d94a3635bc69e8bd6b4cfe49e9679500d5d59203b56ef591ff38deaa430cfa36145197b57e70fe8a3220188443df5b007ec2f06e5da73d008b2b43bc19dbca85cc31b49fc5c9f88815dcc7a8ba749f00d10d4fa0d150661e57407e39e2d814f4bc1b45f958f4476aaddcda481f64af00ec726ada5aea2622cbef1c61014246433c081be1ef3976ac31b6cf3b607f3f00e9bb1eeadefe95a900e4dc34be6bfe6c25c25dbeb69df3229996ac780ce099008aae53d3cfa05e46cba97c2e38141ff81c0860679e28ea001a8a15b27596d500236a968b4615fa6042b64b0dfaadc291b8325c65ca03742e061bf6c93dd99c00b4c9e859949c98b6cbb22bae8ee22c6f85905d565e4804b0139d427bba428f005da9ed0451f9f702d9bb4ba35608a9c546c85f7268941d44091aec3cb5b1a7003dd3d80e4a285991d419ce36145fa565ada47e08bd858b3540e62d12d598e90075ff37c873020682b66f081c92c039565bfff790ee7f4e79eae661a5a599ac007f5a4c0392b5fb1576e2355e7affdede6a77a76e0b280b0c0c1a297093f2d5008dac6c540a8d68ea0a25404402bc02028af652a143ed1b0eae2deef9cc7323005cd819670ad648b0c36f36794cd1aeea901f8ae9c868733a5c90af90776b1f00d542094d757ad3b20c8251441cecb864d49fdb50772e65a717b3d03b2fb51c002d8099b0886a26e77d35ba09dcaf4d32dc7433871581efc7ae8d2f3e1ec6520055ef769c226f6456fe9327745f098949b28c5e232294ee2bc033ef7b8f628100c382d599ea5072391875f99c929d3edf4c59aa0fd9d6073df3de541cb4f654007c15d16297d81b07ac3ec0b58b14498c4cb83f63feaaeaa3744581c88f5dfe00651c5ccc32fdd6abb0fab07d0c9f11583f60923b986ad5058d894c37c770c900e108298d3ea0ba5d995c9dabedfa3977be02705c499eb393dcf287f51cc8d500d9d758acd165308a9aec1a8c509f84d27bb8496a94db438864e1b9d1c6a6ab00d2de80dc01462e885278f04b8656afce0ba9d87cf7558c8356be2143ae8dcc00a0ee1673078b83b21d19c961334695ec17f57cb2b870b662f29af55176d92a004f4bee8324fc7a5a08ec63cd45bbab74a190461fecc47d9813cd0a0e2666ea0038a71419cffbd65dba6879e68811aeb2ec88fff92016f8081542d3b8050ae900fe41937bf9b42f14eee1edbd25dc123c73fa0e70362b3b28e6818322f791d1000efc16d9c6bbf72c812b51eee488b621496d3cd61c8d36dd659eb1f950ead300a00b89c3d60eaa178d7595a6aedd784f2d8d32ebd123f2bc3c4b2c384276f300026cb24975c44b9249596c2a9e8b0864990ed8c5f4ed5a8faf7275f5878774009347b66fd34130f8520901850a178e3058620958a410d6f789b297dc861f1800aad71aed6b5a2e915462123a83eec950b2176ace5d1d9f78306e799a3d9c6c0050a369ee230aad30bc1f6778b4bcbd7f263ec7ae526cf482451b6a8c7b3935005748edf89221041acc92955dd602eeba1e0e947c851d4af07271e86086fe9c00be8da12c772b9d85b44ada0170c1cff6ed2d5f3a8c44019e877abf7f3f9363000de45bc279349cca50b38f65aee06c57163fda50e5241dff5860811adc6b9000b386303bb1e3ee1a0a6ee1afed33f2da48594527a51ef85ef98db95f0bf23100b483bb38a4ff4e19d77fcded10d5da0414df13bf42f4a0e400f3c68d6aa44c006838d6b70da2056a0fa34f9844af031ead211f67b01089045c952ca8a28904001715dd5174b2a34234596024013ff319cddc77fc78bd1d318a956eae7db02a00f5a51109888475abeae2d0a71b61ab515d292e29563d35b9a8d7cc4b63e5a300318f96a794ecca51b17efc2207765a5654efe049b595d7539a0d497cf9a816006032677abad39bf0d58652a493e9af4b5fe2da97dbdc58a9ed3d35547addc500b5a720c523b3cd47b0b0c24ec0eafce79a44384d8cf066cff4eae7197e4c630005cfba09d9a3a60832d8d71c7fa1ffd2e2a0ffdb55c29399e09b357d1716c500646e77b2c8e051ae1a179501f5a0ea1d9125089dd1bd4c7e02a8fb4d3c0355003da451831aa40f7bff796f912bf95b766a66d9077e9b869ad1b87aa394ce4c00ae90c2ab20791dfd85d4c7ba973ca550bfbfd597127cb6a7915540809519b50027ba81262dc611a32db252bc4196781956c8443a53fa80027ce1c876abf75b00d8043559732d06470f4b8a7ad4135d82410ebc327dd8e92071b87b43447560007ff0819c7c9aefa84096ff593f21b83f894158ebf0fdf0bced4b20a248caee00ad93bd1c49c621cbd561022f346865e4e9ec56956a2ee7940df6cff8e5c8780038c5a700cfc9fda87132cb99bf85f4c580cac7744b3e4d523f651edd5fae64002cd1542dfdd15333a8e1af3d11d918f1ef6baec99b1c64fe3b583cdfe7e3c3008fb735e344c75999ab4ae8a669818c09df1cb858f83e2ca070645dc885636700f63a5227d32e7866a951f75798b4a634f25baf83be2d6056b040f95b7a815400e60539de2ed07802e24fa6f4654154fcafe3aade4e222bdcd0b3f76406cb5800b7e84c33253697cbf1d58a0979b3db8b82d686455c4a44fd6844a0b1f7453800393bd217e812911c1f3b52e619d23a4c8ab15997e275cbe0e3bff3c4a95c750076208501e2b11f9b0be1098138c21925c35ac4345b90c26614169b8f6a629200ebd883acfd5fd3c241da7cb4be1de3e86e2fdf70b4c4e7dd0e05c44b9edb93002f7c9d2cb232cd6240e47020f0e0b418873fb52c5521e33cb04a8e09bd6fe2003c8c38e3447019557b02f6ff9ead33d5844e29a73c91e98a6f8938a8cd13640078439dfb9d3fb0618999969f583ac2d5d160c5885b5a16fee536aa4657ff9100e10b7bdeb39bb1f8ee41c97b92369fa8efff1440d32e796f92781596be60dd00e00fcaebb9a421c345eac75093907776757432fcfa2c8dc3bd115d4491b8d000f257b23f58041d7d6fd64d616c55916805b9a7795c7ed0d28ddb609395dc2100b8826797b0ba5604cee59189f72bdcc4ba94490682f8ea11843dc32aacdf24008cd8d0b2eddd83def4774f0f09385ec91172dc1526f6e4f609f12ea42ff53e002dc08547c2b90e481639476e237e78e67545ccc896940c3274387d57dcab53007851ecbc24b067ded869415c24f6a5f18b73b3a99ece21bf9fbb476e50fce5003180bafa6e9ab72abf9af928da964fb7a4745274fd7d156ff88dfc479377e000d058cc585c9562e472fcaec5bd22a5e5105df9dc155a350d9156837c0ffd3f0083020073e7f5dff8dbcb23cdee9a41b74968d7af6d09863b7651ab65009b150029f676d92ff87a066969588d3c47f0f928922625855d706975dbff12fe30c90065e21bda89d23817c1306badbec392cc5312b87ddda0415b40cf266e43e1da009412c439f6ba476621665825432152ffdcbd6cfaedd9e4cf5cc627eba000a100d6e0dd0d850999fc1fdf146f38b076c6e90760b8b76a26252b297516208f09001350b7df330ea90864ab8402ef262cdf1d3bd7e48ff9cf5b342aade285959d005abeb23348b57814005fd555bcefc46e89846c5b5187b0660dfb54352ecada0012c1426d079a7af9e684cde23785d488239eebd3d1ddbec73ca0bde877326a00eb00748a39520110520af77961be4ee2cd9517ebaaaff371b22b36cbd82b130023c1015b2b70875f5101a71d0cd832d409264bd88a0f507c6645b89c4ea91a0011f2025f834c5a0623441b7b71bc3f34b056321b1cada53f60146db7a0865b00ac188de1a8e1d60f9617f8501a3dc2c55fea2417aa543f31d7afedc35e94320093b5d38c873b45cbe132877f1f2e0d6f3303faa9ac21b741ad5e6f140541ff008db37e3e19c09180bbfe627b9eab051c130029ba8be671351f2d7bd9b47f5a002f80222a61c7428fbdcedbc1c778e03b1acae1a8d229c79ae9f2a32dff525800f1c0d47ddbb6765202c346e9d3b0891ba2759083381892fe9c799c01afb585000a4ceeb11a3d20b380187b64eb9f9e7cb440ef4c0752ec7018c88fed1954f00060e6a71b86f89d755ae9eb2a6f99a3fab422a80b4abab3fdfcd322ba692f7d00330d6e47380c4199e73bacf47b80d76001b6331f055f110c12f38149c92f5c00fd03734cb4aa224b8ab7086af3b6d36bfe51b33e4d860209c2eb3717d9dada006eba9473d9e2d128d702120b206ab4068e2afb0caeba2ed5e443f87ab94eee00c30862ad5acff8d409e1ee84cc68f9f7d2ae761f512560302a3b99215a43d3008dc88f78df0c2ba12f4b4307d739d3796ef6d74c65b34a39c8808a54607738000cdfb2d6fb1756164ce0062e0fa46510a8060ef85284897876a008d70976cd006983a3bd39e765d1db499ae069b0b0a3cb639ee443c5567b01a1258726976a0036d15634ab925c4f48dfbca718cb929d04a508a8c38de42e4d7f51f1a0c6ba00c05d59aaa2a464c9dee25ba195473e2d0bf9b2c79b0613d4ce932074798c39001bd85c3b021974ac90cce937332829c2acdf50a51c1de0d8784330f0b9b0d70071a4168fbab09906201b40052902ef501d7053202b91999d9c3e6825ca6faa00f6e01dd15738701a06111594d6a8a8fd71d1bc193133243aa1aaedd5e7025500fe6147d44e8acce61cb3a602fcc33c9024ec3646936522093a2584fe153e3b00bbf9806719095a0aaf5a2c030d90fbf22a113c0b9604c0b8092c916a5c35a40036124855ea9880a14d9f4b0af0acdcad66284638d39436861455d001c79286005e719bdfe47bbec9d404c724552803294fb1947fb93b7222e686965591a807002942785f7fe3208f170e3298dc16b82de00b698222de3d673016326d80428300ccd1998090e37cbbf5139e7b6dae14696fd87cecc47bc44c2563d84b028bff002727642871e43f6d433b05abc81a145558dd425bb8f912da3af848092e006200d232575673e585d90733db4e0c31c6c9cb2ef9d8fe1e980014cb59e0dba98e0028f01ce9d6bd7dd29b9da1df9c9b483707730be1fbe532b2a553e77cefcebc00319ed59acba96538736965f512785a9d65843f1f6cfaead56105cf49732d3900c8ccc5b9b044d02a6c7f7abd1edf4335a75a032ef9fd2ce8bff0e653c2fcdb007ff56d0fcbbebb13602253b6f2751938ba706c89f75e2666b1ada2aba6e731006cc67b1a587953f6c1c5eb448c65153025503b59713683fb63a330055265e7006c9c6c4bd81db9414e06d8f01f9a54eb524baa33d3b357685f119d0b9e5de8002517a2cad86ee8651729999c28d85da56b0a2cd320c42892d53bdbdeb277bf0034f091db46db2a78bf238b0bf0e11efeeff89be2cd81a6fa990f955e99351e00b96b58797bed1ee3bee37721d482cbb6024c69e1ead9ca4864447cc4eb6e02001a317ad5b7b53d181108be3500f09ac214f4a739e1adb315d311d2d065130e00e199b98b03a38aaf9c0dfca981d323a92e2a7763ad964d24317927d8f5408200a72855dcc0835dfff7c8a8ecc3c04e65ada0c103e0c66d7255b19c14fff2140041f36f54190fa20e14e8f28f836271c4c2e48585f46f80c41c8df6f9793c4f00351e28a44284053e678a23428fca61d9f3c1bc79dfcab82c269aea5028555700926ce6e407f3d0cf612348dc3e8a8514896ad14ca7b8426a92500cce77c7a40090f9a11770fb90584e2b0ca0cae5692c5ab3b0354525776133664c3e67bea6008046817e4bfda8ec6ad2dc87ad6d410c7cfe7296fed3fd3962e035924301cd0019c678653086ce470601abff531019122efa858b22187235353482570d12970060824678fd229b72c33098a7990b5c81e5d87666e5edd6185887123e4574b600ceda205fd5045bbec8b739112cbe1fe6e39845506fcb0d15e1c0d3d78be72300b03dc5515fcbc87c5d7f9bf4a2a8d6f7dd3f782d7ccc0054676337954120ce00bd06c527a189aa3317fe5671fcdade393033d94ff797be71ab5f8c9b82192900d0fd9ec2263c8b4b6345a4c18724f6fb2d8dab9f7131e960db2ba509bcb01500bbe077f38313d8f020e8321fbd5777c8730faf8185e8cfd05865742a8166d500a74703b6cf023a4c077b38b818716025656d1b3281e05e6685f8e58d2a0a2a003f81ce2ba7bbbb422d5c5f5b3d2fbfa2f0a4ff66dadfc67db6c0f77eaadccf00ddbf75777efef2aea04ffd64266b6ee0aead86070114d10b3b166209dc333d004c24be1869c166a6e79b5f2d63a1a3efd381cedc11f5b2e3686639044e4376000b10f557fce9521a5a2a85aca72349c3c07b745e19a2f8d31c505fcbede382008255d30a625a1e83cdda08376008832da615ec2f6ce6391aea6cfd4669e86c008798ce08dd7bd12b3d13c14a12de6d7df9a353ebb406c04f0ad8b6a37ff5cf00e2b88d405b1e1024ffb53256a8566377b92753114aa64641e4a3f7cb1454ca001202910c7ca1b286284f6d934e93b077ddf11f4ce0fdefa7cf9a24a19bd5db000de66bcb448781b98de86cae2f2b0a81be3ae607bbee410f8ec9a3513aa20f00a59007f6ef2f2a04bdca9219ffc326ab0a575d236873b3ccf8ed24543376ab0093da94e7b39232cb0e9ff74026b4beacf29370e98d41df395070bcafb3a63f00da56f1ec1044a97e8c2f2b02b4847d36f79c1e4c5c020d1f24c3b7c04a5205000e7bf5823d6994f9badc230ee73d8e78327f651bd6c4e7a7846405dda6c1e0002ad755674f3987880efe6f9962e74d02841f845fad1866283eeff58be9467600e93e3012165f1a4bb69a9f8d378b22db98d0ad430a820c6810a1d578add6e400fcee631b2fe1a38353de9dbda03f8d77f592b60d1bd6bf8eaf1e713a7e38a60041811267fd17c9d6b5a43d9c1e0d9368953bbfdae39e0e6a5d785a5fa2e82700df22cbc733af9edf4e65ba8626976a39b0a2cb7e66ff8817a06c74b435cbbd005db63a502104bfdd239d53b2e7237ab08108c94e3887951f8fe043ab0479c1008aa1cd46f939b69479c31a03a0404adf7ec5c9abf7be4d7874b85e719c27ad00671f1c95442d79d745b9a5b1d3c3a2d2f328eda2c52d738ebc54b211fa5ed500c0f10a1c6fd45497f368eec981126c648322f15a44ecc7de5bc089d98a5b6d00af01bc3fbfe57bf78657a459fc90d01a3165d6529d7ceaeec13bb9f94ffd44002d4b61f3903ad3ae3a9736b012ea906196a44e165dfa543501800976ed4b8e001defd6737a47e682eb4afcc28aa064ce8440ce7ad4fe0f0f3f5441fdb91595002be3ae7c854fa2adfc4790ad389a1f72653ac4a8bdbdcfb0bacdf4cfa008ed00331e6d8f6871a32ccb8ada7cef0cfffe8794957426de7f969abe4b1319937900828a93f571dbea9bc7eb9d891ec856d0fe138f1300ff3db6a9a7ccd4fcc2a400f73f6ef1b2579a71402b082fda7399e3fe93aa2bfbd83f1e74173a17e2bfd7001c5a196e476e10afceb5ce46e05f9341e89054a6e9aa55345473b9286da41c00da479d6989dd0e70aa2a4b9aa8d32f1286d1d378f94ff26c6d634b6a5ac77f00082c7d6d88ce8e2bcb4c5c96e97896cc05b2026ae2effc44edbfaded0b981e002f78745c0f6ef10d2ca59867d64683f7ffea9c937bd1b10a3cb7482c360bad008bf29aceac280530e82dab4ce947e41021601874121aa0e47140405eeb4e46005c57956ab1474f44bffd85a4d64f2e71bc4ae2063dde5d47f4ccba5be80e880005ccdbdd7e8f9d988c5728f2a2592866ac2410be8b934a0f77dad03edf11ab006fec00b8b43528e40eb3e4d5285d255ea3c5ac9c1496ad378b751ee7a278880019c6e0da3e53977fe03b50b0d7b3ff4ef1a2271ccff68f628cc3bfc0fdc4c00063325ecb022b0edd73df29dd8e100f4acb9ae67223efaaa4f1a3f4b9bc318f0036ba22f6b3feb41d5430335c24cf27a9ef4c5eef450f604cfad9fb9c2f504100fb2bd282165c71e9d70f05ca1eb6435a0c2c906e825416d2c5a3514ecdddbe008927612907132489894924f4e597f9d8e89dd96773624eec8ca1e1e9a445e900be6f066c7895415375848e69ae4ddd2ac39bc852ba4f7ee097352e5224df8b00f85a0e11b7af7986a415fedbde2b901826f67eab7f8c8ea951c8138c9446590029b3f5565efeb135934da554cfdfbb508552f1b1806aac262f6217a601041e0041199a6877ce2c31f237870dd1cda014bd0c838fc912c0b381b04a7ba60ba500f8d944373501892a3888cbfcde4b6dac2ea68b943d951bf8c0c7536b40e4a7006305691aa80a27f90889624cc0c5069091c1a203bc38f9ac5806135bdcdd6500b50665e5822fa7e0e37b21ff93ba9beab925ba4cca826fcb8b850743d376920042b1cd6cddda206ffc47fa94c8e3c217860fcdc4edd3db4f8b4b4daa4957fe004e5b1d6cb9fd3c8847a98bfe38f182c787a7bfe64551d80b8c9e2012efe05b0023c22ccc02d6361ce6ca2d9658d9a7299c566ed24515ddc51f4d3d5335f9e200150dcbb75b1fb42d5b2f56913dc3313b1aaa1e42b248f794e1949a1d612e520061e9dd3450fb1a164eceefc268ec4e2d51baae25144df843f6e3d4f6f3ae5b00c09673b63f6ad7bef6ff5ffdeee77b0fe99e7e997d43da7d52cc8566354e22009562b2789c7837d4a74a26110391009c8f944a1b98021582401e22d71b8e240032135a43b3d4da57cd4459a5882d4500cd065674ba0c888b0361b0c44fde160032ed5058766d9618eae86be79721d770f07704cdb1a3200e37ddc68d86565a00e971b48dae67b2aa45e01076f9d0fdab33bea54b88a07a02f74418c62d266000059a424b251e93e2f96e67806fe5854beeb186cea19b204f10d2ca72b61dc7000fb94aab739310e050d08d13ecf8d938e70e3e7fb8bf7976e91faf3d1c142500fb1feab1003375a2cbe362136956459c304e201c81a63628d5bdbd3d4c0c0000492e5741eabb3f9b2806c6025e9a9fe06551b7d0f59c13ef16ef06356d341000e7defa80bfc80c014bf58bf0e44d22c3fef1e808bac39619caee8d675020ec00a42985cf739ced161c3651fa67483d533514794a3953e4cf7a2f273ac3b95b00980155adaf0b3d08ac749c2981dacadc8d1b899da116c2ea4f85fde359786800db685f59dae0481b398e2db640283da6188b2bd284c8c07100e7ed9f07f74300544b0940a418e2b4008c4e6dd9ca1681f7a02f4624f6a6751dbb94ef1274f70035c36ff437c7bc2bec862b63e992b579b2fd5e9ca40d054ea9eb93adc222f000c57ccb7478da83ea95b32a05cfd8b88f5342059a913b151c0c3ed9cc8b671b00231c6ea8f2a16418586d7ce86d1599b4789d50d56199d73c3567ce99471513004c44197a73f79381b4a778e36a37fa98f9c194007d1f4a1d539fc0491f0d3e00218fa9e8b1e432135806a53a4576d5053a861b6046ae8e8b97cbc92738ff9b009877b3f169745f047223b29e6deac912ad0fc776c71cb1101f01c20cb80bd000d3150bd8809ab2572dfa4d3b04cd90b3c2f4e0cc69c778f5df979c6cd802300081220f94d1d620ff5d76ba133f2c5df9318d85a28e00b6915574aa83a7ec8400ff539cc97af140635200700c931cf38c9417e59b80977365eed4065f238952000796b647eb7ddbe687bbf8d1edb04fe3d5c1acd50c2ad3088f09b450bb529800e3655474739718722e34b5edf1a3eccae41d62559201a60fadabdad486cc04000dc99ae8541bc0846f5de8e1132c326d071cdaf5591e66b3908902dfa0eae400bb54015b36529ba39db5f81e52008fb238c3ecb5158f34a819d1670ff68555006480b044c88c731c7a76b46e1346b72f855b21f8327d194c42a4bc1ad7a39900a937957dd3dbb00bc1c8ce618a9f65abae05fdeb8816f2721ebf069b99dc8600051669038e127372264f7e1d14e38c44b46a482750e6ebfe049ed6c6633684006dd92493f3becf0c08f1dc6d0503567d0fd85b6d12bab86af720a2872c05cf00bd34016c0901cf4457189e47fa24703eb75063903fa1034e99547e53eb32520011635b68526a30ada2ef32561506d1c17ad58fcdfcda04c6d6d92135e7a0f50004946d91086df06cc834fecc5334357ef88ecdc33c33aa51a99afab3dfc99a00261e2262ff99bebef81f5966fae1a61f2f263da4cad4139b96936eb6805ed1009637fc5f523977e5186b4b5011a1dd9a0fca3f904543585839def6ddf2a589009c9f4000458f3c38e4e5de1f25edecbbf16395e134622a6633291b70539e3500f8facc1947e8c791fc12fe7b512660678e9610191bab9ac28fbe7b03ae46ac009c6e8b2b6e97614beaec7fa2edb631fd54b7c1008e13ddd35d75928b1f316a001dab12aeebe310e439d735de83e3695f49f4619e7cb63bec74491a80606aa000291b4d572e60e15cdb4a6d9a9276cd55424366fea4f74e431b8807bcc3e08300babdd2ebfa51e2315d59c59a3dd27501f7879c030ac94bc1c78499ae65082f00da3d14e624b78ec6229630084092722d0caf3eb46eced7fb5b06564cebd372000b2d5c8d7ffc98b9788f9f15f126216efa2fd8b89b7c83209cef63dc304d2c00a3de8c49fa2a8970a3ba29fe2466c8fc27fcc4120e01116057b541f23054fa00163fce8b4d2a574968858b3a325535106a4ee4ad18b6b9e9d1834c820400a10026dccc20ea2cd209d0021d245999eaf7bf29dad6bba44a2b2fcc1d2b6099610068fb2bc9a07090602e86e40a1b974354f6719d5630596e58fba44121b6cd2e00535c907d01f5c3693004c3434dc2b1cfc36e4d6888ae36d1378fe2262d9aae00d51c59d37ce8680fd9c054bf90455ef9777ef6da8272c1249548ea858ad49c00a269b911a5bbb5e2ceb547468c8e3414f3398dfaf097f51dca9c1ea2149e78007f4b47382555b1298b634c7e6cbb29fa0d4a0f1921be8f87a6c4fcce3b089e00485e6c8eaf679fc2d66bfc17e6fdabe5b98e819b0ffc2ca04870c7630ba65000de8747a58109d94f144b7dddda736d8f43b92007b9b23c4c4de3d22045ba7b00e09fc6669be1a7f20939f466ef0bbb4a2a4ba9228640c58072765f15fef2e4000d9799534ff72ab57d654d0561e81fb39fed6d68ce547d5cfbe629e229451900bdb61752402eb87694b0f4d434e802bcb148be0960bff4a5c9a0568e6d6bee00518090d9685b54307e31b03d46ea76e2a271129768d827df6ecc719822a5750013d07b293cea07ff7dd85451900b06f9ef75dbf2ca37b1609dd705b6e17cf30022453df34934509a94dab058aaea60f37ad73006cd8abea6705156ce711b5800f220f712d42da63daa442f2faeb3ed75d03300db15d5500da04bb0f40114fd00ea670974191f0427765fa2b39d24eba7e25aa6b5a4eb9760a6f84d016f0492001be2b9b6291948d09ab8adebf3524aef6cabb464d45b12750daf70c1e9aa7300e38c004dcce0d91b3c55e8040f093c16dc071b65a32b474eb811423370290300cd69ad3049d20076911eef02cdf29b4aa8cc506f22c5cc1d7a758307e6d7d10093bea3a4c60d415193b30e89321312c62ab63c5f4d958e9bc282ae98ff6fb000ce7fa5a0eddda6d8d18d2509bcf9bdc1963f9bede524d59cd6376620f9f56b00521b5e2efd1b43c151ec90183c3ab2fbc3e225bee715552b6faa6033f70bcb00fb6308d38785faf2a80f6ace0855d261ae0cb360bc5939efbb305ffdd2c62d00275709a514ea4125ca81e28aaf85ea592b86a8f0784aeed366e8f0a299acf500d7b24388b2f063e21d7b04cf226a59488b1213f34d2ab05399fc1c05e3589d00302496a43dc2ae93d095e659fa743e17600bd6dae5aa1b4cd4c52f44fdc3f600aeba2fd52e8dc8ea720fd0362605ab8423540efdc04a98c3cef02bca760bf600d0b57aa1e5199acdde3c39fd6749729a59a453df6750c4ba89508e36faaa33000cf54937ecb441f34ef7dd1efb2e8412009a5258027732cec32529af91079d00c82b92260e70cbf4038b3d57181accdc802e2b1de0089bcf5bd7a8ea982dc800bfa5c18defc45e19c4bc1777bb75ba79f25d32463d74cc4a4cb22bb09b3ddc00eb59a4c7f1521e6e7282f828772053041d7522df21fb42795a041169b33b2000c610e7ad1cd21c47308cb83a5da99e7fcf175025851aae3c02bc7feccce0ae00a49625014b738dcffceed7ef52ec85ed2aa408823340095c2dc35bfc3c22e0003599e6ca421eedcbaa04cdb1ed0ab49dc1ede38fa58d19d92a8175aec74a5200253ac705e65ebd7344c434fd839530dd3395eb1a26efcafc721bfdc2565dd900b014bb6df3d0927661309a78985d1f3c8271ff3ddf78392a269c83ccab68fd00e0cb790fd742f94891d78120600dbc77ec290a80795a5324d8a70d165dd19900c5e5f81c9dcda763bc89df9a364db36538f61dcfd9edffc72239c286ecfaf50099a888aac10aa34bad4f26439bdffee1223d6e8de534cde399a07b77235982003302c232653fabef245fa839ebc66303e7dcbff605d51375b8d6bf87ef0ff4009637d0d541e96eda98fed92bc67114fc5f21151c194662a31e44a07cd1c355009713aceedf474028fe799cd3aa98635264d66328ee0cd041819d4cc2c98bee00a187c430f96a6ab5bb47770b7959438d513cafb1db32806b45f463e4eb317900988692a371fec2e3cee04f4a4642b5591b293f7447cf466968acc71669b76200e2a5f44077e77594a7f1f1f68353f1898321771894080b05b80c9eff8d0ca200ff29a2208b4d1811acd515bf4ee9c829970d6a227124eb5dc48dca7c6ad02a000774ad5f5b01007327cc1ff8b3b959ba298a09136a881a697da34ea08daaf500f6fc6e6056b749f94e2bb61ecaebcad6cf6aea2db2cebed20f45b310ab8cea0014db6cb2604d3571569afc5616b58ca04d55706ef368ef0ad608c84ebe8b0400839d4f0cdc5b5828f41237c5c24a6c045b81a7f1805c8c3c5b6830ba3d82c400579e70bfddb7fac58817d53c0bf02f42844ea7ceceed5155455ccbfbced11d00b22fa202fdd2c3f9641f704e305dc93675f6f1426805a6da21b3c33667e6a800a0259f4ae6507fb83316e1c23ed4781af82872d63d8c6771eec0887522261c001cf6587c86804de5002b950dd850d0738ad3240b56f4881a5de85937d6f28400b7b96a9ffe28e52e94ac654b0a85c3fc45f04a85b9c106f8a59525a8b8faec00424fd508233c917dae99d9377f96d82b75b7c5775355f1ace8a92a062641c4003984f8b4b8e3286edf1cd9c844807b808a9d3cac327931a9fc2cb75dbef7fc007208b30a771c41fec59850b3c8a24ad1427a4cbc352d39ad04b1d5e3a1eae400e793378a5ae8fb78fee511c6f459add843233b63c10622d0a90ed5b8d0d32000e1c04f2c22b4e15b91643c33fd0cd1b5a6b45f85d42bac9cfbf73d7f2f11a600bbc70fd7c90ffa0f6d1dd5bd1fb7baa86f00dcdf466a019070c77f5ccbff96003da086a71dd0a62559e65704034b94069830811ca2bb4022d42de353f63f2c00bb2875f27d05c14edf7076aeaf8ae7baa0e3373d035af24324f6f6c1b802ee00c6173d2672e932e72a8224626d8c89d86a97e715db500f2d9d680930a55e71002ed680373dc04590237758f5a31784988690b08c17dfed9c0d756aa1d233a300c8f74fdfd1cfce427c5fb02747b481ccb4a3ac34c2cd2c304ade9f4e846e2200054b76411004b8997e301acfbc89787daf81d80c6a6962033ea6f6c1e747290019eed6fe55fe94a4e607ccb31c884713033b821ea13167cfcdde7f721c419d006e514aa67b5c1232e03f3f1a188b0805227b3dc84841299dd66bd7ccab16c90015dbb65a721eb4cde17b4e61e7447d6eb2a720e3a3d59c45336f09d71c9d2b006f614f433d2e1cc9a325e5e33f525102bc80cee2bd7ccfd9a5e5041e68dd38005aa26d15ad4d4f8b69d47463f36cd3325f846b4cc7c006e39fc5c021e4d46c00c853e13ccc4c2c0c2e99c6d75561acd5e373ef64c7ebde909edf6ddb54c10c00ee2783063cd494e0fd1030aaaf450a1a8e69f2091b793a5c0c6638d185adc0001ee5214378ec5aea4dde216dcbf5008542a2e40f4c05b4dac4f5928a09d8d80081f6540f943f4b0363260dc986acb016128a7b6a56bfa5b631145ece97ad5100eeb283c4a3ea73b41587e00a4ac43af764795a6e56011108d734ad256b58c70047280ce36d4280909c3d660a1ff729ef6e242b50693fb9ac93ee5e7c914ff100ca55d70cbc3c3d5898818294e4f91290e727c8cc14899cb3dc6fc8cae8e52e007d81c18ba1bf9acb7e1cd88a67c030ab237aab9e0adab89ce299872ea2abad0099b8097fb684f8b31ac650eadf3d41524a085daf9dc7a75a57d30625376ea900d05fefc9ac224985731c697b986984956d7c6f3d10c19efd66468b7cf6a6ff00943d692587cd53ed60c455612c3d286c920f5089966eec876be481e0ed5f3000bb56452dcc3abeea0505ae17fbfc4b7ad8c689cc2eb7464aa422e6a5d29bac0099403692c5852600fe2fa0807461111a87d17f88de1d8c6883fbfb132cc64a004c3af403ff9c0f7cd5aef933c4fb23ed5081f4bf1b20990555c2e0fab6319b003ac6e7f93e23397233d063b9ce1c3b15953646959f53dabb17aea2435d204600b7df7be2297a99ce8430ca242b153180fc9b12be3c9b8235fe5b5162cc665f00d2afce08302a381dac6af2b262807f46f30bfa2326ec6658cacaa3f2c833af00755369b9ba4349a8bd42b132620f7d6dfd2b430537fa79b38fedc9a3b8df1c00ad5c072a46c52951ade77e4a5241e5ddb8c3d2d3d990af3561bf303716d171007089d4c95e2deef8519fdc03a8b8f72e034e8e0a16a10498c628282e1b618700275f88355982a44303168fd7536a6e27654eabdb6848d9ab91205d56b2edfe002f406fbcf575a70739ba4c9202c792ad2f88ca4a88ebb09493f58d06c964a2003876af82c89d3caab84f07abbe9f56e8aaf3a1a393a60eb456f79a387a25c1009e12c530798c755013a073adb2ed0dd144ec66e8293cf6626af81fc520d3d20047c052281c452784b5c891a4a569495841e3a297f22223e0d7aa4e8f4d90d100642a50b341cb63e72883acfcbabcebf79c0a965752e090269058e11c776b9d00d9fe3a4f9733111956bd1c53e397ec76f9578729beaba5046a18aba235b11300842d531a8e809c05cdf3d7a33ec0b5738627103789218b15526e012efbe24c00edc48d8b8e464cf88edd8e3bf3bef55ad25bafa7d76fbeb222cdf2738e7e0700a40b7e0b318463cf491707014c232b2be24bcf7a721db15077102db2c5a2f50085c57cbb8722117d545133189572fe8c71cd6df8ee34b553501ed5945cbb7a008a70687aad09c4c1f2e4aee315fa1de1d37abe2fd47a3f006f7cf2860a6b9c00882e4c4fbb7ee7f987462cbb694591c764802778330696c26c5d07789b9120007d604c7a8c6c3654f1faca9163d03c4d73d08fede7a24be3244a8f35571b96005bd8d4cd11c8b47fa59384a79a6f7398aed6d772a9f08c370021689a6dbcde006b0a38a387f290088f3b140e3c8a850fb5453393fc3c89bd7e944d79254d29001aa76379731b93c9e159f6be337741af606f00c9fb723c3d70761f6ea18151000d90849e323d1545d1472429fb3b905354e98824966cc44369c3fb3af34565007a8389ee37ff79082a92bbd2722cc792ff3c70227c1429d1df733e7c834f3b00f83c325ac760c52ebfe4ee638ae6cb77f45da610b9d39043b307f2c3907a7f00ad182bc8c17c4e3a11d19faa779b547d2480ff846522e33f0f0c49d9d08974005b82fe04789b847814c210021c4b8cc4f7b1f169a9766f07fabbfb08673dad0033d0fe7c5ea41187545676e5f6ddb46cd2178baaab4e62a336d6e787b87b3000e973953cd3c8ffc9f51828941cbca649de364b71428704f68420a862909eca00fe54d5d2257c12b31e0b772590a2902d468cb5ec85fd26784a297f00ef49f700a5cb8fac880d254d21b83ebb10a4852a1e10dc4dd8991eab9c621415d6962a002da59d1bcccce5e7dfcfe6cc3296bb6371f0a1129ea7697825df54acc2c85600c47521950742b2df20e82e49bbc6d82876911343652f997048c1cf0bd14628007a6d2540a51198cfcef1e318200509d671799a00766025bc30a26980c083da00174ef04177353ae29a1522c9a5b3ff43fb082ac2e4cc8c53d5ceb34aaf71ba00db897beccf13683f23070b932033196a509b8ee62c11bddd5a67acd495e70a00bb1c9f8c0f9d041341564ec8ae4aaeb548e5d96298818b028a71cb29374b7b00d95d8c86313a14dd3dbfb74e246adfef78edbbc1383a86e1ba906c406189730050491a5b1befb0e3820f7287b2061172fd51804787657003f2618e9c7158300065a4f0f8c9d8bd974eee5c3dba06caabf71c775bf5f1dec81127e6f8102dc40073d37b824403de02515d147f398901d3531db682e9c489c6ab3519bd266db7004c2e8f706605a246604dd298c92c5d62cdd6eb605bfcfebb292c5dccca8eb400fbbc876c40af0f4d6b69839167150b9e531dbfe68d88e091c1e717deb9e75700c8ec6012e5b307f2df4baaec48a9811ee0ce8237039a4ecd7792bfe304b52e000c208f8c81c4bd1738ac2fa5ad79d9cc5fad37cd2c05792bc619802f3abb050085a571a94ce4894e276100327ffce5effca01584bfcf0162eff03ab904b1e600d1a03111750e0977b61f860d56d2a1801e67e46e19ccf31cb061d5e56ae68d002237ecf6161cbbffad4c845798216098043d26d6afe91c7d1bce96316f4fc800caa7c0db7b8362181f280ec0fa0014f5610473cd7d339d3b2a11b978fde9bb0072ea9fb71d442c17a4dd105d29528081278775eb86dfa54d895864c0d16c74002bf746b32e349ced7d1bb389514ee03dc13eaeb77ec72652ac48caee96c75700f5aeaafb8784e32d3975a1582a2a4b316022465aff2d3a8d365a2a8379c6530080dc6d6c1cb6b8f0dbdb5b92fa67a3febd60de6dfb25d0cf75800675ce715e007b26c738847978ebda93a76b18f1c1679e85647231c8a99b92b125ec61831000f1750389e001dd45a4b04604ebed0927f661e5179a6a27f8bda35191e29b3400eb9003377f67de461014ca2a79df6cdf577d2e64d0006459216ed4cfbdebbb000f6ddd134d26ce05420bef6ae55319ff414049c282d70e9c2febd8a1aa425400c248bc7d13396f4dd3c2b217eb0a890bbbb755962c972861f0259068d6cbe200bcc55c5ac66f080efed3eede871cc43c8657b8eb81082902478bb3de29fcec0078711be086879209c0069bed1ad47ed96a3094476d3e197ace028e54c29bf90087b5f9632593c411b59e73991b8d164835508eb45b62dcb82bd12ac5c828f50070aca9d000878704d40047dbef97daa3ff8b16d221a940ff3e338425c05b8c00ff4f46401813cf6bf87838a7657db80e9070f64763861ef515acc2ce46b4e200a224d3ab95e0a05615523adbe06a887b13516f87cd6ed62bae35f92162a8cf007b133f49fae570608fd4f40cb4c729c9ee61440b7ccf52edc412b3882733d600021017700eb53ba31fdc250f72d213541e94f41f256670de13da5a75767b1100b38563c108cfd1ea8862bd4b35b5f770eefb290c75f9c6051156b5fa7c17d60040799d25981f9f642c6dfa3cf7717ef6d70ac23fc99996125770fd80da704e004590c90b174b237f095fa89dc9da1ceef4e45f79391394d25ea81ae3becb07004dc02fb48a8f0ba7e38f8fa9b9e7c2c93700b7ae1d424d2c1de43d97e95ee700f1f8a9ac4e78db58a0b9e2e10b21fb5c462803a21ba3a147b0463f47dae12a007cebdebf220994e86de03287a410b8491fff899aad1de33db3fa5c81576bb600fdaef9026560a2ee651af96d130dee9a367f936245a372822a6af972ac9c79006fd5207228c44621a4adba861d67a2ad68a6ef1efb98676ca15ce21230eec200a43980e947cbb18ec83f435db0fe8feb2e62d51a000faf399f1da7e3fa8e7d00a597bcfd96fdc52b24d29f67d21952b229b5133e7374be29bfb42bd793c6d000b7d8a4f411102810ee110f55314debb1982567ce2d817dc7c32c093923d4db00d0de93475879301c29f5d9d1fc74f011ae342d31b5648fadb338198a55bb9800d5358ff22f9be996e6d3bc48a553d829d578246dd809305b45d7dabf1d7b09008c46d1083385d1726bfcdbd3bf9921ebee2dfac87e5b642350689a6a4bf3c0006a28d2501d1a58c76fc4d6dd8a28bad56859cac0481ea248ba440df419230a000bf730432ae8895ebdc521c491d83f22ca6389eef7d298ce1c1438bdff990c00be1cdf87a3b4e09eb96d1939296a044da7abe6f3304bef25d6633f04a8046e00ca5d32ccaf571be350054578a1e6239f82fd08da59f32b25dbe28d45a54f8200cd7e3a0753cbfba240742df4daa07835a893a0f38749e2c8d83ca23ddf706f00cf06c573f00e74913235a077f7a300bd4241b8a9a9a41187a20e1c194e32ea00417545f4bab79f3fc16008a003eab63de427149a783c78850c2e1a3a53774e008fbdd9d95b5f51603ad4b9554d4d51533f0b5ee68959c764a08bbc496047c500a5ea3132d5479b3482bc6b50b500e6207b827d4176bf3281a58c4b8964f41a00d9a32cd2d8daa7b92e5ee045a03aa4b3d80850a665177b6bba31d032d2ea9d00de83831819958559d1bbc2f0fa1067754dbc3dd9d5c0ff7033ea6a951aab67006b82d5f20a6602fc587949b64729246b8a643f356fe7321c2170b5c106180d005713c73c3f13dfb6a4b95cf74760321d784ec9cd4a3f4378777a1c29a61ecc00e6b2a5281b4b4c4006ed39bcd7c9835f409a919329f7e12a1fe5acc7e143c60092223f4da10fcf4b3607f6fb348cc1e3d77ee739142fafc3535d40bcc8e6cb001d9b9ca26a2b4a47c380bb8bb37aa830a44f46e0de279343bb819332d0bed40014d5bb9b42ac0be798e00392b63b1b39e469b6d614756fce91bc64beb5244500973b68df711c521f04c9ab1366ccb7e71efa974469f029b82bdfb8f32a3acd001bb430d8e0476605e18f175edf783ce6a7756799f2758c62c984b5f0e984a7008e09996a6d10ff1ac09e9655004f4d7a70fd410d83312ab05b49ae36c004ba00507635aac4d7b891d6097c792188c6a879bf2b8e1b176ef27046aab420866500da1653825f7b2a8f83170c9a853b8d8b8629b2af30b3ddc37642c27b96164800e8b3f84608a436a7c7b055b0df4563190a05e4c7d8a8c705d3c52019e63fae00202ebbefdb8b2bd9583ea246b782063cd9ea112c84a8153c2d790fedd61bd1001cd2cce30aa284112e3a6a844bf6fbd3a3cb2f140f5693bc42b20420a741e80018d5b9d149b8a5a35086ca5d2cc4983989f5c8036f7c86b74a309369fb82ee001cf8c341f916b429d6101d27080b3acfff14ca77f5453d3c58aab23b12dd4900f9b9c79de2a2ccdf97b7af95f015058ea5d407cb2053972d8d04dca3d898620074991a56cce1cd127c1d50caafc359b20eb7932d670ec6b7037f52fb31deda00a54a123c4525c350b6e2df0ed623ca80ce33fd449787f8868a20f7dbb3e722001f3dc8d432f2c587452e77c6eac8a526dbba22109c5576cd275833ef57642600f2e8cf048cb97c56402ff774ce800e8b2e2338301870839ad350614327dc060055b037de545af424579eaf39bc9e58566326d4242866f984b3b048b3540809006bddbfd3c865130ebcf60d9e90ceae0417a6e7fb0e0dd3ed870cba1a8c05b6003e869693d8b16b33387672e4d14d6d9c180c5f088c2616686be7f84de7f2e300850e12f7b736b2e3e56b177d2a8e70bcf22ff3f0658a5f36e673f318e8008b00247e6d5f86748d15e6adac333675906cbedeb244df62f10ce61e859c88c0ef00bdad36ec686e96235dc2477cfab0987b803e8b52bf6061a5ddc419a993548e00f2b87469939bfc89fe6225290d3f05fbf691667e8fb7411d48f05541945c4400f9da36f7c69129f129a454d5f6cfde06e7a6e722373452663268362b5e336d00ecd848daf66d7c2fedb670020f26e213bf3467398bd447624db575129134cb0005703b0cb10456126851e06cc611fbd3e3ac389f03a2df0d68ddafc55cfcc100d3bef6f5bee4f14d3bcca02c52163137e53dcb2b8a0315711591dd8b84622400e7930e23e27c8da4ce024c7d5cf9df9154b169722b1d9f6f3d00862fc4588e00f89835ca27441d0bab037eb636cb7eb684f5d126c850d0c68c98decb692ac00030c0acb9e24f295c0dfa49487a22d07166e3d3ec165708419b73c56031bcee000a9b7c37e49dcbde86d1c2d8fdace230533c3da287c56e6a143da76a6d824900b01e48d9ecb841040d4f574b9335602bc6a4d3794e263bfdda4cf20b2fc05a0018499f82e25a51e27df46cebea1fc78f346b5c05309d088f0da6a650d5fb08001aeeedac7d5e0ccdd67a0ee207a54059d8cf970842ec118aaca4608a1338180062f916b3fc04cd6f5508ec8e44b7cfe6967f9cdf08ec0388ad1fa5dbab37e200b833d3c82df45604a65051e64552888769ccb51d4dba4760dedd0dba7ed0170084c4c70e5be4bda029eb8fa1c893a57381cc8b51814d890f53add656e565040073361525678d2361ff3c91c4423eb5788e65f77c57a5aa0c574c47e46afde7005d95105f0ec7a8e9ade5c833a89f2cde9b80bb450ef1d0f21a067a9c508ca20037a903f920f04bfcd0995a2a83303acacba27c42936a72828f44ee6ee498720088e7816ee9969010dd19499b0e3d1b287b1e640c0f28ce9cce0dfb35f2b7b8001be3c6d4e33c1d217fcdd97b6f9e737ae539de68dc3fe82b04c487ecead9e5008961a4f7e6bffadfb4456204503b6cdb571fd651d3fc29b98ed730a8dab6f400a6d3cb12b903f76987c8fb1345e29268950d041658f7a9cd08155289c997f8000a7e1fce7142617c96c7429be4417ce0a7c0b49acd5e912121d42cff70daf7001effc24547b09a3a2730037a5dba6fead9bd703f5b2343deb795eff0a7955d0049f4c5669db52589c010f4e2406241c9d65c8ad14f69bb7cec8c63d4166f4a00f9f974a9dceb1f011b45af3d2565652f8566bb2e0829094bdb6f5073f2dfb0005a9daee79de035d499657df8ab596f182bf83cb9774c442a67f18e7a30dea4002ccf84264bd8c0e27be14c9967eda9e450a1aaa4ef5ba38993cc1ff4f78b4e00a12c0741bca53149590c77f7b74c5b36d34f003dd549e249c732313efd453b00ea1b0c4adbf0b529968ef12e413e0975894cb32d90b2a1387baf811b7b67290071ba477d7e6251c390d1ed645c56006a870cf540c015d254182cf6c2ecfa6a00347d711cb2da959181625f71889c3aa03ce0dc33fdba0b90815b37812f2df7005d6ca4e0cf89a63b1b493f9dbbdd5ae3eff0208c2310e49a75f6566a228907002ad08286a674488da2f5be6690f4adbda2b5fe3077cd3928ae0fb497820e7c00470f7b585470b2f41b077d1543c373b554a8f65bb8d000e598fca36cbc3d1100f0761a31fcd8b1d2855aed9feca88f0ce3aa81497ac8bd83bc0b534e8c694d003910a369a7a2e3c9eda356aafac15e20d3ad9c69caf337595d78a9e5bd776a008a8fcccfee98ca76f201448243c0baab051762a12e17fc64b5d00d84a72da5007e217ed04c90c991791c4197abb50701cdb7e48d783360e332d06719eaba50001e048e6a6825e7e281a0295872d646d244284db186614e63eb295f86ff656e00c13353f6f52856762f01716ed0b34674335ffcbef83cf9fe2524a6f848df1700845d51edaa86ab5ea659734ef75aae9418922dc425c1796baa10a996325b23008bc95e462e91ed771a01aedc6e0dc5064d0c4771d0040b0321dd990102dddc00bd7f61ff8a029a4519e93e160755e2784c5436fbcd141dfbfece514efa3eac00b3516fc7457f5ff715e24d2e578b3cf54c30ad2e799b845c56abf22b7097ae00e79509ece61934e00fa10d28f4997ac4a1c82bd9df56c4d52d6e3dd1b7ff9d00aecb5b70d37c28fd5cc08a4fc4484c7411512726768f0e3a56d0af46ffe1fe00ac3115d6ec640238da86162859549ddd995a71f5f5637fc3a497684d100a5f004b1a733a58e301a1561b48fae53353e0a1fe15a73c1ca8df88dd78b3c480f300c9938c91b918f22c0918759d9dc4efe86d6d04807d9f885d72be3a468d82a6006a3b284989a9c2c29c6fca5370a130340326c3845c97577b9c6988f62f294900dffceb89bbbf1ffab48a6dbda84b131ff1b00f2bf2e32f805a9970174583b500cdb9bfddc59eaa5530d9505e767c4224c72f274db16dadc0521eface0b94d2009f9e43e37ddcdc4d78e77b12b2d2ab3e69d7422dc2b21e35974f4c30d6bdf300c39f81b4e2dab25a8343a3fdf734e38ced5b50d34bbc56d1f2dc6feb2baebc008a04c65ec0ac98d1dd34c5e939b3332b1294a8e33e261a73cbb3362a7299f300db35a1e5eaa4658ef1843b2a15947f4f283a6c5c2ce93a78012c53d1f4fdc300366248c0d457b49744b2e70d0b2a32b42b49d31b84387b9bade30ed5e73b0a00047c7420439fabe0a8ee4e66af39491ba31e4f86c85ad3fe429c41c8285b9200696acfe066045b82a56fcb87bcf620c59485e29b0e921da1a9a5ef9db34d830037b088cf8757d1deec8c1c63f2a8a76f1146e63ff8fbe41b80bda976fe8732002b732dea63a9ff29588ca3c0472c14a765a93c9ac5c28b4b4bbd8403ca040f005bcad9f9f9c459dda0574c433fa71057bd33ee81d8c5c12290df52cf85692c00710bc9138c59b7819a6b9371394d383d5e2324ac4cf5b9e28ad31b04ca4dd0004bc6ffe48f59db58ba4319340c2f83c3c7642e663251a35c08cecc28fee1af006e2f9b744fbda8fd457009578b9910864c55b11eed81ec73b9493773ce6b260017abcd716f5d7f02c0096e680e431499ae1c520772fafa58e64380675fdcef00373a54a74eff10e3fffc4be2f5e15826af6f5584c8fb38a24f8c3a4996218f00effc6a0f732212f236bb93a0068e07a21624ca815a681b4a3aac86db6bb8a300a14f182b8e4aa5df41b62834a3be22096729be437a79ecf986d7bba3dc380900eb35d39967217b9646ad20aeca77805a074db67756c213627ae7cbc39a3fd10070443432041e0262c98a7bb90cf597f3d996cf27f952fd509734aecd7c3fa300c166597901c65e71eb531e043d1e3d495c744a49ddfb15776ce90893f5fab100b2f8d31e1f73af643aa91073da1e11b590b01e541ee75c914b32ce2f67f67a003fd5d06ba2d530fc6105c399bc65d3aea1846c5e064eb34eb65d4c28385b9e00a6442f437ea53ab065d885d265dc25c620d2654a622ab4ba7468aa6bed1ce4005b6b73956f85f77ee56b3a1e8f3a011cffaf50ef980427e7ebf148848ff131001336100928cc1849a0bf8ba65c2e16fed4fc1c087f0ea35c83878e953a0d6f0007bca2315a9035bed045cc03cc47a8bde6e85f5325c2a792f560fd8985cd5a00cf4affd3e01143cfa44bfb9282e4103ed8a2750b9a7a37647ce606097c45b5004115424d0fe50f9fa451ae05450bd1c71eb73c2bbb419046bb9295b346824e00e2628945330b9d99ffe31dca09a9f16598cc274c1891a55adcecbe9874a9250038be70dbe1e204c4859f63a5fa928a3e89fe45bb26a6ec7bacfebaba8b1237000cbbc59c0d6b8176d0f8e3d36efd889438315b2ac209cb96e15def610f22930057ad475661953707809eacd8fa6439fba0cdc344072625e2702b7925b669e800dc88bdc5ab4ee19f7a4ad65198a98754d3ba8056ab878fead989ac9896ca1e009013ac98b36e2d548eeac4f9b9512409fc89365509ef25ca4b3d085bf654b200dd632623c619a0377f52828bbd37e2151ec7063f4194e0042cc512b939e22300f566ad1250e74a4ae420de7b10172997d800110ef379b7e15b218ad4e7e81c00eaa8196174bd0ee2c64135f759eee3ddf409c8217fbd8a5634ab7c26574ea0007b06805e7cf605637fdf441182925af2f855079e3b1057f89ef8f0cab3c48900961f5248be54c7526de4407b9a7f13a1a77b9d077acaa686548ad0c078e196003d213e88b9c542a24c380c3e08e5e3342b2c993aad36e0ab5dc83a93fe994a00fdc2a2ff320f7b8454f70cc6fbcda44c2f07bc13273d230d30310c3982c3bd000f8be026bf380040523f98720c3315e447878bbc6bbb1d9c5491a839aacad500b6600434804f7be7c4a1a41c9f209cbf4c356e8624ae5a2055c1aeeb6ab90b00a08a5fa4204cadaf55426d3a357b27d797cc4d7aa15fdccd028557ee3bc6ba00ac6d80a4701ba62ea446561e98b2edbc52135ea4fdedf344bcdd7471d21b7a0014f30eb6ad56aac94032dee17f94b3488f47640fce735797c024af52d9736800dcb7f82d72478c82d59a7b32ef6e24429319ede1e9f193395d99c2b85117d2003a183f1203e976be51a3622314447a1ee1e998c300f6507657634a7fb85ccb002671f80c862a89673cb71a2f112d15c4d8b590da4d99ad5f6d7e7dadfc406e00a5babecbe955e093265c1e5a53d59e27b1e46888050a57d3a8649571cf61d9000f3778321ac908acf3dce51e1ee5631623275544a60bd51bdc12463e904b1f00c441eeaeca3d51162d0c49407b1c9c22e2d592286c0108164e497cb012566d0045838446b7be0d73a0f1605e51a35e6e501827585cc5d30c9f969555147a7e001603d60d7f586f468a257dd6a6771cf8fd9ca60b5f7fff0d2e4f99f061c172007a29e1a31727d853cb53d84cbdde7697fb7b2c8c7c9f8610a507c7b3a1cb000068be7ea1df5a3a62f6a360bcfc72fed6ade7ee9fd6eceda40415820919a52b00c10da180609c0d9b95bd7ebffa32b7084ae3134fdfaa83f69b2755a5a8256d00b96331af74b14e8eb44659c08bfc2cc781c0aed375263de5c19487740e4ac900a5741788998f0c3ce8d8768314e54c75578aaa650115e2bcd68f23b46ca20200c8883ad42e7f45f29547f4cdf5ede3a07e2f779114b4ea13a7a3efbdf0fc6c00fec6bbdbfd42c4f1b587f5b200227ef451bcf9610d3952351571dd0a9a09ae005716e7531c71aaf1b9c19b052cd614e64945027fdc1116ae26c992f9fe398000d58a889f21ad05bfba66872993a014f9d33898cc4f11a0815bd6df31fb44eb003b27076405da54ab958190ed9ab27fb81070a65a79a10ff9eb073047d382ba0088f12e9fc4556f6514758dc0f7b52935f18602d9214f5bcf824d51e1015dc100e3598c04e8d5025d5845f57cdc5a0ad7eb554f1f166c35f0f43fa141ac71520056e58897824ebd2b96c4399ad89aeedd45da773fd0833ab8d0ac0ac4111cf800f5b5e1fbf623a44e4c89caac18d8d11a78ad4f62f6f0c61146fc3ed0fc61e300a310591b899b7cf032dd4d7e2958bb100fcc77ed276bd9b2555cf8341809a70032eb1453c6c87ba162952402348e07719f51c3be2a0109db82616fdd99b87b00f67f59583111bff12523e7bfcdfad7ca300bfd6d65c7421fe2dbf0cd504a3a00e936424b8a7c63cd6b12086b256e79ca6ed067900a026edfb3ef37a7af144c0034ecfb3bc62f42b45e43299e4bca964b75ddf6b1c22263b4c3e49bed87a98300b5b896414eca441bd0b2daffb739e9bdd7c6f84eefc5ea69a48930d631014b00db176b3c3896bed2557aa5621a1c0fdc77cbc1aa990527ccdc2134a76fb4b800e46cc089a288f6f192cddee2ddb84bf5c6d133c5e6e63e2d4a372df6f6c9db00be16e7de3527081efb8a199b17e11445676a14a1bfa743cd4c77a6b9faa73d00dc5c7704997de1f8abe4537845249918f9e807bbfb4b6dbdc653d6499a67d80012015356be4c48287b35ca82c4f6544b33da12a616d08b841b7c0c5242d39100ecb94dbb3cde15ce5fd69b592d2760fd0d403ec047ab1c76ad830c8387362d00b08f6e9e403143d0e97ef8405976cd692f66c8d6c84a6e40705c515659884b00771af9a1f3ef3c77616a9d9d41540e416b83db9bb3e2b75d3c917d3de6ebba00a122a182487de64921e0f9f82674db37765b1ff31dfc943be53da2954b489700395ff91f6d11b792577aa1f4cd53fc78b0dbba37bff1762ebc8709a61eeb6b007de1fa02e0084340083c5b8d790cde11fa341db347ae9ec45f3af68d4f6e6b00b2b4c85f1fc63acc3baee2de829cbc33cc4d0cdd626c458675bb98fe46f7ac0021470cf93ac4a68c551ac214d87738af855a58c18c848882685fbf73aa710f00d0d1051e79891a207edb082901a7ea4f2c18a9b848108ed207625e7cf1153600ca150c325b9a11449f9f4edcf5eca0daa2d83915065bbe26d039ca63ee6929005de6b88da77b347c0e3edfc24cd91b45f48700de27e5dd3a104e92b6f367fb000f4a0acabeca6541239be13cc4832aff587da7bb5fb461fabdf8eae1fb3ba500a75f0016f2d12339a70a4f0b791ce73ca905ebb268fb8b800049086a7fd961006575db8e1999aed0d160c4d12ad408bc85f5c5e580a0597e747cc01d4e852d0063617f3b87bf66ee8f991e11116428e693fe507b52ffaf8e9221d5769c0110002977158e0c33891bcb2847dbc8f0a0dd682ab562b0377d9addfd465d53d36f0029f7f7a814392dbcabacfa7623118e642d4f560bcc3ce77896f9a1feab5a4200f6ae42a99d2734ac9deb71e078f34ba1459f0cec9a6445629439017ac84c8c003198f321e36849c9840d33550c28b2a9208572d053db5c0128e7a9f3a5ab4f000e030029807a45fa1784bc415204b8ea5851a1b49ba1b0f8f731e3645ee96e00fb30d342c0a4b98bf2081228e3c284aa5de1f6e81aaa93c3a7f7df251abf5c008c832a3a631cd7d142e74ead203105a81fe4f4fe171dd22fdb7bd1ef4e3f3c008c3f2b3fd6adaa1ac0f14914b3947d07ae27b07d27651b847a5e96e9920c61008952bce43ae15b2ba104b8099eafef0c0ea67e31a4129a9b5b57153e3b39d600402d8fa334ac6fad7e0142e8c22ec186f9beefec3421dbf6133105d82fe19a004f9ca0f9feb12f7b6775a9297eac5e7c2fc3d3e41ee7842228d5d51fd615b600fab8cc31422c7f542ba2162960e155273532a9c390c719ab9fc92812e8e4c000fa28f39b76bfee90a8e16c961d39efb874ecec1eff1b681beac67d7b3e368a009414e5eadd00d539ff2b2aec631e6bad7db2d939325bf259c9ae0667e23f8900a0c4c2ff4683ba6e8084b35e3c430ed9ee10f951669913e839b7741347a52e00adf1f60a995bae181fbc9a4d8778b3e42495d78d72bcb78fbc88573febe02d0072ba393dc7f12a257597fd2ea9b17fd436d4ed48cadd2dff1d316ab8cc4bb500d116bbc671968fefd7bf6450e77e7d7174c8bee3a0f55312d846a69bc52a9f0074ded2e5e57f0f8bd4c6942ab741208614e84686b4c10beec7a890b49b9ce200c3e2981dbb82b15226add2205b05ab547e9653e8659b6cde6d4034480831cd003c12b0bb94c4769b222aa0a267a214a55bc953306ac38dd23eae1736257c1e0017f7b51992bbe9f8199c74ca29434642517572e377c8110a2b077c482d28fd00a212c30a48fdcde7a3eead86618a4d76087ac440255b0808090d7d833ca56000ac7a879ed81a96a55622187785c94e999ac246902b883600049827dd8f825c00d7d5927a0c634fa2108cae79ab70700810217e8eaa2eb0a98a0a53778e63b1006e5c9a60fc26d3d4e5ab34f9308b9c045c7ffac84015a78c41c48fb409cec4003826dbe97c72b7d18ecdff776b7753438d3472bdaff2c1b5663439949acf4b007f071cf6fad7dc0bb77870d14a26d1827b74faf8b355d444be1304d4ee70b200e5a80357a5e7be0dc5250011ae6ed7cbaf0f593eee770c6b4a0c9a6c14e3c10073943143dcd8f19648ca076dfc9f1d650e6392da20769d2a6f605a3200cd990099085358dd809a5c7c54c130f57525531cbe6cc99daeca3d83463e1326f7d000bccc735f681a9412897f83472fa1face911f90ee86279c31a50ef3d17da47e001f84145e90421515e1aa7784ed3e3cf5755d7886ae9271bb4382ee96ed03cc004ffa0fcd501f23185ae2591a657cb965d63c9cf08c297d797f18e72fa86c0900ab7cc58ce0a6c7ccf60ba9ed9ba205eabecf0116fd21aff233be0a1643b9090054b36305310d44062aa171c9b3206b81ade413c2905da8493ca144d3ba0fb1005c605f0e461d290a7805bba3b990779d4a6dd7f855cc5f1d6ef5869cbd712000a386b2274779a403be1901814305ff339d75ca3532a888ea70c25a5372078500dcda2f1c0a7ff5abf368c7cece1cb5a29109d653fed53d2adb4d223a6a0a9d00072aac1eb3afb5572b8b82960760862bbfe378c37103a46911302f1ea74d5800aa57b1864b43190ff945be6042c61945222b9a2a12567a77563207ab3951a600cf4e45dfbb21662b73fb1b92a9360beb61497a4e0338d0b861393d4630707600c48f4da20f0deec4c9f03e80f151c6c24a3f37d268ca258ccb24a483daefd400271de815d4af6149007d0cc2ecac4f416ab42fa10df1c0514f15362803c5ac005ecc83c4a5b53f9537abb85249c590347ce0cbfd68dd1ab7b8990707002f010020d6401d5eee19e220d43430ffed2a1e320cc1af6da28e26577432ae0056380099030e8b4ffc6008caf95aae2bf1f9559ad08af926fed01c6246f71adf91ab00ceeca89e4d5c3d3452bb667d14dd0f099728f01aeb802a9ef72365c6d3396c009cc29b316b2411354be2c6ecf74dd8e60130bc1276a19d185706888436be0e00b54ae3224afd2c9d571748ecf33378e714a5981e4914f73842753043a047c400c9d2def1b299934fdd2a7ce7c666536e1c934efbf630dc552b30754dd9bcb5000e231a7113c8345347ce1172aa6ad59e8cd2faaf42bc50a666b04210455af600876b16277e219f65b6cf3c45b0bca33c4e8c98de1df56ff216eeb77934fcb300e620d720390fe28ded7b9c2aa0047e1d2f97616fc9377dfd17b884fa14a6de006b3ec8f3db3bf23092ada8138dc6c4f7cda5d34bb030878244a8d20c9731780053e8e1082da049bd1e56f167b6cd5b8c1dbdf5d142108caa6661715c2b4706008a2960935a6c7451a2e28384870bf46bcd2b1982add24893021332996879510090c8c06e33a868257a71a7d1e908d8732dbd863d1570ba09bcdae39051144a0042ec84f3fd9cc396c68ba76ebae2a568c5d9c2ef5255add7ce7fcc85fed89100588076671b20abd42d0f1965dc0e0a02e441713c7e36259b47bc977b0bbf31009c9f2f007623ca2abbad8b3e1b2649afec24600e53beb2847197740d036f0000a0559a2e78e6dbbee720bcad36e89955439a66beffbfebc6a90c218a7e6e170045e3c7d6353906a9780a68037db48e358fcf91a54e13606b3f2439de336ff1000b8ad804b79f195bd71fd3763c1e28a20877c55ed01e4829ef078b18a1df33001b487207833f3819de7f870e99291105371db278af5328b88f59915250dffc008b8b41a7ecc5334a4c27c0caf1e9ce4ad0e411b7c48cbecab3d718eb7ceed10070f350cbd26acdf6c3e8e1ba1ca16c3ae29acda8f35ae814bb271f0ce4df92001ac6c44957089b57c1c3992ca8916e98aad28bf89a7eaa2a74f43082af2d3100cb51d6ea54b9705a221cf6e1abb9e894ae46c727d1847eb594c9cea1a6f02d0047deb350cceaaca8a720fa5fbdad056c29bf992854ed41291113dea700b8480027a4eb43e38c080d1b5c082a5c4c2c8c5fcf22ba51f37754839e11f1f435b200e1f10d8fde9997f114cd36d967c94ee727da72ef5b2b5d2c2b6e08a98d85480038f6eebd7307d0b83f31e4d49f2f00ddc78b9d4ef868478919b1962eceecc8008bf2cec0d18318e2023d9f84cb3bacf847319fe5235f1adf8fe746b6d88f4100cec448c0c2b1cd16f447bb07dba3939581befd216fc77dacffc7e69aa5dd9100c7d27592e986c240ae14431dd7fb2709bfbfa66e980f7632b76a2cff798ebd00edb182aff1c10e36898276f4634c856ce96e8b531b86d852e341d24b2c3617006615f61c6cc58015e879f2d2d5e5be4a7b7d55c016293f960a7709d3f981b100cfd0263b1b477fefe2ca04363039e7efe1719751bfc2336841a67b1fa4727000c365e0c50f2435244d7ef02b8b0a6b11e4a9920e92dbc0d398ddc9c54b95c0004306333a2776697fee621cbccf6edec722da791cbaf26580f9dc5589c7d33000c72abaae3d5c3ccbbd6cb19dc97df03bf8ff8a2f29b054ffbae2fa807e2fce00b169dddb71a37d65243283850e26340cdde73270f25cd697f9e5fb0ea0155000976aed56867d2f5fca587190f92ecfe1ba768bfb67ae65deab2cc84298499200e168014c1daaa4179232567a493ec4339e202ad69175660f74da8036a5461f00f8e56bc2df878b6fafcd883c6aee8fdad9041a57a69ffb6e1b8153afe4254300497d927c87b8627d62585699cced7c3837dd6f1f1b7fa97a2d2f0485c3d6af00cbfdb2225a21d920e9bce0314d2ce5cfc87dd6c95b16777fda2e6379a6d28200f9240ee854bb1f92bedfd7f656eb6d26650e176d19b7abd4a17bf1802591fd0078996be22be2a238dae0e4480314c5e77d49bf13b74852f4823b310d40a1380046905be36f3f8a05accecf41d6bfa7a0393b55dfab6f85dbfe754440acdc60009c73f5dfbfbc7e3fb0dff2813fba27745f3945324c6bea4760a9bdca7d5b3b005eab9cf5494665ab7a18b06ef296f6c731b48091061649f25924db68d8795900a2bfd8f327db9ae7890e74d46edb3e792ab85e11df364a4cf7375b5e2007da0045eb3d774cf785b15ab8593c15f42ba747a4c7d313893626410d69098d0d5100946b74d40db3e2485c2b663513dc97285fb8a543eb304869e3b07481483cc3001b2de037fe53134d185d79e6fa4f9a8c79dea5d5dab84fb02d1568fa78a5fc00b7171e6f55fae0f62627e4bb2b8f90e7bcaaed82260db1eeba20bfb67f89c50073a3c296cbd0ecb7400d2b20cac4286676487dc1b641033bc5250bbb0e269900223ccf9b1ddadf662ac2f88756575ef9d692906d8fa0fc6421c72dc08806b700027c021c3f8950de74f18ce8f09465b483e7749869f37cc0f20a9149a60c4d00796bc546b3e34497c4e684a3949284f5a03d746f3f8633392e489883e5930d0062ca34458def10adec6161a00e9da82d32eda4f2b638f76ce6adc162f44662008ef6d0f8cf6027369f00789e8874c43d1a9d61575c461830c644f41369e0e70040f51a25c71f839ea7dcff934383c7563bedc33c0e07db0932cc539b5a8d4500e3e64184c7f64ba864720877457024a52834a06310fbe8c090d755ac0ff53f00709357ad4bf005f7b0c0d65d9ce7b3239dac8092f42bb2c5fc161026b97609001766ab410025a527de8f9856a4a88fb2e806ba2131dfe2b1d4c363f880f49d005ac23536cb52603523fb1304925b123f6f97467c6cad41da62b0f49aa3a807006c3f67f1c0d326585f746ae7c39ee87494808affbdbc91b7adcb605b09eb8400229f5376049476f253c8c43be70534dbc24825414d79bb8fbb5e8729db84670009c92ab497dec117504408f277df320b510baf78e069ed48a28b0282c57de0006d02a897610eeca8ddfa8c99d2536e91e08d7f8ec61772dfd68463a210a3e300f39bf43b70f15b2f809c0c0b3d6c471b010fad74f5e2a21d5dea4844d9d3a7004e0e17ea2d78669f2e58e5c77144301acd90728fbaeeea4db62a0c753d0d3900a73cec1305a3e1b09d396142d4493134f02aa9426e3dec5152b138b7525a1d0088ab7710b7dd88cefa21ff2d2049829457e576b2c79d3cb5a20dec0726c5e500f7547ec48e8de9e86a310e6da81a93f1eac0ce8f352876f19ab6e9c2e6876e00de314a61ee89d13a1f9efc05cdc8fdae224934c67d552ff5a570ae96c26e7700164077026243791dfc6f2e9138a3a94f5aa246abee4d1e550a35ba27ee28df00efe300feca451dc4e7bf85687c206b04a2431b6813f84884c7f350115847e20087713eb6e819cf014bc6199305472d193ce6f3fa10e04650ec77d2136ed28000f3817fc325c660b163ff285326a096e6cfa52ab68fd797e12c925c007672f800e680ad044edf7ae18a319d536dc5e9e58d45782282f4acc698c460a291a4b500a4cce226300d0c7ead11dbb9f589745ea37c5df117c40a2da1c56c860284ad0030e1ddf7124b2c496cab8b4e885d68d384b7e9af81c3507b4fbc4bd854af2a0031873a9471d13db154f995c4771f3aea58794655ac7ee6d9fabd0934fde8e600b13c7a97fec6039b671d4a17dc715fd4012fd8cd8a9487b100ed27e5858d6f00599bc20fc1f9d4113ea20fac2c3c9d8ac9774887919aa179a8227dc500f0b20084dbd846f6fe4893ef0a8f3b1ae2cff258aab7a79e19286bd6fb5e8bab8cbc00512f01981ea0a45db5033eb2670b8f4c99a383a977e4b59393fcee25ce54860073bb21f6762ec10af582a04ca49e9399f519eba48d1229121b3e01f19ad5e9007df6176034e9f8fb1990f5d61d7f983e49ed2b0aec0d241fa9f50aff0437500017b6dbf87d9572c3429747758a1b1f44ea0ab755d599ba122f4ab9d85d2367006792ec29c91aeb814a6000f2ad7364746a12aafc3298fd04b9d3cbce9d55ef00e29b4a1c0185a3bbf5e729a8274136290152a491e7ec68b1e48879d03ef024002398d4a057e3ee68c4745b8e5add41c90a119364e8159788dab7366abac45c0043c53657c0dc7e5b85c8bac1c4e7350df7a06e11d6142ae800ad028ba3f1110035fc05d251388b27a428f2a29f100894132099a3f84cc54a5cd1ae700c9d9100f6ba9ca0531a1cb787864a05db1048a1032bbb59fc7cbe82ddc8bb12ffa1c000b20cd261bde12282f5a28d219f598b3faa6de3f88a5c726a7e97a0238ddf320081081fae63b1f5c39d95fbb5820d1774de42174c746d233364a93d8e079c7c0015ea3c9a33c19f119596a0d51d636614dfc45c97249bd43047fea567958098006ea9fa1b84e301648c05b927aa6638c77168a975077c1e3a8bd9300dda042200d1db17a8de9cb9dfae4904a31d0bf3b9a5f5e64e8c2bb5582fbfc27537876e005131842fd5612cf587be02776edfb23dddc32012fb0ac0a64d2cba50f3ae0d007bd613d373ffd260bb3bcdfaedb49fe5019d71d6cf56b94d147dace15cb21c00722d3a108885ceaa66525b29c208d7b791b23a3d4a32bf7f6db2523dc99b7a00020197a843d674e27558b6fa4eee5a1b3d7b0e422689a62bf056053f8c33e0003937ffc58f732f0ba027516e4fb11649aec1d933da02cd1b7861e97fc53384008f5599617e81fbc3fda191d6bcd882efdb2874dd5203bbe8b8e5bf9cf60fdf00e15ce5b1675829fa737a4eacceb465ae1d8d36e47a86b70d38da80fb93f752007375ca360b15ad0907cb9028705bcdc8729d0ea22ee08c6bbf905c4d538e2600c3c509b2460aa9ec9def71561fc9523b6f71d6aab1f901cf790a7fe82e4bc9001c2b6d60f8205cf78a85ed0fed6cbc8a6dfbeeea289a1e72bdcc0b36b3864f001a2a041dd946fac3ef5f93f92e6ac0664a5fd444746a702f8d1b92de654caf00673c190a15bdcb2ec1b35b139f1d1ea8180260799ea20081e1bb90ccd8115900f807195f1ffb1554185809048d8a0cf90d53cec597961dc710c889001da4e000224bd92f23c7d5c245134d28242c962afae896728827da71b8c5da6552bc2b0095c527c80e90e9ec13eddcc083a7c696b8bcb2c756144af0b4db75558c98d50041956cf82fb33c8c30b13d107961c3236bcfcd15b4d2c65205a170a0d3eb77001de7334471e4769c6e0ef9a4052102918972433a7009dfebc639f0788c5fad00a4795f067fc5866921386fa367562dadcc5f95e83019e910d914756cc7d8e2006f410b05b038cb1302cf53adaade003aa5f1ad7832bde0f29cb520d9d5ca54006ac1d300aecb908e87b44ac108ba8ba808b808aa30380017671f6457d06e1600bb0f76690c251c5b414380c41a24e9a940228d208cb651faa3eb6613898d2b00641e2983aab388b5455aa6341abf55f91d15a54e8b2455b07acb934c121abd0082a6dba7e125bb919ce6afd0cdd682a19c0d9ddb21bda0e36edd9455d4b2ad00c5eee6a1fceb1c0a902c10f049dd8daccb31988ba0f7f7dc461475334e5b22005f9ca86c5d1c02235253df17435a1585d54f79d8a15b0a4063aae97ac8249500be7a32c187037348ba10bdae522c03e9235ef5e122fdb0e5eec0a88fb854010040da616490ba27ea9c728b85d5e2d6b0ee09a863cca9608e19b19c6ef9d1d40020268ef86c69c306aafe0ef6d2999e218b218c96021780ee6eaea03dd0ed8600796fa4b243389ee0ce031c29043e8494ecdb7beba5b5db4fe8e78b886ce98f004a94572e90b54b8cd8d3003430fa25b651d387bc4ce7a34c702638735738ed00a8df3e42ef32c6601ac7a046730f4c468e1d34b82591b680624f3dcb60a2ba008b7a40142cb24cf2a91b6cf6fb4a67204b03eb4d19d1b77584d564cf2ed87800d43fd641cd86ce06792ed1f091009f72e680e5b33aa2c8166fca864252513400b74b821e49b075e04b462992a5a2c2264b2b02722213c99f48e34280e80996007da383441bcd481e613a860aedc2885c8bf85cf08d67d56ed14106c98fc11e009f948d7204bf869d13b17be572a219a27b6308360bb669751299a64b78900300280471d8e831a57f85dec4763bb4a5333fb960e06037277cd780500dbcd0cd006532d826c48e037cbc8c30720d69744c65488223b78ae902fccf0752c8460f002dec49745ebbcf0208d288c549e276f82bb17b9c78866d4892b3cfd7c2ebe900f8341bd6bbe4e3c6a9600b9b797c627a04708f2a2fe9252ee8f3b85d99c31a00c507ed39c7ee823a0fb5388dab2b85c09f40112e2714588151e412906634d40014c2f694a2b461021ce65fd18aa398830a6d9779804eb44c4bb902aa2149190003186d83cdb6aaf2d2ad5ebaa00ce07cf2a946e353475fe6aad812bff9099000a450cbbe48364ad42e29bb75d77bfd6bacd6bfca6ee7d462142532aa30d3a20049e1f90a16dbcdce69ae5f854f483fa3643920668d49944612a5435559d0a10053f15be586dc46aee842dd8d55f2e64642dbf7d79448c85da12cb805e4bdb80057a85b04f2659c143988e286b437cceefd7744d3604c17bef3676b105727b6002b58f8b84fd7f69850285b9ed113e8a0b05df95ee4ac2ae5ac1c959ed6cf0200739052572ab0b0aa3a7123605b28e3d5fbbe587c3b1fc81f88a8e0ec89f5aa00871325f8c07f06c4178949e3d2d40a6fe448bf0cbcb246bc8a6c23758045ea00766b8f9ecabc276ed604830daa41f9948329bc5b799f68b72c0f939433d351003b46666c7a367eb528d8bcef2d6ffdc9d57d07bcbcdf63e2b8194f94831ab600f9706c35cf01690e995d0937e074fa821985d6604aa5127fd0b7f57ee839990021ce286d39a9e7f6f9238f58fa9c53d9dece7374d7f567cd28a1a266babf460009dc6c05f95d007a01a9d8d83737b8bbdb80041c59d4352518a081ed189b91007b530533e2705c76aaa54a8be959296b23e563b5a20f379f3fee9fec45ba6f00b6c50fafe9f3caca9cee93e3625b3a55be6cddf1a2c1775e1f0ff29658ffea00b563ca6001fce8905971911d2c4013cc154f00613950d81db6e868862e3f7100254b336abc9871a60228bbd0f4605af055a62f7c0684c0e8471acb967096a900f52ce17155d3a7635a6ac45ae79c9eb9332595b8a83c241af3a09c22b8362100e3043e919220bcf4fe6f9da06f4a8ac9c43aea094997fbe9b7d1a2b7e93c880015263d66fbf68a2f6254c6712247dab6a7517f2ad423dcb27877eea4aaddcf007177d7b81be133b498431c1fd79442e4b7bff2e74cac64081eef72fcc71f510072938d75e4247109a15edc562e1f4423bd8339297e8ef9b10ec4c46dd05fdd00e90cf6733b87bebd0dd8e3c4e769bbbeab2697b36f54fde48c866255b2f4a70097779cfa66fe1c6e326838f140edab551ea9ab3f7c0930ef7021063029bcde00a07e3ec10dd3f2ba859ed6d58e3035256c27ae64f8a6bb6ffd06893e687f4800aae559c36694c5f0c947c4eb911ba75185d39ed648de384ebe2cc9991870a700a5348a79e00a572a375c76cc78e88e1dd7d3d1edd569ea3fc61803a6e5c4500008f2497ea7052e3cf9b9adc9e8f47b07f32785185e96fa49534677fa3b4bc400475bc6b4d0eb7361fce69767833cfbc4983ca40563d6e9cd6244caf4c57a4c00720dbf90ed582db5fd650b793e370039ea8c3331e659f6d48c4b48d8896d290046ecea09c73f993922370d1d56c1b0b5f2f06335a66221b65c1298a0935ff0006d2abc3a007206396b64d6358fecbe1597ad26c4f536636564d3285e115b4b00ae696ca858f8f1273eae729f28f470b457cd1d60a4b9f81b6c4d488c42cdc50090a3b92ab04fe790bebc63f8dce8cb1c474bb179437c5bfa733dc13d69287500f134c013912bff4179e667feef10dbf15a319dac6ad2c8053a2356ee02f94b008e416748fadf4c40a21bb47f8102904b0c854bdeb9be41c4a0991f876b79a7001dd7da77ee9597647a0eb8c59bb5c7e1871d66a34bea3ef6cec4815ffdb23200315abdc386097ebb5c978439332531519402d39aae5df9496033772003368a00caba35beb5ac99c4dc7ccbf30d37c100cfeb5643c162006ab7a1d7d4a8700b00fd8198a6b8069a7c907f9f8010540c1919c1c41710429216c8ade8c045c4120083736320ce96d48c4ebe54a1e8574eb391526046ab9bc77a4efa3578c1e6f3000acd7e7e48a3ec51669581d658a309b79860e381535ccc5cdccb40427f8cb600cead15721322b55381924a54323e995ec598b872d39407a714c60de681914600daaccd4b51d3b80095ec4e566e14890dda089462f50982e7123432c54e8cb10025f5d3997177495034738e57d297f5d4f27933ff309fc1e672c007489fe182004b5aefb30542470c676e496cd1b42b20137dae26b27b1c61688d084277e13d0015e2c105797dcd1b3eec64c2c05650b09f6e42521634fec0aea92a8c0a44a300b40ea0a2e744c197e649822e4bb7e30398d68d2fb518710313f094a1a9a3730001ea7cad828423726ba1528a406c551a6498ab0f32eb266f9008a24b83c2ea0043c0538912e8799cae0e07467ccc1de500cddd5d37de67418f21de8185f8ef001d72f87466db7362f38759dcd2a1325beb9e91f168503016037d68a99a52c900a95b5f06afffd9601df9253dfa74aa64201fd49c4a108c48397d72659e9955002060511ed67b9e8b68faac3ff75f14987d8aae7eccb0df3381f4c96e9a06cb00b2d106fd522f5dfcda308a75c2299d01f02d56228500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1b08d0960141c238395fc463bf31ccfa1d0a21216cb4fa534a780b6acc6b56d2345d220937631e790b2600d4c9b117a5ff4f1b090beff273125289d9a65a7926bb5faa8dad9728685a97f9fb0bcaf99f3189b1301a56f09910b9c7566bd3a690f661632 \ No newline at end of file diff --git a/crates/rbuilder/src/backtest/store.rs b/crates/rbuilder/src/backtest/store.rs index 64283386..54d00345 100644 --- a/crates/rbuilder/src/backtest/store.rs +++ b/crates/rbuilder/src/backtest/store.rs @@ -617,6 +617,7 @@ mod test { max_priority_fee_per_gas: Some(22), max_fee_per_blob_gas: None, other: Default::default(), + authorization_list: None, } } } diff --git a/crates/rbuilder/src/bin/relay-sender.rs b/crates/rbuilder/src/bin/relay-sender.rs index 3fbcbec7..aa5a18cc 100644 --- a/crates/rbuilder/src/bin/relay-sender.rs +++ b/crates/rbuilder/src/bin/relay-sender.rs @@ -1,5 +1,4 @@ -//! This app is intended to be used for testing against a fake-relay I made (https://github.com/ZanCorDX/fake-relay) without needing all the builder or relay running -use rbuilder::mev_boost::{RelayClient, SubmitBlockRequest, TestDataGenerator}; +use rbuilder::mev_boost::{rpc::TestDataGenerator, RelayClient, SubmitBlockRequest}; use std::str::FromStr; use url::Url; diff --git a/crates/rbuilder/src/mev_boost/mod.rs b/crates/rbuilder/src/mev_boost/mod.rs index c03ac9b4..204ed4b7 100644 --- a/crates/rbuilder/src/mev_boost/mod.rs +++ b/crates/rbuilder/src/mev_boost/mod.rs @@ -4,22 +4,21 @@ pub mod sign_payload; use super::utils::u256decimal_serde_helper; -use alloy_primitives::{Address, BlockHash, Bloom, Bytes, B256, U256}; -use ethereum_consensus::ssz::prelude::serialize; +use alloy_primitives::{Address, BlockHash, Bytes, U256}; +use alloy_rpc_types_beacon::relay::{BidTrace, SignedBidSubmissionV2, SignedBidSubmissionV3}; use flate2::{write::GzEncoder, Compression}; use primitive_types::H384; use reqwest::{ header::{HeaderMap, HeaderValue, AUTHORIZATION, CONTENT_ENCODING, CONTENT_TYPE}, Body, Response, StatusCode, }; -use reth::primitives::BlobTransactionSidecar; use serde::{Deserialize, Serialize}; use serde_with::{serde_as, DisplayFromStr}; -use std::{io::Write, str::FromStr, sync::Arc}; +use ssz::Encode; +use std::{io::Write, str::FromStr}; use thiserror::Error; use url::Url; -pub use rpc::*; pub use sign_payload::*; const JSON_CONTENT_TYPE: &str = "application/json"; @@ -259,6 +258,32 @@ pub struct ValidatorSlotData { pub entry: ValidatorRegistration, } +#[derive(Debug, thiserror::Error)] +pub enum Error { + #[error("Too many txs")] + TooManyTxs, + #[error("Tx to big")] + TxTooBig, + #[error("Extra data too big")] + ExtraDataTooBig, + #[error("Too many withdrawals")] + TooManyWithdrawals, + #[error("Invalid signature")] + InvalidSignature, + #[error("Wrong KzgCommitment size")] + WrongKzgCommitmentSize, + #[error("Too many KzgCommitment")] + TooManyKzgCommitments, + #[error("Too many blobs")] + TooManyBlobs, + #[error("Blob to big")] + BlobTooBig, + #[error("Wrong proof size")] + WrongProofSize, + #[error("Too many proofs")] + TooManyProofs, +} + #[derive(Debug, thiserror::Error)] pub enum SubmitBlockErr { #[error("Relay error: {0}")] @@ -275,7 +300,7 @@ pub enum SubmitBlockErr { SimError(String), #[error("RPC conversion Error")] /// RPC validates the submissions (eg: limit of txs) much more that our model. - RPCConversionError(rpc::Error), + RPCConversionError(Error), #[error("RPC serialization failed {0}")] RPCSerializationError(String), #[error("Invalid header")] @@ -438,16 +463,15 @@ impl RelayClient { url }; - let data = - marshal_submit_block_request(data).map_err(SubmitBlockErr::RPCConversionError)?; - let mut builder = self.client.post(url.clone()); let mut headers = HeaderMap::new(); // SSZ vs JSON let (mut body_data, content_type) = if ssz { ( - serialize(&data) - .map_err(|e| SubmitBlockErr::RPCSerializationError(e.to_string()))?, + match data { + SubmitBlockRequest::Capella(data) => data.0.as_ssz_bytes(), + SubmitBlockRequest::Deneb(data) => data.0.as_ssz_bytes(), + }, SSZ_CONTENT_TYPE, ) } else { @@ -568,87 +592,17 @@ impl RelayClient { } } -#[serde_as] -#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] -pub struct BidTrace { - #[serde_as(as = "DisplayFromStr")] - pub slot: u64, - pub parent_hash: BlockHash, - pub block_hash: BlockHash, - pub builder_pubkey: H384, - pub proposer_pubkey: H384, - pub proposer_fee_recipient: Address, - #[serde_as(as = "DisplayFromStr")] - pub gas_limit: u64, - #[serde_as(as = "DisplayFromStr")] - pub gas_used: u64, - #[serde(with = "u256decimal_serde_helper")] - pub value: U256, -} - -#[serde_as] -#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] -pub struct CapellaExecutionPayload { - pub parent_hash: BlockHash, - pub fee_recipient: Address, - pub state_root: B256, - pub receipts_root: B256, - pub logs_bloom: Bloom, - pub prev_randao: B256, - #[serde_as(as = "DisplayFromStr")] - pub block_number: u64, - #[serde_as(as = "DisplayFromStr")] - pub gas_limit: u64, - #[serde_as(as = "DisplayFromStr")] - pub gas_used: u64, - #[serde_as(as = "DisplayFromStr")] - pub timestamp: u64, - pub extra_data: Bytes, - #[serde(with = "u256decimal_serde_helper")] - pub base_fee_per_gas: U256, - pub block_hash: BlockHash, - pub transactions: Vec, - pub withdrawals: Vec, -} - -#[serde_as] #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] -pub struct DenebExecutionPayload { - #[serde(flatten)] - pub capella_payload: CapellaExecutionPayload, - #[serde_as(as = "DisplayFromStr")] - pub blob_gas_used: u64, - #[serde_as(as = "DisplayFromStr")] - pub excess_blob_gas: u64, -} +pub struct DenebSubmitBlockRequest(SignedBidSubmissionV3); -#[serde_as] -#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] -pub struct Withdrawal { - #[serde_as(as = "DisplayFromStr")] - index: u64, - #[serde_as(as = "DisplayFromStr")] - validator_index: u64, - address: Address, - #[serde_as(as = "DisplayFromStr")] - amount: u64, -} - -#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] -pub struct CapellaSubmitBlockRequest { - pub message: BidTrace, - pub execution_payload: CapellaExecutionPayload, - pub signature: Bytes, +impl DenebSubmitBlockRequest { + pub fn as_ssz_bytes(&self) -> Vec { + self.0.as_ssz_bytes() + } } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] -pub struct DenebSubmitBlockRequest { - pub message: BidTrace, - pub execution_payload: DenebExecutionPayload, - /// Sidecars for the txs included in execution_payload - pub txs_blobs_sidecars: Vec>, - pub signature: Bytes, -} +pub struct CapellaSubmitBlockRequest(SignedBidSubmissionV2); #[derive(Debug, Clone, Serialize)] #[serde(untagged)] @@ -660,15 +614,15 @@ pub enum SubmitBlockRequest { impl SubmitBlockRequest { pub fn bid_trace(&self) -> BidTrace { match self { - SubmitBlockRequest::Capella(req) => req.message.clone(), - SubmitBlockRequest::Deneb(req) => req.message.clone(), + SubmitBlockRequest::Capella(req) => req.0.message.clone(), + SubmitBlockRequest::Deneb(req) => req.0.message.clone(), } } } #[cfg(test)] mod tests { - use super::*; + use super::{rpc::TestDataGenerator, *}; use crate::mev_boost::fake_mev_boost_relay::FakeMevBoostRelay; use std::str::FromStr; diff --git a/crates/rbuilder/src/mev_boost/rpc.rs b/crates/rbuilder/src/mev_boost/rpc.rs index 2ea36514..399cb095 100644 --- a/crates/rbuilder/src/mev_boost/rpc.rs +++ b/crates/rbuilder/src/mev_boost/rpc.rs @@ -1,279 +1,15 @@ -//! This file contains conversion funcs to ethereum_consensus lib so we can user their classes for relay communication since they are already json/ssz ready. - -use std::sync::Arc; - -use super::{ - BidTrace, CapellaExecutionPayload, CapellaSubmitBlockRequest, DenebExecutionPayload, - DenebSubmitBlockRequest, SubmitBlockRequest, +use super::DenebSubmitBlockRequest; +use alloy_consensus::{Blob, Bytes48}; +use alloy_primitives::{Address, Bloom, Bytes, B256, U256}; +use alloy_rpc_types_beacon::{ + relay::{BidTrace, SignedBidSubmissionV3}, + BlsPublicKey, BlsSignature, }; -use crate::utils::u256decimal_serde_helper; -use alloy_primitives::{Address, BlockHash, Bloom, Bytes, U256}; -use ethereum_consensus::{ - deneb::{ - mainnet::{BYTES_PER_BLOB, MAX_BLOB_COMMITMENTS_PER_BLOCK}, - polynomial_commitments::{KzgCommitment, KzgProof, BYTES_PER_COMMITMENT, BYTES_PER_PROOF}, - }, - primitives::{BlsPublicKey, ExecutionAddress, Hash32}, - ssz::prelude::*, +use alloy_rpc_types_engine::{ + BlobsBundleV1, ExecutionPayloadV1, ExecutionPayloadV2, ExecutionPayloadV3, }; - -use itertools::Itertools; -use primitive_types::H384; -use reth::primitives::{ - kzg::{Blob, Bytes48}, - BlobTransactionSidecar, -}; -use serde_with::{serde_as, DisplayFromStr}; - -type RPCCapellaExecutionPayload = ethereum_consensus::capella::presets::mainnet::ExecutionPayload; -type RPCDenebExecutionPayload = ethereum_consensus::deneb::presets::mainnet::ExecutionPayload; - -// Acording to https://github.com/ethereum/builder-specs/blob/18c435e360192aa39c378584fe14a3158f30dfbf/specs/deneb/builder.md?plain=1#L35-L38 -// and https://github.com/ethereum/builder-specs/blob/18c435e360192aa39c378584fe14a3158f30dfbf/types/deneb/blobs_bundle.yaml#L17 -// the proofs, blobs and commitments share the same max MAX_BLOB_COMMITMENTS_PER_BLOCK = 4096 -type RPCBlob = ByteVector; -type RPCCommitmentList = List; -type RPCProofList = List; -type RPCBlobList = List; - -// couldn't find it somewhere else :( -const SIGNATURE_SIZE: usize = 96; - -#[derive(Debug, thiserror::Error)] -pub enum Error { - #[error("Too many txs")] - TooManyTxs, - #[error("Tx to big")] - TxTooBig, - #[error("Extra data too big")] - ExtraDataTooBig, - #[error("Too many withdrawals")] - TooManyWithdrawals, - #[error("Invalid signature")] - InvalidSignature, - #[error("Wrong KzgCommitment size")] - WrongKzgCommitmentSize, - #[error("Too many KzgCommitment")] - TooManyKzgCommitments, - #[error("Too many blobs")] - TooManyBlobs, - #[error("Blob to big")] - BlobTooBig, - #[error("Wrong proof size")] - WrongProofSize, - #[error("Too many proofs")] - TooManyProofs, -} - -#[serde_as] -#[derive( - Debug, Clone, PartialEq, Eq, Hash, SimpleSerialize, serde::Serialize, serde::Deserialize, -)] - -pub struct RPCBidTrace { - #[serde_as(as = "DisplayFromStr")] - slot: u64, - parent_hash: Hash32, - block_hash: Hash32, - builder_pubkey: BlsPublicKey, - proposer_pubkey: BlsPublicKey, - proposer_fee_recipient: ExecutionAddress, - #[serde_as(as = "DisplayFromStr")] - gas_limit: u64, - #[serde_as(as = "DisplayFromStr")] - gas_used: u64, - #[serde(with = "u256decimal_serde_helper")] - value: U256, -} - -#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, PartialEq, SimpleSerialize)] -#[serde(untagged)] -#[ssz(transparent)] -pub enum RPCSubmitBlockRequest { - Capella(RPCCapellaSubmitBlockRequest), - Deneb(RPCDenebSubmitBlockRequest), -} - -#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, PartialEq, SimpleSerialize)] -pub struct RPCCapellaSubmitBlockRequest { - pub message: RPCBidTrace, - pub execution_payload: RPCCapellaExecutionPayload, - pub signature: ethereum_consensus::primitives::BlsSignature, -} - -#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, PartialEq, SimpleSerialize)] -pub struct RPCBlobsBundle { - pub commitments: RPCCommitmentList, - pub proofs: RPCProofList, - pub blobs: RPCBlobList, -} - -#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, PartialEq, SimpleSerialize)] -pub struct RPCDenebSubmitBlockRequest { - pub message: RPCBidTrace, - pub execution_payload: RPCDenebExecutionPayload, - pub blobs_bundle: RPCBlobsBundle, - pub signature: ethereum_consensus::primitives::BlsSignature, -} - -pub fn marshal_submit_block_request( - req: &SubmitBlockRequest, -) -> Result { - match req { - SubmitBlockRequest::Capella(c) => Ok(RPCSubmitBlockRequest::Capella( - marshal_capella_submit_block_request(c)?, - )), - SubmitBlockRequest::Deneb(d) => Ok(RPCSubmitBlockRequest::Deneb( - marshal_deneb_submit_block_request(d)?, - )), - } -} - -pub fn marshal_capella_submit_block_request( - req: &CapellaSubmitBlockRequest, -) -> Result { - Ok(RPCCapellaSubmitBlockRequest { - message: marshal_bid_trace(&req.message), - execution_payload: marshal_capella_payload(&req.execution_payload)?, - signature: a2e_signature(&req.signature)?, - }) -} - -pub fn marshal_deneb_submit_block_request( - req: &DenebSubmitBlockRequest, -) -> Result { - Ok(RPCDenebSubmitBlockRequest { - message: marshal_bid_trace(&req.message), - execution_payload: marshal_deneb_payload(&req.execution_payload)?, - blobs_bundle: marshal_txs_blobs_sidecars(&req.txs_blobs_sidecars)?, - signature: a2e_signature(&req.signature)?, - }) -} - -///For all txts sidecars takes one of the vectors via vec_getter and transforms all the elements via data_converter. -fn flatten_marshal( - txs_blobs_sidecars: &[Arc], - vec_getter: impl Fn(&Arc) -> &Vec, - data_converter: impl Fn(&Source) -> Result, -) -> Result, Error> { - let flatten_data = txs_blobs_sidecars.iter().flat_map(vec_getter); - flatten_data - .map(data_converter) - .collect::, Error>>() -} - -fn marshal_txs_blobs_sidecars( - txs_blobs_sidecars: &[Arc], -) -> Result { - let rpc_commitments = flatten_marshal( - txs_blobs_sidecars, - |t| &t.commitments, - |c| KzgCommitment::try_from(c.as_ref()).map_err(|_| Error::WrongKzgCommitmentSize), - )?; - let rpc_proofs = flatten_marshal( - txs_blobs_sidecars, - |t| &t.proofs, - |p| KzgProof::try_from(p.as_ref()).map_err(|_| Error::WrongProofSize), - )?; - - let rpc_blobs = flatten_marshal( - txs_blobs_sidecars, - |t| &t.blobs, - |blob| RPCBlob::try_from(blob.as_ref()).map_err(|_| Error::BlobTooBig), - )?; - - Ok(RPCBlobsBundle { - commitments: RPCCommitmentList::try_from(rpc_commitments) - .map_err(|_| Error::TooManyKzgCommitments)?, - proofs: RPCProofList::try_from(rpc_proofs).map_err(|_| Error::TooManyProofs)?, - blobs: RPCBlobList::try_from(rpc_blobs).map_err(|_| Error::TooManyBlobs)?, - }) -} - -pub fn marshal_deneb_payload( - payload: &DenebExecutionPayload, -) -> Result { - Ok(RPCDenebExecutionPayload { - parent_hash: a2e_hash32(&payload.capella_payload.parent_hash), - fee_recipient: a2e_address(&payload.capella_payload.fee_recipient), - state_root: a2e_hash32(&payload.capella_payload.state_root), - receipts_root: a2e_hash32(&payload.capella_payload.receipts_root), - logs_bloom: a2e_bloom(&payload.capella_payload.logs_bloom), - prev_randao: a2e_hash32(&payload.capella_payload.prev_randao), - block_number: payload.capella_payload.block_number, - gas_limit: payload.capella_payload.gas_limit, - gas_used: payload.capella_payload.gas_used, - timestamp: payload.capella_payload.timestamp, - extra_data: ByteList::try_from(payload.capella_payload.extra_data.as_ref()) - .map_err(|_| Error::ExtraDataTooBig)?, - base_fee_per_gas: payload.capella_payload.base_fee_per_gas, - block_hash: a2e_hash32(&payload.capella_payload.block_hash), - transactions: marshal_txs(&payload.capella_payload.transactions)?, - withdrawals: marshal_withdrawals(&payload.capella_payload.withdrawals)?, - blob_gas_used: payload.blob_gas_used, - excess_blob_gas: payload.excess_blob_gas, - }) -} - -pub fn marshal_capella_payload( - payload: &CapellaExecutionPayload, -) -> Result { - Ok(RPCCapellaExecutionPayload { - parent_hash: a2e_hash32(&payload.parent_hash), - fee_recipient: a2e_address(&payload.fee_recipient), - state_root: a2e_hash32(&payload.state_root), - receipts_root: a2e_hash32(&payload.receipts_root), - logs_bloom: a2e_bloom(&payload.logs_bloom), - prev_randao: a2e_hash32(&payload.prev_randao), - block_number: payload.block_number, - gas_limit: payload.gas_limit, - gas_used: payload.gas_used, - timestamp: payload.timestamp, - extra_data: ByteList::try_from(payload.extra_data.as_ref()) - .map_err(|_| Error::ExtraDataTooBig)?, - base_fee_per_gas: payload.base_fee_per_gas, - block_hash: a2e_hash32(&payload.block_hash), - transactions: marshal_txs(&payload.transactions)?, - withdrawals: marshal_withdrawals(&payload.withdrawals)?, - }) -} - -fn marshal_txs< - const MAX_BYTES_PER_TRANSACTION: usize, - const MAX_TRANSACTIONS_PER_PAYLOAD: usize, ->( - txs: &[Bytes], -) -> Result, MAX_TRANSACTIONS_PER_PAYLOAD>, Error> { - let txs = txs - .iter() - .map(|tx| { - ByteList::::try_from(tx.as_ref()) - .map_err(|_| Error::TxTooBig) - }) - .collect::, _>>()?; - List::try_from(txs).map_err(|_| Error::TooManyTxs) -} - -fn marshal_withdrawals( - wds: &[super::Withdrawal], -) -> Result, Error> { - let wds = wds.iter().map(a2e_withdrawal).collect_vec(); - List::try_from(wds).map_err(|_| Error::TooManyWithdrawals) -} - -pub fn marshal_bid_trace(bid_trace: &BidTrace) -> RPCBidTrace { - RPCBidTrace { - slot: bid_trace.slot, - parent_hash: a2e_hash32(&bid_trace.parent_hash), - block_hash: a2e_hash32(&bid_trace.block_hash), - builder_pubkey: a2e_pubkey(&bid_trace.builder_pubkey), - proposer_pubkey: a2e_pubkey(&bid_trace.proposer_pubkey), - proposer_fee_recipient: a2e_address(&bid_trace.proposer_fee_recipient), - gas_limit: bid_trace.gas_limit, - gas_used: bid_trace.gas_used, - value: bid_trace.value, - } -} +use alloy_rpc_types_eth::Withdrawal; +use reth::rpc::types::{beacon::events::PayloadAttributesData, engine::PayloadAttributes}; /// TestDataGenerator allows you to create unique test objects with unique content, it tries to use different numbers for every field it sets #[derive(Default)] @@ -283,40 +19,32 @@ pub struct TestDataGenerator { impl TestDataGenerator { pub fn create_deneb_submit_block_request(&mut self) -> DenebSubmitBlockRequest { - DenebSubmitBlockRequest { + DenebSubmitBlockRequest(SignedBidSubmissionV3 { message: self.create_bid_trace(), execution_payload: self.create_deneb_payload(), - txs_blobs_sidecars: self.create_txs_blobs_sidecars(), + blobs_bundle: self.create_txs_blobs_sidecars(), signature: self.create_signature(), - } + }) } - pub fn create_txs_blobs_sidecars(&mut self) -> Vec> { - vec![Arc::new(BlobTransactionSidecar { + pub fn create_txs_blobs_sidecars(&mut self) -> BlobsBundleV1 { + BlobsBundleV1 { commitments: vec![self.create_commitment()], proofs: vec![self.create_proof()], blobs: vec![self.create_blob()], - })] + } } - pub fn create_deneb_payload(&mut self) -> DenebExecutionPayload { - DenebExecutionPayload { - capella_payload: self.create_capella_payload(), + pub fn create_deneb_payload(&mut self) -> ExecutionPayloadV3 { + ExecutionPayloadV3 { + payload_inner: self.create_capella_payload(), blob_gas_used: self.create_u64(), excess_blob_gas: self.create_u64(), } } - pub fn create_capella_submit_block_request(&mut self) -> CapellaSubmitBlockRequest { - CapellaSubmitBlockRequest { - message: self.create_bid_trace(), - execution_payload: self.create_capella_payload(), - signature: self.create_signature(), - } - } - - pub fn create_withdrawal(&mut self) -> super::Withdrawal { - super::Withdrawal { + pub fn create_withdrawal(&mut self) -> Withdrawal { + Withdrawal { index: self.create_u64(), validator_index: self.create_u64(), address: self.create_address(), @@ -338,26 +66,45 @@ impl TestDataGenerator { } } - pub fn create_capella_payload(&mut self) -> CapellaExecutionPayload { - CapellaExecutionPayload { - parent_hash: self.create_hash(), - fee_recipient: self.create_address(), - state_root: self.create_hash(), - receipts_root: self.create_hash(), - logs_bloom: self.create_bloom(), - prev_randao: self.create_hash(), - block_number: self.create_u64(), - gas_limit: self.create_u64(), - gas_used: self.create_u64(), - timestamp: self.create_u64(), - extra_data: Bytes::from([self.create_u8(); 1]), - base_fee_per_gas: self.create_u256(), - block_hash: self.create_hash(), - transactions: vec![Bytes::from([self.create_u8(); 1])], + pub fn create_capella_payload(&mut self) -> ExecutionPayloadV2 { + ExecutionPayloadV2 { + payload_inner: ExecutionPayloadV1 { + parent_hash: self.create_hash(), + fee_recipient: self.create_address(), + state_root: self.create_hash(), + receipts_root: self.create_hash(), + logs_bloom: self.create_bloom(), + prev_randao: self.create_hash(), + block_number: self.create_u64(), + gas_limit: self.create_u64(), + gas_used: self.create_u64(), + timestamp: self.create_u64(), + extra_data: Bytes::from([self.create_u8(); 1]), + base_fee_per_gas: self.create_u256(), + block_hash: self.create_hash(), + transactions: vec![Bytes::from([self.create_u8(); 1])], + }, withdrawals: vec![self.create_withdrawal()], } } + pub fn create_payload_attribute_data(&mut self) -> PayloadAttributesData { + PayloadAttributesData { + proposal_slot: self.create_u64(), + parent_block_root: self.create_hash(), + parent_block_number: self.create_u64(), + parent_block_hash: self.create_hash(), + proposer_index: self.create_u64(), + payload_attributes: PayloadAttributes { + timestamp: self.create_u64(), + prev_randao: self.create_hash(), + suggested_fee_recipient: self.create_address(), + withdrawals: None, + parent_beacon_block_root: Some(self.create_hash()), + }, + } + } + pub fn create_u64(&mut self) -> u64 { self.last_used_id += 1; self.last_used_id @@ -375,67 +122,31 @@ impl TestDataGenerator { Address::repeat_byte(self.create_u8()) } - pub fn create_hash(&mut self) -> BlockHash { - BlockHash::from(self.create_u256()) + pub fn create_hash(&mut self) -> B256 { + B256::from(self.create_u256()) } - pub fn create_key(&mut self) -> H384 { - H384::repeat_byte(self.create_u8()) + pub fn create_key(&mut self) -> BlsPublicKey { + BlsPublicKey::repeat_byte(self.create_u8()) } pub fn create_bloom(&mut self) -> Bloom { Bloom::repeat_byte(self.create_u8()) } - pub fn create_signature(&mut self) -> Bytes { - Bytes::from([self.create_u8(); SIGNATURE_SIZE]) + pub fn create_signature(&mut self) -> BlsSignature { + BlsSignature::from([self.create_u8(); 96]) } pub fn create_commitment(&mut self) -> Bytes48 { - Bytes48::from([self.create_u8(); BYTES_PER_COMMITMENT]) + Bytes48::from([self.create_u8(); 48]) } pub fn create_proof(&mut self) -> Bytes48 { - Bytes48::from([self.create_u8(); BYTES_PER_PROOF]) + Bytes48::from([self.create_u8(); 48]) } pub fn create_blob(&mut self) -> Blob { - Blob::from([self.create_u8(); BYTES_PER_BLOB]) - } -} - -// Functions from types using alloy primitives to ethereum_consensus types - -fn a2e_hash32(h: &BlockHash) -> Hash32 { - // Should not panic since BlockHash matches Hash32 size - Hash32::try_from(h.as_slice()).unwrap() -} - -fn a2e_bloom(bloom: &Bloom) -> ByteVector<256> { - // Should not panic since Bloom matches ByteVector<256> size - ByteVector::try_from(bloom.as_slice()).unwrap() -} - -fn a2e_pubkey(k: &H384) -> BlsPublicKey { - // Should not panic since H384 matches BlsPublicKey size - BlsPublicKey::try_from(k.as_bytes()).unwrap() -} - -fn a2e_address(a: &Address) -> ExecutionAddress { - // Should not panic since Address matches ExecutionAddress size - ExecutionAddress::try_from(a.as_slice()).unwrap() -} - -fn a2e_signature(s: &Bytes) -> Result { - ethereum_consensus::primitives::BlsSignature::try_from(s.as_ref()) - .map_err(|_| Error::InvalidSignature) -} - -fn a2e_withdrawal(w: &super::Withdrawal) -> ethereum_consensus::capella::Withdrawal { - ethereum_consensus::deneb::Withdrawal { - index: w.index as usize, - validator_index: w.validator_index as usize, - address: a2e_address(&w.address), - amount: w.amount, + Blob::from([self.create_u8(); 131_072]) } } diff --git a/crates/rbuilder/src/mev_boost/sign_payload.rs b/crates/rbuilder/src/mev_boost/sign_payload.rs index 2e3571c0..3459c8d6 100644 --- a/crates/rbuilder/src/mev_boost/sign_payload.rs +++ b/crates/rbuilder/src/mev_boost/sign_payload.rs @@ -1,16 +1,28 @@ -use std::sync::Arc; - -use super::{ - marshal_bid_trace, BidTrace, CapellaExecutionPayload, CapellaSubmitBlockRequest, - DenebExecutionPayload, DenebSubmitBlockRequest, SubmitBlockRequest, Withdrawal, +use super::{CapellaSubmitBlockRequest, DenebSubmitBlockRequest, Error, SubmitBlockRequest}; +use crate::utils::u256decimal_serde_helper; +use alloy_consensus::{Blob, Bytes48}; +use alloy_primitives::{Address, BlockHash, FixedBytes, B256, U256}; +use alloy_rpc_types_beacon::{ + relay::{BidTrace, SignedBidSubmissionV2, SignedBidSubmissionV3}, + BlsPublicKey, +}; +use alloy_rpc_types_engine::{ + BlobsBundleV1, ExecutionPayloadV1, ExecutionPayloadV2, ExecutionPayloadV3, +}; +use alloy_rpc_types_eth::Withdrawal; +use ethereum_consensus::{ + crypto::SecretKey, + primitives::{BlsPublicKey as BlsPublicKey2, ExecutionAddress, Hash32}, + signing::sign_with_domain, + ssz::prelude::*, }; -use alloy_primitives::{B256, U256}; -use ethereum_consensus::{crypto::SecretKey, signing::sign_with_domain}; use primitive_types::H384; use reth::{ primitives::{BlobTransactionSidecar, ChainSpec, SealedBlock}, rpc::types::beacon::events::PayloadAttributesData, }; +use serde_with::{serde_as, DisplayFromStr}; +use std::sync::Arc; #[derive(Debug, Clone)] pub struct BLSBlockSigner { @@ -26,6 +38,7 @@ impl BLSBlockSigner { pub fn sign_payload(&self, bid_trace: &BidTrace) -> eyre::Result> { // We use RPCBidTrace not because of it's RPC nature but because it's also Merkleized let mut bid_trace = marshal_bid_trace(bid_trace); + let signature = sign_with_domain(&mut bid_trace, &self.sec, *self.domain)?; Ok(signature.to_vec()) } @@ -33,12 +46,69 @@ impl BLSBlockSigner { pub fn pub_key(&self) -> H384 { H384::from_slice(self.sec.public_key().as_slice()) } + + pub fn test_signer() -> Self { + let key = alloy_primitives::fixed_bytes!( + "5eae315483f028b5cdd5d1090ff0c7618b18737ea9bf3c35047189db22835c48" + ); + let sec = SecretKey::try_from(key.as_slice()).unwrap(); + Self::new(sec, Default::default()).expect("failed to contruct signer") + } +} + +#[serde_as] +#[derive( + Debug, Clone, PartialEq, Eq, Hash, SimpleSerialize, serde::Serialize, serde::Deserialize, +)] +pub struct RPCBidTrace { + #[serde_as(as = "DisplayFromStr")] + slot: u64, + parent_hash: Hash32, + block_hash: Hash32, + builder_pubkey: BlsPublicKey2, + proposer_pubkey: BlsPublicKey2, + proposer_fee_recipient: ExecutionAddress, + #[serde_as(as = "DisplayFromStr")] + gas_limit: u64, + #[serde_as(as = "DisplayFromStr")] + gas_used: u64, + #[serde(with = "u256decimal_serde_helper")] + value: U256, +} + +pub fn marshal_bid_trace(bid_trace: &BidTrace) -> RPCBidTrace { + RPCBidTrace { + slot: bid_trace.slot, + parent_hash: a2e_hash32(&bid_trace.parent_hash), + block_hash: a2e_hash32(&bid_trace.block_hash), + builder_pubkey: a2e_pubkey(&bid_trace.builder_pubkey), + proposer_pubkey: a2e_pubkey(&bid_trace.proposer_pubkey), + proposer_fee_recipient: a2e_address(&bid_trace.proposer_fee_recipient), + gas_limit: bid_trace.gas_limit, + gas_used: bid_trace.gas_used, + value: bid_trace.value, + } +} + +fn a2e_hash32(h: &BlockHash) -> Hash32 { + // Should not panic since BlockHash matches Hash32 size + Hash32::try_from(h.as_slice()).unwrap() +} + +fn a2e_pubkey(k: &BlsPublicKey) -> BlsPublicKey2 { + // Should not panic since H384 matches BlsPublicKey size + BlsPublicKey2::try_from(k.as_slice()).unwrap() +} + +fn a2e_address(a: &Address) -> ExecutionAddress { + // Should not panic since Address matches ExecutionAddress size + ExecutionAddress::try_from(a.as_slice()).unwrap() } pub fn sign_block_for_relay( signer: &BLSBlockSigner, sealed_block: &SealedBlock, - txs_blobs_sidecars: &[Arc], + blobs_bundle: &[Arc], chain_spec: &ChainSpec, attrs: &PayloadAttributesData, pubkey: H384, @@ -48,35 +118,38 @@ pub fn sign_block_for_relay( slot: attrs.proposal_slot, parent_hash: attrs.parent_block_hash, block_hash: sealed_block.hash(), - builder_pubkey: signer.pub_key(), - proposer_pubkey: pubkey, + builder_pubkey: FixedBytes::from_slice(signer.pub_key().as_bytes()), + proposer_pubkey: FixedBytes::from_slice(pubkey.as_bytes()), proposer_fee_recipient: attrs.payload_attributes.suggested_fee_recipient, gas_limit: sealed_block.gas_limit, gas_used: sealed_block.gas_used, value, }; - let signature = signer.sign_payload(&message)?.into(); + let signature = signer.sign_payload(&message)?; + let signature = FixedBytes::from_slice(&signature); - let capella_payload = CapellaExecutionPayload { - parent_hash: sealed_block.parent_hash, - fee_recipient: sealed_block.beneficiary, - state_root: sealed_block.state_root, - receipts_root: sealed_block.receipts_root, - logs_bloom: sealed_block.logs_bloom, - prev_randao: attrs.payload_attributes.prev_randao, - block_number: sealed_block.number, - gas_limit: sealed_block.gas_limit, - gas_used: sealed_block.gas_used, - timestamp: sealed_block.timestamp, - extra_data: sealed_block.extra_data.clone(), - base_fee_per_gas: U256::from(sealed_block.base_fee_per_gas.unwrap_or_default()), - block_hash: sealed_block.hash(), - transactions: sealed_block - .body - .iter() - .map(|tx| tx.envelope_encoded().to_vec().into()) - .collect(), + let capella_payload = ExecutionPayloadV2 { + payload_inner: ExecutionPayloadV1 { + parent_hash: sealed_block.parent_hash, + fee_recipient: sealed_block.beneficiary, + state_root: sealed_block.state_root, + receipts_root: sealed_block.receipts_root, + logs_bloom: sealed_block.logs_bloom, + prev_randao: attrs.payload_attributes.prev_randao, + block_number: sealed_block.number, + gas_limit: sealed_block.gas_limit, + gas_used: sealed_block.gas_used, + timestamp: sealed_block.timestamp, + extra_data: sealed_block.extra_data.clone(), + base_fee_per_gas: U256::from(sealed_block.base_fee_per_gas.unwrap_or_default()), + block_hash: sealed_block.hash(), + transactions: sealed_block + .body + .iter() + .map(|tx| tx.envelope_encoded().to_vec().into()) + .collect(), + }, withdrawals: sealed_block .withdrawals .clone() @@ -94,8 +167,8 @@ pub fn sign_block_for_relay( }; let submit_block_request = if chain_spec.is_cancun_active_at_timestamp(sealed_block.timestamp) { - let execution_payload = DenebExecutionPayload { - capella_payload, + let execution_payload = ExecutionPayloadV3 { + payload_inner: capella_payload, blob_gas_used: sealed_block .blob_gas_used .expect("deneb block does not have blob gas used"), @@ -103,24 +176,66 @@ pub fn sign_block_for_relay( .excess_blob_gas .expect("deneb block does not have excess blob gas"), }; - SubmitBlockRequest::Deneb(DenebSubmitBlockRequest { + + let blobs_bundle = marshal_txs_blobs_sidecars(blobs_bundle)?; + + SubmitBlockRequest::Deneb(DenebSubmitBlockRequest(SignedBidSubmissionV3 { message, execution_payload, - txs_blobs_sidecars: txs_blobs_sidecars.to_vec(), + blobs_bundle: blobs_bundle.clone(), signature, - }) + })) } else { let execution_payload = capella_payload; - SubmitBlockRequest::Capella(CapellaSubmitBlockRequest { + SubmitBlockRequest::Capella(CapellaSubmitBlockRequest(SignedBidSubmissionV2 { message, execution_payload, signature, - }) + })) }; Ok(submit_block_request) } +///For all txts sidecars takes one of the vectors via vec_getter and transforms all the elements via data_converter. +fn flatten_marshal( + txs_blobs_sidecars: &[Arc], + vec_getter: impl Fn(&Arc) -> &Vec, + data_converter: impl Fn(&Source) -> Result, +) -> Result, Error> { + let flatten_data = txs_blobs_sidecars.iter().flat_map(vec_getter); + flatten_data + .map(data_converter) + .collect::, Error>>() +} + +fn marshal_txs_blobs_sidecars( + txs_blobs_sidecars: &[Arc], +) -> Result { + let rpc_commitments = flatten_marshal( + txs_blobs_sidecars, + |t| &t.commitments, + |c| Bytes48::try_from(c.as_ref()).map_err(|_| Error::WrongKzgCommitmentSize), + )?; + let rpc_proofs = flatten_marshal( + txs_blobs_sidecars, + |t| &t.proofs, + |p| Bytes48::try_from(p.as_ref()).map_err(|_| Error::WrongProofSize), + )?; + + let rpc_blobs = flatten_marshal( + txs_blobs_sidecars, + |t| &t.blobs, + |blob| Blob::try_from(blob.as_ref()).map_err(|_| Error::BlobTooBig), + )?; + + Ok(BlobsBundleV1 { + commitments: rpc_commitments, + proofs: rpc_proofs, + blobs: rpc_blobs, + }) +} + #[cfg(test)] mod test { use super::*;