diff --git a/Cargo.lock b/Cargo.lock index 9f01fce1..b8300f2e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10458,13 +10458,11 @@ dependencies = [ "alloy-signer", "alloy-signer-local", "futures", - "hex", "metrics", "metrics-derive", "reth-scroll-primitives", "reth-tracing", "rollup-node-primitives", - "tempfile", "thiserror 2.0.12", "tokio", "tokio-stream", diff --git a/Cargo.toml b/Cargo.toml index 80f98647..7ac2ca94 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -154,6 +154,7 @@ reth-primitives-traits = { git = "https://github.com/scroll-tech/reth.git", defa reth-provider = { git = "https://github.com/scroll-tech/reth.git", default-features = false } reth-rpc-builder = { git = "https://github.com/scroll-tech/reth.git", default-features = false } reth-rpc-server-types = { git = "https://github.com/scroll-tech/reth.git", default-features = false } +reth-storage-api = { git = "https://github.com/scroll-tech/reth.git", default-features = false } reth-tasks = { git = "https://github.com/scroll-tech/reth.git", default-features = false } reth-tokio-util = { git = "https://github.com/scroll-tech/reth.git", default-features = false } reth-tracing = { git = "https://github.com/scroll-tech/reth.git", default-features = false } diff --git a/crates/derivation-pipeline/Cargo.toml b/crates/derivation-pipeline/Cargo.toml index 3dff6669..1104744e 100644 --- a/crates/derivation-pipeline/Cargo.toml +++ b/crates/derivation-pipeline/Cargo.toml @@ -38,6 +38,7 @@ async-trait.workspace = true alloy-primitives = { workspace = true, features = ["getrandom"] } criterion = { version = "0.6", features = ["async", "async_tokio"] } eyre.workspace = true +rollup-node-providers = { workspace = true, features = ["test-utils"] } scroll-db = { workspace = true, features = ["test-utils"] } scroll-codec = { workspace = true, features = ["test-utils"] } tokio = { workspace = true, features = ["macros", "rt-multi-thread"] } diff --git a/crates/derivation-pipeline/benches/pipeline.rs b/crates/derivation-pipeline/benches/pipeline.rs index 1349d969..f7d1057c 100644 --- a/crates/derivation-pipeline/benches/pipeline.rs +++ b/crates/derivation-pipeline/benches/pipeline.rs @@ -2,13 +2,13 @@ #![allow(missing_docs)] -use std::sync::Arc; +use std::{collections::HashMap, sync::Arc}; use alloy_primitives::{address, b256, bytes, U256}; use criterion::{criterion_group, criterion_main, Criterion}; use futures::StreamExt; use rollup_node_primitives::{BatchCommitData, BatchInfo, L1MessageEnvelope}; -use rollup_node_providers::{test_utils::NoBlobProvider, DatabaseL1MessageProvider}; +use rollup_node_providers::{test_utils::MockL1Provider, DatabaseL1MessageProvider}; use scroll_alloy_consensus::TxL1Message; use scroll_codec::decoding::test_utils::read_to_bytes; use scroll_db::{test_utils::setup_test_db, Database, DatabaseOperations}; @@ -16,7 +16,7 @@ use scroll_derivation_pipeline::DerivationPipeline; use tokio::runtime::{Handle, Runtime}; async fn setup_pipeline( -) -> DerivationPipeline>>> { +) -> DerivationPipeline>>> { // load batch data in the db. let db = Arc::new(setup_test_db().await); let raw_calldata = read_to_bytes("./testdata/calldata_v0.bin").unwrap(); @@ -66,7 +66,7 @@ async fn setup_pipeline( // construct the pipeline. let l1_messages_provider = DatabaseL1MessageProvider::new(db.clone(), 0); - let mock_l1_provider = NoBlobProvider { l1_messages_provider }; + let mock_l1_provider = MockL1Provider { l1_messages_provider, blobs: HashMap::new() }; DerivationPipeline::new(mock_l1_provider, db) } diff --git a/crates/derivation-pipeline/src/lib.rs b/crates/derivation-pipeline/src/lib.rs index 1536d411..dc31ab9c 100644 --- a/crates/derivation-pipeline/src/lib.rs +++ b/crates/derivation-pipeline/src/lib.rs @@ -202,8 +202,10 @@ where tracing::error!(target: "scroll::node::derivation_pipeline", batch_info = ?*batch_info, ?err, "failed to derive payload attributes for batch"); // retry polling the same batch. this.batch_queue.push_front(WithBlockNumber::new(number, batch_info)); - let fut = this.handle_next_batch().expect("Pushed batch info into queue"); - this.pipeline_future = Some(fut) + let fut = this.handle_next_batch().expect("batch_queue not empty"); + this.pipeline_future = Some(fut); + // notify the waker that work can be done. + cx.waker().wake_by_ref(); } } } @@ -298,24 +300,18 @@ mod tests { use super::*; use std::sync::Arc; - use alloy_eips::{eip4844::Blob, Decodable2718}; + use alloy_eips::Decodable2718; use alloy_primitives::{address, b256, bytes, U256}; - use core::sync::atomic::{AtomicU64, Ordering}; use futures::StreamExt; use rollup_node_primitives::L1MessageEnvelope; use rollup_node_providers::{ - test_utils::NoBlobProvider, BlobProvider, DatabaseL1MessageProvider, L1MessageProvider, - L1ProviderError, + test_utils::MockL1Provider, DatabaseL1MessageProvider, L1ProviderError, }; use scroll_alloy_consensus::TxL1Message; use scroll_alloy_rpc_types_engine::BlockDataHint; use scroll_codec::decoding::test_utils::read_to_bytes; use scroll_db::test_utils::setup_test_db; - - struct MockL1MessageProvider { - messages: Arc>, - index: AtomicU64, - } + use std::collections::HashMap; struct Infallible; impl From for L1ProviderError { @@ -324,49 +320,145 @@ mod tests { } } + struct MockL2Provider; + #[async_trait::async_trait] - impl BlobProvider for MockL1MessageProvider { - async fn blob( + impl BlockDataProvider for MockL2Provider { + type Error = Infallible; + + async fn block_data( &self, - _block_timestamp: u64, - _hash: B256, - ) -> Result>, L1ProviderError> { + _block_number: u64, + ) -> Result, Self::Error> { Ok(None) } } - #[async_trait::async_trait] - impl L1MessageProvider for MockL1MessageProvider { - type Error = Infallible; + const L1_MESSAGE_INDEX_33: L1MessageEnvelope = L1MessageEnvelope { + l1_block_number: 717, + l2_block_number: None, + queue_hash: None, + transaction: TxL1Message { + queue_index: 33, + gas_limit: 168000, + to: address!("781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC"), + value: U256::ZERO, + sender: address!("7885BcBd5CeCEf1336b5300fb5186A12DDD8c478"), + input: bytes!("8ef1332e0000000000000000000000007f2b8c31f88b6006c382775eea88297ec1e3e9050000000000000000000000006ea73e05adc79974b931123675ea8f78ffdacdf0000000000000000000000000000000000000000000000000006a94d74f430000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e8748000000000000000000000000ca266224613396a0e8d4c2497dbc4f33dd6cdeff000000000000000000000000ca266224613396a0e8d4c2497dbc4f33dd6cdeff000000000000000000000000000000000000000000000000006a94d74f4300000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), + }, + }; - async fn get_l1_message_with_block_number( - &self, - ) -> Result, Self::Error> { - let index = self.index.load(Ordering::Relaxed); - Ok(self.messages.get(index as usize).cloned()) - } + const L1_MESSAGE_INDEX_34: L1MessageEnvelope = L1MessageEnvelope { + l1_block_number: 717, + l2_block_number: None, + queue_hash: None, + transaction: TxL1Message { + queue_index: 34, + gas_limit: 168000, + to: address!("781e90f1c8fc4611c9b7497c3b47f99ef6969cbc"), + value: U256::ZERO, + sender: address!("7885BcBd5CeCEf1336b5300fb5186A12DDD8c478"), + input: bytes!("8ef1332e0000000000000000000000007f2b8c31f88b6006c382775eea88297ec1e3e9050000000000000000000000006ea73e05adc79974b931123675ea8f78ffdacdf000000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e8748000000000000000000000000982fe4a7cbd74bb3422ebe46333c3e8046c12c7f000000000000000000000000982fe4a7cbd74bb3422ebe46333c3e8046c12c7f00000000000000000000000000000000000000000000000000470de4df8200000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), + }, + }; - fn set_queue_index_cursor(&self, _index: u64) {} + #[tokio::test] + async fn test_should_clear_pipeline() -> eyre::Result<()> { + // construct the pipeline. + let db = Arc::new(setup_test_db().await); + let l1_messages_provider = DatabaseL1MessageProvider::new(db.clone(), 0); + let mock_l1_provider = MockL1Provider { l1_messages_provider, blobs: HashMap::new() }; - async fn set_hash_cursor(&self, _hash: B256) {} + let mut pipeline = DerivationPipeline { + pipeline_future: Some(WithBlockNumber::new(0, Box::pin(async { Ok(vec![]) }))), + database: db, + l1_provider: mock_l1_provider, + batch_queue: [WithBlockNumber::new( + 0, + Arc::new(BatchInfo { index: 0, hash: Default::default() }), + )] + .into(), + attributes_queue: [WithBlockNumber::new( + 0, + ScrollPayloadAttributesWithBatchInfo { + payload_attributes: Default::default(), + batch_info: Default::default(), + }, + )] + .into(), + waker: None, + metrics: Default::default(), + }; - fn increment_cursor(&self) { - self.index.fetch_add(1, Ordering::Relaxed); - } + // flush and verify all relevant fields are emptied. + pipeline.flush(); + assert!(pipeline.pipeline_future.is_none()); + assert!(pipeline.attributes_queue.is_empty()); + assert!(pipeline.batch_queue.is_empty()); + + Ok(()) } - struct MockL2Provider; + #[tokio::test] + async fn test_should_retry_on_derivation_error() -> eyre::Result<()> { + // https://etherscan.io/tx/0x8f4f0fcab656aa81589db5b53255094606c4624bfd99702b56b2debaf6211f48 + // load batch data in the db. + let db = Arc::new(setup_test_db().await); + let raw_calldata = read_to_bytes("./testdata/calldata_v0.bin")?; + let batch_data = BatchCommitData { + hash: b256!("7f26edf8e3decbc1620b4d2ba5f010a6bdd10d6bb16430c4f458134e36ab3961"), + index: 12, + block_number: 18319648, + block_timestamp: 1696935971, + calldata: Arc::new(raw_calldata), + blob_versioned_hash: None, + finalized_block_number: None, + }; + db.insert_batch(batch_data).await?; + // load message in db, leaving a l1 message missing. + db.insert_l1_message(L1_MESSAGE_INDEX_33).await?; - #[async_trait::async_trait] - impl BlockDataProvider for MockL2Provider { - type Error = Infallible; + // construct the pipeline. + let l1_messages_provider = DatabaseL1MessageProvider::new(db.clone(), 0); + let mock_l1_provider = MockL1Provider { l1_messages_provider, blobs: HashMap::new() }; + let mut pipeline = DerivationPipeline::new(mock_l1_provider, db.clone()); - async fn block_data( - &self, - _block_number: u64, - ) -> Result, Self::Error> { - Ok(None) + // as long as we don't call `handle_commit_batch`, pipeline should not return attributes. + pipeline.handle_batch_commit(BatchInfo { index: 12, hash: Default::default() }, 0); + + // in a separate task, add the second l1 message. + tokio::task::spawn(async move { + tokio::time::sleep(tokio::time::Duration::from_millis(10)).await; + db.insert_l1_message(L1_MESSAGE_INDEX_34).await.unwrap(); + }); + + // pipeline should initially fail and recover once the task previously spawned loads the L1 + // message in db. + assert!(pipeline.next().await.is_some()); + + // check the correctness of the last attribute. + let mut attribute = ScrollPayloadAttributes::default(); + while let Some(ScrollPayloadAttributesWithBatchInfo { payload_attributes: a, .. }) = + pipeline.next().await + { + if a.payload_attributes.timestamp == 1696935657 { + attribute = a; + break + } } + let expected = ScrollPayloadAttributes { + payload_attributes: PayloadAttributes { + timestamp: 1696935657, + ..Default::default() + }, + transactions: Some(vec![bytes!("f88c8202658417d7840082a4f294530000000000000000000000000000000000000280a4bede39b500000000000000000000000000000000000000000000000000000001669aa2f583104ec4a07461e6555f927393ebdf5f183738450c3842bc3b86a1db7549d9bee21fadd0b1a06d7ba96897bd9fb8e838a327d3ca34be66da11955f10d1fb2264949071e9e8cd")]), + no_tx_pool: true, + block_data_hint: BlockDataHint::none(), + gas_limit: Some(10_000_000), + }; + assert_eq!(attribute, expected); + + Ok(()) } #[tokio::test] @@ -386,41 +478,14 @@ mod tests { }; db.insert_batch(batch_data).await?; // load messages in db. - let l1_messages = vec![ - L1MessageEnvelope { - l1_block_number: 717, - l2_block_number: None, - queue_hash: None, - transaction: TxL1Message { - queue_index: 33, - gas_limit: 168000, - to: address!("781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC"), - value: U256::ZERO, - sender: address!("7885BcBd5CeCEf1336b5300fb5186A12DDD8c478"), - input: bytes!("8ef1332e0000000000000000000000007f2b8c31f88b6006c382775eea88297ec1e3e9050000000000000000000000006ea73e05adc79974b931123675ea8f78ffdacdf0000000000000000000000000000000000000000000000000006a94d74f430000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e8748000000000000000000000000ca266224613396a0e8d4c2497dbc4f33dd6cdeff000000000000000000000000ca266224613396a0e8d4c2497dbc4f33dd6cdeff000000000000000000000000000000000000000000000000006a94d74f4300000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), - }, - }, - L1MessageEnvelope { - l1_block_number: 717, - l2_block_number: None, - queue_hash: None, - transaction: TxL1Message { - queue_index: 34, - gas_limit: 168000, - to: address!("781e90f1c8fc4611c9b7497c3b47f99ef6969cbc"), - value: U256::ZERO, - sender: address!("7885BcBd5CeCEf1336b5300fb5186A12DDD8c478"), - input: bytes!("8ef1332e0000000000000000000000007f2b8c31f88b6006c382775eea88297ec1e3e9050000000000000000000000006ea73e05adc79974b931123675ea8f78ffdacdf000000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e8748000000000000000000000000982fe4a7cbd74bb3422ebe46333c3e8046c12c7f000000000000000000000000982fe4a7cbd74bb3422ebe46333c3e8046c12c7f00000000000000000000000000000000000000000000000000470de4df8200000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), - }, - }, - ]; + let l1_messages = vec![L1_MESSAGE_INDEX_33, L1_MESSAGE_INDEX_34]; for message in l1_messages { db.insert_l1_message(message).await?; } // construct the pipeline. let l1_messages_provider = DatabaseL1MessageProvider::new(db.clone(), 0); - let mock_l1_provider = NoBlobProvider { l1_messages_provider }; + let mock_l1_provider = MockL1Provider { l1_messages_provider, blobs: HashMap::new() }; let mut pipeline = DerivationPipeline::new(mock_l1_provider, db); // as long as we don't call `handle_commit_batch`, pipeline should not return attributes. @@ -455,8 +520,10 @@ mod tests { } #[tokio::test] - async fn test_should_derive_batch() -> eyre::Result<()> { + async fn test_should_derive_calldata_batch() -> eyre::Result<()> { // https://etherscan.io/tx/0x8f4f0fcab656aa81589db5b53255094606c4624bfd99702b56b2debaf6211f48 + // load batch data in the db. + let db = Arc::new(setup_test_db().await); let raw_calldata = read_to_bytes("./testdata/calldata_v0.bin")?; let batch_data = BatchCommitData { hash: b256!("7f26edf8e3decbc1620b4d2ba5f010a6bdd10d6bb16430c4f458134e36ab3961"), @@ -467,37 +534,13 @@ mod tests { blob_versioned_hash: None, finalized_block_number: None, }; + let l1_messages = vec![L1_MESSAGE_INDEX_33, L1_MESSAGE_INDEX_34]; + for message in l1_messages { + db.insert_l1_message(message).await?; + } - let l1_messages = vec![ - L1MessageEnvelope { - l1_block_number: 5, - l2_block_number: None, - queue_hash: None, - transaction: TxL1Message { - queue_index: 33, - gas_limit: 168000, - to: address!("781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC"), - value: U256::ZERO, - sender: address!("7885BcBd5CeCEf1336b5300fb5186A12DDD8c478"), - input: bytes!("8ef1332e0000000000000000000000007f2b8c31f88b6006c382775eea88297ec1e3e9050000000000000000000000006ea73e05adc79974b931123675ea8f78ffdacdf0000000000000000000000000000000000000000000000000006a94d74f430000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e8748000000000000000000000000ca266224613396a0e8d4c2497dbc4f33dd6cdeff000000000000000000000000ca266224613396a0e8d4c2497dbc4f33dd6cdeff000000000000000000000000000000000000000000000000006a94d74f4300000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), - }, - }, - L1MessageEnvelope { - l1_block_number: 10, - l2_block_number: None, - queue_hash: None, - transaction: TxL1Message { - queue_index: 34, - gas_limit: 168000, - to: address!("781e90f1c8fc4611c9b7497c3b47f99ef6969cbc"), - value: U256::ZERO, - sender: address!("7885BcBd5CeCEf1336b5300fb5186A12DDD8c478"), - input: bytes!("8ef1332e0000000000000000000000007f2b8c31f88b6006c382775eea88297ec1e3e9050000000000000000000000006ea73e05adc79974b931123675ea8f78ffdacdf000000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e8748000000000000000000000000982fe4a7cbd74bb3422ebe46333c3e8046c12c7f000000000000000000000000982fe4a7cbd74bb3422ebe46333c3e8046c12c7f00000000000000000000000000000000000000000000000000470de4df8200000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), - }, - }, - ]; - let l1_provider = - MockL1MessageProvider { messages: Arc::new(l1_messages), index: 0.into() }; + let l1_messages_provider = DatabaseL1MessageProvider::new(db.clone(), 0); + let l1_provider = MockL1Provider { l1_messages_provider, blobs: HashMap::new() }; let l2_provider = MockL2Provider; let attributes: Vec<_> = derive(batch_data, l1_provider, l2_provider).await?; @@ -535,6 +578,8 @@ mod tests { #[tokio::test] async fn test_should_skip_l1_messages() -> eyre::Result<()> { // https://sepolia.etherscan.io/tx/0xe9d7a634a2afd8adee5deab180c30d261e05fea499ccbfd5c987436fe587850e + // load batch data in the db. + let db = Arc::new(setup_test_db().await); let raw_calldata = read_to_bytes("./testdata/calldata_v0_with_skipped_l1_messages.bin")?; let batch_data = BatchCommitData { hash: b256!("1e86131f4204278feb116e3043916c6bd598b1b092b550e236edb2e4a398730a"), @@ -588,8 +633,12 @@ mod tests { }, }, ]; - let l1_provider = - MockL1MessageProvider { messages: Arc::new(l1_messages.clone()), index: 0.into() }; + for message in l1_messages.clone() { + db.insert_l1_message(message).await?; + } + + let l1_messages_provider = DatabaseL1MessageProvider::new(db.clone(), 0); + let l1_provider = MockL1Provider { l1_messages_provider, blobs: HashMap::new() }; let l2_provider = MockL2Provider; // derive attributes and extract l1 messages. @@ -611,8 +660,124 @@ mod tests { Ok(()) } + #[test] + #[allow(clippy::large_stack_frames)] + fn test_should_derive_blob_batch() -> eyre::Result<()> { + let handle = std::thread::Builder::new() + .stack_size(16 * 1024 * 1024) + .spawn(|| { + let rt = tokio::runtime::Builder::new_multi_thread().enable_all().build()?; + rt.block_on(async { + // + // load batch data in the db. + let db = Arc::new(setup_test_db().await); + let commit_calldata = read_to_bytes("./testdata/calldata_v4_compressed.bin")?; + let blob = read_to_bytes("./testdata/blob_v4_compressed.bin")?; + let batch_data = BatchCommitData { + hash: b256!("fdd4ed0eb20398b3fc490ec976dd2ed99f1a898540a18874f302b38732e57431"), + index: 314189, + block_number: 20677405, + block_timestamp: 1725455135, + calldata: Arc::new(commit_calldata), + blob_versioned_hash: Some(b256!( + "013b3960a40175bd6436e8dfe07e6d80c125e12997fa1de004b1990e20dba1ee" + )), + finalized_block_number: None, + }; + let l1_messages = vec![ + L1MessageEnvelope { + l1_block_number: 0, + l2_block_number: None, + queue_hash: None, + transaction: TxL1Message { + queue_index: 932910, + gas_limit: 168000, + to: address!("781e90f1c8fc4611c9b7497c3b47f99ef6969cbc"), + value: U256::ZERO, + sender: address!("7885bcbd5cecef1336b5300fb5186a12ddd8c478"), + input: bytes!("8ef1332e0000000000000000000000001812f0e31dfc99c1f64ef69767a80424c299579c0000000000000000000000001812f0e31dfc99c1f64ef69767a80424c299579c00000000000000000000000000000000000000000000000038233cd84fbc3b9c00000000000000000000000000000000000000000000000000000000000e3c2e00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000"), + }, + }, + L1MessageEnvelope { + l1_block_number: 0, + l2_block_number: None, + queue_hash: None, + transaction: TxL1Message { + queue_index: 932911, + gas_limit: 168000, + to: address!("781e90f1c8fc4611c9b7497c3b47f99ef6969cbc"), + value: U256::ZERO, + sender: address!("7885bcbd5cecef1336b5300fb5186a12ddd8c478"), + input: bytes!("8ef1332e000000000000000000000000e8c11b95621c80ac03f41bc33b36f343a1d95a25000000000000000000000000e8c11b95621c80ac03f41bc33b36f343a1d95a2500000000000000000000000000000000000000000000000002c68af0bb14000000000000000000000000000000000000000000000000000000000000000e3c2f00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000"), + }, + }, + L1MessageEnvelope { + l1_block_number: 0, + l2_block_number: None, + queue_hash: None, + transaction: TxL1Message { + queue_index: 932912, + gas_limit: 168000, + to: address!("781e90f1c8fc4611c9b7497c3b47f99ef6969cbc"), + value: U256::ZERO, + sender: address!("7885bcbd5cecef1336b5300fb5186a12ddd8c478"), + input: bytes!("8ef1332e000000000000000000000000de9692389a2883b0e74070d6f17fbb4d32741e68000000000000000000000000de9692389a2883b0e74070d6f17fbb4d32741e68000000000000000000000000000000000000000000000000068954012935800000000000000000000000000000000000000000000000000000000000000e3c3000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000"), + }, + }, + L1MessageEnvelope { + l1_block_number: 0, + l2_block_number: None, + queue_hash: None, + transaction: TxL1Message { + queue_index: 932913, + gas_limit: 168000, + to: address!("781e90f1c8fc4611c9b7497c3b47f99ef6969cbc"), + value: U256::ZERO, + sender: address!("7885bcbd5cecef1336b5300fb5186a12ddd8c478"), + input: bytes!("8ef1332e00000000000000000000000095a8fe010ec6f0ca854dd78c46b9c4cbedac117900000000000000000000000095a8fe010ec6f0ca854dd78c46b9c4cbedac1179000000000000000000000000000000000000000000000000063eb89da4ed000000000000000000000000000000000000000000000000000000000000000e3c3100000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000"), + }, + }, + ]; + for message in l1_messages { + db.insert_l1_message(message).await?; + } + + let l1_messages_provider = DatabaseL1MessageProvider::new(db.clone(), 0); + let l1_provider = MockL1Provider { + l1_messages_provider, + blobs: HashMap::from([( + batch_data.blob_versioned_hash.unwrap(), + blob.to_vec().as_slice().try_into()?, + )]), + }; + let l2_provider = MockL2Provider; + + let attributes: Vec<_> = derive(batch_data, l1_provider, l2_provider).await?; + + let attribute = attributes.last().unwrap(); + let expected = ScrollPayloadAttributes { + payload_attributes: PayloadAttributes { + timestamp: 1725455077, + ..Default::default() + }, + transactions: Some(vec![bytes!("02f9017a830827501d8402c15db28404220c8b833bf0fa94d6238ad2887166031567616d9a54b21eb70e4dfd865af3107a4000b901042f73d60a000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000005727465727400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045254525400000000000000000000000000000000000000000000000000000000c080a01ab3cf2a93857170eb1a8a564a00dc54d9dbc081aff236614c05f00f89564e7ea076143846b8e83dbbedc9f7f39d9e1efafd2aa323af5977acbc3b7559eaa61338"), bytes!("02f90213830827505d830ebf5b8403c6fdd68303160094aaaaaaaacb71bf2c8cae522ea5fa455571a7410680b901a4a15112f900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000014000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000ca77eb3fefe3725dc33bccb54edefc3d9f764f9700000000000000000000000000000000000000000000000000000000000001a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a96557e8b05a2e0dd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001000000000000000000000000000000000000000000000000000000001ce571940000000000000000000000000000000000000000000000000000000000000000c001a038385859bdc661006ee04173ef0c5e7d259f213b38ec65c5ac5664cc2263588aa06edfcce7499e39f78ff336265222272f75e3b8b6292bc5e7a9b785ec2764357f"), bytes!("f901d43c84039387008301eb0694dc3d8318fbaec2de49281843f5bba22e78338146870110d9316ec000b901647c2ccc45000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000006d1aa44dfe55c66e2dd413b045aaf3db92e8bf920000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004108690eca0b490e1a9ebaf85710cce8dd72d48eeb6e74f03fcf1ea58638afbe8808c5076a512e0993e77b117e938d8505bd41380209374a5fa1736040386f9c7a1c0000000000000000000000000000000000000000000000000000000000000083104ec3a00a9daf43e323158d459652563edb141a0df3f2b6d890f6307aac52c74e0bbbbfa02163e491f0cfbeec828ccf98b8877db9ba2a6552e18b2d4d3a8c5ded1d407d73"), bytes!("f8948201ef8402faf08083018a31940241fb446d6793866245b936f2c3418f818bdcd3879970b65dfdc000a4b6b55f250000000000000000000000000000000000000000000000000098c445ad57800083104ec4a097f352f786ffb1ddf9d942286cbd9ff6839f46093767c4326a1cf9bc1f117500a048cfccfe406c692cc717a670a0148fef79789aceb282cc3d0e6805593ad605cf"), bytes!("f90bd45c8402faf080830e3b1994a2a9fd768d482caf519d749d3123a133db278a66876a94d74f42ffffb90b645973bd5e000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000ca77eb3fefe3725dc33bccb54edefc3d9f764f97000000000000000000000000000000000000000000000000006a94d74f42ffff000000000000000000000000000000000000000000000003e3fdab75eefcae8200000000000000000000000083412753e54768f8bed921e5556680e7a3e1910800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000066d85f8c0000000000000000000000000000000000000000000000000000000000000a600000000000000000000000006131b5fae19ea4f9d964eac0408e4408b66337b5000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000009e4e21fd0e90000000000000000000000000000000000000000000000000000000000000020000000000000000000000000f40442e1cb0bdfb496e8b7405d0c1c48a81bc897000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000004e000000000000000000000000000000000000000000000000000000000000007600000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000005300000000000000000000000000000000000004000000000000000000000000ca77eb3fefe3725dc33bccb54edefc3d9f764f970000000000000000000000006131b5fae19ea4f9d964eac0408e4408b66337b50000000000000000000000000000000000000000000000000000000066d85f8c00000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000401b96cfd40000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000008f8ed95b3b3ed2979d1ee528f38ca3e481a94dd9000000000000000000000000530000000000000000000000000000000000000400000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000f40442e1cb0bdfb496e8b7405d0c1c48a81bc897000000000000000000000000000000000000000000000000006a94d74f42ffff0000000000000000000000000000000000000000000000000000000000030f0b000000000000000000000000000000000000000000000000000000000000004063407a490000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000f40442e1cb0bdfb496e8b7405d0c1c48a81bc897000000000000000000000000ccdf79ced5fd02af299d3548b4e35ed6163064bf00000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000ca77eb3fefe3725dc33bccb54edefc3d9f764f9700000000000000000000000000000000000000000000000000000000044a4e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000041783c314dc20000000000000003e6fce47750c3ecea0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000ca77eb3fefe3725dc33bccb54edefc3d9f764f97000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000e7a23e2f9abf813ad55e55ce26c0712bf1593332000000000000000000000000000000000000000000000000006a94d74f42ffff000000000000000000000000000000000000000000000003da07eeddb6d6509a00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f40442e1cb0bdfb496e8b7405d0c1c48a81bc8970000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000006a94d74f42ffff0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a8337cce66f217701071a68a503caa8bf139b1840000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002317b22536f75726365223a22686970706f2d73776170222c22416d6f756e74496e555344223a2237322e323133343430313133383636222c22416d6f756e744f7574555344223a2237312e3931343239373937333238373232222c22526566657272616c223a22222c22466c616773223a302c22416d6f756e744f7574223a223731373638373037373539383535313532373730222c2254696d657374616d70223a313732353435353036382c22496e74656772697479496e666f223a7b224b65794944223a2231222c225369676e6174757265223a22436d38564441314d3466386b696f525546383976695344495765474e785858726c3842643651396a70493057764c652b6f4d655246394472484e73544c463045315a5842736e55384b4a393173693447674631524d74614d334c777030324f5136383879704e796e436b3978425a4b2b796b427074416647614b35516a49794f45712f36494d4a654d3772626f59444675713166414f7370394634683543714c44622f7469722b507562677131474b693742556a6d6433584463796239386a70377a5132783533744e52766e52683955484f44636932516252634a6e337272394157327252397653697a4b46336874676c546b794a6a61725251446e735644772f3274687447595a4e7a516a417361354b717236323679796e466f49493175387779714b547a6b3052512f6f464d4a7a55752b454563704d752b4c626a7835322f50556c6735526678666568507066666a4a53514a773d3d227d7d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec3a0aa2e2380709f2b0c6b8fcc48ba4c6942aea501a867d2bfe27a5979a9900b9692a044a21df53a177fff5c1348b3cdb23f82bab41b8fea58d68138234a302d87d904"), bytes!("f88d8201078403938700830100a794e6feca764b7548127672c189d303eb956c3ba37280a4e95a644f000000000000000000000000000000000000000000000000000000000134da0883104ec3a054336f213352ee4faf92a752befcfe39c7a6a18ce3d7bcc56b6dc875454d76dba00e9ebd78c3aa468f4d311e3ebfeb0c8c79a1f3cfc3a26ed71d3665fc6820b5d5"), bytes!("02f8b28308275024830ebf5b8403c6fdd6830415a894ec53c830f4444a8a56455c6836b5d2aa794289aa80b844830cbbbd000000000000000000000000274c3795dadfebf562932992bf241ae087e0a98c00000000000000000000000000000000000000000000000021b745fecb550714c080a0e8f444aca5c459c27676e185579de1d6cb5eb88d4e350fd6dade07946ede16a8a0165e301acebf43a608e747e07b2e32ddd86cebb24ec98440c34b919c49fcedd7"), bytes!("02f9025483082750518403db832c8403db832c8308bcf394c47300428b6ad2c7d03bb76d05a176058b47e6b080b901e4f17325e70000000000000000000000000000000000000000000000000000000000000020d57de4f41c3d3cc855eadef68f98c0d4edd22d57161d96b7c06d2f4336cc3b490000000000000000000000000000000000000000000000000000000000000040000000000000000000000000295f5db3e40c5155271eaf9058d54b185c5fff1300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000002dbce60ebeaafb77e5472308f432f78ac3ae07d90000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000074670a3998d9d6622e32d0847ff5977c37e0ec91000000000000000000000000000000000000000000000000000000000004e900c080a0f63bb59e762a76fe9252065519362897d63795bedffe88fc922a683c82e7e8d0a07693bc90d37b2922650f8e065a0daac6ea71af62c83b4fa69285e7c511785b7a"), bytes!("f902ae819a8403ef1480830ae583940b4d5229bb5201e277d3937ce1704227c96bbc5f80b902443c0427150000000000000000000000000000000000000000000000000000000000000020d57de4f41c3d3cc855eadef68f98c0d4edd22d57161d96b7c06d2f4336cc3b4900000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001bd63bc394b1e44a60f0d5ea4fbb61937d973ddcd80b241370f7939607494853112eb2c36e5e4a5d7b9184961380642680541125dfdd9c0764b7a2efad85f926c30000000000000000000000001f4a828ff025fa8270bfd1d4d952e75079bb593d0000000000000000000000000000000000000000000000000000000066d868f00000000000000000000000005b0d7cfaf6557f026591fc29b8f050d7537b476400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000c5d859d4bb0963c8f946d3b3751e4976165b38e0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000083104ec3a088eb2685bd6b79ae008d6b0ee74b09341d79f590c8b3faea5dfa2237644bc716a01482d3425fa581941b057a4d20960a90f20ce9e43fb425e537d565be705b3e10"), bytes!("02f8768308275083018b348398968085012d5fe6308275309409dcae886c35e45f2545c0087725e36e18b032eb865af3107a43ea80c001a0922e3023fc0a04bb29ec74efecebb381535ef2453907b101b342f8254fa73072a04b5c97606536ab8d9b7ffec96fab415729c53d18b5ff12f5a4fd148f4aa42d15"), bytes!("02f8b1830827505e830ebf5b8403c6fdd682d9c494e97c507e2b88ab55c61d528f506e13e35dcb8f1580b844a22cb4650000000000000000000000000cab6977a9c70e04458b740476b498b2140196410000000000000000000000000000000000000000000000000000000000000001c080a0dab66684749d0773893d7cce976dc4a8d2182db8a59044cd9bbd4d0d64f432a1a01bfe61ca3ceae4a81c3668369c36a0eda672f45d63e3935b13f2a694611da6d6"), bytes!("02f902138308275059830ebf5b8403c6fdd68306cff794c47300428b6ad2c7d03bb76d05a176058b47e6b080b901a4f17325e70000000000000000000000000000000000000000000000000000000000000020d57de4f41c3d3cc855eadef68f98c0d4edd22d57161d96b7c06d2f4336cc3b490000000000000000000000000000000000000000000000000000000000000040000000000000000000000000dcde5e9d35d5a1fe9e0eb3185459b3323e09b73b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000001121f46b5581b5285bc571703cd772b336aa12e600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000c001a054dc43a6d710d99764add84512d022b4961dd39bfe366967acec0d39a5ab820fa050362c7b199a5bae81b1b56b2bb70058f64a70a01044821232b2c11aef78250d"), bytes!("02f8b983082750288402e577518402f49919830309f194ec53c830f4444a8a56455c6836b5d2aa794289aa86d8bcb85faa78b844f2b9fdb8000000000000000000000000274c3795dadfebf562932992bf241ae087e0a98c0000000000000000000000000000000000000000000000000000d8bcb85faa78c080a0b12f8b14c62254ac38a2e0f567fa67c642ed485c43d9f2db2a1f93ada8173c86a0178e3a021c50b57fc6f949201d2e1667a243ba0ea94dbf3199abeecea6c20194"), bytes!("f88c81a78402faf080830100a794e6feca764b7548127672c189d303eb956c3ba37280a4e95a644f000000000000000000000000000000000000000000000000000000000134da0883104ec3a059393dff7dc95d7e2f74053268bc1ab67e03ea0aa115929cd31912fca57d8c66a07330a31a06c957e6b4b31eee08a37c5dc15e31d1a37d4284475adc0a248fa920"),]), + no_tx_pool: true, + block_data_hint: BlockDataHint::none(), + gas_limit: Some(10_000_000), + }; + assert_eq!(attribute, &expected); + + Result::<(), eyre::Report>::Ok(()) + }) + })?; + + handle.join().unwrap()?; + + Ok(()) + } + async fn new_test_pipeline( - ) -> DerivationPipeline>>> { + ) -> DerivationPipeline>>> { let initial_block = 200; let batches = (initial_block - 100..initial_block) @@ -632,7 +797,7 @@ mod tests { let db = Arc::new(setup_test_db().await); let l1_messages_provider = DatabaseL1MessageProvider::new(db.clone(), 0); - let mock_l1_provider = NoBlobProvider { l1_messages_provider }; + let mock_l1_provider = MockL1Provider { l1_messages_provider, blobs: HashMap::new() }; DerivationPipeline { pipeline_future: Some(WithBlockNumber::new( diff --git a/crates/derivation-pipeline/testdata/blob_v4_compressed.bin b/crates/derivation-pipeline/testdata/blob_v4_compressed.bin new file mode 100644 index 00000000..3bd385aa --- /dev/null +++ b/crates/derivation-pipeline/testdata/blob_v4_compressed.bin @@ -0,0 +1 @@ +0001a04fcf0500540f056cba08002d0000276d000030a000001bdf000023780000001c5900002d3e0000202d0000186d000024cf000010c4000038430000191f0000002185000014b1000015e1000013bb00002849000027f500001631000020008200002ba000000aad00002f720000185c00001fe600002ab100001f4e0000002ec600001a4a000029b1000026b600001046000022400000208500003347000000168a00002ad10000031d000025d200001ec900001b46000029010000239d00000031d800001cb4f902ae81b784039387008309c10794a599ba9656cd5bb300c1d841c9866704bdeb724dfe80b902443c0427150020d57de4f41c3d3cc85500eadef68f98c0d4edd22d57161d96b7c06d2f4336cc3b4900e0001be54cdb4d00f10c1ef90655718fa09dd0ddc0e1a77752dc858d3197d4e9fd103d3427e8280070b3ae9270bdc39a166642a1c2950719e5af57d0af7f12ef50fc5649fa00f100528c74d1feb0b7ae6233996c9434e978082f440066d868760032a3e643eeb50061ec5799d5664731bf4f102d78df00c0006000ed269a526ad793ccb671ef5500a7af6e45f300d46200400083104ec3a085a44e375fb050d284dba732373e6d00d5defc09ff8ac416c1df5c3a7ed4643f13a063693dc14816a03d1b7f4e5afa00066ffeaef8c25adb8ce2d724cf316dd613aa80f8ac338402faf080830162f9009406efdbff2a14a7c8e15944d1f4a48f9f95f663a480b844095ea7b30022d40073030f116ddee9f6b43ac78ba3ff2bd42a5ee43ffa866a0edc8a14e78fe7d500ff9d215c857af8c959ce0ed192e498a020e27d7394b7bcf7c3fa1135d37b5a009007198b1d9d8a4bd2958b893370d0321202f902b483082750818083102899008403d1e0b383082a889439571bbd5a4c5d1a5184004c63f45fe426db85ea1c00a346eb484911a27a5b9463dfcf8c02f6fd2f29d225bb04045bd098a439d7e5008005b9bb616a7cae7a0c6753d0a0f10671b8e1e3a5e50fb9dc35241d2630a00054e617d9a552c60dda4de2b494ca38e2bc425647a84a72be93d14c5defb8f4001af8fb092f58e3c71c712b8501a623f348a12cfdc6b64a8c9e883dd9b24343008e79c080a0b0eac426ed949a27f739dc11d5c8cfadaa478e9255fdbbbbc0fb00a4e1db381de1a01b06d117577d2cc5736fa76257d445381845559d1343699e00d848e3b88cb806fbf8ac3431aa33a3e926ab56afa50ecc41b8521ef00dcfae0059a75113c5e8a9e8bcd24d98a04bc24fd706c2d97f71a97a0e7af3626435f0004be41248864443ab03e95bc099f3d2057dcb2d504b4321899feeaebefde3b600b7b4a7b4a4e626be25823cb0700a9aa055d4ce4dc7d474fb1b0ec1013c3c12003aef773b0083d4731fcf6ee5fd44872ff9f870830cda048402fd71d9827b0c009430bf0185ab4020d733fa0848c89f55e23f0b6f768710b2a00671c006808300104ec4a0d98cb4ae65ec428f7de0b8ce340e62d1b43ffb1c200171e88666b500127e733b14a070b12996d304813b956843387d65684c9b3bd50e3f212ae03900f629d012490c88f90d937984042c1d80830a8807941231deb6f5749ef6ce690043a275a1d3e7486f4eae8677106ea2efe1b90d24a8f6666602200440e3173500df868d0383988e72facd1bf88eab15f5798c9c75bf6e31168aee8ff9ad01010080eb466342c4d449bc9f53a865d5cb90586f40523f928caff83473c82e2a6d007b5992c6f26abc679d266aeedbe7080573717569640f6a756d7065722e6578006368616e676501bfe03c9e20a9fc0b37de01a172f207004935e0b1269e914600d083bd37f900010104269e914604269c5ad40147ae0001d804ba88371a3f0000ddaca03cbc2b6c47f38105fc0000000159725ade030102030006010101020100ffaaab4ab40901a413e84e99326a673d68ced9ae7a012000000160000001c0000200000320056c696e65612a307863653136463639333735353230616230310033373763653742383866354241384334384638443636360761786c5553444300a0c005900000000302e02000a000aaae99091fbb28d400029052821653c1c70052483b000101a001e0000104414bf389176211869ca2b568f2a7d4ee941e07003a821ee1ff640191bd306fd3261985d000052b9ed81a372be941c508f5b38100a2aee75e4fefca4dbbd25960d400778c3316bc09a297217c8eb5b0f12238fb005f7eae97a0434bb3d55fe49bcab4e381c72015cbad5c61c7d3d9648217b42c0023a7d81d4524f86f829f7c840ef3393f82f618940605e76bb3bf5cd33e3828007a020a7129687a1a7d8709bfa74943800080f040ebb578b5009b2aecae1e23002b7152ac14225d36c4d940025082ce5d84932fa065f6d8b21dabe66d439c6900e6a78655a1e6baa2028a0f383db47522e9199d2975f902d0830221bd842faf0008008304a374942f2afae1139ce54fefc03593fee8ab2adf4a85a780b90264007c39d13040012700000010011719dc38aeae620380430c200a6e990d5af548000117f2dfc7ba401ad8a1b049b7075bcf84147ab9ead22cb77d42d975bf2600000b7aaa000a7e1d3d72b1b2bdfee86cde8483176da61bacf9d48351f82e3d3f009dd9743cbc6b8fd43619b62af30258c474cefc8bc4d2b16ac16bfb0c08dce60032aebc20090d38cf261c00a5e1069f7d172fda1df06825b227cf53a0e2552c0098df860a77ae34cbfface71b7f3422dd4e0316405109321105f5d5618ed20100cccb9d5f5a48a5641d7fd0be1cfdb3e829744d6a4c678410b5f45a738107f4002884da496a08fddcb2cd9d83101d2d455bbb15eba47af1b0da6de7c5dc1ad50010d607c028c97f06782835e8f8a8561c8d03000a7e1d000021050cb0354e9c0051960a7875724343dfc37b93d32609000827500000c0fabf14f8ad908b2dce004c8aa2e7c1a6bd06995700001499acc25f10074861038cf29b91bf77144a830096071afd498d7580b7d5b0f6315adb4a5165bb8005836baf8cf42dcacd18550084ccc3f04d62e2a0543e371cd185723554efd621ef0cd437a41c6abfc6d260003e48f997fe4fc2782302f9043b830827508201da030015941195cf65f83b3a005768f3c496d3a05ad6412c64b78644364c5bb000b903c4d123b4d84003db3600333138b8441581d71de69b3ac0c1ec26695af5d11f6460eb52f6443cad742f00f2e42282f64bd7892f6b4d8a16a36a000000e0b0f4d540cb78ed309242e7bd007920e7c77e3ff202400202000000084d6574614d61736b35697066733a2f2f00516d65743235504c79765646384559485247514d6b626d6457326e3935456a004c687552415268375a4e54343457730000004124572c36ed7309c1c1a0d83800eb9a62da5c4ce8dc7f56904206ccf08188e199543696edb5b73a506f389e0d006b05804b6320c9cbce9abf0a729dac8917d82d5b71c080a041a89b47090f8500b133e7422f398528984755eee977049abda21832ac6245200fa00c94c609ca00535d5459fe60a2599415a7ef681e37f474d79aaf130f2b9e8f3d9c02f902b300830827503a8310a8898403d260a3830712f3947673f45e6e95373ba22651a400f5f594edec3006bcd3ce41d1debded65099e4a1c5d1d74f2252a1e3805c406002c049b2f2768fc16cf16075e983bf7f9cf81b8ab4428f03e8bb4a3a4121fdb006c42e78628c647f3f91c2844a36b01acd930e931f2d7305bf6dca659afad7a00a0e06e74457e646868faa625c6e8cd2eea4cb4e60a584c042133af17f3e52200f09a77ee1496f3a56701a0f69e73c1664f93b18469b0883c0a3eeee8ace8c1009a2f1d7dfdf124e3b9de2022a06dc86aa4510569bfe9a628b3bd92be3f316e009f5adc1339b1c6286c70fda08ca7f88b250100a794e6feca764b754812767200c189d303eb956c3ba37280a4e95a644f0134da08fc4678314bf54b52e5a12a0033c11e01837a9996d779ae304add0a0462a2adff9ea051a70a2c3afc1188f3002bcd2f6a769fa8111ba750b42a161d9c98bb9a491c6ddff86f82419d84035700a38a82520894e574dbb9ba41898c12278312ccbdad80bfff05d38746f29bf4002a23ea69d76e06c1930c710e1bb72bac9573add1a8ea07051ebf0e34e78820008088a548a063500ea01908b524b30ace2a51f03aee6f6519c2bc6567238d9c007ae477aa77cd02f905748308275081d521cca994aaa78e8c4241990b4ce15900e105da08129345946a80b90504ac9650200006c0000203800460a40c49ccbe00000001cc7324cfdbeef8eae970590066d9abcd84fc6f784449404b7c085d1e007512390000004506c3db8e35404c2b3a103d6a899ead04b07a4c64df2ab5bb0080137510979822322193fc997d400d5a6c747bf7064ffa29e94ba4f5f8d3650040967ecff87b3d2771c8769b099dcdc3f8c44bf85600aaae8378809bb8815c0008d3c59eb0c7d1529ad769002442966c68c001a07981f69bc1728c571ed89c00fee1b8b4dc1cabe163edd7608751ad50a3b59f2c56a0548b6cd134375deae000973057ae822404fc32591e6aa5a28bdf7bb97026e63d13f8d4248403ef148000830493e094ff75a4b698e3ec95e608ac0f22a03b8368e05f5d880186cc6acd004b0000b864474cf53d11fcfe756c05ad438e312a7fd934381537d3cffe3a890072e454cab8e299547e0af3cceed16d6a937ed7e1b6ba62bb445203ae3b604400c1d8ccb144a0e351f4914d780d101de930a63ea07a6b7c15af9a43b894e49c0035cd9c695cb53c6661fed0daf3a623790ef7ddd9d6f86a578255f094e10add002ad591a7ac3ca46788a06290de017b9fb48084632a9a52171b2fd7d9e7f907002456b41e7da55caec4983afc34bd323d5781e2c193181926a07fb1e566611d0008ab3ae061e781cd5cd194391de6d1bd65abeca376f3b39c356602f87383080027501f82520894053151c0de2f61a170b68f02b7ede7b6f27fb56c87177d94003741400080c001a006665866989504a4134d889a736987887bb28e257321a800badd7c74b1ca1c9a1ea06a2609e2cfb5e931de5db8abbae9863ca5aca3362a00d8f9e99014e88f59292aa502f8ea83082750830ada560284056fb7b882b35f009453000280b84439455d3ad9d600e901f838f703e1a03ab2bc2f5b413df4fb004bd4e53d27bb60acca4431614f365edb18df28a0ee087601a0d5c6b1d506ee008b0695b4f8a210a92c4c7ae9c4bc108f6b7ce67313bab0fcc2f0a001272bbd00f27b79d71a854d186f054a48e6089c96589d3f64d022dc04f182620902f878000bc9fb843b9aca008502540be40082520894d33a38a97c0de9743a8952d1160024316147f7b1a887f75fd87241a2e180c001a0e83d5a0ad7bfd1e7158900ba002019168fe48307100ad26f8145bb9f8648a87911a042b94f9f46538cad86aa006726f6a06d4330d2fed155d79bfb045647a1579a374402f9087b830827505000840ded296d8306ed1a946131b5fae19ea4f9d964eac0408e4408b66337b587009c418d50ecef40b90804e21fd0f40442e1cb0bdfb496e8b7405d0c1c48a81b00c897000003a005a020c0eeefc20e30d67f5270eef2f0304da40663026380550066d85f1d0280204063407a49029e59ecd8d3891afa9d9b9d6562653d5be72000cd1753040120000000064c6418062414ca00021f7b22536f75726365223a2200222c22416d6f756e74496e555344223a223130352e38373031333034323637003635364f75743934363133333934333434363234222c22526566657272616c00466c616773223a3036363954696d657374616d70223a31373235343534393500372c22496e74656772697479496e666f223a7b224b657949222c225369676e006174757265223a225659645a58526a73614649363031656e465052634a686700573654374f45617768487343357756727043424a5a75416a6b776c447633410042552b2b7151786650462b6839387639736c68614f4d3170624e6b354a6e61004a48746134355448744977716e4941554643635632776f3250774e384c4b5300385744634258594d65714c3453316a4165394369712f6433592b2f4769326f006c504c7342707338586761516b62684a59634a37316445715a45303861747a00774a66587a7a70492b64415961736d5a324d66664c46474f6c434f68712b4e004b43516c34726f3254467332365748562f4d5056516f5659337378357765700049757a5061526b7848454947705a6552684675713047544f6a4b627950614c006455326a5a6a31474a44755273396754334d6365637653315a7964574563500059696a696944682f336f717548544b794e55733448464f4a4f2f4d6f2f5950003635784756714e52773d3d227d7d00c080a07fdf3c4f8a4ac0950ebbccaa520013cb031f2e79d462a8f1f8eb0b0e6dbde57279a060713cdafdc68d143c87d500a9ea31a625b8dc116af03ef720efbcb26a042e459af9041481c4047d06a420008bd5f69ba0bb42c4b18c716541bc4007ee30160eb3d6b3e9ae2564c8e259cf00eee35088e4484e41ea9878b65fde2af574a1db64e39c4551a1a6d4c0f943a30047fc23514a672080a0c0514c324863746d7938324c766e5947646b3878756b00775341414d6e66527363756a4a34703244716a6251317738fb51cb963c5383001bcf703d68a21b392000443bfbc6d4d653c268697a680ebf40ac83c4f705e400b79cf22a9d57f342eee4738759d3657f9865fe6c969f01a2919ae09ac79096006e41fa345b5c4c442d38e208a605a179cec5125750b9d48c6ddda05af31c2f00a4d1ca4c3bfce72c1292894c8bd931902d200ab80df7958a06038c0e02f902001b708302ae2494aaaaaaaacb71bf2c8cae522ea5fa455571a741068802e86f0085123c4000b901a4a15112f940000101010ffff5433e2b3d8211706e6102aa0094711dfadd8ac080a00cd63f222de1bf6f71101cac1fe98c6871f5e81a3e3d00ac17fd6c15b1d12b7ca6a0681ed515fb59113a0d7ab07d2f068dac8a01a14f00085a4e667cbf1ec87221ef27f902af8201498402b7dbdd830aaadf947de3c20053b3f28e78fa82273527b6da1f0b20c7df89559dca5892254cc89fa5ca83e4006e77fc05b4463c63820765bec855f588f3d36d945a8fe8777171f5d270e4da0093da313b3de86c8b99abaa2b707a992aab869c7ed125ccb1672190892e3a09006b8df5757367cea4d339deba98e1ff83db99d404acf160f0da39e5b3ebf2f900a467ca6618aca2cdf797ffd5720c87fb7094fe3d85862724a8b91f1194ecba0043ba0c588b06c7865dc3018b2e992ba7d33da06f05e78cff1ce209837c9db70000e62104e842625bf2e9371a39089f8670c19c46f86f830cda05daba85085c006f176a27a22b364beae334012c3a4786befe6f6720a6bde7ca309c28246c9c0007fce8e45bf10f10cac19150c461cfa3731a225198f1a005bcca2486b68bae009cba5cc25b2ba0c023d8fd06b2e93e42e565d1be6385774202f9028483082700502f49f08086b5e620f48000b9022360806040527389a512a24e9d63e98e4100f681bf77f27a7ef89eb76000806101000a8154817302191690831602179055005060008060009054906101000a900473163460405161009f90610185565b6000006040518083038185875af1925050503d80600081146100dc57604051915000601f19603f3d011682016040523d82523d6000602084013e6100e1565b60600091505b5050905080610125576040517f08c379815260040161011c9061019a00565b60405180910390fd5b506101d6565b60006101386007836101c5565b9100507f4661696c7572656000830152602082019050919050786000836101ba600000908261016b565b9150818181036101b38161012b565b8190509291508282003f806101e46000396000f3fe600080fdfea264697066735822122095fed2c50057b62b9f55f8b3822b0bdc6d15fd93abb95f37503d3f788da6cbb30064736f006c63430008000033c080a0ad492dd3a54814559abf824d290f0e137e8b7ba500120d659b0b7c5ebee9142c07a035389f64acd1e32e218af5c4f8441477537a006d1eb570ea7fca01828154283b3a02f901820258826e8e9447fbe95e981c0d00f9737b6971b451fb15fdc989d980b901045b7d7482004031646463663037620032303436306365303266643836306639373636363162393166306237616234003537646636326238636436336165383966636635313962626440323737633200633331353066343031613362383864663036356138303331356566663438320062356436373161633838333663643634373132343236653335353938c080a000c4a7d05d46870d98656878824447602746fd33b128c0bb7561624c3991e14f001ea0019c972b644122edf3e1304d20987c0b6d87fda45d518d750129b86256009d1b7902f8b1830827505282ece2a2a9fd768d482caf519d749d3123a133db00278a667fc080a01b78e232101aac91b6e689141742e19861acedd64b522cbc00c376d4eaeb34b6c1a03e7184f9f91835c0144b54276283b70b3aa9d971a74f00b5ba2e1131a8137421f8f8d5819d9eb10b84c09a3b9373b5df9456cfef8ab80037a06d50fa34c756701bc1c3a0d11a9aca5b93f9c4e2253beb3553c9b3f87400ae46d457fb3729438dfe682ebe71a062b0bc865e42817eac1394abd7ab78d500f99b5ea47815225ee26d6a59c1695ada02f90172830827505b376239623130003833386438356431353937633035353235346439346363633365333663393700353462326163323665373936623133393538326564623536626231666130620033323734613537363839353431626234623665363134333066656461653630003262326661326232386261616331306438393435333537633462356477961d00c14439c2cd41fb1c152b5394db844079c1e64856d794e2bcb6cbb2281aa02300f2180addcc274c53b9e38a0221d3a24e9cf344a622bc97aeb0635d1d455e3e0002f87a820113830135b694cf7f37b4916ac5c530c863f8c8bb26ec1e8d2ccb0087016bcc41e90000841249c58bc080a0d9efab20e0453973b2bdd0b91cdc8f0063a6f9e41d391a7daf408a619f9c1eacb2a0535630612c01ed922bd9af3d5600d6921683e8c45c7cff9b329f557ecf60be8b4ff86f82419ef46af64b621fd100829ec37f31ba93d3c91c8b7c0b872386f26fc103eec4a0517e74f739937bf000de923060647c070cb333cb39930e7d1321531f454fd7a121a0387a18b4ebb900d73ca34539d004f4fe9cd497853bf4e16f21a28339369e5a662602f901da150083024f2594dc3d8318fbaec2de49281843f5bba22e78338146870110d9316e00c000b901647c2ccc45004000e052b054b53c906cae2c08392bd9c162840ef200468141697e91f29ff5c156f0678d40b43d2f837b82f8a267f1964532c5a8fc00f0c555da10b837e55cae409546c969f04a075e0bc462014d7a88948c50c6f500f8e983ae22c001a0bec05a79908a346502dead7771f7fd3771e3b225f3c50100a5869443f7bd8ae139a055cf9905c0f597e4c4bdfe7f3198e6978d77146540009f664b99dc85d15ccd1a6bf8ad82013a82bac294f55bec9cafdbe8730f096a00a55dad6d22d44099dffd541d0e2773a189450a70f06bc7edd3c1dc91680f53004692dbf3d4e234dbabd8089613c1d0e6e9d09a52902fd596fa6e125881a05c00ddbf82a9a9f663c673f130e2a291b455bd963ce433660bc3fe070584c6a4f5003d8310d4808404cbe2428306a46f941fe3174558b010329013c8ecb5f4d3a5007826eb4f2e7ee76a643780a2f8a05b030c47e3278bc09254b311442a3687e30069e5dc69587297111d199a61d2ad5aae34acc1111fa065f1a7347c31fe8e1e00cbf64c5a5ff86f731ef16d599ac02445af888e593b4df9d762537daa353c0e008439310d28ba738d4fa48250122db3c3364415ed1d1ddafa72d2c09634c10800625129389b80a0d74cdce838265385248ca1983f7a3f90b310e8651fe082cc00a405834406db373ca029968e155be66df5ff126afa19d81dbde50df6ea2262003aea42eefea07f71d20202f902d483082750378403e63ecc830938089439fb005e85c7713657c2d9e869e974ff1e0b06f20c80b9026448271815ac352eb04a00616c2f1c4084e6a8b912b80eedc1e1c603b4329c52fed60907cc5218891fe900c85c6e5a39dafc9897cc8b75a15bf19da8087d95240efabb69c352b8a1d62e00ed22ee3cd81ee91f00dcd90f967fc422698a465396e83ba8080874649aa9770048c1aa803dacad961e5e2de850f5e027c70b56b5afa5dfed07e7c001a09cdb00f61854532f3998db996dfb02d6ba608ab01bc7394b12bb2a5b1c552f6ce4a0006403f75f37570cb3d64463aa12d6135dda505d28513d44cbbad09c66100b0100a0f86f829f7ddf839bbbe062ae73493a6961fc34849b53f1c154879c1decf9005d70c4a0876c6c526ab3bc08d7e4c01b07269018038ab99210a2fad67922a0008747c469f6a05bf5f3d62347c4ba2bf983155369dfc2c35ffd42c18cbd8e9200bc38af07cb460ff86f82419f83061a80944564d6d107a19d3ab3d734a7bae6001eb63dc3d30f862d79883d23c3a06893a30329050813751f55feddb0d9993a00f8e8ac4b1cefaf40d2cff3f77370b3a0105e9001e3fea9c5384ad240ca0f6500a6001c9c9ee47ab8d9a184cd6932cef556d62d9a5efabdb02235ce78866a0700562bdfa8a9a6ad54f742749e614a17faaca0c2a03d670af175dbb2c1cfb2e9004e6b34d9e027c2c1238948550d83b5e6f8e230883bf902d682012283107f960087a3e27731fb5723b902640240e0016488316456530bb80003060308072cff00a74b2d5b45c813aa87b10525d795071382d6cce58e66d9abe300000000041200210e23c3f229b5967d9229d2a5b3ce1637f16fca78f9c68eff1534e706b20a006d7dc7a03f10a99ae064e26a04e04f62f8d0665d5482d88becb412a18881c000852734888502f8b283082750278405f5e10182a7b6c0ac932cac7b4d8f7c3100792082e2e8f3cfe99c1000042c1d80c001a02b2dd8d647cb71d9aa19a5c1980063e5199088ad51558939cfac6c0400616f84cea02dcde65bb1ab3ce31bd44100ab6d999b3cb278d5e484528a7e9dd868b0fea14eee02f902f38308275019030004e39480b90284d7570e452d355abe66d8894e2e2723db01202076d463285300fb165cf7c7e7fad592dac70f4fe1606c24846d9fa92a36be70941e381b6e89008e5c25bc0200c080a020d40b6413bc28ba7972015fe835495d0d332f003dc0001041e9384041a18ce5efa05b1f66514bf9413ee0e13f17b0ab5608ef70126f0077c2af63871c16fbc9806002f902ad3f8403938700830f424094546f7e725700963dcfc3a7885e911e47b76c05bb7652214d5e18291d9caacb3e53cd99ab310036f4ba6e6186ad4aa28bb97eadde36737a5f6db50329aa159567ebf2f1fbf50075831750027806799b67b07ac2418ea97b35c36c7ff6de2c6cf0722cc3b6ae009df8552de0157e4d7aa7851f6cd2e9a11597903f038a7f66e684c048bd495d00d1ecdfbd29be9eac16242fd477c45cd8675ed55ef69f933f90be1659eb0d7d00301ea1415f57fc8bb83534585812184da1a0034566142211b4e25328896f95000c54260e5a0ac87887281718dfccce683d5069024f1335f0d8aaadc02d0da300b2f8c7f37d3affb665046db8bc5c91c197aba7fc7131309b15b949e5a80a6300424761c202a8b6000bfec0454efc9dc45c6690d88d66d634c1ae9af04084670086c6b1f3a9a70afcdb447e34621b5931fc46bb131ce195448c11d9f33bbd4a002dbd4a4b79890223df86ba30781db4a078d658c503dcb65831a83aa702554200e8b9e9b8496371574a752abdc90508afc202f8d2830827501106452680b8640080500deb7f3f9531b9fff6c032cac5f16bf5eeeda013e9c001a08712102e0c00e6608e407a11079c824ae560d17d7a2ac7cf92c7dbee7d2f092a9ca02eca9e00c7d4016bbdb76ef5f7be118a97c45b1856e3235d007b9b9116a4b36f0f325e00809a85aa182a9921edd10a4163745bb3e3628487138a388a43c0097f39567c002503f853ec3855fb5c05ffe2087ec6a8e5ff559fbe4fbbf838e16a17a062a00076e56d75e88c997d1e3a3bb01d3613a814c61251954eb5695dafbd1606e5f900056e819524bcb0b97d2ba90032807a76bc12d01919643ef56a0819a2a831d3006578468f2ec4c90b8bf93a8ffe3e134758bbb282765bd10fae8c6e563b0fc500442c8912504bb63debae332706ba611216195c20cda0372142582b957456ee0001cbab296d62926c5006065249f65b532b145fc703f95cf90b6e81ca0eb94c0094a06568773a247657e7b89bba465014cf8570209380b90b047cf7bd84a7d800c010178c2210a207104128b33796bc7062520c29d9f40b418edd227587df570062ce7a9680e001d1a94a0a0a0201010101010102000101010105a00360042000056020e4707ea9bd02023faaa32926fce6be95ea2c51cb4fcb60836d320c4200000064ca77eb3fefe3725dc33bccb54edefc3d9f764f012436fdf36380e3820091e06339d10aab483c65695d004dbd5c69a037bac764494c8db4e54bde72f600965bea9fa0ac2d530064d33ee2a402e4f4e9ba1580028c7d3063579bdb0b9000997e18a770eae32e1ebb080001f4b072aabe045cadd98c3169f2f95236b39e004d874972b38427c00dfc007f462216a0015e569d24940fbbd31c9a7e5f0d850033f2b38d2e33a712437aa4651a6fa0f0a2f901af82621907a12094345780d3002d3b138660e9b67ccfc3e196bc3771a401b901441b9eba3e025230aa23beae0000000000030100271026f2ccdf79ced5fd02af299d3548b4e35ed6163064bf000101e0da810f07da1eace7f044afd081f8583dbe9cd302ec18dc2eea034fb3004baddc18f00e163dd7abcce79725e7217b2b5e48539be2ccd0d3b97fd7f9c900f295227a63674a63c505734710a056a9facf008405eb38a0f3de82d3b7f390004d63a9918d7c2721b00c9990a9440f02f8983e83112c6e8403d2e48883010600bf940241fb446d6793866245b936f2c3418f818bdcd387d5d61f4f2c4000a400b6b55f25d529ae9e860000c001a041ecd5c71c98c3fa60e293536d6d29a06b005015df395c887d83db253429830d3aa06f29ac0544fefbf6aba3e740bc2e1100c68eca8081059c5b3bb0c99380aa61afce02f902d3830827501bbc1158830700532421462f91d610a24f9b9cd4422ae62a0cea6212505005590661582f0efc00222b517b4c04ddc4808a989b90ea77cfd8492a2e4195ad7b44f9bce91715f50043974108822818964e00618c6dbf3a2034ed7225feb737207729524ec95ee800bbd0ad7d1c743e3ba8cf765fa2d91c286a59d69294d1bf9a3a4ea04b9fac8500be1dfbae309298ab84a2aa1b982fce2cdab7c60b01de105d6fa1aa2225074300ef948499a8bd1051ed3011cb79295d7286d5c9fe8af954628ef1c7190e352800feabc3f6fc8d2ebbad6a98a6552244f63e6d1b30a1e4f932d3d0becee43c89002be0c1d05098a2b0e0ff43f2b232e10151f682265836a158cfd5c58e699089005db50c3dc4cedf727a8fc8c60f80df14e3f59458a45e3d767c733d69b55c850027aa10e7f10ec881d3bdef9a67f4c6a5070ffd9a4f7feec001a0ed9fedae4b0004cfe07b35212a61e99745683c6d92827dad41f1b900cefe486666a033e97900126e65a45e8d9df824e673d1a765e4ad41b3178fdfcbef393e3ec3ee7bf90200cd1b0afcc8c2f47f04e4e607808a8a66c0afd2f39a5e860df447144a51565200ef55b6f8ebf96c63389ac437a24f27397deda0e7f9b328e44cdf91ddf0c4190086d3a54a8c79e9819d32dbf76fd97dc528901c663943246d427e5c19e846a00086436900782fcee78291d46b72e37ae0cf354185c6e56886b59d0b6676b0a00022bd8786bdc84a431b083a49b5d1e3a399985747dea285b88ee037b295e2ff001ff9020d3f0a504594c47300428b6ad2c7d03bb76d05a176058b47e6b080b90001a4f17325e740b81519f004923e3279dfd528f49bc67b1807d0001121f46b005581b5285bc571703cd772b336aa12e6f8ff4bf10be20bbe807b2ff9b2198800a06654da6e3dd0827c679768e227fad855a044d8e79d990a5a3be7d128c89b002fc7cf4aaa9f72718bd5326df2919274327990f86e8241a0840373827082520008946a9065271055e710116209c8032d2e18e42535a7865af3107a43eb811e00cfd85ef790c6eec0ff87babf272b456135e2cb1f1c5cd13a8b55825db35da0000840b1e9390f1ec38f965444601832ecd6c5c6e436e5943cc1a2814fd9fb1c00281c9507d54c05ab024ea926bc940f4433f801c8915de6e5685f6c5a97fe45007e5ce5089bc23d698565b0e44f1b78714e03946d58a92ca94bb8f648dcd75b000086c19e816d3498123be3980feabb681e51fa952c57f3be80e8c080a06f7e0063b05085164b54611d327b48ed5ad6585e1d4430539d72c5d7b69b3f5096a00049d921b4b0855bf1e04275e41fb62165fb49f3303696f92c21f4d9df36cc2100702a2727942dca57f08b8445bd6265b3667d5a420089255b92b1dd538afbe900ce10742d8bb94c8f6b652d953fac67fc2aae73e929c20d8139315e5e3569fb0030885db3c5c8af41fd52efb008993a196beea454cfcd57a7da82a7a9a662ca0078e3220399808d9cd356513887b9cab65ef6f484a09bf43258df7bc032604200f79116f47ffe7188b352c818f291432cde8e4b1f0576c188f9e40001c080a000e94c7f796e3aa84f2be2152fab267a902e850f244e29e8851673ec28915ff200a1a0234a8c722cef3d47d5062b088758db8f7775f96133b36e7b37f3da906a00ec0cda4f0147594bb780d23466061d4617dba377398b485ba9c69203046e900040eadb45a8e942ecfb5de5f8ea828dcf42272e907a2263504310256aca251e00e4d36e41cbaa69200903837663c60d5e25ca2fad34b5ed9abce67a4c3b8803001c80a0260ea37879f47a66a173dabb30c5935f38bb4d6284c8905f78190fbb00f20b49baa071af058dea27d132d62bce3c7b25be8d872f0160dd77ac01a58400e981cfac9a34f8ac0e8402e04208830276a294d240a859efc77b7455ad1b140002357784a2d72a1b80b844f3fef3a373424acc8749b5c76c7abbb1b17d1f1800ce0bb01f3f0182ccb018abf564d87cafb74dfa9cf9c2d77b0aa08921a807ae00cefa73e35fc326b67aefa075f0d5eb421fcd88b4973d4da7d20ffac267c408004bff0bad15ced482dd072271f89381858304706a94ae1c50352bc794b8d483008360ba525fb3d0db4ede870221b262dd8000a4a0712d0000012bd8c95e86ef008f48eeedf552755c2a59aec37d07ea3adad19b3ebd0be23ddec1a03c31a83d00ed6a30b4814fa32ca6a5c8089bfd1a375082f0a77a9910a392bcdedaf8ae82009f7e840fd16b2c8303b74aa9059cbb09dcae886c35e45f2545c0087725e36e0018b032eb05fb3670a83888756083ec3472fe50840092c2db3162a1ac6121ec00fd4c118007fe3afcc4a0076d73fe6b8194c2631a8a7cd647d9155fa537afca00667a1c5b4815efe27b3022f9052f8272bd8402cf159c830513d894778c97450068e376146dbc64ff12ad55b2d1c4133f80b904c4131e2a38097daadbf0e08900455162844c8260576b91ab09d95c200a2e6e09c0261b929abe0e028c5801ed00ec20004151ac5be14d5489cb124b0fbf3d7283422c2ca08c4b45fbc95a9aec00d4ea27a0360660ec5de7c79fdf1de3b6d7574cff815e09b4281e274633b9090020861a32ecab1b41c0abd0078fe38fee55d174e037b144e00e982d9f1fb0f800bcc60f6ae5819e6ead3b1d9db2e955358c2ffca22d3258e630b265d15b569300aeaf7f41808135fef95e1b411f1711fdcbed1677f4df51f0880c4a65a02a09001f5030fc806cfc3012cd99ed054276a765ee77f1d9c8a9c39f91938294c80400cc512056e8e00c5dc0dcbf78e1e11c4191b66b8d9bdbd355e3a522de8e0ce100c7939ad2823e37a290bc0a1e95b89372cc5ef1c500ef9ccc56bcb6bd25dd1100de164bf10f8087feccf1fddd33db300587df1c41e48a85dbad6bbc4e44f96c001550ceeab828d7b11a99005b79ffe7a099c223ecf63b4f1e94aa2e10c8feca00a233ceb1f1610cd7af8d5d8273b66437efbdaa576b63fdfd844d7d3750ab8a00dfdc6997827820e17b439ac3fcfffb6ad9ec45d13ace57a05d3418ad7bffe8003eeceb4a538cc7f2afedb2c3ebc48a4d7c6ec9bb2b4cc86802ac9f76d598e000ccbbc94714422d544f1caf162234c296ba00b1957e45d0713000afd013718c00038c51989a3edc99357580c5a218e1c381b04e2b1c3991ecd3764f16da13a200f58d842e261df004532ccc7a01c855cd74d744c0cc27b4b306881e9a9f5be40035efa66c61fd1cb16fce137a7390c100f36170e03866999446ec38817a124e0075eea1cc3bfab56f4b4ed83c739a38442224b55128526f2c1bf55cfa079727002703c0acfe868c4e268395753e8abb69e50014749cf55fba6def1e13497a04009780101980d620979951404796c0527c6b4351e43c7553d519440578fdc67600e2be80f833075eb322111efcdccf089e737526b804960327202b905488558a008b8b9f3ee25369d914f10c55417898982962147ce831b96315cf17ef06ce08003075b1d5e9c01d0af8d9ad8e99df1e657e6306b17d8c6dc9933ee08454b83700c0fa8333a325665954c33047131a78a4743b3936311ba3267c5baa44b8529d002d8aef75af345627649b51a78dc2071bc3a0e786cf9a9c56f21872eefc1d000003223e217b7804f2cb071a25fe04ffd09e05cba0222bf1e0a487539b41c2380028ff964d98914c8c4648aa73fc08f36ae7219e26df81cb02ae0c878e1bc9bf0004000005abe71c01a0f9c5bddeb64123b417ecdf3142dabaf98d2306e73ab000df282c3c87dcb490c474a008aabbff3757f945b0755c18570c67ebb81460e600c52d7c660897c5e904a7fafd51066cb694f61b5dae16948f0f1ed9141634e400647bbaaa4a8165505284fcd743599686e7b5fa6ac10846c8298c75b429af3b0019b02ef101d53d599593cae66e491bf03efc8763fbde79bc4c1824524d89db00636d618fcf096def8ea7651a1bda496e41ab4994c334b98da8fc0ef28568b400557cef1b5d82b2b504d5cd281c812f0ba8e6daf958ec36db494e82709a3aab009fa6981efc4dad4a49274771aab34da661811c4bbbe0de3c99de4f52e6eda3004d29b8a1f3e9dd11a006812c20a8fae821a35e4866aa3b1ed135a40ab60e6600cecda25ba90946c8c633d705972e92ff8064416969ecc9ac9122723ae86176004025572fcd377bf27aab6f2de0694065338e24feb827c2fa6c2da3621f8288005aa0a7023ebeb6a3df7564bb8c9bfbab453a6115577fa9b76c6a41e371305e00fe74c378e95c0ab695e2bb51db4ec4e336be07f982717c8bfd3d761c79969b008027edcd946f1da048b01e6a053a73d9ad9d26fb30da91848e13d02dfec94c00c0b848ca501e540d6bf902ae81bf0aab3794cf27c9bcccea79215cb4c48a2900abb485ca060fe81bfb022fe4b48a609f11db659f72d12f6cbf85de6f4c15c4002716252328044c976e1b497854ec53b8db29442e63d18f06981d5521be031400c4bc7d545054ce5e059b5555582ae4ab86a30c716a16c2969ea6e86b358c0b004d88e85316a246b9e57a25a3481af990d262cad4b3b0c3793c06c0398c8e28005f1cea6e4b21e85514f9dfb0dbf3cb3b863798fc117ac518d3754ec213ecd3008b9e0b2397470d191b84e3a0318a9ecd64ee6e52e8c77a2da15f1351f7abaf00bdb623166ca0c01080deeb884b5330d935c6230d9a57c998c9b4b98fc373ba005a04b64ec00248fd8472d3329f2178ac1d57342ce4d3b1caa989b1427ce71300859d72b58ddc80ac9fa55be3415f9144c87fef05e201450cc15369888e68f200dee182b9fe8d3fe7c001a08fe413b0e784a28608df7ad0e0a5a61988e0208d008f5906ee32965890d10fbbd6a00fb7306f4c712f13f88ced853a43444b334f00fcb2281d1bf67241a35f8f4512e102f899120296af946052c5c075212f013c00856bff015872914ed3492a867723da2e1db1a46a6278423e28e1471c0c43570046079d2de417306fd3a608dac080a0e6664f69e03f0e03bb62c419f1c66e0f00229d7583c10ad143ad6af221bacc3ce3a04a6eb94ff07917d78cf094d5b35e00c96a1ba76951776eef81a0dfcd87e843ceb702f9023a830827503f13b08773004130c28d4800b901c4eb1432f080e36b008be7e0c09dee4d9e3356c57de180006d5101353088972258a501eb370d16abc79e1fd2d2fc14d0d4353b303ceb0000c001a089dd26467c4dd62ea44a592d0f57aab3b34d3e167cc4fa421523e11e007240193da026d900f82eec28e82ed9371e31d4dd72978a5530319c07888a5a00d712158370bf02f90275024dd15980b9020407a05ca403160316e4600166c800e43695380001c001a0ab06988f2170efac4cec079da5034efdd9db5136286f003497f1b71fcfaee89699a02b8ced65f73edb35605749e138786d964e414ad8003edb2fe8cf654f127c078f1e02f902f4a50f43ed94b3faf6db995a063d020c003e4fcfbfdaa3f4e3e54e80b9028468cfe0467035f554e898ed79cb3d09d58e0003d56e5eb7317657fc73142bb369174ae7a9f457091c29c9cd49a013699b22007d9ff96911dcd3c354ce2b6517314e9460bf513f1c13d8ebad77738facc76200312947588582506a13a48681872aa13d40f11fc0ab92b5a579b501a0ddf3ec003b407af443e93feba2cfa4ade7a7bf6ea63f3078353036613133613438363800313837326161313364343066313166633061623932623561353739623520680061732073776170706564206f7665722035303000c001a0cf4b3458d3a54c6e0025935f64532f27a04b4fe4f6953ed916a41e61be00ee4c8aa01b74e9f433a500465bcf60034156718da01ea32825d405b6787cbcfa27e26c12247a8403e55600a2830312211dd12e5c5b05cf0191bd338392a25b25548b4c98b0c7d3d27dca005d5ca743d68b7f1dc3dd88198b391452b3bc70087599b22086009bb6c179b700f47b37f2c60b1335301885ce4e1915d22b7f87bc69574f539c9f13a57244730034059348a3ddf327cbce556e0494b662dc162bbbea724640a048fbd82d9c5b00d57606aa875c49ed4a9a2bea51ff08b86cbe832fe1faf7e7c99802f902dced008307fbb1941502d025bfa624469892289d45c03529972517288778b1e287d500d7f396f639ed6259d7bc56b814474bfc7b083a5bdb19ca1acf4b002710fe7000000000c86a94d74f4376e26aa713ea7868fb91851ce06955b900c080a01bd900aad08b0c3120243f8cd7e5de4f393f266c4b439231bb34f9706ad892f513a0000a9b3b5f046d5a0371e5a958e692c4aad85786fd1180791e79be897048b9ec00bf02f90152830827505707fd7994aaaf3d9cdd3602d117c67d80eec37a160c008d986980b8e47ac09b3c606e13a2ae9fd9f40f8cc7d3b3944c57f3919c7fe3000f4240c001a08b797684a6db0658744e94c1d48ebc1407721e775d8e9dbc5000054d681cd2c821a03b56e838056dbd8934e4c170165c648ed9291e44303bad00d10fa20d8be52295d402f901f78308275018028413c65ab0830514e394b23a00f8707c442f59bdfc368612bd8dbcca8a7a5a8701c6bf52634000b90184473700576e07416c657850726f004fb7cd1cf8cfee6b9440f5ccdd2cb43f73d5aaa30066d8688b00004168bd2b7ff53a236774f31aabbbdffd8582891115200fb27a0080526941ffa3759f349fa03b18b26d6200f5525e34d4aee505aa1ff2e6cf15000e578c73ddefe328b1c001a06a5fd75c18089b5c51e1b0060f92bb284958cf00f7feaf863467786890e30d1909a0556352050e5f80aed7c19d015df9b1816000aea4fea6586467cf68b48939eefaf302f90559830827505803212b04e42a81007b7e434a4c7bb5c9bbb2cf558049caa4e92e7a60ff3468fd6e58206133824700e3a8e478e16587be835183604c4c4dd5595eed7a200e4489280239b9bc0bdc007b0d40a0c008496e6a6563746564644354566b4d697a6e57564559447768310070355279476d394468443670685953665268736a6739505a6245570120423000783765393966623866303065316634653832646636626230663539373164390062616630646164333432643536313132343930353031356462353032363431003264660965766d3a35393134340041c6b1944b4030b6a62d58bc0265093f7d003725abc92c65337c927bfcf3d894849d2e289ed82603c80dc61d5bdea31e370087eeb7f50153e35bbd85d4737c1efa4d51c001a041245793cdc7db4975c2ce007399179e0fa9a27bb05ce17952c327d7ee96de530da03324a754b8b361be79008a1a3086b1f10810ff8d14d73eac2790d4292e4de3071902f8b3015a82c1dd0015d5ff975c1181faf938cd33bd0633435bdfa18dffffffffc080a002990e7700cb7e786807e1d965a4109d54e48858acd966b07eb2c2c52350376108a05d5300faf0d84e3d39191dad6f69dca2ae8f8e425f1b81c867766ab6c10fd00b2bf8006f829f7f840fce95c082f61894f3eab2365c8689d7d429e9cf03c78b29f0790007b1870359a74c05f004ffe55ddbe3b45dc446a9e6b1c8bf783ba1cc36c726004c7dcbbf2bb541f2ae8aa003de217a2fee05519b3ca0a7d48ddb8f8e6309320002472370b97030b1737474cc02f90164d2831159c18404cc67838306b0b3940080b8f500010401312d00090749181406d82e4000051eb86ccbe0cea9d57d76001fe95295df9d91247a1319a7b35b6af10401020500060102020300020300010000010401faff8ae1c699c9c62fac468a1e253e15b571b69a7ffec080a0c7cd00d6037aeecf1c38ea48b55107e8805231a71093a8c4f27978a0cc517f0ebba00037d84bd8cde8dd0e22ef53956916fe279c29a05f8d0bbb667da0040a9b354e00e118830304d70000001edde5d3000066d8894f1f82faa606f95ed3eebef09b002b46aece71f600dda4781c3001a02db48f51f3282167e14ca7d3d80235311b00d483216fc086aaf4f38aa872476cfaa0547d718bb831dbd1ba0730d6d9f09e00d8548d5fcf94758ec71822699f70fcb5b5f902ae81f8104596f437d0390c8900058120868d435f91e739e7da2ca21254d06536b88ec2b56f6a624875658b2300e7e5254c2e8bf61854b4064b10e7f86f2724571732591660ddca88e83db0520033da06e7a6b1524277b7e06516be728ec4a0a589299475807d95189e5e1f9500acae4399f82806c6a46e347123d4c379b25393a038782c2a8309214407855c00ab3aa2d11e525731825afbb084e33b9a3a59de47d702f90db4830827505d84000e5eb6af8308660b9422bf2a9fcaab9dc96526097318f459ef7427704280b9000d44e020dc5d0c1227d380995d77ee73135fd2a8eaaca8e84be45389c2f51e0001193c3b7ab71d350000ba7e2a4501db30a9edaa6f2aec5d5caff1ecc2635200a56caadc4f1e25cd6c75970fa768a3304e640ba490411a32170100a288dc3d007e83fea20441f98166b15b6d012b2fbc8d71194629d116ee666b2e654717b5002419006ab0f5529da006400760010457618896cfa2a369ec67a93c324a35e60093fbeea11c0594010a23bb0d003f00e5b07cdb01ee6cc62e0bb811649f86540022010453040080242e1a7d4d010000648a6a1e85353c1f0bc78fbbc245b3c9003ef77b1dcc5b77d2a001a44464d1660f99c080a04b1bb4152b0963790bc3c1000736cfe09c52a54c0439fbaa81dfa03f0564f61c85a07d4b1a0288b79fa17000fc32dc9fb4a85155240fc91fdc5853bc9b07fdbb9fe3ec02f909bd02008403003af2738313ed1d19def21f40fbd7b9094404e006e0a942b45becf6bd7d08b100566e677b7f623f430e252c03c00240401b96cfd402012897f44551031fb54e00cc11010c7304f19ab6021e372e3532383632333234353639313739372e36320037353434383237363936323035373539333039323732443645444f5557772b00586258726378432f2b5a32636c52534c6f7a6b33736f43504f336b594b5573004a55395a51343175584d52664a4377615755367267736d6558475330534336005359566d7459335654597047475255387062494c2b4769616e52723437342f006c4c57634a646c597554424c397a50694e39425561714d7667383070335a34005a616c49637974642f6d35386335534d4c797253702f2b704b6a525248636c0070424571524b66696d6f4a51644478303947636e554f314842534a2f673447006a486f69374c6e786e43733444754d4c7464437155794e71446c50546e6b46007055586c752b4f303458697a7a7a586f4645594c70706c565a6e794f634e59004254645a585a4f7541556679396e6f7046315a517832363267664c55546d6800412f50345475646d71503269396c3762695a4f7635752b713554476759524500454d556e772b6465324f6542527a694564354a4a726e513d7a65a76eca02430008e282426a65117ec26572ba97eedea691a9c87799bf5194d1a01b6e0d678600a279d8d704a9c2c9d54369b033996c0c351f56b21232fc6ec01b05f9026d5d000552fc1594c61dd8a6804da9ab58ed2483ce80b90204602ad3a6b119159602000aa427b03ca8a33a0ab3ea86503d4f9bae3bc9aab0a016270164c0015af310007a400024a8d5497fde5411100e717324581cf0191fba5420590a1c8a17e544001485cf1d000402ee0000000a0b536b7269706f746e79746503534b528b064c00575029af634267dd0cfbc3696fb5003f3972f4fe3f64dab81584463062a07d0047a9fe0fbc66ef5618d428e8a4894505fcee7f5f131fb9d52d0718ff31c10100f8b5821b6d84030487a5830dbba09402ad380d580c991495d55ed5be2b216b00a4eb2914831e0315b8482800025ff08d16013af6e93ab55a78a5ed01db6c3b00e3af332b5abd3f160383ffefbca071347df469c4e64820c95b01b957be160200b39880c7a0b752179d6d7d9ae594ab4c02d6e5b8c7cc42822ee3040cd5b39b0079e1d510f756616d29b28c64013b2456036181df8da04462cd43d163483c3b00f2e376172768574b11285ade22d4ac2965ec68b2bb00f83b40cf29bdf4f48900c45b0bb63c30e4140d36b6daf4c080a085363c95e50ad955d4ffa3f24216b4008295bda9c0117b9eae1c12a561ec58308da0335d24ed13ace3a802c18f4702000b73f5ebaebfcc962b05e0cb01b8b90f1ce27c8d0865a094d6a2bd1580b49a0089d30caf71fcbb077f39732f021c1dc91d22d3e485fca8b4bf04a2b633164e00c48a6e24c4809093865dbb2a319d9129a0d22e59e2828935a4c2c1a134b87600449ef8423d59faea962bb90c3a77a31187ba9437df8edb935d7d254a9d580b004d4043d44b694b0c949a53c33a5e6ee56df6a95065f207bc1f65c4a084f94900962245e7ee20894390ab2aadafc08ee490bb627be06e57fb949243e64aa037005da0eb041b7da7ac3f3922feac62535dbe1f42aa3aa175d5d741e619d1ffb70002f871dd82a01994b8af4fa4feabaa02a09d146e4f871ea4a0a41c048084a6006f42c0c001a0618d2a8dfc6fbbbf1a7975045c68f8501c8dcdf93dc7b56c1a0069b1b4a6ba846ba073abb06aeaa8512997544903e6eb16f864b9d3ec8e647900c2ef5e4d7dd735844df90113819782fa7194e0b5d1a12530fe51139da848a600c909f29535255587013e52b9abe000b8a44ffced5460107f8414a263a8824a00de4650995d51d34f213daa7921c7cb9fe16956e360154563a04db7bdf86ce30062e2f75414dd4f821952c8f52ad33d8562cb9e3871ed2cc4707a1e8306fe0800949c8a1c5b993baf52e9dd920181767b67bbd4d3a6f89a2f3a3b251925c56300572dd38bdc455968f5070b5c868739439e339729024073c4ec72898cb2ebc8003b1affc2aa01487d8b0a8bf123c2f265f9be68380e2cc6eac33109da74dabf0070b0372641318b55e44b752f7adb2fd9b88ceb2b775c2141b6411f081743e30097b00126b97c832c04c06cad34dce23c701bedc3555a5cc080a0b78f2d5235005619b42eda26134c2ec8be11af06b0fb6522dabe69bd89623620c2a0094c8200dec97b437a7759ca1b1a835d5dce01435b8348ebedee972adc20579b4c02f900029b83082750388402f5144a0652a9942db0afd0045f3518c77ec6591a542e00326befd3d787706854ab18074ab90224a02475ceafe6a0861c8b83fbcd27df006b2a6f52d5c5facca5b5c0f90481cff266d85cd62b53040001f40000c080a00063abaaed09e045a7bb1009983b2693efb1d898e281b1fb2a81eb24b4921248001ca0106bcae95d8f7432b346b5f2cbe77f991e59f2b303fe96d5f031a45b4e009bd548f9043481f604802097bfc9fe98e9c13e491dd14cfa892e092c4737f300b79ac71fd734acba93cfbce0ea8d02cab8104d38277dc723842d8cb24f4ae7009d57774141745a576e327a37705650366a67586b44794275724e554c756b69007544596a68524a64624a444b61511153e2a24e612c3dff8908a0b9f84d2dcc006bc88aa9f5ce66da40c05546f1903013f03b3a3d9d792cdb805588e3ba217f00685e36bfd51b5af713c396c83bdd75b01b5ffa11d0251f6a8f2343c219b8330056a6fc09d6a57f724614b5803a136ea02889a03619d1a65822d71064db4f5100d5efc94a1345051a14f6df6bcc56a4e85f997318f86e8241a1840372e42a820052080810f836e538d953a2026c444195f68d2d8f40f1e6e423841f7965ad2a003e9402a04565aac76fcc79506ab9ffc23d4646995c2b47a554df72bbfcc88b00281e89c094f901b92f01f65b94b4a8d45647445ea9fc3e105809614239068300dbc28711c37937e08000b90149e0db3fcf3bad7ad0728f9917d1bf08af578200dcbd516cdd96822618e3e97d366fa6a60b78c9bb81cf26ce1ec80076adf1d7007634f23666d859f301201dc0dec3a0cf722b774f5d8e1bae8847daceb0dbd000c6522dd86540cf27784f7db283051794a01f4fd14895218836a7b723a9736000ae99374616bcd0065d6f62b7805f522c843842840436a06a8302383594d60e001818bbbbafb455715230d5570e26ca25f555c001a0442933e1773d8bf3b58c00699fa666cdf1f3362c6ef1015c4bfaaeba63f4dc4d66a05c30f7459ef29af5001189369c0ecb6e6a290ea8dccab03d4fe3aeebe7bf1aa6d7f902ad3e840beb00c200830d0709e872a647d00dab2c971c49a7b3b84d6c168430c2f2fcedd3330059178e9733a2973d41d2a096937dc39d702b7e72c6da8f6fc941432c00e81a0063adea28d43e1d11692f662dc370a82ba389a752f4c910dea7b683c1a9444500be64c03154052bd661fd1b0d01fc625df06e9987f38eb9fb31d8a53c40eb0f000aac90eaa1cc1cc6695efd6f21cff25eb669e5a07aa79391cba1361b62b3a4001cfbea2367ef97c6b5e79f711ff162975a31d7d1d27ec8adb85de7aca28cb700db9df85a53ed38d1b0ad0f80a062f2786458f1dc769996d102f2b89cd51b240070a99d48132695c38de73ddc90f9a04577950615c762acfca9ee5d4bd91d710098daa384caa41aadf8375940ff2bb16502f90254830827505a090fc7e4d15f00fa69062bd8473f1eb227413c59f9b5c58ca2a02dbce60ebeaafb77e547230800f432f78ac3ae07d974670a3998d9d6622e32d0847ff5977c37e0ec910488d800c001a0b59eccb27f63dc64c7c0b204a8ebb98b7b7712f8d14c166a9b4bfbc700c66b1c1aa049a61208f87683c345c7715d3ed6fe52325d75d84967e8af065e009679cbf7c2a913f38de18df619e44d7c994c21972ff3a13e453bab268b7a580047a05003906469bec83e90dd13f058c57d440543ce86b5da5cf04b4d73728b0022c57680f34a4c435bfe5588f87db70579f6fbbf245a30a39add11382e80a0006e7eddafb1ad7df20b27e485fd7b965e36dc63bd60bae730a44dd8050180360083a07e7ca0b747ef119457ed3dd3bfa833d32d93fff3e24c20e7bf9852d19f007712bef8cc0284039caec083047b5f9480b86469328d0cf55205075811f03600a2e1ea561d9b05b5e7e557500dfb3a9ae9416345bae3a41ecfec939f2ef830002dc3465e9b76c3289842b9daa07fd1784adc08fc8cef2160c2aabf47b750190083bb43832843f765c3fa9b19be1f68831240958403c5857482fc7501a07dfa0046c3090273ca808cca96afadda7c54642572d51a18d6e9e0bf6b95d6db55a0004020ab7e816b3ac85bcbfa1bd9a3dc3988109d97835dbd9ddc26c63f2a6fb500c8f87282026782da0094ed2cc316e81d574330e60ae9593a8dd34b9a4c4186001b48eb57e00084c002c4d60c0eddccddcb3b404c14128b333172d04c6442cf00a53571e857bd4bef95209e90a045522fee11cac664f76452cb11a17a925a1200eb0a0466496350cc5545648893b12d071fff306d04582fa23b7f3a2b33b0480035572746b3b1bbeeaf0ae2dbcd3f5b4b6c5f84130ba7aa23b2f8e45bcc3ea900e3a2f70d85c23cf66747d91afbe0d633fe70ce5ebca3ce1d3fc9b326c9831a00d1c8d998049f57178d01a0e4334df406e3d26155b746613afea5257b9e762a004dcd525feb81a63d4abd3d7ba02eb7bbb5ef0a6a9fefd7394ab6ddb83a3df8009bc85ba3e9a1371a396c8d9d79be02f90159040870b0944c340a9f4f757eb9002252e73007229743dd55912487075cf08e65ae11b8e4414a8809154da7d4cc00a9e9230068eb8743356611631cadca01e13380963c039406f8b10d3a069132008b4d2ae90fa432300000066761643535c080a0d985b681f84f226c5421e9c500da05f47ce3e2ce4cb154fde1be15a662dccbc9aaa00333e77c03c7a1c75673002d2a7a4228eea5b949b1e59656b291fcdecd10561e94f902ad760d4a96943200c2d3211a674126efb382c08149006f58cf52fb1be91e4df1187403bd2dd26b00cb3ced25ac73ce7918cd5f3638e7ba94d1c592d92c699ff85b0fa4b7cdb5b200e00651498d0c1fbe926bd4359fb110e70e392640f19e8bbed193252bfb64b800d04e599ca78ceac2f726a1ce52bb483718ae10d3e8e5af366fd800d9389b4800220f80c9feb0e9523f365f8f5a1d0da183fe16a4968172c8c0bb67aa549305002cd8a00aeefa214d80dad884f53ca9b40b8768f837564bd71835c831824828002ec2debb2a066c6f1c469ca45cf2eaf2ada576313c25eda24619f7e924829f0074c901f903c32be5d8b015f7c6860946b7390cd33d06f22957f6afd07e331f00877d9c2052fc32c36f2c0a8a8afd08d5e4aa0c6358c87d81189d9caa143a7d00acc001a08271fe5e7b3f60b3e17eadab39846fc36eae897a3d0408793d2eaf00adc531b388a037d75347be18b50d46ad0df2663066576f79ada58895346b86001e7ed5141cd01df902ef8201098304d17e9480b90284c04488d527dcc022c500169542e9b122a8164f6d95a166d85c2b27105304e1a1d5c32888c5b140917b00296e82cf3a448f3765cc97cef1312a7e2a543c4ede8dd19671558e7cf0d2af007d576490b5b0735324a079c468e907667a21f5aa20747933070e112b36219d00919a7762d343a9c128dd8bb508d962946c72fc3be251a32f021d2f2ab40cf30006dcd862511cc50a9cede8be3b67a8fcd1c241aeb1ae9d6700fdc829cbecb600412317e1df783e7d81045e4c1c0e567db56ffc29c46c29c191facd9188e467001c80762f55ed72d54611e017367c675618bfaf24963cdea0e70fc0896f68f200dd4a5bf9086cbc1620a6652f766d969d08c1eaf618ee877df14ae2c65d09ea0041a52ecee506bac001a014ede95f1c806cceb2f89141116f64ee9b2fcff7610032bb65262f97c78bb806b9a0559f38f034f2be7a55ad3d97eec348e421973900c0a05c332287887033547a02eff871830cda06840316fe2b827b0c94573a3b00718328bff25fd7f5cb1cc5964dfb746cf188067f5cdf349d30c3a00f17867700ea4eeca72e89f3693edda1e0962bfdc3d36e3477c90b28a7a7819987a01f8700cc346db329509a8a1c07905eb010a512f7ecc7097909f875bc3ea99e6c6b0200f903f581d8069d0680b903048060a415feae01ccb5a54c7840016611c72e0d003abbef66bc84a0e4eb3cc001a0df4cb9048251e47205fb7f715d77c5ecbc0300f4f34d58ca413acaaa234abd2915a00d010e1cb859a0c5fa68ad13cee766b4003db48a23f69d82271d70fff7fce5075ff8ac3e01615b46d1402f05521332730022290e8cdba9236e5b16fff0b606a04aed024afbafdf9c63ebf1c6a060c12f00226cb6623f6bba3a331eb67ad8496f20f8a66f8216a0e7dcce5e318e23f86c0082021782f02643438ccc0ce64cf78679b30ec7031a59babe7fbd04e15891fa0015a4dffe184765a064ce71abe06fdbb06fe076a480956008fa7deba3ca47c600e84a6fbebdba9116edf88b028302014e54999e16dc71d348709147acde22c80048430c87f6a822ee7dd2e6eaad384d42f7a049e62fe056693467094d73af7900c0bd06c031bc16d6d2b5a3e56460ffb2005299f9025544fc8802869809251f000000b901e4cdc65927439612c6432d0fa2970777917348d432ed753202867e0034c123779064018b1751a6f4ec773faf8e1a24ed0c3b271e538c999594242200d20fc849cd6fba1897857253ae9417aa260316f559ebcfa038cc9ca07020b800af35ea05a2c347c83e977b0b7703b30adcb03f5827af2b701263e252e3f90300308302784a840feff1788308345c945523985926aa12ba58dc5ad00ddca9960078d7227e80b902c484d61c97605aa5f7f84ed0e5db0a4a85c3947ea16b5335002fd401a4c23a4c881977e328583ae36ee6e61c374b448c29520103955b64170046da78ebbe037ad7d9cd060f763237aa053695bc0c573d06afd436ebf8b3ba00006d89d7adb1bd25ee459411dae57a861d00c9f3d012b38780ac593482f60200bc372d957f15530442cd64f48496dddfeff8f3704df9175dbe20d32524447600476901ab5ffccac89f0000415ec87657a7228f6e97dcc333bfea227581deb9008ab7db97b4816142e653098b803049311ed5bd54129fb6a5b9c8be579a524f0001eb453016ea7046b847852f87231b0066c58d5bbbe42e9e2c73a5531ed91a001a85098ccd60ad12b73b8e0459b3b602e2a05080302463b29cb07e27e29e0900db285502912b90343bd7bfb66931210bbbf52002f83984030487a4830486d60087ec149c02d03160bccb99d823f768110290d220c0e4c082502351efc080a0002fb81d174560f7f0f701bf89a09bd8d048449df2a0c32224a4816e12d6cf76006ca06b2ea485158a432642c5530c91459ef0c144011a4595b824407ececcbd009f54f302f9025613c28405bf7c468301d8a19480b901e42e3781151ff7a8a400a0869d80ab5c7d33baed62ffb7007042065304052435be4fea0d830523f5b50027dd6d592044aec080a097d30f328832bc174eec9ba5c6acdc440324e894d000950173417cd022fd7d6ef4a01c6d6a350f69f6b57f9111505ef14b895d2f2200a66b3d597b8318abbdb5b8a8af02f902d60114843b9aca00844138f53483030016049480b902642cc4081e6003d0bc550066d884b00001200060000000000300d3021720806024a064d909ee9abece07d58d417bd616dc8a0a2702ce1bdbaa00c41150584ce57ac660d47bab3fc48d12acd62d726fc417fe46502da0665c960053365ea4c7018382d1e4631a34107bb043d0e5062869d404ec2bcad6b444840002b7dbdd840413c9ccc080a0a19d8763830ad3cec090e4106697e9f06a4781006df7f23fea059a5d56e15256a9a04cf2d2be3779d1edf20ba82d2b3c57cccd00689d035a8f6cec7c10747c8f2b2995f88d820146c3a0515b6d477954cf49cd000d2d75b0f1dafeac6caccce052120c7ef97c1783da12c2a05bb0e9494b9afe0008e1bd8d1e70856e9ddf40975f5ff6f568549ea9cd9bb2d7cbf8ac74014558009401f0a31698c4d065659b9bdc21b3610292a1c5060de0b6b3a764c4a02d850064c41e481e03fc708858180d1fa01c12a49ce7f9eb4e01851d14d042f3eaa000697ec995f8d9eb246b331b53b1fd7d92473353d5d6c46158102cc9131eba760005f905533704c0e9e0fca787797501f1bddcb5169b7f1e73a2377b9c29cedc004e72d34e9addf02d2c86b2f0dad270e0b07566e8df85e6b74ad23f25e40c5200616262792057616c6c6574704b75716d4e374c557657386a31766e3574755100735657426541736f5674636866665731515953594e6f41366566666536623900623434373433643065633437616430376232663763373235333561343964360031356637326235383962663663336231383239336230363552ec464c76f6d90054b8b3eec9d7104ae5ade7a67370a5ac6bc544b672665854ec42fcd2e01aac00ba6510acada24417ea9f0e09a9f92d37acb78f39034d5c9425d0bce9cb01270094d36623c24b28d28464bf091893a451a1306fa0ca49800e3823aba043fe65004371e04f143781c5883c79009a9f2296601e0aee648b67f644bb37caef02f90001db018a19119011594b746124f03deff4240315bbd70308b8cc85bddb16e2008e5c1b8405d10cb8bec657f0858d2488792491faf39d809a6ca76ecfa4934000ccd53dca79104add8d790705d3b853bc6d64cd5da7772c996a1599eb85f7ec00ba55f998d88bed0558f2ca31e1b5b2573cc3dcf1f051d3cefc838d99a07d1c005a10d20612f3d69e2c9a8020dcf49223e45db93292b85d3b9d8cfbc304cff9000128faf08083053300be00031e7fd40702f1e87befa5d97e13b0998968e6be00e60eff25f37ef294d01bc647000000012001010200000201a4ac900e4a294d00aef51dc11046698cc04fb1337dfcaf951585a41f89ab7bc0977fa05152cfdb00a5f92999bcd85eba843e88e6e7bc492c92da4f919dccd888ed9a7d633b072a003c1b053f090d539a2b4ee43c96609f0ef53698ba926d7f29741c7d686c6149008b69e533507d52d3a255a09a21d26d888d13cd492646d89d065f6a0a3b33b6006dffca338e9765b7b7926cb27b84f5f48ea0758fa99da3c7d680a0bb268a780073eb878ca28f90dcf138f16ac49fafcfec0dfbf22dec056ff9e8e3aba07c8d0069e0f423c082f0dd92b3b4d87f99363747bf94a74a0f0a264e9881b5490a0200f90119830827507984047ccdf6840e24c24c02c001a0e260918b5d30460eb0004508586bf2c0eb524edfd1f0a8e57ee15b4718269e1628a04361e15c95dbe400d69b224dee2c50d6e664e11c6951aba4692f9493e6ae845d1f02f9020a82d70098941ba5b6bb675afe1d522639ab99457b4d3811eece80b901e46a761200090001385a04c97ea8140713bbd82113e104c3a45661134f9764807941bad370be0033e833fe6a17d04d81fc9c079f4d5f14cddffd73a9e162cfafbe32f317b65100c3dc0c20daa6c90e55f19cf0135f623706e81fd2479fdf6d0667b34645c00100a0539f97f9ae61bbd2e28d0c065d0d06b0d8a9514b68641de06890503aaf8800630ca00f7c0a6b14cf3fe7772f1e51ab6f7392011b60a528fe802cac0888890063afd6adf9055582015404b209b65ef69766c5c5aaec3f91f840e3c9d8835d002e98b6823b770e96912751b60f4e5544ea05bc1446de2126f1621b97ef9d05007965666a424a577643567a584d4e415378757455356462397544717255393400757a376b47706d4e646a64755432663731633537666463373535643230643600326331316366373233663164333535353831653838373064616436336530380033633834656239363666366534363065fdf4ae587eca98b74ed65e3be675ac00cc2b6418646139d00974ba56583f0ba55d30ab17903fa7af2e4678154190e500c6e38a419456d241547a077b065d314f449ca105e1aea8dca600d512b1a28b00dce0cb77762a5a0f265f1fe3f6fabd821831dca00f486b0053b46aeb659d570049062d376441ac8a2bdee5aebb646518883f420ad102f903f43305dee4c8a20003b930b265355b14c0502d91c44d647e7b6c2bee74bce80722364ad8d01a7f0024bfc04c59b43bbd23f610a9dfb7c89644979b4a0f27063e9e7d7cda32c00100a0d0219e703cfbd6e1f0983503943746b8dd03e654fe01976b2702a1fcb18b002e1da0412a374a05027656b45110ba81a3997a8443cc7776c975b61495d0700078b899eff902ad730b6ba6943d52d95d58fcb53814ea37d580601d2af2b4cc00981bc1e2c324bf32de0247c07976c322130836189831a695c9af191edbde230055ffcd35940927b52dac718cb50deeaf46820ae0c13eef28a9b3c4ebf7a8b100c356b007381c031baa5995d0cc52386508050ac9477808158d78ff2438de8400a7aca1aef65b458af254b59a9cbe97e02bc54a98f48b7858357030dab2f22f00701c3bae8d97ff6706994d9f8c68f19c6df6e115382677f65c74c4fbd216f900b06a30f7a02de0006bf88444130e3603ae68d19ea197e9f0085c0429fe27cc0019c46230fcc4c301a020691f51b9eccc90ad254e5b1aa75fea62ce1b8a9c79004ca9d8c649aeaa1b4166a047e0d494c0304a6c9c4054510ae6d105f31719e100f333dde9f7553c95291dd14ff88d820166c4a0c4cfc49ab54d1e73b04ae58900875ade81125902fe858dfe342a8c54e217cf095ba042777cd2d31bec4700bd00962b77636944d3633574b36abdaa6d44bf438e4829cbf902352c0636dc94c200b638cb5042c1b3c5d5c969361fb5056984058388056acf023ccd2148b901c400c7c7f5b3187d40d8d148bc27bc41cda0862e5879274226ea017071324e000000759e056ab684fbf40563c786e118e0313fdcfb71af7a125b8163cf1cce9257005d3ab53b05f23051c86717a7f6ac6959a06ee1c4e772260703563993eaa87b00e0a7ccd46ed5c48623272089f93dee672043118403eeb7da83032ba354772f0029c251e40191bd33bd99545176ac35e9e8e8f3aacbedcdf7ec8a78be7e803200b90f6669775701a0c9ba126b14ecbdf0eaa8abca18102738b9975e397aa17000b93f086db5332da135a01fbb8915007cde6a39ee541dfa25b94131e81069bd0006979b685e513d72f6b82ef902ae81ea09af681bdf5f03029a74cf0504967a002c5996c02e98b8b3c2ae1f93445a1da0535d3884e7280fd17ab9233825369b00e63db9c650962e9717cc0ad218db11ec070961a3a23690c950139dfc6df9fd0010797b7b0cebc3a2d60ef17884a96ef67928fd001e8cdecd5a8e540b10ff7200c6d696d46b063ed02a1dad12dea00d47ca639ac99acf0e456f0ed95472858f00629616883f9204ae6af0fbc734399802f87602358252089434723b92ae970800ba33843120a86035d049da7dfa8805f7aab8c56b986c80c080a06e3388097b0060518a90cad7fe27f8f6f9cfdfd52efdf07b0409a30bdb85f708a3a016c3f2000b695b2cc9109ea15fdcc09d3cf3a42afa64cda080c025db27301f168c02f8009201cf830fac7f8403da700f82ab1ac001a025c579f9608e180e735751c76e00a7381c0385525166f01e16c76f0231a300823ea054afdae6730e18c68f7894005f28398cd870631e12dcd191cb410ad9f50952077802f9029c8308275008070044c288011a99acf16a7cc0bd79e9ae5cdc8cfaed05bec4712fd8e2c9c98776000b1afff401a01980272c2bda53ae7eb9235abfd13a238576b2d65a57e2e97b008011d0bb23b092a00d416b04bda0381aea6734b7a3c90e4ae49a5d93e4ba1f003106ac11771ae43c07030e80a020819bc19f4bc7d399fa95ac8dc377172f65006e50b90cdb1d6143c6b340c8280ba03c4be671e52068ddc4e51214ab0da38a00b97e0488c4861d5aab3e4bdb252e5b51f88c81ad5793be9053d549647527c500a39aa560c66eefa09b620e556962cb1b4732ecdab1a0203bf25e67a30d53ad00b84b60852fda5e3ed9920889ae0719843c0723cf168dbf02f8240284059e2b00368301a43794b94e27596b3b89e165101fdf6ee409cbc64b2810c001a044220068ee9f94ddf179738af2120ec4320c0682515f717879ca7ccd51134a5af5a00027ac71a849cfbe396d13f389c6e24c925ad075ca15bcbf638c758fa8f531050051bf830300886271a498c948dbb5fb3b589f806723bab4c2cbe7a284fffe3800dfb7c1e385894cdff6d724bd00d00a96380ceb4e6b75fcfa70bf5d9e7a34b200d30a5ede269dbd2e15b96c626a43706f55384d39764841723271446b5938340058576e4e57684d475468374c43695a41684a55776a67e7dfa476392374dc0c002659478f432e4053ebd19c0475b998fdfdb263b06135d9710c34b923c1307a00eb2f03f49717eb892b2f23753bb1a1ddbab9fb44c54b5f591b56498de34a1900717d5ba3472a8ea2d542c8261b80116465069d9deca0a48fa859a00dad9f7c001edbe87669eb6eb5bc3b6c2c600dcb0cac5309837c953a4bfe1e4297518403004e1aa882a906c080a01e4a7262aa8200ff7bcb2c90e3d51febcb98e3aea03b009aae641493fc9209e310a00a6d465f70079e0a790f904bcebd933cbd63f84b00bbf4b319b203727d7337263a02f9021a83072f3a94b00910bac7da44c0d44000798809dbf8d51fdbb63587037d1eee107049b901a43a99d4eb600196e15cfc0070537fcae48a0a64fcfc670c3c880d0120087177657274793601c001a0721600dafb859cb888b5a6048df7455480a6b6626c1de07c61e1227fcd14bd1d7aa000306df6aae1065c7fac4144eb6142f6b68d8205cd729fcf085168fedc90d680002702f893dc88844c8f2b895792532aae2a0f877208248f358580a40713e24c004373f4f29dd75b4a4d9930380e3f3384df2d42dea3249384d25dda15be6e8f00e5618ea021a13c0fe3e5308392ae28ee20b539acc21e513bd57ccc6e2226eb002c077a8097294fbabdc001a0344c2ef9fa23bee611ac3dc2b14505e70ee2b400cead6c3d9454f607adbbb5d005a06fb6b6265db98d297791ed3297b7a51c55003107f1eedcd17f122d126d4f055ce21ceb9220ead412c001a0182cb394cb89004ee0f7a9d1aca666abf6bd64f5fde2f0c42a5d1ba52dc446c5a7a078e0f50b00a7a9a70f51def71ead3cd67410a253d62aa3e360632811253cc483e002f904003948ef348ad6c85a96776f0ed73e7c637f59f6b346e4587d68ddac7b3bb2e600ba54b11e524f663f827a4d94dcac7bf348d17c7def0f5152424656437263340069666562515871447141797a6a59504b756635374d42587858756338695552006e6d6d4ec03287b0d836b33e825f1d34356ce0fc3c262f9f8e211da98d363400bdbd1f5b8e0c7b8a1dafde9bd51e1e9158f5be181f9b158225e96e1478b4790056c591b19555188fad00d70563cc8a8d185c4c3eae1424797fa75bb152128100f495c6a7fcdb5ea005df03f3dcbf48c505dcca7e33616a6c3596612a9d73cc00a63333709c1290ce5782b4cc04004103c0c763c000c001a06e30ba3c81c2fc00394411674307c2c7a9e587b8fda55aeb986358b978f51735b9a05e1f43056d00fd470a94ef9c669f9246ffcf762ea6759a0433f9d347d03a4144b381e9018000a06be1d1b874d048fcdd5c216dd96a712acec1c9bcba3f2beb9b8945ad893300ffc6a01b0f27b20cd7dc9401e5e3633c543933fa41665e0bbc577586631ede006a335d1df9012c4584051d34408306ddd0946b2c0c7be2048daa9b5527982c0029f48062b34d5880b8c49871ef0196b501d13cee2cccfb2f6f87c5803b6d0300406905c59be1a7ea32d1f257e302401ec9a1401c52a542bf766a0d081e81aa00141f25fb97606c34c087c6c0b6a5d7f1582835b3da45a07295ac0733ebceb200494a14a24cc8184f1cb1b52e7052e04e7a1bfc084ef08357f8ab2d8402eb7d00a982c6fd943c1bca5a656e69edcd0d4e36bebb3fcdaca60cf1734583f62bb600ace3c9ba9bd5a53143ca2ce8c55acda75d1e4f7521ff128bb5216a8b6efd8c008cbc41a754bcc5f0b9b9198121c201a01ada818500afbc68d67fb404a791d1000dcb7c8882f6c3aefcdcea8e4dc492be4a02f90a53064cb09480b90a04597300bd03684ebe54341279206d86fa0d454c9b69bfadfb80125410da7614e42a6300e066d85f33090000088480c00000000365b0d002ff790584b2e0f51e841e6100acc580a8337cce66f217701071a68a503caa8bf139b1841e00023068697070006f2d7377617035372e323036363132303832343133393735372e3035313339003036363137383835383233373031313531393839393139303737395a4c3755004f506664687a77513673563658693970644c2f38366e51504144597833427400737777474d386e7970487570726d346f453742466634353576736a41576746006e7973684f4d7a436b7562587346557a724948474d4b4f766c5770745a767400667a4c38712b76593846375873486c4e416d41575834654533583573666844006534306169584e6e7832494d3246706641786c664e7338484772456e4e4f6f003175736f57537a4f4b693474656e696f68516a69524364374255635a55686b002f53736b677a586d4e316f33714445415a47634f5133616b6f6b534f353661003959596446757a77394444627a3148783837477176737653386b4d73665572006d6d72726744424a72457674374f664d495858763845747069654776524c3300722f36684f3579535232776658723838575543725233796e486356336869440036434e482f6f6d38666745585a4c65674b36692b70683365695633773dc00100a01ab021c3477c6cec902357627f48c22a068fb6d8e1677a335676cdc9a7060032f2a0415a30ee6638f31012e343f098071456f94c7aafa9fbe3ecd5796cdc00459095a6f86e8241a25647b8995bd323f2e83bdc275ea1c4e1a636c5b69c54007d8ec52cfaa8459a118fa06d94d0c623dd74204bb4d2d531a8598b014c79d00041fb15aeaae30311c0876863f8cc3b071e46e1932726c270f4e7f74a1df5af009fa88b549d1d48c35f568e702195966bb6867556e1d6d00690d2919762e6a9005f98cbbc68932328a02f6ee1151cd621b6c254719487c98faca5b6ec130f5d003ea1cf50cd561d0c49c3f90250830195f05523d3c98809dddb82c686e152f500c58b1b0fb59e80b901e441fcb640dc927bd56cf9dfc2e3779c7e3d6d28da1c002199698ac72304898ac71f4fdf483d3766d88be8da0213b907a974a29c835e00d9b8ee9d20dcf9e9d2aa28d275ec4011b4ea1850eaada01cc79e5a626ec2d0005df0b8f42e9df0344ea3d3b7dd82ec533af84308f58e4df0011401a072dad80035760ebabae5a5f854bdc691ed28e6c7d7c6cf6f4faf673917bfbd7b22a07a0026048f05348d262e9f154ba6dea5fb769fdc968e11aa8765f3e5f9c7825278004cb4a0568bf68ad3cefea6a065d892d141fc06ef3734cd6567307369bf6611006bd7ba2bf37711917b963a245906ad290ad79bc27b6956746672724b71435700534745427870794853554c4467426b364a63636545455447374537756e6a620059353931414288ba99dbaf272340761da80248ff64f52e622ad3635fe5b82d0095f565f8641f173ae68df1f373fdc43607cbf255af41cfa934c5860597b642009da0e354bec001a0f065fc062d1a03e228b0e1f7c4abb045e723185af940f90039d7c75486e806d925a0152dfaa674a88253de766fa9e89fed00b1f9e7712a001f87a99e669875c8789f635004052b6d99bbde996784e10467f6ed77268ea400d7cb896731f741cda5607ff6cdb7c808f79dcadc50e2db34c6bd3e5370a7ab002f54e2d215d841310d1f9d8a5e5872f41baeeacbc6e586e9d59f911b473c30005b5c4736ff77b642a075fda5bffc34a86c5ca04112af91ab7241ba2db014d300d2761c6920084704e6781411943c22d53a6eab7802f909357d0761af08c4cd006bd513af364607013813e21cf692b63d9e790578c6ecb770ce5009ed766d560040a5607370c003088001012003000360020066eacf2a000041ebb58ee0b26c004d2e5eb70bdb2bd16051f9175df4db2c9b47dd9a036ddb7e7df0764728dd4800e60dc80c6f7cb271b5e0b22c6f388dd9d93e515b93e26a6998cd6e1bc001a0003ff4c9687354847b68ccea3bae4574c7f870ca8873107ad13cedbfeb2666dd0069a023658be8235f9b83546c74268f26d375cccb3026387edbba1363062edb0049dc37539c4d6f785d5209b2f511e51b279d35f79d3d22ab92a3c001a0e9ce00822af9e03f2ed6618da50ac505f6a2e02a5903564c806a736fda05769d37a0005e7e7e44361c8c9ed66d8d22072d1681157560620e77ed5b20a4973fce0b45009bf901d682013e841a1c391e8303a98094872e2f6e5e148000b901642646470001da32b32a1bd6bb7dd5985e5f6eca150a451c0dba6456bc700301ffff02010001530401ffff0134b7806f913c9d41243736947216305b3866b3cac514cca000c4bc71d038f0fd89c9f16c7355e2cd13062cca3010325185534105a05c59b600368bb99b8e4187a6d1941c6f424974f69abc6de432dbecb0fe28edd5cb4306006c859413babb8c705506fd71f7e9aff431b9af2e659fe9004a63c018bb18870096d8b7d9df7653c0c42efda2317a17b9c195f5883846183e5a6c7b03af4a6c00f64035caacff558ecda6c1485dbee6b61856844423bff22ada97a0b87f060400d26351794acb38acb386d53d1b065bdd8ccdad022999afd61dfda146e4c40f0047de4eec6e1764493dff9945bfdb27b049fb305bc2c47cdfb1ef9003b9cc1e0024568be8c6a0480d9d9ab06165c9c3fdb3c94933da1a30e7405a229050093700f2d6ead0c332a932072fa8a7660d482088cb8d199792490bda0da0754281da00eb83d1d80c5572c69f1b5b585d58255035a3538cb4850aa18a8dc6ab13720f00b6d1eb4fb2802565ffc50ef0cf10f1394aa827e21489d4f9d79c598ae3dbaf009bf2fc8ff3b34b82f1afd994f5e27f5e2e1a27c4932c0a3f95c598d358427d004fa804a01c901da06391ee869a06c13454dc737ba6c5e911f7d9a6ed319aee006fc02c21cff86f82014a827b0c038d7ea4c68009803c14b1a0b6ba2d0bcb83009a374e6709626b7750bd99957a2dfcb5920d94a6bb1fa0185354b4f803fae00008d673544ac5ec6933185e6393473fae6332ddc70d677605f9076d3583078100860704e4e1c015f0504543992e16290b4360b9c14bf5bec3fdf90a0d0094cb0064f79b90c699c9b31a054006010100010101207fbbee0cb61c73c62644260600468e72875efcb3c4669b3150687d047093814aee9a06cde76f7c9b7de281ec008c266f6a93040a06c881c9f257bb4e24b347f0a6f2aea85d892c1c8383492000a6de2c8ee69920c6f59b739c1984541520d0f28e02f434a035c793ecd302de002f334e40373d9eedfb1fe7f80258f1ab475a4dc66d1325ececf9076d3474f400241766bc059d606917a33f36cd884327b27ab416c5b02eaf7a8e916761b008009811010caefbb95956ad92ff1a7d6d823438e7190f224b9a3af15b45715c3b0022d05f7563673b036adf8324d8066b8394e51a553a6e5e7d14c194e4f739810029720972d61cc3a0d40e95dc8de760323fd78a3314d2b6d2dd06af4215fcb600d99c836bf1aca56308a0629cb2d45cbf5a06a1e3be7a16385f95a179c417c10035e15f366b53501673a0f70a550e1861cf0b1c34f7a7bf4997621bbdda25c900ab6b9c99c67fb3c75d6d6799fda01959d569d7e2abee5bb09ee2510a423cd40098aed01ac8d5fa162df71b12f5fae8f9010d819e07f8c0a4a415bcad09e2540009658b3e02f6807511bc719a90d3510d2fb4af5f9e962a9bdc6c41ba82a4df0094bcb8988c97a0285fe8085d9d41a069558c4079e3d8df58bb37b1f4a7939d00486134d37c037fb90842810103664018dd27c5f727a6191d732a3a4c4044fe00725afada153495c2f10c7540020b504add85026e886d924d5c9fc808538bd100ac805ada645a01b9ac5f76598d96d7d852a0963567bc95ca93df98e362f21500d59bde065d7587e5264cc5637fec61930437780e751cc3a0f9954bf630ee8e00120d6da73615a4227038f7a4eb1f467c0a2333d00d0eb793dba0362cba2bc000c7931d0c727513403b57cdfc07a0d28e9d9af51bb290d8c0d2ea643602dda90087426f8d094cc002aa8b46ecde076147cbcd4fd86da74197596a6943157e1c00ef6139559572478438cf45f6a01242cef170fd33ae50a81e6968a49fc4a073006107177197d59ed411b368e1293ff8ac3084059e2b3883013a929401839d5e008f07f489742af675097baab90e9ea7916470dd20e45626f9e32fb76f92a00c00283e9b596047f0606ba0d189d3d67dd2442018a96c156c21b438f623e28a83001380a09ad54c550e009d3c70d1f7ed1f74f7e60af40ced055fa332811bf44d00a4ecc8d3a057991b23dde724119c80e5d5811d1e7ee7195e93ba2684617c350024107a850260818502adf0323814c81246e9000066d888ab0000000213f4b800814a23b053fd0f102aeeda0459215c2444799c701dbc17222d06f570024a70005321b525f9060620f7e7b892103e38ff3f68df97c339e08fe8739d89198de4007e40d394d407b3f0e998a024502b90f2e6555b977ae3caa44df206cef2526d005137ca0459478468a0f8a0e3f902ee81ec04b5c700000000a0d8a8896900a40034f0580e0719c2e10f6d510c58ade3ea4f966efa9ff9021df921643cc5c7a900d4ffbba82f5c45d380a4ab8be5e686d1b4a11d90ee9ce1d0a07007061fe1f700bf86ce4b66ed3e8ea9c467f8f34a10f97c31c1f17b9ca104ed9c02f901fb830008275016840b1e79f1840ca6ee508301866c9401b4ce0d48ce91eb6bcaf5db0033870c65d641b8948701493cb168a000b90184f452ed4d0101488218cc05c000657ebf098e3a2c26043465a76cff8906c322343b383435331414c001a0c9cc00a24f27bc740911b20ff0727b34bcf1c76945353238d3de473afcc3187baca0007e333d7c4e5aa8b8176fd10a008197921c2a3e8f702c0dc5375d80e91340130088f905533204b1c1f3ca526118594d9e85e31f5b6641526e2e1f68d103c1c1007cba5271148fd9864e9a76fd37e4e86335613308ed19b2777bb6cf6bec53340033786b7a414a42567261686d6b4c4539707753524633684633466b6a39437a00617261435731644a6a73366137393039353633623966313439343636636335006566613261646630656462396436663434356435636432313933626235303400333352f5b1cbb0910f4c96102f8b0492448f74e701ba596c08e492a2bcd5770073924a6099b986ac750e4c09560d1f9bd537808aced3c2227f3c3aa2e4f3cc0040caf5ed0c17fd4dc3460c478f2882ff3c72d96bdc29b8330d426986d3a6e90014c56efbf7a065598752026409d5818b9cf3f19be91fbb17c800144477e807008968629681f0b7f902d5750fd48c880891704dfab6224e00fa00019a0001fe00089aa3750e2400d04af4387a65e44aad23c939282120fe2aa3a3722ef37ae10036b6df6b149410d1d44678a5e09ef15cb32cda4b3141beb9738bb7549235a000279921d91f327d8de8c44661b0102d24c71ccd0107b59b7a243a3d7618664600f0f8ab098402df3e3382c9eb94f301805be1df81102c957f6d4ce29d2b8c05006b2a1d418818070fa7725d3ec6ae4a64642cd438b452cc1c395876fd2d445100e73cca36b935ba57b6fca05ae576d0351beaa4faede6c6b4868180e26e22ec0048c7fc0f1fd8b052dd7080e67106c4741bbe2e25d59cd50c9363f103e63f1000945ea8584186f9b413edd92c4ad871debb737b7f520803994b9171f855bb5f004dd24dedcb26694245b49deadaf51c52c8ec5399b5775c3984d69979ddc2a9009c4addc3c2e3ae33b521c5e85ebcbd924ba633d4a7a5f2718f25c713d880a000fa0827b1a0f36609c7a636d5b92f139a3509370f90732cae93e2c8e7a130ad0055a020b02da3f363c1de8d95ffeca471c9bca1074a20b11ba72896e19adf320048426f830bc9fc830fd5dd8404d6476382520894150d0813683901f095b58200a3a65f8a6168bc853b873f32f495c472f680c001a0c4401459d941fc06840a00cfe2e87d95ebb0038ac621b7f4f6bef27be37f16e253a0725132447b41aec800ec8784a14d8c792e6715d9a0f5d74718ac6c3111c8bff167f88a4a82d5e04d000a7bca18fab80ad1ed55a7ee11859718b65af77653c1b8f7bffa9a1033492a00a00d931e5241d162263cf1baa0cb350762048ae82cff37a15a783f80924091005a0d5c085fdf9493c5d8769800c6ee2c834ee8b2910f82ea0276c71c197526001b7a0e6c1706229e6dec9804790ccfd0aecb097478707309a0de08f439006a006bf7690de5f9f4acd25a75d8b0f9354a85c74c5ced12d897e8fb1cd134e89a00926e057b2aedafe245976ff8cf6f86f7ff993f2e15b0bcbdfc9ca5990ee72500076f1dfc360a73476cc001a0e1e66bb24a29d48809dc4032b0c03576a8e85e009df40cde558591f1fc9f466229a07a1f3ebcfe7b6f6ba5ec38d95edda0454e0069905d10f25224bd202b0c343d7d34f8ad819601214c94aaaea1fb9f3de3f7000e89f37b69ab11b47eb9ce6f7fceac82e0a648fd9923924a689d08715f6ca400537d4c3a3bf92b348fa0161b0da031208ce560dedd70c5681e518eeb5123b80034c544eec57f67f6abc8789ac6455ef86f82014bc3a011f342462302b70d3c00c375bcb0f141504e4d5af9dd5024b4789c919dc57e6432a06800d235859a7f00422d0bf68143e0ff4b58f9751b4f0f459a978e02721e82f02152840e5c36ff0083067f5880a00098fb5c2c683e7efcbc29a2d97949bd22cc435fa804fcfdb5006e29d164d9c1d365681ed872a76efea0560ba310406735d68c49b24d57d1f2005d9559bd22b0769bb800e7c0fbbb584fa4b6090739e33f48da7c217ee93a4c0048161b1c25ad06145038550e54b1e47a10f1050ffea46e4b83086d99167b5c00ad12bcaabb5988196dc22d74bbae676ee51173cc6fa94d95c080a0b10d5cd700b861125331af37a2ee87c5e7cd17b3511db28fbc2cb60b5a3c8ac883a00aae00ab75d3ed487512b2b8c6a1f1740cca7738a0d7ca6cd37f3b7956686e44b80200f9055bdaec298303211f3577f004b8f540db2be130d640e309ba98f1808d0000a9728422abeef70c5f4fab8c7ef83fad9057e3233b3a647cfefa94121b783400557069614861475a69374147596f414132484653456477636a36355a7035630050666b35617775345071663835663231313536643862326531646436316565006432386231323164633766373135336131353737376163343937373330646300393465376634396530623836393531c6c22781f00ee146cff99ad9cf8aab720068cbc4774e6f5cc32d7f27facd6356834afd21ee5fcbcc5fbd2eb2783c4c3100ffdbefea64248dc9717ed54a5b1fe723e0c001a0308c370e795e0eb4b6e7bc00d8c22a5eb4dee6bb3fb876c597d4990370fdd875a1a07eeae050aab0950de800ba55f737e5042717c31d5cc99078f25be004db7be0d99102f90213830827500058078c44a453be523c94e2477fba7323877b5919320602b111607e7946a39c00aaa00c129d7a61c562a1fbb797471800c001a00f6a8624238f5b9d2bb113f4000190114a26081499ad138d20c42e4dd1e0f2288da022d3fa22e7748d80be78008a43dffe9752c4b55d4dc955f52f2b8ae1cc6ad048a302f9018192830f3066008402de4600833bf21a94d6238ad2887166031567616d9a54b21eb70e4dfd8600b901042f73d6c064104f6e6c792077686974652073746f6e6500094e4c595700485453544ee09b3ebf550afd20bfe1a954ae761bcb8dcd886a2a8e730fb5a300fd17bfa7755ba07319bb5d3943baf1ad8a7961dd4667a47cb9a2ab5ebadaa900c62cd9ec4477aa243c42def08a75d50d4b3152a5d3947967e76956d15ba66200d5fed81bd6b539ff92e0b3e815ff7c95143b31b832aea7edae3045fd0f0b84001bc40cd5de54dd86feee6b515c9ccd223ce0cc6c05c1604f8f83a50e98202e00600b4fac97fb6840e80610b9aea08d8301ac7c0e3d4c547447a9614c956ced0059f246a01a29e8d7b7fef6dab6632e4139f60ba88d81dd2243937dfd44d8db0085edcdd405f9052f8206ffee2bd33156d70f347a1159f022d2863341aff0ba003a1bc05c4a5a6f1b7951ca95417eee14da5886dcaa86bf5aab8e3f958246e60094d94b7ff92147f61445b863ca901d4358f15b465242737e6dd698ce62006900f7568b1ce2caef2bc23b6cec7d2929fab81cc3e1670b86cbf5483387e8c5e9008d3452654f98dcd927d8dc8df8405f29d6dda217017daf40d6dee4bd8ef1260012301ad31e29153539027bb43cf9ab30057a97866f285315c95c387799a135004ea200883c559c042622817ca87ee805ab11e9a730409826a16869a68bee60000dc1be75852f8532b2733a10d4f4da2fd7bf71bc0ae91b005f2418f3452c5500a56156b6ef9a18f6beefeff7411db340e0c84162e0dc80392e5a3a0803a0ab0036c53cfaaee973e00aa2d89058983ede49ed6793b25660cfb24020965d527500b12afd49b8345133fdc1d196b006e198195b94ab8d6c82921a3f16428d465000ddae2ce3d1b439ceb8c7eea7c88f19f232ceeb8ec68913830ecdfd1b667c1900590bf6c65891d81acd6b4e53f038bed8de1410e2f9fa2aa929604da380a05500714dc7c62eb32d4742c7889aeeacc16bfcb2fc5df9186b02cf01b269f4f0b20002f8728308275081c782a9e894f729a07ec311b74107e7155eb6c97e72b6480043938084b8e010dec001a05aaeb6aee117056becea5d67e29fff232078f45500dba50f06a1431ba1bd66db43a04f521d22c7845cf3faaf3d991333942f123400cbf4378998fe7c8dfe2b293e3007f90c544d830e58d7876a94d74f42ffffb9000be40000000449c630e7ab49beb3c6981c8c0303a9d1aaa86398cda93466d8005f350ae00a6407e004c0530466d85f370402400040e756cac101a07160570b00b153edd0ea1775ec2b2ac9b65f1ab61b53040203e9e83267d900b5cb48044d0013d0a0e0e7a23e2f9abf813ad55e55ce26c0712bf15933320448ad28c0243700322e323133343430313133383637322e313334323435363633383337313934003337323838335250773742716c5437356f7146746a694951366f5063384f7500635555696d4d5a59646333616c4d594f63423133434a384e6764355735654f004a6845797769327268434d654a6e39374a5449325270657377395776653432004f327a5777504776612b48744c64594d44325a6a4272516930613939496e6c00726e6a6e674d6a4f417168746d6f4538645156306a617a3446796b71465842004536347a716b3578545a694f342f7469594b4a527757646557467163655050005053617951684478336f31694c2b45637767482b4733395757614872615741004e38634c494843615241356d6d32325970646d704659396f4b44735a4b424100593365775a6f69513871634d5067774f564c776d44562b5379694f32717752006e4d653757314c365370554d764a497966376963555870694379327133316d005134593061536c5556383263596c725833494761747a766679523663724f52004e4976737957513d83104ec3a0f3d971544513277ebc2002fe801d16e988e20040ccef0bdf8937f2b544aa18ea6ba014ae3e1862f390167f214a8991be9e820064d7ac58012c6ac0ef9f142798e06a585b083d7a87ce3696b924187783b29e00a342319284d75f0202267fb03489702fcb000748ec32ffb704c0a80bb8afe5004bf079a36bf73621c5d8dd60385cb5f373c155cba1c3bf08e7ad3a93ab30a0007804d25d0f1ece33e51137fc6ab5c66175318ed1f516cf128160c7821c89dd00e9341cf27059ecfb5f7e543b94b453644313a294c2173edbc52827fd63cf23003624d74754bf0917c5e2b817684d3d4c6c58b43ac121a9e2675428f0ee9c69008e49dd3c13b6760b0bbfae8e5a449b9c016ae00aace6f6511780a01e92d4c700019a22262c1bd7f096ab0e30adb98c84513007fd14e400d9b47942f4a0216300c5e06aa31fb6dc725a22a1cb67ff76b655944a2ded98c193e32afd88cfa9f8009e821b6e830927c008030cb228010520a3fd160328557a56319971662f2f7100ad980409c9dc6e4b2a1c5dd84e38764c49bece17f1a067af49d148f2c6ad590010a1f0c1e65576965d893fd0cfb4373946dbceef68f2b202f8f7823981463000c094775604c481c2ae306fc20e3bd49a3f3656c0d46b80b807ae724ab8752d007c674c05ee6507bcced2458ca77eb3fefe3725dc33bccb54edefc3d9f764f9007ec18dc2eea034fb34baddc18f00e163dd7abcce7100112e746d26f1b3ebae00791e28c82574c642835e4260b8c080a0e3690f33850be996e01149b6d7ded900d7a306edaeabf9335df06b8bbb6f9057c1a06e3ab9f2d8eba4beaf5eeec2ef00e73adaaed686effed564d96798d4d51a684822820454073cbc94446da936c9009900a0c8be81282709c2f7c35b1fd480b86100000001280519ee2d022b2300009d788b255b50a263a1baa9f4db24df8b88b17afcbb17bc345eb09f8d292cb9005965f4358bc06cf98c2c0200c2f8d7cc11e4bfc7777a0876cebe62fa5dcc5300a3221f00c080a03f9f8b64f638a415686f640a8eab96883e347437b790df96006e311aeb92c7abc6a0717f903c0c1ad4f6c7ea606bfe4631f2d9b91265541d0012f4180810975566c5ae02f89183082750590d950694ae1846110f72f2daab00c75b7ceee96558289edfc580a4db006a000014386bd0c001a09a389dddb84d00b78c833eb7a397bf5011a24dfcf6aeca8ed110102dfeac844c4da00aa6185c006775e961e1975c06173d611a618f8026fe629052bb521a95b1c99dfb02f90100b6621a0205717ec003c31b2c58b6d337158b96d474bfac1380a1e67ee8020100c001a00d358961291683ce4186ccb4aff9382ea156dab89c79d7e2c3b844c4000b1b9a13a02e332255dd31f55465bec2eaafeade1ef152b38f77efa4507e690037843b039bd8319c1b4992dbeb1f52e832c04821e803e4154a4fa23a32518f002ed5fffa161700014cc247efd006e6bd3dea04a50e7a90c1f5eca20b0e484b0027c5afb4e4f5371a8ed72b1e1e3a76af9b8b3ed265adbfa60f3ce0db30cd560001a076824ac241aa4c6627f2c78241309bff2caf00782f033bd051021bbc6800ea37e1a07c50ce065b7b480ac964ef59148be99573a03a6dad49e40769d5c2005e10a3a7ba2202a20b010001e848012eb38e5c30921c00c001a0b1b5c76953003915e223d20d5bb253e92c2cef455dfde65a6a6129d82c4313b85ca03885580082359bc3e683bbce30200702e7cf3699054e138a1b1013aa0a08cf32fe086200c5949eb3d47ad536c2c430a1ef05cac046b7e989a8491c363917ede80e1e3f00d22c928cf1e7ef2e2be8be298f6dc94e6116f660fba8ef073c17cca8bd4cd4008583e03c163ebcb35d41f95f71f5c755690d78705bba9a12a6be97cf0f499700516021f280a59c0df884c5b8a15ba06ead4a158fe628e97afb179b1f8c58ec0061afb6e1046c88e95574db3a1924a89943347c1d39517f2bc4a03cfd42bb4500b09ad72df32543a60d1e8da91b0e41b7b67fe07f9efe324c51b5dfa02d4ea700da81609f681faff05fd31de74a9a5901652290f7eb43119ee6a9d03ceaf872008184020a00943ece2085849ecf69f5cdd1ecda34f95115102af30622c1d366004aa68c5c4892219ecf203d901bfc87c1ec317dba5bb0073d1e575ea021733600770d7ebb11e53a77ca06ee336cea9cc0aed7cfaab7b9fc617ee5dbd155f90200ac4306656994850c116ea39b49d8714be4d1deffdc1009d66c4872ac5a8a9800cb5b5502289a4078b30c9ebe1c812b7a511b44c8f3ef609f66afc92e45359000f7fc082074392d2ac83dd8bbf3377fb402d5613bdfe936cffc7eedb35a31c50028075a3c3821b683560571016ffbed37a29f75ea8fa878314fdb9325a165280098befcccf88292c3a06601ee72d6e1aa502c0873b7e869fffe5c1a0a23bdea00de48f93d11946aacfa2b9f584d5587a1cf77ce5944bc700c7dd2a290b3a728004cf42b515a9e1c558526a5f905558204ba0963ed0939c94538034a60aa7ae1003de90fc3ce1ee2fa509848be4f11569fd583230efadb497d3cb32dabd5664e00d97b403015b0064cb0bb4c8abe11935134aee670c032d68335560a4f4b586300436e44374b426170636b6a3368627770664532754164324742504a525a3254003535473341447031366953766136646261613131323861343039636237633100356363343565626466333538613937656339303065336232376566626132360039316637333133356563633137380a333433353292242c611249fa4ddfd81e00c3739f5e1da577fd8614252886043f6b7d2d2039e76a4f3826cbe47ed2805c00a3320ce3e8673f2a809f32952495c399775e375d1a021b18ba1b7aef02205100fe73174083f0197e25ee29549fc69d6e7e5d83e7f9df7442a0402b39a0f0720057cfc6fa084c02c8353ba7a4b6fe8011dcbf617a6d382aae8f78f8ab3482d400ca201bbc721d80367319a9592cad283fe25c263587a2bd7ca96fa7655f8e2b00410ba03d03c764232eae389ffeeddce30523379a42de769f2f989b9f2fd2cd00fa22d04d258287529487627c7e586441eef9ee3c28b66662e897513f338736003d4617e0f80084db6b5246c001a064c9b2087662fdd95101939ea0a40898d0005627a8dac61d1f3ee6c483426f0964a023effe4e1f8f645239469ac0a15d4e00fedb42ca9ea2523ba01cd18eea216b91fef9024d260a2e31e4e322302a68be00962a4190d9356f349cc71944218fa001c7ef0cf700f63a55bba26be77832e800eade2fc3084090405d8d595cf0340b99df5650a0158c0f209f04d9a2a6ea8800074669151d7a6c08574f582a31168aaaac88ea9e2af8cc02840436cbe0bae8006c821ea1da2e871f1db1508cb5a001395cbd0ccb34c5b2b131350fb7990aeb009ee43a6c82de328f44ef24f1ae30f6715712f7a0379dee3fc34794588697f300670f4568e26a159de51b0da99cfb095da937df3d2cf9010c250636f8026202001604dec5c78288b9dfbae3878bd37335ae4d1baa2eb2568f73d4df0b28ed2400aba05282f033aa9f7749a32289ae6226cc43cecdbcdd9c4dc3a6d1462e974b00f89cbbf901cd2e8402e73cb2830280f58006ea016784b425b2846c71edf9790048054a974622686d053a9d2b6ef6c0700201ffff0108d8b29864348f8d1b720066bf02879c9d0af04eba02997fdd189aba7c198e186b1d264f1df628879dcd00ece31e51078a2bf56a40e841a024e85c33877917e9af28e72eec860fb056ee002b3ad1092073ad74a88f595b93a02606d5d48c1320f4dd78f44b48db50bc1a001fb77f4ff10fc677b1c3cea68d3a88a1c1848e31e357fd1f8315e18addacda0063b501a130ef1060388977c017b1406f961e9a1358d97250a5c81a54e0fc3300874225ac6091146187c080a0d244a2119930f9bb24d9ea316e7a24d30c92cd00a0607b48a3949298a83febe30da0450b45c7eb13bd07d67c8dd57e3d86c6d200defa61c4a6369a31eba5c4a46f064951bd0a536a1d3f0fa9b1626ac4e746c500c5b34174e5b12bcca848b2e9331d7aaa3d1d631c730d95e8979d0e20481398005aeb90f8152ba52e8d0a9e56484101ad1b5c1265c864b25776a789ed9bd738003662768da4471c80a0a0b46e9119f1868b1e9646408ab4fb1ed583d195b5bf0010b4adcf648c307faa0ea05f06403440b283ab9e3d79c65c6598eca90db0c700227fc286e64bdd2beced22115004b91a87200b79f95ac1d6c91404a6ba299400e634f3031bc60077c9ed4ad2310147cb0e0191bd3424af80a0bd27140fd3d70071b31e91ec3fc87e6d2d79653aa5a3b8c6a1c9d941707691e106a014c5cc5f0032fb34b9d180b4726935f1bdc6f97de11e8ca481c7e748b92b77f62df8ac3200dae282feabdf542e1de4353f152ead0446c6b867125ec2406b86f109c3bbe40056a3d98d043926cd33878138d086f2073ccdcb9f671b0efa05a07eadb9937e00e24fd342c703584770b862046b42bc18f6ca650ebdf8766c9305fdf8c7824b00cb4016405d07b2f148000be891b615a6b85b7bcc9bba160b83c1bca5a656e6009edcd0d4e36bebb3fcdaca60cf108d8b29864348f8d1b7266bf02879c9d0af0004eba10e31d4c671343da4e00924e13133deb65ada77f0d1fa8905e148823d0008af05e386004d540bab0bb2ef3af54fc589f4e511c7863405a04d20d11eac00879f73b5542c88af630186064279f5c06f02e1ab862b78452c4f6a398402f40090a5840304014f8305bdf204879c3f6fbbd806f7491066d85cef46f3576986005f9c8372beff9f56005d501688167a364e2a10e694bbbd156056efa0090d3c00caeeded4074947a89e3aad19897565ce4245b5fd57b15381afb424abfef8ae0082ac620f424094942874faaa2e484c1d2e67698e010afb6c7c04d980b844f90023cc28020510a741a462ab91dabff97270e072741bb4f51c8e1ea0f9a09a3f00844d79117c3c4ed1c06bfbd1184841a07949c5dee48780903aac1ebe35d1d2005565461195f9c96f8f52668987df7d9cf05782b36dc3e965b827b65a379a3000acd1c8256f94c837c0c6188488faf9149d4b335dc26bb433c097a04cc1045c000016105101e59f215783611eda03c515487de808b562d03dd81d8c210c947100831363ea84773594001cad695af5639c5657bff199b875352adf682dbc4301007b80c080a0e8ad396084d0b13f3ef06e57849cd4993165182ac539337cefff00cb679de209f2a057f8bde342be7b4db7338654acd44af1f7186b0abceb452100cc53b1bb69b6d5187508d529e8b834d338a9ba99217fe2ac41dc0779e09d4000870f3735353531c001a0f65ba25d69385ce27c0b9279c95e8389a5a5b2d5f300eaa304a87802d3a102867da043e9354860f2aa3f2697ca3e1f47d3bef7118700ce6f549369d8fff493e4fa07bdf9011582010a898da8e4ec69429920120cc30060000000040002013518c45110fc01431860311007612048b2388f7c07148000042128181e1620146c1e160c100c1a162612080c1289c3417188884208c218000820310a6c396a1f005dbb000601317007493c9a70ca722d60c86882d7bbd70047832b79b06add2eaba0a1d484880b96e123be5f3808a5f6593614c7bc0ffb00c6af9bacc10919278b5b3e666f0014cd0ea86c63184a8c84d6b1cb8156b3ea0091f6550bc5569ce136866dca66c9959706614826271f9e1346c86ba696689300707b97061132d317cc1e4094143bc8a1be0f0be62620a0836528971505492c003706fbd77c714492380360e8d3041159cc3a507fc18a456b3ac188992edcfc00e44f08fa322f7699345191d4c9991865c37640c3662e94994a38f8c1402dff00653b61fee5579923e871a2614752d43189b381f05d6a60a6bbe23381a9a72400a9f45511c11d7218fc5324f1feb64282ee7cdb366e76b638087602ae5e9010004c85c97f9eb1861214b9e848a47a2151aa1adca493e30fc80d51e93a63bdf20049394e7a155426c14c690b08d330037024014ff334a9db0fc024a370f2c20a0023927e13d05241126de2d1e22c035492861896c1790c027aec2cbdce1cb3b00034a070c9ceaf333445d59f02e37f291dbe0e2cca6bad2c60bcf1407808eb1900fdcb41de19aecabc7ce80cd23a53716088cbedecb0d0698f7260f0bf9a8b4600852cb441efd87e29f0d70d0490bd9968d77f9b7d9d1293a9a9aecb927090e200a0d0a25f22f4fb23a1f59f493c5115e99d9956dd9269000e5f0d37200600cc003f2598e78398f1777e5b42ea12063eee41f236c9e2d5414bf0cc9594eae2530040102405c6ad4ba3e179d179283f48769e51be1b82f05e610cb8eabe91119e0090be9f72731e8aaba2a9b3da9b73da5e20ddd0b864c13dbc6037b0009886a400690443c03bc75fc95d01d6a368566f979b15e7aeb60ca838493b4e4db06e760008e4bf09964b5c940176f4d9caf883748358481a3043c36fd2c7f42d9e6b930016ecc01d1b74a81f800054dc0afba6984fb1e96fb5fc44c0c3caa580b184f800496e75b07670ac51dd4e4b5eb144a34112934187908495a5fda9720c325d6400834355ca6dadc178a09b036a81360c48b7877e69bc0f348e06eafb70bb291f0087f3b4072084a251ec3428cc7534f092babd0ef68280b75f655e528d0b409900ffdcf6398e1c4f4dc7c8fc8620daf1a25e37bc5c5a77fab4cc330d5835003c00b02901bc4e5e874d4b4e92ce748e00320083d559b0904b475019e238d105840041ea027c2035857614e29b90250084b17bc1597cdeff1d78f953b58ddcb55e00a38f7ac90f8f3cb525bafdbb4d31f02ed4543764d0316d16416c5609c7dff00034e6b962789df9e40a94dbb6041a5c4a6e26c9eac21a89baa36a2cc93f2ab00041a901c941085d9883dfaba76a69be6ada45b60d36ed107e51d2cf0c781fca0074489059318cb160434ace2ef819f933d25d865be1dd59194d1d7054bd6cde0036b912758e9c33b9103c11112151e1f3ef9b0a1dbbe867948a351ea0dce0cc00561b6ae24e3971385574f24da05309d57366f30e677788543bf00de394282e004491e519b1f28deb8505851b05527b2d39d8c5fe53c23862338900ba393ab800a1b9ff94b9cb583356969e41a140f3124ae78cbab14aad01d69098842ff31c00e0f123afb011c21ce11bc25aaa09196e79866c6f1a35dfa929fb4268511fac00a1ec5bad80ba807cb5e247d39215ae7e3505a32a1762d079e93688ff84369500c00a9b29b1e1462e006e9426f04916367c302c835fb34e74e2af457a87233900a7c9c900113285aadc823f9221fdccb64bb316b6be182f21aa19d00b3e7bd9005f08cfc84c42bcaa1cf891dbe0a7d0893ef8a7ce6da13974e0aab1a4208b8800d770ec1762cc1d0a34a0030afa1e0888d543c3ed35eb1260fae973428b1bab009b68e521301cda1d1ccd8b95790c208ec3011dfb9e4e02ee1302a442dd7caa00b0911c8a79cd216053e5111a516638738f01d505e42ed1040d482a20fe1e04000d9209064ac2d62c1cfc790059144e1b7eb0555d2911fc688433edb6b1a8ec00d9b484217dd8f74116a2b0d0bba498570ee0ca0b136cc3bcec2c6b40415b09006240e74ac886281454f3ea6040cedd04ebb8d2ae46cbfacaad08f29a00a2a4002c7b2b5e74d099f6c0eed13e3a4fc749330cdf2107d1f8bfc8a7698e7cd941003d566764c8d697078eea7363fc1273c336f80ce680ca714139d1c49de45ed40098718a93c835d48528d1b7a9860204166041ea500dcef4e799a3883012062200fd1016b56d02ff910c1a11f6311fcfd17e304d417d6383a2cd495d6df0094a00712b81ec1aeab7f0aa996ca67dd6daf147e9f94c592513b22d18bf76bb5a31003192b2d7340dd13de419a7cb606d17f1c9ca16b489b8d0924019b14e4d579c00135bb4e167ca8239da4d3024b4307ba175d251e368e763bed20c34fbc435cc006d2c2994977b20984271122506850a646a781ca017f4e9a0576f198c63878400f94d23fceea1c7bbb882d6d3beab81e5939ed4312bec9f6d04294e5892f6da00f17d7e1ddfe921cd739583f76b747e353b646ff4c0b2473fff4c48a666070500d6c1879109ca39083036416f4e9cf91da9780fe1ccd82106c419262f28fdc40041e188b07dc18f020aed896f156790ce3d0cd41aa62631f0b253826c963e190040ede4399010719ec0824ab0a11c56641889af573f0a14eac343220694ac120006466f826779612bf77f57a5565c8f4262c5f5d82d93d8b4b5b3de624531cf006efa88b37ff8b6c1f80621404c1021edccdf3f8ad188d067daf2720b36ab30008e735a5467742ae47654b88ff53e90c8ed81abd6cbc0c79a58814dfab37005004016f4073cdc22e413cf01ff69f6f6926bdd8889bf0120f76dbdd8370fa4d8003114d77b85491802b1384543bc0f10539e0b92b54351d058e09bf4e184097800dd801698af10060d7cf4997d98205d27fa053ad0b47769810793bb36077fc4008789fe1a97591a059719197601fcdf5ae58de3e18aa7b69701e7e9fbbbe97600ff39ae06c109b5d66578a82af424ae958fc4d9ed06d67f7a03dc73eaa5fc6a007828d80f91a010cb1a5e75782f029a2399446fbdc806d96693bbb60eca4ddb00af96c0f537754c6a6a447b9649d07c81ad434c582ac10f3b7170a54310910b00087d4b29ce490eea2527b0c6b56a680d2ef28502d177877e316869950fbee80011e9f50891b8904ea0fe03cd60b9169153e992982ddfc0f40942851b19a4fb0030d446f794f1129cd1df005836941391917a973878cf7d934be1a98025b0d900562aaf22db1178d0c73742f3018f7636256d2182419e49ee133e2b0060fdd400cc7a9a9c1a38bab3d18eeb8d39ce5a188de2362c7e98cfdf55c98b8e1d677500f3fe5e4ba68927b8892ee9bf1a3f200acdc852a1d535702230a66d8042e0a6001b013820f0075545e0022257e0fd45d32f88bb71b0809c3ae847e3f6d5253b0041ff157ebfa9a1060063f39c749f52723d6be344dbd0814676c95d309a39fb00f8790ce7e5d335c93e8c3a91c4b86aef979a1f4962d37e5ce4383e6361a9fa00405f5db314c37323ed8d00e94f2079cc30ca504f2f6a7119c301a60121a8c8000c78868a33af24c03383b21d8d27df947204e9826dd918f4a6d2e4aa1cae7e0010ce060eec246bb3fd216d51f9ce07db8ac1a7c97561b8e3b6e2e68d09dcb10021c27591c4612fb4cadb98d13e7d5f2ddea0c1a12829904d58b2853b0ced5400c60342e9f6e8bf662660ca6da53c33a51c000504f280ad628d008f25ee3bfb004a16a7ad25ddf0a32beae1425a86ff6dbbcf9b667057ab6f5a55f49fed4a9f009f1487a43a53690ed83fba8a513d85b839123c857a826b08cd0aa824a2359d00d945b37189d725f01002d9af4be40c63c5e2aaa072f68c9831ffb966e61d5e003000e71e7f8fbb8d62585f32a330853807acb34ce24a35136d3b22e391fdc200c49e730b6e0dc47187b0b3f72129b00eebd3de31d8226eafde7cc8ddb0901e005967fb7919296a5d19e2c77e394af422188f5002926564e3c197008219c4f8005dd7a003aab4e4abc1ebf8c380c66136ab787a706b82577070cacb0a136cda00e33b6111d6c818993204c028a35780a645542634af3a18190342ae0caf5a0200812504b25cddb977ab79c913e7e1ff250a826e40c8cf3c2205f04a918304e10084cb1398c696f7eb2320dff4b2b6f20f06f1a90b482dd7a4ca5d0aaef01e78005d83d25c19215299f24ca142c87d3523e7b1039458d3b54308caa377f0b895002f60aecf512984642533012f752c031b55350fe3f05f55d288886a80f0290200bce0b5d8cec9de31f33210466b982da81a3875150104d3d092004b000338d200d42be9209e71165c29965ee34329309cdb5103ef10e469d513d6b1585adf3500cee3a47216530c0c37c957b87ae0accd1fc8a2469127e522958c825399e92900d4d2c1c8f5344f65b0aed3fd423c8c1a24bc064b39dc896497e89321144dfe00908a32e5b70edb570a112f4d7897f41acac563cb2b45258563b4eda4c7037c00337a5d5a0414ed90e842980b1400fb460523384b635204b3c94904d14d16d0001c452d7a684f9d6696601e297132728acdc09224bdc1d076f505e12610128000abef77a1c6d83ee208a395c0740bf8730abf325db8fc80b35b7dc771e689a200643d98c84ab40e384ffb97345d02e341a2b088ef728ebda9dc463b8a97142c00fa536db8626e0c182f0da97e2f720b999a86888e61ea278b249c348f3a7fc700083a39e5e1986b8a8f10d9c4f06855a6a157f557595d89b0e6572d49db6a0e001adb3c8c9fffe6c352989c414d2ac0130d287557c565d6f13ccf5161bb380100570c57b9463f2e83cc400b39385e64befa9e138e43b8e5eac75b13c53d8254008fe6f3595d301cedde43c3369232130ae7036d1fa1acc60153e36847ffc8cd0040c98901b5f3da89939e0a2a028424c47490be03154805295c0616699c487800a50b9665984fe9262a1c764eca5447bf8d02188ff15a166502c70b249f8399002502fa966dd02cea1116a223bb96ac4d97b1489eafcf5d88cf0ed1f844db1800232509523ac6e6d762dbb1093eb3d9e37f74fb9ebd3101a2cf0016d7f3c270006c004dbdb38bf0f704092c1e5e44600bd92cc68245d2b45b8cafdb86b2e5280025b7f7e991e14c9a23c400887e02c01bae31cadd588454386648ba39e140e000d5be3ab5b89474ac06e35c44e28854fc899c50e75a225aa9eb2fe4239232e1009a69aabb6f3f388134ce85a6e01fe8a5b2e00297eb3edef7186d815a853adb00bdd10c6b128ffc116cc01c082334960832488c2cf8cd980b6eeac3133198ef006b119b3b5ebd37801a4bbc6dc7ce45a12d324b03fca89fece93385507ee7350054c9383cba55b3b1bc90e07496146fa13b4f5e0670539071d3f6e14be41ebc00811344a7ff090a8e7af2bc2644e0004ff30d42a29106904efc1e6a7cf770ad003e978eee474c9b3a216562b5e6bc1b029a6c87346bd9cff4f488c57c901e9000a121c552d09cc3257a12aaa3db25501afeec1c3d717c90c2bed9c8ec903be000849431201745803dbb45bb4c2e790cfc9d638b30b328a74ee95e29c92eedfc001a7d3e9693adce06d90bcc92157debc84b3ce2292395fe92564d136fddd8760078b8694c58448a525d17f582c4dcb9ed4c7d80b6a355a021dc9208cfeb10a30023b45c2f82befdad89bc108a80473d01a019aaf11b331a382d26abeaa96d24009be9681fd4914250ab110dda7bd340bc1600c3114dc4c3be1b9263015424ff0040bc644c932f7004a7c0e01e1e07aef3c0e0e7339c2b8f8ae97e077e563de60067a4c1f9a0c6809fc12630019404e872a0250197ffe84ef4ed06426a645ba600c1b0e6dc41b16b6a8fc1208223a830057561d686c53c6eedb0fd7f76b347a800f4e3596ac37ff0f0a6f9c29ac1ae00727e5fdd44bc8bcf034b8bf123bb4239003e43de3b0372b482eb09cbc0056834b503ced305c7a25056884aeb1db280e9002298cfaf6c823ebe766d64044f8eb08f1a69b50acf38372b64cf091d0132f80000023a76a1dca75e687b4a3c1f5b801c4e782840580ac2d563f50abafd8245006935b104eb86632fdbba3c2733872a1660336ef981fa78fc56008f330d62d6000fe1debe1297ac401905b24e14d61747aaaec00228a742403d2c000d6b9a600034059481136106159a13720207a320cd61468cc3fe2ce3a81148ff0c45dcc000601e75d310dd0a8e7fe219d03eb893058467831b499ee15f321e4350d67d1f001161e36a3798f6cb726564cb232688407b50be8ce572daffad1b4307b9240200f8d4cd469b3277f60ec932d4a8af6d9411fdcd2ed08d1d7fce5f1346e5391c00ab3b20342400c08c09d25008ab9e0f2c2a64f3d0c95c46c2fc196cf0e4acab00400ec7d86a6e3ef90b87b7fff8577cdc913ddff6e2ddb6e1bcfc776946280200214733e8b2bddbb53086e325cb7818b898476f66e1ba420952a371c1dbaec400669fc9472dbdf51e8c45d7e88ee206e081a66f5cc70cacc6a439237a5d379d00e54d615c86d83303c6043c5101239d7bb3b91e8baba6da07ae1732b9235986003407f0ee597000697d801f72f2350c032e8a997e747603067781d041dd1712008a0c71d018e30438068cca03bda39d0be07612bdeca65053762c54fbb3834300a5226b43335ed6f48c7be87e4b3a25891de9842bf8581460b24f8d4c72c961008a48d5d80a9b21e220d6761cb7700d5df5a1e1b00e4e8e0095bcc700b63cf700c6450292af039fc5b63a297d3ff1bf09af2b0101086e14104370d608f358ba0064c4a62fb0b12b9464408a6c09be1b227bf584a7786348d0c6a4235b8b3182004fb38863db7de67926c96a4e928712f3810045ec9104dd38b3d021d93092be006262fe770f820803e81981f4c0099e52e6d12ee469f9a30b9b5e16797072d5002cfbf845038d1391247c848324607422161e5a83ff46c1a703fb0cb6d7f96000919ae4db95ea0e114006ffbf59dcb7a3b6d850d48f8a7cc3c1b44addc9ef1f002ec7546d3d85e4750320949007dce94a51f90b183435c9213493224d4c1d2f00198cf4807ea0057fcd5a9d013ed93c42c617b42adab24a29ab4c306a864aa70035566e06db439993b88c8ca26c3c4350082f690d605f89603872945a5dbe1a00d7f7294e54d037b7e05423485f59699ba313f7c49d5fae55fb90f2fa7ce676002db8c696812f4c75aa9566fdaa39ec0619cf91db4d139c1164797ad26ebace003baf8b514706ea90d495f33eeb02e223eb2ba5fd30d428c43fc8e7c34ef1e000913a6047578d0e6538e276ddf6ceebaf05f30092da03240a40185240569828001c88b7928968000736856b908888884adedc265207e5de0b24bb2ac5dbd79d00886c74c24e8fa43e62dde4d031fa151e1dd68b3808918435afda350f588b710090d3f1eeee473d1ccb882170d9bb47202f49dc16bb68c7294847e986cccdaa0085206ec5bf71f7ac8c1e48ff23212ad21043532c44be2b5aa65815618ad8030035fd9d14420fbede32fc3c6bb19f135765dd6c30acc39f2d0a30a4ef296f2000d9a2b6004aeb2d84e63806fee4b0957e8a1062038225b0dd5d51a666362ef100082a7184dd2b71bf403d0a99f8cc0b36032f93895035b13af40b827b7c88ac00838db98af38f212becad11b94b052cec489ec05dad90b11aa52c386671db2b00600fc180d676613a27c7c9c160dd4c3cd30bd7de6816520c6c164aadc5e890000380597e306577f63e6262a5ae070bc36abeab8a68dbbf773a75c048a23c6e0004e7907c38749ac61acfa9303a1012428f4195f91e66958b417c4a10e28389001ddf3390a951f97e601fe87160ca3a5060e71a8bc8628cfd23ef471090facf005b7786d0989ee97c257a072b1575ae9f1862ab7c33650a791bec5a28c4b7e40042ef9102dc73c7a3679af8f6e81c18b95513ca0c0a1a26e9788e2d03a0929100a9218a7544540cdc8e13534e1fd02d6536247bf258c2bcb554982d444dc0760088b205d816256bf37cc25e2f477b9a6e842e5bb400694c88301aa818753c4e005a68f594b80cd166e882bb6d096bab1f2b24a27c450032176d5bbdb7a2d54400b20533a89a544b712546bd0124eb04ac6f088402faf0808301d9d094b80dea00ecd7f4bca934de201b11a8711644156a0a872386f26fc10000b8a4a26e118600000000204230786430353732336337623137623465346337323263613466620039356536346666633534613730313331633735653262323534386134353663003531656437636461660083104ec4a001c7f81d11da823c4da68260aeec804b00ce78708510c876ffb3ccd4d807fa6674a01aec95273c8c93bc5e09a84b2a08005224a63d3e2320e8ceb0f305b2a0ad739ed9f9024f8224378402c9415c830200bf24943bad7ad0728f9917d1bf08af5782dcbd516cdd9680b901e42e378115000040002105001231deb6f5749ef6ce6943a275a1d3e7486f4eae001ff7a8a400a0869d80ab5c7d33baed62ffb70070a2004200060053000400052435be4fea000d83000523f5b527dd6d59002044ffffffff0001800083104ec3a0044919a700206dd64884bfe5f535aafe86e747209364874d7556a60383aa54aa20a00bf000b73927a0d77e19c82afda92030fefa5260a5720a6d075f6d9ca5a84790b80200f908738308275027831028998403daec29830aa29194fd541d0e2773a18945000a70f06bc7edd3c1dc911580b908047b2151e5000102151966d889705304ff0066d8895c0000001cfc20950d764396ac8e3a5f535f2951701487457a37d37000a672b7aa8f732097cd7cbdf9a42a1d885a816a87cefa77e399a95fbbacaf2b008c3ef532b55f6a8d0c0c00000203800000006053002f52782c6801a7199cec00178105bcc4cff05f395c9b87706f19f800a02076d4632853fb165cf7c7e7fa00d592dac70f4fe1a00106efdbff2a14a7c8e15944d1f4a48f9f95f663a4551c00b24872f1f6feae4b9c094a996230bd8be3580205420d5a44c001a0adf7dd57006fad2f651b682d88c8e283c568ca3a397ef1cb504a5ec16141ff7721a0151b004dd3c6db7dbcb613a2aa2aebd2021c3bf4febb7959cee775eb111c2d580e0200f902b48308275081ab830fac7f8403da700f8308dac9947de3c253b3f28e7800fa82273527b6da1f0b20c7df80b902443c04271520d57de4f41c3d3cc855ea00def68f98c0d4edd22d57161d96b7c06d2f4336cc3b49e01bd5bc16cc504f7f0009ce74769d8c667dcb3aa587622f0b2cdc9504c39f9ce48664024b56aa79b0006700ac7bffa46ae835520a4888319ee1f953081b858d22e4578b7ed125ccb100672190892e3a096b8df5757367ce66d868935e6a8c502abaad07c8c436823b000cb702cb87e1a3c0ebf2f9a467ca6618aca2cdf797ffd5720c87fb700000c00001a0fb767adee7e456c012779cc1728e15c85bdf23ab035cd66c4349f1f9860021776da00563606832132376c342b5ec092bbf2dc532804aa335bfa7c86dda008502a76c2ff902cd308403938700830afcc89439fb5e85c7713657c2d9e86900e974ff1e0b06f20c80b902641cb1724033b1d74e4749e9fa8e35fb170820d600a05cd50399b307ecbabde595576b7043616c9e13a11b4b956fa88acd17ef3c0008732e942d8c0ad0e140f94692823b69c352b8a1d62eed22ee3cd81ee91f0000dcd90f96a3c5b6dd0db373c4ba72c6d16ce2c76d6fb02fb88f803dacad961e005e2de850f5e027c70b56b5afa5dfed07e8d6eb0238a72aaff9ce0fcd57d4ef00b084e09b4528c47dce6a1714759cc3a45c27a05be94f3f3086701ce8ed91fc00b2512dcbbbe084c3ec20cc90822281643e298fc002f8d2830827501d047b5f009411fcfe756c05ad438e312a7fd934381537d3cffe80b86469328dec008a2a000c2804aa1fc95f24ca67eca46b7489e1af35c080a06eea88cd64832efb986d00ed6480d4a954c51150798d866c15ad4fe7969255442fa04a3250ac4362b1170030b611b550c6bd2e37eb3ded6e108ca0efb807574a49d102f902af82014a840002cf159c830ae56c941fe3174558b010329013c8ecb5f4d3a57826eb4f1c6700b8ff2c85554cb6650352bb643990316dce507dddbca10b1ee8b464db6cd90d005d6cc47eac653bcf6d0e9e4ccb6840f77f2233ee9c1292df387e6c7615304400506f731ef16d599ac02445af888e593b4df9d76253a2d339deba98e1ff83db0099d404acf160f0da39e5b3364415ed1d1ddafa72d2c09634c108625129389b00ba8a383dd8e04b7b7d926c3113c214882e4f0b1e6c72e71c54fd735f43ddd30089a01fde6d2cb24d041c49a08bc543081438cd012bfcca8215651d82d0308f00a43e78f9038d11030d4094513d8b9dd443f7b074e2e8fcc177bd62fae274c00080b903243385fa2902a00068ff19657c8d6da163c5c8480ce73a0d0efc81fd00e38900c20c01c0fce5f4e1a5f23bbde12d8c64bd4c6fd868ed92477a31a57100d9d93d1cd2efa7efb7c165372cb6e89c89ccd0ac39c2e2c9f34306a096bdf50092d6446b9ec4afa136e65cae2b6aee9d58d8660100e00120405cfbb06cde6600fe7194e044bcf420b1ae3651dcaa01c646205c3ed668a91093eae95b127ec900be1da39e41f2eadda46a312b98a14c09e34fa283a2f9824efd99ba920ba87700b4c96c27cffd5cb6f37fd63e87883b1ad32b09379c9cb802556ce4ecf1c46f00b49dc50c16dda51bb34601aba849225efb852271e5f01b8e087f182a11f9f5001c92a636a3bacbc289a00aec430fdab8feb6794a0947261587b13d70620495002ad0fd0e13e42296c8799cf902ad7a0b8d949432c2d3211a674126efb382c0008149006f58cf52fb82a7580a94c461e06cd717ecab19ac54310e241dee15330023152e21b64341477323c6e8f06b1644615f543ddf74be0316d7b002005a3600fcb059366f27e79450b0a0aa763af915302533ccc57570821eff05f0f7555f0052bb483718ae10d3e8e5af366fd800d9389b482247286b6cdf9a2ca9c139880040dc04745719c31cbc960eb568124e81ad84a813f1a0231f1a325dc3bd7c330054a2028b5dfef120a8a6a76e842d15f126bfb72811974502f901f383082750000b02477d94ac4ce2268c21d36846d9c2519d1dfd431a030f4880b9018484bb001e42ff100d04e23d682a850721f50938028c6b71d0c2ee016080eec001a0b4004e2974386af92562680210f5bce446f40e150a40fbc922ae111d8808d76c0c00a0115dc854169e0f7daca2e1587ccb3da61665d663564bd4a61700f637581e00590c02f90137830827500c0e63913783036f2294bfe03c9e20a9fc0b37de0100a172f207004935e0b187a81a8e0ee02110b8c283bd37f900000001a25b2554008b4c98b0c7d3d27dca5d5ca743d68b7f0707a4957480fb64c8028f5c0001d80004ba88371a3f00ddaca03cbc2b6c47f38105fc000000010c23329b7c766d9600a76afa60212d8c7e82092ac4000000000301020300040101020600010102010002efd69765a2f8df9797b13a046b7f080ad40cd704c080a07045991d6c7eff00b3ea9a6524827dd63897ef7db2c6d5b956de039b29b5eee665a03a16b06f760093cf12db6cfec72628517e0287d824458e912879a3823a9f534385f8ae830c00da07840316fe2b82ef9b94f55bec9cafdbe8730f096aa55dad6d22d44099df0080b844a9059cbb00afcb09054d433b8b433c389b5b32d038f5360e69003d1e005cc67c84b436c8266a4e61b12fa175603a0647320b5fd0fd94426a0e75c49300f7eae6a0296bc9e68ff073347d9e56398cbb70a3f5c6f97d24c1aafb9735df007b5274754f02f9079b8308275082022c03633c941195cf65f83b3a5768f3c40096d3a05ad6412c64b78644364c5bb000b90724d123b4d800400006a0000000002e231d3159a04230a508b37bae77b2a27e7a95e2bfeb4fc11e5b90385c633e0014d032840e093179c7f2e70819fe1642aae2bb339090cf5501b690a3b49605003d7dfac8b5024002064000000003084d6574614d61736b35697066733a2f2f00516d5546636b416572384d4d4353316a5036706431686b4636644376663163006a7735737136784c774b477178687260026040c04230786536333732626162006530366464336131356339303265643461343636353038656162373864333700376135346166656236313336386230373731666164383032620a65766d3a3500333433353266666635393565663763396630316537393937393232623834390037346231396162333532613638353636323064373463373633303031356231003136633532353134373138393165626636356532633861343964656564353200303032393332663134393736343662623037333934363062633236353065630037393733613062396241d4c6655bb2e28acf7fc76321b2a104eb6b4253d93100570cbc873120520b4a00e563d76fa63a87ea8ab0f2720405270c9e6c82eacf00ec66119e8798bdfe32fe2c0d1cc001a061d7ceae0b24059a1ffba40aaf99390045e6310122486027078224db17627e288ba02f43a328d8b958a682e6be2d9200420357227908f8deda6318388dd61586709314f902ad3f840bebc200830d490045947673f45e6e95373ba22651a4f5f594edec3006bc1bae3c2b43b9d643a5008da02c915b2ac6625ff910068aefb435a59eae9b25d5b9611684e515b32d0e00de4695b73b1243a453bda6be1eff271e227718da6ea9f7b2a72844a36b01ac00d930e931f2d7305bf6dca659afad9c2f662dc370a82ba389a752f4c910dea700b683c1a935cb802ede5f970ae6d7b8e7b7b82c82fea273c7c3a06cea5a6940009d17cb631adcd56eb418d5dfcee4a5f57cab65723fd04dbf5ae613a05ff48d00fc64f9ef4b6330685a5475a958673457479fc2589848c5ae69df08abe502f80071830827501c8311c641840eac33d68302a43b94774acc5ca33726e50948970074bcc41f16f9d683b180841249c58bc080a0340ebc6eeb076491980c6afcc4004ee5b13c16db0233a1d12b9e9502747e199ea9a04688e0be8050ba057cacc1002e3f5586ad58c1de2f0677b3863c783f2b27414e079b0a5e3694850c116ea3009b49d8714be4d1deffdc1009d66c481c5f8d7a4e931fd225ca4af6809acfcc00a5676ba6b9b69a26a0d1297b0cc12a7eac7cffdcbf2cb68ba0051def47a7970048f3f985a2617d2f0b5053de494743e1cfe15a31c528075a3c3821b68356050071016ffbed37a2a58b7b15c163314fe9a25dbff83ccd67dbb6f4fac275ea8f00a878314fdb9325a1652898befcccf88292c4a077d5cfa90d15eb268d4979e40013f776048fcb3907d0498f7baad5aa78e1bac469a0402e4d17e6cdbeaf773300a167f1d54c66fb631f77ce6f3fa1d0f7d3d5c841809802f90c760184033af20073831369079480b90c04733214a3690f695b484bcd182b999e2227e5e733ae00b723cbedce7bc1087fd7e8aa026bf2c0000100a942b45becf6bd7d08b1566e00677b7f623f430e2519bb3dd31c452100086c6966692d6170692a30783000610031b5fae19ea4f9d964eac0408e4408b66337010ae7720984e21fd0e9f4044200e1cb0bdfb496e8b7405d0c1c48a81bc897000407000420c066d85f4800000300a0200240401b96cfd4c03f38197ef860514d8b98e842d01bc8f163dddd9601000ae772f83183ffefbca071347df469c4e64820c95b01b957bec547fd007c0100b1deed9c19dc57dd2d22be0101e0200201022b7b22536f75726365223a226c00692e6669222c22416d6f756e74496e555344223a2231372e3530333737383000313033343132334f75743231373335313530323939323638222c2252656665007272616c223a22222c22466c616773223a30223a223732373931343433343800373534363232222c2254696d657374616d70223a313732353435353030302c0022496e74656772697479496e666f223a7b224b657949222c225369676e617400757265223a225a396d493234744a444233426f7138537a5176736544544b380071616d4b4a3034534c756e486c764c6c37332f6877364c3153467346336d4e0069454d7a446e596246323435656d466c6766685a4357774b5253536577452b005768685971546671482b4243634976525435545045366e34436a41586c547100646b6238765435714c75737a41563573314777444c75397a3063354f456d720079704c6d412f3154627069323159535338707453646b3430444147666477380045482b707a3248526a556b72584d5042444132374f3846464b4f64357a386e00324870324e36344355342f5669495a6d327a614d6a706d52506b5972564e4300444b4649756932694e664d4c354a63776468713277796454517071374e344f007131723368514a584179637842396664556241526c54442b4e613156506a58007452435573586e3051583347672f5439704b334a5243614166744b5669476800666d38646374513d3d227d7dc080a0b2773f1a4083a8002b23b85cf81f086800b9a4a8f7337817b13dee039a12e2a5f8a05ee518f72be50da2d7000ca91bb300209c7ad2d7962dff7c52f7d3daf30affbe18f88b5984042c1d80830493e09400dc1fcfe40a5cf9745cef0b75428ee28e81d7cc5680a42e1a7d4d1dcd650ce100b6af7d1d64befd5f9ad5d1464bf45b8de4098314da885fcea04b323c0433a0004daa28286297cf5445fa69e70e93446d56ab6023730158b4084e0d0c46fe19008a02f87883082750560135b694cf7f37b4916ac5c530c863f8c8bb26ec1e8d002ccb87016bcc41e90000aa901ee91ee0ae173c332c3dbf49dd3b670413824e00ffe440c92ec80acecf2bf8a06b395ef2ec4979fe1be08a209ec1c8d7aa3b5d00ef9d04b5860f380da60c70043af90c545a0ebee194a2a9fd768d482caf519d00749d3123a133db278a66876a94d74f42ffffb90be45973bd5e0449c6308341002753e54768f8bed921e5556680e7a3e1910866d85f440ae00a640560e0a0040040020040e756cac1017160570bb153edd0ea1775ec2b2ac9b65f1ab61b530400b39880c7a0b752179d6d7d9ae594ab4c02d6e5b85363407a49e0ccdf79ced500fd02af299d3548b4e35ed6163064bfca77eb3fefe3725dc33bccb54edefc3d009f764f03e9e83267d900b5cb48044d13d05304e7a23e2f9abf813ad55e55ce0026c0712bf15933320448ad28c060a8337cce66f217701071a68a503caa8bf10039b184011e24686970706f2d7377617037322e3231333434303131333836360037322e31333432343536363338333737313934333732383439393657384d6c005565717a415164716a6934493664484a434c58454a6e6c6631516e6564664700503942772b43426e774f75316757314e44636331766e5548734c713042754b004e5962426559584d786c315354563676384d706569665a572f746d522b754200382f59744649542f475a76434870776578534b55476d45664b393942612f46005a747062462b5a4c69316c546d59756c53504f445134416130314b4479554900353657334f54556e2b545a654670474879527033344653502f486f4d4e6e4300426b464a7a383964466c525a53596c5a5748777a6f5a47444865415146466c006e444c486c3366564f4475704b676c426d3772376f4f7a383736796e436e4b007366574a4f7744396c6530505768317057475679785754735a41474871484100397a59663557415268526b79536254672f4d656d6b63754b58717079364978007065356c47653546666342676d443171477a317344533776383648413d4df400d42c72ab35f8f51e193b5c78c6febc017ff721a13c11edb59d9f70ec920aa0003cc7dbc8321fb69571cc8f49df67a5c29d447129e9671616c3118867a14e4f00ce02f8db8308275032840304014f830486d694ff75a4b698e3ec95e608ac0f0022a03b8368e05f5d88015e2c895f8125a8b864474cf53d0000000000b13c180016d95b6ffd8b57d90d0e143db62ca048ecc080a0480072e813bbdd4ae0705800d9cc45eb095170d6f490bee05c32329f5d5c85c86ba057c9d9e8c5bedf7cac00528bbf1398ab72d24cf34d2723671df08a1f9ca88110a902f902d3830827500031072fa8942dca57f08b8445bd6265b3667d5a420089255b921b589e47582f00b3a811bb32a161a56c7214f2f8f993438a67be9032c39b6468c9872b779d17002c038d1aef97a9fc20af4b08cd254c8e6045f6d1f0eda55595670412a9a66200ca78e3220399808d9cd356513887b9cab65ee12642660e6acfbb2e6dec4cd200e5369cd0238dd3017188b352c818f291432cde8e4b1f0576c188f9e40001c00080a0b4578c24ab17d94a7d47df78111c6da034902665a5db76a13191a212c800b8c973a012905d9ad43788a95ae8b7b5ebb64658d51936f63430e0b9e2acf600554a0f344bf8ab0e82aa949480b844095ea7b315d5ff975c1181faf938cd3300bd0633435bdfa18d1ff88b833bfad968ab666f655d16a5737c01f21e3500cb00a3539de487498c16a7a0344b9c4f7c19fc4a11d46c0b45f9686bd4c789f2d900194fafa1b0545b928a5d85f8cd820a2b84057800cc832dc6c0949d5afa6f260007374c15408384d50b3f09821c12e880b86300200009669bb660dcac952c04005304180100324637d496c7c56e670608bd40e0d1f257518ac4209344c331410079791ec5cd2165cb3b5f7d19efc951c37ccd94da26fb060371a509a00bd362000d6e9087452bf7c986d7122223f3a0b50989567cee9f5cfc76d3a9a083f90200d083011f278404d3f64080e38291e06339d10aab483c65695d004dbd5c698000b902642cc4081e000d28819403328b944c206053040146d9833756814a23b00053fd0f102aeeda0459215c2444799c70485ca81b70255da2fe3fd0814b57d100b08fce784ecd8a5295f47bf247d2faceaecb1af7aa718b228affa50ff4cd1c00e746155ad795a04f91d6ef4280a072b98494e26e933fec12ac8d835226934c00ba48f9480b1b7df7f9017083011f28aaae99091fbb28d400029052821653c100c752483b80b90104414bf38953040bb8b2d001b4fbd92b5f1196da41c3a0a10079d782b039f287392bc42f4576e55d2a1daf25a5fa35284fef4787c57f02cf00a075c2c0d194dbf0de010672ccbd3c2b13f86d4a7c5627accc0e5f79d5c0a1000719f8ae82ac630f424094942874faaa2e484c1d2e67698e010afb6c7c04d90080b844f923cc28020510a741a4627800ab8b161c2890a289d99209411d7ade00ff3f2ac1f1638d1202081bb0ac7d16afa7803cd5f3a049bdb2c4028bdcef4500397af4372a6fb5ca4b43936ba10c490429eee2531f70dbf8cd8215f0f6a96000ddf5a2c4a0bda7db20f9dbcf6c9ded17b688a78b74ba5bfe9f524c0128867e004da6e7eae901a01e90b4cc75c76058b7f0f71c7c32f5ed5d454fd83dac614d004db231ef56ed6746f9019083011f292db0afd0045f3518c77ec6591a542e32006befd3d780b9012475ceafe620e35fa931000000000926c5a62b01f4135c3600d5f887361861ed1a03560a3e1656b80e67a3241a8d38d250b69f5660fea0130093b82810b53923f020205c1dd18bb9627d5d414a9c6683cb7415a1586b05b300f8ae82ac64840459e4400401f40713e24c437348e5d00b29f76fa091365fbb00074e03058262acbd8c7dbcba2ae4dffbf3cd06cd84b92b0da027f0369598e80007df00edfa12c8f10def533fc4d401db5dd97b31f0fe3dbd0291650000000c007d713b49da80a40fd4a027540786cff73be90ce4a5b59024f33e8c8d2f28460077cf551d58bc8685542ca00dcf9edabc3e0d61a04d7a4df84f6a7d98eb6655002034cf19a972568021b31a70f902ef82953784038e00848307a1208420d5af008500000066d85aaa032edc0b3c5c805a9444eb5cd71eea640762aec49247ed0050c768b397d3a830de9325f275515614b88eafcec5f41021d1772416ba858d00fd2532d258daa01ae1010edba30e224c3b9a77f75e676f586218e5821049b20034ffabce2636ef6bf8cd8208fd840f219ec1082eae13544dfa6d7f518b1db3000f9d2d626edcc7739e40a31fbd98c568f156f45ed134c7a1d232b5a079943b00dca7adca8e75b664ccdf0a8bfac5dc786e99508ae11a382026486641cf2a4b00f5384a6701dc1c8078ea8e533c834049de625e05f0b4deffe9db5f6ec3a0bb0079cca5b8d320574be65365969514577189b5040e5f223a3642fcff691e53c600a026748ef76befeb13bdf035639e2ee0f6bba1137af0b05dba844502c1ff74005ef7f902ee81ef2ff494b3faf6db995a063d020c3e4fcfbfdaa3f4e3e54e8000b902841b57a497abd23496e467a02f0b85a2ebc3597ecc27d2aefb4017947400b0c02b77e31a6bec7b49979bf3e2811abdcea88d7a4eeead3afc650cff6e570066f1ff0fa23160bf513f1c13d8ebad77738facc7623129475885a2fe20dd8f004e0dd69dbf87fbc0561b906fa397a69901a0b355d013857ec0862499e5deb9007cb4a6a021a7563e3078666532306464386634653064643639646266383766006263303536316239303666613339376136393920686173207377617070656400206f766572203130c3a0667f1da275d14cdbcd8d8f64d7cb654c5b5d22452b001f4312e2f2f3e7a1fec609a0617080f76decf48e0204e3c3ba106ca4cb55a600c88dc731e804268ec60f423eae02f902fb8308275082010205152486fab5ad00b2e004b90284d7570e450009e88d897b00000000d08572f74f3312d7d527e400b0c0e668c230951eb902c080a0403ac31d4ff92f31be9b0d6f1146d664a44d00a506d38eeb33104e7b83e98159e8a01c3d5c5f0a94f7287af579d74377094f00631294522e1d24da49f2007b98b86913f901d682011c83024f2694dc3d831800fbaec2de49281843f5bba22e78338146870110d9316ec000b901647c2ccc4000e3dd6973f00acef97023b87486f46a2fcd6a299e00600101415a4139ef8f1e00d5e277ea1ed9efba259de60b8d6249b4f406cabcd7772a2fc51d100e69f8c300304cd349c8ba024936d4871cce07fce946ff3c1945563ddd74c4731c00322c003485b60effb6232be337ea39f2459783b02e05112fba15ae4abbd0adceb3a0006e8b54bf2372bd234b22731b610161c6923ece4d40087892ccba2b6aa3b81f00c6f9020d5e0aea1094c47300428b6ad2c7d03bb76d05a176058b47e6b080b90001a4f17325e7402ad3a6b1191596020aa427b03ca8a33a0ab3ea1121f46b550081b5285bc571703cd772b336aa12e6406dd3fbdee6b285ef3241401f10f5a1005f572a22c846dd5294497758646070eff5a07d180cb6b5f83e2674eb39277400054e3d248d26d4b70138eda8762fe33d64a61102f901da8308275051014759004bb780d23466061d4617dba377398b485ba9c6920506fc4666d57b4c47f80400748cfbd888ea18eab03fe35836e588a0d746ba60b55a614359c36348838d250024595b97e9a28397e456a5098a100681a0cf736edeb27fa31bc080a0f71d2000de3146bc32435fdb15d60c77efdaf60979b533e55f3ee50e6e797fd71ca014005aac92503fa436ca9f655f4a8bad687ec41a22def7a692b1c4d6650203b23c0002f8753fc3831363ea84773594008252089485f2280f9d41a1f842d2e41caf006301915e3cc27a879c25339e85f04a80c080a0f054b805d16b421d01c0052a0065661a2add71fd33a3b23c4ae21a3baa5698ef83a075a7f01a9c64459e2bc100849e22a47c323daac4e2041b59c1ea73766ed8868772578310a8898403bc1100588301c2d294849ec7e20ff89b5dd737f86eec02145ca65bdeaa8702c2ad6800fd9001a04e4616b735bba82d35348e7a7f405c3bb06bb3948107cccd7ab7c10029cb30e716a05b0524405b938297ed051a30f7a626dc8b816009acf4c9cf0d00ca7d7ef721290c02f902b3830827502b066c631b4a326ae9bb6e59e4736699001e1c2d471d1c11f6d40f50dafca5ddf5910b2461e965c6d22feb0e01b5583400dea7d75c753eb09f266111c2ecdd627a8a7f07b531aca82ecf9b84fa87a51d001d008e4756742c9195809fbdc080a06cbdbcd0e32f4ffb4f88f740d988d56300b1e27af14ddd2544d59b2e9377f8e01aa058cc6680e12398e2106b0e54580000edd1a9c08d8cc71a716c564acce9319fb364f9022d3902ab7694aaaaaaaacb0071bf2c8cae522ea5fa455571a7410680b901c4a15112f900010002f66803180030af3b3f4e7798412abc50db8a1b1d00c4a002f0b4c7612d21f4eb5e372fcc000fbffdf8c0d79e9a47e62af656692e8557a7aea04004634dfd82399ab2f6bc00af35f077f26d575c6789dc8f1d38bbb9e5f8fb698102f90269030bee02840100cf77f03088fa130609a195fdcb4598e4b7c8eae25300d45754b2226235d215004c43525c33835488ce19d2e2d469cc366c57692c4103c0c7630f6a756d706500722e65786368616e67655215e9fd223bc909083fbdb2860213873046e45d0000043ccfd60bc001a0d966001cb37123883418c753f46ad73c0475837bbd0c5a003a2413d548f00b985fa019d15b73b254d65f429ab67d9f72a0340ab5494f2000e13126437075d387457ba002f901fa8308275028050f9994b23af8707c442f0059bdfc368612bd8dbcca8a7a5a8701c6bf52634000b901844737574080000a00416c6578697335333736e064f8ef34ac5dc26410f2a1a0e2b46411890402310066d8689d41addebaeff2376126b8f5ca229e28b013f14421bd8e4e141979700019f95430111e3267b8983c2e34eff355a3d48509f66ddccc05c32ad6c18b92003839a914c751cd1c0000c080a0c9eeb0badf675314c7289e9daaf6755e2f28007da48fe38bffc6ef0b48f5277f58a04ba23da4b0ec3853e83749ff30834d890073293f183a218892fad3ee857cd579e402f87390b7830112ea8403864d4d83000d545294dd14d0c651c63e1eea5bd8b250cf99757425d68f8084fdb5a03ec00001a004266c7aceba61e131a51b0b02c49c8f9d658489abbb5ebbf8b360bf4f009271a8a03bb09fcd92f4d492ae5d91c766b74adc8ac2cbfbee1d3055b91d120003c087570b02f90b5408bf0380b90b6403684e543b81aab547db86fa0d454c009b69bfadfb80125410da7614e42a630a6009e404e0602003c00240f1783f330077b3a70465c193ef33942c0803121ba00365b0d0010365ad618d05852f9b40002025f168bed3d08001013135372e323336323133303535313438313535372e003037313036363738393235323339323337303933323631343435323232303300555764524161754a34344d6f585468342b534b64786c6f55462f6a4f35664b0032773153656844735065613774384d426d4f5a327a305751453472414b4649007746495159506f636a42735037394d4e4553432b4f67333938377977315938007662567a466f686c5a394548524765586236617436763074416e366e694964004743754666307834622b584b4b6769565265785563484f436931552b5a3251006672514c59653255516c6159766a483744734e36536f5678746a4b70505676007879574150314f3546666879383041737570474a706d6b34542f342f4b637800794237536a3262634c6e52394a48544163675964302f76735a70342f4f45700039615438476f66364144412f2f446f584876536548692b724e42425635704d0036394439305268633866732b534d664e6963354151437056423353317a697600474c31485a6b46586743785672667348482f58324a596b47306c6670344e5100c001a073d2121e9f5309a35ab1bc60b59b30daffa08f21951d1f9f00bb9bdd00584aca13a07024a95ac19432e37e8fa535facd15efa497260c3d93dfdde051005853a085344802f8b28308275009840337958982ece29422bf2a9fcaab9dc9006526097318f459ef74277042ffffffffc080a03c241fe4fd379ccf16c3e95d00a73696b82ec6856b328c3b1599b68608cd0a8c22a054f8d045d657a3fceb1f006417207a83d5a73a384929fd5d8ebaa43b717dfd864cf8ae8201ed010e93940080137510979822322193fc997d400d5a6c747bf718dca7b8a2e40149d3224400c7e43e36ef450b68550be51ecf341b9a3e6c33d24ea033317c8a873895144a00e264d0ab6c57d7a3c65f427c42cd9c8a379bade6fd13d702f8ea8308275083000ada580284057800ca82b36d0280b84439455d3ab0837e01f838f703e1a03a00b2bc2f5b413df4fb4bd4e53d27bb60acca4431614f365edb18df28a0ee08760080a0b5e913112e61ec51816086c851e7fec720c38577358b29c000eedb9c1100000e45a06f10399d08cfec2f5542bcbeefb53828b3744a9b461f6a94ea14db005ffd8ffe4ef9016f820e6e84037f333c83025f1894e690fb47eff7191fb15600d48204c7339a961a16c780b9010400000082999fd18cfecc74000a0066d8570043006020b3e684111f2667a46c65a08714dc8c3ac7842091a3d144771276fa006b75a3c8a10c10101b7c110c5f182a0b26d33e1a71ddc9000d1d4b60778a910095a5accfd9dafb7938ac6bd46e7b1aab35e83e6e5bb9c05990fa9aa958063c00a8df32d12cc49919a02c6f425ea67b72861bad13a622b9d5ffe13e822724ae007436ea52d0cdefd07f3af9026d1b8403ef14808309a12e1594c61dd8a6804d00a9ab58ed2483ce80b90260cd1f0dbf7358e5bd22d87b759e2afd4a777ded1d00371143f6b8ac53a4819ba3390000000164c001001f26476f31cd7ddb7064e0009d249009d4f757aadb5b816238e7655dc261b03e260402ee0873686172646500756d0353484100f3406120bc999a5b401aa653f0e2ab89e00ec6205ab06d8c00f8cf677f28e0fc93a06624e9e8409223f9b36409299718b2b49c26d5dca1060053513c70cae498cda02d14d1e0b383024f25638ce3c977670167803faf03c400d16b6e5ba1db8e012aafd77892f95b7bb9112e3c2cf862d21b82c62f1329c800127ea93682c30f7f972faea2aec2b4ca125e8670c929e2e5e7dc3e451a4099007ca4c98c8c202f0be8ba1c01a052231db851ab70c8932446fc4dca7267cb0f006ad8f513747b12135ca9d7630ecaa06197b9f9d1abc39344eda2b6eef3a72b00e0f1e193d6d663f1a7b8ec37b8f7032af901d47a3f928caff83473c82e2a6d007b5992c6f26abc679d667a12d7056006ab310e938035b55830248067b1c0fb0057b1a14c5c29c1f932206652772f1ae47170356932a797f1a7922dbc1518930004d7a40ac5aef976c93a87c4a01d3fdbabe69fb6181c49ca15d78aff78c04a006e6e1237151e831eac8ac803af6ca02f725ce97453d7275db71b07c09979dc00b90acca84c5c0f360e1d0663e403102bf86e82854f840496ed4082520894ea008d02cab8104d38277dc723842d8cb24f4ae79d860820d598415c805023945c00c7283d28e78dee3cdda070e6e02181f14bd5d1964539fa3c7dd4b969a053980003b9c4167a5fff37b77ae7c51bb09c2ca1a90e78bde85c884582f9401ca10200f902135edaec298305b3ec96e15cfc70537fcae48a0a64fcfc670c3c880d73000246d65ba41da3db6db55e489146eb25ca3634e5c001a06f07b953fa1286bb00fa1bdef74b33aab7b1c61c670afe2509df35044066fdc9b6a00262572d471700229d0bb5f9c7d2132cc583b1f3ae67ed46b0127e94437cc69426f901d43fb700c02e2dded68da04bf62630a2df3022244aac0dee2bb0c30421cb615ab788340069b51a90e189256def7c8a7c6385225190e6d7972c5ef8fcd1a384221a36c6003460b0391274153399f6caae350444540b36fe9246eb0dbeb156a89e386d3800ab7b2f341ffe993d7ebe66ebf620eb43a4ee185845afa061b26da8545d35c000abeb8dcfc23986eafedd06a5e7395db5ec1c8091ec4e77b0f904358201550400805603c40340db36333138b8441581d71de69b3ac0c16f9206d0087cb1a26200f9012226bd8f258a7df02833520e57885de1c477484d9d5544ea05bc1446de002126f1621b97ef9d0579fe7002e00c52616262792057616c6c65745334415900336d4a45344144687265524a6163666f71675665317046574a364d4e31357100704d67364d716f75770041c2b8e730fd7b0fca03494db18b03b10ba8762d8c0026e306d13235d4e2af0e1e7d6037165214bf9c31a2b4a9c41b72885ce3e9b800179c002bce02acd753a7daaa911b12395491540a8f90f757367a9c1624de2900e008caeb0db109b781e3f49dff6ee5a0405ea5f31a8c2f459c90da404f9aee00bef0f4856022403efcce1b6581bf128dfcf903cd3f0624ed03644666fc80f90049a166e9cdcea1585e6801f2336f9510a9c9dcc7fe37454eb0174a32de2de200606562ef57b26bd9b96f0932c75b47613d8412a8000000467a04fd46d1402f00e0e401010446d1402f0446d4aed30147ae01882f1fdd5e320e39b6baa8317e00c6f0171d1f4998000159725ade220101000102018000000bffc22142e51a71005eca9640481c14f3d38844a2268209515c8ef99018c9ec0c7e50a003d0d19700fd34b23cab28ee9444f872aca6029ed1e8da5be3c0cc6375c96b7aebf9022e0081c4035b980503030808844e6cabcd87f050d04876b08e9e986f97931c3ace00a8a835dcffa24576183a9e03e2a42cd6d87c67015a3718cea0300f2f143ea30041df0c3cf5a1972eb90580989f4afd7778022841706cd6dd9facf90175820100173bf0c494d6238ad2887166031567616d9a54b21eb70e4dfd865af3107a400000b901042f73d60a8064047a6c6f025a4c007121ae2683c30d94c3fcfe6d1d00dfb9a985aaa1cdacceb9f1fea311a53063f886a07a8976c96508448ad06ca200f9270223a3f341ed93cd977c0dcb191477407a0f14f8ac7002ca8494b9ca6100a6d5fa0c443f3c48ab1fbf0118964308d680b8446e553f038d7ea4c680759300a76206967cdfb48080835d5209f5a6da1bd61a325f0e3d66db2afb34f5beb300735da9c0775eca517e528ee970d950e17e66aea02e908e7fb42befda615d2f00fe6326df16eb076bef347587baf81940d39e8bffd3f8ad8197090a7894aaae00a1fb9f3de3f70e89f37b69ab11b47eb9ce6f80b844b52c05fe4824c6742b60008cb60784ceb99c968c429d317bdcde07c172264010d8d0e3762599d3c1a337000f968d509185a00d7bef80e8ed68edadf66888862293ba8df3962dbe6b0c1d00938ef510718a0809f8712502a43b949d683af7657b78a3e6b593e3faab62690035f769928609184e72a09b9ef5b18b5295b2dbca2c7ea17c4f8f97991933ea004c4beefaf7c0a28c843141a0083eb16559f440915afd7244c66469278f4258001a69e4478443a1deeeed546904f86c4b827b0c945e809a85aa182a9921edd1000a4163745bb3e36284870cf7a7d96e200c8083104ec49f0b3a0d0488390d1a008cc963530ac441bc0a1d8920073b64f059af97c44fe856a046abe6c271bcd900bf2569cb43e4f3a95db2566447e0e6131e81ab75e61549c094f902ed400cb700451c84e46413bb7749616c85104731347902034e5f8f6b545e32d5dfb85ffd00accff558f7fe716838d72ecf8383ec8508c545432e434aa8707bd8a77f9beb00b741892399b81519f004923e3279dfd528f49bc67b1807d0106238313531390066303034393233653332373964666435323866343962633637623138303764003031301b83af60f0bf671b4060452ae9df72ce47dba1cf2d0efc25ee459244002d387670a00b3502b87ac661adc022447b7dfc72cb36c0e01f361dba7a66f7003afebe09a845f9043481f78303c0970939c94538034a60aa7ae13de90fc3ce00135bf1691c107bacfbeabafa22500cb896b4820f48f6ba7950a249a6ed2ffd00395235616d443742587474534255546162714437724c483463314e47666263006a644e78586171583868737177669964edb7991331495c1128987597edf2750036d7169cc613f76841beeb4100d58f3b79032409790bfc9e76c8acf9d4b08400605275b806d1ba4fecb0afebdb83660fc4a0646c4b432bfb5451eb584c574100c78c52b954b265496087050842bf91b5f223f1a05111bdcdb42af3e4cb3fe3002c434f52f2b7f1c818f4c36c201757b329b9e3874f02f8b18308275022830f00341f8403d9f7af82c081943c1bca5a656e69edcd0d4e36bebb3fcdaca60cf100036a3dc001a02a9479e703473637bbcdedcaa16d1ff552d0dc075091e58533007fb89c90b9c6b9a01c5d1b984957e2061f122f2689cdefe20c7c46e9b8230500de3438aa3441f81b13098404e05250830909f257edd08627b03625d74fac0e002c6fb1d9750073de713a802f12c3548c4dc89fcb29eb0368d536208906bb6a00ea0a933b7186bbe29c9a6afed8e38d5bebf9a14534ab882973334aaa97093d006a094c8e59991317e3aee97ecbcccee284dd404948be3e550fc88accc791d300076a68b913f7d5b35e26e31da07c1363aeada2ea73e44e272bbae2c58dd48e005ab15cf5dc193cc28cf25f7e3322f9079582010b0515221ab3b02e2ce4eba1006094380b2836a01bb5496aebcd682ea9097d82db5ec40d59e1a1d5c32888c500b140917b296e82cf3a448f37a66377597848617a7478315942774a48656468004e45615243346e4d6f6d63365857687745686155414c70435a6839313663340035393165323665613134336138333563303966663230313635333465633439003138643434383664306365393563646339303334623661323864633235386500316565386333626334323331376439626536343962326139343635383234620061336638326639373062666338636238343230646530356433313664653632006261353831306435623931323162313932363730656361323335363530623100383231656137633361653036316562666362626536636339636233393661ec00759050e543e6bb96c40d68ffd0754a78b11e879a012edd5cb2cc47da335ae70026f23794539fc02d0195be23667d7a95fefb6652f427eccf3b18616fd700b40011799d5036de51257bfd6805615b8f463140ee3876e3509da2d28ffc9d29ad00643ba013c20c4369ed7a798846ef4b49a33c3842fe6c8d36e2ac9e9371162300b516099302f8918308275081be82ab1a94e6feca764b7548127672c189d30300eb956c3ba37280a4e95a644f0134da08c080a0b13225a3986339fc28b4733200c071614540a78943e6d777bac265c67dad3678b1a07a513d5df1629170974d009e3a3354b2389c620c2d438658ee044007bd347e95f8d3830815f1940b4d520029bb5201e277d3937ce1704227c96bbc5fc9a1b3528c5c2ce35887cc9adec2008ef3e30a754180411fe7fd4b84fe00552e100ba914c798c68a91a486075c0600f73ea47b90fe0dc6f2b451f8bbca3356797dfa1f4a828ff025fa8270bfd1d400d952e75079bb593da9107147bbf9b61b235d88ae320ac21c113150db810c5d00859d4bb0963c8f946d3b3751e4976165b38ec080a06305d04d115b9a71b77600668ed890fd9388a7601725022d2bb14de08a315caf46a05980582907d691db002a88fb132f26f88b993af648e461a104ce24064a0b9f2c98f9044f820eff840002bc0066830508a4940241fb446d6793866245b936f2c3418f818bdcd380b90003e492e7671815372c5f9ca3f378244833b218d8ab6df011ff2c132714711400878023310d2ab338aea005a00041b077a75e1d9337eb0d2cb4569541287dd900d2060a92b05c097c4ba297ead39609571badfa469d214af8bbd1b1ae0fd019007f8a5ab86f4eeb6b438357ab474fb4ad1b415d027e343cea667587c0199f000045c158e2baffa4feacd694468fdf24bb2dc4a47287e1ba5df137a2860a3a7b00fb968804f980faf7f0fdc6df7a30e6f5c2b05cd31b41be4f2fa917e0d9de7f00126ae14faabb30c75e70494739d8dc5022c6caf4825c812b3d54492f06cf5c000e3daedfe70531e9c767524cd5d200d25a26c9c02a0ba0aa1c41262e3be36700c0634eae8655a226369f2d8b1a9864d715a06d5cf88989e9b13790409e9412007fec48226aac309d6c6649a65085dc96b6d640223f8b98f167c4cf3c0c0af3003d82391430287338dc5c88d3fb0461f13e1b4a71f361f3b92e651b2ad66192009a648a05d9932805ff892f3196cdf53b1d5fd8095992aba29d3bf3136a8ffa00bbc6baf510fef7011232827b32b32ea6f1289e69432ef60e0ee47921bb435600a046b40ae4b4e73ab0aebd82a24638a7d4e323f7a3b4b9a2607cd0f6cea25900d3e83d075dd3943b7607203e7532884cb72fe78abb12b139d5e728d6b56bdd009f44040f7449e97ff8e1f3a9037140896729b54cfb44aa2409ef4cb211fc0500e1b9bc5e7cef524f1b83739380f3396746e1fc9643a0adb26fe69d6b76c8a70016a02bce01fd9212a2e4b54728ad7d4583d9b5a0e06e74457e646868faa62500c6e8cd2eea4cb4e602be97d5d39a5ce9d0a8bee1fcf02927cf44c1c581487700d1e141485248df4b0b29e62d7c41bcb350eb054a2d34e9524b2c025c15a02800df156ba0d2ff5f83a65916b9246659857cf30b5f80151b9699eddeba204a8f00f86f8241a3840347219a82520894cdf0fb143cf3d43cfe8972da079d007ae300f88f6543eba0256874c14b7037cead2071eb0ea012e03ba988c999c031621e007ee9047d721e31a0095bf97b26c4bba46fcea093e8a9b792a146c15243f7ec00f1501d5847fb9c3ba6818f82c9f794f301805be1df81102c957f6d4ce29d2b008c056b2a05d6330c6df1607fc001a0222eb98de430168fc49d052a79fea4f900fc1acad7f184299292240953db40a28aa013fcc13417664e9f0eb161704a46005556e219f43f1675611aab7abde0eb577161f86f82033324e08e14c4c007a0008500ffe99d80887762e57ee42542f074ca83a61a4311957f4dbb561c5426f2007ba07bd7d79bd772722901a7fe59a357bec2ea536f1213d304d83765e49e91000b42b202f902b501910597385c906ae29a0542520f6f089528f25974fd477100e2f8a6ad210114abe64df5aae02cd3121d71b587183c64006b2a3aaaca4af100823673839bf0ca54fdccc1481b4291f46af64b621fd1829ec37f31ba93d3c9001c8b7c0b80a0a18752b30ddf55e398fd5c554ae80812b6413e6aa1cbf8b823003a7d8b1c103dc2a00942d858a12603e41d776234a3a147126aae107430ef790080e73b09770b1720d0921ce87661fb80c3ae5861b525cf811726710f5daf560016c14d2e00c72dee06793b013b98522ddfce473ca01150994a34becde8668100975b5fbf2f4733e020279de3dfa58a789703cb69a521232e884812ed4623a700a7382b01a097b7522f1ce7fe82d239eabe7c3145473725daaa3b4de2312100004327b7563e1aa05d168c1d761129d5b620029942250237b9e4097b2b1d90ed006be63d3d4c02aff559028405563c26c691dcb701a0409569727a6463a8f84700773d68f71ed5aede61a8aa2fe963aaa0e17fc089cc98a058023d574ce4cc0300fa2fead200a89bda52d0392e65b8641b7894b965cb6e49ba02f902258402cf008e188402de3d6783044c95871ab51e84c66484b90224ac9650d820407184d400586e2e193d3bc3f749124e8043606f205e0112aaee66d85d040412210e8ac00080a04be2e5891eb0200a5251da5b3e811a9ced61033349de644f63bb0324fc0032e02ea078e3021ce77c933abbefaae19dc684734b92fe6371c831dd90b2c600b636b75ef9f902ad12546f7e7257963dcfc3a7885e911e47b76c05bb76b8f600704f7a033ded10a3070fdc7b1f867cf67f4b297063b594beef50e4e07ed42600284729b48e8315112817b082f210512754e9a48a2bff71300f2581c36c15cb0035c36c7ff6de2c6cf0722cc3b6ae9df8552de015b448bd495dd1ecdfbd29be009eac16242fd477c45cd81673439f369df7e02f42919cb0f0a58d2f8da89e9000e1aa0b360cbd906be60f22a00581e49ec4f1ec6f8db2cbb203fad572b2a6df007d361bceb84607b561cff33bad02f919f40a840da86157831154ed9480b9190084e020dc0b6380995d77ee73135fd2a8eaaca8e84be45389c2f51e010970ba0020774688bd79e9ae5cdc8cfaed05bec4712fd8e2c9c987766352a56caadc4f001e25cd6c75970fa768a3304e6417e490411a32170100a288dc3d7e83fea2040041f98166b15b6df001011a62229a5e353f4629d116ee666b2e654717b5241900006ab0f5529d40068008a00d601060121301045761880496cfa2a369ec67a9003c324a35e693fbeea11c059401056bf7933f8c7d3063579bdb0b90997e18a70070eae32e1ebb0801f453e5b07cdb9e59ecd8d3891afa9d9b9d6562653d5be70020cd17023b84102e2ae0da810f07da1eace7f044afd081f8583dbe9cd3005100a5270bb811649f8654220100240000800001043eece7036ac4e9007fff0a7e00848aca42d879ef06507fca0e7b33a0a63c0244021944006e13a2ae9fd9f40f008cc7d3b3944c57f3919c7fe30101010080000000648a6a1e85353c1f0bc78f00bbc245b3c93ef77b1dcc5b77d2a0a400800044008064d1660f990000c001a0000d39c190ac203f54ee8f3df1fd54d5bb04c24fe984b71045c3804f982aa4ed0025a066ee60ff58ebc04081065d445b260fa70595d923457361e0e27a1fd9d500895d0302f9043afe8302fffd8b68002ded4f5aeeeeda4a669ffe62917fc7a000c7f0485669eb7b5c30bc9f8b366c48248c4afd2f093defb5d4c5a3b8ec73e400b58b573554657a714438337547487665397943656d4d4d47644c6b67717353004476413442314b664245536a34575558792043382776ec771219468e8c1a7a000a7ceff491935a398ec4149cac4576281c09a6f5687415a65cb2221ebfafef00333e44a6dfa29100a6b7620c2fecebf594c080a0a831e4b99353edb1738a0c00fdd7e66248bda5a9508147ce445f94f388af861839a0365f2c87ae5ea31aa30008cdb40ba19aa4427e48a891428f21b26d1b361c0bef48f903ee81ef830b1e0028941502d025bfa624469892289d45c035299725172880b90384048060a41500feae5101ccba063cf401c26f4b2bece70380d6e769550084a0e4eb3c444940004be6908ddaafa4c66d4d7a19e5c33da847eeba099a64df2ab5bb8fc18c42bc00b7e0f787630064abc96bffa2f9bebf8461c3ce8323244f29de8d87a04af2e6006dbbe2b121647dbc3b12e4c5345c9f281c5a7ccff2a030ed098769d37e5c840003242ade82d33c94c001a073d89f158ac7bcb8032b4b0e9ede6592a86303e000ed85ed73df9b96150f24f121a0158850c9d8d14f5f45d621f65802de9f0962002b93df87242df0cc806a86e7bb2802f90202056664bd83021dab8080b901a70060806040526000805534801561001457600080fd5b5061018380610024600000396000f3fe10600436106100415760003560e01c806306661abd1461004657008063a87d942c14610064578063d09de08a14610082575b61004e61008c565b0060405161005b91906100cf80910390f35b61006c6100926100798a61009b56005b005b60005481565b60008054905090565b60016000808282546100ad919000610119565b92505081905550565b6000819050919050565b6100c9816100b600565b8252506020820190506100e460008301846100c0565b92915050565b7f004e487b71600052601160045260246000fd5b600061012482915061012f83920050828201905080821115610147576101466100ea565bfea2646970667358220012205360b992724ebaacba6001b291d4468e30f8ba8aeef277ecec6dead803003187d464736f6c63430008130033c001a0a350661e663384bfeb46823d792c00691bbc5c992e7708a9a04ab54a8ed33ade73a018f2939635d56c52bdee2175008979747bd02d57eb558e375f4d7e091f1121194ff8ac230162f922d473030f00116ddee9f6b43ac78ba379be63308bf8c5960a342c77140a4e09f1cfd1cd2f00d22dac3f316f2ca8c83a77a03a508835f4898f7ea5f37e9af739192a6b546300b9bf03d90ae5f1c83455db449d02f8ba13043bba946052c5c075212f013c85006bff015872914ed3492a86eecdfccda4bcb8442930daa401001d1c1cfcc00100a057941f2a1c243313fa237b132ce5abaae47f4971cbaa0a60d4403cb8aba50096d1a078c9d0dbb3b965846ff55478682be2b566c244bfb2e6293d7e74e188002d0b38eef86f8241a483061a80943a6115577fa9b76c6a41e371305efe74c30078e95ca34ae59664baf6fac8043d073554723feb3755e9c5a54c52a3a32a1c001c6b1f8606a01304c9456bf06c808f09e21fceac44eb04a9057086302ead1900e499fd7e386ebcf902ae81dc0cdee066550b4d2b161f711ded8ed718bc4a9d009dac15e1d4a91fac5e32f8e490355b2b306818319b1504616b5f9dcee86737003e1e6222d413cf22cfaaa77e8e9be944b72d2ebcf70fd7301832e42709f1030084dc447a42442f942fbcd37693b2f4254fee6e4cd70508e6235ac3a0321e5300f810e87428a386cdfea474f3b7ddebea3d79d949981492d7a7fb9cef80a075006184d574349316abca4fea0248aed78c9909edfc61ec51274441ddc832ab580072eb921e028c46c001a0b7ff28205e73b4f9c36458b9d8eaff17dd43cce598002da0e2541f50cc1ca47a55a0151a7edc5e5ecf764104d990c93ff866209e39004354f7e40f6d4c384e7d57a7d55dc0ad06830887a494a599ba9656cd5bb3c100d841c9866704bdeb724dfe52ac64a91f052f78283f4de042f79898170a47ab00356e8d0f659c818787a80d5e16041d1d6a1353d4907d750d8d611f71a43c2d00c5f83679f817dd880da1c31ab8f1528c74d1feb0b7ae6233996c9434e97808002f44ba926e057b2aedafe245976ff8cf6f86f7ff993f2e00ed269a526ad79300ccb671ef55a7af6e45f300d46201a05e0a26ab565aae76aaca11dd4755b72300ec3f1cc6af339307331b546cbad1409da07caca05e1527445f9f54a0410bca002857c9a475d43a43d54a17d4ccae7d729c9ff902ad410a41549413babb8c70005506fd71f7e9aff431b9af2e659fe927c9df7c9c7517317b084ad3cb83aee100e57476f73911481aefbcac9fac54998430371980e343547e6f1781a2aa1caa008a028d5603f75493cdb1b025207150c6c3cfd5c58e6990895db50c3dc4cedf00727a8fc8c60fa7dd8ccdad022999afd61dfda146e4c40f47de4eec15be8d1d00f4f9f26655ac34705d1ff6c516c178ae44ecb52a5191441976cce090a06c5000cf4c42ff35eeefed5a183518517f1d50a6fb1eb3ecdf8a138f72bf14c44319000d4acc948499a8bd1051ed3011cb79295d7286d5c9fe8af91ba2fcf15431a4009befaca9ab488262327ca7acce571887835c3109d87deafddd3e59ea9f8c6f0023235a236b605fcf70290b81f02d37dc7ce1cac38f6be2d111755cbbe336cd0008f42d0d6b9fe1b6e84c89d0aba22a702ee7f10ec881d3bdef9a67f4c6a507000ffd9a4f7feec3a0d035c4b317ea133715ad64218c0cc29f2b0eeb823826ce00e260f4f0e6f561ca1ea0267b9551b29c1ed0db568a5eacb79647469f7404510050de5eacb197e2dba842063a8402e34f378402f265bb01a0581d85d14408c3004e22a3c4558e46cca26d1f0b3624900f737d4052b1557c6bd9a005c41fb117001c3bd24f1f6ad7b40db09168920fd6c1b247142647687947e59ffef9018f82003e9484041cdb4012fb84bae502ad01eeaea43bba2398a64a3f08b16a94d74f0043044b66d85d09a02d535ee154851a999f524b6c09990eae26bd12858ce7000024f892d33fd8094da040411375096365c45eb8ab8dc903176072838039673c00b29909473d25e15a7d10f86b81e682f02694b8af4fa4feabaa02a09d146e4f00871ea4a0a41c048084a66f42c0f898d888dcc5fd2f0eef4e9de4ee279e13c900d2ff864c5773bc47f227873d3ad2a0120080fed3b66fd9f41b5a19eed9132500af0b61957501d369d150aa9e262cdbd8f90bd45b0fb5c56403e59bca53f0f100529c5f605f03fcf0de3af6e93ab55a78a5ed01db6c3be3af332b5abd3f00000000044c23cf20419374e396d003e89c4255bc00af4b530403e49c670db696f8003131303636333131363036303036313239353935323035343437313838353200373233333930373737343733323363692f544f7a7275587349665677414d38007674577732434f746e3857506e58426f6e62544b7942467375306c71424839006d4865434b50614f36506974394274736e322f7a58646a505433704846594d00715242684a4c41486165345a586371353066744555632b526b3648457544580042657a4c4c72572f59374847357a78764561436550324f38577a435732613100346657356b326b48684d5038574a795841354a4d3367305375644c5878464d0071736f724838303334787831647a74506a79355873717552447a637a3231450034676e4e76477551395849466f38512b5a517549584b716e346c2f565376540059574b42647432307a744932306566706e594d47326b482b396b2b6a30774e003455337459376d66516f5a3656344164354338487959347344642b75566c72004469672f7463554a794959496a625a313167673044416a342f4953637667500068347930734e66564a675a6c4277ca9a4c1450078bbbb997f08c50f38134c400498e751b89204e0e6d30e0207d786aa07b60c053b38a989c54e92805a37d8700de728be84507a8b1c1244c467c1e597421f901d682011d01eaf401028507fd0069c52843bd00b322d6a586962cf12c6e11ebf08b496c9ddbe5920efb795c62002a946d0177b1463b6160cbae82dff6dbbaf64f891e7c29e6ea93762595811b00c4a09e469ce153839707afd6cbee2618d246ab1d4dcf01609901f6e5f104b500d025fba04f324ce75de1df8f0f6dd00612a759e1db9ef945d1e8c136b8047e00402d4da90602f9079a830827501011754f9416db23c4b99bbc9a6bf55df7a70087c9aefd26118587046e93744e8400b9072448a15e6f001b06eb8588edb720005915f2f02ab4c1a74833a5534f60acbce98e09814ff4101aa66faf571100a20037eb7664865a2451b327f7351ec5123733935a86893de397279e0204608ae600ee946bf1c936584cacc969bf7e9d0b274631c818df7e45c246051b36434001005912043d777b42e879035d06c0d29976b446475500e00001100c042772cb23002e3ad6f7290eceae3bfcb6a77a201b83db8927fb0eaf109f7194cb1627ec5600e6b6335382aaab0de20d12757ddbd11759dbc4af99bafa1262e86cde7600e400f5ea3c8ce344c6ba0d002106fcd688138d386371321979153d887701a2758000c75efe5009c73bc6d043bf189b69e6fbc23ae667e973473ea1a5e65e97b6d20066699266699284666990dc66d859f40466e0397366e0398466e037674f00f40024620f482734b3806102678e4b8bb68baafb1adc1ec29e524bcd69c85f15b900151c56a42e570100000012c080a095d22a6a8fb5ba73d9673ff7c331aec41000e4327559a376defbf2b590b834e999a0770d7494f252d0051ee1d1bf2c19120016aa99422b4a62fb4ba693903f3b6903e11e0512b30c4c656f6e74796e653800343330ba969ddd7cdad5ad271b05b22215671b84f8eb71448151c78fd69eba00b78a1906606378e6469886f66e2e8c7eeb4fb372d87f8935754d3fb747f8b3004811d5b5abea01a0ce4953f75dc3093d3f71ae7cd87555a1de9539f0b4f05a00827f0612b8e7fdbdaca007deec93994872296749a412c8e85c6ccda95ce49300025405fae0a5a3ab8c507002f902152fa1f6a40140000414c10163f38503cd00d416c080a0704a1077996bdaea632c81c6fcea8f110d618d1c4040d1d815d700c807377fb329a069f683ea72ff7d36d46fb3c4c4211cf79c0878c448686c5d00cbcb8420c532c3da02f9080414c57408441cc0a517cb48d8d55279f320ae0f00d76dc89673e57876573d5988ad0f805393e21257a0aa0ebc65f89f7b8e647400a1b44efdf675cbcc671c8c4da59d30498bb1fc240580c10aaf66d7eb1aa12900d0c7d19ba94a5887be814203e0e0e0101507b36fce56d7bf16b45b896fecd9005da28a70e39758a74f4c454dc92899762fe9b55d467ba6b3d8bbf634349a23002a96bd472abb0f8ef43a5b66d5f4f15c9bd3fc0560adceca85290327b409b3003e9b0e2e8d6b0019d9a908f87647e4814ffdad51ada41334426866a48523eb00f44a103a98483d517a2d68bfbbc60ca668bee117510f73fd14a26eb5524e9d002fdb2a227ce9fa883c13d7821fcfb1b168a7ff186e2300c1677758be871af400b017b6e1b5715e5f3de80c708bef0ea85339c9dbcb993bad5e7d9f201366d70031a7eecf0357319dd4e6c85a36e06bbb192f4f5dec4bec0b4966d85a95674f00010146128f834a94e598cec6ccb5790b24b5781f96f4e6d8740a8067542e64006a53f49399ede5dfaba03bd81796bd0022cc66a185a682b9ad49f0ddfe88c000394fc9d2e73e44969efa781c018a012818964e00618c6dbf3a2034ed7225fe00b7372077013b6b325b7c04e379076d7c6a896d4f00ff3ae8a3f7260366ceff00231e0163631a788dba848a2a90acbbce4533ec52580bdc3f6f6df67f14e3a100e1ba10715259e71cc080a0361a43a787d76392161cf1b3b58f7bf70163ac1800dd78cc40d9540db35da67f30a07029927daf9de5b9a72fb4a7a872a155d87e009a9087e8311feb5ae3a64ec21a4802f876018b2a8398968085012d5cd92b820075309409dcae886c35e45f2545c0087725e36e18b032eb43ea80c080a0870a006892ee2343db96211dee86d5944c7675a41d5205412f47b1087f986b4e47a0004e6570d414c8945a1ff9a0f34b2244c226bb9479e57f5779583ff7209d574500e9f8ac5afdb41773d5742bc32ac83d2ce26fab82009edd8a1123dced32ffcd000d7cce09cfa028e62c6ebf74777e2475a82cbcbada8807914ced60a40d858f005e2ebe565258f602f8bb4a840e085e548306758994ec53c830f4444a8a5645005c6836b5d2aa794289aa880134795798d97e38b844f2b9fd274c3795dadfeb00f562932992bf241ae087e0a98cc001a0a3dd08b7b4673ca4bb0267ab0e72c000a7cfb4f1586d6ae0ebfb669a55a5cdd451a00563ed9d612d9013f5bcc3af2400862872baecf74ff91de98c01da0da1172687ff02f9017a830827501f84043600a06a833bf15409536f6c73746963652005534c535443c080a0662bf602a9cf0058ef721885ba48ccfe3008a86489d8a3d7bcf28502754a1b9e43a02c6a1fbe00526b32c4d684f524b912fcea55eac405abac2797c4d29d16e3b2db97f9062f008201ee09d33705c4018b1751a6f4ec773faf8e1a24ed0c3b271e538c00240400d9cddf7b7a913188716005827645aad112faf678ee96dbb8a56b2c0c7be204008daa9b5527982c29f48062b34d5857df6092665eb6058de53939612413ff4b0009114e042403b87e5f01879566d86801a0e0604cd5e737d1ad509573f692440065168e54417f013e802710d0e98cf05aa0f5f9c540f4d9d13b87a7edc53f97005304faf9bf55315993f6a51acae2d1b4be187c2ca5b2ddbe5fd9c8f814f4780065c49ea0207053eef7e4e36674c6455ef1b06b23fdcb223fd878119ff3dcff00d4ad666df402f90335830827501b026c3d87b902c01fd8010c02008955c9a800197b97349cfb7dd7204cc703ff2802cb475f96df2ad6f09684c5ab0000ab3100f44ed09ad4410ab17fad2e60fa819e38a35ce7080000066163726f7373246800bf261b3966d859f380000000d00dfeeddeadbeef8932eb23bad9bddb5cf8140026f78279a53c6c3b71c080a0815bf900efb7e7d698431461dc621dd3406024003361fb65d00b5d78385a9ac1349f51354d10df8e8bbb0780fb42074e15eaf6004587c55b70e9a29fac1866919f1c02f90119ea82fa7194e0b5d1a12530fe5100139da848a6c909f29535255587013e52b9abe000b8a44ffced5401c001a0fd0011801ad6174d818b8e8001c3a987245c82cf14fb6c90eeccf24445a5c2ae8500a077f8deb9685e92dbf813c47ac1865ae5c45346b965b851043e963ee9996900f630f902ad5d09cf08949c8a1c5b993baf52e9dd920181767b67bbd4d3a64e0063a269e714a72c3db820c2694a5749b39dd9f355ee35c22145d97792ad77f500006bb15b4be285748e6e135d474cddd7ad74631ed7c5e20d23bab9bbe7e9f200eaeac33109da74dabf70b0372641318b55e44b752fbee017262ee5895e6228001e5e2f22d0216d10d1bf5e26b97c832c04c06cad34dce23c701bedc3555a5c00de2260ede3e0f3b1bb924a1fd4305f03b85c111714e4e2c60ce00165480bf000cca005816ce12f5666a31fbe3215f344f8d6b7d58fa0cf8a3bd62af3f5b4b9001b243e52474d0607302c7025e083ad7faf3b2351e9bbc5da2f7aa7d2003adf00c0819293b3471ad668688a3a0e448e6049eb1d32e6fc184127e98d11922d7f0019a3a8ce2acbb36817951c01a03c4d171dd00f16bd9482e6dc984438fc0229002d8ddf63d4b565fa9c3d07a3ca1ea06fa09c22312137a949b2f51d228608a900bbce530b5add7bb08b49a1c01350e1a85a0284057ca158b3a2894045f05aa800146032644329fba079b80bce02776f2e24fc9a3ee38a58e7c2c8e3dba04a5200eb68d9f88f14d3923415c8c25e6f163225804eda14826ec37d36c22cb10bf900052f8206c78402be50ad8305e77794778c974568e376146dbc64ff12ad55b200d1c4133f80b904c4131ea36a3f769c3666342f642b0fb3de045ea57b2709cc006b2d6969002c80e6a4b102d2e400bd59fdcb38b435a6e6ff7af96cfc5616b2002fd3d2c2a3359f836bd07eb36caa2d5b1344afa45e9527db397ab0b6480bdb0072fca217c80d06b1e594c46bda5c4c735a63665909055b72ff5ef3bfcfaa0e00d00172c09bd1c979f576959852b12b0f55465ec264b29698e927f5b04d3b5000e5461ed86c9518e0fe733bd725cb3d9593e11c63b9270f609fc94570588d5f008ff4c9ace1f07fb876de921035bac505ff3a7eaa60740061e470bbce64079e0082c5b72d680d057fc3814fc61aba26a004ac5e914d1b717ccd59c2a9fc365b008994c930b1d6bc9031614288dbe0fac7bcd6e94edf38476912426b84b0919a0060d2adc46330e3990df6e2f207902eaa1b46917419736daa1bd43fcc22d88d00f81393815cf5ecfe3790d33505e5d84b6b1f6d9a6356d08e4dc47e9b68062e001047b8c42e35acef0a057ce0c3998ce60d1792a09ec648a175d5b26ab2762f00d793a7d273cd2abd737e8f33cf5bd59de98e97d7c6de9bac0425ab1fa024000085739ad6949120ef885ddd0bea34471f56b67b473328a249d7105a5f14640200f8f2df8276f69480b88487517ca06568773a247657e7b89bba465014cf857000209366eacc19c001a0e68bfad2b9477dc2927aac1801fd47a42c1d752107de0053d6ed3698cbf8ccfffca0368fb32599db7026cb7c508a22b4dabf33741982000ef395a396b63909ba0c23a4b608dad51c5cddd195c6464def12f69d6082d70019ac08856209c5848105989daca1e0b47b36363d0c0228f0215a806601dde20075e6f83ddc994d3d16e12777d02005fa2885fe9acb55c3316a3895d27437a3002a449e9fe11613af6e38449c604a6bf408bc6896c3438c69ca2421846ea42100eda50d6ed679ed1cc3eda0431880a4e0e993aeddf924ecc2e3948369e8bd4f00779798836488bbbbdbbc135302f90c1c81d3830c8736948803782dace9d9000000b90ba47cf7bd842023741d1f23cfcaaaef7c48d50d18ef7380f6aa21fb94001efc0ea148c701d1a94a04600b0b60020902a0e0010101010102408005a001000205802044295f843300e4f4e9ba158002023f530420012436fdf36300a00300e4cf807e351b56720b17a59094179e7ed9dd372720000124fe51293d80020000e4707ea9bd3f70c62c8b8e801124a4aa81ce07b637a3e83cb919000064c08000a0d79af499d05fe977be32c47b7c3119eac187780b92a45fe519ddedb0087f00a4d0a05c6dbb4c8f485b9e78ec10459ea67a1f67ba3ede185a4fff1f5ee7f400f912ac20f8ae82ac66853b9b15a2bd73b86f4b738a5504730245fc65776b6c00e120bdfa2bf31232068491b2c9a07172d3cdf3e676c5eb5de7c6b8928ae56200298aed8478b30ef53a1cb47aaf70f1f902cd3184057ca15a8303b4ac64070100933c86de0de79cf700070f23e9225a9e1452b3bc70087599b22086009bb6c10079b7f47b3742d8fae7675b26b9fe9e1b08d8fe9c87bf0f603bb7da56e5eb4a000d5cb33a2579e410108ec03a62fa617e684a07b4a820b93da248a0229d07b900e2fa63d07b7b61feae745067d0ea5dd5522bf663ac4f91548abc4fb4f902ad003197eb670c6efbd5c6b468b3a02597ae99707e84db8037c9e2cefd94d5217300a8d471c01865c4342a7310f92aad5ee27c16347b10f6612b9c7da550184535003285134914c14f3d62f976b0e5212d6d93a718f616629bbb9ce2106dc9263d000c99ba1e8dc7d3a01e18ae540b6df1a71bcd5d264b57819a85095c0b272fe700aaaca3cd9f3669ea8a2b33d91116e0370970444b0281ab117e161febfcdddc0044abe81308dd6b2e0111a2d113101d48f33e167ff503e6fedcd7def90dea0e0082f5b54d0128cfd26ba030d885d0ea77398f8dfe7a01fe74a2dd5db0fbf6b800a019b5689ac73547d31a2df9011312841a1c391e8305bb60b8a449456f5773004b4955624d8e7e48eab727b39108be2a68c9df242e0d6213c88f7ca6c01f4700b6caf7341ee9a01424e6161c4851552f40c863813fb70a0eba45622e1db51800df8c7c0a0bd98063f9020f8201e00747db20ff5826aa010844bd715a4ae40300b35484e42a7047e294c26872d9dba67dd44c728c23e01eb9829d5abcb5c6d100e283e026b80d5ff6ff98f1f1715a4dfe6e1584df00be9b3381208ba06e42a600865b26eb5bae181128a77d3621eefc1363b35b6cc0ac07b2f359f1dee1f9010013819876a9ecae5e7a3d6017c69a57503912331d740284f741e6abeb571e8200aa9430cca04e04796dc3315e3620894b200dfc5462742e2a75d8a84ee1c8b100841ef7b823f7280df05d80b90b64164e67910360a006e06053042a106ad224000200a06080a01e6c439ee129ad14af4ee96acf6b3a7e952a6589955d6b0fa9003263a17c33960ba0788474857155880bc9ddaa0c13930888c3d44220a64e990044b68ad16ec4b367cc180a7d1b5c887faa7e82d46cf8a7143a0a636751d1a90008a3400cc03d3ff2d15f45c77f771a3f48499071fc2fc30bf5e82f5aa9c972009f6307bf38e4fb9c2a56c09902d4b5c196a4b08ce29f2e4449cb471060900200a0b941dfe571c1fc443d1f92e82688cc793a1a96816c9eb287a1b7eec267b8000e203c70d563a02ba39414e3a9129b13908af7ea5464d5fcd29f586b0ad34d005e4df47aa866fb65f9018f829538840391027a40728f5b8e4fc754e6b703d7000239549afb7314397e9bc245000108fe1747d4c98fd60ffff5433e2b3d821100706e6102aa945cbec91c2e66d81f04245f1d0aec1f83ac8ae733d7814e6b5a00c2e7ab2b51f985449b9380a07673f80430b0dbaf2a46eff37b70e4164fc9cf00937e8dc14061531f5671ccff5b02f870829f80c080a09327be32d8590ff62f00a430cd80be89181b9e6982f713eaf03dd59a65abfc4c53a0030f09f6395f8500c415ab6b7b515d4571f1256ed65bf35c21723f609d33d78fed02f902d483080027505d02afbec6dbab2f79ab29d85e390778bdbe27179bd94a83b29ea34231009284d75f0202267fb03489702fcb00c001a01f6d8545876fe5344f791ac1dd00482b4f8709bb28d24bd19066610736a33c8b7ca03fe0a027f05a03003eafc700fda186a2f02cf5b707cdbdbab7707408a5df26609bf8948201470599e5946c00a76a91312fa2d931e9926ded99ff18524e13e88704a6d3e815eb17a40c8a3b004af3eab2365c8689d7d429e9cf03c78b29f07907b188b04b263e9f9be96b0c001909d330daad82395a414bc72dd53f67405965fa8089a0395183f76c2cf232001916f165e011d7a9f6a530fcd490bbf05f8e90da814bd24302f87290b88289003d84038948bf8311c20294471819fafe0c6bc919ae1ff4e7dbe67371c4b4670080a04f83bc8f47bb1d39ffd683e64cc1c49639384b18bbb7e2171e18d65a50009ebe1aa023b45a98d16fe66c3de99f275b2420d8a4cf906177ebd485f4d536007dbf65fa33b70ae56c949eb3d47ad536c2c430a1ef05cac046b7e989a8494f0018f23feac49fb2fc61419cc26a3771b0736bbb86f5132f043adad26bda58b00007a130a7a7252b70dc8b7a9f5fc1d6752e137220b8e5827cf9d16c12bd357e00f1be97cf0f4997516021f280a59c0df884c5b8a15b529e534092bff0d49f80004f1f3008423a137f4a1b3531d9f660b6a6a0aea8bdde3b44ba559c9b358fc00001a01332aca753cd86dedb402f6682e4cad4f6a435f166af1eadc8c86c2afe00b59ecba03da6a345dfdecc566b974beacb77bfb30cf7ab3bb4a266d414a66700b9ef02131df902af8204eb0e6934f08aaf0776de12547d17100e3bad103e08008d68fded17368a0a4cb7e626c59b30396a6514113171d81adcd8d128f7b59300738282ecfca6cdea4ccfc502c63fcaffc6ef69f677a2bba38b65725ad247cc004edc45519edbb9cd7ec2a2261aea5b0251cf2394e5345c95df615304a0761000e3bd8570b2d66d863ef3c11092b5bc99441e700c1a7c4a92765079a0112af1009322382b30755dfb9681b0cc75f3fd3b3139d13c74df61022c05e9a802f86e008241a584035d9632825208c3a0d2b1ac51ada2b80a5d870d038e32c4c54baa00d285114ef9ef60b80ee02a544771a04b5a87d862f2e63dc456642f8449ddfc004f7a2b29e900119c7e7c100d3bdb7133ac38b8a0b11229a93e62fa2a9d6c13004e3a5d76260ea6d529ae9ebff4470c7c4bdbeef945e72f0dae3bf35a2651c800406b923dc655230076df264c4a3abdd51b4c1e1d900be19ecf4bbf921c3a69001b8b168afb6e18440154eb19b46f44c3dcfe3db5d55b17e96107bd9c833f3b003d16539f4318a675783c3e5aa8caf651421c48a64853e0b83af1fc12daf4fe0064a3956c82f5d3ab57654950eabb96ca0bdd1c3e308335970aac99074499280076270b22e1309108e889c27294c62e096b2b406a08e73c3b5b4dc748b218ae009b375f0d41ebb5a0dfc312f09ead0120de37344fe1a4dc270a3041b081532b007f38614a31e1cd8e2bda43a1b8924ccd28af97ce88a487f6d412a48d01e88c001388ed88b419fa246ca928aef8cd722067886f3f17efcb16605beab99cd3cf002e62fd534d4a74cca5c92e89967072b9f6c610dbaa0ad7e484e36f7378bad100049d9463e96368ca9b641807f05bdb7c9a0986c58e960fa68c6970f01bb629009b07f51e60c3414060afd9cbf2cb3060e5353699531cce4d264b82fe715ba000142c3140062b462bebb66e9a59e4fd8697db150bef0cb75460080f2a69f86000c0f8ae82ac6702000002a303fe4b1b2756e547b3581795c26bdfe0c80fb53b006c04765b32a863bc196a1bbfd2cdbb763b399aa07509b20d463840d500bd050075c46699a57cd4e7d9fc536d7aa3fb3ff87511141d328403d4008e830850a2001b864fa94eccc50a8ae0e6548f44614e8b64c877a823a0c933f821233eb268002d9e6d03dceb5f56561d6a1eacd19c7b979e64fd9e7d9806095069fe1555870061ac4fc76cd7f4a01d01eee6a50552962ecc589f1bead3f7c080a059745092000dda0d1cde9821c9906968d8147d98d08730a7dc887d89539b6164b4a07a4000dba67b9fa9cca567f73896fade41a96686b167922c16b981c9a1028241800200f90459e783c332d88405282bee85dd2b093ea221b732752058af61598d663600272280b903a4c98075398000ccf17c9103d9a9bc748a16cd6b95006f00001b00850600040207080901060300600a02fdcc02fdd1d9b802fdd3cde0b9b3f9530030fed170fe32949f7aaff594f6f00000000004c54d345772dd566af136b6fb0007a8f2903f32f0f4a819f0a19477aa81226dce9a77659282271840da28c31c0079ed288e2fab3ba14b339aa834a5b3c0437740a0542286b9170cda962b2cca003861f85b27985d6b75fbacc8ebbb3bdb55db2679be9b98f04ebebf64c2565f008db2dd99d8488ef6dd181aae2df7c3f60e00f20d19850463823c9752a8ffdb0030abe2c9bc808284579c9937f339881f596490a6b1edde7b59cc91d4a0632300bf9632a058ede2734e6ae29d573c455a2de2f4290b6c81311d33765d88b57b00c219c2953ffd7cc0ad70ccae7c2b10ac8fcbe8cb4469f67fb35c7ea7880983005715b3278e5a2bd48d7b13c6d818b16614a317900aa1a7ad84ec81c001a0e3008d0ce17ac0b7c121468739f4fc660c17dbbb8699d31a7d99a61b195552143f00a01b75759e24fbc8ec7f5145ad53edc0b39882950d09a36cd8cf96e6de6d3700f64e02f90313830827503e03acdd02a4353766c69d73aa6176fd4a35e040c00001021de229b5033ebe30ed450b8066d8899200000041027ce3dd86f1d3bbf4005586bd3ee5100368e80c3431d24874a37b5f0a1f58f97359bdf42d3a709097006bc7f97129f8a1219c3ec3500e15cecd712fb0f204bd4a1e1c00c001a0951400e86c24a8678a75a334b3e117987239970bb5c98380f826b8f87982c2aa79a00067027ad1a064408d50459f47233fcd900b3a8e09196b7afe0ce9bbc05b6bd6000902f901108403048bf2830685810444327ab4539757a563ce6b85b50988f5005516fb23e860e6c98ce33a3a97a3a9b3db744b755a5aa77f599d1a09c13c0e008fc8909c1dda4ebd3355ddf8247d393a6e61bb5b3110156f967c5f3b853c5c00098bb4d5b1caa889879b7d472e3127f95d1d841b7a3ff2d3ff5aeac27c42f50049aedace9c9f1edb0a96a07cb966d3af35d54860b31819624ce8788ad86da5007a4378833a91e1137c766ab402f87757f2eadbe83613fcfc53c29688f9a51700017cbaa60af4e9d96d2dc3781b2fb85d0f0575a06de67d3b6f3efee4eedbe8005f3e4d159584d9ec6fc9ebfc3a95c310af73ed76c5ec2259cdd8009c519e0f003e8030aef81bc7c3dfbbf3b3e55c866f24a7f795b745500f5508d44ca483d300928d332e1838157d68fb356f7e326d61ad16ab1ebe7e66b97e571a242b655100e9e252f7dcc4b7cabdc6359012ab0943b96340ab2dc09344120cce7ca0141100147700360535867240e42963e6822fb2be1d38bd7a6334184a198d37c663f8008d8204ed0100a7d28558e89e6decc4ae45f3eccb4149625bb64a09ec76056b00b630129585d208b1a0386bf7b1bd45eebd9109f0face27183f35eabebfb54600b2906eea39af67bef888f870830cda088403048bf1827b0c94508cde24f5a30001d091bb2ce648f50a4e5b41fd22870a8a78850c700680731afb552735d1750091a6d9c6339568bdc7946c075e41d90f70bcc8cd968dc424a02a61a7767946009dd8f1f5089593c393bf916d7e7710369510a63c94d29e3357a82c5a4c258a006c7a6a6816ec6a71ff2187d20178781dffcb9e57d40a4b608b4c80dcea57f2006b9575128b1927aa6b95cd4d36ee2fb39a7d5ab39997a5a276e9a05f992dd50048593341c9fb54d73387090599fc86d5c194f92074b41e4e815b7b35f88d820004ee01639e94ac1f9fadc33cc0799cf7e3051e5f6b28c98966ee80a4e78b90000134da08995341eca41d462a95ac4935a95c02540d47b66ca41d95c3a5d90c00f251076713a03e9dd4fce731c8a627d77d6b09d76d1c45a649bf83f481e44200bf628cb96f8b5e0a066c879465ab4b5f30aef8b29858ea2cbd6b0d0e6801020006ca9a242234d932f87919b970835a7b88784f59d17392d44813c224b4517000b6251247a21a78c4644a2ab6521b3af80eec4fa4aa6674e74352a2b6f6f0ac001960afc2039b24b1c153e195ff198ba529638cc194097a1947ff789da4968600c6cc38998f76f78a12a5939082c080a006453938a0ee72823f450f3646a60b007cb707b64a3bb7b98f5fdc6881188da2bca034e0bbcde0122e7018f71e3db500c0509c2dfada712cf5029a714c10c3170b62188193c3543a8252080007736e002f9aa5630b8c812e1f3fc9880164826dd83e674280c001a0f692a1e2e98e7a00695efc031afbbe133d9ec64fa5f0d9303b9ac7820375bdd4d5a017abb490ec00528789114f0b3be1fdd7a34ba08d76ea07ec2034272de9e98f3cff02f9010c000302e494dc2f8a6fe6c03975378bab2ae12b5a9d766d22b6875959cab019e00000b90124f648253d204e8f91a0e2860e55f12cbb7655bd874ad645369ffab300373148055930f24707eb1718ed9c76a3b60503c080a0d30aad763323a246e400da88500edde8a210ee41fa7fb2a955a9317dd06a779fbaa01960470a4719ec0026e6c0ead49891330f8388b0e98b65c76ab52ef0943a879a86f87101647994006e55472109e6abe4054a8e8b8d9edffcb31032c586a758d6a380758254578e00c8ee13f6fcb8288ad0cb6ea3afece52d2cc38c54b1f48e95179359a07f4a490082a0a5cd18768cf624ad1dc0c248e0117ca52200b408056b41715ab1b902f80099830827502184041d79048302383594ae1c50352bc794b8d4838360ba525f00b3d0db4ede870221b262dd8000a4a0712d6801c001a01b2c40168b6d68356b00f3415b01afd4368688530e8ec00628e5f7ab50cddad6a5a06d12629d684c080081c3cb294f6ec35d318e55925b4efb5ecc68c969e96c55daf0110c4cb5943d0052d95d58fcb53814ea37d580601d2af2b4cc981b64b08f03e17eac9e79d34c009cce4339e670bcc9d89d953c533715e057a08ed8663b3d6cdc9d53f8d7d7c800b98ca5de9aa0bd2217ca5163a3ee26f010365a8321d0381c031baa5995d0cc0052386508050ac947780815c3af1c56abb73ce0c13ccee81b59479a5d0177ea00b997e02bc54a98f48b7858357030dab2f22f701c3b1317c1383dc466295e12009106ac727f58c313d635b56311b27482a5778e262681a00ad8937454b603a700684d9c882984ebbf66e21d080d354e2727b97bba15a07925f9038d21c72dda00198ccc3944b064a97ab5127aeede3b7f2ce87ada6482cb6de572d37238c3210007d718b4a995684fd5baa11a55114460422b7d1e7b3062352fe6af0f9da2320047c27196294b674f9854f4dffa7444d5e0f009546255e1496924e25b86f32000d1fc78735d3b63e5369975ac028ce261f4211593944c6926211ac4862ef2ec000da32372bfd0a983eb97e94174a61ba7094bbd1ccbfc15e455a0274db45b4a004ca1350f282b5e7f4702a8aeb6f4303ed71ffdeeb8c4807516966a8207710000406d41ddbf93743316c8d4540659568133aac95c4dd8d980a053f26453643500d5fc79e86020159d28384fbd5f1bc3b7a2a20ee8027dab765cdf13024f1336003fcd5bdac8aad0587255f298724c9f70bf5bcd204dac61f27e75e775214f1b00234fccfea2a647a61dea8dbcfeddd46c03e035b920f57adb936bebe43b9c26006347b60053ad1f2eeba752c8b4073496fa674566581b0d404b93f2ce32d28700eb2d333718225d3f6a837205fbe6a83cb6f5fe76fd30b1a0035dff7c93d9d800d7929eb526e7e256535260ef4fa828c23377657308b3cf6493f902ae818683000b5f1d1cf7592c9954e838f72e8690c1072925e9c503d3a8b7eed26d3c03f1006fd2601c172cc41acca60277f1dd38d65be8ac57ee5ea516697b81201a797a00207241cea61fc54c19a100a3d0b0ff17bb6ac98f26075698489399c4a0ded80034487bd3f14fd608812006b6c54ce9df233f7c2f7e1d2662b280f3265b05a0000f7f24255c31e2c05adb10fcea31c9f184a1516a32e668c9a08facb4fd1dec009f2b4c5e0e01a04a1a1250efd02d214bd6c54cd60d134538c3ca52f9ceaa78006354af1ea8c8a00ea02ac8f3acce2e89ccb79e04534ba6493d2cd921870b1200325ef2783a845270cb8c2ddce61ce2dd5a8167b6d074882abe689f9986eedd005dcceb187d1d0ba5bb31471bd2f8bba00f2f97b1720c741b8501ec90f273b300f2d6de60e2915c3ab5f46d7cfdd7afd28ff90a148307702d94f02bbc9de6e40043efdf3fc41851529c2c3b9e5e0c09a421c69a19125ec24008c48cc190b7ed009fa1b797c3d7c4c894d613de147ab70193125fa5f23254ae00947e44b7fd0300f50b93b9acfed59f9620600360042400000080a3d710c52038b08b1433981a008f8abc436f443f14b0903ff0d1b37008d4ec3e82a050c66cff0e22c27a0ee0004873d4f9526882c97e8c1eda99575e860655914249922e9533ddc4a045939d00e98be93451cdc3513ff6b9f12094683c0a376c5cddb98636aea5cc62c6a01c00cf61a5bb38e99c2a1392714fc981b5eb3ba9fe2671d44d5ffb82208eb74957003984037b95a1a663c287b2f374878c07b7ac55c1bc927669425af41766d8030030cb453c623a80000020e6b4d766d85ac90153867bc1d0ac45d4b5e5d2b78f00cb299c6def2f0ceedb7ab13f23a8fd4858a7422da0099b1798b831f2d85a0800ee9a2aa3d13b13e302f3000611ee22c529ae8896d8e0e082a78680a0644dd000701167d646e5b2816c3d074f7538ee89e1fd2df00d7a5e5ff6e0d8a167a006004e24e6c0122e4d8c749168795b539be02fbcfb40f5d821bd69d4198d952fe5006974fc1b21336d86fa7c7b6f590c5d8bdc1784f85f8b01990810fc984c944500b17b3d1dc9524727c9450c488f9b58f81f30b9d4a0b16b8f38e12b79eab5c30019b64ece654ec16508f0e35d58215a0dacd4d7aa02e1c68468856740eeeae3003d1ad8d954cbc3090f45e1466851e31fcb2e1450915eab23ec518d7a65fd5e00bfe13a7fd0ef2a52be90045dcbe9557531a0093885cf662c276d0c83d414fe0014b874689378ce8da6fc82bbedbc451bfc8f4e2383027c5600036a3db935790015ae58c601a09e510319b3cd84e78862343029d95c6402a2ec26369d4451af0070b199d7e4b22ea076f6ec8fa67bf1b6d2dd0cbda35ac50e7a57f091f00c07009f5439dda581e3681d02f89083082750070ee04d387f3ac8e834199cfb986c00193fc01a1966d6434f641272b71f0f3bad63a01001a49af022ebe94e4a6c4d005a6b9c7fcd6ec5a8b4acc2b4e18378c4cfabe04af9014f83011f2ffc30937f005cde93df8d48acaf7e6f5d8d8a31f63680b8e404e45aae153d89fe800000000007010eb4f539e7e978488c6358f4863a4c2767446fcdc307963b9a137500a200a51d90931ea01ffdc24e2240338690cb9eff4764e27a7ad8f7e3795e9ef712008896ea70ab77baf8b9820ca384055bab204f01200002703638191d2d6718010001f4c75319c4d0f69380249384c4cf7ad96b69dfc344180415cc689c2f405f000a1d6c58f2a41896a7beb2b050195228fd657b1982d339d0f4a07295d15be100e2ea916760c3f4f804e858e40fed2e7f0ad202c9bfc57d2185eda43b89f91c0056ead2088e5d633676ac7c2ee39e8d53601f3d57b1eae979f8ae575d1a17bc00a622e9d62d362d982ccf85efd7163316b4921de59912d6991ed843053f35d600f1a6c6566819a9ac46652d520e97bf5777d737481fb988c001a0f225ff639700348f99a27f925b65bf1b3a6fd77a3062402f730aeb5c52cb86277da015ce3f00dd4f8d1a899b08f3b241bc7c1e5a2047876749164868f70e162d9d9b7ef90500558201b08405f5e1008304b20904e42a817b7e434a4c7bb5c9bbb2cf55804900dd6b8bc4bf3327dfbe6df5c571d6efea85f49c6a66b9d16437cd8fc4278c8e00fb08f7fd04e76dac7e4d9e343e0b5510379f5bba48555337337833774e4262005846434a765439677248354e727a52507477553243516e57396b764c38704a00314264012042307831646631643339663132383730353235386461373965340063633631303864346364636562336639346264333239636436656562343932003734303235386261623909393134415d807b9cb24059f1277920ab6c4ea407003b1a4cd3b012830a19424845f898508652c2d4ff4c97f866b008d07e6cc530005908a80f6226d7ef0a33048c2e5de44ca86987ec9608ebc54fbc471ba9ffd50061e262a9ea5ad9b58b6e11cdf0dde3acc3a6a05ff5690be84d4f8db94677d9006bbc76e8bc3e36417a09362ead0b65d168f52a7b2c7dce514abb9f29b9a77900cc59f194d5d55183f7a5632bf345d08a883ab0cd0b58a07eeec8986764a12e005769666526039d39f4e1e27a516e03a9d5638ba4d39165783a0336b6ebd138000e732123a6f9cadbb7a3d20d1703e1000324cceb0f5f96f143ae2c36f3f12800684373e3d7044aa05f8dc74ba36353c7676a00c59e0477232792917950a2a900b92eece348125e1eb902f8b3068403e63ecc8301321e006521c080a05683d000d2cf1eeb3812306bea2d167cf3e9e3a2507444513dcda16c03628c983da072005e09a6ce24568196bb088e9412d9ada3318be54e63dbb91387f89e44a06e3e0002f902dccf8405f5e1018308151694c0ac932cac7b4d8f7c31792082e2e8f300cfe99c10430000b902640240e0016488d527dcc02ca2a730ef23da040faacf00237e9394681c9cb4f443853800000066d85d0000004253040001a0307ce41c007a05e08fe35ced440e56bcd0e9fd846e3108ebfa5e5bcde7432fa50ea01bdb008b11cd1a40f3c5027a94363ad872f1d9cd315d9ed0fa3829ce1e3f4d87eef900016f82953bcb0333eb46c99b8fa021059e48c3a05c5aad420274ca296839a700dd57008f05d3f1d5a806970f6e50cfc38577f1d9b7a0767ec99260d7fa715d00d8864641c76897815f241b2e479928dc5ab5cee7085ff4f902d512840436cb00e083068ff594349b654dcbce53943c8e87f914f62ae9526c66818806623f900014adfc8a316456530002e06802eb6c0039190cbfffc7c9e152ace72015a07e00ea42866bdf5cff00b2d05cf0dc2b99db020d42cc2ca1c2a676af0f12df4e3b00b36c1c9b29287f2e8da00b5e7b2de7747e3a5ad7eb8837e1afaa774742a78600bbb83289283e31a5045e1e02f874830827503bd1e0b38252089480c6743265006d59144ceff962e8faf8926599bcf888018f25bad084033d80c080a076afc0007c4f763d2a5d1dec16360db7d44f59d49b088261fd3183d75ef0a1a8c9a0730095dd202a4f2f833c0b9f5eb5f2b848c76e3b47bbc0772f87c5d6e61808cdc0005b0284055bab1eca132c4e3d90450fab2eb50ca3b0a02caf779d51c654c2aa003545ffe1d42f852ab8b3cf84a01ab13f900fe28b84ecb04009ad0298aba7d100c47e06c953ff15bbc91cae42b9ed268402d1da0c8402e0955a82c0b10ccb2f007c15c9a715eeb28683cec4864745c0d82fc24cd6d503b15442e139b0aa3dd1000eae116588a026349a07b1f0031a77a65c6b7b5afaa644d4aa2855772e4e7f00c9060640a42869f901d43c01eb06e1932726c270f4e7f74a1df5af9fa88b54009d1d480506eeb935ba929641064a088fbc88dfe394256c28ada983841f1362002151b5de2162286cdff34540d43d8cfc874478732ea85411756ea191a982c20060d09d5d1450771c24dd596ee6231ac535cf2f6022b7fb65a01e76ce12ce61005fb2fa2e1e35cce353a05f60695c0d5f1886f10704de44e880fdacbd5ed372005afd8989e6606fcdd1ca23f8ad819f0130f19401f0a31698c4d065659b9bdc0021b3610292a1c506972a02677ee6ff48e14012d0c2ea0676ef4ef77b923fad00e409c33d2276f03f4da007678c9b44a3392e5c195fe866931920f47baeb6f5006b7b6448a50ddf3f0f0ce7f86b81ddc3a0a798abfac17f845534469958b44500139e2fcfe5a182eaf375f25b21b76217dac1a0783504b70acbf2e635244b78004d0ad0564e8da752907a188ed3523bd9832ed362f902ad400a2df11c9c1d8b00122eed56e78442106b28fd044c03cfb8b589f249692d983b9f99fc62517e35003d6ea10c5f82ea5408a1a953e6550f6b92d6ab8972a5d71e94d246e3f591c7007d4ab1b43ae9648281a4ebffc0807c566c896607697a4a5d71d797a82fae82005ea01f99d41d08d0afa58e2cc92d4af7f34ac256321e835e11579e40081774002905142dc547ef919645d2792ac5b1ccae3b1542eebb1e171957eb0a5c0dde00550e0a6c3ea06b665a731a18f01a02d1743547f5a0b3be515c638b2431a4e60072da1408a69a96f90310830e53848403cb2e2e8305a6b494446755349101cb0020c582c224462c3912d3584dce80b902a4b143044b2020d68363302080e71100e0cab978c081b9e69308d49808a066d8aee40223536e602e3758e43c2ad7ec003dceb631e1d1fec30777800271753383df80afdc98dba5460000000000005100017f87000075e85634c4a5fed09819e3c46d86a965dd9447d86e470000764e00422b0acb2bd7e3ac70b5c0e5eb806e86a94000415cb41c86e974f9ca274f0700e0daef68ed703dd4edad9d07c63bf2243b11d10c9a16f505008765f4e1948e00912a3d3104fe3910f05e3509fa61a41b79e6bc1b3164dc41ab22794beed2c60027502282f956a8b9c4b394a70e8e7b85f947450161bc26a04d23a6035cf543009343489aa6051fe8ac684c4fe072438d87372a5ea812b9e66ef90474228405001d3440830f922e94872822543b353e9ab90404b80c2f0196b5b9e266d868c800012001536e77259abe4784d6183c7ea2d1fbc1667d09613fe169b0d0f429e800023282ebd34c2c94462492c6e078ca3ae9e93aa2e1ccc615aaa067055742d400344f9b076bf7e676aaa7e0ea4b7032bcc5363f0f6d06dc9461a7a24475709400bf6d82abbf52dd1ca73c3314c1f26fea3719ae70acb1afd29d84c35ebf5f5a002ce79087efe7be51610c91576fa3e15749c4ad2c55bc28c220a3d002e3659500cba0b87f0604d26351794acb38acb386d53d1b065bc001a068d99490e4c3a10068da38bf278a49ac5ab15776e903b6a9b159e2ccfe750bc37ba00e0c03a75a0099eb3411184eec140960e502fbe6fd7a6236fcc74c06f9c4c50dc102f9022000830335ae359d889de724095b8d686d3c494061396b4cabfc249f4dc38d6d74001ca781c612ddeb80f62c21988ed4ecc3f0c7acca34c858ca5dc2d2c9ca062f004b4656b9b5c6074563686f6573454348c080a04fbdda341f0e9a402cbbbaab004c9f992a3201119704556647b8b6fdbe0742169ea0071911b583c0ad10ed460001f22323e6b12bd955cc7729eed6e3f3cc73cb5d58cf02f90114015b01c1b0009480b8a4a3b105cadcf3f9227a5a108ace2cb44a4b47afa301ecf77eb82f80007d704367c001a051b858a8e133ce6044dee5953c55069743ed59677ef1e26a008f1e4070693677baa03dee34783237b6635e47c102bd89ca38c0386022546a00ac14e6cc4522fbb2e85d02f901f78308275014028412dc45e1830519520952006176656e585856497ecf829e8212dd59d7f29f3a1c5c13e1562e7882ceb6e6009c04a3e0137664475de7fdddf0c269135e82cf820e8ca2f6f61762b5cd3c3600b899bc82efda491fd5c71d8a3997b250f6f7033a5987b5b2ca207afdc14eb0001b01a0575dd0787df1b200e6d4ec26c619fdfe77efde9846357b83fcc273b000a66739c1a050b6aca4fece8e1420fd8d4c8408046cf147c3fb3e37f84b3e34006ca1928ac299f90a943e8402ce79448306914e28e2290effffb90a240324170044591ef521f07d96bf710d3c8a8090650292e945db68092008a4062020c05300046b0120813df550a32d4a9d42010d057386429ad2328ed934032682032349006b2635322e3935363532323735303136383435322e373932373432313632360037353835323639363930303335626a66304f4d314d79356579516d586f583200346c46793938344462504f754d7079567069626e4d46536a7743494b776b35006b7a6f61717947426b58496947613265465270546378574e75476373634d4f00613847576a62484a73667a775476385852733777626e39384c666a49686b73004b454355384952575130472f67334b483453376b6246585271525650633458002f654d665446447639423033725a46474a4e6d794243544a2b466a3136744c0062444371624f466e696c316b4458656a41446649306867525870585a6470720059625831445a706c43416b6b6935314e42366a75746a536431527737764d3400694d307130676d34587a6679367a2b54314967543263307a387748314467450062755851335578562f7079666b63527a6847446c6a7472764b59356a785273006c2f307369393537305130627a5a4354724d6d6a4b73374a56412f766155330062694356766a466c51793178725851a482420efff48e54573c66871ac7393400a8a4666a46b59ae3da6b9e968d64a04ee685da49ddecdb84ef238551c1f0ac00742ccb919c95e6081c65cde9b3b551928d9a1c6a2562c56f1a25be336a7a67008e265860f0cfb8d3118da4d1a80d5728f9ca7a724808a589c5295337957a9f003c6cd519b605fc62fe1e95793340be1ba04e95b166703cd7eba1b114ca652b001c2de268858cbedec8103ad0085a4e447fa054230700030dd229d4c965e62c0011320b5653acf72705c4a05d6167b7b7f864eb64ed9354555085c7cb2fb6c00047d0b2ed22e621d2f0c4001b3c1d3c0e59adba9a2d012d66ccb7a7988b71e500720939d2cabae8dcfe400cb256055dbfa22e07a5be7bb93dc6263ea04c5f7a000289bc2943b5bdcfb8dcf716ec96dac4463e66ccfa083444055a334beef88d008203341f07a4bc89fc128467d8a4b5296549094e35aebfb91682030076a978006bad13aba0167880c5e31e19c35e60764adb1fa365272c2fcc0a5a6dcd1a2600c204eaaac31481e101a0670960cc2df5f6ea28b025b30d285b1b4a7681ab6e007de2f22fc90fc2b0046c429fecc64a008bc2dd493f2ad5668d83ba805b8a4600e57c13a3b15ff70fa8ed8ec51e0203386a2e39513bf2ddbef4329374a8dc0b002024da93489eacd69c85d6dff671295543a469fb015bf82c9c4bf04d3f72a7007207cca24066bb78bdc6f41d01532bd0cdae60882c79f2159cf4b6d5cb66e800dc5593c7b8763a2c86a0b2af75eb7e53aaa0471926f1cb58e62c8b8707d41e00783ed35f80f3b0fc7f42d7041a81a69cb26901270862c294edf57d6ea541c1003d26a98ee4862b2038ab7b087b1c2da1e86332305819ad2b3b9cdf27e4a6850039b21a6566ad3a0f734405c5bab68a5e8b8e91b6c63ebf09ae4324b552c3360076392253b1d3b571c6dbc7671ace573a009905bf008cca637185eeafe8f51b00b56dd2aca7cfb5f7220949635edcb7a0c149df197a748e3d29834f4d33693a000c454a87dd39cf21171f0d585af0bdc4a0eafda9524bfd4b53c3a1daabd04400175bbba3b3195ff86eabc03f02b059c231e0a05fc2357a3d0546f2618555c600bb6918ee4d15dfc7a43f4af254c00f1a14ec64c109358a1b23ed21e7f6136100f4533a98e736af079927e37dbb7c96ade3a30e8b63183215197acbfce413bd00df493dab784a342b80b6938a06168c19ead43aebaa38538b04d693ec46969c00f685a5c2ed34aa6dbd23e16b9534279701a066ed13a8d101b44ce49e661e6700b72bf13582defd1656f401243838c0dd66422aa04e6e654ccbd94504bd611700b8409ad0b6b25f7fffbdaa3e6bf80584547c6beaaaf902ef82020af3c7d98a00fe19ed645c5acf5854fcaece990ab9182b0daf62546973d22ee016ed592325003964d6b2e62747884058e4d81436c6f643f10ea292178f868ee33231705ac600c1668fab5429f363f87c17b1d9f7eada702cadae1fddf3ec3b407af443e93f00eba2cfa4ade7a7bf6ea63f3078363638666162353432396633363366383763003137623164396637656164613730326361646165316635303075bbf58e35a1007ed0ebf6289d2090cbcabb2547daf9a0d7471c5ea4fbf17886b1a01b7c0e8000f19e5a4e8315468e5238c5a5fafe9c097d5cb3f748a13926f5c13c7d02f9020053830827502e8306c067e4bca3ce1d3fc9b326c9831ad1c8d998049f57178d00a02dbce60ebeaafb77e5472308f432f78ac3ae07d974670a3998d9d6622e3200d0847ff5977c37e0ec9109982fc080a093b05646e93ca151d60706f326909c00057770df7e59d4b971079c4beb47e8071ba0231a89f52edec7422a053806e3006ca1a002bd6dacb784e5b3f78e7929f2e842cdf9043481e2886271a498c94800dbb5fb3b589f8067236519333928a145a7cba0f0f684aecbfce7fa1eb97d74003affd2cbc9eceac49c530295ba2adbab3e63aefcff2ab4657366a179095451007156364d7635696d48476666716e785a5738544d6363784b464a725151317200453956393837504735745976ebf3ab9e670cd2357312d093b21ddb98242ae200480de6b0ee03fe2ea8af70ae922ca2e1a578e2e6dc007306a46353c0fd17cf00ab89c1336afd522ba8cb82054485714dca93bc0622715a4ecf5eab5870f2eb001e8a9767203a39aead5f749f1ae5a04e990ec3a047e144ff87aac39b5ae77a00712880aa09f4a1b797388c3d52454e861a82c08d2222426dc080a0242633350003f51a30350294dfa863887e622d57ff077d0cb8ba6f372a95731430a02aaa008c12cd820aecbbe4a9496fdfef72f703c764e7efec3b02561a55f809ea262200050f8d0a44756c63696536353732cab5a893194a9d5033e1d3ebf25c7048bf00b9056a5b5952bf8afde6ecf7127bae902875f4bf1e40d47e7f06355c00662100fb0165f43f5623c4b60b8aaa50d7a08e081b01a0a1bb861e6f7c7354d1444300f2399015c178e56f488300fa396e9130a96f882ea1a079d60e71ad88b1fd7000f116da986d21876dec618ee8a71f58d90728f4b393ee44f9022d36038774c40080600201a4fc0412a3a3a953fed1a586a3010694e98621c934d18a29db0aed0052a516d033f5672d6584b9b75f9006ed0432891a0c894ecb23a04ab889e9fc00f6c1bb034a2c8e458af97defaa627d953800f30f022eec8fad354a02f901730017840a2a176c840bd1128782a5d59447fbe95e981c0df9737b6971b451fb1500fdc989d980b901045b7d748240356631346431373131646239626465346131003333613865323339303066396339396537636463313562316265343762323600633339613636653465393165386440613966383932373132633833316537390061646561373035396231623333663832646634396664613030616566623134006136613661393238653132626537323436c080a0be6f6abaf01ed077b5adf10019fb768cc45bbfaabb53e2b237b69a45ecdf2c13d1a07861851acb9db3415a0099e1e6aba4f9cfa0387f7fee195749824cb859266fd67d02f90b1d020284030014b5988312dbe420001d12fa9b5eb90aa4af7060fdf4bf3d725fd28b6c097800375110c34435f76304b3f2a157c90e180d3996c581a900000001489264e008002405a066d85f7189dba8440d8b32a9201288c2600000000261184a4241200400d13b7318901806833010256198e8e90314800320281812121c0c7022180e18000c1e181e0c08080e0c0c87c522522a250884180406392c05296e1a097560b300887da59f3f8becce51ec422e51818466e4a7788063ddd351409aa4e4e02c4e00d79104beb3d5f958c3827aa505281939daa45aa4203a3e259ed44400cfa0f8005e74eaacb0863e6ed89c0a7b742b609285e55b6a15261cdc050c0b2003c93c006cf25b9e996104195e98b501d15a368a54b747aa84c72ec906d2e24018314c00f95ff8019563e2311a1620c6e796140c6cb0ed77134d0100a781dffdb8dde800781f5cffc6445092b9ce0e7df62425d33866523ad4b0b5ba13326bc55bd2b800c8b9a002aebc1b0ff74ee3146d48e2a0012a119ab7285d872c357af2a8600d00184b6670a66c6c0f92b8cdc051c97e814780d4102ce12d70ef7a34e9cf2dfb0000c47222898760220eae50fce5a847c88f15c440a3c4e1332840b2f32ac3620047783a07906d3be680d739832ca7d550d0f10365673220a37d7ba181637bb800df7f4d1cabdc9d776ad668c5c628484290768b09d0ca62ec5c64160383dd760080b4c4a9633f65fa23547a8d91c1b08e8067840e3f1e966a016975ca8eeb4f0065d6992200b790b499becf809fbce048d22a2b5269509f4d59d9215081f44a00a98d2465f6f3ac675207e3be903a87596f0002ec9487d224f86b466dee570d0015b2860d59e5024e64853d52861f00f4129b043d97171745c8cc4eff4c2771004fd2400742d74eebe82200d664c315bad75806bca1d9455f7473706d437a920082d28b4bca397dbf0e117eec39a522d08116637aa5b8257ccf16ae8a3118e3001118ed999904c9beffccb1ae22d4cf2a2252375877a290968842037a0fee180002e5d1318949035bcf7f21576c2580e03185580f8a984f32169da4b4f5e1c200490247087230130f1dc15eeafea0c6c934efc6a20206aaa118d73ec8bc39aa0004f49199817cf7281c2352b2d82199af631a97c81d20b4c750dcd462cdc70b007281f35cc46c3b7ed029661df237d40f10c7e15b57a2dff34602c26554b269006042dad7d0be04beb04a7fa4ed25564bc7af742e4d5562864136104f7c3ac70092206afd3a277df8f5b7516b966ffcaf1cf5ddd212cbf35442db1400688758004bb78c5769636e2468573fd4da73b8a50f92112fb21ec36d4b75b768091fbc001c812178ac31e1d7566a0940505218b5f50b7fbb0060da6b2d8ce732055d5f007cff69cb07ad973148c865c2e804fce90008ca97519f6936ee0440026ce91e00f43c2e3ab390803d003b7e1b5deecba1bb58354e0caa8fc857b51636786bcd00d9f1a8f6f920f0e2c1a7e7179bb69d0a26d92c87753238313ca54447131db0000ecaa486f721ac82b86135bd4ff134020731ef7d2190d267cb2795d659525800714ec6ec38727fddde350f0adc852466dd57bc580f2d83c20f62a0fd6558070027a0d64c8115f5fd969811e874dc0f1e97e4ac06ccd29971370b65626803530010a2adaa454c737efd4a5505066b971c51191a00c6b0061dfb336b183e2e2500ba212dbe23b9fc4aeeb23018d1bceb1d0282b6428edd0d4aba42091a07e4e400cd856eec3a725f8d778bf37fd26a00bb1148cd0465bcf108156def206a120f00b2e149fe4c3fcbfa99201f075a92278775b62e4dd19b6433afaf6d75e4a78600e81f682f87850e7d23c52d2005f77a7a1980a85e3aea89551dd9acfee4c653004270caa1e11066839034391a53d01a6e8c9e7486dd19e8a7a6c655bd7a616b00ec33dd44d074591029ed3e48467b3bac8ca33fb3f141cba649208f6940e8950071e77c9391073863d0af73206fa9f3a0557372dd029810730104d60409d17e00eb00d769c962d6fe22c1451349b605e5825632846461f1e3007bc1b604ef0c00db12947431b7e9aab721b3e1c8759182bfcb11cb7f1feff25896a03719a20600e795e2f4880f6cf97158cc8fb7a00e171e51e4915a9324a9d50dcbd709e028008512c42fd0a21cf6022a8c4e68a84443aebd0aae71c2d797b3028b2ab156e9000928bdbf40c3741a19392775b620f93bdd0ed8abf1de720344c2c21b99d08900971b221092218feecfb84846de326652900ae1c881cde914d42d62c271a82800c7522db65873538a902a50de832220543c8266188a3829ca8723fc7ec34ac50066c2a393772722263539e76b6c2405d940b03126f57ce4262e1430a648330600bf3df33d06985d62d6302ac1edc016fb22eed6766f2ae15e5a3e14a473b8b200250eb17f108c2c103f464525a7fd011fbccc0b50a843470e14f46caada00ac004fb364c91fac2a825150f913b4017a00a852a093815a5e6cea9d1321741a0800b79278d93e1866770038a780031068921fbc00f7158d618fff0ae42757c2920045570e444429686b9ec18e7e6df8534de4ce6aae13229f7ab8fe47901e762500720268de881a18758a8f341df31ccfc5885a6994b81d0df35aee4decf046a6008d16fc1bd59e09cd8c088c26d006318cabd908eae8ccfd62dd4b92cf4631ac0045a2f603b2f761a451e01019190184d735182c5f044e95c12cf5172b470b45007f1db481e32b4d6a35325dd33dfa39028f6d4c4d894a5e91c44b8cc941174100d174a48b406f67ffaa5227a6b7058a28c2fab840c0a3e0bf6880130c973a92000c53351d63dde55d3e80b52428f7a644abec0eb98cf18d1a676e2b17d60b9200c6d160581ce16315c62f63362f844c88e80e655482564ead8f91dda8c6deaf00c56480be70fd657e425ee7f5d2875fc78316b8687082412a7fa4b00178c9320010e78cfb00a4d49a6630892cfa9b4412045ddc78848904d1962aafe123c54c0029629456317484e28009b90ceaf43b491f5c921ecf2cecec5fbc9433d2e01900c31bee128a7cc2d341cba91fa4ff0541281abf5b4694a14a3d805c74a3eaf400902302aa3b1e12a0442f760e6187123a5b58ba1e28a026dba1fe9d1482424c001a7ccdf3f9c2779bde514042947fa1e6dee8543d78c17364bae3f4ca21648200446ab90de212879ec0c5ab33127577bc6827db74062cb37fde32c684942ea800e576c4c3ea7e36c996951a88887936f82e6501b4cbb7600835672669ced29e0010f02565127342a2d25ad5a0deb7aef018c8204bc0bc2ad3e0cf099a496d1100b3c40ab9ce3f7d9a7817d2e9b3c638c7cde00404f34402f0131043c0af018b0074064000f43b0b2c5f97a23ee64f7d3651abac5d17c9ee06afda57ea9eb54b00254d0281ac0f887154e0e2855f005dc824b7885caa804f604c924ae601248000cf6a0a6ea99e100bb3b8adaf97f06166f6c34d1124581186fb1533f7dc809900ba7032c2da2d880ccfcacf1065ec0dac7098eaead657a9b1a87ebc17bd7be800167160dcfda15188dd0244fec3bc7b8d2c8472384a9f577c5db11ba5cc662b00f50927c550d2684ad7d142466a19a37924f4900c80f6b2d9dd10c692d0665500897c90f0964df3b0c231e51814c8780f34a53497cd157164e8c611e0acf70300a74e8f3ad931fcb2e19c72886ccec312aed6e10fd1a624e9d9b042013f367400e1f04e493b5eec9f684ec3bf1ac47a1b12dae22f290503ea3dde6456a482000040e5a8d141b651861e1c631d9280a46e4ec027bd5959e861733a05b6164c2d00b0b8f81c6a8e04368121467534608ade80434a6b73807f58f17b25204f858b0003de72393bb924bc829d5a81d689bb62d340da0315b537187cd6e95c7877ee008b302d5ca9385b8796c6d6181e95a92fabaaf38e499c48e31d8f0647205b49004360760780791449e8ec0001f3444593b04b549cd1401986f0d8fa73045b8f0003ab558be9d9ece81f79fda077fd81d0a6c044a340f0c7aa146f004d57019200c3fd871e274f2b1401b8c11c3941078580d7cd121d3afd027cee933f77ec00007ecbe7c970090b7a22ba38e6f011acd7501ebf1de081c812d574981c4c690a00db6d1077c3585f30305f4893202531763b048e7a822df2e3fee3236ac9d80b006555da9d76462d3b95dd1bfc0f934c0394dbd8ce90aa5d6a7da747f79ea94d00da71a635797b00335e90b850e351fcb16d7baeca96529ca4c0364eb5ce81c4008cbce0b9e23de83a5352a1e7a472d3b15b9e01d700b339ccc3b59c1cf1fa6d005ea8c716b43e04a9de0ba721ed05a5f2d90ff7242ff036989bcf8aacd2d010000bfc1f35a4f03a16846f6b1b31a04479f459ffe92bfdeb0e1b2125fb69601a00382fa2099dfbfd909d880d14496a7f835a5a818e420005d0b8581017019dac00f140392d9d0d3ba0dc284cdad1f87ce66442014cdc3203f840e176a4abe3420044749373d66a3aee3426d1b4b34181891af4486ee9006c961a486066351601002b955360993c94d64ae53c8550fafedbfbd6ce1cbaa0114031c8638de3c263005b8a92da385abd82fd95e4f7159a253cdc1cf196bdb008554310220c4b250800e401c1d03fc05905191c7506275d1c1bd28b4b20d52853b505f22e672354eb00ef24fd66a9081aba5de0ef66541114d3a8d497bad466bc248b6697fbae11fa00a86586b91aed71d870a8ec8f8689f50340a754be83c746a02e3b3400a839fb00b3872d827290bb742cd0e691ee4053ae31c01beb4cb0942c60b234e701f93500fa56c059e7a1101db151955693e91dda501bb18c84e85a84a3cfb56a26709200404ae6e5487f9771c2cdfa50c9ae99a377ac61844121a3101fda95b54b27c400302a02b95ed8a4d71661270d53bc2d8e47cce5cefdaa7b2f5a8bbd8ecc88ee00fed968fe8e5ad335bb5c1aa8ee1fe492fb181edb58b6afa799431f701c82cd00de3d0e3dc5ec8a462226eff1640ea70dcb53c22ef5a824a29c89ea6c54d1a20098fc1073dfa081bfff8c56ae519c755a1ec88f3ca69ead19366c82595c33ba00a7d0cd6f3020bbe1831f1f27513ae991b1cbba92b5b94a5e2628e1b51c5f5f003990dbcbcc7818ce6ab05fc0556329315f984bc708c0cf923d1c25ffbaf92b0012dacb9cce089e6fc16476d0534e5a4890ef0b04dd47e547c0e40dcf1910190085f7b34517b06626e3634674a6568a7d74133d7ba1c79bdab20472114138f7002c213806aae07ca6935012934ed242f7703cf5f3183918d924c6d8ad8089a7008b7e052049013f7600b4a30233905584aa56c08b5678a2cc8680c47b22cd9c000c1c2f17ad360b74c0325cbabcafd87c6d3b15e721af82b9ecd3f4625f226500182bb4f5348e3ef97b3f85cb1bae7c672c4d13094875ba3c55838381173ef100483d0244f51a0d9649c5cc693e03d31821a64513aeb1009a70356990cb836a0025050b24f92c6be78c1beb8d84812049d846304091295c32c3c27950c2b03a00f46ae091061d5c59640145d8926197e441e496edfd97f08cd251d41eeae9b400444f2a9ff63ab8c1323e7582a48c5938001dad502df01297a3704830280fdd0062a88892ca73e24e5460680041774e1c0c805e02d0ab03a3525ecc55374ef70044e63cb60a64d1d08de59014e589543301445cd6183e047dbcdfb53d878a4f004f998d15bb01ce28225acc3dfe60e60ec4ae01c321118cb1ed1bfcd5471b1900b0e66716bedb52937f61081b1d4bc57e958f768488d13913b2f58077a53b3c0016b2fb4a8c219e9071484515427545d103b5fa3d90f14b9626dd386a540b2a006450ce9931e3e051b168e0f9e57fced0e0aa16ce29d09a34658a130734a82b00d34e987752dbe6a8dafd9736eef9bd603d3ccbeafce0a85b2debce1cf4bd5800c06a103e0a54312e7fa61091c1084e2ad21c4e82b218eecccddf1dd15930b600b0f85628430e2bbc0a780f0d65e71369f3e0219709faf0d06fd6481f3ac61700e04907046018421fe91d58d551524d36bc15c433169dd9a2802ca095ce1ed0009e14b4a398e10b5ad0a916c87fdb3b582388f9f498534f52dd657955b0f55e0063fbea5ec9e7eb3f831e3e8ec880d23da02714704e3c643766db109a8bca330068e11cd67c82795faf157dde363503f94b824b2cad8f6f78105cd5921365b500a89e4fbdc4fe2a18f8d08aa186e93e3133f571dc51188498fe444cd19ac58100329b8f2fa81301df14c711c176a32aa80d97800d55ec7ee6735917118958b700c6f5205577f0370df6b9f6619806509f234735b8be58d3c6b6832d7163007200d83c9ff705c2630d63ad1cd1bb420765e6ce4563e247c9f12133513556a9dd00f6af1fa4ff65c4405a83a984151eac1321d41115ee21b4e4a8acc63ed5173200a9e4305c84953e385c84011f20c9541d28854c2da7afd7dc3c7ac28afa8bc700fc3df860c6a5fa62c572dfe2c2c49e2a521269a542105b3b4f27853fc0aec5002deb13905e3059d5e8c31767f225a8be9408db391a2b30f6fd4958ed2bff68002686a553220a7301b95588c4c60790f35faeea646e2328e2284dbe2fdcdf36003e03d87edc3933d95db83623f439d2ac3c392e84aa136fd96e58949b12cd5b0042ae0a9c830b90006c963ac69902f2ed9989079f33d4ea9b9e161cd822f24000465f6019c3c770cfb5f9db514997b5954512422873cab5a80b8b2fda8eb4e10000c0b5bed6cc98341050f7429b05480b4d5900497b36e9bb15f5595170152d00bdbedb28be56b649f3ee5b469144790538c1f338c57d196695db4e02b6c5cf0094a63d71a7d2106f8f2e04f06e8eebc7162ed0a01b3d008949a59184591b40009a549ab6dcc056505e57c359f8087c3d0f4da9129784a62b6482b0bf4f48170060b838d06bf8deb4bf2166b10505ceb338620bc01fc9582aee2d221c3926fc002acead4f4e4cfd152f14a5584eb008562b1d6532bd4afc28f209e7d4a84521001798d1449a67d8a97188743dd96e73d0762a9c357bc27e42365d8d0cc7648f00da37fa4b78d18835c52dad215af1312326ba92f487fc8328c71135275166e000c6ac1887bdc295ee0819d0e9ac3a90a30453b82dcda5644c5ad112aedf7887009f71955983f6327e44fb66c0b96a3f427d0046e2b755b561136f1105660ffc004521c462ebd1d016e40a3d4016837dac527922110c0da1038d5147d295f74a0048a72e98d5d5f86958af3056bd1534724b59b14219aa96a79813a9c3601d1f00c6ced99db7c3451b780255fd4c0e52424fc3987d2021e192c66effd4195966000c2ed01a20be6c6c047b12918ed9492a05784645a08b2ecf03d5120e1159ad00a8c155417704995efc54e465610558c63400f8980484e85e3c3f00d048ed79009ef09e8ebb73e80a605866daa712cb0790611c7a0317a0e8400291764d0d27009ecb2f4874442342f5801d9750ce21b434e4d9e5ada801f36db881c448f8b4005c3ab1b6bfb543bb9c6a56f2a5c2bf5ee87fcebeb1733295a1c22fc6ee410a0077a661b211d4771dd629f6e9c7b7a9235baa219a4fe0cf7531fabc7147d1ce00871f4ef0c307ecef73ad0fdb3ada29f508705ef5ca811628b92315b57f4a900081b03490fefe3bd51e5678a675404dfac3670f985a70a2620e3dd7db09871e0045de57337cb6f53dcf3cef49d2df43d3bf79b945f32509385dde0d4797dd000033f0d249f610726336f610b3ff8ca564460705cb2ee8d31aa7b9410332238000cdde025e150f125072532cf8c8e8dc81d79c83d192f12d8003ad0f849481ac004e2fcfde34cfa9a04e52636b1b1841934063202f94a61b805e037a9b05035b00d09925cdb931a2e15a61fd9f3997371ae8b1919086dab6f007b92ce2220c9000eae44e341d8de4b397c5fccadf1e576b8cce97541ee4c4f341735760c383dd00390533af2d624bc4e3ff784769d733b0ea4a0489b19f6e44a4dc68844722df0028ab6408f791d249943ba0ee702e0604bbba7ee26af06a4ad43b4b4224232d0000f9955118f2a1b0a5c9843f61bcc5d39747a7c2293200cd1e900e09b76965003564311cad6695f938ff616d0020c113b26b29e2e9d1ed314cb325e95c060700c6ce13b09cee8c03adb363001c3e033e9404582317b0a369590cd9c13b4a86002622fa80485840acca76620c2960df8b210e52fbb15b6bac02e282405470d90001e0f711bb81561983bec900208737348a27a3e1b7a1ff1fef7810edde48a20036a5199242caa0c67826333ce0588d018d3a137d0ceb2716db3bd44c23161c00cf7905b5a7d62667599a20004b84655f4399c382c6201d8507c8b9c5aab73700265427b20d04439e81f001584f7d7fa34ecdfea466046263d08c9f4d25b075002d1bc44520ba026d5204dc57070015014a3913018001a001014892630001e000000002246c692e6669496e555344223a2232312e363831363632303438323000363236374f7574303835313332383631343538333231363431343931343157004f556778544d484e68306956354f49734a3865585164423245755157767842004851664664426c55554a50626770594545306a555a794a2f667a455651563000654d63636d635173656c624b573032756f4d48556c4e48327856386f714f4a00746636384d787039324b79676474326e41794b473463336574556e71417346006a646d7463536c4b545461357a32374338392f362f5373446456474f4f315600764250586465315644326a476e307772392b786c754541314f79546c707a390053546d69706d436535343266384f4a7a4f4d64554667346a31506a48486173004d59444356323031696866584c6b6864644d49356534387353543455456942006a53316d45445a6977653756487936355256306c7957434331744267764b69007371316d7a495647684b335a503331566c6539563277344f4b525769306e710069592b594d4b4f39434f6f716a6c4f49436565326461586c4e30524a423841003d0000c080a073ecf491e5d56adaa8c9853e93c8bcbbad167d350c1cbb86100032f298a3bfeb64a01feb3f793d56625bd5dd6c5d9aa43dd0c2b295dabd0b180041e3be3b257696edcd02f8788308275025840404c0588287529487627c7e58006441eef9ee3c28b66662e897513f33873564e0b2bf540084db6b5246c080a0001d5ad7d177b298237cb8e5ca81409e66365acf0c31ecb802b82f0e816c450a0083a052bbcaa337e471c5978463c32c3175091a07457fc9abc899f297506aa00030a88e02f890830827502a82ab1a94e6feca764b7548127672c189d303eb95006c3ba37280a4e95a644f0134da08c080a0862a0f6da38c4ded8c28888e732a003845261098bdf1f4bec346b1cfe8125e8e65a0557288cf9a921d51ec5c26e800f758206752308267389b16d3c573e1c7d511429c1f04163494ec53c830f444004a8a56455c6836b5d2aa794289aa80b84496294178274c3795dadfebf56293002992bf241ae087e0a98c1674b7c7ab7674c001a007102fdcd36f78f5f74ab400a4296ddc0b080a3e82f6bc5967d9b209740b762fc4a064e62757777fed462600fa8aa00b7c5884204629b5102b2e509d3c6befb60d8facf9016f82953daaae0099091fbb28d400029052821653c1c752483b80b90104414bf38953040bb8940044eb5cd71eea640762aec49247ed50c768b39766d85ad103340822c3d1fe7b002105f82711dc11113cdf4431e515b153c9671559753013abbac3bb6ac5f4a40076a4a2ebcca030af32844d9e2fc991dbe8081b87e5f90ae7efa0e2a6b40a8f00083b35fb3d268902f901da8308275012da700f83024f13b6b4b8d6ea579895004d743d2cb7d85ea1d504c057000121a6e2e1a90fe7b1102d6b80ac3bbb2efc007e508792e95293ce91655ab6ae1c266212961937004332ae6be9d2b6c8b9a50029a2c716769674c6154feee5bd169ea71bc080a0dd65cffd3b11264995f6c100c5748d82939885071ee045bf0bb7f1a48a40cf2ee1a06385526c91d230f23600007f74e372d324a8eddcf612b00ecf76d6f2c6d2c716a8f870830cda09840200f26aeb827b0c942f554cc12f7fc113288e3d0153891973651fee598711c3790037e080068056d3ab44ebdbe2c807e6136e36d3eba2a2991fcbd324d66d341e0091e1e6683aafa01e3a5082480c05cc97e73c5da8ad349181b61718d296d885006cc1b1e9995ba672f9020e81998403ef1480830a1934a45b0d7cfaf6557f02006591fc29b8f050d7537b47646047e294c26872d9dba67dd44c728c23e01eb900829de2f15f84e2a77952c845978ec59afdcb72c2d62ef6c88b2600ae945bd5005e5b9da02195a81950f9f06ad6f5e4f17bc6a35b36b881ad7f6fd0ba7fed43004508b1e23302f87346520894e4edb277e41dc89ab076a1f049f4a3efa700bc00e88708e1bc9bf0634680c080a0eb1a82bc399b29e031995813dc344dcc42820074c639406fd860f6e15ab4e349eda06de7732f037baf895e3c78bd121e6e2400bc352a97406a98894ab6d6a0a393125502f893010983014fcd94ac2e24d5c2001e2e3501d0f61d3f27eb8e90e152bb80a4af9f8fc70058c001a069a184a90700e7c00d4e64752c57279ce11840ff4d3e0c7eaabe1b6dce0be36912a010d6ca00b42ffd28b9bd570c37d27ce315c7575fa05cbaae77e481ad641218790202f800768308275083018b2e8398968085012d5fe6308275309409dcae886c35e45f002545c0087725e36e18b032eb865af3107a43ea80c080a0a55770c731fc666100429f1bd3fa0fc7d910aab440a955f45adc3e757d1514e8d5a05ddce87381250069b42dd27e386c417578bce252f2e868bcc92649ff80bd9cba2f4f0206719400849ec7e20ff89b5dd737f86eec02145ca65bdeaa8702c2ad68fd900084124900c58bc080a03c02b7d0a54c23d314873fc6734dd67a060143a522611fdaf2e3003b094fa7efafa0408b97deb98c55ac8881263c8d2c710a6c0ed0909a25df42003edd4a52a2b550460a2d2ebcf70fd7301832e42709f10384dc447a42448703008d7ea4c6c1435229d849d6b3d6f6e732d3f7c2605ca429ca795f74fb393eb000b0cfb625f6a072029146b42474e466707cabfb12ff9f69e79a05b34c25d968007a0970cabe26e681e2fd541d0e2773a189450a70f06bc7edd3c1dc91150c7d0020daadc73a7a425c7d7bbdf252b12cc2fc478edac941deb25ead041287e6a0001b75b360763caa178f36a6989ea3abdb2b3b7bfe599bc2f452a0ede183202800cdf9024f8224388402cfdf7e8302bf26943bad7ad0728f9917d1bf08af578200dcbd516cdd9680b901e42e3781e70854e0482ec78b89ad04a6629e326e38130059e0d9e5d7c2a44ffddf6b295a15c148167daaaf5cf35308d51a675d8f1617001c00000066d8af1ee90adaad43da7e94835d4435a1ddb066c441c77737161b00650c5049d54e36e7b0a01dd09c0823fef6207e5259be81e082b9f04b4faf5f00a60c0e4fa0af91d5db5bd6b90907391c2ec6c22b4bd8e1fce767dfb158b0d700ad26c1df2d47f93bfdc36364d3e2763863730111ca5b5819437338eb3f81930089f8e2b8b9638b12695759a2f331970dc73395a00f3667c2b508cd1057b115001fb95eab2128f17f16908ecd9b8a5c7958fe0d03ff0ccc04f66ccde4739ab0004369f936b274fb2edea04512a70df35059de1a1689b01d1e8fd848ea5db00400c174c8ce82bb890a3424caf8ac4e0163539480b844095ea7b3c0ac932cac7b004d8f7c31792082e2e8f3cfe99c10ff25811b664792c1307f06adee586dc5c80078ac43e4c4dba1ae340dbfb9566bdebaa0115325bdf5fe5d2cb3c74ae19436003eb728b58b6673510cc37cad1a24b92ec341f9017083011f308404d3f64083000493e0945a4c258a6c7a6a6816ec6a71ff2187d20178781d01f4485ca81b7000255da2fe3fd0814b57d1b08fce784eb2d05effcb9e57d40a4a28aac3a0012b00b691c88f9c92fe5dcd9f67ea992c1a1f865852a1e0791dc5827ac772b75da0007f500e256275d34b9b1881393dba0e0f38a28e9d275622e68c7c8ec1a3cfe3009af9019083011f312db0afd0045f3518c77ec6591a542e326befd3d780b901002475ceafe60020e35fa931000000092576fc2b01f4ca421f0b297f71698a770039c194d1a71efd097181b1b918ccaf416a7bdeeda591a01239c9cad45a1b1900e04ea45f9fa11e3a603c2658eb9047ed7e9d79aaebb99e6f02f902b37606eb004a94c2968d15a98406582a9fbc40c4508ce9cad4577e1730da08f1414b07780085ce527d1a4ffe717bac16f84980f875a9e6e66f7ed3781865ad7081b8bd6900fb8bfb4e7cbe9251ac872d9c566e0754fefce6b84c8429b1f1528c74d1feb000b7ae6233996c9434e978082f44c6e8b834d338a9ba99217fe2ac41dc0779e0009d4087007c0deb6abf29cc829186933720af67da8b1ef633c001a0e94d7852006a9909d1c36dcd29ff94bab544098c6e9374e4b4effb4238640a4ed1a019460000b636d0bb4e6168bf620247d1285cf4786b4556954688bb592caf4d44443e00840394f9cd033703b4790806fc002124a12a7825884bd5450da8a0ce730227009da39acae216dc861d62801a0df61ecc75f07aa0493b2b701d97525e5570c700a7cd704f4c2442545555882970c106fe0ba58057c4f902d083011f3280e3820091e06339d10aab483c65695d004dbd5c6980b902642cc4081e600d25ccae0300328b944c600146d9833756814a23b053fd0f102aeeda0459215c2444799c700080027424647dbd18f4117d3471fe37471b6f80988c48047af8213566ab057e0032c94da022074d1a140dbbeb9dfa1d55d1a0b1626edb66f46f066932a3812d00748123502bf88b1202014e9b6a4d9f9f201e225e713242e64b7b48060d2c4600edf53f49aa2560d31adf5376a01be745946f8c01c6599494e5502974c1f09700ef01b3090334e56612e886317cec3301b4fbd92b5f11939246c3a086d1001f000c61ea63f3086b52ee351d112639739fc72bb38d142193649fb4dcb1a06ddc00480a5e989e8beb130c3fd20cb7a9a69edc0cea25dca75ff888c8459a50724700835686578403613f6b830120c2000cf48bc001a036b8d5afed2fcd7be5c59700fc52fcdc12596d2551886c33697fa6884c4c024833a0635ca713d8e0ce43f700c4f29cde86731f23d3658000f6471d069881c340f49426f88d8201f48403f90026a0830104c994ac1f9fadc33cc0799cf7e3051e5f6b28c98966ee80a4e78b00900134da088032374872526a89f6fda4031d9bbb0363fcb3a34ab8853b6612002686c1da30a4a029ffec90de344bed35928f810e3f01c9ac39dfaadcfb518e000d5cf8f1b61f42dcf9024f8211ed840314b59983026765c3a0059c50878b0a0048ae4ae43a77712fa96305694b7e80e6bcc529df7eee50e48a31a00485c14400b91a42310ff9fab608dfbb3ed3c1cf3f56dd35cff5de8999f60807b902f90300931dad146c83030d4094513d8b9dd443f7b074e2e8fcc177bd62fae274c08000b903243385fa290002a068ff19657c8d6da163c5c8480ce73a0d0efc81fde3008900c20c01c0fce5f4e1a5f28eeabd61b0079e8fb8b34439767ded6b60f9d400328c7889b9eb0ae8e211489862ac76fa2865c0135bebf3ba04a17d99afb5fb00e661eb3f0d1793404ade27492fd0cd58d8660100e00120400049c635e9d4ef001c49b0cb887f01739f8eee050df601c646205c3ed668a91093eae95b127ec900be1da39e41d9dad88ea60b9dffe582f6a088135ecdb0ac5e7e26eacf31533400efe6ef49d9096d8b0b48504f1f6fc469a248363a087a1b8ca6d10562c9e99800131097e3df8a17c001a0ed28ccb61b3b4e949e2692b7a4931f5b17041eae2b00f99d09efd75201b7dd7feda006382f7cab27b4b0e1cc833eeefa805f733a4400501f7e70d77341f63d229c78980583079f7b9439571bbd5a4c5d1a5184004c0063f45fe426db85ea8778023055157ed14d853d5d4cee5d42f95c58b33f0fc500b3475f8ca89bdf8ad90c4e1157efedb81db9e3e3f7076616510b30b8f1f84500ae0ae5eef91c22c6b6fe17d9a552c60dda4de2b494ca38e2bc425647a84ad200c10aaf66d7eb1aa129d0c7d19ba94a5887be814201a623f348a12cfdc6b64a008c9e883dd9b243438e794ceb9e7fad70d5c0ecd7b9a0ac5876ac5f6c01d55e00a9f579e71c060a1f60ba47a011d64cd828b8194c0ef4026edb785e011afe2f00c65205473efb5eb4b91cdfa1a2f9016e82953fd511c1e022ef7408e2c39f55005fa57313fa7a14f38d26a267229678d6e187f50695c975d031ca03b5b218a00041222c661095b8367965942da2022344dc1a272d50123445ac36b3d8e5706f00fb403885aebb57bcf532943ec4a0338eae3249cd55c978f54d90b046f085c1009dfbcfee1b995da04f7736debd445fa023f82a6704a2e3448ead72f168ead500bfe0d1b304c75eba6c9fc9b56f1a7e6d6b3b8402e5f32f8402f5177e82c0a50094b755039edc7910c1f1bd985d48322e55a31ac0bf225e8478ec8da80000c00080a0cb8de35b160e3533fe15d3ff7864ebc1d3175c8a952d1d32f6ccef4926002d4515a002eb87f18f216b1664538098ba0d2d20b6c6988571d6df98b02a7c004cef8effeb4a8311b4678403c4f946830135b694cf7f37b4916ac5c530c86300f8c8bb26ec1e8d2ccb87016bcc41e90001a0317373f735a077b8bd2dd0574200a67ed6bde6340d171663c833ac1cda2660b6bda02c81a7e6de0134ced83a4a00570c22fd74e6fcbd80e40d77bcc8f5bebf715b81c12ffbd3702c5043e4137e009dc847628d70fc08db2a85fe826f23e91c87116fef4218a003adae871dd4340046bd3783513fccc57a8a705ecfcd34abf7b9b570dafd16c5fff902af82012800bf6022030e7224a26bf61a5c56a4094f925ff76a1b42c92b5de606700be2380027b1f8398ebbb46edabd0a444649e9bd9cc7de1abb34189dbc27b6cbbd85fc001012a586d88f9a842f5dc374285bb60f226c6744e1eebad65cedba9376e44700dd23f196bf66985c31fdfd8559c3a074b09c33c53e4eee373c9f9f34eee2f2006ab46c16f729bbee2f30a85d43cf9498a011e52bbaa17643bc203f40a40eb5002eef7fca55de7b7f191e3dbc9d013efeb4eaf902ef82954180b9028420d871003201605304032fc8eff6e063b042318c39e1139a7875ddc7cb0bbba3af47b800671898495cd970157f1f64b19648a01ccb54c08c05aaa8f8a8f8a31a794e31002926f7e2902878219e0dab5278542ff22d06d65d94f61b5dae16948f0f1ed900141634e4647bbaaa4a81f6c94d90edaa4e1addea2b54c284a97225828477aa002bbc7c09b18d691834c61f06afa537d70e7c780bb072c25329953848f7f29a004aa4ca34a8f6dc94ad3681a08ea7651a1bda496e41ab4994c334b98da8fc0e00f2c83d26e0f8865e05f7b03234b8b16bfc3be97eced1c634b718618729df7000331d79fcd6e889a547fbeb80a0de327924fe9b0b817e3258de906c6c8aba8200760022ced37279fc033b2bfa96fba0276a77c6020ba506be4bcc0502f1c290008c06cc4d8b71696bbd74625ad4018b72f86e8241a6825208941604a58bf6c00048d01c0368dd477fab7fb2d3b343eb8007e047eaf4217497e032c8c077d5b8006bfcca1f64821ea828f61a50c5633aa0dda06c845b4a74abf628ced12558a100e2151222c929cffc01c6daede7efcddf663cc436623777cc098c6058a46cf700530f45150ff6a8459d87065114e26923e90c7a5c39813ed1261bcd525d075b0088122078d679000df325adf7661f2024135fa02aa2b19a335fbe746c825c76006d121ab4ee6a55d673a944e11f5775aa2e70ef7634b16e5a8699006e355bc400a02cd6514844dba8ac0cb189ec4052f4c9a9e23dc53ec649bfe5c53ec4346d00a60ca0287955a14c4e56f0c311dc6a3eeeaf9e9fa5ed2b81d43893b268db7f00d04fc713f8b58215f1840582bb64832dc6c0949d5afa6f2607374c1540838400d50b3f09821c12e880b84b012000139f8982ca027eb22c045304c51bbf73ad00633861a0675337599368a3a013ccab1cc60c73dcafcdad0f4e944fa060a46200f3226fa118578431b6c816d52c5f5055fcd3f6173fd53f9d0c7dcc81a1f8a000820ca4b7012000085f5a27562dd93a180101f4e0da810f07da1eace7f044af00d081f8583dbe9cd30954d43e8d7d0e097f1d0990fd13af736fe6f5a81db59b002f5a08cdebcda139b3a03dbc86b9e12c2e9ece23ca34a389e4b5efe90b511d0033c8cd25d4ef6ea3c3367e53ad146c8308552d943d52d95d58fcb53814ea3700d580601d2af2b4cc98b3536247962aef496693b6284c70a2733b35eccbe8dd0065b91c9d471d1f3441f536f3de5846e1142faf4f83f5306acd61c222c0346c009cdc1eee54180876b26319381c031baa5995d0cc52386508050ac94778081500d14bb780d23466061d4617dba377398b485ba9c69297e02bc54a98f48b785800357030dab2f22f701c3b80a0ece788b5c2e984807e4986164b29bee5f9ffde00f5677abeb99edb767331e545b2a01a56fdb4891c877a6913b963b086a3559e000bf85618b36c88300490a3a9e07377f8b5820a64a03f68ca0243ccc4a0d1d400c22852386d8ea6c3f3e952eed05119b5aeb6d7d313950f8b7db5bb32f72ba0000911e152f4c2e15f63fbb4514ed639478b3cb9f254229caefc79547494aa0800eaf9014f83011f35fc30937f5cde93df8d48acaf7e6f5d8d8a31f63680b8e40004e45aaf0053ae153d89fe800000000700293f49c3e520fd5959642b8469a6008786dd196268c7652a2e3756d512c417b94b92b2a054128898b894e17dadda00b3d22898137cac6be12cb9a8b0af7656115fa6c65550f8ae82c6e5840459e400408309eb1094942874faaa2e484c1d2e67698e010afb6c7c04d980b844f92300cc280204000007a1fe1602774e895cdfb450667e059426e18ac083f8ef6d38006417c6d02de28a7892e04d92255749f709a06cdd51b98db7f17a360096f2fc00e69d667e79008d46b7ce2a552e88f1acb7c363f8ae82c6e60518fae27693b400010106d2188d871e609fad8dfb20322b7d038b53b8f5d0ffc307cbbbbc63f600a888897c7ea024c6d489c30d262450ebb55f48e7d459d00694395afc58339700a9edc7b7c4ec7df904358201ae04809e941195cf65f83b3a5768f3c496d3a0005ad6412c64b78644364c5bb000b903c4d123b4d84003db36333138b844158100d71de69b3ac0c12fd28c461c3b54896fe3c978f3791cbe8de226a8814512a800cff38326e0b2d4d4afc7f0c3ddcbe0460956a2920c6a0b3520aa360200024000020f436f696e626173652057616c6c6535697066733a2f2f516d664844334e003655704a76367772544c3231456e3451584534694448634d343134774c346f00577170796e796b394177a4b9dae46d5f0457a15e3ce3da46b10f94aab63c2e009bff2c91e30bf364ebc1411a4bf45252a15be87b78f69cff4b532008bc368d00edfc621e38bf2519f8f849377cb106267061fc3a384245eae264c619cabfc500207279b41c6664da67dddb6aa06d5cb8065aebdf312f5a2040c679968795db0064f4f296d7f9a3ba163cab0e7518f9018f82f762841feb14e033128fa08f5e000545f4714434b53bdb5e98f6247408be35a9807f5a15c5ac66d85d21a2447100007da4f1a4d3f5047539ef7b76f248d890c40cd292538b84e05e50e6d4a020008a94ced837d256ce4fc1e0e38f5ce4b0dab7fb437fa80fae16c5761674d1da00f9055582016304b20904e404602a817b7e434a4c7bb5c9bbb2cf55804902bd0016862dbe4ca674ead4dcc4207a4948dc66eff8f39e56ba756d2135eb7736b30088233fc7f3391c41392545bccf0909e5cf4b410c526162627955626d72554a0069666b4c5376744374794379505843617734556f576475506a664b7a566d71006b476a7736324d0120004230783566633738306231363562366434383266630064666332306234373030373766316138353530323462336638363134346132006263373937633163346533613433620965766d3a353931343400415c190620000eb7673e2ec3cf4bef76ddcb14e98f85726d07d21ce982244ffb10392ddffc00abdee5019bff1b262cbdc44dbea68b4fd96efd67d390c66d019b0ac4c63b5d00c4343cf4ccbd29e4dd7cb8e978d10e5fb82ec25695fb10c442aa043871bca00040751a0318a8a9f011290ef3ebabb56e8e2d9ab44675719cb66b0bf522f64500e2f902ad5e06969a9465ab4b5f30aef8b29858ea2cbd6b0d0e6801020648a000c4b3fe934e7b9a0d1157f94ff939cb3714c441cdf22fa56a6578665565742300d9493a07c658b439b8446851ff1130dbf346f66054b72a3534cca4e657547700eac33109da74dabf70b0372641318b55e44b752fd4e017262ee5895e62281e005e2f22d0216d10d1bf5e47ff789da49686c6cc38998f76f78a12a59390824c00a6294c7cb2d6ef4cb92cd08c42481bd2da790f9ceab6920ecee44a22e5393f00a0335a3f427ff52c0ff8dd04336e50cc28cb44c89125eb58cb1cdec20cd340005519f9022d6703bbe93c1bca5a656e69edcd0d4e36bebb3fcdaca60cf1000300e36c040a8000000af5d790074c602b1c10a307854b231eab0a9c5b5a2344d200ab65f26c3b94ff444d789e6594aa611053705f7ed8c492a6e843a011ec9fd20082dfe548b86b128847ca544da6d3979cd6db1de3d8a73126ed1d4455f86b8100fd82f02694b8af4fa4feabaa02a09d146e4f871ea4a0a41c048084a66f42c00069c5c6bfba83beaeca6d0a99980686a119ddb5a066cfd0e983d96bfdc7b0d700c8a04d22b3eb0add3593a190e8af1a581da4d87b790e3f7e95e6d93c3d7ce2009247f3f9016f8286698403c14dc02aa6845f7e84b2cc1619c823bf4f6b04ec00733f2c5d250e92596fd696292968c4a03c581b216b0a4464bec51a695bfff900e78ccf2b0744c375d372d792efcd629e81a0603ea394e1bbf5515f19eeabd7004a46c079550ceabd073b4b1a841644b8391b870e0665471be4a7374584cbaa008657df0ae8f9254354174300b9d5b44917ec26e200c0b23cfd0d635188354e005901ec2bdc349e480a418206b3cf07b940b35e82fb1af4a503b0d685e5865100896ab8b0957293745ed38a2e89301491c001a0e84db449c539196679ec402e00080d3d81fd6be024b5df918be9c79a43cb098a4ea0513729e59b4a371ac35a00adb1d8097e68c389dfaedbc78f86f40dcaf409ce0ceb02f903f67b83060a01009480b90384ac9650d8048002200200a415feae51000001ccadc108e64a01c500817c325ce83ad4556955b984a0e4eb3c4449404bb2cce45044506a854f041500dfb174f8812a39df64df2ab5c080a0758c859737b512fbc76b11e12981646400ddd498be090bbb37144ad382294d380ca0670a1608217718227a73f6258e8d00d4da6d446c4509d19cdef16b09c061f8323802f87783082750580190339482000f64a23ee9abe42ee42f90209064078c06d56b86b5e620f4800084c080a0d700faa658df6f7fa6a055cbc5a411eac6a80a5ec643004e0f010d01e07614aa3500a043629e6e7e668d4efd2d26e9476854fa5c33736ddda2317836ed939285f6000940423a2b5c8b8223b6b6025779d541c1e77250898ea4d979ea9909b950fa00fb0427f20c935207347e1e1c20abedc040a02d9024ef19dd75d8e08bc1293400e08811ae50faf45362d7aa9818612d724d76c6f9016e820130633038666433003866353861396536303839373232363631383561333065353764653066333000313033633039306462323539386263643664373433333530663166396531620064313733313363316532613531663939386433616664623063346534653737003438653466623663303636646436353036346564373633393366316534d7ae00cd07bab84d931ae691015a976f8ef4f2b4e9fcb5ed57e78a45a0522911c3a00066bd19d2961314787f7c71da7b069a5ad96e10d090d1699626a2e44ed5ba0e006d02f90c1c8308275081d40c02b494a06568773a247657e7b89bba465014cf00857020938803782dace9d90000b90ba47cf7bd8423741d1f23cfcaef7c48d5000d18ef7380f6aa21fb941efc0ea148c7e001d1a94a0b0b6009024060a001020040800105a0058044295f843320e4f4e9ba15023f53048c7d3063579bdb0b9000997e18a770eae32e1ebb080001f4012436fdf363a0e4cf807e351b56720b1700a59094179e7ed9dd3727200124fe51293d20e4707ea9bd80023f70c62c8b8e00801124a4aa81ce07b637a3e83cb919000064c080a0dcd78511053ffda5b3f200a483384ad53b512de2fda9fa3597cc318d4a0af27a00a07721634f05b5444b0052e48efbffe3f80e730d6fbcd6c687f7367c9e45a1096839f9152d2f8402d90006ce830c8d1c946352a56caadc4f1e25cd6c75970fa768a3304e6480b914c40090411a32000000170100a288dc3d7e83fea20441f98166b15b6df0846c71ed00f97948054a974622686d053a9d2b6ef60283d23dc2a4aed7cf3e6258c54bc50001200506c00a400d400f60108001045761880496cfa2a369ec67a93c324a3500e693fbeea11c059401000002030e3f01f4530400649f8654220153048000000000242e1a7d4d0101043eece7db80c47fc0200a7e848aca42d879ef06507fca000e7b33a0a63c1e008001a407194464d1660f99cac1302a560a5a381e7133f800768ad9c95fe3e9f80180643afe5f02710001024401010104e5b07cdbdab79300bba14ea5ef85bfd1e9198560e586dbc643a02e1d80648a6a1e85353c1f0bc7008fbbc245b3c93ef77b1dcc5b77d2a001804480008306a14a4663ea65f180e20046536f903b0ecceb6888e0bb7f4effc4c85ba8c787a04af4ca8d75ea6e36bc00dea2d626a1b88fdd629d1db94ddae86620c117b2d602350a833b696f8404e50058f9830508c7086d696e74666565061feae7f9a128c62b9d23ef1d237c3168002ea6b6c62b3731d8b7dd674af66cbfcebe6e4dc82280ab47cb7b89a887d391004f39e617c15428c5bc9a287601657a96b1afb7270fe384847914f1edebcbc7003389f4a067011c32503f8ae9ba91729514ccdc31b33842337856abb126e35a00d2ddb4484d3a8bc1a04f276563bb8c20b0f46206f4902faaa37d22d45d58a80017990ca58e085e01cacc43d83465c3b373601106d839eab1315667c9c018fa005c35217000d1142bd66dc96625d841270a13617374afb7a07d3e16c2a5949e0094a57a7902e235cd139e7fbb0588c3f6082ea4722a63509e0ef903ef82014b0083069c0cbfec24a2cb0247aecc3acfb4f15fb11cbfd339deba98e1ff83db9900d404acf160f0da39e5b38d6d967fdde6c233948ac425089d37eb9b3073707d007f91d7dc3a18cdb1701f09a06b2f9bc94d1f3448edca229e114b1fc1ad4bb800a5445ab38def4bbb3b56e14935f90310830e53858403cb2e2e8305a6b494b8007591d8b0b93fae8b631a073577c40e8dd46a6280b902a4b143044b2001d6830063302080e711e0cab978c081b9e69308d49808a066d8aee40223536e602e370058e43c2ad7ec3dceb631e1d1fec30777800271753383df80afdc98dba5000000000a51017f87000075e85634c4a5fed09819e3c46d86a965dd9447d86e470000007606004e422b0acb2bd7e3ac70b5c0e5eb806e86a94038413c82a7a2361100cef20c3a2480208fd2add7590e298ec6cb0885785c915c87621d1b17c2839b007f9c120ff088f7ec41aa61a4fede1834d4ff798bb3fd634c697d352535647b006c3d49100e2dd4ece31f05dd5a6bbc5fc1e2b6ce8cec52bbbe5fc01ea06f03006b9f08a8af6ed1eed4267c49f69d0ebb0efce790e350fcf0fa86b2266ee70200f9047b0308c5880379a25f8f5f9eedb9040414d5300200026118a70367dfa9006b9a9952f8e29078d41f727fd3ace295b6a6c72e1784b0a50000ccb4000b6700b3eda2dddbc9d6d41a8faeb39e7a34037999792bc2a4b10d73746172676174006556324275730f6a756d7065722e65786368616e67650d08e6639d9eed750000c080a082862281e5c55065794e148dcc0eb032f1eea59c99e1c5226849fbf200e7508367a0224fbb195869d70d9ef4e129d26ba9db4adb6bc7d3d8b8b1c9cb00ee83f9fec376f90373821f42840401f4988324ef6294bfe03c9e20a9fc0b3700de01a172f207004935e0b1880b84c09a3b930000b9030083bd37f90000000100080476c9c7010083120001d804ba88371a3f00ddaca03cbc2b6c47f38105fc00000000012da2ca07f420559782ca1935c94526af8a3454da00000000150706001701e4f6ee9d040101002002010201000201a403c9b677e3000003501e21f4000303040104050012032f13e415090400060503cdc6813a060500070501033000121daa0605000805010206050009050105410ab07e000505d6bd0e8e060400000a0200040800000b02000103d33584030201010c0500190109695df303020100010d050012012a2ec28a0902010e05016636d1250602010f0500012537ec54000602011005000178cee3ce060201110500000802011205000a22020101130200007ffffff3080602011415000605020100031600ff1afbc62f221be90d82e000f4cfeef011451942d6e1d448ac2a2d9c85010459e5f5bf81931e5bc40ec3530004b39880c7a0b752179d6d7d9ae594ab4c02d6e5b86e13a2ae9fd9f40f8cc700d3b3944c57f3919c7fe3ef7d24bed8f30913756b309006508552fecde5381b0060a24dd2079aedef3f98c28ca1c52798c3cb873af6e93ab55a78a5ed01db6c003be3af332b5abd3f83ffefbca071347df469c4e64820c95b01b957be1d67520022304d1c09370a3922f46b63d6024ea76844b9d1b49bc6cfaeb9e478a3209500d3190a0d79099e59ecd8d3891afa9d9b9d6562653d5be720cd17ccdf79ced500fd02af299d3548b4e35ed6163064bfca77eb3fefe3725dc33bccb54edefc3d009f764f972fc5cf65fd0a660801f119832b2158756968266d3ca5b7e8e48a7b00f3854c2168d6a722d4e640d77d8675ff7d2cadd1ab612b8ad5a07dd5ec6b4200db5ffd4b26edc88f37832bd74eaa22707e3dd685fb4e8f0ea5e347f9018f8200621b07a12094345780d32d3b138660e9b67ccfc3e196bc3771a401b901241b009eba0cd3ce00000201012710260400a7199cec178105bcc4cff05f395c9b8700706f19f80c0a4b2389e894cf3381c763cc78fc3cde247f7589b27b0bf6fa0c00c8ae2e22bfa0356519b229c7c42507e0a1a9a9595dae5d51d93d1552ab4487008c47c21de066703020e88d299a78ccdfbe155cbe98fd97848ed285e894635700921d9fedb940c34f56a01fad80d4de2d3396b79e9ab135170032da87be8ee2000fa317a2bde214d2eee3a70b830fd5dd8404d6476383018a191733e94c532f0028ae8b90666c5cd4aed80d1495dc6f190d29ec8c18605aa3828d2f75602d5200b15ff45842aa292dcaf94988efb63e2d0ceecb9a2ba13a576f3977b10fc4ef0063c827f101edc5286afb6ebba13bd66101a075e083a044d5970d0ce742f2ba0035948275e8d1f5f2527d1ca944d6d890910862a01339172899fb819ed04a45007a0f60f039790c589a1eba236b715cfda07a86272f02f882011382eb920000000003ccd574c080a049faffe2b957e91267918e00ebe1ceac4f70a6b72bb8b8009f3079011aecf7b91ba022d35340badbf47b3a4784ebc3427735d0e3dc87dd004c3e9340e76ede4a2d5d52f90270830e538684035b6462831b24d094cb566e003b6934fa77258d68ea18e931fa75e1aaaa80b902046c459a2838de71124f7a00447a01d67945a51edce9ff4912518066d8aef60084704316e56ee1adb4bf29007e606976bf83b27d3072cafdbd8d1708848eca80b154482e23dd691482897800301bd493ca42ebde0def723aee22b6e8560547be1c474243a4ac9f4ce5c47f0065122b88e92afbc089527c1d833e4035c9dd21ec81ff0cc73a2e3fa20fac6c001c3aaf1c57531f5124c8e483e97cec10aaf1d1518644ddda93f30ec4e2a80e00d012006decd15acb187167d424e1b852e7b7e319e1f822ad5cb879afb77da4002560e1ada4b23fc2256bed590fc7a54fc284eed9559447326a4e561b20a4c6006d6fbeb2a0082417f042772ea368b7fe4484b4b89edc01db3aa410fde5945b00d3df9701a46102f9025483082750498403d61c7883090fb7e48bb41e5704dd0043cd5d1e0a86f6462a25d9ada0045468c080a00c20a9e0dfc570445acab2e7009aa8b93cb9be10ecc83964831d0702149dd4b757a06bb493c29c19a0d993c800bf6f23609b7c81cddbabe161463e90cea71ae5cd523a02f899140296af94600052c5c075212f013c856bff015872914ed3492a867723da2e1db1a46a62783e0028e1471c0c435746079d2de417306fd3a608dac001a08f4c7ec1d5242ef97b006826fa5575145a22738f1ec631da3beb221a28ea57a5dfa040d4828dc19a32004bd914c8ac052876a38f1d5c227c32415046992889209e0f6cf901d43b8302004f266d1aa44dfe55c66e2dd413b045aaf3db92e8bf923b275594602171653c001bc65c8fdd2c9430966a136d9e91fb9ea4fa58118d72e97182535009801680000335ad14a4950cc4e5f9e3b36ad6b0e64d020419357f4ee91c8821d97b404f002a7f87b20398064691dcfa9425f22efabdf3944e83ead44d13f3a06010fa0900fa4cc0bfc7e5d324a4f74f20d7f4a8ef00b96a4255d24d1c4bb34dcb02f90700335b04b50006820601020100184c00960b8a80604501143801024c3437563700001c840105000000c4d46e8402f476f269c379677c99f18e22ea0000c001a00099902376ccf9b09ba1f1d6c263bd63e77bb812b9dda2b33ca404ca18c17183007fa047e9f00e93426302f51c3d0c93b952f6e2f28782540cb05a0b147b6573006da97bf902ad220f424094546f7e7257963dcfc3a7885e911e47b76c05bb760051d2e6e6fd5864ae716d2b6be1f1bd12013c78feb68f4b15dbb27b8f8ffd4600b324f49a8f3a19bf7b61b3c1c6b9ba61d552082f7eff3cddf4c80e9a56323900a1e535c36c7ff6de2c6cf0722cc3b6ae9df8552de015dafc78735d3b63e536009975ac028ce261f42115939448bd495dd1ecdfbd29be9eac16242fd477c45c00d8c3a0a76484d2cc0bc762cde96ea1860ba60f5f2737e211513f6150a4471900239d3cf4a01c08f3cb134e27bcf78c1b9a6dbe7393c7de33a9bdf0bae0baf200327c5f90e51302f90112061a809411fcfe756c05ad438e312a7fd93438153700d3cffe80b8a4a415bcad01312d02e56dd1266d08d6e8ae572d8ca1ce7ce30d00ba8aecc080a0d7203cb596498c6294b9588e41625b7f2cf7a4b510a0e7feca000854ca55bea4eaa0553c55d501141c730733a227157b7f8c410872b11168fb00ee0452f7edd7b8dde9f86b81ab6e097633a9ec8bffc7dddc1fd59d43c7215d004df18688f33bdca0700975ac8533a04d606d97a15bdd78535cc094816d14c900f4b17b0f3443034c28c08c157397889802f8f283082750730493e084573ade008102000000b5775c3984d69979ddc2a99c4addc3c2e3ae33b5c080a0934bfa001d87756ee9c0d6515244ef78b348dbfb9396a56955f998a5cf2d7bb893a0450026f776b00e7cce8840935509124414402009d847d9ff46ebf526f065e8b22800f8ab1b840301342282b5e89478ea8e533c834049de625e05f0b4deffe9db5f006e37635c610bb0a135f9dce97f992fe4dcfad68d1c678e0c02cda5c2d301520060d6516d23d1eda0601ee26531657ef1c933419f585f00cfbedea316146c54009fd59187d0ab8a5a6a14ad146c8306c05ba8d3c3f7be0664aebc0bb9c67d9f005de0f5327bfa007e69c001a0b789b14bcc0b82340e633a1f6a9b1d36b7afde005987a3ee5c4e66c45e829f0c40a0112bf41dc7cf6d3904e2dba075a782a9e500a669536b46ce2fa12384665bd96de102f8753fc48312cefe84773594008252000894d4c4a424defdb8a508054e559c4f0364a193baea870efd287c4eb0068000c001a05f3d33d573de6ccc14f409282dcebbcf776a12833955ce0852fad3e000779a9642a049eb327b9f249ab9e26013457a4c2164757b4f8e11858969acf4008c00f571b9d102f9043b01d9d9f7af8303003539922617e5ef305c399ebdef00a48e8bbf567086db6b12c99c0a66d80de651f2ceb7ce83f16ff4b4331a290f0036464cc6e90c2c6408496e6a6563746552453551347373564735696363567500674331624c6242664c6b74417958756d776b4e556870616745474e4e7798350061ffd1f328318f28495d57ae40b64ad7a76360888a14cbdaa0b1499d3a292200b89fa303e112a965b059f62193440088ffb6addc6673a13eb28dbeb19f1a99001cc001a04c3c6dfcbb57d9ec2e135a7512841750a230339a0461a2822873a600e650069f42a015d03a9cff200214a0ca0cb06e83a424e90084cb6cf3e14f5700ea0ce7b80dc594f90a0d5b84042c1d80830e1b9780b9091ff24b1fa1a2721f00f36dc889e40eb29fe2a26090ea322a3d411bc4539635730107e00960200240008020010360aaa32926fce6be95ea2c51cb4fcb60836d320c4200006466eacf00c200411de795a965cf1d12116cd4a79a7d504b79b0aebd6dc58cbae722317e003f8eefe376481dfed2f53409aa0a7f870aa5d545816f01b4e593b05fc6d12500270734396a1c773bac5cf3d165c27cd2dfc2f8043d1a2e16b6464da764727e00cda3487b1b7464a0128cd76ba3d0be08f4e874f313aab81fd4fe67533ee6b1007d58cf4f2ba09ead3a02f902d4278402e577518402f499198304133d0264020040a001140c451aa7094fc52d8e5d272b7184d4586e2e193d3bc3f749124e800043606f205ec001a07e8e02a3028327e7497c5dc96a37eaa10bdb9ebc5ee41a00677704d8cb837c56f2a0414f770cd2b2243f0a44aa5e39052acd7733d0233d000f492d45e7afb68b76097402f90337ad146c83026c3d012241b796264000b90002c01fd8010ca37083ecd8d21fdd151ef9cd44674bcd80d1c35bb2c8cb7c6600b245255c5a5e1390c36c2e85850116e16eb441f8fad9e7e395c97a06616372006f73adde14cf77f066d859f380d00dfeeddeadbeef8932eb23bad9bddb5cf8001426f78279a53c6c3b71c001a0fb751792e727b8561ef1e605f691caacaf13000934aaf1d7a6f7a442429b2e80bea052be1493bf1f8d2508ca918f7969abc0006a286131f0a9b7007fc868876ac3ceeff901ed53840360aef88302477d94ac004ce2268c21d36846d9c2519d1dfd431a030f4880b9018484bb1eff100d04e2003d682a850721f50938028c6b71d001800165a52fd023e4f80d3362aa3a2d50000a7a56bb2160c3f06df93423619ac8f143e3a022d1013fe5cae569968c383d00252bec6681fa5f0a853f8f7d609df406a884ffa02882b5c89422d473030f11006ddee9f6b43ac78ba3c001a00964abbb953fdd35151ac1d00afc88331e55aa001d245bd9050de7172ee94bc2e1a014d7993eea39850d1a4ee70055fa74e0df00892ae3fbb189a1dd455d7e2796e57502f9087c0e12d90b830770359488024800fd7175592cc2b90804af53b62968e4dc5d6395301b22e1513f82b6863066d8005f7fc75319c4d0f69380249384c4cf7ad96b69dfc34401000aaa050a65c40000021c3339352e37363933383334313334383637363339362e37363336373339003236393838383535524a53524e74677063594b5574686e6b53303643687279004e6b3144312b2b76745162534c6357306c474338754133436f34635661754800796a71624a52377543507a333971746e377657386d784c556b30455a79544c00313673666e6c52496e475047534d4136626852336f2f477871303374366d3200434a78514354723756377a79435735686e4a6c744f395a3032362b3949316c00547a6a674e4659774a37354d30785774425167512f6556786e646f46794338006d56516a35697936714c4357595a524d4a6a6d675a6e656a7336692b6d327400344b715833526e72456b5647704f304964326357366c5533393069544d6a550045354267655275754c6e52415665766d6f79644c53392b77385751465846510062303067536177684d456f6642433230315533332f3472387872676a5a2b63006e75664e4c4e366e37507a77335a50444c4a54526f56386c7844576369563200714d46596c454444673dc001a05e31ac6d3cf52be5a40f76abf54236cffd6b007419dc0e0acc088e565f0c9aa10ca0218e627d938ad521d3bef98a0067c2170051ad2d75bb09479d57f79934913a10d002f90214ebc3543a830a8e17a4a96c0086a4c8ee98ff674fd3474e5e9b4bb090b4c660c001a097c803cd152a0948c8002b2c51f75cd047748a271edca9cafe116b13b91ece3297a04544680691ca6e00ff044db0ebb1e35750f6cbd57b04b21ab7f725e12ef04269c8f88d8201e7010000a7c3a02ff317a909d967286125f07950d71acd475e909ebc223e076c61c40038d130e382a026d80167473afab7b4507bdd8574f1f868e8ee7fd428166c150080f2ecc41803d85c83010de0946e546a1e07ec1e1f3e3c353adfeae53b74fa00716577a99b8b522e2aaac4f59180a044368b6fe620c6bf20458050c52d9ce6002ae2ee907fc2d490e638ce4bc81e31aef9012f830f1463053db49480b8c4080094edf100405dd2acdc71211640d096ee871f1a83e5fc5ab0f1e6730e85055f001f2a54b1223da02ef258556abd7ed76feabab4c3d80dddb475162bbb60d6020052e9bbd7e24aae6b31c2d20b3f1666732be28517ac9e04169b8b663acace2a004f53396b6bb410811bf7a03dcea7e1525b1c76473c56f08446ae63c10cead20038b2e3ff7047434a375fa90202f8ba830827502304c9018822422d1706ee440019b844f2b9fdb8c080a02d10db996c572ee7cf378d97ca473bcbf60e65062f00eb30788acc6a161a2a1540a0322d5156962ff0761cd95eb68fffbac553c379002f451973165454739e56a07e4602df870e35fa931a000080c001a00c9974f3002bc26bb6398e2b41d0bb07164fa6a566d6cd42998adeb44e1f657d6ca00970006c24e7e420230c666b630089350ce2af2d783d8fa501d10b4bab5ceaaee63000843b9aca00843ea2b10e8306e868fd02c63a46eb9b234d8dbf9b0f7b24e53e00813c9cc584f32b7f40457120363e620bbddfad2ac6877a8cf7f0bf29bfe49400516ee71da4b0b95651c4a876338b45cedacf4e413e0a0da904853a538c70a5006b50f8132eff9765b7b7926cb27b84f5f48ea0758fa99da3c7d6c001a08d5f00a46536bfe4f7aac38cc69a25da721e5758144080e7739ee4ab24e0d85197a00053a301641dc94bf47d33b5803b275db6f39fa9bbcf1b1b84cc0cf3b2d1cfe7001181b7830907e90641bbba3763b1bf095bf9b6a59537b0baa9795fe4787ca8001c2f53d905aeb86a04d5d41563440d7a978f7ac8f0aa13e0a0ac6e753e689f0045b7eda58c817a02c5d0cb55c3316a3895d27437a32a449e9fe11613af6e8a00789703cb69a521232e884812ed4623a7a7382b5946766b6e443e803ea6f71f005864c3cdeb73b08e629ad4223b58799609e6b819a022f2869da424e860da0900123985c0869410da44117aea82a035656e2eced5773bf9018e823e9584041c00db4012fb84bae502ad01eeaea43bba2398a64a3f08b105f5e1009402b8f7550032bb2d7691cc00b5a35c89f3e67570a933c69b0f268a5d4fa1ae90694346ab0095f355da9fb43ade6586fad91f3b12fb434bc6e01475fc5003138a8bd653de0033adf1fc5d134fbd20ea9f05ea7b3e5f3ef6ac14feb649cc0ed4788000c08000a06f561755c789cb11cf2169654d8cc7f273dc5f92c3b67415454f6de492cf006d0ca036341a422b268d6888e202405dd5c8c6813849a604fab68a952fcc62003bfe1bc9f9043481c5564a283337adca44789d061077d3a5cb0a2bb84ce34f00e92e3b32a417f04dfbff7743e4961315667c6eb00086be5640fb94a1db64e3009c4551a1a6d4c0f943a347fc23514a67796a455354524179793339426768660059357a375073656865574d6a6a334e794d48324a3137576864505252b6795400108ca6a6a3af3a850372d74a9ab550dfc188f7a8d72ea93bd5995dd5376b3600609e2e24059a9947a243042beef181952e1317b61be46daeb8541569fe101c00c4a079a9a1554e7a37a18a5465c7f611f59bde29ea725fdb61f8bfcb15868b00e425d0a05d639fa719ce79d74ebc7d9c72ca868654274ddb2a87a6109c1d24007c91fbeadce385bb94f301805be1df81102c957f6d4ce29d2b8c056b2aff7500a4b698e3ec95e608ac0f22a03b8368e05f5d80a0c1a89087ca8f2c39e5e47c006112fcd3557ec604a85ec3fc4e41b04b2adeee4c9fa0395473c15c6046cf0700812c5b8285df33e4b067df6445a96cb44783433d4ac95c02f8468303c34c9400877ae3d0c3607379b864474cf53d00478c68b802c5860242e3c2d258942cc900f326ffd8c080a0494cbd493d79b548d1f42b3f74266dd9c01a486e4357bf0300a2af209697cf5371a030e5181582c42a1ad2819fd61a7913420c42b53bb9040046f1c14465ddcba42cc8ace007b06525875e3bdeb4488ce14c1f8ae095dc7300d6248e0a359a0f097adf8b5878b7101f536d7c22dc61582a9f0955314ee03f009ca2618d13b0a9826a4028725cce5e6a8c502abaad07c8c436823b0cb702cb0087e1a380a07ccb84b9ab2e06a5106ad84929fdce0754c993a1cf922a39251400df03386936cba05ab9cacd2d58a9e5863faa9347de45c51f92da8568528da5008e0621b0637b37a5f86d4c827b0c945e809a85aa182a9921edd10a4163745b00b3e36284870b8bdb9785200cfe8498687c623b00eef87e67e07b7d0128b921001e86905bacc618606e220a8301a0199f674afac372d3b7cba028eacc0dea6f009507caefaf2a305edeb5478ebc6a3002f90b5536c3543a830834a380b90ae4001dd86f1c02e3a061d711e42ace1d1e686e9245f74795da3433aec452fd75e00066d85f690909640406e0030380200240aa293da2a080f088ae72db6d1ac33700340cd6aa0eb1f67337cef40442e1cb0bdfb496e8b7405d0c1c48a81bc89740001b96cfc0531dd5e500000002ff7c203078df990102e2e309ada352de00020100000232686970706f2d737761703530302e39323237333732343237373732350030312e3132383431363936313334373132303831383633343938363937303600363033334859394a5575666c6d626f7953446a436e536936436f4f674f397600692f463550575650673463437736397a4e486e6d345765663259516e584c670071314735503941502b324f57327130477861596f344a3574335170394e76640056337446415376636c534b3934516e6849366c34307a3463526e326b3767680038336d413341673449517552584c484e44654e3748336f54706153456d4b54006372506542566e50664c6e3776765a6d4542757754545335334f2f383155560078576e45354b79354a7377566c6b515a51655377572b4c564a72634f62653100694b78316f453950703936413230613167774f624e2f556b496665706f4c56006342626b42535065512b4137634a6b517a7844504c366374724174584a4e72004c6e644e474c494e34376e2b794548374e5a7a63346e78594f6d43432f594c003233767641544d2b32756246626363345777586f48726a31644570646a4e44004b46616dc080a0e1b685c7b9a3aa90f272b943208a4edfc3ff33c5ad30ba7100af4f7c76014311bba011df812e67bcd14f0857591611a0f607d92868843ba0008658198738a5fdc9e8c045fe06948499a8bd1051ed3011cb79295d7286d5c900fe8af91c4d118bc2814f62a8fb4b15314cd6c07bba0bf67ae1a3adca3474a9002a9afe241613c74e0a4835771e8a72396b6d97f6095d68bfcb486fbba05d660072ecf200c1d1cfd5c58e6990895db50c3dc4cedf727a8fc8c60fc780281788008c886b2b4cd1cca2a8f6e8b88d0b6312e7f10ec881d3bdef9a67f4c6a5070f00fd9a4f7fee80a008f8b391a86f253063aa6aa2409608a14d31658d31d3f1b200530ac55889f65332a018290d97025fb3c2671b8228f314cf52a4dbff8e47c20025d2fae8988de9b5fc20f902ad41d40ba99455139cfdff6ed7a167077c3c93004d85d69eff81497805793703e04797b2525f8421c4e868997608356e02b83a00f31e8d29e1e14acfe7c460ac1aafaf485c66d8ae98fc0e46977daf650b18000041db20155ac66277b1e46acd0e855049d632d65cca7bdf9a3d5b7c68431fbd000f894c44d303974ab5a018bea77c0179d140a54b061f2463017d679d1ef09800b6ccb017ae18cbb3aec04002f9017a830827505c8402add590840404c05883003bf0c494d6238ad2887166031567616d9a54b21eb70e4dfd865af3107a400000b901042f73d60a6404667265024652c001a068c6cab3806047420e63f429a200035ed43ed73b05162d046bcf3ca35908c60fffa03e78fdd4f44a1121c0008f0021b19f1c87114bed9766910821dca8abaea86ec5e2f8d28301a4be84048b1d00d083082dd2946c1bf433a7c8549a61bc7818adfd8fe34083362e80b80e6d0000ebb2a400005dc201273a1e2c100010c95304000022d44099df20b33482230500c469b8a272ae2eafa7c801fe284f4eb5cc4c2e55e4eac6693bf7a06dd4da4f008a1857ab865d4763a9c30c211d17fb9a2cff27263da179bc6d6181fc02f90300d383082750068304cd3d9489ba4039841587b0a4cffdf17aee30cacf006f4d0080b90364301a3704ffc30e7b057d306057e4600066d85f3fab5819ac14dc2800008e63ba0b8159495c06acde9e02010020006000f31271caba4bf23f8fb31f0097448605d65ee302ca5100c080a04b58d2dac9257d07f4f3601d01977f7035003fbd57c7e651987afb130c98bda143a076939675255ea9d908d32f3183cc1e000183a6e98805e04547af699768b4f6f18640860f7327fea7397ddfc001a0ee00f2b4db51fa1bb7e72f89a4f5f0ecbfcca33ab3934ed61ab33d4fbc052b871b00a025f0552325ab7e67e5a04c1275b6e14130e0b983c595f719977a0deab3670086451c05466404656675de49f761b246d7848697008c4d18f6de2a93cd38e0003d247bac6318573a49b5b6bfabbeb51b476b4e6c8cd9ab5ab9e9dc9941233f00e750ebcc29a2a6c088eb99768ca6a04424a733878184e77ef6666b57b6f260009d651cac8bfa802882f056cd6cc1ae7b9413ce60065db562e9e5c5f32308300020538b97a0151a60d1bec38201a36f03d03b0ece9b7105f2e7d85d9b520bfc00669a1114927f2bece2c001a053355de372692539da2f70126606b1c60aa6e50091451ef6e621fcb57fde093055a028611892314dd72b2b8fa927e0668f2bcb0052c7b63a85cde7f8b97eeb3e08619f02f9021302ca1801a401010120ead412000ffff5433e2b3d8211706e6102aa942089693a00c001a07b4ad9060b29005400bb1d7b2801dea3ecc471f4a688610be98b6294e95c7247dca0563db1308510001146bebdd18d9c3f5ce2bf142c88b3ca443f747243fb53b7020802f904826200ec0185174876e800a9ed9258de15cf5dfc8f85de60836613b02a716a80b90300a4c980753980026003000101da3e80c092eccbfe8a3d19aa5352db1700001b008804000704010503060809020192f8fc10930dd415b529c5690cd4e00000000004768be3ce5e84e7062d87096e15388de3394baa8b7ba48b87f0a68c72c26e0069b495e86fec5b3e4fd7666247349494ef39159335e84d62f0bf062ca2d2a10074816e482d7ef0cb1072de364f1737a7323992bca365de8c25d25032e0905d00fdd54d04d8da0008117f8952114bead05e9afd1c23064fbcf03fe006adb2e10087234304706472a336a56a50a04f34d362f5d6083c270a8706171a0716d7d60061f43911f105976145dc80855e55d8b6343e3a0d0af472c8536541b5d7e9cf00402ec34098d613a8c8eaf03a4f72abce3eca65ba6fa70a227e068afcec6f10009998f476434e60648f8ed28b16152277306c3fe163b750308dac8082e8176b00bc3f6c871243e519c080a040d09076d1dde6a52a5654d3904daee7fe046f5e0049886c057210824c2d791ddba0434be282fce09a41555a98ff8b9f48f6ab2a00929cfde807074daeff46c71de0e302f8709f80c001a0646b871dfe8996493d00303ea7e0321e166ed66cbf75310a8cbb64462eae3bf5afa04e05381113e61e00297cd0242f9bb4cb5557903cac3089e224fff6c2e7398d1cef398402d30009008302bf222105a5c8a62f221adeaf8a7c0bef60044861d9c44258d15e1762800058c1036e7d1ed720449bf14e424143d083aa62bd3a5a60f0192352eb7fb51500f80284863274a5ff386da04943082b484e7e609942beb85db204dab9590d5500dd2420b20e4b4694d2553865f9023502c7d48705eca34ddfd7c30c030308030008841224874e7db4dbf650148a19748d54973fe790fae5040596bfdc833d0f001f49ecdb911eec4199430466894c1bc5b6a0021c09431fb47eab3130d993e300c2270fe90ebfa2c736a84de1e221ab26d0976b1d830ebf5b8403c6fdd6830600a48d1b651579f0500b83db4ff360e2d9dd5870d1b512fe44f922eb57bb980300194692443734f50fe7d297a3047aeebe3694de3d57e6c775b55ecb3e13c1d100c5d82a2c06e02818964e00618c6dbf3a2034ed7225feb73720778550fe6a6f00d709c64dbe529f2942ced4c5dd2e1f7eab03cd7f4d98b141203867a070fdcd001723e69e5d9762802ef958e8003efb06dfcd4085f18b7c3a534906a94df90100d682011f01eaf40304eed3aadf0a843aba2b22ad9d184fe3cb948a7581242d00c89b7c21e3d350167cbf0c5e002ed95f1e552aa827d119efc6795f5e4d02c300d9adb7989dea636b797eed1bd527fb9bf70cfd7e548e59cd75c7f7d97445d1006122263c9192cf5e05e13ce7b4a04c1f8cfb098dc859a1f996a7358984351500075bcdafc2f32a732714c4ba8a4324f9020d3702fef80000e2fe392de4fd7000b70bc7f70b3f2c46529b0eff331f206ab61080b78581cb096d8e56b3bb0fe300297e0dcfa0255e6c8a823ab984c14a68af932f570f8795d2c20e0b074baa93003850637596b838789dd478098e41c001a03644031348cde4099830018b9000005ae94f7c386b1faa73ae355faac325f4d2b9a07033f2a2fd00b7a9e14476b50012c86c20280241e10c972a81d618e606c4cc9e71f901cd1c8303236e9480b900016453c43f155304a490e07cff0a3b33fffad9170c5f58d15d7d2d541de881009a02140c70826edb1b64543b76d9be3feb4e1a31a523744f12dd16a756a01500dbf147143ae20398729fc51ffc907f51e9630dbbd997bdf928a71aa2431e4e009005d6330e8cab0075c001a068ae0d68fa851aff8e0847fdeefbac2d840f9700fca8878733fd70fc1a5864a15ba07f08fe4d95febf83ea34de72653ba057ee00a562b30ca0325409c46968a61e69dcf86f8241a7825208943716af0a01ac040084e10e2056c708be3ccd5563ae87017c2b358423c3a09ae2c8a517957acc4600d58d3badcb496a2828a30555bf4f5d7f6125b46f65d166a002c46cca02b26900598ca4d176b2e18ba0665b96ceccda404885ab4e98f0e4009605a887588159005cc4d5458eefbd991b5bf4252256f05eb0450efa43661f5d669c35ed62e18b00ed4d6e826508fb1da8f398a9febada41e6ee684e62d5a7f17b3ad26b1f219700a1005ff26ecb7aa043e314c1c1f59e1e4adacdd2c71ef58564794403a3e43200f8b5bae33abb4f370bf902af8204ef0eb64494850c116ea39b49d8714be4d100deffdc1009d66c48a890d1cf6ef4c62a5a352f952dda4cde3ffc717856c2f70046f565d745e6d25c44101a0aebf2f1cef251bd803fe16bc0b0cbe7a3d961db0098353a3df624662af6915a31c528075a3c3821b683560571016ffbed37a2e600ef69f677a2bba38b65725ad247cc4edc45519edb2f942fbcd37693b2f4254f00ee6e4cd70508e6235a7c343fdf027736657a643d0ad188983042edc7887b35002c7b0004db8fab68bfcaa03f6d52fd616aa741a5f0f82b3de1e7e4cc704a4b003b206ec4e8991a0efeaa74b6f9030d4f83097c739480b902a4e06488d527dc00c0044a352a69988ebdf8c0d466d85d2842e7ab49beb3c6981c8c0303a9d1aa00a86398cda9347e941e92217ffa288f95af1837f6f9f6f3c657f9cfbef0c3b4009380161a61c325a01194ee1c91c4bb7909b82edd241ec3f363578a218dc4770025a3770ea1a004cebe3296a2048d0038b246b59a565fa6fd2e7e110506e5fc008dfc14846e52c6c6a0cd27a03c949e1066e041bea331d6baaca7b972bff9e200f66c5f2ab384200d585a9badedf902af82030505972e941579792112777ee100887ea2f13c27331a0a0ac5761b51037be3cc7b490c0655eaca4f88797f5d2500fa3a7253b6748c14f016c2f489d9781476d35cd5507fae879c5b0a1f83d5050088465f18a72ebbbc832622b9e3ba5a444ec1c8106cc1c79564fa870e73300b00b57db4b0e6d69bb3402f7fb5ee221c72424c415d337fb8942e9d8b1efb49d000a1de45bad4ed6539fcfbf98a7ccac3a0680ee4aa1a27f4f2d8c450354cba4300aa940ac75ccb3bfbf3250a9fdcb24aa978a05747ffa5428acb53095ee25a6600f07de8c00fd31a42c0f4a8e90751f98e7536f41d2617b263c001a03bc393780066ea9040df4646d2c315b29854c5d411440ea2c8330dcf0808ad03c2a0402e002467b9be89cffb5ad90f0ae062bac43ad8cef24e38b3e7ea2f7cfb9d64065a008403d4008e830985be9439fb5e85c7713657c2d9e869e974ff1e0b06f20c8000b902643c042720d57de4f41c3d3cc855eadef68f98c0d4edd22d57161d96b700c06d2f4336cc3be01b9dda106f366f965962a13a5cfa5896acc01dfa68dd8700299940d81b67310a443b07f0dd8a49794fd2a7ffc0dc98c2ad8d341e34f1f4001001cccb67f38fe49a2c69c352b8a1d62eed22ee3cd81ee91f00dcd90f965f007ddb6ea9767dbd9701b56d9a6aad950de482ad003dacad961e5e2de850f5e00027c70b56b5afa5dfed07e7c080a083b2cd7a2aa8e8e21cb81f344cf5ce170f00dc2f641f78a140f1c0fbffa74dce79a0638ae5505359ffec5a14a97e2202c6005afc429717404ca8927932fbd4b0520fa702f9018302e7ad146c831034779400332a9523c41b87dcea4b602b63f0a5c70a881cbb80b90180bdccf59b82e294000c9cc1952d480803035d3a1ff2b6bab83b63cd9ad0787074081a52ef04320100f4e64ae4128e725868e8fe52e771e3d272e787b041520501a43200fa93b77e00abf65921477ee1fbc1b3833d7071db1797000001c001a058197d97b1062222009e709d25d8ba346214724b7b6e954bd6c6421937463d335da039b4744acf94006c4761e4aa13d9b111b093d0b2a665ed490d7c0ffeefcab20fef02f9028201004702cc1a879fdf42f6e48000010105b445dc70aa6c164080a0a1a2c97a8b0500ec4278f9aba5cba11f303c24e50c023c313799fdef4e76d96f97a05ea712d5004ba835d8cc7ade51f6c4b8c70f536b62695e3e70936890784b98411819c42100943b7607203e7532884cb72fe78abb12b139d5e7281b527712e2beeb0d48f000824db1c89978b4f6de1343e9daab10bde98452331678ad64ea19e37d89ce150088538ed78aa66900457abdd39c648ddbd9e0348361d58166c8a716a02bce0100fd9212a2e4b54728ad7d4583d9be06f95ed3eebef09b2b46aece71f600dda400781c3040eeeae33d1ad8d954cbc3090f45e1466851e31f01a0e2da621201020078c8e8e0ebae0c3e13467868a438286ccbfe34730b34ba9a9ba8a07bd0cbd800c9c30fa1f12ea10c5089c68b55d6129e1d3c6034dc1002588333b5400300e9007dde4f8be997be5cc4171f8df47f6d013ceff6f565785d5223d1632c4d78b200a023754d0eb6fe834157706c1abdeaadd7a475084f6665bb2b43c0d7fbe7fa0073f4f901d43de1932726c270f4e7f74a1df5af9fa88b549d1d480607524df500a1bfa41f2660249cee7f879cab291cb7477c8736da23ef5c8687b89bb4224b00bd4ecb0f352690357c7095d565f4713ff62e03e960a1dd26b71df0d4210a1b00920d605cf69afed1d2a2fb0a29a1d255cf590759cfbfb4d630e58c94920b4b0061a008f157aa736fed071555740e6a9e56d27814803ee25a1e9e8052ffc283003f92ecd0ad146c830713e29432c2d3211a674126efb382c08149006f58cf5200fb9555049853471190077011ee08c949766bf30b6c4fc9c45b1ac5c39dd0ad00f16f44e054d28e9d6682fd0f7dc8f30c9797afbc32b7cb3040adc3d871d0c8006c1ca56f731ef16d599ac02445af888e593b4df9d76253e12ca2a730ef23da00040faacf237e9394681c9cb4f452bb483718ae10d3e8e5af366fd800d9389b004822a5e76d24e4aae87e48ea99efac7c2971045bd15339e4cd0e373d2eb3e6009780f4a041c2b6d6c9dc3b7308856a06e3c33736e9c2bc114f4be2baf7581300f14bdb7e163608bd02e425b8ddacdd9e87a4ac342fb0d505ec515f849518a0008debc080a00233302dd0290f5ec2e0d4ab38955bc9cf0ec4d806602686214b006efb7af6501da01b099bb47671c6db8c0bbaf67ced5880a495912df1d56deb0025a1e1033dd8d9c6f9138d241519b51324009e98930f3a6197b069d00f61c200414d58c7d80ad7f50b44cb269014cb5d57be5147dbd903510640116012e0030002030203000001010360a0e0010101010360a0e0010101010903c00405c007000901048e693df5dc62acdf75cc7ea4d93c69b2866d9642e79d5e2e0464d33e00e2a40246b3fdf7b5cde91ac049936bf0bdb12c5d22202e9367c561915f9d06002afe3b57b18e30dec62b848866eacfba5ba7e1e09efe09a435ebc2a24be026005d2c32b7f5fb38581445b1d523f1bebb13584db83b15b07ccfcc80e1e8bb420074d413488836e4301cba73c5f741997aeca01bc4a074a612773a0b756909dc00a0251fa054e8490e8dd7a6fc6b111b9a78c29f242af9a00426d0d59fe83fbc00e1b972c3ddb75c769ccbf748d614cbc17bd53c2ee98c766cf8708202ce827b000c8802015dfc020b633c84554088c44d00c00a38c1bcd2029b65382c7387c100961d8bc4e2cd975891dac9a065e6db21a5fc147ea4af993a9beaf7cbfe03d200d7a761dc1feec49081e1757f0283018b3320c8a5f5f3853e25db86b73b88f4009ec28e30fc918701b5778a2313ed80c001a0497f12ef17f1ab1ad9c749d905000a3bbefdd8c076436f463c97f793b9861260d0a004dbf1604fb823b37b5b3300c86a8da4dbcdf3454131302a787e42fbfb20f9c3bb02f9021f075330fef5cd007c64cb4761f90dc5a7118240ea24d14ac944906cda27e02fe9f4cf9aeb244400daafd715c3aac465a7cdaeea6e8d1b4dff9488835dd651427b52ae973a56dc003b623ab4cb1671e777832dc98a0d88a7ea02589401a0fdc1afb6a1026eb8a7007b7eb53dcd85c65ccf3502e6f72c4aa4938144562d37e1a02defd8669e6d6f0011fd8a4f9a69febab719258ac29a3c23e2df6840ea289f4e1bf9024d3a840200c15db28303469c80b901e407005b03074c030750002580aac96a9bce0a71ca00a96e10db0aabfa6caf53eb92086c1c5b8e1a3a1b9aa0153bf32ea03e6a3d6900f7aa8ba1fac56fa258636834452126dd0009736bd0b1a43501da1a8c02f90100fb83082750778403db832c830690840a5374617469634c696d654a1ccb3fc50009205ec44e86a741ba29ab66a06f45eb77773e7e9be7a991990c94a52f59ff00c3642e4a2a600e795316946cba6e10445f1bef2b37775937c1902c423f18730024c0ad3cf9368dce94409f1bb58262165233c675474c24f5a877a89ecd7c1e00ba6241c25fd28436c7cf0093f63396ff72399da012b5552f0f03238d68910700d6b7bff2a976ca9f4f6d917c2fbe5477df273a3de002f871155208949e7167001ca607323f0ffb43d25b5a3a7a6732b07e8504232cae8080c080a0863ccf010034e1d804c253ed047d5e1349e03a9998f4834bab7757f6902c24c9e0a03cb1008f21aa1b97651eedbbcafedc3db10627be5a8b44abf08a112d875138cb7cf80070829f80840f7b21f282f6189483412753e54768f8bed921e5556680e7a3e100910888015f850b34a80000894f37dfc6c959498a71f92729422ee1168f21bb008d5f6e82a0b8838f8295f921a02c813d3f350bfb97a3f4b2880c7f75dc6e8800ae405153e0e14cf92f79689de98940c42df02f716eee69f85af5dead868821002814222f909dd427f6a09716ac60012bf2144a10ee5e93b8d2107cf88a50a100194cac6dc7e34b27161fa3916e183d9582f08fe76cc8ef729e164561861ddc0018426a200062b7c3ba80a01db58f963ae83ac36c5fcfb14cb28a729ee49b060092ecf1a5bca0879e9c0e9e6ea0246b0a3192f59261bfe96a6b8a87d7cc6d2e006adaccefda97c1162a1c4e76b5eff902ae81e0110e9d941fe3174558b01032009013c8ecb5f4d3a57826eb4f1b23f0cdf9e8695a5336a0ef76de2f83dc0709009bc851d0aca30845862717eec67d07881afca6b167adb67bbff99bda7289cd003edd67ad4817acc2b44e4aeeab9742e49de7a828b2de953a1d47e7fefa54fe00c1330d6b6f364415ed1d1ddafa72d2c09634c108625129389bd9d3266209bc004722e28cc812ebe6cb12ad893e47c60b8819132542f67bf914d9a03cd4511400824b84c735d2fb3accdaeb9c4b6e9672be749136bc2dab1bbb87d064f905540081a60963c92f3eb5086a1ffc69b32e09f536c8968cfcc62ce7a2d00b7887f8005922fc7627873007b29381d3543f3743afec9a38e27bc729d65a0a4f4b586d005865564c6d38776e67425232704d6a3941457379716b417462485535384b59003863653637785559786a553639653633393961366132333961663632313338003363383033633532383764386262333730393537623536613665343039613000393835353665353937636134398660043b0245250193f6bf6ec5b15192059d0038c58b0de3ce96cdb93a69490a9219f486d4a7d9fd784ed175c494d47320640096d1f7d6da0159b611d84b311306801bc4a048c103328359a6e96eb35a6f1b00801c2bffbfc1de6ddb15eb5a72fff1e05c8558a073ee39ba2f0d285079d8170038c4f634fef5336ce834e350480172ecdefc54ddc9f9014181a0040cc280b800d80101f0a31698c4d065659b9bdc21b3610292a1c50600000809e25409658b003ed5080a58fdc22621740000418901e366103a67127abd0aedda5021aaaa9700dee0ef5d000173b5df9456cfef8ab837a06d50fa34c756701bc100000001030001020300220100000102017fffffdb5ac2da0bf043a463d7e6dfc6fc7faa8e00685ae2fc62f9dad9b48c330cbcd459a2a0561f6f4b6aa8f0c9c93f7a474c0200508a93d5b9d564558ac33da3f8f4242369c820053151c0de2f61a170b68f0200b7ede7b6f27fb56c871d23acf072a000e70906c77b428abeedcb1bf1b0719800d9b6b3af0feb46124bd7bec253b0c256d9a04653d1f463f9877046b318f43b005881e9d57907c51a1aacb3117c3285259d29ad02f90b550854310b6403684e00be00544b38912790e186fa0d454c9b69bfadfb80125410da7614e42a63810a0060e4e0076004200240f1783f3377b3a70465c193ef33942c0803121ba0036500b0d0010365adb6fd008605863740510135a44954538c8001a8337cce66f21700701071a68a503caa8bf139b1841e000230372e313231393939333234313136003435372e30323831383336363438393733333732363630343336393233363100393337514e697a306a546d734b446369343368744f4c625435317457743266004a686f3238376d75504652616b4c454b42616f7766466d4c3633412f314b55006855397530643963786d7841503039765a5770614f453061616a69616a426a004c355a616530464c4932556c756a35454f4869415a78797551362f48566379005a79306c474a664b6d736e596d6c706e344b4e474f3631736d48543562444f00714e444c787556667a4768635354544649714864304a7348436366677569310069526f6d73446c556e776a37676a6d4746453066436f4c6776573361746a7100366e79444c335842574176626737343053672f68484f707869332b41663844004469713046626634545153476f6349724b6645417977596c383446704b3649004a71765761524f73315267387063396c6c4e514a4c6a6c4a6c58597a7446660067474f526231524139616765665a4a484d7332354234673869424d34745869002b5332513dc001a0078bbfb7ee000614ed22bb12eb5e760d8eb122f71166230066e070885a97b65177a0784ff591a39c7e5a6ae99f20e3cce26593d269d18d00202c4899d31e5156646a716ae963a30f753d6678821015f087eed1e6bef305002d109cef5c6ae90c0223b731547748592baedc37f15799078185976c26810e00b88205a8bf1cfd0be70f53def3a71745e94c43525c33835488ce19d2e2d46900cc366c57692c2c609234ec8ba5b0f23e6d0b41de8057d13a57600fe35687d900c0619561949fbba04e680d9cecf2e39109f6b6e43c3b1dc4192fba2b328af400c59a539cfdf1fd706a218402d091cf840438dab7833bf0fa05667274796504004652545980a0df63a30c1aa1845b6d389d2cb65f8f3918f33ccc3a5b51e458005e0d67e157e186a0312736c7e734d5b123ae1de041d2d969636516d8eefff8009c2f9adf48cce9cdcff8ab7102abcf94b9ca61a6d5fa0c443f3c48ab1fbf010018964308d680b8447bde827593a76206967cdfb48080835d5209f5a6da1bd60083104ec39fdeec541df02db928acb87a2265040749883aaba27cbe6ad3eae0009309a3638ca0495a6c1fa50b947cfc345dddeb0ae8448067dbe75bfd35e827002deea2bf1c27c9be3ec87b90e19e5bfcbe7db80d0c07e4ec4ee260c1a069f200ca6d6734bd38c7ce4dfd607973d916d3a99c5231456a0c6f6eac7d2cb5f5230033b4c042884f42843958c8e0407c89c0090502526ecaf13b464ebd9c1b45f8002a217e13379274162febcda6cdbfee3df34c6d990290aa4ca780842b7919de009a0ba029696920aa3835ddb39a3c872936845f02246a5bf03aefc735cf2e70005809cb49f902af82024e0862e6940b4d5229bb5201e277d3937ce1704227c9006bbc5ff8840665fc1d8826ec7eec0c0fa35d44f85e356b5c803552e5524f2c007435ec9d7246b233aeffdd4e380a03b88055440f616cce79e9ec7c36a2625500affdd354551f4a828ff025fa8270bfd1d4d952e75079bb593de8d598e0ccbb00c94714422d544f1caf162234c296ba0c5d859d4bb0963c8f946d3b3751e497006165b38ec4a0742cfdb8ad2562efbd8fe64398151f6e2eb0e9256282cab9b3001acd789863943ca002661e87352870bb8fbcc63a3ed29796cfaf27d36bc9ca001851d6289c9d8b2cdc4a84034e706f826e8e666564636561663263356330390039343839333934626439346664396434653565363535343132653935373931006338626466306463343165313361613061313265343861616135353762663300396432346162393964643030343036656465313462383531396430356437320062656334363333666538303365356363643364343165c080a0acd56d30cddb0079c75636051b35246c6040e3d461f51242689f9ea9303a5451cba0600d1ad800a046bc7a31b969973a8ac64534df86a0e5890a94b38427983cb38c54f9023000830f146483053f0494581b26f362ad383f7b51ef8a165efa13dde398a480b90001c4cfc325207f87d5e59c6d12f71538b17021051fdd322434f444498e0e7300f984fe48457e62f21a010002744c02013e52b9abe000000d0000003029eddf005a4ba99102ce2b097a0665d0094f3da34e7b3f1519ffb9fe64448b9f96844e007248b7c668c208ba7155e2c7cf9a8d3ebe30a05208a9a9fa2447e65b2b7e1400561dbf6121766c58f4deb9569574410dd54e6a4b02f9025613c48405a1239e008301d96170c71c697f07644a6872aa118b062fa4e131c8c482af49447d8a0700e3bd95bd0d56f35241523fbab15307d0e36a818007c44ce010964024f4ff6600d8af21000000c001a0a9621b94b3443d4b7e6e073c212be41afd1dac13dfeb0062679257ed846bc7acb3a0135d920c4fc12d3b8715915a232a5ce67a42230a000eed2afff506fa24bf038b5af901f424078e69084469616e614a65bdec46b300a009848e64a25ec3887b72e936889e48a1a1302787f79774961bc3d646515d00122c31224309144d57f3f849bf3411393939084ca6924e71808178c0065b6600b178c9d032f652aedbc62680c6d750df6b7abd92c156385a646509df45eecc000b3331b96c17446435731fabaa76a686d9321aa01be56eae7753cb333b9a85003341dcc3ae59572bdf680929d664a3162cf854eb28f902cd0aba9b1cc26fba0097c923c0c2b755a3d0775dac7a3a528a58648b56bbd5ff66f647c9efae18200032e2281227b4c94fd46384c10487ddfba9e4ef047977d3c861b32352bdf8e200df6110a477c2171c21cd4014bf7ed65a1e0e05e7e5e5d6209354734a6531cd00961bf252abb7e560a073dfc6079e5e2715a599afde2ca04bcb88f2648bf48e0027e9f5f3e6b37940b92a68904a879e0c58c42bed09b2d41c06a4851b4ed708006849dfba071b736255f964d28e16d5b7f60708164c6f1a5e44920a3ec765a600801708e83301b79452f5a87f99688fab0ec2bc993ad4f273552161ca98cceb000f75e40d10687b5571fc88eec42fdb61d5db868f2efd7a873b3dd1e1574329000695b7f5b31da2aae1de87f53292e5628c8cd8762aa0032f6fe8ff49f1770400452723a6cb533dcaceaed3c125468f1d8fc83b00a888a7f902af8201e1d41b009e75e270a26921428a1403063a967529e07f26162cce698c3a16822a2bd6490033258a3ad6b0cb2fbfc05e6483b473f600d108ac61157a9afb6b57c6cb153c004db7eb20ff5826aa010844bd715a4ae403b35484e42a70ebf2f9a467ca661800aca2cdf797ffd5720c87fb706bb2cc470cea73965eb1be8d4befe983d24ac600a56c938fdba84268831219cec6a0529bd2d55e8d44c173adba3ab592422c2a002194e19f0333d36bd7a85162b71e29f9024f8201b784032b2bc006c255d9a400dfba4e156d748f35997e94919a7546ad5399621f339a5fca0b4351a065f95000fa13f9dfe324bc48fcc09665766a3f29d537d99ee1a5f44ed33123dd16f905005325057f28ba85e49026c82547d623dc4a76adbfa1db4c9d9c32d205fff23f0087237d5f20a0ee72cab0162479874316fe6c199a0d5b674e65465634314e52005943694265536568475048764c4e33793843485a443752346968365a69734200796f6336786137653565373865663461656539373934326561303662363735006133363031306637356464666264356135396636356536663664643437393200346262383630386dbb08f7c00640443342965f64b0dda987bc04913a6d965a004941f8a927f29ea3175d942ab527930d07e59271a7ef85388e16cb732e304f00968f09c5eefdf7e7fd1b10e11d0f45b9d8a1d309c70758c16d0f3c9bd429250050ed5e56f2c53e1452b8eca05d5f96053565a44633d6d18cdf8da785690c88000a05ff4f55b5ba298ca1e5e7f002f9029501dd8302c44b945940a6086625500031830aa1edfdd8b56ab39765b780b9022483a7ab191bd22eeaf03066d85cf6003a73cfca63f72c60bce109825454c994cd967e02cd29c000600200d9bec917005dc7402f76e282bde4777b30f62b5b3d43b7c24a322616b62f3c2e43b02b26000e770a4ebf1035118d76cdf2ef05ceb3ced03ecd30c435c92a9f82bc000254008d47781a61db099c9f8afa4ad085d7c94b1df8d9c69f417980cd26e125268e0033ddf1d6d69c48a0d4c8b939e20c9163560af655c76ca2870ca0f16cb49c860041c080a09bbf4bed212c609060f533858c7cb8949dabc8e292ec3b5a1db8ae004cad3607f9a0059f9ab405f8c9ac60ed5b692719157e5672303fc0c54ca4ed0009d88bd8d97d4c02f90bdb830827503c0c3b876d8ea6039af7db0466a0dd86001c8b83fbcd27df6b2a6f52d5c5facca5b5c0f966d868f366d85f9360fcf0ae005aa896bb93f4c7c5660b7fc894b3892255d015000000046a7400000000046a0004b7e7a23e2f9abf813ad55e55ce26c0712bf159333260fec7c02637342e31003139383837303930333938303437332e383833333836333636353333363733003833343731373735492b337a7a4a44736f79586a3938307a466351493231790062664d2f343152374632334c5050545276774971546835562f714257347a7600585965507337653054353944752f6c6a676e5431516d34653362334d4d595400736d7a7636587a46505a6d2b3164576a6f4a305554587637673839535a3661005048364a41322b383843714d4c52457939615a76373756377552304e494c320066505a4c7232467661434c776259657a694f6375752f3879796f4a45694564002f6742632b666e34764b33513937464151612b386f474c57372b327832382b003966656e3939352f393736616a53786844463669517466356e384e77534d700075506d75714a546a456d374d656a4e79636b7a4d3879646a584d5731334643004b484e5931446a595a39473345493545396d4447534736784f7968735154360031575a6f68574973337654597357504c424f5a577361797141347135596a730043313152374b4146c001a03f8b6041197f5e2fce8526a63ca597fcf0535bee00814dd1e13bbc2cad8a919a3ea064c142f6b217f542983ad30eba78996fac2000450de3ee4b799d049f748d49eaba1b7195e3bc38c44567954d43c70318fd1f00f9ed2f26094aa140e2c4d941d8108ddbabd4a02633ca0f85df5f456b56283400246f41781291068e6267f29601c0a4909be64c32f90cb0830f146526aca09400a658742d33ebd2ce2f0bdff73515aa797fd161d980b90c44252f7b016e272d00fd47b3a4bc77dd8a667a327f1aca15305fcc08fc780b4d73adb72bc3dd36890066edd0f0b2148401a178e212fe006ed620006229efc26ead4a158fe628e97a00fb179b1f8c58ec61afb6e1021257b90984c0047b2e3fc7510d1a51b3bef73500f9854465892193548183a0603f38197ef860514d8b98e842d01bc8f163dddd009607d153546c02ff791dc45101c634d266613d0001bf64ab676775022f696e00746572706f7274312e32303234373337303632393837393131323534353634003132373931343939343035313437323334363234393654566250797242534a004b6b42713669707557456445756a4d4f564b577866722b44474c664e566a43003073356e507179335143464f536862446e4f383566344a6268755851566b67007744594e46737459376e787435582b333752384677796b78674d725670594100386861644c53574832587839385036764f3741334d73546c73724e304f3844006a523253667a314463396f4a704a577249376c746a483455694f72535a38490075572b4f6d77377865526e766976557864547654695348794971616855306a0068564a6f3132495168493671734a527749694e4c734758735552344576495700664d77673268596939594167696d5a66626c7632627944634e7556737136520057506f746854793635736c503655307a6f4863586c64774f33464153565448006933347a6f6258496e76493652722f594167743479594d65595878366c444a0043654d53332b7173636e6c59554841696b714e615851b5136b693875638ead0043fd6f1ed0917b190af24b397a41c2a8a883a0eb2962a7a02bc2ce660cba8a00d842a4e200edc2c44e3092a4f4870c605169b6c53641c763fc02f89281ad14006c830493e09427d2b6cecd759d289b0227966cc6fe69cc2b042480a44c9b9000ec6e2d01c001a0ced8b996da6a98fa2bde1ca416b0e8e3a36aa87047b89568007bd7ebe872ae5b9aa07cec9f53367a50011f1f8f813348286438fa91c9e8e60082df59132e5098de063d02f907757e0519860704cd6bd513b898b6003b671300eb97aae8f62f9e790578c6ecb770ce5009ed766d5640a56073700540012002004080010102402aebb58ee0b26c4d2e5eb70bdb2bd16051f9175df4db2c9b4700dd9a036ddb7e7df0764728dd48e60dc80c6f7cb271b5e0b22c6f388dd9d93e00515b93e26a6998cd6ec080a04199170425a673bacabb99f0a95f11a371d938003ca5b35dd1b836f0e5bb9bebc0a04377a23f623055d74d4a762b91f67028be0049a5b2e8b01d09db4d3f6db1cdb987f9038d32c72dda198ccc3944b064a97a00b5127aeede3b7f2ce87ada6482cb6de572d37238fcc80b076f0cadedfd2e3900287cb94dc848e4bdbc34b3003bb7f342c01ab4df92ca9de10af32cf1dffd13009bd9e0d852a1127329d9118dfb1786df3561ac52d5fefaeeba1921e25df633000f6b323a3edc215adb7711977b3170f630933539363dda8e00f933e5f6002c00bd861143945b52a8e40d33d3fb7213d568af3ed2b2abd74150462d78af99600015ee1d5a5e88fc906e09e9fe74f38e3fe59a0bf516d324f7eeb3bbcc41f7b3007b9998b40d19bf88f4ef99fc6bcb12a028ea73d0a97e32c761290e1e9c05fe0072009b54fbeffa0c52b6873961d49d18321d8404220c8b727465727452545200541ab3cf2a93857170eb1a8a564a00dc54d9dbc081aff236614c05f00f8956004e7ea076143846b8e83dbbedc9f7f39d9e1efafd2aa323af5977acbc3b755900eaa613385d03161a96557e8b05a2e000001ce57194c001a038385859bdc66100006ee04173ef0c5e7d259f213b38ec65c5ac5664cc2263588aa06edfcce749009e39f78ff336265222272f75e3b8b6292bc5e7a9b785ec2764357ff901d43c00010208690eca0b490e1a9ebaf85710cce8dd72d48eeb6e74f03fcf1ea5863800afbe8808c5076a512e0993e77b117e938d8505bd41380209374a5fa173604000386f9c7a0a9daf43e323158d459652563edb141a0df3f2b6d890f6307aac5200c74e0bbbbfa02163e491f0cfbeec828ccf98b8877db9ba2a6552e18b2d4d3a008c5ded1d407d73f8948201ef018a31940241fb446d6793866245b936f2c341008f818bdcd3879970b65dfdc000a4b6b55f2598c445ad578097f352f786ffb100ddf9d942286cbd9ff6839f46093767c4326a1cf9bc1f117500a048cfccfe40006c692cc717a670a0148fef79789aceb282cc3d0e6805593ad605cff90bd45c000e3b19876a94d74f42ffff03e3fdab75eefcae82e066d85f8c8c8f8ed95b3b003ed2979d1ee528f38ca3e481a94dd9030f0b000000044a4e802041783c314d00c203e6fce47750c3ecea530403da07eeddb6d6509a31322e32313334343031003133383637312e3931343239373937333238373237313736383730373735390038353531353237373638436d38564441314d3466386b696f52554638397669005344495765474e785858726c3842643651396a70493057764c652b6f4d65520046394472484e73544c463045315a5842736e55384b4a39317369344767463100524d74614d334c777030324f5136383879704e796e436b3978425a4b2b796b00427074416647614b35516a49794f45712f36494d4a654d3772626f5944467500713166414f7370394634683543714c44622f7469722b507562677131474b69003742556a6d6433584463796239386a70377a5132783533744e52766e5268390055484f44636932516252634a6e337272394157327252397653697a4b4633680074676c546b794a6a61725251446e735644772f3274687447595a4e7a516a41007361354b717236323679796e466f49493175387779714b547a6b3052512f6f00464d4a7a55752b454563704d752b4c626a7835322f50556c673552667866650068507066666a4a53514a773daa2e2380709f2b0c6b8fcc48ba4c6942aea50100a867d2bfe27a5979a9900b9692a044a21df53a177fff5c1348b3cdb23f82ba00b41b8fea58d68138234a302d87d904f88d820107c3a054336f213352ee4faf0092a752befcfe39c7a6a18ce3d7bcc56b6dc875454d76dba00e9ebd78c3aa46008f4d311e3ebfeb0c8c79a1f3cfc3a26ed71d3665fc6820b5d5240415a8830c00bbbd21b745fecb550714c080a0e8f444aca5c459c27676e185579de1d6cb5e00b88d4e350fd6dade07946ede16a8a0165e301acebf43a608e747e07b2e32dd00d86cebb24ec98440c34b919c49fcedd75108bcf3295f5db3e40c5155271eaf009058d54b185c5fff13e900c080a0f63bb59e762a76fe9252065519362897d6003795bedffe88fc922a683c82e7e8d0a07693bc90d37b2922650f8e065a0daa00c6ea71af62c83b4fa69285e7c511785b7af902ae819a0ae5831bd63bc394b100e44a60f0d5ea4fbb61937d973ddcd80b241370f7939607494853112eb2c36e005e4a5d7b9184961380642680541125dfdd9c0764b7a2efad85f926c3f0c3a00088eb2685bd6b79ae008d6b0ee74b09341d79f590c8b3faea5dfa2237644bc70016a01482d3425fa581941b057a4d20960a90f20ce9e43fb425e537d565be70005b3e103401a0922e3023fc0a04bb29ec74efecebb381535ef2453907b101b30042f8254fa73072a04b5c97606536ab8d9b7ffec96fab415729c53d18b5ff1200f5a4fd148f4aa42d155e82d9c494e97c507e2b88ab55c61d528f506e13e35d00cb8f1580b844a22cb40cab6977a9c70e04458b740476b498b21401960001c00080a0dab66684749d0773893d7cce976dc4a8d2182db8a59044cd9bbd4d0d6400f432a1a01bfe61ca3ceae4a81c3668369c36a0eda672f45d63e3935b13f2a60094611da6d65906cff7a4dcde5e9d35d5a1fe9e0eb3185459b3323e09b73b60001121f46b5581b5285bc571703cd772b336aa12e654dc43a6d710d99764add8004512d022b4961dd39bfe366967acec0d39a5ab820fa050362c7b199a5bae8100b1b56b2bb70058f64a70a01044821232b2c11aef78250d02f8b90309f186d800bcb85faa780000c080a0b12f8b14c62254ac38a2e0f567fa67c642ed485c4300d9f2db2a1f93ada8173c86a0178e3a021c50b57fc6f949201d2e1667a243ba000ea94dbf3199abeecea6c20194f88c81a759393dff7dc95d7e2f74053268bc001ab67e03ea0aa115929cd31912fca57d8c66a07330a31a06c957e6b4b31eee0008a37c5dc15e31d1a37d4284475adc0a248fa920890aa8b42dcb229920140800c3000000300cc3101a0ac318c4be01331820310c05612089d238927c07140000041a2a1820161c124620180e140a1a16221008100e0c0c0a1612949a12a2380086026094824a92d207b0e2b70672622ff3c43ee000f5cd2483143e0a10297100683c97108325e37d6d1ec17024442906f6759f8815d8d8dcac8bdce8783687000f9c08def530c2c2c23d01d279cbef06d496cce0d5d38b7f0c5c5b99b0c17d006250f337d5c3b84f0e7a2f17b3bd11851dd2c110b7141a06cd86c7add7a9af002be09d3c3e0430a7b471575be03a32714bd31fbb5f7a0915a39829b8cacee2006dce8771920edeb83301e8e0bdd7e129c04b7296c53f0d64762436bbc495d6002b7005d43695c3063767d42a33119453f09431e0e62161850557efacaac11f002a203e28526e6b231caa59b3847efd005799b1b88da82b30e5d9054ae9b59300c1a27c0d403c70a666b18e414f40ac8a740bb9ba18f931b0e06f2cfe43234a0011a81f46b6e75860d091c49b69140eeba738643f1af780aa93edde014549540037b85b398b2b5037c8274923c061b55d219aec3a93883405394a4081aa3bce00b27592c7567d0cd4ab7d493df7a6fae831379224c2f907662a0c00b6d232f0007830047565509c9d3d7cd991bf9b1d93cf2180ec9611a307ea062dcecfedcd00dc70e917ebc1e397cd784d132581c41fd6a99ca0b06d0eaba274539b91a4b1008c7420ecb21d5ed5087eb02249e26858ecfaeed481518255186fa8edf9eb8800daeea3fbf36aff2b8279cf41a36c885e497a6705386f36ca2361c0f51205c000d5a6ce6b9376bcfc486f5298bb6beba468f862e8ae35de2499e9b8a2d26681005ed95b953067d746c7d8f6ec8364b78541753405e7ec6db31bc521da54ea3a00f84ab69b170e7b1cfb1d4bbd6bf4ca751d176202cef2c38327c15df82335c300c760db8a9c74aac89fd14c2208b8d77d8a20624865397267d2ae9cef4f7c3e004a1209e6bbafbbc0559d74f6e289842d5005b9526c9ba94bd0ec37f6b384ea0006f40f3607746f9b702d34fe6ac4dcbe07dd3a6dcd7c751c00ee2b21053f7e00201323095846ed464b0c139d978b1ef1e8a1f98c76b9d352ed3d9187756cbd00e3e66e092eb56713823283fda1103a84ed2502fa7113a6a1c8a24b15c71c2f0061b5f0bca0090b3219af5090f24d086495124250f98083e6e40391a7a3238b0061107e4f66c630c3407476959ed86eecf399ebcc692fb1a56bf5917051e96b00e69cda153504bee02fb00937a95433f3b4809e7150c873c445215dacc2ad9800418aa09a0ce8c788dfe00a9018c6fa6aab91ef6952c9bcd5018bcf28a5cef80071034e08e4752b60dc90915db0c9bdb7240289d2e934bcc4f3a01790eece5400ca3626348eebc04a0e209ffe4551aeddecc200764be5960b16f86f68b236f7003d39d76501664c926436a8037dc231437a04ee3066c496bae41d115a544662007c74cc3b2b90190e1c8bfe5d4f6b22d03289337e164247b1e1e5088fe1306b00e1cdac06d5648554153dd0c2cc4b049a3aebcbbc0b2d086887cbbc3d00b825009f1cf50052390ab357913fdef8c4f848fb3ac4a001ce3c0d4b0312250da61900d8e39c3bf5eb5177517b3d348ec358fe5b9f9f3fcb0ae667cc05d2d50c906900cd5ab2494ca19023da5540d8b8084b232a81c557acfb617fc5aea5466d0e10006f551d0e5c0ec6ca60e3f5985da751a20c85dff64828f1c164af317a1baecd00bee25a900128b762fcc13bd3bb01a6719ef33763dc46492084d232410cf5a400f63d503c4b2729fbea983d64864b41865bc9411d79a099c72d28090596a835001e25c9c1e9808f3414d9c228aa28a81346ed8869f71080339674b8a009b3fc009d98f13d89dad61a21b1437fc4aef4420422518508fcc70216c5026ca7fe3c003daadb81a92f41e2c58461aeb63e3be32c69762ecbb2cca56247740913c802004e1b6803360d74ca643da74b33980467ba86c649006a862635faada0a91a9200245d092491b9e0a221441472a8bfcd832e35c091d3c01ecb24438457007b100042dc30276a673a1170806f0fa066bfe2012b0f45ec83802a2f413a68a2bed80048e1b6aab6433b6ad40aa2ac4404f8ef6c0d692b0153ac9c1b8224e5e0a36d0006a093d288183cba433a3a1aee43393726f86097ba998403c15be79c14d9d3001583cf3abe2938fba6713e53744b81a38f605e831d899e20ff230c7d5ff48e00d0dc6baf41eda5500e0386a103fa024ba19015e478a852f3e88d30dc8785b100814769a7571dfab5e1fbd1d3380a3f1194023655617a602354216300e373b20066535fb5c4c669dabc9156341cf049f8ecebc916462e74ccc6fca6cea6072c009918c97b9ab9735a4c4da09e89cccaeeec7e07d8af429c2db766828d514bd400953ed4f0bae644ecd6d7aad03be05495c7f10d0fbe0b7b211ee136a995b05000fa74f21ef05d920e78925ce8db006e8042917d19ec2c66067f98b2995b027100924e77011b41c319340e6152cdaa227bcc725b15d04702bd32f440384321f700706fbbcc921a7054112b511277d8ed54879c17d615bc0a7322f4a0c8d6f16200de14cebb1e47ba082d54dd41ff157fa8ab984cf7c4081c7593560e3e95dae70082bb1854b07cd70b0265f871e141e14593cb52420618d7388ad1840234a849009f36784d4300fc17d9298528b24d42a7a0a5af7793cbecd0c268011b92aa3000d1416c82305d072114219318582e1e34117114dc404f30a8079e574e635b2900f61128c9984febe576d1f3832c6d1480200f34af5841eb8b0c647bc805498a006163c06316054779380eeb13079e9644e30625847683751530e0951b775aee00a1477cc4b31fa2334f1c68cd2f7f2daa88c99d0ab66484404e79b3e52ba2250084376375052e6ba1376efcaa5fc01b88eecb2849064d83070b9528d1d4b21b00291094940bc919c4d5a3e9fc67a3bd0d8b48cde008ff842e23af692762ed1100459585cf85f64cc1f616bc05206645b3d8e4e3407fcc432120da93031ab56400509e82272051f977bcb0a162c2d09a7a5203715916570dd5643a63ea036a09006d6277603251c334e8276a0356747f3ce08dff9601170f7de01a8dc6a87e600052dafbf1a9ef027a17226f0bb0c8e21083788ade40b47aa2deae6d8aa08104008cc411b0d2f339c1d727a2832149b1356e01fc90c63c4d7e9166a9a9d6871a00ae227fa39bad8bc052fa9cbc6155f303f1ae91d2aa473450d27f10c201058d002e907b79f3c94de9196c95052bd8c43a006dc06ec7464fcdbb3722cea0b0b00041c8b5e851b78fe33715bc8bb02eed08d105b5de198428c93967899e71c600004a12a8d411ef6061ee7930215d451bb120c5204cdb59e460504273e8327bff0022edb2cb618947496e8616d3b71e9df54b9411b784cd419d1b9ad733a761f7004e3e1c8b44e00db6fdb903a949d197a6397203827a6701b73300cf755ce0a10042a35017c7635b9e5e592412e95937802df448c1acb87aa65036b80428d175005991e77b937af58e9d4a99917c5c2b5ca80236ec532242d2af005fd7ac068e004a8bae988ae4545078e0be27b4b2db844147c857d5ddd1f7610abb15b60e6c00f0c2721d4b7fd201379f54c37d8cc3a1b97823b49f8aac9eafca20666904bf008b5bf576d960d04ba139f1484a8462bcd3a7416770646ee91cc064740190d4009bc23efbc68f236eb9331afa03b9e6e02fceb61eff39e270b5a6032e382c890043bf4156570f3909af33286aa6e986947db55c2798d211d6f610a00a6f1d0500fc9089b01b20ad411801f70ef222638ec8b796f13a456c0592b42233bd8e5000b66f90893b812713366bbd68c00826e05970c210c4ff792056017875d24904001b09be340a1283ad68a6667528f95eb8326d69c70231ab2349c596e9320448003331d058ecb95b154e53a88f731c09920a6edfd2a991b0ad5a03eb4c80cac700f72cd8ec8b498dd80df975d85abc59fd30ed86a8c11e49740280cb5f3342fc009130014695d82584e693343008902cabe6c86e53cd5ab04cc3b6429f44617d0012c545f592eceb8779e486b58b5137ccc6221983653f087afc74c8f57f074300948f808862f38335fa11d6410cbd898af3e766dfdb6dd079cbcb7b98351c860078e105bff633196b0d11c2c293413c0ada34fc0bb53c7364df0d4daeca72b300bd068e027474c80e5c8944e170a00ea9895248388f1ed252a178cc6d36768c0057831ab19187985f1b077d4626a600a56979c359544d863416c436b5da672c009af490ddfb2f6f2e24620bf2ba2254023dab3942d24e762e930b6aac7b56c0001f6ea7a22bcce3af0a8b57f8c4e7c8c6c8da826426aaec84614ff3d01a68a500f18b6c12a566e17b0d4b1ea236550eece7a36c854bc1c752e5c3590109c4b800be3eaf69f8454a9571a433e692885ef24991905c482720544b617e8a67f33300c9e6f5572ec59409721ac829ab651ead292ad0b6381e128389c17f8f63d69800b74e538e4bbfa1d5ff3ba1b891e17f150bd17f453976e4a1180e123324043d00f2d9e615131346944743cbc853ca010af04df68d04a409bf8a5f3b69134a610035f30160834b3d5a429f4a71a7ad44cac26c1d2b3ad527345604186c25951b00c222c455e74c03209950ef5b203209894e0034529d6c82854e84c9bca8d54c00e1143b91a546e39a1d0f97d2b83b7c33cd679e921d2fa5451f8626ca12c8f700ac06e8c72001238870a7ab243761a605c1206283461592258977978ad4ba3f002e39cd895420f2573fe069284ffefd7ec11af4d1ac9b39482a69a6360d0cda0029f85efe4b8988666057b7e3b31e4bbc1aa802a451bde27153cf18efab5b38003a745fc2c4ac3fd8db3471a1e10f635669c786afe7ddd8d98d90618b865bfe00c81132c1f4d5623e628b17c19b9c6d5e185b08e34c227041071adf9027d0e400647e17dc16e31372d29faa7412d93a38586e8e6777270c12b773a8a5038d7900e085c1f6d88253a9929f72b055557006d83b917d43d94517ae861b95badc2c0001e570f145b668ebcd016cd4a9a9db7414582fee849b8080ace654f6a78d960086f7455071440de5ee9b809aa37fccd140c28e69c8f079e495bf4d6c8b7c5d00fa63671143ca0f9d96b12a293da1666e719306c4a6ff2bc33118b5e0d8bef700a510d0ec2ce7047b0e497fc222bf54e578acb081d306251a041b65d6555d4b000ad620f2f0730422da48242741a8a42e15420022d87077395011327d18746f0046a7a69d6f067c912705c2321845128575400b74a8ac1a4ce43f3c260f5934006f07f34b9182867261044ab18abda1aec669cc4914f2af058818e319f2bece00c47f950fecc604528bbe73a35412cb2942e7306ff756131275c0306d1f35cc009cb420ff2b161b85787703dd02540a9201453bf16fb46c951a09802309b81600fd81a4b0bff8512b2e4e6f2780fb70ac21d92c1ae2ddf103d0a3102071f6730035321cda23819921ee204021b5723a0b0795c5feb45addb62771a1896affe20098fe0d44732691812d34604656d4b64065e3cc9c7918a0b4d67689a5200c6e00a1cc7eb4e90ce83136fc05ba7c384fa37cc4397bf945a9e696bd9d7c0f8d720081c8480c45e27509457a3ca8bb154d40397aad55249a55dc32b5fa11a6b40f000e8422f60fab40522786fa3fa8b6912a7ae47f1a43e4e407bba0da23727b8300188e3ee944ea5e8fe6c30ff8b333fc8e443cc4e26c451e56ec29690d04b7b30054567db3bdff372713949039754402a5f889efaa5434ecdfd60fea12d7485e0052683c12ae86e3b570182700e0d30762f3fded794491d0550cdafe2cec612e007ab15eb9864125c4927e2f2107f29f4e54bbd3e16bb13a08d0cb98c341685f0010c4a201f37bd8831f03fb6625dc7a3d05e732eb1369f6b4a6c756d1189534003b645b0c45a227be4c4fd862b2030ec449f4d5085cbaea060e790f10ec8cc000acc65f5fc42954162bcabf32bc1c4bc44eb733ac027b3e8cd68ae6e4bccd7900fa0d621e8902b69ff50523476f27973bb0fb000181c61316f69205ecc9b58000c862864cea2d915632b4631da302f2727e11cc7b6074bac07d7a19895b8e6800aa560861cbad3a4404805f0124319b95641b6948f63b3a141251e40336ef6000386626863a9076dd68fae1cb0c02d14f0cf0147068e97b7ff669ab319e1cfa00209c0bb9c6244975e7cdda66173c2b945b1d7823b5cbfecad182e7647cd0a600f14011e2245e3a529405f4eb33cb9a90d14080c97e0b93c1b864e2cac319c500ca117f1554598a1c9dfbc7b7e01096b44fd6f339b1746050499c9dd2189d61007f315d240a1d419593dc409606fcb02830920828865bb8dbbd453049f458f3006b992c317815756f81780857c0b30dde4be58cb8edc4b969133d0a01a5f78f005e36079647cf6c029122547b3d1515c3e75c4cedbeb31950022dbe360f5ad0009ac8234c7168ad132538a50782ab7ba5fe355500fce4e6bd392e3ef0d99680008b6a775a4f6459f563fc6418038860e2a73b6044db596cd089a8ef9802ec9b00629cad32e782a0c1da9151ff6dadbd68b3b2fe1906d240030f4a820c3b38c80040f4fa1ef0a3048b6c06489fc0f310ae2cf97b497e653d40b128dcecfc606a00527a296a78f9d0e7367482d1441f6ec59ab9f0b453c4cacf54b51b7b07f8db001c9c24c5c2a3314859d3c10f130763d16300aebaf6c8b1c1638f243bfa34000015a0c076d5c92d70a699fe3b1bedc17db1775f4690a3e9f083147185a81ed7002a0a09af1175c037bf83b6798dbdaf578bc18b25d01909a0a467031247505100c7db92d2b81ede03934f89d8ec036b3c254791dc253328731cb1d597ab74a4000a7957717b43b80516d369270aa624639798c896f895b56a0787c093442bd400bc6700a8072a3001b0fd4d9f2398602503a22a4e81efe02cfaf007df061b9a008bc62672a00d79a52da556eedaae702eef24a1236b8afac0a0a0d8a6074a1600ea0f19719956d715565e0eed916b73592b9cae0c92e29ef9cab5283e7e44c400362cb08ee5ac68ab2cb59576202bae301c3ee1429f4a4c149332c77bbcaf9f0037f6472214faa949f58908638da3a2e06610acb26e94cb45f5f8328012925600f35a237f92757281b9cb90ef90ca6ee0c1ac9140206da0da20b12aea273880002d1005f5e948e3f65a4193de847e585bb8f33b0c6dfb56cbf9c8964b56c085005a918467b5d048f3a7d378143b51667ab9f17a063d180c8699c3d68b9e578200f4e569a2cdc2f532a157fa01643848404b95295689e69d5d13142b5be48b3e003be8a36a1e52c06ab60b20bf1ee89d869424167fae84ed87f9bd89c25a4d81005d67e393c3510979ab40fb6ed4010f3ba94438473f9b1dc411aca01f055ab200af2c35047e20e069e0cf23a2dcc338efdd1378becc6a52549610d8a0c88ae8003c299e6f1b503f898d721844b681507a06e8c1d1fa0a5c55540cb859aa3d950065dd263e61eadaf6b9085717651b18290d5098d6bca5fcd661e31146d15c25006b1c5efce240ed841dbeabcb3a460ff8aa323e99c3cff486349397458fcc89007c02814394e673d8a1abd534d86d8e349aa76a54162f49786c32d97f541d42003588c4d472d3d3307de00ee7010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/crates/derivation-pipeline/testdata/calldata_v4_compressed.bin b/crates/derivation-pipeline/testdata/calldata_v4_compressed.bin new file mode 100644 index 00000000..ed58b60c --- /dev/null +++ b/crates/derivation-pipeline/testdata/calldata_v4_compressed.bin @@ -0,0 +1 @@ +86b053a9000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000018c0000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000000c104000000000004cb4c000000000000000000000000000e3c2ec12a808c7097fd258c6fbaf7522274b0f872a347c3ad57b92ec08132a237253501f71b48cb81e381f052c23f0036b4625d0cc9bc003ea821f5a143d4b838faa86529a8718e42ee479ecddb356875ac3fcbfc52ea5df1f0489666200e886fc46d0000000066d85a6c0bd522bcaf28f037b8f59e1df03bb3dba8981efa98dfd4875ed8eefc7bbd112764f0b033e86cecf5e5047b15930b44920c7de1b558ab78f6ee5927e582b47a8b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d00000000000000000000000000000000000000000000000000000000000005a0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000006a00000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000076000000000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000000000820000000000000000000000000000000000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000008e0000000000000000000000000000000000000000000000000000000000000094000000000000000000000000000000000000000000000000000000000000009a00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a600000000000000000000000000000000000000000000000000000000000000ac00000000000000000000000000000000000000000000000000000000000000b200000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000be00000000000000000000000000000000000000000000000000000000000000c400000000000000000000000000000000000000000000000000000000000000ca00000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000d600000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000e600000000000000000000000000000000000000000000000000000000000000ec00000000000000000000000000000000000000000000000000000000000000f200000000000000000000000000000000000000000000000000000000000000f800000000000000000000000000000000000000000000000000000000000000fe0000000000000000000000000000000000000000000000000000000000000104000000000000000000000000000000000000000000000000000000000000010a00000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000116000000000000000000000000000000000000000000000000000000000000011c00000000000000000000000000000000000000000000000000000000000001220000000000000000000000000000000000000000000000000000000000000128000000000000000000000000000000000000000000000000000000000000012e0000000000000000000000000000000000000000000000000000000000000134000000000000000000000000000000000000000000000000000000000000013a00000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000146000000000000000000000000000000000000000000000000000000000000014c00000000000000000000000000000000000000000000000000000000000001520000000000000000000000000000000000000000000000000000000000000158000000000000000000000000000000000000000000000000000000000000015e0000000000000000000000000000000000000000000000000000000000000164000000000000000000000000000000000000000000000000000000000000016a0000000000000000000000000000000000000000000000000000000000000003d0100000000008930600000000066d85a6e0000000000000000000000000000000000000000000000000000000002b7dbdb00000000009896800010000000000000000000000000000000000000000000000000000000000000000000000000790200000000008930610000000066d85a700000000000000000000000000000000000000000000000000000000002b7dbdb0000000000989680000e000000000000008930620000000066d85a730000000000000000000000000000000000000000000000000000000002cf159a0000000000989680000b000000000000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930630000000066d85a760000000000000000000000000000000000000000000000000000000002cf159a000000000098968000090000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930640000000066d85a780000000000000000000000000000000000000000000000000000000002cf159a0000000000989680000f0000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930650000000066d85a7b0000000000000000000000000000000000000000000000000000000002cf159a0000000000989680000b0000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930660000000066d85a7e0000000000000000000000000000000000000000000000000000000002cf159a0000000000989680000f0000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930670000000066d85a800000000000000000000000000000000000000000000000000000000002cf159a000000000098968000120000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930680000000066d85a820000000000000000000000000000000000000000000000000000000002cf159a0000000000989680000d0000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930690000000066d85a850000000000000000000000000000000000000000000000000000000002cf159a000000000098968000120000000000000000000000000000000000000000000000000000000000000000000000003d01000000000089306a0000000066d85a880000000000000000000000000000000000000000000000000000000002cf159a0000000000989680000b0000000000000000000000000000000000000000000000000000000000000000000000003d01000000000089306b0000000066d85a8b0000000000000000000000000000000000000000000000000000000002cf159a000000000098968000110000000000000000000000000000000000000000000000000000000000000000000000003d01000000000089306c0000000066d85a8d0000000000000000000000000000000000000000000000000000000002cf159a000000000098968000090000000000000000000000000000000000000000000000000000000000000000000000003d01000000000089306d0000000066d85a900000000000000000000000000000000000000000000000000000000002cf159a0000000000989680000f0000000000000000000000000000000000000000000000000000000000000000000000003d01000000000089306e0000000066d85a930000000000000000000000000000000000000000000000000000000002cf159a000000000098968000070000000000000000000000000000000000000000000000000000000000000000000000003d01000000000089306f0000000066d85a940000000000000000000000000000000000000000000000000000000002cf159a0000000000989680000b0000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930700000000066d85a960000000000000000000000000000000000000000000000000000000002cf159a0000000000989680000e0000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930710000000066d85a990000000000000000000000000000000000000000000000000000000002bc00640000000000989680000d0000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930720000000066d85a9c0000000000000000000000000000000000000000000000000000000002bc00640000000000989680000e0000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930730000000066d85a9e0000000000000000000000000000000000000000000000000000000002bc00640000000000989680000d0000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930740000000066d85aa10000000000000000000000000000000000000000000000000000000002bc00640000000000989680000e000000000000000000000000000000000000000000000000000000000000000000000000790200000000008930750000000066d85aa40000000000000000000000000000000000000000000000000000000002ab1e1200000000009896800008000000000000008930760000000066d85aa70000000000000000000000000000000000000000000000000000000002ab1e120000000000989680000a000000000000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930770000000066d85aaa0000000000000000000000000000000000000000000000000000000002ab1e12000000000098968000070000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930780000000066d85aad0000000000000000000000000000000000000000000000000000000002be50ab0000000000989680000c0000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930790000000066d85ab00000000000000000000000000000000000000000000000000000000002be50ab000000000098968000080000000000000000000000000000000000000000000000000000000000000000000000003d01000000000089307a0000000066d85ab30000000000000000000000000000000000000000000000000000000002be50ab0000000000989680000a0000000000000000000000000000000000000000000000000000000000000000000000003d01000000000089307b0000000066d85ab60000000000000000000000000000000000000000000000000000000002be50ab000000000098968000100000000000000000000000000000000000000000000000000000000000000000000000003d01000000000089307c0000000066d85ab80000000000000000000000000000000000000000000000000000000002add58e0000000000989680000c0000000000000000000000000000000000000000000000000000000000000000000000003d01000000000089307d0000000066d85abb0000000000000000000000000000000000000000000000000000000002add58e000000000098968000160000000000000000000000000000000000000000000000000000000000000000000000003d01000000000089307e0000000066d85abd0000000000000000000000000000000000000000000000000000000002add58e0000000000989680000f0000000000000000000000000000000000000000000000000000000000000000000000003d01000000000089307f0000000066d85ac00000000000000000000000000000000000000000000000000000000002add58e000000000098968000120000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930800000000066d85ac30000000000000000000000000000000000000000000000000000000002c15db0000000000098968000110000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930810000000066d85ac60000000000000000000000000000000000000000000000000000000002c15db00000000000989680000e0000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930820000000066d85ac90000000000000000000000000000000000000000000000000000000002c15db0000000000098968000150000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930830000000066d85acb0000000000000000000000000000000000000000000000000000000002c15db0000000000098968000110000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930840000000066d85acd0000000000000000000000000000000000000000000000000000000002c15db0000000000098968000090000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930850000000066d85acf0000000000000000000000000000000000000000000000000000000002c15db00000000000989680000a0000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930860000000066d85ad00000000000000000000000000000000000000000000000000000000002c15db0000000000098968000100000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930870000000066d85ad20000000000000000000000000000000000000000000000000000000002c15db0000000000098968000040000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930880000000066d85ad50000000000000000000000000000000000000000000000000000000002c15db00000000000989680000f0000000000000000000000000000000000000000000000000000000000000000000000003d0100000000008930890000000066d85ad70000000000000000000000000000000000000000000000000000000002c15db0000000000098968000110000000000000000000000000000000000000000000000000000000000000000000000003d01000000000089308a0000000066d85ada0000000000000000000000000000000000000000000000000000000002c15db00000000000989680000d0000000000000000000000000000000000000000000000000000000000000000000000003d01000000000089308b0000000066d85adc0000000000000000000000000000000000000000000000000000000002c15db0000000000098968000110004000000000000000000000000000000000000000000000000000000000000000000003d01000000000089308c0000000066d85adf0000000000000000000000000000000000000000000000000000000002c15db00000000000989680000c0000000000000000000000000000000000000000000000000000000000000000000000003d01000000000089308d0000000066d85ae20000000000000000000000000000000000000000000000000000000002c15db00000000000989680000a0000000000000000000000000000000000000000000000000000000000000000000000003d01000000000089308e0000000066d85ae50000000000000000000000000000000000000000000000000000000002c15db00000000000989680000e00000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00f3f5413eab47885ada130f2523ec523ff02aa2b3fa73ba6e74557aaac242d460bc6e2a083263e89f86fd6566320d2a54713e49d63e57c012c0e2846596bbd8a8110babdb1cec32754c2a39603937b357f37e86c3a2232f17bc71f8c88069b2126b89fe03ff36a43d34f435012e84f84ad7bb34db367ffea6e69ba9bb889b667381fbe4f9f0ca183969069ca6bd6402a426cac2de711bc26935afb95338c5040 \ No newline at end of file diff --git a/crates/engine/src/driver.rs b/crates/engine/src/driver.rs index a338968b..73d97833 100644 --- a/crates/engine/src/driver.rs +++ b/crates/engine/src/driver.rs @@ -259,6 +259,11 @@ where self.syncing } + /// Returns the forkchoice state. + pub fn forkchoice_state(&self) -> ForkchoiceState { + self.fcs.clone() + } + /// Returns the alloy forkchoice state. pub fn alloy_forkchoice_state(&self) -> alloy_rpc_types_engine::ForkchoiceState { if self.is_syncing() { diff --git a/crates/manager/src/manager/event.rs b/crates/manager/src/manager/event.rs index 0fb82c76..9d2808b9 100644 --- a/crates/manager/src/manager/event.rs +++ b/crates/manager/src/manager/event.rs @@ -18,4 +18,6 @@ pub enum RollupManagerEvent { L1MessageIndexed(u64), /// A new event from the signer. SignerEvent(SignerEvent), + /// A reorg event. + Reorg(u64), } diff --git a/crates/manager/src/manager/mod.rs b/crates/manager/src/manager/mod.rs index faa39814..ddd301e3 100644 --- a/crates/manager/src/manager/mod.rs +++ b/crates/manager/src/manager/mod.rs @@ -19,7 +19,7 @@ use rollup_node_watcher::L1Notification; use scroll_alloy_hardforks::ScrollHardforks; use scroll_alloy_network::Scroll; use scroll_alloy_provider::ScrollEngineApi; -use scroll_engine::{EngineDriver, EngineDriverEvent}; +use scroll_engine::{EngineDriver, EngineDriverEvent, ForkchoiceState}; use scroll_network::{ BlockImportOutcome, NetworkManagerEvent, NewBlockWithPeer, ScrollNetworkManager, }; @@ -110,6 +110,8 @@ pub struct RollupNodeManager< pub struct RollupManagerStatus { /// Whether the rollup manager is syncing. pub syncing: bool, + /// The current FCS for the manager. + pub forkchoice_state: ForkchoiceState, } impl< @@ -251,12 +253,14 @@ where // update the fcs on new finalized block. self.engine.set_finalized_block_info(finalized_block); } - IndexerEvent::FinalizedIndexed(l1_block_number, Some(finalized_block)) => { + IndexerEvent::FinalizedIndexed(l1_block_number, finalized_block) => { if let Some(sequencer) = self.sequencer.as_mut() { sequencer.set_l1_finalized_block_number(l1_block_number); } // update the fcs on new finalized block. - self.engine.set_finalized_block_info(finalized_block); + if let Some(finalized_block) = finalized_block { + self.engine.set_finalized_block_info(finalized_block); + } } IndexerEvent::UnwindIndexed { l1_block_number, @@ -281,6 +285,10 @@ where // Handle the reorg in the derivation pipeline. self.derivation_pipeline.handle_reorg(l1_block_number); + + if let Some(event_sender) = self.event_sender.as_ref() { + event_sender.notify(RollupManagerEvent::Reorg(l1_block_number)); + } } IndexerEvent::L1MessageIndexed(index) => { if let Some(event_sender) = self.event_sender.as_ref() { @@ -367,15 +375,23 @@ where /// Handles an [`L1Notification`] from the L1 watcher. fn handle_l1_notification(&mut self, notification: L1Notification) { - if let L1Notification::Consensus(ref update) = notification { - self.consensus.update_config(update); + match notification { + L1Notification::Consensus(ref update) => self.consensus.update_config(update), + L1Notification::NewBlock(new_block) => { + if let Some(sequencer) = self.sequencer.as_mut() { + sequencer.handle_new_l1_block(new_block) + } + } + _ => self.indexer.handle_l1_notification(notification), } - self.indexer.handle_l1_notification(notification) } /// Returns the current status of the [`RollupNodeManager`]. - const fn status(&self) -> RollupManagerStatus { - RollupManagerStatus { syncing: self.engine.is_syncing() } + fn status(&self) -> RollupManagerStatus { + RollupManagerStatus { + syncing: self.engine.is_syncing(), + forkchoice_state: self.engine.forkchoice_state(), + } } /// Drives the [`RollupNodeManager`] future until a [`GracefulShutdown`] signal is received. diff --git a/crates/network/Cargo.toml b/crates/network/Cargo.toml index 1fb59c4f..041b259a 100644 --- a/crates/network/Cargo.toml +++ b/crates/network/Cargo.toml @@ -17,7 +17,7 @@ reth-network-api.workspace = true reth-network-types = { git = "https://github.com/scroll-tech/reth.git", default-features = false } reth-network-peers.workspace = true reth-primitives-traits.workspace = true -reth-storage-api = { git = "https://github.com/scroll-tech/reth.git", default-features = false } +reth-storage-api = { workspace = true, default-features = false } # scroll reth-scroll-chainspec.workspace = true diff --git a/crates/node/src/main.rs b/crates/node/src/main.rs index 3b976ce6..202b9b76 100644 --- a/crates/node/src/main.rs +++ b/crates/node/src/main.rs @@ -5,6 +5,7 @@ static ALLOC: reth_cli_util::allocator::Allocator = reth_cli_util::allocator::ne fn main() { use clap::Parser; + use reth_node_builder::EngineNodeLauncher; use reth_scroll_cli::{Cli, ScrollChainSpecParser}; use rollup_node::{ScrollRollupNode, ScrollRollupNodeConfig}; use tracing::info; @@ -19,7 +20,27 @@ fn main() { if let Err(err) = Cli::::parse() .run::<_, _, ScrollRollupNode>(|builder, args| async move { info!(target: "reth::cli", "Launching node"); - let handle = builder.launch_node(ScrollRollupNode::new(args)).await?; + let handle = builder + .node(ScrollRollupNode::new(args)) + .launch_with_fn(|builder| { + // We must use `always_process_payload_attributes_on_canonical_head` in order to + // be able to build payloads with the forkchoice state API + // on top of heads part of the canonical state. Not + // providing this argument leads the `EngineTree` to ignore + // the payload building attributes: + let tree_config = builder + .config() + .engine + .tree_config() + .with_always_process_payload_attributes_on_canonical_head(true); + let launcher = EngineNodeLauncher::new( + builder.task_executor().clone(), + builder.config().datadir(), + tree_config, + ); + builder.launch_with(launcher) + }) + .await?; handle.node_exit_future.await }) { diff --git a/crates/node/src/test_utils.rs b/crates/node/src/test_utils.rs index 29859b2a..b39be4cb 100644 --- a/crates/node/src/test_utils.rs +++ b/crates/node/src/test_utils.rs @@ -13,7 +13,7 @@ use reth_e2e_test_utils::{ use reth_engine_local::LocalPayloadAttributesBuilder; use reth_node_builder::{ rpc::RpcHandleProvider, EngineNodeLauncher, Node, NodeBuilder, NodeConfig, NodeHandle, - NodeTypes, NodeTypesWithDBAdapter, PayloadAttributesBuilder, PayloadTypes, + NodeTypes, NodeTypesWithDBAdapter, PayloadAttributesBuilder, PayloadTypes, TreeConfig, }; use reth_node_core::args::{DiscoveryArgs, NetworkArgs, RpcServerArgs, TxPoolArgs}; use reth_provider::providers::BlockchainProvider; @@ -87,10 +87,12 @@ where .with_components(node.components_builder()) .with_add_ons(node.add_ons()) .launch_with_fn(|builder| { + let tree_config = TreeConfig::default() + .with_always_process_payload_attributes_on_canonical_head(true); let launcher = EngineNodeLauncher::new( builder.task_executor().clone(), builder.config().datadir(), - Default::default(), + tree_config, ); builder.launch_with(launcher) }) diff --git a/crates/node/tests/e2e.rs b/crates/node/tests/e2e.rs index 20637050..01175bca 100644 --- a/crates/node/tests/e2e.rs +++ b/crates/node/tests/e2e.rs @@ -1,8 +1,8 @@ //! End-to-end tests for the rollup node. use alloy_eips::BlockNumberOrTag; -use alloy_primitives::{b256, Address, Bytes, Signature, U256}; -use futures::{task::noop_waker_ref, FutureExt, StreamExt}; +use alloy_primitives::{address, b256, Address, Bytes, Signature, B256, U256}; +use futures::StreamExt; use reth_network::{NetworkConfigBuilder, PeersInfo}; use reth_rpc_api::EthApiServer; use reth_scroll_chainspec::SCROLL_DEV; @@ -16,7 +16,7 @@ use rollup_node::{ BeaconProviderArgs, DatabaseArgs, EngineDriverArgs, L1ProviderArgs, NetworkArgs as ScrollNetworkArgs, ScrollRollupNodeConfig, SequencerArgs, }; -use rollup_node_manager::{RollupManagerEvent, RollupManagerHandle}; +use rollup_node_manager::{RollupManagerCommand, RollupManagerEvent, RollupManagerHandle}; use rollup_node_primitives::BatchCommitData; use rollup_node_providers::BlobSource; use rollup_node_sequencer::L1MessageInclusionMode; @@ -24,12 +24,8 @@ use rollup_node_watcher::L1Notification; use scroll_alloy_consensus::TxL1Message; use scroll_network::{NewBlockWithPeer, SCROLL_MAINNET}; use scroll_wire::{ScrollWireConfig, ScrollWireProtocolHandler}; -use std::{ - path::PathBuf, - sync::Arc, - task::{Context, Poll}, -}; -use tokio::sync::Mutex; +use std::{path::PathBuf, sync::Arc}; +use tokio::sync::{oneshot, Mutex}; use tracing::trace; #[tokio::test] @@ -471,7 +467,7 @@ async fn graceful_shutdown_consolidates_most_recent_batch_on_startup() -> eyre:: ); let (_, events) = ScrollWireProtocolHandler::new(ScrollWireConfig::new(true)); - let (mut rnm, handle, l1_notification_tx) = config + let (rnm, handle, l1_notification_tx) = config .clone() .build( node.inner.network.clone(), @@ -482,17 +478,13 @@ async fn graceful_shutdown_consolidates_most_recent_batch_on_startup() -> eyre:: ) .await?; - // Request an event stream from the rollup node manager and manually poll rnm to process the - // event stream request from the handle. - let mut rnm_events = Box::pin(handle.get_event_listener()); - let mut rnm_events = loop { - let _ = rnm.poll_unpin(&mut Context::from_waker(noop_waker_ref())); - if let Poll::Ready(events) = - rnm_events.poll_unpin(&mut Context::from_waker(noop_waker_ref())) - { - break events.unwrap(); - } - }; + // Spawn a task that constantly polls the rnm to make progress. + let rnm_join_handle = tokio::spawn(async { + let _ = rnm.await; + }); + + // Request an event stream from the rollup node manager. + let mut rnm_events = handle.get_event_listener().await?; // Extract the L1 notification sender let l1_notification_tx = l1_notification_tx.unwrap(); @@ -526,8 +518,9 @@ async fn graceful_shutdown_consolidates_most_recent_batch_on_startup() -> eyre:: let mut i = 1; loop { let block_info = loop { - let event = loop_until_event(&mut rnm, &mut rnm_events).await; - if let RollupManagerEvent::L1DerivedBlockConsolidated(consolidation_outcome) = event { + if let Some(RollupManagerEvent::L1DerivedBlockConsolidated(consolidation_outcome)) = + rnm_events.next().await + { assert!(consolidation_outcome.block_info().block_info.number == i); break consolidation_outcome.block_info().block_info; } @@ -550,8 +543,9 @@ async fn graceful_shutdown_consolidates_most_recent_batch_on_startup() -> eyre:: let mut i = 5; let hash = loop { let hash = loop { - let event = loop_until_event(&mut rnm, &mut rnm_events).await; - if let RollupManagerEvent::L1DerivedBlockConsolidated(consolidation_outcome) = event { + if let Some(RollupManagerEvent::L1DerivedBlockConsolidated(consolidation_outcome)) = + rnm_events.next().await + { assert!(consolidation_outcome.block_info().block_info.number == i); break consolidation_outcome.block_info().block_info.hash; } @@ -574,13 +568,13 @@ async fn graceful_shutdown_consolidates_most_recent_batch_on_startup() -> eyre:: assert_eq!(head_block_hash.header.hash, hash, "Head block hash does not match expected hash"); // Simulate a shutdown of the rollup node manager by dropping it. - drop(rnm); + rnm_join_handle.abort(); drop(l1_notification_tx); drop(rnm_events); // Start the RNM again. let (_, events) = ScrollWireProtocolHandler::new(ScrollWireConfig::new(true)); - let (mut rnm, handle, l1_notification_tx) = config + let (rnm, handle, l1_notification_tx) = config .clone() .build( node.inner.network.clone(), @@ -592,16 +586,13 @@ async fn graceful_shutdown_consolidates_most_recent_batch_on_startup() -> eyre:: .await?; let l1_notification_tx = l1_notification_tx.unwrap(); - // Get a handle to the event stream from the rollup node manager. - let mut rnm_events = Box::pin(handle.get_event_listener()); - let mut rnm_events = loop { - let _ = rnm.poll_unpin(&mut Context::from_waker(noop_waker_ref())); - if let Poll::Ready(events) = - rnm_events.poll_unpin(&mut Context::from_waker(noop_waker_ref())) - { - break events.unwrap(); - } - }; + // Spawn a task that constantly polls the rnm to make progress. + tokio::spawn(async { + let _ = rnm.await; + }); + + // Request an event stream from the rollup node manager. + let mut rnm_events = handle.get_event_listener().await?; // Send the second batch again to mimic the watcher behaviour. l1_notification_tx.send(Arc::new(L1Notification::BatchCommit(batch_0_data.clone()))).await?; @@ -609,8 +600,9 @@ async fn graceful_shutdown_consolidates_most_recent_batch_on_startup() -> eyre:: // Lets fetch the first consolidated block event - this should be the first block of the batch. let l2_block = loop { - let event = loop_until_event(&mut rnm, &mut rnm_events).await; - if let RollupManagerEvent::L1DerivedBlockConsolidated(consolidation_outcome) = event { + if let Some(RollupManagerEvent::L1DerivedBlockConsolidated(consolidation_outcome)) = + rnm_events.next().await + { break consolidation_outcome.block_info().clone(); } }; @@ -625,8 +617,9 @@ async fn graceful_shutdown_consolidates_most_recent_batch_on_startup() -> eyre:: // commit. for i in 2..=57 { loop { - let event = loop_until_event(&mut rnm, &mut rnm_events).await; - if let RollupManagerEvent::L1DerivedBlockConsolidated(consolidation_outcome) = event { + if let Some(RollupManagerEvent::L1DerivedBlockConsolidated(consolidation_outcome)) = + rnm_events.next().await + { assert!(consolidation_outcome.block_info().block_info.number == i); break; } @@ -649,25 +642,253 @@ async fn graceful_shutdown_consolidates_most_recent_batch_on_startup() -> eyre:: Ok(()) } -/// Read the file provided at `path` as a [`Bytes`]. -pub fn read_to_bytes>(path: P) -> eyre::Result { - use std::str::FromStr; - Ok(Bytes::from_str(&std::fs::read_to_string(path)?)?) -} +#[tokio::test] +async fn can_handle_batch_revert() -> eyre::Result<()> { + reth_tracing::init_test_tracing(); + let chain_spec = (*SCROLL_MAINNET).clone(); + + // Launch a node + let (mut nodes, _tasks, _) = + setup_engine(default_test_scroll_rollup_node_config(), 1, chain_spec.clone(), false, false) + .await?; + let node = nodes.pop().unwrap(); + + // Instantiate the rollup node manager. + let mut config = default_test_scroll_rollup_node_config(); + let path = node.inner.config.datadir().db().join("scroll.db?mode=rwc"); + let path = PathBuf::from("sqlite://".to_string() + &*path.to_string_lossy()); + config.database_args.path = Some(path.clone()); + config.beacon_provider_args.url = Some( + "http://dummy:8545" + .parse() + .expect("valid url that will not be used as test batches use calldata"), + ); + + let (_, events) = ScrollWireProtocolHandler::new(ScrollWireConfig::new(true)); + let (rnm, handle, l1_watcher_tx) = config + .clone() + .build( + node.inner.network.clone(), + events, + node.inner.add_ons_handle.rpc_handle.rpc_server_handles.clone(), + chain_spec.clone(), + path.clone(), + ) + .await?; + let l1_watcher_tx = l1_watcher_tx.unwrap(); + + // Spawn a task that constantly polls the rnm to make progress. + tokio::spawn(async { + let _ = rnm.await; + }); + + // Request an event stream from the rollup node manager and manually poll rnm to process the + // event stream request from the handle. + let mut rnm_events = handle.get_event_listener().await?; + + // Load test batches + let raw_calldata_0 = read_to_bytes("./tests/testdata/batch_0_calldata.bin")?; + let batch_0_data = BatchCommitData { + hash: b256!("5AAEB6101A47FC16866E80D77FFE090B6A7B3CF7D988BE981646AB6AEDFA2C42"), + index: 1, + block_number: 18318207, + block_timestamp: 1696935971, + calldata: Arc::new(raw_calldata_0), + blob_versioned_hash: None, + finalized_block_number: None, + }; + let raw_calldata_1 = read_to_bytes("./tests/testdata/batch_1_calldata.bin")?; + let batch_1_data = BatchCommitData { + hash: b256!("AA8181F04F8E305328A6117FA6BC13FA2093A3C4C990C5281DF95A1CB85CA18F"), + index: 2, + block_number: 18318215, + block_timestamp: 1696936000, + calldata: Arc::new(raw_calldata_1), + blob_versioned_hash: None, + finalized_block_number: None, + }; + let revert_batch_data = BatchCommitData { + hash: B256::random(), + index: 2, + block_number: 18318220, + block_timestamp: 1696936500, + calldata: Arc::new(Default::default()), + blob_versioned_hash: None, + finalized_block_number: None, + }; + + // Send the first batch. + l1_watcher_tx.send(Arc::new(L1Notification::BatchCommit(batch_0_data))).await?; + + // Read the first 4 blocks. + loop { + if let Some(RollupManagerEvent::L1DerivedBlockConsolidated(consolidation_outcome)) = + rnm_events.next().await + { + if consolidation_outcome.block_info().block_info.number == 4 { + break + } + } + } + + // Send the second batch. + l1_watcher_tx.send(Arc::new(L1Notification::BatchCommit(batch_1_data))).await?; -async fn loop_until_event( - rnm: &mut (impl futures::Future + Unpin), - rnm_events: &mut (impl futures::Stream + Unpin), -) -> RollupManagerEvent { + // Read the next 42 blocks. loop { - let _ = rnm.poll_unpin(&mut Context::from_waker(noop_waker_ref())); - if let Poll::Ready(Some(event)) = - rnm_events.poll_next_unpin(&mut Context::from_waker(noop_waker_ref())) + if let Some(RollupManagerEvent::L1DerivedBlockConsolidated(consolidation_outcome)) = + rnm_events.next().await { - return event; + if consolidation_outcome.block_info().block_info.number == 46 { + break + } } - tokio::task::yield_now().await; } + + let (tx, rx) = oneshot::channel(); + handle.send_command(RollupManagerCommand::Status(tx)).await; + + let status = rx.await?; + + // Assert the forkchoice state is above 4 + assert!(status.forkchoice_state.head_block_info().number > 4); + assert!(status.forkchoice_state.safe_block_info().number > 4); + + // Send the third batch which should trigger the revert. + l1_watcher_tx.send(Arc::new(L1Notification::BatchCommit(revert_batch_data))).await?; + + // Wait for the third batch to be proceeded. + tokio::time::sleep(tokio::time::Duration::from_millis(100)).await; + + let (tx, rx) = oneshot::channel(); + handle.send_command(RollupManagerCommand::Status(tx)).await; + + let status = rx.await?; + + // Assert the forkchoice state was reset to 4. + assert_eq!(status.forkchoice_state.head_block_info().number, 4); + assert_eq!(status.forkchoice_state.safe_block_info().number, 4); + + Ok(()) +} + +#[tokio::test] +async fn can_handle_reorgs_while_sequencing() -> eyre::Result<()> { + reth_tracing::init_test_tracing(); + let chain_spec = (*SCROLL_DEV).clone(); + + // Launch a node + let mut config = default_test_scroll_rollup_node_config(); + config.sequencer_args.block_time = 0; + let (mut nodes, _tasks, _) = setup_engine(config, 1, chain_spec.clone(), false, false).await?; + let node = nodes.pop().unwrap(); + + // Instantiate the rollup node manager. + let mut config = default_sequencer_test_scroll_rollup_node_config(); + let path = node.inner.config.datadir().db().join("scroll.db?mode=rwc"); + let path = PathBuf::from("sqlite://".to_string() + &*path.to_string_lossy()); + config.database_args.path = Some(path.clone()); + config.beacon_provider_args.url = Some( + "http://dummy:8545" + .parse() + .expect("valid url that will not be used as test batches use calldata"), + ); + config.engine_driver_args.sync_at_startup = false; + config.sequencer_args.max_l1_messages_per_block = 1; + + let (_, events) = ScrollWireProtocolHandler::new(ScrollWireConfig::new(true)); + let (rnm, handle, l1_watcher_tx) = config + .clone() + .build( + node.inner.network.clone(), + events, + node.inner.add_ons_handle.rpc_handle.rpc_server_handles.clone(), + chain_spec.clone(), + path.clone(), + ) + .await?; + let l1_watcher_tx = l1_watcher_tx.unwrap(); + + // Spawn a task that constantly polls the rnm to make progress. + tokio::spawn(async { + let _ = rnm.await; + }); + + // Request an event stream from the rollup node manager and manually poll rnm to process the + // event stream request from the handle. + let mut rnm_events = handle.get_event_listener().await?; + + // Send an L1 message. + let message = TxL1Message { + queue_index: 0, + gas_limit: 21000, + to: Default::default(), + value: Default::default(), + sender: address!("f39Fd6e51aad88F6F4ce6aB8827279cffFb92266"), + input: Default::default(), + }; + + // Let the sequencer build 10 blocks before performing the reorg process. + let mut i = 0; + loop { + handle.build_block().await; + if let Some(RollupManagerEvent::BlockSequenced(_)) = rnm_events.next().await { + if i == 10 { + break + } + i += 1; + } + } + + // Send a L1 message and wait for it to be indexed. + l1_watcher_tx + .send(Arc::new(L1Notification::L1Message { message, block_number: 10, block_timestamp: 0 })) + .await?; + loop { + if let Some(RollupManagerEvent::L1MessageIndexed(index)) = rnm_events.next().await { + assert_eq!(index, 0); + break + } + } + l1_watcher_tx.send(Arc::new(L1Notification::NewBlock(10))).await?; + + // Wait for block that contains the L1 message. + handle.build_block().await; + let l2_reorged_height; + loop { + if let Some(RollupManagerEvent::BlockSequenced(block)) = rnm_events.next().await { + if block.body.transactions.iter().any(|tx| tx.is_l1_message()) { + l2_reorged_height = block.header.number; + break + } + } + } + + // Issue and wait for the reorg. + l1_watcher_tx.send(Arc::new(L1Notification::Reorg(9))).await?; + loop { + if let Some(RollupManagerEvent::Reorg(height)) = rnm_events.next().await { + assert_eq!(height, 9); + break + } + } + + // Get the next sequenced L2 block. + handle.build_block().await; + loop { + if let Some(RollupManagerEvent::BlockSequenced(block)) = rnm_events.next().await { + assert_eq!(block.number, l2_reorged_height); + break + } + } + + Ok(()) +} + +/// Read the file provided at `path` as a [`Bytes`]. +pub fn read_to_bytes>(path: P) -> eyre::Result { + use std::str::FromStr; + Ok(Bytes::from_str(&std::fs::read_to_string(path)?)?) } /// Waits for n events to be emitted. diff --git a/crates/node/tests/sync.rs b/crates/node/tests/sync.rs index d2f42742..9029bbd5 100644 --- a/crates/node/tests/sync.rs +++ b/crates/node/tests/sync.rs @@ -24,7 +24,13 @@ async fn test_should_consolidate_to_block_15k() -> eyre::Result<()> { reth_tracing::init_test_tracing(); // Prepare the config for a L1 consolidation. - let alchemy_key = std::env::var("ALCHEMY_KEY")?; + let alchemy_key = if let Ok(key) = std::env::var("ALCHEMY_KEY") { + key + } else { + eprintln!("ALCHEMY_KEY environment variable is not set. Skipping test."); + return Ok(()); + }; + let node_config = ScrollRollupNodeConfig { test: false, network_args: NetworkArgs { diff --git a/crates/providers/src/test_utils.rs b/crates/providers/src/test_utils.rs index b49c373f..263a93dd 100644 --- a/crates/providers/src/test_utils.rs +++ b/crates/providers/src/test_utils.rs @@ -1,32 +1,34 @@ //! Test utils for providers. use crate::{BlobProvider, L1MessageProvider, L1ProviderError}; -use std::sync::Arc; +use std::{collections::HashMap, sync::Arc}; use alloy_eips::eip4844::Blob; use alloy_primitives::B256; use rollup_node_primitives::L1MessageEnvelope; /// Implementation of the [`crate::L1Provider`] that never returns blobs. -#[derive(Clone, Debug)] -pub struct NoBlobProvider { +#[derive(Clone, Default, Debug)] +pub struct MockL1Provider { /// L1 message provider. pub l1_messages_provider: P, + /// Mocked blobs. + pub blobs: HashMap, } #[async_trait::async_trait] -impl BlobProvider for NoBlobProvider

{ +impl BlobProvider for MockL1Provider

{ async fn blob( &self, _block_timestamp: u64, - _hash: B256, + hash: B256, ) -> Result>, L1ProviderError> { - Ok(None) + Ok(self.blobs.get(&hash).map(|b| Arc::new(*b))) } } #[async_trait::async_trait] -impl L1MessageProvider for NoBlobProvider

{ +impl L1MessageProvider for MockL1Provider

{ type Error = P::Error; async fn get_l1_message_with_block_number( diff --git a/crates/sequencer/tests/e2e.rs b/crates/sequencer/tests/e2e.rs index 1151a715..ee618e9b 100644 --- a/crates/sequencer/tests/e2e.rs +++ b/crates/sequencer/tests/e2e.rs @@ -157,7 +157,7 @@ async fn can_build_blocks_with_delayed_l1_messages() { reth_tracing::init_test_tracing(); let chain_spec = SCROLL_DEV.clone(); - const BLOCK_BUILDING_DURATION: Duration = tokio::time::Duration::from_millis(0); + const BLOCK_BUILDING_DURATION: Duration = Duration::from_millis(0); const BLOCK_GAP_TRIGGER: u64 = 100; const L1_MESSAGE_DELAY: u64 = 2; diff --git a/crates/signer/Cargo.toml b/crates/signer/Cargo.toml index a606ca00..120d0a97 100644 --- a/crates/signer/Cargo.toml +++ b/crates/signer/Cargo.toml @@ -30,9 +30,7 @@ tracing.workspace = true [dev-dependencies] alloy-signer-local.workspace = true -hex = "0.4.3" reth-tracing.workspace = true -tempfile = "3.20.0" [features] default = []