From d666f6f1a0a67fd95694bb5f42b3e7af19a0abea Mon Sep 17 00:00:00 2001 From: Alex Gherghisan Date: Wed, 13 Mar 2024 15:09:13 +0000 Subject: [PATCH] feat: track side effects in public (#5129) This PR adds start/end side effect counters to private & public context inputs. This solves #4958 by assigning the correct side effect counters to notes created in setup/teardown so that when they're recombined into a single array they can be sorted in order of creation. A few e2e tests were also added to validate the change. Next steps: - track public storage reads and writes as side effects in Noir (currently done in parallel, in TS) - validate a call's side effects are in between its start and end counters in the private and kernels - when calling a public function, the public context should update its `context.side_effect_counter` to the called function's `end_side_effect_counter + 1` (just like the private context) - rename `call_context.side_effect_counter` to just `call_context.counter` Fix #4958 Fix #5185 --- .../src/core/libraries/ConstantsGen.sol | 6 +- .../context/inputs/private_context_inputs.nr | 3 +- .../context/inputs/public_context_inputs.nr | 2 + .../aztec/src/context/private_context.nr | 18 +- .../aztec/src/context/public_context.nr | 50 ++- .../aztec-nr/aztec/src/oracle/public_call.nr | 3 + .../contracts/fpc_contract/src/interfaces.nr | 17 +- .../contracts/fpc_contract/src/main.nr | 22 +- .../import_test_contract/src/main.nr | 2 +- .../lending_contract/src/interfaces.nr | 16 +- .../contracts/lending_contract/src/main.nr | 28 +- .../contracts/test_contract/src/interface.nr | 14 +- .../src/interfaces.nr | 8 +- .../token_blacklist_contract/src/main.nr | 24 +- .../token_bridge_contract/src/main.nr | 6 +- .../src/token_interface.nr | 6 +- .../uniswap_contract/src/interfaces.nr | 12 +- .../contracts/uniswap_contract/src/main.nr | 14 +- .../crates/types/src/abis/call_context.nr | 12 +- .../types/src/abis/private_call_stack_item.nr | 4 +- .../src/abis/private_circuit_public_inputs.nr | 7 +- .../types/src/abis/public_call_stack_item.nr | 4 +- .../src/abis/public_circuit_public_inputs.nr | 15 +- .../crates/types/src/constants.nr | 8 +- .../private_circuit_public_inputs_builder.nr | 3 +- .../src/tests/public_call_data_builder.nr | 2 +- .../public_circuit_public_inputs_builder.nr | 4 + .../src/fee/private_fee_payment_method.ts | 19 +- .../circuit-types/src/mocks_to_purge.ts | 2 +- yarn-project/circuits.js/src/constants.gen.ts | 6 +- .../__snapshots__/contract_class.test.ts.snap | 10 +- .../private_call_stack_item.test.ts.snap | 4 +- ...private_circuit_public_inputs.test.ts.snap | 4 +- .../public_call_stack_item.test.ts.snap | 6 +- .../public_circuit_public_inputs.test.ts.snap | 4 +- .../circuits.js/src/structs/call_context.ts | 6 +- .../kernel/combined_accumulated_data.test.ts | 38 +- .../kernel/combined_accumulated_data.ts | 6 +- .../src/structs/private_call_stack_item.ts | 2 +- .../structs/private_circuit_public_inputs.ts | 8 + .../src/structs/public_call_request.ts | 2 +- .../structs/public_circuit_public_inputs.ts | 18 + .../circuits.js/src/structs/side_effects.ts | 10 + .../circuits.js/src/tests/factories.ts | 5 +- .../src/e2e_dapp_subscription.test.ts | 7 +- yarn-project/end-to-end/src/e2e_fees.test.ts | 324 +++++++++++++----- .../src/__snapshots__/index.test.ts.snap | 24 +- .../nested-call-private-kernel-init.hex | 2 +- .../nested-call-private-kernel-inner.hex | 2 +- .../nested-call-private-kernel-ordering.hex | 2 +- .../src/type_conversion.ts | 9 +- .../__snapshots__/index.test.ts.snap | 10 +- .../block_builder/solo_block_builder.test.ts | 19 +- .../src/sequencer/abstract_phase_manager.ts | 8 +- .../src/sequencer/public_processor.test.ts | 14 +- .../src/sequencer/utils.test.ts | 26 ++ .../sequencer-client/src/sequencer/utils.ts | 30 ++ .../simulator/src/acvm/oracle/oracle.ts | 10 +- .../simulator/src/acvm/oracle/typed_oracle.ts | 5 +- .../src/avm/temporary_executor_migration.ts | 5 + .../src/client/client_execution_context.ts | 4 + .../simulator/src/client/execution_result.ts | 2 +- .../src/client/private_execution.test.ts | 4 +- .../simulator/src/client/simulator.ts | 9 +- .../src/common/side_effect_counter.ts | 5 + .../simulator/src/public/avm_executor.test.ts | 2 +- .../simulator/src/public/execution.ts | 4 + yarn-project/simulator/src/public/executor.ts | 22 +- .../simulator/src/public/index.test.ts | 18 +- .../src/public/public_execution_context.ts | 11 +- 70 files changed, 741 insertions(+), 297 deletions(-) create mode 100644 yarn-project/sequencer-client/src/sequencer/utils.test.ts create mode 100644 yarn-project/sequencer-client/src/sequencer/utils.ts diff --git a/l1-contracts/src/core/libraries/ConstantsGen.sol b/l1-contracts/src/core/libraries/ConstantsGen.sol index 67c6755e781..09b5137d2cd 100644 --- a/l1-contracts/src/core/libraries/ConstantsGen.sol +++ b/l1-contracts/src/core/libraries/ConstantsGen.sol @@ -114,9 +114,9 @@ library Constants { uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH = 4; uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_LENGTH = 5; uint256 internal constant PARTIAL_STATE_REFERENCE_LENGTH = 6; - uint256 internal constant PRIVATE_CALL_STACK_ITEM_LENGTH = 214; - uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 209; - uint256 internal constant PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 200; + uint256 internal constant PRIVATE_CALL_STACK_ITEM_LENGTH = 215; + uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 210; + uint256 internal constant PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 202; uint256 internal constant STATE_REFERENCE_LENGTH = 8; uint256 internal constant TX_CONTEXT_DATA_LENGTH = 4; uint256 internal constant TX_REQUEST_LENGTH = 10; diff --git a/noir-projects/aztec-nr/aztec/src/context/inputs/private_context_inputs.nr b/noir-projects/aztec-nr/aztec/src/context/inputs/private_context_inputs.nr index a2bf9752ee2..4d1e8e0e0dd 100644 --- a/noir-projects/aztec-nr/aztec/src/context/inputs/private_context_inputs.nr +++ b/noir-projects/aztec-nr/aztec/src/context/inputs/private_context_inputs.nr @@ -10,5 +10,6 @@ struct PrivateContextInputs { call_context : CallContext, historical_header: Header, private_global_variables: PrivateGlobalVariables, + start_side_effect_counter: u32, } -// docs:end:private-context-inputs \ No newline at end of file +// docs:end:private-context-inputs diff --git a/noir-projects/aztec-nr/aztec/src/context/inputs/public_context_inputs.nr b/noir-projects/aztec-nr/aztec/src/context/inputs/public_context_inputs.nr index 6b8aefbbcd4..804485feea1 100644 --- a/noir-projects/aztec-nr/aztec/src/context/inputs/public_context_inputs.nr +++ b/noir-projects/aztec-nr/aztec/src/context/inputs/public_context_inputs.nr @@ -9,5 +9,7 @@ struct PublicContextInputs { historical_header: Header, public_global_variables: PublicGlobalVariables, + + start_side_effect_counter: u32, } // docs:end:public-context-inputs diff --git a/noir-projects/aztec-nr/aztec/src/context/private_context.nr b/noir-projects/aztec-nr/aztec/src/context/private_context.nr index 7e43711afeb..99f5580d620 100644 --- a/noir-projects/aztec-nr/aztec/src/context/private_context.nr +++ b/noir-projects/aztec-nr/aztec/src/context/private_context.nr @@ -98,7 +98,7 @@ impl ContextInterface for PrivateContext { // Returns the header of a block whose state is used during private execution (not the block the transaction is // included in). - pub fn get_header(self) -> Header { + fn get_header(self) -> Header { self.historical_header } @@ -117,7 +117,7 @@ impl ContextInterface for PrivateContext { impl PrivateContext { pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext { - let side_effect_counter = inputs.call_context.start_side_effect_counter; + let side_effect_counter = inputs.start_side_effect_counter; let mut min_revertible_side_effect_counter = 0; if is_empty(inputs.call_context.msg_sender) { min_revertible_side_effect_counter = side_effect_counter; @@ -161,12 +161,6 @@ impl PrivateContext { call_context: self.inputs.call_context, args_hash: self.args_hash, return_values: self.return_values.storage, - // TODO(fees): start this from 0 and test the following: - // - in the private circuit init that it gets set correctly - // - in the private circuit inner that it remains 0 - // I've had to initialize the counter here so that it would work for contract deployments - // the above checks should be doable after we figure out fee payments for contract deployments - // TO(fees): there are no more contract deployments at the protocol level min_revertible_side_effect_counter: self.min_revertible_side_effect_counter, note_hash_read_requests: self.note_hash_read_requests.storage, nullifier_read_requests: self.nullifier_read_requests.storage, @@ -176,6 +170,7 @@ impl PrivateContext { private_call_stack_hashes: self.private_call_stack_hashes.storage, public_call_stack_hashes: self.public_call_stack_hashes.storage, new_l2_to_l1_msgs: self.new_l2_to_l1_msgs.storage, + start_side_effect_counter: self.inputs.start_side_effect_counter, end_side_effect_counter: self.side_effect_counter, encrypted_logs_hash, unencrypted_logs_hash, @@ -337,7 +332,8 @@ impl PrivateContext { is_delegate_call ); - assert_eq(item.public_inputs.call_context.start_side_effect_counter, self.side_effect_counter); + assert_eq(item.public_inputs.call_context.side_effect_counter, self.side_effect_counter); + assert_eq(item.public_inputs.start_side_effect_counter, self.side_effect_counter); self.side_effect_counter = item.public_inputs.end_side_effect_counter + 1; assert(contract_address.eq(item.contract_address)); @@ -462,6 +458,8 @@ impl PrivateContext { new_note_hashes: [SideEffect::empty(); MAX_NEW_NOTE_HASHES_PER_CALL], new_nullifiers: [SideEffectLinkedToNoteHash::empty(); MAX_NEW_NULLIFIERS_PER_CALL], new_l2_to_l1_msgs: [L2ToL1Message::empty(); MAX_NEW_L2_TO_L1_MSGS_PER_CALL], + start_side_effect_counter: 0, + end_side_effect_counter: 0, unencrypted_logs_hash: [0; NUM_FIELDS_PER_SHA256], unencrypted_log_preimages_length: 0, historical_header: Header::empty(), @@ -475,7 +473,7 @@ impl PrivateContext { assert(contract_address.eq(item.contract_address)); assert(function_selector.eq(item.function_data.selector)); - assert_eq(item.public_inputs.call_context.start_side_effect_counter, self.side_effect_counter); + assert_eq(item.public_inputs.call_context.side_effect_counter, self.side_effect_counter); // We increment the sideffect counter by one, to account for the call itself being a side effect. self.side_effect_counter = self.side_effect_counter + 1; diff --git a/noir-projects/aztec-nr/aztec/src/context/public_context.nr b/noir-projects/aztec-nr/aztec/src/context/public_context.nr index 09d780730cf..cc5dc60d90e 100644 --- a/noir-projects/aztec-nr/aztec/src/context/public_context.nr +++ b/noir-projects/aztec-nr/aztec/src/context/public_context.nr @@ -104,7 +104,7 @@ impl PublicContext { pub fn new(inputs: PublicContextInputs, args_hash: Field) -> PublicContext { PublicContext { inputs, - side_effect_counter: inputs.call_context.start_side_effect_counter, + side_effect_counter: inputs.start_side_effect_counter, args_hash, return_values: BoundedVec::new(), nullifier_read_requests: BoundedVec::new(), @@ -158,6 +158,8 @@ impl PublicContext { new_nullifiers: self.new_nullifiers.storage, public_call_stack_hashes: self.public_call_stack_hashes.storage, new_l2_to_l1_msgs: self.new_l2_to_l1_msgs.storage, + start_side_effect_counter: self.inputs.start_side_effect_counter, + end_side_effect_counter: self.side_effect_counter, unencrypted_logs_hash, unencrypted_log_preimages_length, historical_header: self.inputs.historical_header, @@ -213,59 +215,81 @@ impl PublicContext { } pub fn call_public_function( - _self: Self, + self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector, args: [Field; ARGS_COUNT] ) -> [Field; RETURN_VALUES_LENGTH] { let args_hash = hash_args(args); assert(args_hash == arguments::pack_arguments(args)); - call_public_function_internal(contract_address, function_selector, args_hash, false, false) + self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, false) } pub fn static_call_public_function( - _self: Self, + self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector, args: [Field; ARGS_COUNT] ) -> [Field; RETURN_VALUES_LENGTH] { let args_hash = hash_args(args); assert(args_hash == arguments::pack_arguments(args)); - call_public_function_internal(contract_address, function_selector, args_hash, true, false) + self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, true, false) } pub fn delegate_call_public_function( - _self: Self, + self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector, args: [Field; ARGS_COUNT] ) -> [Field; RETURN_VALUES_LENGTH] { let args_hash = hash_args(args); assert(args_hash == arguments::pack_arguments(args)); - call_public_function_internal(contract_address, function_selector, args_hash, false, true) + self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, true) } pub fn call_public_function_no_args( - _self: Self, + self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector ) -> [Field; RETURN_VALUES_LENGTH] { - call_public_function_internal(contract_address, function_selector, 0, false, false) + self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, false) } pub fn static_call_public_function_no_args( - _self: Self, + self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector ) -> [Field; RETURN_VALUES_LENGTH] { - call_public_function_internal(contract_address, function_selector, 0, true, false) + self.call_public_function_with_packed_args(contract_address, function_selector, 0, true, false) } pub fn delegate_call_public_function_no_args( - _self: Self, + self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector ) -> [Field; RETURN_VALUES_LENGTH] { - call_public_function_internal(contract_address, function_selector, 0, false, true) + self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, true) + } + + pub fn call_public_function_with_packed_args( + self: &mut Self, + contract_address: AztecAddress, + function_selector: FunctionSelector, + args_hash: Field, + is_static_call: bool, + is_delegate_call: bool + ) -> [Field; RETURN_VALUES_LENGTH] { + let side_effect_counter = self.side_effect_counter; + // TODO get next value from output of `call_public_function_internal` + self.side_effect_counter += 1; + + call_public_function_internal( + contract_address, + function_selector, + args_hash, + side_effect_counter, + is_static_call, + is_delegate_call + ) } } diff --git a/noir-projects/aztec-nr/aztec/src/oracle/public_call.nr b/noir-projects/aztec-nr/aztec/src/oracle/public_call.nr index 9675401570c..c12ab74c510 100644 --- a/noir-projects/aztec-nr/aztec/src/oracle/public_call.nr +++ b/noir-projects/aztec-nr/aztec/src/oracle/public_call.nr @@ -5,6 +5,7 @@ fn call_public_function_oracle( _contract_address: AztecAddress, _function_selector: FunctionSelector, _args_hash: Field, + _side_effect_counter: u32, _is_static_call: bool, _is_delegate_call: bool ) -> [Field; RETURN_VALUES_LENGTH] {} @@ -13,6 +14,7 @@ unconstrained pub fn call_public_function_internal( contract_address: AztecAddress, function_selector: FunctionSelector, args_hash: Field, + side_effect_counter: u32, is_static_call: bool, is_delegate_call: bool ) -> [Field; RETURN_VALUES_LENGTH] { @@ -20,6 +22,7 @@ unconstrained pub fn call_public_function_internal( contract_address, function_selector, args_hash, + side_effect_counter, is_static_call, is_delegate_call ) diff --git a/noir-projects/noir-contracts/contracts/fpc_contract/src/interfaces.nr b/noir-projects/noir-contracts/contracts/fpc_contract/src/interfaces.nr index 717c8223f0e..dd18df1295f 100644 --- a/noir-projects/noir-contracts/contracts/fpc_contract/src/interfaces.nr +++ b/noir-projects/noir-contracts/contracts/fpc_contract/src/interfaces.nr @@ -14,7 +14,7 @@ impl Token { pub fn transfer_public( self: Self, - context: PublicContext, + context: &mut PublicContext, from: AztecAddress, to: AztecAddress, amount: Field, @@ -27,6 +27,21 @@ impl Token { ); } + pub fn shield( + self: Self, + context: &mut PublicContext, + from: AztecAddress, + amount: Field, + secret_hash: Field, + nonce: Field + ) { + let _ = context.call_public_function( + self.address, + FunctionSelector::from_signature("shield((Field),Field,Field,Field)"), + [from.to_field(), amount, secret_hash, nonce] + ); + } + // Private pub fn unshield( self: Self, diff --git a/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr b/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr index 5f05fbb5bf9..476b2bdbd67 100644 --- a/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr @@ -19,7 +19,7 @@ contract FPC { } #[aztec(private)] - fn fee_entrypoint_private(amount: Field, asset: AztecAddress, nonce: Field) { + fn fee_entrypoint_private(amount: Field, asset: AztecAddress, secret_hash: Field, nonce: Field) { assert(asset == storage.other_asset.read_private()); let _res = Token::at(asset).unshield( @@ -32,8 +32,8 @@ contract FPC { let _void = context.call_public_function( context.this_address(), - FunctionSelector::from_signature("pay_fee((Field),Field,(Field))"), - [context.msg_sender().to_field(), amount, asset.to_field()] + FunctionSelector::from_signature("pay_fee_with_shielded_rebate(Field,(Field),Field)"), + [amount, asset.to_field(), secret_hash] ); } @@ -55,7 +55,7 @@ contract FPC { #[aztec(public)] #[aztec(internal)] fn prepare_fee(from: AztecAddress, amount: Field, asset: AztecAddress, nonce: Field) { - let _res = Token::at(asset).transfer_public(context, from, context.this_address(), amount, nonce); + let _res = Token::at(asset).transfer_public(&mut context, from, context.this_address(), amount, nonce); } #[aztec(public)] @@ -68,6 +68,18 @@ contract FPC { )[0]; // Just do public refunds for the present - Token::at(asset).transfer_public(context, context.this_address(), refund_address, refund, 0) + Token::at(asset).transfer_public(&mut context, context.this_address(), refund_address, refund, 0) + } + + #[aztec(public)] + #[aztec(internal)] + fn pay_fee_with_shielded_rebate(amount: Field, asset: AztecAddress, secretHash: Field) { + let refund = context.call_public_function( + storage.gas_token_address.read_public(), + FunctionSelector::from_signature("pay_fee(Field)"), + [amount] + )[0]; + + Token::at(asset).shield(&mut context, context.this_address(), refund, secretHash, 0); } } diff --git a/noir-projects/noir-contracts/contracts/import_test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/import_test_contract/src/main.nr index 0c06ea7e276..375bc2edaa5 100644 --- a/noir-projects/noir-contracts/contracts/import_test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/import_test_contract/src/main.nr @@ -71,7 +71,7 @@ contract ImportTest { #[aztec(public)] fn pubCallOpenFn(target: AztecAddress) -> Field { let test_contract_instance = TestPublicContextInterface::at(target); - let ret = test_contract_instance.create_nullifier_public(context, 1, 2); + let ret = test_contract_instance.create_nullifier_public(&mut context, 1, 2); ret[0] } diff --git a/noir-projects/noir-contracts/contracts/lending_contract/src/interfaces.nr b/noir-projects/noir-contracts/contracts/lending_contract/src/interfaces.nr index 7593f8353d2..f86f484562f 100644 --- a/noir-projects/noir-contracts/contracts/lending_contract/src/interfaces.nr +++ b/noir-projects/noir-contracts/contracts/lending_contract/src/interfaces.nr @@ -14,7 +14,7 @@ impl PriceFeed { Self { address } } - pub fn get_price(self: Self, context: PublicContext) -> U128 { + pub fn get_price(self: Self, context: &mut PublicContext) -> U128 { let return_values = context.call_public_function( self.address, FunctionSelector::from_signature("get_price(Field)"), @@ -36,21 +36,21 @@ impl Token { pub fn transfer_public( self: Self, - context: PublicContext, + context: &mut PublicContext, from: AztecAddress, to: AztecAddress, amount: Field, nonce: Field ) { - context.call_public_function( + let _ = context.call_public_function( self.address, FunctionSelector::from_signature("transfer_public((Field),(Field),Field,Field)"), [from.to_field(), to.to_field(), amount, nonce] ); } - pub fn mint_public(self: Self, context: PublicContext, to: AztecAddress, amount: Field) { - context.call_public_function( + pub fn mint_public(self: Self, context: &mut PublicContext, to: AztecAddress, amount: Field) { + let _ = context.call_public_function( self.address, FunctionSelector::from_signature("mint_public((Field),Field)"), [to.to_field(), amount] @@ -59,12 +59,12 @@ impl Token { pub fn burn_public( self: Self, - context: PublicContext, + context: &mut PublicContext, from: AztecAddress, amount: Field, nonce: Field ) { - context.call_public_function( + let _ = context.call_public_function( self.address, FunctionSelector::from_signature("burn_public((Field),Field,Field)"), [from.to_field(), amount, nonce] @@ -111,7 +111,7 @@ impl Lending { Self { address } } - pub fn update_accumulator(self: Self, context: PublicContext) -> Asset { + pub fn update_accumulator(self: Self, context: &mut PublicContext) -> Asset { let return_values = context.call_public_function_no_args( self.address, FunctionSelector::from_signature("update_accumulator()") diff --git a/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr b/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr index 7c06b7bc7c7..721c3d149ab 100644 --- a/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr @@ -115,14 +115,14 @@ contract Lending { #[aztec(public)] fn deposit_public(amount: Field, nonce: Field, on_behalf_of: Field, collateral_asset: AztecAddress) { Token::at(collateral_asset).transfer_public( - context, + &mut context, context.msg_sender(), context.this_address(), amount, nonce ); let selector = FunctionSelector::from_signature("_deposit((Field),Field,(Field))"); - context.call_public_function( + let _ = context.call_public_function( context.this_address(), selector, [on_behalf_of, amount, collateral_asset.to_field()] @@ -132,7 +132,7 @@ contract Lending { #[aztec(public)] #[aztec(internal)] fn _deposit(owner: AztecAddress, amount: Field, collateral_asset: AztecAddress) { - let _asset = Lending::at(context.this_address()).update_accumulator(context); + let _asset = Lending::at(context.this_address()).update_accumulator(&mut context); let coll_asset = storage.collateral_asset.read(); assert(coll_asset.eq(collateral_asset)); @@ -156,7 +156,7 @@ contract Lending { #[aztec(public)] fn withdraw_public(to: AztecAddress, amount: Field) { let selector = FunctionSelector::from_signature("_withdraw((Field),(Field),Field)"); - context.call_public_function( + let _ = context.call_public_function( context.this_address(), selector, [context.msg_sender().to_field(), to.to_field(), amount] @@ -166,8 +166,8 @@ contract Lending { #[aztec(public)] #[aztec(internal)] fn _withdraw(owner: AztecAddress, recipient: AztecAddress, amount: Field) { - let asset = Lending::at(context.this_address()).update_accumulator(context); - let price = PriceFeed::at(asset.oracle).get_price(context); + let asset = Lending::at(context.this_address()).update_accumulator(&mut context); + let price = PriceFeed::at(asset.oracle).get_price(&mut context); let coll_loc = storage.collateral.at(owner); let collateral: Field = coll_loc.read(); @@ -197,7 +197,7 @@ contract Lending { // @todo @LHerskind Support both shielding and transfers (for now just transfer) let collateral_asset = storage.collateral_asset.read(); - Token::at(collateral_asset).transfer_public(context, context.this_address(), recipient, amount, 0); + Token::at(collateral_asset).transfer_public(&mut context, context.this_address(), recipient, amount, 0); } #[aztec(private)] @@ -214,7 +214,7 @@ contract Lending { #[aztec(public)] fn borrow_public(to: AztecAddress, amount: Field) { let selector = FunctionSelector::from_signature("_borrow((Field),(Field),Field)"); - context.call_public_function( + let _ = context.call_public_function( context.this_address(), selector, [context.msg_sender().to_field(), to.to_field(), amount] @@ -224,8 +224,8 @@ contract Lending { #[aztec(public)] #[aztec(internal)] fn _borrow(owner: AztecAddress, to: AztecAddress, amount: Field) { - let asset = Lending::at(context.this_address()).update_accumulator(context); - let price = PriceFeed::at(asset.oracle).get_price(context); + let asset = Lending::at(context.this_address()).update_accumulator(&mut context); + let price = PriceFeed::at(asset.oracle).get_price(&mut context); // Fetch collateral and static_debt, compute health of current position let collateral = U128::from_integer(storage.collateral.at(owner).read()); @@ -251,7 +251,7 @@ contract Lending { // @todo @LHerskind Need to support both private and public minting. let stable_coin = storage.stable_coin.read(); - Token::at(stable_coin).mint_public(context, to, amount); + Token::at(stable_coin).mint_public(&mut context, to, amount); } #[aztec(private)] @@ -275,9 +275,9 @@ contract Lending { #[aztec(public)] fn repay_public(amount: Field, nonce: Field, owner: AztecAddress, stable_coin: AztecAddress) { - Token::at(stable_coin).burn_public(context, context.msg_sender(), amount, nonce); + Token::at(stable_coin).burn_public(&mut context, context.msg_sender(), amount, nonce); let selector = FunctionSelector::from_signature("_repay((Field),Field,(Field))"); - context.call_public_function( + let _ = context.call_public_function( context.this_address(), selector, [owner.to_field(), amount, stable_coin.to_field()] @@ -287,7 +287,7 @@ contract Lending { #[aztec(public)] #[aztec(internal)] fn _repay(owner: AztecAddress, amount: Field, stable_coin: AztecAddress) { - let asset = Lending::at(context.this_address()).update_accumulator(context); + let asset = Lending::at(context.this_address()).update_accumulator(&mut context); // To ensure that private is using the correct token. assert(stable_coin.eq(storage.stable_coin.read())); diff --git a/noir-projects/noir-contracts/contracts/test_contract/src/interface.nr b/noir-projects/noir-contracts/contracts/test_contract/src/interface.nr index 64c3a2d7fc9..f46f123d5c4 100644 --- a/noir-projects/noir-contracts/contracts/test_contract/src/interface.nr +++ b/noir-projects/noir-contracts/contracts/test_contract/src/interface.nr @@ -288,7 +288,7 @@ impl TestPublicContextInterface { pub fn create_nullifier_public( self, - context: PublicContext, + context: &mut PublicContext, amount: Field, secret_hash: Field ) -> [Field; RETURN_VALUES_LENGTH] { @@ -303,7 +303,11 @@ impl TestPublicContextInterface { ) } - pub fn emit_unencrypted(self, context: PublicContext, value: Field) -> [Field; RETURN_VALUES_LENGTH] { + pub fn emit_unencrypted( + self, + context: &mut PublicContext, + value: Field + ) -> [Field; RETURN_VALUES_LENGTH] { let mut serialized_args = [0; 1]; serialized_args[0] = value; @@ -314,7 +318,7 @@ impl TestPublicContextInterface { ) } - pub fn is_time_equal(self, context: PublicContext, time: Field) -> [Field; RETURN_VALUES_LENGTH] { + pub fn is_time_equal(self, context: &mut PublicContext, time: Field) -> [Field; RETURN_VALUES_LENGTH] { let mut serialized_args = [0; 1]; serialized_args[0] = time; @@ -327,7 +331,7 @@ impl TestPublicContextInterface { pub fn create_l2_to_l1_message_public( self, - context: PublicContext, + context: &mut PublicContext, amount: Field, secret_hash: Field ) -> [Field; RETURN_VALUES_LENGTH] { @@ -344,7 +348,7 @@ impl TestPublicContextInterface { pub fn consume_mint_public_message( self, - context: PublicContext, + context: &mut PublicContext, to: ToConsumeMintPublicMessageStruct, amount: Field, canceller: CancellerConsumeMintPublicMessageStruct, diff --git a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/interfaces.nr b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/interfaces.nr index 3f4bf9983be..9cb8253c927 100644 --- a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/interfaces.nr +++ b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/interfaces.nr @@ -11,14 +11,14 @@ impl SlowMap { Self { address } } - pub fn initialize(self: Self, context: PublicContext) { - context.call_public_function_no_args( + pub fn initialize(self: Self, context: &mut PublicContext) { + let _ = context.call_public_function_no_args( self.address, FunctionSelector::from_signature("initialize()") ); } - pub fn read_at_pub(self: Self, context: PublicContext, index: Field) -> Field { + pub fn read_at_pub(self: Self, context: &mut PublicContext, index: Field) -> Field { let _return_values = context.call_public_function( self.address, FunctionSelector::from_signature("read_at_pub(Field)"), @@ -37,7 +37,7 @@ impl SlowMap { } pub fn update_at_private(self: Self, context: &mut PrivateContext, index: Field, new_value: Field) { - context.call_private_function( + let _ = context.call_private_function( self.address, FunctionSelector::from_signature("update_at_private(Field,Field)"), [index, new_value] diff --git a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr index 42b042711ce..72879e4694c 100644 --- a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr @@ -31,11 +31,11 @@ contract TokenBlacklist { // docs:end:interface struct Storage { - admin: PublicMutable, - balances: BalancesMap, + admin: PublicMutable, + balances: BalancesMap, total_supply: PublicMutable, - pending_shields: PrivateSet, - public_balances: Map>, + pending_shields: PrivateSet, + public_balances: Map>, slow_update: SharedImmutable, } @@ -50,7 +50,7 @@ contract TokenBlacklist { storage.slow_update.initialize(slow_updates_contract); // docs:end:write_slow_update_public // docs:start:slowmap_initialize - SlowMap::at(slow_updates_contract).initialize(context); + SlowMap::at(slow_updates_contract).initialize(&mut context); // docs:end:slowmap_initialize // We cannot do the following atm // let roles = UserFlags { is_admin: true, is_minter: false, is_blacklisted: false }.get_value().to_field(); @@ -94,11 +94,11 @@ contract TokenBlacklist { let slow = SlowMap::at(storage.slow_update.read_public()); // docs:end:get_public // docs:start:read_at_pub - let to_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(context, to.to_field()))); + let to_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(&mut context, to.to_field()))); // docs:end:read_at_pub assert(!to_roles.is_blacklisted, "Blacklisted: Recipient"); - let caller_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(context, context.msg_sender().to_field()))); + let caller_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(&mut context, context.msg_sender().to_field()))); assert(caller_roles.is_minter, "caller is not minter"); let amount = U128::from_integer(amount); @@ -112,7 +112,7 @@ contract TokenBlacklist { #[aztec(public)] fn mint_private(amount: Field, secret_hash: Field) { let slow = SlowMap::at(storage.slow_update.read_public()); - let caller_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(context, context.msg_sender().to_field()))); + let caller_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(&mut context, context.msg_sender().to_field()))); assert(caller_roles.is_minter, "caller is not minter"); let pending_shields = storage.pending_shields; @@ -126,7 +126,7 @@ contract TokenBlacklist { #[aztec(public)] fn shield(from: AztecAddress, amount: Field, secret_hash: Field, nonce: Field) { let slow = SlowMap::at(storage.slow_update.read_public()); - let from_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(context, from.to_field()))); + let from_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(&mut context, from.to_field()))); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); if (!from.eq(context.msg_sender())) { @@ -149,9 +149,9 @@ contract TokenBlacklist { #[aztec(public)] fn transfer_public(from: AztecAddress, to: AztecAddress, amount: Field, nonce: Field) { let slow = SlowMap::at(storage.slow_update.read_public()); - let from_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(context, from.to_field()))); + let from_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(&mut context, from.to_field()))); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); - let to_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(context, to.to_field()))); + let to_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(&mut context, to.to_field()))); assert(!to_roles.is_blacklisted, "Blacklisted: Recipient"); if (!from.eq(context.msg_sender())) { @@ -171,7 +171,7 @@ contract TokenBlacklist { #[aztec(public)] fn burn_public(from: AztecAddress, amount: Field, nonce: Field) { let slow = SlowMap::at(storage.slow_update.read_public()); - let from_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(context, from.to_field()))); + let from_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(&mut context, from.to_field()))); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); if (!from.eq(context.msg_sender())) { diff --git a/noir-projects/noir-contracts/contracts/token_bridge_contract/src/main.nr b/noir-projects/noir-contracts/contracts/token_bridge_contract/src/main.nr index 1870537b2b9..44ced870387 100644 --- a/noir-projects/noir-contracts/contracts/token_bridge_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/token_bridge_contract/src/main.nr @@ -41,7 +41,7 @@ contract TokenBridge { context.consume_l1_to_l2_message(content_hash, secret, context.this_portal_address()); // Mint tokens - Token::at(storage.token.read()).mint_public(context, to, amount); + Token::at(storage.token.read()).mint_public(&mut context, to, amount); } // docs:end:claim_public @@ -60,7 +60,7 @@ contract TokenBridge { context.message_portal(context.this_portal_address(), content); // Burn tokens - Token::at(storage.token.read()).burn_public(context, context.msg_sender(), amount, nonce); + Token::at(storage.token.read()).burn_public(&mut context, context.msg_sender(), amount, nonce); } // docs:end:exit_to_l1_public // docs:start:claim_private @@ -151,7 +151,7 @@ contract TokenBridge { #[aztec(public)] #[aztec(internal)] fn _call_mint_on_token(amount: Field, secret_hash: Field) { - Token::at(storage.token.read()).mint_private(context, amount, secret_hash); + Token::at(storage.token.read()).mint_private(&mut context, amount, secret_hash); } // docs:end:call_mint_on_token diff --git a/noir-projects/noir-contracts/contracts/token_bridge_contract/src/token_interface.nr b/noir-projects/noir-contracts/contracts/token_bridge_contract/src/token_interface.nr index 26c852a58bb..684f19ebd44 100644 --- a/noir-projects/noir-contracts/contracts/token_bridge_contract/src/token_interface.nr +++ b/noir-projects/noir-contracts/contracts/token_bridge_contract/src/token_interface.nr @@ -11,7 +11,7 @@ impl Token { Self { address } } - pub fn mint_public(self: Self, context: PublicContext, to: AztecAddress, amount: Field) { + pub fn mint_public(self: Self, context: &mut PublicContext, to: AztecAddress, amount: Field) { let _return_values = context.call_public_function( self.address, FunctionSelector::from_signature("mint_public((Field),Field)"), @@ -22,7 +22,7 @@ impl Token { // docs:start:public_burn_interface pub fn burn_public( self: Self, - context: PublicContext, + context: &mut PublicContext, from: AztecAddress, amount: Field, nonce: Field @@ -35,7 +35,7 @@ impl Token { } // docs:end:public_burn_interface - pub fn mint_private(self: Self, context: PublicContext, amount: Field, secret_hash: Field) { + pub fn mint_private(self: Self, context: &mut PublicContext, amount: Field, secret_hash: Field) { let _return_values = context.call_public_function( self.address, FunctionSelector::from_signature("mint_private(Field,Field)"), diff --git a/noir-projects/noir-contracts/contracts/uniswap_contract/src/interfaces.nr b/noir-projects/noir-contracts/contracts/uniswap_contract/src/interfaces.nr index 77ef1575390..69972b4fb7a 100644 --- a/noir-projects/noir-contracts/contracts/uniswap_contract/src/interfaces.nr +++ b/noir-projects/noir-contracts/contracts/uniswap_contract/src/interfaces.nr @@ -13,13 +13,13 @@ impl Token { pub fn transfer_public( self: Self, - context: PublicContext, + context: &mut PublicContext, from: AztecAddress, to: AztecAddress, amount: Field, nonce: Field ) { - context.call_public_function( + let _ = context.call_public_function( self.address, FunctionSelector::from_signature("transfer_public((Field),(Field),Field,Field)"), [from.to_field(), to.to_field(), amount, nonce] @@ -34,7 +34,7 @@ impl Token { amount: Field, nonce: Field ) { - context.call_private_function( + let _ = context.call_private_function( self.address, FunctionSelector::from_signature("unshield((Field),(Field),Field,Field)"), [from.to_field(), to.to_field(), amount, nonce] @@ -51,7 +51,7 @@ impl TokenBridge { Self { address } } - pub fn token(self: Self, context: PublicContext) -> AztecAddress { + pub fn token(self: Self, context: &mut PublicContext) -> AztecAddress { let return_values = context.call_public_function( self.address, FunctionSelector::from_signature("get_token()"), @@ -62,13 +62,13 @@ impl TokenBridge { pub fn exit_to_l1_public( self: Self, - context: PublicContext, + context: &mut PublicContext, recipient: EthAddress, amount: Field, callerOnL1: EthAddress, nonce: Field ) { - context.call_public_function( + let _ = context.call_public_function( self.address, FunctionSelector::from_signature("exit_to_l1_public((Field),Field,(Field),Field)"), [recipient.to_field(), amount, callerOnL1.to_field(), nonce] diff --git a/noir-projects/noir-contracts/contracts/uniswap_contract/src/main.nr b/noir-projects/noir-contracts/contracts/uniswap_contract/src/main.nr index 7a1fd038c80..811e3e20cd1 100644 --- a/noir-projects/noir-contracts/contracts/uniswap_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/uniswap_contract/src/main.nr @@ -4,7 +4,7 @@ mod util; // Demonstrates how to use portal contracts to swap on L1 Uniswap with funds on L2 // Has two separate flows for private and public respectively -// Uses the token bridge contract, which tells which input token we need to talk to and handles the exit funds to L1 +// Uses the token bridge contract, which tells which input token we need to talk to and handles the exit funds to L1 contract Uniswap { use dep::aztec::prelude::{FunctionSelector, AztecAddress, EthAddress, Map, PublicMutable}; use dep::aztec::oracle::context::get_portal_address; @@ -54,11 +54,11 @@ contract Uniswap { assert_current_call_valid_authwit_public(&mut context, sender); } - let input_asset = TokenBridge::at(input_asset_bridge).token(context); + let input_asset = TokenBridge::at(input_asset_bridge).token(&mut context); // Transfer funds to this contract Token::at(input_asset).transfer_public( - context, + &mut context, sender, context.this_address(), input_amount, @@ -190,7 +190,7 @@ contract Uniswap { // docs:start:authwit_uniswap_set // This helper method approves the bridge to burn this contract's funds and exits the input asset to L1 - // Assumes contract already has funds. + // Assumes contract already has funds. // Assume `token` relates to `token_bridge` (ie token_bridge.token == token) // Note that private can't read public return values so created an internal public that handles everything // this method is used for both private and public swaps. @@ -213,7 +213,7 @@ contract Uniswap { // Exit to L1 Uniswap Portal ! TokenBridge::at(token_bridge).exit_to_l1_public( - context, + &mut context, context.this_portal_address(), amount, context.this_portal_address(), @@ -227,12 +227,12 @@ contract Uniswap { #[aztec(internal)] fn _assert_token_is_same(token: AztecAddress, token_bridge: AztecAddress) { assert( - token.eq(TokenBridge::at(token_bridge).token(context)), "input_asset address is not the same as seen in the bridge contract" + token.eq(TokenBridge::at(token_bridge).token(&mut context)), "input_asset address is not the same as seen in the bridge contract" ); } // docs:end:assert_token_is_same - // /// Unconstrained /// + // /// Unconstrained /// // this method exists solely for e2e tests to test that nonce gets incremented each time. unconstrained fn nonce_for_burn_approval() -> pub Field { diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/call_context.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/call_context.nr index d312ea1c23c..f68934ddb32 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/call_context.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/call_context.nr @@ -1,7 +1,7 @@ use crate::{ abis::function_selector::FunctionSelector, address::{EthAddress, AztecAddress}, constants::{CALL_CONTEXT_LENGTH, GENERATOR_INDEX__CALL_CONTEXT}, hash::pedersen_hash, - traits::{Deserialize, Hash, Serialize} + traits::{Deserialize, Hash, Serialize}, abis::side_effect::Ordered }; // docs:start:call-context @@ -15,7 +15,7 @@ struct CallContext { is_delegate_call : bool, is_static_call : bool, - start_side_effect_counter : u32, + side_effect_counter : u32, } // docs:end:call-context @@ -28,7 +28,7 @@ impl CallContext { assert(self.function_selector.to_field() == 0); assert(self.is_delegate_call == false); assert(self.is_static_call == false); - assert(self.start_side_effect_counter == 0); + assert(self.side_effect_counter == 0); } } @@ -41,7 +41,7 @@ impl Eq for CallContext { & call_context.function_selector.eq(self.function_selector) & (call_context.is_delegate_call == self.is_delegate_call) & (call_context.is_static_call == self.is_static_call) - & (call_context.start_side_effect_counter == self.start_side_effect_counter) + & (call_context.side_effect_counter == self.side_effect_counter) } } @@ -60,7 +60,7 @@ impl Serialize for CallContext { self.function_selector.to_field(), self.is_delegate_call as Field, self.is_static_call as Field, - self.start_side_effect_counter as Field, + self.side_effect_counter as Field, ] } } @@ -74,7 +74,7 @@ impl Deserialize for CallContext { function_selector: FunctionSelector::from_field(serialized[3]), is_delegate_call: serialized[4] as bool, is_static_call: serialized[5] as bool, - start_side_effect_counter: serialized[6] as u32, + side_effect_counter: serialized[6] as u32, } } } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_call_stack_item.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_call_stack_item.nr index 7b287d20ed6..128ad253d5d 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_call_stack_item.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_call_stack_item.nr @@ -26,7 +26,7 @@ impl Eq for PrivateCallStackItem { impl Serialize for PrivateCallStackItem { fn serialize(self) -> [Field; PRIVATE_CALL_STACK_ITEM_LENGTH] { - let mut fields: BoundedVec = BoundedVec::new(); + let mut fields: BoundedVec = BoundedVec::new(); fields.push(self.contract_address.to_field()); fields.extend_from_array(self.function_data.serialize()); @@ -75,6 +75,6 @@ fn empty_hash() { let hash = item.hash(); // Value from private_call_stack_item.test.ts "computes empty item hash" test - let test_data_empty_hash = 0x1c3b67cab2bc3dc2106cfeddd8ea68b8d445849f20ed3b9286ad684542aae25d; + let test_data_empty_hash = 0x19196a5f02621a64ce289fb09fada7fd650a6874cb63e7d10c0d9a9bf5a366f5; assert_eq(hash, test_data_empty_hash); } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_circuit_public_inputs.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_circuit_public_inputs.nr index e89c6dc8b31..240726539ef 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_circuit_public_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_circuit_public_inputs.nr @@ -32,6 +32,8 @@ struct PrivateCircuitPublicInputs { private_call_stack_hashes: [Field; MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL], public_call_stack_hashes: [Field; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL], new_l2_to_l1_msgs: [L2ToL1Message; MAX_NEW_L2_TO_L1_MSGS_PER_CALL], + + start_side_effect_counter : u32, end_side_effect_counter : u32, encrypted_logs_hash: [Field; NUM_FIELDS_PER_SHA256], @@ -65,6 +67,7 @@ impl Eq for PrivateCircuitPublicInputs { (self.private_call_stack_hashes == other.private_call_stack_hashes) & (self.public_call_stack_hashes == other.public_call_stack_hashes) & (self.new_l2_to_l1_msgs == other.new_l2_to_l1_msgs) & + (self.start_side_effect_counter == other.start_side_effect_counter) & (self.end_side_effect_counter == other.end_side_effect_counter) & (self.encrypted_logs_hash == other.encrypted_logs_hash) & (self.unencrypted_logs_hash == other.unencrypted_logs_hash) & @@ -105,6 +108,7 @@ impl Serialize for PrivateCircuitPublicInp for i in 0..MAX_NEW_L2_TO_L1_MSGS_PER_CALL { fields.extend_from_array(self.new_l2_to_l1_msgs[i].serialize()); } + fields.push(self.start_side_effect_counter as Field); fields.push(self.end_side_effect_counter as Field); fields.extend_from_array(self.encrypted_logs_hash); fields.extend_from_array(self.unencrypted_logs_hash); @@ -137,6 +141,7 @@ impl Deserialize for PrivateCircuitPublicI private_call_stack_hashes: reader.read_array([0; MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL]), public_call_stack_hashes: reader.read_array([0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL]), new_l2_to_l1_msgs: reader.read_struct_array(L2ToL1Message::deserialize, [L2ToL1Message::empty(); MAX_NEW_L2_TO_L1_MSGS_PER_CALL]), + start_side_effect_counter: reader.read() as u32, end_side_effect_counter: reader.read() as u32, encrypted_logs_hash: reader.read_array([0; NUM_FIELDS_PER_SHA256]), unencrypted_logs_hash: reader.read_array([0; NUM_FIELDS_PER_SHA256]), @@ -172,6 +177,6 @@ fn empty_hash() { let hash = inputs.hash(); // Value from private_circuit_public_inputs.test.ts "computes empty item hash" test - let test_data_empty_hash = 0x2745ec62624afeb19b86af3d440db1f8c3432e1d17a074c75cb8f44999fd3fae; + let test_data_empty_hash = 0x2b5ba01a6b73b68b4f44196e2dea49afd4076333e2dee8eddc9186e080f18201; assert_eq(hash, test_data_empty_hash); } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_stack_item.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_stack_item.nr index 3a9181be985..0311c3a10ad 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_stack_item.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_stack_item.nr @@ -69,7 +69,7 @@ mod tests { let call_stack_item = PublicCallStackItem { contract_address, public_inputs, is_execution_request: true, function_data }; // Value from public_call_stack_item.test.ts "Computes a callstack item request hash" test - let test_data_call_stack_item_request_hash = 0x1a1194c14f229b72d31669b06e3984d6f0f5edd4d5204ceda0ff30f25e910e83; + let test_data_call_stack_item_request_hash = 0xedd2f10c0cdf776ee2fff3c799bae6df5771f5013a2d5d7154601dffdcf869; assert_eq(call_stack_item.hash(), test_data_call_stack_item_request_hash); } @@ -87,7 +87,7 @@ mod tests { let call_stack_item = PublicCallStackItem { contract_address, public_inputs, is_execution_request: false, function_data }; // Value from public_call_stack_item.test.ts "Computes a callstack item hash" test - let test_data_call_stack_item_hash = 0x187836686ed01f12180ef08c419e4ac8514d9c60e6a38b4a56d893fa90c83a5d; + let test_data_call_stack_item_hash = 0x1cec0b51f9394405a626c3b77081c96f1bdcb8bacf96960ae4749068f9b4da0d; assert_eq(call_stack_item.hash(), test_data_call_stack_item_hash); } } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_circuit_public_inputs.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_circuit_public_inputs.nr index e364c3b49d8..2d2edbf8b22 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_circuit_public_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_circuit_public_inputs.nr @@ -33,6 +33,9 @@ struct PublicCircuitPublicInputs{ new_nullifiers: [SideEffectLinkedToNoteHash; MAX_NEW_NULLIFIERS_PER_CALL], new_l2_to_l1_msgs: [L2ToL1Message; MAX_NEW_L2_TO_L1_MSGS_PER_CALL], + start_side_effect_counter: u32, + end_side_effect_counter: u32, + unencrypted_logs_hash: [Field; NUM_FIELDS_PER_SHA256], // Here so that the gas cost of this request can be measured by circuits, without actually needing to feed in the @@ -56,8 +59,8 @@ impl Eq for PublicCircuitPublicInputs { impl Serialize for PublicCircuitPublicInputs { fn serialize(self) -> [Field; PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH] { - let mut fields: BoundedVec = BoundedVec::new(); - fields.extend_from_array(self.call_context.serialize()); + let mut fields: BoundedVec = BoundedVec::new(); + fields.extend_from_array(self.call_context.serialize()); fields.push(self.args_hash); fields.extend_from_array(self.return_values); for i in 0..MAX_NULLIFIER_READ_REQUESTS_PER_CALL { @@ -83,6 +86,10 @@ impl Serialize for PublicCircuitPublicInput for i in 0..MAX_NEW_L2_TO_L1_MSGS_PER_CALL { fields.extend_from_array(self.new_l2_to_l1_msgs[i].serialize()); } + + fields.push(self.start_side_effect_counter as Field); + fields.push(self.end_side_effect_counter as Field); + fields.extend_from_array(self.unencrypted_logs_hash); fields.push(self.unencrypted_log_preimages_length); fields.extend_from_array(self.historical_header.serialize()); @@ -108,6 +115,8 @@ impl Deserialize for PublicCircuitPublicInp new_note_hashes: reader.read_struct_array(SideEffect::deserialize, [SideEffect::empty(); MAX_NEW_NOTE_HASHES_PER_CALL]), new_nullifiers: reader.read_struct_array(SideEffectLinkedToNoteHash::deserialize, [SideEffectLinkedToNoteHash::empty(); MAX_NEW_NULLIFIERS_PER_CALL]), new_l2_to_l1_msgs: reader.read_struct_array(L2ToL1Message::deserialize, [L2ToL1Message::empty(); MAX_NEW_L2_TO_L1_MSGS_PER_CALL]), + start_side_effect_counter: reader.read() as u32, + end_side_effect_counter: reader.read() as u32, unencrypted_logs_hash: reader.read_array([0; NUM_FIELDS_PER_SHA256]), unencrypted_log_preimages_length: reader.read(), historical_header: reader.read_struct(Header::deserialize), @@ -140,6 +149,6 @@ fn empty_hash() { let hash = inputs.hash(); // Value from public_circuit_public_inputs.test.ts "computes empty item hash" test - let test_data_empty_hash = 0x1c9942cee14a4f84b3e606f553b2ab3151c395822ee7ffd51759d5822375d6c9; + let test_data_empty_hash = 0x083ac560a513d670a7f50f0a3052d42cb9816b7b643e62025b8278652ad637ab; assert_eq(hash, test_data_empty_hash); } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr index 1c765a0bc7e..5bcc478692b 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr @@ -163,18 +163,18 @@ global L2_TO_L1_MESSAGE_LENGTH: u64 = 2; global NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH = 4; global NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_LENGTH = 5; global PARTIAL_STATE_REFERENCE_LENGTH: u64 = 6; -global PRIVATE_CALL_STACK_ITEM_LENGTH: u64 = 214; +global PRIVATE_CALL_STACK_ITEM_LENGTH: u64 = 215; // Change this ONLY if you have changed the PrivateCircuitPublicInputs structure. // In other words, if the structure/size of the public inputs of a function call changes then we should change this // constant as well PRIVATE_CALL_STACK_ITEM_LENGTH -global PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH: u64 = 209; +global PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH: u64 = 210; // Change this ONLY if you have changed the PublicCircuitPublicInputs structure. -global PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH: u64 = 200; +global PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH: u64 = 202; global STATE_REFERENCE_LENGTH: u64 = 8; // 2 for snap + 8 for partial global TX_CONTEXT_DATA_LENGTH: u64 = 4; global TX_REQUEST_LENGTH: u64 = 10; -global ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH: Field = 13; // 2 + FUNCTION_DATA_LENGTH + CALL_CONTEXT_LENGTH +global ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH: Field = 13; // 2 + FUNCTION_DATA_LENGTH + CALL_CONTEXT_LENGTH global GET_NOTES_ORACLE_RETURN_LENGTH: u64 = 674; global NOTE_HASHES_NUM_BYTES_PER_BASE_ROLLUP: Field = 2048; global NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP: Field = 2048; diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/tests/private_circuit_public_inputs_builder.nr b/noir-projects/noir-protocol-circuits/crates/types/src/tests/private_circuit_public_inputs_builder.nr index 46df32f7940..5af237338e1 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/tests/private_circuit_public_inputs_builder.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/tests/private_circuit_public_inputs_builder.nr @@ -67,7 +67,7 @@ impl PrivateCircuitPublicInputsBuilder { function_selector: function_data.selector, is_delegate_call: false, is_static_call: false, - start_side_effect_counter: 0 + side_effect_counter: 0 }; public_inputs.call_context = call_context; public_inputs.args_hash = args_hash; @@ -92,6 +92,7 @@ impl PrivateCircuitPublicInputsBuilder { private_call_stack_hashes: self.private_call_stack_hashes.storage, public_call_stack_hashes: self.public_call_stack_hashes.storage, new_l2_to_l1_msgs: self.new_l2_to_l1_msgs.storage, + start_side_effect_counter: self.call_context.side_effect_counter, end_side_effect_counter: 10, encrypted_logs_hash: self.encrypted_logs_hash, unencrypted_logs_hash: self.unencrypted_logs_hash, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/tests/public_call_data_builder.nr b/noir-projects/noir-protocol-circuits/crates/types/src/tests/public_call_data_builder.nr index 264fc98b614..137933bbdfd 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/tests/public_call_data_builder.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/tests/public_call_data_builder.nr @@ -42,7 +42,7 @@ impl PublicCallDataBuilder { function_selector: function_data.selector, is_delegate_call: false, is_static_call: false, - start_side_effect_counter: 0, // needed? + side_effect_counter: 0, // needed? }; PublicCallDataBuilder { diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/tests/public_circuit_public_inputs_builder.nr b/noir-projects/noir-protocol-circuits/crates/types/src/tests/public_circuit_public_inputs_builder.nr index d4bf5c3d294..3f3c0f836b3 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/tests/public_circuit_public_inputs_builder.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/tests/public_circuit_public_inputs_builder.nr @@ -26,6 +26,8 @@ struct PublicCircuitPublicInputsBuilder { new_note_hashes: BoundedVec, new_nullifiers: BoundedVec, new_l2_to_l1_msgs: BoundedVec, + start_side_effect_counter: u32, + end_side_effect_counter: u32, unencrypted_logs_hash: [Field; NUM_FIELDS_PER_SHA256], unencrypted_log_preimages_length: Field, historical_header: Header, @@ -54,6 +56,8 @@ impl PublicCircuitPublicInputsBuilder { new_note_hashes: self.new_note_hashes.storage, new_nullifiers: self.new_nullifiers.storage, new_l2_to_l1_msgs: self.new_l2_to_l1_msgs.storage, + start_side_effect_counter: self.start_side_effect_counter, + end_side_effect_counter: self.end_side_effect_counter, unencrypted_logs_hash: self.unencrypted_logs_hash, unencrypted_log_preimages_length: self.unencrypted_log_preimages_length, historical_header: self.historical_header, diff --git a/yarn-project/aztec.js/src/fee/private_fee_payment_method.ts b/yarn-project/aztec.js/src/fee/private_fee_payment_method.ts index 7539294f6a0..790ebe5a249 100644 --- a/yarn-project/aztec.js/src/fee/private_fee_payment_method.ts +++ b/yarn-project/aztec.js/src/fee/private_fee_payment_method.ts @@ -1,11 +1,12 @@ import { FunctionCall } from '@aztec/circuit-types'; import { FunctionData } from '@aztec/circuits.js'; +import { computeMessageSecretHash } from '@aztec/circuits.js/hash'; import { FunctionSelector } from '@aztec/foundation/abi'; import { AztecAddress } from '@aztec/foundation/aztec-address'; import { Fr } from '@aztec/foundation/fields'; +import { Wallet } from '../account/wallet.js'; import { computeAuthWitMessageHash } from '../utils/authwit.js'; -import { AccountWalletWithPrivateKey } from '../wallet/account_wallet_with_private_key.js'; import { FeePaymentMethod } from './fee_payment_method.js'; /** @@ -25,7 +26,13 @@ export class PrivateFeePaymentMethod implements FeePaymentMethod { /** * An auth witness provider to authorize fee payments */ - private wallet: AccountWalletWithPrivateKey, + private wallet: Wallet, + + /** + * A secret to shield the rebate amount from the FPC. + * Use this to claim the shielded amount to private balance + */ + private rebateSecret = Fr.random(), ) {} /** @@ -52,7 +59,7 @@ export class PrivateFeePaymentMethod implements FeePaymentMethod { async getFunctionCalls(maxFee: Fr): Promise { const nonce = Fr.random(); const messageHash = computeAuthWitMessageHash(this.paymentContract, { - args: [this.wallet.getAddress(), this.paymentContract, maxFee, nonce], + args: [this.wallet.getCompleteAddress().address, this.paymentContract, maxFee, nonce], functionData: new FunctionData( FunctionSelector.fromSignature('unshield((Field),(Field),Field,Field)'), false, @@ -63,16 +70,18 @@ export class PrivateFeePaymentMethod implements FeePaymentMethod { }); await this.wallet.createAuthWitness(messageHash); + const secretHashForRebate = computeMessageSecretHash(this.rebateSecret); + return [ { to: this.getPaymentContract(), functionData: new FunctionData( - FunctionSelector.fromSignature('fee_entrypoint_private(Field,(Field),Field)'), + FunctionSelector.fromSignature('fee_entrypoint_private(Field,(Field),Field,Field)'), false, true, false, ), - args: [maxFee, this.asset, nonce], + args: [maxFee, this.asset, secretHashForRebate, nonce], }, ]; } diff --git a/yarn-project/circuit-types/src/mocks_to_purge.ts b/yarn-project/circuit-types/src/mocks_to_purge.ts index 7556e69603c..a78ccbe2686 100644 --- a/yarn-project/circuit-types/src/mocks_to_purge.ts +++ b/yarn-project/circuit-types/src/mocks_to_purge.ts @@ -200,7 +200,7 @@ export function makePublicCallRequest(seed = 1): PublicCallRequest { functionSelector: makeSelector(seed + 3), isStaticCall: false, isDelegateCall: false, - startSideEffectCounter: 0, + sideEffectCounter: 0, }); return new PublicCallRequest( makeAztecAddress(seed), diff --git a/yarn-project/circuits.js/src/constants.gen.ts b/yarn-project/circuits.js/src/constants.gen.ts index 0747f1bb5f9..b64f8891965 100644 --- a/yarn-project/circuits.js/src/constants.gen.ts +++ b/yarn-project/circuits.js/src/constants.gen.ts @@ -99,9 +99,9 @@ export const L2_TO_L1_MESSAGE_LENGTH = 2; export const NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH = 4; export const NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_LENGTH = 5; export const PARTIAL_STATE_REFERENCE_LENGTH = 6; -export const PRIVATE_CALL_STACK_ITEM_LENGTH = 214; -export const PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 209; -export const PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 200; +export const PRIVATE_CALL_STACK_ITEM_LENGTH = 215; +export const PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 210; +export const PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 202; export const STATE_REFERENCE_LENGTH = 8; export const TX_CONTEXT_DATA_LENGTH = 4; export const TX_REQUEST_LENGTH = 10; diff --git a/yarn-project/circuits.js/src/contract/__snapshots__/contract_class.test.ts.snap b/yarn-project/circuits.js/src/contract/__snapshots__/contract_class.test.ts.snap index 0c8262f95ee..96808f69b15 100644 --- a/yarn-project/circuits.js/src/contract/__snapshots__/contract_class.test.ts.snap +++ b/yarn-project/circuits.js/src/contract/__snapshots__/contract_class.test.ts.snap @@ -9,18 +9,18 @@ exports[`ContractClass creates a contract class from a contract compilation arti "selector": { "value": 2381782501 }, - "bytecode": "0x1f8b08000000000000ffed9d0774154796f75b4280f0d3b3088e045b3860c004e9492449c023679325030e801019e3210c382272c618b0c946e0999d4db339cfe69c739cd9303bb333bb3b3b73ce37bb5ffecef1f9aafad51dfd55543ff4e4aec77dd2ed734aaffaaabaefaffe7dab3a55777f270882a22033f550e9e9e0ee89fe9f36bf959f6eaa8a715d953e398b0a84b3b840387b140867498170f62c10ce5e05c2d9bb40384b0b84b34f8c9c9aad38683fc5cdfb80075de3664c1498a66505a069b2c0347db000342d0f0aa38fea5b209cfd0a84b37f81700e2810ce870a84f3e102e17ca440381f2d10cec70a84f3f102e11c58209c830a84737081700e2910ce270a84f3c902e1ac2810cea105c2f95481703e5d209ccf1408e7b331728e00ce61e6f739f33bdcfc529991e6f779f33bcafc8e36752c31f363541aabd954aab2fe9752a95aa51a95c659ff1bafd2049526aa34c9fcafc2fcaf56a53a95ea559aacd21495a61a1da6a9345da5192acd5469964ab3559aa3d25c95e6a9345fa5052a2d5469914a2fa8b458a5252a2d5569994acb555aa1d24a951a546a54e9459556592cab555aa3d24b2abdacd22b2abdaad25a95d6a9b45ea5269536a8d4acd2469536a9b459a52d2a6d55699b4adb55daa1d26b2aed54e975953ea3d22e9576abb447a5bd2a7d56a57d2aed57e90d4bb337557a4ba5b7557ac7e27c57a5032ab5a87450a5432a1d56e9884a47553aa6d271954ea87452a5532a9d56e98c4a67553aa7d27b2a9d57e97d952ea87451a54b2a7da0d2872a5d56e98a4a5755baa6d275956ea874d3b05043f848a55b2ab5aa745ba53b2a7dacd2e754fabc4adfa7d21754fa7e957e40a51f54e98754fa6195bea8d28fa8f4a32afd984a3faed24fa8f4932afd944a3fadd2cfa8f4b32afd9c4a3fafd22fa8f425957e51a55f52e99755fa15957e55a55f53e9d755fa0d957e53a5df52e9b755fa1d957e57a5df53e9f755fa0395fe50a53fb234ff6395fe44a53f55e9cfccffe83ad89fabf41726ff97e6f7afccef5f9bdfbfb196f95b95feceb27d59a5af58b6bf57e91f4cfe1fcdef3f99dfaf9adf7f36bf5f33bf5f37bfff627ebf617ebf697effd5fcfe9bf9fd77f3fb2df3fb1fe6f7dbe6f73b2add1c9cc997066d533a88a94faa696ed6f75048ec6141fb496bd1c3fc8f7e2b8cbdc4ccd32f69d7d3ccf7b4ecbdcc7c2f6b3da566bed4b2f733f3fd2cfb00333fc0b23f6ce61fb6ec8f9af947c19e08e05aaab16b5b0f632a021bc56131d87a06ed35d1b65eb43ab0f50eda6ba16db41d7b81ad8fb1f506db03c6560ab684b1f521cd542a33b67410574c54aed3eb4dc6bd5e737fe9c1f8799bf47acb3df1f68d9fb759afb79f075e1d1ffdcdbafa42dc0c30b67e607bc8d8fa83ed61631b00b6478ced21b03d6a6c0f83ed31637b046c8f1bdba3601b686c8f816d90b13d0e36d3ed0503c136c4d80681ed09631b0cb6278d6d08d82a8ced09b00d35b627c1f694b155808dc6ae0c05db33c6f614d89e35b6a7c1467dea3360a363be678d4df7133d8b601963a73e2a5c86fa61b00da73e186c23a8ff05db48ea7bc1f63cf826db28e857c836dad8a88fd2ff9b68f2e920ae36910adbc4a4b8d7abd6acd75b17ff7ac3fb71f5419bae69f03309b49a6cf2318ef9a942df4526911fb297407e2e94a572a407ed67885def4f6a4d7e7296e5265acb25a14cada3fee920defad7593c7516734fc8fb89d9ea94c46c87a79c63b601cadab147c73c5d316617008787981d2f31dbe129e798dd0065edd8a3e3deae18b3ab80c343ccaef313b3a94a89d9ccf5af2070c71e9dfb74c598dd041cf1c7ec3889d98e4f39c76c0b94b5638fce7fbb62ccee058ef86376c23a3936e8f09473cc9e83b276ecd1b598ae18b38781c343cc364b3fdbe129e798bd0165edd8a3eb825d3166df078ef8637692a798ad96980d32f73283c01d7b748dba2bc6ec2de0883f669be4fa6cc7a79c63f6e7a0ac1d7b74bfa42bc6ec178123fe98dde0ebfa6c4a623633862308dcb147f7eeba62cc7ec9e4f5bdb1bf34f7c69e00db5f19db9360fb6b187b40b6bf31b6a1502f0f6d60a2b4810e4f39b781bf85b2762c3f65f25db10dfc11707888d97512b31d9e728ed96f42593bf6684c43578cd9af008787986d9298edf09473ccfe77286bc71e8dafe98a314be343f5f1c23f9ae385e160fb27631b01b6af1adb48b0fdb3b13d0fb6af19db28b07dddd84683ed5f8c6d0cd8be616c63c1f64d63ab04dbbf1a5b15d8fecdd85260fb7763ab06dbb78cad066cff616ce3c0f66d631b0fb6ef18db0463d3f7b1684cd5ef1a5b2970a583f8b66d0234a0a9c89a4f43beca2f4f651278d05775fcbeaa75dd5341c7eb5e0d3c351eea9e001f1de1a9019e71f1f384e349c7c7bfde701ba72c4d13e02b05f59ae0a15e45e08bd64df3e42f09366cd3131c8cb1ef9fd57eb4087cd1ba697e2230920dfb18ea73a9fde8be7948511baf87b614ee9fd15f1a38c85f09941937b8adec50c35606ffc7fe769c65f31497615c902f5a37cd93bf32a8cfb8fc33a63aca586331faea238ac017addbf65d06f94abffa64e519cfc477ad27df769f469ad7e6c1f744cb77b5e51bfb4e9ab2eddb2602b387f394aafb719e82c70f1cce536616b595b5cf37a81fcef53c6582b51cc7f39449b02ff4d01ec218a8b53868be1ab4ab8bd0ae16b4a332cf8176befaf149160fcd8f031eeabfb13fabcc334f2503df780c4bdb0dcfa5f038c0d7f6aab41869deb5bd2602a3eb58c5c3f94cd663951a60241b5ec74979d22c6abba698f8f6102b617f443ee8d89cda2ff92b81320b7ab4955d0b7da58f18c178a4a9a3e7bcf16fa754780e5e93030f6e3b0fe755559ee2b112afdf7c12c41b6b76bf54636915758dc7575f9eb278689efc09b3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300b337f66bc9f84e3b6a8dc38268cf6f8375fd7f9c377ec9975e13da0ef7a1d0f96aac4b130340e628455e71228535edcc6f63f603c983d96286a5bfa181b9b6d5b923f1c0f968f7b88d5168fedbbcca10fde9746cd7c8d81b2fb0c9ac7f169a45f25f0f86a8f55168fed1bfb8c1453cda2fa595f630ba2e2cc359eb02236dfa9265ff775f5fbccf43b41edfdd7384bd3f05da3964df7492ff468abb78ffbbcb9de77c6fd06e5e3bc8f9b041ef4157f3f9b6a373ea13868bfafc058f735568bda158d8da8b57c97409921c56ddba60efe9f0eeede3760195a37cd8f8065ebac7597fbab6fd67128b5c04df95e56ddc6033795790af6dd7f66f29ef681a95c9f91c07d72fcfb97cc7891540e3cb8bff371cce2693f5a89f118f778117b1ca4eb7899cae018520fe377b3ee8bc99f300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb330f367d63cf63d74bcf75bcd84314f636cc2fb19f42e36bc2ff693c56d7e7ddf03a47b4e23ad3ae333ca013ca3fcb3860dc73ee07ba55cdbd2d7bdb5a86d49feb88d7d2873e8a335ab736856ef89d1ee3368be1e1849bf3ae0f1d51ea3dedde1ea332a996a16d5cffa18bb902dce5ce3142a62f39d192fe2e3be2e8d17b1f75ff67b8d709c04d9f03e78d4fbc2aa2cdbfdee035ce3da288fef5c88bfdf4cb5bb076c8f15247f384ee22b465b1a27117f3f90aaf4b98fa0364a6342528eba5299af16b795fd9ac9e358a16a58d7771dffa729db9804ec53a7c45fe770fb4e35eba2ed3bc5e13b0dac31f9ae42df45d6bac95e02f9ff567c3703e9415a13bb6e23f81eaba8e56aace5925066b2a3fee998eb3fc5e2c16dac271d3bdf8038fb2e1cebf9ea93264768340234a2329edf03eb1ce76b8f55c67eb4b7558696c5f75bfe1fe8a3a2c6a4bbf601be8e17a2f60178bc60ef173a3276bcbb8f07ec63ce437c8c07a4759707edc7e405d6fa47c2fa89ab7710bd6ff9deb938acdfe798f57bbdf7ca75ee47bc38de90caf48773bf99269fcbb9dffd3a8f779dfbe1725175c77e21ee7d23c623b2e0fb22a9cc602b1eeb22b8273a967d326259d2ca7ef7219e97e23142fcef8dccf43753acba509b9a0c75a132cf5aed26fe63a6ccf1a7af7764d2b10ef541558eba529991d0d646997c02b613ee17ea1cffa729dbf127e9a7eb3c2dfe3a87db77ba59176ddf690edf33803526df55e89b8e3fc90fd94b205f0bfb132a477a90d6c45e069cc86e2f576b2d9784326947fdd331d77f9ac533cd62d6b13316e2ac0e9eb5f0d557a703b7462341a3eff9039bebbdc6ae7d8cafe7d1a2f63155c068f79bb89fcce7b372f6f55bd7f10995c163682a330ffad984a3ac7d5d9a968b737c3a3e0f84c785f83c90af73a464d05ecfa4c5e1d377b9e5bb3c8fbefb59befbe5d1b7682e9a73d29cd3377f70df520c8c3ece1bf1fa484718f17d04b45c0f60f4f5cc662a07c66a60c4fd1d317a78bf725567bf2984c73a3d81d1c7f3c6b95eafc6f79be33b0688d1c733dab9bea71a9fdba6e57a03a38fef1ae137943ac2e8fad65129fc7af8ae515567bf0382df3aea038c3ebe0d9208da7fcfe45e8c938091967b00187ddc474a04edafabdd8b11ef57d27209cf8cd9f6ed9ec7fea472bd06918f710551c71ae8dbc3f5ff148e4de88816f57e79b21efba06f0fd7bf422dea838e6b81f7e73cdc1b0ddbf1e41c78f01e222dd71f18a77a629c9203e35460a4e5060063da13e3d41c18d3c048cb3d048c1eae43868ce91c18f17a1dd91f06c6e99e18a7e5c0381d1869b94780d1c735c504f8ed08e30c60a4e51e05c6999e1867e4c038131869b9c780719627c6993930ce02465aee71609ced8971560e8cb38191961b088c733c31cece81710e30d272838071ae27c6393930ce05465a6e3030cef3c4383707c679c048cb0d01c6f99e18e7e5c0381f1869b92780718127c6f939302e00465aee49605ce88971410e8c0b819196ab2800c6a105c0f85401303e5d008ccf1400e3b305c0585a008ccf03e3a2f819c3f3d48539302e029e17e2e709355b9403cf0b7e79c2f7132e72f85a1cbfaf54ae755f0c3c4be2e709b7c5e21c78882109cbbde09731d55946cdb3347e9e50b32539f02c05cd963834f3c098ea2ca3e659163f4fa8d9d21c789681664b1d9a79604c759651f32c8f9f27d46c590e3ccb41b3650ecd3c30a63acba87956c4cf136ab63c079e15a0d97287661e18539d65d43c2be3e709355b9103cf4ad06c8543330f8ca9ce326a9e86f87942cd56e6c0d3009aad7468e68131d55946cdd3183f4fa859430e3c8da0598343330f8ca9ce326a9e17e3e709356bcc81e745d0acd1a1192746e489fb7de38d0e5fab18d49d1890b14f01303e50008c3806c147ff956d0c42a35f7d529dd5c7d7f6ca3606017daff6a4c5aaa0e35aacf6cb93750c02fa5ee3498bd541c7b558033c2f79d022013e3ac2430c4958ae7f01300e2800c6870a80f1e102607ca400181f2d00c6c70a80f1f102601c58008c830a80717001300e2900c6270a80f1c902607cd13363b6f39797bab8efa87395aeee3beabca4abfb96389738ef0ebe25ce25cebb836f897389f3eee05be25ce2bc3bf896389738ef0ebe25ce25cebb836f897389734ebe5ff6e03b013e68ca768d9f1892b0dc8bc2d8a51991a7223e9e4aac3bfa7a8541dd5f71f01479aa3bfa7a9541dd89a1d0185f2e00c6170b805174cc8c41ec0ca3e659eb89e7d51c78d602cf3a4f3c6b73e059073cebe3e709636a5d0e3cc49084e55e2c00c6970b805174141d39318a8edd47476114466114c6fbc158087db8ec6732e72e9d61d43c4df1f3849aadcf81a70934a3e55ef0cb98ea2ca3e6d9103f4fa859530e3c1b40b32687661e18539d65d43ccdf1f3849a6dc881a71934dbe0d0cc0363aab38c9a6763fc3ca166cd39f06c04cd9a1d9a79604c759651f36c8a9f27d46c630e3c9b40b38d0ecd3c30a63acba87936c7cf136ab629079ecda0d92687661e18539d65d43c5be2e70935db9c03cf16d06cb343330f8ca9ce326a9eadf1f3849a6dc981672b68b6c5a19907c654671935cfb6f87942cdb6e6c0b30d34dbead08c2be38b05c0f87201307ad631d55946cdb3dd13cfb61c78b603cf0e4f3cdb73e0d9013cafc5cf13c6d48e1c78882109cbbd58008c2f1700a3e8283a7262141dbb8f8ec2288cc2981be32b05c028db5a18b9327a38bfcafa7cca8e2eee3beaf994aeee3beaf994aeee5be25ce2bc3bf896389738ef0ebe25ce25cebb836f897389f3eee05be25ce2bc3bf896389738ef0ebe25ce25cebb836f897389f3eee05be25ce2bc3bf896389738ef0ebe25ce25cebb836f897389f3eee05be25ce2bc3bf896389738ef0ebe25ce25cebb836f897389f3eee05be25ce2bc3bf896389738ef0ebe25ce25ce39f9de19bfef54aecfb0ee041e1fcfd47aaa67a55eefeb665d9fc4a89fd6ea3396563b2cad9250e675d0ef331ef42b02bfb46e9a277fb9320f63c0ecc977ea41b58e3e507ff2f1b2a587f6bfcb53dda3fafa5d5ddc77545fdfd57d47f5f55dddb7c4b9c47977f02d712e71de1d7c4b9c4b9c73f18df992a0edb89ddeafa4d7b1dbe47b9a792aff0a2c4765e6f5cefc9607d2867cf8963624fb8aeee05be25ce2bc3bf896389738ef0ebe25cef9c539c6c3bc3cf004164f9085271ff70f72e119c38c6706339ec9cc782630e3a962c6339219cf66663ccdcc78d633e3e9c18c673e339e99cc785e62c6338519cf44663c29663c5b99f1ac64c6b38c19cf68663c8b99f1bcca8c6716339ea9cc78d630e399c48ca79a19cf36663c5b98f10c63c6b391194f13339e05cc78d632e399cd8c27cd8ca79619cf70663c35cc78b633e3798e194f23339e06663ccb99f12c61c653c68c27c98c6721339e39cc78a631e3a963c6338e19cf2a663c9b98f16c60c6b38e19cf08663c0f32e32967c6339619cf5c663cd399f1d433e319cf8ca79219cf6a663c2b98f12c65c6d397194f3f663c8b98f18c62c653c4802711dcfd8e9304fc7f27d88aad65f563616f0e6efbff1e632f8665f69a7c0fc7baf7808d9e35dbeb581675da0375499b7ce5a79b429dd0571ae6c95f1970ec65c2338a19cf22663cfd98f1f465c6b39419cf0a663cab99f15432e319cf8ca79e19cf74663c7399f18c65c653ce8ce741663c2398f1ac63c6b38119cf26663cab98f18c63c653c78c671a339e39cc781632e34932e32963c6b38419cf72663c0dcc781a99f13cc78c673b339e1a663cc399f1d432e34933e399cd8c672d339e05cc789a98f16c64c6338c19cf16663cdb98f15433e399c48c670d339ea9cc786631e3799519cf62663ca399f12c63c6b39219cf56663c29663c1399f14c61c6f312339e99cc78e633e3e9c18c673d339e66663c9b99f18c64c653c58c6702339ec9cc786630e319c38c6727339e790e1e0fdfcf0b7968bc2aad9be67732f1ed613b84df0dfcaca73aed33ebea65d64bfce4af04ca2cea93f9d5e3757059e2b2c71763acee038d767baa4bd43b99777771df51ef64eeeabea3dec9dcd57d4b9c4b9c73f2bd2f7edf297c3685a6226b3e0d79dcbff878a6c7533ddbeddbe3fe26f07e4babdd96564928f359d06fbf07fd5cc70b344ffe72651ec68019e3a22288372ede88bf4edffbd630e9fa86a52fd6eb4d4f9a46ed43deece2bea3f6215ddd77d43ea4abfb96389738ef0ebe25ce25cebb836f897389734ebedf32f918cf1b2bd187bef64be7036f81df774cbe2846bf7a5d6f9b75d1b79189e31de0a1323f02d7a2a5cd4b9b8fcbb7ecdb24cebb836fce716ee7e91e22beb7dbd73ddea858ccc7fde5fbe93b2a16bbbaefa858eceabe25ce25ce39f97e377edfe13dc49d41fb29db3dc47781e76d0f5a78aa6778ee74c0aad34eab4e492883e772073cd4b308fcd2ba69fe006c874263d63c34961ddfcf48e55e62c248b6b7fdf284edeba5a0fd94ad7d1d001e0feda0ca533dc3f6d562d5e92587ee540663b5c5433d5d6d87e65b603bb41418b3e6a167e7883501e55e65c248b677fdf284edebd5a0fd94ad7db5008f8ffec7533dc3f675d0aad3ab0edda90cc6ea410ff574b51d9a277f85c8ac79d69a3cb126a0dc5a268c643be097a7260175a6295bfb3a083c2d1ef4f154cfb07d1db2eab436b85b772a83b17ac8433d5d6d87e60fc17610666176316b9e7526bfd6fc26a0dc3a268c646bf1ca535399803ad394ad1f3b043c3efa794fba87fdd861ab4eeb1cba53198cd5c31eeae96a3b347f18b6432eccfb0a905974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974ee1cb3e6596ff2c49a8072eb993092eda05f9ef0f99df541fba9c89a4f43fe30f01cf2a08fa77a86e3de8f58755aefd09dca60fb3ae2a19eaeb643f347603be4c2bcaf009945e7ce316b9e269327d604946b62c248b6437e79c27eac29683f65ebc78e008f8f7ede533dc37eeca855a72687ee5406dbd7510ff574b51d9a3f0adb419885d9c5ac7936983cb126a0dc06268c643bec9527153e87b821683f65ebc78e028f8f7ede93ee613f76ccaad30687ee540663f598877abada0ecd1f83ed900bf3be0264169d45e72866d159748e62169d45e72866d159748e62169d45e72866d159748e62169d45e72866d159748e62169d45e72866d1b9fbe8ac799a4d9e581350ae990923d98e78e5a90eef3b3407eda76cf71d8e018f8ffb329e740fef3b1cb7ead4ecd09dca60fb3aeea19eaeb643f3c7613b7475e67d05c82cb1911f66890d618e6296d810e62866890d618e6296d810e62866890d618e6296d810e62866890d618e6296d810e62866890d618e6296d810e62866890d618e6296d810e62866890d618e6296d810e628660eb1a179369a3cb126a0dc46268c643bea97277cefc1c6a0fd946ddcce71e039e6411f4ff50cc7ed9cb0eab4d1a13b95c1f675c2433d5d6d87e64fc07610666176316b9e4d264fac0928b7890923d98ef9e509fbb14d41fb295b3f7602787cf4f39eea19f66327ad3a6d72e84e6530564f7aa8a7abedd0fc49d80ec22ccc2e66cdb3d9e4893501e536336124db71bf3c613fb639683f65ebc74e028f8f7ede533dc37eec9455a7cd0edda90cc6ea290ff574b51d9a3f05db419885d9c5ac79b6983cb126a0dc16268c643be1972795803ad394ad1f3b053c3efa794ff50cfbb1d3569db63874a73218aba73dd4d3d57668fe346c874263d63c5b4d9e5813506e2b1346b29df4cb13b6afad41fb295bfb3a0d3c3efa1f4ff50cdbd719ab4e5b1dba53198cd5331eeae96a3b347f06b643a1316b9e6d264fac0928b78d0923d94ef9e509dbd7b6a0fd94ad7d9d011e1ffd8fa77a86edebac55a76d0edda90cc6ea590ff574b51d9a3f0bdba1d09835cf769327d60494dbce84916ca73df324a0ce34656b5f6781c747ffe3a99e61fb3a67d569bb43772af326d4f39c877abada0ecd9f031e9ae6018fafb80c2c9ec0a10f4d6398f1cc60c6339919cf04663c55cc784632e3e9c18c673e339e99cc78a630e399c88c27c58c6725339e65cc784633e3799319cf62663cb398f14c65c6b38619cf24663cd5cc788631e359c08c6736339e34339e5a663cc399f1d430e36964c6d3c08c6739339e25cc78ca98f12499f12c64c6338719cf34663c75cc78c631e359c58c6704339e0799f19433e319cb8c673f339eb9cc78a633e3a967c6339e194f25339ed5cc785630e359ca8ca72f339e7ecc781631e319c58ca788014f22b87b2c4d02febf1f6c34e6633bd8de33f933602b76f8a07bc5e7c05662f2b48ede2a1d1d7cf7ba51275fe35cd0571ae6c95f1970bcc7846714339e45cc78fa31e3e9cb8c6729339e15cc785633e3a964c6339e194f3d339ee9cc78e632e3d9cf8c672c339e72663c0f32e319c18c6715339e71cc78ea98f14c63c6338719cf42663c49663c65cc789630e359ce8ca781194f23339e1a663cc399f1d432e34933e399cd8c6701339e61cc78aa99f14c62c6b38619cf54663cb398f12c66c6f326339ed1cc789631e359c98c27c58c6722339e29cc786632e399cf8ca707339e91cc78aa98f14c60c6339919cf0c663c6398f1cc73f0ecf7c4633fe745f3fb19f8d6f3b5a08b9e12f07f7c0eec4d4f8cfb2d469a7f131891d7b766e5164fb9a5d9fdf4adeb4ff72a1e34bfb8bdf0b9070edbab3c0f9af5b378fa599add4fdf5a0bbaf74f636c707be138680edb0bc7697ae89f6b12168f9e8aacf934e4cf79d6c7533d2b71dce42731ae576b75ded26abfa55512ca9c05fdce7bd0af08fcd2ba699efc09b33047316b1eba97eb1acfbb900923d9f03d2aefc7cf5393b078f494ad7f7cdfb33e9eea19f6631702b7eeef83ee540663f582877a16815f5a37cd5f70f8ae08e2d5e26207b4b8e8e0b998672dc85faecc670b909983ce9a87c6ae136b02ca2d62c248b6f3c073297e9e9a84c5a3a76cfde325cffa78aa67d8277c10b875bf04ba53196c5f1f78a86711f8a575d3fc07b01d7261be5080cca273e79835cf629327d604945bcc84916c1781e7c3d8795295098b474fd9fab10f3debe3a79e997eec72e0d6fd43d09dca60fbbaeca19e45e097d64df397613b08b3300bb3300bb3300bb3300bb3300bb3300bb330eb32c22cccc22cccc22cccc2cc9759f3d0b3e7c49a80724b983092ed03e0b9123b4fe6be03f2e829db7d872b9ef5f153cfcc7d87ab815bf72ba03b95c158bdeaa19e45e097d64df357613b08b3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300b336f66cd43dfb020d604945bca84916c9781e75afc3c35098b474fd9ee3b5cf3ac8fa77a86f71dae076eddaf81ee540663f5ba877a16815f5a37cd5f87ed20ccc2ec62d63cf42e44624d40b9654c18c97615786ec4ce93b97f8a3c7acad68fddf0ac8f9f7a66fab19b815bf71ba03b95c158bde9a19e45e097d64df337613be4c27ca100994567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974ee3e3a6b1efa4627b126a0dc72268c64bb0e3c1fc5ce535d99b078f494edbec3479ef5f153cfcc7d875b815bf78f40772a83edeb96877a16815f5a37cddf82edd0d5992f1420b3c4467e98253684398a59624398a398253684398a59624398a398253684398a59624398a398253684398a59624398a398253684398a59624398a398253684398a59624398a398253684398a59624398a39839c486e65961f2c49a80722b983092ed26f0b4c6cf5393b078f4946ddc4eab677d3cd5331cb7733b70ebde0aba53196c5fb73dd4b308fcd2ba699efc09b33047316b9e95264fac0928b7920923d96e01cf9df87952098b474fd9fab13b9ef5f154cfb01ffb3870eb7e0774a73218ab1f7ba86711f8a575d3fcc7b01d0a8d59f334987cabf94d40b906268c64bb0d3c1ee22ee4495a3c347f87816f3ddf68f265e617b757233072d85ec93c68566ef1945b9add4fdfbafeab4cfe41f38bdb6b153072d85ee579d0ac9fc5d3cfd2ec7efad65aac36f9bee617b7d76a60e4b0bdfaf9e549252c1e3d653bdef818783e1f3f4f781ef7710e3c9f079ecfc5cf53e5a99e957abddf07ec71ad576bf5054bab8f2dad92500619bee041bf22f04beba679f227ccc21cc58c7d21b126a0dc1d268c64fb1cf0f8e83774dd479975d1fa7baaf450ff36bfadf1fbadc16b0bbdcc7a8983fc9540999707b5b13d66d8cae0ffb4dd747d6e59364fcfbc55b9aef3d23cf92b0bdce7fabeaea1b65a3cb6ef32873e5ab39b0ecd6e7862b49f69a5f91bc0e8baceebeb79d1a8ebcef8bce81d4b476e9ae173c01f018fafe3e2568ba7d5a1858f3697ebf1e5470e9e4fe2e3a9c4d8405f3e6215fbb68ed4ddd57662ac7b15dec3425f1eda40b89f1a6dd645ebd7fb82dafe5e35afc1fe81f653a3ad3a97409949b09f9a92653f551cdc7d5db8c2d8a90cfdff1363b7d75111dcdf6b4b6590af35bf18a36493fd6ffb7b98b5968edc34c376dd0a3cad9e78a2ae89913fdc86750ecdea1868866d211f7176c7e2b17d27419756a69a619ce17183affeec5ed7f2701bd63b34ab67a019c7feacded2919b66aefe0c755ce8e05ec8809b639fb2d0d2919b66ae3e05755ce4e05ec4809b63bb5e64e9c84db37bb5ebc50eeec50cb839b6ebc5968edc34bb57bb5ee2e05ec2809b63bb5e62e9c84db37bb5eba50eeea50cb839b6eba5968edc34bb57bb5ee6e05ec6809b63bb5e66e9c84db37bb5ebe50eeee50cb839b6ebe5968edc34bb57bb5ee1e05ec1809b63bb5e61e9c84db37bb5eb950eee950cb839b6eb95968edc34bb57bb6e70703730e0e6d8ae1b2c1db96996effb0051f79bc81f6ec34687668d0c34e3d8a7345a3a72d32cdff701ee35061bb7e12a8766ab1868c6b13f5b65e9c84db37cf76751f79bc81f6ec3d50ecd5633d08c637fb6dad2919b6651fd596bfc3c398fb76ff5aa4fe63bcbad39f0e098291f31e5290e2a3d8da90ac7dbdbdfaf68b5b44a06777fd3c2e7d8c3a8f191e44f98855998855998855998855998855998855998855998855998855998855998f933e3f3ccade617df857a870923d9f09e948febfcbaee63ccba68fdfad9de5b03dafcc67fdf225589f75ce9b9e331569d4ba0ccff7dbc8ded63c386f71769bb456dcbfbf56e057c1f05de0bba9ff73b3f726876c3a1d9754f8c769f41f3d781d17effc3fd7ef7c41d4b476e9a45f5b3773cf144c5d91d87ef8ad87ca79a7cddd7d5ef22ec13dcbdffbae3d0d4471ce6faee0b6c17ad1e787cbde742d7e9ba55a75b569d92506618d4f37eb62d9ae6018faffe28b07802873e341533e399c18c670c339ec9cc784a99f14c60c653c58c6724339e6798f13cc18ce731663cfd99f1f461c6d38319cf7c663c3399f14c61c63391194f8a19cfb3cc785632e3799219cf32663c8f33e359cc8c6700339e0798f18c66c653c28ce779663cb398f14c65c6b38619cf24663cd5cc78f2710f34179e61cc782a98f10c64c6f310339e05cc7812cc787a32e399cd8c27cd8ca79619cf70663c35cc781a99f13cc78ca78119cf50663ccb99f10c62c6b38419cfc3cc781632e32963c69364c6d38b19cf1c663cd398f1d431e319c78c6715339ea798f10c66c6f308339e11cc781e64c653ce8c672c339edecc78e632e399ce8ca79e19cf78663c95cc785633e3799a19cf0a663c4398f1dc66c6b39419cf22663c8f32e3e9cb8ca71f339e51cc788a18f02482bb9f5dc2e7e56e818d9eb169055bb1637d342e97caebe3ceb383ef5e77b163dd371c0ca8d335a84bdae42b3fddd4eeb9a222b35e9a277f65c0718309cf28663cfd98f1f465c6f328339e45cc789632e3b9cd8c6708339e15cc789e66c6b39a194f25339ef1cc78ea99f14c67c63397194f6f663c6399f19433e3799019cf08663c8f30e319cc8ce729663cab98f18c63c653c78c671a339e39cc787a31e34932e32963c6b39019cfc3cc789630e319c48c6739339ea1cc781a98f13cc78ca791194f0d339ee1cc786a99f1a499f1cc66c6d393194f8219cf02663c0f31e319c88ca78219cf30663c3799f15433e399c48c670d339ea9cc786631e3799e194f09339ed1cc781e60c6338019cf62663c8f33e359c68ce749663c2b99f13ccb8c27c58c6722339e29cc786632e399cf8ca707339e3ecc78fa33e3798c19cf13cc789e61c63392194f15339e09cc784a99f14c66c6338619cf0c663cc5cc78e6593cf87f7dad81ae2f5e071bfdff3fcdcdfb72538feb96bf18ea5119f56d1e5f9ae194766812f56d1e0e3c3398f18c61c63399194f29339e09cc78aa98f18c64c6f30c339e2798f13cc68ca73f339e3ecc787a30e399cf8c6726339e29cc782632e34931e3799619cf4a663c4f32e359c68ce771663c8b99f10c60c6f300339ed1cc784a98f13ccf8c6716339ea9cc78d630e399c48ca79a19cf4d663c15cc780632e3798819cf02663c09663c3d99f1cc66c69366c653cb8c6738339e1a663c8dcc789e63c6d3c08c6728339ee5cc780631e359c28ce761663c0b99f19431e34932e3e9c58c670e339e69cc78ea98f18c63c6b38a19cf53cc780633e3798419cf08663c0f32e32967c63396194f6f663c7399f14c67c653cf8c673c339e4a663cab99f13ccd8c6705339e21cc786e33e359ca8c6711339e4799f1f465c6d38f19cf28663c450c78a2be8543ffef01b6ab267f1b6c574cfe26d82e9bfc75b07de8b0153b58c8df55b0d138972b60a37b7597c146d78bc8973edebd38f86ed662479d7a3858af38ea74d5b12c6e475a261dc4bb1dd1571ae6c91f7eabe72a139e51cc78fa31e3e9cb8ce751663c8b98f12c65c6739b19cf10663c2b98f13ccd8c6735339e4a663ce399f1d433e399ce8c672e339edecc78c632e32967c6f320339e11cc781e61c6339819cf53cc785631e319c78ca78e19cf34663c7398f1f462c69364c653c68c6721339e8799f12c61c6338819cf72663c4399f13430e3798e194f23339e1a663cc399f1d432e34933e399cd8ca727339e04339e05cc781e62c63390194f05339e9bcc78aa99f14c62c6b38619cf54663cb398f13ccf8ca78419cf68663c0f30e319c08c6731339ec799f12c63c6f324339e95cc789e65c69362c6339119cf14663c3399f1cc67c6d383194f1f663cfd99f13cc68ce709663ccf30e319c98ca78a19cf04663ca5cc782633e319c38c6706339e62663cf32c1ebca6580936ca57818df229b051be1a6c94af011be5c7818df2e3c146f90960a3fc44b0517e12d8284ff78cf0f99e7cbc178e7cd1ba69fe1a30de3679dc2694af03ee0f2c9be6bee489fb038b9be62f0123d5e103b051be1eb82f5a36cd7dc113f7458b9be62f0023d5e122d8283f196c949f0236ca4f05db54f04736ca4f031be5a7838df233c046f99960a3fc2cb0517e36d8283f076c949f0b36cacf031be5e7838df20bc046f985e6576fe3f72d9bdec6e74d3e1dc4bb8dc917ad9be6cf03236deff7c146f945c0fd9e65d3dce73c71bf6771d3fc3960a43abc0736ca2f06eeb3964d739ff1c47dd6e2a6f933c04875380b36ca2f01eed3964d739ff2c47ddae2a6f953c04875380d36ca2f05ee93964d739ff0c47dd2e2a6f913c04875380936ca2f03eee3964d731ff3c47ddce2a6f963c04875380e36ca2f07eea3964d731ff1c47dd4e2a6f923c04875380a36caaf00eec3964d731ff2c47dd8e2a6f943c04875380c36caaf04ee83964d73b778e23e6871d37c0b30521d0e828df2f83efa359e186f5b8cb72ddf781f178f2d0f5836cdf8ae27c6031623cdbf0b8c2d267f00780e78e269b1786cdf49d0650d53cd92606b019e5a4f3cd72c9e6b961638de0dcf05d658369fdb758dc548f30780b1c5e4f3d1365b2c1edb771274a965aa59126c2dc053e789e792c573c9d2029f73c173b75acbe673bbd65a8c765f8171867d85afb6d962f1d8be93a04b1d53cdb0cf6d019e7a4f3c172c9e0b96166590c7f3c73acbe673bbd6598c765f8171867d85afb6d962f1d8be93a04b3d53cdb0cf6d019e164f3ce72d9ef3966fdc8678bebfd0b2f9dcae0b2d469ac73ed76e0ba5908f9ba7dee2b17d27419716a69ab9da82cffeec9cc573cef28ddb10afcf2cb26c3eb7eb228b91e61702638bc9e3365ce489a7c5e2b17d2741977aa69ab9da4229b0c5cd73c6e239636981e3f6f07a5abd65f3b95da3fa8f45c0d862f2f9689b2d168fed3b09ba2c66aa191e43b6004f8b279e5316cf29cb376e43bcfeb9c4b2f9dcae4b2c469ac73ed76e0ba5908f9b67b1c563fb4e822e2d4c3573b5059ffdd9098be784e51bb7215eaf5e6ad97c6ed7a51623cd2f01c61693c76db8d4134f8bc563fb4e822e8b996ae66a0b3efbb36316cf31cb376e43bcbfb0ccb2f9dcaecb2c469a5f0a8c765b28857cdc3c51fd19f94b822e2d4c3573b58552608b9be788c573c4d2a20cf2783fa8c5b2f9dcae2d1623cd2f0346d2aa05785a3cf144c519f94b822ecb996a96045b3ef69b872c9e43966fdc8678ff6e8565f3b95d57588c34df028c765b28857cdc3ccb2d1edb77127459cc5433575b401d1b807ba565f3a9ed4a8b9be65700e362878e2b3df144f5292b41c7064b476e9ab9e211756c04ee06cbe653db068bbbc1d2d6158fa5908f9b27aa5d37808e8d968edc3473c56319b0ad02eec596cda7b651eda80118975bdafadcef456debc5a023e9d2c85433bcae89db9ad8560377a365f3a96da3c56db719dcd6d8661a3df1446deb46d0917459c55433ec7bf07cc8d7f947d4fdae7cf88eba07920fdf51d7c5f3e13bea5a693e7c47dd47cf87efa86b2af9f07daff36c9fbea3ae59e6c377d4795f3e7cdfb67cdfcea3efa8f16ff9f01d3526aaabb76fd99774af7dc9fdecd7baebbe44fa739efdf9eaf87da71241fb731a3d1559f369c8e3f9cb2a0f5a78aa67259e137e12e37a5de7d6cb2dadf0dc1acf517d9dffadb678689efc152233c645517cbe2bf13a0c7edf91ae8b54828dae8b55818dae8ba6c0d662f2d560a37b323560a3fb81e3c046f7a2e7838dc6412c001b8dc1b900361afff53ed868ece179b0d1b8d7f7c04663aecf818dc6fb9f051b3d6b72066cef98fc69b0bd6df2a7c0f696c99f04db9b267f026c6f98fc71b0ed37f96360db67f247c1f659933f02b6bd267f186c7b4cfe10d8769b3c5e7bdf65f2782de733268fd7f25e37f9f160db69f213c0f69ac94f04db0e939f04b6ed267f1b6cdb4cfe0ad8b69a3c7e5f748bc97f00b6cd267f096c9b4cfe22d8369afc64b0359bfc14b06d30f9a9606b32f934d8d69bfc34b0ad33f9e9605b6bf233c0f6aac9cf04db2b263f0b6c2f9bfc6cb0bd64f273c0f6a2c9cf05db0b263f0f6c1f9bfc41b07dcee4f13a68b1c9e3f57b7adf14def3a2775ee23d4f7aaf34de6fa76f7fb4808dbeaf85e38c4a4d1ec7b8d17ba5707c25bd4b12c7a9264c1ec79597993c3ed340dffdc06743e8db51f85c52b9c9e33371f4cdcf0360a3ef92be0b367af7d43b601b60f26f838ddee9fc16d8e83b176f828dbeddf406d8e87b9ffbc146ef98da07b6c74dfeb3601b68f27bc136c8e4f7808dbed1b41b6cf49dc85d60a377497d066cf47ec4d7c15661f23bc136d4e45f03db5326bf036cf4fdc5ed60a377466d031bbd77702bd88699fc16b0d1f70e36836db8c96f021b7dc76b23d8e8dd50cd607bdee437806d94c937816db4c9af071bbd9b671dd8c69afc5ab0d13efb55b0d13efb15b0d13efb65b0d13efb25b0d13efb45b0d13efb05b051dfff31d8a8efa7fe43b753dd7e6f99f97410df7194f6d71ab49fb21dcb1303f2c4796c9c041ef47533f6baa7c2e3f08fccba8acd7a295e6e82efebb1fbce9c03dc30ebea69d67bddf25d02654a07b66d9b6bf0ff34d48196c332b46e9a1f03cb5eb3d65d6eea7bc3537daf5b4cc47d0398a84cd9c0b6b25f32f952582646b6f07c96622d000d714a439e18fc68950acf2f3eca81e706f0c4df4e32e7d73e6202db56dce7d7f675193bd69250e63ae8e7ebbd58372c1e9a277fc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc2cc9f59f3d0fd04624d40b95b4c18c986f7ba7c5ce7c77bae78cfebe6c036bfbeefeff532eb1d6bd5b904ca7c6b601bdb6d932f83ffd3768bda961eee1366dd96dfbb5706f5c17b411eb665c873d3e2b17d9739f4d19a5d736876d513a3dd67d03c7ef385f4bb063cbedae3758bc7f68d7dc60da69a45f5b33ec625648b33d718848ad87ca79a7cddd7d563a1f4580e7bff75cbd214c740e03df32f419f44cbdc31bf09d0e70ee8733ffb007b5c02f653adc0187fbf996a770f98fafe3196a63806e2b78cb6340622fe7e2055e9731f416dd41e5b8175a532bf0ffbb93f34791c07740bd6f515c7ff69ca362601fbd4cbf1d739dcbe1f9a75d1f6bdecf0fd01b0c6e4bb0a7d1799447ec85e02f92f0f6c2b6b7f678ab42676fc1616b2dbcbb55acb25a1cc1547fdd341bcf5bf6cf15cb69875ecfc09c4d957e058cf579f742542a331a01195c1635e5ffbaf8f2c1ee2207fd88ff6b6cad0b22550e6ebd047e9ba503fdf6a7ea3f601be8e17a2f60178bc60ef17128e3aeaf8b835a08db7bb8ff5fb2fe82faec1ffd3c1a71febf75f1043aee3525aff58583f71f50ea2f72d54e67f59fb511fe793b82d6d3d712c2195f97fd00fa50665f2b99cd7ddaf73f4a8f33a1fdfcec4730d9ab2eddf711fe3a37ff154cf4ad7beeb9a55a724941906f5f4701ce3dc6fd1fc65f0edeb7ba9e4838ea1ae5b5a944099a4693bd47744e988d7256ee4a52e29e7f1e058475da8cc00a84b29d8e364f2b9ddf0384baff7a6a3ae54e6b1416d65079a7c02b613f6a5231cffa7295b7f40fae93a5f8cbfcee1f6a5e71669fb5e74f87e1f5863f2ddeefd1574bc4f7ec85e02f9e183dacadadfee24adf15bacf47c1db2dbcb5db7964b42994b8efaa78378eb1ff59d59f2a7636708c419c591cf7ef35284466341232a83f70aeceb2d51fb7d1f63e9b3edf76f02a3dd6fe2b18b4f36fb9cc5be5eee3a1ea43278ce426526403f9b7094f57f1f20736c83f5a27a04565d03abae9e8e5f6b8a2c3dd3e06734d8293e4967fa1f1ee3529969d6feccf7756ce2a67ae0fdbaab16f7354b57bc16351bb875dcdbe716789ceef99cb6068fc5ece3a1abc04e65165ac743f671dc6d475decfd747170f7b9e02756597c3629db7276fe236b19bc66e0ba268b7ddf1560499b7ce5a799aa2a2b91a9d8a185ebbea9ab4fa2768031675f47196dad07afa3acb1fa24bbacee936afbb7e943db11afb5dbd7df3d3d9b16b6b95b56fd6d8d3463abc9e336f4710fa33b3e9b561adb7a27ad2fc4f10ca5563e1edfa90db8afc8a6c555078faf6b9a515a5c75f88e4f8bf14daefd874b8b2b0e1e5fe798515a5c71f88e518b8dae6b0b2e2d2e3b787c9d6b446971d9e13b3e2d26b4bbae914d8b0f1d3cf15fd3c8ae05de13cb85f90a03e6522b1f8fef9af5ae7b772e2d3e70f0f8ba7717a5c5070edff1695135de75ceeed2e29283e7529eb5b8e4f01d9f161327b9aea9b8b4b8e8e0f1707d2dab16171dbe638c8b66bcbe964d8b0b0e9e0b79d6e282c3778cc787e3b35d33442dde77f0f8baf617a5c5fb0edf316ab14efb3edf012dce3b78cee7598bf30edff169b17e9cf6fd5e07b478cfc1f35e9eb578cfe13b3e2dd64dd4becf75408b730e9e7379d6e29cc3778ce750615c9ced8016671d3c67f3acc55987eff8b4d8101e6b9de98016671c3c67f2acc51987eff8b4a80cf7a9a73ba0c56907cfe93c6b71dae13bc6b808cf274f75408b530e9e5379d6e294c3778cfb91302e4e76408b930e9e9379d6e2a4c3777c5a6c0caf3f9de88016271c3c27f2acc50987ef18afb9847171bc035a1c77f01ccfb316c71dbee3d3a23adca71eeb8016c71c3cc7f2acc53187eff8b4680eef891ded8016471d3c47f3acc55187ef188f3bc3fee24807b438e2e03992672d8e387cc778dc195ebf38dc012d0e3b780ee7598bc30edf31f69de171e7a10e6871c8c17328cf5a1c72f88ef1b833d4e26007b438e8e03998672d0e3a7cc778dc19ee475a3aa0458b83a725cf5ab4387cc7181761df79a0035a1c70f01cc8b316071cbe63bcae15f69def76408b771d3cefe6598b771dbe633c1f09aff1bdd3012dde71f0bc93672dde71f88ef15e51780cfe7607b478dbc1f3769eb5781b7cfb1867825ad058ac5196162550e681c1995f1a8b15a523ad039fa1c5babc157b5d32e3cade8ca8cb5b50172ad317ea520af638993cd5358c19fa96028d4d6f75d495ca3c3cb8adeca3269f806d721bd635ccf17f9ab28d4122fd749df7c55fe73056e91b10b47df7397cef05d6987c57a16f1a9b4e7ec85e02f96707b795a572a407694decba8dd0373090dd5eee6d6bb92494d9efa87f3a88b7fefb2c9e7d1673f8dc03c419c5919fbe2bc3b43f42a351a01195c1317bad9e78ec3184c441fe7419dafebdad32b46c099419037d148e2ba57a2682bbc74deafabde1a97ee48bd64df3e42f09b61bc068d751c7c74330f693be0142df07d136fade077ebf6bbc65d3759de0a9aee48bd64df3138091be3f323eff8ca98e328eb31835cf240f9ae1375568cab6bf98043c133df078aa67b81faab5ea34c1aa5312cae0b38db51eea59047e69dd345f0bbe7d6c73d482f6c9c32d2d4aa0cc42ebf8314a475a878edff18ebaf8d2719cc533cee17bb2671d69ddd4274ece83ef3acb778de55bb76d8c313d656bdb75c05cef8159af774afceb0ddbf654b32e8a67f25303754a830671d5097d1759eb267b09e49b06dfcd407ad0be93d8753bc2d8895a6e92b55c12ca4c76d43f1d73fda7583cb88df5a48f1b5e84e34a0fed218c81c91607cdd780765322b49b0cda5119dcf75679d2aedee2a1f92ae0a1e3ab5ab0d1710a7ee392fe9fca03b7ddefd53ab8c986df3cac72308e8f9f313cceaab218697e3c3092ad1e78ea3c69666febe1963e784cd0db2a43cb964099fdb05f4e38ca86cf1d17b5d58bbea5f9498cf5d2ebede5412ffcce6700fa04968634114369d0f62dd038791e08dabef5b97bcfce5deb36352f6bcedcf624b4120b137f8b1cd528061be67b386c41d0fe93a62560a34f9af6045bb1250b7e4a95cad3a7137dc8857ad0ba4b2cce526089d3377e0e96a66ca1d31b787c84b20e1dfa24ac099dc65d5bf634637cf4b4383b133bfa7f3db2948b5a17c5418987ba2313ad9be6c99fd6873e8ffbfabaa66dd3766ddabba3f9b53dbb11d66e5c982fb244b07f5dcb60906063a2f5f4b4c4e913bf3835d8786dbe00fc05c012189ed2f879c240a56f0837addbbe7dc9def5dbb734cddefb5ad39e2d3b5f43457b5bca45a96d37793db9ba3a2c6b97efe5b0d9137eb1b937d8e88bcda56023ff7dc0461c0fc0ffec2de1a54d0c83f55318ebff95980af73215a210a4dd90ee4f749bd1af4dd5bb7ffd8968fd4968bdf9f4dbe2f4279ef5279df5279cf5279bf5279af52799f5db24f413defac8614890f984f29341e615b14383cc2790f5278f9f09da3e69aca7df055efd09637da8a13f51ac3f49fc7c90b954383ac8bc564dbfc6421fb2ea432b7d98a74f6bf421b83e2dd7875efa7281be74a40f63f421a23efcd1872cfa105c1f7a4f355a4f0b329f34d79f309f19643e51ae3f49ae3f413e37c87c627cbe4a0b82cca7b6170599cf07ebcf87ebcf76ebcf79ebcf7cebcfcfebcf82ebcf85ebcf88ebcfcceb4f0feb4fd0af0e329fda7e29c87cb6f89520f399e3b541e6b3c8eb83cc6794370499cf2eebcf31ebcf346f0e329f75d69f7bde16643e0fbd23c87c4e5a7f665a7f7e5a7f965a7fae5a7fc65a7fde5a5f72d7b71af425787d795b5f7ed5b740f4ad1f7d6958dfb2d4b770f52ded962033e4e150901912a38708e921537a08991e527722c80cb9d44350f5905c3d44590fd9d643d8f5907efd88837ee4433f02a31f09d28f48e947c6f42374fa3148fd58a17e4c563f36ac1fa3d6977df523e8fa56a0bedcdb1a642e09df09329f5ffe9c4a9f57e9fb54fa824adfafd20fa8f4832afd904a3facd21755fa11957e54a51f53e9c755fa09957e52a59f52e9a755fa19957e56a59f53e9e755fa0595bea4d22faaf44b2afdb24abfa2d2afaaf46b2afdba4abfa1d26faaf45b2afdb64abf1364e2f1f754fa7d95fe40a53f54e98f54fa6395fe44a53f55e9cf54fa7395fe42a5bf54e9af54fa6b95fe46a5bf55e9ef54fab24a5f51e9ef55fa0795fe51a57f52e9ab2afdb34a5f53e9eb2afd8b4adf50e99b2afdab4affa6d2bfabf42d95fe43a56fabf49da0ed33e5d8790c363dce5033bf6ecf9ee61dafefa9d8b3b362c7deed7bb6bcbefd8d8a7d5bf66caed8f9d9e65d1bb7efdc870b7fd92cfcb8999fb66bd7ba372ab6bcb6a1797fc5cebd7b2a766eac58bf73ef6b1bdaed2cffb75968f0dd1ed76dd810edacb4c7a7202debd139a783cc72f4a5fa79d9ebf6448f4e08f24c67169adbc90acd357b203a0d5b9e39e6abd8bd7de79e8aca8ad7d45fb573ddb9af79c3980afcdf6e25f2ee3d15bbf7acdbb5a762e3ae9d3b2aaac6e07a17f6e94425bed8c70f4c6ff35ea24e85ca6f0eec444dbe36b0739be33f3f0de9ffeca4d3b2419da861ffce2c347e50e708d3832265d9bd77fd9e5deb9af6442f3cebd32cbca033d55cddc96af619dc0967e59d5968f4e0ce112ee88cb37d39380bfe3f4095c818d4550500", + "bytecode": "0x1f8b08000000000000ffed9d07741d45b6ae5bb61ce0481893b3450e06a3e49c64724ec6608c31b62c0b1b0739623298e8886d72b041ce39639cb331cc0c732727263030c3a47b67eeacb7dedcf7ee5befb15ed739b5977e95ab8f754497fc1fa97aad92aaf7a9eefdd5dfbbab5375d73f8320c8095253f3305d101c3ec9ef65fa7fe1b79b8a625c57a14bce9c2ce16c96259ccdb38433374b385b640967cb2ce16c95259cadb384f3981839155bb3a0f61437efb10e748d9b3191659ae66581a6f959a6e97159a0699b203bdaa8e3b384b36d96709e90259c276609e74959c2797296709e92259ca76609e76959c2797a96709e91259c676609e75959c2797696709e93259cedb284b3204b38cfcd12cef3b284f3fc2ce1bc204b382fcc12ce8b62e46c0f9c17ebff97e8ff97eaff97e9ff52f672fdff0afdbf83ae63ae9ebf527185493da429367e2b095369983a86a993f15be730750953d73075d3bf15e8dfba87a947987a86a957987a6b0dfa84e9aa305d1da66bc2746d98ae0bd3f561ba214c3786e9a630dd1ca65bc2746b986e0bd3ed61ba234c7786e9ae30f50dd3dd61ea17a67bc2746f98fa87e9be300d3058ee0fd3c0303d10a641617a304c83c334244ce5611a1aa68a300d0b5365981e0ad3f0308d08d3c3611a19a651611a1da63161aa0ad3d8308d0bd3f8304d08d3c4304d0ad323619a1ca647c3f458981e37347b224c4f86e9a9303d6d703e13a667c334254ccf85e9f930bd10a617c3f452985e0ed3d4304d0bd3f430cd08d3cc30cd0ad32b619a1da639619a1ba657c3f45a985e0fd31b617a334c6f85e9ed30bd13a677c3f45e98e685697e98ded72cb2237c10a6ea302d08d3c2302d0ad3e2302d09d3d2302d0bd3f230ad08d3ca30ad0ad3ea30ad09d3da30ad0bd3fa306d08d3c6306d0ad38761da1ca68fc2b4254c5bc3b42d4cdbc3b4234c3bc3b42b4cbbc3b4274c7bc3b42f4cfbc374204c07c3f471980e85e993307d1aa6ef84e9bb61fa5e983e0bd3f7c3f46f86e63f08d30fc3f4a330fd58db7ea2ffff549795fb773f0bd3cf75fe17faff2ff5ff5fe9ff9f1bcbfc3a4cbf316cbf0dd3ef0cdb1761fabdce7fa9ff7fa5ffff41ffffa3feffb5feff27fdffcffaff5ff4ffbfeaff7fd3ffff5dffff0ffdffeffaff3ff4ffffd4ffff19a6070a52f9d641cd5416c4d4469556269ffd88f81707b527a54573fd9bfc2fd0f65c3d2fff45bb167abe85616fa9e75b1aeb69ade75b1bf6b67abead613f51cf9f68d84fd6f3271bf653f5fca986fd023d7f01d81301dc1bd676656bae4d396093786d06b616dad61c6c2d6575606ba56d2dc026dbb725d88ed1b656603b56db5a832da16dc7889661cad3b6b220ae58291ca2d69b1ff77af5f3b2e3e2e71daad6dbc611eff1f1f30e53eb6deb8057c5c7097a5dc743dc9ca86d6dc17692b69d00b693b5ed44b09da26d2781ed546d3b196ca769db29603b5ddb4e05db19da761ad8ced4b6d3c17696b69d01b6b3b5ed4cb09da36d6781ad9db69d0db6026d3b076ce76a5b3bb09da76d05603b5fdbce05db05da761ed82ed4b6f3c17691b65d0036697f2f049b9c2f5ea46daaed38260796d17669b792cb489b0db64ba5bd06db65d25683adbdb4d360bb1c7c8bed0a686bc4d641dba4dd52bf75d3f9b220aefda4b852adb77bdceb0dd7acd6db33fef5269f39f60a6a742d033fdd41abde3a1f63bfa622f49da393f8117b2ee46f82b2524ef490638fb0ab634c0f9def9d66b96ec672f950a687a5fe6541bcf5ef69f0f434985b40de4dcc9694f898adf39471ccf687b266ecc97950638cd95b81c341cc76f6315be729e398ad84b266ecc9b970638cd9fb81c341cc96bb89d9e2421fb3a9fb6641608f3db91e6a8c313b0238e28fd98e3e66eb3e651cb3cf415933f6e49ab831c6ec64e0883f663b97fb73833a4f19c7ec1c286bc69edc9f698c31fb22703888d94adfced679ca3866df87b266ecc9bdc2c618b3af0147fc31dbd551cc96f8980d52cf4083c01e7b72dfba31c6ec02e0883f6687fafbb3759f328ed9ed50d68c3d7986d21863769dceabe70c3fd1cf19ce02db4fb5ed6ce08d3fb62b3a3a8aed621fdba9be2141608f51799ed718637b8fceab38fe05f44710db2fb5ed5cb0fd4adbce03dbe7da763ed4cbc13e50eef7813a4f19ef03bf81b2662ccbb3e5c6b80ffc08381cc46c858fd93a4f19c7ecdfa0ac197bd2cfa131c6ec17c0e120662b7dccd679ca3866ff37943563ef129d6f8c312b7d4dd5f9c297fa7ce132b07da56dedc1f6076dbb1c6c7fd4b62bc0f6b5b67500db9fb4ed4ab0fd59db0ac1f6176d2b02db5fb5ad186c7fd3b612b0fdbbb69582ed3fb4ad23d8feae6d9dc0f60f6deb0cb6ffd4b62e60fba7b675d536f5bc4bfa5ec9796b6b602d0be2dbb609d045a61c63be0cf2c56e790af381077d95c6efab44d5bd24a87bdd4b81a7a383ba27c0475d783a024fa7f879927d513bc7bfdee4362e31344d80af12a8571707f5ca015fb26e99177ff960c3fdbc8b85b16bfc8cc539e04bd62df35d81516cd8eec8fb3fb2ffa8b6f9dc9c1a5e07fb52f2f88cfeca8043fce542997fb5ab297ba166cb83dfb10dee64d81cc565322ec497ac5be6c55f1ed4a753c33316d795b1a3c1e8aa8dc8015fb26ed3771ee48bdcea9396a733896f07e7ddd6364d34efde00bebb1abe4b0ddfd876ca94eed8d6159863bffed1c7b61ef1afb710cf95e53a45fce0f9035e4fc45527f42dd729e247ecb990bf21a7a6ac94133da41d1676b50fcbb6447673b92ec672f950a6bba5fe6541bcf5ef61f0f43098d5f1a6271c0b1dec0fc918e86e70c87c2968d72342bbeea09d94b904b47370ee99d4ae9bc123f31d8147da6f6ccf8a1a98a788c0379ec3e2b59cfc8ee701aeb65791c128f3b6edd515183b5a181d9c1316a73b1e9602a3d8ba014f8923cda2b66b09896f17d79539e043cecdcd6b9b5c28737bf39ab215394ed98af1dc59a6ba5ef3c6bf9d8a0b71ffa80b8fe37da8c8513c16e2fd9b6f827863cd6c97ccf626ea1e8fabb6bcc4e09179f1e7993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999f59f1c8f304ecb725e53a91309afddf5cdde74f7e8b4faf0b9f01fdcb697fb0e2427cf627fd202e33ea9c0b654e6c56c3f6dfd01fccec4b14b52d5df48d4db72dc51ff6076b886788a5068fe93bcfa20f3e9746cd5cf58132db0c99c7fe69a25f11f0b8da1f8b0d1ed337b61925a49a45b5b3aefaf445c599ad3f61416cbe8b87ba7aaeabbe7ba6be1d6a1ebf3a199a26bf496ad8549b7457f39a7abb78ce9be973673c6e483ecee7b8d82f037dc5dfce16d7ea9fd02ca87dacc05877d5574bf62be91bd1ddf09d0b65ce6d56b36d7ac0ef65c1e1c7062c23eb96f9cb60d91ec6badbb8ab6fda7e28dd815bf22d8dba75066e2973111cbb7fa6f38e8e81c599be2381c7e4f88f2fa9fe222519f0e0f1cec5398ba3e36821c663dcfd45cc7e90b6f36529837d481df4df4d7b2c167f9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec99f999158ff90c1d9ffd96923036501f9be4f30cf93e1b3e17dbd2acc6afeb6780f2cca9bd51677c473917de51dea1d9b0ef037e57cab62d5d3d5b8bda96e28fadef439e451fa5590f8b660ebeeb98f69b1df88d44d1af07f0b8da1fa3bedd616b338a48358b6a675df45d481767b67e0a05b1f94ef51771f15c57fa8b98c72ff3bb46d84f426cf81c3cea7b61c586ed68b701b67e6d92c76f2eb818e306e3d9ec2b28feb09fc4175a5be927117f3b505ce8f21821fba8f40929b1d455cafcb1594dd93fe93cf6152a8575fdcbf2bb4ce9fa24609beae0fbb1c9ed2beb92ed6bfb766d1f608dc97711ae2b47a73e8606b990ff9fcd6aca4a39292b5a0bbbda47e4bb52c86e2ed7d1582e1fcaf4b2d4bf2c88b7fee6b7847b1bcc2a76fe0a71f62f38d773d526f58ad0e832d048cae039afab7eb5661b69f699c63e91ad8c32787e2a65fe1fb451517dd26d7d2a5d9d2f44f5e7c4f305db398d5947b3ef7853ef0f98afaf435cf4079475b7096af7c90b8cf5b787f50b57ab20fad82265dac2fa8fe677af6cd77ec28bfd0da5cc2970ed7783ce6772ed77b4aee36dd77eb85c54ddb15d88fbd888f1882cf8bd48295360c4638f08eeae9665cf8f5856b432bf7d88d7a5788e10ff772353ed4d6fa32eb24fe1f7fda5cca5c67e13ff3953eafcd3d53732655dd206155bea2a653ac0be56a8f309d84ef84e516fcbef32a53bff14fd549daf8abfcec9ed7bb55e976cdfab2cbeaf01d6987c17a16f39ff143f62cf857c2f389e4839d143b41676b58fc8391cb29bcb753796cb87327d2cf52f0be2adff5506cf5506b38a9d1288b3def0ae85abb6ba4f8446ed41232983f7ae6ddf35b6ddeb68a8f354f37be9f9c1e1dfeec5e3a49b7336fbbb72e6fd5bdbf9497b831fcf4f6e85763661296bde9796e5e2ec9f8eef03e17921be0fe4ea1a293fa8ad67bec1e1d2771bc3779b06f4ddd6f0ddb6017d7bcdbde64c9a338df983cf219b01a38b631d1e57ebc2683bfe35074657ef6c9664c088dfbcc6e39d30baf84e787dc714c2739d16c0e8e27de34cef57770246fcc68030ba78473bd3ef54e37bdbb25c2b607431ae118ea1541746db5847ade1bf83718d8aea3b0e088e75740c30ba181b2411d41ecfe4488cdd8051963b16185d3c474a04b5efab1d89119f57ca7209c78ce98eed8efbfe14677a0fa221fa15449d6ba06f07f7ff8bb16f425db4e8e99627edb90ffa7670ff2ba9058e6579242df0f99c8bb1351341ed676147e2c16788b2dc09c058e688b177068c65c028cb9d088c7d1c319665c0d80718c57e12303ab80f9964ec930123deaf93e54e06c6ab1d315e9501e3d5c028cb9d028c2eee2926c06f5d18af014659ee5460bcd611e33519305e0b8cb2dc69c0789d23c66b3360bc0e1865b9d381f17a478cd765c0783d30ca726700e30d8e18afcf80f1066094e5ce04c61b1d31de9001e38dc028cb9d058c373962bc3103c69b8051963b1b186f76c47853068c3703a32c770e30dee288f1e60c186f014659ae1d30deea88f1960c186f054659ae00186f73c4786b068cb701a32c772e30deee88f1b60c186f074659ee3c60bcc311e3ed1930de018cb2dcf9c078a723c63b3260bc131865b90b80f12e478c7766c0781730ca721702635f478c7765c0d8171865b98b80f16e478c7d3360bc1b18fb5a18fb3962bc3b03c67ec028cb5d0e8cf7c4cf98bc96ee9701e33dc0736ffc3c49cdeec980e75eb73cc96f28de63f1755ffcbe92dba27f50f7badf073c03e2e7496e8bfb32e011867c580e35bb3f7ec6a466033260bc1f7806c6cf93d4ecfe0c78068266f75b347b207ec6a4660333607c007806c5cf93d4ec810c780681660f58347b307ec6a4668332607c107806c7cf93d4ecc10c780607359a3d68d16c48fc8c49cd0667c0380478cae3e7496a3624039e72d06c8845b3a1f13326352bcf807128f054c4cf93d46c68063c15a0d9508b66c3e2674c6a569101e330e0a98c9f27a9d9b00c782a41b36116cd1e8a9f31a95965068c0f01cff0f879929a3d9401cf70d0ec218b6623e2674c6a363c03c611c0f370fc3c49cd4664c0f3306836c2a2d948478c0f67c038d2c213f737d11fb6f81aeda8eea382bad75d18f26139ec2731c611e3e80c18c700a32c87fd24aa1c318ec980b10a1865b98463c674fd24aac0f7d8f87d27dba5aaa0eefa8c75cb93b69f04fa1ee7488bb141ddb518e796276d3f09f43dde9116e382ba6b311e782638d022013eeac2230cf9b01cf69398e8887142068c13815196c37e12931c314ecc80711230ca72d84fe211478c9332607c04186539ec2731d911e32319304e0646590efb493cea887172068c8f02a32c87fd241e73c4f868068c8f01a32c87fd241e77c4f858068c8f03a32c87fd249e70c4f878068c4f00a32c87fd249e74c4f844068c4f02a32c87fd249e72c4f864068c4f01a32c87fd249e76c4f854068c4f03a32c87fd249e71c4f874068ccf00a32c87fd249e75c4f84c068ccf02a32c87fd24a638627c3603c629c028cb8d74cc98eefa654a23f71d75add2d87d475d973476df3ece7d9c3705df3ece7d9c3705df3ece7d9c3705df3ece7d9c3705df3ece7d9c3705df3ece7d9c3705df3ece7d9c33f97ece81ef04f89029c7982f83bc30e4c372233d63a366449e82f8780ab1eee8eb7982ba3f6fe1c9715477f4f50241dd8521db189fcb02c69159c0e8754cf541ac0fa3e279d111cf0b19f0bc083c2f39e27931039e9780e7e5f8799231f552063cc2900fcb8dcc02c6e7b280d1ebe8756462f43a361d1d3da367f48c9ef1683066431bee19b3221e8bebcba878a6c6cf93d4ece50c78a68266b2dcbd6e198bebcba878a6c5cf93d46c6a063cd340b3a916cd1c3016d79751f14c8f9f27a9d9b40c78a68366d32c9a39602cae2fa3e299113f4f52b3e919f0cc00cda65b3473c0585c5f46c533337e9ea4663332e099099acdb068e680b1b8be8c8a6756fc3c49cd6666c0330b349b69d1cc0163717d1915cf2bf1f324359b9501cf2ba0d92c8b660e188bebcba87866c7cf93d4ec950c78668366af583473c0585c5f46c533277e9ea466b333e099039acdb668c6ca38320b189fcb0246c73a16d79751f1cc75c43327039eb9c0f3aa239eb919f0bc0a3cafc5cf938ca95733e011867c586e6416303e97058c5e47af2313a3d7b1e9e8e8193da367cc8cf1f92c60f4dbda33b2323ab8be4afb0ecdab8ddc77d43b348ddd77d43b348dddb78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74cbe5f8fdf7771a6efb0be0e3c2edea97554cf42b5de37f4babe89513fa5d59b8656af1a5ae543993740bf371de897037e65dd322ffe3265be9880d991efe2e3c2751c03f5171fcf197a28ff6f39aa7b545bff5623f71dd5d63776df516d7d63f7ede3dcc77953f0ede3dcc77953f0ede3dcc7398b6fcce70635e7edf27d25b58eb775be859e97f2cfc37252a65fabd4ff3681df875cf8f6fb903f563405df3ece7d9c3705df3ece7d9c3705df3ecef9e21ce3e1ea06e0090c9e200dcf93643c9dc978c692f10c25e3b9878ce726329e5e643c93c9788ac9786692f13c4cc6f31219cf20329e3bc978ae25e3b9828ce769329eae643ce3c9788691f1dc47c6730b194f1919cf63643ca5643cb3c8784693f1bc4cc633988ca72f19cf0b643cd793f13c4bc6d39d8c673619cfa5643c13c9782e21e379888ca7908ce77e329ee3c878da90f1dc46c6731519cf13643c9dc8785e21e3a922e3994ac6534ec6d38f8ce74a329e1bc9787a92f1cc25e379848ca7888c670419cf03643c7790f13427e3b9868ce729329e2e643ce3c878da93f15490f14c23e3e94fc67333194f6f329e47c9784ac8784691f13c48c67317194f437c8f23139e29643cd791f13c43c6d38d8c670219cf74329e8bc9782ac9780690f1e491f1e493f17420e3b9958ca70f19cfe3643c1dc978c690f10c21e3b99b8ce745329e1bc8787a90f1cc21e39944c633838c673819cf40329ecbc8788e27e3694bc6733b194f0e014f2238fc1bc909f8fd75b0353396559f95ea5650f3fb3bdade0c967957e79b5bd6fd0ed8e45b55ef5a96459dde81ba94e97ce1b79b923aa1af3298177f79c0f12e09cfed643c6dc9788e27e3b98c8c672019cf70329e19643c93c878e690f1f420e3b9818ce745329ebbc9788690f18c21e3e948c6f338194f1f329e5bc9783a90f1e493f1e491f10c20e3a924e3b9988c673a19cf04329e6e643ccf90f15c47c633858ce775329ebbc8781e24e31945c65342c6f328194f6f329e9bc978fa93f14c23e3a920e3694fc6338e8ca70b19cf53643cd790f13427e3b9838ce701329e11643c45643c8f90f1cc25e3e949c6732319cf95643cfdc878cac978a692f15491f1bc42c6d3898ce709329eabc8786e23e36943c6731c19cffd643c85643c0f91f15c42c633918ce752329ed9643cddc9789e25e3b99e8ce705329ebe643c83c9785e26e3194dc6338b8ca7948ce731329e32329e5bc878ee23e31946c6339e8ca72b19cfd3643c5790f15c4bc6732719cf20329e97c8781e26e39949c6534cc633998ca71719cf4d643cf790f10c25e3194bc6d3998ce749329eab2d3caf3be291f7dd65dd32ff3a896f07dba150adf73d47759aa7d7d552af57f8c55f2e94293a36f55f3d1fc26585cbfc3e01f6fd9e071abdeda82ee6989832ff7623f7ddc6f0dda689f86e6bf86edb447cfb38f771cee47b5efcbe8bf1db3632e518f36590c7e38b8b6f0239aa67ad63fb3731eaa7b49a6f68f5b6a1553e94790ff49bef403fdbf982cc8bbf4c992f2660c6b82808e28d8bf7e3af53b1ea4b730ce8fabea12fd6eb03479a461d433e68e4bea38e218ddd77d431a4b1fbf671eee3bc29f8f671eee3bc29f8f671eee39cc977b5cec778dd58883ed4bd5fb91ea806bf0b753e2746bf6a5d0bf4ba5ae8750bc742e09132afc2bd68bfcffb7d3e2edffed8e6e3bc29f8668e73332fcf102f013657cf78a362b1219e2f1f4ddf51b1d8d87d47c56263f7ede3dcc73993ef45f1fb4e3e437c3da83da57b86b808781638d0c2513d93d74e8b8d3abd6ed4291fca54433d173ba8670ef89575cbfc62d80ed9c6ac78a6e83c8eef22e5a690308a6d815b9ee4fe3525a83da5dbbf16038f83fda0c8513d93fbd712a34e532cba4b996aa8e71207f5b4ed3b32bf04b643b6312b1e797757581350ee051246b12d72cb93dcbf5e086a4fe9f6af25c0e3a2fd7154cfe4feb5d4a8d30b16dda54c35d473a9837adaf61d995f0adb21db98158f8c6522ac0928f72209a3d816bbe5294d409d654ab77f2d051e17ed8fa37a26f7af65469d5eb4e82e65aaa19ecb1cd4d3b6efc8fc32d80e9ed933db98158fbc3329ac0928f71209a3d89638e5292d4c409d654ad78e2d031e17edbc23dd93edd872a34e2f59749732d550cfe50eea69db77647e396c874c98e76521737516327b9dbdce51ccd559c8ec75f63a4731576721b3d7d9eb1cc55c9d85cc5e67af7314737516327b9dbdce51ccd559c8ec75f63a4731576721b3d7d9eb1cc55c9d85cc5e67af7314737516327b9dbdce51ccd559c8ec75f63a4731576721b3d7d9eb1cc55c9d85cc5e67af7314737516327b9dbdce51ccd559c8ec75f63a4731576721b3d7d9eb1cc55c9d85cc0c3a2b9e97755e581350ee651246b12d75cb937c7fe7e5a0f69463cc97417e39f02c73a08fa37a26fbbdaf30eaf4b2457729530df55ce1a09eb67d47e657c076c884795e16325767213383ce8a67aace0b6b02ca4d256114db32b73cc9766c6a507b4ad78ead001e17edbca37a26dbb195469da65a749732d550cf950eea69db77647e256c07cfec996dcc8a679ace0b6b02ca4d236114db72a73cc5c9f710a705b5a774edd84ae071d1ce3bd23dd98ead32ea34cda2bb94a9867aae72504fdbbe23f3ab603b64c23c2f0b99abb390d9ebec758e62aece4266afb3d7398ab93a0b99bdce5ee728e6ea2c64f63a7b9da398abb390d9ebec758e62aece4266afb3d7398ab93a0b99bdce5ee728e6ea2c6466d059f14cd779614d40b9e9248c625be194a724f9dc617a507b4af7dc6115f0b8782ee348f7e47387d5469da65b749732d550cfd50eea69db77647e356c87c6ce3c2f0b99ab3d738330fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c731433436c289e193a2fac0928378384516c2bddf224bf7b3023a83da5ebb7b31a785639d0c7513d93fd76d618759a61d15dca54433dd738a8a76ddf91f935b01d3cb367b6312b9e993a2fac0928379384516cabdcf224dbb19941ed295d3bb606785cb4f38eea996cc7d61a759a69d15dca54433dd73aa8a76ddf91f9b5b01d3cb367b6312b9e593a2fac0928378b84516cabddf224dbb15941ed295d3bb616785cb4f38eea996cc7d619759a65d15dca54433dd739a8a76ddf91f975b01d3cb367b6312b9e57745e581350ee151246b1ad71cb539c803acb94ae1d5b073c2eda7947f54cb663eb8d3abd62d15dca54433dd73ba8a76ddf91f9f5b01db28d59f1ccd679614d40b9d9248c625beb9627b97fcd0e6a4fe9f6aff5c0e3a2fd7154cfe4feb5c1a8d36c8bee52a61aeab9c1413d6dfb8ecc6f80ed906dcc8a678ece0b6b02cacd216114db3ab73cc9fd6b4e507b4ab77f6d001e17ed8fa37a26f7af8d469de658749732d550cf8d0eea69db77647e236c876c63563c73755e5813506e2e09a3d8d63be649409d654ab77f6d041e17ed8fa37a26f7af4d469de65a7497321f403d3739a8a76ddf91f94dc023d3d5c0e32a2e038327b0e823d393643c9dc978c692f10c25e3b9878ce726329e5e643c93c9788ac9781e26e31944c6732719cfb5643c5790f13c4dc6d3958c673c19cf30329efbc8786e21e32923e3798c8ca7948c673419cf60329ebe643cd793f13c4bc6d39d8ce752329e89643c0f91f11492f1dc4fc6f30119cf71643c6dc8786e23e3b98a8ce709329e4e643c55643ce5643cfdc878ae24e3b9918ca72719cf23643c45643c23c8781e20e3b9838ca73919cf35643c4f91f17421e31947c6d39e8ca7828ca73f19cf7c329e9bc9787a93f13c4ac65342c6338a8ce741329ebbc878ae23e379868ca71b19cf04329e8bc9782ac9780690f1e491f1e493f17420e3b9958ca70f19cfe3643c1dc978c690f10c21e3b99b8ce706329e1e643c93c8788693f10c24e3b98c8ce778329eb6643cb793f1e410f02482c3dfc54bc0eff3c126ef8ccd05db873abf016ccd2c3ee459c426b0e5eabcaca35598ae2d387cdda893abf7e4d05719cc8bbf3ce0f89084e776329eb6643cc793f15c46c633908c673819cf24329e1e643c3790f1dc4dc633848c670c194f47329ec7c978fa90f1dc4ac6d3818c279f8c278f8c6700194f2519cfc5643c13c878ba91f13c43c6731d19cf5d643c0f92f18c22e32921e379948ca73719cfcd643cf3c978fa93f15490f1b427e31947c6d3858ce729329e6bc8789a93f1dc41c6f30019cf08329e22329e47c8787a92f1dc48c67325194f3f329e72329e2a329e4e643c4f90f15c45c6731b194f1b329ee3c8783e20e3b99f8ca7908ce721329e89643c9792f17427e379968ce77a329ebe643c83c9784693f19492f13c46c65346c6730b19cf7d643cc3c878c693f17425e3799a8ce70a329e6bc978ee24e31944c6f330194f3119cf64329e5e643c3791f1dc43c633948c672c194f67329e27c978aeb6f0cc77c4638e9b20f3f3097cabf9eea08b9a12f03b7e67fd03478cf30d4699ff001891d7b5666d0c9e36866647d3b7aabfbcab23f7c0717be17be70cdbab4d0368d6d6e0696b6876347d2b2de4d9b6bc3388db0bbf53cbb0bdf0bd6a07ed7369c2e051538e315f06f94d8ef57154cf427ceffa9b18d7abb4da6c6835dfd02a1fca6c04fd363bd02f07fccaba655efc7966cf1cc5ac78a42f89ed7b00fd4818c586e3627c143f4f69c2e05153baf6f123c7fa38aa67b21ddb12d875ff0874973218ab5b1cd43307fccaba657e8bc5774110af165beba0c5560bcfd606d642fc65cabc310b991974563cf2ae81b026a05c7f1246b16d069e6df1f394260c1e35a56b1fb739d6c7513d936dc2f6c0aefb36d05dcae0feb5dd413d73c0afac5be6b7c376c884794b16327b9debc7ac78e41d6d614d40b901248c62db0a3c3b62e7292e4c183c6a4ad78eed70ac8f9b7aa6dab19d815df71da0bb94c1fd6ba7837ae6805f59b7ccef84ede0993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999b59f10cd479614d40b981248c62db0e3cbb62e7493d77401e35a57beeb0cbb13e6eea997aeeb03bb0ebbe0b74973218abbb1dd43307fccaba657e376c07cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6ccdccc8a6790ce0b6b02ca0d226114db4ee0d9133f4f69c2e05153bae70e7b1cebe3a89ec9e70e7b03bbee7b40772983b1bad7413d73c0afac5be6f7c276d8eb993db38559f10cd679614d40b9c1248c62db0d3cfb62e7493d3f451e35a56bc7f639d6c74d3d53edd8fec0aefb3ed05dca60acee7750cf1cf02beb96f9fdb01d3261de9285cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7b9e9e8ac78ca755e581350ae9c84516c7b81e740ec3c25850983474d39c67c19e40f38d6c74d3d53cf1d0e0676dd0f80ee5206f7af830eea99037e65dd327f10b6436367de9285cc3e361a86d9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a398196243f154e8bcb026a05c0509a3d8f603cfc7f1f394260c1e35e518f36590ffd8b13e8eea99ecb77328b0ebfe31e82e6570ff3ae4a09e39e057d62df387603b7866cf6c63563c953a2fac09285749c228b683c0f349fc3cc50983474de9dab14f1cebe3a89ec976ecd3c0aefb27a0bb94c158fdd4413d73c0afac5be63f85ed906dcc8a67b8ce0b6b02ca0d276114db21e0711077499e7c8347e63f21f0ade6ab743e4fffc7ed55058c0cdb2bbf01346b63f0b431343b9abe55fdc7eafc71fa3f6eafb1c0c8b0bdda3480666d0d9eb6866647d3b7d2629cce1fafffe3f61a078c0cdbabad5b9ee284c1a3a674e71b9f02cf77e3e7495ec77d9a01cf7781e73bf1f31439aa67a15aeff7803daef52aad3e33b4fad4d02a1fca20c3670ef4cb01bfb26e99177f9ed9334731635b28ac0928f70909a3d8be033c2eda0d55f72bf4ba64fd2dc2f4c3136bfcbab8bf86f7165aeaf50a87f8cb853267b7ab61fba966cb83df65bba9fa1c346c8ede792bb2dde79579f19717d8aff55ddd438dbaf77010780e5a34db6fd16c9f23c6fd06a3ccef0346db7ddefd8e78a2ee3b8b3f6c330e926a86ef011f001e57e7c55171e67a9fcbf4fcf28085e79bf8780a3136d0978b58c5b6ad2e75b7ed3b31d6bd089f61a12f07fb40f238d541af4bd6af8e05ff75a253cd4bb17d90e35407a3ceb950e6bfcfa961fb3f698e53cd82c3ef0b1768bb9491dfbfd176731d057add32df5dffc738119b3f06d67e8ed8ddd0924d33dcb73eb6e8d8c3c2dd83801be3b121b675d4bd0fdcd63d0c1dd934c36dfd8945c79e16ee9e04dc8cfb754f434736cd8eb45ff7b370f723e066dcaffb193ab26976a4fdbabf85bb3f0137e37edddfd0914db323edd7032cdc0308b819f7eb01868e6c9a1d69bf1e68e11e48c0cdb85f0f347464d3ec48fbf5200bf720026ec6fd7a90a1239b6647daaf075bb807137033eed78383da3ab26976a4fdbadcc25d4ec0cdb85f971b3ab26976a4fdbac2c25d41c0cdb85f57183ab26976a4fdbad2c25d49c0cdb85f571a3ab26976a4fd7ab8857b380137e37e3ddcd0914db323edd75516ee2a026ec6fdbacad0914db323edd7632ddc6309b819f7ebb1868e6c9a1d69bf1e67e11e47c0cdb85f8f337464d3ccb65f3bea5f96713fe48f9dea931a7f3693f7b0b02f898b98721407858efa9a24fb21ef33b4fad8d00abfebbf1ff473d5272baadf98f8f3cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfcccf8cef79e2f31529d710ef00d785516cf84ccac57d7e55f72bf5ba64fd2dc274fbc9357ee37f6e519c7c0e20facbfb98571a75ce8532dbcfae61ebabd9f0f9223e17b56dcbfdb1d7a16eef9ce37bfaf82ce8683eef3c60d16c9f45b3bd8e18cd3643e6f702a3e8b70f785ced8ffb0d1ed3b7eddd7036cda2da5957711f156736df05b1f92e1eeae65b08c585ea1b6dc70487b7275207dc775dc461a6df04c0fdc2c173f72257efffab3aed35ea74d0a8533e94b918eab9d7413debba6fc97435f0b86a8f028327b0e8235333329e27c9783a93f18c25e3194ac6730119cf3d643ca791f1dc44c6730c194f2f329ec9643cc5643c0f93f10c22e36947c6732719cf89643cd792f1e492f15c41c6f334194f57329ef1643cc3c8782e22e33944c6733919cf7d643c6790f1dc42c69320e32923e3798c8ca7948c673419cf60329e73c978fa92f19c4cc6733d194f4b329e67c978ba93f14c24e3b9948ce721329e4bc8780ac978ee27e3398b8ce736329ee3c878da90f15c45c6f304194f27329e2a329e72329ef3c978fa91f19c4ac6732519cf8d643cadc9787a92f13c42c65344c633828ce701329e73c878ee20e339818ce71a329ee6643c4f91f17421e31947c6d39e8ca7828ce742329efe643ca793f1dc4cc6732c194f6f329e47c9784ac8784691f13c48c65340c6731719cf49643cd791f1b420e371fd1e60a63ccf90f17423e39940c65349c6733119cf00329e33c9786e25e3c923e3c927e3e940c6d3878ce771329e8e643c63c8788690f19c47c6733719cf29643c3790f1b422e3e941c633898c673819cf40329eb3c9782e23e3b99d8ce778329eb6643c39043c89e0f06f31e1f7bf0e826dafcee3b7059b59d627cf85a5bc3a0edd5a70f8ba9b59d6bdcfc2803aed096aea52a6f385df6e4aea84beca605efce501c73e129eb6643cc793f1dc4ec6731919cfd9643c03c9788693f14c22e3e941c6d38a8ce706329e53c878ee26e3398f8c670819cf18329e8e643c8f93f1f421e3e940c6934fc69347c6732b19cf99643c03c8782e26e3a924e39940c6d38d8ce719329e03643c2dc878ae23e339898ce72e329e02329e07c9784691f19490f13c4ac6d39b8ce758329e9bc9784e27e3e94fc67321194f05194f7b329e71643c5dc8789e22e3694ec6730d19cf09643c7790f19c43c6f30019cf08329e22329e47c8787a92f1b426e3b9918ce74a329e53c978fa91f19c4fc6534ec65345c6d3898ce709329eabc878da90f11c47c6731b19cf59643cf793f11492f15c42c6f31019cfa5643c13c978ba93f13c4bc6d3928ce77a329e93c978fa92f19c4bc633988c6734194f2919cf63643c65643c09329e5bc878ce20e3b98f8ce772329e43643c1791f10c23e3194fc6d3958ce769329e2bc87872c978ae25e339918ce74e329e76643c83c8781e26e32926e3994cc6d38b8ce718329e9bc8784e23e3b9878ce702329ea1643c63c9783a93f13c49c6d38c8ce76a83077f57e7d6f27ed85eb0c9efcfeac6ab8d5e9794916722eaded26ec3a6eabbcb517d7707355319ccef82fa0afb6ee0d9ed88678fc163face837c0fd06ca761538c3b1c31ee3418657e07308a7e3b8167a7239e5d068fe93b0ff23d41b3ed864d316e73c4b8dd6094f96dc028fa6d079eed8e7876183ca6ef3cc8f703cdb61a36c5b8c511e3568351e6b700a3e8b71578b63ae2d966f098bef320df1f34fbc8b029c6cd8e183f3218657e33308a7e1f01cf478e78b6183ca6ef3cc80f00cd3e346c8a719323c60f0d4699df048ca2df87c0f3a1239ecd068fe93b0ff20341b38d864d316e70c4b8d16094f90dc028fa6d049e8d8e7836193ca6ef3cc80f02cdd61b36c5b8ce11e37a8351e6d701a3e8b71e78d63be2d960f098bef3203f18345b6bd814e31a478c6b0d46995f038ca2df5ae059eb88679dc163face837c3968b6dab029c6558e18571b8c32bf0a1845bfd5c0b3da11cf1a83c7f49d07f90ad06ca561538c2b1c31ae3418657e05308a7e2b8167a5239e55068fe93b0ff295a0d972c3a6189739625c6e30cafc326014fd9603cf72473c2b0c1ed3771ee48783664b0d9b625ce28871a9c128f34b8051f45b0a3c4b1df12c33784cdf7990af02cd161b36c5b8c811e3628351e61701a3e8b71878163be25962f098bef3203f16345b68d814e302478c0b0d46995f008ca2df42e059e8886791c163face83fc38d0acdab029c60f1c31561b8c32ff01308a7ed5c053ed886781c163face837c5fb0096f11d8ded7f962b0cdd7f912b0cdd3f952b0bda7f31dc1f6aece7702db3b3adf196c6feb7c17b0bda5f35dc1f6a6ce7703db1b3adf0b6cafeb7c6fb0bda6f365607b55e7fb806daece5f05b6393a7f35d866ebfc35607b45e7af05db2c9dbf0e6c3375fe7ab0cdd0f91bc0365de76f04db349dbf096c5375fe66b0bdacf3b780ed259dbf156c2feafc6d607b41e76f07dbf33a7f07d89ed3f93bc13645e7ef02db489dbf1b6cf7eafc3d60fb54e7ef03db7774fe7eb07d57e71f00dbf774fe41b07da6f343c0f67d9d1f0ab67fd3f96160fb81ce3f04b61feafc08b0fd48e71f06db8f757e14d87ea2f3a3c1f6539d1f03b69fe9fc78b0fd5ce72780ed173a3f116cbfd4f94960fb95ce3f02b6cf757e32d87eadf38f82ed373aff18d87eabf38f83ed773aff04d8bed0f927c1f67b9d7f0a6c5feafcd360fb4ae79f01db1f74fe59b0fd51e7a55d53edec9f74be2088b79dfd3aa8990ac0b7f85365feacf3ad8c32b26c2e9429d51ff451cf38d4b74ca51d967659d9a41d7e1f6cd20ecf079bb4c3f3c026edf07b609376f85db0493bfc0ed8a41d7e1b6cd20ebf05366987df049bb4c36f804ddae1d7c156a6f3af814ddae157c126edf05cb0493b3c076cd20ecf069bb4c3af804ddae1596093767826d8a41d9e01366987a7834ddae169609376782ad8a41d7e196cd20ebf043669875f049bb4c32f804ddae1e7c126edf073609376780ad8647ff91a6cd2368f049bb4cdf7824ddae64fc1266df377c0266df377c1266df3f7c0266df3676093b6f9fb6093b6f9dfc0266df30fc0266df30fc1266df38fc0266df38fc1365ae77f0236699b7f0a36699b7f0636699b7f0e36699b7f0136699b7f0936699b7f0536699b3f079bb4cdbf069bb4cdbf019bb4cdbf059bb4cdbf039bb4cd5f804ddae6df834ddae62fc1266df357607b56e7a5ad6e0d367956aca6c26f39e1383ccdc097309505f1b6fd389541fe19a8bb4cd3c878c692f1bc41c6730119cf72329e65643ca791f17c48c6b3898ce718329ebd643c7bc8785e21e379978c6710194f3b329e13c97872c978ae20e3a926e3798d8ce722329e43643c9793f19c41c6b3918c670319cf52329e25643c09329edd643cbbc8783e20e39949c6f33619cf60329e73c9784e26e36949c6d39d8ce752329eb9643c9790f12c26e35944c65348c6731619cf7a329e75643cf3c9788e23e36943c6b3938c670719cf74329eafc978aac878de24e32927e3399f8ca71f19cfa9643c5792f1b426e3e949c6339b8c672119cf02329ef7c878ce21e3594bc6b3868ce704329eed643cdbc8789a93f14c25e31947c6f33a194f7b329e0a329e0bc978fa93f19c4ec6732c19cf14329e59643cef90f1fc818ca7808c673519cf2a329e93c878b692f16c21e36941c673808ce755329e4a329ef7c9780690f19c49c69347c6934fc6d3818c672419cf0c329eb7c878ce23e35949c6b3828ce714329e8fc8783693f1b4d2ff59787a90f1cc21e3194ec6338f8c672019cfd9643c9791f11c4fc6d3968c27878027011c01d8e4f7e660fb4ae70f814dbed773006c5fea7c35d87eaff3cf82ed298bad99854f18be029bbc6bfd34d8e4fecc97609377387e0f36392e8a7f35dfb7e070fe66b08cf8696ee1477fbfb770491eb7b72c5316c4bbbdd1575970f8f794f280e369129eb6643cc793f15c46c6733619cf40329e79643cc3c978e690f1f420e36945c6b3998ce723329e53c8785690f1ac24e3398f8ce72d329e19643c23c9783a90f1e493f1e491f19c49c633808ce77d329e4a329e57c9780e90f1b420e3d942c6b3958ce724329e55643cabc9780ac878fe40c6f30e19cf2c329e29643cc792f19c4ec6d39f8ce742329e0a329ef6643caf93f18c23e3994ac6d39c8c671b19cf76329e13c878d690f1ac25e339878ce73d329e05643c0bc9786693f1f424e3694dc6732519cfa9643cfdc878ce27e32927e379938ca78a8ce76b329ee9643c3bc8787692f1b421e3398e8c673e19cf3a329ef5643c6791f11492f12c22e3594cc6730919cf5c329e4bc978ba93f1b424e339998ce75c329ec1643c6f93f1cc24e3f9808c671719cf6e329e0419cf12329ea5643c1bc8783692f19c41c6733919cf21329e8bc8785e23e3a926e3b9828c27978ce744329e76643c83c878de25e379858c670f19cf5e329e63c8783691f17c48c6731a19cf32329ee5643c1790f1bc41c633968c671a194f330bcf21473c72ac9475cbfc2102dfea3d5cb917bf57ff4fc0ef387e73b523c64306a3cc5703a3d8f6004f77473cbb0c9e5d162d8e966fa5857cfb63b7fe9f80dff17b85ae62aabbc128f3b698da053c3d1cf1ec30787658b4385abe9516d2f751fa9024e0771c0fcf554cf5301865de1653389e6b4f473cdb0c9e6d162d8e966fa585f435943efc09f81dc7bf7415533d0d4699b7c5148ed7d5cf11cf1683678b458ba3e55b6921ef9ec93bcb09f81dc713721553fd0c4699b7c5148e0fd1df11cf668367b3458ba3e55b6921df92906f2225e077fcbebfab98ea6f30cabc2da6f0fbc8031cf16c32783659b4385abe9516f2ad3ab9664fc0eff87d5b573135c06094795b4c6d029e818e7836183c1b2c5a1c2ddf4a8b413a2fcfe012f0fb2060741553030d4699b7c5d406e019e488679dc1b3cea2c5d1f2adb418acf3d2273301bf0f0646573135c86094795b4cad039ec18e78d6183c6b2c5a1c2ddf4a8b729d97770613f07b3930ba8aa9c106a3ccdb620ac7df2d77c4b3cae05965d1e268f9565ac8bbf7abf5ff04fc8ee3710e76c4586e30cafc6060141b8ef756e1886785c1b3c2a2c5d1f2adb4906f69c9371813f03b8e8fe52aa62a0c4699b7c5148e7752e9886799c1b3cca2c5d1f2adb418aef3cbf5ff04fc3e1c185dc554a5c128f3b6985a063ccb1cf12c31789610f9565ac8bb70d2872d01bf5701e372478c5131b51c18c5b604789638e25964f02c22f2adb4906739f2ce45027e1f0b8c4b1d3146c5d4526014db22e019eb886781c1b3c0a2c5d1f2adb4906fc72cd4ff13f03b8ed7bec811e3588351e61701a3d81600cf02473c51f7f01ac277d4fda886f01d756fa5217c47dd276808df51f7d81bc277d4f55b43f88eba166908df51f7191ac277d4397d43f88e7abedd10bea39ed53684efa8e78e8d7dfff6c792a6752c399aed5a533d96f8f69cb33d1f17bfefe24450fb9a464d39c67c19e4f1fa65a1032d1cd5b310af09bf8971bdb66bf8058656f95006af515d5dff8d3378645efc652333c6454e7cbe0b13e043de515636b9d7f23ed8e41ec77cb0c93d907960937b68ef814dee67bd0b36b9dff50ed886ebfc48b0c9bd4bec8f24f736b781ad5ce7b11fcc609ddf0236794e84fd2fe459df66b0c9f35a7cee2fcfdc37814dfa4de0f366e9fbb2016cd27f099f734a1fb47560937e84f87cad5ae7d7804dc694c0e73a5feafc2ab07da5f3f83c41c6ea5c01b627757e0ad8bed0f9afc1f684ce2f00dbef741eeff93caef363c1f65b9d7f1b6cbfd1f9b7c0f698cebf09b647757e2fd87eadf37bc03659e7b17fe8e73abf0b6c8fe83cf64bfc95ceef00db2f75fe0db04dd2f9d7c13651e75f03db2f74fe55b04dd0f9b960fbb9cecf01db789d9f0db69fe9fc2b60fba9cecf02db189d9f09b69fe8fc0cb08dd6f9e9601ba5f3d3c0f6639d9f0ab68775fe0f60fb91ce8f035b339d5f0436f97e32ded395771697804dc629c17bf5f2ad922ab0c9f87bcbc0d65ae7f1b98cbc97341c6cf26dfb4ab0c9fbff1560933192cac126e3380d069b7c0b6c10d8e47b6503c12663960e009b8cabda1f6cf2ede27e6093f7297b824dc608e90136f98e4a77b0c9d8773826b07cefb21a6cf24e108e132cdfddff126cf26ef9576093f19b704c60f9c6d59360937149bf00db393aff04d8e47dcddf81ad40e71f07dbb93aff5bb09da7f3bf019b7cbff231b0c93b358f824dbea3ff6bb0c9bbd993c176b1ce7f0eb64b74fe11b0c977887e0536192bf697606baff393c026efcc4f04db153aff0bb0c9586713c026df57fd39d8e41b5fe3c156a4f33f035bb1ceff146c253a3f066ca53aff13b075d4f9d160eba4f3a3c0d659e77f0cb62e3aff30d8baeabcb4336a7f56fbf9413d5f16c4775ea6fc7d1cd49ed25d1b0803f2c479ae9d0f3ce86b7fec752f4e9ed7cb7edf4caf5762683ff8de1bbbefd435c53ebdae167abd7b0ddfb950e653dd88e0f573ae5eee80b11c969175cbfc95b0ec1e63dd6d747df739aaef5e8349b8f7019394f9ecec9ab24fe8c6b2352c13235bf2fa58622d000d712a83bc30b8d1aab810cf7bebc2b30f78e2df4f52d7eb2e6202f7adb8afd7cd7b4c66ace54399bda0df1e07fae1be2eeb9679f1e7993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999f59f1c8f3047cae2ce50e92308a6d3ff0ec8b9fa7109fc3cafad5739d07e0b9cefed8fdd67ebed752afb7d0a8732e9459794e0ddb109dcf83df65bb456dcbbdb1d721fdb6147f79509f7dc0e3605b2679f61b3ca6ef3c8b3e4ab33d16cd763b6234db0c99df0d8c7b757e0ff0b8da1ff71a3ca66f6c33f6916a16d5cebae897902ece6c7d100a62f35d3cd4d5735dd5674af5e5308f5f070d4db10f84d8f039781e2cf389fe9f007d3e017d8e661b60f64bc076ea6360dc1b3b6371ad67c0d2f65f69688a7d205ed4da4a1f88f8db81e24297c708d947cdbe15585729331d8e7333751efb011d8475bd67f95da61c63be0cf2d8a6ee8cbfcec9ed2bfd5765fbeeb4f8de0eac31f9aef52e478e4ee247ecb9907ff79c9ab2524ef410ad851dc7ad427673b98f8de5f2a1cc2e4bfdcb8278ebbfd3e0d96930abd8990d71f61e9cebb96a937645687425682465f09cd7419f226b1b291ce24f9591eddfca2883e7a7526611b451aa2ed2ce4b3db11f131e035c9d2f1c34ea27f378be603ba731eba8e2e3f6936b785d5f0b340bec5ab3f4f5db04edc51ef8bd2cf8f67dfd36410cd9ce4b65fd85b07ee16a15441f5ba4cc16e338eae27a12b7a5a9e73e6092323ba01dfa1ff5b8ae3b5ad7e851d775bb1cf0e0b5864ce98eef788c71d1be38aa67a1edd8b5c7a8533e94b918eae9e03c26ed3ba93bc1b78b6d8e5ac839d45e438b5c28f37da3ed88d251d681f701dcd6a5d87a3e5868a98b94f989d14eed70c0e472bbe179965aef7e4b5da5cc2fa1fdfb1ccee7f7eadfb12dfdabe57799d2b507f84df9adf1d739b97de5fd46d9be5b2dbe3f02d6987cd7fa26859cef8b1fb1e742fe2f70fc9672a287682dec6a1f91f73b91dd5c6eafb15c3e94d966a97f59106ffdb71a3c5b0d66153bbf8538fb2b9cefbb6a37b7456854081a49197c5660de6fc17b2778dc6fa8eb02993f008c62db09fafe0fa7f7cb536c070c36f37eb9ed7cb0d0e0c7f3c1ff05ed6cc252d6fd7380d4b90dd64bea1118750d8cba3a3a7f2dcd31f42c033f1dc0be57e74567f90dcf71a54c4ebbd47f77f7af6adfc7166ea9073eafdb6d70ef3174c57b512d815bc5bd796d81e7e98eaf694bf15ccc3c1fda0dec52260fd86de771872c75318fd3cd82c3af05bf31cae27576bae5ccfc016319bc67b0dfc2646bfb627b2fa7a8b0d0e4b7b57b070d669baeb21f60ccc9bacc7d05cf87a4cc99b0dd1296b2aa4dfaaf136bf491ed88f7da6df7595c1d2fa2eeb3883fc5687b67d2c5338ca6f86e5aebd8d6dbb5dcf69c8dbd3f436b231f8fefe20a3c56a4d362b785c7d53dcd282d765b7cc7a745a7a1b676cea6c52e0b8fab6bcc282d76597cc7a845a5edde824d8b9d161e57d71a515aecb4f88e4f8bceb5ee6ba4d362878527fe7b1ae9b5c067629930ef22606e6de4e3f15d5a6e7b7667d362bb85c7d5b3bb282db65b7cc7a7455127db35bb4d8b6d169e6d0dacc5368beff8b4e8d2d5764fc5a6c5560b8f83fb6b69b5d86af11d635c0cc3fb6be9b4d862e1d9d2c05a6cb1f88ef1fcb053ba7b86a8c547161e57f7fea2b4f8c8e23b462d8628df9beba0c5660bcfe606d662b3c5777c5a947754be3fac83161f5a783e6c602d3eb4f88e4f8b215d94ef4d75d06293856753036bb1c9e23bc66ba8645c6cac83161b2d3c1b1b588b8d16dff16951913cd7da50072d3658783634b0161b2cbee3d3a230794c5d5f072dd65b78d637b016eb2dbe638c8be4f5e4ba3a68b1cec2b3ae81b55867f11de3712419176beba0c55a0bcfda06d662adc5777c5a5426ef3fada983166b2c3c6b1a588b3516df31de7349c6c5ea3a68b1dac2b3ba81b5586df11d9f1625c963eaaa3a68b1cac2b3aa81b55865f11d9f16c392cfc456d6418b95169e950dacc54a8bef18cf3b93edc58a3a68b1c2c2b3a281b55861f11de37967f2fec5f23a68b1dcc2b3bc81b5586ef11d63db993cef5c56072d9659785c8d1119a5856d7cca18cf3b935a2cad83164b2d3caec6368cd262a9c5778ce79dc9e3c8923a68b1c4c2e36a2cca282d6ce360c61817c9b673711db4586ce159dcc05a2cb6f88ef1be56b2ed5c54072d1659785c8dcd11a5c5228bef18af4792f7f816d6418b85169e850dacc5428bef189f1525cfc117d4418b05169e050dacc502f0bd2f76dfa9fedce243fa625d6168910b65be6bf4c58ad251d681efd0625daa63af4baa5fd9071175a986ba48991f1a7df93e70c0e4a8aec998795faf4bfaa67f6ca9ab94f959bb9ab2bfd0f9046c9343b0ae3f597e9729c7982f83bce8a7ea3c2ffe3a276355c60192ed3bcfe2fb5d608dc97711faced149fc883d17f25fb7ab292be5440fd15ad8d53e325fe791dd5c6e81b15c3e94996fa97f59106ffde7193cf30ce6e47b0f106712476edaae14d3fc088dae008da40cf6d93be488e763834738c45f4e70f8bba8524696c57751ff61f4db957e9052cfa83e92ef3baa5f541f49f117f52eaa5947151f3f84be9f322e888c19a26c32064809aca7b3615375ede2a8aee24bd62df35d8051c624e9dcf08cc57565ec64302a9e6e0e34c37156644a77bce8063c5d1df038aa67f238d4dda85317a34ef95006df6deceea09e39e057d62df3ddc1b78b6d8e5ac831f952438b5c28935790fa2fe78f513aca3a54fc76b6d4c5958e9d0c9e4e16dfbd1ceb28eb9636b15703f8ee61f8ee68f856fb36c6989ad2eddb3d80b9a70366b5dedef1afb710cf19259ec54f47a8531fd020ae3ae1bae41cb38fa16d2ee4cf2fa8292be5a4ac1c3b855ded47b22d91dd5cae9bb15c3e94e965a97f59106ffd7b1b3cbd0d6675de705a410d8783fd211903bd0c0e99ef08daf58ed0ae17682765f0d8dbc991763d0d1e99ef043c727ed51d6c729e22fc09f8bda401b8cd76afbb855b6c381e61270b63c7f8198bd31d173a02a3d87a024f0f479a99dbfa52431f3c27686594916573a14c9782d47f7957cb2cabf6bb73736aead55cdb637b6f4db7e92d1de885e38106a04f6068289330b40e6ac60c8d93e7d8a0664cd00913abc60f7968d85dc3528f3d052dd7c0c4ff39966a34031be69b5b6c41507be8d35cb0c9d0a72dc0d6cc9005875c95f23274a20bb9500f5977aec1d91a58e2f48dc3c6ca942e745a018f8b5056a12343c7ead0b977fc8889c3303e5a189cf5891df55bf334e5a2d6257190eba0eec824eb9679f1a7f4c9d7f9b143868eec33fea149a3878d99380161cd9d0bf3398608e67fdb321824b833c97a5a18e21c1bbf38a53846b1c917803f9984a17550338e718c3cc94095b186870e1935ea8e49e5a3460cbd6ed298a11347548d41455b1bca45a92dbfb7049bada9c3b26ac2dd17976d65b1d9261cd5b935d8a4053f066cc2732cd89a435eca9b5bc6c93e7231ac5fc25afda6c469a12bde2aa80901392ca9f645ed43ea33aaea74400d2dad8692569b53ddb1534343abafc8a9a19fd550cf6a68673594b31aba590dd5ac86663e3b480dbdacee5e1604a9a194cf0b5243255f10a48642be08f8be0bcc9704a9d30f359471fb203554b1ba7da85e1f579f5a53efb7abd3587579ac4efdd4a58e3a0d53a75fea345bdd4250b793d4a98d3a6d54a744ea34469d96f7d65af709d35561ba3a4cd784e9da305d17a6ebc37443986e0cd34d61ba394cb784e9d630dd16a6dbc3744798ee0cd35d61ea1ba6bb83d470daf784e9de2035dcf67d416a28eefb83d430dd0f04a921bc1f0c52c37b0f0952437f0f0d52c3820f0b5243863f14a486131f11a4862a1e19a486361e1da4864756c3948f0d5243a2aba196d5b0cc6a086735b4b31a1a5a0d23ad869c564351aba1ac9f085243643f15a6a783d410dacf86694a989e0bd3f3617a214c2f86e9a530bd1ca4866557c3b5ab61dc6704a961df6705a961e2d5f0f16a587935dcbc1a865e0d4faf86ad57c3d9bf19a6b7c2f47698de09528f05d4e310f59840dd8257b788d5639aea2075fb7a61907accac1ebbab6e08aa5b86eaa6b23c48756352ddba543737d5ed4f758354dd42553759d56d5875a356ddca55377bf5da817a0d43bd96a25ed351af2da9d7b8d46b6dea353ff5aaa67af551bdcaab5e6dde1ba46e4def0f528f2bd5ed6a755b5adda257b7d03f0dd37782544c7e2f4c9f85e9fb61fab730fd204c3f0c524346abe1a5d5f0d46a286b35c4b51a0e5b0d9dad86de5643727f1ea486fa564385ff36480d37fe45987e1fa4863cff2a480d77ffc7307d1da63f85e9cf61fa4b98fe1aa6bf85e9dfc3f41f61fa7b98fe11a6ff0cd33f839a61cdb12129d0adcfb97a7ec8c489c3468f9d5830b1aa60f4a45113478c1df558c1e411138717543d326c7ce5a8aac9b8f0eff4c232267b9ff1e3873c5630624cc5b0470baa264d2ca8aa2c28af9a34a6a2d681f4ffea85ce3adce3908a8a686779cdbf05e9f1cdebe7b49d5e4e46bbbf317dddce6b5e0f412ea9cf42b7d4b34277eb23985cf2f54d9d0f164c185535b1a0b0604cf8373cf0564d1e56d1a1007f9b108a3c6162c1848943c64f2ca81c5f35baa0a803aeb7f0d87a5462eeb16e604a4eaf9f389f9c9dfa5faf107be19c7a28b0f09cfa916e3ce75b907e544fa79fd5a7863faecf42ff554fc2a05da42c1326954f1c3f64e8c4e8855b7c9b8513edea51cd33dad5af9adfa98fb31fd467a1bfd7933051500f679d0beaee2cf8ffd731cc2cb0020600", "isInternal": false }, { "selector": { "value": 2603445359 }, - "bytecode": "0x1f8b08000000000000ffed9d69741cc5b5c77b24595e46832d5bde37b1056fb246a3dd968d8cf70dcc8e018317c960b02d638b7d271b092121fb4202bcac2421fbbeef09d9f7852424908484247c7839efbdf3ce791f38afaa5537fa4f51dd6886be72b5e6f639d7537d55d3f7776fdfaaeea9aa6e3f1304412618daaa959c143c77a3bff79acffc0bdb5a123c569e93339312ceaa947056a784b326259ce352c2599b12cef129e19c9012ce8909726ab6aaa0784b9a7712435c9366cca62ca6752988692e65313d2105319d1ca4a38f9a9212cefa94704e4d09e7b4947036a484737a4a3867a48473664a3867a58473764a38e7a484736e4a38e7a584737e4a3817a48473614a381b53c279624a384f4a09e7c929e13c2541cec5c079aaf97c91f93ccd7c2e329f547789f95c6a3e97191f6bcc7e9392e54a9a359ff5373dd15050d2aaa4cdfa5bbb920e259d4abaccdf1acddfba95ac50b252498f92554a562b39ddc4628d923394ac55b24ec97a251b946c54b249c966255b946c55b24dc97625672a394bc90e25672b3947c9b94ace5372be920b945ca8e4228b65a7928b955ca2e45225bb945ca6e47225bb95ec51b257c93e257d4afa95ec577285922b951c50729592ab951c547248c96125034a8e28b946c95125c7940c2ab956c9754aae57728315b31b95dca4e46625b7589cb72ab94dc9ed4aee5072a792bb94bc58c94b94bc54c9cb94bc5cc9dd4a5ea1e4954aee51f22a25f72a79b592d728b94fc96b95bc4ec9eb95bc41c91b95bc49c99b95bc45c95b95bc4dc9fd4ade6e58a821bc43c9034a1e54f29092ff50f24e25ef52f26e25ef51f25e25ef53f2b092f72bf980920f2a7944c987947c58c947947c54c9c7947c5cc927947c52c9a7947c5ac967947c56c9e7947c5ec917947c51c997947c59c957947c55c9d7947c5dc937947c53c9b7947c5bc977943caae4bb4abea7e4fb4a7e60c5fc874a7ea4e4c74a7e62fe46e34b3f55f23353feb9f9fc85f9fca5f9fc95f59d5f2bf98da57b4cc96f2dddef94fcde941f379f7f309f7f349f4f98cf27cde79fcce79fcde75fcce753e6f3afe6f36fe6f369f3f977f3f90ff3f94ff3f98c92fe86a1f2846078eb0d12ea93dafafbf4dc0405fbd4a078d3b1a8367fa3cf46a3af31fbf449b11b67f6c759fa5ab35f6b1d6782d99f60e9ebcd7ebda59f66f6a759fae9667fbaa59f69f667823e1bc018a5d16b5db551654047795805ba7141714cb4ae960e07baf141712cb48ece632de8261add78d04d32ba09a0cb1add448a99923aa3eb0d92ca89fc1e7ddc5cd2c735f3362724cfbb4f1f773213ef94e479fbf571eb1978757e4c35c79a027933cde8ea4167ba95602ae8a61bdd34d0cd30ba06d0cd34bae9a09b6574334037dbe866826e8ed1cd02dd5ca39b0dba7946370774f38d6e2ee81618dd3cd02d34baf9a06b34ba05a03bd1e81682ee24a36b04ddc9467722e84e31ba934047fde7c9a0a3fbbb538c4ef7093519f88ed1537f147e87fa5cd09d46fd2de816515f0bbac5d4cf826e09d826dd52e84348b7cce8a83fd27feb32e5de20a9fc2ff4e9e376277d5c75647ddc95c91f379cd3ea0986e3da0b76ba2156ab4c39c175332d683b6384ec90be06ca1ba12ed5a378d03585d8f5b5638529af8af95e97f5bd1cd459e1f0bf3748d6ff9516cf4a8b791cf8cf93b3ad2d92b323de4aced9f3a1ae9d7b747f331673760b7030e46cbbe4ec88b79273761fd4b5738fee71c762ce5e041c0c39dbcd93b385bce4ecd0585710b8738f7ee78cc59cdd0f1cc9e76cbbe4ecc8b79273f676a86be71efdd61d8b393b081cc9e76c67b7dc1b8c782b3967ef85ba76eed1b8cb58ccd9bb80832167fba49f1df15672cede0f75eddca331c0b198b3f70147f239dbcd94b3ad92b3c1d0bc6510b8738fc6a3c762ce3e001cc9e7ec3e199f1df95672ce7e06eadab94773236331671f018ee473b68f6b7cb620393bb45e2308dcb947f3746331673f6fca7a6eece7666e6c01e87e61740b41f74b586740ba5f19dd89e017431be8943630e2ade436f06ba86be7f249a63c16dbc00f80832167bb256747bc959cb34f415d3bf768fdc258ccd9df020743ceee959c1df15672cefe17d4b5738fd6d28cc59c7dda94f5fdc2e3e67e6111e8fe60748b41f747a35b02ba278c6e29e89e34ba65a0fb93d13581eecf46b71c747f31ba66d03d657479d0fdd5e85a40f737a32b80ee69a36b05dddf8dae0d74ff30ba76d0fdd3e83a40f78cd1751a9d9ec7a235558f1add04f0bd3748eedc86eba882e22d63edf74279192f4f3e17143f2740b696276fab55fbde148cdcf7e5c0d3cce07b166c8c84a71978f2c9f384bf475b923f6e788e9bac9866c15613f85560f02b03b6e8d8b44ff672a0c37ea3e0606c4d9eb190015b746cda6f0546d2613f46cfe150fbd17df3bccc302f435b0aafcf68af1738c85e0dd4c9340cd76d346c75f077ea03eaa08cfd7cded231e56a982bf870562fecb70023f9981f7dc6c248199b2d46ae7e2303b6e8d8b6ed3a477c74cc5a1d316b63626cb51869bf0d18297eada3cf581829a3dd2f30f5492d23ed93282ef9d18fd988ce6b0e7478afd7e6606c4f9e313caf6d1623edb70323e90ac0c3753d8c6aafbed8e6b80fc17ca66b165d7fc85e0dd469ad1eaebb09aea70c7d68a1d47b53ecd3933f4f853c5ecf46c2c37cee5a98f2318f7de7b341b2b966b7f9bc152b6cf3d89773f593517d39d91366611666611666611666611666611666611666611666611666611666611666ff99a3e6e55ceb198e2723e95a8087639c3f7cf7943916ce013d06f33ac9cf5b14f238574feb1817593ed7409dffcd0cb33dee58278173e7cb2d1dd33aa5f05ce23aa55ed8277bb86e03d74d31ac3d0979965a3cb6ed3a477c7c5c47e2d31a8da8755a3ec52c073a5c0fd7c4c41395674d0edb8d89d92eece3693b85bc7ecf8f7e571ef527761bc1b56f4b2c9dee933aaa87fde6c88152e79df1ba41e524e77131dfd056f2eb6d0a45eb13aa82e26b05de5330ac51299aafa6b511ed96ed1aac5315fcfbdc74c0df7b83e7ae11c23a746cda5f04dfedb08e3d99cfdfd8feb01db8a95c6bf9b60cb8a9cea4aa611f3f67ca4cf733055c3f1b006f60f9441baecf48fe7e6f68bd48a1049e36e0e158bbc6745f9bc77c4c7abd4887152bd7fd32d56987f87530c42f6ecd1ad91366611666611666611666611666611666611666611666611666611666611666ff99f1fd17c48acf48b778c2384a6b6cc2f90c7a6f11ce8bdd5f356c977b0e90e69c165b3ee333ca4f570db33d68caf88e00d7f3ee782eb9e6d6a2ce25d9ab0b9efb9c3ed3b91cf1bb1fda1c31eb70c4ac9389d1ee3368bf1318297e1dc0c3d51edb2d1edb36f6196d9ec62caa9fe55abf129567ae750a8d89d91e5a2fc231af4beb45eceb578b15535c27413a9c07c777abe07a2cdfdeff62af5dc07e0ad76825df6f168ae680edb582640fd7497cc3c496d64924df0f14f29cd7086aa3b426a4e0f095ea3c0ad7b9ef9932ae156a81633de6f83b6d716b12b04f65785766787ee9dd8d747ebb1db657026b42b65bd076c608d9217d0d947f53355cd77e1724c59ad8751bb1df57e9fa5edefa5e0eea7439fcef0d92f5bfdbe2e9b69875eefc10f2ec31b8d7e3ea93ba02778c16418ca80edef332ac2972f691f69a695d87ceff78ab0ede9f529d27a18f8a5a93ee7a0f20d7fd42d47b00f17ec1754f63fb68af1daff4f580ff82fea203fede1bbcf0f580ff821c72dd97d2f117c3f1896b7c107d6da13aff635d47b9dad6f3bdf7caf5db8f7871bd21d5f93fe8ab969975b951bf635ccf5970fd6e887aee83ece13d5529be63bf90f4b511f31159c81ee6638d8935e5634704f772c777c7477c976245ebcbf177b21d3f1d87c4df116efa9b6ecb176a535de0cbbfafdfe00bcf3dd3d0fd67f2be16df0f511fd4eaf095ea4c8577c135987216ce13f695273bfe4e5bdcfd27bed7bc27799fc3f34befefa6f3dbe3b0bd1a5813b2dd82b6e9fe93ec90be06ca27550fd7a57a140f8a35b1eb3642f770c86e7fafddfa5e0eeaac74f8df1b24eb7f8fc5d36331ebdc99097976323c6bc1d557af8c88d1628811d5c1671deddffff85b1eaf31c7ebb73cbef313fbf66510d3d17a67aa3d7eebba3f596cc518ef4f5aa09fcd3aeadae3d2740d49727d3a3e0fb414ece2f3404b99e2990b8ae399b338386d4fb66c4f1e45dbf596edfa51b42d319798fb14739ffe2f0cfc3f2baa52c0589d02c69a14308e4b01636d0a18c7a78071420a1827a68071520a18b3c0783cafed0cf12978f6ff3dc5de6ba06d86f73984b158168c3c164dbc3cb1f73e689be11d2a25ff7f03ccff17564bb9ff17560ebe3735058cd352c0d89002c6e929609c9102c69929609c9502c6d929609c9302c6b929609c9702c6f929605c9002c68529606c4c01e38929603c29058c27a780f19414309e9a02c60929605cc2cb58289751f370bc47331b14afe37a3e1ee6f77a86ef2774bd4394e3ff9d2dd577e677fab694fb0e3c5cbfc0fbff28beb0f7f471ac4f28f53d7d71fff7341363a15c46aef526b8b665243cae3528795ec642b98c5ccf77e0f38623e171fd3fb8bccfdb0cc5ac1c46aef558a5ae17c4e7f0da1d3163602c94cbc8b5a61f9f371c098febb9c03c2f63a15c46aeb5af59b031129e2e8859a723660c8c857219999edd0a63d655020f3ee3d4e588190363a15c46cdb3822966dd25f0ac8098753b62e61323f224fdbef16e872d8e67e24af59d189071620a1827a58011d72070f45f716b10ba79e35328373e5ce72b6e0d02da667806238c05aeb97fbe58f4f0f2c4ae4140dbab986281cf443c5f2c56010fc7331a59b031121e62c8c1f7a6a680715a0a181b52c0383d058c3352c03833058cb352c0383b058c7352c03837058cf352c0383f058c0b52c0b830058cf85b95e15e31f6f7cbaa316e3beab7ca58b71df5bb64acdb963c973caf04db92e792e795605bf25cf2bc126c4b9e4b9e57826dc973c9f34ab02d792e795e09b625cf25cf7db29d86317e611c7b8cc8d3981c4f1e7d475ba77be0fbe90e9e0c93ef68abd703dfa99c36c6d529605c91024689e3d01ac4721835cf1a269ede1278d600cf194c3c6b4ae0390378d626cf13e6d41925f010430ebeb722058cab53c028719438fac42871ac9c380aa3300aa3301e0fc634f4e1729d19faed520ea3e659973c4f18b3b525f0ac8398d1f7f2bc8c85721935cffae479c298ad2b81673dc46c9d23660c8c85721935cf86e479c298ad2f816703c46cbd23660c8c85721935cfc6e479c2986d28816723c46c8323660c8c85721935cfa6e479c2986d2c816713c46ca323660c8c85721935cfe6e479c2986d2a816733c46c9323660c8c85721935cf96e479c2986d2e81670bc46cb323660c8c85721935cfd6e479c2986d2981672bc46c8b23660c8c85721935cfb6e479c2986d2d81671bc46cab2366be32ae4801e3ea143032c7b1502ea3e6d9cec4b3ad049eedc0732613cff61278ce049eb392e70973eacc1278882107df5b9102c6d5296094384a1c7d629438564e1c85511885b134c6d353c028e75a187d6564f87d15fb7cca9963dc76d4f32963dd76d4f32963ddb6e4b9e47925d8963c973caf04db92e792e795605bf25cf2bc126c4b9e4b9e57826dc973c9f34ab02d792e795e09b625cf25cf2bc1b6e4b9e47925d8963c973caf04db92e792e795605bf25cf2bc126c4b9e4b9e57826dc973c9f34ab02d792e795e09b625cf25cf2bc1b6e4b9e47925d8963c973caf04db92e792e73ed9de91bced42a9cfb0ee009eb31862c1e4675e1ff76c73ac67138c9f8ed53956acceb46295833a6743fcce61885f06ecd2b1699fec95cafc220f98996c174e50c79808fe938dd5563cb4fd73997c8feaebcf1de3b6a3fafab16e3baaaf1febb625cf25cf2bc1b6e4b9e47925d8963c973cf7c536966b82e1fb767abf923ec679a63cceec53fdd3e17b54a765fcd0e7e440da10876d694372ada804db92e792e795605bf25cf2bc126c4b9efb99e7e7276f3b9c1bc3df177a8b9b1b3b1f78ce638805939f79edd305964fe75a3ee5a00ebeb3f602063f3360978e4dfb17c079481bb3e65965cac49a857aab3c6124dd79bc3c61fb5a15146f71edeb02e06168072d4c7e86edeb42cba7558eb8531dccd50b19fc74b51ddabf10ce43da9873608f58b341f139f5819174e7f3f284edab3728dee2dad785c0c3d1ff30f919b6af8b2c9f7a1d71a73a98ab1731f8e96a3bb47f119c87b4316b9e35f077bd65a1de1a4f184977012f4f5b167ca62dae7d5d043c1cfd0f939f61fbda69f9b4c61177aa83b9ba93c14f57dba1fd9d701e8459985dcc9ae70c5326d62cd43bc31346d25dc8cad396cf82cfb4c5f5633b8187a39f678a7bd88f5d6cf9748623ee540773f562063f5d6d87f62f86f3500af3ea14324b9c25ce51cc1267897314b3c459e21cc52c71963847314b9c25ce51cc1267897314b3c459e21cc52c71963847314b9c25ce51cc1267897314b3c459e21cc52c71963847314b9c25ce51cc1267897314b3c459e21cc52c71963847314b9c25ce51cc1267897314b3c459e21cc52c71963847314b9ccb63d63c6b4d9958b3506fad278ca4bb8897277c7e676d50bc65acfd5e285f0c3c3b19e2c3e467b8eefd12cba7b58eb8531d6c5f9730f8e96a3bb47f099c87529857a79059e25c1eb3e65967cac49a857aeb3c6124dd4e5e9eb01f5b17146f71fdd825c0c3d1cf33f919f663975a3ead73c49dea60fbba94c14f57dba1fd4be13c08b330bb9835cf7a5326d62cd45bef0923e92e66e52984cf21ae0f8ab7b87eec52e0e1e8e799e21ef663bb2c9fd63be24e7530577731f8e96a3bb4bf0bce4329ccab53c82c71963847314b9c25ce51cc1267897314b3c459e21cc52c71963847314b9c25ce51cc1267897314b3c459e21cc52c71963847314b9c2b27ce9a678329136b16ea6df084917497b0f2b486f30e1b82e22d6ede6117f070cccb30c53d9c77b8ccf2698323ee5407dbd7650c7ebada0eed5f06e761ac33af4e21b3e4c6e8304b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e486304731fb901b9a67a329136b16ea6df484917497f2f284ef3dd818146f71eb762e039e5d0cf161f2335cb773b9e5d34647dca90eb6afcb19fc74b51ddabf1cce83300bb38b59f36c326562cd42bd4d9e30926e172f4fd88f6d0a8ab7b87eec72e0e1e8e799fc0cfbb1dd964f9b1c71a73a98abbb19fc74b51ddadf0de761b7300bb38359f36c366562cd42bdcd9e3092ee325e9eb01fdb1c146f71fdd86ee0e1e8e799fc0cfbb13d964f9b1d71a73a98ab7b18fc74b51dda277bc22ccc51cc9a678b29136b16ea6df184917497f3f214b2e0336d71fdd81ee0d9cd101f263fc37e6cafe5d31647dca90ee6ea5e063f5d6d87f6f7c279481bb3e6d96acac49a857a5b3d6124dd6e5e9eb07d6d0d8ab7b8f6b5177838fa1f263fc3f6b5cff269ab23ee540773751f839faeb643fbfbe03ca48d59f36c336562cd42bd6d9e30926e0f2f4fd8beb605c55b5cfbda073c1cfd0f939f61fbeab37cdae6883bd5c15ced63f0d3d57668bf0fce43da9835cf765326d62cd4dbee0923e9b09fa2ad0a18b7333106166360c507791678c633cb339ea99ef14cf48ca7da339ea59ef1747bc6d3e519cf42cf78167bc633db339e82673cd33ce359ee19cf24cf78da3de3a9f18c6799673ca779c6b3d2339e399ef13478c6b3c4339eac673ce33ce369f28ca7c7339e0ecf78e67ac6d3ea19cf74cf789a3de3a9f38c27e7194fad673c3b3ce399e719cf0ccf784ef08c67b2673ce33de3e9f48c67be673c6d9ef1ccf48ca7c5339e299ef1d47bc633c1339e459ef1643ce0c906cf5d379085bfef005d95f55d7d7dd9d030fc779aa7ad82eff49b72b5e3d87da0a379dd7ec777314e5c73cf68ab17f6c95e1d70f47bc2b3c8339e099ef1d47bc633c5339e16cf78667ac6d3e619cf7ccf783a3de319ef19cf64cf784ef08c6786673cf33ce3d9e1194fad673c39cf78ea3ce369f68c67ba673cad9ef1ccf58ca7c3339e1ecf789a3ce319e7194fd6339e259ef13478c633c7339e959ef19ce619cf32cf786a3ce369f78c6792673ccb3de399e6194fc1339ed99ef12cf68c67a1673c5d9ef1747bc6b3d4339e6acf78267ac633d5339e599ef12cf08ca7cac1b3838927ead9dd1d9ed866380f797ddcfd4c3e5d618e556b8e4bfc64af06ead49b81473ddf80df252e7bbe1dc796af801871bd372167f1d0febe316e7bb2657b7285d8aeb76cd757886dc973c9f34ab02d792e795e09b625cf25cf7db4fd6c72b6db31cfaac0960feba3e5fd49f13cf2fea4789e6acf78e4fd49f13cf2fea4781e797f523c8fbc3f299e47de9f14cf23ef4f8ae7f1edf978799f533c8fbccf299e47dee714cf23ef738ae769f28c47dee714cf23ef738ae791f739c5f3d479c693f38cc7b7f739c9fb93e279e4fd49f13cf2fea4781e797f523c8fbc3f299e47de9f14cf33c1339e459ef1643ce079bef727e17b8f68ade53ed0d17aceb8f72c65e13857808ec607e918fa7a7576c37319aae03b573ab8f63bec919d2b1ddf1d8db8a3ad5ed8277bf83ea62b3de159e419cf04cf78ea3de399e2194f8b673c333de369f38c67be673c9d9ef18cf78c67b2673c2778c633c3339e799ef1d47ac693f38ca7ce339e66cf78a67bc6d3ea19cf5ccf783a3ce3e9f18ca7c9339e719ef1643de359e2194f83673c733ce359e919cf699ef12cf38c6787673c359ef1b47bc633c9339ee59ef14cf38ca7e019cf6ccf78167bc6b3d0339e2ecf78ba3de359ea194fb5673c133de399ea19cf2ccf781678c653e5e0e17a27522e18de7a617f34dec7f47cb6f5fe52888bdeb2f0f7d1784e7287c548fbb8ce0079896729134fd473ef4b3db0adfda7df5a34679185bfe373385c39b5d462a47d574ee13ac2654c3c51cfeb2ff3c0b68e459329d31c7716fede048c5c39b5cc62a47d574ed5f3f2b465c167dae2d6f6609be338874c7ee6b1fd25f88e88bc8ed5762b564d56ac725067349e138cea0fc89e300b7314b3e6a1b11662c5ebd9683c273d1246d7f5958127ec1f9707c55b5cffb81d7838ae1f4c7e86fdd801cba7e58eb8531dccd5030c7ebada0eed1f70d86e0c928dc5552388c5550e9eab46391664af54e61d2964f621ce9a87d64e102bae276ef68491744b7979c2feb13928dee2fac7ab8087e3fac1e467d8275c6df9d4ec883bd5c1f67535839faeb643fb57c3792885f9400a9925cee5316b1e5a534dac59a8d7e20923e9b6b3f214f259f099b6b87eec6ae0e1e8e799e21ef663072d9f5a1c71a73ad8be0e32f8e96a3bb47f10ce83300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb330fbcdac79e8591562cd42bd82278ca4bb8a956768dea110146f71f30e078187635e8629eee1bcc321cba78223ee540773f510839faeb643fb87e03c08b3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3dfcc9a87dee94aac59a8d7ea0923e9aee6e5099fdb6a0d8ab7b8798743c0c3312fc3e46738ef70d8f2a9d51177aa83b97a98c14f57dba1fdc3701e8459985dcc9a87feaf0762cd42bd364f18497790956768feb42d28dee2fab1c3c0c3d1cf33c53decc7062c9fda1c71a73a98ab030c7ebada0eed0fc0792885f9400a9925ce12e7286689b3c4398a59e22c718e6296384b9ca39825ce12e7286689b3c4398a59e22c718e6296384b9ca39825ce12e728668973e5c459f3d0ff5145ac59a8d7ee0923e90eb1f2b486f30eed41f11637ef30003c1cf3324c710fe71d8e583eb53be24e75b07d1d61f0d3d57668ff089c87b1ce7c2085cc921ba3c32cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc5ec436e689e0e5326d62cd4ebf0849174877979c2f71e7404c55bdcba9d23c033c0101f263fc3753bd7583e7538e24e75b07d5dc3e0a7abedd0fe35701e8459985dcc9aa7d39489350bf53a3d6124dd002f4f210b3ed316d78f5d033c1cfd3c939f613f76d4f2a9d31177aa83b97a94c14f57dba1fda3701ed2c6ac79ba4c9958b350afcb1346d2e175b98b892767f1e41cb1385eb6f57eb729d799cf2cfcbd1b18b9fac32e8b91f631c7919778ba9978265b3c931db1385eb6b5ff2b4df904f39985bfaf0446ae9ceab61869df955393816725134fbdc553ef88c5f1b2ad63d163ca53cc6716fede038c5c39b5d262a47d574ed5034f0f134f549fd4330ab6a3dad768d88eca95d1b02d318f8e3943bb0bc7077a82e22deebe1aaf2d1c7d15939f79d7f5bbc7f209afdf788f7abcae4fc22ccc51cc4cf7b96d59cb36c527b07868bb863916a3f93bbbdbf2290dbfb3e3980fa49059e25c1eb3b67d2c79db6d59cb36c527b078683bc61c0b263fc3fe603070c798ece5a00ee6e920839f19b04bc7a6fd41380fa5301f4821b3c4b93c666dfbdac46d0fbd7f186d537c028b87b66b9963c1e3e7507f705de08e31d9cb411dccd3eb18fccc805d3a36ed5f07e74198855998855998855998855998855998855998855998855998855998855998fd66d6b6af4fdcf6d0f83ddaa6f804160f6dd733c782c7cfa1f1fb1b02778cc95e0eeae039bf81c1cf0cd8a563d3fe0d701e84599885599885599885599885599885599885599885599885599885599885d96f666dfbc6e46d87cfe3a06d8a4f60f1d07623732c98fc0cc7ef6f0adc31267b39a883e7fc26063f3360978e4dfb37c17910666176316bdb37276e7b683e0f6d537c028b87b69b9963c1e3e7507f704be08e31d9cb411d3ce7b730f89901bb746cdabf05ce4329cc0752c82c71963847314b9c25ce51cc1267897314b3c459e21cc52c71963847314b9c25ce51cc1267897314b3c459e21cc52c71963847314b9c2b27cedaf6ad89db6e0dc7efd136c527b07868bb9539163c7e0e8ddfdf16b8634cf6725007f3f436063f3360978e4dfbb7c17918ebcc0752c82cb9313acc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc3ee486b67d7bf2b6c3e7d9d136c527b07868bb9d39164c7e86eb5fee08dc31267b39a883797a07839f19b04bc7a6fd3be03cdc21ccc2ec60d6b6ef4cde76216bd9a6f804160f6d7732c782c9cfb03fb82b70c798ece5a00e9ef3bb18fccc805d3a36eddf05e7216dcc78fe32c9d90ed76d928d2af3a9752f36e56ad0bdc4946b40f752531e07ba9799722de85e6ecae3417737f846ba5798f212d0bdd2947b40778f29af04ddab4cb91b74f79a7217e85e6dcad780ee35a67c1474f799f231d0bdd6940741f73a53be1674af37e5eb40f70653be1e746f34e51b40f72653be11746f36e59b40f71653be19746f35e55b40f73653be1574f79bf26da07bbb29df0eba7798f21da07bc0947780ee41539e08ba874c7912e8fe03caf4f94e53ae03ddbb4c3907ba779bf209a07b8f294f06dd7b4d790ae8de67caf5a07bd894a782eefda63c0d741f30e506d07dd094a783ee11539e01ba0f99f24cd07dd8946781ee23a63c1b741f35e539a0fb9829cf05ddc74d791ee83e61caf341f749535e00ba4f99f242d07dda94f1fc7ec694ef041df51777818efa8b17838efa8b97808efa8b97828efa8b97818efa8b97838efa8bbb414779f70ad051debd12749477f7808ef2ee55a0a3bcbb17749477af061de5dd6b404779771fe828ef5e0b3acabbd7818ef2eef5a0a3bc7b03e828efde083acabb37818ef2eecda0a3bc7b0be828efde0a3acabbb7818ef2ee7ed051debd1d749477ef001de5dd03a0a3bc7b10748da6fc10e84e3465ec3f4e32e57782ee64537e17e84e31e57783ee54537e0fe85e64caef05dd69a6fc3ed02d32e58741b7d894df0f3aba867d00744b4df983a05b66ca8f80aec9943f04bae5a6fc61d0359bf247409737e58f82aec5943f06ba82297f1c74ada6fc09d0b599f22741d76eca9f025d87297f1a749da64cfd876ea7babd91cf148f3af0afc9c14dba09c0dd1b247b0f46b6e8d8b45f00468a77cbe8331646ca98b718354f1b43cc3087688bfb8dd3063cad0c3c4c7e86bf71da2d9f0a964f39a8f322f0b39dc1cf0cd8a563d37e3bd8e638e7188b5a73dcd3ac58d4409d59e6e2a5af937171a463e8fc6d71f8c215c7bcc59377d8ee628e231d9bfac4ae51b0dd61d96eb66c63bf4f5b5cdbee00e64e06667ddceee48f1bb6ed15e65894cf64a7197c5a093148ca27b49d314276485f03e5e686e1ba548fe241d74e62d7ed88ce25b2dbdf6bb3be97833a5d0eff7b8364fdefb678ba2d66fd3be19486610e86f610e64097c541fbcd10bbee88d87541eca80e5e7bf34cb1ebb478683f0f3c747fd50e3aba4f217ebc9f6b1a056ebbdf6b777093ae0318f30ec6e6e4190b71d7856660245d27f07430c5cc3ed7a759f1c17b82f1561dfa6e0dd45907d7e5aca3ae6e77f332c37ed1effa678364fbf45a8678e1984300f109ac18d2460c1382e1718924792605c3e30ec706078eeeb9a2ff9cfe3d7d1940abb130f133e370a30a7458ae76e882a0787805876f697805876fabacb0e0b00ed5d73fe3b45b3484d17fe8c0e0f987fb0fef3b7ae391c1febe6d035720f5388b1e49a33c4052d4d13621181e08ea0d929db8a9b56cc525cf04f81c9f3c4f0b939fe1456fa2e553ade5530eea8c83bf4d64f0330376e9d8b43fd1613bc18e288cc5a411c462928367d228c70207d349872d95fe8e132d55962fd8a2d1273bcf1375880c9e0ac7cf1838fd37ddd8c71967c607c3279b7a4f7d47ab4f821e85d5572d3dcaaa47557517a4474df5054d8f8aea51503deaa94739f5a8a61ec5d4a3967a94528f4aea51483dead8180c8d2aea51443d6a780a703d0aacfad7bcbe3aea513f3dcaa747f5f45d95feb5a6ef44f49db7be2bd07703faae4fffa2d5a31bfa4aabef62f4155a5f55f55da2be3bd477f3faee56cf66ad52b25ac9e926d66b949ca164ad92754ad62bd9a064a3924d4a362bd9a264ab926d4ab62b3953c959c1d068fdd94ace5172ae92f3949cafe40225172ab948c94e25172bb944c9a54a7629b94cc9e54a762bd9a364af927d4afa94f42bd9afe40a255706432b78ae5272b592834a0e2939ac6440c9916068464dcfa0e919333d43a667c4f40c989ef1d2335c7a464bcf60e9192b3d43a567a4f40c949e71ba23189a5dd0b3097af640cf16e8d9013d1ba047ffef0e8646f7f568fe3dc1d068bd1e9dd7a3f17af45d8fb6ebd1753d9aae47cff568b91e1dd7a3e17af45b8f76ebd16d3d9aad47aff568b51e9dd6a3d17af4f9a1606874598f26ebd1633d5aac4787f568b01efd7d38181addd5a3b97af4568fd6ead1593d1aab475ff568ab1e5dd5a3a97af4548f96ead1513d1aaa473f3fabe4734a3eafe40b4abea8e44b4abeace42b4abeaae46b4abeaee41b4abea9e45b4abeade43bc1504e7e57c9f7947c5fc90f94fc50c98f94fc58c94f94fc54c9cf94fc5cc92f94fc52c9af94fc5ac96f943ca6e4b74a7ea7e4f74a1e57f207257f54f284922795fc49c99f95fc45c9534afeaae46f4a9e56f27725ff50f24f25cf04c3b324d871d498de8646ecf70c0ef61f3a32d83838d078e8da8383078e1cbcb1f1fa038357360e5cd77f74ffc181ebf1cb5f375fa6e98835478feeb9b1f1c0e1befe1b1a07ae1d6c1cd8dfb877e0dac37dc7f04b4f982fcd7baec53d7d7dd1c6fef38590fe779946ab4d3f48133d9be37dabad2e232075e57c295f5d9e437973a5a1d9f97387ee701b8f1d1c186ccc371e56ffee39a8bed3dfb7bc11ff764c05f9d860e3b1c13d47071bf71f1d38d4d8b21c8f3ba5ae0c27663694f1a5b50d23f73cf87f8198955c01d50300", + "bytecode": "0x1f8b08000000000000ffed9d777c1dc5b5c7f74ab22cfbfa5a967bb768c64df2d555b3e42603ee85988e69966d196c6ccbd8a285d04942421212d20b8184978434d20be9bdf7de484202494848f8e7e5f3defbbccf87cf9bd93be7e9a76176d1bdec11b3ba673f9fe33b7b3477cff79c3d33bb776676fd54100499a0b8552b392978e6467fef319ff9e7b6b52478ac3c276726259c5529e1ac4e09674d4a38c7a484b336259c6353c2599712ce7109726ab6aa60e89634ef7886b826cd984d594c27a420a6b994c574620a625a1fa4a38f9a9412ce8694704e4e09e79494704e4d09e7b494704e4f09e78c9470ce4c09e7ac9470ce4e09e79c9470ce4d09e7bc9470ce4f09e782947036a684f38494709e9812ce9352c279724a384f49907329702e349fa79acf45e673b1f95c623ee93bcbcc6793f1b1c6ec372b59aed994b4587f2b286955d2a6a4ddfa5b87924e252b947499bf359abf752b59a9649592d54ad628596be2b04ec9694a4e57728692f54a3628d9a8649392cd4ab628d9aa649b92ed4a76283953c90b94ec54729692b3959ca3e45c25e729395fc9054a2eb4587629b948c9c54a2e5172a992cb94ec56d2ab648f92bd4af629e953b25fc9e54aae507240c94125572a39a4e4b092234afa951c55729592634a8e2b195072b5926b945cabe43a25d75b317ba1921b94bc48c98d16e74d4a6e56728b925b95dca6e47625772879b192972879a9923b95bc4cc9cb95dca5e4154a5ea9e4554aee56f26a25af51728f92d72a799d92d72b798392372a799392372b798b92b72a799b927b0d0b3584b72bb94fc9fd4adea1e49d4a1e50f21f4adea5e4dd4adea3e44125ef55f23e25ef57f201251f54f290920f29f9b0928f28f9a8928f29f9b8924f28f9a4924f29f9b49287957c46c967957c4ec9e7957c41c917957c49c997957c45c957957c4dc9d7957c43c937957c4bc9b7957c47c977957c4fc9f7ad98ff40c90f95fc48c98f8dee27e6f3a7a62e8d8bfd4cc9cf4df917e6f397e6f357e6f3d7d6777ea3e4b796ee774a1eb174bf57f20753fea3f97cd47cfec97cfed97c3e663e1f379f7f319f7f359f7f339f4f98cfbf9bcf7f98cf27cde73fcde7bfcce7534a6e9d5a2cd705835b4f90501fd5b63fafe75428f80b83a19b8e45b5f91b7d361a7d8dd9a74f8add18b33fc6d2d79afd5aeb387566bfced23798fd064b3fc5ec4fb1f4d3ccfe344b3fc3eccfb0f4279bfd93419f0d60ccd5e8b5aedaa832a0a37cad02dd18a3ab065d2d1d0e74638d6e0ce8e8fcd6826e9cd18d05dd78a3ab035dd6e8c6512c954c30ba9e20a95cc9f7eae3e6923eae99879a983cef5e7ddc7a26de49c9f3f6e9e33630f0eafc986c8e3509f2668ad13580ce7437c164d04d33ba29a09b6e74534137c3e8a6816ea6d14d07dd2ca39b01bad946371374738c6e16e8e61add6cd0cd33ba39a09b6f747341b7c0e8e681aed1e8e683ee04a35b00ba138dae1174b4c6e504d09d6c742782ee14a33b0974d4d79e0c3aba373cc5e8743f519781ef183df551e177a87f06dd22ea9b41b798fa65d02da13e19744bc136e99641bf42ba26a3a33e4affaddb947b82a4da44216c132b933eae3ab23eeeeae48f1bcedbad0906e3da03765642acd69a72826b835ad076c608d9217d0d9437435daa47f1a0eb0cb1ebebc92a535e1bf3bd6eeb7b39a8b3cae17f4f90acffab2d9ed516f318f09f27675b0b92b3c3de4aced9f3a1ae9d7b74cf331a73761b7030e46c87e4ecb0b79273b60feadab947f7bda3316777010743cef6f2e46c212f395b1c230b0277eed16f9fd198b3570047f239db2e393bfcade49cbd15eadab947bf7f4763ce5e031cc9e76c67afdc1b0c7b2b3967ef86ba76eed158cc68ccd93b80832167fba49f1df65672cede0b75eddca371c1d198b3f70047f239dbc594b3ad92b34171be3308dcb94763d4a33167ef078ee47376af8ccf0e7f2b39671f86ba76eed17cc968ccd9874c59cf33fcc4cc33cc05dd4f8d6e1ef0269fdbfbda9872bb20b95d5c071204ee1ca5b9bbd198db5f30659dc7bf80b507a4fba5d19d00ba5f19dd89a0fbb5d19d047e31b4815e6903c3de4a6e03bf85ba762ed33cf2686c033f020e869cdd2b393becade49c7d02eadab9476b1a4663cefe1e381872b64f7276d85bc939fb5f50d7cebd45a63c1a7396d695eafb853f9afb8525a07bd4e89682ee4f46b70c747f36ba26d03d6674cda07bdce89683ee2f469707dd5f8dae05747f33ba02e89e30ba56d0fddde8da40f70fa36b07dd9346d701ba7f1a5d27e8fe65742b40f794d175199d9eefa2b557df313a7d6e291e3d4172e7365c6f150cdd32d67e0f949b7879f2b960e8b308646b79f2b65ab5efcdc1f07d5f0e3c7906dfb36063383c79e069499e275c775a48feb8e1396eb6629a055bcde0572b835f19b045c7a67db297031df625ad0ec6b6e4190b19b045c7a6fd3660241df66d748da1f6a3fbe6c6cc202f435b0aafcf68af0738c85e0dd4993775b0eec9866d02fc9dfa800950c6bebfc5d231e56a982b648b8e4dfb0560241f5b469eb1305cc6bcc5c8d56f64c0161ddbb63dc1111f1db33647ccda9918db2c46da6f07468a5fdbc8331686cb68f70b4c7d52cb70fb248a4bcbc8c76c58e735073abcff6b77307624cf189ed7768b91f63b809174adc0c3753d8c6aafbed8e6b80fc17ca66b165d7fc85e0dd4e9ac1eacbb0daea70c7d68a1d47b53ecd3933f4f853c5ecf86c3c37cee5a98f2318f7de7d341b2b966b7f9162b56d8e6b12fe7ea27a3fa72b227ccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccfe3347cdcbb9d6333c9f8ca42b000fc7387ff88e2a732c9c037a04e675929fb728e471ae9ed6312eb67cae813aff9b19647bd4b14e02e7ce975b3aa6754ae1b9c4754a3db04ff670dd06ae9b62587b12f22cb3786cdb131cf1f1711d894f6b34a2d669f914b31ce8703d5c33134f549e353b6c372666bbb097a7ed14f2fa7d40fa9d7ad49fd86d04d7be2db574ba4feaae1ef49b23074a9d77c6eb0695939cc7c57c435bc9afb7290c599f50150cbd56e03d05c31a9521f3d5b436a2c3b25d0375c65505ff7f6e3ae1ef3dc133d708611d3a36ed2f86ef765ac7aee7f337b63fec006e2ad75abe350137d5995835e8e3e74d99e97ea680eb6703e00d2c9f68c3f519c9dfef15d78bb496c0d30e3c1c6bd798ee6bf3988f49af17e9b462e5ba5fa63a1d10bf4e86f8c5ad59237bc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc2ec3f33beff8258f119e982278c23b4c6269ccfa07719e1bcd87d558376b9e70069ce6989e5333ea3fc64d520db03a68cef08703def8ee7926b6e2dea5c92bd09c1339fd3673a97c37ef743bb23669d8e98ad6062b4fb0cda5f018c14bf4ee0e16a8f1d168f6d1bfb8c764f6316d5cf72ad5f89ca33d73a85c6c46c17d78b70ccebd27a11fbfa55b0628aeb244887f3e0f86e159fdfff62af5dc07e0ad76825df6f1686cc01db6b05c91eae93f8a6892dad9348be1f28e439af11d446694d48abc357aaf33db8cefdc09471ad50018ef588e3efb4c5ad49c03e35f17770e68b73fcf4ee4a3abfdd0edbab803521db2d683b6384ec90be06cabfab1aac4bf5281e146b62d76d84de6588ecf6f75aacefe5a04e97c3ff9e2059ffbb2d9e6e8b59e7ce8f21cf1e817b3dae3ea92b22468b21465407ef79b9ae5ff69a6d7bad32f6a363ad3af4dd1aa8f338f451a5bc2b8aeb7e21ea1a80f70bf67561386bc72b7d3de0bfa1bfe884bff704cf7d3de0bf21875cf7a574fc25707ce21a1b445f5ba8ceff58d75186f57ac37aef95ebb71ff1e27a43aaf334f45579b32e37ea778ceb390baedf0d51cf7d903dbca72ac577ec1792be36623e220bd9c37cac33b1a67cec8ce05eeef86e36e2bb142b5a5f8ebf93edf8e93874c1777a128943b1bfe9b67ca136d505be509d06f085e79ea978ff99bcaf43ef87a80f6a73f84a75a6c3bbe0669a7216ce13f695a73afe4e5bdcfd27c54ffb3cd2ef5447db3ebc537d61f5605dfbdde814eb52dfa9de617dcfc777aacf813c3b159eb5e0eaab5745c46809c488eae0b38ef6efffa86bccf3f95e52bbdfc4ebe448b2d9e3b7aefb13aa83f7d054a71dfad9aca3ae3d2e4dd79024d7a7e3f340cbc02e3e0fb48c299eb960683c731607a7ed7acb76fd08da6eb06c378ca06d89b9c4dca79833fcdf1365ff5f18f87f5654a580b13a058c3529601c9302c6da14308e4d01635d0a18c7a580717c0a18b3c0f87c5edb19e253f0ecff7b8abdd740db0cef730863d1140c3f16cdbc3cb1f73e689be11d2a25ff7f03ccff17564bb9ff17560ebe3739058c5352c03835058cd352c0383d058c3352c03833058cb352c0383b058c7352c03837058cf352c0383f058c0b52c0d89802c61352c078620a184f4a01e3c929603c25058c0b853111c6a5bc8c05dffe1fe76c3074add9b3f130bf7b347c87a2eb3da71cff376ea9be33bf77b8a5dcf7f4e11a0bdeffebf1b9bd4b90630d45a9ef128cfbffb199180be53272ad25c775d4c3e1c1e7505dcfb7303016ca65e47a06059f891c0e8febffeae57d26a818b37218b9d68c95baa6119f15ec70c48c81b1502e23d77307f84ce470785ccf2eb6f03216ca65e45a9f9b051bc3e1e98298ad70c48c81b1502e23d3f36561ccba4ae0c1e7b0ba1c3163602c94cba8795632c5acbb049e9510b36e47cc7c62449ea4df89deedb0c5f1dc5ea9be1303328e4b01e3f81430e23a098efe2b6e9d44376f7c0ae5c687eb7cc5ad9340db0ccf8984b1c0e7029e2d16ab797962d749a0ed354cb1c0e7369e2d166b8087e339922cd8180e0f31e4e07b9353c03825058c5353c0382d058cd353c03823058c3353c0382b058cb353c03827058c7353c0382f058cf353c0b820058cf85b95e15e31f6f7cb9a516e3beab7ca68b71df5bb64b4db963c973caf04db92e792e795605bf25cf2bc126c4b9e4b9e57826dc973c9f34ab02d792e795e09b625cf25cf7db29d86317e611c7d8cc8d3981c4f1e7d475b3d1ef8dee3e0c930f98eb6d679e03b31a48d716d0a1857a68051e2585c83580ea3e6398d89675d093ca701cfe94c3ca795c0733af09c913c4f9853a797c0430c39f8deca1430ae4d01a3c451e2e813a3c4b172e2288cc2288cc2f87c30a6a10f17c654e463a15c46cdb33e799e30666794c0b31e6246df6be1652c94cba8793624cf13c66c7d093c1b2066eb1d3163602c94cba8793626cf13c66c43093c1b21661b1c3163602c94cba8793625cf13c66c63093c9b20661b1d3163602c94cba8793627cf13c66c53093c9b21669b1c3163602c94cba879b624cf13c66c73093c5b20669b1d3163602c94cba879b626cf13c66c4b093c5b21665b1c3163602c94cba879b625cf13c66c6b093cdb20665b1d3163602c94cba879b627cf13c66c5b093cdb2166db1c31f39571650a18d7a68091398e85721935cf0e269eed25f0ec009e3399787694c07326f0bc20799e30a7ce2c81871872f0bd9529605c9b024689a3c4d127468963e5c451188551184b63ec4901a39c6b61f49591e1f755ec3334678e72dbf596edfa0ab11df50ccd68b72d792e795e09b625cf25cf2bc1b6e4b9e47925d8963c973caf04db92e792e795605bf25cf2bc126c4b9e4b9e57826dc973c9f34ab02d792e795e09b625cf25cf2bc1b6e4b9e47925d8963c973caf04db92e792e795605bf25cf2bc126c4b9e4b9e57826dc973c9f34ab02d792e795e09b625cf25cf2bc1b6e4b9e4b94fb677266fbb50ea33ac3b8187e3995a263ff3fab86799633d9d60fc74acceb66275a615ab1cd4390be2773643fc3260978e4dfb64af54e6533d6066b25d98a88e310efc271b6bad7868fbe730f91ed5d79f33ca6d47f5f5a3dd76545f3fda6d4b9e4b9e57826dc973c9f34ab02d792e79ee8b6d2cd70483f7edf47e257d8c734d798cd94756fa1ed5593db6f8591f481be2b02d6d48ae1595605bf25cf2bc126c4b9e4b9e57826dc9733ff3fcbce46d877363f8fb426f717363e701cfb90cb160f233af7d3adff2e91ccba71cd4c177d69ecfe06706ecd2b169ff7c380f6963d63c6b4c9958b3506f8d278ca43b9797276c5f6b82a15b5cfb3a1f7818da410b939f61fbbac0f2698d23ee540773f502063f5d6d87f62f80f3903666cdb3ce9489350bf5d679c248baf37879c2f6b52e18bac5b5af0b8087a3ff61f2336c5f175a3ead73c49dea60ae5ec8e0a7abedd0fe85701ed2c6ac794e336562cd42bdd33c6124ddf9bc3c6d59f099b6b8f67521f070f43f4c7e86ed6b97e5d3698eb8531dccd55d0c7ebada0eedef82f320ccc2ec62d63cf47fca136b16ea9dee0923e92e60e569cb67c167dae2fab15dc0c3d1cf33c53decc72eb27c3add1177aa83b97a11839faeb643fb17c1792885796d0a9925ce12e7286689b3c4398a59e22c718e6296384b9ca39825ce12e7286689b3c4398a59e22c718e6296384b9ca39825ce12e7286689b3c4398a59e22c718e6296384b9ca39825ce12e7286689b3c4398a59e22c718e6296384b9ca39825ce12e7286689b3c4398a59e22c718e6296384b9ca39825cee5316b9e334c9958b350ef0c4f184977212f4ff8fcce19c1d02d63edf740f922e0d9c5101f263fc375ef175b3e9de1883bd5c1f67531839faeb643fb17c3792885796d0a9925cee5316b9ef5a64cac59a8b7de1346d2ede2e509fbb1f5c1d02dae1fbb187838fa79263fc37eec12cba7f58eb8531d6c5f9730f8e96a3bb47f099c0761166617b3e6d960cac49a857a1b3c6124dd45ac3c85f039c40dc1d02dae1fbb047838fa79a6b887fdd8a5964f1b1c71a73a98ab9732f8e96a3bb47f299c875298d7a69059e22c718e6296384b9ca39825ce12e7286689b3c4398a59e22c718e6296384b9ca39825ce12e7286689b3c4398a59e22c718e629638574e9c35cf465326d62cd4dbe80923e92e66e5690de71d360643b7b879874b8187635e8629eee1bcc365964f1b1d71a73ad8be2e63f0d3d57668ff32380fa39d796d0a992537468659724398a398253784398a59724398a398253784398a59724398a398253784398a59724398a398253784398a59724398a398253784398a59724398a398253784398a59724398a398253784398ad987dcd03c9b4c9958b3506f93278ca4bb8497277cefc1a660e816b76ee732e0b994213e4c7e86eb76765b3e6d72c49dea60fbdacde0a7abedd0fe6e380fbb8559981dcc9a67b329136b16ea6df684917497f2f284fdd8e660e816d78fed061e8e7e9ec9cfb01febb57cdaec883bd5c15ced65f0d3d576689fec09b33047316b9e2da64cac59a8b7c51346d25dc6cb13f6635b82a15b5c3fd60b3cbb19e2c3e467d88fedb17cdae2883bd5c15cddc3e0a7abedd0fe1e380fc22ccc2e66cdb3d59489350bf5b67ac248baddbc3c852cf84c5b5c3fb6077838fa79263fc37e6cafe5d35647dca90ee6ea5e063f5d6d87f6f7c279481bb3e6d966cac49a857adb3c61245d2f2f4fd8beb60543b7b8f6b5177838fa1f263fc3f6b5cff2699b23ee540773751f839faeb643fbfbe03ca48d59f36c376562cd42bded9e30926e0f2f4fd8beb60743b7b8f6b50f7838fa1f263fc3f6d567f9b4dd1177aa83b9dac7e0a7abedd07e1f9c87b4316b9e1da64cac59a8b7c31346d2613f455b1530ee60620c2cc6c08a0ff2ccf78c67a7673c333de399ec19cf38cf78167bc653ed19cf0acf78da3de32978c6b3c0339e599ef14cf18c67bc673ccb3ce3a9f18c67a1673c4b3ce399ed19cf54cf78b29ef13479c633c6339e6ecf78ba3ce359e4194f87673cad9ef12cf78c678e673cd33ce359ea19cf04cf78729ef1347bc653eb19cf2acf78e67ac633dd339e899ef1d47bc633d6339ed59ef1747ac6d3e6194fde339e799ef1ccf08c6792673c0d9ef1d479c693f180271b3c731d4316febe137455d677f5f565cfd4c1bfd3bc71157c67bf29573b8edd073a9a67deeff82ec6896b2e1c6df5c03ed99b001cfb3de1a9f38ca7c1339e499ef1ccf08c679e673c79cf78da3ce3e9f48c67b5673c633de3a9f78c67a2673cd33de399eb19cf2acf786a3de369f68c27e719cf04cf78967ac633cd339e399ef12cf78ca7d5339e0ecf781679c6d3e5194fb7673c633ce369f28c27eb19cf54cf78667bc6b3c4339e859ef1d478c6b3cc339ef19ef14cf18c6796673c0b3ce32978c6d3ee19cf0acf78aa3de359ec19cf38cf78267bc633d3339e9d9ef1ccf78ca7cac1b3938927ead9e69d9ed866380f797ddccb997cbac21cabd61c97f8c95e0dd439c90c3ceaf90ffc2e71d9f3ffd876ae801871bd572267f1d0febe516ebbdeb25d5f21b61b2cdb0d15625bf25cf2bc126c4b9e4b9e57826dc973c9731f6d3f9d9ced7679bfd4f079e47d4ef13cf23ea7781e799f533c8fbccf299e47dee714cf23ef738ae791f739c5f32cf48c47dee714cf23ef738ae769f28c678c673cf23ea7789e459ef1c8fb9ce279e47d4ef13cf23ea7789e099ef1c8fb9ce2796a3de3f1ed7d4ebebd0f5ede2f15cf33d1331e79bf543c8fbc5f2a9e47de2f15cf23ef978ae791f74bc5f3d479c693f180e7d9de2f85ef85bac294f7818ed697c6bd872a0bc7b90274349e4bc7d0d7abc3539fc95005df39e0e0badc618fec1c707c7724e28eb67a609fece1fbaa0e78c253e7194f83673c933ce399e119cf3ccf78f29ef1b479c6d3e919cf6acf78c67ac653ef19cf44cf78a67bc633d7339e9d9ef1acf28ca7d6339e66cf78729ef14cf08c67a9673cd33ce399e319cf72cf785a3de3e9f08c6791673c5d9ef1747bc633c6339e26cf78b29ef14cf58c67b6673c4b3ce359e8194f8d673ccb3ce319ef19cf14cf786679c6b3c0339e82673ced9ef1acf08ca7da339ec59ef18cf38c67b2673c333de399ef194f958387eb9d5151cfd78fc4fbaa9ecdb6de5f0671d15b16fe3e12cf71edb418691fd73d202ff12c63e2897a2fc0320f6c6bffe9b7e844f39985bfe373385c39b5cc62a47d574ee1bac626269ea8f7193479605bc7a2d994690d4016fede0c8c5c39d56431d2be2ba71a7879dab2e0336d716b8db0cd719c43263ff3d8fe127c87465ec76a8715ab662b5639a83312ebd2a3fa03b227ccc21cc5ac79682e8558f17a3612cf990d87d1757d65e009fbc7e5c1d02dae7fdc013c1cd70f263fc37eeca0e5d37247dca90ee6ea41063f5d6d87f60f3a6c3706c9c6e2ca61c4e24a07cf95231c0bb2572af3ce1432fb1067cd436b118915d737e73d6124dd325e9eb07fcc0743b7b8fef14ae0e1b87e30f919f609872c9ff28eb8531d6c5f8718fc74b51dda3f04e7a114e6832964963897c7ac79680e8258b350afe00923e976b0f214f259f099b6b87eec10f070f4f34c710ffbb1c3964f0547dca90eb6afc30c7ebada0eed1f86f320ccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22ccc7e336b1e7a369658b350afd51346d25dc9ca539c77680d866e71f30e878187635e8629eee1bcc311cba75647dca90ee6ea11063f5d6d87f68fc0791066611666611666611666611666611666611666611666611666611666611666bf99350fbdb39d58b350afcd1346d21de2e5099fdb6a0b866e71f30e4780e730437c98fc0ce71dfa2d9fda1c71a73a98abfd0c7ebada0eedf7c37910666176316b1e7a571bb166a15ebb278ca43bccca539c3f6d0f866e71fd583ff070f4f34c710ffbb1a3964fed8eb8531dccd5a30c7ebada0eed1f85f3500af3c114324b9c25ce51cc1267897314b3c459e21cc52c71963847314b9c25ce51cc1267897314b3c459e21cc52c71963847314b9c25ce51cc12e79161f621ce9a87fe0f4162cd42bd0e4f1849778495a7359c77e808866e71f30e478187635e8629eee1bcc355964f1d8eb8531d6c5f5731f8e96a3bb47f159c87d1ce7c3085cc921b23c32cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc5ec436e689e4e5326d62cd4ebf4849174fdbc3ce17b0f3a83a15bdcba9dab80e728437c98fc0cd7ed1cb37cea74c49dea60fb3ac6e0a7abedd0fe31380fc22ccc2e66cdb3c29489350bf55678c248baa3bc3c852cf84c5b5c3f760c7838fa79263fc37eecb8e5d30a47dca90ee6ea71063f5d6d87f68fc379481bb3e6e9326562cd42bd2e4f184987d7e52e269e9cc59373c4e2f9b2adf7bb4d7982f9ccc2dfbb8191ab3fecb218691f731c7989a79b89a7dee2a977c4e2f9b2adfd5f65ca13cd6716febe0a18b972aadb62a47d574ed503cf2a269e068ba7c1118be7cbb68ec56a539e643eb3f0f7d5c0c89553ab2c46da77e55403f0ac66e289ea93568f80eda8f63512b6a37265246c4bcca363ced0eec2f181d5c1d02deebe1aaf2d1c7d15939f79d7f57bb5e5135ebff11ef5f9ba3e09b330473133dde7b6652ddb149fc0e2a1ed18732c46f27776b7e5531a7e67c7311f4c21b3c4b93c666d7b2079db6d59cb36c527b078681b608e05939f617f7075e08e31d9cb411dccd3ab19fccc805d3a36ed5f0de7a114e6832964963897c7ac6d5f93b8ede2fb87d136c527b07868bb8639163c7e16fb836b03778cc95e0eea609e5ecbe06706ecd2b169ff5a380fc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc2ec37b3b67d5de2b68be3f7689be213583cb45dc71c0b1e3f8be3f7d707ee1893bd1cd4c1737e3d839f19b04bc7a6fdebe13c08b3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3dfccdaf60b93b71d3e8f83b6293e81c543db0b9963c1e467387e7f43e08e31d9cb411d3ce73730f89901bb746cdabf01ce83300bb38b59db7e51e2b68bf379689be213583cb4bd8839163c7e16fb831b03778cc95e0eeae039bf91c1cf0cd8a563d3fe8d701e4a613e98426689b3c4398a59e22c718e6296384b9ca39825ce12e7286689b3c4398a59e22c718e6296384b9ca39825ce12e7286689b3c4398a59e25c3971d6b66f4adc766b387e8fb6293e81c543db4dccb1e0f1b3387e7f73e08e31d9cb411dccd39b19fccc805d3a36eddf0ce761b4331f4c21b3e4c6c8304b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e486304731fb901bdaf62dc9db0e9f6747db149fc0e2a1ed16e65830f919ae7fb93570c798ece5a00ee6e9ad0c7e66c02e1d9bf6c99e300b7314b3b67d5bf2b60b59cb36c527b07868bb8d39164c7e86fdc1ed813bc6642f0775f09cdfcee06706ecd2b169ff76380f6963c6f39749ce76b86e936c54994fadbbc394ab41f76253ae01dd4b4c790ce85e6acab5a0bbd394c782ee65e01be95e6eca4b41779729af06dd2b4c7915e85e69cadda07b95297781ee6e533e06ba579bf271d0bdc6940740778f295f0dbad79af235a07b9d295f0bbad79bf275a07b83295f0fba379af20b41f72653be01746f36e51781ee2da67c23e8de6aca3781ee6da67c33e8ee35e585a07bbb43779f29df02bafb4df956d0bdc3947782ee9da63c0e740f98f278d0fd0794e9f35da63c0174ef36e51ce8de63ca1341f7a029d783eebda63c0974ef33e506d0bddf942783ee03a63c05741f34e5a9a07bc894a781ee43a63c1d741f36e519a0fb8829cf04dd474d7916e83e66cab341f771539e03ba4f98f25cd07dd294e781ee53a63c1f749f36e505a07bd894f1fc7ec6946f031df52bb7838efa953b4047fdca8b4147fdca4b4047fdca4b4147fdca9da0a37ee565a0a3bc7b39e828efee021de5dd2b404779f74ad051debd0a74947777838ef2eed5a0a3bc7b0de828efee011de5dd6b414779f73ad051debd1e7494776f001de5dd1b414779f726d051debd197494776f011de5dd5b414779f736d051dedd0b3acabbb7838ef2ee3ed051dedd0fba46537e07e84e30e57782ee44537e0074279932f633279bf2bb40778a29bf1b74d417be0774a79af283a05b64caef05dd62537e1fe89698f2fb41b7d4943f00ba65a6fc41d03599f243a06b36e50f816eb9297f18747953fe08e85a4cf9a3a02b98f2c740d76aca1f075d9b297f0274eda6fc49d07598f2a740d769ca9f06dd0a537e1874741da77e46b767dd2e290e1423ad239f9b1dbe90ae0e7ce90992bda7235b746cda6f05463a078591672c0c97b1c562d43ced0c31c3bca22dee37533bf0b431f030f919fe66eab07c6ab57cca419d53c1cf0e063f3360978e4dfb1d609be39c632c6acd711759b1a8813a6de622a7afa77171a463e8fc2d387ce18a638bc5d3e2b0ddc51c473a36f5895d2360bbd3b29db76ce3b580b6b8b6dd09cc2b1898f571bb933f6ed8b6579a63513e939d3cf8b40a6290944f683b6384ec90be06ca5ba70ed6a57a140fba7612bb6e47742e91ddfe5ebbf5bd1cd4e972f8df1324eb7fb7c5d36d31ebdf133d53073918da4398035d1607ede72176dd11b1eb82d8511dbcf63631c56e85c543fb4dc043f7571da0a3fb14e2c77bbce611e0b6fbbd0e0737e93a81b1c9c158489e31bccf6ab21869bf008ca45b013c9d4c31b3cff5222b3e784f30d6aa43dfad813abbe1ba9c75d4d5edae3133e817fdfe7f3a48b64faf6588178e4d04109fc08a216dc450170c8e5f24c9333e181c9f383ed07facf7f2beb3fa7af76500adc6c2c4cf8cc38d2ad061b9daa10b82a1c330381c4cc330381c5c658505877fa8befe19a7dda2a18ebec30706ce3dd27764efb1eb8f0ef4eddbd67f39528fb1e89134ca0324451d6d75c1e080514f90ec4450ad652b2e79eae0736cf23c2d4c7e8617bd71964fb5964f39a83306fe368ec1cf0cd8a563d3fe3887ed043ba23016e387118bf10e9ef1231c0b1c74271db654fa3b4edc5459be608b469fec3c4fd42132b8108e9f3170fa6fbab18f31ce8c0d064f36f59efa8e569f043d5aabaf5a7a34568fbeea2e488faeea0b9a1e3dd5a3a57a74548f86ead14f3ddaa94737f568a61ebdd4a3957a74b231288e3eead1463dbaa847134f01b6ef00affe45afaf907a34508ffee9d13e7d67a5ef00f4dd88befbd6778afad7a3be43d0bf6af50887bedaea3b197d95d657567da7a8ef10f51dbdbec3d533646b94ac35b15ea7e43425a72b3943c97a251b946c54b249c966255b946c55b24dc976253b949ca9e405417164ff2c25672b3947c9b94ace5372be920b945ca86497928b945cace41225972ab94cc96e25bd4af628d9ab649f923e25fb955caee40a250782e2aaa02b951c527258c91125fd4a8e2ab92a28ced2e959393d0ba767ddf42c9b9e55d3b3687ad64ccf92e959313d0ba667bdf42c979ed5ba2528ce46e999083df3a0671af4cc829e49d033077706c599013d137057501ce9d723fb7a245f8fdceb917a3d32af47e2f5c8bb1e69d723eb7a245d8f9ceb91723d32ae47c2f5c8b71ee9d623db7a245b8f5cdf1f1447a6f548b41e79d623cd7a64598f24eb91e30783e2c8b01e09d623bf7aa4578fecea915c3d72ab476af5c8ac1e89d523af7aa4558facea91543d72aa474af5c8a81e09fdac92cf29f9bc922f28f9a2922f29f9b292af28f9aa92af29f9ba926f28f9a6926f29f97650cccbef2af99e92ef2bf981921f2af991921f2bf989929f2af999929f2bf985925f2af995925f2bf98d92df2af99d924794fc5ec91f94fc51c9a34afea4e4cf4a1e53f2b892bf28f9ab92bf297942c9df95fc43c9934afea9e45f4a9e0a066756b013a9333d0f8df2f70e0cf41d3e3ad038d0df78f8ea4303078e1ebabef1da03035734f65fd3776cffa1fe6bf1cbdf305fa6298c75c78ef55edf78e0c8bebeeb1afbaf1e68ecdfdfb8a7ffea23fb8ee3971e335f9afb4c8bbdfbf6451bfbcfe742fadf651a1d6bfa449a1cda1cefdbf8ea320232a99c2fb55597e7d02a73d5a15fef6717ef761b8f1fea1f68cc371e51fff61e52dfe9dbd7dc887f3bae827c7ca0f1f840efb181c6fdc7fa0f37b634e3714f9c508613ad53cbf8d2655387ef79f07f5ef0c7e5f1d90300", "isInternal": false } ], - "packedBytecode": "0x000000028df71de50000003e021f8b08000000000000ffed9d0774154796f75b4280f0d3b3088e045b3860c004e9492449c023679325030e801019e3210c382272c618b0c946e0999d4db339cfe69c739cd9303bb333bb3b3b73ce37bb5ffecef1f9aafad51dfd55543ff4e4aec77dd2ed734aaffaaabaefaffe7dab3a55777f270882a22033f550e9e9e0ee89fe9f36bf959f6eaa8a715d953e398b0a84b3b840387b140867498170f62c10ce5e05c2d9bb40384b0b84b34f8c9c9aad38683fc5cdfb80075de3664c1498a66505a069b2c0347db000342d0f0aa38fea5b209cfd0a84b37f81700e2810ce870a84f3e102e17ca440381f2d10cec70a84f3f102e11c58209c830a84737081700e2910ce270a84f3c902e1ac2810cea105c2f95481703e5d209ccf1408e7b331728e00ce61e6f739f33bdcfc529991e6f779f33bcafc8e36752c31f363541aabd954aab2fe9752a95aa51a95c659ff1bafd2049526aa34c9fcafc2fcaf56a53a95ea559aacd21495a61a1da6a9345da5192acd5469964ab3559aa3d25c95e6a9345fa5052a2d5469914a2fa8b458a5252a2d5569994acb555aa1d24a951a546a54e9459556592cab555aa3d24b2abdacd22b2abdaad25a95d6a9b45ea5269536a8d4acd2469536a9b459a52d2a6d55699b4adb55daa1d26b2aed54e975953ea3d22e9576abb447a5bd2a7d56a57d2aed57e90d4bb337557a4ba5b7557ac7e27c57a5032ab5a87450a5432a1d56e9884a47553aa6d271954ea87452a5532a9d56e98c4a67553aa7d27b2a9d57e97d952ea87451a54b2a7da0d2872a5d56e98a4a5755baa6d275956ea874d3b05043f848a55b2ab5aa745ba53b2a7dacd2e754fabc4adfa7d21754fa7e957e40a51f54e98754fa6195bea8d28fa8f4a32afd984a3faed24fa8f4932afd944a3fadd2cfa8f4b32afd9c4a3fafd22fa8f425957e51a55f52e99755fa15957e55a55f53e9d755fa0d957e53a5df52e9b755fa1d957e57a5df53e9f755fa0395fe50a53fb234ff6395fe44a53f55e9cfccffe83ad89fabf41726ff97e6f7afccef5f9bdfbfb196f95b95feceb27d59a5af58b6bf57e91f4cfe1fcdef3f99dfaf9adf7f36bf5f33bf5f37bfff627ebf617ebf697effd5fcfe9bf9fd77f3fb2df3fb1fe6f7dbe6f73b2add1c9cc997066d533a88a94faa696ed6f75048ec6141fb496bd1c3fc8f7e2b8cbdc4ccd32f69d7d3ccf7b4ecbdcc7c2f6b3da566bed4b2f733f3fd2cfb00333fc0b23f6ce61fb6ec8f9af947c19e08e05aaab16b5b0f632a021bc56131d87a06ed35d1b65eb43ab0f50eda6ba16db41d7b81ad8fb1f506db03c6560ab684b1f521cd542a33b67410574c54aed3eb4dc6bd5e737fe9c1f8799bf47acb3df1f68d9fb759afb79f075e1d1ffdcdbafa42dc0c30b67e607bc8d8fa83ed61631b00b6478ced21b03d6a6c0f83ed31637b046c8f1bdba3601b686c8f816d90b13d0e36d3ed0503c136c4d80681ed09631b0cb6278d6d08d82a8ced09b00d35b627c1f694b155808dc6ae0c05db33c6f614d89e35b6a7c1467dea3360a363be678d4df7133d8b601963a73e2a5c86fa61b00da73e186c23a8ff05db48ea7bc1f63cf826db28e857c836dad8a88fd2ff9b68f2e920ae36910adbc4a4b8d7abd6acd75b17ff7ac3fb71f5419bae69f03309b49a6cf2318ef9a942df4526911fb297407e2e94a572a407ed67885def4f6a4d7e7296e5265acb25a14cada3fee920defad7593c7516734fc8fb89d9ea94c46c87a79c63b601cadab147c73c5d316617008787981d2f31dbe129e798dd0065edd8a3e3deae18b3ab80c343ccaef313b3a94a89d9ccf5af2070c71e9dfb74c598dd041cf1c7ec3889d98e4f39c76c0b94b5638fce7fbb62ccee058ef86376c23a3936e8f09473cc9e83b276ecd1b598ae18b38781c343cc364b3fdbe129e798bd0165edd8a3eb825d3166df078ef8637692a798ad96980d32f73283c01d7b748dba2bc6ec2de0883f669be4fa6cc7a79c63f6e7a0ac1d7b74bfa42bc6ec178123fe98dde0ebfa6c4a623633862308dcb147f7eeba62cc7ec9e4f5bdb1bf34f7c69e00db5f19db9360fb6b187b40b6bf31b6a1502f0f6d60a2b4810e4f39b781bf85b2762c3f65f25db10dfc11707888d97512b31d9e728ed96f42593bf6684c43578cd9af008787986d9298edf09473ccfe77286bc71e8dafe98a314be343f5f1c23f9ae385e160fb27631b01b6af1adb48b0fdb3b13d0fb6af19db28b07dddd84683ed5f8c6d0cd8be616c63c1f64d63ab04dbbf1a5b15d8fecdd85260fb7763ab06dbb78cad066cff616ce3c0f66d631b0fb6ef18db0463d3f7b1684cd5ef1a5b2970a583f8b66d0234a0a9c89a4f43beca2f4f651278d05775fcbeaa75dd5341c7eb5e0d3c351eea9e001f1de1a9019e71f1f384e349c7c7bfde701ba72c4d13e02b05f59ae0a15e45e08bd64df3e42f09366cd3131c8cb1ef9fd57eb4087cd1ba697e2230920dfb18ea73a9fde8be7948511baf87b614ee9fd15f1a38c85f09941937b8adec50c35606ffc7fe769c65f31497615c902f5a37cd93bf32a8cfb8fc33a63aca586331faea238ac017addbf65d06f94abffa64e519cfc477ad27df769f469ad7e6c1f744cb77b5e51bfb4e9ab2eddb2602b387f394aafb719e82c70f1cce536616b595b5cf37a81fcef53c6582b51cc7f39449b02ff4d01ec218a8b53868be1ab4ab8bd0ae16b4a332cf8176befaf149160fcd8f031eeabfb13fabcc334f2503df780c4bdb0dcfa5f038c0d7f6aab41869deb5bd2602a3eb58c5c3f94cd663951a60241b5ec74979d22c6abba698f8f6102b617f443ee8d89cda2ff92b81320b7ab4955d0b7da58f18c178a4a9a3e7bcf16fa754780e5e93030f6e3b0fe755559ee2b112afdf7c12c41b6b76bf54636915758dc7575f9eb278689efc09b3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300b337f66bc9f84e3b6a8dc38268cf6f8375fd7f9c377ec9975e13da0ef7a1d0f96aac4b130340e628455e71228535edcc6f63f603c983d96286a5bfa181b9b6d5b923f1c0f968f7b88d5168fedbbcca10fde9746cd7c8d81b2fb0c9ac7f169a45f25f0f86a8f55168fed1bfb8c1453cda2fa595f630ba2e2cc359eb02236dfa9265ff775f5fbccf43b41edfdd7384bd3f05da3964df7492ff468abb78ffbbcb9de77c6fd06e5e3bc8f9b041ef4157f3f9b6a373ea13868bfafc058f735568bda158d8da8b57c97409921c56ddba60efe9f0eeede3760195a37cd8f8065ebac7597fbab6fd67128b5c04df95e56ddc6033795790af6dd7f66f29ef681a95c9f91c07d72fcfb97cc7891540e3cb8bff371cce2693f5a89f118f778117b1ca4eb7899cae018520fe377b3ee8bc99f300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb330f367d63cf63d74bcf75bcd84314f636cc2fb19f42e36bc2ff693c56d7e7ddf03a47b4e23ad3ae333ca013ca3fcb3860dc73ee07ba55cdbd2d7bdb5a86d49feb88d7d2873e8a335ab736856ef89d1ee3368be1e1849bf3ae0f1d51ea3dedde1ea332a996a16d5cffa18bb902dce5ce3142a62f39d192fe2e3be2e8d17b1f75ff67b8d709c04d9f03e78d4fbc2aa2cdbfdee035ce3da288fef5c88bfdf4cb5bb076c8f15247f384ee22b465b1a27117f3f90aaf4b98fa0364a6342528eba5299af16b795fd9ac9e358a16a58d7771dffa729db9804ec53a7c45fe770fb4e35eba2ed3bc5e13b0dac31f9ae42df45d6bac95e02f9ff567c3703e9415a13bb6e23f81eaba8e56aace5925066b2a3fee998eb3fc5e2c16dac271d3bdf8038fb2e1cebf9ea93264768340234a2329edf03eb1ce76b8f55c67eb4b7558696c5f75bfe1fe8a3a2c6a4bbf601be8e17a2f60178bc60ef173a3276bcbb8f07ec63ce437c8c07a4759707edc7e405d6fa47c2fa89ab7710bd6ff9deb938acdfe798f57bbdf7ca75ee47bc38de90caf48773bf99269fcbb9dffd3a8f779dfbe1725175c77e21ee7d23c623b2e0fb22a9cc602b1eeb22b8273a967d326259d2ca7ef7219e97e23142fcef8dccf43753acba509b9a0c75a132cf5aed26fe63a6ccf1a7af7764d2b10ef541558eba529991d0d646997c02b613ee17ea1cffa729dbf127e9a7eb3c2dfe3a87db77ba59176ddf690edf33803526df55e89b8e3fc90fd94b205f0bfb132a477a90d6c45e069cc86e2f576b2d9784326947fdd331d77f9ac533cd62d6b13316e2ac0e9eb5f0d557a703b7462341a3eff9039bebbdc6ae7d8cafe7d1a2f63155c068f79bb89fcce7b372f6f55bd7f10995c163682a330ffad984a3ac7d5d9a968b737c3a3e0f84c785f83c90af73a464d05ecfa4c5e1d377b9e5bb3c8fbefb59befbe5d1b7682e9a73d29cd3377f70df520c8c3ece1bf1fa484718f17d04b45c0f60f4f5cc662a07c66a60c4fd1d317a78bf725567bf2984c73a3d81d1c7f3c6b95eafc6f79be33b0688d1c733dab9bea71a9fdba6e57a03a38fef1ae137943ac2e8fad65129fc7af8ae515567bf0382df3aea038c3ebe0d9208da7fcfe45e8c938091967b00187ddc474a04edafabdd8b11ef57d27209cf8cd9f6ed9ec7fea472bd06918f710551c71ae8dbc3f5ff148e4de88816f57e79b21efba06f0fd7bf422dea838e6b81f7e73cdc1b0ddbf1e41c78f01e222dd71f18a77a629c9203e35460a4e5060063da13e3d41c18d3c048cb3d048c1eae43868ce91c18f17a1dd91f06c6e99e18a7e5c0381d1869b94780d1c735c504f8ed08e30c60a4e51e05c6999e1867e4c038131869b9c780719627c6993930ce02465aee71609ced8971560e8cb38191961b088c733c31cece81710e30d272838071ae27c6393930ce05465a6e3030cef3c4383707c679c048cb0d01c6f99e18e7e5c0381f1869b92780718127c6f939302e00465aee49605ce88971410e8c0b819196ab2800c6a105c0f85401303e5d008ccf1400e3b305c0585a008ccf03e3a2f819c3f3d48539302e029e17e2e709355b9403cf0b7e79c2f7132e72f85a1cbfaf54ae755f0c3c4be2e709b7c5e21c78882109cbbde09731d55946cdb3347e9e50b32539f02c05cd963834f3c098ea2ca3e659163f4fa8d9d21c789681664b1d9a79604c759651f32c8f9f27d46c590e3ccb41b3650ecd3c30a63acba87956c4cf136ab63c079e15a0d97287661e18539d65d43c2be3e709355b9103cf4ad06c8543330f8ca9ce326a9e86f87942cd56e6c0d3009aad7468e68131d55946cdd3183f4fa859430e3c8da0598343330f8ca9ce326a9e17e3e709356bcc81e745d0acd1a1192746e489fb7de38d0e5fab18d49d1890b14f01303e50008c3806c147ff956d0c42a35f7d529dd5c7d7f6ca3606017daff6a4c5aaa0e35aacf6cb93750c02fa5ee3498bd541c7b558033c2f79d022013e3ac2430c4958ae7f01300e2800c6870a80f1e102607ca400181f2d00c6c70a80f1f102601c58008c830a80717001300e2900c6270a80f1c902607cd13363b6f39797bab8efa87395aeee3beabca4abfb96389738ef0ebe25ce25cebb836f897389f3eee05be25ce2bc3bf896389738ef0ebe25ce25cebb836f897389734ebe5ff6e03b013e68ca768d9f1892b0dc8bc2d8a51991a7223e9e4aac3bfa7a8541dd5f71f01479aa3bfa7a9541dd89a1d0185f2e00c6170b805174cc8c41ec0ca3e659eb89e7d51c78d602cf3a4f3c6b73e059073cebe3e709636a5d0e3cc49084e55e2c00c6970b805174141d39318a8edd47476114466114c6fbc158087db8ec6732e72e9d61d43c4df1f3849aadcf81a70934a3e55ef0cb98ea2ca3e6d9103f4fa859530e3c1b40b32687661e18539d65d43ccdf1f3849a6dc881a71934dbe0d0cc0363aab38c9a6763fc3ca166cd39f06c04cd9a1d9a79604c759651f36c8a9f27d46c630e3c9b40b38d0ecd3c30a63acba87936c7cf136ab629079ecda0d92687661e18539d65d43c5be2e70935db9c03cf16d06cb343330f8ca9ce326a9eadf1f3849a6dc981672b68b6c5a19907c654671935cfb6f87942cdb6e6c0b30d34dbead08c2be38b05c0f87201307ad631d55946cdb3dd13cfb61c78b603cf0e4f3cdb73e0d9013cafc5cf13c6d48e1c78882109cbbd58008c2f1700a3e8283a7262141dbb8f8ec2288cc2981be32b05c028db5a18b9327a38bfcafa7cca8e2eee3beaf994aeee3beaf994aeee5be25ce2bc3bf896389738ef0ebe25ce25cebb836f897389f3eee05be25ce2bc3bf896389738ef0ebe25ce25cebb836f897389f3eee05be25ce2bc3bf896389738ef0ebe25ce25cebb836f897389f3eee05be25ce2bc3bf896389738ef0ebe25ce25cebb836f897389f3eee05be25ce2bc3bf896389738ef0ebe25ce25ce39f9de19bfef54aecfb0ee041e1fcfd47aaa67a55eefeb665d9fc4a89fd6ea3396563b2cad9250e675d0ef331ef42b02bfb46e9a277fb9320f63c0ecc977ea41b58e3e507ff2f1b2a587f6bfcb53dda3fafa5d5ddc77545fdfd57d47f5f55dddb7c4b9c47977f02d712e71de1d7c4b9c4b9c73f18df992a0edb89ddeafa4d7b1dbe47b9a792aff0a2c4765e6f5cefc9607d2867cf8963624fb8aeee05be25ce2bc3bf896389738ef0ebe25cef9c539c6c3bc3cf004164f9085271ff70f72e119c38c6706339ec9cc782630e3a962c6339219cf66663ccdcc78d633e3e9c18c673e339e99cc785e62c6338519cf44663c29663c5b99f1ac64c6b38c19cf68663c8b99f1bcca8c6716339ea9cc78d630e399c48ca79a19cf36663c5b98f10c63c6b391194f13339e05cc78d632e399cd8c27cd8ca79619cf70663c35cc78b633e3798e194f23339e06663ccb99f12c61c653c68c27c98c6721339e39cc78a631e3a963c6338e19cf2a663c9b98f16c60c6b38e19cf08663c0f32e32967c6339619cf5c663cd399f1d433e319cf8ca79219cf6a663c2b98f12c65c6d397194f3f663c8b98f18c62c653c4802711dcfd8e9304fc7f27d88aad65f563616f0e6efbff1e632f8665f69a7c0fc7baf7808d9e35dbeb581675da0375499b7ce5a79b429dd0571ae6c95f1970ec65c2338a19cf22663cfd98f1f465c6b39419cf0a663cab99f15432e319cf8ca79e19cf74663c7399f18c65c653ce8ce741663c2398f1ac63c6b38119cf26663cab98f18c63c653c78c671a339e39cc781632e34932e32963c6b38419cf72663c0dcc781a99f13cc78c673b339e1a663cc399f1d432e34933e399cd8c672d339e05cc789a98f16c64c6338c19cf16663cdb98f15433e399c48c670d339ea9cc786631e3799519cf62663ca399f12c63c6b39219cf56663c29663c1399f14c61c6f312339e99cc78e633e3e9c18c673d339e66663c9b99f18c64c653c58c6702339ec9cc786630e319c38c6727339e790e1e0fdfcf0b7968bc2aad9be67732f1ed613b84df0dfcaca73aed33ebea65d64bfce4af04ca2cea93f9d5e3757059e2b2c71763acee038d767baa4bd43b99777771df51ef64eeeabea3dec9dcd57d4b9c4b9c73f2bd2f7edf297c3685a6226b3e0d79dcbff878a6c7533ddbeddbe3fe26f07e4babdd96564928f359d06fbf07fd5cc70b344ffe72651ec68019e3a22288372ede88bf4edffbd630e9fa86a52fd6eb4d4f9a46ed43deece2bea3f6215ddd77d43ea4abfb96389738ef0ebe25ce25cebb836f897389734ebedf32f918cf1b2bd187bef64be7036f81df774cbe2846bf7a5d6f9b75d1b79189e31de0a1323f02d7a2a5cd4b9b8fcbb7ecdb24cebb836fce716ee7e91e22beb7dbd73ddea858ccc7fde5fbe93b2a16bbbaefa858eceabe25ce25ce39f97e377edfe13dc49d41fb29db3dc47781e76d0f5a78aa6778ee74c0aad34eab4e492883e772073cd4b308fcd2ba69fe006c874263d63c34961ddfcf48e55e62c248b6b7fdf284edeba5a0fd94ad7d1d001e0feda0ca533dc3f6d562d5e92587ee540663b5c5433d5d6d87e65b603bb41418b3e6a167e7883501e55e65c248b677fdf284edebd5a0fd94ad7db5008f8ffec7533dc3f675d0aad3ab0edda90cc6ea410ff574b51d9a277f85c8ac79d69a3cb126a0dc5a268c643be097a7260175a6295bfb3a083c2d1ef4f154cfb07d1db2eab436b85b772a83b17ac8433d5d6d87e60fc17610666176316b9e7526bfd6fc26a0dc3a268c646bf1ca535399803ad394ad1f3b043c3efa794fba87fdd861ab4eeb1cba53198cd5c31eeae96a3b347f18b6432eccfb0a905974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974ee1cb3e6596ff2c49a8072eb993092eda05f9ef0f99df541fba9c89a4f43fe30f01cf2a08fa77a86e3de8f58755aefd09dca60fb3ae2a19eaeb643f347603be4c2bcaf009945e7ce316b9e269327d604946b62c248b6437e79c27eac29683f65ebc78e008f8f7ede533dc37eeca855a72687ee5406dbd7510ff574b51d9a3f0adb419885d9c5ac7936983cb126a0dc06268c643bec9527153e87b821683f65ebc78e028f8f7ede93ee613f76ccaad30687ee540663f598877abada0ecd1f83ed900bf3be0264169d45e72866d159748e62169d45e72866d159748e62169d45e72866d159748e62169d45e72866d159748e62169d45e72866d1b9fbe8ac799a4d9e581350ae990923d98e78e5a90eef3b3407eda76cf71d8e018f8ffb329e740fef3b1cb7ead4ecd09dca60fb3aeea19eaeb643f3c7613b7475e67d05c82cb1911f66890d618e6296d810e62866890d618e6296d810e62866890d618e6296d810e62866890d618e6296d810e62866890d618e6296d810e62866890d618e6296d810e62866890d618e6296d810e628660eb1a179369a3cb126a0dc46268c643bea97277cefc1c6a0fd946ddcce71e039e6411f4ff50cc7ed9cb0eab4d1a13b95c1f675c2433d5d6d87e64fc07610666176316b9e4d264fac0928b7890923d98ef9e509fbb14d41fb295b3f7602787cf4f39eea19f66327ad3a6d72e84e6530564f7aa8a7abedd0fc49d80ec22ccc2e66cdb3d9e4893501e536336124db71bf3c613fb639683f65ebc74e028f8f7ede533dc37eec9455a7cd0edda90cc6ea290ff574b51d9a3f05db419885d9c5ac79b6983cb126a0dc16268c643be1972795803ad394ad1f3b053c3efa794ff50cfbb1d3569db63874a73218aba73dd4d3d57668fe346c874263d63c5b4d9e5813506e2b1346b29df4cb13b6afad41fb295bfb3a0d3c3efa1f4ff50cdbd719ab4e5b1dba53198cd5331eeae96a3b347f06b643a1316b9e6d264fac0928b78d0923d94ef9e509dbd7b6a0fd94ad7d9d011e1ffd8fa77a86edebac55a76d0edda90cc6ea590ff574b51d9a3f0bdba1d09835cf769327d60494dbce84916ca73df324a0ce34656b5f6781c747ffe3a99e61fb3a67d569bb43772af326d4f39c877abada0ecd9f031e9ae6018fafb80c2c9ec0a10f4d6398f1cc60c6339919cf04663c55cc784632e3e9c18c673e339e99cc78a630e399c88c27c58c6725339e65cc784633e3799319cf62663cb398f14c65c6b38619cf24663cd5cc788631e359c08c6736339e34339e5a663cc399f1d430e36964c6d3c08c6739339e25cc78ca98f12499f12c64c6338719cf34663c75cc78c631e359c58c6704339e0799f19433e319cb8c673f339eb9cc78a633e3a967c6339e194f25339ed5cc785630e359ca8ca72f339e7ecc781631e319c58ca788014f22b87b2c4d02febf1f6c34e6633bd8de33f933602b76f8a07bc5e7c05662f2b48ede2a1d1d7cf7ba51275fe35cd0571ae6c95f1970bcc7846714339e45cc78fa31e3e9cb8c6729339e15cc785633e3a964c6339e194f3d339ee9cc78e632e3d9cf8c672c339e72663c0f32e319c18c6715339e71cc78ea98f14c63c6338719cf42663c49663c65cc789630e359ce8ca781194f23339e1a663cc399f1d432e34933e399cd8c6701339e61cc78aa99f14c62c6b38619cf54663cb398f12c66c6f326339ed1cc789631e359c98c27c58c6722339e29cc786632e399cf8ca707339e91cc78aa98f14c60c6339919cf0c663c6398f1cc73f0ecf7c4633fe745f3fb19f8d6f3b5a08b9e12f07f7c0eec4d4f8cfb2d469a7f131891d7b766e5164fb9a5d9fdf4adeb4ff72a1e34bfb8bdf0b9070edbab3c0f9af5b378fa599add4fdf5a0bbaf74f636c707be138680edb0bc7697ae89f6b12168f9e8aacf934e4cf79d6c7533d2b71dce42731ae576b75ded26abfa55512ca9c05fdce7bd0af08fcd2ba699efc09b33047316b1eba97eb1acfbb900923d9f03d2aefc7cf5393b078f494ad7f7cdfb33e9eea19f6631702b7eeef83ee540663f582877a16815f5a37cd5f70f8ae08e2d5e26207b4b8e8e0b998672dc85faecc670b909983ce9a87c6ae136b02ca2d62c248b6f3c073297e9e9a84c5a3a76cfde325cffa78aa67d8277c10b875bf04ba53196c5f1f78a86711f8a575d3fc07b01d7261be5080cca273e79835cf629327d604945bcc84916c1781e7c3d8795295098b474fd9fab10f3debe3a79e997eec72e0d6fd43d09dca60fbbaeca19e45e097d64df397613b08b3300bb3300bb3300bb3300bb3300bb3300bb330eb32c22cccc22cccc22cccc2cc9759f3d0b3e7c49a80724b983092ed03e0b9123b4fe6be03f2e829db7d872b9ef5f153cfcc7d87ab815bf72ba03b95c158bdeaa19e45e097d64df357613b08b3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300b336f66cd43dfb020d604945bca84916c9781e75afc3c35098b474fd9ee3b5cf3ac8fa77a86f71dae076eddaf81ee540663f5ba877a16815f5a37cd5f87ed20ccc2ec62d63cf42e44624d40b9654c18c97615786ec4ce93b97f8a3c7acad68fddf0ac8f9f7a66fab19b815bf71ba03b95c158bde9a19e45e097d64df337613be4c27ca100994567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974ee3e3a6b1efa4627b126a0dc72268c64bb0e3c1fc5ce535d99b078f494edbec3479ef5f153cfcc7d875b815bf78f40772a83edeb96877a16815f5a37cddf82edd0d5992f1420b3c4467e98253684398a59624398a398253684398a59624398a398253684398a59624398a398253684398a59624398a398253684398a59624398a398253684398a59624398a398253684398a59624398a39839c486e65961f2c49a80722b983092ed26f0b4c6cf5393b078f4946ddc4eab677d3cd5331cb7733b70ebde0aba53196c5fb73dd4b308fcd2ba699efc09b33047316b9e95264fac0928b7920923d96e01cf9df87952098b474fd9fab13b9ef5f154cfb01ffb3870eb7e0774a73218ab1f7ba86711f8a575d3fcc7b01d0a8d59f334987cabf94d40b906268c64bb0d3c1ee22ee4495a3c347f87816f3ddf68f265e617b757233072d85ec93c68566ef1945b9add4fdfbafeab4cfe41f38bdb6b153072d85ee579d0ac9fc5d3cfd2ec7efad65aac36f9bee617b7d76a60e4b0bdfaf9e549252c1e3d653bdef818783e1f3f4f781ef7710e3c9f079ecfc5cf53e5a99e957abddf07ec71ad576bf5054bab8f2dad92500619bee041bf22f04beba679f227ccc21cc58c7d21b126a0dc1d268c64fb1cf0f8e83774dd479975d1fa7baaf450ff36bfadf1fbadc16b0bbdcc7a8983fc9540999707b5b13d66d8cae0ffb4dd747d6e59364fcfbc55b9aef3d23cf92b0bdce7fabeaea1b65a3cb6ef32873e5ab39b0ecd6e7862b49f69a5f91bc0e8baceebeb79d1a8ebcef8bce81d4b476e9ae173c01f018fafe3e2568ba7d5a1858f3697ebf1e5470e9e4fe2e3a9c4d8405f3e6215fbb68ed4ddd57662ac7b15dec3425f1eda40b89f1a6dd645ebd7fb82dafe5e35afc1fe81f653a3ad3a97409949b09f9a92653f551cdc7d5db8c2d8a90cfdff1363b7d75111dcdf6b4b6590af35bf18a36493fd6ffb7b98b5968edc34c376dd0a3cad9e78a2ae89913fdc86750ecdea1868866d211f7176c7e2b17d27419756a69a619ce17183affeec5ed7f2701bd63b34ab67a019c7feacded2919b66aefe0c755ce8e05ec8809b639fb2d0d2919b66ae3e05755ce4e05ec4809b63bb5e64e9c84db37bb5ebc50eeec50cb839b6ebc5968edc34bb57bb5ee2e05ec2809b63bb5e62e9c84db37bb5eba50eeea50cb839b6eba5968edc34bb57bb5ee6e05ec6809b63bb5e66e9c84db37bb5ebe50eeee50cb839b6ebe5968edc34bb57bb5ee1e05ec1809b63bb5e61e9c84db37bb5eb950eee950cb839b6eb95968edc34bb57bb6e70703730e0e6d8ae1b2c1db96996effb0051f79bc81f6ec34687668d0c34e3d8a7345a3a72d32cdff701ee35061bb7e12a8766ab1868c6b13f5b65e9c84db37cf76751f79bc81f6ec3d50ecd5633d08c637fb6dad2919b6651fd596bfc3c398fb76ff5aa4fe63bcbad39f0e098291f31e5290e2a3d8da90ac7dbdbdfaf68b5b44a06777fd3c2e7d8c3a8f191e44f98855998855998855998855998855998855998855998855998855998855998f933e3f3ccade617df857a870923d9f09e948febfcbaee63ccba68fdfad9de5b03dafcc67fdf225589f75ce9b9e331569d4ba0ccff7dbc8ded63c386f71769bb456dcbfbf56e057c1f05de0bba9ff73b3f726876c3a1d9754f8c769f41f3d781d17effc3fd7ef7c41d4b476e9a45f5b3773cf144c5d91d87ef8ad87ca79a7cddd7d5ef22ec13dcbdffbae3d0d4471ce6faee0b6c17ad1e787cbde742d7e9ba55a75b569d92506618d4f37eb62d9ae6018faffe28b07802873e341533e399c18c670c339ec9cc784a99f14c60c653c58c6724339e6798f13cc18ce731663cfd99f1f461c6d38319cf7c663c3399f14c61c63391194f8a19cfb3cc785632e3799219cf32663c8f33e359cc8c6700339e0798f18c66c653c28ce779663cb398f14c65c6b38619cf24663cd5cc78f2710f34179e61cc782a98f10c64c6f310339e05cc7812cc787a32e399cd8c27cd8ca79619cf70663c35cc781a99f13cc78ca78119cf50663ccb99f10c62c6b38419cfc3cc781632e32963c69364c6d38b19cf1c663cd398f1d431e319c78c6715339ea798f10c66c6f308339e11cc781e64c653ce8c672c339edecc78e632e399ce8ca79e19cf78663c95cc785633e3799a19cf0a663c4398f1dc66c6b39419cf22663c8f32e3e9cb8ca71f339e51cc788a18f02482bb9f5dc2e7e56e818d9eb169055bb1637d342e97caebe3ceb383ef5e77b163dd371c0ca8d335a84bdae42b3fddd4eeb9a222b35e9a277f65c0718309cf28663cfd98f1f465c6f328339e45cc789632e3b9cd8c6708339e15cc789e66c6b39a194f25339ef1cc78ea99f14c67c63397194f6f663c6399f19433e3799019cf08663c8f30e319cc8ce729663cab98f18c63c653c78c671a339e39cc787a31e34932e32963c6b39019cfc3cc789630e319c48c6739339ea1cc781a98f13cc78ca791194f0d339ee1cc786a99f1a499f1cc66c6d393194f8219cf02663c0f31e319c88ca78219cf30663c3799f15433e399c48c670d339ea9cc786631e3799e194f09339ed1cc781e60c6338019cf62663c8f33e359c68ce749663c2b99f13ccb8c27c58c6722339e29cc786632e399cf8ca707339e3ecc78fa33e3798c19cf13cc789e61c63392194f15339e09cc784a99f14c66c6338619cf0c663cc5cc78e6593cf87f7dad81ae2f5e071bfdff3fcdcdfb72538feb96bf18ea5119f56d1e5f9ae194766812f56d1e0e3c3398f18c61c63399194f29339e09cc78aa98f18c64c6f30c339e2798f13cc68ca73f339e3ecc787a30e399cf8c6726339e29cc782632e34931e3799619cf4a663c4f32e359c68ce771663c8b99f10c60c6f300339ed1cc784a98f13ccf8c6716339ea9cc78d630e399c48ca79a19cf4d663c15cc780632e3798819cf02663c09663c3d99f1cc66c69366c653cb8c6738339e1a663c8dcc789e63c6d3c08c6728339ee5cc780631e359c28ce761663c0b99f19431e34932e3e9c58c670e339e69cc78ea98f18c63c6b38a19cf53cc780633e3798419cf08663c0f32e32967c63396194f6f663c7399f14c67c653cf8c673c339e4a663cab99f13ccd8c6705339e21cc786e33e359ca8c6711339e4799f1f465c6d38f19cf28663c450c78a2be8543ffef01b6ab267f1b6c574cfe26d82e9bfc75b07de8b0153b58c8df55b0d138972b60a37b7597c146d78bc8973edebd38f86ed662479d7a3858af38ea74d5b12c6e475a261dc4bb1dd1571ae6c91f7eabe72a139e51cc78fa31e3e9cb8ce751663c8b98f12c65c6739b19cf10663c2b98f13ccd8c6735339e4a663ce399f1d433e399ce8c672e339edecc78c632e32967c6f320339e11cc781e61c6339819cf53cc785631e319c78ca78e19cf34663c7398f1f462c69364c653c68c6721339e8799f12c61c6338819cf72663c4399f13430e3798e194f23339e1a663cc399f1d432e34933e399cd8ca727339e04339e05cc781e62c63390194f05339e9bcc78aa99f14c62c6b38619cf54663cb398f13ccf8ca78419cf68663c0f30e319c08c6731339ec799f12c63c6f324339e95cc789e65c69362c6339119cf14663c3399f1cc67c6d383194f1f663cfd99f13cc68ce709663ccf30e319c98ca78a19cf04663ca5cc782633e319c38c6706339e62663cf32c1ebca6580936ca57818df229b051be1a6c94af011be5c7818df2e3c146f90960a3fc44b0517e12d8284ff78cf0f99e7cbc178e7cd1ba69fe1a30de3679dc2694af03ee0f2c9be6bee489fb038b9be62f0123d5e103b051be1eb82f5a36cd7dc113f7458b9be62f0023d5e122d8283f196c949f0236ca4f05db54f04736ca4f031be5a7838df233c046f99960a3fc2cb0517e36d8283f076c949f0b36cacf031be5e7838df20bc046f985e6576fe3f72d9bdec6e74d3e1dc4bb8dc917ad9be6cf03236deff7c146f945c0fd9e65d3dce73c71bf6771d3fc3960a43abc0736ca2f06eeb3964d739ff1c47dd6e2a6f933c04875380b36ca2f01eed3964d739ff2c47ddae2a6f953c04875380d36ca2f05ee93964d739ff0c47dd2e2a6f913c04875380936ca2f03eee3964d731ff3c47ddce2a6f963c04875380e36ca2f07eea3964d731ff1c47dd4e2a6f923c04875380a36caaf00eec3964d731ff2c47dd8e2a6f943c04875380c36caaf04ee83964d73b778e23e6871d37c0b30521d0e828df2f83efa359e186f5b8cb72ddf781f178f2d0f5836cdf8ae27c6031623cdbf0b8c2d267f00780e78e269b1786cdf49d0650d53cd92606b019e5a4f3cd72c9e6b961638de0dcf05d658369fdb758dc548f30780b1c5e4f3d1365b2c1edb771274a965aa59126c2dc053e789e792c573c9d2029f73c173b75acbe673bbd65a8c765f8171867d85afb6d962f1d8be93a04b1d53cdb0cf6d019e7a4f3c172c9e0b96166590c7f3c73acbe673bbd6598c765f8171867d85afb6d962f1d8be93a04b3d53cdb0cf6d019e164f3ce72d9ef3966fdc8678bebfd0b2f9dcae0b2d469ac73ed76e0ba5908f9ba7dee2b17d27419716a69ab9da82cffeec9cc573cef28ddb10afcf2cb26c3eb7eb228b91e61702638bc9e3365ce489a7c5e2b17d2741977aa69ab9da4229b0c5cd73c6e239636981e3f6f07a5abd65f3b95da3fa8f45c0d862f2f9689b2d168fed3b09ba2c66aa191e43b6004f8b279e5316cf29cb376e43bcfeb9c4b2f9dcae4b2c469ac73ed76e0ba5908f9b67b1c563fb4e822e2d4c3573b5059ffdd9098be784e51bb7215eaf5e6ad97c6ed7a51623cd2f01c61693c76db8d4134f8bc563fb4e822e8b996ae66a0b3efbb36316cf31cb376e43bcbfb0ccb2f9dcaecb2c469a5f0a8c765b28857cdc3c51fd19f94b822e2d4c3573b58552608b9be788c573c4d2a20cf2783fa8c5b2f9dcae2d1623cd2f0346d2aa05785a3cf144c519f94b822ecb996a96045b3ef69b872c9e43966fdc8678ff6e8565f3b95d57588c34df028c765b28857cdc3ccb2d1edb77127459cc5433575b401d1b807ba565f3a9ed4a8b9be65700e362878e2b3df144f5292b41c7064b476e9ab9e211756c04ee06cbe653db068bbbc1d2d6158fa5908f9b27aa5d37808e8d968edc3473c56319b0ad02eec596cda7b651eda80118975bdafadcef456debc5a023e9d2c85433bcae89db9ad8560377a365f3a96da3c56db719dcd6d8661a3df1446deb46d0917459c55433ec7bf07cc8d7f947d4fdae7cf88eba07920fdf51d7c5f3e13bea5a693e7c47dd47cf87efa86b2af9f07daff36c9fbea3ae59e6c377d4795f3e7cdfb67cdfcea3efa8f16ff9f01d3526aaabb76fd99774af7dc9fdecd7baebbe44fa739efdf9eaf87da71241fb731a3d1559f369c8e3f9cb2a0f5a78aa67259e137e12e37a5de7d6cb2dadf0dc1acf517d9dffadb678689efc152233c645517cbe2bf13a0c7edf91ae8b54828dae8b55818dae8ba6c0d662f2d560a37b323560a3fb81e3c046f7a2e7838dc6412c001b8dc1b900361afff53ed868ece179b0d1b8d7f7c04663aecf818dc6fb9f051b3d6b72066cef98fc69b0bd6df2a7c0f696c99f04db9b267f026c6f98fc71b0ed37f96360db67f247c1f659933f02b6bd267f186c7b4cfe10d8769b3c5e7bdf65f2782de733268fd7f25e37f9f160db69f213c0f69ac94f04db0e939f04b6ed267f1b6cdb4cfe0ad8b69a3c7e5f748bc97f00b6cd267f096c9b4cfe22d8369afc64b0359bfc14b06d30f9a9606b32f934d8d69bfc34b0ad33f9e9605b6bf233c0f6aac9cf04db2b263f0b6c2f9bfc6cb0bd64f273c0f6a2c9cf05db0b263f0f6c1f9bfc41b07dcee4f13a68b1c9e3f57b7adf14def3a2775ee23d4f7aaf34de6fa76f7fb4808dbeaf85e38c4a4d1ec7b8d17ba5707c25bd4b12c7a9264c1ec79597993c3ed340dffdc06743e8db51f85c52b9c9e33371f4cdcf0360a3ef92be0b367af7d43b601b60f26f838ddee9fc16d8e83b176f828dbeddf406d8e87b9ffbc146ef98da07b6c74dfeb3601b68f27bc136c8e4f7808dbed1b41b6cf49dc85d60a377497d066cf47ec4d7c15661f23bc136d4e45f03db5326bf036cf4fdc5ed60a377466d031bbd77702bd88699fc16b0d1f70e36836db8c96f021b7dc76b23d8e8dd50cd607bdee437806d94c937816db4c9af071bbd9b671dd8c69afc5ab0d13efb55b0d13efb15b0d13efb65b0d13efb25b0d13efb45b0d13efb05b051dfff31d8a8efa7fe43b753dd7e6f99f97410df7194f6d71ab49fb21dcb1303f2c4796c9c041ef47533f6baa7c2e3f08fccba8acd7a295e6e82efebb1fbce9c03dc30ebea69d67bddf25d02654a07b66d9b6bf0ff34d48196c332b46e9a1f03cb5eb3d65d6eea7bc3537daf5b4cc47d0398a84cd9c0b6b25f32f952582646b6f07c96622d000d714a439e18fc68950acf2f3eca81e706f0c4df4e32e7d73e6202db56dce7d7f675193bd69250e63ae8e7ebbd58372c1e9a277fc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc2cc9f59f3d0fd04624d40b95b4c18c986f7ba7c5ce7c77bae78cfebe6c036bfbeefeff532eb1d6bd5b904ca7c6b601bdb6d932f83ffd3768bda961eee1366dd96dfbb5706f5c17b411eb665c873d3e2b17d9739f4d19a5d736876d513a3dd67d03c7ef385f4bb063cbedae3758bc7f68d7dc60da69a45f5b33ec625648b33d718848ad87ca79a7cddd7d563a1f4580e7bff75cbd214c740e03df32f419f44cbdc31bf09d0e70ee8733ffb007b5c02f653adc0187fbf996a770f98fafe3196a63806e2b78cb6340622fe7e2055e9731f416dd41e5b8175a532bf0ffbb93f34791c07740bd6f515c7ff69ca362601fbd4cbf1d739dcbe1f9a75d1f6bdecf0fd01b0c6e4bb0a7d1799447ec85e02f92f0f6c2b6b7f678ab42676fc1616b2dbcbb55acb25a1cc1547fdd341bcf5bf6cf15cb69875ecfc09c4d957e058cf579f742542a331a01195c1635e5ffbaf8f2c1ee2207fd88ff6b6cad0b22550e6ebd047e9ba503fdf6a7ea3f601be8e17a2f60178bc60ef17128e3aeaf8b835a08db7bb8ff5fb2fe82faec1ffd3c1a71febf75f1043aee3525aff58583f71f50ea2f72d54e67f59fb511fe793b82d6d3d712c2195f97fd00fa50665f2b99cd7ddaf73f4a8f33a1fdfcec4730d9ab2eddf711fe3a37ff154cf4ad7beeb9a55a724941906f5f4701ce3dc6fd1fc65f0edeb7ba9e4838ea1ae5b5a944099a4693bd47744e988d7256ee4a52e29e7f1e058475da8cc00a84b29d8e364f2b9ddf0384baff7a6a3ae54e6b1416d65079a7c02b613f6a5231cffa7295b7f40fae93a5f8cbfcee1f6a5e71669fb5e74f87e1f5863f2ddeefd1574bc4f7ec85e02f9e183dacadadfee24adf15bacf47c1db2dbcb5db7964b42994b8efaa78378eb1ff59d59f2a7636708c419c591cf7ef35284466341232a83f70aeceb2d51fb7d1f63e9b3edf76f02a3dd6fe2b18b4f36fb9cc5be5eee3a1ea43278ce426526403f9b7094f57f1f20736c83f5a27a04565d03abae9e8e5f6b8a2c3dd3e06734d8293e4967fa1f1ee3529969d6feccf7756ce2a67ae0fdbaab16f7354b57bc16351bb875dcdbe716789ceef99cb6068fc5ece3a1abc04e65165ac743f671dc6d475decfd747170f7b9e02756597c3629db7276fe236b19bc66e0ba268b7ddf1560499b7ce5a799aa2a2b91a9d8a185ebbea9ab4fa2768031675f47196dad07afa3acb1fa24bbacee936afbb7e943db11afb5dbd7df3d3d9b16b6b95b56fd6d8d3463abc9e336f4710fa33b3e9b561adb7a27ad2fc4f10ca5563e1edfa90db8afc8a6c555078faf6b9a515a5c75f88e4f8bf14daefd874b8b2b0e1e5fe798515a5c71f88e518b8dae6b0b2e2d2e3b787c9d6b446971d9e13b3e2d26b4bbae914d8b0f1d3cf15fd3c8ae05de13cb85f90a03e6522b1f8fef9af5ae7b772e2d3e70f0f8ba7717a5c5070edff1695135de75ceeed2e29283e7529eb5b8e4f01d9f161327b9aea9b8b4b8e8e0f1707d2dab16171dbe638c8b66bcbe964d8b0b0e9e0b79d6e282c3778cc787e3b35d33442dde77f0f8baf617a5c5fb0edf316ab14efb3edf012dce3b78cee7598bf30edff169b17e9cf6fd5e07b478cfc1f35e9eb578cfe13b3e2dd64dd4becf75408b730e9e7379d6e29cc3778ce750615c9ced8016671d3c67f3acc55987eff8b4d8101e6b9de98016671c3c67f2acc51987eff8b4a80cf7a9a73ba0c56907cfe93c6b71dae13bc6b808cf274f75408b530e9e5379d6e294c3778cfb91302e4e76408b930e9e9379d6e2a4c3777c5a6c0caf3f9de88016271c3c27f2acc50987ef18afb9847171bc035a1c77f01ccfb316c71dbee3d3a23adca71eeb8016c71c3cc7f2acc53187eff8b4680eef891ded8016471d3c47f3acc55187ef188f3bc3fee24807b438e2e03992672d8e387cc778dc195ebf38dc012d0e3b780ee7598bc30edf31f69de171e7a10e6871c8c17328cf5a1c72f88ef1b833d4e26007b438e8e03998672d0e3a7cc778dc19ee475a3aa0458b83a725cf5ab4387cc7181761df79a0035a1c70f01cc8b316071cbe63bcae15f69def76408b771d3cefe6598b771dbe633c1f09aff1bdd3012dde71f0bc93672dde71f88ef15e51780cfe7607b478dbc1f3769eb5781b7cfb1867825ad058ac5196162550e681c1995f1a8b15a523ad039fa1c5babc157b5d32e3cade8ca8cb5b50172ad317ea520af638993cd5358c19fa96028d4d6f75d495ca3c3cb8adeca3269f806d721bd635ccf17f9ab28d4122fd749df7c55fe73056e91b10b47df7397cef05d6987c57a16f1a9b4e7ec85e02f96707b795a572a407694decba8dd0373090dd5eee6d6bb92494d9efa87f3a88b7fefb2c9e7d1673f8dc03c419c5919fbe2bc3b43f42a351a01195c1317bad9e78ec3184c441fe7419dafebdad32b46c099419037d148e2ba57a2682bbc74deafabde1a97ee48bd64df3e42f09b61bc068d751c7c74330f693be0142df07d136fade077ebf6bbc65d3759de0a9aee48bd64df3138091be3f323eff8ca98e328eb31835cf240f9ae1375568cab6bf98043c133df078aa67b81faab5ea34c1aa5312cae0b38db51eea59047e69dd345f0bbe7d6c73d482f6c9c32d2d4aa0cc42ebf8314a475a878edff18ebaf8d2719cc533cee17bb2671d69ddd4274ece83ef3acb778de55bb76d8c313d656bdb75c05cef8159af774afceb0ddbf654b32e8a67f25303754a830671d5097d1759eb267b09e49b06dfcd407ad0be93d8753bc2d8895a6e92b55c12ca4c76d43f1d73fda7583cb88df5a48f1b5e84e34a0fed218c81c91607cdd780765322b49b0cda5119dcf75679d2aedee2a1f92ae0a1e3ab5ab0d1710a7ee392fe9fca03b7ddefd53ab8c986df3cac72308e8f9f313cceaab218697e3c3092ad1e78ea3c69666febe1963e784cd0db2a43cb964099fdb05f4e38ca86cf1d17b5d58bbea5f9498cf5d2ebede5412ffcce6700fa04968634114369d0f62dd038791e08dabef5b97bcfce5deb36352f6bcedcf624b4120b137f8b1cd528061be67b386c41d0fe93a62560a34f9af6045bb1250b7e4a95cad3a7137dc8857ad0ba4b2cce526089d3377e0e96a66ca1d31b787c84b20e1dfa24ac099dc65d5bf634637cf4b4383b133bfa7f3db2948b5a17c5418987ba2313ad9be6c99fd6873e8ffbfabaa66dd3766ddabba3f9b53dbb11d66e5c982fb244b07f5dcb60906063a2f5f4b4c4e913bf3835d8786dbe00fc05c012189ed2f879c240a56f0837addbbe7dc9def5dbb734cddefb5ad39e2d3b5f43457b5bca45a96d37793db9ba3a2c6b97efe5b0d9137eb1b937d8e88bcda56023ff7dc0461c0fc0ffec2de1a54d0c83f55318ebff95980af73215a210a4dd90ee4f749bd1af4dd5bb7ffd8968fd4968bdf9f4dbe2f4279ef5279df5279cf5279bf5279af52799f5db24f413defac8614890f984f29341e615b14383cc2790f5278f9f09da3e69aca7df055efd09637da8a13f51ac3f49fc7c90b954383ac8bc564dbfc6421fb2ea432b7d98a74f6bf421b83e2dd7875efa7281be74a40f63f421a23efcd1872cfa105c1f7a4f355a4f0b329f34d79f309f19643e51ae3f49ae3f413e37c87c627cbe4a0b82cca7b6170599cf07ebcf87ebcf76ebcf79ebcf7cebcfcfebcf82ebcf85ebcf88ebcfcceb4f0feb4fd0af0e329fda7e29c87cb6f89520f399e3b541e6b3c8eb83cc6794370499cf2eebcf31ebcf346f0e329f75d69f7bde16643e0fbd23c87c4e5a7f665a7f7e5a7f965a7fae5a7fc65a7fde5a5f72d7b71af425787d795b5f7ed5b740f4ad1f7d6958dfb2d4b770f52ded962033e4e150901912a38708e921537a08991e527722c80cb9d44350f5905c3d44590fd9d643d8f5907efd88837ee4433f02a31f09d28f48e947c6f42374fa3148fd58a17e4c563f36ac1fa3d6977df523e8fa56a0bedcdb1a642e09df09329f5ffe9c4a9f57e9fb54fa824adfafd20fa8f4832afd904a3facd21755fa11957e54a51f53e9c755fa09957e52a59f52e9a755fa19957e56a59f53e9e755fa0595bea4d22faaf44b2afdb24abfa2d2afaaf46b2afdba4abfa1d26faaf45b2afdb64abf1364e2f1f754fa7d95fe40a53f54e98f54fa6395fe44a53f55e9cf54fa7395fe42a5bf54e9af54fa6b95fe46a5bf55e9ef54fab24a5f51e9ef55fa0795fe51a57f52e9ab2afdb34a5f53e9eb2afd8b4adf50e99b2afdab4affa6d2bfabf42d95fe43a56fabf49da0ed33e5d8790c363dce5033bf6ecf9ee61dafefa9d8b3b362c7deed7bb6bcbefd8d8a7d5bf66caed8f9d9e65d1bb7efdc870b7fd92cfcb8999fb66bd7ba372ab6bcb6a1797fc5cebd7b2a766eac58bf73ef6b1bdaed2cffb75968f0dd1ed76dd810edacb4c7a7202debd139a783cc72f4a5fa79d9ebf6448f4e08f24c67169adbc90acd357b203a0d5b9e39e6abd8bd7de79e8aca8ad7d45fb573ddb9af79c3980afcdf6e25f2ee3d15bbf7acdbb5a762e3ae9d3b2aaac6e07a17f6e94425bed8c70f4c6ff35ea24e85ca6f0eec444dbe36b0739be33f3f0de9ffeca4d3b2419da861ffce2c347e50e708d3832265d9bd77fd9e5deb9af6442f3cebd32cbca033d55cddc96af619dc0967e59d5968f4e0ce112ee88cb37d39380bfe3f4095c818d45505009b2d6c6f00000027451f8b08000000000000ffed9d69741cc5b5c77b24595e46832d5bde37b1056fb246a3dd968d8cf70dcc8e018317c960b02d638b7d271b092121fb4202bcac2421fbbeef09d9f7852424908484247c7839efbdf3ce791f38afaa5537fa4f51dd6886be72b5e6f639d7537d55d3f7776fdfaaeea9aa6e3f1304412618daaa959c143c77a3bff79acffc0bdb5a123c569e93339312ceaa947056a784b326259ce352c2599b12cef129e19c9012ce8909726ab6aaa0784b9a7712435c9366cca62ca6752988692e65313d2105319d1ca4a38f9a9212cefa94704e4d09e7b4947036a484737a4a3867a48473664a3867a58473764a38e7a484736e4a38e7a584737e4a3817a48473614a381b53c279624a384f4a09e7c929e13c2541cec5c079aaf97c91f93ccd7c2e329f547789f95c6a3e97191f6bcc7e9392e54a9a359ff5373dd15050d2aaa4cdfa5bbb920e259d4abaccdf1acddfba95ac50b252498f92554a562b39ddc4628d923394ac55b24ec97a251b946c54b249c966255b946c55b24dc97625672a394bc90e25672b3947c9b94ace5372be920b945ca8e4228b65a7928b955ca2e45225bb945ca6e47225bb95ec51b257c93e257d4afa95ec577285922b951c50729592ab951c547248c96125034a8e28b946c95125c7940c2ab956c9754aae57728315b31b95dca4e46625b7589cb72ab94dc9ed4aee5072a792bb94bc58c94b94bc54c9cb94bc5cc9dd4a5ea1e4954aee51f22a25f72a79b592d728b94fc96b95bc4ec9eb95bc41c91b95bc49c99b95bc45c95b95bc4dc9fd4ade6e58a821bc43c9034a1e54f29092ff50f24e25ef52f26e25ef51f25e25ef53f2b092f72bf980920f2a7944c987947c58c947947c54c9c7947c5cc927947c52c9a7947c5ac967947c56c9e7947c5ec917947c51c997947c59c957947c55c9d7947c5dc937947c53c9b7947c5bc977943caae4bb4abea7e4fb4a7e60c5fc874a7ea4e4c74a7e62fe46e34b3f55f23353feb9f9fc85f9fca5f9fc95f59d5f2bf98da57b4cc96f2dddef94fcde941f379f7f309f7f349f4f98cf27cde79fcce79fcde75fcce753e6f3afe6f36fe6f369f3f977f3f90ff3f94ff3f98c92fe86a1f2846078eb0d12ea93dafafbf4dc0405fbd4a078d3b1a8367fa3cf46a3af31fbf449b11b67f6c759fa5ab35f6b1d6782d99f60e9ebcd7ebda59f66f6a759fae9667fbaa59f69f667823e1bc018a5d16b5db551654047795805ba7141714cb4ae960e07baf141712cb48ece632de8261add78d04d32ba09a0cb1add448a99923aa3eb0d92ca89fc1e7ddc5cd2c735f3362724cfbb4f1f773213ef94e479fbf571eb1978757e4c35c79a027933cde8ea4167ba95602ae8a61bdd34d0cd30ba06d0cd34bae9a09b6574334037dbe866826e8ed1cd02dd5ca39b0dba7946370774f38d6e2ee81618dd3cd02d34baf9a06b34ba05a03bd1e81682ee24a36b04ddc9467722e84e31ba934047fde7c9a0a3fbbb538c4ef7093519f88ed1537f147e87fa5cd09d46fd2de816515f0bbac5d4cf826e09d826dd52e84348b7cce8a83fd27feb32e5de20a9fc2ff4e9e376277d5c75647ddc95c91f379cd3ea0986e3da0b76ba2156ab4c39c175332d683b6384ec90be06ca1ba12ed5a378d03585d8f5b5638529af8af95e97f5bd1cd459e1f0bf3748d6ff9516cf4a8b791cf8cf93b3ad2d92b323de4aced9f3a1ae9d7b747f331673760b7030e46cbbe4ec88b79273761fd4b5738fee71c762ce5e041c0c39dbcd93b385bce4ecd0585710b8738f7ee78cc59cdd0f1cc9e76cbbe4ecc8b79273f676a86be71efdd61d8b393b081cc9e76c67b7dc1b8c782b3967ef85ba76eed1b8cb58ccd9bb80832167fba49f1df15672cede0f75eddca331c0b198b3f70147f239dbcd94b3ad92b3c1d0bc6510b8738fc6a3c762ce3e001cc9e7ec3e199f1df95672ce7e06eadab94773236331671f018ee473b68f6b7cb620393bb45e2308dcb947f3746331673f6fca7a6eece7666e6c01e87e61740b41f74b586740ba5f19dd89e017431be8943630e2ade436f06ba86be7f249a63c16dbc00f80832167bb256747bc959cb34f415d3bf768fdc258ccd9df020743ceee959c1df15672cefe17d4b5738fd6d28cc59c7dda94f5fdc2e3e67e6111e8fe60748b41f747a35b02ba278c6e29e89e34ba65a0fb93d13581eecf46b71c747f31ba66d03d657479d0fdd5e85a40f737a32b80ee69a36b05dddf8dae0d74ff30ba76d0fdd3e83a40f78cd1751a9d9ec7a235558f1add04f0bd3748eedc86eba882e22d63edf74279192f4f3e17143f2740b696276fab55fbde148cdcf7e5c0d3cce07b166c8c84a71978f2c9f384bf475b923f6e788e9bac9866c15613f85560f02b03b6e8d8b44ff672a0c37ea3e0606c4d9eb190015b746cda6f0546d2613f46cfe150fbd17df3bccc302f435b0aafcf68af1738c85e0dd4c9340cd76d346c75f077ea03eaa08cfd7cded231e56a982bf870562fecb70023f9981f7dc6c248199b2d46ae7e2303b6e8d8b6ed3a477c74cc5a1d316b63626cb51869bf0d18297eada3cf581829a3dd2f30f5492d23ed93282ef9d18fd988ce6b0e7478afd7e6606c4f9e313caf6d1623edb70323e90ac0c3753d8c6aafbed8e6b80fc17ca66b165d7fc85e0dd469ad1eaebb09aea70c7d68a1d47b53ecd3933f4f853c5ecf46c2c37cee5a98f2318f7de7b341b2b966b7f9bc152b6cf3d89773f593517d39d91366611666611666611666611666611666611666611666611666611666611666ff99a3e6e55ceb198e2723e95a8087639c3f7cf7943916ce013d06f33ac9cf5b14f238574feb1817593ed7409dffcd0cb33dee58278173e7cb2d1dd33aa5f05ce23aa55ed8277bb86e03d74d31ac3d0979965a3cb6ed3a477c7c5c47e2d31a8da8755a3ec52c073a5c0fd7c4c41395674d0edb8d89d92eece3693b85bc7ecf8f7e571ef527761bc1b56f4b2c9dee933aaa87fde6c88152e79df1ba41e524e77131dfd056f2eb6d0a45eb13aa82e26b05de5330ac51299aafa6b511ed96ed1aac5315fcfbdc74c0df7b83e7ae11c23a746cda5f04dfedb08e3d99cfdfd8feb01db8a95c6bf9b60cb8a9cea4aa611f3f67ca4cf733055c3f1b006f60f9441baecf48fe7e6f68bd48a1049e36e0e158bbc6745f9bc77c4c7abd4887152bd7fd32d56987f87530c42f6ecd1ad91366611666611666611666611666611666611666611666611666611666611666ff99f1fd17c48acf48b778c2384a6b6cc2f90c7a6f11ce8bdd5f356c977b0e90e69c165b3ee333ca4f570db33d68caf88e00d7f3ee782eb9e6d6a2ce25d9ab0b9efb9c3ed3b91cf1bb1fda1c31eb70c4ac9389d1ee3368bf1318297e1dc0c3d51edb2d1edb36f6196d9ec62caa9fe55abf129567ae750a8d89d91e5a2fc231af4beb45eceb578b15535c27413a9c07c777abe07a2cdfdeff62af5dc07e0ad76825df6f168ae680edb582640fd7497cc3c496d64924df0f14f29cd7086aa3b426a4e0f095ea3c0ad7b9ef9932ae156a81633de6f83b6d716b12b04f65785766787ee9dd8d747ebb1db657026b42b65bd076c608d9217d0d947f53355cd77e1724c59ad8751bb1df57e9fa5edefa5e0eea7439fcef0d92f5bfdbe2e9b69875eefc10f2ec31b8d7e3ea93ba02778c16418ca80edef332ac2972f691f69a695d87ceff78ab0ede9f529d27a18f8a5a93ee7a0f20d7fd42d47b00f17ec1754f63fb68af1daff4f580ff82fea203fede1bbcf0f580ff821c72dd97d2f117c3f1896b7c107d6da13aff635d47b9dad6f3bdf7caf5db8f7871bd21d5f93fe8ab969975b951bf635ccf5970fd6e887aee83ece13d5529be63bf90f4b511f31159c81ee6638d8935e5634704f772c777c7477c976245ebcbf177b21d3f1d87c4df116efa9b6ecb176a535de0cbbfafdfe00bcf3dd3d0fd67f2be16df0f511fd4eaf095ea4c8577c135987216ce13f695273bfe4e5bdcfd27bed7bc27799fc3f34befefa6f3dbe3b0bd1a5813b2dd82b6e9fe93ec90be06ca27550fd7a57a140f8a35b1eb3642f770c86e7fafddfa5e0eeaac74f8df1b24eb7f8fc5d36331ebdc99097976323c6bc1d557af8c88d1628811d5c1671deddffff85b1eaf31c7ebb73cbef313fbf66510d3d17a67aa3d7eebba3f596cc518ef4f5aa09fcd3aeadae3d2740d49727d3a3e0fb414ece2f3404b99e2990b8ae399b338386d4fb66c4f1e45dbf596edfa51b42d319798fb14739ffe2f0cfc3f2baa52c0589d02c69a14308e4b01636d0a18c7a78071420a1827a68071520a18b3c0783cafed0cf12978f6ff3dc5de6ba06d86f73984b158168c3c164dbc3cb1f73e689be11d2a25ff7f03ccff17564bb9ff17560ebe3735058cd352c0d89002c6e929609c9102c69929609c9502c6d929609c9302c6b929609c9702c6f929605c9002c68529606c4c01e38929603c29058c27a780f19414309e9a02c60929605cc2cb58289751f370bc47331b14afe37a3e1ee6f77a86ef2774bd4394e3ff9d2dd577e677fab694fb0e3c5cbfc0fbff28beb0f7f471ac4f28f53d7d71fff7341363a15c46aef526b8b665243cae3528795ec642b98c5ccf77e0f38623e171fd3fb8bccfdb0cc5ac1c46aef558a5ae17c4e7f0da1d3163602c94cbc8b5a61f9f371c098febb9c03c2f63a15c46aeb5af59b031129e2e8859a723660c8c857219999edd0a63d655020f3ee3d4e588190363a15c46cdb3822966dd25f0ac8098753b62e61323f224fdbef16e872d8e67e24af59d189071620a1827a58011d72070f45f716b10ba79e35328373e5ce72b6e0d02da667806238c05aeb97fbe58f4f0f2c4ae4140dbab986281cf443c5f2c56010fc7331a59b031121e62c8c1f7a6a680715a0a181b52c0383d058c3352c03833058cb352c0383b058c7352c03837058cf352c0383f058c0b52c0b830058cf85b95e15e31f6f7cbaa316e3beab7ca58b71df5bb64acdb963c973caf04db92e792e795605bf25cf2bc126c4b9e4b9e57826dc973c9f34ab02d792e795e09b625cf25cf7db29d86317e611c7b8cc8d3981c4f1e7d475ba77be0fbe90e9e0c93ef68abd703dfa99c36c6d529605c91024689e3d01ac4721835cf1a269ede1278d600cf194c3c6b4ae0390378d626cf13e6d41925f010430ebeb722058cab53c028719438fac42871ac9c380aa3300aa3301e0fc634f4e1729d19faed520ea3e659973c4f18b3b525f0ac8398d1f7f2bc8c85721935cffae479c298ad2b81673dc46c9d23660c8c85721935cf86e479c298ad2f816703c46cbd23660c8c85721935cfc6e479c2986d28816723c46c8323660c8c85721935cfa6e479c2986d2c816713c46ca323660c8c85721935cfe6e479c2986d2a816733c46c9323660c8c85721935cf96e479c2986d2e81670bc46cb323660c8c85721935cfd6e479c2986d2981672bc46c8b23660c8c85721935cfb6e479c2986d2d81671bc46cab2366be32ae4801e3ea143032c7b1502ea3e6d9cec4b3ad049eedc0732613cff61278ce049eb392e70973eacc1278882107df5b9102c6d5296094384a1c7d629438564e1c85511885b134c6d353c028e75a187d6564f87d15fb7cca9963dc76d4f32963dd76d4f32963ddb6e4b9e47925d8963c973caf04db92e792e795605bf25cf2bc126c4b9e4b9e57826dc973c9f34ab02d792e795e09b625cf25cf2bc1b6e4b9e47925d8963c973caf04db92e792e795605bf25cf2bc126c4b9e4b9e57826dc973c9f34ab02d792e795e09b625cf25cf2bc1b6e4b9e47925d8963c973caf04db92e792e73ed9de91bced42a9cfb0ee009eb31862c1e4675e1ff76c73ac67138c9f8ed53956acceb46295833a6743fcce61885f06ecd2b1699fec95cafc220f98996c174e50c79808fe938dd5563cb4fd73997c8feaebcf1de3b6a3fafab16e3baaaf1febb625cf25cf2bc1b6e4b9e47925d8963c973cf7c536966b82e1fb767abf923ec679a63cceec53fdd3e17b54a765fcd0e7e440da10876d694372ada804db92e792e795605bf25cf2bc126c4b9efb99e7e7276f3b9c1bc3df177a8b9b1b3b1f78ce638805939f79edd305964fe75a3ee5a00ebeb3f602063f3360978e4dfb17c079481bb3e65965cac49a857aab3c6124dd79bc3c61fb5a15146f71edeb02e06168072d4c7e86edeb42cba7558eb8531dccd50b19fc74b51ddabf10ce43da9873608f58b341f139f5819174e7f3f284edab3728dee2dad785c0c3d1ff30f919b6af8b2c9f7a1d71a73a98ab1731f8e96a3bb47f119c87b4316b9e35f077bd65a1de1a4f184977012f4f5b167ca62dae7d5d043c1cfd0f939f61fbda69f9b4c61177aa83b9ba93c14f57dba1fd9d701e8459985dcc9ae70c5326d62cd43bc31346d25dc8cad396cf82cfb4c5f5633b8187a39f678a7bd88f5d6cf9748623ee540773f562063f5d6d87f62f86f3500af3ea14324b9c25ce51cc1267897314b3c459e21cc52c71963847314b9c25ce51cc1267897314b3c459e21cc52c71963847314b9c25ce51cc1267897314b3c459e21cc52c71963847314b9c25ce51cc1267897314b3c459e21cc52c71963847314b9c25ce51cc1267897314b3c459e21cc52c71963847314b9ccb63d63c6b4d9958b3506fad278ca4bb8897277c7e676d50bc65acfd5e285f0c3c3b19e2c3e467b8eefd12cba7b58eb8531d6c5f9730f8e96a3bb47f099c87529857a79059e25c1eb3e65967cac49a857aeb3c6124dd4e5e9eb01f5b17146f71fdd825c0c3d1cf33f919f663975a3ead73c49dea60fbba94c14f57dba1fd4be13c08b330bb9835cf7a5326d62cd45bef0923e92e66e52984cf21ae0f8ab7b87eec52e0e1e8e799e21ef663bb2c9fd63be24e7530577731f8e96a3bb4bf0bce4329ccab53c82c71963847314b9c25ce51cc1267897314b3c459e21cc52c71963847314b9c25ce51cc1267897314b3c459e21cc52c71963847314b9c2b27ce9a678329136b16ea6df084917497b0f2b486f30e1b82e22d6ede6117f070cccb30c53d9c77b8ccf2698323ee5407dbd7650c7ebada0eed5f06e761ac33af4e21b3e4c6e8304b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e486304731fb901b9a67a329136b16ea6df484917497f2f284ef3dd818146f71eb762e039e5d0cf161f2335cb773b9e5d34647dca90eb6afcb19fc74b51ddabf1cce83300bb38b59f36c326562cd42bd4d9e30926e172f4fd88f6d0a8ab7b87eec72e0e1e8e799fc0cfbb1dd964f9b1c71a73a98abbb19fc74b51ddadf0de761b7300bb38359f36c366562cd42bdcd9e3092ee325e9eb01fdb1c146f71fdd86ee0e1e8e799fc0cfbb13d964f9b1d71a73a98ab7b18fc74b51dda277bc22ccc51cc9a678b29136b16ea6df184917497f3f214b2e0336d71fdd81ee0d9cd101f263fc37e6cafe5d31647dca90ee6ea5e063f5d6d87f6f7c279481bb3e6d96acac49a857a5b3d6124dd6e5e9eb07d6d0d8ab7b8f6b5177838fa1f263fc3f6b5cff269ab23ee540773751f839faeb643fbfbe03ca48d59f36c336562cd42bd6d9e30926e0f2f4fd8beb605c55b5cfbda073c1cfd0f939f61fbeab37cdae6883bd5c15ced63f0d3d57668bf0fce43da9835cf765326d62cd4dbee0923e9b09fa2ad0a18b7333106166360c507791678c633cb339ea99ef14cf48ca7da339ea59ef1747bc6d3e519cf42cf78167bc633db339e82673cd33ce359ee19cf24cf78da3de3a9f18c6799673ca779c6b3d2339e399ef13478c6b3c4339eac673ce33ce369f28ca7c7339e0ecf78e67ac6d3ea19cf74cf789a3de3a9f38c27e7194fad673c3b3ce399e719cf0ccf784ef08c67b2673ce33de3e9f48c67be673c6d9ef1ccf48ca7c5339e299ef1d47bc633c1339e459ef1643ce0c906cf5d379085bfef005d95f55d7d7dd9d030fc779aa7ad82eff49b72b5e3d87da0a379dd7ec777314e5c73cf68ab17f6c95e1d70f47bc2b3c8339e099ef1d47bc633c5339e16cf78667ac6d3e619cf7ccf783a3de319ef19cf64cf784ef08c6786673cf33ce3d9e1194fad673c39cf78ea3ce369f68c67ba673cad9ef1ccf58ca7c3339e1ecf789a3ce319e7194fd6339e259ef13478c633c7339e959ef19ce619cf32cf786a3ce369f78c6792673ccb3de399e6194fc1339ed99ef12cf68c67a1673c5d9ef1747bc6b3d4339e6acf78267ac633d5339e599ef12cf08ca7cac1b3838927ead9dd1d9ed866380f797ddcfd4c3e5d618e556b8e4bfc64af06ead49b81473ddf80df252e7bbe1dc796af801871bd372167f1d0febe316e7bb2657b7285d8aeb76cd757886dc973c9f34ab02d792e795e09b625cf25cf7db4fd6c72b6db31cfaac0960feba3e5fd49f13cf2fea4789e6acf78e4fd49f13cf2fea4781e797f523c8fbc3f299e47de9f14cf23ef4f8ae7f1edf978799f533c8fbccf299e47dee714cf23ef738ae769f28c47dee714cf23ef738ae791f739c5f3d479c693f38cc7b7f739c9fb93e279e4fd49f13cf2fea4781e797f523c8fbc3f299e47de9f14cf33c1339e459ef1643ce079bef727e17b8f68ade53ed0d17aceb8f72c65e13857808ec607e918fa7a7576c37319aae03b573ab8f63bec919d2b1ddf1d8db8a3ad5ed8277bf83ea62b3de159e419cf04cf78ea3de399e2194f8b673c333de369f38c67be673c9d9ef18cf78c67b2673c2778c633c3339e799ef1d47ac693f38ca7ce339e66cf78a67bc6d3ea19cf5ccf783a3ce3e9f18ca7c9339e719ef1643de359e2194f83673c733ce359e919cf699ef12cf38c6787673c359ef1b47bc633c9339ee59ef14cf38ca7e019cf6ccf78167bc6b3d0339e2ecf78ba3de359ea194fb5673c133de399ea19cf2ccf781678c653e5e0e17a27522e18de7a617f34dec7f47cb6f5fe52888bdeb2f0f7d1784e7287c548fbb8ce0079896729134fd473ef4b3db0adfda7df5a34679185bfe373385c39b5d462a47d574ee13ac2654c3c51cfeb2ff3c0b68e459329d31c7716fede048c5c39b5cc62a47d574ed5f3f2b465c167dae2d6f6609be338874c7ee6b1fd25f88e88bc8ed5762b564d56ac725067349e138cea0fc89e300b7314b3e6a1b11662c5ebd9683c273d1246d7f5958127ec1f9707c55b5cffb81d7838ae1f4c7e86fdd801cba7e58eb8531dccd5030c7ebada0eed1f70d86e0c928dc5552388c5550e9eab46391664af54e61d2964f621ce9a87d64e102bae276ef68491744b7979c2feb13928dee2fac7ab8087e3fac1e467d8275c6df9d4ec883bd5c1f67535839faeb643fb57c3792885f9400a9925cee5316b1e5a534dac59a8d7e20923e9b6b3f214f259f099b6b87eec6ae0e1e8e799e21ef663072d9f5a1c71a73ad8be0e32f8e96a3bb47f10ce83300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb330fbcdac79e8591562cd42bd82278ca4bb8a956768dea110146f71f30e078187635e8629eee1bcc321cba78223ee540773f510839faeb643fb87e03c08b3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3dfcc9a87dee94aac59a8d7ea0923e9aee6e5099fdb6a0d8ab7b8798743c0c3312fc3e46738ef70d8f2a9d51177aa83b97a98c14f57dba1fdc3701e8459985dcc9a87feaf0762cd42bd364f18497790956768feb42d28dee2fab1c3c0c3d1cf33c53decc7062c9fda1c71a73a98ab030c7ebada0eed0fc0792885f9400a9925ce12e7286689b3c4398a59e22c718e6296384b9ca39825ce12e7286689b3c4398a59e22c718e6296384b9ca39825ce12e728668973e5c459f3d0ff5145ac59a8d7ee0923e90eb1f2b486f30eed41f11637ef30003c1cf3324c710fe71d8e583eb53be24e75b07d1d61f0d3d57668ff089c87b1ce7c2085cc921ba3c32cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc5ec436e689e0e5326d62cd4ebf0849174877979c2f71e7404c55bdcba9d23c033c0101f263fc3753bd7583e7538e24e75b07d5dc3e0a7abedd0fe35701e8459985dcc9aa7d39489350bf53a3d6124dd002f4f210b3ed316d78f5d033c1cfd3c939f613f76d4f2a9d31177aa83b97a94c14f57dba1fda3701ed2c6ac79ba4c9958b350afcb1346d2e175b98b892767f1e41cb1385eb6f57eb729d799cf2cfcbd1b18b9fac32e8b91f631c7919778ba9978265b3c931db1385eb6b5ff2b4df904f39985bfaf0446ae9ceab61869df955393816725134fbdc553ef88c5f1b2ad63d163ca53cc6716fede038c5c39b5d262a47d574ed5034f0f134f549fd4330ab6a3dad768d88eca95d1b02d318f8e3943bb0bc7077a82e22deebe1aaf2d1c7d15939f79d7f5bbc7f209afdf788f7abcae4fc22ccc51cc4cf7b96d59cb36c527b07868bb863916a3f93bbbdbf2290dbfb3e3980fa49059e25c1eb3b67d2c79db6d59cb36c527b078683bc61c0b263fc3fe603070c798ece5a00ee6e920839f19b04bc7a6fd41380fa5301f4821b3c4b93c666dfbdac46d0fbd7f186d537c028b87b66b9963c1e3e7507f705de08e31d9cb411dccd3eb18fccc805d3a36ed5f07e74198855998855998855998855998855998855998855998855998855998855998fd66d6b6af4fdcf6d0f83ddaa6f804160f6dd733c782c7cfa1f1fb1b02778cc95e0eeae039bf81c1cf0cd8a563d3fe0d701e84599885599885599885599885599885599885599885599885599885599885d96f666dfbc6e46d87cfe3a06d8a4f60f1d07623732c98fc0cc7ef6f0adc31267b39a883e7fc26063f3360978e4dfb37c17910666176316bdb37276e7b683e0f6d537c028b87b69b9963c1e3e7507f704be08e31d9cb411d3ce7b730f89901bb746cdabf05ce4329cc0752c82c71963847314b9c25ce51cc1267897314b3c459e21cc52c71963847314b9c25ce51cc1267897314b3c459e21cc52c71963847314b9c2b27cedaf6ad89db6e0dc7efd136c527b07868bb9539163c7e0e8ddfdf16b8634cf6725007f3f436063f3360978e4dfbb7c17918ebcc0752c82cb9313acc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc3ee486b67d7bf2b6c3e7d9d136c527b07868bb9d39164c7e86eb5fee08dc31267b39a883797a07839f19b04bc7a6fd3be03cdc21ccc2ec60d6b6ef4cde76216bd9a6f804160f6d7732c782c9cfb03fb82b70c798ece5a00e9ef3bb18fccc805d3a36eddf05e7216dcc78fe32c9d90ed76d928d2af3a9752f36e56ad0bdc4946b40f752531e07ba9799722de85e6ecae3417737f846ba5798f212d0bdd2947b40778f29af04ddab4cb91b74f79a7217e85e6dcad780ee35a67c1474f799f231d0bdd6940741f73a53be1674af37e5eb40f70653be1e746f34e51b40f72653be11746f36e59b40f71653be19746f35e55b40f73653be1574f79bf26da07bbb29df0eba7798f21da07bc0947780ee41539e08ba874c7912e8fe03caf4f94e53ae03ddbb4c3907ba779bf209a07b8f294f06dd7b4d790ae8de67caf5a07bd894a782eefda63c0d741f30e506d07dd094a783ee11539e01ba0f99f24cd07dd8946781ee23a63c1b741f35e539a0fb9829cf05ddc74d791ee83e61caf341f749535e00ba4f99f242d07dda94f1fc7ec694ef041df51777818efa8b17838efa8b97808efa8b97828efa8b97818efa8b97838efa8bbb414779f70ad051debd12749477f7808ef2ee55a0a3bcbb17749477af061de5dd6b404779771fe828ef5e0b3acabbd7818ef2eef5a0a3bc7b03e828efde083acabb37818ef2eecda0a3bc7b0be828efde0a3acabbb7818ef2ee7ed051debd1d749477ef001de5dd03a0a3bc7b10748da6fc10e84e3465ec3f4e32e57782ee64537e17e84e31e57783ee54537e0fe85e64caef05dd69a6fc3ed02d32e58741b7d894df0f3aba867d00744b4df983a05b66ca8f80aec9943f04bae5a6fc61d0359bf247409737e58f82aec5943f06ba82297f1c74ada6fc09d0b599f22741d76eca9f025d87297f1a749da64cfd876ea7babd91cf148f3af0afc9c14dba09c0dd1b247b0f46b6e8d8b45f00468a77cbe8331646ca98b718354f1b43cc3087688bfb8dd3063cad0c3c4c7e86bf71da2d9f0a964f39a8f322f0b39dc1cf0cd8a563d37e3bd8e638e7188b5a73dcd3ac58d4409d59e6e2a5af937171a463e8fc6d71f8c215c7bcc59377d8ee628e231d9bfac4ae51b0dd61d96eb66c63bf4f5b5cdbee00e64e06667ddceee48f1bb6ed15e65894cf64a7197c5a093148ca27b49d314276485f03e5e686e1ba548fe241d74e62d7ed88ce25b2dbdf6bb3be97833a5d0eff7b8364fdefb678ba2d66fd3be19486610e86f610e64097c541fbcd10bbee88d87541eca80e5e7bf34cb1ebb478683f0f3c747fd50e3aba4f217ebc9f6b1a056ebbdf6b777093ae0318f30ec6e6e4190b71d7856660245d27f07430c5cc3ed7a759f1c17b82f1561dfa6e0dd45907d7e5aca3ae6e77f332c37ed1effa678364fbf45a8678e1984300f109ac18d2460c1382e1718924792605c3e30ec706078eeeb9a2ff9cfe3d7d1940abb130f133e370a30a7458ae76e882a0787805876f697805876fabacb0e0b00ed5d73fe3b45b3484d17fe8c0e0f987fb0fef3b7ae391c1febe6d035720f5388b1e49a33c4052d4d13621181e08ea0d929db8a9b56cc525cf04f81c9f3c4f0b939fe1456fa2e553ade5530eea8c83bf4d64f0330376e9d8b43fd1613bc18e288cc5a411c462928367d228c70207d349872d95fe8e132d55962fd8a2d1273bcf1375880c9e0ac7cf1838fd37ddd8c71967c607c3279b7a4f7d47ab4f821e85d5572d3dcaaa47557517a4474df5054d8f8aea51503deaa94739f5a8a61ec5d4a3967a94528f4aea51483dead8180c8d2aea51443d6a780a703d0aacfad7bcbe3aea513f3dcaa747f5f45d95feb5a6ef44f49db7be2bd07703faae4fffa2d5a31bfa4aabef62f4155a5f55f55da2be3bd477f3faee56cf66ad52b25ac9e926d66b949ca164ad92754ad62bd9a064a3924d4a362bd9a264ab926d4ab62b3953c959c1d068fdd94ace5172ae92f3949cafe40225172ab948c94e25172bb944c9a54a7629b94cc9e54a762bd9a364af927d4afa94f42bd9afe40a255706432b78ae5272b592834a0e2939ac6440c9916068464dcfa0e919333d43a667c4f40c989ef1d2335c7a464bcf60e9192b3d43a567a4f40c949e71ba23189a5dd0b3097af640cf16e8d9013d1ba047ffef0e8646f7f568fe3dc1d068bd1e9dd7a3f17af45d8fb6ebd1753d9aae47cff568b91e1dd7a3e17af45b8f76ebd16d3d9aad47aff568b51e9dd6a3d17af4f9a1606874598f26ebd1633d5aac4787f568b01efd7d38181addd5a3b97af4568fd6ead1593d1aab475ff568ab1e5dd5a3a97af4548f96ead1513d1aaa473f3fabe4734a3eafe40b4abea8e44b4abeace42b4abeaae46b4abeaee41b4abea9e45b4abeade43bc1504e7e57c9f7947c5fc90f94fc50c98f94fc58c94f94fc54c9cf94fc5cc92f94fc52c9af94fc5ac96f943ca6e4b74a7ea7e4f74a1e57f207257f54f284922795fc49c99f95fc45c9534afeaae46f4a9e56f27725ff50f24f25cf04c3b324d871d498de8646ecf70c0ef61f3a32d83838d078e8da8383078e1cbcb1f1fa038357360e5cd77f74ffc181ebf1cb5f375fa6e98835478feeb9b1f1c0e1befe1b1a07ae1d6c1cd8dfb877e0dac37dc7f04b4f982fcd7baec53d7d7dd1c6fef38590fe779946ab4d3f48133d9be37dabad2e232075e57c295f5d9e437973a5a1d9f97387ee701b8f1d1c186ccc371e56ffee39a8bed3dfb7bc11ff764c05f9d860e3b1c13d47071bf71f1d38d4d8b21c8f3ba5ae0c27663694f1a5b50d23f73cf87f8198955c01d50300", + "packedBytecode": "0x000000028df71de5000000468b1f8b08000000000000ffed9d07741d45b6ae5bb61ce0481893b3450e06a3e49c64724ec6608c31b62c0b1b0739623298e8886d72b041ce39639cb331cc0c732727263030c3a47b67eeacb7dedcf7ee5befb15ed739b5977e95ab8f754497fc1fa97aad92aaf7a9eefdd5dfbbab5375d73f8320c8095253f3305d101c3ec9ef65fa7fe1b79b8a625c57a14bce9c2ce16c96259ccdb38433374b385b640967cb2ce16c95259cadb384f3981839155bb3a0f61437efb10e748d9b3191659ae66581a6f959a6e97159a0699b203bdaa8e3b384b36d96709e90259c276609e74959c2797296709e92259ca76609e76959c2797a96709e91259c676609e75959c2797696709e93259cedb284b3204b38cfcd12cef3b284f3fc2ce1bc204b382fcc12ce8b62e46c0f9c17ebff97e8ff97eaff97e9ff52f672fdff0afdbf83ae63ae9ebf527185493da429367e2b095369983a86a993f15be730750953d73075d3bf15e8dfba87a947987a86a957987a6b0dfa84e9aa305d1da66bc2746d98ae0bd3f561ba214c3786e9a630dd1ca65bc2746b986e0bd3ed61ba234c7786e9ae30f50dd3dd61ea17a67bc2746f98fa87e9be300d3058ee0fd3c0303d10a641617a304c83c334244ce5611a1aa68a300d0b5365981e0ad3f0308d08d3c3611a19a651611a1da63161aa0ad3d8308d0bd3f8304d08d3c4304d0ad323619a1ca647c3f458981e37347b224c4f86e9a9303d6d703e13a667c334254ccf85e9f930bd10a617c3f452985e0ed3d4304d0bd3f430cd08d3cc30cd0ad32b619a1da639619a1ba657c3f45a985e0fd31b617a334c6f85e9ed30bd13a677c3f45e98e685697e98ded72cb2237c10a6ea302d08d3c2302d0ad3e2302d09d3d2302d0bd3f230ad08d3ca30ad0ad3ea30ad09d3da30ad0bd3fa306d08d3c6306d0ad38761da1ca68fc2b4254c5bc3b42d4cdbc3b4234c3bc3b42b4cbbc3b4274c7bc3b42f4cfbc374204c07c3f471980e85e993307d1aa6ef84e9bb61fa5e983e0bd3f7c3f46f86e63f08d30fc3f4a330fd58db7ea2ffff549795fb773f0bd3cf75fe17faff2ff5ff5fe9ff9f1bcbfc3a4cbf316cbf0dd3ef0cdb1761fabdce7fa9ff7fa5ffff41ffffa3feffb5feff27fdffcffaff5ff4ffbfeaff7fd3ffff5dffff0ffdffeffaff3ff4ffffd4ffff19a6070a52f9d641cd5416c4d4469556269ffd88f81707b527a54573fd9bfc2fd0f65c3d2fff45bb167abe85616fa9e75b1aeb69ade75b1bf6b67abead613f51cf9f68d84fd6f3271bf653f5fca986fd023d7f01d81301dc1bd676656bae4d396093786d06b616dad61c6c2d6575606ba56d2dc026dbb725d88ed1b656603b56db5a832da16dc7889661cad3b6b220ae58291ca2d69b1ff77af5f3b2e3e2e71daad6dbc611eff1f1f30e53eb6deb8057c5c7097a5dc743dc9ca86d6dc17692b69d00b693b5ed44b09da26d2781ed546d3b196ca769db29603b5ddb4e05db19da761ad8ced4b6d3c17696b69d01b6b3b5ed4cb09da36d6781ad9db69d0db6026d3b076ce76a5b3bb09da76d05603b5fdbce05db05da761ed82ed4b6f3c17691b65d0036697f2f049b9c2f5ea46daaed38260796d17669b792cb489b0db64ba5bd06db65d25683adbdb4d360bb1c7c8bed0a686bc4d641dba4dd52bf75d3f9b220aefda4b852adb77bdceb0dd7acd6db33fef5269f39f60a6a742d033fdd41abde3a1f63bfa622f49da393f8117b2ee46f82b2524ef490638fb0ab634c0f9def9d66b96ec672f950a687a5fe6541bcf5ef69f0f434985b40de4dcc9694f898adf39471ccf687b266ecc97950638cd95b81c341cc76f6315be729e398ad84b266ecc9b970638cd9fb81c341cc96bb89d9e2421fb3a9fb6641608f3db91e6a8c313b0238e28fd98e3e66eb3e651cb3cf415933f6e49ab831c6ec64e0883f663b97fb73833a4f19c7ec1c286bc69edc9f698c31fb22703888d94adfced679ca3866df87b266ecc9bdc2c618b3af0147fc31dbd551cc96f8980d52cf4083c01e7b72dfba31c6ec02e0883f6687fafbb3759f328ed9ed50d68c3d7986d21863769dceabe70c3fd1cf19ce02db4fb5ed6ce08d3fb62b3a3a8aed621fdba9be2141608f51799ed718637b8fceab38fe05f44710db2fb5ed5cb0fd4adbce03dbe7da763ed4cbc13e50eef7813a4f19ef03bf81b2662ccbb3e5c6b80ffc08381cc46c858fd93a4f19c7ecdfa0ac197bd2cfa131c6ec17c0e120662b7dccd679ca3866ff37943563ef129d6f8c312b7d4dd5f9c297fa7ce132b07da56dedc1f6076dbb1c6c7fd4b62bc0f6b5b67500db9fb4ed4ab0fd59db0ac1f6176d2b02db5fb5ad186c7fd3b612b0fdbbb69582ed3fb4ad23d8feae6d9dc0f60f6deb0cb6ffd4b62e60fba7b675d536f5bc4bfa5ec9796b6b602d0be2dbb609d045a61c63be0cf2c56e790af381077d95c6efab44d5bd24a87bdd4b81a7a383ba27c0475d783a024fa7f879927d513bc7bfdee4362e31344d80af12a8571707f5ca015fb26e99177ff960c3fdbc8b85b16bfc8cc539e04bd62df35d81516cd8eec8fb3fb2ffa8b6f9dc9c1a5e07fb52f2f88cfeca8043fce542997fb5ab297ba166cb83dfb10dee64d81cc565322ec497ac5be6c55f1ed4a753c33316d795b1a3c1e8aa8dc8015fb26ed3771ee48bdcea9396a733896f07e7ddd6364d34efde00bebb1abe4b0ddfd876ca94eed8d6159863bffed1c7b61ef1afb710cf95e53a45fce0f9035e4fc45527f42dd729e247ecb990bf21a7a6ac94133da41d1676b50fcbb6447673b92ec672f950a6bba5fe6541bcf5ef61f0f43098d5f1a6271c0b1dec0fc918e86e70c87c2968d72342bbeea09d94b904b47370ee99d4ae9bc123f31d8147da6f6ccf8a1a98a788c0379ec3e2b59cfc8ee701aeb65791c128f3b6edd515183b5a181d9c1316a73b1e9602a3d8ba014f8923cda2b66b09896f17d79539e043cecdcd6b9b5c28737bf39ab215394ed98af1dc59a6ba5ef3c6bf9d8a0b71ffa80b8fe37da8c8513c16e2fd9b6f827863cd6c97ccf626ea1e8fabb6bcc4e09179f1e7993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999f59f1c8f304ecb725e53a91309afddf5cdde74f7e8b4faf0b9f01fdcb697fb0e2427cf627fd202e33ea9c0b654e6c56c3f6dfd01fccec4b14b52d5df48d4db72dc51ff6076b886788a5068fe93bcfa20f3e9746cd5cf58132db0c99c7fe69a25f11f0b8da1f8b0d1ed337b61925a49a45b5b3aefaf445c599ad3f61416cbe8b87ba7aaeabbe7ba6be1d6a1ebf3a199a26bf496ad8549b7457f39a7abb78ce9be973673c6e483ecee7b8d82f037dc5dfce16d7ea9fd02ca87dacc05877d5574bf62be91bd1ddf09d0b65ce6d56b36d7ac0ef65c1e1c7062c23eb96f9cb60d91ec6badbb8ab6fda7e28dd815bf22d8dba75066e2973111cbb7fa6f38e8e81c599be2381c7e4f88f2fa9fe222519f0e0f1cec5398ba3e36821c663dcfd45cc7e90b6f36529837d481df4df4d7b2c167f9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec99f999158ff90c1d9ffd96923036501f9be4f30cf93e1b3e17dbd2acc6afeb6780f2cca9bd51677c473917de51dea1d9b0ef037e57cab62d5d3d5b8bda96e28fadef439e451fa5590f8b660ebeeb98f69b1df88d44d1af07f0b8da1fa3bedd616b338a48358b6a675df45d481767b67e0a05b1f94ef51771f15c57fa8b98c72ff3bb46d84f426cf81c3cea7b61c586ed68b701b67e6d92c76f2eb818e306e3d9ec2b28feb09fc4175a5be927117f3b505ce8f21821fba8f40929b1d455cafcb1594dd93fe93cf6152a8575fdcbf2bb4ce9fa24609beae0fbb1c9ed2beb92ed6bfb766d1f608dc97711ae2b47a73e8606b990ff9fcd6aca4a39292b5a0bbbda47e4bb52c86e2ed7d1582e1fcaf4b2d4bf2c88b7fee6b7847b1bcc2a76fe0a71f62f38d773d526f58ad0e832d048cae039afab7eb5661b69f699c63e91ad8c32787e2a65fe1fb451517dd26d7d2a5d9d2f44f5e7c4f305db398d5947b3ef7853ef0f98afaf435cf4079475b7096af7c90b8cf5b787f50b57ab20fad82265dac2fa8fe677af6cd77ec28bfd0da5cc2970ed7783ce6772ed77b4aee36dd77eb85c54ddb15d88fbd888f1882cf8bd48295360c4638f08eeae9665cf8f5856b432bf7d88d7a5788e10ff772353ed4d6fa32eb24fe1f7fda5cca5c67e13ff3953eafcd3d53732655dd206155bea2a653ac0be56a8f309d84ef84e516fcbef32a53bff14fd549daf8abfcec9ed7bb55e976cdfab2cbeaf01d6987c17a16f39ff143f62cf857c2f389e4839d143b41676b58fc8391cb29bcb753796cb87327d2cf52f0be2adff5506cf5506b38a9d1288b3def0ae85abb6ba4f8446ed41232983f7ae6ddf35b6ddeb68a8f354f37be9f9c1e1dfeec5e3a49b7336fbbb72e6fd5bdbf9497b831fcf4f6e85763661296bde9796e5e2ec9f8eef03e17921be0fe4ea1a293fa8ad67bec1e1d2771bc3779b06f4ddd6f0ddb6017d7bcdbde64c9a338df983cf219b01a38b631d1e57ebc2683bfe35074657ef6c9664c088dfbcc6e39d30baf84e787dc714c2739d16c0e8e27de34cef57770246fcc68030ba78473bd3ef54e37bdbb25c2b607431ae118ea1541746db5847ade1bf83718d8aea3b0e088e75740c30ba181b2411d41ecfe4488cdd8051963b16185d3c474a04b5efab1d89119f57ca7209c78ce98eed8efbfe14677a0fa221fa15449d6ba06f07f7ff8bb16f425db4e8e99627edb90ffa7670ff2ba9058e6579242df0f99c8bb1351341ed676147e2c16788b2dc09c058e688b177068c65c028cb9d088c7d1c319665c0d80718c57e12303ab80f9964ec930123deaf93e54e06c6ab1d315e9501e3d5c028cb9d028c2eee2926c06f5d18af014659ee5460bcd611e33519305e0b8cb2dc69c0789d23c66b3360bc0e1865b9d381f17a478cd765c0783d30ca726700e30d8e18afcf80f1066094e5ce04c61b1d31de9001e38dc028cb9d058c373962bc3103c69b8051963b1b186f76c47853068c3703a32c770e30dee288f1e60c186f014659ae1d30deea88f1960c186f054659ae00186f73c4786b068cb701a32c772e30deee88f1b60c186f074659ee3c60bcc311e3ed1930de018cb2dcf9c078a723c63b3260bc131865b90b80f12e478c7766c0781730ca721702635f478c7765c0d8171865b98b80f16e478c7d3360bc1b18fb5a18fb3962bc3b03c67ec028cb5d0e8cf7c4cf98bc96ee9701e33dc0736ffc3c49cdeec980e75eb73cc96f28de63f1755ffcbe92dba27f50f7badf073c03e2e7496e8bfb32e011867c580e35bb3f7ec6a466033260bc1f7806c6cf93d4ecfe0c78068266f75b347b207ec6a4660333607c007806c5cf93d4ec810c780681660f58347b307ec6a4668332607c107806c7cf93d4ecc10c780607359a3d68d16c48fc8c49cd0667c0380478cae3e7496a3624039e72d06c8845b3a1f13326352bcf807128f054c4cf93d46c68063c15a0d9508b66c3e2674c6a569101e330e0a98c9f27a9d9b00c782a41b36116cd1e8a9f31a95965068c0f01cff0f879929a3d9401cf70d0ec218b6623e2674c6a363c03c611c0f370fc3c49cd4664c0f3306836c2a2d948478c0f67c038d2c213f737d11fb6f81aeda8eea382bad75d18f26139ec2731c611e3e80c18c700a32c87fd24aa1c318ec980b10a1865b98463c674fd24aac0f7d8f87d27dba5aaa0eefa8c75cb93b69f04fa1ee7488bb141ddb518e796276d3f09f43dde9116e382ba6b311e782638d022013eeac2230cf9b01cf69398e8887142068c13815196c37e12931c314ecc80711230ca72d84fe211478c9332607c04186539ec2731d911e32319304e0646590efb493cea887172068c8f02a32c87fd241e73c4f868068c8f01a32c87fd241e77c4f858068c8f03a32c87fd249e70c4f878068c4f00a32c87fd249e74c4f844068c4f02a32c87fd249e72c4f864068c4f01a32c87fd249e76c4f854068c4f03a32c87fd249e71c4f874068ccf00a32c87fd249e75c4f84c068ccf02a32c87fd24a638627c3603c629c028cb8d74cc98eefa654a23f71d75add2d87d475d973476df3ece7d9c3705df3ece7d9c3705df3ece7d9c3705df3ece7d9c3705df3ece7d9c3705df3ece7d9c3705df3ece7d9c33f97ece81ef04f89029c7982f83bc30e4c372233d63a366449e82f8780ab1eee8eb7982ba3f6fe1c9715477f4f50241dd8521db189fcb02c69159c0e8754cf541ac0fa3e279d111cf0b19f0bc083c2f39e27931039e9780e7e5f8799231f552063cc2900fcb8dcc02c6e7b280d1ebe8756462f43a361d1d3da367f48c9ef1683066431bee19b3221e8bebcba878a6c6cf93d4ece50c78a68266b2dcbd6e198bebcba878a6c5cf93d46c6a063cd340b3a916cd1c3016d79751f14c8f9f27a9d9b40c78a68366d32c9a39602cae2fa3e299113f4f52b3e919f0cc00cda65b3473c0585c5f46c533337e9ea4663332e099099acdb068e680b1b8be8c8a6756fc3c49cd6666c0330b349b69d1cc0163717d1915cf2bf1f324359b9501cf2ba0d92c8b660e188bebcba87866c7cf93d4ec950c78668366af583473c0585c5f46c533277e9ea466b333e099039acdb668c6ca38320b189fcb0246c73a16d79751f1cc75c43327039eb9c0f3aa239eb919f0bc0a3cafc5cf938ca95733e011867c586e6416303e97058c5e47af2313a3d7b1e9e8e8193da367cc8cf1f92c60f4dbda33b2323ab8be4afb0ecdab8ddc77d43b348ddd77d43b348dddb78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74dc1b78f731fe74cbe5f8fdf7771a6efb0be0e3c2edea97554cf42b5de37f4babe89513fa5d59b8656af1a5ae543993740bf371de897037e65dd322ffe3265be9880d991efe2e3c2751c03f5171fcf197a28ff6f39aa7b545bff5623f71dd5d63776df516d7d63f7ede3dcc77953f0ede3dcc77953f0ede3dcc7398b6fcce70635e7edf27d25b58eb775be859e97f2cfc37252a65fabd4ff3681df875cf8f6fb903f563405df3ece7d9c3705df3ece7d9c3705df3ecef9e21ce3e1ea06e0090c9e200dcf93643c9dc978c692f10c25e3b9878ce726329e5e643c93c9788ac9786692f13c4cc6f31219cf20329e3bc978ae25e3b9828ce769329eae643ce3c9788691f1dc47c6730b194f1919cf63643ca5643cb3c8784693f1bc4cc633988ca72f19cf0b643cd793f13c4bc6d39d8c673619cfa5643c13c9782e21e379888ca7908ce77e329ee3c878da90f1dc46c6731519cf13643c9dc8785e21e3a922e3994ac6534ec6d38f8ce74a329e1bc9787a92f1cc25e379848ca7888c670419cf03643c7790f13427e3b9868ce729329e2e643ce3c878da93f15490f14c23e3e94fc67333194f6f329e47c9784ac8784691f13c48c67317194f437c8f23139e29643cd791f13c43c6d38d8c670219cf74329e8bc9782ac9780690f1e491f1e493f17420e3b9958ca70f19cfe3643c1dc978c690f10c21e3b99b8ce745329e1bc8787a90f1cc21e39944c633838c673819cf40329ecbc8788e27e3694bc6733b194f0e014f2238fc1bc909f8fd75b0353396559f95ea5650f3fb3bdade0c967957e79b5bd6fd0ed8e45b55ef5a96459dde81ba94e97ce1b79b923aa1af3298177f79c0f12e09cfed643c6dc9788e27e3b98c8c672019cf70329e19643c93c878e690f1f420e3b9818ce745329ebbc9788690f18c21e3e948c6f338194f1f329e5bc9783a90f1e493f1e491f10c20e3a924e3b9988c673a19cf04329e6e643ccf90f15c47c633858ce775329ebbc8781e24e31945c65342c6f328194f6f329e9bc978fa93f14c23e3a920e3694fc6338e8ca70b19cf53643cd790f13427e3b9838ce701329e11643c45643c8f90f1cc25e3e949c6732319cf95643cfdc878cac978a692f15491f1bc42c6d3898ce709329eabc8786e23e36943c6731c19cffd643c85643c0f91f15c42c633918ce752329ed9643cddc9789e25e3b99e8ce705329ebe643c83c9785e26e3194dc6338b8ca7948ce731329e32329e5bc878ee23e31946c6339e8ca72b19cfd3643c5790f15c4bc6732719cf20329e97c8781e26e39949c6534cc633998ca71719cf4d643cf790f10c25e3194bc6d3998ce749329eab2d3caf3be291f7dd65dd32ff3a896f07dba150adf73d47759aa7d7d552af57f8c55f2e94293a36f55f3d1fc26585cbfc3e01f6fd9e071abdeda82ee6989832ff7623f7ddc6f0dda689f86e6bf86edb447cfb38f771cee47b5efcbe8bf1db3632e518f36590c7e38b8b6f0239aa67ad63fb3731eaa7b49a6f68f5b6a1553e94790ff49bef403fdbf982cc8bbf4c992f2660c6b82808e28d8bf7e3af53b1ea4b730ce8fabea12fd6eb03479a461d433e68e4bea38e218ddd77d431a4b1fbf671eee3bc29f8f671eee3bc29f8f671eee39cc977b5cec778dd58883ed4bd5fb91ea806bf0b753e2746bf6a5d0bf4ba5ae8750bc742e09132afc2bd68bfcffb7d3e2edffed8e6e3bc29f8668e73332fcf102f013657cf78a362b1219e2f1f4ddf51b1d8d87d47c56263f7ede3dcc73993ef45f1fb4e3e437c3da83da57b86b808781638d0c2513d93d74e8b8d3abd6ed4291fca54433d173ba8670ef89575cbfc62d80ed9c6ac78a6e83c8eef22e5a690308a6d815b9ee4fe3525a83da5dbbf16038f83fda0c8513d93fbd712a34e532cba4b996aa8e71207f5b4ed3b32bf04b643b6312b1e797757581350ee051246b12d72cb93dcbf5e086a4fe9f6af25c0e3a2fd7154cfe4feb5d4a8d30b16dda54c35d473a9837adaf61d995f0adb21db98158f8c6522ac0928f72209a3d816bbe5294d409d654ab77f2d051e17ed8fa37a26f7af65469d5eb4e82e65aaa19ecb1cd4d3b6efc8fc32d80e9ed933db98158fbc3329ac0928f71209a3d89638e5292d4c409d654ad78e2d031e17edbc23dd93edd872a34e2f59749732d550cfe50eea69db77647e396c874c98e76521737516327b9dbdce51ccd559c8ec75f63a4731576721b3d7d9eb1cc55c9d85cc5e67af7314737516327b9dbdce51ccd559c8ec75f63a4731576721b3d7d9eb1cc55c9d85cc5e67af7314737516327b9dbdce51ccd559c8ec75f63a4731576721b3d7d9eb1cc55c9d85cc5e67af7314737516327b9dbdce51ccd559c8ec75f63a4731576721b3d7d9eb1cc55c9d85cc0c3a2b9e97755e581350ee651246b12d75cb937c7fe7e5a0f69463cc97417e39f02c73a08fa37a26fbbdaf30eaf4b2457729530df55ce1a09eb67d47e657c076c884795e16325767213383ce8a67aace0b6b02ca4d256114db32b73cc9766c6a507b4ad78ead001e17edbca37a26dbb195469da65a749732d550cf950eea69db77647e256c07cfec996dcc8a679ace0b6b02ca4d236114db72a73cc5c9f710a705b5a774edd84ae071d1ce3bd23dd98ead32ea34cda2bb94a9867aae72504fdbbe23f3ab603b64c23c2f0b99abb390d9ebec758e62aece4266afb3d7398ab93a0b99bdce5ee728e6ea2c64f63a7b9da398abb390d9ebec758e62aece4266afb3d7398ab93a0b99bdce5ee728e6ea2c6466d059f14cd779614d40b9e9248c625be194a724f9dc617a507b4af7dc6115f0b8782ee348f7e47387d5469da65b749732d550cfd50eea69db77647e356c87c6ce3c2f0b99ab3d738330fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c731433436c289e193a2fac0928378384516c2bddf224bf7b3023a83da5ebb7b31a785639d0c7513d93fd76d618759a61d15dca54433dd738a8a76ddf91f935b01d3cb367b6312b9e993a2fac0928379384516cabdcf224dbb19941ed295d3bb606785cb4f38eea996cc7d61a759a69d15dca54433dd73aa8a76ddf91f9b5b01d3cb367b6312b9e593a2fac0928378b84516cabddf224dbb15941ed295d3bb616785cb4f38eea996cc7d619759a65d15dca54433dd739a8a76ddf91f975b01d3cb367b6312b9e57745e581350ee151246b1ad71cb539c803acb94ae1d5b073c2eda7947f54cb663eb8d3abd62d15dca54433dd73ba8a76ddf91f9f5b01db28d59f1ccd679614d40b9d9248c625beb9627b97fcd0e6a4fe9f6aff5c0e3a2fd7154cfe4feb5c1a8d36c8bee52a61aeab9c1413d6dfb8ecc6f80ed906dcc8a678ece0b6b02cacd216114db3ab73cc9fd6b4e507b4ab77f6d001e17ed8fa37a26f7af8d469de658749732d550cf8d0eea69db77647e236c876c63563c73755e5813506e2e09a3d8d63be649409d654ab77f6d041e17ed8fa37a26f7af4d469de65a7497321f403d3739a8a76ddf91f94dc023d3d5c0e32a2e038327b0e823d393643c9dc978c692f10c25e3b9878ce726329e5e643c93c9788ac9781e26e31944c6732719cfb5643c5790f13c4dc6d3958c673c19cf30329efbc8786e21e32923e3798c8ca7948c673419cf60329ebe643cd793f13c4bc6d39d8ce752329e89643c0f91f11492f1dc4fc6f30119cf71643c6dc8786e23e3b98a8ce709329e4e643c55643ce5643cfdc878ae24e3b9918ca72719cf23643c45643c23c8781e20e3b9838ca73919cf35643c4f91f17421e31947c6d39e8ca7828ca73f19cf7c329e9bc9787a93f13c4ac65342c6338a8ce741329ebbc878ae23e379868ca71b19cf04329e8bc9782ac9780690f1e491f1e493f17420e3b9958ca70f19cfe3643c1dc978c690f10c21e3b99b8ce706329e1e643c93c8788693f10c24e3b98c8ce778329eb6643cb793f1e410f02482c3dfc54bc0eff3c126ef8ccd05db873abf016ccd2c3ee459c426b0e5eabcaca35598ae2d387cdda893abf7e4d05719cc8bbf3ce0f89084e776329eb6643cc793f15c46c633908c673819cf24329e1e643c3790f1dc4dc633848c670c194f47329ec7c978fa90f1dc4ac6d3818c279f8c278f8c6700194f2519cfc5643c13c878ba91f13c43c6731d19cf5d643c0f92f18c22e32921e379948ca73719cfcd643cf3c978fa93f15490f1b427e31947c6d3858ce729329e6bc8789a93f1dc41c6f30019cf08329e22329e47c8787a92f1dc48c67325194f3f329e72329e2a329e4e643c4f90f15c45c6731b194f1b329ee3c8783e20e3b99f8ca7908ce721329e89643c9792f17427e379968ce77a329ebe643c83c9784693f19492f13c46c65346c6730b19cf7d643cc3c878c693f17425e3799a8ce70a329e6bc978ee24e31944c6f330194f3119cf64329e5e643c3791f1dc43c633948c672c194f67329e27c978aeb6f0cc77c4638e9b20f3f3097cabf9eea08b9a12f03b7e67fd03478cf30d4699ff001891d7b5666d0c9e36866647d3b7aabfbcab23f7c0717be17be70cdbab4d0368d6d6e0696b6876347d2b2de4d9b6bc3388db0bbf53cbb0bdf0bd6a07ed7369c2e051538e315f06f94d8ef57154cf427ceffa9b18d7abb4da6c6835dfd02a1fca6c04fd363bd02f07fccaba655efc7966cf1cc5ac78a42f89ed7b00fd4818c586e3627c143f4f69c2e05153baf6f123c7fa38aa67b21ddb12d875ff0874973218ab5b1cd43307fccaba657e8bc5774110af165beba0c5560bcfd606d642fc65cabc310b991974563cf2ae81b026a05c7f1246b16d069e6df1f394260c1e35a56b1fb739d6c7513d936dc2f6c0aefb36d05dcae0feb5dd413d73c0afac5be6b7c376c884794b16327b9debc7ac78e41d6d614d40b901248c62db0a3c3b62e7292e4c183c6a4ad78eed70ac8f9b7aa6dab19d815df71da0bb94c1fd6ba7837ae6805f59b7ccef84ede0993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999b59f10cd479614d40b981248c62db0e3cbb62e7493d77401e35a57beeb0cbb13e6eea997aeeb03bb0ebbe0b74973218abbb1dd43307fccaba657e376c07cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6ccdccc8a6790ce0b6b02ca0d226114db4ee0d9133f4f69c2e05153bae70e7b1cebe3a89ec9e70e7b03bbee7b40772983b1bad7413d73c0afac5be6f7c276d8eb993db38559f10cd679614d40b9c1248c62db0d3cfb62e7493d3f451e35a56bc7f639d6c74d3d53edd8fec0aefb3ed05dca60acee7750cf1cf02beb96f9fdb01d3261de9285cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7b9e9e8ac78ca755e581350ae9c84516c7b81e740ec3c25850983474d39c67c19e40f38d6c74d3d53cf1d0e0676dd0f80ee5206f7af830eea99037e65dd327f10b6436367de9285cc3e361a86d9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a398196243f154e8bcb026a05c0509a3d8f603cfc7f1f394260c1e35e518f36590ffd8b13e8eea99ecb77328b0ebfe31e82e6570ff3ae4a09e39e057d62df387603b7866cf6c63563c953a2fac09285749c228b683c0f349fc3cc50983474de9dab14f1cebe3a89ec976ecd3c0aefb27a0bb94c158fdd4413d73c0afac5be63f85ed906dcc8a67b8ce0b6b02ca0d276114db21e0711077499e7c8347e63f21f0ade6ab743e4fffc7ed55058c0cdb2bbf01346b63f0b431343b9abe55fdc7eafc71fa3f6eafb1c0c8b0bdda3480666d0d9eb6866647d3b7d2629cce1fafffe3f61a078c0cdbabad5b9ee284c1a3a674e71b9f02cf77e3e7495ec77d9a01cf7781e73bf1f31439aa67a15aeff7803daef52aad3e33b4fad4d02a1fca20c3670ef4cb01bfb26e99177f9ed9334731635b28ac0928f70909a3d8be033c2eda0d55f72bf4ba64fd2dc2f4c3136bfcbab8bf86f7165aeaf50a87f8cb853267b7ab61fba966cb83df65bba9fa1c346c8ede792bb2dde79579f19717d8aff55ddd438dbaf77010780e5a34db6fd16c9f23c6fd06a3ccef0346db7ddefd8e78a2ee3b8b3f6c330e926a86ef011f001e57e7c55171e67a9fcbf4fcf28085e79bf8780a3136d0978b58c5b6ad2e75b7ed3b31d6bd089f61a12f07fb40f238d541af4bd6af8e05ff75a253cd4bb17d90e35407a3ceb950e6bfcfa961fb3f698e53cd82c3ef0b1768bb9491dfbfd176731d057add32df5dffc738119b3f06d67e8ed8ddd0924d33dcb73eb6e8d8c3c2dd83801be3b121b675d4bd0fdcd63d0c1dd934c36dfd8945c79e16ee9e04dc8cfb754f434736cd8eb45ff7b370f723e066dcaffb193ab26976a4fdbabf85bb3f0137e37edddfd0914db323edd7032cdc0308b819f7eb01868e6c9a1d69bf1e68e11e48c0cdb85f0f347464d3ec48fbf5200bf720026ec6fd7a90a1239b6647daaf075bb807137033eed78383da3ab26976a4fdbadcc25d4ec0cdb85f971b3ab26976a4fdbac2c25d41c0cdb85f57183ab26976a4fdbad2c25d49c0cdb85f571a3ab26976a4fd7ab8857b380137e37e3ddcd0914db323edd75516ee2a026ec6fdbacad0914db323edd7632ddc6309b819f7ebb1868e6c9a1d69bf1e67e11e47c0cdb85f8f337464d3ccb65f3bea5f96713fe48f9dea931a7f3693f7b0b02f898b98721407858efa9a24fb21ef33b4fad8d00abfebbf1ff473d5272baadf98f8f3cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfcccf8cef79e2f31529d710ef00d785516cf84ccac57d7e55f72bf5ba64fd2dc274fbc9357ee37f6e519c7c0e20facbfb98571a75ce8532dbcfae61ebabd9f0f9223e17b56dcbfdb1d7a16eef9ce37bfaf82ce8683eef3c60d16c9f45b3bd8e18cd3643e6f702a3e8b70f785ced8ffb0d1ed3b7eddd7036cda2da5957711f156736df05b1f92e1eeae65b08c585ea1b6dc70487b7275207dc775dc461a6df04c0fdc2c173f72257efffab3aed35ea74d0a8533e94b918eab9d7413debba6fc97435f0b86a8f028327b0e8235333329e27c9783a93f18c25e3194ac6730119cf3d643ca791f1dc44c6730c194f2f329ec9643cc5643c0f93f10c22e36947c6732719cf89643cd792f1e492f15c41c6f334194f57329ef1643cc3c8782e22e33944c6733919cf7d643c6790f1dc42c69320e32923e3798c8ca7948c673419cf60329e73c978fa92f19c4cc6733d194f4b329e67c978ba93f14c24e3b9948ce721329e4bc8780ac978ee27e3398b8ce736329ee3c878da90f15c45c6f304194f27329e2a329e72329ef3c978fa91f19c4ac6732519cf8d643cadc9787a92f13c42c65344c633828ce701329e73c878ee20e339818ce71a329ee6643c4f91f17421e31947c6d39e8ca7828ce742329efe643ca793f1dc4cc6732c194f6f329e47c9784ac8784691f13c48c65340c6731719cf49643cd791f1b420e371fd1e60a63ccf90f17423e39940c65349c6733119cf00329e33c9786e25e3c923e3c927e3e940c6d3878ce771329e8e643c63c8788690f19c47c6733719cf29643c3790f1b422e3e941c633898c673819cf40329eb3c9782e23e3b99d8ce778329eb6643c39043c89e0f06f31e1f7bf0e826dafcee3b7059b59d627cf85a5bc3a0edd5a70f8ba9b59d6bdcfc2803aed096aea52a6f385df6e4aea84beca605efce501c73e129eb6643cc793f1dc4ec6731919cfd9643c03c9788693f14c22e3e941c6d38a8ce706329e53c878ee26e3398f8c670819cf18329e8e643c8f93f1f421e3e940c6934fc69347c6732b19cf99643c03c8782e26e3a924e39940c6d38d8ce719329e03643c2dc878ae23e339898ce72e329e02329e07c9784691f19490f13c4ac6d39b8ce758329e9bc9784e27e3e94fc67321194f05194f7b329e71643c5dc8789e22e3694ec6730d19cf09643c7790f19c43c6f30019cf08329e22329e47c8787a92f1b426e3b9918ce74a329e53c978fa91f19c4fc6534ec65345c6d3898ce709329eabc878da90f11c47c6731b19cf59643cf793f11492f15c42c6f31019cfa5643c13c978ba93f13c4bc6d3928ce77a329e93c978fa92f19c4bc633988c6734194f2919cf63643c65643c09329e5bc878ce20e3b98f8ce772329e43643c1791f10c23e3194fc6d3958ce769329e2bc87872c978ae25e339918ce74e329e76643c83c8781e26e32926e3994cc6d38b8ce718329e9bc8784e23e3b9878ce702329ea1643c63c9783a93f13c49c6d38c8ce76a83077f57e7d6f27ed85eb0c9efcfeac6ab8d5e9794916722eaded26ec3a6eabbcb517d7707355319ccef82fa0afb6ee0d9ed88678fc163face837c0fd06ca761538c3b1c31ee3418657e07308a7e3b8167a7239e5d068fe93b0ff23d41b3ed864d316e73c4b8dd6094f96dc028fa6d079eed8e7876183ca6ef3cc8f703cdb61a36c5b8c511e3568351e6b700a3e8b71578b63ae2d966f098bef320df1f34fbc8b029c6cd8e183f3218657e33308a7e1f01cf478e78b6183ca6ef3cc80f00cd3e346c8a719323c60f0d4699df048ca2df87c0f3a1239ecd068fe93b0ff20341b38d864d316e70c4b8d16094f90dc028fa6d049e8d8e7836193ca6ef3cc80f02cdd61b36c5b8ce11e37a8351e6d701a3e8b71e78d63be2d960f098bef3203f18345b6bd814e31a478c6b0d46995f038ca2df5ae059eb88679dc163face837c3968b6dab029c6558e18571b8c32bf0a1845bfd5c0b3da11cf1a83c7f49d07f90ad06ca561538c2b1c31ae3418657e05308a7e2b8167a5239e55068fe93b0ff295a0d972c3a6189739625c6e30cafc326014fd9603cf72473c2b0c1ed3771ee48783664b0d9b625ce28871a9c128f34b8051f45b0a3c4b1df12c33784cdf7990af02cd161b36c5b8c811e3628351e61701a3e8b71878163be25962f098bef3203f16345b68d814e302478c0b0d46995f008ca2df42e059e8886791c163face83fc38d0acdab029c60f1c31561b8c32ff01308a7ed5c053ed886781c163face837c5fb0096f11d8ded7f962b0cdd7f912b0cdd3f952b0bda7f31dc1f6aece7702db3b3adf196c6feb7c17b0bda5f35dc1f6a6ce7703db1b3adf0b6cafeb7c6fb0bda6f365607b55e7fb806daece5f05b6393a7f35d866ebfc35607b45e7af05db2c9dbf0e6c3375fe7ab0cdd0f91bc0365de76f04db349dbf096c5375fe66b0bdacf3b780ed259dbf156c2feafc6d607b41e76f07dbf33a7f07d89ed3f93bc13645e7ef02db489dbf1b6cf7eafc3d60fb54e7ef03db7774fe7eb07d57e71f00dbf774fe41b07da6f343c0f67d9d1f0ab67fd3f96160fb81ce3f04b61feafc08b0fd48e71f06db8f757e14d87ea2f3a3c1f6539d1f03b69fe9fc78b0fd5ce72780ed173a3f116cbfd4f94960fb95ce3f02b6cf757e32d87eadf38f82ed373aff18d87eabf38f83ed773aff04d8bed0f927c1f67b9d7f0a6c5feafcd360fb4ae79f01db1f74fe59b0fd51e7a55d53edec9f74be2088b79dfd3aa8990ac0b7f85365feacf3ad8c32b26c2e9429d51ff451cf38d4b74ca51d967659d9a41d7e1f6cd20ecf079bb4c3f3c026edf07b609376f85db0493bfc0ed8a41d7e1b6cd20ebf05366987df049bb4c36f804ddae1d7c156a6f3af814ddae157c126edf05cb0493b3c076cd20ecf069bb4c3af804ddae1596093767826d8a41d9e01366987a7834ddae169609376782ad8a41d7e196cd20ebf043669875f049bb4c32f804ddae1e7c126edf073609376780ad8647ff91a6cd2368f049bb4cdf7824ddae64fc1266df377c0266df377c1266df3f7c0266df3676093b6f9fb6093b6f9dfc0266df30fc0266df30fc1266df38fc0266df38fc1365ae77f0236699b7f0a36699b7f0636699b7f0e36699b7f0136699b7f0936699b7f0536699b3f079bb4cdbf069bb4cdbf019bb4cdbf059bb4cdbf039bb4cd5f804ddae6df834ddae62fc1266df357607b56e7a5ad6e0d367956aca6c26f39e1383ccdc097309505f1b6fd389541fe19a8bb4cd3c878c692f1bc41c6730119cf72329e65643ca791f17c48c6b3898ce718329ebd643c7bc8785e21e379978c6710194f3b329e13c97872c978ae20e3a926e3798d8ce722329e43643c9793f19c41c6b3918c670319cf52329e25643c09329edd643cbbc8783e20e39949c6f33619cf60329e73c9784e26e36949c6d39d8ce752329eb9643c9790f12c26e35944c65348c6731619cf7a329e75643cf3c9788e23e36943c6b3938c670719cf74329eafc978aac878de24e32927e3399f8ca71f19cfa9643c5792f1b426e3e949c6339b8c672119cf02329ef7c878ce21e3594bc6b3868ce704329eed643cdbc8789a93f14c25e31947c6f33a194f7b329e0a329e0bc978fa93f19c4ec6732c19cf14329e59643cef90f1fc818ca7808c673519cf2a329e93c878b692f16c21e36941c673808ce755329e4a329ef7c9780690f19c49c69347c6934fc6d3818c672419cf0c329eb7c878ce23e35949c6b3828ce714329e8fc8783693f1b4d2ff59787a90f1cc21e3194ec6338f8c672019cfd9643c9791f11c4fc6d3968c27878027011c01d8e4f7e660fb4ae70f814dbed773006c5fea7c35d87eaff3cf82ed298bad99854f18be029bbc6bfd34d8e4fecc97609377387e0f36392e8a7f35dfb7e070fe66b08cf8696ee1477fbfb770491eb7b72c5316c4bbbdd1575970f8f794f280e369129eb6643cc793f15c46c6733619cf40329e79643cc3c978e690f1f420e36945c6b3998ce723329e53c8785690f1ac24e3398f8ce72d329e19643c23c9783a90f1e493f1e491f19c49c633808ce77d329e4a329e57c9780e90f1b420e3d942c6b3958ce724329e55643cabc9780ac878fe40c6f30e19cf2c329e29643cc792f19c4ec6d39f8ce742329e0a329ef6643caf93f18c23e3994ac6d39c8c671b19cf76329e13c878d690f1ac25e339878ce73d329e05643c0bc9786693f1f424e3694dc6732519cfa9643cfdc878ce27e32927e379938ca78a8ce76b329ee9643c3bc8787692f1b421e3398e8c673e19cf3a329ef5643c6791f11492f12c22e3594cc6730919cf5c329e4bc978ba93f1b424e339998ce75c329ec1643c6f93f1cc24e3f9808c671719cf6e329e0419cf12329ea5643c1bc8783692f19c41c6733919cf21329e8bc8785e23e3a926e3b9828c27978ce744329e76643c83c878de25e379858c670f19cf5e329e63c8783691f17c48c6731a19cf32329ee5643c1790f1bc41c633968c671a194f330bcf21473c72ac9475cbfc2102dfea3d5cb917bf57ff4fc0ef387e73b523c64306a3cc5703a3d8f6004f77473cbb0c9e5d162d8e966fa5857cfb63b7fe9f80dff17b85ae62aabbc128f3b698da053c3d1cf1ec30787658b4385abe9516d2f751fa9024e0771c0fcf554cf5301865de1653389e6b4f473cdb0c9e6d162d8e966fa585f435943efc09f81dc7bf7415533d0d4699b7c5148ed7d5cf11cf1683678b458ba3e55b6921ef9ec93bcb09f81dc713721553fd0c4699b7c5148e0fd1df11cf668367b3458ba3e55b6921df92906f2225e077fcbebfab98ea6f30cabc2da6f0fbc8031cf16c32783659b4385abe9516f2ad3ab9664fc0eff87d5b573135c06094795b4c6d029e818e7836183c1b2c5a1c2ddf4a8b413a2fcfe012f0fb2060741553030d4699b7c5d406e019e488679dc1b3cea2c5d1f2adb418acf3d2273301bf0f0646573135c86094795b4cad039ec18e78d6183c6b2c5a1c2ddf4a8b729d97770613f07b3930ba8aa9c106a3ccdb620ac7df2d77c4b3cae05965d1e268f9565ac8bbf7abf5ff04fc8ee3710e76c4586e30cafc6060141b8ef756e1886785c1b3c2a2c5d1f2adb4906f69c9371813f03b8e8fe52aa62a0c4699b7c5148e7752e9886799c1b3cca2c5d1f2adb418aef3cbf5ff04fc3e1c185dc554a5c128f3b6985a063ccb1cf12c31789610f9565ac8bb70d2872d01bf5701e372478c5131b51c18c5b604789638e25964f02c22f2adb4906739f2ce45027e1f0b8c4b1d3146c5d4526014db22e019eb886781c1b3c0a2c5d1f2adb4906fc72cd4ff13f03b8ed7bec811e3588351e61701a3d81600cf02473c51f7f01ac277d4fda886f01d756fa5217c47dd276808df51f7d81bc277d4f55b43f88eba166908df51f7191ac277d4397d43f88e7abedd10bea39ed53684efa8e78e8d7dfff6c792a6752c399aed5a533d96f8f69cb33d1f17bfefe24450fb9a464d39c67c19e4f1fa65a1032d1cd5b310af09bf8971bdb66bf8058656f95006af515d5dff8d3378645efc652333c6454e7cbe0b13e043de515636b9d7f23ed8e41ec77cb0c93d907960937b68ef814dee67bd0b36b9dff50ed886ebfc48b0c9bd4bec8f24f736b781ad5ce7b11fcc609ddf0236794e84fd2fe459df66b0c9f35a7cee2fcfdc37814dfa4de0f366e9fbb2016cd27f099f734a1fb47560937e84f87cad5ae7d7804dc694c0e73a5feafc2ab07da5f3f83c41c6ea5c01b627757e0ad8bed0f9afc1f684ce2f00dbef741eeff93caef363c1f65b9d7f1b6cbfd1f9b7c0f698cebf09b647757e2fd87eadf37bc03659e7b17fe8e73abf0b6c8fe83cf64bfc95ceef00db2f75fe0db04dd2f9d7c13651e75f03db2f74fe55b04dd0f9b960fbb9cecf01db789d9f0db69fe9fc2b60fba9cecf02db189d9f09b69fe8fc0cb08dd6f9e9601ba5f3d3c0f6639d9f0ab68775fe0f60fb91ce8f035b339d5f0436f97e32ded395771697804dc629c17bf5f2ad922ab0c9f87bcbc0d65ae7f1b98cbc97341c6cf26dfb4ab0c9fbff1560933192cac126e3380d069b7c0b6c10d8e47b6503c12663960e009b8cabda1f6cf2ede27e6093f7297b824dc608e90136f98e4a77b0c9d8773826b07cefb21a6cf24e108e132cdfddff126cf26ef9576093f19b704c60f9c6d59360937149bf00db393aff04d8e47dcddf81ad40e71f07dbb93aff5bb09da7f3bf019b7cbff231b0c93b358f824dbea3ff6bb0c9bbd993c176b1ce7f0eb64b74fe11b0c977887e0536192bf697606baff393c026efcc4f04db153aff0bb0c9586713c026df57fd39d8e41b5fe3c156a4f33f035bb1ceff146c253a3f066ca53aff13b075d4f9d160eba4f3a3c0d659e77f0cb62e3aff30d8baeabcb4336a7f56fbf9413d5f16c4775ea6fc7d1cd49ed25d1b0803f2c479ae9d0f3ce86b7fec752f4e9ed7cb7edf4caf5762683ff8de1bbbefd435c53ebdae167abd7b0ddfb950e653dd88e0f573ae5eee80b11c969175cbfc95b0ec1e63dd6d747df739aaef5e8349b8f7019394f9ecec9ab24fe8c6b2352c13235bf2fa58622d000d712a83bc30b8d1aab810cf7bebc2b30f78e2df4f52d7eb2e6202f7adb8afd7cd7b4c66ace54399bda0df1e07fae1be2eeb9679f1e7993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999f59f1c8f3047cae2ce50e92308a6d3ff0ec8b9fa7109fc3cafad5739d07e0b9cefed8fdd67ebed752afb7d0a8732e9459794e0ddb109dcf83df65bb456dcbbdb1d721fdb6147f79509f7dc0e3605b2679f61b3ca6ef3c8b3e4ab33d16cd763b6234db0c99df0d8c7b757e0ff0b8da1ff71a3ca66f6c33f6916a16d5cebae897902ece6c7d100a62f35d3cd4d5735dd5674af5e5308f5f070d4db10f84d8f039781e2cf389fe9f007d3e017d8e661b60f64bc076ea6360dc1b3b6371ad67c0d2f65f69688a7d205ed4da4a1f88f8db81e24297c708d947cdbe15585729331d8e7333751efb011d8475bd67f95da61c63be0cf2d8a6ee8cbfcec9ed2bfd5765fbeeb4f8de0eac31f9aef52e478e4ee247ecb9907ff79c9ab2524ef410ad851dc7ad427673b98f8de5f2a1cc2e4bfdcb8278ebbfd3e0d96930abd8990d71f61e9cebb96a937645687425682465f09cd7419f226b1b291ce24f9591eddfca2883e7a7526611b451aa2ed2ce4b3db11f131e035c9d2f1c34ea27f378be603ba731eba8e2e3f6936b785d5f0b340bec5ab3f4f5db04edc51ef8bd2cf8f67dfd36410cd9ce4b65fd85b07ee16a15441f5ba4cc16e338eae27a12b7a5a9e73e6092323ba01dfa1ff5b8ae3b5ad7e851d775bb1cf0e0b5864ce98eef788c71d1be38aa67a1edd8b5c7a8533e94b918eae9e03c26ed3ba93bc1b78b6d8e5ac839d45e438b5c28f37da3ed88d251d681f701dcd6a5d87a3e5868a98b94f989d14eed70c0e472bbe179965aef7e4b5da5cc2fa1fdfb1ccee7f7eadfb12dfdabe57799d2b507f84df9adf1d739b97de5fd46d9be5b2dbe3f02d6987cd7fa26859cef8b1fb1e742fe2f70fc9672a287682dec6a1f91f73b91dd5c6eafb15c3e94d966a97f59106ffdb71a3c5b0d66153bbf8538fb2b9cefbb6a37b7456854081a49197c5660de6fc17b2778dc6fa8eb02993f008c62db09fafe0fa7f7cb536c070c36f37eb9ed7cb0d0e0c7f3c1ff05ed6cc252d6fd7380d4b90dd64bea1118750d8cba3a3a7f2dcd31f42c033f1dc0be57e74567f90dcf71a54c4ebbd47f77f7af6adfc7166ea9073eafdb6d70ef3174c57b512d815bc5bd796d81e7e98eaf694bf15ccc3c1fda0dec52260fd86de771872c75318fd3cd82c3af05bf31cae27576bae5ccfc016319bc67b0dfc2646bfb627b2fa7a8b0d0e4b7b57b070d669baeb21f60ccc9bacc7d05cf87a4cc99b0dd1296b2aa4dfaaf136bf491ed88f7da6df7595c1d2fa2eeb3883fc5687b67d2c5338ca6f86e5aebd8d6dbb5dcf69c8dbd3f436b231f8fefe20a3c56a4d362b785c7d53dcd282d765b7cc7a745a7a1b676cea6c52e0b8fab6bcc282d76597cc7a845a5edde824d8b9d161e57d71a515aecb4f88e4f8bceb5ee6ba4d362878527fe7b1ae9b5c067629930ef22606e6de4e3f15d5a6e7b7667d362bb85c7d5b3bb282db65b7cc7a7455127db35bb4d8b6d169e6d0dacc5368beff8b4e8d2d5764fc5a6c5560b8f83fb6b69b5d86af11d635c0cc3fb6be9b4d862e1d9d2c05a6cb1f88ef1fcb053ba7b86a8c547161e57f7fea2b4f8c8e23b462d8628df9beba0c5660bcfe606d662b3c5777c5a947754be3fac83161f5a783e6c602d3eb4f88e4f8b215d94ef4d75d06293856753036bb1c9e23bc66ba8645c6cac83161b2d3c1b1b588b8d16dff16951913cd7da50072d3658783634b0161b2cbee3d3a230794c5d5f072dd65b78d637b016eb2dbe638c8be4f5e4ba3a68b1cec2b3ae81b55867f11de3712419176beba0c55a0bcfda06d662adc5777c5a5426ef3fada983166b2c3c6b1a588b3516df31de7349c6c5ea3a68b1dac2b3ba81b5586df11d9f1625c963eaaa3a68b1cac2b3aa81b55865f11d9f16c392cfc456d6418b95169e950dacc54a8bef18cf3b93edc58a3a68b1c2c2b3a281b55861f11de37967f2fec5f23a68b1dcc2b3bc81b5586ef11d63db993cef5c56072d9659785c8d1119a5856d7cca18cf3b935a2cad83164b2d3caec6368cd262a9c5778ce79dc9e3c8923a68b1c4c2e36a2cca282d6ce360c61817c9b673711db4586ce159dcc05a2cb6f88ef1be56b2ed5c54072d1659785c8dcd11a5c5228bef18af4792f7f816d6418b85169e850dacc5428bef189f1525cfc117d4418b05169e050dacc502f0bd2f76dfa9fedce243fa625d6168910b65be6bf4c58ad251d681efd0625daa63af4baa5fd9071175a986ba48991f1a7df93e70c0e4a8aec998795faf4bfaa67f6ca9ab94f959bb9ab2bfd0f9046c9343b0ae3f597e9729c7982f83bce8a7ea3c2ffe3a276355c60192ed3bcfe2fb5d608dc97711faced149fc883d17f25fb7ab292be5440fd15ad8d53e325fe791dd5c6e81b15c3e94996fa97f59106ffde7193cf30ce6e47b0f106712476edaae14d3fc088dae008da40cf6d93be488e763834738c45f4e70f8bba8524696c57751ff61f4db957e9052cfa83e92ef3baa5f541f49f117f52eaa5947151f3f84be9f322e888c19a26c32064809aca7b3615375ede2a8aee24bd62df35d8051c624e9dcf08cc57565ec64302a9e6e0e34c37156644a77bce8063c5d1df038aa67f238d4dda85317a34ef95006df6deceea09e39e057d62df3ddc1b78b6d8e5ac831f952438b5c28935790fa2fe78f513aca3a54fc76b6d4c5958e9d0c9e4e16dfbd1ceb28eb9636b15703f8ee61f8ee68f856fb36c6989ad2eddb3d80b9a70366b5dedef1afb710cf19259ec54f47a8531fd020ae3ae1bae41cb38fa16d2ee4cf2fa8292be5a4ac1c3b855ded47b22d91dd5cae9bb15c3e94e965a97f59106ffd7b1b3cbd0d6675de705a410d8783fd211903bd0c0e99ef08daf58ed0ae17682765f0d8dbc991763d0d1e99ef043c727ed51d6c729e22fc09f8bda401b8cd76afbb855b6c381e61270b63c7f8198bd31d173a02a3d87a024f0f479a99dbfa52431f3c27686594916573a14c9782d47f7957cb2cabf6bb73736aead55cdb637b6f4db7e92d1de885e38106a04f6068289330b40e6ac60c8d93e7d8a0664cd00913abc60f7968d85dc3528f3d052dd7c0c4ff39966a34031be69b5b6c41507be8d35cb0c9d0a72dc0d6cc9005875c95f23274a20bb9500f5977aec1d91a58e2f48dc3c6ca942e745a018f8b5056a12343c7ead0b977fc8889c3303e5a189cf5891df55bf334e5a2d6257190eba0eec824eb9679f1a7f4c9d7f9b143868eec33fea149a3878d99380161cd9d0bf3398608e67fdb321824b833c97a5a18e21c1bbf38a53846b1c917803f9984a17550338e718c3cc94095b186870e1935ea8e49e5a3460cbd6ed298a11347548d41455b1bca45a92dbfb7049bada9c3b26ac2dd17976d65b1d9261cd5b935d8a4053f066cc2732cd89a435eca9b5bc6c93e7231ac5fc25afda6c469a12bde2aa80901392ca9f645ed43ea33aaea74400d2dad8692569b53ddb1534343abafc8a9a19fd550cf6a68673594b31aba590dd5ac86663e3b480dbdacee5e1604a9a194cf0b5243255f10a48642be08f8be0bcc9704a9d30f359471fb203554b1ba7da85e1f579f5a53efb7abd3587579ac4efdd4a58e3a0d53a75fea345bdd4250b793d4a98d3a6d54a744ea34469d96f7d65af709d35561ba3a4cd784e9da305d17a6ebc37443986e0cd34d61ba394cb784e9d630dd16a6dbc3744798ee0cd35d61ea1ba6bb83d470daf784e9de2035dcf67d416a28eefb83d430dd0f04a921bc1f0c52c37b0f0952437f0f0d52c3820f0b5243863f14a486131f11a4862a1e19a486361e1da4864756c3948f0d5243a2aba196d5b0cc6a086735b4b31a1a5a0d23ad869c564351aba1ac9f085243643f15a6a783d410dacf86694a989e0bd3f3617a214c2f86e9a530bd1ca4866557c3b5ab61dc6704a961df6705a961e2d5f0f16a587935dcbc1a865e0d4faf86ad57c3d9bf19a6b7c2f47698de09528f05d4e310f59840dd8257b788d5639aea2075fb7a61907accac1ebbab6e08aa5b86eaa6b23c48756352ddba543737d5ed4f758354dd42553759d56d5875a356ddca55377bf5da817a0d43bd96a25ed351af2da9d7b8d46b6dea353ff5aaa67af551bdcaab5e6dde1ba46e4def0f528f2bd5ed6a755b5adda257b7d03f0dd37782544c7e2f4c9f85e9fb61fab730fd204c3f0c524346abe1a5d5f0d46a286b35c4b51a0e5b0d9dad86de5643727f1ea486fa564385ff36480d37fe45987e1fa4863cff2a480d77ffc7307d1da63f85e9cf61fa4b98fe1aa6bf85e9dfc3f41f61fa7b98fe11a6ff0cd33f839a61cdb12129d0adcfb97a7ec8c489c3468f9d5830b1aa60f4a45113478c1df558c1e411138717543d326c7ce5a8aac9b8f0eff4c232267b9ff1e3873c5630624cc5b0470baa264d2ca8aa2c28af9a34a6a2d681f4ffea85ce3adce3908a8a686779cdbf05e9f1cdebe7b49d5e4e46bbbf317dddce6b5e0f412ea9cf42b7d4b34277eb23985cf2f54d9d0f164c185535b1a0b0604cf8373cf0564d1e56d1a1007f9b108a3c6162c1848943c64f2ca81c5f35baa0a803aeb7f0d87a5462eeb16e604a4eaf9f389f9c9dfa5faf107be19c7a28b0f09cfa916e3ce75b907e544fa79fd5a7863faecf42ff554fc2a05da42c1326954f1c3f64e8c4e8855b7c9b8513edea51cd33dad5af9adfa98fb31fd467a1bfd7933051500f679d0beaee2cf8ffd731cc2cb00206009b2d6c6f00000027631f8b08000000000000ffed9d777c1dc5b5c7f74ab22cfbfa5a967bb768c64df2d555b3e42603ee85988e69966d196c6ccbd8a285d04942421212d20b8184978434d20be9bdf7de484202494848f8e7e5f3defbbccf87cf9bd93be7e9a76176d1bdec11b3ba673f9fe33b7b3477cff79c3d33bb776676fd54100499a0b8552b392978e6467fef319ff9e7b6b52478ac3c276726259c5529e1ac4e09674d4a38c7a484b336259c6353c2599712ce7109726ab6aa60e89634ef7886b826cd984d594c27a420a6b994c574620a625a1fa4a38f9a9412ce8694704e4e09e79494704e4d09e7b494704e4f09e78c9470ce4c09e7ac9470ce4e09e79c9470ce4d09e7bc9470ce4f09e782947036a684f38494709e9812ce9352c279724a384f49907329702e349fa79acf45e673b1f95c623ee93bcbcc6793f1b1c6ec372b59aed994b4587f2b286955d2a6a4ddfa5b87924e252b947499bf359abf752b59a9649592d54ad628596be2b04ec9694a4e57728692f54a3628d9a8649392cd4ab628d9aa649b92ed4a76283953c90b94ec54729692b3959ca3e45c25e729395fc9054a2eb4587629b948c9c54a2e5172a992cb94ec56d2ab648f92bd4af629e953b25fc9e54aae507240c94125572a39a4e4b092234afa951c55729592634a8e2b195072b5926b945cabe43a25d75b317ba1921b94bc48c98d16e74d4a6e56728b925b95dca6e47625772879b192972879a9923b95bc4cc9cb95dca5e4154a5ea9e4554aee56f26a25af51728f92d72a799d92d72b798392372a799392372b798b92b72a799b927b0d0b3584b72bb94fc9fd4adea1e49d4a1e50f21f4adea5e4dd4adea3e44125ef55f23e25ef57f201251f54f290920f29f9b0928f28f9a8928f29f9b8924f28f9a4924f29f9b49287957c46c967957c4ec9e7957c41c917957c49c997957c45c957957c4dc9d7957c43c937957c4bc9b7957c47c977957c4fc9f7ad98ff40c90f95fc48c98f8dee27e6f3a7a62e8d8bfd4cc9cf4df917e6f397e6f357e6f3d7d6777ea3e4b796ee774a1eb174bf57f20753fea3f97cd47cfec97cfed97c3e663e1f379f7f319f7f359f7f339f4f98cfbf9bcf7f98cf27cde73fcde7bfcce7534a6e9d5a2cd705835b4f90501fd5b63fafe75428f80b83a19b8e45b5f91b7d361a7d8dd9a74f8add18b33fc6d2d79afd5aeb387566bfced23798fd064b3fc5ec4fb1f4d3ccfe344b3fc3eccfb0f4279bfd93419f0d60ccd5e8b5aedaa832a0a37cad02dd18a3ab065d2d1d0e74638d6e0ce8e8fcd6826e9cd18d05dd78a3ab035dd6e8c6512c954c30ba9e20a95cc9f7eae3e6923eae99879a983cef5e7ddc7a26de49c9f3f6e9e33630f0eafc986c8e3509f2668ad13580ce7437c164d04d33ba29a09b6e74534137c3e8a6816ea6d14d07dd2ca39b01bad946371374738c6e16e8e61add6cd0cd33ba39a09b6f747341b7c0e8e681aed1e8e683ee04a35b00ba138dae1174b4c6e504d09d6c742782ee14a33b0974d4d79e0c3aba373cc5e8743f519781ef183df551e177a87f06dd22ea9b41b798fa65d02da13e19744bc136e99641bf42ba26a3a33e4affaddb947b82a4da44216c132b933eae3ab23eeeeae48f1bcedbad0906e3da03765642acd69a72826b835ad076c608d9217d0d9437435daa47f1a0eb0cb1ebebc92a535e1bf3bd6eeb7b39a8b3cae17f4f90acffab2d9ed516f318f09f27675b0b92b3c3de4aced9f3a1ae9d7b74cf331a73761b7030e46c87e4ecb0b79273b60feadab947f7bda3316777010743cef6f2e46c212f395b1c230b0277eed16f9fd198b3570047f239db2e393bfcade49cbd15eadab947bf7f4763ce5e031cc9e76c67afdc1b0c7b2b3967ef86ba76eed158cc68ccd93b80832167fba49f1df65672cede0b75eddca371c1d198b3f70047f239dbc594b3ad92b34171be3308dcb94763d4a33167ef078ee47376af8ccf0e7f2b39671f86ba76eed17cc968ccd9874c59cf33fcc4cc33cc05dd4f8d6e1ef0269fdbfbda9872bb20b95d5c071204ee1ca5b9bbd198db5f30659dc7bf80b507a4fba5d19d00ba5f19dd89a0fbb5d19d047e31b4815e6903c3de4a6e03bf85ba762ed33cf2686c033f020e869cdd2b393becade49c7d02eadab9476b1a4663cefe1e381872b64f7276d85bc939fb5f50d7cebd45a63c1a7396d695eafb853f9afb8525a07bd4e89682ee4f46b70c747f36ba26d03d6674cda07bdce89683ee2f469707dd5f8dae05747f33ba02e89e30ba56d0fddde8da40f70fa36b07dd9346d701ba7f1a5d27e8fe65742b40f794d175199d9eefa2b557df313a7d6e291e3d4172e7365c6f150cdd32d67e0f949b7879f2b960e8b308646b79f2b65ab5efcdc1f07d5f0e3c7906dfb36063383c79e069499e275c775a48feb8e1396eb6629a055bcde0572b835f19b045c7a67db297031df625ad0ec6b6e4190b19b045c7a6fd3660241df66d748da1f6a3fbe6c6cc202f435b0aafcf68af0738c85e0dd4993775b0eec9866d02fc9dfa800950c6bebfc5d231e56a982b648b8e4dfb0560241f5b469eb1305cc6bcc5c8d56f64c0161ddbb63dc1111f1db33647ccda9918db2c46da6f07468a5fdbc8331686cb68f70b4c7d52cb70fb248a4bcbc8c76c58e735073abcff6b77307624cf189ed7768b91f63b809174adc0c3753d8c6aafbed8e6b80fc17ca66b165d7fc85e0dd4e9ac1eacbb0daea70c7d68a1d47b53ecd3933f4f853c5ecf86c3c37cee5a98f2318f7de7d341b2b966b7f9162b56d8e6b12fe7ea27a3fa72b227ccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccfe3347cdcbb9d6333c9f8ca42b000fc7387ff88e2a732c9c037a04e675929fb728e471ae9ed6312eb67cae813aff9b19647bd4b14e02e7ce975b3aa6754ae1b9c4754a3db04ff670dd06ae9b62587b12f22cb3786cdb131cf1f1711d894f6b34a2d669f914b31ce8703d5c33134f549e353b6c372666bbb097a7ed14f2fa7d40fa9d7ad49fd86d04d7be2db574ba4feaae1ef49b23074a9d77c6eb0695939cc7c57c435bc9afb7290c599f50150cbd56e03d05c31a9521f3d5b436a2c3b25d0375c65505ff7f6e3ae1ef3dc133d708611d3a36ed2f86ef765ac7aee7f337b63fec006e2ad75abe350137d5995835e8e3e74d99e97ea680eb6703e00d2c9f68c3f519c9dfef15d78bb496c0d30e3c1c6bd798ee6bf3988f49af17e9b462e5ba5fa63a1d10bf4e86f8c5ad59237bc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc2ec3f33beff8258f119e982278c23b4c6269ccfa07719e1bcd87d558376b9e70069ce6989e5333ea3fc64d520db03a68cef08703def8ee7926b6e2dea5c92bd09c1339fd3673a97c37ef743bb23669d8e98ad6062b4fb0cda5f018c14bf4ee0e16a8f1d168f6d1bfb8c764f6316d5cf72ad5f89ca33d73a85c6c46c17d78b70ccebd27a11fbfa55b0628aeb244887f3e0f86e159fdfff62af5dc07e0ad76825df6f1686cc01db6b05c91eae93f8a6892dad9348be1f28e439af11d446694d48abc357aaf33db8cefdc09471ad50018ef588e3efb4c5ad49c03e35f17770e68b73fcf4ee4a3abfdd0edbab803521db2d683b6384ec90be06cabfab1aac4bf5281e146b62d76d84de6588ecf6f75aacefe5a04e97c3ff9e2059ffbb2d9e6e8b59e7ce8f21cf1e817b3dae3ea92b22468b21465407ef79b9ae5ff69a6d7bad32f6a363ad3af4dd1aa8f338f451a5bc2b8aeb7e21ea1a80f70bf67561386bc72b7d3de0bfa1bfe884bff704cf7d3de0bf21875cf7a574fc25707ce21a1b445f5ba8ceff58d75186f57ac37aef95ebb71ff1e27a43aaf334f45579b32e37ea778ceb390baedf0d51cf7d903dbca72ac577ec1792be36623e220bd9c37cac33b1a67cec8ce05eeef86e36e2bb142b5a5f8ebf93edf8e93874c1777a128943b1bfe9b67ca136d505be509d06f085e79ea978ff99bcaf43ef87a80f6a73f84a75a6c3bbe0669a7216ce13f695a73afe4e5bdcfd27c54ffb3cd2ef5447db3ebc537d61f5605dfbdde814eb52dfa9de617dcfc777aacf813c3b159eb5e0eaab5745c46809c488eae0b38ef6efffa86bccf3f95e52bbdfc4ebe448b2d9e3b7aefb13aa83f7d054a71dfad9aca3ae3d2e4dd79024d7a7e3f340cbc02e3e0fb48c299eb960683c731607a7ed7acb76fd08da6eb06c378ca06d89b9c4dca79833fcdf1365ff5f18f87f5654a580b13a058c3529601c9302c6da14308e4d01635d0a18c7a580717c0a18b3c0f87c5edb19e253f0ecff7b8abdd740db0cef730863d1140c3f16cdbc3cb1f73e689be11d2a25ff7f03ccff17564bb9ff17560ebe3739058c5352c03835058cd352c0383d058c3352c03833058cb352c0383b058c7352c03837058cf352c0383f058c0b52c0d89802c61352c078620a184f4a01e3c929603c25058c0b853111c6a5bc8c05dffe1fe76c3074add9b3f130bf7b347c87a2eb3da71cff376ea9be33bf77b8a5dcf7f4e11a0bdeffebf1b9bd4b90630d45a9ef128cfbffb199180be53272ad25c775d4c3e1c1e7505dcfb7303016ca65e47a06059f891c0e8febffeae57d26a818b37218b9d68c95baa6119f15ec70c48c81b1502e23d77307f84ce470785ccf2eb6f03216ca65e45a9f9b051bc3e1e98298ad70c48c81b1502e23d3f36561ccba4ae0c1e7b0ba1c3163602c94cba8795632c5acbb049e9510b36e47cc7c62449ea4df89deedb0c5f1dc5ea9be1303328e4b01e3f81430e23a098efe2b6e9d44376f7c0ae5c687eb7cc5ad9340db0ccf8984b1c0e7029e2d16ab797962d749a0ed354cb1c0e7369e2d166b8087e339922cd8180e0f31e4e07b9353c03825058c5353c0382d058cd353c03823058c3353c0382b058cb353c03827058c7353c0382f058cf353c0b820058cf85b95e15e31f6f7cb9a516e3beab7ca68b71df5bb64b4db963c973caf04db92e792e795605bf25cf2bc126c4b9e4b9e57826dc973c9f34ab02d792e795e09b625cf25cf7db29d86317e611c7d8cc8d3981c4f1e7d475b3d1ef8dee3e0c930f98eb6d679e03b31a48d716d0a1857a68051e2585c83580ea3e6398d89675d093ca701cfe94c3ca795c0733af09c913c4f9853a797c0430c39f8deca1430ae4d01a3c451e2e813a3c4b172e2288cc2288cc2f87c30a6a10f17c654e463a15c46cdb33e799e30666794c0b31e6246df6be1652c94cba8793624cf13c66c7d093c1b2066eb1d3163602c94cba8793626cf13c66c43093c1b21661b1c3163602c94cba8793625cf13c66c63093c9b20661b1d3163602c94cba8793627cf13c66c53093c9b21669b1c3163602c94cba879b624cf13c66c73093c5b20669b1d3163602c94cba879b626cf13c66c4b093c5b21665b1c3163602c94cba879b625cf13c66c6b093cdb20665b1d3163602c94cba879b627cf13c66c5b093cdb2166db1c31f39571650a18d7a68091398e85721935cf0e269eed25f0ec009e3399787694c07326f0bc20799e30a7ce2c81871872f0bd9529605c9b024689a3c4d127468963e5c451188551184b63ec4901a39c6b61f49591e1f755ec3334678e72dbf596edfa0ab11df50ccd68b72d792e795e09b625cf25cf2bc1b6e4b9e47925d8963c973caf04db92e792e795605bf25cf2bc126c4b9e4b9e57826dc973c9f34ab02d792e795e09b625cf25cf2bc1b6e4b9e47925d8963c973caf04db92e792e795605bf25cf2bc126c4b9e4b9e57826dc973c9f34ab02d792e795e09b625cf25cf2bc1b6e4b9e4b94fb677266fbb50ea33ac3b8187e3995a263ff3fab86799633d9d60fc74acceb66275a615ab1cd4390be2773643fc3260978e4dfb64af54e6533d6066b25d98a88e310efc271b6bad7868fbe730f91ed5d79f33ca6d47f5f5a3dd76545f3fda6d4b9e4b9e57826dc973c9f34ab02d792e79ee8b6d2cd70483f7edf47e257d8c734d798cd94756fa1ed5593db6f8591f481be2b02d6d48ae1595605bf25cf2bc126c4b9e4b9e57826dc9733ff3fcbce46d877363f8fb426f717363e701cfb90cb160f233af7d3adff2e91ccba71cd4c177d69ecfe06706ecd2b169ff7c380f6963d63c6b4c9958b3506f8d278ca43b9797276c5f6b82a15b5cfb3a1f7818da410b939f61fbbac0f2698d23ee540773f502063f5d6d87f62f80f3903666cdb3ce9489350bf5d679c248baf37879c2f6b52e18bac5b5af0b8087a3ff61f2336c5f175a3ead73c49dea60ae5ec8e0a7abedd0fe85701ed2c6ac794e336562cd42bdd33c6124ddf9bc3c6d59f099b6b8f67521f070f43f4c7e86ed6b97e5d3698eb8531dccd55d0c7ebada0eedef82f320ccc2ec62d63cf47fca136b16ea9dee0923e92e60e569cb67c167dae2fab15dc0c3d1cf33c53decc72eb27c3add1177aa83b97a11839faeb643fb17c1792885796d0a9925ce12e7286689b3c4398a59e22c718e6296384b9ca39825ce12e7286689b3c4398a59e22c718e6296384b9ca39825ce12e7286689b3c4398a59e22c718e6296384b9ca39825ce12e7286689b3c4398a59e22c718e6296384b9ca39825ce12e7286689b3c4398a59e22c718e6296384b9ca39825cee5316b9e334c9958b350ef0c4f184977212f4ff8fcce19c1d02d63edf740f922e0d9c5101f263fc375ef175b3e9de1883bd5c1f67531839faeb643fb17c3792885796d0a9925cee5316b9ef5a64cac59a8b7de1346d2ede2e509fbb1f5c1d02dae1fbb187838fa79263fc37eec12cba7f58eb8531d6c5f9730f8e96a3bb47f099c0761166617b3e6d960cac49a857a1b3c6124dd45ac3c85f039c40dc1d02dae1fbb047838fa79a6b887fdd8a5964f1b1c71a73a98ab9732f8e96a3bb47f299c875298d7a69059e22c718e6296384b9ca39825ce12e7286689b3c4398a59e22c718e6296384b9ca39825ce12e7286689b3c4398a59e22c718e629638574e9c35cf465326d62cd4dbe80923e92e66e5690de71d360643b7b879874b8187635e8629eee1bcc365964f1b1d71a73ad8be2e63f0d3d57668ff32380fa39d796d0a992537468659724398a398253784398a59724398a398253784398a59724398a398253784398a59724398a398253784398a59724398a398253784398a59724398a398253784398a59724398a398253784398ad987dcd03c9b4c9958b3506f93278ca4bb8497277cefc1a660e816b76ee732e0b994213e4c7e86eb76765b3e6d72c49dea60fbdacde0a7abedd0fe6e380fbb8559981dcc9a67b329136b16ea6df684917497f2f284fdd8e660e816d78fed061e8e7e9ec9cfb01febb57cdaec883bd5c15ced65f0d3d576689fec09b33047316b9e2da64cac59a8b7c51346d25dc6cb13f6635b82a15b5c3fd60b3cbb19e2c3e467d88fedb17cdae2883bd5c15cddc3e0a7abedd0fe1e380fc22ccc2e66cdb3d59489350bf5b67ac248baddbc3c852cf84c5b5c3fb6077838fa79263fc37e6cafe5d35647dca90ee6ea5e063f5d6d87f6f7c279481bb3e6d966cac49a857adb3c61245d2f2f4fd8beb60543b7b8f6b5177838fa1f263fc3f6b5cff2699b23ee540773751f839faeb643fbfbe03ca48d59f36c376562cd42bded9e30926e0f2f4fd8beb60743b7b8f6b50f7838fa1f263fc3f6d567f9b4dd1177aa83b9dac7e0a7abedd07e1f9c87b4316b9e1da64cac59a8b7c31346d2613f455b1530ee60620c2cc6c08a0ff2ccf78c67a7673c333de399ec19cf38cf78167bc653ed19cf0acf78da3de32978c6b3c0339e599ef14cf18c67bc673ccb3ce3a9f18c67a1673c4b3ce399ed19cf54cf78b29ef13479c633c6339e6ecf78ba3ce359e4194f87673cad9ef12cf78c678e673cd33ce359ea19cf04cf78729ef1347bc653eb19cf2acf78e67ac633dd339e899ef1d47bc633d6339ed59ef1747ac6d3e6194fde339e799ef1ccf08c6792673c0d9ef1d479c693f180271b3c731d4316febe137455d677f5f565cfd4c1bfd3bc71157c67bf29573b8edd073a9a67deeff82ec6896b2e1c6df5c03ed99b001cfb3de1a9f38ca7c1339e499ef1ccf08c679e673c79cf78da3ce3e9f48c67b5673c633de3a9f78c67a2673cd33de399eb19cf2acf786a3de369f68c27e719cf04cf78967ac633cd339e399ef12cf78ca7d5339e0ecf781679c6d3e5194fb7673c633ce369f28c27eb19cf54cf78667bc6b3c4339e859ef1d478c6b3cc339ef19ef14cf18c6796673c0b3ce32978c6d3ee19cf0acf78aa3de359ec19cf38cf78267bc633d3339e9d9ef1ccf78ca7cac1b3938927ead9e69d9ed866380f797ddccb997cbac21cabd61c97f8c95e0dd439c90c3ceaf90ffc2e71d9f3ffd876ae801871bd572267f1d0febe516ebbdeb25d5f21b61b2cdb0d15625bf25cf2bc126c4b9e4b9e57826dc973c9731f6d3f9d9ced7679bfd4f079e47d4ef13cf23ea7781e799f533c8fbccf299e47dee714cf23ef738ae791f739c5f32cf48c47dee714cf23ef738ae769f28c678c673cf23ea7789e459ef1c8fb9ce279e47d4ef13cf23ea7789e099ef1c8fb9ce2796a3de3f1ed7d4ebebd0f5ede2f15cf33d1331e79bf543c8fbc5f2a9e47de2f15cf23ef978ae791f74bc5f3d479c693f180e7d9de2f85ef85bac294f7818ed697c6bd872a0bc7b90274349e4bc7d0d7abc3539fc95005df39e0e0badc618fec1c707c7724e28eb67a609fece1fbaa0e78c253e7194f83673c933ce399e119cf3ccf78f29ef1b479c6d3e919cf6acf78c67ac653ef19cf44cf78a67bc633d7339e9d9ef1acf28ca7d6339e66cf78729ef14cf08c67a9673cd33ce399e319cf72cf785a3de3e9f08c6791673c5d9ef1747bc633c6339e26cf78b29ef14cf58c67b6673c4b3ce359e8194f8d673ccb3ce319ef19cf14cf786679c6b3c0339e82673ced9ef1acf08ca7da339ec59ef18cf38c67b2673c333de399ef194f958387eb9d5151cfd78fc4fbaa9ecdb6de5f0671d15b16fe3e12cf71edb418691fd73d202ff12c63e2897a2fc0320f6c6bffe9b7e844f39985bfe373385c39b5cc62a47d574ee1bac626269ea8f7193479605bc7a2d994690d4016fede0c8c5c39d56431d2be2ba71a7879dab2e0336d716b8db0cd719c43263ff3d8fe127c87465ec76a8715ab662b5639a83312ebd2a3fa03b227ccc21cc5ac79682e8558f17a3612cf990d87d1757d65e009fbc7e5c1d02dae7fdc013c1cd70f263fc37eeca0e5d37247dca90ee6ea41063f5d6d87f60f3a6c3706c9c6e2ca61c4e24a07cf95231c0bb2572af3ce1432fb1067cd436b118915d737e73d6124dd325e9eb07fcc0743b7b8fef14ae0e1b87e30f919f609872c9ff28eb8531d6c5f8718fc74b51dda3f04e7a114e6832964963897c7ac79680e8258b350afe00923e976b0f214f259f099b6b87eec10f070f4f34c710ffbb1c3964f0547dca90eb6afc30c7ebada0eed1f86f320ccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22ccc7e336b1e7a369658b350afd51346d25dc9ca539c77680d866e71f30e878187635e8629eee1bcc311cba75647dca90ee6ea11063f5d6d87f68fc0791066611666611666611666611666611666611666611666611666611666611666bf99350fbdb39d58b350afcd1346d21de2e5099fdb6a0b866e71f30e4780e730437c98fc0ce71dfa2d9fda1c71a73a98abfd0c7ebada0eedf7c37910666176316b1e7a571bb166a15ebb278ca43bccca539c3f6d0f866e71fd583ff070f4f34c710ffbb1a3964fed8eb8531dccd5a30c7ebada0eed1f85f3500af3c114324b9c25ce51cc1267897314b3c459e21cc52c71963847314b9c25ce51cc1267897314b3c459e21cc52c71963847314b9c25ce51cc12e79161f621ce9a87fe0f4162cd42bd0e4f1849778495a7359c77e808866e71f30e478187635e8629eee1bcc355964f1d8eb8531d6c5f5731f8e96a3bb47f159c87d1ce7c3085cc921b23c32cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc5ec436e689e4e5326d62cd4ebf4849174fdbc3ce17b0f3a83a15bdcba9dab80e728437c98fc0cd7ed1cb37cea74c49dea60fb3ac6e0a7abedd0fe31380fc22ccc2e66cdb3c29489350bf55678c248baa3bc3c852cf84c5b5c3f760c7838fa79263fc37eecb8e5d30a47dca90ee6ea71063f5d6d87f68fc379481bb3e6e9326562cd42bd2e4f184987d7e52e269e9cc59373c4e2f9b2adf7bb4d7982f9ccc2dfbb8191ab3fecb218691f731c7989a79b89a7dee2a977c4e2f9b2adfd5f65ca13cd6716febe0a18b972aadb62a47d574ed503cf2a269e068ba7c1118be7cbb68ec56a539e643eb3f0f7d5c0c89553ab2c46da77e55403f0ac66e289ea93568f80eda8f63512b6a37265246c4bcca363ced0eec2f181d5c1d02deebe1aaf2d1c7d15939f79d7f57bb5e5135ebff11ef5f9ba3e09b330473133dde7b6652ddb149fc0e2a1ed18732c46f27776b7e5531a7e67c7311f4c21b3c4b93c666d7b2079db6d59cb36c527b078681b608e05939f617f7075e08e31d9cb411dccd3ab19fccc805d3a36ed5f0de7a114e6832964963897c7ac6d5f93b8ede2fb87d136c527b07868bb8639163c7e16fb836b03778cc95e0eea609e5ecbe06706ecd2b169ff5a380fc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc2ec37b3b67d5de2b68be3f7689be213583cb45dc71c0b1e3f8be3f7d707ee1893bd1cd4c1737e3d839f19b04bc7a6fdebe13c08b3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3dfccdaf60b93b71d3e8f83b6293e81c543db0b9963c1e467387e7f43e08e31d9cb411d3ce73730f89901bb746cdabf01ce83300bb38b59db7e51e2b68bf379689be213583cb4bd8839163c7e16fb831b03778cc95e0eeae039bf91c1cf0cd8a563d3fe8d701e4a613e98426689b3c4398a59e22c718e6296384b9ca39825ce12e7286689b3c4398a59e22c718e6296384b9ca39825ce12e7286689b3c4398a59e25c3971d6b66f4adc766b387e8fb6293e81c543db4dccb1e0f1b3387e7f73e08e31d9cb411dccd39b19fccc805d3a36eddf0ce761b4331f4c21b3e4c6c8304b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e486304731fb901bdaf62dc9db0e9f6747db149fc0e2a1ed16e65830f919ae7fb93570c798ece5a00ee6e9ad0c7e66c02e1d9bf6c99e300b7314b3b67d5bf2b60b59cb36c527b07868bb8d39164c7e86fdc1ed813bc6642f0775f09cdfcee06706ecd2b169ff76380f6963c6f39749ce76b86e936c54994fadbbc394ab41f76253ae01dd4b4c790ce85e6acab5a0bbd394c782ee65e01be95e6eca4b41779729af06dd2b4c7915e85e69cadda07b95297781ee6e533e06ba579bf271d0bdc6940740778f295f0dbad79af235a07b9d295f0bbad79bf275a07b83295f0fba379af20b41f72653be01746f36e51781ee2da67c23e8de6aca3781ee6da67c33e8ee35e585a07bbb43779f29df02bafb4df956d0bdc3947782ee9da63c0e740f98f278d0fd0794e9f35da63c0174ef36e51ce8de63ca1341f7a029d783eebda63c0974ef33e506d0bddf942783ee03a63c05741f34e5a9a07bc894a781ee43a63c1d741f36e519a0fb8829cf04dd474d7916e83e66cab341f771539e03ba4f98f25cd07dd294e781ee53a63c1f749f36e505a07bd894f1fc7ec6946f031df52bb7838efa953b4047fdca8b4147fdca4b4047fdca4b4147fdca9da0a37ee565a0a3bc7b39e828efee021de5dd2b404779f74ad051debd0a74947777838ef2eed5a0a3bc7b0de828efee011de5dd6b414779f73ad051debd1e7494776f001de5dd1b414779f726d051debd197494776f011de5dd5b414779f736d051dedd0b3acabbb7838ef2ee3ed051dedd0fba46537e07e84e30e57782ee44537e0074279932f633279bf2bb40778a29bf1b74d417be0774a79af283a05b64caef05dd62537e1fe89698f2fb41b7d4943f00ba65a6fc41d03599f243a06b36e50f816eb9297f18747953fe08e85a4cf9a3a02b98f2c740d76aca1f075d9b297f0274eda6fc49d07598f2a740d769ca9f06dd0a537e1874741da77e46b767dd2e290e1423ad239f9b1dbe90ae0e7ce90992bda7235b746cda6f05463a078591672c0c97b1c562d43ced0c31c3bca22dee37533bf0b431f030f919fe66eab07c6ab57cca419d53c1cf0e063f3360978e4dfb1d609be39c632c6acd711759b1a8813a6de622a7afa77171a463e8fc2d387ce18a638bc5d3e2b0ddc51c473a36f5895d2360bbd3b29db76ce3b580b6b8b6dd09cc2b1898f571bb933f6ed8b6579a63513e939d3cf8b40a6290944f683b6384ec90be06ca5ba70ed6a57a140fba7612bb6e47742e91ddfe5ebbf5bd1cd4e972f8df1324eb7fb7c5d36d31ebdf133d53073918da4398035d1607ede72176dd11b1eb82d8511dbcf63631c56e85c543fb4dc043f7571da0a3fb14e2c77bbce611e0b6fbbd0e0737e93a81b1c9c158489e31bccf6ab21869bf008ca45b013c9d4c31b3cff5222b3e784f30d6aa43dfad813abbe1ba9c75d4d5edae3133e817fdfe7f3a48b64faf6588178e4d04109fc08a216dc450170c8e5f24c9333e181c9f383ed07facf7f2beb3fa7af76500adc6c2c4cf8cc38d2ad061b9daa10b82a1c330381c4cc330381c5c658505877fa8befe19a7dda2a18ebec30706ce3dd27764efb1eb8f0ef4eddbd67f39528fb1e89134ca0324451d6d75c1e080514f90ec4450ad652b2e79eae0736cf23c2d4c7e8617bd71964fb5964f39a83306fe368ec1cf0cd8a563d3fe3887ed043ba23016e387118bf10e9ef1231c0b1c74271db654fa3b4edc5459be608b469fec3c4fd42132b8108e9f3170fa6fbab18f31ce8c0d064f36f59efa8e569f043d5aabaf5a7a34568fbeea2e488faeea0b9a1e3dd5a3a57a74548f86ead14f3ddaa94737f568a61ebdd4a3957a74b231288e3eead1463dbaa847134f01b6ef00affe45afaf907a34508ffee9d13e7d67a5ef00f4dd88befbd6778afad7a3be43d0bf6af50887bedaea3b197d95d657567da7a8ef10f51dbdbec3d533646b94ac35b15ea7e43425a72b3943c97a251b946c54b249c966255b946c55b24dc976253b949ca9e405417164ff2c25672b3947c9b94ace5372be920b945ca86497928b945cace41225972ab94cc96e25bd4af628d9ab649f923e25fb955caee40a250782e2aaa02b951c527258c91125fd4a8e2ab92a28ced2e959393d0ba767ddf42c9b9e55d3b3687ad64ccf92e959313d0ba667bdf42c979ed5ba2528ce46e999083df3a0671af4cc829e49d033077706c599013d137057501ce9d723fb7a245f8fdceb917a3d32af47e2f5c8bb1e69d723eb7a245d8f9ceb91723d32ae47c2f5c8b71ee9d623db7a245b8f5cdf1f1447a6f548b41e79d623cd7a64598f24eb91e30783e2c8b01e09d623bf7aa4578fecea915c3d72ab476af5c8ac1e89d523af7aa4558facea91543d72aa474af5c8a81e09fdac92cf29f9bc922f28f9a2922f29f9b292af28f9aa92af29f9ba926f28f9a6926f29f97650cccbef2af99e92ef2bf981921f2af991921f2bf989929f2af999929f2bf985925f2af995925f2bf98d92df2af99d924794fc5ec91f94fc51c9a34afea4e4cf4a1e53f2b892bf28f9ab92bf297942c9df95fc43c9934afea9e45f4a9e0a066756b013a9333d0f8df2f70e0cf41d3e3ad038d0df78f8ea4303078e1ebabef1da03035734f65fd3776cffa1fe6bf1cbdf305fa6298c75c78ef55edf78e0c8bebeeb1afbaf1e68ecdfdfb8a7ffea23fb8ee3971e335f9afb4c8bbdfbf6451bfbcfe742fadf651a1d6bfa449a1cda1cefdbf8ea320232a99c2fb55597e7d02a73d5a15fef6717ef761b8f1fea1f68cc371e51fff61e52dfe9dbd7dc887f3bae827c7ca0f1f840efb181c6fdc7fa0f37b634e3714f9c508613ad53cbf8d2655387ef79f07f5ef0c7e5f1d90300", "privateFunctions": [ { "selector": { @@ -44,8 +44,8 @@ exports[`ContractClass creates a contract class from a contract compilation arti "isInternal": false } ], - "id": "0x193b0f08a5af3b2286bff06aaddcf074dd2e467e6fb1e412d747d2b64648866f", + "id": "0x1d35332467bbe78e156cd11544acc91cd65393045b1dcacbcf065bdd6ad70e83", "privateFunctionsRoot": "0x05fa82a96814b6294d557d507151f7ccc12f70522ec4d9d0395a90e87e8087c6", - "publicBytecodeCommitment": "0x0de7228dd1c2821b5dcb66dc4e0de48e1f6a88e2830be489ad6c7006fcd868b8" + "publicBytecodeCommitment": "0x279e2e435f2257d069c01cbbcc162c99e31cdb13aad3cc2268b99016f87aa75e" }" `; diff --git a/yarn-project/circuits.js/src/structs/__snapshots__/private_call_stack_item.test.ts.snap b/yarn-project/circuits.js/src/structs/__snapshots__/private_call_stack_item.test.ts.snap index ba1d123faee..75597cc7259 100644 --- a/yarn-project/circuits.js/src/structs/__snapshots__/private_call_stack_item.test.ts.snap +++ b/yarn-project/circuits.js/src/structs/__snapshots__/private_call_stack_item.test.ts.snap @@ -1,5 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`PrivateCallStackItem computes empty item hash 1`] = `Fr<0x1c3b67cab2bc3dc2106cfeddd8ea68b8d445849f20ed3b9286ad684542aae25d>`; +exports[`PrivateCallStackItem computes empty item hash 1`] = `Fr<0x19196a5f02621a64ce289fb09fada7fd650a6874cb63e7d10c0d9a9bf5a366f5>`; -exports[`PrivateCallStackItem computes hash 1`] = `Fr<0x22029fc3a0b18b8f9fe4d5cdb237b9b5580c9dd2368299936d8deedf13d742c3>`; +exports[`PrivateCallStackItem computes hash 1`] = `Fr<0x0094610c51e8fd109091d6d7835670d25d0035ff207de051503fd9a9e7cc1c00>`; diff --git a/yarn-project/circuits.js/src/structs/__snapshots__/private_circuit_public_inputs.test.ts.snap b/yarn-project/circuits.js/src/structs/__snapshots__/private_circuit_public_inputs.test.ts.snap index 1514ccd533d..f99bdd2000a 100644 --- a/yarn-project/circuits.js/src/structs/__snapshots__/private_circuit_public_inputs.test.ts.snap +++ b/yarn-project/circuits.js/src/structs/__snapshots__/private_circuit_public_inputs.test.ts.snap @@ -1,5 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`PrivateCircuitPublicInputs computes empty inputs hash 1`] = `Fr<0x2745ec62624afeb19b86af3d440db1f8c3432e1d17a074c75cb8f44999fd3fae>`; +exports[`PrivateCircuitPublicInputs computes empty inputs hash 1`] = `Fr<0x2b5ba01a6b73b68b4f44196e2dea49afd4076333e2dee8eddc9186e080f18201>`; -exports[`PrivateCircuitPublicInputs hash matches snapshot 1`] = `Fr<0x05eec129252f2229777f96446c2901e660c6e01e196000b57c99fb3aec43b160>`; +exports[`PrivateCircuitPublicInputs hash matches snapshot 1`] = `Fr<0x25f066a8adb3889b9ebf162d7af91352a77200965cbc7900831b745e31342fb4>`; diff --git a/yarn-project/circuits.js/src/structs/__snapshots__/public_call_stack_item.test.ts.snap b/yarn-project/circuits.js/src/structs/__snapshots__/public_call_stack_item.test.ts.snap index f48aceba2c8..74a7580d9f7 100644 --- a/yarn-project/circuits.js/src/structs/__snapshots__/public_call_stack_item.test.ts.snap +++ b/yarn-project/circuits.js/src/structs/__snapshots__/public_call_stack_item.test.ts.snap @@ -1,7 +1,7 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`PublicCallStackItem Computes a callstack item hash 1`] = `"0x187836686ed01f12180ef08c419e4ac8514d9c60e6a38b4a56d893fa90c83a5d"`; +exports[`PublicCallStackItem Computes a callstack item hash 1`] = `"0x1cec0b51f9394405a626c3b77081c96f1bdcb8bacf96960ae4749068f9b4da0d"`; -exports[`PublicCallStackItem Computes a callstack item request hash 1`] = `"0x1a1194c14f229b72d31669b06e3984d6f0f5edd4d5204ceda0ff30f25e910e83"`; +exports[`PublicCallStackItem Computes a callstack item request hash 1`] = `"0x00edd2f10c0cdf776ee2fff3c799bae6df5771f5013a2d5d7154601dffdcf869"`; -exports[`PublicCallStackItem computes hash 1`] = `Fr<0x0ef0cbf32ad96d5f6c7577b023a3b4f9a9cd5d53a8c9eb268324183aaa1437ff>`; +exports[`PublicCallStackItem computes hash 1`] = `Fr<0x002e34c7c46791fe0616effcbc5e9558eaaa69748c028e3ce36b34cdba695d2b>`; diff --git a/yarn-project/circuits.js/src/structs/__snapshots__/public_circuit_public_inputs.test.ts.snap b/yarn-project/circuits.js/src/structs/__snapshots__/public_circuit_public_inputs.test.ts.snap index 201d5c667eb..9c07ecf42ea 100644 --- a/yarn-project/circuits.js/src/structs/__snapshots__/public_circuit_public_inputs.test.ts.snap +++ b/yarn-project/circuits.js/src/structs/__snapshots__/public_circuit_public_inputs.test.ts.snap @@ -1,5 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`PublicCircuitPublicInputs computes empty item hash 1`] = `Fr<0x1c9942cee14a4f84b3e606f553b2ab3151c395822ee7ffd51759d5822375d6c9>`; +exports[`PublicCircuitPublicInputs computes empty item hash 1`] = `Fr<0x083ac560a513d670a7f50f0a3052d42cb9816b7b643e62025b8278652ad637ab>`; -exports[`PublicCircuitPublicInputs hash matches snapshot 1`] = `Fr<0x1135d901dacdffe956b9cd85c976a2c5fe311018164a3ec612ff8ed89f8d56cb>`; +exports[`PublicCircuitPublicInputs hash matches snapshot 1`] = `Fr<0x26612d7a1afd04b2023d9a766f7c44042ebdfbd606e4b347fd4c201040c53658>`; diff --git a/yarn-project/circuits.js/src/structs/call_context.ts b/yarn-project/circuits.js/src/structs/call_context.ts index a7a1d328487..17438a431a7 100644 --- a/yarn-project/circuits.js/src/structs/call_context.ts +++ b/yarn-project/circuits.js/src/structs/call_context.ts @@ -41,7 +41,7 @@ export class CallContext { /** * The start side effect counter for this call context. */ - public startSideEffectCounter: number, + public sideEffectCounter: number, ) {} /** @@ -82,7 +82,7 @@ export class CallContext { fields.functionSelector, fields.isDelegateCall, fields.isStaticCall, - fields.startSideEffectCounter, + fields.sideEffectCounter, ] as const; } @@ -143,7 +143,7 @@ export class CallContext { callContext.functionSelector.equals(this.functionSelector) && callContext.isDelegateCall === this.isDelegateCall && callContext.isStaticCall === this.isStaticCall && - callContext.startSideEffectCounter === this.startSideEffectCounter + callContext.sideEffectCounter === this.sideEffectCounter ); } } diff --git a/yarn-project/circuits.js/src/structs/kernel/combined_accumulated_data.test.ts b/yarn-project/circuits.js/src/structs/kernel/combined_accumulated_data.test.ts index 53725a9e0cc..b4cdcddaa5b 100644 --- a/yarn-project/circuits.js/src/structs/kernel/combined_accumulated_data.test.ts +++ b/yarn-project/circuits.js/src/structs/kernel/combined_accumulated_data.test.ts @@ -1,5 +1,11 @@ import { makeCombinedAccumulatedData, makeFinalAccumulatedData } from '../../tests/factories.js'; -import { CombinedAccumulatedData, PrivateAccumulatedRevertibleData } from './combined_accumulated_data.js'; +import { Fr } from '../index.js'; +import { + CombinedAccumulatedData, + PrivateAccumulatedRevertibleData, + PublicAccumulatedNonRevertibleData, + PublicAccumulatedRevertibleData, +} from './combined_accumulated_data.js'; describe('CombinedAccumulatedData', () => { it('Data after serialization and deserialization is equal to the original', () => { @@ -7,6 +13,36 @@ describe('CombinedAccumulatedData', () => { const afterSerialization = CombinedAccumulatedData.fromBuffer(original.toBuffer()); expect(original).toEqual(afterSerialization); }); + + it('recombines notes correctly', () => { + const nonRevertible = PublicAccumulatedNonRevertibleData.empty(); + nonRevertible.newNoteHashes[0].counter = new Fr(1); // a note created in private fee setup + nonRevertible.newNoteHashes[1].counter = new Fr(5); // a note created in public setup + nonRevertible.newNoteHashes[2].counter = new Fr(10); // a note created in public teardown + + const end = PublicAccumulatedRevertibleData.empty(); + end.newNoteHashes[0].counter = new Fr(2); // a note created in private app logic + end.newNoteHashes[1].counter = new Fr(8); // a note created in public app logic + + const combined = CombinedAccumulatedData.recombine(nonRevertible, end, false); + + expect(combined.newNoteHashes.map(x => x.counter.toNumber()).slice(0, 5)).toEqual([1, 2, 5, 8, 10]); + }); + + it('recombines nullifiers correctly', () => { + const nonRevertible = PublicAccumulatedNonRevertibleData.empty(); + nonRevertible.newNullifiers[0].counter = new Fr(1); // a nullifier created in private fee setup + nonRevertible.newNullifiers[1].counter = new Fr(5); // a nullifier created in public setup + nonRevertible.newNullifiers[2].counter = new Fr(10); // a nullifier created in public teardown + + const end = PublicAccumulatedRevertibleData.empty(); + end.newNullifiers[0].counter = new Fr(2); // a nullifier created in private app logic + end.newNullifiers[1].counter = new Fr(8); // a nullifier created in public app logic + + const combined = CombinedAccumulatedData.recombine(nonRevertible, end, false); + + expect(combined.newNullifiers.map(x => x.counter.toNumber()).slice(0, 5)).toEqual([1, 2, 5, 8, 10]); + }); }); describe('FinalAccumulatedData', () => { diff --git a/yarn-project/circuits.js/src/structs/kernel/combined_accumulated_data.ts b/yarn-project/circuits.js/src/structs/kernel/combined_accumulated_data.ts index cc281831036..634b2ae0582 100644 --- a/yarn-project/circuits.js/src/structs/kernel/combined_accumulated_data.ts +++ b/yarn-project/circuits.js/src/structs/kernel/combined_accumulated_data.ts @@ -34,7 +34,7 @@ import { import { CallRequest } from '../call_request.js'; import { NullifierKeyValidationRequestContext } from '../nullifier_key_validation_request.js'; import { ReadRequestContext } from '../read_request.js'; -import { SideEffect, SideEffectLinkedToNoteHash } from '../side_effects.js'; +import { SideEffect, SideEffectLinkedToNoteHash, sideEffectCmp } from '../side_effects.js'; const log = createDebugOnlyLogger('aztec:combined_accumulated_data'); @@ -319,13 +319,13 @@ export class CombinedAccumulatedData { } const newNoteHashes = padArrayEnd( - [...nonRevertible.newNoteHashes, ...revertible.newNoteHashes].filter(x => !x.isEmpty()), + [...nonRevertible.newNoteHashes, ...revertible.newNoteHashes].filter(x => !x.isEmpty()).sort(sideEffectCmp), SideEffect.empty(), MAX_NEW_NOTE_HASHES_PER_TX, ); const newNullifiers = padArrayEnd( - [...nonRevertible.newNullifiers, ...revertible.newNullifiers].filter(x => !x.isEmpty()), + [...nonRevertible.newNullifiers, ...revertible.newNullifiers].filter(x => !x.isEmpty()).sort(sideEffectCmp), SideEffectLinkedToNoteHash.empty(), MAX_NEW_NULLIFIERS_PER_TX, ); diff --git a/yarn-project/circuits.js/src/structs/private_call_stack_item.ts b/yarn-project/circuits.js/src/structs/private_call_stack_item.ts index 5da5b020841..d92883b57d8 100644 --- a/yarn-project/circuits.js/src/structs/private_call_stack_item.ts +++ b/yarn-project/circuits.js/src/structs/private_call_stack_item.ts @@ -114,7 +114,7 @@ export class PrivateCallStackItem { this.hash(), parentCallContext.storageContractAddress, callerContext, - new Fr(this.publicInputs.callContext.startSideEffectCounter), + new Fr(this.publicInputs.callContext.sideEffectCounter), this.publicInputs.endSideEffectCounter, ); } diff --git a/yarn-project/circuits.js/src/structs/private_circuit_public_inputs.ts b/yarn-project/circuits.js/src/structs/private_circuit_public_inputs.ts index 48d6f7c49c7..af79b7382ba 100644 --- a/yarn-project/circuits.js/src/structs/private_circuit_public_inputs.ts +++ b/yarn-project/circuits.js/src/structs/private_circuit_public_inputs.ts @@ -83,6 +83,10 @@ export class PrivateCircuitPublicInputs { * New L2 to L1 messages created by the corresponding function call. */ public newL2ToL1Msgs: Tuple, + /** + * The side effect counter at the start of this call. + */ + public startSideEffectCounter: Fr, /** * The end side effect counter for this call. */ @@ -155,6 +159,7 @@ export class PrivateCircuitPublicInputs { reader.readArray(MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, Fr), reader.readArray(MAX_NEW_L2_TO_L1_MSGS_PER_CALL, L2ToL1Message), reader.readObject(Fr), + reader.readObject(Fr), reader.readArray(NUM_FIELDS_PER_SHA256, Fr), reader.readArray(NUM_FIELDS_PER_SHA256, Fr), reader.readObject(Fr), @@ -181,6 +186,7 @@ export class PrivateCircuitPublicInputs { reader.readFieldArray(MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL), reader.readArray(MAX_NEW_L2_TO_L1_MSGS_PER_CALL, L2ToL1Message), reader.readField(), + reader.readField(), reader.readFieldArray(NUM_FIELDS_PER_SHA256), reader.readFieldArray(NUM_FIELDS_PER_SHA256), reader.readField(), @@ -210,6 +216,7 @@ export class PrivateCircuitPublicInputs { makeTuple(MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, Fr.zero), makeTuple(MAX_NEW_L2_TO_L1_MSGS_PER_CALL, L2ToL1Message.empty), Fr.ZERO, + Fr.ZERO, makeTuple(NUM_FIELDS_PER_SHA256, Fr.zero), makeTuple(NUM_FIELDS_PER_SHA256, Fr.zero), Fr.ZERO, @@ -267,6 +274,7 @@ export class PrivateCircuitPublicInputs { fields.privateCallStackHashes, fields.publicCallStackHashes, fields.newL2ToL1Msgs, + fields.startSideEffectCounter, fields.endSideEffectCounter, fields.encryptedLogsHash, fields.unencryptedLogsHash, diff --git a/yarn-project/circuits.js/src/structs/public_call_request.ts b/yarn-project/circuits.js/src/structs/public_call_request.ts index d7dc04e45f7..30f4faf8f8b 100644 --- a/yarn-project/circuits.js/src/structs/public_call_request.ts +++ b/yarn-project/circuits.js/src/structs/public_call_request.ts @@ -120,7 +120,7 @@ export class PublicCallRequest { item.hash(), this.parentCallContext.storageContractAddress, callerContext, - new Fr(this.callContext.startSideEffectCounter), + new Fr(this.callContext.sideEffectCounter), Fr.ZERO, ); } diff --git a/yarn-project/circuits.js/src/structs/public_circuit_public_inputs.ts b/yarn-project/circuits.js/src/structs/public_circuit_public_inputs.ts index 8ee7a9375cb..373741a2cfe 100644 --- a/yarn-project/circuits.js/src/structs/public_circuit_public_inputs.ts +++ b/yarn-project/circuits.js/src/structs/public_circuit_public_inputs.ts @@ -83,6 +83,14 @@ export class PublicCircuitPublicInputs { * New L2 to L1 messages generated during the call. */ public newL2ToL1Msgs: Tuple, + /** + * The side effect counter when this context was started. + */ + public startSideEffectCounter: Fr, + /** + * The side effect counter when this context finished. + */ + public endSideEffectCounter: Fr, /** * Hash of the unencrypted logs emitted in this function call. * Note: Represented as an array of 2 fields in order to fit in all of the 256 bits of sha256 hash. @@ -134,6 +142,8 @@ export class PublicCircuitPublicInputs { makeTuple(MAX_NEW_NOTE_HASHES_PER_CALL, SideEffect.empty), makeTuple(MAX_NEW_NULLIFIERS_PER_CALL, SideEffectLinkedToNoteHash.empty), makeTuple(MAX_NEW_L2_TO_L1_MSGS_PER_CALL, L2ToL1Message.empty), + Fr.ZERO, + Fr.ZERO, makeTuple(2, Fr.zero), Fr.ZERO, Header.empty(), @@ -159,6 +169,8 @@ export class PublicCircuitPublicInputs { isSideEffectArrayEmpty(this.newNoteHashes) && isSideEffectLinkedArrayEmpty(this.newNullifiers) && isArrayEmpty(this.newL2ToL1Msgs, item => item.isEmpty()) && + this.startSideEffectCounter.isZero() && + this.endSideEffectCounter.isZero() && isFrArrayEmpty(this.unencryptedLogsHash) && this.unencryptedLogPreimagesLength.isZero() && this.historicalHeader.isEmpty() && @@ -185,6 +197,8 @@ export class PublicCircuitPublicInputs { fields.newNoteHashes, fields.newNullifiers, fields.newL2ToL1Msgs, + fields.startSideEffectCounter, + fields.endSideEffectCounter, fields.unencryptedLogsHash, fields.unencryptedLogPreimagesLength, fields.historicalHeader, @@ -230,6 +244,8 @@ export class PublicCircuitPublicInputs { reader.readArray(MAX_NEW_NOTE_HASHES_PER_CALL, SideEffect), reader.readArray(MAX_NEW_NULLIFIERS_PER_CALL, SideEffectLinkedToNoteHash), reader.readArray(MAX_NEW_L2_TO_L1_MSGS_PER_CALL, L2ToL1Message), + reader.readObject(Fr), + reader.readObject(Fr), reader.readArray(NUM_FIELDS_PER_SHA256, Fr), reader.readObject(Fr), reader.readObject(Header), @@ -253,6 +269,8 @@ export class PublicCircuitPublicInputs { reader.readArray(MAX_NEW_NOTE_HASHES_PER_CALL, SideEffect), reader.readArray(MAX_NEW_NULLIFIERS_PER_CALL, SideEffectLinkedToNoteHash), reader.readArray(MAX_NEW_L2_TO_L1_MSGS_PER_CALL, L2ToL1Message), + reader.readField(), + reader.readField(), reader.readFieldArray(NUM_FIELDS_PER_SHA256), reader.readField(), Header.fromFields(reader), diff --git a/yarn-project/circuits.js/src/structs/side_effects.ts b/yarn-project/circuits.js/src/structs/side_effects.ts index 9e09b15255a..e91c0bb3356 100644 --- a/yarn-project/circuits.js/src/structs/side_effects.ts +++ b/yarn-project/circuits.js/src/structs/side_effects.ts @@ -190,3 +190,13 @@ export function nonEmptySideEffects(sideEffects: SideEffectType[]): SideEffectTy export function sideEffectArrayToValueArray(sideEffects: SideEffectType[]): Fr[] { return sideEffects.map(sideEffect => sideEffect.value); } + +/** + * Compare two side effects based on their counter. + * @param a - A side effect + * @param b - Another side effect + * @returns - The order of the two side effects + */ +export function sideEffectCmp(a: SideEffectType, b: SideEffectType): -1 | 0 | 1 { + return a.counter.cmp(b.counter); +} diff --git a/yarn-project/circuits.js/src/tests/factories.ts b/yarn-project/circuits.js/src/tests/factories.ts index 4a08435fb34..bf620a8c1c0 100644 --- a/yarn-project/circuits.js/src/tests/factories.ts +++ b/yarn-project/circuits.js/src/tests/factories.ts @@ -425,6 +425,8 @@ export function makePublicCircuitPublicInputs( tupleGenerator(MAX_NEW_NOTE_HASHES_PER_CALL, makeNewSideEffect, seed + 0x700), tupleGenerator(MAX_NEW_NULLIFIERS_PER_CALL, makeNewSideEffectLinkedToNoteHash, seed + 0x800), tupleGenerator(MAX_NEW_L2_TO_L1_MSGS_PER_CALL, makeL2ToL1Message, seed + 0x900), + fr(seed + 0xa00), + fr(seed + 0xa01), tupleGenerator(2, fr, seed + 0x901), fr(seed + 0x902), makeHeader(seed + 0xa00, undefined), @@ -518,7 +520,7 @@ export function makePublicCallRequest(seed = 1): PublicCallRequest { functionSelector: makeSelector(seed + 3), isStaticCall: false, isDelegateCall: false, - startSideEffectCounter: 0, + sideEffectCounter: 0, }); return new PublicCallRequest( makeAztecAddress(seed), @@ -868,6 +870,7 @@ export function makePrivateCircuitPublicInputs(seed = 0): PrivateCircuitPublicIn privateCallStackHashes: makeTuple(MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, fr, seed + 0x600), publicCallStackHashes: makeTuple(MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, fr, seed + 0x700), newL2ToL1Msgs: makeTuple(MAX_NEW_L2_TO_L1_MSGS_PER_CALL, makeL2ToL1Message, seed + 0x800), + startSideEffectCounter: fr(seed + 0x849), endSideEffectCounter: fr(seed + 0x850), encryptedLogsHash: makeTuple(NUM_FIELDS_PER_SHA256, fr, seed + 0x900), unencryptedLogsHash: makeTuple(NUM_FIELDS_PER_SHA256, fr, seed + 0xa00), diff --git a/yarn-project/end-to-end/src/e2e_dapp_subscription.test.ts b/yarn-project/end-to-end/src/e2e_dapp_subscription.test.ts index 0fb56170ce3..df9dfb64e20 100644 --- a/yarn-project/end-to-end/src/e2e_dapp_subscription.test.ts +++ b/yarn-project/end-to-end/src/e2e_dapp_subscription.test.ts @@ -142,7 +142,8 @@ describe('e2e_dapp_subscription', () => { await expectMapping( bananasPublicBalances, [aliceAddress, bobAddress, bananaFPC.address], - [PUBLICLY_MINTED_BANANAS + REFUND, 0n, FEE_AMOUNT], // alice receives a public refund (for now) + // refund is done via a transparent note for now + [PUBLICLY_MINTED_BANANAS, 0n, FEE_AMOUNT], ); await expectMapping( @@ -151,6 +152,8 @@ describe('e2e_dapp_subscription', () => { [bananaFPC.address, subscriptionContract.address, sequencerAddress], [INITIAL_GAS_BALANCE - FEE_AMOUNT, INITIAL_GAS_BALANCE, FEE_AMOUNT], ); + + // REFUND_AMOUNT is a transparent note note }); it('should allow Alice to subscribe by paying with bananas in public', async () => { @@ -181,7 +184,7 @@ describe('e2e_dapp_subscription', () => { [ // we have the refund from the previous test, // but since we paid publicly this time, the refund should have been "squashed" - PUBLICLY_MINTED_BANANAS + REFUND - FEE_AMOUNT, + PUBLICLY_MINTED_BANANAS - FEE_AMOUNT, 0n, // Bob still has no public bananas 2n * FEE_AMOUNT, // because this is the second time we've used the FPC ], diff --git a/yarn-project/end-to-end/src/e2e_fees.test.ts b/yarn-project/end-to-end/src/e2e_fees.test.ts index 5aeb83d3443..317a407178f 100644 --- a/yarn-project/end-to-end/src/e2e_fees.test.ts +++ b/yarn-project/end-to-end/src/e2e_fees.test.ts @@ -1,5 +1,6 @@ import { AztecAddress, + BatchCall, DebugLogger, ExtendedNote, Fr, @@ -8,6 +9,7 @@ import { PrivateFeePaymentMethod, PublicFeePaymentMethod, TxHash, + Wallet, computeMessageSecretHash, } from '@aztec/aztec.js'; import { ContractArtifact, decodeFunctionSignature } from '@aztec/foundation/abi'; @@ -38,7 +40,9 @@ const BRIDGED_FPC_GAS = 500n; jest.setTimeout(100_000); describe('e2e_fees', () => { + let aliceWallet: Wallet; let aliceAddress: AztecAddress; + let bobAddress: AztecAddress; let sequencerAddress: AztecAddress; let gasTokenContract: GasTokenContract; let bananaCoin: BananaCoin; @@ -66,8 +70,10 @@ describe('e2e_fees', () => { feeRecipient: accounts.at(-1)!.address, }); - aliceAddress = accounts.at(0)!.address; - sequencerAddress = accounts.at(-1)!.address; + aliceWallet = wallets[0]; + aliceAddress = accounts[0].address; + bobAddress = accounts[1].address; + sequencerAddress = accounts[2].address; gasBridgeTestHarness = await GasPortalTestingHarnessFactory.create({ pxeService: pxe, @@ -186,93 +192,245 @@ describe('e2e_fees', () => { // Can't do presently because all logs are "revertible" so we lose notes that get broadcasted during unshielding. }); - it('mint banana privately, pay privately with banana via FPC', async () => { - const PrivateMintedBananasAmount = 100n; - const AppLogicMintedBananasAmount = 1000n; - const FeeAmount = 1n; - const RefundAmount = 2n; - const MaxFee = FeeAmount + RefundAmount; - const { wallets } = e2eContext; + describe('private fees payments', () => { + let InitialAlicePrivateBananas: bigint; + let InitialAlicePublicBananas: bigint; + let InitialAliceGas: bigint; - const [initialAlicePrivateBananas, initialFPCPrivateBananas] = await bananaPrivateBalances( - aliceAddress, - bananaFPC.address, - ); - const [initialAlicePublicBananas, initialFPCPublicBananas] = await bananaPublicBalances( - aliceAddress, - bananaFPC.address, - ); - const [initialAliceGas, initialFPCGas, initialSequencerGas] = await gasBalances( - aliceAddress, - bananaFPC.address, - sequencerAddress, - ); + let InitialFPCPrivateBananas: bigint; + let InitialFPCPublicBananas: bigint; + let InitialFPCGas: bigint; - await mintPrivate(PrivateMintedBananasAmount, aliceAddress); + let InitialSequencerGas: bigint; - await expectMapping( - bananaPrivateBalances, - [aliceAddress, bananaFPC.address, sequencerAddress], - [initialAlicePrivateBananas + PrivateMintedBananasAmount, initialFPCPrivateBananas, 0n], - ); - await expectMapping( - bananaPublicBalances, - [aliceAddress, bananaFPC.address, sequencerAddress], - [initialAlicePublicBananas, initialFPCPublicBananas, 0n], - ); + let MaxFee: bigint; + let FeeAmount: bigint; + let RefundAmount: bigint; + let RefundSecret: Fr; - /** - * PRIVATE SETUP - * check authwit - * reduce alice BC.private by MaxFee - * enqueue public call to increase FPC BC.public by MaxFee - * enqueue public call for fpc.pay_fee - * - * PUBLIC SETUP - * increase FPC BC.public by MaxFee - * - * PUBLIC APP LOGIC - * increase alice BC.public by MintedBananasAmount - * increase BC total supply by MintedBananasAmount - * - * PUBLIC TEARDOWN - * call gas.pay_fee - * decrease FPC AZT by FeeAmount - * increase sequencer AZT by FeeAmount - * call banana.transfer_public - * decrease FPC BC.public by RefundAmount - * increase alice BC.public by RefundAmount - * - */ - await bananaCoin.methods - .mint_public(aliceAddress, AppLogicMintedBananasAmount) - .send({ - fee: { - maxFee: MaxFee, - paymentMethod: new PrivateFeePaymentMethod(bananaCoin.address, bananaFPC.address, wallets[0]), - }, - }) - .wait(); + beforeAll(async () => { + // fund Alice + await mintPrivate(100n, aliceAddress); + }); + + beforeEach(async () => { + FeeAmount = 1n; + RefundAmount = 2n; + MaxFee = FeeAmount + RefundAmount; + RefundSecret = Fr.random(); - await expectMapping( - bananaPrivateBalances, - [aliceAddress, bananaFPC.address, sequencerAddress], - [initialAlicePrivateBananas + PrivateMintedBananasAmount - MaxFee, initialFPCPrivateBananas, 0n], - ); - await expectMapping( - bananaPublicBalances, - [aliceAddress, bananaFPC.address, sequencerAddress], [ - initialAlicePublicBananas + AppLogicMintedBananasAmount + RefundAmount, - initialFPCPublicBananas + MaxFee - RefundAmount, - 0n, - ], - ); - await expectMapping( - gasBalances, - [aliceAddress, bananaFPC.address, sequencerAddress], - [initialAliceGas, initialFPCGas - FeeAmount, initialSequencerGas + FeeAmount], - ); + [InitialAlicePrivateBananas, InitialFPCPrivateBananas], + [InitialAlicePublicBananas, InitialFPCPublicBananas], + [InitialAliceGas, InitialFPCGas, InitialSequencerGas], + ] = await Promise.all([ + bananaPrivateBalances(aliceAddress, bananaFPC.address, sequencerAddress), + bananaPublicBalances(aliceAddress, bananaFPC.address, sequencerAddress), + gasBalances(aliceAddress, bananaFPC.address, sequencerAddress), + ]); + }); + + it('pays fees for tx that creates notes in private', async () => { + /** + * PRIVATE SETUP + * check authwit + * reduce alice BC.private by MaxFee + * enqueue public call to increase FPC BC.public by MaxFee + * enqueue public call for fpc.pay_fee_with_shielded_rebate + * + * PRIVATE APP LOGIC + * increase alice BC.private by newlyMintedBananas + * + * PUBLIC SETUP + * increase FPC BC.public by MaxFee + * + * PUBLIC APP LOGIC + * BC increase total supply + * + * PUBLIC TEARDOWN + * call gas.pay_fee + * decrease FPC AZT by FeeAmount + * increase sequencer AZT by FeeAmount + * call banana.shield + * decrease FPC BC.public by RefundAmount + * create transparent note with RefundAmount + */ + const newlyMintedBananas = 10n; + const tx = await bananaCoin.methods + .privately_mint_private_note(newlyMintedBananas) + .send({ + fee: { + maxFee: MaxFee, + paymentMethod: new PrivateFeePaymentMethod( + bananaCoin.address, + bananaFPC.address, + aliceWallet, + RefundSecret, + ), + }, + }) + .wait(); + + await expectMapping( + bananaPrivateBalances, + [aliceAddress, bananaFPC.address, sequencerAddress], + [InitialAlicePrivateBananas - MaxFee + newlyMintedBananas, InitialFPCPrivateBananas, 0n], + ); + await expectMapping( + bananaPublicBalances, + [aliceAddress, bananaFPC.address, sequencerAddress], + [InitialAlicePublicBananas, InitialFPCPublicBananas + MaxFee - RefundAmount, 0n], + ); + await expectMapping( + gasBalances, + [aliceAddress, bananaFPC.address, sequencerAddress], + [InitialAliceGas, InitialFPCGas - FeeAmount, InitialSequencerGas + FeeAmount], + ); + + await expect( + // this rejects if note can't be added + addPendingShieldNoteToPXE(0, RefundAmount, computeMessageSecretHash(RefundSecret), tx.txHash), + ).resolves.toBeUndefined(); + }); + + it('pays fees for tx that creates notes in public', async () => { + /** + * PRIVATE SETUP + * check authwit + * reduce alice BC.private by MaxFee + * enqueue public call to increase FPC BC.public by MaxFee + * enqueue public call for fpc.pay_fee_with_shielded_rebate + * + * PRIVATE APP LOGIC + * N/A + * + * PUBLIC SETUP + * increase FPC BC.public by MaxFee + * + * PUBLIC APP LOGIC + * BC decrease Alice public balance by shieldedBananas + * BC create transparent note of shieldedBananas + * + * PUBLIC TEARDOWN + * call gas.pay_fee + * decrease FPC AZT by FeeAmount + * increase sequencer AZT by FeeAmount + * call banana.shield + * decrease FPC BC.public by RefundAmount + * create transparent note with RefundAmount + */ + const shieldedBananas = 1n; + const shieldSecret = Fr.random(); + const shieldSecretHash = computeMessageSecretHash(shieldSecret); + const tx = await bananaCoin.methods + .shield(aliceAddress, shieldedBananas, shieldSecretHash, 0n) + .send({ + fee: { + maxFee: MaxFee, + paymentMethod: new PrivateFeePaymentMethod( + bananaCoin.address, + bananaFPC.address, + aliceWallet, + RefundSecret, + ), + }, + }) + .wait(); + + await expectMapping( + bananaPrivateBalances, + [aliceAddress, bananaFPC.address, sequencerAddress], + [InitialAlicePrivateBananas - MaxFee, InitialFPCPrivateBananas, 0n], + ); + await expectMapping( + bananaPublicBalances, + [aliceAddress, bananaFPC.address, sequencerAddress], + [InitialAlicePublicBananas - shieldedBananas, InitialFPCPublicBananas + MaxFee - RefundAmount, 0n], + ); + await expectMapping( + gasBalances, + [aliceAddress, bananaFPC.address, sequencerAddress], + [InitialAliceGas, InitialFPCGas - FeeAmount, InitialSequencerGas + FeeAmount], + ); + + await expect(addPendingShieldNoteToPXE(0, shieldedBananas, shieldSecretHash, tx.txHash)).resolves.toBeUndefined(); + + await expect( + addPendingShieldNoteToPXE(0, RefundAmount, computeMessageSecretHash(RefundSecret), tx.txHash), + ).resolves.toBeUndefined(); + }); + + it('pays fees for tx that creates notes in both private and public', async () => { + const privateTransfer = 1n; + const shieldedBananas = 1n; + const shieldSecret = Fr.random(); + const shieldSecretHash = computeMessageSecretHash(shieldSecret); + + /** + * PRIVATE SETUP + * check authwit + * reduce alice BC.private by MaxFee + * enqueue public call to increase FPC BC.public by MaxFee + * enqueue public call for fpc.pay_fee_with_shielded_rebate + * + * PRIVATE APP LOGIC + * reduce Alice's private balance by privateTransfer + * create note for Bob with privateTransfer amount of private BC + * + * PUBLIC SETUP + * increase FPC BC.public by MaxFee + * + * PUBLIC APP LOGIC + * BC decrease Alice public balance by shieldedBananas + * BC create transparent note of shieldedBananas + * + * PUBLIC TEARDOWN + * call gas.pay_fee + * decrease FPC AZT by FeeAmount + * increase sequencer AZT by FeeAmount + * call banana.shield + * decrease FPC BC.public by RefundAmount + * create transparent note with RefundAmount + */ + const tx = await new BatchCall(aliceWallet, [ + bananaCoin.methods.transfer(aliceAddress, bobAddress, privateTransfer, 0n).request(), + bananaCoin.methods.shield(aliceAddress, shieldedBananas, shieldSecretHash, 0n).request(), + ]) + .send({ + fee: { + maxFee: MaxFee, + paymentMethod: new PrivateFeePaymentMethod( + bananaCoin.address, + bananaFPC.address, + aliceWallet, + RefundSecret, + ), + }, + }) + .wait(); + + await expectMapping( + bananaPrivateBalances, + [aliceAddress, bobAddress, bananaFPC.address, sequencerAddress], + [InitialAlicePrivateBananas - MaxFee - privateTransfer, privateTransfer, InitialFPCPrivateBananas, 0n], + ); + await expectMapping( + bananaPublicBalances, + [aliceAddress, bananaFPC.address, sequencerAddress], + [InitialAlicePublicBananas - shieldedBananas, InitialFPCPublicBananas + MaxFee - RefundAmount, 0n], + ); + await expectMapping( + gasBalances, + [aliceAddress, bananaFPC.address, sequencerAddress], + [InitialAliceGas, InitialFPCGas - FeeAmount, InitialSequencerGas + FeeAmount], + ); + + await expect(addPendingShieldNoteToPXE(0, shieldedBananas, shieldSecretHash, tx.txHash)).resolves.toBeUndefined(); + + await expect( + addPendingShieldNoteToPXE(0, RefundAmount, computeMessageSecretHash(RefundSecret), tx.txHash), + ).resolves.toBeUndefined(); + }); }); function logFunctionSignatures(artifact: ContractArtifact, logger: DebugLogger) { diff --git a/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap b/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap index 85b0acd0aba..4f291a2d11b 100644 --- a/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap +++ b/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap @@ -38,19 +38,19 @@ PrivateKernelInnerCircuitPublicInputs { "inHash": Buffer<0x0000000000000000000000000000000000000000000000000000000000000000>, "outHash": Buffer<0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71>, "txTreeHeight": Fr<0x0000000000000000000000000000000000000000000000000000000000000001>, - "txsEffectsHash": Buffer<0x0cad04c3a06c5f97d6d094af228a4a7b761a1d38df3665978a0d762dc469c942>, + "txsEffectsHash": Buffer<0x448fc3aa205c28118e73ea04e5fd503e91a5ff0445d90e87a54c568760aa9581>, }, "globalVariables": { "blockNumber": "0x0000000000000000000000000000000000000000000000000000000000000003", "chainId": "0x0000000000000000000000000000000000000000000000000000000000007a69", "coinbase": "0x0000000000000000000000000000000000000000", "feeRecipient": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": "0x0000000000000000000000000000000000000000000000000000000065eb877a", + "timestamp": "0x0000000000000000000000000000000000000000000000000000000065f02cc4", "version": "0x0000000000000000000000000000000000000000000000000000000000000001", }, "lastArchive": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 3, - "root": Fr<0x1030919bf145ee4734f98c79b7afc25bcc6a930e1dc04c72eb5c4b9e09c35d46>, + "root": Fr<0x1d0040aabf056db63f2b7625c6eea73c582ef824344ad94d697bdfd86f3e95ff>, }, "state": StateReference { "l1ToL2MessageTree": AppendOnlyTreeSnapshot { @@ -60,11 +60,11 @@ PrivateKernelInnerCircuitPublicInputs { "partial": PartialStateReference { "noteHashTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 384, - "root": Fr<0x229639c5f9187f3c44fa0eb2e8a64646e29f1268363740671c821e919585c76b>, + "root": Fr<0x22a43bb3c4925b391c63cc66f5f10f766d5b90084a82b8efce02b1f16065169f>, }, "nullifierTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 512, - "root": Fr<0x0a17c7e333d7bdd626e86629674447bab07b373ea73dd6458318faea4c25e391>, + "root": Fr<0x056cd3cc8e081d1a451afc99affd18f8120e76cf34da1cb4c63e15062de82a2b>, }, "publicDataTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 256, @@ -352,7 +352,7 @@ PrivateKernelInnerCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x1c99b3cc8b40ecf8a0467e913a1da927dffdcb1e2e75c3b15b460248c3da9eb6>, + "value": Fr<0x013662003171c1acbc3e0133f44b70cb273e0331042d7a1f936548846cfdbfe9>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -1846,8 +1846,8 @@ PrivateKernelTailCircuitPublicInputs { "end": PrivateAccumulatedRevertibleData { "encryptedLogPreimagesLength": Fr<0x0000000000000000000000000000000000000000000000000000000000000138>, "encryptedLogsHash": [ - Fr<0x0000000000000000000000000000000061f5a418c428fb1975c2e8b76f482ebf>, - Fr<0x0000000000000000000000000000000072ccf265f6aeee4d2c8891ff291e2bd6>, + Fr<0x0000000000000000000000000000000066d06d5c85b0589e680afcb7bb5bfc94>, + Fr<0x000000000000000000000000000000008261394008a9906d449a3ded719ae66f>, ], "newL2ToL1Msgs": [ Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -1856,7 +1856,7 @@ PrivateKernelTailCircuitPublicInputs { "newNoteHashes": [ SideEffect { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000002>, - "value": Fr<0x072c4b0da6f03ff188d150944f5454ad2bdcf33165792b512c1a96fa228ef942>, + "value": Fr<0x2b79780b248bad130d40258e4578de16288ed68442c006c3ebf82009c7f7ee24>, }, SideEffect { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -2083,12 +2083,12 @@ PrivateKernelTailCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000001>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x103b591beaebdb709340d6ee8cfaf69acc0b785c8173747f2aec03be183fe86f>, + "value": Fr<0x0c5f77d84cfee8ed8b7824f61a88aaee6915599ac39bb7ae8b2f732467695e8f>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000003>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x064dd0ecbabee0ee83581becef6195951cf972f6e68023ed41c14757d55c9e7e>, + "value": Fr<0x0160b7df7e45c89c5c42287dd41a6c59cbc0c9fa5a74ad8bfa453bd3aa815c15>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -2540,7 +2540,7 @@ PrivateKernelTailCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x1ed72effef28948e615c3ddb240c1f8e05d99f72a498152689c7d7313d3d5258>, + "value": Fr<0x210f9c98fe63acc9807540d387db22bad528207c1a0e92219344f17ab73d99c1>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex index 6492d3c7b53..9bd1b79ed39 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex @@ -1 +1 @@ -16dc92860e90559980ac4a51c162c75bacd7d5c68627ca4f842aae790ad3267caf9f8c440001012ba0471a69c76696ed57b252d4dd871bb33031380b53e8053ad87bc1eb0c500e00000000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000116dc92860e90559980ac4a51c162c75bacd7d5c68627ca4f842aae790ad3267caf9f8c44000101000000000000000000000000000000000000000000000000000000000000000016dc92860e90559980ac4a51c162c75bacd7d5c68627ca4f842aae790ad3267c0000000000000000000000000000000000000000af9f8c440000000000012ba0471a69c76696ed57b252d4dd871bb33031380b53e8053ad87bc1eb0c500e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004dbb23d59a9f7374c26afbc5049b1b8b32129f11f5fc4d9daae20d7bc1a745d000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003579f468b2283611cc4d7adfbb93b8a4815d93ac0b1e1d11dace012cf73c7aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000116dc92860e90559980ac4a51c162c75bacd7d5c68627ca4f842aae790ad3267c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000056ae3b292dde3653fddebd0e2e58e45000000000000000000000000000000000818a8354b5a18267c5dd284c5a48ad900000000000000000000000000000000e3b0c44298fc1c149afbf4c8996fb9240000000000000000000000000000000027ae41e4649b934ca495991b7852b8550000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f1371c1aa479d7cd2801b0f2203b6889a051b10f7c1195df845cc1985c12039b61760928ccb58e1add32fff9de1789f9590f8525a9d3b3489da5ae198e9c3a34d1cab56c2964198a1b67616dd6bee80971cd6c16f1a0acdeabe618a92d81392aa22240ffc780baee02f15e2c96fd74a2f4ea19932966225bc9a4f8598ca6309d400000000000000000000000000000000000000000000000000000000000000022b09ad2b1765e61b2203cd359f9b833c9c611271e5c80df92c35ef522d3731e42706fc59cda1c448173c4a7739dca4fd4325c970e6f035ed9929fd84719533bb0bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +0efbcb6008dab8f3b301fc82f22a7c5016c27df3ab0a25df3c6623e7449b5f23af9f8c440001012c02b4340acbae6cc34ada6a39086e698303e22799c45f4bbfd625675484475200000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010efbcb6008dab8f3b301fc82f22a7c5016c27df3ab0a25df3c6623e7449b5f23af9f8c4400010100000000000000000000000000000000000000000000000000000000000000000efbcb6008dab8f3b301fc82f22a7c5016c27df3ab0a25df3c6623e7449b5f230000000000000000000000000000000000000000af9f8c440000000000012c02b4340acbae6cc34ada6a39086e698303e22799c45f4bbfd6256754844752000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093f1ca2d1281aec0d0af8c595a2f85b61facd1910e1099910fb627a70df704b000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003579f468b2283611cc4d7adfbb93b8a4815d93ac0b1e1d11dace012cf73c7aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010efbcb6008dab8f3b301fc82f22a7c5016c27df3ab0a25df3c6623e7449b5f23000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000f459e68d363fc2eaa172cbb2e7bf4f8000000000000000000000000000000000e833939a5902c4f57d92a07a4ed5cb6c00000000000000000000000000000000e3b0c44298fc1c149afbf4c8996fb9240000000000000000000000000000000027ae41e4649b934ca495991b7852b8550000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f1371c1aa479d7cd2801b0f2203b6889a051b10f7c1195df845cc1985c12039b62c35ce1eaf88312daa6959ec5588a211fdafc759e9e1531505e0b3c287c4899c2c7239e7540a05054483c7dba1a383f4297823d2416b73e591e0efce87f53a2201d6d9b2ba3576d7b4eba9b3ee1112dd6854924cb8c52b692d3947ad523e22c900000000000000000000000000000000000000000000000000000000000000022b09ad2b1765e61b2203cd359f9b833c9c611271e5c80df92c35ef522d3731e42706fc59cda1c448173c4a7739dca4fd4325c970e6f035ed9929fd84719533bb0bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex index 68498cfeaee..99bdf4b1bef 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex @@ -1 +1 @@ -0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be20000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c99b3cc8b40ecf8a0467e913a1da927dffdcb1e2e75c3b15b460248c3da9eb6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002de8ea3cb67cbf05163d48efb6a1768bbd1fcba5a7b360f59c6d6a69b72d7b51065f52c09cf85a10f47ee62f69fb617d521db6331931a1a49401db2b772cd6ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d3735899d9fa7162447ca631f0ba2cd500000000000000000000000000000000eb57d0965a756d78291da33072610eb200000000000000000000000000000000d3735899d9fa7162447ca631f0ba2cd500000000000000000000000000000000eb57d0965a756d78291da33072610eb200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001030919bf145ee4734f98c79b7afc25bcc6a930e1dc04c72eb5c4b9e09c35d460000000300000000000000000000000000000000000000000000000000000000000000010cad04c3a06c5f97d6d094af228a4a7b761a1d38df3665978a0d762dc469c9420000000000000000000000000000000000000000000000000000000000000000db56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d711864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f8000000030229639c5f9187f3c44fa0eb2e8a64646e29f1268363740671c821e919585c76b000001800a17c7e333d7bdd626e86629674447bab07b373ea73dd6458318faea4c25e391000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000065eb877a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000101000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f0000000029f6c6d02864676c3a735e198bdc062963b5c014299f0924fafb461717a354cd2950ce30c5f8cc743c2303ae0e2243346d9c31a2be86222c580561c4a0b85d4327c5d1425c0b6373e02e74c59332e350bab948f6042193da67960c26463215b212c4c71c3a8f8811738ddaa42174a013c6125ce135b501c0548394eaf92da4ae0906bca1000100065f52c09cf85a10f47ee62f69fb617d521db6331931a1a49401db2b772cd6ec12c4c71c3a8f8811738ddaa42174a013c6125ce135b501c0548394eaf92da4ae00000000000000000000000000000000000000000906bca1000000000003173812cb2d7243dc1f635ed13d44b8e073ca8d9471192fa4b324986ebe9595100000000000000000000000000000000000000000000000000000000000007a6a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000e3b0c44298fc1c149afbf4c8996fb9240000000000000000000000000000000027ae41e4649b934ca495991b7852b85500000000000000000000000000000000e3b0c44298fc1c149afbf4c8996fb9240000000000000000000000000000000027ae41e4649b934ca495991b7852b855000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000041030919bf145ee4734f98c79b7afc25bcc6a930e1dc04c72eb5c4b9e09c35d460000000300000000000000000000000000000000000000000000000000000000000000010cad04c3a06c5f97d6d094af228a4a7b761a1d38df3665978a0d762dc469c9420000000000000000000000000000000000000000000000000000000000000000db56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d711864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f8000000030229639c5f9187f3c44fa0eb2e8a64646e29f1268363740671c821e919585c76b000001800a17c7e333d7bdd626e86629674447bab07b373ea73dd6458318faea4c25e391000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000065eb877a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f083bb29cf968271b4ed555fc44929b491efd595175d7796a072873c1aa5407f00108ae65293fa98abe82d32e39bb59ff3c38fb56692e03364d1fb9f76e1d2f7827b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed1c4d584bdd1c82ca3fa7f288682776d2159650f421a3f0c6fc465d9013fc0ff000000000000000000000000000000000000000000000000000000000000000001e53e2a4a2ea07593ada9539cab59e6f37d7a01d7d402c51c3d2eb337a960dec0f88b6aae0852d85238cb5a6714acb2d60d0326c43879b53bd86b20d678d364d269ea59eeea8c4b06aaa8ff5f0f116fc129ec221fa0339888f69490bcecb620a06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be2000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013662003171c1acbc3e0133f44b70cb273e0331042d7a1f936548846cfdbfe9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d80043bd4c26abc3aee0645ff81f19c68ac177b2e68cbde559129602aa608ed0e8affcb4067831a65aa0f1f48d5fbdde625d587aad447e44710b58185df122c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d3735899d9fa7162447ca631f0ba2cd500000000000000000000000000000000eb57d0965a756d78291da33072610eb200000000000000000000000000000000d3735899d9fa7162447ca631f0ba2cd500000000000000000000000000000000eb57d0965a756d78291da33072610eb200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d0040aabf056db63f2b7625c6eea73c582ef824344ad94d697bdfd86f3e95ff000000030000000000000000000000000000000000000000000000000000000000000001448fc3aa205c28118e73ea04e5fd503e91a5ff0445d90e87a54c568760aa95810000000000000000000000000000000000000000000000000000000000000000db56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d711864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000003022a43bb3c4925b391c63cc66f5f10f766d5b90084a82b8efce02b1f16065169f00000180056cd3cc8e081d1a451afc99affd18f8120e76cf34da1cb4c63e15062de82a2b000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000065f02cc40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000101000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000000112c17afd56a7eeae4e7db1a1f80f761cc8ff4bacd134f9bcf4bd29e65a7ac0c1d825080abc8b0703f617e147bc6b63d48c1f88ca5f528b5c0dc5c03f748951506138d3497e86b38530a65417cca406330e53a1299181a1964e49aaf3769fda022fc511365f4dfbda41f0273f02e8512f6514a47d7478efd3558331186caf2780906bca10001000e8affcb4067831a65aa0f1f48d5fbdde625d587aad447e44710b58185df122c22fc511365f4dfbda41f0273f02e8512f6514a47d7478efd3558331186caf27800000000000000000000000000000000000000000906bca1000000000003173812cb2d7243dc1f635ed13d44b8e073ca8d9471192fa4b324986ebe9595100000000000000000000000000000000000000000000000000000000000007a6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000e3b0c44298fc1c149afbf4c8996fb9240000000000000000000000000000000027ae41e4649b934ca495991b7852b85500000000000000000000000000000000e3b0c44298fc1c149afbf4c8996fb9240000000000000000000000000000000027ae41e4649b934ca495991b7852b855000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000041d0040aabf056db63f2b7625c6eea73c582ef824344ad94d697bdfd86f3e95ff000000030000000000000000000000000000000000000000000000000000000000000001448fc3aa205c28118e73ea04e5fd503e91a5ff0445d90e87a54c568760aa95810000000000000000000000000000000000000000000000000000000000000000db56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d711864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000003022a43bb3c4925b391c63cc66f5f10f766d5b90084a82b8efce02b1f16065169f00000180056cd3cc8e081d1a451afc99affd18f8120e76cf34da1cb4c63e15062de82a2b000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000065f02cc4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f083bb29cf968271b4ed555fc44929b491efd595175d7796a072873c1aa5407f00e84255036c87b333009346ff4a97ec967270d55708d5ba7f36018156ad2809027b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed129db15b7b91efb28426920af76275d4ea7c5f0f5e45bd10ee3f1429d19062ca00000000000000000000000000000000000000000000000000000000000000001e53e2a4a2ea07593ada9539cab59e6f37d7a01d7d402c51c3d2eb337a960dec0f88b6aae0852d85238cb5a6714acb2d60d0326c43879b53bd86b20d678d364d269ea59eeea8c4b06aaa8ff5f0f116fc129ec221fa0339888f69490bcecb620a06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex index d77d42d73c7..a77c94c46f7 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex @@ -1 +1 @@ -0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be20000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000199eaffab9a7ddc1a75f8acf0681fb95d53fe00ff26430f05b0472bbf50ad53700000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ed72effef28948e615c3ddb240c1f8e05d99f72a498152689c7d7313d3d525800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000103b591beaebdb709340d6ee8cfaf69acc0b785c8173747f2aec03be183fe86f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001064dd0ecbabee0ee83581becef6195951cf972f6e68023ed41c14757d55c9e7e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061f5a418c428fb1975c2e8b76f482ebf0000000000000000000000000000000072ccf265f6aeee4d2c8891ff291e2bd6000000000000000000000000000000001c9ecec90e28d2461650418635878a5c0000000000000000000000000000000091e49f47586ecf75f2b0cbb94e897112000000000000000000000000000000000000000000000000000000000000013800000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b0000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000101000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000000200f9f6318b491e09a817e936f44ff81e6553396538244f5b61bd427d68eec401ba8742d972310ca9efeea5bb67505d7d300e0c6451232af6df21fe058c384f304a2d2e1c35566adba51be66f949ee51a2b8d9c7f6f9ec18e76fe44d087dc62d199eaffab9a7ddc1a75f8acf0681fb95d53fe00ff26430f05b0472bbf50ad5370000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ed72effef28948e615c3ddb240c1f8e05d99f72a498152689c7d7313d3d525800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000103b591beaebdb709340d6ee8cfaf69acc0b785c8173747f2aec03be183fe86f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001064dd0ecbabee0ee83581becef6195951cf972f6e68023ed41c14757d55c9e7e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be20000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000206e4cf58de70c8be35ab3db695a871016ad766c1e121fd85c0a3cd81bc3da5e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000210f9c98fe63acc9807540d387db22bad528207c1a0e92219344f17ab73d99c1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c5f77d84cfee8ed8b7824f61a88aaee6915599ac39bb7ae8b2f732467695e8f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010160b7df7e45c89c5c42287dd41a6c59cbc0c9fa5a74ad8bfa453bd3aa815c1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066d06d5c85b0589e680afcb7bb5bfc94000000000000000000000000000000008261394008a9906d449a3ded719ae66f000000000000000000000000000000001c9ecec90e28d2461650418635878a5c0000000000000000000000000000000091e49f47586ecf75f2b0cbb94e897112000000000000000000000000000000000000000000000000000000000000013800000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b0000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000101000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000002837b4155a8d56b5b38e0b83c5bc622c72b48e28eb2684698d7b737c87de58a82c15f2a55ff4b2ea949681ee65df2eaba2ee5d8ff6a109e989087e07ceaa3eef2ef907fdd7ed752d5f2ab32d01d03075695d402f9f8b1ef698260533bd534640206e4cf58de70c8be35ab3db695a871016ad766c1e121fd85c0a3cd81bc3da5e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000210f9c98fe63acc9807540d387db22bad528207c1a0e92219344f17ab73d99c1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c5f77d84cfee8ed8b7824f61a88aaee6915599ac39bb7ae8b2f732467695e8f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010160b7df7e45c89c5c42287dd41a6c59cbc0c9fa5a74ad8bfa453bd3aa815c1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/noir-protocol-circuits-types/src/type_conversion.ts b/yarn-project/noir-protocol-circuits-types/src/type_conversion.ts index fef5e799bb2..db04b103d6a 100644 --- a/yarn-project/noir-protocol-circuits-types/src/type_conversion.ts +++ b/yarn-project/noir-protocol-circuits-types/src/type_conversion.ts @@ -424,7 +424,7 @@ export function mapCallContextFromNoir(callContext: CallContextNoir): CallContex mapFunctionSelectorFromNoir(callContext.function_selector), callContext.is_delegate_call, callContext.is_static_call, - mapNumberFromNoir(callContext.start_side_effect_counter), + mapNumberFromNoir(callContext.side_effect_counter), ); } @@ -441,7 +441,7 @@ export function mapCallContextToNoir(callContext: CallContext): CallContextNoir function_selector: mapFunctionSelectorToNoir(callContext.functionSelector), is_delegate_call: callContext.isDelegateCall, is_static_call: callContext.isStaticCall, - start_side_effect_counter: mapNumberToNoir(callContext.startSideEffectCounter), + side_effect_counter: mapNumberToNoir(callContext.sideEffectCounter), }; } @@ -538,7 +538,7 @@ export function mapSideEffectLinkedToNoir( /** * Maps a noir side effect to aSideEffect. * @param sideEffect - The noir side effect. - * @returns The TS sideeffect. + * @returns The TS side effect. */ export function mapSideEffectLinkedFromNoir( sideEffectLinked: SideEffectLinkedToNoteHashNoir, @@ -690,6 +690,7 @@ export function mapPrivateCircuitPublicInputsToNoir( private_call_stack_hashes: mapTuple(privateCircuitPublicInputs.privateCallStackHashes, mapFieldToNoir), public_call_stack_hashes: mapTuple(privateCircuitPublicInputs.publicCallStackHashes, mapFieldToNoir), new_l2_to_l1_msgs: mapTuple(privateCircuitPublicInputs.newL2ToL1Msgs, mapL2ToL1MessageToNoir), + start_side_effect_counter: mapFieldToNoir(privateCircuitPublicInputs.startSideEffectCounter), end_side_effect_counter: mapFieldToNoir(privateCircuitPublicInputs.endSideEffectCounter), encrypted_logs_hash: mapTuple(privateCircuitPublicInputs.encryptedLogsHash, mapFieldToNoir), unencrypted_logs_hash: mapTuple(privateCircuitPublicInputs.unencryptedLogsHash, mapFieldToNoir), @@ -1521,6 +1522,8 @@ export function mapPublicCircuitPublicInputsToNoir( new_note_hashes: mapTuple(publicInputs.newNoteHashes, mapSideEffectToNoir), new_nullifiers: mapTuple(publicInputs.newNullifiers, mapSideEffectLinkedToNoir), new_l2_to_l1_msgs: mapTuple(publicInputs.newL2ToL1Msgs, mapL2ToL1MessageToNoir), + start_side_effect_counter: mapFieldToNoir(publicInputs.startSideEffectCounter), + end_side_effect_counter: mapFieldToNoir(publicInputs.endSideEffectCounter), unencrypted_logs_hash: mapTuple(publicInputs.unencryptedLogsHash, mapFieldToNoir), unencrypted_log_preimages_length: mapFieldToNoir(publicInputs.unencryptedLogPreimagesLength), historical_header: mapHeaderToNoir(publicInputs.historicalHeader), diff --git a/yarn-project/protocol-contracts/src/gas-token/__snapshots__/index.test.ts.snap b/yarn-project/protocol-contracts/src/gas-token/__snapshots__/index.test.ts.snap index 41071066dc1..de75383807b 100644 --- a/yarn-project/protocol-contracts/src/gas-token/__snapshots__/index.test.ts.snap +++ b/yarn-project/protocol-contracts/src/gas-token/__snapshots__/index.test.ts.snap @@ -2,10 +2,10 @@ exports[`GasToken returns canonical protocol contract 1`] = ` { - "address": AztecAddress<0x2b3035985f1a4ed792a70cde88b7fee0f90f361b9e7f5842343fe67530906597>, + "address": AztecAddress<0x3031fab05a85bdca590affa67854fd9fe2fd2f87118bc25f664e2fb0443a8ed8>, "instance": { - "address": AztecAddress<0x2b3035985f1a4ed792a70cde88b7fee0f90f361b9e7f5842343fe67530906597>, - "contractClassId": Fr<0x065cf6dd52fb349293d583cfc8ac8f4553770e7aa48ed37a5adf679fdbee7be4>, + "address": AztecAddress<0x3031fab05a85bdca590affa67854fd9fe2fd2f87118bc25f664e2fb0443a8ed8>, + "contractClassId": Fr<0x2126f223ecb60919e889e0192822d017db6fa0e46791f5b5cda3757701fecfc5>, "initializationHash": Fr<0x0bf6e812f14bb029f7cb9c8da8367dd97c068e788d4f21007fd97014eba8cf9f>, "portalContractAddress": EthAddress<0x0000000000000000000000000000000000000000>, "publicKeysHash": Fr<0x27b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed>, @@ -18,7 +18,7 @@ exports[`GasToken returns canonical protocol contract 1`] = ` exports[`GasToken returns canonical protocol contract 2`] = ` { "artifactHash": Fr<0x076fb6d7493b075a880eeed90fec7c4c01e0a24d442522449e4d56c26357205f>, - "id": Fr<0x065cf6dd52fb349293d583cfc8ac8f4553770e7aa48ed37a5adf679fdbee7be4>, + "id": Fr<0x2126f223ecb60919e889e0192822d017db6fa0e46791f5b5cda3757701fecfc5>, "privateFunctions": [ { "isInternal": false, @@ -27,7 +27,7 @@ exports[`GasToken returns canonical protocol contract 2`] = ` }, ], "privateFunctionsRoot": Fr<0x13b29c3f4a96eb14d5d3539a6308ff9736ad5d67e3f61ffbb7da908e14980828>, - "publicBytecodeCommitment": Fr<0x18485f6c7fc11c817ccb544ba30e0c4f9c83742b3d6318d68037290e4e8c1c51>, + "publicBytecodeCommitment": Fr<0x1c220315e672398f017b49ceb31dcfe39aafe9965998ee57f5f58ccc0cd04623>, "version": 1, } `; diff --git a/yarn-project/sequencer-client/src/block_builder/solo_block_builder.test.ts b/yarn-project/sequencer-client/src/block_builder/solo_block_builder.test.ts index 21b73c3f3b7..4cd73e2fa69 100644 --- a/yarn-project/sequencer-client/src/block_builder/solo_block_builder.test.ts +++ b/yarn-project/sequencer-client/src/block_builder/solo_block_builder.test.ts @@ -8,6 +8,7 @@ import { GlobalVariables, Header, MAX_NEW_L2_TO_L1_MSGS_PER_TX, + MAX_NEW_NOTE_HASHES_PER_TX, MAX_NEW_NULLIFIERS_PER_TX, MAX_NON_REVERTIBLE_NOTE_HASHES_PER_TX, MAX_NON_REVERTIBLE_NULLIFIERS_PER_TX, @@ -25,8 +26,10 @@ import { PublicDataUpdateRequest, PublicKernelCircuitPublicInputs, RootRollupPublicInputs, + SideEffect, SideEffectLinkedToNoteHash, StateReference, + sideEffectCmp, } from '@aztec/circuits.js'; import { fr, @@ -128,13 +131,25 @@ describe('sequencer/solo_block_builder', () => { await expectsDb.appendLeaves( MerkleTreeId.NOTE_HASH_TREE, txs.flatMap(tx => - [...tx.data.endNonRevertibleData.newNoteHashes, ...tx.data.end.newNoteHashes].map(l => l.value.toBuffer()), + padArrayEnd( + [...tx.data.endNonRevertibleData.newNoteHashes, ...tx.data.end.newNoteHashes] + .filter(x => !x.isEmpty()) + .sort(sideEffectCmp), + SideEffect.empty(), + MAX_NEW_NOTE_HASHES_PER_TX, + ).map(l => l.value.toBuffer()), ), ); await expectsDb.batchInsert( MerkleTreeId.NULLIFIER_TREE, txs.flatMap(tx => - [...tx.data.endNonRevertibleData.newNullifiers, ...tx.data.end.newNullifiers].map(x => x.value.toBuffer()), + padArrayEnd( + [...tx.data.endNonRevertibleData.newNullifiers, ...tx.data.end.newNullifiers] + .filter(x => !x.isEmpty()) + .sort(sideEffectCmp), + SideEffectLinkedToNoteHash.empty(), + MAX_NEW_NULLIFIERS_PER_TX, + ).map(x => x.value.toBuffer()), ), NULLIFIER_SUBTREE_HEIGHT, ); diff --git a/yarn-project/sequencer-client/src/sequencer/abstract_phase_manager.ts b/yarn-project/sequencer-client/src/sequencer/abstract_phase_manager.ts index 86f39110bcc..029afb64c7a 100644 --- a/yarn-project/sequencer-client/src/sequencer/abstract_phase_manager.ts +++ b/yarn-project/sequencer-client/src/sequencer/abstract_phase_manager.ts @@ -60,6 +60,7 @@ import { PublicProver } from '../prover/index.js'; import { PublicKernelCircuitSimulator } from '../simulator/index.js'; import { HintsBuilder } from './hints_builder.js'; import { FailedTx } from './processed_tx.js'; +import { lastSideEffectCounter } from './utils.js'; export enum PublicKernelPhase { SETUP = 'setup', @@ -202,11 +203,12 @@ export abstract class AbstractPhaseManager { const current = executionStack.pop()!; const isExecutionRequest = !isPublicExecutionResult(current); + const sideEffectCounter = lastSideEffectCounter(tx) + 1; // NOTE: temporary glue to incorporate avm execution calls const simulator = (execution: PublicExecution, globalVariables: GlobalVariables) => env.AVM_ENABLED - ? this.publicExecutor.simulateAvm(execution, globalVariables) - : this.publicExecutor.simulate(execution, globalVariables); + ? this.publicExecutor.simulateAvm(execution, globalVariables, sideEffectCounter) + : this.publicExecutor.simulate(execution, globalVariables, sideEffectCounter); const result = isExecutionRequest ? await simulator(current, this.globalVariables) : current; @@ -333,6 +335,8 @@ export abstract class AbstractPhaseManager { newNoteHashes: padArrayEnd(result.newNoteHashes, SideEffect.empty(), MAX_NEW_NOTE_HASHES_PER_CALL), newNullifiers: padArrayEnd(result.newNullifiers, SideEffectLinkedToNoteHash.empty(), MAX_NEW_NULLIFIERS_PER_CALL), newL2ToL1Msgs: padArrayEnd(result.newL2ToL1Messages, L2ToL1Message.empty(), MAX_NEW_L2_TO_L1_MSGS_PER_CALL), + startSideEffectCounter: result.startSideEffectCounter, + endSideEffectCounter: result.endSideEffectCounter, returnValues: padArrayEnd(result.returnValues, Fr.ZERO, RETURN_VALUES_LENGTH), nullifierReadRequests: padArrayEnd( result.nullifierReadRequests, diff --git a/yarn-project/sequencer-client/src/sequencer/public_processor.test.ts b/yarn-project/sequencer-client/src/sequencer/public_processor.test.ts index 1e98b368f0e..338b91e515e 100644 --- a/yarn-project/sequencer-client/src/sequencer/public_processor.test.ts +++ b/yarn-project/sequencer-client/src/sequencer/public_processor.test.ts @@ -289,9 +289,9 @@ describe('public_processor', () => { baseContractAddressSeed, baseContractAddressSeed, ].map(makePublicCallRequest); - callRequests[0].callContext.startSideEffectCounter = 2; - callRequests[1].callContext.startSideEffectCounter = 3; - callRequests[2].callContext.startSideEffectCounter = 4; + callRequests[0].callContext.sideEffectCounter = 2; + callRequests[1].callContext.sideEffectCounter = 3; + callRequests[2].callContext.sideEffectCounter = 4; const kernelOutput = makePrivateKernelTailCircuitPublicInputs(0x10); kernelOutput.end.unencryptedLogsHash = [Fr.ZERO, Fr.ZERO]; @@ -403,9 +403,9 @@ describe('public_processor', () => { baseContractAddressSeed, baseContractAddressSeed, ].map(makePublicCallRequest); - callRequests[0].callContext.startSideEffectCounter = 2; - callRequests[1].callContext.startSideEffectCounter = 3; - callRequests[2].callContext.startSideEffectCounter = 4; + callRequests[0].callContext.sideEffectCounter = 2; + callRequests[1].callContext.sideEffectCounter = 3; + callRequests[2].callContext.sideEffectCounter = 4; const kernelOutput = makePrivateKernelTailCircuitPublicInputs(0x10); @@ -605,6 +605,8 @@ class PublicExecutionResultBuilder { newL2ToL1Messages: [], contractStorageReads: [], unencryptedLogs: new FunctionL2Logs([]), + startSideEffectCounter: Fr.ZERO, + endSideEffectCounter: Fr.ZERO, reverted: this._reverted, revertReason: this._revertReason, }; diff --git a/yarn-project/sequencer-client/src/sequencer/utils.test.ts b/yarn-project/sequencer-client/src/sequencer/utils.test.ts new file mode 100644 index 00000000000..d080b920600 --- /dev/null +++ b/yarn-project/sequencer-client/src/sequencer/utils.test.ts @@ -0,0 +1,26 @@ +import { mockTx } from '@aztec/circuit-types'; +import { Fr } from '@aztec/circuits.js'; + +import { lastSideEffectCounter } from './utils.js'; + +describe('sequencer utils', () => { + describe('lastSideEffectCounter', () => { + it('correctly identifies the highest side effect counter in a transaction', () => { + const tx = mockTx(); + // mockTx creates a Tx with side effect counts of all 0 + expect(lastSideEffectCounter(tx)).toBe(0); + + tx.data.endNonRevertibleData.newNoteHashes.at(-1)!.counter = new Fr(8); + expect(lastSideEffectCounter(tx)).toBe(8); + + tx.data.endNonRevertibleData.publicCallStack.at(-1)!.startSideEffectCounter = new Fr(9); + expect(lastSideEffectCounter(tx)).toBe(9); + + tx.data.end.newNoteHashes.at(-1)!.counter = new Fr(10); + expect(lastSideEffectCounter(tx)).toBe(10); + + tx.data.end.newNullifiers.at(-1)!.counter = new Fr(11); + expect(lastSideEffectCounter(tx)).toBe(11); + }); + }); +}); diff --git a/yarn-project/sequencer-client/src/sequencer/utils.ts b/yarn-project/sequencer-client/src/sequencer/utils.ts new file mode 100644 index 00000000000..0780dd2d05f --- /dev/null +++ b/yarn-project/sequencer-client/src/sequencer/utils.ts @@ -0,0 +1,30 @@ +import { Tx } from '@aztec/circuit-types'; +import { CallRequest } from '@aztec/circuits.js'; + +/** + * Looks at the side effects of a transaction and returns the highest counter + * @param tx - A transaction + * @returns The highest side effect counter in the transaction so far + */ +export function lastSideEffectCounter(tx: Tx): number { + const sideEffectCounters = [ + ...tx.data.endNonRevertibleData.newNoteHashes, + ...tx.data.endNonRevertibleData.newNullifiers, + ...tx.data.endNonRevertibleData.publicCallStack, + ...tx.data.end.newNoteHashes, + ...tx.data.end.newNullifiers, + ...tx.data.end.publicCallStack, + ]; + + let max = 0; + for (const sideEffect of sideEffectCounters) { + if (sideEffect instanceof CallRequest) { + // look at both start and end counters because for enqueued public calls start > 0 while end === 0 + max = Math.max(max, sideEffect.startSideEffectCounter.toNumber(), sideEffect.endSideEffectCounter.toNumber()); + } else { + max = Math.max(max, sideEffect.counter.toNumber()); + } + } + + return max; +} diff --git a/yarn-project/simulator/src/acvm/oracle/oracle.ts b/yarn-project/simulator/src/acvm/oracle/oracle.ts index 48824adcae4..f35b3fe1ec1 100644 --- a/yarn-project/simulator/src/acvm/oracle/oracle.ts +++ b/yarn-project/simulator/src/acvm/oracle/oracle.ts @@ -303,7 +303,7 @@ export class Oracle { [contractAddress]: ACVMField[], [functionSelector]: ACVMField[], [argsHash]: ACVMField[], - [sideffectCounter]: ACVMField[], + [sideEffectCounter]: ACVMField[], [isStaticCall]: ACVMField[], [isDelegateCall]: ACVMField[], ): Promise { @@ -311,7 +311,7 @@ export class Oracle { AztecAddress.fromField(fromACVMField(contractAddress)), FunctionSelector.fromField(fromACVMField(functionSelector)), fromACVMField(argsHash), - frToNumber(fromACVMField(sideffectCounter)), + frToNumber(fromACVMField(sideEffectCounter)), frToBoolean(fromACVMField(isStaticCall)), frToBoolean(fromACVMField(isDelegateCall)), ); @@ -322,6 +322,7 @@ export class Oracle { [contractAddress]: ACVMField[], [functionSelector]: ACVMField[], [argsHash]: ACVMField[], + [sideEffectCounter]: ACVMField[], [isStaticCall]: ACVMField[], [isDelegateCall]: ACVMField[], ): Promise { @@ -329,6 +330,7 @@ export class Oracle { AztecAddress.fromField(fromACVMField(contractAddress)), FunctionSelector.fromField(fromACVMField(functionSelector)), fromACVMField(argsHash), + frToNumber(fromACVMField(sideEffectCounter)), frToBoolean(fromACVMField(isStaticCall)), frToBoolean(fromACVMField(isDelegateCall)), ); @@ -339,7 +341,7 @@ export class Oracle { [contractAddress]: ACVMField[], [functionSelector]: ACVMField[], [argsHash]: ACVMField[], - [sideffectCounter]: ACVMField[], + [sideEffectCounter]: ACVMField[], [isStaticCall]: ACVMField[], [isDelegateCall]: ACVMField[], ) { @@ -347,7 +349,7 @@ export class Oracle { AztecAddress.fromString(contractAddress), FunctionSelector.fromField(fromACVMField(functionSelector)), fromACVMField(argsHash), - frToNumber(fromACVMField(sideffectCounter)), + frToNumber(fromACVMField(sideEffectCounter)), frToBoolean(fromACVMField(isStaticCall)), frToBoolean(fromACVMField(isDelegateCall)), ); diff --git a/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts b/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts index 0a6d350d386..a9f86711391 100644 --- a/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts +++ b/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts @@ -201,7 +201,7 @@ export abstract class TypedOracle { _targetContractAddress: AztecAddress, _functionSelector: FunctionSelector, _argsHash: Fr, - _sideffectCounter: number, + _sideEffectCounter: number, _isStaticCall: boolean, _isDelegateCall: boolean, ): Promise { @@ -212,6 +212,7 @@ export abstract class TypedOracle { _targetContractAddress: AztecAddress, _functionSelector: FunctionSelector, _argsHash: Fr, + _sideEffectCounter: number, _isStaticCall: boolean, _isDelegateCall: boolean, ): Promise { @@ -222,7 +223,7 @@ export abstract class TypedOracle { _targetContractAddress: AztecAddress, _functionSelector: FunctionSelector, _argsHash: Fr, - _sideffectCounter: number, + _sideEffectCounter: number, _isStaticCall: boolean, _isDelegateCall: boolean, ): Promise { diff --git a/yarn-project/simulator/src/avm/temporary_executor_migration.ts b/yarn-project/simulator/src/avm/temporary_executor_migration.ts index f33205ae850..6591fe21653 100644 --- a/yarn-project/simulator/src/avm/temporary_executor_migration.ts +++ b/yarn-project/simulator/src/avm/temporary_executor_migration.ts @@ -98,6 +98,9 @@ export function temporaryConvertAvmResults( const newNullifiers: SideEffectLinkedToNoteHash[] = []; const unencryptedLogs = FunctionL2Logs.empty(); const newL2ToL1Messages = newWorldState.newL1Messages.map(() => L2ToL1Message.empty()); + // TODO keep track of side effect counters + const startSideEffectCounter = Fr.ZERO; + const endSideEffectCounter = Fr.ZERO; return { execution, @@ -105,6 +108,8 @@ export function temporaryConvertAvmResults( nullifierNonExistentReadRequests, newNoteHashes, newL2ToL1Messages, + startSideEffectCounter, + endSideEffectCounter, newNullifiers, contractStorageReads, contractStorageUpdateRequests, diff --git a/yarn-project/simulator/src/client/client_execution_context.ts b/yarn-project/simulator/src/client/client_execution_context.ts index c0f90ab2758..cfb3db3139d 100644 --- a/yarn-project/simulator/src/client/client_execution_context.ts +++ b/yarn-project/simulator/src/client/client_execution_context.ts @@ -75,6 +75,7 @@ export class ClientExecutionContext extends ViewDataOracle { protected readonly db: DBOracle, private readonly curve: Grumpkin, private node: AztecNode, + protected sideEffectCounter: number = 0, protected log = createDebugLogger('aztec:simulator:client_execution_context'), ) { super(contractAddress, authWitnesses, db, node, log); @@ -103,6 +104,8 @@ export class ClientExecutionContext extends ViewDataOracle { this.txContext.chainId, this.txContext.version, + new Fr(this.sideEffectCounter), + ...args, ]; @@ -366,6 +369,7 @@ export class ClientExecutionContext extends ViewDataOracle { this.db, this.curve, this.node, + sideEffectCounter, ); const childExecutionResult = await executePrivateFunction( diff --git a/yarn-project/simulator/src/client/execution_result.ts b/yarn-project/simulator/src/client/execution_result.ts index 6b2fd1052e1..355f4d8abbe 100644 --- a/yarn-project/simulator/src/client/execution_result.ts +++ b/yarn-project/simulator/src/client/execution_result.ts @@ -85,5 +85,5 @@ export function collectEnqueuedPublicFunctionCalls(execResult: ExecutionResult): return [ ...execResult.enqueuedPublicFunctionCalls, ...[...execResult.nestedExecutions].flatMap(collectEnqueuedPublicFunctionCalls), - ].sort((a, b) => b.callContext.startSideEffectCounter - a.callContext.startSideEffectCounter); + ].sort((a, b) => b.callContext.sideEffectCounter - a.callContext.sideEffectCounter); } diff --git a/yarn-project/simulator/src/client/private_execution.test.ts b/yarn-project/simulator/src/client/private_execution.test.ts index 56921a18124..3e26e492f2b 100644 --- a/yarn-project/simulator/src/client/private_execution.test.ts +++ b/yarn-project/simulator/src/client/private_execution.test.ts @@ -822,7 +822,7 @@ describe('Private Execution test suite', () => { functionSelector: childSelector, isDelegateCall: false, isStaticCall: false, - startSideEffectCounter: 1, + sideEffectCounter: 1, }), parentCallContext: CallContext.from({ msgSender: parentAddress, @@ -831,7 +831,7 @@ describe('Private Execution test suite', () => { functionSelector: FunctionSelector.fromNameAndParameters(parentArtifact.name, parentArtifact.parameters), isDelegateCall: false, isStaticCall: false, - startSideEffectCounter: 1, + sideEffectCounter: 1, }), }); diff --git a/yarn-project/simulator/src/client/simulator.ts b/yarn-project/simulator/src/client/simulator.ts index c98a4a6cf5c..4c1e829c8e6 100644 --- a/yarn-project/simulator/src/client/simulator.ts +++ b/yarn-project/simulator/src/client/simulator.ts @@ -85,6 +85,10 @@ export class AcirSimulator { const curve = new Grumpkin(); const header = await this.db.getHeader(); + + // reserve the first side effect for the tx hash (inserted by the private kernel) + const startSideEffectCounter = 1; + const callContext = new CallContext( msgSender, contractAddress, @@ -92,9 +96,7 @@ export class AcirSimulator { FunctionSelector.fromNameAndParameters(entryPointArtifact.name, entryPointArtifact.parameters), false, false, - // TODO: when contract deployment is done in-app, we should only reserve one counter for the tx hash - // 2 counters are reserved for tx hash and contract deployment nullifier - 1, + startSideEffectCounter, ); const context = new ClientExecutionContext( contractAddress, @@ -108,6 +110,7 @@ export class AcirSimulator { this.db, curve, this.node, + startSideEffectCounter, ); try { diff --git a/yarn-project/simulator/src/common/side_effect_counter.ts b/yarn-project/simulator/src/common/side_effect_counter.ts index 0a3eeac5f8e..afa49fee00f 100644 --- a/yarn-project/simulator/src/common/side_effect_counter.ts +++ b/yarn-project/simulator/src/common/side_effect_counter.ts @@ -4,6 +4,11 @@ export class SideEffectCounter { constructor(private value = 0) {} + // TODO(alexg) remove this once public side effect counters is fully accounted for on Noir side + current() { + return this.value; + } + count() { const value = this.value; this.value++; diff --git a/yarn-project/simulator/src/public/avm_executor.test.ts b/yarn-project/simulator/src/public/avm_executor.test.ts index 9ddac70ee47..a0dfd742513 100644 --- a/yarn-project/simulator/src/public/avm_executor.test.ts +++ b/yarn-project/simulator/src/public/avm_executor.test.ts @@ -23,7 +23,7 @@ describe('AVM WitGen and Proof Generation', () => { functionSelector: FunctionSelector.empty(), isDelegateCall: false, isStaticCall: false, - startSideEffectCounter: 0, + sideEffectCounter: 0, }); const contractAddress = AztecAddress.random(); diff --git a/yarn-project/simulator/src/public/execution.ts b/yarn-project/simulator/src/public/execution.ts index 31d306f3952..e66a313bbe1 100644 --- a/yarn-project/simulator/src/public/execution.ts +++ b/yarn-project/simulator/src/public/execution.ts @@ -26,6 +26,10 @@ export interface PublicExecutionResult { newNoteHashes: SideEffect[]; /** The new l2 to l1 messages generated in this call. */ newL2ToL1Messages: L2ToL1Message[]; + /** The side effect counter at the start of the function call. */ + startSideEffectCounter: Fr; + /** The side effect counter after executing this function call */ + endSideEffectCounter: Fr; /** The new nullifiers to be inserted into the nullifier tree. */ newNullifiers: SideEffectLinkedToNoteHash[]; /** The nullifier read requests emitted in this call. */ diff --git a/yarn-project/simulator/src/public/executor.ts b/yarn-project/simulator/src/public/executor.ts index a513baf77e9..2c0db41627f 100644 --- a/yarn-project/simulator/src/public/executor.ts +++ b/yarn-project/simulator/src/public/executor.ts @@ -1,5 +1,5 @@ import { FunctionL2Logs } from '@aztec/circuit-types'; -import { GlobalVariables, Header, PublicCircuitPublicInputs } from '@aztec/circuits.js'; +import { Fr, GlobalVariables, Header, PublicCircuitPublicInputs } from '@aztec/circuits.js'; import { createDebugLogger } from '@aztec/foundation/log'; import { spawn } from 'child_process'; @@ -83,6 +83,9 @@ export async function executePublicFunction( returnValues: [], newNoteHashes: [], newL2ToL1Messages: [], + // TODO (side effects) get these values in the revert case from the vm + startSideEffectCounter: Fr.ZERO, + endSideEffectCounter: Fr.ZERO, newNullifiers: [], nullifierReadRequests: [], nullifierNonExistentReadRequests: [], @@ -107,6 +110,8 @@ export async function executePublicFunction( newL2ToL1Msgs, newNoteHashes: newNoteHashesPadded, newNullifiers: newNullifiersPadded, + startSideEffectCounter, + endSideEffectCounter, } = PublicCircuitPublicInputs.fromFields(returnWitness); const nullifierReadRequests = nullifierReadRequestsPadded.filter(v => !v.isEmpty()); @@ -136,6 +141,8 @@ export async function executePublicFunction( newNoteHashes, newL2ToL1Messages, newNullifiers, + startSideEffectCounter, + endSideEffectCounter, nullifierReadRequests, nullifierNonExistentReadRequests, contractStorageReads, @@ -165,7 +172,11 @@ export class PublicExecutor { * @param globalVariables - The global variables to use. * @returns The result of the run plus all nested runs. */ - public async simulate(execution: PublicExecution, globalVariables: GlobalVariables): Promise { + public async simulate( + execution: PublicExecution, + globalVariables: GlobalVariables, + sideEffectCounter: number = 0, + ): Promise { const selector = execution.functionData.selector; const acir = await this.contractsDb.getBytecode(execution.contractAddress, selector); if (!acir) { @@ -176,14 +187,12 @@ export class PublicExecutor { // We use this cache to hold the packed arguments. const packedArgs = PackedArgsCache.create([]); - const sideEffectCounter = new SideEffectCounter(); - const context = new PublicExecutionContext( execution, this.header, globalVariables, packedArgs, - sideEffectCounter, + new SideEffectCounter(sideEffectCounter), this.stateDb, this.contractsDb, this.commitmentsDb, @@ -213,9 +222,10 @@ export class PublicExecutor { public async simulateAvm( execution: PublicExecution, globalVariables: GlobalVariables, + _sideEffectCounter = 0, ): Promise { // Temporary code to construct the AVM context - // These data structures will permiate across the simulator when the public executor is phased out + // These data structures will permeate across the simulator when the public executor is phased out const hostStorage = new HostStorage(this.stateDb, this.contractsDb, this.commitmentsDb); const worldStateJournal = new AvmPersistableStateManager(hostStorage); const executionEnv = temporaryCreateAvmExecutionEnvironment(execution, globalVariables); diff --git a/yarn-project/simulator/src/public/index.test.ts b/yarn-project/simulator/src/public/index.test.ts index 29576204abd..b5e6a372706 100644 --- a/yarn-project/simulator/src/public/index.test.ts +++ b/yarn-project/simulator/src/public/index.test.ts @@ -109,7 +109,7 @@ describe('ACIR public execution simulator', () => { functionSelector: FunctionSelector.empty(), isDelegateCall: false, isStaticCall: false, - startSideEffectCounter: 0, + sideEffectCounter: 0, }); publicContracts.getBytecode.mockResolvedValue(Buffer.from(mintArtifact.bytecode, 'base64')); @@ -182,7 +182,7 @@ describe('ACIR public execution simulator', () => { functionSelector: FunctionSelector.empty(), isDelegateCall: false, isStaticCall: false, - startSideEffectCounter: 0, + sideEffectCounter: 0, }); recipientStorageSlot = computeSlotForMapping(new Fr(6n), recipient); @@ -271,7 +271,7 @@ describe('ACIR public execution simulator', () => { functionSelector: FunctionSelector.empty(), isDelegateCall: false, isStaticCall: false, - startSideEffectCounter: 0, + sideEffectCounter: 0, }); // eslint-disable-next-line require-await @@ -350,7 +350,7 @@ describe('ACIR public execution simulator', () => { functionSelector: FunctionSelector.empty(), isDelegateCall: false, isStaticCall: false, - startSideEffectCounter: 0, + sideEffectCounter: 0, }); publicContracts.getBytecode.mockResolvedValue(Buffer.from(shieldArtifact.bytecode, 'base64')); @@ -384,7 +384,7 @@ describe('ACIR public execution simulator', () => { functionSelector: FunctionSelector.empty(), isDelegateCall: false, isStaticCall: false, - startSideEffectCounter: 0, + sideEffectCounter: 0, }); publicContracts.getBytecode.mockResolvedValue(Buffer.from(createL2ToL1MessagePublicArtifact.bytecode, 'base64')); @@ -414,7 +414,7 @@ describe('ACIR public execution simulator', () => { functionSelector: FunctionSelector.empty(), isDelegateCall: false, isStaticCall: false, - startSideEffectCounter: 0, + sideEffectCounter: 0, }); publicContracts.getBytecode.mockResolvedValue(Buffer.from(createNullifierPublicArtifact.bytecode, 'base64')); @@ -472,7 +472,7 @@ describe('ACIR public execution simulator', () => { functionSelector: FunctionSelector.empty(), isDelegateCall: false, isStaticCall: false, - startSideEffectCounter: 0, + sideEffectCounter: 0, }); const computeGlobalVariables = () => @@ -671,7 +671,7 @@ describe('ACIR public execution simulator', () => { functionSelector: FunctionSelector.empty(), isDelegateCall: false, isStaticCall: false, - startSideEffectCounter: 0, + sideEffectCounter: 0, }); assertGlobalVarsArtifact = TestContractArtifact.functions.find(f => f.name === 'assert_public_global_vars')!; functionData = FunctionData.fromAbi(assertGlobalVarsArtifact); @@ -754,7 +754,7 @@ describe('ACIR public execution simulator', () => { functionSelector: FunctionSelector.empty(), isDelegateCall: false, isStaticCall: false, - startSideEffectCounter: 0, + sideEffectCounter: 0, }); assertHeaderPublicArtifact = TestContractArtifact.functions.find(f => f.name === 'assert_header_public')!; functionData = FunctionData.fromAbi(assertHeaderPublicArtifact); diff --git a/yarn-project/simulator/src/public/public_execution_context.ts b/yarn-project/simulator/src/public/public_execution_context.ts index d86e20e78c9..8666ed48e70 100644 --- a/yarn-project/simulator/src/public/public_execution_context.ts +++ b/yarn-project/simulator/src/public/public_execution_context.ts @@ -50,7 +50,13 @@ export class PublicExecutionContext extends TypedOracle { */ public getInitialWitness(witnessStartIndex = 0) { const { callContext, args } = this.execution; - const fields = [...callContext.toFields(), ...this.header.toFields(), ...this.globalVariables.toFields(), ...args]; + const fields = [ + ...callContext.toFields(), + ...this.header.toFields(), + ...this.globalVariables.toFields(), + new Fr(this.sideEffectCounter.current()), + ...args, + ]; return toACVMWitness(witnessStartIndex, fields); } @@ -161,6 +167,7 @@ export class PublicExecutionContext extends TypedOracle { targetContractAddress: AztecAddress, functionSelector: FunctionSelector, argsHash: Fr, + sideEffectCounter: number, isStaticCall: boolean, isDelegateCall: boolean, ) { @@ -189,7 +196,7 @@ export class PublicExecutionContext extends TypedOracle { functionSelector, isDelegateCall, isStaticCall, - startSideEffectCounter: 0, // TODO use counters in public execution + sideEffectCounter, }); const nestedExecution: PublicExecution = {