diff --git a/docs/docs/developers/debugging/sandbox-errors.md b/docs/docs/developers/debugging/sandbox-errors.md index b6a4f1cef7d..0dfb7675713 100644 --- a/docs/docs/developers/debugging/sandbox-errors.md +++ b/docs/docs/developers/debugging/sandbox-errors.md @@ -185,9 +185,9 @@ Users may create a proof against a historical state in Aztec. The rollup circuit ## Sequencer Errors -- "Calldata hash mismatch" - the sequencer assembles a block and sends it to the rollup circuits for proof generation. Along with the proof, the circuits return the hash of the calldata that must be sent to the Rollup contract on L1. Before doing so, the sequencer sanity checks that this hash is equivalent to the calldata hash of the block that it submitted. This could be a bug in our code e.g. if we are ordering things differently in circuits and in our transaction/block (e.g. incorrect ordering of encrypted logs or queued public calls). Easiest way to debug this is by printing the calldata of the block both on the TS (in l2Block.getCalldataHash()) and C++ side (in the base rollup) +- "Txs effects hash mismatch" - the sequencer assembles a block and sends it to the rollup circuits for proof generation. Along with the proof, the circuits return the hash of the transaction effects that must be sent to the Rollup contract on L1. Before doing so, the sequencer sanity checks that this hash is equivalent to the transaction effects hash of the block that it submitted. This could be a bug in our code e.g. if we are ordering things differently in circuits and in our transaction/block (e.g. incorrect ordering of encrypted logs or queued public calls). Easiest way to debug this is by printing the txs effects hash of the block both on the TS (in l2Block.getTxsEffectsHash()) and noir side (in the base rollup) -- "${treeName} tree root mismatch" - like with calldata mismatch, it validates that the root of the tree matches the output of the circuit simulation. The tree name could be Public data tree, Note Hash Tree, Contract tree, Nullifier tree or the L1ToL2Message tree, +- "${treeName} tree root mismatch" - like with txs effects hash mismatch, it validates that the root of the tree matches the output of the circuit simulation. The tree name could be Public data tree, Note Hash Tree, Contract tree, Nullifier tree or the L1ToL2Message tree, - "${treeName} tree next available leaf index mismatch" - validating a tree's root is not enough. It also checks that the `next_available_leaf_index` is as expected. This is the next index we can insert new values into. Note that for the public data tree, this test is skipped since as it is a sparse tree unlike the others. diff --git a/docs/docs/developers/privacy/main.md b/docs/docs/developers/privacy/main.md index 066aeb570f9..c8b67ec18d2 100644 --- a/docs/docs/developers/privacy/main.md +++ b/docs/docs/developers/privacy/main.md @@ -87,7 +87,7 @@ A 'Function Fingerprint' is any data which is exposed by a function to the outsi > Note: many of these were mentioned in the ["Crossing the private -> public boundary"](#crossing-the-private---public-boundary) section. -> Note: the calldata submitted to L1 is [encoded](https://github.com/AztecProtocol/aztec-packages/blob/master/l1-contracts/src/core/libraries/Decoder.sol) in such a way that all categories of data are packed together, when submitted. E.g. all commitments from all txs in a block are arranged as contiguous bytes of calldata. But that _doesn't_ mean the data from a particular tx is garbled in with all other txs' calldata: the distinct Tx Fingerprint of each tx can is publicly visible when a tx is submitted to the L2 tx pool. +> Note: the transaction effects submitted to L1 is [encoded](https://github.com/AztecProtocol/aztec-packages/blob/master/l1-contracts/src/core/libraries/Decoder.sol) but not garbled with other transaction: the distinct Tx Fingerprint of each tx can is publicly visible when a tx is submitted to the L2 tx pool. #### Standardizing Fingerprints diff --git a/docs/docs/developers/tutorials/token_portal/withdrawing_to_l1.md b/docs/docs/developers/tutorials/token_portal/withdrawing_to_l1.md index 1af146666ce..4e2246e20fb 100644 --- a/docs/docs/developers/tutorials/token_portal/withdrawing_to_l1.md +++ b/docs/docs/developers/tutorials/token_portal/withdrawing_to_l1.md @@ -17,7 +17,7 @@ For this to work we import the `get_withdraw_content_hash` helper function from The `exit_to_l1_public` function enables anyone to withdraw their L2 tokens back to L1 publicly. This is done by burning tokens on L2 and then creating an L2->L1 message. 1. Like with our deposit function, we need to create the L2 to L1 message. The content is the _amount_ to burn, the recipient address, and who can execute the withdraw on the L1 portal on behalf of the user. It can be `0x0` for anyone, or a specified address. -2. `context.message_portal()` passes this content to the [kernel circuit](../../../learn/concepts/circuits/kernels/public_kernel.md) which creates the proof for the transaction. The kernel circuit then adds the sender (the L2 address of the bridge + version of aztec) and the recipient (the portal to the L2 address + the chain ID of L1) under the hood, to create the message which gets added as rollup calldata by the sequencer and is stored in the outbox for consumption. +2. `context.message_portal()` passes this content to the [kernel circuit](../../../learn/concepts/circuits/kernels/public_kernel.md) which creates the proof for the transaction. The kernel circuit then adds the sender (the L2 address of the bridge + version of aztec) and the recipient (the portal to the L2 address + the chain ID of L1) under the hood, to create the message which gets added as part of the transaction data published by the sequencer and is stored in the outbox for consumption. 3. Finally, you also burn the tokens on L2! Note that it burning is done at the end to follow the check effects interaction pattern. Note that the caller has to first approve the bridge contract to burn tokens on its behalf. Refer to [burn_public function on the token contract](../writing_token_contract.md#burn_public). The nonce parameter refers to the approval message that the user creates - also refer to [authorizing token spends here](../writing_token_contract.md#authorizing-token-spends). - We burn the tokens from the `msg_sender()`. Otherwise, a malicious user could burn someone else’s tokens and mint tokens on L1 to themselves. One could add another approval flow on the bridge but that might make it complex for other applications to call the bridge. diff --git a/l1-contracts/slither_output.md b/l1-contracts/slither_output.md index dff0feae6a1..3c8fcd33236 100644 --- a/l1-contracts/slither_output.md +++ b/l1-contracts/slither_output.md @@ -94,11 +94,18 @@ src/core/libraries/decoders/MessagesDecoder.sol#L168-L170 - [ ] ID-10 +Dubious typecast in [Inbox.batchConsume(bytes32[],address)](src/core/messagebridge/Inbox.sol#L122-L143): + uint256 => uint32 casting occurs in [expectedVersion = uint32(REGISTRY.getVersionFor(msg.sender))](src/core/messagebridge/Inbox.sol#L128) + +src/core/messagebridge/Inbox.sol#L122-L143 + + + - [ ] ID-11 Dubious typecast in [HeaderLib.decode(bytes)](src/core/libraries/HeaderLib.sol#L145-L189): bytes => bytes32 casting occurs in [header.lastArchive = AppendOnlyTreeSnapshot(bytes32(_header),uint32(bytes4(_header)))](src/core/libraries/HeaderLib.sol#L153-L155) bytes => bytes4 casting occurs in [header.lastArchive = AppendOnlyTreeSnapshot(bytes32(_header),uint32(bytes4(_header)))](src/core/libraries/HeaderLib.sol#L153-L155) bytes => bytes32 casting occurs in [header.contentCommitment.txTreeHeight = uint256(bytes32(_header))](src/core/libraries/HeaderLib.sol#L158) - bytes => bytes32 casting occurs in [header.contentCommitment.txsHash = bytes32(_header)](src/core/libraries/HeaderLib.sol#L159) + bytes => bytes32 casting occurs in [header.contentCommitment.txsEffectsHash = bytes32(_header)](src/core/libraries/HeaderLib.sol#L159) bytes => bytes32 casting occurs in [header.contentCommitment.inHash = bytes32(_header)](src/core/libraries/HeaderLib.sol#L160) bytes => bytes32 casting occurs in [header.contentCommitment.outHash = bytes32(_header)](src/core/libraries/HeaderLib.sol#L161) bytes => bytes32 casting occurs in [header.stateReference.l1ToL2MessageTree = AppendOnlyTreeSnapshot(bytes32(_header),uint32(bytes4(_header)))](src/core/libraries/HeaderLib.sol#L164-L166) @@ -121,13 +128,6 @@ Dubious typecast in [HeaderLib.decode(bytes)](src/core/libraries/HeaderLib.sol#L src/core/libraries/HeaderLib.sol#L145-L189 - - [ ] ID-11 -Dubious typecast in [Inbox.batchConsume(bytes32[],address)](src/core/messagebridge/Inbox.sol#L122-L143): - uint256 => uint32 casting occurs in [expectedVersion = uint32(REGISTRY.getVersionFor(msg.sender))](src/core/messagebridge/Inbox.sol#L128) - -src/core/messagebridge/Inbox.sol#L122-L143 - - ## missing-zero-check Impact: Low Confidence: Medium diff --git a/l1-contracts/src/core/Rollup.sol b/l1-contracts/src/core/Rollup.sol index 68aa3833958..f9e22bfa801 100644 --- a/l1-contracts/src/core/Rollup.sol +++ b/l1-contracts/src/core/Rollup.sol @@ -61,8 +61,8 @@ contract Rollup is IRollup { HeaderLib.validate(header, VERSION, lastBlockTs, archive); // Check if the data is available using availability oracle (change availability oracle if you want a different DA layer) - if (!AVAILABILITY_ORACLE.isAvailable(header.contentCommitment.txsHash)) { - revert Errors.Rollup__UnavailableTxs(header.contentCommitment.txsHash); + if (!AVAILABILITY_ORACLE.isAvailable(header.contentCommitment.txsEffectsHash)) { + revert Errors.Rollup__UnavailableTxs(header.contentCommitment.txsEffectsHash); } // Decode the cross-chain messages (Will be removed as part of message model change) diff --git a/l1-contracts/src/core/availability_oracle/AvailabilityOracle.sol b/l1-contracts/src/core/availability_oracle/AvailabilityOracle.sol index 7695e508807..c7c76ba176b 100644 --- a/l1-contracts/src/core/availability_oracle/AvailabilityOracle.sol +++ b/l1-contracts/src/core/availability_oracle/AvailabilityOracle.sol @@ -19,14 +19,14 @@ contract AvailabilityOracle is IAvailabilityOracle { /** * @notice Publishes transactions and marks its commitment, the TxsHash, as available * @param _body - The block body - * @return txsHash - The TxsHash + * @return txsEffectsHash - The TxsHash */ function publish(bytes calldata _body) external override(IAvailabilityOracle) returns (bytes32) { - bytes32 _txsHash = TxsDecoder.decode(_body); - isAvailable[_txsHash] = true; + bytes32 txsEffectsHash = TxsDecoder.decode(_body); + isAvailable[txsEffectsHash] = true; - emit TxsPublished(_txsHash); + emit TxsPublished(txsEffectsHash); - return _txsHash; + return txsEffectsHash; } } diff --git a/l1-contracts/src/core/interfaces/IAvailabilityOracle.sol b/l1-contracts/src/core/interfaces/IAvailabilityOracle.sol index 38f5176596c..9c5f23ab093 100644 --- a/l1-contracts/src/core/interfaces/IAvailabilityOracle.sol +++ b/l1-contracts/src/core/interfaces/IAvailabilityOracle.sol @@ -3,9 +3,9 @@ pragma solidity >=0.8.18; interface IAvailabilityOracle { - event TxsPublished(bytes32 txsHash); + event TxsPublished(bytes32 txsEffectsHash); function publish(bytes calldata _body) external returns (bytes32); - function isAvailable(bytes32 _txsHash) external view returns (bool); + function isAvailable(bytes32 _txsEffectsHash) external view returns (bool); } diff --git a/l1-contracts/src/core/libraries/HeaderLib.sol b/l1-contracts/src/core/libraries/HeaderLib.sol index c4187943651..8da581904fd 100644 --- a/l1-contracts/src/core/libraries/HeaderLib.sol +++ b/l1-contracts/src/core/libraries/HeaderLib.sol @@ -26,7 +26,7 @@ import {Hash} from "./Hash.sol"; * | 0x0020 | 0x04 | lastArchive.nextAvailableLeafIndex * | | | ContentCommitment { * | 0x0024 | 0x20 | txTreeHeight - * | 0x0044 | 0x20 | txsHash + * | 0x0044 | 0x20 | txsEffectsHash * | 0x0064 | 0x20 | inHash * | 0x0084 | 0x20 | outHash * | | | StateReference { @@ -84,7 +84,7 @@ library HeaderLib { struct ContentCommitment { uint256 txTreeHeight; - bytes32 txsHash; + bytes32 txsEffectsHash; bytes32 inHash; bytes32 outHash; } @@ -156,7 +156,7 @@ library HeaderLib { // Reading ContentCommitment header.contentCommitment.txTreeHeight = uint256(bytes32(_header[0x0024:0x0044])); - header.contentCommitment.txsHash = bytes32(_header[0x0044:0x0064]); + header.contentCommitment.txsEffectsHash = bytes32(_header[0x0044:0x0064]); header.contentCommitment.inHash = bytes32(_header[0x0064:0x0084]); header.contentCommitment.outHash = bytes32(_header[0x0084:0x00a4]); diff --git a/l1-contracts/test/decoders/Base.sol b/l1-contracts/test/decoders/Base.sol index 67d8dc005a8..e74a5e20693 100644 --- a/l1-contracts/test/decoders/Base.sol +++ b/l1-contracts/test/decoders/Base.sol @@ -36,11 +36,11 @@ contract DecoderBase is Test { struct Data { bytes32 archive; bytes body; - bytes32 calldataHash; DecodedHeader decodedHeader; bytes header; bytes32 l1ToL2MessagesHash; bytes32 publicInputsHash; + bytes32 txsEffectsHash; } struct DecodedHeader { @@ -68,7 +68,7 @@ contract DecoderBase is Test { bytes32 inHash; bytes32 outHash; uint256 txTreeHeight; - bytes32 txsHash; + bytes32 txsEffectsHash; } struct PartialStateReference { diff --git a/l1-contracts/test/decoders/Decoders.t.sol b/l1-contracts/test/decoders/Decoders.t.sol index 700cb0fbd0f..9c53d7499ab 100644 --- a/l1-contracts/test/decoders/Decoders.t.sol +++ b/l1-contracts/test/decoders/Decoders.t.sol @@ -74,7 +74,11 @@ contract DecodersTest is DecoderBase { contentCommitment.txTreeHeight, "Invalid txTreeSize" ); - assertEq(header.contentCommitment.txsHash, contentCommitment.txsHash, "Invalid txsHash"); + assertEq( + header.contentCommitment.txsEffectsHash, + contentCommitment.txsEffectsHash, + "Invalid txsEffectsHash" + ); assertEq(header.contentCommitment.inHash, contentCommitment.inHash, "Invalid inHash"); assertEq(header.contentCommitment.outHash, contentCommitment.outHash, "Invalid outHash"); } @@ -192,8 +196,13 @@ contract DecodersTest is DecoderBase { // Txs { - bytes32 txsHash = txsHelper.decode(data.block.body); - assertEq(txsHash, data.block.calldataHash, "Invalid txs hash"); + bytes32 txsEffectsHash = txsHelper.decode(data.block.body); + assertEq(txsEffectsHash, data.block.txsEffectsHash, "Invalid txs effects hash"); + assertEq( + txsEffectsHash, + data.block.decodedHeader.contentCommitment.txsEffectsHash, + "Invalid txs effects hash" + ); } // The public inputs are computed based of these values, but not directly part of the decoding per say. diff --git a/l1-contracts/test/fixtures/empty_block_0.json b/l1-contracts/test/fixtures/empty_block_0.json index 0fed3f3384d..ed0b3f5bdd6 100644 --- a/l1-contracts/test/fixtures/empty_block_0.json +++ b/l1-contracts/test/fixtures/empty_block_0.json @@ -35,23 +35,23 @@ ] }, "block": { - "archive": "0x17dd18fadaaca367dbe7f1e3f82d1ca7173eb7fbf3d417371010d6ee2b78d6d2", + "archive": "0x1bb1134e3fda61b56e838d68034e7c1e3a8da99d2321533b579eb1ae7588cd51", "body": "0x0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "calldataHash": "0xdeb8be229731acd5c13f8dbdbfc60fdc8f7865f480d77f84c763d625aefbd6b1", + "txsEffectsHash": "0xdeb8be229731acd5c13f8dbdbfc60fdc8f7865f480d77f84c763d625aefbd6b1", "decodedHeader": { "contentCommitment": { "inHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "outHash": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", "txTreeHeight": 2, - "txsHash": "0xdeb8be229731acd5c13f8dbdbfc60fdc8f7865f480d77f84c763d625aefbd6b1" + "txsEffectsHash": "0xdeb8be229731acd5c13f8dbdbfc60fdc8f7865f480d77f84c763d625aefbd6b1" }, "globalVariables": { "blockNumber": 1, "chainId": 31337, "timestamp": 0, "version": 1, - "coinbase": "0xf016058fa5c84a01a8e42abcbb7decabd09e8f4e", - "feeRecipient": "0x0e0b51d2fc596c37eb6ef04325c69533627bd7bfbe8caa99eea9d66aed66b85f" + "coinbase": "0x56a54c9ad4f77919e45f9b9a18cf55468a60ebe5", + "feeRecipient": "0x02db69f955a50583c56b7405d887a720030cefc20293682c3eba3574e4c77846" }, "lastArchive": { "nextAvailableLeafIndex": 1, @@ -82,8 +82,8 @@ } } }, - "header": "0x0f045bd8180c4de901e18a10e9393ae42d9ef7928fe6b68568cb48b91d1355a7000000010000000000000000000000000000000000000000000000000000000000000002deb8be229731acd5c13f8dbdbfc60fdc8f7865f480d77f84c763d625aefbd6b10000000000000000000000000000000000000000000000000000000000000000c78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c1864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000001000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000001801864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000040572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000c00000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000f016058fa5c84a01a8e42abcbb7decabd09e8f4e0e0b51d2fc596c37eb6ef04325c69533627bd7bfbe8caa99eea9d66aed66b85f", + "header": "0x0f045bd8180c4de901e18a10e9393ae42d9ef7928fe6b68568cb48b91d1355a7000000010000000000000000000000000000000000000000000000000000000000000002deb8be229731acd5c13f8dbdbfc60fdc8f7865f480d77f84c763d625aefbd6b10000000000000000000000000000000000000000000000000000000000000000c78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c1864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000001000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000001801864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000040572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000c00000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000056a54c9ad4f77919e45f9b9a18cf55468a60ebe502db69f955a50583c56b7405d887a720030cefc20293682c3eba3574e4c77846", "l1ToL2MessagesHash": "0x076a27c79e5ace2a3d47f9dd2e83e4ff6ea8872b3c2218f66c92b89b55f36560", - "publicInputsHash": "0x0f85e8c25f4736024ecf839615a742aa013dc0af1179bac8176ee26b3e1471c9" + "publicInputsHash": "0x0115bc353d66365ef2b850d1f9487476c969eda2b6bbeff9e747ab58189010c6" } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/empty_block_1.json b/l1-contracts/test/fixtures/empty_block_1.json index 266ce6e71c5..ffd4c00e0ee 100644 --- a/l1-contracts/test/fixtures/empty_block_1.json +++ b/l1-contracts/test/fixtures/empty_block_1.json @@ -35,27 +35,27 @@ ] }, "block": { - "archive": "0x0d974796af9f3eea278a1baf94c4bfb881b4499c5b515c595fa63a67271b3d6f", + "archive": "0x16c6e97221a803dec7490cf710172aab5438818de67450a58d111d9f0184a48e", "body": "0x0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "calldataHash": "0xdeb8be229731acd5c13f8dbdbfc60fdc8f7865f480d77f84c763d625aefbd6b1", + "txsEffectsHash": "0xdeb8be229731acd5c13f8dbdbfc60fdc8f7865f480d77f84c763d625aefbd6b1", "decodedHeader": { "contentCommitment": { "inHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "outHash": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", "txTreeHeight": 2, - "txsHash": "0xdeb8be229731acd5c13f8dbdbfc60fdc8f7865f480d77f84c763d625aefbd6b1" + "txsEffectsHash": "0xdeb8be229731acd5c13f8dbdbfc60fdc8f7865f480d77f84c763d625aefbd6b1" }, "globalVariables": { "blockNumber": 2, "chainId": 31337, - "timestamp": 1709295794, + "timestamp": 1709734014, "version": 1, - "coinbase": "0xf016058fa5c84a01a8e42abcbb7decabd09e8f4e", - "feeRecipient": "0x0e0b51d2fc596c37eb6ef04325c69533627bd7bfbe8caa99eea9d66aed66b85f" + "coinbase": "0x56a54c9ad4f77919e45f9b9a18cf55468a60ebe5", + "feeRecipient": "0x02db69f955a50583c56b7405d887a720030cefc20293682c3eba3574e4c77846" }, "lastArchive": { "nextAvailableLeafIndex": 2, - "root": "0x17dd18fadaaca367dbe7f1e3f82d1ca7173eb7fbf3d417371010d6ee2b78d6d2" + "root": "0x1bb1134e3fda61b56e838d68034e7c1e3a8da99d2321533b579eb1ae7588cd51" }, "stateReference": { "l1ToL2MessageTree": { @@ -82,8 +82,8 @@ } } }, - "header": "0x17dd18fadaaca367dbe7f1e3f82d1ca7173eb7fbf3d417371010d6ee2b78d6d2000000020000000000000000000000000000000000000000000000000000000000000002deb8be229731acd5c13f8dbdbfc60fdc8f7865f480d77f84c763d625aefbd6b10000000000000000000000000000000000000000000000000000000000000000c78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c1864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000002016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000002000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000002801864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000080572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001400000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000065e1c8b2f016058fa5c84a01a8e42abcbb7decabd09e8f4e0e0b51d2fc596c37eb6ef04325c69533627bd7bfbe8caa99eea9d66aed66b85f", + "header": "0x1bb1134e3fda61b56e838d68034e7c1e3a8da99d2321533b579eb1ae7588cd51000000020000000000000000000000000000000000000000000000000000000000000002deb8be229731acd5c13f8dbdbfc60fdc8f7865f480d77f84c763d625aefbd6b10000000000000000000000000000000000000000000000000000000000000000c78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c1864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000002016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000002000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000002801864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000080572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001400000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000065e8787e56a54c9ad4f77919e45f9b9a18cf55468a60ebe502db69f955a50583c56b7405d887a720030cefc20293682c3eba3574e4c77846", "l1ToL2MessagesHash": "0x076a27c79e5ace2a3d47f9dd2e83e4ff6ea8872b3c2218f66c92b89b55f36560", - "publicInputsHash": "0x1bfacc5b5b2453f9f411edd53e51a2a5d44b682816bc6e7bb4da3f9f7fd3558f" + "publicInputsHash": "0x13156a7477a2a9495da438dcf5f43c02f171111e62a94bd1e88a3c46f2895cc4" } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/mixed_block_0.json b/l1-contracts/test/fixtures/mixed_block_0.json index 8128f1e3362..47bab763463 100644 --- a/l1-contracts/test/fixtures/mixed_block_0.json +++ b/l1-contracts/test/fixtures/mixed_block_0.json @@ -52,23 +52,23 @@ ] }, "block": { - "archive": "0x0939715232c1b90e6498e4155e8475e666f57b5fb068f51060c97f5224e4e0cd", - "body": "0x00000010151de48ca3efbae39f180fe00b8f472ec9f25be10b4f283a87c6d7839353703914c2ea9dedf77698d4afe23bc663263eed0bf9aa3a8b17d9b74812f185610f9e1570cc6641699e3ae87fa258d80a6d853f7b8ccb211dc244d017e2ca6530f8a12806c860af67e9cd50000378411b8c4c4db172ceb2daa862b259b689ccbdc1e005f140c7c95624c8006774279a01ec1ea88617999e4fe6997b6576c4e1c7395a22048b96b586596bd740d0402e15f5577f7ceb5496b65aafc6d89d7c3b34924b0c3f2d50d16279970d682cada30bfa6b29bc0bac0ee2389f6a0444853eccaa932b2a60561da46a58569d71044a84c639e7f88429826e5622581536eb906d9cdd25a2c0a76f7da6924e10751c755227d2535f4ad258b984e78f9f452a853c52300e212d8e2069e4254d81af07744bcbb81121a38f0e2dbed69a523d3fbf85b75c287ca6f33aadbac2e4f058e05924c140d7895a6ed167caf804b710d2ae3ba62b1b51297b3ea37637af6bd56cf33425d95cc5c96e9c2ee3077322fbec86a0c7f32c15d2a888c6cc122e99478c92470a1311635142d82ad7ae67410beeef4ae31f0902ba2fb964922a4610bb18901f7b923885c1d034da5769a48203ae6f0206a92855e2c01ddb3d6553386b5580d681b8230fa4062948668f834f23e0636eaff70aaa64519aafdf4b040bd2f9836e76b9dc13cfec8065dcdf2834d786e06260d100000004380000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014100000000000000000000000000000000000000000000000000000000000001420000000000000000000000000000000000000000000000000000000000000143000000000000000000000000000000000000000000000000000000000000014400000000000000000000000000000000000000000000000000000000000001450000000000000000000000000000000000000000000000000000000000000146000000000000000000000000000000000000000000000000000000000000014700000000000000000000000000000000000000000000000000000000000001480000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000014a000000000000000000000000000000000000000000000000000000000000014b000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000014d000000000000000000000000000000000000000000000000000000000000014e000000000000000000000000000000000000000000000000000000000000014f0000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000015100000000000000000000000000000000000000000000000000000000000001520000000000000000000000000000000000000000000000000000000000000153000000000000000000000000000000000000000000000000000000000000015400000000000000000000000000000000000000000000000000000000000001550000000000000000000000000000000000000000000000000000000000000156000000000000000000000000000000000000000000000000000000000000015700000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000159000000000000000000000000000000000000000000000000000000000000015a000000000000000000000000000000000000000000000000000000000000015b000000000000000000000000000000000000000000000000000000000000015c000000000000000000000000000000000000000000000000000000000000015d000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000015f0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016100000000000000000000000000000000000000000000000000000000000001620000000000000000000000000000000000000000000000000000000000000163000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000001650000000000000000000000000000000000000000000000000000000000000166000000000000000000000000000000000000000000000000000000000000016700000000000000000000000000000000000000000000000000000000000001680000000000000000000000000000000000000000000000000000000000000169000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000016b000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000016d000000000000000000000000000000000000000000000000000000000000016e000000000000000000000000000000000000000000000000000000000000016f00000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000171000000000000000000000000000000000000000000000000000000000000017200000000000000000000000000000000000000000000000000000000000001730000000000000000000000000000000000000000000000000000000000000174000000000000000000000000000000000000000000000000000000000000017500000000000000000000000000000000000000000000000000000000000001760000000000000000000000000000000000000000000000000000000000000177370000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760200000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000341100000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000541000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000542000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000544000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000545000000000000000000000000000000000000000000000000000000000000054f00000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000054700000000000000000000000000000000000000000000000000000000000005510000000000000000000000000000000000000000000000000000000000000548000000000000000000000000000000000000000000000000000000000000055200000000000000000000000000000000000000000000000000000000000005490000000000000000000000000000000000000000000000000000000000000553000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000554000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000555000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000556000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000557000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000558000000000000000000000000000000000000000000000000000000000000054f0000000000000000000000000000000000000000000000000000000000000559011dedfc544c4f1e5f047e5ac2e76a30e407c87cb473bac191649e7f8e1576396200000000000000000000000000000000000000000000000000000000000010400000000000000000000000000000000000001041000011000000021c000000b019701b21f190cef37e019c641e067d16ac864413f63f6507a8adc5e97145f4598e49d5504285d4a4f31f65887b8685bf619174a720d4548aadce303b84c555a6ef1c29570f8c257170905c5a754cf9188c00cd31c144b7944e61af8c30c9a9743b88652cf404d93ba52f540d5a5f84ea08f4df50841d1e5ec920280f9b497985e18686efbe379b525ff75e433aa2e823282f97d44cba232bc9e640ffa7760faeab4fd4f231007bfed2b082e546ced54e000000b0112737a63cc7e3a99746396305b817548fe8607aa51911d4920b6d2e27a82302f0654c355157b4d30a418b1ad02e47f4f81c20dcf6beb2092818e471d4bc53f3dfeab0f4924a1902a76be418d2e904ada0d2b894e321f8276daf732edf2b1d53d769851ba301e233a8056dadff03eb442ed879472b2bff8f2aae032b4f378482ba015ea6d0c980d295f08f21a0045279258d4e650df7d77a8e0ef9eeccc12e9952c0bb17ae165faaeb923729e520082e000000b022f936ef56788247ae719803981efe73a65a88637f923b695a82a2c43ebdfddc1f6711402c8fdfd5769a8f102f11b4e81fbf1c1764d8485eeaae2b64e6e518f97494ffab27aba44b62de7d2366f3de8d67ec160f89028b859cbb011e092e7710e6a1b013fe8703e7f23f989c111e642a06d022e0d3952884600551eac09f7b1f12a9155e3479b52432a40a1d531f84b124a6812caaccd8a423d3ec21edbe6fd51e6400991639f645b6239873d23474bd0000021c000000b02da8a81da24ab63e68361841a16179091245b85465748b3d8b8c70562d4e1ce9de68cb223e56651f0a1a600a52abd3f075c9f3f0d376f1865df27a8925cb082625dec8b5d17fa49401cde5344f5074980f24dfe9b4bd0886c273973a8ec768b13c35a354b5a9bd0a09e19d3d8bb629560feb14c1da443876d3f379eddc930e4af4b3144e68b41e0aaf9f23fac17aebb52496292503db9462480aaa5eb9cedfdbad815ddb2a653ac827ad49461969b961000000b015e4eb10d6de551162a36e18c25df8e65d7e759e17e2afa7fc0ed1a7e6ca100cb52151fe498093ac797f90353bd4337e2681ecbdc352340d3553c6a1afb999bff72b06576cb122b49c44d84ec91b30b344932d43edefd12a9022bc71172c06d5d7a5c4bb4682b6f601c9ce558ab3a2aa0e2a1e9b614e503a00179ee3d677b379810414719a596bce433566075d1e3cdd0e3c3593f90cb2bc3f8366b5c2e2f2087e5a81807b8436e9ec7700dd820455ae000000b01f1efb8ecb30551c56d363efcb46ed4984732668394d85d8aa881b3dee2afc7f3ca473a3559e768d1de3b1a75b72a75f4ac5bbe5f415b5daa89fd7f97c8e4db2b71196687c474ecc3f295c6d973a3a2bbe803d95cb4ee9fad5393e7d76b8512a8f3c42a266b7fc82790b88c885913acb1fa6eb211800fc768298e582f9782aaaeff4996ce3467948041b574fa42cad7c07c940acc1dcbabbc885ce0bec21857abf1e2ae9c01676ac5d1839efa253fbf40000021c000000b002d77cc7d3b77d89bcd43941995fb9336ea13fd6f3728b7cb8ed4005908a7df6cf4acbd3b7d4d327ff69360a6c7581f9f1e89622c5d61b4e248555c65b3d01c4cf2d052a48f0d8a3e90bb8d4f789d6c8dd3d6b4e9ded5e1b1700e04228cb41606691a25d6dfcc1782d6dfb449ac82da605bc2550d8fbff53dc69bb555efcbd082afdeac78a657bc4ffcd5bd62ba6e85711162d199277f49ae5000527e42839a714c9efd79c63b2f0722924524e18240a000000b0142ee2236506447995c6c2bef83fca8a7cf921d2967366f36738b2fc46dc302e8d777df2df2b646c538af17b5aba698bc9500aa2ccdee91bc09a048432c0e507b66361c37e4e514282d033b76ddca2ede02f90922a82a78512fa018b907cad436cdf6b9e5ad0441739847b02a2f207bf151be1f9e6dec3ad7bcddf80de2b298529351708baaba340b2e6a2b25d9b7e7308ff6d76e8fdc38ca0753ff4599c53ea56a77fd90d3cad700d7c8aa8365edf04000000b00712f83679ec0c6c7aa5436d9a1d14614035bd2b35d5b952ef9cdbbae08b428df0940af24ea2e53db9179a4712b0f0f7b31bd48982b6ac8ac01a67f6984b2f2b5c4941b63609b796413ab4b9191de16b8aae6a422fff80eaa9be8712f447cbe34eb92616639b2df7f834e05c6802d2981f2dbc7f0265d7aeb208397a0e83eb3f72a435ccb2e963ab0554982873295943172899dc5ad96932d0313a26261a936deb1625ee14fa0e7306c2ee817dc688ca0000021c000000b00f314ada005f114e8c3a14d7b34c64443c74dbd8acf44683873580029ea05d9d001bb8b9ce81f0f8d6e01aeb575f77c143d77b28e42586488ac44484af8ee15c0c9d3eaacea1f5a36a2dc48549a8be9e8c2718754d708740247b56dc61402decda3f75e2d068db276082784379b643731a781422bbcf2d4d60aaac89e5c35792f608e3f69fe7539bc68836f59a67a1421e9497211f35137bcd3a0fc6fd496c9ec9173e2ab31682f37acd9480cf6c299e000000b0230d63b62b7fae0e6710dc9dad4170213fb4659b916ed28747458e748759d542085bf8d6567b4482c7ab2662a8b1890b399c9000eedbf31bc05a41065ae095c6fe20cd722d6d4e996f4f8be60a572e18df71ac83cc601f46ea73f96364a30f1a897a9695e03ccd5377fdb3b039806c0803858f94873af77b0c317cc2e764ab5eece1ca0fec3dc123f9ab25947df3bbb204677e42ee02606e97c9d0792d06ed4624d4269566897da8bc5456e7104b1d93000000b0282c9d85ad58ca350745efd58dc4831a634c318ca796de7403c4aa374367bda632c8f817808e4ae1e584f3255b00d395186d4cc5b860b17a78d5e97badc27e803735b091c257692c43f3cc9081f345e1d2fae2eaffd035ac6a9caeb7ea162ae4d36d4ad13022db594e6cadeadb11bb692cc1893ff59adc7429a7844734368dd8fcd805046c978c48c0641e3b4282fbef2995867411941ac9b23ff287a0471812d5d45b63774c0adc8c6cd23eafaddca60000021c000000b006998a395a886a5c4df3c0bc405f723c1ef19d6aeb9e3f726db3eb234a1d790ccd5abbef6149d633c306d90c8b03f7a25c656b9e6aa23dbcbcbe31ad2475bf2e6db55079884db8960c12f359b81817779dcce230fa92b2abbd39083e89036439136347c8251769694bfc4f76b36d48b611d174cd5c45be69fbce4068ba094bcf1bd9dab5f98cf27daef645c6b0b2be88256d3e461ce5a5336c992449f12236c9c523191af8b832afec7aaa0130f515b9000000b00a61b2ba6103bcc811a80d07b2abd7fcc7ead0baa646ab3e7f41024fd1b0b35d3fc2a29facd84d76e941de3efde10907237faf19bf205855f75b30ca62fa2550ce128ef0b22d29116ca3d70207eb5b6b141c3815efe5f07628b1844acb5b882ecccc422405386c6429022b76aed67bf10ef982c084a313b485652aa50143c2f25d5fd8836f37ce40820cf97fee279eac02d6fe9f06b3a39a4d8ea77c038870e694d76576fcb3b4b8f9037d9b18767138000000b00c61129d6f3cd10f0741aee6dbf5123227c463ca5c8e4d3e01b781967f84313dec45854c6f06454154cbed237b38aea14f05bbcc2f24b1233c428c27ca94efb0eed273303d0539e31f35b5da32984a80f8707a68a716348cc4522df550c05b971c23f3854c75494babf3d66907c07052103f51bf85ba265bb746e1e68d987d2dc158e894b960f98fd7d485a3f111da230af84d234b270697c9155a5332008fe677c3c622df17d6214bdcb884f56ec2fc0000021c000000b02705880cb66b94540f5ba341fdc8b2130ea5f68d312d552dedfdd21732a8fa14527ed785d22b2491581f01882268c1f5c16b9d8cfada405ae6611b3d22614dabd62de15789eb1fef2be11f48a1155b6eb405e874dcec924f017465526754c463c266b6d5019f8379ec952d683719c93e10287a502c8d41ec3ec2f59f998be1ae14fc2b6187c3272a4130d71fb050254e0c875c0f900efdac9b0f748fe96fa2c85c50169b240ad3a47c88f609818c77a1000000b00e65ff18596fedfd4e3601cfa20b5c9b7ced74fe34dea5540ef4c3749d0dbec8f79cd161afb8e6e4f7c79f6f104f7bf64ab1c96b140799c6fd45240e7cf7523fb632472c8f63d1aaef72969f6a3f5389bd6f43454572a5966931cd95bed44baff6d37d2f17933fef176466ca14054e4c29e0b5252534433facc8266094b7b9367c272d272cc15cda09d76f36802959482d0baa2e0740ee79f664b94965dc287583f17a34b6e3fdcf27887dc1492a517c000000b0095f2c27272788049e9cae681e1f91d06cc549307ee695bfd43dfff1a9f4dd4a43d202630475832cd9fd13b397b6fe4322d9793b2e0d120dd7f923ea4335a291990e44897845076489cb003c108d73e552be7ee2cff3fa8dea2af932dfcbd140a3fbbc0e7039894c07aafb95694032721958e07cc4ba0317c2aae3f3b4200985e3d5c45d7670fee609cf5f3e915c59e214ecd1dd4db20dcfae75dd0291a7b2ac31d43ba081373cdce817db36e269e6a60000021c000000b00794d06640f7b8748b01fecbaad94e92f8d0ee42034ebfb1d8074433b239bb16b8ff1648a8cb2309b8562c096b99ada9f8fbc44fadc9d40ea7f4905b0c2b535ee8961cdf076341191be9a938988873501282bfeabe9c5dbe84a7dc674b06512ca6b6a70ead2b12cc12c62f4b343f8a1503db4b476d0085f376c4b4c0f3b352959aeeffd7b0894e3eb2d9cb175f0b0277040b5034be204cae3e2ca74cacb25308f03b18892eb63d3891c4d5b7877d016b000000b021516092926c6e462ed7c8383acbfa71dcec415a2467b288d5556e515283c3dde910d06b540a30241028d9ec797fbc8ca8eb7b543390ad7592b7a5825eb9e256f1009a81b70a824e7adb7e5fbdd68137686cd5b652afc4801e5a3a6afa2b5e266320fb857a7d4e1ace32c132ddd4bec117b78edef51f6a63f4c141716c80ec7a9f0b2fb85d5bb985a5232ab140b3c1dc0789f6b12fad4789ca0418aee773a5e795e738a8e74952c8396bfeb611303237000000b005adb7d78ac3104d3bd041f01d303c449df85a5a52579144fe5fd291896a370174e832892939fb8fefe2a3548b469e0e226775b91f6964ebc179cd3847862ceacfc5d06497e29121c14d181ae87a444f080fc5933cea50348567d9891c9b6fd1cd54cd9d92b713c746f76636128a500e28ac6bb34eff8bbb4ba0e401048008a45a891b6772eb1d3f27921c0e88c8b2b40b7f14dcba5996c79a0451c5e66d8a605775b277cb68b494aef2c20188a9f7ee0000021c000000b028b5591c28996596d334fdb5ca4d28eb5450c5e7911c497034f00b44c3418e06a72a82ca96bcd1a35acef6472dc21ca45dc99de28140dc90b8592d9bde8aef950374820396dd5f624512abbcf7eb8a66e7bcaf5a505d721cc848bf139d16ebaf775c2452621c2fd723afa32cd8dd25a621824ada7252f4119d6c3802680668810b92dde6f878e8fcbe27d8e93de95e2f2d537b9e6183fe8c2faabe53bc254266c1a25423f3ee49e71842259b58e13221000000b02fa5c78b9b6bb1afbf213f4a1d0d872eb3754e1b17160d1bc5739de68ed9b8a8a2846e9b9a293c930ec0ca9b0d3f52ee47429b5af7a8dda119069f4684f3a37bfd5b1ccfc874da30f121582b9dc32662f03f132271c7ec765a9e28bdd07e25cd2488a41003fb33434c1fda75532f4bf32ce490d52ce92aa02e8d3fc6317cc74aefe0273f8e2bf394ccb7c35bcf3874ac22cbf281d8dd4dc5acf2ba4ccf4cde951fe085f14c56810561360c7fc2c8d5f9000000b01196e75c35ec4dbcf1907bf95eeae8d3e5e6e6acf734e51954f62b8161f1728332fbc39a1355de12c554aa943d67faa669701e209b7648e8e819ca757e2b1a5505388c74d7e77fb4bda86e91b5e7c83d32468e8e5b84d6f055808ca44c6041ce877e4164593f640a4b35cd81c8d278da2a38b46cee1330c7ab185406eaf637a5dde5ba9c8d011919c727b1fd17777290194470c73be120def2b081daf82206bab2f9a447ea7930b5cbbf94e329b5d62b00000fa400000168000000b01dacfe23db591ae173f0633e0ff6fd6bcf780fb9506b0d6a5deedb5f26864003dbdd11e280b60546c696f352ef768b79eb4f196bbe2d6eceb34438bb7319a7f87e14b4aa7b154e63592d265f1eea708575771fba30c15ebd1f6541d7c134ff0342282d35fe3e3fb1a482a6d6322376fb10285062db24a99ebe072dc940ea8ab458d99598b652a160f623fb5f1099a9e8117205a4a539428d54e1101ef8f48e0a498115f1a2605803f5da3660a6504fbf000000b0163947303422639e1d884056995f097eda2dca6572df530e45eb67bf683447db096f0e49bd0363377adda1dc24e9220fbd44a05ca205e7567be835c832569c8bae8c6c41dda650839567650849bc0a6a913ebd6bb7d1471ab4c1e4c3e77617e5b130004570f16e96ac49cb5c7a8847c40e8259a271468b31df750593166c0bdebd644a6713d404622d514e12e4ccf0230ff221afbe37e10f0560332a84e33e10067e6d39ddbe355f6ff6185cc1178a6100000168000000b0269df0b1f25b3f69531c4f0b165de7b60a0318b2ffa795ce7becdf629e6cfcb3cca49812ff6dda2e3c796cdeb8a43639e2d3816c99374a33547b985a5abcf5de13bdf8a43b7ea00e2188ec41d8e1ca4cdbe8c953e76f81febcb05c1cc4aed15b55aed41af7d891788ff85a1b4e4f4ed21900f2a9ffa3b2199961bbeb9584e21800c181038be7a4cd7f1f64cdb4aea5c71d7cf26f7ad176f335a9bd59ca6ba5ba685a068d09ac3ab8e7e6c0bfe137d7cd000000b00648e460897bd1852effeaa0c088c6f9da6408974d0b27beb3a63d089289a0a3ae3c8de518be721b3713d2d126761bceb5a3d272dca5c5b9d2eb20a270ce4c902b2bbc61310296d2a9941417e45151b0e2a147694414258887536640db6948be4ec952e75ca9dd43acb766e877cb37a81a5640163b7d7191dcb48c3d1b8ed55fc912a183a5f5c156145c85f8ac8f4506206a3ff65bef60189fa3076764bf6d8fd9b42d77e8d8f0ed2aa2aeff6c7b1ad200000168000000b002d4a68c24dfdf6f70bcc13fcdcca07289702370e705aa6f45acf12eeaec1df4f35cbb0d96aef6a03e0825df71eb42d5eac51633ef708b7c3b732da935be5fcb91bc75a7c7962df1b10b1f1c2889ce3c8b7a721e427b93aee2ca8bb4ff167524b1454c0dccc73928f41455dc1d77c4e70ed8ebeecfd197e01a3918d710e04bdaa014d7cd3da171af1e097e391df52fca2ae723e967746d716c3dcf1b1d958202177b3c7dd13419b59273970ec08f7fc7000000b00d3f128ff24a3bff22b156edcf0a09e23e65fc28704493c123968209da27dd2be1b621931d64490e02a5f326c45a4d8ae36cdd160d684add74042775435f14b7714cbe7dffa06c201ed0db254135956c382e80f2936214ec6273ad39e72a7ee32ded41c9c8aed09549ffa2f5e71b9d211a00cd58fc5ee22f07d7b6b36be5f08888a919ced21110d36505e997463ce9b0301886cc0a8affec38eff2e85dc24e88d4aa815a43330746e10610f9c32a97c200000168000000b005b308bf88e8ef8cb0f2830c52d29483307ebc2d0cf8cbcb1887154c332428a2f275b5539305193e43aaf636ef0b5d422ecff3d7809cf45675da1670e680e7ed7af468b062d2cbc4f23deb50a171775861c3134f3f2df05cc12e1f1880d001f01f04368b60688c605572e3f138a5cfdc05cdfadc94f0b735697b981ce0c5f938e3454f781f7c9c7336355d22d75f3f3009cb9534991a70389478d16ffdbbb3b8f9e53b39ce3829428d74e9fd10f95988000000b01f7d8ff13917733541a533229cc1d321cb030c8acd97c7a3438c160eb760ecf6f37f9b5213d8847ed48485b64247899e3b0f1c86fa3d90477ab11d4b4d1ae02f95851fdad8e52e42db704249de23a1c3384f2564e457c661cb7f0c8fd9c13a758fa8d1221ba4253c79d16dca2f6c45401f574bb716d1a0a00e5724e4498ae49e866c7c8643f597f57679d8edbc48bc9a22fbacc3f838c65c1a7dbc9d99df72518ae66b4405a15f34929bdcb215d0893a00000168000000b02ad391240e6a9d9e523a7e9c67b6ac1e0e418aa7bbe41f3d0171ea656767fd32462a6c63785e095160ddb64d28e5f6ca45d772591a0c02bfcec68e3a67aa64ddace1dd494fda03b2a0fd85c00b7fa0915ae5988dbfb7643727f20d31fb5f78b88af37ad811a0efac953816bb081ea8ab1b4fe0af8f5fa203e8ab166414201d4116902acf8862e252bd7f620fa84b7de425a3f911a0f61ebad025a1b37c6a81264b7b03963115e8a6ae7975b0eb44c0cb000000b02ca8c3408d38d26cd4be22e6b77c22004d5b89e6bdc3b1aef8367edeead93c15a500b65c1934ad9a3b6100f0f50ff64d38909e796e79b86350d5c6489a419a7102c4065c21cc0199f5333a13ca64149c9f1a657f71d9431e9bdd4fdbe5fcde1fee5a89b1f32e11bbba6f2e31be7589e4154b845fccde951b6fbb01a0e0d7f53dfc4ef237fe602acd98e2c9f1646c8e650a53e5bffc99f8c49de597504d7697eae530e7e7f1085df698848b393816521300000168000000b01d0d9decdaab8ba33e886a0f34e7a9cab067210ed6bfbdb35c4678763465be6f288505e31cf73ac2773a6f90e93977d687389a026f276ba3c1d96c9de21ba6bc7c5155cb276bfae8696a54fb1d3e1a6f6ba2702afcbfc2f46edd6614279b3552dcdb635a2f3970604e26bde3dfc5771002bb1bc44f56598f66d53692f87f769ea02c1ed8a3e9585258b66a897932abb72f76851e118090658a8c0b8ee686a706455ada4f5978dfb7f45510559a04f36f000000b01c857f4d69e825e80379087cccc2586ffeb9233ac59604fbc20710fbe5102d11c81f5403c9bc4608820ee3d64f07d613431c9f0ded0b352f165726080647eb1ae6921fe0245dfe9e62f4739dc40c563756b5a891b32150f708e672ed0bcade31252e0e03ee30a1032070ea659c765d06054e5740743aa9cc4a1e4023ff4cde5ed8f47dca539b36fa79229fbfbe29a88f01b77e413546c46c175f21fdce8f1c2613a36cc20fcb2d58a49c3196854da6ff00000168000000b0205e19841ab0861049d8c4dceefbd1307091a0293083f729600ee5c768a8edb0888b7456e1833c6b8fdbcef52195654d727925be7d8ac29417174ec5d631ba77ce27e3b93006a243f992abc0e4e3b4b1d8cc29244c01fbb327a170919405dea86a702797a340d8cc44a2dc3e1ae9ddb42657681771a597c5b11fd70c5df79aa847a4cf0985989ef05f377d2607e6630a1c0c20f881fd1ab5ad71cc960a653134d0ef9828d30cf1c4e6535790eefdadae000000b013a6b56e4a89dab45db93a9c8ae13f30957145f068cd9ac1d58d260e69fa350bc12fba491f5f62b55789403555ce5a741a9e99849b1edc16f344a95edff076386ebcea6204da7ea28ca06c015fc660e1ac439eba5a4c43d22d0d7899e508b0fa6e62bcf14c1875d23f75e2c87fc89e3a0cf3f3a75cd9b5a3b89ad8e03828cf77032ec227e2a8a58674ef1675af47f63f1c41746028fe80f73db1a372aaa54d530a75984ed16efd6d65a233b7131f416100000168000000b0090abf38a7d994b74123b5a7ca942cea6b48c1e1de7f653028e2e9be7797b69992961736ac8098f32fc839e248fd5291e9cf3e76924e76eed80c2a5d70364fb22f84f443202374d996066421425e250ed56c06e1a5dd50829d21762811aafd299fce4a307171d320eabba28e3c9a6512052590585333b3c2fd4c2dcdb4524b02c2d2027b44b6260f71431350d3220fea02baf5dff768421a6505185b82019c8a93abe6615416d4c4031e10547e51ffd3000000b02f455c90e701edeeeae54921bb52fa6b630187b96795807941a9a77d9019fa1063ba694bab7899f9adad9817f3433c662e7cd2a3918c384fa26533ddf91857cb2a8c1638a9da3b5a2c638260fac853dbc7ffffe4ab8398a939726a68f92ebc47db015418e77912db695db3820a04ad692cc8a8479d5f208de440a63a60badca0f6ce8f64a7fd589fe8be7c617e3e53bd0ae53066030ebcb67b5f951f2ed9ef419721fda16f32d2a7e7309bf002daa07500000168000000b016d93c755da29cb19b67e2ee4289c5b018f309403b66341fa7a02201c026946521d0f0546f40a42ceeab276d770117226a40e8d55cb982ac59e6ad75aeeb413eb20a7b1cea759abb15fdbf8f5d33d69e4ecdd65e460ac85dfcd89d7f460068d9dd60481416a1a46d39521b68470d26a60cba2bc8b83db7dc89690d5e9e2f913845ac746641b50f890cba5c55685021870bc8eca71614908714ea982ccafc9ea564df40deee2d6289197f1e6e01d24d3a000000b015e7819b8d1db388b08f1b6da6f038ba0b5f929397cf4320923b42708b8b10fd09d7013b72e5f371b39476b514104d7fcb9d93dd58651475279777c2bde8c6aab1b9b3ae56a272bfcb54ab355987113c3ed8b8d5805e9e45871890ac8a0a8886b1b50188f3ec7f501d02d003c6b3038f0e985be6478c983b72a187ad054e2bdd84452123ea3fd71988bd65165efaa9ba1133caf0cb56ea8c6f6b04fb22fb082595dfc11f418452dcaada3bf5d01a452600000168000000b00a04c1ab69e515a7c602f019587d3e4970ae67e1bdfe8b3961276195d6e34e4c13213c8e4c11f8a2069489cf803aa7fe781aabf28290527abf7ee095477ccbc5e5d434b568a06520b4b2401341a05a8b6dd03b7153e54d0e322f8fe1b8908fd0f9aa4136461db59f901e9dcb9b6b3b8d0ed975a68b1e2d93c121b7d54a65e8264bf8d67eedf13149b42c107f81ecff1802f6371fd020a8c636194bf687abd1865479a853b6a76cce27aabfbb7a765c6c000000b00c5becd63c0b6aeb00da9e36bf029265dd5345f230af69cea0a018ff23ef800a1cc56c5059ddf54b22c2b783831ce7b58bf90cf0d31efb2f7babdfc3915e85902b074130c1fab09e74ceaef00c41cb9024db806eb07f2fd3d210a899d7279c0112119566031ab8f1d90f80d0bf984b0d12a582a0366c3747bf64e3c969a2e43adebc1906b72a522f740d559c674f0ad91c39b265c3fa9b77f29bb304033b095679fb02dd01838e77023311cbac0f4cec00000168000000b01f99fa851d1560cfee9570d73d504b63e0b0414285ee6b3d9a54ded6ab8cc4b99325e82c21a6545413dcd45d75680e65ecbc89a88a9ee86f496cbda1a4680285095af4d138716aa061eafcccd8b2b86d4f3e0568d06b00fe453e76e7d8960815224fae3817a4a9594f4b73da234e41790bb5d6670bf1a82b91cddf7f237604ee84a405918028d0c59c265d375f69f55f0cc5fd4dbeed5fed42490df81acfd51a2386faae01f56d8d04704123e71a9471000000b02a56ace797653c8eab5a21266d4f761399f2824660e388ca30b1c8019714dbc8275a45878f0e05d297f95fd3a9206303073761a340f5ec92ac0f3c87da510c21e66ebd9ed74c5bd7e44ff49fd18fac2f39b767970291e9be10ae0391a5312d463b3857b3b2decf6087c7522a93e3dd6e0755407511a3b4646a6efa7c536068f780d72c08981d1109ac55ac78c6790a30230c8a217b4bdc046c6c8a82ebb5f9e85ee36877094c4fb2e181ec81875b8666380000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000001820000000000000000000000000000000000000000000000000000000000000183000000000000000000000000000000000000000000000000000000000000018400000000000000000000000000000000000000000000000000000000000001850000000000000000000000000000000000000000000000000000000000000186000000000000000000000000000000000000000000000000000000000000018700000000000000000000000000000000000000000000000000000000000001880000000000000000000000000000000000000000000000000000000000000189000000000000000000000000000000000000000000000000000000000000018a000000000000000000000000000000000000000000000000000000000000018b000000000000000000000000000000000000000000000000000000000000018c000000000000000000000000000000000000000000000000000000000000018d000000000000000000000000000000000000000000000000000000000000018e000000000000000000000000000000000000000000000000000000000000018f0000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019100000000000000000000000000000000000000000000000000000000000001920000000000000000000000000000000000000000000000000000000000000193000000000000000000000000000000000000000000000000000000000000019400000000000000000000000000000000000000000000000000000000000001950000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000019700000000000000000000000000000000000000000000000000000000000001980000000000000000000000000000000000000000000000000000000000000199000000000000000000000000000000000000000000000000000000000000019a000000000000000000000000000000000000000000000000000000000000019b000000000000000000000000000000000000000000000000000000000000019c000000000000000000000000000000000000000000000000000000000000019d000000000000000000000000000000000000000000000000000000000000019e000000000000000000000000000000000000000000000000000000000000019f00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001a100000000000000000000000000000000000000000000000000000000000001a200000000000000000000000000000000000000000000000000000000000001a300000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000001a500000000000000000000000000000000000000000000000000000000000001a600000000000000000000000000000000000000000000000000000000000001a700000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001a900000000000000000000000000000000000000000000000000000000000001aa00000000000000000000000000000000000000000000000000000000000001ab00000000000000000000000000000000000000000000000000000000000001ac00000000000000000000000000000000000000000000000000000000000001ad00000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000000000000000000000000000000000000000001af00000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b100000000000000000000000000000000000000000000000000000000000001b200000000000000000000000000000000000000000000000000000000000001b300000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001b500000000000000000000000000000000000000000000000000000000000001b600000000000000000000000000000000000000000000000000000000000001b7370000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b60200000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000381100000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000581000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000582000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000583000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000584000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000585000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005860000000000000000000000000000000000000000000000000000000000000590000000000000000000000000000000000000000000000000000000000000058700000000000000000000000000000000000000000000000000000000000005910000000000000000000000000000000000000000000000000000000000000588000000000000000000000000000000000000000000000000000000000000059200000000000000000000000000000000000000000000000000000000000005890000000000000000000000000000000000000000000000000000000000000593000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000594000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000595000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000596000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000597000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000598000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005990121646ddf88c49342087fdb65b3c93f6d9c0bde5d6a57cba4cfeb51de93860cc900000000000000000000000000000000000000000000000000000000000010800000000000000000000000000000000000001081000011000000021c000000b01ddfc5a5d3ccfa8f82aeea0603372042cf2487e604cd8c978eb8ff9a79969d8647cc20cdec557d29d194629267b09a3b6a67e136dbe40a053b733e36d78bb7f0d7b94a62f03eed0b598a93faad078583e102c1b7b40de640af05be74b519271a4f7a3a7450b1514554f4b80817a7fc720ebb8dc953fc637d601d72d0d7370e505b7ff164a4a9097d2dbf8dd25578c6952f428005b5820931a0167dcbec59d0a5157e2e11b92b1ecc5ddeba3adab76377000000b012097c1f7a859fdc634c8d2610a11696d9c0bf2e7a8bfdd91943f4ff52a12e9911c754d743071998125b966a38cbb5b4affc6b2b309e08787a82fa62121ca710520e6fbac869754c1044b6b3e1e78e7c4dd07573e5269ccc8ec767783dc006f1d354b50351e0993b3d6ed1d215547acf2ffc6adb6a9c537b5901f9847712a4667e281861e001d01d593a21479623c57b2a538e8178a66fc1d3861851731c34bf21588d8c3cad18ca6796a4a787f392cc000000b00aa53db6947e9f960b8eed6e33a0c3c92879fc0f05e02d0f6f82a9e4fb456db0085b14ab1dd14eda6aab8538bae5b6406d773154621d0f05158913573fa16c41bc0850a855c75d51806c2c222d8c9c519df0f044302f67519a10ce9ef47412ab468eca7f7fd759de0856e5602e7b4d1803b143b0002d7fcccc6b0ab2c96deba17c2afbbb06ddf76631a3b00c1d604f74059ef3d8c169c4dda228854e8f78f4068f14edb18293f7d9ec8261579cfdce040000021c000000b022306e77616f05d888400f12e7e240b9d1092e4f95efccacf7314b2785004a58950d470993f7826f40fb19524a4ffacf157eaa9d18c2c1150734bcc6497c5d17590ad89a6557f06383d305392260a9d4e59c383928cb0dbb56264f8c01eab9e44ed479eff048f7315c6de7acd455b216020247b1576ba595b3532b85519e1a412cab883b42e71dd8eb4ce143926a08710bb39f8a40ad5d4f07cd305de66c11d1f937fbbb9375910273a65ad9036c4888000000b0066022bddb2e530bdf65b2b048c48a0f7aa9d3d76f8fded42c23ba4f6ae4dfb00f80ec058c22955eff579b2a13bca90e5277f17f433310672a5aae180b8ef0bd775f708570c066c206e02f0643c9dcfc0df1803383a72eb89f4d6ba13c121ac3251f557b4ced901fcb4004f5622847832eb3ec290342c6f66448be6944e304e8e0e6a35739da46f720d29047cdf0e82f28760fe3cb9e8c42a7e01bef6e1642b6211a5e1356c6dd68aa3b645da13161dd000000b02c1fd98cb82011dad4c6cdc1d694ece4af06ffc0604ce725d4569d1839d3017c8329d266d76e6c0429280d372b01651145c33460056ced5e287006dd557360a0f2a125265f8988d041b0d3bcf17bc80162f44d2a5c11c47dc782210347dd98903927b37f7250780c76c431769ad8b2cb24e31948a13ba967cf24dbe0d421b796c7ff35422d220dbfd73f52ea238733a216d3dbd310bc1b13daaa54eb808855accf39a1e7afda483a9c75b7b2e231fdfd0000021c000000b03052d503c528caaf9da9a7de5ce7db054cb3a8258aab17d657c0cb901bbde56cd959c85de7a1fa352bf09e8b682045ead9343018a3643f3ca418c587057fc836e7eb964f876e9ea7c6d9ad67d546de1a9fd0096b0014e9cb5fd11b17414f17838767e6712173d89e432171d7be48201d23f8c1bfff8041ba1d3e88e6991d692a7630dff634f2c4079c605802b9eacbe61827f0ee8ce57b6ec4aa60f6ec169c8b186234aea8b4197afe7fb3f765544ea3000000b029797f4fb4bb3cf2dbff122956ec2e8fd864c441cfe27de4255eed2eb2cdefaf863cd2e80aba5522877699ca5e0e029f41d036bfc35d27bd94e509ab75b189053ae1b9f65b364adb8dccb116aebddc1b62b2777dff3bedd56c4b1efd461b6437be96bb761baa0bc7127e122e6883d80f03c06c70c45fab563732d2e5cd3d0fababcb7e3087d277f7114ecf1ef2cbce4325bf14473b0c63198b56acce3a03e6e988bc4077705573cdfcd215efce243225000000b02e6562abfd77df4d0b2c661bb8f537995ba7c7a2107c0f862c34357aeb7f10a9d1049bd041032e3c638c6087ebedfc5999179a249898ec750b2c5a4420262711a970f699197e79b7c925d319b7eb58d42479ba3b8cef3107323d1df5103e71b6041cddba73fb991d1c91e6a0ef11e659221074f8cc4b0460a091cd69c1662ee7d873bac0743618540b2018e7dd0736ef1c601848177021df80aefcf939ecc8740891c72dfa479c00fd5a6e82e9045c960000021c000000b0242aadb53bd3e80d2f178148ac9f1514d19f0e8ad0f7ab874a6f26935b772dd18fb996267882ec11f7b28f986e8f021eeace74928544a9354db54eb389800a50a5764410b353fcd0fb787353a2dabe77ed763950284acc6c6608c58996ac6f921918595e25c5d3651e1b007aaa4a41631f7f0d1768d50d3270667a16f683cf46b29e8b8a64476ad3e539da48ee053a091cb21dbff81964a3949bfec7520739da03ec219e02134878956f844f397bd405000000b02887393ce7f35b7e6ad54ca3088676b88b9849cef5c66a3982c7f27966269d4212052ee1495cd72f9571eb34c9fc59752d5810d8355825f3b5453765016f669980eddf6310828ff65c78671346a3a8773f8c362f41d86bf42c1fd892ebdf58bb4334a52520d60f0a6df8d9add121df6012c6fa0ecfb3c88c9312b94caa78b9d415ba5088ae242554e1eca06c8c8916c41a807f2a9d1ba627858b008f3728373eea19da9e616e88af7ec0c42ec6655386000000b00b0b407bf3e0d49a85ab5191ec465e779165340035c3b3e5e674e2c79b688c66d8f3c145687df8c1932639b7f88dfd8a21f5943fea1a360dbd3d7efe218b94aedf4f6c4f534855475e0d3e0cc0bd55e79c6b2a6c395d08589abad7d457dc9d454dea3474f73490fb0e71d3228da22f2a0568b94af0eaa17d2ce60d24e6f4b242006c716a540efab27d8a88728417772226cee3a7a8d9cc4b2e11c42033ad41d247c5d67ffed54a0f393fe89de9d799380000021c000000b01ec380e421dae15ef29f8a93350470360d4034f0fa39edb95b611e5959ec780cd6729be6c095452778deb5591740c95987cfe0a8d8ae2227941dc5cad2a0d0e1d9ada6f9b26d2fc5980cd4bcf7a29a4670b62b909ea647b65c0baead028b46eeaaee14d08e43ec32a134827fd8f0cbe00c79eb3de031cae56fd38875e4edc01aefee98c3fa464cc9163c58a6916394ee181c40d437f49cbf7ec6565f0e285647601f9564d30147ce707313d5f7872017000000b02dfa1aef770d0cc69003026d8ff8f833b50364d066d82f45b1f7f45a4da9ec2e9e08ea47e63bd94e3a6fd4eb2857c780fd0ed5b848445511afd77c48b1df634a9a7b1e722bd3691e4f3c794af7a056f49bc5f26d878b2269fcb2a013b1db10655dc118d62048d68e40c893a931588580101c7ffd93747ff90101175a0adabc29b242d930fc869b92de95641589b89871162a6022c49b7bb07f4918ba7f57af8c44cdb518edac6a6c0c97a379d8e2e277000000b0136a84fd687c6612d40f9b5d7b74dfc0f766b2ca3fd808882551ecd51bd38ea66bc619b80901cd576f96ff5138e422ee8340faf16d4d7f872357d1c5733f1e926560b6bc51905f0e709ca80d08dbec89e72d8bab7aa004e30dfecc474295819a098b3e50d205f896e36d90619900dab83018f2f1359010dd20c3530af1584d1dd8732213394ec9c32ea16bfef1fef19b1bed1241e4b366bfa52d99b6fee22c620eb9dba07904fb3feb993fb32102f9070000021c000000b028f3d71389cfb07a1d427e0f32138d274c9672928c56a5f470ce9222a3143358d7e849f85dbfa44b0fd87950a3582617bdb5d8cda3881478fdef02ee759d1e9fb0f47f0459f09c0c9df0f92635776e8e0dde15b43816b2c537bc718b306fd2d0e7ae3f74c9fc07a34503c1e2cd6824e9154a24dd28f5581165070a514d49cc69e2398578cbff8cde069714de62f3cdf6050310ee51ac852e752452e107f433cfb12dd40902b933c2a54bff13c0bc2ec8000000b0185543efa4b6e72daa3e80d4c082b28ab3381bed99f1ce985fbcbcb8f4b6af289ad5d3707aa88f9fba7eb4e49b59cd3eb15fb01dd703442f52aa3ecb9de08b1e34519f53e173e9315583af5a76055ff6eee6586a0efadf617f8d106b81e06452cd40060de11dbe738e13e01204a739362f16f582164ead1a36f63f3128728dd35b1249f7649737faa50fae58f8896f150243ee9da239d509c04f139fd9a991d3ecaa72917ac0a8eeca81068a84f0f11c000000b003108ed42d23eb93c0645cd0b5151569a176c8a6c64d0cbbaa4284abdd6c55f0cacdf920b8b2ab4ae737ba344109f7f9c25d862baf07f1b30b2cdcbefa33dc93d934ee9da1ea2d40e345822be973647a633866121fb8c2820a09f0dfb6345e2933c074ce21f654b126919acb577d465d1c7cc99a1c615485e22faeebd8e01ddae644c39e7c217e04a45046aecdaa55e61a339288a1b0af08adb6dde750bf8de59a28b5b1efd0b0b21cddf5c8d79865a10000021c000000b02e2ff4cdacd25a1f4d4103bf5757ab59ece12aa03351cc60e698701ebda3dbda0c9ea8077567b7ec6586d6eebe49c974f0df3e73587831adf6a808543e54c4a5dec4d3ddfe9edf1cd9e99d911adf803712cc7fd2bdde0f432a9309d5683560fcb6f99cc6d7b656401653dbdb36f857da123ae90404c879c52577ba511b9bda30d9a4042a60d74fbd49b6cb1e14b83a0a1ef767deba20fa1dc28ea558b94f031575db388c1290f8827e62f05f058bca28000000b019215171d3b525f0dc30464553684ceddc143d683765bfbaec1dc2f56c42f8b2341985bf4f619385a72372fe4b310d2a07505f59a0b5be76ce0d64ca23c444f53436dd9bec72f2a6354681750cb6f39312067938bb371ffe1085e5bec4b8753b76895e78c5b8a1a99db71f4e1f70bf8a15fb3b66788959054f1987f075d0b8c394039b4d5dd7cce87b862ab2793a30c017b43caf87619b971fcc38cfe4fa885a43d5c11b920b01ec5243a76066176dc2000000b010f551716072070223acc5c3be79b3f404a6916561c6349d1bfbf6d253727be3c10873e179e15ab665f327f63283caf217bcbc7ac5b2141b07ca65db935fd14b4b6ef81be23839fc7ca464afc218002f40a1d0e344efa834b2a67c8afc2e23e6024ced4c303b7fa0f72ac1624baa0e1523b97f21a98ac33ad170ea2bfa473cd9d0cede6f93e7edf6379b627dc313417311248ce75b0c3a77810d638ecc5d14cce917780e3123b916bc5756dfce29546d0000021c000000b00cc86492a637ca6c71b771a29fae36eb67c8a3066cb98dee865138c89b6990b55be5d3835a43b788a3af3bad8e566c8f0ed779e580dfc499b3bd2c1ac7fb75d053dd70e40c6001ff35dddc350caa498177f99c7b04c90593c96b4219763b4ba411d37212f9fb117aab0a702bd3fa67393017d8608cf2c791ba721153b3c108b2e2f69d0c04a7e0cb3c4d3086216a0e0800a281bd1ddb59c53755b7af7350379539f785da6c6fca2b703db6610d0ee14e000000b00768fab47b0111a3ee0b24d72702f3918ed6c908918dd1305bebfec3cf9c5277ccfc6616b2f2389281ef6962143d30d4f2c50c7d4d3681ab5ff1863b5a8abe170e4bc67209bcf8985601abdf621ebfc29fcbf36321bd84fec45ead6302d4a3366ff033e1a63b9dc6ffcbd3c6370fc8892eeeda124c6b77d4f7ed296ed99ef551066149b9ca84ff32f5afb26a0b3ec536286809f09812473e3668f4823565893d6146964e6cbd8657b2100bd94d01d880000000b01bb5a1ec0cdc6e659128f38dedf7a913cd161dcce8910f407914454813226b828614e73ec5000fb774b8ec56bbedb0684807138d3e67c82bfd0c03ba64d656a7e430d14ee0cf9cdd80e333f2279b53276307abcd496bc229a98472976a40c1258c9ccfccaab91da2fa5b168327bbd11c03b05b3ac55b8c79cccd5a5ddbb51bdc168dbfea6ce6e8e930da65f64f3c4b910d637f28a0a9da006dcf5e2da8ef97f45c99ea15e4ec2287f5a630487dc47f0100000fa400000168000000b0198a95065e64b75117fd0da30b27f7279291aa7f7fc3750d6a4564c63d6ee26e81140c5824423557dc1d7ac33d75f479ae9b7cab758857bf1fabfd19540688e5c69919211a3164a7031c3bfa825459b9b423ea30fc11874200f6d9d7c232503ec11ce43c379976308dde6b30886fbbce1b5dba99dda8fa83b0483cd0239a6fb9d556d539d65216b8e232086b9c6f0df21286298b066c22c132e39d7c77c4e8a656b325c4fa769cd4a21b0ca9d39e60e7000000b0248331f523c5c1e35e7669cebeac6ece89a93c3ca918527fc91972ee49aefad0ff7038e9ecaa0b81900c0b2671b2723f686014d3b735ab69f88558885325c9c4cbad4a5519bebac082a45e291bd69aa58578f940bfb5a4a8c7352a72928dbdd29d202b44ed7cf71148f2d809b46e58c200985f165cbef7b8c62bd9b2d9aafefc5d5ccf885be5b78dbd6b657235c06026298892e430fb41890f9f8d4a7daf42a8e36119dec51c7989a7bda9248e74286100000168000000b01a43499d5ffd72c2e5acc6ceb5d416a893ec5809a0302f1c009253b1fb458a5da199cb76f8419c1a378ef7f145a95723c5c9de5aef3a9c722556d338d8ffa51debf3728f9df121caf7685f760f2bdb039b6ce0fb67be2f962dfb9e67cf259da1b6af17b5e7053aa6b365b6c6727171cf1780c1f251689dc59328a23649d01c9f3a877c29c6f16325dfb43022599f63270d5bfe0429ef0a0172a5ff6a03b1e3c8da3dea5baccc11c104be78764db670cc000000b0008e8ee49a1ba48df1b923d6480e4aa7d665d1704cef0191668839c636b71bf6a6837a8070f3ce61a037e754b7c98aff5a5ce2784bf21dc84b476a9526a58c3afd220ce91af6c54b75ecee7a214e913804043832221607b537c07f1690c8d2684e8bbbe04a1b5339203eb23b96707db126720d7a9260ced72244e968a3880fd2cb0d0a31a17bbca624aa0dc10be398f103bfed739583313e7950792ea0caaf0a88a99b09c6b5a7c4ea76217a7860dbe500000168000000b00cac2865b1866153fb58ec104beef8ac99d147897369f061d411a723435f9d484456176f300ea41c07e874daab2b55b802f446e5b07db434090957f963a3b51fe90b4b8fa25d3f55a465a5374f91642a779f8d1eb793a4ffb586a7718216f656273b577dc69a338ac860cfae17726e7b17a6a6ccb8a087c85710e60019c96f604bbd7504b8da64cf763fe31db27fed842d815982a8e35a4171330978ffa4d4c4dce1e7f636a794482226840e2a949dca000000b015aa7429a569fcdf204af5e8b5880284dc471cd986d10f14fd7845d25ac6955887bb0475c69cc91bce8a9a3a96f8d257a518135e2bdb2c8aae52c40a646249d851c905e5fc2273d87572025eb6053c7b92d018feabdc0f44994fdc57132619e0ededf3c9f95d0a87db30c46d34f7afa624aa8673d98545fce58ee1f63a4297e304af8b2b8f3bcd39a01e1df54e10f94722635e8c96986b7255432650e26c2951a886fba3ed215b52b072c68251684d1600000168000000b0076016ed0026fcd469f8967dbba15c37cb75a5c91c36cdcb7821781716d9e95a4d01fcb6c9fbf8f6a40876d89785b1ab4ba929aad6a47248d102cf48a54710fd6376892af2a4a9c4c4f928c70c207409e139b760dabf9c9984a11a8b7d0c3041e139546a7e59d22cc87995ff555192ff2c2e3bfabf5589117141c554b0f395cd2166f13997b292a4ea87fe7c91f7957c16748534ec9f5377b2cdb200722ca2ad8ae2c05d4114afef6565fd9b68f13fcd000000b0185ecc64b053648d24dff43771249e6c7dab97cb6d0cbf515f9e7f6cff434eb329b9ca5eecb466f7dfcbbeabe9927ff91fff7392eb9cf4f5101d584436cfce9a6eca9a2954e81f61cc039f687548348706c2ed23bc6094c255e0c75eee2ef2996f33f0eb2a6a806fa42c66c6a7692bb72fffecdef6a21698bac09c0197cb4cfecd7131389bcab02c95ec5e6bd8cd4f3119d5f27682ab93b4bfc52e5548e0afa36ef0dac6dec4bf514614d09c2a957cf400000168000000b01f6dfc19e2219f37f2a2fa416f0c77a2cc91c68d75fa9d3fc163c7fe17b50c559fc29e36ce980234b0f842fb3f5eb02bb052c549cd54a929fd195971185a218d783be66d0c06b144a3df1512d9edcd4f16c7eb5c765666a589edde7776aeb6ca950b35880dbeaa3c07bf7f95889826e9046450fce2369d03cc78306c0391467b9867e2fa301c323eddd9d2f7e3aae38e0386dcf1b4ca5932dca8cc757f667fd5f5ce63b5cb3ee54b0d1a858aae8e69b7000000b01f52e687a327795dcf767fc12d4e413ec29e23f2b914ea393055bea7a0369d2dcc9d2de36df8d1c91641617542c8bcee458ce94ee46a168b889e7eb0cbe493e0a9a7dcaef429800af78145e3de28f33746e66c90cdcd1be96bca86ff750b2a6e68b39954d8ddd006b4fbf388240b0f2028269fa924351b6f52dac06e6e46af622379ad68457704b36d36d4757e28e14d081f36f870a2e3625aee72d7342082b188849e795b400a1f2e067a0f4340be8c00000168000000b015d56df55a3fb99d7f2bc4ca9efe9d5ee87ef6eab42e54d65aadb35e1a46f4f01a0770f1b163a5ec92b175e9b46348ae6a8808b5975b37d63860ff42bfbfe5611df36bdde8874dfdb30a8d29c3bdea35dd9c2cc98960b017f91ddf9347db5f2524fd8f440d32d0ea2e0433fa2e0f854215a33cf3907014b1726c1efd0d51f9caccf7af51ea5f8b329d1321dbad0fae1e0b24bf48eda564c686ae32fee11e8a5a19df8592160a13e54a791c927737d286000000b028401e8874c628dacf719bcbdd53f1e676c0b00ef5af33559b34abb29e624fad7de744bf5e9a63f352bdccb2bbd462a8117e0b927f96a226b88bab82a578146cc4d4d3a1aa21bf7ef0529b4223985500e7ae172bda9a91f7c00ad545ca308dcbfc69223a301ac8dca4830f6fcd527bc80565be1735b19c893499cf0ea0cf13b9c6918c7025c5e21dc20d5ca1051a237120975b7f99163b46f0a3b3dd49ddaf9a64af4a25e88c90f0ed53df955f78c2ea00000168000000b01a3e89c0764b847d8ec4ceb451805af6acbfc6eaae15c5330e45aa91ab387d7cadf0e8a081de41154b537a0971a4d56fb696d15ee477e6552d9172fa262b3dd18aa7292fd79bd3e0167907ed8026bbe260ca64d1216c16d984d09b04e0bf526502c5886ecb03a1897e1a3b8e9477a85a0568c87c48cdaa00a1d9528a415444ff8c43cd47d4554e917efe10c334ac7d08138d123bf1917f9c733cb74770ad18d586d0ceda4af686b36259872a33c39283000000b0131105f4b0f98eb2b7b6908c2e4e9804dbc986c1b91ff712577dce2e885308f33aac469743449674a84e4ad59a1acdcf6ebbe50796c476a5ef010f6293487a9f3329bd124983ed64a7f0769e0dae642b089dc1a44c9ee71703f2d9cbaa1bc1c8a5585288655720371a0722b0c91901841c71e0e788941479a79f17cbda75358e48063e657cf0fc18646f211baa203b402487c68b7ca651052f0cc90882a5505510c1e99a7e566bbf572ec8ff1177c0ef00000168000000b0261b08cef89d9d33b2c80de2234894e3fb0b31302c9db06346db487b68859c41eca117f75332dee7a3b3e1f58491d3305003c55998e436777ccd161b7b062aa0412db4c62235ca2e47bb667bbe4e143f5e9dc7eb095d718e19426020d78a48a9bee89429e4c78a89e576eb0ca62ff49620fc7de10a770c514d800a719830a6f7212f3db5419c90356945d30b0c5897ad177c4ea8d314b5d70d0d65d18816b8ee04c6af9cd31ba6805a0484ce166a88a8000000b02599048df0c39ab444e335acddaffbe65b7505bc631e5f7395d4a7b3f7da681b4060657f18cde5e97436e8262f57df7d61a4feee93a216ee10d17a1ab8119b7d8e4297b7f82fb317c67eb38575a12a73daff9cec4dda6683bb685936df0e1870b33e60b61482b4ee032ba4e24d93667a211a41cb24068887121cd1c3942612936a6b8b367600ba6df867f756c799d71f0085d3f09004a4d8132cea070341fc2cbf0d9a248bf5a9596a771aa4c12d834c00000168000000b02b96ef887682355b797d7314cba7f3318ea7a546e7a09861202a6be3a4bd6c9efcb6e8aaaffcb414022dde11b801bd84dfff38b122f4f4857f9e60b36ae6f14c6149aa48fffcf55771d808b0773b34c64fd7664ea7ac665f0f4119523cbc90ad3ffc3db3ca320f1d696cddec3b622f990f9e1a586632a98fcfb40739181ac5a3d3195b08e01add852f4ec0dcdcb5b6872e92fbf75b2f9b757d87913f795aee3f8901e3e6dde30e89078545f3267a2b7c000000b01cc6190040b40da54bc2a732d6f2d7e068235359ef619d4802885cfdf0bca163d6b89c3c66eccc534830b88f7ff3a8173afefb84603df12fbe7a48f37bade7b9ae07b9a82340659d7229006924844b4822cd84a0f8ef3a9c96daa015eeb4f258094ad529ffa1909db01289dfe312b5510898e2f1be3b4a57e551d3457f129c920126847578b025d9cfe680fc77bfa9191eeeb4119e6dd958d273639303d54e9231833a515382e03db1d81f703730096000000168000000b012ae7bfcdff702168fb9d46fed36f081b48be0feea17ebbdb0e650dc24b9bcce67188b8cbc5baf53a5e1f419a03d60fb855f9826a1b7e58fcac0cee87380180decc78fc5e4dcba0272399f4c665dcc9b91157fe72aa0cef833c91f6efa48d2e3f7cf81ec113609acfa566ae29caabdbf0d5955a788fc616e41668e135d104ae5c621c37a37e28618ff32ff43354367250bbf76aea5233e8f0201e28725ffdcb3c7079296a3fc4d605664439c3b0ef6df000000b0127c88982288688d21e61b00e193f330aee49691e6c86c434431b13b5261e0e81032955aef2222ec78bddefce656a9f71e577b9f01d45bb950683f24bf57e54dbed14ec01409e2dadb6ebf4808f0ba2df4f6f1ca3e5f476b7d0466db473484d47dcf3a1fc752b645877a0d2330527a1f2d7d2a61956351cc6b87ced9e7e9bf72019b02f6becd62fd0385165a829b30f502d9b459744d4eddbf10db2e32b672c89a8beed53b8d5d29e592ac67015d22b700000168000000b02640a2caad03026c1ec81f804d06c030d071762e6fff17e9ca6fa9b11ede795a416eb172ae4344dae33552a0b2a007667dc2bdbf55c30f337ff8fdc41bde48286de2a63f26e025d5841a781bf88ff44f54085163fbc4a9efd04023224e91dbd7366e06d2dc670472f04f41b197f5d9e825e3cc120ca11208fc78677820263a54dfa6261977f8dd74fd688763cefcbe62051606c999e36f021b0347ced075186d8e4355509bd27610ac205f4c6db038ce000000b02cd09fa507b7679347050c6445c77419d9da9e46ed92508bb95c905c5c658cddc41cd924fecda23683a8527a9f8bcb15708536f7896f7120a8d2d968acf1b972bade367f832a450aced99e1df254bd7dc36b7a059714150e9765874dcb20de530ceaf3319b08ad2d79e3e0144319221d21a598b99b3c0cab8e333581d748df52d43d70184dd7ed10322f86f6be82cce01f210a982bda995ce46e3a80cf234c6f1b03268a4c6f62141f56d59602eae0583800000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001c100000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000001c300000000000000000000000000000000000000000000000000000000000001c400000000000000000000000000000000000000000000000000000000000001c500000000000000000000000000000000000000000000000000000000000001c600000000000000000000000000000000000000000000000000000000000001c700000000000000000000000000000000000000000000000000000000000001c800000000000000000000000000000000000000000000000000000000000001c900000000000000000000000000000000000000000000000000000000000001ca00000000000000000000000000000000000000000000000000000000000001cb00000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001cd00000000000000000000000000000000000000000000000000000000000001ce00000000000000000000000000000000000000000000000000000000000001cf00000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001d100000000000000000000000000000000000000000000000000000000000001d200000000000000000000000000000000000000000000000000000000000001d300000000000000000000000000000000000000000000000000000000000001d400000000000000000000000000000000000000000000000000000000000001d500000000000000000000000000000000000000000000000000000000000001d600000000000000000000000000000000000000000000000000000000000001d700000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001d900000000000000000000000000000000000000000000000000000000000001da00000000000000000000000000000000000000000000000000000000000001db00000000000000000000000000000000000000000000000000000000000001dc00000000000000000000000000000000000000000000000000000000000001dd00000000000000000000000000000000000000000000000000000000000001de00000000000000000000000000000000000000000000000000000000000001df00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e100000000000000000000000000000000000000000000000000000000000001e200000000000000000000000000000000000000000000000000000000000001e300000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001e500000000000000000000000000000000000000000000000000000000000001e600000000000000000000000000000000000000000000000000000000000001e700000000000000000000000000000000000000000000000000000000000001e800000000000000000000000000000000000000000000000000000000000001e900000000000000000000000000000000000000000000000000000000000001ea00000000000000000000000000000000000000000000000000000000000001eb00000000000000000000000000000000000000000000000000000000000001ec00000000000000000000000000000000000000000000000000000000000001ed00000000000000000000000000000000000000000000000000000000000001ee00000000000000000000000000000000000000000000000000000000000001ef00000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001f100000000000000000000000000000000000000000000000000000000000001f200000000000000000000000000000000000000000000000000000000000001f300000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f500000000000000000000000000000000000000000000000000000000000001f600000000000000000000000000000000000000000000000000000000000001f73700000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f60200000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c11000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005c100000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005c200000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005c300000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005c400000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005c500000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005c600000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000005c700000000000000000000000000000000000000000000000000000000000005d100000000000000000000000000000000000000000000000000000000000005c800000000000000000000000000000000000000000000000000000000000005d200000000000000000000000000000000000000000000000000000000000005c900000000000000000000000000000000000000000000000000000000000005d300000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005d400000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005d500000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005d600000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005d700000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005d800000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005d90112ed2e4b38f6e75420101b372307b3d2f38c00ab0b31792eb6f350bf881b71ff00000000000000000000000000000000000000000000000000000000000010c000000000000000000000000000000000000010c1000011000000021c000000b02a15e8b7877a2506e4072acc51190bb0fd789e9b615687ea302d1ec5b681c7bfc61653ddbfc347ee51386f61cd13710c2d8966ad44b0f3a91bdd3b5a88ccf3cd403c631f9144aba415525fb8c94e4b9e60b6ed44373defd02890caf47e5672de566c1e557fcb9a08b13a90981adfdba3075084fc9fb0f9c03855130ec2eabaa7475b75f8007c33dfb2f96405ec722e9f0924df493a31efe27afa270c9bbc5105e74d4b49e7afdf3f0d9c314d673ca30b000000b00923cc73f4bf365b364e9824d7683067e8f0af4de2ad200426b15dd7a25d12e20d2103aed87d439561888aeb244b1ae1276229595b3e5eab8975a57be5f6dd3a9ad3a60b599ae263413eff13aa59ec8b4546ffb2ce060a3076c200686dd08fe4b9966c56ce782c213550bd111895aa5e28aeaf147db227d7c536c93a9deb0e2ba79cc0365e12e1b29c869c1a7b920f48056c9a274b2e6b52fb4df38f67e54f8b34748077362d6900c61b35108050a5a9000000b00f4918b012674bd21d352bac2692adba0d1ba8e64000fd038cca2ac2e64da0658bc6d76c007bd5dc2b1858a6c623dffdae2e9e3d65c217aaae3c6c9fe68b6102a99193eb0b18ea7a621d02474f8e8316fbcb6f90498fef6dfb97aec25bd0a21c61b650125663d6e75b54a2db65a121d93026af04e96f096d8ccfc5dd35dc69ea1295a02774c49cd9e529e1fcf36841d816ac38df040e194f50d37439bd20c77caaed4522a66768199a28241ebfd0242a0000021c000000b024c3acc38c865c8bb4b21c9c9ed9f8f56d5673f9eab77d1868efc4abaf59d9fe8e81e979f22e57098e04e395add5bc158c1d6786c731aedbcf649b98965cfc2a301c1a075db4c2146b837f015824577912b799978a33d8c055a77abd24bfd285c510c128e6afb189af4238e7db257a741e47695ff49e892728b670b8a3de56d95e894baa87b827a5d9039f74120a012f2b862d02c11cef3598248aae64bc99e47ee14ef5ea31d34a2c702668b99fc3f2000000b00380d2645539f59d0b85711538acd9aff8e56d2ecde6433087fbdc0bc221e9efd1d45bbc2e3ad240452fb1b17405679b936c58eb06d6d4089498af9848e95f2d15c517c467c9466d3b977977efdb33c3729552f8b9267c725081072d9b3060d8b268e17f16bc1c75d6b20b1d781a2e550f8d8f96ddce8bdfdb80080abd3be004c7643a9a4a5c90aaec707114400f232a0059e6c89b9f43ffd4e1014c2d51782e4ac95ac24ea3efc12b4167893b3a1066000000b00d57c58971d4d40a0045973a347d40f1254ff5e455d0680cea197a1fc8c68ddb90a741391bf402732b6cdc27fb800acd3f656d52da0c160d59440c2132e47e25490345422324cdf6d67f86a10f88eeb13ab7483658994127560b7610b3907f59ab744ac449aff59826c97eb2f645e42428221d5bf897e73ae1f45b9446bd026cb759e066d742ab6d6b366f9fecb2d9d518eb9bf988c61d928f0ec805ffe87843c993b7c191deb8ebf67a6b9e7ce1e3300000021c000000b02431e5e62fe62ec08b6cb49ce0411d41c265f0f018df2b8496531575f95bbecadca7221df151ff76d11fc68a83a6cbe3021659504d8018194c439f833e584626f4caef52231f4814bd3bb8d2d85a45d3ce067e471e5c1d6c3c4be9a2a74eaf4646aace81b0db108898846f1fd7e9ea6e1b4d47381e28cf01198ee1b3ee53c7b30a827a78161495faf1f765fcbe4f32cb2076c283ea743bad9aa19f32d6bf1eaccaa4ee43fe06e5a884409e1c11521eee000000b0116d2425238c47e39729f406cc54a6ff4c56e75ea4e5876679561acb10e3c83cb69185519e0ef06109554cd7851f5284bec0b00a672e74da8f2ae60d211c3230ed1017e22196cd4be0adfdc4a3e39378497979e62bc8f6544b87b5aacbb22a11566bb5d569d6349c625093c69571e43104e16ec5b0dfa9b66bb4dc225f8edd819b45ffe520ce57e217630c39e68345d42a5166a6f1573cb6893fa3d0d22d30f876f6a12f211003b88ed2bd051e7d45a1000000b02323ee1a2f3ac3356b38069ccb77c7c12f315f106179eb5f3712682a095f7236e5d04ce9c4a59220225e925004fbc6109b10d0f84715bdb93c4298368741d3eb74e4364094d1b1c2d30bda1e21948677629a23225e7605d8a59e0942b664ab92aa1bf133ed9585a0b7de2e2e8083cd671c062b5c91ee22050fd996c95ab9458af9f09a33af505a52c9e1441a2b5796bf080759fc323dfd26ab6fa4ff02c1c1abebae5d28eac7aa7be3caa5bd8da3f3030000021c000000b018aac3f33412fc19309d82b49b5cd157fe57be4b9ec965fa302a0aa849398eecf6f42976eee93e940de234e20012fee2a3336590b0de8809d316ef1efb0e4ddc8347a991c96f0d106df5af219a08e16bc0275034bcf486ba35c84d8786c926725aac5b988ef56e182481f2e5bc93b27e235ee2eedf4cdc78e0b3493c279729116dd6f01486f89314a516da299b1d8f0f1d04a69c6c0795628dc056e80f0e6c0bd7c417e19ceac0aa5923429a8429775b000000b0067a8da52542416bdee0b90624b75bf8344a31d9654708faa33f7786b7c776626c5ea312d73555ce6dcd8566587422ac21aea78d87bf3267eeaeff832a46d7e368357cd1eff48ebb65fd10f7396838a88b21da954feba1c4ff192210ead37d6294fb154fb8e980bad5513894f0af07f308e48a44d3b9cf4935c647b385211a28ddd3478154c19e46294eef9f3c82e7d11699ed5dfb477dd2421bfd307cb47d99ac0d8b3c9cd0eaa9b5b30e34b9d060da000000b030257552aac1602a02a08db0afb0e7dc7da342b3dfc588381d1cab4e6b0430f4e464c829cda2355006247c061acb69ac07940511112bb007bb03ff77bd41107b2123c62b1427a246167f7fd3531a3942ec2a68a318da2cc8d1f4b7d6aa36233fe98c52e0bdebd89d49c69855aac0ab7c2cec973a5eace1edfa7306ed4a7b679f607940c8b92390bdb53618a46ea60ab100f3ad38469dcfb758a57b763b813a1c3dd6f53c5a1f129ce150ecba8f08d2870000021c000000b0071386eb91b4fbfd0a4394ea0c1492ff8e71e6af0b7dd7d7c02e85cd552a0ee88367e4972cddff38ce7c262d39821160f0b2fe2fd36aa8f05864eace21bc27927255acb985405276cd88740a3077994c8dbda0c8244a97a94f8037703f05089e92b1eb44af1483e1243d979c757dbbe016aa62be52364aea702a6c5f439486abf3e211a9f337ad0a22bff7283f3c25041f32bee67d3aa61579a629a6b219c4a5bbe81829552e49d071e5bf38d633b01b000000b01d0ae9546536c78cc9c2f30894d7687458b95830281a5a15b5da33d587524767f5ed5d8addc605460b947317059bdd136c62f1afe84deb878a34488ed7eb077346873da91cc83679e84d39e9c497cb7441e0e53443d9d7c86ee9598ac62f3956f54047904d406bc1635e53dc4eb4c95a1ca090f4eaf94658c45e9288219382b2916a8f19c3d43be781505a61c1c5117527a767f1310d5cd9f96d15138a546470816ed78fb058bc7076bcda5effe63cd1000000b0193045886e2de156f3d60d6b8851995a519ac14ca8f7e8b5ccabe4b101b4678f1d28a87de13dae6b45d833a998c74de73b008a8f95a313f0a277a82a5afcde9c754b12a19f178765ad6791e976ae7f0f9f275e8b187889808d12e027c95edfdbac9ed910de44f4f67600241c225311a7045bb75e2a38e8972f274596bdc5683f439e82446a559e0574387d80dbb7cbe1257b418fc3df35f5cbc7582d5f99d4f69bf88cc41ee485cca07c0b01e1e9cf450000021c000000b007f4db00e4c377c4f19c50badb9a4fb5a7681b6f66c927579613bc1b26cf9acd1820269a7995bbec277dd46cd9d939f275fbbf0e9ff5d57b60b26a908dabdf3abcf87afa044dd3c83c23419634c0af8ff5fe902cc8485c3d3d1b7b95d81f335c153504bad61a4be861636fb9cecf123b0945092678f886bda92417b2587ed4b1f1951fc139d754728edb7c4ac75eb89c20a1119151d72109b7f926426824c12bc88d73228e43a4fd3f0df455a6196fd9000000b017a8dc506cbc51d348e06ebc00ef613cb0b5746eeeb0126e4ac2fee91509a3879d754b357f258787f24945cd2a57a43fedaa51086b93dc5e52b39e0b2c02113eff25ff797a9013edb8bb47fb8d07def2b407a02842d8bee7ef4dd4879c38735d701cc485c5510ae71a26dd1a207ae2c825c6a7720438a2dc9e21c9665f48c2cc73cdf3b37ae523345958f77fa13172081763be1c1a727a9e2c322a5f034605f11bd6f93a812750f189a1500659732ef8000000b02bf5d0e44d88a97a3403e36931b9c2130e68ac989da739b4affb15ce8942107228f2290118bd7643fc96d62d3bcd1a8a4bfd31d3c8403dffabc9c625fb86f7355dbe4b080495d72765032fbc3eaa88e8dbd363981306608f882cbfde4e53d6edea64871c5460e017841da5eac40314372db996db0d59c0f7a6e90943b076de29308077bc8829e2cfc1650ceef7039bac012014be3d3c37423bc3fbf29261f060e948022293e63738a923a8af7f0d2f460000021c000000b02ca2043aa9e9ce799148fc67fde9be19d57043af896200fae54ef94473bd932b1873088852606fbb4abb28e9c312e963416bf0d7656e967a3ea07fa5e5af8d9cde4c32b47ef31a86e7f968fa03a9a4ee199aefa13dee1ce9b8079de9a2560ee63ddd5e8568306e1e515975aaba9132502ef0db37166f2ce36612a0fe7308cddc64471ee9370004e00b38de8f71efa7922b956ba18c1e8b5c0cb9ecdfa55826158c4cdb73f99ff0888c782f420b93d32a000000b00cbdd12b077acb2e2ea48ac46401745e68a459516b8fb369ce24b54b5a01efb52ef1d2a7fde3b080f51cb1c0f13acab7f6d823ae8abe97f18fe895147a3aec86e8c81feda50ae88d3bbab6528e80387bb8cb40fcb02056f066fd5f30b84130dd3baeb8ee2733bd5aeafe8e1ef72852600e22badd7836418321a04d4fd351519cd770aaeb300fc7da7b932d62b97fbfe200c33c1fed1adf96c6c9ac08cf66fbeb46c753efec494f958bdc7e89db39f8d6000000b01e727bbe23095bc27f8b41780385744a2ec3e1bd38ff222e033e9c185ffb4164c3ecfedb1991337e151646dbd193e768999f36ce88f62a3e50b79b8f05bbd858eae0d5c50d8425a41b1722db80e6687d3202e132d4dfbf22cf5cfbda0c239de51e84359de3ee3a3043f39399baf4af6c0fc50e6d296a2e156da101e02bfc8a860ac1aad1305c16165e317b70522c639e1667f34480b6bfaf56ea4dc768fa511c08eb2bc7309f5ae72ef55e82e6eba1ce0000021c000000b02a75d110eb8a39ee8f6f5fdab1694b178685025d14684e7ac4a13710bdaa253f1271f1b3bbdad1c44623e85e61fb5897fcac3981f38d2bce037e1e5819f81705c9a52cc55b03a7d50307d5dc14804798b4cd52849f95b9292000e268a5832d4536f2df5ceff350c0f99d1155f527e5130c8281e4f48bb775d8753d1bd136548a1270ab4fbd2ef44be2d15f6b6ab528d7169b90aecfed027becf22a0bb20956de6eb4ec705d6cea0193becddb93320cb4000000b008262f6bb9d4d8a835b238b593c3a7d677059d30011695559353040de9145b20191823bff59cdf743d933b6129769bed0c807814dffea9eca35d461bcf9aac43ca3de1aa93de8a1f190ac1f6f963fdcc8e105a6a02d916407814ad33bbf9fd120dbedb4691faafd3b8603d5a017bf5ed0efde7bf015500626d5206d2e1f92a8434f9685962b16917f17673696b2f23201d79d7cdb84a2e8be05eff205452d99511562a686bde0c5d1727cf4152ac7448000000b010a03632da81aefa95e85868e9919b340d513c720d9b9423b259d01494e82217c5195bcc327ff96de30da0bf17cfffbd3b274a8beb832da2a55e3d6adc82e6d5a59199cd9d1d938bbf99a92c2453d60c3f37bc2cc33ea15627a4335c51c0dec93f7028313dbabe60f8596159c0eb74dd18dd31eff27143c01239825649128801d86bc1fbacbe7c0795d9e73e21c1481428e2875f68ac70a54cf70a971eb252cceb7c201901401556c01909b2aa21448700000fa400000168000000b0249cf9eac118c178fbbf4d6f1df6fdaf58730488fb0165f30f08172deb2f565960a334309911904634661348da51a344bf9550da1ebae092c0d4974b40bcecd984cf2494cd615650cfba250f1c7694d0cb9075eafb8af7a5fcdfbda479031949bf61e7f0db8c995752c8dcc02f84d0110987acc800b799170f588593bb37515c222862101a99ea860ac42dc976d1a5d41c4e075303f061c2d8f13f3b4c99042ee66bcf61751b0b881565d9ab13919a66000000b02e8994847f78ffcd934636eee8afad52fb4a5390ad57ccaf06abbd286c7f5bdd39d507341097c49812c1d4d30d29f2d9c939b7bbed1490602b3947f08facb9e1f6a88184f24228b6a373d7dd5aaa13085f2c58601bf1013060062a7ec0f99951d9ca6f3c78be637ea8606852388f5cbe28814a52de5e270386053591908a2bbde2bcc6b9f760258338cf9b47405c9c760ac038255c7313f711b4d09a33381d105924d3e2db790185c41449fe48edc8e100000168000000b020f4ec1db23c2a915dc70815b075a6b5768c145d0c50b7f12984ad5d2628ff04e273871d1b0bf12b13f89dfcfed02a8e8f9bc686046eb9236cf9721a089b63f810f967aae6c587e2407cc0f548c097a5e92697d2c98951a7db642aef52c80cff146302b8b6b0f19647a48d7be6b7bf321575156cdd59f81ef1a6388db7c6e11c80a2c7760adb437afdf4b882b316e8901d5197d2102c67f2161fdeab620b4b6a4c2ef9c909224a318a236c376bc00bc7000000b02ea9a00245460a6bcd1a34bc03ec02d5aa57aeac6c7410e2def5f9e21d83ee136990fd2c08a47bd6a7a79fb185e6469d88728647aff916757934a79af5f57ff16f47c011512a6d327d5ac0c7c7dc1ee70b362bfd188079198620f9f716f01ab634a187f2883199fd40fb146af2b7ebb20fa38101b663e430a7e9977ff800b5d9e4752c27df0d807932077df158d011c22810fc895db8bb310896b654977bd4bb68a5a6a32cc2353d64a196c2847d914700000168000000b01c0c9d112cc265cb7e36b590c616067e4fad9a0bdc0190c33cd2fb2f432d96f3661fa479211f735946c1f14d95dc079f5126c6a428a0e55b1eadd0312d1accd44437d86890261b9c0ae52b987922a58c03203e05f317085701c865216de758c50ab4621cd12d051522d8ad8c111c516526fd2b1d1010679c8340e814c7dd209ba45940ccc19f10ba1620048e1653a05d09ee4903cffa9546ef70710f777737274cdcb8bad95b7f88f8ab52d7b4ead41d000000b02388d9fc1bd7ec5f6bce878874b8d56a517635db5f03829b5d59ccceb5b49998b8bd08eb1dc2485290a351a0ee2dece797b6b2301b668d2581ce6e983f32760191dcb79fcc7f4d69ea72861dd6f644d34fa1883412ad7dec4a4b26234c1c7dda9e32a9df8e3a5d0fac89fa479f0b8a3111056f1c3db97b628d6d36ce1cb7e90167e083381ef07d3bd213a5cedafb31cb0d1ed77f30ab6fea1c064ab2ddca7f799da46f9086fd4658298a0e26d0ffec5600000168000000b026dfc5054f6aa2c6600dd3d89753a7f34a2e934564f443b1527944cf7937055d50988de3597bafa80b74d4ba5b9e7502c121ee38487b79bd706f24064844f0ff68d1e5d54b75b6d0a01f11fa376c88aac0fef8a26325bf6224c8681e3dee3027f96ac751d283f78e34ca7b4800477f302be677d953a90a7f62bce40ce3a4f79206e21d37b2f10741e000a7073d5664691af5eb22c6a36e6c64edc07af3c562e8dcd834791efecfde24a88b96d1e51158000000b007696d1c992fdc3c105045d5db10a070ce5c58a230d2c4b9654a4dc807519e373d4499c964ae1228fdda0dc293210135c4cfee09f4fd6cde35b03a3b89e39f7a1530ce3b01d03734820df5fbabb962becb982af4fbc12f36801846a5b97f24f88ba94cb49f7013ea6d5c302728cbadfc2bd473ae93cdb431649cf0be075d0573fa732460b84a9900b81b287c054b4dbf068ddde3918a8b82feab54c875de896bd2f8a401feab9ea224c49bf65109b11c00000168000000b01f5056307fcffcc51f9f305da23699b03187e801b03098777c39f32b623a38bd19c46e87abd111d7b9d6dcff27f37a31e511463940f59c53eaf8063af1fcabb448e2a9a5ea9d98522815243678d43e1c01e2eb62f3fba4b50e1a5676e7b2944fa610b39f9801e33d3979c54b47a2940619d93235bced9d7b877a07ec90d1ffb9a8cbbd8b908abd684d3e3d48e8266270247102236d5f3e583556a3b276c25183ff09660c1ac8ab372ed8ddeced64e08c000000b0182cf6e693b270279afee411a74ad6816a604e18113a8fb977e3a5b8ad21ac2740d558836b83e4fe17db46dbf419208d4fdbdfde9a06c34224f5b5a425578372d8a7391988ebe5854a25db5570876e4609c87c82317657bfb30912dfb11059d851168e092443a58b44d7511beee509652649a7280ddcb6d3c8117db6c4e6d0ce5bcf6266d2ced7f6c800242b1d2ec4270480f1f5d934fbde624fab2427e4b171acd2c4dc37d1437b85c000ee097f03be00000168000000b00fb20995326e99e6a2166288c8d4c0c508fd9c42d5310249d32a6bf3ae26a40cc3a93464c1e1485eaaf59aaefe78412bb6fdf7436cc649843bf9245458a8e09d4f4f33a8416785ad5df75ecb0e16259c0b825776639b5766ba0d61cf8d3b361dd18f236b918a3578014cdbccb312d2c20a90f6a16fdb503daaf7de4bbfb5c231b2680a85385b744e21c558931f8223242d999bbf4001d77e17270a4caed963aa3aea7b8fc045b5c93bb7bde2c26a7497000000b01f4028e95fa998b73b4d4bf6f2fa428e6cd92535ca9f747d0cced450f88bc15f42b3bff54fe8fb995df0314aab2cf6f5f3d18f695e5fb1e8999897193111e169c61b2a6d1eca9fd328f51dba15713081c224662a0655de97695738ef11218f8fb95387e96defec74ca9c99ac1f990f341dbb03bd9236dc4f2a14b87e434636d3b7cf87cd67ea54a11f98edf1a78cf3500ba67df45a2d45a54a6c71156fa28c4fb13288dae6f22c0ffcf200dbe5c5f99200000168000000b02ff92832d2577e4c839e7fd69f0f03e881a9c0256f252616cd2f06283e0e61a935577be46dd747cb9e93415706ea068c8338e84e0c9d040ab0e1c8473ea965de0f053f9eae0e6a6e91e2fd2b2ae5e2de81ff91a20413804a4294b38b8030792a5dc6a4fd49b31257c0cb448f6e5632b61f19a1b90fdb2c63d737b0c9f7e8afb3c072a49f76cbf8a0849cfe1fd30c3b13045354e4b944f69f2546c0c42496a93fdab9dd3c320074ce1f170baa146b23be000000b00807dd1c451f4fefcc01e73dfc4ed0a4e3c3af2044014925dd139670760701c9c662c8654f55fe32655d8721a9bb9d16f32c87b34ea0e11276fb8176623621c56d74bcfbb8646aaa85c0831521efb1314e05ff29f5514ed36af9847b977b820152be053e04a13d47bb60681803dfdf55029a18f0b8286590736df175ac823b4c1064fd7a24794a9bc61c83858685c44620f3c913d273bc3bf809b6434975269bc64d3066f4671bfb8fc1e6b41e9df29000000168000000b011fa861c60bd01adf99f5fb8565f884a334a613f5655ca69fa91111841da0b8668c43f093a21d540a1996c74acfae836cebeffd6160d1aa999cd7453cb8fac3446dc8b2449f917df212f24412797847395076cddb3188e89957b15d69160e94ae47e2053774a9e5e14c50f3138b398571ec71ab3979f0ab5514d650ff050e988092438716a835d82c715956e6fb3cd3426571a459ff0f26d8473e4a91dbe01e341fe8f67bf6bf947327aff22f214b7a3000000b0264b66af139525d971eaa7f7b52bc8f9244aa2444d4a2407b4f68ca066b82894f8a4c2bcab66dd1aff9d04e1dbea1955b45cdbccd9b6fbe37a97a8af713c0d57e69e2f40804ede4d0f6019dd63dfe3e6260a27623bca74e830f02f2ef9ac334d3d7dfc423d697f9c145f7dfe182d3dbc1b95a1329fb771534ee6cc3fff218bf33e264fb36c75c4e32fba752be924f2e011918abc3dc113591beb0e7a1e9b1b153cca01a0bb6cf2a1e7ea650e9228b9f100000168000000b0070c4365d5b3a93a9e824bdbbd6e2a33a3d126d200bc7f6c733ba7f88e3382add94d8ffbb654bc278d22c6318ca96c75abffd7ac53386573a1e6a657ee1ed359f8f0dfbd2b48e1c77e80919b835f3fe92f3ad6d8c35f332384e3c99330cba0315cf89b8c3421612375de0d87eab97a6d0c23778fc5a9fba4105569c8187900b07f0d15c70a984d1c4f19264ae584deda0e2be4bbdccdb0affaf97f80456edc3502cd7a51e4ba400ae9c3e926f5925c90000000b01f57ed8eddb4b5895455b7980dcb2a0f6ba258f3f0b22cea9c716e11eb04bc3b7a07369a20c194a0bc2e7078728594838ada59ecb8f96206dc9f3fbacbd25b60ac3c8fc51e894c1cfd3ef4f7f0ad98c341b9c48dc5414571dfc680b9e1f39a401e4dea37175f842b7520fcbdfba9a37f01ae2dda2b5844f37dc7d71027d26e53fa3420ed8ded728c64e58b85278867c805a92c6838e12718083bec9a69fd2b35563ee64075af59a2d75f3386419ef0eb00000168000000b02d3fb88018c64f342af6a378d2eeba258aee4f527d9c65951e7e9c9a22fd87562f4855b9378469e5f684398736a8b6016f8d5f5af75a193334fab65237177ec49e043857c28ac023af38f5f3881cd98172371852c74f68203f765b594a19a69c6627aa01e00032c1d5ddbeaf0d6e25d11dcbd5809b8176a22935b8b481077aa6540b01d547108ae3888b988c25ebc5a32174bca5c6c7f1eb89655f8768eed8ae2ca43bf12cd4d30797e177a815c7125a000000b027343c518be4011b7d0b70126500f7160b609c25cb248c0629e76acf6c4c0c1d692949bd2d6b9a38eb6a61d722d4b2e20cd8fa7934309761341925212aacafe3f7cbedbe82bb5e70d8cd758e2e5e889d2d380f9db50dde17c49300f66dd72b8e0c239913c03bb7051efb70f70a1a35a00156997e456e530d61b9510d033d868fbf8e1c58a3bd71685ac7d827c4de1f2b26ca9fe9b7c3f022e72ff471b2a97ee34a47e8b87cc961262c72e3ccc25a1e0900000168000000b00292496e2bea9b311bea9fb5d15ecfe758ca30084662ca539d28e826043784a4fbca4ba62b2932094f29b39973e53f2cba70713b5419bc251fc8c25134e5e5300b9d1212cf19bc5a913abeca4039af91446c6a2cd622236f0c4cc8ffa36016102393927bccdaee034b519a79080661c2035a60d070462f44f152310dd4f326d0b86526c46af62268cc0a5226f3e0f895241f6a66345799660da75a77098c1f3a027322f322f154d6615f93aa44d2af00000000b00ae2ab51a76fa5046a6a8d0c8fd840ce98d22d909c327c4a3ab027074c69157af1d9c08d015eb35d7ea57c275722428d979a53054a175179e51349c503df671b0cf0f5fc88655fc859d36b59514ddc0e4b108e2990056403ced04a3fa41df605de957f49fdfb345f13a41ab4214e7c4a02030275e348843b7cbf2e80dd0ddb8d36e6687b7e9ba90fa7c9ca464b6decef12e1e99e6adc06416f9e8e56147e2d67577ab69152b99d559b00653142f9e67e380000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020100000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000203000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000020700000000000000000000000000000000000000000000000000000000000002080000000000000000000000000000000000000000000000000000000000000209000000000000000000000000000000000000000000000000000000000000020a000000000000000000000000000000000000000000000000000000000000020b000000000000000000000000000000000000000000000000000000000000020c000000000000000000000000000000000000000000000000000000000000020d000000000000000000000000000000000000000000000000000000000000020e000000000000000000000000000000000000000000000000000000000000020f0000000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000000021100000000000000000000000000000000000000000000000000000000000002120000000000000000000000000000000000000000000000000000000000000213000000000000000000000000000000000000000000000000000000000000021400000000000000000000000000000000000000000000000000000000000002150000000000000000000000000000000000000000000000000000000000000216000000000000000000000000000000000000000000000000000000000000021700000000000000000000000000000000000000000000000000000000000002180000000000000000000000000000000000000000000000000000000000000219000000000000000000000000000000000000000000000000000000000000021a000000000000000000000000000000000000000000000000000000000000021b000000000000000000000000000000000000000000000000000000000000021c000000000000000000000000000000000000000000000000000000000000021d000000000000000000000000000000000000000000000000000000000000021e000000000000000000000000000000000000000000000000000000000000021f0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000022100000000000000000000000000000000000000000000000000000000000002220000000000000000000000000000000000000000000000000000000000000223000000000000000000000000000000000000000000000000000000000000022400000000000000000000000000000000000000000000000000000000000002250000000000000000000000000000000000000000000000000000000000000226000000000000000000000000000000000000000000000000000000000000022700000000000000000000000000000000000000000000000000000000000002280000000000000000000000000000000000000000000000000000000000000229000000000000000000000000000000000000000000000000000000000000022a000000000000000000000000000000000000000000000000000000000000022b000000000000000000000000000000000000000000000000000000000000022c000000000000000000000000000000000000000000000000000000000000022d000000000000000000000000000000000000000000000000000000000000022e000000000000000000000000000000000000000000000000000000000000022f00000000000000000000000000000000000000000000000000000000000002300000000000000000000000000000000000000000000000000000000000000231000000000000000000000000000000000000000000000000000000000000023200000000000000000000000000000000000000000000000000000000000002330000000000000000000000000000000000000000000000000000000000000234000000000000000000000000000000000000000000000000000000000000023500000000000000000000000000000000000000000000000000000000000002360000000000000000000000000000000000000000000000000000000000000237370000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360200000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000401100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000601000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000602000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000603000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000604000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000605000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006060000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000000060700000000000000000000000000000000000000000000000000000000000006110000000000000000000000000000000000000000000000000000000000000608000000000000000000000000000000000000000000000000000000000000061200000000000000000000000000000000000000000000000000000000000006090000000000000000000000000000000000000000000000000000000000000613000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000614000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000615000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000616000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000617000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000618000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006190106cba39ce4081d9dc4db5f51166f401fd1d0361fc9bd30cf6d907ad61f27376400000000000000000000000000000000000000000000000000000000000011000000000000000000000000000000000000001101000011000000021c000000b02f0da25708ac3eae2fb3fdded02486628d9972c3bdeb09806aca2c481721303b6c3756529f26b33fb81ee4b64e5172cf84dd9d302e704ef002e122afa98b50c2330a78c3b8e59571b799855525fbb1d4e6616ef261337e5bac4674275c84416a2b8ebd38ead501ba96bf15ea0eef6b200df9436a29451b75980e96d774b88ef103348fb4b4fa1c20813f3f84905d621f1c30a12074a6fe671720234de59da445081b150214b00a2a6b914452a740f983000000b019c5ea25ee3d4eee09be7b65cbdff583cb4cc68eb66165c3b5fd2f05f6c7969b7e76e6c0016fe65de449ae7fe43a38bc19eb6899a615698bfa5e1bb25c6db2b75a047f8d599abe3a93117fb736a76f3e2e9e1e06b1df25a53796b2deee45c90a38c40be16dcb7457806b596d9717406108b15855a5c3a4adaa72cf7581d24fc2b47af2ef8217a60b361dd2e8f325429822dc05356126a098a5372f2ce4210987c79a675e8aaadab3990ff960992aeee1000000b003532abbd4bfa252da77df9300b039c2fb19fdc5a0367df8daafc82f41c7f3028e7386bded74aa6c14f5f45e434f7245ac42d2be94e79b183b3ebec2382ad9d796a070e2d64fad441b55b61a6b294def54c94b0a9b9eb380fe44fffe55d0808b3effc2b4d96c46c838668e5b41e9838b251ecfb89634f57fd2e4e6243f04f6237e669789bb798e424cec88e055962f641f900ea73606cd011af42ba88fb70ff85fa0bac5fee1104d94a98e5d8aff136a0000021c000000b00477819671237ea39b5f22707501826b68023295fa5dbe96ac4961835d6ea6ae13d664d2d6f3ca3a1f997a671ca3803b31ff9b190af887009df11f82ac2502fd7bf94af58388f5dd837a567e2e8dfc7f0327d8ac6c16d287be1bc28c82dad2afb862352f7be2d69d3f40a4a601bac84701cc614248147c3ae5669aed5c02e7d24ad50bfc338032f0c68ade872ad027ed2b18ab49adbe5b5ea689e1a4fe3869ab1f5cd0d5d697b9726775ef6b442d9c28000000b0072e753dcff0b7038a09fb8c6378247126ed02143c570ef10a8cb6a399fd84ea3ac326310bdba42ddab3bffb79bbbf535d0745a14fc1cd150fd063ec78938a1c50a53ac3d337cd8f36e8d3dc502e2d10d73c6ae43c8c83738dca42349e239d113ef9751d5f37001d160a9a491fd6149b0467f956f71d94d109c4dee20f0f8942bf3c21751bb446034c1f9f1699f22e5d2dd51737e2f891909d72b0f2066d1d6fedf1b70ebe90830a4bee853de57f0e48000000b01e1b9a6363c41c325a0c94b0ecbe21dfd3e4eee6e1e2cd2e7ff0e0ddbdf8b6360dcf439a64b4616ccdd7c51cec7d2e25e99ac8d598c68ec6b6e77cbcaba14037e60b83b520d483ae2fb868865a98e9df14d05005bcef4860eeba6a9bc46ad32ebeb73cc40534b04fca89e76daf439b5605e8f056180e9a3517a194730bcefd14b23d2ffa137710a5667ccfdd83e5a02426263d93f9143b9b69042fc7959ece1fc4cd9507fe8a558daf7b9df9f44fdfed0000021c000000b014c612e8985e669cdb9a9f7f9bcd74eeaffaa5065020132adc4323470f342b6ab094fb832318099ccfc484db76f0966c5cca1b22cbd9a3493ef69b23aaf0521803c053b66fd8a21cec209c1ee8fbfbd39d8af20ac23423249f64fde6493193eab1d6ed09f8945fb8911858b854364428242fefd8b75f966a6c8f8d4222277608460d0d06cf2685cdae7a9824f1f9f6951c902989c35d6b6b971f6b6ace7ee1fda25bc8875cbeea59bce5f31fa86202d1000000b00d608fc7e769262cd31b8febff5bb8170c0c0edbc6ae2107b9378af2eb376a46790b0b8bff5ca2d706e16d6c1421d77ea89530798ea13830e8ee26834fd64bb82ff452cbaa2f5476ec5df46aa763e950047c1a56b72757ad8fe9b14af741c0b41ae2aefa8216a84ce0c91e7c3e61fd44039f61d1ae317675a91b599626eaf66c1c026811b8c7613d71eac49b54d65c8919f410b94c58659529070d2eb31da015291bae93a2f4583d3f92957516ad5ff0000000b02d552fee357471779be65b88cfa5c551567bc03d3ec45e289ed888c3b298219d803e330f85891438d63f8e78cbd2168468a760f33349e6579d391d72e818f7c85bc39f361862993915d1d4e9b0e543c7bc61edb87f8743ac124887b38c95b7aeaa6c5b27024f96672c7780aacb54b2b615b883ab9f25f694e55a7d3c2fc0908ed19fc935ac4e6051d34b79764c705d70010fb3c0fef7f24fc7d4a2f0d9f37f37d3b49182127575d25083c0b8c76ec8740000021c000000b0224db98969ed2b037f7f8b19bb31a8132ec0513e2c7d9ba53519cddd4d6f099dfb6ffe84b1f2c2b633b6a86152aca16a394ba35988cd3a54b296861542a5881a9297efa38c4e7b830ffe634ffe280b2d991b524cf06f6364e28f95f49e34558800c4c1ed59891aba2634f4dc8ec81bb324bb306de0c89abe98a4f7506d66b6fccf02f95306c6e679ff5784ced488d5311bedba2f531766155609b199a1698de004c16c9ed20a013573488c60754439f1000000b01e5ed67480f53f575727aa5136d7c88f3192ddb87f3b2d89c02d2f50b1d3a6ff9db1f63fb945cf58c22098d16d90a94d6d9ffe3e6af5ae61e9c2dc91346c903cc7d8d5f10573940b9af35b598877cb2c96ee38d6f9f41a4b167e28924a074c6951e55067672dde27f3fdcbeff4106d572937c533e1f9317e19295ce62367634dc0d7fbfe3771243cb5f65f06c41cedf81f00555604265326eb3f056d7f0dbec04a3d5514e11199d4bd7ecec0f11250ba000000b0159d2df0ac6ddd44bc5b1371064f189b887d007e32fdd832570e7c568351913e31f69773e5ea187cc2a5cb7a2ed43585f4ca7e376c2e2c583a7c867f0bcbb66f76f3e786a1c5acd85cd06be51bec48a7c0ede50718fc2f27b0392acf1d7eda2085ad3b5d419945ce0bdf54989d3845b50a89a52029694758e4bd8de8a977a4fd87c758b57efba4a3d38adad153276920194dcf3b6cc05aeab6b129694ddd78925e7f92e4b34401a2135558fc4e8695920000021c000000b0198ba9946ef44111e3e068fac683f77d16d9082c62da6aae02d96dad70194c7cc37b5c53aac768ace71650897a54f116484cb8f5e01b1db7d1045e685740bdef67c09536d1cd2a980221624ef2ccc73066079b222c511fe20191db385cbfa5736b1647b70f8834a70068d04a947900291815b047a73bbdb7f4a012ca0d695fb08602624642d7e2f324bd9fbc46eb01cc07cbe71e7080a4866fbf3bcd2363a8ed3110415493405271e0356ddd7b0bc6c1000000b007da7df5a82b2649bd5fad2e4d7e664802a31b6326efa5ac2646e8d5d34d03204a3dbaca0d49820bc0340641b61f670ebfb88871744deea2ef0bc9bcf5863dedf2430196c8da8621b5c4ad7eace302ef0746cb5d68cb692f424312027cb8a336b34fa7c3b0e626a46cc8574fe29cf2d517401805c47621e04748d53febac67113e59d543cc9b79559a3b46c70f0fccb3122b901f581a2a2b151ca676c9c9bf2dfd9561ec2f1a96c577f429717484de3d000000b00daee1ef952d7b96f0bde075a22174037031ec3ef60fd80f8c3c9eadb75be9e5cbd1dfd58fa118527d0c60a5f423a9fdcfcd70f9b6eb1bb53f710ac29e643db1a8afe5aac9ad27918c97e2e0bac91fdf24c10fd631abe0697f4057257cff2c8c79066199489b5704d9eccc7bffb9a7052c2f1285f95fff6d8795c28e6ec828477c3f270c9634af833e2c3d89f976452f184e42d68430867ded4a104fbdffb218a1c55267fcd80c38b64dfbaffe2437ba0000021c000000b011fdfc44db9f05b2fda7297aa93ed4f6240f70c5cc61eeb6a765c2778870a994dbf3d16b53bafbe12c76db44fb12294ce47e18406015729b5bede574a5418cf9806327e434c19facdb5cd1464a4750a3eb5b85130c7d00806a6d8f88188229e8572536f775ecda652b50a5c51a74b91926fd9d22904f3dbefba4c9c28e371689efa6479e9b7ef65219991fda64bfc0991cc14823fe9ee3fdbdd84f1f55500ddae2dedc4d8143c8dbd9cfe8a78e02037f000000b01a0942abaa6f00301f40caa805eb792c6655649d8c66dcaae78cd5f349fd3d85efa512b3162ac6086b30526a87dd1aaa1f0167f70bac086ead9a84d27fb9979f458164ea40d27e7eace252ce9259a60f06b2df2de778a2453e80fa6a26d39edca227cef0e3399a598694588b06ab53301aa80e430b1ac5a9a783c45513c05f6b2782325463401406cc9bc97c0a4e2a5c0a72187e1acb23dcee188a7acc98891ddfa4c13be9b7c703f3416ee7b467a353000000b013fc45d51c38f38b17a55d9faa43ce9ab5b8ea4dcc99ca6217a5d8cab1a68d12fb7940e122f82f88fea38d9b421aef6251effaa4f034cb814117988bb1467292d3b357a170f675d89e5040c77e9b78391e44d955e5d8048bf7c1eebabff9cc80f5e5fc2039b36601423937705b778a161657d84a445a81417de4cfdb1e98a9fca7e61a1f09d482c9b21236d7eb6d50140c59c9e8c2b9990053ab694769aeb8d9a3516a82706cec1a3b31f481e323ebe30000021c000000b02023197bd9e510141231414c314faebca92c3a7ca0a9626f27c65a45e2f38b6c7a36c7e964e8b4681b3170f2b458a8213eda5cb6dec7fa8b5ba93fbca290651075947e55bbd172beb8b4edeb18d129164d2c2fd8af9eb043669dc1e7cd71e270c659ceb8d1453bf01a623362be14ac4519791ab65143cf6b9a72187ec28177ecd34bf0fd751fa2ee57b5bd6233b8f64d04eb402aa7e3de02ecfc9a3cb6ab9c26694a47c98ede394497b25260b860bccb000000b01a30f8ccd03126961a5113f4152a63fff86a1c3ae713a4fb62cd17eed2b493c7553ceb9601fc5480e2224c204a96f5777f5a024b763fecd052b9a34c69a91bc4743da3c660491c744821ffd7672394bfd399df050630fb9340c81e0348c86555ef05d1233b21050609cb25a1a369498f0359f73cb6cb7157b0740d265c3069739d0466f64686c1962feda6c76439f34c1222ab441ed6cc2c5294699aa5da8a7a3a2b28c174bd60b82feca80f673595ae000000b011a3475166521ae8774f87ae37a19332c06801e5b9b59e0492d2ec46d2138db29b6319158ced8c9dbe7398fa1c4469c87ed729f07eaea998433b03cdf3d94536ad886bcd1718835f570d65e9eb47bc4c8bd456ff2859d1f3271cc4c14f5ec5659cd4a65200f16c4a0c4723a37edbf7092bc94ac927b22c1b6c0f7609ce81f33c9b581ceefa6789e42df931d950bee70f1e003d13d79ff69210ad7b76782c25a1521e949eaf2c1d05d37aa931187202bb0000021c000000b024dde4c4e4073ee4429156c3f2a0c26fd2fa1305fbf93be41b84c338f686839a8606dbe621f09a233e9d3ae199dbaf0210d604abb5724dd1e0dd59891a3582b61e44c2ffcbdcf79eef2ff2eff6a2a2786e07cd4e2716e85b87c15a5f788e02f1785112d07d7c35dbb47750eddf7c9f1c20a88f4324fabb8673b559b6a46f9ea2b53d3a1dba45cd6a91efcf9b4e5ee438074faf3b4e0e890b8a47aa67a7e9b707caf7558011d0390c00152117820ba744000000b02851d4d4b61ae7673397ac0de7d3cea33f0932b4d144ec410534bfa91fb7342e929b608a9b85b044d7b3a394b20fb2cc249898bc4cfceea2b10754bc97f25855434b9085b66b5969280e072c2e2a81cf0034e34a29697acb5e21fa656be6ec0480fa678db0e1ada96f4e3d7ff6984e26205931ab2e5ece2bc8675afc07bf7a5d68428e61459173b4cca02e13620d9db22fde76655f94cc0c925605c1edb3721f6fb4616c7f54cc25be6e21a589758b8a000000b01ac9793f95b9fff4e132bd39af75102cc5ded08f08440bf15fed1015e5c7f0258bbe710d2e06c662fcb59ef1740900d89bcfe63efb26f36ae06667d1d53d05d951bed7aa23bfe7e572289f692837e8ef88670aa32f20bae12b2e45c3e9f16ed95e843a805ad5acf1de5b4dc9874f53d92802d987139d78c61526a955a073c8096d64583b9b99bcca12ea21f62cf765fd0b6f165436962545d90fbd686873ae220e4e026970dbf084812f29b4625eff1b00000fa400000168000000b011c3bf9cc0a67d0963b899b351b053cef4603866269a6ce0f9aafd79fd0abce62902c4545c498b2dc916e7987dc0faf0583652a4677404d102fe549a0aeeb9e613b2a9074d2912da0c1bb2b5bcfb56c46eacd03db5fb2ab6be72d9f53ab0786e6fbe4507b6483be435589746894e83f024e2c1cafbcdaa574dd760cbde4ebaeccb1d1fa19ed96ef82152bb9e22993c990dac90c432651445a4f9a82a8eadefc2eef376e6409494285fe308d6e4f8d7c6000000b024bb283d7013a867566026ceada4633865886443c8a4df9ce9e440a817ece759664fa91a9ff65fcafa30cb448dacab1ce0cf69e41a10c186730af05a01bd2326e080e0fd3be8e49f68c45ea6466b8ea50d86f64f1722f53e40935dce03bc16b60e82c06127c0609f31e10808ffdc9f4906979ca21718db331d336fe4f47eecb0c8f3f73fe9879a37e1ff54205002651705a2e55179220a59276c0aca5bfcad78eb2ec81b5632a3b2d6313f7bbb63a92300000168000000b000e519f983027e243c2dff3e21c6d85a3ca8d5d97e815c1245bf3333943bcd93d597f42ec311dabe087f3f0c3e269d6a19f105c70de52ba6753af9f540ca3e2800eca1c7cfd38029113be1326393ce1e22d6f911b18c789223326547aafb852afae1aa78342564bb9f173ea48c3728230da7fb20383d80b91d436deac6d83d68efbd156ef3c4a4b95331a863c996e13a206aa8764e8775ec32701395a8455351460d0ae645a58858bcf76b20fcf53652000000b014d7b0fc5520a5b7fb5419e427661b507ef570ea1e62eaed403efc0882b5c7bd5d6c2dd432d0828231220c8dcd2b246dbabfd1a65eedb3a37367a893bcc5ee2b9b4687aefc5708f0a737d695dab429c0eebd73cacfdbacfeaac8c0990db1ecd474afb40380583c043442e25d79f904a70fe9a10ff719a729528ae95a929e5eb6bae6bfcc8387c75055bfa7171d19bf7e0ec92af1145c80cb48ac0e5b7981e29f93f95a7e58f448b250513f56dc8ebda300000168000000b020b6c85ba73cd07a9a94738f6316dbb04acf39c72791c393a70d7c7b9b2aa6560976efe3aeacdd930f1ea04ea69041ddabf9ac7eac605dbeb3a60d2998b046ec9d3d52db1f6606ff47d6d247d69b6d5c673d8251a74d5b8a8b60c041a432d1f6e3b57294edc4670bb49a65060e043aa12de2ef1658f51b2f8cb47b3c0bc34246d0cfe2b2f2de74500396f38fb9ec4b892952aa3a044975dc802498b9d119550108eaf94d17c85b9de8a98758d07f9dc0000000b0239d594dc2a0625f0bc8bdd87f8b053904e9318e11f1fcee0806062b674aca66518aad0c5128c6e2a68e5633b497a88e28df6937d78f46f65a66676f09bb106f51fe361cd2662811d95c160546054687fab14961128d593ce45a955890e70842415e75fddd6e61332bb9bf1349626be120852295fd22fc023b89950efe8d4eca67343a716900e9860b7ec28daef327881ab2c311510905f6f3042ef9f9d9fa42851e9710ab8742ec8e4107021e4046e200000168000000b00851d3ffcc36e6b06e91455fa6c57a82b89401a608d769972fedc1142d6bf426c4c61adfaac192705a1ddea0377ef0f59f055d00ff5caf3a292ff22502778b289694bef5948eb4f6b61f070f120e1ba60f1a818b24b2efee2426c9fe94f119455facd812f1491ef6f7bea7289a3b0c8f27c1dbfe7606037aadfe9df72561b093cce1694e4e2bef7cb92ff8cb86302f0a284f2139c4f23cf1fa6fd31f468ce090ffe8e3a03737673383aef691113fcfa7000000b02494953b963d619dc9318c67117ed0f55acd48250d4dd011733654f94ff280f9d30446760dbb28b1644719dd0e4e4c75e38af95270370bd75d2de7a5139eec7e8370a433465ae05327fa686c3a997b35ab4720d1847ff0b187c9e348be301618e865ef187c26d2fcf695bfdb0924f8bc2db23e2b79a7bcd675820927bf05a04758c668d9dea7f8cc00527a7042839e9e07ee2ca4870b9581b35d0ec5fd01bdfc9b01e5cc3d4dd714ad97706ab6f7f8fa00000168000000b0077054380a6fd4cd22568ffe3292e8e0598e4c48761f23670417c2358757f3ec45da698e0555b1103d5f7ee1558944fad8616dec04c82f281fea0b52eecea6609895577895161180fabe32a07355c15b5b9e1f94ccc2b3dde2c0a243de64a514b01b274b78f401b93a48965cc46f8c2c08b44b8edbaa4da28b13f71e87cf04b8b59a9104ca591ab067117cc3491eeb7f1a55f553525332d946a5af86c090e04245fa38fccab1d6cf9cb811732697cdf9000000b000576ff8cea59826378a75d90cc8b8fdb5b5ad1cbda33b248724874a2380b46274666d5db713db2e8ef4a4400ff8b66faf743621483b44d481cc333c1f107fc9febd6b1bdce8bdd3449abf9ceac3aad27dc2b208a183e7bb7b86e05130541a1d5a576f1bc48059b84ccc4ddd77d193f00d06533de416e31c0faaea134372d81f2645d78080a5b60aa0ba90762ab5aa732f56d0d0c1965664758e415051905a341c1df0d305c7d353dfdb4c8b8116856500000168000000b020e8293eae1c145a8a073379ab2caebe279ff25f043cd86fda570a5d2981a43395461237af0d4a3fe0191cb1a81c0390bee9f907a3ea4d84fcb22727fe016f1a97a92fb2ea8e32153d5f8bdeacbdcf9289ced2c565e2992c99ba0475042ca34d1f8aaf04d692a667d2cac750d12f9889261a3d5d6f20ef603e882f8cce679b9955ad31a4838b966754c794d4774180fe22172c1abf7ac6f7d05dc97f347748712b52348758b2ea90f1b55aeaa59150c3000000b01c0b62d73cf02bf9597e596cfd06ea003d860450f6d0ed57c30acf8d8143f83359808725479b8e45e234aa62275bb4a77eebe799360dae008985ec3ad82ced6ad525b6ab7d803ec80239f2e3da3b985a9ad986979bf1493c495330e558e06e975f60b7602b08c7f0defdf9f894a5e5bd0013bdc39ecbca241e0b75a1e96f5e26c849fd06244a92121257f649b65a876c13714c7d486272bc2583ae7d4abaeaf6e45f03bc3aa580e7f7146227a99c20a700000168000000b002f25416993234928022f00c19a28c734baa155aa47aac3da0d743955d8db498b0a0e0f189285f7caed263022a593e427067a9240ef92184affccb8f184f2b764e47ddadb22ac71f4fd6e770aac75631d4204151fae2c17a4bca127b544b45df5dc9db772e9a83f7d8f1441b4f3763b42c9c8b68d6becf1818894959a02a805811e3baa413069e473bdcd920eff8a1502d3b663236d72b93f532c2dc560adb75d9bdeb9b47335ae9c77db596f44537b9000000b003f8bfa7460b23addccc8a8c216a796c1e6152a3f4699966b76a0e422e16dc085d858df6e4f74aba376acc7eabde06efd9efd14a71216ba8133fdd017ec72c9155dd4b3f5df3176cc7dccaa9595c39d1334a7e381ba6f09efcff54da9ae273a4799ec5332b2567a41f0f5652bc728c990075a8eacd8d98ed97c9fdd2034fb36d65dbbba29f64e861a0c01efbd6cb69911e071fda8579eb3640822d403a09a5a24294ed3090c3a753cd44dbb501ae900d00000168000000b01635b06961f81717b6e3b99193637c1f000c3a542dbb5f1ef9a24a449e85070466dde13be16ac89d1c796ccd541e16f9daa4c8461cb0069d27262fa28c8ab8f6ad35803e444f8f8d02c3265bc266377e4a19ca1509fb2da120c51daf0c3694066645bf51458afaa60820de8a371c7d900ff2fb5de540ad11ccabbecdbdd6ef5b4f1150bdc03ca3b56fea0c4e7684f0580e07ebe8273c2817361ef3dc5661ca4f236575c751c72c4fb0ae321e1e51fbc3000000b019cec33165ac459a456c520aad1d07dad1b21053676d448243af4c31ee8c5dcf0bb918ed899824a89bb29badfbad3ecd400f7e93230973e0eb00fc6045b4422d151acc9a78177e171766c5330b41e7716a1cc159914b881733a57fc9ddb23b1a9e1abdee7acac9183743c99d4b0917e71591e913b36f7a7f85e8b76ce848d900281cbdab657766b20f806fd970672a2911c0710425153821b7b63f6cddca26d7805fd659cf9dfba7686b17b1b0048aba00000168000000b02dc2228cd1abacf501bf1bb13af2e72947e627daf1b8e6060062e3c080077318b0ea20ac3954c592942326003515128af66526735edd2e03712cc0b9b28e18c8f216f09c76d8f1229056488c3b0bffadbcd1c998b3c1aff01402539d27d05ed1d8fb6ec89e772d044e946f24bc00d6c71a226efbcf3c0a98359b638a811020e113d7b7c5afc73b5a0f01423348f681ca23091da06073763d1b42d3dbbd4bde1670d3abd554b7899f06cfe170b821255b000000b00a0b9d6e0c025dba1b1f13bc2ec7fa43e55a9fce42f52fa36ba273886a1a2201e7d4aa7d0bbbd967389fdeb43ea3cb9a00dcab4033db1b85f030547ec822f72dce821dad42a9276b8803438332e1211a860655c87509f1d87b612860f2dbdb82723fb371a086a6e9f940e4ebcddb5be20319c7c0d0f46286a06cde4eb8fa40614e1392c37190581e664fdc6161de0d43292b44419be5e450e890db1e5e6ef5d19a6ba124a3b3afd87937aa11ef85aff400000168000000b02e3e1557c30607b1dceae198207aeab675628634d107ed106b2996e4c6b08886bd8262d637dd09a7a753dc93e4b565530c753a7a7245f3dcc9f57fb452e198f09984e877d0c3da46731dd0fdc782ada56c37ede0ab157b4cab9ea8fa9c04769e9fae2d83afcbbe8ad097a6c24a63cd1e131287673714e730e05937102da0eb52b1e3f7772442955e0b123a3e5f3362590b71a7bb89e882daa70a350dfa148dd69e7a7808f626e36a1a5f8685bb9c8514000000b01442652d236e696de7a402174518f0b46647aa32e2cfef666d3b61422f11f7f9ebc763fb9765a088d1f5b2edf5f9d1b464769ddf3a50f1bce8ad3ff39e884609d35f9812735790628d0550ab9acf391158f6e48ae1d3132806a788800d4ee55c0fc43703f59ae534ebeb2023648181b80896ed9521735fdacecf2c3455e8e33a6232f4db32155be8203ca730d5cfb7392705b3708ca78da60b9e4d311762158588d4621c30a980a74a164a4a6887343a00000168000000b019cd8309cded38d8d3e68b1b4128b3ee7a25340c7a3538c3349e7d93c1c59aaa6f8deeb0cae382e461bc515e95c9ee6e297aa581f99c6d838569e2b629c94e1db91d4e1323d8b2b8b188841bbefee88c460255f1b888683b3cf2f64585127368169d2fc56f920222aeba65f86d9b3bd916b094861dd97339f30ab01320b67c62d8c587cad0ab82f7d44b3a9f28ad092d1525f5c36d3ff7bf4b9f998c6b803e7881588fde111d996376dc31ee181d718a000000b02c9dc5edf415093b895f27e9bdddbf3345016510850423c8072d9d7ce29ef487b08d6b356a23f061384d023eb630fb2f0c061d95edb859200b38d99fed29b953832e85b5d0a3906bff3bb861e1d5c4289cd61ae95620e88bca982e7f23635fea5c7768738f719209ead72f395633a51e139c43080fb0e80c1a988d81f575a002e3b20b200b6bfd20d77184796fc6b640176b83955555d06b77c94fe5235d33ceda9d3769ee9538a0a0a5c1985ff91111", - "calldataHash": "0xc63061a478677fbc9113639832d607ee836fd3513af6f55d8457eb34735a0745", + "archive": "0x136a8f7d7909e8b294472fef24dc3a6187259aa5005e2e0c32bfd1f49b80b5c8", + "body": "0x00000010151de48ca3efbae39f180fe00b8f472ec9f25be10b4f283a87c6d7839353703914c2ea9dedf77698d4afe23bc663263eed0bf9aa3a8b17d9b74812f185610f9e1570cc6641699e3ae87fa258d80a6d853f7b8ccb211dc244d017e2ca6530f8a12806c860af67e9cd50000378411b8c4c4db172ceb2daa862b259b689ccbdc1e005f140c7c95624c8006774279a01ec1ea88617999e4fe6997b6576c4e1c7395a22048b96b586596bd740d0402e15f5577f7ceb5496b65aafc6d89d7c3b34924b0c3f2d50d16279970d682cada30bfa6b29bc0bac0ee2389f6a0444853eccaa932b2a60561da46a58569d71044a84c639e7f88429826e5622581536eb906d9cdd25a2c0a76f7da6924e10751c755227d2535f4ad258b984e78f9f452a853c52300e212d8e2069e4254d81af07744bcbb81121a38f0e2dbed69a523d3fbf85b75c287ca6f33aadbac2e4f058e05924c140d7895a6ed167caf804b710d2ae3ba62b1b51297b3ea37637af6bd56cf33425d95cc5c96e9c2ee3077322fbec86a0c7f32c15d2a888c6cc122e99478c92470a1311635142d82ad7ae67410beeef4ae31f0902ba2fb964922a4610bb18901f7b923885c1d034da5769a48203ae6f0206a92855e2c01ddb3d6553386b5580d681b8230fa4062948668f834f23e0636eaff70aaa64519aafdf4b040bd2f9836e76b9dc13cfec8065dcdf2834d786e06260d100000004380000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014100000000000000000000000000000000000000000000000000000000000001420000000000000000000000000000000000000000000000000000000000000143000000000000000000000000000000000000000000000000000000000000014400000000000000000000000000000000000000000000000000000000000001450000000000000000000000000000000000000000000000000000000000000146000000000000000000000000000000000000000000000000000000000000014700000000000000000000000000000000000000000000000000000000000001480000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000014a000000000000000000000000000000000000000000000000000000000000014b000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000014d000000000000000000000000000000000000000000000000000000000000014e000000000000000000000000000000000000000000000000000000000000014f0000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000015100000000000000000000000000000000000000000000000000000000000001520000000000000000000000000000000000000000000000000000000000000153000000000000000000000000000000000000000000000000000000000000015400000000000000000000000000000000000000000000000000000000000001550000000000000000000000000000000000000000000000000000000000000156000000000000000000000000000000000000000000000000000000000000015700000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000159000000000000000000000000000000000000000000000000000000000000015a000000000000000000000000000000000000000000000000000000000000015b000000000000000000000000000000000000000000000000000000000000015c000000000000000000000000000000000000000000000000000000000000015d000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000015f0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016100000000000000000000000000000000000000000000000000000000000001620000000000000000000000000000000000000000000000000000000000000163000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000001650000000000000000000000000000000000000000000000000000000000000166000000000000000000000000000000000000000000000000000000000000016700000000000000000000000000000000000000000000000000000000000001680000000000000000000000000000000000000000000000000000000000000169000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000016b000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000016d000000000000000000000000000000000000000000000000000000000000016e000000000000000000000000000000000000000000000000000000000000016f00000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000171000000000000000000000000000000000000000000000000000000000000017200000000000000000000000000000000000000000000000000000000000001730000000000000000000000000000000000000000000000000000000000000174000000000000000000000000000000000000000000000000000000000000017500000000000000000000000000000000000000000000000000000000000001760000000000000000000000000000000000000000000000000000000000000177370000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760200000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000341100000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000541000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000542000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000544000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000545000000000000000000000000000000000000000000000000000000000000054f00000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000054700000000000000000000000000000000000000000000000000000000000005510000000000000000000000000000000000000000000000000000000000000548000000000000000000000000000000000000000000000000000000000000055200000000000000000000000000000000000000000000000000000000000005490000000000000000000000000000000000000000000000000000000000000553000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000554000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000555000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000556000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000557000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000558000000000000000000000000000000000000000000000000000000000000054f0000000000000000000000000000000000000000000000000000000000000559011dedfc544c4f1e5f047e5ac2e76a30e407c87cb473bac191649e7f8e1576396200000000000000000000000000000000000000000000000000000000000010400000000000000000000000000000000000001041000011000000021c000000b01d3997dee1edbb7ef7c403f226e122d3d7bb8389be806c58ce0c654c049723707b68b2724538d7f1f7f6ada6e299ea0f83011e3b7b9b06539ee5b999fa332bf5d61b8ee778e565bb06196f27671150e91124bd403b1296f3fd2a74d04c4b1e9eeaaf715cabd221675127060cc62ff21b13be783f59e1898174ccafd0dea8af65ce95b2d9c406c023524d7bdf3931e3cd0cd47139b2decf80410d1a099cd92016e04c75da8674953cdc135badf63b441a000000b0260359f16ab52308e7faa499bd9e01d765ded9f2622ca0df660f5ccb58c4fcc1174435db2fff62885a0f941371f015a6d03da08367f074c6a31f875bd0a57cdf99afb308bb3e8891249fa7d838f7bc27b457efec42bd31b3f1627152869f8af1cfbd48b32bdc8f7d8960d7bb24a124fc25bb0f5acac9df6d45710874016d83a25d22f4c334f062ca45eb699901ad175d2a210dc2a46bb2ae40cdd0aeeceeb9a7bd3dd68e7db26150dbe6921e2f43c156000000b021b1c08aca8bf1e1d6b1f2fd7df97576515f97837379f5dce70161b16f555d403908420de0f9836afaf79691d21d318d1ae577ce362eaa6382fb117c927e3b278f5d429723734c38ef6939555747bcfb94838a1da206ba9a8aa4622139550791c1c91ff8365a26d8dfe3653c2ea31b211dd6042939757e1c1390f94fcf615bd3d1cf49d0afb2d3713d1f3a01f25d2fb6214a3309a27ee15f97cce516fec5d806e1f83a0f49103c045e0862cd1fc8ef570000021c000000b0216bc82309c419ceb58924457e8d7a297aca024b5e37d97cc3cbcc62707b0cdaebcd0a5b5ecbe22b066f1f5bdfe36f0b03be577d28a0227486a0cad6597570c99f12eb0232b098076096f699dc03ef93c1cfb66f245c617364cf570644ab2d291cc74001ba8471c4e9af016d55eba1fe0260cf3de99a5d5ff7e09a31a71eb6cae645240ff497169c9652fbb87193f0c41cc48e915dd93a0887ebb0b75c33dfca5e2de2bb5d67ba745492e865c39287dc000000b01a379a7ef4e1cb541186767b819353e6b090a6f90cd19ceeffbde433c6e5d9c043e02860a9c3837fb78d083175fb30df5857b645a82320cf97aedd92af6d96e1563937235211afda07b4d97e054762dda2f750e3714ce773250e968bc00d6053eed1c5fc963bcb4f577c9a283d3fd8b22276207b12cf61b15f8b5b00ff37bf82129bb65405af19031252e942587c2cf526eea148639833ac35fdadb83ad2d3779d8cd7002919b6873f6ab37361d80ba5000000b02e2e7bef01839fac64c0cc34b3dfa0faccf3f882efe3858d26c556001e86762576f15120e8e1b48b1aee5d3870c2fa40ead7d0ace6aa1d3764f2e90ee7fa6ea5b37369819ba9baa187c022f37b104a3b4d7c4ce3e5c03f6144249042cbaaf9df4177c07340eff481ffb94d328c787bf70ca27f21f88fa21f4f70172d020d9072f84d3c9f06f9cf9f071e7610e598a95f2af27875cb0ed25ec027ac6ea72eb0367fdee5b6447f5ec633b81d605e9567c90000021c000000b0014e8c6e9dba2b685121f150a0c6a496d5abbdf8c4eb7b33725bd3d5bd0b809e08d77ab57c2dd8a823e840c7aebe07d84b8880f8efed5ee7de8fbcd4cc3bbbaa2623caf66612be45ebb748b44d5211fd3195f21a2a662e9050ae21080643ecfcaf592f150ebe1150716e49e500c39a3b0a4191ae426edd10fd2961cfa765d518ac59b520ec3a887b0fe4abf369118ea82671726af89c896caf8fb13b04b4d725b71d6e25ac099212229766bcb37fa56a000000b0188d99db5fc204c1a7ffa3b03d271aeb71d3e1bc0fc621e9db31ccbb35c73ed09a774388d34b67d755c00661e068e377fe0d1eacf41410bcad74ef12f71d4762cc66e4fdfb8b1a7e4c9c2e510a53bbdf11caa41f500f043cf27f2105d8be018ba5a6c410a73d8ebfdc20960f0b1fa1220af50a029a9b4db4f465ab798bb0b1371eda734288edb52178c065221d3b5bbd04c8c7f4c6d1305bf0826aa1a7664a8cb234c3082ebcb94a7cdd9123250b774f000000b00bdaa7593ffd8c29824be7af0e3b4e4e74230a4ab1e44d329d91666389b98a114b23dce55385948fa200bd9d0422483ada36e5a814b7dda6d410648f3d8cf5526ffd318731873b9c07f84c67b6680ba33195402b1fcee07e9a9bf3a3da6f39a85f471f937e8e5d8c43bf84e192f051be16b867bf93059085d68e235460c79b6d776da7f19ad4775e484977586eb5857207e32e9bb027808aac3fd60e8a2df42999149062d6659983dd0ecd70045914ac0000021c000000b0232157d86e289750306ddcdf622229fdd04fc365bc7a1521b7070714f731c15ee1932ef3aa6c8ca1b2f85428d2dde123dce2e69dbd6a33bb34139c52f6e2fef1419def0b14d6510034ee4425e73333e17f648e9f33818dd3252f38c9ce152b65f7fe6de3532e502846e22125db70b27b1aecdeea49276243f3787be5831400fce496e3cf0f8f77a05c386d3e9aaf4fa52bc5c36301d6bd848f2fe6dc03d70291ad4d2906fce4a2a7fc295c7c25137cda000000b00f9060c7379a9aefddf97d65685c86c7b2e298df1941dfc4016bf30f05387952fb1f138089fafe420410f21136ee98c618c9ad1049f35694b87d8616c92afb074d616404ca9b0454bf1b8685189035f5e57fc0c58603c5dbea2e8d30a6527d3f30e81c5a3f76605e37506e563f42aa781192de4a8e98f436a019fb2816920501ab8bd79d44f32a80b51d68f2015571291f753c8129ff9c06f6ec320f8f5230a4d2aad95ab31879cf9ae495c0ef1600f0000000b022c3315379ffcf05387502a5b2549d555ef3ad8a0f65a755aaf26ac4eb18d486f7e164ab358d516444360616a92c16791bd3d6cd020e5dbd8353cf66baaee9b7dd4a7aacdc39159cf9dab017139b54d7d78d452fc3976c11f6474531a32071aff59b12032aa1e600401cfdb637f8f7a92a1b4d9779eca2274dd4ed4e7c1f6e5244c1163431036534eac8967b2bb53a1822c2351bbd438783fb6b7ec31e8776599220520a8851e9e50e4c6a8a9f8993e70000021c000000b0149104a19aa10185cc36c579aedd401d9cd0e0af11842e7b1cfdda07660b8fcbee81b162ac597cb3eb604ab0630c07d5dac58530c4273fe77ecfbdcf85f39696044c447685a967743770c51727e678075e65f7922fbe2c7b43a9d4199529b93d82a45f3d9d4fd98eeab5c9c0009999453063a137b6a7212bf5aa28527719c569b2ea60e8f35780b3912e98f0b8198a7504830a88450c0b038296eed468fd369a7efab809475b52994042d5592864637d000000b02c4c0360c3922ae08dbe9d6a874c133ef63299885eaafaacec62b8f5f7f9a739f7bfe929de1bfb65dbf4f9b36bb0bd7600e6d19c51bf398b317751e22e5e9b575029c3d1bfc99d8603d47d7d925c978ad4e10355cb136b23c864621c0903697971b4d7884507c70eb716094c628b434400377f9accd28d77b2d4f1d7a19b2b7656423167da836b538e51fc588c6ebae705cb21e4aa465065be992995aef9e9383f7765d174fe91fe2d18af127ec8a3d1000000b02ddb1be8dd5daf54a9cd062d401bdcefde8be16079354781afb0ae2a2c4c65775e8d315c83df8cd9a2235ce606117d4be4b789388eae232b8e3beaae7a7b93e5e95cbff94915163671a0290350f9da16e6a0e29c7732f1004b1c3d8c758a3918962968b226fc8c032f250fb3bc3f958c1122336cace9326a1c285ed440bd6569f942ff8540f0af9f40e1f74b41c5de2b08732150fda5bafc68c1000f8aaa38551995288554c954c131194c5f772d0d730000021c000000b00d705cdbd0b66960836766f11621140358f3c8bdeaf41806f7f6259de5cefc3f3866f222a8af9192ab649ac84ed7d629212f439b6566a1e6e85445b5999586fc9226f2dd1535110e7b5a62e73793619860bac464ebbbd230ac6ded1a548963a4b980d8a444c78cf40a6d5fd0412204ed18ccb2ca36bb0aff493373bd45b9cb8956cdd82bcc1e43aa9aee301db33e38c425fe7843a0640e2eead36869566122930ca7ee094252c61553d6ab4a00c182d7000000b00483aa98b79de68424a07211856fdc69a4cc40944cecf9dd87ae532be5385ec5b8f02548a182ef0bd4fd477f15094756f1b7fbeddb4c268694c7e76bff5f4fcdce8ada77ebfbf1c22c77605473b00b7054ee400955ab92bedb06d04dd3a95f5f2ccbaa3e3b6fba47663ef1afbf4570c12da2a32339de6eaefbacc3083fe7bb91e93ad2c804d3502bfe88aa1b28733080115bdfc0d3647edd5f387e8c8a1b37b3209fb0476305e0333a200222b599d305000000b01bd4bb14c7ff12576b36220305ca4a8bfb55b888cf8b78c8818103bd98529d8250382378f2a1af979faae378dc553cd22fb45b59315467baba85cac9d76a107fee4c71a6c0c2f9e991d6d69128fb3336fe2a746c8943326e28930a1642d4aeb7b6d0f5fe211cac49952e9459b9f187b42f7a52d174d68181a43882e9c06e695fb5a621411ff2361d2127cd1a0f88ed1022fd91dbeda422db98e847eef3f7e0f621457c1b33a8bbaf349ab96ac88c483c0000021c000000b023c9053bc95ea43242fbd35d2d655035420e61f791bfb5c16d7a751e2e411c2092e791281f336ef9250cb4078ea80198858e208a8266826eb829853c8e59b39de1bc809e2402b2cd22481e8ff72c01465e746746554ee9873a328187fab4a8ac88d628dbe9e323a25d910a07f3f1fbe411d56f23bb4b74c2d8db9d395aedc72e8a4e3e904ba64006db5a9dd1dbddbe2e1bdf05725ead394621896834a75828817f20c291cbd8389587bafec6fb1d060d000000b006b92a03a448a93f3303d032a9492808d88870f3c3deb20b007da6cf99e0a46b521efb84faeaada34c04b2681dae64ff7b58ec9e5797bb59a321aedf3433e3b16e43a68d7dbdc24150f93f4aa13346024b527dbb762fd952c9d752939473416d0a8e0e69b0344dc845d8f68a88542495182fa8303f64196f6ba9f2eb54e30a49b9898b8b225bc7d997a6207d0488fd6d0d08b153aa0733d3969736f408806ad0e522348c4dbb623dda8011b19e85df44000000b01f4a6295f315c0383a6681159b7dc280624255a48ca4b45a1fe8bb782f88231165449badd698e03f8f2f06bffc410cc24b001aec56fa4a00670c97acaf57ab2e43831e2732efae984bfd5f0520f137d2d5c9507ebb0ce1bcedd1fb0b400867c371b16eb86861cbb4540692e57bb3a76d2dbfd9b60c2d1105d06ade453ee9a724bce9c5ee16bcfda66a95cb65ff2f8b191b40653baecbc5743f361510ed8c784754283bcd5544f1dd0747f11dccfbf3650000021c000000b00460e3e801b58afd8f125216a3da33ca8fbcb5c8507d8c56f8411bdccb46f136152d70c1a29a6a371f6c6b53eb4e83dd37167bbaaa61204eeac0306079901a2ab8f7a83d6d0751af8c40389800eadb0c57574eafecf388c3a0d47c1170e6cafd524b6394497934a19f3d6b65e1c30e280651bdc533b5880b71de971fc6ee1827483bd13c07f96cf6974bd587e9047aea1a93ccaff06277b44cf7a1add65554ecbede568a9677e403d2287ef025743997000000b016787709a80034c9dc0fb2f39f6234b047c52f3c160e640669fd90260b2eb2d2dea5524942937f032f21774a722bf17dec2484cff9eac716adb661e5b8d4198ce6e3b2b8203eedef4591f52d6d1642e49840dec7ff1a450f2f0fa5636b50ef8a84a1ec046537acea23e32d00143f4f062358bd51903021501573205a432d240fcf5cdc7df2da0377b27800348498d7b5047599ed8554e236c36f36a8b81868dee01ac54054831a25c28491b3a87284fd000000b02a2e52bafdffcfeca7bd1da085e893967e375793119394df95b6fa854a4f4236fd034355bdae04c4c9cc669ad5577fe9df8c1e6c14fab5f0a6d370b1c566be7c0c6e9b8cc1decb0cb90200217f8d922e2c68672676d34921fa713dc2803570139b25dffd2d6051a38c0f39b03a7da789201091033db872392c77b7385bdeec03247d638979a0459f1d9b4e3c9c108d4b189b006e11fb36707ca424c2d68b3c00aeba12b9cf5a85bbb705b72cf8a1bd9700000fa400000168000000b02d946b4e2bae3d0ef4007aedfde3fcf0405b8701d4a990d5ec700fc921052dda8319f59add5a35ea6b02bfa654dd65b83e79db2257c1f77c3d0b911fea04ebc10b2db3814aecd65cb91a5de5c022f730ac965dc2d5527a7a1bd3215b35a19419a776fb633f2d8b4fb5531c2249a4d37e18acd5c53516ec6ec43dd43ad7f6233f50b64968dfdfaa18bebd9c7a735fa4901590692d54ff6b2eb5a4c38d90c933dcf9a2c3358c290ad49859a4dfe1ab7ec7000000b029ccecd2419f7fbecbb95f812f44b1583c26e9390c896001b72e04270ce58bd419f40fa31048506295e7a8deeb13d357c14875677bf48bd59ea282b8a72a8ac0081d3aef56c47702f7c8548de02d704b543cc053675374535d6226fc4d995fcf31c01e025521f652368347b29ff4681324ac10216f60cc100217e5907d822edcf035dc242b4b4ea78f50e2c7a99765dd0f0acce997ca0c8480af38843e272ff670d2a070d862fbf9f4498414afb5abb500000168000000b02418964c5c942f2b374450a2ba919c7561f1cbfc07985473b8aaa144dfd277622a1377e6cfaf4b5b1c75ad606d16aa6dad813bb2d5d8adc5c9c43bf509a62a0e97eb6071623ac9eb5864a9ed6f88204bbb3c96a2c3eb4372676faaeeb595f961832e30477ac20d00f9ad7d9b92020ec313b3261b4b99781b8a1b28d77a03730d76931e54d7fe1edf5b140fb3ab57b107251888b8d7ded7705cba2f7966e5ca9fc158ea6713d0f569c663c0e787fdfe4a000000b01c3727083d0179f1e703cc844f9ec0b5ba486e8a66c7f2812ff61b95caae7888b2d58faf7b02c1f6619a1c37246f1bfdb6a45e19efb0353d159055d107bd35f1d1ca2f9dc29364e8061d8d7d5436b3b3780c3a7f9daad14468b6c3c8cf2a17d17a940cac5f2f06072093afda935f819f2518497f5e72b9a3a737d1ef81ec1624cd5c9040b28606b8fbdefe058ec10f37262e914474222771fb2eae95c8cc08263e88a3bfccc857ac24490950b9cdc0ae00000168000000b013551747eb0a06d3c7c509054b92789b00a9c398304fbfad5028696a9ac7a5c12675a74e42da650b2e6083bf79aa151d01f3ace34397603778e8bad2187b082de583be945d0f4f0a345bfc2fd6ab71898c78ab59b8152d691d6fade183415d3bc0b22aa03e2f1e9a31e6a0cc31c4d038020eb201a63d92e3aa5c5eaacedb2d26fd83d80a4138656813094fb8f2fdefdf1a2151c0c682eac499000bf30dc89899f9e8c4440e8e644486f8e757e2dec1eb000000b025124e0a7e741b07c7b50ccf541983bab609b525b4d6602b0e37040876fb588a217442e229df3c230a20cb2fac6c4ca60b5f00aa850bb73acb43abb73eff721d26609b896c5c96f2621d87f731b808bba9a89ded1187110e818f889bf939b7e770d47b2e026b28133f8e4e8f2cf82a3b27e270a4864e8003f0e06318ed0aa1c4e13f10d7c8abacbfa89165fc2bac2c8226573ac16967d1574061ade76bc2332db4d71dc70157c6ee1b36595ba5f42a5600000168000000b00909b65149b5c6dc7e4f37de9bfaa30856fd67966792b032a04b56815075c3cb82bc2de2af44e51a9aec53e8b9c1aefd26f921e740a362bcfe6c51b8bca3c7c79a5c7ef29e767743a03e3df6c7390bfeee6e9b6bdd5c651447b688e63c67edf95e4e28bec271b104073cb3ee0f48e30a24db70ed90f5ad7ef2892dcd71e2c366a87bc044730b25eceaf619b2fe713a090d0fb94e3483267357b22f70a2a084d940d287ae6189f40c1ad640979391c56a000000b00dba227e21fd0a04e80b29253e66aa198e50c1eea38075ec2f510442a3d514dad31590f4807aba77009fe4f92d6f4ef71f72c47f353ad5eed58437d37c6c17fd36df8053615f71cb2a19e32749fc9e70c6da58eefaa37251a0c412dcd948eb6e8b7779153f382163361440e8cc899a442d3c5e3767ff75fc6328305b2707af179bd549cc01f8ce959a436e77df4dace804d2b01dae4d63c25c5a3132ba6392fd9af984ac5b89025c744f540d657bb97b00000168000000b00a1c5328af9c347577966be4c14e9b9e5c6e589d32f25b428067cabf417df3767167d0ef1f51462f8b44227f49f82866e9fbb407b26f921f69b6732202925dedf204eaef4d4b6cd8c7c98259602fe92a789168b611e29708a19ca7c45af5a8de1b15aa30a52fdf919901ef212ec1f4a600463808cd1cd0431c43d261dd3d151103ae01e92c056d46c0b3563d19049d4c1aa160ff0184067c58329bce153ff91ef60e5baec643cf9e65117f97ff3f9721000000b01762a10c825d7cb9c2fdb8e5aa99fd96443ae6b3d41491b0f73b8fd17cbb8278b7960acf6db9fdc46ab6399a744c7ba0bc7bc83b51cec3da9f0ff13da242919d26e769c02ea6db5713389694946be608542452ebf9b8519f37e1b1cc9bde9bd3606b823541debc4c22ced82da312af2b2fb93c430f2eda0c6163aabf9ca716bd821f3d1dfccdb91f3ba1107b146b36781342374c1a618e1b7990a6d653c94824fd031f84ad47ae74099738f5acee673200000168000000b00083728a42461a163a0febba99fae3220b9434cf8bc835cb14c5581a5ee7219d9f831f2c61d207b8fe1c84b8d5258c66a45f1f7d366860f483973606f3606c467ec351c69cccd1aef5938fe81a9e2a88e9ac00994f00d3cbbd4839d7405cf0d002da0cfbe87cc8b7764ed89cc5d5093f19c353010e44935fb9c985d60f714d5231dca1521d790fdd3a724e949d6c5c6112723c602619f9d92928283213c6d11307c0670df46c004cccf01c402304b4a6000000b02b6cbd2dd0c6cc1e3888a7c63b8acd0b142ae0690c751a1a7fe99e76cc05171273565dffe2f3f17d27166630ddc94f9bdf1c7585e9d175d2ed0e3dccfe9c995c1dcc5bf33aeb17fa056b313c13a0efe9b7245f64d18baf5ab4e911224646acae7a4f037980371a5c9f385e710676643028009426f0a60a339e3eda0ea95442a69c138d9fc85797e58e8d0eb6a83c1c2e2c8421c6ba7e661d24a67bb28758d3e3d3db5f51a2a93e5cc0d3a2acc30476cc00000168000000b024cf23e0509894ff3f26874ca1ebad6ba645cd6ff738b3b5c25da45d0093c921e61d1709915d3762d5e3f79a54677bdf3b482372f3efb68084d5cedb62918ca38849adc2123ed07f83e0c9461b81f4712ecd81caf5e6650b85e37620eebe47ffedcdedd9c33970b5fc7bf8c28875d4492b46a9a0358f8414f316e54c243c3d50791ddc20f3a028ed5f7d848828ed6b372e9c0e30cf1504e589b66a7a59acb958350de918640e3b3ef58ca1be943348ce000000b01283f2db772cab926c5c2f0e3065d26e425cfb1d3167269bc087242188980f62c548466105d0f305f7316af310c2d08840c187b537b04eff447627f559ea164f19b5368cd75f7b5d7156bda8296320ad760838443a139585719396287a750faf64df8135e4191fbd40ec3639f46d561608587427ec7561a3693c822ccae7015879d4f740278d364b23398b872821ea9505182ae9b8cec485b7f9f2e4b7554707add275cd92f0e4c97611c70909a76ebd00000168000000b008168f9e17a71df21b009a479cc4ec7d725876fc1ff43d4e8876bac38b83319f1aac66317524390bef0be64e8d4c5f07fb61a640ae5674e79f27a582e30eecb1cc04e0a8efb1665f708a5d8dee86ebd281d5e3d951e997f9249dbd45393bee0ed890a2e4abe5ab8e78220e41f8f7c78a2d75181bbd109284a43e07bf37b0c1468e13b669177ca846f940d3cf2eb773bb04cc55379db92fe351ffab014ebba89b48ba85228fa0e115fa9b2258159bd6fe000000b01f8aa984e6cad2c76c94f857608de0f847e13cfbe6b807b39e6da24ab2ccb0fa191b91209dac1dbffe6c85ae78da7e4691e9c764cedf69005c79ef59deca26a4f35c0812aa9653a447e33c4a9c89a700ee3d0a145581236cb9b33eefc84902e927f39d58ba7bc0cf8cc47bf7d970ea7f0e411fa2bee5ee9b765fd0859065317652a01fc4b3d672fcf2c2b28b2587962926a8411ae2e776cf89310697b0f5fe52e9d775b8e52387ff85ee1c8ab1c34b7900000168000000b02782d9e3a062692c0dd1eb2975979cd8d321fd18168cb02281962a815047c94395b1e54096208061ce8c2796557fb1b0eb91da6518d6bf7f1477bc188605194b36f28d797ee933393e0ee75209586a4298d105b82b260895222842dfaa89f14a33bcb293c583dc39eee9a631fe84da80083b41159d539c921000505de0d2d51bc1d377f35102c560cd8fa5b9a896bf27094946232ca9de261ae964a305ce65211528e2666886fc9a1225f49b0254bb1e000000b017d62a6e89009cd0971abf632dbdc36ac008bcc1860c3f6a0e3998ef4a0ae39e17defd1030c2ec6f199e52e14e3e3ee0d0ab480ab6e9e2babbdc64196d712c78e35101e1efbc784ddad18e76da28790e76bf914118c4aaa4ed4ad7baf9a3fa39d6f8d50e0a9d1840f123de24e46699642fe4d34047765a55470a3fe1a4b5babd05c20087edade6dacc8a9cc372bd9a84191f3a56d04b5d06b176a5b8e5d6f6d418789fa7a736de967907e1942af4171b00000168000000b012fac7044863e8b0e47f27b31ba187c5d1f3c0a08166e5ff62dfadb575d7d27878732503d38be2ef539896bd75a358cec40dadc7b2ef38b1587bda7aa3170045e30f1f87552b5a8b6f7b0314f17dbbb9d73f005e862e3b1eff074ca1507a9bdabd40a98b8ecb51b8a06dbe23a3a7574a2651be7e7881111226833545cf7d8b94bc8ac16d8198d8cb0225a497dbe5278a1c3bfd0b783ee5e2bc249dc2c0d2c199849645bfac4786139a60e68678c92ded000000b013288a1cd8e013e13874f1bdbc88da037b582b0fac3ae6bdd95f844c735c901a0b5f68df0958e32212abcf49eddde58369838b348117ed55cf824e1735af573d9ee74b7a292e7dfc076c4c033e3f06b5c11a7f5cf71353abc7eacb2c5cd194bcaf1e172d629c62de575e3f37a54bbee711aa3ec5f8c3113bcb887613ddcbd0ebb0dd74e0cec904dea6902f06a40a4a831cb00efc721063e01eaea95a7f55d99c0f1b6c1a01b686ad49a264ba502bbec900000168000000b008043ad9e5afd1fc35b24bb875a13e186ee547437bd82c63a2becbebd38869c6174e4fe7f798bb3cf3057739993a8b027bc99b36b34f8583b9f80fd35fee876110d044c27adc942b18baa7ca602a03141529fc2a97e6bfef42894d38712a1f0a6ac79246fa3ede1a667fbb11bba7113b272590d2703a6505c1fd92f1670b463270cc1517eaca17783a00270e917023c71ddc67bb750012cb7ff5fc5610634532c2ef92d83078f915dc83089409a86b31000000b002811ef51db81fa0636ada3375f29b3669908703add2896cec35a052db6e7e806ae8661e888790f6a88f6cc93d316fffa48d4fc7572b07b637440d81315bf5fd911679dea7a1aae9f4ff2b36004ffb1013c494d1003fd882d957380c0f5509083fdcc3f4cd4501da86bcb8e7cb8bd61a01de700bfe099acc40a7886e174ba921b9c3d3a533ce584a274b3a7bc3b01369161860d5504c419098290641074cf870d11bc6485fcd2a6852769a6709d57dcd380000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000001820000000000000000000000000000000000000000000000000000000000000183000000000000000000000000000000000000000000000000000000000000018400000000000000000000000000000000000000000000000000000000000001850000000000000000000000000000000000000000000000000000000000000186000000000000000000000000000000000000000000000000000000000000018700000000000000000000000000000000000000000000000000000000000001880000000000000000000000000000000000000000000000000000000000000189000000000000000000000000000000000000000000000000000000000000018a000000000000000000000000000000000000000000000000000000000000018b000000000000000000000000000000000000000000000000000000000000018c000000000000000000000000000000000000000000000000000000000000018d000000000000000000000000000000000000000000000000000000000000018e000000000000000000000000000000000000000000000000000000000000018f0000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019100000000000000000000000000000000000000000000000000000000000001920000000000000000000000000000000000000000000000000000000000000193000000000000000000000000000000000000000000000000000000000000019400000000000000000000000000000000000000000000000000000000000001950000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000019700000000000000000000000000000000000000000000000000000000000001980000000000000000000000000000000000000000000000000000000000000199000000000000000000000000000000000000000000000000000000000000019a000000000000000000000000000000000000000000000000000000000000019b000000000000000000000000000000000000000000000000000000000000019c000000000000000000000000000000000000000000000000000000000000019d000000000000000000000000000000000000000000000000000000000000019e000000000000000000000000000000000000000000000000000000000000019f00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001a100000000000000000000000000000000000000000000000000000000000001a200000000000000000000000000000000000000000000000000000000000001a300000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000001a500000000000000000000000000000000000000000000000000000000000001a600000000000000000000000000000000000000000000000000000000000001a700000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001a900000000000000000000000000000000000000000000000000000000000001aa00000000000000000000000000000000000000000000000000000000000001ab00000000000000000000000000000000000000000000000000000000000001ac00000000000000000000000000000000000000000000000000000000000001ad00000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000000000000000000000000000000000000000001af00000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b100000000000000000000000000000000000000000000000000000000000001b200000000000000000000000000000000000000000000000000000000000001b300000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001b500000000000000000000000000000000000000000000000000000000000001b600000000000000000000000000000000000000000000000000000000000001b7370000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b60200000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000381100000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000581000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000582000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000583000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000584000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000585000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005860000000000000000000000000000000000000000000000000000000000000590000000000000000000000000000000000000000000000000000000000000058700000000000000000000000000000000000000000000000000000000000005910000000000000000000000000000000000000000000000000000000000000588000000000000000000000000000000000000000000000000000000000000059200000000000000000000000000000000000000000000000000000000000005890000000000000000000000000000000000000000000000000000000000000593000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000594000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000595000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000596000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000597000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000598000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005990121646ddf88c49342087fdb65b3c93f6d9c0bde5d6a57cba4cfeb51de93860cc900000000000000000000000000000000000000000000000000000000000010800000000000000000000000000000000000001081000011000000021c000000b028af71e3cf39b6907d2c040e7edaf822812677748a2c67fa76efb2ab698fe3f2823fc7f53ac6e00999e105bf8f2c3ff4e147f4061884dad80d638cf38508ec765a5858b1f37d302e8bb87f29d97650d60a97500f1099b1b31e87787d9ce79dae74004b3bea953755228a81b396bc48b114cdd89c303ad6ba4a0578683df5eeb5980917d15a78f60b0ca90259acca9a510fe6b1a1b0b616e5b6daa0bb49df341af3c1624a66fc9f13a0f9bd067877074f000000b01590bd33b113f4c35912d16531e3e3795ea7d70ecbc9c1e141d421902565fa266dc3e6a250a7266dccb91536275394ea7e1885b28ea49865c18087f163820e48499aefab8ee869e77046db6559d0167b7fcbc9d1e98e728d1e50ec05dc7eb0bfee78b115e76c8d23c2f02b255ea535de23f1e8744a59bff8c4024653092421ea11065b1b3481fd1356d8844826631c0227fddce690c623ddddd6d2a5a4f43eea20a863a7878105cbabf70bf83dbf745c000000b01d90b229d7ee00cc66cc79a0d3eaf5fc10865c8589d5b6b5117b8e416a9afa7087e98137636994ff2b04c011656bff9f61c2a7e0410d5dbdf6fb052cb9198fd55b124c6faefb224577e7f639a7a2c79a5526d624948a52da1b8327cbf82f9b20121f7ffa20b2d3bab92e107997092afd27dd3dc8029857b46923cb955259726bfc52bff332115fcd1088de24415a8ed80d79cbf6e979fc68dbc563c8446c5b74db1e753630020bcd9c6646d979a402160000021c000000b013d723bb65b13a316680d9bcf15eae685ab616e0bc827a9c495a251defd1d132a36d92da8d014b48e8410dac23a5f9bae14cd6ec992e31a35bb79e34e1922b9e86944d60849e0f7fcffb320af9ee52e7248179c4c79f716ad938e5122a5c39d64e59ba6c38e0d96b4503a95f37140cdb179dc9c94a583494e5497e16a97af3bcfc7c58b04d6d086f7e7ac621c5135efa0cf68d6721626ca1edd2cf6c1b1a7c4198708499eeeb4ad1582ad5ef0affa04c000000b0293c20cb48f70b53cb37502055242da70317cc6eec626a4dcc78408f45288f622c88b3b7bc2619014d8451590037f12094c56a8d14ef6894ff7e48ac06a98a4d17e963e1d4835cca15cb3eff6522fd1c86e7f9add301efaa9ca8dcf62adf6cfe9cf8fdb654cc74fe2bf16fb2da89e10424b629725ea17c66cb040ef65cc226a0813a0a1c02d278ab268c6369ae6af5b21b1869b42f6afa0bd63f61d2535b7c41bfd2726edd5d32762223066192997ce4000000b007f01c1ac5bfff29528225ac1237f36b4e636c320cb23534644ec55dd5cac984a945084a4640bfd1000d970c9a3aa1c5777b8e138de0cb98f6d2ccab3a1b3ba8b455f4f18c9be682ea3b131f42bb797b0768bf018d8bc8d326cf5a40c08aa60f0011926d6be03141cd8b3af79c0bca0117c0361d01d5cea076c8f9c207d3be407e346b7575034c087cb289e9ce1cc1220e070127b77f6fb818461bff10d911235ef61b9d6ded44185fab1a8e038cc2330000021c000000b021467a59920dff95a1220c135cd30e45f4d5449db558b205d95c14cfdc2c7ed910aefd73e3bc57281a099ea5f4c5f399aefeb2421c7259a0f333db7de19fda6c2b4b9fe4269c5475dcb42083d8a9e12789f1b95ccd639220707ef84a6cdb1bf8a561d9bada5c72bedbde441cdea6370a1a7bb69f6ded55769bc912d9b9ce7eeba8f2dae87a71a35b07415855a34b43c80dd2eff43d880a10f809f2f38cea9c2d76440783b62674c5bab56c902212f427000000b0141ffb153cc8a5ce07a5656e6d5e84c4f925bf01e053c11433131d04b3a0627490c83316b5edf3f9a803a90710a8207530ac7327c297850558e66268e7095686da0ce22381dce9f9afeb9de9eeb931e1b30b9305df66919b70c5e484a1ba42f8d2bc10e0e6063d01f9600b519ee42079171964b264531d7c006e20b6bd2107b30ec797d251d93b7e3b722b857acb2af6113ab79f6dd087d44c3494d73d93187905c9ba498909e979315adb52e4537490000000b004c5b23dd37585063c4374bfddcf4724ffc64702ef216af8677cb2f7836fb9b7513b3a8a8495146fe58231e67dfa124e7bee22de16cac980aad13a28b98240895f13a689a9d3308f437ea593be962905f5d0d630ee08c0b37c2d5556121de4589ced2892ff145e4bc144d2167106fa4c0f9d090b938548490616f067a2f8681eee4c2b642dace80f9d1e37f45fb20ac60dab28514723c18ae7b0b2a5f5839c78e075443f177a2d6838f05ee202feca930000021c000000b01b7d5e6fde8aa63e2f971770a9f6a3410c8566e6b8a8093db748bb6bed7c914e80aca52cc936572242babebc0a4db3fd49450be0f953ad662a2781b6b8e8f534ebead19c7f147eb2f4f4f2253c9a783b3a7eef70fd05230a214c6f71105def66ade26144b1b06284a124639cb3b9aa81107c87820000afca291394ab630cdddec1935a8dd06b088697b6db527d1240dc0c7f6c14e4abb522dc72b5fb96f3f41a63883e48ff1e1b191128339f12be496e000000b00e5584ce46829013f30591db40b83c0c74f2661741f9775862b357b6641af8f73d6c28f2a133223f68b11b565aac8a40323024138e14e0c0ad1e9a62b7b0d9812e903470a4dec13e2f086a2eb37f8be013d22e5cb34d2177279df2dbfa841e4b10938e2b7de00832dad1deebb35367fc27accf94e799e75645746824eb55472231f768bb9251303d58f85c3ad93f53380d70b515a16c763ae87fb5c865dca56213da3c924a02d86238c652c51d6dd711000000b0242d5aa5c2301f646f26bce897ae95db1737360796a7b6238cd4fefc113ac2782331d4e0d90393c5ad030ee0040999cc3bdd7f8711309ea017cb24491b1f2a5bf8f2b91569708f9de6902e4eab5b97cfe52037051e00d77e5f39b379a8dda51a77af3c010a305b18fa6a589444ae47941134a90e753c5605d25ff5d999363d57196d2917ff23d7e601708d28a5d76899247c5fe4d8e6940998dd55656c7c169715a76dadea02b3a16667bda224eb445a0000021c000000b0111bce86732d12025a7b042817040283326206402ec03b1f7420b1a060da3a8cf42e62546d5e92781724c098ee8c43f28485d71504f3069b57ade358b63f8ea8677b324f2b5a3267859f9219e01def03bef5d1824fd9efb1c4a5c3be3a3e846df81e07a1925fe4b25524efaf0b247a290d5a622e4373b30a7e048a662383728699b2261f98561f1827a40806f731ad3e287ff3618c0916585361689dcb937fed96b64e8117cd78102d7a9770041cb9df000000b01fbc505c0c49aeda9899c1c3ca095600e9d668ad0621156494d69bdc3d37b8ede3c1f2fb358df02276c77d950064f469c1d28c7dddb9ca8a8f9da800c7b3494b621512aec38d625fc0e388089a515f3a1f7c77c784bf02bed456713da33862bc73ace72bf77014b10829366d72f5d5f72d9a1859526053fb89901823be02155e071f1a529439549c4438c64ef648418409642745a9353ac95d04a5de86f00d7fdc9876ed305fdf825e3e8fbd5db5a391000000b02320939a4b967710515c9878d09ad807e61bf260736a7af5d874465c9cb86192c818776390ced5b86e38721f8e69d67541c33f0e0804e7e3e1c3bc86423bce952d817e8c0af61ff7c9b2973866f1abdb59179a176c2ff6e4b481fa3ae8a4fd954ed46b9be4869c9cc397a4e99918c1c02b8ac1b9d3de72262d0ab87ee985b7477cd4246c842140fd832cea79a9e92e050b578f38ac13740b910956bddc15ae5b5a06b85f89ed450472018a3ecaf8179d0000021c000000b02767677f69d12c1b379686f3ca00ff76bbbdb73cd14169f8336046f0a8690fd67776465f5231b1b0fa2339b9d5eaec6dd1067fa65bc1addadc1624aea975b38dfcaf1d6bdb86a2863f767f2929d1091d17e0999b9855ae6646c2e460a2677c158c3211d63dbd43b552700bfaa70ca06423011b80ddbdb50bac729ade36bee44bc42cb8bd1e5acd190ed2b4368a7688a8043ce2e6b72f161ae77fa76ac6c4e1cb34888ff376eb8ba77c15d7920c3c3549000000b01d721a62dbb8b9671e920eb69af9675eac818c2c8066e2a25287fecfbd4f034c0740a78cd5bf6285c9f1e1c1da293eb1264c302c082c2b24ca87a261cc039329e1452edfb70184f26521dc31035a694c8e106ededfe55e33eb445cf88a52fbdfffa350b5a39f7d825394c79d5e719af7212e6e717260c7c86c0f9659af7c27649bc059d731014577bbaffcf434ad0a2a2ab1e69770165e0592c8f08e1796e8bd730dc7c35a97edcf6ed14cc394231235000000b0099f04e36e4f3f7b8c2928fe57e5a5050a029ea9b66326b30167dc533d9bbc54cbc2aef43aef01e58467cd4d3161b18e41e4dc1c5457f78385db64a3779e79818a8250ccd331e8c673cc61e6d08337a19a411e8265548054f30ecc8c2ed9fdb6ac39fd5c07dae7f8cfb94fa530c5c00c203abdf92de2e4eef5be94fcdd950ac0c0e0a5e26987e8c5e5566d81f7140db116fa0b90e2781cad2317d53e949095a1b05e9eb23cdf18dce60e70457190a3540000021c000000b00812eac67910abd48d458ae5ba6e72cb0fd8eb1bf18d5b52d06e88c6c9189b4f06c5fb43ea5461c78d4b6ef1f4e59b25531046757f58d88171c3a47f079b7f8ee7beb26d398cdbc3b07f9a3cb05dd5d99ae4721b382c95a7d710d2236c407873e7d2e28a388b68931b52b6434c37cfcb266c88d8cdb85659a598193d0f5a3d25084dfd95d07befd75b29ffe1031badf81831719f3f49d5dea2ef8763de8f3da22ad28013767808e842e660056c9407d1000000b00b8c389e50f6194f4935a93f1f69dd5c7621bf625f4b951afb8cb8f6ab346e670aa615a5ab63b33b4706ac106495f3a0f315837046f314da0875900866b15c8f5baf38e0b03ea8d8988468f1a6c2798ec14b8a2082f18b3a731b2f9aeaebe27204fbac7ab4db159bc69645ae5570cd762fe3a1d483479dc015afc8d7edbc93af9055a7c0940ee7c1c9fb877c00b66c1216fd2592549faae6d644d5547b5535d28be9892a8d94844a30c31ee6d802d8cb000000b02a5f747dd67a94972908353f284f63ccdeb9c5456a065f16267abed064f07b8c3386531b922ea63503c47267dd94f41b2e20db0e24ce29d824d0b197c463d2a1d8c012c946ca50d9732f38f97f35d6817a29a857f6f64703902bc64a05a57967f17f8804d0e3657f5347d8fc2c55762627e2524e4bcd4505d1e9fdfbd981fab793a53d6fee2ea3e35dac183bd6c135cb23b8a7d308c85a39d5778dee434fcf55607b8263e73630b9b49e61a1bfefccc40000021c000000b02236a683125b651761790f86824677291184078f9f78a58b8002bc26d9a5dfd7bebc01e6a46d8e2c295b844436a1412ccffa1c23d461f0ac6fcf8242efad0408b48d3507df34ec230bb575a253af27e29fba934644991488a9d0ef030caf0c2d66703a08347880ba61d74d7e549916b80ea1b4257035241c7ef4616cc5c71b2abb45478e2295284d4e9b1e821b01fe0d063973c93f9a44227815b2ce2ef49b8712b231b94b8d7b0d7993f6db43a3a910000000b0177232976d2132807889472788a18394e9de0275a706ad66ae9900b77b7d5a9797499a2ef3ee0d904c41675379a9356e0343cdb90ef60048089f2c6965a835df322b8bab15186eef17b208ee8e1781e3bbf1c012f6c748e4fe1ee7557613b329a1692040c81db1994ff6fd3981ec580d27bde001c7875a1d3f4df0b37d016827eaba50c183aab6b499f0946e3a4d13232f4bb4903b739b8f8ef6e1b428535006e5ef5227f005850dc2a4fcf7f23f76a4000000b00050a57758e773bed114d603f92db4ccd35811f756265e412f4b3867327b19d5efd179d51b22387976cf9244b3211657a5582a69c79d853e577ded1db37d6ecb34e83a8addee4c8ee1a66b38c766843e93b27c509e9e56316b4929fdfb59816bc171443b9b97a05653315ffc5b3a1a9106a1bda2f1c958efffe4c01c83c38fcfb095c8888181ec9577671d1adf35f7a42966014c2be242f0cbd54a01bbede9f5d4e988d53897341e2559ddde59f26db200000fa400000168000000b004012d1bdb68342a9c25ff708a2c24c8ad2ac5cf891292879b1fdaff81408c2188be968777575e96452fe58e784369b0c0ab4e0859b9f4ad3f04539122696a29c5295eb3b66dd9a565714f595a2e66281a4d70f05519347b6a446468f90e53e35206cb4658678b297fddc4262042929c1eabce3c5c480830477f78e081285cd9df6624430e897ff3644a98d99e62e3c40544ed37d456c0a1aab184457d564feb996f37d9736bb836f21dc40210ae937f000000b0001cfad969e044d24ba5b1e18e9df1bd2ca06be44faa9b85a89cc173f696506194450d4cba96300f1313ce3a39ce44cd0fb0444036afef9e7652c7ecee2961032b3f8dccb736a8ffef83374580620a421542763809c031428136c50b3520401ae329273f14dbed0aa6afa05f27e2600b03616f5508ebc44c16a4424d65ca33b5b537282e255a0aaa90d0587805f7ddff02a7609824a7f86a42f6b58e59f463a538eefb8fd848c0166422a2d4a0fd352e00000168000000b02bb6ec3e8c9a24332d09a72028ac7fe45df4f152eb0003c03a7bd9b152b3eb0c6afa5e65df98e6b95c1a0c09034ce77fb2b0542c1e5213a4f9e411fa0931f6cd15224fc7af4c276762e6f9cadeea5358df1c7c51d4c5a0d33bbfc57dd4b7dc06fc55a68535513e6d38cf6b0dfb3726f81282ed3942002680882d1451f52d155d010a9fb0cf8298c6f0341baa0c7d9d6d2960b7c81fa009011e8aab47134cb177c60493ba204c1027bad33119c2dc791c000000b006de0dd7f8e786a7c8d4150ba09eb0e9fdc4ffc99ddf6c9eeea52fd3c0c353ea20c6c18c479bed3de363d34de7080d6df23f894cd84c5c6d91e9f97e2495739a775e87dbb36aaad505f8543dfa475997cd321f382b00a465818df78a39a3f0d32bb25bf121de71252bcd8f98a8eaecf92761148cb09d71d60d6fd1961631d9f07953bafca71d6c97cadf0c3a3b8fb10026c0eb777180ded3be80f3a8a0cef59b21f00957ed38a78025c34dce1983404400000168000000b02940e2c09f05ee629616473451fc069c6631b906661d7d403787fc1a58060dc9162e186f20db214bd3bf2c1cd87226587363d7feb99ab4e2456c20f087a2c1b10feca95b6f0a999168150f36824b9b92907d4d62b9a4b9e21c68b6678bb9256241ca88b7e6ad51a9935cfbebde3c654211f54596bb42e0352e8cc1d453fe8ac25bb36401da77abaa85630528edd169e11aa2e1430a4ce48fffe0500900e873d4a8af1f20eb043a9abaea47b37d301390000000b02396d4625a310caa70d01f1bbf29d863825763da8d1f0c5774fc49f53df5b85f31a7d75fe0c9bb5b4b82a7c959bac5a804c609fb40a0088cf1b3092ba19fcdf579b1810aaff9f07a8ad0c9a79b5669bfc7e8a5bd2cb9f5de7dbe5618501f20309d97a5967027fcd460003f78c66674b40dbf7214e13aa330fe2bea3aedb358d99c75d98244700ee0056184e7845fe07203c93da515c088435252f715d228a4d2537c664ea8bf46d9ada1b3a1c5bdc7c700000168000000b00ff0841351483895e108492cffe28e6b2d8dfa8c4dd411ed8ec2648420ab1264aa59a8dbccd220999ef014e3b63fe69a386cbdc449317afe482e5cd116ae3dde050ffb4bfdc68412ea4f96f1ba6ecc757ce97a4a0457c1263f7e4ef412f01fd3ddd802511d38110b25faad8ce723311d126966b05cac14f654219e2c514cea74e5787a2cdb7426ad01f0f9bdbfe49234279bd837650abc6e5beba2ba0b1dddd33f6605baa3c7c9a753b96bfc6b95fedc000000b02cdb5619e17e313c26b1ae9c2fee30c583df4a29536c649de3911fbea3485cff3a895d4731510482b5fc94f3897cc80e421c9cc6270c5952d6588d26767a19c42696ffe4717ca89a4b0408754b47dc320d968301a205a1cbd639e24733bc9c3d86247649fad121a54c95a3552bb3cbd1302524ed3114dbfa5828c653103fbbf5c5f0cded3194f6c47ddfa5ba8063f6410d6c288203e7618069a528d55d09b9d6f60d01f5dfeb4e76747d9ab67829e1d800000168000000b00f16bdc7b3b4d0f491fddc88d3c35a6da1b73da7e1b93fe4f536e941cfb38fac227778909885d6b2fcda6c07b51593a4fd79c6fcd23f0a9a22418631248879415fdc49b57ec5d049a8b3cc529631c9461e93416dda8343ed46b79652e571e328b189b6bbcc8e597585ac308bbe5fcd1813a6baf8219bf9801903ad21ab14fb5fbcd9efd58940c5e2ae12e95df0aa18400a8ddb4c26b408ebe28d7aae4ad5a12e0576c0a0fd578ba4abf2a9c3ee885dec000000b01de650c0e6a2435e12c94ffcfe4ddeb14f16a75283e74f4439e7ef499334771324e68a8bbf0c1af727a459b6770bdec08ae76cb9b9d4283ac1986e64a493e8df9668fa9c9b58d7415f2996858c185721b0551457fcdc64599246daf7e56ff19c2b2a408897d99f13d164a3481439e0f31afc9608e73a27d2677039cc7abc1cc29a5768c0232011e4c46daaf01341881f2a309f2d150c52893b00503753a57ca6e7af9fa0f1cef680c24193cd0ab79efc00000168000000b001ea06cc58d688d938ece274eff2581edcf09e82e89d82bf5defbe4d28f796f76a18e78f900b4ce22cd5cf3900e1f14a53790573c0799e51725ba1f80427fd2b2b74b566431a68d5bc0f86d26dd10776dd60f3ecef987778a1a887ee57f8baa42bc2ecde2ccd9ad44268335f7d8e15bd0e135726c3e9cc4077e59daddddab9537ed750b84a5c6696a420904fdc22783628bed1f544d196f27374a067ba441162cd619dd8d88c47e5cbdd476f1b7fd63f000000b026811df3f9a0ec27b6161b4e75edc04c121c792d298ca9f2094d5e50fb01d68b173b9bc4068a34e098b25fd3de954199227ad2c52805b75c1c242ff5f3644be399fa21a532345a72329f4efcda351016f055047b7e82c9e803ac83981ca337dfe80c5f3f0a1d73e7fe8ce16f576db6070ec0340703b9c16e239bce7024cde8ab40e969f362e877560301ee9dd2e4f56117785f56414e4b93113d3e24d5630e7bc4e2be9acf70a124125fe5c30a9d99e600000168000000b0131eba5286d5b8f9e21fca8987192b742b2c164a75db3411dd0caa39a16fa4d45c352f33d5a1c89ae664e9d4c6658661c65e181301dd4a0ca88c93a507dc41740799514456c4201e3f28c8782f9f00fcf32c76e612ddbdf1f4dd1336c6653f4c396100223ee734312dfc18bf2c93a3010580092066699b4a2505c8881be5fef5e87ca98a90ef07b9559baf592937bc061b6e901162a602805f72b4a3a5e4d34d2e8d8a3e26b4c9a6e398d8ff746bb60d000000b00c7172f9aac16269cea7563ae94d883b18639c636a242fb57dc5f6afaf73edeb25eb6e0d5b93923cf296f5df2270cafeec8d1b59db99ea96763c7f0f73f8718f46e63e80284a0b0577de171fe45d28c6824807f5d2dbdc9a47c17b18db9d6899fd35f809fa183b4c8ab1ad2fcf83b83e0257a00c227131ef15fec26b9dbfd4200eb595e05768cd101131c6d7175b19081c419188e1a1ad1ce1181b6cb21e65a00247d14ab0716cf413b66955745fa63c00000168000000b006157e0e36d281ebdb8c38d7456a0351f27351bc25efec336c4538ac0d8858eaf8a51009fdeb100b43be5a487c8cff21414ccd5e514d3ee40fd63c0331c5ce336e86cb19d27ecbb0660b5663aafc27945786aa4a2d5d93b74d06baacb547b030bd4ad8babb559952e55f95ffd31cb6f01ec7be1d841ebb807e37d268bc7b3b69c55bca85847b01a4fe7f64b99a8270ce2216b3ddbdeaf67bbb3becf6f1e039e5fbf11aa9a4a7c1f5fc2f00c8d1f9df46000000b00b0990367631f90cfcf04068b0c1c2937abb4aec14c0c68c0740ce3047af4734dfb43eceb2b66baf1f8eac039f2287b045b763ff9334cafb317c16a7686cfa13f586a561300bafebfc02a26038c11b4eef3eca3a06b66458849cbeb4d9111e1f52299ee0eb90c4624fbbe7fc84384ce0133a608ae182af2e9cf872c80226745cc8e3896dc404e7d154b9c408e6993e200a80f5b63a4cb53748d0e437c058ba01391652188fd0143dbb8ee2362946c05800000168000000b01987d343e23ffb885c792400a41254ea8a6f0b24489087972e5e56492b3c5e4f031d0f0149af777613ef63c7f22b7da23ef67f7a70f289c0891b00630934d3804c1dffe3fae6adb528a9cd1534692b175384378d882585f3f029adfe93fa39189f7163846096b6c931e96f46c25968672fc75cfec4d9157724dfd0f24862c5c6806a7727335e52da52a56f4f84c075fe211a26c7abc9ce508ea914d17a32ee04f6bf1165c1fc5cfaa93f8395b9206445000000b00845b111ceec129e3b8d1d12916d0e55fdb47b7d4a974291af352d8fb6e3ac1ff5946415b887395135e87ec88b063fb738fe3fa560143c28a81a5ed2d6d145f570f5a8e970d79e2a50f22a237e094076a2779704375b57fca913524687109701dfc68c24f04406b2de556723d020f317174e0099225dea53eb373ea8e894e22ffda7f3e83c3396d50988c2e251deb32505fa374d6be815708bcf123e25df2f6511e8868058692ce86658e655fdb56e0300000168000000b00e8c0f6172dd78e3e8c40b7c6a34133c8b0bd2688a3ef79dcbb29724a2bf22da32a662af7681c816adc15b50713d212679ac0161bf472987a1411e33cc55bb2af7a47d214dd48c2b987447dd2ff636e14ca75ded969a72f8dbfd884cbe8b5e2af518e8d802b2f21e718383ed5384bdfa0ca9a100e300b43760a851cd75ec082d0feef9f444599d28c5e284d2b7157e53042a47ed15d59173472cf5a577adde20ae944ca2e2b469058fe2b2df9391143e000000b02edf72a3f6ca639e7c27b2b74ad010392fbc9a23528eb3515b0885f5d7b2ce448b30a3626edac6c349952c1bfc22131d32f7ddf8f9b265be42cd2f3733c13f69c84e7b9b1451c4d5c4d3b38a42b6a0ae7770bb03fceec01cd68b4fc452624471b32b8dd17861edc0ce7c8155185578550bf76f841853a0bdcd3cfe5b6f607e24a3b7d91c89ae36be25385238390d58b72e9dfe16cc0324d2bad3ddf3bfd2e725412cec7d2b2e503b62fa99a8e9a0ede000000168000000b0141e6f2e46e53b2be770316dd8df73a1d40ae0fa95503f2022fb20d78db1989b164afb30ac73e31343e6d40835f2ef7526eb79cd4fb82405446f25280922e2eefa1f0a301ee1da8fc08b154ff2877e29a0a833c367908ef0a806fe30d8a5b81c1fa1ffe97e74d1f9704b85a30747011020b792eb95265ef02e53e87da6fdac249934b73a0f73191de5e3c7936d3dd28413e451199268f243d3f24e88fbbe75a61f9b2e28080e0c933b18e7a814525d3f000000b013faa2680c0919d0e33f51bd76e9cbfe5680e94b6013d5fb581e8205ce188269b4878822df360e59015a691029f818e10d56574f289ca05ad8959f3ceedff324e1ad3c9554c23e255aa29eddaea38e36aff9361578d84a18e515e20d7383865d873e57167061f3d444dcab77909fab9d1b9ba933a49d806d701123c928c94ac8ca527874be2d0cae0675ce6666a77dbe282b35da604b47e45a5ddd7c5ff4f904664e0543e09f2e027af1460c93f0440d3800000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001c100000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000001c300000000000000000000000000000000000000000000000000000000000001c400000000000000000000000000000000000000000000000000000000000001c500000000000000000000000000000000000000000000000000000000000001c600000000000000000000000000000000000000000000000000000000000001c700000000000000000000000000000000000000000000000000000000000001c800000000000000000000000000000000000000000000000000000000000001c900000000000000000000000000000000000000000000000000000000000001ca00000000000000000000000000000000000000000000000000000000000001cb00000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001cd00000000000000000000000000000000000000000000000000000000000001ce00000000000000000000000000000000000000000000000000000000000001cf00000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001d100000000000000000000000000000000000000000000000000000000000001d200000000000000000000000000000000000000000000000000000000000001d300000000000000000000000000000000000000000000000000000000000001d400000000000000000000000000000000000000000000000000000000000001d500000000000000000000000000000000000000000000000000000000000001d600000000000000000000000000000000000000000000000000000000000001d700000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001d900000000000000000000000000000000000000000000000000000000000001da00000000000000000000000000000000000000000000000000000000000001db00000000000000000000000000000000000000000000000000000000000001dc00000000000000000000000000000000000000000000000000000000000001dd00000000000000000000000000000000000000000000000000000000000001de00000000000000000000000000000000000000000000000000000000000001df00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e100000000000000000000000000000000000000000000000000000000000001e200000000000000000000000000000000000000000000000000000000000001e300000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001e500000000000000000000000000000000000000000000000000000000000001e600000000000000000000000000000000000000000000000000000000000001e700000000000000000000000000000000000000000000000000000000000001e800000000000000000000000000000000000000000000000000000000000001e900000000000000000000000000000000000000000000000000000000000001ea00000000000000000000000000000000000000000000000000000000000001eb00000000000000000000000000000000000000000000000000000000000001ec00000000000000000000000000000000000000000000000000000000000001ed00000000000000000000000000000000000000000000000000000000000001ee00000000000000000000000000000000000000000000000000000000000001ef00000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001f100000000000000000000000000000000000000000000000000000000000001f200000000000000000000000000000000000000000000000000000000000001f300000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f500000000000000000000000000000000000000000000000000000000000001f600000000000000000000000000000000000000000000000000000000000001f73700000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f60200000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c11000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005c100000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005c200000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005c300000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005c400000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005c500000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005c600000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000005c700000000000000000000000000000000000000000000000000000000000005d100000000000000000000000000000000000000000000000000000000000005c800000000000000000000000000000000000000000000000000000000000005d200000000000000000000000000000000000000000000000000000000000005c900000000000000000000000000000000000000000000000000000000000005d300000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005d400000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005d500000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005d600000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005d700000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005d800000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005d90112ed2e4b38f6e75420101b372307b3d2f38c00ab0b31792eb6f350bf881b71ff00000000000000000000000000000000000000000000000000000000000010c000000000000000000000000000000000000010c1000011000000021c000000b01e5230189319f14ab0efa39e4b60d104859784ae68282f85c8e52853e303be387fd1a9bbc3447c87780b37c8509cca3563d0d0f653780288094f51d24f41a79356933470652c7e0f5191778bcad0134f70bcc1029e49cfde87ca163f88cc1051693ea0c26d6021ee358ce60d1afbd8d30785b0b9536aa12e8fc2bd70d1ca9b9940fba45bf539d45037d6f48be97cdf592b908819c0e35d1f14a0d5129014c6c8b5c4ce351ce5f4e273a53cfc98731154000000b01dc8d9999fcc6ad54f110f053fc7228f3a0c153946de89dba66100da614a413a39e1b52c3f8f2a54b6ef4ce6b9adf469ac3ff4223568bd4631c443afcb7670e0df29726b8dfb8c34bb572a2ec1295e597840f204996825768e6e4cded44c3371ff52d008eec9187c53f269e973dcd3ee26cd4136515041f19134677fcb060c42012edd8b8a3a1a44d5d49b6b3128ba82161938edf6081e776e0564729fe9000bfac8be86c61c2d13331f66d93873bb56000000b0010b8b8c1c736cfcf7dcce0b9ab8454e7e6728a4da56559693744ab966f14c17ec457a90391aa8ab6576cd04fbdbaeb6d58b0e9404076ae7323c7e8fb960c6172242ff184dc5ba87743b18f359e6dff4f0a666cf3a88b55404b3f41936295553366440f400bd8aed3dd8e373232d3b8c2cee3c81587452ff6cd31742f5dd7b03660a5320f485de8d4745eee01ecbfc68290151dd58a44f4bbb692a4579b606dcde65ef6410914f59bb394469652600070000021c000000b0040657fd6b4b21c941e9085d59398e0d80d642e991c67c1f01bccbfd1d63f7b81fb01d7ac8a96948232b75ec5671a24f450c843b5338d4deb72963316f115a335c5e4d5c288744ec9f06ae119e727a26a1786bef7b3f9e0ac5614a42bc09462543965ab2e55fabfb749061dec004d3e81e8c41560ab599ddbcb5de70162d73ed08cfb85f7d0f7036e751d65c8f64e09705dc5a976362d2a1e5cccc07fe4a39a8b0d0f94f917a910e2ee47e82dbc8fd90000000b0140dcfdeeeab72373afc37ead979b38fb0fb13f1a6225ef12a1139139485656f6c4bdfc0e511a0c42178b98d53233dce29d6fd8781bb4f593612ab3ea6c652a0105703b0c4e3a4be5c1becfe7c44aef30f08ca75da86bbf30850ef0bd9fca1b1d3d41190b3ea823987455ae7fd4dd5e720971db1d3848924b2aa519dd3963958150ebe9b17e98cad87b5ef673378b1881ada0d2d1d57bfd611abfb9553a7cc19729ff9f185021ed3b9fa1e1db3bfec12000000b025de2593c16146d39491a91219ea3152e81d1e11f2cc4ed06e646f65c5cf1f93babd835ba43dc6158ade659e925d40402151ca1162fad8b97d43dbd4796b882d8949d29b0d333f98f79407e556ee9d6195775e323ce690688547f69814af8c899d099098b069713fd0472f0a04805be0034eafe1186918c87716ea86b9b872a48b88cc30a4a42962b910f730d3db693b2d89ec6db1dc403ebdb4ebc35bc5e4f161c9aedfe033e8f1b9ec58abaa61d71d0000021c000000b00edff87809bd75540d58aeff67fef959a0d5690499fb55021f75ab30f87f49d083319c483d8727c1718e56108a1618318b373dcfcbc01e83029e8467dfde4e4afb7afba6fbe63caea1dd72a4b57f9028e0adea31bdd9c0db76d7acb509d1c1add9ced1b4391113196ac335d545102a5f00df1225ba84b67f35970c446ad5711e0e06d9f38e2332e8180bf758f6df0c37030e89e09a00c55ba933288a1ab7ae561d417d1095594ee05e0f4b002cc70a08000000b015d8148338d5955a60b9023216c899eb6c2286a22537219dbaa900a14a354d3fbbaf2ec6fb8edff397d0f5d112d1a1eeb7ade24fc024be67005bc5bedd3da44a2dc7d93aa42092d5c70fd2fab4ab90ed8d8a6ad33e058e9563cedbecee1eddb773d240de9c3b481bddfab817e1d6ab5e00be620be1ee30fdfec7866cc53fb94c8c7de0afb5fc036585a71dbf547727a229d326c6a850b63aaeda890ab673d6c25d19c917f2a73a52297ebb2ff49f9691000000b02d6bd4fe7ba13886f9346a7f36491938b5f07f8e4accb1f4ca5849609a773d9070dd85f9f4d86fabb78e6c25ed34374c9dc0d93af2e04a4be722db662df98e1f44bec7cc60047d2d73a6cb5b67b97beb69169b798bb4abaa75b2b38607a60c03e11e6f5791d119e8e595acdece318aaa1524fafea967d4e30c2875eaa903fb1581f138655c327200ace755c748dadcf30f07931398bb467af7c1609426eee76f62baa0eb0e1267bea2e579e3d502aee60000021c000000b0194be5d29733de9417607e3bc57fca64fa4803d637c0bdec5dcb6de05b544e8d2e2d02349826667d4924fd130c5c4fc77726e333fdfc8ecb8069de7e951516597cdf6b26b68ea427bf225fdd16b27a3aa674489feb392e4a65c67b085177fdd52c3bcd2212e6415fd8f6805b3c192ac5298ddcf58317c2ce7eea998c25c2bd91789f5e5923860dbd2996b62bec211f28282ba1c797914dbcc7b0e24beedc7b5fb4abee320aa1f77de3e26cdb0d73daf4000000b0251f205e2459d5890559f8f3e9c25ec05ad834ff0ca7f8361ff157b3ae536e5060080eaa664cf514ccfa0ea7684837bb99335be96530608d194f7bfdf857df4faa48d87b06d4a16b0a665c72bcda643031136868020f7dc8c107371049aa4a3a7fb0a2ee14b6dc422b2c8ead02cae16913ce6cf8464c68b1117b5b79ac8cbd0bafcbafea2dc35de053aaa888fb2fc94b1a52eeb8d3f0539208c56217ca0e250d55c3779a9e1de22342e876bd67b2bef2000000b02f8fac27fbf4a08150350aaf3747372b27e0e10707e6b1b37f1cd7965b4f33694e316a91e6cbcca77fdb8e7966fa3f324a776f89b55c6ea12bf974bea09c0bdd580eed35bbbc64328771e042b08ca93ee09a6b9207de34924c57a2e8c513f3bd9b94f26136096054d0214d50a590f67d07f690fac72bf771f6b93f961e829468c53a2505e56a43e1497027b6f1117ac821f3165b7fe86af679f69fe5c3ebd852c0a56d2cfcf992f281ceb4099d3ca0d10000021c000000b0124a707e0449d96a720377369ae5a088739171736b4db65b3f6caa95afbc2a5d7217346efe05430c1b6941f76107a9b8d27980ce12e6dc413e83beb573abccf2b156f750c3c873e8e601c27eec01dc1debe4c44cfa911030ed2f6d4298a7c00ad186123f25e0fa898dd5619ebfa572ef046e12d555d7be24db7ee0e35a2213b1d01f76e385c55af1309d6b90c34afe4721c50f8040f7458debe594857d35969d7251badae2c6044cb9f92e25f7d93a4a000000b022b85d047c87b3fe773ad1fdf6883eb77689455492c52b74ec2e0084976e76295323d323413c1130f0a22295e2abbc1d2a9f28b77b1d1e6b6dfac460a810e80a60bbd501f9466c921f7d0e490243f69b25c5179f95d1b4457f03c7879056c0057ae7b4bf0f5bb6de55748eeb20007299178b3d1d859c6e5028dbe1fd1851e58d9be5ab47a29b6ce2d6aea9c4f1cd7f9418d9bac96947579c062eef42095d3f3af5f61ce4baa5bc558df6784e70fcaeb7000000b01d8a3a82d6236418ce6955cc30282529de49cce6b43f88e0ab4915d5a1d2d208621629500a1efd6e2803d790c9a3d73524259b1504988f88f26d97ace1375fbda81dafe309654ee051194a000fded20f5b5272e908e4284b8e091ee9cf8eeee56f394270136ceec38a32533129a7d37e0300d228e4310b5b42dbc2f0f461b706648aa6a436f6df87db174f309b824afa2fc44f892cd9c086c7107e163653bc776304652072c1a86e52bf5794dea2f3f80000021c000000b02a2816c42d45814e5030bd2ed7d4028e1e0b7e85509054e746de4659d3d2dbf28226681b59d5a0577e1e550e08ec436af9e4029981b635232439404bb5353ef336bf27b3822806ba012e6631ff378d67afa3d4da6e17dfb72b7121caa5d06b656873b60822129faccd24414e1b79da750eadeae84b737ba859ffe7b3791e75d57d14861af28f651da3bc63a1c347a18f1f535c14dc43675fd43481d8e293686921e6cca55690806ae98828eb97fc0913000000b01c1f62898750b60d23a65727004e43ded160a7b9a400b14c860fad973a572bd42109c660fa81a5f82eb7a84e22696575e53c8eb9c1819dc75efe41c0d3a1a024a7a2024015e241c5a4dd7faab548b2558156364c4d9f7854d5d76f27f4400f641cc577ccfcc34a0e513124cb2a660e8e2f2490cdb95314a59aa30d082ab3929c2e7b4fae5aad9e5ef51e60441d605b840697071e4524b360e7807336280e73aabba58798e5add86cf9fdf519c3d0d320000000b00f6d15b98c267fc54fe5a5f2561e8c3f659ced80ad6ea51ad994b94cd46ed840f836cd66d7a84d56fd227dd9c5b1adcaed554edf36cb5432e71d84ae6d28f880ff609c88dd8de38afafbb64f74518648b06f7e22ec0e466ab765f169dfb4f3db3c3ceec2faf023bc9061898f18d1a48b25c56da17032ef29a424cef69ba6ee5560b8419df58f7eaac7359720d914e8e6119939e9de45195afe5a7590a1fd183ffd129fd3b9705cea74a1c1fd797e7f580000021c000000b01d5001c9aead2e11916d74740aca1f2249d355b9aa1650fdd3e6bab51f7718a514e77702d7d915a6ff509ac76a84b4f2635d089f2c5a82bd49c5cb2e324cc84c73875f6b3d08017a7fadaa72ba348b47c8a1ecebc3de09a5a68f88ced5b9b5524d6fed0109279e9c4e053595202dcff80405ba1ce814279b7d361f0a7ae2ea7ae730326c83906496d7be3c3f74e750ff304a2cdf95f2fc116b822be0faa3ff16e82f5e84bdb26d391d65850d17a7f064000000b002db2b2e186c315cc0779ef608375e99941a61742df38fc1fbe3c2e3eb3f7c1f56095eff3964abfc98eb978c65fb1d6acf488cd11e4bddcc44b66a0555c8dc494dad5dcf0dd89fb1dcc47164aeedec7d740b23a93168869e7ebfd34237f3431e1cc35b1aef7f131529bd7de27397ba341b6821a0cac88164ae57d0cb44466c77036c779c1149f3c3cf9dd9d354dc64de291d279e7ae6190bca4989fe41a078e5d30a170fce2fca374320f58799ad2724000000b0250bd8125f11b30dfc6b6fcfcf38e383f0c7226e0f6235db7e9e7f46cd29a205b4c43d408cad8ad168a1af44e12e4f34d4c2ccbcea2fd26793377a647b410755a2d83f4eb60f4498fca3c26ebe08adf60c4c4ba011b4412fd921ada08e4766498fd96d164bfc7f4ff5b20a73dbd9365a161bc2ae7fcf54a2f46be12894541a935bb1a41a87eebe603a30e8deab404089048a00ce4e8944fe5912d46f7304f1bf4b11ded77bbc6b43bcf874f384e3fa8a0000021c000000b01d106f3d1a5a6809d15d461e12a5220f18ac27e79aa74923df5b9870dca65132b18aab60143103441b21354dff15fd5034826266b2e46747b2d77473a35a1662c50fbe381f2f97112c2abef7ef443b356bdc71e465f02510ab1d57f6e09af36828b893362518a84995e3a01ad80b93691cc854f080d0b6f9570244db21dd98c73d56eb361cafd440daa79c4c29e03f7c0dbeaf33cf875be90b028f659fd50d2c38ea9abb3f43eda244406b2cb76d9fae000000b0151dc5d9cda2bd54f954e17f41df11c0f2a43f2be957fed34c672b5a94b60aa97acaf918ae9a1d40045e4f6533d28bcffd0a52f25c1273f182ba577121fb4e2a9479f8733f75771c2faff22866c7e00886c96dbeac186422e978848aa579d93f877c5dbf978765691899ce129bf714d223b38c82f30131dc4b6e807e4b5a9f2bf4ba61a537d89a72c0ac88388d026dfe2d5483abff46037189535726dafc3d67bc4e6245689b89468659f2260703482b000000b007ee3bcd0a172d6addd3acd05918ae1aea9ba129e67fb01aa6a825071ba60741d65aa8da298a2bba9a098549609f0b0d9a7edc04a948efca33e2508fdc68d360835d61539c582fd270955e0d4cd26ac81beb24c07c00aba623dd447f6f68e6a1e168b555a78fbb0947ac7f0215cf1524275ea46cc30181857a942141298c7e7d5ce320492ca24c47cb648cd39e091b0b0e04e0798232d6654347b9a9bbbc39c8182f43b243f5404263f8e5f133c4671600000fa400000168000000b0030e0d37d06f53b2c2a703d52b6d75a00309fe38bdc2aa2a03343f0c19fa0c0777ac567de5cee26a5f9aeffa56812cd93b254f6ad0f2569d1a47fb8d831d1bd686c75f02987c6e8423fe90e4770a37ffc4a3f79737bdb970be87179b0832e7ba5e6f64afc1801c76ac6c69d8b7ef1ddf2bad1fe29382da15f36e4bed6d506c3d6b716adf1f9ee0cd1ec37faac404c9880d2b9a13355097f698c688a1d1daf9492125bb2c8979cf52dc7c7b45c70b84d4000000b00ba5867af12c49f9b715bf5ada2c75cff35e37cdda3febfb1fd133f65eb168fb458118642b36b7b0f6bb598bfb0d8edee887c842f6caaa1449f8d4524caacd4bbba2e158201dfc8eb11d0e04845ac82ae95866da91da4a825ec7a52009d690178c32c361e979008855cfe2374b909def12f0e5747b4a598548fe03988cbfa9c3b9ab94655f78835275d89c84e2d9f64212af50b226b886dd9598f075f5e78079a054431de22fda98e5125d1de60b023900000168000000b01080812459bed64bdd952f740c1d4198051243ff81001b0198f4c2e98f49b24115e9793f16eda35096b0cdb07d44076c3afc025c57e2c08b5de8e21e916b3d85ca0d14cb4ee03e121c0f66d76ff46f0819cee80af0537c21e03a4c82b64e345e77eb755e0163e6c9bbe6049621375c94145cc77e16ee5e68e87c5eeb6be6afaf598aa95d72313a2380811308a70c50501079164269036d467c641771c89cb101a8b9a278bd87cd1f9abe5d4689576318000000b01266b0b738a3afcc2d3e6bc112d04fcd95b7292423a5cb105918ff2065c53c1d5cf6c8427f1116f776b254d36167bb7eda28d118b4fccedd204c937373d15b2c458ccd72e382a96856620141ef8e627fc06d0efe5e727c448f5905b7892c1670690a8b2da51745082a8bb3a99df1d7b02009414a1e14c61d9cc92a4767da0360e04f8818b27f283c1fda04e3cbe7b51c09a47ca32b6cb097046ad9364a70f36f9bb4a7e797f6428b7db980448c32354d00000168000000b02464ffa1c0ef2bf97695ceef0f03c79df69aee260d074d760f04100957b061daec3cf50abf63af003bd8c77254375dc5d1f510e4059a85e45f0b00468bfca8baaa012dce4282dc851f07de90afe4d52477a89c6d417803f8cde38cd415b3b6a1ec0fe71f2b9b9bb35d3131867ed4ebab0c217cf6dc6657f8f2b22fd6ea1e35c72b5f696e38bc0c3b2e2d8b94199f1f1503e8f1638e14200cbfbff8746e9c0a79de856a456341c6eb65aaebf32ac0a5e2000000b0208169c12919e4b227e7891893178edd65fd7886ee195e779f6ac16fefecd9f9ff1d34449e3fb612484ae13338932fceae18fd5f1d2b03ad8a315ef1f2a2aedc641d65c84f8c891aa09255c7c366a5eabd6627829629f1a3f836c94a32b792bf75dfa523b5194db43aa77070ab5c7a0107706f710174f8355cd5098b4df2d28e39f893b69b57fbf5d6fe825570f7168c2c103c2043afbbf580f218ad6e514ff9d821bf27f93bb5a8718123e56a5e7c4e00000168000000b01a58d184b638e1dd51b1669a6be91e6f4a9cf9133f84697d57e8a94dc9cbbd4bb948237525af6f71c74c07ff4fd80bbe919e1ef12d340c2025578f2473dfe118e4a2d0c9fadb63d7508c0f5f9933ef4bfb29249dd53df44ff56724b92da0d8cbd806c60fb8ea7e5d8c6355a91bb92fa416fe2f8e8a9f69951b2b4fee24d1b147c24da3c5077ee7b6b0c01ac06137031c0aae9147b19e182d85570902b16a627357770f276a81535fc2b889c62a6e8d42000000b027a57897f8b0eedd209058949c69ef76d1133716ffcf3f14ad6b3fab2448a13df5f2ad29a6e5acd0f6aaf788e983c3fbff90ab9065817c94d5e203e69b88b99afc0d111e9b08d23db18f27a16fcca7446a0f9da1b825489a048dbc92137173d8c28a9c60b88d1c2a581796471dccc42e2e276708c9a261eee8962ca6208dc28779524de5215d9a9fd1e1d83358b9a0e01bedac1ef990e0955691d7e7fe349c202df91b3037fab7efbb284502e62bb8b700000168000000b00c33561f388276d7cf50b719afdeafd51deb3dbc4e32166eeb5b0ec7890a3bbb7a92f85474ea7731c0639cdcb74fed6e1cb0ec730a89c5c4b7da46eaf68780eca4797c7da8e1ea71ac9f291111c4cb3d30c5115393bd5d9d3fa255524942c09ef912b2fd3d9e1bf0f27fccfa2e27c9c81e8495e9f604438ba950964d2be67dfd0a88c13535506667c91de4aebdf56e932bfc3f8dc523eab18470c5aca4287c4b7fb51a1105c8ed55495b6e7598ba30fe000000b014998ec4473f43a897234482c4391ad1e50c097f21a746dd2ee4eaf4845d521cd345f34196eb2a95876d9dae465eb497ff14d9d8eeb48c9ac3f31ef7f8721e0c50438062fbc3eed66a5e33bf742178974c9205295cc7225303d195eea98633cd54506857fad0857699dcbace36a5ba4b1618d6e4ebd2b76266b4787e6dee58081e39d548ad2e5bc2fb294a929f0dd94f2b7f51bced0ad927dc8a565adc2121f7946a7598e33171f7d37df00b47ff5b6400000168000000b01c0740d7da631077d84b795e81e1e2912a2925c4cb06c67a140d0a14698e0138680ae095c892226120f96f8f9dd79297f95537d0040de3b73aee54dbfea018109206ea69ddf8e72108ccc07a8a365ddecbaf5301724abc297617d5855559fa67abb3fa70c5c5aeb7e0a29c5ab9295a110c971ba9f3fca93fc497d321f320f5cf304ca1189148deebc72b88672ce3ee1d0f223c76e1554476ec13eb2ca43fd354c8958f7b9fe2e424fd54827b581cd3a7000000b020dfbaa01f90e588f612cca5ae346556675f6f55a49e675fb2be33e1f8fc308ecd0c5ced8dcd3f3f4c82c0a6325149de03818a30607ad1150f7bdaac86d3a352482341fcb8d076e4ecc42bb8692b430b5b8622241feadb354b52fb86c47186c83bfd539102715187e0d52e5409b1962124dc1762b18b853947f9c0c610de81d9340b5ca9e49416d8303b1dbddc6458b303870bed6d31f988da566cd7ebf699f695cc5dcecfde37ec2a87c8b830ffe9f800000168000000b00f892c0db9372ffbdc31adb8ecf5b877239310b4d4d90341affcac9db4461587a31a86dbb7624e391251ec5ca053160716ecf2fb3141582e817f969cd1cead892ea85b1f2bf4a8bbdc57424497e70a32602697b53aac4336b99781aabbec364901ee641584f24563ce40a130f9ccb9150b6aafbf98bc4217e8da019cc27e85049e65d72bf9c909233f0d67ff8af7166104bf1ac4fbb159433ad0d24cb96e74249dae2837d8dfdf91be41b199789fc26c000000b0156b8323d03eaa58c2615b3429019a2e1dd7cc710be9b3628e8e8b0618b2147a2d22bc30959ac0028ba60dd2ed96ee6bc4e987b2bf5e1bab42ae9be0cae9df6b0069ff000d5fa68c5fad3666a19cf87424376dedb2014b7e7120e8f0c253a35f75188a0d57055825ad19930f360c00b811cb041b624266bb318923aaa686ff3016573b5b213215ed4f3fa8ed21fc702706193161f3a9712c0eed2a52f7852d532d1224d3098ca7d05f538bef68f76a2300000168000000b01f7ce232879108dca501e59023f273bf5b5818ab03c0dd7fdf2eb7218da5843b60efea24413430cdc76c259b2173a40e11a559c45c77b5b750ff8906562e415c2494c2026d27595846a4f7d94e8e890537174d43356d9e4ba1c870288f438cf0d79d9ac42fad2a235b12f88279c2aa3c26210a832462dada291b60b77fc691ad5cf58726b7b46520b5a3d170d9b5d3fc26eaa9af196efb573b0326361e43e5b0eaea63c941a441753a7760b785eb69d3000000b01d04d18b51080f0ab3bd6854d44b4a727a801eb651d5beb8650add59a96a9af8bb51cc3c4b98f5450b4df79c3cc68ca820e44bef49f363d2d5920aa70ba2943a5ea637ee6647ea4cb57cc2e7e0ff4811460d1e267227bb32081fe183b26e072e33777c29cd00f8790c0736289df0b4291ca462727a93a8fb7f36f2b716b7155dd02d7c1fd5b781841c06b9390b3f27d529ccfc011b7e2c22f03d5dff36839ca9e2b537c64f9a36b04c66837f20ccb6f000000168000000b0000a49a54c6d55828d92c40628802e3d273f52e967260319f73cfae97f41c1f1b4f9c6e8fcf4b7a1df5eda28df42c7b1b315f9d966b9aa907dc75c4d73ece8b30de6e2fd132a9d815cb5dd7c1478b0570b04b35841e42070423b51a91e5be7081c33c95696bf2d6bfec7ee0e5668f14403802c4dd8f33e3448581a99713625b4586ee194a8e14bb779446ba0d62a976c144105e19dcec5f6a7b5691b90617e0ca97c9a19011881221c296350333037f5000000b02e025d5807f478403a6e1e23155518bb93e329646de0e0269f701ea20a45f2a68ac8b66d8fe54a755d6b96dfca9060ce82b4e15890d6fd88673f023198677f4afe0d1762fd3203cc08886ee80eed9f17bea3e376da5c157846d1a1f68f6b309b78cbb5b69922179d744948a784be44fd1922ead640981e2c54d06c98a5a0db4d620fcc7f7a6621e42ed49659fe846ca706e3d2825b0469b20fb796c557705f8db58656ad75d4dbe096e8522477763b6c00000168000000b0075951f922f6ff6e6f18c8940b93bfa399b688c42b725ca3e6e26045862a32ea4eb8e0d41889e9a3c2af56527610401e84ddebc8a543f3d19c1be107eecb33baeff9fa043f17c17972e7a183bc923dbac63f70fe1309edb3379a67c62b9500c9d7d1804be966bf7b7d2c813bdc097cb90d436f9e27602742a7becf917db3f122a7026d590e89e4153a5799aa6fb3c8a601f2577d4f2cebed0f89706b94856e7386a0ab2104fae8c220674b32f0a722fe000000b008e59a641ea6f2a735b9b860d75e3a263c254cc737d1832d215eff96e53d043d9cb73aa9c158ea4e089be5e8fc3297172bc0150c9489c31f6de3aa738028b9f527a39e1aacd166cf9a4521eaf32110d958ba9643b2c2b9e453d1d01f1f826e9342259dc0dcdfd54e646bcf963578593e0f9b709860eaa1f7c2299210c3fee688f22a20385e09a24a03f045d31b2af51d2c87516c7cc752f1294faa66fb642df2c38e1301ed9fb552e714c55d25a3f03e00000168000000b01e4179e5ad7826acd5a7efd8d9170775d1f2f182538a2aee1c77d80044eb2334c7255b7ecb640f6810d891e71609e418fbe670ef8d5fdc3f8fd0c6ca29cbb6344fcb4cdaf4a9c3eba84a685879a9c2b33c9cecd3c15a86ec4915bf470cbf1e0ab701d221db475db33fa391c4686496e813bd1f871a8a9f81c033b4d9888f57681e285f5d56f196abdb58a6513947b747113cfed77a5a59061361546c72bee1502ffaa7cd49b1549ca4bd9197d5f57571000000b02d6cb6745c2a463652cfb52f33faab01c1f665bbac6460f12dcd19a6394e7c4398eb60f8a6c2d7b9c13aed45ae928f6145f3218d4b40d815a5ab8c3cc2373faba8c3ac7a02807dfae60062bfad0e230c32faf94bcc3154418e2c11b0c64ed487317b0f0eb78d7c023301472b74199f38240174eefc38043a74dd0cefd5e5f55f8c8a306de615f210c7802248e07ff44d166e57422e585cd4a110da89b891ca9c12d17b0236e5a28d8d4c27e4046bbe0f380000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020100000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000203000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000020700000000000000000000000000000000000000000000000000000000000002080000000000000000000000000000000000000000000000000000000000000209000000000000000000000000000000000000000000000000000000000000020a000000000000000000000000000000000000000000000000000000000000020b000000000000000000000000000000000000000000000000000000000000020c000000000000000000000000000000000000000000000000000000000000020d000000000000000000000000000000000000000000000000000000000000020e000000000000000000000000000000000000000000000000000000000000020f0000000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000000021100000000000000000000000000000000000000000000000000000000000002120000000000000000000000000000000000000000000000000000000000000213000000000000000000000000000000000000000000000000000000000000021400000000000000000000000000000000000000000000000000000000000002150000000000000000000000000000000000000000000000000000000000000216000000000000000000000000000000000000000000000000000000000000021700000000000000000000000000000000000000000000000000000000000002180000000000000000000000000000000000000000000000000000000000000219000000000000000000000000000000000000000000000000000000000000021a000000000000000000000000000000000000000000000000000000000000021b000000000000000000000000000000000000000000000000000000000000021c000000000000000000000000000000000000000000000000000000000000021d000000000000000000000000000000000000000000000000000000000000021e000000000000000000000000000000000000000000000000000000000000021f0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000022100000000000000000000000000000000000000000000000000000000000002220000000000000000000000000000000000000000000000000000000000000223000000000000000000000000000000000000000000000000000000000000022400000000000000000000000000000000000000000000000000000000000002250000000000000000000000000000000000000000000000000000000000000226000000000000000000000000000000000000000000000000000000000000022700000000000000000000000000000000000000000000000000000000000002280000000000000000000000000000000000000000000000000000000000000229000000000000000000000000000000000000000000000000000000000000022a000000000000000000000000000000000000000000000000000000000000022b000000000000000000000000000000000000000000000000000000000000022c000000000000000000000000000000000000000000000000000000000000022d000000000000000000000000000000000000000000000000000000000000022e000000000000000000000000000000000000000000000000000000000000022f00000000000000000000000000000000000000000000000000000000000002300000000000000000000000000000000000000000000000000000000000000231000000000000000000000000000000000000000000000000000000000000023200000000000000000000000000000000000000000000000000000000000002330000000000000000000000000000000000000000000000000000000000000234000000000000000000000000000000000000000000000000000000000000023500000000000000000000000000000000000000000000000000000000000002360000000000000000000000000000000000000000000000000000000000000237370000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360200000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000401100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000601000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000602000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000603000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000604000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000605000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006060000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000000060700000000000000000000000000000000000000000000000000000000000006110000000000000000000000000000000000000000000000000000000000000608000000000000000000000000000000000000000000000000000000000000061200000000000000000000000000000000000000000000000000000000000006090000000000000000000000000000000000000000000000000000000000000613000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000614000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000615000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000616000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000617000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000618000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006190106cba39ce4081d9dc4db5f51166f401fd1d0361fc9bd30cf6d907ad61f27376400000000000000000000000000000000000000000000000000000000000011000000000000000000000000000000000000001101000011000000021c000000b02c44cf1daef3a0f4db25e7ad27087e6eca4602194dbbf4fb9dfc8725bb0bc7c6d28ae57d84279ef1a32ed7a3020f76e2df5a956a1fbb238d486e19bc6d213feffab064689847f2843cbcdb14a5170562298135165ad2fa52f3c7a4814a2cfa99807384781d2d30eba66525afda47c40e12a0278eddc53c7947c9546ba13a9f44fe955d890b15d2f2932a9b48476b5ac4202a7e4e6f3b3e31331fdd7b2add0184e03204b0fd607ceb509c2f6bfdf73971000000b009c9e13350abe0731e80e50559b750802417ffa6ade44103a372e88d6aebb532b8d775011cb96edff560375dfa6baf9960bb0e2fbf478d262164004802f170af3a57d9bd9bb35f249080a7742130cc0133b722d786f477bd246c4875669cd15cc6261953b0adb98b047f419af519b2c0148b25d250496427a1f7221c11c54762f41616106b247a80be2fc8814f1e8dcb192ef8e5a2e8b912a303e5c307a9daf18c92ff15c7eb350d9360d19573eb9eb9000000b028787150626f72b9d1dd8b3fafc000ce240c2cffc542b2689e0805b9c5f6af27aec3aaf8db08e4143f4d84a398a41853e740b20538331a0143c4ca50c4781b0d09ee6cae55d20e955df3e5519c3ed650b930fb657a33526b29cab708ae0810e984a3a8bcb3a4ee2d703798d61c7650f017e2ea1e92d2267f9e4622c2fcc5d971a25d35d2e9c248df43c1fafd2ee929052d4a74a4e822fe352f8afe171e74a98c9e13b11d3c5d038efeac68b5350852d80000021c000000b02a398b0901445c7ed2159f29f0256609e85363b7efc3b3e0aa344a7c6b24d40f74fb76335949e2c9550852ea7afe2945fcf9318a76d251f11cf7de97bc71bab4f4eca8dc9f6270b09333071c60bb42e3ad353eab4f6edff5be36576708e17404ae927c5a330452855f3cc8bb3a62adfd0498d9545e02a74903eda94d9203232a919ea9c86b1a32643aa9986467bdb01b0332a22c8ea3a8fb64a9e367571e732e62bf96027ae4495ca42cab82002d56d4000000b0096f12ead4ed9f80ec8d38eac23da17dc0c9d19185b9472dd6d962b3d8dcbf5bea062b2f8db8cbc07ed212361df0844da136985574f5defddd5f8b6cffafc0616f8cd90857cf5d7ef5c9a392ba2c8657f0c2d0bac0a98468a0fbd4595cab91c6380f46a2e3907fff928720fc33052bc40f8aa35a56c657823e53b73129796763d42bef1f0a2a841765170ea34ef72c08023929f9860066cc6c74a4e2ed8e3744e8fe04222517a41008f9f7dacb55daa3000000b004be03bf208a7d7f8c1f2dcde8b9060fd05453820f6311df936149daa4dbfac161ece7610501edc5afb8d4d0e35530652c79d2ccba362991b99b4d6e42b5e3b1189de597f93fbb73ca969f1a69815a11f993117a67b55ddfd3cc2a702ff3b7a76b1317c5c463e4cbf515a887294aed6d17431c4e44b26c55e9e8f3fc23fcb8240e17ac618829b900684ea9177d5781a427db309398648dcd6e1101ebc965790569c748271f3523b123aea8061b830df60000021c000000b0165483cade72cff92ad9268d39277d2acb7ca16f0be32c39a3f0d9dd552ac3f2408f3c781e0856754d5ed3a2923e0cca2e167cbc3e1279f2bf01341f5c90f4297fd20723c76d0c1890b9febb991ab31b512c612227012802094a84e9ed7ddb87c9eff3fc6dea7bde19f8441c1c5636502d2aae9b0d13befbb866adfa6bbd7a590ee99d6602c4e38fbe009a268d75f7121962174bbb3cfe83694bb8c77217ae0cd2b2fb553bf9a03ea6de29cedda3f6ee000000b02422c1e28403da617120254c7725b64a3bbf6bb8e64d9ee4f6a6fdbe551408abdf336bb8d522913366256b036abf028addc1dd9eace0698a751df59cf35f5947e8b6fb9fd2aaeb533aa7746f1746b64e78d48a54d1c3c9f46830da2e5b6ecc8b8f4530d6b084a8b1c767c5c0a4a215aa08fe407bba9514b91cbf7078cfb3b0c035583632d6c06a4167058c7fdcc7be892b76fed9077452b37faef77cdd2403318dcdff767a0e9522c8e72a1895e7a5f1000000b026d8e0820b0849488b031d424c10a6e8cc1e5b9b1b9fbb1c4f7d2e530eac93ec0af3ed43842d680a4b2b9761ed72130955ef01bb3bde6cdf1a9ff0320b0246e9498a67fa643f642f16f6bdc6d26969fe0239d26079a8fd0873043bacd21c879bb871c7bc5bc75ea699853d82ca510d471219702122272310e23f403ef208bca44327c09c856a8520a6597bad28d565c4116ec4444b2a176ae16354fb535c1c180e772bc2169e5c4645277f4b47c3c4450000021c000000b01e3f7227c3637bcf2a84f2ac9a65583a19030fdb5e006a496f6765235205d812ae5a7d87cef9910733155131be00b62ecd343dc8a90160a68cc78ae253c57b34722aef3c672e9e472d550c3e0f99817f6bc91619df1eb5eb2b0fc884cb9cb19bef7ba878ab67d26758ea7595bdacd8742e902eb8d743080f602e2a2d83fda535343aea021a5be0388461f74554095de40aaa7770ab3ef48d135408627312a7c2f769d19d83f4f13e2216c30437e22e5e000000b0247e1b93ad56a66f47bd85e3084b7688996597ae0a272f3203d64f54374dc6d0cc6ce1fa42d6501e89c3071f2b07f15b631bcfa5b9710c7ee4938a7578e96beaf980cce73219a0d966253ee322d360bbd29f42943bcdf93fc6f33c4df7b125576d6865bd270f645dfe83dee842cd9a5e05004f8503d4b12abb0cc94e4715c85496ab14af6a67211b3302624ae87f865d1f25e448227b36d99f0bfd7362838347837ae490ca72ba436a49e96c9d6bc123000000b02e72fd1e481aad1d60c4edacd1cb7b45291e441f6bee3a9fc8cb833ffc91b92c2c2f63c8e99b435a3f1dab0dc34336d34517e25920dcde0dbc3edbae9a2798b7335f697ac9ba9154f45f98e7845fc77bf2b84cca209cbc1fe78f249e4f9087fc85c24de3cfa3e80915c654ab03db15692cfd652d4b9cec78dcd53e2b11a271348af584c33e4755719f62714253c652d117e8603dd14d203e725acc2b5ee1aa79e91caf79dd28879afdcad1ce0e2d0a700000021c000000b024bd2a65f1249717cafe44bf601a54e886974ac931895d32a4b7b369c4b06c96dd35c378bd53930a648417ce08ef34c40493ae4e52fa28547c27efdc506208b18142848f751bcae9e8c1eb7a3d0d9f888fab9b4f635fa36aa1448fdbc168795f97c9d81e6b633778bd1be6aee2b21a5f10f0742698bec359c2ae6a209a0bb1e37f426f7e55d4e9c444a53f145232405b1064e62ee13de91ecb054b21df455af4aa7c81058b0138080068f11c78134187000000b028000d932f1d588e7d2a8a86875007f757d2dd2add83691f2db9119dc0de5a80962e5afb7ae16aa8c86c90d8bd482f770334af762c8d9da81000b31a64c5f664fb87bdb5346a208e73da4b31e46633c20d9cce41e680e75b2f45e4387459845e03ed16c65e311cc7631d1fe176225bd72c84b4a80c56523f03029c8fb8c0357b9b133edb650f9bc4056f12c923390a1006056aa18938e422685df0599a0014217f2d0301ebf4cab6a42a9c831e1e4141000000b02ca8b99982a0d3dbffd9a9781b68384fc077ca137f4c4d072715ce2766920e148d288171052f80d83af84f7146cfab72418cdadb2ec91877627be60ff96fc6e67876e6ab65974d0628a65fa6e365f2d5c2975528e741937c381b7ff2b0a7e27833b7718c8141aae2d04876ae5b10dad902c29a2f86bef47146206862b2a69bfaca6f15a9c5bab868d3d7218d54d9095c0631950a0bc341ff30bc3712a615880ea5be2be9884cbde98ca8206531c737450000021c000000b02d3503d4cce95cb21a90373f61ca1588dbfc9787ad78e3b2bc8d613d64d59c7874c16f7618accdbe6618f9e53e9a9034029b5808d7cf48c521521b5d352cf07f2f28416b93573ed8ad5aab9d2e25c8ff720c1643d7a3d2b6f30c851b34b0f75539ed55b879db3b04f64d7181efa7c1f42e2ac38f4d50734278e5d142474b232043fe3699333d761089069cb501db8ac206a01875140c4c058b671ee709f3b2498beafa9f62b36bc11c00aaeacebd14f3000000b01c864cfbb4bc44d771830db333e5f246b53a1ada94771486465f7cd32fc14c00d9defb2a2cb23ac7bc393341b49547541962901ad0e98de877ba9c1764e1da2503899b0a868bcc6c5b6ca7556ac4d75ecda8efd503080934a33e94adeee18158247959f3ffad91469fd83985247e65db2f8de719affd416af1ed5c2cf58aefec0a852e236ba2fe1bbe3a8f0cf7cef6d015da24622a409e465dfb26c6998eb8ecdc5bb54bf823b4cac7fe272af12515a1000000b011093861d90ac1397267599cbd756ec31b4ad3b2b3df3f2a7457e0b28e81243760f6b5479571fd7004d5d48e879d28d085e9429e7558d42a6ff4c1885fb298c3d48bd53b769bc08124ddc453cb05de7d05dee5dd929f7428d5bc6f6522f6a1c0c69ba2539a5fd3206aa592c37df9f229195f0530d8fbdb5bb42fa35dd1fb429a1f3eaa19b17152e7fa2d777e8269dcc01933c2fab084dca70dc030c1c07531505fe55adcd0c7c386131b8c9f6ff355dd0000021c000000b02f1ce0268ff336aaf8171d835a2e4f62b86db5d56c1d32c60fa777d6ab5e0fbd7a2a64334a52cabc36aa0f6c02fa471f49e23f6acd552322f56e11af8e8daf8a6aa3a535a0d3784d62b236e5532418a3ad1326c938ac55cbf5ed86c56d26090ba5108e76f96da374e12146b0728301e70f4eabc218272179249a6cf08ce0bf6f96679b20f19fb944e3e80a7d8298db4719ece4b00039dd61c64c34d96cb28aa3f185e1178af56999212b36b77a1758b3000000b0193c5f7b14bf1fe6987ed7839304811250ed31c42bc7cdbe5b6204a0b2bfd6473a2d4e7adc1434d1d0749103ae0fb69e29b404ad794fd28824d1e1160227894e61d9e5dfb18af11c4c27bd81e22c2dbe0c79c055507b94ae9a8321bdf85d425767cdda075c01de03574731a0923c8b7b2577c5a2e22d6e681b1d5ec0eef1c59280a2cb9ae55752e3a3c4b2e623f0e8570802cf8a3c66ba6ccf35180dfef0246a975918ac5119f39af175278f8884e884000000b03033b27f0c4890c3816e1ebf2ed7c37ce53753b540916593f9e20c38df9124cc85972b2f034e46859f884effdae861102db23384e205de5400e73aa86bafab3906ada9a368e66da6ccfc9362d7f727c74f07dd31c72403a9f25d4b3524dbdbc7301a134d6bf99da381a2e60c4265307a09b6dfc7611d241e5090ef429512b208a22ed764faacdecb7020798a4d6181d02746157d5623a3587f247abe7d0e9e6f9203338dbafbf77e510d74dfde54b8a10000021c000000b01a3b01ed828dc67efaf1c157e1b864b5cd8af662f2f67e8a3998968ae2bc2530a92e37f57fcf0d25c98aa368acef50965ca10b5f1c9d6508e6e615d9cb52dee75b6e66462950c3495073ec700a1f4d59526d9289bfdf145961405ece6cd6026eb97aa415db56a2293f713e36a7735559102bb7aa0ac4fb6a6dea062de2a228a072823b098708bb608e79aff54527ef4603c65e7e9e5a35b0e7782d81c4a077de6364d93fd9863ba1971e0a440a571cb3000000b0004364462f2de9a06a6ec063100e18ebf4204ea0d0957dd9a728c7554357991e1790568607f4f672cb04aee3b7514d6cf70e6f70fdf381749ab0e5a160b5d0273f45593457a3ec9901d18071b533bf75d29d317b93bc762c0dec1107aa441775e8dfb2b160eb818bb4dd3029bd76564c080fa8a33d60c9dbca0201e444c6ad0617652879e6d41b9f09f718c421164f630a0878ee1d918157636fd12408a49fec777bb24164cbb21b5febdd2a521f9b23000000b00727d640a18311f2dff7c7f98fdee05ff301d76bdca05f7590846c022ca257796177c3205d0e0b471e1f6a4fd7137a4d55eee10c89a37107cf26de293fce6258203d5cce92fa853a7258f10b77ac9b51916dfecc3c15abbe7b3a1b17e139d4888fdaec43246197d2098ed33ea9de870430529cf44ae005ff582a2b8dff9f3b6f4e474ffbe939431642958d8e6008ac5b2f636403f99e1e9839633e0925fb53570598941fa95f31138624e57995aa3fb100000fa400000168000000b01025b62054a062bb8f96963c0e39b9de9932c56cf386f2220a51787f0610f999202e2617f008d24c399bf83576becdf0581b87178215aea88e23fc9e172730c9cdf6b18508d8d6297ca035b82f965911ef499a08c54e1c26475e710529f5520c07bf5db76ad000ea2a437af1d3b0bf4026e7c0898f04d84f03944ea3f2ca21956338f14a7b9000c4af734f19160206dd1a0a6ccf0462c90b6a85bd2926ce4fb0fc088f15bfef02ac77f5fbd77e9ee7ba000000b0008733ea5fc7195c7d84e7137bd8a3d8bb01f291aff650098bb63a9da2c9f0a2a201318e165753b31c8f41db308d95d41d948cc0224f7859164044ca72a4b50025be50a17a007c27d3ab9395977fddeb6239908ac3470bd90e5babc6fd02dca205a62cb350cb34ba4495a901cafa42b8146ce68999cc40ce1f01baa0419ce1ca46b4757b7c0157e33eef611f0c338f311b361a8da6bdbbbf77307d0194dcfabed9698cb84078fd4d1bbcc87af1eef50a00000168000000b00d81515e8f7333ad181e1897561c9ba58036556439e12d13a3c6c7639c9721087ce2ef19de8913e751745e06b5d1dcdce59d3c435bfabf15b0abe372fd96d507b4df9ae3e439b2fad4e93774ea300d0195196f8ac7e448d44a6ff699c3558c3535b74a7818aa70cde9dc642700adb3640eeff8e22e60879541db5653616fe34c776fd99343e0fc1449978c5ef57c2d7c1c298131deb5acf75fa3a0ae52cbf4152441489843d0851c2906d3e9f2ad728f000000b0070c863ce3991ef82b248c8d76e043fec034c4c44f5a5bec691159ab905ac830d21a76cd0298ed0574cfe16e6d7111bc3a3a53a0f3fceb4fef61070dda6cadf31f5fc779e68f525f88d499d82fa96e0bf8dee7404950931b9a889bf8945604da9248a8f7c359e1258895d717f9e1c83f1c59e7053248d88e10b52e3237138b94552f78f7a59f1b70980fe302612afee602120b97f805b24565134e196e9d8feb68eeb1fabb398290715292bfa053f28c00000168000000b029e13941548de2d6051e83831e6cb49dc38595c28f98c2addbef49e5d7eea3fecdf14333b23519d2bc85f13ab889c885aca55153ff8db26f63905a02702459137db0f844d6b96c414e2e3806c3f31134474f2c475a30f669ff69c7e9862fb9b582a644745879ed62cb49946006ff48821e1d204c9aac0d33263f0b99d5f6f2631d352a03afb326b774a38a8b3347738113ded5f41a1ce9e33d175a6abb6c7f0e73b840ff1e96b5ec3417a6f7754eec20000000b0091d32305e60f345d7cc10d50a194bb4ad47336531dcffe919ba174db3bf7e6f024e857cde107b145fce75f8886e9fcb62e288a50a47a10644e7ab8972576baff0e0df1bdbaa1e05236062f87cf41dfd81db649ffe8a1c5778c90b70b4a48b5c90895ca207e903c09789dbc7c48e7b2504eeb572dbbe3d54fabe1036cfed74a8ee6b315f975a6c20ca4fdda67bf220461ff9ffcfe7c8f54d7ec3000f8dfe1fd8024fde5a34eeb73591b7953d37803c1400000168000000b02675c0a0bf19702cd2169daf4ac6402c40b5a8ec2c7f0b99b5793f4f1067045cee1c9e5db795da39feaffae57b86221b3187428273e9fed467b71268777aac5430372d8fec8f2c09bac2d042155e6d152f0cc8874504ebff8fe0f33ca1ab71cc44b6ccf636c8de958e6f693526ed61af19781949223e2f1ce7d0aed58969c4e6c723a520837d8f94067803c0b71a8f7603327f1044699ee9d2a8ab36e14be8d7fb9cff66ffc39d37f12261d199758036000000b0228d93ccb2b08dd9c42a706184774595514a460f780f5a3cd0536df742d4cf9ab8b1a8f96cdacfb7d09bc75b4086165a16df84f077ee1cc5e44bc966efde59a7edfbff18d879262e7db290ae0e47c36d95ed3bfa275156ac7bc3548aa4506ccdc8d7aa7a04ace3c8ba83eb8ad89919f820be96e238cd6d4562e3b3c349d512cce10607e6ba64cd759107e5e508b0d14f285d2a917eddd74da5f7bb40f0dc9bb2d377519586a875c81d7be07460fe600b00000168000000b002b2796d365bfd58933a2d1958ffb7c03e52334a84bda8f407bb45f9f1795421bb19d9caa36f3826fa6b477c1bbab5148688c7c4fdf13eb697da85e2916741b67b5dad529f1c2120efd14dba56757a1e2bc35f5f40ef684b937acfc54f349d59a9265fa1dc3becdd895b78d31e7b89a60ebb448c078c5de09a95fa20858d95e50f08da97916252bef97f8d269e69ee9f0ee2aac70431feed7c541edeea9536284be9ed6caa35792beef346738820cfaa000000b001f6042832f24c51376bf79ff97bb572bd3121ae7422ff8a62b5251d27df9fe5276070f3c785b815cfaf5969e3069f2d7643d047c31a7605430c257e12e6081f97270d59713b7d89cc7fe28ef22397c8963e4d2dcb429e3ee65e621962a4eac66040756455f5d5fe5771977e53e6013e21469f52739565c775e9cbe65ad722df9da814c05a546838e2983aad0f1480352cec891e08d15ad6506d7c740197a7bc7c6959800feeb6ec88e2e8ebdb5d2f6c00000168000000b006ca575cab809c00d8f777d46c7710cf67c26b3f8729adc62b5a5d574b83652f153c07045bc7253fe11f2e0f79bdc7a2eff85acd1ec3430f59bf678549f8f0be844eea6bb09ccd885cefb5bab3584b1873c0e7421bca7e95b331d9822a18f80de43bc280c62a6402ca0747dd7fb1389e12ceebdf80a6994d57cc936584b0807f34a8fb90fcb622af545b489f2b3ff95010623eb3e09afb6a4b6da80a17c0d1d5d9ca05fe701327c5372bf8ec12245024000000b00b29cf4b03fded2298d5a76488f0b0775e2fda5641d4236797435b631b1597375c25babde14100b55f0c439a510286b7947030a10ad65ed025c40a8df590c10adfa82927a029e470421d6db38b52696a99fc87755158852e184e9bc21650e1566588696d8bea8d5cdc69266fa32a61de0fcbb5f1cdb7237fd60901d153b46ca627f7d1c121fd749c67140e098da6fdcd1c07a9052d21d26b7a2ed4a7b359eece06ddd5988f412392e53ae5773d0fd98a00000168000000b003599477d3896bd7bedc1abf16e5e0a16814a9fe43adf7ee650ca48f508abc5b8b947a517cc5075980aba76a5a68a85e30820334350d18bc458cc624cd2851c6ae9b40747721150cb2f846429d1ceb9a5f97bc1b713f566bba9761e47964e9ffdd19b33a563ac505418f2d8fbf2a03a31b5154b322a6550aa7e597690ac48056dbf019ea13cdb4b67271f972e39885061a02d9e272d33e16be17f819f0b3d010351276d2108b9de499ed885b42de5633000000b0091cf19cb865e1dcec874d2da0b3279bdbffcbd124ab88aadace5d187c7ffd0671467dcfd4b776be572771b267f2e62159e8fa8721632f51b6629c41a1a679f6bfd6fa36b95b661633407a188290c557469549901f7b9ee827031c54526ac5cdceb3038b43a46825ef9a1be6aa82e9e209361356b98b6f7957df31efd48a95257547d4456e8c1e975c093c0601b826f92770ed6e1dabf88e210722e78d229c73a9759c0e858699ff51645f287735cea600000168000000b013b4f4678dd21a30d9f2ca1916511e7116496fe3345fb92dd5643bdf1db76d50db8e1551201bb2b6d85b94e5a1b3508e2f8ef86ff915fe415c348eadae7622fc64f518cac7bbb24e195a80efe0f54ebbfcbc83150039ae0b31cd3525edf0b409126165735a492d4852214e068ececf1e0d01ce461dcc3af32008a84621dae8208922d7f2bcb7bd83c2358722db8645cd1010fe6277edc78dd2e9790c94c55b9d0cb886cbb9ca6d025ba7641a9b3f3ade000000b018a7f661cb64c636ee30c9c371a764a3f80e657fb14d087d58c1dab506944853924543dbf38e68b579d1efef7f28e61991c763a9c4e8389def1555c264091c1d142ad41bdfe5a119287a076b70d2e4046dc4dbc8204ecc6cdd1f7e285a89c54054c0748af4cc9ab10ba54fb1da3e78ee0ddbf0b52ee9c624859e55a298b1f7314b971de0922f1b127844744720f4a6ff0194ce9f6145f4a40a3a19c55a05cef8ad36641b8ba4905ba5a77eba07cd37b400000168000000b02c4e340ef4edfb799826a5b8e449efaa65a0c31d84df572101b0cc5c348374e7516bcbd027a160563e725d188c6238969dda734281ec81082cdf53a6ca0a92babfe4766dd50b497c69a7dbc407d482ca714a117948f4372d2ce53643de88f7127b646e4d944efaa56a61758d6a9ee3461b4469fd99bb6f408f84f657be85a8f553da9fc8a1fddb1f7bd8137238023180036e2a1423d1083b2ea849e245e57fef533d1302fe76a709b23b9423f2114305000000b02e639458bcd5beaf682cf7777977b2bf4804d8fa1fa9ba300aaa4206add43d38553e03d645d32e0309823a2841b3c5b062c57443e649036fe3e4cf0e713fc9c94764acc7b987a41c1d91c3f3d02bbdf25aa807f9bb721f8b6a6929e953b7ec6c8c339e2c24797007d46f6b5dfc6c5a5f04f972eed9b4f081cd0659d65dcffcd197a79a6f60179814fef45f0a3818ecae2a9961059b4a1a5b9a969b2edda8590fd0f92d460c691642c6c47e6a0d61837000000168000000b00dbadd9e9f6729f491a2b26a2fb65b62e6b9de8eb6160e599da4eea8284d094ef3acdea12d08a2b9e3fd5ca9d8fb7825bb52f9c1ff82e8b2304b1909df9030e7ff71dd71e4eafd79c66fccea1a46e88ccc5e92bb2f1a113db7f5617a107f47f11e7f712d4a84080bc9b37716513e530e206d975ff2ec276c2f91c82e7b9e4ded3a3459423e30d6dc0d99b8b0c7698e870025d23fe863b48f676208e39c6a0f05d466edc78baa622aad1dfb8e42082487000000b02620ec53f2b876a2bab2acd8ee08f0be7623f51e74da90600a87780aa88790599cbe1a13fd7f6c1f845ccce8b3d9c20c9c15b6ff9100e5d4404d49610964bd3f036bff0d9bbc0c776bb0d241598060b57528038748def77031e2c062dcc86cd57f5a22c6a7bb241240b1e2ff8cb8060126ca27cddf485fd5f4b27a260541023df75f56d2f79d6ca4d226afee7e439a3d1976a0584dae2259506dd9e607061ab2769054bd6998d548d8375caff3bcad2c00000168000000b0083bec20b167b79f445aaffa47873be161b3d27539d4af3c055e78f9311b8ba0541578134cf6286bb56e346a18347a48b07f60bc785d211f735cc5631a7f5794d7c227a21336ff14300d164d2213a629b39d17978eb2d61fef27ebd5820aadd77a0579e846c3327a49eee7cd2b4e34be0dbc527622a9c77aaf8e54955ba6fd7776fcac362eeb58891a6d908e2032bd7e18b50a966ade9700fc802eb438ee8ec812ec25546ee726e7cec4703ffbeeff32000000b017348eb4f9fb8a0ff1f035c91c0da3a49547ccb5aa6ffa5084ddb0fa09d443f5753a907132cb1beac6a2befedac1f8ef77bc83be9d5074d9ac2bb01a07577106e4f5958ac96a66300f98ec7f381478f662dbfdc7ff77679e4bc06084811d960f13276675aaf560175fddd08fe79788a0012cb10db47eb964254d04ca35de823882a00c06424ea4a23bf064c86edf81b52862d75e05f88f65f507b5cf30fb938016dd570b70493bb77a48a93ec757183f", + "txsEffectsHash": "0x96d6dd6caa42f221143e36451601ea093b69d59d2cf21ef49822ed185f9b8e9e", "decodedHeader": { "contentCommitment": { "inHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "outHash": "0xc2db86162c987f9328539ebf11947c30e3846f8bdb7a820aed2bbabd9544b9dc", "txTreeHeight": 2, - "txsHash": "0xc63061a478677fbc9113639832d607ee836fd3513af6f55d8457eb34735a0745" + "txsEffectsHash": "0x96d6dd6caa42f221143e36451601ea093b69d59d2cf21ef49822ed185f9b8e9e" }, "globalVariables": { "blockNumber": 1, "chainId": 31337, "timestamp": 0, "version": 1, - "coinbase": "0xcd739a9d6c22347955ea133959de609467ec4210", - "feeRecipient": "0x1bd237b1b92e473b18a3e11352e5883d5212ac9c120830db1926b083d3c64a9f" + "coinbase": "0x2c4ed998adb9ea58602c2f521338d85e796983c2", + "feeRecipient": "0x08e3c9234b16ba719d1fa970253ee4631f0204c4dc25b86b46eef390ab581e80" }, "lastArchive": { "nextAvailableLeafIndex": 1, @@ -99,8 +99,8 @@ } } }, - "header": "0x0f045bd8180c4de901e18a10e9393ae42d9ef7928fe6b68568cb48b91d1355a7000000010000000000000000000000000000000000000000000000000000000000000002c63061a478677fbc9113639832d607ee836fd3513af6f55d8457eb34735a07450000000000000000000000000000000000000000000000000000000000000000c2db86162c987f9328539ebf11947c30e3846f8bdb7a820aed2bbabd9544b9dc0a241c83a063083fad29b6c333afcd968f71f8a875544ff1f1f08cae7f770f510000001002c672a4d7bd90c4b6ba35bbc9906598862f626554be3cba05de19265a8ece71000001000ed22b14764d5756c4e97521b31e93e21192b98b3bc2e2559e07b1263ce7b1be000001800135cf87b15a9f4b3deb2fde9d2c6f75620ae779c6b62f677c42aa70af9a50fd000000041faf8e36b0fb8fb337acc1c32316e1fcbd0465d53c47a2dd73ebb031042566cb000000c00000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000cd739a9d6c22347955ea133959de609467ec42101bd237b1b92e473b18a3e11352e5883d5212ac9c120830db1926b083d3c64a9f", + "header": "0x0f045bd8180c4de901e18a10e9393ae42d9ef7928fe6b68568cb48b91d1355a700000001000000000000000000000000000000000000000000000000000000000000000296d6dd6caa42f221143e36451601ea093b69d59d2cf21ef49822ed185f9b8e9e0000000000000000000000000000000000000000000000000000000000000000c2db86162c987f9328539ebf11947c30e3846f8bdb7a820aed2bbabd9544b9dc0a241c83a063083fad29b6c333afcd968f71f8a875544ff1f1f08cae7f770f510000001002c672a4d7bd90c4b6ba35bbc9906598862f626554be3cba05de19265a8ece71000001000ed22b14764d5756c4e97521b31e93e21192b98b3bc2e2559e07b1263ce7b1be000001800135cf87b15a9f4b3deb2fde9d2c6f75620ae779c6b62f677c42aa70af9a50fd000000041faf8e36b0fb8fb337acc1c32316e1fcbd0465d53c47a2dd73ebb031042566cb000000c00000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002c4ed998adb9ea58602c2f521338d85e796983c208e3c9234b16ba719d1fa970253ee4631f0204c4dc25b86b46eef390ab581e80", "l1ToL2MessagesHash": "0xb213c9c543fce2a66720d26a913fe0d018f72a47ccfe698baafcf4cced343cfd", - "publicInputsHash": "0x04bec33a4c25ef2631f4b4ff8aeba71dbd3a50281ea12bb198ebe370a1b53653" + "publicInputsHash": "0x286d86eedc3f2ca84f8b763c6aefb535d85a9abc4c623407598493a4f0d7b513" } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/mixed_block_1.json b/l1-contracts/test/fixtures/mixed_block_1.json index 80cb19151d5..194eb1d1b89 100644 --- a/l1-contracts/test/fixtures/mixed_block_1.json +++ b/l1-contracts/test/fixtures/mixed_block_1.json @@ -52,27 +52,27 @@ ] }, "block": { - "archive": "0x10672cb7b9a17a6e20b9302e5b534c287235df5cbfa9ffc17c19975f3d6b032d", - "body": "0x0000001012e5643e26da426570dd999e0e044e5f83d60f3cd813c55059bc0ea0f4a7c9d413b2d2cea949fa0876265cd8eee3a4dce1e243783562ea07e2de537f469f7bf627abb3d4560e786bafd52f77ac52dea36c50419f32386567bd969b0c38e1bd7405d339cecb99fa74bfd631917f965357f0341d8c4dfe6a8f4b621d8df54c82941d560ac24523012499eeca2594f20ce238b7d21b98ad5c638767d70ee05532c2183e6d64e69b005709dfc4771c7ca5981adc54f3e8bd1b00222461ae90e44eda2f1d4572fe0b0b23100a7ea6d4780b25e826e41ca9e71897e010bcb218887b3d036d44eb30a430b5cfc6660270eb5fb7f274689ac73dfa53ba9d0739fe38637f01f7130af8c5888d4c65ea68109a1d58fe8d7d1ae62098857b0a3a3dcd393ef80ed8bcba6eb5e3b4887a32c51c5853b97a5eb59c87c520f36423c6d7be06071821ca1719330de5e3c51a521778b49cbbc1d53f8ed42e0562bf21ed72e8cb9a410b0e82ef5f7276df41353faef675fb408aeb246b6e2f704cab99bf28d1427e7b0fec7b9929c6effdcd045d3fdcec1d1b73faed495444699fab936630d69b519f0bf4f1453db36439419dbfba703b849d1aa5774fe9a5325e5bf3e7cdda9d1f7f2a9c2a035c72fd4a3e383306aff03448f9accc08a2c665837560cec8675fe2512bfaef35a8fb7df08a81001a7fd4903849c0371dedd87f31295f46269c5205dd00000004380000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760000000000000000000000000000000000000000000000000000000000000277370000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000003420000000000000000000000000000000000000000000000000000000000000343000000000000000000000000000000000000000000000000000000000000034400000000000000000000000000000000000000000000000000000000000003450000000000000000000000000000000000000000000000000000000000000346000000000000000000000000000000000000000000000000000000000000034700000000000000000000000000000000000000000000000000000000000003480000000000000000000000000000000000000000000000000000000000000349000000000000000000000000000000000000000000000000000000000000034a000000000000000000000000000000000000000000000000000000000000034b000000000000000000000000000000000000000000000000000000000000034c000000000000000000000000000000000000000000000000000000000000034d000000000000000000000000000000000000000000000000000000000000034e000000000000000000000000000000000000000000000000000000000000034f0000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000035100000000000000000000000000000000000000000000000000000000000003520000000000000000000000000000000000000000000000000000000000000353000000000000000000000000000000000000000000000000000000000000035400000000000000000000000000000000000000000000000000000000000003550000000000000000000000000000000000000000000000000000000000000356000000000000000000000000000000000000000000000000000000000000035700000000000000000000000000000000000000000000000000000000000003580000000000000000000000000000000000000000000000000000000000000359000000000000000000000000000000000000000000000000000000000000035a000000000000000000000000000000000000000000000000000000000000035b000000000000000000000000000000000000000000000000000000000000035c000000000000000000000000000000000000000000000000000000000000035d000000000000000000000000000000000000000000000000000000000000035e000000000000000000000000000000000000000000000000000000000000035f0000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000036100000000000000000000000000000000000000000000000000000000000003620000000000000000000000000000000000000000000000000000000000000363000000000000000000000000000000000000000000000000000000000000036400000000000000000000000000000000000000000000000000000000000003650000000000000000000000000000000000000000000000000000000000000366000000000000000000000000000000000000000000000000000000000000036700000000000000000000000000000000000000000000000000000000000003680000000000000000000000000000000000000000000000000000000000000369000000000000000000000000000000000000000000000000000000000000036a000000000000000000000000000000000000000000000000000000000000036b000000000000000000000000000000000000000000000000000000000000036c000000000000000000000000000000000000000000000000000000000000036d000000000000000000000000000000000000000000000000000000000000036e000000000000000000000000000000000000000000000000000000000000036f00000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000371000000000000000000000000000000000000000000000000000000000000037200000000000000000000000000000000000000000000000000000000000003730000000000000000000000000000000000000000000000000000000000000374000000000000000000000000000000000000000000000000000000000000037500000000000000000000000000000000000000000000000000000000000003760200000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000441100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000641000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000642000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000643000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000644000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000645000000000000000000000000000000000000000000000000000000000000064f00000000000000000000000000000000000000000000000000000000000006460000000000000000000000000000000000000000000000000000000000000650000000000000000000000000000000000000000000000000000000000000064700000000000000000000000000000000000000000000000000000000000006510000000000000000000000000000000000000000000000000000000000000648000000000000000000000000000000000000000000000000000000000000065200000000000000000000000000000000000000000000000000000000000006490000000000000000000000000000000000000000000000000000000000000653000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000654000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000655000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000656000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000657000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000658000000000000000000000000000000000000000000000000000000000000064f0000000000000000000000000000000000000000000000000000000000000659010f3ce73a84170550a89b6327549f153857338cb67690d2d45e2208483cfd1b6f00000000000000000000000000000000000000000000000000000000000011400000000000000000000000000000000000001141000011000000021c000000b029f2fd6bce0862c0cb00f3c69712e70a80e40ac67189b25f349133ac860e9e76e5bae5704fda6a0be086b1062ef6f6b9c9f6d886a543a546d459e0182db959ece9d25e5de372410573e55ad9010b51cba087e89e9b5a281a83a656b55fa615f46aa8951a3f381c6f9097b8994009938c2f8455e44c0d49bcb05498f94313dc531411f7ce259379a202aa84c7535275731149856911debb34e21b3b10395fde1fe0a54c3058856e22c6310c4f9da31c54000000b01db6b3ddcb502f4da850bd24d2e22e0206ab2abb97b4e5164c94cd250c58b9d6898e2b45fef2a5706ae401dcaafd752f940674b0cff77d524f4dc1281d1c2babc761cd4d69c8815bb070f8a60acb60790cf9cfce3437b030c8d74c3354a89243ba9da30aed5f96a6337796871ffa629e053db65df5242500a614e93f0703eeda503aa7a6b93dcdaa9819c715e62781e026c3182074bb830b254d6f3f908a8e562cfe41afb64351899129266c793e5fc6000000b026d76c8cbd3047ec53af2f259477366b02dbccb5ea3415545bde608e1d05414d5df464e4571dfbd3fe8d266c69a9332210e55764746e2ef639583d29a0a9d16f328c936b5010b9557e50cf45b1d3153f101062ff0cb3666d054fc448cd2749d85e0630aba5e58dcfba5a4269f763407b1fff052f276d3c59fc9b19af68ae50b0e92e7e76b94a8ae1cee85a56d04c4fd100a272a6f1b799e16121ac4aa1c1b070cdca8db7ffe0642627031df9d1d698320000021c000000b02d288e86c8fa3bd8a5a0c714e090bbcd4d2cb716afe6ee2688e266dc3737d2bd218a4ccb29b4534576a5f286d4e0162fdc0020a618dd8fdffc9f3f2ba64a71bea7e8f76ee9301b16edf656b948474c67547e3ba9c7ed1123c4f3372c0f6d32fdfb75ccfae36fe428d33084dcd6831e7f075c2f303c1ec3e04e30990eb480a1baf72798a5b9d0c9786fc05d8db7c00d821f57db94852af6e9798df545dd29a239dcdc5ea6b7862dd81c78231aac3ed9a8000000b0105c33d7b3a106455191b0771a768a1ebf74813f43b5b6436dcc0ba978bace656bfc709fcfc5ff8fc5853eac7771c9beb8f318e814a471b70081f4aa75cdc2a0602e79f6a5588afed4777dfff489d0ae9e543b3c84fc3fe8ba50a8e82d0de069f54160966acc16732f1289062bc4ed061a55f4f2a5da6e2ecd2a9e9b144a3a46f22e341134a88925d0c37c142dd32ecd195c5197ac39ffceec08712ccf1e5aa260c37e97d29cf3b0d999661133966ca4000000b00e8d6428ca3bfa6f7e6e6bf618907a2d193a619eb6613a2e840e95ecdc061079855b983eb60e15efa98c26b6abb3af75b2bbc11a9a4e4357d209bd729fc5061456fcfcea87d5452b194c173438d9f92556df2f592d3e2ef9c876240014a3d426ed34d33b9fc8776cf1a7940d5e0706f50763a7ee2ae0e28ae1c9fe168afe1464f7883d3a43f7e1ea84ce2545a7505224047512c884338bee4b6737f3ac001ef0e04f1e7f3bd0ae934e54bd43977c48ed0000021c000000b00b3cde4163987eeacd0a26c638c27e50e939bcef06b9dba2a6e1328fe188b5c1c85e74db1461e723da0c05444fae13936da57b7b0d32853f9d1fc070637552290bc27d24edb85fb406dcca645b987ced996749810a27029884d2733d0d146403e5816e9c4e60eed7722e4cf722adc94705acda9cd5f67b21c64624afdab4bbf22a51f10a395844c0f7cdd0820b9c44bd24e350310862b1382edf93c6bece83f513c0a8c349d09a55cda4652f70203777000000b028ba9ede2a787f0985b29e1b37a7a0d55b0b282f628bdca1cda8001a8ca9bcae64361c3a12a20f96806958a56ceef574ddf9021e785b2435a13ea1002ea5b653b5a6a49c67784f499ef399b1a46c8c7cff371ca35868e5780dff5fd1d503c6eca06eacd39dc47def8687ba622b08082c20edb98350120ca340165cca1ceb2cdb3eaa4fba475cd5e00829da69375b7b24161a3df947f371c279e02f8ce912d2c04131059895e0387503b0270a201e55ad000000b00dbcf27fdf6cb0c37f37b725ba7afe4f06e612f4a376c71d309fa84f529e6ca2caaed36c84ec470ca6accb79de2190d80f508e49bbdec4363c4988476544e72b606f2cdad619f91b57cddb315c86e5a8822f005ac69abd28a0407f33c2503b50f9db574d5622cb57f72dabee330350f111e48e5cdef0008e7daca474d71ba2160fe82d8597faa922e36ea3b2611f277a1c43039901ff474ee27584b9488b3e956aa8357d107e93f09cc42d182607f7430000021c000000b00c1d266fdde6da1512f5a0f5701b5f9375e23d1afcf7ab3bb15cfb07861657d83296507963be6e3ab960767bc693b2fe9c34d63062a9dd3bcfa6643144c8957c92f383a9cc74ccec81fe7eed905b6231c285d50d7966bbf20d5b3dfe53811becc16482c4b736019559491c220ec9b2261188e4b224119653903d3495a23c179e2763a7cf06a63d1581aa0d9edd48b2b2205d79118e11c0cd271b141a77156b897b96b9e00a16166b470251b1f1373242000000b00783795a87ab7ff3bde667b57e0bdb6c77e7145c67890ddb4bdbbdf736ac103aa59e9ac7066055b0195a38b17da8499f261bf9d552bda431e4a478c48a8975382ea647cf92d9b57e8459717862e52f81f8333f1c54854b33cce1ca50b2d76e27cca897726b3d648f2978160dfd2a76d10c91850b64a53ff6433888739a036725a81c482e292df1e4c07dd830cd3a3a36034b2ab4f008c25be4948e9ce5d3ebbb14590a48f9f2f19bc3e25c026a6d272a000000b01d9efd4fb04c505b0a968d7ab00ca96bfb4ce66d374f878eab16ca8aa4a51afe9b02a5962ef7daa12304adeaea1e07eb8db87b89f1c8acaa3bd7bff27bab968a8662ec0529af169fd0003ec5576184f89d26e53762dcde02856ea9c9145a0750a1efec5dd79a135c2007f9ed87d17cbe0112b67de6237401e234513e8f9d8534866ef2fe200d67ceea01fd88acf17a54202431130e9b01dd4a93dd0b92a96187c29d63a281777a5fcc5d51a79dbf87480000021c000000b016b517f5831bdcd9a607aaa42639a7e96f451178cdfb24a318c9d255316a9a6feee9733cc8d03231bd4d374513e415fbe698f6fa33664844177a8f396b96e85c25ea18808b334514c45fa881a3342efac1791898d7cb2e4115ab26f8626f3c479b13d4d145290ac7ccc4fb79f99aeb3c159e5619473785eb9f469fff009b9a013b8218fdfa85c6d29cb1f50badcbd405086ed5dcdfdab8a3db559f163da7a6a51353badd36c71e9bfb05f0a8f58bcb39000000b01841e11bf4f339ee59d30f7417aa2500d31b6f0ef9a6bfdc72133b9c83e3eea7a762762dcf6807818bc49e421c0fdf7dbe516e593b81a245bc7658dbfbe2ed79bae320870b44523d91ace0f86f875fa8002d4cb5492e52e99cd5e36c107e3296cb705d6c7ff1bff4be6031ff773fc45e0fc77240a4c4a777150dd2fb489d089b50c2db75df8d3b2a0e431010d347645b0c314b9eaa0d59b110fe4a3aefb59c873535f6bae247709026807f6a05e6211d000000b0018ded6dd621d9b1ab88668f47524b3dd4cfe2133786aa6d6ac3df0ffd6770ef454b94f93080205907756a4d7225b7bf15ee9f688af0a02ccde2d1ac82b549227988e64916bc9de03ba3f64a34b3e126bc94280dfdeaa45ba9da7624e2cf2ebb311920b2134e3ab33e1375c5a14adb1f2ad40479b4ea7d7b35e1ad144d92d2d33c4263f8e1237a2d34f87e6fa24ffd7f23ce569bea7dd5220f79b49aaf013c9a30f91fd70bbc67105ee12aeed0c9fe3b0000021c000000b01120517a3bbaff51bbcf38a53411007735f55e90163f1dd92d901ff11b101801338dafc7f1bc1221d3cce434ed038a59c6d1f2d5eeb85e44c9f4cb08c52f0497a03bc746521f4ecde88128f8b9e96a25298ae2a4dae729210415a3728fb84d737c2773657314f68b1e6c3abf1690fc1f22e4d49714db66027c2a1a469bf52dcae491a98d92d456899ec776aa4f2499a825ce4f107a1acf767b8a3f430452d36408deaacc763eebd5fb7d95d0e5603841000000b005929241046d09312c14d8f7c77e5f2f6d91be1ca037b749856ad45cbb61cb3a9240d970c9e4f22343aaa00a2886aff448364dd5e17f97c7811ba15969f3c1fd29829dd0e2641eb022ebc8f6bc61d610a43042129b9a20787092149d38b16e3d9aa05ade2e7a8e575efca6741a836e9a0ab1e0f2a234c3a7c71d8df5683d656ad623449f20559592b267665d87f08dc01252027edc85c14af05e3dcc0aa6bdefc09cc88b5354bd4fa11acedb495de843000000b02cda4099294784626b69e11d196539045e46982a004f8b08a6d5ad80ac857576423b754981195c5c14fe90aff1d7cb7c51a8cca67a83e8be4d047773f05029e6baa7da0bb6517dacd45db88787386f0e2460f84b1de3bc827fe4664bfcc2554923df6c2118df64829b1475d052f3ec5c13a6569e849801fcfd9081bc8dd26e9e10400fa09c889b936283508aa5da2c4f2d88ab23012d36b80d4d9e5eb98895c10aae27785e97ca73c68276fccc2bcd890000021c000000b00faf6ccc44d0f4178db0cefd3661af5bd7275ad0f5eba806cdbc1147d51add84f9e7a9f886cd93c0610c4219568c6ac491733b3dc27ebfcc03a05f654317341fd10917436b8e88aae0a226167c15faa7266da19a44a8c9c71363cb7502f9fe56dbd47e67350acc77178ced946e900dfc2c5433f44eada9c8ab7695ca4d5c0a9f5474d85347ab6952ab4380760ab09e9f0e84943682c42f2a23b08cc98925c0a124a50d1c375e46c54f0980d0225c2ade000000b00cd44b59b1aa63494b2046fe9d3f08f99bac424bb147da950527380e7b8529b804c2a335d7bc9c27c0085c0fa757a62371488391a5533385e03fad1eb1c631c158131099fbbda262384b4f144e4b35f4e7fee96cfa73ff45f95fc93a7b255f0190897a2255bf26c48cfcb4fcff7c5a3023833821db7a0b1cdbead889a9e2b926d396725e502be77b8fa02e2458912ea7242ceb4596a5b0ca5732b9405688329e67971bf989c2cc546214043fa30de15c000000b012315e4fe92e0af78ae244c2a430c1f01f7ccfc6ac8c53478b4ffa8c781569bb4b302fa3d6df30a183c459642f3f917802542be6d3db9100d16ad34222029e7147f510895af8071c566c94d91d2e73d148c453c054408b8a3dc2e78b731a271aec264d71bdfb1249d8cecc8b987324820670734c0798d9aeff8082f70032aa85f29ed11e8632d3c7ac9164e360eca15f1d2f4a27b3b985bd316f389249fe21fc09d1cb0cc449849128de5e479dda14d60000021c000000b02210159c7d64b15c6743dff044ba58e38f5d79601ad85cf41036a9f8da2f12e553fa55ab454af2ee2381babcbf0a5d916bfd9109714e31c5b5cc7e951c4e35ca856249261818d9c6dd691c7240aff088f06f639784ed2c4083e75c6d45feda3c97cc255f01f1134043e6562390af2ad72c332510cf40d27216925b413c74158a7cca9113cf48af16bff6b2be38891459224566698288a43173ae08872736e0861d7e872feb788c6dd7d236e8455cd3b5000000b0117bd2b3fe91f5c44a9734c2ddab400030da55a400df2264f85055abac1217dc41762e7918d6b5211059ab21e53cdccd4c5b0e7d92cfb554c4007b4749c92b53f52810bddfc4fd230b2d2db69667c1e234faaa4dd8029c285ed45aed1861428f694ffc84e612e83f3fa21ba06bfe32132c4d68968f086edb363c5ef0d16ea71e6bc8077650d832c2b34b9b29041c77ef0ffcf6baf2c9086705072db1f5104085ae27835a24a1b4219e2436a2f5c37276000000b01dd17a305071c527a9ac0fc399165e0f07c3df193c6e76daca68e379266977473701b40e8421548a6e660c7e511e59aca3a2fd9d057ee4d5f9e30f86577a84712df07d8437808462963f7f1b053e23f0bf086d2264aafaa3540ed4957e09c3b55df261d0544c069b73ec1733ae2ccbb7195707f82ff6fc3fdabbb6e596739066fa9482fefdb53d26ea7a9595502b95cf03b6855e028af1a737b326f3913b6ef0c1c88a41d15760a9604a03d2ee3f54d100000fa400000168000000b0011ad1445ad621eeddc99a1a5153f2cbc4fb8092c176bffc8e771afe12149d4a566c3919c364dbb49a988f9d5d00e8119ebc14dfeb9da3bb7d417dff54a359e0b2e683080bb2f2007ce27e64468bb9601f8c9f10e8699ed3cdac80ecb9081fa850123ad1a34c0bd4b217506404e3b1860dd16ac2fe0e3bfba714be6e1fc3007d289f8688d9bb86fb622c86380c5971ca220f18b6dd1ad6e7f53fa47c54f4fc4ecec2dd270c642a8bb95df221f6b13647000000b024225156d481ee39d0a3d6704a9daef60d53a719469f1baa0c2af8e76bebda25c08d97f0fc2c797f3a868bea07c2ce6cb057052a2c9643e96a8972980ef3cb24bede84501bed2407e0496a9206fe79f46fbbff20fcb613226f817e5af51bb4632f5b5b55658068501ef8de8d7cdc9e6606e3f816af48c769f1c530e8cc44c98ed4e8ca8542831d92df40941aaf4f011d302d8fa62959f9f4fd900661667421849ff5cc7514d6178f04d3895a69c85bc500000168000000b01fe813bd6e86470e1a578e3e4a9e2aa5ca36eb0a3e044052e7b6a733b1055fd9795f444bff2cafe77683fbeda99098905d721da650bb9718c9ba979604da951a2406bfd160b1f7ff4b15db51f43658d69edb81ca554bf68f42c09e8a9fe32c7caf69a66c1101a81726ec752d3b85b6d20a14ef838e97354e56d0efb0d9947b9180fd547bd1eee1f8cb12bbc7c9c30ae62df969d0c4a6e8ac179d2fdd644572bbe34f146708270a3ccd59d0498d17f080000000b01b99327d7c45e9d453305feb5f148ee58614141ddce5b905eb8768839d33719a6e660090c3d3aa43f9052d07570a11dfdf584b845c3c4fa4289f3e92298c6985c453a28f328300f6efd39e9d7947802cad047c257b3bd201ba9a8766b2092fa64dd7e80faf03742eaf38f4759fc7c4c915c1eea9c0674df9b6f8f6b7f61fcf367571729120b401fd18323c78fad92f9c2b59b86ad89722ed70e0e404563d6de71888c549d83420c4dddaec475414292a00000168000000b01b0bdfa203e3f6d52c1c89389f82a63bab669daf666030fddc39c0c1349701bc601d4361b1beea3c2f24b67442891f2168015c1c0c7bfc2e15d0c03372ef86b084585abf62361fc335c92106ee23fb4591589fb2f96cd19b86e464d0b620b3d51998f483c779eb4be5df81feac0b2e64133547c6968726770ca589b5454c802e2be9d616daf4fd35cae84e1bd436026215c2bc31e368a45ef1b279f5ee29cd0387d735647ac20ca05d613089a3c7f876000000b02147de3241b3c2b80eacce0e84e75e4be825f0da891e5b9862d9364b22c2f1f123a1ded50c858364478c9aa67909cb4588ca3348c06973777a557ab422ff70fd178c80c77ef06d28c961785757a346c0a860107d2ae783b0265f25475d25e3dc4823483a81fbe7ea833afd1d646d305a06fdfde6557a1e1acbb41ea2d18148fe7d59131bb3d8d503a1c375fa63058afa0a6094e0d3e6297682494b88a15ccc39ace53d96571b463982dee653ab4bc6d700000168000000b02a1a9b6f043178e57e77e3a9adb6c624265ccdba6179cc8cbdf9289f09de9a00c8e72952e19371e822b460ab284102d825d39a28383ca9dabc444781c1934356d366eba18cd195aaeb06a86ce7a8b3fbedd065b345e753399fbf00014256f6b6776e77d9d6a8fec7af95df50ed963e860935ccb53816dd8c36ac0c2ea4939cce93aac789f9308cf3362b58c82971cd031e7f80d18bf0c20b8974f5b2e05b06f5b4f4970d5efa80d1149639dd33aa9515000000b02c107862b54049fe8b516b2a8e59b2923906fd108931068c1e5ec5345b2978484a4c2f8fbd48a8ceed9efb330fb4a093598494c2836fd0b713214b61be31c6155f0822203d43a4226c10eb3c025f8a97ac560ee56495b4074a87ccec506831a20c878b8da3ecbc0868596776115ad0642fc556872754bc637d2c9d6919d719d34c64ea1f7aaab79c1710669eb20437101f4722e6cb7dfb30d141d3dbe3214e347a16672811746ef720212a57f97669fc00000168000000b01768c0886cca8e74c9e1eeae9f0060f76f4e2066f6b97b2ec4313e1b6d09fa7b637e9e9ce86e0a93d4c904c10346b443c65118366aabc231b3c196ce0408975366c50ae036eef22a2975e0b7eb4a68e7da1c20dd64ac5f5df842770b6f2bceaab82480711616ad3530f4fb54084a90d02dc32df6423e9631c7d72cb696a472c24a361aaefbd6a5c4ee0e64c292a767f728d1c26e37b1e02ab4c90665510789ba86c5af15072f84f59eaad856d928fdee000000b01feb15f61caec4ac48e823e8d8e1b1c91a0f33003d1377463e9cfe7ab2732c0911d896a8ddc1689aca22a90c45770af542413177399f1591af2546539dcc5b9932d7478fcdebc95ad317758de883acc5c6c5601d0074d9d1212537451786b27ed94bed769ae1f4373776adbc53496aae0d6dbd5faf598490bf3155b28bb94bbb92ba69170acd9d41eba08bb36716cb3422a9f0d65cfe870d07cda546b3fbc2c7f5d384e0706a45d85ca27d2894e2faf600000168000000b0030bd6a3635be3a366541a6d8e7b00ac179663c24e2dfb4a8be130a6e22c014aaf075a587ba031273d83be4a42c3e10e77c7d1eb3db646d1d94e8a0e929e141e2d1370d0b3f062c67299a037d2f0dd287bd44d5f9283a4a9949a7b96721723aa89988b26524fa3917b20145773c5f6ef26d9b466a766b12e8e5b318d746fe6847c99b44d10a0ca095f6c29118e4dd8601131e64f81e56a2f50c70dd8bae1e182be1345b8be3578cdc0921cd7d73654ea000000b030082c8e87761b9f5bfcc482d4aed700621911d8a19a179ae06d8ead67b668ec37606ac3af73e0671fe9326d266597a121245583a8505a39aaa0b9834d635d6be6804d8f3dc77fbe3afbff622b89fa0984bb78192afbd7040c140c08559263e06ea568056c307af65531e9eb9b0de89a0da6f0524b8ad6d8f009026569a8a9402f1bf1a9fae4eafaa608aec511f467f71fafb7a4bf39122248e6d8de477460fd237b7897497749eafc4a6dc2574cf94600000168000000b004e56be1be616bc0076d4a8910904ed9e9be2f2d58bb62f2bf6ff1d38070dcb557d31fe9b39ec8457cb2c2d8c8258e195bb2e66d8bbbcc96b3798a8de650447c6446ae613cccd0273a42acfbd14d374247204cc0e2cf729d4ccabfa019754d6c7622fdc41126a0bfb2772434aee08ebd1c5cd1bcd8ff78d8a6409ad4f5aea91d91c3c82b259a303165e1408ecaaa053700f89c83269a53c939e7b275403ea07b2b519c1176e23e4cf3acd7f053620046000000b00e7cfe9f40057ce044ed8243d8d53d00bf5481de78690e135f632892530636d94dc0748f9927e4fe0ce2c4a7ce1c6e7eed2fc773f3ecb9d5e5d0ab0e9f4bcd1fb9e1ec59f805445cfcc92db5922b70fa75907e32a40ac9879cbb1a069be45083634429d736b7ff53ab9c54ccaab0bd0c2c0f788d6ec50f3505c5eb513d0842b83ba5133c34dfa667bf0e2e49b87998872229182b56c3fc8f207e383dbcf8cbacd14bc68370018648506cc36309116c6d00000168000000b01154ea52f83ab72ce2b4784d50c8dd75bc56a4d8e7645b4c55f6843e6beff89dd90c90ede69c79eac30454d29af86ee70640cf1f8142bc1724ba3b3f154ca5c1f603551f8829108551b853c72ef86e9b13ce303b5356bcf8bdbb92d169653cde06c6335ff92855deb29045f826474be711ef8e772ea52eb7c966deb9ec8e31e9b3bfe5396f68f9197b7d531565d85a2519a53cf81fce34de0a4ee34ee4e7b10565c7aea0ebd06f3bc79b4cb533c5fac9000000b01b25b955426fdd30ca39173d5fa76be0c018d654884d3f9c4cb2582abc2811593521321fad05a42afa1f5d35532e349b549aa6813ee668af6e58bb01e3ebca91b468807c11b1443ddfc6c6fb8ba998432e9cabc2f47c99c274503ad148a39ab9acb0e5af1f926c5b7efcac70e54254662983a4de8567143f86f5076a875bb9b875ed2d8d895a7aa99fa5fa2572a162960b99c7eea17bb989d997f55090117b6692b26246d91bef5e328858df2b5a874a00000168000000b01e6d9c82e2314c762e7ead4da6f46f435ec85e0314f4627b58b7434aebda2ebdc2b4ab931db5dd41474c0ab576084242537e34e2bc7b39c27ce4f701bb43cddf6e2cd1c0fa6d3a5c28d4677e9cffae6bcdce6a0954b4804e29cec264050e8149df4cee2f7d1a5c889422093fa233dfb20d8780a84dafa8298053ef33efa8fd176e7f70588b18fb4595df299eae0896bf2fd76a764f2c5d4bb51d03f2e02fdc309ed072678fcd4c38d50e2bbe7d9cf3b2000000b014cc38d0ec05e0f2abd959fe689cf09f70ddca2676b1d876b5ac4ddf63b0cac59d5e0c1d637a95c7720d9c0b623b6364b03b2f1864306bbe295b12b53c2a05cd94d900a8f3fcd262e3b9e09859412b8efe428528a123766091ca9107e7e22f7cb6c043f52dce577679e09254a3e83aa21b25319dfcb3cb5ce692dfb6417cb3af2071ff2dde7d43610988ba1e2c8c04211fc9cefc6aee6db86293fa88ff0c95648284ac0fcceb0b7aa76bff016bea470100000168000000b0276803c3ad93afdef91b316b43e76b42801fab78acfc8917e27e7a10c02797d749a72afecaa9264e4310272b3f4bc4dc0e1815fbfca0280347b0c96024d2617167ca2ca632e6fd3234e3faf4f5aa7980645d2c116f60de18d93cd9786f60d4a894572079766317c995fec9709f6201122058b6311188764c66266db9bdf9c7783e236e251f992db15c58f80122d5cb61221829b0a9ab7c10a5b97e47779ac4579d5eaee3f974eabd677416f20d691952000000b0292726077f6f2047576e74d100c9da6341cbeecc08210c5babf6bda4a33ae9fffebf0fc4655085a455219022185d86235f5cf1a4d752dc8d98104c913bac9553a42adddb845d5c0d42b7fe5945bd021195ce09527790f209b5de6f2392c331eb341217f8a1dd685e52d797469f2ab8b4024b3f0fd65befcadaa0ac00dd419d1dedf0f5f897975b3d0e6ec1e243bf782025e0890c95fc7089d5799cd59c9807aac9a237328fc4aa3a349a12bfeb5b48da00000168000000b008373529e676bbd85c8c0bf9430247c2fa7a928d12e262910d376e847911bb04c46adb7701eeb8ee3370500153daeb033146cea5e374dc373423fac503f831113c4b160be9f9fadffc2ff9338d62326e3c943e9e919afcfc5a509d5a97cc74845c91bfe44639ca94c5457ad15c424acc2938f89dd58245706dd9bfc4d6aa63cac2b72c404097466bc90386939843b8ea0426eee1a3bc0a73450089c3d9eed412cae6247fd2a8dda1fa8e2a18c8a96270000000b00f2d6468bcc34d7021ecceb40365eb11685e36349c0defe0f0f1dff24ef632367a2fbfd1298062ac198de48e4478cc489c14bec53b3d9dcd6f0817ed9cedbc24e25bc2770f6e062e92fb88f9f73ff32c154e52acfa8e5c7b3d37059993d6d3198612f8833a7320daa9c5acd11cdfd1130088e51b19122015e159ee5c779e704d981457fd138ea0373dd056418163b87a1a3eec8dc09859b83911da124fbcc1de6017aa39dcee85dccd3f54360bd5178f380000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b600000000000000000000000000000000000000000000000000000000000002b7370000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000038100000000000000000000000000000000000000000000000000000000000003820000000000000000000000000000000000000000000000000000000000000383000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000003850000000000000000000000000000000000000000000000000000000000000386000000000000000000000000000000000000000000000000000000000000038700000000000000000000000000000000000000000000000000000000000003880000000000000000000000000000000000000000000000000000000000000389000000000000000000000000000000000000000000000000000000000000038a000000000000000000000000000000000000000000000000000000000000038b000000000000000000000000000000000000000000000000000000000000038c000000000000000000000000000000000000000000000000000000000000038d000000000000000000000000000000000000000000000000000000000000038e000000000000000000000000000000000000000000000000000000000000038f0000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000039100000000000000000000000000000000000000000000000000000000000003920000000000000000000000000000000000000000000000000000000000000393000000000000000000000000000000000000000000000000000000000000039400000000000000000000000000000000000000000000000000000000000003950000000000000000000000000000000000000000000000000000000000000396000000000000000000000000000000000000000000000000000000000000039700000000000000000000000000000000000000000000000000000000000003980000000000000000000000000000000000000000000000000000000000000399000000000000000000000000000000000000000000000000000000000000039a000000000000000000000000000000000000000000000000000000000000039b000000000000000000000000000000000000000000000000000000000000039c000000000000000000000000000000000000000000000000000000000000039d000000000000000000000000000000000000000000000000000000000000039e000000000000000000000000000000000000000000000000000000000000039f00000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003a100000000000000000000000000000000000000000000000000000000000003a200000000000000000000000000000000000000000000000000000000000003a300000000000000000000000000000000000000000000000000000000000003a400000000000000000000000000000000000000000000000000000000000003a500000000000000000000000000000000000000000000000000000000000003a600000000000000000000000000000000000000000000000000000000000003a700000000000000000000000000000000000000000000000000000000000003a800000000000000000000000000000000000000000000000000000000000003a900000000000000000000000000000000000000000000000000000000000003aa00000000000000000000000000000000000000000000000000000000000003ab00000000000000000000000000000000000000000000000000000000000003ac00000000000000000000000000000000000000000000000000000000000003ad00000000000000000000000000000000000000000000000000000000000003ae00000000000000000000000000000000000000000000000000000000000003af00000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003b100000000000000000000000000000000000000000000000000000000000003b200000000000000000000000000000000000000000000000000000000000003b300000000000000000000000000000000000000000000000000000000000003b400000000000000000000000000000000000000000000000000000000000003b500000000000000000000000000000000000000000000000000000000000003b60200000000000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000000000000000481100000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000681000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000682000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000683000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000684000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000685000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006860000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000000000000000000000000000000000000068700000000000000000000000000000000000000000000000000000000000006910000000000000000000000000000000000000000000000000000000000000688000000000000000000000000000000000000000000000000000000000000069200000000000000000000000000000000000000000000000000000000000006890000000000000000000000000000000000000000000000000000000000000693000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000694000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000695000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000696000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000697000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000698000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006990129168fcfe5274f558a5417b7d6529443729da9a806ebe13e3875a1325062ba4c00000000000000000000000000000000000000000000000000000000000011800000000000000000000000000000000000001181000011000000021c000000b02170937fc3c0d2187084a4be886f1d1ecfd7d3594ca642f17ca254dcc5dcd92393a6db5105905b1937650f89356c201b728eb36aa2809cc7327c1a11df20aa0135194dc6699fcb3c42b06923dfd1ffaf4addb9ea5d597af65fb07d828e494aded63f1cb252cb23b285e4db29d8f3aa1a1e2292b1bc97c981ed48471ba7c9c2faa6c77950e1409df5dd427de8738339bd13b36a754911248915f743b4e54672269f6f061671abe013dbdedcb729307676000000b02697a4f433871f982c959c5ec06caf3688bb101dc673a6abfd2f781f2e7a22e989b7d50466f52e3b50052d024b285bed4ffd1160fd2c7e61160115e27dec02debac8f372c06470f8a38175d4395c0ea45048d218ef3849ab9be43978e08b618a8ecbcca8d42221a06fb76756b118c3f90451e8647461fad449077690d89118f952f6b5d4e995b215d121df3091f882ed2e6ecdace5530b87316328dad1a553e663ad74767903c4aaad749ecdb2c07756000000b017ced9a6c5b8bd5d6213aa44f56bc0534903b0fb792f2c81706932647aac765341f1572bc1b0c14820e84dcfeec17e0981f0987bbc2eea6b59f9efc162a699c6e34cdbd5c1258a9f1ed752adb4b3702f4c4cee1fc48d6ea8e9a24da0ed207542c63a85374e3387455d3f2347f76b3307245a583eba398248388c9ea6f1fe2bc73f312281d0019ae7f3f6c12f2a88a83623d85458a256f3749cb8dd9a82f46d1238ff00a60c3592fd084734bb9ac090ce0000021c000000b00b4cbddb519b2586f3bb08942a471dd519b75cb856a33d4f16a06e8cecb5abfb5cadcbc7f5858386760f7b7236db6ee931ce29ba977d260414a22b7874266c0177b72a22120d5d0eb0abb129bfae25744cd691b7b7a13eb9800dc1d1cc705ac4b424f872c1dfd3dd390daaa7b8e1ded81d034927c34d91d095ccd6ea06bbdc8bad642e8d71c70540018da0450bcc5c3f27aea91a97c74faa50fa51ca080a5dad0f235665adbab6875f49ef112de4ceb6000000b02f9c2d38d40cef50290f024d341aeeaddd93cc6beeb60244e16c01c877bded035214b8525f745bf8095e6229732aede312fb530a0027e9dca4c09d616e0356948103da3ad90beb2a4eafd7d6fa5fb5380f2fd2981c0497c201fe2ecaa1489d39148caef4e69d8975ded0594eda88ecfe0e84412cde52a4c0a9f40c09e9d878e487cd0cf09a1f8e54c4e1af22c10328dd1abb77a5ffb24d5d1b509c13be1046d1df707132dab2ec26521ef7e4cfac7524000000b01de5a5b0fcd82ee847020b713b1b231da0450c024866ff98bfd3b0ac9e9d75646cf8d21f6fd782bec7dca9e7785e250e7efa8f0db9c006b979d00413c79355dec666727aa9958b7a43a11dc9024b5d4f8b1eef7f513734fab302a2496d7796e738a31ad73a929e8dcf284534fa5d4454099058db3c34b9abb600945637af050c163ffafbf0621b0d96e79dac8c4c79951d36a3242a070bf682369536acc9f649bf30900fd1dd57f11ef39ae1ab4ae1bf0000021c000000b01126869bbc790a5767e9ec9c065f265288238dd6c6b8d4486cd524a2d80500648513d02eab2dd426e882e6efe08087bfc294957d157ded8f45ceb5cd9cd3cbf4eeb62f5a82fe45f2a3407b5dd250b4b27188145f43762dc84e460b7e21577b1e7896cf3e7df8b3aeff20d5fd24fa4312247672f654378f69d69a3dc058f7788353ce1b059b8c8933bb4919aa22f821581ef872b7250e0fa0829e95b1154c319ab91214c3d85187fe65e421f3db0b537a000000b018c4d0a3b909b9f05fa44c17613af80d15520ec63c7a03c9fd8f983fa816757f7e63ebff46d99db79957e7550bf5cf10240366690b7e21784983a47c9c5f5cb22c03c57ede6be5a5386ddf564e293c3050bb32ac756901022823b45982ba45aee606843387aac4059120154912f33a8b02ca36c954a384e4026683f81de16b69f834529282f2dbb3c21b6d8f433135cb0758ca91f78c1b389836dd0111c1d991012b3d44713055bcb4c38ce4e16aa0e9000000b01ee161f749cc37606ac3f64dc7192c3fc7a8be7bead29992ff857b1c284cf82872aa0a9c0fb77c13ed819efe734c62deb074e9c947a7ceef4c8d1cd4158edf197da3090fc5ec85fd6f834d5c721fd44a11deb01973753f747860d808f7648ce4ed6d8018120b2766a5c185f5ecd177a524091e9c6f96a03c720725a6660a597473abe4f513f2193c93447b9611c11ab41ffbed0ad21ee65d24e81225ec20bd1065408d7984f118bcc8060336f0b3fb150000021c000000b016d9cee771dbc10de6046891a60955373ae060711663098a95832fe070130617224353023ed0bb7b0e531af50255a2f5a287d99b83e6069b95d0b65a76058407d093831fbd72425c3d5b15ef0594a3290ecc9749112b43ce684976ae83470db4c6dc4dc26948ba2fdf32fd252987c07a141e416c5a827f90f79311c00f3b320b52e380b306fe63fd034068e0a856d9a92d44276ad15ca1671a98431c44d84bdaf80549d07b175ab0b2b7bfb59b172415000000b02421dfa801f4b99db3525b71eed249cbf0bdd0ffd93225fab7bed59be36e972b497e179c9c37756520ea7bfdd6859e4510e5410f46bdb60b7e92cb63ae2c75a17ad0b9a2f0d96903ff5c9cd65086c9f7a3638030b28346536f30ea76bc1673500ddf187258eb858486792cb7c3b2a3232c4de444bcadaa57f7c29ef0edd37c154b37f6bc3e10075a5d6b0adecbfb3954145a04f8cd4b5a766febb1b6eceb470df48984cbb417c769917e9a1f8d325e24000000b00759ce39e6b7ddb92e1004ea5ded0b4d5f05b21a8ff82cdb9a00e46a1422571ad78bea28d1aca4208a76b7b69e21c4ef372bbf4094db5e1b717e484cf990ff79683aecdb3a6ec8d42960db49375f2791b4c5697bc973ae0e890aee449516a24f9c758be87427ff8a1528ec50e73176c229fe6a057434d60403d935d365459c7573509f403581e58b5d97e0c94b95962c2cf4e05de3bf7c8a1afa79e5ab494d2d9ff5e6fc1feccf3c937f8ce1bad341e40000021c000000b01c6620272137ff9b57549a56d61c337fdc69910c40b67441196b538b8d90e54c508413645f2c9989b6eb8853712a65bf97ef24048efa04d77ab5d44900946d334c101cc23363b7312bc61f5fa4b752ad9424c6a0084031ada7bdd67e360ca09723cc7db51cd53fca59b9ffed783ba8182c59c569a8ad4437f4ec5412d4e8204cfdcba379a5b2e2968cf4dd68f7e8af0c2e4bf458b990b4757490fd1a35f2d300d16559eaaf6406ffeebe7a9308dbd3ff000000b006ac831dd5ce55fd8653ac11883a4ddfeb437768362339e7215692025d64425b663418214009c40c9fa5ef5f527d2d0f7e12069fb2dbbe78118a874a5fdc29b0e86c0f3b6272200411cc4edf587e87a7444dc3c50427293fa7795987f64ef648bb4e0a4927a3fcd80840c7cb5f7411741e9722231a5993603edd0d2a37f977a7010a48eb250edba5b4484cc404808b032215a9b549cd57d489c59266d780ef872b13b6b81c042311c93d541fceed6fc1000000b00ad54fe037d12dc619925d470fe59e75334b5bdb1b5a811c2654dc66279558e0c24c3c5edde5e9ee3affef44acb4bfd3bf71739a150d026b73a302c2c80df337f306cdde7e4e843937abb8d13e11fb9e0cba3ed90f37cab37b6266624f43b80306a384a2d16f039dfe39ea6153b7bc502891588471a8cf4e29a1462d1edc9cb7658f448881fb6a4e43f5a3d3675fed3e09a0d66df7f8b34a4268fb5a4787a1c94eb698e67d03c74d2689218934391af40000021c000000b00e0ba409e9adf71da5968015129c87d5aa403c079eacaa58cc1e73f939a7916cf42214c618017d862d451f863b0d02ec8307ca9febf327458b4cd81e74126ccaae24fcc788b13543768d5a7d9591d507e10aba41b5db555fdb9b34fd07f4e1dc62f7ff15a4a503ac0f5026b7d8db9be50024f4248b8aa1a25c11e2b8b68e9ca5421f1ded5efb2d149b8bde2c5f42c48b0ae971ee5623110bb77cdc2c762acbbd0836228c89bc2370b314fc0e989e2ce9000000b01b5430ecddc1346031ab9d0b9af52176e53e98f6b6daeca88a72485363a92bc5d69e503949b53ac31be6ebe35fa24628fa59da5f1249614dffc3793a1612071933771d7c8acd4f1d46fdef47e41dd2a44dec527750142766bf75a02166d66b40807d2a859e4700d2155551de9ab7ff8a0bd6b0e80bcb82292817b8345dd6ddeda0ac4aa36769b821228a225f69d876492432897766aac3bd3e3efb0c0c65f134ac5ab79d3fd77d6ba83dc541015cca7e000000b010d9fa50bce3276acd45a75a513271049b339cbbf953aa75728a1bb7c18a9aae8bdbd12cdd0858a5b5f018b2b12226d945b1cd58bda4bd96b12eefaa173a278dc56ec0845bc23fae7708618e5f766ec42938c36c3d2faf59545ea9e6eaa1d169759c8eaa181e2d77fae334a08f6ca4d013d0c148a889cb8a7c4e274c19ea22f644c60d146abfda9a2cf8ef29a40ebaf709dbcddb891740536ba13b92f448b6ca15941b7288462e911c77ba5f008d01e20000021c000000b029cdbc5a47cacc27974a07d3d22e653df589f26fb4762a5d1601bc21889b3bfc5e1c4325b8810ab28ea215d0566415c4fbb57650b9c21289a215532bd89f9908db9bc1a6ef7bbe486d1e4e922918d8042c1db8d5878758ab273070ab0897d62ab1133c7a946b217e4a26671c930fa59d0b06750908d4ff5ebf5b9facbaa05e1d22a7c267e203c0a1c06e03ca17512bf12f7e76ba2c5cb94e3fddb01c8813b3bc4046547d62ed91bd4e7480dd07c58f69000000b02ec8093d32cd948b90660f9ee0b4d6e453bf70893041260cc7486bd9db04bacb0ba689b682864d6d827666a3736f6f51602579f9e68176e42e1e84b9a137d473b2cf77c8de6502d1fd71e78d3346c753254978c38f6b8e639ed8da1409500ef9f9164f83bf4ee0408b76affccbcb84f01ee356c8e73f5c5ae559ddb6c5a1fd0e85f90cbbff6facafe9d96646694cb18f2009b9dce8d9abee73506011b913451c13d12d283fb22a88228efeadc982aece000000b02d776bdcff43c6a0b66e5562722a8c52ef9064c55aec6c2f6b0f32f9accf7034deb2d2fce1b1dde650124de7887d780f495065e49ebfd259c42146c818d07b6424bc50e7ee47758bc0c898691a9ec6e43e23ffddf1d3c81b207ac4e22fcde8855e1f6ce323d8deaf89767c9dd5763591126ff80ff2d61c1a537cfc5a38f3fc632cf18cca9b5291bf7594958e1712dfb629a4223008b501207b569c8690c6c9c2cdd8ef27b453df9f44fa737bbe6e82c20000021c000000b02387f34e43215ad247fe1726eb73c7d5159bc52be50277a20d420fb65a69239183af8c9a6a3fd3f4fa836cb73be4c10e39301c310fa9355e2bc184380de5518212fe6de60364fe0daa11c31440b0e8a4e9c70bfe02c6e8a44de4a182d3434e0360c5b5eb526fb2ef9fb7f4ac5b8beab92162fe70d639b4025d4a7a9db189a8d6c0e54242ae59a11f396b66331ae817070eff664eb124958256f093ca1bd9f4d376eb1efd3440c20ba7dd2c736efbb4e5000000b0130397db40d1fa08d71ddee106eb63ca3ae6785f9ee8783ea7b3fa1d3b5a2a1ed74d04a6df4d90e9502860fb83604f69b073ba6159f57221c43f825d59c02cc79d7cf21a075381c1e4c09b13d5826744c633008e4c93361822faa307dabcfed21ebbd4877214b9eaf10276783d746d8a2be8834344d81ad177839462c0d10b587209c6f6cb249e3c49123d242e909e8d2fefa74211102c8105f3770c0babb78e04ed101b8155e2006b26b74b405b8744000000b01667e30848cebd869a02341bd988ab5fdfd58990cf267e4102a0d8a87b1cde1d0b1dfca8066ed5c688ac25903fae1f54c9e7efc0800b97303c4619c3fc568801454654acb8a9a22c4a95f61e5961d4337b2e19a2cc0f7f697d927ac28a081cf32c310c3c99d9bd9c05deefd8810ed3b908e1bc884534ebf9f6e747acd997990eb2fcabb7ae73691b801c7a9f50fb9a0b1726f24bbda75c015e65efa27086fceb4ee150a4c2cf85af33ca97f8a141825200000fa400000168000000b00e39e51c02b02ba2f9f86abfbe8c758da2459b5bebe82ed4f7be5c12efca3f33296f33632b906e0112c93c49dbb775e0e56bf8738dd891c0b4e16e26960e1d375ca32b5ee7cd91de28d499910432c5bc75cbb37c89a3ece74abd9f6f7cf60aa187d4e3f39e528594a29b46fdc0092f7a1a1b16378ce5cf082e28dfe35131ca6a40e7f7a21646982d6e22b595876e632d24cc68a1be2a4bf8da0958764158e8d4d9f11621babf02d9400cff4c7c4087f8000000b01b75f0fea978297384eb0f9154ee625b85ebea6b9eff5fa93061e86356c307570ffc910ac7b6ad27f13bf396730209910a72696a9129bbfa5dbe7ad19d3db07d9b192a418d84e3d16e1ce8cbda340d9aceb0d72edda69c334ff9c1ffebddeabb321594fefa559494c0f1d8a3869a85cd0c7d7b97b9d16c73e4bcea35dd72b4b10b4d5536916534fffa700973349bf59822b4bdc67d94c74fbd8302e9f17e6d52e0c1afac499f7f30131654434dd785f900000168000000b02a23a77c9c8bf6d238904cd2fffface41946d80f99e3886410758bf057776f2c320598d4b0d1687defbee4cd265d7e5674792f217b504e1ef76ef6d939534ee0b4af9ab8fa1b35cf27c3c22620391237254dba9e0b4a4b8cc77cba430906d7c55faa460313a85744b27479ac68199702254fe37c2bf98254af9849cb46424738232ca1b96d1a8821b4f3be08b0c2389f04c590f81688977497c69e12efbd3df1e16c52252b8e3f991f763fd362393b9c000000b002ed7c2ede011f7b1f44aead8afb39461095832bb9f596afa5255c05a3c2226ccd137a5ff3d7c2ac65d8e394fb47d18af9d2f891bca5522b6fe01cbf91ae9568ede87775080a15fb6838d296898b5be16f999a0e63066ad2160e0aff67f9cad16baa383a447e92e182ae30b69617359905d0b34015c429d70ab8bc262591ce18cb8b4f67c37335fe5e429ef2270242922d3d42697cdb64546bfa317a75558724fd0cedb93a883347b405bd6f9a45bc2300000168000000b008c739af9395c5fc1225ada81c2d5dd43268e8aab1d1f8dae0821a43a3fb744133a2a43704e27c2b2f982fbdbba8c40c30975f1400530d2a78bd3a9454f56680aa9ad8f7f884d74ec93aa593c2606dc6a99e776dbeade0a7dab9ee26651abab233e2df610cf9285fb35a492e49efab4912402045393ba43bde69f6d66e40aadf039fe705df013b18f26f315b80cae14a2635bf375bae278779eab38a806198e26ba3b63cf848732f3b10f9d89287b099000000b010a05da3e84d792b1e347a95585e7ccdb13c945be83a9caf615dcc039a2bbd4dc274d6d0a0baa8abd5a0a1219c4136f321ec83b425dedb546602655f8491b48f0ba6e607e92afba562c0817ed653414e2075d30ad4187394e7e071bdaa3e2f8cb8732909b6c77aa4bc1d427d3b7f80b524f3bc12a323594f36c22e8a2e90fa282de8222a85b55c06cb28b20750227c96196fabadcdf811dc332786cb98ce3af41160ac3f962ddd8c4c335617237e123a00000168000000b012aad7cc8432e5f7dc0c153f6b0ce41c90e6003541172ac44084ca5ae7ef6a266e4fe20403b7e1aaddfaec0873b8692d70e212d6e9eaad07b21488f3d56397f4e900507987a7cd5db5aea12a53e712f7a965bfbe57a5d3ba5aa935c1e2f87b3ee2cb516dbddcf5b0fcb5e71bece94a3a0ac157fa7dd8ed88fc4328994915aa3e17f5b6056f9d5581d4542a13b84625de0c572df772eda763f5b27702ba5ef92e0b32c1a036d533b9a193a69c437a33cd000000b00f9722b9e70d7fa24e592981bf4c45e44fe7c8c3e6cf3a851f33d62b516d2b108a945279ab843c8b50c119e5553babca139d97502914ecfbb447c8921b2417b3715e19325038cb059ee41273f55b8732592e9dc823a03c2b6a347c3a2abe43ae880f91ea8d7882b93cfb2abefffc7275088fd7c0dfb4b1fb34d1711dee90f0eb6b6fa5eaa9febcd94bcd3d24b3f94ca10109b1a4dc6f9eb9597c898796454e4a2b8610141bc8cddf06097b98226f813c00000168000000b010f2a25bfe6a80584a03de32139b527507d961e80c53123387076cb487c99ead0222b92f79db4eefd7f89737ee8b032a8e7182fee55711fd136847b234d9264bde914d53031fd987fe2eeb4f6c3290619e22c72557328774467f67f32de6cf8f7b21befaf3bfe6330ad429c60f701d4e2d5075a2085a1ed0c8aca0aaab92c11ead1262c05efa9b6fbb41abd47bcafe1b070c39d8f61f57c45ea6584ab87e0539cac085d8f23f2c221340cd1b21594c1d000000b0234bb856949eb46538f231bdc981e75d79f9f264f3116f7fd596e7a05d03cbab0ff9804f65b9e5e06414375d409375629a3b8c442015dc733994d3f71e1793d15e18a44cc9b78f01e0186a946445c96dbbd5711b2d0b1c534a5d8fe482d79626c4195b15a3bac188db6dc9fba7fa9a671e3a55114bd2e357bd8da3c996cb323e3c3b02ad744702eabb209083dfdd3d3d0cde7bd56dbbcbaf6ff9d87361872381604e5afa4cabb704f67abf34835dcb4300000168000000b004e84954cb1e63b9329aed8a3ed5e678b13331dc22cd329c577e41cf160968c6c2e0b8e98f3eec83bebdbaa6e3e3460d303e25c543e98b29c222f1bdf40d8df8596aa9eb3ea4c54c4543dd2544605a6883b1aa97bfe5de8adcd2ddd52809f90a3e0b1ef450411840d40bf32729687303125afd7313c15c0a47c4773c997143dc2ac9065aaf84b6a16cebeb31b30a41790919d55caf1df60a7fa2d3205f5688d1f51b0d0f44df1a2e404e6ce49b95873e000000b0039ceaa9fa866ab56e4dcd87c15a2a3f3b982df04028cb5419687d55b3b2d9f2acfc381cd98c3b6f185d5d0619ff2c702ee7711b5bc7c422ca061919f0687af1315d80e4549a2766baa6e4195ed3c85624f58908b6308750172c4829d993ce279a4cfabb8807afb55344457e7bc859562cdbf57a28d4eb69102bad44ae43adbfa2151994006d0d666936ef204d4217e41996e275384d992b6442ea1ceb72c3ab56370bc1f8b04f64847ca1f09ae1a3a100000168000000b01d7e9142936473cfb7fe61cbc0661de7919221c249aab9af2dccc9dcf14c9e8dcc9a9d3573b909c57902dddb6c5ae7be93e39ac1599d6ba543805e657574791b97ddc47dcd2bd65a56d73cbf95f1364836a61f28f82660042dce9fd379e59e098697d6383f850a40ee0ff1aac6d4bb1604ce568cd942d3273e5f9023ac698ce0681051124037bf523375737c3df3f8c900496f416adc56ce87feaf0eba26a6f082fc6f3cf3a8670167dd2d5e61dd6ca0000000b0158bd74ec549b77595ded0744784fe39bb924e73ad45376f828c99532eaa804a40be97be707854cbf568436f68472039e766fb9cc0ba82bda6f2424b966a8bae788893fad80da985980bbca25cbd12b51d03ca63800483bf908679f933b28236cdaefc8beee445f7ca034e76a56663b904dd0fd0fdf69e0b60ca6001b338e0b4d4d232400f8a0583cf1df5d2d944488b069e1e81e3a550457d12e2754af4c8e48991a922e5d2e90798d8812484a8754600000168000000b01bcc0b5b6cc1854b734d0d94293dd16ada717782713ebebfd7343fd09292bbcd83787898fc5aeae597495e0545fedc68fc4db790d7ec6b5da44bf107a2f063a242b55bd5c00b764f4e5689a646f0c8af885a6aa21cd6ddd69fc96b671bf13fbb06208a336ba05f6d0dba8acdbe82d50c0c728052a4cc380390f566aa1c22af74861432652984a0e12eaaa9cf7954a8451d0110628e17c9bf72e8df4ad00e0ad48d2172ece0c6f1bebcbe8d8fe31bf480000000b0015cb24c69db6e5d5d6987ec27fdd2f93cd9f2aa4820982e040e07363b21626385cc540164efd9f7ec9bbb6c7695eef8fed9f53cd2dd59985ecae559607a2b41fcb3027390f9ec134540a58f40aaa3eb3859937f30563822192ae6dbdc84bcb165a49d03e78dda77944c3116c3563c27251a7986dda84d96191396a68e6b590bf78e803c52e2e9e3b849a78d6f1effc102cfb77567aea993c83a436115d39f2a54f3be98cc9770b89213cf7db8b3071600000168000000b010c2ced7f9eccf341652e56187b00cafe9322e5e54c7d25c9508b2fcee3eebece080e3f3328d3dc2afeab867957f4154dd29f8579ac9fdb5e2e9c406aa1d76f9a0cb09068662984eb82a1e93f4ad1528d215b80818f64cd18ac16d8236de165d8a5f0022bd5b8a1928a3f68a09dfedc425815bff59dff84effd71f82377eb30f70167e3a07964ea9193cd0b9e3de400b084570329f013cb3d53146050127ff7fefe15ae0b6711c7182056f060ad2570a000000b029be048f796ac89f8aa530f33eaffa7f4c4982d598595aafd3dbaf9cd738b8df4f9b596d64c749a80f4285d7948653007dab719bdfbd43cddf4a39ad34f8cd86aa711bb1108bb62b6859cbce24c5328a591f864bee4534bee3221c4ef39f7b99027a1a985ddbf6bba376c1df438630bd1b512ffc1b104dd6ddc1b1954819c5e85df9130e5e30580ce449280a848b01070a3518750098eb2ae1d9fac6c082dfbf8dfb75027d3c0b2e164b23f00978924e00000168000000b003370fbe2cbb91a67fac35e0895ec5381e68c4962b3e7be04e122ca7dd5fa672b8e16e502eee529cd027df244d71449a02b158d758a60c2b49d8b4d2d9664462b05f644bad6aaeba0896e5da38fab0e8eb96ced199ff4a77d5d778a12d27628f696f1b7cba5c91b2e7676d96eddf88d201cb849267e14fbca2edf3903f2802f0bd24c11392b4e0938f4663e7fd214d051ca7be2cb2c6cef0a860037d35ea57d60b99f6468eebccd5cab96c6971029fb6000000b00d305f5d6e3bc14fe63cb7c8a84e472570606e8f153b9e0824ddb41831c45689d39b7b5d26280f3829cb8b920e103b9f4199016f9627cc71c76dce4f2817e454ee5abf225393d8cee00734744aacdbcd16ddc820c86d71da44f16ff215822a58e73c86c33de46eb1d1e8cf6c61b515392290b2c74a710cb91cd996cc99d6951d5deb63f4bab136a82d3cd46f6bc493a22aea1d6667468937c4ac536e0fcc2ce86bf502bf8edc0848e6dc3da18d307eef00000168000000b0211b2aa920434a64ec97c552ac35de16b54330b8c37fdf3480771fc5a253fb8446fcbdc33b005207bb4f91b1fe44fb5b6ae51195b9bf1f1f92756d8666831040b42865a60700ddce85f03a2b225c014ca515dbfa5c6ccbe81b7a5234dfc9d3cb99f2fb3499eb19f7c300220699ae91e529c5a3042028839a113e881ecd57c0063642f7e9b44cef3c127d9cee0c16dfce18cde6da237419f98dd6df3761cbfec18940d7caa23f5eb6754c67f8953308dd000000b01c4ab634c8b13bf0f5bd04716bf3c3635d6f60ee7461fb62066bee8f3f359b6119e95b22f3105e527cb466b94962fe21b5c456405e311d483a20b368f83f24c63bd674c80dcd737ffeb18b15160806e52378666eeb3b440416e8ceb2b408c0891be01160cea327e835e086b92b92147c07e6dc6a4a595e99a05b0079df3e497971041e257ffa8e053e1337f8395ed9c315e5c2a42e7edfbfb342ee81b6c85b47ee081f20c6cf342b21501cb05d8ed2ef3800000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f600000000000000000000000000000000000000000000000000000000000002f73700000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c100000000000000000000000000000000000000000000000000000000000003c200000000000000000000000000000000000000000000000000000000000003c300000000000000000000000000000000000000000000000000000000000003c400000000000000000000000000000000000000000000000000000000000003c500000000000000000000000000000000000000000000000000000000000003c600000000000000000000000000000000000000000000000000000000000003c700000000000000000000000000000000000000000000000000000000000003c800000000000000000000000000000000000000000000000000000000000003c900000000000000000000000000000000000000000000000000000000000003ca00000000000000000000000000000000000000000000000000000000000003cb00000000000000000000000000000000000000000000000000000000000003cc00000000000000000000000000000000000000000000000000000000000003cd00000000000000000000000000000000000000000000000000000000000003ce00000000000000000000000000000000000000000000000000000000000003cf00000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000003d100000000000000000000000000000000000000000000000000000000000003d200000000000000000000000000000000000000000000000000000000000003d300000000000000000000000000000000000000000000000000000000000003d400000000000000000000000000000000000000000000000000000000000003d500000000000000000000000000000000000000000000000000000000000003d600000000000000000000000000000000000000000000000000000000000003d700000000000000000000000000000000000000000000000000000000000003d800000000000000000000000000000000000000000000000000000000000003d900000000000000000000000000000000000000000000000000000000000003da00000000000000000000000000000000000000000000000000000000000003db00000000000000000000000000000000000000000000000000000000000003dc00000000000000000000000000000000000000000000000000000000000003dd00000000000000000000000000000000000000000000000000000000000003de00000000000000000000000000000000000000000000000000000000000003df00000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003e100000000000000000000000000000000000000000000000000000000000003e200000000000000000000000000000000000000000000000000000000000003e300000000000000000000000000000000000000000000000000000000000003e400000000000000000000000000000000000000000000000000000000000003e500000000000000000000000000000000000000000000000000000000000003e600000000000000000000000000000000000000000000000000000000000003e700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e900000000000000000000000000000000000000000000000000000000000003ea00000000000000000000000000000000000000000000000000000000000003eb00000000000000000000000000000000000000000000000000000000000003ec00000000000000000000000000000000000000000000000000000000000003ed00000000000000000000000000000000000000000000000000000000000003ee00000000000000000000000000000000000000000000000000000000000003ef00000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000000000000000000000000000000000003f100000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000003f300000000000000000000000000000000000000000000000000000000000003f400000000000000000000000000000000000000000000000000000000000003f500000000000000000000000000000000000000000000000000000000000003f60200000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000004c11000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006c100000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006c200000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006c300000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006c400000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006c500000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006c600000000000000000000000000000000000000000000000000000000000006d000000000000000000000000000000000000000000000000000000000000006c700000000000000000000000000000000000000000000000000000000000006d100000000000000000000000000000000000000000000000000000000000006c800000000000000000000000000000000000000000000000000000000000006d200000000000000000000000000000000000000000000000000000000000006c900000000000000000000000000000000000000000000000000000000000006d300000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006d400000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006d500000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006d600000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006d700000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006d800000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006d901052f4f7d40d5985bc4bf36583cd2403eca7c9073a6c3b904d5532d6d7253f7b300000000000000000000000000000000000000000000000000000000000011c000000000000000000000000000000000000011c1000011000000021c000000b02777de8a553a1233c18cd956e9c4cdb9329514123d4be2ea0da814b01a6ed3cbd0063b3b37129f7f4b02a7082be0642e90c4a575a4e2dac5ee76fc4f3974725f5e2637a01e48232b3065e507a0b353ccc8ed9340e4d762ca91c9eb6f63fdd033c70be247201eaae2b79bb9580b3dcfe6083fe92c3750f0c50b61a0f4704b2dd9229292b8c53132568b9701f3e5281bce016dd97f96ca3fd233885e698c03298d4e416a86607ae9aa22d26450782d474c000000b0034573196014d22b3d854960cb8123ebec7809e0ceb271bca8d294de68ea4c62749301b877e5455a4d245b817cd3671621712e64656e8f2d90be716bb5fbeee859f68accca62a16dfd5eb3ca3f20833b1cca2bb0bd0031f2b44d558e2734aed4cdd1e067433f0da5adbc511dd82b9c1e12f38617624d4e17d48d2f99e9c6234b90b5a71240148cf274a443fa519867711d976e8f781c220123f1b2cdaa3ac6af4d98c56b500fb6bc72b52cd2f79512d9000000b002cd72bb86129f655cf03a0f0273c510945a3ed13444966fc69b9a3d869febd15cba931c1f0950737f4bf37b16495fc25e2f5f72abc8bd24ea1fcfbc30e755862e69f8c36753d0ed92e885794eccf13afab52071d07d0b6b4bbf1414d458e8665e6192503c273e7e77ae3139621070410ec423c24ebe2913023e99d61af0b8c111d99d1be72c6133ce4a085e798c4bb42188653e1a59fdfe7a131036a2218e48b519128e4dac97a61a39fe6c95997e4f0000021c000000b02095949533e387a0ddc31a1ff49be6156bf779cdf189e64fd89f50fbed6d026c1f0ac8818a1f9ba1f6b2578001e3bb1633d6e0b14599c6706013d1726a6f63114aee5a9c7703a55116def3a605b5d7ccc1acc9dadf7fa7a0eaae39d1399078c8c82f3f2697d33fc91115e4d7fb71437b1226a8980bee49bc237a14386f9e120c191fa73917b8a88d785db70954e667af226a01fdb6b488fdd2c7e47903140fa2f3d3b46e65bbeed5b491491f8741087a000000b00803aecb5c90ce39db6f2d5f0bf540589b89913c0a95d59800ca0656bce1a3d424809579cfb0e06fd2f57ae715e6d36fbc4d907cd85ad4d39a8d642c01b5e438864265f00930c42fd7760ed0ee69e616fbcf1cba86fabff1f36aa895be0d303e056d3c435ba4bbbf2c0f86a3779d827e2eb10a823265f0019428c6f0799d54f1531c43dda35f0d7d9b556535118c96972ff766998a5df226af6bafcbc77ab1491b2a928a68c575c9abf6333088be58b7000000b0085a8447fe29b8529238d365b882da582b0cc636b132f86b1cef4bad0347aa8b6f1237a125c8b329ddf2e3a38156101725f8d226b3d7eb2d82b4a213f0223857c115182b088e2d10c1cacf26fb319421ebc90e0fef70077aabe3040a53d18aa8f71ce6d0af3bd6dedc3d4e2a5f4f475c25fb62c2b426fa251bc8cbe247f13695c780fd1befd1f5fb3616e78dcd2fd145092175b1d1e7f5e30cc771dbac4b897b2b000c2f3072fd3c57dd4fbe96e0c4ca0000021c000000b02c09dd8d6111f0fba202a719614d4aeae0e813dd10bd26c1d9d7c099261569dd279fa021ba1c7a64532203eeaecf5806674d19d1eefbbbca0b22b956f033bccdf829586978ba1bbbe10a3177e896f2dee7d8999caf03aefe9b51246591f65f55dfdd4b629e2c82a32bd0f1e8baeb2e45234c3ccbc0205e62e618a407df43244ef1fbf8f7eb3b48cb9ffa455294f8370a1ebb4d0899a3e2793c332c743c1a2850a251ce42d078261807934b1e391e47c1000000b028e8209a0130414c131444d927cc4bea8eab998394e629db9ec0a30d81b484a2eea88b48de18c2a81cd28ef2aa41b4ce305584ce8b2d4a64a691845aea55668c7b9596bf8d7df045264749b8f9eaf4cce8e0b4fad3e731ff73bfcc5da0a6b111dcf7599c294f3099e88379413d568db810c7e1d3716120d3d6df44039104259da9838a4d948b92f9fc388ad3e7a2c8e1260cf65a5a5787ae8de8580e64add33790dcc2e7fa42bbc1dc3f1fe9919b52a2000000b01101954b3a66b16a2a71d0e96409d9247ea93981d68e4e30052899f19816a17d8ad86c0938d4c0eb8ad400dbdf204c8777acbb140bc23777eff94782b39cb705ee7a6e9107963fa2b7003f74387891267bbe0606ca666d57859db25343c4623cca8241797e80e80d89d841058dd178e3174df1204297d786bffcc2e6e32b20029b176a047f3b8d38a286856cd4b009ea27150a1f66e32490290c715b6a6aa26a9bd13c30394ed32f48960e0e4c340b1f0000021c000000b03002c58074ed859b48c2824edd4e2e86ee85ecf6615bc523b179dacb99901fda2ca7d6563486a74e8d16c095a4fdada5cf36f87a629bc1418b020146e1524bea88f3b878060f6336260d8684308ac5e3034c03ce7e1422f8ee052c5af499251825ccd36fa6e2095f86e030533ade2b9f12a35cc9b46fcc00d39c988d5e904134e5a55e51ebd09033c3c1a4bf67bceb9528491e3bd0ec33185c1c891027b13a2498e9ed52927a5784c45cb480019f10a5000000b00673c4e653061685576b57feb88b91e36e1361d9f902e7dae0468e11e7b37b71a4f6f8bbeb763b4092a0eec44a536d1373c98adf0b3ed51a5f492baf2743e19d61aa26f230011660dc6d47880ef7bc3eee562620cf4f0647ede3e4a0a2cfd6da3e849f23bc158429170a4874b496f9120f83835325e1f617edc6d5c748858854f83a86aec48106a410eb92356b0fa19e14b55f07b5df5e126834db6834e62eb4f630fdc194af49002aafd88d40612ec5000000b02290d9187d1255cb572273dd8a56fa37efdd2b7842b729a98cec27fe977c10d71a2820a39579409cf49c50eea66db9ce79a1f484c957093bde35659e7ed93637c3bde504a81785ec094e2b2568d4e4bbc81011c7bde7a1bedb58a20e4589cbfea83feae6486d4af76ffe0c2133286f7f2034085610d99e87b6e64969d4d53067fcde8c7ae8b50ee4e85719c7043f650001ee3ea8bc70c9212aeb4bd7261dc1607382d59992836b65e19f0aafd4041c0f0000021c000000b00c34dace3215467eb82a579e7cc50d69dd40d7e4fbd50de2d3f9b7a240e5d2ab12ce635af62a8ea9209e37c9bc67ac03a4f3bb3d31ff452f1f57b732854ebbc9a7a76fd0b2a309061b165d40323c91610843805632ddde7634437eb3bb88c72ba6d7b3394f21ce718fa6669ba8bb418c0da246bff7e18a26c95048f38636be3f1b04b021872916d0d80ba6b2f701fce022fd02485457ede97ba9427709d73b1258982c0a4b13085b4d08311a28dc909c000000b027999eeb391b9220d35173d2c35909b5a14944f1f58a2dfbeb6243e7d3c5d16cfe81ba145b7f9ff253712d0f359a3670cb38230a6c18816da6cfbd7c45f613513729e9877c4742bbb30ec85124d6f7d7caa18d009a260787bb957d7ead9e3c11699e8475e66fcfbcaec4bc299b1d54fa1271d87ffc2994146c3c9b1bed7c6b68f0145ec14dbad09f7a0b858772283f0c18e2b1fcd6c885bfa5249333824d8693a9fc1e86195a0995df014b5e8cfed64b000000b01518f2367f03d067617439861817fca2b3622babab47a2875dbb8c2029111b2189f6a9f52ec25e5a17b8232ce3d2e3b3c1dfe90ec47bf1a85d979a959cc591d29841afa6d9c521604ee2b2c19f20012d9f8b52eb19c971c23cf9a5f6169f775b71488c375b157a9ee509673cc9f6a6f427edc8ef6350c1dd93671c408a74b766488254228b10e73297371d7493d48c521e482d76332bff734c47e93e9ef1325fef634920e4d6b2a7e4253eb795b4ed690000021c000000b018079db14dbd347f502d5515df00014e7aabfe5052d9caf6ecb8bd0006e89abe98fa8028f20708f46a644ed84445ea31141e069a2f834724f61883310dab0dcaafb539490fd12ff00d0d627c614cd796921a19b4385f66fa291e30a9d8363ad5ffdbcec82f9c5da4e6c0be39fe9c57b0251945a7d17a3a7430a11cfbaf01210c968548e1d233f8120984f67046a408c12b2c2995f6821859db90db39c5dbf14066e8a459c3897a5fa1e81074387bec22000000b011df4684180f16c666225a27c5f59e29c1bd1cd9d4349d01c90acc7f389009f4e11c5d0af1cdb0cfa69c883441c18a07e20c742c3b79cefc9f797e9605039879d7773526a1acbeecfed624cdbf891d941b965ee4970739d5a0adc6e4bd305113b906016e6c0e949b8d87bc42eb8dda6823cbb582b803efa40cc51cbae8acb6dc09afc087e14a69349897aa6ec251c84328f6da6667fe874e25cae3eec9d760ca189914fa8bf2a7b57e2d7c46c50d5edd000000b01646df43356b623b04c570acc5f847a6e59ee812763dfb289da4470e5d9192450206a710c4264c23e0611e00f9ecaee11cb2821d6673398c8de898d150d027d8ead5b375c86ab81ac7edbcc4400047a000acfe1b27c96efc0432c3dbb249312ecf533bf2d7581fdab2f8be4110bce28e045301875a6ceaafffceedda7a5fc3a748d488f3af8273f6279963082b7c3fe210e76a35424cbb2a473de41fb1cc526c39e5ddbe2f3bdc787fa0bd513755ed6f0000021c000000b00a88fd4df8e6e1bb7f6c8545525fb38a1b846e1c9dff5d5712fff634e852ea4be1a4e2de03b33f410de9b87c8ba5b882dc8d76dc6a10dce6ab1622a4288ded6d4b27667820a5e0c8bc77f94b63c9d82f993fba116cad001e5f6d13b598b8da091dd09d4659a0e1233c693763559e805b02a5cc64f959edda339f442cbd9a056939e25958f93049d115ca4e6b3f8d92c50f4a9fa1ce4d20e566209659f93833f0a13ed7b6a2e1cda3fe433f9826157967000000b01571a280f182357e5a7d9b0110e142e67f55c3859a437956329f4d363589120038fd71318a63ed6e879ab1343f17647edc674dd8aae3051a2ca5c60b914b98f28f2d380ad249038b6e34422f5514d2e2875b9a7036a77abdc5328f5cf4ddb60150566bee42986133e8cb4f997502fc5f2ba37945804828a4a5047fd6c1b7271a84c044ef94e29c18d49e84b39cd93f701c29bb344950d3a5a4a9c2e09db6a85f001310c870be1c90f71a75a79deb81ac000000b020b1aa0f7351d90e66e66b2bab2aa3259ed386316e3ae3221c2681a6a2d813a67f03506b55f55f99733029de8f95c1d374f97f00d53fadfde15d5c0037c6c9befa6e5528161e82a2d15b15e1af0a6605f6690808f82c2cc465b7f46e65e43bbf15b4b4f7548aec3c1cabebf7a4f9701b26c4fa9ea39d73c4cd572486c9f13b141dac2c9588f1d9f4cea3a9b78360e8041a26280890fe5189354f36a3e62925d396d2d8d5f50fe1110135ec218f882cd90000021c000000b010ef14817880c7bf66162bfc16266974e3928a8a7369fac0329b7f8cf84a2d9eb0105d76c096a7816d0ee5e1cd7d015586e0c96b6a1decc2bd783532e78d97ad526e008edd2b20efa9399a862cc0fd094dda476a1bbcf1d519eb1a3dfbe4737305d7da065930148b25f80d7889d333cf2a91309a7f9382eb9c9291116034216e37e72c4e3240f9ddc0185445ac12ad8b17a95fd73587cd0c7ff0dbb13cfd8ef18091302d59d3c8647077c208ed2effa4000000b003bb345c8b2ea79681c7759729c5984b2d3a0c7b7764697d50cbcb58b8e9e1754db04c3c2080120cf0b0a793ffc347a14539fa81255a6cbc8c01def8c4208d9bdc012f17bdad2b91b438baa4dbf390c9d6e2c5458c01a0b99cc3cf695f43e25603729b216002b6975621c2150e10fd6c09153e78fe57c7fd3366af91b3fc07a6c453c0e966848013c4c4082b2a7119730a816a3978748f5805bb17483624399b158c201068f342d54d32b1a47b319416000000b01676ca5134a33725521570c82721e9f36fe9bcb3d79589e4cf4892b2c59916a9f1105dfbd1c75471773ded8786683630beb547c6854923caeaa793b96440635eb65b31cec8d5aa2fd3618fa2092e7468704e649f3bece8feaa6d4d1bc0ad966d784d06f34d4528b51d1058e0af4fb82d2f0e2ebc387887b31bbc94a9f75b1a6dfb568d80eec55cf25b73d8a6986a918910e7f7fda09b05aa9f90b134ba9167a5d4e58d83a3e1be157195970ea44a28af00000fa400000168000000b0009af001f2bce62cd87a6f1785fd102dec93c2ccd10c3688b0079f7d7d2d1c71c9da0c1533070c216e894ce93e7925aa0fe66091684fd61d5e9ea8c5a12fc9f88d964bff5ab33f22c9413157813bc57c0c6287e7e6c76e5d5187506ee81f2fc3061a072bc585bf6faf182ab48fee8b583039147ff6e6b6a1b8f72ed39009b40a6ee0d8ea9fdd68e7641f8140d12f6621057786691ee08cca7438012fe5cfc80bccf76c85c13544b41a22c2ecf642a800000000b001baff8995a66a23bbff5fc7eb930c7b4610641160a9e6ba34e4595185904b20f6bf495c4b5c257ef610d74762acf3ce01711f74d91b22a4ece9f4f0d1167cf4531503d2a6ecb31e81c435a8e15048aca4e6051dcf20376ae0de0d607b48f1522359e6fe680b9632b5eccc563e1825a112799ecdf7a98d706386a0cd4912af42f3f1de769489c44d80edaf7871de852c1e17bd7b7853da0723d570a1bcd3ddcccc23fb829f7cdcddd24198bc8c5216e300000168000000b00e714a752127f8fed9ac552513b42789debe11c69b394c39ad36b32c189ba4b3bfc3ff718b65eaef7293a5f5bd38f295c39db6ee83bdfef11c03067a8dfde51e0a994fc9463b3785e61a2237d47182b8f22a06a3112de7546ba9e5a0fe5faa75aeb0ee380b7f64d07f1f96c832c65e1f0e0eb3a5a028451f97a3c1d1695adbfd32f6383ae8d42e7c8ab037556410519d250942a6d5ff6217464ed5690d3a789176272fc8950ff8aabb02e39773297c60000000b02ad70dc8501383db71dc2b2a0db81c464e1fe686f666ef3db6457528bd73d3fa44e9df1f21345fd182bc2e44b6f92294d9383c6fb95e45c3cfc1be171ac0a34851f2a4c92241a64b4b914261a946790dcfba1407a5f812a5fd473afe22b2983ddd07b862447a3137303132fccbbf067a2d3fcb5be72c398ee8771a7dbd61d6c08d030e00522cf52bc32fcf592f26d915003f13b2f12af9349f2788090e57b41b2d34077121472d84001f5db92aae83d600000168000000b01057f1e4ae282254e97af2cdbb912c4f950310c9869ea5d7d4a0512cf73ac56f573bc41d3ca94011117f826a4f1cf288b810dd108d4160403beb0754276c2ee7a0bbfee39039f2e4e1eaee34367b08f54524df51676bfe6fe298c0732d9dd949a1e57f4db4a1be5500d05ead88482b952c7b35981e9ed9875d5dc47dc40e756d04cc742a349ce81492ae5bb178b40c641d4d79beac95fd7fa1818136fb70db142b9c540942c270bc63309b6c288103ba000000b0026438ae1ebd981acbadc401a2c48e6b390dab34d063bf5bb4c3ecb8064440fb9997c9b84f7ce10582558a07bd39568bf1ae56950606a972180809ce3249c747aca42e40b45077a8de20f613b178b59df3dc2e0e09d2b932af1ce2d7d5a87a743646a61b7700abde370ab1872a4c88e315d63d0f6aae45a430026bc2334360100e3fc8525e4f9a910b8ec4e5bcd84ff0293800fa68c58becdbebfa3ecc8fce0dea1fd0dd73b0e7d835be0d103749086300000168000000b00a0286c7e23702334b645a08eb17056fe6366c5a4c8fba5844c2d9d80ab146d46b83d44327ad9d200a78aa0ef4da0d58b4af1f63ffd008fb625bc764e2e219b1a4e2fa38d75c70317ed86ea5c56c2121b14c373586b7cd467dbca90933a3b0ecc562274ac2583c037f60cd7ec4856fb91968d1ba1956876535c179d0e678a95afe8f5305d7a7e6e204cb42f6f474ddd0004e4afac3578a945fdc6720e0381098d946888139a2672bc1cd6e6f6281ec46000000b024bdb47f420d0fc0bff6cc087d896b8326ca2376a2a0db2f2a1d0e5c26bb889e3541249df2da9c3c072af41153f6d03e95176a3d2dc904bd4ced1885a18b72091bc5ed95f11d8eef6085b5707ddedad9a329840cd8d2090b4812414b71e47d97fdc25fc6021462ac9231a7bdf62a3869049d1c59ad2e5456ad27cf81bf989cf74116d9a4c34cdb94c64bdc78f224198a17ef5b75382ef3893c5612a13fe1f18c4da1785682efa6c6973bf3f35d8c99e200000168000000b01b09703d51b18aeb0b41dff0106b1670e64288a6b2f27d2c02342db6c8f86884077e4b9b9413a10dca9e638e80d390272c927c94fe5c02df5543d5a1d43fefef857491663f1da9641d3c9820b016b2cff451a8b18e08a74ee65a55be52b1446852f9ab3b632d9a91dc51ec23a232851c2a355ef0c06f4fbdbf45a92570920e83abd4e30ee73445a720834de37bf241900a1d7a12b5bcbecae6bb0e52ea501cebb6b37a6376aa624d038c1a8ab9c3eaf5000000b01cbdaa96f03d17ae4e1860b84cef34c1e627114cc285194cbcc9a3a909dea654011d150f548403c24e5abee4b0086adc6f9f999307e3f48681dd8e760b8bc2fdd7914047e45e08db4a319b45cc9ab446bb6deffc6924ad51d8dd5707198ffeaae239a304dd1878529a96d6673304377c04c12436461ea2452c862c04c5af92f9789d933730627d7a89a2815b9ae68f041a6236ef6b0e5bc99b2489bc878d0a3e29992f27ed1ab44073d7397e2165973f00000168000000b016f5c2ab11fc3a81132bc76b358cd3b2726fb1c60e0ae6523e3f5c440ce0753476395f1c3e8f36cef2b581f8b9f28eaa7ad6c008b3aea09d807373e6a714decb69a556786a922ba55693623c61b4e6b01923a16de5ceb0b819c7476f274eaa63fbf07f3c480e0fb3cff3cecdcb85e25e25411d384d9d139dd43d4cb2d98ff2ade892c9a5e2f3f9763bb1867f5d456bc714c338269a74cc63e3e6fc50ca3f5d2b5ebba900b1b1fbb537ce2c61799e5519000000b02d462c56ba1d339c434a0445d86cdf102939b8663876bd721ec4f54cc745c9ab63b2476371c93e34809f15426c88fcddf52c6dc26d3714cd0c2c651b77be9c0775c2fbe48e42af62831d48c8f27ad3ff40181b298d3270717ed412ff7164d19d83f739d70991b1df97242ff78beb86c028f00b6df82cb7ac9fed3a456f180fbb4b8dc8f1c5ef1945b9e53841f2323cda13ef3911cf03e0cf0a4de27afe2ac5495ef9849f2584d8fec24ce322c8b38e5200000168000000b0179f74204b2f50b48a0019fc9fcc2b4f6627fcb6138194803ae0e0b56dcd713576dd17b6f7c0aa968f6ba588e175adcc464cb0dc002819fe68c57c194bfa37bfa3161f273a2c2e81277bf592fe530afea7c37806133c232ff2cab207de636bd7202181ee176e8718fe37a0a79bdf19381529b19d0279b110f35f9a961e59bffe288bc682e5ce6faaa4a1fb070f06d088161782973d2025fb6973d7e3b40f2ec3edeeb8675dd98d1b5bc5ea50ce7d1f3a000000b022e1a3657dec30a6f9265acf9e0fa9f3964ca772ad1321850d3f622add25cc6630e53c576c862d11dc715e781e4874e0647127758d257abb773f47f3926cede5bbffc03c63f8af541938dc5a5676e28221150496fe63777d17f691158e8ebed6c5e7cad68ce722bd14c12d0de1163f5e068e5e9b116854a4779c34c11be3f7d4fbb5792470f218b1a6abbead0d01d4ac0539350e19da11dc67f1e6161400a865c6c891c0049f4902ae11822f02fc47b500000168000000b02e521348b6341dc0cdd648ab1c962ad48162c110a43762b4bcab8b3fd91844213ec01e163532e6b7080f1a026f42ce8de57c92a7f1c2a2c8fb3d84e4d3cc73bcd885f5f309b3b2b6e3e7fdb0a9d875e002ea6934f8e4b3e4a5fc208af9430b94c51d7061ceed8923f6b931a2ba190cb614beb895a86d5e2255371ec6b896241bfcc258c2e0b479c948935f40673b297e07d49b82ac84363403bcd28b911372f2127381338685b721bd641282ee4cc72d000000b020b5c23bb9f3f93e91e1da7fefbc527e1c52d2485725501c1c4bced5e460c466b9400ed3a2e11e901dfaf4926c5b8313cb7b9eabe9b0d839937343442c9b33e13bbd0215561e71890971c6df053b60b8b6d1ada9300803dcc8b5fb54ee7d39f94cb86c3f322febd191d6173159d6a2ae165ce14d6c2b7328670daa947edc42da8b1d2ea0e04ff99b434311620abfdcef2580424a432b48486e33b3d55b6fbc7fc75437c294c98b4bf2c46d51c8276c2c00000168000000b01593c4b4452c66a3c6c1037bd6c52ae5a3724be81c5f9d37f637e53864d007f28ea98ce0f8f220aaeaae40bf4b4ab89aeb159e3843156b0910cf1b6b80f83d584df56cb7529f703ef2dc465f5b1c0c091bd68d67719ffae6b97001c7dcf91e98e892782ba879d53c2341da7ce8368bea1ad2073547aa06c3291446866eec1e9580f300b771d8f9c679c72587f66847ba04da6c8aa435c970cd68287f877707591d5a0cdc1ba4bd1dfe5e83285da56492000000b02dab9d40faf470aea0897cad7e3cd1d6d9ffd8b2ce7f95d2af8c3c4bda2747050ce63f7115f6bc15db3d2dcac662b56d05aadedaec1a6ea073bd066455cd697039accef9da691b40f77e203a916b218ff1faa8e078c2ccb2cc70de621c7187a3af62d5272799f091504f3a350ff8e22d021c9149c463ed4f7697b4c317668c1752a2f86577067604c2a64229638e6deb0499c5d7bcafdbe30cd282163f8f2cf405ee3147148021da6c00b4fc96b60f9200000168000000b0151d959887ac6644b2d0d733fc87414c447c28930645d0ea3301f7046dd2d73753cb0ae50ba85edba77ead4421490f70a0dd573243804818be04521880adf649f45244dee152bb135bcfede7ac57d63a93e1fcff9905059a3d11bc6096f71ba1d11f3750eb887154c6ed4ae9c67c6abb0b8482af77b812716073b519c7e665786fffb541756a8e704c875cf7b984bbbe1fdd95e5d4a00737a3162afa1293e0b01e930c4ca6bfe0286893ed877864d079000000b021252be94705007106c275f331d005ceef7a5eddd05d48c7ff3f4ccca1c6d0f9b44313164b05d1e6fab14423388dce2b55de4a6734aa112587fa7abf58325ef431b7e094650ebb8a9752b211a72a38f0bdde5ee1cdc4a5f8bdb9341584c53e0ffbdbe4302f39eb43aa48db0b2564e7002a84584feb47405ab62e585c527c7964b788d3fc1f61efbceb56f1cae47527ca06c085a3a6b475d989b69401ecd6bc524eba10d6b53c2b915e26f04e5c60371a00000168000000b006178e504d3212440eaeb9249673441ca7c493b87f0c49eb04bcb0097c7f5e67c790765097c3356e69cbe1c9c047ca4201c4b9b1e6e222056b520bb3237065458b926f214be24055f4e22416cece2cd4c9c565c1ceac13f1181b6a6c728f59d11483a54e1f23eb136b48118f888ceabe0c2251e4ca2c8c1d1f3b49efac5f71fee5eac6d5f12a28557966c7714d90a52f129308c95b7eb502d362a906731e5098fc991dacd8e585c07cf4bcaacc17e0cd000000b0279f82805a6282d114fcb2a406c9d36077f216af9614c977c2eba452a2f2fd660ecb878429ada4acc04d927862f3f9b09a227a679616b2938caec1c3f3dac84dd4ed6404b8e739bbf87d3e3c0261ac7d9d247c89364ee3150d5b04c3f5e924bc1e09ae4b5c5ade68c1b8366bca380aec0954797c179a6c6b77c7bb395ee4b4f502d5075a78d8ce4f652d0e2fc058c8741e82e73470eca4c46e5002ceab9421b64df5ac8855006ae8244f7dfaf2252df8380000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360000000000000000000000000000000000000000000000000000000000000337370000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040100000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000403000000000000000000000000000000000000000000000000000000000000040400000000000000000000000000000000000000000000000000000000000004050000000000000000000000000000000000000000000000000000000000000406000000000000000000000000000000000000000000000000000000000000040700000000000000000000000000000000000000000000000000000000000004080000000000000000000000000000000000000000000000000000000000000409000000000000000000000000000000000000000000000000000000000000040a000000000000000000000000000000000000000000000000000000000000040b000000000000000000000000000000000000000000000000000000000000040c000000000000000000000000000000000000000000000000000000000000040d000000000000000000000000000000000000000000000000000000000000040e000000000000000000000000000000000000000000000000000000000000040f0000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004120000000000000000000000000000000000000000000000000000000000000413000000000000000000000000000000000000000000000000000000000000041400000000000000000000000000000000000000000000000000000000000004150000000000000000000000000000000000000000000000000000000000000416000000000000000000000000000000000000000000000000000000000000041700000000000000000000000000000000000000000000000000000000000004180000000000000000000000000000000000000000000000000000000000000419000000000000000000000000000000000000000000000000000000000000041a000000000000000000000000000000000000000000000000000000000000041b000000000000000000000000000000000000000000000000000000000000041c000000000000000000000000000000000000000000000000000000000000041d000000000000000000000000000000000000000000000000000000000000041e000000000000000000000000000000000000000000000000000000000000041f0000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000042100000000000000000000000000000000000000000000000000000000000004220000000000000000000000000000000000000000000000000000000000000423000000000000000000000000000000000000000000000000000000000000042400000000000000000000000000000000000000000000000000000000000004250000000000000000000000000000000000000000000000000000000000000426000000000000000000000000000000000000000000000000000000000000042700000000000000000000000000000000000000000000000000000000000004280000000000000000000000000000000000000000000000000000000000000429000000000000000000000000000000000000000000000000000000000000042a000000000000000000000000000000000000000000000000000000000000042b000000000000000000000000000000000000000000000000000000000000042c000000000000000000000000000000000000000000000000000000000000042d000000000000000000000000000000000000000000000000000000000000042e000000000000000000000000000000000000000000000000000000000000042f00000000000000000000000000000000000000000000000000000000000004300000000000000000000000000000000000000000000000000000000000000431000000000000000000000000000000000000000000000000000000000000043200000000000000000000000000000000000000000000000000000000000004330000000000000000000000000000000000000000000000000000000000000434000000000000000000000000000000000000000000000000000000000000043500000000000000000000000000000000000000000000000000000000000004360200000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000501100000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000701000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000702000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000703000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000704000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000705000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007060000000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000000070700000000000000000000000000000000000000000000000000000000000007110000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000071200000000000000000000000000000000000000000000000000000000000007090000000000000000000000000000000000000000000000000000000000000713000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000714000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000715000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000716000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000717000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000718000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007190118ed29009967db1af193f6fc8620824c8bc6022956acd33bfacbf6df3445226400000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000001201000011000000021c000000b00ca7abc3b610f88c146b5707d1d2f91ee73e1d8a6f1313cf9f560fcb9edd62b1fdf5b2e7a27c8f5fd9d42f8b6142b4e43694cebe226bd037255bf4e6935a06f089ac315b9283bc4e1a06f382f1b7bc9743dfb30229539979497925ca5cdb2b944c48326ce5d2aa75524c68732f27f86c30348188fd45d95a62b99fd602b384da350178c36d7313ef94ab835dce354f0907e72581700a60fcef92604cf419dc707113f9f7f58c1baf4488e0a4d890a8c0000000b004365fd37aff40d1b146c002a4337bb83ef5fbcca3b880f39a0051ce8702c2229fdd92a3bdc1d8bfdf5b81881522f963c3c21dc163304808ffa2174a7df651199c270da28ef967c75fa9477c2b71df6b2c734151d227023816df5f94ba3534d4fe3aecab8f8d3d328721c9bd0c41bcca2b6145faf3702c206b3e6202a1b5972b12246be6082c1276d8999dd19116035d0ffe2ca4fd4f9af0557587445c9f23925e80cb07460ef71f72a196ef4fadeafa000000b00d3be21238bedb571d8365fe593c67ef7c0397a33d7f90a4b1a22355e64d52cacea3ed833a9773fdf6d421740e25daaff1e590407b845e7283ed7ef43b2d33e6f04237ffc44f0931132c5321368b16be1e8f6d834c5efcb9761accf1d3873a1b3a587f8e71c61dabedccec83e2c3abbb26952f792965c2d843f4f70df62a3e9abf91f606ee3a31f1c96b69d32fa0419e020abdb78b7050be063fe8af5301ecece42c5c38760fa1e82c53ce043f2718a30000021c000000b0182030cae77ac0389342ca469d57e2f14a44a74aa495ff4e588211fc4e9d1f44ca420049f1b471804dd0d711300a242b6954c1934fcd544b21a1321e9a0c85225fd8df23d2f8bf175bb9e04d7a883df934e83279010a176170dfa20b74af8b394e34600dbe0f288ed0ff61d87a80f95f1e432de4d01389bf1aa901111c2d348621eed2f0de7510fe0b531f597dcddfcb0c2a731db47ce873f4a1dd63b2389e4b35fc296e9a07b0852dfaf00669953478000000b00442b64885f9598b648447347d584ee7ab3517e0101438a66bb489eb6005217fc8425f247cd77d42ac5c387bc5ada9e2b24aec8f7021a9786c2b2e52bea0d665078b12dab93602b14dc62158e82cc25135c46660f5faa1bf7ea38000d39e9dea88f3ccb8f3206b18d150397ed538a65e26e358ca68ea67c4e57eeb055ef6d7d9bd5891a4dcb807536821c2b28c0eecb90afcd7cd7d6af0111ec144f31906da08f23fdfcf67ad56bddc64c6fc6ac35891000000b02a72a5e48f809161dcbd40f7ebb701552273dd29fd8ce2f3d3ed2a4b2bfd9de227a6014bd36aaba18091fd8d4904af8ef0d838e0a0b806ec360b5f1ab441d4025366d09be51f6e71659ffd1d54bda28d73d9cbf537cf496426a835d6847f68b0fd5f8145f801986fb168d18cdc6c9c782a204f541d3589c4a7739776f1094d42766a53bedbe3b6d881fb76fc59af80121fe6e7f25d599b3ad68723af95471cd17c09f7d86da17dff04a55de187702f2b0000021c000000b00f41f669a3bd498509f46b440ff553a69db1a1beb642e753f0947b6d8aa7cebf8893eb3ffbad0798f485b2f33f0147cb38a92c5eed67decb45b2f51184f53e78af986f4677f5d9a536f2a87c2fb521af637e80031771c14a963eb374f119af86f80ec53d7d16a79e9a50101f800d152004e26fa07ed8f4f97d2ab70bff28c16795f6aa1b3f352d66c193aeb98900c22f155ce2a5a0c8e39bd632468b4eff69987c0f20937c33a14a34f6b9786997dc46000000b0149900babc53694a5dd1cfe56bee20af87f194a7b81a28354e4f7357eba3238f67adcec053ffde8f7571483cb2d1fb76bebe38092bef8ba09fdb760b6b8e2f3383b1fe61154cd86f92bd1a2fe25232f0c4e2eeeeb252700e226377e4d2d7f8786e2b31212d49379e53ffe82a46510cea1faed734564b8b2353370b6258bded66de212c44e97314934a81fa0a52e23c230f590d363ea9268ca9f6538b1aec65d5aaa4353deaa88737d6dce9cc92664a11000000b02621f0bd4a4b56f118bc6ebb78cce2e3c6e5b1221d38bc8f8e8e1b586abbfe3fe04235c1a410dbfc329cfca43ee2aa1081f4756402150f9f32417f7d693cc396fdeb755b4c9addd042ce24842de4e696c8b876fb2e364369e3ceb20356d607319f5f1a40db6d8d8fbcb6ffb623d442eb090f4f566193b8707f08592aab304b7fe988d7106ddb7aa8fdbbaadc162b7d0e2eeebb569fd117644216458bd3c16f2de304d9c7006a7e59ba55fb618b089c5e0000021c000000b02659bd0c8f5b33ce63eb7dbb71cae9144d44685092da300dccac5521cfdfc0578f38241022a8f76303ae6a8cf217c09542a5c9670ae70c67866fcd4354624b19533f85678e724a37803cbf60fab632655205aea9d471105e4d596ed8fa73237c2f0ecdc18739e638ca0836c8e533e59b18f631c5140dbd708095b9c9502dd7f002764f66392e60a99b23dab362a619e517eb9fc4034834b87fe463496a2107215d1961a8ebe39eec2235596e915fd915000000b022affbc623d27718c553b1c4a37416e0ce306bc1083daa6d3811d0d363e533fb70bb769cc6e5b38f170657ee52595f95dd0a735bd2a56617fd5d0b44abf4e59ee8c01250fd2b5595fc3317afef1511d2b6324374fad156bc375ed30df4b463bb4d49303678841f2f398e811bcddf70e4013eb029659bcb425559b7348d4fbfbcd07ebcfd3586a683a3497c390826833d0739b5c514f34157fed7ab27ce63ddbf9a057ccffe0880e449b05583741f6eb4000000b001e0ed08ecca85c72cc7274712c0e997697f30f928c1aed000c5d151d64485feb44d98f59a2b11813b0214bc183c0b662633028b7d9e4f3d0873d4ddfa8fb6ac2d2deabfc4b4c8908d5553d4d547a7be23d3387aa4d1572f0a7d06e281ff22a4c86bd57323818de06d573dc37b8a44f2182b00c49ea6f3503cfec2b1cea2deb27d062ae1c93c45254c4515f5c7e586802b4cc7094e69f5488652b68b6578b1acc7c3835ba5a89a84f62c12f628158a3c0000021c000000b000ef71c06b4fd397ea857d51f1f25a0c17c324984e90f94010509001f9f276db39c42e2dfc62fc1cdb96be8516a94535f12ea83f26d2fbc479547f8c56e53889864e8d56bc602163bc626e38f836ffeaa13c74fb042ff7ccf14573b05053d8847a506285beb9997d938da255c924cd791178da02936364769fa32ff0cf98a1b803beb63e8b843244fc780e7fa1ce77002c3a217dd2977dae81bda3fd1bf45672210a6592745e9fbd3fd26a62814c0c9f000000b0027bb7f6e3c27b6719990e335bc65fb4d096b7cd50640416c017693d51e4beffcf42685d60eb81338794ea67f6dac64c1bd4ed237c3e4e5a706f89f527699fd23bfebf76906a0343c6756ddd91390bcfcc5b3c8120a469d31835d5ebae329721cdeb4071394475c39c57c7aed6a944b01807351fe1a5c63a5e08ed159870fc7f86272f5fb67354f44114554556f61d302f6bc7d2c55e2adecbdaf4f7818db70a00c8b095d90da5e7d5fe3f98242a021b000000b02b05b389b7a332fd1bfe1a3d28649801fd15b5737255902b252ee565f172b7825bb10524965f7e44f40efab390d3af65723c5b0114fb8ed2f034087102d4bdf692f472ae7d27018566ae1c4d8cb3e71480550021d2f21cd21a9ac1738410dc580443903f4f764796106b730a29f2bddd119aa47b5eac83fec1fb4683a973ccf6d669be460242b76efaa65d5a11da7183260e86131dd998f92530be865302bbf96bc7fc3e8a25a493a74a640f0e1c5d550000021c000000b02ad74516c165962c631471ab00f649a244642143202d43fa1d23c643064c18284f18fc3150486f6759bc613d623e6b9f7d0ff86d48e69f46d6f0deb3b3c3127f32c080dfcaf279b31f860041010aa08d909af5e5a84d945f8676f1f93141bec50faa102649bf4682393ed07a31bd5d9b18cbc5977386ae95e1f013c4c86c577f0dd5c1c7c6ffd78ff6456b50aa60e3e80d7335f0d63fc326e2bf7d98bb43994a987759481f416ecd64a295bfb4125ad3000000b024d1e06abbd0af5e0eefcbdcc26da2dc41b12322469b35206bcfcb7734f6d485c31698b0aa735efe0b11f82b47757fe8ff4b96143cb225503aa2820c8cc9321991a0342eb31ce3dc0cf76c14da0a81e83eabde125a237aa50ee7718b77601fec0138a319ac193785db726599bfe18cc211225bafb8b31fd32f2b429e788b6057f96002e784ac2902cac497ce1a5e0e2204aa0ae3ef0394b3fbb56b055e29dde3c96a555f0e611f4fe1943c14616af85e000000b0156f78f217f33194f318f6e87c4ab87fa0f44a1cb05c253deca06363aa51e793c65f58c5520593203b118499936ccb8a3ffad9e3bdd18e5ae75459e4a8d1dedbded6ac405079179a949db2e7d9e3f1441bc56b0326967e9d7e8c21e6ea76ad9e9fba911a24f7077b1e13680a892bcb64008636ccea007df4c5421373f362877d71ccb0c3b8f49c8b616174c6e31e8d270a82770b852caa7295d169fcff06493a31ac719e708c8786dfb4e248e552259f0000021c000000b019c3e1247ec140f30cf278beeab354b241fbec4df8aaaf8ddae29a5dd412c44e9240a8c8462da7ab3ee13177c676565e32d7a83cd8c74f3512467671339ac4dbfa7233c85a2d452d2547ef98893443130632f824fa821b88a09a032f7da43c99e05b5bf1ebe2a639e47be27097e481a12e7ba25e43320af3e72ffea91fe4f09589710c0d77ff0fbd25141b541c366507089bf21611f6118a4309b81d7397164e5081995e203dbe5274254d3f1a45382f000000b000451312d8404f3168bd023e2244ec9652fdddafe4bed2a90b9adcbf830913e4066db590cd6bb1d280f9170589bd3761acaa3e1567890844969c3cb4499d69048c46477bf397e6dc97f2f60401158b99893e5d4cae23aaaf1c7c7c1b62bbc21cf6c3b6addfca8a23cbe8c6d8ff7ff276030fc0a723e5162e4e559234864fe1a163585ce29145e5241068fd7fb19964840aa17a104ee7e055c48a05cf67b24f415586cd11dc20ceca12f30f35000e48de000000b02db7875d86f4bb9026a135d4282fb6e0016fcb3c204f8739661b693150d8050f29aa50315ec53c50ce4084e0e7f420ff74cc10d0e9a2bbebf90a294b71f97b3e4f0df1f2ebfb388c709254e2abd4f8d5e6dab61900ee4d64f9bb3b9d786f3a43eeb4fb89cc271e66351ca01427a1102b17a1de753eb92f317143a4fef13824c2d07c81308437f0defa86b41aafb5d99f16619e27e109786e5fe14731714c9fe75aba56e0d530ec7e8e52d42d10c524890000021c000000b0232fe5e145f6103fe37a2dd462f939fbaeea22b048e379cd3c97c5e4fa92373091e41873a1015488efc188aad53d53107b6295653cfd3595a381775f54a4cbd93afb7aacf4d1eb6cadcf640e8bb8ade99437a96dcabc0895184dde50e9b0370ee2adca94460912a96b795e185fbe1158202708ad921c8e659752861ad16d02427a3fe8df650f0f688e28caf68c140d9d0047c38966cfd795332f35e4e9d4804b559c2285abda39af14385409f09bb0ec000000b01f746195e93f42f48b52ef92d30ddb4f0c898f1cf7ee624fa9c9fea284f2ae2f1ea58f36a29bda18dbd7e03814cff709e50062e67c9a2f4a39532aad143c03b6ff6107817a4af32c0312f77321982ae594218ecf9e5cdff097a2970160acecce658c1015167ab53ea30d1c2a9c41c6af1588111e903a34f9624805d43a9945270e04b4967d62eeb620b52dcf4a03b9ea189fff15633cc11e63b392f93d23624e28f81d6609c88d8a445db761a17ee313000000b008e52aa6ece58c1b97be7286a6d23a2989819981aad686e4024da40e333edb61ea6c76956ab58faa1e632bc38b0f7c4c6139f4d10e69bef2e755177f35f9f1cb8ffdeb926e24f7b4aa3963b2c4e85d6feaaa4f1f09bd89c249238d1d9b11bb96f5564b6a7889e5adcde81b7b74282bde282b5aa3b89c749b0dead879a2a6ce3babb63b13581a1c33ab7cd7e94bd18593148accaa96ca50b6bc65c0fae1fed008edb8029d77c18815e7396080b6d9f10900000fa400000168000000b0210fc8474c9ab122440b3cc7b300324d0c5180956418564b6e84920e8b1a95a4b494bcb3d96df11f624991e41aca81247bf7db4f2debab3bd9c33a37b4f76f90a3e3a3c93b7995e228b28a60d8443e98957cdbd9b6b5e5bb200f106c1b40483158ca0f0a0e4f41f80ee4e7f6b70f3dea259c30326f75249a88feea191b88a102a9a0a89d0796ffbd1e8e051bf059f5d214ad8c2714671d102333eee654bd457d6f0d243ef96f174ee51a268b9301a137000000b028fb2ae31843d69a0fb21c224f76cbb0503e8076b5d19a9912c9f3af879881a90de0c65528393e39fb6151a3c83b15a7cb0bd5cb60419295840aeaafa6ff02c97972045d2daa18b9811b92ee46d683f8b6f3c37949ef9ef4ab4e2407c1b5b0a7a9e49e37e158f134fecae0012154d57f1ea108603d52885dcdcdbcab001d5067d9ab4145576b1f0c045d8388cecbc3d41b194ae874a7a65ef29391ecd31e2eb50c1cf575d482244ee5cc41894e06f03900000168000000b02c8952f997c310cf22d034b0f150f746d8b1323a80c377c0fe96db6bb236014b8c2754bc8eb08da527f4716c41920eccb7a800cc0dbe505b0284cf746e2dea055c61faca073c5b21960e02bde158729cdb0e447e6be20db570f80a92abd168158b0300040f1c289262f3875bbd6342bd1f0f28dde629f8d239aa8b540acf7fa0e9f7211dd2b28dfc87b9925a9418a2d6280bbabf4129e518cf975f680dcfbc3b9bd9b94aeb5ac59a767eac98cbb740a2000000b0241e5955efa80f31f9d08a86547862e4242afa79a3d837b46de14b6b3323c43604272a54e9a4cd291a5c0824af1b24cd0e6bdd06fa4140028f35544988cd23d7a5dbef4b991b2845e8005be4a38b90c49447fee9f858895bc754ff1f4771352db511ece37b21ad332967f7b2131532332d822f72659c125122f861da6f6f4f44037dc4af9be2a997c79d4ad177662f7303e04b7f360543a87d548908a0e3a1bcce57ae920032106b94e456041c2e185600000168000000b006842eadb3f5a61a12273d79409a4a95061c79e7211f3994e4549c9f0e1698ad3bacb79f3b3f2cff8a56eb6fd49187c381658bb67f29360ddde8fbe8ed593c6ab9bab5fb676fb8c26ab87171b50e18b9c911555a6c7449cbc0ade06b3e2e6920c6510f4a725a7a3298d62ef4a06233851edcd8888bf538d2c203ad0b14b62acb95bbb41e7fbee7213d632a67d6a24b8f08ea2eadf33605d56f04d0cc4cdb653fff907a15bb531853fc00922efeb8888c000000b004927d1cccc8968d015c0eaf1ebe1fa532b16725cbf9d1920f8c178c6053242157098d6081d2ad076c9832ae5c1a87652308a2d762b94df6c28c327a0f81dddd9813dcf8370a2bce8ebde3f248f4029f02863c1500afb0e52563eaca9d4c810721264185e6cd25b6c6b6ba50925ce3f119871106dcb887423a5ba7e608ccdeb677e4a77b09894eb8e60ba966292ed7e21055f96cf9c161afd6941a338fb1642bd2d45ad2a639b68022bb989a74e977b500000168000000b02bfe9072ca4564ade87a5ff0d516b9953de6bb52d99f97081fd56dbe1a5c356d1783bb74ad56126d85e89c014f20516bac95fe98678db3c2256d30b050db83aa2bd2a6b8aa26e231bd742b6f00c5f70e1a2c292d0444282941a824dfdb28848b1f943a210b3d857a530c7a627c5e1fc10e6c0c0e63b009f46fca95e789aa4a1cb65d4f6ba7c5739b8fdc3f8af3f531b418fb50148b10a1cde169c20c1fd02c9fc611a9356bc5f4841c473ff39c15f737000000b0109c4b647dfabf616bebe4064b348abb133e2f289b0a9a187104cba0228706eef5f9d9df0f99f596f90553659d6b39543b2818f4b8279eecb2c1fefd2c037e86a540a8ffd7348a3420691878f978fd902f79a10e9c9a9a09b5fd734bf801b88466be8b8fb5c6121323674645d539f9ba2211981662a3c92504caf65f6ef2dcce56709e4a0ecf2f04669cd70368c166a816801e9819a8c46fd5a91e899cacfd08baedbb00045951cc30f2eafc5f13609d00000168000000b01e26e3da9c8dd0369c203378ffa3bcd3177ab30e356423d367781411e5b3d7dde74c4391658eb4fc8ef1aef1e2f42af12e4727194409b190f8cd1fe51006d8e46d48fb0ea6581e47f5335973baae995285593f1907eceafcb0457c8c8c8a2e34d6337c0ce4d492f4012899a9807c1b3127b6f70745ff9b09555c3d2d7836f30ba0d8d740d0a1198d9b6d293b78ee665f05b4fb9734a8e43276cb0e640565f8d41061cc857494e366b7848ed99ad564e9000000b029bf610562ea2f8141a766c4066bb9e6192229a30e171a45fee337eeb9faf0e4f782f3ae86b241bca06c1e85147c4ea7102ecdb7dcf2c3f4682769f8d94cb6e4ceb99d666275717c4552699b16054f7179693b327b9dac1f00d49e8e1e903a7d6b0efc6163f5e35671b483dc221940da2c0b1d136c7e311378b233801fd3cf9301900b1e95ce7f7c8c4abb7dd39cdd640f48855da18003abfb9468e70519e1007c181ace672d7113ba3cf71d6582a67800000168000000b00856c8497f5982660ee036286687b77387236f048120c13d5d982ce3819894d200db155e2e698f9d7c1914b638aaff058b23192bbad620091acbde9ae8bd2b4b47227beb170abe52e5b1b3955a421233adfe3140eb60a1363fb7b61685fca0c59b376cd5670e08886d8d66389e0205800e38f729221c8839bf527eafbc6aab849db7b5786f10e496296905781d4dd97b11c5e1b3467e73350cba710ac7fbad04a146cde0a26079c92b6d3abb85be8233000000b0121332d9b83f1eb954b628a71d0a60d51c3099c97dcf58062b91159491b26dc851658f0fb8a838cfb25364b2f710a9a1ad00cf1e1833359735b1cc1301d2de023b53133413753a4f9e64ee57ac26a4e6a16ee59bdb9a4aa6c742cb17f3c2ff2790ddd4becd4bd68465f698883004e9d320e7e282b7292e79dd43430e9dc455484900b46c8ed708ae3cb946e29522ab520fbe4a47249c0ff019be9a2af22c0262c52bd169b28fc406f3d980aa9a808d3f00000168000000b000c3fe4bbf860278a06bcfb1a3950e36e5f2c3d8ee7aff89e041f548bd1c5337a01d850a7ebf440f156f27dded5bfbf7c732944159442f81931108f3b70fa8c9117a72cdd5817d29948d0fead23133b8687b1a9b28264353292b6edb7d60cfecc47b5cf8961204fa168f8dcf1e58b47f12a0f0365b81ebbdbaa46abbb8a47b6df65e1f6fd7d1233038b1843c66cf0e8907816e59f63ceb5367585f43e91f614f65746c2879a589ba457a45feeb57b684000000b02a654997a9ecf981999ff2c3dc6e1ab50ec31387fd891c223acb5ce76d418e86b82b09ab5a95b1e0bf45ac3d3bdfa94203e4533e0e956fd6d42742337fec4c353b957628ea57bd715f27e75c33ff4e97bfad4971d2d2d1d7c149f3d5a9a4f098318e112b51dbccad6ee9c634603e3d8b0c16d2d7c7e0c34524dc853bc71c9251ab708ba7f6e96ac5138c7be829930b6310ae70d7cd7c4f00f740a557f4193d68fd95dc8c681bded14ed4635632812a2600000168000000b00f0017595b152b140577470c502f87c62a0ebc116d5d8d4a1a657d343ceac4b36b935ae8f19d1629efccfaba8a5b72deda87657cd5a059d04db834bcfd9c9cca3891d588a8d3303bc1982e9f78d1c4ca29c0414f95e068113ff7636188762a1f2f20887cff2b9ebdb973afd31eaa32b1222676a0d88cd8cb8d09c221f59a7423517b20a6e2d0d0f912efc1a8e6d64fcd154104392452ef918cd5496f9e955e9a7fe69974cbda578cbb76e3c092e85446000000b00e810ee81e5a1dcb2d5e9deff3e0263ef69bc089f1871c143ef5745cb257bf509b36afa5cd8d0a8cc4a06916f2273f4e56c32c7d94addc4f2cd06783c66695cbde0761221ea818f77795a6d08bf5f856894ee0bbc3a4447f2352237b72d4f4bdbf84ef6abb67f1e9115755fe072ff6b7229cfe8cc910932501e39609ae81d8fbedf95a06d79430e15846c32d4ffa42de17417cc458e1cf72598a35b42fbaed2f72d48880223315a8a3a756a390ef8a7f00000168000000b0189770d72519827f18cf2141a2fe9722b2d95a2c5ce7200b9fa59c10128dc8b9eaa893837509ac9a79d9e00ed16d7b7bd0bc247dad869a86af437552d0941e17d319abf144ea8052601970878d453470a8c17cc6e62919c43d60da5da619d1b981e4838dac92d15c067487e92908e0880d8dfa7fd74a66ba7be214ab2bfe1fab0503e14a30861c6e0017a4b3a0c1b19525e446f0cef3efabb507b12300a7be7372f287f61e109352a2fa669df2ae136d000000b029e4982481de38f26adbb529ec3325c6632d71e80729ea2e602ca18b012c1e955066a16a849cf74c2706ca001f6435407ce344f49b0ca461bf47cfacaa7f476bc8ac0293b818ff872ba32d74ee330d7bb9f2b64fcb88313c0b2ea7637c2a35d755586f950f4359d4599b209e2300ead61636421fa5129122872bc3fa7eb9358b4f6d24a97ce502ab1a26113e239fb31428e01d0444101c1721ebbe140f87f8010ce14743837b1915482b17b869be97ac00000168000000b01a28d275298e65125b9d618fdf97d0051a47749b15dbf8bc1be27bd099cb937d5008d3135f3c73ed3f8072552f9094d419e3916acc7dc3528d8daa8233da36bd802104272a868ef9af55ce46dba3b4f5dad31f66bb934eaac3ab29f1ae6321ab939e90309bc73f48b4d4ae49cfc9fdf91b2ce31bf635b768c8fee24f0264f32e461ea3827a8d49ee0c8e94150eb22e192db92d89716e08d2ad873d1926dee58fcb3b1268bf180957b011fe60e7233b50000000b01cbdc1e3bd550523196b1228d77874d2adc5f06ee61bb8eec02c265cbe8e2a10a360a7327c62398bda5998cf75345106469f024758d835e99485ebcb3bb50d6fe5ac246cbbd744269187789362b51a5efbd68101edc740f70094b982228dded54aad8d96fe17809166deebf78bdc3bd72929019f200da5ec67253bc157f79b3ea3ab4b80cb303d4e93b14e80a08741521eb03ba2c9899bd2a71bd94b7d1a47cc719c49890fd820dc828dea6280ee0ed500000168000000b0236536cf23a4eebbec50fb5d269ace7fea5c39e2d105f921f610254e222e4975a1e718c42f6c7acb2719275af218a2f8664672c1470b163981fd26352c6965bff85860c8424cce2c8efb0ab11046a13b6d84c40df067dabade60c605e5e2b166adc94d8600561713075ea45ac7f027b92469f42a244566264359be5e6112c4fcb1c1ba11fc4f29c206c33080ad2d5fb20f3b93c1eebe2ba599e1330525d01c9e135612b4cf7387c896783a8c09845e19000000b01417e4e2641d10cee4902c3398f1cee7b5854d9f82f78afa1327e83bca18242b96b0e4fc4408d37f51ab670be3225fe9c3c0b99a8b69b84186c4e72a4152cadcb5eeeeb0b2d3489e1fa7d65ed19d167cb9be113ecdf121f112da31e1c33fa634c45ab9bdc125667f1a209d69ae82b09406e30b6094f6547549d855942cdb604b6bd0962be1ea5840b4a2949c143f6fb20c0e88b58bfa4ead4b07d3c824980f9fa0a3e3908805eb0b2f0b603770265ce2", - "calldataHash": "0xbeecb5a6bf19c759a9533ed48dc2aa8d68d15723c4442e422159722d770f7a39", + "archive": "0x17487022538c3227b4b891777c671e7011b13202dd570a112ec43e79eeab3607", + "body": "0x0000001012e5643e26da426570dd999e0e044e5f83d60f3cd813c55059bc0ea0f4a7c9d413b2d2cea949fa0876265cd8eee3a4dce1e243783562ea07e2de537f469f7bf627abb3d4560e786bafd52f77ac52dea36c50419f32386567bd969b0c38e1bd7405d339cecb99fa74bfd631917f965357f0341d8c4dfe6a8f4b621d8df54c82941d560ac24523012499eeca2594f20ce238b7d21b98ad5c638767d70ee05532c2183e6d64e69b005709dfc4771c7ca5981adc54f3e8bd1b00222461ae90e44eda2f1d4572fe0b0b23100a7ea6d4780b25e826e41ca9e71897e010bcb218887b3d036d44eb30a430b5cfc6660270eb5fb7f274689ac73dfa53ba9d0739fe38637f01f7130af8c5888d4c65ea68109a1d58fe8d7d1ae62098857b0a3a3dcd393ef80ed8bcba6eb5e3b4887a32c51c5853b97a5eb59c87c520f36423c6d7be06071821ca1719330de5e3c51a521778b49cbbc1d53f8ed42e0562bf21ed72e8cb9a410b0e82ef5f7276df41353faef675fb408aeb246b6e2f704cab99bf28d1427e7b0fec7b9929c6effdcd045d3fdcec1d1b73faed495444699fab936630d69b519f0bf4f1453db36439419dbfba703b849d1aa5774fe9a5325e5bf3e7cdda9d1f7f2a9c2a035c72fd4a3e383306aff03448f9accc08a2c665837560cec8675fe2512bfaef35a8fb7df08a81001a7fd4903849c0371dedd87f31295f46269c5205dd00000004380000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760000000000000000000000000000000000000000000000000000000000000277370000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000003420000000000000000000000000000000000000000000000000000000000000343000000000000000000000000000000000000000000000000000000000000034400000000000000000000000000000000000000000000000000000000000003450000000000000000000000000000000000000000000000000000000000000346000000000000000000000000000000000000000000000000000000000000034700000000000000000000000000000000000000000000000000000000000003480000000000000000000000000000000000000000000000000000000000000349000000000000000000000000000000000000000000000000000000000000034a000000000000000000000000000000000000000000000000000000000000034b000000000000000000000000000000000000000000000000000000000000034c000000000000000000000000000000000000000000000000000000000000034d000000000000000000000000000000000000000000000000000000000000034e000000000000000000000000000000000000000000000000000000000000034f0000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000035100000000000000000000000000000000000000000000000000000000000003520000000000000000000000000000000000000000000000000000000000000353000000000000000000000000000000000000000000000000000000000000035400000000000000000000000000000000000000000000000000000000000003550000000000000000000000000000000000000000000000000000000000000356000000000000000000000000000000000000000000000000000000000000035700000000000000000000000000000000000000000000000000000000000003580000000000000000000000000000000000000000000000000000000000000359000000000000000000000000000000000000000000000000000000000000035a000000000000000000000000000000000000000000000000000000000000035b000000000000000000000000000000000000000000000000000000000000035c000000000000000000000000000000000000000000000000000000000000035d000000000000000000000000000000000000000000000000000000000000035e000000000000000000000000000000000000000000000000000000000000035f0000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000036100000000000000000000000000000000000000000000000000000000000003620000000000000000000000000000000000000000000000000000000000000363000000000000000000000000000000000000000000000000000000000000036400000000000000000000000000000000000000000000000000000000000003650000000000000000000000000000000000000000000000000000000000000366000000000000000000000000000000000000000000000000000000000000036700000000000000000000000000000000000000000000000000000000000003680000000000000000000000000000000000000000000000000000000000000369000000000000000000000000000000000000000000000000000000000000036a000000000000000000000000000000000000000000000000000000000000036b000000000000000000000000000000000000000000000000000000000000036c000000000000000000000000000000000000000000000000000000000000036d000000000000000000000000000000000000000000000000000000000000036e000000000000000000000000000000000000000000000000000000000000036f00000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000371000000000000000000000000000000000000000000000000000000000000037200000000000000000000000000000000000000000000000000000000000003730000000000000000000000000000000000000000000000000000000000000374000000000000000000000000000000000000000000000000000000000000037500000000000000000000000000000000000000000000000000000000000003760200000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000441100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000641000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000642000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000643000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000644000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000645000000000000000000000000000000000000000000000000000000000000064f00000000000000000000000000000000000000000000000000000000000006460000000000000000000000000000000000000000000000000000000000000650000000000000000000000000000000000000000000000000000000000000064700000000000000000000000000000000000000000000000000000000000006510000000000000000000000000000000000000000000000000000000000000648000000000000000000000000000000000000000000000000000000000000065200000000000000000000000000000000000000000000000000000000000006490000000000000000000000000000000000000000000000000000000000000653000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000654000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000655000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000656000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000657000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000658000000000000000000000000000000000000000000000000000000000000064f0000000000000000000000000000000000000000000000000000000000000659010f3ce73a84170550a89b6327549f153857338cb67690d2d45e2208483cfd1b6f00000000000000000000000000000000000000000000000000000000000011400000000000000000000000000000000000001141000011000000021c000000b0156ef7e198d0ac477bd251338e3d1634241fa3f690038e7ba3ce71035969de15f3d565f48735eaafde8315a1fdef211f897fd579e26ab0a9ec1d67dae90dcea5e87977b0cacf9de21c0eee5e0de9c15ddba33b72908db0cf856c713606172ac30d7377c98c52f8d0d78153b9f0fd194b0b95b922e0d6e7f05784ac2b32b0cc0be8c925b114ed0e1cc1889a8de7fefad22b19c69aef9e37f7313cf1b7f85e8ebca9af757113c660c4401c8871feac4222000000b02e703de97d89a6d9de0e2e52db3a5f6655640bc1deafa21642ec1d09710b73cf9fb49f8a209bd1bcc83eeac46daac9289bb7cd4f11338620842352f30ee229340444a500d9cd1b7fea0b1a9e3e8cebeab7f8793b4588047d0617386effd575f1f0b27876aeb574f41fe8464e927a36380c6adbaee86efa34150dc8516cadf73971b7e8319fdb12472e116952c4a01f8809fa0f212a69bc7a59aecb31785446fdb6c717dbc798daf16ac27651f0dae349000000b005bad2516e877d9654cfc0e50ce0124b390a6e40919025dfb46fe8617645573e11d3cff4e17a0849320fd94b5ffb27e96cf49592933f818c4d8a1177bc14c7c8e4d8e2700678c8149c7605f6e4379b1fab1c4148429f25bf7aae4b28d8524a5238a5c2a95a2f8ec334b39e718f7257061caea22d109fe88e9f4380e22d2576f3420f0478e70dd692957030e005644d5514bd8f489ed3442395388afdea102f3696bcbead48a96c5288c31e21bdb2439a0000021c000000b02a098a1245c2cb63e4b1a6f2b572e1a276f496e73eb7334e720ce401bb06a791370e85ef1b02e4d9ed0b73cc638d3e4d08e158d694ed455adb56cd3b6ff08488c4092a9e3d2b6c9e9e390f97db697b152b23c74d7ebdca2387869d8fe3437f8eced36547cd5d5bf49fa18b24d00848a622aca6082ac01609f08da7885bd619face410d8582c2b0283b61ebce6454c4f70236b9904aec5aace24c756bb35860be5f0382f76bdf70bd983d5b1308c231ab000000b0141cb1b960426793619075b6e91af2c748970fc5d3e5e808f646cd25ea2a4d017b4b92d59f4bd0d07e882d2d271f6c74b4672eb7e62cd93a064d5aaf4195facbfbe04e1042580ac295af97eeda514d84714f03d0d203d3d012c7ecd595d6badf52f37ac3aca11d962711fe36b72118501fd881522cc110ef2637125af9c22b43db6e18ea6ecdf6dba4ffdb4e1f6e7e5e2f5fe346bedc236dce26542ceac8dfee8e88a71b5a0f5c1a4876bf2c2a401a72000000b00a150237add5af3ab0bd6cca6ed8b9d5b1a1b0e5968c6a0d9b7034afa6ac6f0cb79206339ffc5fa1034d93af473f0ca82326c78081a7dd5ecfcd87ef339e25e6cfe29d563ddef39b4da619262682b2bc5c7f3182d22395362d825035c9ba6082d79cd5c1b936d91a27af6d49552990651601a780a8766ec2d2b89466bd90c6199f1adc915746c533acbb85356100f18614fe4951b37a9e985cff9a4b5c89a7a5b06649ababff6754f9f6e2ac45facf760000021c000000b03054c2ab469fbf54b80831f917dfd88530ad4b3f3ea1c75b8a920d57fa488d7a2966c1a3ee24eae0db1576548a399ae5897fe4383fd636e113428802009be90b4919e2efe0313f53b1d41c69597b97424ece1b20e32a5972ad1071bf98c9a54e6efe071ba9754425d533589c8194454b23367fc0a4218bb711cd47a50a9fc52630d12256fcfd47248deee1778d622c801705056d1221d63f87268b54128c178aeada6ae10fa0959123d87fb90b79de8b000000b00ff16f4604021522f335fb332062f35b70a8915973051bd555ff0fe941972917488878918810d93d3209672e0d18f40f85b221d16b49ed0950075829590155993dcceff1ec0d9adc7880b84a49c35b425dd5835819cfdc358904cad92ba3d58282a40ebc164af2c73efb488318dfc92e2dc0fe1e6b815df02d194fe7338ea1eb28e11be885c94a0077163b8cfa811cc92b2c85fd24afc90d46c68980456e2dd5a5f308f8013718fc10315ba71376d022000000b000a1c5230cba8f1c4701369226bd894986d88bd65b73355d169ceee9f8792de5bd9107eb31313b24bfc68d5d3d7d7e2ac9a33d8413400bafacc31caa0d81e5bc4b3bdec30e64de90aebc511336c1e8c2096ddde0b1bca9851d3fa3b9a88109d081d39edcbdd876a7d4a6cbe7b1f045ec2a8d85b84e501ec0ed229f4a15dcfaa7d0c24d5ab7778b3209e4e68183cf726404555aa228f57121ac347fdd38f360c93840d4f279d30df6696bc632643438980000021c000000b0138da2e8a932143b7e2bad1843542c7cc7852225c6a324e855b27ece168bc36363b59cccdad0516cb62225f6cec064616ed6fd17d2b01e2529f9785788e67ab3565e4e89f173b2bcedf0913a878df28ea42c9f55413b41d8ec59232abd2b670c6e268358d449aabc4a6146a16d761b622d20885b5e90efeb5b61a50c7b31297b7598ec7c9cf546c719f2cc9c29a1151607a86267e9803d699e2d400891d13b9379a06ee51dba6d2be23710dce9c29232000000b00d3d54fc1772907cb9f1e4ec4376fa4f2724b53688758e5f2de099a85fd5978c63124ea6cf812bbb27e0d2d84355c49d8e6fe9cac7c8904163a7a33bc0d454b32d1967835b9565f1754444464e414dea4d7861add8c459ff644769a944429f4aafb448d989a5e05f95685dda98cb99c20e2437d8ffc8be1f9cab84f25902a187f45f7956310cb38cc4bc70551b326f472f93fc1cffcf777c1135304f4087071b68a52a3536a20c2b33bddda7424c89e6000000b0122070dd44dde48857057e6d37a997d57b8a6bfad519c8050d82acda690cd343ff197d6d6ce2c312f035a1fb40e99031b8804ea22ffce74a7af0bdc9fa31c86863c37a96e3bc39787740818a9d02f5b3d0a194f705169054f22c51272fd148492e1f3cff435299b4321324d4e7e3c84a1f4f1c8dd13ffcd5821f9998eecfa91c8959020a04b137589004d7e499164e8c0885f312cc427615bc02178eadb10efad58b1f5776c75c507cc32723667b08a90000021c000000b007c59b02039ae1f92477d3fc490e02477c4c49b17fcbbaecff7005df61e5caf5ffa55882f866b69046094c03ea4382b59fc34c2f33d9eefa8fc11d77b6928819a6b769468101b0d4a7751e08bce7b1d2da2598dabc5d17967ff9b1f7851abc7959daae09a84e9b78cb1e57633644c1341412de7b82b4bc12d68f7a3c0cb9621e2602803c8d6f7214f55c4e9c920500ff16fb48e92f887758cd2f9d68b5bc6844a625e110495470bcf8fff2bae8ac150e000000b0195ff628eb3f5dcd4421c7675a06b63fd5064285ad3d7186be6064eb0f093b3a7542624ad788e4318c5b219a26494c75e230ae0c0ecd340c2f1e379f692319c7f2bb030973386cd6e6a9dd5797cd199722735f1eaccf75898bcd8f04a1ce5444b6131d9b86c4d2ec3930fb34c829ecdf14b5ab6531174f6accd033cad6229a03ad9c28c851a318abd3d2bd52488b2ab12892e76f493e9b9fe5b53bd3a9b9735321becf5cb4397baa145eadb64497ef7d000000b0255165d66fab68885e340c460c86f5f7c706a9b1b3c5200996e32177a2f7cba279b12f1afce13d7097190a4cd436a83c2e3b6ca66dcc4e769f4f3c609ae9a9f5eb079db237d4ba937b23a43032293a4208dd58371fe606799ba3a3833fd664162707a4876688d2d7c838f07c632b7de1136e582d36186c7807c47f315b4bc61a74eca26a1fa8523cccbbf6c3bc5bf67117857a5c71c916ed62ebea426b072cef0588e9eae02142a1511e782d1544fd880000021c000000b02f40cbb4d14a3539dc1107c5afa180adaa7cd56cf452f9a1b35ca0696eb5f99e1e179cf46581bda23d61429a902c8805c15150de59f0210c12ecb3521f0719fca8af2b595c65c4748460ef121a3bd4abe22d0b6f0767a3821c2a77eb9bbfb6782c290b370e5efd59c46105d98a20c1ab1d5dca8ac4d99d01486d15e17c44224009b3fb7b4ee07e6ccd3e190da8400b7222d55e395ea7f6618618aa7e350d01c3bff8810ddc32050124df004561bb6eba000000b00b11de15af1d1750f0f6dd8375a7adffb365edb5184e1a312e5238a2954b598ee62e4a2a017c5ed85a72d6ee6d1ac9723f3fd8521e12d8c866f1b017b5cab84469a1c724cd69caca5aedd849f331afbc06c72628cd534b7b9de1fbd5462fc0e851868987a91683eab59c8337f981c8fe1506c94d3c47146f2979815591027b48bb7e15725a1aac43fd25069c92c42a451e66f855514f153d7f4b4afdcba42875245449fe3c2da7cb30c42eb7fe00b0e8000000b00997c7750644ec07ed6e7a355e0be515461aec2fc6ed7c3f39a92201fe35af673e1acc9931ca538e264b0605d8f19a785ed54f767c7ffdaca59ca7c950a781f0e620f2158310e309d2bb73bcee00269f9c29adaa4d61486a51d7dbaa95538bf0db47107e4da3a253ca30919d5278d8d0179db4ef28a11fca4837557b7e02ceca85bceee33e8c2b0a7b339bdb2649eee70cc81edfe7bb26575b2ead15c82ed7692a8658425226f2e5147a00fb598142b50000021c000000b0243d77d255022d810e154a33c440cc3dec3bbc65957995f132aef376435c5a46f04d520cf8a3f86bbf2f7988dd52049792a0373d842be6eb380c5c943cf915ad7d942a9a80abf56bcf5e9145fa89773121d5f800d3bb2e1f75546cbe89c84596ba0e8169ed6e4b10e3a908376714c6710d3b989a2c7098ade3252d9a4d8172a965bc5bb27dfe54fa6a467c7e2034701c0b2ffafe6b32ce22f220fb72cd425e2a0bc1e52a9e70842fce1ec95ee79b8e91000000b00a30e3e8eccf8d738606796e3eb72f8a92398655a6a72a9a4935639db0512fe8ee4bfc0a5ba980ef9fef4cdc48df4e14dcbee08909afef6fc48b399651559395f797b2a0d4841448fe8cc4410a2e315def3f1b2de4f42eb7656c2429b737cb2fdacc7155499a49e139ec1b726f12621b0f33c365d0e22438b15351adf84a65d6d1069bbe06a245818cb06b4f1a4cbc242a08cd05b2a96aa313b924b32d04a8df0e6f3bcb1004ca0909acd4220c9a00cc000000b02a1241423788f9b1b192b6f56174a0381c8b4fb839790dbd6513eb8bc2413319e5e1e6585d3d2a5db2812a666b310a62d4bb5d55d53948d26702f4287c606ad6f0c330dabe6f685979b578c49322d5eb6511b37b0b21cca812deb17eabb7eee865cdd2cae8f0791aa2ef199213d02a3002ebc46bb3b489f705a5599db0a49d64c83b84bb033aee1e684a4be427570028097cd135abaded10be9051c616224ab0fb383abcaf00e8ed7c705e86cce900840000021c000000b01f5f3e839df2a20b7debe1a19c4bf7edf5f8984ab05e19878ce1935e3876347be08405e1bcc18fcc1d99ccee6dbb19fb3b121b2042e570a432828c99afacad517439e7b44b20ad521ef4ff1474c395da07e3b4ceab373ba6d61ebc3d2192ff5e1b57ba4be6fab396388b39a81917cf9708a9d21f89ee3862e5ed3be64ed6229937cc10477f4bd21c5c7efbb117cef3a52bc2f4784c1d4a17a341a1dd93f6b8ff577bda2e1f1a0487fe8253950296754f000000b01a5652f8224e3e326b00f2a28a57befa267be3b85d5956357e6c580085f95db681bc8f67632dd8b4eb13b05bddd97ad7840613c72f31ea6984141fac0399d67c863c6137f998b9ede5ad5bae79eb1d0572778789b054c85b72090d7913288f39004bc67e6876f8288a921c314f6803ad1cb0a45f57adb8ff3fa54666f4e660d8243270b8ff24da60543f8d06184060b80986dc8fb54746756219532800f98a4ebbeec381666db6cdb9a76b78b069656c000000b02274ab167bc88b1b6c0a5b1c188558b59a40ca6d512e581f31488f1fef0df8657a8943b662605ab8ca2c0d2e635c3219ac8f2eae05e7ff83b263776c54447cf6313222aac59ae21f9929158bf93bd66747492b3f660d6196b0d73e353168f44cc20df5750ce4607d8fc9b31d9800678b2b9ce7ce4f08b822e696ec9a6d19627f7bc3943f95e8392a4c9dd85cebe3eb231855809a595bf9b06c671f08a3fc46ffdade54d36a6caefed7264a03da9d7d2600000fa400000168000000b02e74f55e874ae4075e437344895cd0e94daec8abd33ed6135c466291c2565da09a30eb596bbb8f33f03a1c02a3e2b8205e2647c784c5c8a9da7aaa0aff93ae470586b13de0a7b9a5474cb3cd37895111b2d42e7450c12a4fad724c546d11e884ad57aa918de78812394226072d40a27e262841146355b97c3e7f7947862d8e411288499beaa62102ff98807c7be9e21e2bc91cd7b03b09ec8565893f4a7b7ef726b2bc2b07a30d0703b456b6a06b909b000000b02f457eb53b46b6d62f456ef317edc4aecbd810725a0cc7a2f8fa614a8b0876e713a5a413ac3ea084c50a537b8d12e295fe4bd31522dc53ba2f19d43facad322aa5b39de43da06392bd1777c6c4b4b798adadb3d887d40b83c0dd86f3cae8c6ecf7132cb069e5c90343ada011d93942ff11af24164d24fb281fd879857fba926486549e0229c9da56d91d0ec4d66c12c815afc04f7b9502c8d7b8f3f4c066d426a9f63d1c1795dfb1bc341272f1769c4c00000168000000b01821c345f41e2ce547b3fe924cda82b069f4e8753639c9f74deb2e3d1066115ec5da118dddceb18a83a16cd784695198aafa7149acc7919b7a313e8c8a1037bdc44004e6895e478440ad03905e21e313a494fa46824de03884015bb691bd9abe0588e33cb4d644ded82b68613b1b5f1523ad547e0aa1d3f0316da99c8b2e82c9e0eb345780719718568ed29f2dff8389199af5e00d6770c90028b30b07bd516d51c1126411a4ace099e5a079f872b0fc000000b006e7d861cc676559b5d26f8855ffe0ff43d81c1ec01266fa326d325ad7effc99d83d2f5e090ce57068c0d7b1cde209c67398c63c490396792d41450888ccb187e0712658243adbf60cd9261cf1b17620ae95ed1f2dac2c8c0e1cdc7c481c5a4a7f209251790c6eaafb8c57f0b2085d5c296fa9ace7b0d44af429492d369dcbd8763cb28ae32341040c99702fb58fee30110544b56ef9146d33c29f5576fa288477075f5de4ebf0e908aa012a6d30bcdb00000168000000b0165da5d25963676b228b717ff4300e33c9fb4aeadd81424057cfaa5cc35adcff3631d678e81a10283b78d4c77e9976852c716fa8526e1b390a084fd6ebbcddea9a25f8eaccfad22ffd99289889eafb47ec11f90355727e737dd33d21cc08c651753e184d22b903e1998aa7313890e79d09c66d498ddc74bafdc153dbb06d5f1b420566118acbac40829a202082d86f7e24918b5efa8959c809271379f56ef72e96a0a7b480a2b5038ec71b6d511f3e86000000b00d67de64657b7705c01c36b506e634d0b96d7e8b5738285c13989dc0eea95ba32b7a5606bb934a751ab9442c6ce05a220b69843b7e9782df7a9db0f733e511573ad2c3b095139cf7b722f6fc9890391ae45487ad4dd44a9114f2b02f7750afa568c966c70f2ff3b4cd09dccaf3c56dc81a79f6d8c6fd8e04dcdae61a26a5b82e136c3dda2e1fdcaf244678bc253c9525131e7995cbab494daafa8427d9995d0bf3f98203dd77bb9c9b9fadffd38464be00000168000000b02502f8875593060d23ff8226a4c3a7ce3ea947dee20c3658dedb6b45d75d3588a231aeb8fdf8c307c653497bb28a157ac33082a1fe6ffa2acbe30192c68888d716e8e2e4d3ee5deb0ab183e290f3cf58930e5f54dfcafc33edd92b49b44d97cce55516550d7c2acd2c45c4815d062f27290bd0cbd8ab6ee6d2a13cf4471e16127c3271c5a9d8ef296d4015a17cb4ecdc29f49bc7b5ac1eae69b6970f938cbe05e9a519df9c0e001731e6dba6038c0291000000b0222840c7fc5fcb864ae6065c4c2f515770b4de93143d94b64a8b21fc52f149d54d5f571cba43943a78e8e2b8abf5f97728a368af0a9120fef8db064850d664b28d9d0d4840974550570faaf83f0d5e63684913a3024e1aae2051c9cd063320ae08cd12b943751929b3284921f585465c13043395c9f140e10172d1400525aa30780a4f9e1d44ddd2064e285e25f0d1da169843ec0bc3c3d985caced5387b49027456454fd78fb6bbe9a215031271934900000168000000b02504cbab85ecbe5e44cdf35db50d2dba847c16a403c266e91ce91db5c82fe4c625acee63a3d293936036bebf6b3a48c1586e312d66b659058d94896203aae6151e7f2cdaa9e15925388bf3ed502765d277d7f103d965dd4f8b07704960449f94491a8955f2c3e1a2544b4e2de8330b4713a142bfd030c12b02f07050770905df5a4a1aa2f446de70f635dd799aa6689714f3e71b46c33c6313445a2978ef8b3d5a170412ccb4c15451cc23bb30274cc5000000b01e0a9e1557f7e038f14869926e33f5833b7d90a004eeb4767083b86cc77a0c5a1df1cb458c2863f5495aca4c98d5ab4357cac4e5c495463374b6b82e86249aa048c8eba9ad5924f8afc61aadf6ac82b860539969f09ca62613696aa91c96b5eaf60e2c3480704f0d5f90102d02b050681776825a14e2d61360e6b900c09ad40e92a91f0e08c240b4f7c964d0afdede5825c6caecb09b85a02bdf95e0a7d044670bbf5b541becc0ff6853485fc87cd98a00000168000000b02dd505c110f248420061bf547f7d52cea42a32d87ee06a66242b0a5ae8faf7ff21d204045af4b66ba68a4518d9f764cc56c791a61232bc02a877c5a7e828376a0d74c06210e6ca7fd319820b6ce4d0ff4fdc539564611d08f724ef0c9b805c81fff0e8222c62f2f2aeb6e95aa94259d5016d774721281af0abe1287ed12f6e6b46918ca734a590a6074d8180e506ac9d28638cc01807e32d84d2b30a98322597de8f3a6c770c23283c9fb58ddab17f4d000000b00894f45367c6d343c4835bec6a3cd0473357bdd1e9fe8231c4b1ca507cdae4f4d60f1c15dc15b3c9401cbf72d1d22956d332e92b074a151f7c2417b403bed3e7d85f757e7eeb73e82a22b12ef55abc5ea2e3e59c745e655a55a1c564a7d85dc039d86c88d37cb6d81a613a4c880cb4762ceddda1c322ea035006bbe564c0607b8fd49ba03cd431fef3f19677e543756f1dcb164b61e764ef59bba18d6092d077f6acedbe73c3f5c6c7477023aa0fc51900000168000000b0166666f36b9cb2fbca469145de80814dae532156feaba766db94daf7f4e8da61adef57d2bfd66c96e427f156d80c68c05ce28aa06a96de7be34cbbbe6e1523104070121266de0b7f829dac814aa551f0f883e26feb0cd1acfb3e118eea2f2590c3e51c887f60db4a8dca0d5beb8bd4a52d114d9eaf57e1405c7d9ac5f56bad50a6bca38b70e64b25296b077d044647a20301b7fec717e3f43266ff992ed6ed119ef789daeda6561bea8ed6f78c8bf56c000000b02ab7c3c1df06867e99c47ab2fa5b6602bb455b47fc1f81c48fa2fff893218e6f40d3a0edb2a628a3954f17b4de96998f4cad763ed128a390d9d21b5176cb8f2b4d6330306d682ac775915fd90eac34cf76f17222ea41b9d86ae2b4c0a76d102c9993919bfbf0cb2e4de72af62b828c720ab8e1bbac62b15f07f0556ba3f28310ca2b3013d4b5a89fc81bfaa5a0dda311074aafa6940fbebb18eb8d4f146ad2bf726e606afc0db4cdf68711abc5e6504900000168000000b00459843125fd5cfb60ca6cc90d7f1fc63629074092fd168d44861a03647d40034f94caa19cac1ac545dd3ef685731b194d6a7db884ad03407cbc0f901875eb60ba74d49ef453bf31944482f7b40f8135d983937cf4f779d0d193dba883e2b7cd7abd7aa040947735f2aa5a84d5320d930bd7b150151940a8159c35dba72885af12884547f30c13f2e5728bb6c24a94970fd7347547d50235353266aa9c135d1057f3e3251bad7c49aea391dc131367b2000000b01793788d2ddc6dcfc81ac915e375d776aae3cd91d206fc9fe778ce6966515fcb6a86f75e175c018a3130ef9b9d96c46f0467e4677ab43c5c378d8be49d71dac34678c766b115c9e226233caeb6d4ab0550458931616ce65bb423e4ac7099bc7a81265149efca0e15cc69108ffdef7ef60987867b92ecd973c122c4f24297698bf45a8d1da3635b521e240fbe5aedd37a14d8929ce23e523a63885a90e979407d0b0dbb6d7c765f3889a11126f849a0c600000168000000b0025d153ac41a0a16c3a4e29ffd0529df94c3ad34a84fddfde15330c5ac4a4ddc7870f4498af6e8bc395edb697684bf9b2207f69b79e5eabe21acec4280434687e1a76cbdd4944a86092f6b620567d6f95df525309eb7eaf7eed747c57da7f9a3f8526c9e0c88edeb5df4db1b7f16522a0bc69f651ea7ecb50fa05830e05fdbb66dc8f28f5fe6af80e541a0ae98d80370073740c0061e4b504c7fd50423412ba8fbc65a66c0f80da0e6a49703514a013f000000b022f57e3739dc3e1128f672ea0dda488689e4f0ed80f697efefae6160f60be8ca87eac6dc1129d63825b37cec171de19d0223925da0a7dbbd8facb44256aa58fa614de68481a3a83ee1d6128d4c24f3c616fb40618df35f5d876d6d5c4537dea41fd7829445eb1cc90cffd0078ae068ea10327400757411fd6bde433f63f75ef849facbf62e1e8d36674713eb2a50ce7d06996890e9492f396e89a494d195cf0fc1a6d89ee123e1eec90c667b81e4671800000168000000b0109b416055d26f395833d8632f165395055ecbf7b9b17a3c994fb7a9c6a321cbdbcad2781e91e2069d1bf855db15047b579c3fac68b8847ed99ef991b47d044e53e0991ea77d0fb18a3f67fc7893958780f8c3cace4a31e6b7df74198703dced6b6b189e2bf9bce6a01811644b51bca0258ee94a47d5e6beab595673898168b30735f4ac8adcb387baefd80c68a29719138e4a764e1c77f6bbe8fbc50a667049327f3028561f7e797552db6d951bf2b6000000b021f927f8cbcc2545aa5baa84e1383d03492298871cc18f3fff2750decc1ad9665b981ebc48d4d811b7c3b13dafa74acf5b015115597b5a19fc94e8cdc10a7cfa979d1fd5908c548362636597d292ac7a4deb73edc35da2185de4876935e42a9d0a977d1188703045a37866263ad62aac2f8402dc4581d5df0fcd46acb53a10605f8e5a9f54811cfd9e46c77f0ababd3a0c0b332b6ef5dcea6bb1d4b914304f3e52645380de052f396e2ca92ddbcc593d00000168000000b005bee4a31ad70291c4b5aee56ee6758db8478b3add450d3fd66877f24e4ac6aee38d1a76e986f4a8fa71bd96db122ca250f0740a2d367ca055ea1db9c37a7a1ac06bb2af58737cc6db647b564b635ad261be2335a7f6b70caad5bf03dfe055660a6d5a927de4fe40f9ad8feee7f7b7e9202b6ba74d0dcd7c6a7580cd5736559f61ce5e3461c6badd7cc71622ddde6109091200abaf30b6cde42b592d6a5045dc9b0622006736cc5156c756a980a2c6aa000000b022d9dbf23914d39b3d11d0d9a1d31075ba1404ff5b7ae90ed00e769243c1b674c1a31a060a82b963019199565d25d7feaa0294caa54f60bd3ec945a601a3b6e4d1a10e5b1a022199ffbdc341e4c4f7af0dad791bb1ca5101b6808eb3835e77981f681c47b24ddcf63939c44b497fe201070c3f28db60f4aff78fb3c65557fc7afd65c1a82bb266e906442456a217de280d7b82074e23ba294cbbfc0b51ae12e3f2bbd21a73672432e3a708e308db9dab380000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b600000000000000000000000000000000000000000000000000000000000002b7370000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000038100000000000000000000000000000000000000000000000000000000000003820000000000000000000000000000000000000000000000000000000000000383000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000003850000000000000000000000000000000000000000000000000000000000000386000000000000000000000000000000000000000000000000000000000000038700000000000000000000000000000000000000000000000000000000000003880000000000000000000000000000000000000000000000000000000000000389000000000000000000000000000000000000000000000000000000000000038a000000000000000000000000000000000000000000000000000000000000038b000000000000000000000000000000000000000000000000000000000000038c000000000000000000000000000000000000000000000000000000000000038d000000000000000000000000000000000000000000000000000000000000038e000000000000000000000000000000000000000000000000000000000000038f0000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000039100000000000000000000000000000000000000000000000000000000000003920000000000000000000000000000000000000000000000000000000000000393000000000000000000000000000000000000000000000000000000000000039400000000000000000000000000000000000000000000000000000000000003950000000000000000000000000000000000000000000000000000000000000396000000000000000000000000000000000000000000000000000000000000039700000000000000000000000000000000000000000000000000000000000003980000000000000000000000000000000000000000000000000000000000000399000000000000000000000000000000000000000000000000000000000000039a000000000000000000000000000000000000000000000000000000000000039b000000000000000000000000000000000000000000000000000000000000039c000000000000000000000000000000000000000000000000000000000000039d000000000000000000000000000000000000000000000000000000000000039e000000000000000000000000000000000000000000000000000000000000039f00000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003a100000000000000000000000000000000000000000000000000000000000003a200000000000000000000000000000000000000000000000000000000000003a300000000000000000000000000000000000000000000000000000000000003a400000000000000000000000000000000000000000000000000000000000003a500000000000000000000000000000000000000000000000000000000000003a600000000000000000000000000000000000000000000000000000000000003a700000000000000000000000000000000000000000000000000000000000003a800000000000000000000000000000000000000000000000000000000000003a900000000000000000000000000000000000000000000000000000000000003aa00000000000000000000000000000000000000000000000000000000000003ab00000000000000000000000000000000000000000000000000000000000003ac00000000000000000000000000000000000000000000000000000000000003ad00000000000000000000000000000000000000000000000000000000000003ae00000000000000000000000000000000000000000000000000000000000003af00000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003b100000000000000000000000000000000000000000000000000000000000003b200000000000000000000000000000000000000000000000000000000000003b300000000000000000000000000000000000000000000000000000000000003b400000000000000000000000000000000000000000000000000000000000003b500000000000000000000000000000000000000000000000000000000000003b60200000000000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000000000000000481100000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000681000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000682000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000683000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000684000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000685000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006860000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000000000000000000000000000000000000068700000000000000000000000000000000000000000000000000000000000006910000000000000000000000000000000000000000000000000000000000000688000000000000000000000000000000000000000000000000000000000000069200000000000000000000000000000000000000000000000000000000000006890000000000000000000000000000000000000000000000000000000000000693000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000694000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000695000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000696000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000697000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000698000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006990129168fcfe5274f558a5417b7d6529443729da9a806ebe13e3875a1325062ba4c00000000000000000000000000000000000000000000000000000000000011800000000000000000000000000000000000001181000011000000021c000000b029ff470af339a233c01b75d57b8afb9fdfceaf8325aeb470c4f78b5243427c64025f61e7d698834f71708aa4affe80c7cc193288708803823cb2e4e82d702e22f699c374c54fa5edfa1689b43e6b1d75657945328068e99869a31f7f53f6b5c58b124d8d1fff86dd573374a74e087f8a2bfa55924d3dacb1e0e308c377846484f31727db942214c6c4cc3c3cce02e77f18b947e5b497375da280356ae193de7fc8492d5c655ab05f617fbcab89b511c8000000b01530a457af4010eb96775c49f55e42258b00e3a4a7ec4707112d5662d6a8c45afa0f1b03bfa54fbbe75fbff201b404a8e5a7f2c2ce9eed5740f55dc65e3d0de6b5950738b5c818c982ef079a6c51c1dd6b8a609f52134fd9c5f1e2a785e5881c4d4b1ee551302dfe442734db7851dec02166a62f1f3473e0e222b01a47aa69f9aebe3490d1947d09c78f361683c5e5be2cd5088c01d1db34e3c4f21654924b13539c9a41cd279092073be04068f8d5e3000000b0210fbde139cee973acdc441a63ff155c06ca0653e1e86ec57b1981e954cef5bde85fd648912020634b8b505f55295668ecb9a109286786a3e6ba39946b7a8601b1cffd236c172628fcc38054cb193f668e7fd53a5a7cf2781fad752b40da7d7786870487dd93d7e0b2284eb1362972a21b13ca64f4586722c1398878c63645dd86b58face22d26bcac38ede43f05ff95254c560666a36a932d653035745e8149885f58adee3f5714098d974f2ac555660000021c000000b00bb94894ce04b7e73c57d4fdf581f0ff23e146c649c6f813b758f88bb13fcee4bbf1eaa450c554d61d28266bb5f1e5a0270243efafc5b586938a0f9fa442183c10b3d3ac6a67b9dcda97d46a78a55d6e8ef84e81a2bffe4b467cfe28640be9d9a4a2c93c0a5cbad2fbd2f51c1700f0cd1b837a35cb4ab414b643809e609496f5b829a4c7831b331536c8ee8d760e610d016c541568c97de2e7e981236d7c51539245886d3e4a71b93ad56d979845360f000000b0197fb0299157d50c0b265659d56301cc979b30aa121ea487645636acf97295a93bdcff70a14a604acc7430d69c2743c67bd8c8bf1473048de2eff215cb23ece82e7321608397792a835b310862b6f5e55c8b17014338832daf5872631fbf7991d8df9c04b9042971f89ea05369ec4f7d00eae8bb2141ccdd8c1d63780b5ddef4e0582d7b11fa932d7c2ba7d7ebdcd64026202d16acbce6650e80547037750c4905ec8b6ac91017a40cfc348c1b6b7155000000b01bc8ba525c7413d8fa2b83be84d4cd993f1665901321abb6c3445091b5050be0a6a7a1e4767bc7faa874d7c93472b9d7a6e8493d8c38c5cac460e5467431c20b9aa3cc6e60ddaed8c208bc285211dbc4d187e2cdd227ebb6f5373355ab6766fadf286a2f8cb06851d5add346bcce3668292c8910ff2a0651db149e4db522c03fa4eaa558139382cd5880046ada8fca3929f7707cfaea5620f0f024ed745f1cd9cd19eea017e2d64169188592f775b1310000021c000000b02debab64aed9bb6cfd92542f2d16adc28408790534c5ff3d64dd4a6e5b98bf7155721b84512f4e40819d2d41b3c0c91e38d0770bc7878d5c291f3c4eac83c166e86d13436f96c8540d2cc150ec6bbf840a3b26baf8abf40ee5b8b2f7e3705860206956d28ea7d399b820400d1fc55aa33004c5dc5a8f3c23f68d42c8c9704637013ad30777ba867b7fd74758fabf90ff1220e5e6a99e001652497ce3356a970ca7441aa90045001fb3adf760a80f5517000000b0304578a608199de21aaf531b242df2b9f775aac0dd0964aea0224460bcaa00ea17db449f729a2af6524e888baf99de07fd2e01da07d3e6508414385f0b94f88021fc4ddc323c605997ec0d51b5fdd02585df7c13a5a08f5f2da7fab3855ec1904b9e836510788fdc8ad1629493a5730d270d35b1dbfcc1114f5d31163a902c546fbaa258852d03886862c963d446d1562a247e48d4981047c2bcfc62fbcafe341f000f2ec8922535dbc2028a11e69050000000b013c9e8c54b0062b9397346f485146eca129b683d3e29ee6878a52c12fdfe9e44e86e612a217d95d555c0b46e1e4280491642022305c773f881b0a5522451f82ce684b49fe335862fba67543cd44dd26276d8be419c9bc65b4e447617bd2b3689cb8865d32853b322b18b604583f9f90022881629007cd9d4b90c980eeae4badb7888d2a244267be0597d15ff2c8a51f124b3e8bbadf0b24ff2c0ce6c99209bb3a1a614a61b4fa0e86804a3c1cf15f43a0000021c000000b00d2df21ebd9585fb6e9e948f21255f3ef0df7572c02056596450f68cba9f4275d319524a1beef6105354464568c0734836197302e1f27821bea3144318e233dcc51cd4d1403250a2eedb994517e2d07c9b716006fe64e0bfafb5f9d186a57b7fd3fa6fa048839c9522b55c4c1adb1b2e0699a27380ff6ee736e1c1af2881b8113dc11a5f7c9ba97d5f6e7091d148e5e619ec39228eb80bebeda894450d7747805e2784439c968b13695d217a37100a83000000b02c352f794edde6d62de27f27649694ab259760478ffd61a002be7afed4d38ddc99222fb69541b1b0c5beffbc111f7aa8195b7bb7964b2e87a4d648c4852b2cb743ba7762d1bbf49cdf71c3dd685c676839353e9a86a57390bffe1262a66ace1f3a98a1570b94f0339048b8b7a7cf67d906b3fdcc226021bc4577b3a1d14c01d8bb4054fe05ab5f1f314ab367572675232e53434aeefe9a37de1112e259ed0c482976e4a93163d6dad256001c2c8870f5000000b016631cc31a7d12a09395b6ef087faa26bf0b83e5feede71a6dfd8e15cb06eb8338b9aa211e0f6c6ff158b2c098419ac38f8db7cb747636dab269c12ea5555417548cb3c88befb21b4a8f36da387da86231363904fd844bb8a4e08ea7fa864b59620c2114dbc563a4e008e45b7908abe5044d542268fc23bc7ec3d3f8b4e60564b0bbfd29dbc8b35d8c13e9d639614a7d0096216b27dda5d804135938806666e1da059c41596ff8614f5000c61451046a0000021c000000b01df5e505d8291947966dab52e0d6f3e473916e89cbf1e22d52cd40daf9b0961ab18e629435706a7eed130b4f26b8b79fe7033f4335f0db4a94d0ec88312255e8b57e395edf17757683b5db13bfef62dcb7d108e4151ce00d7cbf1eaa518c61a4f559a0a3ac52b3ab649ab56670fe292d0c0b8ae558457f0123eff9553d7de4afd2711c4f6e570f5410ce6e39b938afc82c6fea153c9063960989e7b9672eaff7521aab804df88e3ccd8fda0ebb3e21e4000000b029f5623f6e8134afe1a3b8c07fb671891d40f9c21614ff8d74c39175621924b85216498e5c50a38b16a74fb61473d485048cfc271a377977a3344a1acd30dd7757eaa1cce0ca690a17cfedfa89b2e2382054dfb6230b6d4007aef5d9a1ebad7a2b5be893af6f9e62781446124b2b5b7319a659824690e300223c8d26cc5c0e58c00a1082fb970a20e7859d5985da1ef32a6dce14d33ee532c0c6ae8f3cfffb0310e4d6f9c7a5d561b2d3e506b97cf0a0000000b029485bdb314bdb1d50f8b85725d29f8fc6fb9dc1873080dc060de95f1de664832cd32ded07a26a07ebe0da2657adc9219f7e3b1f64ee3d056e678f3b3d51c40ffc9443f4ee47e992bc91ccbd47b19bf1b70e54c0f10d34a611046dbdb919312e47070839c71a752d3c634510151932922bbfa653fdb33e982e3c8f132c4f1f781a81af432e94fdb80b0e161789d13cde175ba1a91212c8e90388e4d166095e6b92594862144f8143f678918082fe155d0000021c000000b002d2e86c27e308f08704cf1f9f67e0dc32bc060dddb9a594945b6995d8c158844d135e3fadd4ffde05364d09de9008ca3e88a69cd2d066810d7a4810160f0574e444de2195f6034fffb6b04ab13f2da9b4802a4974be0ea65a76bdd88669836aad80a0c79b5f5ac594d9db4f996398920894cf79662fd0d674bd7f662dba48a19d4e23a88c2653a8229752c524594cb828acfd1613e8e49591178036a3c44aa57325e05c0b862a292314c36b5e50813b000000b0125a4d33ee508a9f46579af5b50d6f6dd0da28aeef00636f7330dedd1c6d41db3093166b2acdcb53fa3f37646269868355f2f17b3ee531b6adda4fae42e64930ef9f1d0dc07ca336694b23f9b22612aa6e6a494c9d559799d1e08d144360625c93d35dbfbb789c2729fd53110677131625547e0f26e3333d378a39918711d7f94081a1875b90a354f07cf683f47ae8571114eb5245a364e19501fcbdba6fb566329fcaca7a4f3ce138eb1c5cd678b5fe000000b0248a01f28cc2749eab9188da0eca7ea55af5a7dc27bef95a13dc92a7e89d70071075e8d7887f9958c6a0591bbc336e786304dc840a19944ecd3a69a8ccc19b2a8fb71fa0a82bc3ba6c638ece5343e0b0c5079aa3b3c058833a52afc36ecf44b7b8e7d3a037108853865eaac498a30ea225b6a3d7d2fcfd3cfdd45d1bf01b86ebf67acc168b7c81fe4c7e0d1ab176407302156ccec310512a7e6c69ef6de0a921d4997fd15df8c234d5c6ad1d3923c8430000021c000000b005ee93a8b015a2009541e2381f032c7eb258884dd514cb7876b51e9412eae82d68067990b35b0c35bace49206a3dec25a5a5cffff938a0eba6ec3e3b5484e4bc5f971b79d1bb2fe68ddf63c5e91cf79455e255ca050dae380ab321a4ef1ff7124b262ac4825fa16e4f342b540ca9d5ac00dec75469cfc35ab5e71dba98618906401bffb0f5f446018c566efb6a12673d152552ebfbe55594929a75966b5af8be794a659292ce736dcc4ad51d15d45521000000b018c10bfd3645b65f838c8575859f3d1b127026031670685a06287a76e45477bd5debef359bd902e736fba47b3994209cca028f63ab42e6ccbb721c37972fff9b17c7331c52725ec4a299688084fe5896cde3a39397a15b9d1ffd3ee637d3f79b0f534acb68cb32dc35e9708064b108e5152a282137ab64c57f7e7d127f5689a5ae91ddaf6ebd6828bef866fdfe6fa65e0e065ae60c2907bfc687fc5819338628a83aa81ffef0313621abf1c4d66113fd000000b002f554f6a03300afebf14434a268df25a58322b279ad53863561784a2b6458c2894c91a598a119ac00f8dc5c7915a7326e2ee021b2f3bc78f13527aa9d677c3126d6c8f663a268377d7de99d7484f69a64a11b7c8db7c0f60cb8c36239c886486e7c6aba47f76177a01659345f97a26417f6e0dd52a1767d985a965fc97bd83e8e3f50c302f45aa0707324653deadea00a7cb8f79bb1f44d54e8621be33aca2aa5356049de600963b6a7c69bafbf17190000021c000000b0300d819b74a8a2e66be7edea16f40b7c02ec694dcf7f2d8ca28fab351d3bd7edacb8d0da97a556421f7b2d2bc0991b71413d3e38534cc0ae2dedabb2cf78952a88561c0e6a089ffb126cb60d2d4aedd7c4c43311c3e1cc223d6f88d95562eef376a5321dc3102a584f38373d80eff2040694fdd54ee93fd9a6b274fb83c3c49ae5634a8d79f01292a18631d046e043f42a7a4ee9b84018eccb2cfa75b2bd2c1ef4009c4545ff0cb737fdff55e49dd99a000000b02abafa40e07c1ca19300c6f89cf6fa5b96c9fa603e2c3d197f9b0496c1100b9d52ed3958b1c087291684015c2dbe75c05338bd6bbb550f03b882b6d8d592e8dc5d91858fb653e948aba26d1ac7f8879e8c25670c3851501abb2e1d52eccc3c5770c90f25ae659aaaed6c49ee1865d3d1233a68bf786fa5f617303eb551b7d784c4d3f39fb2b3b71858e82d2689ce0907053489b48b19b9e25dbc51dbd2ced7f784f25fff3dce3c14a9025efc0ebe4639000000b02b2d9d78aa1656235f67eac8362c8112711fa3b6052907895c901af7d140ec61a68b2981f78c37e65fda8ec784724459e34b6fff2f9043c819b96888fd0c574fe3e2f185dbde5154adde36981252db53f8117ab264628cfc77f41be2959548ab87680bc9b6a1973baf528f63d3cde1a1236b63e71199d197906cbea9a758959e4d5da3b73d8cabe1ac579e71b508a36c1eac8c835fdd2dbe720282cac8d4989edf59b28314c131ff4fb4750871ffa11900000fa400000168000000b0060745ed826f680a97c26937e257670a4b019c2bd39d85c964f81972c5ac3e1c986cfd7565e290e6f2250ad1ad2669659749d9753c12f1595bd1396002663c58499492fb16268ad49529cb59447f7cf6f560e4bea83463937597be747572a5b9650f0cff64bd6a2a32b05324b565c5272a9d1d2a65a41b27f68f73804a47bff87396924775b8c08aab10020e8d9b4fb82c267c4db3104c914189395eca2fd4a62efc4dbfe3dd11313911ccfe869502ca000000b01f6d2bc8df0708d18fe874969421c41d4cd60236e78f6621919ee15a11596e579b5906110923e949cdee8446121f1f2ac6d731f3b0cae22da83b7eeffda4b41d70fb166dc475ce9060b61b41805b0ed787f9f8e6d97ae720d8a37042527c9793e3de02bd163489234e943b496ef7876f2b0b208320ac57354102b9040346d049399d23ba6b27795126da6cf56564f4b22a1e4eb4f3e49faa22f6b56c94ba9472c4044d73a6d85efdbab694ecafe465e100000168000000b00dd7f62c3dc151db7e8bf7e877a46dab2943ce59eef04d284aadb6b7b84f7a2c5ebaa85ace43a27dc6bcbc8c8edab517de6fc7e78bb40deb3c366cad092d40457ab2dad3184835e4d1c2f36f2b7c1444418f799391a94e4ec1673b92d5329491b5d90e2122b64e7eece7a77264c302ba20031995ab485665de8e37ecd4f93d8b80f400a590857af18fe0ada5444e0cb30b67c8d23b2542d54c96359f1d2279d8b61679fb1f7dbcaf69551b4c38c4752a000000b008bd6297050a8755d008302ceaf4b59c435c0d1bdb61f185868bf8f3e9ebe7969f31a67dd97f25107ef6ccbea0e4db671559126e9aca2aa205ce0c95315812b140eb750871338d47a604b00c7b69e6e6c9431a6474e6768b713b2ac7c43c632fd5c35de5cf22d5972e9f6afe477dd09f1a0e1984881baa1a8816124c9ac38dc9fe04851ef52fbb1c95a3425eb8802834240d0f2bb41625de05c69173ec5f03952a8b549c7f30beca6b50fcb7358fca5900000168000000b02f79d55e4626bace308344b7573bbbc07d0a35202336c3057bf48aeafdebcf6d75ea2ee7006b1ae1829f636f1e2c7cdb45ea912f7e8afea8987266463b26335070bef5fdbafae7efc21df2dd66152be7cae26c8699cf277b3421081f757e2e686b9b357e6b6bdff9d80a61641f419a140e4960adff16175afde9150633baa3950e9bb35567bb69d57ed5694f3ec1ec9510128fee1da364d154d5900579a470459a349f4d70f9c09fab0a19683a0548cb000000b0297a77160c3c322aaccba3c10aa4cbaf985fd823e99170d22294f172cb8024dd11f430434521db5f4e860af23711c4be315fd853822f1e7e4da42faa94399d63f60600fb8e8b494606d201bc24cd95b67cf63bf5ed7fe17292058b6ac635fce749379397ddda177f9bff32a569796ef6225f9639a41b0991d6d9408cd6ab3ddc9b082eff65b0300efcc20fc513cd96b303ef9fa262bbee7fb48eccd349a809c978e28c0ca1c44899cbbc8cfd7f6924a800000168000000b00c6fd167e6b96cf240958d753fc6022c1bfec6b5129565260d1ffa9712579e0a4245344a8274e9098836d65c049a70ca6a594f84fd3e7eb68a0671189481d0d591f6d8bbfa9af725f1bb12ad6d36aaa46db2094ef4a08f0705d066c78a372875862e2a863603db442a7b8378e960bd0c04fe4a0edabd483672df8e1baf11397ec04b7eb73159c5c38e6d19b65398de262839e30c50285ee367328788504a1daad79c84787af94377ee214313aaf48208000000b01650270a0bf39922ca13530465e145bc633e253c5bd91e625b95441a60e8033439637a73be41b239d4678d90bbb9d902781659d131c8910255adf858b0b5d8d3ca679f6c327758ba29e8ab525d61be761cd1d6cefa7452ec810e0a5feeed9916f7d4eb0460282f1abcd41af6e0bc05241b4c6d2db20de209063c7d2179bdb7f68749d999a643ab56fac780ce130d6dca2ace93c66a7e407652a337349f8ff66112d8c9f6c28bac5a0e2dc2d2cf2f399d00000168000000b0243bce4f21427524e188a88055c5520a545689d13aa33b01c05704d933879f7b26925d60b594a7e2a4d9d9eed0370fde137c11aaaf82a7811750ea4f477ccd4befa74025c9bb262ea1933d52ef1b0def63200b0d3d81bd56e0c86dc16964d63686b3020e2b60e06800dad04ddbcafc0c2c0a630f600059c1a6e961e4cb5be9c5b65e3623e7e4b64f8fc592ef14236706122f44ef066de3f1bb4234f98090c735ddf679401091c6f313f462a2728143b0000000b02070ee8df59f226517c736101cf8c5478d45f9fad435df2c477c2ef55c4061734fc99a117db2badea1939fed8c066c37054e196e63d06e289b7002019f061c8bad57dde2645046514e476b96c4dc80adec24aa6d85ed336afb7329558e55d6902cf3432ee37d4337d186e0f4a5b350ce29a6d0718529d7f524e001fd6c51ef611ccc59b2b0ac89b675c3574cdc85f4fc27cbd57ee4e6e2cbd4efbde6f1c6144ec501d6f101e220909b028d1819c2fe4900000168000000b02d24237dbbd3eb5fae97b87c806a44a8341567cf954810420cd8c5258effb6d6d947f2c06b3540dcbedd4f265e7a3040ddbcdf9f35bf6ae21e1645961a1fe16d34f795d4832d266e06220bee1dc986ad08f9bf938d3899c26e9270bdb72f471f149a509eaec6ac4310db29417643972312a5c50ed09ba30980f51a6534829bcde1e48b150f4d3f282ae1de4034a8270d2ff72fceecd56606f0c5cae7fe5de8e0ec594ddd392def05ac06074fc6edff79000000b0140909916933e594806340bc054c548dc5545ad41d6335c4ac6fd4664ac14865d08cbcccd7020ce9a66937d6f24b5e585188939b4180e2787f2d0d40067ad98aeb034bc324a64bb01f17c0e9109bcf72659220fd9078e464b271da8cb3397081d37db31d9e5e503ac78104acbe13483b2b7e7b82ff6a47db09c5f73435cc142f5211b7c6d3baf55cb72d2c69e8296cad128fc7ff2dfa616907ff5c10e2bd4c397bd1b9b7eca93bf772fb1a318ce3097700000168000000b0294f28b4b6b64f55d5fe494fa287a85049198ffb5781160dccbc2e7dd9f0a7d027e9a361b5ff701b832a6fd1bde0ec070314508bf26b33bff84a7858267117a9f4eb302c454fc515a0c2f36b84b77ea13426fd8fb387c300c1535ef0a4addc4c5b92c6d3f8e77d29e854293be86cd4221adcf0face66dfdb6c33c2d4417ec9617472705a8fdfb424cfe5f08b831657bf1775e410007349207701607dff9de9b7afc94e907c0a9d3a574e6ec5f2061ed9000000b02e126113e2cbc987779f3ac444186d7356c0cd6a353a129105f7ff2f1e43f6382a9d73a2a5b9470ed0187d4b6f63deb355402f750ff39dc8682110e6782b838cb32d357cafaf77b7dbd8c89a4a9c2661156c9be1562dde56910627d109b44fd32af868308e3440be216bc8e4fb979a5414898660aba6082429981567194accec5e161aed52741c868257779b047e4e7f29d52b0c146125288f14d46891a71af0bf1c98d87012044d3ebde6ac4dca3d9000000168000000b01afa44dfa813c728c605e1fb71205b342ac6f0fb83f2def879e539ce4671395b9689c716d798550130fe59a04761672ece0a2504a685a8deaabb469a11a94e5518f85092e86086bf3422c8850ec191e075991af558f0e317ffed54d6ea924ca6f09cb002c18cb67f8c0e6bc13699a5611a59c55662336b3e01f1179d36b76b248662448dae259d7fdcace1b2dba53f052d3dba5aac532145296ac23e5d5dadd783448868f3a5d19b5158a51a2c9ebd93000000b0234f544a78c83defd972bb218cd0f7ab375fcbbfd3e83da6cdfaa2a830ab5833f4e7f3fc5a387be6b7f1b7e1cca7e564f1cbaf2fd5875b90f4635d3648dd4fcfde8f1cc33fa757356a3df63c1a0c6a3f6b857cafe28a93b3463b41de290709595b48ab261f64ffb2772bb3bf28ec068809bdf95962ba88374e80e25d89ae72187d58f0ec393874d03f8e3b147539bfec1ebcf7531c7525badf073e8092089a8022d231492b75b1adc4da5ace41e8a54100000168000000b02030f99c664d14900c82bee750d0221aa0d463ff0193b4372d99c96ec920f82aaba3224548b8c18b7a6e4ab66a90c3deccc67725c20542e332b5677a671580120b6e3a153211fa41b85c9e18df75329538599305d65ad150ea3c40a485bffde52e0a90f74030d3a5097fafa74ce462d9003c2cbfcb541c7080b432f8ef40caaca62ee990217541f528a359ef51d7714a180778c9b6222b561fde976037f03adf0e426fdc509fa1912dc36162e339edd4000000b02e59d3fe7a1040da857889373b427265c1a00adcbe30ac30568844310843ddc8efc67eab5f6ab2ed5dc94a5a4cb29718edd26ec7eb8224e3fd23c26cbbac2f84db4506bbe4df6d78b180106cfbdf21f645d44604b75c6b0caab38175a0b686a12859f827e1b03988ccad52e1d292d53e300929b34a6f7983eb73b2c0747fdc1b19c837b249a3a23d3f08725cb718a53d275beb3234686c09084a3a5e332c46686d226fef5e3e2cfe84aafc91835e9b4f00000168000000b01ab6a45727c1d3f09d58707aafa7f18a7ff8d6715687a6e9cbc96af586ed9dde19b8226cb99ca41997352bead500873caaccd9165ca7c87d7ff9bac937f94b79549b6ca1dab5d1beae116968b50b5d5958eca947a0e7e12a7cc5a6ac9cb116f38990f0a2d3a2befaeadebd8d6078de812cd3174f1013c01af484947938e8e3779781fd8e6933821736dd5650a872946613202face0ff87088534c535d4772e7767432055836b73f3e9ff61a84c55eef8000000b03023242a91c9d5fcc63f1af813b82c8c0148eeca01b10ad98f1938d23eb504cb2e7864e139469a01f83ee62e3ba10cb09fe1ceda38e0ebe7d6e5ba207093dbae3a35a20fccca6d42ac5dd335a9f84218a6f0f436a63181131d8550e624819a5fb51fb738126e5179a8fe71e0c0350fea081bdbaf2f54f27d8606e22cbba3dba5f2a4550cd3735651e535a1493afd395e095e8e93e661a0dd83b3c096c8daeaaef428d9a5409b393d173a3c8d5e06a6c200000168000000b00d4b11b777cf7cbe2958e28aa229241335124176a837c4d0e60a9b657e485e97d6a34e274bcee69017bb1b2effbdc44840d274ca9e4a93316990e747d98f17199c8ea7154f5371a6797fbb9629816f70ecf7d0320cff4d19a88215e2c6db908a3dfb5dca9d426a6712f150223428a5f71a7e052adea11254923c41d4329c494378301b984746d21c6d964d5236a7a7210b1fb647368cc9cec10d96ed2d4592ad662cbc3d9b68cd280e88202c711a4e0f000000b01d554ae932464ff3a1058572abe7e6911468e7c1f5554b68f89d3ef13e74f5420cd3c33c1b2a226c997170257fe15b5a946b0175668ea211761c45f652250c0e6bc6823138fe82da4f46ab7762d951428792ede670aeb2f3351a207899b3cbc2b6c4021fb96b8281598c2953b6b35ed71cf9282807f79cc09c6c23068c0ef1dc7e7928969a9e7aaf4ffa724ebdb9ec49276bd340359f269ba8b0ec09aeaee4a72c6d70d430b744cbadeeb257d69c646f3800000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f600000000000000000000000000000000000000000000000000000000000002f73700000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c100000000000000000000000000000000000000000000000000000000000003c200000000000000000000000000000000000000000000000000000000000003c300000000000000000000000000000000000000000000000000000000000003c400000000000000000000000000000000000000000000000000000000000003c500000000000000000000000000000000000000000000000000000000000003c600000000000000000000000000000000000000000000000000000000000003c700000000000000000000000000000000000000000000000000000000000003c800000000000000000000000000000000000000000000000000000000000003c900000000000000000000000000000000000000000000000000000000000003ca00000000000000000000000000000000000000000000000000000000000003cb00000000000000000000000000000000000000000000000000000000000003cc00000000000000000000000000000000000000000000000000000000000003cd00000000000000000000000000000000000000000000000000000000000003ce00000000000000000000000000000000000000000000000000000000000003cf00000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000003d100000000000000000000000000000000000000000000000000000000000003d200000000000000000000000000000000000000000000000000000000000003d300000000000000000000000000000000000000000000000000000000000003d400000000000000000000000000000000000000000000000000000000000003d500000000000000000000000000000000000000000000000000000000000003d600000000000000000000000000000000000000000000000000000000000003d700000000000000000000000000000000000000000000000000000000000003d800000000000000000000000000000000000000000000000000000000000003d900000000000000000000000000000000000000000000000000000000000003da00000000000000000000000000000000000000000000000000000000000003db00000000000000000000000000000000000000000000000000000000000003dc00000000000000000000000000000000000000000000000000000000000003dd00000000000000000000000000000000000000000000000000000000000003de00000000000000000000000000000000000000000000000000000000000003df00000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003e100000000000000000000000000000000000000000000000000000000000003e200000000000000000000000000000000000000000000000000000000000003e300000000000000000000000000000000000000000000000000000000000003e400000000000000000000000000000000000000000000000000000000000003e500000000000000000000000000000000000000000000000000000000000003e600000000000000000000000000000000000000000000000000000000000003e700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e900000000000000000000000000000000000000000000000000000000000003ea00000000000000000000000000000000000000000000000000000000000003eb00000000000000000000000000000000000000000000000000000000000003ec00000000000000000000000000000000000000000000000000000000000003ed00000000000000000000000000000000000000000000000000000000000003ee00000000000000000000000000000000000000000000000000000000000003ef00000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000000000000000000000000000000000003f100000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000003f300000000000000000000000000000000000000000000000000000000000003f400000000000000000000000000000000000000000000000000000000000003f500000000000000000000000000000000000000000000000000000000000003f60200000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000004c11000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006c100000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006c200000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006c300000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006c400000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006c500000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006c600000000000000000000000000000000000000000000000000000000000006d000000000000000000000000000000000000000000000000000000000000006c700000000000000000000000000000000000000000000000000000000000006d100000000000000000000000000000000000000000000000000000000000006c800000000000000000000000000000000000000000000000000000000000006d200000000000000000000000000000000000000000000000000000000000006c900000000000000000000000000000000000000000000000000000000000006d300000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006d400000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006d500000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006d600000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006d700000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006d800000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006d901052f4f7d40d5985bc4bf36583cd2403eca7c9073a6c3b904d5532d6d7253f7b300000000000000000000000000000000000000000000000000000000000011c000000000000000000000000000000000000011c1000011000000021c000000b002026457c3c1372a36033e11c1ddc0a6f9c377824ee0ece6c4a96788c566c65fc67c514ff1548f3f8c1f1fbf73742604dfd0ac82bd358047c97f5ecbe8cec79ddf97a664fb4e42dbf0eeb87ec5ec7a8a0157b8aa5b8c80edf069b606ea16424ba5d5e3d54289756b3fffc62ebea5305f25a538f5dd8eb2ac4cff3eaf614aeed5d73c3efbfc071a9f0ac2b2a904d598e301069eececd576cccba937b213617fe9c6d570f0cf10907462b0187fc5664fd1000000b008ac45da22dd17f11470160bc063ba9cf0a866c77ab5b8b606e3381d63125da3ef141804ccfb4244eae0b60b34d37ca3d8fe6c7dc3cff7acf6ccb9cd3dc1a26dd3b7a59223439dfdb9134d745964bf9b2397722fd1bbe46a4b148a3b1924c0d56ede8443ca21492a9062b70572c3d4d315ef06e40e7d1a61c2bade241e8aa457f5e56bc27e904f9ec5048d3607ccd92e22cb9f61a828d16add7998ec408f7496eff283b744b4394f2d2defd0f11ce35b000000b0186c31498c6ec2cd77f030d4b688eda3aa628c605d5e769bc72505040c1467bf78da1a5bdf4e3ff3f9303b0f8527b6645838cc46b6a952cfa7120df1fd84709852506dbfcdfcff4af7736687af0b9b178e074f11402be212d2ec02540b079393f440b777983b4b7863ee73c3ba719fb706f7b71aea2eb7c3fef46548f7cca6998056361d67bea856943bed590f46fdbe135a30914e7dfcbe56731c423f3cd6e786ae6abe4dd01938181a976f9b0ab9d80000021c000000b003d2adc633f6941b38c7be0eb5fa81605b7689a31834c3624f64f59e30a655ec1c185aa76917d8db8f56985e5223eebcfa8374cd9766eb19b5fac6fa02163fcc5a74df921ba892440a0e25fb2cf51799b59f3a61de4f7d5f7da333d0e3abc2dee2e1cc954df4a59e5bbe7ebe52ea6e6802b92e10aff1ffd80379342713f9816bae3569465bad3bb664136a6e99f974d21aecf8956ca4ad5a88d4f16f7407b609d221002a635c57857256314ba47857bc000000b02229f00bbfc33a665077e4702b66a1b4d57963400c3db31142104564bccf7c84fd14437d4556d5d87fe8c362201ee562a4bc4bd990cd81badf08626a5d225601161c9fb021800610c8f8f6145bc01a7a8c800125afe43dc8055eba1de51e31cf0eb432ce147b2f2a0e493ec4051ac7041c7da677cf43cb11216be87d2501b73403b3ee8d541dcf414e684743c900faa6004bd920ea1d5d0d2a6a5f0277a18363a07e5b5898cd319d35bb4aebda8b8cb1000000b0293de40cd671f24764214eb8bb23fe75c223c991c2ddac3f71afd05d2fd98eb1cf0c50c5691db381e6f0998dd7124890399fe632aa9379e64b4550e8801cd57f28164f088d9f50cd405e4331bca9823b05a4ae8ec4044c4b27bd3d25438b0339458cd0a9e950ed4fbb53b7b08838472812cdf00b9afd106bac6d1eb4f7f377f37eb4a46b82fd98effd5f68b483e08ffe02e488544923006b03d20ce207bc5315715980adba505608f81f1eb4d4d783600000021c000000b00df7099b50cfaa4eda6001ebd9eb465ea6dd094a5746ad86c8f3b3577a04d0ed20a608d3505e58dfac9a9d6487ca6f2923b423c9d6dd9ab504e1365513e6b8159a16603acdecee72b7bf03672a279cf31e23cc95db478659714db913497a820a7d1a797cc4f3064bb53b4481ba28a29d04725e26bba39f58c366627f3cb42496f1948f679c2278b722d4701716566f771dd81369371cb9f636d16de505d4d1f54b5ccaf7604065fe4431379937d9b6ba000000b02aacd0e1800ac6abe2d49e6467f4a8ca74aec93471e64662220d48700f835e6a73ec360261c343cc6b289d8a61eeab90bc70fff878359a21bf6e2a49a897448045a21bced30f11c856734cce75ce6d44952b72a075864436780a809a89f92881391afc301ae9b08488141cb0982cf65022063605c8d4959bf47afd8376329f3426b18a2a6706e61b78bc20f7c2098de51939aa0d966ed75ee58d4188c5be6051fc71d4739fd727209eaec202dcfc6953000000b011aa043857f8913a9016d092c50d20af04cab429f2a5e8a6fefe93a0bc60b0ab4c1b739df959b1f43dcab433b923663870966713eb9ad2259b08f12a2582ef1f1ebec261d2529f7697ce552e93fefc36a52116d753bcd4888addef503b13c28232f4434065743ca69fa927ba1a81fe2825f4a1ab5c35c9c26a4706d8d6e8b6ca139ff7092aba6e384ef09342e6509ca111244ccd5e2bab8e5f889be332a56fd6c3bb266597381dfd0e0a2026e57109230000021c000000b02b32f89fd0d0d2c99de724ab00783d796d73b4f4068055c3a6c4bfc9f4151093660fb545ef5e710edd953db75dc9e60e1d6d17f69581ece6bb7612414ce3a4925e319665a933ddcdc29cc3666a83b4febac3bd77d6f8af72504f498ddde2af7d00e394d4063a0b778758d59c57889ed8205ede8df36f0149b21aee3990ea1444c4a5156cedd82cc3f031fffc2317f7f120d72d09cce01e98dcb27a2e69bf920f9271eb68927a06d611969853487ce2a4000000b015e7e4f62c93bab8be77887abe447420435440f6f0a6971f44d6693579068a623107995ee9eebe2d1d1d671074848a2fb5a1334a7dd13cd7abbf4d9ef75dca7e890e7194510b9e69f490b7c55e156d53e2a0ea6ca203bc8b25480df12313dfd95b93be5e4dda8efbfacb378db6acb3da0d8fb244a4bf3893ad6bf5e641166530114e6e95cdfdd56e84423ef43516c6d72d5adce3cdd9add761394d034c2b6b36623967de6ec45f8750114cd88cf4c420000000b02a9231477517009d33ad2a1196b17d71fb2fbf646901243f0a5d51f9129f332bb5789461d5a26305d676d2293e12750dadeeb44ec5bac804751e8fa757f676d70e09d208133ea929c683c07c419023ca65e3882fc1a9b7e4cc090a543f6b5504c286e58b43344b3bbda63cbecf98b3aa01703f2b5d47b5788bfdcbba8bc7c5bb812eaf7b9b278141d45ab1b87f28c36b0aa98b4f4307de9133b640d1b6cd7cf5cebb8f3d8996c251f8ece26d3bc2467f0000021c000000b0027f2aafeb81b9ede1af3d8c205e21308580c8a93068715b935c117cd4b800fe13423c860992c091c4f1fdd3a616a9c8cc2425f660e4f39bede422819115185d23880c3d6a700204535b89c266c34c1638ec4460f82786e3112bf9bbbf2f9629ac75469d747b30bad037f271a26e853500f6058de2e860b145811a49e75c0efd7a6a638b016f00b90a70f9409c2f47e024b484958daff0b28cfeff3ce4f16afc80daee3b028ed004c5cc114c4e3c1b62000000b009e7e9d9647b8331078f368201f6ebc36c46f533eb7932096c66be9b35bd0b4db48863c7d663023e5765f79a94c82d6409dc0e683cd617fd8cbcb9862141ec5c9947058699f7de84d12bde0aaea217a9b317d3ffeac91be8f76aa43aa9b13585a36b8a8ed362c6dac04051fbe530f8431c397f3e09a3d7e7b84ab0d1403679cdc966cdc85867a39126662800e10160f315c7607b8f042f83f0ae9442f9c4a5508abfb0e296724b071d9b755228a55c04000000b0040fc6cd6be8686b2c2ae2bc5360524cdd2eabca1d8bca004f699459933a9189134868ad4f56d8ff4ca73bff01245c187bb5068ff33145afd85adbd300e6245275a19e5aeafcbbed68a7b176e418eec9a70fde0962af0294196724257e8933ad407ee9739fac336ee762e67fe3915b16121a88e26807be2264eebdbd9c08be8ee4f2c4d5f8a02cff6500b2a4b09ec59b10ba9581fc3a753a5cd4ab1b1e6449339e6d21b3226e5d1a30dc342145c92ade0000021c000000b0096fca2236db4a4d779d051fe77a9a0c0bee14cedc168888adf2f649558e4e07e07c9f44c8adcb5f01b6618f2986a7ffb72249716465f3694c4b7323961909a9daefcc5cdc11ede4d060322606940ce221e224dab2143e57279659751122cbf5ecc31b05aafc278a57e098869c6002e10d1ffc623ca2e01efe2f4ecf376f99c33fc5245124a870cb16e5ff6cee3d8742177a9d7728c8308903ea39d7cc228670a8448bf84547841df98328979289dd72000000b02e2a3389944fa6bcb2455cd8582f8d2a5cbeffea6c195b198d4eceb6e1b068c627c2b81953473b383cb789bda7effbaa4756fe560bb323557ed355c4cc2408944dbfb80d804b641b39e939e6caec70a04d71a9e5d86fcfee53471d886327bbaa561bb6ca01e6c26412ef7bfaf14cd2052a4522537310569cd7390ba2bdf738b83ed06ddb4bb9d87d28cfee9e6fd6a8ce0fa8b9d3cbc6ee000eca76e3a840f843de6085f7a330fef98fdd03064ed26ceb000000b02cd9f63f0040f72d509ad6682aea5e9ed09c336b6f7445b9e6b9e94fb047aa70eedde5b3e450371ecb1209ebbebd6c1c64ef33adf2e8f6f7997db2eb7073638196ae32cbabc04faf5ac26d79109deb7e0d1aec5587984a44f1f811e9c433408c0dffecbec32cd03368941673866f0b1f175427bda5406ca7c291be00d6e626562387e7def45cd235f044bdd3f7871cbe1444013b26d41773aa5b3633d94926378f1499ecaa8d2327f050c2391a0cb0d40000021c000000b00a688d2486efe81c1cb379f2ed744c912a17a6d9d013adb8c7f573956843f0e2eb6f11f8325a5efa60888d15bc47a5a4ddc9034d2844fec6cdec914b0d1039b26399cce3670d70f06bc1f94dbc02fd11bbcd84d204b58590b217164dec1857361a57796e77f4237826972d5d5015a59d1e60107eabe092164bef48cd281dbbd24464600115a1433df09ec70602f263f006430703f94f9c498bd5d1472b723ce9fbedd4bbfaa3c5cb26dfa2f4079e3842000000b02b8c2dd52facdc49b17158d81e6b190561a8167a13cccc5fd991cb141241f64d3bd24529d17140fd9bd3b2222a9daf62c939614a5362204b585e5d6ba8b3692be23836a0a1b5afccca5063dfd6463cffaf3b3c4ca949a01d6b9c6624656d81abecc3e131839b5d119807154a3c7e4f781ebae7d4c8a903d6664df3a62d59fd9bdbd789aba6c5dae05f17ed9e964d14dc2db5386e26c919ffc736a06576d9eea5cc62a8f9658297a2f4c346a64b102099000000b01f43eeafeec20db45f78579ccdac95338d6a1b3bed7c0866edf19f345e6ac9b8e4e5fe5d1cdf5653a869982fbddd63d695452d34742fa606258966cab72251ad914e35927206affaeb386f15ea39a5ae6ff30a399bead0c3cd6fdaa51adb595a97de28202b6bed30f075b491e111c3d729323b14db9caf38912b9eaf89bd65c2991927c0285e9263c732141776ee41761211ddfae0f82557b23fb9bdec7f49ebcac1aaf0a7e7e76a1c2b199e277332f00000021c000000b02a42a996804ffaf76b7b8101020211d9a64d50b0890de6cdc21af2428b32c6d775f5a7a14bc35245794a6abc3b47577d075f44bb49bb04b9ade5010bb1a0a3edbad3b14d61ba1c0392cb9ea7ba65da28fa4b6b5c42e1a965f971c8536ccd59c90774085d052c40f8d4632a8f94ddc80b2e0d0f492a3cfb6ea3f52055d1d5133b131c2a34ceb05d0f81636025c933e1f311d91b9893734bb6aa77bfd7e3b903c42ece3dbee72c7da9fcf11738bd6b6c6f000000b0235a7700a786361103bf74fec6ec6cf705a5f06c0324c61a753cab7d99be9e95c92e530fe0fc022ad49551c1ccbbb6eec9773e2b3fc382080287b0e9627ebaf1184ab1029debd9fd612b63adaca59a931702d380ec37cfd8892a7ab9f3d9861c4eb08f953924a19a737c427f490d6e5e0e21984c896abb4b063056c71891d3db30a68fa46538243ae6c9c13c1d29021020c3b8d22070f7e7ee3c1b3e51c9cfd465db63697a13dc307c953367dbd2f1e2000000b00ad84b23d81f681722f42ed27a55e66e743c98b6d24c6cfff1ddde321241cba3b73e124adfcd422931b23756e92ce3e4f09ed09949ae12566a9993e9c738eb20cd373f07adec61bcd9d92270356c5fd360cd24374da9cf781742ff0c24327582196b7663d8eb1c992d0ea58f55d25b100f146f7eb115bde84ec76ccc90965e4944f1bed4e38a33ed6227b7936346a7801ec7cad52d556160a35ec406c760ecc6a3d4b13ebf369f0383e2eae46c2812a900000fa400000168000000b009be2e5499142d4fca414be527855c4fc5a97ef0b3f6892e36cb295c42b532eddca6e9055018726054dc799c381dafd525e275d48a9aac97980c6846f4eb1031cd31112b93aeed54f46a361033bb250e2a2235f73bac9819e8400eae8c7d763b49f6d69d470c50ec5f8aa1f871cc69e8190180374ec0e1aa07a3504f19c1f77050a86f160a55abf9ff3180678b6bc4c42da63127ebba1918dfc6bd9359474e1b66ff457b88e8d43e3a75e3a2ee82beba000000b00e8438d85c245fec782641a8a41b46614189fcf07abb651f121f515cb760ab160f32174b8d27a9ef30968bb4ec5381ffc89015345bb7d52abdff35bef8ddabef24f374533ba508de8a2322df836ee8ea26618329057ea29820f73f983141bdd8e9b812ee0fc7c6eedc35eac838e6d01a2d171f152ef0ca5514b7b2ffc55247758a8c18d6ee54936652ef6a8a326b6d1103ae2ec3c4beb024ab007343e85d304b23560cebd84e10c9adf5c27e19a0cc3300000168000000b00a5112d62522f07cb57bda6fe73215e3fb6e65fe2b1f219da1c975ed0397b599041a6f774b4897e56f520901241538c974142c6f1124382d371088dffe12b840fd22f04922c8481c2288232fa15a96147bf9a9f987d1af0bad1ff1e271835d624c0ba6e7af7def9014c3741ea1b4bbe1298336e9c9169ac59feda8925e45fc7f695522145546fff93e95bc1ad6a5b4a313e0c366208d50f312b8d09e22773ee11eff239fc0cef7f40bfc39af59ae86fe000000b01d252e811e1d2319db11e44a415dc95fbdd2a2cc922237e89f89539e108286ecd97b4bddde52fee5b3242e7d50729e847f58d31943d04a3db85d40c335ea94999c171b1ad95c76784b5e9d41cc5943acae7eabfe3ba68a3bc058e658848c7611b5707c05ac3195458fcc6e352b636ce806cee79100ed5d60997c8570a14f293fde1c2ed156fe02897c062e918b5a26411922a5c09778b6a105a4c3608819da6aab09ff2c37963223ea63c56c7f573f5300000168000000b013bb67893a9a38717dc6e85ec20b99a0860da1449a39c859e0e0078ed7ba838241c90759470fae00c43b5070b84d48dbc19f4016a7f7fe2b6edb19e50585f009082ec7bd0971b5bbc0c4ac93dd9422f8d8c6fe913eae46f1d47b79028a4fe3a642faa3c3e62623bcd873dab2b323d58a050f303c0c93a8f696a9467c1d17fc21660dd93d70792b14188701e66b99ae100c3af8415bbb49486073605232ca872f5d2b7e25252d2a18de2de9be5a560afd000000b024e7081b5718edf7c075d43b7351863efd82e5ed5aba61793e7a4fa189a2661a4fe63f7dfd6bb76fbce019938506515f2c6bfe2c4c6240773bc72a2ae07a1bdddbab15bf1d51830bf131bf5749030d7bfa1bd0fcd39f2750c3185def8a7da707b226169c9a310afa4b2e27acc507e08d123abb7dc899941caa7396efdd43d306cbd2cf2377d359840bef9ec610ff41052f64113427604d4dde3a726ad8809b89795a9d632d2bc70408b0c3cad9b8e05b00000168000000b02ba9fb4f380a624ec77e2e19706906e3a028b368de3374a618fc6ae779efc80505510a68c28e189f315404436ec00f7b74d155c46494004abe0cb85992b7c44b9dcaecea5b78e9af5b28c2c252eeba431af8e9499a94534f26490f9d14d2b83ea17213c5879a98f48813f23d98bac2c42a384b324cc9c9fd9feb131f179d87d5c1d4bc6edda103a07d051d48aa45058912562ab0a4f560cdd29e6e1e70573e2ea5118d18fccdf2660994eed4499f1f93000000b01d2e2ac9e040fbeaddcfa0e451f6bedf9afe4190220eff30674d9937c95517a9f150365e339be7317edc3fccd4ebfb91983ba5a827087013ab43805e4efa2d4a5759e58604b31dae04ca20d78734218cd298f6cb3b0b7c045f40e55ab6da56e0ef6349a6aed0aee67a327da2a0e303841f90f2c4cd59023d4d5ad39688a0154e50198e7d937fb72ece7324606207ea8c00e6ba257cc86bf49b228304ee6284d7456d78eee12158da71973c53f9cf1b7a00000168000000b02990e66dc377d27a467405b666c9e957a5726be7a9e08d2a86f60b5b2a3f6e3f2a59189b047add3c17926a87a4b3de6ca6cd5610f9929be2551f2e145353be892caf499aeee96b9f8a28ead4b7ccc8b0c18c111ef95845caaf8e42cd1c6eeef1c8d0b089ad723e939c6bae47a18ce91a013868691d995f9532a7b0d45b3e283d502da0c1c5091db2216d05cfb973db25137cfa1c755383c0ce3cc86d703eb91421a148a6dab3911e5e8ec24298a59708000000b014d1d6d25acca05790cf2e689ad54a4357403244cf6f93adb44daa4b147cc59fac5d6f50dbacb12e4a71ebf35b77b50749bebae22a65ffa9bc0efcc52a3429bf1c947e16877de8b8f5e2373b884fc7a927d2946d5d26c7cc8045ef6e236565a9831e5b7e2ebaa4305bcaac709bbf5a982b39acd52fcaafaab9504445b9f9cf2719646242f560bb23c178db4e05a773af24f8ec201dfaeefb229a4a028bf9ce36d8d11226754f66f59441a1b37131f75b00000168000000b029dd0ee8e4c12cb3611ffa96454fd082750f274d9c34279a4d3da04071ebbc2cf52067ef67432be70f96058a3d2a01575277c5f955f0951cb84bb2be8b86bf9ca9de2463f1fa5dd5041572afef124c9253e4850866c4afd96c0b8660ed11c6b9131698ec4db3bae4bacd52e1bff981c516d7041c4101a21544036c62311058fd7ebeacec11b17c8316332ffb27d03bb024d2a6c727bd0c7ac75c95ce417cba483143dbb8ae93ad86e45550e2ef9edb32000000b002410db7d8737b105bf11b8de773d48e91c229e305af4c31626c4065457db2f44f320c6b568a1d115ca0325619fd5bd0d14d72cd355c6cfc9c3bd435a1dee8e7481e3250740ce975ae98e39828a063496ea54444455678bbeab1f3f297e1ab58b68b0edddbc26632ea38600a186d8d3111d5f62b20a394edb6c468080d34fff5e04bc0ed2a404eff80ad08bcc3df209500c9877e01ddea6941e9abe79f13ee528651db9af3895cd7eb68d8f5932aba7800000168000000b01159aae8fd1c6208c67c2fad7fb984a3b8e47a70c6d42861bb2e405b6ff4e686f07428defa294846705685b9d8d6b7a7c8959fd8f56e913a2b48f442dcec55a9a3ec569021ebe3bfbc09384be2e54e6360dfbe9013c917c08c37fd55196cbf0205475118c2603b2d25e51fe69fa3a7711a2f2419873e0be35b06321c9c08e1a4d9dcd3655c4d692697297e7c7ed1e40b0c11cde0cde7f82d2e7b6463cf5217dbe4d1ac8be27b7270da3974eafaae8837000000b01e9eaf12887ccf57d6666c94b23803a67a8df7fef73048021d83ebed271047e2c47ab8b2447290a602967ce34270a10dd45c20beaec45753bdf95fdb407f09e3932afa25a450f5445d74d4b7d3100b28fb93a18db2063b29babd1928c41c91a87314b461936a778ef9ea23751916e71102a75ae7b3b22c6d661c7773f9e9463ca59f26ac336be7d55516cbc6905e1a470d2ab4ad240dd8f5696c2da168fbb20b6bccd8cdb8fe1620ea21ef7cf40c61e400000168000000b008dd889a261affe3e169e621fbf61f461ce1ba11963d93c264887ffab0fd155d8744436ca3dfbbf2c6ebf539c6a4e1d7a53547ea73649b2a329770025b91733df937101126b8c203b9b80bc415e667ae5f9d84236b5a30d14d2d5244d7cfd9f122a09fadabb2da96d94a2a49426dfed60c39fee7037a7acc7bdb572912434ad24f26c1ff571c6bd2fabb6f5c03738d55202bbc178a84267c48590efd86711a162d2fe16812b595e2061e717642a02f05000000b028148e4958f95384ffc3f1fdef8a8d388b09d298f317d14c27b05fa8f9b52c2df656a924287dfda9eb18f1bfd6307d5e56fc90d2470944f3ca31df5589372b380f68d1a076d326dd16420ab7c232995711fdb251753cc66ce608ea1cfe39c90cdd1be4d428bd27b210662561afc98677259a6fbb209fe972d6da4d6f791972b04f97c007c8bd0dcc7b61ad05c0ea43242437055e5596582ca3ea2242206f7e37ffcd55cb1fe44e9dd8162c4889478b9a00000168000000b0193ff9fc02d479b09786ea9d59c9f5f43e744e7b11b26c3b423223ca049f6b5e5230dd2c15a551c7a3263dfd18dd691a81487db67806c52a17ce3d0c58b387e1a49003d52546a02ec226f10663651a7833cef03e0c6e9a801b4085e30932601f6a52819943e86d0bdab482844393d4c20cf2fa502e5036fc55419704f22ea2523d84e1db9c314fefd0459ccb1b7a90782359ee51c493e966ffed23e582a686846ec9f5045bd359c260caa1923564cc6c000000b017ab8e622a4218c95719ed08dd6b0266413074bafc000ac146d95fd982e804ec4cb3307da970930511e3221ad29b374df2e94bcf32f57065d6ac1d161617d6532840038e08403a3285497d1876fe1fe2171afad9662f2c3d9e8ecfd34e917a64ff02a6fe0281b4faeb8f854742a17f0018010a8bdbf32d92058600a8244e70847c2fde2640b0298815188312d95b80bd08103f90e98234a3e3b5a53a7e7cc78efb6e2c6346880049b2c1e0bcfd21ae3300000168000000b01948988fb9b87b4f1f8609020cf1c36f1bab937a5a2219b45c4d4038a2666b87667b66806359f262cab68ff53edb6d84f25f1601f641ddf2a868d9fd7e37d9d62e80d3704f2676f6423931717c406d9605aedcdd32bf5db0818a3658511a372464482ba76e116124babd184d1ef8b8e518ffae8d202795b898550b28eabeaeae43f0995ef9f173b4ea5abeb88c2720721ebeb0abd56364d0dbb758c20c50d8e607433fdd302368fab6b99a0e8a407afb000000b00afcca13564ab1e2bae806dd3b249c8b8cdaf2cdddee80bc7ba212ab76744cf2d8796f678b3b73e68567dbd8bbd9352387866ebdff99537821d98190d8117adc15b67c333e14a14a340f883efe1bacd5628d10673f16c706929838d040d7675c04061cd5ebb2fbd360cf6e3599fc48ff15839ac9798fb5a7e588f62c4316dfb770a562308c672619d257ebd8dff80c571317663f59a6620cfdfd25c33ec3aaf6ce7f6b3f3cf159fe4465010d364f70bd00000168000000b008f5b7f88a369a0edb78824463502097a31c37241914c29cb3d39a362be37f6a5d88a77a5692ca94494b2072200528ccc0e0b1c742251e0669d585eb73ac5b2665d476828abd237ebc3041769949dbac08279118c8a78a9a12faea40e6c2c3bf251c70f348c9493b55472f0242533a681e0bbce8497fecbf20db7a410535f71f54f5e651ceb3496da40eb6d17e53294b2fd22ff47f0fa660705f454c8976412b06a48b4b5f22441fc0aa3434bd797e50000000b01a32878d134a7bdf7178eda37664979432d8ea62dcf4ca828ad952b6f5a3adc45f568b113e4432b78826d55c25c6ac65011197a7c5499e0e4f7a86bcf5b87c843a565db02cd0749cc6a1b01b2d0d5facef12ec079bfdd2729b3d4c61c6a9e669342bab5bd68900aba107fd475c152cd404cdb3ef402d386bbb31ccd46a4442e241bf28e682b34f5b5c3eecc9b293ad3f08382fd7efd0b91555de64ae18df4921682f5a84bcb1428cfefbc12537da8fe5380000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360000000000000000000000000000000000000000000000000000000000000337370000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040100000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000403000000000000000000000000000000000000000000000000000000000000040400000000000000000000000000000000000000000000000000000000000004050000000000000000000000000000000000000000000000000000000000000406000000000000000000000000000000000000000000000000000000000000040700000000000000000000000000000000000000000000000000000000000004080000000000000000000000000000000000000000000000000000000000000409000000000000000000000000000000000000000000000000000000000000040a000000000000000000000000000000000000000000000000000000000000040b000000000000000000000000000000000000000000000000000000000000040c000000000000000000000000000000000000000000000000000000000000040d000000000000000000000000000000000000000000000000000000000000040e000000000000000000000000000000000000000000000000000000000000040f0000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004120000000000000000000000000000000000000000000000000000000000000413000000000000000000000000000000000000000000000000000000000000041400000000000000000000000000000000000000000000000000000000000004150000000000000000000000000000000000000000000000000000000000000416000000000000000000000000000000000000000000000000000000000000041700000000000000000000000000000000000000000000000000000000000004180000000000000000000000000000000000000000000000000000000000000419000000000000000000000000000000000000000000000000000000000000041a000000000000000000000000000000000000000000000000000000000000041b000000000000000000000000000000000000000000000000000000000000041c000000000000000000000000000000000000000000000000000000000000041d000000000000000000000000000000000000000000000000000000000000041e000000000000000000000000000000000000000000000000000000000000041f0000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000042100000000000000000000000000000000000000000000000000000000000004220000000000000000000000000000000000000000000000000000000000000423000000000000000000000000000000000000000000000000000000000000042400000000000000000000000000000000000000000000000000000000000004250000000000000000000000000000000000000000000000000000000000000426000000000000000000000000000000000000000000000000000000000000042700000000000000000000000000000000000000000000000000000000000004280000000000000000000000000000000000000000000000000000000000000429000000000000000000000000000000000000000000000000000000000000042a000000000000000000000000000000000000000000000000000000000000042b000000000000000000000000000000000000000000000000000000000000042c000000000000000000000000000000000000000000000000000000000000042d000000000000000000000000000000000000000000000000000000000000042e000000000000000000000000000000000000000000000000000000000000042f00000000000000000000000000000000000000000000000000000000000004300000000000000000000000000000000000000000000000000000000000000431000000000000000000000000000000000000000000000000000000000000043200000000000000000000000000000000000000000000000000000000000004330000000000000000000000000000000000000000000000000000000000000434000000000000000000000000000000000000000000000000000000000000043500000000000000000000000000000000000000000000000000000000000004360200000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000501100000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000701000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000702000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000703000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000704000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000705000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007060000000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000000070700000000000000000000000000000000000000000000000000000000000007110000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000071200000000000000000000000000000000000000000000000000000000000007090000000000000000000000000000000000000000000000000000000000000713000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000714000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000715000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000716000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000717000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000718000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007190118ed29009967db1af193f6fc8620824c8bc6022956acd33bfacbf6df3445226400000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000001201000011000000021c000000b023075b75e16b5ef19ff7f1570175cf7ea5ad5342a9690073bdad113c53a85a373283317e54423625761919fcf19f36a8c5d294ef5a289f6d1402355e301f446b89405da6aa5e2383b52103aed60940e7cbb8b29530e2e9c1279d9522f4eaf7da858f842609ec97666ababe5fbef942a02f50553bc087cfe41ca97b27bff3f820aeff48fbf6bc47adb074be5aeff523ac2ea79d0c891791679da6a3de3173ae0fa5cfb06a5a14748d9b7e283b6cdd271f000000b0004eaa1c71d991e62ecb815f1853d04df3f8dcd50cee831db1dbd7fad0f0238df6d2187cddce56924d8c6bf9675884b4d27c5238bfcc1ced1a4971be5501bd70de34cc1954ec5669c7c5d5a0350c5b6e59612980c3af3a1b7e448b864fca7ae9faaa3999105ccce803c1c6991bb0bdd7239bda12bbb669836588a8b3ad68e12c8bda4182292b859f7a05790b85a525361bf395b5dced9d9dacb40fcb34d37613460c4ff48111afa7b7290ef5b8ec99b9000000b022c41bff66543b1ba36328c8137add29c277bcd62fa95654640440256335731666ff61ef49e479d74295860efc358724d085cbb839b3fb97b3d40a383aa977129f35fac7cbe26dd81a1b9ce7fae9765e1b0b8fb1284a5778a71e6afc90e40936ef0dfbd3675386d339950f3fc3bf0e591c8cff9cafd37650266f3acd9a75ebcd9f615f5b39a41e70e6e7d4fa4b39dff00653cdd3449eaf11a2700281e06f8173d55ea5dc34d5cce5339a3101f623e2650000021c000000b022bd15a2375aca3a58e841d5df60ba11b7d39a11674422caa296e4c59e290983f9008b4f4dc79f450d3111724d604186fe769daf2cd9f91757dcc9f91eba1ff84edbf06d0ccaa9b2ef0153e8bcf2968e67653b106ab0c7636019adcba5ccda098354f9701146c8491aa4656673a2b3eb1ba69381af5b5aafdc0c1f06e245a53c4227d9d22e42646fb0e31835898f519b1d9c047d8d3c092b597e40b206343f872b47be0313fc08d7d9bbfd05c3334977000000b01d13155720e6080de5fb3d1c84962080923ab33f07e1c5db6208c3f29988e471a6bb24361b36ae49198dea79d467e5a4f70b5fb5ea11a824b06c36c5b4463f02bad39efae4d2d28efe8cf541886d511fa3106a144a013358459e755334cf34a8c682d5523aa5d941be32d365488717da20e4d58b4bdd57a32f300f87ed5cf7597ed0da94fc3579c2ab19700d6bdc752414d7d440eae8a301279de3778ca1610b5cbd284396968c7586c3e504f2c37742000000b022da6b6248874b32b886bffbdfb8feb1b7ed62ea3da734636a110dacbb0a006b81c61864de1c1201893bf70ff174a7b59694b263f278bdecf86d8add6adaaae9969542216985327124850775e9c5a425a3173df7959555cc7c26d7eb756d4372a9485eea18de2bedcb0a066011c6b1f60ee42bbe96268ec39a9280f16908c869206927d66287c612a53dfc16ea3b72e80dd4f813dab60f2ec1e5166801419c35b643bf53f453164febcc1e38b15c9b120000021c000000b004c6f3c0e6c2365f15d0ad4b3e943403bb7d71436c5d681bfb27ef80435c8679433a0ccc0b7c1723c70571288452e2cffc0b7a7a98919a6fa6e18e86b82e50821a907a06a116c8bfe9e2bb040e9bed15f322ddf88d210c966a592be689be0dcb35782fade01e8269d47d95ddfe7298fa1742b17a18bfd1de0c6b60c3c6bb3b213ff9defbb88e31a2c2e6ab606df391bd0b7d86058d41934f72eccf5ac87b87a9cd4c580b2465356540ddcb1673564085000000b004060208bb47bdb23d28e8b3505ec08de41f32e4305011af643b89e8642fb97a6ca2e9fcfe8245c2aea19cb7c47fd6113dee06ba0b0e6f320d9cfccae3aaca4db3d61e671970aa31e63996c924cc7f72ec9083b7210ccec3cbf80bb94d82701ffc68fe620b1bbd914d5d4dbac9925b2f285c1b68d8ed3d98e7e83d9df1a432700779839100052df048cd159a09b8fbdd2be3be7dcbef32c8e4ea45ea454efb1db0f163bb7c93fdb6cc21d7cc3b50ab77000000b02ac90edd38b53b50ae6a17b5e066c96e430b06607f277a1e8d131fcc0d624569b3bd8e2d1e016f299e388ad556f7f5a62d9b42d32cf27a3f4c48e9df58915f42e1ee98f2709d616701a0fb736bab728f6a2499510df5ad6f62c679e918d022e97ace20b6e586ff0f83cb27b2c268756310b6f6da84ef1e30b2ebef928f3b3ce16f84a2f58c5c617b746da8800281adb313d542e2aa1aa8ab89fefa785a65c769b75bca77bc296aada6257e6fba5d8cba0000021c000000b0210d26e1d8fa484fdf271b1d827980c1cf6c5eb57d44689906473d943831cae1173f0eb120c094b65c313393e84d1b4136ea5ffdfd8f9f9e55362c8945a1f576490c2b94fb9b0f6ea91fccb050bd3e062c234d6eb408beabdb9937e5209ad9cb3e967c2c6d9f550583e410b7e4ee12830d8d7042c4794ff3359a6c3e2bd595f2c695a993d0e920598f44ee657165ee752a178e37436d60b10f6538e430ec0b71fa5ed2659525e12f3c1b8a5c944a70f2000000b0095f944e3fce7701799409fe8b76ed07558ca79f7eaec68a08a0829d1b84b0ec75d52f8825696a4bf08d825ddff6e43336612090d1191781737e25bc72dfa86b1a369046db3eab346c6f0a49a1cdee44d53174c2217f58b21b4849db245f44dbe4d02aa7df4fc9903827aea33e6e40be23c3eeee2c6b9b9ce644a3b856e1b0cebac13d78f289c728f908d7cda5ae2b232629df6320271698e96a937197596ae3ce96d745bf89d7fa70381d3ffcd8d035000000b0211c974520e0a431f6264d011cb800d5b9e4e08636b244f2210f9601e19e3f9c3eb72b9e959d0bf590b58456bdcbc5b9d3ccf20935dda7b5d66399e07413d1fdfb62d7f822c89767d1f818f99e4fe66a2d08ad18d886bed7ecb4de5185afc479b5eef92758c224d679d13ef7cea736230e9b6cfc578424a34b897a2c1cbe3ee61958548c7343e87a8f776de4f2f7e1f811826120dd0ad8f2d4063fd3b08329827b62ccccc1ca48b199dc08585619fadd0000021c000000b018b8b2ccb20a32b16ae0d08e6f7f970eccbf63bcb95cd1d410c29fb7032263956a2809c379fd147b0e8c66ca90d468d920903fb0db2711793e7f4f628a81abd0873c857c092e0ec78c060668366ced1b74573aa1b5b2a23134d267980235e762e8ac5d398cc1b47105e309935ea6e43d180ad93049a6a1056ebabdb1e9bd8c8a35e993495f25d5281be61f2b68bbb03e099107f4060c4702ba27885c5b06f43d309875e15507bd50f45647eb62b11e1f000000b017f264dc8cf5019511f16ea700c877c08445152d6285e326dd1cdaaa612c35f5e585e2601d7ed9e5bfc958dfe2f978a78c9fdc6b1aa6ba8614861986a4b9b259ef834c3114a50ce12a053c370664fd81f1a112bf16c1f362bea3b60925181761a9699e006fee3fe88564a8dce9a647fb0f84fd427ef7501727494b38b72d179498fb198a0b6d735767a2c235e92b317e225c68889d32962f61196892e84c5753b4b2ca996cfbb2b1a117869f25c07d54000000b019bc923f9e78ad19d8f1348b2cbe9079ee44987ba5d504aa97c6432d2fdc11d9df883a36bc15ef0a5538aebd0185bd8b5bda268080e8729f9a64b9ef723670e5fade19155c5a3ce2414b450b673a746a524753b0990a645fca32cd197b7cfebb696097967cc915008a3ab35430a439082cb9ab012c910376602709c51c8aab418fe90377f4197bd9dc4a7b3045b706c11421b4206871293b2b4e6d4e04a4dff385d3974dc2f603587d8e7606a2387db90000021c000000b029e175aefb82d4deb081f4e31e8aa2bc9531afb5c56097f7c62534ad1ec57c7078ffb6c097f3d4255d5e5b00ec93470d97a208821628aa634b1fb555ef68e111386a4fd6f8eed5fb1b7dc6397f33623b80ab320ffd4a59179ad5c3d31ee437a9100a26246a597b28ad0e028f67f375871a4172b7e96b8e1bf1a1d813269f6c32e1a05c7220cb254c0fcbc85b4173962c0ce6ec7b875d9e20090532defc79ea005d46090e4e7dc3d186c1160cd091e74b000000b02f91757bb58d172d48f9bfa581fad83f0c43f0b4eb58fb95d89e6bb0992c1bcf3af56351c93cc6d73e360c8700c8d9ed4a8fca78365301e71a9d82af89e5f9ec7ec390406748856cf9a3c8be24f0c2cc70f127ffccc21f82e7bfc4726efadd82c185445fcb26f7a636ddb32720aa164115e708582c9b0addccd6919c9b6c7f03bc784ec7cb3c31582c3dfb7c1d02027b02eedfad95c751a69df243c1fe4e055c8de9c2fd0693d4176c4930f14e0133f1000000b028e8a8fdf116f463e15389649ef388b92042fb88999aba018492ef6cfee2eabae28cdda37224aeb3d1b94c74c04e14a79d83489e2c4d204bd9ad28eb21064fbba56698f5739a18798b054da7491bc1ca8c9f7adfb824ec9324d8ddee98b55d8313d6dd681b31fc953ae3cfa1cc4f60c615cdb54faeea3636fb41352092e6ab1f2a0c2fbfb33ecad9f78b1a4d02dface71091d367de7e0f7153b87a195ff971d169bb68725578b394f22fc9fd41a20bb00000021c000000b023949a6c487e9e6d6a36b0e0105bba8b88c62e405d4bfb394d7219434876145a03e633d9fea9702d857613690be3f90d0bceaa8fc45f084aa19a1d7ccff536e6431aa1e9f9d18563faf491ffc08bdded11cac110d5bf40a98f86fb4356586abb22d73fab3140d0feefda08faba7e1e930d4cb587b399bee7350f5c7d02277c46dee62a4aef73a88114e9913a25bb298c17a00a20173646241d2e4bb0d23af15df312aad1ce7f2462af8d6d55b1599e5b000000b02f5e1f632d8f87581f95cff082f25df2214cd47b6f0897dff00156d56ab941927fcc4bb40964d1acb3f865f8da0b577b5b495eaaa457267a191c48d5c2b181668009c7dd5a4f3916e80b7e63decc0458ea719ead281a52935f138d99f2f16a892aad6cca07e238db2734ed9b5689d2d8202ef014ea6cc9663da75918e2766e36552820002d97fa793469cc767edd5c79294a3f0d5b78d3b4d38704d1765fec754e83df82bbcc959fb16e569ee42d2b2b000000b00c1f1b376d4bea2751fb9b04dfe2e4581d575a4eeda2ed9a7690ca384dbf113e052dc280cc5928b1d62f3cea14239f2779054463b2bc5f2a0f9abce76b06af9a2a175fd25cfe980e4d996510036db691cf72a60a201441ae68117d39892c62218f60e4d813842c720303d314a34181370347b55a72a6e6d668f198fdfcad223f31dd44203a404b5fa5693880614a792010fb39bb28938307de0596149d67d8fb6da9b988023f96857c68f300e2a207370000021c000000b022f9a7a5621d202a6bdce5d2f99e560af5267d2a5a03c3864116b7f860506023975d7e2911ef6db687a7389e2289cb89fecbecd0d96d169094afc28d990420448e293e794c4ad537cae64200ed40d8b14d4a8c6b6be14692f12366d4a4493e4004a57c22f95342b7c865fbf959cf905816268cbf0903f242d9cf4610f1fc18a5f1a025d5f726a2df58a88b3107ff0ad118af540065528f0a46d50f9a8976d1029baab42ef54f226c4ea7f0ec91b3f31b000000b01f977c7e636234e7e56a8d2c791719665c87cb37345a7e89c15f69df5176c1d46028370a0bd5474d11b9be345285aa8efaafd425c18dcab0e21c8a8c422e29106a805b7cc3bed503a4225e8a1a026f6a90e9153856232bcadaa893cea9d4549f296ff38a3cd5ddaacd5ef8839e7f650a06ffc6d0d7fed02b1ea404d7170a7135a23f2be5072660c5e3ae66c280ce85a12f36a8e188bd5e118a124233af07a222e63505997efc28724aae2c5beebb2780000000b02924214e7f395321876fa87594ee20b16530e799f5f2d3157ca02da6f937045259dc2415ad85b5a8e345fe77dd00e6ccab2aabc7d5b8f548deb2a2d9c49ec0fdfd5ce183eb263d05c7a5cc4984be5f4d5c44276ca62735725174befdeccf9a3075af3620f56616c36a4db6e73b73e49b213c6a6c055414796e59f46accda35ab2e049d8d2a521bd3bee34fccdfd97931182b811f19c7247788426e4817babef294e07dbbea009af607ae357cc10a3b5900000fa400000168000000b00374356b15049409e77891746d3ef80550dfbc0d0ec44b814a6b381106602824677c31069cd53c0b4376fa271df9d555e9465d92eb6694fd20aaffe40d4aee9203f0eafb627ac3af196cf42b1cfbb7cf9670d148a8939eba40872dcafc478e9e7ec051894d46e5884df53bcba93b6d692444a8e5eacd7b467320f651f47bd5b796be15187c865a11bb4f33b97b6ee3ca2b3aff992d25291fe40a23f8324ff8af30cdb0f042f36e505686c0b46d59e8f4000000b0050a89e80f33f0dc5bb334e246c236f83620dd7f1e0abd090cb835e6bab8b0e7a8c18563203f3cb43497bf69fea3a7b434cc7a70100ff2cc6b5108d6c117e2ef112a1e81af9743a7a7b7e9c0563fe9086f9be7b69056f961a2a8fc00288df4e508ea8943409018f733ccf09a9dc68dd222749f2f207e4e5a1097f6b576eb4d7648b4c2abde74e2a43c22b7216635167a236c50c4b16801ccedb5ce9005c0954e1d560dc17b62fbe6615145ba74b9413c00000168000000b00b91c84a2688c18221854cb6896a680b8fd09be28a81bc089b65f436d5136a675523239d764ce9c4bfec04a8242572429d8de4822e7c8046986a348b2fe45327f4a8629fc6ed0f7e446e63cee346f2f99407b8a3668371304bb6bbfb2c12090087ab0f0be4aff65949893b9e6e74d53a0c2941329fa7189271cf82b319bdb7878b573228164be84f9b34e865d380cb4c281a54cf8ca16f9be3b82bdefd1c14c61c19cfe92d3472bcc85c8a7c496f1798000000b00c731b83ce694d8a0e4dc47d67dd2a1096460886b090833547a5298f8f49cea3ba9033ff2c68f8f4250239dba4b6c43afe54eb5433fdf84064368cdf2cdb18c374762f67ef4d143181b532f1fba78b154002b232cd8cc2d0aa28f805056acc738d4e4cdb98fadb3fc778a6a123ecd234075d3e8736f3246bf45e071bb0a72a64d73c7c1c807078bcbc7dfdaac14a5f1e00729cc1b9fffdbcc48596d6503146259d5507f65ff511ee367ef0b940466cd700000168000000b019a89caf500406c3572b276a088ad244f2edd93b56594ebab5e0673634aef8cf6e0770d4fee96407f82bdf47fdb1116e0ca112647fa0d4d711e9ca8425621a94e8c46f718fdc066a8bf9afaf37248eae7f58cdfb24a743b5cb357ce13b8195c75f6dfb471e84168c95544bc5a410517f259224a67da56e80d247342e987131b7814d5d9d5f01a32822e6fb5e72e867411caa7dbfe8e088d3debdcf6f4f3055035a33d28e86f2714a55997de8ddd0ec64000000b01f2b4ac6f959c8be301dac938b0c0ec088deae2a864dbb5c8789345386b282b2233d7e5da1f1b0ff2395524a318f1dc2061da63abf03f5c3600b0834546e4051a74effe14270dd7b1bfef63ee39c5d1a379e66c5448bbca44254fc0b6f4b9ff49e5934209e1b82475bb7721c040223250cc65897e4786294139311b955a5ccb2f17350cb675e8154e2badba5c497d34625054950df73cffea33886125b4779a81600979b3e6695a211f0d5393a367a1a00000168000000b02a41229c020fb028c80aca250f425a521272f637ec699629901c3fc37b8824ebb2756395431b5366d8b81d2e3d65418ae06cd890843733b2786f327f650e65f5df9c58fec4afd221869b74d45dea6ab154c2ffe03a2a9faf1eabcc39f4b80f15f35ec0eee13f88f19cea556398eb1dcb2de7848bc44f8035c4bceffa732db33f290bf6db352c66eca02e098d5e6237dc22ef5417af21becac9e32b4042b9c08144bb4488f3b3cc23fd64eb8bab32e1ee000000b0185a94325a07b1216ef6efe8a495dca76733b41fccfbbef1efd10227ca125799bfe78d8c7238aea310a59d96c34735453a5997b184d5edd74236064e29e5516cddf625656efd59aa67ccfbce44e41742469523c2399c74128e6967f2124aed39732a2d2be6f4c6f3109ae6cfe406f746120be9d9e32f22174dc8a5a0f9de5e9159dd194a9a74237657a9a37c018ee1c70170e8ed4f0ab7e348408aa98d573ba097f566c72f5a33a19852716fe661cf3400000168000000b0187e17a6b3a6119d3b9db1ed5d002b00847bc65111cd34df5213a928600bc1edf31a1e8293baad8b9e056dd1be82fbe39f94362f5f8cb2aa49b089625d1e556de75965f4722f909e26302099d816e56d7d9d4ec2f78eda9830aa2ed4df467ba4b5268b797a6516aac22a61b1974a628c06533b3e0ddd690f27995586b49290353cc9e6007f7125c49635eacae5bb0bef0f126ba0bfebce814c19a4f5bea5584af551be8ab15e89e606ee2f0052f04b4f000000b02593757ff3a32eb78b9fb53c7057d550de83dd2cc59a47747b392a7e46e626eec6e893ef0e3da1db0f1f561033939e8c3497e252992968db862be26c0447e63d6e3995b4f5cb492d43191516ffc41094ddef34f516e6453ffe1f277a89578f3f6c57f5e8fa5f5af7b9fcda0a7f2a97e20d8df7d6cb4721f77c89d871dc9f4685e479ed1b7d49b9de99520ad64e7c5ba81ecc31bbef3c2be91e401b665159eec65db72cfea17d28bef920eda61e4ce43800000168000000b020e2b5cc89751a1e2c9c49d5afcdeca20c66cf06c499e0a5ae08f8dd95c4ca9f21ba9cf8c8893a550d9f2451f8d73be90dad51bb98c90ea69efd81933be1dfd36df50e3be0803bda3fca1d9429384d41d4e4da05471cd7f398fab7d8734f50b4c9ea7102e99ec37ffb302178894bc597172c7847f836f2643cc0b5cf5cdce9253dea0251beb4195f74b77610e668362100dc06756dd5f706fbb1c0be979c3a413c15a002d08d3b94354fd6c7e405dfc6000000b01f49d61125dcad1eabe6f25759a1d55655fa3aae6c56f6c9a0c8f0695808603211b93e78d3ac4fdfebd4876f2891618d6651e69ee85f0efb02c28d58f92c11080122a834c0919d51d3b57d8fa06fbe200e23cd41fe87e97da8f7c01c7e5188163c2a3579456bf5f7d4c0b3685648ecb7096a605423839d34628698175e3f23a35a279460d73eabddb326091b7934eaad07dc2ae6cf4c2a9ff9296d481db7beb782076046287de1b15d6a325c4245593d00000168000000b02a12c23e5bd37562f9847fdc4c1c09135aea5db0df398b90d974b741be86bd722620b4a1da243da2227b91f6655c9192f869283669a667b6132772b1cb4d222356bb8ddfe47c83603c3b8e56b667f74ad8b9a8b8491f5398dc8fd1457a63394ce5ae70fa4c5561fa29e237032be77ae01e9b9db80ef4727cd6af3c96b25c5b79ba523bafa8bc0e9d1cc55b0a954f4e99233cd7d873903b6c05b76920672f6c8ea59485c7ef5b8982eddcf2fbd6227426000000b0253abca76472edce5835d43f60a41f13038ccb56b9a11bba143e2da880d6193e48fbf19f166c78c160b3a46ce5755cab8cfb8f8d5bd72c9323aa72284e2fca49726ac9148051170ce99fd78a7bea0c75d96560fcf74d42608c51105b82e337334765af81fcb8fc8f6b0e691b6780d2810ec986c4019b3923b03cd598c070b0deb5d5df68642cb014ba5cb540f691f09d00cac6243849f1fcac74f68ee7f0068682d0e1176d42d400af3a3a945a482f9300000168000000b02cfab6044a71ace9d14d825df34dec4bd24ae7d3bf274cfbfdc867ad067cd5ada2cc5afc00aec678e5abe6461e5cea11649a4b7ded96cf7eec1d66a35b0643e3f0111cb789346488e923fff1494835649556b1ac91e865a8e61b7ac3ae928c06d5a29f8eda4de57da71ab3083643a9b0057b438302e8afefc9c31eef4cf7d0335cffe0e632de4ca4c4269196fe77afdc245b46a8542565c9d702ab1143d592fd9a5a7732b29d25f2cdd3f8d16cb51dee000000b02e4f05c72684a4a56e7ede063c5cd039aa5937ed0b218712e428d33f6c9e71152968da71564658b17bf16853cd5434c967f93759c6aa55356b01f3d730b69051231fff565eac03214e96402c46f7d17c620f9e03a224da103cbc78902d67c52831f8f397594c066885028c1988c8a21912580ad3f2490b7347c20f934f589f89bcbcc0af8a8003ef961c020da62893fa1fa98879d1f5cc45767791b4559945861c1ca0c345116565e507fac9f3a7097b00000168000000b014334e973ae9e5d3597c015480ffc99bc091a8482e6f72960c25b4ae171282c39bbc932f5f646d85a3c52e84c0ced3422d18525db664fc5f48a0089eeed6df29deecf0e7d315023140d2ee7d58a58742b64ae8bc6426eeae8e953560a128820d5fae7d76836afce83a946a82e698d3862ad657328747ef4417343938ce9b8c6eecbe3674dcd383dc6a8f3af21ca8988f0e505ea6c56e4b75d54ac02cbf4cb0d87ec596e4d2eaf56e7f7eb49cff38dfad000000b01634c4bd23ecfbc73cf274c0c679bdcb1fa90964eecebaa1bdd4b4ad2802b83f63e8721340652611152e8c1aa95a7ab59f8eb5ac078757ed447ef75bed55ff58d11e4ce18c072971a7f40eeaaf43a1b3c1359633ae30586501c70f33e834f216d7840afea9f0d37d052f30b4be6f373105e8f063da1989bf62ede892e87f3ed028a5b331a1ba0ae7f834a2e2de188ed01d49705fedf840695e74fe8f1551bc91a3d496e5b16a1d7661ac43497061f15800000168000000b01b42ecaeb1306e59105db6124802b48395c9199ca5f8d2c71e896dd0ea723501841a6bd6d9f65436c9e3395e7c6f247296d638540e38c624e14f3bef11f37c68bf6a20f07570188f499a51a20f94017265c0e5fef5e3ac4d5299f9c752ff01d71824669283c9b3e02214d1047b3658a81fbd5eb08f95d0a9d078c79d5947502878b798209bac4a787abe9b976c52bfe0088e6adc0c330709a573372e58f72b1dc07ef9482b7eb8fe1a208ba28113226d000000b0150a21b51f59ee54a524d5689bdce2dff209f27ccc87bc9b069fdc15dfff9e76ab5ace83eb999321c74dbe7189c3506a1d6d63869a315f0e2e75138518f4800a983f9a22071d52e56b2c1f954f78eca55f1c0d45a5fea97c3cb886af5f0553c879a3d9da7e9fc295b3500fb06116c8b12af802d84d7178decef1507268ed734e5c442553c90ab3cfd3c47423e758bf78296397bce95900368a2a62fc50fad0e94438a54788b4b3057e7e01c13dc4002100000168000000b01b321a3d3637cbedc355d0a1d0d567f4da0069bbd47ecde84a1de2e091ec460e7c354fd00f2c28246d797de56e9d9a7e75b6d6d591cc55aebb4a176e7abb7484f2614564e0f2ba90e1eb1db629b6255a666634bd4a906522ed274f7512d99e626ce63f3d3744eb5d495edbd0329a9dfd24f265c34650389a2f6db734de14cfc711afcbc22c8a8cbf9ca1cacaf0151d9215376ce7c70d95ba00c77fa3ba56d7da0bf4358e3dca1a383134ea110430151e000000b029d30f1a2747fd1b061457668d08a8265469297b970ce0dbfbab71e7f55274a7e75479a3f7cd4f923b12cc8f7ccdd3c3dfd0e41458d61db508df64eaffa1dae58cd2df33fd64fcce954ca91696491f75363d7be034abc8c32146dfb8d7d189c89e0d78b86d1034999103b33b87d9b149003b8451db9f9035d531facf8fba219b1249d01ceca523b7c8bada258e4180402572c7e0b0b952eca6506e4c8939cbc1f41ea7880d74fd0b5a387ad6fedd5115", + "txsEffectsHash": "0xba6c2a6d813750dc256f667c3ba6c1c791bc56020496c7b490d00cccd40fdb69", "decodedHeader": { "contentCommitment": { "inHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "outHash": "0x3c00faec8dc481e71433eb21f1dd016134bf403950c146783ba1928cddcb315d", "txTreeHeight": 2, - "txsHash": "0xbeecb5a6bf19c759a9533ed48dc2aa8d68d15723c4442e422159722d770f7a39" + "txsEffectsHash": "0xba6c2a6d813750dc256f667c3ba6c1c791bc56020496c7b490d00cccd40fdb69" }, "globalVariables": { "blockNumber": 2, "chainId": 31337, - "timestamp": 1709295760, + "timestamp": 1709733970, "version": 1, - "coinbase": "0xcd739a9d6c22347955ea133959de609467ec4210", - "feeRecipient": "0x1bd237b1b92e473b18a3e11352e5883d5212ac9c120830db1926b083d3c64a9f" + "coinbase": "0x2c4ed998adb9ea58602c2f521338d85e796983c2", + "feeRecipient": "0x08e3c9234b16ba719d1fa970253ee4631f0204c4dc25b86b46eef390ab581e80" }, "lastArchive": { "nextAvailableLeafIndex": 2, - "root": "0x0939715232c1b90e6498e4155e8475e666f57b5fb068f51060c97f5224e4e0cd" + "root": "0x136a8f7d7909e8b294472fef24dc3a6187259aa5005e2e0c32bfd1f49b80b5c8" }, "stateReference": { "l1ToL2MessageTree": { @@ -99,8 +99,8 @@ } } }, - "header": "0x0939715232c1b90e6498e4155e8475e666f57b5fb068f51060c97f5224e4e0cd000000020000000000000000000000000000000000000000000000000000000000000002beecb5a6bf19c759a9533ed48dc2aa8d68d15723c4442e422159722d770f7a3900000000000000000000000000000000000000000000000000000000000000003c00faec8dc481e71433eb21f1dd016134bf403950c146783ba1928cddcb315d06c76caee115a61eeb6788977c68a3bea359061b678a1a4f5ffde13e0451717b00000020023ef973dbaa366409f7a01a4ced696227685ce75e57b510d0e7015ebfa72c5000000200231b77b7e0311a71fae5cec0f0281816950f94a24bfc2e67c5ae8619c6ed4c880000028005cc2e9c54598a9b5cdf0983d442311b0b963c93ce46c5930be845b12d616b9a000000082ae3a1bf2752c8c8bd6741bb3fd0d9e3811dbf7681454436125ccb7afeca31c9000001400000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000065e1c890cd739a9d6c22347955ea133959de609467ec42101bd237b1b92e473b18a3e11352e5883d5212ac9c120830db1926b083d3c64a9f", + "header": "0x136a8f7d7909e8b294472fef24dc3a6187259aa5005e2e0c32bfd1f49b80b5c8000000020000000000000000000000000000000000000000000000000000000000000002ba6c2a6d813750dc256f667c3ba6c1c791bc56020496c7b490d00cccd40fdb6900000000000000000000000000000000000000000000000000000000000000003c00faec8dc481e71433eb21f1dd016134bf403950c146783ba1928cddcb315d06c76caee115a61eeb6788977c68a3bea359061b678a1a4f5ffde13e0451717b00000020023ef973dbaa366409f7a01a4ced696227685ce75e57b510d0e7015ebfa72c5000000200231b77b7e0311a71fae5cec0f0281816950f94a24bfc2e67c5ae8619c6ed4c880000028005cc2e9c54598a9b5cdf0983d442311b0b963c93ce46c5930be845b12d616b9a000000082ae3a1bf2752c8c8bd6741bb3fd0d9e3811dbf7681454436125ccb7afeca31c9000001400000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000065e878522c4ed998adb9ea58602c2f521338d85e796983c208e3c9234b16ba719d1fa970253ee4631f0204c4dc25b86b46eef390ab581e80", "l1ToL2MessagesHash": "0xa10cc8559615be5a44cfb608374b1f84fd11cdb5844ebffafd92a77c068350f1", - "publicInputsHash": "0x2693665d60d2885879adebcc8535463adae71c610f6a1897a0cb9b3725fb8988" + "publicInputsHash": "0x08bb34a501366d5985915c898cd411d7ca1658821088cff7a52b696e96470b74" } } \ No newline at end of file diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/base_or_merge_rollup_public_inputs.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/base_or_merge_rollup_public_inputs.nr index bd37c657729..bf5b8d528de 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/base_or_merge_rollup_public_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/base_or_merge_rollup_public_inputs.nr @@ -26,6 +26,6 @@ struct BaseOrMergeRollupPublicInputs { // So we want to constrain it when casting these fields to U128 // We hash public inputs to make them constant-sized (to then be unpacked on-chain) - calldata_hash : [Field; NUM_FIELDS_PER_SHA256], + txs_effects_hash : [Field; NUM_FIELDS_PER_SHA256], out_hash : [Field; NUM_FIELDS_PER_SHA256], } diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/base_rollup_inputs.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/base_rollup_inputs.nr index 7d39a64671e..6a74c68b588 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/base_rollup_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/base_rollup_inputs.nr @@ -3,7 +3,8 @@ use crate::{ constant_rollup_data::ConstantRollupData, base_or_merge_rollup_public_inputs::{BaseOrMergeRollupPublicInputs, BASE_ROLLUP_TYPE} }, - base::state_diff_hints::StateDiffHints + base::state_diff_hints::StateDiffHints, + components::{compute_tx_effects_hash, compute_kernel_out_hash} }; use dep::types::{ abis::{ @@ -105,9 +106,9 @@ impl BaseRollupInputs { // Validate public public data reads and public data update requests, and update public data tree let end_public_data_tree_snapshot = self.validate_and_process_public_state(); - // Calculate the overall calldata hash - let calldata_hash = BaseRollupInputs::components_compute_kernel_calldata_hash(self.kernel_data.public_inputs.end); - let out_hash = BaseRollupInputs::components_compute_kernel_out_hash(self.kernel_data.public_inputs.end); + // Calculate the tx effects hash of the + let tx_effects_hash = compute_tx_effects_hash(self.kernel_data.public_inputs.end); + let out_hash = compute_kernel_out_hash(self.kernel_data.public_inputs.end); // Perform membership checks that the notes provided exist within the historical trees data self.perform_archive_membership_checks(); @@ -126,7 +127,7 @@ impl BaseRollupInputs { contract_tree: end_contract_tree_snapshot, public_data_tree: end_public_data_tree_snapshot }, - calldata_hash, + txs_effects_hash: tx_effects_hash, out_hash } } @@ -247,112 +248,6 @@ impl BaseRollupInputs { end_public_data_tree_snapshot } - // Computes the calldata hash for a base rollup - // TODO(Kev): move this into components module - // TODO(Alvaro): This is too slow for brillig without the array optimization - fn components_compute_kernel_calldata_hash(combined: CombinedAccumulatedData) -> [Field; NUM_FIELDS_PER_SHA256] { - // Compute calldata hashes - // Consist of - // MAX_NEW_NOTE_HASHES_PER_TX fields for note hashes - // MAX_NEW_NULLIFIERS_PER_TX fields for nullifiers - // 2 l2 -> l1 messages -> 2 fields - // 32 public data update requests -> 64 fields - // 1 contract deployments -> 3 fields - // 1 encrypted logs hash --> 1 sha256 hash -> 2 fields --> 32 bytes - // 1 unencrypted logs hash --> 1 sha256 hash -> 2 fields --> 32 bytes - let mut calldata_hash_inputs = [0; CALLDATA_HASH_INPUT_SIZE]; - - let new_note_hashes = combined.new_note_hashes; - let new_nullifiers = combined.new_nullifiers; - let newL2ToL1msgs = combined.new_l2_to_l1_msgs; - let public_data_update_requests = combined.public_data_update_requests; - let encryptedLogsHash = combined.encrypted_logs_hash; - let unencryptedLogsHash = combined.unencrypted_logs_hash; - - let mut offset = 0; - - for j in 0..MAX_NEW_NOTE_HASHES_PER_TX { - calldata_hash_inputs[offset + j] = new_note_hashes[j].value; - } - offset += MAX_NEW_NOTE_HASHES_PER_TX ; - - for j in 0..MAX_NEW_NULLIFIERS_PER_TX { - calldata_hash_inputs[offset + j] = new_nullifiers[j].value; - } - offset += MAX_NEW_NULLIFIERS_PER_TX ; - - for j in 0..MAX_NEW_L2_TO_L1_MSGS_PER_TX { - calldata_hash_inputs[offset + j] = newL2ToL1msgs[j]; - } - offset += MAX_NEW_L2_TO_L1_MSGS_PER_TX; - - for j in 0..MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX { - calldata_hash_inputs[offset + j * 2] = - public_data_update_requests[j].leaf_slot; - calldata_hash_inputs[offset + j * 2 + 1] = - public_data_update_requests[j].new_value; - } - offset += MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX * 2; - - let contract_leaf = combined.new_contracts[0]; - calldata_hash_inputs[offset] = contract_leaf.hash(); - - offset += MAX_NEW_CONTRACTS_PER_TX; - - let new_contracts = combined.new_contracts; - calldata_hash_inputs[offset] = new_contracts[0].contract_address.to_field(); - calldata_hash_inputs[offset + 1] = new_contracts[0].portal_contract_address.to_field(); - - offset += MAX_NEW_CONTRACTS_PER_TX * 2; - - for j in 0..NUM_FIELDS_PER_SHA256 { - calldata_hash_inputs[offset + j] = encryptedLogsHash[j]; - } - - offset += NUM_ENCRYPTED_LOGS_HASHES_PER_TX * NUM_FIELDS_PER_SHA256; - - for j in 0..NUM_FIELDS_PER_SHA256 { - calldata_hash_inputs[offset + j] = unencryptedLogsHash[j]; - } - - offset += NUM_UNENCRYPTED_LOGS_HASHES_PER_TX * NUM_FIELDS_PER_SHA256; - assert_eq(offset, CALLDATA_HASH_INPUT_SIZE); // Sanity check - - let mut hash_input_flattened = [0; CALL_DATA_HASH_FULL_FIELDS * 32 + CALL_DATA_HASH_LOG_FIELDS * 16]; - for offset in 0..CALL_DATA_HASH_FULL_FIELDS { - let input_as_bytes = calldata_hash_inputs[offset].to_be_bytes(32); - for byte_index in 0..32 { - hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index]; - } - } - - for log_field_index in 0..CALL_DATA_HASH_LOG_FIELDS { - let input_as_bytes = calldata_hash_inputs[CALL_DATA_HASH_FULL_FIELDS + log_field_index].to_be_bytes(16); - for byte_index in 0..16 { - hash_input_flattened[CALL_DATA_HASH_FULL_FIELDS * 32 + log_field_index * 16 + byte_index] = input_as_bytes[byte_index]; - } - } - - let sha_digest = dep::std::hash::sha256(hash_input_flattened); - U256::from_bytes32(sha_digest).to_u128_limbs() - } - - // Computes the out hash for a base rollup - fn components_compute_kernel_out_hash(combined: CombinedAccumulatedData) -> [Field; NUM_FIELDS_PER_SHA256] { - let mut out_hash_inputs: [Field; MAX_NEW_L2_TO_L1_MSGS_PER_TX] = combined.new_l2_to_l1_msgs; - - let mut hash_input_flattened = [0; MAX_NEW_L2_TO_L1_MSGS_PER_TX * 32]; - for offset in 0..MAX_NEW_L2_TO_L1_MSGS_PER_TX { - let input_as_bytes = out_hash_inputs[offset].to_be_bytes(32); - for byte_index in 0..32 { - hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index]; - } - } - - let sha_digest = dep::std::hash::sha256(hash_input_flattened); - U256::from_bytes32(sha_digest).to_u128_limbs() - } - // Check that the block header used by each kernel is a member of the blocks tree --> since the block header // contains roots of all the trees this is sufficient to verify that the tree roots used by kernels are correct fn perform_archive_membership_checks(self) { @@ -509,39 +404,6 @@ fn consistent_not_hash_subtree_width() { ); } -global CALLDATA_HASH_INPUT_SIZE = 201; - -#[test] -fn consistent_calldata_hash_input_size() { - let expected_size = MAX_NEW_NOTE_HASHES_PER_TX - + MAX_NEW_NULLIFIERS_PER_TX - + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX * 2 - + MAX_NEW_L2_TO_L1_MSGS_PER_TX - + MAX_NEW_CONTRACTS_PER_TX * 3 - + NUM_ENCRYPTED_LOGS_HASHES_PER_TX * NUM_FIELDS_PER_SHA256 - + NUM_UNENCRYPTED_LOGS_HASHES_PER_TX * NUM_FIELDS_PER_SHA256; - assert(CALLDATA_HASH_INPUT_SIZE == expected_size, "calldata hash input size is incorrect"); -} - -global CALL_DATA_HASH_LOG_FIELDS = 4; - -#[test] -fn consistent_call_data_hash_log_fields() { - assert_eq( - CALL_DATA_HASH_LOG_FIELDS, NUM_ENCRYPTED_LOGS_HASHES_PER_TX * NUM_FIELDS_PER_SHA256 - + NUM_UNENCRYPTED_LOGS_HASHES_PER_TX * NUM_FIELDS_PER_SHA256, "calldata hash log fields is incorrect" - ); -} - -global CALL_DATA_HASH_FULL_FIELDS = 197; - -#[test] -fn consistent_call_data_hash_full_fields() { - assert_eq( - CALL_DATA_HASH_FULL_FIELDS, CALLDATA_HASH_INPUT_SIZE - CALL_DATA_HASH_LOG_FIELDS, "calldata hash log fields is incorrect" - ); -} - #[test] fn test_u256_less_than() { assert(full_field_less_than(1, 1000)); @@ -566,10 +428,8 @@ mod tests { constant_rollup_data::ConstantRollupData, base_or_merge_rollup_public_inputs::BaseOrMergeRollupPublicInputs }, - base::{ - state_diff_hints::StateDiffHints, - base_rollup_inputs::{CALL_DATA_HASH_FULL_FIELDS, CALL_DATA_HASH_LOG_FIELDS, BaseRollupInputs} - } + base::{state_diff_hints::StateDiffHints, base_rollup_inputs::BaseRollupInputs}, + components::{TX_EFFECTS_HASH_FULL_FIELDS, TX_EFFECTS_HASH_LOG_FIELDS, compute_kernel_out_hash} }; use dep::types::{ abis::{ @@ -1232,14 +1092,14 @@ mod tests { } #[test] - unconstrained fn empty_block_calldata_hash() { + unconstrained fn empty_tx_effects_hash() { let outputs = BaseRollupInputsBuilder::new().execute(); - let hash_input_flattened = [0; CALL_DATA_HASH_FULL_FIELDS * 32 + CALL_DATA_HASH_LOG_FIELDS * 16]; + let hash_input_flattened = [0; TX_EFFECTS_HASH_FULL_FIELDS * 32 + TX_EFFECTS_HASH_LOG_FIELDS * 16]; let sha_digest = dep::std::hash::sha256(hash_input_flattened); - let expected_calldata_hash = U256::from_bytes32(sha_digest).to_u128_limbs(); + let expected_tx_effects_hash = U256::from_bytes32(sha_digest).to_u128_limbs(); for i in 0..NUM_FIELDS_PER_SHA256 { - assert_eq(outputs.calldata_hash[i], expected_calldata_hash[i]); + assert_eq(outputs.txs_effects_hash[i], expected_tx_effects_hash[i]); } } @@ -1260,7 +1120,7 @@ mod tests { let mut end: CombinedAccumulatedData = dep::std::unsafe::zeroed(); end.new_l2_to_l1_msgs[MAX_NEW_L2_TO_L1_MSGS_PER_TX - 1] = 123; - let out_hash = BaseRollupInputs::components_compute_kernel_out_hash(end); + let out_hash = compute_kernel_out_hash(end); let mut hash_input_flattened = [0; MAX_NEW_L2_TO_L1_MSGS_PER_TX * 32]; hash_input_flattened[MAX_NEW_L2_TO_L1_MSGS_PER_TX * 32 - 1] = 123; diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/components.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/components.nr index 91c5855eeba..aeb3b556855 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/components.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/components.nr @@ -1,9 +1,15 @@ use crate::abis::base_or_merge_rollup_public_inputs::BaseOrMergeRollupPublicInputs; -use dep::types::mocked::AggregationObject; -use dep::types::hash::accumulate_sha256; -use dep::types::constants::NUM_FIELDS_PER_SHA256; use crate::abis::previous_rollup_data::PreviousRollupData; -use dep::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot; +use dep::types::{ + mocked::AggregationObject, hash::accumulate_sha256, + constants::{ + NUM_FIELDS_PER_SHA256, MAX_NEW_NOTE_HASHES_PER_TX, MAX_NEW_NULLIFIERS_PER_TX, + MAX_NEW_L2_TO_L1_MSGS_PER_TX, NUM_UNENCRYPTED_LOGS_HASHES_PER_TX, NUM_ENCRYPTED_LOGS_HASHES_PER_TX, + MAX_NEW_CONTRACTS_PER_TX, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX +}, + utils::uint256::U256, + abis::{append_only_tree_snapshot::AppendOnlyTreeSnapshot, accumulated_data::CombinedAccumulatedData} +}; /** * Create an aggregation object for the proofs that are provided @@ -77,35 +83,171 @@ pub fn assert_prev_rollups_follow_on_from_each_other( } /** - * @brief From two previous rollup data, compute a single calldata hash + * @brief From two previous rollup data, compute a single out hash * * @param previous_rollup_data - * @return calldata hash stored in 2 fields + * @return out hash stored in 2 fields */ -pub fn compute_calldata_hash(previous_rollup_data: [PreviousRollupData; 2]) -> [Field; NUM_FIELDS_PER_SHA256] { +pub fn compute_out_hash(previous_rollup_data: [PreviousRollupData; 2]) -> [Field; NUM_FIELDS_PER_SHA256] { accumulate_sha256( [ - U128::from_integer(previous_rollup_data[0].base_or_merge_rollup_public_inputs.calldata_hash[0]), - U128::from_integer(previous_rollup_data[0].base_or_merge_rollup_public_inputs.calldata_hash[1]), - U128::from_integer(previous_rollup_data[1].base_or_merge_rollup_public_inputs.calldata_hash[0]), - U128::from_integer(previous_rollup_data[1].base_or_merge_rollup_public_inputs.calldata_hash[1]) + U128::from_integer(previous_rollup_data[0].base_or_merge_rollup_public_inputs.out_hash[0]), + U128::from_integer(previous_rollup_data[0].base_or_merge_rollup_public_inputs.out_hash[1]), + U128::from_integer(previous_rollup_data[1].base_or_merge_rollup_public_inputs.out_hash[0]), + U128::from_integer(previous_rollup_data[1].base_or_merge_rollup_public_inputs.out_hash[1]) ] ) } +pub fn compute_kernel_out_hash(combined: CombinedAccumulatedData) -> [Field; NUM_FIELDS_PER_SHA256] { + let mut out_hash_inputs: [Field; MAX_NEW_L2_TO_L1_MSGS_PER_TX] = combined.new_l2_to_l1_msgs; + + let mut hash_input_flattened = [0; MAX_NEW_L2_TO_L1_MSGS_PER_TX * 32]; + for offset in 0..MAX_NEW_L2_TO_L1_MSGS_PER_TX { + let input_as_bytes = out_hash_inputs[offset].to_be_bytes(32); + for byte_index in 0..32 { + hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index]; + } + } + + let sha_digest = dep::std::hash::sha256(hash_input_flattened); + U256::from_bytes32(sha_digest).to_u128_limbs() +} + /** - * @brief From two previous rollup data, compute a single out hash + * @brief From two previous rollup data, compute a single txs effects hash * * @param previous_rollup_data - * @return out hash stored in 2 fields + * @return The hash of the transaction effects stored in 2 fields */ -pub fn compute_out_hash(previous_rollup_data: [PreviousRollupData; 2]) -> [Field; NUM_FIELDS_PER_SHA256] { +pub fn compute_txs_effects_hash(previous_rollup_data: [PreviousRollupData; 2]) -> [Field; NUM_FIELDS_PER_SHA256] { accumulate_sha256( [ - U128::from_integer(previous_rollup_data[0].base_or_merge_rollup_public_inputs.out_hash[0]), - U128::from_integer(previous_rollup_data[0].base_or_merge_rollup_public_inputs.out_hash[1]), - U128::from_integer(previous_rollup_data[1].base_or_merge_rollup_public_inputs.out_hash[0]), - U128::from_integer(previous_rollup_data[1].base_or_merge_rollup_public_inputs.out_hash[1]) + U128::from_integer(previous_rollup_data[0].base_or_merge_rollup_public_inputs.txs_effects_hash[0]), + U128::from_integer(previous_rollup_data[0].base_or_merge_rollup_public_inputs.txs_effects_hash[1]), + U128::from_integer(previous_rollup_data[1].base_or_merge_rollup_public_inputs.txs_effects_hash[0]), + U128::from_integer(previous_rollup_data[1].base_or_merge_rollup_public_inputs.txs_effects_hash[1]) ] ) } + +global TX_EFFECTS_HASH_FULL_FIELDS = 197; +global TX_EFFECTS_HASH_LOG_FIELDS = 4; +global TX_EFFECTS_HASH_INPUT_FIELDS = 201; // TX_EFFECTS_HASH_FULL_FIELDS + TX_EFFECTS_HASH_LOG_FIELDS + +// Computes the tx effects hash for a base rollup (a single transaction) +// TODO(Alvaro): This is too slow for brillig without the array optimization +pub fn compute_tx_effects_hash(combined: CombinedAccumulatedData) -> [Field; NUM_FIELDS_PER_SHA256] { + // Compute tx effect hash + // Consist of + // MAX_NEW_NOTE_HASHES_PER_TX fields for note hashes + // MAX_NEW_NULLIFIERS_PER_TX fields for nullifiers + // 2 l2 -> l1 messages -> 2 fields + // 32 public data update requests -> 64 fields + // 1 contract deployments -> 3 fields + // 1 encrypted logs hash --> 1 sha256 hash -> 32 bytes -> 2 fields | Beware when populating bytes that it is only 32! + // 1 unencrypted logs hash --> 1 sha256 hash -> 32 bytes -> 2 fields | Beware when populating bytes that it is only 32! + let mut txs_effects_hash_input = [0; TX_EFFECTS_HASH_INPUT_FIELDS]; + + let new_note_hashes = combined.new_note_hashes; + let new_nullifiers = combined.new_nullifiers; + let newL2ToL1msgs = combined.new_l2_to_l1_msgs; + let public_data_update_requests = combined.public_data_update_requests; + let encryptedLogsHash = combined.encrypted_logs_hash; + let unencryptedLogsHash = combined.unencrypted_logs_hash; + + let mut offset = 0; + + for j in 0..MAX_NEW_NOTE_HASHES_PER_TX { + txs_effects_hash_input[offset + j] = new_note_hashes[j].value; + } + offset += MAX_NEW_NOTE_HASHES_PER_TX ; + + for j in 0..MAX_NEW_NULLIFIERS_PER_TX { + txs_effects_hash_input[offset + j] = new_nullifiers[j].value; + } + offset += MAX_NEW_NULLIFIERS_PER_TX ; + + for j in 0..MAX_NEW_L2_TO_L1_MSGS_PER_TX { + txs_effects_hash_input[offset + j] = newL2ToL1msgs[j]; + } + offset += MAX_NEW_L2_TO_L1_MSGS_PER_TX; + + for j in 0..MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX { + txs_effects_hash_input[offset + j * 2] = + public_data_update_requests[j].leaf_slot; + txs_effects_hash_input[offset + j * 2 + 1] = + public_data_update_requests[j].new_value; + } + offset += MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX * 2; + + let contract_leaf = combined.new_contracts[0]; + txs_effects_hash_input[offset] = contract_leaf.hash(); + + offset += MAX_NEW_CONTRACTS_PER_TX; + + let new_contracts = combined.new_contracts; + txs_effects_hash_input[offset] = new_contracts[0].contract_address.to_field(); + txs_effects_hash_input[offset + 1] = new_contracts[0].portal_contract_address.to_field(); + + offset += MAX_NEW_CONTRACTS_PER_TX * 2; + + for j in 0..NUM_FIELDS_PER_SHA256 { + txs_effects_hash_input[offset + j] = encryptedLogsHash[j]; + } + + offset += NUM_ENCRYPTED_LOGS_HASHES_PER_TX * NUM_FIELDS_PER_SHA256; + + for j in 0..NUM_FIELDS_PER_SHA256 { + txs_effects_hash_input[offset + j] = unencryptedLogsHash[j]; + } + + offset += NUM_UNENCRYPTED_LOGS_HASHES_PER_TX * NUM_FIELDS_PER_SHA256; + assert_eq(offset, TX_EFFECTS_HASH_INPUT_FIELDS); // Sanity check + + let mut hash_input_flattened = [0; TX_EFFECTS_HASH_FULL_FIELDS * 32 + TX_EFFECTS_HASH_LOG_FIELDS * 16]; + for offset in 0..TX_EFFECTS_HASH_FULL_FIELDS { + let input_as_bytes = txs_effects_hash_input[offset].to_be_bytes(32); + for byte_index in 0..32 { + hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index]; + } + } + + for log_field_index in 0..TX_EFFECTS_HASH_LOG_FIELDS { + let input_as_bytes = txs_effects_hash_input[TX_EFFECTS_HASH_FULL_FIELDS + log_field_index].to_be_bytes(16); + for byte_index in 0..16 { + hash_input_flattened[TX_EFFECTS_HASH_FULL_FIELDS * 32 + log_field_index * 16 + byte_index] = input_as_bytes[byte_index]; + } + } + + let sha_digest = dep::std::hash::sha256(hash_input_flattened); + U256::from_bytes32(sha_digest).to_u128_limbs() +} + +#[test] +fn consistent_TX_EFFECTS_HASH_INPUT_FIELDS() { + let expected_size = MAX_NEW_NOTE_HASHES_PER_TX + + MAX_NEW_NULLIFIERS_PER_TX + + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX * 2 + + MAX_NEW_L2_TO_L1_MSGS_PER_TX + + MAX_NEW_CONTRACTS_PER_TX * 3 + + NUM_ENCRYPTED_LOGS_HASHES_PER_TX * NUM_FIELDS_PER_SHA256 + + NUM_UNENCRYPTED_LOGS_HASHES_PER_TX * NUM_FIELDS_PER_SHA256; + assert(TX_EFFECTS_HASH_INPUT_FIELDS == expected_size, "tx effects hash input size is incorrect"); +} + +#[test] +fn consistent_tx_effects_hash_log_input_size() { + assert_eq( + TX_EFFECTS_HASH_LOG_FIELDS, NUM_ENCRYPTED_LOGS_HASHES_PER_TX * NUM_FIELDS_PER_SHA256 + + NUM_UNENCRYPTED_LOGS_HASHES_PER_TX * NUM_FIELDS_PER_SHA256, "tx effects hash log input field size is incorrect" + ); +} + +#[test] +fn consistent_tx_effects_input_size() { + assert_eq( + TX_EFFECTS_HASH_INPUT_FIELDS, TX_EFFECTS_HASH_FULL_FIELDS + TX_EFFECTS_HASH_LOG_FIELDS, "tx effects hash input field size is incorrect" + ); +} + diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/merge/merge_rollup_inputs.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/merge/merge_rollup_inputs.nr index 2d69b1ba080..9f094959573 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/merge/merge_rollup_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/merge/merge_rollup_inputs.nr @@ -25,8 +25,8 @@ impl MergeRollupInputs { components::assert_prev_rollups_follow_on_from_each_other(left, right); // compute calldata hash: - let new_calldata_hash = components::compute_calldata_hash(self.previous_rollup_data); - let new_out_hash = components::compute_out_hash(self.previous_rollup_data); + let txs_effects_hash = components::compute_txs_effects_hash(self.previous_rollup_data); + let out_hash = components::compute_out_hash(self.previous_rollup_data); let public_inputs = BaseOrMergeRollupPublicInputs { rollup_type: MERGE_ROLLUP_TYPE, @@ -35,8 +35,8 @@ impl MergeRollupInputs { constants: left.constants, start: left.start, end: right.end, - calldata_hash: new_calldata_hash, - out_hash: new_out_hash + txs_effects_hash, + out_hash }; public_inputs @@ -137,9 +137,9 @@ mod tests { } #[test] - fn calldata_hash() { + fn txs_effects_hash() { let mut inputs = default_merge_rollup_inputs(); - let expected_calldata_hash = accumulate_sha256( + let expected_hash = accumulate_sha256( [ U128::from_integer(0), U128::from_integer(1), @@ -149,7 +149,7 @@ mod tests { ); let outputs = inputs.merge_rollup_circuit(); - assert_eq(outputs.calldata_hash, expected_calldata_hash); + assert_eq(outputs.txs_effects_hash, expected_hash); } #[test] diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root.nr index 822a9bb4b4e..18d0871be3d 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root.nr @@ -43,7 +43,7 @@ impl RootRollupInputs { // TODO: in_hash: #4633 and out_hash: #4561 let content_commitment = ContentCommitment { tx_tree_height: right.height_in_block_tree + 1, - txs_hash: components::compute_calldata_hash(self.previous_rollup_data), + txs_effects_hash: components::compute_txs_effects_hash(self.previous_rollup_data), in_hash: [0, 0], out_hash: components::compute_out_hash(self.previous_rollup_data) }; @@ -135,7 +135,7 @@ mod tests { fn check_block_hashes_empty_blocks() { let expected_messages_hash = U256::from_bytes32(dep::std::hash::sha256([0; NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP_NUM_BYTES])).to_u128_limbs(); - let expected_calldata_hash = accumulate_sha256( + let expected_txs_effects_hash = accumulate_sha256( [ U128::from_integer(0), U128::from_integer(1), @@ -147,8 +147,8 @@ mod tests { let inputs = default_root_rollup_inputs(); let outputs = inputs.root_rollup_circuit(); - // check calldata hash - assert_eq(outputs.header.content_commitment.txs_hash, expected_calldata_hash); + // check txs effects hash + assert_eq(outputs.header.content_commitment.txs_effects_hash, expected_txs_effects_hash); // Check messages hash assert_eq(outputs.l1_to_l2_messages_hash, expected_messages_hash); } diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/root_rollup_public_inputs.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/root_rollup_public_inputs.nr index 1f9a2113afc..be0fea6290f 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/root_rollup_public_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/root_rollup_public_inputs.nr @@ -14,6 +14,6 @@ struct RootRollupPublicInputs { // New block header header: Header, - // TODO(#4492): Nuke this once body hash/calldata hash is updated + // TODO(#4492): Nuke this once message hashing is moved out l1_to_l2_messages_hash : [Field; NUM_FIELDS_PER_SHA256], } diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/tests/previous_rollup_data.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/tests/previous_rollup_data.nr index 2ee2644940f..90e4d16bfc2 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/tests/previous_rollup_data.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/tests/previous_rollup_data.nr @@ -79,8 +79,8 @@ pub fn default_previous_rollup_data() -> [PreviousRollupData; 2] { previous_rollup_data[0].base_or_merge_rollup_public_inputs.height_in_block_tree = 1; previous_rollup_data[1].base_or_merge_rollup_public_inputs.height_in_block_tree = 1; - previous_rollup_data[0].base_or_merge_rollup_public_inputs.calldata_hash = [0, 1]; - previous_rollup_data[1].base_or_merge_rollup_public_inputs.calldata_hash = [2, 3]; + previous_rollup_data[0].base_or_merge_rollup_public_inputs.txs_effects_hash = [0, 1]; + previous_rollup_data[1].base_or_merge_rollup_public_inputs.txs_effects_hash = [2, 3]; previous_rollup_data[0].base_or_merge_rollup_public_inputs.out_hash = [0, 1]; previous_rollup_data[1].base_or_merge_rollup_public_inputs.out_hash = [2, 3]; diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/content_commitment.nr b/noir-projects/noir-protocol-circuits/crates/types/src/content_commitment.nr index 44e0833c81a..298da60b543 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/content_commitment.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/content_commitment.nr @@ -5,7 +5,7 @@ use crate::{ struct ContentCommitment { tx_tree_height: Field, - txs_hash: [Field; NUM_FIELDS_PER_SHA256], + txs_effects_hash: [Field; NUM_FIELDS_PER_SHA256], in_hash: [Field; NUM_FIELDS_PER_SHA256], out_hash: [Field; NUM_FIELDS_PER_SHA256], } @@ -15,7 +15,7 @@ impl Serialize for ContentCommitment { let mut fields: BoundedVec = BoundedVec::new(); fields.extend_from_array([self.tx_tree_height]); - fields.extend_from_array(self.txs_hash); + fields.extend_from_array(self.txs_effects_hash); fields.extend_from_array(self.in_hash); fields.extend_from_array(self.out_hash); @@ -28,7 +28,7 @@ impl Deserialize for ContentCommitment { let tx_tree_height = serialized[0]; let mut offset = 1; - let txs_hash = arr_copy_slice(serialized, [0; NUM_FIELDS_PER_SHA256], offset); + let txs_effects_hash = arr_copy_slice(serialized, [0; NUM_FIELDS_PER_SHA256], offset); offset = offset + NUM_FIELDS_PER_SHA256; let in_hash = arr_copy_slice(serialized, [0; NUM_FIELDS_PER_SHA256], offset); @@ -38,7 +38,7 @@ impl Deserialize for ContentCommitment { Self { tx_tree_height, - txs_hash, + txs_effects_hash, in_hash, out_hash, } @@ -49,7 +49,7 @@ impl Empty for ContentCommitment { fn empty() -> Self { Self { tx_tree_height: 0, - txs_hash: [0; NUM_FIELDS_PER_SHA256], + txs_effects_hash: [0; NUM_FIELDS_PER_SHA256], in_hash: [0; NUM_FIELDS_PER_SHA256], out_hash: [0; NUM_FIELDS_PER_SHA256], } @@ -59,7 +59,7 @@ impl Empty for ContentCommitment { impl Eq for ContentCommitment { fn eq(self, other: Self) -> bool { (self.tx_tree_height == other.tx_tree_height) - & (self.txs_hash == other.txs_hash) + & (self.txs_effects_hash == other.txs_effects_hash) & (self.in_hash == other.in_hash) & (self.out_hash == other.out_hash) } diff --git a/noir/noir-repo/test_programs/execution_success/brillig_cow_regression/src/main.nr b/noir/noir-repo/test_programs/execution_success/brillig_cow_regression/src/main.nr index ba51548d9dd..1cae9b1ba41 100644 --- a/noir/noir-repo/test_programs/execution_success/brillig_cow_regression/src/main.nr +++ b/noir/noir-repo/test_programs/execution_success/brillig_cow_regression/src/main.nr @@ -8,9 +8,9 @@ global MAX_NEW_CONTRACTS_PER_TX: u64 = 1; global NUM_ENCRYPTED_LOGS_HASHES_PER_TX: u64 = 1; global NUM_UNENCRYPTED_LOGS_HASHES_PER_TX: u64 = 1; global NUM_FIELDS_PER_SHA256 = 2; -global CALLDATA_HASH_INPUT_SIZE = 169; -global CALL_DATA_HASH_LOG_FIELDS = 4; -global CALL_DATA_HASH_FULL_FIELDS = 165; +global TX_EFFECT_HASH_INPUT_SIZE = 169; +global TX_EFFECT_HASH_LOG_FIELDS = 4; +global TX_EFFECT_HASH_FULL_FIELDS = 165; struct PublicDataUpdateRequest { leaf_slot : Field, @@ -99,7 +99,7 @@ impl U256 { } unconstrained fn main(kernel_data: DataToHash) -> pub [Field; NUM_FIELDS_PER_SHA256] { - let mut calldata_hash_inputs = [0; CALLDATA_HASH_INPUT_SIZE]; + let mut tx_effects_hash_inputs = [0; TX_EFFECT_HASH_INPUT_SIZE]; let new_note_hashes = kernel_data.new_note_hashes; let new_nullifiers = kernel_data.new_nullifiers; @@ -111,65 +111,65 @@ unconstrained fn main(kernel_data: DataToHash) -> pub [Field; NUM_FIELDS_PER_SHA let mut offset = 0; for j in 0..MAX_NEW_NOTE_HASHES_PER_TX { - calldata_hash_inputs[offset + j] = new_note_hashes[j]; + tx_effects_hash_inputs[offset + j] = new_note_hashes[j]; } offset += MAX_NEW_NOTE_HASHES_PER_TX ; for j in 0..MAX_NEW_NULLIFIERS_PER_TX { - calldata_hash_inputs[offset + j] = new_nullifiers[j]; + tx_effects_hash_inputs[offset + j] = new_nullifiers[j]; } offset += MAX_NEW_NULLIFIERS_PER_TX ; for j in 0..MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX { - calldata_hash_inputs[offset + j * 2] = + tx_effects_hash_inputs[offset + j * 2] = public_data_update_requests[j].leaf_slot; - calldata_hash_inputs[offset + j * 2 + 1] = + tx_effects_hash_inputs[offset + j * 2 + 1] = public_data_update_requests[j].new_value; } offset += MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX * 2; for j in 0..MAX_NEW_L2_TO_L1_MSGS_PER_TX { - calldata_hash_inputs[offset + j] = newL2ToL1msgs[j]; + tx_effects_hash_inputs[offset + j] = newL2ToL1msgs[j]; } offset += MAX_NEW_L2_TO_L1_MSGS_PER_TX; let contract_leaf = kernel_data.new_contracts[0]; - calldata_hash_inputs[offset] = contract_leaf.hash(); + tx_effects_hash_inputs[offset] = contract_leaf.hash(); offset += MAX_NEW_CONTRACTS_PER_TX; let new_contracts = kernel_data.new_contracts; - calldata_hash_inputs[offset] = new_contracts[0].contract_address; + tx_effects_hash_inputs[offset] = new_contracts[0].contract_address; - calldata_hash_inputs[offset + 1] = new_contracts[0].portal_contract_address; + tx_effects_hash_inputs[offset + 1] = new_contracts[0].portal_contract_address; offset += MAX_NEW_CONTRACTS_PER_TX * 2; for j in 0..NUM_FIELDS_PER_SHA256 { - calldata_hash_inputs[offset + j] = encryptedLogsHash[j]; + tx_effects_hash_inputs[offset + j] = encryptedLogsHash[j]; } offset += NUM_ENCRYPTED_LOGS_HASHES_PER_TX * NUM_FIELDS_PER_SHA256; for j in 0..NUM_FIELDS_PER_SHA256 { - calldata_hash_inputs[offset + j] = unencryptedLogsHash[j]; + tx_effects_hash_inputs[offset + j] = unencryptedLogsHash[j]; } offset += NUM_UNENCRYPTED_LOGS_HASHES_PER_TX * NUM_FIELDS_PER_SHA256; - assert_eq(offset, CALLDATA_HASH_INPUT_SIZE); // Sanity check + assert_eq(offset, TX_EFFECT_HASH_INPUT_SIZE); // Sanity check - let mut hash_input_flattened = [0; CALL_DATA_HASH_FULL_FIELDS * 32 + CALL_DATA_HASH_LOG_FIELDS * 16]; - for offset in 0..CALL_DATA_HASH_FULL_FIELDS { - let input_as_bytes = calldata_hash_inputs[offset].to_be_bytes(32); + let mut hash_input_flattened = [0; TX_EFFECT_HASH_FULL_FIELDS * 32 + TX_EFFECT_HASH_LOG_FIELDS * 16]; + for offset in 0..TX_EFFECT_HASH_FULL_FIELDS { + let input_as_bytes = tx_effects_hash_inputs[offset].to_be_bytes(32); for byte_index in 0..32 { hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index]; } } - for log_field_index in 0..CALL_DATA_HASH_LOG_FIELDS { - let input_as_bytes = calldata_hash_inputs[CALL_DATA_HASH_FULL_FIELDS + log_field_index].to_be_bytes(16); + for log_field_index in 0..TX_EFFECT_HASH_LOG_FIELDS { + let input_as_bytes = tx_effects_hash_inputs[TX_EFFECT_HASH_FULL_FIELDS + log_field_index].to_be_bytes(16); for byte_index in 0..16 { - hash_input_flattened[CALL_DATA_HASH_FULL_FIELDS * 32 + log_field_index * 16 + byte_index] = input_as_bytes[byte_index]; + hash_input_flattened[TX_EFFECT_HASH_FULL_FIELDS * 32 + log_field_index * 16 + byte_index] = input_as_bytes[byte_index]; } } diff --git a/yarn-project/archiver/src/archiver/archiver.test.ts b/yarn-project/archiver/src/archiver/archiver.test.ts index 37bd20e82b5..6f5513b228f 100644 --- a/yarn-project/archiver/src/archiver/archiver.test.ts +++ b/yarn-project/archiver/src/archiver/archiver.test.ts @@ -82,14 +82,14 @@ describe('Archiver', () => { publicClient.getLogs .mockResolvedValueOnce(l1ToL2MessageAddedEvents.slice(0, 2).flat()) .mockResolvedValueOnce([]) // no messages to cancel - .mockResolvedValueOnce([makeTxsPublishedEvent(101n, blocks[0].body.getCalldataHash())]) + .mockResolvedValueOnce([makeTxsPublishedEvent(101n, blocks[0].body.getTxsEffectsHash())]) .mockResolvedValueOnce([makeL2BlockProcessedEvent(101n, 1n)]) .mockResolvedValueOnce([makeContractDeploymentEvent(103n, blocks[0])]) // the first loop of the archiver ends here at block 2500 .mockResolvedValueOnce(l1ToL2MessageAddedEvents.slice(2, 4).flat()) .mockResolvedValueOnce(makeL1ToL2MessageCancelledEvents(2503n, l1ToL2MessagesToCancel)) .mockResolvedValueOnce([ - makeTxsPublishedEvent(2510n, blocks[1].body.getCalldataHash()), - makeTxsPublishedEvent(2520n, blocks[2].body.getCalldataHash()), + makeTxsPublishedEvent(2510n, blocks[1].body.getTxsEffectsHash()), + makeTxsPublishedEvent(2520n, blocks[2].body.getTxsEffectsHash()), ]) .mockResolvedValueOnce([makeL2BlockProcessedEvent(2510n, 2n), makeL2BlockProcessedEvent(2520n, 3n)]) .mockResolvedValueOnce([makeContractDeploymentEvent(2540n, blocks[1])]) @@ -200,8 +200,8 @@ describe('Archiver', () => { }) .mockResolvedValueOnce([]) .mockResolvedValueOnce([ - makeTxsPublishedEvent(70n, blocks[0].body.getCalldataHash()), - makeTxsPublishedEvent(80n, blocks[1].body.getCalldataHash()), + makeTxsPublishedEvent(70n, blocks[0].body.getTxsEffectsHash()), + makeTxsPublishedEvent(80n, blocks[1].body.getTxsEffectsHash()), ]) .mockResolvedValueOnce([makeL2BlockProcessedEvent(70n, 1n), makeL2BlockProcessedEvent(80n, 2n)]) .mockResolvedValue([]); @@ -255,7 +255,7 @@ describe('Archiver', () => { ), ) .mockResolvedValueOnce([]) - .mockResolvedValueOnce([makeTxsPublishedEvent(101n, block.body.getCalldataHash())]) + .mockResolvedValueOnce([makeTxsPublishedEvent(101n, block.body.getTxsEffectsHash())]) .mockResolvedValueOnce([makeL2BlockProcessedEvent(101n, 1n)]) .mockResolvedValue([]); publicClient.getTransaction.mockResolvedValueOnce(publishTx); @@ -297,14 +297,14 @@ function makeL2BlockProcessedEvent(l1BlockNum: bigint, l2BlockNum: bigint) { /** * Makes a fake TxsPublished event for testing purposes. * @param l1BlockNum - L1 block number. - * @param txsHash - txsHash for the body. + * @param txsEffectsHash - txsEffectsHash for the body. * @returns A TxsPublished event log. */ -function makeTxsPublishedEvent(l1BlockNum: bigint, txsHash: Buffer) { +function makeTxsPublishedEvent(l1BlockNum: bigint, txsEffectsHash: Buffer) { return { blockNumber: l1BlockNum, args: { - txsHash: txsHash.toString('hex'), + txsEffectsHash: txsEffectsHash.toString('hex'), }, } as Log; } @@ -324,7 +324,7 @@ function makeContractDeploymentEvent(l1BlockNum: bigint, l2Block: L2Block) { l2BlockNum: BigInt(l2Block.number), aztecAddress: extendedContractData.contractData.contractAddress.toString(), portalAddress: extendedContractData.contractData.portalContractAddress.toString(), - l2BlockHash: `0x${l2Block.body.getCalldataHash().toString('hex')}`, + l2BlockHash: `0x${l2Block.body.getTxsEffectsHash().toString('hex')}`, contractClassId: extendedContractData.contractClassId.toString(), saltedInitializationHash: extendedContractData.saltedInitializationHash.toString(), publicKeyHash: extendedContractData.publicKeyHash.toString(), diff --git a/yarn-project/archiver/src/archiver/archiver.ts b/yarn-project/archiver/src/archiver/archiver.ts index 5b8138a0826..01063092229 100644 --- a/yarn-project/archiver/src/archiver/archiver.ts +++ b/yarn-project/archiver/src/archiver/archiver.ts @@ -260,7 +260,7 @@ export class Archiver implements ArchiveSource { ); const retrievedBodyHashes = retrievedBlockMetadata.retrievedData.map( - ([header]) => header.contentCommitment.txsHash, + ([header]) => header.contentCommitment.txsEffectsHash, ); const blockBodiesFromStore = await this.store.getBlockBodies(retrievedBodyHashes); @@ -289,7 +289,7 @@ export class Archiver implements ArchiveSource { // create the block number -> block hash mapping to ensure we retrieve the appropriate events const blockNumberToBodyHash: { [key: number]: Buffer | undefined } = {}; retrievedBlocks.retrievedData.forEach((block: L2Block) => { - blockNumberToBodyHash[block.number] = block.header.contentCommitment.txsHash; + blockNumberToBodyHash[block.number] = block.header.contentCommitment.txsEffectsHash; }); const retrievedContracts = await retrieveNewContractData( this.publicClient, diff --git a/yarn-project/archiver/src/archiver/archiver_store.ts b/yarn-project/archiver/src/archiver/archiver_store.ts index 252ec17e1e9..134c224cf00 100644 --- a/yarn-project/archiver/src/archiver/archiver_store.ts +++ b/yarn-project/archiver/src/archiver/archiver_store.ts @@ -48,12 +48,12 @@ export interface ArchiverDataStore { addBlockBodies(blockBodies: Body[]): Promise; /** - * Gets block bodies that have the same txsHashes as we supply. + * Gets block bodies that have the same txsEffectsHashes as we supply. * - * @param txsHashes - A list of txsHashes (body hashes). + * @param txsEffectsHashes - A list of txsEffectsHashes. * @returns The requested L2 block bodies */ - getBlockBodies(txsHashes: Buffer[]): Promise; + getBlockBodies(txsEffectsHashes: Buffer[]): Promise; /** * Gets up to `limit` amount of L2 blocks starting from `from`. diff --git a/yarn-project/archiver/src/archiver/eth_log_handlers.ts b/yarn-project/archiver/src/archiver/eth_log_handlers.ts index 40d73f75168..b24445a35e2 100644 --- a/yarn-project/archiver/src/archiver/eth_log_handlers.ts +++ b/yarn-project/archiver/src/archiver/eth_log_handlers.ts @@ -98,7 +98,7 @@ export async function processTxsPublishedLogs( const retrievedBlockBodies: [Body, Buffer][] = []; for (const log of logs) { const newBlockBody = await getBlockBodiesFromAvailabilityOracleTx(publicClient, log.transactionHash!); - retrievedBlockBodies.push([newBlockBody, Buffer.from(hexToBytes(log.args.txsHash))]); + retrievedBlockBodies.push([newBlockBody, Buffer.from(hexToBytes(log.args.txsEffectsHash))]); } return retrievedBlockBodies; diff --git a/yarn-project/archiver/src/archiver/kv_archiver_store/block_body_store.test.ts b/yarn-project/archiver/src/archiver/kv_archiver_store/block_body_store.test.ts index d86682fd7c3..f267eaef5f6 100644 --- a/yarn-project/archiver/src/archiver/kv_archiver_store/block_body_store.test.ts +++ b/yarn-project/archiver/src/archiver/kv_archiver_store/block_body_store.test.ts @@ -15,9 +15,9 @@ describe('Block Body Store', () => { await archiverStore.addBlockBodies([body]); - const txsHash = body.getCalldataHash(); + const txsEffectsHash = body.getTxsEffectsHash(); - const [returnedBody] = await archiverStore.getBlockBodies([txsHash]); + const [returnedBody] = await archiverStore.getBlockBodies([txsEffectsHash]); expect(body).toStrictEqual(returnedBody); }); diff --git a/yarn-project/archiver/src/archiver/kv_archiver_store/block_body_store.ts b/yarn-project/archiver/src/archiver/kv_archiver_store/block_body_store.ts index 12d7580ae83..11518efb113 100644 --- a/yarn-project/archiver/src/archiver/kv_archiver_store/block_body_store.ts +++ b/yarn-project/archiver/src/archiver/kv_archiver_store/block_body_store.ts @@ -17,7 +17,7 @@ export class BlockBodyStore { addBlockBodies(blockBodies: Body[]): Promise { return this.db.transaction(() => { for (const body of blockBodies) { - void this.#blockBodies.set(body.getCalldataHash().toString('hex'), body.toBuffer()); + void this.#blockBodies.set(body.getTxsEffectsHash().toString('hex'), body.toBuffer()); } return true; @@ -25,13 +25,13 @@ export class BlockBodyStore { } /** - * Gets a list of L2 block bodies with its associated txsHashes - * @param txsHashes - The txsHashes list that corresponds to the blockBodies we want to retrieve + * Gets a list of L2 block bodies with its associated txsEffectsHashes + * @param txsEffectsHashes - The txsEffectsHashes list that corresponds to the blockBodies we want to retrieve * @returns The requested L2 block bodies */ - async getBlockBodies(txsHashes: Buffer[]): Promise { + async getBlockBodies(txsEffectsHashes: Buffer[]): Promise { const blockBodiesBuffer = await this.db.transaction(() => - txsHashes.map(txsHash => this.#blockBodies.get(txsHash.toString('hex'))), + txsEffectsHashes.map(txsEffectsHash => this.#blockBodies.get(txsEffectsHash.toString('hex'))), ); if (blockBodiesBuffer.some(bodyBuffer => bodyBuffer === undefined)) { @@ -43,11 +43,11 @@ export class BlockBodyStore { /** * Gets an L2 block body. - * @param txsHash - The txHash of the the block body to return + * @param txsEffectsHash - The txHash of the the block body to return * @returns The requested L2 block body */ - getBlockBody(txsHash: Buffer): Body | undefined { - const blockBody = this.#blockBodies.get(txsHash.toString('hex')); + getBlockBody(txsEffectsHash: Buffer): Body | undefined { + const blockBody = this.#blockBodies.get(txsEffectsHash.toString('hex')); return blockBody && Body.fromBuffer(blockBody); } diff --git a/yarn-project/archiver/src/archiver/kv_archiver_store/block_store.ts b/yarn-project/archiver/src/archiver/kv_archiver_store/block_store.ts index 7ea9fd320a7..c581bd965ed 100644 --- a/yarn-project/archiver/src/archiver/kv_archiver_store/block_store.ts +++ b/yarn-project/archiver/src/archiver/kv_archiver_store/block_store.ts @@ -100,7 +100,7 @@ export class BlockStore { private getBlockFromBlockStorage(blockStorage: BlockStorage) { const header = Header.fromBuffer(blockStorage.header); const archive = AppendOnlyTreeSnapshot.fromBuffer(blockStorage.archive); - const body = this.#blockBodyStore.getBlockBody(header.contentCommitment.txsHash); + const body = this.#blockBodyStore.getBlockBody(header.contentCommitment.txsEffectsHash); if (body === undefined) { throw new Error('Body is not able to be retrieved from BodyStore'); diff --git a/yarn-project/archiver/src/archiver/kv_archiver_store/kv_archiver_store.ts b/yarn-project/archiver/src/archiver/kv_archiver_store/kv_archiver_store.ts index 5963cc1c56a..fba3d04c7da 100644 --- a/yarn-project/archiver/src/archiver/kv_archiver_store/kv_archiver_store.ts +++ b/yarn-project/archiver/src/archiver/kv_archiver_store/kv_archiver_store.ts @@ -83,11 +83,11 @@ export class KVArchiverDataStore implements ArchiverDataStore { /** * Gets block bodies that have the same txHashes as we supply. * - * @param txsHashes - A list of txsHashes (body hashes). + * @param txsEffectsHashes - A list of txsEffectsHashes (body hashes). * @returns The requested L2 block bodies */ - getBlockBodies(txsHashes: Buffer[]): Promise { - return this.#blockBodyStore.getBlockBodies(txsHashes); + getBlockBodies(txsEffectsHashes: Buffer[]): Promise { + return this.#blockBodyStore.getBlockBodies(txsEffectsHashes); } /** diff --git a/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts b/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts index 755be8eb8cf..15dbba4800e 100644 --- a/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts +++ b/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts @@ -132,7 +132,7 @@ export class MemoryArchiverStore implements ArchiverDataStore { */ addBlockBodies(blockBodies: Body[]): Promise { for (const body of blockBodies) { - void this.l2BlockBodies.set(body.getCalldataHash().toString('hex'), body); + void this.l2BlockBodies.set(body.getTxsEffectsHash().toString('hex'), body); } return Promise.resolve(true); @@ -141,11 +141,11 @@ export class MemoryArchiverStore implements ArchiverDataStore { /** * Gets block bodies that have the same txHashes as we supply. * - * @param txsHashes - A list of txsHashes (body hashes). + * @param txsEffectsHashes - A list of txsEffectsHashes (body hashes). * @returns The requested L2 block bodies */ - getBlockBodies(txsHashes: Buffer[]): Promise { - const blockBodies = txsHashes.map(txsHash => this.l2BlockBodies.get(txsHash.toString('hex'))); + getBlockBodies(txsEffectsHashes: Buffer[]): Promise { + const blockBodies = txsEffectsHashes.map(txsEffectsHash => this.l2BlockBodies.get(txsEffectsHash.toString('hex'))); if (blockBodies.some(bodyBuffer => bodyBuffer === undefined)) { throw new Error('Block body is undefined'); diff --git a/yarn-project/circuit-types/src/body.ts b/yarn-project/circuit-types/src/body.ts index e27a75371dd..9d1904b16d2 100644 --- a/yarn-project/circuit-types/src/body.ts +++ b/yarn-project/circuit-types/src/body.ts @@ -35,12 +35,11 @@ export class Body { } /** - * Computes the calldata hash for the L2 block - * This calldata hash is also computed by the rollup contract when the block is submitted, - * and inside the circuit, it is part of the public inputs. - * @returns The calldata hash. + * Computes the transactions effects hash for the L2 block + * This hash is also computed in the `AvailabilityOracle` and the `Circuit`. + * @returns The txs effects hash. */ - getCalldataHash() { + getTxsEffectsHash() { const computeRoot = (leafs: Buffer[]): Buffer => { const layers: Buffer[][] = [leafs]; let activeLayer = 0; diff --git a/yarn-project/circuit-types/src/l2_block.ts b/yarn-project/circuit-types/src/l2_block.ts index 42b84b26090..06cfe76e4a2 100644 --- a/yarn-project/circuit-types/src/l2_block.ts +++ b/yarn-project/circuit-types/src/l2_block.ts @@ -114,12 +114,12 @@ export class L2Block { numL1ToL2MessagesPerCall, ); - const txsHash = body.getCalldataHash(); + const txsEffectsHash = body.getTxsEffectsHash(); return L2Block.fromFields( { archive: makeAppendOnlyTreeSnapshot(1), - header: makeHeader(0, l2BlockNum, txsHash), + header: makeHeader(0, l2BlockNum, txsEffectsHash), body, }, // just for testing purposes, each random L2 block got emitted in the equivalent L1 block @@ -179,7 +179,7 @@ export class L2Block { this.header.state.partial.publicDataTree, this.header.state.l1ToL2MessageTree, this.archive, - this.body.getCalldataHash(), + this.body.getTxsEffectsHash(), this.getL1ToL2MessagesHash(), ); diff --git a/yarn-project/circuits.js/src/structs/content_commitment.ts b/yarn-project/circuits.js/src/structs/content_commitment.ts index cc2e0fc90c7..ac17d1b86f5 100644 --- a/yarn-project/circuits.js/src/structs/content_commitment.ts +++ b/yarn-project/circuits.js/src/structs/content_commitment.ts @@ -6,9 +6,9 @@ import { CONTENT_COMMITMENT_LENGTH } from '../constants.gen.js'; export const NUM_BYTES_PER_SHA256 = 32; export class ContentCommitment { - constructor(public txTreeHeight: Fr, public txsHash: Buffer, public inHash: Buffer, public outHash: Buffer) { - if (txsHash.length !== NUM_BYTES_PER_SHA256) { - throw new Error(`txsHash buffer must be ${NUM_BYTES_PER_SHA256} bytes`); + constructor(public txTreeHeight: Fr, public txsEffectsHash: Buffer, public inHash: Buffer, public outHash: Buffer) { + if (txsEffectsHash.length !== NUM_BYTES_PER_SHA256) { + throw new Error(`txsEffectsHash buffer must be ${NUM_BYTES_PER_SHA256} bytes`); } if (inHash.length !== NUM_BYTES_PER_SHA256) { throw new Error(`inHash buffer must be ${NUM_BYTES_PER_SHA256} bytes`); @@ -19,13 +19,13 @@ export class ContentCommitment { } toBuffer() { - return serializeToBuffer(this.txTreeHeight, this.txsHash, this.inHash, this.outHash); + return serializeToBuffer(this.txTreeHeight, this.txsEffectsHash, this.inHash, this.outHash); } toFields(): Fr[] { const serialized = [ this.txTreeHeight, - ...to2Fields(this.txsHash), + ...to2Fields(this.txsEffectsHash), ...to2Fields(this.inHash), ...to2Fields(this.outHash), ]; @@ -68,7 +68,7 @@ export class ContentCommitment { isEmpty(): boolean { return ( this.txTreeHeight.isZero() && - this.txsHash.equals(Buffer.alloc(NUM_BYTES_PER_SHA256)) && + this.txsEffectsHash.equals(Buffer.alloc(NUM_BYTES_PER_SHA256)) && this.inHash.equals(Buffer.alloc(NUM_BYTES_PER_SHA256)) && this.outHash.equals(Buffer.alloc(NUM_BYTES_PER_SHA256)) ); diff --git a/yarn-project/circuits.js/src/structs/rollup/base_or_merge_rollup_public_inputs.ts b/yarn-project/circuits.js/src/structs/rollup/base_or_merge_rollup_public_inputs.ts index 1aadc7a5b99..2b3e70c718c 100644 --- a/yarn-project/circuits.js/src/structs/rollup/base_or_merge_rollup_public_inputs.ts +++ b/yarn-project/circuits.js/src/structs/rollup/base_or_merge_rollup_public_inputs.ts @@ -39,10 +39,10 @@ export class BaseOrMergeRollupPublicInputs { */ public end: PartialStateReference, /** - * SHA256 hashes of calldata. Used to make public inputs constant-sized (to then be unpacked on-chain). + * SHA256 hashes of transactions effects. Used to make public inputs constant-sized (to then be unpacked on-chain). * Note: Length 2 for high and low. */ - public calldataHash: [Fr, Fr], + public txsEffectsHash: [Fr, Fr], /** * SHA256 hashes of outhash. Used to make public inputs constant-sized (to then be unpacked on-chain). * Note: Length 2 for high and low. @@ -84,7 +84,7 @@ export class BaseOrMergeRollupPublicInputs { this.start, this.end, - this.calldataHash, + this.txsEffectsHash, this.outHash, ); } diff --git a/yarn-project/circuits.js/src/tests/factories.ts b/yarn-project/circuits.js/src/tests/factories.ts index d16412fbc6a..3f5297457cd 100644 --- a/yarn-project/circuits.js/src/tests/factories.ts +++ b/yarn-project/circuits.js/src/tests/factories.ts @@ -1072,10 +1072,10 @@ export function makeRootRollupPublicInputs( /** * Makes content commitment */ -export function makeContentCommitment(seed = 0, txsHash: Buffer | undefined = undefined): ContentCommitment { +export function makeContentCommitment(seed = 0, txsEffectsHash: Buffer | undefined = undefined): ContentCommitment { return new ContentCommitment( new Fr(seed), - txsHash ?? toBufferBE(BigInt(seed + 0x100), NUM_BYTES_PER_SHA256), + txsEffectsHash ?? toBufferBE(BigInt(seed + 0x100), NUM_BYTES_PER_SHA256), toBufferBE(BigInt(seed + 0x200), NUM_BYTES_PER_SHA256), toBufferBE(BigInt(seed + 0x300), NUM_BYTES_PER_SHA256), ); @@ -1087,11 +1087,11 @@ export function makeContentCommitment(seed = 0, txsHash: Buffer | undefined = un export function makeHeader( seed = 0, blockNumber: number | undefined = undefined, - txsHash: Buffer | undefined = undefined, + txsEffectsHash: Buffer | undefined = undefined, ): Header { return new Header( makeAppendOnlyTreeSnapshot(seed + 0x100), - makeContentCommitment(seed + 0x200, txsHash), + makeContentCommitment(seed + 0x200, txsEffectsHash), makeStateReference(seed + 0x600), makeGlobalVariables((seed += 0x700), blockNumber), ); diff --git a/yarn-project/end-to-end/src/integration_l1_publisher.test.ts b/yarn-project/end-to-end/src/integration_l1_publisher.test.ts index d6e628aeb66..789755be1c2 100644 --- a/yarn-project/end-to-end/src/integration_l1_publisher.test.ts +++ b/yarn-project/end-to-end/src/integration_l1_publisher.test.ts @@ -102,7 +102,7 @@ describe('L1Publisher integration', () => { let feeRecipient: AztecAddress; // To overwrite the test data, set this to true and run the tests. - const OVERWRITE_TEST_DATA = false; + const OVERWRITE_TEST_DATA = true; beforeEach(async () => { deployerAccount = privateKeyToAccount(deployerPK); @@ -266,13 +266,13 @@ describe('L1Publisher integration', () => { // This should not be a problem for testing as long as the values are not larger than u32. archive: `0x${block.archive.root.toBuffer().toString('hex').padStart(64, '0')}`, body: `0x${block.body.toBuffer().toString('hex')}`, - calldataHash: `0x${block.body.getCalldataHash().toString('hex').padStart(64, '0')}`, + txsEffectsHash: `0x${block.body.getTxsEffectsHash().toString('hex').padStart(64, '0')}`, decodedHeader: { contentCommitment: { inHash: `0x${block.header.contentCommitment.inHash.toString('hex').padStart(64, '0')}`, outHash: `0x${block.header.contentCommitment.outHash.toString('hex').padStart(64, '0')}`, txTreeHeight: Number(block.header.contentCommitment.txTreeHeight.toBigInt()), - txsHash: `0x${block.header.contentCommitment.txsHash.toString('hex').padStart(64, '0')}`, + txsEffectsHash: `0x${block.header.contentCommitment.txsEffectsHash.toString('hex').padStart(64, '0')}`, }, globalVariables: { blockNumber: block.number, @@ -343,8 +343,8 @@ describe('L1Publisher integration', () => { topics: txLog.topics, }); - // We check that the txsHash in the TxsPublished event is as expected - expect(topics.args.txsHash).toEqual(`0x${body.getCalldataHash().toString('hex')}`); + // We check that the txsEffectsHash in the TxsPublished event is as expected + expect(topics.args.txsEffectsHash).toEqual(`0x${body.getTxsEffectsHash().toString('hex')}`); }); it(`Build ${numberOfConsecutiveBlocks} blocks of 4 bloated txs building on each other`, async () => { 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 08fea4b3629..4db3b7a346e 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 @@ -305,7 +305,7 @@ PrivateKernelInnerCircuitPublicInputs { "type": "Buffer", }, }, - "txsHash": { + "txsEffectsHash": { "data": [ 205, 51, @@ -35830,7 +35830,7 @@ PrivateKernelTailCircuitPublicInputs { "type": "Buffer", }, }, - "txsHash": { + "txsEffectsHash": { "data": [ 0, 0, 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 f50b9b83b0e..ab4badfafa7 100644 --- a/yarn-project/noir-protocol-circuits-types/src/type_conversion.ts +++ b/yarn-project/noir-protocol-circuits-types/src/type_conversion.ts @@ -1594,7 +1594,7 @@ export function mapBaseOrMergeRollupPublicInputsToNoir( constants: mapConstantRollupDataToNoir(baseOrMergeRollupPublicInputs.constants), start: mapPartialStateReferenceToNoir(baseOrMergeRollupPublicInputs.start), end: mapPartialStateReferenceToNoir(baseOrMergeRollupPublicInputs.end), - calldata_hash: mapTuple(baseOrMergeRollupPublicInputs.calldataHash, mapFieldToNoir), + txs_effects_hash: mapTuple(baseOrMergeRollupPublicInputs.txsEffectsHash, mapFieldToNoir), out_hash: mapTuple(baseOrMergeRollupPublicInputs.outHash, mapFieldToNoir), }; } @@ -1642,7 +1642,7 @@ export function mapBaseOrMergeRollupPublicInputsFromNoir( mapConstantRollupDataFromNoir(baseOrMergeRollupPublicInputs.constants), mapPartialStateReferenceFromNoir(baseOrMergeRollupPublicInputs.start), mapPartialStateReferenceFromNoir(baseOrMergeRollupPublicInputs.end), - mapTupleFromNoir(baseOrMergeRollupPublicInputs.calldata_hash, 2, mapFieldFromNoir), + mapTupleFromNoir(baseOrMergeRollupPublicInputs.txs_effects_hash, 2, mapFieldFromNoir), mapTupleFromNoir(baseOrMergeRollupPublicInputs.out_hash, 2, mapFieldFromNoir), ); } @@ -1763,7 +1763,7 @@ export function mapHeaderFromNoir(header: HeaderNoir): Header { export function mapContentCommitmentToNoir(contentCommitment: ContentCommitment): ContentCommitmentNoir { return { tx_tree_height: mapFieldToNoir(contentCommitment.txTreeHeight), - txs_hash: mapSha256HashToNoir(contentCommitment.txsHash), + txs_effects_hash: mapSha256HashToNoir(contentCommitment.txsEffectsHash), in_hash: mapSha256HashToNoir(contentCommitment.inHash), out_hash: mapSha256HashToNoir(contentCommitment.outHash), }; @@ -1776,7 +1776,7 @@ export function mapContentCommitmentToNoir(contentCommitment: ContentCommitment) export function mapContentCommitmentFromNoir(contentCommitment: ContentCommitmentNoir): ContentCommitment { return new ContentCommitment( mapFieldFromNoir(contentCommitment.tx_tree_height), - mapSha256HashFromNoir(contentCommitment.txs_hash), + mapSha256HashFromNoir(contentCommitment.txs_effects_hash), mapSha256HashFromNoir(contentCommitment.in_hash), mapSha256HashFromNoir(contentCommitment.out_hash), ); 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 0830546e859..23e6e4ad6bb 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 @@ -267,7 +267,7 @@ describe('sequencer/solo_block_builder', () => { // Now we update can make the final header, compute the block hash and update archive rootRollupOutput.header.globalVariables = globalVariables; - rootRollupOutput.header.contentCommitment.txsHash = l2Block.body.getCalldataHash(); + rootRollupOutput.header.contentCommitment.txsEffectsHash = l2Block.body.getTxsEffectsHash(); rootRollupOutput.header.state = await getStateReference(); await updateArchive(); diff --git a/yarn-project/sequencer-client/src/block_builder/solo_block_builder.ts b/yarn-project/sequencer-client/src/block_builder/solo_block_builder.ts index 6e939636be1..ad32c4bc608 100644 --- a/yarn-project/sequencer-client/src/block_builder/solo_block_builder.ts +++ b/yarn-project/sequencer-client/src/block_builder/solo_block_builder.ts @@ -138,11 +138,11 @@ export class SoloBlockBuilder implements BlockBuilder { body: blockBody, }); - if (!l2Block.body.getCalldataHash().equals(circuitsOutput.header.contentCommitment.txsHash)) { + if (!l2Block.body.getTxsEffectsHash().equals(circuitsOutput.header.contentCommitment.txsEffectsHash)) { throw new Error( - `Calldata hash mismatch, ${l2Block.body - .getCalldataHash() - .toString('hex')} == ${circuitsOutput.header.contentCommitment.txsHash.toString('hex')} `, + `Txs effects hash mismatch, ${l2Block.body + .getTxsEffectsHash() + .toString('hex')} == ${circuitsOutput.header.contentCommitment.txsEffectsHash.toString('hex')} `, ); } diff --git a/yarn-project/sequencer-client/src/publisher/l1-publisher.test.ts b/yarn-project/sequencer-client/src/publisher/l1-publisher.test.ts index dbac50feb63..d66e92757df 100644 --- a/yarn-project/sequencer-client/src/publisher/l1-publisher.test.ts +++ b/yarn-project/sequencer-client/src/publisher/l1-publisher.test.ts @@ -15,7 +15,7 @@ describe('L1Publisher', () => { let header: Buffer; let archive: Buffer; - let txsHash: Buffer; + let txsEffectsHash: Buffer; let body: Buffer; let proof: Buffer; @@ -26,7 +26,7 @@ describe('L1Publisher', () => { header = l2Block.header.toBuffer(); archive = l2Block.archive.root.toBuffer(); - txsHash = l2Block.body.getCalldataHash(); + txsEffectsHash = l2Block.body.getTxsEffectsHash(); body = l2Block.body.toBuffer(); proof = Buffer.alloc(0); @@ -37,7 +37,7 @@ describe('L1Publisher', () => { publishTxReceipt = { transactionHash: publishTxHash, status: true, - logs: [{ data: txsHash.toString('hex') }], + logs: [{ data: txsEffectsHash.toString('hex') }], } as MinimalTransactionReceipt; processTxReceipt = { transactionHash: processTxHash, diff --git a/yarn-project/sequencer-client/src/publisher/l1-publisher.ts b/yarn-project/sequencer-client/src/publisher/l1-publisher.ts index 01a2c070cbf..26a6ea64975 100644 --- a/yarn-project/sequencer-client/src/publisher/l1-publisher.ts +++ b/yarn-project/sequencer-client/src/publisher/l1-publisher.ts @@ -172,15 +172,15 @@ export class L1Publisher implements L2BlockReceiver { } if (receipt.status) { - let txsHash; + let txsEffectsHash; if (receipt.logs.length === 1) { - // txsHash from IAvailabilityOracle.TxsPublished event - txsHash = receipt.logs[0].data; + // txsEffectsHash from IAvailabilityOracle.TxsPublished event + txsEffectsHash = receipt.logs[0].data; } else { this.log(`Expected 1 log, got ${receipt.logs.length}`); } - this.log.info(`Block txs effects published, txsHash: ${txsHash}`); + this.log.info(`Block txs effects published, txsEffectsHash: ${txsEffectsHash}`); break; } diff --git a/yarn-project/sequencer-client/src/publisher/viem-tx-sender.ts b/yarn-project/sequencer-client/src/publisher/viem-tx-sender.ts index 1593297d5c5..cecaa20b453 100644 --- a/yarn-project/sequencer-client/src/publisher/viem-tx-sender.ts +++ b/yarn-project/sequencer-client/src/publisher/viem-tx-sender.ts @@ -87,7 +87,7 @@ export class ViemTxSender implements L1PublisherTxSender { } checkIfTxsAreAvailable(block: L2Block): Promise { - const args = [`0x${block.body.getCalldataHash().toString('hex')}`] as const; + const args = [`0x${block.body.getTxsEffectsHash().toString('hex')}`] as const; return this.availabilityOracleContract.read.isAvailable(args); } diff --git a/yarn-project/sequencer-client/src/sequencer/sequencer.test.ts b/yarn-project/sequencer-client/src/sequencer/sequencer.test.ts index ffe8bf2b2eb..5ee994cd26d 100644 --- a/yarn-project/sequencer-client/src/sequencer/sequencer.test.ts +++ b/yarn-project/sequencer-client/src/sequencer/sequencer.test.ts @@ -257,7 +257,7 @@ describe('sequencer', () => { ); // check that the empty contract did not get published - expect(publisher.processNewContractData).toHaveBeenCalledWith(block.number, block.body.getCalldataHash(), [ + expect(publisher.processNewContractData).toHaveBeenCalledWith(block.number, block.body.getTxsEffectsHash(), [ txWithContract.newContracts[0], ]); }); diff --git a/yarn-project/sequencer-client/src/sequencer/sequencer.ts b/yarn-project/sequencer-client/src/sequencer/sequencer.ts index c44f11a1c3c..4a34b685751 100644 --- a/yarn-project/sequencer-client/src/sequencer/sequencer.ts +++ b/yarn-project/sequencer-client/src/sequencer/sequencer.ts @@ -255,12 +255,12 @@ export class Sequencer { return; } - const blockCalldataHash = block.body.getCalldataHash(); + const txsEffectsHash = block.body.getTxsEffectsHash(); this.log.info(`Publishing ${newContracts.length} contracts in block ${block.number}`); const publishedContractData = await this.publisher.processNewContractData( block.number, - blockCalldataHash, + txsEffectsHash, newContracts, );